小小儁爺
2024-06-19 f2cf3c86f4c76ac5471c4c8bccb0c6dab5e0b280
1.工单 工序 设备sop 查看开发
已修改8个文件
352 ■■■■■ 文件已修改
src/api/DeviceManager.js 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/WorkOrder.js 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/deviceManager/deviceList.vue 119 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/sopManager/sopDevice.vue 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/sopManager/sopRoute.vue 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/sopManager/sopWorkOrder.vue 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/systemSetting/processSetting.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/workOrder/workOrderList.vue 156 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/DeviceManager.js
@@ -26,6 +26,7 @@
    params: data
  })
}
// 设备列表查询
export function DeviceMangerSearch(data) {
  return request({
@@ -34,6 +35,16 @@
    params: data
  })
}
// 设备信息查看SOP
export function DeviceSopSearch(data) {
  return request({
    url: 'DeviceManager/DeviceSopSearch',
    method: 'get',
    params: data
  })
}
// 设备清单新增编辑
export function AddUpdateDeviceManger(data) {
  return request({
@@ -42,6 +53,7 @@
    data
  })
}
// 设备信息删除
export function DeleteDeviceManger(data) {
  return request({
@@ -68,6 +80,7 @@
    data
  })
}
// 设备点检项删除
export function DeleteDeviceCheckItem(data) {
  return request({
@@ -76,6 +89,7 @@
    params: data
  })
}
// 设备保养项列表查询
export function DeviceMaiItemSearch(data) {
  return request({
@@ -84,6 +98,7 @@
    params: data
  })
}
// 设备保养项新增编辑
export function AddUpdateDeviceMaiItem(data) {
  return request({
@@ -92,6 +107,7 @@
    data
  })
}
// 设备保养项删除
export function DeleteDeviceMaiItem(data) {
  return request({
@@ -100,6 +116,7 @@
    params: data
  })
}
// 设备点检标准列表查询
export function DeviceCheckStandArdSearch(data) {
  return request({
@@ -108,6 +125,7 @@
    params: data
  })
}
// 设备点检标准新增、编辑获取检验项目下拉列表
export function DeviceCheckItemSelect() {
  return request({
@@ -115,6 +133,7 @@
    method: 'get'
  })
}
// 设备点检标准编辑/查看获取数据
export function ViewDeviceCheckStanedSearch(data) {
  return request({
@@ -123,6 +142,7 @@
    params: data
  })
}
// 设备点检标准新增编辑
export function AddUpdateDeviceCheckStandArd(data, opertype) {
  return request({
@@ -131,6 +151,7 @@
    data
  })
}
// 设备点检标准删除
export function DeleteDeviceCheckStaned(data) {
  return request({
@@ -139,6 +160,7 @@
    params: data
  })
}
// 设备点检标准关联工作站查询
export function DeviceCheckStanedAssociationEqp(data) {
  return request({
@@ -147,6 +169,7 @@
    params: data
  })
}
// 设备点检标准关联工作站提交
export function SaveDeviceCheckStanedAssociationEqp(data, checkstand_code) {
  return request({
@@ -155,6 +178,7 @@
    data
  })
}
// 设备保养标准列表查询
export function DeviceRepairStandArdSearch(data) {
  return request({
@@ -163,6 +187,7 @@
    params: data
  })
}
// 设备保养标准新增、编辑获取保养项目下拉列表
export function DeviceRepairItemSelect() {
  return request({
@@ -170,6 +195,7 @@
    method: 'get'
  })
}
// 设备保养标准编辑/查看获取数据
export function ViewDeviceRepairStanedSearch(data) {
  return request({
@@ -178,6 +204,7 @@
    params: data
  })
}
// 设备保养标准新增编辑
export function AddUpdateDeviceRepairStandArd(data, opertype) {
  return request({
@@ -186,6 +213,7 @@
    data
  })
}
// 设备保养标准删除
export function DeleteDeviceRepairStaned(data) {
  return request({
@@ -194,6 +222,7 @@
    params: data
  })
}
// 设备保养标准关联工作站查询
export function DeviceRepairStanedAssociationEqp(data) {
  return request({
@@ -202,6 +231,7 @@
    params: data
  })
}
// 设备保养标准关联工作站提交
export function SaveDeviceRepairStanedAssociationEqp(data, repairstand_code) {
  return request({
@@ -264,6 +294,7 @@
    params: data
  })
}
// 设备维修记录查询
export function DeviceUpdateSearch(data) {
  return request({
@@ -272,6 +303,7 @@
    params: data
  })
}
// 设备维修记录明细查询
export function DeviceUpdateSubSearch(data) {
  return request({
@@ -280,6 +312,7 @@
    params: data
  })
}
// 设备维修记录下载
export function DeviceUpdateOutExcel(data) {
  return request({
src/api/WorkOrder.js
@@ -97,6 +97,24 @@
  })
}
// MES工单查看工单SOP
export function MesOrderSopSearch(data) {
  return request({
    url: 'WorkOrder/MesOrderSopSearch',
    method: 'get',
    params: data
  })
}
// MES工单查看工艺SOP
export function MesOrderProcessSopSearch(data) {
  return request({
    url: 'WorkOrder/MesOrderProcessSopSearch',
    method: 'get',
    params: data
  })
}
// 工单派发
export function MesOrderDistribution(data) {
  return request({
src/views/deviceManager/deviceList.vue
@@ -63,7 +63,13 @@
        >
          <div class="bodyTopButtonGroup" style="justify-content: space-between">
            <el-button v-waves type="primary" icon="el-icon-circle-plus-outline" @click="add('add')">新增</el-button>
            <el-button v-waves type="success" icon="el-icon-download" @click="$router.push('./../systemSetting/dataImport?fileCode=9')">导入</el-button>
            <el-button
              v-waves
              type="success"
              icon="el-icon-download"
              @click="$router.push('./../systemSetting/dataImport?fileCode=9')"
            >导入
            </el-button>
          </div>
          <div class="bodyTopFormGroup">
@@ -128,7 +134,13 @@
                class="bodySearchReset"
                :style="{marginLeft:$store.state.app.sidebar.opened? $store.state.settings.menuIsHorizontal?'15%':'3%':'10%'}"
              >
                <el-button v-waves type="primary" icon="el-icon-search" @click="getDeviceMangerSearch($refs.treeLeftRef.getCurrentNode())">查询</el-button>
                <el-button
                  v-waves
                  type="primary"
                  icon="el-icon-search"
                  @click="getDeviceMangerSearch($refs.treeLeftRef.getCurrentNode())"
                >查询
                </el-button>
                <el-button v-waves type="info" icon="el-icon-refresh" @click="reset">重置</el-button>
              </div>
            </el-form>
@@ -225,6 +237,15 @@
              >
                <template slot-scope="{row}">
                  <div class="operationClass">
                    <el-tooltip v-del-tab-index class="item" effect="dark" content="SOP预览" placement="top">
                      <i
                        v-if="mesSetting.device"
                        class="el-icon-files"
                        style="cursor: pointer;color:#42b983;margin-right: 15px"
                        @click="pre(row)"
                      />
                    </el-tooltip>
                    <el-tooltip class="item" effect="dark" content="编辑" placement="top">
                      <i
                        class="el-icon-edit-outline"
@@ -361,6 +382,63 @@
      </span>
    </el-dialog>
    <!--    sop预览-->
    <el-dialog
      v-el-drag-dialog
      title="设备SOP预览"
      :visible.sync="SopDialogVisible"
      width="800px"
      :close-on-click-modal="false"
      top="15vh"
      @closed="handleSopClose"
      @close="handleSopClose"
    >
      <el-form ref="dialogClassForm" inline :rules="dialogClassFormRules" :model="dialogClassForm" label-width="110px">
        <el-form-item label="设备SOP">
          <el-select
            v-model="dialogSopForm.sop"
            style="width:200px"
            placeholder="请选择"
            filterable
            :popper-append-to-body="false"
            @change="sopChange"
          >
            <el-option
              v-for="item in sopArr"
              :key="item.filepath"
              :label="item.filename"
              :value="item.filepath"
            />
          </el-select>
        </el-form-item>
        <el-form-item label="Sop版本">
          <el-input v-model="dialogSopForm.v" disabled style="width: 200px" />
        </el-form-item>
      </el-form>
      <el-button
        v-waves
        type="primary"
        style="margin-left: 37px"
        @click="view"
      >预 览/下 载</el-button>
      <span slot="footer" class="dialog-footer">
        <div class="footerButton">
          <el-button v-waves @click="handleSopClose">取 消</el-button>
          <!--          <el-button-->
          <!--            v-waves-->
          <!--            type="primary"-->
          <!--            :loading="$store.state.app.buttonIsDisabled"-->
          <!--            :disabled="$store.state.app.buttonIsDisabled"-->
          <!--            @click="handleSopConfirm"-->
          <!--          >确 定</el-button>-->
        </div>
      </span>
    </el-dialog>
  </div>
</template>
@@ -375,7 +453,7 @@
  AddUpdateDeviceManger,
  AddUpdateDeviceType, DeleteDeviceManger,
  DeleteDeviceType,
  DeviceMangerSearch,
  DeviceMangerSearch, DeviceSopSearch,
  DeviceTypeSearch
} from '@/api/DeviceManager'
@@ -387,6 +465,7 @@
  },
  data() {
    return {
      mesSetting: JSON.parse(localStorage.getItem('mesSetting')),
      mouseHoverType: 'mouseout',
      isExpandForm: false,
      mainHeight: 0,
@@ -469,8 +548,14 @@
        storgcode: [
          { required: true, message: '请选择所属组织', trigger: ['blur', 'change'] }
        ]
      },
      }
      SopDialogVisible: false,
      dialogSopForm: { // 设备SOP表单
        sop: '',
        v: ''
      },
      sopArr: []
    }
  },
