From b8c0763607375198e37e4b98ed42793ba6606689 Mon Sep 17 00:00:00 2001
From: 王震 <10952869+daywangzhen@user.noreply.gitee.com>
Date: 星期五, 17 十一月 2023 11:45:27 +0800
Subject: [PATCH] Merge branch 'master' of http://114.132.189.42:9002/r/mes-ocea-before

---
 src/views/product/workbench/operation-task-pane.vue                             |  163 ++++++----
 src/views/basic/location/index.vue                                              |    2 
 src/views/technology/completeproductstructure/completeproductstructure-form.vue |    1 
 src/views/plan/manufacturingorder/customerorder.vue                             |  307 ++++++++++++++++++--
 src/views/plan/manufacturingorder/productorder-form.vue                         |   22 
 src/views/product/workbench/workstationoperate-form.vue                         |    1 
 src/views/plan/customerorder/customerorder-form.vue                             |    4 
 src/api/warehouse/location.js                                                   |   16 +
 src/views/product/workbench/index.vue                                           |  260 +++++++++-------
 src/views/product/workbench/taskinfo-pane.vue                                   |    1 
 src/views/plan/manufacturingorder/index.vue                                     |    4 
 src/views/product/workbench/feed-pane.vue                                       |    8 
 src/views/basic/workstation/workstation-form.vue                                |    4 
 src/views/technology/structure/single-structure-form.vue                        |    4 
 src/api/plan/manufacturingorder.js                                              |    8 
 src/views/basic/location/location-form.vue                                      |   60 +++-
 16 files changed, 602 insertions(+), 263 deletions(-)

diff --git a/src/api/plan/manufacturingorder.js b/src/api/plan/manufacturingorder.js
index cb98b76..e9b8d5d 100644
--- a/src/api/plan/manufacturingorder.js
+++ b/src/api/plan/manufacturingorder.js
@@ -80,6 +80,14 @@
   })
 }
 
+export function getProcessConfigFile(obj) {
+  return request({
+    url: '/mes/plan/customerOrder/processConfigFiles',
+    method: 'get',
+    params: obj
+  })
+}
+
 export function checkOutTechnologyRouting(query) {
   return request({
     url: '/mes/plan/manufacturingOrder/checkout',
diff --git a/src/api/warehouse/location.js b/src/api/warehouse/location.js
index 7f1a72f..8afd1f5 100644
--- a/src/api/warehouse/location.js
+++ b/src/api/warehouse/location.js
@@ -106,3 +106,19 @@
     params: query
   })
 }
