From db96301a4715b1c4f1180095441963ed6f430797 Mon Sep 17 00:00:00 2001
From: MrShi <1878285526@qq.com>
Date: 星期五, 17 一月 2025 11:02:41 +0800
Subject: [PATCH] 开发功能

---
 admin/src/api/ywContractBill.js                         |    8 
 admin/src/views/stock/check.vue                         |   48 +++
 admin/src/views/finance/collectionSettings.vue          |   72 +++++
 admin/src/views/stock/components/newInventory.vue       |   70 +++-
 admin/package-lock.json                                 |  168 ++++++------
 admin/package.json                                      |    2 
 admin/src/api/ywStocktaking.js                          |   23 +
 admin/src/views/finance/components/call.vue             |   73 +++--
 admin/src/views/workorder/components/detail.vue         |   75 +++--
 admin/src/views/stock/components/inventoryDetails.vue   |  112 +++++--
 admin/src/views/finance/components/templateKeywords.vue |   50 ++-
 admin/.env.test                                         |    4 
 admin/src/views/finance/overdueBills.vue                |    2 
 admin/src/views/workorder/workorderList.vue             |   13 +
 admin/src/views/finance/components/bullDetail.vue       |   43 +-
 admin/src/api/ywWarehouse.js                            |    5 
 16 files changed, 510 insertions(+), 258 deletions(-)

diff --git a/admin/.env.test b/admin/.env.test
index 0e38ccc..6791128 100644
--- a/admin/.env.test
+++ b/admin/.env.test
@@ -4,10 +4,10 @@
 # VUE_APP_API_URL  = 'http://192.168.5.13/gateway_interface'
 
 # 浠诲悍
-# VUE_APP_API_URL  = 'http://192.168.0.143:10010'
+VUE_APP_API_URL  = 'http://192.168.0.143:10010'
 
 # 钀嶅
 # VUE_APP_API_URL  = 'http://192.168.0.108:10010/'
 
 # 娴嬭瘯鏈嶅姟
-VUE_APP_API_URL  = 'https://dmtest.ahapp.net/gateway_interface'
+# VUE_APP_API_URL  = 'https://dmtest.ahapp.net/gateway_interface'
diff --git a/admin/package-lock.json b/admin/package-lock.json
index 6d328d1..51ea93f 100644
--- a/admin/package-lock.json
+++ b/admin/package-lock.json
@@ -6,7 +6,7 @@
   "dependencies": {
     "@amap/amap-jsapi-loader": {
       "version": "1.0.1",
-      "resolved": "https://registry.npmmirror.com/@amap/amap-jsapi-loader/-/amap-jsapi-loader-1.0.1.tgz",
+      "resolved": "https://registry.npmjs.org/@amap/amap-jsapi-loader/-/amap-jsapi-loader-1.0.1.tgz",
       "integrity": "sha512-nPyLKt7Ow/ThHLkSvn2etQlUzqxmTVgK7bIgwdBRTg2HK5668oN7xVxkaiRe3YZEzGzfV2XgH5Jmu2T73ljejw=="
     },
     "@babel/code-frame": {
@@ -2915,6 +2915,63 @@
           "integrity": "sha1-/q7SVZc9LndVW4PbwIhRpsY1IPo=",
           "dev": true
         },
+        "ansi-styles": {
+          "version": "4.3.0",
+          "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz",
+          "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "color-convert": "^2.0.1"
+          }
+        },
+        "chalk": {
+          "version": "4.1.2",
+          "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
+          "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "ansi-styles": "^4.1.0",
+            "supports-color": "^7.1.0"
+          }
+        },
+        "color-convert": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
+          "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "color-name": "~1.1.4"
+          }
+        },
+        "color-name": {
+          "version": "1.1.4",
+          "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz",
+          "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+          "dev": true,
+          "optional": true
+        },
+        "has-flag": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz",
+          "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+          "dev": true,
+          "optional": true
+        },
+        "loader-utils": {
+          "version": "2.0.4",
+          "resolved": "https://registry.npmmirror.com/loader-utils/-/loader-utils-2.0.4.tgz",
+          "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "big.js": "^5.2.2",
+            "emojis-list": "^3.0.0",
+            "json5": "^2.1.2"
+          }
+        },
         "ssri": {
           "version": "8.0.1",
           "resolved": "https://registry.npm.taobao.org/ssri/download/ssri-8.0.1.tgz?cache=0&sync_timestamp=1617826515595&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fssri%2Fdownload%2Fssri-8.0.1.tgz",
@@ -2922,6 +2979,28 @@
           "dev": true,
           "requires": {
             "minipass": "^3.1.1"
+          }
+        },
+        "supports-color": {
+          "version": "7.2.0",
+          "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz",
+          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "has-flag": "^4.0.0"
+          }
+        },
+        "vue-loader-v16": {
+          "version": "npm:vue-loader@16.8.3",
+          "resolved": "https://registry.npmmirror.com/vue-loader/-/vue-loader-16.8.3.tgz",
+          "integrity": "sha512-7vKN45IxsKxe5GcVCbc2qFU5aWzyiLrYJyUuMz4BQLKctCj/fmCa0w6fGiiQ2cLFetNcek1ppGJQDCup0c1hpA==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "chalk": "^4.1.0",
+            "hash-sum": "^2.0.0",
+            "loader-utils": "^2.0.0"
           }
         }
       }
