修复新建记录时无法自动填充默认值的问题

This commit is contained in:
jingrow 2026-05-14 04:11:43 +08:00
parent 8e7df33434
commit 5bdcb3b82f

View File

@ -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()