mirror of
https://gitee.com/myxzgzs/boyue-ui-admin-vue3
synced 2025-08-09 17:02:43 +08:00
125 lines
3.6 KiB
TypeScript
125 lines
3.6 KiB
TypeScript
import { generateUUID } from '@/utils'
|
||
import * as DictDataApi from '@/api/system/dict/dict.type'
|
||
import { localeProps, makeRequiredRule } from '@/components/FormCreate/src/utils'
|
||
|
||
export const useDictSelectRule = () => {
|
||
const label = '字典选择器'
|
||
const name = 'DictSelect'
|
||
const dictOptions = ref<{ label: string; value: string }[]>([]) // 字典类型下拉数据
|
||
onMounted(async () => {
|
||
const data = await DictDataApi.getSimpleDictTypeList()
|
||
if (!data || data.length === 0) {
|
||
return
|
||
}
|
||
dictOptions.value =
|
||
data?.map((item: DictDataApi.DictTypeVO) => ({
|
||
label: item.name,
|
||
value: item.type
|
||
})) ?? []
|
||
})
|
||
return {
|
||
icon: 'icon-select',
|
||
label,
|
||
name,
|
||
rule() {
|
||
return {
|
||
type: name,
|
||
field: generateUUID(),
|
||
title: label,
|
||
info: '',
|
||
$required: false
|
||
}
|
||
},
|
||
props(_, { t }) {
|
||
return localeProps(t, name + '.props', [
|
||
makeRequiredRule(),
|
||
{
|
||
type: 'select',
|
||
field: 'dictType',
|
||
title: '字典类型',
|
||
value: '',
|
||
options: dictOptions.value
|
||
},
|
||
{
|
||
type: 'select',
|
||
field: 'valueType',
|
||
title: '字典值类型',
|
||
value: 'str',
|
||
options: [
|
||
{ label: '数字', value: 'int' },
|
||
{ label: '字符串', value: 'str' },
|
||
{ label: '布尔值', value: 'bool' }
|
||
]
|
||
},
|
||
{ type: 'switch', field: 'multiple', title: '是否多选' },
|
||
{
|
||
type: 'switch',
|
||
field: 'disabled',
|
||
title: '是否禁用'
|
||
},
|
||
{ type: 'switch', field: 'clearable', title: '是否可以清空选项' },
|
||
{
|
||
type: 'switch',
|
||
field: 'collapseTags',
|
||
title: '多选时是否将选中值按文字的形式展示'
|
||
},
|
||
{
|
||
type: 'inputNumber',
|
||
field: 'multipleLimit',
|
||
title: '多选时用户最多可以选择的项目数,为 0 则不限制',
|
||
props: { min: 0 }
|
||
},
|
||
{
|
||
type: 'input',
|
||
field: 'autocomplete',
|
||
title: 'autocomplete 属性'
|
||
},
|
||
{ type: 'input', field: 'placeholder', title: '占位符' },
|
||
{
|
||
type: 'switch',
|
||
field: 'filterable',
|
||
title: '是否可搜索'
|
||
},
|
||
{ type: 'switch', field: 'allowCreate', title: '是否允许用户创建新条目' },
|
||
{
|
||
type: 'input',
|
||
field: 'noMatchText',
|
||
title: '搜索条件无匹配时显示的文字'
|
||
},
|
||
{
|
||
type: 'switch',
|
||
field: 'remote',
|
||
title: '其中的选项是否从服务器远程加载'
|
||
},
|
||
{
|
||
type: 'Struct',
|
||
field: 'remoteMethod',
|
||
title: '自定义远程搜索方法'
|
||
},
|
||
{ type: 'input', field: 'noDataText', title: '选项为空时显示的文字' },
|
||
{
|
||
type: 'switch',
|
||
field: 'reserveKeyword',
|
||
title: '多选且可搜索时,是否在选中一个选项后保留当前的搜索关键词'
|
||
},
|
||
{
|
||
type: 'switch',
|
||
field: 'defaultFirstOption',
|
||
title: '在输入框按下回车,选择第一个匹配项'
|
||
},
|
||
{
|
||
type: 'switch',
|
||
field: 'popperAppendToBody',
|
||
title: '是否将弹出框插入至 body 元素',
|
||
value: true
|
||
},
|
||
{
|
||
type: 'switch',
|
||
field: 'automaticDropdown',
|
||
title: '对于不可搜索的 Select,是否在输入框获得焦点后自动弹出选项菜单'
|
||
}
|
||
])
|
||
}
|
||
}
|
||
}
|