+
+export function getIfsLocationByGroupCopy(query) {
+  return request({
+    url: '/mes/location/getIfsLocation/copy',
+    method: 'get',
+    params: query
+  })
+}
+
+export function getIfsLocationByGroupCopyAll(query) {
+  return request({
+    url: '/mes/location/getIfsLocationByGroupCopyAll',
+    method: 'get',
+    params: query
+  })
+}
\ No newline at end of file
diff --git a/src/views/basic/location/index.vue b/src/views/basic/location/index.vue
index f0474fe..d1c959d 100644
--- a/src/views/basic/location/index.vue
+++ b/src/views/basic/location/index.vue
@@ -198,7 +198,7 @@
           {
             minWidth: '200',
             prop: 'ifsLocation',
-            label: 'ERP搴撲綅',
+            label: 'IFS搴撲綅',
             sort: true,
             isTrue: false,
             isSearch: true,
diff --git a/src/views/basic/location/location-form.vue b/src/views/basic/location/location-form.vue
index c2591bf..8871e84 100644
--- a/src/views/basic/location/location-form.vue
+++ b/src/views/basic/location/location-form.vue
@@ -135,11 +135,10 @@
       <el-row>
         <el-col :span="12">
           <el-form-item
-            v-if="permissions.basic_has_ifs"
             label="IFS搴撲綅"
             prop="ifsLocationDesc"
           >
-            <!--<el-select
+            <!-- <el-select
               v-model="dataForm.ifsLocation"
               filterable
               placeholder="璇烽�夋嫨IFS搴撲綅"
@@ -152,11 +151,11 @@
                 :key="index"
               >
               </el-option>
-            </el-select>-->
+            </el-select> -->
             <el-cascader
               v-model="dataForm.ifsLocationDesc"
               :props="locationProps"
-              style="width:100%"
+              style="width:100%" filterable
             ></el-cascader>
           </el-form-item>
         </el-col>
@@ -219,6 +218,7 @@
       warehouseOptions: [],
       factoryOptions: [],
       ifsLocationOptions: [],
+			locationTree: [],
       visible: false,
       dataForm: {
         id: 0,
@@ -262,34 +262,39 @@
       locationProps: {
         lazy: true,
         lazyLoad(node, resolve) {
-          console.log('node', node)
           const { level } = node
           if (level === 0) {
             getIfsLocationGroup().then((response) => {
               if (response.data.code === 0) {
                 const _data = response.data.data
-
-                const nodes = _data.map((item) => {
+                const nodes = JSON.parse(_data)["LIST_INFO"].map((item) => {
                   return {
-                    value: item.LOCATION_GROUP,
-                    label: item.LOCATION_GROUP,
+                    value: item.LOCATION_GROUP_DESC +'-'+ item.LOCATION_GROUP,
+                    label: item.LOCATION_GROUP_DESC +'-'+ item.LOCATION_GROUP,
                     leaf: false
                   }
                 })
+								var set = new Set()
+								nodes.forEach(a=>{
+									set.add(JSON.stringify(a))
+								})
+								var list = []
+								set.forEach(a=>{
+									list.push(JSON.parse(a))
+								})
                 // 閫氳繃璋冪敤resolve灏嗗瓙鑺傜偣鏁版嵁杩斿洖锛岄�氱煡缁勪欢鏁版嵁鍔犺浇瀹屾垚
-                resolve(nodes)
+                resolve(list)
               }
             })
           } else {
-            getIfsLocationByGroup({ locationGroup: node.value }).then(
+            getIfsLocationByGroup({ locationNo: node.value.split('-')[1] }).then(
               (response) => {
                 if (response.data.code === 0) {
                   const _data = response.data.data
-
-                  const nodes = _data.map((item) => {
+                  const nodes = JSON.parse(_data)["LIST_INFO"].map((item) => {
                     return {
                       value: item.LOCATION_NO,
-                      label: item.LOCATION_NO,
+                      label: item.LOCATION_DESC +' | '+ item.LOCATION_NO,
                       leaf: true
                     }
                   })
@@ -404,7 +409,32 @@
           this.isSubmit = false
         }
       })
-    }
+    },
+		getLocationTree(){
+			getIfsLocationGroup().then((res) => {
+			  if (res.data.code === 0) {
+					var strs = JSON.parse(res.data.data)['LIST_INFO']
+					var set3 = new Set()
+					var set2 = new Set()
+					var set = []
+					strs.forEach(a=>{
+						set2.add(a['LOCATION_GROUP_DESC'] + '-' + a['LOCATION_GROUP'])
+					})
+					strs.forEach(a=>{
+						set2.forEach(b=>{
+							if((a['LOCATION_GROUP_DESC'] + '-' + a['LOCATION_GROUP'])==b){
+								set3.add(a['LOCATION_DESC'] + '-' + a['LOCATION_NO'])
+							}
+							set.push({
+								value: b,
+								label: b,
+								children: []
+							})
+						})
+					})
+			  }
+			})
+		}
   }
 }
 </script>
diff --git a/src/views/basic/workstation/workstation-form.vue b/src/views/basic/workstation/workstation-form.vue
index 3b09630..9947e12 100644
--- a/src/views/basic/workstation/workstation-form.vue
+++ b/src/views/basic/workstation/workstation-form.vue
@@ -138,7 +138,7 @@
           >
           </el-transfer>
         </el-tab-pane>
-        <el-tab-pane label="浜у嚭涓嶅悎鏍煎簱浣�" name="disqualified">
+        <!-- <el-tab-pane label="浜у嚭涓嶅悎鏍煎簱浣�" name="disqualified">
           <el-transfer
             filterable
             v-model="disqualifiedLocationIds"
@@ -159,7 +159,7 @@
             @change="handleChangeQualifiedLocation"
           >
           </el-transfer>
-        </el-tab-pane>
+        </el-tab-pane> -->
         <el-tab-pane label="妫�楠屽緟澶勭悊搴撲綅" name="pending">
           <el-transfer
             filterable
diff --git a/src/views/plan/customerorder/customerorder-form.vue b/src/views/plan/customerorder/customerorder-form.vue
index 22b36b5..ec8dfc5 100644
--- a/src/views/plan/customerorder/customerorder-form.vue
+++ b/src/views/plan/customerorder/customerorder-form.vue
@@ -1299,9 +1299,6 @@
       this.getConfigFiles()
     },
     delProcessConfigFile(row) {
-      if (row.lineNumber !== this.dataForm.otcLineNo) {
-        this.$message.error('涓婁紶鏂囦欢琛屽彿涓庡綋鍓嶉攢鍞鍗曡鍙蜂笉涓�鑷达紝涓嶅厑璁稿垹闄�')
-      } else {
         this.$confirm('鏄惁鍒犻櫎宸ヨ壓閰嶇疆鏂囦欢', '鎻愮ず', {
           confirmButtonText: '纭畾',
           cancelButtonText: '鍙栨秷',
@@ -1314,7 +1311,6 @@
           .then((data) => {
             this.getConfigFiles()
           })
-      }
     },
     downloadProcessConfigFile(row) {
       downloadProcessConfigFile(
diff --git a/src/views/plan/manufacturingorder/customerorder.vue b/src/views/plan/manufacturingorder/customerorder.vue
index 8cc4949..18f47fd 100644
--- a/src/views/plan/manufacturingorder/customerorder.vue
+++ b/src/views/plan/manufacturingorder/customerorder.vue
@@ -22,18 +22,18 @@
         @keyup.enter.native="dataFormSubmit()"
         label-width="100px"
         class="l-mes productorder-order"
-        :disabled="!editable"
       >
-        <el-tabs type="border-card">
+      <!-- :disabled="!editable" -->
+        <el-tabs type="border-card" @tab-click="downs" v-model="activeFileName">
           <el-tab-pane label="涓昏" type="card">
             <el-row>
               <el-col :span="12">
                 <el-form-item label="鍚屾鏁版嵁鏉ユ簮" prop="sourceId">
-                  <el-input
-                    v-model="dataForm.sourceId"
-                    placeholder=""
-                    :disabled="!ediSource"
-                  ></el-input>
+                 <el-input
+                  v-model="dataForm.sourceId == 0 ? '鍚屾' : '鎵嬪姩'"
+                  placeholder=""
+                  disabled
+                ></el-input>
                 </el-form-item>
               </el-col>
               <el-col :span="12">
@@ -86,7 +86,7 @@
                   </el-select>
                 </el-form-item>
               </el-col>
-              <el-col :span="12">
+              <!-- <el-col :span="12">
                 <el-form-item label="琛屽彿" prop="coLineNo">
                   <el-input
                     v-model="dataForm.coLineNo"
@@ -94,7 +94,17 @@
                     :disabled="!ediSource"
                   ></el-input>
                 </el-form-item>
-              </el-col>
+              </el-col> -->
+               <el-col :span="6">
+              <el-form-item label="浜у搧鍚嶇О" prop="productName">
+                <el-input
+                  v-model="dataForm.productName"
+                  placeholder=""
+                  disabled
+                >
+                </el-input>
+              </el-form-item>
+            </el-col>
             </el-row>
             <el-row>
               <el-col :span="12">
@@ -121,9 +131,9 @@
             </el-row>
             <el-row>
               <el-col :span="12">
-                <el-form-item label="鏈熸湜浜よ揣鏃堕棿" prop="wantedDeliveryDate">
+                <el-form-item label="鏈熸湜浜よ揣鏃堕棿" prop="deliveryDate">
                   <el-date-picker
-                    v-model="dataForm.wantedDeliveryDate"
+                    v-model="dataForm.deliveryDate"
                     style="width: 100%"
                     type="datetime"
                     value-format="yyyy-MM-dd HH:mm:ss"
@@ -132,7 +142,16 @@
                   </el-date-picker>
                 </el-form-item>
               </el-col>
-              <el-col :span="12">
+               <el-col :span="12">
+                <el-form-item label="宸ヨ壓鏂囦欢鍚嶇О" prop="docName">
+                  <el-input
+                    v-model="dataForm.docName"
+                  placeholder=""
+                  disabled
+                  ></el-input>
+                </el-form-item>
+              </el-col>
+              <!-- <el-col :span="12">
                 <el-form-item label="璁″垝浜よ揣鏃堕棿" prop="plannedDeliveryDate">
                   <el-date-picker
                     v-model="dataForm.plannedDeliveryDate"
@@ -143,13 +162,37 @@
                   >
                   </el-date-picker>
                 </el-form-item>
-              </el-col>
+              </el-col> -->
             </el-row>
-            <el-card
+            <el-row>
+            <el-col :span="24">
+              <el-form-item label="璁㈠崟澶囨敞" prop="comment">
+                <el-input
+                   v-model="dataForm.comment"
+                    placeholder=""
+                    :disabled="!ediSource"
+                >
+                </el-input>
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row>
+            <el-col :span="24">
+              <el-form-item label="浜у搧澶囨敞" prop="remark">
+                <el-input
+                 v-model="dataForm.remark"
+                    placeholder=""
+                    :disabled="!ediSource"
+                >
+                </el-input>
+              </el-form-item>
+            </el-col>
+          </el-row>
+            <!-- <el-card
               header="璁㈠崟鍙傛暟"
               shadow="never"
               class="productorder-order-param"
-            >
+            > -->
               <el-row>
                 <el-form-item
                   style="float:left;width: 50%"
@@ -166,8 +209,33 @@
               </el-row>
             </el-card>
           </el-tab-pane>
-          <el-tab-pane label="闄勪欢" type="card">
+          <el-tab-pane label="闄勪欢" type="card" name="闄勪欢">
+            <div style="display: flex;justify-content:flex-end;">
+            <div></div>
+          </div>
+          <div
+            v-loading="progrecessFileLoading"
+            element-loading-text="璇风◢绛夛紝鏂囦欢涓婁紶涓�"
+          >
             <el-upload
+              drag
+              ref="upload"
+              action="/mes/plan/customerOrder/upload"
+              :auto-upload="true"
+              :headers="headers"
+              :before-upload="submitUpload"
+              :on-success="uploadSuccess"
+              :data="paramData"
+              :with-credentials="true"
+              :show-file-list="false"
+            >
+              <i class="el-icon-upload"></i>
+              <div class="el-upload__text">
+                灏嗘枃浠舵嫋鍒版澶勶紝鎴�<em>鐐瑰嚮涓婁紶</em>
+              </div>
+            </el-upload>
+          </div>
+            <!-- <el-upload
               disabled
               action=""
               ref="upload"
@@ -176,10 +244,93 @@
               :on-preview="handlePreview"
               :with-credentials="true"
             >
-            </el-upload>
+            </el-upload> -->
+            <el-table :data="processConfigFileTableData" height="400px">
+            <el-table-column
+              prop="orderNumber"
+              align="center"
+              label="璁㈠崟鍙�"
+              show-overflow-tooltip
+            >
+            </el-table-column>
+            <!-- <el-table-column prop="lineNumber" align="center" label="琛屽彿"> -->
+            <!-- </el-table-column> -->
+            <el-table-column
+              prop="originalFileName"
+              align="center"
+              label="鍘熸枃浠跺悕"
+              width="200"
+            >
+            </el-table-column>
+            <el-table-column prop="fileName" align="center" label="鏂囦欢鍚庣紑">
+            </el-table-column>
+            <el-table-column prop="createUser" align="center" label="涓婁紶浜�">
+            </el-table-column>
+            <el-table-column
+              prop="createTime"
+              align="center"
+              label="涓婁紶鏃堕棿"
+              show-overflow-tooltip
+            >
+            </el-table-column>
+            <el-table-column prop="updateUser" align="center" label="鏇存柊浜�">
+            </el-table-column>
+            <el-table-column
+              prop="updateTime"
+              align="center"
+              label="鏇存柊鏃堕棿"
+              show-overflow-tooltip
+            >
+            </el-table-column>
+            <!--            <el-table-column align="center" label="鏄惁鍚屾宸ヨ壓閰嶇疆鍗�">-->
+            <!--              <template slot-scope="scope">-->
+            <!--                <el-switch-->
+            <!--                  :value="scope.row.effectiveRange"-->
+            <!--                  active-value="1"-->
+            <!--                  inactive-value="0"-->
+            <!--                  @input="handleInput(scope.row)"-->
+            <!--                  :disabled="scope.row.lineNumber !== dataForm.otcLineNo"-->
+            <!--                />-->
+            <!--              </template>-->
+            <!--            </el-table-column>-->
+            <el-table-column fixed="right" align="center" label="鎿嶄綔">
+              <template slot-scope="scope">
+                <!-- <el-button
+                  @click="synchronizeFile(scope.row)"
+                  type="text"
+                  size="small"
+                  :disabled="scope.row.lineNumber !== dataForm.customerNo"
+                  >鍚屾</el-button
+                > -->
+                <el-button
+                  @click="delProcessConfigFile(scope.row)"
+                  type="text"
+                  size="small"
+                  :disabled="scope.row.lineNumber !== dataForm.customerNo"
+                  >鍒犻櫎</el-button
+                >
+                <el-button
+                  @click="downloadProcessConfigFile(scope.row)"
+                  type="text"
+                  size="small"
+                  >涓嬭浇</el-button
+                >
+              </template>
+            </el-table-column>
+          </el-table>
           </el-tab-pane>
         </el-tabs>
       </el-form>
+      <span slot="footer" class="dialog-footer">
+      <el-button @click="visible = false">鍙栨秷</el-button>
+      <el-button
+        type="primary"
+        :disabled="buttonDisable"
+        v-thinclick="`dataFormSubmit`"
+        v-if="editable"
+        >纭畾</el-button
+      >
+    </span>
     </el-tab-pane>
   </el-tabs>
 </template>
@@ -196,11 +347,14 @@
   addCustomerOrder,
   download,
   getCustomerOrder,
+  deleteProcessConfigFile,
+  downloadProcessConfigFile,
   putCustomerOrder
 } from '@/api/plan/customerorder'
 import { remote } from '@/api/admin/dict'
 import { validateSixDecimal } from '@/util/validate'
-import { getCustomer } from '../../../api/plan/manufacturingorder'
+import { getStore } from '@/util/store'
+import { getCustomer,getProcessConfigFile } from '../../../api/plan/manufacturingorder'
 
 export default {
   props: {
@@ -277,37 +431,71 @@
           { validator: validateSixDecimal, trigger: 'blur' }
         ]
       },
+      paramData: {
+        // range: '1',
+        orderNumber: '',
+        lineNumber: ''
+      },
+      headers: {
+        Authorization: 'Bearer ' + getStore({ name: 'access_token' })
+      },
       units: [],
       coStates: [
+        // {
+        //   value: '01plan',
+        //   label: '寰呰鍒�'
+        // },
+        // {
+        //   value: '03planed',
+        //   label: '宸茶鍒�'
+        // },
+        // {
+        //   value: '02planing',
+        //   label: '璁″垝涓�'
+        // },
+        // {
+        //   value: '04complete',
+        //   label: '宸插畬鎴�'
+        // }
+         {
+          value: '01partUnCheck',
+          label: '闆朵欢寰呴��'
+        },
         {
-          value: '01plan',
+          value: '02technologyUnCheck',
+          label: '宸ヨ壓鏂囦欢寰呴��'
+        },
+        {
+          value: '03plan',
           label: '寰呰鍒�'
         },
         {
-          value: '03planed',
-          label: '宸茶鍒�'
+          value: '04planed',
+          label: '宸蹭笅鍙�'
         },
         {
-          value: '02planing',
-          label: '璁″垝涓�'
+          value: '05cancel',
+          label: '宸蹭綔搴�'
         },
         {
-          value: '04complete',
-          label: '宸插畬鎴�'
+          value: '06unedit',
+          label: '璁㈠崟缂栬緫'
         }
-      ]
+      ],
+      processConfigFileTableData: [],
+      activeFileName: ""
     }
   },
   computed: {
-    editable: function() {
-      if (!this.dataForm.id) {
-        return true
-      }
-      if (this.dataForm.id && this.dataForm.coState !== '04complete') {
-        return true
-      }
-      return false
-    },
+    // editable: function() {
+    //   if (!this.dataForm.id) {
+    //     return true
+    //   }
+    //   if (this.dataForm.id && this.dataForm.coState !== '04complete') {
+    //     return true
+    //   }
+    //   return false
+    // },
     ediSource: function() {
       if (!this.dataForm.id) {
         return true
@@ -360,8 +548,8 @@
             }
             this.fileList = response.data.data.customerOrderAttachmentList
             this.orderParamList = response.data.data.orderParamList
-            
-            
+            //闄勪欢
+            this.processConfigFileTableData = response.data.data.configFiles
             this.title =
               this.dataForm.customerName + this.dataForm.customerOrderNo
           })
@@ -371,6 +559,48 @@
           this.$refs.tabs.currentName = '0'
         }
       })
+    },
+    submitUpload() {
+      this.paramData.orderNumber = this.dataForm.contractNo
+      this.paramData.lineNumber = this.dataForm.customerNo
+      this.progrecessFileLoading = true
+    },
+    uploadSuccess() {
+      this.progrecessFileLoading = false
+      this.downs()
+    },
+    //闄勪欢鐨勬煡璇�
+    downs(label, e){
+      if(this.activeFileName=='闄勪欢'){
+        console.log('1');
+        getProcessConfigFile({
+          orderNumber: this.dataForm.contractNo,
+          lineNumber: this.dataForm.customerNo
+        }).then((res)=>{
+          this.processConfigFileTableData = res.data.data
+        })
+      }
+    },
+    downloadProcessConfigFile(row) {
+      downloadProcessConfigFile(
+        row.fileName,
+        row.bucketName,
+        row.originalFileName
+      )
+    },
+    delProcessConfigFile(row) {
+        this.$confirm('鏄惁鍒犻櫎宸ヨ壓閰嶇疆鏂囦欢', '鎻愮ず', {
+          confirmButtonText: '纭畾',
+          cancelButtonText: '鍙栨秷',
+          type: 'warning',
+          closeOnClickModal: false
+        })
+          .then(function() {
+            return deleteProcessConfigFile(row.id)
+          })
+          .then((data) => {
+            this.downs()
+          })
     },
     // 闄勪欢鐨勭偣鍑�
     handlePreview(file) {
@@ -425,6 +655,9 @@
     },
     handleTabClick(tab, event) {
       this.init(parseInt(tab.name))
+      if(tab.name){
+
+      }
     },
     // 闆朵欢閫夋嫨
     openPartDialog() {
diff --git a/src/views/plan/manufacturingorder/index.vue b/src/views/plan/manufacturingorder/index.vue
index 2f4af42..568bf63 100644
--- a/src/views/plan/manufacturingorder/index.vue
+++ b/src/views/plan/manufacturingorder/index.vue
@@ -428,8 +428,8 @@
           },
           {
             minWidth: '120',
-            prop: 'orderRemark',
-            label: '閿�鍞鍗曞娉�',
+            prop: 'remark',
+            label: '澶囨敞',
             sort: true,
             isTrue: true,
             isSearch: true,
diff --git a/src/views/plan/manufacturingorder/productorder-form.vue b/src/views/plan/manufacturingorder/productorder-form.vue
index 039af71..ba11120 100644
--- a/src/views/plan/manufacturingorder/productorder-form.vue
+++ b/src/views/plan/manufacturingorder/productorder-form.vue
@@ -638,17 +638,11 @@
                 </el-row>
                 <el-row>
                   <el-table
-                    default-expand-all
-                    :data="components"
+                    :data="components[0]"
                     @selection-change="structSelectionChange"
-                    row-key="id"
                     border
-                    :tree-props="{
-                      children: 'children'
-                    }"
                     style="width: 100%"
                     height="400px"
-                    :default-sort="{ prop: 'index' }"
                   >
                     <el-table-column type="selection" width="40" fixed="left" />
                     <el-table-column
@@ -1071,6 +1065,7 @@
 
   data() {
     return {
+      componentsTable:[],
       typeOptions: [],
       paramTemplateSelArr: [],
       paramTemplateSelCol: 'operationTemplateNo',
@@ -1232,6 +1227,7 @@
     this.getBomTypeDbOptions()
     this.getManufactureAttrs('manufacture_attr_type')
     this.getSysParam(sysParam.IS_REPORT_OPERATION)
+    // console.log(this.components);
   },
   watch: {
     'dataForm.partId'(newValue, oldValue) {
@@ -1245,7 +1241,11 @@
         }
       }
     },
-
+    components(newVal,oldVal){
+      console.log("鏂�",newVal);
+      console.log("鑰�",oldVal);
+      console.log(this.components);
+    },
     currentRouting(newValue, oldValue) {
       if (newValue && newValue.id) {
         if (this.dataForm.id != null && this.dataForm.id !== 0) {
@@ -1295,7 +1295,8 @@
       if (newValue && newValue.id) {
         // 鏌ヨ浜у搧缁撴瀯瀵瑰簲鐨勭粍浠�
         getBom(newValue.id).then((response) => {
-          this.components = [response.data.data.tree]
+          console.log("鏌�",this.components);
+          // this.components = [response.data.data.tree]
         })
       }
     },
@@ -1397,6 +1398,7 @@
     },
     // 鏌ヨ褰撳墠杞﹂棿璁㈠崟淇℃伅
     getOrderInfo() {
+      let that=this
       getManufacturingOrder(this.dataForm.id).then((response) => {
         this.dataForm = response.data.data
         // 鎶婂伐鑹烘寕涓婂幓
@@ -1416,7 +1418,7 @@
         }
         // 鎶婁骇鍝佺粨鏋勭粍浠舵寕涓婂幓
         if (this.dataForm.bomRoot) {
-          this.components = [this.dataForm.bomRoot]
+          that.components = [this.dataForm.bomRoot]
         }
       })
     },
diff --git a/src/views/product/workbench/feed-pane.vue b/src/views/product/workbench/feed-pane.vue
index 3dd5b5f..7b41bbb 100644
--- a/src/views/product/workbench/feed-pane.vue
+++ b/src/views/product/workbench/feed-pane.vue
@@ -144,14 +144,14 @@
             ><span style="font-size:14px;font-weight:bold">绾胯竟浠撳悎鏍肩墿鏂�</span>
           </div>
           <div>
-            <el-button
+            <!-- <el-button
               v-if="permissions.product_feed_scan"
               class="feeding-btn"
               type="primary"
               icon="feed-btn-feeding"
               @click="scanAddFeed()"
               >鎵爜鎶曟枡</el-button
-            >
+            > -->
             <el-button
               class="feeding-btn"
               type="primary"
@@ -1130,7 +1130,7 @@
         ><span style="font-size:14px;font-weight:bold">宸叉姇鍏ユ湭娑堣�楃墿鏂�</span>
       </div>
       <div>
-				<el-button
+				<!-- <el-button
 				  class="return-btn"
 				  type="primary"
 				  @click="submitIns()"
@@ -1141,7 +1141,7 @@
 				  type="primary"
 				  @click="inputHandle()"
 				  >灏炬枡澶勭悊</el-button
-				>
+				> -->
         <el-button
           class="return-btn"
           type="primary"
diff --git a/src/views/product/workbench/index.vue b/src/views/product/workbench/index.vue
index 026fcfe..fd3b46e 100644
--- a/src/views/product/workbench/index.vue
+++ b/src/views/product/workbench/index.vue
@@ -256,7 +256,7 @@
                             >
                           </div>
                         </div>
-                        <div class="start-end-div">
+                        <div class="start-end-div"  >
                           <div>
                             <span
                               style="margin-left:8px;font-size:12px;line-height:32px;"
@@ -528,35 +528,36 @@
               </el-form-item>
             </el-form>
           </div>
-          <div class="task-div-content">
-            <div v-if="!isShowNormalTracking" class="task-list-div">
-              <operationTaskPane
-                ref="operateTaskDiv"
-                :workstationId="dutyForm.workstationId"
-                :productSn="operateTaskForm.SN"
-                :orderNumber="operateTaskForm.orderNumber"
-                :spec="operateTaskForm.spec"
-                :outBatchNo="operateTaskForm.outBatchNo"
-                :mpsNo="operateTaskForm.mpsNo"
-                @changeCurrOperateTask="changeCurrOperateTask"
-                @refreshReport="refreshWorkReportPageData"
-              />
-            </div>
-            <div v-if="isShowNormalTracking" class="task-list-div">
-              <operationTaskTable
-                ref="operateTaskTableDiv"
-                :workstationId="dutyForm.workstationId"
-                :productSn="operateTaskForm.SN"
-                :orderNumber="operateTaskForm.orderNumber"
-                :spec="operateTaskForm.spec"
-                :mpsNo="operateTaskForm.mpsNo"
-                @changeCurrOperateTask="changeCurrOperateTask"
-              />
-            </div>
-          </div>
+          <div class="task-div-content" >
+    <div v-if="!isShowNormalTracking" class="task-list-div" >
+      <operationTaskPane
+        ref="operateTaskDiv" :style="{ backgroundColor: taskStatusColor() }"
+        :workstationId="dutyForm.workstationId"
+        :productSn="operateTaskForm.SN"
+        :orderNumber="operateTaskForm.orderNumber"
+        :spec="operateTaskForm.spec"
+        :outBatchNo="operateTaskForm.outBatchNo"
+        :mpsNo="operateTaskForm.mpsNo"
+        @changeCurrOperateTask="changeCurrOperateTask"
+        @refreshReport="refreshWorkReportPageData"
+      />
+    </div>
+    <div v-if="isShowNormalTracking" class="task-list-div" >
+      <operationTaskTable
+        ref="operateTaskTableDiv" :style="{ backgroundColor: taskStatusColor() }"
+        :workstationId="dutyForm.workstationId"
+        :productSn="operateTaskForm.SN"
+        :orderNumber="operateTaskForm.orderNumber"
+        :spec="operateTaskForm.spec"
+        :mpsNo="operateTaskForm.mpsNo"
+        @changeCurrOperateTask="changeCurrOperateTask"
+      />
+    </div>
+
+  </div>
         </div>
       </div>
-      <div :style="{ width: mainMiddleWidth }" v-show="mainMiddleShow">
+      <div :style="{ width: mainMiddleWidth } " v-show="mainMiddleShow">
         <div style="height:86px;width:14px;position: absolute;top:50%">
           <el-tooltip effect="dark" content="鏀剁缉" placement="left">
             <img
@@ -1437,6 +1438,7 @@
   box-sizing: border-box;
   overflow-y: auto;
   margin-bottom: 10px;
+
 }
 
 .task-list-div {
@@ -1560,6 +1562,10 @@
   },
   data() {
     return {
+      dutyForm: {},
+      operateTaskForm: {},
+      isShowNormalTracking: false,
+      // taskStatusColor: '',
       showBan: false,
       dutyCanEdit: false,
       saveButton: false,
@@ -1666,96 +1672,9 @@
       currItem: 'task'
     }
   },
