Ver código fonte

设备管理

chris 3 anos atrás
pai
commit
d523058493

+ 18 - 1
src/api/production.js

@@ -18,7 +18,7 @@ export function getMonitoringList (params) {
   })
 }
 
-// 获取生产监控列表信息
+// 获取生产记录列表信息
 export function getRecordingList (params) {
   return request({
     url: request.adornUrl(`/biz-service/ProductionRecord/list`),
@@ -26,3 +26,20 @@ export function getRecordingList (params) {
     params: params
   })
 }
+
+// 获取设备列表信息
+export function getEquipmentList (params) {
+  return request({
+    url: request.adornUrl(`/biz-service/equipment/list`),
+    method: 'get',
+    params: params
+  })
+}
+
+// 设备详情
+export function getEquipmentDetail (id) {
+  return request({
+    url: request.adornUrl(`/biz-service/equipment/info/${id}`),
+    method: 'get'
+  })
+}

+ 235 - 2
src/views/modules/production/equipment-add-or-update.vue

@@ -1,10 +1,243 @@
 <template>
-
+  <div>
+    <el-dialog
+      :title="!id ? '新增': display ? '点检记录' : '修改'"
+      width="70%"
+      :close-on-click-modal="false"
+      :visible.sync="visible">
+      <el-form :model="dataForm" :rules="dataRule" ref="dataForm" label-width="auto">
+        <el-row class="my-row">
+          <el-col :span="8">
+            <el-form-item label="编码" prop="code">
+              <el-input v-model="dataForm.code" :disabled="display || !id" placeholder="系统自动生成,无需填写"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="8" style="padding-left: 10px">
+            <el-form-item label="名称" prop="name">
+              <el-input v-model="dataForm.name" :disabled="display" placeholder="名称"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="8" style="padding-left: 10px">
+            <el-form-item label="型号规格" prop="specifications">
+              <el-input v-model="dataForm.specifications" :disabled="display" placeholder="型号规格"></el-input>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row class="my-row">
+          <el-col :span="8">
+            <el-form-item label="制造商" prop="manufacturers">
+              <el-input v-model="dataForm.manufacturers" :disabled="display" placeholder="制造商"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="8" style="padding-left: 10px">
+            <el-form-item label="检定日期" prop="verificationDate">
+              <el-date-picker
+                :disabled="display"
+                v-model="dataForm.verificationDate"
+                value-format="yyyy-MM-dd"
+                type="date">
+              </el-date-picker>
+            </el-form-item>
+          </el-col>
+          <el-col :span="8" style="padding-left: 10px">
+            <el-form-item label="检定有效期" prop="validityDate">
+              <el-date-picker
+                :disabled="display"
+                v-model="dataForm.validityDate"
+                value-format="yyyy-MM-dd"
+                type="date">
+              </el-date-picker>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row class="my-row">
+          <el-col :span="8">
+            <el-form-item label="设备责任人" prop="responsibilityUser">
+              <el-input v-if="display" v-model="dataForm.responsibilityUserName" disabled></el-input>
+              <user-component v-else v-model="dataForm.responsibilityUser"/>
+            </el-form-item>
+          </el-col>
+          <el-col :span="8" style="padding-left: 20px">
+            <el-form-item label="操作人" prop="userOf">
+              <el-input v-if="display" v-model="dataForm.userOfName" disabled></el-input>
+              <user-component v-else v-model="dataForm.userOf"/>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row class="my-row">
+          <div class="title"><span style="color: red">*</span> 使用说明书</div>
+          <el-upload
+            class="upload-demo"
+            ref="upload"
+            :multiple="true"
+            action="#"
+            accept="image/jpeg,image/gif,image/png"
+            :on-preview="handlePreview"
+            :on-remove="handleRemove"
+            :on-change="handleChange"
+            :file-list="fileList"
+            :limit="5"
+            :on-exceed="handleExceed"
+            :auto-upload="false">
+            <el-button v-show="!display" slot="trigger" size="small" type="primary">选取文件</el-button>
+            <el-button v-show="!display" style="margin-left: 10px;" size="small" type="success" @click="submitUpload">开始上传</el-button>
+            <div v-show="!display" slot="tip" class="el-upload__tip">只能上传jpg/png文件,最多5张图片,且每张图片不超过10M</div>
+          </el-upload>
+        </el-row>
+        <el-row class="my-row">
+          <el-form-item label="备注" prop="notes">
+            <el-input v-model="dataForm.notes" :disabled="display" placeholder="备注"></el-input>
+          </el-form-item>
+        </el-row>
+      </el-form>
+      <span slot="footer" class="dialog-footer">
+      <el-button @click="visible = false">取消</el-button>
+      <el-button v-if="!display" type="primary" @click="dataFormSubmit()">确定</el-button>
+    </span>
+    </el-dialog>
+  </div>
 </template>
 
 <script>
+  import { getEquipmentDetail } from '@/api/production'
+  import UserComponent from '../common/user-component'
+  import { uploadUrl, downloadUrl, uploadFiles } from '@/api/file'
   export default {
-    name: 'equipment-add-or-update'
+    name: 'equipment-add-or-update',
+    components: {
+      UserComponent
+    },
+    data () {
+      return {
+        visible: false,
+        display: false,
+        dataList: [],
+        fileList: [],
+        id: 0,
+        dataForm: {},
+        optionsType: [],
+        optionsApplier: [],
+        materialDetails: [],
+        addMaterialVisible: false,
+        totalAmount: 0,
+        dataRule: {
+          name: [{ required: true, message: '名称不能为空', trigger: 'blur' }],
+          specifications: [{ required: true, message: '型号规格不能为空', trigger: 'blur' }],
+          manufacturers: [{ required: true, message: '制造商不能为空', trigger: 'blur' }],
+          verificationDate: [{ required: true, message: '检定日期不能为空', trigger: 'change' }],
+          validityDate: [{ required: true, message: '检定有效期不能为空', trigger: 'change' }]
+        },
+        uploadUrl: uploadUrl,
+        previewPath: '',
+        previewName: '',
+        previewVisible: false
+      }
+    },
+    methods: {
+      async init (id, display) {
+        this.materialDetails = []
+        this.dataForm = {
+          payType: '0'
+        }
+        this.visible = true
+        this.id = id || 0
+        this.display = display
+        if (!id) return
+        await getEquipmentDetail(this.id).then(({data}) => {
+          if (data && data.code === '200') {
+            this.dataForm = data.data
+            // 文件列表
+            this.fileList = []
+            if (data.data.attachList) {
+              data.data.attachList.forEach((item) => {
+                this.fileList.push({
+                  name: item.fileName,
+                  url: item.url,
+                  id: item.url
+                })
+              })
+            }
+          }
+        })
+      },
+      validateField (type) {
+        this.$refs.dataForm.validateField(type)
+      },
+      // 表单提交
+      dataFormSubmit () {
+        this.$refs['dataForm'].validate((valid) => {
+          if (valid) {
+            // 添加附件
+            let fList = this.fileList
+            if (fList.length > 0) {
+              this.dataForm.attachList = []
+              for (let i = 0; i < fList.length; i++) {
+                this.dataForm.attachList.push({
+                  fileName: fList[i].name,
+                  url: fList[i].url
+                })
+              }
+            }
+            this.$http({
+              url: !this.id ? this.$http.adornUrl(`/biz-service/equipment/save`) : this.$http.adornUrl(`/biz-service/equipment/update`),
+              method: 'post',
+              data: this.$http.adornData(this.dataForm)
+            }).then(({data}) => {
+              if (data && data.code === '200') {
+                this.$message({
+                  message: '操作成功',
+                  type: 'success',
+                  duration: 1500,
+                  onClose: () => {
+                    this.visible = false
+                    this.$emit('refreshDataList')
+                  }
+                })
+              } else {
+                this.$message.error(data.msg)
+              }
+            })
+          }
+        })
+      },
+      submitUpload () {
+        if (this.fileList.length === 0) {
+          return this.$message.warning('请选取文件后再上传')
+        }
+        const formData = new FormData()
+        this.fileList.forEach((file) => {
+          formData.append('file', file.raw)
+        })
+        uploadFiles(formData).then(({data}) => {
+          if (data && data.code === '200') {
+            data.data.forEach((item) => {
+              let fileData = this.fileList.find((file) => file.name === item.originFileName)
+              fileData.url = item.fileUrl
+            })
+            this.$message.success('上传成功')
+          } else {
+            this.$message.error('上传失败')
+          }
+        })
+      },
+      handleRemove (file, fileList) {
+        this.fileList = fileList
+      },
+      handlePreview (file) {
+        if (file && file.url) {
+          // 获取文件路径
+          this.previewPath = downloadUrl + file.url
+          this.previewName = file.name
+          this.previewVisible = true
+        }
+      },
+      handleChange (file, fileList) {
+        this.fileList = fileList
+      },
+      handleExceed (files, fileList) {
+        this.$message.warning(`当前限制选择 5 个文件,本次选择了 ${files.length} 个文件,共选择了 ${files.length + fileList.length} 个文件`)
+      }
+    }
   }
 </script>
 

+ 69 - 115
src/views/modules/production/equipment.vue

@@ -1,36 +1,13 @@
 <!-- 设备管理 -->
 <template>
   <div class="production">
-    <el-form :inline="true" :model="dataForm" @keyup.enter.native="search()">
-      <el-form-item label="采购编码">
-        <el-input v-model="dataForm.purchaseCode" placeholder="采购编码" clearable/>
-      </el-form-item>
-      <el-form-item label="说明">
-        <el-input v-model="dataForm.notes" placeholder="说明" clearable/>
-      </el-form-item>
-      <el-form-item label="类别">
-        <el-select
-          v-model="dataForm.purchaseType"
-          remote
-          placeholder="请选择">
-          <el-option
-            v-for="item in optionsType"
-            :key="item.code"
-            :label="item.value"
-            :value="item.code">
-          </el-option>
-        </el-select>
-      </el-form-item>
-      <el-form-item label="申请日期">
-        <el-date-picker
-          v-model="dataForm.applyDate"
-          value-format="yyyy-MM-dd"
-          type="date">
-        </el-date-picker>
+    <el-form :inline="true" :model="dataForm" @keyup.enter.native="queryPage()">
+      <el-form-item label="设备名称">
+        <el-input v-model="dataForm.name" placeholder="设备名称" clearable/>
       </el-form-item>
       <el-form-item label="状态">
         <el-select
-          v-model="dataForm.purchaseState"
+          v-model="dataForm.state"
           remote
           placeholder="请选择">
           <el-option
@@ -42,8 +19,8 @@
         </el-select>
       </el-form-item>
       <el-form-item>
-        <el-button @click="search()">查询</el-button>
-        <el-button type="primary" @click="addOrUpdateHandle(0, false)">新建采购申请</el-button>
+        <el-button @click="queryPage()">查询</el-button>
+        <el-button type="primary" @click="addOrUpdateHandle(0, false)">新增设备</el-button>
       </el-form-item>
     </el-form>
     <el-table
@@ -58,72 +35,94 @@
         align="center">
       </el-table-column>
       <el-table-column
-        prop="purchaseCode"
+        prop="code"
+        header-align="center"
+        align="center"
+        width="160"
+        :show-overflow-tooltip="true"
+        label="编码">
+      </el-table-column>
+      <el-table-column
+        prop="name"
+        header-align="center"
+        align="center"
+        width="160"
+        :show-overflow-tooltip="true"
+        label="名称">
+      </el-table-column>
+      <el-table-column
+        prop="state"
         header-align="center"
         align="center"
-        min-width="100"
-        label="采购编码">
+        :formatter="formatState"
+        label="状态">
       </el-table-column>
       <el-table-column
-        prop="materialName"
+        prop="specifications"
         header-align="center"
         align="center"
-        min-width="120"
-        label="物品名称">
+        width="160"
+        :show-overflow-tooltip="true"
+        label="型号规格">
       </el-table-column>
       <el-table-column
-        prop="purchaseType"
+        prop="manufacturers"
         header-align="center"
         align="center"
-        :formatter="formatType"
-        label="采购类别">
+        width="160"
+        :show-overflow-tooltip="true"
+        label="制造商">
       </el-table-column>
       <el-table-column
-        prop="createTime"
+        prop="verificationDate"
         header-align="center"
         align="center"
         min-width="160"
-        label="申请时间">
+        label="检定日期">
       </el-table-column>
       <el-table-column
-        prop="applierName"
+        prop="validityDate"
         header-align="center"
         align="center"
-        min-width="100"
-        label="申请人">
+        min-width="160"
+        label="检定有效期(止)">
       </el-table-column>
       <el-table-column
-        prop="deptName"
+        prop="-"
         header-align="center"
         align="center"
-        min-width="100"
-        label="申请部门">
+        label="操作说明书">
       </el-table-column>
       <el-table-column
         prop="notes"
         header-align="center"
         align="center"
-        min-width="180"
+        width="180"
         :show-overflow-tooltip="true"
-        label="说明">
+        label="备注">
       </el-table-column>
       <el-table-column
-        prop="purchaseState"
+        prop="responsibilityUserName"
         header-align="center"
         align="center"
-        :formatter="formatState"
-        label="当前状态">
+        label="责任人">
+      </el-table-column>
+      <el-table-column
+        prop="userOfName"
+        header-align="center"
+        align="center"
+        label="操作人">
       </el-table-column>
       <el-table-column
         fixed="right"
         header-align="center"
         align="center"
-        width="150"
+        width="180"
         label="操作">
         <template slot-scope="scope">
-          <el-button type="text" size="small" @click="addOrUpdateHandle(scope.row.purchaseId, true)">查看</el-button>
-          <el-button type="text" size="small" @click="addOrUpdateHandle(scope.row.purchaseId, false)">编辑</el-button>
-          <el-button style="color: red" type="text" size="small" @click="revokeHandle(scope.row.purchaseId)">撤回</el-button>
+          <el-button type="text" size="small" @click="addOrUpdateHandle(scope.row.id, false)">编辑</el-button>
+          <el-button type="text" size="small" @click="damaged(scope.row.id)">报损</el-button>
+          <el-button type="text" size="small" @click="addOrUpdateHandle(scope.row.id, true)">点检记录</el-button>
         </template>
       </el-table-column>
     </el-table>
@@ -143,8 +142,7 @@
 
 <script>
   import AddOrUpdate from './equipment-add-or-update'
-  import { getDictList } from '@/api/dict'
-  import { getPurchaseList, revokePurchase } from '@/api/sale'
+  import { getEquipmentList } from '@/api/production'
   export default {
     name: 'equipment',
     components: {
@@ -160,47 +158,33 @@
         totalPage: 0,
         dataListLoading: false,
         dataListSelections: [],
-        optionsType: [],
-        // 审批状态:0 待提交 1 待审批 2 审批中 3 审批完成 4 审批不通过
+        // 设备状态(1:正常,2:未检定,3:损坏,4:维修中)
         optionsState: [
-          {
-            code: '0',
-            value: '待提交'
-          },
           {
             code: '1',
-            value: '待审批'
+            value: '正常'
           },
           {
             code: '2',
-            value: '审批中'
+            value: '未检定'
           },
           {
             code: '3',
-            value: '审批完成'
+            value: '损坏'
           },
           {
             code: '4',
-            value: '审批不通过'
+            value: '维修中'
           }
         ]
       }
     },
     created () {
-      this.getTypeList()
       this.getDataList()
     },
     methods: {
-      // 获取采购类别字典
-      getTypeList () {
-        getDictList({type: 'purchase_type'}).then(({data}) => {
-          if (data) {
-            this.optionsType = data
-          }
-        })
-      },
       // 查询
-      search () {
+      queryPage () {
         this.pageIndex = 1
         this.getDataList()
       },
@@ -211,13 +195,10 @@
         let params = {
           'current': this.pageIndex,
           'size': this.pageSize,
-          'applyDate': this.dataForm.applyDate ? this.dataForm.applyDate : null,
-          'notes': this.dataForm.notes ? this.dataForm.notes : null,
-          'purchaseState': this.dataForm.purchaseState ? this.dataForm.purchaseState : null,
-          'purchaseType': this.dataForm.purchaseType ? this.dataForm.purchaseType : null,
-          'purchaseCode': this.dataForm.purchaseCode ? this.dataForm.purchaseCode : null
+          'name': this.dataForm.name ? this.dataForm.name : null,
+          'state': this.dataForm.state ? this.dataForm.state : null
         }
-        getPurchaseList(params).then(({data}) => {
+        getEquipmentList(params).then(({data}) => {
           if (data && data.code === '200') {
             this.dataList = data.data.records
             this.totalPage = Number(data.data.total)
@@ -228,30 +209,6 @@
           this.dataListLoading = false
         })
       },
-      revokeHandle (id) {
-        if (!id) return
-        let data = {id: id}
-        this.$confirm(`确定撤回?`, '提示', {
-          confirmButtonText: '确定',
-          cancelButtonText: '取消',
-          type: 'warning'
-        }).then(() => {
-          revokePurchase(data).then(({data}) => {
-            if (data && data.code === '200') {
-              this.$message({
-                message: '操作成功',
-                type: 'success',
-                duration: 1500,
-                onClose: () => {
-                  this.getDataList()
-                }
-              })
-            } else {
-              this.$message.error(data.msg)
-            }
-          })
-        }).catch(() => {})
-      },
       // 每页数
       sizeChangeHandle (val) {
         this.pageSize = val
@@ -274,17 +231,14 @@
           this.$refs.addOrUpdate.init(id, disable)
         })
       },
-      // 转换属性“类别”
-      formatType (row) {
-        if (this.optionsType && row.purchaseType) {
-          const item1 = this.optionsType.find((item) => item.code === row.purchaseType.toString())
-          return item1 ? item1.value : ''
-        }
+      // 报损
+      damaged (id) {
+        // todo
       },
       // 转换属性“状态”
       formatState (row) {
-        if (!row.purchaseState) return ''
-        const item1 = this.optionsState.find((item) => item.code === row.purchaseState.toString())
+        if (!row.state) return ''
+        const item1 = this.optionsState.find((item) => item.code === row.state.toString())
         return item1 ? item1.value : ''
       }
     }