修复新建记录时无法自动填充默认值的问题
This commit is contained in:
parent
8e7df33434
commit
5bdcb3b82f
@ -982,6 +982,47 @@ async function loadMeta() {
|
||||
}
|
||||
}
|
||||
|
||||
// Set default values from field definitions for new records
|
||||
function applyDefaultValues() {
|
||||
const titleField = pageMeta.value?.title_field
|
||||
|
||||
for (const field of metaFields.value) {
|
||||
if (!field.default || field.fieldname === titleField) continue
|
||||
if (field.fieldtype === 'Table' || field.fieldtype === 'Table MultiSelect') continue
|
||||
|
||||
const defaultVal = String(field.default)
|
||||
let value: any = undefined
|
||||
|
||||
if (defaultVal === '__user' || defaultVal.toLowerCase() === 'user') {
|
||||
value = authStore.user?.name || ''
|
||||
} else if (defaultVal === 'user_fullname') {
|
||||
value = authStore.user?.full_name || ''
|
||||
} else if (defaultVal === 'Today') {
|
||||
value = new Date().toISOString().split('T')[0]
|
||||
} else if (defaultVal.toLowerCase() === 'now') {
|
||||
if (field.fieldtype === 'Time') {
|
||||
value = new Date().toTimeString().slice(0, 8)
|
||||
} else {
|
||||
value = new Date().toISOString().slice(0, 19).replace('T', ' ')
|
||||
}
|
||||
} else if (defaultVal.startsWith(':')) {
|
||||
// Dynamic defaults (e.g. ":User") - skip for now, handled by plugins
|
||||
continue
|
||||
} else if (field.fieldtype === 'Check') {
|
||||
value = defaultVal === '1' ? 1 : 0
|
||||
} else if (field.fieldtype === 'Select' && defaultVal) {
|
||||
// Use the default as-is for Select fields
|
||||
value = defaultVal
|
||||
} else {
|
||||
value = field.default
|
||||
}
|
||||
|
||||
if (value !== undefined && record[field.fieldname] === undefined) {
|
||||
record[field.fieldname] = value
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 应用字段配置插件
|
||||
async function applyFieldConfig() {
|
||||
const { triggerFieldConfig } = await import('@/core/plugins/fieldPlugin')
|
||||
@ -1057,6 +1098,8 @@ async function loadDetail() {
|
||||
if (isNew.value) {
|
||||
Object.keys(record).forEach(k => delete record[k])
|
||||
originalRecord.value = {}
|
||||
// Set default values from field definitions
|
||||
applyDefaultValues()
|
||||
// Trigger record init plugins for new records
|
||||
await triggerRecordInit(entity.value, record)
|
||||
// Apply field config plugins for new records (set default values)
|
||||
@ -1427,6 +1470,12 @@ watch(
|
||||
toolbarComponent.value = tb ? markRaw(tb) : null
|
||||
await loadMeta()
|
||||
await loadDetail()
|
||||
// Re-subscribe realtime for the new document
|
||||
if (!isNew.value && String(newVal.id)) {
|
||||
realtime.watchDocument(entity.value, String(newVal.id), {
|
||||
onUpdate: handlePgUpdate
|
||||
})
|
||||
}
|
||||
} else if (idChanged) {
|
||||
// Only id changed: reload detail + re-subscribe realtime
|
||||
await loadDetail()
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user