保存进度!
This commit is contained in:
		@@ -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
 | 
			
		||||
};
 | 
			
		||||
 
 | 
			
		||||
@@ -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 };
 | 
			
		||||
 
 | 
			
		||||
@@ -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,
 | 
			
		||||
        };
 | 
			
		||||
    },
 | 
			
		||||
};
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user