@@ -486,6 +571,32 @@
    this.getPrentOrganization()
  },
  methods: {
    // 弹出框关闭
    handleSopClose() {
      this.SopDialogVisible = false
      this.dialogSopForm = { // 设备SOP表单
        sop: '',
        v: ''
      }
    },
    // 预览
    view() {
      window.open(process.env.VUE_APP_BASE_API_FILE + this.dialogSopForm.sop)
    },
    // sop预览
    async pre(row) {
      const data = {
        eqptypecode: row.eqptype_code,
        eqpcode: row.code
      }
      const { data: res } = await DeviceSopSearch(data)
      this.sopArr = res
      this.SopDialogVisible = true
    },
    sopChange(val) {
      this.dialogSopForm.v = this.sopArr.find(i => i.filepath === val).version
    },
    async getDeviceTypeSearch() {
      const res = await DeviceTypeSearch()
      res.data.forEach(i => {
src/views/sopManager/sopDevice.vue
@@ -228,8 +228,8 @@
              :on-exceed="handleExceed"
              :auto-upload="false"
              :multiple="false"
              accept=".mp4,.pdf,.png,.jpeg,.svg,.txt,.xlsx,.xls"
            >
              <!--              accept=".mp4,.pdf"-->
              <el-button
                v-waves
                type="primary"
@@ -368,6 +368,7 @@
    handleExceed() {
      this.$message.info('暂不支持多文件上传!')
    },
    async devicetypecodeChange(eqptypecode) {
      const { data: res } = await EqpTypecodeSeachEqpPermissions({ eqptypecode })
      this.deviceArr = res
@@ -432,8 +433,14 @@
    // 对话框确认
    dialogVisibleConfirm() {
      console.log(this.$refs.uploadFileRef.uploadFiles[0])
      if (!this.$refs.uploadFileRef.uploadFiles[0]) {
        this.$message.info('请选择文件上传!')
        return this.$message.info('请选择文件上传!')
      }
      const isLt100M = this.$refs.uploadFileRef.uploadFiles[0].size / 1024 / 1024 <= 1024
      if (!isLt100M) {
        return this.$message.info('请检查,上传文件大小不能超过1024MB!')
      }
      this.$refs.dialogForm.validate(valid => {
src/views/sopManager/sopRoute.vue
@@ -203,7 +203,7 @@
            <el-option
              v-for="item in partcodeArr"
              :key="item.partcode"
              :label="item.partname"
              :label="item.partname+' / '+item.partcode"
              :value="item.partcode"
            />
          </el-select>
@@ -279,6 +279,7 @@
              :on-exceed="handleExceed"
              :auto-upload="false"
              :multiple="false"
              accept=".mp4,.pdf,.png,.jpeg,.svg,.txt,.xlsx,.xls"
            >
              <!--              accept=".mp4,.pdf"-->
              <el-button
@@ -525,6 +526,11 @@
        this.$message.info('请选择文件上传!')
      }
      const isLt100M = this.$refs.uploadFileRef.uploadFiles[0].size / 1024 / 1024 <= 1024
      if (!isLt100M) {
        return this.$message.info('请检查,上传文件大小不能超过1024MB!')
      }
      this.$refs.dialogForm.validate(valid => {
        if (valid) {
          const formData = new FormData()
src/views/sopManager/sopWorkOrder.vue
@@ -236,6 +236,7 @@
              :on-exceed="handleExceed"
              :auto-upload="false"
              :multiple="false"
              accept=".mp4,.pdf,.png,.jpeg,.svg,.txt,.xlsx,.xls"
            >
              <!--              accept=".mp4,.pdf"-->
              <el-button
@@ -463,6 +464,11 @@
        this.$message.info('请选择文件上传!')
      }
      const isLt100M = this.$refs.uploadFileRef.uploadFiles[0].size / 1024 / 1024 <= 1024
      if (!isLt100M) {
        return this.$message.info('请检查,上传文件大小不能超过1024MB!')
      }
      this.$refs.dialogForm.validate(valid => {
        if (valid) {
          const formData = new FormData()
src/views/systemSetting/processSetting.vue
@@ -138,6 +138,7 @@
        this.route = mesSetting.route
        this.isOrder = mesSetting.isOrder
        this.device = mesSetting.device
        this.tech = mesSetting.tech
        this.workOrder = mesSetting.workOrder
        this.every = mesSetting.every
src/views/workOrder/workOrderList.vue
@@ -351,6 +351,16 @@
          >
            <template slot-scope="{row}">
              <div class="operationClass">
                <el-tooltip v-del-tab-index class="item" effect="dark" content="SOP预览" placement="top">
                  <i
                    v-if="mesSetting.workOrder"
                    class="el-icon-files"
                    style="cursor: pointer;color:#42b983;margin-right: 15px"
                    @click="pre(row,1)"
                  />
                </el-tooltip>
                <el-tooltip class="item" effect="dark" content="修改" placement="top">
                  <i
                    class="el-icon-edit-outline"
@@ -491,13 +501,21 @@
            show-tooltip-when-overflow
            prop="delive_qty"
          />
          <!--          <el-table-column-->
          <!--            label="操作"-->
          <!--            width="120"-->
          <!--            fixed="right"-->
          <!--          >-->
          <!--            <template slot-scope="{row}">-->
          <!--              <div class="operationClass">-->
          <el-table-column
            label="操作"
            width="120"
            fixed="right"
          >
            <template slot-scope="{row}">
              <div class="operationClass">
                <el-tooltip v-del-tab-index class="item" effect="dark" content="SOP预览" placement="top">
                  <i
                    v-if="mesSetting.tech"
                    class="el-icon-files"
                    style="cursor: pointer;color:#42b983;margin-right: 15px"
                    @click="pre(row,2)"
                  />
                </el-tooltip>
          <!--                <el-tooltip class="item" effect="dark" content="打印工序" placement="top">-->
          <!--                  <i-->
          <!--                    v-if="tableDataDetail.length!==row.seq"-->
@@ -516,9 +534,9 @@
          <!--                    @click="getProductInHouseLabCode(row.wo_code)"-->
          <!--                  />-->
          <!--                </el-tooltip>-->
          <!--              </div>-->
          <!--            </template>-->
          <!--          </el-table-column>-->
              </div>
            </template>
          </el-table-column>
        </el-table>
      </div>
    </div>
@@ -2024,6 +2042,64 @@
      </span>
    </el-dialog>
    <!--    工单sop/工序sop-->
    <el-dialog
      v-el-drag-dialog
      class="sop"
      title="设备SOP预览"
      :visible.sync="SopDialogVisible"
      width="800px"
      :close-on-click-modal="false"
      top="15vh"
      @closed="handleSopClose"
      @close="handleSopClose"
    >
      <el-form inline label-width="110px" style="display:flex">
        <el-form-item label="工单SOP">
          <el-select
            v-model="dialogSopForm.sop"
            style="width:200px"
            placeholder="请选择"
            filterable
            :popper-append-to-body="false"
            @change="sopChange"
          >
            <el-option
              v-for="item in sopArr"
              :key="item.filepath"
              :label="item.filename"
              :value="item.filepath"
            />
          </el-select>
        </el-form-item>
        <el-form-item label="Sop版本">
          <el-input v-model="dialogSopForm.v" disabled style="width: 200px" />
        </el-form-item>
      </el-form>
      <el-button
        v-waves
        type="primary"
        style="margin-left: 37px"
        @click="view"
      >预 览/下 载</el-button>
      <span slot="footer" class="dialog-footer">
        <div class="footerButton">
          <el-button v-waves @click="handleSopClose">取 消</el-button>
          <!--          <el-button-->
          <!--            v-waves-->
          <!--            type="primary"-->
          <!--            :loading="$store.state.app.buttonIsDisabled"-->
          <!--            :disabled="$store.state.app.buttonIsDisabled"-->
          <!--            @click="handleSopConfirm"-->
          <!--          >确 定</el-button>-->
        </div>
      </span>
    </el-dialog>
  </div>
</template>
@@ -2038,8 +2114,8 @@
import {
  AddMesOrderCodeSearch,
  AddUpdateMesOrder, DeleteMesOrder,
  MesBadOrderSearch, MesOrderDistribution, MesOrderNewStepContent,
  MesOrderSearch,
  MesBadOrderSearch, MesOrderDistribution, MesOrderNewStepContent, MesOrderProcessSopSearch,
  MesOrderSearch, MesOrderSopSearch,
  UpdateMesOrderStepSearch
} from '@/api/WorkOrder'
import { PartSelect } from '@/api/ProductModel'
@@ -2049,6 +2125,7 @@
import { MesOrderPrintSearch } from '@/api/GridReport' // base on element-ui
import DateType from '@/components/DateType'
import { PartSelectRpute, RouteSelectStep } from '@/api/basicSettings'
import { DeviceSopSearch } from '@/api/DeviceManager'
export default {
  name: 'WorkOrderList',
  components: {
@@ -2316,8 +2393,16 @@
      sourceType: false, // 工序的数据来源
      mesSetting: JSON.parse(localStorage.getItem('mesSetting'))
      mesSetting: JSON.parse(localStorage.getItem('mesSetting')),
      SopDialogVisible: false,
      dialogSopForm: { // 设备SOP表单
        sop: '',
        v: ''
      },
      sopArr: [],
      routeCode: '', // 工艺路线code
      partCode: ''
    }
  },
  watch: {
@@ -2353,6 +2438,43 @@
    // })
  },
  methods: {
    // 弹出框关闭
    handleSopClose() {
      this.SopDialogVisible = false
      this.dialogSopForm = { // 设备SOP表单
        sop: '',
        v: ''
      }
    },
    // 预览
    view() {
      window.open(process.env.VUE_APP_BASE_API_FILE + this.dialogSopForm.sop)
    },
    sopChange(val) {
      this.dialogSopForm.v = this.sopArr.find(i => i.filepath === val).version
    },
    async pre(row, type) {
      if (type === 1) {
        const data = {
          wocode: row.wo_code,
          materielcode: row.partcode
        }
        const { data: res } = await MesOrderSopSearch(data)
        this.sopArr = res
      }
      if (type === 2) {
        const data = {
          materielcode: this.partCode,
          routecode: this.routeCode ? this.routeCode : '',
          stepcode: row.step_code
        }
        const { data: res } = await MesOrderProcessSopSearch(data)
        this.sopArr = res
      }
      this.SopDialogVisible = true
    },
    // 工序来源切换
    sourceTypeChange(val) {
      this.stepTableData = []
@@ -3316,6 +3438,8 @@
    },
    //  行点击事件
    async rowClick(row, event, column) {
      this.routeCode = row.route_code ? row.route_code : ''
      this.partCode = row.partcode ? row.partcode : ''
      const data = {
        sourceid: row.sourceid,
        sourcewo: row.m_po,
@@ -3475,6 +3599,12 @@
  padding: 20px 100px !important;
}
.sop {
  ::v-deep .el-dialog__body {
    padding: 50px 80px !important;
  }
}
.dialogVisibleSearch ::v-deep .el-dialog__body {
  padding: 20px 20px !important;
}