117 lines
3.2 KiB
TypeScript
117 lines
3.2 KiB
TypeScript
/*
|
||
* @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[];
|
||
}
|
||
|
||
// 判断用的正则表达式
|
||
const regexMonth = "(0[1-9])|(1[0-2])";
|
||
|
||
/**
|
||
* 请求坐席排行榜。
|
||
* @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: [],
|
||
};
|
||
|
||
// 检查请求参数
|
||
// TODO: 这里要加一个对month的正则表达式验证。
|
||
|
||
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
|
||
};
|