zhengyiming
2025-10-30 39a0dc276d7a567548b314a94b5f812c6a8b1d17
fix: 3.4.2.10
3个文件已修改
1个文件已添加
169 ■■■■■ 已修改文件
src/components/Dialog/ParkBountyTradeDetailFileDialog.vue 123 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/services/api/typings.d.ts 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/BalanceManage/components/ConsumeRecordView.vue 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/Home/Home.vue 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/Dialog/ParkBountyTradeDetailFileDialog.vue
New file
@@ -0,0 +1,123 @@
<template>
  <ProDialog title="文件列表" v-model="visible" @close="onDialogClose" destroy-on-close draggable>
    <ProForm :model="form" ref="dialogForm" label-width="110px" is-read class="audit-file-form">
      <ProFormItemV2
        label="平台审批凭证:"
        prop="selfAuditFileUrl"
        v-if="form?.selfAuditFileUrl?.length > 0"
      >
        <ProFormUpload
          v-model:file-url="form.selfAuditFileUrl"
          :limitFileSize="50"
          accept="doc,docx,pdf,xls,xlsx,jpg/jpeg,png"
        ></ProFormUpload>
      </ProFormItemV2>
      <ProFormItemV2
        label="出账审批凭证:"
        prop="payAuditFileUrl"
        v-if="form?.payAuditFileUrl?.length > 0"
      >
        <ProFormUpload
          v-model:file-url="form.payAuditFileUrl"
          :limitFileSize="50"
          accept="doc,docx,pdf,xls,xlsx,jpg/jpeg,png"
        ></ProFormUpload>
      </ProFormItemV2>
      <ProFormItemV2
        label="财政审批凭证:"
        prop="financeAuditFileUrl"
        v-if="form?.financeAuditFileUrl?.length > 0"
      >
        <ProFormUpload
          v-model:file-url="form.financeAuditFileUrl"
          :limitFileSize="50"
          accept="doc,docx,pdf,xls,xlsx,jpg/jpeg,png"
        ></ProFormUpload>
      </ProFormItemV2>
      <ProFormItemV2 label="出账凭证:" prop="payFileUrl" v-if="form?.payFileUrl?.length > 0">
        <ProFormUpload
          v-model:file-url="form.payFileUrl"
          :limitFileSize="50"
          accept="doc,docx,pdf,xls,xlsx,jpg/jpeg,png"
        ></ProFormUpload>
      </ProFormItemV2>
      <ProFormItemV2 label="保单文件:" prop="insureBillUrl" v-if="form?.insureBillUrl?.length > 0">
        <ProFormUpload
          v-model:file-url="form.insureBillUrl"
          :limitFileSize="50"
          accept="doc,docx,pdf,xls,xlsx,jpg/jpeg,png"
        ></ProFormUpload>
      </ProFormItemV2>
    </ProForm>
    <template #footer>
      <span class="dialog-footer">
        <el-button @click="emit('onCancel')">取 消</el-button>
        <el-button type="primary" @click="handleConfirm">确 定</el-button>
      </span>
    </template>
  </ProDialog>
