From 089f6058826ac067061b6ed4958baff50f9bdac9 Mon Sep 17 00:00:00 2001 From: zhengyiming <540361168@qq.com> Date: 星期二, 29 七月 2025 17:40:17 +0800 Subject: [PATCH] fix: 新增生煎保(短期方案) --- src/views/Home/components/UploadInsurePersonDialog.vue | 43 +++ src/views/Home/InsurancePayManage.vue | 132 ++++++++++++ src/hooks/dic.ts | 4 src/services/api/typings.d.ts | 163 +++++++++++++- src/views/Home/components/InsureOrderInfoView.vue | 16 + vite.config.ts | 4 src/constants/insuranceClaim.ts | 20 + src/views/Home/constants/index.ts | 44 ++++ package.json | 2 src/router/index.ts | 15 + src/services/api/ParkBountyApply.ts | 30 ++ src/views/Home/Home.vue | 73 +++++- src/services/api/InsuranceOrder.ts | 64 +++++ 13 files changed, 565 insertions(+), 45 deletions(-) diff --git a/package.json b/package.json index 2a0c634..4dd2a9b 100644 --- a/package.json +++ b/package.json @@ -6,6 +6,7 @@ "dev": "cross-env vite", "dev:rz": "cross-env VITE_AppType=rz vite", "dev:jx": "cross-env VITE_AppType=jx vite", + "dev:tp": "cross-env VITE_AppType=tp vite", "dev:other": "cross-env VITE_AppType=other vite", "build": "cross-env NODE_OPTIONS=--max_old_space_size=16000 vite build", "build:rz": "cross-env NODE_OPTIONS=--max_old_space_size=16000 VITE_AppType=rz vite build --mode rz", @@ -19,6 +20,7 @@ "build:staging:yx": "cross-env vite build --mode stagingone", "build:staging:other": "cross-env VITE_AppType=other vite build --mode staging", "build:staging:jx": "cross-env VITE_AppType=jx vite build --mode staging", + "build:staging:tp": "cross-env VITE_AppType=tp vite build --mode staging", "build:staging:jenkins": "cross-env NODE_OPTIONS=--max_old_space_size=16000 vite build --mode staging", "preview": "vite preview", "prepare": "husky install", diff --git a/src/constants/insuranceClaim.ts b/src/constants/insuranceClaim.ts index 886c855..c45ee5c 100644 --- a/src/constants/insuranceClaim.ts +++ b/src/constants/insuranceClaim.ts @@ -82,14 +82,29 @@ 澧炲憳: '澧炲憳', 鍑忓憳: '鍑忓憳', }; + +export enum InsurancePeriodEnum { + '30D' = '30D', + '360D' = '360D', + '1-29D' = '1-29D', +} + export const insuranceTypeText = { - '30D': '鏈堜繚', - '360D': '骞翠繚', + [InsurancePeriodEnum['30D']]: '鏈堜繚', + [InsurancePeriodEnum['360D']]: '骞翠繚', + [InsurancePeriodEnum['1-29D']]: '鐭湡淇�', +}; + +export const insuranceTypeTextForFilter = { + [InsurancePeriodEnum['30D']]: '鏈堜繚', + [InsurancePeriodEnum['360D']]: '骞翠繚', }; export enum InsurancePolicyAuditStatusEnum { /**椹冲洖 */ Reject = -10, + /**寰呮彁浜� */ + WaitAdd = 1, /**寰呭鏍� */ WaitAudit = 10, /**寰呭鏍� 寮哄埗鍐嶅鍚庣殑鍐嶅鐘舵��*/ @@ -104,6 +119,7 @@ export const InsurancePolicyAuditStatusEnumText = { [InsurancePolicyAuditStatusEnum.Reject]: '椹冲洖', + [InsurancePolicyAuditStatusEnum.WaitAdd]: '寰呮彁浜�', [InsurancePolicyAuditStatusEnum.WaitAudit]: '寰呭鏍�', [InsurancePolicyAuditStatusEnum.WaitReAudit]: '寰呭鏍�', [InsurancePolicyAuditStatusEnum.WaitFillAudit]: '寰呭鏍�', diff --git a/src/hooks/dic.ts b/src/hooks/dic.ts index e206017..fe72501 100644 --- a/src/hooks/dic.ts +++ b/src/hooks/dic.ts @@ -83,10 +83,14 @@ function getInsureProductSchemeByCode(code: string) { return allInsureProductSchemeList.value.find((x) => x.code === code); } + function getInsureProductSchemeByIdNumber(idNumber: string) { + return allInsureProductSchemeList.value.find((x) => x.idNumber === idNumber); + } return { allInsureProductSchemeList, refetch, getInsureProductSchemeByCode, + getInsureProductSchemeByIdNumber, }; } diff --git a/src/router/index.ts b/src/router/index.ts index f283d1a..3e88bd6 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -84,7 +84,7 @@ }, children: [ { - path: 'home', + path: '/home', name: 'Home', hidden: false, component: () => import('@/views/Home/Home.vue'), @@ -93,6 +93,17 @@ title: '淇濆崟绠$悊', affix: true, // rootMenu: true, + icon: 'home', + }, + }, + AppType === 'tp' && { + path: '/InsurancePayManage', + name: 'InsurancePayManage', + hidden: false, + component: () => import('@/views/Home/InsurancePayManage.vue'), + meta: { + rank: 1002, + title: '浠樻绠$悊', icon: 'home', }, }, @@ -156,7 +167,7 @@ icon: 'home', }, }, - ], + ].filter(Boolean), }, { diff --git a/src/services/api/InsuranceOrder.ts b/src/services/api/InsuranceOrder.ts index ad9fcb9..d1696f9 100644 --- a/src/services/api/InsuranceOrder.ts +++ b/src/services/api/InsuranceOrder.ts @@ -166,6 +166,23 @@ }); } +/** 鑾峰彇鎶曚繚浜哄憳瀹℃牳璁板綍 GET /api/InsuranceOrder/GetInsuranceOrderAuditRecord/${param1} */ +export async function getInsuranceOrderAuditRecordId( + // 鍙犲姞鐢熸垚鐨凱aram绫诲瀷 (闈瀊ody鍙傛暟swagger榛樿娌℃湁鐢熸垚瀵硅薄) + params: API.APIgetInsuranceOrderAuditRecordIdParams, + options?: API.RequestConfig +) { + const { insuranceOrderId: param0, id: param1, ...queryParams } = params; + return request<API.InsuranceOrderAuditRecordDto[]>( + `/api/InsuranceOrder/GetInsuranceOrderAuditRecord/${param1}`, + { + method: 'GET', + params: { ...queryParams }, + ...(options || {}), + } + ); +} + /** 鑾峰彇淇濆崟璇︽儏 GET /api/InsuranceOrder/GetInsuranceOrderDetail */ export async function getInsuranceOrderDetail( // 鍙犲姞鐢熸垚鐨凱aram绫诲瀷 (闈瀊ody鍙傛暟swagger榛樿娌℃湁鐢熸垚瀵硅薄) @@ -318,6 +335,24 @@ }); } +/** 鑾峰彇浠樻绠$悊鍒楄〃 POST /api/InsuranceOrder/GetInsurancePolicyPayList */ +export async function getInsurancePolicyPayList( + body: API.GetInsurancePolicyPayListInput, + options?: API.RequestConfig +) { + return request<API.GetInsurancePolicyPayListItemPageOutput>( + '/api/InsuranceOrder/GetInsurancePolicyPayList', + { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + data: body, + ...(options || {}), + } + ); +} + /** 鑾峰彇鐩栫珷鏂囦欢 GET /api/InsuranceOrder/GetInsurancePolicyStampFiles */ export async function getInsurancePolicyStampFiles( // 鍙犲姞鐢熸垚鐨凱aram绫诲瀷 (闈瀊ody鍙傛暟swagger榛樿娌℃湁鐢熸垚瀵硅薄) @@ -395,6 +430,18 @@ }); } +/** 鑾峰彇琛ュ綍璁板綍 POST /api/InsuranceOrder/GetOperateRecord */ +export async function getOperateRecord(body: API.OperateRecordInput, options?: API.RequestConfig) { + return request<API.OperateRecordDtoPageOutput>('/api/InsuranceOrder/GetOperateRecord', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + data: body, + ...(options || {}), + }); +} + /** 鎶曚繚璇︽儏-瀵煎叆浜哄憳 POST /api/InsuranceOrder/ImportInsDetailStaffToList */ export async function importInsDetailStaffToList( // 鍙犲姞鐢熸垚鐨凱aram绫诲瀷 (闈瀊ody鍙傛暟swagger榛樿娌℃湁鐢熸垚瀵硅薄) @@ -440,12 +487,27 @@ }); } +/** 鎻愪氦瀹℃牳 POST /api/InsuranceOrder/InsurancePolicyAddAudit */ +export async function insurancePolicyAddAudit( + body: API.InsurancePolicyAuditInput, + options?: API.RequestConfig +) { + return request<number>('/api/InsuranceOrder/InsurancePolicyAddAudit', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + data: body, + ...(options || {}), + }); +} + /** 淇濆崟瀹℃牳 POST /api/InsuranceOrder/InsurancePolicyAudit */ export async function insurancePolicyAudit( body: API.InsurancePolicyAuditInput, options?: API.RequestConfig ) { - return request<API.InsurancePolicyAuditOutput>('/api/InsuranceOrder/InsurancePolicyAudit', { + return request<number>('/api/InsuranceOrder/InsurancePolicyAudit', { method: 'POST', headers: { 'Content-Type': 'application/json', diff --git a/src/services/api/ParkBountyApply.ts b/src/services/api/ParkBountyApply.ts index e391fd4..2f27c0b 100644 --- a/src/services/api/ParkBountyApply.ts +++ b/src/services/api/ParkBountyApply.ts @@ -2,6 +2,36 @@ // @ts-ignore import { request } from '@/utils/request'; +/** 濂栧姳閲�-鍑鸿处 POST /api/ParkBountyApply/AuditParkBountyApplyTrade */ +export async function auditParkBountyApplyTrade( + body: API.AuditParkBountyTradeInput, + options?: API.RequestConfig +) { + return request<number>('/api/ParkBountyApply/AuditParkBountyApplyTrade', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + data: body, + ...(options || {}), + }); +} + +/** 濂栧姳閲�-鍑鸿处-璐㈠姟瀹℃壒 POST /api/ParkBountyApply/FinanceAuditParkBountyApplyTrade */ +export async function financeAuditParkBountyApplyTrade( + body: API.AuditParkBountyTradeInput, + options?: API.RequestConfig +) { + return request<number>('/api/ParkBountyApply/FinanceAuditParkBountyApplyTrade', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + data: body, + ...(options || {}), + }); +} + /** 杩愯惀绔�-濂栧姳杩涘嚭璐﹁鎯� POST /api/ParkBountyApply/GetParkBountyTradeDetailList */ export async function getParkBountyTradeDetailList( body: API.GetParkBountyTradeDetailByIdInput, diff --git a/src/services/api/typings.d.ts b/src/services/api/typings.d.ts index 145b5c3..2cc7939 100644 --- a/src/services/api/typings.d.ts +++ b/src/services/api/typings.d.ts @@ -266,6 +266,11 @@ year?: number; } + interface APIgetInsuranceOrderAuditRecordIdParams { + insuranceOrderId: string; + id: string; + } + interface APIgetInsuranceOrderDetailParams { id?: string; } @@ -461,6 +466,16 @@ values?: Record<string, any>; } + interface AuditParkBountyTradeInput { + /** 鍑鸿处璁板綍Id */ + id?: string; + auditStatus?: EnumParkBountyTradeDetailAuditStatus; + /** 瀹℃牳澶囨敞 */ + auditRemark?: string; + /** 瀹℃牳鍑瘉 */ + payAuditFileUrl?: string; + } + interface BaseAuthorizeDto { moduleType?: number; moduleId?: string; @@ -603,7 +618,9 @@ /** 淇濋 */ insured: number; /** 淇濊垂 */ - signPremium: number; + signPremium?: number; + /** 淇濊垂鎸夊ぉ璁¤垂 */ + signPremiumByDay?: string; } interface CreateOrUpdateInsureProductSettingInput { @@ -711,6 +728,8 @@ properties?: Record<string, any>; configuration?: Record<string, any>; } + + type EnumParkBountyTradeDetailAuditStatus = 10 | 20 | 30; interface ExportInsuranceStaffListInput { status?: InsuranceDetailStatusEnum; @@ -892,6 +911,8 @@ interface GetInsurancePageOutput { id?: string; userId?: string; + /** 浜т笟鍥尯id */ + industrialParkId?: string; /** 鎶曚繚浜� */ insurerName?: string; /** 琚繚闄╀汉 */ @@ -956,6 +977,44 @@ data?: GetInsurancePageOutput[]; } + interface GetInsurancePolicyPayListInput { + pageModel?: Pagination; + status?: InsurancePolicyPayStatusEnum; + /** 鍏抽敭瀛� */ + keywords?: string; + } + + interface GetInsurancePolicyPayListItem { + id?: string; + /** 鐢ㄦ埛Id */ + userId?: string; + /** 浜т笟鍥尯id */ + industrialParkId?: string; + /** 璁㈠崟鍙� */ + channelOrderNo?: string; + /** 鏀粯鐭摼 */ + payUrl?: string; + /** 淇濊垂閲戦 */ + sumSignPremium?: number; + /** 鍒涘缓鏃ユ湡 */ + creationTime?: string; + status?: InsurancePolicyPayStatusEnum; + /** 淇濆崟鍙� */ + policyNo?: string; + /** 鐢靛瓙淇濆崟閾炬帴 */ + policyUrl?: string; + /** 宸叉姇淇濅汉鏁� */ + proposalCount?: number; + /** 瀹屾垚鏃堕棿 */ + completionTime?: string; + } + + interface GetInsurancePolicyPayListItemPageOutput { + pageModel?: Pagination; + objectData?: any; + data?: GetInsurancePolicyPayListItem[]; + } + interface GetInsuranceStaffListInput { pageModel?: Pagination; condition?: string; @@ -980,13 +1039,15 @@ age?: number; birthDay?: string; phone?: string; - claimCount?: number; creationTime?: string; /** 鎶曚繚鎵规鍙� */ payOrder?: string; status?: InsuranceDetailStatusEnum; + /** 鎶曚繚鐘舵�� */ + statusText?: string; /** 澶囨敞 */ auditRemark?: string; + claimCount?: number; } interface GetInsuranceStaffPageTemplatePageOutput { @@ -1016,9 +1077,19 @@ /** 鍑鸿处缁撴潫鏃ユ湡 */ transferTimeEnd?: string; enterpriseId?: string; + auditStatus?: EnumParkBountyTradeDetailAuditStatus; } interface GetParkBountyTradeDetailOutput { + enterpriseId?: string; + /** 璐﹀彿 */ + userName?: string; + /** 浼佷笟鍚嶇О */ + enterpriseName?: string; + /** 鐢佃瘽 */ + contactPhone?: string; + /** 绀句細缁熶竴淇$敤浠g爜 */ + societyCreditCode?: string; id?: string; /** 鏈�杩戝嚭璐﹂噾棰� */ tradeAmount?: number; @@ -1032,6 +1103,13 @@ /** 濂栧姳閲戜綑棰� */ remianAmount?: number; financeType?: FinanceTypeEnum; + auditStatus?: EnumParkBountyTradeDetailAuditStatus; + /** 瀹℃牳澶囨敞 */ + auditRemark?: string; + /** 瀹℃牳鏃堕棿 */ + auditTime?: string; + /** 瀹℃牳鍑瘉 */ + payAuditFileUrl?: string; } interface GetParkBountyTradeDetailOutputPageOutput { @@ -1334,10 +1412,12 @@ url?: string; /** 淇濋櫓浜у搧IdNumber */ productIdNumber?: string; - /** 淇濋櫓浜у搧鏂规Id */ + /** 淇濋櫓鏂规 */ productSchemeIdNumber?: string; /** 淇濆崟鐢熸晥鏃堕棿 */ effectStartTime?: string; + /** 淇濆崟鎴鏃堕棿 */ + effectEndTime?: string; } interface ImportInsStaffToListOutput { @@ -1477,6 +1557,21 @@ type InsuranceDetailStatusEnum = 10 | 12 | 13 | 14 | 20 | 30; + interface InsuranceOrderAuditRecordDto { + /** 鍒嗘壒璁㈠崟鍙� */ + channelOrderNo?: string; + /** 鎿嶄綔 */ + scene?: string; + /** 瀹℃牳澶囨敞 */ + auditRemark?: string; + /** 鎿嶄綔鏃堕棿 */ + creationTime?: string; + /** 鎿嶄綔浜� */ + creatorId?: string; + /** 鎿嶄綔浜� */ + creator?: string; + } + interface InsuranceOrderListOutput { id?: string; /** 娓犻亾 */ @@ -1573,18 +1668,7 @@ returnUrl?: string; } - interface InsurancePolicyAuditOutput { - /** 娑堟伅 */ - messages?: string[]; - /** 鎬绘姇淇濅汉鏁� */ - totalCount?: number; - /** 鎶曚繚鎴愬姛 */ - successCount?: number; - /** 鎶曚繚澶辫触 */ - failCount?: number; - } - - type InsurancePolicyAuditStatusEnum = 10 | 11 | 12 | 15 | 20 | -10; + type InsurancePolicyAuditStatusEnum = 1 | 10 | 11 | 12 | 15 | 20 | -10; type InsurancePolicyListPayStatusEnum = 1 | 2; @@ -1731,6 +1815,8 @@ insured?: number; /** 淇濊垂 */ signPremium?: number; + /** 淇濊垂鎸夊ぉ璁¤垂 */ + signPremiumByDay?: string; } interface InsureProductSchemeDtoPageOutput { @@ -1754,6 +1840,8 @@ creationTime?: string; /** 鎶曚繚浜烘暟涓婇檺 */ maxCount?: number; + /** 鏄惁璧扮嚎涓婃祦绋� */ + online?: boolean; } interface InsureProductSettingDtoPageOutput { @@ -1900,6 +1988,33 @@ interface ObjectExtensionsDto { modules?: Record<string, any>; enums?: Record<string, any>; + } + + interface OperateRecordDto { + /** 鎿嶄綔 */ + operate?: string; + /** 鎿嶄綔鍐呭 */ + content?: string; + /** 鎿嶄綔鏃堕棿 */ + creationTime?: string; + /** 鎿嶄綔浜� */ + creatorId?: string; + /** 鎿嶄綔浜� */ + creator?: string; + } + + interface OperateRecordDtoPageOutput { + pageModel?: Pagination; + objectData?: any; + data?: OperateRecordDto[]; + } + + interface OperateRecordInput { + pageModel?: Pagination; + /** 鍦烘櫙 */ + scene?: string; + /** 鐩爣Id */ + targetId?: string; } interface OrderInput { @@ -2487,6 +2602,24 @@ open?: boolean; /** 818鐢ㄦ埛Id */ humanResourcesServiceUserId?: string; + /** 鐢ㄦ埛绔疘d */ + clientId?: string; + /** 瑙掕壊 */ + roleNames?: string[]; + /** 鏄惁鐞嗚禂鎻愰啋 */ + sendClaimMessage?: boolean; + /** 鏄惁淇濆崟鍒版湡鎻愰啋 */ + sendBillExpireMessage?: boolean; + /** 鏄惁鐭俊鎻愰啋 */ + isSendMessage?: boolean; + /** 鏄惁浜哄憳鍙樻洿鎻愰啋 */ + staffChangeMessage?: boolean; + /** 鏄惁鎵规敼鎻愰啋 */ + batchUpdateMessage?: boolean; + /** 浜т笟鍥尯id */ + industrialParkId?: string; + /** 鍥尯Ids */ + industrialParkIds?: string[]; /** 鍚嶇О */ name?: string; /** 鐧诲綍鐢ㄦ埛鍚� */ diff --git a/src/views/Home/Home.vue b/src/views/Home/Home.vue index d0dce4a..822087a 100644 --- a/src/views/Home/Home.vue +++ b/src/views/Home/Home.vue @@ -18,7 +18,7 @@ <QueryFilterItem> <FieldRadio v-model="extraParamState.insurancePeriod" - :value-enum="insuranceTypeText" + :value-enum="insuranceTypeTextForFilter" buttonStyle showAllBtn @change="getList()" @@ -160,11 +160,13 @@ InsurancePolicyListPayStatusEnum, InsurancePolicyListPayStatusEnumText, InsuranceOccupationTypeTempPath, + InsurancePeriodEnum, + insuranceTypeTextForFilter, } from '@/constants'; import dayjs from 'dayjs'; import _ from 'lodash'; import InsureInstructionsDialog from './components/InsureInstructionsDialog.vue'; -import { useUserInsureProductSetting } from '@/hooks'; +import { useInsureProductSchemeAllList, useUserInsureProductSetting } from '@/hooks'; // import { Recorder } from '@/utils/record'; defineOptions({ @@ -219,19 +221,19 @@ 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: 'payBtn', + // name: '鏀粯', + // }, + // emits: { + // onClick: (role) => handlePay(role), + // }, + // extraProps: { + // hide: (row: API.GetInsurancePageOutput) => + // row.payStatus != InsurancePolicyListPayStatusEnum.WaitPay, + // }, + // }, { data: { enCode: 'stampFilesBtn', @@ -266,6 +268,19 @@ // onClick: (role) => handleStandarEndo(role), // }, // }, + { + data: { + enCode: 'submitAuditBtn', + name: '鎻愪氦瀹℃牳', + }, + emits: { + onClick: (role) => handleSubmitAuditBtn(role), + }, + extraProps: { + hide: (row: API.GetInsurancePageOutput) => + row.auditStatus != InsurancePolicyAuditStatusEnum.WaitAdd, + }, + }, ]).filter(Boolean); const BaseState = { @@ -361,6 +376,7 @@ productIdNumber: '', productSchemeIdNumber: '', effectStartTime: dayjs().add(1, 'day').format('YYYY-MM-DD'), + effectEndTime: '', }, closeAfterConfirm: false, }); @@ -389,6 +405,12 @@ } catch (error) {} } +const { isSjbAccount, getInsureProductIdByIdNumber } = useUserInsureProductSetting(); + +const { getInsureProductSchemeByIdNumber } = useInsureProductSchemeAllList({ + insureProductId: computed(() => getInsureProductIdByIdNumber(editForm.productIdNumber)), +}); + async function importInsStaffToList() { try { let params: API.ImportInsStaffToListFrontInput = { @@ -398,6 +420,12 @@ productSchemeIdNumber: editForm.productSchemeIdNumber, effectStartTime: editForm.effectStartTime, }; + const currentInsureProductScheme = getInsureProductSchemeByIdNumber( + editForm.productSchemeIdNumber + ); + if (currentInsureProductScheme?.period === InsurancePeriodEnum['1-29D']) { + params.effectEndTime = editForm.effectEndTime; + } let res = await insuranceOrderServices.importInsStaffToList(params, { timeout: 60 * 1000 * 10, customErrorHandler(error) { @@ -452,8 +480,6 @@ const { dialogProps: dialogInstructionsProps, dialogState: dialogInstructionsState } = useDialog({ onConfirm: handleUpload, }); - -const { isSjbAccount } = useUserInsureProductSetting(); function handleOpenInstructions() { if (isSjbAccount.value) { @@ -650,4 +676,17 @@ }); } catch (error) {} } + +async function handleSubmitAuditBtn(row: API.GetInsurancePageOutput) { + try { + let params: API.InsurancePolicyAuditInput = { + insurancePolicyId: row.id, + }; + let res = await insuranceOrderServices.insurancePolicyAddAudit(params); + if (res) { + Message.successMessage('涓婁紶鎴愬姛'); + getList(paginationState.pageIndex); + } + } catch (error) {} +} </script> diff --git a/src/views/Home/InsurancePayManage.vue b/src/views/Home/InsurancePayManage.vue new file mode 100644 index 0000000..8a45765 --- /dev/null +++ b/src/views/Home/InsurancePayManage.vue @@ -0,0 +1,132 @@ +<template> + <LoadingLayout :loading="state.loading"> + <AppContainer> + <ProTableQueryFilterBar @on-reset="reset"> + <template #query> + <QueryFilterItem> + <FieldRadio + v-model="extraParamState.status" + :value-enum="InsurancePolicyListPayStatusEnumText" + buttonStyle + showAllBtn + @change="getList()" + /> + </QueryFilterItem> + <QueryFilterItem> + <SearchInput + v-model="extraParamState.condition" + style="width: 260px" + placeholder="璁㈠崟鍙�/淇濆崟鍙�" + @on-click-search="getList" + > + </SearchInput> + </QueryFilterItem> + </template> + </ProTableQueryFilterBar> + <ProTableV2 + v-bind="proTableProps" + :columns="InsurePayManageColumns" + :operationBtns="operationBtns" + > + </ProTableV2> + </AppContainer> + </LoadingLayout> +</template> + +<script setup lang="ts"> +import { + OperationBtnType, + ProTableV2, + LoadingLayout, + AppContainer, + useTable, + ProTableV2Props, + defineOperationBtns, + QueryFilterItem, + FieldRadio, + SearchInput, + ProTableQueryFilterBar, +} from '@bole-core/components'; +import * as insuranceOrderServices from '@/services/api/InsuranceOrder'; +import { + InsurancePolicyPayStatusEnumText, + InsurancePolicyPayStatusEnum, + InsurancePolicyListPayStatusEnum, + InsurancePolicyListPayStatusEnumText, +} from '@/constants'; +import { useQuery } from '@tanstack/vue-query'; +import { InsurePayManageColumns } from './constants'; +import { OrderInputType } from '@bole-core/core'; + +defineOptions({ + name: 'InsurancePayManage', +}); + +const operationBtns = defineOperationBtns([ + { + data: { + enCode: 'payBtn', + name: '鏀粯', + }, + emits: { onClick: (role) => handlePay(role) }, + extraProps: { + hide: (row: API.GetInsurancePolicyPayListItem) => + row.status !== InsurancePolicyPayStatusEnum.WaitPay, + }, + }, +]); + +const BaseState = { + loading: true, +}; + +const state = reactive({ ...BaseState }); + +onMounted(async () => { + await getList(); + state.loading = false; +}); + +const { + getDataSource: getList, + proTableProps, + paginationState, + extraParamState, + reset, +} = useTable( + async ({ pageIndex, pageSize }, extraParamState) => { + try { + let params: API.GetInsurancePolicyPayListInput = { + pageModel: { + rows: pageSize, + page: pageIndex, + orderInput: extraParamState.orderInput, + }, + status: extraParamState.status, + keywords: extraParamState.condition, + }; + let res = await insuranceOrderServices.getInsurancePolicyPayList(params, { + showLoading: !state.loading, + }); + return res; + } catch (error) {} + }, + { + defaultExtraParams: { + orderInput: [{ property: 'id', order: OrderInputType.Desc }], + condition: '', + status: '' as any as InsurancePolicyListPayStatusEnum, + }, + columnsRenderProps: { + sumSignPremium: { type: 'money' }, + status: { type: 'enum', valueEnum: InsurancePolicyListPayStatusEnumText }, + creationTime: { type: 'date' }, + completionTime: { type: 'date' }, + }, + } +); + +function handlePay(row: API.GetInsurancePolicyPayListItem) { + window.open(row.payUrl, '_blank'); +} +</script> diff --git a/src/views/Home/components/InsureOrderInfoView.vue b/src/views/Home/components/InsureOrderInfoView.vue index ab32e98..0bcf47a 100644 --- a/src/views/Home/components/InsureOrderInfoView.vue +++ b/src/views/Home/components/InsureOrderInfoView.vue @@ -327,10 +327,16 @@ onClick: (role) => handleChangeInfo(role), }, extraProps: { - hide: (row: API.GetInsuranceStaffPageTemplate) => - detail.value?.productOnline || - detail.value?.status !== InsurancePolicyStatusEnum.WaitEffect || - detail.value?.auditStatus === InsurancePolicyAuditStatusEnum.Pass, + hide: (row: API.GetInsuranceStaffPageTemplate) => { + if (detail.value?.productOnline) { + return detail.value?.auditStatus !== InsurancePolicyAuditStatusEnum.WaitAdd; + } else { + return ( + detail.value?.status !== InsurancePolicyStatusEnum.WaitEffect || + detail.value?.auditStatus === InsurancePolicyAuditStatusEnum.Pass + ); + } + }, }, }, { @@ -589,6 +595,7 @@ productIdNumber: detail.value.productIdNumber, productSchemeIdNumber: getInsureProductSchemeByCode(detail.value.productSchemeCode)?.idNumber, effectStartTime: detail.value.effectStartTime, + effectEndTime: detail.value.effectEndTime, }); } @@ -605,6 +612,7 @@ productIdNumber: '', productSchemeIdNumber: '', effectStartTime: dayjs().add(1, 'day').format('YYYY-MM-DD'), + effectEndTime: '', }, closeAfterConfirm: false, }); diff --git a/src/views/Home/components/UploadInsurePersonDialog.vue b/src/views/Home/components/UploadInsurePersonDialog.vue index 0bc713f..9640f65 100644 --- a/src/views/Home/components/UploadInsurePersonDialog.vue +++ b/src/views/Home/components/UploadInsurePersonDialog.vue @@ -64,6 +64,22 @@ placeholder="璇烽�夋嫨璧蜂繚鏃ユ湡" :disabled-date="disabledStartDate" :disabled="isSupply" + @change="handleStartDateChange" + ></ProFormDatePicker> + </ProFormItemV2> + <ProFormItemV2 + label="鎴鏃ユ湡:" + prop="effectEndTime" + :check-rules="[{ message: '璇烽�夋嫨鎴鏃ユ湡' }]" + v-if="currentInsureProductScheme?.period === InsurancePeriodEnum['1-29D']" + > + <ProFormDatePicker + v-model="form.effectEndTime" + type="date" + value-format="YYYY-MM-DD" + placeholder="璇烽�夋嫨鎴鏃ユ湡" + :disabled-date="disabledEndDate" + :disabled="isSupply" ></ProFormDatePicker> </ProFormItemV2> <ProFormItemV2 @@ -108,6 +124,7 @@ import dayjs from 'dayjs'; import { FormInstance } from 'element-plus'; import _ from 'lodash'; +import { InsurancePeriodEnum } from '@/constants'; defineOptions({ name: 'UploadInsurePersonDialog', @@ -121,6 +138,7 @@ productIdNumber: string; productSchemeIdNumber: string; effectStartTime: string; + effectEndTime: string; }; //鏄惁鏄ˉ鎻� isSupply?: boolean; @@ -140,9 +158,14 @@ const { allUserInsureProductSettingList, getInsureProductIdByIdNumber } = useUserInsureProductSetting(); -const { allInsureProductSchemeList } = useInsureProductSchemeAllList({ - insureProductId: computed(() => getInsureProductIdByIdNumber(props.form.productIdNumber)), -}); +const { allInsureProductSchemeList, getInsureProductSchemeByIdNumber } = + useInsureProductSchemeAllList({ + insureProductId: computed(() => getInsureProductIdByIdNumber(props.form.productIdNumber)), + }); + +const currentInsureProductScheme = computed(() => + getInsureProductSchemeByIdNumber(props.form.productSchemeIdNumber) +); function handleProductChange() { innerForm.value.productSchemeIdNumber = ''; @@ -152,6 +175,20 @@ return dayjs(time).isBefore(dayjs()) || dayjs(time).isAfter(dayjs().add(60, 'day')); }; +const disabledEndDate = (time: Date) => { + const startDate = dayjs(props.form.effectStartTime); + return ( + dayjs(time).isBefore(startDate) || + dayjs(time).isAfter(dayjs(props.form.effectStartTime).add(28, 'day')) + ); +}; + +function handleStartDateChange() { + if (disabledEndDate(props.form.effectEndTime as any)) { + innerForm.value.effectEndTime = ''; + } +} + const innerVisible = computed({ get() { return props.modelValue; diff --git a/src/views/Home/constants/index.ts b/src/views/Home/constants/index.ts index 9582a45..d46d36a 100644 --- a/src/views/Home/constants/index.ts +++ b/src/views/Home/constants/index.ts @@ -62,6 +62,12 @@ width: 160, }, { + id: '10-1', + enCode: 'insureEffectingCount', + name: '鐢熸晥浜烘暟', + width: 160, + }, + { id: '11', enCode: 'sumInsured', name: '鎬讳繚棰�(鍏�)', @@ -168,3 +174,41 @@ name: '鏀粯鐘舵��', }, ]); + +export const InsurePayManageColumns = defineColumns([ + { + id: '1', + enCode: 'channelOrderNo', + name: '璁㈠崟鍙�', + }, + { + id: '2', + enCode: 'proposalNo', + name: '鎶曚繚鍗曞彿', + }, + { + id: '2-1', + enCode: 'proposalCount', + name: '鎶曚繚浜烘暟', + }, + { + id: '3', + enCode: 'sumSignPremium', + name: '淇濊垂閲戦', + }, + { + id: '4', + enCode: 'creationTime', + name: '鍒涘缓鏃ユ湡', + }, + { + id: '5', + enCode: 'status', + name: '鏀粯鐘舵��', + }, + { + id: '6', + enCode: 'completionTime', + name: '鏀粯鏃ユ湡', + }, +]); diff --git a/vite.config.ts b/vite.config.ts index f623cc6..f2a9eca 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -97,7 +97,9 @@ __INTLIFY_PROD_DEVTOOLS__: false, }, build: { - outDir: `dist/dist-jybfront-${VITE_AppType}-${mode}-${dayjs().format('YYYYMMDD')}`, + outDir: `dist/${dayjs().format( + 'YYYY-MM-DD' + )}/dist-jybfront-${VITE_AppType}-${mode}-${dayjs().format('YYYYMMDD')}`, }, optimizeDeps: { include: [ -- Gitblit v1.9.1