فهرست منبع

style(s0): hide unused legacy columns and auto-record routing audit fields

FUNC-S0-002 标准工艺路线新增/编辑弹窗,按业务确认继续做纯前端调整。

1) 暂不启用的字段不再展示
   自定义字段一/二/三(Ufld1/Ufld4/Ufld7)与批注索引(CommentIndex)从表单移除。
   ⚠️ 仅移除输入控件,这 4 个字段仍保留在 form / rowToForm / buildPayload 中原样透传:
   后端 ApplyUpsert 是逐字段直赋,编辑时若不回传会把 DTO 的 null 写回,
   静默清空历史数据(实测 Ufld1 非空 38801/38806 行)。「不显示」≠「不提交」。

2) 创建人/更新人改为系统自动记录
   两个输入框置为 readonly,取值来自当前登录账号(userInfos.account,
   与后端 ClaimConst.Account 同源):
   新增 → 创建人 + 更新人均写当前账号;
   编辑 → 仅更新人写当前账号,创建人保留库中原值,历史行的 ManuSync 不被覆盖。
   落库仍走原有 DTO 字段,后端 / DTO / DB 均未改动。

运行态回归(租户 838257186181189 / UATAdminA):
   编辑历史行 RecID 94590 → Ufld1/Ufld4/Ufld7/CommentIndex 原值全部保留,
   CreateUser 仍为 ManuSync,UpdateUser 自动记为 UATAdminA;
   新增行 CreateUser = UpdateUser = UATAdminA,公司/工厂默认组织未丢失。

chore: bump version Web 2.4.364
YY968XX 2 روز پیش
والد
کامیت
60f6c8b62f
2فایلهای تغییر یافته به همراه43 افزوده شده و 26 حذف شده
  1. 1 1
      Web/package.json
  2. 42 25
      Web/src/views/aidop/s0/manufacturing/RoutingList.vue

+ 1 - 1
Web/package.json

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

+ 42 - 25
Web/src/views/aidop/s0/manufacturing/RoutingList.vue

@@ -203,32 +203,32 @@
 						<el-col :xs="24" :sm="12"><el-form-item label="确认"><el-switch v-model="form.isConfirm" /></el-form-item></el-col>
 					</el-row>
 					<!--
-						自定义字段一/二/三 = 旧系统 Ufld1/Ufld4/Ufld7。实体注释即为「自定义字段」,
-						DTO 无注释;实测数据两种互斥用法(6456 行为活动编码,另 3 万余行为工序类中文词),
-						业务语义未确认,故按中性名称展示、原样透传,不臆造业务含义。
+						旧系统自定义列 Ufld1 / Ufld4 / Ufld7 与 CommentIndex 暂不启用,**不在前端展示**。
+						但它们仍保留在 form / rowToForm / buildPayload 中原样透传 ——
+						编辑时若不回传,后端 ApplyUpsert 会把 DTO 的 null 直接写回,
+						导致这 4 列历史数据被静默清空(实测 Ufld1 非空 38801/38806 行)。
+						「不显示」≠「不提交」,这里刻意只去掉输入控件。
 					-->
-					<div class="form-section__hint">以下为旧系统自定义列,业务语义尚未确认,页面仅按原值透传,不参与任何计算。</div>
-					<el-row :gutter="24">
-						<el-col :xs="24" :sm="12"><el-form-item label="自定义字段一"><el-input v-model="form.ufld1" /></el-form-item></el-col>
-						<el-col :xs="24" :sm="12"><el-form-item label="自定义字段二"><el-input v-model="form.ufld4" /></el-form-item></el-col>
-						<el-col :xs="24" :sm="12"><el-form-item label="自定义字段三"><el-input v-model="form.ufld7" /></el-form-item></el-col>
-						<el-col :xs="24" :sm="12">
-							<el-form-item label="批注索引">
-								<el-input-number v-model="form.commentIndex" :controls="false" style="width: 100%" />
-							</el-form-item>
-						</el-col>
-					</el-row>
 				</div>
 
 				<div class="form-section">
 					<div class="form-section__title">系统信息</div>
 					<!--