-  computed: {
-    ...mapGetters(['userInfo', 'tagWel', 'permissions'])
-  },
-  created() {
-    document.title = '宸ヤ綔鍙扳�斺�擬ES'
-    if (!this.dutyForm.workstationId) {
-      const k = localStorage.getItem(storage_key)
-      if (k) {
-        this.dutyForm.workstationId = parseInt(k)
-      }
-    }
-    this.initOptions()
-    this.getSysParam(sysParam.SHOW_STEP_BUSINESS)
-    this.getTrackingParam(sysParam.SHOW_TRACKING_TYPE)
-    this.timer = setInterval(this.clockTimer, 1000)
-  },
-  watch: {
-    'dutyForm.workstationId'(val) {
-      if (val) {
-        localStorage.setItem(storage_key, val)
-      }
-      // 宸ヤ綔绔欐敼鍙樻椂锛屾暣涓〉闈㈢殑鍔ㄦ�佹暟鎹渶瀹炴椂鍔犺浇銆侀〉闈㈢紦瀛樻暟鎹渶 鍒濆鍖�
-      this.initPageVariable()
-      this.loadInfoByWorkstation()
-    },
-    'dutyForm.startTime'(val, oldval) {
-      if (val) {
-        this.checkTime()
-      } else {
-        this.warningShow = false
-      }
-    },
-    'dutyForm.endTime'(val, oldval) {
-      if (val) {
-        this.checkTime()
-      } else {
-        this.warningShow = false
-      }
-    },
-    'operateTaskForm.orderNumber'(val) {
-      /* this.$nextTick(() => {
-        this.queryInfoForOrderNumber()
-      }) */
-    },
-    'operateTaskForm.spec'(val) {
-      if (val == '' || val == null) {
-        this.SNs = []
-        this.operateTaskForm.SN = ''
-      } else {
-        const that = this
-        that.SNs = []
-        getProductSnByCustomerNoAndPartName({
-          customerOrderNo: this.operateTaskForm.orderNumber,
-          partName: val
-        }).then((res) => {
-          const result = res.data.data
-          result.forEach(function(item) {
-            const obj = {
-              key: item,
-              value: item
-            }
-            that.SNs.push(obj)
-          })
-        })
-      }
-      this.$nextTick(() => {
-        if (this.partNames.length !== 0) {
-          this.refreshOperateTasks()
-        }
-      })
-    },
-    'operateTaskForm.SN'(val) {
-      this.$nextTick(() => {
-        if (this.SNs.length !== 0) {
-          this.refreshOperateTasks()
-        }
-      })
-    },
-    'operateTaskForm.outBatchNo'(val) {
-      /* this.$nextTick(() => {
-        this.refreshOperateTasks()
-      }) */
-    },
-    'operateTaskForm.mpsNo'(val) {
-      /* this.$nextTick(() => {
-        this.refreshOperateTasks()
-      }) */
-    }
-  },
   methods: {
+    changeCurrOperateTask() {},
+    refreshWorkReportPageData() {},
     refreshOperateTasksByConditions() {
       this.$nextTick(() => {
         this.refreshOperateTasks()
@@ -2597,6 +2516,113 @@
     beforeDestroy() {
       clearInterval(this.timer)
     }
+  },
+  computed: {
+    ...mapGetters(['userInfo', 'tagWel', 'permissions']),
+
+    taskStatusColor() {
+    return function() {
+      const now = new Date();
+      const threeDaysAgo = new Date(now - 3 * 24 * 60 * 60 * 1000);
+      const oneDayAgo = new Date(now - 24 * 60 * 60 * 1000);
+      const today = new Date(now);
+
+      if (threeDaysAgo <= today && today <= oneDayAgo) {
+        return 'yellow';
+      } else if (today <= threeDaysAgo) {
+        return 'blue';
+      } else {
+        return 'red';
+      }
+    };
   }
+  },
+  created() {
+    document.title = '宸ヤ綔鍙扳�斺�擬ES'
+    if (!this.dutyForm.workstationId) {
+      const k = localStorage.getItem(storage_key)
+      if (k) {
+        this.dutyForm.workstationId = parseInt(k)
+      }
+    }
+    this.initOptions()
+    this.getSysParam(sysParam.SHOW_STEP_BUSINESS)
+    this.getTrackingParam(sysParam.SHOW_TRACKING_TYPE)
+    this.timer = setInterval(this.clockTimer, 1000)
+  },
+  watch: {
+    'dutyForm.workstationId'(val) {
+      if (val) {
+        localStorage.setItem(storage_key, val)
+      }
+      // 宸ヤ綔绔欐敼鍙樻椂锛屾暣涓〉闈㈢殑鍔ㄦ�佹暟鎹渶瀹炴椂鍔犺浇銆侀〉闈㈢紦瀛樻暟鎹渶 鍒濆鍖�
+      this.initPageVariable()
+      this.loadInfoByWorkstation()
+    },
+    'dutyForm.startTime'(val, oldval) {
+      if (val) {
+        this.checkTime()
+      } else {
+        this.warningShow = false
+      }
+    },
+    'dutyForm.endTime'(val, oldval) {
+      if (val) {
+        this.checkTime()
+      } else {
+        this.warningShow = false
+      }
+    },
+    'operateTaskForm.orderNumber'(val) {
+      /* this.$nextTick(() => {
+        this.queryInfoForOrderNumber()
+      }) */
+    },
+    'operateTaskForm.spec'(val) {
+      if (val == '' || val == null) {
+        this.SNs = []
+        this.operateTaskForm.SN = ''
+      } else {
+        const that = this
+        that.SNs = []
+        getProductSnByCustomerNoAndPartName({
+          customerOrderNo: this.operateTaskForm.orderNumber,
+          partName: val
+        }).then((res) => {
+          const result = res.data.data
+          result.forEach(function(item) {
+            const obj = {
+              key: item,
+              value: item
+            }
+            that.SNs.push(obj)
+          })
+        })
+      }
+      this.$nextTick(() => {
+        if (this.partNames.length !== 0) {
+          this.refreshOperateTasks()
+        }
+      })
+    },
+    'operateTaskForm.SN'(val) {
+      this.$nextTick(() => {
+        if (this.SNs.length !== 0) {
+          this.refreshOperateTasks()
+        }
+      })
+    },
+    'operateTaskForm.outBatchNo'(val) {
+      /* this.$nextTick(() => {
+        this.refreshOperateTasks()
+      }) */
+    },
+    'operateTaskForm.mpsNo'(val) {
+      /* this.$nextTick(() => {
+        this.refreshOperateTasks()
+      }) */
+    }
+  },
+
 }
 </script>
diff --git a/src/views/product/workbench/operation-task-pane.vue b/src/views/product/workbench/operation-task-pane.vue
index b62149e..50c7b63 100644
--- a/src/views/product/workbench/operation-task-pane.vue
+++ b/src/views/product/workbench/operation-task-pane.vue
@@ -1,6 +1,6 @@
 <template>
   <div>
-    <el-alert
+    <el-alert 
       v-if="!operationTasks || operationTasks.length == 0"
       title="杩樻病鏈夊伐鍗曚笅鍙戝埌姝ゆ満鍙帮紒"
       type="warning"
@@ -8,76 +8,76 @@
     >
     </el-alert>
     <el-card
-      v-for="(item, index) in operationTasks"
-      @click.native="setCheckFlag(item)"
-      shadow="hover"
-      :key="index"
-      :class="['task-item', item.checkFlag ? 'card-checked' : 'card-unchecked']"
+  v-for="(item, index) in operationTasks"
+    @click.native="setCheckFlag(item)"
+  shadow="hover"
+  :key="index"
+  :class="['task-item', item.checkFlag ? 'card-checked' : 'card-unchecked']"
+>
+  <!-- <img class="selectedImg" /> -->
+  <div class="header" >
+    <div>宸ュ崟鍙凤細{{ item.taskNo }}</div>
+    <!-- <div>璁″垝鍙凤細{{ item.mpsNo }}</div> -->
+    <div  
+      :class="[
+        'status-change-div',
+        item.checkFlag ? 'card-checked-status' : 'card-status'
+      ]"
     >
-      <img class="selectedImg" src="/img/workbench/icon_selected.png" />
-      <div class="header">
-        <div>宸ュ崟鍙凤細{{ item.taskNo }}</div>
-        <!-- <div>璁″垝鍙凤細{{ item.mpsNo }}</div> -->
-        <div
-          :class="[
-            'status-change-div',
-            item.checkFlag ? 'card-checked-status' : 'card-status'
-          ]"
-        >
-          <el-select
-            v-if="permissions.product_operationTask_state"
-            v-model="item.statusAction"
-            placeholder="鍔熻兘鑿滃崟"
-            @change="
-              changeTaskState(item.statusAction, item.status, item.id, item)
-            "
-          >
-            <el-option
-              v-for="ele in statusActions"
-              :key="ele.value"
-              :label="ele.label"
-              :value="ele.value"
-              :disabled="ele.disabled"
-            >
-            </el-option>
-          </el-select>
-        </div>
-      </div>
-      <div class="body">
-        <div class="row">
-          <div class="l">闆朵欢鍚嶇О锛�</div>
-          <div class="r">{{ item.partName }}</div>
-        </div>
-        <div class="row">
-          <div class="l">闆朵欢鍙凤細</div>
-          <div class="r">{{ item.partNo }}</div>
-        </div>
-        <!-- <div class="row">
-          <div class="l">鎴愬搧锛�</div>
-          <div class="r">{{ item.productName }}</div>
-        </div> -->
-        <div class="row">
-          <div class="l">璁″垝瀹屾垚鏃堕棿锛�</div>
-          <div class="r">{{ item.planFinishDay }}</div>
-        </div>
-      </div>
-
-      <el-progress
-        class="task-progress"
-        :text-inside="true"
-        :stroke-width="20"
-        :percentage="
-          Number((item.completedQuantity / item.plannedQuantity).toFixed(2)) *
-            100 >
-          100
-            ? 100
-            : Number(
-                (item.completedQuantity / item.plannedQuantity).toFixed(2)
-              ) * 100
+      <el-select
+        v-if="permissions.product_operationTask_state"
+        v-model="item.statusAction"
+        placeholder="鍔熻兘鑿滃崟"
+        @change="
+          changeTaskState(item.statusAction, item.status, item.id, item)
         "
