|
|
@@ -1,35 +1,10 @@
|
|
|
<template>
|
|
|
<AidopDemoShell :title="pageTitle" subtitle="S0 / Manufacturing / 工单控制参数">
|
|
|
- <el-form ref="formRef" :model="form" :rules="rules" label-width="220px" class="form" @submit.prevent>
|
|
|
+ <el-form ref="formRef" :model="form" label-width="220px" class="form" @submit.prevent>
|
|
|
<el-row :gutter="16">
|
|
|
<el-col :span="12">
|
|
|
- <el-form-item label="公司" prop="companyRefId">
|
|
|
- <el-select v-model="form.companyRefId" filterable placeholder="请选择公司" style="width: 100%">
|
|
|
- <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-form-item label="工厂" prop="factoryRefId">
|
|
|
- <el-select v-model="form.factoryRefId" filterable placeholder="请选择工厂" style="width: 100%">
|
|
|
- <el-option
|
|
|
- v-for="item in factoriesForCompany(form.companyRefId)"
|
|
|
- :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-form-item label="工厂域" prop="domain">
|
|
|
- <el-input v-model="form.domain" clearable placeholder="例如:S0-F001" />
|
|
|
+ <el-form-item label="工厂域">
|
|
|
+ <el-input v-model="form.domain" clearable placeholder="可留空(历史兼容字段)" />
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
<el-col :span="12">
|
|
|
@@ -85,33 +60,33 @@
|
|
|
|
|
|
<div class="actions">
|
|
|
<el-button type="primary" :loading="saving || loading" @click="save">保存</el-button>
|
|
|
- <el-button :disabled="saving || loading" @click="reload">重新加载</el-button>
|
|
|
+ <el-button :disabled="saving || loading" @click="loadConfig">重新加载</el-button>
|
|
|
</div>
|
|
|
</el-form>
|
|
|
</AidopDemoShell>
|
|
|
</template>
|
|
|
|
|
|
<script setup lang="ts" name="aidopS0MfgWorkOrderControl">
|
|
|
-import { computed, onMounted, reactive, ref, watch } from 'vue';
|
|
|
+import { computed, onMounted, reactive, ref } from 'vue';
|
|
|
import { useRoute } from 'vue-router';
|
|
|
-import { ElMessage, type FormInstance, type FormRules } from 'element-plus';
|
|
|
+import { ElMessage, type FormInstance } from 'element-plus';
|
|
|
import AidopDemoShell from '../../components/AidopDemoShell.vue';
|
|
|
-import { useS0MfgOrgScope } from '../composables/useS0MfgOrgScope';
|
|
|
import { s0MfgWorkOrdControlApi, type S0WorkOrdControlUpsert } from '../api/s0ManufacturingApi';
|
|
|
|
|
|
+// 业务模型(S0-WORKORD-CONTROL-TENANT-UX-FIX):每个租户一套工单控制参数。
|
|
|
+// 隔离边界只有 tenant_id;工厂域是可留空的历史兼容字段,不参与加载与可见性。
|
|
|
+// 原「公司 / 工厂」两个 required 下拉既不进 payload 也不落库,且本租户无 Type=501 工厂
|
|
|
+// 导致校验必然失败、页面永远存不下,已整体移除。
|
|
|
+
|
|
|
const route = useRoute();
|
|
|
const pageTitle = computed(() => (route.meta?.title as string) || '工单控制参数');
|
|
|
|
|
|
-const { companyOptions, loadOrgs, factoriesForCompany } = useS0MfgOrgScope();
|
|
|
-
|
|
|
const loading = ref(false);
|
|
|
const saving = ref(false);
|
|
|
const formRef = ref<FormInstance>();
|
|
|
|
|
|
const form = reactive({
|
|
|
id: undefined as number | undefined,
|
|
|
- companyRefId: undefined,
|
|
|
- factoryRefId: undefined,
|
|
|
domain: '',
|
|
|
enteringPer: undefined as number | undefined,
|
|
|
paintingPer: undefined as number | undefined,
|
|
|
@@ -125,26 +100,13 @@ const form = reactive({
|
|
|
isConfirm: false,
|
|
|
});
|
|
|
|
|
|
-watch(
|
|
|
- () => form.companyRefId,
|
|
|
- () => {
|
|
|
- if (!factoriesForCompany(form.companyRefId).some((x) => x.id === form.factoryRefId)) form.factoryRefId = undefined;
|
|
|
- },
|
|
|
-);
|
|
|
-
|
|
|
-const rules: FormRules = {
|
|
|
- companyRefId: [{ required: true, message: '请选择公司', trigger: 'change' }],
|
|
|
- factoryRefId: [{ required: true, message: '请选择工厂', trigger: 'change' }],
|
|
|
- domain: [{ required: true, message: '请填写工厂域', trigger: 'blur' }],
|
|
|
-};
|
|
|
-
|
|
|
-async function reload() {
|
|
|
- const domain = form.domain.trim();
|
|
|
- if (!domain) return;
|
|
|
+/** 当前租户的配置;不依赖用户手输工厂域。 */
|
|
|
+async function loadConfig() {
|
|
|
loading.value = true;
|
|
|
try {
|
|
|
- const data = await s0MfgWorkOrdControlApi.getOne({ domain });
|
|
|
+ const data = await s0MfgWorkOrdControlApi.getOne();
|
|
|
form.id = data?.id;
|
|
|
+ form.domain = data?.domain ?? '';
|
|
|
form.enteringPer = (data?.enteringPer ?? undefined) as any;
|
|
|
form.paintingPer = (data?.paintingPer ?? undefined) as any;
|
|
|
form.issuedInterval = (data?.issuedInterval ?? undefined) as any;
|
|
|
@@ -166,7 +128,8 @@ async function save() {
|
|
|
try {
|
|
|
const payload: S0WorkOrdControlUpsert = {
|
|
|
id: form.id ?? null,
|
|
|
- domain: form.domain.trim(),
|
|
|
+ // 工厂域可留空;不再伪造 companyRefId / factoryRefId(后端 DTO 无此字段、不落库)。
|
|
|
+ domain: form.domain.trim() || null,
|
|
|
enteringPer: form.enteringPer ?? null,
|
|
|
paintingPer: form.paintingPer ?? null,
|
|
|
issuedInterval: form.issuedInterval ?? null,
|
|
|
@@ -181,13 +144,15 @@ async function save() {
|
|
|
const saved = await s0MfgWorkOrdControlApi.upsert(payload);
|
|
|
form.id = saved.id;
|
|
|
ElMessage.success('已保存');
|
|
|
+ // 保存 → 立即回读当前租户配置,保证「保存后刷新仍可见」。
|
|
|
+ await loadConfig();
|
|
|
} finally {
|
|
|
saving.value = false;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
onMounted(async () => {
|
|
|
- await loadOrgs();
|
|
|
+ await loadConfig();
|
|
|
});
|
|
|
</script>
|
|
|
|