-						创建人/更新人当前由 DTO 直接写入(控制器 ApplyUpsert 原样赋值),
-						**不是**系统自动维护字段,因此保持可编辑、不改写入行为,仅降到末尾分组。
+						创建人/更新人改为系统自动记录(取当前登录账号),表单只读不可输入:
+						新增 → 两者均写当前账号;编辑 → 仅更新人写当前账号,创建人保留原值
+						(历史行如 ManuSync 不被覆盖)。落库仍走原 DTO 字段,后端未改。
 					-->
 					<el-row :gutter="24">
-						<el-col :xs="24" :sm="12"><el-form-item label="创建人"><el-input v-model="form.createUser" /></el-form-item></el-col>
-						<el-col :xs="24" :sm="12"><el-form-item label="更新人"><el-input v-model="form.updateUser" /></el-form-item></el-col>
+						<el-col :xs="24" :sm="12">
+							<el-form-item label="创建人">
+								<el-input v-model="form.createUser" readonly placeholder="由系统自动记录" />
+							</el-form-item>
+						</el-col>
+						<el-col :xs="24" :sm="12">
+							<el-form-item label="更新人">
+								<el-input v-model="form.updateUser" readonly placeholder="由系统自动记录" />
+							</el-form-item>
+						</el-col>
 					</el-row>
 				</div>
 			</el-form>
@@ -262,6 +262,7 @@ import { computed, onMounted, reactive, ref } from 'vue';
 import { useRoute } from 'vue-router';
 import { ElMessage, ElMessageBox, type FormInstance, type FormRules } from 'element-plus';
 import AidopDemoShell from '../../components/AidopDemoShell.vue';
+import { useUserInfo } from '/@/stores/userInfo';
 import { applyDefaultOrgScopeForCreate, useS0MfgOrgScope } from '../composables/useS0MfgOrgScope';
 import { s0MfgRoutingOpDetailsApi, type S0MfgRoutingOpDetailRow, type S0MfgRoutingOpDetailUpsert } from '../api/s0ManufacturingApi';
 
@@ -409,11 +410,29 @@ function rowToForm(row: S0MfgRoutingOpDetailRow) {
 	});
 }
 
+/**
+ * 当前登录账号名,用于自动记录创建人/更新人。
+ * 取 userInfos.account——与后端 ClaimConst.Account 同源,也与既有数据里的账号形态一致;
+ * 取不到时回落真实姓名,仍取不到则留空(不编造)。
+ */
+function currentAccountName(): string {
+	try {
+		const u = useUserInfo().userInfos as Record<string, any> | undefined;
+		return String(u?.account ?? u?.realName ?? '').trim();
+	} catch {
+		return '';
+	}
+}
+
 function openCreate() {
 	resetForm();
 	// 新增:补当前租户可用的默认公司/工厂归属,用户无需选择。
 	// 只补空值、不覆盖,且只作用于新增;编辑走 rowToForm 的原值回填,不受影响。
 	applyDefaultOrgScopeForCreate(form, companyOptions.value, factoryOptions.value);
+	// 创建人/更新人由系统自动记录,仅作只读展示(提交时以 submitForm 里的取值为准)
+	const who = currentAccountName();
+	form.createUser = who;
+	form.updateUser = who;
 	dialogTitle.value = '新增工艺路线明细';
 	dialogVisible.value = true;
 }
@@ -468,6 +487,11 @@ async function submitForm() {
 	try {
 		const valid = await formRef.value?.validate().catch(() => false);
 		if (!valid) return;
+		// 审计字段以「提交那一刻的登录账号」为准:
+		// 新增写创建人 + 更新人;编辑只写更新人,创建人保留库中原值(如历史行的 ManuSync)。
+		const who = currentAccountName();
+		if (!editingId.value) form.createUser = who;
+		form.updateUser = who;
 		const payload = buildPayload();
 		if (editingId.value) {
 			await s0MfgRoutingOpDetailsApi.update(editingId.value, payload);
@@ -549,13 +573,6 @@ onMounted(async () => {
 	font-weight: 600;
 	color: var(--el-text-color-primary);
 }
-.form-section__hint {
-	/* 上边距略大:让提示明确归属于其下方的自定义字段,而不是上一行的开关 */
-	margin: 6px 0 14px;
-	font-size: 12px;
-	line-height: 1.6;
-	color: var(--el-text-color-secondary);
-}
 :deep(.el-form-item) {
 	margin-bottom: 18px;
 }