refactor(devices): 实现设备字段动态校验与配置同步

1. 新增动态设备校验Schema生成器,支持从数据库读取字段配置生成校验规则
2. 重构设备增改接口,使用动态校验替代硬编码Schema
3. 调整前端设备表单,适配字段配置并锁定核心系统字段
4. 修复前后端默认字段配置不一致问题
5. 新增字段管理页面防护,锁定核心字段的必填/可见配置
This commit is contained in:
zhang1106
2026-06-12 16:01:41 +08:00
parent 85d6b2c633
commit 1b9a5571ae
8 changed files with 621 additions and 22 deletions
+26 -2
View File
@@ -338,6 +338,11 @@ const FIELD_TYPE_OPTIONS = [
{ value: 'textarea', label: '多行文本' },
];
// 强制锁定必填的系统核心字段(不受字段管理配置影响)
const FORCE_LOCKED_REQUIRED_FIELDS = ['name', 'serialNumber', 'position', 'height'];
// 强制锁定可见的系统核心字段(在其他模块强引用,不可关闭可见)
const FORCE_LOCKED_VISIBLE_FIELDS = ['name', 'serialNumber'];
function DeviceFieldManagement() {
const [fields, setFields] = useState([]);
const [loading, setLoading] = useState(true);
@@ -668,8 +673,17 @@ function DeviceFieldManagement() {
label={<span style={formLabelStyle}>必填</span>}
valuePropName="checked"
style={formItemFlexStyle}
tooltip={
editingField && FORCE_LOCKED_REQUIRED_FIELDS.includes(editingField.fieldName)
? '系统核心字段,不可关闭必填'
: undefined
}
>
<Switch />
<Switch
disabled={
editingField && FORCE_LOCKED_REQUIRED_FIELDS.includes(editingField.fieldName)
}
/>
</Form.Item>
<Form.Item
@@ -677,8 +691,18 @@ function DeviceFieldManagement() {
label={<span style={formLabelStyle}>可见</span>}
valuePropName="checked"
style={formItemFlexStyle}
tooltip={
editingField && FORCE_LOCKED_VISIBLE_FIELDS.includes(editingField.fieldName)
? '系统核心字段,在其他模块中被引用,不可关闭可见'
: undefined
}
>
<Switch defaultChecked />
<Switch
defaultChecked
disabled={
editingField && FORCE_LOCKED_VISIBLE_FIELDS.includes(editingField.fieldName)
}
/>
</Form.Item>
</div>