@@ -15669,9 +15748,9 @@
       "dev": true
     },
     "vue-clipboard2": {
-      "version": "0.3.1",
-      "resolved": "https://registry.npm.taobao.org/vue-clipboard2/download/vue-clipboard2-0.3.1.tgz",
-      "integrity": "sha1-blUft704SImyiw2jsSKJ7WvKSJQ=",
+      "version": "0.3.3",
+      "resolved": "https://registry.npmmirror.com/vue-clipboard2/-/vue-clipboard2-0.3.3.tgz",
+      "integrity": "sha512-aNWXIL2DKgJyY/1OOeITwAQz1fHaCIGvUFHf9h8UcoQBG5a74MkdhS/xqoYe7DNZdQmZRL+TAdIbtUs9OyVjbw==",
       "requires": {
         "clipboard": "^2.0.0"
       }
@@ -15739,87 +15818,6 @@
           "resolved": "https://registry.npm.taobao.org/hash-sum/download/hash-sum-1.0.2.tgz",
           "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=",
           "dev": true
-        }
-      }
-    },
-    "vue-loader-v16": {
-      "version": "npm:vue-loader@16.8.3",
-      "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-16.8.3.tgz",
-      "integrity": "sha512-7vKN45IxsKxe5GcVCbc2qFU5aWzyiLrYJyUuMz4BQLKctCj/fmCa0w6fGiiQ2cLFetNcek1ppGJQDCup0c1hpA==",
-      "dev": true,
-      "optional": true,
-      "requires": {
-        "chalk": "^4.1.0",
-        "hash-sum": "^2.0.0",
-        "loader-utils": "^2.0.0"
-      },
-      "dependencies": {
-        "ansi-styles": {
-          "version": "4.3.0",
-          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
-          "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "color-convert": "^2.0.1"
-          }
-        },
-        "chalk": {
-          "version": "4.1.2",
-          "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
-          "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "ansi-styles": "^4.1.0",
-            "supports-color": "^7.1.0"
-          }
-        },
-        "color-convert": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
-          "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "color-name": "~1.1.4"
-          }
-        },
-        "color-name": {
-          "version": "1.1.4",
-          "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
-          "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
-          "dev": true,
-          "optional": true
-        },
-        "has-flag": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
-          "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
-          "dev": true,
-          "optional": true
-        },
-        "loader-utils": {
-          "version": "2.0.4",
-          "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz",
-          "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "big.js": "^5.2.2",
-            "emojis-list": "^3.0.0",
-            "json5": "^2.1.2"
-          }
-        },
-        "supports-color": {
-          "version": "7.2.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
-          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "has-flag": "^4.0.0"
-          }
         }
       }
     },
diff --git a/admin/package.json b/admin/package.json
index 5405124..0efce43 100644
--- a/admin/package.json
+++ b/admin/package.json
@@ -29,7 +29,7 @@
     "path": "^0.12.7",
     "qrcodejs2": "0.0.2",
     "vue": "^2.6.11",
-    "vue-clipboard2": "^0.3.1",
+    "vue-clipboard2": "^0.3.3",
     "vue-cropper": "^0.6.5",
     "vue-json-viewer": "^2.2.22",
     "vue-router": "^3.5.1",
diff --git a/admin/src/api/ywContractBill.js b/admin/src/api/ywContractBill.js
new file mode 100644
index 0000000..be95d5e
--- /dev/null
+++ b/admin/src/api/ywContractBill.js
@@ -0,0 +1,8 @@
+import request from '@/utils/request'
+
+// 鏌ヨ
+export function fetchList (data) {
+  return request.post('/visitsAdmin/cloudService/business/ywContractBill/findPageForOverdue', data, {
+    trim: true
+  })
+}
diff --git a/admin/src/api/ywStocktaking.js b/admin/src/api/ywStocktaking.js
index eda4a31..00c5235 100644
--- a/admin/src/api/ywStocktaking.js
+++ b/admin/src/api/ywStocktaking.js
@@ -21,3 +21,26 @@
 export function deleteById (id) {
   return request.get(`/visitsAdmin/cloudService/business/ywStocktaking/delete/${id}`)
 }
+
+// 鏍规嵁ID鏌ヨ
+export function getById (id) {
+  return request.get(`/visitsAdmin/cloudService/business/ywStocktaking/${id}`)
+}
+
+// 鍙栨秷鐩樼偣鍗�
+export function cancelById (id) {
+  return request.get(`/visitsAdmin/cloudService/business/ywStocktaking/cancelById?id=${id}`)
+}
+
+// 瀹屾垚鐩樼偣鍗�
+export function finishById (id) {
+  return request.get(`/visitsAdmin/cloudService/business/ywStocktaking/finishById?id=${id}`)
+}
+
+// 鏌ヨ
+export function ywStocktakingRecordPage (data) {
+  return request.post('/visitsAdmin/cloudService/business/ywStocktakingRecord/page', data, {
+    trim: true
+  })
+}
+
diff --git a/admin/src/api/ywWarehouse.js b/admin/src/api/ywWarehouse.js
index aa5511c..a4b3168 100644
--- a/admin/src/api/ywWarehouse.js
+++ b/admin/src/api/ywWarehouse.js
@@ -12,6 +12,11 @@
   return request.post('/visitsAdmin/cloudService/business/ywWarehouse/create', data)
 }
 
