From 664c2335ca55402eb31b91ed565bb4a338f2af39 Mon Sep 17 00:00:00 2001 From: Kane Wang Date: Wed, 7 Jun 2023 17:19:47 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E4=BF=9D=E5=AD=98=E8=BF=9B=E5=BA=A6?= =?UTF-8?q?=EF=BC=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- code/web/task_schedule/src/test/test.ts | 4 +- .../task_schedule/src/utils/api/request.ts | 2 +- code/web/task_schedule/src/utils/ranking.ts | 79 ++++++++++++++++++- .../src/views/DesktopArchievement.vue | 58 ++++++++++++-- code/web/task_schedule/vite.config.js | 3 +- 5 files changed, 136 insertions(+), 10 deletions(-) diff --git a/code/web/task_schedule/src/test/test.ts b/code/web/task_schedule/src/test/test.ts index 2883091..f9bf9dd 100644 --- a/code/web/task_schedule/src/test/test.ts +++ b/code/web/task_schedule/src/test/test.ts @@ -8,6 +8,6 @@ * Copyright (c) ${2022} by Kane, All Rights Reserved. */ -import { testNewCitizen } from "./identify.js"; +import { testRankingListRequest } from "./testRankingListRequest.js"; -testNewCitizen(); +testRankingListRequest(); diff --git a/code/web/task_schedule/src/utils/api/request.ts b/code/web/task_schedule/src/utils/api/request.ts index e989643..9113c06 100644 --- a/code/web/task_schedule/src/utils/api/request.ts +++ b/code/web/task_schedule/src/utils/api/request.ts @@ -13,7 +13,7 @@ import axios, { type AxiosInstance } from "axios"; const service: AxiosInstance = axios.create( { baseURL: "", - timeout: 5000, + timeout: 10000, } ); diff --git a/code/web/task_schedule/src/utils/ranking.ts b/code/web/task_schedule/src/utils/ranking.ts index a592a9c..3d73c8d 100644 --- a/code/web/task_schedule/src/utils/ranking.ts +++ b/code/web/task_schedule/src/utils/ranking.ts @@ -32,4 +32,81 @@ interface RankingListResponse renewalRankintList: RankingListItem[]; }; -export { type RankingListRequest, type RankingListResponse }; +/** + * 请求坐席排行榜。 + * @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, + attachingRankingList: [], + renewalRankintList: [], + }; + + 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.attachingRankingList ?? [] )) // eslint-disable-line + { + const index: number = item.index ?? -1; + + if ( index === -1 ) + { + continue; + } + + rankingListResponse.attachingRankingList.push( item ); + } + + for ( const item of ( data.renewalRankintList ?? [] )) // eslint-disable-line + { + const index: number = item.index ?? -1; + + if ( index === -1 ) + { + continue; + } + + rankingListResponse.renewalRankintList.push( item ); + } + + // 调用回调函数保存数据 + rander( rankingListResponse ); + + console.log( data ); + }) + .catch(( error ) => + { + console.log( error ); + }); +} + +export { + type RankingListRequest, + type RankingListResponse, + requestRankingList +}; diff --git a/code/web/task_schedule/src/views/DesktopArchievement.vue b/code/web/task_schedule/src/views/DesktopArchievement.vue index 0942247..c4d5bf1 100644 --- a/code/web/task_schedule/src/views/DesktopArchievement.vue +++ b/code/web/task_schedule/src/views/DesktopArchievement.vue @@ -64,6 +64,8 @@ import { useRouter } from "vue-router"; import { getCallerInfo } from "@/utils/api/localStorage.js"; import { ElMessage } from "element-plus"; 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 ArchievementChart from "@/components/ArchievementChartComponent.vue"; import ArchievementCompleteRateComponent from "@/components/ArchievementCompleteRateComponent.vue"; @@ -73,6 +75,21 @@ import RankingListComponent from "@/components/RankingListComponent.vue"; import { logout } from "@/utils/account.js"; 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 { name: "DesktopArchievement", components: { @@ -88,7 +105,7 @@ export default { const numInChinese = ["一", "二", "三", "四", "五", "六", "七", "八", "九", "十", "十一", "十二",]; const router = useRouter(); const callerInfo: TelSaler = getCallerInfo(); - const ui = reactive({ + const ui: ui = reactive({ currentMonth: numInChinese[monthIndex.getMonth() - 1], chartData: [0,], // 业绩表 totalArchievement: 0, // 总业绩 @@ -98,6 +115,8 @@ export default { advance_reward_gainers: ["",], // 飞跃奖 dishonorPersons: ["",], showUI: true, // 用来刷新页面的开关 + attachingRankingList: [], // 坐席车非渗透率榜单 + renewalRankingList: [], // 坐席续保率榜单 }); const timerHandler = 0; @@ -114,8 +133,8 @@ export default { return archievement; }); - // 绘制数据 - const renderData = ( data:Archievement ) => + // 保存业绩数据 + const applyArchievementData = ( data:Archievement ) => { console.log( "部门业绩数据", data ); @@ -134,6 +153,18 @@ export default { setTimeout(() => { ui.showUI = true; }, 0 ); }; + const applyRankingListData = ( data: RankingListResponse ): void => + { + ui.attachingRankingList = data.attachingRankingList; + ui.renewalRankingList = data.renewalRankintList; + + // 更新UI + // 先不显示界面,往队列中加入显示队列的回调,让vue刷新组件。 + ui.showUI = false; + + setTimeout(() => { ui.showUI = true; }, 0 ); + }; + // 退出桌面霸屏 const logoutDesktopArchievement = () => { @@ -155,6 +186,9 @@ export default { router.push( "/login" ); } + /** + * 刷新页面 + */ const refresh = () => { const deparmentInfo:Department = @@ -163,9 +197,20 @@ export default { departmentName: callerInfo.departmentName, }; - queryDepartmentArchievement( deparmentInfo, renderData ); + const rankinglistRequest: RankingListRequest = + { + departmentCode: callerInfo.departmentCode, + year: "2023", + month: "06", + }; + + queryDepartmentArchievement( deparmentInfo, applyArchievementData ); + requestRankingList( rankinglistRequest, applyRankingListData ); }; + /** + * 加载前 + */ onBeforeMount(() => { // 设置每10分钟刷新一次 @@ -174,13 +219,16 @@ export default { refresh(); }); + /** + * 页面卸载前 + */ onUnmounted(():void => { // 退出页面前关掉定时器 clearInterval( timerHandler ); }); - return { ui, callerInfo, timerHandler, getTotalArchievement, renderData, refresh, logoutDesktopArchievement, }; + return { ui, callerInfo, timerHandler, getTotalArchievement, renderData: applyArchievementData, refresh, logoutDesktopArchievement, }; }, }; diff --git a/code/web/task_schedule/vite.config.js b/code/web/task_schedule/vite.config.js index c22deeb..f68f44f 100644 --- a/code/web/task_schedule/vite.config.js +++ b/code/web/task_schedule/vite.config.js @@ -2,7 +2,7 @@ * @Author: Kane * @Date: 2023-02-15 09:25:52 * @LastEditors: Kane - * @LastEditTime: 2023-03-30 21:09:30 + * @LastEditTime: 2023-06-07 15:53:53 * @FilePath: /task_schedule/vite.config.js * @Description: * @@ -18,6 +18,7 @@ export default defineConfig(( command, mode ) => const env = loadEnv( mode, process.cwd(), "" ); return { + server:{ host: "localhost", port: 3000, }, plugins: [vue(),], base: "./", resolve: { From 80e4b24e4f3a97536789dcae353518c968bbece8 Mon Sep 17 00:00:00 2001 From: Kane Wang Date: Thu, 8 Jun 2023 18:08:57 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E4=BF=9D=E5=AD=98=E8=BF=9B=E5=BA=A6?= =?UTF-8?q?=EF=BC=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- code/web/task_schedule/package-lock.json | 8 ++++---- code/web/task_schedule/package.json | 2 +- code/web/task_schedule/src/views/DesktopArchievement.vue | 4 ++-- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/code/web/task_schedule/package-lock.json b/code/web/task_schedule/package-lock.json index 99c433f..c3179f8 100644 --- a/code/web/task_schedule/package-lock.json +++ b/code/web/task_schedule/package-lock.json @@ -30,7 +30,7 @@ "eslint-config-standard-with-typescript": "^35.0.0", "eslint-plugin-vue": "^9.14.1", "node-sass": "^9.0.0", - "sass": "^1.62.1", + "sass": "^1.63.2", "style-loader": "^3.3.3", "typescript": "^5.1.3", "vue-eslint-parser": "^9.3.0" @@ -12242,9 +12242,9 @@ "dev": true }, "node_modules/sass": { - "version": "1.62.1", - "resolved": "https://registry.npmmirror.com/sass/-/sass-1.62.1.tgz", - "integrity": "sha512-NHpxIzN29MXvWiuswfc1W3I0N8SXBd8UR26WntmDlRYf0bSADnwnOjsyMZ3lMezSlArD33Vs3YFhp7dWvL770A==", + "version": "1.63.2", + "resolved": "https://registry.npmmirror.com/sass/-/sass-1.63.2.tgz", + "integrity": "sha512-u56TU0AIFqMtauKl/OJ1AeFsXqRHkgO7nCWmHaDwfxDo9GUMSqBA4NEh6GMuh1CYVM7zuROYtZrHzPc2ixK+ww==", "devOptional": true, "dependencies": { "chokidar": ">=3.0.0 <4.0.0", diff --git a/code/web/task_schedule/package.json b/code/web/task_schedule/package.json index 562c74f..ff72d11 100644 --- a/code/web/task_schedule/package.json +++ b/code/web/task_schedule/package.json @@ -31,7 +31,7 @@ "eslint-config-standard-with-typescript": "^35.0.0", "eslint-plugin-vue": "^9.14.1", "node-sass": "^9.0.0", - "sass": "^1.62.1", + "sass": "^1.63.2", "style-loader": "^3.3.3", "typescript": "^5.1.3", "vue-eslint-parser": "^9.3.0" diff --git a/code/web/task_schedule/src/views/DesktopArchievement.vue b/code/web/task_schedule/src/views/DesktopArchievement.vue index c4d5bf1..7f5d336 100644 --- a/code/web/task_schedule/src/views/DesktopArchievement.vue +++ b/code/web/task_schedule/src/views/DesktopArchievement.vue @@ -118,7 +118,7 @@ export default { attachingRankingList: [], // 坐席车非渗透率榜单 renewalRankingList: [], // 坐席续保率榜单 }); - const timerHandler = 0; + let timerHandler = 0; const getTotalArchievement = computed(() => { @@ -214,7 +214,7 @@ export default { onBeforeMount(() => { // 设置每10分钟刷新一次 - // timerHandler = setInterval( refresh, 5000 ); + timerHandler = setInterval( refresh, 5000 ); refresh(); }); From aa39cc4601158c1698c54d04971565d6896eea32 Mon Sep 17 00:00:00 2001 From: Kane Wang Date: Fri, 9 Jun 2023 16:37:50 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E4=BF=9D=E5=AD=98=E8=BF=9B=E5=BA=A6?= =?UTF-8?q?=EF=BC=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/components/RankingListComponent.vue | 74 +++++++++++++++--- code/web/task_schedule/src/utils/ranking.ts | 18 ++--- .../src/views/DesktopArchievement.vue | 75 +++++++++++++++---- 3 files changed, 131 insertions(+), 36 deletions(-) diff --git a/code/web/task_schedule/src/components/RankingListComponent.vue b/code/web/task_schedule/src/components/RankingListComponent.vue index 59dc936..769d2d2 100644 --- a/code/web/task_schedule/src/components/RankingListComponent.vue +++ b/code/web/task_schedule/src/components/RankingListComponent.vue @@ -9,7 +9,40 @@ --> @@ -42,7 +75,7 @@ export default { * setup函数 * @param props 组件的props属性。 */ - setup( props ) + setup(props) { /** * 计算对象,用于获取top5. @@ -51,13 +84,13 @@ export default { { const rankingList = props.rankingList; // eslint-disable-line - rankingList.sort(( a, b ) => + rankingList.sort((a, b) => { // @ts-ignore return a.index - b.index; }); - return rankingList.slice(0,5); + return rankingList.slice(0, 5); }); return { props, topFive, }; @@ -66,13 +99,34 @@ export default { diff --git a/code/web/task_schedule/src/utils/ranking.ts b/code/web/task_schedule/src/utils/ranking.ts index 3d73c8d..233a7f3 100644 --- a/code/web/task_schedule/src/utils/ranking.ts +++ b/code/web/task_schedule/src/utils/ranking.ts @@ -28,8 +28,8 @@ interface RankingListResponse departmentCode: string; year: string; month: string; - attachingRankingList: RankingListItem[]; - renewalRankintList: RankingListItem[]; + attachingRateRankingList: RankingListItem[]; + renewalRateRankingList: RankingListItem[]; }; /** @@ -49,8 +49,8 @@ function requestRankingList( reqParam: RankingListRequest, rander: any ): void / departmentCode: reqParam.departmentCode, year: reqParam.year, month: reqParam.month, - attachingRankingList: [], - renewalRankintList: [], + attachingRateRankingList: [], + renewalRateRankingList: [], }; instance.request( @@ -70,7 +70,7 @@ function requestRankingList( reqParam: RankingListRequest, rander: any ): void / rankingListResponse.month = data.month ?? ""; // 遍历排行榜元素 - for ( const item of ( data.attachingRankingList ?? [] )) // eslint-disable-line + for ( const item of ( data.attachingRateRankingList ?? [] )) // eslint-disable-line { const index: number = item.index ?? -1; @@ -79,10 +79,10 @@ function requestRankingList( reqParam: RankingListRequest, rander: any ): void / continue; } - rankingListResponse.attachingRankingList.push( item ); + rankingListResponse.attachingRateRankingList.push( item ); } - for ( const item of ( data.renewalRankintList ?? [] )) // eslint-disable-line + for ( const item of ( data.renewalRateRankingList ?? [] )) // eslint-disable-line { const index: number = item.index ?? -1; @@ -91,13 +91,11 @@ function requestRankingList( reqParam: RankingListRequest, rander: any ): void / continue; } - rankingListResponse.renewalRankintList.push( item ); + rankingListResponse.renewalRateRankingList.push( item ); } // 调用回调函数保存数据 rander( rankingListResponse ); - - console.log( data ); }) .catch(( error ) => { diff --git a/code/web/task_schedule/src/views/DesktopArchievement.vue b/code/web/task_schedule/src/views/DesktopArchievement.vue index 7f5d336..2a8075f 100644 --- a/code/web/task_schedule/src/views/DesktopArchievement.vue +++ b/code/web/task_schedule/src/views/DesktopArchievement.vue @@ -31,12 +31,8 @@ :percentage="ui.attaching_rate" /> -
- +
+
@@ -52,8 +48,35 @@
- - +

本大爷

+ +
@@ -134,7 +157,7 @@ export default { }); // 保存业绩数据 - const applyArchievementData = ( data:Archievement ) => + const applyArchievementData = ( data: Archievement ) => { console.log( "部门业绩数据", data ); @@ -155,13 +178,15 @@ export default { const applyRankingListData = ( data: RankingListResponse ): void => { - ui.attachingRankingList = data.attachingRankingList; - ui.renewalRankingList = data.renewalRankintList; + ui.attachingRankingList = data.attachingRateRankingList; + ui.renewalRankingList = data.renewalRateRankingList; // 更新UI // 先不显示界面,往队列中加入显示队列的回调,让vue刷新组件。 ui.showUI = false; + console.log( "获取排行榜后的ui:", data ); + setTimeout(() => { ui.showUI = true; }, 0 ); }; @@ -191,7 +216,7 @@ export default { */ const refresh = () => { - const deparmentInfo:Department = + const deparmentInfo: Department = { departmentCode: callerInfo.departmentCode, departmentName: callerInfo.departmentName, @@ -214,7 +239,7 @@ export default { onBeforeMount(() => { // 设置每10分钟刷新一次 - timerHandler = setInterval( refresh, 5000 ); + timerHandler = setInterval( refresh, 600 * 1000 ); refresh(); }); @@ -222,7 +247,7 @@ export default { /** * 页面卸载前 */ - onUnmounted(():void => + onUnmounted((): void => { // 退出页面前关掉定时器 clearInterval( timerHandler ); @@ -358,8 +383,26 @@ export default { justify-content: center; align-items: flex-start; - >*+* { - margin-top: 15px; + // >*+* { + // 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; } } From 1b368deb9c2e0802c30e9394a27ce8cc11e195eb Mon Sep 17 00:00:00 2001 From: Kane Wang Date: Fri, 9 Jun 2023 16:57:13 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E4=BF=9D=E5=AD=98=E8=BF=9B=E5=BA=A6?= =?UTF-8?q?=EF=BC=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- code/web/task_schedule/src/layout/components/Aside.vue | 2 +- code/web/task_schedule/src/layout/components/Header.vue | 6 +++++- code/web/task_schedule/src/views/DesktopArchievement.vue | 2 ++ 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/code/web/task_schedule/src/layout/components/Aside.vue b/code/web/task_schedule/src/layout/components/Aside.vue index f6833a4..8924f9e 100644 --- a/code/web/task_schedule/src/layout/components/Aside.vue +++ b/code/web/task_schedule/src/layout/components/Aside.vue @@ -116,7 +116,7 @@ export default { width: 100%; } -.el-menu { +:deep(.el-menu) { border-right: none; /* border-left: 5px solid #1d74b2; */ overflow: auto; diff --git a/code/web/task_schedule/src/layout/components/Header.vue b/code/web/task_schedule/src/layout/components/Header.vue index 755ec5c..44697fc 100644 --- a/code/web/task_schedule/src/layout/components/Header.vue +++ b/code/web/task_schedule/src/layout/components/Header.vue @@ -11,7 +11,7 @@
CPIC
- 测试版 + 桌面霸屏后台管理 Build-202303251257
@@ -93,6 +93,10 @@ export default { font: { size: 0.5rem; } + + > *+* { + margin-top: 1px; + } } .company-name { diff --git a/code/web/task_schedule/src/views/DesktopArchievement.vue b/code/web/task_schedule/src/views/DesktopArchievement.vue index 2a8075f..d51e4d2 100644 --- a/code/web/task_schedule/src/views/DesktopArchievement.vue +++ b/code/web/task_schedule/src/views/DesktopArchievement.vue @@ -53,6 +53,7 @@