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/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