gaoluyang
20 小时以前 121b7edf3f2e8ad5cb7f8d7b602172b64f6fa4da
src/views/erp/purchase/order/modules/form.vue
@@ -1,19 +1,19 @@
<script lang="ts" setup>
import type { FormType } from '../data';
import type { ErpPurchaseOrderApi, ProcessDefinition } from '#/api/erp/purchase/order';
import type { ErpPurchaseOrderApi } from '#/api/erp/purchase/order';
import { computed, ref } from 'vue';
import { useVbenModal } from '@vben/common-ui';
import { message } from 'ant-design-vue';
import { message, Button } from 'ant-design-vue';
import { useVbenForm } from '#/adapter/form';
import { getAccountSimpleList } from '#/api/erp/finance/account';
import {
  confirmReceipt,
  createPurchaseOrder,
  getPurchaseApproveProcessList,
  getPurchaseOrder,
  updatePurchaseOrder,
} from '#/api/erp/purchase/order';
@@ -21,13 +21,11 @@
import { useFormSchema } from '../data';
import PurchaseOrderItemForm from './item-form.vue';
import ProcessSelectModal from './process-select-modal.vue';
const emit = defineEmits(['success']);
const formData = ref<ErpPurchaseOrderApi.PurchaseOrder>();
const formType = ref<FormType>('create');
const itemFormRef = ref<InstanceType<typeof PurchaseOrderItemForm>>();
const selectedProcessId = ref<string>('');
const getTitle = computed(() => {
  if (formType.value === 'create') {
@@ -57,11 +55,6 @@
  },
});
const [ProcessModal, processModalApi] = useVbenModal({
  connectedComponent: ProcessSelectModal,
  destroyOnClose: true,
});
/** 更新采购订单项 */
function handleUpdateItems(items: ErpPurchaseOrderApi.PurchaseOrderItem[]) {
  formData.value = modalApi.getData<ErpPurchaseOrderApi.PurchaseOrder>();
@@ -85,12 +78,6 @@
  });
}
/** 流程选择成功 */
function handleProcessSelectSuccess(processId: string) {
  selectedProcessId.value = processId;
  submitOrder();
}
/** 提交订单 */
async function submitOrder() {
  const data = (await formApi.getValues()) as ErpPurchaseOrderApi.PurchaseOrder;
@@ -98,18 +85,26 @@
    ...item,
    id: undefined,
  }));
  if (data.fileUrl && Array.isArray(data.fileUrl)) {
    data.fileUrl = data.fileUrl.length > 0 ? data.fileUrl[0] : '';
  }
  if (selectedProcessId.value) {
    data.processDefinitionId = selectedProcessId.value;
  }
  await (formType.value === 'create'
    ? createPurchaseOrder(data)
    : updatePurchaseOrder(data));
  await modalApi.close();
  emit('success');
  message.success($t('ui.actionMessage.operationSuccess'));
}
/** 确认收货 */
async function handleConfirmReceipt() {
  if (!formData.value?.id) return;
  const hideLoading = message.loading({ content: '确认收货中...', duration: 0 });
  try {
    await confirmReceipt(formData.value.id);
    message.success('确认收货成功,已生成到货通知单');
    await modalApi.close();
    emit('success');
  } finally {
    hideLoading();
  }
}
/** 创建或更新采购订单 */
@@ -130,35 +125,15 @@
    }
    modalApi.lock();
    if (formType.value === 'create') {
      try {
        const processes = await getPurchaseApproveProcessList();
        if (processes.length === 1) {
          selectedProcessId.value = processes[0].id;
          await submitOrder();
        } else if (processes.length > 1) {
          processModalApi.setData(processes).open();
        } else {
          message.error('采购审核分类下没有可用的流程模型,请先创建并发布流程');
        }
      } catch (error: any) {
        message.error(error.message || '获取流程列表失败');
      } finally {
        modalApi.unlock();
      }
    } else {
      try {
        await submitOrder();
      } finally {
        modalApi.unlock();
      }
    try {
      await submitOrder();
    } finally {
      modalApi.unlock();
    }
  },
  async onOpenChange(isOpen: boolean) {
    if (!isOpen) {
      formData.value = undefined;
      selectedProcessId.value = '';
      return;
    }
    const data = modalApi.getData<{ formType: FormType; id?: number }>();
@@ -176,6 +151,16 @@
    modalApi.lock();
    try {
      formData.value = await getPurchaseOrder(data.id);
      if (formData.value?.attachmentList?.length) {
        const blobIds = formData.value.attachmentList.map((item) => ({
          uid: String(item.id),
          name: item.name || '',
          url: item.url || '',
          status: 'done',
          id: item.id,
        }));
        formApi.setFieldValue('blobIds', blobIds);
      }
      await formApi.setValues(formData.value);
    } finally {
      modalApi.unlock();
@@ -190,7 +175,6 @@
    class="w-3/4"
    :show-confirm-button="formType !== 'detail'"
  >
    <ProcessModal @success="handleProcessSelectSuccess" />
    <Form class="mx-3">
      <template #items>
        <PurchaseOrderItemForm
@@ -204,5 +188,8 @@
        />
      </template>
    </Form>
    <template v-if="formType === 'detail' && formData?.status === 20 && formData?.inStatus !== 2" #prepend-footer>
      <Button type="primary" @click="handleConfirmReceipt">确认收货</Button>
    </template>
  </Modal>
</template>