小小儁爺
2024-06-07 c5a0472e558cb269e133f9ca58e4be82c334031d
1.设备SOP开发完成
已添加1个文件
已修改2个文件
228 ■■■■ 文件已修改
src/api/GeneralBasicData.js 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/SopManager.js 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/sopManager/sopDevice.vue 190 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/GeneralBasicData.js
@@ -163,3 +163,13 @@
    params: data
  })
}
// è®¾å¤‡ç±»åž‹ç¼–码查找设备信息
export function EqpTypecodeSeachEqpPermissions(data) {
  return request({
    url: 'GeneralBasicData/EqpTypecodeSeachEqpPermissions',
    method: 'get',
    params: data
  })
}
src/api/SopManager.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,28 @@
import request from '@/utils/request'
// ç³»ç»Ÿè®¾ç½®,设备SOP查询
export function DeviceSopSearch(data) {
  return request({
    url: 'SopManageMent/DeviceSopSearch',
    method: 'get',
    params: data
  })
}
// ç³»ç»Ÿè®¾ç½®,设备SOP新增
export function DeviceSopAddSeave(data) {
  return request({
    url: 'SopManageMent/DeviceSopAddSeave',
    method: 'post',
    data
  })
}
// ç³»ç»Ÿè®¾ç½®,设备SOP删除
export function DeviceSopDeleteSeave(data) {
  return request({
    url: 'SopManageMent/DeviceSopDeleteSeave',
    method: 'post',
    params: data
  })
}
src/views/sopManager/sopDevice.vue
@@ -39,81 +39,59 @@
          @sort-change="sortChange"
        >
          <el-table-column
            prop="RowNum"
            prop="rowNum"
            width="50"
            fixed
            label="序号"
          />
          <el-table-column
            prop="define_name"
            prop="filename"
            label="文件名称"
            min-width="160"
            show-tooltip-when-overflow
            sortable="custom"
          >
            <template slot-scope="{row}">
              <div v-if="row.define_name">{{ row.define_name }}</div>
              <div v-if="row.filename">{{ row.filename }}</div>
              <div v-else>/</div>
            </template>
          </el-table-column>
          <el-table-column
            prop="filetype_name"
            prop="filetypename"
            label="文件类型"
            min-width="110"
            sortable="custom"
          >
            <template slot-scope="{row}">
              <div v-if="row.filetype_name">{{ row.filetype_name }}</div>
              <div v-if="row.filetypename">{{ row.filetypename }}</div>
              <div v-else>/</div>
            </template>
          </el-table-column>
          <el-table-column
            prop="file_version"
            prop="version"
            label="版本号"
            min-width="110"
            sortable="custom"
          >
            <template slot-scope="{row}">
              <div v-if="row.file_version">{{ row.file_version }}</div>
              <div v-if="row.version">{{ row.version }}</div>
              <div v-else>/</div>
            </template>
          </el-table-column>
          <el-table-column
            prop="partcode"
            label="物料编码"
            min-width="110"
            show-tooltip-when-overflow
            sortable="custom"
          >
            <template slot-scope="{row}">
              <div v-if="row.partcode">{{ row.partcode }}</div>
              <div v-else>/</div>
            </template>
          </el-table-column>
          <el-table-column
            prop="partname"
            label="物料名称"
            min-width="110"
            show-tooltip-when-overflow
            sortable="custom"
          >
            <template slot-scope="{row}">
              <div v-if="row.partname">{{ row.partname }}</div>
              <div v-else>/</div>
            </template>
          </el-table-column>
          <el-table-column
            prop="eqptype_name"
            prop="eqptypename"
            label="设备类型"
            min-width="110"
            show-tooltip-when-overflow
            sortable="custom"
          >
            <template slot-scope="{row}">
              <div v-if="row.eqptype_name">{{ row.eqptype_name }}</div>
              <div v-else>/</div>
            </template>
          </el-table-column>
          />
          <el-table-column
            prop="eqpname"
            label="设备信息"
            min-width="110"
            show-tooltip-when-overflow
            sortable="custom"
          />
          <el-table-column
            prop="username"
            min-width="110"
