优化智能气阀状态中文展示
列表和详情统一显示中文状态,状态弹窗区分当前状态与目标状态并排除原状态,同时保留服务端业务校验,补充专项检查和中文文档。
This commit is contained in:
@@ -18,10 +18,13 @@
|
||||
<a-alert v-if="isOwnershipAction" class="action-alert" type="warning" show-icon>
|
||||
智能气阀只能有一个当前归属。选择新归属后会自动清空其他归属,操作会写入审计记录。
|
||||
</a-alert>
|
||||
<a-alert v-if="isProductLifecycleAction" class="action-alert" type="info" show-icon>
|
||||
当前状态:{{ currentProductStatusLabel }}。请选择一个不同的目标状态,服务端会校验检修和订单占用情况。
|
||||
</a-alert>
|
||||
<a-form :model="form" layout="vertical">
|
||||
<ResourceFieldForm
|
||||
v-model="form"
|
||||
:fields="action?.fields ?? []"
|
||||
:fields="actionFields"
|
||||
:required-keys="requiredKeys"
|
||||
:relation-options="relations.options"
|
||||
:relation-loading="relations.loading"
|
||||
@@ -56,14 +59,39 @@ const emit = defineEmits<{
|
||||
const form = reactive<Record<string, any>>({});
|
||||
const submitting = ref(false);
|
||||
const relations = useResourceRelations();
|
||||
const isProductLifecycleAction = computed(
|
||||
() => props.action?.resource === '/product_info/:identity/lifecycle',
|
||||
);
|
||||
const actionFields = computed(() =>
|
||||
(props.action?.fields ?? []).map((field) =>
|
||||
isProductLifecycleAction.value && field.key === 'product_status'
|
||||
? {
|
||||
...field,
|
||||
options: (field.options ?? []).filter(
|
||||
(option) => String(option.value) !== String(props.record.product_status),
|
||||
),
|
||||
}
|
||||
: field,
|
||||
),
|
||||
);
|
||||
const requiredKeys = computed(() =>
|
||||
(props.action?.fields ?? [])
|
||||
actionFields.value
|
||||
.filter((field) => field.required)
|
||||
.map((field) => field.key),
|
||||
);
|
||||
const isOwnershipAction = computed(
|
||||
() => props.action?.resource === '/product_info/:identity',
|
||||
);
|
||||
const currentProductStatusLabel = computed(() => {
|
||||
const statusField = props.action?.fields?.find(
|
||||
(field) => field.key === 'product_status',
|
||||
);
|
||||
return (
|
||||
statusField?.options?.find(
|
||||
(option) => String(option.value) === String(props.record.product_status),
|
||||
)?.label ?? `未知状态(${String(props.record.product_status ?? '')})`
|
||||
);
|
||||
});
|
||||
const ownershipKeys = [
|
||||
'warehouse_identity',
|
||||
'gas_basic_identity',
|
||||
@@ -95,12 +123,12 @@ watch(
|
||||
() => [props.visible, props.action?.name] as const,
|
||||
async ([visible]) => {
|
||||
if (!visible || !props.action) return;
|
||||
for (const field of props.action.fields ?? []) {
|
||||
for (const field of actionFields.value) {
|
||||
form[field.key] = isOwnershipAction.value
|
||||
? props.record[field.key]
|
||||
: undefined;
|
||||
}
|
||||
await relations.preload(props.action.fields ?? []);
|
||||
await relations.preload(actionFields.value);
|
||||
if (props.action.resource.includes('/menu')) {
|
||||
try {
|
||||
const [menus, assigned] = await Promise.all([
|
||||
@@ -125,14 +153,14 @@ async function submit() {
|
||||
const action = props.action;
|
||||
if (!action) return;
|
||||
if (
|
||||
(action.fields ?? []).some(
|
||||
actionFields.value.some(
|
||||
(field) => field.required && isMissingField(form[field.key]),
|
||||
)
|
||||
) {
|
||||
Message.warning('请填写必填字段');
|
||||
return;
|
||||
}
|
||||
const invalidPassword = (action.fields ?? []).find(
|
||||
const invalidPassword = actionFields.value.find(
|
||||
(field) =>
|
||||
field.type === 'password' &&
|
||||
!isMissingField(form[field.key]) &&
|
||||
@@ -151,7 +179,7 @@ async function submit() {
|
||||
}
|
||||
submitting.value = true;
|
||||
try {
|
||||
const payload = buildResourcePayload(action.fields ?? [], form, 'create');
|
||||
const payload = buildResourcePayload(actionFields.value, form, 'create');
|
||||
if (isOwnershipAction.value) {
|
||||
for (const key of ownershipKeys) payload[key] = String(form[key] ?? '');
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user