|
|
@@ -65,7 +65,8 @@
|
|
|
<el-dialog v-model="dialogVisible" :title="dialogTitle" width="720px" destroy-on-close @closed="resetForm">
|
|
|
<el-form ref="formRef" :model="form" :rules="rules" label-width="120px">
|
|
|
<el-row :gutter="12">
|
|
|
- <el-col :span="12">
|
|
|
+ <!-- 公司/工厂/工厂域编码已降级为系统后台归属字段:前台隐藏输入控件,form 值与 payload 仍由 openCreate 补默认 / openEdit 保值 / submit 兜底维护。 -->
|
|
|
+ <el-col v-if="false" :span="12">
|
|
|
<el-form-item label="公司" prop="companyRefId">
|
|
|
<el-select v-model="form.companyRefId" filterable style="width: 100%" @change="onFormCompanyChange">
|
|
|
<el-option v-for="item in companyOptions" :key="item.id" :label="item.name || item.code || `${item.id}`" :value="item.id" />
|
|
|
@@ -78,7 +79,7 @@
|
|
|
</el-select>
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
- <el-col :span="12">
|
|
|
+ <el-col v-if="false" :span="12">
|
|
|
<el-form-item label="工厂" prop="factoryRefId">
|
|
|
<el-select v-model="form.factoryRefId" filterable style="width: 100%" @change="syncDomainFromFactory">
|
|
|
<el-option v-for="item in formFactories" :key="item.id" :label="item.name || item.code || `${item.id}`" :value="item.id" />
|
|
|
@@ -91,7 +92,7 @@
|
|
|
</el-select>
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
- <el-col :span="24">
|
|
|
+ <el-col v-if="false" :span="24">
|
|
|
<el-form-item label="工厂域编码" prop="domain">
|
|
|
<el-input v-model="form.domain" placeholder="通常与所选工厂编码一致" clearable />
|
|
|
</el-form-item>
|
|
|
@@ -180,6 +181,7 @@ import { ElMessage, ElMessageBox, type FormInstance, type FormRules } from 'elem
|
|
|
import AidopDemoShell from '../../components/AidopDemoShell.vue';
|
|
|
import { useS0MfgOrgScope } from '../composables/useS0MfgOrgScope';
|
|
|
import { s0MfgProductionLinesApi, type S0LineMasterRow, type S0LineMasterUpsert } from '../api/s0ManufacturingApi';
|
|
|
+import { applyDefaultOrgScopeForCreate, getDefaultS0OrgScope, normalizeOrgScopeForSubmit, preserveOrgScopeForEdit, shouldClearFactoryOnCompanyChange } from '../composables/useS0MfgOrgScope';
|
|
|
import { loadDictOptions, type OptionItem } from '../api/s0SalesApi';
|
|
|
import DictDataMaintainPanel from '../sales/components/DictDataMaintainPanel.vue';
|
|
|
|
|
|
@@ -261,16 +263,17 @@ watch(
|
|
|
() => form.companyRefId,
|
|
|
() => {
|
|
|
if (isRehydrating.value) return;
|
|
|
- if (!formFactories.value.some((x) => x.id === form.factoryRefId)) {
|
|
|
+ // 公司/工厂为隐藏的后台归属字段,此变化均为程序化载入(openCreate 补默认 / openEdit 回填),
|
|
|
+ // 非用户主动切换,故 userInitiated=false,永不清空已载入的工厂值(保护编辑 legacy 归属)。
|
|
|
+ if (shouldClearFactoryOnCompanyChange(formFactories.value, form.factoryRefId, false)) {
|
|
|
form.factoryRefId = undefined;
|
|
|
form.domain = '';
|
|
|
}
|
|
|
},
|
|
|
);
|
|
|
|
|
|
+// 公司/工厂已降级为系统后台归属字段(新增自动补默认、编辑保留原值),不再作为用户前台必填项。
|
|
|
const rules: FormRules = {
|
|
|
- companyRefId: [{ required: true, message: '请选择公司', trigger: 'change' }],
|
|
|
- factoryRefId: [{ required: true, message: '请选择工厂', trigger: 'change' }],
|
|
|
domain: [{ required: true, message: '请填写工厂域编码', trigger: 'blur' }],
|
|
|
line: [{ required: true, message: '请填写生产线编码', trigger: 'blur' }],
|
|
|
};
|
|
|
@@ -343,6 +346,10 @@ function resetForm() {
|
|
|
|
|
|
function openCreate() {
|
|
|
resetForm();
|
|
|
+ // 新增:自动补默认 SysOrg 归属 + 工厂域编码,用户无需选择公司/工厂。
|
|
|
+ applyDefaultOrgScopeForCreate(form, companyOptions.value, factoryOptions.value);
|
|
|
+ const __scope = getDefaultS0OrgScope(companyOptions.value, factoryOptions.value);
|
|
|
+ form.domain = __scope.domainCode ?? form.domain ?? '';
|
|
|
dialogTitle.value = '新增生产线';
|
|
|
dialogVisible.value = true;
|
|
|
}
|
|
|
@@ -371,6 +378,8 @@ async function openEdit(row: S0LineMasterRow) {
|
|
|
midLocation: detail.midLocation || '',
|
|
|
isActive: (detail as any).isActive !== false,
|
|
|
});
|
|
|
+ // 编辑:保留接口返回的原归属(legacy 不转雪花)。
|
|
|
+ preserveOrgScopeForEdit(form, detail);
|
|
|
await nextTick();
|
|
|
} finally {
|
|
|
isRehydrating.value = false;
|
|
|
@@ -381,13 +390,17 @@ async function openEdit(row: S0LineMasterRow) {
|
|
|
async function submitForm() {
|
|
|
await formRef.value?.validate();
|
|
|
|
|
|
- const companyHit = companyOptions.value.some((o) => o.id === String(form.companyRefId));
|
|
|
- const factoryHit = factoryOptions.value.some((o) => o.id === String(form.factoryRefId));
|
|
|
- if (!companyHit || !factoryHit) {
|
|
|
- ElMessage.warning('当前记录未关联有效公司/工厂,请先选择公司和工厂后再保存。');
|
|
|
- return;
|
|
|
+ // 提交前统一归属:缺则补默认、有则保留(含 legacy),不做 legacy↔雪花映射。
|
|
|
+ normalizeOrgScopeForSubmit(form, editingId.value ? 'edit' : 'create', companyOptions.value, factoryOptions.value);
|
|
|
+ // 工厂域编码兜底:仍为空时取默认工厂 code,避免隐藏控件后 domain 缺失。
|
|
|
+ if (!form.domain) {
|
|
|
+ const __s = getDefaultS0OrgScope(companyOptions.value, factoryOptions.value);
|
|
|
+ form.domain = __s.domainCode ?? form.domain;
|
|
|
}
|
|
|
|
|
|
+ // 公司/工厂已降级为系统后台归属字段:新增由 normalize 补默认、编辑保留原记录归属(含 legacy 1000/8010,
|
|
|
+ // 后端 Range(1,∞) 接受),不再以"归属必须命中雪花下拉"为提交前置,避免编辑 legacy 记录被误拦截。
|
|
|
+
|
|
|
const payload: S0LineMasterUpsert = {
|
|
|
companyRefId: form.companyRefId,
|
|
|
factoryRefId: form.factoryRefId,
|