From e0e6833e4db59bef573e4302f41b0cb59abafdb1 Mon Sep 17 00:00:00 2001
From: zhengyiming <540361168@qq.com>
Date: 星期四, 23 十月 2025 19:02:52 +0800
Subject: [PATCH] fix: 放开余额管理
---
src/views/InsuranceClaim/InsuranceClaimDetail.vue | 582 ---------------------------------------------------------
1 files changed, 3 insertions(+), 579 deletions(-)
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>
--
Gitblit v1.9.1