From 2903f0fb05e8818bf5be4b7f629f7d8226480fa1 Mon Sep 17 00:00:00 2001
From: Mr.Zhang <710666463@qq.com>
Date: 星期五, 25 八月 2023 18:36:37 +0800
Subject: [PATCH] 1.0.3 企业 大屏 平台

---
 web_standard/src/components/common/Header.vue                           |    4 
 web_standard/src/views/ext/salaryStatistic.vue                          |    1 
 web_standard/src/components/system/user/OperaSystemRoleApplysWindow.vue |    4 
 web_standard/src/components/common/Menu.vue                             |    6 
 web_standard/src/views/ext/deviceExt.vue                                |   19 +
 web_standard/coderd.json                                                |    2 
 screen_standard/src/views/index.vue                                     |   71 ++++++-
 screen_standard/vite.config.js                                          |   10 
 web_standard/src/layouts/TableLayout.vue                                |    5 
 web_standard/package.json                                               |    4 
 web_standard/src/api/business/unqualifiedRecord.js                      |   16 +
 web_standard/src/api/ext/workorderRecordPutExt.js                       |   16 +
 web_standard/src/components/ext/OperaWInboundExtWindow.vue              |  161 ++++++---------
 platform_web/src/components/business/OperaClientMangerWindow.vue        |    6 
 platform_web/src/views/business/clientManger.vue                        |   11 
 web_standard/src/api/ext/categoryUnionExt.js                            |    2 
 web_standard/src/components/ext/OperaUnitExtWindow.vue                  |   11 
 web_standard/public/template/device_import_template.xlsx                |    0 
 platform_web/src/views/system/loginLog.vue                              |   55 +++-
 screen_standard/src/views/process.vue                                   |   18 +
 web_standard/src/components/system/user/OperaSystemRoleNone.vue         |    2 
 web_standard/src/components/ext/OperaPlansDetailExtWindow.vue           |    2 
 web_standard/src/components/system/role/PermissionConfigWindow.vue      |    2 
 web_standard/src/views/ext/appliancesExt.vue                            |    4 
 web_standard/src/views/business/unqualifiedRecord.vue                   |   98 +++++++++
 platform_web/package.json                                               |    2 
 web_standard/src/views/ext/workorderPutRecordExt.vue                    |    6 
 web_standard/.env.development                                           |    4 
 platform_web/src/components/business/OperaClientDetailWindow.vue        |   27 +-
 29 files changed, 392 insertions(+), 177 deletions(-)

diff --git a/platform_web/package.json b/platform_web/package.json
index 44c7272..c288459 100644
--- a/platform_web/package.json
+++ b/platform_web/package.json
@@ -5,7 +5,7 @@
   "scripts": {
     "serve": "vue-cli-service serve",
     "build:pro": "vue-cli-service build",
-    "build:staging": "vue-cli-service build --mode staging",
+    "build:dev": "vue-cli-service build --mode staging",
     "lint": "vue-cli-service lint",
     "fix": "eslint --ext .js,.vue src --fix"
   },
diff --git a/platform_web/src/components/business/OperaClientDetailWindow.vue b/platform_web/src/components/business/OperaClientDetailWindow.vue
index 24ed75a..e64ba84 100644
--- a/platform_web/src/components/business/OperaClientDetailWindow.vue
+++ b/platform_web/src/components/business/OperaClientDetailWindow.vue
@@ -6,15 +6,15 @@
     @confirm="confirm"
   >
     <div class="title-style">瀹㈡埛淇℃伅 <div class="tips">{{form.oepnType ? '姝e紡' : '浣撻獙' }}</div><div class="tips">鏈夋晥鏈燂細{{ form.oepnValidDate.substring(0, form.oepnValidDate.length-9) }}</div></div>
-    <el-descriptions direction="horizontal" :column="1">
-      <el-descriptions-item label="瀹㈡埛鍚嶇О">{{ form.orgName }}</el-descriptions-item>
-      <el-descriptions-item label="瀹㈡埛绠�绉�">{{ form.remark }}</el-descriptions-item>
-      <el-descriptions-item label="涓荤櫥褰曡处鍙�">{{ form.phone }}</el-descriptions-item>
-      <el-descriptions-item label="鎵�鍦ㄥ湴鍧�">{{ form.addr }}</el-descriptions-item>
-      <el-descriptions-item label="浼佷笟淇$敤浠g爜">{{ form.creditCode }}</el-descriptions-item>
-      <el-descriptions-item label="鑱旂郴浜�">{{ form.linkName }} {{ form.linkPhone }}</el-descriptions-item>
-      <el-descriptions-item label="閿�鍞汉鍛�">{{ form.salespersonName }} {{ form.salespersonmobile }}</el-descriptions-item>
-      <el-descriptions-item label="钀ヤ笟鎵х収">
+    <el-descriptions direction="horizontal" :column="1" :colon="false">
+      <el-descriptions-item label="瀹㈡埛鍚嶇О锛�">{{ form.orgName }}</el-descriptions-item>
+      <el-descriptions-item label="瀹㈡埛绠�绉帮細">{{ form.remark }}</el-descriptions-item>
+      <el-descriptions-item label="涓荤櫥褰曡处鍙凤細">{{ form.phone }}</el-descriptions-item>
+      <el-descriptions-item label="鎵�鍦ㄥ湴鍧�锛�">{{ form.addr }}</el-descriptions-item>
+      <el-descriptions-item label="浼佷笟淇$敤浠g爜锛�">{{ form.creditCode }}</el-descriptions-item>
+      <el-descriptions-item label="鑱旂郴浜猴細">{{ form.linkName }} {{ form.linkPhone }}</el-descriptions-item>
+      <el-descriptions-item label="閿�鍞汉鍛橈細">{{ form.salespersonName }} {{ form.salespersonmobile }}</el-descriptions-item>
+      <el-descriptions-item label="钀ヤ笟鎵х収锛�">
         <!-- {{ form.fileurlfull }} -->
         <el-image
           v-if="form.fileStoreAddr"
@@ -24,7 +24,7 @@
           :preview-src-list="[form.fileurlfull]"
         ></el-image>
       </el-descriptions-item>
-      <el-descriptions-item label="绯荤粺璁块棶鍦板潃">
+      <el-descriptions-item label="绯荤粺璁块棶鍦板潃锛�">
         <a :href="form.systemUrl" target="_blank" rel="noopener noreferrer">{{ form.systemUrl }}</a>
         <span style="cursor: pointer; margin-left: 10px;" @click="copy">澶嶅埗</span>
       </el-descriptions-item>
