From b51fa42a6e18b95a012706d995df7892d0ecf95e Mon Sep 17 00:00:00 2001 From: zhengyiming <540361168@qq.com> Date: 星期四, 03 七月 2025 18:59:24 +0800 Subject: [PATCH] fix: 江佑保系统健壮性修复 --- src/views/Home/Home.vue | 216 ++++++++++++++++++++++++++++++++++++++++++++++-------- 1 files changed, 184 insertions(+), 32 deletions(-) diff --git a/src/views/Home/Home.vue b/src/views/Home/Home.vue index 712142d..f6c7188 100644 --- a/src/views/Home/Home.vue +++ b/src/views/Home/Home.vue @@ -53,10 +53,17 @@ </QueryFilterItem> </template> <template #btn> + <el-button + @click="handleDownloadOccupationType()" + type="primary" + style="margin-right: 10px" + link + >鑱屼笟绫诲瀷瀵圭収琛�</el-button + > <el-button @click="handleDownload()" type="primary" style="margin-right: 10px" link >妯℃澘涓嬭浇</el-button > - <el-button @click="handleUpload()" type="primary" style="margin-right: 10px" + <el-button @click="handleOpenInstructions()" type="primary" style="margin-right: 10px" >瀵煎叆鎶曚繚浜哄憳</el-button > <!-- <el-button @@ -82,10 +89,29 @@ rowKey: 'id', }" > + <template #auditStatus="{ row }"> + <el-tooltip + class="box-item" + effect="dark" + :content="row.auditRemark" + placement="top" + v-if="row.auditStatus === InsurancePolicyAuditStatusEnum.Reject && row.auditRemark" + popper-class="max-width-popper" + > + <div style="display: inline-flex; align-items: center; color: inherit"> + {{ InsurancePolicyAuditStatusEnumText[row.auditStatus] }} + <el-icon size="16" color="#3a71ff"><QuestionFilled /></el-icon> + </div> + </el-tooltip> + <el-text v-else style="color: inherit"> + {{ InsurancePolicyAuditStatusEnumText[row.auditStatus] }} + </el-text> + </template> </ProTableV2> </AppContainer> <UploadInsurePersonDialog v-bind="dialogProps" /> <UploadStampFileDialog v-bind="dialogStampFileProps" /> + <InsureInstructionsDialog v-bind="dialogInstructionsProps" /> </LoadingLayout> </template> @@ -104,13 +130,21 @@ SearchInput, FieldRadio, XLSXUtils, + useDialog, } from '@bole-core/components'; import * as insuranceOrderServices from '@/services/api/InsuranceOrder'; import { Message, OrderInputType, downloadFileByUrl } from '@bole-core/core'; import { columns } from './constants'; import UploadInsurePersonDialog from './components/UploadInsurePersonDialog.vue'; import UploadStampFileDialog from './components/UploadStampFileDialog.vue'; -import { format, downloadFile, setOSSLink, toThousand, convertApi2FormUrl } from '@/utils'; +import { + format, + downloadFile, + setOSSLink, + toThousand, + convertApi2FormUrl, + convertFormUrl2Api, +} from '@/utils'; import { ModelValueType } from 'element-plus'; import { InsuranceOrderTempPath, @@ -121,9 +155,14 @@ InsurancePolicyAuditStatusEnumText, InsurancePolicyAuditStatusEnum, InsurancePolicyProductIdNumberEnum, + InsurancePolicyListPayStatusEnum, + InsurancePolicyListPayStatusEnumText, + InsuranceOccupationTypeTempPath, } from '@/constants'; import dayjs from 'dayjs'; import _ from 'lodash'; +import InsureInstructionsDialog from './components/InsureInstructionsDialog.vue'; +// import { Recorder } from '@/utils/record'; defineOptions({ name: 'Home', @@ -149,8 +188,7 @@ }, extraProps: { hide: (row: API.GetInsurancePageOutput) => - row.productIdNumber === InsurancePolicyProductIdNumberEnum.SJB || - row.status !== InsurancePolicyStatusEnum.Effecting, + row.productOnline || row.status !== InsurancePolicyStatusEnum.Effecting, }, }, { @@ -163,8 +201,6 @@ }, extraProps: { hide: (row: API.GetInsurancePageOutput) => - row.productIdNumber === InsurancePolicyProductIdNumberEnum.SJB || - row.auditStatus !== InsurancePolicyAuditStatusEnum.Pass || row.status !== InsurancePolicyStatusEnum.WaitEffect, }, }, @@ -177,9 +213,47 @@ onClick: (role) => handleDownloadInsureFile(role), }, extraProps: { - hide: (row: API.GetInsurancePageOutput) => !row.insureBillUrl, + hide: (row: API.GetInsurancePageOutput) => row.productOnline || !row.insureBillUrl, }, }, + { + data: { + enCode: 'payBtn', + name: '鏀粯', + }, + emits: { + onClick: (role) => handlePay(role), + }, + extraProps: { + hide: (row: API.GetInsurancePageOutput) => + row.payStatus != InsurancePolicyListPayStatusEnum.WaitPay, + }, + }, + { + data: { + enCode: 'stampFilesBtn', + name: '淇濆崟涓嬭浇', + }, + emits: { + onClick: (role) => handleGoStampFiles(role), + }, + extraProps: { + hide: (row: API.GetInsurancePageOutput) => !(row.productOnline && row.anyPayComplete), + }, + }, + { + data: { + enCode: 'downloadInvoiceBtn', + name: '鍙戠エ涓嬭浇', + }, + emits: { + onClick: (role) => handleGoDownloadInvoice(role), + }, + extraProps: { + hide: (row: API.GetInsurancePageOutput) => !(row.productOnline && row.anyPayComplete), + }, + }, + // { // data: { // enCode: 'standarEndoBtn', @@ -196,11 +270,22 @@ }; const state = reactive({ ...BaseState }); +// const recorder = ref(new Recorder()); onMounted(async () => { await getList(); state.loading = false; + // handleOpenInstructions(); + + // setTimeout(() => { + // // recorder.value.init(); + // recorder.value.replaySession('9cb24e5a-0423-4dcd-abd5-fa7a4117cadc'); + // }, 3000); }); + +// onUnmounted(() => { +// recorder.value.stopRecordingAndSave(); +// }); const { getDataSource: getList, @@ -229,7 +314,6 @@ }, columnsRenderProps: { status: { type: 'enum', valueEnum: InsurancePolicyStatusEnumText }, - auditStatus: { type: 'enum', valueEnum: InsurancePolicyAuditStatusEnumText }, insurancePeriod: { type: 'enum', valueEnum: insuranceTypeText }, creationTime: { type: 'date', format: 'YYYY-MM-DD' }, effectStartTime: { type: 'date', format: 'YYYY-MM-DD' }, @@ -244,6 +328,7 @@ formatter: (row: API.GetInsurancePageOutput) => row.amount == null ? '' : toThousand(row.amount), }, + payStatus: { type: 'enum', valueEnum: InsurancePolicyListPayStatusEnumText }, }, } ); @@ -271,15 +356,17 @@ serialNum: '', url: [] as UploadUserFile[], productIdNumber: '', + productSchemeIdNumber: '', + effectStartTime: dayjs().add(1, 'day').format('YYYY-MM-DD'), }, closeAfterConfirm: false, }); async function checkInrancesSerialNumStatus() { try { - let params: API.APIimportInsStaffToListParams = { + let params: API.APIcheckInrancesSerialNumStatusParams = { serialNum: editForm.serialNum, - url: editForm.url?.[0]?.path, + // url: editForm.url?.[0]?.path, }; let res = await insuranceOrderServices.checkInrancesSerialNumStatus(params); if (res === InsurancePolicyStatusEnum.Effecting) { @@ -297,35 +384,64 @@ async function importInsStaffToList() { try { - let params: API.APIimportInsStaffToListParams = { + let params: API.ImportInsStaffToListFrontInput = { serialNum: editForm.serialNum, url: editForm.url?.[0]?.path, productIdNumber: editForm.productIdNumber, + productSchemeIdNumber: editForm.productSchemeIdNumber, + effectStartTime: editForm.effectStartTime, }; - let res = await insuranceOrderServices.importInsStaffToList(params); - if (res.length > 0) { - await Message.tipMessage('瀛樺湪閿欒鏁版嵁锛屾槸鍚﹀鍑猴紵'); - XLSXUtils.exportToXLSX({ - workbookDataList: res, - fileName: '閿欒浜哄憳鍚嶅崟', - workbookHeaderMap: { - name: '闆囧憳濮撳悕', - sex: '鎬у埆', - certType: '璇佷欢绫诲瀷', - certNo: '璇佷欢鍙风爜', - jobName: '闆囧憳宸ョ', - useEmploer: '鐢ㄥ伐鍗曚綅', - address: '鐢ㄥ伐鍦扮偣', - note: '澶囨敞', - }, - }); + let res = await insuranceOrderServices.importInsStaffToList(params, { + timeout: 60 * 1000 * 10, + }); + if (res) { + // await Message.tipMessage('瀛樺湪閿欒鏁版嵁锛屾槸鍚﹀鍑猴紵'); + try { + if (res.errorList.length > 0) { + await Message.tipMessage( + `鎬绘姇淇濅汉鏁�${res.importAllCount}浜猴紝鎶曚繚鎴愬姛${res.successCount}浜猴紝鎶曚繚澶辫触${res.errorList.length}浜烘槸鍚﹀鍑烘姇淇濆け璐ヤ汉鍛樻竻鍗曪紵`, + { + confirmButtonText: '瀵煎嚭', + } + ); + XLSXUtils.exportToXLSX({ + workbookDataList: res.errorList, + fileName: '閿欒浜哄憳鍚嶅崟', + workbookHeaderMap: { + name: '闆囧憳濮撳悕', + sex: '鎬у埆', + certType: '璇佷欢绫诲瀷', + certNo: '璇佷欢鍙风爜', + jobName: '闆囧憳宸ョ', + useEmploer: '鐢ㄥ伐鍗曚綅', + address: '鐢ㄥ伐鍦扮偣', + note: '澶囨敞', + }, + }); + } else { + await Message.tipMessage( + `鎬绘姇淇濅汉鏁�${res.importAllCount}浜猴紝鎶曚繚鎴愬姛${res.successCount}浜篳, + { + showCancelButton: false, + } + ); + } + } catch (error) {} + dialogState.dialogVisible = false; + getList(paginationState.pageIndex); } - dialogState.dialogVisible = false; - getList(paginationState.pageIndex); } catch (error) {} } -function handleUpload() { +const { dialogProps: dialogInstructionsProps, dialogState: dialogInstructionsState } = useDialog({ + onConfirm: handleUpload, +}); + +function handleOpenInstructions() { + dialogInstructionsState.dialogVisible = true; +} + +async function handleUpload() { handleAdd({ serialNum: `${dayjs().format('YYYYMMDD')}${_.random(0, 9999).toString().padStart(4, '0')}`, url: [] as UploadUserFile[], @@ -366,6 +482,10 @@ downloadFile(res.data, `鍦ㄤ繚浜哄憳瀵煎嚭`, 'xlsx'); } } catch (error) {} +} + +function handleDownloadOccupationType() { + downloadFileByUrl(InsuranceOccupationTypeTempPath, '鑱屼笟绫诲瀷瀵圭収琛�'); } function handleDownload() { @@ -409,7 +529,7 @@ try { let params: API.UploadInsuranceStampFilesInput = { insurancePolicyId: stampFileForm.id, - listFiles: stampFileForm.url?.map((x) => x.path) ?? [], + listFiles: convertFormUrl2Api(stampFileForm.url), }; let res = await insuranceOrderServices.uploadInsuranceStampFiles(params); if (res) { @@ -471,4 +591,36 @@ // } } catch (error) {} } + +async function handleGoStampFiles(row: API.GetInsurancePageOutput) { + try { + router.push({ + name: 'InsurancePolicyStampFiles', + params: { + id: row.id, + }, + }); + } catch (error) {} +} + +function handlePay(row: API.GetInsurancePageOutput) { + router.push({ + name: 'InsurePayDetail', + params: { + id: row.id, + }, + }); +} + +async function handleGoDownloadInvoice(row: API.GetInsurancePageOutput) { + try { + await insuranceOrderServices.getInvoiceId({ id: row.id }); + router.push({ + name: 'InsureDownloadInvoice', + params: { + id: row.id, + }, + }); + } catch (error) {} +} </script> -- Gitblit v1.9.1