Browse Source

任务单列表:添加字段、物料清单

chris 1 năm trước cách đây
mục cha
commit
e54b825fbd

+ 27 - 0
src/utils/enums.js

@@ -104,3 +104,30 @@ export const optionsCompose = [
   {label: '否', value: '0'},
   {label: '是', value: '1'}
 ]
+
+export const optionsMaterialState = [
+  {
+    code: '0',
+    value: '待核料'
+  },
+  {
+    code: '1',
+    value: '待试制前检查'
+  },
+  {
+    code: '2',
+    value: '待排产'
+  },
+  {
+    code: '3',
+    value: '生产中'
+  },
+  {
+    code: '4',
+    value: '生产完成'
+  },
+  {
+    code: '5',
+    value: '不合格完成'
+  }
+]

+ 81 - 18
src/views/modules/order/order-detail.vue

@@ -57,6 +57,19 @@
             :show-tooltip-when-overflow="true"
             label="物料名称">
           </el-table-column>
+          <el-table-column
+            header-align="center"
+            align="center"
+            min-width="100"
+            :show-tooltip-when-overflow="true"
+            label="简图">
+            <template slot-scope="scope">
+              <el-popover placement="right" title="" trigger="hover">
+                <img :src="scope.row.simplePic" style="height: 400px;width: 500px">
+                <img slot="reference" :src="scope.row.simplePic" :alt="scope.row.simplePic" style="max-height: 50px;max-width: 130px">
+              </el-popover>
+            </template>
+          </el-table-column>
           <el-table-column
             prop="productSpecifications"
             header-align="center"
@@ -138,19 +151,6 @@
             :show-tooltip-when-overflow="true"
             label="主图号">
           </el-table-column>
-          <el-table-column
-            header-align="center"
-            align="center"
-            min-width="100"
-            :show-tooltip-when-overflow="true"
-            label="简图">
-            <template slot-scope="scope">
-              <div v-for="(item, index) in scope.row.attachList2" style="display: inline">
-                <span v-if="index > 0">,</span>
-                <a :key="item.fileName + index" type="primary" href="#" @click="previewFile(item.fileName, item.url)">{{ item.fileName }}</a>
-              </div>
-            </template>
-          </el-table-column>
           <el-table-column
             prop="noticeChangeRecord"
             header-align="center"
@@ -178,12 +178,20 @@
             </template>
           </el-table-column>
           <el-table-column
-            prop="techName"
             header-align="center"
             align="center"
-            min-width="100"
-            :show-tooltip-when-overflow="true"
-            label="工艺名称">
+            label="对应工艺">
+            <template slot-scope="scope">
+              <el-button :disabled="!scope.row.techId" type="text" size="small" @click="techDetails(scope.row.techId)">查看</el-button>
+            </template>
+          </el-table-column>
+          <el-table-column
+            header-align="center"
+            align="center"
+            label="生产明细">
+            <template slot-scope="scope">
+              <el-button :disabled="!scope.row.prodProductionList || scope.row.prodProductionList.length === 0" type="text" size="small" @click="productListHandle(scope.row)">查看</el-button>
+            </template>
           </el-table-column>
           <el-table-column
             prop="relatedProduct"
@@ -212,6 +220,15 @@
             :show-tooltip-when-overflow="true"
             label="备注">
           </el-table-column>
+          <el-table-column
+            prop="prodState"
+            header-align="center"
+            fixed="right"
+            align="center"
+            :formatter="formatState"
+            :show-tooltip-when-overflow="true"
+            label="状态">
+          </el-table-column>
         </el-table>
       </e-desc>
       <e-desc title="任务工单派发">
@@ -300,6 +317,8 @@
     <preview-component v-if="previewVisible" ref="preview"/>
     <product-draw-detail-dialog v-if="drawVisible" ref="drawDetail"/>
     <attach-detail-dialog v-if="attachVisible" ref="attachDetail"/>
+    <crafts-detail-dialog v-if="craftsVisible" ref="craftsDetail"/>
+    <prod-management-details-dialog v-if="prodVisible" ref="prodDetail"/>
   </div>
 </template>
 
@@ -314,9 +333,15 @@
   import PreviewComponent from '@/views/modules/common/preview-component'
   import ProductDrawDetailDialog from '@/views/modules/tech/product-draw-detail-dialog'
   import AttachDetailDialog from '@/views/modules/common/attach-detail-dialog'
