- Add shared sortable-list.css, SORTABLE_LIST_ATTRS and AksSortHandle - Migrate schema sortable, selected order, inline/modal repeater, sorter, floating buttons, footer tabbar and ticket prereply lists to the shared design - Split AksField.vue (1885 -> 969 lines) into focused components/helpers - Remove dead AksArrayTable/AksRepeaterField and move-up/down helpers - Replace hardcoded colors and --n-* vars with --aksrt-color-* tokens Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
19 lines
1001 B
JavaScript
19 lines
1001 B
JavaScript
/**
|
||
* schema 字段的 dependsOn 规则求值。sourceValue 是规则引用的数据对象
|
||
* (fieldset 值 / repeater 行 / 弹窗草稿)。
|
||
*/
|
||
export function matchDependency(rule, sourceValue) {
|
||
if (!rule) return true
|
||
const source = sourceValue && typeof sourceValue === 'object' ? sourceValue : {}
|
||
if (rule.all) return rule.all.every(item => matchDependency(item, source))
|
||
if (rule.any) return rule.any.some(item => matchDependency(item, source))
|
||
const value = source[rule.key]
|
||
if (rule.operator === 'truthy') return !!value
|
||
if (rule.operator === 'falsy') return !value
|
||
if (rule.operator === 'not_empty') return Array.isArray(value) ? value.length > 0 : value !== '' && value != null
|
||
if (rule.operator === 'empty') return Array.isArray(value) ? value.length === 0 : value === '' || value == null
|
||
if (rule.operator === 'eq') return value === rule.value
|
||
if (rule.operator === 'neq') return value !== rule.value
|
||
return rule.value === undefined || value === rule.value
|
||
}
|