@@ -151,7 +129,7 @@
                  />
                </el-tooltip>
                <el-tooltip v-del-tab-index class="item" effect="dark" content="删除" placement="top">
                  <i class="el-icon-delete" @click="del(row)" />
                  <i class="el-icon-delete" style="cursor: pointer;color:#42b983;" @click="del(row)" />
                </el-tooltip>
              </div>
            </template>
@@ -166,7 +144,7 @@
        align="right"
        layout="total,prev, pager, next,sizes"
        popper-class="select_bottom"
        @pagination="getSystemSopSearch"
        @pagination="getDeviceSopSearch"
      />
    </div>
@@ -180,37 +158,38 @@
      @close="handleClose"
    >
      <el-form ref="dialogForm" inline :rules="dialogFormRules" :model="dialogForm" label-width="80px">
        <el-form-item label="设备类型" prop="devicetvpecode">
        <el-form-item label="设备类型" prop="devicetypecode">
          <el-select
            v-model="dialogForm.devicetvpecode"
            v-model="dialogForm.devicetypecode"
            style="width: 200px"
            placeholder="请选择"
            filterable
            :popper-append-to-body="false"
            @change="val=>fileversionChange(val,'devicetvpecode')"
            @change="devicetypecodeChange"
          >
            <el-option
              v-for="item in devicetvpeArr"
              v-for="item in devicetypeArr"
              :key="item.code"
              :label="item.name"
              :value="item.code"
            />
          </el-select>
        </el-form-item>
        <el-form-item label="物料名称" prop="partcode">
        <el-form-item label="设备信息" prop="device">
          <el-select
            v-model="dialogForm.partcode"
            v-model="dialogForm.device"
            style="width: 200px"
            placeholder="请选择"
            filterable
            multiple
            collapse-tags
            :popper-append-to-body="false"
            @change="val=>fileversionChange(val,'partcode')"
          >
            <el-option
              v-for="item in partArr"
              :key="item.partcode"
              :label="item.partname"
              :value="item.partcode"
              v-for="item in deviceArr"
              :key="item.code"
              :label="item.name"
              :value="item.code"
            />
          </el-select>
        </el-form-item>
@@ -225,7 +204,6 @@
            placeholder="请选择"
            filterable
            :popper-append-to-body="false"
            @change="val=>fileversionChange(val,'filetypecode')"
          >
            <el-option
              v-for="item in filetypeArr"
@@ -235,9 +213,9 @@
            />
          </el-select>
        </el-form-item>
        <el-form-item label="版本号">
          <el-input v-model="dialogForm.fileversion" disabled style="width: 200px" />
        </el-form-item>
        <!--        <el-form-item label="版本号">-->
        <!--          <el-input v-model="dialogForm.fileversion" disabled style="width: 200px" />-->
        <!--        </el-form-item>-->
        <el-form-item label="文件上传" prop="Files">
          <div style="width: 200px;">
            <el-upload
@@ -249,8 +227,8 @@
              :on-exceed="handleExceed"
              :auto-upload="false"
              :multiple="false"
              accept=".mp4,.pdf"
            >
              <!--              accept=".mp4,.pdf"-->
              <el-button
                type="primary"
                style="width: 200px;display: flex;justify-content: center"
