diff --git a/code/db/pkg/telsale_archievement_dev_pkg.pck b/code/db/pkg/telsale_archievement_dev_pkg.pck index 67ec4fd..007a828 100644 --- a/code/db/pkg/telsale_archievement_dev_pkg.pck +++ b/code/db/pkg/telsale_archievement_dev_pkg.pck @@ -58,8 +58,9 @@ CREATE OR REPLACE PACKAGE BODY TELSALE_ARCHIEVEMENT_DEV_PKG IS A_TOTAL OUT INTEGER, A_MENSUAL_CUR OUT CUR_TYPE ) IS - L_FIRSTDAY DATE; - L_DEPARTMENT_NAME VARCHAR2(100); + L_FIRSTDAY DATE; + L_DEPARTMENT_NAME VARCHAR2(100); + L_RENEWAL_RATE_TARGET NUMBER; BEGIN L_FIRSTDAY := TO_DATE(TO_CHAR(SYSDATE, 'yyyy') || '-01-01 00:00:00', @@ -87,24 +88,47 @@ CREATE OR REPLACE PACKAGE BODY TELSALE_ARCHIEVEMENT_DEV_PKG IS A_ATTACHING_RATE_TARGET FROM DESKTOP_ARCHIEVEMENT_ADMIN.BI机构渗透率跟踪表 DEPT WHERE DEPT.部门 = L_DEPARTMENT_NAME; + + --解决round导致小数缺0的问题 + SELECT DECODE(SUBSTR(A_ATTACHING_RATE_TARGET, + 1, + 1), + '.', + '0' || A_ATTACHING_RATE_TARGET, + A_ATTACHING_RATE_TARGET) + INTO A_ATTACHING_RATE_TARGET + FROM DUAL; EXCEPTION WHEN NO_DATA_FOUND THEN - A_ATTACHING_RATE := '0.0'; + A_ATTACHING_RATE := '0.0'; + A_ATTACHING_RATE_TARGET := '0.0'; END; - --续保率 + --续保率&目标差距 BEGIN - SELECT ROUND(t."个车续保率(全月)(%)", + SELECT ROUND(t."个车续保率(序时)(%)", + 2), + ROUND(t."个车续保率(序时)(%)" - t."机构目标值1(%)", 2) - INTO A_RENEWAL_RATE + INTO A_RENEWAL_RATE, + A_RENEWAL_RATE_TARGET FROM BI机构当月个车续保率跟踪表 T WHERE T.责任部门 = L_DEPARTMENT_NAME; + + --解决round导致小数缺0的问题 + SELECT DECODE(SUBSTR(A_RENEWAL_RATE_TARGET, + 1, + 1), + '.', + '0' || A_RENEWAL_RATE_TARGET, + A_RENEWAL_RATE_TARGET) + INTO A_RENEWAL_RATE_TARGET + FROM DUAL; EXCEPTION WHEN NO_DATA_FOUND THEN - A_RENEWAL_RATE := '0.0'; + A_RENEWAL_RATE := '0.0'; + A_RENEWAL_RATE_TARGET := '0.0'; END; - -- 续保率模板差值 - A_RENEWAL_RATE_TARGET := '0.0'; --总业绩 A_TOTAL := 0; diff --git a/code/web/task_schedule/package-lock.json b/code/web/task_schedule/package-lock.json index b9b0a3d..4a2d2b9 100644 --- a/code/web/task_schedule/package-lock.json +++ b/code/web/task_schedule/package-lock.json @@ -14,7 +14,7 @@ "mitt": "^3.0.1", "moment": "^2.29.4", "sass-loader": "^13.3.2", - "vue": "^3.3.11", + "vue": "^3.3.12", "vue-router": "^4.2.5", "vuex": "^4.1.0" }, @@ -28,7 +28,7 @@ "axios": "^1.6.2", "babel": "^6.23.0", "eslint-config-recommended": "^4.1.0", - "eslint-config-standard-with-typescript": "^42.0.0", + "eslint-config-standard-with-typescript": "^43.0.0", "eslint-plugin-vue": "^9.19.2", "node-sass": "^9.0.0", "sass": "^1.69.5", @@ -2318,36 +2318,36 @@ "dev": true }, "node_modules/@vue/compiler-core": { - "version": "3.3.11", - "resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.3.11.tgz", - "integrity": "sha512-h97/TGWBilnLuRaj58sxNrsUU66fwdRKLOLQ9N/5iNDfp+DZhYH9Obhe0bXxhedl8fjAgpRANpiZfbgWyruQ0w==", + "version": "3.3.12", + "resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.3.12.tgz", + "integrity": "sha512-qAtjyG3GBLG0chzp5xGCyRLLe6wFCHmjI82aGzwuGKyznNP+GJJMxjc0wOYWDB2YKfho7niJFdoFpo0CZZQg9w==", "dependencies": { "@babel/parser": "^7.23.5", - "@vue/shared": "3.3.11", + "@vue/shared": "3.3.12", "estree-walker": "^2.0.2", "source-map-js": "^1.0.2" } }, "node_modules/@vue/compiler-dom": { - "version": "3.3.11", - "resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.3.11.tgz", - "integrity": "sha512-zoAiUIqSKqAJ81WhfPXYmFGwDRuO+loqLxvXmfUdR5fOitPoUiIeFI9cTTyv9MU5O1+ZZglJVTusWzy+wfk5hw==", + "version": "3.3.12", + "resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.3.12.tgz", + "integrity": "sha512-RdJU9oEYaoPKUdGXCy0l+i4clesdDeLmbvRlszoc9iagsnBnMmQtYfCPVQ5BHB6o7K4SCucDdJM2Dh3oXB0D6g==", "dependencies": { - "@vue/compiler-core": "3.3.11", - "@vue/shared": "3.3.11" + "@vue/compiler-core": "3.3.12", + "@vue/shared": "3.3.12" } }, "node_modules/@vue/compiler-sfc": { - "version": "3.3.11", - "resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.3.11.tgz", - "integrity": "sha512-U4iqPlHO0KQeK1mrsxCN0vZzw43/lL8POxgpzcJweopmqtoYy9nljJzWDIQS3EfjiYhfdtdk9Gtgz7MRXnz3GA==", + "version": "3.3.12", + "resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.3.12.tgz", + "integrity": "sha512-yy5b9e7b79dsGbMmglCe/YnhCQgBkHO7Uf6JfjWPSf2/5XH+MKn18LhzhHyxbHdJgnA4lZCqtXzLaJz8Pd8lMw==", "dependencies": { "@babel/parser": "^7.23.5", - "@vue/compiler-core": "3.3.11", - "@vue/compiler-dom": "3.3.11", - "@vue/compiler-ssr": "3.3.11", - "@vue/reactivity-transform": "3.3.11", - "@vue/shared": "3.3.11", + "@vue/compiler-core": "3.3.12", + "@vue/compiler-dom": "3.3.12", + "@vue/compiler-ssr": "3.3.12", + "@vue/reactivity-transform": "3.3.12", + "@vue/shared": "3.3.12", "estree-walker": "^2.0.2", "magic-string": "^0.30.5", "postcss": "^8.4.32", @@ -2355,12 +2355,12 @@ } }, "node_modules/@vue/compiler-ssr": { - "version": "3.3.11", - "resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.3.11.tgz", - "integrity": "sha512-Zd66ZwMvndxRTgVPdo+muV4Rv9n9DwQ4SSgWWKWkPFebHQfVYRrVjeygmmDmPewsHyznCNvJ2P2d6iOOhdv8Qg==", + "version": "3.3.12", + "resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.3.12.tgz", + "integrity": "sha512-adCiMJPznfWcQyk/9HSuXGja859IaMV+b8UNSVzDatqv7h0PvT9BEeS22+gjkWofDiSg5d78/ZLls3sLA+cn3A==", "dependencies": { - "@vue/compiler-dom": "3.3.11", - "@vue/shared": "3.3.11" + "@vue/compiler-dom": "3.3.12", + "@vue/shared": "3.3.12" } }, "node_modules/@vue/component-compiler-utils": { @@ -2459,60 +2459,60 @@ } }, "node_modules/@vue/reactivity": { - "version": "3.3.11", - "resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.3.11.tgz", - "integrity": "sha512-D5tcw091f0nuu+hXq5XANofD0OXnBmaRqMYl5B3fCR+mX+cXJIGNw/VNawBqkjLNWETrFW0i+xH9NvDbTPVh7g==", + "version": "3.3.12", + "resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.3.12.tgz", + "integrity": "sha512-vOJORzO8DlIx88cgTnMLIf2GlLYpoXAKsuoQsK6SGdaqODjxO129pVPTd2s/N/Mb6KKZEFIHIEwWGmtN4YPs+g==", "dependencies": { - "@vue/shared": "3.3.11" + "@vue/shared": "3.3.12" } }, "node_modules/@vue/reactivity-transform": { - "version": "3.3.11", - "resolved": "https://registry.npmmirror.com/@vue/reactivity-transform/-/reactivity-transform-3.3.11.tgz", - "integrity": "sha512-fPGjH0wqJo68A0wQ1k158utDq/cRyZNlFoxGwNScE28aUFOKFEnCBsvyD8jHn+0kd0UKVpuGuaZEQ6r9FJRqCg==", + "version": "3.3.12", + "resolved": "https://registry.npmmirror.com/@vue/reactivity-transform/-/reactivity-transform-3.3.12.tgz", + "integrity": "sha512-g5TijmML7FyKkLt6QnpqNmA4KD7K/T5SbXa88Bhq+hydNQEkzA8veVXWAQuNqg9rjaFYD0rPf0a9NofKA0ENgg==", "dependencies": { "@babel/parser": "^7.23.5", - "@vue/compiler-core": "3.3.11", - "@vue/shared": "3.3.11", + "@vue/compiler-core": "3.3.12", + "@vue/shared": "3.3.12", "estree-walker": "^2.0.2", "magic-string": "^0.30.5" } }, "node_modules/@vue/runtime-core": { - "version": "3.3.11", - "resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.3.11.tgz", - "integrity": "sha512-g9ztHGwEbS5RyWaOpXuyIVFTschclnwhqEbdy5AwGhYOgc7m/q3NFwr50MirZwTTzX55JY8pSkeib9BX04NIpw==", + "version": "3.3.12", + "resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.3.12.tgz", + "integrity": "sha512-5iL4w7MZrSGKEZU2wFAYhDZdZmgn+s//73EfgDXW1M+ZUOl36md7tlWp1QFK/ladiq4FvQ82shVjo0KiPDPr0A==", "dependencies": { - "@vue/reactivity": "3.3.11", - "@vue/shared": "3.3.11" + "@vue/reactivity": "3.3.12", + "@vue/shared": "3.3.12" } }, "node_modules/@vue/runtime-dom": { - "version": "3.3.11", - "resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.3.11.tgz", - "integrity": "sha512-OlhtV1PVpbgk+I2zl+Y5rQtDNcCDs12rsRg71XwaA2/Rbllw6mBLMi57VOn8G0AjOJ4Mdb4k56V37+g8ukShpQ==", + "version": "3.3.12", + "resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.3.12.tgz", + "integrity": "sha512-8mMzqiIdl+IYa/OXwKwk6/4ebLq7cYV1pUcwCSwBK2KerUa6cwGosen5xrCL9f8o2DJ9TfPFwbPEvH7OXzUpoA==", "dependencies": { - "@vue/runtime-core": "3.3.11", - "@vue/shared": "3.3.11", - "csstype": "^3.1.2" + "@vue/runtime-core": "3.3.12", + "@vue/shared": "3.3.12", + "csstype": "^3.1.3" } }, "node_modules/@vue/server-renderer": { - "version": "3.3.11", - "resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.3.11.tgz", - "integrity": "sha512-AIWk0VwwxCAm4wqtJyxBylRTXSy1wCLOKbWxHaHiu14wjsNYtiRCSgVuqEPVuDpErOlRdNnuRgipQfXRLjLN5A==", + "version": "3.3.12", + "resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.3.12.tgz", + "integrity": "sha512-OZ0IEK5TU5GXb5J8/wSplyxvGGdIcwEmS8EIO302Vz8K6fGSgSJTU54X0Sb6PaefzZdiN3vHsLXO8XIeF8crQQ==", "dependencies": { - "@vue/compiler-ssr": "3.3.11", - "@vue/shared": "3.3.11" + "@vue/compiler-ssr": "3.3.12", + "@vue/shared": "3.3.12" }, "peerDependencies": { - "vue": "3.3.11" + "vue": "3.3.12" } }, "node_modules/@vue/shared": { - "version": "3.3.11", - "resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.3.11.tgz", - "integrity": "sha512-u2G8ZQ9IhMWTMXaWqZycnK4UthG1fA238CD+DP4Dm4WJi5hdUKKLg0RMRaRpDPNMdkTwIDkp7WtD0Rd9BH9fLw==" + "version": "3.3.12", + "resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.3.12.tgz", + "integrity": "sha512-6p0Yin0pclvnER7BLNOQuod9Z+cxSYh8pSh7CzHnWNjAIP6zrTlCdHRvSCb1aYEx6i3Q3kvfuWU7nG16CgG1ag==" }, "node_modules/@vue/vue-loader-v15": { "name": "vue-loader", @@ -6777,9 +6777,9 @@ } }, "node_modules/eslint-config-standard-with-typescript": { - "version": "42.0.0", - "resolved": "https://registry.npmmirror.com/eslint-config-standard-with-typescript/-/eslint-config-standard-with-typescript-42.0.0.tgz", - "integrity": "sha512-m1/2g/Sicun1uFZOFigJVeOqo9fE7OkMsNtilcpHwdCdcGr21qsGqYiyxYSvvHfJwY7w5OTQH0hxk8sM2N5Ohg==", + "version": "43.0.0", + "resolved": "https://registry.npmmirror.com/eslint-config-standard-with-typescript/-/eslint-config-standard-with-typescript-43.0.0.tgz", + "integrity": "sha512-AT0qK01M5bmsWiE3UZvaQO5da1y1n6uQckAKqGNe6zPW5IOzgMLXZxw77nnFm+C11nxAZXsCPrbsgJhSrGfX6Q==", "dev": true, "dependencies": { "@typescript-eslint/parser": "^6.4.0", @@ -14412,15 +14412,15 @@ } }, "node_modules/vue": { - "version": "3.3.11", - "resolved": "https://registry.npmmirror.com/vue/-/vue-3.3.11.tgz", - "integrity": "sha512-d4oBctG92CRO1cQfVBZp6WJAs0n8AK4Xf5fNjQCBeKCvMI1efGQ5E3Alt1slFJS9fZuPcFoiAiqFvQlv1X7t/w==", + "version": "3.3.12", + "resolved": "https://registry.npmmirror.com/vue/-/vue-3.3.12.tgz", + "integrity": "sha512-jYNv2QmET2OTHsFzfWHMnqgCfqL4zfo97QwofdET+GBRCHhSCHuMTTvNIgeSn0/xF3JRT5OGah6MDwUFN7MPlg==", "dependencies": { - "@vue/compiler-dom": "3.3.11", - "@vue/compiler-sfc": "3.3.11", - "@vue/runtime-dom": "3.3.11", - "@vue/server-renderer": "3.3.11", - "@vue/shared": "3.3.11" + "@vue/compiler-dom": "3.3.12", + "@vue/compiler-sfc": "3.3.12", + "@vue/runtime-dom": "3.3.12", + "@vue/server-renderer": "3.3.12", + "@vue/shared": "3.3.12" }, "peerDependencies": { "typescript": "*" diff --git a/code/web/task_schedule/package.json b/code/web/task_schedule/package.json index 40af29a..11fbe5c 100644 --- a/code/web/task_schedule/package.json +++ b/code/web/task_schedule/package.json @@ -15,7 +15,7 @@ "mitt": "^3.0.1", "moment": "^2.29.4", "sass-loader": "^13.3.2", - "vue": "^3.3.11", + "vue": "^3.3.12", "vue-router": "^4.2.5", "vuex": "^4.1.0" }, @@ -29,7 +29,7 @@ "axios": "^1.6.2", "babel": "^6.23.0", "eslint-config-recommended": "^4.1.0", - "eslint-config-standard-with-typescript": "^42.0.0", + "eslint-config-standard-with-typescript": "^43.0.0", "eslint-plugin-vue": "^9.19.2", "node-sass": "^9.0.0", "sass": "^1.69.5", diff --git a/code/web/task_schedule/src/components/ArchievementCompleteRateComponent.vue b/code/web/task_schedule/src/components/ArchievementCompleteRateComponent.vue index 56127bb..87660be 100644 --- a/code/web/task_schedule/src/components/ArchievementCompleteRateComponent.vue +++ b/code/web/task_schedule/src/components/ArchievementCompleteRateComponent.vue @@ -12,18 +12,18 @@ @@ -79,6 +99,20 @@ export default { font-size: 28px; } + .percentage-value-warning { + display: block; + margin-top: 10px; + font-size: 28px; + color: orange; + } + + .percentage-value-exception { + display: block; + margin-top: 10px; + font-size: 28px; + color: red; + } + .percentage-label { display: block; margin-top: 10px; diff --git a/code/web/task_schedule/src/views/DesktopArchievement.vue b/code/web/task_schedule/src/views/DesktopArchievement.vue index eb6fbf5..b03087d 100644 --- a/code/web/task_schedule/src/views/DesktopArchievement.vue +++ b/code/web/task_schedule/src/views/DesktopArchievement.vue @@ -25,10 +25,12 @@
@@ -103,7 +105,9 @@ interface ui chartData: number[]; totalArchievement: number; attaching_rate: string; + attaching_rate_target: string; insurance_renewal_rate: string; // 缁繚鐜 + insurance_renewal_rate_target: string; // 缁繚鐜 leading_reward_gainers: string[]; // 棰嗚窇濂 advance_reward_gainers: string[]; // 椋炶穬濂 dishonorPersons: string[]; @@ -153,7 +157,9 @@ export default { chartData: [0,], // 涓氱哗琛 totalArchievement: 0, // 鎬讳笟缁 attaching_rate: "", // 杞﹂潪娓楅忕巼 + attaching_rate_target: "", // 杞﹂潪娓楅忕巼鐩爣鍊 insurance_renewal_rate: "", // 缁繚鐜 + insurance_renewal_rate_target: "", // 缁繚鐜囩洰鏍囧 leading_reward_gainers: ["",], // 棰嗚窇濂 advance_reward_gainers: ["",], // 椋炶穬濂 dishonorPersons: ["",], @@ -201,7 +207,9 @@ export default { // ui.chartData = data.mensual_archievement_list; // ui.totalArchievement = data.total_archievement; ui.attaching_rate = data.attaching_rate; + ui.attaching_rate_target = data.attaching_rate_target; ui.insurance_renewal_rate = data.insurance_renewal_rate; + ui.insurance_renewal_rate_target = data.insurance_renewal_rate_target; ui.leading_reward_gainers = data.leading_reward_gainers; ui.advance_reward_gainers = data.advance_reward_gainers; ui.dishonorPersons = data.backward_list; @@ -331,6 +339,52 @@ export default { clearInterval( timerHandler ); }); + const attachingRateWarningLevel = ( attachingRateTarget: string ): string => + { + const value: number = Number( attachingRateTarget ); + let warningLevel = ""; + + console.log( "娓楅忕巼鐩爣宸", attachingRateTarget, value ); + + if ( value >= 0.0 ) + { + warningLevel = "success"; + } + else if ( value > -0.5 && value < 0.0 ) + { + warningLevel = "warning"; + } + else if ( value <= -0.5 ) + { + warningLevel = "exception"; + } + + return warningLevel; + }; + + const renewalRateWarningLevel = ( attachingRateTarget: string ): string => + { + const value: number = Number( attachingRateTarget ); + let warningLevel = ""; + + console.log( "缁繚鐜囩洰鏍囧樊鍊", attachingRateTarget, value ); + + if ( value >= 0.0 ) + { + warningLevel = "success"; + } + else if ( value >= -3 && value < 0.0 ) + { + warningLevel = "warning"; + } + else if ( value <= -3 ) + { + warningLevel = "exception"; + } + + return warningLevel; + }; + return { ui, callerInfo, @@ -339,6 +393,8 @@ export default { renderData: applyDepartmentArchievementData, refresh, logoutDesktopArchievement, + attachingRateWarningLevel, + renewalRateWarningLevel, }; }, };