From d492850f1cc64ddcfaf43798af9c76c2505414fd Mon Sep 17 00:00:00 2001
From: renkang <8417338+k94314517@user.noreply.gitee.com>
Date: 星期五, 24 一月 2025 18:24:31 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/2.0.1' into 2.0.1
---
admin/src/views/contract/components/contractEdit.vue | 97
admin/src/views/contract/components/pendingBills.vue | 45
admin/src/api/workorder/ywWorkorder.js | 5
admin/src/views/finance/components/batchCall.vue | 90
admin/src/views/stock/check.vue | 115
h5/pages/polling/detail.vue | 21
admin/src/api/project/ywRoom.js | 10
admin/src/views/Inspection/components/OperaYwPatrolSchemeWindow.vue | 52
admin/src/views/stock/in.vue | 108
h5/pages/inventory/detail.vue | 683 ++++
admin/src/views/workorder/components/problemReportingDetails.vue | 89
h5/pages/operation/device.vue | 13
h5/pages/workOrder/wait.vue | 431 ++
admin/src/views/stock/components/InEdit.vue | 119
admin/package-lock.json | 287 +
h5/pages/index.vue | 45
h5/pages/login.vue | 82
h5/static/side/ic_pandian@2x.png | 0
admin/src/views/workorder/components/detail.vue | 96
admin/src/views/workorder/problemReporting.vue | 70
admin/src/views/stock/components/newWarehouse.vue | 54
admin/src/views/operation/components/deviceDetail.vue | 281 +
h5/pages/polling/point.vue | 89
admin/src/api/system/common.js | 4
admin/src/views/stock/components/AssetSel.vue | 62
admin/src/views/stock/components/CateEdit.vue | 20
h5/api/staff.js | 7
admin/src/views/operation/components/deviceEdit.vue | 356 ++
admin/src/views/operation/device.vue | 2
admin/src/views/contract/components/terminationAgreement.vue | 55
h5/manifest.json | 6
h5/pages/inventory/index.vue | 222 +
admin/src/api/index.js | 1
h5/pages.json | 35
admin/src/views/project/components/houseDetails.vue | 641 +++-
admin/src/views/stock/components/config.js | 18
h5/utils/config.js | 3
admin/src/api/project/ywProject.js | 5
admin/src/views/contract/components/terminateLease.vue | 23
admin/src/api/ywMaterial.js | 28
admin/src/api/ywProblem.js | 38
admin/src/views/stock/components/newMaterial.vue | 196
admin/src/api/ywTempConfig.js | 15
admin/package.json | 5
admin/src/views/stock/components/inventoryDetails.vue | 112
admin/src/views/index.vue | 285 +
admin/src/views/stock/components/InDetail.vue | 58
admin/src/components/common/GlobalWindow.vue | 9
admin/src/views/stock/components/OutEdit.vue | 122
admin/.env.test | 4
admin/src/api/ywWorkDesk.js | 26
h5/pages/workOrder/problemEdit.vue | 313 ++
admin/src/views/stock/out.vue | 112
admin/src/views/stock/assetList.vue | 107
h5/static/home/ic_pandian@2x.png | 0
admin/src/views/stock/record.vue | 158
admin/src/views/stock/asset.vue | 93
h5/static/side/btn_jia@3x.png | 0
admin/src/views/workorder/components/OperaYwWorkorderWindow.vue | 137
h5/static/side/xiaoxi_ic_tongzhi@2x.png | 0
admin/src/api/ywContractBill.js | 42
admin/src/views/finance/collectionSettings.vue | 98
h5/static/side/btn_jian_grey@2x.png | 0
h5/static/ic_paysuccess@2x.png | 0
admin/src/api/ywStock.js | 8
admin/src/views/stock/assetCate.vue | 16
admin/src/api/ywStocktaking.js | 46
admin/src/views/contract/components/contractDetail.vue | 20
admin/src/views/workorder/components/handleProblem.vue | 338 +
h5/pages/polling/task.vue | 4
h5/api/yw.js | 55
admin/src/views/finance/components/templateKeywords.vue | 50
h5/pages/workOrder/detail.vue | 2
admin/src/views/workorder/workorderList.vue | 13
admin/src/api/ywWarehouse.js | 33
admin/src/components/business/commonFunctions.vue | 116
h5/pages/workOrder/result.vue | 39
h5/static/side/btn_jian@3x.png | 0
admin/src/views/stock/components/newInventory.vue | 70
admin/src/views/finance/components/call.vue | 96
h5/static/side/ic_pandian_grey@2x.png | 0
admin/src/api/store/index.js | 44
admin/src/views/project/housingList.vue | 2
h5/static/home/ic_daiban@2x.png | 0
admin/src/api/Inspection/device.js | 10
admin/src/views/roomStatus/index.vue | 1286 +++++---
admin/src/views/finance/overdueBills.vue | 35
admin/src/views/finance/components/bullDetail.vue | 43
admin/src/views/stock/query.vue | 87
admin/src/views/stock/components/OutDetail.vue | 52
90 files changed, 6,829 insertions(+), 1,936 deletions(-)
diff --git a/admin/.env.test b/admin/.env.test
index 074e999..da78780 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.137:10010/'
+VUE_APP_API_URL = 'http://192.168.0.133: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..2a619e8 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": {
@@ -410,8 +410,7 @@
"@babel/helper-string-parser": {
"version": "7.25.9",
"resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz",
- "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==",
- "dev": true
+ "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA=="
},
"@babel/helper-validator-identifier": {
"version": "7.14.0",
@@ -2046,8 +2045,7 @@
"@jridgewell/sourcemap-codec": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
- "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==",
- "dev": true
+ "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ=="
},
"@jridgewell/trace-mapping": {
"version": "0.3.25",
@@ -2915,6 +2913,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 +2977,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"
}
}
}
@@ -2950,7 +3027,6 @@
"version": "3.5.13",
"resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.13.tgz",
"integrity": "sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==",
- "dev": true,
"requires": {
"@babel/parser": "^7.25.3",
"@vue/shared": "3.5.13",
@@ -2962,14 +3038,12 @@
"@babel/helper-validator-identifier": {
"version": "7.25.9",
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz",
- "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==",
- "dev": true
+ "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ=="
},
"@babel/parser": {
"version": "7.26.2",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.2.tgz",
"integrity": "sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==",
- "dev": true,
"requires": {
"@babel/types": "^7.26.0"
}
@@ -2978,7 +3052,6 @@
"version": "7.26.0",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.0.tgz",
"integrity": "sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==",
- "dev": true,
"requires": {
"@babel/helper-string-parser": "^7.25.9",
"@babel/helper-validator-identifier": "^7.25.9"
@@ -2987,8 +3060,7 @@
"entities": {
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
- "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
- "dev": true
+ "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="
}
}
},
@@ -2996,7 +3068,6 @@
"version": "3.5.13",
"resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.13.tgz",
"integrity": "sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==",
- "dev": true,
"requires": {
"@vue/compiler-core": "3.5.13",
"@vue/shared": "3.5.13"
@@ -3006,7 +3077,6 @@
"version": "3.5.13",
"resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.13.tgz",
"integrity": "sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ==",
- "dev": true,
"requires": {
"@babel/parser": "^7.25.3",
"@vue/compiler-core": "3.5.13",
@@ -3022,14 +3092,12 @@
"@babel/helper-validator-identifier": {
"version": "7.25.9",
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz",
- "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==",
- "dev": true
+ "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ=="
},
"@babel/parser": {
"version": "7.26.2",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.2.tgz",
"integrity": "sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==",
- "dev": true,
"requires": {
"@babel/types": "^7.26.0"
}
@@ -3038,7 +3106,6 @@
"version": "7.26.0",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.0.tgz",
"integrity": "sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==",
- "dev": true,
"requires": {
"@babel/helper-string-parser": "^7.25.9",
"@babel/helper-validator-identifier": "^7.25.9"
@@ -3048,7 +3115,6 @@
"version": "8.4.49",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz",
"integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==",
- "dev": true,
"requires": {
"nanoid": "^3.3.7",
"picocolors": "^1.1.1",
@@ -3061,7 +3127,6 @@
"version": "3.5.13",
"resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.13.tgz",
"integrity": "sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA==",
- "dev": true,
"requires": {
"@vue/compiler-dom": "3.5.13",
"@vue/shared": "3.5.13"
@@ -3131,11 +3196,47 @@
"integrity": "sha1-zrkktOyzucQ4ccekKaAvhCPmIas=",
"dev": true
},
+ "@vue/reactivity": {
+ "version": "3.5.13",
+ "resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.5.13.tgz",
+ "integrity": "sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg==",
+ "requires": {
+ "@vue/shared": "3.5.13"
+ }
+ },
+ "@vue/runtime-core": {
+ "version": "3.5.13",
+ "resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.5.13.tgz",
+ "integrity": "sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw==",
+ "requires": {
+ "@vue/reactivity": "3.5.13",
+ "@vue/shared": "3.5.13"
+ }
+ },
+ "@vue/runtime-dom": {
+ "version": "3.5.13",
+ "resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.5.13.tgz",
+ "integrity": "sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog==",
+ "requires": {
+ "@vue/reactivity": "3.5.13",
+ "@vue/runtime-core": "3.5.13",
+ "@vue/shared": "3.5.13",
+ "csstype": "^3.1.3"
+ }
+ },
+ "@vue/server-renderer": {
+ "version": "3.5.13",
+ "resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.5.13.tgz",
+ "integrity": "sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA==",
+ "requires": {
+ "@vue/compiler-ssr": "3.5.13",
+ "@vue/shared": "3.5.13"
+ }
+ },
"@vue/shared": {
"version": "3.5.13",
"resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.13.tgz",
- "integrity": "sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==",
- "dev": true
+ "integrity": "sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ=="
},
"@vue/web-component-wrapper": {
"version": "1.3.0",
@@ -5801,6 +5902,11 @@
}
}
},
+ "csstype": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.1.3.tgz",
+ "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="
+ },
"currently-unhandled": {
"version": "0.4.1",
"resolved": "https://registry.npm.taobao.org/currently-unhandled/download/currently-unhandled-0.4.1.tgz",
@@ -7275,8 +7381,7 @@
"estree-walker": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
- "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
- "dev": true
+ "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="
},
"esutils": {
"version": "2.0.3",
@@ -10369,7 +10474,6 @@
"version": "0.30.13",
"resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.13.tgz",
"integrity": "sha512-8rYBO+MsWkgjDSOvLomYnzhdwEG51olQ4zL5KXnNJWV5MNmrb4rTZdrtkhxjnD/QyZUqR/Z/XDsUs/4ej2nx0g==",
- "dev": true,
"requires": {
"@jridgewell/sourcemap-codec": "^1.5.0"
}
@@ -11786,8 +11890,7 @@
"picocolors": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
- "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
- "dev": true
+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="
},
"picomatch": {
"version": "2.2.3",
@@ -14319,6 +14422,11 @@
}
}
},
+ "sortablejs": {
+ "version": "1.10.2",
+ "resolved": "https://registry.npmmirror.com/sortablejs/-/sortablejs-1.10.2.tgz",
+ "integrity": "sha512-YkPGufevysvfwn5rfdlGyrGjt7/CRHwvRPogD/lC+TnvcN29jDpCifKP+rBqf+LRldfXSTh+0CGLcSg0VIxq3A=="
+ },
"source-list-map": {
"version": "2.0.1",
"resolved": "https://registry.npm.taobao.org/source-list-map/download/source-list-map-2.0.1.tgz",
@@ -14334,8 +14442,7 @@
"source-map-js": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
- "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
- "dev": true
+ "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="
},
"source-map-resolve": {
"version": "0.5.3",
@@ -15657,6 +15764,11 @@
"resolved": "https://registry.npmjs.org/vue-awesome/-/vue-awesome-4.5.0.tgz",
"integrity": "sha512-pbtZkRecXLm3fg0eVkwObDRM9YNU1BW5wDsL4mMoSvUXZbTnS+N2E4CahAwKJL5OPbqmhJQgZPekQoJrID7dcQ=="
},
+ "vue-calendar-component": {
+ "version": "2.8.2",
+ "resolved": "https://registry.npmmirror.com/vue-calendar-component/-/vue-calendar-component-2.8.2.tgz",
+ "integrity": "sha512-BJh7xOBzM7QVcapcN4EbPQ1eZ8Pii1/oy+dzqjZTilRSIDD7SRPdFpnUJwZvs8lCrhtBAyJbYFsdm2SogXWHVQ=="
+ },
"vue-class-component": {
"version": "7.2.6",
"resolved": "https://registry.npmjs.org/vue-class-component/-/vue-class-component-7.2.6.tgz",
@@ -15669,9 +15781,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"
}
@@ -15742,87 +15854,6 @@
}
}
},
- "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"
- }
- }
- }
- },
"vue-property-decorator": {
"version": "8.5.1",
"resolved": "https://registry.npmjs.org/vue-property-decorator/-/vue-property-decorator-8.5.1.tgz",
@@ -15835,6 +15866,28 @@
"version": "3.5.1",
"resolved": "https://registry.nlark.com/vue-router/download/vue-router-3.5.1.tgz?cache=0&sync_timestamp=1620899536020&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fvue-router%2Fdownload%2Fvue-router-3.5.1.tgz",
"integrity": "sha1-7fPPSQeVLR4Fg+B5I3Igxf9utsk="
+ },
+ "vue-simple-calendar": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmmirror.com/vue-simple-calendar/-/vue-simple-calendar-7.1.0.tgz",
+ "integrity": "sha512-WNbvRVGQQJlStaLPvvpe2ZsB/E1n8eFgUh4hD931ljp2czPA8xT81i4jGD5+jKZT1OHDFpON5mNn0KwO2QC9rA==",
+ "requires": {
+ "vue": "^3.4.15"
+ },
+ "dependencies": {
+ "vue": {
+ "version": "3.5.13",
+ "resolved": "https://registry.npmmirror.com/vue/-/vue-3.5.13.tgz",
+ "integrity": "sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ==",
+ "requires": {
+ "@vue/compiler-dom": "3.5.13",
+ "@vue/compiler-sfc": "3.5.13",
+ "@vue/runtime-dom": "3.5.13",
+ "@vue/server-renderer": "3.5.13",
+ "@vue/shared": "3.5.13"
+ }
+ }
+ }
},
"vue-style-loader": {
"version": "4.1.3",
@@ -15870,6 +15923,14 @@
"integrity": "sha1-HuO8mhbsv1EYvjNLsV+cRvgvWCU=",
"dev": true
},
+ "vuedraggable": {
+ "version": "2.24.3",
+ "resolved": "https://registry.npmmirror.com/vuedraggable/-/vuedraggable-2.24.3.tgz",
+ "integrity": "sha512-6/HDXi92GzB+Hcs9fC6PAAozK1RLt1ewPTLjK0anTYguXLAeySDmcnqE8IC0xa7shvSzRjQXq3/+dsZ7ETGF3g==",
+ "requires": {
+ "sortablejs": "1.10.2"
+ }
+ },
"vuescroll": {
"version": "4.17.3",
"resolved": "https://registry.npm.taobao.org/vuescroll/download/vuescroll-4.17.3.tgz",
diff --git a/admin/package.json b/admin/package.json
index 5405124..8af7393 100644
--- a/admin/package.json
+++ b/admin/package.json
@@ -29,10 +29,13 @@
"path": "^0.12.7",
"qrcodejs2": "0.0.2",
"vue": "^2.6.11",
- "vue-clipboard2": "^0.3.1",
+ "vue-calendar-component": "^2.8.2",
+ "vue-clipboard2": "^0.3.3",
"vue-cropper": "^0.6.5",
"vue-json-viewer": "^2.2.22",
"vue-router": "^3.5.1",
+ "vue-simple-calendar": "^7.1.0",
+ "vuedraggable": "^2.24.3",
"vuescroll": "^4.17.3",
"vuex": "^3.4.0"
},
diff --git a/admin/src/api/Inspection/device.js b/admin/src/api/Inspection/device.js
index ec4923a..d565e90 100644
--- a/admin/src/api/Inspection/device.js
+++ b/admin/src/api/Inspection/device.js
@@ -42,3 +42,13 @@
}
})
}
+
+// 璁惧鐘舵�佺粺璁�
+export function getDeviceStatus (data) {
+ return request.post('/visitsAdmin/cloudService/business/ywDevice/getDeviceStatus', data)
+}
+
+// 璁惧鏁伴噺鍒嗙被缁熻
+export function getDeviceCateData (data) {
+ return request.post('/visitsAdmin/cloudService/business/ywDevice/getDeviceCateData', data)
+}
diff --git a/admin/src/api/index.js b/admin/src/api/index.js
index dc952c6..05f4504 100644
--- a/admin/src/api/index.js
+++ b/admin/src/api/index.js
@@ -3,3 +3,4 @@
export * from './business/index'
export * from './other/other'
export * from './workbench/index'
+export * from './store/index'
diff --git a/admin/src/api/project/ywProject.js b/admin/src/api/project/ywProject.js
index eb71bfc..56cfae7 100644
--- a/admin/src/api/project/ywProject.js
+++ b/admin/src/api/project/ywProject.js
@@ -45,6 +45,11 @@
return request.get(`/visitsAdmin/cloudService/business/ywProject/${id}`)
}
+// 鏍规嵁ID鏌ヨ
+export function getProjectById (id) {
+ return request.get(`/visitsAdmin/cloudService/business/ywProject/${id}`)
+}
+
// 鎵归噺鍒犻櫎
export function deleteByIdInBatch (ids) {
return request.get('/visitsAdmin/cloudService/business/ywProject/delete/batch', {
diff --git a/admin/src/api/project/ywRoom.js b/admin/src/api/project/ywRoom.js
index d46c912..3213682 100644
--- a/admin/src/api/project/ywRoom.js
+++ b/admin/src/api/project/ywRoom.js
@@ -29,6 +29,16 @@
return request.post('/visitsAdmin/cloudService/business/ywRoom/updateById', data)
}
+// 鏌ヨ鎴块棿鎬佸娍鏁版嵁
+export function getRoomStatusList (data) {
+ return request.post('/visitsAdmin/cloudService/business/ywRoom/getRoomStatusList', data)
+}
+
+// 鏌ヨ鎴块棿绉熻祦淇℃伅
+export function getRoomContract (data) {
+ return request.post('/visitsAdmin/cloudService/business/ywRoom/getRoomContract', data)
+}
+
// 鍒犻櫎
export function deleteById (id) {
return request.get(`/visitsAdmin/cloudService/business/ywRoom/delete/${id}`)
diff --git a/admin/src/api/store/index.js b/admin/src/api/store/index.js
new file mode 100644
index 0000000..bcd9b21
--- /dev/null
+++ b/admin/src/api/store/index.js
@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+export function ywOutinboundPage (data) {
+ return request.post('/visitsAdmin/cloudService/business/ywOutinbound/page', data, {
+ trim: true
+ })
+}
+export function ywOutinboundEx (data) {
+ return request.post('/visitsAdmin/cloudService/business/ywOutinbound/exportExcel', data, {
+ trim: true
+ })
+}
+export function ywOutinboundDetail (id) {
+ return request.get('/visitsAdmin/cloudService/business/ywOutinbound/' + id)
+}
+
+export function ywOutinboundCreate (data) {
+ return request.post('/visitsAdmin/cloudService/business/ywOutinbound/create', data, {
+ trim: true
+ })
+}
+
+// 搴撳瓨鏌ヨ
+export function ywStockPage (data) {
+ return request.post('/visitsAdmin/cloudService/business/ywStock/page', data, {
+ trim: true
+ })
+}
+export function ywStockPageEx (data) {
+ return request.post('/visitsAdmin/cloudService/business/ywStock/exportExcel', data, {
+ trim: true
+ })
+}
+
+export function ywOutinboundRecord (data) {
+ return request.post('/visitsAdmin/cloudService/business/ywOutinboundRecord/page', data, {
+ trim: true
+ })
+}
+export function ywOutinboundRecordEx (data) {
+ return request.post('/visitsAdmin/cloudService/business/ywOutinboundRecord/exportExcel', data, {
+ trim: true
+ })
+}
\ No newline at end of file
diff --git a/admin/src/api/system/common.js b/admin/src/api/system/common.js
index 0e99bcf..d0b2af7 100644
--- a/admin/src/api/system/common.js
+++ b/admin/src/api/system/common.js
@@ -71,6 +71,10 @@
export function upload (data) {
return request.post('/visitsAdmin/cloudService/public/upload', data)
}
+// 鎵归噺涓婁紶鏂囦欢鍒癋TP
+export function uploadBatch (data) {
+ return request.post('/visitsAdmin/cloudService/public/uploadBatch', data)
+}
// 鑾峰彇鐪佸競鍖烘爲
export function getCityTree (data) {
return request.post('/visitsAdmin/cloudService/business/areas/treeList', data)
diff --git a/admin/src/api/workorder/ywWorkorder.js b/admin/src/api/workorder/ywWorkorder.js
index fc54054..7513175 100644
--- a/admin/src/api/workorder/ywWorkorder.js
+++ b/admin/src/api/workorder/ywWorkorder.js
@@ -32,6 +32,11 @@
return request.post('/visitsAdmin/cloudService/business/ywWorkorder/updateById', data)
}
+// 鑾峰彇宸ュ崟鏁伴噺淇℃伅
+export function getDataVO (data) {
+ return request.post('/visitsAdmin/cloudService/business/ywWorkorder/getDataVO', data)
+}
+
// 鍒犻櫎
export function deleteById (id) {
return request.get(`/visitsAdmin/cloudService/business/ywWorkorder/delete/${id}`)
diff --git a/admin/src/api/ywContractBill.js b/admin/src/api/ywContractBill.js
new file mode 100644
index 0000000..024b344
--- /dev/null
+++ b/admin/src/api/ywContractBill.js
@@ -0,0 +1,42 @@
+import request from '@/utils/request'
+
+// 鏌ヨ
+export function fetchList (data) {
+ return request.post('/visitsAdmin/cloudService/business/ywContractBill/findPageForOverdue', data, {
+ trim: true
+ })
+}
+
+// 鑾峰彇鎵归噺鍌即鏁版嵁
+export function getNoticeCustomerData (data) {
+ return request.post('/visitsAdmin/cloudService/business/ywContractBill/getNoticeCustomerData', data, {
+ trim: true
+ })
+}
+
+// 鍙戦�佸偓缂存暟鎹�
+export function sendNoticeCustomerData (data) {
+ return request.post('/visitsAdmin/cloudService/business/ywContractBill/sendNoticeCustomerData', data, {
+ trim: true
+ })
+}
+
+// 涓嬭浇鍌垂鏂囦欢
+export function downloadCallFeeDoc (data) {
+ return request.post('/visitsAdmin/cloudService/business/ywContractBill/downloadCallFeeDoc', data, {
+ download: true,
+ trim: true
+ })
+}
+
+// 鍙戦�佺煭淇′笌閭欢
+export function sendSmsEmail (data) {
+ return request.post('/visitsAdmin/cloudService/business/ywContractBill/sendSmsEmail', data, {
+ trim: true
+ })
+}
+
+// 鑾峰彇寰呭鐞嗚处鍗�
+export function getWaitDealList (contractId) {
+ return request.get(`/visitsAdmin/cloudService/business/ywContractBill/getWaitDealList?contractId=${contractId}`)
+}
diff --git a/admin/src/api/ywMaterial.js b/admin/src/api/ywMaterial.js
new file mode 100644
index 0000000..e7da119
--- /dev/null
+++ b/admin/src/api/ywMaterial.js
@@ -0,0 +1,28 @@
+import request from '@/utils/request'
+
+// 鏌ヨ
+export function fetchList (data) {
+ return request.post('/visitsAdmin/cloudService/business/ywMaterial/page', data, {
+ trim: true
+ })
+}
+
+// 鍒涘缓
+export function create (data) {
+ return request.post('/visitsAdmin/cloudService/business/ywMaterial/create', data)
+}
+
+// 鏍规嵁ID淇敼
+export function updateById (data) {
+ return request.post('/visitsAdmin/cloudService/business/ywMaterial/updateById', data)
+}
+
+// 鏍规嵁ID淇敼鐘舵��
+export function updateStatus (data) {
+ return request.post('/visitsAdmin/cloudService/business/ywMaterial/updateStatus', data)
+}
+
+// 鍒犻櫎
+export function deleteById (id) {
+ return request.get(`/visitsAdmin/cloudService/business/ywMaterial/delete/${id}`)
+}
diff --git a/admin/src/api/ywProblem.js b/admin/src/api/ywProblem.js
new file mode 100644
index 0000000..ad11b9d
--- /dev/null
+++ b/admin/src/api/ywProblem.js
@@ -0,0 +1,38 @@
+import request from '@/utils/request'
+
+// 鏌ヨ
+export function fetchList (data) {
+ return request.post('/visitsAdmin/cloudService/business/ywProblem/page', data, {
+ trim: true
+ })
+}
+
+// 鍒涘缓
+export function create (data) {
+ return request.post('/visitsAdmin/cloudService/business/ywProblem/create', data)
+}
+
+// 鏍规嵁ID淇敼
+export function editProblem (data) {
+ return request.post('/visitsAdmin/cloudService/business/ywProblem/editProblem', data)
+}
+
+// 鏍规嵁ID淇敼
+export function updateById (data) {
+ return request.post('/visitsAdmin/cloudService/business/ywProblem/updateById', data)
+}
+
+// 鏍规嵁ID鏌ヨ
+export function getById (id) {
+ return request.get(`/visitsAdmin/cloudService/business/ywProblem/${id}`)
+}
+
+// 鍒犻櫎
+export function deleteById (id) {
+ return request.get(`/visitsAdmin/cloudService/business/ywProblem/delete/${id}`)
+}
+
+// 鏍规嵁宸ュ崟鏌ヨ
+export function getByWorkorderId (workorderId) {
+ return request.get(`/visitsAdmin/cloudService/business/ywProblem/getByWorkorderId?workorderId=${workorderId}`)
+}
diff --git a/admin/src/api/ywStock.js b/admin/src/api/ywStock.js
new file mode 100644
index 0000000..7ef5388
--- /dev/null
+++ b/admin/src/api/ywStock.js
@@ -0,0 +1,8 @@
+import request from '@/utils/request'
+
+// 鏌ヨ
+export function fetchList (data) {
+ return request.post('/visitsAdmin/cloudService/business/ywStock/page', data, {
+ trim: true
+ })
+}
diff --git a/admin/src/api/ywStocktaking.js b/admin/src/api/ywStocktaking.js
new file mode 100644
index 0000000..00c5235
--- /dev/null
+++ b/admin/src/api/ywStocktaking.js
@@ -0,0 +1,46 @@
+import request from '@/utils/request'
+
+// 鏌ヨ
+export function fetchList (data) {
+ return request.post('/visitsAdmin/cloudService/business/ywStocktaking/page', data, {
+ trim: true
+ })
+}
+
+// 鍒涘缓
+export function create (data) {
+ return request.post('/visitsAdmin/cloudService/business/ywStocktaking/create', data)
+}
+
+// 鏍规嵁ID淇敼
+export function updateById (data) {
+ return request.post('/visitsAdmin/cloudService/business/ywStocktaking/updateById', data)
+}
+
+// 鍒犻櫎
+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/ywTempConfig.js b/admin/src/api/ywTempConfig.js
new file mode 100644
index 0000000..c0947e0
--- /dev/null
+++ b/admin/src/api/ywTempConfig.js
@@ -0,0 +1,15 @@
+import request from '@/utils/request'
+
+// 鑾峰彇鏁版嵁
+export function getCallTemp (data) {
+ return request.get('/visitsAdmin/cloudService/business/ywTempConfig/getCallTemp', data, {
+ trim: true
+ })
+}
+
+// 鏇存柊閰嶇疆妯℃澘淇℃伅
+export function updTempConfig (data) {
+ return request.post('/visitsAdmin/cloudService/business/ywTempConfig/updTempConfig', data, {
+ trim: true
+ })
+}
diff --git a/admin/src/api/ywWarehouse.js b/admin/src/api/ywWarehouse.js
new file mode 100644
index 0000000..a4b3168
--- /dev/null
+++ b/admin/src/api/ywWarehouse.js
@@ -0,0 +1,33 @@
+import request from '@/utils/request'
+
+// 鏌ヨ
+export function fetchList (data) {
+ return request.post('/visitsAdmin/cloudService/business/ywWarehouse/page', data, {
+ trim: true
+ })
+}
+
+// 鍒涘缓
+export function create (data) {
+ 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)
+}
+
+// 鏍规嵁ID淇敼鐘舵��
+export function updateStatusById (data) {
+ return request.post('/visitsAdmin/cloudService/business/ywWarehouse/updateStatusById', data)
+}
+
+// 鍒犻櫎
+export function deleteById (id) {
+ return request.get(`/visitsAdmin/cloudService/business/ywWarehouse/delete/${id}`)
+}
diff --git a/admin/src/api/ywWorkDesk.js b/admin/src/api/ywWorkDesk.js
new file mode 100644
index 0000000..11b291f
--- /dev/null
+++ b/admin/src/api/ywWorkDesk.js
@@ -0,0 +1,26 @@
+import request from '@/utils/request'
+
+// 鑾峰彇蹇嵎鑿滃崟妯″潡淇℃伅
+export function getYwQuickList () {
+ return request.get('/visitsAdmin/cloudService/business/ywWorkDesk/getYwQuickList')
+}
+
+// 鏇存柊蹇嵎妯″潡鏁版嵁
+export function updMyYwQuickModel (data) {
+ return request.post('/visitsAdmin/cloudService/business/ywWorkDesk/updMyYwQuickModel', data)
+}
+
+// 鑾峰彇榛樿蹇嵎鑿滃崟妯″潡淇℃伅
+export function getDefaultYwQuickList () {
+ return request.get('/visitsAdmin/cloudService/business/ywWorkDesk/getDefaultYwQuickList')
+}
+
+// 鑾峰彇鏃ョ▼鏁版嵁
+export function getMonthNotices (yearMonth) {
+ return request.get(`/visitsAdmin/cloudService/business/ywWorkDesk/getMonthNotices?yearMonth=${yearMonth}`)
+}
+
+// 鑾峰彇寰呭姙鏁版嵁
+export function workDeskData () {
+ return request.get('/visitsAdmin/cloudService/business/ywWorkDesk/workDeskData')
+}
diff --git a/admin/src/components/business/commonFunctions.vue b/admin/src/components/business/commonFunctions.vue
new file mode 100644
index 0000000..15ce0d7
--- /dev/null
+++ b/admin/src/components/business/commonFunctions.vue
@@ -0,0 +1,116 @@
+<template>
+ <GlobalWindow
+ :title="title"
+ width="60%"
+ :visible.sync="visible"
+ @confirm="confirm"
+ >
+ <div class="Analysis">
+ <span>璇锋牴鎹娇鐢ㄤ範鎯嚜瀹氫箟甯哥敤鍔熻兘锛屾敮鎸佹嫋鍔ㄦ帓</span>
+ <draggable v-model="filterList" chosenClass="chosen" forceFallback="true" group="people" animation="1000">
+ <transition-group class="dra">
+ <div class="list" v-for="(item, index) in filterList" :key="index">
+ <div class="list_checkbox">
+ <el-checkbox v-model="item.checked"> </el-checkbox>
+ </div>
+ <img :src="item.icoPath" />
+ <div class="list_title">{{ item.name }}</div>
+ </div>
+ </transition-group>
+ </draggable>
+ </div>
+ </GlobalWindow>
+</template>
+
+<script>
+ import BaseOpera from '@/components/base/BaseOpera'
+ import GlobalWindow from '@/components/common/GlobalWindow'
+ import { updMyYwQuickModel, getDefaultYwQuickList } from '@/api/ywWorkDesk'
+ import draggable from 'vuedraggable'
+ export default {
+ name: 'commonFunctions',
+ extends: BaseOpera,
+ components: { GlobalWindow, draggable },
+ data () {
+ return {
+ filterList: []
+ }
+ },
+ methods: {
+ open (title) {
+ this.title = title
+ getDefaultYwQuickList({})
+ .then(res => {
+ res.forEach(item => {
+ item.checked = false
+ })
+ this.filterList = res
+ this.visible = true
+ })
+ },
+ confirm () {
+ this.isWorking = true
+ let arr = this.filterList.filter(item => item.checked)
+ updMyYwQuickModel(arr.map(item => item.id))
+ .then(() => {
+ this.visible = false
+ this.$tip.apiSuccess('淇敼鎴愬姛')
+ this.$emit('success')
+ })
+ .finally(() => {
+ this.isWorking = false
+ })
+ }
+ }
+ }
+</script>
+
+<style lang="scss" scoped>
+ .Analysis {
+ width: 100%;
+ margin-top: 20px;
+ display: flex;
+ flex-direction: column;
+ span {
+ font-weight: 400;
+ font-size: 14px;
+ color: #333333;
+ margin-bottom: 20px;
+ }
+ .dra {
+ display: flex;
+ flex-wrap: wrap;
+ justify-content: space-between;
+ }
+ .list {
+ cursor: pointer;
+ display: flex;
+ align-items: center;
+ width: 24%;
+ height: 80px;
+ background: #FFFFFF;
+ border-radius: 8px;
+ border: 1px solid #DFE2E8;
+ margin-bottom: 10px;
+ padding: 0 20px;
+ box-sizing: border-box;
+ position: relative;
+ .list_checkbox {
+ position: absolute;
+ right: 10px;
+ top: 10px;
+ }
+ img {
+ width: 40px;
+ height: 40px;
+ user-select: none;
+ margin-right: 10px;
+ }
+ .list_title {
+ width: 130px;
+ font-size: 11px;
+ user-select: none;
+ }
+ }
+ }
+</style>
diff --git a/admin/src/components/common/GlobalWindow.vue b/admin/src/components/common/GlobalWindow.vue
index b734be2..504f62f 100644
--- a/admin/src/components/common/GlobalWindow.vue
+++ b/admin/src/components/common/GlobalWindow.vue
@@ -22,6 +22,7 @@
<slot name="footer">
<el-button v-if="showConfirm" @click="confirm" :loading="confirmWorking" type="primary">{{text}}</el-button>
<slot name="btns" />
+ <el-button type="primary" v-if="isDownload" @click="downloadFile">涓嬭浇鍌即閫氱煡鍗�</el-button>
<el-button @click="close">{{ backText }}</el-button>
</slot>
</div>
@@ -68,6 +69,11 @@
visible: {
type: Boolean,
required: true
+ },
+ // 鏄惁鏄剧ず涓嬭浇鎸夐挳
+ isDownload: {
+ type: Boolean,
+ required: false
}
},
methods: {
@@ -77,6 +83,9 @@
close () {
this.$emit('close')
this.$emit('update:visible', false)
+ },
+ downloadFile() {
+ this.$emit('downloadFile')
}
}
}
diff --git a/admin/src/views/Inspection/components/OperaYwPatrolSchemeWindow.vue b/admin/src/views/Inspection/components/OperaYwPatrolSchemeWindow.vue
index 0e58415..343b02b 100644
--- a/admin/src/views/Inspection/components/OperaYwPatrolSchemeWindow.vue
+++ b/admin/src/views/Inspection/components/OperaYwPatrolSchemeWindow.vue
@@ -14,7 +14,7 @@
</el-select>
</el-form-item>
<el-form-item label="宸℃璐熻矗浜�" prop="userIds">
- <el-select v-model="form.userIds" filterable clearable>
+ <el-select v-model="form.userIds" multiple filterable clearable>
<el-option v-for="item in staffList" :value="item.id" :label="item.realname"></el-option>
</el-select>
</el-form-item>
@@ -76,7 +76,7 @@
status: '',
sortnum: '',
lineId: '',
- userIds: '',
+ userIds: [],
dealUserId: '',
dealDate: '',
dealInfo: '',
@@ -118,6 +118,52 @@
})
},
methods: {
+ __confirmCreate () {
+ this.$refs.form.validate((valid) => {
+ if (!valid) {
+ return
+ }
+ let obj = JSON.parse(JSON.stringify(this.form))
+ obj.userIds = obj.userIds.join(',')
+ // 璋冪敤鏂板缓鎺ュ彛
+ this.isWorking = true
+ this.api.create(obj)
+ .then(() => {
+ this.visible = false
+ this.$tip.apiSuccess('鏂板缓鎴愬姛')
+ this.$emit('success')
+ })
+ .catch(e => {
+ // this.$tip.apiFailed(e)
+ })
+ .finally(() => {
+ this.isWorking = false
+ })
+ })
+ },
+ __confirmEdit () {
+ this.$refs.form.validate((valid) => {
+ if (!valid) {
+ return
+ }
+ let obj = JSON.parse(JSON.stringify(this.form))
+ obj.userIds = obj.userIds.join(',')
+ // 璋冪敤鏂板缓鎺ュ彛
+ this.isWorking = true
+ this.api.updateById(obj)
+ .then(() => {
+ this.visible = false
+ this.$tip.apiSuccess('淇敼鎴愬姛')
+ this.$emit('success')
+ })
+ .catch(e => {
+ // this.$tip.apiFailed(e)
+ })
+ .finally(() => {
+ this.isWorking = false
+ })
+ })
+ },
weekClick(i) {
this.weeks.forEach((item, index) => {
if (i == index) { item.sel = !item.sel }
@@ -239,4 +285,4 @@
border: 1px solid $primary-color;
}
}
-</style>
\ No newline at end of file
+</style>
diff --git a/admin/src/views/contract/components/contractDetail.vue b/admin/src/views/contract/components/contractDetail.vue
index 64cb0d9..5683288 100644
--- a/admin/src/views/contract/components/contractDetail.vue
+++ b/admin/src/views/contract/components/contractDetail.vue
@@ -17,8 +17,8 @@
<el-tag type="info" v-if="info.status === 4">宸查��绉�</el-tag>
</div>
<div>
- <el-button type="primary" @click="$refs.pendingBills.open('寰呭鐞嗚处鍗�')">鏌ョ湅寰呭鐞嗚处鍗�</el-button>
- <el-button @click="$refs.terminationAgreement.open('閫�绉熷崗璁�')">鏌ョ湅閫�绉熷崗璁�</el-button>
+ <el-button type="primary" @click="$refs.pendingBills.open('寰呭鐞嗚处鍗�', id)" v-if="info.status === 3">鏌ョ湅寰呭鐞嗚处鍗�</el-button>
+ <el-button @click="$refs.terminationAgreement.open('閫�绉熷崗璁�', id)" v-if="[3,4].includes(info.status)">鏌ョ湅閫�绉熷崗璁�</el-button>
<el-button plain type="danger" v-if="[0, 1, 2].includes(info.status)" @click="refund">閫�绉�</el-button>
</div>
</div>
@@ -197,6 +197,13 @@
v-loading="loading"
style="width: 100%">
<el-table-column
+ width="150"
+ label="璐﹀崟缂栧彿">
+ <template slot-scope="{row}">
+ <el-button type="text" @click="openBill(row.id)">{{row.code}}</el-button>
+ </template>
+ </el-table-column>
+ <el-table-column
label="璐圭敤绫诲瀷">
<template slot-scope="{row}">
<span v-if="row.costType === 0">绉熻祦璐�</span>
@@ -327,6 +334,8 @@
<PendingBills ref="pendingBills" />
<!-- 閫�绉熷崗璁� -->
<TerminationAgreement ref="terminationAgreement" />
+ <!-- 璐﹀崟璇︽儏 -->
+ <BullDetail ref="bullDetail" />
</GlobalWindow>
</template>
@@ -336,6 +345,7 @@
import TerminateLease from './terminateLease'
import PendingBills from './pendingBills'
import TerminationAgreement from './terminationAgreement'
+import BullDetail from '../../finance/components/bullDetail'
import { getById } from '@/api/contract'
import { fetchList } from '@/api/bill'
export default {
@@ -343,7 +353,8 @@
GlobalWindow,
TerminateLease,
PendingBills,
- TerminationAgreement
+ TerminationAgreement,
+ BullDetail
},
extends: BaseOpera,
data() {
@@ -375,6 +386,9 @@
xiazai (url) {
window.open(url)
},
+ openBill(id) {
+ this.$refs.bullDetail.open('璐﹀崟璇︽儏', id)
+ },
returnUnit (type) {
switch (type) {
case 0:
diff --git a/admin/src/views/contract/components/contractEdit.vue b/admin/src/views/contract/components/contractEdit.vue
index 84a9fe8..6867919 100644
--- a/admin/src/views/contract/components/contractEdit.vue
+++ b/admin/src/views/contract/components/contractEdit.vue
@@ -178,8 +178,15 @@
</div>
</div>
<el-button style="width: 100%;height: 48px;" type="primary" plain @click="generateZL">鐢熸垚璐﹀崟鏄庣粏</el-button>
+ <div style="width: 100%; text-align: right; margin-bottom: 10px; margin-top: 15px;" v-if="zlList.length > 0">
+ <el-button icon="el-icon-edit" v-if="!isShow" @click="changeEdit(1)">缂栬緫</el-button>
+ <el-popconfirm v-if="isShow" title="鏄惁鏀惧純鎵嬪姩淇敼鎵�濉殑鏁版嵁锛�" @confirm="isShow = false">
+ <el-button slot="reference" style="margin-right: 15px;">鍙栨秷</el-button>
+ </el-popconfirm>
+ <el-button type="primary" v-if="isShow" @click="changeNum(1)">淇濆瓨</el-button>
+ </div>
<el-table :data="zlList" class="mt20" stripe>
- <el-table-column label="璐圭敤绫诲瀷" align="center" show-overflow-tooltip>
+ <el-table-column label="璐圭敤绫诲瀷" align="center" :key="Date.now()" show-overflow-tooltip>
<template slot-scope="{row}">
<span v-if="row.costType === 0">绉熻祦璐�</span>
<span v-if="row.costType === 1">鐗╀笟璐�</span>
@@ -191,20 +198,26 @@
<span v-if="row.costType === 7">淇濊瘉閲�</span>
</template>
</el-table-column>
- <el-table-column label="鏈熸暟" align="center" show-overflow-tooltip>
+ <el-table-column label="鏈熸暟" align="center" :key="Date.now()" show-overflow-tooltip>
<template slot-scope="{row}">
<el-tag type="success" v-if="row.sortnum > 0">{{ row.sortnum }}</el-tag>
</template>
</el-table-column>
- <el-table-column label="鍖洪棿" align="center" show-overflow-tooltip>
+ <el-table-column label="鍖洪棿" align="center" :key="Date.now()" show-overflow-tooltip>
<template slot-scope="{row}">
{{ row.startDate }} ~ {{ row.endDate }}
</template>
</el-table-column>
- <el-table-column prop="planPayDate" label="浠樻鏃�" align="center" show-overflow-tooltip />
- <el-table-column label="搴旀敹" align="center" show-overflow-tooltip>
+ <el-table-column prop="planPayDate" label="浠樻鏃�" align="center" :key="Date.now()" show-overflow-tooltip />
+ <el-table-column label="搴旀敹" align="center" :key="Date.now()" show-overflow-tooltip>
<template slot-scope="{row}">
- {{ row.receivableFee }}鍏�
+ <span v-if="[2,3].includes(row.costType)">{{ row.totleFee }}鍏�</span>
+ <template v-else>
+ <span v-if="!isShow">{{ row.totleFee }}鍏�</span>
+ <div style="display: flex; align-items: center;" v-if="isShow">
+ <el-input v-model="row.totleFeeCopy" placeholder="璇疯緭鍏�"></el-input>鍏�
+ </div>
+ </template>
</template>
</el-table-column>
</el-table>
@@ -273,8 +286,15 @@
</div>
</div>
<el-button style="width: 100%;height: 48px;" type="primary" plain @click="generateWY">鐢熸垚璐﹀崟鏄庣粏</el-button>
+ <div style="width: 100%; text-align: right; margin-bottom: 10px; margin-top: 15px;">
+ <el-button icon="el-icon-edit" v-if="!isShow" @click="changeEdit(1)">缂栬緫</el-button>
+ <el-popconfirm v-if="isShow" title="鏄惁鏀惧純鎵嬪姩淇敼鎵�濉殑鏁版嵁锛�" @confirm="isShow = false">
+ <el-button slot="reference" style="margin-right: 15px;">鍙栨秷</el-button>
+ </el-popconfirm>
+ <el-button type="primary" v-if="isShow" @click="changeNum(2)">淇濆瓨</el-button>
+ </div>
<el-table :data="wyList" class="mt20" stripe>
- <el-table-column label="璐圭敤绫诲瀷" align="center" show-overflow-tooltip>
+ <el-table-column label="璐圭敤绫诲瀷" align="center" :key="Date.now()" show-overflow-tooltip>
<template slot-scope="{row}">
<span v-if="row.costType === 0">绉熻祦璐�</span>
<span v-if="row.costType === 1">鐗╀笟璐�</span>
@@ -286,20 +306,26 @@
<span v-if="row.costType === 7">淇濊瘉閲�</span>
</template>
</el-table-column>
- <el-table-column label="鏈熸暟" align="center" show-overflow-tooltip>
+ <el-table-column label="鏈熸暟" align="center" :key="Date.now()" show-overflow-tooltip>
<template slot-scope="{row}">
<el-tag type="success" v-if="row.sortnum > 0">{{ row.sortnum }}</el-tag>
</template>
</el-table-column>
- <el-table-column label="鍖洪棿" align="center" show-overflow-tooltip>
+ <el-table-column label="鍖洪棿" align="center" :key="Date.now()" show-overflow-tooltip>
<template slot-scope="{row}">
{{ row.startDate }} ~ {{ row.endDate }}
</template>
</el-table-column>
- <el-table-column prop="planPayDate" label="浠樻鏃�" align="center" show-overflow-tooltip />
- <el-table-column prop="receivableFee" label="搴旀敹" align="center" show-overflow-tooltip>
+ <el-table-column prop="planPayDate" label="浠樻鏃�" :key="Date.now()" align="center" show-overflow-tooltip />
+ <el-table-column label="搴旀敹" :key="Date.now()" align="center" show-overflow-tooltip>
<template slot-scope="{row}">
- {{ row.receivableFee }}鍏�
+ <span v-if="[2,3].includes(row.costType)">{{ row.totleFee }}鍏�</span>
+ <template v-else>
+ <span v-if="!isShow">{{ row.totleFee }}鍏�</span>
+ <div style="display: flex; align-items: center;" v-if="isShow">
+ <el-input v-model="row.totleFeeCopy" placeholder="璇疯緭鍏�"></el-input>鍏�
+ </div>
+ </template>
</template>
</el-table-column>
</el-table>
@@ -309,6 +335,7 @@
</div>
</div>
</div>
+ <div style="width: 100%; height: 50px;"></div>
<div class="window__footer">
<slot name="footer">
<el-button @click="confirm" :loading="confirmWorking" type="primary">{{ activeTabs === 0 ? '涓嬩竴姝�' :
@@ -378,7 +405,6 @@
advanceDays: ''
}
],
-
wyDeposit: '',
wyPayType: '',
@@ -450,7 +476,8 @@
],
- houseLvThree: []
+ houseLvThree: [],
+ isShow: false
}
},
methods: {
@@ -502,6 +529,39 @@
this.form.roundedUp = 0
// this.getHouseTree()
})
+ },
+ changeEdit(type) {
+ if (type === 1) {
+ this.zlList.forEach(item => {
+ item.totleFeeCopy = JSON.parse(JSON.stringify(item.totleFee))
+ })
+ this.isShow = true
+ } else if (type === 2) {
+ this.isShow = false
+ }
+ },
+ changeNum(type) {
+ // 绉熻祦璁$畻
+ if (type === 1) {
+ let num = 0
+ this.zlList.forEach(item => {
+ if (item.costType !== 2) {
+ num += Number(item.totleFeeCopy)
+ item.totleFee = JSON.parse(JSON.stringify(item.totleFeeCopy))
+ }
+ })
+ this.zlPrice = num
+ } else if (type === 2) {
+ let num = 0
+ this.wyList.forEach(item => {
+ if (item.costType !== 3) {
+ num += Number(item.totleFeeCopy)
+ item.totleFee = JSON.parse(JSON.stringify(item.totleFeeCopy))
+ }
+ })
+ this.wyPrice = num
+ }
+ this.isShow = false
},
changePayType(e) {
if (e === 0) {
@@ -653,7 +713,7 @@
submit() {
// 璋冪敤鏂板缓鎺ュ彛
this.isWorking = true
- create({ ...this.form })
+ create({ ...this.form, ywContractBillDTOList: [...this.wyList, ...this.zlList] })
.then(res => {
this.visible = false
this.$tip.apiSuccess('鍒涘缓鎴愬姛')
@@ -711,8 +771,9 @@
let zlPrice = 0
let arr = []
res.forEach(item => {
+ item.totleFeeCopy = JSON.parse(JSON.stringify(item.totleFee))
if (item.costType === 0) {
- zlPrice += item.receivableFee
+ zlPrice += item.totleFee
}
arr.push(item)
})
@@ -728,7 +789,8 @@
let arr = []
res.forEach(item => {
if (item.costType === 1) {
- zlPrice += item.receivableFee
+ zlPrice += item.totleFee
+ item.totleFeeCopy = JSON.parse(JSON.stringify(item.totleFee))
}
arr.push(item)
})
@@ -817,6 +879,7 @@
this.activeTabs = val
},
ctabsClick(val) {
+ this.isShow = false
this.cactiveTabs = val
},
handleRent() {
diff --git a/admin/src/views/contract/components/pendingBills.vue b/admin/src/views/contract/components/pendingBills.vue
index 1ecd98f..b694d96 100644
--- a/admin/src/views/contract/components/pendingBills.vue
+++ b/admin/src/views/contract/components/pendingBills.vue
@@ -10,19 +10,19 @@
<div class="zd_list">
<div class="zd_list_row">
<span>寰呮敹娆捐处鍗曟暟</span>
- <span>2</span>
+ <span>{{info.inAmount || 0}}</span>
</div>
<div class="zd_list_row">
<span>寰呮敹娆鹃噾棰�</span>
- <span>锟�247.00</span>
+ <span>锟{info.inFee || 0}}</span>
</div>
<div class="zd_list_row">
<span>寰呬粯娆捐处鍗曟暟</span>
- <span>3</span>
+ <span>{{info.payAmount || 0}}</span>
</div>
<div class="zd_list_row">
<span>寰呬粯娆鹃噾棰�</span>
- <span>锟�247.00</span>
+ <span>锟{info.payFee || 0}}</span>
</div>
</div>
<div class="zd_content">
@@ -30,7 +30,7 @@
<span>璐﹀崟</span>
</div>
<el-table
- :data="tableData"
+ :data="info.ywContractBillList"
border
style="width: 100%">
<el-table-column
@@ -38,27 +38,38 @@
label="璐﹀崟缂栧彿">
</el-table-column>
<el-table-column
- prop="name"
label="璐圭敤绫诲瀷">
+ <template slot-scope="{row}">
+ <span v-if="row.costType === 0">绉熻祦璐�</span>
+ <span v-if="row.costType === 1">鐗╀笟璐�</span>
+ <span v-if="row.costType === 2">绉熻祦鎶奸噾</span>
+ <span v-if="row.costType === 3">鐗╀笟鎶奸噾</span>
+ <span v-if="row.costType === 4">姘寸數璐�</span>
+ <span v-if="row.costType === 5">鏉傞」璐�</span>
+ <span v-if="row.costType === 6">鍏朵粬</span>
+ <span v-if="row.costType === 7">淇濊瘉閲�</span>
+ </template>
</el-table-column>
<el-table-column
- prop="address"
label="璁¤垂鍛ㄦ湡">
+ <template slot-scope="{row}">
+ {{row.startDate}}~{{row.endDate}}
+ </template>
</el-table-column>
<el-table-column
- prop="address"
+ prop="receivableFee"
label="搴旀敹浠橀噾棰�/鍘熷搴旀敹浠�">
</el-table-column>
<el-table-column
- prop="address"
+ prop="actReceivableFee"
label="瀹炴敹/浠橀噾棰�">
</el-table-column>
<el-table-column
- prop="address"
+ prop="needReceivableFee"
label="闇�鏀�/浠橀噾棰�">
</el-table-column>
<el-table-column
- prop="address"
+ prop="receivableFee"
label="搴旀敹/浠樻棩鏈�">
</el-table-column>
</el-table>
@@ -70,6 +81,7 @@
<script>
import GlobalWindow from '@/components/common/GlobalWindow'
import BaseOpera from '@/components/base/BaseOpera'
+ import { getWaitDealList } from '@/api/ywContractBill'
export default {
name: 'pendingBills',
components: {
@@ -78,11 +90,18 @@
extends: BaseOpera,
data () {
return {
- tableData: []
+ info: []
}
},
methods: {
-
+ open (title, contractId) {
+ this.title = title
+ getWaitDealList(contractId)
+ .then(res => {
+ this.info = res
+ this.visible = true
+ })
+ }
}
}
</script>
diff --git a/admin/src/views/contract/components/terminateLease.vue b/admin/src/views/contract/components/terminateLease.vue
index 3748d6f..0f0fd5d 100644
--- a/admin/src/views/contract/components/terminateLease.vue
+++ b/admin/src/views/contract/components/terminateLease.vue
@@ -86,12 +86,19 @@
<el-table-column
width="100"
label="璐圭敤绫诲瀷">
- <template slot-scope="{row}">
- <span v-if="row.costType === 0">绉熻祦璐�</span>
- <span v-if="row.costType === 1">鐗╀笟璐�</span>
- <span v-if="row.costType === 4">姘寸數璐�</span>
- <span v-if="row.costType === 5">鏉傞」璐�</span>
- <span v-if="row.costType === 6">鍏朵粬</span>
+ <template slot-scope="scope">
+ <div style="display: flex; align-items: center;">
+ <span v-if="scope.row.costType === 0">绉熻祦璐�</span>
+ <span v-if="scope.row.costType === 1">鐗╀笟璐�</span>
+ <span v-if="scope.row.costType === 4">姘寸數璐�</span>
+ <span v-if="scope.row.costType === 5">鏉傞」璐�</span>
+ <span v-if="scope.row.costType === 6">鍏朵粬</span>
+ <i class="el-icon-delete"
+ style="color: red; margin-left: 10px; font-size: 18px; cursor: pointer;"
+ @click="deleRow(scope.$index)"
+ v-if="scope.row.date && scope.row.date.length !==0">
+ </i>
+ </div>
</template>
</el-table-column>
<el-table-column
@@ -270,6 +277,10 @@
this.changeBtDate(this.form.btDate)
this.visible = true
},
+ deleRow(index) {
+ this.info.terminateList.splice(index, 1)
+ this.countData()
+ },
getDayTime () {
const today = new Date();
const year = today.getFullYear();
diff --git a/admin/src/views/contract/components/terminationAgreement.vue b/admin/src/views/contract/components/terminationAgreement.vue
index 9b02d5c..835fe12 100644
--- a/admin/src/views/contract/components/terminationAgreement.vue
+++ b/admin/src/views/contract/components/terminationAgreement.vue
@@ -8,40 +8,47 @@
@confirm="confirm">
<div class="main">
<div class="main_head">
- <span>绉熷锛氫箳涔撶悆淇变箰閮�</span>
- <span>鍚堝悓缂栧彿锛� 2024-04-001-202405-0019</span>
+ <span>绉熷锛歿{info.renterName}}</span>
+ <span>鍚堝悓缂栧彿锛� {{info.code}}</span>
+ </div>
+ <div class="title">鎴挎簮淇℃伅</div>
+ <div class="list">
+ <el-table :data="info.roomList" stripe>
+ <el-table-column prop="projectName" label="椤圭洰鍚嶇О" show-overflow-tooltip />
+ <el-table-column prop="buildingName" label="妤煎畤鍚嶇О" show-overflow-tooltip />
+ <el-table-column label="妤煎眰/鎴垮彿" show-overflow-tooltip>
+ <template slot-scope="{row}">
+ {{row.floorName}}{{row.roomNum}}
+ </template>
+ </el-table-column>
+ <el-table-column prop="area" label="闈㈢Н" show-overflow-tooltip></el-table-column>
+ </el-table>
</div>
<div class="title">閫�绉熶俊鎭�</div>
<div class="list">
<div class="item">
<div class="la">閫�绉熺被鍨�</div>
- <div class="val">{{ info.code }}</div>
+ <div class="val" v-if="info.btType === 0">鍒版湡閫�绉�</div>
+ <div class="val" v-if="info.btType === 1">鎹㈡埧閫�绉�</div>
+ <div class="val" v-if="info.btType === 2">杩濈害閫�绉�</div>
+ <div class="val" v-if="info.btType === 3">鍗忓晢閫�绉�</div>
</div>
<div class="item">
<div class="la">閫�绉熸棩鏈�</div>
- <div class="val">{{ info.userName }}</div>
+ <div class="val">{{ info.btDate }}</div>
</div>
<div class="item">
<div class="la">缁忓姙浜�</div>
- <div class="val">{{ info.creatorName }}</div>
+ <div class="val">{{ info.userName }}</div>
</div>
<div class="item">
<div class="la">鍗忚绛捐鏃ユ湡</div>
- <div class="val">{{ info.totalArea }}銕�</div>
+ <div class="val">{{ info.signDate }}銕�</div>
</div>
<div class="item">
<div class="la">閫�绉熷師鍥�</div>
- <div class="val">{{ info.companyName }}</div>
+ <div class="val">{{ info.btInfo }}</div>
</div>
- </div>
- <div class="title">鎴挎簮淇℃伅</div>
- <div class="list">
- <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>
- <el-table-column prop="area" label="闈㈢Н" show-overflow-tooltip></el-table-column>
- </el-table>
</div>
</div>
</GlobalWindow>
@@ -50,6 +57,7 @@
<script>
import GlobalWindow from '@/components/common/GlobalWindow'
import BaseOpera from '@/components/base/BaseOpera'
+ import { getById } from '@/api/contract'
export default {
name: "terminationAgreement",
components: {
@@ -58,12 +66,23 @@
extends: BaseOpera,
data() {
return {
- roomList: [],
+ id: null,
info: {}
}
},
methods: {
-
+ open (title, id) {
+ this.title = title
+ this.id = id
+ this.getData()
+ },
+ getData () {
+ getById(this.id)
+ .then(res => {
+ this.info = res
+ this.visible = true
+ })
+ },
}
}
</script>
diff --git a/admin/src/views/finance/collectionSettings.vue b/admin/src/views/finance/collectionSettings.vue
index 6e428e0..9a1ec04 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.title"></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.title"></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" :disabled="loading" :loading="loading">淇濆瓨</el-button>
</el-form-item>
</el-form>
</div>
@@ -25,16 +56,67 @@
<script>
import templateKeywords from './components/templateKeywords'
+ import { getCallTemp, updTempConfig } from '@/api/ywTempConfig'
export default {
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: []
+ },
+ loading: false
}
},
- components: { templateKeywords }
+ components: { templateKeywords },
+ created () {
+ this.getCallTempVal()
+ },
+ methods: {
+ submit() {
+ this.loading = true
+ updTempConfig({
+ emailTemp: this.form.emailTemp,
+ smsTemp: this.form.smsTemp,
+ leaseTemp: this.form.leaseTemp[0],
+ otherTemp: this.form.otherTemp[0]
+ }).then(res => {
+ this.$message.success('鏇存柊鎴愬姛锛�')
+ this.getCallTempVal()
+ }).finally(() => {
+ this.loading = false
+ })
+ },
+ 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 => {
+ this.form.smsTemp = res.smsTemp
+ this.form.emailTemp = res.emailTemp
+ this.form.leaseTemp = [{ url: res.leaseTemp.url, name: res.leaseTemp.title }]
+ this.form.otherTemp = [{ url: res.otherTemp.url, name: res.otherTemp.title }]
+ })
+ }
+ }
}
</script>
@@ -52,7 +134,7 @@
align-items: self-start;
justify-content: space-between;
.content_form {
- width: 60%;
+ width: 70%;
}
}
}
diff --git a/admin/src/views/finance/components/batchCall.vue b/admin/src/views/finance/components/batchCall.vue
new file mode 100644
index 0000000..adeab27
--- /dev/null
+++ b/admin/src/views/finance/components/batchCall.vue
@@ -0,0 +1,90 @@
+<template>
+ <GlobalWindow
+ :title="title"
+ :visible.sync="visible"
+ :isDownload="true"
+ width="100%"
+ @downloadFile="downloadFile"
+ @confirm="confirm">
+ <el-form :model="form" label-position="top" ref="paramRef">
+ <el-form-item label="閫氱煡鏂瑰紡">
+ <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="閫氱煡鎺ユ敹浜�">
+ <div style="display: flex; align-items: center; margin-bottom: 10px;" v-for="(item, index) in userList" :key="index">
+ <span style="margin-right: 15px; font-size: 15px; color: #222222;">{{item.customerName}}</span>
+ <el-select v-model="item.userId" placeholder="璇烽�夋嫨">
+ <el-option
+ v-for="(item, index) in item.memberList"
+ :key="index"
+ :label="item.name"
+ :value="item.id" />
+ </el-select>
+ </div>
+ </el-form-item>
+ </el-form>
+ </GlobalWindow>
+</template>
+
+<script>
+ import GlobalWindow from '@/components/common/GlobalWindow'
+ import BaseOpera from '@/components/base/BaseOpera'
+ import { getNoticeCustomerData, downloadCallFeeDoc, sendSmsEmail } from '@/api/ywContractBill'
+ export default {
+ name: "batchCall",
+ components: { GlobalWindow },
+ extends: BaseOpera,
+ data() {
+ return {
+ ids: null,
+ form: {
+ type: []
+ },
+ userList: []
+ }
+ },
+ methods: {
+ open (title, ids) {
+ this.title = title
+ this.ids = ids
+ this.form.type = []
+ this.userList = []
+ this.visible = true
+ this.getUser()
+ },
+ downloadFile() {
+ downloadCallFeeDoc(this.ids)
+ .then(response => {
+ this.download(response)
+ })
+ .catch(e => {
+ this.$tip.apiFailed(e)
+ })
+ },
+ getUser() {
+ getNoticeCustomerData(this.ids)
+ .then(res => {
+ this.userList = res
+ })
+ },
+ confirm() {
+ if (this.form.type.length === 0) return this.$message.warning('閫氱煡鏂瑰紡涓嶈兘涓虹┖')
+ let arr = this.userList.map(item => {
+ return {
+ billId: item.billId,
+ sendEmail: this.form.type.includes('閭欢') ? 1 : 0,
+ sendSms: this.form.type.includes('鐭俊') ? 1 : 0,
+ userId: item.userId
+ }
+ })
+ sendSmsEmail(arr).then(res => {
+ this.$message.success('鍙戦�佹垚鍔燂紒')
+ this.visible = false
+ })
+ }
+ }
+ }
+</script>
diff --git a/admin/src/views/finance/components/bullDetail.vue b/admin/src/views/finance/components/bullDetail.vue
index ac60691..976f0a0 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.id])">鍙戦�佺即璐归�氱煡</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..2660506 100644
--- a/admin/src/views/finance/components/call.vue
+++ b/admin/src/views/finance/components/call.vue
@@ -1,33 +1,28 @@
<template>
<GlobalWindow
- :title="title"
- :visible.sync="visible"
- width="100%">
- <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>
+ :title="title"
+ :visible.sync="visible"
+ :isDownload="true"
+ width="100%"
+ @downloadFile="downloadFile"
+ @confirm="confirm">
+ <el-form :model="form" label-position="top" ref="paramRef">
+ <el-form-item label="閫氱煡鏂瑰紡">
+ <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>
+ <el-form-item label="閫氱煡鎺ユ敹浜�">
+ <div style="display: flex; align-items: center; margin-bottom: 10px;" v-for="(item, index) in userList" :key="index">
+ <span style="margin-right: 15px; font-size: 15px; color: #222222;">{{item.customerName}}</span>
+ <el-select v-model="item.userId" placeholder="璇烽�夋嫨">
+ <el-option
+ v-for="(item, index) in item.memberList"
+ :key="index"
+ :label="item.name"
+ :value="item.id" />
+ </el-select>
</div>
</el-form-item>
</el-form>
@@ -37,24 +32,59 @@
<script>
import GlobalWindow from '@/components/common/GlobalWindow'
import BaseOpera from '@/components/base/BaseOpera'
+ import { getNoticeCustomerData, downloadCallFeeDoc, sendSmsEmail } from '@/api/ywContractBill'
export default {
name: "call",
components: { GlobalWindow },
extends: BaseOpera,
data() {
return {
+ ids: null,
form: {
- title: '1',
- companyId: '0'
+ type: []
},
- rules: {
- title: [{ required: true, message: '璇疯緭鍏�' }],
- companyId: [{ required: true, message: '璇烽�夋嫨' }],
- }
+ userList: []
}
},
methods: {
-
+ open (title, ids) {
+ this.title = title
+ this.ids = ids
+ this.form.type = []
+ this.userList = []
+ this.visible = true
+ this.getUser()
+ },
+ downloadFile() {
+ downloadCallFeeDoc(this.ids)
+ .then(response => {
+ this.download(response)
+ })
+ .catch(e => {
+ this.$tip.apiFailed(e)
+ })
+ },
+ getUser() {
+ getNoticeCustomerData(this.ids)
+ .then(res => {
+ this.userList = res
+ })
+ },
+ confirm() {
+ if (this.form.type.length === 0) return this.$message.warning('閫氱煡鏂瑰紡涓嶈兘涓虹┖')
+ let arr = this.userList.map(item => {
+ return {
+ billId: item.billId,
+ sendEmail: this.form.type.includes('閭欢') ? 1 : 0,
+ sendSms: this.form.type.includes('鐭俊') ? 1 : 0,
+ userId: item.userId
+ }
+ })
+ sendSmsEmail(arr).then(res => {
+ this.$message.success('鍙戦�佹垚鍔燂紒')
+ this.visible = false
+ })
+ }
}
}
</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..41c000b 100644
--- a/admin/src/views/finance/overdueBills.vue
+++ b/admin/src/views/finance/overdueBills.vue
@@ -7,10 +7,14 @@
<div class="tab" :class="{ active: billType === 1 }" @click="tabsClick(1)">閫炬湡浠樻璐﹀崟</div>
</div>
<div class="btns">
- <el-button @click="$refs.call.open('鎵归噺鍌即')">鎵归噺鍌即</el-button>
+ <el-button :disabled="ids.length === 0" @click="batchCall">鎵归噺鍌即</el-button>
</div>
</div>
- <el-table v-loading="loading" :data="list" stripe>
+ <el-table v-loading="loading" :data="list" @selection-change="handleSelectionChange" stripe>
+ <el-table-column
+ type="selection"
+ width="55">
+ </el-table-column>
<el-table-column prop="customerName" label="瀹㈡埛鍚嶇О" min-width="100" show-overflow-tooltip />
<el-table-column label="鎴块棿" min-width="170" show-overflow-tooltip>
<template slot-scope="{row}">
@@ -64,14 +68,14 @@
</el-table-column>
<el-table-column label="鐭俊鍙戦�佺姸鎬�" min-width="100" fixed="right" show-overflow-tooltip>
<template slot-scope="{row}">
- <span v-if="row.status === 0">寮�鍚�</span>
- <span v-if="row.status === 1" style="color: red;">鍏抽棴</span>
+ <span v-if="row.isSendSms === 0">鍚�</span>
+ <span v-if="row.isSendSms === 1">鏄�</span>
</template>
</el-table-column>
<el-table-column label="閭欢鍙戦�佺姸鎬�" min-width="100" fixed="right" show-overflow-tooltip>
<template slot-scope="{row}">
- <span v-if="row.status === 0">寮�鍚�</span>
- <span v-if="row.status === 1" style="color: red;">鍏抽棴</span>
+ <span v-if="row.isSendEmail === 0">鍚�</span>
+ <span v-if="row.isSendEmail === 1">鏄�</span>
</template>
</el-table-column>
<el-table-column label="鎿嶄綔" min-width="120" fixed="right">
@@ -86,7 +90,7 @@
<Edit ref="EditRef" @success="getList" />
<Detail ref="DetailRef" @success="getList" />
<BullEditFu ref="BullEditFu" @success="getList" />
- <Call ref="call" @success="getList" />
+ <BatchCall ref="batchCall" @success="getList" />
</div>
</template>
@@ -96,8 +100,8 @@
import Edit from './components/bullEdit.vue'
import BullEditFu from './components/bullEditFu.vue'
import Detail from './components/bullDetail.vue'
- import Call from './components/call.vue'
- import { fetchList } from '@/api/bill'
+ import BatchCall from './components/batchCall.vue'
+ import { fetchList } from '@/api/ywContractBill'
export default {
components: {
Pagination,
@@ -105,7 +109,7 @@
Edit,
Detail,
BullEditFu,
- Call
+ BatchCall
},
data () {
return {
@@ -115,6 +119,7 @@
page: 1,
total: 0
},
+ ids: [],
billType: 0,
filters: {
status: 0
@@ -153,6 +158,13 @@
this.getList()
},
methods: {
+ batchCall() {
+ if (!this.ids) return this.$message.warning('璇峰厛閫夋嫨璐﹀崟')
+ this.$refs.batchCall.open('鎵归噺鍌即', this.ids)
+ },
+ handleSelectionChange(e) {
+ this.ids = e.map(item => item.id)
+ },
addOpen () {
if (this.billType === 0) {
this.$refs.EditRef.open('鍒涘缓鏀舵璐﹀崟')
@@ -178,9 +190,6 @@
}).then(res => {
this.loading = false
this.list = res.records || []
- this.list.forEach(item => {
- item.statusName = item.status === 1 ? '鎹熷潖' : item.status === 2 ? '鎶ュ簾' : '姝e父'
- })
this.pagination.total = res.total || 0
}, () => {
this.loading = false
diff --git a/admin/src/views/index.vue b/admin/src/views/index.vue
index 0e87c1c..32818b0 100644
--- a/admin/src/views/index.vue
+++ b/admin/src/views/index.vue
@@ -5,24 +5,24 @@
<div class="head_item">
<div class="head_item_left">
<span>寰呭姙宸ュ崟</span>
- <span>12</span>
- <span>鏌ョ湅鏇村</span>
+ <span>{{obj.waitDealWorkOrderSize || 0}}</span>
+ <span @click="jump(1)">鏌ョ湅鏇村</span>
</div>
<img class="head_item_icon" src="@/assets/indexIcon/ic_daibangongdan@2x.png" />
</div>
<div class="head_item">
<div class="head_item_left">
<span>寰呭贰妫�</span>
- <span>12</span>
- <span>鏌ョ湅鏇村</span>
+ <span>{{obj.waitTaskSize || 0}}</span>
+ <span @click="jump(2)">鏌ョ湅鏇村</span>
</div>
<img class="head_item_icon" src="@/assets/indexIcon/ic_daixuncha@2x.png" />
</div>
<div class="head_item">
<div class="head_item_left">
<span>寰呯洏鐐�</span>
- <span>12</span>
- <span>鏌ョ湅鏇村</span>
+ <span>{{obj.stocktakingSize || 0}}</span>
+ <span @click="jump(3)">鏌ョ湅鏇村</span>
</div>
<img class="head_item_icon" src="@/assets/indexIcon/ic_daipandian@2x.png" />
</div>
@@ -30,15 +30,15 @@
<div class="main_left_menu">
<div class="main_left_menu_title">
<span>甯哥敤鍔熻兘</span>
- <div class="main_left_menu_title_edit">
+ <div class="main_left_menu_title_edit" @click="$refs.commonFunctions.open('甯哥敤鍔熻兘绠$悊')">
<img src="@/assets/indexIcon/ic_daibangongdan@2x.png" />
<span>鑷畾涔夊姛鑳�</span>
</div>
</div>
<div class="main_left_menu_list">
- <div class="list_item" v-for="(item, index) in menu" :key="index">
+ <div class="list_item" v-for="(item, index) in list" :key="index" @click="jump1(item.path)">
<div class="list_item_left">
- <img :src="item.icon" />
+ <img :src="item.icoPath" />
<span>{{item.name}}</span>
</div>
<i class="el-icon-arrow-right"></i>
@@ -49,65 +49,163 @@
<div class="main_right">
<div class="main_right_title">鏃ョ▼</div>
<div class="main_right_search">
- <el-select v-model="value" style="width: 150px; margin-right: 15px;" placeholder="璇烽�夋嫨">
+ <el-select v-model="nian" style="width: 150px; margin-right: 15px;" @change="getMonthNoticess" placeholder="璇烽�夋嫨">
<el-option
- v-for="item in options"
- :key="item.value"
- :label="item.label"
- :value="item.value">
+ v-for="item in yearList"
+ :key="item.val"
+ :label="item.name"
+ :value="item.val">
</el-option>
</el-select>
- <el-select v-model="value" style="width: 150px;" placeholder="璇烽�夋嫨">
+ <el-select v-model="yue" style="width: 150px;" @change="getMonthNoticess" placeholder="璇烽�夋嫨">
<el-option
- v-for="item in options"
- :key="item.value"
- :label="item.label"
- :value="item.value">
+ v-for="(item, index) in 12"
+ :key="index"
+ :label="item + '鏈�'"
+ :value="item > 9 ? item : `0${item}`">
</el-option>
</el-select>
</div>
-
+ <div class="main_right_date">
+ <Calendar
+ ref="Calendar"
+ v-on:choseDay="clickDay"
+ :markDateMore="markDateMore"
+ ></Calendar>
+ </div>
+ <div class="main_right_rc">
+ <div class="main_right_rc_title">褰撴棩鏃ョ▼锛坽{dataList.length}}锛�</div>
+ <div class="main_right_rc_list">
+ <div class="main_right_rc_list_row" v-for="(item, index) in dataList" :key="index">
+ <div class="top">
+ <div class="top_left">
+ <div class="top_left_dian"></div>
+ <div class="top_left_title">{{item.title}}</div>
+ </div>
+ <div class="top_date">{{item.createDate}}</div>
+ </div>
+ <div class="bottom">
+ {{item.content}}
+ </div>
+ </div>
+ </div>
+ </div>
</div>
+ <CommonFunctions ref="commonFunctions" @success="getYwQuickLists" />
</div>
</template>
<script>
+import CommonFunctions from '@/components/business/commonFunctions'
+import { getYwQuickList, getMonthNotices, workDeskData } from '@/api/ywWorkDesk'
+import Calendar from 'vue-calendar-component'
export default {
data() {
return {
- menu: [
- { name: '鎴挎�佺鐞�', icon: require('@/assets/indexIcon/ic_fangtaiguanli@2x.png') },
- { name: '宸ュ崟鍒楄〃', icon: require('@/assets/indexIcon/ic_gongdanliebiao@2x.png') },
- { name: '闂涓婃姤', icon: require('@/assets/indexIcon/ic_wentishangbao@2x.png') },
- { name: '鏂板缓宸ュ崟', icon: require('@/assets/indexIcon/ic_xinjiangongdan@2x.png') },
- { name: '璁惧绠$悊', icon: require('@/assets/indexIcon/ic_shebeiguanli@2x.png') },
- { name: '宸℃浠诲姟', icon: require('@/assets/indexIcon/ic_xunjianrenwu@2x.png') },
- { name: '鍚堝悓鍒楄〃', icon: require('@/assets/indexIcon/ic_hetongliebiao@2x.png') },
- { name: '搴撳瓨鏌ヨ', icon: require('@/assets/indexIcon/ic_kucunchaxun@2x.png') },
- { name: '璐﹀崟鍒楄〃', icon: require('@/assets/indexIcon/ic_zhangdanliebiao@2x.png') },
- { name: '鏂板鍏ュ簱鍗�', icon: require('@/assets/indexIcon/ic_xinzengruku@2x.png') },
- { name: '鏂板鍑哄簱鍗�', icon: require('@/assets/indexIcon/ic_xinzengchuku@2x.png') },
- { name: '璧勪骇娓呭崟', icon: require('@/assets/indexIcon/ic_zichan@2x.png') },
- ],
- options: [],
- value: ''
+ list: [],
+ value: new Date(),
+ yearList: [],
+ markDateMore: [],
+ nian: '',
+ yue: '',
+ obj: {},
+ dataList: []
}
},
+ components: { CommonFunctions, Calendar },
+ created () {
+ this.getWorkDeskData()
+ this.getYwQuickLists()
+ this.getYear()
+ },
methods: {
+ getYear() {
+ let currentYear = new Date().getFullYear();
+ let currentMonth = new Date().getMonth() + 1;
+ this.nian = currentYear
+ this.yue = currentMonth > 9 ? currentMonth : `0${currentMonth}`
+ for (let i = currentYear - 10; i <= currentYear; i++) {
+ this.yearList.unshift({ name: i + '骞�', val: i })
+ }
+ this.getMonthNoticess()
+ },
+ // 鑾峰彇浠e姙
+ getWorkDeskData() {
+ workDeskData({})
+ .then(res => {
+ this.obj = res
+ })
+ },
+ clickDay(e) {
+ let date = e.replace("/\\//g", "-")
+ let arr = this.markDateMore.filter(item => {
+ if (item.date === date) {
+ return item
+ }
+ })
+ if (arr.length > 0) {
+ this.dataList = arr[0].noticeList
+ } else {
+ this.dataList = []
+ }
+ },
+ // 鑾峰彇鏃ョ▼
+ getMonthNoticess() {
+ getMonthNotices(this.nian + '-' + this.yue).then(res => {
+ let arr = res.filter(item => {
+ if (item.noticeList && item.noticeList.length > 0) {
+ return item
+ }
+ })
+ this.markDateMore = arr.map(item => {
+ return { date: item.monthDate.replace("/-0/g", "-"), className: 'markRed', noticeList: item.noticeList }
+ })
+ let toDay = this.getDay()
+ this.markDateMore.forEach(item => {
+ if (item.date === toDay) {
+ this.dataList = item.noticeList
+ }
+ })
+ this.$refs.Calendar.ChoseMonth(`${this.nian}-${this.yue}`, false)
+ })
+ },
+ getYwQuickLists() {
+ getYwQuickList({})
+ .then(res => {
+ this.list = res
+ })
+ },
+ getDay() {
+ let date = new Date();
+ let year = date.getFullYear(); // 鑾峰彇骞翠唤
+ let month = String(date.getMonth() + 1).padStart(2, '0'); // 鑾峰彇鏈堜唤锛屽苟琛ラ浂
+ let day = String(date.getDate()).padStart(2, '0'); // 鑾峰彇鏃ユ湡锛屽苟琛ラ浂
+ return `${year}-${month}-${day}`;
+ },
+ jump(type) {
+ if (type === 1) {
+ this.$router.push({ path: '/workorder/workorderList' })
+ } else if (type === 2) {
+ this.$router.push({ path: '/Inspection/task' })
+ } else if (type === 3) {
+ this.$router.push({ path: '/stock/check' })
+ }
+ },
+ jump1(path) {
+ this.$router.push({ path })
+ }
}
}
</script>
-
<style lang="scss" scoped>
.main {
width: 100%;
- height: calc(100vh - 48px - 56px - 35px);
padding: 15px;
box-sizing: border-box;
background: #F4F7FC;
display: flex;
- align-items: center;
+ align-items: self-start;
justify-content: space-between;
.main_left {
flex: 1;
@@ -158,6 +256,7 @@
font-weight: 400;
font-size: 13px;
color: #999999;
+ cursor: pointer;
}
}
}
@@ -186,6 +285,7 @@
color: #222222;
}
.main_left_menu_title_edit {
+ cursor: pointer;
display: flex;
align-items: center;
img {
@@ -253,6 +353,113 @@
color: #222222;
margin-bottom: 12px;
}
+ .main_right_rc {
+ width: 100%;
+ display: flex;
+ flex-direction: column;
+ .main_right_rc_title {
+ font-weight: 500;
+ font-size: 16px;
+ color: #222222;
+ margin-bottom: 15px;
+ }
+ .main_right_rc_list {
+ width: 100%;
+ height: 300px;
+ overflow-y: scroll;
+ .main_right_rc_list_row {
+ width: 100%;
+ padding: 15px;
+ box-sizing: border-box;
+ background: #F4F7FC;
+ border-radius: 2px;
+ margin-bottom: 10px;
+ .top {
+ width: 100%;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ .top_left {
+ display: flex;
+ align-items: center;
+ .top_left_dian {
+ width: 10px;
+ height: 10px;
+ border-radius: 50%;
+ background: #FF9E00;
+ margin-right: 10px;
+ }
+ .top_left_title {
+ font-weight: 500;
+ font-size: 15px;
+ color: #222222;
+ }
+ }
+ .top_date {
+ font-weight: 400;
+ font-size: 12px;
+ color: #999999;
+ }
+ }
+ .bottom {
+ font-weight: 400;
+ font-size: 13px;
+ color: #666666;
+ margin-top: 8px;
+ }
+ }
+ }
+ }
+ .main_right_date {
+ width: 100%;
+ padding-top: 15px;
+ box-sizing: border-box;
+ ::v-deep .wh_content_item {
+ height: 50px;
+ color: #222222;
+ font-weight: 400;
+ font-size: 15px;
+ }
+ ::v-deep .wh_item_date {
+ width: 30px;
+ height: 30px;
+ font-size: 15px;
+ }
+ ::v-deep .wh_content_all {
+ background-color: #ffffff;
+ }
+ ::v-deep .wh_top_changge {
+ display: none;
+ }
+ ::v-deep .wh_container {
+ max-width: 100%;
+ }
+ ::v-deep .wh_content_item .wh_isToday {
+ background-color: #3E80EF;
+ color: #fff;
+ }
+ ::v-deep .wh_item_date:hover {
+ background-color: #3E80EF;
+ border-radius: 50%;
+ color: #ffffff;
+ }
+ ::v-deep .wh_content_item .wh_chose_day {
+ background: #3E80EF;
+ color: #fff;
+ }
+ ::v-deep .markRed {
+ position: relative;
+ }
+ ::v-deep .markRed::after {
+ content: '鈼�';
+ color: #FF9E00;
+ font-size: 11px;
+ position: absolute;
+ bottom: -30px;
+ left: 50%;
+ transform: translate(-50%, 0);
+ }
+ }
}
}
</style>
diff --git a/admin/src/views/operation/components/deviceDetail.vue b/admin/src/views/operation/components/deviceDetail.vue
index f3181aa..02633b3 100644
--- a/admin/src/views/operation/components/deviceDetail.vue
+++ b/admin/src/views/operation/components/deviceDetail.vue
@@ -1,7 +1,14 @@
<template>
- <GlobalWindow width="720px" title="璁惧璇︽儏" :visible.sync="visible" :confirm-working="isWorking" @close="close"
+ <GlobalWindow width="100%" title="璁惧璇︽儏" :withFooter="false" :visible.sync="visible" :confirm-working="isWorking" @close="close"
@confirm="confirm">
- <div class="main">
+ <div style="width: 100%; position: sticky; top: 0; left: 0; z-index: 999; background: #ffffff;">
+ <div class="tabs">
+ <div class="tab" :class="{ active: activeTabs === 0 }" @click="tabsClick(0)">璁惧淇℃伅</div>
+ <div class="tab" :class="{ active: activeTabs === 1 }" @click="tabsClick(1)">杩愮淮璁板綍</div>
+ <div class="tab" :class="{ active: activeTabs === 2 }" @click="tabsClick(2)">宸℃璁板綍</div>
+ </div>
+ </div>
+ <div class="main" v-if="activeTabs === 0">
<div class="title">
<span>鍩虹淇℃伅</span>
</div>
@@ -32,6 +39,18 @@
<div class="val">{{ info.addr }}</div>
</div>
<div class="item">
+ <div class="la">鎵�灞為」鐩�</div>
+ <div class="val">{{ info.projectName }}</div>
+ </div>
+ <div class="item">
+ <div class="la">鍏宠仈鎴挎簮</div>
+ <div class="val">{{ info.buildingName }} / {{ info.floorName }} / {{info.roomName}}</div>
+ </div>
+ <div class="item">
+ <div class="la">璐叆鏃堕棿</div>
+ <div class="val">{{ info.buyDate }}</div>
+ </div>
+ <div class="item">
<div class="la">璁惧鐘舵��</div>
<spa class="val" v-if="info.status == 0">姝e父</spa>
<spa class="val" v-if="info.status == 1">鎹熷潖</spa>
@@ -48,24 +67,189 @@
<div v-if="info.fileFullUrl" class="item" style="width: 100%;">
<div class="la">鐓х墖</div>
<div class="val">
- <img class="photo" :src="info.fileFullUrl" alt="">
+ <el-image
+ style="width: 100px; height: 100px"
+ :src="info.fileFullUrl"
+ :preview-src-list="[info.fileFullUrl]">
+ </el-image>
+ </div>
+ </div>
+ <div class="item" style="width: 100%;">
+ <div class="la">闄勪欢</div>
+ <div class="val">
+ <el-table
+ :data="info.multifileList ? info.multifileList : []"
+ border
+ style="width: 100%">
+ <el-table-column
+ prop="name"
+ label="闄勪欢鍚嶇О">
+ </el-table-column>
+ <el-table-column
+ prop="userName"
+ label="鎿嶄綔浜�">
+ </el-table-column>
+ <el-table-column
+ prop="createDate"
+ label="鎿嶄綔鏃堕棿">
+ </el-table-column>
+ </el-table>
</div>
</div>
</div>
</div>
+ <div class="title">
+ <span>渚涘簲鍟嗕俊鎭�</span>
+ </div>
+ <div class="main_content">
+ <div class="list">
+ <div class="item">
+ <div class="la">渚涘簲鍟�</div>
+ <div class="val">{{info.supplier}}</div>
+ </div>
+ <div class="item">
+ <div class="la">鑱旂郴浜�</div>
+ <div class="val">{{info.supplierLinker}}</div>
+ </div>
+ <div class="item">
+ <div class="la">鑱旂郴鏂瑰紡</div>
+ <div class="val">{{info.supplierPhone}}</div>
+ </div>
+ </div>
+ </div>
+ <div class="title">
+ <span>缁翠繚淇℃伅</span>
+ </div>
+ <div class="main_content">
+ <div class="list">
+ <div class="item">
+ <div class="la">缁翠繚璐熻矗浜�</div>
+ <div class="val">{{info.maintenanceUserName}}</div>
+ </div>
+ <div class="item">
+ <div class="la">缁翠繚鍒版湡鏃�</div>
+ <div class="val">{{info.maintenanceOverDate}}</div>
+ </div>
+ <div class="item" style="width: 100%;">
+ <div class="la">缁翠繚璇存槑</div>
+ <div class="val">{{info.maintenanceContent}}</div>
+ </div>
+ </div>
+ </div>
</div>
+ <div class="main" v-if="activeTabs === 1">
+ <el-table
+ :data="infoList"
+ border
+ style="width: 100%">
+ <el-table-column
+ prop="realName"
+ label="杩愮淮浜哄憳">
+ </el-table-column>
+ <el-table-column
+ label="璁惧鐘舵��">
+ <template slot-scope="{row}">
+ <span v-if="row.status === 0">姝e父</span>
+ <span v-if="row.status === 1">鎹熷潖</span>
+ <span v-if="row.status === 2">鎶ュ簾</span>
+ </template>
+ </el-table-column>
+ <el-table-column
+ prop="remark"
+ label="杩愮淮澶囨敞">
+ </el-table-column>
+ <el-table-column
+ prop="dealDate"
+ label="杩愮淮鏃堕棿">
+ </el-table-column>
+ <el-table-column
+ label="鎿嶄綔">
+ <template slot-scope="{row}">
+ <el-button type="text" @click="handleDetail(row)">鏌ョ湅璇︽儏</el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ <el-pagination
+ @size-change="handleSizeChange"
+ @current-change="handleCurrentChange"
+ :current-page="page"
+ :page-sizes="[10, 20, 30, 40]"
+ :page-size="pageSize"
+ layout="total, sizes, prev, pager, next, jumper"
+ :total="total">
+ </el-pagination>
+ </div>
+ <div class="main" v-if="activeTabs === 2">
+ <el-table
+ :data="infoList"
+ border
+ style="width: 100%">
+ <el-table-column
+ prop="schemeTitle"
+ label="璁″垝鍚嶇О">
+ </el-table-column>
+ <el-table-column
+ prop="taskCode"
+ label="浠诲姟缂栧彿">
+ </el-table-column>
+ <el-table-column
+ label="浠诲姟鏃堕棿">
+ <template slot-scope="{row}">
+ {{row.startDate}} ~ {{row.endDate}}
+ </template>
+ </el-table-column>
+ <el-table-column
+ prop="realname"
+ label="宸℃浜�">
+ </el-table-column>
+ <el-table-column
+ label="宸℃缁撴灉">
+ <template slot-scope="{row}">
+ <span v-if="row.dealStatus === 0">姝e父</span>
+ <span v-if="row.dealStatus === 1">寮傚父</span>
+ </template>
+ </el-table-column>
+ <el-table-column
+ label="宸℃闄勪欢">
+ <template slot-scope="{row}">
+ <el-image
+ v-if="row.multifileList && row.multifileList.length > 0"
+ style="width: 100px; height: 100px"
+ :src="row.multifileList[0].fileurlFull"
+ :preview-src-list="[row.multifileList[0].fileurlFull]">
+ </el-image>
+ </template>
+ </el-table-column>
+ <el-table-column
+ prop="content"
+ label="宸℃璇存槑">
+ </el-table-column>
+ </el-table>
+ <el-pagination
+ @size-change="handleSizeChange"
+ @current-change="handleCurrentChange"
+ :current-page="page"
+ :page-sizes="[10, 20, 30, 40]"
+ :page-size="pageSize"
+ layout="total, sizes, prev, pager, next, jumper"
+ :total="total">
+ </el-pagination>
+ </div>
+ <Detail ref="DetailRef" />
</GlobalWindow>
</template>
<script>
import GlobalWindow from '@/components/common/GlobalWindow'
import BaseOpera from '@/components/base/BaseOpera'
+import Detail from './maintainDetail'
import { detailById } from '@/api/Inspection/device.js'
-import { getUserList } from '@/api/system/user'
-import { Message, Loading } from 'element-ui'
+import { fetchList } from '@/api/Inspection/deviceRecord.js'
+import { getDetail } from '@/api/Inspection/ywPatrolTask.js'
export default {
components: {
- GlobalWindow
+ GlobalWindow,
+ Detail
},
extends: BaseOpera,
data() {
@@ -73,19 +257,83 @@
id: '',
visible: false,
info: {},
-
+ activeTabs: 0,
+ fileList: [],
+
+ infoList: [],
+ total: 0,
+ pageSize: 10,
+ page: 1
}
},
methods: {
+ handleSizeChange(e) {
+ this.pageSize = e
+ if (this.activeTabs === 1) {
+ this.getyunwei()
+ } else if (this.activeTabs === 2) {
+ this.getXunJian()
+ }
+ },
+ handleCurrentChange(e) {
+ this.page = e
+ if (this.activeTabs === 1) {
+ this.getyunwei()
+ } else if (this.activeTabs === 2) {
+ this.getXunJian()
+ }
+ },
getDetail() {
+ this.this.activeTabs = 0
const { id } = this
detailById(id).then(res => {
this.info = res
})
},
+ handleDetail(row) {
+ this.$refs.DetailRef.visible = true
+ this.$refs.DetailRef.getDetail(row.id)
+ },
close() {
this.visible = false
this.$emit('close')
+ },
+ tabsClick(val) {
+ this.activeTabs = val
+ this.pageSize = 10
+ this.page = 1
+ this.infoList = []
+ if (val === 1) {
+ this.getyunwei()
+ } else if (val === 2) {
+ this.getXunJian()
+ }
+ },
+ // 鑾峰彇璁惧杩愮淮璁板綍
+ getyunwei() {
+ fetchList({
+ capacity: this.pageSize,
+ page: this.page,
+ model: {
+ deviceId: this.id
+ }
+ }).then(res => {
+ this.infoList = res.records
+ this.total = res.total
+ })
+ },
+ // 宸℃璁板綍
+ getXunJian() {
+ getDetail({
+ capacity: this.pageSize,
+ page: this.page,
+ model: {
+ deviceId: this.id
+ }
+ }).then(res => {
+ this.infoList = res.records
+ this.total = res.total
+ })
}
}
}
@@ -93,7 +341,24 @@
<style lang="scss" scoped>
@import '@/assets/style/variables.scss';
-
+.tabs {
+ border-bottom: 1px solid #DFE2E8;
+ display: flex;
+ .tab {
+ height: 58px;
+ line-height: 58px;
+ font-size: 16px;
+ color: #666666;
+ margin-right: 30px;
+ cursor: pointer;
+ }
+
+ .active {
+ font-weight: 500;
+ color: $primary-color;
+ border-bottom: 2px solid $primary-color;
+ }
+}
.main {
padding-top: 20px;
diff --git a/admin/src/views/operation/components/deviceEdit.vue b/admin/src/views/operation/components/deviceEdit.vue
index 4c5c8f7..1b125ed 100644
--- a/admin/src/views/operation/components/deviceEdit.vue
+++ b/admin/src/views/operation/components/deviceEdit.vue
@@ -1,52 +1,170 @@
<template>
<GlobalWindow :title="param.id ? '缂栬緫璁惧' : '鏂板缓璁惧'" :confirmWorking="subLoading" :visible.sync="isShowModal"
- width="600px" @close="close" @confirm="handleSub">
+ width="100%" @close="close" @confirm="handleSub">
<el-form :model="param" ref="paramRef" :rules="rules">
- <el-form-item label="璁惧缂栫爜" prop="code">
- <el-input v-model="param.code" placeholder="璇疯緭鍏�" v-trim />
- </el-form-item>
- <el-form-item label="璁惧鍚嶇О" prop="name">
- <el-input v-model="param.name" placeholder="璇疯緭鍏�" v-trim />
- </el-form-item>
- <el-form-item label="璁惧鍨嬪彿" prop="">
- <el-input v-model="param.modelNo" placeholder="璇疯緭鍏�" v-trim />
- </el-form-item>
- <el-form-item label="璁惧鍒嗙被" prop="cateId">
- <el-cascader v-model="param.cateIds" @change="changeSel" placeholder="璇烽�夋嫨璁惧鍒嗙被" clearable :options="cateList"
- :props="{
- label: 'name',
- value: 'id',
- children: 'childCategoryList'
- }"></el-cascader>
- </el-form-item>
- <el-form-item label="璁惧绠$悊鍛�" prop="">
- <el-select v-model="param.userId" clearable filterable>
- <el-option v-for="item in staffList" :label="item.realname" :value="item.id"></el-option>
- </el-select>
- </el-form-item>
- <el-form-item label="鎵�鍦ㄤ綅缃�" prop="">
- <el-input v-model="param.addr" placeholder="璇疯緭鍏�" v-trim />
-
- </el-form-item>
- <el-form-item label="渚涘簲鍟�" prop="">
- <el-input v-model="param.supplier" placeholder="璇疯緭鍏�" v-trim />
- </el-form-item>
- <el-form-item label="杩愮淮鍐呭" prop="">
- <el-input type="textarea" :rows="4" v-model="param.content" placeholder="璇疯緭鍏�" />
- </el-form-item>
- <el-form-item label="璁惧鐘舵��" prop="">
- <el-select v-model="param.status" filterable>
- <el-option :value="0" label="姝e父"></el-option>
- <el-option :value="1" label="鎹熷潖"></el-option>
- <el-option :value="2" label="鎶ュ簾"></el-option>
- </el-select>
- </el-form-item>
- <el-form-item label="鐓х墖" prop="">
- <UploadAvatarImage :file="{ 'imgurlfull': param.fileFullUrl, 'imgurl': param.fileUrl }"
- :uploadData="{ folder: 'ywDevice/' }" @uploadSuccess="uploadAvatarSuccess" @uploadEnd="isUploading = false"
- @uploadBegin="isUploading = true" />
- </el-form-item>
+ <div style="width: 100%; display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; padding-top: 20px; box-sizing: border-box;">
+ <div class="title">鍩虹淇℃伅</div>
+ <div style="width: 31%;">
+ <el-form-item label="璁惧缂栫爜" prop="code">
+ <el-input v-model="param.code" placeholder="璇疯緭鍏�" v-trim />
+ </el-form-item>
+ </div>
+ <div style="width: 31%;">
+ <el-form-item label="璁惧鍚嶇О" prop="name">
+ <el-input v-model="param.name" placeholder="璇疯緭鍏�" v-trim />
+ </el-form-item>
+ </div>
+ <div style="width: 31%;">
+ <el-form-item label="璁惧鍨嬪彿" prop="modelNo">
+ <el-input v-model="param.modelNo" placeholder="璇疯緭鍏�" v-trim />
+ </el-form-item>
+ </div>
+ <div style="width: 31%;">
+ <el-form-item label="璁惧鍒嗙被" prop="cateIds">
+ <el-cascader v-model="param.cateIds" @change="changeSel" placeholder="璇烽�夋嫨璁惧鍒嗙被" clearable :options="cateList"
+ :props="{
+ label: 'name',
+ value: 'id',
+ children: 'childCategoryList'
+ }"></el-cascader>
+ </el-form-item>
+ </div>
+ <div style="width: 31%;">
+ <el-form-item label="璁惧绠$悊鍛�" prop="userId">
+ <el-select v-model="param.userId" clearable filterable>
+ <el-option v-for="item in staffList" :label="item.realname" :value="item.id"></el-option>
+ </el-select>
+ </el-form-item>
+ </div>
+ <div style="width: 31%;">
+ <el-form-item label="鎵�鍦ㄤ綅缃�" prop="addr">
+ <el-input v-model="param.addr" placeholder="璇疯緭鍏�" v-trim />
+ </el-form-item>
+ </div>
+ <div style="width: 31%;">
+ <el-form-item label="鎵�灞為」鐩�" prop="projectId">
+ <el-select v-model="param.projectId" @change="changeProject" filterable>
+ <el-option v-for="item in projectList" :label="item.name" :value="item.id"></el-option>
+ </el-select>
+ </el-form-item>
+ </div>
+ <div style="width: 31%;">
+ <el-form-item label="鍏宠仈鎴挎簮" prop="rooms">
+ <el-cascader v-model="param.rooms" :disabled="!param.projectId" ref="cascader" @change="getHouseVal" placeholder="璇烽�夋嫨鍏宠仈鎴挎簮" :options="houseList"
+ :props="{
+ label: 'name',
+ value: 'id',
+ children: 'projectDataVOList'
+ }"></el-cascader>
+ </el-form-item>
+ </div>
+ <div style="width: 31%;">
+ <el-form-item label="璐叆鏃堕棿" prop="buyDate">
+ <el-date-picker
+ v-model="param.buyDate"
+ type="date"
+ value-format="yyyy-MM-dd"
+ placeholder="閫夋嫨鏃ユ湡">
+ </el-date-picker>
+ </el-form-item>
+ </div>
+ <div style="width: 31%;">
+ <el-form-item label="璁惧鐘舵��" prop="status">
+ <el-select v-model="param.status" filterable>
+ <el-option :value="0" label="姝e父"></el-option>
+ <el-option :value="1" label="鎹熷潖"></el-option>
+ <el-option :value="2" label="鎶ュ簾"></el-option>
+ </el-select>
+ </el-form-item>
+ </div>
+ <div style="width: 100%;">
+ <el-form-item label="杩愮淮鍐呭" prop="content">
+ <el-input type="textarea" :rows="4" v-model="param.content" placeholder="璇疯緭鍏�" />
+ </el-form-item>
+ </div>
+ <div style="width: 100%;">
+ <el-form-item label="鐓х墖" prop="">
+ <UploadAvatarImage :file="{ 'imgurlfull': param.fileFullUrl, 'imgurl': param.fileUrl }"
+ :uploadData="{ folder: 'ywDevice/' }" @uploadSuccess="uploadAvatarSuccess" @uploadEnd="isUploading = false"
+ @uploadBegin="isUploading = true" />
+ <div style="width: 100%; height: 40px;"></div>
+ </el-form-item>
+ </div>
+ <div style="width: 100%;">
+ <el-form-item label="闄勪欢" prop="multifileList">
+ <div style="display: flex; flex-direction: column; align-items: flex-start;">
+ <el-button type="text" @click="$refs.uploadFile.click()">+娣诲姞闄勪欢</el-button>
+ <el-table
+ :data="param.multifileList"
+ border
+ style="width: 100%">
+ <el-table-column
+ prop="name"
+ label="闄勪欢鍚嶇О">
+ </el-table-column>
+ <el-table-column
+ prop="createUserName"
+ label="鎿嶄綔浜�">
+ </el-table-column>
+ <el-table-column
+ prop="createTime"
+ label="鎿嶄綔鏃堕棿">
+ </el-table-column>
+ <el-table-column
+ label="鎿嶄綔">
+ <template slot-scope="scope">
+ <el-button type="text" @click="deleFile(scope.$index)">鍒犻櫎</el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ </div>
+ </el-form-item>
+ </div>
+
+ <div class="title">渚涘簲鍟嗕俊鎭�</div>
+ <div style="width: 31%;">
+ <el-form-item label="渚涘簲鍟�" prop="supplier">
+ <el-input v-model="param.supplier" placeholder="璇疯緭鍏�" v-trim />
+ </el-form-item>
+ </div>
+ <div style="width: 31%;">
+ <el-form-item label="鑱旂郴浜�" prop="supplierLinker">
+ <el-input v-model="param.supplierLinker" placeholder="璇疯緭鍏�" v-trim />
+ </el-form-item>
+ </div>
+ <div style="width: 31%;">
+ <el-form-item label="鑱旂郴鏂瑰紡" prop="supplierPhone">
+ <el-input v-model="param.supplierPhone" placeholder="璇疯緭鍏�" v-trim />
+ </el-form-item>
+ </div>
+
+ <div class="title">缁翠繚淇℃伅</div>
+ <div style="width: 31%;">
+ <el-form-item label="缁翠繚璐熻矗浜�" prop="maintenanceUserId">
+ <el-select v-model="param.maintenanceUserId" clearable filterable>
+ <el-option v-for="item in staffList" :label="item.realname" :value="item.id"></el-option>
+ </el-select>
+ </el-form-item>
+ </div>
+ <div style="width: 31%;">
+ <el-form-item label="缁翠繚鍒版湡鏃�" prop="maintenanceOverDate">
+ <el-date-picker
+ v-model="param.maintenanceOverDate"
+ type="date"
+ value-format="yyyy-MM-dd"
+ placeholder="閫夋嫨鏃ユ湡">
+ </el-date-picker>
+ </el-form-item>
+ </div>
+ <div style="width: 31%;"></div>
+ <div style="width: 100%;">
+ <el-form-item label="缁翠繚璇存槑" prop="maintenanceContent">
+ <el-input v-model="param.maintenanceContent" type="textarea" placeholder="璇疯緭鍏�" v-trim />
+ </el-form-item>
+ </div>
+ </div>
</el-form>
+ <input type="file" ref="uploadFile" style="position: fixed; top: -20px; left: 0;" @change="getFile" />
</GlobalWindow>
</template>
@@ -56,7 +174,10 @@
import { fetchList } from '@/api/business/category'
import { create, updateById, detailById } from '@/api/Inspection/device'
import { getUserList } from '@/api/system/user'
-import { Message } from 'element-ui'
+import { uploadBatch } from '@/api/system/common'
+import { getProjectList, tree } from '@/api/project/ywProject'
+import { Loading, Message } from 'element-ui'
+import { mapState } from 'vuex'
export default {
components: { GlobalWindow, UploadAvatarImage },
data() {
@@ -64,22 +185,126 @@
isShowModal: false,
subLoading: false,
param: {
- status: 0
+ code: '',
+ name: '',
+ modelNo: '',
+ cateIds: '',
+ userId: '',
+ addr: '',
+ projectId: '',
+ rooms: [],
+ buildingId: '',
+ floorId: '',
+ roomId: '',
+
+ supplier: [],
+ buyDate: '',
+ content: '',
+ supplierLinker: '',
+ supplierPhone: '',
+ maintenanceUserId: '',
+ maintenanceOverDate: '',
+ maintenanceContent: '',
+ status: 0,
+ multifileList: []
},
- cateList: [],
rules: {
- name: [{ required: true, message: '璇疯緭鍏�' }],
- code: [{ required: true, message: '璇疯緭鍏�' }],
- cateId: [{ required: true, message: '璇烽�夋嫨' }],
+ name: [{ required: true, message: '璇疯緭鍏�', trigger: 'blur' }],
+ code: [{ required: true, message: '璇疯緭鍏�', trigger: 'blur' }],
+ cateId: [{ required: true, message: '璇烽�夋嫨', trigger: 'blur' }],
+ projectId: [{ required: true, message: '璇烽�夋嫨', trigger: 'blur' }],
+ rooms: [{ required: true, message: '璇烽�夋嫨', trigger: 'blur' }]
},
- staffList: []
-
+ loadings: false,
+ cateList: [],
+ houseList: [],
+ staffList: [],
+ projectList: []
}
+ },
+ computed: {
+ ...mapState(['userInfo'])
},
created() {
this.initData()
+ this.getProjectLists()
+ console.log(this.userInfo)
},
methods: {
+ getHouseVal(e) {
+ this.param.buildingId = e[1]
+ this.param.floorId = e[2]
+ this.param.roomId = e[3]
+ },
+ changeProject(e) {
+ this.getHouseTree()
+ },
+ getHouseTree() {
+ tree({
+ projectId: this.param.projectId
+ }).then(res => {
+ this.addParamToArray(res)
+ this.houseList = res
+ })
+ },
+ addParamToArray(arr) {
+ for (let i = 0; i < arr.length; i++) {
+ const currentItem = arr[i].projectDataVOList
+ if (currentItem && currentItem.length >= 0) {
+ currentItem.forEach(item => {
+ if (item.lv === 3) {
+ delete item.projectDataVOList
+ }
+ })
+ }
+ if (currentItem && currentItem.length > 0) {
+ this.addParamToArray(currentItem)
+ }
+ }
+ },
+ deleFile(index) {
+ this.param.multifileList.splice(index, 1)
+ },
+ // 鑾峰彇椤圭洰
+ getProjectLists() {
+ getProjectList({})
+ .then(res => {
+ this.projectList = res
+ })
+ },
+ // 涓婁紶闄勪欢
+ getFile(e) {
+ this.loadings = Loading.service({
+ lock: true,
+ text: 'Loading',
+ spinner: 'el-icon-loading',
+ background: 'rgba(0, 0, 0, 0.7)'
+ })
+ let formDate = new FormData()
+ formDate.append('folder', 'YW_DEVICE')
+ formDate.append('file', e.target.files[0])
+ uploadBatch(formDate)
+ .then(res => {
+ this.param.multifileList.push({ ...res[0], fileurl: res[0].imgaddr, name: res[0].originname, createUserName: this.userInfo.realname, createTime: this.getDate() })
+ })
+ .finally(() => {
+ e.target.files = null
+ this.loadings.close()
+ })
+ },
+ getDate() {
+ const currentDate = new Date();
+
+ const year = currentDate.getFullYear(); // 鑾峰彇褰撳墠骞翠唤
+ const month = currentDate.getMonth() + 1; // 鑾峰彇褰撳墠鏈堜唤 (0-11锛屾墍浠ラ渶瑕� +1)
+ const day = currentDate.getDate(); // 鑾峰彇褰撳墠鏃ユ湡
+ const hours = currentDate.getHours(); // 鑾峰彇褰撳墠灏忔椂
+ const minutes = currentDate.getMinutes(); // 鑾峰彇褰撳墠鍒嗛挓
+ const seconds = currentDate.getSeconds(); // 鑾峰彇褰撳墠绉掗挓
+
+ return `${year}-${month < 10 ? '0' + month : month}-${day < 10 ? '0' + day : day} `
+ + `${hours < 10 ? '0' + hours : hours}:${minutes < 10 ? '0' + minutes : minutes}:${seconds < 10 ? '0' + seconds : seconds}`;
+ },
handleSub() {
const { param, subLoading } = this
this.$refs['paramRef'].validate((valid) => {
@@ -100,6 +325,15 @@
getDetail(id) {
detailById(id).then(res => {
this.param = res
+ this.param.rooms = [res.projectId, res.buildingId, res.floorId, res.roomId]
+ this.param.multifileList = res.multifileList.map(item => {
+ return {
+ ...item,
+ createUserName: item.userName,
+ createTime: item.createDate
+ }
+ })
+ this.getHouseTree()
const cateId = this.param.cateId || ''
setTimeout(() => {
if (cateId) {
@@ -108,7 +342,6 @@
item.childCategoryList.forEach(item2 => {
if (item2.id == cateId) {
this.$set(this.param, 'cateIds', [item.id, item2.id])
- console.log('cateId', this.form)
}
})
}
@@ -149,4 +382,17 @@
}
}
}
-</script>
\ No newline at end of file
+</script>
+
+<style lang="scss" scoped>
+ @import '@/assets/style/variables.scss';
+ .title {
+ width: 100%;
+ font-weight: 500;
+ font-size: 18px;
+ color: $primary-color;
+ margin-bottom: 10px;
+ display: flex;
+ align-items: center;
+ }
+</style>
diff --git a/admin/src/views/operation/device.vue b/admin/src/views/operation/device.vue
index 770219c..43a7339 100644
--- a/admin/src/views/operation/device.vue
+++ b/admin/src/views/operation/device.vue
@@ -120,8 +120,6 @@
this.$nextTick(() => {
this.$refs.EditRef.isShowModal = true
if (row && row.id) {
- console.log('---')
-
this.$refs.EditRef.getDetail(row.id)
}
})
diff --git a/admin/src/views/project/components/houseDetails.vue b/admin/src/views/project/components/houseDetails.vue
index 5e61c5c..394d64a 100644
--- a/admin/src/views/project/components/houseDetails.vue
+++ b/admin/src/views/project/components/houseDetails.vue
@@ -1,11 +1,16 @@
<template>
<GlobalWindow
- title="妤煎畤璇︽儏"
+ :title="title"
:showConfirm="false"
:visible.sync="visible"
- width="800px">
+ width="100%">
<div class="right">
- <div class="right_head">椤圭洰鍚嶇О</div>
+ <div class="right_head">
+ <span>{{info.roomNum}}</span>
+ <el-tag type="success" v-if="info.leaseStatus === 0">寰呯璧�</el-tag>
+ <el-tag type="success" v-if="info.leaseStatus === 1">宸茬璧�</el-tag>
+ <el-tag type="success" v-if="info.leaseStatus === 2">鏈紑鍚璧�</el-tag>
+ </div>
<div class="right_cate">
<el-tabs v-model="activeName" @tab-click="handleClick">
<el-tab-pane label="鎴挎簮淇℃伅" name="houseinfo">
@@ -17,39 +22,40 @@
<div class="xm_info">
<div class="xm_info_row" style="width: 25%;">
<span>鎵�灞為」鐩�</span>
- <span>XXXXXXXXXX</span>
+ <span>{{info.projectName}}</span>
</div>
<div class="xm_info_row" style="width: 25%;">
<span>妤煎畤</span>
- <span>缁煎悎妤�</span>
+ <span>{{info.buildingName}}</span>
</div>
<div class="xm_info_row" style="width: 25%;">
<span>妤煎眰</span>
- <span>1</span>
+ <span>{{info.floorName}}</span>
</div>
<div class="xm_info_row" style="width: 25%;">
<span>鎴垮彿</span>
- <span>101娲诲姩瀹�</span>
+ <span>{{info.roomNum}}</span>
</div>
<div class="xm_info_row" style="width: 25%; margin-top: 15px;">
<span>鎴块棿缂栧彿</span>
- <span>101</span>
+ <span>{{info.code}}</span>
</div>
<div class="xm_info_row" style="width: 25%; margin-top: 15px;">
<span>鏄惁鎷涘晢</span>
- <span>鍚�</span>
+ <span v-if="info.isInvestment === 0">鍚�</span>
+ <span v-if="info.isInvestment === 1">鏄�</span>
</div>
<div class="xm_info_row" style="width: 25%; margin-top: 15px;">
<span>寤虹瓚闈㈢Н</span>
- <span>50銕�</span>
+ <span>{{info.area}}銕�</span>
</div>
<div class="xm_info_row" style="width: 25%; margin-top: 15px;">
<span>璁$闈㈢Н</span>
- <span>50銕�</span>
+ <span>{{info.rentArea}}銕�</span>
</div>
<div class="xm_info_row" style="width: 25%; margin-top: 15px;">
<span>璁¤垂闈㈢Н</span>
- <span>45銕�</span>
+ <span>{{info.feeArea}}銕�</span>
</div>
</div>
</el-card>
@@ -62,37 +68,51 @@
<span>褰撳墠鍦ㄧ鍚堝悓</span>
</div>
<div class="xm_table">
- <el-input v-model="input" style="width: 300px; margin-bottom: 15px;" placeholder="璇疯緭鍏ュ悎鍚岀紪鍙�"></el-input>
+ <div style="width: 100%; display: flex; align-items: center; margin-bottom: 15px;">
+ <el-input v-model="form.code" style="width: 300px;" placeholder="璇疯緭鍏ュ悎鍚岀紪鍙�"></el-input>
+ <el-button type="primary" style="margin-left: 15px;" @click="getTenantContract()">鎼滅储</el-button>
+ </div>
<el-table
:data="tableData"
border
+ v-loading="loading"
style="width: 100%">
<el-table-column
- prop="date"
label="鍚堝悓缂栧彿">
+ <template slot-scope="{row}">
+ <el-button type="text" @click="$refs.ContractDetailRef.open('鍚堝悓璇︽儏', row.id)" v-if="row.status === 1">{{row.code}}</el-button>
+ <el-button type="text" v-else>{{row.code}}</el-button>
+ </template>
</el-table-column>
<el-table-column
- prop="name"
+ prop="renterName"
label="瀹㈡埛鍚嶇О">
</el-table-column>
<el-table-column
- prop="address"
+ prop="startDate"
label="寮�濮嬫棩鏈�">
</el-table-column>
<el-table-column
- prop="address"
+ prop="endDate"
label="缁撴潫鏃ユ湡">
</el-table-column>
<el-table-column
- prop="address"
label="绉熻祦鍗曚环">
+ <template slot-scope="{row}">
+ <div style="display: flex; align-items: center;">
+ <span>{{row.zlFirstPrice || row.wyFirstPrice}}</span>
+ <span>{{row.zlFirstCircleStr || row.wyFirstCircleStr}}</span>
+ </div>
+ </template>
</el-table-column>
<el-table-column
- prop="address"
label="绉熻祦闈㈢Н锛堛帯锛�">
+ <template slot-scope="{row}">
+ {{row.totalArea}}銕�
+ </template>
</el-table-column>
<el-table-column
- prop="address"
+ prop="signDate"
label="绛捐鏃�">
</el-table-column>
<el-table-column
@@ -100,8 +120,14 @@
label="鍚堝悓鏉ユ簮">
</el-table-column>
<el-table-column
- prop="address"
label="鍚堝悓鐘舵��">
+ <template slot-scope="{row}">
+ <span class="primaryColor" v-if="row.status === 0">寰呮墽琛�</span>
+ <span class="green" v-if="row.status === 1">姝e父鎵ц涓�</span>
+ <span class="gary" v-if="row.status === 2">宸插埌鏈�</span>
+ <span class="gary" v-if="row.status === 3">閫�绉熺粨绠椾腑</span>
+ <span class="gary" v-if="row.status === 4">宸查��绉�</span>
+ </template>
</el-table-column>
</el-table>
<div class="xm_table_f">
@@ -125,84 +151,93 @@
<div class="xm_one1">
<div class="xm_one_row">
<span>寰呮寚娲炬暟閲�</span>
- <span>15</span>
+ <span>{{numObj.waitAssignAmount || 0}}</span>
</div>
<div class="xm_one_row">
<span>寰呭鐞嗘暟閲�</span>
- <span>15</span>
+ <span>{{numObj.waitDealAmount || 0}}</span>
</div>
<div class="xm_one_row">
<span>鏈湀宸ュ崟鏁�</span>
- <span>15</span>
+ <span>{{numObj.monthAmount || 0}}</span>
</div>
<div class="xm_one_row">
<span>绱宸ュ崟鏁�</span>
- <span>15</span>
+ <span>{{numObj.amount || 0}}</span>
</div>
</div>
</el-card>
<el-card style="margin-top: 20px;">
<div class="xm_table">
<div class="xm_table_search">
- <el-select v-model="value" style="width: 300px; margin-right: 15px;" placeholder="浣嶇疆绫诲瀷">
- <el-option
- v-for="item in options"
- :key="item.value"
- :label="item.label"
- :value="item.value">
- </el-option>
- </el-select>
- <el-select v-model="value" style="width: 300px;" placeholder="宸ュ崟鍒嗙被">
- <el-option
- v-for="item in options"
- :key="item.value"
- :label="item.label"
- :value="item.value">
- </el-option>
- </el-select>
+ <div>
+ <el-cascader style="width: 150px; margin-right: 15px;" v-model="form.areaIds" @change="changeSel" placeholder="璇烽�夋嫨宸ュ崟鍒嗙被" clearable
+ :options="cateList" :props="{
+ label: 'name',
+ value: 'id',
+ children: 'childCategoryList'
+ }" />
+ <el-select v-model="form.status" style="width: 150px; margin-right: 15px;" placeholder="宸ュ崟鐘舵��">
+ <el-option label="鍚敤" :value="0"></el-option>
+ <el-option label="绂佺敤" :value="1"></el-option>
+ </el-select>
+ <el-button type="primary" @click="getFetchList">鏌ヨ</el-button>
+ <el-button @click="clear">娓呯┖</el-button>
+ </div>
+ <el-button type="primary" @click="$refs.operaYwWorkorderWindow.open('鏂板缓宸ュ崟')">鏂板宸ュ崟</el-button>
</div>
<el-table
- :data="tableData"
- border
- style="width: 100%">
+ :data="tableData"
+ border
+ v-loading="loading"
+ style="width: 100%">
<el-table-column
- prop="date"
- label="宸ュ崟鍒嗙被">
+ prop="categoryName"
+ label="宸ュ崟鍒嗙被">
</el-table-column>
<el-table-column
- prop="name"
- label="鎶ヤ慨鍖哄煙">
+ label="鎶ヤ慨鍖哄煙">
+ <template v-slot="scope">
+ <span>{{ scope.row.buildingName }} / {{ scope.row.areaType == 0 ? scope.row.roomNum : scope.row.floorName
+ }}</span>
+ </template>
</el-table-column>
<el-table-column
- prop="address"
- label="涓婃姤浜�">
+ prop="creatorName"
+ label="涓婃姤浜�">
</el-table-column>
<el-table-column
- prop="address"
- label="涓婃姤鏃堕棿">
+ prop="createDate"
+ label="涓婃姤鏃堕棿">
</el-table-column>
<el-table-column
- prop="address"
- label="澶勭悊浜�">
+ prop="dealUserName"
+ label="澶勭悊浜�">
</el-table-column>
<el-table-column
- prop="address"
- label="宸ュ崟鐘舵��">
+ label="宸ュ崟鐘舵��">
+ <template slot-scope="{row}">
+ <span v-if="row.dealStatus === 0">寰呮寚娲�</span>
+ <span v-if="row.dealStatus === 1">宸叉寚娲�</span>
+ <span v-if="row.dealStatus === 2">宸插鐞�</span>
+ </template>
</el-table-column>
<el-table-column
- prop="address"
- label="鎿嶄綔">
+ label="鎿嶄綔">
+ <template slot-scope="{row}">
+ <el-button type="text" @click="handleDetail(row)">鏌ョ湅璇︽儏</el-button>
+ </template>
</el-table-column>
</el-table>
<div class="xm_table_f">
<el-pagination
- @size-change="handleSizeChange"
- @current-change="handleCurrentChange"
- :current-page="page"
- :page-sizes="[10, 20, 30, 40]"
- :page-size="pageTotal"
- layout="total, sizes, prev, pager, next, jumper"
- :total="total">
+ @size-change="handleSizeChange"
+ @current-change="handleCurrentChange"
+ :current-page="page"
+ :page-sizes="[10, 20, 30, 40]"
+ :page-size="pageTotal"
+ layout="total, sizes, prev, pager, next, jumper"
+ :total="total">
</el-pagination>
</div>
</div>
@@ -223,62 +258,64 @@
<div class="xm_table">
<div class="xm_table_search">
<div class="xm_table_search_left">
- <el-input v-model="input" placeholder="璇疯緭鍏ヨ澶囧悕绉�/缂栫爜" style="width: 200px; margin-right: 15px;"></el-input>
- <el-select v-model="value" style="width: 200px; margin-right: 15px;" placeholder="璁惧鐘舵��">
- <el-option
- v-for="item in options"
- :key="item.value"
- :label="item.label"
- :value="item.value">
- </el-option>
+ <el-input v-model="form.name" placeholder="璇疯緭鍏ヨ澶囧悕绉�/缂栫爜" style="width: 200px; margin-right: 15px;"></el-input>
+ <el-select v-model="form.status" style="width: 150px; margin-right: 15px;" placeholder="璁惧鐘舵��">
+ <el-option label="姝e父" :value="0"></el-option>
+ <el-option label="鎹熷潖" :value="1"></el-option>
+ <el-option label="鎶ュ簾" :value="2"></el-option>
</el-select>
- <el-button type="primary">鏌ヨ</el-button>
- <el-button>娓呯┖</el-button>
+ <el-button type="primary" @click="getDevicePage">鏌ヨ</el-button>
+ <el-button @click="clear">娓呯┖</el-button>
</div>
- <el-button type="primary">鏂板</el-button>
+ <el-button type="primary" @click="handleEdit">鏂板</el-button>
</div>
<el-table
- :data="tableData"
- border
- style="width: 100%">
+ :data="tableData"
+ border
+ v-loading="loading"
+ style="width: 100%">
<el-table-column
- prop="date"
- label="宸ュ崟鍒嗙被">
+ prop="code"
+ label="璁惧缂栫爜">
</el-table-column>
<el-table-column
- prop="name"
- label="鎶ヤ慨鍖哄煙">
+ prop="name"
+ label="璁惧鍚嶇О">
</el-table-column>
<el-table-column
- prop="address"
- label="涓婃姤浜�">
+ prop="categoryName"
+ label="璁惧鍒嗙被">
</el-table-column>
<el-table-column
- prop="address"
- label="涓婃姤鏃堕棿">
+ prop="modelNo"
+ label="璁惧鍨嬪彿">
</el-table-column>
<el-table-column
- prop="address"
- label="澶勭悊浜�">
+ prop="realName"
+ label="璁惧绠$悊鍛�">
</el-table-column>
<el-table-column
- prop="address"
- label="宸ュ崟鐘舵��">
+ prop="supplier"
+ label="璁惧渚涘簲鍟�">
</el-table-column>
<el-table-column
- prop="address"
- label="鎿嶄綔">
+ label="璁惧鐘舵��">
+ <template slot-scope="{row}">
+ <span v-if="row.status === 0">姝e父</span>
+ <span v-if="row.status === 1">鎹熷潖</span>
+ <span v-if="row.status === 2">鎶ュ簾</span>
+ </template>
</el-table-column>
</el-table>
<div class="xm_table_f">
<el-pagination
- @size-change="handleSizeChange"
- @current-change="handleCurrentChange"
- :current-page="page"
- :page-sizes="[10, 20, 30, 40]"
- :page-size="pageTotal"
- layout="total, sizes, prev, pager, next, jumper"
- :total="total">
+ @size-change="handleSizeChange"
+ @current-change="handleCurrentChange"
+ :current-page="page"
+ :page-sizes="[10, 20, 30, 40]"
+ :page-size="pageTotal"
+ layout="total, sizes, prev, pager, next, jumper"
+ :total="total">
</el-pagination>
</div>
</div>
@@ -294,62 +331,65 @@
<div class="xm_table">
<div class="xm_table_search">
<div class="xm_table_search_left">
- <el-input v-model="input" placeholder="璇疯緭鍏ヨ祫浜у悕绉�/缂栫爜" style="width: 200px; margin-right: 15px;"></el-input>
+ <el-input v-model="form.code" placeholder="璇疯緭鍏ヨ祫浜у悕绉�/缂栫爜" style="width: 200px; margin-right: 15px;"></el-input>
<el-select v-model="value" style="width: 200px; margin-right: 15px;" placeholder="璧勪骇鍒嗙被">
<el-option
- v-for="item in options"
- :key="item.value"
- :label="item.label"
- :value="item.value">
+ v-for="item in options"
+ :key="item.value"
+ :label="item.label"
+ :value="item.value">
</el-option>
</el-select>
- <el-button type="primary">鏌ヨ</el-button>
- <el-button>娓呯┖</el-button>
+ <el-button type="primary" @click="getPropertyLists">鏌ヨ</el-button>
+ <el-button @click="clear">娓呯┖</el-button>
</div>
- <el-button type="primary">鏂板</el-button>
+ <el-button type="primary" @click="$refs.newMaterial.open('鏂板缓鐗╂枡')">鏂板</el-button>
</div>
<el-table
- :data="tableData"
- border
- style="width: 100%">
+ :data="tableData"
+ border
+ v-loading="loading"
+ style="width: 100%">
<el-table-column
- prop="date"
- label="璧勪骇缂栫爜">
+ prop="code"
+ label="璧勪骇缂栫爜">
</el-table-column>
<el-table-column
- prop="name"
- label="璧勪骇鍚嶇О">
+ prop="name"
+ label="璧勪骇鍚嶇О">
</el-table-column>
<el-table-column
- prop="address"
- label="鏉$爜">
+ prop="qrcode"
+ label="鏉$爜">
</el-table-column>
<el-table-column
- prop="address"
- label="鍝佺墝">
+ prop="brand"
+ label="鍝佺墝">
</el-table-column>
<el-table-column
- prop="address"
- label="瑙勬牸鍨嬪彿">
+ prop="attr"
+ label="瑙勬牸鍨嬪彿">
</el-table-column>
<el-table-column
- prop="address"
- label="鍗曚綅">
+ prop="unitName"
+ label="鍗曚綅">
</el-table-column>
<el-table-column
- prop="address"
- label="搴撳瓨鏁伴噺">
+ label="搴撳瓨鏁伴噺">
+ <template v-slot="scope">
+ <span>{{ scope.row.maxStock }} ~ {{ scope.row.minStock }}</span>
+ </template>
</el-table-column>
</el-table>
<div class="xm_table_f">
<el-pagination
- @size-change="handleSizeChange"
- @current-change="handleCurrentChange"
- :current-page="page"
- :page-sizes="[10, 20, 30, 40]"
- :page-size="pageTotal"
- layout="total, sizes, prev, pager, next, jumper"
- :total="total">
+ @size-change="handleSizeChange"
+ @current-change="handleCurrentChange"
+ :current-page="page"
+ :page-sizes="[10, 20, 30, 40]"
+ :page-size="pageTotal"
+ layout="total, sizes, prev, pager, next, jumper"
+ :total="total">
</el-pagination>
</div>
</div>
@@ -359,34 +399,222 @@
</el-tabs>
</div>
</div>
+ <!-- 鍚堝悓璇︽儏 -->
+ <ContractDetail ref="ContractDetailRef" />
+ <!-- 宸ュ崟璇︽儏 -->
+ <Detail v-if="showDetail" ref="DetailRef" @close="showDetail = false" />
+ <!-- 鏂板缓宸ュ崟 -->
+ <OperaYwWorkorderWindow ref="operaYwWorkorderWindow" @success="getFetchList" />
+ <!-- 鏂板缓璁惧 -->
+ <Edit v-if="showEdit1" ref="EditRef" @success="getDevicePage" @close="showEdit1 = false" />
+ <!-- 鏂板缓璧勪骇 -->
+ <newMaterial ref="newMaterial" @success="getPropertyLists" />
</GlobalWindow>
</template>
<script>
import BaseOpera from '@/components/base/BaseOpera'
import GlobalWindow from '@/components/common/GlobalWindow'
+ import newMaterial from '../../stock/components/newMaterial'
import * as echarts from 'echarts';
+ import { detailById } from '@/api/project/ywRoom'
+ import { fetchList as TenantContract } from '@/api/contract'
+ import { getDataVO, fetchList } from '@/api/workorder/ywWorkorder'
+ import ContractDetail from '../../contract/components/contractDetail'
+ import { fetchList as getCateList } from '@/api/business/category.js'
+ import { fetchList as getPropertyList } from '@/api/ywMaterial'
+ import { getDeviceStatus, getDeviceCateData, fetchList as devicePage } from '@/api/Inspection/device'
+ import Detail from '../../workorder/components/detail'
+ import OperaYwWorkorderWindow from '../../workorder/components/OperaYwWorkorderWindow'
+ import Edit from '../../operation/components/deviceEdit'
export default {
name: "houseDetails",
extends: BaseOpera,
- components: { GlobalWindow },
+ components: { GlobalWindow, ContractDetail, Detail, OperaYwWorkorderWindow, Edit, newMaterial },
data() {
return {
info: {},
+ houseId: '',
+ propsName: '',
activeName: 'houseinfo',
total: 0,
pageTotal: 10,
page: 1,
- tableData: []
+ numObj: {},
+ tableData: [],
+ loading: false,
+ form: {
+ code: '',
+ areaIds: [],
+ cateId: '',
+ status: '',
+ name: ''
+ },
+ cateList: [],
+ categaryList: [],
+ deviceList: [],
+ showDetail: false,
+ showEdit1: false
}
},
methods: {
- open (title, target) {
+ open (title, id) {
this.title = title
- this.visible = true
+ this.houseId = id
+ detailById(id)
+ .then(res => {
+ this.info = res
+ this.visible = true
+ })
+ },
+ handleEdit(row) {
+ this.showEdit1 = true
this.$nextTick(() => {
- this.reand()
- this.reand1()
+ this.$refs.EditRef.isShowModal = true
+ })
+ },
+ handleDetail(row) {
+ this.showDetail = true
+ this.$nextTick(() => {
+ this.$refs.DetailRef.visible = true
+ this.$refs.DetailRef.id = row.id
+ this.$refs.DetailRef.getDetail()
+ })
+ },
+ // 鑾峰彇璁惧鐘舵��
+ getDevice() {
+ getDeviceStatus({ roomId: this.houseId })
+ .then(res => {
+ this.$nextTick(() => {
+ this.deviceList = [
+ { value: res.workAmount || 0, name: '姝e父' },
+ { value: res.exceptionAmount || 0, name: '寮傚父' },
+ { value: res.errAmount || 0, name: '鎶ュ簾' }
+ ]
+ this.reand()
+ })
+ })
+ },
+ // 璁惧鏁伴噺鍒嗗竷缁熻
+ getDeviceCateDatas() {
+ getDeviceCateData({
+ roomId: this.houseId
+ }).then(res => {
+ this.categaryList = res
+ this.$nextTick(() => {
+ this.reand1()
+ })
+ })
+ },
+ // 鑾峰彇璁惧鍒嗛〉
+ getDevicePage() {
+ this.loading = true
+ devicePage({
+ capacity: this.pageTotal,
+ page: this.page,
+ model: {
+ roomId: this.houseId,
+ status: this.form.status,
+ name: this.form.name
+ }
+ }).then(res => {
+ this.tableData = res.records
+ this.total = res.total
+ }).finally(() => {
+ this.loading = false
+ })
+ },
+ // 鑾峰彇璧勪骇鍒楄〃
+ getPropertyLists() {
+ this.loading = true
+ getPropertyList({
+ capacity: this.pageTotal,
+ page: this.page,
+ model: {
+ roomId: this.houseId,
+ name: this.form.name
+ }
+ }).then(res => {
+ this.tableData = res.records
+ this.total = res.total
+ }).finally(() => {
+ this.loading = false
+ })
+ },
+ getCate() {
+ getCateList({
+ model: { type: 3 },
+ capacity: 1000,
+ page: 1,
+ }).then(res => {
+ this.cateList = res.records || []
+ })
+ },
+ changeSel(e) {
+ if (e && e.length == 2) {
+ this.$set(this.form, 'cateId', e[1])
+ } else {
+ this.$set(this.form, 'cateId', '')
+ }
+ },
+ clear() {
+ this.page = 1
+ this.form.status = ''
+ this.form.areaIds = []
+ this.form.cateId = ''
+ this.form.name = ''
+ if (this.propsName === 'project') {
+ this.getTenantContract()
+ } else if (this.propsName === 'second') {
+ this.getFetchList()
+ } else if (this.propsName === 'third') {
+ this.getDevicePage()
+ } else if (this.propsName === 'fourth') {
+ this.getPropertyLists()
+ }
+ },
+ // 鑾峰彇宸ュ崟鏁�
+ getDataVOs() {
+ getDataVO({
+ queryId: this.houseId,
+ queryType: 3
+ }).then(res => {
+ this.numObj = res
+ })
+ },
+ // 鑾峰彇宸ュ崟鍒楄〃
+ getFetchList() {
+ this.loading = true
+ fetchList({
+ capacity: 10,
+ page: 1,
+ model: {
+ roomId: this.houseId,
+ status: this.form.status,
+ cateId: this.form.cateId
+ }
+ }).then(res => {
+ this.tableData = res.records
+ this.total = res.total
+ }).finally(() => {
+ this.loading = false
+ })
+ },
+ // 鑾峰彇鍚堝悓鍒嗛〉
+ getTenantContract() {
+ this.loading = true
+ TenantContract({
+ capacity: this.pageTotal,
+ page: this.page,
+ model: {
+ roomIds: [this.houseId],
+ code: this.form.code
+ }
+ }).then(res => {
+ this.tableData = res.records
+ this.total = res.total
+ }).finally(() => {
+ this.loading = false
})
},
reand() {
@@ -394,38 +622,29 @@
var myChart = echarts.init(chartDom);
var option;
option = {
+ title: {
+ text: '璁惧鐘舵��'
+ },
tooltip: {
trigger: 'item'
},
legend: {
- top: '5%',
- left: 'center'
+ left: 'right',
+ top: 'middle',
+ width: '80'
},
series: [
{
- name: 'Access From',
+ name: '璁惧鐘舵��',
type: 'pie',
radius: ['40%', '80%'],
- avoidLabelOverlap: false,
label: {
- show: false,
- position: 'center'
+ show: true,
+ position: 'center',
+ fontWeight: 'bold',
+ fontSize: 22
},
- emphasis: {
- label: {
- show: true,
- fontSize: 40,
- fontWeight: 'bold'
- }
- },
- labelLine: {
- show: false
- },
- data: [
- { value: 1048, name: '姝e父' },
- { value: 735, name: '寮傚父' },
- { value: 580, name: '鎶ュ簾' }
- ]
+ data: this.deviceList
}
]
};
@@ -435,7 +654,6 @@
var chartDom = document.getElementById('chat2');
var myChart = echarts.init(chartDom);
var option;
- // There should not be negative values in rawData
const rawData = [
[100, 302, 301, 334, 390, 330, 320],
[320, 132, 101, 134, 90, 230, 210],
@@ -451,12 +669,6 @@
}
totalData.push(sum);
}
- const grid = {
- left: 100,
- right: 100,
- top: 50,
- bottom: 50
- };
const series = [
'Direct',
'Mail Ad',
@@ -469,41 +681,103 @@
type: 'bar',
stack: 'total',
barWidth: '60%',
- label: {
- show: true,
- formatter: (params) => Math.round(params.value * 1000) / 10 + '%'
- },
data: rawData[sid].map((d, did) =>
totalData[did] <= 0 ? 0 : d / totalData[did]
)
};
});
+ let seriesArr = this.categaryList.map(item => {
+ return {
+ name: item.cateName,
+ type: 'bar',
+ stack: 'total',
+ barWidth: '60%',
+ data: item.ywDeviceCateDataVOList.map((child) =>
+ child.deviceAmount
+ )
+ }
+ })
+ let xAxisData = this.categaryList.map(item => item.cateName)
+ console.log(series)
+ console.log(seriesArr)
+ console.log(xAxisData)
option = {
- legend: {
- selectedMode: false
+ title: {
+ text: '璁惧鏁伴噺鍒嗙被缁熻'
},
- grid,
+ grid: {
+ left: 50,
+ right: 50,
+ top: 50,
+ bottom: 50
+ },
+ tooltip: {
+ trigger: 'axis',
+ axisPointer: {
+ type: 'shadow'
+ }
+ },
yAxis: {
type: 'value'
},
xAxis: {
type: 'category',
- data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
+ data: xAxisData
},
- series
+ series: seriesArr
};
option && myChart.setOption(option);
},
- handleClick(tab, event) {
- console.log(tab, event);
+ handleClick(tab) {
+ this.page = 1
+ this.pageTotal = 10
+ this.tableData = []
+ this.total = 0
+ this.form.code = ''
+ this.form.areaIds = []
+ this.form.cateId = ''
+ this.form.status = ''
+ this.form.name = ''
+ this.propsName = tab._props.name
+ if (tab._props.name === 'project') {
+ this.getTenantContract()
+ } else if (tab._props.name === 'second') {
+ this.getDataVOs()
+ this.getCate()
+ this.getFetchList()
+ } else if (tab._props.name === 'third') {
+ this.getDevice()
+ this.getDeviceCateDatas()
+ this.getDevicePage()
+ } else if (this.propsName === 'fourth') {
+ this.getPropertyLists()
+ }
},
handleCurrentChange(page) {
this.page = page
+ if (this.propsName === 'project') {
+ this.getTenantContract()
+ } else if (this.propsName === 'second') {
+ this.getFetchList()
+ } else if (tab._props.name === 'third') {
+ this.getDevicePage()
+ } else if (this.propsName === 'fourth') {
+ this.getPropertyLists()
+ }
},
handleSizeChange(pageTotal) {
this.pageTotal = pageTotal
- },
+ if (this.propsName === 'project') {
+ this.getTenantContract()
+ } else if (this.propsName === 'second') {
+ this.getFetchList()
+ } else if (tab._props.name === 'third') {
+ this.getDevicePage()
+ } else if (this.propsName === 'fourth') {
+ this.getPropertyLists()
+ }
+ }
}
}
</script>
@@ -517,10 +791,13 @@
width: 100%;
padding: 20px;
box-sizing: border-box;
- font-size: 16px;
- font-weight: bold;
- color: black;
- background: #ffffff;
+ span {
+ font-size: 16px;
+ font-weight: bold;
+ color: black;
+ background: #ffffff;
+ margin-right: 10px;
+ }
}
.right_cate {
width: 100%;
diff --git a/admin/src/views/project/housingList.vue b/admin/src/views/project/housingList.vue
index fabf9e7..7d0d874 100644
--- a/admin/src/views/project/housingList.vue
+++ b/admin/src/views/project/housingList.vue
@@ -54,7 +54,7 @@
<el-table-column v-if="containPermissions(['business:ywroom:update', 'business:ywroom:delete'])" label="鎿嶄綔"
min-width="140" fixed="right">
<template slot-scope="{row}">
- <el-button type="text" @click="$refs.houseDetails.open('鎴挎簮璇︽儏')">鏌ョ湅璇︽儏</el-button>
+ <el-button type="text" @click="$refs.houseDetails.open('鎴挎簮璇︽儏', row.id)">鏌ョ湅璇︽儏</el-button>
<el-button type="text" @click="editClick(row)" icon="el-icon-edit"
v-permissions="['business:ywroom:update']">缂栬緫</el-button>
<el-button type="text" @click="deleteById(row)" icon="el-icon-delete"
diff --git a/admin/src/views/roomStatus/index.vue b/admin/src/views/roomStatus/index.vue
index bff1757..3ef5bef 100644
--- a/admin/src/views/roomStatus/index.vue
+++ b/admin/src/views/roomStatus/index.vue
@@ -2,37 +2,58 @@
<div class="box">
<div class="box_content">
<div class="left">
- <el-input v-model="input" placeholder="璇疯緭鍏ュ唴瀹�"></el-input>
+ <el-input v-model="filterText" placeholder="鎼滅储"></el-input>
<div style="width: 100%; height: 20px;"></div>
- <el-tree :data="data" :props="defaultProps" @node-click="handleNodeClick"></el-tree>
+ <el-tree
+ ref="tree"
+ :data="houseList"
+ node-key="id"
+ :default-expanded-keys="ids"
+ highlight-current
+ @node-click="nodeClick"
+ :default-checked-keys="ids"
+ :filter-node-method="filterNode"
+ :props="{ children: 'projectDataVOList', label: 'name' }">
+ <span class="custom-tree-node" style="width: 100%; display: flex; align-items: center; justify-content: space-between;" slot-scope="{ node, data }">
+ <span>{{ data.name }}</span>
+ <span style="color: #2080f7;" v-if="data.lv === 3">
+ {{data.leaseStatus === 0 ? '寰呯璧�' : data.leaseStatus === 1 ? '宸茬璧�' : data.leaseStatus === 2 ? '鏈紑鍚璧�' : ''}}
+ </span>
+ </span>
+ </el-tree>
</div>
<div class="right">
- <div class="right_head">椤圭洰鍚嶇О</div>
+ <div class="right_head">
+ {{title}}
+ <el-tag type="info" v-if="leaseStatus === 0" style="margin-left: 10px;">寰呯璧�</el-tag>
+ <el-tag type="success" v-if="leaseStatus === 1" style="margin-left: 10px;">宸茬璧�</el-tag>
+ <el-tag type="warning" v-if="leaseStatus === 2" style="margin-left: 10px;">鏈紑鍚璧�</el-tag>
+ </div>
<div class="right_cate">
<el-tabs v-model="activeName" @tab-click="handleClick">
- <el-tab-pane label="椤圭洰姒傚喌" name="first">
+ <el-tab-pane label="椤圭洰姒傚喌" name="first" v-if="lv === 0">
<div class="xm">
<el-card>
<div class="xm_one">
<div class="xm_one_row">
<span>鍦ㄧ鍚堝悓鏁�</span>
- <span>4</span>
- <span>鍦ㄧ鎴挎簮鏁帮細5</span>
+ <span>{{projectNums.leaseContractAmount}}</span>
+ <span>鍦ㄧ鎴挎簮鏁帮細{{projectNums.leaseRoomAmount}}</span>
</div>
<div class="xm_one_row">
<span>鍙嫑鍟嗛潰绉�</span>
- <span>50000銕�</span>
- <span>鍙嫑鍟嗘埧婧愭暟锛�15</span>
+ <span>{{projectNums.investmentArea}}銕�</span>
+ <span>鍙嫑鍟嗘埧婧愭暟锛歿{projectNums.investmentRoomAmount}}</span>
</div>
<div class="xm_one_row">
<span>鍦ㄧ瀹炴椂鍧囦环</span>
- <span>145.75鍏�/m虏路澶�</span>
- <span>鍦ㄧ闈㈢Н锛�900.00m虏</span>
+ <span>{{projectNums.leasePrice}}鍏�/m虏路澶�</span>
+ <span>鍦ㄧ闈㈢Н锛歿{projectNums.leaseArea}}m虏</span>
</div>
<div class="xm_one_row">
<span>鍑虹鐜�</span>
- <span>50.00%</span>
- <span>寰呯闈㈢Н锛�700.00m虏</span>
+ <span>{{(projectNums.leaseRoomAmount / projectNums.investmentRoomAmount).toFixed(2)}}%</span>
+ <span>寰呯闈㈢Н锛歿{projectNums.investmentArea - projectNums.leaseArea}}m虏</span>
</div>
</div>
</el-card>
@@ -43,19 +64,19 @@
<div class="xm_info">
<div class="xm_info_row" style="width: 25%;">
<span>椤圭洰鍚嶇О</span>
- <span>XXXXXXXXXX</span>
+ <span>{{projectInfo.name}}</span>
</div>
<div class="xm_info_row" style="width: 25%;">
<span>鎵�灞炲湴鍖�</span>
- <span>瀹夊窘鐪�-鍚堣偉甯�-铚�灞卞尯</span>
+ <span>{{projectInfo.provinceName}}-{{projectInfo.cityName}}-{{projectInfo.areaName}}</span>
</div>
<div class="xm_info_row" style="width: 50%;">
<span>璇︾粏鍦板潃</span>
- <span>Lorem ipsum dolor sit amet, consectetur</span>
+ <span>{{projectInfo.addr}}</span>
</div>
<div class="xm_info_row" style="width: 100%; margin-top: 15px;">
<span>椤圭洰绠�浠�</span>
- <span>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean euismod bibendum</span>
+ <span>{{projectInfo.remark}}</span>
</div>
</div>
</el-card>
@@ -64,34 +85,53 @@
<span>褰撳墠鍦ㄧ鍚堝悓</span>
</div>
<div class="xm_table">
- <el-input v-model="input" style="width: 300px; margin-bottom: 15px;" placeholder="璇疯緭鍏ュ唴瀹�"></el-input>
+ <div style="display: flex; align-items: center; margin-bottom: 15px;">
+ <el-input v-model="form.code" style="width: 150px; margin-right: 15px;" placeholder="璇疯緭鍏ュ悎鍚岀紪鍙�"></el-input>
+ <el-button type="primary" @click="getFetchList">鎼滅储</el-button>
+ <el-button @click="clear">閲嶇疆</el-button>
+ </div>
<el-table
:data="tableData"
border
+ v-loading="loading"
style="width: 100%">
<el-table-column
- prop="date"
label="鍚堝悓缂栧彿">
+ <template slot-scope="{row}">
+ <el-button type="text">{{row.code}}</el-button>
+ </template>
</el-table-column>
<el-table-column
- prop="name"
+ prop="renterName"
label="绉熷">
</el-table-column>
<el-table-column
- prop="address"
label="绉熻祦鍗曚环">
+ <template slot-scope="{row}">
+ <div style="display: flex; align-items: center;">
+ <span>{{row.leasePrice || 0}}鍏�/銕÷峰ぉ</span>
+ </div>
+ </template>
</el-table-column>
<el-table-column
- prop="address"
+ prop="leaseDays"
label="绉熻祦澶╂暟">
</el-table-column>
<el-table-column
- prop="address"
label="绉熻祦闈㈢Н">
+ <template slot-scope="{row}">
+ {{row.totalArea}}銕�
+ </template>
</el-table-column>
<el-table-column
- prop="address"
label="鎴挎簮">
+ <template slot-scope="{row}">
+ <div style="display: flex; flex-direction: column;">
+ <span v-for="(item, index) in row.roomList" :key="index">
+ {{item.projectName}}/{{item.buildingName}}/{{item.floorName}}/{{item.roomNum}}
+ </span>
+ </div>
+ </template>
</el-table-column>
</el-table>
<div class="xm_table_f">
@@ -109,7 +149,7 @@
</el-card>
</div>
</el-tab-pane>
- <el-tab-pane label="鎴挎簮淇℃伅" name="houseinfo">
+ <el-tab-pane label="鎴挎簮淇℃伅" name="houseinfo" v-if="[3].includes(lv)">
<div class="xm">
<el-card style="margin-top: 20px;">
<div slot="header" class="clearfix">
@@ -118,91 +158,99 @@
<div class="xm_info">
<div class="xm_info_row" style="width: 25%;">
<span>鎵�灞為」鐩�</span>
- <span>XXXXXXXXXX</span>
+ <span>{{roomInfo.projectName}}</span>
</div>
<div class="xm_info_row" style="width: 25%;">
<span>妤煎畤</span>
- <span>缁煎悎妤�</span>
+ <span>{{roomInfo.buildingName}}</span>
</div>
<div class="xm_info_row" style="width: 25%;">
<span>妤煎眰</span>
- <span>1</span>
+ <span>{{roomInfo.floorName}}</span>
</div>
<div class="xm_info_row" style="width: 25%;">
<span>鎴垮彿</span>
- <span>101娲诲姩瀹�</span>
+ <span>{{roomInfo.roomNum}}</span>
</div>
<div class="xm_info_row" style="width: 25%; margin-top: 15px;">
<span>鎴块棿缂栧彿</span>
- <span>101</span>
+ <span>{{roomInfo.code}}</span>
</div>
<div class="xm_info_row" style="width: 25%; margin-top: 15px;">
<span>鏄惁鎷涘晢</span>
- <span>鍚�</span>
+ <span v-if="roomInfo.isInvestment === 0">鍚�</span>
+ <span v-if="roomInfo.isInvestment === 1">鏄�</span>
</div>
<div class="xm_info_row" style="width: 25%; margin-top: 15px;">
<span>寤虹瓚闈㈢Н</span>
- <span>50銕�</span>
+ <span>{{roomInfo.area}}銕�</span>
</div>
<div class="xm_info_row" style="width: 25%; margin-top: 15px;">
<span>璁$闈㈢Н</span>
- <span>50銕�</span>
+ <span>{{roomInfo.rentArea}}銕�</span>
</div>
<div class="xm_info_row" style="width: 25%; margin-top: 15px;">
<span>璁¤垂闈㈢Н</span>
- <span>45銕�</span>
+ <span>{{roomInfo.feeArea}}銕�</span>
</div>
</div>
</el-card>
</div>
</el-tab-pane>
- <el-tab-pane label="绉熷鍚堝悓" name="project">
+ <el-tab-pane label="绉熷鍚堝悓" name="project" v-if="[3].includes(lv)">
<div class="xm">
<el-card style="margin-top: 20px;">
<div slot="header" class="clearfix">
<span>褰撳墠鍦ㄧ鍚堝悓</span>
</div>
<div class="xm_table">
- <el-input v-model="input" style="width: 300px; margin-bottom: 15px;" placeholder="璇疯緭鍏ュ悎鍚岀紪鍙�"></el-input>
+ <div style="display: flex; align-items: center; margin-bottom: 15px;">
+ <el-input v-model="form.code" style="width: 150px; margin-right: 15px;" placeholder="璇疯緭鍏ュ悎鍚岀紪鍙�"></el-input>
+ <el-button type="primary" @click="getFetchList">鎼滅储</el-button>
+ <el-button @click="clear">閲嶇疆</el-button>
+ </div>
<el-table
:data="tableData"
border
+ v-loading="loading"
style="width: 100%">
<el-table-column
- prop="date"
label="鍚堝悓缂栧彿">
+ <template slot-scope="{row}">
+ <el-button type="text">{{row.code}}</el-button>
+ </template>
</el-table-column>
<el-table-column
- prop="name"
- label="瀹㈡埛鍚嶇О">
+ prop="renterName"
+ label="绉熷">
</el-table-column>
<el-table-column
- prop="address"
- label="寮�濮嬫棩鏈�">
- </el-table-column>
- <el-table-column
- prop="address"
- label="缁撴潫鏃ユ湡">
- </el-table-column>
- <el-table-column
- prop="address"
label="绉熻祦鍗曚环">
+ <template slot-scope="{row}">
+ <div style="display: flex; align-items: center;">
+ <span>{{row.leasePrice || 0}}鍏�/銕÷峰ぉ</span>
+ </div>
+ </template>
</el-table-column>
<el-table-column
- prop="address"
- label="绉熻祦闈㈢Н锛堛帯锛�">
+ prop="leaseDays"
+ label="绉熻祦澶╂暟">
</el-table-column>
<el-table-column
- prop="address"
- label="绛捐鏃�">
+ label="绉熻祦闈㈢Н">
+ <template slot-scope="{row}">
+ {{row.totalArea}}銕�
+ </template>
</el-table-column>
<el-table-column
- prop="address"
- label="鍚堝悓鏉ユ簮">
- </el-table-column>
- <el-table-column
- prop="address"
- label="鍚堝悓鐘舵��">
+ label="鎴挎簮">
+ <template slot-scope="{row}">
+ <div style="display: flex; flex-direction: column;">
+ <span v-for="(item, index) in row.roomList" :key="index">
+ {{item.projectName}}/{{item.buildingName}}/{{item.floorName}}/{{item.roomNum}}
+ </span>
+ </div>
+ </template>
</el-table-column>
</el-table>
<div class="xm_table_f">
@@ -220,29 +268,70 @@
</el-card>
</div>
</el-tab-pane>
- <el-tab-pane label="妤煎畤姒傚喌" name="louyu">
+ <el-tab-pane label="鎴挎�佺鐞�" name="house" v-if="[1,2].includes(lv)">
+ <div class="xm">
+ <div class="xm_house">
+ <div class="xm_house_tips">
+ <div class="xm_house_tips_row">
+ <div class="xm_house_tips_row_d" style="background: rgba(0,186,146,0.1);"></div>
+ <span>宸插嚭绉�</span>
+ </div>
+ <div class="xm_house_tips_row">
+ <div class="xm_house_tips_row_d" style="background: #F7F7F7;"></div>
+ <span>鏈嚭绉�</span>
+ </div>
+ <div class="xm_house_tips_row">
+ <div class="xm_house_tips_row_d" style="background: rgba(255,158,0,0.14);"></div>
+ <span>90鏃ュ唴鍒版湡</span>
+ </div>
+ </div>
+ <div class="xm_house_list" v-for="(item, index) in roomStatus" :key="index">
+ <div class="xm_house_list_left">
+ <div class="xm_house_list_left_row">
+ <span>{{item.floorName}}</span>
+ <span>{{item.floorArea}}銕�</span>
+ </div>
+ </div>
+ <div class="xm_house_list_right">
+ <div class="xm_house_list_right_row" :style="{ width: ifWidth(child.roomRentArea), backgroundColor: ifBackground(child.roomStatus) }" v-for="(child, i) in item.ywRoomStatusDataVOList" :key="i">
+ <div class="ft">
+ <span>{{child.roomCode}}</span>
+ <span>锛坽{child.roomRentArea}}銕★級</span>
+ </div>
+ <div class="xm_house_list_right_row_info" v-if="child.roomStatus !== 0">
+ <span>{{child.customerName}}</span>
+ <span>{{child.overData.substring(0, 10)}}鍒版湡</span>
+ </div>
+ <div class="xm_house_list_right_row_day" v-if="child.roomStatus === 0">鏈嚭绉燂綔绌虹疆{{child.freeDayAmount}}澶�</div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </el-tab-pane>
+ <el-tab-pane label="妤煎畤姒傚喌" name="louyu" v-if="lv === 1">
<div class="xm">
<el-card>
<div class="xm_one">
<div class="xm_one_row">
<span>鍦ㄧ鍚堝悓鏁�</span>
- <span>4</span>
- <span>鍦ㄧ鎴挎簮鏁帮細5</span>
+ <span>{{projectNums.leaseContractAmount}}</span>
+ <span>鍦ㄧ鎴挎簮鏁帮細{{projectNums.leaseRoomAmount}}</span>
</div>
<div class="xm_one_row">
<span>鍙嫑鍟嗛潰绉�</span>
- <span>50000銕�</span>
- <span>鍙嫑鍟嗘埧婧愭暟锛�15</span>
+ <span>{{projectNums.investmentArea}}銕�</span>
+ <span>鍙嫑鍟嗘埧婧愭暟锛歿{projectNums.investmentRoomAmount}}</span>
</div>
<div class="xm_one_row">
<span>鍦ㄧ瀹炴椂鍧囦环</span>
- <span>145.75鍏�/m虏路澶�</span>
- <span>鍦ㄧ闈㈢Н锛�900.00m虏</span>
+ <span>{{projectNums.leasePrice}}鍏�/m虏路澶�</span>
+ <span>鍦ㄧ闈㈢Н锛歿{projectNums.leaseArea}}m虏</span>
</div>
<div class="xm_one_row">
<span>鍑虹鐜�</span>
- <span>50.00%</span>
- <span>寰呯闈㈢Н锛�700.00m虏</span>
+ <span>{{(projectNums.leaseRoomAmount / projectNums.investmentRoomAmount).toFixed(2)}}%</span>
+ <span>寰呯闈㈢Н锛歿{projectNums.investmentArea - projectNums.leaseArea}}m虏</span>
</div>
</div>
</el-card>
@@ -253,43 +342,43 @@
<div class="xm_info">
<div class="xm_info_row" style="width: 25%;">
<span>鎵�灞為」鐩�</span>
- <span>闃滃畞鏂囦綋涓績</span>
+ <span>{{buildingInfo.projectName}}</span>
</div>
<div class="xm_info_row" style="width: 25%;">
<span>妤煎畤鍚嶇О</span>
- <span>A搴�</span>
+ <span>{{buildingInfo.name}}</span>
</div>
<div class="xm_info_row" style="width: 25%;">
<span>妤煎畤缂栫爜</span>
- <span>A-</span>
+ <span>{{buildingInfo.code}}</span>
</div>
<div class="xm_info_row" style="width: 25%;">
<span>璇︾粏鍦板潃</span>
- <span>闃滃畞鏂囦綋涓績瑗垮崡瑙�</span>
+ <span>{{buildingInfo.addr}}</span>
</div>
<div class="xm_info_row" style="width: 100%; margin-top: 15px;">
- <span>璇︾粏鍦板潃</span>
- <span>闃滃畞鏂囦綋涓績瑗垮崡瑙�</span>
+ <span>妤煎畤绠�浠�</span>
+ <span>{{buildingInfo.remark}}</span>
</div>
<div class="xm_info_row" style="width: 25%; margin-top: 15px;">
<span>寤虹瓚闈㈢Н</span>
- <span>1000銕�</span>
+ <span>{{buildingInfo.cqArea}}銕�</span>
</div>
<div class="xm_info_row" style="width: 25%; margin-top: 15px;">
<span>璁$闈㈢Н</span>
- <span>1000銕�</span>
+ <span>{{buildingInfo.roomRentArea}}銕�</span>
</div>
<div class="xm_info_row" style="width: 50%; margin-top: 15px;">
<span>璁¤垂闈㈢Н</span>
- <span>1000銕�</span>
+ <span>{{buildingInfo.roomFeeArea}}銕�</span>
</div>
<div class="xm_info_row" style="width: 25%; margin-top: 15px;">
<span>鍦颁笂灞傛暟</span>
- <span>5</span>
+ <span>{{buildingInfo.onFloor}}</span>
</div>
<div class="xm_info_row" style="width: 25%; margin-top: 15px;">
<span>鍦颁笅灞傛暟</span>
- <span>2</span>
+ <span>{{buildingInfo.underFloor}}</span>
</div>
</div>
</el-card>
@@ -298,184 +387,53 @@
<span>褰撳墠鍦ㄧ鍚堝悓</span>
</div>
<div class="xm_table">
- <el-input v-model="input" style="width: 300px; margin-bottom: 15px;" placeholder="璇疯緭鍏ュ唴瀹�"></el-input>
- <el-table
- :data="tableData"
- border
- style="width: 100%">
- <el-table-column
- prop="date"
- label="鍚堝悓缂栧彿">
- </el-table-column>
- <el-table-column
- prop="name"
- label="绉熷">
- </el-table-column>
- <el-table-column
- prop="address"
- label="绉熻祦鍗曚环">
- </el-table-column>
- <el-table-column
- prop="address"
- label="绉熻祦澶╂暟">
- </el-table-column>
- <el-table-column
- prop="address"
- label="绉熻祦闈㈢Н">
- </el-table-column>
- <el-table-column
- prop="address"
- label="鎴挎簮">
- </el-table-column>
- </el-table>
- <div class="xm_table_f">
- <el-pagination
- @size-change="handleSizeChange"
- @current-change="handleCurrentChange"
- :current-page="page"
- :page-sizes="[10, 20, 30, 40]"
- :page-size="pageTotal"
- layout="total, sizes, prev, pager, next, jumper"
- :total="total">
- </el-pagination>
- </div>
- </div>
- </el-card>
- </div>
- </el-tab-pane>
- <el-tab-pane label="鎴挎�佺鐞�" name="house">
- <div class="xm">
- <div class="xm_house">
- <div class="xm_house_tips">
- <div class="xm_house_tips_row">
- <div class="xm_house_tips_row_d"></div>
- <span>宸插嚭绉�</span>
- </div>
- <div class="xm_house_tips_row">
- <div class="xm_house_tips_row_d"></div>
- <span>鏈嚭绉�</span>
- </div>
- <div class="xm_house_tips_row">
- <div class="xm_house_tips_row_d"></div>
- <span>90鏃ュ唴鍒版湡</span>
- </div>
- </div>
- <div class="xm_house_list">
- <div class="xm_house_list_left">
- <div class="xm_house_list_left_row">
- <span>1F</span>
- <span>600銕�</span>
- </div>
- </div>
- <div class="xm_house_list_right">
- <div class="item">
- <div class="xm_house_list_right_row">
- <span>101锛�600銕★級</span>
- <div class="xm_house_list_right_row_info">
- <span>绉熷鍚嶇О</span>
- <span>2024-08-16鍒版湡</span>
- </div>
- </div>
- <div class="xm_house_list_right_row">
- <span>101锛�600銕★級</span>
- <div class="xm_house_list_right_row_info">
- <span>绉熷鍚嶇О</span>
- <span>2024-08-16鍒版湡</span>
- </div>
- </div>
- <div class="xm_house_list_right_row">
- <span>101锛�600銕★級</span>
- <div class="xm_house_list_right_row_info">
- <span>绉熷鍚嶇О</span>
- <span>2024-08-16鍒版湡</span>
- </div>
- </div>
- <div class="xm_house_list_right_row">
- <span>101锛�600銕★級</span>
- <div class="xm_house_list_right_row_info">
- <span>绉熷鍚嶇О</span>
- <span>2024-08-16鍒版湡</span>
- </div>
- </div>
- </div>
- </div>
- </div>
- </div>
- </div>
- </el-tab-pane>
- <el-tab-pane label="宸ュ崟璁板綍" name="second">
- <div class="xm">
- <el-card>
- <div class="xm_one1">
- <div class="xm_one_row">
- <span>寰呮寚娲炬暟閲�</span>
- <span>15</span>
- </div>
- <div class="xm_one_row">
- <span>寰呭鐞嗘暟閲�</span>
- <span>15</span>
- </div>
- <div class="xm_one_row">
- <span>鏈湀宸ュ崟鏁�</span>
- <span>15</span>
- </div>
- <div class="xm_one_row">
- <span>绱宸ュ崟鏁�</span>
- <span>15</span>
- </div>
- </div>
- </el-card>
- <el-card style="margin-top: 20px;">
- <div class="xm_table">
- <div class="xm_table_search">
- <el-select v-model="value" style="width: 300px; margin-right: 15px;" placeholder="浣嶇疆绫诲瀷">
- <el-option
- v-for="item in options"
- :key="item.value"
- :label="item.label"
- :value="item.value">
- </el-option>
- </el-select>
- <el-select v-model="value" style="width: 300px;" placeholder="宸ュ崟鍒嗙被">
- <el-option
- v-for="item in options"
- :key="item.value"
- :label="item.label"
- :value="item.value">
- </el-option>
- </el-select>
+ <div style="display: flex; align-items: center; margin-bottom: 15px;">
+ <el-input v-model="form.code" style="width: 150px; margin-right: 15px;" placeholder="璇疯緭鍏ュ悎鍚岀紪鍙�"></el-input>
+ <el-button type="primary" @click="getFetchList">鎼滅储</el-button>
+ <el-button @click="clear">閲嶇疆</el-button>
</div>
<el-table
:data="tableData"
border
+ v-loading="loading"
style="width: 100%">
<el-table-column
- prop="date"
- label="宸ュ崟鍒嗙被">
+ label="鍚堝悓缂栧彿">
+ <template slot-scope="{row}">
+ <el-button type="text">{{row.code}}</el-button>
+ </template>
</el-table-column>
<el-table-column
- prop="name"
- label="鎶ヤ慨鍖哄煙">
+ prop="renterName"
+ label="绉熷">
</el-table-column>
<el-table-column
- prop="address"
- label="涓婃姤浜�">
+ label="绉熻祦鍗曚环">
+ <template slot-scope="{row}">
+ <div style="display: flex; align-items: center;">
+ <span>{{row.leasePrice || 0}}鍏�/銕÷峰ぉ</span>
+ </div>
+ </template>
</el-table-column>
<el-table-column
- prop="address"
- label="涓婃姤鏃堕棿">
+ prop="leaseDays"
+ label="绉熻祦澶╂暟">
</el-table-column>
<el-table-column
- prop="address"
- label="澶勭悊浜�">
+ label="绉熻祦闈㈢Н">
+ <template slot-scope="{row}">
+ {{row.totalArea}}銕�
+ </template>
</el-table-column>
<el-table-column
- prop="address"
- label="宸ュ崟鐘舵��">
- </el-table-column>
- <el-table-column
- prop="address"
- label="鎿嶄綔">
+ label="鎴挎簮">
+ <template slot-scope="{row}">
+ <div style="display: flex; flex-direction: column;">
+ <span v-for="(item, index) in row.roomList" :key="index">
+ {{item.projectName}}/{{item.buildingName}}/{{item.floorName}}/{{item.roomNum}}
+ </span>
+ </div>
+ </template>
</el-table-column>
</el-table>
<div class="xm_table_f">
@@ -493,7 +451,107 @@
</el-card>
</div>
</el-tab-pane>
- <el-tab-pane label="璁惧淇℃伅" name="third">
+ <el-tab-pane label="宸ュ崟璁板綍" name="second" v-if="[0,2,3].includes(lv)">
+ <div class="xm">
+ <el-card>
+ <div class="xm_one1">
+ <div class="xm_one_row">
+ <span>寰呮寚娲炬暟閲�</span>
+ <span>{{workOrderNums.waitAssignAmount || 0}}</span>
+ </div>
+ <div class="xm_one_row">
+ <span>寰呭鐞嗘暟閲�</span>
+ <span>{{workOrderNums.waitDealAmount || 0}}</span>
+ </div>
+ <div class="xm_one_row">
+ <span>鏈湀宸ュ崟鏁�</span>
+ <span>{{workOrderNums.monthAmount || 0}}</span>
+ </div>
+ <div class="xm_one_row">
+ <span>绱宸ュ崟鏁�</span>
+ <span>{{workOrderNums.amount || 0}}</span>
+ </div>
+ </div>
+ </el-card>
+ <el-card style="margin-top: 20px;">
+ <div class="xm_table">
+ <div class="xm_table_search">
+ <div>
+ <el-cascader style="width: 150px; margin-right: 15px;" v-model="form.areaIds" @change="changeSel" placeholder="璇烽�夋嫨宸ュ崟鍒嗙被" clearable
+ :options="cateList" :props="{
+ label: 'name',
+ value: 'id',
+ children: 'childCategoryList'
+ }" />
+ <el-select v-model="form.dealStatus" style="width: 150px; margin-right: 15px;" 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="getWorkOrderList">鏌ヨ</el-button>
+ <el-button @click="clear">娓呯┖</el-button>
+ </div>
+ <el-button type="primary" @click="$refs.operaYwWorkorderWindow.open('鏂板缓宸ュ崟')">鏂板宸ュ崟</el-button>
+ </div>
+ <el-table
+ :data="tableData"
+ border
+ v-lading="loading"
+ style="width: 100%">
+ <el-table-column
+ prop="categoryName"
+ label="宸ュ崟鍒嗙被">
+ </el-table-column>
+ <el-table-column
+ label="鎶ヤ慨鍖哄煙">
+ <template v-slot="scope">
+ <span>{{ scope.row.buildingName }} / {{ scope.row.areaType == 0 ? scope.row.roomNum : scope.row.floorName
+ }}</span>
+ </template>
+ </el-table-column>
+ <el-table-column
+ prop="creatorName"
+ label="涓婃姤浜�">
+ </el-table-column>
+ <el-table-column
+ prop="createDate"
+ label="涓婃姤鏃堕棿">
+ </el-table-column>
+ <el-table-column
+ prop="dealUserName"
+ label="澶勭悊浜�">
+ </el-table-column>
+ <el-table-column
+ label="宸ュ崟鐘舵��">
+ <template slot-scope="{row}">
+ <span v-if="row.dealStatus === 0">寰呮寚娲�</span>
+ <span v-if="row.dealStatus === 1">宸叉寚娲�</span>
+ <span v-if="row.dealStatus === 2">宸插鐞�</span>
+ </template>
+ </el-table-column>
+ <el-table-column
+ label="鎿嶄綔">
+ <template slot-scope="{row}">
+ <el-button type="text" @click="handleDetail(row)">鏌ョ湅璇︽儏</el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ <div class="xm_table_f">
+ <el-pagination
+ @size-change="handleSizeChange"
+ @current-change="handleCurrentChange"
+ :current-page="page"
+ :page-sizes="[10, 20, 30, 40]"
+ :page-size="pageTotal"
+ layout="total, sizes, prev, pager, next, jumper"
+ :total="total">
+ </el-pagination>
+ </div>
+ </div>
+ </el-card>
+ </div>
+ </el-tab-pane>
+ <el-tab-pane label="璁惧淇℃伅" name="third" v-if="[0,1,2,3].includes(lv)">
<div class="xm">
<div class="xm_chat">
<el-card class="xm_chat_row">
@@ -507,122 +565,55 @@
<div class="xm_table">
<div class="xm_table_search">
<div class="xm_table_search_left">
- <el-input v-model="input" placeholder="璇疯緭鍏ヨ澶囧悕绉�/缂栫爜" style="width: 200px; margin-right: 15px;"></el-input>
- <el-select v-model="value" style="width: 200px; margin-right: 15px;" placeholder="璁惧鐘舵��">
- <el-option
- v-for="item in options"
- :key="item.value"
- :label="item.label"
- :value="item.value">
- </el-option>
+ <el-input v-model="form.name" placeholder="璇疯緭鍏ヨ澶囧悕绉�/缂栫爜" style="width: 150px; margin-right: 15px;"></el-input>
+ <el-select v-model="form.status" style="width: 150px; margin-right: 15px;" placeholder="璁惧鐘舵��">
+ <el-option label="姝e父" :value="0"></el-option>
+ <el-option label="鎹熷潖" :value="1"></el-option>
+ <el-option label="鎶ュ簾" :value="2"></el-option>
</el-select>
- <el-button type="primary">鏌ヨ</el-button>
- <el-button>娓呯┖</el-button>
+ <el-button type="primary" @click="getDevicePage">鏌ヨ</el-button>
+ <el-button @click="clear">娓呯┖</el-button>
</div>
- <el-button type="primary">鏂板</el-button>
+ <el-button type="primary" @click="handleEdit">鏂板</el-button>
</div>
<el-table
:data="tableData"
border
+ v-loading="loading"
style="width: 100%">
<el-table-column
- prop="date"
- label="宸ュ崟鍒嗙被">
+ label="璁惧缂栫爜">
+ <template slot-scope="{row}">
+ <el-button type="text">{{row.code}}</el-button>
+ </template>
</el-table-column>
<el-table-column
prop="name"
- label="鎶ヤ慨鍖哄煙">
+ label="璁惧鍚嶇О">
</el-table-column>
<el-table-column
- prop="address"
- label="涓婃姤浜�">
+ prop="categoryName"
+ label="璁惧鍒嗙被">
</el-table-column>
<el-table-column
- prop="address"
- label="涓婃姤鏃堕棿">
+ prop="modelNo"
+ label="璁惧鍨嬪彿">
</el-table-column>
<el-table-column
- prop="address"
- label="澶勭悊浜�">
+ prop="realName"
+ label="璁惧绠$悊鍛�">
</el-table-column>
<el-table-column
- prop="address"
- label="宸ュ崟鐘舵��">
+ prop="supplier"
+ label="璁惧渚涘簲鍟�">
</el-table-column>
<el-table-column
- prop="address"
- label="鎿嶄綔">
- </el-table-column>
- </el-table>
- <div class="xm_table_f">
- <el-pagination
- @size-change="handleSizeChange"
- @current-change="handleCurrentChange"
- :current-page="page"
- :page-sizes="[10, 20, 30, 40]"
- :page-size="pageTotal"
- layout="total, sizes, prev, pager, next, jumper"
- :total="total">
- </el-pagination>
- </div>
- </div>
- </el-card>
- </div>
- </el-tab-pane>
- <el-tab-pane label="璧勪骇淇℃伅" name="fourth">
- <div class="xm">
- <el-card>
- <div slot="header" class="clearfix">
- <span>璧勪骇娓呭崟</span>
- </div>
- <div class="xm_table">
- <div class="xm_table_search">
- <div class="xm_table_search_left">
- <el-input v-model="input" placeholder="璇疯緭鍏ヨ祫浜у悕绉�/缂栫爜" style="width: 200px; margin-right: 15px;"></el-input>
- <el-select v-model="value" style="width: 200px; margin-right: 15px;" placeholder="璧勪骇鍒嗙被">
- <el-option
- v-for="item in options"
- :key="item.value"
- :label="item.label"
- :value="item.value">
- </el-option>
- </el-select>
- <el-button type="primary">鏌ヨ</el-button>
- <el-button>娓呯┖</el-button>
- </div>
- <el-button type="primary">鏂板</el-button>
- </div>
- <el-table
- :data="tableData"
- border
- style="width: 100%">
- <el-table-column
- prop="date"
- label="璧勪骇缂栫爜">
- </el-table-column>
- <el-table-column
- prop="name"
- label="璧勪骇鍚嶇О">
- </el-table-column>
- <el-table-column
- prop="address"
- label="鏉$爜">
- </el-table-column>
- <el-table-column
- prop="address"
- label="鍝佺墝">
- </el-table-column>
- <el-table-column
- prop="address"
- label="瑙勬牸鍨嬪彿">
- </el-table-column>
- <el-table-column
- prop="address"
- label="鍗曚綅">
- </el-table-column>
- <el-table-column
- prop="address"
- label="搴撳瓨鏁伴噺">
+ label="璁惧鐘舵��">
+ <template slot-scope="{row}">
+ <span v-if="row.status === 0">姝e父</span>
+ <span v-if="row.status === 1">鎹熷潖</span>
+ <span v-if="row.status === 2">鎶ュ簾</span>
+ </template>
</el-table-column>
</el-table>
<div class="xm_table_f">
@@ -644,56 +635,37 @@
</div>
</div>
</div>
+ <!-- 鏂板缓宸ュ崟 -->
+ <OperaYwWorkorderWindow ref="operaYwWorkorderWindow" />
+ <!-- 宸ュ崟璇︽儏 -->
+ <Detail v-if="showDetail" ref="DetailRef" @close="showDetail = false" />
+ <!-- 鏂板缓璁惧 -->
+ <Edit v-if="showEdit1" ref="EditRef" @success="getDevicePage" @close="showEdit1 = false" />
</div>
</template>
<script>
import * as echarts from 'echarts';
+ import { tree, getProjectById } from '@/api/project/ywProject'
+ import { getRoomContract, getRoomStatusList, detailById as roomDetailById } from '@/api/project/ywRoom'
+ import { fetchList } from '@/api/contract'
+ import OperaYwWorkorderWindow from '../workorder/components/OperaYwWorkorderWindow'
+ import { fetchList as getCateList } from '@/api/business/category'
+ import { getDataVO, fetchList as workderList } from '@/api/workorder/ywWorkorder'
+ import { detailById } from '@/api/project/ywBuilding'
+ import Detail from '../workorder/components/detail'
+ import { fetchList as devicePage, getDeviceCateData, getDeviceStatus } from '@/api/Inspection/device'
+ import Edit from '../operation/components/deviceEdit'
export default {
name: 'index',
+ components: { OperaYwWorkorderWindow, Detail, Edit },
data() {
return {
- input: '',
+ showDetail: false,
+ showEdit1: false,
+ filterText: '',
tableData: [],
- data: [{
- label: '涓�绾� 1',
- children: [{
- label: '浜岀骇 1-1',
- children: [{
- label: '涓夌骇 1-1-1'
- }]
- }]
- }, {
- label: '涓�绾� 2',
- children: [{
- label: '浜岀骇 2-1',
- children: [{
- label: '涓夌骇 2-1-1'
- }]
- }, {
- label: '浜岀骇 2-2',
- children: [{
- label: '涓夌骇 2-2-1'
- }]
- }]
- }, {
- label: '涓�绾� 3',
- children: [{
- label: '浜岀骇 3-1',
- children: [{
- label: '涓夌骇 3-1-1'
- }]
- }, {
- label: '浜岀骇 3-2',
- children: [{
- label: '涓夌骇 3-2-1'
- }]
- }]
- }],
- defaultProps: {
- children: 'children',
- label: 'label'
- },
+ houseList: [],
activeName: 'first',
total: 0,
pageTotal: 10,
@@ -701,66 +673,357 @@
options: [{
value: '閫夐」1',
label: '榛勯噾绯�'
- }, {
- value: '閫夐」2',
- label: '鍙岀毊濂�'
- }, {
- value: '閫夐」3',
- label: '铓典粩鐓�'
- }, {
- value: '閫夐」4',
- label: '榫欓』闈�'
- }, {
- value: '閫夐」5',
- label: '鍖椾含鐑ら腑'
}],
- value: ''
+ value: '',
+ form: {
+ name: '',
+ status: '',
+ project: '',
+ buildingId: '',
+ floorId: '',
+ roomId: '',
+ code: '',
+ areaIds: [],
+ cateId: '',
+ dealStatus: ''
+ },
+ title: '',
+ cateList: [],
+ deviceList: [],
+ categaryList: [],
+ roomStatus: [],
+ projectInfo: {},
+ projectNums: {},
+ workOrderNums: {},
+ buildingInfo: {},
+ roomInfo: {},
+ loading: false,
+ lv: 0,
+ leaseStatus: ''
}
},
created () {
- this.$nextTick(() => {
- this.reand()
- this.reand1()
- })
+ this.getHouseTree()
+ },
+ watch: {
+ filterText(val) {
+ this.$refs.tree.filter(val);
+ }
},
methods: {
+ nodeClick(e) {
+ this.tableData = []
+ this.pageSize = 10
+ this.page = 1
+ this.form.project = ''
+ this.form.buildingId = ''
+ this.form.floorId = ''
+ this.form.roomId = ''
+ this.leaseStatus = ''
+ this.lv = e.lv
+ this.title = e.name
+ if (e.lv === 0) {
+ this.activeName = 'first'
+ this.form.project = e.id
+ this.getProjectByIds()
+ } else if (e.lv === 1) {
+ this.activeName = 'house'
+ this.form.buildingId = e.id
+ this.getRoomStatusLists()
+ } else if (e.lv === 2) {
+ this.activeName = 'house'
+ this.form.floorId = e.id
+ this.getRoomStatusLists()
+ } else if (e.lv === 3) {
+ this.activeName = 'houseinfo'
+ this.form.roomId = e.id
+ this.leaseStatus = e.leaseStatus
+ this.roomDetailByIds()
+ }
+ },
+ // 鎼滅储鏍�
+ filterNode(value, data) {
+ if (!value) return true;
+ return data.name.indexOf(value) !== -1;
+ },
+ // 鍒ゆ柇鎴挎�佸搴�
+ ifWidth(num) {
+ if (num >= 0 && num <= 100) {
+ return '150px'
+ } else if (num >= 101 && num <= 200) {
+ return '180px'
+ } else if (num >= 201 && num <= 300) {
+ return '210px'
+ } else if (num >= 301 && num <= 400) {
+ return '240px'
+ } else if (num >= 401 && num <= 500) {
+ return '270px'
+ } else {
+ return '300px'
+ }
+ },
+ // 鍒ゆ柇鎴挎�佽儗鏅壊
+ ifBackground(type) {
+ if (type === 0) {
+ return '#F7F7F7'
+ } else if (type === 1) {
+ return 'rgba(0,186,146,0.14)'
+ } else if (type === 2) {
+ return 'rgba(255,158,0,0.14)'
+ }
+ },
+ // 鑾峰彇鎴挎簮璇︽儏
+ roomDetailByIds() {
+ roomDetailById(this.form.roomId)
+ .then(res => {
+ this.roomInfo = res
+ })
+ },
+ // 鑾峰彇妤煎畤璇︽儏
+ getDetailById() {
+ detailById(this.form.buildingId)
+ .then(res => {
+ console.log(res)
+ this.buildingInfo = res
+ })
+ },
+ // 鎴挎�佹暟鎹�
+ getRoomStatusLists() {
+ getRoomStatusList({
+ buildingId: this.form.buildingId,
+ floor: this.form.floorId
+ }).then(res => {
+ this.roomStatus = res
+ })
+ },
+ // 鑾峰彇璁惧鐘舵��
+ getDevice() {
+ getDeviceStatus({
+ projectId: this.form.project,
+ buildingId: this.form.buildingId,
+ floorId: this.form.floorId,
+ roomId: this.form.roomId
+ })
+ .then(res => {
+ this.$nextTick(() => {
+ this.deviceList = [
+ { value: res.workAmount || 0, name: '姝e父' },
+ { value: res.exceptionAmount || 0, name: '寮傚父' },
+ { value: res.errAmount || 0, name: '鎶ュ簾' }
+ ]
+ this.reand()
+ })
+ })
+ },
+ // 璁惧鏁伴噺鍒嗗竷缁熻
+ getDeviceCateDatas() {
+ getDeviceCateData({
+ projectId: this.form.project,
+ buildingId: this.form.buildingId,
+ floorId: this.form.floorId,
+ roomId: this.form.roomId
+ }).then(res => {
+ this.categaryList = res
+ this.$nextTick(() => {
+ this.reand1()
+ })
+ })
+ },
+ handleEdit(row) {
+ this.showEdit1 = true
+ this.$nextTick(() => {
+ this.$refs.EditRef.isShowModal = true
+ })
+ },
+ // 鑾峰彇璁惧鍒嗛〉
+ getDevicePage() {
+ this.loading = true
+ devicePage({
+ capacity: this.pageTotal,
+ page: this.page,
+ model: {
+ projectId: this.form.project,
+ buildingId: this.form.buildingId,
+ floorId: this.form.floorId,
+ roomId: this.form.roomId,
+ status: this.form.status,
+ name: this.form.name
+ }
+ }).then(res => {
+ this.tableData = res.records
+ this.total = res.total
+ }).finally(() => {
+ this.loading = false
+ })
+ },
+ handleDetail(row) {
+ this.showDetail = true
+ this.$nextTick(() => {
+ this.$refs.DetailRef.visible = true
+ this.$refs.DetailRef.id = row.id
+ this.$refs.DetailRef.getDetail()
+ })
+ },
+ // 鑾峰彇宸ュ崟鍒楄〃
+ getWorkOrderList() {
+ this.loading = true
+ workderList({
+ capacity: this.pageTotal,
+ page: this.page,
+ model: {
+ projectId: this.form.project,
+ buildingId: this.form.buildingId,
+ floorId: this.form.floorId,
+ roomId: this.form.roomId,
+ dealStatus: this.form.dealStatus,
+ cateId: this.form.cateId
+ }
+ }).then(res => {
+ this.tableData = res.records
+ this.total = res.total
+ }).finally(() => {
+ this.loading = false
+ })
+ },
+ getCate() {
+ getCateList({
+ model: { type: 3 },
+ capacity: 1000,
+ page: 1,
+ }).then(res => {
+ this.cateList = res.records || []
+ })
+ },
+ // 鑾峰彇椤圭洰淇℃伅
+ getProjectByIds() {
+ getProjectById(this.form.project)
+ .then(res => {
+ this.projectInfo = res
+ })
+ this.getGK()
+ this.getFetchList()
+ },
+ //椤圭洰姒傚喌
+ getGK() {
+ getRoomContract({
+ projectId: this.form.project,
+ buildingId: this.form.buildingId,
+ floorId: this.form.floorId,
+ roomId: this.form.roomId,
+ }).then(res => {
+ this.projectNums = res
+ })
+ },
+ changeSel(e) {
+ if (e && e.length == 2) {
+ this.$set(this.form, 'cateId', e[1])
+ } else {
+ this.$set(this.form, 'cateId', '')
+ }
+ },
+ // 鑾峰彇宸ュ崟鏁伴噺
+ getDataVOs() {
+ let queryType = ''
+ let queryId = ''
+ if (this.lv === 0) {
+ queryType = 1
+ queryId = this.form.project
+ } else if (this.lv === 2) {
+ queryType = 2
+ queryId = this.form.floorId
+ } else if (this.lv === 3) {
+ queryType = 3
+ queryId = this.form.roomId
+ }
+ getDataVO({
+ queryType,
+ queryId
+ }).then(res => {
+ this.workOrderNums = res
+ })
+ },
+ clear() {
+ this.form.code = ''
+ this.form.name = ''
+ this.form.status = ''
+ this.form.dealStatus = ''
+ this.form.cateId = ''
+ this.form.areaIds = []
+ if (['first', 'louyu', 'houseinfo'].includes(this.activeName)) {
+ this.getFetchList()
+ } else if (this.activeName === 'second') {
+ this.getWorkOrderList()
+ } else if (this.activeName === 'third') {
+ this.getDevicePage()
+ }
+ },
+ // 鑾峰彇褰撳墠鍦ㄧ鍚堝悓
+ getFetchList() {
+ this.loading = true
+ fetchList({
+ capacity: this.pageSize,
+ page: this.page,
+ model: {
+ projectId: this.form.project,
+ buildingId: this.form.buildingId,
+ floorId: this.form.floorId,
+ roomId: this.form.roomId,
+ code: this.form.code
+ }
+ }).then(res => {
+ this.tableData = res.records
+ this.total = res.total
+ }).finally(() => {
+ this.loading = false
+ })
+ },
+ getHouseTree() {
+ tree({})
+ .then(res => {
+ this.addParamToArray(res)
+ this.form.project = res[0].id
+ this.title = res[0].name
+ this.houseList = res
+ this.getProjectByIds()
+ })
+ },
+ addParamToArray(arr) {
+ for (let i = 0; i < arr.length; i++) {
+ const currentItem = arr[i].projectDataVOList
+ arr[i].idd = arr[i].lv + '-' + arr[i].id
+ if (currentItem.length > 0) {
+ this.addParamToArray(currentItem)
+ }
+ }
+ },
reand() {
var chartDom = document.getElementById('chat1');
var myChart = echarts.init(chartDom);
var option;
option = {
+ title: {
+ text: '璁惧鐘舵��'
+ },
tooltip: {
trigger: 'item'
},
legend: {
- top: '5%',
- left: 'center'
+ left: 'right',
+ top: 'middle',
+ width: '80'
},
series: [
{
- name: 'Access From',
+ name: '璁惧鐘舵��',
type: 'pie',
radius: ['40%', '80%'],
- avoidLabelOverlap: false,
label: {
- show: false,
- position: 'center'
+ show: true,
+ position: 'center',
+ fontWeight: 'bold',
+ fontSize: 22
},
- emphasis: {
- label: {
- show: true,
- fontSize: 40,
- fontWeight: 'bold'
- }
- },
- labelLine: {
- show: false
- },
- data: [
- { value: 1048, name: '姝e父' },
- { value: 735, name: '寮傚父' },
- { value: 580, name: '鎶ュ簾' }
- ]
+ data: this.deviceList
}
]
};
@@ -770,7 +1033,6 @@
var chartDom = document.getElementById('chat2');
var myChart = echarts.init(chartDom);
var option;
- // There should not be negative values in rawData
const rawData = [
[100, 302, 301, 334, 390, 330, 320],
[320, 132, 101, 134, 90, 230, 210],
@@ -786,12 +1048,6 @@
}
totalData.push(sum);
}
- const grid = {
- left: 100,
- right: 100,
- top: 50,
- bottom: 50
- };
const series = [
'Direct',
'Mail Ad',
@@ -804,43 +1060,100 @@
type: 'bar',
stack: 'total',
barWidth: '60%',
- label: {
- show: true,
- formatter: (params) => Math.round(params.value * 1000) / 10 + '%'
- },
data: rawData[sid].map((d, did) =>
totalData[did] <= 0 ? 0 : d / totalData[did]
)
};
});
+ let seriesArr = this.categaryList.map(item => {
+ return {
+ name: item.cateName,
+ type: 'bar',
+ stack: 'total',
+ barWidth: '60%',
+ data: item.ywDeviceCateDataVOList.map((child) =>
+ child.deviceAmount
+ )
+ }
+ })
+ let xAxisData = this.categaryList.map(item => item.cateName)
+ console.log(series)
+ console.log(seriesArr)
+ console.log(xAxisData)
option = {
- legend: {
- selectedMode: false
+ title: {
+ text: '璁惧鏁伴噺鍒嗙被缁熻'
},
- grid,
+ grid: {
+ left: 50,
+ right: 50,
+ top: 50,
+ bottom: 50
+ },
+ tooltip: {
+ trigger: 'axis',
+ axisPointer: {
+ type: 'shadow'
+ }
+ },
yAxis: {
type: 'value'
},
xAxis: {
type: 'category',
- data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
+ data: xAxisData
},
- series
+ series: seriesArr
};
option && myChart.setOption(option);
},
handleCurrentChange(page) {
this.page = page
+ if (['first', 'louyu', 'houseinfo'].includes(this.activeName)) {
+ this.getFetchList()
+ } else if (this.activeName === 'second') {
+ this.getWorkOrderList()
+ } else if (tab.name === 'third') {
+ this.getDevicePage()
+ }
},
handleSizeChange(pageTotal) {
this.pageTotal = pageTotal
+ if (['first', 'louyu', 'houseinfo'].includes(this.activeName)) {
+ this.getFetchList()
+ } else if (this.activeName === 'second') {
+ this.getWorkOrderList()
+ } else if (tab.name === 'third') {
+ this.getDevicePage()
+ }
},
- handleNodeClick(data) {
- console.log(data);
- },
- handleClick(tab, event) {
- console.log(tab, event);
+ handleClick(tab) {
+ this.page = 1
+ this.pageSize = 10
+ this.activeName = tab.name
+ this.tableData = []
+ if (tab.name === 'first') {
+ this.getFetchList()
+ } else if (tab.name === 'second') {
+ this.getDataVOs()
+ this.getCate()
+ this.getWorkOrderList()
+ } else if (tab.name === 'third') {
+ this.getDevicePage()
+ this.getDevice()
+ this.getDeviceCateDatas()
+ } else if (tab.name === 'louyu') {
+ this.getGK()
+ this.getFetchList()
+ this.getDetailById()
+ } else if (tab.name === 'house') {
+ this.getRoomStatusLists()
+ } else if (tab.name === 'houseinfo') {
+ this.roomDetailByIds()
+ } else if (tab.name === 'project') {
+ this.getFetchList()
+ }
}
}
}
@@ -866,6 +1179,10 @@
display: flex;
flex-direction: column;
background: #ffffff;
+ ::v-deep .el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content{
+ background-color: #f0f7ff;
+ color: rgb(65, 107, 255)
+ }
}
.right {
flex: 1;
@@ -875,10 +1192,12 @@
width: 100%;
padding: 20px;
box-sizing: border-box;
+ display: flex;
+ align-items: center;
+ background: #ffffff;
font-size: 16px;
font-weight: bold;
color: black;
- background: #ffffff;
}
.right_cate {
width: 100%;
@@ -893,7 +1212,6 @@
width: 100%;
display: flex;
flex-direction: column;
- align-items: self-end;
.xm_house_list {
width: 100%;
display: flex;
@@ -903,12 +1221,12 @@
flex-shrink: 0;
width: 100px;
display: flex;
- margin-right: 20px;
+ margin-right: 15px;
flex-direction: column;
.xm_house_list_left_row {
width: 100px;
height: 100px;
- background: rgba(242, 242, 242, 1);
+ background: #F4F7FC;
padding: 20px 0;
box-sizing: border-box;
margin-bottom: 20px;
@@ -921,56 +1239,66 @@
}
span {
&:nth-child(1) {
+ font-weight: 500;
font-size: 18px;
- color: #333333;
- font-weight: 400;
+ color: #000000;
}
&:nth-child(2) {
- font-size: 12px;
- color: #929292;
+ font-weight: 400;
+ font-size: 14px;
+ color: #999999;
+ margin-top: 10px;
}
}
}
}
.xm_house_list_right {
- width: calc(100% - 130px);
display: flex;
- flex-direction: column;
- .item {
- width: calc(100% - 130px);
+ align-items: center;
+ .xm_house_list_right_row {
+ height: 100px;
+ padding: 12px 15px;
+ box-sizing: border-box;
display: flex;
- align-items: center;
- margin-bottom: 20px;
+ flex-direction: column;
+ justify-content: space-between;
+ margin-right: 10px;
&:last-child {
- margin-bottom: 0;
+ margin: 0 !important;
}
- .xm_house_list_right_row {
- height: 100px;
- width: 300px;
- background: rgba(198, 224, 167, 0.34509803921568627);
- padding: 10px 0;
- box-sizing: border-box;
+ .ft {
display: flex;
align-items: center;
- flex-direction: column;
- justify-content: space-between;
span {
- font-size: 14px;
- color: #000000;
+ &:nth-child(1) {
+ font-weight: 500;
+ font-size: 18px;
+ color: #000000;
+ }
+ &:nth-child(2) {
+ font-weight: 400;
+ font-size: 14px;
+ color: #999999;
+ }
}
- .xm_house_list_right_row_info {
- display: flex;
- flex-direction: column;
- span {
- &:nth-child(1) {
- color: #000000;
- font-size: 14px;
- }
- &:nth-child(2) {
- color: #A5A5A5;
- font-size: 12px;
- margin-top: 3px;
- }
+ }
+ .xm_house_list_right_row_day {
+ font-weight: 400;
+ font-size: 13px;
+ color: #999999;
+ }
+ .xm_house_list_right_row_info {
+ display: flex;
+ flex-direction: column;
+ span {
+ &:nth-child(1) {
+ color: #000000;
+ font-size: 14px;
+ }
+ &:nth-child(2) {
+ color: #A5A5A5;
+ font-size: 12px;
+ margin-top: 3px;
}
}
}
@@ -981,18 +1309,20 @@
display: flex;
align-items: center;
.xm_house_tips_row {
- margin-left: 30px;
display: flex;
align-items: center;
+ margin-right: 30px;
.xm_house_tips_row_d {
- width: 10px;
- height: 10px;
+ width: 20px;
+ height: 20px;
background: orange;
- margin-right: 5px;
+ margin-right: 8px;
+ border-radius: 2px;
}
span {
- font-size: 16px;
- color: black;
+ font-weight: 400;
+ font-size: 13px;
+ color: #333333;
}
}
}
diff --git a/admin/src/views/stock/asset.vue b/admin/src/views/stock/asset.vue
index d3880e6..8f78846 100644
--- a/admin/src/views/stock/asset.vue
+++ b/admin/src/views/stock/asset.vue
@@ -5,16 +5,27 @@
<el-button type="primary" @click="$refs.newWarehouse.open('鏂板缓浠撳簱鍚嶇О')">鏂板</el-button>
</div>
<el-table v-loading="loading" :data="list" stripe>
- <el-table-column prop="platformName" label="浠撳簱鍚嶇О" min-width="120" show-overflow-tooltip />
- <el-table-column prop="platformGroupName" label="璐熻矗浜�" min-width="100" show-overflow-tooltip />
- <el-table-column prop="carCodeFront" label="浠撳簱浣嶇疆" min-width="100" show-overflow-tooltip />
- <el-table-column prop="carCodeBack" label="鎺掑簭鐮�" min-width="110" show-overflow-tooltip />
- <el-table-column prop="param1" label="澶囨敞" min-width="120" show-overflow-tooltip />
- <el-table-column prop="param2" label="鐘舵��" min-width="90" show-overflow-tooltip />
+ <el-table-column prop="name" label="浠撳簱鍚嶇О" min-width="120" show-overflow-tooltip />
+ <el-table-column prop="userName" label="璐熻矗浜�" min-width="100" show-overflow-tooltip />
+ <el-table-column prop="position" label="浠撳簱浣嶇疆" min-width="100" show-overflow-tooltip />
+ <el-table-column prop="sortnum" label="鎺掑簭鐮�" min-width="110" show-overflow-tooltip />
+ <el-table-column prop="remark" label="澶囨敞" min-width="120" show-overflow-tooltip />
+ <el-table-column label="鐘舵��" min-width="90">
+ <template v-slot="{ row }">
+ <el-switch
+ v-model="row.status"
+ active-color="#13ce66"
+ inactive-color="#ff4949"
+ @change="changeStatus($event, row)"
+ :active-value="0"
+ :inactive-value="1">
+ </el-switch>
+ </template>
+ </el-table-column>
<el-table-column prop="workTime" label="鎿嶄綔" min-width="100" show-overflow-tooltip>
<template v-slot="{ row }">
- <span class="primaryColor pointer">鏌ョ湅璇︽儏</span>
- <span class="red pointer">鍒犻櫎</span>
+ <el-button type="text" @click="$refs.newWarehouse.open('鏂板缓浠撳簱鍚嶇О', row)">缂栬緫</el-button>
+ <el-button type="text" @click="dele(row.id)">鍒犻櫎</el-button>
</template>
</el-table-column>
</el-table>
@@ -32,7 +43,7 @@
import dayjs from 'dayjs'
import duration from 'dayjs/plugin/duration'
dayjs.extend(duration)
-import { platformLogPage, getPlatformGroupList } from '@/api'
+import { fetchList, deleteById, updateStatusById } from '@/api/ywWarehouse'
export default {
components: {
Pagination,
@@ -53,15 +64,18 @@
queryFormConfig: {
formItems: [
{
- filed: 'carCodeFront',
+ filed: 'name',
type: 'input',
label: '浠撳簱鍚嶇О',
},
{
- filed: 'platformGroupId',
+ filed: 'status',
type: 'select',
label: '浠撳簱鐘舵��',
- options: []
+ options: [
+ { value: 0, label: '鍚敤' },
+ { value: 1, label: '绂佺敤' }
+ ]
}
],
online: true
@@ -69,50 +83,21 @@
}
},
created() {
- // this.getList()
- // this.getGroupList()
+ this.getList()
},
methods: {
- handleSub() {
- this.$refs.ruleForm.validate((valid) => {
- if (valid) {
- alert('submit!')
- }
- })
- },
- handleEx() { },
- getGroupList() {
- getPlatformGroupList({ queryData: 0, queryType: 0 }).then(res => {
- this.queryFormConfig.formItems[1].options = res.map(i => {
- return {
- value: i.id,
- label: i.name
- }
- })
- // this.queryFormConfig.formItems[1].options.unshift({ value: '', label: '鍏ㄩ儴鏈堝彴缁�' })
- })
- },
getList(page) {
const { pagination, filters } = this
this.loading = true
- platformLogPage({
+ fetchList({
model: {
- ...filters,
- queryStatus: '6,7,8',
- beginWorkDateStart: filters.selDate && filters.selDate.length > 0 ? filters.selDate[0] : null,
- beginWorkDateEnd: filters.selDate && filters.selDate.length > 0 ? filters.selDate[1] : null,
+ ...filters
},
- sorts: [{ direction: 'DESC', property: 'param1' }],
capacity: pagination.pageSize,
page: page || pagination.page,
}).then(res => {
this.loading = false
this.list = res.records || []
- this.list.forEach(item => {
- item.inTypeTemp = item.inType == 0 ? '鏁存墭鐩�' : '浠剁儫'
- item.taskOrigin = 'WMS鑾峰彇'
- item.workTime = dayjs.duration(item.param3, 'seconds').format('H鏃秏鍒唖绉�')
- })
this.pagination.total = res.total || 0
}, () => {
this.loading = false
@@ -124,6 +109,26 @@
this.pagination.page = 1
this.getList()
},
+ changeStatus(e, row) {
+ updateStatusById({ id: row.id, status: e })
+ .then(res => {
+ this.getList()
+ })
+ },
+ dele(id) {
+ this.$confirm('鏄惁纭鍒犻櫎璇ヤ粨搴�?', '鎻愮ず', {
+ confirmButtonText: '纭畾',
+ cancelButtonText: '鍙栨秷',
+ type: 'warning'
+ }).then(() => {
+ deleteById(id)
+ .then(res => {
+ this.getList()
+ })
+ }).catch(() => {
+
+ });
+ },
handleSizeChange(capacity) {
this.pagination.pageSize = capacity
this.getList()
diff --git a/admin/src/views/stock/assetCate.vue b/admin/src/views/stock/assetCate.vue
index 375678f..cfa31b6 100644
--- a/admin/src/views/stock/assetCate.vue
+++ b/admin/src/views/stock/assetCate.vue
@@ -1,16 +1,13 @@
<template>
<TableLayout>
<template v-slot:table-wrap>
- <ul class="toolbar" v-permissions="['business:category:create', 'business:category:delete']">
- <li><el-button type="primary" @click="handleEdit()" icon="el-icon-plus"
- v-permissions="['business:category:create']">鏂板缓</el-button></li>
- <li v-permissions="['business:category:exportExcel']"><el-button type="primary"
- @click="exportExcel">瀵煎嚭</el-button></li>
+ <ul class="toolbar">
+ <li><el-button type="primary" @click="handleEdit()" icon="el-icon-plus">鏂板缓</el-button></li>
+ <li><el-button type="primary" @click="exportExcel">瀵煎嚭</el-button></li>
</ul>
<el-table row-key="id" :tree-props="{ children: 'childCategoryList' }" v-loading="isWorking.search"
:data="dataList" stripe @selection-change="handleSelectionChange">
<el-table-column prop="name" label="璧勪骇鍒嗙被" min-width="100px"></el-table-column>
- <!-- <el-table-column prop="parentName" label="鎵�灞炲垎绫�" min-width="100px"></el-table-column> -->
<el-table-column prop="sortnum" label="鎺掑簭鐮�" min-width="100px"></el-table-column>
<el-table-column v-if="containPermissions(['business:category:update', 'business:category:delete'])" label="鎿嶄綔"
min-width="120" fixed="right">
@@ -46,6 +43,9 @@
filters: {
parentId: ''
},
+ form: {
+ type: 7
+ },
isShowEdit: false,
loading: false,
pagination: {
@@ -58,7 +58,7 @@
},
created() {
this.config({
- module: '杞﹁締淇℃伅琛�',
+ module: '鍒嗙被淇℃伅琛�',
api: '/business/category',
'field.id': 'id',
'field.main': 'id'
@@ -93,7 +93,7 @@
const { pagination, filters } = this
this.loading = true
fetchList({
- model: { ...filters, type: 5 },
+ model: { ...filters, type: 7 },
capacity: pagination.pageSize,
page: pagination.page,
}).then(res => {
diff --git a/admin/src/views/stock/assetList.vue b/admin/src/views/stock/assetList.vue
index b3b5894..1b28a25 100644
--- a/admin/src/views/stock/assetList.vue
+++ b/admin/src/views/stock/assetList.vue
@@ -7,19 +7,30 @@
<el-button>瀵煎叆</el-button>
</div>
<el-table v-loading="loading" :data="list" stripe>
- <el-table-column prop="platformName" label="璧勪骇缂栫爜" min-width="100" show-overflow-tooltip />
- <el-table-column prop="platformGroupName" label="璧勪骇鍚嶇О" min-width="100" show-overflow-tooltip />
- <el-table-column prop="carCodeFront" label="鏉$爜" min-width="100" show-overflow-tooltip />
- <el-table-column prop="carCodeBack" label="鍝佺墝" min-width="100" show-overflow-tooltip />
- <el-table-column prop="param1" label="瑙勬牸鍨嬪彿" min-width="100" show-overflow-tooltip />
- <el-table-column prop="param2" label="鍗曚綅" min-width="70" show-overflow-tooltip />
- <el-table-column prop="param2" label="瀹夊叏搴撳瓨(涓嬮檺)" min-width="120" show-overflow-tooltip />
- <el-table-column prop="param2" label="瀹夊叏搴撳瓨(涓婇檺)" min-width="120" show-overflow-tooltip />
- <el-table-column prop="param2" label="鐘舵��" min-width="80" show-overflow-tooltip />
+ <el-table-column prop="code" label="璧勪骇缂栫爜" min-width="100" show-overflow-tooltip />
+ <el-table-column prop="name" label="璧勪骇鍚嶇О" min-width="100" show-overflow-tooltip />
+ <el-table-column prop="qrcode" label="鏉$爜" min-width="100" show-overflow-tooltip />
+ <el-table-column prop="brand" label="鍝佺墝" min-width="100" show-overflow-tooltip />
+ <el-table-column prop="attr" label="瑙勬牸鍨嬪彿" min-width="100" show-overflow-tooltip />
+ <el-table-column prop="unitName" label="鍗曚綅" min-width="70" show-overflow-tooltip />
+ <el-table-column prop="minStock" label="瀹夊叏搴撳瓨(涓嬮檺)" min-width="120" show-overflow-tooltip />
+ <el-table-column prop="maxStock" label="瀹夊叏搴撳瓨(涓婇檺)" min-width="120" show-overflow-tooltip />
+ <el-table-column label="鐘舵��" min-width="80">
+ <template v-slot="{ row }">
+ <el-switch
+ v-model="row.status"
+ active-color="#13ce66"
+ inactive-color="#ff4949"
+ @change="changeStatus($event, row)"
+ :active-value="0"
+ :inactive-value="1">
+ </el-switch>
+ </template>
+ </el-table-column>
<el-table-column prop="workTime" label="鎿嶄綔" min-width="100" show-overflow-tooltip>
<template v-slot="{ row }">
- <span class="primaryColor pointer">缂栬緫</span>
- <span class="red pointer">鍒犻櫎</span>
+ <el-button type="text" @click="$refs.newMaterial.open('缂栬緫鐗╂枡', {...row, cateArr: [row.parentCateId, row.cateId] })">缂栬緫</el-button>
+ <el-button type="text" @click="dele(row.id)">鍒犻櫎</el-button>
</template>
</el-table-column>
</el-table>
@@ -37,7 +48,7 @@
import dayjs from 'dayjs'
import duration from 'dayjs/plugin/duration'
dayjs.extend(duration)
-import { platformLogPage, getPlatformGroupList } from '@/api'
+import { fetchList, updateStatus, deleteById } from '@/api/ywMaterial'
export default {
components: {
Pagination,
@@ -58,77 +69,61 @@
queryFormConfig: {
formItems: [
{
- filed: 'carCodeFront',
+ filed: 'code',
type: 'input',
- label: '璧勪骇淇℃伅',
- placeholder: '璇疯緭鍏ヨ祫浜у悕绉�/缂栫爜'
+ label: '鍚嶇О/缂栫爜',
+ placeholder: '璇疯緭鍏ュ悕绉�/缂栫爜'
},
{
- filed: 'carCodeFront',
+ filed: 'attr',
type: 'input',
label: '瑙勬牸鍨嬪彿',
- },
- {
- filed: 'platformGroupId',
- type: 'select',
- label: '鎵�灞為」鐩�',
- options: []
}
- ],
- online: true
+ ]
}
}
},
created() {
- // this.getList()
- // this.getGroupList()
+ this.getList()
},
methods: {
- handleSub() {
- this.$refs.ruleForm.validate((valid) => {
- if (valid) {
- alert('submit!')
- }
- })
- },
- handleEx() { },
- getGroupList() {
- getPlatformGroupList({ queryData: 0, queryType: 0 }).then(res => {
- this.queryFormConfig.formItems[1].options = res.map(i => {
- return {
- value: i.id,
- label: i.name
- }
- })
- // this.queryFormConfig.formItems[1].options.unshift({ value: '', label: '鍏ㄩ儴鏈堝彴缁�' })
- })
- },
getList(page) {
const { pagination, filters } = this
this.loading = true
- platformLogPage({
+ fetchList({
model: {
- ...filters,
- queryStatus: '6,7,8',
- beginWorkDateStart: filters.selDate && filters.selDate.length > 0 ? filters.selDate[0] : null,
- beginWorkDateEnd: filters.selDate && filters.selDate.length > 0 ? filters.selDate[1] : null,
+ ...filters
},
- sorts: [{ direction: 'DESC', property: 'param1' }],
capacity: pagination.pageSize,
page: page || pagination.page,
}).then(res => {
this.loading = false
this.list = res.records || []
- this.list.forEach(item => {
- item.inTypeTemp = item.inType == 0 ? '鏁存墭鐩�' : '浠剁儫'
- item.taskOrigin = 'WMS鑾峰彇'
- item.workTime = dayjs.duration(item.param3, 'seconds').format('H鏃秏鍒唖绉�')
- })
this.pagination.total = res.total || 0
}, () => {
this.loading = false
})
},
+ dele(id) {
+ this.$confirm('鏄惁纭鍒犻櫎璇ョ墿鏂�?', '鎻愮ず', {
+ confirmButtonText: '纭畾',
+ cancelButtonText: '鍙栨秷',
+ type: 'warning'
+ }).then(() => {
+ deleteById(id)
+ .then(res => {
+ this.getList()
+ })
+ }).catch(() => {
+
+ });
+ },
+ changeStatus(e, row) {
+ updateStatus({ id: row.id, status: e })
+ .then(res => {
+ this.getList()
+ })
+ },
clear() {
this.filters = {}
this.pagination.pageSize = 10
diff --git a/admin/src/views/stock/check.vue b/admin/src/views/stock/check.vue
index eaebf2d..49018c2 100644
--- a/admin/src/views/stock/check.vue
+++ b/admin/src/views/stock/check.vue
@@ -2,41 +2,54 @@
<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="platformName" label="鐩樼偣鍗曞悕绉�" min-width="120" show-overflow-tooltip />
- <el-table-column prop="platformGroupName" label="鐩樼偣浠撳簱" min-width="100" show-overflow-tooltip />
- <el-table-column prop="carCodeFront" label="鐩樼偣鍛�" min-width="80" show-overflow-tooltip />
- <el-table-column prop="carCodeBack" label="鐩樼偣鏃ユ湡" min-width="110" show-overflow-tooltip />
- <el-table-column prop="param1" label="鍒涘缓浜�" min-width="80" show-overflow-tooltip />
- <el-table-column prop="param2" label="鍒涘缓鏃堕棿" min-width="140" show-overflow-tooltip />
- <el-table-column prop="workTime" label="鐩樼偣鐘舵��" min-width="80" show-overflow-tooltip />
+ <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="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">
+ <template v-slot="{ row }">
+ <span v-if="row.status === 0">鏈紑濮�</span>
+ <span v-if="row.status === 1">杩涜涓�</span>
+ <span v-if="row.status === 2">宸插畬鎴�</span>
+ <span v-if="row.status === 3">宸插彇娑�</span>
+ </template>
+ </el-table-column>
<el-table-column prop="workTime" label="鎿嶄綔" min-width="140" show-overflow-tooltip>
<template v-slot="{ row }">
- <span class="primaryColor pointer">鏌ョ湅璇︽儏</span>
- <span class="primaryColor pointer">鍙栨秷</span>
- <span class="primaryColor pointer">鍒犻櫎</span>
+ <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 { platformLogPage, getPlatformGroupList } from '@/api'
+import { fetchList, cancelById, deleteById } from '@/api/ywStocktaking'
export default {
components: {
Pagination,
- QueryForm
+ QueryForm,
+ NewInventory,
+ InventoryDetails
},
data() {
return {
@@ -52,15 +65,20 @@
queryFormConfig: {
formItems: [
{
- filed: 'carCodeFront',
+ filed: 'name',
type: 'input',
- label: '鐩樼偣鍗�',
+ label: '鐩樼偣鍗曞悕绉�',
},
{
- filed: 'platformGroupId',
+ filed: 'status',
type: 'select',
label: '鐩樼偣鐘舵��',
- options: []
+ options: [
+ { value: 0, label: '鏈紑濮�' },
+ { value: 1, label: '杩涜涓�' },
+ { value: 2, label: '宸插畬鎴�' },
+ { value: 3, label: '宸插彇娑�' }
+ ]
},
],
online: true
@@ -68,55 +86,54 @@
}
},
created() {
- // this.getList()
- // this.getGroupList()
+ this.getList()
},
methods: {
- handleSub() {
- this.$refs.ruleForm.validate((valid) => {
- if (valid) {
- alert('submit!')
- }
- })
- },
- handleEx() { },
- getGroupList() {
- getPlatformGroupList({ queryData: 0, queryType: 0 }).then(res => {
- this.queryFormConfig.formItems[1].options = res.map(i => {
- return {
- value: i.id,
- label: i.name
- }
- })
- // this.queryFormConfig.formItems[1].options.unshift({ value: '', label: '鍏ㄩ儴鏈堝彴缁�' })
- })
- },
getList(page) {
const { pagination, filters } = this
this.loading = true
- platformLogPage({
+ fetchList({
model: {
- ...filters,
- queryStatus: '6,7,8',
- beginWorkDateStart: filters.selDate && filters.selDate.length > 0 ? filters.selDate[0] : null,
- beginWorkDateEnd: filters.selDate && filters.selDate.length > 0 ? filters.selDate[1] : null,
+ ...filters
},
- sorts: [{ direction: 'DESC', property: 'param1' }],
capacity: pagination.pageSize,
page: page || pagination.page,
}).then(res => {
this.loading = false
this.list = res.records || []
- this.list.forEach(item => {
- item.inTypeTemp = item.inType == 0 ? '鏁存墭鐩�' : '浠剁儫'
- item.taskOrigin = 'WMS鑾峰彇'
- item.workTime = dayjs.duration(item.param3, 'seconds').format('H鏃秏鍒唖绉�')
- })
this.pagination.total = res.total || 0
}, () => {
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/AssetSel.vue b/admin/src/views/stock/components/AssetSel.vue
index afbbb23..d4bb919 100644
--- a/admin/src/views/stock/components/AssetSel.vue
+++ b/admin/src/views/stock/components/AssetSel.vue
@@ -1,35 +1,36 @@
<template>
- <GlobalWindow title="閫夋嫨鐗╂枡" :visible.sync="isShowModal" :confirm-working="isLoading" width="900px" @close="close"
+ <GlobalWindow title="閫夋嫨鐗╂枡" :visible.sync="isShowModal" :confirm-working="isLoading" width="1000px" @close="close"
@confirm="confirm">
<el-form ref="searchForm" :model="searchForm" label-width="100px" inline>
- <el-form-item prop="areaType" label="鐗╂枡淇℃伅">
- <el-input v-model="searchForm.aaa" placeholder="璇疯緭鍏ョ墿鏂欑紪鐮�/鍚嶇О" @keypress.enter.native="search"></el-input>
+ <el-form-item prop="code" label="鐗╂枡淇℃伅">
+ <el-input v-model="searchForm.code" placeholder="璇疯緭鍏ョ墿鏂欑紪鐮�/鍚嶇О" @keypress.enter.native="search"></el-input>
</el-form-item>
<el-form-item prop="areaIds" label="鐗╂枡鍒嗙被">
<el-cascader v-model="searchForm.areaIds" @change="changeSel" placeholder="璇烽�夋嫨鐗╂枡鍒嗙被" clearable
:options="cateList" :props="{
label: 'name',
value: 'id',
- children: 'childCategoryList'
+ children: 'childCategoryList',
+ checkStrictly: true
}"></el-cascader>
</el-form-item>
<span>
- <el-button type="primary" @click="getList">鎼滅储</el-button>
+ <el-button type="primary" @click="getList(1)">鎼滅储</el-button>
<el-button @click="reset">閲嶇疆</el-button>
</span>
</el-form>
<!-- -->
<el-table @selection-change="handleSelectionChange" :data="list" stripe>
<el-table-column type="selection" width="55" />
- <el-table-column prop="categoryName" label="鐗╂枡缂栫爜" min-width="100px"></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>
- <el-table-column prop="dealUserName" label="瑙勬牸鍨嬪彿" min-width="80px"></el-table-column>
- <el-table-column prop="dealUserName" label="鍗曚綅" min-width="80px"></el-table-column>
- <el-table-column prop="dealUserName" label="搴撳瓨" min-width="80px"></el-table-column>
+ <el-table-column prop="code" label="鐗╂枡缂栫爜" min-width="100px"></el-table-column>
+ <el-table-column prop="name" label="鐗╂枡鍚嶇О" min-width="80px"></el-table-column>
+ <el-table-column prop="qrcode" label="鏉$爜" min-width="100px"></el-table-column>
+ <el-table-column prop="brand" label="鍝佺墝" min-width="80px"></el-table-column>
+ <el-table-column prop="attr" label="瑙勬牸鍨嬪彿" min-width="80px"></el-table-column>
+ <el-table-column prop="unitName" label="鍗曚綅" min-width="80px"></el-table-column>
+ <el-table-column prop="maxStock" label="搴撳瓨" min-width="80px"></el-table-column>
</el-table>
- <Pagination @size-change="handleSizeChange" @current-change="getList" :pagination="pagination">
+ <Pagination class="mt10" @size-change="handleSizeChange" @current-change="getList" :pagination="pagination">
</Pagination>
</GlobalWindow>
</template>
@@ -38,6 +39,8 @@
import BaseOpera from '@/components/base/BaseOpera'
import GlobalWindow from '@/components/common/GlobalWindow'
import Pagination from '@/components/common/Pagination'
+import { fetchList } from '@/api/ywMaterial'
+import { ywStockPage } from '@/api/store/index'
import { fetchList as getCateList } from '@/api/business/category.js'
export default {
name: 'OperaCategoryWindow',
@@ -51,6 +54,8 @@
page: 1,
total: 0
},
+ isOut: false,
+ warehouseId: false,
list: [],
selList: [],
cateList: [],
@@ -64,7 +69,7 @@
}
},
created() {
- this.initData()
+ this.getCate()
},
methods: {
confirm() {
@@ -75,24 +80,39 @@
this.selList = val
},
getList(page) {
- const { pagination, searchForm } = this
+ const { pagination, searchForm, isOut, warehouseId } = this
this.listLoading = true
if(page){pagination.page = page}
- fetchList({
+ console.log('isOut', isOut);
+
+ let fn = isOut ? ywStockPage : fetchList
+ fn({
capacity: pagination.pageSize,
page: pagination.page,
- model: {...searchForm}
+ model: {...searchForm,status: 0, warehouseId}
}).then((res) => {
this.listLoading = false
this.list = res.records
this.pagination.total = res.total || 0
+ if(isOut){
+ this.list.forEach(item => {
+ item.brand = item.materialBrand
+ item.attr = item.materialAttr
+ item.name = item.materialName
+ item.id = item.materialId
+ item.code = item.materialCode
+ item.qrcode = item.materialQrcode
+ item.unitName = item.materialUnitName
+ item.maxStock = item.stock
+ })
+ }
}, () => {
this.listLoading = false
})
},
- initData() {
+ getCate() {
getCateList({
- model: { type: 3 },
+ model: { type: 7 },
capacity: 1000,
page: 1,
}).then(res => {
@@ -102,6 +122,10 @@
changeSel(e) {
if (e && e.length == 2) {
this.$set(this.searchForm, 'cateId', e[1])
+ this.$set(this.searchForm, 'parentCateId', '')
+ }else if((e && e.length == 1)){
+ this.$set(this.searchForm, 'parentCateId', e[0])
+ this.$set(this.searchForm, 'cateId', '')
} else {
this.$set(this.searchForm, 'cateId', '')
}
diff --git a/admin/src/views/stock/components/CateEdit.vue b/admin/src/views/stock/components/CateEdit.vue
index a066862..6ca3043 100644
--- a/admin/src/views/stock/components/CateEdit.vue
+++ b/admin/src/views/stock/components/CateEdit.vue
@@ -1,8 +1,13 @@
<template>
- <GlobalWindow :title="title" :visible.sync="visible" :confirm-working="isWorking" width="600px" @close="close" @confirm="confirm">
+ <GlobalWindow
+ :title="title"
+ :visible.sync="visible"
+ :confirm-working="isWorking"
+ width="600px"
+ @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-input v-model="form.name" maxlength="30" placeholder="璇疯緭鍏ュ垎绫诲悕绉�" v-trim />
</el-form-item>
<el-form-item label="鎵�灞炲垎绫�" prop="parentId">
<el-select :disabled="form.id" v-model="form.parentId" placeholder="涓嶅~涓哄垯涓�绾у垎绫�">
@@ -19,7 +24,7 @@
<script>
import BaseOpera from '@/components/base/BaseOpera'
import GlobalWindow from '@/components/common/GlobalWindow'
-import { create, fetchCateList, getInfoById } from '@/api/business/category.js'
+import { fetchCateList, getInfoById } from '@/api/business/category.js'
export default {
name: 'OperaCategoryWindow',
extends: BaseOpera,
@@ -33,7 +38,7 @@
remark: '',
status: '',
sortnum: '',
- type: 5
+ type: 7
},
// 楠岃瘉瑙勫垯
rules: {
@@ -55,14 +60,9 @@
},
methods: {
getList() {
- fetchCateList({ type: 5 }).then(res => {
+ fetchCateList({ type: 7 }).then(res => {
this.dataList = res || []
-
})
- },
- close() {
- this.visible = false
- this.$emit('close')
},
getDetail(id) {
getInfoById(id).then(res => {
diff --git a/admin/src/views/stock/components/InDetail.vue b/admin/src/views/stock/components/InDetail.vue
index ad73ba4..a32ff7d 100644
--- a/admin/src/views/stock/components/InDetail.vue
+++ b/admin/src/views/stock/components/InDetail.vue
@@ -1,43 +1,46 @@
<template>
- <GlobalWindow width="960px" title="鍑哄簱鍗曡鎯�" :visible.sync="visible" :confirm-working="isWorking" @close="close"
+ <GlobalWindow width="960px" :showConfirm="false" title="鍏ュ簱鍗曡鎯�" :visible.sync="visible" :confirm-working="isWorking" @close="close"
@confirm="confirm">
<div class="main">
<div class="title">
- <span>宸ュ崟璇︽儏</span>
+ <span>鍏ュ簱鍗曠紪鍙凤細{{ info.code }}</span>
+ </div>
+ <div class="title">
+ <span>鍩虹淇℃伅</span>
</div>
<div class="main_content">
<div class="list">
<div class="item">
- <div class="la">鍑哄簱浠撳簱</div>
- <div class="val">{{ info.projectName }}</div>
+ <div class="la">鍏ュ簱浠撳簱</div>
+ <div class="val">{{ info.warehouseName }}</div>
</div>
<div class="item">
- <div class="la">鍑哄簱鏃ユ湡</div>
- <div class="val">{{ info.categoryName }}</div>
+ <div class="la">鍏ュ簱鏃ユ湡</div>
+ <div class="val">{{ info.doneDate }}</div>
</div>
<div class="item">
- <div class="la">鍑哄簱绫诲瀷</div>
- <div class="val">{{ info.creatorName }}{{ info.creatorCompany ? "-" + info.creatorCompany : '' }}</div>
+ <div class="la">鍏ュ簱绫诲瀷</div>
+ <div class="val" v-if="info.type || info.type == 0">{{ StoreTypeOps[info.type].name }}</div>
</div>
<div class="item">
<div class="la">澶勭悊浜�</div>
- <div class="val">{{ info.creatorPhone || info.creatorMobile }}</div>
+ <div class="val">{{ info.createUserName }}</div>
</div>
- <div class="item">
+ <div class="item" style="width: 66.6%;">
<div class="la">澶囨敞</div>
- <div class="val">{{ info.createDate }}</div>
+ <div class="val">{{ info.remark }}</div>
</div>
</div>
</div>
<div class="title">鐗╂枡淇℃伅</div>
- <el-table :data="list" stripe>
- <el-table-column align="center" type="index" width="55" />
- <el-table-column prop="creatorName" label="鐗╂枡鍚嶇О" show-overflow-tooltip min-width="80px"></el-table-column>
- <el-table-column prop="categoryName" label="鐗╂枡缂栫爜" show-overflow-tooltip min-width="100px"></el-table-column>
- <el-table-column prop="createDate" label="鏉″舰鐮�" show-overflow-tooltip min-width="100px"></el-table-column>
- <el-table-column prop="dealUserName" label="鍝佺墝" show-overflow-tooltip min-width="80px"></el-table-column>
- <el-table-column prop="dealUserName" label="鍗曚綅" show-overflow-tooltip min-width="80px"></el-table-column>
- <el-table-column prop="dealUserName" label="鍑哄簱鏁伴噺" show-overflow-tooltip min-width="80px"></el-table-column>
+ <el-table :data="info.recordList" stripe>
+ <el-table-column align="center" label="搴忓彿" type="index" width="55" />
+ <el-table-column prop="materialName" label="鐗╂枡鍚嶇О" show-overflow-tooltip min-width="80px"></el-table-column>
+ <el-table-column prop="materialCode" label="鐗╂枡缂栫爜" show-overflow-tooltip min-width="100px"></el-table-column>
+ <el-table-column prop="materialQrcode" label="鏉″舰鐮�" show-overflow-tooltip min-width="100px"></el-table-column>
+ <el-table-column prop="materialBrand" label="鍝佺墝" show-overflow-tooltip min-width="80px"></el-table-column>
+ <el-table-column prop="materialUnitName" label="鍗曚綅" show-overflow-tooltip min-width="80px"></el-table-column>
+ <el-table-column prop="stock" label="鍏ュ簱鏁伴噺" show-overflow-tooltip min-width="80px"></el-table-column>
</el-table>
</div>
</GlobalWindow>
@@ -46,10 +49,8 @@
<script>
import GlobalWindow from '@/components/common/GlobalWindow'
import BaseOpera from '@/components/base/BaseOpera'
-import { detailById, dispatchOrder, dealOrder } from '@/api/workorder/ywWorkorder'
-import { getUserList } from '@/api/system/user'
-import { Message, Loading } from 'element-ui'
-import dayjs from 'dayjs'
+import { ywOutinboundDetail } from '@/api'
+import { StoreTypeOps } from './config'
export default {
components: {
GlobalWindow
@@ -57,21 +58,18 @@
extends: BaseOpera,
data() {
return {
- id: '',
visible: false,
- info: {},
- list: []
+ info: {recordList: []},
+ StoreTypeOps
}
},
created() {
- // this.getDetail()
},
methods: {
- getDetail() {
- const { id } = this
- detailById(id).then(res => {
+ getDetail(id) {
+ ywOutinboundDetail(id).then(res => {
this.info = res
})
},
diff --git a/admin/src/views/stock/components/InEdit.vue b/admin/src/views/stock/components/InEdit.vue
index 3bc1a30..71441e5 100644
--- a/admin/src/views/stock/components/InEdit.vue
+++ b/admin/src/views/stock/components/InEdit.vue
@@ -1,27 +1,27 @@
<template>
- <GlobalWindow title="鏂板缓鍑哄簱鍗�" :visible.sync="isShowModal" :confirm-working="isLoading" width="900px" @close="close"
+ <GlobalWindow title="鏂板缓鍏ュ簱鍗�" :visible.sync="isShowModal" :confirm-working="isLoading" width="1000px" @close="close"
@confirm="confirm">
<el-form :model="param" ref="form" :rules="rules">
<div class="df_ac">
- <el-form-item class="w3" label="鍑哄簱浠撳簱" prop="parentId">
- <el-select :disabled="param.id" v-model="param.parentId" placeholder="涓嶅~涓哄垯涓�绾у垎绫�">
- <el-option v-for="op in dataList" :key="op.id" :label="op.name" :value="op.id"></el-option>
+ <el-form-item class="w3" label="鍏ュ簱浠撳簱" prop="warehouseId">
+ <el-select :disabled="param.id" v-model="param.warehouseId" placeholder="璇烽�夋嫨">
+ <el-option v-for="op in storeList" :key="op.id" :label="op.name" :value="op.id"></el-option>
</el-select>
</el-form-item>
- <el-form-item class="w3" label="鍑哄簱鏃ユ湡">
- <el-date-picker type="date" v-model="param.getDate" format="yyyy-MM-dd" value-format="yyyy-MM-dd"
- placeholder="璇烽�夋嫨鍑哄簱鏃ユ湡"></el-date-picker>
+ <el-form-item class="w3" label="鍏ュ簱鏃ユ湡" prop="doneDate">
+ <el-date-picker type="date" v-model="param.doneDate" format="yyyy-MM-dd" value-format="yyyy-MM-dd"
+ placeholder="璇烽�夋嫨鍏ュ簱鏃ユ湡"></el-date-picker>
</el-form-item>
- <el-form-item class="w3" label="鍑哄簱绫诲瀷" prop="parentId">
- <el-select :disabled="param.id" v-model="param.parentId" placeholder="涓嶅~涓哄垯涓�绾у垎绫�">
- <el-option v-for="op in dataList" :key="op.id" :label="op.name" :value="op.id"></el-option>
+ <el-form-item class="w3" label="鍏ュ簱绫诲瀷" prop="type">
+ <el-select :disabled="param.id" v-model="param.type" placeholder="璇烽�夋嫨鍏ュ簱绫诲瀷">
+ <el-option v-for="op in StoreTypeOps" :key="op.id" :label="op.name" :value="op.id"></el-option>
</el-select>
</el-form-item>
<el-form-item class="w3" label="澶勭悊浜�" prop="name">
- <el-input v-model="param.name" v-trim />
+ <el-input v-model="param.createUserName" :disabled="true" v-trim />
</el-form-item>
- <el-form-item class="w6" label="澶囨敞" prop="name">
- <el-input v-model="param.name" placeholder="璇疯緭鍏�" v-trim />
+ <el-form-item class="w6" label="澶囨敞" prop="remark">
+ <el-input v-model="param.remark" placeholder="璇疯緭鍏�" v-trim />
</el-form-item>
</div>
</el-form>
@@ -32,18 +32,19 @@
<el-button type="primary" @click="handleOpenMaterial">閫夋嫨鐗╂枡</el-button>
<el-table :data="list" stripe>
<el-table-column align="center" label="搴忓彿" type="index" width="50" />
- <el-table-column prop="creatorName" label="鐗╂枡鍚嶇О" show-overflow-tooltip min-width="80px"></el-table-column>
- <el-table-column prop="categoryName" label="鐗╂枡缂栫爜" show-overflow-tooltip min-width="90px"></el-table-column>
- <el-table-column prop="createDate" label="鏉″舰鐮�" show-overflow-tooltip min-width="70px"></el-table-column>
- <el-table-column prop="dealUserName" label="鍝佺墝" show-overflow-tooltip min-width="70px"></el-table-column>
- <el-table-column prop="dealUserName" label="鍗曚綅" show-overflow-tooltip min-width="70px"></el-table-column>
- <el-table-column prop="dealUserName" label="鍑哄簱鏁伴噺" min-width="90px">
- <template v-slot="{row}">
- <el-input oninput="value=value.replace(/^(0+)|[^\d]+/g, '').slice(0, 11)" v-model="row.aa" class="w100"></el-input>
+ <el-table-column prop="name" label="鐗╂枡鍚嶇О" show-overflow-tooltip min-width="80px"></el-table-column>
+ <el-table-column prop="code" label="鐗╂枡缂栫爜" show-overflow-tooltip min-width="90px"></el-table-column>
+ <el-table-column prop="qrcode" label="鏉″舰鐮�" show-overflow-tooltip min-width="70px"></el-table-column>
+ <el-table-column prop="brand" label="鍝佺墝" show-overflow-tooltip min-width="70px"></el-table-column>
+ <el-table-column prop="unitName" label="鍗曚綅" show-overflow-tooltip min-width="70px"></el-table-column>
+ <el-table-column prop="dealUserName" label="鍏ュ簱鏁伴噺" min-width="100px">
+ <template v-slot="{ row }">
+ <el-input oninput="value=value.replace(/[^\d.]/g, '').replace(/\.{2,}/g, '.').replace('.', '$#$').replace(/\./g, '').replace('$#$', '.').replace(/^(\-)*(\d+)\.(\d\d).*$/, '$1$2.$3').replace(/^\./g, '')" v-model="row.stock"
+ class="w100"></el-input>
</template>
</el-table-column>
- <el-table-column prop="dealUserName" label="搴撳瓨鏁伴噺" show-overflow-tooltip min-width="80px"></el-table-column>
- <el-table-column prop="dealUserName" label="鎿嶄綔" min-width="60px">
+ <!-- <el-table-column prop="maxStock" label="搴撳瓨鏁伴噺" show-overflow-tooltip min-width="80px"></el-table-column> -->
+ <el-table-column label="鎿嶄綔" min-width="60px">
<template v-slot="scope">
<span @click="handleDel(scope)" class="red pointer">鍒犻櫎</span>
</template>
@@ -57,52 +58,94 @@
<script>
import GlobalWindow from '@/components/common/GlobalWindow'
import AssetSel from './AssetSel'
-import { create, fetchCateList, getInfoById } from '@/api/business/category.js'
+import { fetchList as getStoreList } from '@/api/ywWarehouse'
+import { ywOutinboundCreate } from '@/api/store/index'
+import { StoreTypeOps, rules } from './config'
+import { Message } from 'element-ui'
+import dayjs from 'dayjs'
export default {
name: 'OperaCategoryWindow',
components: { GlobalWindow, AssetSel },
data() {
return {
// 琛ㄥ崟鏁版嵁
- param: {},
+ param: {
+ createUserName: this.$store.state.userInfo.realname || this.$store.state.userInfo.username,
+ creator: this.$store.state.userInfo.id,
+ inOut: 0
+ },
activeName: 'first',
isShowModal: false,
isShowSel: false,
isLoading: false,
// 楠岃瘉瑙勫垯
- rules: {
- name: [{ required: true, message: '璇疯緭鍏ヤ簩绾у垎绫诲悕绉�', trigger: 'blur' }],
- },
- list: [{}],
+ rules,
+ storeList: [],
+ list: [],
+ StoreTypeOps: StoreTypeOps.filter(i => i.type == 0),
dataList: [],
}
},
created() {
+ this.initData()
+ console.log(this.$store.state.userInfo)
},
methods: {
confirm() {
-
- },
- getList() {
- fetchCateList({ type: 5 }).then(res => {
- this.dataList = res || []
-
+ this.$refs['form'].validate((valid) => {
+ if (valid) {
+ const { param, list } = this
+ if(list.length == 0) return Message.warning('璇峰厛閫夋嫨鐗╂枡淇℃伅')
+ let count = 0 // 鍏ュ簱鏁伴噺蹇呭~
+ list.forEach(item => {
+ if(!item.stock) count ++
+ })
+ if(count > 0) return Message.warning('璇疯緭鍏ユ纭殑鍏ュ簱鏁伴噺')
+ this.isLoading = true
+ ywOutinboundCreate({
+ ...param,
+ recordList: list
+ }).then(res => {
+ this.isLoading = false
+ Message.success('鎻愪氦鎴愬姛')
+ this.$emit('success')
+ this.close()
+ }, () => {
+ this.isLoading = false
+ })
+ }
})
},
- changeSel() {
-
+ initData() {
+ this.$set(this.param, 'doneDate', dayjs().format('YYYY-MM-DD'))
+ getStoreList({ capacity: 9999, page: 1, model: {status: 0} }).then(res => {
+ this.storeList = res.records || []
+ })
+ },
+ changeSel(val) {
+ const list = val
+ list.forEach(item => {
+ const index = this.list.findIndex(i => i.id == item.id)
+ if(index == -1){
+ item.materialId = item.id
+ item.multifile = null
+ item.createDate = null
+ this.list.push(item)
+ }
+ })
},
handleDel(val) {
const index = val.$index
this.list.splice(index, 1)
-
+
},
handleOpenMaterial() {
this.isShowSel = true
this.$nextTick(() => {
this.$refs.AssetSelRef.isShowModal = true
+ this.$refs.AssetSelRef.getList()
})
},
close() {
diff --git a/admin/src/views/stock/components/OutDetail.vue b/admin/src/views/stock/components/OutDetail.vue
index ad73ba4..af7335a 100644
--- a/admin/src/views/stock/components/OutDetail.vue
+++ b/admin/src/views/stock/components/OutDetail.vue
@@ -1,43 +1,46 @@
<template>
- <GlobalWindow width="960px" title="鍑哄簱鍗曡鎯�" :visible.sync="visible" :confirm-working="isWorking" @close="close"
+ <GlobalWindow width="960px" :showConfirm="false" title="鍑哄簱鍗曡鎯�" :visible.sync="visible" :confirm-working="isWorking" @close="close"
@confirm="confirm">
<div class="main">
<div class="title">
- <span>宸ュ崟璇︽儏</span>
+ <span>鍑哄簱鍗曠紪鍙凤細{{ info.code }}</span>
+ </div>
+ <div class="title">
+ <span>鍩虹淇℃伅</span>
</div>
<div class="main_content">
<div class="list">
<div class="item">
<div class="la">鍑哄簱浠撳簱</div>
- <div class="val">{{ info.projectName }}</div>
+ <div class="val">{{ info.warehouseName }}</div>
</div>
<div class="item">
<div class="la">鍑哄簱鏃ユ湡</div>
- <div class="val">{{ info.categoryName }}</div>
+ <div class="val">{{ info.doneDate }}</div>
</div>
<div class="item">
<div class="la">鍑哄簱绫诲瀷</div>
- <div class="val">{{ info.creatorName }}{{ info.creatorCompany ? "-" + info.creatorCompany : '' }}</div>
+ <div class="val" v-if="info.type || info.type == 0">{{ StoreTypeOps[info.type].name }}</div>
</div>
<div class="item">
<div class="la">澶勭悊浜�</div>
- <div class="val">{{ info.creatorPhone || info.creatorMobile }}</div>
+ <div class="val">{{ info.createUserName }}</div>
</div>
- <div class="item">
+ <div class="item" style="width: 66.6%;">
<div class="la">澶囨敞</div>
- <div class="val">{{ info.createDate }}</div>
+ <div class="val">{{ info.remark }}</div>
</div>
</div>
</div>
<div class="title">鐗╂枡淇℃伅</div>
- <el-table :data="list" stripe>
- <el-table-column align="center" type="index" width="55" />
- <el-table-column prop="creatorName" label="鐗╂枡鍚嶇О" show-overflow-tooltip min-width="80px"></el-table-column>
- <el-table-column prop="categoryName" label="鐗╂枡缂栫爜" show-overflow-tooltip min-width="100px"></el-table-column>
- <el-table-column prop="createDate" label="鏉″舰鐮�" show-overflow-tooltip min-width="100px"></el-table-column>
- <el-table-column prop="dealUserName" label="鍝佺墝" show-overflow-tooltip min-width="80px"></el-table-column>
- <el-table-column prop="dealUserName" label="鍗曚綅" show-overflow-tooltip min-width="80px"></el-table-column>
- <el-table-column prop="dealUserName" label="鍑哄簱鏁伴噺" show-overflow-tooltip min-width="80px"></el-table-column>
+ <el-table :data="info.recordList" stripe>
+ <el-table-column align="center" label="搴忓彿" type="index" width="55" />
+ <el-table-column prop="materialName" label="鐗╂枡鍚嶇О" show-overflow-tooltip min-width="80px"></el-table-column>
+ <el-table-column prop="materialCode" label="鐗╂枡缂栫爜" show-overflow-tooltip min-width="100px"></el-table-column>
+ <el-table-column prop="materialQrcode" label="鏉″舰鐮�" show-overflow-tooltip min-width="100px"></el-table-column>
+ <el-table-column prop="materialBrand" label="鍝佺墝" show-overflow-tooltip min-width="80px"></el-table-column>
+ <el-table-column prop="materialUnitName" label="鍗曚綅" show-overflow-tooltip min-width="80px"></el-table-column>
+ <el-table-column prop="stock" label="鍑哄簱鏁伴噺" show-overflow-tooltip min-width="80px"></el-table-column>
</el-table>
</div>
</GlobalWindow>
@@ -46,10 +49,8 @@
<script>
import GlobalWindow from '@/components/common/GlobalWindow'
import BaseOpera from '@/components/base/BaseOpera'
-import { detailById, dispatchOrder, dealOrder } from '@/api/workorder/ywWorkorder'
-import { getUserList } from '@/api/system/user'
-import { Message, Loading } from 'element-ui'
-import dayjs from 'dayjs'
+import { ywOutinboundDetail } from '@/api'
+import { StoreTypeOps } from './config'
export default {
components: {
GlobalWindow
@@ -57,21 +58,18 @@
extends: BaseOpera,
data() {
return {
- id: '',
visible: false,
- info: {},
- list: []
+ info: {recordList: []},
+ StoreTypeOps
}
},
created() {
- // this.getDetail()
},
methods: {
- getDetail() {
- const { id } = this
- detailById(id).then(res => {
+ getDetail(id) {
+ ywOutinboundDetail(id).then(res => {
this.info = res
})
},
diff --git a/admin/src/views/stock/components/OutEdit.vue b/admin/src/views/stock/components/OutEdit.vue
index 3bc1a30..0bad33c 100644
--- a/admin/src/views/stock/components/OutEdit.vue
+++ b/admin/src/views/stock/components/OutEdit.vue
@@ -1,27 +1,27 @@
<template>
- <GlobalWindow title="鏂板缓鍑哄簱鍗�" :visible.sync="isShowModal" :confirm-working="isLoading" width="900px" @close="close"
+ <GlobalWindow title="鏂板缓鍑哄簱鍗�" :visible.sync="isShowModal" :confirm-working="isLoading" width="1000px" @close="close"
@confirm="confirm">
<el-form :model="param" ref="form" :rules="rules">
<div class="df_ac">
- <el-form-item class="w3" label="鍑哄簱浠撳簱" prop="parentId">
- <el-select :disabled="param.id" v-model="param.parentId" placeholder="涓嶅~涓哄垯涓�绾у垎绫�">
- <el-option v-for="op in dataList" :key="op.id" :label="op.name" :value="op.id"></el-option>
+ <el-form-item class="w3" label="鍑哄簱浠撳簱" prop="warehouseId">
+ <el-select :disabled="param.id" @change="changeStore" v-model="param.warehouseId" placeholder="璇烽�夋嫨">
+ <el-option v-for="op in storeList" :key="op.id" :label="op.name" :value="op.id"></el-option>
</el-select>
</el-form-item>
- <el-form-item class="w3" label="鍑哄簱鏃ユ湡">
- <el-date-picker type="date" v-model="param.getDate" format="yyyy-MM-dd" value-format="yyyy-MM-dd"
+ <el-form-item class="w3" label="鍑哄簱鏃ユ湡" prop="doneDate">
+ <el-date-picker type="date" v-model="param.doneDate" format="yyyy-MM-dd" value-format="yyyy-MM-dd"
placeholder="璇烽�夋嫨鍑哄簱鏃ユ湡"></el-date-picker>
</el-form-item>
- <el-form-item class="w3" label="鍑哄簱绫诲瀷" prop="parentId">
- <el-select :disabled="param.id" v-model="param.parentId" placeholder="涓嶅~涓哄垯涓�绾у垎绫�">
- <el-option v-for="op in dataList" :key="op.id" :label="op.name" :value="op.id"></el-option>
+ <el-form-item class="w3" label="鍑哄簱绫诲瀷" prop="type">
+ <el-select :disabled="param.id" v-model="param.type" placeholder="璇烽�夋嫨鍑哄簱绫诲瀷">
+ <el-option v-for="op in StoreTypeOps" :key="op.id" :label="op.name" :value="op.id"></el-option>
</el-select>
</el-form-item>
<el-form-item class="w3" label="澶勭悊浜�" prop="name">
- <el-input v-model="param.name" v-trim />
+ <el-input v-model="param.createUserName" :disabled="true" v-trim />
</el-form-item>
- <el-form-item class="w6" label="澶囨敞" prop="name">
- <el-input v-model="param.name" placeholder="璇疯緭鍏�" v-trim />
+ <el-form-item class="w6" label="澶囨敞" prop="remark">
+ <el-input v-model="param.remark" placeholder="璇疯緭鍏�" v-trim />
</el-form-item>
</div>
</el-form>
@@ -32,18 +32,19 @@
<el-button type="primary" @click="handleOpenMaterial">閫夋嫨鐗╂枡</el-button>
<el-table :data="list" stripe>
<el-table-column align="center" label="搴忓彿" type="index" width="50" />
- <el-table-column prop="creatorName" label="鐗╂枡鍚嶇О" show-overflow-tooltip min-width="80px"></el-table-column>
- <el-table-column prop="categoryName" label="鐗╂枡缂栫爜" show-overflow-tooltip min-width="90px"></el-table-column>
- <el-table-column prop="createDate" label="鏉″舰鐮�" show-overflow-tooltip min-width="70px"></el-table-column>
- <el-table-column prop="dealUserName" label="鍝佺墝" show-overflow-tooltip min-width="70px"></el-table-column>
- <el-table-column prop="dealUserName" label="鍗曚綅" show-overflow-tooltip min-width="70px"></el-table-column>
+ <el-table-column prop="name" label="鐗╂枡鍚嶇О" show-overflow-tooltip min-width="80px"></el-table-column>
+ <el-table-column prop="code" label="鐗╂枡缂栫爜" show-overflow-tooltip min-width="90px"></el-table-column>
+ <el-table-column prop="qrcode" label="鏉″舰鐮�" show-overflow-tooltip min-width="70px"></el-table-column>
+ <el-table-column prop="brand" label="鍝佺墝" show-overflow-tooltip min-width="70px"></el-table-column>
+ <el-table-column prop="unitName" label="鍗曚綅" show-overflow-tooltip min-width="70px"></el-table-column>
<el-table-column prop="dealUserName" label="鍑哄簱鏁伴噺" min-width="90px">
- <template v-slot="{row}">
- <el-input oninput="value=value.replace(/^(0+)|[^\d]+/g, '').slice(0, 11)" v-model="row.aa" class="w100"></el-input>
+ <template v-slot="{ row }">
+ <el-input oninput="value=value.replace(/[^\d.]/g, '').replace(/\.{2,}/g, '.').replace('.', '$#$').replace(/\./g, '').replace('$#$', '.').replace(/^(\-)*(\d+)\.(\d\d).*$/, '$1$2.$3').replace(/^\./g, '')" v-model="row.stock"
+ class="w100"></el-input>
</template>
</el-table-column>
- <el-table-column prop="dealUserName" label="搴撳瓨鏁伴噺" show-overflow-tooltip min-width="80px"></el-table-column>
- <el-table-column prop="dealUserName" label="鎿嶄綔" min-width="60px">
+ <el-table-column prop="maxStock" label="搴撳瓨鏁伴噺" show-overflow-tooltip min-width="80px"></el-table-column>
+ <el-table-column label="鎿嶄綔" min-width="60px">
<template v-slot="scope">
<span @click="handleDel(scope)" class="red pointer">鍒犻櫎</span>
</template>
@@ -57,52 +58,99 @@
<script>
import GlobalWindow from '@/components/common/GlobalWindow'
import AssetSel from './AssetSel'
-import { create, fetchCateList, getInfoById } from '@/api/business/category.js'
+import { fetchList as getStoreList } from '@/api/ywWarehouse'
+import { ywOutinboundCreate } from '@/api/store/index'
+import { StoreTypeOps, rules } from './config'
+import { Message } from 'element-ui'
+import dayjs from 'dayjs'
export default {
name: 'OperaCategoryWindow',
components: { GlobalWindow, AssetSel },
data() {
return {
// 琛ㄥ崟鏁版嵁
- param: {},
+ param: {
+ createUserName: this.$store.state.userInfo.realname || this.$store.state.userInfo.username,
+ creator: this.$store.state.userInfo.id,
+ inOut: 1
+ },
activeName: 'first',
isShowModal: false,
isShowSel: false,
isLoading: false,
// 楠岃瘉瑙勫垯
- rules: {
- name: [{ required: true, message: '璇疯緭鍏ヤ簩绾у垎绫诲悕绉�', trigger: 'blur' }],
- },
- list: [{}],
+ rules,
+ storeList: [],
+ list: [],
+ StoreTypeOps: StoreTypeOps.filter(i => i.type == 1),
dataList: [],
}
},
created() {
-
+ this.initData()
},
methods: {
confirm() {
-
- },
- getList() {
- fetchCateList({ type: 5 }).then(res => {
- this.dataList = res || []
-
+ this.$refs['form'].validate((valid) => {
+ if (valid) {
+ const { param, list } = this
+ if(list.length == 0) return Message.warning('璇峰厛閫夋嫨鐗╂枡淇℃伅')
+ let count = 0 // 鍑哄簱鏁伴噺蹇呭~
+ list.forEach(item => {
+ if(!item.stock) count ++
+ })
+ if(count > 0) return Message.warning('璇疯緭鍏ユ纭殑鍑哄簱鏁伴噺')
+ this.isLoading = true
+ ywOutinboundCreate({
+ ...param,
+ recordList: list
+ }).then(res => {
+ this.isLoading = false
+ Message.success('鎻愪氦鎴愬姛')
+ this.$emit('success')
+ this.close()
+ }, () => {
+ this.isLoading = false
+ })
+ }
})
},
- changeSel() {
-
+ changeStore() {
+ this.list = []
+ },
+ initData() {
+ this.$set(this.param, 'doneDate', dayjs().format('YYYY-MM-DD'))
+ getStoreList({ capacity: 9999, page: 1, model: {status: 0} }).then(res => {
+ this.storeList = res.records || []
+ })
+ },
+ changeSel(val) {
+ const list = val
+ list.forEach(item => {
+ if(this.list.indexOf(item.id) === -1){
+ item.materialId = item.id
+ item.stock = null
+ item.createDate = null
+ this.list.push(item)
+ }
+ })
},
handleDel(val) {
const index = val.$index
this.list.splice(index, 1)
-
+
},
handleOpenMaterial() {
+ if(!this.param.warehouseId) return Message.warning('璇峰厛閫夋嫨鍑哄簱浠撳簱')
this.isShowSel = true
this.$nextTick(() => {
this.$refs.AssetSelRef.isShowModal = true
+ this.$refs.AssetSelRef.isOut = true
+ this.$refs.AssetSelRef.warehouseId = this.param.warehouseId
+ this.$refs.AssetSelRef.getList()
+ console.log('-----');
+
})
},
close() {
diff --git a/admin/src/views/stock/components/config.js b/admin/src/views/stock/components/config.js
new file mode 100644
index 0000000..f03110b
--- /dev/null
+++ b/admin/src/views/stock/components/config.js
@@ -0,0 +1,18 @@
+export const StoreTypeOps = [
+ { name: '閲囪喘鍏ュ簱', id: 0, type: 0 },
+ { name: '棰嗙敤閫�鍥�', id: 1, type: 0 },
+ { name: '搴撳瓨璋冩暣', id: 2, type: 0 },
+ { name: '鍏跺畠鍏ュ簱', id: 3, type: 0 },
+ // { name: '鐩樼泩鍏ュ簱', id: 4, type: 0 },
+ { name: '棰嗙敤鍑哄簱', id: 5, type: 1 },
+ { name: '浠撳簱鍑哄崟', id: 6, type: 1 },
+ { name: '璋冩暣鍑哄簱', id: 7, type: 1 },
+ { name: '閲囪喘鍑哄簱', id: 8, type: 1 },
+ { name: '鍏跺畠鍑哄簱', id: 9, type: 1 },
+ // { name: '鐩樺嚭鍑哄簱', id: 10, type: 1 },
+]
+export const rules = {
+ warehouseId: [{ required: true, message: '璇烽�夋嫨', trigger: 'blur' }],
+ doneDate: [{ required: true, message: '璇烽�夋嫨', trigger: 'blur' }],
+ type: [{ required: true, message: '璇烽�夋嫨', trigger: 'blur' }],
+}
\ No newline at end of file
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/stock/components/newMaterial.vue b/admin/src/views/stock/components/newMaterial.vue
index 519bf22..6c45610 100644
--- a/admin/src/views/stock/components/newMaterial.vue
+++ b/admin/src/views/stock/components/newMaterial.vue
@@ -9,67 +9,47 @@
<div class="main_content">
<el-form :model="form" label-position="top" ref="form" :rules="rules">
<div class="list">
- <el-form-item label="鐗╂枡缂栫爜" prop="contractId">
- <el-input v-model="form.renterName" placeholder="涓嶈緭鍏ョ郴缁熶細鑷姩缂栫爜" v-trim />
+ <el-form-item label="鐗╂枡缂栫爜" prop="code">
+ <el-input v-model="form.code" placeholder="涓嶈緭鍏ョ郴缁熶細鑷姩缂栫爜" v-trim />
</el-form-item>
- <el-form-item label="鐗╂枡鍚嶇О" prop="renterName">
- <el-input v-model="form.renterName" placeholder="璇疯緭鍏�" v-trim />
+ <el-form-item label="鐗╂枡鍚嶇О" prop="name">
+ <el-input v-model="form.name" placeholder="璇疯緭鍏�" v-trim />
</el-form-item>
- <el-form-item label="鐗╂枡鍒嗙被" prop="ywContractRoomList">
- <el-select v-model="form.ywContractRoomList" placeholder="璇烽�夋嫨">
- <el-option
- v-for="(item, index) in houseList"
- :key="index"
- :value="item.id"
- :label="item.projectName + item.buildingName + item.floorName + item.roomName" />
- </el-select>
+ <el-form-item label="鐗╂枡鍒嗙被" prop="cateArr">
+ <el-cascader
+ v-model="form.cateArr"
+ :options="cateList"
+ @change="getCateVal"
+ :props="{ label: 'name', value: 'id', children: 'childCategoryList' }"
+ placeholder="璇烽�夋嫨" />
</el-form-item>
- <el-form-item label="鏉$爜" prop="costType">
- <el-input v-model="form.renterName" placeholder="璇疯緭鍏�" v-trim />
+ <el-form-item label="鏉$爜" prop="qrcode">
+ <el-input v-model="form.qrcode" placeholder="璇疯緭鍏�" v-trim />
</el-form-item>
- <el-form-item label="鍝佺墝" prop="date">
- <el-input v-model="form.renterName" placeholder="璇疯緭鍏�" v-trim />
+ <el-form-item label="鍝佺墝" prop="brand">
+ <el-input v-model="form.brand" placeholder="璇疯緭鍏�" v-trim />
</el-form-item>
- <el-form-item label="瑙勬牸鍨嬪彿" prop="totleFee">
- <el-input v-model="form.renterName" placeholder="璇疯緭鍏�" v-trim />
+ <el-form-item label="瑙勬牸鍨嬪彿" prop="attr">
+ <el-input v-model="form.attr" placeholder="璇疯緭鍏�" v-trim />
</el-form-item>
- <el-form-item label="瀹夊叏搴撳瓨锛堜笅闄愶級" prop="planPayDate">
- <el-input v-model="form.renterName" placeholder="璇疯緭鍏�" v-trim />
+ <el-form-item label="瀹夊叏搴撳瓨锛堜笅闄愶級" prop="minStock">
+ <el-input v-model="form.minStock" placeholder="璇疯緭鍏�" v-trim />
</el-form-item>
- <el-form-item label="瀹夊叏搴撳瓨锛堜笂闄愶級" prop="companyId">
- <el-input v-model="form.renterName" placeholder="璇疯緭鍏�" v-trim />
+ <el-form-item label="瀹夊叏搴撳瓨锛堜笂闄愶級" prop="maxStock">
+ <el-input v-model="form.maxStock" placeholder="璇疯緭鍏�" v-trim />
</el-form-item>
- <el-form-item label="鍗曚綅" prop="companyId">
- <el-input v-model="form.renterName" placeholder="璇疯緭鍏�" v-trim />
+ <el-form-item label="鍗曚綅" prop="unitName">
+ <el-input v-model="form.unitName" placeholder="璇疯緭鍏�" v-trim />
</el-form-item>
- <el-form-item label="鎵�灞為」鐩�" prop="companyId">
- <el-select v-model="form.ywContractRoomList" placeholder="璇烽�夋嫨">
- <el-option
- v-for="(item, index) in houseList"
- :key="index"
- :value="item.id"
- :label="item.projectName + item.buildingName + item.floorName + item.roomName" />
- </el-select>
- </el-form-item>
- <el-form-item label="鎵�灞炴埧婧�" prop="companyId">
- <el-select v-model="form.ywContractRoomList" placeholder="璇烽�夋嫨">
- <el-option
- v-for="(item, index) in houseList"
- :key="index"
- :value="item.id"
- :label="item.projectName + item.buildingName + item.floorName + item.roomName" />
- </el-select>
- </el-form-item>
- <el-form-item label="鐗╂枡鐓х墖" prop="companyId">
+ <el-form-item label="鐗╂枡鐓х墖" prop="multifile">
<el-upload
- class="upload-demo"
- :show-file-list="false"
- :data="uploadData"
:action="uploadImgUrl"
+ :file-list="fileList"
+ :data="uploadData"
+ list-type="picture-card"
:on-success="uploadAvatarSuccess"
- :before-upload="beforeUpload"
- :on-error="uploadError">
- <el-button icon="el-icon-plus" plain>涓婁紶</el-button>
+ :on-remove="dele">
+ <i class="el-icon-plus"></i>
</el-upload>
</el-form-item>
<el-form-item style="width: 100%;" label="澶囨敞" prop="remark">
@@ -85,6 +65,7 @@
<script>
import GlobalWindow from '@/components/common/GlobalWindow'
import BaseOpera from '@/components/base/BaseOpera'
+ import { fetchList } from '@/api/business/category.js'
export default {
name: 'newMaterial',
components: {
@@ -92,68 +73,103 @@
},
extends: BaseOpera,
data () {
+ var validateCateArr = (rule, value, callback) => {
+ if (value.length === 0) {
+ callback(new Error('璇烽�夋嫨鐗╂枡鍒嗙被'));
+ } else {
+ callback();
+ }
+ };
return {
form: {
- contractId: '',
- renterName: '',
- renterId: '',
- costType: '',
- type: '',
- companyId: '',
+ id: null,
+ code: '',
+ name: '',
+ parentCateId: '',
+ cateId: '',
+ cateArr: [],
+ multifile: null,
remark: '',
- startDate: '',
- endDate: '',
- totleFee: '',
- planPayDate: '',
- multifileList: [],
- ywContractRoomList: [],
- date: [],
- RoomName: ''
+ unitName: '',
+ maxStock: '',
+ minStock: '',
+ attr: '',
+ brand: '',
+ qrcode: ''
},
- rules: [],
- loadingInstance: null,
+ rules: {
+ name: [
+ { required: true, message: '璇疯緭鍏ョ墿鏂欏悕绉�', trigger: 'blur' }
+ ],
+ cateArr: [
+ { required: true, validator: validateCateArr, trigger: 'blur' }
+ ],
+ qrcode: [
+ { required: true, message: '璇疯緭鍏ユ潯鐮�', trigger: 'blur' }
+ ]
+ },
+ cateList: [],
uploadImgUrl: process.env.VUE_APP_API_PREFIX + '/visitsAdmin/cloudService/public/uploadBatch',
fileList: [],
uploadData: {
- folder: 'YW_CONTRACT_BILL'
- },
+ folder: 'YW_MATERIAL'
+ }
}
+ },
+ created () {
+ this.config({
+ api: '/ywMaterial'
+ })
},
methods: {
open (title, target) {
this.title = title
+ this.fileList = []
this.visible = true
- },
- dele (imgaddr) {
- this.form.multifileList.forEach((item, index) => {
- if (imgaddr === item.imgaddr) {
- this.form.multifileList.splice(index, 1)
+ this.getCategry()
+ // 鏂板缓
+ if (target == null) {
+ this.$nextTick(() => {
+ this.$refs.form.resetFields()
+ this.form[this.configData['field.id']] = null
+ })
+ return
+ }
+ // 缂栬緫
+ this.$nextTick(() => {
+ for (const key in this.form) {
+ this.form[key] = target[key]
+ }
+ if (this.form.multifile) {
+ this.fileList = [
+ { url: this.form.multifile.fileurlFull, ...this.form.multifile }
+ ]
}
})
},
- beforeUpload (file) {
- this.loadingInstance = Loading.service({
- lock: true,
- text: 'Loading',
- spinner: 'el-icon-loading',
- background: 'rgba(0, 0, 0, 0.7)'
+ getCateVal(e) {
+ this.form.parentCateId = e[0]
+ this.form.cateId = e[1]
+ },
+ getCategry() {
+ fetchList({
+ capacity: 1000,
+ model: {
+ type: 7
+ },
+ page: 1
+ }).then(res => {
+ this.cateList = res.records
})
},
- uploadError () {
- this.$nextTick(() => { // 浠ユ湇鍔$殑鏂瑰紡璋冪敤鐨� Loading 闇�瑕佸紓姝ュ叧闂�
- if (this.loadingInstance) {
- this.loadingInstance.close()
- }
- })
+ dele (e) {
+ this.fileList = []
+ this.form.multifile = null
},
uploadAvatarSuccess (file) {
- this.$nextTick(() => {
- if (this.loadingInstance) {
- this.loadingInstance.close()
- }
- })
const item = file.data[0]
- this.form.multifileList.push({ ...item, fileurl: item.imgaddr, name: item.originname, userName: this.userInfo.realname, createTime: this.getDay() })
+ this.fileList.push({ ...item, fileurl: item.imgaddr, name: item.originname })
+ this.form.multifile = { ...item, fileurl: item.imgaddr, name: item.originname }
}
}
}
diff --git a/admin/src/views/stock/components/newWarehouse.vue b/admin/src/views/stock/components/newWarehouse.vue
index 70386ad..e2f076b 100644
--- a/admin/src/views/stock/components/newWarehouse.vue
+++ b/admin/src/views/stock/components/newWarehouse.vue
@@ -9,30 +9,33 @@
<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-input v-model="form.name" placeholder="璇疯緭鍏�" v-trim />
+ <el-form-item label="鎵�鍦ㄤ綅缃�" prop="position">
+ <el-input v-model="form.position" placeholder="璇疯緭鍏�" v-trim />
</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" filterable placeholder="璇烽�夋嫨">
+ <el-option
+ v-for="item in userList"
+ :key="item.id"
+ :label="item.realname"
+ :value="item.id">
+ </el-option>
</el-select>
</el-form-item>
- <el-form-item label="鎺掑簭鐮�(鍗囧簭)" prop="name">
- <el-input v-model="form.name" placeholder="璇疯緭鍏ユ帓搴忕爜" v-trim />
+ <el-form-item label="鎺掑簭鐮�(鍗囧簭)" prop="sortnum">
+ <el-input v-model="form.sortnum" placeholder="璇疯緭鍏ユ帓搴忕爜" v-trim />
</el-form-item>
- <el-form-item label="鐘舵��" prop="name">
+ <el-form-item label="鐘舵��" prop="status">
<el-switch
- v-model="form.name"
+ v-model="form.status"
active-color="#13ce66"
inactive-color="#ff4949"
- active-value="100"
- inactive-value="0">
+ :active-value="0"
+ :inactive-value="1">
</el-switch>
</el-form-item>
- <el-form-item label="澶囨敞" prop="name">
- <el-input v-model="form.name" type="textarea" :autosize="{ minRows: 2, maxRows: 4}" placeholder="璇疯緭鍏�" v-trim />
+ <el-form-item label="澶囨敞" prop="remark">
+ <el-input v-model="form.remark" type="textarea" :autosize="{ minRows: 2, maxRows: 4}" placeholder="璇疯緭鍏�" v-trim />
</el-form-item>
</el-form>
</GlobalWindow>
@@ -41,6 +44,7 @@
<script>
import BaseOpera from '@/components/base/BaseOpera'
import GlobalWindow from '@/components/common/GlobalWindow'
+ import { getUserList } from '@/api/system/user'
export default {
name: 'newWarehouse',
extends: BaseOpera,
@@ -51,18 +55,32 @@
form: {
id: '',
name: '',
+ position: '',
+ userId: '',
+ sortnum: '',
+ remark: '',
+ status: 0
},
// 楠岃瘉瑙勫垯
rules: {
- name: [{ required: true, message: '璇疯緭鍏ラ」鐩悕绉�', trigger: 'blur' }]
+ name: [{ required: true, message: '浠撳簱鍚嶇О涓嶈兘涓虹┖', trigger: 'blur' }]
},
+ userList: []
}
},
created() {
this.config({
- api: '/project/ywProject',
- 'field.id': 'id'
+ api: '/ywWarehouse'
})
+ this.getUser()
+ },
+ methods: {
+ getUser() {
+ getUserList({})
+ .then(res => {
+ this.userList = res
+ })
+ }
}
}
</script>
diff --git a/admin/src/views/stock/in.vue b/admin/src/views/stock/in.vue
index ee899e6..c35f304 100644
--- a/admin/src/views/stock/in.vue
+++ b/admin/src/views/stock/in.vue
@@ -2,20 +2,25 @@
<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="handleEdit()" v-permissions="['business:ywpatrolline:create']">鏂板缓鍑哄簱鍗�</el-button>
- <el-button @click="handleEx()" v-permissions="['business:ywpatrolline:create']">瀵煎嚭</el-button>
+ <el-button type="primary" @click="handleEdit()" v-permissions="['business:ywoutinboundrecord:create']">鏂板缓鍏ュ簱鍗�</el-button>
+ <el-button @click="handleEx()" v-permissions="['business:ywoutinboundrecord:exportExcel']">瀵煎嚭</el-button>
</div>
<el-table v-loading="loading" :data="list" stripe>
- <el-table-column prop="platformName" label="鍑哄簱鍗曞彿" min-width="120" show-overflow-tooltip />
- <el-table-column prop="platformGroupName" label="鍑哄簱浠撳簱" min-width="100" show-overflow-tooltip />
- <el-table-column prop="carCodeFront" label="鍑哄簱绫诲瀷" min-width="100" show-overflow-tooltip />
- <el-table-column prop="carCodeBack" label="鍑哄簱鏃ユ湡" min-width="110" show-overflow-tooltip />
- <el-table-column prop="param1" label="鍑哄簱鏁伴噺" min-width="120" show-overflow-tooltip />
- <el-table-column prop="param2" label="鎿嶄綔浜�" min-width="90" show-overflow-tooltip />
- <el-table-column prop="workTime" label="鎿嶄綔鏃堕棿" min-width="140" show-overflow-tooltip />
+ <el-table-column prop="code" label="鍏ュ簱鍗曞彿" min-width="120" show-overflow-tooltip />
+ <el-table-column prop="warehouseName" label="鍏ュ簱浠撳簱" min-width="100" show-overflow-tooltip />
+ <el-table-column prop="typeName" label="鍏ュ簱绫诲瀷" min-width="100" show-overflow-tooltip />
+ <el-table-column prop="doneDate" label="鍏ュ簱鏃ユ湡" min-width="110" show-overflow-tooltip />
+ <el-table-column label="鍏ュ簱鏁伴噺" min-width="140">
+ <template v-slot="{ row }">
+ <div v-for="item in row.recordList">{{ item.materialName }}[{{ item.materialCode }}]*{{ item.stock }}{{
+ item.materialUnitName }}</div>
+ </template>
+ </el-table-column>
+ <el-table-column prop="createUserName" label="鎿嶄綔浜�" min-width="90" show-overflow-tooltip />
+ <el-table-column prop="createDate" label="鎿嶄綔鏃堕棿" min-width="140" show-overflow-tooltip />
<el-table-column prop="workTime" label="鎿嶄綔" min-width="80" show-overflow-tooltip>
<template v-slot="{ row }">
- <span @click="handleDetail(row)" class="primaryColor pointer">鏌ョ湅璇︽儏</span>
+ <span @click="handleDetail(row)" v-permissions="['business:ywoutinboundrecord:query']" class="primaryColor pointer">鏌ョ湅璇︽儏</span>
</template>
</el-table-column>
</el-table>
@@ -36,7 +41,9 @@
import dayjs from 'dayjs'
import duration from 'dayjs/plugin/duration'
dayjs.extend(duration)
-import { platformLogPage, getPlatformGroupList } from '@/api'
+import { ywOutinboundPage, ywOutinboundEx } from '@/api'
+import { fetchList as getStoreList } from '@/api/ywWarehouse'
+import { StoreTypeOps, rules } from './components/config'
export default {
components: {
Pagination,
@@ -54,26 +61,34 @@
page: 1,
total: 0
},
- filters: {},
- list: [{}],
+ filters: {
+ inOut: 0
+ },
+ StoreTypeOps,
+ list: [],
total: 0,
queryFormConfig: {
formItems: [
{
- filed: 'carCodeFront',
+ filed: 'code',
type: 'input',
- label: '鍑哄簱鍗曞彿',
+ label: '鍏ュ簱鍗曞彿',
},
{
- filed: 'platformGroupId',
+ filed: 'warehouseId',
type: 'select',
label: '鎵�鍦ㄤ粨搴�',
+ labelCode: 'name',
+ valueCode: 'id',
options: []
},
{
- filed: 'carCodeFront',
- type: 'input',
- label: '鍑哄簱绫诲瀷',
+ filed: 'type',
+ type: 'select',
+ label: '鍏ュ簱绫诲瀷',
+ labelCode: 'name',
+ valueCode: 'id',
+ options: StoreTypeOps.filter(i => i.type == 0)
},
],
online: true
@@ -81,8 +96,8 @@
}
},
created() {
- // this.getList()
- // this.getGroupList()
+ this.getList()
+ this.initData()
},
methods: {
handleSub() {
@@ -98,45 +113,56 @@
this.$refs.InEditRef.isShowModal = true
})
},
- handleDetail() {
+ handleDetail(row) {
this.isShowDetail = true
this.$nextTick(() => {
this.$refs.InDetailRef.visible = true
+ this.$refs.InDetailRef.getDetail(row.id)
})
},
- handleEx() { },
- getGroupList() {
- getPlatformGroupList({ queryData: 0, queryType: 0 }).then(res => {
- this.queryFormConfig.formItems[1].options = res.map(i => {
- return {
- value: i.id,
- label: i.name
- }
+ handleEx() {
+ this.$dialog.exportConfirm('纭瀵煎嚭鍚楋紵')
+ .then(() => {
+ this.loading = true
+ ywOutinboundEx({
+ page: this.pagination.page,
+ capacity: 1000000,
+ model: this.filters
+ })
+ .then(response => {
+ this.download(response)
+ })
+ .catch(e => {
+ this.$tip.apiFailed(e)
+ })
+ .finally(() => {
+ this.loading = false
+ })
})
- // this.queryFormConfig.formItems[1].options.unshift({ value: '', label: '鍏ㄩ儴鏈堝彴缁�' })
+ .catch(() => { })
+ },
+ initData() {
+ getStoreList({ capacity: 9999, page: 1, model: {} }).then(res => {
+ this.queryFormConfig.formItems[1].options = res.records || []
})
},
getList(page) {
const { pagination, filters } = this
this.loading = true
- if(page){pagination.page = page}
- platformLogPage({
+ if (page) { pagination.page = page }
+ ywOutinboundPage({
model: {
...filters,
- queryStatus: '6,7,8',
- beginWorkDateStart: filters.selDate && filters.selDate.length > 0 ? filters.selDate[0] : null,
- beginWorkDateEnd: filters.selDate && filters.selDate.length > 0 ? filters.selDate[1] : null,
+ inOut: 0
},
- sorts: [{ direction: 'DESC', property: 'param1' }],
+ // sorts: [{ direction: 'DESC', property: 'param1' }],
capacity: pagination.pageSize,
page: page,
}).then(res => {
this.loading = false
this.list = res.records || []
this.list.forEach(item => {
- item.inTypeTemp = item.inType == 0 ? '鏁存墭鐩�' : '浠剁儫'
- item.taskOrigin = 'WMS鑾峰彇'
- item.workTime = dayjs.duration(item.param3, 'seconds').format('H鏃秏鍒唖绉�')
+ item.typeName = this.StoreTypeOps[item.type].name
})
this.pagination.total = res.total || 0
}, () => {
@@ -144,7 +170,7 @@
})
},
clear() {
- this.filters = {}
+ this.filters = {inOut: 0}
this.pagination.pageSize = 10
this.pagination.page = 1
this.getList()
diff --git a/admin/src/views/stock/out.vue b/admin/src/views/stock/out.vue
index 07aca66..c94aedf 100644
--- a/admin/src/views/stock/out.vue
+++ b/admin/src/views/stock/out.vue
@@ -2,20 +2,24 @@
<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="handleEdit()" v-permissions="['business:ywpatrolline:create']">鏂板缓鍑哄簱鍗�</el-button>
- <el-button @click="handleEx()" v-permissions="['business:ywpatrolline:create']">瀵煎嚭</el-button>
+ <el-button type="primary" @click="handleEdit()" v-permissions="['business:ywoutinboundrecord:create']">鏂板缓鍑哄簱鍗�</el-button>
+ <el-button @click="handleEx()" v-permissions="['business:ywoutinboundrecord:exportExcel']">瀵煎嚭</el-button>
</div>
<el-table v-loading="loading" :data="list" stripe>
- <el-table-column prop="platformName" label="鍑哄簱鍗曞彿" min-width="120" show-overflow-tooltip />
- <el-table-column prop="platformGroupName" label="鍑哄簱浠撳簱" min-width="100" show-overflow-tooltip />
- <el-table-column prop="carCodeFront" label="鍑哄簱绫诲瀷" min-width="100" show-overflow-tooltip />
- <el-table-column prop="carCodeBack" label="鍑哄簱鏃ユ湡" min-width="110" show-overflow-tooltip />
- <el-table-column prop="param1" label="鍑哄簱鏁伴噺" min-width="120" show-overflow-tooltip />
- <el-table-column prop="param2" label="鎿嶄綔浜�" min-width="90" show-overflow-tooltip />
- <el-table-column prop="workTime" label="鎿嶄綔鏃堕棿" min-width="140" show-overflow-tooltip />
+ <el-table-column prop="code" label="鍑哄簱鍗曞彿" min-width="120" show-overflow-tooltip />
+ <el-table-column prop="warehouseName" label="鍑哄簱浠撳簱" min-width="100" show-overflow-tooltip />
+ <el-table-column prop="typeName" label="鍑哄簱绫诲瀷" min-width="100" show-overflow-tooltip />
+ <el-table-column prop="doneDate" label="鍑哄簱鏃ユ湡" min-width="110" show-overflow-tooltip />
+ <el-table-column label="鍑哄簱鏁伴噺" min-width="140">
+ <template v-slot="{ row }">
+ <div v-for="item in row.recordList">{{ item.materialName }}[{{ item.materialCode }}]*{{ item.stock }}{{ item.materialUnitName }}</div>
+ </template>
+ </el-table-column>
+ <el-table-column prop="createUserName" label="棰嗙敤浜�" min-width="90" show-overflow-tooltip />
+ <el-table-column prop="createDate" label="鎿嶄綔鏃堕棿" min-width="140" show-overflow-tooltip />
<el-table-column prop="workTime" label="鎿嶄綔" min-width="80" show-overflow-tooltip>
<template v-slot="{ row }">
- <span @click="handleDetail(row)" class="primaryColor pointer">鏌ョ湅璇︽儏</span>
+ <span @click="handleDetail(row)" v-permissions="['business:ywoutinboundrecord:query']" class="primaryColor pointer">鏌ョ湅璇︽儏</span>
</template>
</el-table-column>
</el-table>
@@ -24,19 +28,21 @@
</div>
<!-- -->
<OutEdit v-if="isShowEdit" @close="isShowEdit = false" @success="getList" ref="OutEditRef" />
- <OutDetail v-if="isShowDetail" ref="OutDetailRef" />
+ <OutDetail v-if="isShowDetail" ref="InDetailRef" />
</div>
</template>
<script>
import Pagination from '@/components/common/Pagination'
import QueryForm from '@/components/common/QueryForm'
-import OutEdit from './components/OutEdit'
-import OutDetail from './components/OutDetail'
+import OutEdit from './components/OutEdit.vue'
+import OutDetail from './components/OutDetail.vue'
import dayjs from 'dayjs'
import duration from 'dayjs/plugin/duration'
dayjs.extend(duration)
-import { platformLogPage, getPlatformGroupList } from '@/api'
+import { ywOutinboundPage } from '@/api'
+import { fetchList as getStoreList } from '@/api/ywWarehouse'
+import { StoreTypeOps, rules } from './components/config'
export default {
components: {
Pagination,
@@ -54,26 +60,34 @@
page: 1,
total: 0
},
- filters: {},
- list: [{}],
+ filters: {
+ inOut: 1
+ },
+ StoreTypeOps,
+ list: [],
total: 0,
queryFormConfig: {
formItems: [
{
- filed: 'carCodeFront',
+ filed: 'code',
type: 'input',
label: '鍑哄簱鍗曞彿',
},
{
- filed: 'platformGroupId',
+ filed: 'warehouseId',
type: 'select',
label: '鎵�鍦ㄤ粨搴�',
+ labelCode: 'name',
+ valueCode: 'id',
options: []
},
{
- filed: 'carCodeFront',
- type: 'input',
+ filed: 'type',
+ type: 'select',
label: '鍑哄簱绫诲瀷',
+ labelCode: 'name',
+ valueCode: 'id',
+ options: StoreTypeOps.filter(i => i.type == 0)
},
],
online: true
@@ -81,8 +95,8 @@
}
},
created() {
- // this.getList()
- // this.getGroupList()
+ this.getList()
+ this.initData()
},
methods: {
handleSub() {
@@ -98,45 +112,55 @@
this.$refs.OutEditRef.isShowModal = true
})
},
- handleDetail() {
+ handleDetail(row) {
this.isShowDetail = true
this.$nextTick(() => {
- this.$refs.OutDetailRef.visible = true
+ this.$refs.InDetailRef.visible = true
+ this.$refs.InDetailRef.getDetail(row.id)
})
},
- handleEx() { },
- getGroupList() {
- getPlatformGroupList({ queryData: 0, queryType: 0 }).then(res => {
- this.queryFormConfig.formItems[1].options = res.map(i => {
- return {
- value: i.id,
- label: i.name
- }
+ handleEx() {
+ this.$dialog.exportConfirm('纭瀵煎嚭鍚楋紵')
+ .then(() => {
+ this.loading = true
+ ywOutinboundEx({
+ page: this.pagination.page,
+ capacity: 1000000,
+ model: this.filters
+ })
+ .then(response => {
+ this.download(response)
+ })
+ .catch(e => {
+ this.$tip.apiFailed(e)
+ })
+ .finally(() => {
+ this.loading = false
+ })
})
- // this.queryFormConfig.formItems[1].options.unshift({ value: '', label: '鍏ㄩ儴鏈堝彴缁�' })
+ .catch(() => { })
+ },
+ initData() {
+ getStoreList({ capacity: 9999, page: 1, model: {} }).then(res => {
+ this.queryFormConfig.formItems[1].options = res.records || []
})
},
getList(page) {
const { pagination, filters } = this
this.loading = true
if(page){pagination.page = page}
- platformLogPage({
+ ywOutinboundPage({
model: {
- ...filters,
- queryStatus: '6,7,8',
- beginWorkDateStart: filters.selDate && filters.selDate.length > 0 ? filters.selDate[0] : null,
- beginWorkDateEnd: filters.selDate && filters.selDate.length > 0 ? filters.selDate[1] : null,
+ ...filters
},
- sorts: [{ direction: 'DESC', property: 'param1' }],
+ // sorts: [{ direction: 'DESC', property: 'param1' }],
capacity: pagination.pageSize,
page: page,
}).then(res => {
this.loading = false
this.list = res.records || []
this.list.forEach(item => {
- item.inTypeTemp = item.inType == 0 ? '鏁存墭鐩�' : '浠剁儫'
- item.taskOrigin = 'WMS鑾峰彇'
- item.workTime = dayjs.duration(item.param3, 'seconds').format('H鏃秏鍒唖绉�')
+ item.typeName = this.StoreTypeOps[item.type].name
})
this.pagination.total = res.total || 0
}, () => {
@@ -144,7 +168,9 @@
})
},
clear() {
- this.filters = {}
+ this.filters = {
+ inOut: 1
+ }
this.pagination.pageSize = 10
this.pagination.page = 1
this.getList()
diff --git a/admin/src/views/stock/query.vue b/admin/src/views/stock/query.vue
index 3dd9bdb..d5d750f 100644
--- a/admin/src/views/stock/query.vue
+++ b/admin/src/views/stock/query.vue
@@ -2,16 +2,16 @@
<div class="main_app">
<QueryForm v-model="filters" :query-form-config="queryFormConfig" @handleQuery="getList(1)" @clear="clear" />
<div class="mt20">
- <el-button @click="handleEx()" v-permissions="['business:ywpatrolline:create']">瀵煎嚭</el-button>
+ <el-button @click="handleEx" v-permissions="['business:ywstock:exportExcel']">瀵煎嚭</el-button>
</div>
<el-table v-loading="loading" :data="list" stripe>
- <el-table-column prop="platformName" label="璧勪骇缂栫爜" min-width="100" show-overflow-tooltip />
- <el-table-column prop="platformGroupName" label="璧勪骇鍚嶇О" min-width="100" show-overflow-tooltip />
- <el-table-column prop="carCodeFront" label="鏉$爜" min-width="100" show-overflow-tooltip />
- <el-table-column prop="carCodeBack" label="鍝佺墝" min-width="100" show-overflow-tooltip />
- <el-table-column prop="param1" label="瑙勬牸鍨嬪彿" min-width="100" show-overflow-tooltip />
- <el-table-column prop="param2" label="鎵�鍦ㄤ粨搴�" min-width="100" show-overflow-tooltip />
- <el-table-column prop="workTime" label="搴撳瓨" min-width="80" show-overflow-tooltip />
+ <el-table-column prop="materialCode" label="鐗╂枡缂栫爜" min-width="100" show-overflow-tooltip />
+ <el-table-column prop="materialName" label="鐗╂枡鍚嶇О" min-width="100" show-overflow-tooltip />
+ <el-table-column prop="materialQrcode" label="鏉$爜" min-width="100" show-overflow-tooltip />
+ <el-table-column prop="materialBrand" label="鍝佺墝" min-width="100" show-overflow-tooltip />
+ <el-table-column prop="materialAttr" label="瑙勬牸鍨嬪彿" min-width="100" show-overflow-tooltip />
+ <el-table-column prop="warehouseName" label="鎵�鍦ㄤ粨搴�" min-width="100" show-overflow-tooltip />
+ <el-table-column prop="stock" label="搴撳瓨" min-width="80" show-overflow-tooltip />
</el-table>
<div class="mt20">
<Pagination @size-change="handleSizeChange" @current-change="getList" :pagination="pagination" />
@@ -25,7 +25,7 @@
import dayjs from 'dayjs'
import duration from 'dayjs/plugin/duration'
dayjs.extend(duration)
-import { platformLogPage, getPlatformGroupList } from '@/api'
+import { ywStockPage,ywStockPageEx } from '@/api/store/index'
export default {
components: {
Pagination,
@@ -45,77 +45,68 @@
queryFormConfig: {
formItems: [
{
- filed: 'platformGroupId',
+ filed: 'warehouseId',
type: 'select',
label: '鎵�鍦ㄤ粨搴�',
options: []
},
{
- filed: 'carCodeFront',
+ filed: 'materialCode',
type: 'input',
- label: '璧勪骇淇℃伅',
- placeholder: '璇疯緭鍏ヨ祫浜у悕绉�/缂栫爜'
+ label: '鐗╂枡鍚嶇О/缂栫爜',
+ placeholder: '璇疯緭鍏ョ墿鏂欏悕绉�/缂栫爜'
},
{
- filed: 'carCodeFront',
+ filed: 'materialAttr',
type: 'input',
label: '鍨嬪彿',
},
- ],
- online: true
+ ]
}
}
},
created() {
- // this.getList()
- // this.getGroupList()
+ this.getList()
},
methods: {
- handleSub() {
- this.$refs.ruleForm.validate((valid) => {
- if (valid) {
- alert('submit!')
- }
- })
- },
- handleEx() { },
- getGroupList() {
- getPlatformGroupList({ queryData: 0, queryType: 0 }).then(res => {
- this.queryFormConfig.formItems[1].options = res.map(i => {
- return {
- value: i.id,
- label: i.name
- }
- })
- // this.queryFormConfig.formItems[1].options.unshift({ value: '', label: '鍏ㄩ儴鏈堝彴缁�' })
- })
- },
getList(page) {
const { pagination, filters } = this
this.loading = true
- platformLogPage({
+ ywStockPage({
model: {
- ...filters,
- queryStatus: '6,7,8',
- beginWorkDateStart: filters.selDate && filters.selDate.length > 0 ? filters.selDate[0] : null,
- beginWorkDateEnd: filters.selDate && filters.selDate.length > 0 ? filters.selDate[1] : null,
+ ...filters
},
- sorts: [{ direction: 'DESC', property: 'param1' }],
capacity: pagination.pageSize,
page: page || pagination.page,
}).then(res => {
this.loading = false
this.list = res.records || []
- this.list.forEach(item => {
- item.inTypeTemp = item.inType == 0 ? '鏁存墭鐩�' : '浠剁儫'
- item.taskOrigin = 'WMS鑾峰彇'
- item.workTime = dayjs.duration(item.param3, 'seconds').format('H鏃秏鍒唖绉�')
- })
this.pagination.total = res.total || 0
}, () => {
this.loading = false
})
},
+ handleEx() {
+ this.$dialog.exportConfirm('纭瀵煎嚭鍚楋紵')
+ .then(() => {
+ this.loading = true
+ ywStockPageEx({
+ page: this.pagination.page,
+ capacity: 1000000,
+ model: this.filters
+ })
+ .then(response => {
+ this.download(response)
+ })
+ .catch(e => {
+ this.$tip.apiFailed(e)
+ })
+ .finally(() => {
+ this.loading = false
+ })
+ })
+ .catch(() => { })
+ },
clear() {
this.filters = {}
this.pagination.pageSize = 10
diff --git a/admin/src/views/stock/record.vue b/admin/src/views/stock/record.vue
index f7f37f0..b2e1863 100644
--- a/admin/src/views/stock/record.vue
+++ b/admin/src/views/stock/record.vue
@@ -2,41 +2,70 @@
<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 @click="handleEx()" v-permissions="['business:ywoutinboundrecord:exportExcel']">瀵煎嚭</el-button>
</div>
<el-table v-loading="loading" :data="list" stripe>
- <el-table-column prop="platformName" label="鍗曟嵁鏃ユ湡" min-width="100" show-overflow-tooltip />
- <el-table-column prop="platformName" label="璧勪骇缂栫爜" min-width="100" show-overflow-tooltip />
- <el-table-column prop="platformGroupName" label="璧勪骇鍚嶇О" min-width="100" show-overflow-tooltip />
- <el-table-column prop="carCodeFront" label="璧勪骇鍒嗙被" min-width="100" show-overflow-tooltip />
- <el-table-column prop="carCodeBack" label="鏁伴噺" min-width="80" show-overflow-tooltip />
- <el-table-column prop="param1" label="绫诲瀷" min-width="80" show-overflow-tooltip />
- <el-table-column prop="workTime" label="浠撳簱" min-width="90" show-overflow-tooltip />
- <el-table-column prop="workTime" label="鍗曟嵁缂栧彿" min-width="120" show-overflow-tooltip />
- <el-table-column prop="workTime" label="鍒涘缓浜�" min-width="80" show-overflow-tooltip />
- <el-table-column prop="workTime" label="鍒涘缓鏃堕棿" min-width="140" show-overflow-tooltip />
+ <el-table-column prop="doneDate" label="鍗曟嵁鏃ユ湡" min-width="90" show-overflow-tooltip />
+ <el-table-column prop="materialCode" label="鐗╂枡缂栫爜" min-width="90" show-overflow-tooltip />
+ <el-table-column prop="materialName" label="鐗╂枡鍚嶇О" min-width="90" show-overflow-tooltip />
+ <el-table-column prop="carCodeFront" label="鐗╂枡鍒嗙被" min-width="120" show-overflow-tooltip>
+ <template v-slot="{ row }">
+ <span>{{ row.categoryParentName }}/{{ row.categoryName }}</span>
+ </template>
+ </el-table-column>
+ <el-table-column prop="carCodeBack" label="鏁伴噺" min-width="80" show-overflow-tooltip>
+ <template v-slot="{ row }">
+ <span>{{ row.stock }}{{ row.materialUnitName }}</span>
+ </template>
+ </el-table-column>
+ <el-table-column prop="param1" label="绫诲瀷" min-width="70" show-overflow-tooltip>
+ <template v-slot="{ row }">
+ <span v-if="row.type || row.type == 0">{{ StoreTypeOps[row.type].name }}</span>
+ </template>
+ </el-table-column>
+ <el-table-column prop="warehouseName" label="浠撳簱" min-width="90" show-overflow-tooltip />
+ <el-table-column prop="code" label="鍗曟嵁缂栧彿" min-width="140">
+ <template v-slot="{ row }">
+ <span class="primaryColor pointer" @click='detailClick(row)'>{{ row.code }}</span>
+ </template>
+ </el-table-column>
+ <el-table-column prop="createUserName" label="鍒涘缓浜�" min-width="80" show-overflow-tooltip />
+ <el-table-column prop="createDate" label="鍒涘缓鏃堕棿" min-width="140" show-overflow-tooltip />
</el-table>
<div class="mt20">
<Pagination @size-change="handleSizeChange" @current-change="getList" :pagination="pagination" />
</div>
+ <!-- -->
+ <OutDetail v-if="isShowOutDetail" ref="OutDetailRef" />
+ <InDetail v-if="isShowInDetail" ref="InDetailRef" />
</div>
</template>
<script>
import Pagination from '@/components/common/Pagination'
import QueryForm from '@/components/common/QueryForm'
+import InDetail from './components/InDetail'
+import OutDetail from './components/OutDetail.vue'
+
import dayjs from 'dayjs'
import duration from 'dayjs/plugin/duration'
+
dayjs.extend(duration)
-import { platformLogPage, getPlatformGroupList } from '@/api'
+import { ywOutinboundRecord, ywOutinboundRecordEx } from '@/api'
+import { fetchList as getStoreList } from '@/api/ywWarehouse'
+import { StoreTypeOps } from './components/config'
export default {
components: {
Pagination,
- QueryForm
+ QueryForm,
+ InDetail,
+ OutDetail
},
data() {
return {
loading: false,
+ isShowInDetail: false,
+ isShowOutDetail: false,
pagination: {
pageSize: 10,
page: 1,
@@ -45,29 +74,34 @@
filters: {},
list: [],
total: 0,
+ StoreTypeOps,
queryFormConfig: {
formItems: [
{
- filed: 'carCodeFront',
+ filed: 'materialCode',
type: 'input',
- label: '璧勪骇缂栫爜',
+ label: '鐗╂枡缂栫爜',
},
{
- filed: 'platformGroupId',
+ filed: 'warehouseId',
type: 'select',
+ labelCode: 'name',
+ valueCode: 'id',
label: '鎵�鍦ㄤ粨搴�',
options: []
},
{
- filed: 'carCodeFront',
+ filed: 'code',
type: 'input',
label: '鍗曟嵁缂栧彿',
},
{
- filed: 'platformGroupId',
+ filed: 'type',
type: 'select',
label: '鍗曟嵁绫诲瀷',
- options: []
+ labelCode: 'name',
+ valueCode: 'id',
+ options: StoreTypeOps
},
{
filed: 'selDate',
@@ -76,7 +110,7 @@
},
{
filed: 'selTime',
- type: 'daterange',
+ type: 'datetimerange',
label: '鍒涘缓鏃堕棿',
},
],
@@ -85,8 +119,8 @@
}
},
created() {
- // this.getList()
- // this.getGroupList()
+ this.getList()
+ this.initData()
},
methods: {
handleSub() {
@@ -96,39 +130,77 @@
}
})
},
- handleEx() { },
- getGroupList() {
- getPlatformGroupList({ queryData: 0, queryType: 0 }).then(res => {
- this.queryFormConfig.formItems[1].options = res.map(i => {
- return {
- value: i.id,
- label: i.name
- }
+ detailClick(item) {
+ const index = item.code.indexOf('RK')
+ if(index > -1){
+ this.isShowInDetail = true
+ this.$nextTick(() => {
+ this.$refs.InDetailRef.visible = true
+ this.$refs.InDetailRef.getDetail(item.outInBoundId)
})
- // this.queryFormConfig.formItems[1].options.unshift({ value: '', label: '鍏ㄩ儴鏈堝彴缁�' })
+ }else{
+ this.isShowOutDetail = true
+ this.$nextTick(() => {
+ this.$refs.OutDetailRef.visible = true
+ this.$refs.OutDetailRef.getDetail(item.outInBoundId)
+ })
+ }
+ },
+ handleEx() {
+ this.$dialog.exportConfirm('纭瀵煎嚭鍚楋紵')
+ .then(() => {
+ this.loading = true
+ ywOutinboundRecordEx({
+ page: this.pagination.page,
+ capacity: 1000000,
+ model: this.filters
+ })
+ .then(response => {
+ this.download(response)
+ })
+ .catch(e => {
+ this.$tip.apiFailed(e)
+ })
+ .finally(() => {
+ this.loading = false
+ })
+ })
+ .catch(() => { })
+ },
+ initData() {
+ getStoreList({ capacity: 9999, page: 1, model: {} }).then(res => {
+ this.queryFormConfig.formItems[1].options = res.records || []
})
},
getList(page) {
const { pagination, filters } = this
this.loading = true
- platformLogPage({
+ if (filters.selDate && filters.selDate.length > 0) {
+ filters.doneDateStart = filters.selDate[0]
+ filters.doneDateEnd = filters.selDate[1]
+ } else {
+ filters.doneDateStart = null
+ filters.doneDateEnd = null
+ }
+ if (filters.selTime && filters.selTime.length > 0) {
+ filters.createDateStart = filters.selTime[0]
+ filters.createDateEnd = filters.selTime[1]
+ } else {
+ filters.createDateStart = null
+ filters.createDateEnd = null
+ }
+ if(page){
+ pagination.page = page
+ }
+ ywOutinboundRecord({
model: {
- ...filters,
- queryStatus: '6,7,8',
- beginWorkDateStart: filters.selDate && filters.selDate.length > 0 ? filters.selDate[0] : null,
- beginWorkDateEnd: filters.selDate && filters.selDate.length > 0 ? filters.selDate[1] : null,
+ ...filters
},
- sorts: [{ direction: 'DESC', property: 'param1' }],
capacity: pagination.pageSize,
- page: page || pagination.page,
+ page: pagination.page,
}).then(res => {
this.loading = false
this.list = res.records || []
- this.list.forEach(item => {
- item.inTypeTemp = item.inType == 0 ? '鏁存墭鐩�' : '浠剁儫'
- item.taskOrigin = 'WMS鑾峰彇'
- item.workTime = dayjs.duration(item.param3, 'seconds').format('H鏃秏鍒唖绉�')
- })
this.pagination.total = res.total || 0
}, () => {
this.loading = false
diff --git a/admin/src/views/workorder/components/OperaYwWorkorderWindow.vue b/admin/src/views/workorder/components/OperaYwWorkorderWindow.vue
index c97fbf4..f3c7e3a 100644
--- a/admin/src/views/workorder/components/OperaYwWorkorderWindow.vue
+++ b/admin/src/views/workorder/components/OperaYwWorkorderWindow.vue
@@ -3,32 +3,48 @@
@confirm="confirm">
<el-form :model="form" ref="form" :rules="rules">
<el-form-item label="浣嶇疆绫诲瀷" prop="areaType">
- <el-select v-model="form.areaType">
- <el-option label="瀹ゅ唴缁翠慨" value="0"></el-option>
- <el-option label="鍏叡缁翠慨" value="1"></el-option>
+ <el-select v-model="form.areaType" @change="changeType">
+ <el-option label="瀹ゅ唴缁翠慨" :value="0"></el-option>
+ <el-option label="鍏叡缁翠慨" :value="1"></el-option>
</el-select>
</el-form-item>
- <el-form-item label="閫夋嫨椤圭洰" prop="projectId">
- <el-select v-model="form.projectId" clearable filterable @change="getBuild">
- <el-option v-for="item in projectList" :label="item.name" :value="item.id" />
- </el-select>
+
+ <el-form-item label="鎶ヤ慨鍖哄煙" prop="rooms">
+ <el-cascader
+ v-model="form.rooms"
+ :disabled="![0,1].includes(form.areaType)"
+ ref="cascader"
+ @change="getHouseVal"
+ placeholder="璇烽�夋嫨鎶ヤ慨鍖哄煙"
+ :options="form.areaType === 0 ? houseList : houseList1"
+ :props="{
+ label: 'name',
+ value: 'id',
+ children: 'projectDataVOList'
+ }" />
</el-form-item>
- <el-form-item label="閫夋嫨妤煎畤" prop="buildingId">
- <el-select v-model="form.buildingId" clearable filterable @change="changeBuild">
- <el-option v-for="item in buildList" :label="item.name" :value="item.id" />
- </el-select>
- </el-form-item>
+
+<!-- <el-form-item label="閫夋嫨椤圭洰" prop="projectId">-->
+<!-- <el-select v-model="form.projectId" clearable filterable @change="getBuild">-->
+<!-- <el-option v-for="item in projectList" :label="item.name" :value="item.id" />-->
+<!-- </el-select>-->
+<!-- </el-form-item>-->
+<!-- <el-form-item label="閫夋嫨妤煎畤" prop="buildingId">-->
+<!-- <el-select v-model="form.buildingId" clearable filterable @change="changeBuild">-->
+<!-- <el-option v-for="item in buildList" :label="item.name" :value="item.id" />-->
+<!-- </el-select>-->
+<!-- </el-form-item>-->
- <el-form-item v-if="form.areaType == 1" label="閫夋嫨妤煎眰" prop="floorId">
- <el-select v-model="form.floorId">
- <el-option v-for="item in levelList" clearable filterable :label="item.name" :value="item.id" />
- </el-select>
- </el-form-item>
- <el-form-item v-if="form.areaType == 0" label="閫夋嫨鎴块棿" prop="roomId">
- <el-select v-model="form.roomId" clearable filterable>
- <el-option v-for="item in roomList" :label="item.roomNum" :value="item.id" />
- </el-select>
- </el-form-item>
+<!-- <el-form-item v-if="form.areaType == 1" label="閫夋嫨妤煎眰" prop="floorId">-->
+<!-- <el-select v-model="form.floorId">-->
+<!-- <el-option v-for="item in levelList" clearable filterable :label="item.name" :value="item.id" />-->
+<!-- </el-select>-->
+<!-- </el-form-item>-->
+<!-- <el-form-item v-if="form.areaType == 0" label="閫夋嫨鎴块棿" prop="roomId">-->
+<!-- <el-select v-model="form.roomId" clearable filterable>-->
+<!-- <el-option v-for="item in roomList" :label="item.roomNum" :value="item.id" />-->
+<!-- </el-select>-->
+<!-- </el-form-item>-->
<el-form-item label="宸ュ崟鍒嗙被" prop="cateId">
<el-cascader v-model="form.areaIds" @change="changeSel" placeholder="璇烽�夋嫨鍒嗙被" clearable :options="cateList"
:props="{
@@ -63,8 +79,6 @@
<el-input type="textarea" :rows="4" v-model="form.content" placeholder="璇疯緭鍏�" :maxlength="300" v-trim />
</el-form-item>
</el-form>
- <!-- -->
-
</GlobalWindow>
</template>
@@ -72,7 +86,7 @@
import BaseOpera from '@/components/base/BaseOpera'
import GlobalWindow from '@/components/common/GlobalWindow'
import { Loading, Message } from 'element-ui'
-import { getProjectList } from '@/api/project/ywProject'
+import { getProjectList, tree } from '@/api/project/ywProject'
import { getBuildList } from '@/api/project/ywBuilding'
import { getRoomList } from '@/api/project/ywRoom'
import { getFloorList } from '@/api/project/yeFloor'
@@ -87,6 +101,9 @@
// 琛ㄥ崟鏁版嵁
form: {
id: null,
+
+ rooms: [],
+
editDate: '',
floor: '',
title: '',
@@ -102,7 +119,7 @@
userId: '',
submitDate: '',
cateId: '',
- areaType: '0',
+ areaType: 0,
code: '',
dealStatus: '',
dispatchUserId: '',
@@ -113,6 +130,8 @@
dealInfo: '',
dealType: ''
},
+ houseList: [],
+ houseList1: [],
loadingInstance: null,
// 楠岃瘉瑙勫垯
rules,
@@ -140,7 +159,8 @@
this.visible = true
this.getProject()
this.getCate()
- // 鏂板缓
+ this.getHouseTree()
+ // 鏂板缓
if (target == null) {
this.form = {
id: null,
@@ -159,7 +179,7 @@
userId: '',
submitDate: '',
cateId: '',
- areaType: '0',
+ areaType: 0,
code: '',
dealStatus: '',
dispatchUserId: '',
@@ -185,6 +205,65 @@
this.form[key] = target[key]
}
})
+ },
+ changeType(e) {
+ this.form.rooms = []
+ this.form.projectId = ''
+ this.form.buildingId = ''
+ this.form.levelList = ''
+ this.form.roomId = ''
+ },
+ getHouseVal(e) {
+ if (this.form.areaType === 0) {
+ this.form.projectId = e[0]
+ this.form.buildingId = e[1]
+ this.form.floorId = e[2]
+ this.form.roomId = e[3]
+ } else {
+ this.form.projectId = e[0]
+ this.form.buildingId = e[1]
+ this.form.floorId = e[2]
+ }
+ },
+ getHouseTree() {
+ tree({}).then(res => {
+ let arr1 = JSON.parse(JSON.stringify(res))
+ let arr2 = JSON.parse(JSON.stringify(res))
+ this.addParamToArray(arr1)
+ this.addParamToArray1(arr2)
+ this.houseList = arr1
+ this.houseList1 = arr2
+ })
+ },
+ addParamToArray(arr) {
+ for (let i = 0; i < arr.length; i++) {
+ const currentItem = arr[i].projectDataVOList
+ if (currentItem && currentItem.length >= 0) {
+ currentItem.forEach(item => {
+ if (item.lv === 3) {
+ delete item.projectDataVOList
+ }
+ })
+ }
+ if (currentItem && currentItem.length > 0) {
+ this.addParamToArray(currentItem)
+ }
+ }
+ },
+ addParamToArray1(arr) {
+ for (let i = 0; i < arr.length; i++) {
+ const currentItem = arr[i].projectDataVOList
+ if (currentItem && currentItem.length >= 0) {
+ currentItem.forEach(item => {
+ if (item.lv === 2) {
+ delete item.projectDataVOList
+ }
+ })
+ }
+ if (currentItem && currentItem.length > 0) {
+ this.addParamToArray1(currentItem)
+ }
+ }
},
close() {
this.visible = false
@@ -347,4 +426,4 @@
}
}
}
-</style>
\ No newline at end of file
+</style>
diff --git a/admin/src/views/workorder/components/detail.vue b/admin/src/views/workorder/components/detail.vue
index f2e7d5f..0743cfa 100644
--- a/admin/src/views/workorder/components/detail.vue
+++ b/admin/src/views/workorder/components/detail.vue
@@ -1,14 +1,17 @@
<template>
- <GlobalWindow width="960px" title="宸ュ崟璇︽儏" :visible.sync="visible" :confirm-working="isWorking" @close="close"
+ <GlobalWindow width="100%" title="宸ュ崟璇︽儏" :visible.sync="visible" :confirm-working="isWorking" @close="close"
@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 v-if="info.origin === 1" @click="openWT">鏌ョ湅闂涓婃姤</el-button>
</div>
<div class="main_content">
<div class="list">
@@ -23,6 +26,11 @@
<div class="item">
<div class="la">宸ュ崟鍒嗙被</div>
<div class="val">{{ info.categoryName }}</div>
+ </div>
+ <div class="item">
+ <div class="la">鏉ユ簮</div>
+ <div class="val" v-if="info.origin === 0">鑷缓</div>
+ <div class="val" v-if="info.origin === 1">闂杞伐鍗�</div>
</div>
<div class="item">
<div class="la">涓婃姤浜�</div>
@@ -164,19 +172,24 @@
</template>
</el-form>
</div>
+ <!-- 闂涓婃姤璇︽儏 -->
+ <problemReportingDetails ref="problemReportingDetails" />
</GlobalWindow>
</template>
<script>
import GlobalWindow from '@/components/common/GlobalWindow'
import BaseOpera from '@/components/base/BaseOpera'
+import problemReportingDetails from './problemReportingDetails'
import { detailById, dispatchOrder, dealOrder } from '@/api/workorder/ywWorkorder'
+import { getByWorkorderId } from '@/api/ywProblem'
import { getUserList } from '@/api/system/user'
import { Message, Loading } from 'element-ui'
import dayjs from 'dayjs'
export default {
components: {
- GlobalWindow
+ GlobalWindow,
+ problemReportingDetails
},
extends: BaseOpera,
data() {
@@ -209,6 +222,13 @@
this.getStaff()
},
methods: {
+ openWT() {
+ getByWorkorderId(this.id)
+ .then(res => {
+ console.log(res)
+ this.$refs.problemReportingDetails.open('闂涓婃姤璇︽儏', res)
+ })
+ },
confirm() {
this.$refs['form'].validate((valid) => {
if (valid) {
@@ -308,39 +328,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/components/handleProblem.vue b/admin/src/views/workorder/components/handleProblem.vue
index 47a1896..6560bc3 100644
--- a/admin/src/views/workorder/components/handleProblem.vue
+++ b/admin/src/views/workorder/components/handleProblem.vue
@@ -1,95 +1,122 @@
<template>
<GlobalWindow
- title="闂涓婃姤"
- :showConfirm="false"
+ :title="title"
:visible.sync="visible"
- width="100%">
+ width="100%"
+ @confirm="confirm">
<div class="wt">
<div class="wt_head">
<div class="wt_head_title">
- 闂璇︽儏
- <el-tag style="margin-left: 10px;">杞伐鍗�</el-tag>
+ <div class="title">闂璇︽儏</div>
+ <el-tag style="margin-left: 10px;" v-if="info.dealStatus === 0">寰呭鐞�</el-tag>
+ <el-tag style="margin-left: 10px;" v-if="info.dealStatus === 1">宸茶浆宸ュ崟</el-tag>
+ <el-tag style="margin-left: 10px;" v-if="info.dealStatus === 2">宸插叧闂�</el-tag>
</div>
- <el-button>鏌ョ湅宸ュ崟</el-button>
</div>
<div class="wt_content">
<div class="wt_content_row" style="width: 25%;">
- 浣嶇疆锛�-
+ 浣嶇疆锛歿{info.position || '-'}}
</div>
<div class="wt_content_row" style="width: 25%;">
- 涓婃姤浜猴細寮犱笁涓�
+ 涓婃姤浜猴細{{info.name || '-'}}
</div>
<div class="wt_content_row" style="width: 50%;">
- 涓婃姤浜虹數璇濓細180553847234
+ 涓婃姤浜虹數璇濓細{{info.phone || '-'}}
</div>
<div class="wt_content_row" style="width: 100%; margin-top: 15px;">
- 涓婃姤鏃堕棿锛�2024-11-21 12:00:23
+ 涓婃姤鏃堕棿锛歿{info.submitDate || '-'}}
</div>
<div class="wt_content_row" style="width: 100%; margin-top: 15px;">
- 闂鎻忚堪锛氳繖鏄棶棰樻弿杩拌繖鏄棶棰樻弿杩拌繖鏄棶棰樻弿杩拌繖鏄棶棰樻弿杩拌繖鏄棶棰樻弿杩拌繖鏄棶棰樻弿杩拌繖鏄棶棰樻弿杩拌繖鏄棶棰樻弿杩�
+ 闂鎻忚堪锛歿{info.content || '-'}}
</div>
- <div class="wt_content_row" style="width: 100%; margin-top: 15px;">
+ <div class="wt_content_row" style="width: 100%; margin-top: 15px; margin-bottom: 20px;">
<div class="wt_content_row_label">闂鍥剧墖锛�</div>
- <div class="wt_content_row_list">
- <div class="wt_content_row_list_img">
- <img src="" alt="" />
+ <div class="wt_content_row_list" v-if="info.fileList && info.fileList.length >= 0">
+ <div class="wt_content_row_list_img" v-for="(item, index) in info.fileList" :key="index">
+ <el-image
+ style="width: 100px; height: 100px"
+ :src="item.fileurlFull"
+ :preview-src-list="info.fileList.map(item => item.fileurlFull)">
+ </el-image>
</div>
</div>
</div>
</div>
- <el-form :model="form" :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm">
- <el-form-item label="澶勭悊鏂瑰紡" prop="resource">
- <el-radio-group v-model="form.resource">
- <el-radio :label="0">杞伐鍗�</el-radio>
- <el-radio :label="1">鍏抽棴闂</el-radio>
+ <el-form :model="form" :rules="rules" ref="form" label-width="100px" class="demo-ruleForm">
+ <el-form-item label="澶勭悊鏂瑰紡" prop="dealStatus">
+ <el-radio-group v-model="form.dealStatus">
+ <el-radio :label="1">杞伐鍗�</el-radio>
+ <el-radio :label="2">鍏抽棴闂</el-radio>
</el-radio-group>
</el-form-item>
- <div style="display: flex; align-items: center;">
- <el-form-item label="浣嶇疆绫诲瀷" prop="region">
- <el-select v-model="form.resource" placeholder="璇烽�夋嫨浣嶇疆绫诲瀷">
- <el-option label="鍖哄煙涓�" value="shanghai"></el-option>
- <el-option label="鍖哄煙浜�" value="beijing"></el-option>
- </el-select>
+ <template v-if="form.dealStatus === 1">
+ <div style="width: 100%; display: flex; align-items: center;">
+ <el-form-item label="浣嶇疆绫诲瀷" prop="workOrderAreaType">
+ <el-select v-model="form.workOrderAreaType" @change="changeType" placeholder="璇烽�夋嫨浣嶇疆绫诲瀷">
+ <el-option label="瀹ゅ唴缁翠慨" :value="0"></el-option>
+ <el-option label="鍏叡鍖哄煙" :value="1"></el-option>
+ </el-select>
+ </el-form-item>
+ <el-form-item label="鎶ヤ慨鍖哄煙" prop="rooms">
+ <el-cascader
+ v-model="form.rooms"
+ :disabled="![0,1].includes(form.workOrderAreaType)"
+ ref="cascader"
+ @change="getHouseVal"
+ placeholder="璇烽�夋嫨鎶ヤ慨鍖哄煙"
+ :options="form.workOrderAreaType === 0 ? houseList : houseList1"
+ :props="{
+ label: 'name',
+ value: 'id',
+ children: 'projectDataVOList'
+ }" />
+ </el-form-item>
+ </div>
+ <div style="width: 100%; display: flex; align-items: center;">
+ <el-form-item label="宸ュ崟鍒嗙被" prop="workOrderCateId">
+ <el-cascader v-model="form.workOrderCateId" @change="changeSel" placeholder="璇烽�夋嫨鍒嗙被" clearable :options="cateList"
+ :props="{
+ label: 'name',
+ value: 'id',
+ children: 'childCategoryList'
+ }"></el-cascader>
+ </el-form-item>
+ <el-form-item label="涓婇棬鏃堕棿" prop="workOrderGetDate" v-if="form.workOrderAreaType === 0">
+ <el-date-picker
+ v-model="form.workOrderGetDate"
+ type="datetime"
+ value-format="yyyy-MM-dd HH:mm:ss"
+ placeholder="閫夋嫨涓婇棬鏃堕棿">
+ </el-date-picker>
+ </el-form-item>
+ </div>
+ <el-form-item label="鎻忚堪" prop="dealInfo">
+ <el-input
+ type="textarea"
+ :rows="5"
+ placeholder="璇疯緭鍏ユ弿杩�"
+ v-model="form.dealInfo">
+ </el-input>
</el-form-item>
- <el-form-item label="鎶ヤ慨鍖哄煙" prop="resource">
- <el-select v-model="form.resource" placeholder="璇烽�夋嫨鎶ヤ慨鍖哄煙">
- <el-option label="鍖哄煙涓�" value="shanghai"></el-option>
- <el-option label="鍖哄煙浜�" value="beijing"></el-option>
- </el-select>
+ <el-form-item label="闂鍥剧墖" prop="resource">
+ <el-upload
+ :action="base"
+ :file-list="form.workOrderFileList"
+ accept=".png,.jpg,.jpeg,.PNG,.JPG"
+ :on-success="getFile"
+ :data="{ folder: 'YW_PROBLEM' }"
+ list-type="picture-card">
+ <i class="el-icon-plus"></i>
+ </el-upload>
</el-form-item>
- </div>
- <div style="display: flex; align-items: center;">
- <el-form-item label="宸ュ崟鍒嗙被" prop="resource">
- <el-select v-model="form.resource" placeholder="璇烽�夋嫨宸ュ崟鍒嗙被">
- <el-option label="鍖哄煙涓�" value="shanghai"></el-option>
- <el-option label="鍖哄煙浜�" value="beijing"></el-option>
- </el-select>
- </el-form-item>
- <el-form-item label="涓婇棬鏃堕棿" prop="resource">
- <el-date-picker v-model="form.resource" type="date" placeholder="閫夋嫨涓婇棬鏃堕棿"></el-date-picker>
- </el-form-item>
- </div>
- <el-form-item label="鎻忚堪" prop="resource">
+ </template>
+ <el-form-item label="鍏抽棴璇存槑" prop="dealInfo" v-if="form.dealStatus === 2">
<el-input
type="textarea"
:rows="5"
- placeholder="璇疯緭鍏ユ弿杩�"
- v-model="form.resource">
- </el-input>
- </el-form-item>
- <el-form-item label="闂鍥剧墖" prop="resource">
- <el-upload
- action="https://jsonplaceholder.typicode.com/posts/"
- list-type="picture-card">
- <i class="el-icon-plus"></i>
- </el-upload>
- </el-form-item>
- <el-form-item label="鍏抽棴闂" prop="resource">
- <el-input
- type="textarea"
- :rows="5"
+ maxlength="300"
placeholder="璇疯緭鍏ュ叧闂棶棰�"
- v-model="form.resource">
+ v-model="form.dealInfo">
</el-input>
</el-form-item>
</el-form>
@@ -100,6 +127,9 @@
<script>
import BaseOpera from '@/components/base/BaseOpera'
import GlobalWindow from '@/components/common/GlobalWindow'
+ import { fetchList as getCateList } from '@/api/business/category.js'
+ import { tree } from '@/api/project/ywProject'
+ import { editProblem } from '@/api/ywProblem'
export default {
name: "handleProblem",
extends: BaseOpera,
@@ -107,61 +137,184 @@
data() {
return {
info: {},
+ cateList: [],
+ base: process.env.VUE_APP_API_PREFIX + '/visitsAdmin/cloudService/public/uploadBatch',
form: {
- resource: 0
+ dealStatus: 1,
+ workOrderAreaType: '',
+ workOrderCateId: '',
+ workOrderGetDate: '',
+ dealInfo: '',
+ workOrderFileList: [],
+ rooms: [],
+
+ workOrderProjectId: '',
+ workOrderBuildId: '',
+ workOrderFloorId: '',
+ workOrderRoomId: ''
},
+ houseList: [],
+ houseList1: [],
rules: {
- resource: [
- { required: true, message: '璇烽�夋嫨', trigger: 'change' }
+ dealStatus: [
+ { required: true, message: '璇烽�夋嫨', trigger: 'blur' }
+ ],
+ workOrderAreaType: [
+ { required: true, message: '璇烽�夋嫨', trigger: 'blur' }
+ ],
+ workOrderCateId: [
+ { required: true, message: '璇烽�夋嫨', trigger: 'blur' }
+ ],
+ dealInfo: [
+ { required: true, message: '璇疯緭鍏�', trigger: 'blur' }
+ ],
+ rooms: [
+ { required: true, message: '璇烽�夋嫨', trigger: 'blur' }
]
}
}
},
methods: {
-
+ open (title, target) {
+ this.title = title
+ this.info = target
+ this.getCate()
+ this.getHouseTree()
+ this.visible = true
+ },
+ getHouseVal(e) {
+ if (this.form.workOrderAreaType === 0) {
+ this.form.workOrderProjectId = e[0]
+ this.form.workOrderBuildId = e[1]
+ this.form.workOrderFloorId = e[2]
+ this.form.workOrderRoomId = e[3]
+ } else {
+ this.form.workOrderProjectId = e[0]
+ this.form.workOrderBuildId = e[1]
+ this.form.workOrderFloorId = e[2]
+ }
+ },
+ changeType(e) {
+ this.form.rooms = []
+ this.form.workOrderProjectId = ''
+ this.form.workOrderBuildId = ''
+ this.form.workOrderFloorId = ''
+ this.form.workOrderRoomId = ''
+ },
+ getHouseTree() {
+ tree({}).then(res => {
+ let arr1 = JSON.parse(JSON.stringify(res))
+ let arr2 = JSON.parse(JSON.stringify(res))
+ this.addParamToArray(arr1)
+ this.addParamToArray1(arr2)
+ this.houseList = arr1
+ this.houseList1 = arr2
+ })
+ },
+ addParamToArray(arr) {
+ for (let i = 0; i < arr.length; i++) {
+ const currentItem = arr[i].projectDataVOList
+ if (currentItem && currentItem.length >= 0) {
+ currentItem.forEach(item => {
+ if (item.lv === 3) {
+ delete item.projectDataVOList
+ }
+ })
+ }
+ if (currentItem && currentItem.length > 0) {
+ this.addParamToArray(currentItem)
+ }
+ }
+ },
+ addParamToArray1(arr) {
+ for (let i = 0; i < arr.length; i++) {
+ const currentItem = arr[i].projectDataVOList
+ if (currentItem && currentItem.length >= 0) {
+ currentItem.forEach(item => {
+ if (item.lv === 2) {
+ delete item.projectDataVOList
+ }
+ })
+ }
+ if (currentItem && currentItem.length > 0) {
+ this.addParamToArray1(currentItem)
+ }
+ }
+ },
+ getFile(e) {
+ console.log(e)
+ this.form.workOrderFileList.push({ ...e })
+ },
+ changeSel(e) {
+ if (e && e.length == 2) {
+ this.$set(this.form, 'workOrderCateId', e[1])
+ } else {
+ this.$set(this.form, 'workOrderCateId', '')
+ }
+ },
+ getCate() {
+ getCateList({
+ model: { type: 3 },
+ capacity: 1000,
+ page: 1,
+ }).then(res => {
+ this.cateList = res.records || []
+ })
+ },
+ confirm() {
+ this.$refs.form.validate((valid) => {
+ if (!valid) {
+ return
+ }
+ this.isWorking = true
+ editProblem({
+ ...this.form,
+ id: this.info.id
+ })
+ .then(() => {
+ this.visible = false
+ this.$tip.apiSuccess('鎿嶄綔鎴愬姛')
+ this.$emit('success')
+ })
+ .finally(() => {
+ this.isWorking = false
+ })
+ })
+ }
}
}
</script>
<style lang="scss" scoped>
+ @import '@/assets/style/variables.scss';
.wt {
width: 100%;
display: flex;
flex-direction: column;
- .wt_head {
- width: 100%;
- padding: 20px 0;
- box-sizing: border-box;
- display: flex;
- align-items: center;
- justify-content: space-between;
- .wt_head_title {
- display: flex;
- align-items: center;
- font-size: 16px;
- color: black;
- margin-right: 10px;
- }
- }
+
.wt_content {
width: 100%;
display: flex;
align-items: center;
flex-wrap: wrap;
+
.wt_content_row {
font-size: 14px;
color: rgb(51, 51, 51);
display: flex;
align-items: self-start;
+
.wt_content_row_label {
flex-shrink: 0;
font-size: 14px;
color: rgb(51, 51, 51);
}
+
.wt_content_row_list {
flex: 1;
display: flex;
align-items: center;
+
.wt_content_row_list_img {
width: 106px;
height: 93px;
@@ -170,9 +323,11 @@
justify-content: center;
overflow-x: hidden;
margin-right: 15px;
+
&:last-child {
margin: 0 !important;
}
+
img {
width: 100%;
}
@@ -180,5 +335,30 @@
}
}
}
+
+ .wt_head {
+ width: 100%;
+ padding: 20px 0;
+ box-sizing: border-box;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+
+ .wt_head_title {
+ display: flex;
+ align-items: center;
+ font-size: 16px;
+ color: black;
+ margin-right: 10px;
+
+ .title {
+ font-weight: 500;
+ font-size: 18px;
+ color: $primary-color;
+ display: flex;
+ align-items: center;
+ }
+ }
+ }
}
</style>
diff --git a/admin/src/views/workorder/components/problemReportingDetails.vue b/admin/src/views/workorder/components/problemReportingDetails.vue
index 213c8d9..cbdcbbb 100644
--- a/admin/src/views/workorder/components/problemReportingDetails.vue
+++ b/admin/src/views/workorder/components/problemReportingDetails.vue
@@ -1,83 +1,128 @@
<template>
<GlobalWindow
- title="闂涓婃姤璇︽儏"
+ :title="title"
:showConfirm="false"
:visible.sync="visible"
width="100%">
<div class="wt">
<div class="wt_head">
<div class="wt_head_title">
- 闂璇︽儏
- <el-tag style="margin-left: 10px;">杞伐鍗�</el-tag>
+ <div class="title">闂璇︽儏</div>
+ <el-tag style="margin-left: 10px;" v-if="form.dealStatus === 0">寰呭鐞�</el-tag>
+ <el-tag style="margin-left: 10px;" v-if="form.dealStatus === 1">宸茶浆宸ュ崟</el-tag>
+ <el-tag style="margin-left: 10px;" v-if="form.dealStatus === 2">宸插叧闂�</el-tag>
</div>
- <el-button>鏌ョ湅宸ュ崟</el-button>
+ <el-button @click="handleDetail" v-if="form.dealStatus === 1">鏌ョ湅宸ュ崟</el-button>
</div>
<div class="wt_content">
<div class="wt_content_row" style="width: 25%;">
- 浣嶇疆锛�-
+ 浣嶇疆锛歿{form.position || '-'}}
</div>
<div class="wt_content_row" style="width: 25%;">
- 涓婃姤浜猴細寮犱笁涓�
+ 涓婃姤浜猴細{{form.name || '-'}}
</div>
<div class="wt_content_row" style="width: 50%;">
- 涓婃姤浜虹數璇濓細180553847234
+ 涓婃姤浜虹數璇濓細{{form.phone || '-'}}
</div>
<div class="wt_content_row" style="width: 100%; margin-top: 15px;">
- 涓婃姤鏃堕棿锛�2024-11-21 12:00:23
+ 涓婃姤鏃堕棿锛歿{form.submitDate || '-'}}
</div>
<div class="wt_content_row" style="width: 100%; margin-top: 15px;">
- 闂鎻忚堪锛氳繖鏄棶棰樻弿杩拌繖鏄棶棰樻弿杩拌繖鏄棶棰樻弿杩拌繖鏄棶棰樻弿杩拌繖鏄棶棰樻弿杩拌繖鏄棶棰樻弿杩拌繖鏄棶棰樻弿杩拌繖鏄棶棰樻弿杩�
+ 闂鎻忚堪锛歿{form.content || '-'}}
</div>
<div class="wt_content_row" style="width: 100%; margin-top: 15px;">
<div class="wt_content_row_label">闂鍥剧墖锛�</div>
- <div class="wt_content_row_list">
- <div class="wt_content_row_list_img">
- <img src="" alt="" />
+ <div class="wt_content_row_list" v-if="form.fileList && form.fileList.length >= 0">
+ <div class="wt_content_row_list_img" v-for="(item, index) in form.fileList" :key="index">
+ <el-image
+ style="width: 80px; height: 80px"
+ :src="item.fileurlFull"
+ :preview-src-list="form.fileList.map(item => item.fileurlFull)">
+ </el-image>
</div>
</div>
</div>
</div>
<div class="wt_head">
<div class="wt_head_title">
- 澶勭悊缁撴灉
+ <div class="title">闂璇︽儏</div>
</div>
</div>
<div class="wt_content">
<div class="wt_content_row" style="width: 100%;">
- 澶勭悊浜猴細寮犱笁-琛屾斂閮�
+ 澶勭悊浜猴細{{form.dealUserName}}-{{form.dealUserCompanyName}}
</div>
<div class="wt_content_row" style="width: 100%; margin-top: 15px;">
- 澶勭悊鏃堕棿锛�2024-11-21 12:00:23
+ 澶勭悊鏃堕棿锛歿{form.dealDate || '-'}}
</div>
<div class="wt_content_row" style="width: 100%; margin-top: 15px;">
- 澶勭悊缁撴灉锛氳浆宸ュ崟
+ 澶勭悊缁撴灉锛歿{returnText(form.dealStatus)}}
</div>
- <div class="wt_content_row" style="width: 100%; margin-top: 15px;">
- 鍏抽棴璇存槑锛氳鏄庤鏄庤鏄庤鏄庤鏄庤鏄庤鏄庤鏄庤鏄庤鏄庤鏄庤鏄庤鏄庤鏄庤鏄庤鏄庤鏄�
+ <div class="wt_content_row" style="width: 100%; margin-top: 15px;" v-if="form.dealStatus === 2">
+ 鍏抽棴璇存槑锛歿{form.dealInfo}}
</div>
</div>
</div>
+ <!-- 宸ュ崟璇︽儏 -->
+ <Detail v-if="showDetail" ref="DetailRef" @close="showDetail = false" />
</GlobalWindow>
</template>
<script>
import BaseOpera from '@/components/base/BaseOpera'
import GlobalWindow from '@/components/common/GlobalWindow'
+ import Detail from './detail'
+ import { getById } from '@/api/ywProblem'
export default {
name: "problemReportingDetails",
extends: BaseOpera,
- components: { GlobalWindow },
+ components: { GlobalWindow, Detail },
data() {
return {
- info: {}
+ form: {},
+ showDetail: false,
}
},
methods: {
-
+ open (title, target) {
+ this.title = title
+ this.form = target
+ getById(target.id)
+ .then(res => {
+ this.form = res
+ this.visible = true
+ })
+ },
+ handleDetail() {
+ this.showDetail = true
+ this.$nextTick(() => {
+ this.$refs.DetailRef.visible = true
+ this.$refs.DetailRef.id = this.form.workorderId
+ this.$refs.DetailRef.getDetail()
+ })
+ },
+ returnText(status) {
+ if (status === 0) {
+ return '寰呭鐞�'
+ } else if (status === 1) {
+ return '宸茶浆宸ュ崟'
+ } else if (status === 2) {
+ return '宸插叧闂�'
+ } else {
+ return ''
+ }
+ }
}
}
</script>
-
+<style lang="scss" scoped>
+ @import '@/assets/style/variables.scss';
+ .title {
+ font-weight: 500;
+ font-size: 18px;
+ color: $primary-color;
+ }
+</style>
<style lang="scss" scoped>
.wt {
width: 100%;
diff --git a/admin/src/views/workorder/problemReporting.vue b/admin/src/views/workorder/problemReporting.vue
index 98a65ed..1de3fb4 100644
--- a/admin/src/views/workorder/problemReporting.vue
+++ b/admin/src/views/workorder/problemReporting.vue
@@ -2,14 +2,14 @@
<TableLayout :permissions="['business:ywworkorder:query']">
<!-- 鎼滅储琛ㄥ崟 -->
<el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
- <el-form-item label="鎻忚堪" prop="roomNum">
- <el-input v-model="searchForm.roomNum" placeholder="璇疯緭鍏ユ弿杩�" @keypress.enter.native="search"></el-input>
+ <el-form-item label="鎻忚堪" prop="content">
+ <el-input v-model="searchForm.content" placeholder="璇疯緭鍏ユ弿杩�" @keypress.enter.native="search"></el-input>
</el-form-item>
- <el-form-item prop="areaType" label="澶勭悊鐘舵��">
- <el-select v-model="searchForm.areaType">
- <el-option label="鏈鐞�" value="0"></el-option>
- <el-option label="鐢熸垚宸ュ崟" value="1"></el-option>
- <el-option label="鍏抽棴淇濅慨" value="1"></el-option>
+ <el-form-item prop="dealStatus" label="澶勭悊鐘舵��">
+ <el-select v-model="searchForm.dealStatus">
+ <el-option label="鏈鐞�" :value="0"></el-option>
+ <el-option label="宸茶浆宸ュ崟" :value="1"></el-option>
+ <el-option label="宸插叧闂�" :value="2"></el-option>
</el-select>
</el-form-item>
<el-form-item label="涓婃姤鏃堕棿">
@@ -18,7 +18,7 @@
@change="changeSelDate"
format="yyyy-MM-dd"
value-format="yyyy-MM-dd"
- type="daterange"></el-date-picker>
+ type="daterange" />
</el-form-item>
<section>
<el-button type="primary" @click="search">鎼滅储</el-button>
@@ -28,28 +28,32 @@
<!-- 琛ㄦ牸鍜屽垎椤� -->
<template v-slot:table-wrap>
<el-table v-loading="isWorking.search" :data="tableData.list" stripe>
- <el-table-column prop="areaType" label="鎻忚堪" min-width="70px"></el-table-column>
- <el-table-column prop="areaType" label="浣嶇疆" min-width="100px"></el-table-column>
- <el-table-column prop="categoryName" label="鐜板満鍥剧墖" min-width="100px"></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>
+ <el-table-column prop="remark" label="鎻忚堪" min-width="70px"></el-table-column>
+ <el-table-column prop="position" label="浣嶇疆" min-width="100px"></el-table-column>
+ <el-table-column label="鐜板満鍥剧墖" min-width="100px">
+ <template slot-scope="{row}">
+ {{row.fileList ? row.fileList.length : 0}}寮�
+ </template>`
+ </el-table-column>
+ <el-table-column prop="name" label="涓婃姤浜�" min-width="80px"></el-table-column>
+ <el-table-column prop="phone" label="涓婃姤浜虹數璇�" min-width="100px"></el-table-column>
+ <el-table-column prop="submitDate" label="涓婃姤鏃堕棿" min-width="80px"></el-table-column>
<el-table-column label="澶勭悊鐘舵��" min-width="70px">
<template slot-scope="{row}">
- <span v-if="row.dealStatus == 0">寰呮寚娲�</span>
- <span v-if="row.dealStatus == 1">宸叉寚娲�</span>
- <span v-if="row.dealStatus == 2">宸插鐞�</span>
- </template>
+ <span v-if="row.dealStatus === 0">寰呭鐞�</span>
+ <span v-if="row.dealStatus === 1">宸茶浆宸ュ崟</span>
+ <span v-if="row.dealStatus === 2">宸插叧闂�</span>
+ </template>`
</el-table-column>
- <el-table-column prop="creatorName" label="澶勭悊浜�" min-width="80px"></el-table-column>
+ <el-table-column prop="dealUserName" label="澶勭悊浜�" min-width="80px"></el-table-column>
<el-table-column
v-if="containPermissions(['business:ywworkorder:update'])"
label="鎿嶄綔"
width="130"
fixed="right">
<template slot-scope="{row}">
- <el-button type="text" @click="$refs.handleProblem.open()">澶勭悊</el-button>
- <el-button type="text" @click="$refs.problemReportingDetails.open()">鏌ョ湅璇︽儏</el-button>
+ <el-button type="text" v-if="row.dealStatus === 0" @click="$refs.handleProblem.open('闂涓婃姤', row)">澶勭悊</el-button>
+ <el-button type="text" @click="$refs.problemReportingDetails.open('闂涓婃姤璇︽儏', row)">鏌ョ湅璇︽儏</el-button>
</template>
</el-table-column>
</el-table>
@@ -79,10 +83,10 @@
showDetail: false,
searchForm: {
selDate: [],
- areaIds: '',
- projectId: '',
- buildingId: '',
- cateId: '',
+ dealDateStart: '',
+ dealDateEnd: '',
+ content: '',
+ dealStatus: ''
},
projectList: [],
buildList: [],
@@ -91,15 +95,25 @@
},
created() {
this.config({
- module: '杩愮淮宸ュ崟淇℃伅琛�',
- api: '/workorder/ywWorkorder',
+ module: '闂涓婃姤淇℃伅琛�',
+ api: '/ywProblem',
'field.id': 'id',
'field.main': 'id'
})
this.search()
},
methods: {
-
+ // 鎼滅储妗嗛噸缃�
+ reset () {
+ this.$refs.searchForm.resetFields()
+ this.searchForm.dealDateStart = ''
+ this.searchForm.dealDateEnd = ''
+ this.search()
+ },
+ changeSelDate(e) {
+ this.searchForm.dealDateStart = e[0]
+ this.searchForm.dealDateEnd = e[1]
+ }
}
}
</script>
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: [],
diff --git a/h5/api/staff.js b/h5/api/staff.js
index 491ab58..9552ed6 100644
--- a/h5/api/staff.js
+++ b/h5/api/staff.js
@@ -45,3 +45,10 @@
})
}
+export const myNoticesH5 = (data) => {
+ return http({
+ url: 'visitsAdmin/cloudService/business/ywWorkDesk/myNoticesH5',
+ method: 'post',
+ data
+ })
+}
diff --git a/h5/api/yw.js b/h5/api/yw.js
index 5e211b0..837f486 100644
--- a/h5/api/yw.js
+++ b/h5/api/yw.js
@@ -28,6 +28,12 @@
data
})
}
+export const ywProblemCreate = (data) => {
+ return http({
+ url: 'visitsAdmin/cloudService/business/ywProblem/create',
+ data
+ })
+}
// 椤圭洰鍒楄〃
export const ywProjectPost = (data) => {
return http({
@@ -134,4 +140,53 @@
url: 'visitsAdmin/cloudService/business/ywPatrolTaskRecord/getPointRecordByCode',
data
})
+}
+// 寰俊鎵竴鎵�
+export const getRecordByUserPoint = (data) => {
+ return http({
+ url: 'visitsAdmin/cloudService/business/ywPatrolTaskRecord/getRecordByUserPoint',
+ data
+ })
+}
+export const getFindByCode = (code) => {
+ return http({
+ url: 'visitsAdmin/cloudService/business/ywDevice/findByCode?deviceCode=' + code,
+ method: 'get',
+ })
+}
+export const getYwStocktaking = (data) => {
+ return http({
+ url: 'visitsAdmin/cloudService/business/ywStocktaking/page',
+ data
+ })
+}
+export const ywStocktakingDetail = (id) => {
+ return http({
+ url: 'visitsAdmin/cloudService/business/ywStocktaking/' + id,
+ method: 'get'
+ })
+}
+export const ywStocktakingBegin = (id) => {
+ return http({
+ url: 'visitsAdmin/cloudService/business/ywStocktaking/beginById?id=' + id,
+ method: 'get'
+ })
+}
+export const ywStocktaFinishById = (id) => {
+ return http({
+ url: 'visitsAdmin/cloudService/business/ywStocktaking/finishById?id=' + id,
+ method: 'get'
+ })
+}
+export const getYwStocktakingRecord = (data) => {
+ return http({
+ url: 'visitsAdmin/cloudService/business/ywStocktakingRecord/page',
+ data
+ })
+}
+export const takingDataOpen = (data) => {
+ return http({
+ url: 'visitsAdmin/cloudService/business/ywStocktakingRecord/takingData',
+ data
+ })
}
\ No newline at end of file
diff --git a/h5/manifest.json b/h5/manifest.json
index 4f22dff..0a6161d 100644
--- a/h5/manifest.json
+++ b/h5/manifest.json
@@ -86,7 +86,7 @@
"quickapp" : {},
/* 灏忕▼搴忕壒鏈夌浉鍏� */
"mp-weixin" : {
- "appid" : "wxcd2b89fd2ff065f8",
+ "appid" : "wx4d7c10bdec51942b",
"setting" : {
"urlCheck" : false,
"es6" : true,
@@ -121,7 +121,7 @@
},
// "base" : "/h5/"
"devServer" : {
- "open": false,
+ "open" : false,
"port" : 8090,
"historyApiFallback" : true,
"disableHostCheck" : true,
@@ -131,7 +131,7 @@
// "target" : "http://172.20.10.7:10010", // 浠g悊鏈嶅姟鍣ㄥ煙鍚嶆垨IP鍦板潃
// "target" : "http://192.168.0.163:10010", // 浠g悊鏈嶅姟鍣ㄥ煙鍚嶆垨IP鍦板潃
// "target" : "http://10.50.250.253:8088/gateway_interface", // 浠g悊鏈嶅姟鍣ㄥ煙鍚嶆垨IP鍦板潃
- "target" : "https://zhcg.fnwtzx.com/gateway_interface", // 浠g悊鏈嶅姟鍣ㄥ煙鍚嶆垨IP鍦板潃
+ "target" : "https://dmtest.ahapp.net/gateway_interface", // 浠g悊鏈嶅姟鍣ㄥ煙鍚嶆垨IP鍦板潃
"changeOrigin" : true, // 鍏佽璺ㄥ煙
"pathRewrite" : {
"^/gateway_interface" : ""
diff --git a/h5/pages.json b/h5/pages.json
index d255e6d..908bd3a 100644
--- a/h5/pages.json
+++ b/h5/pages.json
@@ -83,6 +83,41 @@
{
"navigationBarTitleText" : "閫夋嫨浜哄憳"
}
+ },
+ {
+ "path" : "pages/inventory/index",
+ "style" :
+ {
+ "navigationBarTitleText" : "搴撳瓨鐩樼偣"
+ }
+ },
+ {
+ "path" : "pages/inventory/detail",
+ "style" :
+ {
+ "navigationBarTitleText" : "鐩樼偣鍗�"
+ }
+ },
+ {
+ "path" : "pages/workOrder/problemEdit",
+ "style" :
+ {
+ "navigationBarTitleText" : "闂涓婃姤"
+ }
+ },
+ {
+ "path" : "pages/workOrder/result",
+ "style" :
+ {
+ "navigationBarTitleText" : "闂涓婃姤"
+ }
+ },
+ {
+ "path" : "pages/workOrder/wait",
+ "style" :
+ {
+ "navigationBarTitleText" : "浠诲姟涓績"
+ }
}
],
"globalStyle": {
diff --git a/h5/pages/index.vue b/h5/pages/index.vue
index 81b4ef6..f64142b 100644
--- a/h5/pages/index.vue
+++ b/h5/pages/index.vue
@@ -17,7 +17,8 @@
<view class="list">
<view v-for="item in list2" class="item" @click="itemClick(item)">
<image :src="item.img"></image>
- <view class="name">{{item.name}}</view>
+ <view class="name">{{item.name}}</view>
+ <view v-if="item.name == '寰呭姙涓績' && taskNum" class="superscript">{{taskNum}}</view>
</view>
</view>
<view class="loginout" @click="loginOut">閫�鍑虹櫥闄�</view>
@@ -26,7 +27,8 @@
<script>
import {
- logoutPost
+ logoutPost,
+ myNoticesH5
} from '@/api'
export default {
data() {
@@ -49,6 +51,12 @@
url: '/pages/operation/device',
img: require('@/static/home/ic_fangkebaobe@2x.png'),
auth: 'weixin:menu:visitcar'
+ },
+ {
+ name: '搴撳瓨鐩樼偣',
+ url: '/pages/inventory/index',
+ img: require('@/static/home/ic_pandian@2x.png'),
+ auth: 'weixin:menu:visitcar'
},
],
list2: [{
@@ -62,12 +70,21 @@
url: '/pages/operation/record',
img: require('@/static/home/ic_wodehuiyi@2x.png'),
auth: 'weixin:menu:visitcar'
+ },
+ {
+ name: '寰呭姙涓績',
+ url: '/pages/workOrder/wait',
+ img: require('@/static/home/ic_daiban@2x.png'),
+ auth: 'weixin:menu:visitcar'
},
- ]
+ ],
+ taskNum: 0
}
},
- onLoad() {
-
+ onShow() {
+ myNoticesH5({ page: 1, capacity: 1,model: {status: 0}}).then(res => {
+ this.taskNum = res.data.total
+ })
},
methods: {
itemClick(item) {
@@ -132,8 +149,8 @@
display: flex;
flex-direction: column;
align-items: center;
- width: 25%;
-
+ width: 25%;
+ position: relative;
image {
width: 88rpx;
height: 88rpx;
@@ -143,6 +160,20 @@
.name {
font-size: 26rpx;
}
+ .superscript{
+ height: 40rpx;
+ width: 40rpx;
+ position: absolute;
+ top: -16rpx;
+ right: 24rpx;
+ background-color: red;
+ color: #fff;
+ font-size: 24rpx;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ border-radius: 50%;
+ }
}
}
diff --git a/h5/pages/inventory/detail.vue b/h5/pages/inventory/detail.vue
new file mode 100644
index 0000000..29a92e6
--- /dev/null
+++ b/h5/pages/inventory/detail.vue
@@ -0,0 +1,683 @@
+<template>
+ <view class="main_app">
+ <view class="main_head">
+ <view class="tabs">
+ <view class="tab" :class="{ active: activeTab == 0 }" @click="tabsClick(0)">
+ <text>鏈洏({{ info.unFinishAmount || 0 }})</text>
+ <text class="border"></text>
+ </view>
+ <view class="tab" :class="{ active: activeTab == 1 }" @click="tabsClick(1)">
+ <text>宸茬洏({{ info.finishAmount || 0 }})</text>
+ <text class="border"></text>
+ </view>
+ </view>
+ <view class="head_wrap">
+ <view class="search_wrap">
+ <image class="mr12 search" src="@/static/home/ic_search@2x.png" mode="widthFix"></image>
+ <input v-model="param.materialCode" @confirm="handleQuery()" type="text" placeholder="鎼滅储鐗╂枡缂栫爜/鐗╂枡鍚嶇О"
+ placeholder-class="placeholder9" />
+ </view>
+ </view>
+ <!-- -->
+ <scroll-view scroll-y="true" class="scroll_Y" @scrolltolower="scrolltolower">
+ <view class="list">
+ <view class="item" v-for="item in list" @click="itemClick(item)">
+ <view class="head">
+ <view class="title">{{ item.materialName }}</view>
+ <view class="status red" v-if="item.type == 1">鐩樹簭</view>
+ <view class="status primaryColor" v-if="item.type == 2">鐩樼泩</view>
+ </view>
+ <view class="line">鐗╂枡缂栫爜锛歿{ item.materialCode }}</view>
+ <view class="line">鏉$爜锛歿{ item.materialQrcode }}</view>
+ <view class="line">瑙勬牸鍨嬪彿锛歿{ item.materialAttr }}</view>
+ <view class="line" v-if="item.status == 0">
+ <view class="">璐﹂潰鏁伴噺锛歿{ item.stock }}{{ item.materialUnitName }}</view>
+ <view @click.stop="openEheck(item)" class="btn">鎵ц鐩樼偣</view>
+ </view>
+ <view class="static" v-if="item.status == 1">
+ <view class="ite">
+ <view class="la">璐﹂潰鏁伴噺锛�</view>
+ <view class="val">{{ item.stock }}</view>
+ </view>
+ <view class="spi"></view>
+ <view class="ite">
+ <view class="la">瀹為檯鏁伴噺锛�</view>
+ <view class="val" :class="{
+ primaryColor: item.type == 2,
+ red: item.type == 1,
+ }">{{ item.actStock }}</view>
+ </view>
+ </view>
+ </view>
+ </view>
+ </scroll-view>
+ <view class="footer_btn">
+ <view @click="openQrcode" v-if="activeTab == 0 && info.status == 1" class="sweep">
+ <image src="@/static/side/ic_saoma@2x.png" mode=""></image>
+ <view class="">鎵爜鐩樼偣</view>
+ </view>
+ <view @click="showTip = true" v-if="activeTab == 1 && info.status == 1" class="sweep sub_result">
+ <view class="">鎻愪氦鐩樼偣缁撴灉</view>
+ </view>
+ </view>
+ <!-- -->
+ <u-popup :show="showModal" :round="10" @close="showModal = false" closeOnClickOverlay>
+ <view class="modal_wrap">
+ <view class="modal_title">鎵ц鐩樼偣</view>
+ <view class="title">{{ modalForm.materialName }}</view>
+ <view class="item">鐗╂枡缂栫爜锛歿{ modalForm.materialCode }}</view>
+ <view class="item">鏉$爜锛歿{ modalForm.materialQrcode }}</view>
+ <view class="item">鍝佺墝锛歿{ modalForm.materialBrand }}</view>
+ <view class="item">瑙勬牸鍨嬪彿锛歿{ modalForm.materialAttr }}</view>
+ <view class="item">鎵�鍦ㄤ粨搴擄細{{ modalForm.warehouseName }}</view>
+ <view class="content">
+ <view class="line">
+ <view class="la">璐﹂潰鏁伴噺锛�</view>
+ <view class="val">
+ <view class="wrap">{{ modalForm.stock }}</view>
+ <view class="unit">{{ modalForm.materialUnitName }}</view>
+ </view>
+ </view>
+ <view class="line">
+ <view class="la">鐩樼偣鏁伴噺锛�</view>
+ <view class="val">
+ <view class="wrap">
+ <template v-if="!modalForm.handleType">
+ <image v-if="!modalForm.actStock" src="@/static/side/btn_jian_grey@2x.png" mode=""></image>
+ <image v-else @click="changeAct(-1)" src="@/static/side/btn_jian@3x.png" mode=""></image>
+ </template>
+ <input :disabled="Boolean(modalForm.handleType && modalForm.handleType == 'detail')" type="digit" v-model="modalForm.actStock"></input>
+ <image v-if="!modalForm.handleType" @click="changeAct(1)" src="@/static/side/btn_jia@3x.png" mode=""></image>
+ </view>
+ <view class="unit">{{ modalForm.materialUnitName }}</view>
+ </view>
+ </view>
+ </view>
+ <view class="remark">
+ <view class="la">澶囨敞锛�</view>
+ <textarea v-model="modalForm.remark" :disabled="Boolean(modalForm.handleType && modalForm.handleType == 'detail')" placeholder="璇峰~鍐欏娉�" :maxlength="-1" placeholder-class="placeholder9"
+ cols="30" rows="10"></textarea>
+ </view>
+ <view v-if="!modalForm.handleType" class="btns">
+ <view class="btn" @click="showModal = false">鍙栨秷</view>
+ <view class="btn sub" @click="onSubmit">鎻愪氦</view>
+ </view>
+ </view>
+ </u-popup>
+ <!-- -->
+ <u-popup :show="showTip" mode="center" :round="10" @close="showTip = false" closeOnClickOverlay>
+ <view class="modal_t">
+ <view class="h1">娓╅Θ鎻愮ず</view>
+ <view class="content">
+ <view v-if="info.unFinishAmount > 0">杩樻湁<text class="red">{{ info.unFinishAmount }}</text>椤圭墿鏂欐湭鐩樼偣</view>
+ <view>鎻愪氦鍚庡皢鏃犳硶淇敼</view>
+ </view>
+ <view class="btns">
+ <view class="btn" @click="showTip = false">鍙栨秷</view>
+ <view class="btn sub" @click="tipSub">纭鎻愪氦</view>
+ </view>
+ </view>
+ </u-popup>
+ </view>
+ <!-- -->
+ <view class="reader-box" @click="stopScan" v-if="isScaning">
+ <view class="reader" id="reader"></view>
+ </view>
+ </view>
+</template>
+
+<script>
+import {
+ ywStocktakingDetail,
+ getYwStocktakingRecord,
+ takingDataOpen,
+ ywStocktaFinishById
+} from '@/api'
+import {
+ Html5Qrcode
+} from 'html5-qrcode'
+export default {
+ data() {
+ return {
+ param: {},
+ info: {},
+ id: '',
+ activeTab: 0,
+
+ list: [],
+ page: 0,
+ total: 0,
+
+ showModal: false,
+ showTip: false,
+ modalForm: {},
+
+ html5Qrcode: null,
+ isScaning: false,
+
+ }
+ },
+ onLoad(op) {
+ this.id = op.id
+ this.getDetail()
+ this.getList()
+ },
+ methods: {
+ itemClick(item) {
+ if(item.status == 1){
+ this.showItem(item)
+ }
+ },
+ showItem(item){
+ this.showModal = true
+ this.modalForm = {
+ ...item,
+ handleType: this.info.status != 1 ? 'detail' : ''
+ }
+ console.log('modalForm', this.modalForm);
+ },
+ getDetail() {
+ const {
+ id
+ } = this
+ ywStocktakingDetail(id).then(res => {
+ this.info = res.data
+
+ })
+ },
+ handleQuery(str) {
+ this.list = []
+ this.page = 1
+ this.getList(str)
+ },
+ getList(str) {
+ const {
+ page,
+ activeTab,
+ id,
+ param
+ } = this
+ getYwStocktakingRecord({
+ capacity: 20,
+ page,
+ model: {
+ status: str || activeTab,
+ stocktakingId: id,
+ ...param
+ }
+ }).then(res => {
+ this.list = [...this.list, ...res.data.records]
+ this.total = res.data.total
+ if (this.param.materialQrcode && this.list.length == 1) {
+ this.openEheck(this.list[0])
+ this.$set(this.param, 'materialQrcode', null)
+ }
+ })
+ },
+ scrolltolower() {
+ const {
+ total,
+ list
+ } = this
+ if (list.length < total) {
+ this.page = this.page + 1
+ this.getList()
+ } else {
+ this.showToast('鏆傛棤鏇村鏁版嵁')
+ }
+ },
+ openEheck(item) {
+ this.modalForm = {
+ ...item
+ }
+ this.showModal = true
+ },
+ onSubmit() {
+ const {
+ modalForm
+ } = this
+ if (!modalForm.actStock) return this.showToast('璇疯緭鍏ユ纭殑鐩樼偣鏁伴噺')
+ takingDataOpen({
+ ...modalForm
+ }).then(res => {
+ if (res.code == 200) {
+ this.showToast('鎻愪氦鎴愬姛')
+ this.handleQuery()
+ this.getDetail()
+ this.showModal = false
+ }
+ })
+ },
+ changeAct(val) {
+ const actStock = this.modalForm.actStock || 0
+ this.$set(this.modalForm, 'actStock', actStock + val)
+ },
+ tabsClick(val) {
+ this.activeTab = val
+ this.page = 0
+ this.list = []
+ this.getList()
+ },
+ tipSub() {
+ const { info } = this
+ ywStocktaFinishById(info.id).then(res => {
+ this.showTip = false
+ uni.navigateBack()
+ })
+
+ },
+ openQrcode() {
+ this.isScaning = true
+ Html5Qrcode.getCameras().then((devices) => {
+ if (devices && devices.length) {
+ this.html5Qrcode = new Html5Qrcode('reader')
+ this.html5Qrcode.start({
+ facingMode: 'environment'
+ }, {
+ focusMode: 'continuous', //璁剧疆杩炵画鑱氱劍妯″紡
+ fps: 5, //璁剧疆鎵爜璇嗗埆閫熷害
+ qrbox: 280 //璁剧疆浜岀淮鐮佹壂鎻忔澶у皬
+ },
+ (decodeText, decodeResult) => {
+ if (decodeText) { //杩欓噷decodeText灏辨槸閫氳繃鎵弿浜岀淮鐮佸緱鍒扮殑鍐呭
+ this.stopScan()
+ this.$set(this.param, 'materialQrcode', decodeText)
+ this.handleQuery('null')
+ }
+ },
+ (err) => {
+ // console.log(err); //閿欒淇℃伅
+ }
+ )
+ }
+ })
+ },
+
+ stopScan() {
+ console.log('鍋滄鎵爜')
+ this.isScaning = false
+ if (this.html5Qrcode) {
+ this.html5Qrcode.stop()
+ }
+ }
+ }
+}
+</script>
+
+<style lang="scss">
+.main_app {
+ padding: 0 30rpx;
+ overflow: hidden;
+}
+
+.tabs {
+ display: flex;
+ width: 750rpx;
+ margin: 12rpx -30rpx 20rpx;
+ border-bottom: 1rpx solid #E5E5E5;
+
+ .tab {
+ font-size: 30rpx;
+ color: #666666;
+ flex: 1;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: flex-end;
+ height: 72rpx;
+
+ .name {
+ display: flex;
+ align-items: center;
+ }
+
+ .border {
+ width: 54rpx;
+ height: 6rpx;
+ background-color: #fff;
+ border-radius: 3rpx;
+ margin-top: 12rpx;
+ }
+ }
+
+ .active {
+ font-weight: 600;
+ font-size: 32rpx;
+ color: #222222;
+
+ .border {
+ background-color: $primaryColor;
+ }
+
+ }
+
+}
+
+.head_wrap {
+ display: flex;
+ align-items: center;
+ margin-bottom: 36rpx;
+
+ .search_wrap {
+ display: flex;
+ align-items: center;
+ width: 100%;
+ height: 76rpx;
+ background: #F7F7F7;
+ border-radius: 38rpx;
+ padding-left: 30rpx;
+
+ input {
+ flex: 1;
+ }
+
+ .search {
+ width: 28rpx;
+ height: 28rpx;
+ }
+ }
+
+}
+
+.scroll_Y {
+ height: calc(100vh - 350rpx);
+}
+
+.list {
+
+ .item {
+ border-bottom: 1rpx solid #E5E5E5;
+ padding-bottom: 24rpx;
+ margin-bottom: 16rpx;
+
+ .title {
+ font-weight: 600;
+ font-size: 34rpx;
+ color: #222222;
+ margin-bottom: 10rpx;
+ flex: 1;
+ }
+ .head{
+ display: flex;
+ // align-items: center;
+ justify-content: space-between;
+ color: #666666;
+ .status{
+ width: 76rpx;
+ text-align: right;
+ padding-top: 3rpx;
+ }
+ }
+ .line {
+ height: 60rpx;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ color: #666666;
+
+ .btn {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ height: 60rpx;
+ padding: 0 20rpx;
+ background: #0068FF;
+ box-shadow: 0rpx 4rpx 12rpx 0rpx rgba(0, 104, 255, 0.3);
+ border-radius: 30rpx;
+ font-size: 26rpx;
+ color: #FFFFFF;
+ }
+ }
+
+ .static {
+ display: flex;
+ height: 84rpx;
+ background: #F7F7F7;
+ font-size: 30rpx;
+ margin-top: 12rpx;
+ padding: 16rpx 0;
+
+ .spi {
+ border: 1rpx solid #E5E5E5;
+ }
+
+ .ite {
+ flex: 1;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+
+ .val {
+ font-weight: 500;
+ }
+ }
+ }
+ }
+}
+
+.footer_btn {
+ padding: 20rpx 40rpx 0;
+ border-top: 1px solid #e5e5e5;
+ width: 750rpx;
+ margin: 0 -30rpx;
+
+ .sweep {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ font-size: 32rpx;
+ font-weight: 500;
+ width: 670rpx;
+ height: 88rpx;
+ background: #0068FF;
+ box-shadow: 0rpx 8rpx 20rpx 0rpx rgba(0, 104, 255, 0.3);
+ border-radius: 44rpx;
+ color: #FFFFFF;
+ }
+
+ .sub_result {
+ background-color: #fff;
+ color: #FF0000;
+ border: 1rpx solid #FF0000;
+ box-shadow: none
+ }
+
+ image {
+ width: 32rpx;
+ height: 32rpx;
+ margin-right: 6rpx;
+ }
+}
+
+.modal_wrap {
+ padding: 36rpx 30rpx;
+
+ .modal_title {
+ font-weight: 500;
+ font-size: 32rpx;
+ color: #222222;
+ margin-bottom: 40rpx;
+ text-align: center;
+ }
+
+ .title {
+ font-weight: 600;
+ font-size: 34rpx;
+ color: #222222;
+ }
+
+ .item {
+ font-size: 28rpx;
+ color: #666666;
+ height: 56rpx;
+ display: flex;
+ align-items: center;
+ }
+
+ .content {
+ border-top: 1rpx solid #E5E5E5;
+ margin-top: 16rpx;
+
+ .line {
+ height: 84rpx;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+
+ .la {
+ font-weight: 500;
+ font-size: 32rpx;
+ color: #222222;
+ }
+
+ .val {
+ display: flex;
+ justify-content: flex-end;
+ align-items: center;
+ flex: 1;
+
+ .wrap {
+ display: flex;
+ align-items: center;
+
+ input {
+ width: 120rpx;
+ height: 72rpx;
+ border-radius: 8rpx;
+ border: 2rpx solid #0068FF;
+ margin: 0 16rpx;
+ padding: 0 10rpx;
+ text-align: center;
+ }
+ }
+
+ .unit {
+ font-size: 30rpx;
+ color: #666666;
+ margin-left: 20rpx;
+ }
+ }
+
+ image {
+ width: 72rpx;
+ height: 72rpx;
+ }
+ }
+ }
+
+ .remark {
+ margin-top: 16rpx;
+
+ .la {
+ font-size: 30rpx;
+ color: #222222;
+ margin-bottom: 16rpx;
+ }
+
+ textarea {
+ width: 690rpx;
+ height: 240rpx;
+ background: #F7F7F7;
+ border-radius: 12rpx;
+ padding: 10rpx 20rpx;
+ }
+ }
+
+ .btns {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ margin-top: 80rpx;
+
+ .btn {
+ width: 336rpx;
+ height: 88rpx;
+ border-radius: 44rpx;
+ border: 2rpx solid $primaryColor;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ font-size: 32rpx;
+ color: $primaryColor;
+ }
+
+ .sub {
+ background-color: $primaryColor;
+ color: #fff;
+ }
+ }
+}
+
+
+.modal_t {
+ width: 520rpx;
+ text-align: center;
+ display: flex;
+ flex-direction: column;
+
+ .h1 {
+ height: 86rpx;
+ font-weight: 500;
+ font-size: 32rpx;
+ color: #333333;
+ display: flex;
+ align-items: flex-end;
+ justify-content: center;
+ }
+
+ .content {
+ flex: 1;
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ align-items: center;
+ padding: 30rpx 0;
+ }
+
+ .btns {
+ height: 102rpx;
+ display: flex;
+ align-items: center;
+ border-top: 1rpx solid #E5E5E5;
+
+ .btn {
+ height: 102rpx;
+ flex: 1;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ border-right: 1rpx solid #E5E5E5;
+ font-weight: 400;
+ font-size: 32rpx;
+ color: #999999;
+
+ &:nth-last-child(1) {
+ border-right: none;
+ }
+ }
+
+ .sub {
+ color: $primaryColor;
+ }
+ }
+}
+
+.reader-box {
+ position: fixed;
+ top: 0;
+ bottom: 0;
+ left: 0;
+ right: 0;
+ background-color: rgba(0, 0, 0, 0.5);
+}
+
+.reader {
+ width: 100%;
+ // width: 540rpx;
+ // height: 540rpx;
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+}
+</style>
\ No newline at end of file
diff --git a/h5/pages/inventory/index.vue b/h5/pages/inventory/index.vue
new file mode 100644
index 0000000..56dd855
--- /dev/null
+++ b/h5/pages/inventory/index.vue
@@ -0,0 +1,222 @@
+<template>
+ <view class="main_app">
+ <view class="head_wrap">
+ <view class="search_wrap">
+ <image class="mr12 search" src="@/static/home/ic_search@2x.png" mode="widthFix"></image>
+ <input v-model="param.name" @confirm="handleQuery" type="text" placeholder="鎼滅储鐩樼偣鍗曞悕绉�"
+ placeholder-class="placeholder9" />
+ </view>
+ </view>
+ <!-- -->
+ <scroll-view scroll-y="true" class="scroll_Y" @scrolltolower="scrolltolower">
+ <view class="list">
+ <view class="item" @click="itemClick(item)" v-for="item in list">
+ <image v-if="item.status == 0 || item.status == 1" class="img" src="@/static/side/ic_pandian@2x.png" mode="">
+ </image>
+ <image v-else class="img" src="@/static/side/ic_pandian_grey@2x.png" mode=""></image>
+ <view class="content">
+ <view class="head">
+ <view class="title">{{item.name}}</view>
+ <view class="status" v-if="item.status == 0">鏈紑濮�</view>
+ <view class="status green" v-if="item.status == 1">鐩樼偣涓�</view>
+ <view class="status gray" v-if="item.status == 2">宸插畬鎴�</view>
+ <view class="status gray" v-if="item.status == 3">宸插彇娑�</view>
+ </view>
+ <view class="line">鐩樼偣鏃ユ湡锛歿{item.planDate}}</view>
+ <view class="line">鐩樼偣浠撳簱锛歿{item.warehouseName}}</view>
+ <view class="line">
+ <view class="">鐩樼偣浜哄憳锛歿{item.userName}}</view>
+ <view class="btn" v-if="item.status == 0 && item.timeFlag" @click="startHandle(item)">寮�濮嬬洏鐐�</view>
+ </view>
+ </view>
+ </view>
+ </view>
+ </scroll-view>
+ </view>
+</template>
+
+<script>
+ import {
+ getYwStocktaking,
+ ywStocktakingBegin
+ } from '@/api'
+ import dayjs from 'dayjs';
+ export default {
+ data() {
+ return {
+ param: {},
+ list: [],
+ page: 0,
+ total: 0,
+ };
+ },
+ onShow() {
+ this.handleQuery()
+ },
+ methods: {
+ getList() {
+ const {
+ page,
+ param
+ } = this
+ getYwStocktaking({
+ capacity: 20,
+ page,
+ model: {
+ ...param
+ }
+ }).then(res => {
+ this.list = [...this.list, ...res.data.records]
+ let date = dayjs().format('YYYY-MM-DD')
+ this.list.forEach(item => {
+ item.timeFlag = new Date(item.planDate).getTime() <= new Date(date+' 23:59:59').getTime()
+ })
+ this.total = res.data.total
+ })
+ },
+ itemClick(item) {
+ if (item.status != 0) {
+ uni.navigateTo({
+ url: '/pages/inventory/detail?id=' + item.id
+ })
+ }
+ },
+ startHandle(item) {
+ uni.showModal({
+ content: '鐩樼偣鏈熼棿涓嶅彲杩涜鍑哄叆搴撴搷浣�',
+ success: (res) => {
+ if (res.confirm) {
+ ywStocktakingBegin(item.id).then(() => {
+ uni.navigateTo({
+ url: '/pages/inventory/detail?id=' + item.id
+ })
+ })
+
+ }
+ }
+ })
+ },
+ handleQuery() {
+ this.list = []
+ this.page = 1
+ this.getList()
+ },
+ scrolltolower() {
+ const {
+ total,
+ list
+ } = this
+ if (list.length < total) {
+ this.page = this.page + 1
+ this.getList()
+ } else {
+ this.showToast('鏆傛棤鏇村鏁版嵁')
+ }
+ },
+ }
+ }
+</script>
+
+<style lang="scss">
+ .main_app {
+ padding: 0rpx 30rpx 0;
+ font-size: 28rpx;
+ }
+
+ .head_wrap {
+ display: flex;
+ align-items: center;
+ height: 110rpx;
+ .search_wrap {
+ display: flex;
+ align-items: center;
+ width: 100%;
+ height: 76rpx;
+ background: #F7F7F7;
+ border-radius: 38rpx;
+ padding-left: 30rpx;
+
+ input {
+ flex: 1;
+ }
+
+ .search {
+ width: 28rpx;
+ height: 28rpx;
+ }
+ }
+
+ }
+ .scroll_Y{
+ height: calc(100vh - 126rpx);
+ }
+ .list {
+ .item {
+ display: flex;
+ border-bottom: 1rpx solid #E5E5E5;
+ padding-bottom: 28rpx;
+ margin-bottom: 20rpx;
+
+ .img {
+ width: 80rpx;
+ height: 80rpx;
+ background: rgba(0, 104, 255, 0.08);
+ border-radius: 12rpx;
+ margin-right: 24rpx;
+ }
+
+ .content {
+ flex: 1;
+
+ .head {
+ display: flex;
+ // align-items: center;
+ justify-content: space-between;
+ margin-bottom: 12rpx;
+
+ .title {
+ font-weight: 600;
+ font-size: 34rpx;
+ color: #222222;
+ flex: 1;
+ }
+
+ .status {
+ color: $primaryColor;
+ width: 96rpx;
+ padding-top: 3rpx;
+ }
+
+ .green {
+ color: #0ADE79;
+ }
+
+ .gray {
+ color: #AAAAAA;
+ }
+ }
+
+ .line {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ color: #666666;
+ height: 60rpx;
+
+ .btn {
+ width: 144rpx;
+ height: 60rpx;
+ background: $primaryColor;
+ box-shadow: 0rpx 4rpx 12rpx 0rpx rgba(0, 104, 255, 0.3);
+ border-radius: 30rpx;
+ color: #fff;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ font-size: 26rpx;
+ }
+ }
+ }
+ }
+ }
+</style>
\ No newline at end of file
diff --git a/h5/pages/login.vue b/h5/pages/login.vue
index b742a89..dc65036 100644
--- a/h5/pages/login.vue
+++ b/h5/pages/login.vue
@@ -29,7 +29,9 @@
loginPost,
getUserInfo,
sendSMsPost,
- ywWxAuthorize
+ ywWxAuthorize,
+
+ getRecordByUserPoint
} from '@/api'
import {
mapState,
@@ -43,13 +45,27 @@
form: {
phone: '',
code: ''
- },
+ },
+ ywinfo: {},
downTime: 0,
- code: '111'
- // code: ''
+ code: ''
}
},
-
+ onLoad(option) {
+ console.log('onLoad');
+ // https://zhcg.fnwtzx.com/#/pages/login?type=0&ywid=ywid
+ const ywinfo = uni.getStorageSync('ywinfo') || {}
+ if (ywinfo.ywid && (ywinfo.type || ywinfo.type == 0)) {
+ this.ywinfo = ywinfo
+ uni.setStorageSync('ywinfo', {})
+ }
+ if (option.ywid || option.ywid == 0) {
+ uni.setStorageSync('ywinfo', {
+ type: option.type,
+ ywid: option.ywid
+ })
+ }
+ },
onShow() {
// return
var that = this
@@ -66,25 +82,38 @@
ywWxAuthorize({
code: code || this.code
}).then(res => {
- if (res.code === 200) {
+ if (res.code === 200) {
console.log('res', res);
that.$store.commit('setOpenId', res.data.openid)
- if (res.data.token && res.data.token != '') {
+ if (res.data.token && res.data.token != '') {
that.$store.commit('setToken', res.data.token)
getUserInfo().then(ress => {
that.$store.commit('setUserInfo', ress.data)
})
- setTimeout(() => {
- uni.redirectTo({
- url: "/pages/index"
+ const ywinfo = this.ywinfo
+ if (ywinfo.ywid && (ywinfo.type || ywinfo.type == 0)) {
+ getRecordByUserPoint({pointCode: ywinfo.ywid}).then(res => {
+ if(res.data && res.data.id){
+ uni.redirectTo({
+ url: "/pages/polling/point?id=" + res.data.id
+ })
+ }
})
- }, 300)
+ } else {
+ setTimeout(() => {
+ uni.redirectTo({
+ url: "/pages/index"
+ })
+ }, 300)
+ }
}
}
})
} else {
- let url = 'https://zhcg.fnwtzx.com/yunwei_h5'
- const appID = 'wx95ac1efb67f0330d'
+ // let url = 'https://zhcg.fnwtzx.com/yunwei_h5'
+ // const appID = 'wx95ac1efb67f0330d'
+ let url = 'https://dmtest.ahapp.net/yunwei_h5'
+ const appID = 'wx4d7c10bdec51942b'
let uri = encodeURIComponent(url)
let authURL =
`https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appID}&redirect_uri=${uri}&response_type=code&scope=snsapi_base#wechat_redirect`
@@ -92,12 +121,6 @@
}
},
- // onBackPress(options) {
- // uni.redirectTo({
- // url: '/pages/login/login'
- // })
- // return true
- // },
methods: {
...mapMutations(["setToken", "setUserInfo"]),
onLogin() {
@@ -122,10 +145,23 @@
this.setToken(res.data)
this.showToast('鐧诲綍鎴愬姛')
getUserInfo().then(ress => {
- this.setUserInfo(ress.data)
- uni.redirectTo({
- url: "/pages/index"
- })
+ this.setUserInfo(ress.data)
+ const ywinfo = this.ywinfo
+ if (ywinfo.ywid && (ywinfo.type || ywinfo.type == 0)) {
+ getRecordByUserPoint({pointCode: ywinfo.ywid}).then(res => {
+ getRecordByUserPoint({pointCode: ywinfo.ywid}).then(res => {
+ if(res.data && res.data.id){
+ uni.redirectTo({
+ url: "/pages/polling/point?id=" + res.data.id
+ })
+ }
+ })
+ })
+ } else {
+ uni.redirectTo({
+ url: "/pages/index"
+ })
+ }
})
}
})
diff --git a/h5/pages/operation/device.vue b/h5/pages/operation/device.vue
index 414be7b..25d7921 100644
--- a/h5/pages/operation/device.vue
+++ b/h5/pages/operation/device.vue
@@ -84,7 +84,7 @@
uploadUrl,
ywDevicePost,
ywDeviceCreate,
- getPointRecordByCode
+ getFindByCode
} from '@/api'
import dayjs from 'dayjs';
import {
@@ -285,15 +285,14 @@
qrbox: 280 //璁剧疆浜岀淮鐮佹壂鎻忔澶у皬
},
(decodeText, decodeResult) => {
- if (decodeText) { //杩欓噷decodeText灏辨槸閫氳繃鎵弿浜岀淮鐮佸緱鍒扮殑鍐呭
- this.$set(this.param, 'deviceCode', decodeText)
+ if (decodeText) { //杩欓噷decodeText灏辨槸閫氳繃鎵弿浜岀淮鐮佸緱鍒扮殑鍐呭
this.stopScan(); //鍏抽棴鎵爜鍔熻兘
- getPointRecordByCode({
- // taskId: this.id,
- pointCode: decodeText
- }).then(ress => {
+ getFindByCode(decodeText).then(ress => {
if (ress.data) {
console.log('ress', ress.data);
+ this.$set(this.param, 'deviceCode', ress.data.code)
+ this.$set(this.param, 'deviceId', ress.data.id)
+ this.$set(this.param, 'deviceName', ress.data.name)
} else {
this.showToast('鏈尮閰嶅埌宸℃鐐�,璇烽噸鏂版壂鎻�')
}
diff --git a/h5/pages/polling/detail.vue b/h5/pages/polling/detail.vue
index 45ad7fb..2f2620a 100644
--- a/h5/pages/polling/detail.vue
+++ b/h5/pages/polling/detail.vue
@@ -48,7 +48,7 @@
<view class="la">宸℃鏃堕棿锛�</view>
<view class="val">
<text>{{item.dealDate}}</text>
- <text v-if="item.status == 1" class="detail">鏌ョ湅璇︽儏</text>
+ <text @click="detailClick(item)" v-if="item.status == 1" class="detail">鏌ョ湅璇︽儏</text>
</view>
</view>
</template>
@@ -60,6 +60,7 @@
<view class="sub_btn">鎵爜宸℃</view>
</view>
<!-- -->
+
<view class="reader-box" @click="stopScan" v-if="isScaning">
<view class="reader" id="reader"></view>
</view>
@@ -101,7 +102,9 @@
},
],
html5Qrcode: null,
- isScaning: false,
+ isScaning: false,
+
+
};
},
onLoad(option) {
@@ -126,10 +129,12 @@
},
(decodeText, decodeResult) => {
if (decodeText) { //杩欓噷decodeText灏辨槸閫氳繃鎵弿浜岀淮鐮佸緱鍒扮殑鍐呭
- this.stopScan(); //鍏抽棴鎵爜鍔熻兘
+ this.stopScan(); //鍏抽棴鎵爜鍔熻兘
+ const index = decodeText.indexOf('ywid')
+ let pointCode = decodeText.slice(index + 5)
getPointRecordByCode({
taskId: this.id,
- pointCode: decodeText
+ pointCode
}).then(ress => {
if (ress.data) {
uni.navigateTo({
@@ -155,12 +160,18 @@
if (this.html5Qrcode) {
this.html5Qrcode.stop();
}
- },
+ },
+
itemClick(item) {
if (!this.flag) return
uni.navigateTo({
url: '/pages/polling/point?id=' + item.id
})
+ },
+ detailClick(item) {
+ uni.navigateTo({
+ url: '/pages/polling/point?id=' + item.id
+ })
},
getDetail() {
const {
diff --git a/h5/pages/polling/point.vue b/h5/pages/polling/point.vue
index 1288d07..122737b 100644
--- a/h5/pages/polling/point.vue
+++ b/h5/pages/polling/point.vue
@@ -28,7 +28,12 @@
<view class="files">
<view class="adduser_list_item_ipt1_upload" v-for="(item, i) in info.multifileList" :key="i">
<image v-if="item.type == 0" :src="item.fileurlFull" mode="widthFix"></image>
- <video v-if="item.type == 1" :src="item.fileurlFull" :controls="false"></video>
+ <!-- <video v-if="item.type == 1" :src="item.fileurlFull" :controls="false"></video> -->
+ <view v-if="item.type == 1" @click="videoClick(item)" class="video_wrap">
+ <video :src="item.fileurlFull" initial-time="0.01" :show-center-play-btn="false" :controls="false"
+ class="video" :enable-progress-gesture="false" muted />
+ <image src="@/static/play.png" class="play" mode=""></image>
+ </view>
</view>
</view>
<view v-if="info.dealInfo" class="desc">{{ info.dealInfo }}</view>
@@ -96,7 +101,13 @@
@cancel="isShowHandleDate = false" mode="datetime"></u-datetime-picker>
<u-picker :show="isShowRes" keyName="name" @cancel="isShowRes = false" @confirm='confirmRes'
:columns="columns"></u-picker>
-
+ <!-- -->
+ <view v-if="videoPlay" class="video_app">
+ <video controls autoplay muted x5-video-player-type="h5" x5-video-player-fullscreen="true" id="myvideo"
+ :src="videoUrl" @fullscreenchange="screenChange"></video>
+ <view class="bg" @click="closeVideo"></view>
+ </view>
+ <!-- -->
</view>
</template>
@@ -135,7 +146,11 @@
name: '璺宠繃'
},
]
- ],
+ ],
+
+ videoPlay: false,
+ videoContext: null,
+ videoUrl: ''
};
},
onLoad(option) {
@@ -204,6 +219,26 @@
this.$set(this.handleParam, 'dealStatus', e.value[0].id)
this.$set(this.handleParam, 'dealName', e.value[0].name)
this.isShowRes = false
+ },
+ videoClick(item) {
+ this.videoPlay = true;
+ this.videoContext = uni.createVideoContext("myvideo", this); // this杩欎釜鏄疄渚嬪璞� 蹇呬紶
+ this.videoUrl = item.fileurlFull;
+ this.videoContext.requestFullScreen();
+ this.$nextTick(() => {
+ this.videoContext.play();
+ })
+ },
+ screenChange(e) {
+ let fullScreen = e.detail.fullScreen // 鍊紅rue涓鸿繘鍏ュ叏灞忥紝false涓洪��鍑哄叏灞�
+ if (!fullScreen) {
+ //閫�鍑哄叏灞�
+ this.videoPlay = false // 闅愯棌鎾斁鐩掑瓙
+ }
+ },
+ closeVideo() {
+ this.videoPlay = false
+ this.videoContext = null
},
fileDel(str, i) {
this[str].splice(i, 1);
@@ -470,11 +505,51 @@
image {
width: 100%;
height: 100%;
+ }
+ video {
+ width: 100%;
+ height: 100%;
}
-
- video {
- width: 100%;
- height: 100%;
+ .video_wrap {
+ position: relative;
+ border: 1px solid;
+ width: 156rpx;
+ height: 156rpx;
+ border-radius: 4rpx;
+
+ .play {
+ width: 60rpx !important;
+ height: 60rpx !important;
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+ }
}
+ }
+
+ .video_app {
+ overflow: hidden;
+ position: fixed;
+ left: 0;
+ top: 0;
+ width: 100vw;
+ height: 100vh;
+ display: flex;
+ align-items: center;
+ z-index: 9990;
+
+ .bg {
+ background-color: rgba(0, 0, 0, .6);
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ z-index: -1;
+ }
+
+ video {
+ width: 100%;
+ height: 42vh;
+ }
}
</style>
\ No newline at end of file
diff --git a/h5/pages/polling/task.vue b/h5/pages/polling/task.vue
index 0e72898..e76a9cc 100644
--- a/h5/pages/polling/task.vue
+++ b/h5/pages/polling/task.vue
@@ -117,10 +117,12 @@
},
(decodeText, decodeResult) => {
if (decodeText) { //杩欓噷decodeText灏辨槸閫氳繃鎵弿浜岀淮鐮佸緱鍒扮殑鍐呭
+ const index = decodeText.indexOf('ywid')
+ let pointCode = decodeText.slice(index + 5)
this.stopScan(); //鍏抽棴鎵爜鍔熻兘
getPointRecordByCode({
taskId: item.id,
- pointCode: decodeText
+ pointCode
}).then(ress=> {
if(ress.data){
uni.navigateTo({
diff --git a/h5/pages/workOrder/detail.vue b/h5/pages/workOrder/detail.vue
index c112a22..1a4b1a1 100644
--- a/h5/pages/workOrder/detail.vue
+++ b/h5/pages/workOrder/detail.vue
@@ -14,7 +14,7 @@
<!-- <video v-if="item.type == 1" :src="item.fileurlFull" :controls="false"></video> -->
<view v-if="item.type == 1" @click="videoClick(item)" class="video_wrap">
<video :src="item.fileurlFull" initial-time="0.01" :show-center-play-btn="false" :controls="false"
- class="video" :enable-progress-gesture="false" autoplay muted />
+ class="video" :enable-progress-gesture="false" muted />
<image src="@/static/play.png" class="play" mode=""></image>
</view>
</view>
diff --git a/h5/pages/workOrder/problemEdit.vue b/h5/pages/workOrder/problemEdit.vue
new file mode 100644
index 0000000..0cf8f09
--- /dev/null
+++ b/h5/pages/workOrder/problemEdit.vue
@@ -0,0 +1,313 @@
+<template>
+ <view class="main_app">
+ <view class="list">
+ <view class="item">
+ <view class="la">浣嶇疆</view>
+ <view class="line input_wrap">
+ <input type="text" v-model="param.position" :maxlength="50" placeholder="璇疯緭鍏ュ彂鐜伴棶棰樼殑璇︾粏浣嶇疆" placeholder-class="placeholder9" />
+ </view>
+ </view>
+ <view class="item">
+ <view class="la"><text class="red">*</text>鎻忚堪</view>
+ <view class="line">
+ <textarea :maxlength="300" v-model="param.content" placeholder="璇疯缁嗘弿杩扮幇鍦烘儏鍐�,渚夸簬宸ヤ綔浜哄憳鍙婃椂澶勭悊" placeholder-class="placeholder9" />
+ </view>
+ </view>
+ <view class="item">
+ <view class="la">鐜板満鐓х墖</view>
+ <view class="upload_wrap">
+ <view class="upload_file" @click="showUpload = true">
+ <u-icon name="plus" color="rgb(153, 153, 153)" size="28"></u-icon>
+ <view class="mt6">鍥剧墖/瑙嗛</view>
+ </view>
+ <view class="upload_file" v-for="(item, i) in fileList" :key="i">
+ <u-icon class="close" size="20" name="close-circle-fill" color="red"
+ @click="fileDel('fileList', i)"></u-icon>
+ <image v-if="item.type == 0" :src="item.fileurlFull" mode="widthFix"></image>
+ <video v-if="item.type == 1" :show-center-play-btn="false" :src="item.fileurlFull" :controls="false"></video>
+ </view>
+ </view>
+ </view>
+ <view class="item">
+ <view class="la"><text class="red">*</text>涓婃姤浜�</view>
+ <view class="line input_wrap">
+ <input v-model="param.name" type="text" :maxlength="10" placeholder="璇疯緭鍏�" placeholder-class="placeholder9" />
+ </view>
+ </view>
+ <view class="item">
+ <view class="la"><text class="red">*</text>涓婃姤浜虹數璇�</view>
+ <view class="line input_wrap">
+ <input v-model="param.phone" type="tel" :maxlength="18" placeholder="璇疯緭鍏�" placeholder-class="placeholder9" />
+ </view>
+ </view>
+ </view>
+ <view class="sub_btn" @click="onSubmit">鎻愪氦</view>
+ <!-- -->
+ <u-popup :show="showUpload" @close="showUpload = false" closeOnClickOverlay>
+ <view class="sel_upload_wrap">
+ <view class="btn" @click="uploadImage">閫夋嫨鍥剧墖</view>
+ <view class="btn" @click="uploadVideo">閫夋嫨瑙嗛</view>
+ </view>
+ </u-popup>
+ <!-- -->
+
+ </view>
+</template>
+
+<script>
+ import {
+ uploadUrl,
+ ywProblemCreate,
+ } from '@/api'
+ import dayjs from 'dayjs';
+ export default {
+ data() {
+ return {
+ param: {},
+ showUpload: false,
+ fileList: [],
+
+ };
+ },
+ onLoad() {
+ },
+ methods: {
+ onSubmit() {
+ const {
+ param,
+ fileList
+ } = this
+ if (!param.content) return this.showToast('璇疯緭鍏ョ幇鍦烘儏鍐垫弿杩�')
+ if (!param.name) return this.showToast('璇疯緭鍏ヤ笂鎶ヤ汉濮撳悕')
+ if (!param.phone) return this.showToast('璇疯緭鍏ヤ笂鎶ヤ汉鐢佃瘽')
+ ywProblemCreate({
+ ...param,
+ fileList
+ }).then(res => {
+ this.showToast('鎻愪氦鎴愬姛')
+ this.param = {}
+ uni.navigateTo({
+ url: '/pages/workOrder/result'
+ })
+ })
+ },
+ fileDel(str, i) {
+ this[str].splice(i, 1);
+ },
+ uploadImage() {
+ this.showUpload = false;
+ let token = uni.getStorageSync('token') || '';
+ uni.chooseImage({
+ count: 6,
+ success: chooseImageRes => {
+ uni.showLoading({
+ title: '涓婁紶涓�',
+ mask: true
+ });
+ const tempFilePaths = chooseImageRes.tempFilePaths;
+ let imgs = tempFilePaths.map((value, index) => {
+ return {
+ name: 'file',
+ uri: value
+ };
+ });
+ uni.uploadFile({
+ url: `${uploadUrl}`,
+ files: imgs,
+ name: 'file',
+ formData: {
+ folder: 'YW_WORKORDER_FILE'
+ },
+ header: {
+ Dm_user_token: token
+ },
+ success: uploadFileRes => {
+ let res = JSON.parse(uploadFileRes.data);
+ if (res.data && res.data.length > 0) {
+ res.data.forEach(i => {
+ i.type = 0;
+ i.fileurl = i.imgaddr;
+ i.fileurlFull = i.url;
+ if(this.fileList.length < 9){
+ this.fileList.push(i);
+ }
+ });
+ }
+ },
+ fail(err) {
+ console.log('err', err);
+ },
+ complete() {
+ uni.hideLoading();
+ // if (i === chooseImageRes.tempFilePaths.length - 1) {
+ // uni.hideLoading()
+ // }
+ }
+ });
+ }
+ });
+ },
+ uploadVideo() {
+ this.showUpload = false;
+ let token = uni.getStorageSync('token') || '';
+ uni.chooseVideo({
+ success: chooseImageRes => {
+ uni.showLoading({
+ title: '涓婁紶涓�',
+ mask: true
+ });
+ uni.uploadFile({
+ url: `${uploadUrl}`,
+ filePath: chooseImageRes.tempFilePath,
+ header: {
+ Dm_user_token: token
+ },
+ name: 'file',
+ formData: {
+ folder: 'YW_WORKORDER_FILE'
+ },
+ success: uploadFileRes => {
+ let res = JSON.parse(uploadFileRes.data);
+ if (res.data && res.data.length > 0) {
+ res.data.forEach(i => {
+ i.type = 1;
+ i.fileurl = i.imgaddr;
+ i.fileurlFull = i.url;
+ if(this.fileList.length < 9){
+ this.fileList.push(i);
+ }
+ });
+ }
+ },
+ complete() {
+ uni.hideLoading();
+ }
+ });
+ }
+ });
+ }
+ }
+ }
+</script>
+
+<style lang="scss" scoped>
+ .list {
+
+ .item {
+ .la {
+ margin-top: 30rpx;
+ }
+
+ .line {
+
+ textarea {
+ box-sizing: border-box;
+ width: 690rpx;
+ height: 200rpx;
+ background-color: #f7f7f7;
+ font-size: 28rpx;
+ color: #333333;
+ padding: 24rpx;
+ border-radius: 8rpx;
+ margin-bottom: 30rpx;
+ margin-top: 20rpx;
+ }
+ }
+
+ .sel_wrap {
+ height: 90rpx;
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ border-bottom: 1rpx solid #E5E5E5;
+ }
+ .input_wrap{
+ width: 100%;
+ height: 90rpx;
+ display: flex;
+ align-items: center;
+ border-bottom: 1rpx solid #e5e5e5;
+ input{
+ width: 100%;
+ }
+ }
+
+ .upload_wrap {
+ display: flex;
+ flex-wrap: wrap;
+ margin-bottom: 30rpx;
+ }
+
+ .upload_file {
+ margin-top: 24rpx;
+ width: 156rpx;
+ height: 156rpx;
+ margin-right: 20rpx;
+ border: 2rpx solid #e5e5e5;
+ background: #f7f7f7;
+ color: #666666;
+ font-size: 22rpx;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ position: relative;
+
+ &:nth-of-type(4n) {
+ margin-right: 0;
+ }
+
+ .close {
+ position: absolute;
+ right: -20rpx;
+ top: -20rpx;
+ z-index: 9999;
+ background-color: #fff;
+ border-radius: 50%;
+ overflow: hidden;
+ }
+
+ image {
+ width: 100%;
+ height: 100%;
+ }
+
+ video {
+ width: 100%;
+ height: 100%;
+ }
+ }
+
+ }
+ }
+
+ .sub_btn {
+ // position: fixed;
+ // bottom: 68rpx;
+ // left: 40rpx;
+ width: 670rpx;
+ height: 88rpx;
+ margin-top: 80rpx;
+ background: $primaryColor;
+ box-shadow: 0rpx 8rpx 20rpx 0rpx rgba(0, 104, 255, 0.3);
+ border-radius: 44rpx;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ font-weight: 500;
+ font-size: 32rpx;
+ color: #FFFFFF;
+ }
+
+ .sel_upload_wrap {
+ width: 100%;
+ border-top: 1px solid #666666;
+ box-shadow: 0 1 1 #333333;
+
+ .btn {
+ height: 90rpx;
+ line-height: 90rpx;
+ text-align: center;
+ }
+ }
+</style>
\ No newline at end of file
diff --git a/h5/pages/workOrder/result.vue b/h5/pages/workOrder/result.vue
new file mode 100644
index 0000000..d0d3859
--- /dev/null
+++ b/h5/pages/workOrder/result.vue
@@ -0,0 +1,39 @@
+<template>
+ <view class="main_app">
+ <image class="logo" src="/static/ic_paysuccess@2x.png" mode=""></image>
+ <view class="title">鎻愪氦鎴愬姛</view>
+ <view class="">鎰熻阿鎮ㄧ殑涓婃姤锛屾垜浠皢灏藉揩鏍稿疄澶勭悊</view>
+ </view>
+</template>
+
+<script>
+ export default {
+ data() {
+ return {
+
+ };
+ }
+ }
+</script>
+
+<style lang="scss">
+.main_app{
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ padding-top: 200rpx;
+ font-size: 26rpx;
+ color: #999999;
+ .title{
+ font-weight: 500;
+ font-size: 36rpx;
+ color: #333333;
+ margin-bottom: 26rpx;
+ }
+ .logo{
+ width: 180rpx;
+ height: 180rpx;
+ margin-bottom: 40rpx;
+ }
+}
+</style>
diff --git a/h5/pages/workOrder/wait.vue b/h5/pages/workOrder/wait.vue
new file mode 100644
index 0000000..d3fd3e1
--- /dev/null
+++ b/h5/pages/workOrder/wait.vue
@@ -0,0 +1,431 @@
+<template>
+ <view class="main_app">
+ <view class="tabs">
+ <view class="tab" :class="{active: queryStatus == 0}" @click="tabsClick(0)">
+ <text>寰呭姙</text>
+ <text class="border"></text>
+ </view>
+ <view class="tab" :class="{active: queryStatus == 1}" @click="tabsClick(1)">
+ <text>宸插姙</text>
+ <text class="border"></text>
+ </view>
+ </view>
+ <scroll-view scroll-y="true" class="scroll_Y" @scrolltolower="scrolltolower">
+ <view class="list">
+ <view class="item" @click="itemClick(item)" v-for="item in list">
+ <view class="img">
+ <image v-if="item.type == 0 && item.status == 0" src="@/static/side/ic_pandian@2x.png"></image>
+ <image v-if="item.type == 1 && item.status == 0" src="@/static/side/xunjianed.png"></image>
+ <image v-if="item.type == 2 && item.status == 0" src="@/static/side/workordered.png"></image>
+ <image v-if="item.type == 0 && item.status == 1" src="@/static/side/ic_pandian_grey@2x.png"></image>
+ <image v-if="item.type == 1 && item.status == 1" src="@/static/side/xunjian.png"></image>
+ <image v-if="item.type == 2 && item.status == 1" src="@/static/side/workorder.png"></image>
+ </view>
+ <view class="content">
+ <view class="title" v-if="item.obj">
+ <view>{{item.obj.key1}}</view>
+ <view v-if="item.status == 0 && item.type == 2" class="status">寰呭鐞�</view>
+ <view v-if="item.status == 0 && item.param3 == 0 && (item.type == 0 || item.type == 1)" class="status">鏈紑濮�
+ </view>
+ <view v-if="item.status == 0 && item.param3 == 1 && (item.type == 0 || item.type == 1)"
+ class="status green">杩涜涓�</view>
+ <view v-if="item.status == 1 && item.type == 2" class="status gray">宸插鐞�</view>
+ <view v-if="item.status == 1 && (item.type == 0 || item.type == 1)" class="status gray">宸插畬鎴�</view>
+ </view>
+ <template v-if="item.obj && item.type == 1">
+ <view class="text">浠诲姟鏃ユ湡锛歿{item.obj.key2}}</view>
+ <view class="text">鎵ц鏃堕棿锛歿{item.obj.key3}}</view>
+ <view class="text">
+ <view class="">宸℃璐熻矗浜猴細{{item.obj.key4}}</view>
+ <view class="btn" @click.stop="openSc(item)">
+ <image src="@/static/side/ic_saoma@2x.png" mode=""></image>
+ <view v-if="item.status == 0" class="">鎵爜宸℃</view>
+ </view>
+ </view>
+ </template>
+ <template v-if="item.obj && item.type == 0">
+ <view class="content">
+ <view class="text">鐩樼偣鏃ユ湡锛歿{item.obj.key2}}</view>
+ <view class="text">鐩樼偣浠撳簱锛歿{item.obj.key3}}</view>
+ <view class="text">
+ <view class="">鐩樼偣鍛橈細{{item.obj.key4}}</view>
+ <view v-if="item.status == 0 && item.param3 == 0" class="btn" @click.stop="startHandle(item)">寮�濮嬬洏鐐�
+ </view>
+ <view v-if="item.status == 0 && item.param3 == 1" class="btn" @click.stop="startHandle(item)">缁х画鐩樼偣
+ </view>
+ </view>
+ </view>
+ </template>
+ <template v-if="item.obj && item.type == 2">
+ <view class="content">
+ <view class="text">涓婃姤鏃堕棿锛歿{item.obj.key2}}</view>
+ <view class="text">浣嶇疆绫诲瀷锛歿{item.obj.key3}}</view>
+ <view class="text">宸ュ崟鍒嗙被锛歿{item.obj.key4}}</view>
+ </view>
+ </template>
+
+ </view>
+
+
+ </view>
+ </view>
+ <view class="empty" v-if="list.length == 0">
+ <image src="@/static/empty.png" mode=""></image>
+ <view class="">鏆傛棤鏁版嵁</view>
+ </view>
+ </scroll-view>
+ <!-- -->
+ <view class="reader-box" @click="stopScan" v-if="isScaning">
+ <view class="reader" id="reader"></view>
+ </view>
+ </view>
+</template>
+
+<script>
+ import {
+ myNoticesH5,
+ ywStocktakingBegin,
+ getPointRecordByCode
+ } from '@/api'
+ import {
+ Html5Qrcode
+ } from 'html5-qrcode';
+ export default {
+ data() {
+ return {
+ list: [],
+ total: 0,
+ page: 1,
+ queryStatus: 0,
+
+ html5Qrcode: null,
+ isScaning: false,
+ };
+ },
+ onShow() {
+ this.page = 1
+ this.list = []
+ this.getList()
+ },
+ methods: {
+ tabsClick(val) {
+ this.list = []
+ this.page = 1
+ this.queryStatus = val
+ this.getList()
+ },
+ itemClick(item) {
+ if (item.objType == 0 && item.status == 1) {
+ uni.navigateTo({
+ url: `/pages/inventory/detail?id=${item.objId}`
+ })
+ } else if (item.objType == 1) {
+ // return
+ uni.navigateTo({
+ url: `/pages/polling/detail?id=${item.objId}`
+ })
+ } else if(item.objType == 2) {
+ uni.navigateTo({
+ url: `/pages/workOrder/detail?id=${item.objId}`
+ })
+ }
+ },
+ startHandle(item) {
+ if (item.param3 == 0) {
+ uni.showModal({
+ content: '鐩樼偣鏈熼棿涓嶅彲杩涜鍑哄叆搴撴搷浣�',
+ success: (res) => {
+ if (res.confirm) {
+ ywStocktakingBegin(item.objId).then(() => {
+ uni.navigateTo({
+ url: '/pages/inventory/detail?id=' + item.objId
+ })
+ })
+
+ }
+ }
+ })
+ }else{
+ uni.navigateTo({
+ url: '/pages/inventory/detail?id=' + item.objId
+ })
+ }
+ },
+ getList() {
+ const {
+ page,
+ total,
+ list,
+ queryStatus
+ } = this
+ myNoticesH5({
+ page,
+ capacity: 20,
+ model: {
+ status: queryStatus
+ }
+ }).then(res => {
+ this.list = [...this.list, ...res.data.records]
+ this.list.forEach(item => {
+ item.obj = JSON.parse(item.param2)
+ })
+ console.log(this.list);
+ this.total = res.data.total
+ })
+ },
+ scrolltolower() {
+ const {
+ total,
+ list
+ } = this
+ if (list.length < total) {
+ this.page = this.page + 1
+ this.getList()
+ } else {
+ this.showToast('鏆傛棤鏇村鏁版嵁')
+ }
+ },
+ openSc(item) {
+ this.isScaning = true;
+ Html5Qrcode.getCameras().then((devices) => {
+ if (devices && devices.length) {
+ this.html5Qrcode = new Html5Qrcode('reader');
+ this.html5Qrcode.start({
+ facingMode: 'environment'
+ }, {
+ focusMode: 'continuous', //璁剧疆杩炵画鑱氱劍妯″紡
+ fps: 5, //璁剧疆鎵爜璇嗗埆閫熷害
+ qrbox: 280 //璁剧疆浜岀淮鐮佹壂鎻忔澶у皬
+ },
+ (decodeText, decodeResult) => {
+ if (decodeText) { //杩欓噷decodeText灏辨槸閫氳繃鎵弿浜岀淮鐮佸緱鍒扮殑鍐呭
+ this.stopScan(); //鍏抽棴鎵爜鍔熻兘
+ const index = decodeText.indexOf('ywid')
+ let pointCode = decodeText.slice(index + 5)
+ getPointRecordByCode({
+ taskId: item.objId,
+ pointCode
+ }).then(ress => {
+ if (ress.data) {
+ uni.navigateTo({
+ url: '/pages/polling/point?id=' + ress.data.id
+ })
+ } else {
+ this.showToast('鏈尮閰嶅埌宸℃鐐�,璇烽噸鏂版壂鎻�')
+ }
+ })
+ }
+ },
+ (err) => {
+ // console.log(err); //閿欒淇℃伅
+ }
+ );
+ }
+ });
+ },
+
+ stopScan() {
+ console.log('鍋滄鎵爜')
+ this.isScaning = false;
+ if (this.html5Qrcode) {
+ this.html5Qrcode.stop();
+ }
+ },
+ }
+ }
+</script>
+
+<style lang="scss">
+ page {
+ background-color: #f7f7f7;
+
+ .main_app {
+ padding: 0;
+ height: 100vh;
+ overflow: hidden;
+ background-color: #fff;
+ }
+
+ .tabs {
+ display: flex;
+ width: 750rpx;
+ margin: 12rpx 0rpx 0;
+ border-bottom: 1rpx solid #E5E5E5;
+ background-color: #fff;
+
+ .tab {
+ font-size: 30rpx;
+ color: #666666;
+ flex: 1;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: flex-end;
+ height: 88rpx;
+
+ .name {
+ display: flex;
+ align-items: center;
+ }
+
+ .icon {
+ width: 28rpx;
+ height: 28rpx;
+ margin-right: 10rpx;
+ }
+
+ .border {
+ width: 54rpx;
+ height: 6rpx;
+ background-color: #fff;
+ border-radius: 3rpx;
+ margin-top: 16rpx;
+ }
+ }
+
+ .active {
+ font-weight: 600;
+ font-size: 32rpx;
+ color: #222222;
+
+ .border {
+ background-color: $primaryColor;
+ }
+
+ }
+
+ }
+
+ .scroll_Y {
+ height: calc(100vh - 120rpx);
+
+ .empty {
+ padding-top: 260rpx;
+
+ image {
+ width: 360rpx;
+ height: 360rpx;
+ margin-bottom: 10rpx;
+ }
+
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ align-items: center;
+ color: #999999;
+ }
+ }
+
+ .list {
+ // padding-top: 20rpx;
+
+ .item {
+ width: 100%;
+ background: #FFFFFF;
+ border-radius: 8rpx;
+ display: flex;
+ padding: 30rpx 24rpx;
+ border-bottom: 1rpx solid #e5e5e5;
+
+ .img {
+ position: relative;
+ margin-right: 20rpx;
+ flex-shrink: 0;
+ position: relative;
+
+ image {
+ width: 72rpx;
+ height: 72rpx;
+ }
+
+ .dian {
+ position: absolute;
+ background-color: red;
+ width: 18rpx;
+ height: 18rpx;
+ border-radius: 50%;
+ top: -8rpx;
+ right: -8rpx;
+ }
+ }
+
+ .content {
+ flex: 1;
+
+ .title {
+ font-weight: 500;
+ font-size: 32rpx;
+ color: #222222;
+ margin-bottom: 6rpx;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+
+ .status {
+ color: $primaryColor;
+ font-weight: 400;
+ font-size: 28rpx;
+ }
+
+ .green {
+ color: #0ADE79;
+ }
+
+ .gray {
+ color: #999999;
+ }
+ }
+
+ .text {
+ font-size: 26rpx;
+ color: #666666;
+ height: 60rpx;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+
+ .btn {
+ background-color: $primaryColor;
+ padding: 0 24rpx;
+ height: 60rpx;
+ border-radius: 30rpx;
+ display: flex;
+ align-items: center;
+ color: #fff;
+
+ image {
+ width: 28rpx;
+ height: 28rpx;
+ margin-right: 6rpx;
+ }
+ }
+ }
+
+ .time {
+ font-size: 26rpx;
+ color: #999999;
+ }
+ }
+ }
+ }
+ }
+
+ .reader-box {
+ position: fixed;
+ top: 0;
+ bottom: 0;
+ left: 0;
+ right: 0;
+ background-color: rgba(0, 0, 0, 0.5);
+ }
+
+ .reader {
+ width: 100%;
+ // width: 540rpx;
+ // height: 540rpx;
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+ }
+</style>
\ No newline at end of file
diff --git a/h5/static/home/ic_daiban@2x.png b/h5/static/home/ic_daiban@2x.png
new file mode 100644
index 0000000..22d7e91
--- /dev/null
+++ b/h5/static/home/ic_daiban@2x.png
Binary files differ
diff --git a/h5/static/home/ic_pandian@2x.png b/h5/static/home/ic_pandian@2x.png
new file mode 100644
index 0000000..bdf227f
--- /dev/null
+++ b/h5/static/home/ic_pandian@2x.png
Binary files differ
diff --git a/h5/static/ic_paysuccess@2x.png b/h5/static/ic_paysuccess@2x.png
new file mode 100644
index 0000000..737e03d
--- /dev/null
+++ b/h5/static/ic_paysuccess@2x.png
Binary files differ
diff --git a/h5/static/side/btn_jia@3x.png b/h5/static/side/btn_jia@3x.png
new file mode 100644
index 0000000..986666c
--- /dev/null
+++ b/h5/static/side/btn_jia@3x.png
Binary files differ
diff --git a/h5/static/side/btn_jian@3x.png b/h5/static/side/btn_jian@3x.png
new file mode 100644
index 0000000..6949c9f
--- /dev/null
+++ b/h5/static/side/btn_jian@3x.png
Binary files differ
diff --git a/h5/static/side/btn_jian_grey@2x.png b/h5/static/side/btn_jian_grey@2x.png
new file mode 100644
index 0000000..274b96c
--- /dev/null
+++ b/h5/static/side/btn_jian_grey@2x.png
Binary files differ
diff --git a/h5/static/side/ic_pandian@2x.png b/h5/static/side/ic_pandian@2x.png
new file mode 100644
index 0000000..e8f8717
--- /dev/null
+++ b/h5/static/side/ic_pandian@2x.png
Binary files differ
diff --git a/h5/static/side/ic_pandian_grey@2x.png b/h5/static/side/ic_pandian_grey@2x.png
new file mode 100644
index 0000000..3917fb3
--- /dev/null
+++ b/h5/static/side/ic_pandian_grey@2x.png
Binary files differ
diff --git a/h5/static/side/xiaoxi_ic_tongzhi@2x.png b/h5/static/side/xiaoxi_ic_tongzhi@2x.png
new file mode 100644
index 0000000..b262ca0
--- /dev/null
+++ b/h5/static/side/xiaoxi_ic_tongzhi@2x.png
Binary files differ
diff --git a/h5/utils/config.js b/h5/utils/config.js
index 49ff135..df81430 100644
--- a/h5/utils/config.js
+++ b/h5/utils/config.js
@@ -1,6 +1,7 @@
- export const baseUrl = 'gateway_interface/'
+ // export const baseUrl = 'gateway_interface/'
// export const baseUrl = 'http://192.168.0.173/gateway_interface/'
// export const baseUrl = 'https://zhcg.fnwtzx.com/gateway_interface/'
+export const baseUrl = 'https://dmtest.ahapp.net/gateway_interface/'
export const uploadAvatar = `${baseUrl}visitsAdmin/cloudService/web/public/uploadFtp.do`
export const uploadUrl = `${baseUrl}visitsAdmin/cloudService/public/uploadBatch`
--
Gitblit v1.9.3