保存进度!

This commit is contained in:
2023-11-06 19:16:38 +08:00
parent 4e74bff380
commit 484b8a78e9
11 changed files with 688 additions and 59 deletions

View File

@@ -7,7 +7,7 @@
*
* Copyright (c) ${2023} by Kane, All Rights Reserved.
*/
import { service as instance } from "./api/request.js";
import { service as instance, service } from "./api/request.js";
import { API_URL } from "./api/config.js";
import { type AxiosResponse } from "axios";
interface BIReportType
@@ -16,6 +16,9 @@ interface BIReportType
reportTypeName: string;
}
/**
* 导入报表的请求对象
*/
interface ImportBIReportRequest
{
filePath: string,
@@ -24,33 +27,59 @@ interface ImportBIReportRequest
sheetIndex: number,
}
/**
* 导入报表的相应对象
*/
interface ImportBIReportResponse
{
success: boolean,
message: string,
importedCount: number,
success: boolean, // 请求成功标志
message: string, // 请求结果说明
importedCount: number, // 导入记录的数量
}
// BI坐席渗透率报表记录
interface BITelsalerAttachingRateReportRecord
interface BITelsalerAttachingRateRecord
{
departmentName: string;
telsalerName: string;
motoPremium: number;
nomotoPremium: number;
attachingRatePresentMonth: number;
attachingRateChange: number;
departmentName: string; // 部门
telsalerName: string; // 经办人
motoPremium: number; // 车险保费
nomotoPremium: number; // 非车险保费
motoPremiumProportion: number; // 车险保费占比
attachingRate: number; // 保费渗透率
attachingRateChange: number; // 渗透率环比上月
customerHandleRate: number; // 当月客户渗透率
customerHandleRateChange: number; // 客户渗透率环比上月
noMotoPremiumPerCustomer: number; // 当月车非客均保费
noMotoPremiumPerCustomerChange: number; // 客均保费环比上月
}
interface QueryBITelsalerAttachingRateReportResponse
{
success: boolean,
message: string,
records: BITelsalerAttachingRateReportRecord[];
records: BITelsalerAttachingRateRecord[];
}
type ImportBIReportResponseHandler = ( response: ImportBIReportResponse, error?: any ) => void;
/**
* BI坐席续保率报表记录
*/
interface BITelsalerRenewalRateRecord
{
责任部门: string;
责任人: string;
机构目标值: number;
到期数全月: number;
序时到期数占比: number;
个车续保率序时: number;
个车续保率全月: number;
环比昨日: number;
环比上月: number;
平均提前签单天数: number;
环比: number;
}
type ImportBIReportResponseHandler = ( response: ImportBIReportResponse, error: any ) => void;
type QueryBITelsalerAttachingRateDataHandler = ( response: QueryBITelsalerAttachingRateReportResponse, error: any ) => void;
/**
*
* @param request 请求参数
@@ -88,12 +117,49 @@ function importBIReport( request: ImportBIReportRequest, handler: any ): void
});
}
function queryBITelsalerAttachingRateData( handler: QueryBITelsalerAttachingRateDataHandler ): void
{
const queryResponse: QueryBITelsalerAttachingRateReportResponse = {
success: false,
message: "",
records: [],
};
instance.request({
url: API_URL.URL_BI_TELSALER_ATTACHINGRATE,
method: "post",
})
.then(( response: AxiosResponse<any, any> ): void =>
{
const data = response.data ?? {};
queryResponse.success = data.success ?? false;
queryResponse.message = data.message ?? "";
queryResponse.records = data.records ?? [];
console.log( "请求BI坐席渗透率数据", queryResponse );
handler( queryResponse, null );
})
.catch(( error ): void =>
{
queryResponse.message = "请求BI坐席渗漏率报表数据时出现错误请查看控制台消息";
queryResponse.success = false;
console.log( error );
handler( queryResponse, error );
});
}
export {
type BIReportType,
type ImportBIReportRequest,
type ImportBIReportResponse,
type ImportBIReportResponseHandler,
type BITelsalerAttachingRateReportRecord,
type BITelsalerAttachingRateRecord,
type QueryBITelsalerAttachingRateReportResponse,
importBIReport
type QueryBITelsalerAttachingRateDataHandler,
type BITelsalerRenewalRateRecord,
importBIReport,
queryBITelsalerAttachingRateData
};

View File

@@ -50,6 +50,13 @@ const API_URL = {
// 导入报表
URL_IMPORT_REPORT: "http://10.39.0.41:8081/desktop_archievement_backend/import_bi_data/excel.do",
// URL_IMPORT_REPORT: "http://222.76.244.118:11101/desktop_archievement_backend/import_bi_data/excel.do",
// 请求BI报表数据
// URL_BI_TELSALER_ATTACHINGRATE: "http://localhost:8080/desktop_archievement_backend/archievement/bi_telsaler_attachingrate.do",
URL_BI_TELSALER_ATTACHINGRATE: "http://10.39.0.41:8081/desktop_archievement_backend/archievement/bi_telsaler_attachingrate.do",
URL_BI_TELSALER_RENEWALRATE: "http://10.39.0.41:8081/desktop_archievement_backend/archievement/bi_telsaler_renewalrate.do",
URL_BI_DEPARTMENT_ATTACHINGRATE: "http://10.39.0.41:8081/desktop_archievement_backend/archievement/bi_department_attachingrate.do",
URL_BI_DEPARTMENT_RENEWALRATE: "http://10.39.0.41:8081/desktop_archievement_backend/archievement/bi_department_renewalrate.do",
};
export { API_URL };

View File

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