@@ -279,15 +257,9 @@
<script>
import Pagination from '@/components/Pagination'
// import {
//   SystemSopDelete,
//   SystemSopDeviceSearch,
//   SystemSopMaxVersion,
//   SystemSopSava,
//   SystemSopSearch,
//   SystemSopView
// } from '@/api/xtsz'
// import { PartSelect } from '@/api/zzmx'
import { DeviceSopAddSeave, DeviceSopDeleteSeave, DeviceSopSearch } from '@/api/SopManager'
import { DeviceTypeSearch } from '@/api/DeviceManager'
import { EqpTypecodeSeachEqpPermissions } from '@/api/GeneralBasicData'
export default {
  name: 'Zzjg',
@@ -314,19 +286,19 @@
      tableData: [],
      dialogVisible: false,
      dialogForm: {
        devicetvpecode: '', // è®¾å¤‡ç±»åž‹ç¼–码
        partcode: '', // ç‰©æ–™ç¼–码
        devicetypecode: '', // è®¾å¤‡ç±»åž‹ç¼–码
        device: '', // ç‰©æ–™ç¼–码
        defilename: '',
        filetypecode: '', // æ–‡ä»¶ç±»åž‹ç¼–码
        Files: '', // æ–‡ä»¶
        fileversion: ''// æ–‡ä»¶ç‰ˆæœ¬å·
      },
      dialogFormRules: {
        devicetvpecode: [
        devicetypecode: [
          { required: true, message: '请选择设备类型', trigger: ['blur', 'change'] }
        ],
        partcode: [
          { required: true, message: '请选择物料名称', trigger: ['blur', 'change'] }
        device: [
          { required: true, message: '请选择设备信息', trigger: ['blur', 'change'] }
        ],
        defilename: [
          { required: true, message: '请输入名文件称', trigger: ['blur', 'change'] }
@@ -335,8 +307,8 @@
          { required: true, message: '请选择文件类型', trigger: ['blur', 'change'] }
        ]
      },
      devicetvpeArr: [], // è®¾å¤‡ç±»åž‹ä¸‹æ‹‰åˆ—表
      partArr: [], // ç‰©æ–™ä¸‹æ‹‰åˆ—表
      devicetypeArr: [], // è®¾å¤‡ç±»åž‹ä¸‹æ‹‰åˆ—表
      deviceArr: [], // ç‰©æ–™ä¸‹æ‹‰åˆ—表
      filetypeArr: [// æ–‡ä»¶ç±»åž‹ä¸‹æ‹‰æ•°ç»„
        { code: 'P001', name: '作业指导书' },
        { code: 'P002', name: '检验指导书' },
@@ -347,17 +319,22 @@
  },
  created() {
    // this.getSystemSopSearch()
    this.getDeviceSopSearch()
    this.getDeviceTypeSearch()
  },
  mounted() {
    window.addEventListener('resize', this.getHeight)
    this.getHeight()
  },
  methods: {
    async getSystemSopSearch() {
      const res = await SystemSopSearch(this.form)
    async getDeviceSopSearch() {
      const res = await DeviceSopSearch(this.form)
      this.tableData = res.data
      this.total = res.count
    },
    async getDeviceTypeSearch() {
      const { data: res } = await DeviceTypeSearch()
      this.devicetypeArr = res
    },
    // æŽ’序改变时
    sortChange({ column, prop, order }) {
@@ -370,58 +347,39 @@
      }
      this.form.order = order
      this.form.prop = prop
      this.getSystemSopSearch()
      this.getDeviceSopSearch()
    },
    // æŸ¥è¯¢
    search() {
      this.getSystemSopSearch()
      this.getDeviceSopSearch()
    },
    // æœ€æ–°ç‰ˆæœ¬æ”¹å˜æ—¶è§¦å‘
    checkedChange(val) {
      this.form.check = val ? 'Y' : 'N'
      this.getSystemSopSearch()
      this.getDeviceSopSearch()
    },
    // æ–‡ä»¶æ•°é‡è¶…过限定触发
    handleExceed() {
      this.$message.info('暂不支持多文件上传!')
    },
    async devicetypecodeChange(eqptypecode) {
      const { data: res } = await EqpTypecodeSeachEqpPermissions({ eqptypecode })
      this.deviceArr = res
      this.dialogForm.device = res.length > 0 ? res.map(i => i.code) : []
    },
    // é‡ç½®
    reset() {
      this.form.search = ''
      this.getSystemSopSearch()
      this.getDeviceSopSearch()
    },
    // æ–°å¢žæŒ‰é’®
    add() {
      this.dialogVisible = true
      this.getSystemSopDeviceSearch()
      this.getPartSelect()
    },
    // èŽ·å–è®¾å¤‡ç±»åž‹
    async getSystemSopDeviceSearch() {
      const { data: res } = await SystemSopDeviceSearch()
      this.devicetvpeArr = res
    },
    // èŽ·å–ç‰©æ–™åç§°
    async getPartSelect() {
      const { data: res } = await PartSelect()
      this.partArr = res
    },
    // æ–‡ä»¶ç±»åž‹å€¼æ”¹å˜æ—¶
    async fileversionChange(val, type) {
      const data = {
        devicetypecode: type === 'devicetvpecode' ? val : this.dialogForm.devicetvpecode,
        filetypecode: type === 'filetypecode' ? val : this.dialogForm.filetypecode,
        partcode: type === 'partcode' ? val : this.dialogForm.partcode
      }
      const { data: res } = await SystemSopMaxVersion(data)
      this.dialogForm.fileversion = res
    },
    // é¢„览
    async check(row) {
      const { data: res } = await SystemSopView({ id: row.id, filepath: row.file_path })
      window.open(res)
      window.open(process.env.VUE_APP_BASE_API_FILE + row.filepath)
    },
    // åˆ é™¤æŒ‰é’®
@@ -433,15 +391,16 @@
      }).then(() => {
        const data = {
          id: row.id,
          filepath: row.file_path
          eqpcode: row.eqpcode,
          filepath: row.filepath
        }
        SystemSopDelete(data).then(res => {
        DeviceSopDeleteSeave(data).then(res => {
          if (res.code === '200') {
            this.$message.success('删除成功!')
            if (this.form.page > 1 && this.tableData.length === 1) {
              this.form.page--
            }
            this.getSystemSopSearch()
            this.getDeviceSopSearch()
          }
        })
      }).catch(() => {
@@ -450,8 +409,8 @@
    },
    // å¯¹è¯æ¡†å…³é—­äº‹ä»¶
    handleClose() {
      this.dialogForm.devicetvpecode = ''
      this.dialogForm.partcode = ''
      this.dialogForm.devicetypecode = ''
      this.dialogForm.device = ''
      this.dialogForm.defilename = ''
      this.dialogForm.filetypecode = ''
      this.dialogForm.fileversion = ''
@@ -474,22 +433,21 @@
      this.$refs.dialogForm.validate(valid => {
        if (valid) {
          const formData = new FormData()
          formData.append('devicetypecode', this.dialogForm.devicetvpecode)
          formData.append('partcode', this.dialogForm.partcode)
          formData.append('defilename', this.$refs.uploadFileRef.uploadFiles[0].name)
          formData.append('eqptypecode', this.dialogForm.devicetypecode)
          formData.append('device', this.dialogForm.device.join(','))
          formData.append('filename', this.$refs.uploadFileRef.uploadFiles[0].name)
          formData.append('filetypecode', this.dialogForm.filetypecode)
          formData.append('fileversion', this.dialogForm.fileversion)
          formData.append('Files', this.$refs.uploadFileRef.uploadFiles[0].raw)
          formData.append('file', this.$refs.uploadFileRef.uploadFiles[0].raw)
          // for (var [key, value] of formData) {
          //   console.log(key, value)
          // }
          this.$store.state.app.buttonIsDisabled = true
          SystemSopSava(formData).then(res => {
          DeviceSopAddSeave(formData).then(res => {
            if (res.code === '200') {
              this.$message.success('文件上传成功!')
              this.dialogVisible = false
              this.$store.state.app.buttonIsDisabled = false
              this.getSystemSopSearch()
              this.getDeviceSopSearch()
            } else {
              this.$message.error('文件上传失败!')
              this.$store.state.app.buttonIsDisabled = false