|
2 | 2 | <div class="question-config">
|
3 | 3 | <div class="question-config-wrapper">
|
4 | 4 | <div class="question-config-main">
|
5 |
| - <div v-for="form of setterList" :key="form.key" class="config-item"> |
| 5 | + <div v-for="form of formConfigList" :key="form.key" class="config-item"> |
6 | 6 | <div class="config-title">
|
7 | 7 | <span>
|
8 | 8 | {{ form.title }}
|
9 | 9 | </span>
|
10 | 10 | </div>
|
11 |
| - <el-form |
| 11 | + <SetterField |
| 12 | + :key="form.key" |
12 | 13 | class="question-config-form"
|
13 | 14 | label-position="left"
|
14 | 15 | label-width="200px"
|
15 |
| - @submit.prevent |
16 |
| - > |
17 |
| - <template v-for="(item, index) in form.formList"> |
18 |
| - <FormItem |
19 |
| - v-if="item.type && !item.hidden && Boolean(registerTypes[item.type])" |
20 |
| - :key="index" |
21 |
| - :form-config="item" |
22 |
| - :style="item.style" |
23 |
| - > |
24 |
| - <Component |
25 |
| - v-if="Boolean(registerTypes[item.type])" |
26 |
| - :is="components[item.type]" |
27 |
| - :module-config="form.dataConfig" |
28 |
| - :form-config="item" |
29 |
| - @form-change="handleFormChange" |
30 |
| - /> |
31 |
| - </FormItem> |
32 |
| - </template> |
33 |
| - </el-form> |
| 16 | + :form-config-list="form.formList" |
| 17 | + :module-config="baseConf" |
| 18 | + :custom-components="{ |
| 19 | + WhiteList, |
| 20 | + TeamMemberList |
| 21 | + }" |
| 22 | + @form-change="handleFormChange" |
| 23 | + ></SetterField> |
34 | 24 | </div>
|
35 | 25 | </div>
|
36 | 26 | </div>
|
37 | 27 | </div>
|
38 | 28 | </template>
|
39 | 29 | <script setup lang="ts">
|
40 |
| -import { computed, ref, onMounted, shallowRef } from 'vue' |
41 |
| -import { |
42 |
| - cloneDeep as _cloneDeep, |
43 |
| - isArray as _isArray, |
44 |
| - get as _get, |
45 |
| - isFunction as _isFunction |
46 |
| -} from 'lodash-es' |
| 30 | +import { ref, toRef } from 'vue' |
47 | 31 | import { useEditStore } from '@/management/stores/edit'
|
48 | 32 |
|
49 | 33 | import baseConfig from '@/management/pages/edit/setterConfig/baseConfig'
|
50 | 34 | import baseFormConfig from '@/management/pages/edit/setterConfig/baseFormConfig'
|
51 |
| -import FormItem from '@/materials/setters/widgets/FormItem.vue' |
52 |
| -import setterLoader from '@/materials/setters/setterLoader' |
| 35 | +import SetterField from '@/management/pages/edit/components/SetterField.vue' |
53 | 36 |
|
54 | 37 | import WhiteList from './components/WhiteList.vue'
|
55 | 38 | import TeamMemberList from './components/TeamMemberList.vue'
|
56 | 39 |
|
57 | 40 | const editStore = useEditStore()
|
58 | 41 | const { schema, changeSchema } = editStore
|
| 42 | +const baseConf = toRef(schema, 'baseConf') |
59 | 43 |
|
60 |
| -const formConfigList = ref<Array<any>>([]) |
61 |
| -const components = shallowRef<any>({ |
62 |
| - ['WhiteList']: WhiteList, |
63 |
| - ['TeamMemberList']: TeamMemberList |
64 |
| -}) |
65 |
| -// 登记默认注册的高级设置器组件 |
66 |
| -const registerTypes = ref<any>({ |
67 |
| - WhiteList: 'WhiteList', |
68 |
| - TeamMemberList: 'TeamMemberList' |
69 |
| -}) |
| 44 | +const baseConfigWithFormList = baseConfig.map((item) => ({ |
| 45 | + ...item, |
| 46 | + formList: item.formList.map((key) => (baseFormConfig as any)[key]).filter((config) => !!config) |
| 47 | +})) |
| 48 | +const formConfigList = ref<Array<any>>(baseConfigWithFormList) |
70 | 49 |
|
71 |
| -const schemaBaseConf = computed(() => schema?.baseConf || {}) |
72 |
| -
|
73 |
| -const setterList = computed(() => { |
74 |
| - const list = _cloneDeep(formConfigList.value) |
75 |
| -
|
76 |
| - return list.map((form) => { |
77 |
| - const dataConfig: any = {} |
78 |
| -
|
79 |
| - for (const formItem of form.formList) { |
80 |
| - const formKey = formItem.key ? formItem.key : formItem.keys |
81 |
| - let formValue |
82 |
| - if (_isArray(formKey)) { |
83 |
| - formValue = [] |
84 |
| - for (const key of formKey) { |
85 |
| - const val = _get(schema, key, formItem.value) |
86 |
| - formValue.push(val) |
87 |
| - dataConfig[key] = val |
88 |
| - } |
89 |
| - } else { |
90 |
| - formValue = _get(schema, formKey, formItem.value) |
91 |
| - dataConfig[formKey] = formValue |
92 |
| - } |
93 |
| - formItem.value = formValue |
94 |
| - } |
95 |
| - // 动态显隐设置器 |
96 |
| - form.formList = form.formList.filter((item: any) => { |
97 |
| - if (_isFunction(item.relyFunc)) { |
98 |
| - return item.relyFunc(schemaBaseConf.value) |
99 |
| - } |
100 |
| - return true |
101 |
| - }) |
102 |
| -
|
103 |
| - form.dataConfig = dataConfig |
104 |
| -
|
105 |
| - return form |
106 |
| - }) |
107 |
| -}) |
108 |
| -
|
109 |
| -const handleFormChange = (data: any) => { |
| 50 | +const handleFormChange = ({ key, value }: any) => { |
110 | 51 | changeSchema({
|
111 |
| - key: data.key, |
112 |
| - value: data.value |
| 52 | + key: `baseConf.${key}`, |
| 53 | + value: value |
113 | 54 | })
|
114 | 55 | }
|
115 |
| -
|
116 |
| -onMounted(async () => { |
117 |
| - formConfigList.value = baseConfig.map((item) => ({ |
118 |
| - ...item, |
119 |
| - formList: item.formList.map((key) => (baseFormConfig as any)[key]).filter((config) => !!config) |
120 |
| - })) |
121 |
| -
|
122 |
| - const formList = formConfigList.value.map((item) => item.formList).flat() |
123 |
| - const typeList = formList |
124 |
| - .filter((item) => !item.custom) |
125 |
| - .map((item) => ({ |
126 |
| - type: item.type, |
127 |
| - path: item.path || item.type |
128 |
| - })) |
129 |
| -
|
130 |
| - const comps = await setterLoader.loadComponents(typeList) |
131 |
| - for (const comp of comps) { |
132 |
| - if (!comp) { |
133 |
| - continue |
134 |
| - } |
135 |
| -
|
136 |
| - const { type, component, err } = comp |
137 |
| - if (!err) { |
138 |
| - const componentName = component.name |
139 |
| -
|
140 |
| - components.value[type] = component |
141 |
| - registerTypes.value[type] = componentName |
142 |
| - } |
143 |
| - } |
144 |
| -}) |
145 | 56 | </script>
|
146 | 57 |
|
147 | 58 | <style lang="scss" scoped>
|
|
0 commit comments