+// 鍒楄〃
+export function list (data) {
+  return request.post('/visitsAdmin/cloudService/business/ywWarehouse/list', data)
+}
+
 // 鏍规嵁ID淇敼
 export function updateById (data) {
   return request.post('/visitsAdmin/cloudService/business/ywWarehouse/updateById', data)
diff --git a/admin/src/views/finance/collectionSettings.vue b/admin/src/views/finance/collectionSettings.vue
index 42b37e6..1df43de 100644
--- a/admin/src/views/finance/collectionSettings.vue
+++ b/admin/src/views/finance/collectionSettings.vue
@@ -5,15 +5,46 @@
                 <el-form ref="form" :model="form" label-width="120px">
                     <el-form-item label="鐭俊妯℃澘">
                         <div style="display: flex; align-items: self-start;">
-                            <el-input type="textarea" rows="5" v-model="form.desc"></el-input>
-                            <el-button type="primary" style="margin-left: 10px;">淇濆瓨</el-button>
+                            <el-input type="textarea" rows="5" v-model="form.smsTemp"></el-input>
+<!--                            <el-button type="primary" style="margin-left: 10px;">淇濆瓨</el-button>-->
                         </div>
                     </el-form-item>
                     <el-form-item label="閭妯℃澘">
                         <div style="display: flex; align-items: self-start;">
-                            <el-input type="textarea" rows="5" v-model="form.desc"></el-input>
-                            <el-button type="primary" style="margin-left: 10px;">淇濆瓨</el-button>
+                            <el-input type="textarea" rows="5" v-model="form.emailTemp"></el-input>
+<!--                            <el-button type="primary" style="margin-left: 10px;">淇濆瓨</el-button>-->
                         </div>
+                    </el-form-item>
+                    <el-form-item label="绉熻祦閫氱煡鍗曟ā鏉�">
+                        <div style="display: flex; align-items: self-start;">
+                            <el-tooltip style="margin-right: 10px; margin-top: 10px; flex-shrink: 0;" effect="dark" content="鍖呭惈绉熻祦璐广�佺墿涓氳垂銆佺璧佹娂閲戙�佺墿涓氭娂閲�" placement="bottom-start">
+                                <i class="el-icon-question"></i>
+                            </el-tooltip>
+                            <el-upload
+                                style="flex: 1;"
+                                class="upload-demo"
+                                :action="uploadImgUrl"
+                                :data="uploadData"
+                                :on-success="uploadAvatarSuccess"
+                                :on-remove="handleRemove"
+                                :file-list="form.leaseTemp">
+                                <el-button size="small" type="primary">鐐瑰嚮涓婁紶</el-button>
+                            </el-upload>
+                        </div>
+                    </el-form-item>
+                    <el-form-item label="鍏朵粬閫氱煡鍗曟ā鏉�">
+                        <el-upload
+                            class="upload-demo"
+                            :action="uploadImgUrl"
+                            :data="uploadData"
+                            :on-success="uploadAvatarSuccess1"
+                            :on-remove="handleRemove1"
+                            :file-list="form.otherTemp">
+                            <el-button size="small" type="primary">鐐瑰嚮涓婁紶</el-button>
+                        </el-upload>
+                    </el-form-item>
+                    <el-form-item>
+                        <el-button type="primary" @click="submit">淇濆瓨</el-button>
                     </el-form-item>
                 </el-form>
             </div>
@@ -30,8 +61,15 @@
     name: 'collectionSettings',
     data() {
       return {
+        uploadImgUrl: process.env.VUE_APP_API_PREFIX + '/visitsAdmin/cloudService/public/uploadBatch',
+        uploadData: {
+          folder: 'TEMP_CONFIG'
+        },
         form: {
-          desc: ''
+          emailTemp: '',
+          smsTemp: '',
+          leaseTemp: [],
+          otherTemp: []
         }
       }
     },
@@ -40,10 +78,30 @@
       this.getCallTempVal()
     },
     methods: {
+      submit() {
+      
+      },
+      handleRemove(e) {
+        this.form.leaseTemp = []
+      },
+      uploadAvatarSuccess(file) {
+        const item = file.data[0]
+        this.form.leaseTemp = [{ ...item, name: item.originname }]
+      },
+      handleRemove1(e) {
+        this.form.otherTemp = []
+      },
+      uploadAvatarSuccess1(file) {
+        const item = file.data[0]
+        this.form.otherTemp = [{ ...item, name: item.originname }]
+      },
       getCallTempVal() {
         getCallTemp({})
             .then(res => {
-              console.log(res)
+              this.form.smsTemp = res.smsTemp.title
+              this.form.emailTemp = res.emailTemp.title
+              this.form.leaseTemp = [{ url: res.leaseTemp.url, name: res.leaseTemp.title }]
+              this.form.otherTemp = [{ url: res.otherTemp.url, name: res.otherTemp.title }]
             })
       }
     }
@@ -64,7 +122,7 @@
             align-items: self-start;
             justify-content: space-between;
             .content_form {
-                width: 60%;
+                width: 70%;
             }
         }
     }
diff --git a/admin/src/views/finance/components/bullDetail.vue b/admin/src/views/finance/components/bullDetail.vue
index ac60691..b40909b 100644
--- a/admin/src/views/finance/components/bullDetail.vue
+++ b/admin/src/views/finance/components/bullDetail.vue
@@ -8,23 +8,26 @@
           <el-tag type="success" v-if="info.status === 0">寮�鍚�</el-tag>
           <el-tag type="info" v-if="info.status === 1">鍏抽棴</el-tag>
         </div>
-        <el-button plain type="primary" v-if="![1].includes(info.payStatus)" @click="$refs.flowingWater.open('鍒涘缓鏀舵敮娴佹按', {
-          billType: returnBillType(),
-          billId: info.id,
-          costType: info.costType,
-          receivableFee: Math.abs(info.needReceivableFee),
-          costTypeName: returnText(info.costType),
-          contractCode: info.contractCode,
-          contractId: info.contractId,
-          startDate: info.startDate,
-          endDate: info.endDate,
-          multifileList: [],
-          date: `${info.startDate} ~ ${info.endDate}`,
-          companyId: info.companyId,
-          companyName: info.companyName,
-          actReceivableFee: Math.abs(info.needReceivableFee),
-          needReceivableFeeCopy: info.needReceivableFee
-        })">鏂板缓鏀舵敮娴佹按</el-button>
+        <div style="display: flex; align-items: center;">
+          <el-button @click="$refs.call.open('鍙戦�佸偓缂撮�氱煡', info)">鍙戦�佺即璐归�氱煡</el-button>
+          <el-button plain type="primary" v-if="![1].includes(info.payStatus)" @click="$refs.flowingWater.open('鍒涘缓鏀舵敮娴佹按', {
+            billType: returnBillType(),
+            billId: info.id,
+            costType: info.costType,
+            receivableFee: Math.abs(info.needReceivableFee),
+            costTypeName: returnText(info.costType),
+            contractCode: info.contractCode,
+            contractId: info.contractId,
+            startDate: info.startDate,
+            endDate: info.endDate,
+            multifileList: [],
+            date: `${info.startDate} ~ ${info.endDate}`,
+            companyId: info.companyId,
+            companyName: info.companyName,
+            actReceivableFee: Math.abs(info.needReceivableFee),
+            needReceivableFeeCopy: info.needReceivableFee
+          })">鏂板缓鏀舵敮娴佹按</el-button>
+        </div>
       </div>
       <div class="line"></div>
       <div class="main">
@@ -190,6 +193,8 @@
     <FlowingWater ref="flowingWater" @success="getDetails" @refresh="Refresh" />
     <!--  鍚堝悓璇︽儏  -->
     <ContractDetail ref="ContractDetailRef" />
+    <!--  鍙戦�佺即璐归�氱煡  -->
+    <Call ref="call" />
   </GlobalWindow>
 </template>
 
@@ -197,13 +202,15 @@
 import GlobalWindow from '@/components/common/GlobalWindow'
 import BaseOpera from '@/components/base/BaseOpera'
 import FlowingWater from './flowingWater'
