diff --git a/code/db/pkg/telsale_archievement_pkg.pck b/code/db/pkg/telsale_archievement_pkg.pck index 15bda13..a22ea8a 100644 --- a/code/db/pkg/telsale_archievement_pkg.pck +++ b/code/db/pkg/telsale_archievement_pkg.pck @@ -160,11 +160,12 @@ CREATE OR REPLACE PACKAGE BODY telsale_archievement_pkg IS -- 续保率排行榜 OPEN a_renewal_ranking_list FOR SELECT 坐席名称, - round(nvl(已续保累计 / 到期数 * 100, + round(nvl((SUM(已续保累计) / SUM(到期数)) * 100, 0), 2) 续保率 FROM 坐席续保统计 xb - WHERE xb.部门 = '续保业务部' + WHERE xb.部门 = l_department_name + GROUP BY 坐席名称 ORDER BY 续保率 DESC; END; diff --git a/code/db/甯哥敤璇彞.sql b/code/db/甯哥敤璇彞.sql index 06a05de..de0fd2d 100644 --- a/code/db/甯哥敤璇彞.sql +++ b/code/db/甯哥敤璇彞.sql @@ -61,10 +61,17 @@ SELECT 2) 车非渗透率 FROM 坐席车非每日保费 WHERE 部门代码 = 'QDI' - AND 月份 = '06' + AND 月份 = '05' + AND 年份 = '2023' GROUP BY 坐席名称 ORDER BY 车非渗透率 DESC; --续保率 -SELECT * - FROM 坐席续保统计 +SELECT 坐席名称, + round(nvl(SUM(已续保累计) / SUM(到期数) * 100, + 0), + 2) 续保率 + FROM 坐席续保统计 xb + WHERE xb.部门 = '续保业务部' + GROUP BY 坐席名称 + ORDER BY 坐席名称 DESC; diff --git a/code/web/task_schedule/package-lock.json b/code/web/task_schedule/package-lock.json index a9f5d4e..99c433f 100644 --- a/code/web/task_schedule/package-lock.json +++ b/code/web/task_schedule/package-lock.json @@ -13,26 +13,26 @@ "axios": "^1.4.0", "babel": "^6.23.0", "echarts": "^5.4.2", - "element-plus": "^2.3.5", + "element-plus": "^2.3.6", "moment": "^2.29.4", "sass-loader": "^13.3.1", "vue": "^3.3.4", - "vue-router": "^4.2.1", + "vue-router": "^4.2.2", "vuex": "^4.1.0" }, "devDependencies": { "@babel/eslint-parser": "^7.21.8", - "@typescript-eslint/eslint-plugin": "^5.59.7", - "@typescript-eslint/parser": "^5.59.7", + "@typescript-eslint/eslint-plugin": "^5.59.9", + "@typescript-eslint/parser": "^5.59.9", "@vitejs/plugin-vue": "^4.2.3", "@vue/cli-plugin-eslint": "^5.0.8", "eslint-config-recommended": "^4.1.0", - "eslint-config-standard-with-typescript": "^34.0.1", + "eslint-config-standard-with-typescript": "^35.0.0", "eslint-plugin-vue": "^9.14.1", "node-sass": "^9.0.0", "sass": "^1.62.1", "style-loader": "^3.3.3", - "typescript": "^5.0.4", + "typescript": "^5.1.3", "vue-eslint-parser": "^9.3.0" } }, @@ -1528,15 +1528,15 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.59.7", - "resolved": "https://registry.npmmirror.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.59.7.tgz", - "integrity": "sha512-BL+jYxUFIbuYwy+4fF86k5vdT9lT0CNJ6HtwrIvGh0PhH8s0yy5rjaKH2fDCrz5ITHy07WCzVGNvAmjJh4IJFA==", + "version": "5.59.9", + "resolved": "https://registry.npmmirror.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.59.9.tgz", + "integrity": "sha512-4uQIBq1ffXd2YvF7MAvehWKW3zVv/w+mSfRAu+8cKbfj3nwzyqJLNcZJpQ/WZ1HLbJDiowwmQ6NO+63nCA+fqA==", "dev": true, "dependencies": { "@eslint-community/regexpp": "^4.4.0", - "@typescript-eslint/scope-manager": "5.59.7", - "@typescript-eslint/type-utils": "5.59.7", - "@typescript-eslint/utils": "5.59.7", + "@typescript-eslint/scope-manager": "5.59.9", + "@typescript-eslint/type-utils": "5.59.9", + "@typescript-eslint/utils": "5.59.9", "debug": "^4.3.4", "grapheme-splitter": "^1.0.4", "ignore": "^5.2.0", @@ -1591,14 +1591,14 @@ "dev": true }, "node_modules/@typescript-eslint/parser": { - "version": "5.59.7", - "resolved": "https://registry.npmmirror.com/@typescript-eslint/parser/-/parser-5.59.7.tgz", - "integrity": "sha512-VhpsIEuq/8i5SF+mPg9jSdIwgMBBp0z9XqjiEay+81PYLJuroN+ET1hM5IhkiYMJd9MkTz8iJLt7aaGAgzWUbQ==", + "version": "5.59.9", + "resolved": "https://registry.npmmirror.com/@typescript-eslint/parser/-/parser-5.59.9.tgz", + "integrity": "sha512-FsPkRvBtcLQ/eVK1ivDiNYBjn3TGJdXy2fhXX+rc7czWl4ARwnpArwbihSOHI2Peg9WbtGHrbThfBUkZZGTtvQ==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.59.7", - "@typescript-eslint/types": "5.59.7", - "@typescript-eslint/typescript-estree": "5.59.7", + "@typescript-eslint/scope-manager": "5.59.9", + "@typescript-eslint/types": "5.59.9", + "@typescript-eslint/typescript-estree": "5.59.9", "debug": "^4.3.4" }, "engines": { @@ -1614,26 +1614,26 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "5.59.7", - "resolved": "https://registry.npmmirror.com/@typescript-eslint/scope-manager/-/scope-manager-5.59.7.tgz", - "integrity": "sha512-FL6hkYWK9zBGdxT2wWEd2W8ocXMu3K94i3gvMrjXpx+koFYdYV7KprKfirpgY34vTGzEPPuKoERpP8kD5h7vZQ==", + "version": "5.59.9", + "resolved": "https://registry.npmmirror.com/@typescript-eslint/scope-manager/-/scope-manager-5.59.9.tgz", + "integrity": "sha512-8RA+E+w78z1+2dzvK/tGZ2cpGigBZ58VMEHDZtpE1v+LLjzrYGc8mMaTONSxKyEkz3IuXFM0IqYiGHlCsmlZxQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.59.7", - "@typescript-eslint/visitor-keys": "5.59.7" + "@typescript-eslint/types": "5.59.9", + "@typescript-eslint/visitor-keys": "5.59.9" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/@typescript-eslint/type-utils": { - "version": "5.59.7", - "resolved": "https://registry.npmmirror.com/@typescript-eslint/type-utils/-/type-utils-5.59.7.tgz", - "integrity": "sha512-ozuz/GILuYG7osdY5O5yg0QxXUAEoI4Go3Do5xeu+ERH9PorHBPSdvD3Tjp2NN2bNLh1NJQSsQu2TPu/Ly+HaQ==", + "version": "5.59.9", + "resolved": "https://registry.npmmirror.com/@typescript-eslint/type-utils/-/type-utils-5.59.9.tgz", + "integrity": "sha512-ksEsT0/mEHg9e3qZu98AlSrONAQtrSTljL3ow9CGej8eRo7pe+yaC/mvTjptp23Xo/xIf2mLZKC6KPv4Sji26Q==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "5.59.7", - "@typescript-eslint/utils": "5.59.7", + "@typescript-eslint/typescript-estree": "5.59.9", + "@typescript-eslint/utils": "5.59.9", "debug": "^4.3.4", "tsutils": "^3.21.0" }, @@ -1650,22 +1650,22 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "5.59.7", - "resolved": "https://registry.npmmirror.com/@typescript-eslint/types/-/types-5.59.7.tgz", - "integrity": "sha512-UnVS2MRRg6p7xOSATscWkKjlf/NDKuqo5TdbWck6rIRZbmKpVNTLALzNvcjIfHBE7736kZOFc/4Z3VcZwuOM/A==", + "version": "5.59.9", + "resolved": "https://registry.npmmirror.com/@typescript-eslint/types/-/types-5.59.9.tgz", + "integrity": "sha512-uW8H5NRgTVneSVTfiCVffBb8AbwWSKg7qcA4Ot3JI3MPCJGsB4Db4BhvAODIIYE5mNj7Q+VJkK7JxmRhk2Lyjw==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.59.7", - "resolved": "https://registry.npmmirror.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.7.tgz", - "integrity": "sha512-4A1NtZ1I3wMN2UGDkU9HMBL+TIQfbrh4uS0WDMMpf3xMRursDbqEf1ahh6vAAe3mObt8k3ZATnezwG4pdtWuUQ==", + "version": "5.59.9", + "resolved": "https://registry.npmmirror.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.9.tgz", + "integrity": "sha512-pmM0/VQ7kUhd1QyIxgS+aRvMgw+ZljB3eDb+jYyp6d2bC0mQWLzUDF+DLwCTkQ3tlNyVsvZRXjFyV0LkU/aXjA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.59.7", - "@typescript-eslint/visitor-keys": "5.59.7", + "@typescript-eslint/types": "5.59.9", + "@typescript-eslint/visitor-keys": "5.59.9", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -1715,17 +1715,17 @@ "dev": true }, "node_modules/@typescript-eslint/utils": { - "version": "5.59.7", - "resolved": "https://registry.npmmirror.com/@typescript-eslint/utils/-/utils-5.59.7.tgz", - "integrity": "sha512-yCX9WpdQKaLufz5luG4aJbOpdXf/fjwGMcLFXZVPUz3QqLirG5QcwwnIHNf8cjLjxK4qtzTO8udUtMQSAToQnQ==", + "version": "5.59.9", + "resolved": "https://registry.npmmirror.com/@typescript-eslint/utils/-/utils-5.59.9.tgz", + "integrity": "sha512-1PuMYsju/38I5Ggblaeb98TOoUvjhRvLpLa1DoTOFaLWqaXl/1iQ1eGurTXgBY58NUdtfTXKP5xBq7q9NDaLKg==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@types/json-schema": "^7.0.9", "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.59.7", - "@typescript-eslint/types": "5.59.7", - "@typescript-eslint/typescript-estree": "5.59.7", + "@typescript-eslint/scope-manager": "5.59.9", + "@typescript-eslint/types": "5.59.9", + "@typescript-eslint/typescript-estree": "5.59.9", "eslint-scope": "^5.1.1", "semver": "^7.3.7" }, @@ -1770,12 +1770,12 @@ "dev": true }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.59.7", - "resolved": "https://registry.npmmirror.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.7.tgz", - "integrity": "sha512-tyN+X2jvMslUszIiYbF0ZleP+RqQsFVpGrKI6e0Eet1w8WmhsAtmzaqm8oM8WJQ1ysLwhnsK/4hYHJjOgJVfQQ==", + "version": "5.59.9", + "resolved": "https://registry.npmmirror.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.9.tgz", + "integrity": "sha512-bT7s0td97KMaLwpEBckbzj/YohnvXtqbe2XgqNvTl6RJVakY5mvENOTPvw5u66nljfZxthESpDozs86U+oLY8Q==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.59.7", + "@typescript-eslint/types": "5.59.9", "eslint-visitor-keys": "^3.3.0" }, "engines": { @@ -4589,9 +4589,9 @@ "integrity": "sha512-zx8hqumOqltKsv/MF50yvdAlPF9S/4PXbyfzJS6ZGhbddGkRegdwImmfSVqCkEziYzrIGZ/TlrzBND4FysfkDg==" }, "node_modules/element-plus": { - "version": "2.3.5", - "resolved": "https://registry.npmmirror.com/element-plus/-/element-plus-2.3.5.tgz", - "integrity": "sha512-g27DHm2C5/tPwte9H6Juu+JOdzT9z1ALHTIvia6MwnBdCrI4kd77o6KcYdodU15/tYiPBoCEmobhl/7GUDb+1Q==", + "version": "2.3.6", + "resolved": "https://registry.npmmirror.com/element-plus/-/element-plus-2.3.6.tgz", + "integrity": "sha512-GLz0pXUYI2zRfIgyI6W7SWmHk6dSEikP9yR++hsQUyy63+WjutoiGpA3SZD4cGPSXUzRFeKfVr8CnYhK5LqXZw==", "dependencies": { "@ctrl/tinycolor": "^3.4.1", "@element-plus/icons-vue": "^2.0.6", @@ -6425,16 +6425,16 @@ } }, "node_modules/eslint-config-standard-with-typescript": { - "version": "34.0.1", - "resolved": "https://registry.npmmirror.com/eslint-config-standard-with-typescript/-/eslint-config-standard-with-typescript-34.0.1.tgz", - "integrity": "sha512-J7WvZeLtd0Vr9F+v4dZbqJCLD16cbIy4U+alJMq4MiXdpipdBM3U5NkXaGUjePc4sb1ZE01U9g6VuTBpHHz1fg==", + "version": "35.0.0", + "resolved": "https://registry.npmmirror.com/eslint-config-standard-with-typescript/-/eslint-config-standard-with-typescript-35.0.0.tgz", + "integrity": "sha512-Xa7DY9GgduZyp0qmXxBF0/dB+Vm4/DgWu1lGpNLJV2d46aCaUxTKDEnkzjUWX/1O9S0a+Dhnw7A4oI0JpYzwtw==", "dev": true, "dependencies": { - "@typescript-eslint/parser": "^5.43.0", + "@typescript-eslint/parser": "^5.50.0", "eslint-config-standard": "17.0.0" }, "peerDependencies": { - "@typescript-eslint/eslint-plugin": "^5.43.0", + "@typescript-eslint/eslint-plugin": "^5.50.0", "eslint": "^8.0.1", "eslint-plugin-import": "^2.25.2", "eslint-plugin-n": "^15.0.0", @@ -13540,16 +13540,16 @@ } }, "node_modules/typescript": { - "version": "5.0.4", - "resolved": "https://registry.npmmirror.com/typescript/-/typescript-5.0.4.tgz", - "integrity": "sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==", + "version": "5.1.3", + "resolved": "https://registry.npmmirror.com/typescript/-/typescript-5.1.3.tgz", + "integrity": "sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==", "dev": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" }, "engines": { - "node": ">=12.20" + "node": ">=14.17" } }, "node_modules/unbox-primitive": { @@ -13943,9 +13943,9 @@ } }, "node_modules/vue-router": { - "version": "4.2.1", - "resolved": "https://registry.npmmirror.com/vue-router/-/vue-router-4.2.1.tgz", - "integrity": "sha512-nW28EeifEp8Abc5AfmAShy5ZKGsGzjcnZ3L1yc2DYUo+MqbBClrRP9yda3dIekM4I50/KnEwo1wkBLf7kHH5Cw==", + "version": "4.2.2", + "resolved": "https://registry.npmmirror.com/vue-router/-/vue-router-4.2.2.tgz", + "integrity": "sha512-cChBPPmAflgBGmy3tBsjeoe3f3VOSG6naKyY5pjtrqLGbNEXdzCigFUHgBvp9e3ysAtFtEx7OLqcSDh/1Cq2TQ==", "dependencies": { "@vue/devtools-api": "^6.5.0" }, diff --git a/code/web/task_schedule/package.json b/code/web/task_schedule/package.json index 963f70e..562c74f 100644 --- a/code/web/task_schedule/package.json +++ b/code/web/task_schedule/package.json @@ -14,26 +14,26 @@ "axios": "^1.4.0", "babel": "^6.23.0", "echarts": "^5.4.2", - "element-plus": "^2.3.5", + "element-plus": "^2.3.6", "moment": "^2.29.4", "sass-loader": "^13.3.1", "vue": "^3.3.4", - "vue-router": "^4.2.1", + "vue-router": "^4.2.2", "vuex": "^4.1.0" }, "devDependencies": { "@babel/eslint-parser": "^7.21.8", - "@typescript-eslint/eslint-plugin": "^5.59.7", - "@typescript-eslint/parser": "^5.59.7", + "@typescript-eslint/eslint-plugin": "^5.59.9", + "@typescript-eslint/parser": "^5.59.9", "@vitejs/plugin-vue": "^4.2.3", "@vue/cli-plugin-eslint": "^5.0.8", "eslint-config-recommended": "^4.1.0", - "eslint-config-standard-with-typescript": "^34.0.1", + "eslint-config-standard-with-typescript": "^35.0.0", "eslint-plugin-vue": "^9.14.1", "node-sass": "^9.0.0", "sass": "^1.62.1", "style-loader": "^3.3.3", - "typescript": "^5.0.4", + "typescript": "^5.1.3", "vue-eslint-parser": "^9.3.0" } } diff --git a/code/web/task_schedule/src/components/RankingListComponent.vue b/code/web/task_schedule/src/components/RankingListComponent.vue new file mode 100644 index 0000000..59dc936 --- /dev/null +++ b/code/web/task_schedule/src/components/RankingListComponent.vue @@ -0,0 +1,78 @@ + + + + + + diff --git a/code/web/task_schedule/src/views/DesktopArchievement.vue b/code/web/task_schedule/src/views/DesktopArchievement.vue index 3eb826d..0942247 100644 --- a/code/web/task_schedule/src/views/DesktopArchievement.vue +++ b/code/web/task_schedule/src/views/DesktopArchievement.vue @@ -51,7 +51,10 @@ /> -
+
+ + +
@@ -66,6 +69,7 @@ import ArchievementChart from "@/components/ArchievementChartComponent.vue"; import ArchievementCompleteRateComponent from "@/components/ArchievementCompleteRateComponent.vue"; import HonorListComponent from "@/components/HonorListComponent.vue"; import DishonorListComponent from "@/components/DishonorListComponent.vue"; +import RankingListComponent from "@/components/RankingListComponent.vue"; import { logout } from "@/utils/account.js"; import { type TelSaler } from "@/types/cpicxim/TelSaler"; @@ -76,6 +80,7 @@ export default { ArchievementCompleteRateComponent, HonorListComponent, DishonorListComponent, + RankingListComponent, }, setup() { @@ -94,7 +99,7 @@ export default { dishonorPersons: ["",], showUI: true, // 鐢ㄦ潵鍒锋柊椤甸潰鐨勫紑鍏 }); - let timerHandler = 0; + const timerHandler = 0; const getTotalArchievement = computed(() => { @@ -297,8 +302,17 @@ export default { } .right-wrapper { - min-width: 400px; + min-width: 300px; width: 25%; + + display: flex; + flex-direction: column; + justify-content: center; + align-items: flex-start; + + >*+* { + margin-top: 15px; + } }