From 2a4aecd380fad4ccb1303be0526eabf56bd3d9a6 Mon Sep 17 00:00:00 2001 From: wupengfei <834520024@qq.com> Date: 星期五, 27 六月 2025 16:49:08 +0800 Subject: [PATCH] Merge branch 'dev-2.2.0' of http://120.26.58.240:8888/r/JYBIndependentFront into dev-2.2.0 --- src/views/Home/Home.vue | 350 ++++++++++++++++++++++++++++++++++++++++------------------ 1 files changed, 242 insertions(+), 108 deletions(-) diff --git a/src/views/Home/Home.vue b/src/views/Home/Home.vue index f98ab8e..ea15a1a 100644 --- a/src/views/Home/Home.vue +++ b/src/views/Home/Home.vue @@ -17,16 +17,7 @@ </QueryFilterItem> <QueryFilterItem> <FieldRadio - v-model="extraParamState.onJobFlag" - :value-enum="OnJobFlagEnumText" - buttonStyle - showAllBtn - @change="getList()" - /> - </QueryFilterItem> - <QueryFilterItem> - <FieldRadio - v-model="extraParamState.insuranceType" + v-model="extraParamState.insurancePeriod" :value-enum="insuranceTypeText" buttonStyle showAllBtn @@ -34,8 +25,26 @@ /> </QueryFilterItem> <QueryFilterItem> + <FieldRadio + v-model="extraParamState.auditStatus" + :value-enum="InsurancePolicyAuditStatusEnumText" + buttonStyle + showAllBtn + @change="getList()" + /> + </QueryFilterItem> + <QueryFilterItem> + <FieldRadio + v-model="extraParamState.status" + :value-enum="InsurancePolicyStatusEnumText" + buttonStyle + showAllBtn + @change="getList()" + /> + </QueryFilterItem> + <QueryFilterItem> <SearchInput - v-model="extraParamState.keyword" + v-model="extraParamState.condition" style="width: 260px" placeholder="鍗曚綅/淇濆崟鍙�/鍙備繚鏈烘瀯" @on-click-search="getList" @@ -44,23 +53,21 @@ </QueryFilterItem> </template> <template #btn> - <el-button - @click="handleDownload()" - icon="Download" - type="primary" - style="margin-right: 10px" - link + <el-button @click="handleDownload()" type="primary" style="margin-right: 10px" link >妯℃澘涓嬭浇</el-button > - - <el-button @click="handleUpload()" icon="Upload" type="primary" style="margin-right: 10px" - >瀵煎叆</el-button + <el-button @click="handleUpload()" type="primary" style="margin-right: 10px" + >瀵煎叆鎶曚繚浜哄憳</el-button > - - <el-button @click="downloadInsureOrder()" type="primary" icon="Download" link - >瀵煎嚭淇濆崟鍒楄〃</el-button - > - <el-button @click="downloadInsurePerson()" icon="Download" type="primary" link + <!-- <el-button + v-if="AppType === 'jx'" + @click="handleUpload()" + type="primary" + style="margin-right: 10px" + >澶ф壒閲忔暟鎹鍏�</el-button + > --> + <el-button @click="getInsurancePageExport()" type="primary" link>瀵煎嚭淇濆崟鍒楄〃</el-button> + <el-button @click="getInsuranceStaffPageExport()" type="primary" link >瀵煎嚭鍦ㄤ繚浜哄憳</el-button > </template> @@ -75,6 +82,23 @@ rowKey: 'id', }" > + <template #auditStatus="{ row }"> + <el-tooltip + class="box-item" + effect="dark" + :content="row.auditRemark" + placement="top-start" + v-if="row.auditStatus === InsurancePolicyAuditStatusEnum.Reject" + > + <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" /> @@ -92,27 +116,28 @@ useTable, useFormDialog, FieldDatePicker, - BlFileUpload, defineOperationBtns, UploadUserFile, - XLSXUtils, SearchInput, FieldRadio, + XLSXUtils, } 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 { toThousand, format, downloadFile, setOSSLink } from '@/utils'; -import { omit } from 'lodash'; +import { format, downloadFile, setOSSLink, toThousand, convertApi2FormUrl } from '@/utils'; import { ModelValueType } from 'element-plus'; -import { useQueryClient } from '@tanstack/vue-query'; import { InsuranceOrderTempPath, - JYBInsuranceOrderTempPath, - OnJobFlagEnumText, insuranceTypeText, + InsurancePolicyStatusEnumText, + InsurancePolicyStatusEnum, + AppType, + InsurancePolicyAuditStatusEnumText, + InsurancePolicyAuditStatusEnum, + InsurancePolicyProductIdNumberEnum, } from '@/constants'; import dayjs from 'dayjs'; import _ from 'lodash'; @@ -140,7 +165,9 @@ onClick: (role) => handleBatch(role), }, extraProps: { - hide: (row: API.InsuranceOrderListOutput) => !row.orderBillFile, + hide: (row: API.GetInsurancePageOutput) => + row.productIdNumber === InsurancePolicyProductIdNumberEnum.SJB || + row.status !== InsurancePolicyStatusEnum.Effecting, }, }, { @@ -151,9 +178,12 @@ emits: { onClick: (role) => handleUploadStampFile(role), }, - // extraProps: { - // hide: (row: API.InsuranceOrderListOutput) => !row.orderBillFile, - // }, + extraProps: { + hide: (row: API.GetInsurancePageOutput) => + row.productIdNumber === InsurancePolicyProductIdNumberEnum.SJB || + row.auditStatus !== InsurancePolicyAuditStatusEnum.Pass || + row.status !== InsurancePolicyStatusEnum.WaitEffect, + }, }, { data: { @@ -161,12 +191,21 @@ name: '淇濆崟涓嬭浇', }, emits: { - onClick: (role) => handleDownloadOrderNo(role), + onClick: (role) => handleDownloadInsureFile(role), }, extraProps: { - hide: (row: API.InsuranceOrderListOutput) => !row.orderBillFile, + hide: (row: API.GetInsurancePageOutput) => !row.insureBillUrl, }, }, + // { + // data: { + // enCode: 'standarEndoBtn', + // name: '鐢宠閫�淇�', + // }, + // emits: { + // onClick: (role) => handleStandarEndo(role), + // }, + // }, ]).filter(Boolean); const BaseState = { @@ -190,7 +229,7 @@ async ({ pageIndex, pageSize }, extraParamState) => { try { let params = createParams(pageIndex, pageSize); - let res = await insuranceOrderServices.getInsuranceOrderPage(params, { + let res = await insuranceOrderServices.getInsurancePage(params, { showLoading: !state.loading, }); return res; @@ -198,84 +237,129 @@ }, { defaultExtraParams: { - orderInput: [{ property: 'createTime', order: OrderInputType.Desc }], + orderInput: [{ property: 'id', order: OrderInputType.Desc }], creationDate: [] as unknown as ModelValueType, - keyword: '', - onJobFlag: '', - insuranceType: '', + condition: '', + status: '' as any as InsurancePolicyStatusEnum, + auditStatus: '' as any as InsurancePolicyAuditStatusEnum, + insurancePeriod: '', }, columnsRenderProps: { - createTime: { - type: 'date', - format: 'YYYY/MM/DD', + status: { type: 'enum', valueEnum: InsurancePolicyStatusEnumText }, + insurancePeriod: { type: 'enum', valueEnum: insuranceTypeText }, + creationTime: { type: 'date', format: 'YYYY-MM-DD' }, + effectStartTime: { type: 'date', format: 'YYYY-MM-DD' }, + effectEndTime: { type: 'date', format: 'YYYY-MM-DD' }, + sumInsured: { + type: 'money', + formatter: (row: API.GetInsurancePageOutput) => + row.sumInsured == null ? '' : toThousand(row.sumInsured), }, - insuranceBeginTime: { - type: 'date', - format: 'YYYY/MM/DD', - }, - insuranceEndTime: { - type: 'date', - format: 'YYYY/MM/DD', + amount: { + type: 'money', + formatter: (row: API.GetInsurancePageOutput) => + row.amount == null ? '' : toThousand(row.amount), }, }, } ); function createParams(pageIndex: number, pageSize: number) { - let params: API.QueryInsuranceOrderPageInput = { + let params: API.GetInsurancePageInput = { pageModel: { rows: pageSize, page: pageIndex, orderInput: extraParamState.orderInput, }, - beginCreationTime: format(extraParamState.creationDate?.[0] ?? '', 'YYYY-MM-DD 00:00:00'), - endCreationTime: format(extraParamState.creationDate?.[1] ?? '', 'YYYY-MM-DD 23:59:59'), - condition: extraParamState.keyword, - onJobFlag: extraParamState.onJobFlag, - insuranceType: extraParamState.insuranceType, + importStartDateTime: format(extraParamState.creationDate?.[0] ?? '', 'YYYY-MM-DD 00:00:00'), + importEndDateTime: format(extraParamState.creationDate?.[1] ?? '', 'YYYY-MM-DD 23:59:59'), + condition: extraParamState.condition, + insurancePeriod: extraParamState.insurancePeriod, + status: extraParamState.status, + auditStatus: extraParamState.auditStatus, }; return params; } -const { dialogProps, handleAdd, editForm } = useFormDialog({ - onConfirm: uploadInsurePerson, +const { dialogProps, handleAdd, editForm, dialogState } = useFormDialog({ + onConfirm: checkInrancesSerialNumStatus, defaultFormParams: { - orderNo: '', + serialNum: '', url: [] as UploadUserFile[], + productIdNumber: '', + productSchemeIdNumber: '', }, + closeAfterConfirm: false, }); + +async function checkInrancesSerialNumStatus() { + try { + let params: API.APIimportInsStaffToListParams = { + serialNum: editForm.serialNum, + url: editForm.url?.[0]?.path, + }; + let res = await insuranceOrderServices.checkInrancesSerialNumStatus(params); + if (res === InsurancePolicyStatusEnum.Effecting) { + await Message.tipMessage('璇ユ壒娆′繚鍗曞凡鐢熸晥锛岃淇敼鎵规鍙峰悗閲嶆柊瀵煎叆'); + } else if (res === InsurancePolicyStatusEnum.OutTimeEffect) { + await Message.tipMessage('璇ユ壒娆′繚鍗曞凡澶辨晥锛岃淇敼鎵规鍙峰悗閲嶆柊瀵煎叆'); + } else if (res === InsurancePolicyStatusEnum.WaitEffect) { + await Message.tipMessage('瀛樺湪鐩稿悓鐨勬壒娆″彿锛屾槸鍚﹁鐩栵紵'); + importInsStaffToList(); + } else { + importInsStaffToList(); + } + } catch (error) {} +} + +async function importInsStaffToList() { + try { + let params: API.APIimportInsStaffToListParams = { + serialNum: editForm.serialNum, + url: editForm.url?.[0]?.path, + productIdNumber: editForm.productIdNumber, + productSchemeIdNumber: editForm.productSchemeIdNumber, + }; + 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: '澶囨敞', + }, + }); + } + dialogState.dialogVisible = false; + getList(paginationState.pageIndex); + } catch (error) {} +} function handleUpload() { handleAdd({ - orderNo: '', + serialNum: `${dayjs().format('YYYYMMDD')}${_.random(0, 9999).toString().padStart(4, '0')}`, url: [] as UploadUserFile[], }); } -async function uploadInsurePerson() { - try { - let params = { - orderNo: editForm.orderNo, - url: editForm.url?.[0]?.path, - }; - // let res = await insuranceOrderServices.uploadStampFile(params); - // if (res) { - // Message.successMessage('涓婁紶鎴愬姛'); - // getList(paginationState.pageIndex); - // } - } catch (error) {} -} - const router = useRouter(); -async function handleExport() { +async function getInsurancePageExport() { try { if (paginationState.total === 0) { Message.warnMessage('娌℃湁鏁版嵁鍙互瀵煎嚭鍝'); return; } let params = createParams(paginationState.pageIndex, paginationState.pageSize); - let res = await insuranceOrderServices.exportInsuranceOrderList(params, { + let res = await insuranceOrderServices.getInsurancePageExport(params, { responseType: 'blob', getResponse: true, }); @@ -285,14 +369,31 @@ } catch (error) {} } -function handleDownload() { - downloadFileByUrl(JYBInsuranceOrderTempPath, '淇濆崟瀵煎叆妯℃澘'); +async function getInsuranceStaffPageExport() { + try { + if (paginationState.total === 0) { + Message.warnMessage('娌℃湁鏁版嵁鍙互瀵煎嚭鍝'); + return; + } + let params = createParams(paginationState.pageIndex, paginationState.pageSize); + let res = await insuranceOrderServices.getInsuranceStaffPageExport(params, { + responseType: 'blob', + getResponse: true, + }); + if (res) { + downloadFile(res.data, `鍦ㄤ繚浜哄憳瀵煎嚭`, 'xlsx'); + } + } catch (error) {} } -function handleRowStyle(data: { row: API.InsuranceOrderListOutput; rowIndex: number }) { +function handleDownload() { + downloadFileByUrl(InsuranceOrderTempPath, '淇濆崟瀵煎叆妯℃澘'); +} + +function handleRowStyle(data: { row: API.GetInsurancePageOutput }) { if ( - dayjs(dayjs(data.row?.insuranceEndTime).format('YYYY-MM-DD')).diff(dayjs(), 'day') >= 0 && - dayjs(dayjs(data.row?.insuranceEndTime).format('YYYY-MM-DD')).diff(dayjs(), 'day') < 6 + dayjs(dayjs(data.row?.effectEndTime).format('YYYY-MM-DD')).diff(dayjs(), 'day') >= 0 && + dayjs(dayjs(data.row?.effectEndTime).format('YYYY-MM-DD')).diff(dayjs(), 'day') < 6 ) { return { color: '#ff0000', @@ -305,39 +406,48 @@ handleEdit: handleStampFileEdit, editForm: stampFileForm, } = useFormDialog({ - onConfirm: uploadStampFile, + onConfirm: uploadInsuranceStampFiles, defaultFormParams: { id: '', url: [] as UploadUserFile[], }, }); -function handleUploadStampFile(row: API.InsuranceOrderListOutput) { - handleStampFileEdit({ - id: row.id, - url: [] as UploadUserFile[], - }); -} - -async function uploadStampFile() { +async function handleUploadStampFile(row: API.GetInsurancePageOutput) { try { - let params = { - id: stampFileForm.id, - url: stampFileForm.url?.[0]?.path, - }; - // let res = await insuranceOrderServices.uploadStampFile(params); - // if (res) { - // Message.successMessage('涓婁紶鎴愬姛'); - // getList(paginationState.pageIndex); - // } + const url = await getInsurancePolicyStampFiles(row.id); + handleStampFileEdit({ + id: row.id, + url: url.map((x) => convertApi2FormUrl(x)) ?? [], + }); } catch (error) {} } -function handleDownloadOrderNo(row: API.InsuranceOrderListOutput) { - downloadFileByUrl(setOSSLink(row.orderBillFile)); +async function uploadInsuranceStampFiles() { + try { + let params: API.UploadInsuranceStampFilesInput = { + insurancePolicyId: stampFileForm.id, + listFiles: stampFileForm.url?.map((x) => x.path) ?? [], + }; + let res = await insuranceOrderServices.uploadInsuranceStampFiles(params); + if (res) { + Message.successMessage('涓婁紶鎴愬姛'); + getList(paginationState.pageIndex); + } + } catch (error) {} } -function handleDetail(row: API.InsuranceOrderListOutput) { +async function getInsurancePolicyStampFiles(id: string) { + try { + return await insuranceOrderServices.getInsurancePolicyStampFiles({ id: id }); + } catch (error) {} +} + +function handleDownloadInsureFile(row: API.GetInsurancePageOutput) { + downloadFileByUrl(setOSSLink(row.insureBillUrl)); +} + +function handleDetail(row: API.GetInsurancePageOutput) { router.push({ name: 'InsuranceOrderDetail', params: { @@ -345,14 +455,38 @@ }, }); } -function handleBatch(row: API.InsuranceOrderListOutput) { +function handleBatch(row: API.GetInsurancePageOutput) { + if ( + dayjs(row.effectEndTime).isBefore(dayjs()) || + dayjs(row.effectEndTime).isSame(dayjs(), 'day') + ) { + Message.errorMessage('淇濋櫓浠婂ぉ鍒版湡锛屾棤娉曟壒鏀�'); + return; + } router.push({ name: 'BatchChange', params: { id: row.id, }, + query: { + insurerName: row.insurerName ?? '', + insureBillNo: row.insureBillNo ?? '', + effectEndTime: row.effectEndTime ?? '', + }, }); } -function downloadInsureOrder() {} -function downloadInsurePerson() {} + +async function handleStandarEndo(row: API.GetInsurancePageOutput) { + try { + await Message.deleteMessage('鏄惁鐢宠閫�淇�?'); + let params = { + id: row.id, + }; + // let res = await userServices.deleteRole(params); + // if (res) { + // Message.successMessage('鎿嶄綔鎴愬姛'); + // getList(paginationState.pageIndex); + // } + } catch (error) {} +} </script> -- Gitblit v1.9.1