+import Call from './call'
 import ContractDetail from '../../contract/components/contractDetail'
 import { getYwContractBillById } from '@/api/contract'
 export default {
   components: {
     GlobalWindow,
     FlowingWater,
-    ContractDetail
+    ContractDetail,
+    Call
   },
   extends: BaseOpera,
   data() {
diff --git a/admin/src/views/finance/components/call.vue b/admin/src/views/finance/components/call.vue
index 7bf84c1..d2504cc 100644
--- a/admin/src/views/finance/components/call.vue
+++ b/admin/src/views/finance/components/call.vue
@@ -2,33 +2,23 @@
     <GlobalWindow
         :title="title"
         :visible.sync="visible"
-        width="100%">
+        width="100%"
+        @confirm="confirm">
         <el-form :model="form" label-position="top" ref="paramRef" :rules="rules">
-            <el-form-item label="閫氱煡鏂瑰紡" prop="title">
-                <el-checkbox-group v-model="form.title">
-                    <el-checkbox label="缇庨/椁愬巺绾夸笂娲诲姩" name="1"></el-checkbox>
-                    <el-checkbox label="鍦版帹娲诲姩" name="2"></el-checkbox>
-                    <el-checkbox label="绾夸笅涓婚娲诲姩" name="3"></el-checkbox>
-                    <el-checkbox label="鍗曠函鍝佺墝鏇濆厜" name="4"></el-checkbox>
+            <el-form-item label="閫氱煡鏂瑰紡" prop="type">
+                <el-checkbox-group v-model="form.type">
+                    <el-checkbox label="鐭俊"></el-checkbox>
+                    <el-checkbox label="閭欢"></el-checkbox>
                 </el-checkbox-group>
             </el-form-item>
-            <el-form-item label="閫氱煡鎺ユ敹浜�" prop="companyId">
-                <div style="display: flex; flex-direction: column;">
-                    <div style="display: flex; align-items: center; margin-bottom: 20px;">
-                        <span style="font-size: 14px; color: black; margin-right: 10px;">寮犱笁</span>
-                        <el-select v-model="form.companyId" placeholder="璇烽�夋嫨">
-                            <el-option label="鍖哄煙涓�" value="0"></el-option>
-                            <el-option label="鍖哄煙浜�" value="1"></el-option>
-                        </el-select>
-                    </div>
-                    <div style="display: flex; align-items: center;">
-                        <span style="font-size: 14px; color: black; margin-right: 10px;">XXXX鍏徃</span>
-                        <el-select v-model="form.companyId" placeholder="璇烽�夋嫨">
-                            <el-option label="鍖哄煙涓�" value="0"></el-option>
-                            <el-option label="鍖哄煙浜�" value="1"></el-option>
-                        </el-select>
-                    </div>
-                </div>
+            <el-form-item label="閫氱煡鎺ユ敹浜�" prop="userId">
+                <el-select v-model="form.userId" placeholder="璇烽�夋嫨">
+                    <el-option
+                        v-for="(item, index) in userList"
+                        :key="index"
+                        :label="item.realname"
+                        :value="item.id" />
+                </el-select>
             </el-form-item>
         </el-form>
     </GlobalWindow>
@@ -37,24 +27,47 @@
 <script>
   import GlobalWindow from '@/components/common/GlobalWindow'
   import BaseOpera from '@/components/base/BaseOpera'
+  import { getUserList } from '@/api/system/user'
   export default {
     name: "call",
     components: { GlobalWindow },
     extends: BaseOpera,
     data() {
       return {
+        info: null,
         form: {
-          title: '1',
-          companyId: '0'
+          type: [],
+          userId: ''
         },
         rules: {
-          title: [{ required: true, message: '璇疯緭鍏�' }],
-          companyId: [{ required: true, message: '璇烽�夋嫨' }],
-        }
+          type: [{ required: true, message: '璇烽�夋嫨', trigger: 'blur' }],
+          userId: [{ required: true, message: '璇烽�夋嫨', trigger: 'blur' }]
+        },
+        userList: []
       }
     },
+    created () {
+      this.getUser()
+    },
     methods: {
-    
+      open (title, target) {
+        this.title = title
+        this.info = target
+        this.visible = true
+      },
+        getUser() {
+          getUserList({})
+            .then(res => {
+              this.userList = res
+            })
+        },
+      confirm() {
+        this.$refs.paramRef.validate((valid) => {
+          if (!valid) {
+            return
+          }
+        })
+      }
     }
   }
 </script>
diff --git a/admin/src/views/finance/components/templateKeywords.vue b/admin/src/views/finance/components/templateKeywords.vue
index 1d748b1..b88022e 100644
--- a/admin/src/views/finance/components/templateKeywords.vue
+++ b/admin/src/views/finance/components/templateKeywords.vue
@@ -1,32 +1,21 @@
 <template>
     <GlobalWindow
         :title="title"
+        :withFooter="false"
         :visible.sync="visible"
         width="100%">
         <div class="main">
             <div class="title">璐﹀崟淇℃伅</div>
             <div class="list">
-                <el-tag type="info" size="medium" effect="plain" style="margin-right: 10px;">${璐圭敤鍚嶇О}</el-tag>
-                <el-tag type="info" size="medium" effect="plain" style="margin-right: 10px;">${璁¤垂鍛ㄦ湡}</el-tag>
-                <el-tag type="info" size="medium" effect="plain" style="margin-right: 10px;">${鍗曚环}</el-tag>
-                <el-tag type="info" size="medium" effect="plain" style="margin-right: 10px;">${鍗曚綅}</el-tag>
-                <el-tag type="info" size="medium" effect="plain" style="margin-right: 10px;">${搴旀敹鏃ユ湡}</el-tag>
+                <el-tag type="info" size="medium" effect="plain" style="margin-right: 10px; cursor: pointer;" @click="copy(item.title)" v-for="(item, index) in billTempList" :key="index">{{item.title}}</el-tag>
             </div>
             <div class="title">鍚堝悓淇℃伅</div>
             <div class="list">
-                <el-tag type="info" size="medium" effect="plain" style="margin-right: 10px;">${璐圭敤鍚嶇О}</el-tag>
-                <el-tag type="info" size="medium" effect="plain" style="margin-right: 10px;">${璁¤垂鍛ㄦ湡}</el-tag>
-                <el-tag type="info" size="medium" effect="plain" style="margin-right: 10px;">${鍗曚环}</el-tag>
-                <el-tag type="info" size="medium" effect="plain" style="margin-right: 10px;">${鍗曚綅}</el-tag>
-                <el-tag type="info" size="medium" effect="plain" style="margin-right: 10px;">${搴旀敹鏃ユ湡}</el-tag>
+                <el-tag type="info" size="medium" effect="plain" style="margin-right: 10px; cursor: pointer;" @click="copy(item.title)" v-for="(item, index) in contractTempList" :key="index">{{item.title}}</el-tag>
             </div>
             <div class="title">鍏朵粬淇℃伅</div>
             <div class="list">
-                <el-tag type="info" size="medium" effect="plain" style="margin-right: 10px;">${璐圭敤鍚嶇О}</el-tag>
-                <el-tag type="info" size="medium" effect="plain" style="margin-right: 10px;">${璁¤垂鍛ㄦ湡}</el-tag>
-                <el-tag type="info" size="medium" effect="plain" style="margin-right: 10px;">${鍗曚环}</el-tag>
-                <el-tag type="info" size="medium" effect="plain" style="margin-right: 10px;">${鍗曚綅}</el-tag>
-                <el-tag type="info" size="medium" effect="plain" style="margin-right: 10px;">${搴旀敹鏃ユ湡}</el-tag>
+                <el-tag type="info" size="medium" effect="plain" style="margin-right: 10px; cursor: pointer;" @click="copy(item.title)" v-for="(item, index) in otherTempList" :key="index">{{item.title}}</el-tag>
             </div>
         </div>
     </GlobalWindow>
@@ -35,17 +24,44 @@
 <script>
   import GlobalWindow from '@/components/common/GlobalWindow'
   import BaseOpera from '@/components/base/BaseOpera'
+  import { getCallTemp } from '@/api/ywTempConfig'
   export default {
     name: "templateKeywords",
     components: { GlobalWindow },
     extends: BaseOpera,
     data() {
       return {
-      
+        billTempList: [],
+        contractTempList: [],
+        otherTempList: []
       }
     },
+    created () {
+      this.getCallTempVal()
+    },
     methods: {
-
+      open (title) {
+        this.title = title
+        this.visible = true
+      },
+      getCallTempVal() {
+        getCallTemp({})
+          .then(res => {
+            this.billTempList = res.billTempList
+            this.contractTempList = res.contractTempList
+            this.otherTempList = res.otherTempList
+          })
+      },
+      copy(val) {
+        this.$copyText(val).then(
+          (e) => {
+            this.$message.success('澶嶅埗鎴愬姛锛�')
+          },
+          (err) => {
+            this.$message.error('澶嶅埗鎴愬姛锛�')
+          }
+        );
+      }
     }
   }
 </script>
diff --git a/admin/src/views/finance/overdueBills.vue b/admin/src/views/finance/overdueBills.vue
index 8d64cc1..fd8ad9a 100644
--- a/admin/src/views/finance/overdueBills.vue
+++ b/admin/src/views/finance/overdueBills.vue
@@ -97,7 +97,7 @@
   import BullEditFu from './components/bullEditFu.vue'
   import Detail from './components/bullDetail.vue'
   import Call from './components/call.vue'
-  import { fetchList } from '@/api/bill'
+  import { fetchList } from '@/api/ywContractBill'
   export default {
     components: {
       Pagination,
diff --git a/admin/src/views/stock/check.vue b/admin/src/views/stock/check.vue
index 2048c22..49018c2 100644
--- a/admin/src/views/stock/check.vue
+++ b/admin/src/views/stock/check.vue
@@ -2,13 +2,13 @@
   <div class="main_app">
     <QueryForm v-model="filters" :query-form-config="queryFormConfig" @handleQuery="getList(1)" @clear="clear" />
     <div class="mt20">
-      <el-button type="primary" @click="handleEx()" v-permissions="['business:ywpatrolline:create']">娣诲姞</el-button>
+      <el-button type="primary" @click="$refs.newInventory.open('鏂板缓鐩樼偣鍗�')" v-permissions="['business:ywpatrolline:create']">娣诲姞</el-button>
     </div>
     <el-table v-loading="loading" :data="list" stripe>
       <el-table-column prop="name" label="鐩樼偣鍗曞悕绉�" min-width="120" show-overflow-tooltip />
       <el-table-column prop="warehouseName" label="鐩樼偣浠撳簱" min-width="100" show-overflow-tooltip />
       <el-table-column prop="userName" label="鐩樼偣鍛�" min-width="80" show-overflow-tooltip />
-      <el-table-column prop="dealDate" label="鐩樼偣鏃ユ湡" min-width="110" show-overflow-tooltip />
+      <el-table-column prop="planDate" label="鐩樼偣鏃ユ湡" min-width="110" show-overflow-tooltip />
       <el-table-column prop="createName" label="鍒涘缓浜�" min-width="80" show-overflow-tooltip />
       <el-table-column prop="createDate" label="鍒涘缓鏃堕棿" min-width="140" show-overflow-tooltip />
       <el-table-column label="鐩樼偣鐘舵��" min-width="80">
@@ -21,29 +21,35 @@
       </el-table-column>
       <el-table-column prop="workTime" label="鎿嶄綔" min-width="140" show-overflow-tooltip>
         <template v-slot="{ row }">
-          <el-button type="text">鏌ョ湅璇︽儏</el-button>
-          <el-button type="text">鍙栨秷</el-button>
-          <el-button type="text">鍒犻櫎</el-button>
+          <el-button type="text" @click="$refs.inventoryDetails.open('鐩樼偣璇︾粏', row.id)">鏌ョ湅璇︽儏</el-button>
+          <el-button type="text" v-if="[0,1].includes(row.status)" @click="cancel(row.id)">鍙栨秷</el-button>
+          <el-button type="text" v-if="[0,3].includes(row.status)" @click="dele(row.id)">鍒犻櫎</el-button>
         </template>
       </el-table-column>
     </el-table>
     <div class="mt20">
       <Pagination @size-change="handleSizeChange" @current-change="getList" :pagination="pagination" />
     </div>
+    <NewInventory ref="newInventory" @success="getList" />
+    <InventoryDetails ref="inventoryDetails" />
   </div>
 </template>
 
 <script>
 import Pagination from '@/components/common/Pagination'
 import QueryForm from '@/components/common/QueryForm'
+import NewInventory from './components/newInventory'
+import InventoryDetails from './components/inventoryDetails'
 import dayjs from 'dayjs'
 import duration from 'dayjs/plugin/duration'
 dayjs.extend(duration)
-import { fetchList } from '@/api/ywStocktaking'
+import { fetchList, cancelById, deleteById } from '@/api/ywStocktaking'
 export default {
   components: {
     Pagination,
-    QueryForm
+    QueryForm,
+    NewInventory,
+    InventoryDetails
   },
   data() {
     return {
@@ -100,6 +106,34 @@
         this.loading = false
       })
     },
+    cancel(id) {
+      this.$confirm('鏄惁纭鍙栨秷?', '鎻愮ず', {
+        confirmButtonText: '纭畾',
+        cancelButtonText: '鍙栨秷',
+        type: 'warning'
+      }).then(() => {
+        cancelById(id)
+          .then(res => {
+            this.getList()
+          })
+      }).catch(() => {
+      
+      });
+    },
+    dele(id) {
+      this.$confirm('鏄惁纭鍒犻櫎?', '鎻愮ず', {
+        confirmButtonText: '纭畾',
+        cancelButtonText: '鍙栨秷',
+        type: 'warning'
+      }).then(() => {
+        deleteById(id)
+          .then(res => {
+            this.getList()
+          })
+      }).catch(() => {
+      
+      });
+    },
     clear() {
       this.filters = {}
       this.pagination.pageSize = 10
diff --git a/admin/src/views/stock/components/inventoryDetails.vue b/admin/src/views/stock/components/inventoryDetails.vue
index b0c6d1c..790d7bf 100644
--- a/admin/src/views/stock/components/inventoryDetails.vue
+++ b/admin/src/views/stock/components/inventoryDetails.vue
@@ -10,62 +10,66 @@
             <div class="list">
                 <div class="item">
                     <div class="la">鐩樼偣鍗曞悕绉�</div>
-                    <div class="val">搴撳瓨鐩樼偣20241212</div>
+                    <div class="val">{{info.name}}</div>
                 </div>
                 <div class="item">
                     <div class="la">鐩樼偣鏃ユ湡</div>
-                    <div class="val">2024-11-17</div>
+                    <div class="val">{{info.planDate}}</div>
                 </div>
                 <div class="item">
                     <div class="la">鐩樼偣浠撳簱</div>
-                    <div class="val">浠撳簱1</div>
+                    <div class="val">{{info.warehouseName}}</div>
                 </div>
                 <div class="item">
                     <div class="la">鐩樼偣鍛�</div>
-                    <div class="val">寮犱笁</div>
+                    <div class="val">{{info.userName}}</div>
                 </div>
                 <div class="item">
                     <div class="la">鐩樼偣鐘舵��</div>
-                    <div class="val">宸插畬鎴�</div>
+                    <div class="val" v-if="info.status === 0">鏈紑濮�</div>
+                    <div class="val" v-if="info.status === 1">杩涜涓�</div>
+                    <div class="val" v-if="info.status === 2">宸插畬鎴�</div>
+                    <div class="val" v-if="info.status === 3">宸插彇娑�</div>
                 </div>
             </div>
             <div class="title">鐩樼偣缁撴灉</div>
             <div class="list">
                 <div class="list_search">
                     <div class="list_search_left">
-                        <el-input v-model="input" style="width: 200px; margin-right: 10px;" placeholder="璇疯緭鍏ュ唴瀹�"></el-input>
-                        <el-select v-model="input" style="width: 200px; margin-right: 10px;" placeholder="璇烽�夋嫨">
-                            <el-option
-                                v-for="item in options"
-                                :key="item.value"
-                                :label="item.label"
-                                :value="item.value">
-                            </el-option>
+                        <el-input v-model="form.code" style="width: 200px; margin-right: 10px;" placeholder="璇疯緭鍏ョ墿鏂欏悕绉�/缂栫爜"></el-input>
+                        <el-select v-model="form.status" style="width: 150px; margin-right: 10px;" placeholder="鐩樼偣鐘舵��">
+                            <el-option label="宸茬洏" :value="1"></el-option>
+                            <el-option label="鏈洏" :value="0"></el-option>
                         </el-select>
-                        <el-button type="primary">鏌ヨ</el-button>
-                        <el-button>娓呯┖</el-button>
+                        <el-select v-model="form.type" style="width: 150px; margin-right: 10px;" placeholder="鐩樼偣缁撴灉">
+                            <el-option label="璐﹀疄鐩哥" :value="0"></el-option>
+                            <el-option label="鐩樹簭" :value="1"></el-option>
+                            <el-option label="鐩樼泩" :value="2"></el-option>
+                        </el-select>
+                        <el-button type="primary" @click="getList">鏌ヨ</el-button>
+                        <el-button @click="clear">娓呯┖</el-button>
                         <el-button>瀵煎嚭</el-button>
                     </div>
                     <div class="list_search_right">
-                        <span>宸茬洏:100</span>
-                        <span>鏈洏:20</span>
-                        <span>璐﹀疄鐩哥:88</span>
-                        <span>鐩樼泩:2</span>
-                        <span>鐩樹簭:20</span>
+                        <span>宸茬洏:{{info.finishAmount || 0}}</span>
+                        <span>鏈洏:{{info.unFinishAmount || 0}}</span>
+                        <span>璐﹀疄鐩哥:{{info.equalAmount || 0}}</span>
+                        <span>鐩樼泩:{{info.profitAmount || 0}}</span>
+                        <span>鐩樹簭:{{info.lossAmount || 0}}</span>
                     </div>
                 </div>
                 <div style="width: 100%; margin: 20px 0;">
-                    <el-table :data="roomList" stripe>
-                        <el-table-column prop="projectName" label="璧勪骇缂栫爜" show-overflow-tooltip />
-                        <el-table-column prop="buildingName" label="璧勪骇鍚嶇О" show-overflow-tooltip />
-                        <el-table-column prop="buildingName" label="鏉$爜" show-overflow-tooltip />
-                        <el-table-column prop="buildingName" label="鍝佺墝" show-overflow-tooltip />
-                        <el-table-column prop="buildingName" label="瑙勬牸鍨嬪彿" show-overflow-tooltip />
-                        <el-table-column prop="buildingName" label="鍗曚綅" show-overflow-tooltip />
-                        <el-table-column prop="buildingName" label="鎵�鍦ㄤ粨搴�" show-overflow-tooltip />
-                        <el-table-column prop="buildingName" label="璐﹂潰鏁伴噺" show-overflow-tooltip />
-                        <el-table-column prop="buildingName" label="鐩樼偣鏁伴噺" show-overflow-tooltip />
-                        <el-table-column prop="buildingName" label="澶囨敞" show-overflow-tooltip />
+                    <el-table :data="list" stripe>
+                        <el-table-column prop="materialCode" label="璧勪骇缂栫爜" show-overflow-tooltip />
+                        <el-table-column prop="materialName" label="璧勪骇鍚嶇О" show-overflow-tooltip />
+                        <el-table-column prop="materialQrcode" label="鏉$爜" show-overflow-tooltip />
+                        <el-table-column prop="materialBrand" label="鍝佺墝" show-overflow-tooltip />
+                        <el-table-column prop="materialAttr" label="瑙勬牸鍨嬪彿" show-overflow-tooltip />
+                        <el-table-column prop="materialUnitName" label="鍗曚綅" show-overflow-tooltip />
+                        <el-table-column prop="warehouseName" label="鎵�鍦ㄤ粨搴�" show-overflow-tooltip />
+                        <el-table-column prop="stock" label="璐﹂潰鏁伴噺" show-overflow-tooltip />
+                        <el-table-column prop="actStock" label="鐩樼偣鏁伴噺" show-overflow-tooltip />
+                        <el-table-column prop="remark" label="澶囨敞" show-overflow-tooltip />
                     </el-table>
                 </div>
                 <div class="list_pagination">
@@ -87,6 +91,7 @@
 <script>
   import GlobalWindow from '@/components/common/GlobalWindow'
   import BaseOpera from '@/components/base/BaseOpera'
+  import { ywStocktakingRecordPage, getById } from '@/api/ywStocktaking'
   export default {
     name: "inventoryDetails",
     components: {
@@ -95,11 +100,14 @@
     extends: BaseOpera,
     data() {
       return {
+        id: null,
         info: {},
-        input: '',
-        options: [],
-        roomList: [],
-
+        list: [],
+        form: {
+          code: '',
+          status: '',
+          type: ''
+        },
         pageSize: 10,
         total: 0,
         page: 1
@@ -108,13 +116,45 @@
     methods: {
       handleSizeChange(size) {
         this.pageSize = size
+        this.getList()
       },
       handleCurrentChange(page) {
         this.page = page
+        this.getList()
       },
-      open (title) {
+      open (title, id) {
         this.title = title
         this.visible = true
+        this.id = id
+        this.getDetails()
+        this.getList()
+      },
+      getDetails() {
+        getById(this.id)
+            .then(res => {
+              this.info = res
+            })
+      },
+      clear() {
+        this.form.name = ''
+        this.form.status = ''
+        this.form.type = ''
+        this.page = 1
+        this.getList()
+      },
+      getList() {
+        ywStocktakingRecordPage({
+          capacity: this.pageSize,
+          page: this.page,
+          model: {
+            stocktakingId: this.id,
+            code: this.form.code,
+            status: this.form.status,
+            type: this.form.type
+          }
+        }).then(res => {
+          this.list = res.records
+        })
       }
     }
   }
diff --git a/admin/src/views/stock/components/newInventory.vue b/admin/src/views/stock/components/newInventory.vue
index eb57f94..dd2be3e 100644
--- a/admin/src/views/stock/components/newInventory.vue
+++ b/admin/src/views/stock/components/newInventory.vue
@@ -6,29 +6,35 @@
         :confirm-working="isWorking"
         @confirm="confirm">
         <el-form :model="form" ref="form" :rules="rules">
-            <el-form-item label="鐩樼偣鍗曞悕绉�" prop="name">
-                <el-input v-model="form.name" placeholder="璇疯緭鍏ョ洏鐐瑰崟鍚嶇О" v-trim />
-            </el-form-item>
-            <el-form-item label="鐩樼偣鏃ユ湡" prop="name">
+            <el-form-item label="鐩樼偣鏃ユ湡" prop="planDate">
                 <el-date-picker
-                    v-model="form.name"
+                    v-model="form.planDate"
+                    @change="getName"
                     type="date"
+                    value-format="yyyy-MM-dd"
                     placeholder="閫夋嫨鏃ユ湡">
                 </el-date-picker>
             </el-form-item>
-            <el-form-item label="鐩樼偣浠撳簱" prop="name">
-                <el-select v-model="form.name" placeholder="璇烽�夋嫨">
-                    <el-option label="寮犱笁" :value="1"></el-option>
-                    <el-option label="鏉庡洓" :value="1"></el-option>
-                    <el-option label="鐜嬩簩" :value="1"></el-option>
+            <el-form-item label="鐩樼偣浠撳簱" prop="warehouseId">
+                <el-select v-model="form.warehouseId" @change="getName" placeholder="璇烽�夋嫨">
+                    <el-option
+                        v-for="(item, index) in warehouseList"
+                        :key="index"
+                        :label="item.name"
+                        :value="item.id" />
                 </el-select>
             </el-form-item>
-            <el-form-item label="鐩樼偣鍛�" prop="name">
-                <el-select v-model="form.name" placeholder="璇烽�夋嫨">
-                    <el-option label="寮犱笁" :value="1"></el-option>
-                    <el-option label="鏉庡洓" :value="1"></el-option>
-                    <el-option label="鐜嬩簩" :value="1"></el-option>
+            <el-form-item label="鐩樼偣鍛�" prop="userId">
+                <el-select v-model="form.userId" @change="getName" placeholder="璇烽�夋嫨">
+                    <el-option
+                        v-for="(item, index) in userList"
+                        :key="index"
+                        :label="item.realname"
+                        :value="item.id" />
                 </el-select>
+            </el-form-item>
+            <el-form-item label="鐩樼偣鍗曞悕绉�" prop="name">
+                <el-input v-model="form.name" placeholder="璇疯緭鍏�" v-trim />
             </el-form-item>
         </el-form>
     </GlobalWindow>
@@ -37,6 +43,8 @@
 <script>
   import BaseOpera from '@/components/base/BaseOpera'
   import GlobalWindow from '@/components/common/GlobalWindow'
+  import { list } from '@/api/ywWarehouse'
+  import { getUserList } from '@/api/system/user'
   export default {
     name: 'newInventory',
     extends: BaseOpera,
@@ -47,21 +55,45 @@
         form: {
           id: '',
           name: '',
+          planDate: '',
+          warehouseId: '',
+          userId: ''
         },
         // 楠岃瘉瑙勫垯
         rules: {
-          name: [{ required: true, message: '璇疯緭鍏ラ」鐩悕绉�', trigger: 'blur' }]
+          planDate: [{ required: true, message: '璇烽�夋嫨鐩樼偣鏃ユ湡', trigger: 'blur' }],
+          warehouseId: [{ required: true, message: '璇烽�夋嫨鐩樼偣浠撳簱', trigger: 'blur' }],
+          userId: [{ required: true, message: '璇烽�夋嫨鐩樼偣鍛�', trigger: 'blur' }],
+          name: [{ required: true, message: '璇疯緭鍏ョ洏鐐瑰崟鍚嶇О', trigger: 'blur' }]
         },
+        warehouseList: [],
+        userList: []
       }
     },
     created() {
       this.config({
-        api: '/project/ywProject',
-        'field.id': 'id'
+        api: '/ywStocktaking'
       })
+      this.getList()
     },
     methods: {
-    
+        getList() {
+          list({})
+            .then(res => {
+              this.warehouseList = res
+            })
+          getUserList({})
+            .then(res => {
+              this.userList = res
+            })
+        },
+      getName(e) {
+          if (this.form.warehouseId && this.form.userId && this.form.planDate) {
+            let userName = this.userList.filter(item => item.id === this.form.userId)[0].realname
+            let warehouseName = this.warehouseList.filter(item => item.id === this.form.warehouseId)[0].name
+            this.form.name = warehouseName + '-' + userName + '-' + this.form.planDate
+          }
+      }
     }
   }
 </script>
diff --git a/admin/src/views/workorder/components/detail.vue b/admin/src/views/workorder/components/detail.vue
index f2e7d5f..5b4caa0 100644
--- a/admin/src/views/workorder/components/detail.vue
+++ b/admin/src/views/workorder/components/detail.vue
@@ -3,12 +3,15 @@
     @confirm="confirm">
     <div class="main">
       <div class="title">
-        <span>宸ュ崟璇︽儏</span>
-        <div>
-          <div class="status primaryColor" v-if="info.dealStatus == 0 || info.dealStatus == null">寰呮寚娲�</div>
-          <div class="status green" v-if="info.dealStatus == 1">宸叉寚娲�</div>
-          <div class="status gray" v-if="info.dealStatus == 2">宸插鐞�</div>
+        <div class="title_left">
+          <span>宸ュ崟璇︽儏</span>
+          <div>
+            <div class="status primaryColor" v-if="info.dealStatus == 0 || info.dealStatus == null">寰呮寚娲�</div>
+            <div class="status green" v-if="info.dealStatus == 1">宸叉寚娲�</div>
+            <div class="status gray" v-if="info.dealStatus == 2">宸插鐞�</div>
+          </div>
         </div>
+        <el-button>鏌ョ湅闂涓婃姤</el-button>
       </div>
       <div class="main_content">
         <div class="list">
@@ -308,39 +311,41 @@
   padding-top: 20px;
 
   .title {
-    font-weight: 500;
-    font-size: 18px;
-    color: $primary-color;
+    
     margin-bottom: 10px;
     display: flex;
     align-items: center;
-
-    .status {
-      padding: 0 12px;
-      height: 24px;
-      line-height: 24px;
-      border-radius: 2px;
-      border: 1px solid #00BA92;
-      color: #00BA92;
-      font-weight: 400;
-      font-size: 12px;
-      margin-left: 10px;
-    }
-
-    .primaryColor {
-      border: 1px solid rgba(63, 126, 239, .2);
-      background-color: rgba(63, 126, 239, .2);
-    }
-
-    .green {
-      background-color: rgba(83, 183, 148, .2);
-      border: 1px solid rgba(83, 183, 148, .2);
-    }
-
-    .gray {
-      color: #333333;
-      background-color: rgba(128, 128, 128, .2);
-      border: 1px solid rgba(128, 128, 128, .2);
+    justify-content: space-between;
+    .title_left {
+      display: flex;
+      align-items: center;
+      font-weight: 500;
+      font-size: 18px;
+      color: $primary-color;
+      .status {
+        padding: 0 12px;
+        height: 24px;
+        line-height: 24px;
+        border-radius: 2px;
+        border: 1px solid #00BA92;
+        color: #00BA92;
+        font-weight: 400;
+        font-size: 12px;
+        margin-left: 10px;
+      }
+      .primaryColor {
+        border: 1px solid rgba(63, 126, 239, .2);
+        background-color: rgba(63, 126, 239, .2);
+      }
+      .green {
+        background-color: rgba(83, 183, 148, .2);
+        border: 1px solid rgba(83, 183, 148, .2);
+      }
+      .gray {
+        color: #333333;
+        background-color: rgba(128, 128, 128, .2);
+        border: 1px solid rgba(128, 128, 128, .2);
+      }
     }
   }
 
diff --git a/admin/src/views/workorder/workorderList.vue b/admin/src/views/workorder/workorderList.vue
index f3ad3de..d22f32d 100644
--- a/admin/src/views/workorder/workorderList.vue
+++ b/admin/src/views/workorder/workorderList.vue
@@ -26,6 +26,12 @@
             children: 'childCategoryList'
           }"></el-cascader>
       </el-form-item>
+      <el-form-item label="鏉ユ簮" prop="origin">
+        <el-select v-model="searchForm.origin" clearable filterable>
+          <el-option label="鑷缓" :value="0" />
+          <el-option label="闂杞伐鍗�" :value="1" />
+        </el-select>
+      </el-form-item>
       <el-form-item label="涓婃姤鏃堕棿">
         <el-date-picker v-model="searchForm.selDate" @change="changeSelDate" format="yyyy-MM-dd"
           value-format="yyyy-MM-dd" type="daterange"></el-date-picker>
@@ -58,6 +64,12 @@
           </template>
         </el-table-column>
         <el-table-column prop="categoryName" label="宸ュ崟鍒嗙被" min-width="100px"></el-table-column>
+        <el-table-column label="鏉ユ簮" min-width="100px">
+          <template slot-scope="{row}">
+            <span v-if="row.origin == 0">鑷缓</span>
+            <span v-if="row.origin == 1">闂杞伐鍗�</span>
+          </template>
+        </el-table-column>
         <el-table-column prop="creatorName" label="涓婃姤浜�" min-width="80px"></el-table-column>
         <el-table-column prop="createDate" label="涓婃姤鏃堕棿" min-width="100px"></el-table-column>
         <el-table-column prop="dealUserName" label="澶勭悊浜�" min-width="80px"></el-table-column>
@@ -107,6 +119,7 @@
         projectId: '',
         buildingId: '',
         cateId: '',
+        origin: ''
       },
       projectList: [],
       buildList: [],

--
Gitblit v1.9.3