From 3b430f42c1412422aa32412463533385bf4dd44e Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期三, 01 七月 2026 09:32:08 +0800
Subject: [PATCH] 银川 1.联调产品维护页面 2.添加采购申请页面
---
src/views/erp/purchase/order/modules/form.vue | 90 +++++++++++++++++++++++++++++++--------------
1 files changed, 62 insertions(+), 28 deletions(-)
diff --git a/src/views/erp/purchase/order/modules/form.vue b/src/views/erp/purchase/order/modules/form.vue
index 58a42fe..37981be 100644
--- a/src/views/erp/purchase/order/modules/form.vue
+++ b/src/views/erp/purchase/order/modules/form.vue
@@ -1,7 +1,7 @@
<script lang="ts" setup>
import type { FormType } from '../data';
-import type { ErpPurchaseOrderApi } from '#/api/erp/purchase/order';
+import type { ErpPurchaseOrderApi, ProcessDefinition } from '#/api/erp/purchase/order';
import { computed, ref } from 'vue';
@@ -13,6 +13,7 @@
import { getAccountSimpleList } from '#/api/erp/finance/account';
import {
createPurchaseOrder,
+ getPurchaseApproveProcessList,
getPurchaseOrder,
updatePurchaseOrder,
} from '#/api/erp/purchase/order';
@@ -20,11 +21,13 @@
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'); // 琛ㄥ崟绫诲瀷锛�'create' | 'edit' | 'detail'
+const formType = ref<FormType>('create');
const itemFormRef = ref<InstanceType<typeof PurchaseOrderItemForm>>();
+const selectedProcessId = ref<string>('');
const getTitle = computed(() => {
if (formType.value === 'create') {
@@ -48,11 +51,15 @@
schema: useFormSchema(formType.value),
showDefaultActions: false,
handleValuesChange: (values, changedFields) => {
- // 鐩殑锛氬悓姝ュ埌 item-form 缁勪欢锛岃Е鍙戞暣浣撶殑浠锋牸璁$畻
if (formData.value && changedFields.includes('discountPercent')) {
formData.value.discountPercent = values.discountPercent;
}
},
+});
+
+const [ProcessModal, processModalApi] = useVbenModal({
+ connectedComponent: ProcessSelectModal,
+ destroyOnClose: true,
});
/** 鏇存柊閲囪喘璁㈠崟椤� */
@@ -78,6 +85,33 @@
});
}
+/** 娴佺▼閫夋嫨鎴愬姛 */
+function handleProcessSelectSuccess(processId: string) {
+ selectedProcessId.value = processId;
+ submitOrder();
+}
+
+/** 鎻愪氦璁㈠崟 */
+async function submitOrder() {
+ const data = (await formApi.getValues()) as ErpPurchaseOrderApi.PurchaseOrder;
+ data.items = formData.value?.items?.map((item) => ({
+ ...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'));
+}
+
/** 鍒涘缓鎴栨洿鏂伴噰璐鍗� */
const [Modal, modalApi] = useVbenModal({
async onConfirm() {
@@ -96,42 +130,42 @@
}
modalApi.lock();
- // 鎻愪氦琛ㄥ崟
- const data =
- (await formApi.getValues()) as ErpPurchaseOrderApi.PurchaseOrder;
- data.items = formData.value?.items?.map((item) => ({
- ...item,
- // 瑙e喅鏂板閲囪喘璁㈠崟鎶ラ敊
- id: undefined,
- }));
- // 灏嗘枃浠舵暟缁勮浆鎹负瀛楃涓�
- if (data.fileUrl && Array.isArray(data.fileUrl)) {
- data.fileUrl = data.fileUrl.length > 0 ? data.fileUrl[0] : '';
- }
- try {
- await (formType.value === 'create'
- ? createPurchaseOrder(data)
- : updatePurchaseOrder(data));
- // 鍏抽棴骞舵彁绀�
- await modalApi.close();
- emit('success');
- message.success($t('ui.actionMessage.operationSuccess'));
- } finally {
- modalApi.unlock();
+
+ 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();
+ }
}
},
async onOpenChange(isOpen: boolean) {
if (!isOpen) {
formData.value = undefined;
+ selectedProcessId.value = '';
return;
}
- // 鍔犺浇鏁版嵁
const data = modalApi.getData<{ formType: FormType; id?: number }>();
formType.value = data.formType;
formApi.setDisabled(formType.value === 'detail');
formApi.updateSchema(useFormSchema(formType.value));
if (!data || !data.id) {
- // 鏂板鏃讹紝榛樿閫変腑璐︽埛
const accountList = await getAccountSimpleList();
const defaultAccount = accountList.find((item) => item.defaultStatus);
if (defaultAccount) {
@@ -142,7 +176,6 @@
modalApi.lock();
try {
formData.value = await getPurchaseOrder(data.id);
- // 璁剧疆鍒� values
await formApi.setValues(formData.value);
} finally {
modalApi.unlock();
@@ -157,6 +190,7 @@
class="w-3/4"
:show-confirm-button="formType !== 'detail'"
>
+ <ProcessModal @success="handleProcessSelectSuccess" />
<Form class="mx-3">
<template #items>
<PurchaseOrderItemForm
--
Gitblit v1.9.3