Compare commits
	
		
			8 Commits
		
	
	
		
			mybatis
			...
			feature-pe
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| bc7e56c336 | |||
| f54f6bbfea | |||
| 21a50f4c61 | |||
| 075da72a73 | |||
| ae68f047f4 | |||
| 7c5da24f5a | |||
| 4d03abde27 | |||
| 08ea359cd1 | 
| @@ -202,9 +202,7 @@ CREATE OR REPLACE PACKAGE BODY TELSALE_ARCHIEVEMENT_PKG IS | ||||
|                AND ǩ<><C7A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD> >= TO_DATE(TO_CHAR(SYSDATE, | ||||
|                                            'yyyy') || '-01-01 00:00:00', | ||||
|                                    'yyyy-mm-dd hh24:mi:ss') | ||||
|                AND ǩ<><C7A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD> < TO_DATE(TO_CHAR(SYSDATE, | ||||
|                                           'yyyy-mm') || '-01 00:00:00', | ||||
|                                   'yyyy-mm-dd hh24:mi:ss') | ||||
|                AND ǩ<><C7A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <= SYSDATE | ||||
|              GROUP BY CF.<2E>·<EFBFBD> | ||||
|              ORDER BY CF.<2E>·<EFBFBD>; | ||||
|     END; | ||||
|   | ||||
| @@ -67,7 +67,7 @@ module.exports = { | ||||
|                     js: "espree", | ||||
|                     "<template>": "espree", | ||||
|                 }, | ||||
|                 // project: "./tsconfig.json", | ||||
|                 project: "./tsconfig.json", | ||||
|                 extraFileExtensions: [".vue",], | ||||
|             }, | ||||
|             plugins: ["eslint-plugin-vue",], | ||||
| @@ -75,7 +75,7 @@ module.exports = { | ||||
|                 "plugin:vue/vue3-essential", | ||||
|                 "plugin:vue/recommended", | ||||
|                 "eslint:recommended", | ||||
|                 // "standard-with-typescript",  | ||||
|                 "standard-with-typescript",  | ||||
|                 "plugin:@typescript-eslint/eslint-recommended", | ||||
|                 "plugin:@typescript-eslint/recommended", | ||||
|             ], | ||||
|   | ||||
							
								
								
									
										138
									
								
								code/web/task_schedule/package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										138
									
								
								code/web/task_schedule/package-lock.json
									
									
									
										generated
									
									
									
								
							| @@ -8,7 +8,7 @@ | ||||
