gaoluyang
6 天以前 cd8b52bdf89a4d1101f72e0ece9f4df22a3d3f7a
src/views/crm/contract/index.vue
@@ -20,9 +20,12 @@
  submitContract,
} from '#/api/crm/contract';
import { $t } from '#/locales';
import { automaticApproval } from '#/store/audit-policy';
import { downloadContractWord } from '#/utils/contract-document';
import { useGridColumns, useGridFormSchema } from './data';
import Form from './modules/form.vue';
import ImportForm from './modules/import-form.vue';
const { push } = useRouter();
const sceneType = ref('1');
@@ -32,8 +35,14 @@
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportForm,
  destroyOnClose: true,
});
/** 刷新表格 */
function handleRefresh() {
  gridApi.grid.clearCheckboxRow();
  gridApi.query();
}
@@ -51,6 +60,29 @@
    ...formValues,
  });
  downloadFileFromBlobPart({ fileName: '合同.xls', source: data });
}
/** 导出勾选的合同 */
async function handleExportSelected() {
  const rows: CrmContractApi.Contract[] =
    gridApi.grid.getCheckboxRecords?.() ?? [];
  const ids = rows.map((row) => row.id!);
  if (ids.length === 0) {
    message.warning('请先勾选要导出的合同');
    return;
  }
  const formValues = await gridApi.formApi.getValues();
  const data = await exportContract({
    sceneType: sceneType.value,
    ids: ids.join(','),
    ...formValues,
  });
  downloadFileFromBlobPart({ fileName: '合同.xls', source: data });
}
/** 导入合同 */
function handleImport() {
  importModalApi.open();
}
/** 创建合同 */
@@ -86,10 +118,15 @@
const submitLoading = ref(false);
async function handleSubmit(row: CrmContractApi.Contract) {
  const res = await getContractApproveProcessList();
  const res = automaticApproval.value ? [] : await getContractApproveProcessList();
  processList.value = res;
  currentRow.value = row;
  selectedProcessKey.value = undefined;
  if (automaticApproval.value) {
    selectedProcessKey.value = 'contract_approve';
    await confirmSubmit();
    return;
  }
  submitModalVisible.value = true;
}
@@ -101,7 +138,7 @@
  submitLoading.value = true;
  try {
    await submitContract(currentRow.value!.id!, selectedProcessKey.value);
    message.success('提交审批成功');
    message.success(automaticApproval.value ? '已提交生效' : '提交审批成功');
    submitModalVisible.value = false;
    handleRefresh();
  } finally {
@@ -205,6 +242,7 @@
<template>
  <Page auto-content-height>
    <FormModal @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <Grid>
      <template #toolbar-actions>
        <Tabs class="w-full" @change="handleChangeSceneType">
@@ -229,6 +267,20 @@
              icon: ACTION_ICON.DOWNLOAD,
              auth: ['crm:contract:export'],
              onClick: handleExport,
            },
            {
              label: '导出选中',
              type: 'primary',
              icon: ACTION_ICON.DOWNLOAD,
              auth: ['crm:contract:export'],
              onClick: handleExportSelected,
            },
            {
              label: '导入',
              type: 'primary',
              icon: ACTION_ICON.UPLOAD,
              auth: ['crm:contract:import'],
              onClick: handleImport,
            },
          ]"
        />
@@ -281,6 +333,13 @@
        <TableAction
          :actions="[
            {
              label: '下载合同',
              type: 'link',
              icon: 'lucide:download',
              auth: ['crm:contract:query'],
              onClick: () => downloadContractWord(row.id, row.no),
            },
            {
              label: $t('common.edit'),
              type: 'link',
              icon: ACTION_ICON.EDIT,