20260913231607

This commit is contained in:
oneao committed 2026-09-13 23:16:08 +08:00
1 parent f3ad727f1c
commit c31329d387
179 files changed
+10846 -2684

No files matched your search

@@ -21,18 +21,8 @@
* ctx = { isNew, record }
*/
import { computed, ref, watch } from 'vue'
import {
Button,
Checkbox,
DatePicker,
Form,
FormGroup,
FormItem,
Input,
Message,
Modal,
Select,
} from '@/components/ui'
import { Button, Form, FormGroup, FormItem, Message, Modal } from '@/components/ui'
import FmsField from '@/components/fms-field/FmsField.vue'
import { loadDataApi, loadDataBySqlApi, nextIdApi, saveObjectApi } from '@/services/api'
import { diffRow } from '@/utils/dataChanges'
import { identifierRe, isEmptyValue } from '@/components/fms-module-common/queryUtils'
@@ -437,6 +427,25 @@ function handleClose() {
/* ================= 控件渲染 ================= */
const selectOptionsOf = (field) => parseOptions(field).options
/* 控件类型:禁用/只读态统一降级为 Input(checkbox 除外)只展示原值,与旧行为一致;
否则按字段 b_type 交给 FmsField 多态渲染 */
function controlType(row) {
if (isFieldDisabled(row)) return row.field.b_type === 'checkbox' ? 'checkbox' : 'input'
return row.field.b_type
}
/* 喂给 FmsField 内部控件的额外属性:select 的选项、文本类控件的占位(日期/复选框无占位) */
function controlPropsOf(row) {
if (isFieldDisabled(row)) return {}
const type = row.field.b_type
const extra = {}
if (type === 'select') extra.options = selectOptionsOf(row.field)
if (row.b_placeholder && type !== 'checkbox' && type !== 'date' && type !== 'datetime') {
extra.placeholder = row.b_placeholder
}
return extra
}
</script>
<template>
@@ -476,55 +485,12 @@ const selectOptionsOf = (field) => parseOptions(field).options
:required="Number(row.b_required) === 1"
:span="spanOf(row)"
>
<template v-if="isFieldDisabled(row)">
<!-- 禁用/只读:展示值但不允许编辑 -->
<Checkbox
v-if="row.field.b_type === 'checkbox'"
:model-value="Number(formData[row.field.b_field]) === 1"
disabled
/>
<Input v-else :model-value="formData[row.field.b_field] ?? ''" disabled readonly />
</template>
<Input
v-else-if="row.field.b_type === 'input'"
<FmsField
v-model="formData[row.field.b_field]"
:placeholder="row.b_placeholder"
/>
<Input
v-else-if="row.field.b_type === 'textarea'"
v-model="formData[row.field.b_field]"
type="textarea"
:placeholder="row.b_placeholder"
/>
<Select
v-else-if="row.field.b_type === 'select'"
v-model="formData[row.field.b_field]"
:options="selectOptionsOf(row.field)"
:placeholder="row.b_placeholder"
/>
<Checkbox
v-else-if="row.field.b_type === 'checkbox'"
:model-value="Number(formData[row.field.b_field]) === 1"
@update:model-value="(v) => (formData[row.field.b_field] = v ? 1 : 0)"
/>
<DatePicker
v-else-if="row.field.b_type === 'date'"
v-model="formData[row.field.b_field]"
value-format="YYYY-MM-DD"
/>
<DatePicker
v-else-if="row.field.b_type === 'datetime'"
v-model="formData[row.field.b_field]"
format="YYYY-MM-DD HH:mm"
value-format="YYYY-MM-DD HH:mm:ss"
/>
<Input
v-else
v-model="formData[row.field.b_field]"
:type="
row.field.b_type === 'number' || row.field.b_type === 'money' ? 'number' : 'default'
"
:placeholder="row.b_placeholder"
:type="controlType(row)"
:disabled="isFieldDisabled(row)"
:readonly="isFieldDisabled(row)"
:control-props="controlPropsOf(row)"
/>
</FormItem>
</FormGroup>