23 Commits

Author SHA1 Message Date
c3479d7d8e Merge branch 'feature-ui' of http://222.76.244.118:3000/CPICXIM/desktop_task_schedule into feature-ui 2023-11-21 19:21:12 +08:00
0c89df8c34 保存进度! 2023-11-21 19:21:01 +08:00
a5d392c2f6 保存进度! 2023-11-15 00:15:55 +08:00
84b2e906f3 保存进度! 2023-11-14 18:23:53 +08:00
3b4c340b70 修改请求地址! 2023-11-13 18:51:40 +08:00
3001165bd5 修改项目输出目录和springMVC的版本。 2023-11-13 13:18:49 +08:00
39a75c7bf2 保存进度! 2023-11-13 00:25:10 +08:00
237cc350be 保存进度! 2023-11-10 18:09:10 +08:00
d202d976a3 保存进度! 2023-11-10 15:53:23 +08:00
492239f269 启用vite的开发和生产模式 2023-11-09 19:15:41 +08:00
c0406e7000 保存进度! 2023-11-08 10:43:55 +08:00
44357ad3ce 保存进度! 2023-11-08 10:32:19 +08:00
e07039b517 保存进度! 2023-11-08 09:56:40 +08:00
484b8a78e9 保存进度! 2023-11-06 19:16:38 +08:00
4e74bff380 增加可以用坐席名称登录 2023-11-01 20:49:54 +08:00
7311ab5e2a 保存进度! 2023-11-01 18:22:01 +08:00
0650227861 Merge branch 'develop' into feature-ui 2023-11-01 15:42:07 +08:00
75a9c46c2e 保存进度! 2023-11-01 15:41:49 +08:00
02ac5274e0 保存进度! 2023-10-30 23:44:54 +08:00
6f303eec03 保存进度! 2023-10-30 23:44:37 +08:00
d517c2e82a 保存进度! 2023-10-28 12:09:02 +08:00
80ba8da7e0 保存进度! 2023-10-27 18:59:50 +08:00
1422c0b781 保存进度! 2023-10-27 16:51:57 +08:00
49 changed files with 2380 additions and 522 deletions

3
.gitignore vendored
View File

