form-create: 封装通用选择器 hook

This commit is contained in:
puhui999 2024-05-01 20:42:53 +08:00
parent 1434d7ddad
commit c77526e8c5
2 changed files with 52 additions and 59 deletions

View File

@ -37,6 +37,11 @@ export const useCurrencySelect = (option: CurrencySelectProps) => {
type: String, type: String,
default: 'select' default: 'select'
} }
// // 是否多选
// multiple: {
// type: Boolean,
// default: false
// }
}, },
setup(props) { setup(props) {
const attrs = useAttrs() const attrs = useAttrs()
@ -79,15 +84,14 @@ export const useCurrencySelect = (option: CurrencySelectProps) => {
onMounted(async () => { onMounted(async () => {
await getOptions() await getOptions()
}) })
// TODO puhui999: 单下拉多选的时候页面会卡住报错,下次解决
const buildSelect = () => { const buildSelect = () => {
return ( return (
<> <el-select class="w-1/1" {...attrs}>
<el-select class="w-1/1" {...attrs}> {options.value.map((item, index) => (
{options.value.map((item, index) => ( <el-option key={index} label={item.label} value={item.value} />
<el-option key={index} label={item.label} value={item.value} /> ))}
))} </el-select>
</el-select>
</>
) )
} }
const buildCheckbox = () => { const buildCheckbox = () => {
@ -98,13 +102,11 @@ export const useCurrencySelect = (option: CurrencySelectProps) => {
] ]
} }
return ( return (
<> <el-checkbox-group class="w-1/1" {...attrs}>
<el-checkbox-group class="w-1/1" {...attrs}> {options.value.map((item, index) => (
{options.value.map((item, index) => ( <el-checkbox key={index} label={item.label} value={item.value} />
<el-checkbox key={index} label={item.label} value={item.value} /> ))}
))} </el-checkbox-group>
</el-checkbox-group>
</>
) )
} }
const buildRadio = () => { const buildRadio = () => {
@ -115,15 +117,13 @@ export const useCurrencySelect = (option: CurrencySelectProps) => {
] ]
} }
return ( return (
<> <el-radio-group class="w-1/1" {...attrs}>
<el-radio-group class="w-1/1" {...attrs}> {options.value.map((item, index) => (
{options.value.map((item, index) => ( <el-radio key={index} value={item.value}>
<el-radio key={index} value={item.value}> {item.label}
{item.label} </el-radio>
</el-radio> ))}
))} </el-radio-group>
</el-radio-group>
</>
) )
} }
return () => ( return () => (

View File

@ -25,6 +25,30 @@ export const useFormCreateDesigner = async (designer: Ref) => {
const uploadFileRule = useUploadFileRule() const uploadFileRule = useUploadFileRule()
const uploadImgRule = useUploadImgRule() const uploadImgRule = useUploadImgRule()
const uploadImgsRule = useUploadImgsRule() const uploadImgsRule = useUploadImgsRule()
/**
*
*/
const buildFormComponents = () => {
// 移除自带的上传组件规则,使用 uploadFileRule、uploadImgRule、uploadImgsRule 替代
designer.value?.removeMenuItem('upload')
// 移除自带的富文本组件规则,使用 editorRule 替代
designer.value?.removeMenuItem('fc-editor')
const components = [editorRule, uploadFileRule, uploadImgRule, uploadImgsRule]
components.forEach((component) => {
// 插入组件规则
designer.value?.addComponent(component)
// 插入拖拽按钮到 `main` 分类下
designer.value?.appendMenuItem('main', {
icon: component.icon,
name: component.name,
label: component.label
})
})
}
const userSelectRule = useSelectRule({ name: 'UserSelect', label: '用户选择器' })
const deptSelectRule = useSelectRule({ name: 'DeptSelect', label: '部门选择器' })
const dictSelectRule = useDictSelectRule() const dictSelectRule = useDictSelectRule()
const restfulSelectRule = useSelectRule({ const restfulSelectRule = useSelectRule({
name: 'RestfulSelect', name: 'RestfulSelect',
@ -56,46 +80,15 @@ export const useFormCreateDesigner = async (designer: Ref) => {
} }
] ]
}) })
/**
*
*/
const buildFormComponents = () => {
// 移除自带的上传组件规则,使用 uploadFileRule、uploadImgRule、uploadImgsRule 替代
designer.value?.removeMenuItem('upload')
// 移除自带的富文本组件规则,使用 editorRule 替代
designer.value?.removeMenuItem('fc-editor')
// 移除自带的下拉选择器组件,使用 currencySelectRule 替代
designer.value?.removeMenuItem('select')
designer.value?.removeMenuItem('radio')
designer.value?.removeMenuItem('checkbox')
const components = [
editorRule,
uploadFileRule,
uploadImgRule,
uploadImgsRule,
dictSelectRule,
restfulSelectRule
]
components.forEach((component) => {
// 插入组件规则
designer.value?.addComponent(component)
// 插入拖拽按钮到 `main` 分类下
designer.value?.appendMenuItem('main', {
icon: component.icon,
name: component.name,
label: component.label
})
})
}
const userSelectRule = useSelectRule({ name: 'UserSelect', label: '用户选择器' })
const deptSelectRule = useSelectRule({ name: 'DeptSelect', label: '部门选择器' })
/** /**
* *
*/ */
const buildSystemMenu = () => { const buildSystemMenu = () => {
const components = [userSelectRule, deptSelectRule] // 移除自带的下拉选择器组件,使用 currencySelectRule 替代
designer.value?.removeMenuItem('select')
designer.value?.removeMenuItem('radio')
designer.value?.removeMenuItem('checkbox')
const components = [userSelectRule, deptSelectRule, dictSelectRule, restfulSelectRule]
const menu: Menu = { const menu: Menu = {
name: 'system', name: 'system',
title: '系统字段', title: '系统字段',