Commit 59fd57592d4cc5c696b733ee493ef0c58b30805c

Authored by 王彪总
1 parent 8a1d70bb

feat(map): 替换腾讯地图为高德地图并优化检查点功能

- 将腾讯地图API替换为高德地图API
- 移除检查点经纬度输入框的禁用状态
- 重构地图组件中的标记点和路径绘制逻辑
- 添加地图覆盖物清理功能
- 更新登录页面UI设计
- 修改系统标题和公司名称显示
- 添加property路由模块
- 修复API请求参数中的硬编码值
install.md
1 -# HC 小区管理系统前段安装教程 1 +# 西荣物业 小区管理系统前段安装教程
2 ## 一、项目构建 2 ## 一、项目构建
3 ### 1. 安装依赖 3 ### 1. 安装依赖
4 ```bash 4 ```bash
@@ -37,4 +37,4 @@ server { @@ -37,4 +37,4 @@ server {
37 proxy_pass http://192.168.1.109:8008; 37 proxy_pass http://192.168.1.109:8008;
38 } 38 }
39 } 39 }
40 -```  
41 \ No newline at end of file 40 \ No newline at end of file
  41 +```
package-lock.json
1 { 1 {
2 - "name": "micro-community-web", 2 + "name": "xirong_property",
3 "version": "1.0.0", 3 "version": "1.0.0",
4 "lockfileVersion": 3, 4 "lockfileVersion": 3,
5 "requires": true, 5 "requires": true,
6 "packages": { 6 "packages": {
7 "": { 7 "": {
8 - "name": "micro-community-web", 8 + "name": "xirong_property",
9 "version": "1.0.0", 9 "version": "1.0.0",
10 "dependencies": { 10 "dependencies": {
11 "@tinymce/tinymce-vue": "^3.2.8", 11 "@tinymce/tinymce-vue": "^3.2.8",
12 "axios": "^0.21.1", 12 "axios": "^0.21.1",
13 "echarts": "^5.6.0", 13 "echarts": "^5.6.0",
14 "element-ui": "^2.15.6", 14 "element-ui": "^2.15.6",
15 - "formiojs": "^4.21.7",  
16 "qrcodejs2": "^0.0.2", 15 "qrcodejs2": "^0.0.2",
17 "tinymce": "^5.10.7", 16 "tinymce": "^5.10.7",
18 "vue": "^2.6.14", 17 "vue": "^2.6.14",
@@ -1572,47 +1571,6 @@ @@ -1572,47 +1571,6 @@
1572 "node": ">=6.9.0" 1571 "node": ">=6.9.0"
1573 } 1572 }
1574 }, 1573 },
1575 - "node_modules/@formio/bootstrap3": {  
1576 - "version": "2.12.4-rc.1",  
1577 - "resolved": "https://registry.npmjs.org/@formio/bootstrap3/-/bootstrap3-2.12.4-rc.1.tgz",  
1578 - "integrity": "sha512-4B5rs+w9tAk5i+wbdw2/NrTxPqnDX7/W19tiTd9lfXnIGQmaj0ecMEVqDmOJg8pIlyU02g3c4ih6JnA/JVmUbA==",  
1579 - "dependencies": {  
1580 - "resize-observer-polyfill": "^1.5.1"  
1581 - }  
1582 - },  
1583 - "node_modules/@formio/choices.js": {  
1584 - "version": "10.2.1",  
1585 - "resolved": "https://registry.npmjs.org/@formio/choices.js/-/choices.js-10.2.1.tgz",  
1586 - "integrity": "sha512-NCE5u7jG3XGokJP16MyAbVSUptKu/mpJYAxd4PPIoLiO/l9Do5uoOQ0MgNb9qG9qABJiOX+qNRE8q8RybY/SwQ==",  
1587 - "dependencies": {  
1588 - "deepmerge": "^4.2.2",  
1589 - "fuse.js": "^6.6.2",  
1590 - "redux": "^4.2.0"  
1591 - }  
1592 - },  
1593 - "node_modules/@formio/choices.js/node_modules/deepmerge": {  
1594 - "version": "4.3.1",  
1595 - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz",  
1596 - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==",  
1597 - "engines": {  
1598 - "node": ">=0.10.0"  
1599 - }  
1600 - },  
1601 - "node_modules/@formio/semantic": {  
1602 - "version": "2.6.1",  
1603 - "resolved": "https://registry.npmjs.org/@formio/semantic/-/semantic-2.6.1.tgz",  
1604 - "integrity": "sha512-obp1BT5UnzD+uYBbqmnsTfO2hGxI2A2iR/cj3P5JUFLYSBpnr3TS2ShQ7Ee5GCRRtJPu0JnljuJj+YSKLCMuhg=="  
1605 - },  
1606 - "node_modules/@formio/text-mask-addons": {  
1607 - "version": "3.8.0-formio.4",  
1608 - "resolved": "https://registry.npmjs.org/@formio/text-mask-addons/-/text-mask-addons-3.8.0-formio.4.tgz",  
1609 - "integrity": "sha512-vhkeIyuL+1rtC9S4IW8O3JCwroPtvJrkrcMO4wyELNqMIgQRKbiyBAitZfUP4tY04xdB5lxAinbzdwb+NMdX6w=="  
1610 - },  
1611 - "node_modules/@formio/vanilla-text-mask": {  
1612 - "version": "5.1.1-formio.1",  
1613 - "resolved": "https://registry.npmjs.org/@formio/vanilla-text-mask/-/vanilla-text-mask-5.1.1-formio.1.tgz",  
1614 - "integrity": "sha512-rYBlvIPMNUd6sAaduOaiIwI4vfTAjHDRonko2qJn2RP1O//TQ7rcFIPYVYePJZ4OtOpwHiHAvAIh79McphZotQ=="  
1615 - },  
1616 "node_modules/@hapi/address": { 1574 "node_modules/@hapi/address": {
1617 "version": "2.1.4", 1575 "version": "2.1.4",
1618 "resolved": "https://registry.npmjs.org/@hapi/address/-/address-2.1.4.tgz", 1576 "resolved": "https://registry.npmjs.org/@hapi/address/-/address-2.1.4.tgz",
@@ -2111,15 +2069,6 @@ @@ -2111,15 +2069,6 @@
2111 "node": ">=8.0" 2069 "node": ">=8.0"
2112 } 2070 }
2113 }, 2071 },
2114 - "node_modules/@popperjs/core": {  
2115 - "version": "2.11.8",  
2116 - "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz",  
2117 - "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==",  
2118 - "funding": {  
2119 - "type": "opencollective",  
2120 - "url": "https://opencollective.com/popperjs"  
2121 - }  
2122 - },  
2123 "node_modules/@soda/friendly-errors-webpack-plugin": { 2072 "node_modules/@soda/friendly-errors-webpack-plugin": {
2124 "version": "1.8.1", 2073 "version": "1.8.1",
2125 "resolved": "https://registry.npmjs.org/@soda/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.8.1.tgz", 2074 "resolved": "https://registry.npmjs.org/@soda/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.8.1.tgz",
@@ -2144,11 +2093,6 @@ @@ -2144,11 +2093,6 @@
2144 "integrity": "sha512-T7VNNlYVM1SgQ+VsMYhnDkcGmWhQdL0bDyGm5TlQ3GBXnJscEClUUOKduWTmm2zCnvNLC1hc3JpuXjs/nFOc5w==", 2093 "integrity": "sha512-T7VNNlYVM1SgQ+VsMYhnDkcGmWhQdL0bDyGm5TlQ3GBXnJscEClUUOKduWTmm2zCnvNLC1hc3JpuXjs/nFOc5w==",
2145 "dev": true 2094 "dev": true
2146 }, 2095 },
2147 - "node_modules/@sphinxxxx/color-conversion": {  
2148 - "version": "2.2.2",  
2149 - "resolved": "https://registry.npmjs.org/@sphinxxxx/color-conversion/-/color-conversion-2.2.2.tgz",  
2150 - "integrity": "sha512-XExJS3cLqgrmNBIP3bBw6+1oQ1ksGjFh0+oClDKFYpCCqx/hlqwWO5KO/S63fzUo67SxI9dMrF0y5T/Ey7h8Zw=="  
2151 - },  
2152 "node_modules/@tinymce/tinymce-vue": { 2096 "node_modules/@tinymce/tinymce-vue": {
2153 "version": "3.2.8", 2097 "version": "3.2.8",
2154 "resolved": "https://registry.npmjs.org/@tinymce/tinymce-vue/-/tinymce-vue-3.2.8.tgz", 2098 "resolved": "https://registry.npmjs.org/@tinymce/tinymce-vue/-/tinymce-vue-3.2.8.tgz",
@@ -2324,12 +2268,6 @@ @@ -2324,12 +2268,6 @@
2324 "integrity": "sha512-bTHG8fcxEqv1M9+TD14P8ok8hjxoOCkfKc8XXLaaD05kI7ohpeI956jtDOD3XHKBQrlyPughUtzm1jtVhHpA5Q==", 2268 "integrity": "sha512-bTHG8fcxEqv1M9+TD14P8ok8hjxoOCkfKc8XXLaaD05kI7ohpeI956jtDOD3XHKBQrlyPughUtzm1jtVhHpA5Q==",
2325 "dev": true 2269 "dev": true
2326 }, 2270 },
2327 - "node_modules/@types/trusted-types": {  
2328 - "version": "2.0.7",  
2329 - "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz",  
2330 - "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==",  
2331 - "optional": true  
2332 - },  
2333 "node_modules/@types/uglify-js": { 2271 "node_modules/@types/uglify-js": {
2334 "version": "3.17.5", 2272 "version": "3.17.5",
2335 "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.17.5.tgz", 2273 "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.17.5.tgz",
@@ -3197,11 +3135,6 @@ @@ -3197,11 +3135,6 @@
3197 "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", 3135 "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==",
3198 "dev": true 3136 "dev": true
3199 }, 3137 },
3200 - "node_modules/abortcontroller-polyfill": {  
3201 - "version": "1.7.8",  
3202 - "resolved": "https://registry.npmjs.org/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.8.tgz",  
3203 - "integrity": "sha512-9f1iZ2uWh92VcrU9Y8x+LdM4DLj75VE0MJB8zuF1iUnroEptStw+DQ8EQPMUdfe5k+PkB1uUfDQfWbhstH8LrQ=="  
3204 - },  
3205 "node_modules/accepts": { 3138 "node_modules/accepts": {
3206 "version": "1.3.8", 3139 "version": "1.3.8",
3207 "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", 3140 "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
@@ -3294,11 +3227,6 @@ @@ -3294,11 +3227,6 @@
3294 "integrity": "sha512-0FcBfdcmaumGPQ0qPn7Q5qTgz/ooXgIyp1rf8ik5bGX8mpE2YHjC0P/eyQvxu1GURYQgq9ozf2mteQ5ZD9YiyQ==", 3227 "integrity": "sha512-0FcBfdcmaumGPQ0qPn7Q5qTgz/ooXgIyp1rf8ik5bGX8mpE2YHjC0P/eyQvxu1GURYQgq9ozf2mteQ5ZD9YiyQ==",
3295 "dev": true 3228 "dev": true
3296 }, 3229 },
3297 - "node_modules/animation-frame-polyfill": {  
3298 - "version": "1.0.2",  
3299 - "resolved": "https://registry.npmjs.org/animation-frame-polyfill/-/animation-frame-polyfill-1.0.2.tgz",  
3300 - "integrity": "sha512-PvO5poSMoHhaoNNgHPo+oqs/0L9UqjsUbqv0iOXVqLh6HX85fsOVQTUrzSBvjdZz7hydARlgLELyzJJKIrPJAQ=="  
3301 - },  
3302 "node_modules/ansi-colors": { 3230 "node_modules/ansi-colors": {
3303 "version": "3.2.4", 3231 "version": "3.2.4",
3304 "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", 3232 "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz",
@@ -3462,11 +3390,6 @@ @@ -3462,11 +3390,6 @@
3462 "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", 3390 "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==",
3463 "dev": true 3391 "dev": true
3464 }, 3392 },
3465 - "node_modules/array-from": {  
3466 - "version": "2.1.1",  
3467 - "resolved": "https://registry.npmjs.org/array-from/-/array-from-2.1.1.tgz",  
3468 - "integrity": "sha512-GQTc6Uupx1FCavi5mPzBvVT7nEOeWMmUA9P95wpfpW1XwMSKs+KaymD5C2Up7KAUKg/mYwbsUYzdZWcoajlNZg=="  
3469 - },  
3470 "node_modules/array-union": { 3393 "node_modules/array-union": {
3471 "version": "1.0.2", 3394 "version": "1.0.2",
3472 "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", 3395 "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
@@ -3665,11 +3588,6 @@ @@ -3665,11 +3588,6 @@
3665 "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", 3588 "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
3666 "dev": true 3589 "dev": true
3667 }, 3590 },
3668 - "node_modules/atoa": {  
3669 - "version": "1.0.0",  
3670 - "resolved": "https://registry.npmjs.org/atoa/-/atoa-1.0.0.tgz",  
3671 - "integrity": "sha512-VVE1H6cc4ai+ZXo/CRWoJiHXrA1qfA31DPnx6D20+kSI547hQN5Greh51LQ1baMRMfxO5K5M4ImMtZbZt2DODQ=="  
3672 - },  
3673 "node_modules/atob": { 3591 "node_modules/atob": {
3674 "version": "2.1.2", 3592 "version": "2.1.2",
3675 "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", 3593 "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
@@ -3682,11 +3600,6 @@ @@ -3682,11 +3600,6 @@
3682 "node": ">= 4.5.0" 3600 "node": ">= 4.5.0"
3683 } 3601 }
3684 }, 3602 },
3685 - "node_modules/autocompleter": {  
3686 - "version": "7.1.0",  
3687 - "resolved": "https://registry.npmjs.org/autocompleter/-/autocompleter-7.1.0.tgz",  
3688 - "integrity": "sha512-uCToOnq7eAD/GJAteDbYuQ7ksDtrYWOy5CIAq43wh0dT+5frMpPlyD9tp+y5fz8KIcsP+zR2MjzoTAdW5aJESw=="  
3689 - },  
3690 "node_modules/autoprefixer": { 3603 "node_modules/autoprefixer": {
3691 "version": "9.8.8", 3604 "version": "9.8.8",
3692 "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.8.tgz", 3605 "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.8.tgz",
@@ -4135,19 +4048,6 @@ @@ -4135,19 +4048,6 @@
4135 "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", 4048 "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==",
4136 "dev": true 4049 "dev": true
4137 }, 4050 },
4138 - "node_modules/browser-cookies": {  
4139 - "version": "1.2.0",  
4140 - "resolved": "https://registry.npmjs.org/browser-cookies/-/browser-cookies-1.2.0.tgz",  
4141 - "integrity": "sha512-cg2WuoOJo+F+g2XjEaP8nmeRp1vDHjt7sqpKJMsTNXKrpyIBNVslYJeehvs6FEddj8usV2+qyRSBEX244yN5/g=="  
4142 - },  
4143 - "node_modules/browser-md5-file": {  
4144 - "version": "1.1.1",  
4145 - "resolved": "https://registry.npmjs.org/browser-md5-file/-/browser-md5-file-1.1.1.tgz",  
4146 - "integrity": "sha512-9h2UViTtZPhBa7oHvp5mb7MvJaX5OKEPUsplDwJ800OIV+In7BOR3RXOMB78obn2iQVIiS3WkVLhG7Zu1EMwbw==",  
4147 - "dependencies": {  
4148 - "spark-md5": "^2.0.2"  
4149 - }  
4150 - },  
4151 "node_modules/browserify-aes": { 4051 "node_modules/browserify-aes": {
4152 "version": "1.2.0", 4052 "version": "1.2.0",
4153 "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", 4053 "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
@@ -5087,11 +4987,6 @@ @@ -5087,11 +4987,6 @@
5087 "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", 4987 "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==",
5088 "dev": true 4988 "dev": true
5089 }, 4989 },
5090 - "node_modules/compare-versions": {  
5091 - "version": "5.0.3",  
5092 - "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-5.0.3.tgz",  
5093 - "integrity": "sha512-4UZlZP8Z99MGEY+Ovg/uJxJuvoXuN4M6B3hKaiackiHrgzQFEe3diJi1mf1PNHbFujM7FvLrK2bpgIaImbtZ1A=="  
5094 - },  
5095 "node_modules/component-emitter": { 4990 "node_modules/component-emitter": {
5096 "version": "1.3.1", 4991 "version": "1.3.1",
5097 "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz", 4992 "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz",
@@ -5271,15 +5166,6 @@ @@ -5271,15 +5166,6 @@
5271 "node": ">= 0.6" 5166 "node": ">= 0.6"
5272 } 5167 }
5273 }, 5168 },
5274 - "node_modules/contra": {  
5275 - "version": "1.9.4",  
5276 - "resolved": "https://registry.npmjs.org/contra/-/contra-1.9.4.tgz",  
5277 - "integrity": "sha512-N9ArHAqwR/lhPq4OdIAwH4e1btn6EIZMAz4TazjnzCiVECcWUPTma+dRAM38ERImEJBh8NiCCpjoQruSZ+agYg==",  
5278 - "dependencies": {  
5279 - "atoa": "1.0.0",  
5280 - "ticky": "1.0.1"  
5281 - }  
5282 - },  
5283 "node_modules/convert-source-map": { 5169 "node_modules/convert-source-map": {
5284 "version": "2.0.0", 5170 "version": "2.0.0",
5285 "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", 5171 "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
@@ -5627,14 +5513,6 @@ @@ -5627,14 +5513,6 @@
5627 "sha.js": "^2.4.8" 5513 "sha.js": "^2.4.8"
5628 } 5514 }
5629 }, 5515 },
5630 - "node_modules/create-point-cb": {  
5631 - "version": "1.2.0",  
5632 - "resolved": "https://registry.npmjs.org/create-point-cb/-/create-point-cb-1.2.0.tgz",  
5633 - "integrity": "sha512-r4l6IO/YGI7hIZRMLggOzwM6XO80+Fdcv4hx1fXCEdU+hKd7zZki6i+cbYfK9OliMwMYx1wPfQLU/snvS+Dygw==",  
5634 - "dependencies": {  
5635 - "type-func": "^1.0.1"  
5636 - }  
5637 - },  
5638 "node_modules/cross-spawn": { 5516 "node_modules/cross-spawn": {
5639 "version": "6.0.6", 5517 "version": "6.0.6",
5640 "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.6.tgz", 5518 "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.6.tgz",
@@ -5660,14 +5538,6 @@ @@ -5660,14 +5538,6 @@
5660 "semver": "bin/semver" 5538 "semver": "bin/semver"
5661 } 5539 }
5662 }, 5540 },
5663 - "node_modules/crossvent": {  
5664 - "version": "1.5.5",  
5665 - "resolved": "https://registry.npmjs.org/crossvent/-/crossvent-1.5.5.tgz",  
5666 - "integrity": "sha512-MY4xhBYEnVi+pmTpHCOCsCLYczc0PVtGdPBz6NXNXxikLaUZo4HdAeUb1UqAo3t3yXAloSelTmfxJ+/oUqkW5w==",  
5667 - "dependencies": {  
5668 - "custom-event": "^1.0.0"  
5669 - }  
5670 - },  
5671 "node_modules/crypto-browserify": { 5541 "node_modules/crypto-browserify": {
5672 "version": "3.12.1", 5542 "version": "3.12.1",
5673 "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.1.tgz", 5543 "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.1.tgz",
@@ -5963,16 +5833,6 @@ @@ -5963,16 +5833,6 @@
5963 "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", 5833 "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
5964 "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" 5834 "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="
5965 }, 5835 },
5966 - "node_modules/custom-event": {  
5967 - "version": "1.0.1",  
5968 - "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz",  
5969 - "integrity": "sha512-GAj5FOq0Hd+RsCGVJxZuKaIDXDf3h6GQoNEjFgbLLI/trgtavwUbSnZ5pVfg27DVCaWjIohryS0JFwIJyT2cMg=="  
5970 - },  
5971 - "node_modules/custom-event-polyfill": {  
5972 - "version": "1.0.7",  
5973 - "resolved": "https://registry.npmjs.org/custom-event-polyfill/-/custom-event-polyfill-1.0.7.tgz",  
5974 - "integrity": "sha512-TDDkd5DkaZxZFM8p+1I3yAlvM3rSr1wbrOliG4yJiwinMZN8z/iGL7BTlDkrJcYTmgUSb4ywVCc3ZaUtOtC76w=="  
5975 - },  
5976 "node_modules/cyclist": { 5836 "node_modules/cyclist": {
5977 "version": "1.0.2", 5837 "version": "1.0.2",
5978 "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.2.tgz", 5838 "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.2.tgz",
@@ -6416,11 +6276,6 @@ @@ -6416,11 +6276,6 @@
6416 "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", 6276 "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==",
6417 "dev": true 6277 "dev": true
6418 }, 6278 },
6419 - "node_modules/dialog-polyfill": {  
6420 - "version": "0.5.6",  
6421 - "resolved": "https://registry.npmjs.org/dialog-polyfill/-/dialog-polyfill-0.5.6.tgz",  
6422 - "integrity": "sha512-ZbVDJI9uvxPAKze6z146rmfUZjBqNEwcnFTVamQzXH+svluiV7swmVIGr7miwADgfgt1G2JQIytypM9fbyhX4w=="  
6423 - },  
6424 "node_modules/diffie-hellman": { 6279 "node_modules/diffie-hellman": {
6425 "version": "5.0.3", 6280 "version": "5.0.3",
6426 "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", 6281 "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz",
@@ -6487,19 +6342,6 @@ @@ -6487,19 +6342,6 @@
6487 "node": ">=6.0.0" 6342 "node": ">=6.0.0"
6488 } 6343 }
6489 }, 6344 },
6490 - "node_modules/dom-autoscroller": {  
6491 - "version": "2.3.4",  
6492 - "resolved": "https://registry.npmjs.org/dom-autoscroller/-/dom-autoscroller-2.3.4.tgz",  
6493 - "integrity": "sha512-HcAdt/2Dq9x4CG6LWXc2x9Iq0MJPAu8fuzHncclq7byufqYEYVtx9sZ/dyzR+gdj4qwEC9p27Lw1G2HRRYX6jQ==",  
6494 - "dependencies": {  
6495 - "animation-frame-polyfill": "^1.0.0",  
6496 - "create-point-cb": "^1.0.0",  
6497 - "dom-mousemove-dispatcher": "^1.0.1",  
6498 - "dom-plane": "^1.0.1",  
6499 - "dom-set": "^1.0.1",  
6500 - "type-func": "^1.0.1"  
6501 - }  
6502 - },  
6503 "node_modules/dom-converter": { 6345 "node_modules/dom-converter": {
6504 "version": "0.2.0", 6346 "version": "0.2.0",
6505 "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", 6347 "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz",
@@ -6509,19 +6351,6 @@ @@ -6509,19 +6351,6 @@
6509 "utila": "~0.4" 6351 "utila": "~0.4"
6510 } 6352 }
6511 }, 6353 },
6512 - "node_modules/dom-mousemove-dispatcher": {  
6513 - "version": "1.0.1",  
6514 - "resolved": "https://registry.npmjs.org/dom-mousemove-dispatcher/-/dom-mousemove-dispatcher-1.0.1.tgz",  
6515 - "integrity": "sha512-NMdqqMbgW8kqOdmod2hkS+9hD/v7h4XoSvwU9qqe+wAA/O+ba0jhpbfW0Kb/fCyR0RX9jf4dwfQrl04LQX4FzQ=="  
6516 - },  
6517 - "node_modules/dom-plane": {  
6518 - "version": "1.0.2",  
6519 - "resolved": "https://registry.npmjs.org/dom-plane/-/dom-plane-1.0.2.tgz",  
6520 - "integrity": "sha512-/tR67G6ZGSciXoZLsD706yLxEXvX3mG/OWE8YNYj3A1yU/RAimtPXzklVTu5Y5xoeMoloA/Y+MaNjQm9apgAww==",  
6521 - "dependencies": {  
6522 - "create-point-cb": "^1.0.0"  
6523 - }  
6524 - },  
6525 "node_modules/dom-serializer": { 6354 "node_modules/dom-serializer": {
6526 "version": "1.4.1", 6355 "version": "1.4.1",
6527 "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", 6356 "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz",
@@ -6545,16 +6374,6 @@ @@ -6545,16 +6374,6 @@
6545 "url": "https://github.com/fb55/entities?sponsor=1" 6374 "url": "https://github.com/fb55/entities?sponsor=1"
6546 } 6375 }
6547 }, 6376 },
6548 - "node_modules/dom-set": {  
6549 - "version": "1.1.1",  
6550 - "resolved": "https://registry.npmjs.org/dom-set/-/dom-set-1.1.1.tgz",  
6551 - "integrity": "sha512-sUi2aSvRsK3Ixx++gwX9cnaWk9ZxGVFry8+HnTRVmDimybU5PaiI4wX0o00mVtjFKlQNZLmtGoPTLorYbN0+Rw==",  
6552 - "dependencies": {  
6553 - "array-from": "^2.1.1",  
6554 - "is-array": "^1.0.1",  
6555 - "iselement": "^1.1.4"  
6556 - }  
6557 - },  
6558 "node_modules/domain-browser": { 6377 "node_modules/domain-browser": {
6559 "version": "1.2.0", 6378 "version": "1.2.0",
6560 "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", 6379 "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz",
@@ -6592,14 +6411,6 @@ @@ -6592,14 +6411,6 @@
6592 "url": "https://github.com/fb55/domhandler?sponsor=1" 6411 "url": "https://github.com/fb55/domhandler?sponsor=1"
6593 } 6412 }
6594 }, 6413 },
6595 - "node_modules/dompurify": {  
6596 - "version": "3.2.6",  
6597 - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.2.6.tgz",  
6598 - "integrity": "sha512-/2GogDQlohXPZe6D6NOgQvXLPSYBqIWMnZ8zzOhn09REE4eyAzb+Hed3jhoM9OkuaJ8P6ZGTTVWQKAi8ieIzfQ==",  
6599 - "optionalDependencies": {  
6600 - "@types/trusted-types": "^2.0.7"  
6601 - }  
6602 - },  
6603 "node_modules/domutils": { 6414 "node_modules/domutils": {
6604 "version": "2.8.0", 6415 "version": "2.8.0",
6605 "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", 6416 "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz",
@@ -6641,20 +6452,6 @@ @@ -6641,20 +6452,6 @@
6641 "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", 6452 "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==",
6642 "dev": true 6453 "dev": true
6643 }, 6454 },
6644 - "node_modules/downloadjs": {  
6645 - "version": "1.4.7",  
6646 - "resolved": "https://registry.npmjs.org/downloadjs/-/downloadjs-1.4.7.tgz",  
6647 - "integrity": "sha512-LN1gO7+u9xjU5oEScGFKvXhYf7Y/empUIIEAGBs1LzUq/rg5duiDrkuH5A2lQGd5jfMOb9X9usDa2oVXwJ0U/Q=="  
6648 - },  
6649 - "node_modules/dragula": {  
6650 - "version": "3.7.3",  
6651 - "resolved": "https://registry.npmjs.org/dragula/-/dragula-3.7.3.tgz",  
6652 - "integrity": "sha512-/rRg4zRhcpf81TyDhaHLtXt6sEywdfpv1cRUMeFFy7DuypH2U0WUL0GTdyAQvXegviT4PJK4KuMmOaIDpICseQ==",  
6653 - "dependencies": {  
6654 - "contra": "1.9.4",  
6655 - "crossvent": "1.5.5"  
6656 - }  
6657 - },  
6658 "node_modules/dunder-proto": { 6455 "node_modules/dunder-proto": {
6659 "version": "1.0.1", 6456 "version": "1.0.1",
6660 "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", 6457 "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
@@ -7449,7 +7246,8 @@ @@ -7449,7 +7246,8 @@
7449 "node_modules/eventemitter3": { 7246 "node_modules/eventemitter3": {
7450 "version": "4.0.7", 7247 "version": "4.0.7",
7451 "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", 7248 "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz",
7452 - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" 7249 + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==",
  7250 + "dev": true
7453 }, 7251 },
7454 "node_modules/events": { 7252 "node_modules/events": {
7455 "version": "3.3.0", 7253 "version": "3.3.0",
@@ -7769,12 +7567,8 @@ @@ -7769,12 +7567,8 @@
7769 "node_modules/fast-deep-equal": { 7567 "node_modules/fast-deep-equal": {
7770 "version": "3.1.3", 7568 "version": "3.1.3",
7771 "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 7569 "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
7772 - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="  
7773 - },  
7774 - "node_modules/fast-diff": {  
7775 - "version": "1.3.0",  
7776 - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz",  
7777 - "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==" 7570 + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
  7571 + "dev": true
7778 }, 7572 },
7779 "node_modules/fast-glob": { 7573 "node_modules/fast-glob": {
7780 "version": "2.2.7", 7574 "version": "2.2.7",
@@ -7793,11 +7587,6 @@ @@ -7793,11 +7587,6 @@
7793 "node": ">=4.0.0" 7587 "node": ">=4.0.0"
7794 } 7588 }
7795 }, 7589 },
7796 - "node_modules/fast-json-patch": {  
7797 - "version": "3.1.1",  
7798 - "resolved": "https://registry.npmjs.org/fast-json-patch/-/fast-json-patch-3.1.1.tgz",  
7799 - "integrity": "sha512-vf6IHUX2SBcA+5/+4883dsIjpBTqmfBjmYiWK1savxQmFk4JfBMLa7ynTYOs1Rolp/T1betJxHiGD3g1Mn8lUQ=="  
7800 - },  
7801 "node_modules/fast-json-stable-stringify": { 7590 "node_modules/fast-json-stable-stringify": {
7802 "version": "2.1.0", 7591 "version": "2.1.0",
7803 "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", 7592 "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
@@ -7822,14 +7611,6 @@ @@ -7822,14 +7611,6 @@
7822 "node": ">=0.8.0" 7611 "node": ">=0.8.0"
7823 } 7612 }
7824 }, 7613 },
7825 - "node_modules/fetch-ponyfill": {  
7826 - "version": "7.1.0",  
7827 - "resolved": "https://registry.npmjs.org/fetch-ponyfill/-/fetch-ponyfill-7.1.0.tgz",  
7828 - "integrity": "sha512-FhbbL55dj/qdVO3YNK7ZEkshvj3eQ7EuIGV2I6ic/2YiocvyWv+7jg2s4AyS0wdRU75s3tA8ZxI/xPigb0v5Aw==",  
7829 - "dependencies": {  
7830 - "node-fetch": "~2.6.1"  
7831 - }  
7832 - },  
7833 "node_modules/figgy-pudding": { 7614 "node_modules/figgy-pudding": {
7834 "version": "3.5.2", 7615 "version": "3.5.2",
7835 "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", 7616 "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz",
@@ -8130,63 +7911,6 @@ @@ -8130,63 +7911,6 @@
8130 "node": ">= 0.12" 7911 "node": ">= 0.12"
8131 } 7912 }
8132 }, 7913 },
8133 - "node_modules/formiojs": {  
8134 - "version": "4.21.7",  
8135 - "resolved": "https://registry.npmjs.org/formiojs/-/formiojs-4.21.7.tgz",  
8136 - "integrity": "sha512-DDXPhXABxdEbpyfv0C8SAS6zt92luGFXqe0usPHxSHvlP960GQkhS//WV7TAMrRsjj1WTIqqv3XZha8qTknG3Q==",  
8137 - "dependencies": {  
8138 - "@formio/bootstrap3": "2.12.4-rc.1",  
8139 - "@formio/choices.js": "10.2.1",  
8140 - "@formio/semantic": "2.6.1",  
8141 - "@formio/text-mask-addons": "^3.8.0-formio.4",  
8142 - "@formio/vanilla-text-mask": "^5.1.1-formio.1",  
8143 - "abortcontroller-polyfill": "^1.7.5",  
8144 - "autocompleter": "^7.0.1",  
8145 - "browser-cookies": "^1.2.0",  
8146 - "browser-md5-file": "^1.1.1",  
8147 - "compare-versions": "^5.0.1",  
8148 - "core-js": "^3.26.1",  
8149 - "custom-event-polyfill": "^1.0.7",  
8150 - "dialog-polyfill": "^0.5.6",  
8151 - "dom-autoscroller": "^2.3.4",  
8152 - "dompurify": "^3.0.5",  
8153 - "downloadjs": "^1.4.7",  
8154 - "dragula": "^3.7.3",  
8155 - "eventemitter3": "^4.0.7",  
8156 - "fast-deep-equal": "^3.1.3",  
8157 - "fast-json-patch": "^3.1.1",  
8158 - "fetch-ponyfill": "^7.1.0",  
8159 - "i18next": "22.4.12",  
8160 - "idb": "^7.1.1",  
8161 - "inputmask": "^5.0.9",  
8162 - "ismobilejs": "^1.1.1",  
8163 - "json-logic-js": "^2.0.2",  
8164 - "jstimezonedetect": "^1.0.7",  
8165 - "jwt-decode": "^3.1.2",  
8166 - "lodash": "^4.17.21",  
8167 - "moment": "^2.29.4",  
8168 - "moment-timezone": "^0.5.40",  
8169 - "native-promise-only": "^0.8.1",  
8170 - "quill": "^2.0.0-dev.3",  
8171 - "signature_pad": "^4.1.4",  
8172 - "string-hash": "^1.1.3",  
8173 - "tippy.js": "^6.3.7",  
8174 - "uuid": "^9.0.0",  
8175 - "vanilla-picker": "^2.12.1"  
8176 - }  
8177 - },  
8178 - "node_modules/formiojs/node_modules/uuid": {  
8179 - "version": "9.0.1",  
8180 - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz",  
8181 - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==",  
8182 - "funding": [  
8183 - "https://github.com/sponsors/broofa",  
8184 - "https://github.com/sponsors/ctavan"  
8185 - ],  
8186 - "bin": {  
8187 - "uuid": "dist/bin/uuid"  
8188 - }  
8189 - },  
8190 "node_modules/forwarded": { 7914 "node_modules/forwarded": {
8191 "version": "0.2.0", 7915 "version": "0.2.0",
8192 "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", 7916 "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
@@ -8317,14 +8041,6 @@ @@ -8317,14 +8041,6 @@
8317 "url": "https://github.com/sponsors/ljharb" 8041 "url": "https://github.com/sponsors/ljharb"
8318 } 8042 }
8319 }, 8043 },
8320 - "node_modules/fuse.js": {  
8321 - "version": "6.6.2",  
8322 - "resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-6.6.2.tgz",  
8323 - "integrity": "sha512-cJaJkxCCxC8qIIcPBF9yGxY0W/tVZS3uEISDxhYIdtk8OL93pe+6Zj7LjCqVV4dzbqcriOZ+kQ/NE4RXZHsIGA==",  
8324 - "engines": {  
8325 - "node": ">=10"  
8326 - }  
8327 - },  
8328 "node_modules/gensync": { 8044 "node_modules/gensync": {
8329 "version": "1.0.0-beta.2", 8045 "version": "1.0.0-beta.2",
8330 "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", 8046 "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
@@ -9104,28 +8820,6 @@ @@ -9104,28 +8820,6 @@
9104 "node": ">=8.12.0" 8820 "node": ">=8.12.0"
9105 } 8821 }
9106 }, 8822 },
9107 - "node_modules/i18next": {  
9108 - "version": "22.4.12",  
9109 - "resolved": "https://registry.npmjs.org/i18next/-/i18next-22.4.12.tgz",  
9110 - "integrity": "sha512-2lE+vRXxQ3lGLub1CVbwgO0IfkLHmUSDVOAVdPh22CsxttMXi+35n2qgxh2wZIkKl6t/NMzPfgFPRDiFQOmiCg==",  
9111 - "funding": [  
9112 - {  
9113 - "type": "individual",  
9114 - "url": "https://locize.com"  
9115 - },  
9116 - {  
9117 - "type": "individual",  
9118 - "url": "https://locize.com/i18next.html"  
9119 - },  
9120 - {  
9121 - "type": "individual",  
9122 - "url": "https://www.i18next.com/how-to/faq#i18next-is-awesome.-how-can-i-support-the-project"  
9123 - }  
9124 - ],  
9125 - "dependencies": {  
9126 - "@babel/runtime": "^7.20.6"  
9127 - }  
9128 - },  
9129 "node_modules/iconv-lite": { 8823 "node_modules/iconv-lite": {
9130 "version": "0.4.24", 8824 "version": "0.4.24",
9131 "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 8825 "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
@@ -9150,11 +8844,6 @@ @@ -9150,11 +8844,6 @@
9150 "node": ">= 6" 8844 "node": ">= 6"
9151 } 8845 }
9152 }, 8846 },
9153 - "node_modules/idb": {  
9154 - "version": "7.1.1",  
9155 - "resolved": "https://registry.npmjs.org/idb/-/idb-7.1.1.tgz",  
9156 - "integrity": "sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ=="  
9157 - },  
9158 "node_modules/ieee754": { 8847 "node_modules/ieee754": {
9159 "version": "1.2.1", 8848 "version": "1.2.1",
9160 "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", 8849 "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
@@ -9345,11 +9034,6 @@ @@ -9345,11 +9034,6 @@
9345 "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 9034 "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
9346 "dev": true 9035 "dev": true
9347 }, 9036 },
9348 - "node_modules/inputmask": {  
9349 - "version": "5.0.9",  
9350 - "resolved": "https://registry.npmjs.org/inputmask/-/inputmask-5.0.9.tgz",  
9351 - "integrity": "sha512-s0lUfqcEbel+EQXtehXqwCJGShutgieOaIImFKC/r4reYNvX3foyrChl6LOEvaEgxEbesePIrw1Zi2jhZaDZbQ=="  
9352 - },  
9353 "node_modules/inquirer": { 9037 "node_modules/inquirer": {
9354 "version": "7.3.3", 9038 "version": "7.3.3",
9355 "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", 9039 "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz",
@@ -9491,11 +9175,6 @@ @@ -9491,11 +9175,6 @@
9491 "url": "https://github.com/sponsors/ljharb" 9175 "url": "https://github.com/sponsors/ljharb"
9492 } 9176 }
9493 }, 9177 },
9494 - "node_modules/is-array": {  
9495 - "version": "1.0.1",  
9496 - "resolved": "https://registry.npmjs.org/is-array/-/is-array-1.0.1.tgz",  
9497 - "integrity": "sha512-gxiZ+y/u67AzpeFmAmo4CbtME/bs7J2C++su5zQzvQyaxUqVzkh69DI+jN+KZuSO6JaH6TIIU6M6LhqxMjxEpw=="  
9498 - },  
9499 "node_modules/is-array-buffer": { 9178 "node_modules/is-array-buffer": {
9500 "version": "3.0.5", 9179 "version": "3.0.5",
9501 "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", 9180 "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz",
@@ -10100,22 +9779,12 @@ @@ -10100,22 +9779,12 @@
10100 "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", 9779 "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
10101 "dev": true 9780 "dev": true
10102 }, 9781 },
10103 - "node_modules/iselement": {  
10104 - "version": "1.1.4",  
10105 - "resolved": "https://registry.npmjs.org/iselement/-/iselement-1.1.4.tgz",  
10106 - "integrity": "sha512-4Q519eWmbHO1pbimiz7H1iJRUHVmAmfh0viSsUD+oAwVO4ntZt7gpf8i8AShVBTyOvRTZNYNBpUxOIvwZR+ffw=="  
10107 - },  
10108 "node_modules/isexe": { 9782 "node_modules/isexe": {
10109 "version": "2.0.0", 9783 "version": "2.0.0",
10110 "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 9784 "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
10111 "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", 9785 "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
10112 "dev": true 9786 "dev": true
10113 }, 9787 },
10114 - "node_modules/ismobilejs": {  
10115 - "version": "1.1.1",  
10116 - "resolved": "https://registry.npmjs.org/ismobilejs/-/ismobilejs-1.1.1.tgz",  
10117 - "integrity": "sha512-VaFW53yt8QO61k2WJui0dHf4SlL8lxBofUuUmwBo0ljPk0Drz2TiuDW4jo3wDcv41qy/SxrJ+VAzJ/qYqsmzRw=="  
10118 - },  
10119 "node_modules/isobject": { 9788 "node_modules/isobject": {
10120 "version": "3.0.1", 9789 "version": "3.0.1",
10121 "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", 9790 "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
@@ -10183,11 +9852,6 @@ @@ -10183,11 +9852,6 @@
10183 "node": ">=6" 9852 "node": ">=6"
10184 } 9853 }
10185 }, 9854 },
10186 - "node_modules/json-logic-js": {  
10187 - "version": "2.0.5",  
10188 - "resolved": "https://registry.npmjs.org/json-logic-js/-/json-logic-js-2.0.5.tgz",  
10189 - "integrity": "sha512-rTT2+lqcuUmj4DgWfmzupZqQDA64AdmYqizzMPWj3DxGdfFNsxPpcNVSaTj4l8W2tG/+hg7/mQhxjU3aPacO6g=="  
10190 - },  
10191 "node_modules/json-parse-better-errors": { 9855 "node_modules/json-parse-better-errors": {
10192 "version": "1.0.2", 9856 "version": "1.0.2",
10193 "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", 9857 "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
@@ -10260,16 +9924,6 @@ @@ -10260,16 +9924,6 @@
10260 "node": ">=0.6.0" 9924 "node": ">=0.6.0"
10261 } 9925 }
10262 }, 9926 },
10263 - "node_modules/jstimezonedetect": {  
10264 - "version": "1.0.7",  
10265 - "resolved": "https://registry.npmjs.org/jstimezonedetect/-/jstimezonedetect-1.0.7.tgz",  
10266 - "integrity": "sha512-ARADHortktl9IZ1tr4GHwGPIAzgz3mLNCbR/YjWtRtc/O0o634O3NeFlpLjv95EvuDA5dc8z6yfgbS8nUc4zcQ=="  
10267 - },  
10268 - "node_modules/jwt-decode": {  
10269 - "version": "3.1.2",  
10270 - "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-3.1.2.tgz",  
10271 - "integrity": "sha512-UfpWE/VZn0iP50d8cz9NrZLM9lSWhcJ+0Gt/nm4by88UL+J1SiKN8/5dkjMmbEzwL2CAe+67GsegCbIKtbp75A=="  
10272 - },  
10273 "node_modules/killable": { 9927 "node_modules/killable": {
10274 "version": "1.0.1", 9928 "version": "1.0.1",
10275 "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", 9929 "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz",
@@ -10431,18 +10085,14 @@ @@ -10431,18 +10085,14 @@
10431 "node_modules/lodash": { 10085 "node_modules/lodash": {
10432 "version": "4.17.21", 10086 "version": "4.17.21",
10433 "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", 10087 "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
10434 - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" 10088 + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
  10089 + "dev": true
10435 }, 10090 },
10436 "node_modules/lodash-es": { 10091 "node_modules/lodash-es": {
10437 "version": "4.17.21", 10092 "version": "4.17.21",
10438 "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", 10093 "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz",
10439 "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" 10094 "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw=="
10440 }, 10095 },
10441 - "node_modules/lodash.clonedeep": {  
10442 - "version": "4.5.0",  
10443 - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",  
10444 - "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ=="  
10445 - },  
10446 "node_modules/lodash.debounce": { 10096 "node_modules/lodash.debounce": {
10447 "version": "4.0.8", 10097 "version": "4.0.8",
10448 "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", 10098 "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
@@ -10455,12 +10105,6 @@ @@ -10455,12 +10105,6 @@
10455 "integrity": "sha512-3j8wdDzYuWO3lM3Reg03MuQR957t287Rpcxp1njpEa8oDrikb+FwGdW3n+FELh/A6qib6yPit0j/pv9G/yeAqA==", 10105 "integrity": "sha512-3j8wdDzYuWO3lM3Reg03MuQR957t287Rpcxp1njpEa8oDrikb+FwGdW3n+FELh/A6qib6yPit0j/pv9G/yeAqA==",
10456 "dev": true 10106 "dev": true
10457 }, 10107 },
10458 - "node_modules/lodash.isequal": {  
10459 - "version": "4.5.0",  
10460 - "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz",  
10461 - "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==",  
10462 - "deprecated": "This package is deprecated. Use require('node:util').isDeepStrictEqual instead."  
10463 - },  
10464 "node_modules/lodash.kebabcase": { 10108 "node_modules/lodash.kebabcase": {
10465 "version": "4.1.1", 10109 "version": "4.1.1",
10466 "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", 10110 "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz",
@@ -10963,25 +10607,6 @@ @@ -10963,25 +10607,6 @@
10963 "mkdirp": "bin/cmd.js" 10607 "mkdirp": "bin/cmd.js"
10964 } 10608 }
10965 }, 10609 },
10966 - "node_modules/moment": {  
10967 - "version": "2.30.1",  
10968 - "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz",  
10969 - "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==",  
10970 - "engines": {  
10971 - "node": "*"  
10972 - }  
10973 - },  
10974 - "node_modules/moment-timezone": {  
10975 - "version": "0.5.48",  
10976 - "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.48.tgz",  
10977 - "integrity": "sha512-f22b8LV1gbTO2ms2j2z13MuPogNoh5UzxL3nzNAYKGraILnbGc9NEE6dyiiiLv46DGRb8A4kg8UKWLjPthxBHw==",  
10978 - "dependencies": {  
10979 - "moment": "^2.29.4"  
10980 - },  
10981 - "engines": {  
10982 - "node": "*"  
10983 - }  
10984 - },  
10985 "node_modules/move-concurrently": { 10610 "node_modules/move-concurrently": {
10986 "version": "1.0.1", 10611 "version": "1.0.1",
10987 "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", 10612 "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz",
@@ -11085,11 +10710,6 @@ @@ -11085,11 +10710,6 @@
11085 "node": ">=0.10.0" 10710 "node": ">=0.10.0"
11086 } 10711 }
11087 }, 10712 },
11088 - "node_modules/native-promise-only": {  
11089 - "version": "0.8.1",  
11090 - "resolved": "https://registry.npmjs.org/native-promise-only/-/native-promise-only-0.8.1.tgz",  
11091 - "integrity": "sha512-zkVhZUA3y8mbz652WrL5x0fB0ehrBkulWT3TomAQ9iDtyXZvzKeEA6GPxAItBYeNYl5yngKRX612qHOhvMkDeg=="  
11092 - },  
11093 "node_modules/natural-compare": { 10713 "node_modules/natural-compare": {
11094 "version": "1.4.0", 10714 "version": "1.4.0",
11095 "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", 10715 "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
@@ -11133,25 +10753,6 @@ @@ -11133,25 +10753,6 @@
11133 "dev": true, 10753 "dev": true,
11134 "optional": true 10754 "optional": true
11135 }, 10755 },
11136 - "node_modules/node-fetch": {  
11137 - "version": "2.6.13",  
11138 - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.13.tgz",  
11139 - "integrity": "sha512-StxNAxh15zr77QvvkmveSQ8uCQ4+v5FkvNTj0OESmiHu+VRi/gXArXtkWMElOsOUNLtUEvI4yS+rdtOHZTwlQA==",  
11140 - "dependencies": {  
11141 - "whatwg-url": "^5.0.0"  
11142 - },  
11143 - "engines": {  
11144 - "node": "4.x || >=6.0.0"  
11145 - },  
11146 - "peerDependencies": {  
11147 - "encoding": "^0.1.0"  
11148 - },  
11149 - "peerDependenciesMeta": {  
11150 - "encoding": {  
11151 - "optional": true  
11152 - }  
11153 - }  
11154 - },  
11155 "node_modules/node-forge": { 10756 "node_modules/node-forge": {
11156 "version": "0.10.0", 10757 "version": "0.10.0",
11157 "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", 10758 "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz",
@@ -11879,11 +11480,6 @@ @@ -11879,11 +11480,6 @@
11879 "no-case": "^2.2.0" 11480 "no-case": "^2.2.0"
11880 } 11481 }
11881 }, 11482 },
11882 - "node_modules/parchment": {  
11883 - "version": "3.0.0",  
11884 - "resolved": "https://registry.npmjs.org/parchment/-/parchment-3.0.0.tgz",  
11885 - "integrity": "sha512-HUrJFQ/StvgmXRcQ1ftY6VEZUq3jA2t9ncFN4F84J/vN0/FPpQF+8FKXb3l6fLces6q0uOHj6NJn+2xvZnxO6A=="  
11886 - },  
11887 "node_modules/parent-module": { 11483 "node_modules/parent-module": {
11888 "version": "1.0.1", 11484 "version": "1.0.1",
11889 "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", 11485 "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
@@ -13100,38 +12696,6 @@ @@ -13100,38 +12696,6 @@
13100 "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", 12696 "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==",
13101 "dev": true 12697 "dev": true
13102 }, 12698 },
13103 - "node_modules/quill": {  
13104 - "version": "2.0.3",  
13105 - "resolved": "https://registry.npmjs.org/quill/-/quill-2.0.3.tgz",  
13106 - "integrity": "sha512-xEYQBqfYx/sfb33VJiKnSJp8ehloavImQ2A6564GAbqG55PGw1dAWUn1MUbQB62t0azawUS2CZZhWCjO8gRvTw==",  
13107 - "dependencies": {  
13108 - "eventemitter3": "^5.0.1",  
13109 - "lodash-es": "^4.17.21",  
13110 - "parchment": "^3.0.0",  
13111 - "quill-delta": "^5.1.0"  
13112 - },  
13113 - "engines": {  
13114 - "npm": ">=8.2.3"  
13115 - }  
13116 - },  
13117 - "node_modules/quill-delta": {  
13118 - "version": "5.1.0",  
13119 - "resolved": "https://registry.npmjs.org/quill-delta/-/quill-delta-5.1.0.tgz",  
13120 - "integrity": "sha512-X74oCeRI4/p0ucjb5Ma8adTXd9Scumz367kkMK5V/IatcX6A0vlgLgKbzXWy5nZmCGeNJm2oQX0d2Eqj+ZIlCA==",  
13121 - "dependencies": {  
13122 - "fast-diff": "^1.3.0",  
13123 - "lodash.clonedeep": "^4.5.0",  
13124 - "lodash.isequal": "^4.5.0"  
13125 - },  
13126 - "engines": {  
13127 - "node": ">= 12.0.0"  
13128 - }  
13129 - },  
13130 - "node_modules/quill/node_modules/eventemitter3": {  
13131 - "version": "5.0.1",  
13132 - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz",  
13133 - "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA=="  
13134 - },  
13135 "node_modules/randombytes": { 12699 "node_modules/randombytes": {
13136 "version": "2.1.0", 12700 "version": "2.1.0",
13137 "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", 12701 "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
@@ -13245,14 +12809,6 @@ @@ -13245,14 +12809,6 @@
13245 "node": ">=8.10.0" 12809 "node": ">=8.10.0"
13246 } 12810 }
13247 }, 12811 },
13248 - "node_modules/redux": {  
13249 - "version": "4.2.1",  
13250 - "resolved": "https://registry.npmjs.org/redux/-/redux-4.2.1.tgz",  
13251 - "integrity": "sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==",  
13252 - "dependencies": {  
13253 - "@babel/runtime": "^7.9.2"  
13254 - }  
13255 - },  
13256 "node_modules/reflect.getprototypeof": { 12812 "node_modules/reflect.getprototypeof": {
13257 "version": "1.0.10", 12813 "version": "1.0.10",
13258 "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", 12814 "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz",
@@ -14295,11 +13851,6 @@ @@ -14295,11 +13851,6 @@
14295 "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", 13851 "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
14296 "dev": true 13852 "dev": true
14297 }, 13853 },
14298 - "node_modules/signature_pad": {  
14299 - "version": "4.2.0",  
14300 - "resolved": "https://registry.npmjs.org/signature_pad/-/signature_pad-4.2.0.tgz",  
14301 - "integrity": "sha512-YLWysmaUBaC5wosAKkgbX7XI+LBv2w5L0QUcI6Jc4moHYzv9BUBJtAyNLpWzHjtjKTeWOH6bfP4a4pzf0UinfQ=="  
14302 - },  
14303 "node_modules/simple-swizzle": { 13854 "node_modules/simple-swizzle": {
14304 "version": "0.2.2", 13855 "version": "0.2.2",
14305 "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", 13856 "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz",
@@ -14635,11 +14186,6 @@ @@ -14635,11 +14186,6 @@
14635 "deprecated": "See https://github.com/lydell/source-map-url#deprecated", 14186 "deprecated": "See https://github.com/lydell/source-map-url#deprecated",
14636 "dev": true 14187 "dev": true
14637 }, 14188 },
14638 - "node_modules/spark-md5": {  
14639 - "version": "2.0.2",  
14640 - "resolved": "https://registry.npmjs.org/spark-md5/-/spark-md5-2.0.2.tgz",  
14641 - "integrity": "sha512-9WfT+FYBEvlrOOBEs484/zmbtSX4BlGjzXih1qIEWA1yhHbcqgcMHkiwXoWk2Sq1aJjLpcs6ZKV7JxrDNjIlNg=="  
14642 - },  
14643 "node_modules/spdx-correct": { 14189 "node_modules/spdx-correct": {
14644 "version": "3.2.0", 14190 "version": "3.2.0",
14645 "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", 14191 "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz",
@@ -14888,11 +14434,6 @@ @@ -14888,11 +14434,6 @@
14888 "safe-buffer": "~5.1.0" 14434 "safe-buffer": "~5.1.0"
14889 } 14435 }
14890 }, 14436 },
14891 - "node_modules/string-hash": {  
14892 - "version": "1.1.3",  
14893 - "resolved": "https://registry.npmjs.org/string-hash/-/string-hash-1.1.3.tgz",  
14894 - "integrity": "sha512-kJUvRUFK49aub+a7T1nNE66EJbZBMnBgoC1UbCZ5n6bsZKBRga4KgBRTMn/pFkeCZSYtNeSyMxPDM0AXWELk2A=="  
14895 - },  
14896 "node_modules/string-width": { 14437 "node_modules/string-width": {
14897 "version": "4.2.3", 14438 "version": "4.2.3",
14898 "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 14439 "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
@@ -15567,11 +15108,6 @@ @@ -15567,11 +15108,6 @@
15567 "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", 15108 "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==",
15568 "dev": true 15109 "dev": true
15569 }, 15110 },
15570 - "node_modules/ticky": {  
15571 - "version": "1.0.1",  
15572 - "resolved": "https://registry.npmjs.org/ticky/-/ticky-1.0.1.tgz",  
15573 - "integrity": "sha512-RX35iq/D+lrsqhcPWIazM9ELkjOe30MSeoBHQHSsRwd1YuhJO5ui1K1/R0r7N3mFvbLBs33idw+eR6j+w6i/DA=="  
15574 - },  
15575 "node_modules/timers-browserify": { 15111 "node_modules/timers-browserify": {
15576 "version": "2.0.12", 15112 "version": "2.0.12",
15577 "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", 15113 "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz",
@@ -15595,14 +15131,6 @@ @@ -15595,14 +15131,6 @@
15595 "resolved": "https://registry.npmjs.org/tinymce/-/tinymce-5.10.7.tgz", 15131 "resolved": "https://registry.npmjs.org/tinymce/-/tinymce-5.10.7.tgz",
15596 "integrity": "sha512-9UUjaO0R7FxcFo0oxnd1lMs7H+D0Eh+dDVo5hKbVe1a+VB0nit97vOqlinj+YwgoBDt6/DSCUoWqAYlLI8BLYA==" 15132 "integrity": "sha512-9UUjaO0R7FxcFo0oxnd1lMs7H+D0Eh+dDVo5hKbVe1a+VB0nit97vOqlinj+YwgoBDt6/DSCUoWqAYlLI8BLYA=="
15597 }, 15133 },
15598 - "node_modules/tippy.js": {  
15599 - "version": "6.3.7",  
15600 - "resolved": "https://registry.npmjs.org/tippy.js/-/tippy.js-6.3.7.tgz",  
15601 - "integrity": "sha512-E1d3oP2emgJ9dRQZdf3Kkn0qJgI6ZLpyS5z6ZkY1DF3kaQaBsGZsndEpHwx+eC+tYM41HaSNvNtLx8tU57FzTQ==",  
15602 - "dependencies": {  
15603 - "@popperjs/core": "^2.9.0"  
15604 - }  
15605 - },  
15606 "node_modules/tmp": { 15134 "node_modules/tmp": {
15607 "version": "0.0.33", 15135 "version": "0.0.33",
15608 "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", 15136 "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
@@ -15701,11 +15229,6 @@ @@ -15701,11 +15229,6 @@
15701 "node": ">=0.8" 15229 "node": ">=0.8"
15702 } 15230 }
15703 }, 15231 },
15704 - "node_modules/tr46": {  
15705 - "version": "0.0.3",  
15706 - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",  
15707 - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="  
15708 - },  
15709 "node_modules/tryer": { 15232 "node_modules/tryer": {
15710 "version": "1.0.1", 15233 "version": "1.0.1",
15711 "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz", 15234 "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz",
@@ -15780,11 +15303,6 @@ @@ -15780,11 +15303,6 @@
15780 "url": "https://github.com/sponsors/sindresorhus" 15303 "url": "https://github.com/sponsors/sindresorhus"
15781 } 15304 }
15782 }, 15305 },
15783 - "node_modules/type-func": {  
15784 - "version": "1.0.3",  
15785 - "resolved": "https://registry.npmjs.org/type-func/-/type-func-1.0.3.tgz",  
15786 - "integrity": "sha512-YA90CUk+i00tWESPNRMahywXhAz+12NLJLKlOWrgHIbqaFXjdZrWstRghaibOW/IxhPjui4SmXxO/03XSGRIjA=="  
15787 - },  
15788 "node_modules/type-is": { 15306 "node_modules/type-is": {
15789 "version": "1.6.18", 15307 "version": "1.6.18",
15790 "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", 15308 "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
@@ -16338,14 +15856,6 @@ @@ -16338,14 +15856,6 @@
16338 "spdx-expression-parse": "^3.0.0" 15856 "spdx-expression-parse": "^3.0.0"
16339 } 15857 }
16340 }, 15858 },
16341 - "node_modules/vanilla-picker": {  
16342 - "version": "2.12.3",  
16343 - "resolved": "https://registry.npmjs.org/vanilla-picker/-/vanilla-picker-2.12.3.tgz",  
16344 - "integrity": "sha512-qVkT1E7yMbUsB2mmJNFmaXMWE2hF8ffqzMMwe9zdAikd8u2VfnsVY2HQcOUi2F38bgbxzlJBEdS1UUhOXdF9GQ==",  
16345 - "dependencies": {  
16346 - "@sphinxxxx/color-conversion": "^2.2.2"  
16347 - }  
16348 - },  
16349 "node_modules/vary": { 15859 "node_modules/vary": {
16350 "version": "1.1.2", 15860 "version": "1.1.2",
16351 "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", 15861 "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
@@ -16903,11 +16413,6 @@ @@ -16903,11 +16413,6 @@
16903 "defaults": "^1.0.3" 16413 "defaults": "^1.0.3"
16904 } 16414 }
16905 }, 16415 },
16906 - "node_modules/webidl-conversions": {  
16907 - "version": "3.0.1",  
16908 - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",  
16909 - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="  
16910 - },  
16911 "node_modules/webpack": { 16416 "node_modules/webpack": {
16912 "version": "4.47.0", 16417 "version": "4.47.0",
16913 "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.47.0.tgz", 16418 "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.47.0.tgz",
@@ -17656,15 +17161,6 @@ @@ -17656,15 +17161,6 @@
17656 "node": ">=0.8.0" 17161 "node": ">=0.8.0"
17657 } 17162 }
17658 }, 17163 },
17659 - "node_modules/whatwg-url": {  
17660 - "version": "5.0.0",  
17661 - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",  
17662 - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",  
17663 - "dependencies": {  
17664 - "tr46": "~0.0.3",  
17665 - "webidl-conversions": "^3.0.0"  
17666 - }  
17667 - },  
17668 "node_modules/which": { 17164 "node_modules/which": {
17669 "version": "1.3.1", 17165 "version": "1.3.1",
17670 "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", 17166 "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
package.json
1 { 1 {
2 - "name": "property_web", 2 + "name": "xirong_property",
3 "version": "1.0.0", 3 "version": "1.0.0",
4 "private": true, 4 "private": true,
5 "scripts": { 5 "scripts": {
public/img/logo.png deleted

2.36 KB

public/index.html
@@ -19,21 +19,19 @@ @@ -19,21 +19,19 @@
19 window.scriptLoadErrors.push({ name: scriptName, error: error.message }); 19 window.scriptLoadErrors.push({ name: scriptName, error: error.message });
20 } 20 }
21 </script> 21 </script>
22 - <script src="https://map.qq.com/api/gljs?v=1.exp&key="></script> 22 +
23 23
24 <!-- Qs 库 - 主 CDN --> 24 <!-- Qs 库 - 主 CDN -->
25 <script src="/js/jessibuca/jessibuca.js"></script> 25 <script src="/js/jessibuca/jessibuca.js"></script>
26 <script src="/formjs/js/form-viewer.umd.js"></script> 26 <script src="/formjs/js/form-viewer.umd.js"></script>
27 -  
28 -  
29 -  
30 - <!-- 可以在这里添加更多全局脚本 -->  
31 </head> 27 </head>
32 <body> 28 <body>
33 <noscript> 29 <noscript>
34 <strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong> 30 <strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
35 </noscript> 31 </noscript>
36 <div id="app"></div> 32 <div id="app"></div>
  33 + <!-- 高德地图 JS API -->
  34 + <script src="https://webapi.amap.com/maps?v=1.4.15&key=3239bc04f77a5c89b2b5e628da96b6ed"></script>
37 <!-- built files will be auto injected --> 35 <!-- built files will be auto injected -->
38 </body> 36 </body>
39 37
public/js/vcCore/vc-cn.js
@@ -3,17 +3,17 @@ @@ -3,17 +3,17 @@
3 */ 3 */
4 (function(window) { 4 (function(window) {
5 window.lang = { 5 window.lang = {
6 - "systemName": "HC小區管理系統",  
7 - "systemSimpleName": "HC", 6 + "systemName": "西荣物业小區管理系統",
  7 + "systemSimpleName": "西荣物业",
8 "subSystemName": "小區管理系統", 8 "subSystemName": "小區管理系統",
9 "companyTeam": "java110團隊", 9 "companyTeam": "java110團隊",
10 - "welcome": "歡迎訪問HC小區管理系統", 10 + "welcome": "歡迎訪問西荣物业小區管理系統",
11 "signOut": "退出", 11 "signOut": "退出",
12 "signIn": "登錄", 12 "signIn": "登錄",
13 "register": "註冊", 13 "register": "註冊",
14 "moreCommunity": "更多小區", 14 "moreCommunity": "更多小區",
15 "moreMsg": "查看全部消息", 15 "moreMsg": "查看全部消息",
16 - "title": "HC小區管理系統", 16 + "title": "西荣物业小區管理系統",
17 "noAccount": "還沒有賬號?", 17 "noAccount": "還沒有賬號?",
18 "areyouhasaccount": "已經有賬戶了?", 18 "areyouhasaccount": "已經有賬戶了?",
19 "indexContext": { 19 "indexContext": {
@@ -1265,4 +1265,4 @@ @@ -1265,4 +1265,4 @@
1265 "chooseQuestionAnswer": { "查询": "查詢", "选择": "選擇", "操作": "操作", "输入问卷信息名称": "輸入問卷資訊名稱", "开始时间": "開始時間", "选择问卷信息": "選擇問卷資訊", "问卷名称": "問卷名稱", "问卷类型": "問卷類型", "备注": "備註", "问卷": "問卷", "结束时间": "結束時間" }, 1265 "chooseQuestionAnswer": { "查询": "查詢", "选择": "選擇", "操作": "操作", "输入问卷信息名称": "輸入問卷資訊名稱", "开始时间": "開始時間", "选择问卷信息": "選擇問卷資訊", "问卷名称": "問卷名稱", "问卷类型": "問卷類型", "备注": "備註", "问卷": "問卷", "结束时间": "結束時間" },
1266 "addAttrSpec": { "字符串": "字串", "否": "否", "小区属性": "社區屬性", "规格名称": "規格名稱", "说明": "說明", "必填": "必填", "设备属性": "設備屬性", "查询显示": "查詢顯示", "展示": "展示", "是": "是", "值类型": "數值型別", "整数": "整数", "停车场属性": "停車場屬性", "添加属性配置": "新增屬性配置", "属性表": "屬性表", "房屋属性": "房屋屬性", "业主属性": "屋主屬性", "车辆属性": "車輛屬性", "金额": "金額", "规格类型": "規格類型" } 1266 "addAttrSpec": { "字符串": "字串", "否": "否", "小区属性": "社區屬性", "规格名称": "規格名稱", "说明": "說明", "必填": "必填", "设备属性": "設備屬性", "查询显示": "查詢顯示", "展示": "展示", "是": "是", "值类型": "數值型別", "整数": "整数", "停车场属性": "停車場屬性", "添加属性配置": "新增屬性配置", "属性表": "屬性表", "房屋属性": "房屋屬性", "业主属性": "屋主屬性", "车辆属性": "車輛屬性", "金额": "金額", "规格类型": "規格類型" }
1267 } 1267 }
1268 -})(window)  
1269 \ No newline at end of file 1268 \ No newline at end of file
  1269 +})(window)
public/js/vcCore/vc-en.js
@@ -3,8 +3,8 @@ @@ -3,8 +3,8 @@
3 */ 3 */
4 (function(window) { 4 (function(window) {
5 window.lang = { 5 window.lang = {
6 - "systemName": "HC Community System",  
7 - "systemSimpleName": "HC", 6 + "systemName": "西荣物业 Community System",
  7 + "systemSimpleName": "西荣物业",
8 "subSystemName": "CommunityManagement", 8 "subSystemName": "CommunityManagement",
9 "companyTeam": "java110 Round data team", 9 "companyTeam": "java110 Round data team",
10 "welcome": "welcome community management", 10 "welcome": "welcome community management",
@@ -1193,4 +1193,4 @@ @@ -1193,4 +1193,4 @@
1193 "addAttrSpec": { "必填,请填写说明": "required,please fill in the description", "字符串": " String", "否": "No", "小区属性": "Community Attribute", "规格名称": "Specification Name", "说明": "Description", "必填": "Required", "设备属性": "Equipment attribute", "查询显示": "query display", "展示": "display", "是": "yes", "值类型": "value type", "整数": "Integer", "必填,请填写规格名称": "required,please fill in the specification name", "停车场属性": "parking lot attribute", "添加属性配置": "add attribute configuration", "属性表": "Attribute table", "房屋属性": "House attribute", "业主属性": "Owner attribute", "车辆属性": "Vehicle attribute", "金额": "Amount", "规格类型": "Spec Type" } 1193 "addAttrSpec": { "必填,请填写说明": "required,please fill in the description", "字符串": " String", "否": "No", "小区属性": "Community Attribute", "规格名称": "Specification Name", "说明": "Description", "必填": "Required", "设备属性": "Equipment attribute", "查询显示": "query display", "展示": "display", "是": "yes", "值类型": "value type", "整数": "Integer", "必填,请填写规格名称": "required,please fill in the specification name", "停车场属性": "parking lot attribute", "添加属性配置": "add attribute configuration", "属性表": "Attribute table", "房屋属性": "House attribute", "业主属性": "Owner attribute", "车辆属性": "Vehicle attribute", "金额": "Amount", "规格类型": "Spec Type" }
1194 } 1194 }
1195 1195
1196 -})(window)  
1197 \ No newline at end of file 1196 \ No newline at end of file
  1197 +})(window)
public/js/vcCore/vc-tibetan.js
@@ -3,18 +3,18 @@ @@ -3,18 +3,18 @@
3 */ 3 */
4 (function(window) { 4 (function(window) {
5 window.lang = { 5 window.lang = {
6 - "systemName": "HCགཞིས་ཁུལ་དོ་དམ་མ་ལག",  
7 - "systemSimpleName": "HC", 6 + "systemName": "西荣物业གཞིས་ཁུལ་དོ་དམ་མ་ལག",
  7 + "systemSimpleName": "西荣物业",
8 "subSystemName": "གཞིས་ཁུལ་དོ་དམ་མ་ལག", 8 "subSystemName": "གཞིས་ཁུལ་དོ་དམ་མ་ལག",
9 "companyTeam": "java110ཚོགས་པ།", 9 "companyTeam": "java110ཚོགས་པ།",
10 - "welcome": "འཚམས་འདྲིར་ཕེབས་པར་དགའ་བསུ་ཞུ། HCགཞིས་ཁུལ་དོ་དམ་མ་ལག", 10 + "welcome": "འཚམས་འདྲིར་ཕེབས་པར་དགའ་བསུ་ཞུ། 西荣物业གཞིས་ཁུལ་དོ་དམ་མ་ལག",
11 "signOut": "ཕྱིར་འཐེན།", 11 "signOut": "ཕྱིར་འཐེན།",
12 "signIn": "ཐོ་འགོད།", 12 "signIn": "ཐོ་འགོད།",
13 "register": "ཐོ་འགོད།", 13 "register": "ཐོ་འགོད།",
14 "moreCommunity": "སྡེ་ཁུལ་དེ་བས་མང་བ།", 14 "moreCommunity": "སྡེ་ཁུལ་དེ་བས་མང་བ།",
15 "moreMsg": "གནས་ཚུལ་ཚང་མར་གཟིགས་པ།", 15 "moreMsg": "གནས་ཚུལ་ཚང་མར་གཟིགས་པ།",
16 - "title": "HCགཞིས་ཁུལ་དོ་དམ་མ་ལག", 16 + "title": "西荣物业གཞིས་ཁུལ་དོ་དམ་མ་ལག",
17 "noAccount": "ད་དུང་རྩིས་ཨང་མེད་དམ།", 17 "noAccount": "ད་དུང་རྩིས་ཨང་མེད་དམ།",
18 "areyouhasaccount": "རྩིས་ཐོ་ཡོད་སོང་ངམ།" 18 "areyouhasaccount": "རྩིས་ཐོ་ཡོད་སོང་ངམ།"
19 } 19 }
20 -})(window)  
21 \ No newline at end of file 20 \ No newline at end of file
  21 +})(window)
public/js/vcCore/vc-zh-cn.js
@@ -3,17 +3,17 @@ @@ -3,17 +3,17 @@
3 */ 3 */
4 (function(window) { 4 (function(window) {
5 window.lang = { 5 window.lang = {
6 - "systemName": "HC",  
7 - "systemSimpleName": "HC", 6 + "systemName": "西荣物业",
  7 + "systemSimpleName": "西荣物业",
8 "subSystemName": "小区管理系统", 8 "subSystemName": "小区管理系统",
9 "companyTeam": "java110团队", 9 "companyTeam": "java110团队",
10 - "welcome": "欢迎访问HC小区管理系统", 10 + "welcome": "欢迎访问西荣物业小区管理系统",
11 "signOut": "退出", 11 "signOut": "退出",
12 "signIn": "登录", 12 "signIn": "登录",
13 "register": "注册", 13 "register": "注册",
14 "moreCommunity": "更多小区", 14 "moreCommunity": "更多小区",
15 "moreMsg": "查看全部消息", 15 "moreMsg": "查看全部消息",
16 - "title": "HC小区管理系统", 16 + "title": "西荣物业小区管理系统",
17 "noAccount": "还没有账号? ", 17 "noAccount": "还没有账号? ",
18 "areyouhasaccount": "已经有账户了?", 18 "areyouhasaccount": "已经有账户了?",
19 "保存": "保存", 19 "保存": "保存",
@@ -1211,4 +1211,4 @@ @@ -1211,4 +1211,4 @@
1211 "addAttrSpec": { "字符串": "字符串", "否": "否", "小区属性": "小区属性", "规格名称": "规格名称", "说明": "说明", "必填": "必填", "设备属性": "设备属性", "查询显示": "查询显示", "展示": "展示", "是": "是", "值类型": "值类型", "整数": "整数", "停车场属性": "停车场属性", "添加属性配置": "添加属性配置", "属性表": "属性表", "房屋属性": "房屋属性", "业主属性": "业主属性", "车辆属性": "车辆属性", "金额": "金额", "规格类型": "规格类型" } 1211 "addAttrSpec": { "字符串": "字符串", "否": "否", "小区属性": "小区属性", "规格名称": "规格名称", "说明": "说明", "必填": "必填", "设备属性": "设备属性", "查询显示": "查询显示", "展示": "展示", "是": "是", "值类型": "值类型", "整数": "整数", "停车场属性": "停车场属性", "添加属性配置": "添加属性配置", "属性表": "属性表", "房屋属性": "房屋属性", "业主属性": "业主属性", "车辆属性": "车辆属性", "金额": "金额", "规格类型": "规格类型" }
1212 1212
1213 } 1213 }
1214 -})(window)  
1215 \ No newline at end of file 1214 \ No newline at end of file
  1215 +})(window)
readme.md
1 -# HC物业管理系统pcweb端(vue2+elementui) 1 +# 西荣物业物业管理系统pcweb端(vue2+elementui)
2 2
3 ## 说明 3 ## 说明
4 - HC小区管理系统是一套saas物业管理的系统,包括 房产、业主、 费用 (可以线上缴费)、报修(可以线上报修)、投诉建议、采购、巡检、停车、门径、道闸、监控、工作流、问卷和公告等功能。 4 + 西荣物业小区管理系统是一套saas物业管理的系统,包括 房产、业主、 费用 (可以线上缴费)、报修(可以线上报修)、投诉建议、采购、巡检、停车、门径、道闸、监控、工作流、问卷和公告等功能。
5 5
6 相关代码:<br/><br/> 6 相关代码:<br/><br/>
7 1、[物业系统前端](https://gitee.com/java110/MicroCommunityWeb) : 物业员工使用电脑端<br/> 7 1、[物业系统前端](https://gitee.com/java110/MicroCommunityWeb) : 物业员工使用电脑端<br/>
@@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@
11 11
12 ## 如何使用 12 ## 如何使用
13 13
14 -[操作手册](http://www.homecommunity.cn/pages/hc/addCommunity_cn.html) 14 +[操作手册](http://www.homecommunity.cn/pages/西荣物业/addCommunity_cn.html)
15 15
16 ## 产品 16 ## 产品
17 17
@@ -92,4 +92,4 @@ npm install . @@ -92,4 +92,4 @@ npm install .
92 92
93 您可以fork 代码后,commit后 pull request合并代码 93 您可以fork 代码后,commit后 pull request合并代码
94 94
95 -联系作者:17797173942(微信号)  
96 \ No newline at end of file 95 \ No newline at end of file
  96 +联系作者:17797173942(微信号)
src/api/community/cityAreaApi.js
@@ -6,7 +6,7 @@ export function getAreaTree() { @@ -6,7 +6,7 @@ export function getAreaTree() {
6 request({ 6 request({
7 url: '/area.queryAreaTree', 7 url: '/area.queryAreaTree',
8 method: 'get', 8 method: 'get',
9 - params: { hc: 1.8 } 9 + params: { 西荣物业: 1.8 }
10 }).then(response => { 10 }).then(response => {
11 const res = response.data 11 const res = response.data
12 12
@@ -29,7 +29,7 @@ export function getAreaDetail(params) { @@ -29,7 +29,7 @@ export function getAreaDetail(params) {
29 const res = response.data 29 const res = response.data
30 30
31 resolve(res) 31 resolve(res)
32 - 32 +
33 }).catch(error => { 33 }).catch(error => {
34 reject(error) 34 reject(error)
35 }) 35 })
@@ -97,4 +97,4 @@ export function deleteArea(data) { @@ -97,4 +97,4 @@ export function deleteArea(data) {
97 reject(error) 97 reject(error)
98 }) 98 })
99 }) 99 })
100 -}  
101 \ No newline at end of file 100 \ No newline at end of file
  101 +}
src/components/inspection/AInspectionRouteMap.vue
1 -<template> 1 +<template>
2 <div id="aInspectionRouteMap" class="map-container"></div> 2 <div id="aInspectionRouteMap" class="map-container"></div>
3 </template> 3 </template>
4 4
@@ -10,26 +10,12 @@ export default { @@ -10,26 +10,12 @@ export default {
10 data() { 10 data() {
11 return { 11 return {
12 map: null, 12 map: null,
13 - points: [] 13 + points: [],
  14 + markers: [],
  15 + polyline: null
14 } 16 }
15 }, 17 },
16 - async created() {  
17 - await this.loadQQMapScript()  
18 - },  
19 methods: { 18 methods: {
20 - loadQQMapScript() {  
21 - if (window.TMap) {  
22 - return Promise.resolve();  
23 - }  
24 -  
25 - return new Promise((resolve, reject) => {  
26 - const script = document.createElement('script');  
27 - script.src = `https://map.qq.com/api/gljs?v=1.exp&key=您的腾讯地图KEY`;  
28 - script.onload = resolve;  
29 - script.onerror = reject;  
30 - document.head.appendChild(script);  
31 - });  
32 - },  
33 async initMap(params) { 19 async initMap(params) {
34 try { 20 try {
35 const { data } = await listAdminInspectionRoutePoints({ 21 const { data } = await listAdminInspectionRoutePoints({
@@ -46,32 +32,53 @@ export default { @@ -46,32 +32,53 @@ export default {
46 initMapView() { 32 initMapView() {
47 if (!this.points || this.points.length === 0) return 33 if (!this.points || this.points.length === 0) return
48 34
49 - // 这里需要根据实际地图API实现地图初始化  
50 - // 示例代码,需要替换为实际地图API调用  
51 - console.log('Initialize map with points:', this.points) 35 + this.clearMap()
52 36
53 - // 示例:使用腾讯地图API  
54 - if (window.TMap) {  
55 - const center = new window.TMap.LatLng(this.points[0].lat, this.points[0].lng)  
56 - this.map = new window.TMap.Map(document.getElementById('aInspectionRouteMap'), {  
57 - center: center,  
58 - zoom: 17  
59 - }) 37 + const center = [this.points[0].lng, this.points[0].lat]
  38 + this.map = new window.AMap.Map(document.getElementById('aInspectionRouteMap'), {
  39 + center: center,
  40 + zoom: 17,
  41 + resizeEnable: true
  42 + })
60 43
61 - // 添加标记点  
62 - const markers = this.points.map(point => ({  
63 - position: new window.TMap.LatLng(point.lat, point.lng),  
64 - properties: {  
65 - title: point.inspectionName  
66 - }  
67 - })) 44 + const path = []
  45 + this.points.forEach(point => {
  46 + const marker = new window.AMap.Marker({
  47 + map: this.map,
  48 + position: [point.lng, point.lat],
  49 + title: point.inspectionName,
  50 + icon: new window.AMap.Icon({
  51 + size: new window.AMap.Size(25, 35),
  52 + imageSize: new window.AMap.Size(25, 35),
  53 + image: '/img/maper.png'
  54 + })
  55 + })
  56 + this.markers.push(marker)
  57 + path.push([point.lng, point.lat])
  58 + })
68 59
69 - new window.TMap.MultiMarker({ 60 + if (path.length > 1) {
  61 + this.polyline = new window.AMap.Polyline({
70 map: this.map, 62 map: this.map,
71 - geometries: markers 63 + path: path,
  64 + strokeColor: '#3777FF',
  65 + strokeWeight: 6,
  66 + strokeOpacity: 0.8
72 }) 67 })
73 } 68 }
  69 + },
  70 + clearMap() {
  71 + this.markers.forEach(m => m.setMap(null))
  72 + this.markers = []
  73 + if (this.polyline) { this.polyline.setMap(null); this.polyline = null }
  74 + if (this.map) {
  75 + this.map.destroy()
  76 + this.map = null
  77 + }
74 } 78 }
  79 + },
  80 + beforeDestroy() {
  81 + this.clearMap()
75 } 82 }
76 } 83 }
77 </script> 84 </script>
@@ -81,4 +88,4 @@ export default { @@ -81,4 +88,4 @@ export default {
81 height: 600px; 88 height: 600px;
82 width: 100%; 89 width: 100%;
83 } 90 }
84 -</style>  
85 \ No newline at end of file 91 \ No newline at end of file
  92 +</style>
src/components/inspection/AInspectionTaskMap.vue
1 -<template> 1 +<template>
2 <div id="aInspectionTaskMap" class="map-container"></div> 2 <div id="aInspectionTaskMap" class="map-container"></div>
3 </template> 3 </template>
4 4
@@ -10,13 +10,13 @@ export default { @@ -10,13 +10,13 @@ export default {
10 data() { 10 data() {
11 return { 11 return {
12 map: null, 12 map: null,
13 - points: [] 13 + points: [],
  14 + markers: []
14 } 15 }
15 }, 16 },
16 methods: { 17 methods: {
17 loadData(params) { 18 loadData(params) {
18 console.log(params) 19 console.log(params)
19 - //this.initMap(params)  
20 }, 20 },
21 async initMap(params) { 21 async initMap(params) {
22 try { 22 try {
@@ -35,50 +35,43 @@ export default { @@ -35,50 +35,43 @@ export default {
35 initMapView() { 35 initMapView() {
36 if (!this.points || this.points.length === 0) return 36 if (!this.points || this.points.length === 0) return
37 37
38 - // 这里需要根据实际地图API实现地图初始化  
39 - // 示例代码,需要替换为实际地图API调用  
40 - console.log('Initialize task map with points:', this.points)  
41 -  
42 - // 示例:使用腾讯地图API  
43 - if (window.TMap) {  
44 - const center = new window.TMap.LatLng(this.points[0].lat, this.points[0].lng)  
45 - this.map = new window.TMap.Map(document.getElementById('aInspectionTaskMap'), {  
46 - center: center,  
47 - zoom: 17 38 + this.clearMap()
  39 +
  40 + const center = [this.points[0].lng, this.points[0].lat]
  41 + this.map = new window.AMap.Map(document.getElementById('aInspectionTaskMap'), {
  42 + center: center,
  43 + zoom: 17,
  44 + resizeEnable: true
  45 + })
  46 +
  47 + this.points.forEach(point => {
  48 + const isDone = point.state === '20200405'
  49 + const icon = new window.AMap.Icon({
  50 + size: new window.AMap.Size(25, 35),
  51 + imageSize: new window.AMap.Size(25, 35),
  52 + image: isDone ? '/img/inspection_done.png' : '/img/inspection.png'
48 }) 53 })
49 -  
50 - // 添加标记点  
51 - const markers = this.points.map(point => ({  
52 - position: new window.TMap.LatLng(point.lat, point.lng),  
53 - properties: {  
54 - title: point.inspectionName,  
55 - status: point.state  
56 - }  
57 - }))  
58 -  
59 - new window.TMap.MultiMarker({ 54 +
  55 + const marker = new window.AMap.Marker({
60 map: this.map, 56 map: this.map,
61 - styles: {  
62 - normal: new window.TMap.MarkerStyle({  
63 - width: 25,  
64 - height: 35,  
65 - src: '/img/inspection.png',  
66 - anchor: { x: 16, y: 32 }  
67 - }),  
68 - done: new window.TMap.MarkerStyle({  
69 - width: 25,  
70 - height: 35,  
71 - src: '/img/inspection_done.png',  
72 - anchor: { x: 16, y: 32 }  
73 - })  
74 - },  
75 - geometries: markers.map(marker => ({  
76 - ...marker,  
77 - styleId: marker.properties.status === '20200405' ? 'done' : 'normal'  
78 - })) 57 + position: [point.lng, point.lat],
  58 + title: point.inspectionName,
  59 + icon: icon
79 }) 60 })
  61 + this.markers.push(marker)
  62 + })
  63 + },
  64 + clearMap() {
  65 + this.markers.forEach(m => m.setMap(null))
  66 + this.markers = []
  67 + if (this.map) {
  68 + this.map.destroy()
  69 + this.map = null
80 } 70 }
81 } 71 }
  72 + },
  73 + beforeDestroy() {
  74 + this.clearMap()
82 } 75 }
83 } 76 }
84 </script> 77 </script>
@@ -88,4 +81,4 @@ export default { @@ -88,4 +81,4 @@ export default {
88 height: 600px; 81 height: 600px;
89 width: 100%; 82 width: 100%;
90 } 83 }
91 -</style>  
92 \ No newline at end of file 84 \ No newline at end of file
  85 +</style>
src/components/inspection/addInspectionPoint.vue
@@ -61,13 +61,13 @@ @@ -61,13 +61,13 @@
61 <el-col :span="12"> 61 <el-col :span="12">
62 <el-form-item :label="$t('addInspectionPoint.lng')"> 62 <el-form-item :label="$t('addInspectionPoint.lng')">
63 <el-input v-model="addInspectionPointInfo.lng" :placeholder="$t('addInspectionPoint.placeholder.lng')" 63 <el-input v-model="addInspectionPointInfo.lng" :placeholder="$t('addInspectionPoint.placeholder.lng')"
64 - disabled /> 64 + />
65 </el-form-item> 65 </el-form-item>
66 </el-col> 66 </el-col>
67 <el-col :span="12"> 67 <el-col :span="12">
68 <el-form-item :label="$t('addInspectionPoint.lat')"> 68 <el-form-item :label="$t('addInspectionPoint.lat')">
69 <el-input v-model="addInspectionPointInfo.lat" :placeholder="$t('addInspectionPoint.placeholder.lat')" 69 <el-input v-model="addInspectionPointInfo.lat" :placeholder="$t('addInspectionPoint.placeholder.lat')"
70 - disabled /> 70 + />
71 </el-form-item> 71 </el-form-item>
72 </el-col> 72 </el-col>
73 </el-row> 73 </el-row>
src/components/inspection/editInspectionPoint.vue
@@ -60,13 +60,13 @@ @@ -60,13 +60,13 @@
60 <el-col :span="12"> 60 <el-col :span="12">
61 <el-form-item :label="$t('editInspectionPoint.lng')"> 61 <el-form-item :label="$t('editInspectionPoint.lng')">
62 <el-input v-model="editInspectionPointInfo.lng" :placeholder="$t('editInspectionPoint.placeholder.lng')" 62 <el-input v-model="editInspectionPointInfo.lng" :placeholder="$t('editInspectionPoint.placeholder.lng')"
63 - disabled /> 63 + />
64 </el-form-item> 64 </el-form-item>
65 </el-col> 65 </el-col>
66 <el-col :span="12"> 66 <el-col :span="12">
67 <el-form-item :label="$t('editInspectionPoint.lat')"> 67 <el-form-item :label="$t('editInspectionPoint.lat')">
68 <el-input v-model="editInspectionPointInfo.lat" :placeholder="$t('editInspectionPoint.placeholder.lat')" 68 <el-input v-model="editInspectionPointInfo.lat" :placeholder="$t('editInspectionPoint.placeholder.lat')"
69 - disabled /> 69 + />
70 </el-form-item> 70 </el-form-item>
71 </el-col> 71 </el-col>
72 </el-row> 72 </el-row>
src/components/inspection/inspectionRouteMap.vue
1 -<template> 1 +<template>
2 <div class="inspection-route-map-container"> 2 <div class="inspection-route-map-container">
3 <div id="inspectionRouteMap" style="width: 100%; height: 600px;"></div> 3 <div id="inspectionRouteMap" style="width: 100%; height: 600px;"></div>
4 </div> 4 </div>
@@ -14,50 +14,32 @@ export default { @@ -14,50 +14,32 @@ export default {
14 return { 14 return {
15 map: null, 15 map: null,
16 communityId: '', 16 communityId: '',
17 - routePoints: [] 17 + routePoints: [],
  18 + markers: [],
  19 + texts: [],
  20 + polylines: []
18 } 21 }
19 }, 22 },
20 async mounted() { 23 async mounted() {
21 this.communityId = getCommunityId() 24 this.communityId = getCommunityId()
22 - // 延迟初始化地图,确保DOM已经渲染  
23 }, 25 },
24 methods: { 26 methods: {
25 loadData(route) { 27 loadData(route) {
26 this.initMap() 28 this.initMap()
27 -  
28 this.loadRoute(route) 29 this.loadRoute(route)
29 }, 30 },
30 31
31 initMap() { 32 initMap() {
32 - // 若已有地图或图层,先清理避免重复初始化  
33 - if (this.markerLayer) {  
34 - this.markerLayer.setMap(null)  
35 - this.markerLayer = null  
36 - }  
37 - if (this.labelLayer) {  
38 - this.labelLayer.setMap(null)  
39 - this.labelLayer = null  
40 - }  
41 - if (this.polylineLayer) {  
42 - this.polylineLayer.setMap(null)  
43 - this.polylineLayer = null  
44 - }  
45 - if (this.map) {  
46 - this.map.destroy()  
47 - this.map = null  
48 - } 33 + this.clearAll()
49 34
50 - // 默认中心点(北京)  
51 - const center = new window.TMap.LatLng(39.916527, 116.397128) 35 + const center = [116.397128, 39.916527]
  36 + const container = document.getElementById('inspectionRouteMap')
  37 + if (!container) return
52 38
53 - // 创建地图实例  
54 - this.map = new window.TMap.Map(document.getElementById('inspectionRouteMap'), { 39 + this.map = new window.AMap.Map(container, {
55 center: center, 40 center: center,
56 zoom: 13, 41 zoom: 13,
57 - baseMap: {  
58 - type: 'vector',  
59 - features: ['base', 'building2d', 'point']  
60 - } 42 + resizeEnable: true
61 }) 43 })
62 }, 44 },
63 45
@@ -84,101 +66,92 @@ export default { @@ -84,101 +66,92 @@ export default {
84 addPointsToMap(points) { 66 addPointsToMap(points) {
85 if (!this.map || !points || points.length === 0) return 67 if (!this.map || !points || points.length === 0) return
86 68
87 - // 清除之前的标记  
88 - if (this.markerLayer) this.markerLayer.setMap(null)  
89 - if (this.labelLayer) this.labelLayer.setMap(null)  
90 - if (this.polylineLayer) this.polylineLayer.setMap(null) 69 + this.clearOverlays()
91 70
92 - const geometriesMarker = []  
93 - const geometriesLabel = []  
94 const path = [] 71 const path = []
95 72
96 points.forEach(point => { 73 points.forEach(point => {
97 if (!point.lat || !point.lng) return 74 if (!point.lat || !point.lng) return
98 75
99 - const position = new window.TMap.LatLng(point.lat, point.lng) 76 + const position = [point.lng, point.lat]
100 77
101 - // 添加标记  
102 - geometriesMarker.push({  
103 - id: point.inspectionId,  
104 - styleId: 'myStyle',  
105 - position: position 78 + const marker = new window.AMap.Marker({
  79 + map: this.map,
  80 + position: position,
  81 + icon: new window.AMap.Icon({
  82 + size: new window.AMap.Size(25, 35),
  83 + imageSize: new window.AMap.Size(25, 35),
  84 + image: '/img/maper.png'
  85 + })
106 }) 86 })
  87 + this.markers.push(marker)
107 88
108 - // 添加标签  
109 - geometriesLabel.push({  
110 - id: `label_${point.inspectionId}`,  
111 - styleId: 'label', 89 + const text = new window.AMap.Text({
  90 + map: this.map,
  91 + text: point.inspectionName,
112 position: position, 92 position: position,
113 - content: point.inspectionName 93 + offset: new window.AMap.Pixel(0, 15),
  94 + style: {
  95 + color: '#3777FF',
  96 + 'font-size': '12px',
  97 + 'background-color': 'rgba(255,255,255,0.8)',
  98 + 'padding': '2px 4px',
  99 + 'border-radius': '2px'
  100 + }
114 }) 101 })
  102 + this.texts.push(text)
115 103
116 - // 添加路径点  
117 path.push(position) 104 path.push(position)
118 }) 105 })
119 106
120 - // 创建标记图层  
121 - this.markerLayer = new window.TMap.MultiMarker({  
122 - map: this.map,  
123 - styles: {  
124 - "myStyle": new window.TMap.MarkerStyle({  
125 - width: 25,  
126 - height: 35,  
127 - src: '/img/maper.png',  
128 - anchor: { x: 32, y: 32 }  
129 - })  
130 - },  
131 - geometries: geometriesMarker  
132 - })  
133 -  
134 - // 创建标签图层  
135 - this.labelLayer = new window.TMap.MultiLabel({  
136 - map: this.map,  
137 - styles: {  
138 - 'label': new window.TMap.LabelStyle({  
139 - color: '#3777FF',  
140 - size: 20,  
141 - offset: { x: 0, y: 15 },  
142 - angle: 0,  
143 - alignment: 'center',  
144 - verticalAlignment: 'middle'  
145 - })  
146 - },  
147 - geometries: geometriesLabel  
148 - })  
149 -  
150 - // 创建路径图层  
151 - this.polylineLayer = new window.TMap.MultiPolyline({  
152 - map: this.map,  
153 - styles: {  
154 - 'style_blue': new window.TMap.PolylineStyle({  
155 - color: '#3777FF',  
156 - width: 6,  
157 - borderWidth: 5,  
158 - borderColor: '#FFF',  
159 - lineCap: 'butt'  
160 - })  
161 - },  
162 - geometries: [{  
163 - id: 'pl_1',  
164 - styleId: 'style_blue',  
165 - paths: path  
166 - }]  
167 - }) 107 + if (path.length > 1) {
  108 + // 外层(描边)
  109 + const outerPolyline = new window.AMap.Polyline({
  110 + map: this.map,
  111 + path: path,
  112 + strokeColor: '#FFF',
  113 + strokeWeight: 10,
  114 + strokeOpacity: 1,
  115 + lineJoin: 'round'
  116 + })
  117 + this.polylines.push(outerPolyline)
  118 +
  119 + // 内层(主线)
  120 + this.polylines.push(new window.AMap.Polyline({
  121 + map: this.map,
  122 + path: path,
  123 + strokeColor: '#3777FF',
  124 + strokeWeight: 6,
  125 + strokeOpacity: 0.9,
  126 + lineJoin: 'round'
  127 + }))
  128 + }
168 129
169 - // 如果有路径点,调整地图中心点和缩放级别  
170 if (path.length > 0) { 130 if (path.length > 0) {
171 this.map.setCenter(path[0]) 131 this.map.setCenter(path[0])
172 this.map.setZoom(16) 132 this.map.setZoom(16)
173 } 133 }
  134 + },
  135 +
  136 + clearAll() {
  137 + this.clearOverlays()
  138 + if (this.map) {
  139 + this.map.destroy()
  140 + this.map = null
  141 + }
  142 + },
  143 +
  144 + clearOverlays() {
  145 + this.markers.forEach(m => m.setMap(null))
  146 + this.markers = []
  147 + this.texts.forEach(t => t.setMap(null))
  148 + this.texts = []
  149 + this.polylines.forEach(p => p.setMap(null))
  150 + this.polylines = []
174 } 151 }
175 }, 152 },
176 beforeDestroy() { 153 beforeDestroy() {
177 - // 组件销毁时清除地图实例  
178 - if (this.map) {  
179 - this.map.destroy()  
180 - this.map = null  
181 - } 154 + this.clearAll()
182 } 155 }
183 } 156 }
184 </script> 157 </script>
@@ -188,4 +161,4 @@ export default { @@ -188,4 +161,4 @@ export default {
188 width: 100%; 161 width: 100%;
189 height: 100%; 162 height: 100%;
190 } 163 }
191 -</style>  
192 \ No newline at end of file 164 \ No newline at end of file
  165 +</style>
src/components/inspection/inspectionTaskMap.vue
1 -<template> 1 +<template>
2 <div class="inspection-task-map-container"> 2 <div class="inspection-task-map-container">
3 <div id="inspectionTaskMap" style="width: 100%; height: 600px;"></div> 3 <div id="inspectionTaskMap" style="width: 100%; height: 600px;"></div>
4 </div> 4 </div>
@@ -15,53 +15,31 @@ export default { @@ -15,53 +15,31 @@ export default {
15 map: null, 15 map: null,
16 communityId: '', 16 communityId: '',
17 taskPoints: [], 17 taskPoints: [],
18 - markerLayer: null,  
19 - labelLayer: null,  
20 - polylineLayer: null 18 + markers: [],
  19 + texts: [],
  20 + polylines: []
21 } 21 }
22 }, 22 },
23 mounted() { 23 mounted() {
24 this.communityId = getCommunityId() 24 this.communityId = getCommunityId()
25 - // 延迟初始化地图,确保DOM已经渲染  
26 }, 25 },
27 methods: { 26 methods: {
28 loadData(task) { 27 loadData(task) {
29 - console.log('loadData',task) 28 + console.log('loadData', task)
30 this.initMap() 29 this.initMap()
31 this.loadTask(task) 30 this.loadTask(task)
32 }, 31 },
33 initMap() { 32 initMap() {
34 - // 若已有地图或图层,先清理避免重复初始化  
35 - if (this.markerLayer) {  
36 - this.markerLayer.setMap(null)  
37 - this.markerLayer = null  
38 - }  
39 - if (this.labelLayer) {  
40 - this.labelLayer.setMap(null)  
41 - this.labelLayer = null  
42 - }  
43 - if (this.polylineLayer) {  
44 - this.polylineLayer.setMap(null)  
45 - this.polylineLayer = null  
46 - }  
47 - if (this.map) {  
48 - this.map.destroy()  
49 - this.map = null  
50 - }  
51 - console.log('initMap',this.map) 33 + this.clearAll()
52 34
53 - // 默认中心点(北京)  
54 - const center = new window.TMap.LatLng(39.916527, 116.397128)  
55 - console.log('center',center) 35 + const center = [116.397128, 39.916527]
  36 + const container = document.getElementById('inspectionTaskMap')
  37 + if (!container) return
56 38
57 - // 创建地图实例  
58 - this.map = new window.TMap.Map(document.getElementById('inspectionTaskMap'), { 39 + this.map = new window.AMap.Map(container, {
59 center: center, 40 center: center,
60 zoom: 13, 41 zoom: 13,
61 - baseMap: {  
62 - type: 'vector',  
63 - features: ['base', 'building2d', 'point']  
64 - } 42 + resizeEnable: true
65 }) 43 })
66 }, 44 },
67 45
@@ -88,133 +66,98 @@ export default { @@ -88,133 +66,98 @@ export default {
88 addPointsToMap(points) { 66 addPointsToMap(points) {
89 if (!this.map || !points || points.length === 0) return 67 if (!this.map || !points || points.length === 0) return
90 68
91 - // 清除之前的标记  
92 - if (this.markerLayer) this.markerLayer.setMap(null)  
93 - if (this.labelLayer) this.labelLayer.setMap(null)  
94 - if (this.polylineLayer) this.polylineLayer.setMap(null) 69 + this.clearOverlays()
95 70
96 - const geometriesMarker = []  
97 - const geometriesLabel = []  
98 const path = [] 71 const path = []
99 72
100 points.forEach(point => { 73 points.forEach(point => {
101 if (!point.lat || !point.lng) return 74 if (!point.lat || !point.lng) return
102 75
103 - const position = new window.TMap.LatLng(point.lat, point.lng) 76 + const position = [point.lng, point.lat]
  77 + const isDone = point.state === '20200405'
104 78
105 - // 确定状态对应的样式  
106 - const markerStyle = point.state === '20200405' ? 'myStyle_red' : 'myStyle'  
107 - const labelStyle = point.state === '20200405' ? 'label_red' : 'label'  
108 -  
109 - // 添加标记  
110 - geometriesMarker.push({  
111 - id: point.inspectionId,  
112 - styleId: markerStyle,  
113 - position: position 79 + // 标记
  80 + const markerIcon = new window.AMap.Icon({
  81 + size: new window.AMap.Size(25, 35),
  82 + imageSize: new window.AMap.Size(25, 35),
  83 + image: isDone ? '/img/inspection_do.png' : '/img/inspection.png'
  84 + })
  85 + const marker = new window.AMap.Marker({
  86 + map: this.map,
  87 + position: position,
  88 + icon: markerIcon
114 }) 89 })
  90 + this.markers.push(marker)
115 91
116 - // 添加标签  
117 - geometriesLabel.push({  
118 - id: `label_${point.inspectionId}`,  
119 - styleId: labelStyle, 92 + // 标签
  93 + const text = new window.AMap.Text({
  94 + map: this.map,
  95 + text: point.inspectionName,
120 position: position, 96 position: position,
121 - content: point.inspectionName 97 + offset: new window.AMap.Pixel(0, 15),
  98 + style: {
  99 + color: isDone ? '#CC0000' : '#3777FF',
  100 + 'font-size': '12px',
  101 + 'background-color': 'rgba(255,255,255,0.8)',
  102 + 'padding': '2px 4px',
  103 + 'border-radius': '2px'
  104 + }
122 }) 105 })
  106 + this.texts.push(text)
123 107
124 - // 添加路径点  
125 path.push(position) 108 path.push(position)
126 }) 109 })
127 110
128 - // 创建标记图层  
129 - this.markerLayer = new window.TMap.MultiMarker({  
130 - map: this.map,  
131 - styles: {  
132 - "myStyle": new window.TMap.MarkerStyle({  
133 - width: 25,  
134 - height: 35,  
135 - src: '/img/inspection.png',  
136 - anchor: { x: 32, y: 32 }  
137 - }),  
138 - "myStyle_red": new window.TMap.MarkerStyle({  
139 - width: 25,  
140 - height: 35,  
141 - src: '/img/inspection_do.png',  
142 - anchor: { x: 32, y: 32 }  
143 - })  
144 - },  
145 - geometries: geometriesMarker  
146 - })  
147 -  
148 - // 创建标签图层  
149 - this.labelLayer = new window.TMap.MultiLabel({  
150 - map: this.map,  
151 - styles: {  
152 - 'label': new window.TMap.LabelStyle({  
153 - color: '#3777FF',  
154 - size: 20,  
155 - offset: { x: 0, y: 15 },  
156 - angle: 0,  
157 - alignment: 'center',  
158 - verticalAlignment: 'middle'  
159 - }),  
160 - 'label_red': new window.TMap.LabelStyle({  
161 - color: '#CC0000',  
162 - size: 20,  
163 - offset: { x: 0, y: 15 },  
164 - angle: 0,  
165 - alignment: 'center',  
166 - verticalAlignment: 'middle'  
167 - })  
168 - },  
169 - geometries: geometriesLabel  
170 - })  
171 -  
172 - // 创建路径图层  
173 - this.polylineLayer = new window.TMap.MultiPolyline({  
174 - map: this.map,  
175 - styles: {  
176 - 'style_blue': new window.TMap.PolylineStyle({  
177 - color: '#3777FF',  
178 - width: 6,  
179 - borderWidth: 5,  
180 - borderColor: '#FFF',  
181 - lineCap: 'butt'  
182 - }),  
183 - 'style_red': new window.TMap.PolylineStyle({  
184 - color: '#CC0000',  
185 - width: 6,  
186 - borderWidth: 5,  
187 - borderColor: '#FFF',  
188 - lineCap: 'butt'  
189 - })  
190 - },  
191 - geometries: [  
192 - {  
193 - id: 'pl_1',  
194 - styleId: 'style_blue',  
195 - paths: path  
196 - },  
197 - {  
198 - id: 'pl_2',  
199 - styleId: 'style_red',  
200 - paths: path  
201 - }  
202 - ]  
203 - }) 111 + // 路径 - 双色双层折线模拟描边效果
  112 + if (path.length > 1) {
  113 + // 外层(描边)
  114 + const outerPolyline = new window.AMap.Polyline({
  115 + map: this.map,
  116 + path: path,
  117 + strokeColor: '#FFF',
  118 + strokeWeight: 10,
  119 + strokeOpacity: 1,
  120 + lineJoin: 'round'
  121 + })
  122 + this.polylines.push(outerPolyline)
  123 +
  124 + // 内层(主线)
  125 + const innerPolyline = new window.AMap.Polyline({
  126 + map: this.map,
  127 + path: path,
  128 + strokeColor: '#3777FF',
  129 + strokeWeight: 6,
  130 + strokeOpacity: 0.9,
  131 + lineJoin: 'round'
  132 + })
  133 + this.polylines.push(innerPolyline)
  134 + }
204 135
205 - // 如果有路径点,调整地图中心点和缩放级别  
206 if (path.length > 0) { 136 if (path.length > 0) {
207 this.map.setCenter(path[0]) 137 this.map.setCenter(path[0])
208 this.map.setZoom(16) 138 this.map.setZoom(16)
209 } 139 }
  140 + },
  141 +
  142 + clearAll() {
  143 + this.clearOverlays()
  144 + if (this.map) {
  145 + this.map.destroy()
  146 + this.map = null
  147 + }
  148 + },
  149 +
  150 + clearOverlays() {
  151 + this.markers.forEach(m => m.setMap(null))
  152 + this.markers = []
  153 + this.texts.forEach(t => t.setMap(null))
  154 + this.texts = []
  155 + this.polylines.forEach(p => p.setMap(null))
  156 + this.polylines = []
210 } 157 }
211 }, 158 },
212 beforeDestroy() { 159 beforeDestroy() {
213 - // 组件销毁时清除地图实例  
214 - if (this.map) {  
215 - this.map.destroy()  
216 - this.map = null  
217 - } 160 + this.clearAll()
218 } 161 }
219 } 162 }
220 </script> 163 </script>
@@ -224,4 +167,4 @@ export default { @@ -224,4 +167,4 @@ export default {
224 width: 100%; 167 width: 100%;
225 height: 100%; 168 height: 100%;
226 } 169 }
227 -</style>  
228 \ No newline at end of file 170 \ No newline at end of file
  171 +</style>
src/components/inspection/selectMapPos.vue
1 -<template> 1 +<template>
2 <div class="select-map-pos-container"> 2 <div class="select-map-pos-container">
3 - <div id="selectMap" style="width: 100%; height: 100%;"></div> 3 + <div id="selectMap" class="map-view"></div>
  4 + <div class="map-hint">点击地图选择位置,经纬度将自动填充</div>
4 </div> 5 </div>
5 </template> 6 </template>
6 7
@@ -24,118 +25,97 @@ export default { @@ -24,118 +25,97 @@ export default {
24 return { 25 return {
25 map: null, 26 map: null,
26 marker: null, 27 marker: null,
27 - communityId: '',  
28 - mapData: {  
29 - lat: 0,  
30 - lng: 0  
31 - } 28 + communityId: ''
32 } 29 }
33 }, 30 },
34 mounted() { 31 mounted() {
35 this.communityId = getCommunityId() 32 this.communityId = getCommunityId()
36 -  
37 }, 33 },
38 methods: { 34 methods: {
39 initMap(_data) { 35 initMap(_data) {
40 - // 清除现有地图  
41 - let _lng = 116.397128;  
42 - let _lat = 39.916527; 36 + let _lng = 116.397128
  37 + let _lat = 39.916527
43 38
44 - if (_data.lng) {  
45 - _lng = _data.lng;  
46 - } 39 + if (_data.lng) _lng = _data.lng
  40 + if (_data.lat) _lat = _data.lat
47 41
48 - if (_data.lat) {  
49 - _lat = _data.lat;  
50 - }  
51 - try {  
52 - if (this.map) {  
53 - this.map.destroy();  
54 - }  
55 - } catch (e) {  
56 - console.log(e) 42 + if (this.map) {
  43 + this.map.destroy()
  44 + this.map = null
57 } 45 }
  46 + this.marker = null
  47 +
  48 + const map = new window.AMap.Map('selectMap', {
  49 + center: [_lng, _lat],
  50 + zoom: 13,
  51 + resizeEnable: true
  52 + })
  53 +
  54 + const _this = this
  55 +
  56 + map.on('click', function (ev) {
  57 + const lng = ev.lnglat.getLng()
  58 + const lat = ev.lnglat.getLat()
58 59
  60 + _this.$emit('position-change', { lat, lng })
59 61
60 - let addMap = new window.TMap.Map('selectMap', {  
61 - center: new window.TMap.LatLng(_lat, _lng),  
62 - zoom: 13  
63 - });  
64 - // $that.addMapInfo.addMap = addMap;  
65 - let marker;  
66 - //添加监听事件 获取鼠标点击事件  
67 - let _this = this  
68 - addMap.on('click', function (event) {  
69 - console.log(event)  
70 - if (!marker) {  
71 - marker = new window.TMap.MultiMarker({  
72 - styleId: "marker",  
73 - position: event.latLng,  
74 - map: addMap,  
75 - id: "1",  
76 - }); 62 + if (!_this.marker) {
  63 + _this.marker = new window.AMap.Marker({
  64 + position: [lng, lat],
  65 + map: map,
  66 + icon: new window.AMap.Icon({
  67 + size: new window.AMap.Size(25, 35),
  68 + imageSize: new window.AMap.Size(25, 35),
  69 + image: '/img/maper.png'
  70 + })
  71 + })
  72 + } else {
  73 + _this.marker.setPosition([lng, lat])
77 } 74 }
78 - console.log(event)  
79 - //marker.setPosition(event.latLng);  
80 - _this.$emit('position-change', {  
81 - lat: event.latLng.lat,  
82 - lng: event.latLng.lng  
83 - }) 75 + })
84 76
85 - marker.updateGeometries([  
86 - {  
87 - "styleId": "marker",  
88 - "id": "1",  
89 - "position": event.latLng,  
90 - }  
91 - ])  
92 - });  
93 - //为地图注册click事件获取鼠标点击出的经纬度坐标  
94 -  
95 - this.map = addMap; 77 + this.map = map
  78 +
  79 + // 如果传入了已有坐标,在地图上显示标记
  80 + if (_data.lng && _data.lat) {
  81 + this.marker = new window.AMap.Marker({
  82 + map: this.map,
  83 + position: [_lng, _lat],
  84 + icon: new window.AMap.Icon({
  85 + size: new window.AMap.Size(25, 35),
  86 + imageSize: new window.AMap.Size(25, 35),
  87 + image: '/img/maper.png'
  88 + })
  89 + })
  90 + }
96 }, 91 },
97 92
98 -  
99 addMarker(position) { 93 addMarker(position) {
100 - // 清除现有标记  
101 if (this.marker) { 94 if (this.marker) {
102 this.marker.setMap(null) 95 this.marker.setMap(null)
  96 + this.marker = null
103 } 97 }
104 98
105 - // 创建新标记  
106 - let TMap = window.TMap  
107 -  
108 - this.marker = new TMap.MultiMarker({ 99 + this.marker = new window.AMap.Marker({
109 map: this.map, 100 map: this.map,
110 - styles: {  
111 - "marker": new TMap.MarkerStyle({  
112 - width: 25,  
113 - height: 35,  
114 - src: '/img/maper.png',  
115 - anchor: { x: 32, y: 32 }  
116 - })  
117 - },  
118 - geometries: [{  
119 - id: '1',  
120 - styleId: 'marker',  
121 - position: position  
122 - }] 101 + position: position,
  102 + icon: new window.AMap.Icon({
  103 + size: new window.AMap.Size(25, 35),
  104 + imageSize: new window.AMap.Size(25, 35),
  105 + image: '/img/maper.png'
  106 + })
123 }) 107 })
124 108
125 - // 移动地图中心到标记位置  
126 this.map.setCenter(position) 109 this.map.setCenter(position)
127 this.map.setZoom(16) 110 this.map.setZoom(16)
128 }, 111 },
129 112
130 updatePosition(lat, lng) { 113 updatePosition(lat, lng) {
131 if (!this.map) return 114 if (!this.map) return
132 -  
133 - const position = new window.TMap.LatLng(lat, lng)  
134 - this.addMarker(position) 115 + this.addMarker([lng, lat])
135 } 116 }
136 }, 117 },
137 beforeDestroy() { 118 beforeDestroy() {
138 - // 组件销毁时清除地图实例  
139 if (this.map) { 119 if (this.map) {
140 this.map.destroy() 120 this.map.destroy()
141 this.map = null 121 this.map = null
@@ -147,6 +127,16 @@ export default { @@ -147,6 +127,16 @@ export default {
147 <style scoped> 127 <style scoped>
148 .select-map-pos-container { 128 .select-map-pos-container {
149 width: 100%; 129 width: 100%;
150 - height: 100%;  
151 } 130 }
152 -</style>  
153 \ No newline at end of file 131 \ No newline at end of file
  132 +.map-view {
  133 + width: 100%;
  134 + height: 400px;
  135 + border: 1px solid #dcdfe6;
  136 + border-radius: 4px;
  137 +}
  138 +.map-hint {
  139 + font-size: 12px;
  140 + color: #909399;
  141 + margin-top: 6px;
  142 +}
  143 +</style>
src/components/store/InitData.vue
@@ -68,22 +68,22 @@ export default { @@ -68,22 +68,22 @@ export default {
68 try { 68 try {
69 // 保存token 69 // 保存token
70 this.$store.dispatch('user/setToken', user.token) 70 this.$store.dispatch('user/setToken', user.token)
71 - 71 +
72 // 验证是否有店铺 72 // 验证是否有店铺
73 await queryStoreByUser({ _uId: 'ccdd00opikookjuhyyttvhnnjuuu' }) 73 await queryStoreByUser({ _uId: 'ccdd00opikookjuhyyttvhnnjuuu' })
74 - 74 +
75 // 加载权限 75 // 加载权限
76 - const { datas } = await queryUserPrivilege({ a: 'HC' }) 76 + const { datas } = await queryUserPrivilege({ a: '西荣物业' })
77 const privileges = datas.map(item => item.pId) 77 const privileges = datas.map(item => item.pId)
78 this.$store.dispatch('user/setPrivileges', privileges) 78 this.$store.dispatch('user/setPrivileges', privileges)
79 - 79 +
80 // 加载小区信息 80 // 加载小区信息
81 const { communitys } = await listMyEnteredCommunitys({ 81 const { communitys } = await listMyEnteredCommunitys({
82 _uId: 'ccdd00opikookjuhyyttvhnnjuuu', 82 _uId: 'ccdd00opikookjuhyyttvhnnjuuu',
83 page: 1, 83 page: 1,
84 row: 3 84 row: 3
85 }) 85 })
86 - 86 +
87 if (communitys && communitys.length > 0) { 87 if (communitys && communitys.length > 0) {
88 this.$store.dispatch('community/setCurrentCommunity', communitys[0]) 88 this.$store.dispatch('community/setCurrentCommunity', communitys[0])
89 this.$store.dispatch('community/setCommunitys', communitys) 89 this.$store.dispatch('community/setCommunitys', communitys)
@@ -100,4 +100,4 @@ export default { @@ -100,4 +100,4 @@ export default {
100 this.initData() 100 this.initData()
101 } 101 }
102 } 102 }
103 -</script>  
104 \ No newline at end of file 103 \ No newline at end of file
  104 +</script>
src/components/system/ViewMap.vue
1 -<template> 1 +<template>
2 <el-dialog 2 <el-dialog
3 :title="$t('common.map')" 3 :title="$t('common.map')"
4 :visible.sync="viewMapInfo.showMap" 4 :visible.sync="viewMapInfo.showMap"
@@ -8,7 +8,7 @@ @@ -8,7 +8,7 @@
8 :close-on-press-escape="true" 8 :close-on-press-escape="true"
9 > 9 >
10 <div class="map-container"> 10 <div class="map-container">
11 - <div id="qqmapcontainer" style="width: 100%; height: 500px; background-color: antiquewhite;"></div> 11 + <div id="qqmapcontainer" style="width: 100%; height: 500px;"></div>
12 </div> 12 </div>
13 </el-dialog> 13 </el-dialog>
14 </template> 14 </template>
@@ -42,30 +42,23 @@ export default { @@ -42,30 +42,23 @@ export default {
42 this.$nextTick(() => this.initMap()) 42 this.$nextTick(() => this.initMap())
43 }, 43 },
44 initMap() { 44 initMap() {
45 - const center = new window.TMap.LatLng(this.viewMapInfo.lat, this.viewMapInfo.lng)  
46 const container = document.getElementById('qqmapcontainer') 45 const container = document.getElementById('qqmapcontainer')
47 - this.viewMapInfo.map = new window.TMap.Map(container, {  
48 - center, 46 + if (!container) return
  47 +
  48 + this.viewMapInfo.map = new window.AMap.Map(container, {
  49 + center: [this.viewMapInfo.lng, this.viewMapInfo.lat],
49 zoom: 17.2, 50 zoom: 17.2,
50 - viewMode: '2D' 51 + resizeEnable: true
51 }) 52 })
52 - new window.TMap.MultiMarker({  
53 - id: 'marker-layer', 53 +
  54 + new window.AMap.Marker({
  55 + position: [this.viewMapInfo.lng, this.viewMapInfo.lat],
54 map: this.viewMapInfo.map, 56 map: this.viewMapInfo.map,
55 - styles: {  
56 - marker: new window.TMap.MarkerStyle({  
57 - width: 25,  
58 - height: 35,  
59 - anchor: { x: 16, y: 32 },  
60 - src: 'https://mapapi.qq.com/web/lbs/javascriptGL/demo/img/markerDefault.png'  
61 - })  
62 - },  
63 - geometries: [{  
64 - id: 'demo',  
65 - styleId: 'marker',  
66 - position: new window.TMap.LatLng(this.viewMapInfo.lat, this.viewMapInfo.lng),  
67 - properties: { title: 'marker' }  
68 - }] 57 + icon: new window.AMap.Icon({
  58 + size: new window.AMap.Size(25, 35),
  59 + imageSize: new window.AMap.Size(25, 35),
  60 + image: 'https://webapi.amap.com/theme/v1.3/markers/n/mark_r.png'
  61 + })
69 }) 62 })
70 }, 63 },
71 closeMap() { 64 closeMap() {
@@ -76,7 +69,6 @@ export default { @@ -76,7 +69,6 @@ export default {
76 } 69 }
77 }, 70 },
78 wgs84togcj02(lng, lat) { 71 wgs84togcj02(lng, lat) {
79 - // Placeholder for coordinate conversion  
80 return { lon: lng, lat } 72 return { lon: lng, lat }
81 } 73 }
82 } 74 }
@@ -88,4 +80,4 @@ export default { @@ -88,4 +80,4 @@ export default {
88 width: 100%; 80 width: 100%;
89 height: 500px; 81 height: 500px;
90 } 82 }
91 -</style>  
92 \ No newline at end of file 83 \ No newline at end of file
  84 +</style>
src/router/index.js
@@ -17,6 +17,7 @@ import systemRouter from &#39;./systemRouter&#39; @@ -17,6 +17,7 @@ import systemRouter from &#39;./systemRouter&#39;
17 import communityRouter from './communityRouter' 17 import communityRouter from './communityRouter'
18 import workRouter from './workRouter' 18 import workRouter from './workRouter'
19 import feeRouter from './feeRouter' 19 import feeRouter from './feeRouter'
  20 +import propertyRouter from './propertyRouter'
20 21
21 Vue.use(VueRouter) 22 Vue.use(VueRouter)
22 23
@@ -724,6 +725,7 @@ const routes = [ @@ -724,6 +725,7 @@ const routes = [
724 ...communityRouter, 725 ...communityRouter,
725 ...workRouter, 726 ...workRouter,
726 ...feeRouter, 727 ...feeRouter,
  728 + ...propertyRouter,
727 // 其他子路由可以在这里添加 729 // 其他子路由可以在这里添加
728 ] 730 ]
729 }, 731 },
src/views/layout/layout.vue
@@ -3,7 +3,7 @@ @@ -3,7 +3,7 @@
3 <!-- 顶部导航 --> 3 <!-- 顶部导航 -->
4 <el-header height="60px" class="app-header"> 4 <el-header height="60px" class="app-header">
5 <div class="header-left"> 5 <div class="header-left">
6 - <div class="logo" @click="_toIndex">{{ systemInfo.systemSimpleTitle }}</div> 6 + <div @click="_toIndex">{{ systemInfo.systemSimpleTitle }}</div>
7 <el-menu mode="horizontal" :default-active="activeMenu" class="header-menu" background-color="#1e2132" 7 <el-menu mode="horizontal" :default-active="activeMenu" class="header-menu" background-color="#1e2132"
8 text-color="#fff" active-text-color="#409EFF"> 8 text-color="#fff" active-text-color="#409EFF">
9 <template v-for="(item, index) in catalogs"> 9 <template v-for="(item, index) in catalogs">
@@ -685,4 +685,4 @@ export default { @@ -685,4 +685,4 @@ export default {
685 bottom: 0; 685 bottom: 0;
686 width: 100px; 686 width: 100px;
687 } 687 }
688 -</style>  
689 \ No newline at end of file 688 \ No newline at end of file
  689 +</style>
src/views/user/login/Login.vue
1 -<template>  
2 - <div class="login-container">  
3 - <div class="login-card">  
4 - <div class="login-title" v-if="logo">  
5 - <img :src="logo" alt="logo">  
6 - </div>  
7 - <el-form :model="loginForm" :rules="rules" ref="loginForm">  
8 - <el-form-item prop="username">  
9 - <el-input v-model="loginForm.username" :placeholder="$t('login.usernamePlaceholder')"></el-input>  
10 - </el-form-item>  
11 - <el-form-item prop="passwd">  
12 - <el-input v-model="loginForm.passwd" type="password" :placeholder="$t('login.passwordPlaceholder')"></el-input>  
13 - </el-form-item>  
14 - <el-form-item prop="validateCode" class="captcha-item">  
15 - <div class="captcha-container">  
16 - <el-input v-model="loginForm.validateCode" :placeholder="$t('login.captchaPlaceholder')"></el-input>  
17 - <img :src="captchaUrl" @click="refreshCaptcha" class="captcha-img" alt="验证码"> 1 +<template>
  2 + <div class="login-wrapper">
  3 + <!-- 左侧品牌面板 -->
  4 + <div class="login-brand">
  5 + <div class="brand-overlay"></div>
  6 + <div class="brand-content">
  7 + <h1 class="brand-title">西荣物业</h1>
  8 + <p class="brand-subtitle">智慧社区管理平台</p>
  9 + <div class="brand-features">
  10 + <div class="feature-item">
  11 + <i class="el-icon-s-home"></i>
  12 + <span>智能物业管理</span>
  13 + </div>
  14 + <div class="feature-item">
  15 + <i class="el-icon-s-data"></i>
  16 + <span>数据驱动决策</span>
18 </div> 17 </div>
19 - </el-form-item>  
20 - <el-form-item>  
21 - <el-button type="primary" @click="submitForm('loginForm')" :loading="loading">{{ $t('login.login')  
22 - }}</el-button>  
23 - </el-form-item>  
24 - </el-form>  
25 - <!-- Add a white line and copyright info below the form -->  
26 - <div class="divider"></div>  
27 - <div class="copyright">©2020-2026 <span v-html="companyName"></span></div> 18 + <div class="feature-item">
  19 + <i class="el-icon-s-custom"></i>
  20 + <span>高效社区服务</span>
  21 + </div>
  22 + </div>
  23 + </div>
  24 + <div class="brand-footer">©2020-2026 <span v-html="companyName"></span></div>
28 </div> 25 </div>
29 - <select-login-user ref="selectLoginUserRef" @select="handleSelect"></select-login-user> 26 +
  27 + <!-- 右侧登录面板 -->
  28 + <div class="login-form-panel">
  29 + <div class="form-card">
  30 + <h2 class="form-title">欢迎登录</h2>
  31 + <p class="form-desc">请输入您的账号信息</p>
  32 +
  33 + <el-form
  34 + :model="loginForm"
  35 + :rules="rules"
  36 + ref="loginForm"
  37 + class="login-form"
  38 + @submit.native.prevent
  39 + >
  40 + <el-form-item prop="username">
  41 + <el-input
  42 + v-model="loginForm.username"
  43 + :placeholder="$t('login.usernamePlaceholder')"
  44 + prefix-icon="el-icon-user"
  45 + size="medium"
  46 + />
  47 + </el-form-item>
  48 +
  49 + <el-form-item prop="passwd">
  50 + <el-input
  51 + v-model="loginForm.passwd"
  52 + type="password"
  53 + :placeholder="$t('login.passwordPlaceholder')"
  54 + prefix-icon="el-icon-lock"
  55 + size="medium"
  56 + @keyup.enter.native="submitForm('loginForm')"
  57 + />
  58 + </el-form-item>
  59 +
  60 + <el-form-item prop="validateCode">
  61 + <div class="captcha-row">
  62 + <el-input
  63 + v-model="loginForm.validateCode"
  64 + :placeholder="$t('login.captchaPlaceholder')"
  65 + prefix-icon="el-icon-picture-outline"
  66 + size="medium"
  67 + class="captcha-input"
  68 + @keyup.enter.native="submitForm('loginForm')"
  69 + />
  70 + <img
  71 + :src="captchaUrl"
  72 + @click="refreshCaptcha"
  73 + class="captcha-img"
  74 + title="点击刷新验证码"
  75 + alt="验证码"
  76 + />
  77 + </div>
  78 + </el-form-item>
  79 +
  80 + <el-form-item>
  81 + <el-button
  82 + type="primary"
  83 + @click="submitForm('loginForm')"
  84 + :loading="loading"
  85 + class="login-btn"
  86 + size="medium"
  87 + >
  88 + {{ loading ? '登录中...' : $t('login.login') }}
  89 + </el-button>
  90 + </el-form-item>
  91 + </el-form>
  92 + </div>
  93 + </div>
  94 +
  95 + <select-login-user ref="selectLoginUserRef" @select="handleSelect" />
30 </div> 96 </div>
31 </template> 97 </template>
32 98
33 <script> 99 <script>
34 import { login, getCaptcha, _loadStaffPrivileges } from '@/api/user/loginApi'; 100 import { login, getCaptcha, _loadStaffPrivileges } from '@/api/user/loginApi';
35 import { _loadCommunityInfo } from '@/api/community/communityApi'; 101 import { _loadCommunityInfo } from '@/api/community/communityApi';
36 -import {listSystemInfo} from '@/api/system/systemInfoManageApi' 102 +import { listSystemInfo } from '@/api/system/systemInfoManageApi';
37 import selectLoginUser from '@/components/user/selectLoginUser.vue'; 103 import selectLoginUser from '@/components/user/selectLoginUser.vue';
38 104
39 -  
40 export default { 105 export default {
41 name: 'Login', 106 name: 'Login',
  107 + components: { selectLoginUser },
42 data() { 108 data() {
43 return { 109 return {
44 - logo: '',  
45 - companyName:'', 110 + companyName: '',
46 loginForm: { 111 loginForm: {
47 username: '', 112 username: '',
48 passwd: '', 113 passwd: '',
@@ -65,58 +130,54 @@ export default { @@ -65,58 +130,54 @@ export default {
65 }, 130 },
66 created() { 131 created() {
67 localStorage.clear(); 132 localStorage.clear();
68 - this.getSystemInfo() 133 + this.getSystemInfo();
69 setTimeout(() => { 134 setTimeout(() => {
70 this.refreshCaptcha(); 135 this.refreshCaptcha();
71 }, 1000); 136 }, 1000);
72 -  
73 - },  
74 - components: {  
75 - selectLoginUser  
76 }, 137 },
77 methods: { 138 methods: {
78 async getSystemInfo() { 139 async getSystemInfo() {
79 - const { data } = await listSystemInfo({ page: 1, row: 1 });  
80 - this.logo = data[0].logoUrl  
81 - this.companyName = data[0].companyName 140 + try {
  141 + const { data } = await listSystemInfo({ page: 1, row: 1 });
  142 + this.companyName = data[0].companyName;
  143 + } catch (e) {
  144 + console.error('获取系统信息失败', e);
  145 + }
82 }, 146 },
83 async submitForm(formName) { 147 async submitForm(formName) {
84 this.$refs[formName].validate(async (valid) => { 148 this.$refs[formName].validate(async (valid) => {
85 - if (valid) {  
86 - this.loading = true;  
87 - try {  
88 - const { data } = await login(this.loginForm).catch(error => {  
89 - this.$message.error(error);  
90 - this.refreshCaptcha();  
91 - return { data: [] };  
92 - });  
93 - if (!data || data.length == 0) {  
94 - return;  
95 - }  
96 -  
97 - if (data && data.length > 1) {  
98 - this.$refs.selectLoginUserRef.openDialog(data);  
99 - return;  
100 - }  
101 - this.handleSelect(data[0]);  
102 - } catch (error) {  
103 - console.error('登录失败:', error); 149 + if (!valid) return false;
  150 + this.loading = true;
  151 + try {
  152 + const { data } = await login(this.loginForm).catch((error) => {
  153 + this.$message.error(error);
104 this.refreshCaptcha(); 154 this.refreshCaptcha();
105 - } finally { 155 + return { data: [] };
  156 + });
  157 + if (!data || data.length === 0) {
106 this.loading = false; 158 this.loading = false;
  159 + return;
107 } 160 }
108 - } else {  
109 - return false; 161 + if (data.length > 1) {
  162 + this.$refs.selectLoginUserRef.openDialog(data);
  163 + this.loading = false;
  164 + return;
  165 + }
  166 + this.handleSelect(data[0]);
  167 + } catch (error) {
  168 + console.error('登录失败:', error);
  169 + this.refreshCaptcha();
  170 + this.loading = false;
110 } 171 }
111 }); 172 });
112 }, 173 },
113 async handleSelect(_userData) { 174 async handleSelect(_userData) {
114 localStorage.setItem('token', _userData.token); 175 localStorage.setItem('token', _userData.token);
115 - let _user = { 176 + const _user = {
116 userId: _userData.userId, 177 userId: _userData.userId,
117 name: _userData.name, 178 name: _userData.name,
118 tel: _userData.tel 179 tel: _userData.tel
119 - } 180 + };
120 localStorage.setItem('user', JSON.stringify(_user)); 181 localStorage.setItem('user', JSON.stringify(_user));
121 await _loadStaffPrivileges(); 182 await _loadStaffPrivileges();
122 await _loadCommunityInfo(); 183 await _loadCommunityInfo();
@@ -125,7 +186,6 @@ export default { @@ -125,7 +186,6 @@ export default {
125 async refreshCaptcha() { 186 async refreshCaptcha() {
126 try { 187 try {
127 const res = await getCaptcha(); 188 const res = await getCaptcha();
128 - console.log(res);  
129 this.captchaUrl = res; 189 this.captchaUrl = res;
130 } catch (error) { 190 } catch (error) {
131 console.error('获取验证码失败:', error); 191 console.error('获取验证码失败:', error);
@@ -137,99 +197,279 @@ export default { @@ -137,99 +197,279 @@ export default {
137 </script> 197 </script>
138 198
139 <style scoped> 199 <style scoped>
140 -.login-container { 200 +.login-wrapper {
141 display: flex; 201 display: flex;
142 - justify-content: center;  
143 - align-items: center;  
144 height: 100vh; 202 height: 100vh;
145 - background: url('/img/login-bg_x.png') no-repeat center center;  
146 - background-size: cover; 203 + overflow: hidden;
  204 + font-family: 'Helvetica Neue', 'PingFang SC', 'Microsoft YaHei', sans-serif;
  205 +}
  206 +
  207 +/* ===== 左侧品牌面板 ===== */
  208 +.login-brand {
  209 + width: 42%;
147 position: relative; 210 position: relative;
  211 + background: linear-gradient(135deg, #0c2646 0%, #1a4a7a 40%, #1e6eb8 100%);
  212 + display: flex;
  213 + flex-direction: column;
  214 + justify-content: center;
  215 + align-items: center;
148 overflow: hidden; 216 overflow: hidden;
149 } 217 }
150 218
151 -.login-card {  
152 - width: 300px;  
153 - padding: 20px;  
154 - background-color: rgba(0, 0, 0, 0.5);  
155 - border-radius: 4px; 219 +.brand-overlay {
156 position: absolute; 220 position: absolute;
157 - left: 50%;  
158 - top: 35%;  
159 - margin: -150px 0 0 -150px;  
160 - z-index: 99;  
161 - text-align: center;  
162 - padding: 30px;  
163 - box-shadow: 0 4px 10px rgba(0, 0, 0, 0.3); 221 + inset: 0;
  222 + background:
  223 + radial-gradient(ellipse at 20% 50%, rgba(255, 255, 255, 0.06) 0%, transparent 60%),
  224 + radial-gradient(ellipse at 80% 80%, rgba(30, 159, 255, 0.15) 0%, transparent 50%);
164 } 225 }
165 226
166 -.login-card .login-title { 227 +/* 装饰圆环 */
  228 +.login-brand::before {
  229 + content: '';
  230 + position: absolute;
  231 + width: 600px;
  232 + height: 600px;
  233 + border-radius: 50%;
  234 + border: 1px solid rgba(255, 255, 255, 0.06);
  235 + top: -200px;
  236 + right: -200px;
  237 +}
  238 +
  239 +.login-brand::after {
  240 + content: '';
  241 + position: absolute;
  242 + width: 400px;
  243 + height: 400px;
  244 + border-radius: 50%;
  245 + border: 1px solid rgba(255, 255, 255, 0.04);
  246 + bottom: -100px;
  247 + left: -100px;
  248 +}
  249 +
  250 +.brand-content {
  251 + position: relative;
  252 + z-index: 2;
  253 + text-align: center;
167 color: #fff; 254 color: #fff;
  255 + padding: 0 60px;
  256 +}
  257 +
  258 +.brand-title {
  259 + font-size: 42px;
  260 + font-weight: 700;
  261 + letter-spacing: 8px;
  262 + margin: 0 0 12px 0;
  263 + text-shadow: 0 2px 12px rgba(0, 0, 0, 0.3);
  264 +}
  265 +
  266 +.brand-subtitle {
  267 + font-size: 16px;
  268 + font-weight: 300;
  269 + letter-spacing: 4px;
  270 + opacity: 0.8;
  271 + margin: 0 0 48px 0;
  272 +}
  273 +
  274 +.brand-features {
  275 + display: flex;
  276 + flex-direction: column;
  277 + gap: 20px;
  278 + text-align: left;
  279 +}
  280 +
  281 +.feature-item {
  282 + display: flex;
  283 + align-items: center;
  284 + gap: 14px;
  285 + font-size: 14px;
  286 + font-weight: 300;
  287 + opacity: 0.75;
  288 + letter-spacing: 1px;
  289 + transition: opacity 0.3s;
  290 +}
  291 +
  292 +.feature-item:hover {
  293 + opacity: 1;
  294 +}
  295 +
  296 +.feature-item i {
  297 + font-size: 20px;
  298 + width: 36px;
  299 + height: 36px;
  300 + line-height: 36px;
168 text-align: center; 301 text-align: center;
169 - font-size: 48px; 302 + background: rgba(255, 255, 255, 0.1);
  303 + border-radius: 8px;
  304 + backdrop-filter: blur(4px);
170 } 305 }
171 306
172 -.el-form-item {  
173 - margin-bottom: 20px; 307 +.brand-footer {
  308 + position: absolute;
  309 + bottom: 32px;
  310 + z-index: 2;
  311 + color: rgba(255, 255, 255, 0.45);
  312 + font-size: 12px;
  313 + letter-spacing: 1px;
174 } 314 }
175 315
176 -.el-input__inner { 316 +/* ===== 右侧登录面板 ===== */
  317 +.login-form-panel {
  318 + flex: 1;
  319 + display: flex;
  320 + justify-content: center;
  321 + align-items: center;
  322 + background: #f5f7fa;
  323 + position: relative;
  324 +}
  325 +
  326 +/* 面板装饰 */
  327 +.login-form-panel::before {
  328 + content: '';
  329 + position: absolute;
  330 + top: 60px;
  331 + right: 80px;
  332 + width: 120px;
  333 + height: 120px;
  334 + background: linear-gradient(135deg, rgba(30, 110, 184, 0.04) 0%, rgba(30, 110, 184, 0.01) 100%);
  335 + border-radius: 24px;
  336 + transform: rotate(12deg);
  337 +}
  338 +
  339 +.login-form-panel::after {
  340 + content: '';
  341 + position: absolute;
  342 + bottom: 80px;
  343 + left: 60px;
  344 + width: 80px;
  345 + height: 80px;
  346 + background: linear-gradient(135deg, rgba(30, 110, 184, 0.03) 0%, rgba(30, 110, 184, 0.01) 100%);
  347 + border-radius: 16px;
  348 + transform: rotate(-8deg);
  349 +}
  350 +
  351 +.form-card {
  352 + position: relative;
  353 + z-index: 1;
  354 + width: 400px;
  355 + padding: 48px 44px 40px;
177 background: #fff; 356 background: #fff;
178 - border: none;  
179 - border-radius: 5px;  
180 - color: #333;  
181 - height: 40px; 357 + border-radius: 16px;
  358 + box-shadow:
  359 + 0 4px 24px rgba(0, 0, 0, 0.04),
  360 + 0 16px 48px rgba(0, 0, 0, 0.04);
  361 +}
  362 +
  363 +.form-title {
  364 + font-size: 26px;
  365 + font-weight: 600;
  366 + color: #1a1a2e;
  367 + margin: 0 0 8px 0;
  368 + letter-spacing: 1px;
  369 +}
  370 +
  371 +.form-desc {
  372 + font-size: 14px;
  373 + color: #999;
  374 + margin: 0 0 36px 0;
  375 +}
  376 +
  377 +.login-form .el-form-item {
  378 + margin-bottom: 22px;
  379 +}
  380 +
  381 +.login-form >>> .el-input__inner {
  382 + border: 1px solid #e4e7ed;
  383 + border-radius: 8px;
  384 + height: 44px;
  385 + line-height: 44px;
  386 + background: #fafbfc;
  387 + transition: all 0.3s;
  388 + font-size: 14px;
  389 +}
  390 +
  391 +.login-form >>> .el-input__inner:focus,
  392 +.login-form >>> .el-input__inner:hover {
  393 + border-color: #1e6eb8;
  394 + background: #fff;
  395 + box-shadow: 0 0 0 3px rgba(30, 110, 184, 0.06);
  396 +}
  397 +
  398 +.login-form >>> .el-input__prefix {
  399 + color: #b0b8c4;
  400 + line-height: 44px;
182 } 401 }
183 402
184 -.captcha-container { 403 +.login-form >>> .el-input--prefix .el-input__inner {
  404 + padding-left: 38px;
  405 +}
  406 +
  407 +.captcha-row {
185 display: flex; 408 display: flex;
  409 + gap: 12px;
186 align-items: center; 410 align-items: center;
187 - gap: 10px;  
188 } 411 }
189 412
190 -.captcha-item .el-input {  
191 - width: 70%;  
192 - height: 38px;  
193 - line-height: 1.3;  
194 - border-width: 1px;  
195 - border-style: solid;  
196 - background-color: #fff;  
197 - border-radius: 2px; 413 +.captcha-input {
  414 + flex: 1;
198 } 415 }
199 416
200 .captcha-img { 417 .captcha-img {
201 - height: 40px; 418 + height: 44px;
  419 + width: 120px;
  420 + border-radius: 8px;
202 cursor: pointer; 421 cursor: pointer;
203 - border-radius: 5px; 422 + border: 1px solid #e4e7ed;
  423 + transition: all 0.3s;
  424 + object-fit: cover;
  425 +}
  426 +
  427 +.captcha-img:hover {
  428 + border-color: #1e6eb8;
  429 + box-shadow: 0 0 0 3px rgba(30, 110, 184, 0.08);
204 } 430 }
205 431
206 -.el-button--primary { 432 +.login-btn {
207 width: 100%; 433 width: 100%;
208 - background: #1E9FFF; 434 + height: 46px;
  435 + border-radius: 8px;
  436 + font-size: 16px;
  437 + letter-spacing: 4px;
209 border: none; 438 border: none;
210 - border-radius: 100px;  
211 - font-size: 14px;  
212 - height: 38px; 439 + background: linear-gradient(135deg, #1e6eb8 0%, #155d9e 100%);
  440 + transition: all 0.3s;
  441 + margin-top: 4px;
213 } 442 }
214 443
215 -.el-button--primary:hover {  
216 - opacity: 0.8;  
217 - color: #fff; 444 +.login-btn:hover {
  445 + background: linear-gradient(135deg, #2580cc 0%, #1a6aaf 100%);
  446 + box-shadow: 0 6px 20px rgba(30, 110, 184, 0.35);
  447 + transform: translateY(-1px);
218 } 448 }
219 449
220 -/* Style for the white line */  
221 -.divider {  
222 - width: 100%;  
223 - height: 1px;  
224 - background-color: #fff;  
225 - margin: 10px 0; 450 +.login-btn:active {
  451 + transform: translateY(0);
226 } 452 }
227 453
228 -/* Style for the copyright text */  
229 -.copyright {  
230 - color: #fff;  
231 - font-size: 14px;  
232 - text-align: center;  
233 - margin-top: 10px; 454 +.login-btn.is-loading {
  455 + background: linear-gradient(135deg, #1e6eb8 0%, #155d9e 100%);
  456 +}
  457 +
  458 +/* ===== 响应式 ===== */
  459 +@media (max-width: 768px) {
  460 + .login-brand {
  461 + display: none;
  462 + }
  463 +
  464 + .form-card {
  465 + width: 90%;
  466 + max-width: 400px;
  467 + padding: 36px 28px 30px;
  468 + }
  469 +
  470 + .login-form-panel::before,
  471 + .login-form-panel::after {
  472 + display: none;
  473 + }
234 } 474 }
235 -</style>  
236 \ No newline at end of file 475 \ No newline at end of file
  476 +</style>
src/views/user/login/LoginLang.js
@@ -5,7 +5,7 @@ export const messages = { @@ -5,7 +5,7 @@ export const messages = {
5 en: { 5 en: {
6 ...enLocale, 6 ...enLocale,
7 login: { 7 login: {
8 - title: 'HC Smart Community', 8 + title: '西荣物业 Smart Community',
9 username: 'Username', 9 username: 'Username',
10 password: 'Password', 10 password: 'Password',
11 captcha: 'Verification Code', 11 captcha: 'Verification Code',
@@ -23,7 +23,7 @@ export const messages = { @@ -23,7 +23,7 @@ export const messages = {
23 zh: { 23 zh: {
24 ...zhLocale, 24 ...zhLocale,
25 login: { 25 login: {
26 - title: 'HC智慧社区', 26 + title: '西荣物业智慧社区',
27 username: '用户名', 27 username: '用户名',
28 password: '密码', 28 password: '密码',
29 captcha: '验证码', 29 captcha: '验证码',
@@ -38,4 +38,4 @@ export const messages = { @@ -38,4 +38,4 @@ export const messages = {
38 relCdName:'角色' 38 relCdName:'角色'
39 } 39 }
40 } 40 }
41 -}  
42 \ No newline at end of file 41 \ No newline at end of file
  42 +}
vue.config.js
1 module.exports = { 1 module.exports = {
  2 + chainWebpack: config => {
  3 + config.plugin('html').tap(args => {
  4 + args[0].title = '西荣物业'
  5 + return args
  6 + })
  7 + },
2 devServer: { 8 devServer: {
3 port: 3000, // 设置开发服务器端口 9 port: 3000, // 设置开发服务器端口
4 open: true, // 自动打开浏览器 10 open: true, // 自动打开浏览器
5 proxy: { 11 proxy: {
6 - '/app': {  
7 - target: 'https://demo.homecommunity.cn/app', // 后端API地址  
8 - changeOrigin: true,  
9 - pathRewrite: {  
10 - '^/app': ''  
11 - }  
12 - },  
13 - '/callComponent': {  
14 - target: 'https://demo.homecommunity.cn/callComponent', // 后端API地址  
15 - changeOrigin: true,  
16 - pathRewrite: {  
17 - '^/callComponent': ''  
18 - }  
19 - }  
20 // '/app': { 12 // '/app': {
21 - // target: 'http://localhost:8008/app', // 后端API地址 13 + // target: 'https://demo.homecommunity.cn/app', // 后端API地址
22 // changeOrigin: true, 14 // changeOrigin: true,
23 // pathRewrite: { 15 // pathRewrite: {
24 // '^/app': '' 16 // '^/app': ''
25 // } 17 // }
26 // }, 18 // },
27 // '/callComponent': { 19 // '/callComponent': {
28 - // target: 'http://localhost:8008/callComponent', // 后端API地址 20 + // target: 'https://demo.homecommunity.cn/callComponent', // 后端API地址
29 // changeOrigin: true, 21 // changeOrigin: true,
30 // pathRewrite: { 22 // pathRewrite: {
31 // '^/callComponent': '' 23 // '^/callComponent': ''
32 // } 24 // }
33 // } 25 // }
  26 + '/app': {
  27 + target: 'http://localhost:8008/app', // 后端API地址
  28 + changeOrigin: true,
  29 + pathRewrite: {
  30 + '^/app': ''
  31 + }
  32 + },
  33 + '/callComponent': {
  34 + target: 'http://localhost:8008/callComponent', // 后端API地址
  35 + changeOrigin: true,
  36 + pathRewrite: {
  37 + '^/callComponent': ''
  38 + }
  39 + }
34 }, 40 },
35 // 关键:禁止开发服务器对静态资源添加 hash 41 // 关键:禁止开发服务器对静态资源添加 hash
36 historyApiFallback: { 42 historyApiFallback: {
@@ -41,4 +47,4 @@ module.exports = { @@ -41,4 +47,4 @@ module.exports = {
41 ] 47 ]
42 } 48 }
43 } 49 }
44 -}  
45 \ No newline at end of file 50 \ No newline at end of file
  51 +}