feat:【antd】【erp 系统】sale/order 部分代码优化(form 基本完善)

This commit is contained in:
YunaiV
2025-10-03 20:38:44 +08:00
parent 95295d5b93
commit 83cffeafc3
4 changed files with 44 additions and 25 deletions

View File

@@ -17,6 +17,7 @@ import { $t } from '#/locales';
import { useFormSchema } from '../data';
import ItemForm from './item-form.vue';
import {getAccountSimpleList} from '#/api/erp/finance/account';
const emit = defineEmits(['success']);
const formData = ref<ErpSaleOrderApi.SaleOrder>();
@@ -38,7 +39,6 @@ const [Form, formApi] = useVbenForm({
class: 'w-full',
},
labelWidth: 120,
// disabled: !['create', 'edit'].includes(formType.value), // TODO @芋艿:这里晚点处理下;
},
wrapperClass: 'grid-cols-3',
layout: 'vertical',
@@ -116,7 +116,14 @@ const [Modal, modalApi] = useVbenModal({
// 加载数据
const data = modalApi.getData<{ id?: number; type: string }>();
formType.value = data.type;
formApi.setDisabled(formType.value === 'detail');
if (!data || !data.id) {
// 新增时,默认选中账户
const accountList = await getAccountSimpleList();
const defaultAccount = accountList.find((item) => item.defaultStatus);
if (defaultAccount) {
await formApi.setValues({ accountId: defaultAccount.id });
}
return;
}
modalApi.lock();
@@ -124,7 +131,6 @@ const [Modal, modalApi] = useVbenModal({
formData.value = await getSaleOrder(data.id);
// 设置到 values
await formApi.setValues(formData.value);
// TODO @AI默认账户缺少
} finally {
modalApi.unlock();
}
@@ -134,19 +140,14 @@ const [Modal, modalApi] = useVbenModal({
<template>
<Modal
v-bind="$attrs"
:title="getTitle"
class="w-3/4"
:closable="true"
:mask-closable="true"
:show-confirm-button="formType !== 'detail'"
>
<Form class="mx-3">
<template #items="slotProps">
<template #items>
<ItemForm
v-bind="slotProps"
ref="itemFormRef"
class="w-full"
:items="formData?.items ?? []"
:disabled="formType === 'detail'"
:discount-percent="formData?.discountPercent ?? 0"

View File

@@ -2,9 +2,13 @@
import type { ErpProductApi } from '#/api/erp/product/product';
import type { ErpSaleOrderApi } from '#/api/erp/sale/order';
import { computed, onMounted, ref, watch } from 'vue';
import { computed, nextTick, onMounted, ref, watch } from 'vue';
import { erpPriceMultiply } from '@vben/utils';
import {
erpCountInputFormatter,
erpPriceInputFormatter,
erpPriceMultiply,
} from '@vben/utils';
import { Input, InputNumber, Select } from 'ant-design-vue';
@@ -84,6 +88,7 @@ watch(
}
items.forEach((item) => initRow(item));
tableData.value = [...items];
await nextTick(); // 特殊:保证 gridApi 已经初始化
await gridApi.grid.reloadData(tableData.value);
},
{
@@ -274,10 +279,14 @@ onMounted(async () => {
<div class="text-muted-foreground flex justify-between text-sm">
<span class="text-foreground font-medium">合计</span>
<div class="flex space-x-4">
<span>数量{{ summaries.count }}</span>
<span>金额{{ summaries.totalProductPrice }}</span>
<span>税额{{ summaries.taxPrice }}</span>
<span>税额合计{{ summaries.totalPrice }}</span>
<span>数量{{ erpCountInputFormatter(summaries.count) }}</span>
<span>
金额{{ erpPriceInputFormatter(summaries.totalProductPrice) }}
</span>
<span>税额{{ erpPriceInputFormatter(summaries.taxPrice) }}</span>
<span>
税额合计{{ erpPriceInputFormatter(summaries.totalPrice) }}
</span>
</div>
</div>
</div>