From 6963bf915d1e6e22ea1501e15a13cc0215c590c5 Mon Sep 17 00:00:00 2001
From: value <z1292839451@163.com>
Date: 星期四, 06 六月 2024 00:29:55 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 src/components/do/b1-ins-order/add.vue                             |  110 ++++++
 src/util/file.js                                                   |   20 +
 static/js/menu.js                                                  |    6 
 src/components/view/person-manage.vue                              |    2 
 src/assets/api/controller.js                                       |    6 
 src/components/view/a6-waste-handover.vue                          |  272 ++++++++++++++++++
 src/components/view/a6-external-personnel-management.vue           |  126 ++++++++
 src/view/notice.vue                                                |    4 
 src/main.js                                                        |    6 
 src/components/do/b1-inspect-order-plan/Inspection.vue             |  171 +++++++++++
 src/components/do/b3-work-time-management/work-time-management.vue |    1 
 src/components/do/b3-work-time-management/work-time-statistics.vue |   30 +
 src/components/do/b1-ins-order/fiberoptic-config.vue               |    2 
 src/components/view/a6-device-management.vue                       |    2 
 src/components/view/a6-standard-material-list.vue                  |  138 +++++++++
 15 files changed, 870 insertions(+), 26 deletions(-)

diff --git a/src/assets/api/controller.js b/src/assets/api/controller.js
index e4d62e7..2f5338c 100644
--- a/src/assets/api/controller.js
+++ b/src/assets/api/controller.js
@@ -180,6 +180,11 @@
   submitPlan: "/insOrderPlan/submitPlan", //妫�楠屼换鍔℃彁浜�
   inspectionOrderDetailsTaskSwitching: "/insOrderPlan/inspectionOrderDetailsTaskSwitching", // 妫�楠屽崟璇︽儏-浠诲姟鍒囨崲
   getInsProduct: "/insOrderPlan/getInsProduct", // 鑾峰彇妫�楠岄」鐩拰妯℃澘鍐呭
+  getFileList: "/insOrderPlan/getFileList", // 鏌ョ湅妫�楠屽崟涓嬬殑闄勪欢鍒楄〃
+  delfile: "/insOrderPlan/delfile", // 闄勪欢鍒犻櫎
+  uploadFile: "/insOrderPlan/uploadFile", // 闄勪欢涓婁紶
+  downFile: "/insOrderPlan/downFile", // 闄勪欢涓嬭浇
+  checkSubmitPlan: "/insOrderPlan/checkSubmitPlan", // 鏍¢獙妫�楠屼换鍔℃彁浜�
 }
 
 const systemLog = {
@@ -341,4 +346,5 @@
 
 const auxiliaryOriginalHours = {
   selectAuxiliaryOriginalHours: "/auxiliaryOriginalHours/selectAuxiliaryOriginalHours", //鏌ヨ鍘熷宸ユ椂
+  exportOriginalHours: "/auxiliaryOriginalHours/exportOriginalHours", //瀵煎嚭鍘熷宸ユ椂
 }
diff --git a/src/components/do/b1-ins-order/add.vue b/src/components/do/b1-ins-order/add.vue
index f712e9b..82e3105 100644
--- a/src/components/do/b1-ins-order/add.vue
+++ b/src/components/do/b1-ins-order/add.vue
@@ -281,6 +281,12 @@
               v-model="addObj.remark" :readonly="active>1"></el-input>
           </div>
         </el-col>
+        <el-col class="search_thing" :span="6" v-if="active==1">
+          <div class="search_label">RTS锛�</div>
+          <div class="search_input">
+            <el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="RTS"></el-input>
+          </div>
+        </el-col>
       </el-row>
     </div>
     <div v-show="!configShow">
@@ -631,6 +637,8 @@
         bsm1Val: null,
         bsm1Dia: false,
         total:0,
+        RTS:'',
+        totalArr:[]
       }
     },
     watch: {
@@ -726,6 +734,37 @@
         this.addObj.companyId = selects.id
         this.selectUserDia = false
       },
