保存进度!

This commit is contained in:
Kane Wang 2023-12-18 18:12:16 +08:00
parent f391880c9c
commit 2e02b9182d
5 changed files with 195 additions and 81 deletions

View File

@ -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;

View File

@ -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": "*"

View File

@ -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",

View File

@ -12,18 +12,18 @@
<el-progress
type="circle"
:percentage="ui.percentage"
:status="ui.color"
:status="ui.warningLevel"
>
<template #default>
<span class="percentage-label">{{ ui.indicator }}</span>
<span class="percentage-value">{{ percentage }}%</span>
<span :class="warningLevelClass">{{ percentage }}%</span>
</template>
</el-progress>
</div>
</template>
<script lang="ts">
import { reactive } from "vue";
import { reactive, computed } from "vue";
export default {
name: "ArchievementCompleteRateComponent",
props: {
@ -36,7 +36,7 @@ export default {
type: String,
default: "",
},
color: {
warningLevel: { //
type: String,
default: "success",
},
@ -45,13 +45,33 @@ export default {
{
const percentage = Number( props.percentage ).valueOf();
const warningLevelClass = computed((): string =>
{
let textClass = "";
if ( props.warningLevel === "success" )
{
textClass = "percentage-value";
}
else if ( props.warningLevel === "warning" )
{
textClass = "percentage-value-warning";
}
else if ( props.warningLevel === "exception" )
{
textClass = "percentage-value-exception";
}
return textClass;
});
const ui = reactive({
percentage,
indicator: props.indicator,
color: props.color,
warningLevel: props.warningLevel,
});
return { ui, };
return { ui, warningLevelClass, };
},
};
</script>
@ -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;

View File

@ -25,10 +25,12 @@
<ArchievementCompleteRateComponent
indicator="续保完成率"
:percentage="ui.insurance_renewal_rate"
:warning-level="renewalRateWarningLevel(ui.insurance_renewal_rate_target)"
/>
<ArchievementCompleteRateComponent
indicator="车非渗透率"
:percentage="ui.attaching_rate"
:warning-level="attachingRateWarningLevel(ui.attaching_rate_target)"
/>
</div>
<div class="total-archievement-charts-wrapper">
@ -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,
};
},
};