ParamBuilder component support hidden input

This commit is contained in:
GeekMaster
2025-09-15 21:05:34 +08:00
parent 46c3d65bea
commit 5979451ea6
2 changed files with 124 additions and 110 deletions

View File

@@ -39,121 +39,119 @@
</div> </div>
</el-option> </el-option>
</el-select> </el-select>
<template v-for="param in selectedModel.params">
<div v-for="param in selectedModel.params" :key="param.name" class="w-full"> <div class="w-full" :key="param.name" v-if="param.type !== 'hidden'">
<div class="w-full flex flex-col !items-start space-y-2" v-if="param.type === 'switch'"> <div class="w-full flex flex-col !items-start space-y-2" v-if="param.type === 'switch'">
<div class="w-full flex justify-between"> <div class="w-full flex justify-between">
<label class="label font-bold">{{ param.label }}</label> <label class="label font-bold">{{ param.label }}</label>
<el-switch v-model="modelValue[param.name]" size="large" /> <el-switch v-model="modelValue[param.name]" size="large" />
</div>
<p v-if="param.info" class="text-xs text-gray-500 mb-1">{{ param.info }}</p>
</div> </div>
<p v-if="param.info" class="text-xs text-gray-500 mb-1">{{ param.info }}</p> <div class="w-full flex flex-col !items-start space-y-2" v-else>
</div> <label class="label font-bold">
<div {{ param.label }}
class="w-full flex flex-col !items-start space-y-2" <span v-if="param.required" class="text-red-500 ml-1">*</span>
v-else-if="param.type !== 'hidden'" </label>
> <p v-if="param.info" class="text-xs text-gray-500 mb-1">{{ param.info }}</p>
<label class="label font-bold"> <div class="flex w-full">
{{ param.label }} <el-input
<span v-if="param.required" class="text-red-500 ml-1">*</span> v-if="param.type === 'text'"
</label> v-model="modelValue[param.name]"
<p v-if="param.info" class="text-xs text-gray-500 mb-1">{{ param.info }}</p> :placeholder="param.placeholder"
<div class="flex w-full"> />
<el-input <el-input-number
v-if="param.type === 'text'" v-if="param.type === 'number'"
v-model="modelValue[param.name]" v-model="modelValue[param.name]"
:placeholder="param.placeholder" class="!w-full"
/> :placeholder="param.placeholder"
<el-input-number :min="param.min"
v-if="param.type === 'number'" :max="param.max"
v-model="modelValue[param.name]" :step="param.step"
class="!w-full" />
:placeholder="param.placeholder" <el-slider
:min="param.min" v-if="param.type === 'slider'"
:max="param.max" v-model="modelValue[param.name]"
:step="param.step" :min="param.min"
/> :max="param.max"
<el-slider :step="param.step"
v-if="param.type === 'slider'" />
v-model="modelValue[param.name]" <el-date-picker
:min="param.min" v-if="param.type === 'date'"
:max="param.max" v-model="modelValue[param.name]"
:step="param.step" :placeholder="param.placeholder"
/> />
<el-date-picker <el-time-picker
v-if="param.type === 'date'" v-if="param.type === 'time'"
v-model="modelValue[param.name]" v-model="modelValue[param.name]"
:placeholder="param.placeholder" :placeholder="param.placeholder"
/> />
<el-time-picker <el-select
v-if="param.type === 'time'" v-if="param.type === 'select'"
v-model="modelValue[param.name]" v-model="modelValue[param.name]"
:placeholder="param.placeholder" :placeholder="param.placeholder"
/> :popper-class="param.popperClass"
<el-select filterable
v-if="param.type === 'select'"
v-model="modelValue[param.name]"
:placeholder="param.placeholder"
:popper-class="param.popperClass"
filterable
>
<template #prefix v-if="param.prefix">
<i class="iconfont !text-lg" :class="param.prefix"></i>
</template>
<el-option
v-for="option in param.options"
:key="option.value"
:label="option.label"
:value="option.value"
> >
<div class="flex justify-start" v-if="option.image"> <template #prefix v-if="param.prefix">
<span class="flex py-3 mr-2"> <i class="iconfont !text-lg" :class="param.prefix"></i>
<img </template>
:src="option.image" <el-option
class="rounded-lg" v-for="option in param.options"
:style="{ width: param.imgSize, height: param.imgSize }" :key="option.value"
/></span> :label="option.label"
<div class="flex !items-start flex-col py-2 space-y-1"> :value="option.value"
<span class="label text-sm">{{ option.label }}</span> >
<span <div class="flex justify-start" v-if="option.image">
class="text-xs text-gray-500 break-words line-clamp-1 max-w-[200px]" <span class="flex py-3 mr-2">
:title="option.value" <img
>{{ option.value }}</span :src="option.image"
> class="rounded-lg"
:style="{ width: param.imgSize, height: param.imgSize }"
/></span>
<div class="flex !items-start flex-col py-2 space-y-1">
<span class="label text-sm">{{ option.label }}</span>
<span
class="text-xs text-gray-500 break-words line-clamp-1 max-w-[200px]"
:title="option.value"
>{{ option.value }}</span
>
</div>
</div> </div>
</div> <div class="flex justify-start items-center h-full" v-else>
<div class="flex justify-start items-center h-full" v-else> <span class="label text-sm">{{ option.label }}</span>
<span class="label text-sm">{{ option.label }}</span> </div>
</div> </el-option>
</el-option> </el-select>
</el-select> <el-input
<el-input type="textarea"
type="textarea" v-if="param.type === 'textarea'"
v-if="param.type === 'textarea'" v-model="modelValue[param.name]"
v-model="modelValue[param.name]" :autosize="param.autosize"
:autosize="param.autosize" :maxlength="param.maxlength"
:maxlength="param.maxlength" :show-word-limit="param.showWordLimit"
:show-word-limit="param.showWordLimit" :placeholder="param.placeholder"
:placeholder="param.placeholder" />
/> <ImageUpload
<ImageUpload v-if="param.type === 'image'"
v-if="param.type === 'image'" v-model="modelValue[param.name]"
v-model="modelValue[param.name]" :max-count="param.maxCount"
:max-count="param.maxCount" :multiple="param.multiple"
:multiple="param.multiple" :max-size="param.maxSize"
:max-size="param.maxSize" :accept="param.accept"
:accept="param.accept" />
/> <FileUpload
<FileUpload v-if="param.type === 'file'"
v-if="param.type === 'file'" v-model="modelValue[param.name]"
v-model="modelValue[param.name]" :max-count="param.maxCount"
:max-count="param.maxCount" :multiple="param.multiple"
:multiple="param.multiple" :max-size="param.maxSize"
:max-size="param.maxSize" :accept="param.accept"
:accept="param.accept" />
/> </div>
</div> </div>
</div> </div>
</div> </template>
</div> </div>
</div> </div>
</template> </template>

View File

@@ -197,6 +197,22 @@
> >
视频 视频
</el-button> </el-button>
<el-button
:type="store.taskFilter === 'virtual_human' ? 'primary' : 'default'"
@click="store.switchTaskFilter('virtual_human')"
size="small"
>
数字人
</el-button>
<el-button
:type="store.taskFilter === 'action_transfer' ? 'primary' : 'default'"
@click="store.switchTaskFilter('action_transfer')"
size="small"
>
动作迁移
</el-button>
</el-button-group> </el-button-group>
</div> </div>
</div> </div>