+      handleAsk(ask){
+        let code = [">","<","=","锛�","锛�","鈮�","鈮�","卤"];
+        if(ask.includes('RTS')){
+          if(ask.includes('&')){
+            // 澶氫釜鏉′欢
+            let arr0 = ask.split('&')
+            let arr1 = []
+            arr0.forEach(m=>{
+                let index = code.findIndex(b=>m.includes(b))
+              if(index>-1){
+                let arr = m.split(code[index]).filter(b=>!!b)
+                let num = eval(this.replaceAll(arr[0],'RTS', this.RTS))
+                m = code[index] + ''+ num
+                arr1.push(m)
+              }
+            })
+            return arr1.join('&')
+          }else{
+            // 鍗曚釜鏉′欢
+            let index = code.findIndex(b=>ask.includes(b))
+            if(index>-1){
+              let arr = ask.split(code[index]).filter(b=>!!b)
+              let num = eval(this.replaceAll(arr[0],'RTS', this.RTS))
+              return code[index] + ''+ num
+            }
+          }
+        }
+      },
+      replaceAll(str, find, replace) {
+        return str.replace(new RegExp(find, 'g'), replace);
+      },
       save() {
         if (!this.addObj.companyId) {
           this.$message.error('鏈�夋嫨瀹㈡埛鍗曚綅')
@@ -749,11 +788,68 @@
           this.$message.error('璇疯緭鍏ユ牱鍝佸瀷鍙�')
         } else if (!this.sampleList.every(m => m.standardMethodListId)) {
           this.$message.error('璇烽�夋嫨妫�楠屾爣鍑�')
+        }else if (this.totalArr.find(a=>a.ask.includes('RTS'))&&!this.RTS) {
+          this.$message.error('璇疯緭鍏TS')
         } else {
+          let sampleList = this.HaveJson(this.sampleList)
+          let isRTS = this.totalArr.find(a=>a.ask.includes('RTS'))
+          if(isRTS){
+            sampleList.forEach(item=>{
+              if(item.insProduct&&item.insProduct.length>0){
+                item.insProduct.forEach(a=>{
+                  let ask = this.handleAsk(a.ask)
+                  if(ask){
+                    a.ask = ask
+                  }
+                })
+              }
+              // 鍏夌氦甯﹂」鐩�
+              if(item.bushing&&item.bushing.length>0){
+                item.bushing.forEach(a=>{
+                  if(a.fiber&&a.fiber.length>0){
+                    a.fiber.forEach(b=>{
+                      if(b.productList&&b.productList.length>0){
+                        b.productList.forEach(c=>{
+                          let ask = this.handleAsk(c.ask)
+                          if(ask){
+                            c.ask = ask
+                          }
+                        })
+                      }
+                    })
+                  }
+                  if(a.fibers&&a.fibers.length>0){
+                    a.fibers.forEach(b=>{
+                      if(b.productList&&b.productList.length>0){
+                        b.productList.forEach(c=>{
+                          let ask = this.handleAsk(c.ask)
+                          if(ask){
+                            c.ask = ask
+                          }
+                        })
+                      }
+                      if(b.fiber&&b.fiber.length>0){
+                        b.fiber.forEach(c=>{
+                          if(c.productList&&c.productList.length>0){
+                            c.productList.forEach(d=>{
+                              let ask = this.handleAsk(d.ask)
+                              if(ask){
+                                d.ask = ask
+                              }
+                            })
+                          }
+                        })
+                      }
+                    })
+                  }
+                })
+              }
+            })
+          }
           this.saveLoad = true
           this.$axios.post(this.$api.insOrder.addInsOrder, {
             insOrder: this.addObj,
-            list: JSON.stringify(this.sampleList.map(a => {
+            list: JSON.stringify(sampleList.map(a => {
               a.model = a.model + ((a.modelNum == null || a.modelNum == '' || a.modelNum == 'null') ? '' : (
                 '-' + a.modelNum))
               return a
@@ -1352,12 +1448,12 @@
         done()
       },
       getTotal(){
-        let arr = []
+        this.totalArr = []
         this.total = 0;
         this.sampleList.forEach(item=>{
           if(item.insProduct&&item.insProduct.length>0){
             item.insProduct.forEach(a=>{
-              arr.push(a)
+               this.totalArr.push(a)
             })
           }
           if(item.bushing&&item.bushing.length>0){
@@ -1366,7 +1462,7 @@
                 a.fiber.forEach(b=>{
                   if(b.productList&&b.productList.length>0){
                     b.productList.forEach(c=>{
-                      arr.push(c)
+                       this.totalArr.push(c)
                     })
                   }
                 })
@@ -1375,14 +1471,14 @@
                 a.fibers.forEach(b=>{
                   if(b.productList&&b.productList.length>0){
                     b.productList.forEach(c=>{
-                      arr.push(c)
+                       this.totalArr.push(c)
                     })
                   }
                   if(b.fiber&&b.fiber.length>0){
                     b.fiber.forEach(c=>{
                       if(c.productList&&c.productList.length>0){
                         c.productList.forEach(d=>{
-                          arr.push(d)
+                           this.totalArr.push(d)
                         })
                       }
                     })
@@ -1393,7 +1489,7 @@
           }
         })
         let mySet = new Set();
-        let arr0 = arr.filter(item=>{
+        let arr0 =  this.totalArr.filter(item=>{
           if(item.state == 1){
             let num1= mySet.size
             if(item.manHourGroup===''||!item.manHourGroup){
diff --git a/src/components/do/b1-ins-order/fiberoptic-config.vue b/src/components/do/b1-ins-order/fiberoptic-config.vue
index 4066118..c20a16e 100644
--- a/src/components/do/b1-ins-order/fiberoptic-config.vue
+++ b/src/components/do/b1-ins-order/fiberoptic-config.vue
@@ -289,7 +289,7 @@
         }
       })
       this.models = this.models.replace(',', '')
-      this.packageInfo.ismiers = this.models.split(',').every(e=>(e.indexOf('d')>-1||e.indexOf('D')))
+      this.packageInfo.ismiers = this.models.split(',').every(e=>(e.indexOf('d')>-1||e.indexOf('D')>-1))
       if(this.sample[0].bushing === undefined || this.sample[0].bushing === null){
         this.bushing = []
       }else{
diff --git a/src/components/do/b1-inspect-order-plan/Inspection.vue b/src/components/do/b1-inspect-order-plan/Inspection.vue
index 13d3872..e245b0e 100644
--- a/src/components/do/b1-inspect-order-plan/Inspection.vue
+++ b/src/components/do/b1-inspect-order-plan/Inspection.vue
@@ -320,6 +320,19 @@
           </tbody>
         </table>
       </div>
+      <el-upload :action="action"
+      :data="{
+        orderId:id
+      }"
+      v-show="state==1"
+      :on-success="handleSuccessUp" :show-file-list="false"
+        accept='.jpg,.jpeg,.png,.gif,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.zip,.rar' :headers="headers" :on-change="beforeUpload"
+        :on-error="onError" ref='upload'>
+        <el-button size="small" type="primary" :loading="upLoading">闄勪欢涓婁紶</el-button></el-upload>
+      <ValueTable class="value-table" ref="fileList" :url="$api.insOrderPlan.getFileList"
+        :componentData="componentData0"
+        :delUrl="$api.insOrderPlan.delfile"
+        :key="upIndex" style="height: 100%;margin-top: 16px;"/>
     </div>
     <el-drawer title="鍏夌氦鍒囨崲" :visible.sync="fiberOpticVisible" :size="500">
       <el-table class="el-table" ref="fiberOpticTable" :data="fiberOptic" height="100%" tooltip-effect="dark" border
@@ -422,6 +435,7 @@
 
 <script>
   import ValueTable from '../../tool/value-table.vue'
+  import file from '../../../util/file'
   export default {
     props: ['sonLaboratory', 'orderId', 'state'],
     components: {
@@ -457,6 +471,53 @@
             insState: {
               select: []
             },
+          },
+          currentId: '',
+          selectField: {},
+          requiredAdd: [],
+          requiredUp: []
+        },
+        componentData0: {
+          entity: {
+            insOrderId:''
+          },
+          isIndex: true,
+          showSelect: false,
+          select: false,
+          selectMethod: '',
+          sort: false,
+          init:false,
+          do: [
+          {
+						id: 'delete',
+						font: '鍒犻櫎',
+						type: 'text',
+						method: 'doDiy',
+            disabFun: (row, index) => {
+								return this.state!=1
+							}
+					}, {
+						id: 'handleDown',
+						font: '涓嬭浇',
+						type: 'text',
+						method: 'handleDown'
+					},
+          ],
+          isPage: false,
+          linkEvent: {},
+          tagField: {
+            type:{
+              select:[
+                {
+                  value: 1,
+                  label: '鍥剧墖'
+                },
+                {
+                  value: 2,
+                  label: '鏂囦欢'
+                }
+              ]
+            }
           },
           currentId: '',
           selectField: {},
@@ -499,8 +560,19 @@
         currentFiberOptic:null,//褰撳墠鍏夌氦
         currentBushing:null,//褰撳墠濂楃
         tableLoading:false,
+        upLoading:false
       }
     },
+    computed: {
+			headers() {
+				return {
+					'token': sessionStorage.getItem('token')
+				}
+			},
+			action() {
+				return this.javaApi + this.$api.insOrderPlan.uploadFile
+			}
+		},
     created() {
       this.componentData.entity.sonLaboratory = this.sonLaboratory;
       this.id = this.orderId;
@@ -521,6 +593,8 @@
           laboratory: this.sonLaboratory
         }).then(async res => {
           this.insOrder = res.data.insOrder;
+          this.componentData0.entity.insOrderId = val;
+          this.$refs.fileList.selectList()
           this.urgentList.forEach(m => {
             if (m.value == this.insOrder.type) {
               this.insOrder.typeName = m.label
@@ -1414,20 +1488,67 @@
         }
         this.addVerifyDia = false
         this.submitLoading = true;
-        this.$axios.post(this.$api.insOrderPlan.submitPlan, {
+        this.$axios.post(this.$api.insOrderPlan.checkSubmitPlan, {
           orderId: this.orderId,
           laboratory: this.sonLaboratory,
-          verifyUser: this.verifyUser
         }).then(res => {
           if (res.code === 200) {
-            this.$message.success("鎿嶄綔鎴愬姛")
-            this.$emit('goback')
+            console.log(res.data)
+            if(!res.data||res.data.length==0){
+              this.$axios.post(this.$api.insOrderPlan.submitPlan, {
+                orderId: this.orderId,
+                laboratory: this.sonLaboratory,
+                verifyUser: this.verifyUser
+              }).then(res => {
+                if (res.code === 200) {
+                  this.$message.success("鎿嶄綔鎴愬姛")
+                  this.$emit('goback')
+                }
+                this.submitLoading = false;
+              }).catch(error => {
+                console.error(error)
+                this.submitLoading = false;
+              })
+            }else{
+              let newData = []
+              const h = this.$createElement
+              for (let i in res.data) {
+                const lastChar = res.data[i].slice(-1);
+                if(lastChar=='-'){
+                  res.data[i] = res.data[i].slice(0, -1);
+                }
+                newData.push(h('p', {style: 'font-size: 12px;'}, (Number(i)+1)+'銆�'+res.data[i]))
+              }
+              newData.push(h('p',  { style: 'font-size: 16px;color:#000;margin-top:12px' },'浠ヤ笂椤圭洰涓嶅悎鏍硷紝纭畾鎻愪氦锛�'))
+              this.$confirm('鎻愮ず',{
+                title:'鎻愮ず',
+                message: h('div', null, newData),
+                confirmButtonText: "纭畾",
+                cancelButtonText: "鍙栨秷",
+                type: ""
+              }).then(() => {
+                this.$axios.post(this.$api.insOrderPlan.submitPlan, {
+                  orderId: this.orderId,
+                  laboratory: this.sonLaboratory,
+                  verifyUser: this.verifyUser
+                }).then(res => {
+                  if (res.code === 200) {
+                    this.$message.success("鎿嶄綔鎴愬姛")
+                    this.$emit('goback')
+                  }
+                }).catch(error => {
+                  console.error(error)
+                })
+              }).catch(() => {})
+            }
+
           }
           this.submitLoading = false;
         }).catch(error => {
           console.error(error)
           this.submitLoading = false;
         })
+        return
       },
       saveInsContext() {
         this.$axios.post(this.$api.insOrderPlan.saveInsContext, {
@@ -1515,6 +1636,48 @@
           }
         })
         this.getTableLists()
+      },
+      handleSuccessUp(response, ) {
+        this.upLoading = false;
+				if (response.code == 200) {
+          this.$message.success('涓婁紶鎴愬姛');
+          this.$refs.fileList.selectList()
+				}
+			},
+      beforeUpload(file) {
+				if (file.size > 1024 * 1024 * 10) {
+					this.$message.error('涓婁紶鏂囦欢涓嶈秴杩�10M');
+					this.$refs.upload.clearFiles()
+					return false;
+				} else {
+          this.upLoading = true;
+					return true;
+				}
+			},
+      onError(err, file, fileList) {
+				this.$message.error('涓婁紶澶辫触')
+				this.$refs.upload.clearFiles()
+			},
+      handleDown(row){
+        this.$axios.post(this.$api.insOrderPlan.downFile, {
+          id: row.id,
+        }).then(res => {
+          if (res.code === 200) {
+            let url = '';
+            if(res.data.type==1){
+              url = this.javaApi+'/img/'+res.data.url
+              file.downloadIamge(url,row.fileName)
+            }else{
+              url = this.javaApi+'/word/'+res.data.url
+              const link = document.createElement('a');
+              link.href = url;
+              link.download = row.fileName;
+              link.click();
+            }
+          }
+        }).catch(error => {
+
+        })
       }
     }
   }
diff --git a/src/components/do/b3-work-time-management/work-time-management.vue b/src/components/do/b3-work-time-management/work-time-management.vue
index b36de84..86d3e07 100644
--- a/src/components/do/b3-work-time-management/work-time-management.vue
+++ b/src/components/do/b3-work-time-management/work-time-management.vue
@@ -333,6 +333,7 @@
 					requiredAdd: [],
 					requiredUp: []
 			},
+      addFileVisible:false,
       entityCopy1: {},
       upIndex1:100,
       weekList:[
diff --git a/src/components/do/b3-work-time-management/work-time-statistics.vue b/src/components/do/b3-work-time-management/work-time-statistics.vue
index 8ffa444..380987a 100644
--- a/src/components/do/b3-work-time-management/work-time-statistics.vue
+++ b/src/components/do/b3-work-time-management/work-time-statistics.vue
@@ -10,7 +10,8 @@
             format="yyyy-MM"
             value-format="yyyy-MM"
             placeholder="閫夋嫨鏈�" size="small" style="width: 100%;"
-            :clearable="false">
+            :clearable="false"
+            @change="refreshTable()">
           </el-date-picker>
         </div>
 			</div>
@@ -39,8 +40,8 @@
 				<el-button size="small" type="primary" @click="refreshTable()">鏌� 璇�</el-button>
 			</div>
       <div class="search_thing">
-        <el-button size="small" type="primary"  @click="handleDown" v-show="currentTable == 'value0'">瀵� 鍑�</el-button>
-        <el-button size="small" type="primary" @click="handleUp" v-show="currentTable == 'value1'">瀵� 鍏�</el-button>
+        <el-button size="small" type="primary"  @click="handleDown" v-show="currentTable == 'value0'" :loading="outLoading">瀵� 鍑�</el-button>
+        <el-button size="small" type="primary"  @click="handleUp" v-show="currentTable == 'value1'">瀵� 鍏�</el-button>
       </div>
 		</div>
     <el-radio-group v-model="currentTable" size="small" :key="'111'" style="margin-top: 10px;">
@@ -55,7 +56,7 @@
       <ValueTable ref="ValueTable0"
         v-if="currentTable == 'value0'"
 				:url="$api.auxiliaryOriginalHours.selectAuxiliaryOriginalHours"
-				:componentData="componentData" :downUrl="$api.auxiliaryWorkingHours.selectAuxiliaryWorkingHours" :key="upIndex" />
+				:componentData="componentData" :key="upIndex" />
       <ValueTable ref="ValueTable1"
         v-if="currentTable == 'value1'"
 				:url="$api.auxiliaryCorrectionHours.selectAuxiliaryCorrectionHours"
@@ -130,7 +131,8 @@
       upIndex1:100,
       weekList:[],
       personList:[],
-      currentTable:'value0'
+      currentTable:'value0',
+      outLoading:false
     }
   },
   mounted(){
@@ -185,7 +187,23 @@
         })
     },
     handleDown(){
-      this.$refs.ValueTable0.downFile(false)
+      // this.$refs.ValueTable0.downFile(false)
+      let entity = {...this.entity}
+      entity.month = entity.month.split('-')[0]+'-'+entity.month.split('-')[1]
+      this.outLoading = true
+      this.$axios.get(this.$api.auxiliaryOriginalHours.exportOriginalHours,{
+        params:entity,
+      },{responseType: "blob"}).then(res => {
+        this.outLoading = false
+        this.$message.success('瀵煎嚭鎴愬姛')
+        const blob = new Blob([res],{ type: 'application/octet-stream' });
+        console.log(blob)
+        const url = URL.createObjectURL(blob);
+        const link = document.createElement('a');
+        link.href = url;
+        link.download = entity.month+'宸ユ椂缁熻琛�.xlsx';
+        link.click();
+      })
     },
     handleUp(){
       this.$refs.ValueTable1.openUpload()
diff --git a/src/components/view/a6-device-management.vue b/src/components/view/a6-device-management.vue
index a44150a..dfe4981 100644
--- a/src/components/view/a6-device-management.vue
+++ b/src/components/view/a6-device-management.vue
@@ -750,7 +750,7 @@
 				delete this.formData.updateTime
 				delete this.formData.createUser
 				delete this.formData.updateUser
-        this.formData.insProductIds = this.formData.insProductIds.join()
+        this.formData.insProductIds = this.formData.insProductIds?this.formData.insProductIds.join():''
         this.upLoad = true;
 				this.$axios.post(this.$api.deviceScope.upDeviceParameter, this.formData, {
 					headers: {
diff --git a/src/components/view/a6-external-personnel-management.vue b/src/components/view/a6-external-personnel-management.vue
new file mode 100644
index 0000000..bb062f6
--- /dev/null
+++ b/src/components/view/a6-external-personnel-management.vue
@@ -0,0 +1,126 @@
+<style scoped>
+  .title {
+    height: 60px;
+    line-height: 60px;
+  }
+
+  .search {
+    background-color: #fff;
+    height: 80px;
+    display: flex;
+    align-items: center;
+  }
+  .search_thing {
+    display: flex;
+    align-items: center;
+    height: 50px;
+  }
+  .search_label {
+    width: 80px;
+    font-size: 14px;
+    text-align: right;
+  }
+
+  .search_input {
+    width: calc(100% - 120px);
+  }
+  .table {
+    margin-top: 10px;
+    background-color: #fff;
+    width: calc(100% - 40px);
+    height: calc(100% - 60px - 80px - 10px - 40px);
+    padding: 20px;
+  }
+
+</style>
+<template>
+  <div class="below-standard-main">
+    <div style="width: 100%;height: 100%;">
+      <div>
+        <el-row class="title">
+          <el-col :span="12" style="padding-left: 20px;">澶栨潵浜哄憳绠$悊</el-col>
+          <el-col :span="12" style="text-align: right;">
+						<el-button size="medium" type="primary" @click="$refs['ValueTable'].openAddDia('鏂板鎺ュ彛')" v-if="addPower">鏂� 澧�</el-button>
+            <el-button size="medium" @click="$refs['ValueTable'].openDownDia()">瀵� 鍑�</el-button>
+					</el-col>
+        </el-row>
+      </div>
+      <div class="search">
+        <div class="search_thing">
+          <div class="search_label">鏃ユ湡锛�</div>
+          <div class="search_input">
+            <el-date-picker
+              v-model="componentData.entity.sample"
+              format="yyyy-MM-dd HH:mm:ss"
+              value-format="yyyy-MM-dd HH:mm:ss"
+              type="date"
+              size="small"
+              @change="refreshTable()"
+              placeholder="閫夋嫨鏃ユ湡">
+            </el-date-picker>
+          </div>
+        </div>
+        <div class="search_thing" style="padding-left: 30px;">
+          <el-button size="small" @click="refresh()">閲� 缃�</el-button>
+          <el-button size="small" type="primary" @click="refreshTable()">鏌� 璇�</el-button>
+        </div>
+      </div>
+      <div class="table">
+          <ValueTable ref="ValueTable" :url="$api.unPass.pageInsUnPass" :componentData="componentData"
+          :key="upIndex" />
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+  import ValueTable from '../tool/value-table.vue'
+export default {
+  components: {
+    ValueTable,
+  },
+  data() {
+    return {
+        componentData: {
+          entity: {
+            sample: null,
+            model: null,
+            orderBy: {
+              field: 'id',
+              order: 'asc'
+            }
+          },
+          isIndex: true,
+          showSelect: false,
+          select: false,
+          do: [],
+          tagField: [],
+          selectField: [],
+          requiredAdd: [],
+          requiredUp: []
+        },
+        entityCopy: {},
+        upIndex: 0,
+        stateList: [],
+        addPower:true,
+      }
+  },
+  mounted() {
+    this.entityCopy = this.HaveJson(this.componentData.entity)
+    this.getPower()
+  },
+  methods :{
+    refreshTable() {
+        this.$refs['ValueTable'].selectList()
+      },
+    refresh() {
+        this.componentData.entity = this.HaveJson(this.entityCopy)
+        this.upIndex++
+      },
+    // 鏉冮檺鍒嗛厤
+    getPower(radio) {
+      let power = JSON.parse(sessionStorage.getItem('power'))
+    },
+  }
+}
+</script>
diff --git a/src/components/view/a6-standard-material-list.vue b/src/components/view/a6-standard-material-list.vue
new file mode 100644
index 0000000..d5d3526
--- /dev/null
+++ b/src/components/view/a6-standard-material-list.vue
@@ -0,0 +1,138 @@
+<style scoped>
+  .title {
+    height: 60px;
+    line-height: 60px;
+  }
+
+  .search {
+    background-color: #fff;
+    height: 80px;
+    display: flex;
+    align-items: center;
+  }
+  .search_thing {
+    display: flex;
+    align-items: center;
+    height: 50px;
+  }
+  .search_label {
+    width: 120px;
+    font-size: 14px;
+    text-align: right;
+  }
+
+  .search_input {
+    width: calc(100% - 120px);
+  }
+  .table {
+    margin-top: 10px;
+    background-color: #fff;
+    width: calc(100% - 40px);
+    height: calc(100% - 60px - 80px - 10px - 40px);
+    padding: 20px;
+  }
+
+</style>
+<template>
+  <div class="below-standard-main">
+    <div style="width: 100%;height: 100%;">
+      <div>
+        <el-row class="title">
+          <el-col :span="12" style="padding-left: 20px;">鏍囧噯鐗╄川娓呭崟</el-col>
+          <el-col :span="12" style="text-align: right;">
+						<el-button size="medium" type="primary" @click="$refs['ValueTable'].openAddDia('鏂板鎺ュ彛')" v-if="addPower">鏂� 澧�</el-button>
+            <el-button size="medium" @click="$refs['ValueTable'].openDownDia()">瀵� 鍑�</el-button>
+					</el-col>
+        </el-row>
+      </div>
+      <div class="search">
+        <div class="search_thing">
+          <div class="search_label">鍚嶇О锛�</div>
+          <div class="search_input">
+              <el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="componentData.entity.model"
+                        @keyup.enter.native="refreshTable()"></el-input></div>
+        </div>
+        <div class="search_thing">
+          <div class="search_label">鐢熶骇鍘傚锛�</div>
+          <div class="search_input">
+            <el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="componentData.entity.sample"
+              @keyup.enter.native="refreshTable()"></el-input>
+          </div>
+        </div>
+        <div class="search_thing" style="padding-left: 30px;">
+          <el-button size="small" @click="refresh()">閲� 缃�</el-button>
+          <el-button size="small" type="primary" @click="refreshTable()">鏌� 璇�</el-button>
+        </div>
+      </div>
+      <div class="table">
+          <ValueTable ref="ValueTable" :url="$api.unPass.pageInsUnPass" :componentData="componentData"
+          :key="upIndex" />
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+  import ValueTable from '../tool/value-table.vue'
+export default {
+  components: {
+    ValueTable,
+  },
+  data() {
+    return {
+        componentData: {
+          entity: {
+            sample: null,
+            model: null,
+            orderBy: {
+              field: 'id',
+              order: 'asc'
+            }
+          },
+          isIndex: true,
+          showSelect: false,
+          select: false,
+          do: [
+            {
+              id: 'update',
+              font: '缂栬緫',
+              type: 'text',
+              method: 'doDiy',
+              field:['createUserName','updateUserName']
+            },{
+              id: 'delete',
+              font: '鍒犻櫎',
+              type: 'text',
+              method: 'doDiy'
+            }
+          ],
+          tagField: [],
+          selectField: [],
+          requiredAdd: ['model','sample',],
+          requiredUp: []
+        },
+        entityCopy: {},
+        upIndex: 0,
+        stateList: [],
+        addPower:true,
+      }
+  },
+  mounted() {
+    this.entityCopy = this.HaveJson(this.componentData.entity)
+    this.getPower()
+  },
+  methods :{
+    refreshTable() {
+        this.$refs['ValueTable'].selectList()
+      },
+    refresh() {
+        this.componentData.entity = this.HaveJson(this.entityCopy)
+        this.upIndex++
+      },
+    // 鏉冮檺鍒嗛厤
+    getPower(radio) {
+      let power = JSON.parse(sessionStorage.getItem('power'))
+    },
+  }
+}
+</script>
diff --git a/src/components/view/a6-waste-handover.vue b/src/components/view/a6-waste-handover.vue
new file mode 100644
index 0000000..0f996e3
--- /dev/null
+++ b/src/components/view/a6-waste-handover.vue
@@ -0,0 +1,272 @@
+<style scoped>
+  .title {
+    height: 60px;
+    line-height: 60px;
+  }
+
+  .search {
+    background-color: #fff;
+    height: 80px;
+    display: flex;
+    align-items: center;
+  }
+  .search_thing {
+    display: flex;
+    align-items: center;
+    height: 50px;
+  }
+  .search_label {
+    width: 100px;
+    font-size: 14px;
+    text-align: right;
+  }
+
+  .search_input {
+    width: calc(100% - 120px);
+  }
+  .table {
+    margin-top: 10px;
+    background-color: #fff;
+    width: calc(100% - 40px);
+    padding: 20px;
+  }
+  .standard-main{
+    overflow-y: auto;
+    scrollbar-width: none;
+  }
+
+</style>
+<template>
+  <div class="standard-main">
+    <div style="width: 100%;height: 100%;">
+      <div>
+        <el-row class="title">
+          <el-col :span="12" style="padding-left: 20px;">搴熺墿澶勭悊浜ゆ帴璁板綍</el-col>
+          <el-col :span="12" style="text-align: right;">
+						<el-button size="medium" type="primary" @click="$refs['ValueTable'].openAddDia('鏂板鎺ュ彛')" v-if="addPower">鏂� 澧�</el-button>
+            <el-button size="medium" type="primary" @click="openAddDetail" v-if="addPower">鏂板鏄庣粏</el-button>
+            <el-button size="medium" @click="$refs['ValueTable'].openDownDia()">瀵� 鍑�</el-button>
+					</el-col>
+        </el-row>
+      </div>
+      <div class="search">
+        <div class="search_thing">
+          <div class="search_label">鏃ユ湡锛�</div>
+          <div class="search_input">
+            <el-date-picker
+              v-model="componentData.entity.sample"
+              format="yyyy-MM-dd HH:mm:ss"
+              value-format="yyyy-MM-dd HH:mm:ss"
+              type="date"
+              size="small"
+              @change="refreshTable()"
+              placeholder="閫夋嫨鏃ユ湡">
+            </el-date-picker>
+          </div>
+        </div>
+        <div class="search_thing" style="padding-left: 30px;">
+          <el-button size="small" @click="refresh()">閲� 缃�</el-button>
+          <el-button size="small" type="primary" @click="refreshTable()">鏌� 璇�</el-button>
+        </div>
+      </div>
+      <div class="table">
+        <el-table
+            :data="tableData"
+            style="width: 100%;margin-bottom: 10px;"
+            height="200px">
+            <el-table-column
+              prop="value0"
+              label="鏂囦欢缂栫爜"
+              width="180">
+            </el-table-column>
+            <el-table-column
+              prop="value1"
+              label="NO:"
+              width="180">
+            </el-table-column>
+            <el-table-column
+              prop="value2"
+              label="褰曞叆鏃ユ湡">
+            </el-table-column>
+            <el-table-column
+              prop="value3"
+              label="褰曞叆浜�">
+            </el-table-column>
+            <el-table-column
+              prop="value4"
+              label="鏇存柊浜�">
+            </el-table-column>
+            <el-table-column
+              prop="value5"
+              label="鏇存柊鏃堕棿">
+            </el-table-column>
+          </el-table>
+          <ValueTable ref="ValueTable" :url="$api.unPass.pageInsUnPass" :componentData="componentData"
+          :key="upIndex" style="height: 400px;" />
+      </div>
+    </div>
+    <el-dialog title="鏄庣粏鏂板" :visible.sync="addDetailVisible" width="400px">
+      <div class="body" style="max-height: 60vh;">
+        <el-row>
+          <el-col class="search_thing" :span="22">
+            <div class="search_label"><span class="required-span">* </span>鍚嶇О锛�</div>
+            <div class="search_input">
+              <el-input v-model="form.value0" size="small" placeholder="璇疯緭鍏�"></el-input>
+            </div>
+          </el-col>
+          <el-col class="search_thing" :span="22">
+            <div class="search_label"><span class="required-span">* </span>浣撶Н锛�</div>
+            <div class="search_input">
+              <el-input v-model="form.value1" size="small" placeholder="璇疯緭鍏�"></el-input>
+            </div>
+          </el-col>
+          <el-col class="search_thing" :span="22">
+            <div class="search_label">閫佸鐞嗘棩鏈燂細</div>
+            <div class="search_input">
+              <el-date-picker
+              v-model="form.value2"
+              type="date"
+              size="small"
+              format="yyyy-MM-dd HH:mm:ss"
+              value-format="yyyy-MM-dd HH:mm:ss"
+              placeholder="閫夋嫨鏃ユ湡"
+              style="width: 100%;">
+            </el-date-picker>
+            </div>
+          </el-col>
+          <el-col class="search_thing" :span="22">
+            <div class="search_label">绉讳氦浜猴細</div>
+            <div class="search_input">
+              <el-select v-model="form.value3" placeholder="璇烽�夋嫨" size="small" style="width: 100%;">
+                <el-option
+                  v-for="item in personList"
+                  :key="item.value"
+                  :label="item.label"
+                  :value="item.value">
+                </el-option>
+              </el-select>
+            </div>
+          </el-col>
+          <el-col class="search_thing" :span="22">
+            <div class="search_label">鎺ユ敹浜猴細</div>
+            <div class="search_input">
+              <el-select v-model="form.value3" placeholder="璇烽�夋嫨" size="small" style="width: 100%;">
+                <el-option
+                  v-for="item in personList"
+                  :key="item.value"
+                  :label="item.label"
+                  :value="item.value">
+                </el-option>
+              </el-select>
+            </div>
+          </el-col>
+          <el-col class="search_thing" :span="22">
+            <div class="search_label">鎺ユ敹鍗曚綅锛�</div>
+            <div class="search_input">
+              <el-select v-model="form.value3" placeholder="璇烽�夋嫨" size="small" style="width: 100%;">
+                <el-option
+                  v-for="item in compList"
+                  :key="item.value"
+                  :label="item.label"
+                  :value="item.value">
+                </el-option>
+              </el-select>
+            </div>
+          </el-col>
+        </el-row>
+      </div>
+      <span slot="footer" class="dialog-footer">
+        <el-row>
+          <el-button @click="noDialogVisible=false,tell=''">鍙� 娑�</el-button>
+          <el-button type="primary" @click="addDetail" :loading="addDetailLoading">纭� 瀹�</el-button>
+        </el-row>
+      </span>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+  import ValueTable from '../tool/value-table.vue'
+export default {
+  components: {
+    ValueTable,
+  },
+  data() {
+    return {
+        componentData: {
+          entity: {
+            sample: null,
+            model: null,
+            orderBy: {
+              field: 'id',
+              order: 'asc'
+            }
+          },
+          isIndex: true,
+          showSelect: false,
+          select: false,
+          do: [
+            {
+              id: 'update',
+              font: '缂栬緫',
+              type: 'text',
+              method: 'doDiy',
+              field:['createUserName','updateUserName']
+            },{
+              id: 'delete',
+              font: '鍒犻櫎',
+              type: 'text',
+              method: 'doDiy'
+            }
+          ],
+          tagField: [],
+          selectField: [],
+          requiredAdd: ['model','sample',],
+          requiredUp: []
+        },
+        tableData:[],
+        entityCopy: {},
+        upIndex: 0,
+        stateList: [],
+        addPower:true,
+        addDetailLoading:false,
+        addDetailVisible:false,
+        form:{},
+        personList:[],
+        compList:[]
+      }
+  },
+  mounted() {
+    this.entityCopy = this.HaveJson(this.componentData.entity)
+    this.getPower()
+  },
+  methods :{
+    refreshTable() {
+        this.$refs['ValueTable'].selectList()
+      },
+    refresh() {
+        this.componentData.entity = this.HaveJson(this.entityCopy)
+        this.upIndex++
+      },
+    // 鏉冮檺鍒嗛厤
+    getPower(radio) {
+      let power = JSON.parse(sessionStorage.getItem('power'))
+    },
+    openAddDetail(){
+      this.form = {}
+      this.addDetailVisible = true
+    },
+    addDetail(){
+      if(!this.form.value0){
+        this.$message.error('璇疯緭鍏ュ悕绉�')
+        return
+      }
+      if(!this.form.value0){
+        this.$message.error('浣撶Н')
+        return
+      }
+      this.addDetailLoading = true
+    }
+  }
+}
+</script>
diff --git a/src/components/view/person-manage.vue b/src/components/view/person-manage.vue
index 57075db..5c39a75 100644
--- a/src/components/view/person-manage.vue
+++ b/src/components/view/person-manage.vue
@@ -289,7 +289,7 @@
             type: 'text',
             method: 'doDiy',
             field: ['roleName', '瑙掕壊=roleId', '瀵嗙爜=password',
-              '濮撳悕EN=nameEn', '骞撮緞=age', '閭=email', '鍗曚綅=company', '绛惧悕=pictureUrl', '涓汉鐓х墖=signatureUrl'
+              '濮撳悕EN=nameEn', '骞撮緞=age', '閭=email', '鍗曚綅=company', '绛惧悕=signatureUrl', '涓汉鐓х墖=pictureUrl'
             ]
           }],
           tagField: {
diff --git a/src/main.js b/src/main.js
index 72b15e5..18e552a 100644
--- a/src/main.js
+++ b/src/main.js
@@ -68,7 +68,11 @@
 
 axios.interceptors.response.use(res => {
 	if(res.data.code === 201){
-		Message.error(res.data.message)
+		Message({
+      type: 'error',
+      dangerouslyUseHTMLString: true,
+      message: `${res.data.message}`
+    })
 	}
 	return res.data
 }, async function(err) {
diff --git a/src/util/file.js b/src/util/file.js
index 3757902..c3a3e7b 100644
--- a/src/util/file.js
+++ b/src/util/file.js
@@ -38,4 +38,24 @@
     })
     return await xhrPromise
   },
+  downloadIamge(imgsrc, name) {//涓嬭浇鍥剧墖鍦板潃鍜屽浘鐗囧悕
+    var image = new Image();
+    // 瑙e喅璺ㄥ煙 Canvas 姹℃煋闂
+    image.setAttribute("crossOrigin", "anonymous");
+    image.onload = function() {
+      var canvas = document.createElement("canvas");
+      canvas.width = image.width;
+      canvas.height = image.height;
+      var context = canvas.getContext("2d");
+      context.drawImage(image, 0, 0, image.width, image.height);
+      var url = canvas.toDataURL("image/png"); //寰楀埌鍥剧墖鐨刡ase64缂栫爜鏁版嵁
+
+      var a = document.createElement("a"); // 鐢熸垚涓�涓猘鍏冪礌
+      var event = new MouseEvent("click"); // 鍒涘缓涓�涓崟鍑讳簨浠�
+      a.download = name || "photo"; // 璁剧疆鍥剧墖鍚嶇О
+      a.href = url; // 灏嗙敓鎴愮殑URL璁剧疆涓篴.href灞炴��
+      a.dispatchEvent(event); // 瑙﹀彂a鐨勫崟鍑讳簨浠�
+    };
+    image.src = imgsrc;
+  }
 };
diff --git a/src/view/notice.vue b/src/view/notice.vue
index c4beade..00bc85e 100644
--- a/src/view/notice.vue
+++ b/src/view/notice.vue
@@ -11,9 +11,9 @@
         class="notice-content-item"
         v-for="(m,i) in list"
         :key="i"
-        :class="{readStyle:!m.viewStatus}"
+        :class="{readStyle:m.viewStatus}"
         @click="goNoticeDetail(m)">
-          <img :src="`../../static/img/notice-${m.viewStatus?0:1}-${m.messageType}.svg`" alt="" style="margin-right: 6px;">
+          <img :src="`../../static/img/notice-${m.viewStatus?1:0}-${m.messageType}.svg`" alt="" style="margin-right: 6px;">
           <div class="notice-content-item-left">
             <p>{{ m.theme }}</p>
             <p style="width: 100%;display: flex;align-items: center;justify-content: space-between;">
diff --git a/static/js/menu.js b/static/js/menu.js
index 9c1cba6..024fc74 100644
--- a/static/js/menu.js
+++ b/static/js/menu.js
@@ -368,7 +368,7 @@
 		}, {
 			v: "澶栨潵浜哄憳绠$悊",
 			i: "font icon-erjidaohang",
-			u: "",
+			u: "a6-external-personnel-management",
 			g: "6.3 璁炬柦鍜岀幆澧冩潯浠�",
 			p: ""
 		}, {
@@ -404,7 +404,7 @@
 		}, {
 			v: "搴熺墿澶勭悊浜ゆ帴璁板綍",
 			i: "font icon-erjidaohang",
-			u: "",
+			u: "a6-waste-handover",
 			g: "6.3 璁炬柦鍜岀幆澧冩潯浠�",
 			p: ""
 		}, {
@@ -500,7 +500,7 @@
 		}, {
 			v: "鏍囧噯鐗╄川娓呭崟",
 			i: "font icon-erjidaohang",
-			u: "",
+			u: "a6-standard-material-list",
 			g: "6.5 璁¢噺婧簮鎬�",
 			p: ""
 		}, {

--
Gitblit v1.9.3