</template>
<script setup lang="ts">
import { FormInstance } from 'element-plus';
import {
  ProDialog,
  ProForm,
  ProFormItemV2,
  ProFormText,
  UploadUserFile,
  ProFormUpload,
} from '@bole-core/components';
defineOptions({
  name: 'ParkBountyTradeDetailFileDialog',
});
// type Props = {};
// const props = withDefaults(defineProps<Props>(), {});
const visible = defineModel({ type: Boolean });
type Form = {
  title?: string;
  payAuditFileUrl: UploadUserFile[];
  financeAuditFileUrl: UploadUserFile[];
  selfAuditFileUrl: UploadUserFile[];
  payFileUrl: UploadUserFile[];
  insureBillUrl: UploadUserFile[];
};
const form = defineModel<Form>('form');
const emit = defineEmits<{
  (e: 'onConfirm'): void;
  (e: 'onCancel'): void;
}>();
const dialogForm = ref<FormInstance>();
function onDialogClose() {
  if (!dialogForm.value) return;
  dialogForm.value.resetFields();
}
function handleConfirm() {
  if (!dialogForm.value) return;
  dialogForm.value.validate((valid) => {
    if (valid) {
      emit('onConfirm');
    } else {
      return;
    }
  });
}
</script>
<style lang="scss" scoped>
.audit-file-form {
  .el-form-item {
    margin-bottom: 22px;
  }
}
</style>
src/services/api/typings.d.ts
@@ -680,6 +680,9 @@
    incomeBankName?: string;
    enterpriseId?: string;
    selfAuditStatus?: EnumParkBountyTradeDetailAuditStatus;
    auditType?: EnumParkBountyTradeDetailAuditType;
    /** 江祐保自主出账关联保单id */
    insurancePolicyId?: string;
  }
  interface CreateTempTokenInput {
@@ -756,6 +759,8 @@
  type EnumAmountUpdateType = 10 | 20;
  type EnumParkBountyTradeDetailAuditStatus = 10 | 20 | 30;
  type EnumParkBountyTradeDetailAuditType = 10 | 100;
  interface ExportInsuranceStaffListInput {
    status?: InsuranceDetailStatusEnum;
@@ -1226,6 +1231,10 @@
    selfAuditFileUrl?: string;
    creationTime?: string;
    bountyAmount?: number;
    /** 审核凭证 */
    financeAuditFileUrl?: string;
    /** 江祐保上传的保单文件 */
    insureBillUrl?: string;
  }
  interface GetParkBountyTradeDetailOutputPageOutput {
src/views/BalanceManage/components/ConsumeRecordView.vue
@@ -2,14 +2,15 @@
  <LoadingLayout :loading="state.loading">
    <AppContainer>
      <ProTableV2 v-bind="proTableProps" :columns="column" :operationBtns="operationBtns">
        <template #operationBtn-checkBtn="{ data, row }">
        <!-- <template #operationBtn-checkBtn="{ data, row }">
          <PreviewBtnV2
            class="pro-table-operation-btn"
            :url="convertApi2FormUrlBySeparator(row.payFileUrl ?? '')"
            preview-btn-text="查看凭证"
          />
        </template>
        </template> -->
      </ProTableV2>
      <ParkBountyTradeDetailFileDialog v-bind="dialogProps" />
    </AppContainer>
  </LoadingLayout>
</template>
@@ -21,10 +22,16 @@
  PreviewBtnV2,
  ProTableV2,
  defineOperationBtns,
  useFormDialog,
  UploadUserFile,
} from '@bole-core/components';
import { OrderInputType } from '@bole-core/core';
import * as parkBountyApplyServices from '@/services/api/ParkBountyApply';
import { convertApi2FormUrlBySeparator } from '@/utils';
import {
  convertApi2FormUrlBySeparator,
  convertApi2FormUrlObjectBySeparator,
  convertApi2FormUrlOnlyOne,
} from '@/utils';
import { FinanceTypeEnumText } from '@/constants';
defineOptions({
@@ -64,6 +71,7 @@
      enCode: 'checkBtn',
      name: '查看凭证',
    },
    emits: { onClick: (role) => openDialog(role) },
  },
]);
@@ -116,6 +124,26 @@
  await getList();
  state.loading = false;
});
function openDialog(row: API.GetParkBountyTradeDetailOutput) {
  handleAdd({
    payAuditFileUrl: convertApi2FormUrlObjectBySeparator(row.payAuditFileUrl),
    financeAuditFileUrl: convertApi2FormUrlObjectBySeparator(row.financeAuditFileUrl),
    selfAuditFileUrl: convertApi2FormUrlObjectBySeparator(row.selfAuditFileUrl),
    payFileUrl: convertApi2FormUrlObjectBySeparator(row.payFileUrl),
    insureBillUrl: convertApi2FormUrlObjectBySeparator(row.insureBillUrl),
  });
}
const { dialogProps, handleAdd } = useFormDialog({
  defaultFormParams: {
    payAuditFileUrl: [] as UploadUserFile[],
    financeAuditFileUrl: [] as UploadUserFile[],
    selfAuditFileUrl: [] as UploadUserFile[],
    payFileUrl: [] as UploadUserFile[],
    insureBillUrl: [] as UploadUserFile[],
  },
});
</script>
<style lang="scss" scoped>
src/views/Home/Home.vue
@@ -735,6 +735,7 @@
function handleParkBountyApplyTradeBySelf(row: API.GetInsurancePageOutput) {
  handleDisbursementAdd({
    remianAmount: row.remianAmount,
    insurancePolicyId: row.id,
  });
}
@@ -745,6 +746,7 @@
} = useFormDialog({
  onConfirm: parkBountyApplyTradeBySelf,
  defaultFormParams: {
    insurancePolicyId: '',
    payRemark: '',
    tradeAmount: 0,
    remianAmount: 0,
@@ -769,6 +771,7 @@
      incomeBankAccount: editDisbursementForm.incomeBankAccount,
      incomeBankCardNumber: editDisbursementForm.incomeBankCardNumber,
      incomeBankName: editDisbursementForm.incomeBankName,
      insurancePolicyId: editDisbursementForm.insurancePolicyId,
    };
    let res = await parkBountyApplyServices.parkBountyApplyTradeBySelf(params);
    if (res) {