@@ -78,7 +78,7 @@
     open (target) {
       this.title = '瀹㈡埛璧勬枡'
       this.visible = true
-      // debugger
+      debugger
       // 缂栬緫
       this.$nextTick(() => {
         for (const key in this.form) {
@@ -102,7 +102,10 @@
 
 <style lang="scss" scoped>
 ::v-deep .el-descriptions-item__label {
-  width: 90px;
+  width: 85px;
+  text-align: right;
+  display: flex;
+  flex-direction: row-reverse;
 }
 .title-style {
   font-weight: 500;
diff --git a/platform_web/src/components/business/OperaClientMangerWindow.vue b/platform_web/src/components/business/OperaClientMangerWindow.vue
index 9d37323..9a42755 100644
--- a/platform_web/src/components/business/OperaClientMangerWindow.vue
+++ b/platform_web/src/components/business/OperaClientMangerWindow.vue
@@ -54,8 +54,8 @@
         </el-form-item>
       </div>
        <div class="tip-line">
-          <el-form-item label="寮�閫氱敤鎴锋暟" prop="openUserNum">
-            <el-input v-model="form.openUserNum" placeholder="璇疯緭鍏ュ紑閫氱敤鎴锋暟"   v-trim/>
+          <el-form-item label="浜烘暟闄愬埗" prop="openUserNum">
+            <el-input v-model="form.openUserNum" placeholder="璇疯緭鍏ヤ汉鏁伴檺鍒�"   v-trim/>
              娉細涓�0涓嶉檺鍒朵汉鏁�
           </el-form-item>
         </div>
@@ -150,7 +150,7 @@
         linkPhone: '',
         fileStoreAddr: '',
         fileurlfull: '',
-        openUserNum:0
+        openUserNum: 10
         // fileList: [],
       },
       isEdit: false,
diff --git a/platform_web/src/views/business/clientManger.vue b/platform_web/src/views/business/clientManger.vue
index 6b36e93..4c2d44c 100644
--- a/platform_web/src/views/business/clientManger.vue
+++ b/platform_web/src/views/business/clientManger.vue
@@ -51,11 +51,11 @@
             <span>{{ row.oepnType == 1 ? '姝e紡' : '璇曠敤' }}</span>
           </template>
         </el-table-column>
+        <el-table-column prop="openUserNum" label="浜烘暟闄愬埗" align="center" min-width="140px"></el-table-column>
         <el-table-column prop="phone" label="涓昏处鍙�" align="center" min-width="100px"></el-table-column>
         <el-table-column prop="linkName" label="鑱旂郴浜�" align="center" min-width="100px"></el-table-column>
         <el-table-column prop="linkPhone" label="鑱旂郴鐢佃瘽" align="center" min-width="120px"></el-table-column>
         <el-table-column prop="oepnValidDate" label="鏈夋晥鏈�" align="center" min-width="140px"></el-table-column>
-        <el-table-column prop="openUserNum" label="寮�閫氱敤鎴锋暟" align="center" min-width="140px"></el-table-column>
         <el-table-column prop="salespersonName" label="閿�鍞汉鍛�" align="center" min-width="100px"></el-table-column>
         <el-table-column prop="createTime" label="鍒涘缓鏃堕棿" align="center" min-width="140px"></el-table-column>
         <el-table-column prop="status" label="鐘舵��" align="center" min-width="100px">
@@ -142,8 +142,13 @@
       // this.$refs.operaApplianceChangeDetailWindow.open('鏇存崲鍗曡鎯�', row)
       findCompanyInfo({ CompanyId: row.id })
         .then(res => {
-          const element = isEdit ? this.$refs.operaClientMangerWindow : this.$refs.operaClientDetailWindow
-          element.open(res)
+          if (isEdit) {
+            this.$refs.operaClientMangerWindow.open({...res, openUserNum: row.openUserNum})
+          } else {
+            this.$refs.operaClientDetailWindow.open(res)
+          }
+          // const element = isEdit ? this.$refs.operaClientMangerWindow : this.$refs.operaClientDetailWindow
+          // element.open({...res, ...row})
         })
         .catch(err => {
           this.$tip.error(err)
diff --git a/platform_web/src/views/system/loginLog.vue b/platform_web/src/views/system/loginLog.vue
index 60d10ae..aff49db 100644
--- a/platform_web/src/views/system/loginLog.vue
+++ b/platform_web/src/views/system/loginLog.vue
@@ -5,7 +5,7 @@
       <el-form-item label="鐧诲綍鐢ㄦ埛鍚�" prop="loginUsername">
         <el-input v-model="searchForm.loginUsername" placeholder="璇疯緭鍏ョ櫥褰曠敤鎴峰悕" @keypress.enter.native="search"></el-input>
       </el-form-item>
-      <el-form-item label="鐧诲綍IP" prop="ip">
+      <!-- <el-form-item label="鐧诲綍IP" prop="ip">
         <el-input v-model="searchForm.ip" placeholder="璇疯緭鍏ョ櫥褰旾P" @keypress.enter.native="search"></el-input>
       </el-form-item>
       <el-form-item label="鏈嶅姟鍣↖P" prop="serverIp">
@@ -16,8 +16,8 @@
           <el-option value="true" label="鐧诲綍鎴愬姛"/>
           <el-option value="false" label="鐧诲綍澶辫触"/>
         </el-select>
-      </el-form-item>
-      <el-form-item label="鏉ユ簮" prop="success">
+      </el-form-item> -->
+      <el-form-item label="鏉ユ簮" prop="orgin">
         <el-select v-model="searchForm.orgin" placeholder="璇烽�夋嫨鐧诲綍鏉ユ簮" clearable @change="search">
           <el-option value="0" label="PC鐧婚檰"/>
           <el-option value="1" label="閽夐拤骞冲彴"/>
@@ -26,7 +26,7 @@
           <el-option value="4" label="寰俊灏忕▼搴�"/>
         </el-select>
       </el-form-item>
-      <el-form-item label="鐧诲綍鏃堕棿" prop="loginTime">
+      <!-- <el-form-item label="鐧诲綍鏃堕棿" prop="loginTime">
         <el-date-picker
           v-model="searchDateRange"
           type="datetimerange"
@@ -36,10 +36,10 @@
           end-placeholder="缁撴潫鏃堕棿"
           @change="handleSearchTimeChange"
         ></el-date-picker>
-      </el-form-item>
+      </el-form-item> -->
       <section>
         <el-button type="primary" @click="search">鎼滅储</el-button>
-        <el-button :loading="isWorking.export" @click="exportExcel">瀵煎嚭</el-button>
+        <!-- <el-button :loading="isWorking.export" @click="exportExcel">瀵煎嚭</el-button> -->
         <el-button @click="reset">閲嶇疆</el-button>
       </section>
     </el-form>
@@ -50,16 +50,23 @@
         :data="tableData.list"
         stripe
         border
-        :default-sort="{prop: 'loginTime', order: 'descending'}"
         @sort-change="handleSortChange"
       >
+      <!-- :default-sort="{prop: 'loginTime', order: 'descending'}" -->
+
         <el-table-column prop="orgin" label="鏉ユ簮" align="center" min-width="100px">
            <template slot-scope="{row}">
             {{row.orgin | orginText}}
           </template>
         </el-table-column>
+        <el-table-column prop="companyUserId" label="鐢ㄦ埛id" align="center" min-width="100px"></el-table-column>
         <el-table-column prop="companyName" label="浼佷笟鍚嶇О" align="center" min-width="100px"></el-table-column>
         <el-table-column prop="loginUsername" label="鐧诲綍鐢ㄦ埛鍚�" align="center" min-width="100px"></el-table-column>
+        <el-table-column prop="companyUserName" label="鐧诲綍鐢ㄦ埛鍚�" align="center" min-width="100px">
+          <template slot-scope="{row}">
+            {{ row.companyUserName || row.loginUsername }}
+          </template>
+        </el-table-column>
         <el-table-column prop="ip" label="鐧诲綍IP" align="center" min-width="120px"></el-table-column>
         <el-table-column prop="location" label="鐧诲綍鍦板潃" align="center" min-width="160px"></el-table-column>
         <el-table-column prop="clientInfo" label="瀹㈡埛绔�" align="center" min-width="160px"></el-table-column>
@@ -73,7 +80,11 @@
             {{row.success | statusText}}
           </template>
         </el-table-column>
-        <el-table-column prop="reason" label="澶辫触鍘熷洜" min-width="160px"></el-table-column>
+        <el-table-column prop="reason" label="澶辫触鍘熷洜" min-width="160px" show-overflow-tooltip>
+          <template slot-scope="{row}">
+            <span class="lang-title-style">{{ row.reason }}</span>
+          </template>
+        </el-table-column>
       </el-table>
       <pagination
           @size-change="handleSizeChange"
@@ -133,15 +144,7 @@
   },
   methods: {
     // 鏃堕棿鎼滅储鑼冨洿鍙樺寲
-    handleSearchTimeChange (value) {
-      this.searchForm.startTime = null
-      this.searchForm.endTime = null
-      if (value != null) {
-        this.searchForm.startTime = value[0]
-        this.searchForm.endTime = value[1]
-      }
-      this.search()
-    }
+    
   },
   created () {
     this.config({
@@ -155,6 +158,24 @@
       }]
     })
     this.search()
+  },
+  methods: {
+    handleSearchTimeChange (value) {
+      this.searchForm.startTime = null
+      this.searchForm.endTime = null
+      if (value != null) {
+        this.searchForm.startTime = value[0]
+        this.searchForm.endTime = value[1]
+      }
+      this.search()
+    },
+    reset() {
+      this.$refs.searchForm.resetFields()
+      this.searchDateRange = []
+      this.searchForm.startTime = ''
+      this.searchForm.endTime = ''
+      this.search()
+    }
   }
 }
 </script>
diff --git a/screen_standard/src/views/index.vue b/screen_standard/src/views/index.vue
index 16b27c6..025a41b 100644
--- a/screen_standard/src/views/index.vue
+++ b/screen_standard/src/views/index.vue
@@ -285,9 +285,11 @@
     .then(res => {
       if (res.length > 0) {
         data.baseNum = res[0].doneNum
-        data.production = res
-        start()
+      } else {
+        data.baseNum = 0
       }
+      data.production = res
+      data.fifthScroll = true
     })
   // 浠撳簱瀹炴椂浣欓噺缁熻
   // getStockList(companyId.value, departId.value)
@@ -405,6 +407,11 @@
         fontSize: 12
       }
     },