+  import { downloadUrl } from '@/api/file'
+  import CraftsDetailDialog from '@/views/modules/tech/crafts-detail-dialog'
+  import {optionsMaterialState} from '@/utils/enums'
+  import ProdManagementDetailsDialog from '@/views/modules/production/prod-management-details-dialog'
 export default {
     name: 'order-detail',
     components: {
+      ProdManagementDetailsDialog,
+      CraftsDetailDialog,
       AttachDetailDialog,
       ProductDrawDetailDialog,
       PreviewComponent,
@@ -338,7 +363,10 @@ export default {
         stepList: [],
         logList: [],
         drawVisible: false,
-        attachVisible: false
+        attachVisible: false,
+        craftsVisible: false,
+        optionsState: optionsMaterialState,
+        prodVisible: false
       }
     },
     methods: {
@@ -374,6 +402,14 @@ export default {
             // 任务单物料明细
             if (data.data.saleROrderProductList) {
               this.productDetails = data.data.saleROrderProductList
+              // 简图格式调整
+              this.productDetails.forEach(item => {
+                if (item.attachList2 && item.attachList2.length > 0) {
+                  item.simplePic = downloadUrl + item.attachList2[0].url
+                } else {
+                  item.simplePic = ''
+                }
+              })
             }
             // 任务工单派发
             if (data.data.workInfoList) {
@@ -414,6 +450,13 @@ export default {
       loadingData (row, treeNode, resolve) {
         getChildren(row.productId).then(({data}) => {
           if (data && data.code === '200') {
+            data.data.forEach(item => {
+              if (item.attachList2 && item.attachList2.length > 0) {
+                item.simplePic = downloadUrl + item.attachList2[0].url
+              } else {
+                item.simplePic = ''
+              }
+            })
             resolve(data.data)
           } else {
             this.$message.error(data.msg)
@@ -426,6 +469,26 @@ export default {
         this.$nextTick(() => {
           this.$refs.attachDetail.init(row.attachList)
         })
+      },
+      // 对应工艺
+      techDetails (id) {
+        this.craftsVisible = true
+        this.$nextTick(() => {
+          this.$refs.craftsDetail.init(id)
+        })
+      },
+      // 格式化物料状态
+      formatState (row) {
+        if (!row.prodState) return ''
+        const item1 = this.optionsState.find((item) => item.code === row.prodState.toString())
+        return item1 ? item1.value : ''
+      },
+      // 查看生产明细
+      productListHandle (row) {
+        this.prodVisible = true
+        this.$nextTick(() => {
+          this.$refs.prodDetail.init(row.prodProductionList)
+        })
       }
     }
   }

+ 122 - 0
src/views/modules/production/prod-management-details-dialog.vue

@@ -0,0 +1,122 @@
+<template>
+  <el-dialog
+    title="查看"
+    width="70%"
+    :close-on-click-modal="false"
+    :visible.sync="visible"
+    @close="onChose"
+  >
+  <div class="production">
+    <el-table
+      :data="dataList"
+      border
+      style="width: 100%;">
+      <el-table-column
+        label="序号"
+        type="index"
+        width="50"
+        align="center">
+      </el-table-column>
+      <el-table-column
+        prop="productName"
+        header-align="center"
+        align="center"
+        min-width="120"
+        :show-tooltip-when-overflow="true"
+        label="物料名称"/>
+      <el-table-column
+        prop="productSpec"
+        header-align="center"
+        align="center"
+        min-width="120"
+        :show-tooltip-when-overflow="true"
+        label="物料规格"/>
+      <el-table-column
+        prop="productNumber"
+        header-align="center"
+        align="center"
+        min-width="120"
+        :show-tooltip-when-overflow="true"
+        label="物料编号"/>
+      <el-table-column
+        prop="batchNumber"
+        header-align="center"
+        align="center"
+        min-width="120"
+        :show-tooltip-when-overflow="true"
+        label="批次号"/>
+      <el-table-column
+        prop="startTime"
+        header-align="center"
+        align="center"
+        min-width="120"
+        :show-tooltip-when-overflow="true"
+        label="开始时间"/>
+      <el-table-column
+        prop="endTime"
+        header-align="center"
+        align="center"
+        min-width="120"
+        :show-tooltip-when-overflow="true"
+        label="结束时间"/>
+      <el-table-column
+        header-align="center"
+        align="center"
+        fixed="right"
+        min-width="80"
+        :show-tooltip-when-overflow="true"
+        label="状态">
+        <template slot-scope="scope">{{stateFormat(scope.row)}}</template>
+      </el-table-column>
+    </el-table>
+  </div>
+    <span slot="footer">
+        <el-button @click="onChose">返回</el-button>
+      </span>
+  </el-dialog>
+</template>
+
+<script>
+import AttachDetail from '@/views/modules/common/attach-detail'
+import AttachDetailDialog from '@/views/modules/common/attach-detail-dialog'
+import InspectTypeDialog from '@/views/modules/production/inspect-type-dialog'
+import {optionsMaterialState} from '@/utils/enums'
+export default {
+  name: 'prod-management-details-dialog',
+  components: {InspectTypeDialog, AttachDetailDialog, AttachDetail},
+  data () {
+    return {
+      visible: false,
+      dataList: [],
+      optionsState: optionsMaterialState
+    }
+  },
+  methods: {
+    onChose () {
+      this.visible = false
+    },
+    // 初始化表单
+    async init (productList) {
+      this.dataList = productList
+      this.visible = true
+    },
+    // 转换属性“状态”
+    stateFormat (row) {
+      if (this.optionsState) {
+        for (let i = 0; i < this.optionsState.length; i++) {
+          if (this.optionsState[i].code === row.prodState) {
+            return this.optionsState[i].value
+          }
+        }
+      }
+    }
+  }
+}
+</script>
+
+<style scoped lang="scss">
+/deep/ .my-row .super-flow__node {
+  width: 180px;
+  height: 80px;
+}
+</style>

+ 176 - 0
src/views/modules/tech/crafts-detail-dialog.vue

@@ -0,0 +1,176 @@
+<template>
+  <el-dialog
+    title="查看"
+    width="70%"
+    :close-on-click-modal="false"
+    :visible.sync="visible"
+    @close="handleClose"
+  >
+  <div>
+    <div class="my-title">查看</div>
+    <div style="margin-left: 20px;margin-right: 20px">
+      <!-- 工作流 -->
+      <div v-show="dataForm.workFlowBusinessExt">
+        <el-steps :active="activeNo" finish-status="success" align-center style="margin-bottom: 20px">
+          <template v-for="(item, i) in stepList">
+            <el-step :icon="item.icon" :title="item.title" :description="item.description"></el-step>
+          </template>
+        </el-steps>
+        <el-collapse style="margin-bottom: 20px">
+          <el-collapse-item>
+            <template slot="title">
+              <span style="color: red">审批日志(展开查看更多):</span>
+            </template>
+            <template v-for="(item, i) in logList">
+              <div>{{++i}}:{{item.approverName}}  {{item.createTime}}  {{item.approvalValue}}</div>
+            </template>
+          </el-collapse-item>
+        </el-collapse>
+      </div>
+      <div v-if="isFlow">
+        <approve-component ref="approve" @approveFinished="approveFinished" />
+      </div>
+      <e-desc title="基本信息" column="3">
+        <e-desc-item label="工艺名称">{{ dataForm.techName }}</e-desc-item>
+        <e-desc-item label="工艺版本">{{ dataForm.techVersion }}</e-desc-item>
+        <e-desc-item label="物料">{{ dataForm.productName }}</e-desc-item>
+
+        <e-desc-item label="备注" span="3">{{ dataForm.notes }}</e-desc-item>
+      </e-desc>
+      <e-desc title="附件">
+        <upload-component
+          :display="true"
+          :display-title="false"
+          :accept="'*'"
+          :file-obj-list="fileList"
+        />
+      </e-desc>
+      <el-row class="my-row" style="height: 350px; background-color: #efefef;">
+        <work-flow
+          ref="workFlow"
+          :nodeData="workFlowData"
+          :disabled="true"
+        ></work-flow>
+      </el-row>
+    </div>
+  </div>
+
+    <span slot="footer">
+      <el-button @click="onChose">返回</el-button>
+    </span>
+   </el-dialog>
+</template>
+
+<script>
+import EDesc from '../common/e-desc'
+import EDescItem from '../common/e-desc-item'
+import { dealStepData, dealStepLogs } from '@/api/util'
+import uploadComponent from '../common/upload-component'
+import { getInfo } from '@/api/crafts'
+import ApproveComponent from '../common/approve-component'
+import WorkFlow from '@/components/work-flow/home'
+export default {
+  name: 'crafts-detail-dialog',
+  components: {
+    EDesc,
+    EDescItem,
+    uploadComponent,
+    ApproveComponent,
+    WorkFlow
+  },
+  data () {
+    return {
+      visible: false,
+      isFlow: false,
+      id: 0,
+      productName: '',
+      dataForm: {
+        workFlowBusinessExt: null
+      },
+      activeNo: 0,
+      stepList: [],
+      logList: [],
+      fileList: [],
+      workFlowData: {
+        nodeList: [],
+        lineList: []
+      }
+    }
+  },
+  destroyed () {
+  },
+  methods: {
+    onChose () {
+      this.handleClose()
+    },
+    async init (id, businessType, productName) {
+      this.visible = true
+      this.isFlow = !!(businessType && businessType !== '')
+      this.id = id || 0
+      this.productName = productName
+      this.dataForm = {}
+      this.stepList = []
+      this.logList = []
+      this.fileList = []
+      this.getDetails(businessType)
+    },
+    getDetails (businessType) {
+      getInfo(this.id).then(({ data }) => {
+        if (data && data.code === '200' && data.data) {
+          this.dataForm = data.data
+          // 流程图展示
+          this.workFlowData = {
+            nodeList: data.data.nodeList,
+            lineList: data.data.lineList
+          }
+          if (data.data.workFlowBusinessExt) {
+            dealStepData(data.data.workFlowBusinessExt.workFlowProcessStepList, this.stepList)
+            dealStepLogs(data.data.workFlowBusinessExt.processLogList, this.logList)
+          }
+          if (data.data.workFlowProcessStepList) {
+            this.activeNo = Number(data.data.workFlowProcessStepList.activeNo)
+          }
+          // 附件
+          if (data.data.attachList) {
+            data.data.attachList.forEach(item => {
+              this.fileList.push({
+                name: item.fileName,
+                url: item.url,
+                id: item.url
+              })
+            })
+          }
+          // 初始化审批Form
+          this.showApproveForm(businessType, this.id)
+        }
+      })
+    },
+    // 初始化审批Form
+    showApproveForm (businessType, businessId) {
+      if (this.isFlow) {
+        this.$nextTick(() => {
+          this.$refs.approve.init(businessType, businessId)
+        })
+      }
+    },
+    // 审批完成
+    approveFinished () {
+      this.onChose()
+      this.$emit('approveFinished')
+    },
+    handleClose () {
+      this.visible = false
+    }
+  }
+}
+</script>
+
+<style scoped>
+.my-line {
+  border-bottom: 1px solid #c0c4cc;
+  margin-bottom: 10px;
+}
+.title {
+  padding: 10px 0;
+}
+</style>

+ 1 - 0
src/views/modules/tech/product-management.vue

@@ -427,6 +427,7 @@ export default {
           if (data && data.code === '200') {
             this.dataList = data.data.records
             // this.dataList = JSON.parse(JSON.stringify(data.data.records).replace(/"children":null/g, '"children":[]'))
+            // 简图格式调整
             this.dataList.forEach(item => {
               if (item.attachList2 && item.attachList2.length > 0) {
                 item.simplePic = downloadUrl + item.attachList2[0].url

+ 2 - 27
src/views/modules/trace/order-detail.vue

@@ -130,6 +130,7 @@
   import ApproveComponent from '../common/approve-component'
   import ProductDetail from './product-detail'
   import ProdManagementDetails from '@/views/modules/production/prod-management-details'
+  import {optionsMaterialState} from '@/utils/enums'
 export default {
     name: 'order-detail',
     components: {
@@ -152,33 +153,7 @@ export default {
         stepList: [],
         logList: [],
         fileList: [],
-        // 状态:1:待排产,2:生产中,3:生产完成
-        optionsState: [
-          {
-            code: '0',
-            value: '待核料'
-          },
-          {
-            code: '1',
-            value: '待试制前检查'
-          },
-          {
-            code: '2',
-            value: '待排产'
-          },
-          {
-            code: '3',
-            value: '生产中'
-          },
-          {
-            code: '4',
-            value: '生产完成'
-          },
-          {
-            code: '5',
-            value: '不合格完成'
-          }
-        ]
+        optionsState: optionsMaterialState
       }
     },
     methods: {