Skip to content

Commit c1c21d8

Browse files
author
puhui999
committed
form-create: 封装通用选择器 hook
1 parent 51e6887 commit c1c21d8

File tree

8 files changed

+66
-85
lines changed

8 files changed

+66
-85
lines changed

src/components/FormCreate/src/config/index.ts

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,14 @@ import { useUploadFileRule } from './useUploadFileRule'
22
import { useUploadImgRule } from './useUploadImgRule'
33
import { useUploadImgsRule } from './useUploadImgsRule'
44
import { useDictSelectRule } from './useDictSelectRule'
5-
import { useCurrencySelectRule } from './useCurrencySelectRule'
65
import { useEditorRule } from './useEditorRule'
7-
import { useUserSelectRule } from './useUserSelectRule'
8-
import { useDeptSelectRule } from './useDeptSelectRule'
6+
import { useSelectRule } from './useSelectRule'
97

108
export {
119
useUploadFileRule,
1210
useUploadImgRule,
1311
useUploadImgsRule,
1412
useDictSelectRule,
15-
useCurrencySelectRule,
1613
useEditorRule,
17-
useUserSelectRule,
18-
useDeptSelectRule
14+
useSelectRule
1915
}

src/components/FormCreate/src/config/useCurrencySelectRule.ts

Lines changed: 0 additions & 37 deletions
This file was deleted.

src/components/FormCreate/src/config/useDictSelectRule.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@ import * as DictDataApi from '@/api/system/dict/dict.type'
33
import { localeProps, makeRequiredRule } from '@/components/FormCreate/src/utils'
44
import selectRule from '@/components/FormCreate/src/config/selectRule'
55

6+
/**
7+
* 字典选择器规则,如果规则使用到动态数据则需要单独配置不能使用 useSelectRule
8+
*/
69
export const useDictSelectRule = () => {
710
const label = '字典选择器'
811
const name = 'DictSelect'

src/components/FormCreate/src/config/useDeptSelectRule.ts renamed to src/components/FormCreate/src/config/useSelectRule.ts

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,15 @@
11
import { generateUUID } from '@/utils'
22
import { localeProps, makeRequiredRule } from '@/components/FormCreate/src/utils'
33
import selectRule from '@/components/FormCreate/src/config/selectRule'
4-
import { DragRule } from '@/components/FormCreate/src/type'
4+
import { SelectRuleOption } from '@/components/FormCreate/src/type'
55

6-
export const useDeptSelectRule = (): DragRule => {
7-
const label = '部门选择器'
8-
const name = 'DeptSelect'
6+
/**
7+
* 通用选择器规则 hook
8+
* @param option 规则配置
9+
*/
10+
export const useSelectRule = (option: SelectRuleOption) => {
11+
const label = option.label
12+
const name = option.name
913
return {
1014
icon: 'icon-select',
1115
label,
@@ -20,7 +24,10 @@ export const useDeptSelectRule = (): DragRule => {
2024
}
2125
},
2226
props(_, { t }) {
23-
return localeProps(t, name + '.props', [makeRequiredRule(), ...selectRule])
27+
if (!option.props) {
28+
option.props = []
29+
}
30+
return localeProps(t, name + '.props', [makeRequiredRule(), ...option.props, ...selectRule])
2431
}
2532
}
2633
}

src/components/FormCreate/src/config/useUserSelectRule.ts

Lines changed: 0 additions & 26 deletions
This file was deleted.

src/components/FormCreate/src/type/index.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,3 +39,10 @@ export interface CurrencySelectProps {
3939
valueField?: string // 字典值类型
4040
restful?: string // api 接口
4141
}
42+
43+
// 选择组件规则配置类型
44+
export interface SelectRuleOption {
45+
label: string // label 名称
46+
name: string // 组件名称
47+
props?: Rule[] // 组件规则
48+
}

src/components/FormCreate/src/useFormCreateDesigner.ts

Lines changed: 38 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,10 @@
11
import {
2-
useCurrencySelectRule,
3-
useDeptSelectRule,
42
useDictSelectRule,
53
useEditorRule,
4+
useSelectRule,
65
useUploadFileRule,
76
useUploadImgRule,
8-
useUploadImgsRule,
9-
useUserSelectRule
7+
useUploadImgsRule
108
} from './config'
119
import { Ref } from 'vue'
1210
import { Menu } from '@/components/FormCreate/src/type'
@@ -18,16 +16,46 @@ import { Menu } from '@/components/FormCreate/src/type'
1816
* - 单图上传
1917
* - 多图上传
2018
* - 字典选择器
21-
* - 系统用户选择器
19+
* - 用户选择器
20+
* - 部门选择器
2221
* - 富文本
2322
*/
24-
export const useFormCreateDesigner = (designer: Ref) => {
23+
export const useFormCreateDesigner = async (designer: Ref) => {
2524
const editorRule = useEditorRule()
2625
const uploadFileRule = useUploadFileRule()
2726
const uploadImgRule = useUploadImgRule()
2827
const uploadImgsRule = useUploadImgsRule()
2928
const dictSelectRule = useDictSelectRule()
30-
const currencySelectRule = useCurrencySelectRule()
29+
const restfulSelectRule = useSelectRule({
30+
name: 'RestfulSelect',
31+
label: '接口选择器',
32+
props: [
33+
{
34+
type: 'input',
35+
field: 'restful',
36+
title: 'restful api 接口',
37+
props: {
38+
placeholder: '/system/user/simple-list'
39+
}
40+
},
41+
{
42+
type: 'input',
43+
field: 'labelField',
44+
title: 'label 属性',
45+
props: {
46+
placeholder: 'nickname'
47+
}
48+
},
49+
{
50+
type: 'input',
51+
field: 'valueField',
52+
title: 'value 属性',
53+
props: {
54+
placeholder: 'id'
55+
}
56+
}
57+
]
58+
})
3159

3260
/**
3361
* 构建表单组件
@@ -45,7 +73,7 @@ export const useFormCreateDesigner = (designer: Ref) => {
4573
uploadImgRule,
4674
uploadImgsRule,
4775
dictSelectRule,
48-
currencySelectRule
76+
restfulSelectRule
4977
]
5078
components.forEach((component) => {
5179
// 插入组件规则
@@ -59,8 +87,8 @@ export const useFormCreateDesigner = (designer: Ref) => {
5987
})
6088
}
6189

62-
const userSelectRule = useUserSelectRule()
63-
const deptSelectRule = useDeptSelectRule()
90+
const userSelectRule = useSelectRule({ name: 'UserSelect', label: '用户选择器' })
91+
const deptSelectRule = useSelectRule({ name: 'DeptSelect', label: '部门选择器' })
6492
/**
6593
* 构建系统字段菜单
6694
*/

src/plugins/formCreate/index.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,9 @@ const DeptSelect = useCurrencySelect({
3535
valueField: 'id',
3636
restful: '/system/dept/simple-list'
3737
})
38-
38+
const RestfulSelect = useCurrencySelect({
39+
name: 'RestfulSelect'
40+
})
3941
const components = [
4042
ElAside,
4143
ElPopconfirm,
@@ -55,6 +57,7 @@ const components = [
5557
DictSelect,
5658
UserSelect,
5759
DeptSelect,
60+
RestfulSelect,
5861
Editor
5962
]
6063

0 commit comments

Comments
 (0)