云
9 天以前 a241b66efcc41e973290a6722fb7a4d79b833ea1
src/views/crm/contract/index.vue
@@ -5,10 +5,10 @@
import { ref } from 'vue';
import { useRouter } from 'vue-router';
import { Page, useVbenModal } from '../../../packages/effects/common-ui/src';
import { downloadFileFromBlobPart } from '../../../packages/utils/src';
import { Page, useVbenModal } from '@vben/common-ui';
import { downloadFileFromBlobPart } from '@vben/utils';
import { Button, message, Modal, Select, Tabs, Tag } from 'ant-design-vue';
import { Button, message, Modal, Select, Tabs, Tag, Tooltip } from 'ant-design-vue';
import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table';
import {
@@ -20,9 +20,11 @@
  submitContract,
} from '#/api/crm/contract';
import { $t } from '#/locales';
import { automaticApproval } from '#/store/audit-policy';
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 +34,14 @@
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportForm,
  destroyOnClose: true,
});
/** 刷新表格 */
function handleRefresh() {
  gridApi.grid.clearCheckboxRow();
  gridApi.query();
}
@@ -51,6 +59,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 +117,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 +137,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 +241,7 @@
<template>
  <Page auto-content-height>
    <FormModal @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <Grid>
      <template #toolbar-actions>
        <Tabs class="w-full" @change="handleChangeSceneType">
@@ -230,12 +267,36 @@
              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,
            },
          ]"
        />
      </template>
      <template #name="{ row }">
        <Button type="link" @click="handleDetail(row)">
          {{ row.name }}
        </Button>
      </template>
      <template #no="{ row }">
        <Tooltip v-if="row.auditStatus === 50" title="该合同已作废,订单已失效">
          <span class="text-red-500 cursor-pointer" @click="handleDetail(row)">
            {{ row.no }}
          </span>
        </Tooltip>
        <Button v-else type="link" @click="handleDetail(row)">
          {{ row.no }}
        </Button>
      </template>
      <template #customerName="{ row }">
@@ -258,6 +319,8 @@
        <Tag v-if="row.auditStatus === 10" color="warning">审批中</Tag>
        <Tag v-if="row.auditStatus === 20" color="success">审核通过</Tag>
        <Tag v-if="row.auditStatus === 30" color="error">审核不通过</Tag>
        <Tag v-if="row.auditStatus === 40" color="default">已取消</Tag>
        <Tag v-if="row.auditStatus === 50" color="error">已作废</Tag>
      </template>
      <template #orderNo="{ row }">
        <Button v-if="row.orderId" type="link" @click="handleViewOrder(row)">