|             "name": "task_schedule", | ||||
|             "version": "0.0.0", | ||||
|             "dependencies": { | ||||
|                 "@babel/eslint-parser": "^7.22.11", | ||||
|                 "@babel/eslint-parser": "^7.22.15", | ||||
|                 "@element-plus/icons-vue": "^2.1.0", | ||||
|                 "@rushstack/eslint-patch": "^1.3.3", | ||||
|                 "@vue/eslint-config-typescript": "^11.0.3", | ||||
| @@ -23,9 +23,9 @@ | ||||
|                 "vuex": "^4.1.0" | ||||
|             }, | ||||
|             "devDependencies": { | ||||
|                 "@babel/eslint-parser": "^7.22.11", | ||||
|                 "@typescript-eslint/eslint-plugin": "^6.5.0", | ||||
|                 "@vitejs/plugin-vue": "^4.3.3", | ||||
|                 "@babel/eslint-parser": "^7.22.15", | ||||
|                 "@typescript-eslint/eslint-plugin": "^6.6.0", | ||||
|                 "@vitejs/plugin-vue": "^4.3.4", | ||||
|                 "@vue/cli-plugin-eslint": "^5.0.8", | ||||
|                 "axios": "~1.5.0", | ||||
|                 "eslint-config-recommended": "^4.1.0", | ||||
| @@ -115,9 +115,9 @@ | ||||
|             } | ||||
|         }, | ||||
|         "node_modules/@babel/eslint-parser": { | ||||
|             "version": "7.22.11", | ||||
|             "resolved": "https://registry.npmmirror.com/@babel/eslint-parser/-/eslint-parser-7.22.11.tgz", | ||||
|             "integrity": "sha512-YjOYZ3j7TjV8OhLW6NCtyg8G04uStATEUe5eiLuCZaXz2VSDQ3dsAtm2D+TuQyAqNMUK2WacGo0/uma9Pein1w==", | ||||
|             "version": "7.22.15", | ||||
|             "resolved": "https://registry.npmmirror.com/@babel/eslint-parser/-/eslint-parser-7.22.15.tgz", | ||||
|             "integrity": "sha512-yc8OOBIQk1EcRrpizuARSQS0TWAcOMpEJ1aafhNznaeYkeL+OhqnDObGFylB8ka8VFF/sZc+S4RzHyO+3LjQxg==", | ||||
|             "dev": true, | ||||
|             "dependencies": { | ||||
|                 "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1", | ||||
| @@ -1560,16 +1560,16 @@ | ||||
|             } | ||||
|         }, | ||||
|         "node_modules/@typescript-eslint/eslint-plugin": { | ||||
|             "version": "6.5.0", | ||||
|             "resolved": "https://registry.npmmirror.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.5.0.tgz", | ||||
|             "integrity": "sha512-2pktILyjvMaScU6iK3925uvGU87E+N9rh372uGZgiMYwafaw9SXq86U04XPq3UH6tzRvNgBsub6x2DacHc33lw==", | ||||
|             "version": "6.6.0", | ||||
|             "resolved": "https://registry.npmmirror.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.6.0.tgz", | ||||
|             "integrity": "sha512-CW9YDGTQnNYMIo5lMeuiIG08p4E0cXrXTbcZ2saT/ETE7dWUrNxlijsQeU04qAAKkILiLzdQz+cGFxCJjaZUmA==", | ||||
|             "dev": true, | ||||
|             "dependencies": { | ||||
|                 "@eslint-community/regexpp": "^4.5.1", | ||||
|                 "@typescript-eslint/scope-manager": "6.5.0", | ||||
|                 "@typescript-eslint/type-utils": "6.5.0", | ||||
|                 "@typescript-eslint/utils": "6.5.0", | ||||
|                 "@typescript-eslint/visitor-keys": "6.5.0", | ||||
|                 "@typescript-eslint/scope-manager": "6.6.0", | ||||
|                 "@typescript-eslint/type-utils": "6.6.0", | ||||
|                 "@typescript-eslint/utils": "6.6.0", | ||||
|                 "@typescript-eslint/visitor-keys": "6.6.0", | ||||
|                 "debug": "^4.3.4", | ||||
|                 "graphemer": "^1.4.0", | ||||
|                 "ignore": "^5.2.4", | ||||
| @@ -1591,34 +1591,34 @@ | ||||
|             } | ||||
|         }, | ||||
|         "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/scope-manager": { | ||||
|             "version": "6.5.0", | ||||
|             "resolved": "https://registry.npmmirror.com/@typescript-eslint/scope-manager/-/scope-manager-6.5.0.tgz", | ||||
|             "integrity": "sha512-A8hZ7OlxURricpycp5kdPTH3XnjG85UpJS6Fn4VzeoH4T388gQJ/PGP4ole5NfKt4WDVhmLaQ/dBLNDC4Xl/Kw==", | ||||
|             "version": "6.6.0", | ||||
|             "resolved": "https://registry.npmmirror.com/@typescript-eslint/scope-manager/-/scope-manager-6.6.0.tgz", | ||||
|             "integrity": "sha512-pT08u5W/GT4KjPUmEtc2kSYvrH8x89cVzkA0Sy2aaOUIw6YxOIjA8ilwLr/1fLjOedX1QAuBpG9XggWqIIfERw==", | ||||
|             "dev": true, | ||||
|             "dependencies": { | ||||
|                 "@typescript-eslint/types": "6.5.0", | ||||
|                 "@typescript-eslint/visitor-keys": "6.5.0" | ||||
|                 "@typescript-eslint/types": "6.6.0", | ||||
|                 "@typescript-eslint/visitor-keys": "6.6.0" | ||||
|             }, | ||||
|             "engines": { | ||||
|                 "node": "^16.0.0 || >=18.0.0" | ||||
|             } | ||||
|         }, | ||||
|         "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/types": { | ||||
|             "version": "6.5.0", | ||||
|             "resolved": "https://registry.npmmirror.com/@typescript-eslint/types/-/types-6.5.0.tgz", | ||||
|             "integrity": "sha512-eqLLOEF5/lU8jW3Bw+8auf4lZSbbljHR2saKnYqON12G/WsJrGeeDHWuQePoEf9ro22+JkbPfWQwKEC5WwLQ3w==", | ||||
|             "version": "6.6.0", | ||||
|             "resolved": "https://registry.npmmirror.com/@typescript-eslint/types/-/types-6.6.0.tgz", | ||||
|             "integrity": "sha512-CB6QpJQ6BAHlJXdwUmiaXDBmTqIE2bzGTDLADgvqtHWuhfNP3rAOK7kAgRMAET5rDRr9Utt+qAzRBdu3AhR3sg==", | ||||
|             "dev": true, | ||||
|             "engines": { | ||||
|                 "node": "^16.0.0 || >=18.0.0" | ||||
|             } | ||||
|         }, | ||||
|         "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/visitor-keys": { | ||||
|             "version": "6.5.0", | ||||
|             "resolved": "https://registry.npmmirror.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.5.0.tgz", | ||||
|             "integrity": "sha512-yCB/2wkbv3hPsh02ZS8dFQnij9VVQXJMN/gbQsaaY+zxALkZnxa/wagvLEFsAWMPv7d7lxQmNsIzGU1w/T/WyA==", | ||||
|             "version": "6.6.0", | ||||
|             "resolved": "https://registry.npmmirror.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.6.0.tgz", | ||||
|             "integrity": "sha512-L61uJT26cMOfFQ+lMZKoJNbAEckLe539VhTxiGHrWl5XSKQgA0RTBZJW2HFPy5T0ZvPVSD93QsrTKDkfNwJGyQ==", | ||||
|             "dev": true, | ||||
|             "dependencies": { | ||||
|                 "@typescript-eslint/types": "6.5.0", | ||||
|                 "@typescript-eslint/types": "6.6.0", | ||||
|                 "eslint-visitor-keys": "^3.4.1" | ||||
|             }, | ||||
|             "engines": { | ||||
| @@ -1705,13 +1705,13 @@ | ||||
|             } | ||||
|         }, | ||||
|         "node_modules/@typescript-eslint/type-utils": { | ||||
|             "version": "6.5.0", | ||||
|             "resolved": "https://registry.npmmirror.com/@typescript-eslint/type-utils/-/type-utils-6.5.0.tgz", | ||||
|             "integrity": "sha512-f7OcZOkRivtujIBQ4yrJNIuwyCQO1OjocVqntl9dgSIZAdKqicj3xFDqDOzHDlGCZX990LqhLQXWRnQvsapq8A==", | ||||
|             "version": "6.6.0", | ||||
|             "resolved": "https://registry.npmmirror.com/@typescript-eslint/type-utils/-/type-utils-6.6.0.tgz", | ||||
|             "integrity": "sha512-8m16fwAcEnQc69IpeDyokNO+D5spo0w1jepWWY2Q6y5ZKNuj5EhVQXjtVAeDDqvW6Yg7dhclbsz6rTtOvcwpHg==", | ||||
|             "dev": true, | ||||
|             "dependencies": { | ||||
|                 "@typescript-eslint/typescript-estree": "6.5.0", | ||||
|                 "@typescript-eslint/utils": "6.5.0", | ||||
|                 "@typescript-eslint/typescript-estree": "6.6.0", | ||||
|                 "@typescript-eslint/utils": "6.6.0", | ||||
|                 "debug": "^4.3.4", | ||||
|                 "ts-api-utils": "^1.0.1" | ||||
|             }, | ||||
| @@ -1728,22 +1728,22 @@ | ||||
|             } | ||||
|         }, | ||||
|         "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/types": { | ||||
|             "version": "6.5.0", | ||||
|             "resolved": "https://registry.npmmirror.com/@typescript-eslint/types/-/types-6.5.0.tgz", | ||||
|             "integrity": "sha512-eqLLOEF5/lU8jW3Bw+8auf4lZSbbljHR2saKnYqON12G/WsJrGeeDHWuQePoEf9ro22+JkbPfWQwKEC5WwLQ3w==", | ||||
|             "version": "6.6.0", | ||||
|             "resolved": "https://registry.npmmirror.com/@typescript-eslint/types/-/types-6.6.0.tgz", | ||||
|             "integrity": "sha512-CB6QpJQ6BAHlJXdwUmiaXDBmTqIE2bzGTDLADgvqtHWuhfNP3rAOK7kAgRMAET5rDRr9Utt+qAzRBdu3AhR3sg==", | ||||
|             "dev": true, | ||||
|             "engines": { | ||||
|                 "node": "^16.0.0 || >=18.0.0" | ||||
|             } | ||||
|         }, | ||||
|         "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/typescript-estree": { | ||||
|             "version": "6.5.0", | ||||
|             "resolved": "https://registry.npmmirror.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.5.0.tgz", | ||||
|             "integrity": "sha512-q0rGwSe9e5Kk/XzliB9h2LBc9tmXX25G0833r7kffbl5437FPWb2tbpIV9wAATebC/018pGa9fwPDuvGN+LxWQ==", | ||||
|             "version": "6.6.0", | ||||
|             "resolved": "https://registry.npmmirror.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.6.0.tgz", | ||||
|             "integrity": "sha512-hMcTQ6Al8MP2E6JKBAaSxSVw5bDhdmbCEhGW/V8QXkb9oNsFkA4SBuOMYVPxD3jbtQ4R/vSODBsr76R6fP3tbA==", | ||||
|             "dev": true, | ||||
|             "dependencies": { | ||||
|                 "@typescript-eslint/types": "6.5.0", | ||||
|                 "@typescript-eslint/visitor-keys": "6.5.0", | ||||
|                 "@typescript-eslint/types": "6.6.0", | ||||
|                 "@typescript-eslint/visitor-keys": "6.6.0", | ||||
|                 "debug": "^4.3.4", | ||||
|                 "globby": "^11.1.0", | ||||
|                 "is-glob": "^4.0.3", | ||||
| @@ -1760,12 +1760,12 @@ | ||||
|             } | ||||
|         }, | ||||
|         "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/visitor-keys": { | ||||
|             "version": "6.5.0", | ||||
|             "resolved": "https://registry.npmmirror.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.5.0.tgz", | ||||
|             "integrity": "sha512-yCB/2wkbv3hPsh02ZS8dFQnij9VVQXJMN/gbQsaaY+zxALkZnxa/wagvLEFsAWMPv7d7lxQmNsIzGU1w/T/WyA==", | ||||
|             "version": "6.6.0", | ||||
|             "resolved": "https://registry.npmmirror.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.6.0.tgz", | ||||
|             "integrity": "sha512-L61uJT26cMOfFQ+lMZKoJNbAEckLe539VhTxiGHrWl5XSKQgA0RTBZJW2HFPy5T0ZvPVSD93QsrTKDkfNwJGyQ==", | ||||
|             "dev": true, | ||||
|             "dependencies": { | ||||
|                 "@typescript-eslint/types": "6.5.0", | ||||
|                 "@typescript-eslint/types": "6.6.0", | ||||
|                 "eslint-visitor-keys": "^3.4.1" | ||||
|             }, | ||||
|             "engines": { | ||||
| @@ -1880,17 +1880,17 @@ | ||||
|             "dev": true | ||||
|         }, | ||||
|         "node_modules/@typescript-eslint/utils": { | ||||
|             "version": "6.5.0", | ||||
|             "resolved": "https://registry.npmmirror.com/@typescript-eslint/utils/-/utils-6.5.0.tgz", | ||||
|             "integrity": "sha512-9nqtjkNykFzeVtt9Pj6lyR9WEdd8npPhhIPM992FWVkZuS6tmxHfGVnlUcjpUP2hv8r4w35nT33mlxd+Be1ACQ==", | ||||
|             "version": "6.6.0", | ||||
|             "resolved": "https://registry.npmmirror.com/@typescript-eslint/utils/-/utils-6.6.0.tgz", | ||||
|             "integrity": "sha512-mPHFoNa2bPIWWglWYdR0QfY9GN0CfvvXX1Sv6DlSTive3jlMTUy+an67//Gysc+0Me9pjitrq0LJp0nGtLgftw==", | ||||
|             "dev": true, | ||||
|             "dependencies": { | ||||
|                 "@eslint-community/eslint-utils": "^4.4.0", | ||||
|                 "@types/json-schema": "^7.0.12", | ||||
|                 "@types/semver": "^7.5.0", | ||||
|                 "@typescript-eslint/scope-manager": "6.5.0", | ||||
|                 "@typescript-eslint/types": "6.5.0", | ||||
|                 "@typescript-eslint/typescript-estree": "6.5.0", | ||||
|                 "@typescript-eslint/scope-manager": "6.6.0", | ||||
|                 "@typescript-eslint/types": "6.6.0", | ||||
|                 "@typescript-eslint/typescript-estree": "6.6.0", | ||||
|                 "semver": "^7.5.4" | ||||
|             }, | ||||
|             "engines": { | ||||
| @@ -1901,35 +1901,35 @@ | ||||
|             } | ||||
|         }, | ||||
|         "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/scope-manager": { | ||||
|             "version": "6.5.0", | ||||
|             "resolved": "https://registry.npmmirror.com/@typescript-eslint/scope-manager/-/scope-manager-6.5.0.tgz", | ||||
|             "integrity": "sha512-A8hZ7OlxURricpycp5kdPTH3XnjG85UpJS6Fn4VzeoH4T388gQJ/PGP4ole5NfKt4WDVhmLaQ/dBLNDC4Xl/Kw==", | ||||
|             "version": "6.6.0", | ||||
|             "resolved": "https://registry.npmmirror.com/@typescript-eslint/scope-manager/-/scope-manager-6.6.0.tgz", | ||||
|             "integrity": "sha512-pT08u5W/GT4KjPUmEtc2kSYvrH8x89cVzkA0Sy2aaOUIw6YxOIjA8ilwLr/1fLjOedX1QAuBpG9XggWqIIfERw==", | ||||
|             "dev": true, | ||||
|             "dependencies": { | ||||
|                 "@typescript-eslint/types": "6.5.0", | ||||
|                 "@typescript-eslint/visitor-keys": "6.5.0" | ||||
|                 "@typescript-eslint/types": "6.6.0", | ||||
|                 "@typescript-eslint/visitor-keys": "6.6.0" | ||||
|             }, | ||||
|             "engines": { | ||||
|                 "node": "^16.0.0 || >=18.0.0" | ||||
|             } | ||||
|         }, | ||||
|         "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/types": { | ||||
|             "version": "6.5.0", | ||||
|             "resolved": "https://registry.npmmirror.com/@typescript-eslint/types/-/types-6.5.0.tgz", | ||||
|             "integrity": "sha512-eqLLOEF5/lU8jW3Bw+8auf4lZSbbljHR2saKnYqON12G/WsJrGeeDHWuQePoEf9ro22+JkbPfWQwKEC5WwLQ3w==", | ||||
|             "version": "6.6.0", | ||||
|             "resolved": "https://registry.npmmirror.com/@typescript-eslint/types/-/types-6.6.0.tgz", | ||||
|             "integrity": "sha512-CB6QpJQ6BAHlJXdwUmiaXDBmTqIE2bzGTDLADgvqtHWuhfNP3rAOK7kAgRMAET5rDRr9Utt+qAzRBdu3AhR3sg==", | ||||
|             "dev": true, | ||||
|             "engines": { | ||||
|                 "node": "^16.0.0 || >=18.0.0" | ||||
|             } | ||||
|         }, | ||||
|         "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/typescript-estree": { | ||||
|             "version": "6.5.0", | ||||
|             "resolved": "https://registry.npmmirror.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.5.0.tgz", | ||||
|             "integrity": "sha512-q0rGwSe9e5Kk/XzliB9h2LBc9tmXX25G0833r7kffbl5437FPWb2tbpIV9wAATebC/018pGa9fwPDuvGN+LxWQ==", | ||||
|             "version": "6.6.0", | ||||
|             "resolved": "https://registry.npmmirror.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.6.0.tgz", | ||||
|             "integrity": "sha512-hMcTQ6Al8MP2E6JKBAaSxSVw5bDhdmbCEhGW/V8QXkb9oNsFkA4SBuOMYVPxD3jbtQ4R/vSODBsr76R6fP3tbA==", | ||||
|             "dev": true, | ||||
|             "dependencies": { | ||||
|                 "@typescript-eslint/types": "6.5.0", | ||||
|                 "@typescript-eslint/visitor-keys": "6.5.0", | ||||
|                 "@typescript-eslint/types": "6.6.0", | ||||
|                 "@typescript-eslint/visitor-keys": "6.6.0", | ||||
|                 "debug": "^4.3.4", | ||||
|                 "globby": "^11.1.0", | ||||
|                 "is-glob": "^4.0.3", | ||||
| @@ -1946,12 +1946,12 @@ | ||||
|             } | ||||
|         }, | ||||
|         "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/visitor-keys": { | ||||
|             "version": "6.5.0", | ||||
|             "resolved": "https://registry.npmmirror.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.5.0.tgz", | ||||
|             "integrity": "sha512-yCB/2wkbv3hPsh02ZS8dFQnij9VVQXJMN/gbQsaaY+zxALkZnxa/wagvLEFsAWMPv7d7lxQmNsIzGU1w/T/WyA==", | ||||
|             "version": "6.6.0", | ||||
|             "resolved": "https://registry.npmmirror.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.6.0.tgz", | ||||
|             "integrity": "sha512-L61uJT26cMOfFQ+lMZKoJNbAEckLe539VhTxiGHrWl5XSKQgA0RTBZJW2HFPy5T0ZvPVSD93QsrTKDkfNwJGyQ==", | ||||
|             "dev": true, | ||||
|             "dependencies": { | ||||
|                 "@typescript-eslint/types": "6.5.0", | ||||
|                 "@typescript-eslint/types": "6.6.0", | ||||
|                 "eslint-visitor-keys": "^3.4.1" | ||||
|             }, | ||||
|             "engines": { | ||||
| @@ -2023,9 +2023,9 @@ | ||||
|             } | ||||
|         }, | ||||
|         "node_modules/@vitejs/plugin-vue": { | ||||
|             "version": "4.3.3", | ||||
|             "resolved": "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-4.3.3.tgz", | ||||
|             "integrity": "sha512-ssxyhIAZqB0TrpUg6R0cBpCuMk9jTIlO1GNSKKQD6S8VjnXi6JXKfUXjSsxey9IwQiaRGsO1WnW9Rkl1L6AJVw==", | ||||
|             "version": "4.3.4", | ||||
|             "resolved": "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-4.3.4.tgz", | ||||
|             "integrity": "sha512-ciXNIHKPriERBisHFBvnTbfKa6r9SAesOYXeGDzgegcvy9Q4xdScSHAmKbNT0M3O0S9LKhIf5/G+UYG4NnnzYw==", | ||||
|             "dev": true, | ||||
|             "engines": { | ||||
|                 "node": "^14.18.0 || >=16.0.0" | ||||
|   | ||||
| @@ -9,7 +9,7 @@ | ||||
|         "preview": "vite preview" | ||||
|     }, | ||||
|     "dependencies": { | ||||
|         "@babel/eslint-parser": "^7.22.11", | ||||
|         "@babel/eslint-parser": "^7.22.15", | ||||
|         "@element-plus/icons-vue": "^2.1.0", | ||||
|         "@rushstack/eslint-patch": "^1.3.3", | ||||
|         "@vue/eslint-config-typescript": "^11.0.3", | ||||
| @@ -24,9 +24,9 @@ | ||||
|         "vuex": "^4.1.0" | ||||
|     }, | ||||
|     "devDependencies": { | ||||
|         "@babel/eslint-parser": "^7.22.11", | ||||
|         "@typescript-eslint/eslint-plugin": "^6.5.0", | ||||
|         "@vitejs/plugin-vue": "^4.3.3", | ||||
|         "@babel/eslint-parser": "^7.22.15", | ||||
|         "@typescript-eslint/eslint-plugin": "^6.6.0", | ||||
|         "@vitejs/plugin-vue": "^4.3.4", | ||||
|         "@vue/cli-plugin-eslint": "^5.0.8", | ||||
|         "axios": "~1.5.0", | ||||
|         "eslint-config-recommended": "^4.1.0", | ||||
|   | ||||
| @@ -29,11 +29,11 @@ export default { | ||||
|     setup( props ) | ||||
|     { | ||||
|         const ui = reactive({ | ||||
|             mensualList:[], | ||||
|             mensualList: [], | ||||
|         }); | ||||
|  | ||||
|         // 设置图表 | ||||
|         const initCharts = () => | ||||
|         const initCharts = (): void => | ||||
|         { | ||||
|             console.log( "每月业绩", props.chartData ); | ||||
|             const chartDom = document.getElementById( "chartWrapper" ); | ||||
| @@ -55,7 +55,7 @@ export default { | ||||
|                 ], | ||||
|             }; | ||||
|  | ||||
|             option && myChart.setOption( option ); | ||||
|             myChart.setOption( option ); | ||||
|  | ||||
|             window.onresize = function () | ||||
|             { | ||||
|   | ||||
| @@ -0,0 +1,166 @@ | ||||
| <!-- | ||||
|  * @Author: Kane | ||||
|  * @Date: 2023-08-30 14:08:57 | ||||
|  * @LastEditors: Kane | ||||
|  * @FilePath: /task_schedule/src/components/CallerArchievementComponent.vue | ||||
|  * @Description: | ||||
|  * | ||||
|  * Copyright (c) ${2022} by Kane, All Rights Reserved. | ||||
| --> | ||||
| <template> | ||||
|     <div class="caller-archievment-wrapper"> | ||||
|         <h1>{{ CallerName }}</h1> | ||||
|         <table> | ||||
|             <tr> | ||||
|                 <th>当月保费</th><td>{{ PresentMonthPremium }} 万元</td> | ||||
|             </tr> | ||||
|             <tr> | ||||
|                 <th>车非渗透率</th><td>{{ props.attachingRate }}%</td> | ||||
|             </tr> | ||||
|             <tr> | ||||
|                 <th>续保率</th><td>{{ props.renewalRate }}%</td> | ||||
|             </tr> | ||||
|         </table> | ||||
|     </div> | ||||
| </template> | ||||
| <script lang="ts"> | ||||
| import { computed } from "vue"; | ||||
| interface CallerArchievementComponentUI | ||||
| { | ||||
|     callerName: string, | ||||
|     thisMonthPremium: number, | ||||
|     attachingRate: string, | ||||
|     renewalRate: string, | ||||
| } | ||||
|  | ||||
| export default { | ||||
|     name: "CallerArchievementComponent", | ||||
|     props: { | ||||
|         callerName: { | ||||
|             type: String, | ||||
|             require: true, | ||||
|             default: (): string => "", | ||||
|         }, | ||||
|         thisMonthPremium: { | ||||
|             type: Number, | ||||
|             require: true, | ||||
|             default: (): number => 0, | ||||
|         }, | ||||
|         attachingRate: { | ||||
|             type: String, | ||||
|             require: true, | ||||
|             default: (): string => "0.0", | ||||
|         }, | ||||
|         renewalRate: { | ||||
|             type: String, | ||||
|             require: true, | ||||
|             default: (): string => "0.0", | ||||
|         }, | ||||
|     }, | ||||
|     setup( props ) | ||||
|     { | ||||
|         const ui: CallerArchievementComponentUI = { | ||||
|             callerName: "", | ||||
|             thisMonthPremium: 0, | ||||
|             attachingRate: "0.0", | ||||
|             renewalRate: "0.0", | ||||
|         }; | ||||
|  | ||||
|         const PresentMonthPremium = computed((): string => | ||||
|         { | ||||
|             return ( props.thisMonthPremium / 10000 ).toFixed( 2 ); | ||||
|         }); | ||||
|  | ||||
|         const CallerName = computed((): string => | ||||
|         { | ||||
|             return props.callerName; | ||||
|         }); | ||||
|  | ||||
|         return { | ||||
|             CallerName, | ||||
|             PresentMonthPremium, | ||||
|             ui, | ||||
|             props, | ||||
|         }; | ||||
|     }, | ||||
| }; | ||||
| </script> | ||||
| <style scoped lang="scss"> | ||||
| .caller-archievment-wrapper | ||||
| { | ||||
|     width: 300px; | ||||
|     height: 120px; | ||||
|  | ||||
|     border-radius: 5px; | ||||
|  | ||||
|     margin-bottom: 30px; | ||||
|  | ||||
|     display: flex; | ||||
|     flex-direction: column; | ||||
|     justify-content: flex-start; | ||||
|     align-items: center; | ||||
|  | ||||
|     background-color: #fff; | ||||
|     color: #4f4f4f; | ||||
|     font-size: 15px; | ||||
|  | ||||
|     h1 { | ||||
|         background-color: #fecb96; | ||||
|         width: 100%; | ||||
|         text-align: center; | ||||
|         border-radius: 5px 5px 0px 0px; | ||||
|         margin: 0px; | ||||
|         padding: 5px 0px; | ||||
|  | ||||
|         color: #da3703; | ||||
|  | ||||
|         font: { | ||||
|             size: 1.2rem; | ||||
|             weight: 100; | ||||
|             family: "FZ-ZHUOHEI"; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     table { | ||||
|         border-collapse: collapse; | ||||
|         border-radius: 0px 0px 5px 5px; | ||||
|         width: 100%; | ||||
|  | ||||
|         margin-top: 5px; | ||||
|  | ||||
|         background-color: #ffffff; | ||||
|  | ||||
|         font: { | ||||
|             size: 14px; | ||||
|         } | ||||
|  | ||||
|         th,td { | ||||
|             padding: 9px; | ||||
|             border-bottom: 1.5px solid #ebeef5; | ||||
|         } | ||||
|  | ||||
|         th { | ||||
|             width: 5.2rem; | ||||
|             text-align: right; | ||||
|         } | ||||
|  | ||||
|         th.caller-name { | ||||
|             text-align: center; | ||||
|             background-color: yellow; | ||||
|         } | ||||
|  | ||||
|         td { | ||||
|             text-align: left; | ||||
|         } | ||||
|  | ||||
|         tr:nth-child(even) { | ||||
|             background-color: #f5f6f7; | ||||
|         } | ||||
|  | ||||
|         tr:last-child td,th { | ||||
|             border-bottom: none; | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
| </style> | ||||
| @@ -103,7 +103,7 @@ export default { | ||||
|     // border: 1px solid red; | ||||
|     border-radius: 5px; | ||||
|     width: 300px; | ||||
|     height: 250px; | ||||
|     height: 260px; | ||||
| } | ||||
|  | ||||
| .rankinglist-index { | ||||
|   | ||||
| @@ -49,31 +49,32 @@ interface MenusalArchievementItem // 每月业绩清单的项目 | ||||
|  */ | ||||
| function queryDepartmentArchievement( departmentInfo: Department, render: any ): void | ||||
| { | ||||
|     // 默认的部门业绩对象 | ||||
|     const archievement: DepartmentArchievement = { | ||||
|         success: false, | ||||
|         message: "", | ||||
|         total_archievement: 0, | ||||
|         mensual_archievement_list: [], | ||||
|         insurance_renewal_rate: "", | ||||
|         attaching_rate: "", | ||||
|         leading_reward_gainers: [], | ||||
|         advance_reward_gainers: [], | ||||
|         backward_list: [], | ||||
|     }; | ||||
|  | ||||
|     instance.request({ | ||||
|         method: "post", | ||||
|         url: API_URL.URL_DEPARTMENT_ARCHIEVEMENT, | ||||
|         data: departmentInfo, | ||||
|     }) | ||||
|         // 请求结束,将请求的结果写入业绩对象,然后调用功能渲染函数。 | ||||
|         .then(( response ) => | ||||
|         { | ||||
|             const archievement: DepartmentArchievement = { | ||||
|                 success: false, | ||||
|                 message: "", | ||||
|                 total_archievement: 0, | ||||
|                 mensual_archievement_list: [], | ||||
|                 insurance_renewal_rate: "", | ||||
|                 attaching_rate: "", | ||||
|                 leading_reward_gainers: [], | ||||
|                 advance_reward_gainers: [], | ||||
|                 backward_list: [], | ||||
|             }; | ||||
|  | ||||
|             const data = response.data ?? {}; | ||||
|  | ||||
|             archievement.success = data.success ?? false; | ||||
|             archievement.message = data.message ?? ""; | ||||
|             archievement.message = data.message ?? "服务器没有返回调用结果消息,请检查日志!"; | ||||
|             archievement.total_archievement = data.total_archievement; | ||||
|             // archievement.mensual_archievement_list = data.mensual_archievement_list ?? []; | ||||
|             archievement.mensual_archievement_list = []; | ||||
|             archievement.insurance_renewal_rate = data.insurance_renewal_rate ?? "0.0"; | ||||
|             archievement.attaching_rate = data.attaching_rate ?? "0.0"; | ||||
| @@ -90,12 +91,25 @@ function queryDepartmentArchievement( departmentInfo: Department, render: any ): | ||||
|  | ||||
|             console.log( "每月业绩", archievement ); | ||||
|  | ||||
|             // 渲染数据 | ||||
|             render( archievement ); | ||||
|             // 调用渲染函数 | ||||
|             if ( render !== undefined ) | ||||
|             { | ||||
|                 render( archievement ); | ||||
|             } | ||||
|         }) | ||||
|         // 请求失败,将失败原因写入业绩对象,调用渲染函数 | ||||
|         .catch(( error ) => | ||||
|         { | ||||
|             console.log( error ); | ||||
|             archievement.success = false; | ||||
|             archievement.message = String( error ); | ||||
|  | ||||
|             // 调用渲染函数 | ||||
|             if ( render !== undefined ) | ||||
|             { | ||||
|                 render( archievement ); | ||||
|             } | ||||
|  | ||||
|             console.log( `queryDepartmentArchievement:查询部门${departmentInfo.departmentCode}业绩失败,原因${error}` ); | ||||
|         }); | ||||
| } | ||||
|  | ||||
| @@ -103,7 +117,8 @@ function queryDepartmentArchievement( departmentInfo: Department, render: any ): | ||||
|  * 查询坐席的业绩,并调用渲染函数. | ||||
|  * 1、请求坐席业绩的数据 | ||||
|  * 2、对每月业绩清单进行检查,如果有缺少则用0代替,检查的结果是12个月的清单,让调用者自己截断; | ||||
|  * 3、将检查后的清单,写入到业绩对象中,只写金额 | ||||
|  * 3、将检查后的清单,写入到业绩对象中,只写金额; | ||||
|  * 4、即使请求失败,也将失败的message写入业绩对象,调用渲染函数; | ||||
|  * @param callerInfo 坐席的信息参数,用于请求业绩; | ||||
|  * @param render 渲染函数,用业绩对象CallerArchievement作为参数; | ||||
|  */ | ||||
| @@ -114,6 +129,16 @@ function queryCallerArchievement( callerInfo: TelSaler, render: any ): void | ||||
|         callName: callerInfo.telSalerName, | ||||
|     }; | ||||
|  | ||||
|     // 默认的业绩对象 | ||||
|     const callArchievement: CallerArchievement = { | ||||
|         success: false, | ||||
|         message: "", | ||||
|         total_archievement: 0, | ||||
|         mensual_archievement_list: [], | ||||
|         insurance_renewal_rate: "0.0", | ||||
|         attaching_rate: "0.0", | ||||
|     }; | ||||
|  | ||||
|     // 发送请求 | ||||
|     instance.request({ | ||||
|         method: "post", | ||||
| @@ -125,14 +150,12 @@ function queryCallerArchievement( callerInfo: TelSaler, render: any ): void | ||||
|         { | ||||
|             const data = response.data ?? {}; | ||||
|  | ||||
|             const callArchievement: CallerArchievement = { | ||||
|                 success: data.success ?? false, | ||||
|                 message: data.message ?? "", | ||||
|                 total_archievement: data.total_archievement ?? 0, | ||||
|                 mensual_archievement_list: [], | ||||
|                 insurance_renewal_rate: data.insurance_renewal_rate ?? "0.0", | ||||
|                 attaching_rate: data.attaching_rate ?? "0.0", | ||||
|             }; | ||||
|             callArchievement.success = data.success ?? false; | ||||
|             callArchievement.message = data.message ?? "服务器没有返回调用结果消息,请检查日志!"; | ||||
|             callArchievement.total_archievement = data.total_archievement ?? 0; | ||||
|             callArchievement.mensual_archievement_list = []; | ||||
|             callArchievement.insurance_renewal_rate = data.insurance_renewal_rate ?? "0.0"; | ||||
|             callArchievement.attaching_rate = data.attaching_rate ?? "0.0"; | ||||
|  | ||||
|             // 检查业绩清单有没有缺漏,缺漏的用0补上 | ||||
|             const checkedList = checkMensualArchievement( data.mensual_archievement_list ); | ||||
| @@ -159,9 +182,18 @@ function queryCallerArchievement( callerInfo: TelSaler, render: any ): void | ||||
|  | ||||
|             console.log( `queryCallerArchievement查询结果${data}` ); | ||||
|         }) | ||||
|         // 请求失败 | ||||
|         // 请求失败,将失败的原因保存到message属性,调用渲染函数 | ||||
|         .catch(( error: any ) => | ||||
|         { | ||||
|             callArchievement.success = false; | ||||
|             callArchievement.message = String( error ); | ||||
|  | ||||
|             // 调用渲染函数 | ||||
|             if ( render !== undefined ) | ||||
|             { | ||||
|                 render( callArchievement ); | ||||
|             } | ||||
|  | ||||
|             console.log( `queryCallerArchievement:查询坐席${callerInfo.telSalerCode}业绩失败,原因${error}` ); | ||||
|         }); | ||||
| } | ||||
|   | ||||
| @@ -32,6 +32,9 @@ interface RankingListResponse | ||||
|     renewalRateRankingList: RankingListItem[]; | ||||
| } | ||||
|  | ||||
| // 判断用的正则表达式 | ||||
| const regexMonth = "(0[1-9])|(1[0-2])"; | ||||
|  | ||||
| /** | ||||
|  * 请求坐席排行榜。 | ||||
|  * @param reqParam 请求参数 | ||||
| @@ -53,6 +56,9 @@ function requestRankingList( reqParam: RankingListRequest, rander: any ): void / | ||||
|         renewalRateRankingList: [], | ||||
|     }; | ||||
|  | ||||
|     // 检查请求参数 | ||||
|     // TODO: 这里要加一个对month的正则表达式验证。 | ||||
|  | ||||
|     instance.request( | ||||
|         { | ||||
|             method: "post", | ||||
|   | ||||
| @@ -48,7 +48,12 @@ | ||||
|             </div> | ||||
|         </div> | ||||
|         <div class="right-wrapper"> | ||||
|             <h1>本大爷</h1> | ||||
|             <CallerArchievementComponent | ||||
|                 :caller-name="callerInfo.telSalerName" | ||||
|                 :this-month-premium="ui.callerPersentMonthPremium" | ||||
|                 :attaching-rate="ui.callerAttachingRate" | ||||
|                 :renewal-rate="ui.callerRenewalRate" | ||||
|             /> | ||||
|             <div class="carousel-item"> | ||||
|                 <el-carousel | ||||
|                     arrow="never" | ||||
| @@ -89,10 +94,11 @@ import { ElMessage } from "element-plus"; | ||||
| import | ||||
| { | ||||
|     type DepartmentArchievement, | ||||
|     type CallerArchievement, | ||||
|     queryDepartmentArchievement, | ||||
|     queryCallerArchievement | ||||
| } from "@/utils/archievement.js"; | ||||
| import { RankingListItem } from "@/types/cpicxim/RankingListItem.js"; | ||||
| import { type RankingListItem } from "@/types/cpicxim/RankingListItem.js"; | ||||
| import | ||||
| { | ||||
|     type RankingListRequest, | ||||
| @@ -105,6 +111,7 @@ import ArchievementCompleteRateComponent from "@/components/ArchievementComplete | ||||
| import HonorListComponent from "@/components/HonorListComponent.vue"; | ||||
| import DishonorListComponent from "@/components/DishonorListComponent.vue"; | ||||
| import RankingListComponent from "@/components/RankingListComponent.vue"; | ||||
| import CallerArchievementComponent from "@/components/CallerArchievementComponent.vue"; | ||||
| import { logout } from "@/utils/account.js"; | ||||
| import { type TelSaler } from "@/types/cpicxim/TelSaler"; | ||||
|  | ||||
| @@ -121,6 +128,9 @@ interface ui | ||||
|     showUI: boolean; // 用来刷新页面的开关 | ||||
|     attachingRankingList: RankingListItem[]; // 坐席车非渗透率榜单 | ||||
|     renewalRankingList: RankingListItem[]; | ||||
|     callerAttachingRate: string; | ||||
|     callerRenewalRate: string; | ||||
|     callerPersentMonthPremium: number; | ||||
| } | ||||
|  | ||||
| export default { | ||||
| @@ -131,10 +141,15 @@ export default { | ||||
|         HonorListComponent, | ||||
|         DishonorListComponent, | ||||
|         RankingListComponent, | ||||
|         CallerArchievementComponent, | ||||
|     }, | ||||
|     setup() | ||||
|     { | ||||
|         const monthIndex = new Date(); | ||||
|         const thisMonth: number = monthIndex.getMonth(); // getMonth返回值从0开始。 | ||||
|         const thisMonthString = thisMonth > 10 ? String( thisMonth ) : "0" + String( thisMonth ); | ||||
|         const thisYear: number = monthIndex.getFullYear(); | ||||
|         const thisYearString: string = String( thisYear ); | ||||
|         const numInChinese = [ | ||||
|             "一", | ||||
|             "二", | ||||
| @@ -163,10 +178,13 @@ export default { | ||||
|             showUI: true, // 用来刷新页面的开关 | ||||
|             attachingRankingList: [], // 坐席车非渗透率榜单 | ||||
|             renewalRankingList: [], // 坐席续保率榜单 | ||||
|             callerAttachingRate: "0.0", | ||||
|             callerRenewalRate: "0.0", | ||||
|             callerPersentMonthPremium: 0, | ||||
|         }); | ||||
|         let timerHandler = 0; | ||||
|  | ||||
|         const getTotalArchievement = computed(() => | ||||
|         const getTotalArchievement = computed((): string => | ||||
|         { | ||||
|             const cnyFormat = new Intl.NumberFormat( "zh-cn", { | ||||
|                 style: "currency", | ||||
| @@ -178,13 +196,28 @@ export default { | ||||
|             return archievement; | ||||
|         }); | ||||
|  | ||||
|         // 保存业绩数据 | ||||
|         const applyDepartmentArchievementData = ( data: DepartmentArchievement ) => | ||||
|         /** | ||||
|          * 将请求函数获取的部门业绩数据,渲染到页面上。 | ||||
|          * @param data DepartmentArchievementl类型的部门业绩数据对象 | ||||
|          */ | ||||
|         const applyDepartmentArchievementData = ( data: DepartmentArchievement ): void => | ||||
|         { | ||||
|             console.log( "部门业绩数据", data ); | ||||
|             // console.log( "部门业绩数据", data ); | ||||
|  | ||||
|             ui.chartData = data.mensual_archievement_list; | ||||
|             ui.totalArchievement = data.total_archievement; | ||||
|             // 检查请求是否成功 | ||||
|             if ( !data.success ) | ||||
|             { | ||||
|                 // 失败就提示消息,然后退出 | ||||
|                 ElMessage({ | ||||
|                     message: data.message, | ||||
|                     type: "error", | ||||
|                 }); | ||||
|  | ||||
|                 return; | ||||
|             } | ||||
|  | ||||
|             // ui.chartData = data.mensual_archievement_list; | ||||
|             // ui.totalArchievement = data.total_archievement; | ||||
|             ui.attaching_rate = data.attaching_rate; | ||||
|             ui.insurance_renewal_rate = data.insurance_renewal_rate; | ||||
|             ui.leading_reward_gainers = data.leading_reward_gainers; | ||||
| @@ -201,6 +234,40 @@ export default { | ||||
|             }, 0 ); | ||||
|         }; | ||||
|  | ||||
|         /** | ||||
|          * 将请求的坐席业绩数据渲染到页面 | ||||
|          * @param data  | ||||
|          */ | ||||
|         const applyCallerArchievementData = ( data: CallerArchievement ): void => | ||||
|         { | ||||
|             // 检查请求是否成功 | ||||
|             if ( !data.success ) | ||||
|             { | ||||
|                 // 失败就提示消息,然后退出 | ||||
|                 ElMessage({ | ||||
|                     message: data.message, | ||||
|                     type: "error", | ||||
|                 }); | ||||
|  | ||||
|                 return; | ||||
|             } | ||||
|  | ||||
|             ui.chartData = data.mensual_archievement_list.slice( 0, thisMonth ); | ||||
|             ui.totalArchievement = data.total_archievement; | ||||
|             ui.callerAttachingRate = data.attaching_rate; | ||||
|             ui.callerRenewalRate = data.insurance_renewal_rate; | ||||
|             ui.callerPersentMonthPremium = data.mensual_archievement_list[thisMonth]; | ||||
|  | ||||
|             // console.log( "业绩清单", ui.chartData ); | ||||
|             // console.log( "当月", data.mensual_archievement_list ); | ||||
|  | ||||
|             ui.showUI = false; | ||||
|             setTimeout(() => | ||||
|             { | ||||
|                 ui.showUI = true; | ||||
|             }, 0 ); | ||||
|         }; | ||||
|  | ||||
|         const applyRankingListData = ( data: RankingListResponse ): void => | ||||
|         { | ||||
|             ui.attachingRankingList = data.attachingRateRankingList; | ||||
| @@ -219,7 +286,7 @@ export default { | ||||
|         }; | ||||
|  | ||||
|         // 退出桌面霸屏 | ||||
|         const logoutDesktopArchievement = () => | ||||
|         const logoutDesktopArchievement = (): void => | ||||
|         { | ||||
|             console.log( "111" ); | ||||
|             logout(); | ||||
| @@ -236,13 +303,13 @@ export default { | ||||
|                 center: true, | ||||
|             }); | ||||
|  | ||||
|             router.push( "/login" ); | ||||
|             router.push( "/login" ).then(() => {}).catch(() => {}); | ||||
|         } | ||||
|  | ||||
|         /** | ||||
|          * 刷新页面 | ||||
|          * 用于定时对页面进行刷新,其中会请求最新的业绩数据。 | ||||
|          */ | ||||
|         const refresh = () => | ||||
|         const refresh = (): void => | ||||
|         { | ||||
|             const deparmentInfo: Department = { | ||||
|                 departmentCode: callerInfo.departmentCode, | ||||
| @@ -251,11 +318,14 @@ export default { | ||||
|  | ||||
|             const rankinglistRequest: RankingListRequest = { | ||||
|                 departmentCode: callerInfo.departmentCode, | ||||
|                 year: "2023", | ||||
|                 month: "06", | ||||
|                 year: thisYearString, | ||||
|                 month: thisMonthString, | ||||
|             }; | ||||
|  | ||||
|             console.log( "refresh", rankinglistRequest ); | ||||
|  | ||||
|             queryDepartmentArchievement( deparmentInfo, applyDepartmentArchievementData ); | ||||
|             queryCallerArchievement( callerInfo, applyCallerArchievementData ); | ||||
|             requestRankingList( rankinglistRequest, applyRankingListData ); | ||||
|         }; | ||||
|  | ||||
| @@ -434,11 +504,19 @@ export default { | ||||
|         width: 300px; | ||||
|     } | ||||
|  | ||||
|     >div { | ||||
|     .carousel-item { | ||||
|         // 为了限制走马灯组件的高度 | ||||
|         display: block; | ||||
|         height: 260px; | ||||
|         width: 300px; | ||||
|     } | ||||
|  | ||||
|     // >div { | ||||
|     //     // 为了限制走马灯组件的高度 | ||||
|     //     display: block; | ||||
|     //     height: 260px; | ||||
|     //     width: 300px; | ||||
|     // } | ||||
| } | ||||
| </style> | ||||
| <style lang="scss"> | ||||
|   | ||||
| @@ -71,7 +71,7 @@ import { saveStaffInfo, getUserType, saveUserType, getCallerInfo, saveCallerInfo | ||||
| import { login, loginCaller, type LoginCallerInfo, type LoginCallerResult } from "@/utils/account"; | ||||
| import { ElMessage } from "element-plus"; | ||||
| import { StaffInfo } from "@/types/cpicxim/StaffInfo"; | ||||
| import { TelSaler } from "@/types/cpicxim/TelSaler"; | ||||
| import { type TelSaler } from "@/types/cpicxim/TelSaler"; | ||||
|  | ||||
| export default { | ||||
|     name: "LoginPage", | ||||
| @@ -95,7 +95,7 @@ export default { | ||||
|         /** | ||||
|          * 保存p13账号 | ||||
|          */ | ||||
|         const savedP13uid = () => | ||||
|         const savedP13uid = (): void => | ||||
|         { | ||||
|             window.localStorage.setItem( "stuff_account", ui.account ); | ||||
|         }; | ||||
| @@ -103,7 +103,7 @@ export default { | ||||
|         /** | ||||
|          * 登录函数,根据ui.currentMenu判断登录的是坐席还是员工。 | ||||
|          */ | ||||
|         const onLogin = () => | ||||
|         const onLogin = (): void => | ||||
|         { | ||||
|             // 保存用户类型 | ||||
|             saveUserType( ui.currentMenu ); | ||||
| @@ -145,7 +145,7 @@ export default { | ||||
|                             saveStaffInfo( staffInfo ); | ||||
|  | ||||
|                             // 跳转路由 | ||||
|                             router.push( "/desktop" ); | ||||
|                             router.push( "/desktop" ).then(() => {}).catch(() => {}); | ||||
|                         } | ||||
|                         else | ||||
|                         { | ||||
| @@ -177,12 +177,12 @@ export default { | ||||
|                     // 调用接口成功 | ||||
|                     .then(( response ) => | ||||
|                     { | ||||
|                         const data:LoginCallerResult = response.data ?? { success: false, }; | ||||
|                         const data: LoginCallerResult = response.data ?? { success: false, }; | ||||
|  | ||||
|                         // debugger; | ||||
|  | ||||
|                         // 查看標志位 | ||||
|                         if ( data.success === true ) | ||||
|                         if ( data.success ) | ||||
|                         { | ||||
|                             // 查询成功,显示一个提示,保存工号,并跳转路由 | ||||
|                             ElMessage({ | ||||
| @@ -190,7 +190,7 @@ export default { | ||||
|                                 type: "success", | ||||
|                             }); | ||||
|  | ||||
|                             const telsaler:TelSaler = { | ||||
|                             const telsaler: TelSaler = { | ||||
|                                 telSalerCode: data.tel_saler_code, | ||||
|                                 telSalerName: data.tel_saler_name, | ||||
|                                 teamCode: data.team_code, | ||||
| @@ -201,7 +201,7 @@ export default { | ||||
|  | ||||
|                             saveCallerInfo( telsaler ); | ||||
|  | ||||
|                             router.push( "/desktop_archievement" ); | ||||
|                             router.push( "/desktop_archievement" ).then(() => {}).catch(() => {}); | ||||
|                         } | ||||
|                         else | ||||
|                         { | ||||
| @@ -249,7 +249,7 @@ export default { | ||||
|                     }); | ||||
|  | ||||
|                     // 跳转路由 | ||||
|                     router.push( "/desktop_archievement" ); | ||||
|                     router.push( "/desktop_archievement" ).then(() => {}).catch(() => {}); | ||||
|                 } | ||||
|             } | ||||
|             else if ( staffType === "cpicxim_staff" ) | ||||
| @@ -258,7 +258,7 @@ export default { | ||||
|             } | ||||
|         }); | ||||
|  | ||||
|         const onToggleMenu = ( type: string ) => | ||||
|         const onToggleMenu = ( type: string ): void => | ||||
|         { | ||||
|             ui.currentMenu = type; | ||||
|         }; | ||||
|   | ||||
| @@ -120,7 +120,7 @@ export default { | ||||
|             callers: [], | ||||
|         }); | ||||
|  | ||||
|         const onCurrentPageIndexChange = ( pageIndex: number ) => | ||||
|         const onCurrentPageIndexChange = ( pageIndex: number ): void => | ||||
|         { | ||||
|             ui.table_current_page_index = pageIndex; | ||||
|         }; | ||||
| @@ -129,7 +129,7 @@ export default { | ||||
|          * 设置表格每页显示记录的数量 | ||||
|          * @param pageSize 表格页记录数量 | ||||
|          */ | ||||
|         const onTablePageSizeChange = ( pageSize: number ) => | ||||
|         const onTablePageSizeChange = ( pageSize: number ): void => | ||||
|         { | ||||
|             ui.table_page_size = pageSize; | ||||
|         }; | ||||
|   | ||||
| @@ -0,0 +1,19 @@ | ||||
| /* | ||||
|  * @Author: Kane | ||||
|  * @Date: 2023-09-06 11:17:44 | ||||
|  * @LastEditors: Kane | ||||
|  * @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/mybatis/mapper/RewardsMapper.java | ||||
|  * @Description:  | ||||
|  *  | ||||
|  * Copyright (c) ${2022} by Kane, All Rights Reserved.  | ||||
|  */ | ||||
|  | ||||
| package com.cpic.xim.mybatis.mapper; | ||||
|  | ||||
| import java.util.ArrayList; | ||||
| import com.cpic.xim.mybatis.pojo.RewardProject; | ||||
|  | ||||
| public interface RewardsMapper  | ||||
| { | ||||
|     public ArrayList<RewardProject> queryRewardProjects(); | ||||
| } | ||||
| @@ -22,8 +22,6 @@ public class MensualArchievementItem | ||||
|         this.premium = premium; | ||||
|     } | ||||
|  | ||||
|  | ||||
|  | ||||
|     public int getMonth() | ||||
|     { | ||||
|         return month; | ||||
|   | ||||
| @@ -0,0 +1,90 @@ | ||||
| /* | ||||
|  * @Author: Kane | ||||
|  * @Date: 2023-09-06 11:00:35 | ||||
|  * @LastEditors: Kane | ||||
|  * @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/mybatis/pojo/RewardProject.java | ||||
|  * @Description: 奖励项目对象 | ||||
|  *  | ||||
|  * Copyright (c) ${2022} by Kane, All Rights Reserved.  | ||||
|  */ | ||||
| package com.cpic.xim.mybatis.pojo; | ||||
|  | ||||
| import com.fasterxml.jackson.annotation.JsonProperty; | ||||
|  | ||||
| /** | ||||
|  * 奖励项目对象 | ||||
|  */ | ||||
| public class RewardProject | ||||
| { | ||||
|     public RewardProject( int rewardCode, String rewardName) | ||||
|     { | ||||
|         this.rewardCode = rewardCode; | ||||
|         this.rewardName = rewardName; | ||||
|     } | ||||
|  | ||||
|     public int getRewardCode() | ||||
|     { | ||||
|         return rewardCode; | ||||
|     } | ||||
|  | ||||
|     public void setRewardCode( int rewardCode ) | ||||
|     { | ||||
|         this.rewardCode = rewardCode; | ||||
|     } | ||||
|  | ||||
|     public String getRewardName() | ||||
|     { | ||||
|         return rewardName; | ||||
|     } | ||||
|  | ||||
|     public void setRewardName( String rewardName ) | ||||
|     { | ||||
|         this.rewardName = rewardName; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public String toString() | ||||
|     { | ||||
|         return "RewardProject [rewardCode=" + rewardCode + ", rewardName=" + rewardName + "]"; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public int hashCode() | ||||
|     { | ||||
|         final int prime = 31; | ||||
|         int result = 1; | ||||
|         result = prime * result + rewardCode; | ||||
|         result = prime * result + ((rewardName == null) ? 0 : rewardName.hashCode()); | ||||
|         return result; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public boolean equals( Object obj ) | ||||
|     { | ||||
|         if ( this == obj ) | ||||
|             return true; | ||||
|         if ( obj == null ) | ||||
|             return false; | ||||
|         if ( getClass() != obj.getClass() ) | ||||
|             return false; | ||||
|         RewardProject other = (RewardProject) obj; | ||||
|         if ( rewardCode != other.rewardCode ) | ||||
|             return false; | ||||
|         if ( rewardName == null ) | ||||
|         { | ||||
|             if ( other.rewardName != null ) | ||||
|                 return false; | ||||
|         } else if ( !rewardName.equals( other.rewardName ) ) | ||||
|             return false; | ||||
|         return true; | ||||
|     } | ||||
|  | ||||
|  | ||||
|     // 奖励项目代码 | ||||
|     @JsonProperty("rewardCode") | ||||
|     private int rewardCode; | ||||
|  | ||||
|     // 奖励项目名称 | ||||
|     @JsonProperty("rewardName") | ||||
|     private String rewardName; | ||||
| } | ||||
| @@ -0,0 +1,66 @@ | ||||
| /* | ||||
|  * @Author: Kane | ||||
|  * @Date: 2023-09-06 10:41:34 | ||||
|  * @LastEditors: Kane | ||||
|  * @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/web/controllers/rewards/RewardController.java | ||||
|  * @Description: 坐席奖励相关的请求 | ||||
|  *  | ||||
|  * Copyright (c) ${2022} by Kane, All Rights Reserved.  | ||||
|  */ | ||||
| package com.cpic.xim.web.controllers.rewards; | ||||
|  | ||||
| import java.io.IOException; | ||||
| import java.util.ArrayList; | ||||
| import org.apache.ibatis.session.SqlSession; | ||||
| import org.slf4j.Logger; | ||||
| import org.slf4j.LoggerFactory; | ||||
| import org.springframework.stereotype.Controller; | ||||
| import org.springframework.web.bind.annotation.PostMapping; | ||||
| import org.springframework.web.bind.annotation.RequestMapping; | ||||
| import org.springframework.web.bind.annotation.ResponseBody; | ||||
| import com.cpic.xim.mybatis.mapper.RewardsMapper; | ||||
| import com.cpic.xim.mybatis.pojo.RewardProject; | ||||
| import com.cpic.xim.mybatis.utils.MybatisUtils; | ||||
|  | ||||
| @Controller | ||||
| @RequestMapping("/rewards") | ||||
| public class RewardController | ||||
| { | ||||
|     // 日志 | ||||
|     private static Logger logger = LoggerFactory.getLogger(RewardController.class); | ||||
|  | ||||
|     private RewardController() {} | ||||
|  | ||||
|     /** | ||||
|      * 相应查询获奖项目清单的请求 | ||||
|      * @return 获奖项目清单的response对象 | ||||
|      */ | ||||
|     @PostMapping("/query_reward_projects.do") | ||||
|     @ResponseBody | ||||
|     public RewardProjectsResponse queryRewardProjecrts() | ||||
|     { | ||||
|         RewardProjectsResponse response = new RewardProjectsResponse(); | ||||
|  | ||||
|         SqlSession session = null; | ||||
|  | ||||
|         try | ||||
|         { | ||||
|             session = MybatisUtils.getSqlSession(); | ||||
|  | ||||
|             RewardsMapper mapper = session.getMapper(RewardsMapper.class); | ||||
|             ArrayList<RewardProject> rewards = mapper.queryRewardProjects(); | ||||
|  | ||||
|             response.setSuccess(true); | ||||
|             response.setMessage("查询成功!"); | ||||
|             response.setRewardList(rewards); | ||||
|         } | ||||
|         catch (IOException error ) | ||||
|         { | ||||
|             response.setSuccess(false); | ||||
|             response.setMessage("查询失败!" + error.getMessage()); | ||||
|             response.setRewardList(null); | ||||
|         } | ||||
|  | ||||
|         return response; | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,46 @@ | ||||
| /* | ||||
|  * @Author: Kane | ||||
|  * @Date: 2023-09-06 10:59:45 | ||||
|  * @LastEditors: Kane | ||||
|  * @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/web/controllers/rewards/RewardProjectsResponse.java | ||||
|  * @Description: 奖励项目请求结果 | ||||
|  *  | ||||
|  * Copyright (c) ${2022} by Kane, All Rights Reserved.  | ||||
|  */ | ||||
| package com.cpic.xim.web.controllers.rewards; | ||||
|  | ||||
| import com.cpic.xim.mybatis.pojo.RewardProject; | ||||
| import com.cpic.xim.web.controllers.QueryResult; | ||||
| import com.fasterxml.jackson.annotation.JsonProperty; | ||||
| import java.util.ArrayList; | ||||
|  | ||||
| public class RewardProjectsResponse extends QueryResult | ||||
| { | ||||
|     public RewardProjectsResponse( boolean success, String message, | ||||
|             ArrayList<RewardProject> rewardList) | ||||
|     { | ||||
|         super( success, message ); | ||||
|  | ||||
|         this.rewardList = rewardList; | ||||
|     } | ||||
|  | ||||
|     public RewardProjectsResponse() | ||||
|     { | ||||
|         super(); | ||||
|  | ||||
|         this.rewardList = null; | ||||
|     } | ||||
|  | ||||
|     public ArrayList<RewardProject> getRewardList() | ||||
|     { | ||||
|         return rewardList; | ||||
|     } | ||||
|  | ||||
|     public void setRewardList( ArrayList<RewardProject> rewardList ) | ||||
|     { | ||||
|         this.rewardList = rewardList; | ||||
|     } | ||||
|  | ||||
|     @JsonProperty("rewardList") | ||||
|     private ArrayList<RewardProject> rewardList; | ||||
| } | ||||
| @@ -0,0 +1,11 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <!DOCTYPE mapper  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "https://mybatis.org/dtd/mybatis-3-mapper.dtd"> | ||||
| <mapper namespace="com.cpic.xim.mybatis.mapper.RewardsMapper"> | ||||
|     <select id="queryRewardProjects" resultMap="RewardProjectMap"> | ||||
|         select reward_index, reward_name from reward_projects | ||||
|     </select> | ||||
|     <resultMap id="RewardProjectMap" type="com.cpic.xim.mybatis.pojo.RewardProject"> | ||||
|         <id property="rewardCode" column="reward_index" /> | ||||
|         <result property="rewardName" column="reward_name" javaType="String"/> | ||||
|     </resultMap> | ||||
| </mapper> | ||||
| @@ -25,5 +25,6 @@ | ||||
|         <!-- <mapper resource="mybatis/mapper/StaffMapper.xml" /> --> | ||||
|         <mapper resource="mybatis/mapper/ArchievementMapper.xml" /> | ||||
|         <mapper resource="mybatis/mapper/RankingListMapper.xml" /> | ||||
|         <mapper resource="mybatis/mapper/RewardsMapper.xml" /> | ||||
|     </mappers> | ||||
| </configuration> | ||||
| @@ -23,10 +23,11 @@ import org.junit.Test; | ||||
| import org.slf4j.Logger; | ||||
| import org.slf4j.LoggerFactory; | ||||
| import com.cpic.xim.mybatis.mapper.ArchievementMapper; | ||||
| import com.cpic.xim.mybatis.mapper.RewardsMapper; | ||||
| import com.cpic.xim.mybatis.pojo.MensualArchievementItem; | ||||
| import com.cpic.xim.utils.archievement.DepartmentArchievement; | ||||
| import com.cpic.xim.utils.ranking.CallerRankingList; | ||||
| import com.cpic.xim.mybatis.pojo.RewardProject; | ||||
| import com.cpic.xim.mybatis.utils.MybatisUtils; | ||||
| import com.cpic.xim.utils.ranking.CallerRankingList; | ||||
|  | ||||
| @SuppressWarnings( "all" ) | ||||
| public class DesktopArchievementTest | ||||
| @@ -96,16 +97,16 @@ public class DesktopArchievementTest | ||||
|             ArrayList<MensualArchievementItem> mensual = null; | ||||
|             HashMap<String, Object> params = new HashMap<>(); | ||||
|  | ||||
|             params.put( "a_caller_code", "5500065875" ); | ||||
|             params.put( "a_caller_code", "61136" ); | ||||
|  | ||||
|             mapper.getCallerArchievement( params ); | ||||
|  | ||||
|             Object obj = params.get( "a_mensual_cur" ); | ||||
|             mensual = (ArrayList<MensualArchievementItem>)params.get( "a_mensual_cur" ); | ||||
|             mensual = (ArrayList<MensualArchievementItem>) params.get( "a_mensual_cur" ); | ||||
|  | ||||
|             System.out.println( params.toString() ); | ||||
|             System.out.println( mensual.toString() ); | ||||
|             System.out.println( obj.getClass()); | ||||
|             System.out.println( obj.getClass() ); | ||||
|  | ||||
|             assertTrue( params.size() > 1 ); | ||||
|         } | ||||
| @@ -114,4 +115,24 @@ public class DesktopArchievementTest | ||||
|             assert (false); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void testRewardProjects() | ||||
|     { | ||||
|         try | ||||
|         { | ||||
|             SqlSession session = MybatisUtils.getSqlSession(); | ||||
|             RewardsMapper mapper = session.getMapper( RewardsMapper.class ); | ||||
|  | ||||
|             ArrayList<RewardProject> rewards = mapper.queryRewardProjects(); | ||||
|  | ||||
|             System.out.println( rewards ); | ||||
|             assert( rewards.isEmpty() == false ); | ||||
|              | ||||
|         } | ||||
|         catch ( IOException error ) | ||||
|         { | ||||
|             assert( false ); | ||||
|         } | ||||
|     } | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user