| | |
| | | <script lang="ts" setup> |
| | | import { automaticApproval } from '#/store/audit-policy'; |
| | | import type { VxeTableGridOptions } from '#/adapter/vxe-table'; |
| | | import type { ErpPurchaseRequestApi } from '#/api/erp/purchase/request'; |
| | | |
| | | import { ref } from 'vue'; |
| | | import { useRouter } from 'vue-router'; |
| | | |
| | | import { confirm, Page, useVbenModal } from '../../../../packages/effects/common-ui/src'; |
| | | import { downloadFileFromBlobPart, isEmpty } from '../../../../packages/utils/src'; |
| | | import { confirm, Page, useVbenModal } from '@vben/common-ui'; |
| | | import { downloadFileFromBlobPart, isEmpty } from '@vben/utils'; |
| | | |
| | | import { message, Tag } from 'ant-design-vue'; |
| | | |
| | |
| | | getApproveProcessList, |
| | | getPurchaseRequestPage, |
| | | submitPurchaseRequest, |
| | | syncPurchaseRequestStatus, |
| | | } from '#/api/erp/purchase/request'; |
| | | import { $t } from '#/locales'; |
| | | |
| | | import { useGridColumns, useGridFormSchema } from './data'; |
| | | import Form from './modules/form.vue'; |
| | | import ImportForm from './modules/import-form.vue'; |
| | | import OrderForm from './modules/order-form.vue'; |
| | | import ProcessSelectModal from './modules/process-select-modal.vue'; |
| | | |
| | | /** ERP 采购申请列表 */ |
| | | defineOptions({ name: 'ErpPurchaseRequest' }); |
| | | |
| | | const router = useRouter(); |
| | | |
| | | const [FormModal, formModalApi] = useVbenModal({ |
| | | connectedComponent: Form, |
| | | destroyOnClose: true, |
| | | }); |
| | | |
| | | const [ImportModal, importModalApi] = useVbenModal({ |
| | | connectedComponent: ImportForm, |
| | | destroyOnClose: true, |
| | | }); |
| | | |
| | |
| | | async function handleExport() { |
| | | const data = await exportPurchaseRequest(await gridApi.formApi.getValues()); |
| | | downloadFileFromBlobPart({ fileName: '采购申请.xls', source: data }); |
| | | } |
| | | |
| | | /** 导入采购申请 */ |
| | | function handleImport() { |
| | | importModalApi.open(); |
| | | } |
| | | |
| | | /** 新增采购申请 */ |
| | |
| | | /** 提交审批 - 先获取流程列表 */ |
| | | async function handleSubmit(row: ErpPurchaseRequestApi.PurchaseRequest) { |
| | | const hideLoading = message.loading({ |
| | | content: '获取审批流程...', |
| | | content: automaticApproval.value ? '正在提交生效...' : '获取审批流程...', |
| | | duration: 0, |
| | | }); |
| | | try { |
| | | if (automaticApproval.value) { |
| | | await submitPurchaseRequest(row.id!, 'purchase_request_approve'); |
| | | hideLoading(); |
| | | message.success('已提交生效'); |
| | | handleRefresh(); |
| | | return; |
| | | } |
| | | const processList = await getApproveProcessList(row.id!); |
| | | hideLoading(); |
| | | if (!processList || processList.length === 0) { |
| | |
| | | return; |
| | | } |
| | | // 打开流程选择弹窗 |
| | | |
| | | processModalApi.setData({ id: row.id, processList }).open(); |
| | | } catch { |
| | | hideLoading(); |
| | |
| | | formModalApi.setData({ formType: 'detail', id: row.id }).open(); |
| | | } |
| | | |
| | | /** 查看审批详情 */ |
| | | function handleViewProcess(row: ErpPurchaseRequestApi.PurchaseRequest) { |
| | | if (!row.processInstanceId) { |
| | | message.warning('该申请尚未提交审批'); |
| | | return; |
| | | } |
| | | router.push({ name: 'BpmProcessInstanceDetail', query: { id: row.processInstanceId } }); |
| | | } |
| | | |
| | | /** 查看采购订单 */ |
| | | function handleViewOrder(row: ErpPurchaseRequestApi.PurchaseRequest) { |
| | | router.push({ name: 'ErpPurchaseOrder', query: { id: row.orderId } }); |
| | | } |
| | | |
| | | const [Grid, gridApi] = useVbenVxeGrid({ |
| | | formOptions: { |
| | | schema: useGridFormSchema(), |
| | |
| | | proxyConfig: { |
| | | ajax: { |
| | | query: async ({ page }, formValues) => { |
| | | return await getPurchaseRequestPage({ |
| | | const result = await getPurchaseRequestPage({ |
| | | pageNo: page.currentPage, |
| | | pageSize: page.pageSize, |
| | | ...formValues, |
| | | }); |
| | | const processingItems = (result.list || []).filter( |
| | | (item) => item.status === 10 && item.processInstanceId, |
| | | ); |
| | | if (processingItems.length > 0) { |
| | | await syncPurchaseRequestStatus(processingItems); |
| | | } |
| | | return result; |
| | | }, |
| | | }, |
| | | }, |
| | |
| | | <template> |
| | | <Page auto-content-height> |
| | | <FormModal @success="handleRefresh" /> |
| | | <ImportModal @success="handleRefresh" /> |
| | | <OrderFormModal @success="handleRefresh" /> |
| | | <ProcessModal @success="handleRefresh" /> |
| | | <Grid table-title="采购申请列表"> |
| | |
| | | onClick: handleExport, |
| | | }, |
| | | { |
| | | label: '导入', |
| | | type: 'primary', |
| | | icon: ACTION_ICON.UPLOAD, |
| | | auth: ['erp:purchase-request:import'], |
| | | onClick: handleImport, |
| | | }, |
| | | { |
| | | label: '批量删除', |
| | | type: 'primary', |
| | | danger: true, |
| | |
| | | <template #status="{ row }"> |
| | | <Tag v-if="row.status === 0" color="default">未提交</Tag> |
| | | <Tag v-else-if="row.status === 10" color="processing">审批中</Tag> |
| | | <Tag v-else-if="row.status === 20" color="success">审核通过</Tag> |
| | | <Tag v-else-if="row.status === 30" color="error">审核不通过</Tag> |
| | | <Tag v-else-if="row.status === 20" color="success">审批通过</Tag> |
| | | <Tag v-else-if="row.status === 30" color="error">审批不通过</Tag> |
| | | <Tag v-else-if="row.status === 40" color="warning">已取消</Tag> |
| | | </template> |
| | | <template #inStatus="{ row }"> |
| | | <Tag v-if="row.inStatus === 0" color="default">未入库</Tag> |
| | | <Tag v-else-if="row.inStatus === 1" color="warning">部分入库</Tag> |
| | | <Tag v-else-if="row.inStatus === 2" color="success">全部入库</Tag> |
| | | </template> |
| | | <template #actions="{ row }"> |
| | | <TableAction |
| | |
| | | type: 'link', |
| | | icon: ACTION_ICON.EDIT, |
| | | auth: ['erp:purchase-request:update'], |
| | | ifShow: () => row.status === 0, |
| | | ifShow: () => row.status === 0 || Number(row.status) === 30, |
| | | onClick: handleEdit.bind(null, row), |
| | | }, |
| | | { |
| | |
| | | onClick: handleGenerateOrder.bind(null, row), |
| | | }, |
| | | { |
| | | label: '查看审批', |
| | | type: 'link', |
| | | ifShow: () => row.status !== 0, |
| | | onClick: handleViewProcess.bind(null, row), |
| | | }, |
| | | { |
| | | label: '查看订单', |
| | | type: 'link', |
| | | ifShow: () => !!row.orderId, |
| | | onClick: handleViewOrder.bind(null, row), |
| | | }, |
| | | { |
| | | label: $t('common.delete'), |
| | | type: 'link', |
| | | danger: true, |