four
This commit is contained in:
parent
94725edb22
commit
90f7127318
358
package-lock.json
generated
358
package-lock.json
generated
|
@ -10,6 +10,7 @@
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@infectoone/vue-ganttastic": "^2.3.2",
|
"@infectoone/vue-ganttastic": "^2.3.2",
|
||||||
"@pureadmin/utils": "^2.5.0",
|
"@pureadmin/utils": "^2.5.0",
|
||||||
|
"@vueuse/core": "^12.4.0",
|
||||||
"axios": "^1.7.7",
|
"axios": "^1.7.7",
|
||||||
"core-js": "^3.8.3",
|
"core-js": "^3.8.3",
|
||||||
"echarts": "^5.5.1",
|
"echarts": "^5.5.1",
|
||||||
|
@ -1909,6 +1910,94 @@
|
||||||
"vue": "^3.2.40"
|
"vue": "^3.2.40"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/@infectoone/vue-ganttastic/node_modules/@types/web-bluetooth": {
|
||||||
|
"version": "0.0.16",
|
||||||
|
"resolved": "https://registry.npmmirror.com/@types/web-bluetooth/-/web-bluetooth-0.0.16.tgz",
|
||||||
|
"integrity": "sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ=="
|
||||||
|
},
|
||||||
|
"node_modules/@infectoone/vue-ganttastic/node_modules/@vueuse/core": {
|
||||||
|
"version": "9.13.0",
|
||||||
|
"resolved": "https://registry.npmmirror.com/@vueuse/core/-/core-9.13.0.tgz",
|
||||||
|
"integrity": "sha512-pujnclbeHWxxPRqXWmdkKV5OX4Wk4YeK7wusHqRwU0Q7EFusHoqNA/aPhB6KCh9hEqJkLAJo7bb0Lh9b+OIVzw==",
|
||||||
|
"dependencies": {
|
||||||
|
"@types/web-bluetooth": "^0.0.16",
|
||||||
|
"@vueuse/metadata": "9.13.0",
|
||||||
|
"@vueuse/shared": "9.13.0",
|
||||||
|
"vue-demi": "*"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/antfu"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@infectoone/vue-ganttastic/node_modules/@vueuse/core/node_modules/vue-demi": {
|
||||||
|
"version": "0.14.10",
|
||||||
|
"resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.10.tgz",
|
||||||
|
"integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==",
|
||||||
|
"hasInstallScript": true,
|
||||||
|
"bin": {
|
||||||
|
"vue-demi-fix": "bin/vue-demi-fix.js",
|
||||||
|
"vue-demi-switch": "bin/vue-demi-switch.js"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/antfu"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"@vue/composition-api": "^1.0.0-rc.1",
|
||||||
|
"vue": "^3.0.0-0 || ^2.6.0"
|
||||||
|
},
|
||||||
|
"peerDependenciesMeta": {
|
||||||
|
"@vue/composition-api": {
|
||||||
|
"optional": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@infectoone/vue-ganttastic/node_modules/@vueuse/metadata": {
|
||||||
|
"version": "9.13.0",
|
||||||
|
"resolved": "https://registry.npmmirror.com/@vueuse/metadata/-/metadata-9.13.0.tgz",
|
||||||
|
"integrity": "sha512-gdU7TKNAUVlXXLbaF+ZCfte8BjRJQWPCa2J55+7/h+yDtzw3vOoGQDRXzI6pyKyo6bXFT5/QoPE4hAknExjRLQ==",
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/antfu"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@infectoone/vue-ganttastic/node_modules/@vueuse/shared": {
|
||||||
|
"version": "9.13.0",
|
||||||
|
"resolved": "https://registry.npmmirror.com/@vueuse/shared/-/shared-9.13.0.tgz",
|
||||||
|
"integrity": "sha512-UrnhU+Cnufu4S6JLCPZnkWh0WwZGUp72ktOF2DFptMlOs3TOdVv8xJN53zhHGARmVOsz5KqOls09+J1NR6sBKw==",
|
||||||
|
"dependencies": {
|
||||||
|
"vue-demi": "*"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/antfu"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@infectoone/vue-ganttastic/node_modules/@vueuse/shared/node_modules/vue-demi": {
|
||||||
|
"version": "0.14.10",
|
||||||
|
"resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.10.tgz",
|
||||||
|
"integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==",
|
||||||
|
"hasInstallScript": true,
|
||||||
|
"bin": {
|
||||||
|
"vue-demi-fix": "bin/vue-demi-fix.js",
|
||||||
|
"vue-demi-switch": "bin/vue-demi-switch.js"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/antfu"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"@vue/composition-api": "^1.0.0-rc.1",
|
||||||
|
"vue": "^3.0.0-0 || ^2.6.0"
|
||||||
|
},
|
||||||
|
"peerDependenciesMeta": {
|
||||||
|
"@vue/composition-api": {
|
||||||
|
"optional": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/@jridgewell/gen-mapping": {
|
"node_modules/@jridgewell/gen-mapping": {
|
||||||
"version": "0.3.5",
|
"version": "0.3.5",
|
||||||
"resolved": "https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz",
|
"resolved": "https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz",
|
||||||
|
@ -2373,9 +2462,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@types/web-bluetooth": {
|
"node_modules/@types/web-bluetooth": {
|
||||||
"version": "0.0.16",
|
"version": "0.0.20",
|
||||||
"resolved": "https://registry.npmmirror.com/@types/web-bluetooth/-/web-bluetooth-0.0.16.tgz",
|
"resolved": "https://registry.npmmirror.com/@types/web-bluetooth/-/web-bluetooth-0.0.20.tgz",
|
||||||
"integrity": "sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ=="
|
"integrity": "sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow=="
|
||||||
},
|
},
|
||||||
"node_modules/@types/ws": {
|
"node_modules/@types/ws": {
|
||||||
"version": "8.5.12",
|
"version": "8.5.12",
|
||||||
|
@ -2892,49 +2981,49 @@
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"node_modules/@vue/compiler-core": {
|
"node_modules/@vue/compiler-core": {
|
||||||
"version": "3.5.6",
|
"version": "3.5.13",
|
||||||
"resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.5.6.tgz",
|
"resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.5.13.tgz",
|
||||||
"integrity": "sha512-r+gNu6K4lrvaQLQGmf+1gc41p3FO2OUJyWmNqaIITaJU6YFiV5PtQSFZt8jfztYyARwqhoCayjprC7KMvT3nRA==",
|
"integrity": "sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/parser": "^7.25.3",
|
"@babel/parser": "^7.25.3",
|
||||||
"@vue/shared": "3.5.6",
|
"@vue/shared": "3.5.13",
|
||||||
"entities": "^4.5.0",
|
"entities": "^4.5.0",
|
||||||
"estree-walker": "^2.0.2",
|
"estree-walker": "^2.0.2",
|
||||||
"source-map-js": "^1.2.0"
|
"source-map-js": "^1.2.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@vue/compiler-dom": {
|
"node_modules/@vue/compiler-dom": {
|
||||||
"version": "3.5.6",
|
"version": "3.5.13",
|
||||||
"resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.5.6.tgz",
|
"resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.5.13.tgz",
|
||||||
"integrity": "sha512-xRXqxDrIqK8v8sSScpistyYH0qYqxakpsIvqMD2e5sV/PXQ1mTwtXp4k42yHK06KXxKSmitop9e45Ui/3BrTEw==",
|
"integrity": "sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@vue/compiler-core": "3.5.6",
|
"@vue/compiler-core": "3.5.13",
|
||||||
"@vue/shared": "3.5.6"
|
"@vue/shared": "3.5.13"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@vue/compiler-sfc": {
|
"node_modules/@vue/compiler-sfc": {
|
||||||
"version": "3.5.6",
|
"version": "3.5.13",
|
||||||
"resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.5.6.tgz",
|
"resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.5.13.tgz",
|
||||||
"integrity": "sha512-pjWJ8Kj9TDHlbF5LywjVso+BIxCY5wVOLhkEXRhuCHDxPFIeX1zaFefKs8RYoHvkSMqRWt93a0f2gNJVJixHwg==",
|
"integrity": "sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/parser": "^7.25.3",
|
"@babel/parser": "^7.25.3",
|
||||||
"@vue/compiler-core": "3.5.6",
|
"@vue/compiler-core": "3.5.13",
|
||||||
"@vue/compiler-dom": "3.5.6",
|
"@vue/compiler-dom": "3.5.13",
|
||||||
"@vue/compiler-ssr": "3.5.6",
|
"@vue/compiler-ssr": "3.5.13",
|
||||||
"@vue/shared": "3.5.6",
|
"@vue/shared": "3.5.13",
|
||||||
"estree-walker": "^2.0.2",
|
"estree-walker": "^2.0.2",
|
||||||
"magic-string": "^0.30.11",
|
"magic-string": "^0.30.11",
|
||||||
"postcss": "^8.4.47",
|
"postcss": "^8.4.48",
|
||||||
"source-map-js": "^1.2.0"
|
"source-map-js": "^1.2.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@vue/compiler-ssr": {
|
"node_modules/@vue/compiler-ssr": {
|
||||||
"version": "3.5.6",
|
"version": "3.5.13",
|
||||||
"resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.5.6.tgz",
|
"resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.5.13.tgz",
|
||||||
"integrity": "sha512-VpWbaZrEOCqnmqjE83xdwegtr5qO/2OPUC6veWgvNqTJ3bYysz6vY3VqMuOijubuUYPRpG3OOKIh9TD0Stxb9A==",
|
"integrity": "sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@vue/compiler-dom": "3.5.6",
|
"@vue/compiler-dom": "3.5.13",
|
||||||
"@vue/shared": "3.5.6"
|
"@vue/shared": "3.5.13"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@vue/component-compiler-utils": {
|
"node_modules/@vue/component-compiler-utils": {
|
||||||
|
@ -3007,49 +3096,49 @@
|
||||||
"integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g=="
|
"integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g=="
|
||||||
},
|
},
|
||||||
"node_modules/@vue/reactivity": {
|
"node_modules/@vue/reactivity": {
|
||||||
"version": "3.5.6",
|
"version": "3.5.13",
|
||||||
"resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.5.6.tgz",
|
"resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.5.13.tgz",
|
||||||
"integrity": "sha512-shZ+KtBoHna5GyUxWfoFVBCVd7k56m6lGhk5e+J9AKjheHF6yob5eukssHRI+rzvHBiU1sWs/1ZhNbLExc5oYQ==",
|
"integrity": "sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@vue/shared": "3.5.6"
|
"@vue/shared": "3.5.13"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@vue/runtime-core": {
|
"node_modules/@vue/runtime-core": {
|
||||||
"version": "3.5.6",
|
"version": "3.5.13",
|
||||||
"resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.5.6.tgz",
|
"resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.5.13.tgz",
|
||||||
"integrity": "sha512-FpFULR6+c2lI+m1fIGONLDqPQO34jxV8g6A4wBOgne8eSRHP6PQL27+kWFIx5wNhhjkO7B4rgtsHAmWv7qKvbg==",
|
"integrity": "sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@vue/reactivity": "3.5.6",
|
"@vue/reactivity": "3.5.13",
|
||||||
"@vue/shared": "3.5.6"
|
"@vue/shared": "3.5.13"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@vue/runtime-dom": {
|
"node_modules/@vue/runtime-dom": {
|
||||||
"version": "3.5.6",
|
"version": "3.5.13",
|
||||||
"resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.5.6.tgz",
|
"resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.5.13.tgz",
|
||||||
"integrity": "sha512-SDPseWre45G38ENH2zXRAHL1dw/rr5qp91lS4lt/nHvMr0MhsbCbihGAWLXNB/6VfFOJe2O+RBRkXU+CJF7/sw==",
|
"integrity": "sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@vue/reactivity": "3.5.6",
|
"@vue/reactivity": "3.5.13",
|
||||||
"@vue/runtime-core": "3.5.6",
|
"@vue/runtime-core": "3.5.13",
|
||||||
"@vue/shared": "3.5.6",
|
"@vue/shared": "3.5.13",
|
||||||
"csstype": "^3.1.3"
|
"csstype": "^3.1.3"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@vue/server-renderer": {
|
"node_modules/@vue/server-renderer": {
|
||||||
"version": "3.5.6",
|
"version": "3.5.13",
|
||||||
"resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.5.6.tgz",
|
"resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.5.13.tgz",
|
||||||
"integrity": "sha512-zivnxQnOnwEXVaT9CstJ64rZFXMS5ZkKxCjDQKiMSvUhXRzFLWZVbaBiNF4HGDqGNNsTgmjcCSmU6TB/0OOxLA==",
|
"integrity": "sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@vue/compiler-ssr": "3.5.6",
|
"@vue/compiler-ssr": "3.5.13",
|
||||||
"@vue/shared": "3.5.6"
|
"@vue/shared": "3.5.13"
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"vue": "3.5.6"
|
"vue": "3.5.13"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@vue/shared": {
|
"node_modules/@vue/shared": {
|
||||||
"version": "3.5.6",
|
"version": "3.5.13",
|
||||||
"resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.5.6.tgz",
|
"resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.5.13.tgz",
|
||||||
"integrity": "sha512-eidH0HInnL39z6wAt6SFIwBrvGOpDWsDxlw3rCgo1B+CQ1781WzQUSU3YjxgdkcJo9Q8S6LmXTkvI+cLHGkQfA=="
|
"integrity": "sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ=="
|
||||||
},
|
},
|
||||||
"node_modules/@vue/vue-loader-v15": {
|
"node_modules/@vue/vue-loader-v15": {
|
||||||
"name": "vue-loader",
|
"name": "vue-loader",
|
||||||
|
@ -3093,33 +3182,33 @@
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"node_modules/@vueuse/core": {
|
"node_modules/@vueuse/core": {
|
||||||
"version": "9.13.0",
|
"version": "12.4.0",
|
||||||
"resolved": "https://registry.npmmirror.com/@vueuse/core/-/core-9.13.0.tgz",
|
"resolved": "https://registry.npmmirror.com/@vueuse/core/-/core-12.4.0.tgz",
|
||||||
"integrity": "sha512-pujnclbeHWxxPRqXWmdkKV5OX4Wk4YeK7wusHqRwU0Q7EFusHoqNA/aPhB6KCh9hEqJkLAJo7bb0Lh9b+OIVzw==",
|
"integrity": "sha512-XnjQYcJwCsyXyIafyA6SvyN/OBtfPnjvJmbxNxQjCcyWD198urwm5TYvIUUyAxEAN0K7HJggOgT15cOlWFyLeA==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@types/web-bluetooth": "^0.0.16",
|
"@types/web-bluetooth": "^0.0.20",
|
||||||
"@vueuse/metadata": "9.13.0",
|
"@vueuse/metadata": "12.4.0",
|
||||||
"@vueuse/shared": "9.13.0",
|
"@vueuse/shared": "12.4.0",
|
||||||
"vue-demi": "*"
|
"vue": "^3.5.13"
|
||||||
},
|
},
|
||||||
"funding": {
|
"funding": {
|
||||||
"url": "https://github.com/sponsors/antfu"
|
"url": "https://github.com/sponsors/antfu"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@vueuse/metadata": {
|
"node_modules/@vueuse/metadata": {
|
||||||
"version": "9.13.0",
|
"version": "12.4.0",
|
||||||
"resolved": "https://registry.npmmirror.com/@vueuse/metadata/-/metadata-9.13.0.tgz",
|
"resolved": "https://registry.npmmirror.com/@vueuse/metadata/-/metadata-12.4.0.tgz",
|
||||||
"integrity": "sha512-gdU7TKNAUVlXXLbaF+ZCfte8BjRJQWPCa2J55+7/h+yDtzw3vOoGQDRXzI6pyKyo6bXFT5/QoPE4hAknExjRLQ==",
|
"integrity": "sha512-AhPuHs/qtYrKHUlEoNO6zCXufu8OgbR8S/n2oMw1OQuBQJ3+HOLQ+EpvXs+feOlZMa0p8QVvDWNlmcJJY8rW2g==",
|
||||||
"funding": {
|
"funding": {
|
||||||
"url": "https://github.com/sponsors/antfu"
|
"url": "https://github.com/sponsors/antfu"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@vueuse/shared": {
|
"node_modules/@vueuse/shared": {
|
||||||
"version": "9.13.0",
|
"version": "12.4.0",
|
||||||
"resolved": "https://registry.npmmirror.com/@vueuse/shared/-/shared-9.13.0.tgz",
|
"resolved": "https://registry.npmmirror.com/@vueuse/shared/-/shared-12.4.0.tgz",
|
||||||
"integrity": "sha512-UrnhU+Cnufu4S6JLCPZnkWh0WwZGUp72ktOF2DFptMlOs3TOdVv8xJN53zhHGARmVOsz5KqOls09+J1NR6sBKw==",
|
"integrity": "sha512-9yLgbHVIF12OSCojnjTIoZL1+UA10+O4E1aD6Hpfo/DKVm5o3SZIwz6CupqGy3+IcKI8d6Jnl26EQj/YucnW0Q==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"vue-demi": "*"
|
"vue": "^3.5.13"
|
||||||
},
|
},
|
||||||
"funding": {
|
"funding": {
|
||||||
"url": "https://github.com/sponsors/antfu"
|
"url": "https://github.com/sponsors/antfu"
|
||||||
|
@ -5497,6 +5586,94 @@
|
||||||
"vue": "^3.2.0"
|
"vue": "^3.2.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/element-plus/node_modules/@types/web-bluetooth": {
|
||||||
|
"version": "0.0.16",
|
||||||
|
"resolved": "https://registry.npmmirror.com/@types/web-bluetooth/-/web-bluetooth-0.0.16.tgz",
|
||||||
|
"integrity": "sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ=="
|
||||||
|
},
|
||||||
|
"node_modules/element-plus/node_modules/@vueuse/core": {
|
||||||
|
"version": "9.13.0",
|
||||||
|
"resolved": "https://registry.npmmirror.com/@vueuse/core/-/core-9.13.0.tgz",
|
||||||
|
"integrity": "sha512-pujnclbeHWxxPRqXWmdkKV5OX4Wk4YeK7wusHqRwU0Q7EFusHoqNA/aPhB6KCh9hEqJkLAJo7bb0Lh9b+OIVzw==",
|
||||||
|
"dependencies": {
|
||||||
|
"@types/web-bluetooth": "^0.0.16",
|
||||||
|
"@vueuse/metadata": "9.13.0",
|
||||||
|
"@vueuse/shared": "9.13.0",
|
||||||
|
"vue-demi": "*"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/antfu"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/element-plus/node_modules/@vueuse/core/node_modules/vue-demi": {
|
||||||
|
"version": "0.14.10",
|
||||||
|
"resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.10.tgz",
|
||||||
|
"integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==",
|
||||||
|
"hasInstallScript": true,
|
||||||
|
"bin": {
|
||||||
|
"vue-demi-fix": "bin/vue-demi-fix.js",
|
||||||
|
"vue-demi-switch": "bin/vue-demi-switch.js"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/antfu"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"@vue/composition-api": "^1.0.0-rc.1",
|
||||||
|
"vue": "^3.0.0-0 || ^2.6.0"
|
||||||
|
},
|
||||||
|
"peerDependenciesMeta": {
|
||||||
|
"@vue/composition-api": {
|
||||||
|
"optional": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/element-plus/node_modules/@vueuse/metadata": {
|
||||||
|
"version": "9.13.0",
|
||||||
|
"resolved": "https://registry.npmmirror.com/@vueuse/metadata/-/metadata-9.13.0.tgz",
|
||||||
|
"integrity": "sha512-gdU7TKNAUVlXXLbaF+ZCfte8BjRJQWPCa2J55+7/h+yDtzw3vOoGQDRXzI6pyKyo6bXFT5/QoPE4hAknExjRLQ==",
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/antfu"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/element-plus/node_modules/@vueuse/shared": {
|
||||||
|
"version": "9.13.0",
|
||||||
|
"resolved": "https://registry.npmmirror.com/@vueuse/shared/-/shared-9.13.0.tgz",
|
||||||
|
"integrity": "sha512-UrnhU+Cnufu4S6JLCPZnkWh0WwZGUp72ktOF2DFptMlOs3TOdVv8xJN53zhHGARmVOsz5KqOls09+J1NR6sBKw==",
|
||||||
|
"dependencies": {
|
||||||
|
"vue-demi": "*"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/antfu"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/element-plus/node_modules/@vueuse/shared/node_modules/vue-demi": {
|
||||||
|
"version": "0.14.10",
|
||||||
|
"resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.10.tgz",
|
||||||
|
"integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==",
|
||||||
|
"hasInstallScript": true,
|
||||||
|
"bin": {
|
||||||
|
"vue-demi-fix": "bin/vue-demi-fix.js",
|
||||||
|
"vue-demi-switch": "bin/vue-demi-switch.js"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/antfu"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"@vue/composition-api": "^1.0.0-rc.1",
|
||||||
|
"vue": "^3.0.0-0 || ^2.6.0"
|
||||||
|
},
|
||||||
|
"peerDependenciesMeta": {
|
||||||
|
"@vue/composition-api": {
|
||||||
|
"optional": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/emoji-regex": {
|
"node_modules/emoji-regex": {
|
||||||
"version": "8.0.0",
|
"version": "8.0.0",
|
||||||
"resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz",
|
"resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz",
|
||||||
|
@ -9031,9 +9208,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/picocolors": {
|
"node_modules/picocolors": {
|
||||||
"version": "1.1.0",
|
"version": "1.1.1",
|
||||||
"resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.1.0.tgz",
|
"resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.1.1.tgz",
|
||||||
"integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw=="
|
"integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="
|
||||||
},
|
},
|
||||||
"node_modules/picomatch": {
|
"node_modules/picomatch": {
|
||||||
"version": "2.3.1",
|
"version": "2.3.1",
|
||||||
|
@ -9099,9 +9276,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/postcss": {
|
"node_modules/postcss": {
|
||||||
"version": "8.4.47",
|
"version": "8.4.49",
|
||||||
"resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.4.47.tgz",
|
"resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.4.49.tgz",
|
||||||
"integrity": "sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==",
|
"integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==",
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
"type": "opencollective",
|
"type": "opencollective",
|
||||||
|
@ -9118,7 +9295,7 @@
|
||||||
],
|
],
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"nanoid": "^3.3.7",
|
"nanoid": "^3.3.7",
|
||||||
"picocolors": "^1.1.0",
|
"picocolors": "^1.1.1",
|
||||||
"source-map-js": "^1.2.1"
|
"source-map-js": "^1.2.1"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
|
@ -12246,15 +12423,15 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/vue": {
|
"node_modules/vue": {
|
||||||
"version": "3.5.6",
|
"version": "3.5.13",
|
||||||
"resolved": "https://registry.npmmirror.com/vue/-/vue-3.5.6.tgz",
|
"resolved": "https://registry.npmmirror.com/vue/-/vue-3.5.13.tgz",
|
||||||
"integrity": "sha512-zv+20E2VIYbcJOzJPUWp03NOGFhMmpCKOfSxVTmCYyYFFko48H9tmuQFzYj7tu4qX1AeXlp9DmhIP89/sSxxhw==",
|
"integrity": "sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@vue/compiler-dom": "3.5.6",
|
"@vue/compiler-dom": "3.5.13",
|
||||||
"@vue/compiler-sfc": "3.5.6",
|
"@vue/compiler-sfc": "3.5.13",
|
||||||
"@vue/runtime-dom": "3.5.6",
|
"@vue/runtime-dom": "3.5.13",
|
||||||
"@vue/server-renderer": "3.5.6",
|
"@vue/server-renderer": "3.5.13",
|
||||||
"@vue/shared": "3.5.6"
|
"@vue/shared": "3.5.13"
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"typescript": "*"
|
"typescript": "*"
|
||||||
|
@ -12270,31 +12447,6 @@
|
||||||
"resolved": "https://registry.npmmirror.com/vue-count-to/-/vue-count-to-1.0.13.tgz",
|
"resolved": "https://registry.npmmirror.com/vue-count-to/-/vue-count-to-1.0.13.tgz",
|
||||||
"integrity": "sha512-6R4OVBVNtQTlcbXu6SJ8ENR35M2/CdWt3Jmv57jOUM+1ojiFmjVGvZPH8DfHpMDSA+ITs+EW5V6qthADxeyYOQ=="
|
"integrity": "sha512-6R4OVBVNtQTlcbXu6SJ8ENR35M2/CdWt3Jmv57jOUM+1ojiFmjVGvZPH8DfHpMDSA+ITs+EW5V6qthADxeyYOQ=="
|
||||||
},
|
},
|
||||||
"node_modules/vue-demi": {
|
|
||||||
"version": "0.14.10",
|
|
||||||
"resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.10.tgz",
|
|
||||||
"integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==",
|
|
||||||
"hasInstallScript": true,
|
|
||||||
"bin": {
|
|
||||||
"vue-demi-fix": "bin/vue-demi-fix.js",
|
|
||||||
"vue-demi-switch": "bin/vue-demi-switch.js"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=12"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"url": "https://github.com/sponsors/antfu"
|
|
||||||
},
|
|
||||||
"peerDependencies": {
|
|
||||||
"@vue/composition-api": "^1.0.0-rc.1",
|
|
||||||
"vue": "^3.0.0-0 || ^2.6.0"
|
|
||||||
},
|
|
||||||
"peerDependenciesMeta": {
|
|
||||||
"@vue/composition-api": {
|
|
||||||
"optional": true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/vue-hot-reload-api": {
|
"node_modules/vue-hot-reload-api": {
|
||||||
"version": "2.3.4",
|
"version": "2.3.4",
|
||||||
"resolved": "https://registry.npmmirror.com/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz",
|
"resolved": "https://registry.npmmirror.com/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz",
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@infectoone/vue-ganttastic": "^2.3.2",
|
"@infectoone/vue-ganttastic": "^2.3.2",
|
||||||
"@pureadmin/utils": "^2.5.0",
|
"@pureadmin/utils": "^2.5.0",
|
||||||
|
"@vueuse/core": "^12.4.0",
|
||||||
"axios": "^1.7.7",
|
"axios": "^1.7.7",
|
||||||
"core-js": "^3.8.3",
|
"core-js": "^3.8.3",
|
||||||
"echarts": "^5.5.1",
|
"echarts": "^5.5.1",
|
||||||
|
|
|
@ -23,11 +23,6 @@ const routes = [
|
||||||
component: () => import('../views/home/index'),
|
component: () => import('../views/home/index'),
|
||||||
|
|
||||||
},
|
},
|
||||||
{
|
|
||||||
path: '/welcome',
|
|
||||||
name: 'welcome',
|
|
||||||
component: () => import('../views/welcome/index')
|
|
||||||
},
|
|
||||||
|
|
||||||
{
|
{
|
||||||
path: '/busines',
|
path: '/busines',
|
||||||
|
|
19
src/util/time.js
Normal file
19
src/util/time.js
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
export function formattedDate(timestamp){
|
||||||
|
const date = new Date(timestamp);
|
||||||
|
const year = date.getFullYear();
|
||||||
|
const month = (date.getMonth() + 1).toString().padStart(2, '0');
|
||||||
|
const day = date.getDate().toString().padStart(2, '0');
|
||||||
|
const formattedDate = `${year}-${month}-${day}`;
|
||||||
|
return formattedDate
|
||||||
|
}
|
||||||
|
export function DetailformattedDate(timestamp){
|
||||||
|
const date = new Date(timestamp);
|
||||||
|
const year = date.getFullYear();
|
||||||
|
const month = (date.getMonth() + 1).toString().padStart(2, '0');
|
||||||
|
const day = date.getDate().toString().padStart(2, '0');
|
||||||
|
const hour = date.getHours().toString().padStart(2, '0');
|
||||||
|
const minute = date.getMinutes().toString().padStart(2, '0');
|
||||||
|
const second = date.getSeconds().toString().padStart(2, '0');
|
||||||
|
const formattedDate = `${year}-${month}-${day} ${hour}:${minute}:${second}`;
|
||||||
|
return formattedDate
|
||||||
|
}
|
|
@ -8,7 +8,7 @@
|
||||||
<el-row :gutter="16">
|
<el-row :gutter="16">
|
||||||
<el-col :span="6">
|
<el-col :span="6">
|
||||||
<div class="statistic-card">
|
<div class="statistic-card">
|
||||||
<el-statistic :value="num0" >
|
<el-statistic :value="num0">
|
||||||
<template #title>
|
<template #title>
|
||||||
<div style="display: inline-flex; justify-self: right;align-items: center;width: 100%">
|
<div style="display: inline-flex; justify-self: right;align-items: center;width: 100%">
|
||||||
用户人数
|
用户人数
|
||||||
|
@ -138,12 +138,20 @@
|
||||||
import axios from "@/util/axios";
|
import axios from "@/util/axios";
|
||||||
import * as echarts from "echarts";
|
import * as echarts from "echarts";
|
||||||
import {onMounted, ref} from 'vue'
|
import {onMounted, ref} from 'vue'
|
||||||
|
import {formattedDate} from "@/util/time";
|
||||||
|
|
||||||
let num0=ref()
|
const num0=ref()
|
||||||
let num1=ref()
|
const num1=ref()
|
||||||
let num2=ref()
|
const num2=ref()
|
||||||
let num3=ref()
|
const num3=ref()
|
||||||
|
|
||||||
|
const compete=ref([])
|
||||||
|
const Xcompete=ref([])
|
||||||
|
const Ycompete=ref([])
|
||||||
|
// ====================
|
||||||
|
|
||||||
|
|
||||||
|
// ====================
|
||||||
|
|
||||||
|
|
||||||
const total=ref(0)
|
const total=ref(0)
|
||||||
|
@ -156,20 +164,28 @@ const formPage=ref({
|
||||||
const initBusinessList=async()=>{
|
const initBusinessList=async()=>{
|
||||||
//console.log(formPage.value)
|
//console.log(formPage.value)
|
||||||
const res1=await axios.post("user/list/page");
|
const res1=await axios.post("user/list/page");
|
||||||
num0=res1.data.data.total
|
num0.value=res1.data.data.total
|
||||||
|
|
||||||
|
|
||||||
const res3=await axios.post("orders/list/page");
|
const res3=await axios.post("orders/list/page");
|
||||||
num2=res3.data.data.total
|
num2.value=res3.data.data.total
|
||||||
const res4=await axios.post("manicurist/queryAll");
|
const res4=await axios.post("manicurist/queryAll");
|
||||||
num3=res4.data.data.length
|
num3.value=res4.data.data.length
|
||||||
|
|
||||||
const res=await axios.post("business/list/page",formPage.value);
|
const res=await axios.post("business/list/page",formPage.value);
|
||||||
num1=res.data.data.total
|
num1.value=res.data.data.total
|
||||||
//console.log(res.data.data.records)
|
//console.log(res.data.data.records)
|
||||||
tableData.value=res.data.data.records;
|
tableData.value=res.data.data.records;
|
||||||
total.value=res.data.data.records.length;
|
total.value=res.data.data.records.length;
|
||||||
// console.log(num0)
|
|
||||||
|
// 折线图与后端数据的融合
|
||||||
|
compete.value=res3.data.data.records
|
||||||
|
compete.value.map(item=>{item.createTime=formattedDate(item.createTime)})
|
||||||
|
compete.value.forEach(item=>{Xcompete.value.push(item.createTime);Ycompete.value.push(item.totalPrice)})
|
||||||
|
// console.log(Xcompete.value)
|
||||||
|
// console.log(Ycompete.value)
|
||||||
|
|
||||||
|
// console.log(num0+" "+num1+" "+num2+" "+num3)
|
||||||
setTimeout(() => {hei();shi();}, 500)
|
setTimeout(() => {hei();shi();}, 500)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -195,56 +211,73 @@ const handleCurrentChange = (pageNum) => {
|
||||||
// setTimeout(() => {hei();shi();}, 500)
|
// setTimeout(() => {hei();shi();}, 500)
|
||||||
// })
|
// })
|
||||||
|
|
||||||
|
|
||||||
const hei=()=>{
|
const hei=()=>{
|
||||||
|
|
||||||
var chartDom = document.getElementById('main1');
|
var chartDom = document.getElementById('main1');
|
||||||
var myChart = echarts.init(chartDom);
|
var myChart = echarts.init(chartDom);
|
||||||
var option;
|
var option;
|
||||||
|
|
||||||
|
// option = {
|
||||||
|
// tooltip: {
|
||||||
|
// trigger: 'item'
|
||||||
|
// },
|
||||||
|
// legend: {
|
||||||
|
// top: '5%',
|
||||||
|
// left: 'center'
|
||||||
|
// },
|
||||||
|
// series: [
|
||||||
|
// {
|
||||||
|
// name: 'Access From',
|
||||||
|
// type: 'pie',
|
||||||
|
// radius: ['40%', '70%'],
|
||||||
|
// avoidLabelOverlap: false,
|
||||||
|
// itemStyle: {
|
||||||
|
// borderRadius: 10,
|
||||||
|
// borderColor: '#fff',
|
||||||
|
// borderWidth: 2
|
||||||
|
// },
|
||||||
|
// label: {
|
||||||
|
// show: false,
|
||||||
|
// position: 'center'
|
||||||
|
// },
|
||||||
|
// emphasis: {
|
||||||
|
// label: {
|
||||||
|
// show: true,
|
||||||
|
// fontSize: 40,
|
||||||
|
// fontWeight: 'bold'
|
||||||
|
// }
|
||||||
|
// },
|
||||||
|
// labelLine: {
|
||||||
|
// show: false
|
||||||
|
// },
|
||||||
|
// data: [
|
||||||
|
// { value: 1048, name: 'Search Engine' },
|
||||||
|
// { value: 735, name: 'Direct' },
|
||||||
|
// { value: 580, name: 'Email' },
|
||||||
|
// { value: 484, name: 'Union Ads' },
|
||||||
|
// { value: 300, name: 'Video Ads' }
|
||||||
|
// ]
|
||||||
|
// }
|
||||||
|
// ]
|
||||||
|
// };
|
||||||
|
|
||||||
|
|
||||||
option = {
|
option = {
|
||||||
tooltip: {
|
xAxis: {
|
||||||
trigger: 'item'
|
type: 'category',
|
||||||
|
data:['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
|
||||||
},
|
},
|
||||||
legend: {
|
yAxis: {
|
||||||
top: '5%',
|
type: 'value'
|
||||||
left: 'center'
|
|
||||||
},
|
},
|
||||||
series: [
|
series: [
|
||||||
{
|
{
|
||||||
name: 'Access From',
|
data: [10, 52, 200, 334, 390, 330, 220],
|
||||||
type: 'pie',
|
type: 'line'
|
||||||
radius: ['40%', '70%'],
|
|
||||||
avoidLabelOverlap: false,
|
|
||||||
itemStyle: {
|
|
||||||
borderRadius: 10,
|
|
||||||
borderColor: '#fff',
|
|
||||||
borderWidth: 2
|
|
||||||
},
|
|
||||||
label: {
|
|
||||||
show: false,
|
|
||||||
position: 'center'
|
|
||||||
},
|
|
||||||
emphasis: {
|
|
||||||
label: {
|
|
||||||
show: true,
|
|
||||||
fontSize: 40,
|
|
||||||
fontWeight: 'bold'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
labelLine: {
|
|
||||||
show: false
|
|
||||||
},
|
|
||||||
data: [
|
|
||||||
{ value: 1048, name: 'Search Engine' },
|
|
||||||
{ value: 735, name: 'Direct' },
|
|
||||||
{ value: 580, name: 'Email' },
|
|
||||||
{ value: 484, name: 'Union Ads' },
|
|
||||||
{ value: 300, name: 'Video Ads' }
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
};
|
};
|
||||||
|
|
||||||
option && myChart.setOption(option);
|
option && myChart.setOption(option);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -269,7 +302,7 @@ const shi=()=>{
|
||||||
xAxis: [
|
xAxis: [
|
||||||
{
|
{
|
||||||
type: 'category',
|
type: 'category',
|
||||||
data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],
|
data: Xcompete.value,
|
||||||
axisTick: {
|
axisTick: {
|
||||||
alignWithLabel: true
|
alignWithLabel: true
|
||||||
}
|
}
|
||||||
|
@ -285,7 +318,7 @@ const shi=()=>{
|
||||||
name: 'Direct',
|
name: 'Direct',
|
||||||
type: 'bar',
|
type: 'bar',
|
||||||
barWidth: '60%',
|
barWidth: '60%',
|
||||||
data: [10, 52, 200, 334, 390, 330, 220]
|
data: Ycompete.value
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
};
|
};
|
||||||
|
|
File diff suppressed because one or more lines are too long
|
@ -1,4 +1,5 @@
|
||||||
<template>
|
<template>
|
||||||
|
<div v-if="ax">
|
||||||
<el-menu
|
<el-menu
|
||||||
active-text-color="#ffd04b"
|
active-text-color="#ffd04b"
|
||||||
background-color="#2d3a4b"
|
background-color="#2d3a4b"
|
||||||
|
@ -7,18 +8,15 @@
|
||||||
text-color="#fff"
|
text-color="#fff"
|
||||||
router
|
router
|
||||||
>
|
>
|
||||||
<el-menu-item index="welcome">
|
|
||||||
<el-icon><home-filled /></el-icon>
|
|
||||||
<span>Welcome</span>
|
|
||||||
</el-menu-item>
|
|
||||||
<el-menu-item index="home">
|
<el-menu-item index="home">
|
||||||
<el-icon><home-filled /></el-icon>
|
<el-icon><home-filled /></el-icon>
|
||||||
<span>首页</span>
|
<span>首页</span>
|
||||||
</el-menu-item>
|
</el-menu-item>
|
||||||
<!-- <el-menu-item index="display">-->
|
<!-- <el-menu-item index="display">-->
|
||||||
<!-- <el-icon><tickets /></el-icon>-->
|
<!-- <el-icon><tickets /></el-icon>-->
|
||||||
<!-- <span>数据展示</span>-->
|
<!-- <span>数据展示</span>-->
|
||||||
<!-- </el-menu-item>-->
|
<!-- </el-menu-item>-->
|
||||||
<el-menu-item index="user">
|
<el-menu-item index="user">
|
||||||
<el-icon><user /></el-icon>
|
<el-icon><user /></el-icon>
|
||||||
<span >用户管理</span>
|
<span >用户管理</span>
|
||||||
|
@ -84,10 +82,10 @@
|
||||||
<el-icon><tickets /></el-icon>
|
<el-icon><tickets /></el-icon>
|
||||||
<span>到店服务</span>
|
<span>到店服务</span>
|
||||||
</el-menu-item>
|
</el-menu-item>
|
||||||
<!-- <el-menu-item index="order">-->
|
<!-- <el-menu-item index="order">-->
|
||||||
<!-- <el-icon><tickets /></el-icon>-->
|
<!-- <el-icon><tickets /></el-icon>-->
|
||||||
<!-- <span>订单列表</span>-->
|
<!-- <span>订单列表</span>-->
|
||||||
<!-- </el-menu-item>-->
|
<!-- </el-menu-item>-->
|
||||||
</el-sub-menu>
|
</el-sub-menu>
|
||||||
|
|
||||||
|
|
||||||
|
@ -96,17 +94,17 @@
|
||||||
<el-icon><management /></el-icon>
|
<el-icon><management /></el-icon>
|
||||||
<span>评价管理</span>
|
<span>评价管理</span>
|
||||||
</template>
|
</template>
|
||||||
|
<!-- <el-menu-item index="permission">-->
|
||||||
|
<!-- <el-icon><tickets /></el-icon>-->
|
||||||
|
<!-- <span>权限操作</span>-->
|
||||||
|
<!-- </el-menu-item>-->
|
||||||
<el-menu-item index="permission">
|
<el-menu-item index="permission">
|
||||||
<el-icon><tickets /></el-icon>
|
|
||||||
<span>权限操作</span>
|
|
||||||
</el-menu-item>
|
|
||||||
<el-menu-item >
|
|
||||||
<el-icon><tickets /></el-icon>
|
<el-icon><tickets /></el-icon>
|
||||||
<span>星级评优</span>
|
<span>星级评优</span>
|
||||||
</el-menu-item>
|
</el-menu-item>
|
||||||
<el-menu-item index="rating">
|
<el-menu-item index="rating">
|
||||||
<el-icon><tickets /></el-icon>
|
<el-icon><tickets /></el-icon>
|
||||||
<span>评价列表</span>
|
<span>评价操作</span>
|
||||||
</el-menu-item>
|
</el-menu-item>
|
||||||
</el-sub-menu>
|
</el-sub-menu>
|
||||||
|
|
||||||
|
@ -130,6 +128,110 @@
|
||||||
</el-menu-item>
|
</el-menu-item>
|
||||||
</el-sub-menu>
|
</el-sub-menu>
|
||||||
</el-menu>
|
</el-menu>
|
||||||
|
</div>
|
||||||
|
<div v-else>
|
||||||
|
<el-menu
|
||||||
|
active-text-color="#ffd04b"
|
||||||
|
background-color="#2d3a4b"
|
||||||
|
class="el-menu-vertical-demo"
|
||||||
|
default-active="home"
|
||||||
|
text-color="#fff"
|
||||||
|
router
|
||||||
|
>
|
||||||
|
<el-menu-item index="home">
|
||||||
|
<el-icon><home-filled /></el-icon>
|
||||||
|
<span>首页</span>
|
||||||
|
</el-menu-item>
|
||||||
|
<el-sub-menu index="2">
|
||||||
|
<template #title >
|
||||||
|
<el-icon><management /></el-icon>
|
||||||
|
<span>订单管理</span>
|
||||||
|
</template>
|
||||||
|
<el-menu-item index="orderReservation">
|
||||||
|
<el-icon><tickets /></el-icon>
|
||||||
|
<span>上门预约</span>
|
||||||
|
</el-menu-item>
|
||||||
|
<el-menu-item index="order">
|
||||||
|
<el-icon><tickets /></el-icon>
|
||||||
|
<span>到店服务</span>
|
||||||
|
</el-menu-item>
|
||||||
|
<el-menu-item >
|
||||||
|
<el-icon><tickets /></el-icon>
|
||||||
|
<span>抢单</span>
|
||||||
|
</el-menu-item>
|
||||||
|
</el-sub-menu>
|
||||||
|
|
||||||
|
|
||||||
|
<el-sub-menu index="6">
|
||||||
|
<template #title >
|
||||||
|
<el-icon><management /></el-icon>
|
||||||
|
<span>商品管理</span>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<el-menu-item index="product">
|
||||||
|
<el-icon><management /></el-icon>
|
||||||
|
<span>商品列表</span>
|
||||||
|
</el-menu-item>
|
||||||
|
|
||||||
|
</el-sub-menu>
|
||||||
|
<el-sub-menu index="8">
|
||||||
|
<template #title >
|
||||||
|
<el-icon><tickets /></el-icon>
|
||||||
|
<span>美甲师管理</span>
|
||||||
|
</template>
|
||||||
|
<el-menu-item index="employee">
|
||||||
|
<el-icon><management /></el-icon>
|
||||||
|
<span>美甲师列表</span>
|
||||||
|
</el-menu-item>
|
||||||
|
<el-menu-item >
|
||||||
|
<el-icon><tickets /></el-icon>
|
||||||
|
<span>签约美甲师</span>
|
||||||
|
</el-menu-item>
|
||||||
|
</el-sub-menu>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<el-sub-menu index="10">
|
||||||
|
<template #title >
|
||||||
|
<el-icon><management /></el-icon>
|
||||||
|
<span>评价管理</span>
|
||||||
|
</template>
|
||||||
|
<!-- <el-menu-item index="permission">-->
|
||||||
|
<!-- <el-icon><tickets /></el-icon>-->
|
||||||
|
<!-- <span>权限操作</span>-->
|
||||||
|
<!-- </el-menu-item>-->
|
||||||
|
<el-menu-item index="permission">
|
||||||
|
<el-icon><tickets /></el-icon>
|
||||||
|
<span>星级评优</span>
|
||||||
|
</el-menu-item>
|
||||||
|
<el-menu-item index="rating">
|
||||||
|
<el-icon><tickets /></el-icon>
|
||||||
|
<span>评价操作</span>
|
||||||
|
</el-menu-item>
|
||||||
|
</el-sub-menu>
|
||||||
|
|
||||||
|
|
||||||
|
<el-sub-menu index="11">
|
||||||
|
<template #title >
|
||||||
|
<el-icon><management /></el-icon>
|
||||||
|
<span>系统管理</span>
|
||||||
|
</template>
|
||||||
|
<el-menu-item index="personal">
|
||||||
|
<el-icon><House /></el-icon>
|
||||||
|
<span>个人中心</span>
|
||||||
|
</el-menu-item>
|
||||||
|
<el-menu-item index="modifyPassword">
|
||||||
|
<el-icon><edit /></el-icon>
|
||||||
|
<span>修改密码</span>
|
||||||
|
</el-menu-item>
|
||||||
|
<el-menu-item >
|
||||||
|
<el-icon @click="logout"><switch-button /></el-icon>
|
||||||
|
<span @click="logout">安全退出</span>
|
||||||
|
</el-menu-item>
|
||||||
|
</el-sub-menu>
|
||||||
|
</el-menu>
|
||||||
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script setup>
|
<script setup>
|
||||||
import
|
import
|
||||||
|
@ -138,7 +240,21 @@ import
|
||||||
import { useStore } from 'vuex'
|
import { useStore } from 'vuex'
|
||||||
import axios from "@/util/axios";
|
import axios from "@/util/axios";
|
||||||
import {ElMessage} from "element-plus";
|
import {ElMessage} from "element-plus";
|
||||||
|
import {ref} from "vue";
|
||||||
const store=useStore();
|
const store=useStore();
|
||||||
|
const ax=ref(true)
|
||||||
|
const initax=()=>{
|
||||||
|
let userInfoJson = window.sessionStorage.getItem("USER_LOGIN_STATE");
|
||||||
|
console.log(userInfoJson)
|
||||||
|
if(JSON.parse(userInfoJson).userRole==1)
|
||||||
|
{
|
||||||
|
ax.value=true
|
||||||
|
}else{
|
||||||
|
ax.value=false
|
||||||
|
}
|
||||||
|
console.log(ax.value)
|
||||||
|
}
|
||||||
|
initax();
|
||||||
const logout=async ()=>{
|
const logout=async ()=>{
|
||||||
store.dispatch('logout')
|
store.dispatch('logout')
|
||||||
let res= await axios.post("/user/logout")
|
let res= await axios.post("/user/logout")
|
||||||
|
|
|
@ -36,7 +36,7 @@ import {ElMessage} from "element-plus";
|
||||||
import router from "@/router";
|
import router from "@/router";
|
||||||
|
|
||||||
const form = ref({
|
const form = ref({
|
||||||
userAccount: 'root2',
|
userAccount: 'root',
|
||||||
userPassword: '12345678'
|
userPassword: '12345678'
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -64,7 +64,7 @@ const handleLogin = () => {
|
||||||
try {
|
try {
|
||||||
let result = await axiosUtil.post("user/login", form.value);
|
let result = await axiosUtil.post("user/login", form.value);
|
||||||
let data = result.data;
|
let data = result.data;
|
||||||
console.log(result)
|
// console.log(result)
|
||||||
// const value = response.data;
|
// const value = response.data;
|
||||||
// // 在Vue中使用获取到的值
|
// // 在Vue中使用获取到的值
|
||||||
// this.sessionValue = value;
|
// this.sessionValue = value;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<template>
|
<template>
|
||||||
<el-dialog
|
<el-dialog
|
||||||
model-value="dialogaddVisible"
|
model-value="edialogaddVisible"
|
||||||
:title="dialogTitle"
|
:title="dialogTitle"
|
||||||
width="30%"
|
width="30%"
|
||||||
@close="handleClose"
|
@close="handleClose"
|
||||||
|
@ -8,36 +8,52 @@
|
||||||
<el-form
|
<el-form
|
||||||
ref="formRef"
|
ref="formRef"
|
||||||
:model="form"
|
:model="form"
|
||||||
|
|
||||||
label-width="100px"
|
label-width="100px"
|
||||||
>
|
>
|
||||||
<el-form-item label="门店头像" prop="avatarUrl">
|
|
||||||
|
|
||||||
<el-upload list-type="picture-card" limit="1" :auto-upload="false" drag action="#">
|
|
||||||
<el-icon><Plus /></el-icon>
|
|
||||||
<template #tip>
|
|
||||||
<div class="el-upload__tip">
|
|
||||||
(最多传一张)
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
</el-upload>
|
|
||||||
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="用户昵称" prop="username">
|
|
||||||
<el-input v-model="form.username" />
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="用户账号" prop="userAccount">
|
<el-form-item label="用户账号" prop="userAccount">
|
||||||
<el-input v-model="form.userAccount" />
|
<el-input v-model="form.userAccount" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="用户密码" prop="userPassword">
|
<el-form-item label="用户密码" prop="userPassword">
|
||||||
<el-input v-model="form.userPassword" show-password />
|
<el-input v-model="form.userPassword" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="用户昵称" prop="manicuristName">
|
||||||
|
<el-input v-model="form.manicuristName"/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="性别" prop="gender">
|
||||||
|
<el-input v-model="form.gender"/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="电话" prop="phone">
|
||||||
|
<el-input v-model="form.phone"/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="邮箱" prop="email">
|
||||||
|
<el-input v-model="form.email"/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="工作名称" prop="specialties">
|
||||||
|
<el-input v-model="form.specialties"/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="评分" prop="rating">
|
||||||
|
<el-input v-model="form.rating"/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="余额" prop="salary">
|
||||||
|
<el-input v-model="form.salary"/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="认证号" prop="certification_number">
|
||||||
|
<el-input v-model="form.certification_number"/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="认证路径" prop="certificate_path">
|
||||||
|
<el-input v-model="form.certificate_path"/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="组织认证" prop="issuing_authority">
|
||||||
|
<el-input v-model="form.issuing_authority"/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
</el-form>
|
</el-form>
|
||||||
|
|
||||||
<template #footer>
|
<template #footer>
|
||||||
<span class="dialog-footer">
|
<span class="dialog-footer">
|
||||||
<el-button @click="handleClose">取消</el-button>
|
<el-button @click="handleClose">取消</el-button>
|
||||||
<el-button type="primary" @click="handleConfirm">确认</el-button>
|
<el-button type="primary" @click="handleConfirm">确认</el-button>
|
||||||
</span>
|
</span>
|
||||||
</template>
|
</template>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
</template>
|
</template>
|
||||||
|
@ -45,9 +61,6 @@
|
||||||
import {defineEmits, defineProps, ref, watch} from "vue";
|
import {defineEmits, defineProps, ref, watch} from "vue";
|
||||||
import axios from "@/util/axios";
|
import axios from "@/util/axios";
|
||||||
import { ElMessage } from "element-plus";
|
import { ElMessage } from "element-plus";
|
||||||
import { Delete, Download, Plus, ZoomIn } from '@element-plus/icons-vue'
|
|
||||||
|
|
||||||
|
|
||||||
const props=defineProps({
|
const props=defineProps({
|
||||||
dialogTitle:{
|
dialogTitle:{
|
||||||
type:String,
|
type:String,
|
||||||
|
@ -56,30 +69,25 @@ const props=defineProps({
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
const form=ref({
|
const form=ref({
|
||||||
avatarUrl:'',
|
userAccount:"",
|
||||||
userAccount:'',
|
userPassword:"",
|
||||||
userPassword:'',
|
certificate_path: "",
|
||||||
username:null
|
certification_number: "",
|
||||||
|
email: "",
|
||||||
|
gender: null,
|
||||||
|
issuing_authority: "",
|
||||||
|
manicuristName: "",
|
||||||
|
phone: "",
|
||||||
|
rating: null,
|
||||||
|
salary: null,
|
||||||
|
specialties: ""
|
||||||
|
|
||||||
})
|
})
|
||||||
// const rules=ref({
|
|
||||||
// name: [
|
|
||||||
// {
|
|
||||||
// required: true,
|
|
||||||
// message: '请输入商品大类名称!'
|
|
||||||
// }
|
|
||||||
// ],
|
|
||||||
// remark: [
|
|
||||||
// {
|
|
||||||
// required: true,
|
|
||||||
// message: '请输入商品大类描述!'
|
|
||||||
// }
|
|
||||||
// ]
|
|
||||||
// })
|
|
||||||
const formRef=ref(null);
|
const formRef=ref(null);
|
||||||
|
|
||||||
// 定义父组件事件
|
// 定义父组件事件
|
||||||
const emits=defineEmits(['update:modelValue','initUserList'])
|
const emits=defineEmits(['update:modelValue','initEmployeeList'])
|
||||||
const handleClose=()=>{
|
const handleClose=()=>{
|
||||||
console.log("用户添加关闭xxx")
|
console.log("用户添加关闭xxx")
|
||||||
// 调用执行
|
// 调用执行
|
||||||
|
@ -88,13 +96,13 @@ const handleClose=()=>{
|
||||||
const handleConfirm=()=>{
|
const handleConfirm=()=>{
|
||||||
formRef.value.validate(async(valid)=>{
|
formRef.value.validate(async(valid)=>{
|
||||||
if(valid){
|
if(valid){
|
||||||
let result=await axios.post("user/add",form.value)
|
let result=await axios.post("manicurist/adminAdd",form.value)
|
||||||
console.log(result.data)
|
console.log(result.data)
|
||||||
let data=result.data;
|
let data=result.data;
|
||||||
if(data.code==0){
|
if(data.code==0){
|
||||||
ElMessage.success("执行添加成功!");
|
ElMessage.success("执行添加成功!");
|
||||||
formRef.value.resetFields();
|
formRef.value.resetFields();
|
||||||
emits("initUserList");
|
emits("initEmployeeList");
|
||||||
handleClose();
|
handleClose();
|
||||||
}else{
|
}else{
|
||||||
ElMessage.error(data.description);
|
ElMessage.error(data.description);
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<template>
|
<template>
|
||||||
<el-dialog
|
<el-dialog
|
||||||
model-value="dialogVisible"
|
model-value="edialogVisible"
|
||||||
:title="dialogTitle"
|
:title="dialogTitle"
|
||||||
width="30%"
|
width="30%"
|
||||||
@close="handleClose"
|
@close="handleClose"
|
||||||
|
@ -8,17 +8,14 @@
|
||||||
<el-form
|
<el-form
|
||||||
ref="formRef"
|
ref="formRef"
|
||||||
:model="form"
|
:model="form"
|
||||||
:rules="rules"
|
|
||||||
label-width="100px"
|
label-width="100px"
|
||||||
>
|
>
|
||||||
<el-form-item label="用户头像" prop="avatarUrl">
|
<el-form-item label="头像" prop="manicuristAvatar">
|
||||||
<img :src="form.avatarUrl" alt="空" width="50" height="50"/>
|
|
||||||
|
<img :src="form.manicuristAvatar" width="80px" height="80px"/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="用户昵称" prop="username">
|
<el-form-item label="用户昵称" prop="manicuristName">
|
||||||
{{form.username}}
|
{{form.manicuristName}}
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="用户账号" prop="userAccount">
|
|
||||||
{{form.userAccount}}
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="性别" prop="gender">
|
<el-form-item label="性别" prop="gender">
|
||||||
<template v-if="form.gender==0">女</template>
|
<template v-if="form.gender==0">女</template>
|
||||||
|
@ -30,24 +27,25 @@
|
||||||
<el-form-item label="邮箱" prop="email">
|
<el-form-item label="邮箱" prop="email">
|
||||||
{{form.email}}
|
{{form.email}}
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="用户状态" prop="userStatus">
|
<el-form-item label="工作名称" prop="specialties">
|
||||||
<template v-if="form.userStatus==0">禁用</template>
|
{{form.specialties}}
|
||||||
<template v-else>启用</template>
|
|
||||||
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="用户角色" prop="userRole">
|
<el-form-item label="工作时长" prop="employment_date">
|
||||||
<template v-if="form.userRole===0">普通用户</template>
|
{{form.employment_date}}
|
||||||
<template v-else-if="form.userRole===1">管理员</template>
|
</el-form-item>
|
||||||
<template v-else-if="form.userRole===2">商家</template>
|
<el-form-item label="评分" prop="rating">
|
||||||
<template v-else>美甲师</template>
|
{{form.rating}}
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="余额" prop="salary">
|
||||||
|
{{form.salary}}
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
<!-- <template #footer>-->
|
<template #footer v-if="title">
|
||||||
<!--<span class="dialog-footer">-->
|
<span class="dialog-footer">
|
||||||
<!--<el-button @click="handleClose">取消</el-button>-->
|
<el-button @click="handleClose">取消</el-button>
|
||||||
<!--<el-button type="primary" @click="handleConfirm">确认</el-button>-->
|
<el-button type="primary" @click="handleConfirm">审核成功</el-button>
|
||||||
<!--</span>-->
|
</span>
|
||||||
<!-- </template>-->
|
</template>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
</template>
|
</template>
|
||||||
<script setup>
|
<script setup>
|
||||||
|
@ -57,7 +55,7 @@ import { ElMessage } from "element-plus";
|
||||||
const props=defineProps({
|
const props=defineProps({
|
||||||
id:{
|
id:{
|
||||||
type:String,
|
type:String,
|
||||||
default:-1,
|
default:'',
|
||||||
required:true
|
required:true
|
||||||
},
|
},
|
||||||
dialogTitle:{
|
dialogTitle:{
|
||||||
|
@ -67,86 +65,72 @@ const props=defineProps({
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
const form=ref({
|
const form=ref({
|
||||||
avatarUrl: "",
|
id:null,
|
||||||
createTime:"",
|
email: "",
|
||||||
email:"",
|
gender: null,
|
||||||
gender:null,
|
phone: "",
|
||||||
isDelete:null,
|
businessId: "",
|
||||||
openId:null,
|
manicuristName: "",
|
||||||
phone:null,
|
employment_date: "",
|
||||||
unionId:null,
|
specialties: "",
|
||||||
updateTime:"",
|
rating: null,
|
||||||
userAccount:"",
|
salary: null,
|
||||||
userPassword:"",
|
auditStatus:null,
|
||||||
userRole:null,
|
manicuristAvatar: ""
|
||||||
userStatus:null,
|
|
||||||
username:""
|
|
||||||
})
|
})
|
||||||
// const rules=ref({
|
|
||||||
// name: [
|
|
||||||
// {
|
|
||||||
// required: true,
|
|
||||||
// message: '请输入商品大类名称!'
|
|
||||||
// }
|
|
||||||
// ],
|
|
||||||
// remark: [
|
|
||||||
// {
|
|
||||||
// required: true,
|
|
||||||
// message: '请输入商品大类描述!'
|
|
||||||
// }
|
|
||||||
// ]
|
|
||||||
// })
|
|
||||||
const formRef=ref(null);
|
|
||||||
const initFormData=async(ids)=>{
|
|
||||||
// console.log(ids)
|
|
||||||
const res=await axios.get("user/getById",{id: ids})
|
|
||||||
// console.log(res.data.data)
|
|
||||||
form.value=res.data.data;
|
|
||||||
|
|
||||||
|
const title=ref(false);
|
||||||
|
const formRef=ref(null);
|
||||||
|
const initFormData=async(id)=>{
|
||||||
|
|
||||||
|
const res = await axios.get("manicurist/queryById", {manicuristId: id})
|
||||||
|
form.value=res.data.data;
|
||||||
|
//console.log(res.data.data)
|
||||||
}
|
}
|
||||||
watch(
|
watch(
|
||||||
()=>props.id,
|
()=>props.id,
|
||||||
()=>{
|
()=>{
|
||||||
//console.log("id="+props.id);
|
//console.log("id="+props.id);
|
||||||
let ids=props.id;
|
if (props.dialogTitle=='审核美甲师'){
|
||||||
initFormData(ids)
|
title.value=true;
|
||||||
|
}
|
||||||
|
let id=props.id;
|
||||||
|
initFormData(id)
|
||||||
|
|
||||||
|
|
||||||
// }else{
|
|
||||||
// formRef.value.resetFields();
|
|
||||||
// form.value={
|
|
||||||
// id:-1,
|
|
||||||
// name:"",
|
|
||||||
// remark:""
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
// 定义父组件事件
|
// 定义父组件事件
|
||||||
const emits=defineEmits(['update:modelValue','initUserList'])
|
const emits=defineEmits(['update:modelValue','handleCollapse'])
|
||||||
const handleClose=()=>{
|
const handleClose=()=>{
|
||||||
console.log("xxx")
|
console.log("xxx")
|
||||||
// 调用执行
|
// 调用执行
|
||||||
emits('update:modelValue',false)
|
emits('update:modelValue',false)
|
||||||
}
|
}
|
||||||
// const handleConfirm=()=>{
|
|
||||||
// formRef.value.validate(async(valid)=>{
|
|
||||||
// if(valid){
|
const handleConfirm = () => {
|
||||||
// let result=await axios.post("admin/bigType/save",form.value)
|
form.value.auditStatus=1
|
||||||
// let data=result.data;
|
formRef.value.validate(async (valid) => {
|
||||||
// if(data.code==0){
|
if (valid) {
|
||||||
// ElMessage.success("执行成功!");
|
let result = await axios.post("manicurist/update", form.value)
|
||||||
// formRef.value.resetFields();
|
console.log(result.data.data)
|
||||||
// emits("initUserList");
|
let data = result.data;
|
||||||
// handleClose();
|
if (data.code == 0) {
|
||||||
// }else{
|
ElMessage.success("执行成功!");
|
||||||
// ElMessage.error(data.msg);
|
formRef.value.resetFields();
|
||||||
// }
|
emits("handleCollapse");
|
||||||
// }else{
|
handleClose();
|
||||||
// console.log("fail")
|
} else {
|
||||||
// return false
|
ElMessage.error(data.description);
|
||||||
// }
|
}
|
||||||
// })
|
} else {
|
||||||
// }
|
console.log("fail")
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
<style scoped>
|
<style scoped>
|
||||||
</style>
|
</style>
|
|
@ -1,58 +1,64 @@
|
||||||
<template>
|
<template>
|
||||||
|
<!-- <g-gantt-chart-->
|
||||||
|
<!-- chart-start="00:00"-->
|
||||||
|
<!-- chart-end="23:59"-->
|
||||||
|
<!-- precision="hour"-->
|
||||||
|
<!-- date-format="HH:mm"-->
|
||||||
|
<!-- bar-start="beginDate"-->
|
||||||
|
<!-- bar-end="endDate"-->
|
||||||
|
<!-- grid-->
|
||||||
|
<!-- >-->
|
||||||
|
<!-- <template #upper-timeunit>-->
|
||||||
|
<!-- <h1>-->
|
||||||
|
<!-- {{-->
|
||||||
|
<!-- `${weekRangeInChina.currentWeekStart} / ${weekRangeInChina.currentWeekEnd}`-->
|
||||||
|
<!-- }}-->
|
||||||
|
<!-- </h1>-->
|
||||||
|
<!-- </template>-->
|
||||||
|
<!-- <g-gantt-row-->
|
||||||
|
<!-- v-for="(item, index) in context"-->
|
||||||
|
<!-- :key="index"-->
|
||||||
|
<!-- :bars="item"-->
|
||||||
|
<!-- :label="item[0].week"-->
|
||||||
|
<!-- highlight-on-hover-->
|
||||||
|
<!-- />-->
|
||||||
|
<!-- </g-gantt-chart>-->
|
||||||
|
<!--=================================================================-->
|
||||||
<el-card>
|
<el-card>
|
||||||
<el-row :gutter="20" class="header">
|
<el-row :gutter="20" class="header">
|
||||||
<el-col :span="7">
|
<el-col :span="7">
|
||||||
<el-input placeholder="请输入用户昵称..." clearable v-model="queryForm.username"></el-input>
|
<el-input placeholder="请输入美甲师ID..." clearable v-model="query" ></el-input>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-button type="button" :icon="Search" @click="initUserList" >搜索</el-button>
|
<el-button type="button" :icon="Search" @click="initEmployeeList">搜索</el-button>
|
||||||
|
<el-button type="primary" :icon="DocumentAdd" @click="open">评优结算</el-button>
|
||||||
</el-row>
|
</el-row>
|
||||||
<el-table :data="tableData" stripe style="width: 100%;" showOverflowTooltip>
|
<el-table :data="tableData" stripe style="width: 100%;" showOverflowTooltip>
|
||||||
<el-table-column fixed prop="id" label="#ID" width="80" />
|
<el-table-column prop="id" label="#ID" width="80" />
|
||||||
<el-table-column prop="username" label="用户昵称" width="150" />
|
<el-table-column prop="manicuristName" label="用户昵称" width="200" />
|
||||||
<el-table-column prop="avatarUrl" label="头像" width="200">
|
<el-table-column prop="manicuristAvatar" label="头像" width="200">
|
||||||
<template v-slot="scope">
|
<template v-slot="scope">
|
||||||
<el-popover
|
<img :src="scope.row.manicuristAvatar" width="50" height="50"/>
|
||||||
placement="right-start"
|
|
||||||
:width="200"
|
|
||||||
trigger="hover"
|
|
||||||
:content="scope.row.avatarUrl"
|
|
||||||
>
|
|
||||||
<template #reference>
|
|
||||||
<img :src="scope.row.avatarUrl" width="50" height="50"/>
|
|
||||||
</template>
|
|
||||||
</el-popover>
|
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
|
<el-table-column prop="rating" label="评分" width="200px">
|
||||||
<el-table-column prop="userStatus" label="用户状态" width="100">
|
<template v-slot="scope" style="height: 100px">
|
||||||
<template v-slot="scope">
|
<div class="demo-rate-block">
|
||||||
<div v-if="scope.row.userStatus===0" style="color: red">
|
<el-rate v-model="scope.row.rating" :colors="colors"/>
|
||||||
禁用
|
{{scope.row.rating}}
|
||||||
</div>
|
|
||||||
<div style="color: lawngreen" v-else>
|
|
||||||
启用
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column prop="userRole" label="用户角色" width="100">
|
|
||||||
<template v-slot="scope">
|
|
||||||
<div v-if="scope.row.userRole===0">普通用户</div>
|
|
||||||
<div v-else-if="scope.row.userRole===1">管理员</div>
|
|
||||||
<div v-else-if="scope.row.userRole===2">商家</div>
|
|
||||||
<div v-else>美甲师</div>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
|
|
||||||
|
<el-table-column prop="createTime" label="注册日期" width="200"/>
|
||||||
<el-table-column prop="updateTime" label="最后登录日期" />
|
<el-table-column prop="updateTime" label="最后登录日期" width="200"/>
|
||||||
<el-table-column prop="action" fixed="right" label="操作" min-width="170">
|
<el-table-column prop="action" fixed="right" label="操作" min-width="220">
|
||||||
<template v-slot="scope" >
|
<template v-slot="scope" >
|
||||||
|
<!-- <el-button @click="handleRouter(scope.row.id)" type="primary" :icon="DocumentAdd" >审核美甲师</el-button>-->
|
||||||
<el-button type="success" size="small" @click="handleDialogValue(scope.row.id)">
|
<el-button type="success" size="small" @click="handleDialogValue(scope.row.id)">
|
||||||
详情
|
详情
|
||||||
</el-button>
|
</el-button>
|
||||||
<el-button type="primary" size="small" :icon="Edit" @click="handleUpdateDialogValue(scope.row.id)"></el-button>
|
<el-button type="primary" size="small" :icon="Edit" @click="handleUpdateDialogValue(scope.row.id)">评优详情</el-button>
|
||||||
<el-button type="danger" size="small" :icon="Delete" @click="handleDelete(scope.row.id)"></el-button>
|
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
|
@ -65,78 +71,89 @@
|
||||||
@size-change="handleSizeChange"
|
@size-change="handleSizeChange"
|
||||||
@current-change="handleCurrentChange"
|
@current-change="handleCurrentChange"
|
||||||
/>
|
/>
|
||||||
<!-- {{total}}-->
|
|
||||||
</el-card>
|
</el-card>
|
||||||
|
|
||||||
|
|
||||||
<Dialog v-model="UdialogVisible" :id="id" :dialogTitle="dialogTitle"
|
|
||||||
@initUserList="initUserList"></Dialog>
|
|
||||||
<AddDialog v-model="UdialogaddVisible" :dialogTitle="dialogTitle"
|
|
||||||
@initUserList="initUserList"></AddDialog>
|
|
||||||
<UpdateDialog v-model="UdialogUpdateVisible" :id="id" :dialogTitle="dialogTitle"
|
|
||||||
@initUserList="initUserList"></UpdateDialog>
|
|
||||||
|
|
||||||
|
|
||||||
|
<Dialog v-model="edialogVisible" :id="id" :dialogTitle="dialogTitle"
|
||||||
|
@initEmployeeList="initEmployeeList"></Dialog>
|
||||||
|
<AddDialog v-model="edialogaddVisible" :dialogTitle="dialogTitle"
|
||||||
|
@initEmployeeList="initEmployeeList"></AddDialog>
|
||||||
|
<UpdateDialog v-model="edialogUpdateVisible" :id="id" :dialogTitle="dialogTitle"
|
||||||
|
@initEmployeeList="initEmployeeList"></UpdateDialog>
|
||||||
</template>
|
</template>
|
||||||
<script setup>
|
<script setup>
|
||||||
import {Search,Delete,Edit,DocumentAdd,Close,Check} from '@element-plus/icons-vue'
|
import {Search,DocumentAdd,Delete,Edit} from '@element-plus/icons-vue'
|
||||||
import {ref, watch} from 'vue'
|
import {ref, watch} from 'vue'
|
||||||
import axios from "@/util/axios";
|
import axios from "@/util/axios";
|
||||||
import Dialog from '@/views/user/dialog/index.vue'
|
import Dialog from '@/views/permission/dialog/index.vue'
|
||||||
import AddDialog from '@/views/user/addDialog/index.vue'
|
import AddDialog from '@/views/permission/addDialog/index.vue'
|
||||||
import UpdateDialog from '@/views/user/updateDialog/index.vue'
|
import UpdateDialog from '@/views/permission/updateDialog/index.vue'
|
||||||
import { ElMessage,ElMessageBox } from "element-plus";
|
import { ElMessage,ElMessageBox } from "element-plus";
|
||||||
import {parseTime} from "element-plus/es/components/time-select/src/utils";
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const queryForm=ref({
|
const queryForm=ref({
|
||||||
username: '',
|
|
||||||
current:1,
|
current:1,
|
||||||
pageSize:10
|
pageSize:10
|
||||||
})
|
})
|
||||||
|
const query=ref();
|
||||||
|
const total=ref(0)
|
||||||
|
const tableData =ref([])
|
||||||
|
|
||||||
|
|
||||||
const id=ref('')
|
const id=ref('')
|
||||||
const dialogTitle=ref('');
|
const dialogTitle=ref('');
|
||||||
const UdialogaddVisible=ref(false)
|
const edialogaddVisible=ref(false)
|
||||||
const UdialogVisible=ref(false)
|
const edialogVisible=ref(false)
|
||||||
const UdialogUpdateVisible=ref(false)
|
const edialogUpdateVisible=ref(false)
|
||||||
|
|
||||||
|
|
||||||
|
import { Action } from 'element-plus'
|
||||||
|
|
||||||
|
const open = () => {
|
||||||
|
ElMessageBox.alert('此接口暂无', 'Title', {
|
||||||
|
confirmButtonText: 'OK',
|
||||||
|
// callback: ( Action) => {
|
||||||
|
// ElMessage({
|
||||||
|
// type: 'info',
|
||||||
|
// message: `action: ${Action}`,
|
||||||
|
// })
|
||||||
|
// }
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// watch(queryForm.value.username,()=>{
|
|
||||||
// // console.log(query.value)
|
|
||||||
// initUserList();
|
|
||||||
// },10000)
|
|
||||||
|
|
||||||
|
|
||||||
const handleDialogValue=(ids)=>{
|
const handleDialogValue=(ids)=>{
|
||||||
//console.log("bigTypeId="+userAccount)
|
|
||||||
// if(userAccount){
|
|
||||||
id.value=ids;
|
id.value=ids;
|
||||||
dialogTitle.value="用户详情"
|
dialogTitle.value="美甲师详情"
|
||||||
// console.log("asdfasdfasd"+useraccount.value)
|
edialogVisible.value=true
|
||||||
// }else{
|
|
||||||
// useraccount.value=-1;
|
|
||||||
// dialogTitle.value="添加用户"
|
|
||||||
// // console.log(dialogTitle.value)
|
|
||||||
// }
|
|
||||||
UdialogVisible.value=true
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const handleUpdateDialogValue=(ids)=>{
|
const handleUpdateDialogValue=(ids)=>{
|
||||||
// console.log(userAccount)
|
// console.log(id)
|
||||||
id.value=ids;
|
id.value=ids;
|
||||||
// console.log(userAccount.value)
|
// console.log(id.value)
|
||||||
dialogTitle.value="用户修改"
|
dialogTitle.value="美甲师修改"
|
||||||
UdialogUpdateVisible.value=true
|
edialogUpdateVisible.value=true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const handleAddDialogValue=()=>{
|
||||||
|
dialogTitle.value="美甲师添加"
|
||||||
|
edialogaddVisible.value=true
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const handleDelete=(ids)=>{
|
||||||
|
// console.log(ids)
|
||||||
|
|
||||||
//删除
|
|
||||||
|
|
||||||
const handleDelete=(id)=>{
|
|
||||||
// console.log(id)
|
|
||||||
ElMessageBox.confirm(
|
ElMessageBox.confirm(
|
||||||
'您确定要删除这条记录吗?',
|
'您确定要删除这条记录吗?',
|
||||||
'系统提示',
|
'系统提示',
|
||||||
|
@ -147,13 +164,13 @@ const handleDelete=(id)=>{
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
.then(async() => {
|
.then(async() => {
|
||||||
let res=await axios.post('user/delete',{id:id})
|
let res=await axios.post('manicurist/deleteMan?id='+Number(ids))
|
||||||
if(res.data.code==0){
|
if(res.data.code==0){
|
||||||
ElMessage({
|
ElMessage({
|
||||||
type: 'success',
|
type: 'success',
|
||||||
message: '删除成功',
|
message: '删除成功',
|
||||||
})
|
})
|
||||||
initSmallTypeList();
|
initEmployeeList();
|
||||||
}else{
|
}else{
|
||||||
ElMessage({
|
ElMessage({
|
||||||
type: 'error',
|
type: 'error',
|
||||||
|
@ -168,47 +185,200 @@ const handleDelete=(id)=>{
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const total=ref(0)
|
watch(query,()=>{
|
||||||
const tableData =ref([])
|
// console.log(query.value)
|
||||||
|
initEmployeeList();
|
||||||
|
},10000)
|
||||||
|
|
||||||
const initUserList=async()=>{
|
const tempstore=()=>{
|
||||||
// // console.log(query)
|
const temp=[]
|
||||||
// if (!query.value) {
|
tableData.value.map(item=>{
|
||||||
// const res = await axios.post("user/list/page", queryForm.value);
|
|
||||||
// // console.log(res)
|
if(item.manStatus==0)
|
||||||
// tableData.value = res.data.data.records;
|
{
|
||||||
// //console.log(res.data.data)
|
item.manStatus=true
|
||||||
// total.value = Number(res.data.data.total);
|
|
||||||
// }
|
|
||||||
// else{
|
|
||||||
// const res=await axios.get("user/getById", {id:query.value});
|
|
||||||
// // console.log(res.data.data)
|
|
||||||
// const temp=[];
|
|
||||||
// temp.push(res.data.data)
|
|
||||||
// tableData.value=temp;
|
|
||||||
// total.value=1;
|
|
||||||
// }
|
|
||||||
const res = await axios.post("user/list/page", queryForm.value);
|
|
||||||
// console.log(res.data.data.records)
|
|
||||||
if (res.data.data) {
|
|
||||||
tableData.value = res.data.data.records;
|
|
||||||
//console.log(res.data.data)
|
|
||||||
total.value = Number(res.data.data.total);
|
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
ElMessage.error(res.data.description);
|
item.manStatus=false
|
||||||
|
}
|
||||||
|
if (item.auditStatus==1)
|
||||||
|
{
|
||||||
|
temp.push(item)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
tableData.value=temp
|
||||||
|
//console.log(res.data.data)
|
||||||
|
|
||||||
|
}
|
||||||
|
const initEmployeeList=async()=>{
|
||||||
|
if (!query.value){
|
||||||
|
const res=await axios.post("manicurist/queryAll");
|
||||||
|
// console.log(res.data)
|
||||||
|
tableData.value=res.data.data;
|
||||||
|
let num=tableData.value.filter(item=>item.auditStatus==1)
|
||||||
|
total.value=num.length;
|
||||||
|
tempstore();
|
||||||
|
}else{
|
||||||
|
const res = await axios.get("manicurist/queryById", {manicuristId: query.value});
|
||||||
|
// console.log(res.data)
|
||||||
|
const temp = []
|
||||||
|
temp.push(res.data.data)
|
||||||
|
tableData.value = temp;
|
||||||
|
total.value = 1;
|
||||||
|
tempstore();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
initUserList();
|
initEmployeeList();
|
||||||
const handleSizeChange = (pageSize) => {
|
const handleSizeChange = (pageSize) => {
|
||||||
queryForm.value.current=1;
|
queryForm.value.current=1;
|
||||||
queryForm.value.pageSize=pageSize;
|
queryForm.value.pageSize=pageSize;
|
||||||
initUserList();
|
initEmployeeList();
|
||||||
}
|
}
|
||||||
const handleCurrentChange = (current1) => {
|
const handleCurrentChange = (current) => {
|
||||||
queryForm.value.current=current1;
|
queryForm.value.current=current;
|
||||||
initUserList();
|
initEmployeeList();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// =============================================
|
||||||
|
const colors = ref(['#99A9BF', '#F7BA2A', '#FF9900'])
|
||||||
|
|
||||||
|
// =========================================================================================================
|
||||||
|
|
||||||
|
|
||||||
|
const context = ref([
|
||||||
|
[
|
||||||
|
{
|
||||||
|
week: "星期一",
|
||||||
|
beginDate: "06:00",
|
||||||
|
endDate: "22:00",
|
||||||
|
ganttBarConfig: {
|
||||||
|
id: "0",
|
||||||
|
hasHandles: true,
|
||||||
|
label: "需求收集和分析 负责人:小张",
|
||||||
|
style: {
|
||||||
|
background: "#e96560"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{
|
||||||
|
week: "星期二",
|
||||||
|
beginDate: "09:00",
|
||||||
|
endDate: "18:00",
|
||||||
|
ganttBarConfig: {
|
||||||
|
id: "1",
|
||||||
|
hasHandles: true,
|
||||||
|
label: "系统设计 负责人:小强",
|
||||||
|
style: {
|
||||||
|
background: "#5ccfa3"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{
|
||||||
|
week: "星期三",
|
||||||
|
beginDate: "07:00",
|
||||||
|
endDate: "20:00",
|
||||||
|
ganttBarConfig: {
|
||||||
|
id: "2",
|
||||||
|
hasHandles: true,
|
||||||
|
label: "编码实现 负责人:老李",
|
||||||
|
style: {
|
||||||
|
background: "#77d6fa"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{
|
||||||
|
week: "星期四",
|
||||||
|
beginDate: "06:00",
|
||||||
|
endDate: "21:00",
|
||||||
|
ganttBarConfig: {
|
||||||
|
id: "3",
|
||||||
|
hasHandles: true,
|
||||||
|
label: "编码实现 负责人:小明",
|
||||||
|
style: {
|
||||||
|
color: "#fff",
|
||||||
|
background: "#1b2a47"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{
|
||||||
|
week: "星期五",
|
||||||
|
beginDate: "05:00",
|
||||||
|
endDate: "19:00",
|
||||||
|
ganttBarConfig: {
|
||||||
|
id: "4",
|
||||||
|
hasHandles: true,
|
||||||
|
label: "内部测试 负责人:小雪",
|
||||||
|
style: {
|
||||||
|
background: "#5ccfa3"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{
|
||||||
|
week: "星期六",
|
||||||
|
beginDate: "10:00",
|
||||||
|
endDate: "22:00",
|
||||||
|
ganttBarConfig: {
|
||||||
|
id: "5",
|
||||||
|
hasHandles: true,
|
||||||
|
label: "系统优化和文档整理 负责人:小欣",
|
||||||
|
style: {
|
||||||
|
background: "#f8bc45"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{
|
||||||
|
week: "星期天",
|
||||||
|
beginDate: "04:00",
|
||||||
|
endDate: "23:59",
|
||||||
|
ganttBarConfig: {
|
||||||
|
id: "6",
|
||||||
|
immobile: false,
|
||||||
|
hasHandles: false,
|
||||||
|
label: "部署和上线 负责人:老王",
|
||||||
|
style: {
|
||||||
|
background: "#f3953d"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
]);
|
||||||
|
|
||||||
|
|
||||||
|
const getWeekRange=()=> {
|
||||||
|
const today = new Date();
|
||||||
|
const dayOfWeek = today.getDay();
|
||||||
|
const startDate = new Date(today);
|
||||||
|
startDate.setDate(today.getDate() - dayOfWeek + 1);
|
||||||
|
const endDate = new Date(startDate);
|
||||||
|
endDate.setDate(startDate.getDate() + 6);
|
||||||
|
const formatDate = date => {
|
||||||
|
const year = date.getFullYear();
|
||||||
|
const month = String(date.getMonth() + 1).padStart(2, "0");
|
||||||
|
const day = String(date.getDate()).padStart(2, "0");
|
||||||
|
return `${year}-${month}-${day}`;
|
||||||
|
};
|
||||||
|
const currentWeekStart = formatDate(startDate);
|
||||||
|
const currentWeekEnd = formatDate(endDate);
|
||||||
|
return {
|
||||||
|
currentWeekStart,
|
||||||
|
currentWeekEnd
|
||||||
|
};
|
||||||
|
}
|
||||||
|
const weekRangeInChina = getWeekRange();
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
.header{
|
.header{
|
||||||
|
@ -220,4 +390,29 @@ const handleCurrentChange = (current1) => {
|
||||||
padding-top: 15px;
|
padding-top: 15px;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.demo-rate-block {
|
||||||
|
padding: 15px 0;
|
||||||
|
text-align: center;
|
||||||
|
border-right: solid 1px var(--el-border-color);
|
||||||
|
display: inline-block;
|
||||||
|
width: 49%;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
.demo-rate-block:last-child {
|
||||||
|
border-right: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.demo-rate-block .demonstration {
|
||||||
|
display: block;
|
||||||
|
color: var(--el-text-color-secondary);
|
||||||
|
font-size: 14px;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<template>
|
<template>
|
||||||
<el-dialog
|
<el-dialog
|
||||||
model-value="dialogUpdateVisible"
|
model-value="edialogUpdateVisible"
|
||||||
:title="dialogTitle"
|
:title="dialogTitle"
|
||||||
width="30%"
|
width="30%"
|
||||||
@close="handleClose"
|
@close="handleClose"
|
||||||
|
@ -10,25 +10,14 @@
|
||||||
:model="form"
|
:model="form"
|
||||||
label-width="100px"
|
label-width="100px"
|
||||||
>
|
>
|
||||||
<el-form-item label="用户头像" prop="avatarUrl">
|
<el-form-item label="头像" prop="manicuristAvatar">
|
||||||
<!-- {{ form.avatarUrl }}-->
|
<el-input v-model="form.manicuristAvatar"/>
|
||||||
<el-input v-model="form.avatarUrl"/>
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="用户昵称" prop="username">
|
<el-form-item label="用户昵称" prop="manicuristName">
|
||||||
<el-input v-model="form.username"/>
|
<el-input v-model="form.manicuristName"/>
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="用户ID" prop="id">
|
|
||||||
<el-input v-model="form.id"/>
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="性别" prop="gender">
|
<el-form-item label="性别" prop="gender">
|
||||||
<template v-if="form.gender==0">女</template>
|
<el-input v-model="form.gender"/>
|
||||||
<template v-else>男</template>
|
|
||||||
|
|
||||||
|
|
||||||
<el-radio-group v-model="form.gender">
|
|
||||||
<el-radio :value="0" size="default">女</el-radio>
|
|
||||||
<el-radio :value="1" size="default">男</el-radio>
|
|
||||||
</el-radio-group>
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="电话" prop="phone">
|
<el-form-item label="电话" prop="phone">
|
||||||
<el-input v-model="form.phone"/>
|
<el-input v-model="form.phone"/>
|
||||||
|
@ -36,27 +25,20 @@
|
||||||
<el-form-item label="邮箱" prop="email">
|
<el-form-item label="邮箱" prop="email">
|
||||||
<el-input v-model="form.email"/>
|
<el-input v-model="form.email"/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="用户状态" prop="userStatus">
|
<el-form-item label="工作名称" prop="specialties">
|
||||||
<el-input v-model="form.userStatus"/>
|
<el-input v-model="form.specialties"/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="用户角色" prop="userRole">
|
<el-form-item label="关联商家ID" prop="businessId">
|
||||||
<!-- {{form.userRole}}-->
|
<el-input v-model="form.businessId"/>
|
||||||
<!-- {{labelt}}-->
|
</el-form-item>
|
||||||
<!-- 展示由于v-model绑定出现v-model的form.userRole的值-->
|
<el-form-item label="工作时长" prop="employment_date">
|
||||||
<el-select
|
<el-input v-model="form.employment_date"/>
|
||||||
v-model="form.userRole"
|
</el-form-item>
|
||||||
size="default"
|
<el-form-item label="评分" prop="rating">
|
||||||
placeholder="用户角色"
|
<el-input v-model="form.rating"/>
|
||||||
style="width: 100%"
|
</el-form-item>
|
||||||
>
|
<el-form-item label="余额" prop="salary">
|
||||||
|
<el-input v-model="form.salary"/>
|
||||||
<el-option
|
|
||||||
v-for="item in options"
|
|
||||||
:key="item.value"
|
|
||||||
:label="item.label"
|
|
||||||
:value="item.value"
|
|
||||||
/>
|
|
||||||
</el-select>
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
<template #footer>
|
<template #footer>
|
||||||
|
@ -75,7 +57,7 @@ import {ElMessage} from "element-plus";
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
id: {
|
id: {
|
||||||
type: String,
|
type: String,
|
||||||
default: -1,
|
default: '',
|
||||||
required: true
|
required: true
|
||||||
},
|
},
|
||||||
dialogTitle: {
|
dialogTitle: {
|
||||||
|
@ -84,77 +66,52 @@ const props = defineProps({
|
||||||
required: true
|
required: true
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
const labelt=ref('')
|
|
||||||
|
|
||||||
const form = ref({
|
const form = ref({
|
||||||
id:null,
|
id:null,
|
||||||
avatarUrl: "",
|
|
||||||
email: "",
|
email: "",
|
||||||
gender: null,
|
gender: null,
|
||||||
phone: null,
|
phone: "",
|
||||||
userRole: null,
|
businessId: "",
|
||||||
userStatus: null,
|
manicuristName: "",
|
||||||
username: ""
|
employment_date: "",
|
||||||
|
specialties: "",
|
||||||
|
rating: null,
|
||||||
|
salary: null,
|
||||||
|
manicuristAvatar: ""
|
||||||
})
|
})
|
||||||
|
|
||||||
const options = [
|
|
||||||
{
|
|
||||||
value: '',
|
|
||||||
label: '用户身份',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
value: '0',
|
|
||||||
label: '普通用户',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
value: '1',
|
|
||||||
label: '管理员',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
value: '2',
|
|
||||||
label: '商家',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
value: '3',
|
|
||||||
label: '美甲师',
|
|
||||||
},
|
|
||||||
|
|
||||||
]
|
|
||||||
|
|
||||||
|
|
||||||
const formRef = ref(null);
|
const formRef = ref(null);
|
||||||
const initFormData = async (ids) => {
|
const initFormData = async (id) => {
|
||||||
const res = await axios.get("user/getById", {id: ids})
|
const res = await axios.get("manicurist/queryById", {manicuristId: id})
|
||||||
form.value = res.data.data;
|
form.value = res.data.data;
|
||||||
labelt.value=options[form.value.userRole].label
|
// console.log(res.data.data)
|
||||||
// console.log(options[form.value.userRole].label)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
watch(
|
watch(
|
||||||
() => props.id,
|
() => props.id,
|
||||||
() => {
|
() => {
|
||||||
// console.log("id=" + props.useraccount);
|
// console.log("id=" + props.id);
|
||||||
let ids = props.id;
|
let id = props.id;
|
||||||
initFormData(ids)
|
initFormData(id)
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
// 定义父组件事件
|
// 定义父组件事件
|
||||||
const emits = defineEmits(['update:modelValue', 'initUserList'])
|
const emits = defineEmits(['update:modelValue', 'initEmployeeList'])
|
||||||
const handleClose = () => {
|
const handleClose = () => {
|
||||||
console.log("xxx")
|
console.log("xxx")
|
||||||
// 调用执行
|
// 调用执行
|
||||||
|
|
||||||
emits('update:modelValue', false)
|
emits('update:modelValue', false)
|
||||||
}
|
}
|
||||||
const handleConfirm = () => {
|
const handleConfirm = () => {
|
||||||
formRef.value.validate(async (valid) => {
|
formRef.value.validate(async (valid) => {
|
||||||
if (valid) {
|
if (valid) {
|
||||||
let result = await axios.post("user/update", form.value)
|
let result = await axios.post("manicurist/update", form.value)
|
||||||
|
console.log(result.data.data)
|
||||||
let data = result.data;
|
let data = result.data;
|
||||||
if (data.code == 0) {
|
if (data.code == 0) {
|
||||||
ElMessage.success("执行成功!");
|
ElMessage.success("执行成功!");
|
||||||
formRef.value.resetFields();
|
formRef.value.resetFields();
|
||||||
emits("initUserList");
|
emits("initEmployeeList");
|
||||||
handleClose();
|
handleClose();
|
||||||
} else {
|
} else {
|
||||||
ElMessage.error(data.description);
|
ElMessage.error(data.description);
|
||||||
|
@ -168,4 +125,3 @@ const handleConfirm = () => {
|
||||||
</script>
|
</script>
|
||||||
<style scoped>
|
<style scoped>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<template>
|
<template>
|
||||||
<el-dialog
|
<el-dialog
|
||||||
model-value="dialogaddVisible"
|
model-value="RdialogaddVisible"
|
||||||
:title="dialogTitle"
|
:title="dialogTitle"
|
||||||
width="30%"
|
width="30%"
|
||||||
@close="handleClose"
|
@close="handleClose"
|
||||||
|
@ -10,26 +10,27 @@
|
||||||
:model="form"
|
:model="form"
|
||||||
label-width="100px"
|
label-width="100px"
|
||||||
>
|
>
|
||||||
<el-form-item label="门店头像" prop="avatarUrl">
|
|
||||||
|
|
||||||
<el-upload list-type="picture-card" limit="1" :auto-upload="false" drag action="#">
|
|
||||||
<el-icon><Plus /></el-icon>
|
|
||||||
<template #tip>
|
|
||||||
<div class="el-upload__tip">
|
|
||||||
(最多传一张)
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
</el-upload>
|
|
||||||
|
|
||||||
|
<el-form-item label="商家ID" prop="businessId">
|
||||||
|
<el-input v-model="form.businessId" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="用户昵称" prop="username">
|
<el-form-item label="美甲师ID" prop="manicuristId">
|
||||||
<el-input v-model="form.username" />
|
<el-input v-model="form.manicuristId" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="用户账号" prop="userAccount">
|
<el-form-item label="美甲师评分(0-5)" prop="manicuristRating">
|
||||||
<el-input v-model="form.userAccount" />
|
<el-input v-model="form.manicuristRating" show-password />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="用户密码" prop="userPassword">
|
<el-form-item label="订单ID" prop="orderId">
|
||||||
<el-input v-model="form.userPassword" show-password />
|
<el-input v-model="form.orderId" show-password />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="评分(0-5)" prop="rating">
|
||||||
|
<el-input v-model="form.rating" show-password />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="用户ID" prop="userId">
|
||||||
|
<el-input v-model="form.userId" show-password />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="回复" prop="review">
|
||||||
|
<el-input v-model="form.review" show-password />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
</el-form>
|
</el-form>
|
||||||
|
@ -56,30 +57,20 @@ const props=defineProps({
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
const form=ref({
|
const form=ref({
|
||||||
avatarUrl:'',
|
businessId: null,
|
||||||
userAccount:'',
|
manicuristId: null,
|
||||||
userPassword:'',
|
manicuristRating: null,
|
||||||
username:null
|
orderId: null,
|
||||||
|
rating: null,
|
||||||
|
review: "",
|
||||||
|
userId: null
|
||||||
|
|
||||||
})
|
})
|
||||||
// const rules=ref({
|
|
||||||
// name: [
|
|
||||||
// {
|
|
||||||
// required: true,
|
|
||||||
// message: '请输入商品大类名称!'
|
|
||||||
// }
|
|
||||||
// ],
|
|
||||||
// remark: [
|
|
||||||
// {
|
|
||||||
// required: true,
|
|
||||||
// message: '请输入商品大类描述!'
|
|
||||||
// }
|
|
||||||
// ]
|
|
||||||
// })
|
|
||||||
const formRef=ref(null);
|
const formRef=ref(null);
|
||||||
|
|
||||||
// 定义父组件事件
|
// 定义父组件事件
|
||||||
const emits=defineEmits(['update:modelValue','initUserList'])
|
const emits=defineEmits(['update:modelValue','initRatingList'])
|
||||||
const handleClose=()=>{
|
const handleClose=()=>{
|
||||||
console.log("用户添加关闭xxx")
|
console.log("用户添加关闭xxx")
|
||||||
// 调用执行
|
// 调用执行
|
||||||
|
@ -88,13 +79,13 @@ const handleClose=()=>{
|
||||||
const handleConfirm=()=>{
|
const handleConfirm=()=>{
|
||||||
formRef.value.validate(async(valid)=>{
|
formRef.value.validate(async(valid)=>{
|
||||||
if(valid){
|
if(valid){
|
||||||
let result=await axios.post("user/add",form.value)
|
let result=await axios.post("level/add",form.value)
|
||||||
console.log(result.data)
|
console.log(result.data)
|
||||||
let data=result.data;
|
let data=result.data;
|
||||||
if(data.code==0){
|
if(data.code==0){
|
||||||
ElMessage.success("执行添加成功!");
|
ElMessage.success("执行添加成功!");
|
||||||
formRef.value.resetFields();
|
formRef.value.resetFields();
|
||||||
emits("initUserList");
|
emits("initRatingList");
|
||||||
handleClose();
|
handleClose();
|
||||||
}else{
|
}else{
|
||||||
ElMessage.error(data.description);
|
ElMessage.error(data.description);
|
||||||
|
|
|
@ -2,10 +2,10 @@
|
||||||
<el-card>
|
<el-card>
|
||||||
<el-row :gutter="20" class="header">
|
<el-row :gutter="20" class="header">
|
||||||
<el-col :span="7">
|
<el-col :span="7">
|
||||||
<el-input placeholder="请输入用户昵称..." clearable v-model="queryForm.username"></el-input>
|
<el-input placeholder="请输入商家ID..." clearable v-model="businessId"></el-input>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-button type="button" :icon="Search" @click="initRatingList" >搜索</el-button>
|
<el-button type="button" :icon="Search" @click="initRatingList" >搜索</el-button>
|
||||||
<el-button type="primary" :icon="DocumentAdd" @click="handleAddDialogValue()" >添加评论</el-button>
|
<el-button type="primary" :icon="DocumentAdd" @click="handleAddDialogValue()" >添加用户评论</el-button>
|
||||||
</el-row>
|
</el-row>
|
||||||
<el-table :data="tableData" stripe style="width: 100%;" showOverflowTooltip>
|
<el-table :data="tableData" stripe style="width: 100%;" showOverflowTooltip>
|
||||||
<el-table-column fixed prop="id" label="#ID" width="80" />
|
<el-table-column fixed prop="id" label="#ID" width="80" />
|
||||||
|
@ -18,14 +18,11 @@
|
||||||
<el-table-column prop="businessReview" label="商家评论" width="200" />
|
<el-table-column prop="businessReview" label="商家评论" width="200" />
|
||||||
<el-table-column prop="createTime" label="注册日期" width="200"/>
|
<el-table-column prop="createTime" label="注册日期" width="200"/>
|
||||||
|
|
||||||
<el-table-column prop="action" fixed="right" label="操作" min-width="170">
|
<el-table-column prop="action" fixed="right" label="操作" min-width="200">
|
||||||
<!-- <template v-slot="scope" >-->
|
<template v-slot="scope" >
|
||||||
<!-- <el-button type="success" size="small" @click="handleDialogValue(scope.row.id)">-->
|
<el-button type="primary" size="small" :icon="Edit" @click="handleUpdateDialogValue(scope.row.id)">添加商家回复</el-button>
|
||||||
<!-- 详情-->
|
<el-button type="danger" size="small" :icon="Delete" @click="handleDelete(scope.row.id)"></el-button>
|
||||||
<!-- </el-button>-->
|
</template>
|
||||||
<!-- <el-button type="primary" size="small" :icon="Edit" @click="handleUpdateDialogValue(scope.row.id)"></el-button>-->
|
|
||||||
<!-- <el-button type="danger" size="small" :icon="Delete" @click="handleDelete(scope.row.id)"></el-button>-->
|
|
||||||
<!-- </template>-->
|
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
<el-pagination
|
<el-pagination
|
||||||
|
@ -37,62 +34,51 @@
|
||||||
@size-change="handleSizeChange"
|
@size-change="handleSizeChange"
|
||||||
@current-change="handleCurrentChange"
|
@current-change="handleCurrentChange"
|
||||||
/>
|
/>
|
||||||
<!-- {{total}}-->
|
|
||||||
</el-card>
|
</el-card>
|
||||||
|
|
||||||
|
|
||||||
<Dialog v-model="UdialogVisible" :id="id" :dialogTitle="dialogTitle"
|
|
||||||
@initUserList="initUserList"></Dialog>
|
<AddDialog v-model="RdialogaddVisible" :dialogTitle="dialogTitle"
|
||||||
<AddDialog v-model="UdialogaddVisible" :dialogTitle="dialogTitle"
|
@initRatingList="initRatingList"></AddDialog>
|
||||||
@initUserList="initUserList"></AddDialog>
|
<UpdateDialog v-model="RdialogUpdateVisible" :id="id" :dialogTitle="dialogTitle"
|
||||||
<UpdateDialog v-model="UdialogUpdateVisible" :id="id" :dialogTitle="dialogTitle"
|
@initRatingList="initRatingList"></UpdateDialog>
|
||||||
@initUserList="initUserList"></UpdateDialog>
|
|
||||||
|
|
||||||
</template>
|
</template>
|
||||||
<script setup>
|
<script setup>
|
||||||
import {Search,Delete,Edit,DocumentAdd,Close,Check} from '@element-plus/icons-vue'
|
import {Search,Delete,Edit,DocumentAdd,Close,Check} from '@element-plus/icons-vue'
|
||||||
import {ref, watch} from 'vue'
|
import {ref, watch} from 'vue'
|
||||||
import axios from "@/util/axios";
|
import axios from "@/util/axios";
|
||||||
import Dialog from '@/views/user/dialog/index.vue'
|
import UpdateDialog from '@/views/rating/updateDialog/index.vue'
|
||||||
import AddDialog from '@/views/user/addDialog/index.vue'
|
|
||||||
import UpdateDialog from '@/views/user/updateDialog/index.vue'
|
import AddDialog from '@/views/rating/addDialog/index.vue'
|
||||||
|
|
||||||
import { ElMessage,ElMessageBox } from "element-plus";
|
import { ElMessage,ElMessageBox } from "element-plus";
|
||||||
import {parseTime} from "element-plus/es/components/time-select/src/utils";
|
const dialogTitle=ref('')
|
||||||
|
const id=ref()
|
||||||
|
|
||||||
|
const RdialogaddVisible=ref(false)
|
||||||
|
const RdialogUpdateVisible=ref(false)
|
||||||
|
const handleAddDialogValue=()=>{
|
||||||
|
dialogTitle.value="添加用户评论"
|
||||||
|
RdialogaddVisible.value=true
|
||||||
|
}
|
||||||
|
const handleUpdateDialogValue=(ids)=>{
|
||||||
|
|
||||||
|
id.value=ids;
|
||||||
|
|
||||||
|
dialogTitle.value="添加商家回复"
|
||||||
|
RdialogUpdateVisible.value=true
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const businessId=ref()
|
||||||
const queryForm=ref({
|
const queryForm=ref({
|
||||||
username: '',
|
|
||||||
current:1,
|
current:1,
|
||||||
pageSize:10
|
pageSize:10
|
||||||
})
|
})
|
||||||
|
|
||||||
// const id=ref('')
|
|
||||||
// const dialogTitle=ref('');
|
|
||||||
// const UdialogaddVisible=ref(false)
|
|
||||||
// const UdialogVisible=ref(false)
|
|
||||||
// const UdialogUpdateVisible=ref(false)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// const handleDialogValue=(ids)=>{
|
|
||||||
// id.value=ids;
|
|
||||||
// dialogTitle.value="用户详情"
|
|
||||||
// UdialogVisible.value=true
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// const handleUpdateDialogValue=(ids)=>{
|
|
||||||
// id.value=ids;
|
|
||||||
// dialogTitle.value="用户修改"
|
|
||||||
// UdialogUpdateVisible.value=true
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// const handleAddDialogValue=()=>{
|
|
||||||
// dialogTitle.value="用户添加"
|
|
||||||
// UdialogaddVisible.value=true
|
|
||||||
// }
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//删除
|
//删除
|
||||||
|
@ -134,19 +120,34 @@ const total=ref(0)
|
||||||
const tableData =ref([])
|
const tableData =ref([])
|
||||||
|
|
||||||
const initRatingList=async()=>{
|
const initRatingList=async()=>{
|
||||||
|
// console.log(businessId.value)
|
||||||
|
if (!businessId.value){
|
||||||
const res = await axios.post("level/list");
|
const res = await axios.post("level/list");
|
||||||
|
// console.log(res.data.data)
|
||||||
|
if (res.data.data) {
|
||||||
|
tableData.value = res.data.data;
|
||||||
|
//console.log(res.data.data)
|
||||||
|
total.value = Number(res.data.data.length);
|
||||||
|
} else {
|
||||||
|
ElMessage.error(res.data.description);
|
||||||
|
}
|
||||||
|
}else {
|
||||||
|
const res = await axios.get("level/listBusinessRating",{businessId: businessId.value});
|
||||||
console.log(res.data.data)
|
console.log(res.data.data)
|
||||||
if (res.data.data) {
|
if (res.data.data) {
|
||||||
tableData.value = res.data.data;
|
tableData.value = res.data.data;
|
||||||
//console.log(res.data.data)
|
//console.log(res.data.data)
|
||||||
total.value = Number(res.data.data.length);
|
total.value = Number(res.data.data.length);
|
||||||
}
|
} else {
|
||||||
else{
|
|
||||||
ElMessage.error(res.data.description);
|
ElMessage.error(res.data.description);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
initRatingList();
|
initRatingList();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const handleSizeChange = (pageSize) => {
|
const handleSizeChange = (pageSize) => {
|
||||||
queryForm.value.current=1;
|
queryForm.value.current=1;
|
||||||
queryForm.value.pageSize=pageSize;
|
queryForm.value.pageSize=pageSize;
|
||||||
|
|
|
@ -1,63 +1,24 @@
|
||||||
<template>
|
<template>
|
||||||
<el-dialog
|
<el-dialog
|
||||||
model-value="dialogUpdateVisible"
|
model-value="RdialogUpdateVisible"
|
||||||
:title="dialogTitle"
|
:title="dialogTitle"
|
||||||
width="30%"
|
width="30%"
|
||||||
@close="handleClose"
|
@close="handleClose"
|
||||||
>
|
>
|
||||||
<el-form
|
<el-form
|
||||||
ref="formRef"
|
|
||||||
:model="form"
|
:model="form"
|
||||||
label-width="100px"
|
label-width="100px"
|
||||||
>
|
>
|
||||||
<el-form-item label="用户头像" prop="avatarUrl">
|
|
||||||
<!-- {{ form.avatarUrl }}-->
|
|
||||||
<el-input v-model="form.avatarUrl"/>
|
<el-form-item label="评论ID" >
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="用户昵称" prop="username">
|
|
||||||
<el-input v-model="form.username"/>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="用户ID" prop="id">
|
|
||||||
<el-input v-model="form.id"/>
|
<el-input v-model="form.id"/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="性别" prop="gender">
|
<el-form-item label="商家回复" >
|
||||||
<template v-if="form.gender==0">女</template>
|
<el-input v-model="form.businessReview"/>
|
||||||
<template v-else>男</template>
|
|
||||||
|
|
||||||
|
|
||||||
<el-radio-group v-model="form.gender">
|
|
||||||
<el-radio :value="0" size="default">女</el-radio>
|
|
||||||
<el-radio :value="1" size="default">男</el-radio>
|
|
||||||
</el-radio-group>
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="电话" prop="phone">
|
|
||||||
<el-input v-model="form.phone"/>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="邮箱" prop="email">
|
|
||||||
<el-input v-model="form.email"/>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="用户状态" prop="userStatus">
|
|
||||||
<el-input v-model="form.userStatus"/>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="用户角色" prop="userRole">
|
|
||||||
<!-- {{form.userRole}}-->
|
|
||||||
<!-- {{labelt}}-->
|
|
||||||
<!-- 展示由于v-model绑定出现v-model的form.userRole的值-->
|
|
||||||
<el-select
|
|
||||||
v-model="form.userRole"
|
|
||||||
size="default"
|
|
||||||
placeholder="用户角色"
|
|
||||||
style="width: 100%"
|
|
||||||
>
|
|
||||||
|
|
||||||
<el-option
|
|
||||||
v-for="item in options"
|
|
||||||
:key="item.value"
|
|
||||||
:label="item.label"
|
|
||||||
:value="item.value"
|
|
||||||
/>
|
|
||||||
</el-select>
|
|
||||||
</el-form-item>
|
|
||||||
</el-form>
|
</el-form>
|
||||||
<template #footer>
|
<template #footer>
|
||||||
<span class="dialog-footer">
|
<span class="dialog-footer">
|
||||||
|
@ -84,63 +45,24 @@ const props = defineProps({
|
||||||
required: true
|
required: true
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
const labelt=ref('')
|
|
||||||
|
|
||||||
const form = ref({
|
const form = ref({
|
||||||
id:null,
|
id:null,
|
||||||
avatarUrl: "",
|
businessReview: "",
|
||||||
email: "",
|
|
||||||
gender: null,
|
|
||||||
phone: null,
|
|
||||||
userRole: null,
|
|
||||||
userStatus: null,
|
|
||||||
username: ""
|
|
||||||
})
|
})
|
||||||
|
|
||||||
const options = [
|
|
||||||
{
|
|
||||||
value: '',
|
|
||||||
label: '用户身份',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
value: '0',
|
|
||||||
label: '普通用户',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
value: '1',
|
|
||||||
label: '管理员',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
value: '2',
|
|
||||||
label: '商家',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
value: '3',
|
|
||||||
label: '美甲师',
|
|
||||||
},
|
|
||||||
|
|
||||||
]
|
|
||||||
|
|
||||||
|
|
||||||
const formRef = ref(null);
|
|
||||||
const initFormData = async (ids) => {
|
|
||||||
const res = await axios.get("user/getById", {id: ids})
|
|
||||||
form.value = res.data.data;
|
|
||||||
labelt.value=options[form.value.userRole].label
|
|
||||||
// console.log(options[form.value.userRole].label)
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
watch(
|
watch(
|
||||||
() => props.id,
|
() => props.id,
|
||||||
() => {
|
() => {
|
||||||
// console.log("id=" + props.useraccount);
|
|
||||||
let ids = props.id;
|
form.value.id = props.id;
|
||||||
initFormData(ids)
|
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
// 定义父组件事件
|
// 定义父组件事件
|
||||||
const emits = defineEmits(['update:modelValue', 'initUserList'])
|
const emits = defineEmits(['update:modelValue', 'initRatingList'])
|
||||||
const handleClose = () => {
|
const handleClose = () => {
|
||||||
console.log("xxx")
|
console.log("xxx")
|
||||||
// 调用执行
|
// 调用执行
|
||||||
|
@ -149,12 +71,12 @@ const handleClose = () => {
|
||||||
const handleConfirm = () => {
|
const handleConfirm = () => {
|
||||||
formRef.value.validate(async (valid) => {
|
formRef.value.validate(async (valid) => {
|
||||||
if (valid) {
|
if (valid) {
|
||||||
let result = await axios.post("user/update", form.value)
|
let result = await axios.post("level/business/reply", form.value)
|
||||||
let data = result.data;
|
let data = result.data;
|
||||||
if (data.code == 0) {
|
if (data.code == 0) {
|
||||||
ElMessage.success("执行成功!");
|
ElMessage.success("执行成功!");
|
||||||
formRef.value.resetFields();
|
formRef.value.resetFields();
|
||||||
emits("initUserList");
|
emits("initRatingList");
|
||||||
handleClose();
|
handleClose();
|
||||||
} else {
|
} else {
|
||||||
ElMessage.error(data.description);
|
ElMessage.error(data.description);
|
||||||
|
|
|
@ -1,474 +0,0 @@
|
||||||
<template>
|
|
||||||
<el-row :gutter="16">
|
|
||||||
<el-col :span="6">
|
|
||||||
<div class="statistic-card">
|
|
||||||
<el-statistic :value="98500">
|
|
||||||
<template #title>
|
|
||||||
<div style="display: inline-flex; justify-self: right;align-items: center;width: 100%">
|
|
||||||
用户人数
|
|
||||||
<el-tooltip
|
|
||||||
effect="dark"
|
|
||||||
content="Number of users who logged into the product in one day"
|
|
||||||
placement="top"
|
|
||||||
>
|
|
||||||
<el-icon style="margin-left: 4px" :size="12">
|
|
||||||
<Warning />
|
|
||||||
</el-icon>
|
|
||||||
</el-tooltip>
|
|
||||||
<el-icon style="float: right" size="24"><Odometer /></el-icon>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
</el-statistic>
|
|
||||||
<div class="statistic-footer">
|
|
||||||
<div class="footer-item">
|
|
||||||
<span class="green">
|
|
||||||
+24%
|
|
||||||
<el-icon>
|
|
||||||
<CaretTop />
|
|
||||||
</el-icon>
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="6">
|
|
||||||
<div class="statistic-card">
|
|
||||||
<el-statistic :value="693700">
|
|
||||||
<template #title>
|
|
||||||
<div style="display: inline-flex; align-items: center">
|
|
||||||
商家人数
|
|
||||||
<el-tooltip
|
|
||||||
effect="dark"
|
|
||||||
content="Number of users who logged into the product in one month"
|
|
||||||
placement="top"
|
|
||||||
>
|
|
||||||
<el-icon style="margin-left: 4px" :size="12">
|
|
||||||
<Warning />
|
|
||||||
</el-icon>
|
|
||||||
</el-tooltip>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
</el-statistic>
|
|
||||||
<div class="statistic-footer">
|
|
||||||
<div class="footer-item">
|
|
||||||
|
|
||||||
<span class="red">
|
|
||||||
+12%
|
|
||||||
<el-icon>
|
|
||||||
<CaretBottom />
|
|
||||||
</el-icon>
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="6">
|
|
||||||
<div class="statistic-card">
|
|
||||||
<el-statistic :value="72000" title="New transactions today">
|
|
||||||
<template #title>
|
|
||||||
<div style="display: inline-flex; align-items: center">
|
|
||||||
订单数量
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
</el-statistic>
|
|
||||||
<div class="statistic-footer">
|
|
||||||
<div class="footer-item">
|
|
||||||
|
|
||||||
<span class="green">
|
|
||||||
+16%
|
|
||||||
<el-icon>
|
|
||||||
<CaretTop />
|
|
||||||
</el-icon>
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="6">
|
|
||||||
<div class="statistic-card">
|
|
||||||
<el-statistic :value="72000" title="New transactions today">
|
|
||||||
<template #title>
|
|
||||||
<div style="display: inline-flex; align-items: center">
|
|
||||||
用户满意度
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
</el-statistic>
|
|
||||||
<div class="statistic-footer">
|
|
||||||
<div class="footer-item">
|
|
||||||
<span class="green">
|
|
||||||
+16%
|
|
||||||
<el-icon>
|
|
||||||
<CaretTop />
|
|
||||||
</el-icon>
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</el-col>
|
|
||||||
</el-row>
|
|
||||||
|
|
||||||
<!-- ============================================================================ -->
|
|
||||||
<el-row :gutter="16">
|
|
||||||
<el-col :span="18">
|
|
||||||
<div class="statistic-card">
|
|
||||||
<div style="display: inline-flex; justify-self: right;align-items: center;width: 100%">
|
|
||||||
分析概览
|
|
||||||
</div>
|
|
||||||
<div class="statistic-footer">
|
|
||||||
<div class="footer-item">
|
|
||||||
<div id="main1" style="height: 320px;width: 780px;border: 1px solid #ebebeb;border-radius: 2px;"></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="6">
|
|
||||||
<div class="statistic-card">
|
|
||||||
<div style="display: inline-flex; justify-self: right;align-items: center;width: 100%">
|
|
||||||
每周展示
|
|
||||||
</div>
|
|
||||||
<div class="statistic-footer">
|
|
||||||
<div class="footer-item">
|
|
||||||
<div style="height: 320px;width: 220px;border: 1px solid #ebebeb;border-radius: 2px;">
|
|
||||||
<div class="common" >
|
|
||||||
<div style="flex: 8"><el-progress
|
|
||||||
:text-inside="true"
|
|
||||||
:stroke-width="15"
|
|
||||||
:percentage="100"
|
|
||||||
duration="30"
|
|
||||||
color="#26ce83"
|
|
||||||
striped
|
|
||||||
striped-flow
|
|
||||||
/></div>
|
|
||||||
<div style="flex: 1">周日</div>
|
|
||||||
</div>
|
|
||||||
<!-- ---------->
|
|
||||||
<div class="common">
|
|
||||||
<div style="flex: 8"><el-progress
|
|
||||||
:text-inside="true"
|
|
||||||
:stroke-width="15"
|
|
||||||
:percentage="100"
|
|
||||||
duration="30"
|
|
||||||
color="#26ce83"
|
|
||||||
striped
|
|
||||||
striped-flow
|
|
||||||
/></div>
|
|
||||||
<div style="flex: 1">周六</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="common">
|
|
||||||
<div style="flex: 8"><el-progress
|
|
||||||
:text-inside="true"
|
|
||||||
:stroke-width="15"
|
|
||||||
:percentage="100"
|
|
||||||
duration="30"
|
|
||||||
color="#26ce83"
|
|
||||||
striped
|
|
||||||
striped-flow
|
|
||||||
/></div>
|
|
||||||
<div style="flex: 1">周五</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="common">
|
|
||||||
<div style="flex: 8"><el-progress
|
|
||||||
:text-inside="true"
|
|
||||||
:stroke-width="15"
|
|
||||||
:percentage="100"
|
|
||||||
duration="30"
|
|
||||||
color="#26ce83"
|
|
||||||
striped
|
|
||||||
striped-flow
|
|
||||||
/></div>
|
|
||||||
<div style="flex: 1">周四</div>
|
|
||||||
</div>
|
|
||||||
<div class="common">
|
|
||||||
<div style="flex: 8"><el-progress
|
|
||||||
:text-inside="true"
|
|
||||||
:stroke-width="15"
|
|
||||||
:percentage="100"
|
|
||||||
duration="30"
|
|
||||||
color="#26ce83"
|
|
||||||
striped
|
|
||||||
striped-flow
|
|
||||||
/></div>
|
|
||||||
<div style="flex: 1">周三</div>
|
|
||||||
</div>
|
|
||||||
<div class="common">
|
|
||||||
<div style="flex: 8"><el-progress
|
|
||||||
:text-inside="true"
|
|
||||||
:stroke-width="15"
|
|
||||||
:percentage="100"
|
|
||||||
duration="30"
|
|
||||||
color="#26ce83"
|
|
||||||
striped
|
|
||||||
striped-flow
|
|
||||||
/></div>
|
|
||||||
<div style="flex: 1">周二</div>
|
|
||||||
</div>
|
|
||||||
<div class="common">
|
|
||||||
<div style="flex: 8"><el-progress
|
|
||||||
:text-inside="true"
|
|
||||||
:stroke-width="15"
|
|
||||||
:percentage="100"
|
|
||||||
duration="30"
|
|
||||||
color="#26ce83"
|
|
||||||
striped
|
|
||||||
striped-flow
|
|
||||||
/></div>
|
|
||||||
<div style="flex: 1">周一</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</el-col>
|
|
||||||
|
|
||||||
</el-row>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script setup>
|
|
||||||
import {
|
|
||||||
ArrowRight,
|
|
||||||
Odometer,
|
|
||||||
CaretBottom,
|
|
||||||
CaretTop,
|
|
||||||
Warning,
|
|
||||||
} from '@element-plus/icons-vue'
|
|
||||||
import {onMounted} from "vue";
|
|
||||||
import * as echarts from 'echarts';
|
|
||||||
|
|
||||||
onMounted(async () => {
|
|
||||||
setTimeout(() => {hei();}, 500)
|
|
||||||
})
|
|
||||||
const hei=()=>{
|
|
||||||
|
|
||||||
var app = {};
|
|
||||||
|
|
||||||
var chartDom = document.getElementById('main1');
|
|
||||||
var myChart = echarts.init(chartDom);
|
|
||||||
var option;
|
|
||||||
|
|
||||||
const posList = [
|
|
||||||
'left',
|
|
||||||
'right',
|
|
||||||
'top',
|
|
||||||
'bottom',
|
|
||||||
'inside',
|
|
||||||
'insideTop',
|
|
||||||
'insideLeft',
|
|
||||||
'insideRight',
|
|
||||||
'insideBottom',
|
|
||||||
'insideTopLeft',
|
|
||||||
'insideTopRight',
|
|
||||||
'insideBottomLeft',
|
|
||||||
'insideBottomRight'
|
|
||||||
];
|
|
||||||
app.configParameters = {
|
|
||||||
rotate: {
|
|
||||||
min: -90,
|
|
||||||
max: 90
|
|
||||||
},
|
|
||||||
align: {
|
|
||||||
options: {
|
|
||||||
left: 'left',
|
|
||||||
center: 'center',
|
|
||||||
right: 'right'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
verticalAlign: {
|
|
||||||
options: {
|
|
||||||
top: 'top',
|
|
||||||
middle: 'middle',
|
|
||||||
bottom: 'bottom'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
position: {
|
|
||||||
options: posList.reduce(function (map, pos) {
|
|
||||||
map[pos] = pos;
|
|
||||||
return map;
|
|
||||||
}, {})
|
|
||||||
},
|
|
||||||
distance: {
|
|
||||||
min: 0,
|
|
||||||
max: 100
|
|
||||||
}
|
|
||||||
};
|
|
||||||
app.config = {
|
|
||||||
rotate: 90,
|
|
||||||
align: 'left',
|
|
||||||
verticalAlign: 'middle',
|
|
||||||
position: 'insideBottom',
|
|
||||||
distance: 15,
|
|
||||||
onChange: function () {
|
|
||||||
const labelOption = {
|
|
||||||
rotate: app.config.rotate,
|
|
||||||
align: app.config.align,
|
|
||||||
verticalAlign: app.config.verticalAlign,
|
|
||||||
position: app.config.position,
|
|
||||||
distance: app.config.distance
|
|
||||||
};
|
|
||||||
myChart.setOption({
|
|
||||||
series: [
|
|
||||||
{
|
|
||||||
label: labelOption
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: labelOption
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: labelOption
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: labelOption
|
|
||||||
}
|
|
||||||
]
|
|
||||||
});
|
|
||||||
}
|
|
||||||
};
|
|
||||||
const labelOption = {
|
|
||||||
show: true,
|
|
||||||
position: app.config.position,
|
|
||||||
distance: app.config.distance,
|
|
||||||
align: app.config.align,
|
|
||||||
verticalAlign: app.config.verticalAlign,
|
|
||||||
rotate: app.config.rotate,
|
|
||||||
formatter: '{c} {name|{a}}',
|
|
||||||
fontSize: 16,
|
|
||||||
rich: {
|
|
||||||
name: {}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
option = {
|
|
||||||
tooltip: {
|
|
||||||
trigger: 'axis',
|
|
||||||
axisPointer: {
|
|
||||||
type: 'shadow'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
legend: {
|
|
||||||
data: ['Forest', 'Steppe', 'Desert', 'Wetland']
|
|
||||||
},
|
|
||||||
toolbox: {
|
|
||||||
show: true,
|
|
||||||
orient: 'vertical',
|
|
||||||
left: 'right',
|
|
||||||
top: 'center',
|
|
||||||
feature: {
|
|
||||||
mark: { show: true },
|
|
||||||
dataView: { show: true, readOnly: false },
|
|
||||||
magicType: { show: true, type: ['line', 'bar', 'stack'] },
|
|
||||||
restore: { show: true },
|
|
||||||
saveAsImage: { show: true }
|
|
||||||
}
|
|
||||||
},
|
|
||||||
xAxis: [
|
|
||||||
{
|
|
||||||
type: 'category',
|
|
||||||
axisTick: { show: false },
|
|
||||||
data: ['2012', '2013', '2014', '2015', '2016']
|
|
||||||
}
|
|
||||||
],
|
|
||||||
yAxis: [
|
|
||||||
{
|
|
||||||
type: 'value'
|
|
||||||
}
|
|
||||||
],
|
|
||||||
series: [
|
|
||||||
{
|
|
||||||
name: 'Forest',
|
|
||||||
type: 'bar',
|
|
||||||
barGap: 0,
|
|
||||||
label: labelOption,
|
|
||||||
emphasis: {
|
|
||||||
focus: 'series'
|
|
||||||
},
|
|
||||||
data: [320, 332, 301, 334, 390]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: 'Steppe',
|
|
||||||
type: 'bar',
|
|
||||||
label: labelOption,
|
|
||||||
emphasis: {
|
|
||||||
focus: 'series'
|
|
||||||
},
|
|
||||||
data: [220, 182, 191, 234, 290]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: 'Desert',
|
|
||||||
type: 'bar',
|
|
||||||
label: labelOption,
|
|
||||||
emphasis: {
|
|
||||||
focus: 'series'
|
|
||||||
},
|
|
||||||
data: [150, 232, 201, 154, 190]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: 'Wetland',
|
|
||||||
type: 'bar',
|
|
||||||
label: labelOption,
|
|
||||||
emphasis: {
|
|
||||||
focus: 'series'
|
|
||||||
},
|
|
||||||
data: [98, 77, 101, 99, 40]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
};
|
|
||||||
|
|
||||||
option && myChart.setOption(option);
|
|
||||||
}
|
|
||||||
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<style scoped>
|
|
||||||
:global(h2#card-usage ~ .example .example-showcase) {
|
|
||||||
background-color: var(--el-fill-color) !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
.common{
|
|
||||||
display: flex;
|
|
||||||
padding: 15px 0 15px;
|
|
||||||
}
|
|
||||||
.common_left{
|
|
||||||
flex: 8;
|
|
||||||
}
|
|
||||||
.common_right{
|
|
||||||
flex: 1;
|
|
||||||
}
|
|
||||||
.statistic-card {
|
|
||||||
|
|
||||||
padding: 20px;
|
|
||||||
border-radius: 4px;
|
|
||||||
margin-bottom: 20px;
|
|
||||||
background-color: #f0f2f5;
|
|
||||||
}
|
|
||||||
|
|
||||||
.statistic-footer {
|
|
||||||
display: flex;
|
|
||||||
justify-content: space-between;
|
|
||||||
align-items: center;
|
|
||||||
flex-wrap: wrap;
|
|
||||||
font-size: 12px;
|
|
||||||
color: var(--el-text-color-regular);
|
|
||||||
margin-top: 16px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.statistic-footer .footer-item {
|
|
||||||
display: flex;
|
|
||||||
justify-content: space-between;
|
|
||||||
align-items: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
.statistic-footer .footer-item span:last-child {
|
|
||||||
display: inline-flex;
|
|
||||||
align-items: center;
|
|
||||||
margin-left: 4px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.green {
|
|
||||||
color: var(--el-color-success);
|
|
||||||
}
|
|
||||||
.red {
|
|
||||||
color: var(--el-color-error);
|
|
||||||
}
|
|
||||||
</style>
|
|
Loading…
Reference in New Issue
Block a user