From d54c9c48c0b4f7c609e0aa65671a6c3fd26f94b4 Mon Sep 17 00:00:00 2001 From: zhengyiming <540361168@qq.com> Date: 星期五, 04 七月 2025 13:19:29 +0800 Subject: [PATCH] fix: 江佑保系统健壮性修复 --- src/hooks/dic.ts | 13 ++ src/constants/insuranceClaim.ts | 3 src/services/api/typings.d.ts | 50 ++++++++- src/views/Home/components/InsureOrderInfoView.vue | 108 +++++++++++---------- src/hooks/insuranceClaim.ts | 31 ++++++ src/views/Home/Home.vue | 10 + src/services/api/InsuranceOrder.ts | 58 ++++++++++- 7 files changed, 208 insertions(+), 65 deletions(-) diff --git a/src/constants/insuranceClaim.ts b/src/constants/insuranceClaim.ts index 933f583..5ec5d81 100644 --- a/src/constants/insuranceClaim.ts +++ b/src/constants/insuranceClaim.ts @@ -92,6 +92,8 @@ Reject = -10, /**寰呭鏍� */ WaitAudit = 10, + /**瀹℃牳涓� */ + Auditing = 15, /**閫氳繃 */ Pass = 20, } @@ -99,6 +101,7 @@ export const InsurancePolicyAuditStatusEnumText = { [InsurancePolicyAuditStatusEnum.Reject]: '椹冲洖', [InsurancePolicyAuditStatusEnum.WaitAudit]: '寰呭鏍�', + [InsurancePolicyAuditStatusEnum.Auditing]: '瀹℃牳涓�', [InsurancePolicyAuditStatusEnum.Pass]: '閫氳繃', }; diff --git a/src/hooks/dic.ts b/src/hooks/dic.ts index 48489a0..7c5ab3e 100644 --- a/src/hooks/dic.ts +++ b/src/hooks/dic.ts @@ -36,11 +36,24 @@ return insureProduct?.id ?? ''; } + const queryClient = useQueryClient(); + + function ensureUserInsureProductSetting() { + return queryClient.ensureQueryData<API.InsureProductSettingDto[]>({ + queryKey: ['dictionaryServices/getUserInsureProductSetting'], + }); + } + + /**鏄惁鏄敓鐓庝繚璐﹀彿 */ + const isSjbAccount = computed(() => allUserInsureProductSettingList.value.length > 0); + return { allUserInsureProductSettingList, getInsureProductByIdNumber, getInsureProductIdByIdNumber, refetch, + ensureUserInsureProductSetting, + isSjbAccount, }; } diff --git a/src/hooks/insuranceClaim.ts b/src/hooks/insuranceClaim.ts index 836852b..7e60a39 100644 --- a/src/hooks/insuranceClaim.ts +++ b/src/hooks/insuranceClaim.ts @@ -50,3 +50,34 @@ isLoading, }; } + +export function useInsureActions() { + const router = useRouter(); + async function handleGoDownloadInvoice(id: string) { + try { + await insuranceOrderServices.getInvoiceId({ id: id }); + router.push({ + name: 'InsureDownloadInvoice', + params: { + id: id, + }, + }); + } catch (error) {} + } + + async function handleGoStampFiles(id: string) { + try { + router.push({ + name: 'InsurancePolicyStampFiles', + params: { + id: id, + }, + }); + } catch (error) {} + } + + return { + handleGoDownloadInvoice, + handleGoStampFiles, + }; +} diff --git a/src/services/api/InsuranceOrder.ts b/src/services/api/InsuranceOrder.ts index 7e369e6..54e53d5 100644 --- a/src/services/api/InsuranceOrder.ts +++ b/src/services/api/InsuranceOrder.ts @@ -77,6 +77,20 @@ }); } +/** 鑾峰彇鐢靛瓙淇濆崟 POST /api/InsuranceOrder/DownloadPolicyFile/${param0} */ +export async function downloadPolicyFileId( + // 鍙犲姞鐢熸垚鐨凱aram绫诲瀷 (闈瀊ody鍙傛暟swagger榛樿娌℃湁鐢熸垚瀵硅薄) + params: API.APIdownloadPolicyFileIdParams, + options?: API.RequestConfig +) { + const { id: param0, ...queryParams } = params; + return request<string>(`/api/InsuranceOrder/DownloadPolicyFile/${param0}`, { + method: 'POST', + params: { ...queryParams }, + ...(options || {}), + }); +} + /** 鎵归噺鍑忓憳淇濆崟鏁版嵁 POST /api/InsuranceOrder/DownsizingInsuranceOrderData */ export async function downsizingInsuranceOrderData( body: API.DownsizingInsuranceOrderData, @@ -322,17 +336,17 @@ ); } -/** 淇濆崟璇︽儏-瀵煎叆浜哄憳娓呭崟 GET /api/InsuranceOrder/GetInsuranceStaffListExport */ +/** 淇濆崟璇︽儏-瀵煎嚭浜哄憳娓呭崟 POST /api/InsuranceOrder/GetInsuranceStaffListExport */ export async function getInsuranceStaffListExport( - // 鍙犲姞鐢熸垚鐨凱aram绫诲瀷 (闈瀊ody鍙傛暟swagger榛樿娌℃湁鐢熸垚瀵硅薄) - params: API.APIgetInsuranceStaffListExportParams, + body: API.ExportInsuranceStaffListInput, options?: API.RequestConfig ) { return request<any>('/api/InsuranceOrder/GetInsuranceStaffListExport', { - method: 'GET', - params: { - ...params, + method: 'POST', + headers: { + 'Content-Type': 'application/json', }, + data: body, ...(options || {}), }); } @@ -416,7 +430,37 @@ body: API.InsurancePolicyAuditInput, options?: API.RequestConfig ) { - return request<number>('/api/InsuranceOrder/InsurancePolicyAudit', { + return request<API.InsurancePolicyAuditOutput>('/api/InsuranceOrder/InsurancePolicyAudit', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + data: body, + ...(options || {}), + }); +} + +/** 淇濆崟鍐嶅 POST /api/InsuranceOrder/InsurancePolicyAuditAgain */ +export async function insurancePolicyAuditAgain( + // 鍙犲姞鐢熸垚鐨凱aram绫诲瀷 (闈瀊ody鍙傛暟swagger榛樿娌℃湁鐢熸垚瀵硅薄) + params: API.APIinsurancePolicyAuditAgainParams, + options?: API.RequestConfig +) { + return request<any>('/api/InsuranceOrder/InsurancePolicyAuditAgain', { + method: 'POST', + params: { + ...params, + }, + ...(options || {}), + }); +} + +/** 鎶曚繚鐘舵�佽ˉ褰� POST /api/InsuranceOrder/RestorePolicyStatus */ +export async function restorePolicyStatus( + body: API.RestorePolicyInput, + options?: API.RequestConfig +) { + return request<any>('/api/InsuranceOrder/RestorePolicyStatus', { method: 'POST', headers: { 'Content-Type': 'application/json', diff --git a/src/services/api/typings.d.ts b/src/services/api/typings.d.ts index c168d1b..ebb87b8 100644 --- a/src/services/api/typings.d.ts +++ b/src/services/api/typings.d.ts @@ -192,6 +192,10 @@ id?: string; } + interface APIdownloadPolicyFileIdParams { + id: string; + } + interface APIexportInsuranceBatchStaffParams { batchBillId?: string; } @@ -282,10 +286,6 @@ id?: string; } - interface APIgetInsuranceStaffListExportParams { - id?: string; - } - interface APIgetInsureBatchDetailParams { batchBillId?: string; } @@ -364,6 +364,10 @@ interface APIimportInsDetailStaffToListParams { url?: string; + id?: string; + } + + interface APIinsurancePolicyAuditAgainParams { id?: string; } @@ -706,6 +710,11 @@ interface EntityExtensionDto { properties?: Record<string, any>; configuration?: Record<string, any>; + } + + interface ExportInsuranceStaffListInput { + status?: InsuranceDetailStatusEnum; + insurancePolicyId?: string; } interface ExtensionEnumDto { @@ -1458,7 +1467,7 @@ count?: number; } - type InsuranceDetailStatusEnum = 10 | 12 | 14 | 20 | 30; + type InsuranceDetailStatusEnum = 10 | 12 | 13 | 14 | 20 | 30; interface InsuranceOrderListOutput { id?: string; @@ -1556,7 +1565,18 @@ returnUrl?: string; } - type InsurancePolicyAuditStatusEnum = 10 | 20 | -10; + interface InsurancePolicyAuditOutput { + /** 娑堟伅 */ + messages?: string[]; + /** 鎬绘姇淇濅汉鏁� */ + totalCount?: number; + /** 鎶曚繚鎴愬姛 */ + successCount?: number; + /** 鎶曚繚澶辫触 */ + failCount?: number; + } + + type InsurancePolicyAuditStatusEnum = 10 | 15 | 20 | -10; type InsurancePolicyListPayStatusEnum = 1 | 2; @@ -2062,6 +2082,24 @@ password?: string; } + interface RestorePolicyDto { + /** Id */ + id?: string; + /** 璁㈠崟鍙� */ + channelOrderNo?: string; + /** 淇濆崟鍙� */ + policyNo?: string; + /** 鐢靛瓙淇濆崟閾炬帴 */ + policyOssUrl?: string; + } + + interface RestorePolicyInput { + /** 淇濆崟Id */ + insurancePolicyId?: string; + /** 鎶曚繚鎵规 */ + items?: RestorePolicyDto[]; + } + interface ReturnValueApiDescriptionModel { type?: string; typeSimple?: string; diff --git a/src/views/Home/Home.vue b/src/views/Home/Home.vue index f6c7188..8f164ac 100644 --- a/src/views/Home/Home.vue +++ b/src/views/Home/Home.vue @@ -58,6 +58,7 @@ type="primary" style="margin-right: 10px" link + v-if="isSjbAccount" >鑱屼笟绫诲瀷瀵圭収琛�</el-button > <el-button @click="handleDownload()" type="primary" style="margin-right: 10px" link @@ -162,6 +163,7 @@ import dayjs from 'dayjs'; import _ from 'lodash'; import InsureInstructionsDialog from './components/InsureInstructionsDialog.vue'; +import { useUserInsureProductSetting } from '@/hooks'; // import { Recorder } from '@/utils/record'; defineOptions({ @@ -437,8 +439,14 @@ onConfirm: handleUpload, }); +const { isSjbAccount } = useUserInsureProductSetting(); + function handleOpenInstructions() { - dialogInstructionsState.dialogVisible = true; + if (isSjbAccount.value) { + dialogInstructionsState.dialogVisible = true; + } else { + handleUpload(); + } } async function handleUpload() { diff --git a/src/views/Home/components/InsureOrderInfoView.vue b/src/views/Home/components/InsureOrderInfoView.vue index 229edc5..8772799 100644 --- a/src/views/Home/components/InsureOrderInfoView.vue +++ b/src/views/Home/components/InsureOrderInfoView.vue @@ -11,7 +11,7 @@ <el-button type="primary" link - @click="handleGoStampFiles" + @click="handleGoStampFiles(id)" v-if="detail.productOnline && detail.anyPayComplete" >璇︽儏</el-button > @@ -75,7 +75,10 @@ </ProForm> </ChunkCell> <ChunkCell title="浜哄憳淇℃伅" class="full-table-chunk"> - <template #titleRight v-if="detail.status !== InsurancePolicyStatusEnum.WaitEffect"> + <template + #titleRight + v-if="detail.status !== InsurancePolicyStatusEnum.WaitEffect && !detail.productOnline" + > <el-button type="primary" @click="handleBatchChange">鎵规敼鐢宠</el-button> </template> <ProTableQueryFilterBar @on-reset="reset"> @@ -92,34 +95,41 @@ </template> <template #btn> <template v-if="detail.status === InsurancePolicyStatusEnum.WaitEffect"> - <el-button @click="handleTemplateDownload()" link type="primary">妯℃澘涓嬭浇</el-button> - <BlFileUpload - v-if=" - detail.auditStatus !== InsurancePolicyAuditStatusEnum.Pass && - !detail.productOnline - " - :limitFileSize="10" - accept="xls,xlsx" - :showTip="false" - :show-file-list="false" - :on-success="handleUploadSuccess" - style="margin-right: 10px; margin-left: 10px" - > - <template #default> - <el-button icon="Plus" type="primary">瀵煎叆</el-button> - </template> - </BlFileUpload> - <el-button @click="handleClear()" type="primary">瀵煎嚭鎶曚繚閿欒浜哄憳娓呭崟</el-button> - <el-button @click="handleClear()" type="primary">娓呯┖鏁版嵁</el-button> + <template v-if="!detail.productOnline"> + <el-button @click="handleTemplateDownload()" link type="primary" + >妯℃澘涓嬭浇</el-button + > + <BlFileUpload + v-if="detail.auditStatus !== InsurancePolicyAuditStatusEnum.Pass" + :limitFileSize="10" + accept="xls,xlsx" + :showTip="false" + :show-file-list="false" + :on-success="handleUploadSuccess" + style="margin-right: 10px; margin-left: 10px" + > + <template #default> + <el-button icon="Plus" type="primary">瀵煎叆</el-button> + </template> + </BlFileUpload> + <el-button @click="handleClear()" type="primary">娓呯┖鏁版嵁</el-button> + </template> </template> <template v-else> - <el-button @click="handleDownloadPerson()" type="primary">涓嬭浇浜哄憳娓呭崟</el-button> <template v-if="detail.productOnline"> - <el-button v-if="detail.anyPayComplete" @click="handleGoStampFiles()" type="primary" - >涓嬭浇淇濆崟</el-button + <el-button @click="handleExport(InsuranceDetailStatusEnum.Effecting)" type="primary" + >瀵煎嚭鍦ㄤ繚浜哄憳</el-button > + <el-button @click="handleExport(InsuranceDetailStatusEnum.Fail)" type="primary" + >瀵煎嚭閿欒浜哄憳</el-button + > + <el-button @click="handleGoStampFiles(id)" type="primary">涓嬭浇淇濆崟</el-button> + <el-button @click="handleGoDownloadInvoice(id)" type="primary">涓嬭浇鍙戠エ</el-button> </template> - <el-button v-else @click="handleDownloadOrder()" type="primary">涓嬭浇淇濆崟</el-button> + <template v-else> + <el-button @click="handleExport(null)" type="primary">涓嬭浇浜哄憳娓呭崟</el-button> + <el-button @click="handleDownloadOrder()" type="primary">涓嬭浇淇濆崟</el-button> + </template> </template> </template> </ProTableQueryFilterBar> @@ -170,6 +180,7 @@ InsurancePolicyStatusEnumText, InsurancePolicyAuditStatusEnum, InsuranceDetailStatusEnumText, + InsuranceDetailStatusEnum, } from '@/constants'; import ChangePersonInfoDialog from './ChangePersonInfoDialog.vue'; import InsureClaimDetailDialog from './InsureClaimDetailDialog.vue'; @@ -179,6 +190,7 @@ import { downloadFile, downloadFileByUrl, Message, OrderInputType } from '@bole-core/core'; import { setOSSLink } from '@/utils'; import dayjs from 'dayjs'; +import { useInsureActions } from '@/hooks'; defineOptions({ name: 'InsureOrderInfoView', @@ -428,36 +440,11 @@ } catch (error) {} } -async function handleDownloadPerson() { - try { - if (paginationState.total === 0) { - Message.warnMessage('娌℃湁鏁版嵁鍙互瀵煎嚭鍝'); - return; - } - let res = await insuranceOrderServices.getInsuranceStaffListExport( - { id: id }, - { - responseType: 'blob', - getResponse: true, - } - ); - if (res) { - downloadFile(res.data, `浜哄憳娓呭崟`, 'xlsx'); - } - } catch (error) {} -} function handleDownloadOrder() { downloadFileByUrl(setOSSLink(detail.value?.insureBillUrl)); } -function handleGoStampFiles() { - router.push({ - name: 'InsurancePolicyStampFiles', - params: { - id: id, - }, - }); -} +const { handleGoDownloadInvoice, handleGoStampFiles } = useInsureActions(); function handleBatchChange() { if ( @@ -542,6 +529,25 @@ }); } catch (error) {} } + +async function handleExport(status: InsuranceDetailStatusEnum) { + try { + if (paginationState.total === 0) { + Message.warnMessage('娌℃湁鏁版嵁鍙互瀵煎嚭鍝'); + return; + } + let res = await insuranceOrderServices.getInsuranceStaffListExport( + { insurancePolicyId: id, status: status }, + { + responseType: 'blob', + getResponse: true, + } + ); + if (res) { + downloadFile(res.data, `浜哄憳娓呭崟`, 'xlsx'); + } + } catch (error) {} +} </script> <style lang="scss" scoped> -- Gitblit v1.9.1