-        :format="formatPercentage(item.completedQuantity, item.plannedQuantity)"
-      ></el-progress>
-    </el-card>
+      >
+        <el-option
+          v-for="ele in statusActions"
+          :key="ele.value"
+          :label="ele.label"
+          :value="ele.value"
+          :disabled="ele.disabled"
+        >
+        </el-option>
+      </el-select>
+    </div>
+  </div>
+  <div class="body">
+    <div class="row">
+      <div class="l">闆朵欢鍚嶇О锛�</div>
+      <div class="r">{{ item.partName }}</div>
+    </div>
+    <div class="row">
+      <div class="l">闆朵欢鍙凤細</div>
+      <div class="r">{{ item.partNo }}</div>
+    </div>
+    <!-- <div class="row">
+      <div class="l">鎴愬搧锛�</div>
+      <div class="r">{{ item.productName }}</div>
+    </div> -->
+    <div class="row">
+      <div class="l">璁″垝瀹屾垚鏃堕棿锛�</div>
+      <div class="r">{{ item.planFinishDay }}</div>
+    </div>
+  </div>
+
+  <el-progress
+    class="task-progress"
+    :text-inside="true"
+    :stroke-width="20"
+    :percentage="
+      Number((item.completedQuantity / item.plannedQuantity).toFixed(2)) *
+        100 >
+      100
+        ? 100
+        : Number(
+            (item.completedQuantity / item.plannedQuantity).toFixed(2)
+          ) * 100
+    "
+    :format="formatPercentage(item.completedQuantity, item.plannedQuantity)"
+  ></el-progress>
+</el-card>
   </div>
 </template>
 <style lang="scss" scoped>
