From ee36747f2db9ac3a641e1cbaeb01f726ce9faa98 Mon Sep 17 00:00:00 2001 From: wupengfei <834520024@qq.com> Date: 星期一, 24 三月 2025 16:02:28 +0800 Subject: [PATCH] feat: 页面 --- src/views/Home/BatchChange.vue | 29 src/views/Home/components/UploadInsurePersonDialog.vue | 1 src/views/InsuranceClaim/InsuranceClaim.vue | 4 src/views/Home/components/InsureOrderInfoView.vue | 62 +- src/views/Home/InsuranceOrderDetail.vue | 1 src/constants/oss.ts | 2 src/constants/temp.ts | 11 src/views/Home/constants/index.ts | 6 src/views/Home/components/UploadStampFileDialog.vue | 1 src/views/Home/components/BatchDownsizingDialog.vue | 4 src/views/InsuranceClaim/InsuranceClaimDetail.vue | 582 ------------------------- src/views/Home/Home.vue | 40 - src/views/InsuranceClaim/components/InsuranceClaimView.vue | 602 ++++++++++++++++++++++++++ 13 files changed, 678 insertions(+), 667 deletions(-) diff --git a/src/constants/oss.ts b/src/constants/oss.ts index 91a3a78..47a1a06 100644 --- a/src/constants/oss.ts +++ b/src/constants/oss.ts @@ -4,7 +4,7 @@ export const OSSBaseURL = VITE_OSS_URL; -const _basicPath = '12333/YeXing/'; +const _basicPath = '12333/JiangYouBao/'; export const OssHRSIE = _basicPath + 'HRSIE/'; diff --git a/src/constants/temp.ts b/src/constants/temp.ts index b5aad98..3ceb08a 100644 --- a/src/constants/temp.ts +++ b/src/constants/temp.ts @@ -1,6 +1,9 @@ export const TempFolderPath = - 'https://parkmanagement.oss-cn-hangzhou.aliyuncs.com/12333/YeXing/temp'; + 'https://parkmanagement.oss-cn-hangzhou.aliyuncs.com/12333/JiangYouBao/temp'; -export const InsuranceOrderTempPath = `${TempFolderPath}/%E4%B9%9F%E8%A1%8C%E5%95%86%E4%BF%9D%E4%BA%BA%E5%91%98%E6%B8%85%E5%8D%95%E6%A8%A1%E6%9D%BF.xlsx`; - -export const JYBInsuranceOrderTempPath = `${TempFolderPath}/%E6%B1%9F%E4%BD%91%E4%BF%9D%E4%BA%BA%E5%91%98%E6%B8%85%E5%8D%95%E6%A8%A1%E6%9D%BF.xlsx`; +// 瀵煎叆 +export const InsuranceOrderTempPath = `${TempFolderPath}/%E9%9B%87%E4%B8%BB%E4%BA%BA%E5%91%98%E6%B8%85%E5%8D%95.xlsx`; +// 鍔犲噺浜� +export const InsuranceAddOrReduceTempPath = `${TempFolderPath}/%E5%8A%A0%E5%87%8F%E4%BA%BA%E6%A8%A1%E6%9D%BF.xls`; +// 鏇挎崲浜� +export const InsuranceChangeTempPath = `${TempFolderPath}/%E6%9B%BF%E6%8D%A2%E4%BA%BA%E6%A8%A1%E6%9D%BF.xls`; diff --git a/src/views/Home/BatchChange.vue b/src/views/Home/BatchChange.vue index 3bda0ec..b1b8aef 100644 --- a/src/views/Home/BatchChange.vue +++ b/src/views/Home/BatchChange.vue @@ -35,7 +35,7 @@ > <template #default> <el-button type="primary">鍔犲噺浜�</el-button> - <el-button link type="primary" @click.stop="handleTemplateDownload" + <el-button link type="primary" @click.stop="DownloadAddOrReducePersonTemplate" >涓嬭浇妯℃澘</el-button > </template> @@ -55,7 +55,7 @@ > <template #default> <el-button type="primary">鏇挎崲浜�</el-button> - <el-button link type="primary" @click.stop="handleTemplateDownload" + <el-button link type="primary" @click.stop="downloadReplacePersonTemplate" >涓嬭浇妯℃澘</el-button > </template> @@ -81,7 +81,7 @@ > </ProTableV2> <div class="chuck-add-or-edit-actions"> - <el-button class="chuck-add-or-edit-actions" type="primary" @click="handleSubmit" + <el-button class="chuck-add-or-edit-actions btn" type="primary" @click="handleSubmit" >鎻愪氦</el-button > </div> @@ -97,25 +97,17 @@ ProForm, ProFormItemV2, ChunkCell, - ProFormText, - ProTableQueryFilterBar, - QueryFilterItem, - SearchInput, ProFormCol, ProFormColItem, ProFormDatePicker, - ProFormInputNumber, useTable, ProTableV2, - ProFormRadio, - FieldSelect, - defineOperationBtns, - useFormDialog, ProFormUpload, UploadUserFile, } from '@bole-core/components'; import * as insuranceOrderServices from '@/services/api/InsuranceOrder'; -import { OrderInputType } from '@bole-core/core'; +import { downloadFileByUrl, OrderInputType } from '@bole-core/core'; +import { InsuranceAddOrReduceTempPath, InsuranceChangeTempPath } from '@/constants'; defineOptions({ name: 'BatchChange', @@ -211,7 +203,12 @@ function handleClear() {} function handleSubmit() {} -function handleTemplateDownload() {} +function DownloadAddOrReducePersonTemplate() { + downloadFileByUrl(InsuranceAddOrReduceTempPath, '鍔犲噺浜烘ā鏉�'); +} +function downloadReplacePersonTemplate() { + downloadFileByUrl(InsuranceChangeTempPath, '鏇挎崲浜烘ā鏉�'); +} onMounted(async () => { await getBatchRefundInfoDetail(); @@ -223,6 +220,8 @@ @use '@/style/common.scss' as *; .chuck-add-or-edit-actions { - // margin-bottom: 20px; + &.btn { + margin-bottom: 20px; + } } </style> diff --git a/src/views/Home/Home.vue b/src/views/Home/Home.vue index f98ab8e..c2442aa 100644 --- a/src/views/Home/Home.vue +++ b/src/views/Home/Home.vue @@ -44,25 +44,16 @@ </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 @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 - > + <el-button @click="downloadInsureOrder()" type="primary" link>瀵煎嚭淇濆崟鍒楄〃</el-button> + <el-button @click="downloadInsurePerson()" type="primary" link>瀵煎嚭鍦ㄤ繚浜哄憳</el-button> </template> </ProTableQueryFilterBar> <ProTableV2 @@ -92,10 +83,8 @@ useTable, useFormDialog, FieldDatePicker, - BlFileUpload, defineOperationBtns, UploadUserFile, - XLSXUtils, SearchInput, FieldRadio, } from '@bole-core/components'; @@ -104,16 +93,9 @@ 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 } from '@/utils'; import { ModelValueType } from 'element-plus'; -import { useQueryClient } from '@tanstack/vue-query'; -import { - InsuranceOrderTempPath, - JYBInsuranceOrderTempPath, - OnJobFlagEnumText, - insuranceTypeText, -} from '@/constants'; +import { InsuranceOrderTempPath, OnJobFlagEnumText, insuranceTypeText } from '@/constants'; import dayjs from 'dayjs'; import _ from 'lodash'; @@ -139,9 +121,9 @@ emits: { onClick: (role) => handleBatch(role), }, - extraProps: { - hide: (row: API.InsuranceOrderListOutput) => !row.orderBillFile, - }, + // extraProps: { + // hide: (row: API.InsuranceOrderListOutput) => !row.orderBillFile, + // }, }, { data: { @@ -286,10 +268,10 @@ } function handleDownload() { - downloadFileByUrl(JYBInsuranceOrderTempPath, '淇濆崟瀵煎叆妯℃澘'); + downloadFileByUrl(InsuranceOrderTempPath, '淇濆崟瀵煎叆妯℃澘'); } -function handleRowStyle(data: { row: API.InsuranceOrderListOutput; rowIndex: number }) { +function handleRowStyle(data: { row: API.InsuranceOrderListOutput }) { 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 diff --git a/src/views/Home/InsuranceOrderDetail.vue b/src/views/Home/InsuranceOrderDetail.vue index e2c745b..5027481 100644 --- a/src/views/Home/InsuranceOrderDetail.vue +++ b/src/views/Home/InsuranceOrderDetail.vue @@ -28,7 +28,6 @@ } const state = reactive({ - activeIndex: 1, tabType: InsureOrderTabType.InsureOrderInfo, }); </script> diff --git a/src/views/Home/components/BatchDownsizingDialog.vue b/src/views/Home/components/BatchDownsizingDialog.vue index 7d2a48a..39ebb2c 100644 --- a/src/views/Home/components/BatchDownsizingDialog.vue +++ b/src/views/Home/components/BatchDownsizingDialog.vue @@ -43,7 +43,7 @@ </template> <script setup lang="ts"> -import { JYBInsuranceOrderTempPath } from '@/constants'; +import { InsuranceOrderTempPath } from '@/constants'; import { ProDialog, UploadUserFile, @@ -121,6 +121,6 @@ } function downloadImportEntryStaff() { - downloadFileByUrl(JYBInsuranceOrderTempPath, '淇濆崟瀵煎叆妯℃澘'); + downloadFileByUrl(InsuranceOrderTempPath, '淇濆崟瀵煎叆妯℃澘'); } </script> diff --git a/src/views/Home/components/InsureOrderInfoView.vue b/src/views/Home/components/InsureOrderInfoView.vue index 57ab2cf..7656760 100644 --- a/src/views/Home/components/InsureOrderInfoView.vue +++ b/src/views/Home/components/InsureOrderInfoView.vue @@ -80,17 +80,11 @@ </QueryFilterItem> </template> <template #btn> - <el-button @click="handleTemplateDownload()" icon="Download" type="primary" - >妯℃澘涓嬭浇</el-button - > - <el-button @click="handleImport()" icon="Download" type="primary">瀵煎叆</el-button> - <el-button @click="handleClear()" icon="Download" type="primary">娓呯┖鏁版嵁</el-button> - <el-button @click="handleDownloadPerson()" icon="Download" type="primary" - >浜哄憳娓呭崟涓嬭浇</el-button - > - <el-button @click="handleDownloadOrder()" icon="Download" type="primary" - >淇濆崟涓嬭浇</el-button - > + <el-button @click="handleTemplateDownload()" link type="primary">妯℃澘涓嬭浇</el-button> + <el-button @click="handleImport()" type="primary">瀵煎叆</el-button> + <el-button @click="handleClear()" type="primary">娓呯┖鏁版嵁</el-button> + <el-button @click="handleDownloadPerson()" type="primary">浜哄憳娓呭崟涓嬭浇</el-button> + <el-button @click="handleDownloadOrder()" type="primary">淇濆崟涓嬭浇</el-button> </template> </ProTableQueryFilterBar> <ProTableV2 @@ -131,11 +125,11 @@ defineOperationBtns, useFormDialog, } from '@bole-core/components'; -import { insuranceTypeText } from '@/constants'; +import { InsuranceOrderTempPath, insuranceTypeText } from '@/constants'; import ChangePersonInfoDialog from './ChangePersonInfoDialog.vue'; import * as insuranceOrderServices from '@/services/api/InsuranceOrder'; import { useQuery, useQueryClient } from '@tanstack/vue-query'; -import { OrderInputType } from '@bole-core/core'; +import { downloadFileByUrl, OrderInputType } from '@bole-core/core'; defineOptions({ name: 'InsureOrderInfoView', @@ -208,9 +202,9 @@ emits: { onClick: (role) => handleChangeInfo(role), }, - extraProps: { - hide: (row: API.InsuranceOrderListOutput) => !row.orderBillFile, - }, + // extraProps: { + // hide: (row: API.InsuranceOrderListOutput) => !row.orderBillFile, + // }, }, { data: { @@ -218,11 +212,11 @@ name: '鐞嗚禂璇︽儏', }, emits: { - onClick: (role) => handleInsureClaimDetail(), + onClick: (role) => handleInsureClaimDetail(role), }, - extraProps: { - hide: (row: API.InsuranceOrderListOutput) => !row.orderBillFile, - }, + // extraProps: { + // hide: (row: API.InsuranceOrderListOutput) => !row.orderBillFile, + // }, }, ]); @@ -292,19 +286,21 @@ } ); -function handleTemplateDownload() {} +function handleTemplateDownload() { + downloadFileByUrl(InsuranceOrderTempPath, '浜哄憳淇℃伅妯℃澘'); +} function handleClear() {} function handleImport() {} function handleDownloadPerson() {} function handleDownloadOrder() {} function handleBatchChange() { - // router.push({ - // name: 'BatchChange', - // params: { - // id: id, - // }, - // }); + router.push({ + name: 'BatchChange', + params: { + id: id, + }, + }); } const { dialogProps, handleEdit, editForm } = useFormDialog({ @@ -322,7 +318,17 @@ async function changeInfo() {} -function handleInsureClaimDetail() {} +function handleInsureClaimDetail(row: API.InsuranceOrderListOutput) { + router.push({ + name: 'InsuranceClaimDetail', + params: { + id: row.id, + }, + query: { + fromRoute: 'InsuranceOrderDetail', + }, + }); +} </script> <style lang="scss" scoped> diff --git a/src/views/Home/components/UploadInsurePersonDialog.vue b/src/views/Home/components/UploadInsurePersonDialog.vue index 0473413..ba9bc53 100644 --- a/src/views/Home/components/UploadInsurePersonDialog.vue +++ b/src/views/Home/components/UploadInsurePersonDialog.vue @@ -6,6 +6,7 @@ draggable bodyNoPaddingBottom @close="onDialogClose" + width="600px" > <ProForm :model="innerForm" ref="dialogForm" label-width="120px"> <ProFormItemV2 diff --git a/src/views/Home/components/UploadStampFileDialog.vue b/src/views/Home/components/UploadStampFileDialog.vue index 8de4354..9ff782f 100644 --- a/src/views/Home/components/UploadStampFileDialog.vue +++ b/src/views/Home/components/UploadStampFileDialog.vue @@ -6,6 +6,7 @@ draggable bodyNoPaddingBottom @close="onDialogClose" + width="600px" > <ProForm :model="innerForm" ref="dialogForm" label-width="120px"> <ProFormItemV2 diff --git a/src/views/Home/constants/index.ts b/src/views/Home/constants/index.ts index 4e26fcb..51e1480 100644 --- a/src/views/Home/constants/index.ts +++ b/src/views/Home/constants/index.ts @@ -2,12 +2,6 @@ export const columns = defineColumns([ { - id: '1', - enCode: 'channel', - name: '娓犻亾', - width: 160, - }, - { id: '2', enCode: 'channel', name: '鎵规鍙�', diff --git a/src/views/InsuranceClaim/InsuranceClaim.vue b/src/views/InsuranceClaim/InsuranceClaim.vue index 52ed93a..99f3847 100644 --- a/src/views/InsuranceClaim/InsuranceClaim.vue +++ b/src/views/InsuranceClaim/InsuranceClaim.vue @@ -1,9 +1,9 @@ <template> - <InsuranceClaimDetailView></InsuranceClaimDetailView> + <InsuranceClaimView></InsuranceClaimView> </template> <script setup lang="ts"> -import InsuranceClaimDetailView from './InsuranceClaimDetail.vue'; +import InsuranceClaimView from './components/InsuranceClaimView.vue'; defineOptions({ name: 'InsuranceClaim', diff --git a/src/views/InsuranceClaim/InsuranceClaimDetail.vue b/src/views/InsuranceClaim/InsuranceClaimDetail.vue index af72b53..c78ea3c 100644 --- a/src/views/InsuranceClaim/InsuranceClaimDetail.vue +++ b/src/views/InsuranceClaim/InsuranceClaimDetail.vue @@ -1,587 +1,11 @@ <template> - <LoadingLayout :loading="isLoading"> - <AppScrollContainer> - <ChunkCell title="鎶ユ淇℃伅"> - <ProForm :model="form" ref="formRef" label-width="120px"> - <ProFormCol> - <ProFormColItem :span="6"> - <ProFormItemV2 - label="韬唤璇佸彿鐮�:" - prop="idNumber" - :check-rules="[{ message: '璇疯緭鍏ヨ韩浠借瘉鍙风爜', type: 'idCard' }]" - > - <ProFormText - v-model.trim="form.idNumber" - placeholder="璇疯緭鍏ヨ韩浠借瘉鍙风爜" - @change="handleIdNumberChange" - /> - </ProFormItemV2> - </ProFormColItem> - <ProFormColItem :span="6"> - <ProFormItemV2 - label="鎶ユ鏃堕棿:" - prop="reportedTime" - :check-rules="[{ message: '璇烽�夋嫨鎶ユ鏃堕棿' }]" - > - <ProFormDatePicker - v-model="form.reportedTime" - type="datetime" - format="YYYY-MM-DD HH:mm:ss" - value-format="YYYY-MM-DD HH:mm:ss" - placeholder="璇烽�夋嫨鎶ユ鏃堕棿" - :disabled-date="disabledReportedDate" - @change="handleReportedTimeChange" - :key="datePickerKey" - ></ProFormDatePicker> - </ProFormItemV2> - </ProFormColItem> - <ProFormColItem :span="6"> - <ProFormItemV2 - label="鑱旂郴鐢佃瘽:" - prop="contactNumber" - :check-rules="[{ message: '璇疯緭鍏ヨ仈绯荤數璇�', type: 'phone' }]" - > - <ProFormText v-model.trim="form.contactNumber" placeholder="璇疯緭鍏ヨ仈绯荤數璇�" /> - </ProFormItemV2> - </ProFormColItem> - <ProFormColItem :span="6"> - <ProFormItemV2 - label="澶囩敤鑱旂郴鐢佃瘽:" - prop="bakContactNumber" - :check-rules="[{ message: '璇疯緭鍏ュ鐢ㄨ仈绯荤數璇�', type: 'phone', required: false }]" - > - <ProFormText - v-model.trim="form.bakContactNumber" - placeholder="璇疯緭鍏ュ鐢ㄨ仈绯荤數璇�" - /> - </ProFormItemV2> - </ProFormColItem> - <ProFormColItem :span="6"> - <ProFormItemV2 label="濮撳悕:" prop="name" :check-rules="[{ message: '璇疯緭鍏ュ鍚�' }]"> - <ProFormText v-model.trim="form.name" placeholder="璇疯緭鍏ュ鍚�" :maxlength="30" /> - </ProFormItemV2> - </ProFormColItem> - </ProFormCol> - </ProForm> - </ChunkCell> - <ChunkCell title="淇濆崟淇℃伅"> - <ProForm :model="form" ref="insuranceBaseFormRef" label-width="120px"> - <ProFormCol> - <ProFormColItem :span="6"> - <ProFormItemV2 - label="鍙備繚鏈烘瀯:" - prop="insuredInstitution" - :check-rules="[{ message: '璇烽�夋嫨鍙備繚鏈烘瀯' }]" - > - <ProFormSelect - placeholder="璇烽�夋嫨鍙備繚鏈烘瀯" - :value-enum="InsuredInstitutionEnum" - clearable - v-model="form.insuredInstitution" - ></ProFormSelect> - </ProFormItemV2> - </ProFormColItem> - <ProFormColItem :span="6"> - <ProFormItemV2 - label="鎶曚繚鏂规:" - prop="insuranceScheme" - :check-rules="[{ message: '璇烽�夋嫨鎶曚繚鏂规' }]" - > - <ProFormSelect - placeholder="璇烽�夋嫨鎶曚繚鏂规" - :value-enum="InsuranceSchemeEnum" - clearable - v-model="form.insuranceScheme" - ></ProFormSelect> - </ProFormItemV2> - </ProFormColItem> - </ProFormCol> - <ProFormMixinsItemContainer> - <ProFormCol> - <ProFormColItem :span="6"> - <ProFormItemV2 label="璧蜂繚鏃ユ湡:" prop="insuranceBeginTime" mode="read"> - <ProFormDatePicker - v-model="form.insuranceBeginTime" - type="date" - value-format="YYYY-MM-DD" - placeholder="璇烽�夋嫨璧蜂繚鏃ユ湡" - ></ProFormDatePicker> - </ProFormItemV2> - </ProFormColItem> - <ProFormColItem :span="6"> - <ProFormItemV2 label="鍔冲姩鍚堝悓鍗曚綅:" prop="laborContractEnterprise" mode="read"> - <ProFormText - v-model.trim="form.laborContractEnterprise" - placeholder="璇疯緭鍏ュ姵鍔ㄥ悎鍚屽崟浣�" - /> - </ProFormItemV2> - </ProFormColItem> - <ProFormColItem :span="6"> - <ProFormItemV2 label="宸ョ:" prop="workType" mode="read"> - <ProFormText v-model.trim="form.workType" placeholder="璇疯緭鍏ュ伐绉�" /> - </ProFormItemV2> - </ProFormColItem> - </ProFormCol> - </ProFormMixinsItemContainer> - <ProFormMixinsItemContainer> - <ProFormCol> - <ProFormColItem :span="6"> - <ProFormItemV2 label="缁堜繚鏃ユ湡:" prop="insuranceEndTime" mode="read"> - <ProFormDatePicker - v-model="form.insuranceEndTime" - type="date" - value-format="YYYY-MM-DD" - placeholder="璇烽�夋嫨缁堜繚鏃ユ湡" - ></ProFormDatePicker> - </ProFormItemV2> - </ProFormColItem> - <ProFormColItem :span="6"> - <ProFormItemV2 label="瀹為檯宸ヤ綔鍗曚綅:" prop="workEnterprise" mode="read"> - <ProFormText - v-model.trim="form.workEnterprise" - placeholder="璇疯緭鍏ュ疄闄呭伐浣滃崟浣�" - /> - </ProFormItemV2> - </ProFormColItem> - </ProFormCol> - </ProFormMixinsItemContainer> - </ProForm> - </ChunkCell> - <ChunkCell title="淇濆崟淇℃伅"> - <ProForm :model="form" ref="insuranceFormRef" label-width="120px"> - <ProFormCol> - <ProFormColItem :span="6"> - <ProFormItemV2 - label="浜嬫晠绫诲瀷:" - prop="accidentType" - :check-rules="[{ message: '璇烽�夋嫨浜嬫晠绫诲瀷' }]" - > - <ProFormSelect - placeholder="璇烽�夋嫨浜嬫晠绫诲瀷" - :value-enum="AccidentTypeEnum" - clearable - v-model="form.accidentType" - ></ProFormSelect> - </ProFormItemV2> - </ProFormColItem> - <ProFormColItem :span="6"> - <ProFormItemV2 - label="浜嬫晠鍙戠敓鏃堕棿:" - prop="accidentTime" - :check-rules="[{ message: '璇烽�夋嫨浜嬫晠鍙戠敓鏃堕棿' }]" - > - <ProFormDatePicker - v-model="form.accidentTime" - type="datetime" - format="YYYY-MM-DD HH:mm:ss" - placeholder="璇烽�夋嫨浜嬫晠鍙戠敓鏃堕棿" - ></ProFormDatePicker> - </ProFormItemV2> - </ProFormColItem> - </ProFormCol> - <ProFormCol> - <ProFormColItem :span="6"> - <ProFormItemV2 label="浼ゆ畫姣斾緥:" prop="disabilityRatio"> - <ProFormInputNumber - v-model="form.disabilityRatio" - :controls="false" - :min="0" - :max="100" - unit="%" - ></ProFormInputNumber> - </ProFormItemV2> - </ProFormColItem> - <ProFormColItem :span="18"> - <ProFormItemV2 - label="浜嬪彂鍦扮偣:" - prop="accidentAddress" - :check-rules="[{ message: '璇疯緭鍏ヤ簨鍙戝湴鐐�' }]" - > - <ProFormText - v-model.trim="form.accidentAddress" - placeholder="璇疯緭鍏ヤ簨鍙戝湴鐐�" - :maxlength="100" - /> - </ProFormItemV2> - </ProFormColItem> - </ProFormCol> - <ProFormCol> - <ProFormColItem :span="24"> - <ProFormItemV2 - label="浜嬫晠缁忚繃:" - prop="accidentProcess" - :check-rules="[{ message: '璇疯緭鍏ヤ簨鏁呯粡杩�' }]" - > - <ProFormTextArea - v-model="form.accidentProcess" - :rows="10" - placeholder="璇疯緭鍏ヤ簨鏁呯粡杩�" - :maxlength="500" - show-word-limit - ></ProFormTextArea> - </ProFormItemV2> - </ProFormColItem> - </ProFormCol> - <div class="attachments-wrapper"> - <div class="attachments"> - <ProFormItemV2 label="浼よ�呰韩浠借瘉鐓х墖锛堟鍙嶏級:"> - <div class="id-imgUrl-wrapper"> - <ProFormItemV2 prop="attachmentFrontIdCards" class="pro-form-item-label-hidden"> - <ProFormImageUpload - v-model:file-url="form.attachmentFrontIdCards" - :limitFileSize="10" - btnText="韬唤璇佷汉鍍忛潰" - :showTip="false" - > - </ProFormImageUpload> - </ProFormItemV2> - <ProFormItemV2 prop="attachmentBackIdCards" class="pro-form-item-label-hidden"> - <ProFormImageUpload - v-model:file-url="form.attachmentBackIdCards" - :limitFileSize="10" - btnText="韬唤璇佸浗寰介潰" - :showTip="false" - > - </ProFormImageUpload> - </ProFormItemV2> - </div> - </ProFormItemV2> - <ProFormItemV2 prop="attachmentSites" label="鍙椾激鍦哄湴:"> - <ProFormImageUpload - v-model:file-url="form.attachmentSites" - :limitFileSize="10" - :showTip="false" - > - </ProFormImageUpload> - </ProFormItemV2> - <ProFormItemV2 prop="attachmentHandheldIdCards" label="浼よ�呮墜鎸佽韩浠借瘉鐓�:"> - <ProFormImageUpload - v-model:file-url="form.attachmentHandheldIdCards" - :limitFileSize="10" - :showTip="false" - > - </ProFormImageUpload> - </ProFormItemV2> - <ProFormItemV2 prop="attachmentAreas" label="鍙椾激閮ㄤ綅:"> - <ProFormImageUpload - v-model:file-url="form.attachmentAreas" - :limitFileSize="10" - :showTip="false" - :limitFileCount="0" - > - </ProFormImageUpload> - </ProFormItemV2> - <ProFormItemV2 prop="attachmentCases" label="鐥呬緥鐓х墖:"> - <ProFormImageUpload - v-model:file-url="form.attachmentCases" - :limitFileSize="10" - :showTip="false" - :limitFileCount="0" - > - </ProFormImageUpload> - </ProFormItemV2> - </div> - <ClaimPicDemoView /> - </div> - <div class="chuck-add-or-edit-actions"> - <el-button @click="handleBack">鍏抽棴</el-button> - <el-button type="primary" @click="handleSubmit">鎻愪氦</el-button> - </div> - </ProForm> - </ChunkCell> - <!-- <ChunkCell title="鐞嗚禂缁撴灉"> - <ProForm :model="form" ref="claimFormRef" label-width="120px"> - <ProFormCol> - <ProFormColItem :span="6"> - <ProFormItemV2 label="鐞嗚禂缁撴灉:" prop="claimResult"> - <ProFormSelect - placeholder="璇烽�夋嫨鐞嗚禂缁撴灉" - :value-enum="InsuranceClaimResultEnumText" - clearable - v-model="form.claimResult" - ></ProFormSelect> - </ProFormItemV2> - </ProFormColItem> - <ProFormColItem :span="6"> - <ProFormItemV2 label="缁�/鎾ゆ鏃堕棿:" prop="claimResultTime"> - <ProFormDatePicker - v-model="form.claimResultTime" - type="datetime" - format="YYYY-MM-DD" - value-format="YYYY-MM-DD" - placeholder="璇烽�夋嫨缁�/鎾ゆ鏃堕棿" - ></ProFormDatePicker> - </ProFormItemV2> - </ProFormColItem> - </ProFormCol> - <ProFormItemV2 label="涓嬫閲戦:" prop="downPaymentAmount"> - <ProFormInputNumber - v-model="form.downPaymentAmount" - :controls="false" - :min="0" - :precision="2" - ></ProFormInputNumber> - </ProFormItemV2> - <div class="chuck-add-or-edit-actions"> - <el-button @click="handleBack">鍏抽棴</el-button> - <el-button type="primary" @click="handleSubmit">鎻愪氦</el-button> - </div> - </ProForm> - </ChunkCell> --> - </AppScrollContainer> - <SelectOrderDialog v-bind="dialogProps" /> - </LoadingLayout> + <InsuranceClaimView :isDetail="true"></InsuranceClaimView> </template> <script setup lang="ts"> -import * as insuranceOrderServices from '@/services/api/InsuranceOrder'; -import * as insuranceClaimServices from '@/services/api/InsuranceClaim'; -import { - ChunkCell, - AppScrollContainer, - LoadingLayout, - ProForm, - ProFormCol, - ProFormColItem, - ProFormText, - ProFormDatePicker, - ProFormSelect, - ProFormImageUpload, - ProFormTextArea, - ProFormItemV2, - ProFormMixinsItemContainer, - ProFormInputNumber, - useFormDialog, -} from '@bole-core/components'; -import { FormInstance, DatePickerInstance } from 'element-plus'; -import { validateFormList, format } from '@/utils'; -import { convertFormToattAchments } from './utils'; -import { - InsuredInstitutionEnum, - InsuranceSchemeEnum, - AccidentTypeEnum, - InsuranceClaimAttachmentBusinessTypeEnum, - InsuranceClaimResultEnumText, -} from '@/constants'; -import { useRouteView } from '@/hooks'; -import { Message, BoleRegExp } from '@bole-core/core'; -import { useInsuranceClaimDetail, useInsuranceOrderListByOrderRelevance } from './hooks'; -import ClaimPicDemoView from './components/ClaimPicDemoView.vue'; -import SelectOrderDialog from './components/SelectOrderDialog.vue'; -import { useQueryClient } from '@tanstack/vue-query'; +import InsuranceClaimView from './components/InsuranceClaimView.vue'; defineOptions({ - name: 'InsuranceClaimDetail', + name: 'InsuranceClaim', }); - -const route = useRoute(); -const insuranceOrderId = (route.params.id as string) ?? ''; -const { closeViewPush } = useRouteView(); - -const datePickerKey = ref(1); - -const { form, isLoading, claimDetail, disabledReportedDate, queryClaimDetailByOrderId, resetForm } = - useInsuranceClaimDetail({ - insuranceOrderId, - }); - -// const { existedInsuranceOrderList } = useInsuranceOrderListByOrderRelevance({ -// params: computed(() => ({ -// idIdNumber: form.idNumber, -// reportedTime: form.reportedTime, -// })), -// onSuccess(data) { -// if (data.length == 1) { -// // importInsuranceOrderData(data[0]); -// form.insuranceOrderId = data[0].id; -// } else if (data.length > 1) { -// handleAdd({ -// insuranceOrderList: data, -// }); -// } -// }, -// }); - -const { dialogProps, handleAdd, editForm } = useFormDialog({ - onConfirm: handleSelectedOrder, - defaultFormParams: { - insuranceOrderId: '', - insuranceOrderList: [] as API.InsuranceOrderListOutput[], - }, -}); - -async function handleSelectedOrder() { - try { - datePickerKey.value += 1; - resetForm(); - await nextTick(); - form.insuranceOrderId = editForm.insuranceOrderId; - // let claimDetail = await queryClaimDetailByOrderId(); - // if (claimDetail) { - // Message.errorMessage('璇ヤ繚鍗曞凡鐞嗚禂'); - // } - } catch (error) {} -} - -const queryClient = useQueryClient(); - -async function ensureInsuranceOrderList() { - try { - if (BoleRegExp.RegIDCard.test(form.idNumber) && !!form.reportedTime) { - let params: API.QueryInsuranceOrderListByOrderRelevanceInput = { - idIdNumber: form.idNumber, - reportedTime: form.reportedTime, - }; - let existedInsuranceOrderList = await queryClient.ensureQueryData({ - queryKey: ['insuranceOrderServices/getInsuranceOrderListByOrderRelevance', params], - queryFn: async () => { - return await insuranceOrderServices.getInsuranceOrderListByOrderRelevance(params, { - showLoading: false, - }); - }, - }); - if (existedInsuranceOrderList.length == 1) { - form.insuranceOrderId = existedInsuranceOrderList[0].id; - } else if (existedInsuranceOrderList.length > 1) { - handleAdd({ - insuranceOrderList: existedInsuranceOrderList, - }); - } else { - Message.errorMessage('鏈壘鍒板尮閰嶇殑淇濆崟淇℃伅'); - } - } - - // return existedInsuranceOrderList; - } catch (error) {} -} - -function handleIdNumberChange() { - ensureInsuranceOrderList(); -} - -function handleReportedTimeChange() { - if (form.accidentTime === '') { - form.accidentTime = form.reportedTime; - } - ensureInsuranceOrderList(); -} - -const formRef = ref<FormInstance>(); -const insuranceBaseFormRef = ref<FormInstance>(); -const insuranceFormRef = ref<FormInstance>(); -const claimFormRef = ref<FormInstance>(); - -async function handleSubmit() { - try { - const valid = await validateFormList([ - formRef.value, - insuranceBaseFormRef.value, - insuranceFormRef.value, - ]); - - if (valid) { - addInsuranceClaim(); - } - } catch (error) {} -} - -async function addInsuranceClaim() { - try { - if (claimDetail.value === undefined) { - Message.errorMessage('鏈壘鍒板尮閰嶇殑淇濆崟淇℃伅'); - return; - } - let params: API.AddInsuranceClaimInput = { - channel: form.channel, - name: form.name, - idNumber: form.idNumber, - workType: form.workType, - laborContractEnterprise: form.laborContractEnterprise, - workEnterprise: form.workEnterprise, - insuranceBeginTime: format(form.insuranceBeginTime), - insuranceEndTime: format(form.insuranceEndTime), - insuredInstitution: form.insuredInstitution, - insuranceScheme: form.insuranceScheme, - onJobFlag: form.onJobFlag, - gender: form.gender, - age: form.age, - premiumAmount: form.premiumAmount, - incDecAmount: form.incDecAmount, - insuranceOrderId: form.insuranceOrderId, - reportedTime: format(form.reportedTime, 'YYYY-MM-DD HH:mm:ss'), - contactNumber: form.contactNumber, - bakContactNumber: form.bakContactNumber, - accidentType: form.accidentType, - accidentTime: format(form.accidentTime, 'YYYY-MM-DD HH:mm:ss'), - // disabilityRatio: form.disabilityRatio, - accidentAddress: form.accidentAddress, - accidentProcess: form.accidentProcess, - // claimResult: form.claimResult, - // claimResultTime: form.claimResultTime, - attachments: [ - ...convertFormToattAchments( - form.attachmentFrontIdCards, - InsuranceClaimAttachmentBusinessTypeEnum.InjuredIdCardImg - ), - ...convertFormToattAchments( - form.attachmentBackIdCards, - InsuranceClaimAttachmentBusinessTypeEnum.InjuredIdCardImg - ), - ...convertFormToattAchments( - form.attachmentSites, - InsuranceClaimAttachmentBusinessTypeEnum.InjurySiteImg - ), - ...convertFormToattAchments( - form.attachmentHandheldIdCards, - InsuranceClaimAttachmentBusinessTypeEnum.InjuredHandheldIdCardImg - ), - ...convertFormToattAchments( - form.attachmentAreas, - InsuranceClaimAttachmentBusinessTypeEnum.InjuredAreaImg - ), - ...convertFormToattAchments( - form.attachmentCases, - InsuranceClaimAttachmentBusinessTypeEnum.CasesImg - ), - ], - }; - // if (form.downPaymentAmount) params.downPaymentAmount = form.downPaymentAmount; - if (form.disabilityRatio) params.disabilityRatio = form.disabilityRatio; - let res: number; - // if (!!claimDetail.value) { - // Message.errorMessage('璇ヤ繚鍗曞凡鐞嗚禂'); - // } else { - res = await insuranceClaimServices.addInsuranceClaim(params); - // } - if (res) { - Message.successMessage('鎿嶄綔鎴愬姛'); - handleBack(); - } - } catch (error) {} -} - -function handleBack() { - closeViewPush(route, { - name: 'Home', - }); -} </script> - -<style lang="scss" scoped> -@use '@/style/common.scss' as *; - -.attachments-wrapper { - position: relative; - display: flex; - - .attachments { - flex: 1; - min-width: 0; - } -} - -.id-imgUrl-wrapper { - display: flex; - gap: 40px; -} -</style> diff --git a/src/views/InsuranceClaim/components/InsuranceClaimView.vue b/src/views/InsuranceClaim/components/InsuranceClaimView.vue new file mode 100644 index 0000000..22591b9 --- /dev/null +++ b/src/views/InsuranceClaim/components/InsuranceClaimView.vue @@ -0,0 +1,602 @@ +<template> + <LoadingLayout :loading="isLoading"> + <AppScrollContainer> + <ChunkCell title="鎶ユ淇℃伅"> + <ProForm :model="form" ref="formRef" label-width="120px" :is-read="isDetail"> + <ProFormCol> + <ProFormColItem :span="6"> + <ProFormItemV2 + label="韬唤璇佸彿鐮�:" + prop="idNumber" + :check-rules="[{ message: '璇疯緭鍏ヨ韩浠借瘉鍙风爜', type: 'idCard' }]" + > + <ProFormText + v-model.trim="form.idNumber" + placeholder="璇疯緭鍏ヨ韩浠借瘉鍙风爜" + @change="handleIdNumberChange" + /> + </ProFormItemV2> + </ProFormColItem> + <ProFormColItem :span="6"> + <ProFormItemV2 + label="鎶ユ鏃堕棿:" + prop="reportedTime" + :check-rules="[{ message: '璇烽�夋嫨鎶ユ鏃堕棿' }]" + > + <ProFormDatePicker + v-model="form.reportedTime" + type="datetime" + format="YYYY-MM-DD HH:mm:ss" + value-format="YYYY-MM-DD HH:mm:ss" + placeholder="璇烽�夋嫨鎶ユ鏃堕棿" + :disabled-date="disabledReportedDate" + @change="handleReportedTimeChange" + :key="datePickerKey" + ></ProFormDatePicker> + </ProFormItemV2> + </ProFormColItem> + <ProFormColItem :span="6"> + <ProFormItemV2 + label="鑱旂郴鐢佃瘽:" + prop="contactNumber" + :check-rules="[{ message: '璇疯緭鍏ヨ仈绯荤數璇�', type: 'phone' }]" + > + <ProFormText v-model.trim="form.contactNumber" placeholder="璇疯緭鍏ヨ仈绯荤數璇�" /> + </ProFormItemV2> + </ProFormColItem> + <ProFormColItem :span="6"> + <ProFormItemV2 + label="澶囩敤鑱旂郴鐢佃瘽:" + prop="bakContactNumber" + :check-rules="[{ message: '璇疯緭鍏ュ鐢ㄨ仈绯荤數璇�', type: 'phone', required: false }]" + > + <ProFormText + v-model.trim="form.bakContactNumber" + placeholder="璇疯緭鍏ュ鐢ㄨ仈绯荤數璇�" + /> + </ProFormItemV2> + </ProFormColItem> + <ProFormColItem :span="6"> + <ProFormItemV2 label="濮撳悕:" prop="name" :check-rules="[{ message: '璇疯緭鍏ュ鍚�' }]"> + <ProFormText v-model.trim="form.name" placeholder="璇疯緭鍏ュ鍚�" :maxlength="30" /> + </ProFormItemV2> + </ProFormColItem> + <ProFormColItem :span="6"> + <ProFormItemV2 + label="淇濆崟鍙�:" + prop="name" + :check-rules="[{ message: '璇疯緭鍏ヤ繚鍗曞彿' }]" + > + <ProFormText v-model.trim="form.name" placeholder="璇疯緭鍏ヤ繚鍗曞彿" :maxlength="30" /> + </ProFormItemV2> + </ProFormColItem> + </ProFormCol> + </ProForm> + </ChunkCell> + <ChunkCell title="淇濆崟淇℃伅"> + <ProForm :model="form" ref="insuranceBaseFormRef" label-width="120px" :is-read="isDetail"> + <ProFormCol> + <ProFormColItem :span="6"> + <ProFormItemV2 + label="鍙備繚鏈烘瀯:" + prop="insuredInstitution" + :check-rules="[{ message: '璇烽�夋嫨鍙備繚鏈烘瀯' }]" + > + <ProFormSelect + placeholder="璇烽�夋嫨鍙備繚鏈烘瀯" + :value-enum="InsuredInstitutionEnum" + clearable + v-model="form.insuredInstitution" + ></ProFormSelect> + </ProFormItemV2> + </ProFormColItem> + <ProFormColItem :span="6"> + <ProFormItemV2 + label="鎶曚繚鏂规:" + prop="insuranceScheme" + :check-rules="[{ message: '璇烽�夋嫨鎶曚繚鏂规' }]" + > + <ProFormSelect + placeholder="璇烽�夋嫨鎶曚繚鏂规" + :value-enum="InsuranceSchemeEnum" + clearable + v-model="form.insuranceScheme" + ></ProFormSelect> + </ProFormItemV2> + </ProFormColItem> + </ProFormCol> + <ProFormMixinsItemContainer> + <ProFormCol> + <ProFormColItem :span="6"> + <ProFormItemV2 label="璧蜂繚鏃ユ湡:" prop="insuranceBeginTime" mode="read"> + <ProFormDatePicker + v-model="form.insuranceBeginTime" + type="date" + value-format="YYYY-MM-DD" + placeholder="璇烽�夋嫨璧蜂繚鏃ユ湡" + ></ProFormDatePicker> + </ProFormItemV2> + </ProFormColItem> + <ProFormColItem :span="6"> + <ProFormItemV2 label="鎶曚繚浜�:" prop="laborContractEnterprise" mode="read"> + <ProFormText + v-model.trim="form.laborContractEnterprise" + placeholder="璇疯緭鍏ユ姇淇濅汉" + /> + </ProFormItemV2> + </ProFormColItem> + <ProFormColItem :span="6"> + <ProFormItemV2 label="宸ョ:" prop="workType" mode="read"> + <ProFormText v-model.trim="form.workType" placeholder="璇疯緭鍏ュ伐绉�" /> + </ProFormItemV2> + </ProFormColItem> + </ProFormCol> + </ProFormMixinsItemContainer> + <ProFormMixinsItemContainer> + <ProFormCol> + <ProFormColItem :span="6"> + <ProFormItemV2 label="缁堜繚鏃ユ湡:" prop="insuranceEndTime" mode="read"> + <ProFormDatePicker + v-model="form.insuranceEndTime" + type="date" + value-format="YYYY-MM-DD" + placeholder="璇烽�夋嫨缁堜繚鏃ユ湡" + ></ProFormDatePicker> + </ProFormItemV2> + </ProFormColItem> + <ProFormColItem :span="6"> + <ProFormItemV2 label="琚繚浜�:" prop="workEnterprise" mode="read"> + <ProFormText v-model.trim="form.workEnterprise" placeholder="璇疯緭鍏ヨ淇濅汉" /> + </ProFormItemV2> + </ProFormColItem> + </ProFormCol> + </ProFormMixinsItemContainer> + </ProForm> + </ChunkCell> + <ChunkCell title="淇濆崟淇℃伅"> + <ProForm :model="form" ref="insuranceFormRef" label-width="160px" :is-read="isDetail"> + <ProFormCol> + <ProFormColItem :span="6"> + <ProFormItemV2 + label="浜嬫晠绫诲瀷:" + prop="accidentType" + :check-rules="[{ message: '璇烽�夋嫨浜嬫晠绫诲瀷' }]" + > + <ProFormSelect + placeholder="璇烽�夋嫨浜嬫晠绫诲瀷" + :value-enum="AccidentTypeEnum" + clearable + v-model="form.accidentType" + ></ProFormSelect> + </ProFormItemV2> + </ProFormColItem> + <ProFormColItem :span="6"> + <ProFormItemV2 + label="浜嬫晠鍙戠敓鏃堕棿:" + prop="accidentTime" + :check-rules="[{ message: '璇烽�夋嫨浜嬫晠鍙戠敓鏃堕棿' }]" + > + <ProFormDatePicker + v-model="form.accidentTime" + type="datetime" + format="YYYY-MM-DD HH:mm:ss" + placeholder="璇烽�夋嫨浜嬫晠鍙戠敓鏃堕棿" + ></ProFormDatePicker> + </ProFormItemV2> + </ProFormColItem> + </ProFormCol> + <ProFormCol> + <ProFormColItem :span="6"> + <ProFormItemV2 label="浼ゆ畫姣斾緥:" prop="disabilityRatio"> + <ProFormInputNumber + v-model="form.disabilityRatio" + :controls="false" + :min="0" + :max="100" + unit="%" + ></ProFormInputNumber> + </ProFormItemV2> + </ProFormColItem> + <ProFormColItem :span="18"> + <ProFormItemV2 + label="浜嬪彂鍦扮偣:" + prop="accidentAddress" + :check-rules="[{ message: '璇疯緭鍏ヤ簨鍙戝湴鐐�' }]" + > + <ProFormText + v-model.trim="form.accidentAddress" + placeholder="璇疯緭鍏ヤ簨鍙戝湴鐐�" + :maxlength="100" + /> + </ProFormItemV2> + </ProFormColItem> + </ProFormCol> + <ProFormCol> + <ProFormColItem :span="24"> + <ProFormItemV2 + label="浜嬫晠缁忚繃:" + prop="accidentProcess" + :check-rules="[{ message: '璇疯緭鍏ヤ簨鏁呯粡杩�' }]" + > + <ProFormTextArea + v-model="form.accidentProcess" + :rows="10" + placeholder="璇疯緭鍏ヤ簨鏁呯粡杩�" + :maxlength="500" + show-word-limit + ></ProFormTextArea> + </ProFormItemV2> + </ProFormColItem> + </ProFormCol> + <div class="attachments-wrapper"> + <div class="attachments"> + <ProFormItemV2 label="浼よ�呰韩浠借瘉鐓х墖(姝e弽):"> + <div class="id-imgUrl-wrapper"> + <ProFormItemV2 prop="attachmentFrontIdCards" class="pro-form-item-label-hidden"> + <ProFormImageUpload + v-model:file-url="form.attachmentFrontIdCards" + :limitFileSize="10" + btnText="韬唤璇佷汉鍍忛潰" + :showTip="false" + > + </ProFormImageUpload> + </ProFormItemV2> + <ProFormItemV2 prop="attachmentBackIdCards" class="pro-form-item-label-hidden"> + <ProFormImageUpload + v-model:file-url="form.attachmentBackIdCards" + :limitFileSize="10" + btnText="韬唤璇佸浗寰介潰" + :showTip="false" + > + </ProFormImageUpload> + </ProFormItemV2> + </div> + </ProFormItemV2> + <ProFormItemV2 prop="attachmentSites" label="鍙椾激鍦哄湴:"> + <ProFormImageUpload + v-model:file-url="form.attachmentSites" + :limitFileSize="10" + :showTip="false" + > + </ProFormImageUpload> + </ProFormItemV2> + <ProFormItemV2 prop="attachmentHandheldIdCards" label="浼よ�呮墜鎸佽韩浠借瘉鐓�:"> + <ProFormImageUpload + v-model:file-url="form.attachmentHandheldIdCards" + :limitFileSize="10" + :showTip="false" + > + </ProFormImageUpload> + </ProFormItemV2> + <ProFormItemV2 prop="attachmentAreas" label="鍙椾激閮ㄤ綅:"> + <ProFormImageUpload + v-model:file-url="form.attachmentAreas" + :limitFileSize="10" + :showTip="false" + :limitFileCount="0" + > + </ProFormImageUpload> + </ProFormItemV2> + <ProFormItemV2 prop="attachmentCases" label="鐥呬緥鐓х墖:"> + <ProFormImageUpload + v-model:file-url="form.attachmentCases" + :limitFileSize="10" + :showTip="false" + :limitFileCount="0" + > + </ProFormImageUpload> + </ProFormItemV2> + </div> + <ClaimPicDemoView /> + </div> + <div class="chuck-add-or-edit-actions"> + <el-button @click="handleBack">鍏抽棴</el-button> + <el-button v-if="!isDetail" type="primary" @click="handleSubmit">鎻愪氦</el-button> + </div> + </ProForm> + </ChunkCell> + <!-- <ChunkCell title="鐞嗚禂缁撴灉"> + <ProForm :model="form" ref="claimFormRef" label-width="120px"> + <ProFormCol> + <ProFormColItem :span="6"> + <ProFormItemV2 label="鐞嗚禂缁撴灉:" prop="claimResult"> + <ProFormSelect + placeholder="璇烽�夋嫨鐞嗚禂缁撴灉" + :value-enum="InsuranceClaimResultEnumText" + clearable + v-model="form.claimResult" + ></ProFormSelect> + </ProFormItemV2> + </ProFormColItem> + <ProFormColItem :span="6"> + <ProFormItemV2 label="缁�/鎾ゆ鏃堕棿:" prop="claimResultTime"> + <ProFormDatePicker + v-model="form.claimResultTime" + type="datetime" + format="YYYY-MM-DD" + value-format="YYYY-MM-DD" + placeholder="璇烽�夋嫨缁�/鎾ゆ鏃堕棿" + ></ProFormDatePicker> + </ProFormItemV2> + </ProFormColItem> + </ProFormCol> + <ProFormItemV2 label="涓嬫閲戦:" prop="downPaymentAmount"> + <ProFormInputNumber + v-model="form.downPaymentAmount" + :controls="false" + :min="0" + :precision="2" + ></ProFormInputNumber> + </ProFormItemV2> + <div class="chuck-add-or-edit-actions"> + <el-button @click="handleBack">鍏抽棴</el-button> + <el-button type="primary" @click="handleSubmit">鎻愪氦</el-button> + </div> + </ProForm> + </ChunkCell> --> + </AppScrollContainer> + <SelectOrderDialog v-bind="dialogProps" /> + </LoadingLayout> +</template> + +<script setup lang="ts"> +import * as insuranceOrderServices from '@/services/api/InsuranceOrder'; +import * as insuranceClaimServices from '@/services/api/InsuranceClaim'; +import { + ChunkCell, + AppScrollContainer, + LoadingLayout, + ProForm, + ProFormCol, + ProFormColItem, + ProFormText, + ProFormDatePicker, + ProFormSelect, + ProFormImageUpload, + ProFormTextArea, + ProFormItemV2, + ProFormMixinsItemContainer, + ProFormInputNumber, + useFormDialog, +} from '@bole-core/components'; +import { FormInstance, DatePickerInstance } from 'element-plus'; +import { validateFormList, format } from '@/utils'; +import { + InsuredInstitutionEnum, + InsuranceSchemeEnum, + AccidentTypeEnum, + InsuranceClaimAttachmentBusinessTypeEnum, + InsuranceClaimResultEnumText, +} from '@/constants'; +import { useRouteView } from '@/hooks'; +import { Message, BoleRegExp } from '@bole-core/core'; +import ClaimPicDemoView from './ClaimPicDemoView.vue'; +import SelectOrderDialog from './SelectOrderDialog.vue'; +import { useQueryClient } from '@tanstack/vue-query'; +import { convertFormToattAchments } from '../utils'; +import { useInsuranceClaimDetail } from '../hooks'; + +defineOptions({ + name: 'InsuranceClaimDetail', +}); + +type Props = { + isDetail?: boolean; +}; + +const props = withDefaults(defineProps<Props>(), { + isDetail: false, +}); + +const route = useRoute(); +const insuranceOrderId = (route.params.id as string) ?? ''; +const fromRoute = route.query.fromRoute as string; +const { closeViewPush } = useRouteView(); + +const datePickerKey = ref(1); + +const { form, isLoading, claimDetail, disabledReportedDate, queryClaimDetailByOrderId, resetForm } = + useInsuranceClaimDetail({ + insuranceOrderId, + }); + +// const { existedInsuranceOrderList } = useInsuranceOrderListByOrderRelevance({ +// params: computed(() => ({ +// idIdNumber: form.idNumber, +// reportedTime: form.reportedTime, +// })), +// onSuccess(data) { +// if (data.length == 1) { +// // importInsuranceOrderData(data[0]); +// form.insuranceOrderId = data[0].id; +// } else if (data.length > 1) { +// handleAdd({ +// insuranceOrderList: data, +// }); +// } +// }, +// }); + +const { dialogProps, handleAdd, editForm } = useFormDialog({ + onConfirm: handleSelectedOrder, + defaultFormParams: { + insuranceOrderId: '', + insuranceOrderList: [] as API.InsuranceOrderListOutput[], + }, +}); + +async function handleSelectedOrder() { + try { + datePickerKey.value += 1; + resetForm(); + await nextTick(); + form.insuranceOrderId = editForm.insuranceOrderId; + // let claimDetail = await queryClaimDetailByOrderId(); + // if (claimDetail) { + // Message.errorMessage('璇ヤ繚鍗曞凡鐞嗚禂'); + // } + } catch (error) {} +} + +const queryClient = useQueryClient(); + +async function ensureInsuranceOrderList() { + try { + if (BoleRegExp.RegIDCard.test(form.idNumber) && !!form.reportedTime) { + let params: API.QueryInsuranceOrderListByOrderRelevanceInput = { + idIdNumber: form.idNumber, + reportedTime: form.reportedTime, + }; + let existedInsuranceOrderList = await queryClient.ensureQueryData({ + queryKey: ['insuranceOrderServices/getInsuranceOrderListByOrderRelevance', params], + queryFn: async () => { + return await insuranceOrderServices.getInsuranceOrderListByOrderRelevance(params, { + showLoading: false, + }); + }, + }); + if (existedInsuranceOrderList.length == 1) { + form.insuranceOrderId = existedInsuranceOrderList[0].id; + } else if (existedInsuranceOrderList.length > 1) { + handleAdd({ + insuranceOrderList: existedInsuranceOrderList, + }); + } else { + Message.errorMessage('鏈壘鍒板尮閰嶇殑淇濆崟淇℃伅'); + } + } + + // return existedInsuranceOrderList; + } catch (error) {} +} + +function handleIdNumberChange() { + ensureInsuranceOrderList(); +} + +function handleReportedTimeChange() { + if (form.accidentTime === '') { + form.accidentTime = form.reportedTime; + } + ensureInsuranceOrderList(); +} + +const formRef = ref<FormInstance>(); +const insuranceBaseFormRef = ref<FormInstance>(); +const insuranceFormRef = ref<FormInstance>(); +const claimFormRef = ref<FormInstance>(); + +async function handleSubmit() { + try { + const valid = await validateFormList([ + formRef.value, + insuranceBaseFormRef.value, + insuranceFormRef.value, + ]); + + if (valid) { + addInsuranceClaim(); + } + } catch (error) {} +} + +async function addInsuranceClaim() { + try { + if (claimDetail.value === undefined) { + Message.errorMessage('鏈壘鍒板尮閰嶇殑淇濆崟淇℃伅'); + return; + } + let params: API.AddInsuranceClaimInput = { + channel: form.channel, + name: form.name, + idNumber: form.idNumber, + workType: form.workType, + laborContractEnterprise: form.laborContractEnterprise, + workEnterprise: form.workEnterprise, + insuranceBeginTime: format(form.insuranceBeginTime), + insuranceEndTime: format(form.insuranceEndTime), + insuredInstitution: form.insuredInstitution, + insuranceScheme: form.insuranceScheme, + onJobFlag: form.onJobFlag, + gender: form.gender, + age: form.age, + premiumAmount: form.premiumAmount, + incDecAmount: form.incDecAmount, + insuranceOrderId: form.insuranceOrderId, + reportedTime: format(form.reportedTime, 'YYYY-MM-DD HH:mm:ss'), + contactNumber: form.contactNumber, + bakContactNumber: form.bakContactNumber, + accidentType: form.accidentType, + accidentTime: format(form.accidentTime, 'YYYY-MM-DD HH:mm:ss'), + // disabilityRatio: form.disabilityRatio, + accidentAddress: form.accidentAddress, + accidentProcess: form.accidentProcess, + // claimResult: form.claimResult, + // claimResultTime: form.claimResultTime, + attachments: [ + ...convertFormToattAchments( + form.attachmentFrontIdCards, + InsuranceClaimAttachmentBusinessTypeEnum.InjuredIdCardImg + ), + ...convertFormToattAchments( + form.attachmentBackIdCards, + InsuranceClaimAttachmentBusinessTypeEnum.InjuredIdCardImg + ), + ...convertFormToattAchments( + form.attachmentSites, + InsuranceClaimAttachmentBusinessTypeEnum.InjurySiteImg + ), + ...convertFormToattAchments( + form.attachmentHandheldIdCards, + InsuranceClaimAttachmentBusinessTypeEnum.InjuredHandheldIdCardImg + ), + ...convertFormToattAchments( + form.attachmentAreas, + InsuranceClaimAttachmentBusinessTypeEnum.InjuredAreaImg + ), + ...convertFormToattAchments( + form.attachmentCases, + InsuranceClaimAttachmentBusinessTypeEnum.CasesImg + ), + ], + }; + // if (form.downPaymentAmount) params.downPaymentAmount = form.downPaymentAmount; + if (form.disabilityRatio) params.disabilityRatio = form.disabilityRatio; + let res: number; + // if (!!claimDetail.value) { + // Message.errorMessage('璇ヤ繚鍗曞凡鐞嗚禂'); + // } else { + res = await insuranceClaimServices.addInsuranceClaim(params); + // } + if (res) { + Message.successMessage('鎿嶄綔鎴愬姛'); + handleBack(); + } + } catch (error) {} +} + +function handleBack() { + closeViewPush(route, { + name: fromRoute ?? 'Home', + }); +} +</script> + +<style lang="scss" scoped> +@use '@/style/common.scss' as *; + +.attachments-wrapper { + position: relative; + display: flex; + + .attachments { + flex: 1; + min-width: 0; + } +} + +.id-imgUrl-wrapper { + display: flex; + gap: 40px; +} +</style> -- Gitblit v1.9.1