+    grid: {
+      top: 40,
+      bottom: 30,
+      left: 60
+    },
     xAxis: {
       type: 'category',
       boundaryGap: false,
@@ -412,6 +419,15 @@
         lineStyle: {
           width: 0.5,
           color: ['#fff']
+        }
+      },
+      axisLine: {
+        show: true,
+        onZero: true,
+        lineStyle: {
+          width: 0.5,
+          color: '#fff',
+          opacity: .5
         }
       },
       axisLabel: {
@@ -428,6 +444,15 @@
         lineStyle: {
           width: 0.5,
           color: ['#fff']
+        }
+      },
+      axisLine: {
+        show: true,
+        onZero: true,
+        lineStyle: {
+          width: 1,
+          color: '#fff',
+          opacity: .5
         }
       },
       axisLabel: {
@@ -767,18 +792,29 @@
   if (scrollDom.offsetHeight == 0) {
     scrollDom = scrollContainer4.value
   } else {
-    // console.log(bottom1.value.height);
-    let num = scrollContainer4.value.offsetHeight / 35;
-    // alert(scrollDom.children.length  +"---------------"+num)
-    // 濡傛灉鍒楄〃鏁伴噺杩囧皯涓嶈繘琛屾粴鍔�
+    // console.log(scrollDom.offsetHeight);
+    let num = scrollDom.offsetHeight / 35;
+    num = num + (scrollDom.offsetHeight % 35  > 0 ? 1 : 0)
+    // console.log('----------');
+    // console.log('scrollDom.children.length', scrollDom.children.length)
+    // console.log('scrollDom.offsetHeight % 35', scrollDom.offsetHeight % 35)
+    // console.log('num', num)
+    // console.log('----------');
+    // // 濡傛灉鍒楄〃鏁伴噺杩囧皯涓嶈繘琛屾粴鍔�
     if (scrollDom.children.length <= num) {
       clearTimeout(timer4.value)
       return
     }
     // 缁勪欢杩涜婊氬姩
-    scrollDom.scrollTop += 2
+    scrollDom.scrollTop += 1
+    
     // 鍒ゆ柇鏄惁婊氬姩鍒板簳閮�
-    if (scrollDom.scrollTop+1 >= (scrollDom.scrollHeight - scrollDom.clientHeight)) {
+    if (scrollDom.scrollTop >= (scrollDom.scrollHeight - scrollDom.clientHeight)) {
+      console.log('scrollDom.scrollTop', scrollDom.scrollTop);
+      console.log('scrollDom.scrollHeight', scrollDom.scrollHeight);
+      console.log('scrollDom.clientHeight', scrollDom.clientHeight );
+    // if (scrollDom.scrollTop >= 35) {
+      
       // 鑾峰彇缁勪欢绗竴涓妭鐐�
       let first = scrollDom.children[0]
       // 鍒犻櫎鑺傜偣
@@ -794,8 +830,23 @@
 // })
 
 onMounted(() => {
-  if (!departId.value) return;
-  timer5.value = setInterval(init(), 60000)
+  if (departId.value) {
+    console.log('onMounted');
+    init()
+    timer5.value = setInterval(init, 60000)
+    timer.value = setInterval(scrillAction, 100)
+  }
+  window.addEventListener('resize', () => {
+    setTypeChart()
+    setDayChart()
+  })
+  
+})
+
+onUnmounted(() => {
+  clearTimeout(timer.value)
+  clearTimeout(timer5.value)
+  
 })
 </script>
 
diff --git a/screen_standard/src/views/process.vue b/screen_standard/src/views/process.vue
index 5ddfde1..d81206d 100644
--- a/screen_standard/src/views/process.vue
+++ b/screen_standard/src/views/process.vue
@@ -328,6 +328,15 @@
           color: ['#fff']
         }
       },
+      axisLine: {
+        show: true,
+        onZero: true,
+        lineStyle: {
+          width: 1,
+          color: '#fff',
+          opacity: .5
+        }
+      },
       axisLabel: {
         textStyle: {
           color: '#fff'
@@ -344,6 +353,15 @@
           color: ['#fff']
         }
       },
+      axisLine: {
+        show: true,
+        onZero: true,
+        lineStyle: {
+          width: 1,
+          color: '#fff',
+          opacity: .5
+        }
+      },
       axisLabel: {
         textStyle: {
           color: '#fff'
diff --git a/screen_standard/vite.config.js b/screen_standard/vite.config.js
index 966fbbe..722a9a4 100644
--- a/screen_standard/vite.config.js
+++ b/screen_standard/vite.config.js
@@ -11,10 +11,10 @@
 // https://vitejs.dev/config/
 export default defineConfig(({mode, command}) => {
   let env = loadEnv(mode, process.cwd(), '')
-  console.log('-------');
-  console.log(env.VITE_BASE_PATH);
-  console.log(env.VITE_BASE_PATH.replace(env.VITE_BASE_PATH, ''));
-  console.log('-------');
+  // console.log('-------');
+  // console.log(env.VITE_BASE_PATH);
+  // console.log(env.VITE_BASE_PATH.replace(env.VITE_BASE_PATH, ''));
+  // console.log('-------');
   return {
     base:env.VITE_BASE_CONTEXT,
     plugins: [
@@ -42,6 +42,8 @@
   
     // 鏈湴杩愯閰嶇疆锛屽強鍙嶅悜浠g悊閰嶇疆
     server: {
+      host: '192.168.0.3',
+      port: '8080',
       cors: true, // 榛樿鍚敤骞跺厑璁镐换浣曟簮
       open: true, // 鍦ㄦ湇鍔″櫒鍚姩鏃惰嚜鍔ㄥ湪娴忚鍣ㄤ腑鎵撳紑搴旂敤绋嬪簭
       //鍙嶅悜浠g悊閰嶇疆锛屾敞鎰弐ewrite鍐欐硶锛屽紑濮嬫病鐪嬫枃妗e湪杩欓噷韪╀簡鍧�
diff --git a/web_standard/.env.development b/web_standard/.env.development
index 475d3bc..1d53d1c 100644
--- a/web_standard/.env.development
+++ b/web_standard/.env.development
@@ -14,14 +14,14 @@
 VUE_APP_API_PREFIX = ''
 
 # 鐒︽澗
-# VUE_APP_BASE_URL = 'http://192.168.0.36:10021/'
+VUE_APP_BASE_URL = 'http://192.168.0.36:10021/'
 # VUE_APP_BASE_URL = 'http://192.168.0.134:10021/'
 
 # 浠诲悍鏈湴
 # VUE_APP_BASE_URL = 'http://192.168.0.15:10021/'
 
 # 姹熻悕
-VUE_APP_BASE_URL = 'http://192.168.0.35:10021/'
+# VUE_APP_BASE_URL = 'http://192.168.0.35:10021/'
 
 # 娴嬭瘯鏈嶅姟鍣�
 # VUE_APP_BASE_URL = 'https://dmtest.ahapp.net/doumeeplant_api/'
diff --git a/web_standard/coderd.json b/web_standard/coderd.json
index 36dcaf5..d5d499c 100644
--- a/web_standard/coderd.json
+++ b/web_standard/coderd.json
@@ -4,7 +4,7 @@
     "alias": "eva",
     "command": "page",
     "option": {
-      "resources": "salary_param"
+      "resources": "unqualified_record"
     }
   }
 }
\ No newline at end of file
diff --git a/web_standard/package.json b/web_standard/package.json
index 51ae3a5..1703628 100644
--- a/web_standard/package.json
+++ b/web_standard/package.json
@@ -4,8 +4,8 @@
   "private": true,
   "scripts": {
     "serve": "vue-cli-service serve",
-    "build": "vue-cli-service build",
-    "build:staging": "vue-cli-service build --mode staging",
+    "build:pro": "vue-cli-service build",
+    "build:dev": "vue-cli-service build --mode staging",
     "lint": "vue-cli-service lint",
     "fix": "eslint --ext .js,.vue src --fix"
   },
diff --git a/web_standard/public/template/device_import_template.xlsx b/web_standard/public/template/device_import_template.xlsx
new file mode 100644
index 0000000..5eedf8a
--- /dev/null
+++ b/web_standard/public/template/device_import_template.xlsx
Binary files differ
diff --git a/web_standard/src/api/business/unqualifiedRecord.js b/web_standard/src/api/business/unqualifiedRecord.js
new file mode 100644
index 0000000..b063192
--- /dev/null
+++ b/web_standard/src/api/business/unqualifiedRecord.js
@@ -0,0 +1,16 @@
+import request from '../../utils/request'
+
+// 鏌ヨ
+export function fetchList (data) {
+  return request.post('/business/unqualifiedRecord/page', data, {
+    trim: true
+  })
+}
+
+// 瀵煎嚭Excel
+export function exportExcel (data) {
+  return request.post('/business/unqualifiedRecord/exportExcel', data, {
+    trim: true,
+    download: true
+  })
+}
diff --git a/web_standard/src/api/ext/categoryUnionExt.js b/web_standard/src/api/ext/categoryUnionExt.js
index 8305850..c3a74f9 100644
--- a/web_standard/src/api/ext/categoryUnionExt.js
+++ b/web_standard/src/api/ext/categoryUnionExt.js
@@ -26,7 +26,7 @@
 }
 // 鏌ヨ鎵�鏈�
 export function checkAllList (data) {
-  return request.post('/ext/categoryUnionExt/checkAllList', data)
+  return request.post('/ext/categoryExt/list', data)
 }
 
 // 鍒犻櫎
diff --git a/web_standard/src/api/ext/workorderRecordPutExt.js b/web_standard/src/api/ext/workorderRecordPutExt.js
new file mode 100644
index 0000000..e66cac1
--- /dev/null
+++ b/web_standard/src/api/ext/workorderRecordPutExt.js
@@ -0,0 +1,16 @@
+import request from '../../utils/request'
+
+// 鏌ヨ
+export function fetchList (data) {
+  return request.post('/ext/workorderRecordExt/page', data, {
+    trim: true
+  })
+}
+
+// 瀵煎嚭Excel
+export function exportExcel (data) {
+  return request.post('/ext/workorderRecordExt/exportExcelFeeding', data, {
+    trim: true,
+    download: true
+  })
+}
diff --git a/web_standard/src/components/common/Header.vue b/web_standard/src/components/common/Header.vue
index 82597f4..674ffae 100644
--- a/web_standard/src/components/common/Header.vue
+++ b/web_standard/src/components/common/Header.vue
@@ -200,8 +200,8 @@
      * 閫�鍑虹櫥褰�
      */
     logout () {
-      console.log(this.$store.state.companyId);
-      debugger
+      // console.log(this.$store.state.companyId);
+      // debugger
       logout()
         .then(() => {
           let companyId = this.$store.state.userInfo.company.id
diff --git a/web_standard/src/components/common/Menu.vue b/web_standard/src/components/common/Menu.vue
index 34cb1e8..3b9319f 100644
--- a/web_standard/src/components/common/Menu.vue
+++ b/web_standard/src/components/common/Menu.vue
@@ -30,7 +30,7 @@
   name: 'Menu',
   components: { Scrollbar, MenuItems },
   computed: {
-    ...mapState(['menuData']),
+    ...mapState(['menuData', 'userInfo']),
     // 閫変腑鐨勮彍鍗昳ndex
     activeIndex () {
       let path = this.$route.path
@@ -59,6 +59,10 @@
      */
     handleSelect (menuIndex) {
       const menuConfig = this.__getMenuConfig(menuIndex, 'index', this.menuData.list)
+      if (menuConfig.url.includes('http')) {
+        window.open(`${menuConfig.url}?companyId=${this.userInfo.company.id}`, '_black')
+        return
+      }
       // 鎵句笉鍒伴〉闈�
       try {
         require('@/views' + menuConfig.url)
diff --git a/web_standard/src/components/ext/OperaPlansDetailExtWindow.vue b/web_standard/src/components/ext/OperaPlansDetailExtWindow.vue
index d5299f7..ad4674c 100644
--- a/web_standard/src/components/ext/OperaPlansDetailExtWindow.vue
+++ b/web_standard/src/components/ext/OperaPlansDetailExtWindow.vue
@@ -31,7 +31,7 @@
           </el-form-item>
           <el-form-item label="鍙戝竷鏃ユ湡">{{ form.publishDate }}</el-form-item>
           <el-form-item label="璁″垝浜哄憳">{{ form.usermodel.realname }}</el-form-item>
-          <el-form-item label="鍒嗛厤鏁伴噺">{{ form.workorderDistributNum }}</el-form-item>
+          <el-form-item label="鍒嗛厤鏁伴噺">{{ form.distributNum }}</el-form-item>
           <el-form-item label="瀹屽伐鏁伴噺">{{ form.doneNum }}</el-form-item>
         </el-form>
       </div>
diff --git a/web_standard/src/components/ext/OperaUnitExtWindow.vue b/web_standard/src/components/ext/OperaUnitExtWindow.vue
index 1396cbf..546279f 100644
--- a/web_standard/src/components/ext/OperaUnitExtWindow.vue
+++ b/web_standard/src/components/ext/OperaUnitExtWindow.vue
@@ -29,7 +29,7 @@
           </el-option>
         </el-select>
       </el-form-item>-->
-      <el-form-item v-else label="鍗曚綅绫诲瀷" prop="types">
+      <!-- <el-form-item label="鍗曚綅绫诲瀷" prop="types">
         <el-select v-model="form.types" multiple filterable clearable placeholder="璇烽�夋嫨">
           <el-option
             v-for="(item, index) in unitTypes"
@@ -38,7 +38,7 @@
             :value="item.id">
           </el-option>
         </el-select>
-      </el-form-item>
+      </el-form-item> -->
     </el-form>
   </GlobalWindow>
 </template>
@@ -58,7 +58,7 @@
         name: '',
         attributeData: 0,
         //types: [],
-     //   type: null
+        type: 1
       },
       // 楠岃瘉瑙勫垯
       rules: {
@@ -97,7 +97,7 @@
         }
         // 璋冪敤鏂板缓鎺ュ彛
         const newForm = JSON.parse(JSON.stringify(this.form))
-        newForm.types = newForm.types.join(',')
+        // newForm.types = newForm.types.join(',')
         this.isWorking = true
         this.api.create(newForm)
           .then(() => {
@@ -115,4 +115,7 @@
     }
   }
 }
+/**
+ *  
+ */
 </script>
diff --git a/web_standard/src/components/ext/OperaWInboundExtWindow.vue b/web_standard/src/components/ext/OperaWInboundExtWindow.vue
index 8c51fc6..cd18790 100644
--- a/web_standard/src/components/ext/OperaWInboundExtWindow.vue
+++ b/web_standard/src/components/ext/OperaWInboundExtWindow.vue
@@ -1,11 +1,5 @@
 <template>
-  <GlobalWindow
-    :title="title"
-    width="80%"
-    :visible.sync="visible"
-    :confirm-working="isWorking"
-    @confirm="confirm"
-  >
+  <GlobalWindow :title="title" width="80%" :visible.sync="visible" :confirm-working="isWorking" @confirm="confirm">
     <div style="margin-bottom: 10px">
       <span class="title-add-style" style="vertical-align:middle">鍏ュ簱淇℃伅</span>
       <!-- <el-button type="primary" style="margin-left: 10px;vertical-align:middle">閫夋嫨鏉ユ簮鍗曟嵁</el-button> -->
@@ -19,36 +13,24 @@
           <el-input v-model="form.originCode" disabled placeholder="閫夋嫨鏉ユ簮鍗曟嵁鍚庨粯璁ゅ甫鍑�" v-trim/>
         </el-form-item> -->
         <el-form-item label="璁″垝鍏ュ簱鏃ユ湡" prop="planDate">
-          <el-date-picker
-            v-model="form.planDate"
-            value-format="yyyy-MM-dd"
-            placeholder="閫夋嫨鏃ユ湡"
-            :picker-options="pickerOptions"
-          ></el-date-picker>
+          <el-date-picker v-model="form.planDate" value-format="yyyy-MM-dd" placeholder="閫夋嫨鏃ユ湡"
+            :picker-options="pickerOptions"></el-date-picker>
         </el-form-item>
         <el-form-item label="鍏ュ簱绫诲瀷" prop="type">
           <el-select v-model="form.type" :disabled="disabled" placeholder="璇烽�夋嫨鍏ュ簱绫诲瀷">
-            <el-option
-              v-for="(item, index) in type"
-              :key="index"
-              :label="item.name"
-              :value="item.id">
+            <el-option v-for="(item, index) in type" :key="index" :label="item.name" :value="item.id">
             </el-option>
           </el-select>
         </el-form-item>
         <el-form-item label="鍏ュ簱浠撳簱" prop="warehouseId">
           <el-select v-model="form.warehouseId" filterable clearable placeholder="璇烽�夋嫨鍏ュ簱浠撳簱" @change="selectWare">
-            <el-option
-              v-for="(item, index) in tempWarehouses"
-              :key="index"
-              :label="item.name"
-              :value="item.id">
+            <el-option v-for="(item, index) in tempWarehouses" :key="index" :label="item.name" :value="item.id">
             </el-option>
           </el-select>
         </el-form-item>
         <div class="mark">
           <el-form-item label="鍗曟嵁鎽樿" prop="abstracts">
-            <el-input v-model="form.abstracts" placeholder="璇疯緭鍏ュ崟鎹憳瑕�" v-trim/>
+            <el-input v-model="form.abstracts" placeholder="璇疯緭鍏ュ崟鎹憳瑕�" v-trim />
           </el-form-item>
         </div>
       </el-form>
@@ -61,11 +43,7 @@
       <li><el-button type="primary" @click="addMaterial">閫夋嫨鐗╂枡</el-button></li>
     </ul>
 
-    <el-table
-      :data="form.woutboundInBodyBeanList"
-      border
-      stripe
-    >
+    <el-table :data="form.woutboundInBodyBeanList" border stripe>
       <el-table-column align="center" label="搴忓彿" type="index" />
       <el-table-column prop="code" label="鐗╂枡缂栫爜" show-overflow-tooltip min-width="160px">
         <template slot-scope="{row}">
@@ -80,65 +58,46 @@
       <el-table-column v-if="whLocation.length" label="璐т綅" min-width="100px">
         <template slot-scope="{row}">
           <el-select v-model="row.locationId" filterable placeholder="璇烽�夋嫨" @select="selectLocation">
-            <el-option
-              v-for="(item, index) in whLocation"
-              :key="index"
-              :label="item.unionName"
-              :value="item.id">
+            <el-option v-for="(item, index) in whLocation" :key="index" :label="item.unionName" :value="item.id">
             </el-option>
           </el-select>
         </template>
       </el-table-column>
       <el-table-column label="璐ㄩ噺灞炴��" min-width="100px">
         <template slot-scope="scope">
-          <el-select v-model="scope.row.qualityType" :disabled='canSelect(scope.$index)' filterable clearable placeholder="璇烽�夋嫨">
-            <el-option
-              v-for="(item, index) in properties"
-              :key="index"
-              :label="item.name"
-              :value="item.id">
+          <el-select v-model="scope.row.qualityType" :disabled='canSelect(scope.$index)' filterable clearable
+            placeholder="璇烽�夋嫨">
+            <el-option v-for="(item, index) in properties" :key="index" :label="item.name" :value="item.id">
             </el-option>
           </el-select>
         </template>
       </el-table-column>
-       <el-table-column  v-if="winType==2" label="宸ュ簭" min-width="100px">
-              <template slot-scope="{row}">
-                <el-select v-model="row.procedureId" filterable placeholder="璇烽�夋嫨" @select="selectProcedure">
-                  <el-option
-                    v-for="(item, index) in row.procedureList"
-                    :key="index"
-                    :label="item.name"
-                    :value="item.id">
-                  </el-option>
-                </el-select>
-              </template>
-            </el-table-column>
+      <el-table-column v-if="winType == 2" label="宸ュ簭" min-width="100px">
+        <template slot-scope="{row}">
+          <el-select v-model="row.procedureId" :disabled="!row.procedureList" filterable placeholder="璇烽�夋嫨">
+            <el-option v-for="(item, index) in row.procedureList" :key="index" :label="item.name" :value="item.id">
+            </el-option>
+          </el-select>
+        </template>
+      </el-table-column>
       <el-table-column label="鎵规鍙�" min-width="100px">
         <template slot-scope="{row}">
-          <el-input v-model="row.batch" placeholder="璇疯緭鍏ユ壒娆″彿" v-trim/>
+          <el-input v-model="row.batch" placeholder="璇疯緭鍏ユ壒娆″彿" v-trim />
         </template>
       </el-table-column>
       <el-table-column prop="umodelName" label="鍗曚綅" min-width="60px"></el-table-column>
       <el-table-column label="鍏ュ簱鏁伴噺" min-width="100px">
         <template slot-scope="{row}">
-          <el-input v-model="row.num" type="number" placeholder="鍏ュ簱鏁伴噺" v-trim/>
+          <el-input v-model="row.num" type="number" placeholder="鍏ュ簱鏁伴噺" v-trim />
         </template>
       </el-table-column>
-      <el-table-column
-        label="鎿嶄綔"
-        min-width="60px"
-        align="center"
-        fixed="right"
-      >
+      <el-table-column label="鎿嶄綔" min-width="60px" align="center" fixed="right">
         <template slot-scope="{row}">
           <span class="delete-button-style" @click="deleteMaterail(row)">鍒犻櫎</span>
         </template>
       </el-table-column>
     </el-table>
-    <SelectMaterail
-      ref="selectMaterail"
-      @selectData="selectData"
-    ></SelectMaterail>
+    <SelectMaterail ref="selectMaterail" @selectData="selectData"></SelectMaterail>
   </GlobalWindow>
 </template>
 
@@ -155,7 +114,7 @@
     GlobalWindow,
     SelectMaterail: () => import('@/components/ext/SelectMaterail')
   },
-  data () {
+  data() {
     return {
       // 琛ㄥ崟鏁版嵁
       form: {
@@ -166,7 +125,7 @@
         origin: 0,
         woutboundInBodyBeanList: []
       },
-      winType:0,
+      winType: 0,
       disabled: false,
       pickerOptions: {},
       tempWarehouses: [],
@@ -179,29 +138,29 @@
       activeName: 'first',
       whLocation: [],
       type: [
-        {name:'閲囪喘鍏ュ簱', id: 25}
+        { name: '閲囪喘鍏ュ簱', id: 25 }
       ],
       tempMaterials: [
       ],
       selectedMaterails: [],
       properties: [
         // 0 1涓嶈壇 2鎶ュ簾
-        {name:'鍚堟牸', id: 0},
-        {name:'涓嶈壇', id: 1},
-        {name:'鎶ュ簾', id: 2},
+        { name: '鍚堟牸', id: 0 },
+        { name: '涓嶈壇', id: 1 },
+        { name: '鎶ュ簾', id: 2 },
       ]
     }
   },
   inject: ['warehouses'],
-  created () {
+  created() {
     this.config({
       api: '/ext/wOutboundExt',
       'field.id': 'id'
     })
     this.pickerOptions.disabledDate = (time) => {
-	    // 涓�澶�
-      let tempTime = 3600 * 1000 * 24 
-      return time.getTime() < new Date()-tempTime
+      // 涓�澶�
+      let tempTime = 3600 * 1000 * 24
+      return time.getTime() < new Date() - tempTime
     }
     // queryListByCode('?dicCode=SYSTEM_APPLIANCE_TYPE')
     //   .then(res => {
@@ -230,10 +189,10 @@
       }
       this.__confirmEdit()
     },
-    open (title, type = 0) {
+    open(title, type = 0) {
       this.title = title
       this.visible = true
-      this.winType=type
+      this.winType = type
       // 鏂板缓
       this.$nextTick(() => {
         this.$refs.form.resetFields()
@@ -242,16 +201,17 @@
         if (title === '鍏跺畠鍏ュ簱') {
           this.form.planDate = new Date()
           this.form.type = null
+          // this.form.woutboundInBodyBeanList = []
           this.disabled = false
           this.type = [
-            { name:'瀹㈤��妫�楠屽叆搴�', id: 26 },
-            { name:'瀹㈣繑妫�楠屽叆搴�', id: 27 },
-            { name:'搴撳瓨璋冩暣', id: 28 }
+            { name: '瀹㈤��妫�楠屽叆搴�', id: 26 },
+            { name: '瀹㈣繑妫�楠屽叆搴�', id: 27 },
+            { name: '搴撳瓨璋冩暣', id: 28 }
           ]
         } else {
           this.disabled = true
           this.type = [
-            { name:'閲囪喘鍏ュ簱', id: 25 }
+            { name: '閲囪喘鍏ュ簱', id: 25 }
           ]
         }
 
@@ -271,15 +231,15 @@
           this.tempWarehouses = this.warehouses()
         }
       })
-     
+
     },
-    selectWare (v) {
+    selectWare(v) {
       // console.log(v)
       getListByWarehouseId(v)
         .then(res => {
           console.log(res)
           this.whLocation = res
-          if (this.whLocation.length === 0 ) {
+          if (this.whLocation.length === 0) {
             let temQualityType = 0
             for (const item of this.tempWarehouses) {
               if (item.id === v) {
@@ -313,9 +273,9 @@
         .catch(err => {
           console.log(err)
         })
-      
+
     },
-    setQuality (type) {
+    setQuality(type) {
       for (const item of this.form.woutboundInBodyBeanList) {
         item.qualityType = type
       }
@@ -351,7 +311,7 @@
       }
       return !cans
     },
-    selectLocation (v) {
+    selectLocation(v) {
       // console.log(index, row);
       // for (const item of this.whLocation) {
       //   if (item.id === v) {
@@ -380,16 +340,16 @@
       //   }
       // }
     },
-    addMaterial () {
+    addMaterial() {
       // console.log('澧炲姞鐗╂枡')
       // const ids = this.form.woutboundInBodyBeanList.map(e => { return e.materialId }).join(',')
-      this.$refs.selectMaterail.open('閫夋嫨鐗╂枡', { ids: '', multiple: true, isPurchase:false,queryType:1 })
+      this.$refs.selectMaterail.open('閫夋嫨鐗╂枡', { ids: '', multiple: true, isPurchase: false, queryType: 1 })
     },
-    deleteMaterail (row) {
+    deleteMaterail(row) {
       // console.log('鍒犻櫎鐗╂枡')
       this.form.woutboundInBodyBeanList.splice(this.form.woutboundInBodyBeanList.indexOf(row), 1)
     },
-    selectData (data) {
+    selectData(data) {
       // 閫夋嫨鐗╂枡鍥炶皟
       console.log(data)
       for (const item of data.selectedMaterails) {
@@ -397,8 +357,8 @@
           code: item.mmodelCode,
           name: item.mmodelUnionName,
           umodelName: item.umodelName,
-          procedureList:item.procedureList,
-          procedureId:null,
+          procedureList: item.procedureList,
+          procedureId: item.procedureList ? item.procedureList[0].id : null,
           locationId: this.whLocation.length ? this.whLocation[0].id : null,
           qualityType: this.whLocation.length ? 0 : this.houseProperty,
           materialId: item.id,
@@ -408,14 +368,14 @@
         })
       }
     },
-    __confirmCreate () {
+    __confirmCreate() {
       this.$refs.form.validate((valid) => {
         if (!this.form.woutboundInBodyBeanList.length) {
           this.$tip.error('鑷冲皯閫夋嫨涓�鏉$墿鏂�')
           return
         }
         for (const item of this.form.woutboundInBodyBeanList) {
-          if (item.num<=0) {
+          if (item.num <= 0) {
             this.$tip.error('鍏ュ簱鐗╂枡鏁伴噺蹇呴』澶т簬0锛�')
             return
           }
@@ -449,28 +409,33 @@
 .toolbar {
   border-bottom: 1px solid #eee;
   padding-bottom: 10px;
+
   li {
     display: inline-block;
     margin-right: 6px;
   }
 }
+
 .form-data {
-  ::v-deep .el-form-item{
+  ::v-deep .el-form-item {
     width: 40%;
     margin-right: 1%;
   }
+
   .mark {
     .el-form-item {
       width: 81%;
       // margin-right: 1%;
     }
   }
+
   ::v-deep .el-form-item__content {
     width: calc(100% - 134px);
   }
 }
+
 .delete-button-style {
-    color: red;
-    cursor: pointer;
-  }
+  color: red;
+  cursor: pointer;
+}
 </style>
diff --git a/web_standard/src/components/system/role/PermissionConfigWindow.vue b/web_standard/src/components/system/role/PermissionConfigWindow.vue
index 1b8a8e2..b848cd6 100644
--- a/web_standard/src/components/system/role/PermissionConfigWindow.vue
+++ b/web_standard/src/components/system/role/PermissionConfigWindow.vue
@@ -69,8 +69,6 @@
      */
     confirm () {
       const selectedPermissions = this.$refs.tree.getCheckedNodes(false, true).filter(item => item.type !== 'module').map(item => item.id)
-      console.log(selectedPermissions);
-      debugger
       this.isWorking = true
       createRolePermission({
         roleId: this.role.id,
diff --git a/web_standard/src/components/system/user/OperaSystemRoleApplysWindow.vue b/web_standard/src/components/system/user/OperaSystemRoleApplysWindow.vue
index 8b9efa0..3e92857 100644
--- a/web_standard/src/components/system/user/OperaSystemRoleApplysWindow.vue
+++ b/web_standard/src/components/system/user/OperaSystemRoleApplysWindow.vue
@@ -76,8 +76,8 @@
     // 纭閫夋嫨鏉冮檺
     confirm () {
       this.isWorking = true
-      console.log(this.selectedIds);
-      debugger
+      // console.log(this.selectedIds);
+      // debugger
       createRolePermission({
         roleId: this.role.id,
         permissionIds: this.selectedIds
diff --git a/web_standard/src/components/system/user/OperaSystemRoleNone.vue b/web_standard/src/components/system/user/OperaSystemRoleNone.vue
index fe51722..ea58b3d 100644
--- a/web_standard/src/components/system/user/OperaSystemRoleNone.vue
+++ b/web_standard/src/components/system/user/OperaSystemRoleNone.vue
@@ -75,8 +75,6 @@
     // 纭閫夋嫨鏉冮檺
     confirm () {
       this.isWorking = true
-      console.log(this.selectedIds);
-      debugger
       createRolePermission({
         roleId: this.role.id,
         permissionIds: this.selectedIds,
diff --git a/web_standard/src/layouts/TableLayout.vue b/web_standard/src/layouts/TableLayout.vue
index 898f162..125231c 100644
--- a/web_standard/src/layouts/TableLayout.vue
+++ b/web_standard/src/layouts/TableLayout.vue
@@ -133,8 +133,13 @@
           line-height: 20px;
           display: flex;
           align-items: center;
+          width: 100%;
+          // justify-content: center;
         }
       }
+      ::v-deep .el-table--small td {
+        padding: 0 !important;
+      }
       // 澶嶉�夋鍒�
       .el-table-column--selection {
         .cell {
diff --git a/web_standard/src/views/business/unqualifiedRecord.vue b/web_standard/src/views/business/unqualifiedRecord.vue
new file mode 100644
index 0000000..d27e83d
--- /dev/null
+++ b/web_standard/src/views/business/unqualifiedRecord.vue
@@ -0,0 +1,98 @@
+<template>
+  <TableLayout :permissions="['business:unqualifiedrecord:query']">
+    <!-- 鎼滅储琛ㄥ崟 -->
+    <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
+      <el-form-item label="宸ュ崟缂栫爜" prop="code">
+        <el-input v-model="searchForm.code" placeholder="璇疯緭鍏ュ伐鍗曠紪鐮�" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="涓嶈壇椤�" prop="categoryId">
+        <el-select v-model="searchForm.categoryId" filterable clearable placeholder="璇烽�夋嫨">
+          <el-option
+            v-for="(item, index) in category"
+            :key="index"
+            :label="item.name"
+            :value="item.id">
+          </el-option>
+        </el-select>
+      </el-form-item>
+      
+      <section>
+        <el-button type="primary" @click="search">鎼滅储</el-button>
+        
+        <el-button @click="reset">閲嶇疆</el-button>
+      </section>
+    </el-form>
+    <!-- 琛ㄦ牸鍜屽垎椤� -->
+    <template v-slot:table-wrap>
+      <ul class="toolbar" v-permissions="['business:unqualifiedrecord:exportExcel']">
+        <el-button type="primary" :loading="isWorking.export" v-permissions="['business:unqualifiedrecord:exportExcel']" @click="exportExcel">瀵煎嚭</el-button>
+      </ul>
+      <el-table
+        v-loading="isWorking.search"
+        :data="tableData.list"
+        border
+        stripe
+      >
+        <el-table-column type="index" :index="customIndex" label="搴忓彿" align="center" fixed="left" min-width="80px"></el-table-column>
+        <el-table-column prop="workOrderCode" label="宸ュ崟缂栫爜" align="center" min-width="100px"></el-table-column>
+        <el-table-column prop="materialName" label="鐗╂枡鍚嶇О" align="center" min-width="100px"></el-table-column>
+        <el-table-column prop="materialCode" label="鐗╂枡缂栫爜" align="center" min-width="100px"></el-table-column>
+        <el-table-column prop="proceduresName" label="宸ュ簭" align="center" min-width="100px"></el-table-column>
+        <el-table-column prop="categoryName" label="涓嶈壇椤�" align="center" min-width="100px"></el-table-column>
+        <el-table-column prop="unqualifiedNum" label="鏁伴噺" align="center" min-width="100px"></el-table-column>
+        <el-table-column prop="createTime" label="鍒涘缓鏃堕棿" align="center" min-width="100px"></el-table-column>
+        <el-table-column prop="createUserName" label="鍒涘缓浜�" align="center" min-width="100px"></el-table-column>
+      </el-table>
+      <pagination
+        @size-change="handleSizeChange"
+        @current-change="handlePageChange"
+        :pagination="tableData.pagination"
+      >
+      </pagination>
+    </template>
+  </TableLayout>
+</template>
+
+<script>
+import BaseTable from '@/components/base/BaseTable'
+import TableLayout from '@/layouts/TableLayout'
+import Pagination from '@/components/common/Pagination'
+import { checkAllList } from '@/api/ext/categoryUnionExt'
+export default { 
+  name: 'UnqualifiedRecord',
+  extends: BaseTable,
+  components: { TableLayout, Pagination },
+  data () {
+    return {
+      // 鎼滅储
+      searchForm: {
+        code: '',
+        categoryId: ''
+      },
+      category: []
+    }
+  },
+  created () {
+    this.config({
+      module: '宸ュ崟绫�-鎶ュ伐涓嶈壇璁板綍绫诲瀷琛�',
+      api: '/business/unqualifiedRecord',
+      'field.id': 'id',
+      'field.main': 'id'
+    })
+    this.search()
+    checkAllList({ cateType: 3 })
+      .then(res => {
+        this.category = res
+      })
+      .catch(err => {
+        console.log(err)
+      })
+  },
+  methods: {
+    customIndex(index) {
+      return (this.tableData.pagination.pageIndex-1) * this.tableData.pagination.pageSize + index + 1
+    }
+  },
+}
+
+</script>
diff --git a/web_standard/src/views/ext/appliancesExt.vue b/web_standard/src/views/ext/appliancesExt.vue
index 194cd73..bb77f3d 100644
--- a/web_standard/src/views/ext/appliancesExt.vue
+++ b/web_standard/src/views/ext/appliancesExt.vue
@@ -15,7 +15,7 @@
           <el-option
             v-for="item in appTypes"
             :key="item.id"
-            :label="item.combinationName"
+            :label="item.name"
             :value="item.id"
           >
           </el-option>
@@ -393,7 +393,7 @@
       'field.main': 'name'
     })
     this.search()
-    checkAllList({ bmodelCateType: 2 })
+    checkAllList({ cateType: 2 })
       .then(res => {
         this.appTypes = res
       })
diff --git a/web_standard/src/views/ext/deviceExt.vue b/web_standard/src/views/ext/deviceExt.vue
index e609b81..aa0b933 100644
--- a/web_standard/src/views/ext/deviceExt.vue
+++ b/web_standard/src/views/ext/deviceExt.vue
@@ -55,6 +55,15 @@
     <template v-slot:table-wrap>
       <ul class="toolbar">
         <li><el-button type="primary" @click="$refs.operaDeviceExtWindow.open('鏂板缓璁惧')" v-permissions="['ext:deviceext:create']">鏂板</el-button></li>
+        <li v-permissions="['ext:deviceExt:importExcel']">
+          <ImportButton
+            text="瀵煎叆"
+            template-name="device_import_template.xlsx"
+            template-path="/template/device_import_template.xlsx"
+            action="/ext/deviceExt/importBatch"
+            @success="search"
+          />
+        </li>
         <li>
           <el-button
             type="primary"
@@ -86,12 +95,12 @@
         </el-table-column>
         <el-table-column prop="wpmodel.unionName" label="寰呯敓浜ц揣浣�" show-overflow-tooltip min-width="100px">
           <template slot-scope="{row}">
-            <span class="long-title-style">{{ row.wpmodel.unionName }}</span>
+            <span class="long-title-style">{{ row.wpmodel ? row.wpmodel.unionName : '-' }}</span>
           </template>
         </el-table-column>
         <el-table-column prop="wfmodel.unionName" label="宸插畬宸ヨ揣浣�" show-overflow-tooltip min-width="100px">
           <template slot-scope="{row}">
-            <span class="long-title-style">{{ row.wfmodel.unionName }}</span>
+            <span class="long-title-style">{{ row.wfmodel ? row.wfmodel.unionName : '-' }}</span>
           </template>
         </el-table-column>
         <el-table-column prop="stationCode" label="宸ヤ綅缂栧彿" min-width="100px"></el-table-column>
@@ -143,6 +152,7 @@
 <script>
 import BaseTable from '@/components/base/BaseTable'
 import TableLayout from '@/layouts/TableLayout'
+import ImportButton from '@/components/common/ImportButton'
 // import SearchFormCollapse from '@/components/common/SearchFormCollapse'
 import Pagination from '@/components/common/Pagination'
 import OperaDeviceExtWindow from '@/components/ext/OperaDeviceExtWindow'
@@ -153,7 +163,7 @@
 export default {
   name: 'DeviceExt',
   extends: BaseTable,
-  components: { TableLayout, Pagination, OperaDeviceExtWindow, QrCodeLabel },
+  components: { TableLayout, Pagination, OperaDeviceExtWindow, ImportButton, QrCodeLabel },
   data () {
     return {
       // 鎼滅储
@@ -256,4 +266,7 @@
     }
   }
 }
+/**
+ *  
+ */
 </script>
diff --git a/web_standard/src/views/ext/salaryStatistic.vue b/web_standard/src/views/ext/salaryStatistic.vue
index 396fb7b..8383e36 100644
--- a/web_standard/src/views/ext/salaryStatistic.vue
+++ b/web_standard/src/views/ext/salaryStatistic.vue
@@ -182,7 +182,6 @@
       return '-'
     },
     customIndex(index) {
-      console.log();
       return (this.tableData.pagination.pageIndex-1) * this.tableData.pagination.pageSize + index + 1
     }
   }
diff --git a/web_standard/src/views/ext/workorderPutRecordExt.vue b/web_standard/src/views/ext/workorderPutRecordExt.vue
index cbd9424..58a2f0e 100644
--- a/web_standard/src/views/ext/workorderPutRecordExt.vue
+++ b/web_standard/src/views/ext/workorderPutRecordExt.vue
@@ -111,9 +111,9 @@
         <el-table-column prop="batch" label="鐢熶骇鎵规鍙�" min-width="100px"></el-table-column>
         <el-table-column prop="promodel.name" label="宸ュ簭" min-width="100px"></el-table-column>
         <el-table-column prop="omodel.planNum" label="璁″垝鏁伴噺" min-width="100px">
-          <template slot-scope="{row}">
+          <!-- <template slot-scope="{row}">
             <span>{{ row.omodel.planNum + row.umodel.name }}</span>
-          </template>
+          </template> -->
         </el-table-column>
         <el-table-column prop="procedureName" label="鐢熶骇鍛樺伐" show-overflow-tooltip min-width="100px">
           <template slot-scope="{row}">
@@ -218,7 +218,7 @@
   created () {
     this.config({
       module: '鎶曟枡璁板綍',
-      api: '/ext/workorderRecordExt',
+      api: '/ext/workorderRecordPutExt',
       'field.id': 'id',
       'field.main': 'name',
       sorts: [{ direction: 'DESC', property: 'CREATE_TIME' }]

--
Gitblit v1.9.3