|
|
@@ -77,14 +77,15 @@
|
|
|
<el-dialog v-model="dialogVisible" :title="dialogTitle" width="920px" destroy-on-close @closed="resetForm">
|
|
|
<el-form ref="formRef" :model="form" :rules="rules" label-width="132px">
|
|
|
<el-row :gutter="12">
|
|
|
- <el-col :span="12">
|
|
|
+ <!-- 公司/工厂已降级为系统后台归属字段:前台隐藏输入控件,form 值与 payload 仍由 openCreate 补默认 / openEdit 保值维护。 -->
|
|
|
+ <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" />
|
|
|
</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 formFactoryOptions" :key="item.id" :label="item.name || item.code || `${item.id}`" :value="item.id" />
|
|
|
@@ -266,6 +267,12 @@ import {
|
|
|
type S0SrmPurchaseUpsert,
|
|
|
type S0SuppMasterRow,
|
|
|
} from '../api/s0SupplyApi';
|
|
|
+import {
|
|
|
+ applyDefaultOrgScopeForCreate,
|
|
|
+ normalizeOrgScopeForSubmit,
|
|
|
+ preserveOrgScopeForEdit,
|
|
|
+ shouldClearFactoryOnCompanyChange,
|
|
|
+} from '../composables/useS0MfgOrgScope';
|
|
|
|
|
|
const route = useRoute();
|
|
|
const pageTitle = computed(() => (route.meta?.title as string) || '货源清单');
|
|
|
@@ -334,9 +341,8 @@ const form = reactive<S0SrmPurchaseUpsert & { icitemId: number; supplierId: numb
|
|
|
updateUser: '',
|
|
|
});
|
|
|
|
|
|
+// 公司/工厂已降级为系统后台归属字段(新增自动补默认、编辑保留原值),不再作为用户前台必填项。
|
|
|
const rules: FormRules = {
|
|
|
- companyRefId: [{ required: true, message: '请选择公司', trigger: 'change' }],
|
|
|
- factoryRefId: [{ required: true, message: '请选择工厂', trigger: 'change' }],
|
|
|
icitemId: [{ required: true, message: '请选择物料', trigger: 'change' }],
|
|
|
supplierId: [{ required: true, message: '请选择供应商', trigger: 'change' }],
|
|
|
};
|
|
|
@@ -357,7 +363,8 @@ function syncDomainFromFactory() {
|
|
|
}
|
|
|
|
|
|
function onFormCompanyChange() {
|
|
|
- if (!formFactoryOptions.value.some((item) => item.id === form.factoryRefId)) {
|
|
|
+ // 用户主动切换公司时才在存在有效工厂候选且当前工厂不在候选中的情况下清空工厂(保护编辑 legacy 归属)。
|
|
|
+ if (shouldClearFactoryOnCompanyChange(formFactoryOptions.value, form.factoryRefId, true)) {
|
|
|
form.factoryRefId = undefined;
|
|
|
}
|
|
|
}
|
|
|
@@ -516,25 +523,10 @@ function resetForm() {
|
|
|
formRef.value?.clearValidate();
|
|
|
}
|
|
|
|
|
|
-// 私有云单组织场景:新增货源时自动带出 S0 默认公司/工厂(种子 S0OrgSeedData:S0示范公司 S0-C001 / 一工厂 S0-F001)。
|
|
|
-// 字段仍可见可改;未匹配到默认组织时留空、由用户手选,不报错。编辑走 openEdit 回填、不受影响。
|
|
|
-const S0_DEFAULT_COMPANY_CODE = 'S0-C001';
|
|
|
-const S0_DEFAULT_FACTORY_CODE = 'S0-F001';
|
|
|
-
|
|
|
-function applyDefaultOrg() {
|
|
|
- const company = companyOptions.value.find((item) => item.code === S0_DEFAULT_COMPANY_CODE);
|
|
|
- if (!company) return;
|
|
|
- const factory = factoryOptions.value.find((item) => item.code === S0_DEFAULT_FACTORY_CODE && item.pid === company.id);
|
|
|
- Object.assign(form, {
|
|
|
- companyRefId: company.id,
|
|
|
- factoryRefId: factory?.id,
|
|
|
- domainCode: factory?.code ?? '',
|
|
|
- });
|
|
|
-}
|
|
|
-
|
|
|
async function openCreate() {
|
|
|
resetForm();
|
|
|
- applyDefaultOrg();
|
|
|
+ // 新增:自动补默认 SysOrg 归属(公司/工厂/domainCode),用户无需选择公司/工厂。
|
|
|
+ applyDefaultOrgScopeForCreate(form, companyOptions.value, factoryOptions.value);
|
|
|
dialogTitle.value = '新增货源';
|
|
|
dialogVisible.value = true;
|
|
|
}
|
|
|
@@ -572,6 +564,8 @@ async function openEdit(row: S0SrmPurchaseRow) {
|
|
|
createUser: row.createUser ?? '',
|
|
|
updateUser: row.updateUser ?? '',
|
|
|
});
|
|
|
+ // 编辑:保留接口返回的原归属(货源历史 0/0/null 原样保留,不转雪花)。
|
|
|
+ preserveOrgScopeForEdit(form, row);
|
|
|
dialogVisible.value = true;
|
|
|
await remoteMaterials('');
|
|
|
await remoteSuppliers('');
|
|
|
@@ -600,6 +594,8 @@ function normalizeCurrencyType(v: string | number | null | undefined): number |
|
|
|
|
|
|
async function submitForm() {
|
|
|
await formRef.value?.validate();
|
|
|
+ // 提交前统一归属:缺则补默认、有则保留(含货源历史 0/0),不做 legacy↔雪花映射。
|
|
|
+ normalizeOrgScopeForSubmit(form, editingId.value ? 'edit' : 'create', companyOptions.value, factoryOptions.value);
|
|
|
saving.value = true;
|
|
|
try {
|
|
|
const payload: S0SrmPurchaseUpsert = { ...form, currencyType: normalizeCurrencyType(form.currencyType) };
|