mirror of
https://github.com/jxxghp/MoviePilot-Frontend.git
synced 2026-09-06 16:16:42 +08:00
feat:优化FormRender组件,增强v-model和v-show支持,改进属性绑定逻辑;在TheMovieDbView中添加儿童类别
This commit is contained in:
@@ -23,22 +23,44 @@ const parseProps = (rawProps: Record<string, any>, model: Record<string, any>) =
|
|||||||
parsedProps['onUpdate:value'] = (newValue: any) => {
|
parsedProps['onUpdate:value'] = (newValue: any) => {
|
||||||
model[value] = newValue
|
model[value] = newValue
|
||||||
}
|
}
|
||||||
} else if (key === 'model') {
|
} else if (['model', 'v-model'].includes(key)) {
|
||||||
// 处理 v-model
|
// 处理 v-model
|
||||||
parsedProps['modelValue'] = model[value]
|
parsedProps['modelValue'] = model[value]
|
||||||
parsedProps['onUpdate:modelValue'] = (newValue: any) => {
|
parsedProps['onUpdate:modelValue'] = (newValue: any) => {
|
||||||
model[value] = newValue
|
model[value] = newValue
|
||||||
}
|
}
|
||||||
} else if (key.startsWith('model:')) {
|
} else if (['show', 'v-show'].includes(key)) {
|
||||||
|
// 处理 v-show,实现显示隐藏
|
||||||
|
const expression = value.startsWith('{{') && value.endsWith('}}') ? value.slice(2, -2).trim() : value
|
||||||
|
const isVisible = new Function('model', `with(model) { return ${expression} }`)(model)
|
||||||
|
// 动态设置 style.display
|
||||||
|
if (!parsedProps.style) {
|
||||||
|
parsedProps.style = {}
|
||||||
|
}
|
||||||
|
parsedProps.style.display = isVisible ? '' : 'none'
|
||||||
|
} else if (key.startsWith('model:') || key.startsWith('v-model:')) {
|
||||||
// 处理 v-model:<prop>
|
// 处理 v-model:<prop>
|
||||||
const propName = key.replace('model:', '')
|
const propName = key.split(':')[1]
|
||||||
parsedProps[propName] = model[value]
|
parsedProps[propName] = model[value]
|
||||||
parsedProps[`onUpdate:${propName}`] = (newValue: any) => {
|
parsedProps[`onUpdate:${propName}`] = (newValue: any) => {
|
||||||
model[value] = newValue
|
model[value] = newValue
|
||||||
}
|
}
|
||||||
|
} else if (key.startsWith('on')) {
|
||||||
|
// 处理事件监听
|
||||||
|
const eventName = key.replace('on', '').toLowerCase()
|
||||||
|
parsedProps[eventName] = (event: any) => model[value](event)
|
||||||
} else {
|
} else {
|
||||||
// 普通属性直接赋值
|
// 如果是表达式,需要绑定
|
||||||
parsedProps[key] = typeof value === 'string' && value in model ? model[value] : value
|
if (typeof value === 'string' && value.startsWith('{{') && value.endsWith('}}')) {
|
||||||
|
const expression = value.slice(2, -2).trim()
|
||||||
|
parsedProps[key] = new Function('model', `with(model) { return ${expression} }`)(model)
|
||||||
|
} else if (typeof value === 'string' && value in model) {
|
||||||
|
// 如果是数据模型的属性,直接绑定
|
||||||
|
parsedProps[key] = model[value]
|
||||||
|
} else {
|
||||||
|
// 其他情况直接赋值
|
||||||
|
parsedProps[key] = value
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -41,6 +41,7 @@ const tmdbGenreDict = {
|
|||||||
'28': '动作',
|
'28': '动作',
|
||||||
'12': '冒险',
|
'12': '冒险',
|
||||||
'16': '动画',
|
'16': '动画',
|
||||||
|
'10762': '儿童',
|
||||||
'35': '喜剧',
|
'35': '喜剧',
|
||||||
'80': '犯罪',
|
'80': '犯罪',
|
||||||
'99': '纪录片',
|
'99': '纪录片',
|
||||||
|
|||||||
Reference in New Issue
Block a user