@@ -729,3 +729,6 @@ target/*
# oracle # oracle
*.~pck *.~pck
*.~sql *.~sql
# 输出目录
输出/*

View File

@@ -145,18 +145,29 @@ CREATE OR REPLACE PACKAGE BODY TELSALE_ARCHIEVEMENT_PKG IS
a_present_month OUT NUMBER, a_present_month OUT NUMBER,
a_mensual_cur OUT cur_type a_mensual_cur OUT cur_type
) IS ) IS
l_caller_name VARCHAR2(100); l_caller_name VARCHAR2(100);
l_this_month VARCHAR2(4); l_department_name VARCHAR2(100);
l_this_year VARCHAR2(4); --l_this_month VARCHAR2(4);
l_firstday DATE; l_this_year VARCHAR2(4);
l_rownum INTEGER; --l_firstday DATE;
l_rownum INTEGER;
BEGIN BEGIN
--<2D><>ѯ<EFBFBD><D1AF>ϯ<EFBFBD><CFAF><EFBFBD>ƣ<EFBFBD><C6A3><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD> --<2D><>ѯ<EFBFBD><D1AF>ϯ<EFBFBD><CFAF><EFBFBD>ƣ<EFBFBD><C6A3>Ͳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BEGIN BEGIN
SELECT saler_name SELECT zx.saler_name,
INTO l_caller_name bm.department_name
FROM tele_saler INTO l_caller_name,
WHERE saler_code = a_caller_code; l_department_name
FROM tele_saler zx,
tele_saler_team team,
idst0.bm_t bm
WHERE zx.saler_code = a_caller_code
AND zx.team_code = team.team_code
AND team.department_code = bm.department_code;
/* SELECT saler_name
INTO l_caller_name
FROM tele_saler
WHERE saler_code = a_caller_code;*/
EXCEPTION EXCEPTION
-- <20><><EFBFBD><EFBFBD>û<EFBFBD>в<EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD>ϯ<EFBFBD><CFAF><EFBFBD>ƣ<EFBFBD>˵<EFBFBD><CBB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>׳<EFBFBD><D7B3> -- <20><><EFBFBD><EFBFBD>û<EFBFBD>в<EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD>ϯ<EFBFBD><CFAF><EFBFBD>ƣ<EFBFBD>˵<EFBFBD><CBB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>׳<EFBFBD><D7B3>
WHEN no_data_found THEN WHEN no_data_found THEN
@@ -164,12 +175,12 @@ CREATE OR REPLACE PACKAGE BODY TELSALE_ARCHIEVEMENT_PKG IS
CALLERCODE_EXCEPTION_MSG); CALLERCODE_EXCEPTION_MSG);
END; END;
l_this_month := to_char(SYSDATE, --l_this_month := to_char(SYSDATE,
'mm'); -- 'mm');
l_this_year := to_char(SYSDATE, l_this_year := to_char(SYSDATE,
'yyyy'); 'yyyy');
l_firstday := to_date(l_this_year || '-01-01 00:00:00', --l_firstday := to_date(l_this_year || '-01-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss'); -- 'yyyy-mm-dd hh24:mi:ss');
--<2D>ܳ<EFBFBD><DCB3>ձ<EFBFBD><D5B1><EFBFBD> --<2D>ܳ<EFBFBD><DCB3>ձ<EFBFBD><D5B1><EFBFBD>
SELECT round(nvl(SUM(cf.<2E><><EFBFBD>ո<EFBFBD><D5B8>˿ͻ<CBBF><CDBB><EFBFBD><EFBFBD><EFBFBD>), SELECT round(nvl(SUM(cf.<2E><><EFBFBD>ո<EFBFBD><D5B8>˿ͻ<CBBF><CDBB><EFBFBD><EFBFBD><EFBFBD>),
@@ -177,7 +188,8 @@ CREATE OR REPLACE PACKAGE BODY TELSALE_ARCHIEVEMENT_PKG IS
2) bf 2) bf
INTO a_total INTO a_total
FROM <20><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD>ÿ<EFBFBD>ձ<EFBFBD><D5B1><EFBFBD> cf FROM <20><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD>ÿ<EFBFBD>ձ<EFBFBD><D5B1><EFBFBD> cf
WHERE cf.<2E><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD> = a_caller_code WHERE cf.<2E><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD> = l_caller_name
AND cf.<2E><><EFBFBD><EFBFBD> = l_department_name
AND cf.<2E><><EFBFBD><EFBFBD> = l_this_year; AND cf.<2E><><EFBFBD><EFBFBD> = l_this_year;
--<2D><>͸<EFBFBD><CDB8> --<2D><>͸<EFBFBD><CDB8>
@@ -194,28 +206,7 @@ CREATE OR REPLACE PACKAGE BODY TELSALE_ARCHIEVEMENT_PKG IS
FROM BI<42><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD>ʸ<EFBFBD><CAB8>ٱ<EFBFBD> t FROM BI<42><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD>ʸ<EFBFBD><CAB8>ٱ<EFBFBD> t
WHERE t.<2E><><EFBFBD><EFBFBD> = l_caller_name WHERE t.<2E><><EFBFBD><EFBFBD> = l_caller_name
AND rownum = 1; AND rownum = 1;
/*SELECT decode(nvl(SUM(cf.<2E><><EFBFBD>ո<EFBFBD><D5B8>˿ͻ<CBBF><CDBB><EFBFBD><EFBFBD><EFBFBD>),
0),
0,
0,
round(SUM(cf.<2E><><EFBFBD><EFBFBD><EFBFBD>ںϱ<DABA><CFB1><EFBFBD>) / SUM(cf.<2E><><EFBFBD>ո<EFBFBD><D5B8>˿ͻ<CBBF><CDBB><EFBFBD><EFBFBD><EFBFBD>) * 100,
2))
INTO a_attaching_rate
FROM <20><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD>ÿ<EFBFBD>ձ<EFBFBD><D5B1><EFBFBD> cf
WHERE cf.<2E><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD> = a_caller_code
AND cf.<2E><><EFBFBD><EFBFBD> = l_this_year
AND cf.<2E>·<EFBFBD> = l_this_month;*/
--<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> --<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/*SELECT decode(nvl(SUM(xb.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>),
0),
0,
0,
round(SUM(xb.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ۼ<EFBFBD>) / SUM(xb.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) * 100,
2)) xbl
INTO a_renewal_rate
FROM <20><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD>ͳ<EFBFBD><CDB3> xb
WHERE xb.<2E><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD> = a_caller_code;*/
SELECT rownum, SELECT rownum,
round(nvl(t."<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʣ<EFBFBD>ȫ<EFBFBD>£<EFBFBD>(%)", round(nvl(t."<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʣ<EFBFBD>ȫ<EFBFBD>£<EFBFBD>(%)",
0), 0),
@@ -229,11 +220,12 @@ CREATE OR REPLACE PACKAGE BODY TELSALE_ARCHIEVEMENT_PKG IS
--ÿ<><C3BF>ҵ<EFBFBD><D2B5> --ÿ<><C3BF>ҵ<EFBFBD><D2B5>
OPEN A_MENSUAL_CUR FOR OPEN A_MENSUAL_CUR FOR
SELECT CF.<2E>·<EFBFBD> MM, SELECT CF.<2E>·<EFBFBD> MM,
ROUND(NVL(SUM(CF.<2E><><EFBFBD>ո<EFBFBD><D5B8>˿ͻ<CBBF><CDBB><EFBFBD><EFBFBD><EFBFBD> + CF.<2E><><EFBFBD><EFBFBD><EFBFBD>ںϱ<DABA><CFB1><EFBFBD>), ROUND(NVL(SUM(CF.<2E><><EFBFBD>ո<EFBFBD><D5B8>˿ͻ<CBBF><CDBB><EFBFBD><EFBFBD><EFBFBD>),
0), 0),
0) BF 0) BF
FROM <20><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD>ÿ<EFBFBD>ձ<EFBFBD><D5B1><EFBFBD> CF FROM <20><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD>ÿ<EFBFBD>ձ<EFBFBD><D5B1><EFBFBD> CF
WHERE cf.<2E><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD> = a_caller_code WHERE cf.<2E><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD> = l_caller_name
AND cf.<2E><><EFBFBD><EFBFBD> = l_department_name
AND ǩ<><C7A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD> >= TO_DATE(TO_CHAR(SYSDATE, AND ǩ<><C7A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD> >= TO_DATE(TO_CHAR(SYSDATE,
'yyyy') || '-01-01 00:00:00', 'yyyy') || '-01-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss') 'yyyy-mm-dd hh24:mi:ss')

View File

@@ -52,7 +52,7 @@ SELECT
GROUP BY <EFBFBD>·<EFBFBD>, GROUP BY <EFBFBD>·<EFBFBD>,
<EFBFBD><EFBFBD><EFBFBD>Ŵ<EFBFBD><EFBFBD><EFBFBD>, <EFBFBD><EFBFBD><EFBFBD>Ŵ<EFBFBD><EFBFBD><EFBFBD>,
<EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
HAVING <EFBFBD>·<EFBFBD> = '06<EFBFBD><EFBFBD>' HAVING <EFBFBD>·<EFBFBD> = '10<EFBFBD><EFBFBD>'
ORDER BY <EFBFBD><EFBFBD><EFBFBD>Ŵ<EFBFBD><EFBFBD><EFBFBD>, ORDER BY <EFBFBD><EFBFBD><EFBFBD>Ŵ<EFBFBD><EFBFBD><EFBFBD>,
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD><EFBFBD> DESC; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD><EFBFBD> DESC;
@@ -61,7 +61,7 @@ SELECT
2) <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD><EFBFBD> 2) <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD><EFBFBD>
FROM <EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD>ձ<EFBFBD><EFBFBD><EFBFBD> FROM <EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD>ձ<EFBFBD><EFBFBD><EFBFBD>
WHERE <EFBFBD><EFBFBD><EFBFBD>Ŵ<EFBFBD><EFBFBD><EFBFBD> = 'QDI' WHERE <EFBFBD><EFBFBD><EFBFBD>Ŵ<EFBFBD><EFBFBD><EFBFBD> = 'QDI'
AND <EFBFBD>·<EFBFBD> = '05' AND <EFBFBD>·<EFBFBD> = '10'
AND <EFBFBD><EFBFBD><EFBFBD><EFBFBD> = '2023' AND <EFBFBD><EFBFBD><EFBFBD><EFBFBD> = '2023'
GROUP BY <EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> GROUP BY <EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ORDER BY <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD><EFBFBD> DESC; ORDER BY <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD><EFBFBD> DESC;
@@ -75,3 +75,30 @@ SELECT
WHERE xb.<EFBFBD><EFBFBD><EFBFBD><EFBFBD> = '<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>' WHERE xb.<EFBFBD><EFBFBD><EFBFBD><EFBFBD> = '<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
GROUP BY <EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> GROUP BY <EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ORDER BY <EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> DESC; ORDER BY <EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> DESC;
-------------------------------------
SELECT zx.saler_name,
bm.department_name
FROM tele_saler zx,
tele_saler_team team,
idst0.bm_t bm
WHERE zx.saler_name = '<EFBFBD>ų<EFBFBD><EFBFBD><EFBFBD>'
AND zx.team_code = team.team_code
AND team.department_code = bm.department_code;
----------------------------------------
/*
truncate table BI<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD>ʸ<EFBFBD><EFBFBD>ٱ<EFBFBD>;
*/
SELECT *
FROM BI<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD>ʸ<EFBFBD><EFBFBD>ٱ<EFBFBD> t
WHERE t.<EFBFBD><EFBFBD><EFBFBD><EFBFBD> = '<EFBFBD>ų<EFBFBD><EFBFBD><EFBFBD>';
SELECT *
FROM BI<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʸ<EFBFBD><EFBFBD>ٱ<EFBFBD>
WHERE <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> = '<EFBFBD>ų<EFBFBD><EFBFBD><EFBFBD>';
SELECT *
FROM BI<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD>ʸ<EFBFBD><EFBFBD>ٱ<EFBFBD>;
SELECT *
FROM BI<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¸<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʸ<EFBFBD><EFBFBD>ٱ<EFBFBD>;

View File

@@ -7,7 +7,44 @@
# #
# Copyright (c) ${2022} by Kane, All Rights Reserved. # Copyright (c) ${2022} by Kane, All Rights Reserved.
### ###
NODE_ENV = 'development' NODE_ENV='development'
VITE_URL_VALIDATE_ACCOUNT="http://222.76.244.118:11101/desktop_archievement_backend/account/query_staff_info.do" VITE_URL_VALIDATE_ACCOUNT="http://222.76.244.118:11101/desktop_archievement_backend/account/query_staff_info.do"
VITE_URL_LOGIN = "http://222.76.244.118:11101/admin-system/account/p13_account_check" VITE_URL_LOGIN="http://222.76.244.118:11101/admin-system/account/p13_account_check"
VITE_URL_DEPARTMENT_ARCHIEVEMENT="http://222.76.244.118:11101/desktop_archievement_backend/archievement/query_department_archievement.do" VITE_URL_DEPARTMENT_ARCHIEVEMENT="http://222.76.244.118:11101/desktop_archievement_backend/archievement/query_department_archievement.do"
### URL相关 ##########
#登录
VITE_URL_LOGIN="http://222.76.244.118:11101/admin-system/account/p13_account_check"
VITE_URL_LOGIN_CALLER="http://222.76.244.118:11101/desktop_archievement_backend/account/query_telsaler_info.do"
#部门业绩查询
VITE_URL_DEPARTMENT_ARCHIEVEMENT="http://222.76.244.118:11101/desktop_archievement_backend/archievement/query_department_archievement.do"
#坐席业绩查询
VITE_URL_CALLER_ARCHIEVEMENT="http://222.76.244.118:11101/desktop_archievement_backend/archievement/query_caller_archievement.do"
#排行榜
VITE_URL_RANKINGLIST="http://222.76.244.118:11101/desktop_archievement_backend/archievement/query_ranking_list.do"
## 奖项相关 ##
## 查询奖励项目
VITE_URL_RWARD_PROJECTS="http://222.76.244.118:11101/desktop_archievement_backend/rewards/query_reward_projects.do"
## 查询获奖人员
VITE_URL_REWARD_GAINERS="http://222.76.244.118:11101/desktop_archievement_backend/rewards/query_reward_gainers.do"
## 添加获奖人员
VITE_URL_ADD_REWARD_TELSALER="http://222.76.244.118:11101/desktop_archievement_backend/rewards/add_telsaler_reward.do"
## 更新获奖人员
VITE_URL_UPDATE_REWARD_TELSALER="http://222.76.244.118:11101/desktop_archievement_backend/rewards/update_telsaler_reward.do"
## 删除获奖人员
VITE_URL_DEL_REWARD_TELSALER="http://222.76.244.118:11101/desktop_archievement_backend/rewards/delete_telsaler_reward.do"
## 上传文件
VITE_URL_UPLOAD_FILE="http://222.76.244.118:11101/desktop_archievement_backend/file/file-upload.do"
## 导入报表
VITE_URL_IMPORT_REPORT="http://222.76.244.118:11101/desktop_archievement_backend/import_bi_data/excel.do"
## 请求BI报表数据
VITE_URL_BI_TELSALER_ATTACHINGRATE="http://222.76.244.118:11101/desktop_archievement_backend/archievement/bi_telsaler_attachingrate.do"
VITE_URL_BI_TELSALER_RENEWALRATE="http://222.76.244.118:11101/desktop_archievement_backend/archievement/bi_telsaler_renewalrate.do"
VITE_URL_BI_DEPARTMENT_ATTACHINGRATE="http://222.76.244.118:11101/desktop_archievement_backend/archievement/bi_department_attachingrate.do"
VITE_URL_BI_DEPARTMENT_RENEWALRATE="http://222.76.244.118:11101/desktop_archievement_backend/archievement/bi_department_renewalrate.do"

View File

@@ -0,0 +1,49 @@
###
# @Author: Kane
# @Date: 2023-03-14 23:46:12
# @LastEditors: Kane
# @FilePath: /task_schedule/.env.production
# @Description:
#
# Copyright (c) ${2022} by Kane, All Rights Reserved.
###
VITE_URL_VALIDATE_ACCOUNT="http://10.39.0.61:8081/desktop_archievement_backend/account/query_staff_info.do"
VITE_URL_LOGIN="http://10.39.0.61:8081/admin-system/account/p13_account_check"
VITE_URL_DEPARTMENT_ARCHIEVEMENT="http://10.39.0.61:8081/desktop_archievement_backend/archievement/query_department_archievement.do"
### URL相关 ##########
#登录
VITE_URL_LOGIN="http://10.39.0.61:8081/admin-system/account/p13_account_check"
VITE_URL_LOGIN_CALLER="http://10.39.0.61:8081/desktop_archievement_backend/account/query_telsaler_info.do"
#部门业绩查询
VITE_URL_DEPARTMENT_ARCHIEVEMENT="http://10.39.0.61:8081/desktop_archievement_backend/archievement/query_department_archievement.do"
#坐席业绩查询
VITE_URL_CALLER_ARCHIEVEMENT="http://10.39.0.61:8081/desktop_archievement_backend/archievement/query_caller_archievement.do"
#排行榜
VITE_URL_RANKINGLIST="http://10.39.0.61:8081/desktop_archievement_backend/archievement/query_ranking_list.do"
## 奖项相关 ##
## 查询奖励项目
VITE_URL_RWARD_PROJECTS="http://10.39.0.61:8081/desktop_archievement_backend/rewards/query_reward_projects.do"
## 查询获奖人员
VITE_URL_REWARD_GAINERS="http://10.39.0.61:8081/desktop_archievement_backend/rewards/query_reward_gainers.do"
## 添加获奖人员
VITE_URL_ADD_REWARD_TELSALER="http://10.39.0.61:8081/desktop_archievement_backend/rewards/add_telsaler_reward.do"
## 更新获奖人员
VITE_URL_UPDATE_REWARD_TELSALER="http://10.39.0.61:8081/desktop_archievement_backend/rewards/update_telsaler_reward.do"
## 删除获奖人员
VITE_URL_DEL_REWARD_TELSALER="http://10.39.0.61:8081/desktop_archievement_backend/rewards/delete_telsaler_reward.do"
## 上传文件
VITE_URL_UPLOAD_FILE="http://10.39.0.61:8081/desktop_archievement_backend/file/file-upload.do"
## 导入报表
VITE_URL_IMPORT_REPORT="http://10.39.0.61:8081/desktop_archievement_backend/import_bi_data/excel.do"
## 请求BI报表数据
VITE_URL_BI_TELSALER_ATTACHINGRATE="http://10.39.0.61:8081/desktop_archievement_backend/archievement/bi_telsaler_attachingrate.do"
VITE_URL_BI_TELSALER_RENEWALRATE="http://10.39.0.61:8081/desktop_archievement_backend/archievement/bi_telsaler_renewalrate.do"
VITE_URL_BI_DEPARTMENT_ATTACHINGRATE="http://10.39.0.61:8081/desktop_archievement_backend/archievement/bi_department_attachingrate.do"
VITE_URL_BI_DEPARTMENT_RENEWALRATE="http://10.39.0.61:8081/desktop_archievement_backend/archievement/bi_department_renewalrate.do"

View File

@@ -10,28 +10,28 @@
"dependencies": { "dependencies": {
"@element-plus/icons-vue": "^2.1.0", "@element-plus/icons-vue": "^2.1.0",
"echarts": "^5.4.3", "echarts": "^5.4.3",
"element-plus": "^2.4.1", "element-plus": "^2.4.2",
"mitt": "^3.0.1", "mitt": "^3.0.1",
"moment": "^2.29.4", "moment": "^2.29.4",
"sass-loader": "^13.3.2", "sass-loader": "^13.3.2",
"vue": "^3.3.6", "vue": "^3.3.8",
"vue-router": "^4.2.5", "vue-router": "^4.2.5",
"vuex": "^4.1.0" "vuex": "^4.1.0"
}, },
"devDependencies": { "devDependencies": {
"@babel/eslint-parser": "^7.22.15", "@babel/eslint-parser": "^7.23.3",
"@rushstack/eslint-patch": "^1.5.1", "@rushstack/eslint-patch": "^1.5.1",
"@typescript-eslint/eslint-plugin": "^6.8.0", "@typescript-eslint/eslint-plugin": "^6.11.0",
"@vitejs/plugin-vue": "^4.4.0", "@vitejs/plugin-vue": "^4.5.0",
"@vue/cli-plugin-eslint": "^5.0.8", "@vue/cli-plugin-eslint": "^5.0.8",
"@vue/eslint-config-typescript": "^12.0.0", "@vue/eslint-config-typescript": "^12.0.0",
"axios": "^1.5.1", "axios": "^1.6.2",
"babel": "^6.23.0", "babel": "^6.23.0",
"eslint-config-recommended": "^4.1.0", "eslint-config-recommended": "^4.1.0",
"eslint-config-standard-with-typescript": "^39.1.1", "eslint-config-standard-with-typescript": "^40.0.0",
"eslint-plugin-vue": "^9.17.0", "eslint-plugin-vue": "^9.18.1",
"node-sass": "^9.0.0", "node-sass": "^9.0.0",
"sass": "^1.69.4", "sass": "^1.69.5",
"style-loader": "^3.3.3", "style-loader": "^3.3.3",
"ts-node": "^10.9.1", "ts-node": "^10.9.1",
"vue-eslint-parser": "^9.3.2" "vue-eslint-parser": "^9.3.2"
@@ -126,9 +126,9 @@
} }
}, },
"node_modules/@babel/eslint-parser": { "node_modules/@babel/eslint-parser": {
"version": "7.22.15", "version": "7.23.3",
"resolved": "https://registry.npmmirror.com/@babel/eslint-parser/-/eslint-parser-7.22.15.tgz", "resolved": "https://registry.npmmirror.com/@babel/eslint-parser/-/eslint-parser-7.23.3.tgz",
"integrity": "sha512-yc8OOBIQk1EcRrpizuARSQS0TWAcOMpEJ1aafhNznaeYkeL+OhqnDObGFylB8ka8VFF/sZc+S4RzHyO+3LjQxg==", "integrity": "sha512-9bTuNlyx7oSstodm1cR1bECj4fkiknsDa1YniISkJemMY3DGhJNYBECbe6QD/q54mp2J8VO66jW3/7uP//iFCw==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1", "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1",
@@ -1514,9 +1514,9 @@
"peer": true "peer": true
}, },
"node_modules/@types/semver": { "node_modules/@types/semver": {
"version": "7.5.3", "version": "7.5.5",
"resolved": "https://registry.npmmirror.com/@types/semver/-/semver-7.5.3.tgz", "resolved": "https://registry.npmmirror.com/@types/semver/-/semver-7.5.5.tgz",
"integrity": "sha512-OxepLK9EuNEIPxWNME+C6WwbRAOOI2o2BaQEGzz5Lu2e4Z5eDnEo+/aVEDMIXywoJitJ7xWd641wrGLZdtwRyw==", "integrity": "sha512-+d+WYC1BxJ6yVOgUgzK8gWvp5qF8ssV5r4nsDcZWKRWcDQLQ619tvWAxJQYGgBrO1MnLJC7a5GtiYsAoQ47dJg==",
"dev": true "dev": true
}, },
"node_modules/@types/send": { "node_modules/@types/send": {
@@ -1578,16 +1578,16 @@
} }
}, },
"node_modules/@typescript-eslint/eslint-plugin": { "node_modules/@typescript-eslint/eslint-plugin": {
"version": "6.8.0", "version": "6.11.0",
"resolved": "https://registry.npmmirror.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.8.0.tgz", "resolved": "https://registry.npmmirror.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.11.0.tgz",
"integrity": "sha512-GosF4238Tkes2SHPQ1i8f6rMtG6zlKwMEB0abqSJ3Npvos+doIlc/ATG+vX1G9coDF3Ex78zM3heXHLyWEwLUw==", "integrity": "sha512-uXnpZDc4VRjY4iuypDBKzW1rz9T5YBBK0snMn8MaTSNd2kMlj50LnLBABELjJiOL5YHk7ZD8hbSpI9ubzqYI0w==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@eslint-community/regexpp": "^4.5.1", "@eslint-community/regexpp": "^4.5.1",
"@typescript-eslint/scope-manager": "6.8.0", "@typescript-eslint/scope-manager": "6.11.0",
"@typescript-eslint/type-utils": "6.8.0", "@typescript-eslint/type-utils": "6.11.0",
"@typescript-eslint/utils": "6.8.0", "@typescript-eslint/utils": "6.11.0",
"@typescript-eslint/visitor-keys": "6.8.0", "@typescript-eslint/visitor-keys": "6.11.0",
"debug": "^4.3.4", "debug": "^4.3.4",
"graphemer": "^1.4.0", "graphemer": "^1.4.0",
"ignore": "^5.2.4", "ignore": "^5.2.4",
@@ -1609,34 +1609,34 @@
} }
}, },
"node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/scope-manager": { "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/scope-manager": {
"version": "6.8.0", "version": "6.11.0",
"resolved": "https://registry.npmmirror.com/@typescript-eslint/scope-manager/-/scope-manager-6.8.0.tgz", "resolved": "https://registry.npmmirror.com/@typescript-eslint/scope-manager/-/scope-manager-6.11.0.tgz",
"integrity": "sha512-xe0HNBVwCph7rak+ZHcFD6A+q50SMsFwcmfdjs9Kz4qDh5hWhaPhFjRs/SODEhroBI5Ruyvyz9LfwUJ624O40g==", "integrity": "sha512-0A8KoVvIURG4uhxAdjSaxy8RdRE//HztaZdG8KiHLP8WOXSk0vlF7Pvogv+vlJA5Rnjj/wDcFENvDaHb+gKd1A==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@typescript-eslint/types": "6.8.0", "@typescript-eslint/types": "6.11.0",
"@typescript-eslint/visitor-keys": "6.8.0" "@typescript-eslint/visitor-keys": "6.11.0"
}, },
"engines": { "engines": {
"node": "^16.0.0 || >=18.0.0" "node": "^16.0.0 || >=18.0.0"
} }
}, },
"node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/types": { "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/types": {
"version": "6.8.0", "version": "6.11.0",
"resolved": "https://registry.npmmirror.com/@typescript-eslint/types/-/types-6.8.0.tgz", "resolved": "https://registry.npmmirror.com/@typescript-eslint/types/-/types-6.11.0.tgz",
"integrity": "sha512-p5qOxSum7W3k+llc7owEStXlGmSl8FcGvhYt8Vjy7FqEnmkCVlM3P57XQEGj58oqaBWDQXbJDZxwUWMS/EAPNQ==", "integrity": "sha512-ZbEzuD4DwEJxwPqhv3QULlRj8KYTAnNsXxmfuUXFCxZmO6CF2gM/y+ugBSAQhrqaJL3M+oe4owdWunaHM6beqA==",
"dev": true, "dev": true,
"engines": { "engines": {
"node": "^16.0.0 || >=18.0.0" "node": "^16.0.0 || >=18.0.0"
} }
}, },
"node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/visitor-keys": { "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/visitor-keys": {
"version": "6.8.0", "version": "6.11.0",
"resolved": "https://registry.npmmirror.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.8.0.tgz", "resolved": "https://registry.npmmirror.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.11.0.tgz",
"integrity": "sha512-oqAnbA7c+pgOhW2OhGvxm0t1BULX5peQI/rLsNDpGM78EebV3C9IGbX5HNZabuZ6UQrYveCLjKo8Iy/lLlBkkg==", "integrity": "sha512-+SUN/W7WjBr05uRxPggJPSzyB8zUpaYo2hByKasWbqr3PM8AXfZt8UHdNpBS1v9SA62qnSSMF3380SwDqqprgQ==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@typescript-eslint/types": "6.8.0", "@typescript-eslint/types": "6.11.0",
"eslint-visitor-keys": "^3.4.1" "eslint-visitor-keys": "^3.4.1"
}, },
"engines": { "engines": {
@@ -1723,13 +1723,13 @@
} }
}, },
"node_modules/@typescript-eslint/type-utils": { "node_modules/@typescript-eslint/type-utils": {
"version": "6.8.0", "version": "6.11.0",
"resolved": "https://registry.npmmirror.com/@typescript-eslint/type-utils/-/type-utils-6.8.0.tgz", "resolved": "https://registry.npmmirror.com/@typescript-eslint/type-utils/-/type-utils-6.11.0.tgz",
"integrity": "sha512-RYOJdlkTJIXW7GSldUIHqc/Hkto8E+fZN96dMIFhuTJcQwdRoGN2rEWA8U6oXbLo0qufH7NPElUb+MceHtz54g==", "integrity": "sha512-nA4IOXwZtqBjIoYrJcYxLRO+F9ri+leVGoJcMW1uqr4r1Hq7vW5cyWrA43lFbpRvQ9XgNrnfLpIkO3i1emDBIA==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@typescript-eslint/typescript-estree": "6.8.0", "@typescript-eslint/typescript-estree": "6.11.0",
"@typescript-eslint/utils": "6.8.0", "@typescript-eslint/utils": "6.11.0",
"debug": "^4.3.4", "debug": "^4.3.4",
"ts-api-utils": "^1.0.1" "ts-api-utils": "^1.0.1"
}, },
@@ -1746,22 +1746,22 @@
} }
}, },
"node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/types": { "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/types": {
"version": "6.8.0", "version": "6.11.0",
"resolved": "https://registry.npmmirror.com/@typescript-eslint/types/-/types-6.8.0.tgz", "resolved": "https://registry.npmmirror.com/@typescript-eslint/types/-/types-6.11.0.tgz",
"integrity": "sha512-p5qOxSum7W3k+llc7owEStXlGmSl8FcGvhYt8Vjy7FqEnmkCVlM3P57XQEGj58oqaBWDQXbJDZxwUWMS/EAPNQ==", "integrity": "sha512-ZbEzuD4DwEJxwPqhv3QULlRj8KYTAnNsXxmfuUXFCxZmO6CF2gM/y+ugBSAQhrqaJL3M+oe4owdWunaHM6beqA==",
"dev": true, "dev": true,
"engines": { "engines": {
"node": "^16.0.0 || >=18.0.0" "node": "^16.0.0 || >=18.0.0"
} }
}, },
"node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/typescript-estree": { "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/typescript-estree": {
"version": "6.8.0", "version": "6.11.0",
"resolved": "https://registry.npmmirror.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.8.0.tgz", "resolved": "https://registry.npmmirror.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.11.0.tgz",
"integrity": "sha512-ISgV0lQ8XgW+mvv5My/+iTUdRmGspducmQcDw5JxznasXNnZn3SKNrTRuMsEXv+V/O+Lw9AGcQCfVaOPCAk/Zg==", "integrity": "sha512-Aezzv1o2tWJwvZhedzvD5Yv7+Lpu1by/U1LZ5gLc4tCx8jUmuSCMioPFRjliN/6SJIvY6HpTtJIWubKuYYYesQ==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@typescript-eslint/types": "6.8.0", "@typescript-eslint/types": "6.11.0",
"@typescript-eslint/visitor-keys": "6.8.0", "@typescript-eslint/visitor-keys": "6.11.0",
"debug": "^4.3.4", "debug": "^4.3.4",
"globby": "^11.1.0", "globby": "^11.1.0",
"is-glob": "^4.0.3", "is-glob": "^4.0.3",
@@ -1778,12 +1778,12 @@
} }
}, },
"node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/visitor-keys": { "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/visitor-keys": {
"version": "6.8.0", "version": "6.11.0",
"resolved": "https://registry.npmmirror.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.8.0.tgz", "resolved": "https://registry.npmmirror.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.11.0.tgz",
"integrity": "sha512-oqAnbA7c+pgOhW2OhGvxm0t1BULX5peQI/rLsNDpGM78EebV3C9IGbX5HNZabuZ6UQrYveCLjKo8Iy/lLlBkkg==", "integrity": "sha512-+SUN/W7WjBr05uRxPggJPSzyB8zUpaYo2hByKasWbqr3PM8AXfZt8UHdNpBS1v9SA62qnSSMF3380SwDqqprgQ==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@typescript-eslint/types": "6.8.0", "@typescript-eslint/types": "6.11.0",
"eslint-visitor-keys": "^3.4.1" "eslint-visitor-keys": "^3.4.1"
}, },
"engines": { "engines": {
@@ -1898,17 +1898,17 @@
"dev": true "dev": true
}, },
"node_modules/@typescript-eslint/utils": { "node_modules/@typescript-eslint/utils": {
"version": "6.8.0", "version": "6.11.0",
"resolved": "https://registry.npmmirror.com/@typescript-eslint/utils/-/utils-6.8.0.tgz", "resolved": "https://registry.npmmirror.com/@typescript-eslint/utils/-/utils-6.11.0.tgz",
"integrity": "sha512-dKs1itdE2qFG4jr0dlYLQVppqTE+Itt7GmIf/vX6CSvsW+3ov8PbWauVKyyfNngokhIO9sKZeRGCUo1+N7U98Q==", "integrity": "sha512-p23ibf68fxoZy605dc0dQAEoUsoiNoP3MD9WQGiHLDuTSOuqoTsa4oAy+h3KDkTcxbbfOtUjb9h3Ta0gT4ug2g==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@eslint-community/eslint-utils": "^4.4.0", "@eslint-community/eslint-utils": "^4.4.0",
"@types/json-schema": "^7.0.12", "@types/json-schema": "^7.0.12",
"@types/semver": "^7.5.0", "@types/semver": "^7.5.0",
"@typescript-eslint/scope-manager": "6.8.0", "@typescript-eslint/scope-manager": "6.11.0",
"@typescript-eslint/types": "6.8.0", "@typescript-eslint/types": "6.11.0",
"@typescript-eslint/typescript-estree": "6.8.0", "@typescript-eslint/typescript-estree": "6.11.0",
"semver": "^7.5.4" "semver": "^7.5.4"
}, },
"engines": { "engines": {
@@ -1919,35 +1919,35 @@
} }
}, },
"node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/scope-manager": { "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/scope-manager": {
"version": "6.8.0", "version": "6.11.0",
"resolved": "https://registry.npmmirror.com/@typescript-eslint/scope-manager/-/scope-manager-6.8.0.tgz", "resolved": "https://registry.npmmirror.com/@typescript-eslint/scope-manager/-/scope-manager-6.11.0.tgz",
"integrity": "sha512-xe0HNBVwCph7rak+ZHcFD6A+q50SMsFwcmfdjs9Kz4qDh5hWhaPhFjRs/SODEhroBI5Ruyvyz9LfwUJ624O40g==", "integrity": "sha512-0A8KoVvIURG4uhxAdjSaxy8RdRE//HztaZdG8KiHLP8WOXSk0vlF7Pvogv+vlJA5Rnjj/wDcFENvDaHb+gKd1A==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@typescript-eslint/types": "6.8.0", "@typescript-eslint/types": "6.11.0",
"@typescript-eslint/visitor-keys": "6.8.0" "@typescript-eslint/visitor-keys": "6.11.0"
}, },
"engines": { "engines": {
"node": "^16.0.0 || >=18.0.0" "node": "^16.0.0 || >=18.0.0"
} }
}, },
"node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/types": { "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/types": {
"version": "6.8.0", "version": "6.11.0",
"resolved": "https://registry.npmmirror.com/@typescript-eslint/types/-/types-6.8.0.tgz", "resolved": "https://registry.npmmirror.com/@typescript-eslint/types/-/types-6.11.0.tgz",
"integrity": "sha512-p5qOxSum7W3k+llc7owEStXlGmSl8FcGvhYt8Vjy7FqEnmkCVlM3P57XQEGj58oqaBWDQXbJDZxwUWMS/EAPNQ==", "integrity": "sha512-ZbEzuD4DwEJxwPqhv3QULlRj8KYTAnNsXxmfuUXFCxZmO6CF2gM/y+ugBSAQhrqaJL3M+oe4owdWunaHM6beqA==",
"dev": true, "dev": true,
"engines": { "engines": {
"node": "^16.0.0 || >=18.0.0" "node": "^16.0.0 || >=18.0.0"
} }
}, },
"node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/typescript-estree": { "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/typescript-estree": {
"version": "6.8.0", "version": "6.11.0",
"resolved": "https://registry.npmmirror.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.8.0.tgz", "resolved": "https://registry.npmmirror.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.11.0.tgz",
"integrity": "sha512-ISgV0lQ8XgW+mvv5My/+iTUdRmGspducmQcDw5JxznasXNnZn3SKNrTRuMsEXv+V/O+Lw9AGcQCfVaOPCAk/Zg==", "integrity": "sha512-Aezzv1o2tWJwvZhedzvD5Yv7+Lpu1by/U1LZ5gLc4tCx8jUmuSCMioPFRjliN/6SJIvY6HpTtJIWubKuYYYesQ==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@typescript-eslint/types": "6.8.0", "@typescript-eslint/types": "6.11.0",
"@typescript-eslint/visitor-keys": "6.8.0", "@typescript-eslint/visitor-keys": "6.11.0",
"debug": "^4.3.4", "debug": "^4.3.4",
"globby": "^11.1.0", "globby": "^11.1.0",
"is-glob": "^4.0.3", "is-glob": "^4.0.3",
@@ -1964,12 +1964,12 @@
} }
}, },
"node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/visitor-keys": { "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/visitor-keys": {
"version": "6.8.0", "version": "6.11.0",
"resolved": "https://registry.npmmirror.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.8.0.tgz", "resolved": "https://registry.npmmirror.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.11.0.tgz",
"integrity": "sha512-oqAnbA7c+pgOhW2OhGvxm0t1BULX5peQI/rLsNDpGM78EebV3C9IGbX5HNZabuZ6UQrYveCLjKo8Iy/lLlBkkg==", "integrity": "sha512-+SUN/W7WjBr05uRxPggJPSzyB8zUpaYo2hByKasWbqr3PM8AXfZt8UHdNpBS1v9SA62qnSSMF3380SwDqqprgQ==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@typescript-eslint/types": "6.8.0", "@typescript-eslint/types": "6.11.0",
"eslint-visitor-keys": "^3.4.1" "eslint-visitor-keys": "^3.4.1"
}, },
"engines": { "engines": {
@@ -2041,15 +2041,15 @@
} }
}, },
"node_modules/@vitejs/plugin-vue": { "node_modules/@vitejs/plugin-vue": {
"version": "4.4.0", "version": "4.5.0",
"resolved": "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-4.4.0.tgz", "resolved": "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-4.5.0.tgz",
"integrity": "sha512-xdguqb+VUwiRpSg+nsc2HtbAUSGak25DXYvpQQi4RVU1Xq1uworyoH/md9Rfd8zMmPR/pSghr309QNcftUVseg==", "integrity": "sha512-a2WSpP8X8HTEww/U00bU4mX1QpLINNuz/2KMNpLsdu3BzOpak3AGI1CJYBTXcc4SPhaD0eNRUp7IyQK405L5dQ==",
"dev": true, "dev": true,
"engines": { "engines": {
"node": "^14.18.0 || >=16.0.0" "node": "^14.18.0 || >=16.0.0"
}, },
"peerDependencies": { "peerDependencies": {
"vite": "^4.0.0", "vite": "^4.0.0 || ^5.0.0",
"vue": "^3.2.25" "vue": "^3.2.25"
} }
}, },
@@ -2318,36 +2318,36 @@
"dev": true "dev": true
}, },
"node_modules/@vue/compiler-core": { "node_modules/@vue/compiler-core": {
"version": "3.3.6", "version": "3.3.8",
"resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.3.6.tgz", "resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.3.8.tgz",
"integrity": "sha512-2JNjemwaNwf+MkkatATVZi7oAH1Hx0B04DdPH3ZoZ8vKC1xZVP7nl4HIsk8XYd3r+/52sqqoz9TWzYc3yE9dqA==", "integrity": "sha512-hN/NNBUECw8SusQvDSqqcVv6gWq8L6iAktUR0UF3vGu2OhzRqcOiAno0FmBJWwxhYEXRlQJT5XnoKsVq1WZx4g==",
"dependencies": { "dependencies": {
"@babel/parser": "^7.23.0", "@babel/parser": "^7.23.0",
"@vue/shared": "3.3.6", "@vue/shared": "3.3.8",
"estree-walker": "^2.0.2", "estree-walker": "^2.0.2",
"source-map-js": "^1.0.2" "source-map-js": "^1.0.2"
} }
}, },
"node_modules/@vue/compiler-dom": { "node_modules/@vue/compiler-dom": {
"version": "3.3.6", "version": "3.3.8",
"resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.3.6.tgz", "resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.3.8.tgz",
"integrity": "sha512-1MxXcJYMHiTPexjLAJUkNs/Tw2eDf2tY3a0rL+LfuWyiKN2s6jvSwywH3PWD8bKICjfebX3GWx2Os8jkRDq3Ng==", "integrity": "sha512-+PPtv+p/nWDd0AvJu3w8HS0RIm/C6VGBIRe24b9hSyNWOAPEUosFZ5diwawwP8ip5sJ8n0Pe87TNNNHnvjs0FQ==",
"dependencies": { "dependencies": {
"@vue/compiler-core": "3.3.6", "@vue/compiler-core": "3.3.8",
"@vue/shared": "3.3.6" "@vue/shared": "3.3.8"
} }
}, },
"node_modules/@vue/compiler-sfc": { "node_modules/@vue/compiler-sfc": {
"version": "3.3.6", "version": "3.3.8",
"resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.3.6.tgz", "resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.3.8.tgz",
"integrity": "sha512-/Kms6du2h1VrXFreuZmlvQej8B1zenBqIohP0690IUBkJjsFvJxY0crcvVRJ0UhMgSR9dewB+khdR1DfbpArJA==", "integrity": "sha512-WMzbUrlTjfYF8joyT84HfwwXo+8WPALuPxhy+BZ6R4Aafls+jDBnSz8PDz60uFhuqFbl3HxRfxvDzrUf3THwpA==",
"dependencies": { "dependencies": {
"@babel/parser": "^7.23.0", "@babel/parser": "^7.23.0",
"@vue/compiler-core": "3.3.6", "@vue/compiler-core": "3.3.8",
"@vue/compiler-dom": "3.3.6", "@vue/compiler-dom": "3.3.8",
"@vue/compiler-ssr": "3.3.6", "@vue/compiler-ssr": "3.3.8",
"@vue/reactivity-transform": "3.3.6", "@vue/reactivity-transform": "3.3.8",
"@vue/shared": "3.3.6", "@vue/shared": "3.3.8",
"estree-walker": "^2.0.2", "estree-walker": "^2.0.2",
"magic-string": "^0.30.5", "magic-string": "^0.30.5",
"postcss": "^8.4.31", "postcss": "^8.4.31",
@@ -2355,12 +2355,12 @@
} }
}, },
"node_modules/@vue/compiler-ssr": { "node_modules/@vue/compiler-ssr": {
"version": "3.3.6", "version": "3.3.8",
"resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.3.6.tgz", "resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.3.8.tgz",
"integrity": "sha512-QTIHAfDCHhjXlYGkUg5KH7YwYtdUM1vcFl/FxFDlD6d0nXAmnjizka3HITp8DGudzHndv2PjKVS44vqqy0vP4w==", "integrity": "sha512-hXCqQL/15kMVDBuoBYpUnSYT8doDNwsjvm3jTefnXr+ytn294ySnT8NlsFHmTgKNjwpuFy7XVV8yTeLtNl/P6w==",
"dependencies": { "dependencies": {
"@vue/compiler-dom": "3.3.6", "@vue/compiler-dom": "3.3.8",
"@vue/shared": "3.3.6" "@vue/shared": "3.3.8"
} }
}, },
"node_modules/@vue/component-compiler-utils": { "node_modules/@vue/component-compiler-utils": {
@@ -2459,60 +2459,60 @@
} }
}, },
"node_modules/@vue/reactivity": { "node_modules/@vue/reactivity": {
"version": "3.3.6", "version": "3.3.8",
"resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.3.6.tgz", "resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.3.8.tgz",
"integrity": "sha512-gtChAumfQz5lSy5jZXfyXbKrIYPf9XEOrIr6rxwVyeWVjFhJwmwPLtV6Yis+M9onzX++I5AVE9j+iPH60U+B8Q==", "integrity": "sha512-ctLWitmFBu6mtddPyOKpHg8+5ahouoTCRtmAHZAXmolDtuZXfjL2T3OJ6DL6ezBPQB1SmMnpzjiWjCiMYmpIuw==",
"dependencies": { "dependencies": {
"@vue/shared": "3.3.6" "@vue/shared": "3.3.8"
} }
}, },
"node_modules/@vue/reactivity-transform": { "node_modules/@vue/reactivity-transform": {
"version": "3.3.6", "version": "3.3.8",
"resolved": "https://registry.npmmirror.com/@vue/reactivity-transform/-/reactivity-transform-3.3.6.tgz", "resolved": "https://registry.npmmirror.com/@vue/reactivity-transform/-/reactivity-transform-3.3.8.tgz",
"integrity": "sha512-RlJl4dHfeO7EuzU1iJOsrlqWyJfHTkJbvYz/IOJWqu8dlCNWtxWX377WI0VsbAgBizjwD+3ZjdnvSyyFW1YVng==", "integrity": "sha512-49CvBzmZNtcHua0XJ7GdGifM8GOXoUMOX4dD40Y5DxI3R8OUhMlvf2nvgUAcPxaXiV5MQQ1Nwy09ADpnLQUqRw==",
"dependencies": { "dependencies": {
"@babel/parser": "^7.23.0", "@babel/parser": "^7.23.0",
"@vue/compiler-core": "3.3.6", "@vue/compiler-core": "3.3.8",
"@vue/shared": "3.3.6", "@vue/shared": "3.3.8",
"estree-walker": "^2.0.2", "estree-walker": "^2.0.2",
"magic-string": "^0.30.5" "magic-string": "^0.30.5"
} }
}, },
"node_modules/@vue/runtime-core": { "node_modules/@vue/runtime-core": {
"version": "3.3.6", "version": "3.3.8",
"resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.3.6.tgz", "resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.3.8.tgz",
"integrity": "sha512-qp7HTP1iw1UW2ZGJ8L3zpqlngrBKvLsDAcq5lA6JvEXHmpoEmjKju7ahM9W2p/h51h0OT5F2fGlP/gMhHOmbUA==", "integrity": "sha512-qurzOlb6q26KWQ/8IShHkMDOuJkQnQcTIp1sdP4I9MbCf9FJeGVRXJFr2mF+6bXh/3Zjr9TDgURXrsCr9bfjUw==",
"dependencies": { "dependencies": {
"@vue/reactivity": "3.3.6", "@vue/reactivity": "3.3.8",
"@vue/shared": "3.3.6" "@vue/shared": "3.3.8"
} }
}, },
"node_modules/@vue/runtime-dom": { "node_modules/@vue/runtime-dom": {
"version": "3.3.6", "version": "3.3.8",
"resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.3.6.tgz", "resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.3.8.tgz",
"integrity": "sha512-AoX3Cp8NqMXjLbIG9YR6n/pPLWE9TiDdk6wTJHFnl2GpHzDFH1HLBC9wlqqQ7RlnvN3bVLpzPGAAH00SAtOxHg==", "integrity": "sha512-Noy5yM5UIf9UeFoowBVgghyGGPIDPy1Qlqt0yVsUdAVbqI8eeMSsTqBtauaEoT2UFXUk5S64aWVNJN4MJ2vRdA==",
"dependencies": { "dependencies": {
"@vue/runtime-core": "3.3.6", "@vue/runtime-core": "3.3.8",
"@vue/shared": "3.3.6", "@vue/shared": "3.3.8",
"csstype": "^3.1.2" "csstype": "^3.1.2"
} }
}, },
"node_modules/@vue/server-renderer": { "node_modules/@vue/server-renderer": {
"version": "3.3.6", "version": "3.3.8",
"resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.3.6.tgz", "resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.3.8.tgz",
"integrity": "sha512-kgLoN43W4ERdZ6dpyy+gnk2ZHtcOaIr5Uc/WUP5DRwutgvluzu2pudsZGoD2b7AEJHByUVMa9k6Sho5lLRCykw==", "integrity": "sha512-zVCUw7RFskvPuNlPn/8xISbrf0zTWsTSdYTsUTN1ERGGZGVnRxM2QZ3x1OR32+vwkkCm0IW6HmJ49IsPm7ilLg==",
"dependencies": { "dependencies": {
"@vue/compiler-ssr": "3.3.6", "@vue/compiler-ssr": "3.3.8",
"@vue/shared": "3.3.6" "@vue/shared": "3.3.8"
}, },
"peerDependencies": { "peerDependencies": {
"vue": "3.3.6" "vue": "3.3.8"
} }
}, },
"node_modules/@vue/shared": { "node_modules/@vue/shared": {
"version": "3.3.6", "version": "3.3.8",
"resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.3.6.tgz", "resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.3.8.tgz",
"integrity": "sha512-Xno5pEqg8SVhomD0kTSmfh30ZEmV/+jZtyh39q6QflrjdJCXah5lrnOLi9KB6a5k5aAHXMXjoMnxlzUkCNfWLQ==" "integrity": "sha512-8PGwybFwM4x8pcfgqEQFy70NaQxASvOC5DJwLQfpArw1UDfUXrJkdxD3BhVTMS+0Lef/TU7YO0Jvr0jJY8T+mw=="
}, },
"node_modules/@vue/vue-loader-v15": { "node_modules/@vue/vue-loader-v15": {
"name": "vue-loader", "name": "vue-loader",
@@ -3248,9 +3248,9 @@
} }
}, },
"node_modules/axios": { "node_modules/axios": {
"version": "1.5.1", "version": "1.6.2",
"resolved": "https://registry.npmmirror.com/axios/-/axios-1.5.1.tgz", "resolved": "https://registry.npmmirror.com/axios/-/axios-1.6.2.tgz",
"integrity": "sha512-Q28iYCWzNHjAm+yEAot5QaAMxhMghWLFVf7rRdwhUI+c2jix2DUXjAHXVi+s1ibs3mjPO/cCgbA++3BjD0vP/A==", "integrity": "sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"follow-redirects": "^1.15.0", "follow-redirects": "^1.15.0",
@@ -4962,9 +4962,9 @@
"integrity": "sha512-UdREXMXzLkREF4jA8t89FQjA8WHI6ssP38PMY4/4KhXFQbtImnghh4GkCgrtiZwLKUKVD2iTVXvDVQjfomEQuA==" "integrity": "sha512-UdREXMXzLkREF4jA8t89FQjA8WHI6ssP38PMY4/4KhXFQbtImnghh4GkCgrtiZwLKUKVD2iTVXvDVQjfomEQuA=="
}, },
"node_modules/element-plus": { "node_modules/element-plus": {
"version": "2.4.1", "version": "2.4.2",
"resolved": "https://registry.npmmirror.com/element-plus/-/element-plus-2.4.1.tgz", "resolved": "https://registry.npmmirror.com/element-plus/-/element-plus-2.4.2.tgz",
"integrity": "sha512-t7nl+vQlkBKVk1Ag6AufSDyFV8YIXxTFsaya4Nz/0tiRlcz65WPN4WMFeNURuFJleu1HLNtP4YyQKMuS7El8uA==", "integrity": "sha512-E/HwXX7JF1LPvQSjs0fZ8WblIoc0quoXsRXQZiL7QDq7xJdNGSUaXtdk7xiEv7axPmLfEFtxE5du9fFspDrmJw==",
"dependencies": { "dependencies": {
"@ctrl/tinycolor": "^3.4.1", "@ctrl/tinycolor": "^3.4.1",
"@element-plus/icons-vue": "^2.0.6", "@element-plus/icons-vue": "^2.0.6",
@@ -6777,9 +6777,9 @@
} }
}, },
"node_modules/eslint-config-standard-with-typescript": { "node_modules/eslint-config-standard-with-typescript": {
"version": "39.1.1", "version": "40.0.0",
"resolved": "https://registry.npmmirror.com/eslint-config-standard-with-typescript/-/eslint-config-standard-with-typescript-39.1.1.tgz", "resolved": "https://registry.npmmirror.com/eslint-config-standard-with-typescript/-/eslint-config-standard-with-typescript-40.0.0.tgz",
"integrity": "sha512-t6B5Ep8E4I18uuoYeYxINyqcXb2UbC0SOOTxRtBSt2JUs+EzeXbfe2oaiPs71AIdnoWhXDO2fYOHz8df3kV84A==", "integrity": "sha512-GXUJcwIXiTQaS3H4etv8a1lejVVdZYaxZNz3g7vt6GoJosQqMTurbmSC4FVGyHiGT/d1TjFr3+47A3xsHhsG+Q==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@typescript-eslint/parser": "^6.4.0", "@typescript-eslint/parser": "^6.4.0",
@@ -7060,9 +7060,9 @@
} }
}, },
"node_modules/eslint-plugin-vue": { "node_modules/eslint-plugin-vue": {
"version": "9.17.0", "version": "9.18.1",
"resolved": "https://registry.npmmirror.com/eslint-plugin-vue/-/eslint-plugin-vue-9.17.0.tgz", "resolved": "https://registry.npmmirror.com/eslint-plugin-vue/-/eslint-plugin-vue-9.18.1.tgz",
"integrity": "sha512-r7Bp79pxQk9I5XDP0k2dpUC7Ots3OSWgvGZNu3BxmKK6Zg7NgVtcOB6OCna5Kb9oQwJPl5hq183WD0SY5tZtIQ==", "integrity": "sha512-7hZFlrEgg9NIzuVik2I9xSnJA5RsmOfueYgsUGUokEDLJ1LHtxO0Pl4duje1BriZ/jDWb+44tcIlC3yi0tdlZg==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@eslint-community/eslint-utils": "^4.4.0", "@eslint-community/eslint-utils": "^4.4.0",
@@ -12813,9 +12813,9 @@
"dev": true "dev": true
}, },
"node_modules/sass": { "node_modules/sass": {
"version": "1.69.4", "version": "1.69.5",
"resolved": "https://registry.npmmirror.com/sass/-/sass-1.69.4.tgz", "resolved": "https://registry.npmmirror.com/sass/-/sass-1.69.5.tgz",
"integrity": "sha512-+qEreVhqAy8o++aQfCJwp0sklr2xyEzkm9Pp/Igu9wNPoe7EZEQ8X/MBvvXggI2ql607cxKg/RKOwDj6pp2XDA==", "integrity": "sha512-qg2+UCJibLr2LCVOt3OlPhr/dqVHWOa9XtZf2OjbLs/T4VPSJ00udtgJxH3neXZm+QqX8B+3cU7RaLqp1iVfcQ==",
"devOptional": true, "devOptional": true,
"dependencies": { "dependencies": {
"chokidar": ">=3.0.0 <4.0.0", "chokidar": ">=3.0.0 <4.0.0",
@@ -14412,15 +14412,15 @@
} }
}, },
"node_modules/vue": { "node_modules/vue": {
"version": "3.3.6", "version": "3.3.8",
"resolved": "https://registry.npmmirror.com/vue/-/vue-3.3.6.tgz", "resolved": "https://registry.npmmirror.com/vue/-/vue-3.3.8.tgz",
"integrity": "sha512-jJIDETeWJnoY+gfn4ZtMPMS5KtbP4ax+CT4dcQFhTnWEk8xMupFyQ0JxL28nvT/M4+p4a0ptxaV2WY0LiIxvRg==", "integrity": "sha512-5VSX/3DabBikOXMsxzlW8JyfeLKlG9mzqnWgLQLty88vdZL7ZJgrdgBOmrArwxiLtmS+lNNpPcBYqrhE6TQW5w==",
"dependencies": { "dependencies": {
"@vue/compiler-dom": "3.3.6", "@vue/compiler-dom": "3.3.8",
"@vue/compiler-sfc": "3.3.6", "@vue/compiler-sfc": "3.3.8",
"@vue/runtime-dom": "3.3.6", "@vue/runtime-dom": "3.3.8",
"@vue/server-renderer": "3.3.6", "@vue/server-renderer": "3.3.8",
"@vue/shared": "3.3.6" "@vue/shared": "3.3.8"
}, },
"peerDependencies": { "peerDependencies": {
"typescript": "*" "typescript": "*"

View File

@@ -11,28 +11,28 @@
"dependencies": { "dependencies": {
"@element-plus/icons-vue": "^2.1.0", "@element-plus/icons-vue": "^2.1.0",
"echarts": "^5.4.3", "echarts": "^5.4.3",
"element-plus": "^2.4.1", "element-plus": "^2.4.2",
"mitt": "^3.0.1", "mitt": "^3.0.1",
"moment": "^2.29.4", "moment": "^2.29.4",
"sass-loader": "^13.3.2", "sass-loader": "^13.3.2",
"vue": "^3.3.6", "vue": "^3.3.8",
"vue-router": "^4.2.5", "vue-router": "^4.2.5",
"vuex": "^4.1.0" "vuex": "^4.1.0"
}, },
"devDependencies": { "devDependencies": {
"@babel/eslint-parser": "^7.22.15", "@babel/eslint-parser": "^7.23.3",
"@rushstack/eslint-patch": "^1.5.1", "@rushstack/eslint-patch": "^1.5.1",
"@typescript-eslint/eslint-plugin": "^6.8.0", "@typescript-eslint/eslint-plugin": "^6.11.0",
"@vitejs/plugin-vue": "^4.4.0", "@vitejs/plugin-vue": "^4.5.0",
"@vue/cli-plugin-eslint": "^5.0.8", "@vue/cli-plugin-eslint": "^5.0.8",
"@vue/eslint-config-typescript": "^12.0.0", "@vue/eslint-config-typescript": "^12.0.0",
"axios": "^1.5.1", "axios": "^1.6.2",
"babel": "^6.23.0", "babel": "^6.23.0",
"eslint-config-recommended": "^4.1.0", "eslint-config-recommended": "^4.1.0",
"eslint-config-standard-with-typescript": "^39.1.1", "eslint-config-standard-with-typescript": "^40.0.0",
"eslint-plugin-vue": "^9.17.0", "eslint-plugin-vue": "^9.18.1",
"node-sass": "^9.0.0", "node-sass": "^9.0.0",
"sass": "^1.69.4", "sass": "^1.69.5",
"style-loader": "^3.3.3", "style-loader": "^3.3.3",
"ts-node": "^10.9.1", "ts-node": "^10.9.1",
"vue-eslint-parser": "^9.3.2" "vue-eslint-parser": "^9.3.2"

View File

@@ -2,18 +2,28 @@
* @Author: Kane * @Author: Kane
* @Date: 2023-02-28 19:25:30 * @Date: 2023-02-28 19:25:30
* @LastEditors: Kane * @LastEditors: Kane
* @FilePath: /task_schedule/src/assets/css/public/global.scss * @FilePath: /task_schedule/src/assets/css/public/variables.scss
* @Description: * @Description:
* *
* Copyright (c) ${2022} by Kane, All Rights Reserved. * Copyright (c) ${2022} by Kane, All Rights Reserved.
*/ */
// color // color
/*
$color-bg-01: #fecb96; $color-bg-01: #fecb96;
$color-bg-02: #f7954e; $color-bg-02: #f7954e;
$color-bg-03: #f27620; $color-bg-03: #f27620;
$color-bg-04: #da3703; $color-bg-04: #da3703;
$color-bg-05: #ba1800; $color-bg-05: #ba1800;
*/
$color-bg-01: #00b2f8;
$color-bg-02: #00b0fb;
$color-bg-03: #0279ea;
$color-bg-04: #046ed6;
$color-bg-05: #033eb6;
$color-title-font: #046ed6;
$color-charts-bg: #ffffff9f; $color-charts-bg: #ffffff9f;
$color-honorlist-bg: rgba(255, 255, 255, 0.3); $color-honorlist-bg: rgba(255, 255, 255, 0.3);

View File

@@ -12,6 +12,7 @@
<el-progress <el-progress
type="circle" type="circle"
:percentage="ui.percentage" :percentage="ui.percentage"
status="success"
> >
<template #default> <template #default>
<span class="percentage-label">{{ ui.indicator }}</span> <span class="percentage-label">{{ ui.indicator }}</span>

View File

@@ -15,10 +15,13 @@
alt="" alt=""
> >
<div class="title-wrapper"> <div class="title-wrapper">
<span>"消8灭70"突围战</span> <span> 8 6 突围战</span>
<span>{{ props.month }}入营坐席</span> <span>指标落后入营坐席</span>
</div> </div>
</div> </div>
<div class="telsaler-list-wrapper">
<span>开发中</span>
</div>
</div> </div>
</template> </template>
@@ -46,6 +49,8 @@ export default {
<style scoped lang="scss"> <style scoped lang="scss">
.dishonorlist-wrapper { .dishonorlist-wrapper {
display: flex;
flex-direction: column;
height: 240px; height: 240px;
width: 360px; width: 360px;
border-radius: 5px; border-radius: 5px;
@@ -55,10 +60,16 @@ export default {
padding: 10px; padding: 10px;
>*+* {
margin-top: 10px;
}
.banner-wrapper { .banner-wrapper {
display: flex; display: flex;
justify-content: center; justify-content: center;
align-items: stretch; align-items: stretch;
height: 65px;
flex-grow: 0;
img { img {
// width: 70px; // width: 70px;
@@ -80,4 +91,24 @@ export default {
} }
} }
} }
.telsaler-list-wrapper {
flex-grow: 1;
display: flex;
justify-content: center;
align-items: center;
span {
display: block;
text-align: center;
color: rgb(101, 140, 194);
margin-top: 0px;
font: {
size: 2rem;
family: "FZ-ZHUOHEI";
weight: 100;
}
}
}
</style> </style>

View File

@@ -9,39 +9,18 @@
--> -->
<template> <template>
<div class="honorlist-wrapper"> <div class="honorlist-wrapper">
<span class="title">90俱乐部{{ $props.month }}月入围坐席</span> <div class="banner-wrapper">
<div class="reward-wrapper"> <img
<div class="leading-reward-wrapper"> src="@/assets/img/ranking/medal.png"
<div class="banner-wrapper"> alt=""
<img >
src="@/assets/img/ranking/medal.png" <div class="title-wrapper">
alt="领跑奖" <span>90俱乐部标杆坐席</span>
>
<span>领跑奖</span>
</div>
<div class="gainer-wrapper">
<span
v-for="gainer in ui.leadingReward"
:key="gainer"
>{{ gainer }}</span>
</div>
</div>
<div class="advance-reward-wrapper">
<div class="banner-wrapper">
<img
src="@/assets/img/ranking/copper_medal.png"
alt="飞跃奖"
>
<span>飞跃奖</span>
</div>
<div class="gainer-wrapper">
<span
v-for="gainer in ui.advanceReward"
:key="gainer"
>{{ gainer }}</span>
</div>
</div> </div>
</div> </div>
<div class="telsaler-list-wrapper">
<span>开发中</span>
</div>
</div> </div>
</template> </template>
@@ -81,6 +60,8 @@ export default {
<style scoped lang="scss"> <style scoped lang="scss">
.honorlist-wrapper { .honorlist-wrapper {
display: flex;
flex-direction: column;
height: 240px; height: 240px;
width: 360px; width: 360px;
border-radius: 5px; border-radius: 5px;
@@ -93,79 +74,54 @@ export default {
>*+* { >*+* {
margin-top: 10px; margin-top: 10px;
} }
}
.title { .banner-wrapper {
display: block; display: flex;
text-align: center; justify-content: center;
align-items: center;
height: 65px;
flex-grow: 0;
font: { img {
family: "FZ-ZHUOHEI"; width: 65px;
size: 1.4rem; height: 65px;
}
color: goldenrod;
} }
.reward-wrapper { .title-wrapper {
width: 100%;
display: flex;
justify-content: center;
align-items: stretch;
>*+* {
margin-left: 10px;
}
.leading-reward-wrapper {
width: 165px;
height: 100%;
}
.advance-reward-wrapper {
width: 165px;
height: 100%;
}
span { span {
display: block; display: block;
margin-top: 5px;
text-align: center; text-align: center;
color: #fff; color: rgb(245, 178, 11);
margin-top: 0px;
font: { font: {
size: 2rem; size: 1.65rem;
family: "FZ-ZHUOHEI"; family: "FZ-ZHUOHEI";
weight: 100; weight: 100;
}
}
.banner-wrapper {
display: flex;
justify-content: center;
align-items: center;
img {
width: 30px;
height: 30px;
}
span {
display: inline-block;
text-align: center;
color: #fff;
margin-top: 0px;
font: {
size: 1.5rem;
family: "FZ-ZHUOHEI";
weight: 100;
}
} }
} }
} }
} }
.telsaler-list-wrapper {
flex-grow: 1;
display: flex;
justify-content: center;
align-items: center;
span {
display: block;
text-align: center;
color: rgb(101, 140, 194);
margin-top: 0px;
font: {
size: 2rem;
family: "FZ-ZHUOHEI";
weight: 100;
}
}
}
</style> </style>

View File

@@ -42,7 +42,7 @@
align="center" align="center"
> >
<template #default="ranking"> <template #default="ranking">
<span class="rankinglist-index">{{ ranking.row.appraiseValue }}</span> <span class="rankinglist-index">{{ ranking.row.appraiseValue }}%</span>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>

View File

@@ -16,6 +16,9 @@ interface BIReportType
reportTypeName: string; reportTypeName: string;
} }
/**
* 导入报表的请求对象
*/
interface ImportBIReportRequest interface ImportBIReportRequest
{ {
filePath: string, filePath: string,
@@ -24,21 +27,127 @@ interface ImportBIReportRequest
sheetIndex: number, sheetIndex: number,
} }
/**
* 导入报表的相应对象
*/
interface ImportBIReportResponse interface ImportBIReportResponse
{
success: boolean, // 请求成功标志
message: string, // 请求结果说明
importedCount: number, // 导入记录的数量
}
// BI坐席渗透率报表记录
interface BITelsalerAttachingRateRecord
{
departmentName: string; // 部门
telsalerName: string; // 经办人
motoPremium: number; // 车险保费
nomotoPremium: number; // 非车险保费
motoPremiumProportion: number; // 车险保费占比
attachingRate: number; // 保费渗透率
attachingRateChange: number; // 渗透率环比上月
customerHandleRate: number; // 当月客户渗透率
customerHandleRateChange: number; // 客户渗透率环比上月
noMotoPremiumPerCustomer: number; // 当月车非客均保费
noMotoPremiumPerCustomerChange: number; // 客均保费环比上月
}
interface QueryBITelsalerAttachingRateReportResponse
{ {
success: boolean, success: boolean,
message: string, message: string,
importedCount: number, records: BITelsalerAttachingRateRecord[];
} }
type ImportBIReportResponseHandler = ( response: ImportBIReportResponse, error?: any ) => void; /**
* BI坐席续保率报表记录
*/
interface BITelsalerRenewalRateRecord
{
责任部门: string;
责任人: string;
机构目标值: number;
到期数全月: number;
序时到期数占比: number;
个车续保率序时: number;
个车续保率全月: number;
环比昨日: number;
环比上月: number;
平均提前签单天数: number;
环比: number;
}
interface QueryBITelsalerRenewalRateReportResponse
{
success: boolean;
message: string;
records: BITelsalerRenewalRateRecord[];
}
/** 机构 ***/
// 机构渗透率
/**
* 机构渗漏率报表记录
*/
interface BIDepartmentAttachingRateRecord
{
departmentName: string;
departmentObject: number;
objectGap: number;
motoPremium: number;
motoPremiumProPortion: number;
nomotoPremium: number;
attachingRate: number;
attachingRateChange: number;
motoInsuranceCustomerCount: number;
customerHandleRate: number;
customerHandleRateChange: number;
premiumPerCustomer: number;
premiumPerCustomerChange: number;
}
interface QueryBIDepartmentAttachingRateResponse
{
success: boolean;
message: string;
records: BIDepartmentAttachingRateRecord[];
}
// 机构续保率
interface BIDepartmentRenewalRateRecord
{
责任部门: string;
机构目标值: number;
到期数全月: number;
序时到期数占比: number;
个车续保率序时: number;
个车续保率全月: number;
环比昨日: number;
环比上月: number;
平均提前签单天数: number;
环比: number;
}
interface QueryBIDepartmentRenewalRateResponse
{
success: boolean;
message: string;
records: BIDepartmentRenewalRateRecord[];
}
type ImportBIReportResponseHandler = ( response: ImportBIReportResponse, error: any ) => void;
type QueryBITelsalerAttachingRateDataHandler = ( response: QueryBITelsalerAttachingRateReportResponse, error: any ) => void;
type QueryBITelsalerRenewalRateDataHandler = ( response: QueryBITelsalerRenewalRateReportResponse, error: any ) => void;
type QueryBIDepartmentAttachingRateDataHandler = ( response: QueryBIDepartmentAttachingRateResponse, error: any ) => void;
type QueryBIDepartmentRenewalRateDataHandler = ( response: QueryBIDepartmentRenewalRateResponse, error: any ) => void;
/** /**
* * 请求导入BI报表
* @param request 请求参数 * @param request 请求参数
* @param handler 调用者提供的请求结果处理函数 * @param handler 调用者提供的请求结果处理函数
*/ */
function importBIReport( request: ImportBIReportRequest, handler: any ): void function importBIReport( request: ImportBIReportRequest, handler: ImportBIReportResponseHandler ): void
{ {
const importResponse: ImportBIReportResponse = { const importResponse: ImportBIReportResponse = {
success: false, success: false,
@@ -56,7 +165,7 @@ function importBIReport( request: ImportBIReportRequest, handler: any ): void
const data: ImportBIReportResponse = response.data; const data: ImportBIReportResponse = response.data;
importResponse.success = data.success ?? false; importResponse.success = data.success ?? false;
importResponse.message = data.message ?? ""; importResponse.message = data.message ?? "请求完成,但服务器未返回请求结果消息!";
importResponse.importedCount = data.importedCount ?? 0; importResponse.importedCount = data.importedCount ?? 0;
handler( importResponse, null ); handler( importResponse, null );
@@ -70,10 +179,178 @@ function importBIReport( request: ImportBIReportRequest, handler: any ): void
}); });
} }
/**
* 请求BI坐席渗透率数据
* @param handler 处理请求结果的handler函数。
*/
function queryBITelsalerAttachingRateData( handler: QueryBITelsalerAttachingRateDataHandler ): void
{
const queryResponse: QueryBITelsalerAttachingRateReportResponse = {
success: false,
message: "",
records: [],
};
instance.request({
url: API_URL.URL_BI_TELSALER_ATTACHINGRATE,
method: "post",
})
.then(( response: AxiosResponse<any, any> ): void =>
{
const data = response.data ?? {};
queryResponse.success = data.success ?? false;
queryResponse.message = data.message ?? "";
queryResponse.records = data.records ?? [];
console.log( "请求BI坐席渗透率数据", queryResponse );
handler( queryResponse, null );
})
.catch(( error ): void =>
{
queryResponse.message = "请求BI坐席渗漏率报表数据时出现错误请查看控制台消息";
queryResponse.success = false;
console.log( error );
handler( queryResponse, error );
});
}
/**
* 请求BI坐席续保率数据
* @param handler 调用者提供的处理请求结果的函数。
*/
function queryBITelsalerRenewalData( handler: QueryBITelsalerRenewalRateDataHandler ): void
{
const queryResponse: QueryBITelsalerRenewalRateReportResponse = {
success: false,
message: "",
records: [],
};
instance.request({
url: API_URL.URL_BI_TELSALER_RENEWALRATE,
method: "post",
})
.then(( response: AxiosResponse<any, any> ): void =>
{
const data = response.data ?? {};
queryResponse.success = data.success ?? false;
queryResponse.message = data.message ?? "";
queryResponse.records = data.records ?? [];
console.log( "请求BI坐席续保率数据", queryResponse );
handler( queryResponse, null );
})
.catch(( error: any ): void =>
{
queryResponse.success = false;
queryResponse.message = "查询BI坐席续保率数据失败请查看控制台";
console.log( error );
handler( queryResponse, error );
});
}
/**
* 请求机构渗透率数据
* @param handler 调用者提供的处理请求结果的函数。
*/
function queryDepartmentAttachingRateData( handler: QueryBIDepartmentAttachingRateDataHandler ): void
{
const queryResponse: QueryBIDepartmentAttachingRateResponse = {
success: false,
message: "",
records: [],
};
instance.request({
url: API_URL.URL_BI_DEPARTMENT_ATTACHINGRATE,
method: "post",
})
.then(( response: AxiosResponse<any, any> ): void =>
{
const data = response.data ?? {};
queryResponse.success = data.success ?? false;
queryResponse.message = data.message ?? "请求完成,但结果未知!";
queryResponse.records = data.records ?? [];
handler( queryResponse, null );
})
.catch(( error: any ): void =>
{
queryResponse.success = false;
queryResponse.message = "查询BI机构续渗透失败请查看控制台";
queryResponse.records = [];
console.log( "查询BI机构渗透率失败:", error );
handler( queryResponse, error );
});
}
/**
* 请求BI机构续保率数据
* @param handler 调用者提供的处理请求结果的函数。
*/
function queryDepartmentRenewalRateData( handler: QueryBIDepartmentRenewalRateDataHandler ): void
{
const queryResponse: QueryBIDepartmentRenewalRateResponse = {
success: false,
message: "",
records: [],
};
instance.request({
url: API_URL.URL_BI_DEPARTMENT_RENEWALRATE,
method: "post",
})
.then(( response: AxiosResponse<any, any> ): void =>
{
const data = response.data ?? {};
queryResponse.success = data.success ?? false;
queryResponse.message = data.message ?? "请求完成,但结果未知!";
queryResponse.records = data.records ?? [];
handler( queryResponse, null );
})
.catch(( error: any ): void =>
{
queryResponse.success = false;
queryResponse.message = "查询BI机构续保率失败请查看控制台";
queryResponse.records = [];
console.log( "查询BI机构续保率失败:", error );
handler( queryResponse, error );
});
}
export { export {
type BIReportType, type BIReportType,
type ImportBIReportRequest, type ImportBIReportRequest,
type ImportBIReportResponse, type ImportBIReportResponse,
type ImportBIReportResponseHandler, type ImportBIReportResponseHandler,
importBIReport type BITelsalerAttachingRateRecord,
type QueryBITelsalerAttachingRateReportResponse,
type QueryBITelsalerAttachingRateDataHandler,
type QueryBITelsalerRenewalRateDataHandler,
type BITelsalerRenewalRateRecord,
type QueryBITelsalerRenewalRateReportResponse,
type BIDepartmentAttachingRateRecord,
type QueryBIDepartmentAttachingRateResponse,
type QueryBIDepartmentAttachingRateDataHandler,
type BIDepartmentRenewalRateRecord,
type QueryBIDepartmentRenewalRateResponse,
type QueryBIDepartmentRenewalRateDataHandler,
importBIReport,
queryBITelsalerAttachingRateData,
queryBITelsalerRenewalData,
queryDepartmentAttachingRateData,
queryDepartmentRenewalRateData
}; };

View File

@@ -25,7 +25,7 @@ interface LoginInfo
interface LoginCallerInfo interface LoginCallerInfo
{ {
telsaler_code: string; telsaler: string;
} }
interface RequestResult interface RequestResult

View File

@@ -8,48 +8,39 @@
* Copyright (c) ${2022} by Kane, All Rights Reserved. * Copyright (c) ${2022} by Kane, All Rights Reserved.
*/ */
const API_URL = { const API_URL = {
// URL_LOGIN: import.meta.env.VITE_URL_LOGIN, // 登录
// URL_LOGIN: "http://222.76.244.118:11101/admin-system/account/p13_account_check", URL_LOGIN: import.meta.env.VITE_URL_LOGIN,
URL_LOGIN: "http://10.39.0.41:8081/admin-system/account/p13_account_check", URL_LOGIN_CALLER: import.meta.env.VITE_URL_LOGIN_CALLER,
// URL_LOGIN_CALLER: "http://localhost:8080/desktop_archievement_backend/account/query_telsaler_info.do",
// URL_LOGIN_CALLER: "http://222.76.244.118:11101/desktop_archievement_backend/account/query_telsaler_info.do",
URL_LOGIN_CALLER: "http://10.39.0.41:8081/desktop_archievement_backend/account/query_telsaler_info.do",
// URL_DEPARTMENT_ARCHIEVEMENT: import.meta.env.VITE_URL_DEPARTMENT_ARCHIEVEMENT,
// URL_DEPARTMENT_ARCHIEVEMENT: "http://222.76.244.118:11101/desktop_archievement_backend/archievement/query_department_archievement.do",
URL_DEPARTMENT_ARCHIEVEMENT: "http://10.39.0.41:8081/desktop_archievement_backend/archievement/query_department_archievement.do",
// URL_RANKINGLIST: "http://localhost:8080/desktop_archievement_backend/archievement/query_ranking_list.do",
// URL_RANKINGLIST: "http://222.76.244.118:11101/desktop_archievement_backend/archievement/query_ranking_list.do",
URL_RANKINGLIST: "http://10.39.0.41:8081/desktop_archievement_backend/archievement/query_ranking_list.do",
// 机构业绩
URL_DEPARTMENT_ARCHIEVEMENT: import.meta.env.VITE_URL_DEPARTMENT_ARCHIEVEMENT,
// 坐席业绩查询 // 坐席业绩查询
// URL_CALLER_ARCHIEVEMENT: "http://222.76.244.118:11101/desktop_archievement_backend/archievement/query_caller_archievement.do", URL_CALLER_ARCHIEVEMENT: import.meta.env.VITE_URL_CALLER_ARCHIEVEMENT,
URL_CALLER_ARCHIEVEMENT: "http://10.39.0.41:8081/desktop_archievement_backend/archievement/query_caller_archievement.do",
// 排行榜
URL_RANKINGLIST: import.meta.env.VITE_URL_RANKINGLIST,
/** 奖项相关 **/ /** 奖项相关 **/
// 查询奖励项目 // 查询奖励项目
// URL_RWARD_PROJECTS: "http://222.76.244.118:11101/desktop_archievement_backend/rewards/query_reward_projects.do", URL_RWARD_PROJECTS: import.meta.env.VITE_URL_RWARD_PROJECTS,
URL_RWARD_PROJECTS: "http://10.39.0.41:8081/desktop_archievement_backend/rewards/query_reward_projects.do",
// 查询获奖人员 // 查询获奖人员
URL_REWARD_GAINERS: "http://10.39.0.41:8081/desktop_archievement_backend/rewards/query_reward_gainers.do", URL_REWARD_GAINERS: import.meta.env.VITE_URL_REWARD_GAINERS,
// URL_REWARD_GAINERS: "http://222.76.244.118:11101/desktop_archievement_backend/rewards/query_reward_gainers.do",
// 添加获奖人员 // 添加获奖人员
URL_ADD_REWARD_TELSALER: "http://10.39.0.41:8081/desktop_archievement_backend/rewards/add_telsaler_reward.do", URL_ADD_REWARD_TELSALER: import.meta.env.VITE_URL_ADD_REWARD_TELSALER,
// URL_ADD_REWARD_TELSALER: "http://222.76.244.118:11101/desktop_archievement_backend/rewards/add_telsaler_reward.do",
// 更新获奖人员 // 更新获奖人员
URL_UPDATE_REWARD_TELSALER: "http://10.39.0.41:8081/desktop_archievement_backend/rewards/update_telsaler_reward.do", URL_UPDATE_REWARD_TELSALER: import.meta.env.VITE_URL_UPDATE_REWARD_TELSALER,
// URL_ADD_REWARD_TELSALER: "http://222.76.244.118:11101/desktop_archievement_backend/rewards/update_telsaler_reward.do",
// 删除获奖人员 // 删除获奖人员
URL_DEL_REWARD_TELSALER: "http://10.39.0.41:8081/desktop_archievement_backend/rewards/delete_telsaler_reward.do", URL_DEL_REWARD_TELSALER: import.meta.env.VITE_URL_DEL_REWARD_TELSALER,
// URL_ADD_REWARD_TELSALER: "http://222.76.244.118:11101/desktop_archievement_backend/rewards/delete_telsaler_reward.do",
// 上传文件 // 上传文件
URL_UPLOAD_FILE: "http://10.39.0.41:8081/desktop_archievement_backend/file/file-upload.do", URL_UPLOAD_FILE: import.meta.env.VITE_URL_UPLOAD_FILE,
// URL_UPLOAD_FILE: "http://222.76.244.118:11101/desktop_archievement_backend/file/file-upload.do",
// 导入报表 // 导入报表
URL_IMPORT_REPORT: "http://10.39.0.41:8081/desktop_archievement_backend/import_bi_data/excel.do", URL_IMPORT_REPORT: import.meta.env.VITE_URL_IMPORT_REPORT,
// URL_IMPORT_REPORT: "http://222.76.244.118:11101/desktop_archievement_backend/import_bi_data/excel.do",
// 请求BI报表数据
URL_BI_TELSALER_ATTACHINGRATE: import.meta.env.VITE_URL_BI_TELSALER_ATTACHINGRATE,
URL_BI_TELSALER_RENEWALRATE: import.meta.env.VITE_URL_BI_TELSALER_RENEWALRATE,
URL_BI_DEPARTMENT_ATTACHINGRATE: import.meta.env.VITE_URL_BI_DEPARTMENT_ATTACHINGRATE,
URL_BI_DEPARTMENT_RENEWALRATE: import.meta.env.VITE_URL_BI_DEPARTMENT_RENEWALRATE,
}; };
export { API_URL }; export { API_URL };

View File

@@ -170,6 +170,8 @@ function addRewardTelsaler( data: AddRewardTelsalerRequest, handler: any ): void
message: "", message: "",
}; };
console.log( "URL", API_URL.URL_ADD_REWARD_TELSALER );
instance.request({ instance.request({
method: "post", method: "post",
url: API_URL.URL_ADD_REWARD_TELSALER, url: API_URL.URL_ADD_REWARD_TELSALER,

View File

@@ -384,7 +384,7 @@ export default {
size: 90px; size: 90px;
} }
color: $color-bg-04; color: $color-title-font;
text-shadow: #feebb1 0px 0px, text-shadow: #feebb1 0px 0px,
#feebb1 5px 0px, #feebb1 5px 0px,
#feebb1 -5px -0px, #feebb1 -5px -0px,

View File

@@ -169,7 +169,7 @@ export default {
{ {
// 是坐席 // 是坐席
const loginInfo: LoginCallerInfo = { const loginInfo: LoginCallerInfo = {
telsaler_code: ui.account, telsaler: ui.account,
}; };
// 登录 // 登录

View File

@@ -9,39 +9,18 @@
--> -->
<template> <template>
<div class="data_management_wrapper"> <div class="data_management_wrapper">
<!-- <div class="telsaler-dataupload-wrapper">
<el-upload
v-model="ui.fileList"
drag
action="http://localhost:8080/desktop_archievement_backend/file/file-upload.do"
:on-preview="handlePreview"
:on-remove="handleRemove"
:on-success="handleUploadSuccess"
:before-remove="beforeRemove"
:limit="1"
:on-exceed="handleExceed"
:data="ui.uploadData"
name="files"
>
<el-button type="primary">
上传
</el-button>
<template #tip>
<div class="el-upload__tip">
文件不能大于100MB
</div>
</template>
</el-upload>
</div> -->
<el-tabs> <el-tabs>
<el-tab-pane label="坐席车非渗透率"> <el-tab-pane label="坐席车非渗透率">
<TelsalerAttachingRateView /> <TelsalerAttachingRateView />
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="坐席续保率"> <el-tab-pane label="坐席续保率">
坐席车非渗透率 <TelsalerRenewalRateView />
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="机构"> <el-tab-pane label="机构渗透率">
坐席车非渗透率 <DepartmentAttachingRateView />
</el-tab-pane>
<el-tab-pane label="机构续保率">
<DepartmentRenewalRateView />
</el-tab-pane> </el-tab-pane>
</el-tabs> </el-tabs>
</div> </div>
@@ -50,9 +29,13 @@
import { ref, reactive } from "vue"; import { ref, reactive } from "vue";
import { ElMessage, ElMessageBox, type UploadFile, type UploadFiles, type UploadProps, type UploadUserFile } from "element-plus"; import { ElMessage, ElMessageBox, type UploadFile, type UploadFiles, type UploadProps, type UploadUserFile } from "element-plus";
import TelsalerAttachingRateView from "@/views/data/bi/TelsalerAttachingRateView.vue"; import TelsalerAttachingRateView from "@/views/data/bi/TelsalerAttachingRateView.vue";
import TelsalerRenewalRateView from "@/views/data/bi/TelsalerRenewalRateView.vue";
import DepartmentRenewalRateView from "@/views/data/bi/DepartmentRenewalRateView.vue";
import DepartmentAttachingRateView from "@/views/data/bi/DepartmentAttachingRateView.vue";
export default { export default {
name: "DataManagement", name: "DataManagement",
components: { TelsalerAttachingRateView, }, components: { TelsalerAttachingRateView, TelsalerRenewalRateView, DepartmentRenewalRateView, DepartmentAttachingRateView, },
setup() setup()
{ {
const ui = reactive({ const ui = reactive({

View File

@@ -46,7 +46,7 @@
</div> </div>
<el-upload <el-upload
drag drag
action="http://222.76.244.118:11101/desktop_archievement_backend/file/file-upload.do" :action="ui.urlFileUpload"
name="files" name="files"
:show-file-list="false" :show-file-list="false"
:data="ui.uploadParameters" :data="ui.uploadParameters"
@@ -62,7 +62,7 @@
</div> </div>
</template> </template>
<script lang="ts"> <script lang="ts">
import { reactive, ref } from "vue"; import { reactive, onBeforeMount } from "vue";
import { import {
type BIReportType, type BIReportType,
type ImportBIReportRequest, type ImportBIReportRequest,
@@ -70,6 +70,7 @@ import {
type ImportBIReportResponseHandler, type ImportBIReportResponseHandler,
importBIReport importBIReport
} from "@/utils/BIReport.js"; } from "@/utils/BIReport.js";
import { API_URL } from "@/utils/api/config.js";
import { type FileUploadResponse } from "@/utils/fileUpload.js"; import { type FileUploadResponse } from "@/utils/fileUpload.js";
// import { UploadFilled } from "@element-plus/icons-vue"; // import { UploadFilled } from "@element-plus/icons-vue";
import { type UploadProps, type UploadFile, type UploadFiles, ElMessage, ElMessageBox } from "element-plus"; import { type UploadProps, type UploadFile, type UploadFiles, ElMessage, ElMessageBox } from "element-plus";
@@ -84,6 +85,7 @@ interface UI
hasCaption: boolean, hasCaption: boolean,
uploadParameters: any, uploadParameters: any,
showFileList: boolean, showFileList: boolean,
urlFileUpload: string,
} }
export default { export default {
@@ -92,10 +94,10 @@ export default {
reportType: { reportType: {
type: Number, type: Number,
require: true, require: true,
default: (): number => -9999, default: (): number => 0,
}, },
}, },
setup() setup( props )
{ {
const ui: UI = reactive({ const ui: UI = reactive({
showUI: false, showUI: false,
@@ -118,12 +120,13 @@ export default {
reportTypeName: "当月个车续保率跟踪报表【机构】", reportTypeName: "当月个车续保率跟踪报表【机构】",
},], },],
sheetIndex: 0, sheetIndex: 0,
firstRow: 2, firstRow: 1,
hasCaption: true, hasCaption: true,
uploadParameters: { uploadParameters: {
"task-name": "1234", "task-name": "1234",
}, },
showFileList: false, showFileList: false,
urlFileUpload: API_URL.URL_UPLOAD_FILE,
}); });
/** /**
@@ -214,6 +217,11 @@ export default {
} }
}; };
onBeforeMount((): void =>
{
ui.selectedReportType = props.reportType;
});
return { return {
ui, ui,
onUploadSuccess, onUploadSuccess,

View File

@@ -1,31 +0,0 @@
<!--
* @Author: Kane
* @Date: 2023-10-17 14:53:17
* @LastEditors: Kane
* @FilePath: /task_schedule/src/views/data/bi/DepartmentArchievementView.vue
* @Description:
*
* Copyright (c) ${2023} by Kane, All Rights Reserved.
-->
<template>
<div class="wrapper" />
</template>
<script lang="ts">
import { reactive } from "vue";
export default {
name: "DepartmentArchievementView",
setup()
{
const ui = reactive({
showUI: true,
});
},
};
</script>
<style lang="scss" scoped>
.wrapper {
margin: 10px;
}
</style>

View File

@@ -0,0 +1,227 @@
<!--
* @Author: Kane
* @Date: 2023-10-17 14:53:17
* @LastEditors: Kane
* @FilePath: /task_schedule/src/views/data/bi/DepartmentAttachingRateView.vue
* @Description:
*
* Copyright (c) ${2023} by Kane, All Rights Reserved.
-->
<template>
<div class="wrapper">
<el-row :gutter="10">
<el-col span="24">
<el-button
type="warning"
icon="upload"
@click="showUploadFileDialog"
>
上传
</el-button>
<el-button
type="primary"
icon="refresh"
@click="refresh"
>
刷新
</el-button>
</el-col>
</el-row>
<el-table
width="100%"
stripe
border
:data="tableData"
>
<el-table-column
label="部门"
align="center"
>
<template #default="department">
<span>{{ department.row.departmentName }}</span>
</template>
</el-table-column>
<el-table-column
label="车险保费(万)"
align="center"
>
<template #default="department">
<span>{{ department.row.motoPremium.toFixed(2) }}</span>
</template>
</el-table-column>
<el-table-column
label="非车险保费(万)"
align="center"
>
<template #default="department">
<span>{{ department.row.nomotoPremium.toFixed(2) }}</span>
</template>
</el-table-column>
<el-table-column
label="渗透率"
align="center"
>
<template #default="department">
<span>{{ department.row.attachingRate.toFixed(2) + "%" }}</span>
</template>
</el-table-column>
</el-table>
<div class="pagination_wrapper">
<el-pagination
v-model="ui.tableCurrentPageIndex"
class="pull_left"
size="small"
background
:page-size="ui.tablePageSize"
:page-sizes="[10, 20, 50, 100]"
layout="total, sizes, prev, pager, next, jumper"
:total="0"
@current-change="onCurrentPageIndexChange"
@size-change="onTablePageSizeChange"
/>
</div>
<div
class="upload-dialog-wrapper"
>
<el-dialog
v-model="ui.showUploadDialog"
title="上传报表"
width="600px"
:close-on-click-modal="false"
:close-on-press-escape="false"
:show-close="true"
>
<BiDataUploadView :report-type="2" />
</el-dialog>
</div>
</div>
</template>
<script lang="ts">
import { reactive, computed, onBeforeMount } from "vue";
import {
type BIDepartmentAttachingRateRecord,
type QueryBIDepartmentAttachingRateResponse,
type QueryBIDepartmentAttachingRateDataHandler,
queryDepartmentAttachingRateData
} from "@/utils/BIReport.js";
import { ElMessage, ElMessageBox } from "element-plus";
import BiDataUploadView from "@/views/data/bi/BiDataUploadView.vue";
interface UI
{
showUI: boolean,
showUploadDialog: boolean,
tablePageSize: number,
tableCurrentPageIndex: number,
BIDepartmentAttachingRateData: BIDepartmentAttachingRateRecord[],
}
export default {
name: "DepartmentAttachingRateView",
components: { BiDataUploadView, },
setup()
{
const ui: UI = reactive({
showUI: true,
showUploadDialog: false,
tablePageSize: 10,
tableCurrentPageIndex: 1,
BIDepartmentAttachingRateData: [],
});
const tableData = computed((): BIDepartmentAttachingRateRecord[] =>
{
const tableCount = ui.BIDepartmentAttachingRateData.length;
const startIndex = ui.tablePageSize * ( ui.tableCurrentPageIndex - 1 ) > tableCount ? tableCount - ui.tablePageSize : ui.tablePageSize * ( ui.tableCurrentPageIndex - 1 );
const endIndex = ui.tablePageSize * ui.tableCurrentPageIndex;
return ui.BIDepartmentAttachingRateData.slice( startIndex, endIndex );
});
const onCurrentPageIndexChange = ( pageIndex: number ): void =>
{
ui.tableCurrentPageIndex = pageIndex;
};
const onTablePageSizeChange = ( pageSize: number ): void =>
{
ui.tablePageSize = pageSize;
};
const handler: QueryBIDepartmentAttachingRateDataHandler = ( response: QueryBIDepartmentAttachingRateResponse, error: any ): void =>
{
// 判断一下标志位
if ( response.success )
{
// 请求成功
ElMessage({
message: "更新成功",
type: "success",
});
ui.BIDepartmentAttachingRateData = response.records;
}
else
{
// 请求失败
ElMessageBox.confirm(
response.message,
"请求机构渗透率数据失败",
{
confirmButtonText: "确定",
type: "warning",
center: true,
}
)
.then((): void => {})
.catch((): void => {});
if ( error !== null )
{
console.log( "请求机构渗透率数据失败", error );
}
}
};
const refresh = (): void =>
{
queryDepartmentAttachingRateData( handler );
};
const showUploadFileDialog = (): void =>
{
ui.showUploadDialog = true;
};
onBeforeMount((): void =>
{
refresh();
});
return {
ui,
tableData,
onCurrentPageIndexChange,
onTablePageSizeChange,
showUploadFileDialog,
handler,
refresh,
};
},
};
</script>
<style lang="scss" scoped>
.wrapper {
margin: 0px 10px 10px 10px;
>*+* {
margin-top: 10px;
}
}
.pagination_wrapper {
display: flex;
justify-content: flex-end;
}
</style>

View File

@@ -0,0 +1,243 @@
<!--
* @Author: Kane
* @Date: 2023-11-10 17:48:01
* @LastEditors: Kane
* @FilePath: /task_schedule/src/views/data/bi/DepartmentRenewalRateView.vue
* @Description:
*
* Copyright (c) ${2023} by Kane, All Rights Reserved.
-->
<template>
<div class="wrapper">
<el-row :gutter="10">
<el-col :span="24">
<el-button
type="warning"
icon="upload"
@click="showUploadFileDialog"
>
上传
</el-button>
<el-button
type="primary"
icon="refresh"
@click="refresh"
>
刷新
</el-button>
</el-col>
</el-row>
<el-table
:data="tableData"
style="width:100%;"
border
stripe
>
<el-table-column
label="部门"
align="center"
width="250px"
>
<template #default="dept">
<span>{{ dept.row.责任部门 }}</span>
</template>
</el-table-column>
<el-table-column
label="机构目标值"
align="center"
>
<template #default="dept">
<span>{{ dept.row.机构目标值.toFixed(2) + "%" }}</span>
</template>
</el-table-column>
<el-table-column
label="到期数全月"
align="center"
>
<template #default="dept">
<span>{{ dept.row.到期数全月 }}</span>
</template>
</el-table-column>
<el-table-column
label="序时到期数占比"
align="center"
>
<template #default="dept">
<span>{{ dept.row.序时到期数占比.toFixed(2) + "%" }}</span>
</template>
</el-table-column>
<el-table-column
label="个车续保率序时"
align="center"
>
<template #default="dept">
<span>{{ dept.row.个车续保率序时.toFixed(2) + "%" }}</span>
</template>
</el-table-column>
<el-table-column
label="个车续保率全月"
align="center"
>
<template #default="dept">
<span>{{ dept.row.个车续保率全月.toFixed(2) + "%" }}</span>
</template>
</el-table-column>
</el-table>
<div class="pagination-wrapper">
<el-pagination
v-model="ui.tableCurrentPageIndex"
class="pull_left"
size="small"
background
:page-size="ui.tablePageSize"
:page-sizes="[10, 20, 50, 100]"
layout="total, sizes, prev, pager, next, jumper"
:total="0"
@current-change="onCurrentPageIndexChange"
@size-change="onTablePageSizeChange"
/>
</div>
<div
class="upload-dialog-wrapper"
>
<el-dialog
v-model="ui.showUploadDialog"
title="上传报表"
width="600px"
:close-on-click-modal="false"
:close-on-press-escape="false"
:show-close="true"
>
<BiDataUploadView :report-type="3" />
</el-dialog>
</div>
</div>
</template>
<script lang="ts">
import { reactive, computed, onBeforeMount } from "vue";
import {
type BIDepartmentRenewalRateRecord,
type QueryBIDepartmentRenewalRateResponse,
type QueryBIDepartmentRenewalRateDataHandler,
queryDepartmentRenewalRateData
} from "@/utils/BIReport.js";
import { ElMessageBox, ElMessage } from "element-plus";
import BiDataUploadView from "@/views/data/bi/BiDataUploadView.vue";
interface UI
{
showUI: boolean;
showUploadDialog: boolean;
tablePageSize: number;
tableCurrentPageIndex: number;
BIDepartmentRenewalRateData: BIDepartmentRenewalRateRecord[];
}
export default {
name: "DepartmentRenewalRateView",
components: { BiDataUploadView, },
setup()
{
const ui: UI = reactive({
showUI: true,
showUploadDialog: false,
tablePageSize: 10,
tableCurrentPageIndex: 1,
BIDepartmentRenewalRateData: [],
});
// on
const onCurrentPageIndexChange = ( pageIndex: number ): void =>
{
ui.tableCurrentPageIndex = pageIndex;
};
const onTablePageSizeChange = ( pageSize: number ): void =>
{
ui.tablePageSize = pageSize;
};
// 计算变量
const tableData = computed((): BIDepartmentRenewalRateRecord[] =>
{
const tableCount = ui.BIDepartmentRenewalRateData.length;
const startIndex = ui.tablePageSize * ( ui.tableCurrentPageIndex - 1 ) < tableCount ? ui.tablePageSize * ( ui.tableCurrentPageIndex - 1 ) : ( tableCount - ui.tablePageSize );
const endIndex = ui.tablePageSize * ui.tableCurrentPageIndex < tableCount ? ui.tablePageSize * ui.tableCurrentPageIndex : tableCount;
return ui.BIDepartmentRenewalRateData.slice( startIndex, endIndex );
});
// handler
const handler: QueryBIDepartmentRenewalRateDataHandler = ( response: QueryBIDepartmentRenewalRateResponse, error: any ): void =>
{
if ( response.success )
{
ui.BIDepartmentRenewalRateData = response.records;
ElMessage({
message: "更新完成",
type: "success",
});
}
else
{
ElMessageBox.confirm(
response.message,
"请求BI机构续保率数据失败",
{
confirmButtonText: "确定",
type: "warning",
center: true,
}
)
.then((): void => {})
.catch((): void => {});
if ( error !== null )
{
console.log( error );
}
}
};
const showUploadFileDialog = (): void =>
{
ui.showUploadDialog = true;
};
onBeforeMount((): void =>
{
refresh();
});
const refresh = (): void =>
{
queryDepartmentRenewalRateData( handler );
};
return {
ui,
onCurrentPageIndexChange,
onTablePageSizeChange,
showUploadFileDialog,
// 计算变量
tableData,
refresh,
};
},
};
</script>
<style lang="scss" scoped>
.wrapper {
margin: 0px 10px 10px 10px;
>*+* {
margin-top: 10px;
}
}
.pagination-wrapper {
display: flex;
justify-content: flex-end;
}
</style>

View File

@@ -18,43 +18,71 @@
> >
上传 上传
</el-button> </el-button>
<el-button
type="primary"
icon="refresh"
@click="refresh"
>
刷新
</el-button>
</el-col> </el-col>
</el-row> </el-row>
<el-table <el-table
border border
stripe stripe
style="width:100%;" style="width:100%;"
:data="tableData"
> >
<el-table-column
type="selection"
align="center"
/>
<el-table-column <el-table-column
label="部门" label="部门"
align="center" align="center"
width="200" width="300"
/> >
<template #default="telsaler">
<span>{{ telsaler.row.departmentName }}</span>
</template>
</el-table-column>
<el-table-column <el-table-column
label="名称" label="名称"
align="center" align="center"
width="200" width="200"
/> >
<template #default="telsaler">
<span>{{ telsaler.row.telsalerName }}</span>
</template>
</el-table-column>
<el-table-column <el-table-column
label="车险保费(万)" label="车险保费"
align="center" align="center"
/> >
<template #default="telsaler">
<span>{{ Math.trunc( telsaler.row.motoPremium * 10000) }}</span>
</template>
</el-table-column>
<el-table-column <el-table-column
label="非车险保费(万)" label="非车险保费"
align="center" align="center"
/> >
<template #default="telsaler">
<span>{{ Math.trunc( telsaler.row.nomotoPremium * 10000) }}</span>
</template>
</el-table-column>
<el-table-column <el-table-column
label="当月保费渗透率" label="当月保费渗透率"
align="center" align="center"
/> >
<template #default="telsaler">
<span>{{ telsaler.row.attachingRate.toFixed(2) + "%" }}</span>
</template>
</el-table-column>
<el-table-column <el-table-column
label="渗透率环比上月" label="渗透率环比上月"
align="center" align="center"
/> >
<template #default="telsaler">
<span>{{ telsaler.row.attachingRateChange.toFixed(2) + "%" }}</span>
</template>
</el-table-column>
</el-table> </el-table>
<div class="pagination_wrapper"> <div class="pagination_wrapper">
<el-pagination <el-pagination
@@ -65,7 +93,7 @@
:page-size="ui.tablePageSize" :page-size="ui.tablePageSize"
:page-sizes="[10, 20, 50, 100]" :page-sizes="[10, 20, 50, 100]"
layout="total, sizes, prev, pager, next, jumper" layout="total, sizes, prev, pager, next, jumper"
:total="0" :total="tableCount"
@current-change="onCurrentPageIndexChange" @current-change="onCurrentPageIndexChange"
@size-change="onTablePageSizeChange" @size-change="onTablePageSizeChange"
/> />
@@ -81,25 +109,42 @@
:close-on-press-escape="false" :close-on-press-escape="false"
:show-close="true" :show-close="true"
> >
<BiDataUploadView /> <BiDataUploadView :report-type="0" />
</el-dialog> </el-dialog>
</div> </div>
</div> </div>
</template> </template>
<script lang="ts"> <script lang="ts">
import { reactive } from "vue"; import { reactive, onBeforeMount, computed } from "vue";
import {
type BITelsalerAttachingRateRecord,
type QueryBITelsalerAttachingRateReportResponse,
type QueryBITelsalerAttachingRateDataHandler,
queryBITelsalerAttachingRateData
} from "@/utils/BIReport.js";
import BiDataUploadView from "@/views/data/bi/BiDataUploadView.vue"; import BiDataUploadView from "@/views/data/bi/BiDataUploadView.vue";
import { ElMessageBox, ElMessage } from "element-plus";
interface UI
{
showUI: boolean,
showUploadDialog: boolean,
tableCurrentPageIndex: number,
tablePageSize: number,
BITelsalerAttachingRateData: BITelsalerAttachingRateRecord[],
}
export default { export default {
name: "TelsalerAttachingRateView", name: "TelsalerAttachingRateView",
components: { BiDataUploadView, }, components: { BiDataUploadView, },
setup() setup()
{ {
const ui = reactive({ const ui: UI = reactive({
showUI: true, showUI: true,
showUploadDialog: false, showUploadDialog: false,
tableCurrentPageIndex: 1, tableCurrentPageIndex: 1,
tablePageSize: 10, tablePageSize: 10,
BITelsalerAttachingRateData: [],
}); });
const showUploadFileDialog = (): void => const showUploadFileDialog = (): void =>
@@ -117,18 +162,84 @@ export default {
ui.tablePageSize = pageSize; ui.tablePageSize = pageSize;
}; };
/** 请求处理handler ********/
const queryBITelsalerAttachingRateDataHandler: QueryBITelsalerAttachingRateDataHandler = ( response: QueryBITelsalerAttachingRateReportResponse, error: any ): void =>
{
// 判断调用成功标志位
if ( response.success )
{
ui.BITelsalerAttachingRateData = response.records;
ElMessage({
message: "更新成功",
type: "success",
});
}
else
{
// 错误处理
ElMessageBox.confirm(
response.message,
"请求BI坐席渗透率数据错误",
{
confirmButtonText: "确定",
type: "warning",
center: true,
}
)
.then((): void => {})
.catch((): void => {});
if ( error !== null )
{
console.log( error );
}
}
};
const tableCount = computed((): number =>
{
return ui.BITelsalerAttachingRateData.length;
});
const tableData = computed((): BITelsalerAttachingRateRecord[] =>
{
const tableCount = ui.BITelsalerAttachingRateData.length;
const startIndex = ui.tablePageSize * ( ui.tableCurrentPageIndex - 1 ) > tableCount ? tableCount - ui.tablePageSize : ui.tablePageSize * ( ui.tableCurrentPageIndex - 1 );
const endIndex = ui.tablePageSize * ui.tableCurrentPageIndex;
return ui.BITelsalerAttachingRateData.slice( startIndex, endIndex );
});
onBeforeMount((): void =>
{
queryBITelsalerAttachingRateData( queryBITelsalerAttachingRateDataHandler );
});
const refresh = (): void =>
{
console.log( import.meta.env.VITE_TEST );
queryBITelsalerAttachingRateData( queryBITelsalerAttachingRateDataHandler );
};
return { return {
ui, ui,
showUploadFileDialog, showUploadFileDialog,
onCurrentPageIndexChange, onCurrentPageIndexChange,
onTablePageSizeChange, onTablePageSizeChange,
// 计算变量
tableData,
tableCount,
// 函数
queryBITelsalerAttachingRateDataHandler,
refresh,
}; };
}, },
}; };
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.wrapper { .wrapper {
margin: 10px; margin: 0px 10px 10px 10px;
>*+* { >*+* {
margin-top: 10px; margin-top: 10px;

View File

@@ -1,30 +1,241 @@
src/views/data/bi/TelsalerAttachingRateView.vue<!-- <!--
* @Author: Kane * @Author: Kane
* @Date: 2023-10-17 14:41:39 * @Date: 2023-10-17 23:31:19
* @LastEditors: Kane * @LastEditors: Kane
* @FilePath: /task_schedule/src/views/data/TelsalerAttachingRateView.vue * @FilePath: /task_schedule/src/views/data/bi/TelsalerRenewalRateView.vue
* @Description: * @Description:
* *
* Copyright (c) ${2023} by Kane, All Rights Reserved. * Copyright (c) ${2023} by Kane, All Rights Reserved.
--> -->
<template> <template>
<div class="wrapper" /> <div class="wrapper">
<el-row :gutter="10">
<el-col :span="24">
<el-button
type="warning"
icon="Upload"
@click="showUploadFileDialog"
>
上传
</el-button>
<el-button
type="primary"
icon="refresh"
@click="refresh"
>
刷新
</el-button>
</el-col>
</el-row>
<el-table
border
stripe
style="width:100%;"
:data="tableData"
>
<el-table-column
label="部门"
align="center"
>
<template #default="telsaler">
<span>{{ telsaler.row.责任部门 }}</span>
</template>
</el-table-column>
<el-table-column
label="责任人"
align="center"
>
<template #default="telsaler">
<span>{{ telsaler.row.责任人 }}</span>
</template>
</el-table-column>
<el-table-column
label="到期数-全月"
align="center"
>
<template #default="telsaler">
<span>{{ telsaler.row.到期数全月 }}</span>
</template>
</el-table-column>
<el-table-column
label="个车续保率(序时)(%)"
align="center"
>
<template #default="telsaler">
<span>{{ telsaler.row.个车续保率序时 }}</span>
</template>
</el-table-column>
<el-table-column
label="个车续保率(全月)(%)"
align="center"
>
<template #default="telsaler">
<span>{{ telsaler.row.个车续保率全月 }}</span>
</template>
</el-table-column>
</el-table>
<div class="pagination_wrapper">
<el-pagination
v-model="ui.tableCurrentPageIndex"
class="pull_left"
size="small"
background
:page-size="ui.tablePageSize"
:page-sizes="[10, 20, 50, 100]"
layout="total, sizes, prev, pager, next, jumper"
:total="0"
@current-change="onCurrentPageIndexChange"
@size-change="onTablePageSizeChange"
/>
</div>
<div
class="upload-dialog-wrapper"
>
<el-dialog
v-model="ui.showUploadDialog"
title="上传报表"
width="600px"
:close-on-click-modal="false"
:close-on-press-escape="false"
:show-close="true"
>
<BiDataUploadView :report-type="1" />
</el-dialog>
</div>
</div>
</template> </template>
<script lang="ts"> <script lang="ts">
import { reactive } from "vue"; import { reactive, computed, onBeforeMount } from "vue";
import BiDataUploadView from "@/views/data/bi/BiDataUploadView.vue";
import {
type QueryBITelsalerRenewalRateDataHandler,
type BITelsalerRenewalRateRecord,
type QueryBITelsalerRenewalRateReportResponse,
queryBITelsalerRenewalData
} from "@/utils/BIReport.js";
import { ElMessageBox, ElMessage } from "element-plus";
interface UI
{
showUI: boolean,
showUploadDialog: boolean,
tableCurrentPageIndex: number,
tablePageSize: number,
BITelsalerRenewalRateData: BITelsalerRenewalRateRecord[],
}
export default { export default {
name: "TelsalerAttachingRateView", name: "TelsalerAttachingRateView",
components: { BiDataUploadView, },
setup() setup()
{ {
const ui = reactive({ const ui: UI = reactive({
showUI: true, showUI: true,
showUploadDialog: false,
tableCurrentPageIndex: 1,
tablePageSize: 10,
BITelsalerRenewalRateData: [],
}); });
const showUploadFileDialog = (): void =>
{
ui.showUploadDialog = true;
};
const onCurrentPageIndexChange = ( index: number ): void =>
{
ui.tableCurrentPageIndex = index;
};
const onTablePageSizeChange = ( pageSize: number ): void =>
{
ui.tablePageSize = pageSize;
};
const tableData = computed((): BITelsalerRenewalRateRecord[] =>
{
const tableCount = ui.BITelsalerRenewalRateData.length;
const startIndex = ui.tablePageSize * ( ui.tableCurrentPageIndex - 1 ) > tableCount ? tableCount - ui.tablePageSize : ui.tablePageSize * ( ui.tableCurrentPageIndex - 1 );
const endIndex = ui.tablePageSize * ui.tableCurrentPageIndex;
return ui.BITelsalerRenewalRateData.slice( startIndex, endIndex );
});
const tableCount = computed((): number =>
{
return ui.BITelsalerRenewalRateData.length;
});
// handler
const queryBITelsalerRenewalRateDataHander: QueryBITelsalerRenewalRateDataHandler = ( response: QueryBITelsalerRenewalRateReportResponse, error: any ): void =>
{
// 判断调用成功标志位
if ( response.success )
{
ui.BITelsalerRenewalRateData = response.records;
ElMessage({
message: "更新成功",
type: "success",
});
}
else
{
// 错误处理
ElMessageBox.confirm(
response.message,
"请求BI坐席续保率数据错误",
{
confirmButtonText: "确定",
type: "warning",
center: true,
}
)
.then((): void => {})
.catch((): void => {});
if ( error !== null )
{
console.log( error );
}
}
};
onBeforeMount((): void =>
{
queryBITelsalerRenewalData( queryBITelsalerRenewalRateDataHander );
});
const refresh = (): void =>
{
queryBITelsalerRenewalData( queryBITelsalerRenewalRateDataHander );
};
return {
ui,
showUploadFileDialog,
onCurrentPageIndexChange,
onTablePageSizeChange,
// 计算变量
tableData,
tableCount,
// 函数
refresh,
};
}, },
}; };
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.wrapper { .wrapper {
margin: 10px; margin: 0px 10px 10px 10px;
>*+* {
margin-top: 10px;
}
}
.pagination_wrapper {
display: flex;
justify-content: flex-end;
} }
</style> </style>

View File

@@ -11,10 +11,11 @@
"compilerOptions": { "compilerOptions": {
"forceConsistentCasingInFileNames": true, "forceConsistentCasingInFileNames": true,
"useDefineForClassFields": true, "useDefineForClassFields": true,
"target": "ES2015", "target": "ESNext",
"module": "ES2015", "module": "ESNext",
"moduleResolution": "node", "moduleResolution": "node",
"strict": true, "strict": true,
"strictNullChecks": true,
"jsx": "preserve", "jsx": "preserve",
"sourceMap": true, "sourceMap": true,
"resolveJsonModule": true, "resolveJsonModule": true,

View File

@@ -2,7 +2,7 @@
* @Author: Kane * @Author: Kane
* @Date: 2023-02-15 09:25:52 * @Date: 2023-02-15 09:25:52
* @LastEditors: Kane * @LastEditors: Kane
* @LastEditTime: 2023-06-25 09:51:13 * @LastEditTime: 2023-11-13 10:42:29
* @FilePath: /task_schedule/vite.config.js * @FilePath: /task_schedule/vite.config.js
* @Description: * @Description:
* *
@@ -19,6 +19,9 @@ export default defineConfig(( command, mode ) =>
return { return {
server:{ host: "localhost", port: 5173, }, server:{ host: "localhost", port: 5173, },
build: {
outDir: "../../../输出/web",
},
plugins: [vue(),], plugins: [vue(),],
base: "./", base: "./",
resolve: { resolve: {

View File

@@ -162,7 +162,9 @@
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId> <artifactId>maven-war-plugin</artifactId>
<version>3.3.2</version> <version>3.3.2</version>
<configuration></configuration> <configuration>
<outputDirectory>${project.build.directory}/../../../../输出/back/</outputDirectory>
</configuration>
</plugin> </plugin>
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>

View File

@@ -0,0 +1,27 @@
/*
* @Author: Kane
* @Date: 2023-11-01 15:50:40
* @LastEditors: Kane
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/mybatis/mapper/QueryBIArchievementDataMapper.java
* @Description:
*
* Copyright (c) ${2023} by Kane, All Rights Reserved.
*/
package com.cpic.xim.mybatis.mapper;
import java.util.ArrayList;
import com.cpic.xim.mybatis.pojo.BIDepartmentAttachingRateRecord;
import com.cpic.xim.mybatis.pojo.BIDepartmentRenewalRateRecord;
import com.cpic.xim.mybatis.pojo.BITelsalerAttachingRateRecord;
import com.cpic.xim.mybatis.pojo.BITelsalerRenewalRateRecord;
public interface QueryBIArchievementDataMapper
{
public ArrayList<BITelsalerAttachingRateRecord> queryBITelsalerAttachingRate();
public ArrayList<BITelsalerRenewalRateRecord> queryBITesalerRenewalRate();
public ArrayList<BIDepartmentAttachingRateRecord> queryBIDepartmentAttachingRate();
public ArrayList<BIDepartmentRenewalRateRecord> queryBIDepartmentRenewalRate();
}

View File

@@ -22,7 +22,8 @@ public class BIDepartmentRenewalRateRecord
private int 平均提前签单天数; private int 平均提前签单天数;
private double 环比; private double 环比;
public BIDepartmentRenewalRateRecord() {} public BIDepartmentRenewalRateRecord()
{}
public BIDepartmentRenewalRateRecord( String 责任部门, double 机构目标值, int 到期数全月, double 序时到期数占比, public BIDepartmentRenewalRateRecord( String 责任部门, double 机构目标值, int 到期数全月, double 序时到期数占比,
double 个车续保率序时, double 个车续保率全月, double 环比昨日, double 环比上月, int 平均提前签单天数, double 环比 ) double 个车续保率序时, double 个车续保率全月, double 环比昨日, double 环比上月, int 平均提前签单天数, double 环比 )

View File

@@ -9,7 +9,6 @@
*/ */
package com.cpic.xim.mybatis.pojo; package com.cpic.xim.mybatis.pojo;
import java.time.LocalDate;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
public class BITelsalerAttachingRateRecord public class BITelsalerAttachingRateRecord
@@ -18,10 +17,6 @@ public class BITelsalerAttachingRateRecord
@JsonProperty( "departmentName" ) @JsonProperty( "departmentName" )
private String departmentName; private String departmentName;
// 统计日期
@JsonProperty( "summaryDate" )
private LocalDate summaryDate;
// 坐席名称 // 坐席名称
@JsonProperty( "telsalerName" ) @JsonProperty( "telsalerName" )
private String telsalerName; private String telsalerName;
@@ -47,29 +42,28 @@ public class BITelsalerAttachingRateRecord
private double attachingRateChange; private double attachingRateChange;
// 当月客户渗透率 // 当月客户渗透率
@JsonProperty( "customerHandleRateCell" ) @JsonProperty( "customerHandleRate" )
private double customerHandleRate; private double customerHandleRate;
// 客户渗透率环比上月 // 客户渗透率环比上月
@JsonProperty( "customerHandleRateChangeCell" ) @JsonProperty( "customerHandleRateChange" )
private double customerHandleRateChange; private double customerHandleRateChange;
// 当月车非客均保费 // 当月车非客均保费
@JsonProperty( "noMotoPremiumPerCustomerCell" ) @JsonProperty( "noMotoPremiumPerCustomer" )
private double noMotoPremiumPerCustomer; private double noMotoPremiumPerCustomer;
// 客均保费环比上月 // 客均保费环比上月
@JsonProperty( "noMotoPremiumPerCustomerChangeCell" ) @JsonProperty( "noMotoPremiumPerCustomerChange" )
private double noMotoPremiumPerCustomerChange; private double noMotoPremiumPerCustomerChange;
public BITelsalerAttachingRateRecord( String departmentName, LocalDate summaryDate, public BITelsalerAttachingRateRecord( String departmentName,
String telsalerName, double motoPremium, double nomotoPremium, String telsalerName, double motoPremium, double nomotoPremium,
double motoPremiumProportion, double attachingRate, double attachingRateChange, double motoPremiumProportion, double attachingRate, double attachingRateChange,
double customerHandleRate, double customerHandleRateChange, double customerHandleRate, double customerHandleRateChange,
double noMotoPremiumPerCustomer, double noMotoPremiumPerCustomerChange ) double noMotoPremiumPerCustomer, double noMotoPremiumPerCustomerChange )
{ {
this.departmentName = departmentName; this.departmentName = departmentName;
this.summaryDate = summaryDate;
this.telsalerName = telsalerName; this.telsalerName = telsalerName;
this.motoPremium = motoPremium; this.motoPremium = motoPremium;
this.nomotoPremium = nomotoPremium; this.nomotoPremium = nomotoPremium;
@@ -129,7 +123,7 @@ public class BITelsalerAttachingRateRecord
public String toString() public String toString()
{ {
return "BITelsalerAttachingRateRecord [departmentName=" + departmentName + ", summaryDate=" return "BITelsalerAttachingRateRecord [departmentName=" + departmentName + ", summaryDate="
+ summaryDate + ", telsalerName=" + telsalerName + ", motoPremium=" + motoPremium + ", telsalerName=" + telsalerName + ", motoPremium=" + motoPremium
+ ", nomotoPremium=" + nomotoPremium + ", motoPremiumProportion=" + ", nomotoPremium=" + nomotoPremium + ", motoPremiumProportion="
+ motoPremiumProportion + ", attachingRate=" + attachingRate + motoPremiumProportion + ", attachingRate=" + attachingRate
+ ", attachingRateChange=" + attachingRateChange + ", customerHandleRate=" + ", attachingRateChange=" + attachingRateChange + ", customerHandleRate="
@@ -144,7 +138,6 @@ public class BITelsalerAttachingRateRecord
final int prime = 31; final int prime = 31;
int result = 1; int result = 1;
result = prime * result + ((departmentName == null) ? 0 : departmentName.hashCode()); result = prime * result + ((departmentName == null) ? 0 : departmentName.hashCode());
result = prime * result + ((summaryDate == null) ? 0 : summaryDate.hashCode());
result = prime * result + ((telsalerName == null) ? 0 : telsalerName.hashCode()); result = prime * result + ((telsalerName == null) ? 0 : telsalerName.hashCode());
long temp; long temp;
temp = Double.doubleToLongBits( motoPremium ); temp = Double.doubleToLongBits( motoPremium );
@@ -185,13 +178,6 @@ public class BITelsalerAttachingRateRecord
} }
else if ( !departmentName.equals( other.departmentName ) ) else if ( !departmentName.equals( other.departmentName ) )
return false; return false;
if ( summaryDate == null )
{
if ( other.summaryDate != null )
return false;
}
else if ( !summaryDate.equals( other.summaryDate ) )
return false;
if ( telsalerName == null ) if ( telsalerName == null )
{ {
if ( other.telsalerName != null ) if ( other.telsalerName != null )
@@ -229,16 +215,6 @@ public class BITelsalerAttachingRateRecord
return true; return true;
} }
public LocalDate getSummaryDate()
{
return summaryDate;
}
public void setSummaryDate( LocalDate summaryDate )
{
this.summaryDate = summaryDate;
}
public String getTelsalerName() public String getTelsalerName()
{ {
return telsalerName; return telsalerName;

View File

@@ -20,8 +20,10 @@ import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class MybatisUtils public class MybatisUtils
{ {
private static HashMap<String, SqlSession> SessionMap = new HashMap<>(5); private static HashMap<String, SqlSession> SessionMap = new HashMap<>( 5 );
private static HashMap<String, SqlSession> SessionMapBatch = new HashMap<>(5); private static HashMap<String, SqlSession> SessionMapBatch = new HashMap<>( 5 );
private static HashMap<String, SqlSessionFactory> SessionFactoryMap = new HashMap<>( 5 );
private static HashMap<String, SqlSessionFactory> SessionFactoryMapBatch = new HashMap<>( 5 );
private static String DEFAULT_CONFIGFILE = "mybatis/mybatis-config.xml"; private static String DEFAULT_CONFIGFILE = "mybatis/mybatis-config.xml";
/** /**
@@ -33,43 +35,45 @@ public class MybatisUtils
public static SqlSession getSqlSession( String configFile ) throws IOException public static SqlSession getSqlSession( String configFile ) throws IOException
{ {
// 根据配置文件的路径查找是否已经创建了对应的session // 根据配置文件的路径查找是否已经创建了对应的session
SqlSession session = SessionMap.get( configFile ); SqlSessionFactory factory = SessionFactoryMap.get( configFile );
// 找到就直接返回 // 找到就直接返回
if ( session != null ) if ( factory != null )
{ {
return session; return factory.openSession();
} }
// 没找到就创建一个 // 没找到就创建一个
InputStream configIS = Resources.getResourceAsStream( configFile ); InputStream configIS = Resources.getResourceAsStream( configFile );
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build( configIS ); factory = new SqlSessionFactoryBuilder().build( configIS );
session = factory.openSession(); SqlSession session = factory.openSession();
// 保存 // 保存
SessionMap.put( configFile, session ); SessionFactoryMap.put( configFile, factory );
return session; return session;
} }
public static SqlSession getSqlSessionBatch( String configFile ) throws IOException public static SqlSession getSqlSessionBatch( String configFile ) throws IOException
{ {
SqlSession sessionBatch = SessionMapBatch.get( configFile ); // 根据配置文件的路径查找是否已经创建了对应的session
SqlSessionFactory factory = SessionFactoryMap.get( configFile );
if ( sessionBatch != null ) // 找到就直接返回
if ( factory != null )
{ {
return sessionBatch; return factory.openSession();
} }
// 没有缓存的就创建一个新的 // 没找到就创建一个
InputStream configIS = Resources.getResourceAsStream( configFile ); InputStream configIS = Resources.getResourceAsStream( configFile );
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build( configIS ); factory = new SqlSessionFactoryBuilder().build( configIS );
sessionBatch = factory.openSession(ExecutorType.BATCH, false ); SqlSession session = factory.openSession( ExecutorType.BATCH, false );
//保存 // 保存
SessionMapBatch.put( configFile, sessionBatch ); SessionFactoryMap.put( configFile, factory );
return sessionBatch; return session;
} }
/** /**
@@ -80,21 +84,21 @@ public class MybatisUtils
public static SqlSession getSqlSession() throws IOException public static SqlSession getSqlSession() throws IOException
{ {
// 根据配置文件的路径查找是否已经创建了对应的session // 根据配置文件的路径查找是否已经创建了对应的session
SqlSession session = SessionMap.get( DEFAULT_CONFIGFILE ); SqlSessionFactory factory = SessionFactoryMap.get( DEFAULT_CONFIGFILE );
// 找到就直接返回 // 找到就直接返回
if ( session != null ) if ( factory != null )
{ {
return session; return factory.openSession();
} }
// 没找到就创建一个 // 没找到就创建一个
InputStream configIS = Resources.getResourceAsStream( DEFAULT_CONFIGFILE ); InputStream configIS = Resources.getResourceAsStream( DEFAULT_CONFIGFILE );
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build( configIS ); factory = new SqlSessionFactoryBuilder().build( configIS );
session = factory.openSession(); SqlSession session = factory.openSession();
// 保存 // 保存
SessionMap.put( DEFAULT_CONFIGFILE, session ); SessionFactoryMap.put( DEFAULT_CONFIGFILE, factory );
return session; return session;
} }
@@ -108,21 +112,23 @@ public class MybatisUtils
*/ */
public static SqlSession getSqlSessionBatch() throws IOException public static SqlSession getSqlSessionBatch() throws IOException
{ {
SqlSession sessionBatch = SessionMapBatch.get( DEFAULT_CONFIGFILE ); // 根据配置文件的路径查找是否已经创建了对应的session
SqlSessionFactory factory = SessionFactoryMap.get( DEFAULT_CONFIGFILE );
if ( sessionBatch != null ) // 找到就直接返回
if ( factory != null )
{ {
return sessionBatch; return factory.openSession();
} }
// 没有缓存的就创建一个新的 // 没找到就创建一个
InputStream configIS = Resources.getResourceAsStream( DEFAULT_CONFIGFILE ); InputStream configIS = Resources.getResourceAsStream( DEFAULT_CONFIGFILE );
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build( configIS ); factory = new SqlSessionFactoryBuilder().build( configIS );
sessionBatch = factory.openSession(ExecutorType.BATCH, false ); SqlSession session = factory.openSession( ExecutorType.BATCH, false );
//保存 // 保存
SessionMapBatch.put( DEFAULT_CONFIGFILE, sessionBatch ); SessionFactoryMap.put( DEFAULT_CONFIGFILE, factory );
return sessionBatch; return session;
} }
} }

View File

@@ -41,12 +41,12 @@ public final class TeleSalerInfo
/** /**
* 查询坐席工号的static方法。 * 查询坐席工号的static方法。
* @param telsalerCode 坐席工号 * @param telsaler 坐席工号
* @return TeleSalerInfo对象。 * @return TeleSalerInfo对象。
* @throws ClassNotFoundException * @throws ClassNotFoundException
* @throws SQLException * @throws SQLException
*/ */
public static TeleSalerInfo queryTeleSalerInfo( String telsalerCode ) public static TeleSalerInfo queryTeleSalerInfo( String telsaler )
throws ClassNotFoundException, SQLException throws ClassNotFoundException, SQLException
{ {
TeleSalerInfo info = null; TeleSalerInfo info = null;
@@ -72,7 +72,7 @@ public final class TeleSalerInfo
idst0.bm_t bm idst0.bm_t bm
WHERE s.team_code = t.team_code WHERE s.team_code = t.team_code
AND t.department_code = bm.department_code AND t.department_code = bm.department_code
AND s.saler_code = ? """; AND (s.saler_code = ? or s.saler_name = ?) """;
// String sql = "SELECT DISTINCT s.saler_code, s.saler_name, \n" // String sql = "SELECT DISTINCT s.saler_code, s.saler_name, \n"
// + " t.team_code, t.team, \n" // + " t.team_code, t.team, \n"
// + " bm.department_code, bm.department_name \n" // + " bm.department_code, bm.department_name \n"
@@ -86,7 +86,8 @@ public final class TeleSalerInfo
connection = DriverManager.getConnection( jdbcURL, userName, password ); connection = DriverManager.getConnection( jdbcURL, userName, password );
statement = connection.prepareStatement( sql ); statement = connection.prepareStatement( sql );
statement.setString( 1, telsalerCode ); statement.setString( 1, telsaler );
statement.setString( 2, telsaler );
result = statement.executeQuery(); result = statement.executeQuery();

View File

@@ -61,6 +61,7 @@ public class CallerArchievement
params.put( "a_caller_code", callerCode ); params.put( "a_caller_code", callerCode );
// session.clearCache();
mapper.getCallerArchievement( params ); mapper.getCallerArchievement( params );
// 总业绩 // 总业绩

View File

@@ -77,6 +77,7 @@ public class DepartmentArchievement
params.put("a_department_code", departmentCode); params.put("a_department_code", departmentCode);
session.clearCache();
mapper.getDepartmentArchievement(params); mapper.getDepartmentArchievement(params);
Integer totalArchievement = (Integer)params.get("a_total"); Integer totalArchievement = (Integer)params.get("a_total");

View File

@@ -208,7 +208,7 @@ public final class ImportBIExcelData
MyPOIUtils.getNumbericCellValue( row, 10 ) * 100; MyPOIUtils.getNumbericCellValue( row, 10 ) * 100;
BITelsalerAttachingRateRecord record = new BITelsalerAttachingRateRecord( BITelsalerAttachingRateRecord record = new BITelsalerAttachingRateRecord(
departmentName, LocalDate.now(), name, motoPremium, nomotoPremium, departmentName, name, motoPremium, nomotoPremium,
motoPremiumProPortion, attachingRate, attachingRateChange, motoPremiumProPortion, attachingRate, attachingRateChange,
customerHandleRateCell, customerHandleRateChangeCell, customerHandleRateCell, customerHandleRateChangeCell,
noMotoPremiumPerCustomerCell, noMotoPremiumPerCustomerChangeCell ); noMotoPremiumPerCustomerCell, noMotoPremiumPerCustomerChangeCell );

View File

@@ -73,7 +73,7 @@ public class StaffInfoQueryController
try try
{ {
saler = TeleSalerInfo.queryTeleSalerInfo( telSaler.getTelSalerCode() ); saler = TeleSalerInfo.queryTeleSalerInfo( telSaler.getTelSaler() );
// 根据返回结果是否为 null判断是否查询到坐席信息 // 根据返回结果是否为 null判断是否查询到坐席信息
if ( saler != null ) if ( saler != null )

View File

@@ -17,19 +17,19 @@ public class TelsalerQueryRequest
public TelsalerQueryRequest( String telSalerCode ) public TelsalerQueryRequest( String telSalerCode )
{ {
this.telSalerCode = telSalerCode; this.telSaler = telSalerCode;
} }
public String getTelSalerCode() public String getTelSaler()
{ {
return telSalerCode; return telSaler;
} }
public void setTelSalerCode( String telSalerCode ) public void setTelSaler( String telSalerCode )
{ {
this.telSalerCode = telSalerCode; this.telSaler = telSalerCode;
} }
@JsonProperty("telsaler_code") @JsonProperty("telsaler")
private String telSalerCode; private String telSaler;
} }

View File

@@ -0,0 +1,202 @@
/*
* @Author: Kane
* @Date: 2023-11-01 16:48:56
* @LastEditors: Kane
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/web/controllers/archievement/bi/BIReportController.java
* @Description: BI报表相关的controller
*
* Copyright (c) ${2023} by Kane, All Rights Reserved.
*/
package com.cpic.xim.web.controllers.archievement.bi;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.apache.ibatis.exceptions.PersistenceException;
import org.apache.ibatis.session.SqlSession;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import com.cpic.xim.mybatis.mapper.QueryBIArchievementDataMapper;
import com.cpic.xim.mybatis.pojo.BIDepartmentAttachingRateRecord;
import com.cpic.xim.mybatis.pojo.BIDepartmentRenewalRateRecord;
import com.cpic.xim.mybatis.pojo.BITelsalerAttachingRateRecord;
import com.cpic.xim.mybatis.pojo.BITelsalerRenewalRateRecord;
import com.cpic.xim.mybatis.utils.MybatisUtils;
@Controller
@RequestMapping( method = RequestMethod.POST, path = "/archievement" )
public class BIReportController
{
private static Logger logger = LoggerFactory.getLogger( BIReportController.class );
@PostMapping( path = "/bi_telsaler_attachingrate.do" )
@ResponseBody
public QueryTelsalerAttachingRateReportResponse queryTelsalerAttachingRateRepor()
{
QueryTelsalerAttachingRateReportResponse response =
new QueryTelsalerAttachingRateReportResponse();
SqlSession session = null;
QueryBIArchievementDataMapper mapper = null;
try
{
session = MybatisUtils.getSqlSession();
mapper = session.getMapper( QueryBIArchievementDataMapper.class );
session.clearCache();
List<BITelsalerAttachingRateRecord> records =
mapper.queryBITelsalerAttachingRate();
response.setSuccess( true );
response.setMessage( "查询成功" );
response.setRecords( records );
}
catch ( IOException error )
{
logger.error("查询BI坐席渗透率报表出现IOException异常异常内容", error);
response.setSuccess( false );
response.setMessage( "查询失败,原因" + error.getMessage() );
response.setRecords( null );
}
catch ( PersistenceException error )
{
logger.error("查询BI坐席渗透率报表出现PersistenceException异常异常内容", error);
response.setSuccess( false );
response.setMessage( "查询失败,原因" + error.getMessage() );
response.setRecords( null );
}
return response;
}
@PostMapping( path="/bi_telsaler_renewalrate.do" )
@ResponseBody
public QueryTelsalerRenewalRateReportResponse queryTelsalerRenewalRateReport()
{
QueryTelsalerRenewalRateReportResponse response = new QueryTelsalerRenewalRateReportResponse();
SqlSession session = null;
QueryBIArchievementDataMapper mapper = null;
try
{
session = MybatisUtils.getSqlSession();
mapper = session.getMapper(QueryBIArchievementDataMapper.class);
session.clearCache();
ArrayList<BITelsalerRenewalRateRecord> records = mapper.queryBITesalerRenewalRate();
response.setSuccess( true );
response.setMessage("查询成功");
response.setRecords(records);
}
catch ( IOException error )
{
logger.error("查询BI坐席续保率报表出现IOException异常异常内容", error);
response.setSuccess( false );
response.setMessage( "查询失败,原因" + error.getMessage() );
response.setRecords( null );
}
catch ( PersistenceException error )
{
logger.error("查询BI坐席续保率报表出现PersistenceException异常异常内容", error);
response.setSuccess( false );
response.setMessage( "查询失败,原因" + error.getMessage() );
response.setRecords( null );
}
return response;
}
@PostMapping( path = "/bi_department_attachingrate.do" )
@ResponseBody
public QueryDepartmentAttachingRateReportResponse queryDepartmentAttachingRateRepor()
{
QueryDepartmentAttachingRateReportResponse response =
new QueryDepartmentAttachingRateReportResponse();
SqlSession session = null;
QueryBIArchievementDataMapper mapper = null;
try
{
session = MybatisUtils.getSqlSession();
mapper = session.getMapper( QueryBIArchievementDataMapper.class );
session.clearCache();
ArrayList<BIDepartmentAttachingRateRecord> records =
mapper.queryBIDepartmentAttachingRate();
response.setSuccess( true );
response.setMessage( "查询成功" );
response.setRecords( records );
}
catch ( IOException error )
{
logger.error("查询BI机构渗透率报表出现IOException异常异常内容", error);
response.setSuccess( false );
response.setMessage( "查询失败,原因" + error.getMessage() );
response.setRecords( null );
}
catch ( PersistenceException error )
{
logger.error("查询BI机构渗透率报表出现PersistenceException异常异常内容", error);
response.setSuccess( false );
response.setMessage( "查询失败,原因" + error.getMessage() );
response.setRecords( null );
}
return response;
}
@PostMapping( path = "/bi_department_renewalrate.do" )
@ResponseBody
public QueryDepartmentRenewalRateReportResponse queryDepartmentRenewalRateRepor()
{
QueryDepartmentRenewalRateReportResponse response =
new QueryDepartmentRenewalRateReportResponse();
SqlSession session = null;
QueryBIArchievementDataMapper mapper = null;
try
{
session = MybatisUtils.getSqlSession();
mapper = session.getMapper( QueryBIArchievementDataMapper.class );
session.clearCache();
ArrayList<BIDepartmentRenewalRateRecord> records =
mapper.queryBIDepartmentRenewalRate();
response.setSuccess( true );
response.setMessage( "查询成功" );
response.setRecords( records );
}
catch ( IOException error )
{
logger.error("查询BI机构渗透率报表出现IOException异常异常内容", error);
response.setSuccess( false );
response.setMessage( "查询失败,原因" + error.getMessage() );
response.setRecords( null );
}
catch ( PersistenceException error )
{
logger.error("查询BI机构渗透率报表出现PersistenceException异常异常内容", error);
response.setSuccess( false );
response.setMessage( "查询失败,原因" + error.getMessage() );
response.setRecords( null );
}
return response;
}
}

View File

@@ -0,0 +1,91 @@
/*
* @Author: Kane
* @Date: 2023-11-02 11:21:03
* @LastEditors: Kane
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/web/controllers/archievement/bi/QueryDepartmentAttachingRateReportResponse.java
* @Description:
*
* Copyright (c) ${2023} by Kane, All Rights Reserved.
*/
/*
* @Author: Kane
* @Date: 2023-11-01 16:51:53
* @LastEditors: Kane
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/web/controllers/archievement/bi/QueryTelsalerAttachingRateReportResponse.java
* @Description:
*
* Copyright (c) ${2023} by Kane, All Rights Reserved.
*/
package com.cpic.xim.web.controllers.archievement.bi;
import java.util.ArrayList;
import com.cpic.xim.mybatis.pojo.*;
import com.cpic.xim.web.controllers.QueryResponse;
import com.fasterxml.jackson.annotation.JsonProperty;
public class QueryDepartmentAttachingRateReportResponse extends QueryResponse
{
@JsonProperty("records")
ArrayList<BIDepartmentAttachingRateRecord> records;
public QueryDepartmentAttachingRateReportResponse( boolean success, String message,
ArrayList<BIDepartmentAttachingRateRecord> records )
{
super( success, message );
this.records = records;
}
public QueryDepartmentAttachingRateReportResponse()
{
super( false, "" );
this.records = null;
}
public ArrayList<BIDepartmentAttachingRateRecord> getRecords()
{
return records;
}
public void setRecords( ArrayList<BIDepartmentAttachingRateRecord> records )
{
this.records = records;
}
@Override
public String toString()
{
return "QueryTelsalerAttachingRateReportResponse [records=" + records + "]";
}
@Override
public int hashCode()
{
final int prime = 31;
int result = super.hashCode();
result = prime * result + ((records == null) ? 0 : records.hashCode());
return result;
}
@Override
public boolean equals( Object obj )
{
if ( this == obj )
return true;
if ( !super.equals( obj ) )
return false;
if ( getClass() != obj.getClass() )
return false;
QueryDepartmentAttachingRateReportResponse other =
(QueryDepartmentAttachingRateReportResponse) obj;
if ( records == null )
{
if ( other.records != null )
return false;
}
else if ( !records.equals( other.records ) )
return false;
return true;
}
}

View File

@@ -0,0 +1,100 @@
/*
* @Author: Kane
* @Date: 2023-11-02 16:56:50
* @LastEditors: Kane
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/web/controllers/archievement/bi/QueryDepartmentRenewalRateReportResponse.java
* @Description:
*
* Copyright (c) ${2023} by Kane, All Rights Reserved.
*/
/*
* @Author: Kane
* @Date: 2023-11-02 11:21:03
* @LastEditors: Kane
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/web/controllers/archievement/bi/QueryDepartmentAttachingRateReportResponse.java
* @Description:
*
* Copyright (c) ${2023} by Kane, All Rights Reserved.
*/
/*
* @Author: Kane
* @Date: 2023-11-01 16:51:53
* @LastEditors: Kane
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/web/controllers/archievement/bi/QueryTelsalerAttachingRateReportResponse.java
* @Description:
*
* Copyright (c) ${2023} by Kane, All Rights Reserved.
*/
package com.cpic.xim.web.controllers.archievement.bi;
import java.util.ArrayList;
import com.cpic.xim.mybatis.pojo.*;
import com.cpic.xim.web.controllers.QueryResponse;
import com.fasterxml.jackson.annotation.JsonProperty;
public class QueryDepartmentRenewalRateReportResponse extends QueryResponse
{
@JsonProperty("records")
ArrayList<BIDepartmentRenewalRateRecord> records;
public QueryDepartmentRenewalRateReportResponse( boolean success, String message,
ArrayList<BIDepartmentRenewalRateRecord> records )
{
super( success, message );
this.records = records;
}
public QueryDepartmentRenewalRateReportResponse()
{
super( false, "" );
this.records = null;
}
public ArrayList<BIDepartmentRenewalRateRecord> getRecords()
{
return records;
}
public void setRecords( ArrayList<BIDepartmentRenewalRateRecord> records )
{
this.records = records;
}
@Override
public String toString()
{
return "QueryTelsalerAttachingRateReportResponse [records=" + records + "]";
}
@Override
public int hashCode()
{
final int prime = 31;
int result = super.hashCode();
result = prime * result + ((records == null) ? 0 : records.hashCode());
return result;
}
@Override
public boolean equals( Object obj )
{
if ( this == obj )
return true;
if ( !super.equals( obj ) )
return false;
if ( getClass() != obj.getClass() )
return false;
QueryDepartmentRenewalRateReportResponse other =
(QueryDepartmentRenewalRateReportResponse) obj;
if ( records == null )
{
if ( other.records != null )
return false;
}
else if ( !records.equals( other.records ) )
return false;
return true;
}
}

View File

@@ -0,0 +1,83 @@
/*
* @Author: Kane
* @Date: 2023-11-01 16:51:53
* @LastEditors: Kane
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/web/controllers/archievement/bi/QueryTelsalerAttachingRateReportResponse.java
* @Description:
*
* Copyright (c) ${2023} by Kane, All Rights Reserved.
*/
package com.cpic.xim.web.controllers.archievement.bi;
import java.util.ArrayList;
import java.util.List;
import com.cpic.xim.mybatis.pojo.BITelsalerAttachingRateRecord;
import com.cpic.xim.web.controllers.QueryResponse;
import com.fasterxml.jackson.annotation.JsonProperty;
public class QueryTelsalerAttachingRateReportResponse extends QueryResponse
{
@JsonProperty("records")
List<BITelsalerAttachingRateRecord> records;
public QueryTelsalerAttachingRateReportResponse( boolean success, String message,
ArrayList<BITelsalerAttachingRateRecord> records )
{
super( success, message );
this.records = records;
}
public QueryTelsalerAttachingRateReportResponse()
{
super( false, "" );
this.records = null;
}
public List<BITelsalerAttachingRateRecord> getRecords()
{
return records;
}
public void setRecords( List<BITelsalerAttachingRateRecord> records )
{
this.records = records;
}
@Override
public String toString()
{
return "QueryTelsalerAttachingRateReportResponse [records=" + records + "]";
}
@Override
public int hashCode()
{
final int prime = 31;
int result = super.hashCode();
result = prime * result + ((records == null) ? 0 : records.hashCode());
return result;
}
@Override
public boolean equals( Object obj )
{
if ( this == obj )
return true;
if ( !super.equals( obj ) )
return false;
if ( getClass() != obj.getClass() )
return false;
QueryTelsalerAttachingRateReportResponse other =
(QueryTelsalerAttachingRateReportResponse) obj;
if ( records == null )
{
if ( other.records != null )
return false;
}
else if ( !records.equals( other.records ) )
return false;
return true;
}
}

View File

@@ -0,0 +1,92 @@
/*
* @Author: Kane
* @Date: 2023-11-02 16:54:42
* @LastEditors: Kane
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/web/controllers/archievement/bi/QueryTelsalerRenewalRateReportResponse.java
* @Description:
*
* Copyright (c) ${2023} by Kane, All Rights Reserved.
*/
/*
* @Author: Kane
* @Date: 2023-11-01 16:51:53
* @LastEditors: Kane
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/web/controllers/archievement/bi/QueryTelsalerAttachingRateReportResponse.java
* @Description:
*
* Copyright (c) ${2023} by Kane, All Rights Reserved.
*/
package com.cpic.xim.web.controllers.archievement.bi;
import java.util.ArrayList;
import com.cpic.xim.mybatis.pojo.BITelsalerAttachingRateRecord;
import com.cpic.xim.mybatis.pojo.BITelsalerRenewalRateRecord;
import com.cpic.xim.web.controllers.QueryResponse;
import com.fasterxml.jackson.annotation.JsonProperty;
public class QueryTelsalerRenewalRateReportResponse extends QueryResponse
{
@JsonProperty("records")
ArrayList<BITelsalerRenewalRateRecord> records;
public QueryTelsalerRenewalRateReportResponse( boolean success, String message,
ArrayList<BITelsalerRenewalRateRecord> records )
{
super( success, message );
this.records = records;
}
public QueryTelsalerRenewalRateReportResponse()
{
super( false, "" );
this.records = null;
}
public ArrayList<BITelsalerRenewalRateRecord> getRecords()
{
return records;
}
public void setRecords( ArrayList<BITelsalerRenewalRateRecord> records )
{
this.records = records;
}
@Override
public String toString()
{
return "QueryTelsalerAttachingRateReportResponse [records=" + records + "]";
}
@Override
public int hashCode()
{
final int prime = 31;
int result = super.hashCode();
result = prime * result + ((records == null) ? 0 : records.hashCode());
return result;
}
@Override
public boolean equals( Object obj )
{
if ( this == obj )
return true;
if ( !super.equals( obj ) )
return false;
if ( getClass() != obj.getClass() )
return false;
QueryTelsalerRenewalRateReportResponse other =
(QueryTelsalerRenewalRateReportResponse) obj;
if ( records == null )
{
if ( other.records != null )
return false;
}
else if ( !records.equals( other.records ) )
return false;
return true;
}
}

View File

@@ -4,7 +4,7 @@
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} ### %msg%n" /> <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} ### %msg%n" />
<ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY" /> <ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY" />
</Console> </Console>
<RollingFile name="rolling_file" filename="d:/logs/桌面霸屏/app.log" <RollingFile name="rolling_file_win" filename="d:/logs/桌面霸屏/app.log"
filePattern="d:/logs/桌面霸屏/logs/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz"> filePattern="d:/logs/桌面霸屏/logs/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz">
<PatternLayout> <PatternLayout>
<Pattern>[%t][%level][%d{HH:mm:ss.SSS}][%logger.%M{36}#%L] %msg%n</Pattern> <Pattern>[%t][%level][%d{HH:mm:ss.SSS}][%logger.%M{36}#%L] %msg%n</Pattern>
@@ -15,13 +15,25 @@
<DefaultRolloverStrategy max="20" /> <DefaultRolloverStrategy max="20" />
</Policies> </Policies>
</RollingFile> </RollingFile>
<RollingFile name="rolling_file_linux" filename="/logs/桌面霸屏/app.log"
filePattern="/logs/桌面霸屏/logs/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz">
<PatternLayout>
<Pattern>[%t][%level][%d{HH:mm:ss.SSS}][%logger.%M{36}#%L] %msg%n</Pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy interval="1" />
<SizeBasedTriggeringPolicy size="20MB" />
<DefaultRolloverStrategy max="20" />
</Policies>
</RollingFile>
</Appenders> </Appenders>
<Loggers> <Loggers>
<!-- <Logger name="mylog" level="info"> <!-- <Logger name="mylog" level="info">
<AppenderRef ref="rolling_file" /> <AppenderRef ref="rolling_file" />
</Logger> --> </Logger> -->
<Root level="debug"> <Root level="debug">
<AppenderRef ref="rolling_file" /> <AppenderRef ref="rolling_file_linux" />
<AppenderRef ref="rolling_file_win" />
<AppenderRef ref="Console" /> <AppenderRef ref="Console" />
</Root> </Root>
</Loggers> </Loggers>

View File

@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "https://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.cpic.xim.mybatis.mapper.ArchievementMapper"> <mapper namespace="com.cpic.xim.mybatis.mapper.ArchievementMapper">
<select id="getDepartmentArchievement" flushCache="true" statementType="CALLABLE" parameterType="java.util.HashMap"> <select id="getDepartmentArchievement" useCache="false" flushCache="true" statementType="CALLABLE" parameterType="java.util.HashMap">
call telsale_archievement_pkg.department_archievement( call telsale_archievement_pkg.department_archievement(
#{a_department_code, mode=IN, jdbcType=VARCHAR}, #{a_department_code, mode=IN, jdbcType=VARCHAR},
#{a_attaching_rate, mode=OUT, jdbcType=VARCHAR}, #{a_attaching_rate, mode=OUT, jdbcType=VARCHAR},
@@ -9,7 +9,7 @@
#{a_total, mode=OUT, jdbcType=INTEGER, javaType=Integer}, #{a_total, mode=OUT, jdbcType=INTEGER, javaType=Integer},
#{a_mensual_cur, mode=OUT, jdbcType=CURSOR, resultMap=MensualArchievementMapper}) #{a_mensual_cur, mode=OUT, jdbcType=CURSOR, resultMap=MensualArchievementMapper})
</select> </select>
<select id="getCallerArchievement" flushCache="true" statementType="CALLABLE" parameterType="java.util.HashMap"> <select id="getCallerArchievement" useCache="false" flushCache="true" statementType="CALLABLE" parameterType="java.util.HashMap">
call telsale_archievement_pkg.caller_archievement( call telsale_archievement_pkg.caller_archievement(
#{a_caller_code, mode=IN, jdbcType=VARCHAR}, #{a_caller_code, mode=IN, jdbcType=VARCHAR},
#{a_attaching_rate, mode=OUT, jdbcType=VARCHAR}, #{a_attaching_rate, mode=OUT, jdbcType=VARCHAR},

View File

@@ -38,7 +38,7 @@
</insert> </insert>
<select id="cleanTelsalerAttachingRateData" statementType="CALLABLE"> <select id="cleanTelsalerAttachingRateData" statementType="CALLABLE">
call telsale_bi_utils.清理BI电销坐席车非渗透跟踪表() call telsale_bi_utils.清理BI电销坐席车非渗透跟踪表()
</select> </select>
<select id="cleanTelsalerRenewalRateData" statementType="CALLABLE"> <select id="cleanTelsalerRenewalRateData" statementType="CALLABLE">
call telsale_bi_utils.清理BI电销坐席续保率跟踪表() call telsale_bi_utils.清理BI电销坐席续保率跟踪表()

View File

@@ -0,0 +1,124 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.cpic.xim.mybatis.mapper.QueryBIArchievementDataMapper">
<!-- 查询坐席车非渗透率报表 -->
<select id="queryBITelsalerAttachingRate" statementType="STATEMENT" resultMap="BITelsalerAttachingRate" useCache="false" flushCache="true">
SELECT t.部门,
t.经办,
t."车险保费(万)" as 车险保费,
t.车险保费占比,
t."非车保费(万)" as 非车保费,
t.当月保费渗透率,
t.保费渗透率环比上月,
t.当月客户渗透率,
t.客户渗透率环比上月,
t.当月车非客均保费,
t.客均保费环比上月
FROM BI电销坐席车非渗透率跟踪表 t
ORDER BY t.部门
</select>
<!-- 坐席车非渗透率报表记录 -->
<resultMap id="BITelsalerAttachingRate" type="com.cpic.xim.mybatis.pojo.BITelsalerAttachingRateRecord">
<result property="departmentName" column="部门" javaType="String" jdbcType="VARCHAR" />
<result property="telsalerName" column="经办" javaType="String" jdbcType="VARCHAR" />
<result property="motoPremium" column="车险保费" javaType="double" jdbcType="DOUBLE" />
<result property="motoPremiumProportion" column="车险保费占比" javaType="double" jdbcType="DOUBLE" />
<result property="nomotoPremium" column="非车保费" javaType="double" jdbcType="DOUBLE" />
<result property="attachingRate" column="当月保费渗透率" javaType="double" jdbcType="DOUBLE" />
<result property="attachingRateChange" column="保费渗透率环比上月" javaType="double" jdbcType="DOUBLE" />
<result property="customerHandleRate" column="当月客户渗透率" javaType="double" jdbcType="DOUBLE" />
<result property="customerHandleRateChange" column="客户渗透率环比上月" javaType="double" jdbcType="DOUBLE" />
<result property="noMotoPremiumPerCustomer" column="当月车非客均保费" javaType="double" jdbcType="DOUBLE" />
<result property="noMotoPremiumPerCustomerChange" column="客均保费环比上月" javaType="double" jdbcType="DOUBLE" />
</resultMap>
<!-- 坐席续保率 -->
<select id="queryBITesalerRenewalRate" statementType="STATEMENT" resultMap="BITelsalerRenewalRate" useCache="false" flushCache="true">
select t.责任部门,
t.责任人,
t."机构目标值1(%)" as 机构目标值,
t."到期数-全月" as 到期数全月,
t."序时到期数占比(%)" as 序时到期数占比,
t."个车续保率(序时)(%)" as 个车续保率序时,
t."个车续保率(全月)(%)" as 个车续保率全月,
t."环比昨日(%)" as 环比昨日,
t."环比上月(%)" as 环比上月,
t.平均提前签单天数,
t.环比
from BI电销坐席续保率跟踪表 t
</select>
<resultMap id="BITelsalerRenewalRate" type="com.cpic.xim.mybatis.pojo.BITelsalerRenewalRateRecord">
<result property="责任部门" column="责任部门" javaType="String" jdbcType="VARCHAR" />
<result property="责任人" column="责任人" javaType="String" jdbcType="VARCHAR" />
<result property="机构目标值" column="机构目标值" javaType="double" jdbcType="DOUBLE" />
<result property="到期数全月" column="到期数全月" javaType="double" jdbcType="DOUBLE" />
<result property="序时到期数占比" column="序时到期数占比" javaType="double" jdbcType="DOUBLE" />
<result property="个车续保率序时" column="个车续保率序时" javaType="double" jdbcType="DOUBLE" />
<result property="个车续保率全月" column="个车续保率全月" javaType="double" jdbcType="DOUBLE" />
<result property="环比昨日" column="环比昨日" javaType="double" jdbcType="DOUBLE" />
<result property="环比上月" column="环比上月" javaType="double" jdbcType="DOUBLE" />
<result property="平均提前签单天数" column="平均提前签单天数" javaType="int" jdbcType="DOUBLE" />
<result property="环比" column="环比" javaType="int" jdbcType="DOUBLE" />
</resultMap>
<!-- 机构渗透率 -->
<select id="queryBIDepartmentAttachingRate" statementType="STATEMENT" resultMap="BIDepartmentAttachingRate" useCache="false" flushCache="true">
select t.部门,
t."目标值-机构" as 目标值机构,
t.目标差距,
t.车险保费,
t.车险保费占比,
t.非车保费,
t.当月保费渗透率,
t.保费渗透率环比上月,
t.当月客户渗透率,
t.客户渗透率环比上月,
t.当月车非客均保费,
t.客均保费环比上月,
t.车险客户数
from BI机构渗透率跟踪表 t
</select>
<resultMap id="BIDepartmentAttachingRate" type="com.cpic.xim.mybatis.pojo.BIDepartmentAttachingRateRecord">
<result column="部门" property="departmentName" jdbcType="VARCHAR" javaType="String" />
<result column="目标值机构" property="departmentObject" jdbcType="DOUBLE" javaType="double" />
<result column="目标差距" property="objectGap" jdbcType="DOUBLE" javaType="double" />
<result column="车险保费" property="motoPremium" jdbcType="DOUBLE" javaType="double" />
<result column="车险保费占比" property="motoPremiumProPortion" jdbcType="DOUBLE" javaType="double" />
<result column="非车保费" property="nomotoPremium" jdbcType="DOUBLE" javaType="double" />
<result column="当月保费渗透率" property="attachingRate" jdbcType="DOUBLE" javaType="double" />
<result column="保费渗透率环比上月" property="attachingRateChange" jdbcType="DOUBLE" javaType="double" />
<result column="当月客户渗透率" property="customerHandleRate" jdbcType="DOUBLE" javaType="double" />
<result column="客户渗透率环比上月" property="customerHandleRateChange" jdbcType="DOUBLE" javaType="double" />
<result column="当月车非客均保费" property="premiumPerCustomer" jdbcType="DOUBLE" javaType="double" />
<result column="客均保费环比上月" property="premiumPerCustomerChange" jdbcType="DOUBLE" javaType="double" />
<result column="车险客户数" property="motoInsuranceCustomerCount" jdbcType="INTEGER" javaType="int" />
</resultMap>
<!-- 机构续保率 -->
<select id="queryBIDepartmentRenewalRate" statementType="STATEMENT" resultMap="BIDepartmentRenewalRate" useCache="false" flushCache="true">
select t.责任部门,
t."机构目标值1(%)" as 机构目标值,
t."到期数-全月" as 到期数全月,
t."序时到期数占比(%)" as 序时到期数占比,
t."个车续保率(序时)(%)" as 个车续保率序时,
t."个车续保率(全月)(%)" as 个车续保率全月,
t."环比昨日(%)" as 环比昨日,
t."环比上月(%)" as 环比上月,
t.平均提前签单天数,
t.环比
from BI机构当月个车续保率跟踪表 t
</select>
<resultMap id="BIDepartmentRenewalRate" type="com.cpic.xim.mybatis.pojo.BIDepartmentRenewalRateRecord">
<result column="责任部门" property="责任部门" jdbcType="VARCHAR" javaType="String" />
<result column="机构目标值" property="机构目标值" jdbcType="DOUBLE" javaType="double" />
<result column="到期数全月" property="到期数全月" jdbcType="INTEGER" javaType="int" />
<result column="序时到期数占比" property="序时到期数占比" jdbcType="DOUBLE" javaType="double" />
<result column="个车续保率序时" property="个车续保率序时" jdbcType="DOUBLE" javaType="double" />
<result column="个车续保率全月" property="个车续保率全月" jdbcType="DOUBLE" javaType="double" />
<result column="环比昨日" property="环比昨日" jdbcType="DOUBLE" javaType="double" />
<result column="环比上月" property="环比上月" jdbcType="DOUBLE" javaType="double" />
<result column="平均提前签单天数" property="平均提前签单天数" jdbcType="INTEGER" javaType="int" />
<result column="环比" property="环比" jdbcType="DOUBLE" javaType="double" />
</resultMap>
</mapper>

View File

@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "https://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.cpic.xim.mybatis.mapper.RewardsMapper"> <mapper namespace="com.cpic.xim.mybatis.mapper.RewardsMapper">
<select id="queryRewardProjects" resultMap="RewardProjectMap"> <select id="queryRewardProjects" statementType="STATEMENT" resultMap="RewardProjectMap" useCache="false" flushCache="true">
select reward_index, reward_name from reward_projects order by reward_index desc select reward_index, reward_name from reward_projects order by reward_index desc
</select> </select>
<resultMap id="RewardProjectMap" type="com.cpic.xim.mybatis.pojo.RewardProject"> <resultMap id="RewardProjectMap" type="com.cpic.xim.mybatis.pojo.RewardProject">
@@ -9,7 +9,7 @@
<result property="rewardName" column="reward_name" javaType="String"/> <result property="rewardName" column="reward_name" javaType="String"/>
</resultMap> </resultMap>
<select id="queryRewardTelsaler" flushCache="true" resultMap="RewardGainerMapper"> <select id="queryRewardTelsaler" statementType="STATEMENT" resultMap="RewardGainerMapper" useCache="false" flushCache="true">
SELECT hjr.rec_id rec_id, SELECT hjr.rec_id rec_id,
hjr.telsaler_name telsaler_name, hjr.telsaler_name telsaler_name,
hjr.telsaler_code telsaler_code, hjr.telsaler_code telsaler_code,
@@ -28,20 +28,20 @@
<result column="reward_index" property="rewardProjectCode" /> <result column="reward_index" property="rewardProjectCode" />
</resultMap> </resultMap>
<select id="addRewardTelSaler" flushCache="true" statementType="CALLABLE" parameterType="java.util.HashMap"> <select id="addRewardTelSaler" statementType="CALLABLE" parameterType="java.util.HashMap" useCache="false" flushCache="true" >
call telsaler_reward_pkg.add_telsaler_reward( call telsaler_reward_pkg.add_telsaler_reward(
#{a_reward_index,mode=IN,jdbcType=VARCHAR}, #{a_reward_index,mode=IN,jdbcType=VARCHAR},
#{a_telsaler_name,mode=IN,jdbcType=VARCHAR}) #{a_telsaler_name,mode=IN,jdbcType=VARCHAR})
</select> </select>
<!-- 删除获奖坐席记录 --> <!-- 删除获奖坐席记录 -->
<select id="deleteRewardTelSaler" flushCache="true" statementType="CALLABLE" parameterType="java.util.HashMap"> <select id="deleteRewardTelSaler" statementType="CALLABLE" parameterType="java.util.HashMap" useCache="false" flushCache="true" >
call telsaler_reward_pkg.delete_telsaler_reward( call telsaler_reward_pkg.delete_telsaler_reward(
#{a_rec_id,mode=IN,jdbcType=INTEGER}) #{a_rec_id,mode=IN,jdbcType=INTEGER})
</select> </select>
<!-- 更新获奖坐席 --> <!-- 更新获奖坐席 -->
<select id="updateRewardTelSaler" statementType="CALLABLE" flushCache="true" parameterType="java.util.HashMap" > <select id="updateRewardTelSaler" statementType="CALLABLE" parameterType="java.util.HashMap" useCache="false" flushCache="true" >
call telsaler_reward_pkg.update_telsaler_reward( call telsaler_reward_pkg.update_telsaler_reward(
#{a_rec_id,mode=IN,jdbcType=INTEGER}, #{a_rec_id,mode=IN,jdbcType=INTEGER},
#{a_telsaler_name,mode=IN,jdbcType=VARCHAR}, #{a_telsaler_name,mode=IN,jdbcType=VARCHAR},

View File

@@ -3,6 +3,11 @@
<configuration> <configuration>
<properties resource="mybatis/jdbc.properties" /> <properties resource="mybatis/jdbc.properties" />
<settings>
<!-- 二级缓存开启 -->
<setting name="cacheEnabled" value="false" />
</settings>
<!-- 类型别名 --> <!-- 类型别名 -->
<typeAliases> <typeAliases>
<package name="com.cpic.xim.mybatis.pojo" /> <package name="com.cpic.xim.mybatis.pojo" />
@@ -26,6 +31,8 @@
<mapper resource="mybatis/mapper/ArchievementMapper.xml" /> <mapper resource="mybatis/mapper/ArchievementMapper.xml" />
<mapper resource="mybatis/mapper/RankingListMapper.xml" /> <mapper resource="mybatis/mapper/RankingListMapper.xml" />
<mapper resource="mybatis/mapper/RewardsMapper.xml" /> <mapper resource="mybatis/mapper/RewardsMapper.xml" />
<mapper resource="mybatis/mapper/ImportBIArchievementDataMapper.xml" /> <mapper resource="mybatis/mapper/ImportBIArchievementDataMapper.xml" />
<mapper resource="mybatis/mapper/QueryBIArchievementDataMapper.xml" />
</mappers> </mappers>
</configuration> </configuration>