@@ -96,10 +96,13 @@
   border-radius: 12px;
   cursor: pointer;
   position: relative;
+background:none;
   box-shadow: 1px 2px 24px 1px rgba(4, 0, 0, 0.14);
+   
   & + .task-item {
     margin-top: 10px;
   }
+  
   &.card-checked {
     // color: white;
     background-image: -webkit-linear-gradient(
@@ -344,6 +347,28 @@
     }
   },
   methods: {
+
+    // setCheckFlag(item) {
+    //   this.$nextTick(() => {
+    //     this.changeBackgroundColor(item.planFinishDay);
+    //   });
+    // },
+    // changeBackgroundColor(dateString) {
+    //   const date = new Date(dateString);
+    //   const threeDaysAgo = new Date();
+    //   threeDaysAgo.setDate(threeDaysAgo.getDate() - 3);
+    //   const oneDayAgo = new Date();
+    //   oneDayAgo.setDate(oneDayAgo.getDate() - 1);
+
+    //   if (date <= threeDaysAgo) {
+    //     document.body.style.backgroundColor = "blue";
+    //   } else if (date <= oneDayAgo) {
+    //     document.body.style.backgroundColor = "yellow";
+    //   } else {
+    //     document.body.style.backgroundColor = "red";
+    //   }
+    // },
+
     // 鐐瑰嚮宸ュ崟锛岄�変腑宸ュ崟
     setCheckFlag(item) {
       if (item.checkFlag) {
diff --git a/src/views/product/workbench/taskinfo-pane.vue b/src/views/product/workbench/taskinfo-pane.vue
index d5b1dd8..5752299 100644
--- a/src/views/product/workbench/taskinfo-pane.vue
+++ b/src/views/product/workbench/taskinfo-pane.vue
@@ -891,6 +891,7 @@
   getGenerateSN,
   getShiftProductOutByOpIdAndWsId
 } from '@/api/product/personboard'
+
 import {
   getTemplate,
   getDocumentJgt,
diff --git a/src/views/product/workbench/workstationoperate-form.vue b/src/views/product/workbench/workstationoperate-form.vue
index 2ded8dd..3c6345d 100644
--- a/src/views/product/workbench/workstationoperate-form.vue
+++ b/src/views/product/workbench/workstationoperate-form.vue
@@ -1,5 +1,6 @@
 <template>
   <div style="width: 100%;height: 100%"></div>
+
 </template>
 <style lang="scss" scoped>
 .ws-header {
diff --git a/src/views/technology/completeproductstructure/completeproductstructure-form.vue b/src/views/technology/completeproductstructure/completeproductstructure-form.vue
index c821f69..74b5c07 100644
--- a/src/views/technology/completeproductstructure/completeproductstructure-form.vue
+++ b/src/views/technology/completeproductstructure/completeproductstructure-form.vue
@@ -134,6 +134,7 @@
             <el-table-column label="闆朵欢鍚嶇О" prop="partName"></el-table-column>
             <el-table-column label="鍗曚綅" prop="unit"></el-table-column>
             <el-table-column label="鏁伴噺" prop="qpa"></el-table-column>
+            <el-table-column label="鐩樻暟" prop="discNum"></el-table-column>
           </el-table>
           <!-- <el-table
             class="tree-select-table"
diff --git a/src/views/technology/structure/single-structure-form.vue b/src/views/technology/structure/single-structure-form.vue
index 98f13c6..87eca90 100644
--- a/src/views/technology/structure/single-structure-form.vue
+++ b/src/views/technology/structure/single-structure-form.vue
@@ -209,8 +209,8 @@
                 }}</span>
               </template>
             </el-table-column>
-            <el-table-column label="鍥惧彿" prop="drawingNumber" align="center">
-            </el-table-column>
+            <!-- <el-table-column label="鍥惧彿" prop="drawingNumber" align="center">
+            </el-table-column> -->
             <el-table-column align="center" label="鎿嶄綔" width="85px">
               <template slot-scope="scope">
                 <el-button

--
Gitblit v1.9.3