Просмотр исходного кода

fix: 货源清单 currencyType 空串保存绑定修复,打通新增/编辑保存

货源保存时前端把 currencyType(未选择的空串或 s0_currency 字典的币种码字符串)
提交给后端 long? 数值字段,绑定失败返 400,阻断保存。保存前规范化:纯数值串转数值,
空串/非数值一律 null(字段可空放行),覆盖新增与编辑同一保存出口。

- 前端 payload 规范化 + S0SrmPurchaseUpsert.currencyType 类型放宽为 string|number|null;
- 不隐藏公司/工厂字段,不改公司/工厂默认机制;
- 不做 legacy org 域映射、不做历史数据回填、不改后端 DTO/字典。

chore: bump version Web 2.4.230
YY968XX 2 месяцев назад
Родитель
Сommit
662916e377

+ 1 - 1
Web/package.json

@@ -1,7 +1,7 @@
 {
   "name": "admin.net",
   "type": "module",
-  "version": "2.4.229",
+  "version": "2.4.230",
   "packageManager": "pnpm@10.32.1",
   "lastBuildTime": "2026.03.15",
   "description": "Admin.NET 站在巨人肩膀上的 .NET 通用权限开发框架",

+ 2 - 1
Web/src/views/aidop/s0/api/s0SupplyApi.ts

@@ -160,7 +160,8 @@ export interface S0SrmPurchaseUpsert {
 	supplierName?: string;
 	supplierNumber?: string;
 	orderPrice?: number | null;
-	currencyType?: string;
+	// 币种:后端为 long?(数值可空)。UI 用字符串绑定字典选项,保存前规范化为数值|null,故类型放宽兼容三态。
+	currencyType?: string | number | null;
 	taxrate?: number | null;
 	tariff?: number | null;
 	freight?: number | null;

+ 9 - 1
Web/src/views/aidop/s0/supply/SourcingList.vue

@@ -590,11 +590,19 @@ async function openEdit(row: S0SrmPurchaseRow) {
 	}
 }
 
+// 币种字段后端为 long?(数值可空),而 s0_currency 字典给的是币种码字符串(如 CNY)、未选择时为空串,
+// 二者都无法绑定 long? 会导致保存 400。保存前规范化:纯数值串转数值,空串/非数值一律 null(可空放行)。
+function normalizeCurrencyType(v: string | number | null | undefined): number | null {
+	if (v === '' || v === null || v === undefined) return null;
+	const n = Number(v);
+	return Number.isInteger(n) ? n : null;
+}
+
 async function submitForm() {
 	await formRef.value?.validate();
 	saving.value = true;
 	try {
-		const payload: S0SrmPurchaseUpsert = { ...form };
+		const payload: S0SrmPurchaseUpsert = { ...form, currencyType: normalizeCurrencyType(form.currencyType) };
 		if (editingId.value) {
 			await s0SrmPurchasesApi.update(editingId.value, payload);
 			ElMessage.success('已保存');