Compare commits
31 Commits
d3ca1f9004
...
feature-ra
Author | SHA1 | Date | |
---|---|---|---|
daa675b079 | |||
47c30a4ea1 | |||
157ab0d76e | |||
8c4293f374 | |||
f6ec7cbdfe | |||
59bc739cac | |||
30ea250264 | |||
a14f4b154f | |||
dfdde2f8d3 | |||
503a5bcdff | |||
05dfb0483c | |||
3eeaf68593 | |||
20924be00e | |||
0e1338e54b | |||
24266203ca | |||
88880962a9 | |||
e2ccf553aa | |||
5856909e92 | |||
1b368deb9c | |||
aa39cc4601 | |||
80e4b24e4f | |||
664c2335ca | |||
2f3e22fb3e | |||
f9392ea2eb | |||
8b23d4ad4a | |||
eeb01604b2 | |||
4eec8a9f18 | |||
6f65e18672 | |||
490e0e0e93 | |||
ec18d20461 | |||
425b7be1a7 |
1
.gitignore
vendored
1
.gitignore
vendored
@@ -78,6 +78,7 @@ build/Release
|
|||||||
|
|
||||||
# Dependency directories
|
# Dependency directories
|
||||||
node_modules/
|
node_modules/
|
||||||
|
node_modules_bak/
|
||||||
jspm_packages/
|
jspm_packages/
|
||||||
|
|
||||||
# Snowpack dependency directory (https://snowpack.dev/)
|
# Snowpack dependency directory (https://snowpack.dev/)
|
||||||
|
@@ -6,6 +6,10 @@ CREATE OR REPLACE PACKAGE telsale_archievement_pkg IS
|
|||||||
|
|
||||||
TYPE cur_type IS REF CURSOR;
|
TYPE cur_type IS REF CURSOR;
|
||||||
|
|
||||||
|
-- <20>쳣
|
||||||
|
DEPARTMENTCODE_EXCEPTION_CODE CONSTANT INTEGER := -20000;
|
||||||
|
DEPARTMENTCODE_EXCEPTION_MSG CONSTANT VARCHAR2(100) := '<27><><EFBFBD>Ŵ<EFBFBD><C5B4><EFBFBD><EFBFBD><EFBFBD>Ч';
|
||||||
|
|
||||||
PROCEDURE department_archievement
|
PROCEDURE department_archievement
|
||||||
(
|
(
|
||||||
a_department_code IN VARCHAR2,
|
a_department_code IN VARCHAR2,
|
||||||
@@ -17,8 +21,11 @@ CREATE OR REPLACE PACKAGE telsale_archievement_pkg IS
|
|||||||
|
|
||||||
PROCEDURE caller_arch_ranking_list
|
PROCEDURE caller_arch_ranking_list
|
||||||
(
|
(
|
||||||
a_department_code IN VARCHAR2,
|
a_department_code IN VARCHAR2,
|
||||||
a_chefei_ranking_list OUT cur_type
|
a_year IN VARCHAR2,
|
||||||
|
a_month IN VARCHAR2,
|
||||||
|
a_attaching_ranking_list OUT cur_type,
|
||||||
|
a_renewal_ranking_list OUT cur_type
|
||||||
);
|
);
|
||||||
|
|
||||||
END telsale_archievement_pkg;
|
END telsale_archievement_pkg;
|
||||||
@@ -46,11 +53,19 @@ CREATE OR REPLACE PACKAGE BODY telsale_archievement_pkg IS
|
|||||||
l_firstday := to_date(to_char(SYSDATE,
|
l_firstday := 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');
|
||||||
-- ȡ<>ò<EFBFBD><EFBFBD>Ŵ<EFBFBD><EFBFBD><EFBFBD>
|
-- <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
SELECT bm.department_name
|
BEGIN
|
||||||
INTO l_department_name
|
SELECT department_name
|
||||||
FROM idst0.bm_t bm
|
INTO l_department_name
|
||||||
WHERE bm.department_code = a_department_code;
|
FROM idst0.bm_t bm
|
||||||
|
WHERE bm.department_code = a_department_code;
|
||||||
|
EXCEPTION
|
||||||
|
-- <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD>˵<EFBFBD><CBB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>׳<EFBFBD><D7B3>쳣
|
||||||
|
WHEN NO_DATA_FOUND THEN
|
||||||
|
raise_application_error(DEPARTMENTCODE_EXCEPTION_CODE,
|
||||||
|
DEPARTMENTCODE_EXCEPTION_MSG);
|
||||||
|
|
||||||
|
END;
|
||||||
|
|
||||||
--<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><CDB8>
|
--<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><CDB8>
|
||||||
SELECT decode(SUM(cf.<2E><><EFBFBD>ո<EFBFBD><D5B8>˿ͻ<CBBF><CDBB><EFBFBD><EFBFBD><EFBFBD>),
|
SELECT decode(SUM(cf.<2E><><EFBFBD>ո<EFBFBD><D5B8>˿ͻ<CBBF><CDBB><EFBFBD><EFBFBD><EFBFBD>),
|
||||||
@@ -102,32 +117,56 @@ CREATE OR REPLACE PACKAGE BODY telsale_archievement_pkg IS
|
|||||||
ORDER BY cf.<2E>·<EFBFBD>;
|
ORDER BY cf.<2E>·<EFBFBD>;
|
||||||
END;
|
END;
|
||||||
|
|
||||||
|
/*******************************************************/
|
||||||
|
-- <20><>ϯ<EFBFBD><CFAF><EFBFBD>а<EFBFBD>
|
||||||
PROCEDURE caller_arch_ranking_list
|
PROCEDURE caller_arch_ranking_list
|
||||||
(
|
(
|
||||||
a_department_code IN VARCHAR2,
|
a_department_code IN VARCHAR2,
|
||||||
a_chefei_ranking_list OUT cur_type
|
a_year IN VARCHAR2,
|
||||||
|
a_month IN VARCHAR2,
|
||||||
|
a_attaching_ranking_list OUT cur_type,
|
||||||
|
a_renewal_ranking_list OUT cur_type
|
||||||
) IS
|
) IS
|
||||||
l_current_month VARCHAR2(10);
|
l_department_name VARCHAR2(100);
|
||||||
l_current_year VARCHAR2(4);
|
|
||||||
BEGIN
|
BEGIN
|
||||||
l_current_month := to_char(SYSDATE,
|
-- <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
'mm');
|
BEGIN
|
||||||
l_current_year := to_char(SYSDATE,
|
SELECT department_name
|
||||||
'yyyy');
|
INTO l_department_name
|
||||||
|
FROM idst0.bm_t bm
|
||||||
|
WHERE bm.department_code = a_department_code;
|
||||||
|
EXCEPTION
|
||||||
|
-- <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD>˵<EFBFBD><CBB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>׳<EFBFBD><D7B3>쳣
|
||||||
|
WHEN NO_DATA_FOUND THEN
|
||||||
|
raise_application_error(DEPARTMENTCODE_EXCEPTION_CODE,
|
||||||
|
DEPARTMENTCODE_EXCEPTION_MSG);
|
||||||
|
|
||||||
|
END;
|
||||||
|
|
||||||
OPEN a_chefei_ranking_list FOR
|
-- <20><><EFBFBD><EFBFBD><EFBFBD>ں<EFBFBD><DABA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>а<EFBFBD>
|
||||||
|
OPEN a_attaching_ranking_list FOR
|
||||||
SELECT <20><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD>,
|
SELECT <20><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD>,
|
||||||
round(SUM(<28><><EFBFBD><EFBFBD><EFBFBD>ںϱ<DABA><CFB1><EFBFBD>) / SUM(<28><><EFBFBD>ո<EFBFBD><D5B8>˿ͻ<CBBF><CDBB><EFBFBD><EFBFBD><EFBFBD>) * 100,
|
round(nvl(SUM(<28><><EFBFBD><EFBFBD><EFBFBD>ںϱ<DABA><CFB1><EFBFBD>) / SUM(<28><><EFBFBD>ո<EFBFBD><D5B8>˿ͻ<CBBF><CDBB><EFBFBD><EFBFBD><EFBFBD>),
|
||||||
|
0) * 100,
|
||||||
2) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><CDB8>
|
2) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><CDB8>
|
||||||
FROM <20><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD>ÿ<EFBFBD>ձ<EFBFBD><D5B1><EFBFBD>
|
FROM <20><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD>ÿ<EFBFBD>ձ<EFBFBD><D5B1><EFBFBD>
|
||||||
WHERE <20>·<EFBFBD> = l_current_month
|
WHERE <20>·<EFBFBD> = a_month
|
||||||
AND <20><><EFBFBD><EFBFBD> = l_current_year
|
AND <20><><EFBFBD><EFBFBD> = a_year
|
||||||
AND <20><><EFBFBD>Ŵ<EFBFBD><C5B4><EFBFBD> = a_department_code
|
AND <20><><EFBFBD>Ŵ<EFBFBD><C5B4><EFBFBD> = a_department_code
|
||||||
GROUP BY <20>·<EFBFBD>,
|
GROUP BY <20><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
<20><><EFBFBD>Ŵ<EFBFBD><C5B4><EFBFBD>,
|
|
||||||
<20><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD>
|
|
||||||
--HAVING <20>·<EFBFBD> = '06<30><36>'
|
--HAVING <20>·<EFBFBD> = '06<30><36>'
|
||||||
ORDER BY <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><CDB8> DESC;
|
ORDER BY <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><CDB8> DESC;
|
||||||
|
|
||||||
|
-- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>а<EFBFBD>
|
||||||
|
OPEN a_renewal_ranking_list FOR
|
||||||
|
SELECT <20><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD>,
|
||||||
|
round(nvl((SUM(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ۼ<EFBFBD>) / SUM(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)) * 100,
|
||||||
|
0),
|
||||||
|
2) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
FROM <20><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD>ͳ<EFBFBD><CDB3> xb
|
||||||
|
WHERE xb.<2E><><EFBFBD><EFBFBD> = l_department_name
|
||||||
|
GROUP BY <20><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD>
|
||||||
|
ORDER BY <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DESC;
|
||||||
END;
|
END;
|
||||||
|
|
||||||
BEGIN
|
BEGIN
|
||||||
|
@@ -61,10 +61,17 @@ 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> = '06<EFBFBD><EFBFBD>'
|
AND <EFBFBD>·<EFBFBD> = '05'
|
||||||
|
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;
|
||||||
|
|
||||||
--<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
--<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
SELECT *
|
SELECT <EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
|
||||||
FROM <EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͳ<EFBFBD><EFBFBD>
|
round(nvl(SUM(<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ۼ<EFBFBD>) / SUM(<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) * 100,
|
||||||
|
0),
|
||||||
|
2) <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
FROM <EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͳ<EFBFBD><EFBFBD> xb
|
||||||
|
WHERE xb.<EFBFBD><EFBFBD><EFBFBD><EFBFBD> = '<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
|
||||||
|
GROUP BY <EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
ORDER BY <EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> DESC;
|
||||||
|
203
code/web/task_schedule/package-lock.json
generated
203
code/web/task_schedule/package-lock.json
generated
@@ -8,32 +8,32 @@
|
|||||||
"name": "task_schedule",
|
"name": "task_schedule",
|
||||||
"version": "0.0.0",
|
"version": "0.0.0",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/eslint-parser": "^7.21.8",
|
"@babel/eslint-parser": "^7.22.7",
|
||||||
"@element-plus/icons-vue": "^2.1.0",
|
"@element-plus/icons-vue": "^2.1.0",
|
||||||
"axios": "^1.4.0",
|
"axios": "^1.4.0",
|
||||||
"babel": "^6.23.0",
|
"babel": "^6.23.0",
|
||||||
"echarts": "^5.4.2",
|
"echarts": "^5.4.2",
|
||||||
"element-plus": "^2.3.5",
|
"element-plus": "^2.3.7",
|
||||||
"moment": "^2.29.4",
|
"moment": "^2.29.4",
|
||||||
"sass-loader": "^13.3.1",
|
"sass-loader": "^13.3.2",
|
||||||
"vue": "^3.3.4",
|
"vue": "^3.3.4",
|
||||||
"vue-router": "^4.2.1",
|
"vue-router": "^4.2.4",
|
||||||
"vuex": "^4.1.0"
|
"vuex": "^4.1.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@babel/eslint-parser": "^7.21.8",
|
"@babel/eslint-parser": "^7.22.7",
|
||||||
"@typescript-eslint/eslint-plugin": "^5.59.7",
|
"@typescript-eslint/eslint-plugin": "^5.61.0",
|
||||||
"@typescript-eslint/parser": "^5.59.7",
|
"@typescript-eslint/parser": "^5.61.0",
|
||||||
"@vitejs/plugin-vue": "^4.2.3",
|
"@vitejs/plugin-vue": "^4.2.3",
|
||||||
"@vue/cli-plugin-eslint": "^5.0.8",
|
"@vue/cli-plugin-eslint": "^5.0.8",
|
||||||
"eslint-config-recommended": "^4.1.0",
|
"eslint-config-recommended": "^4.1.0",
|
||||||
"eslint-config-standard-with-typescript": "^34.0.1",
|
"eslint-config-standard-with-typescript": "^36.0.0",
|
||||||
"eslint-plugin-vue": "^9.14.1",
|
"eslint-plugin-vue": "^9.15.1",
|
||||||
"node-sass": "^9.0.0",
|
"node-sass": "^9.0.0",
|
||||||
"sass": "^1.62.1",
|
"sass": "^1.63.6",
|
||||||
"style-loader": "^3.3.3",
|
"style-loader": "^3.3.3",
|
||||||
"typescript": "^5.0.4",
|
"typescript": "^5.1.6",
|
||||||
"vue-eslint-parser": "^9.3.0"
|
"vue-eslint-parser": "^9.3.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@achrinza/node-ipc": {
|
"node_modules/@achrinza/node-ipc": {
|
||||||
@@ -114,14 +114,14 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@babel/eslint-parser": {
|
"node_modules/@babel/eslint-parser": {
|
||||||
"version": "7.21.8",
|
"version": "7.22.7",
|
||||||
"resolved": "https://registry.npmmirror.com/@babel/eslint-parser/-/eslint-parser-7.21.8.tgz",
|
"resolved": "https://registry.npmmirror.com/@babel/eslint-parser/-/eslint-parser-7.22.7.tgz",
|
||||||
"integrity": "sha512-HLhI+2q+BP3sf78mFUZNCGc10KEmoUqtUT1OCdMZsN+qr4qFeLUod62/zAnF3jNQstwyasDkZnVXwfK2Bml7MQ==",
|
"integrity": "sha512-LH6HJqjOyu/Qtp7LuSycZXK/CYXQ4ohdkliEaL1QTdtOXVdOVpTBKVxAo/+eeyt+x/2SRzB+zUPduVl+xiEvdg==",
|
||||||
"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",
|
||||||
"eslint-visitor-keys": "^2.1.0",
|
"@nicolo-ribaudo/semver-v6": "^6.3.3",
|
||||||
"semver": "^6.3.0"
|
"eslint-visitor-keys": "^2.1.0"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": "^10.13.0 || ^12.13.0 || >=14.0.0"
|
"node": "^10.13.0 || ^12.13.0 || >=14.0.0"
|
||||||
@@ -1024,6 +1024,15 @@
|
|||||||
"eslint-scope": "5.1.1"
|
"eslint-scope": "5.1.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/@nicolo-ribaudo/semver-v6": {
|
||||||
|
"version": "6.3.3",
|
||||||
|
"resolved": "https://registry.npmmirror.com/@nicolo-ribaudo/semver-v6/-/semver-v6-6.3.3.tgz",
|
||||||
|
"integrity": "sha512-3Yc1fUTs69MG/uZbJlLSI3JISMn2UV2rg+1D/vROUqZyh3l6iYHCs7GMp+M40ZD7yOdDbYjJcU1oTJhrc+dGKg==",
|
||||||
|
"dev": true,
|
||||||
|
"bin": {
|
||||||
|
"semver": "bin/semver.js"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/@node-ipc/js-queue": {
|
"node_modules/@node-ipc/js-queue": {
|
||||||
"version": "2.0.3",
|
"version": "2.0.3",
|
||||||
"resolved": "https://registry.npmmirror.com/@node-ipc/js-queue/-/js-queue-2.0.3.tgz",
|
"resolved": "https://registry.npmmirror.com/@node-ipc/js-queue/-/js-queue-2.0.3.tgz",
|
||||||
@@ -1528,17 +1537,17 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@typescript-eslint/eslint-plugin": {
|
"node_modules/@typescript-eslint/eslint-plugin": {
|
||||||
"version": "5.59.7",
|
"version": "5.61.0",
|
||||||
"resolved": "https://registry.npmmirror.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.59.7.tgz",
|
"resolved": "https://registry.npmmirror.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.61.0.tgz",
|
||||||
"integrity": "sha512-BL+jYxUFIbuYwy+4fF86k5vdT9lT0CNJ6HtwrIvGh0PhH8s0yy5rjaKH2fDCrz5ITHy07WCzVGNvAmjJh4IJFA==",
|
"integrity": "sha512-A5l/eUAug103qtkwccSCxn8ZRwT+7RXWkFECdA4Cvl1dOlDUgTpAOfSEElZn2uSUxhdDpnCdetrf0jvU4qrL+g==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@eslint-community/regexpp": "^4.4.0",
|
"@eslint-community/regexpp": "^4.4.0",
|
||||||
"@typescript-eslint/scope-manager": "5.59.7",
|
"@typescript-eslint/scope-manager": "5.61.0",
|
||||||
"@typescript-eslint/type-utils": "5.59.7",
|
"@typescript-eslint/type-utils": "5.61.0",
|
||||||
"@typescript-eslint/utils": "5.59.7",
|
"@typescript-eslint/utils": "5.61.0",
|
||||||
"debug": "^4.3.4",
|
"debug": "^4.3.4",
|
||||||
"grapheme-splitter": "^1.0.4",
|
"graphemer": "^1.4.0",
|
||||||
"ignore": "^5.2.0",
|
"ignore": "^5.2.0",
|
||||||
"natural-compare-lite": "^1.4.0",
|
"natural-compare-lite": "^1.4.0",
|
||||||
"semver": "^7.3.7",
|
"semver": "^7.3.7",
|
||||||
@@ -1591,14 +1600,14 @@
|
|||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"node_modules/@typescript-eslint/parser": {
|
"node_modules/@typescript-eslint/parser": {
|
||||||
"version": "5.59.7",
|
"version": "5.61.0",
|
||||||
"resolved": "https://registry.npmmirror.com/@typescript-eslint/parser/-/parser-5.59.7.tgz",
|
"resolved": "https://registry.npmmirror.com/@typescript-eslint/parser/-/parser-5.61.0.tgz",
|
||||||
"integrity": "sha512-VhpsIEuq/8i5SF+mPg9jSdIwgMBBp0z9XqjiEay+81PYLJuroN+ET1hM5IhkiYMJd9MkTz8iJLt7aaGAgzWUbQ==",
|
"integrity": "sha512-yGr4Sgyh8uO6fSi9hw3jAFXNBHbCtKKFMdX2IkT3ZqpKmtAq3lHS4ixB/COFuAIJpwl9/AqF7j72ZDWYKmIfvg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@typescript-eslint/scope-manager": "5.59.7",
|
"@typescript-eslint/scope-manager": "5.61.0",
|
||||||
"@typescript-eslint/types": "5.59.7",
|
"@typescript-eslint/types": "5.61.0",
|
||||||
"@typescript-eslint/typescript-estree": "5.59.7",
|
"@typescript-eslint/typescript-estree": "5.61.0",
|
||||||
"debug": "^4.3.4"
|
"debug": "^4.3.4"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
@@ -1614,26 +1623,26 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@typescript-eslint/scope-manager": {
|
"node_modules/@typescript-eslint/scope-manager": {
|
||||||
"version": "5.59.7",
|
"version": "5.61.0",
|
||||||
"resolved": "https://registry.npmmirror.com/@typescript-eslint/scope-manager/-/scope-manager-5.59.7.tgz",
|
"resolved": "https://registry.npmmirror.com/@typescript-eslint/scope-manager/-/scope-manager-5.61.0.tgz",
|
||||||
"integrity": "sha512-FL6hkYWK9zBGdxT2wWEd2W8ocXMu3K94i3gvMrjXpx+koFYdYV7KprKfirpgY34vTGzEPPuKoERpP8kD5h7vZQ==",
|
"integrity": "sha512-W8VoMjoSg7f7nqAROEmTt6LoBpn81AegP7uKhhW5KzYlehs8VV0ZW0fIDVbcZRcaP3aPSW+JZFua+ysQN+m/Nw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@typescript-eslint/types": "5.59.7",
|
"@typescript-eslint/types": "5.61.0",
|
||||||
"@typescript-eslint/visitor-keys": "5.59.7"
|
"@typescript-eslint/visitor-keys": "5.61.0"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
|
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@typescript-eslint/type-utils": {
|
"node_modules/@typescript-eslint/type-utils": {
|
||||||
"version": "5.59.7",
|
"version": "5.61.0",
|
||||||
"resolved": "https://registry.npmmirror.com/@typescript-eslint/type-utils/-/type-utils-5.59.7.tgz",
|
"resolved": "https://registry.npmmirror.com/@typescript-eslint/type-utils/-/type-utils-5.61.0.tgz",
|
||||||
"integrity": "sha512-ozuz/GILuYG7osdY5O5yg0QxXUAEoI4Go3Do5xeu+ERH9PorHBPSdvD3Tjp2NN2bNLh1NJQSsQu2TPu/Ly+HaQ==",
|
"integrity": "sha512-kk8u//r+oVK2Aj3ph/26XdH0pbAkC2RiSjUYhKD+PExemG4XSjpGFeyZ/QM8lBOa7O8aGOU+/yEbMJgQv/DnCg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@typescript-eslint/typescript-estree": "5.59.7",
|
"@typescript-eslint/typescript-estree": "5.61.0",
|
||||||
"@typescript-eslint/utils": "5.59.7",
|
"@typescript-eslint/utils": "5.61.0",
|
||||||
"debug": "^4.3.4",
|
"debug": "^4.3.4",
|
||||||
"tsutils": "^3.21.0"
|
"tsutils": "^3.21.0"
|
||||||
},
|
},
|
||||||
@@ -1650,22 +1659,22 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@typescript-eslint/types": {
|
"node_modules/@typescript-eslint/types": {
|
||||||
"version": "5.59.7",
|
"version": "5.61.0",
|
||||||
"resolved": "https://registry.npmmirror.com/@typescript-eslint/types/-/types-5.59.7.tgz",
|
"resolved": "https://registry.npmmirror.com/@typescript-eslint/types/-/types-5.61.0.tgz",
|
||||||
"integrity": "sha512-UnVS2MRRg6p7xOSATscWkKjlf/NDKuqo5TdbWck6rIRZbmKpVNTLALzNvcjIfHBE7736kZOFc/4Z3VcZwuOM/A==",
|
"integrity": "sha512-ldyueo58KjngXpzloHUog/h9REmHl59G1b3a5Sng1GfBo14BkS3ZbMEb3693gnP1k//97lh7bKsp6/V/0v1veQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
|
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@typescript-eslint/typescript-estree": {
|
"node_modules/@typescript-eslint/typescript-estree": {
|
||||||
"version": "5.59.7",
|
"version": "5.61.0",
|
||||||
"resolved": "https://registry.npmmirror.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.7.tgz",
|
"resolved": "https://registry.npmmirror.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.61.0.tgz",
|
||||||
"integrity": "sha512-4A1NtZ1I3wMN2UGDkU9HMBL+TIQfbrh4uS0WDMMpf3xMRursDbqEf1ahh6vAAe3mObt8k3ZATnezwG4pdtWuUQ==",
|
"integrity": "sha512-Fud90PxONnnLZ36oR5ClJBLTLfU4pIWBmnvGwTbEa2cXIqj70AEDEmOmpkFComjBZ/037ueKrOdHuYmSFVD7Rw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@typescript-eslint/types": "5.59.7",
|
"@typescript-eslint/types": "5.61.0",
|
||||||
"@typescript-eslint/visitor-keys": "5.59.7",
|
"@typescript-eslint/visitor-keys": "5.61.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",
|
||||||
@@ -1694,9 +1703,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@typescript-eslint/typescript-estree/node_modules/semver": {
|
"node_modules/@typescript-eslint/typescript-estree/node_modules/semver": {
|
||||||
"version": "7.5.1",
|
"version": "7.5.3",
|
||||||
"resolved": "https://registry.npmmirror.com/semver/-/semver-7.5.1.tgz",
|
"resolved": "https://registry.npmmirror.com/semver/-/semver-7.5.3.tgz",
|
||||||
"integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==",
|
"integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"lru-cache": "^6.0.0"
|
"lru-cache": "^6.0.0"
|
||||||
@@ -1715,17 +1724,17 @@
|
|||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"node_modules/@typescript-eslint/utils": {
|
"node_modules/@typescript-eslint/utils": {
|
||||||
"version": "5.59.7",
|
"version": "5.61.0",
|
||||||
"resolved": "https://registry.npmmirror.com/@typescript-eslint/utils/-/utils-5.59.7.tgz",
|
"resolved": "https://registry.npmmirror.com/@typescript-eslint/utils/-/utils-5.61.0.tgz",
|
||||||
"integrity": "sha512-yCX9WpdQKaLufz5luG4aJbOpdXf/fjwGMcLFXZVPUz3QqLirG5QcwwnIHNf8cjLjxK4qtzTO8udUtMQSAToQnQ==",
|
"integrity": "sha512-mV6O+6VgQmVE6+xzlA91xifndPW9ElFW8vbSF0xCT/czPXVhwDewKila1jOyRwa9AE19zKnrr7Cg5S3pJVrTWQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@eslint-community/eslint-utils": "^4.2.0",
|
"@eslint-community/eslint-utils": "^4.2.0",
|
||||||
"@types/json-schema": "^7.0.9",
|
"@types/json-schema": "^7.0.9",
|
||||||
"@types/semver": "^7.3.12",
|
"@types/semver": "^7.3.12",
|
||||||
"@typescript-eslint/scope-manager": "5.59.7",
|
"@typescript-eslint/scope-manager": "5.61.0",
|
||||||
"@typescript-eslint/types": "5.59.7",
|
"@typescript-eslint/types": "5.61.0",
|
||||||
"@typescript-eslint/typescript-estree": "5.59.7",
|
"@typescript-eslint/typescript-estree": "5.61.0",
|
||||||
"eslint-scope": "^5.1.1",
|
"eslint-scope": "^5.1.1",
|
||||||
"semver": "^7.3.7"
|
"semver": "^7.3.7"
|
||||||
},
|
},
|
||||||
@@ -1749,9 +1758,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@typescript-eslint/utils/node_modules/semver": {
|
"node_modules/@typescript-eslint/utils/node_modules/semver": {
|
||||||
"version": "7.5.1",
|
"version": "7.5.3",
|
||||||
"resolved": "https://registry.npmmirror.com/semver/-/semver-7.5.1.tgz",
|
"resolved": "https://registry.npmmirror.com/semver/-/semver-7.5.3.tgz",
|
||||||
"integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==",
|
"integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"lru-cache": "^6.0.0"
|
"lru-cache": "^6.0.0"
|
||||||
@@ -1770,12 +1779,12 @@
|
|||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"node_modules/@typescript-eslint/visitor-keys": {
|
"node_modules/@typescript-eslint/visitor-keys": {
|
||||||
"version": "5.59.7",
|
"version": "5.61.0",
|
||||||
"resolved": "https://registry.npmmirror.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.7.tgz",
|
"resolved": "https://registry.npmmirror.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.61.0.tgz",
|
||||||
"integrity": "sha512-tyN+X2jvMslUszIiYbF0ZleP+RqQsFVpGrKI6e0Eet1w8WmhsAtmzaqm8oM8WJQ1ysLwhnsK/4hYHJjOgJVfQQ==",
|
"integrity": "sha512-50XQ5VdbWrX06mQXhy93WywSFZZGsv3EOjq+lqp6WC2t+j3mb6A9xYVdrRxafvK88vg9k9u+CT4l6D8PEatjKg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@typescript-eslint/types": "5.59.7",
|
"@typescript-eslint/types": "5.61.0",
|
||||||
"eslint-visitor-keys": "^3.3.0"
|
"eslint-visitor-keys": "^3.3.0"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
@@ -4589,9 +4598,9 @@
|
|||||||
"integrity": "sha512-zx8hqumOqltKsv/MF50yvdAlPF9S/4PXbyfzJS6ZGhbddGkRegdwImmfSVqCkEziYzrIGZ/TlrzBND4FysfkDg=="
|
"integrity": "sha512-zx8hqumOqltKsv/MF50yvdAlPF9S/4PXbyfzJS6ZGhbddGkRegdwImmfSVqCkEziYzrIGZ/TlrzBND4FysfkDg=="
|
||||||
},
|
},
|
||||||
"node_modules/element-plus": {
|
"node_modules/element-plus": {
|
||||||
"version": "2.3.5",
|
"version": "2.3.7",
|
||||||
"resolved": "https://registry.npmmirror.com/element-plus/-/element-plus-2.3.5.tgz",
|
"resolved": "https://registry.npmmirror.com/element-plus/-/element-plus-2.3.7.tgz",
|
||||||
"integrity": "sha512-g27DHm2C5/tPwte9H6Juu+JOdzT9z1ALHTIvia6MwnBdCrI4kd77o6KcYdodU15/tYiPBoCEmobhl/7GUDb+1Q==",
|
"integrity": "sha512-h6TxclbaLUJxg/Bv5j/ZKsK+K5yadQliw5+R30HWyE69pXlqXTX24oYx+yw3pA4Dy+lqEDi5501FQ0CORk3OSA==",
|
||||||
"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",
|
||||||
@@ -6425,16 +6434,16 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/eslint-config-standard-with-typescript": {
|
"node_modules/eslint-config-standard-with-typescript": {
|
||||||
"version": "34.0.1",
|
"version": "36.0.0",
|
||||||
"resolved": "https://registry.npmmirror.com/eslint-config-standard-with-typescript/-/eslint-config-standard-with-typescript-34.0.1.tgz",
|
"resolved": "https://registry.npmmirror.com/eslint-config-standard-with-typescript/-/eslint-config-standard-with-typescript-36.0.0.tgz",
|
||||||
"integrity": "sha512-J7WvZeLtd0Vr9F+v4dZbqJCLD16cbIy4U+alJMq4MiXdpipdBM3U5NkXaGUjePc4sb1ZE01U9g6VuTBpHHz1fg==",
|
"integrity": "sha512-8ZSEskfrDAkUF2lTQLMT0CBzgRNlx1uIM7l2I7L683dKAXUdHuEL2x+GxuGAsdsoWbx7W7Zv0xF67VCEZXIk0Q==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@typescript-eslint/parser": "^5.43.0",
|
"@typescript-eslint/parser": "^5.50.0",
|
||||||
"eslint-config-standard": "17.0.0"
|
"eslint-config-standard": "17.0.0"
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"@typescript-eslint/eslint-plugin": "^5.43.0",
|
"@typescript-eslint/eslint-plugin": "^5.50.0",
|
||||||
"eslint": "^8.0.1",
|
"eslint": "^8.0.1",
|
||||||
"eslint-plugin-import": "^2.25.2",
|
"eslint-plugin-import": "^2.25.2",
|
||||||
"eslint-plugin-n": "^15.0.0",
|
"eslint-plugin-n": "^15.0.0",
|
||||||
@@ -6727,9 +6736,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/eslint-plugin-vue": {
|
"node_modules/eslint-plugin-vue": {
|
||||||
"version": "9.14.1",
|
"version": "9.15.1",
|
||||||
"resolved": "https://registry.npmmirror.com/eslint-plugin-vue/-/eslint-plugin-vue-9.14.1.tgz",
|
"resolved": "https://registry.npmmirror.com/eslint-plugin-vue/-/eslint-plugin-vue-9.15.1.tgz",
|
||||||
"integrity": "sha512-LQazDB1qkNEKejLe/b5a9VfEbtbczcOaui5lQ4Qw0tbRBbQYREyxxOV5BQgNDTqGPs9pxqiEpbMi9ywuIaF7vw==",
|
"integrity": "sha512-CJE/oZOslvmAR9hf8SClTdQ9JLweghT6JCBQNrT2Iel1uVw0W0OLJxzvPd6CxmABKCvLrtyDnqGV37O7KQv6+A==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@eslint-community/eslint-utils": "^4.3.0",
|
"@eslint-community/eslint-utils": "^4.3.0",
|
||||||
@@ -7895,18 +7904,11 @@
|
|||||||
"resolved": "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.11.tgz",
|
"resolved": "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.11.tgz",
|
||||||
"integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="
|
"integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="
|
||||||
},
|
},
|
||||||
"node_modules/grapheme-splitter": {
|
|
||||||
"version": "1.0.4",
|
|
||||||
"resolved": "https://registry.npmmirror.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz",
|
|
||||||
"integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"node_modules/graphemer": {
|
"node_modules/graphemer": {
|
||||||
"version": "1.4.0",
|
"version": "1.4.0",
|
||||||
"resolved": "https://registry.npmmirror.com/graphemer/-/graphemer-1.4.0.tgz",
|
"resolved": "https://registry.npmmirror.com/graphemer/-/graphemer-1.4.0.tgz",
|
||||||
"integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
|
"integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
|
||||||
"dev": true,
|
"dev": true
|
||||||
"peer": true
|
|
||||||
},
|
},
|
||||||
"node_modules/gzip-size": {
|
"node_modules/gzip-size": {
|
||||||
"version": "6.0.0",
|
"version": "6.0.0",
|
||||||
@@ -9042,6 +9044,8 @@
|
|||||||
"version": "2.0.6",
|
"version": "2.0.6",
|
||||||
"resolved": "https://registry.npmmirror.com/klona/-/klona-2.0.6.tgz",
|
"resolved": "https://registry.npmmirror.com/klona/-/klona-2.0.6.tgz",
|
||||||
"integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==",
|
"integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==",
|
||||||
|
"dev": true,
|
||||||
|
"peer": true,
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">= 8"
|
"node": ">= 8"
|
||||||
}
|
}
|
||||||
@@ -12242,9 +12246,9 @@
|
|||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"node_modules/sass": {
|
"node_modules/sass": {
|
||||||
"version": "1.62.1",
|
"version": "1.63.6",
|
||||||
"resolved": "https://registry.npmmirror.com/sass/-/sass-1.62.1.tgz",
|
"resolved": "https://registry.npmmirror.com/sass/-/sass-1.63.6.tgz",
|
||||||
"integrity": "sha512-NHpxIzN29MXvWiuswfc1W3I0N8SXBd8UR26WntmDlRYf0bSADnwnOjsyMZ3lMezSlArD33Vs3YFhp7dWvL770A==",
|
"integrity": "sha512-MJuxGMHzaOW7ipp+1KdELtqKbfAWbH7OLIdoSMnVe3EXPMTmxTmlaZDCTsgIpPCs3w99lLo9/zDKkOrJuT5byw==",
|
||||||
"devOptional": true,
|
"devOptional": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"chokidar": ">=3.0.0 <4.0.0",
|
"chokidar": ">=3.0.0 <4.0.0",
|
||||||
@@ -12318,11 +12322,10 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/sass-loader": {
|
"node_modules/sass-loader": {
|
||||||
"version": "13.3.1",
|
"version": "13.3.2",
|
||||||
"resolved": "https://registry.npmmirror.com/sass-loader/-/sass-loader-13.3.1.tgz",
|
"resolved": "https://registry.npmmirror.com/sass-loader/-/sass-loader-13.3.2.tgz",
|
||||||
"integrity": "sha512-cBTxmgyVA1nXPvIK4brjJMXOMJ2v2YrQEuHqLw3LylGb3gsR6jAvdjHMcy/+JGTmmIF9SauTrLLR7bsWDMWqgg==",
|
"integrity": "sha512-CQbKl57kdEv+KDLquhC+gE3pXt74LEAzm+tzywcA0/aHZuub8wTErbjAoNI57rPUWRYRNC5WUnNl8eGJNbDdwg==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"klona": "^2.0.6",
|
|
||||||
"neo-async": "^2.6.2"
|
"neo-async": "^2.6.2"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
@@ -13540,16 +13543,16 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/typescript": {
|
"node_modules/typescript": {
|
||||||
"version": "5.0.4",
|
"version": "5.1.6",
|
||||||
"resolved": "https://registry.npmmirror.com/typescript/-/typescript-5.0.4.tgz",
|
"resolved": "https://registry.npmmirror.com/typescript/-/typescript-5.1.6.tgz",
|
||||||
"integrity": "sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==",
|
"integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"bin": {
|
"bin": {
|
||||||
"tsc": "bin/tsc",
|
"tsc": "bin/tsc",
|
||||||
"tsserver": "bin/tsserver"
|
"tsserver": "bin/tsserver"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=12.20"
|
"node": ">=14.17"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/unbox-primitive": {
|
"node_modules/unbox-primitive": {
|
||||||
@@ -13752,9 +13755,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/vue-eslint-parser": {
|
"node_modules/vue-eslint-parser": {
|
||||||
"version": "9.3.0",
|
"version": "9.3.1",
|
||||||
"resolved": "https://registry.npmmirror.com/vue-eslint-parser/-/vue-eslint-parser-9.3.0.tgz",
|
"resolved": "https://registry.npmmirror.com/vue-eslint-parser/-/vue-eslint-parser-9.3.1.tgz",
|
||||||
"integrity": "sha512-48IxT9d0+wArT1+3wNIy0tascRoywqSUe2E1YalIC1L8jsUGe5aJQItWfRok7DVFGz3UYvzEI7n5wiTXsCMAcQ==",
|
"integrity": "sha512-Clr85iD2XFZ3lJ52/ppmUDG/spxQu6+MAeHXjjyI4I1NUYZ9xmenQp4N0oaHJhrA8OOxltCVxMRfANGa70vU0g==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"debug": "^4.3.4",
|
"debug": "^4.3.4",
|
||||||
@@ -13943,9 +13946,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/vue-router": {
|
"node_modules/vue-router": {
|
||||||
"version": "4.2.1",
|
"version": "4.2.4",
|
||||||
"resolved": "https://registry.npmmirror.com/vue-router/-/vue-router-4.2.1.tgz",
|
"resolved": "https://registry.npmmirror.com/vue-router/-/vue-router-4.2.4.tgz",
|
||||||
"integrity": "sha512-nW28EeifEp8Abc5AfmAShy5ZKGsGzjcnZ3L1yc2DYUo+MqbBClrRP9yda3dIekM4I50/KnEwo1wkBLf7kHH5Cw==",
|
"integrity": "sha512-9PISkmaCO02OzPVOMq2w82ilty6+xJmQrarYZDkjZBfl4RvYAlt4PKnEX21oW4KTtWfa9OuO/b3qk1Od3AEdCQ==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@vue/devtools-api": "^6.5.0"
|
"@vue/devtools-api": "^6.5.0"
|
||||||
},
|
},
|
||||||
|
@@ -9,31 +9,31 @@
|
|||||||
"preview": "vite preview"
|
"preview": "vite preview"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/eslint-parser": "^7.21.8",
|
"@babel/eslint-parser": "^7.22.7",
|
||||||
"@element-plus/icons-vue": "^2.1.0",
|
"@element-plus/icons-vue": "^2.1.0",
|
||||||
"axios": "^1.4.0",
|
"axios": "^1.4.0",
|
||||||
"babel": "^6.23.0",
|
"babel": "^6.23.0",
|
||||||
"echarts": "^5.4.2",
|
"echarts": "^5.4.2",
|
||||||
"element-plus": "^2.3.5",
|
"element-plus": "^2.3.7",
|
||||||
"moment": "^2.29.4",
|
"moment": "^2.29.4",
|
||||||
"sass-loader": "^13.3.1",
|
"sass-loader": "^13.3.2",
|
||||||
"vue": "^3.3.4",
|
"vue": "^3.3.4",
|
||||||
"vue-router": "^4.2.1",
|
"vue-router": "^4.2.4",
|
||||||
"vuex": "^4.1.0"
|
"vuex": "^4.1.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@babel/eslint-parser": "^7.21.8",
|
"@babel/eslint-parser": "^7.22.7",
|
||||||
"@typescript-eslint/eslint-plugin": "^5.59.7",
|
"@typescript-eslint/eslint-plugin": "^5.61.0",
|
||||||
"@typescript-eslint/parser": "^5.59.7",
|
"@typescript-eslint/parser": "^5.61.0",
|
||||||
"@vitejs/plugin-vue": "^4.2.3",
|
"@vitejs/plugin-vue": "^4.2.3",
|
||||||
"@vue/cli-plugin-eslint": "^5.0.8",
|
"@vue/cli-plugin-eslint": "^5.0.8",
|
||||||
"eslint-config-recommended": "^4.1.0",
|
"eslint-config-recommended": "^4.1.0",
|
||||||
"eslint-config-standard-with-typescript": "^34.0.1",
|
"eslint-config-standard-with-typescript": "^36.0.0",
|
||||||
"eslint-plugin-vue": "^9.14.1",
|
"eslint-plugin-vue": "^9.15.1",
|
||||||
"node-sass": "^9.0.0",
|
"node-sass": "^9.0.0",
|
||||||
"sass": "^1.62.1",
|
"sass": "^1.63.6",
|
||||||
"style-loader": "^3.3.3",
|
"style-loader": "^3.3.3",
|
||||||
"typescript": "^5.0.4",
|
"typescript": "^5.1.6",
|
||||||
"vue-eslint-parser": "^9.3.0"
|
"vue-eslint-parser": "^9.3.1"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
56
code/web/task_schedule/src/assets/css/public/_public.scss
Normal file
56
code/web/task_schedule/src/assets/css/public/_public.scss
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
/*
|
||||||
|
* @Author: Kane
|
||||||
|
* @Date: 2023-02-24 09:36:08
|
||||||
|
* @LastEditors: Kane
|
||||||
|
* @LastEditTime: 2023-06-15 15:50:00
|
||||||
|
* @FilePath: /task_schedule/src/assets/css/public/_public.scss
|
||||||
|
* @Description: 公共变量
|
||||||
|
*
|
||||||
|
* Copyright (c) ${2022} by Kane, All Rights Reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
//背景色
|
||||||
|
$wrap-bg-color:#fff;
|
||||||
|
$span-font-color:#5f5f5f;
|
||||||
|
|
||||||
|
//阴影
|
||||||
|
$box-shadow:0px 0px 20px -10px rgb(14 18 22 / 25%);
|
||||||
|
$box-shadow-hover:0px 0px 20px -10px rgb(14 18 22 / 50%);
|
||||||
|
|
||||||
|
//文字大小
|
||||||
|
$font-size-normal:14px;
|
||||||
|
|
||||||
|
//查询框
|
||||||
|
@mixin query-box-wrap {
|
||||||
|
padding: 0px 10px;
|
||||||
|
|
||||||
|
span {
|
||||||
|
font-weight: normal;
|
||||||
|
display: block;
|
||||||
|
text-align: right;
|
||||||
|
font-size: $font-size-normal;
|
||||||
|
color: $span-font-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
:deep(.el-row) {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.el-row+.el-row {
|
||||||
|
margin-top: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.button-wrapper-right {
|
||||||
|
display: flex;
|
||||||
|
justify-content: right;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.button-wrapper-left {
|
||||||
|
display: flex;
|
||||||
|
justify-content: left;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
}
|
132
code/web/task_schedule/src/components/RankingListComponent.vue
Normal file
132
code/web/task_schedule/src/components/RankingListComponent.vue
Normal file
@@ -0,0 +1,132 @@
|
|||||||
|
<!--
|
||||||
|
* @Author: Kane
|
||||||
|
* @Date: 2023-06-06 11:01:01
|
||||||
|
* @LastEditors: Kane
|
||||||
|
* @FilePath: /task_schedule/src/components/RankingListComponent.vue
|
||||||
|
* @Description: 排行榜组件
|
||||||
|
*
|
||||||
|
* Copyright (c) ${2022} by Kane, All Rights Reserved.
|
||||||
|
-->
|
||||||
|
<template>
|
||||||
|
<div class="rankinglist-wrapper">
|
||||||
|
<el-table
|
||||||
|
:data="topFive"
|
||||||
|
stripe
|
||||||
|
style="width:100%;"
|
||||||
|
:header-cell-style="{background:'#fecb96'}"
|
||||||
|
>
|
||||||
|
<el-table-column
|
||||||
|
label="名次"
|
||||||
|
width="60"
|
||||||
|
align="center"
|
||||||
|
>
|
||||||
|
<template #default="ranking">
|
||||||
|
<span class="rankinglist-index">{{ ranking.row.index }}</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column
|
||||||
|
label="名次"
|
||||||
|
width="160"
|
||||||
|
align="center"
|
||||||
|
>
|
||||||
|
<template #default="ranking">
|
||||||
|
<span class="rankinglist-index">{{ ranking.row.callerName }}</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column
|
||||||
|
label="指标"
|
||||||
|
width="80"
|
||||||
|
align="center"
|
||||||
|
>
|
||||||
|
<template #default="ranking">
|
||||||
|
<span class="rankinglist-index">{{ ranking.row.appraiseValue }}</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts">
|
||||||
|
/* eslint-disable */
|
||||||
|
import { computed } from "vue";
|
||||||
|
|
||||||
|
interface RankingListItem
|
||||||
|
{
|
||||||
|
index: number;
|
||||||
|
callerName: string;
|
||||||
|
appraiseValue: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: "RankingListComponent",
|
||||||
|
props: {
|
||||||
|
title: {
|
||||||
|
type: String,
|
||||||
|
require: true,
|
||||||
|
default: () => "",
|
||||||
|
},
|
||||||
|
rankingList: {
|
||||||
|
type: Array,
|
||||||
|
require: true,
|
||||||
|
default: () => [],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* setup函数
|
||||||
|
* @param props 组件的props属性。
|
||||||
|
*/
|
||||||
|
setup(props)
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* 计算对象,用于获取top5.
|
||||||
|
*/
|
||||||
|
const topFive = computed(() =>
|
||||||
|
{
|
||||||
|
const rankingList = props.rankingList; // eslint-disable-line
|
||||||
|
|
||||||
|
rankingList.sort((a, b) =>
|
||||||
|
{
|
||||||
|
// @ts-ignore
|
||||||
|
return a.index - b.index;
|
||||||
|
});
|
||||||
|
|
||||||
|
return rankingList.slice(0, 5);
|
||||||
|
});
|
||||||
|
|
||||||
|
return { props, topFive, };
|
||||||
|
},
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.rankinglist-wrapper {
|
||||||
|
// border: 1px solid red;
|
||||||
|
border-radius: 5px;
|
||||||
|
width: 300px;
|
||||||
|
height: 250px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.rankinglist-index {
|
||||||
|
display: block;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
:deep(.el-table)
|
||||||
|
{
|
||||||
|
border-radius: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
:deep(.el-table__header-wrapper) {
|
||||||
|
thead {
|
||||||
|
th{
|
||||||
|
div{
|
||||||
|
// font-family: "FZ-ZHUOHEI";
|
||||||
|
font-weight: 500;
|
||||||
|
font-size: 15px;
|
||||||
|
color: #da3703;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
@@ -116,7 +116,7 @@ export default {
|
|||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.el-menu {
|
:deep(.el-menu) {
|
||||||
border-right: none;
|
border-right: none;
|
||||||
/* border-left: 5px solid #1d74b2; */
|
/* border-left: 5px solid #1d74b2; */
|
||||||
overflow: auto;
|
overflow: auto;
|
||||||
|
@@ -11,7 +11,7 @@
|
|||||||
<div class="header-wrapper">
|
<div class="header-wrapper">
|
||||||
<span class="company-name">CPIC</span>
|
<span class="company-name">CPIC</span>
|
||||||
<div class="version-wrapper">
|
<div class="version-wrapper">
|
||||||
<span>测试版</span>
|
<span>桌面霸屏后台管理</span>
|
||||||
<span>Build-202303251257</span>
|
<span>Build-202303251257</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="buttons-wrapper">
|
<div class="buttons-wrapper">
|
||||||
@@ -93,6 +93,10 @@ export default {
|
|||||||
font: {
|
font: {
|
||||||
size: 0.5rem;
|
size: 0.5rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
> *+* {
|
||||||
|
margin-top: 1px;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.company-name {
|
.company-name {
|
||||||
|
@@ -8,6 +8,6 @@
|
|||||||
* Copyright (c) ${2022} by Kane, All Rights Reserved.
|
* Copyright (c) ${2022} by Kane, All Rights Reserved.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { testNewCitizen } from "./identify.js";
|
import { testRankingListRequest } from "./testRankingListRequest.js";
|
||||||
|
|
||||||
testNewCitizen();
|
testRankingListRequest();
|
||||||
|
18
code/web/task_schedule/src/types/cpicxim/RankingListItem.ts
Normal file
18
code/web/task_schedule/src/types/cpicxim/RankingListItem.ts
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
/*
|
||||||
|
* @Author: Kane
|
||||||
|
* @Date: 2023-06-06 17:44:48
|
||||||
|
* @LastEditors: Kane
|
||||||
|
* @FilePath: /task_schedule/src/types/cpicxim/RankingListItem.ts
|
||||||
|
* @Description: 排行榜元素
|
||||||
|
*
|
||||||
|
* Copyright (c) ${2022} by Kane, All Rights Reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
interface RankingListItem
|
||||||
|
{
|
||||||
|
index: number;
|
||||||
|
callerName: string;
|
||||||
|
appraiseValue: string;
|
||||||
|
};
|
||||||
|
|
||||||
|
export { type RankingListItem };
|
@@ -9,9 +9,19 @@
|
|||||||
*/
|
*/
|
||||||
export const API_URL = {
|
export const API_URL = {
|
||||||
// URL_LOGIN: import.meta.env.VITE_URL_LOGIN,
|
// URL_LOGIN: import.meta.env.VITE_URL_LOGIN,
|
||||||
URL_LOGIN: "http://222.76.244.118:11101/admin-system/account/p13_account_check",
|
// URL_LOGIN: "http://222.76.244.118:11101/admin-system/account/p13_account_check",
|
||||||
|
URL_LOGIN: "http://10.39.0.41:8081/admin-system/account/p13_account_check",
|
||||||
|
|
||||||
// URL_LOGIN_CALLER: "http://localhost:8080/desktop_archievement_backend/account/query_telsaler_info.do",
|
// 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://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: 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://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",
|
||||||
|
|
||||||
};
|
};
|
||||||
|
64
code/web/task_schedule/src/utils/api/loginRequest.ts
Normal file
64
code/web/task_schedule/src/utils/api/loginRequest.ts
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
/*
|
||||||
|
* @Author: Kane
|
||||||
|
* @Date: 2023-06-12 14:48:55
|
||||||
|
* @LastEditors: Kane
|
||||||
|
* @FilePath: /task_schedule/src/utils/api/loginRequest.ts
|
||||||
|
* @Description:
|
||||||
|
*
|
||||||
|
* Copyright (c) ${2022} by Kane, All Rights Reserved.
|
||||||
|
*/
|
||||||
|
import axios, { type AxiosInstance } from "axios";
|
||||||
|
|
||||||
|
const loginInstance: AxiosInstance = axios.create(
|
||||||
|
{
|
||||||
|
baseURL: "",
|
||||||
|
timeout: 10000,
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
// 拦截器
|
||||||
|
|
||||||
|
// 登录用的请求,不需要加上token。
|
||||||
|
loginInstance.interceptors.request.use(
|
||||||
|
/**
|
||||||
|
* 请求拦截方法,用于对请求参数和内容进行预处理。
|
||||||
|
* 因为是登录请求,所以不需要加入token。
|
||||||
|
* @param config axios传递的配置对象
|
||||||
|
* @returns 返回给axios的配置对象
|
||||||
|
*/
|
||||||
|
( config ) =>
|
||||||
|
{
|
||||||
|
return config;
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* 请求拦截,当请求发送失败时调用。
|
||||||
|
* @param reason axios 传递的对象
|
||||||
|
* @returns 返回一个Promise对象,提供给调用者。
|
||||||
|
*/
|
||||||
|
async ( reason ) =>
|
||||||
|
{
|
||||||
|
return await Promise.reject( reason );
|
||||||
|
});
|
||||||
|
|
||||||
|
// 响应拦截器
|
||||||
|
loginInstance.interceptors.response.use(
|
||||||
|
/**
|
||||||
|
* 响应成功后调用,用于对响应结果进行预处理
|
||||||
|
* @param response axios传递的响应结果
|
||||||
|
* @returns 返回预处理后的响应结果,这里返回的结果,会传递给用户用户提供的响应处理结果方法。
|
||||||
|
*/
|
||||||
|
( response ) =>
|
||||||
|
{
|
||||||
|
return response;
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* 请求调用结果不为2xx时被调用。用于对错误进行预处理。
|
||||||
|
* @param error axios传递的错误内容。
|
||||||
|
* @returns 返回预处理后的错误信息对象,会传递给用户提供的相应处理方法。
|
||||||
|
*/
|
||||||
|
async ( error ) =>
|
||||||
|
{
|
||||||
|
return await Promise.reject( error );
|
||||||
|
});
|
||||||
|
|
||||||
|
export { loginInstance as instance };
|
@@ -13,14 +13,21 @@ import axios, { type AxiosInstance } from "axios";
|
|||||||
const service: AxiosInstance = axios.create(
|
const service: AxiosInstance = axios.create(
|
||||||
{
|
{
|
||||||
baseURL: "",
|
baseURL: "",
|
||||||
timeout: 5000,
|
timeout: 10000,
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
// 请求拦截
|
// 请求拦截
|
||||||
service.interceptors.request.use(
|
service.interceptors.request.use(
|
||||||
|
/**
|
||||||
|
* 请求拦截器,在此加入token
|
||||||
|
* @param config 配置对象,在此加入token。
|
||||||
|
* @returns 返回修改完的配置对象
|
||||||
|
*/
|
||||||
( config ) =>
|
( config ) =>
|
||||||
{
|
{
|
||||||
|
config.headers.token = "123";
|
||||||
|
|
||||||
return config;
|
return config;
|
||||||
},
|
},
|
||||||
async ( error ) =>
|
async ( error ) =>
|
||||||
|
110
code/web/task_schedule/src/utils/ranking.ts
Normal file
110
code/web/task_schedule/src/utils/ranking.ts
Normal file
@@ -0,0 +1,110 @@
|
|||||||
|
/*
|
||||||
|
* @Author: Kane
|
||||||
|
* @Date: 2023-06-06 17:40:31
|
||||||
|
* @LastEditors: Kane
|
||||||
|
* @FilePath: /task_schedule/src/utils/ranking.ts
|
||||||
|
* @Description: 排行榜相关的代码
|
||||||
|
*
|
||||||
|
* Copyright (c) ${2022} by Kane, All Rights Reserved.
|
||||||
|
*/
|
||||||
|
import { service as instance } from "./api/request.js";
|
||||||
|
import { API_URL } from "./api/config.js";
|
||||||
|
import { type RankingListItem } from "../types/cpicxim/RankingListItem.js";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用于请求排行榜数据请求参数
|
||||||
|
*/
|
||||||
|
interface RankingListRequest
|
||||||
|
{
|
||||||
|
departmentCode: string;
|
||||||
|
year: string;
|
||||||
|
month: string;
|
||||||
|
};
|
||||||
|
|
||||||
|
interface RankingListResponse
|
||||||
|
{
|
||||||
|
success: boolean;
|
||||||
|
message: string;
|
||||||
|
departmentCode: string;
|
||||||
|
year: string;
|
||||||
|
month: string;
|
||||||
|
attachingRateRankingList: RankingListItem[];
|
||||||
|
renewalRateRankingList: RankingListItem[];
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 请求坐席排行榜。
|
||||||
|
* @param reqParam 请求参数
|
||||||
|
* @param rander 保存请求结果的回调函数
|
||||||
|
* @returns 返回RankingListResponse对象,里面包含请求状态和数据。
|
||||||
|
*/
|
||||||
|
function requestRankingList( reqParam: RankingListRequest, rander: any ): void // eslint-disable-line
|
||||||
|
{
|
||||||
|
// let attachingRankingList: RankingListItem[];
|
||||||
|
// let renewalRankintList: RankingListItem[];
|
||||||
|
|
||||||
|
const rankingListResponse: RankingListResponse = {
|
||||||
|
success: false,
|
||||||
|
message: "",
|
||||||
|
departmentCode: reqParam.departmentCode,
|
||||||
|
year: reqParam.year,
|
||||||
|
month: reqParam.month,
|
||||||
|
attachingRateRankingList: [],
|
||||||
|
renewalRateRankingList: [],
|
||||||
|
};
|
||||||
|
|
||||||
|
instance.request(
|
||||||
|
{
|
||||||
|
method: "post",
|
||||||
|
url: API_URL.URL_RANKINGLIST,
|
||||||
|
data: reqParam,
|
||||||
|
})
|
||||||
|
.then(( response ) =>
|
||||||
|
{
|
||||||
|
const data: RankingListResponse = response.data as RankingListResponse;
|
||||||
|
|
||||||
|
rankingListResponse.success = data.success ?? false;
|
||||||
|
rankingListResponse.message = data.message ?? "";
|
||||||
|
rankingListResponse.departmentCode = data.departmentCode ?? "";
|
||||||
|
rankingListResponse.year = data.year ?? "";
|
||||||
|
rankingListResponse.month = data.month ?? "";
|
||||||
|
|
||||||
|
// 遍历排行榜元素
|
||||||
|
for ( const item of ( data.attachingRateRankingList ?? [] )) // eslint-disable-line
|
||||||
|
{
|
||||||
|
const index: number = item.index ?? -1;
|
||||||
|
|
||||||
|
if ( index === -1 )
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
rankingListResponse.attachingRateRankingList.push( item );
|
||||||
|
}
|
||||||
|
|
||||||
|
for ( const item of ( data.renewalRateRankingList ?? [] )) // eslint-disable-line
|
||||||
|
{
|
||||||
|
const index: number = item.index ?? -1;
|
||||||
|
|
||||||
|
if ( index === -1 )
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
rankingListResponse.renewalRateRankingList.push( item );
|
||||||
|
}
|
||||||
|
|
||||||
|
// 调用回调函数保存数据
|
||||||
|
rander( rankingListResponse );
|
||||||
|
})
|
||||||
|
.catch(( error ) =>
|
||||||
|
{
|
||||||
|
console.log( error );
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
export {
|
||||||
|
type RankingListRequest,
|
||||||
|
type RankingListResponse,
|
||||||
|
requestRankingList
|
||||||
|
};
|
@@ -31,12 +31,8 @@
|
|||||||
:percentage="ui.attaching_rate"
|
:percentage="ui.attaching_rate"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div class="total-archievement-charts-wrapper">
|
||||||
class="total-archievement-charts-wrapper"
|
<ArchievementChart :chart-data="ui.chartData" />
|
||||||
>
|
|
||||||
<ArchievementChart
|
|
||||||
:chart-data="ui.chartData"
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="reward-wrapper">
|
<div class="reward-wrapper">
|
||||||
@@ -51,7 +47,39 @@
|
|||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="right-wrapper" />
|
<div class="right-wrapper">
|
||||||
|
<h1>本大爷</h1>
|
||||||
|
<div class="carousel-item">
|
||||||
|
<el-carousel
|
||||||
|
arrow="never"
|
||||||
|
indicator-position="none"
|
||||||
|
:interval="4000"
|
||||||
|
>
|
||||||
|
<el-carousel-item
|
||||||
|
:key="1"
|
||||||
|
>
|
||||||
|
<RankingListComponent :ranking-list="ui.attachingRankingList" />
|
||||||
|
</el-carousel-item>
|
||||||
|
<el-carousel-item :key="2">
|
||||||
|
<RankingListComponent :ranking-list="ui.renewalRankingList" />
|
||||||
|
</el-carousel-item>
|
||||||
|
</el-carousel>
|
||||||
|
</div>
|
||||||
|
<div class="carousel-item">
|
||||||
|
<el-carousel
|
||||||
|
arrow="never"
|
||||||
|
indicator-position="none"
|
||||||
|
:interval="4000"
|
||||||
|
>
|
||||||
|
<el-carousel-item :key="1">
|
||||||
|
<RankingListComponent :ranking-list="ui.attachingRankingList" />
|
||||||
|
</el-carousel-item>
|
||||||
|
<el-carousel-item :key="2">
|
||||||
|
<RankingListComponent :ranking-list="ui.renewalRankingList" />
|
||||||
|
</el-carousel-item>
|
||||||
|
</el-carousel>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@@ -61,14 +89,32 @@ import { useRouter } from "vue-router";
|
|||||||
import { getCallerInfo } from "@/utils/api/localStorage.js";
|
import { getCallerInfo } from "@/utils/api/localStorage.js";
|
||||||
import { ElMessage } from "element-plus";
|
import { ElMessage } from "element-plus";
|
||||||
import { type Archievement, queryDepartmentArchievement } from "@/utils/archievement.js";
|
import { type Archievement, queryDepartmentArchievement } from "@/utils/archievement.js";
|
||||||
|
import { RankingListItem } from "@/types/cpicxim/RankingListItem.js";
|
||||||
|
import { type RankingListRequest, type RankingListResponse, requestRankingList } from "@/utils/ranking.js";
|
||||||
import { type Department } from "@/types/cpicxim/Department";
|
import { type Department } from "@/types/cpicxim/Department";
|
||||||
import ArchievementChart from "@/components/ArchievementChartComponent.vue";
|
import ArchievementChart from "@/components/ArchievementChartComponent.vue";
|
||||||
import ArchievementCompleteRateComponent from "@/components/ArchievementCompleteRateComponent.vue";
|
import ArchievementCompleteRateComponent from "@/components/ArchievementCompleteRateComponent.vue";
|
||||||
import HonorListComponent from "@/components/HonorListComponent.vue";
|
import HonorListComponent from "@/components/HonorListComponent.vue";
|
||||||
import DishonorListComponent from "@/components/DishonorListComponent.vue";
|
import DishonorListComponent from "@/components/DishonorListComponent.vue";
|
||||||
|
import RankingListComponent from "@/components/RankingListComponent.vue";
|
||||||
import { logout } from "@/utils/account.js";
|
import { logout } from "@/utils/account.js";
|
||||||
import { type TelSaler } from "@/types/cpicxim/TelSaler";
|
import { type TelSaler } from "@/types/cpicxim/TelSaler";
|
||||||
|
|
||||||
|
interface ui
|
||||||
|
{
|
||||||
|
currentMonth: string;
|
||||||
|
chartData: number[];
|
||||||
|
totalArchievement: number;
|
||||||
|
attaching_rate: string;
|
||||||
|
insurance_renewal_rate: string; // 续保率
|
||||||
|
leading_reward_gainers: string[]; // 领跑奖
|
||||||
|
advance_reward_gainers: string[]; // 飞跃奖
|
||||||
|
dishonorPersons: string[];
|
||||||
|
showUI: boolean; // 用来刷新页面的开关
|
||||||
|
attachingRankingList: RankingListItem[]; // 坐席车非渗透率榜单
|
||||||
|
renewalRankingList: RankingListItem[];
|
||||||
|
};
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "DesktopArchievement",
|
name: "DesktopArchievement",
|
||||||
components: {
|
components: {
|
||||||
@@ -76,6 +122,7 @@ export default {
|
|||||||
ArchievementCompleteRateComponent,
|
ArchievementCompleteRateComponent,
|
||||||
HonorListComponent,
|
HonorListComponent,
|
||||||
DishonorListComponent,
|
DishonorListComponent,
|
||||||
|
RankingListComponent,
|
||||||
},
|
},
|
||||||
setup()
|
setup()
|
||||||
{
|
{
|
||||||
@@ -83,7 +130,7 @@ export default {
|
|||||||
const numInChinese = ["一", "二", "三", "四", "五", "六", "七", "八", "九", "十", "十一", "十二",];
|
const numInChinese = ["一", "二", "三", "四", "五", "六", "七", "八", "九", "十", "十一", "十二",];
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
const callerInfo: TelSaler = getCallerInfo();
|
const callerInfo: TelSaler = getCallerInfo();
|
||||||
const ui = reactive({
|
const ui: ui = reactive({
|
||||||
currentMonth: numInChinese[monthIndex.getMonth() - 1],
|
currentMonth: numInChinese[monthIndex.getMonth() - 1],
|
||||||
chartData: [0,], // 业绩表
|
chartData: [0,], // 业绩表
|
||||||
totalArchievement: 0, // 总业绩
|
totalArchievement: 0, // 总业绩
|
||||||
@@ -93,6 +140,8 @@ export default {
|
|||||||
advance_reward_gainers: ["",], // 飞跃奖
|
advance_reward_gainers: ["",], // 飞跃奖
|
||||||
dishonorPersons: ["",],
|
dishonorPersons: ["",],
|
||||||
showUI: true, // 用来刷新页面的开关
|
showUI: true, // 用来刷新页面的开关
|
||||||
|
attachingRankingList: [], // 坐席车非渗透率榜单
|
||||||
|
renewalRankingList: [], // 坐席续保率榜单
|
||||||
});
|
});
|
||||||
let timerHandler = 0;
|
let timerHandler = 0;
|
||||||
|
|
||||||
@@ -109,8 +158,8 @@ export default {
|
|||||||
return archievement;
|
return archievement;
|
||||||
});
|
});
|
||||||
|
|
||||||
// 绘制数据
|
// 保存业绩数据
|
||||||
const renderData = ( data:Archievement ) =>
|
const applyArchievementData = ( data: Archievement ) =>
|
||||||
{
|
{
|
||||||
console.log( "部门业绩数据", data );
|
console.log( "部门业绩数据", data );
|
||||||
|
|
||||||
@@ -129,6 +178,20 @@ export default {
|
|||||||
setTimeout(() => { ui.showUI = true; }, 0 );
|
setTimeout(() => { ui.showUI = true; }, 0 );
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const applyRankingListData = ( data: RankingListResponse ): void =>
|
||||||
|
{
|
||||||
|
ui.attachingRankingList = data.attachingRateRankingList;
|
||||||
|
ui.renewalRankingList = data.renewalRateRankingList;
|
||||||
|
|
||||||
|
// 更新UI
|
||||||
|
// 先不显示界面,往队列中加入显示队列的回调,让vue刷新组件。
|
||||||
|
ui.showUI = false;
|
||||||
|
|
||||||
|
console.log( "获取排行榜后的ui:", data );
|
||||||
|
|
||||||
|
setTimeout(() => { ui.showUI = true; }, 0 );
|
||||||
|
};
|
||||||
|
|
||||||
// 退出桌面霸屏
|
// 退出桌面霸屏
|
||||||
const logoutDesktopArchievement = () =>
|
const logoutDesktopArchievement = () =>
|
||||||
{
|
{
|
||||||
@@ -150,32 +213,49 @@ export default {
|
|||||||
router.push( "/login" );
|
router.push( "/login" );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 刷新页面
|
||||||
|
*/
|
||||||
const refresh = () =>
|
const refresh = () =>
|
||||||
{
|
{
|
||||||
const deparmentInfo:Department =
|
const deparmentInfo: Department =
|
||||||
{
|
{
|
||||||
departmentCode: callerInfo.departmentCode,
|
departmentCode: callerInfo.departmentCode,
|
||||||
departmentName: callerInfo.departmentName,
|
departmentName: callerInfo.departmentName,
|
||||||
};
|
};
|
||||||
|
|
||||||
queryDepartmentArchievement( deparmentInfo, renderData );
|
const rankinglistRequest: RankingListRequest =
|
||||||
|
{
|
||||||
|
departmentCode: callerInfo.departmentCode,
|
||||||
|
year: "2023",
|
||||||
|
month: "06",
|
||||||
|
};
|
||||||
|
|
||||||
|
queryDepartmentArchievement( deparmentInfo, applyArchievementData );
|
||||||
|
requestRankingList( rankinglistRequest, applyRankingListData );
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 加载前
|
||||||
|
*/
|
||||||
onBeforeMount(() =>
|
onBeforeMount(() =>
|
||||||
{
|
{
|
||||||
// 设置每10分钟刷新一次
|
// 设置每10分钟刷新一次
|
||||||
// timerHandler = setInterval( refresh, 5000 );
|
timerHandler = setInterval( refresh, 600 * 1000 );
|
||||||
|
|
||||||
refresh();
|
refresh();
|
||||||
});
|
});
|
||||||
|
|
||||||
onUnmounted(():void =>
|
/**
|
||||||
|
* 页面卸载前
|
||||||
|
*/
|
||||||
|
onUnmounted((): void =>
|
||||||
{
|
{
|
||||||
// 退出页面前关掉定时器
|
// 退出页面前关掉定时器
|
||||||
clearInterval( timerHandler );
|
clearInterval( timerHandler );
|
||||||
});
|
});
|
||||||
|
|
||||||
return { ui, callerInfo, timerHandler, getTotalArchievement, renderData, refresh, logoutDesktopArchievement, };
|
return { ui, callerInfo, timerHandler, getTotalArchievement, renderData: applyArchievementData, refresh, logoutDesktopArchievement, };
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
@@ -297,8 +377,35 @@ export default {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.right-wrapper {
|
.right-wrapper {
|
||||||
min-width: 400px;
|
min-width: 300px;
|
||||||
width: 25%;
|
width: 25%;
|
||||||
|
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: flex-start;
|
||||||
|
|
||||||
|
// >*+* {
|
||||||
|
// margin-top: 15px;
|
||||||
|
// }
|
||||||
|
> h1 {
|
||||||
|
font: {
|
||||||
|
family: "FZ-ZHUOHEI";
|
||||||
|
weight: 100;
|
||||||
|
size: 30px;
|
||||||
|
}
|
||||||
|
color: $color-bg-04;
|
||||||
|
|
||||||
|
text-align: center;
|
||||||
|
|
||||||
|
width: 300px;
|
||||||
|
}
|
||||||
|
|
||||||
|
> div {
|
||||||
|
display: block;
|
||||||
|
height: 260px;
|
||||||
|
width: 300px;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
<style lang="scss">
|
<style lang="scss">
|
||||||
|
@@ -2,25 +2,190 @@
|
|||||||
* @Author: Kane
|
* @Author: Kane
|
||||||
* @Date: 2023-03-23 16:05:08
|
* @Date: 2023-03-23 16:05:08
|
||||||
* @LastEditors: Kane
|
* @LastEditors: Kane
|
||||||
* @FilePath: /task_schedule/src/views/DataManagemant.vue
|
* @FilePath: /task_schedule/src/views/StaffManagement.vue
|
||||||
* @Description:
|
* @Description:
|
||||||
*
|
*
|
||||||
* Copyright (c) ${2022} by Kane, All Rights Reserved.
|
* Copyright (c) ${2022} by Kane, All Rights Reserved.
|
||||||
-->
|
-->
|
||||||
<template>
|
<template>
|
||||||
<div>
|
<div class="wrapper">
|
||||||
人员管理
|
<div class="query_wrapper">
|
||||||
|
<el-row :gutter="10">
|
||||||
|
<el-col :span="2">
|
||||||
|
<span>工号:</span>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="4">
|
||||||
|
<el-input v-model.trim.lazy="ui.caller_code" />
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="2">
|
||||||
|
<span>姓名:</span>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="4">
|
||||||
|
<el-input />
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="2">
|
||||||
|
<span>部门代码:</span>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="4">
|
||||||
|
<el-input />
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="2">
|
||||||
|
<span>部门名称:</span>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="4">
|
||||||
|
<el-input />
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
<el-row :gutter="10">
|
||||||
|
<el-col :span="2">
|
||||||
|
<span>团队:</span>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="10">
|
||||||
|
<el-input />
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<div class="query-button">
|
||||||
|
<el-button
|
||||||
|
type="primary"
|
||||||
|
icon="search"
|
||||||
|
>
|
||||||
|
查询
|
||||||
|
</el-button>
|
||||||
|
<el-button icon="refresh">
|
||||||
|
重置
|
||||||
|
</el-button>
|
||||||
|
</div>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
</div>
|
||||||
|
<el-table
|
||||||
|
border
|
||||||
|
stripe
|
||||||
|
style="width:100%;"
|
||||||
|
:height="tableHeight"
|
||||||
|
>
|
||||||
|
<el-table-column
|
||||||
|
type="selection"
|
||||||
|
align="center"
|
||||||
|
/>
|
||||||
|
<el-table-column
|
||||||
|
label="工号"
|
||||||
|
align="center"
|
||||||
|
width="120"
|
||||||
|
/>
|
||||||
|
<el-table-column
|
||||||
|
label="名称"
|
||||||
|
align="center"
|
||||||
|
width="200"
|
||||||
|
/>
|
||||||
|
<el-table-column
|
||||||
|
label="团队名称"
|
||||||
|
align="center"
|
||||||
|
/>
|
||||||
|
<el-table-column
|
||||||
|
label="部门"
|
||||||
|
align="center"
|
||||||
|
width="300"
|
||||||
|
/>
|
||||||
|
</el-table>
|
||||||
|
<div class="pagination_wrapper">
|
||||||
|
<el-pagination
|
||||||
|
v-model="ui.table_current_page_index"
|
||||||
|
class="pull_left"
|
||||||
|
size="small"
|
||||||
|
background
|
||||||
|
:page-size="ui.table_page_size"
|
||||||
|
:page-sizes="[10, 20, 50, 100]"
|
||||||
|
layout="total, sizes, prev, pager, next, jumper"
|
||||||
|
:total="ui.callers.length"
|
||||||
|
@current-change="onCurrentPageIndexChange"
|
||||||
|
@size-change="onTablePageSizeChange"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
|
import { reactive, computed } from "vue";
|
||||||
export default {
|
export default {
|
||||||
name: "StaffManagement",
|
name: "StaffManagement",
|
||||||
setup()
|
setup()
|
||||||
{
|
{
|
||||||
return {};
|
const ui = reactive({
|
||||||
|
caller_code: "",
|
||||||
|
caller_name: "",
|
||||||
|
section_office_code: "",
|
||||||
|
section_office_name: "",
|
||||||
|
table_current_page_index: 1,
|
||||||
|
table_page_size: 50,
|
||||||
|
callers: [],
|
||||||
|
});
|
||||||
|
|
||||||
|
const onCurrentPageIndexChange = ( pageIndex: number ) =>
|
||||||
|
{
|
||||||
|
ui.table_current_page_index = pageIndex;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设置表格每页显示记录的数量
|
||||||
|
* @param pageSize 表格页记录数量
|
||||||
|
*/
|
||||||
|
const onTablePageSizeChange = ( pageSize: number ) =>
|
||||||
|
{
|
||||||
|
ui.table_page_size = pageSize;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 表格高度
|
||||||
|
*/
|
||||||
|
const tableHeight = computed(() =>
|
||||||
|
{
|
||||||
|
return 10 * 50 + 40;
|
||||||
|
});
|
||||||
|
|
||||||
|
return { ui, onCurrentPageIndexChange, onTablePageSizeChange, tableHeight, };
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
|
@import "@/assets/css/public/_public.scss";
|
||||||
|
|
||||||
|
.wrapper {
|
||||||
|
margin: 10px;
|
||||||
|
padding: 10px;
|
||||||
|
|
||||||
|
background-color: #fff;
|
||||||
|
border-radius: 5px;
|
||||||
|
box-shadow: $box-shadow;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
box-shadow: $box-shadow-hover;
|
||||||
|
}
|
||||||
|
|
||||||
|
min-width: 800px;
|
||||||
|
|
||||||
|
> *+* {
|
||||||
|
margin-top: 10px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.query_wrapper {
|
||||||
|
// display: flex;
|
||||||
|
border-radius: 5px;
|
||||||
|
|
||||||
|
padding: 15px;
|
||||||
|
|
||||||
|
@include query-box-wrap;
|
||||||
|
|
||||||
|
.query-button {
|
||||||
|
display: flex;
|
||||||
|
justify-content: flex-end;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.pagination_wrapper
|
||||||
|
{
|
||||||
|
display: flex;
|
||||||
|
justify-content: flex-end;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
@@ -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-03-30 21:09:30
|
* @LastEditTime: 2023-06-25 09:51:13
|
||||||
* @FilePath: /task_schedule/vite.config.js
|
* @FilePath: /task_schedule/vite.config.js
|
||||||
* @Description:
|
* @Description:
|
||||||
*
|
*
|
||||||
@@ -18,6 +18,7 @@ export default defineConfig(( command, mode ) =>
|
|||||||
const env = loadEnv( mode, process.cwd(), "" );
|
const env = loadEnv( mode, process.cwd(), "" );
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
server:{ host: "localhost", port: 5173, },
|
||||||
plugins: [vue(),],
|
plugins: [vue(),],
|
||||||
base: "./",
|
base: "./",
|
||||||
resolve: {
|
resolve: {
|
||||||
|
@@ -92,6 +92,20 @@
|
|||||||
<artifactId>ojdbc8</artifactId>
|
<artifactId>ojdbc8</artifactId>
|
||||||
<version>19.3.0.0.0</version>
|
<version>19.3.0.0.0</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.logging.log4j</groupId>
|
||||||
|
<artifactId>log4j-core</artifactId>
|
||||||
|
<version>2.20.0</version>
|
||||||
|
</dependency>
|
||||||
|
<!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-slf4j2-impl -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.logging.log4j</groupId>
|
||||||
|
<artifactId>log4j-slf4j2-impl</artifactId>
|
||||||
|
<version>2.20.0</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
</dependencies>
|
</dependencies>
|
||||||
<build>
|
<build>
|
||||||
<finalName>desktop_archievement_backend</finalName>
|
<finalName>desktop_archievement_backend</finalName>
|
||||||
@@ -99,7 +113,8 @@
|
|||||||
<plugin>
|
<plugin>
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
<artifactId>maven-war-plugin</artifactId>
|
<artifactId>maven-war-plugin</artifactId>
|
||||||
<version>3.2.2</version>
|
<version>3.3.2</version>
|
||||||
|
<configuration></configuration>
|
||||||
</plugin>
|
</plugin>
|
||||||
<plugin>
|
<plugin>
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
@@ -11,11 +11,8 @@ package com.cpic.xim.utils.archievement;
|
|||||||
|
|
||||||
import java.sql.Connection;
|
import java.sql.Connection;
|
||||||
import java.sql.DriverManager;
|
import java.sql.DriverManager;
|
||||||
import java.sql.PreparedStatement;
|
|
||||||
import java.sql.ResultSet;
|
import java.sql.ResultSet;
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
import java.sql.CallableStatement;
|
|
||||||
|
|
||||||
import java.util.Vector;
|
import java.util.Vector;
|
||||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
import oracle.jdbc.OracleCallableStatement;
|
import oracle.jdbc.OracleCallableStatement;
|
||||||
@@ -80,7 +77,6 @@ public class DepartmentArchievement
|
|||||||
connection = DriverManager.getConnection( jdbcURL, userName, password );
|
connection = DriverManager.getConnection( jdbcURL, userName, password );
|
||||||
statement = connection.prepareCall( sql );
|
statement = connection.prepareCall( sql );
|
||||||
|
|
||||||
|
|
||||||
statement.setString( 1, departmentCode );
|
statement.setString( 1, departmentCode );
|
||||||
statement.registerOutParameter( 2, java.sql.Types.VARCHAR );
|
statement.registerOutParameter( 2, java.sql.Types.VARCHAR );
|
||||||
statement.registerOutParameter( 3, java.sql.Types.VARCHAR );
|
statement.registerOutParameter( 3, java.sql.Types.VARCHAR );
|
||||||
|
@@ -0,0 +1,23 @@
|
|||||||
|
/*
|
||||||
|
* @Author: Kane
|
||||||
|
* @Date: 2023-06-05 10:36:30
|
||||||
|
* @LastEditors: Kane
|
||||||
|
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/utils/exception/DepartmentCodeNotFoundException.java
|
||||||
|
* @Description:
|
||||||
|
*
|
||||||
|
* Copyright (c) ${2022} by Kane, All Rights Reserved.
|
||||||
|
*/
|
||||||
|
package com.cpic.xim.utils.exception;
|
||||||
|
|
||||||
|
public class DepartmentCodeNotFoundException extends Exception
|
||||||
|
{
|
||||||
|
public DepartmentCodeNotFoundException()
|
||||||
|
{
|
||||||
|
super("部门代码无效!");
|
||||||
|
}
|
||||||
|
|
||||||
|
public DepartmentCodeNotFoundException( String message )
|
||||||
|
{
|
||||||
|
super( message );
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,23 @@
|
|||||||
|
/*
|
||||||
|
* @Author: Kane
|
||||||
|
* @Date: 2023-06-05 10:56:33
|
||||||
|
* @LastEditors: Kane
|
||||||
|
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/utils/exception/ParameterExecption.java
|
||||||
|
* @Description: 用于表示参数错误的异常对象。
|
||||||
|
*
|
||||||
|
* Copyright (c) ${2022} by Kane, All Rights Reserved.
|
||||||
|
*/
|
||||||
|
package com.cpic.xim.utils.exception;
|
||||||
|
|
||||||
|
public class ParameterExecption extends Exception
|
||||||
|
{
|
||||||
|
public ParameterExecption()
|
||||||
|
{
|
||||||
|
super("参数错误!");
|
||||||
|
}
|
||||||
|
|
||||||
|
public ParameterExecption(String message )
|
||||||
|
{
|
||||||
|
super( message );
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,64 @@
|
|||||||
|
/*
|
||||||
|
* @Author: Kane
|
||||||
|
* @Date: 2023-06-03 20:02:28
|
||||||
|
* @LastEditors: Kane
|
||||||
|
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/utils/ranking/CallerRanking.java
|
||||||
|
* @Description: 坐席排行榜项目
|
||||||
|
*
|
||||||
|
* Copyright (c) ${2022} by Kane, All Rights Reserved.
|
||||||
|
*/
|
||||||
|
package com.cpic.xim.utils.ranking;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
|
|
||||||
|
public class CallerRankingItem
|
||||||
|
{
|
||||||
|
|
||||||
|
public CallerRankingItem() {}
|
||||||
|
|
||||||
|
public CallerRankingItem( int index, String callName, String appraiseValue )
|
||||||
|
{
|
||||||
|
this.index = index;
|
||||||
|
this.callerName = callName;
|
||||||
|
this.appraiseValue = appraiseValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getIndex()
|
||||||
|
{
|
||||||
|
return index;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setIndex( int index )
|
||||||
|
{
|
||||||
|
this.index = index;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getCallerName()
|
||||||
|
{
|
||||||
|
return callerName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCallerName( String callerName )
|
||||||
|
{
|
||||||
|
this.callerName = callerName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAppraiseValue()
|
||||||
|
{
|
||||||
|
return appraiseValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAppraiseValue( String appraiseValue )
|
||||||
|
{
|
||||||
|
this.appraiseValue = appraiseValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
@JsonProperty("index")
|
||||||
|
private int index;
|
||||||
|
|
||||||
|
@JsonProperty("callerName")
|
||||||
|
private String callerName;
|
||||||
|
|
||||||
|
@JsonProperty("appraiseValue")
|
||||||
|
private String appraiseValue;
|
||||||
|
}
|
@@ -0,0 +1,225 @@
|
|||||||
|
/*
|
||||||
|
* @Author: Kane
|
||||||
|
* @Date: 2023-06-05 08:55:06
|
||||||
|
* @LastEditors: Kane
|
||||||
|
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/utils/ranking/CallerRankingList.java
|
||||||
|
* @Description: 坐席排行榜对象
|
||||||
|
*
|
||||||
|
* Copyright (c) ${2022} by Kane, All Rights Reserved.
|
||||||
|
*/
|
||||||
|
package com.cpic.xim.utils.ranking;
|
||||||
|
|
||||||
|
import java.sql.CallableStatement;
|
||||||
|
import java.sql.Connection;
|
||||||
|
import java.sql.DriverManager;
|
||||||
|
import java.sql.ResultSet;
|
||||||
|
import java.sql.SQLException;
|
||||||
|
import java.util.Vector;
|
||||||
|
import oracle.jdbc.OracleCallableStatement;
|
||||||
|
import oracle.jdbc.OracleTypes;
|
||||||
|
|
||||||
|
public class CallerRankingList
|
||||||
|
{
|
||||||
|
// 以后要改
|
||||||
|
private static String jdbcURL = "jdbc:oracle:thin:@10.39.0.86:1521:xmcx1";
|
||||||
|
private static String userName = "desktop_archievement_admin";
|
||||||
|
private static String password = "Cpic123456";
|
||||||
|
|
||||||
|
private CallerRankingList( String departmentCode, String year, String month,
|
||||||
|
Vector<CallerRankingItem> attachingRateRankingList,
|
||||||
|
Vector<CallerRankingItem> renewalRateRankingList)
|
||||||
|
{
|
||||||
|
this.departmentCode = departmentCode;
|
||||||
|
this.year = year;
|
||||||
|
this.month = month;
|
||||||
|
this.attachingRateRankingList = attachingRateRankingList;
|
||||||
|
this.renewalRateRankingList = renewalRateRankingList;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief static方法,用于查询部门坐席排行榜
|
||||||
|
* @param departmentCode 部门代码
|
||||||
|
* @param year 排行榜年份
|
||||||
|
* @param month 排行榜月份
|
||||||
|
* @return CallerRankingList的实例对象
|
||||||
|
*/
|
||||||
|
public static CallerRankingList getCallerRankingList( String departmentCode, String year,
|
||||||
|
String month ) throws ClassNotFoundException, SQLException
|
||||||
|
{
|
||||||
|
CallerRankingList rankingList = null;
|
||||||
|
|
||||||
|
Connection connection = null;
|
||||||
|
CallableStatement statement = null;
|
||||||
|
ResultSet cur_attaching = null;
|
||||||
|
ResultSet cur_renewal = null;
|
||||||
|
String sql = """
|
||||||
|
{call telsale_archievement_pkg.caller_arch_ranking_list(?,?,?,?,?)}
|
||||||
|
""";
|
||||||
|
String monthRegx = "(0[1-9])|(1[0-2])";
|
||||||
|
String yearRegx = "20[0-2][0-0]";
|
||||||
|
|
||||||
|
Vector<CallerRankingItem> attachingRateRankingList = new Vector<>();
|
||||||
|
Vector<CallerRankingItem> renewalRateRankingList = new Vector<>();
|
||||||
|
|
||||||
|
int index = 1;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Class.forName( "oracle.jdbc.driver.OracleDriver" );
|
||||||
|
connection = DriverManager.getConnection( jdbcURL, userName, password );
|
||||||
|
statement = connection.prepareCall( sql );
|
||||||
|
|
||||||
|
statement.setString( 1, departmentCode );
|
||||||
|
statement.setString( 2, year );
|
||||||
|
statement.setString( 3, month );
|
||||||
|
statement.registerOutParameter( 4, OracleTypes.CURSOR );
|
||||||
|
statement.registerOutParameter( 5, OracleTypes.CURSOR );
|
||||||
|
|
||||||
|
statement.execute();
|
||||||
|
|
||||||
|
// 车非渗透率
|
||||||
|
cur_attaching = ((OracleCallableStatement) statement).getCursor( 4 );
|
||||||
|
index = 1;
|
||||||
|
|
||||||
|
while ( cur_attaching.next())
|
||||||
|
{
|
||||||
|
String callerName = cur_attaching.getString( 1 );
|
||||||
|
String appraiseValue = cur_attaching.getString( 2 );
|
||||||
|
|
||||||
|
CallerRankingItem caller =
|
||||||
|
new CallerRankingItem( index, callerName, appraiseValue );
|
||||||
|
|
||||||
|
attachingRateRankingList.add( caller );
|
||||||
|
|
||||||
|
index++;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 续保率
|
||||||
|
cur_renewal = ((OracleCallableStatement) statement).getCursor( 5 );
|
||||||
|
index = 1;
|
||||||
|
|
||||||
|
while ( cur_renewal.next())
|
||||||
|
{
|
||||||
|
String callerName = cur_renewal.getString( 1 );
|
||||||
|
String appraiseValue = cur_renewal.getString( 2 );
|
||||||
|
|
||||||
|
CallerRankingItem caller =
|
||||||
|
new CallerRankingItem( index, callerName, appraiseValue );
|
||||||
|
|
||||||
|
renewalRateRankingList.add( caller );
|
||||||
|
|
||||||
|
index++;
|
||||||
|
}
|
||||||
|
|
||||||
|
rankingList = new CallerRankingList( departmentCode, year, month,
|
||||||
|
attachingRateRankingList, renewalRateRankingList );
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if ( cur_attaching != null )
|
||||||
|
{
|
||||||
|
cur_attaching.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch ( Exception exception )
|
||||||
|
{
|
||||||
|
exception.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if ( statement != null )
|
||||||
|
{
|
||||||
|
statement.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch ( Exception exception )
|
||||||
|
{
|
||||||
|
exception.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if ( connection != null )
|
||||||
|
{
|
||||||
|
connection.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch ( Exception exception )
|
||||||
|
{
|
||||||
|
exception.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
return rankingList;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDepartmentCode()
|
||||||
|
{
|
||||||
|
return departmentCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDepartmentCode( String departmentCode )
|
||||||
|
{
|
||||||
|
this.departmentCode = departmentCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getYear()
|
||||||
|
{
|
||||||
|
return year;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setYear( String year )
|
||||||
|
{
|
||||||
|
this.year = year;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getMonth()
|
||||||
|
{
|
||||||
|
return month;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMonth( String month )
|
||||||
|
{
|
||||||
|
this.month = month;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Vector<CallerRankingItem> getAttachingRateRankingList()
|
||||||
|
{
|
||||||
|
return attachingRateRankingList;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAttachingRateRankingList( Vector<CallerRankingItem> attachingRateRankingList )
|
||||||
|
{
|
||||||
|
this.attachingRateRankingList = attachingRateRankingList;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Vector<CallerRankingItem> getRenewalRateRankingList()
|
||||||
|
{
|
||||||
|
return renewalRateRankingList;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setRenewalRateRankingList( Vector<CallerRankingItem> renewalRateRankingList )
|
||||||
|
{
|
||||||
|
this.renewalRateRankingList = renewalRateRankingList;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 部门代码
|
||||||
|
private String departmentCode;
|
||||||
|
|
||||||
|
// 排行榜年份
|
||||||
|
private String year;
|
||||||
|
|
||||||
|
// 排行榜统计月份
|
||||||
|
private String month;
|
||||||
|
|
||||||
|
// 车非融合率排行
|
||||||
|
private Vector<CallerRankingItem> attachingRateRankingList;
|
||||||
|
|
||||||
|
// 续保率排行
|
||||||
|
private Vector<CallerRankingItem> renewalRateRankingList;
|
||||||
|
|
||||||
|
}
|
@@ -13,15 +13,18 @@
|
|||||||
|
|
||||||
package com.cpic.xim.web.controllers.archievement;
|
package com.cpic.xim.web.controllers.archievement;
|
||||||
|
|
||||||
|
import java.sql.SQLException;
|
||||||
import java.util.Vector;
|
import java.util.Vector;
|
||||||
import org.springframework.stereotype.Controller;
|
import org.springframework.stereotype.Controller;
|
||||||
import org.springframework.web.bind.annotation.PostMapping;
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestBody;
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
import org.springframework.web.bind.annotation.ResponseBody;
|
import org.springframework.web.bind.annotation.ResponseBody;
|
||||||
import org.springframework.web.bind.annotation.RequestBody;
|
|
||||||
import java.sql.SQLException;
|
|
||||||
|
|
||||||
import com.cpic.xim.utils.archievement.DepartmentArchievement;
|
import com.cpic.xim.utils.archievement.DepartmentArchievement;
|
||||||
|
import com.cpic.xim.utils.ranking.CallerRankingItem;
|
||||||
|
import com.cpic.xim.utils.ranking.CallerRankingList;
|
||||||
|
import com.cpic.xim.web.controllers.archievement.RankingList.RankingListRequest;
|
||||||
|
import com.cpic.xim.web.controllers.archievement.RankingList.RankingListResponse;
|
||||||
|
|
||||||
@Controller
|
@Controller
|
||||||
@RequestMapping( "/archievement" )
|
@RequestMapping( "/archievement" )
|
||||||
@@ -79,9 +82,51 @@ public class ArchievementQueryController
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@RequestMapping("/query_ranking_list.do")
|
@RequestMapping( "/query_ranking_list.do" )
|
||||||
public void queryCallerArchievementRankingList( )
|
@ResponseBody
|
||||||
|
public RankingListResponse queryCallerArchievementRankingList(
|
||||||
|
@RequestBody RankingListRequest request )
|
||||||
{
|
{
|
||||||
|
String departmentCode = request.getDepartmentCode();
|
||||||
|
String year = request.getYear();
|
||||||
|
String month = request.getMonth();
|
||||||
|
|
||||||
|
boolean success = false;
|
||||||
|
String message = "";
|
||||||
|
|
||||||
|
Vector<CallerRankingItem> attachingRateRankingList = null;
|
||||||
|
Vector<CallerRankingItem> renewalRateRankingList = null;
|
||||||
|
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
CallerRankingList rankingList =
|
||||||
|
CallerRankingList.getCallerRankingList( departmentCode, year, month );
|
||||||
|
|
||||||
|
attachingRateRankingList = rankingList.getAttachingRateRankingList();
|
||||||
|
renewalRateRankingList = rankingList.getRenewalRateRankingList();
|
||||||
|
|
||||||
|
success = true;
|
||||||
|
message = "调用成功!";
|
||||||
|
}
|
||||||
|
catch ( SQLException error )
|
||||||
|
{
|
||||||
|
success = false;
|
||||||
|
message = "获取排行榜失败,原因:" + error.getMessage();
|
||||||
|
|
||||||
|
error.printStackTrace();
|
||||||
|
}
|
||||||
|
catch ( ClassNotFoundException error )
|
||||||
|
{
|
||||||
|
success = false;
|
||||||
|
message = "获取排行榜失败,原因:oracle驱动加载失败!" + error.getMessage();
|
||||||
|
|
||||||
|
error.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
RankingListResponse response = new RankingListResponse( success, message, departmentCode,
|
||||||
|
year, month, attachingRateRankingList, renewalRateRankingList );
|
||||||
|
|
||||||
|
return response;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -0,0 +1,56 @@
|
|||||||
|
/*
|
||||||
|
* @Author: Kane
|
||||||
|
* @Date: 2023-06-03 19:56:03
|
||||||
|
* @LastEditors: Kane
|
||||||
|
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/web/controllers/archievement/RankingList/RankingListRequest.java
|
||||||
|
* @Description:
|
||||||
|
*
|
||||||
|
* Copyright (c) ${2022} by Kane, All Rights Reserved.
|
||||||
|
*/
|
||||||
|
package com.cpic.xim.web.controllers.archievement.RankingList;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
|
|
||||||
|
public class RankingListRequest
|
||||||
|
{
|
||||||
|
public RankingListRequest() {}
|
||||||
|
|
||||||
|
public String getDepartmentCode()
|
||||||
|
{
|
||||||
|
return departmentCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDepartmentCode( String departmentCode )
|
||||||
|
{
|
||||||
|
this.departmentCode = departmentCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getYear()
|
||||||
|
{
|
||||||
|
return year;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setYear( String year )
|
||||||
|
{
|
||||||
|
this.year = year;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getMonth()
|
||||||
|
{
|
||||||
|
return month;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMonth( String month )
|
||||||
|
{
|
||||||
|
this.month = month;
|
||||||
|
}
|
||||||
|
|
||||||
|
@JsonProperty("departmentCode")
|
||||||
|
private String departmentCode;
|
||||||
|
|
||||||
|
@JsonProperty("year")
|
||||||
|
private String year;
|
||||||
|
|
||||||
|
@JsonProperty("month")
|
||||||
|
private String month;
|
||||||
|
}
|
@@ -0,0 +1,106 @@
|
|||||||
|
/*
|
||||||
|
* @Author: Kane
|
||||||
|
* @Date: 2023-06-03 20:18:46
|
||||||
|
* @LastEditors: Kane
|
||||||
|
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/web/controllers/archievement/RankingList/RankingListResponse.java
|
||||||
|
* @Description:
|
||||||
|
*
|
||||||
|
* Copyright (c) ${2022} by Kane, All Rights Reserved.
|
||||||
|
*/
|
||||||
|
package com.cpic.xim.web.controllers.archievement.RankingList;
|
||||||
|
|
||||||
|
import java.util.Vector;
|
||||||
|
import com.cpic.xim.utils.ranking.CallerRankingItem;
|
||||||
|
import com.cpic.xim.web.controllers.QueryResult;
|
||||||
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
|
|
||||||
|
public class RankingListResponse extends QueryResult
|
||||||
|
{
|
||||||
|
public RankingListResponse()
|
||||||
|
{
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
|
||||||
|
public RankingListResponse( boolean success, String message, String departmentCode, String year,
|
||||||
|
String month, Vector<CallerRankingItem> attachingRateRankingList,
|
||||||
|
Vector<CallerRankingItem> renewalRateRankingList)
|
||||||
|
{
|
||||||
|
super( success, message );
|
||||||
|
|
||||||
|
this.departmentCode = departmentCode;
|
||||||
|
this.year = year;
|
||||||
|
this.month = month;
|
||||||
|
this.attachingRateRankingList = attachingRateRankingList;
|
||||||
|
this.renewalRateRankingList = renewalRateRankingList;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDepartmentCode()
|
||||||
|
{
|
||||||
|
return departmentCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDepartmentCode( String departmentCode )
|
||||||
|
{
|
||||||
|
this.departmentCode = departmentCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getYear()
|
||||||
|
{
|
||||||
|
return year;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setYear( String year )
|
||||||
|
{
|
||||||
|
this.year = year;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getMonth()
|
||||||
|
{
|
||||||
|
return month;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMonth( String month )
|
||||||
|
{
|
||||||
|
this.month = month;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Vector<CallerRankingItem> getAttachingRateRankingList()
|
||||||
|
{
|
||||||
|
return attachingRateRankingList;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAttachingRateRankingList( Vector<CallerRankingItem> attachingRateRankingList )
|
||||||
|
{
|
||||||
|
this.attachingRateRankingList = attachingRateRankingList;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Vector<CallerRankingItem> getRenewalRateRankingList()
|
||||||
|
{
|
||||||
|
return renewalRateRankingList;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setRenewalRateRankingList( Vector<CallerRankingItem> renewalRateRankingList )
|
||||||
|
{
|
||||||
|
this.renewalRateRankingList = renewalRateRankingList;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 部门代码
|
||||||
|
@JsonProperty( "departmentCode" )
|
||||||
|
private String departmentCode;
|
||||||
|
|
||||||
|
// 统计年份
|
||||||
|
@JsonProperty( "year" )
|
||||||
|
private String year;
|
||||||
|
|
||||||
|
// 统计月份
|
||||||
|
@JsonProperty( "month" )
|
||||||
|
private String month;
|
||||||
|
|
||||||
|
// 车非融合率排行
|
||||||
|
@JsonProperty( "attachingRateRankingList" )
|
||||||
|
private Vector<CallerRankingItem> attachingRateRankingList;
|
||||||
|
|
||||||
|
// 续保率排行
|
||||||
|
@JsonProperty( "renewalRateRankingList" )
|
||||||
|
private Vector<CallerRankingItem> renewalRateRankingList;
|
||||||
|
}
|
@@ -0,0 +1,26 @@
|
|||||||
|
/*
|
||||||
|
* @Author: Kane
|
||||||
|
* @Date: 2023-06-19 10:01:43
|
||||||
|
* @LastEditors: Kane
|
||||||
|
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/web/controllers/caller/CallerController.java
|
||||||
|
* @Description:
|
||||||
|
*
|
||||||
|
* Copyright (c) ${2022} by Kane, All Rights Reserved.
|
||||||
|
*/
|
||||||
|
package com.cpic.xim.web.controllers.caller;
|
||||||
|
|
||||||
|
import org.springframework.stereotype.Controller;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
|
||||||
|
@Controller
|
||||||
|
@RequestMapping("/caller")
|
||||||
|
public class CallerController
|
||||||
|
{
|
||||||
|
public CallerController() {}
|
||||||
|
|
||||||
|
@RequestMapping("/quer_caller.do")
|
||||||
|
public static void queryCaller()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,24 @@
|
|||||||
|
/*
|
||||||
|
* @Author: Kane
|
||||||
|
* @Date: 2023-06-19 15:33:23
|
||||||
|
* @LastEditors: Kane
|
||||||
|
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/web/controllers/caller/QueryCallerRequest.java
|
||||||
|
* @Description:
|
||||||
|
*
|
||||||
|
* Copyright (c) ${2022} by Kane, All Rights Reserved.
|
||||||
|
*/
|
||||||
|
package com.cpic.xim.web.controllers.caller;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
|
|
||||||
|
public class QueryCallerRequest
|
||||||
|
{
|
||||||
|
public QueryCallerRequest() {}
|
||||||
|
|
||||||
|
private String callerCode;
|
||||||
|
private String callerName;
|
||||||
|
private String teamCode;
|
||||||
|
private String teamName;
|
||||||
|
private String departmentCode;
|
||||||
|
private String departmentName;
|
||||||
|
}
|
@@ -17,10 +17,14 @@ import javax.servlet.ServletRequest;
|
|||||||
import javax.servlet.ServletResponse;
|
import javax.servlet.ServletResponse;
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.http.HttpMethod;
|
import org.springframework.http.HttpMethod;
|
||||||
|
|
||||||
public class CrosFilter implements Filter
|
public class CrosFilter implements Filter
|
||||||
{
|
{
|
||||||
|
private static Logger logger = LoggerFactory.getLogger(CrosFilter.class);
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void doFilter( ServletRequest req, ServletResponse resp, FilterChain chain )
|
public void doFilter( ServletRequest req, ServletResponse resp, FilterChain chain )
|
||||||
throws ServletException, IOException
|
throws ServletException, IOException
|
||||||
@@ -30,7 +34,7 @@ public class CrosFilter implements Filter
|
|||||||
String method = request.getMethod();
|
String method = request.getMethod();
|
||||||
String originHeader = request.getHeader( "Origin" );
|
String originHeader = request.getHeader( "Origin" );
|
||||||
|
|
||||||
System.out.println( "收到" + method + "请求,来自" + originHeader);
|
logger.info( "收到" + method + "请求,来自" + originHeader);
|
||||||
|
|
||||||
// 如果是Options请求
|
// 如果是Options请求
|
||||||
if ( method.equals(HttpMethod.OPTIONS.toString()) )
|
if ( method.equals(HttpMethod.OPTIONS.toString()) )
|
||||||
|
@@ -0,0 +1,22 @@
|
|||||||
|
<Configuration status="WARN" monitorInterval="300">
|
||||||
|
<Appenders>
|
||||||
|
<Console name="Console" target="SYSTEM_OUT">
|
||||||
|
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} ### %msg%n" />
|
||||||
|
<ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY" />
|
||||||
|
</Console>
|
||||||
|
<RollingFile name="rolling_file" filename="./logs/app.log"
|
||||||
|
filePattern="./logs/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz">
|
||||||
|
<PatternLayout pattern="%d{yyyy-MM-dd 'at' HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n"/>
|
||||||
|
<SizeBasedTriggeringPolicy size="50MB" />
|
||||||
|
<DefaultRolloverStrategy max="20" />
|
||||||
|
</RollingFile>
|
||||||
|
</Appenders>
|
||||||
|
<Loggers>
|
||||||
|
<Logger name="mylog" level="info" additivity="false">
|
||||||
|
<AppenderRef ref="rolling_file" />
|
||||||
|
</Logger>
|
||||||
|
<Root level="info">
|
||||||
|
<AppenderRef ref="Console" />
|
||||||
|
</Root>
|
||||||
|
</Loggers>
|
||||||
|
</Configuration>
|
@@ -0,0 +1,66 @@
|
|||||||
|
/*
|
||||||
|
* @Author: Kane
|
||||||
|
* @Date: 2023-05-15 14:59:26
|
||||||
|
* @LastEditors: Kane
|
||||||
|
* @FilePath: /desktop_archievement_backend/src/test/java/com/cpic/xim/DesktopArchievement/test/DesktopArchievementTest.java
|
||||||
|
* @Description:
|
||||||
|
*
|
||||||
|
* Copyright (c) ${2022} by Kane, All Rights Reserved.
|
||||||
|
*/
|
||||||
|
package com.cpic.xim.DesktopArchievement.test;
|
||||||
|
|
||||||
|
import java.sql.SQLException;
|
||||||
|
import org.junit.Test;
|
||||||
|
import com.cpic.xim.utils.archievement.DepartmentArchievement;
|
||||||
|
import com.cpic.xim.utils.ranking.CallerRankingList;
|
||||||
|
|
||||||
|
@SuppressWarnings( "all" )
|
||||||
|
public class DesktopArchievementTest
|
||||||
|
{
|
||||||
|
@Test
|
||||||
|
public void testQueryArchievement()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
DepartmentArchievement.queryDepartmentArchievement( "QDI" );
|
||||||
|
}
|
||||||
|
catch ( SQLException error )
|
||||||
|
{
|
||||||
|
System.out.println( error.getMessage() );
|
||||||
|
}
|
||||||
|
catch ( ClassNotFoundException error )
|
||||||
|
{
|
||||||
|
System.out.println( error.getMessage() );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testCallerRankingList()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
CallerRankingList rankingList =
|
||||||
|
CallerRankingList.getCallerRankingList( "QDI", "2023", "05" );
|
||||||
|
}
|
||||||
|
catch ( SQLException error )
|
||||||
|
{
|
||||||
|
error.printStackTrace();
|
||||||
|
}
|
||||||
|
catch ( ClassNotFoundException error )
|
||||||
|
{
|
||||||
|
error.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testArray()
|
||||||
|
{
|
||||||
|
int[] num =
|
||||||
|
{ 12, 3, 4, 5, 4, 45654,};
|
||||||
|
|
||||||
|
for ( int item : num )
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user