gi-component 0.0.7 → 0.0.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/dist/gi.css +1 -1
  2. package/dist/index.d.ts +4 -50
  3. package/dist/index.es.js +39 -39
  4. package/dist/index.es.js.map +1 -1
  5. package/dist/index.umd.js +1 -1
  6. package/dist/index.umd.js.map +1 -1
  7. package/package.json +60 -56
  8. package/packages/components/button/index.ts +4 -4
  9. package/packages/components/button/src/button.vue +32 -32
  10. package/packages/components/button/src/type.ts +2 -2
  11. package/packages/components/card/index.ts +4 -4
  12. package/packages/components/card/src/card.vue +21 -21
  13. package/packages/components/card/src/type.ts +9 -9
  14. package/packages/components/dialog/index.ts +5 -5
  15. package/packages/components/dialog/src/dialog.ts +33 -33
  16. package/packages/components/dialog/src/dialog.vue +34 -32
  17. package/packages/components/dialog/src/type.ts +13 -13
  18. package/packages/components/edit-table/index.ts +4 -4
  19. package/packages/components/edit-table/src/edit-table.vue +47 -47
  20. package/packages/components/edit-table/src/type.ts +42 -63
  21. package/packages/components/form/index.ts +4 -4
  22. package/packages/components/form/src/form.vue +102 -98
  23. package/packages/components/form/src/type.ts +67 -88
  24. package/packages/components/grid/index.ts +6 -6
  25. package/packages/components/grid/src/context.ts +17 -17
  26. package/packages/components/grid/src/grid-item.vue +40 -40
  27. package/packages/components/grid/src/grid.vue +38 -38
  28. package/packages/components/grid/src/hook/use-index.ts +24 -24
  29. package/packages/components/grid/src/hook/use-responsive-state.ts +26 -26
  30. package/packages/components/grid/src/hook/use-responsive-value.ts +24 -24
  31. package/packages/components/grid/src/interface.ts +32 -32
  32. package/packages/components/grid/src/utils/global-config.ts +3 -3
  33. package/packages/components/grid/src/utils/index.ts +25 -25
  34. package/packages/components/grid/src/utils/is.ts +2 -2
  35. package/packages/components/grid/src/utils/responsive-observe.ts +53 -53
  36. package/packages/components/input-group/index.ts +4 -4
  37. package/packages/components/input-group/src/input-group.vue +2 -2
  38. package/packages/components/input-search/index.ts +4 -4
  39. package/packages/components/input-search/src/input-search.vue +15 -15
  40. package/packages/components/input-search/src/type.ts +4 -4
  41. package/packages/components/page-layout/index.ts +4 -4
  42. package/packages/components/page-layout/src/page-layout.vue +25 -25
  43. package/packages/components/page-layout/src/split-button.vue +22 -22
  44. package/packages/components/page-layout/src/type.ts +9 -9
  45. package/packages/components/table/index.ts +4 -4
  46. package/packages/components/table/src/TableColumn.vue +10 -10
  47. package/packages/components/table/src/table.vue +14 -14
  48. package/packages/components/table/src/type.ts +7 -7
  49. package/packages/components/tabs/index.ts +4 -4
  50. package/packages/components/tabs/src/tabs.vue +20 -20
  51. package/packages/components/tabs/src/type.ts +9 -9
  52. package/packages/hooks/index.ts +2 -2
  53. package/packages/hooks/useBemClass.ts +7 -7
  54. package/packages/hooks/useTable.ts +6 -7
  55. package/packages/index.ts +44 -44
  56. package/packages/styles/index.scss +6 -0
  57. package/packages/types/tool.ts +4 -4
  58. package/packages/utils/createSelectDialog.ts +28 -27
  59. package/packages/utils/index.ts +1 -1
@@ -22,56 +22,56 @@
22
22
  </template>
23
23
 
24
24
  <script lang="ts" setup>
25
- import type { FormInstance } from 'element-plus';
26
- import type { EditTableColumnItem, EditTableColumnItemType } from './type';
27
- import type { EditTableProps } from './type.ts';
28
- import * as El from 'element-plus';
29
- import { computed, h, reactive, ref, toRaw, useAttrs, watch } from 'vue';
30
- import { useBemClass } from '../../../hooks';
25
+ import type { FormInstance } from 'element-plus'
26
+ import type { EditTableColumnItem, EditTableColumnItemType } from './type'
27
+ import type { EditTableProps } from './type.ts'
28
+ import * as El from 'element-plus'
29
+ import { computed, ref, useAttrs } from 'vue'
30
+ import { useBemClass } from '../../../hooks'
31
31
  import InputSearch from '../../input-search'
32
32
 
33
33
  const props = withDefaults(defineProps<EditTableProps>(), {
34
34
  rowKey: 'id',
35
35
  data: () => [],
36
36
  columns: () => []
37
- });
37
+ })
38
38
 
39
- const attrs = useAttrs();
40
- const { b } = useBemClass();
39
+ const attrs = useAttrs()
40
+ const { b } = useBemClass()
41
41
 
42
42
  const COMP_MAP: Record<EditTableColumnItemType, any> = {
43
- input: El.ElInput,
44
- textarea: El.ElInput,
43
+ 'input': El.ElInput,
44
+ 'textarea': El.ElInput,
45
45
  'input-number': El.ElInputNumber,
46
46
  'input-tag': El.ElInputTag,
47
- select: El.ElSelect,
47
+ 'select': El.ElSelect,
48
48
  'select-v2': El.ElSelectV2,
49
49
  'tree-select': El.ElTreeSelect,
50
- cascader: El.ElCascader,
51
- slider: El.ElSlider,
52
- switch: El.ElSwitch,
53
- rate: El.ElRate,
50
+ 'cascader': El.ElCascader,
51
+ 'slider': El.ElSlider,
52
+ 'switch': El.ElSwitch,
53
+ 'rate': El.ElRate,
54
54
  'checkbox-group': El.ElCheckboxGroup,
55
- checkbox: El.ElCheckbox,
55
+ 'checkbox': El.ElCheckbox,
56
56
  'radio-group': El.ElRadioGroup,
57
- radio: El.ElRadio,
57
+ 'radio': El.ElRadio,
58
58
  'date-picker': El.ElDatePicker,
59
59
  'time-picker': El.ElTimePicker,
60
60
  'time-select': El.ElTimeSelect,
61
61
  'color-picker': El.ElColorPicker,
62
- transfer: El.ElTransfer,
63
- autocomplete: El.ElAutocomplete,
64
- upload: El.ElUpload,
62
+ 'transfer': El.ElTransfer,
63
+ 'autocomplete': El.ElAutocomplete,
64
+ 'upload': El.ElUpload,
65
65
  'input-search': InputSearch,
66
- slot: undefined,
67
- };
66
+ 'slot': undefined
67
+ }
68
68
 
69
- const formRef = ref<FormInstance | null>();
69
+ const formRef = ref<FormInstance | null>()
70
70
 
71
71
  /** 表单数据 */
72
- const form = computed(() => ({ tableData: props.data }));
72
+ const form = computed(() => ({ tableData: props.data }))
73
73
 
74
- const clearable = false;
74
+ const clearable = false
75
75
  /** 组件静态配置 */
76
76
  const STATIC_PROPS = new Map([
77
77
  ['input', { clearable, maxlength: 20 }],
@@ -106,43 +106,43 @@ const STATIC_PROPS = new Map([
106
106
  ['autocomplete', {}],
107
107
  ['upload', {}],
108
108
  ['title', {}]
109
- ]);
109
+ ])
110
110
 
111
111
  /** 获取占位文本 */
112
112
  const getPlaceholder = (item: EditTableColumnItem) => {
113
- if (!item.type) return undefined;
113
+ if (!item.type) return undefined
114
114
  if (['input', 'input-number', 'input-tag'].includes(item.type)) {
115
- return `请输入${item.label}`;
115
+ return `请输入${item.label}`
116
116
  }
117
117
  if (['textarea'].includes(item.type)) {
118
- return `请填写${item.label}`;
118
+ return `请填写${item.label}`
119
119
  }
120
120
  if (
121
121
  ['select', 'select-v2', 'tree-select', 'cascader', 'time-select', 'input-search'].includes(
122
122
  item.type
123
123
  )
124
124
  ) {
125
- return `请选择${item.label}`;
125
+ return `请选择${item.label}`
126
126
  }
127
127
  if (['date-picker'].includes(item.type)) {
128
- return `请选择日期`;
128
+ return `请选择日期`
129
129
  }
130
130
  if (['time-picker'].includes(item.type)) {
131
- return `请选择时间`;
131
+ return `请选择时间`
132
132
  }
133
- return undefined;
134
- };
133
+ return undefined
134
+ }
135
135
 
136
136
  // 组件的默认props配置
137
137
  function getComponentBindProps(item: EditTableColumnItem) {
138
138
  // 获取默认配置
139
- const defaultProps: any = STATIC_PROPS.get(item.type || '') || {};
140
- defaultProps.placeholder = getPlaceholder(item);
139
+ const defaultProps: any = STATIC_PROPS.get(item.type || '') || {}
140
+ defaultProps.placeholder = getPlaceholder(item)
141
141
  if (item.type === 'date-picker') {
142
- defaultProps.valueFormat = item?.componentProps?.type === 'datetime' ? 'YYYY-MM-DD HH:mm:ss' : 'YYYY-MM-DD';
142
+ defaultProps.valueFormat = item?.componentProps?.type === 'datetime' ? 'YYYY-MM-DD HH:mm:ss' : 'YYYY-MM-DD'
143
143
  }
144
144
  // 合并默认配置和自定义配置
145
- return { ...defaultProps, ...(item?.componentProps || {}) };
145
+ return { ...defaultProps, ...(item?.componentProps || {}) }
146
146
  }
147
147
 
148
148
  /** 表单项校验规则 */
@@ -151,24 +151,24 @@ function getFormItemRules(item: EditTableColumnItem) {
151
151
  return [
152
152
  { required: true, message: `${item.label}为必填项` },
153
153
  ...(Array.isArray(item.rules) ? item.rules : [])
154
- ];
154
+ ]
155
155
  }
156
- return item.rules;
156
+ return item.rules
157
157
  }
158
158
 
159
159
  /** 表头标题样式 */
160
160
  function getLabelClassName(item: EditTableColumnItem) {
161
- if (item.required) return 'column-required';
162
- return '';
161
+ if (item.required) return 'column-required'
162
+ return ''
163
163
  }
164
164
 
165
165
  /** 判断是否禁用 */
166
166
  const isDisabled = (p: any) => {
167
- if (typeof props?.cellDisabled === 'function') return props.cellDisabled(p);
168
- return false;
169
- };
167
+ if (typeof props?.cellDisabled === 'function') return props.cellDisabled(p)
168
+ return false
169
+ }
170
170
 
171
- defineExpose({ formRef });
171
+ defineExpose({ formRef })
172
172
  </script>
173
173
 
174
174
  <style lang="scss" scoped>
@@ -1,72 +1,51 @@
1
- import type * as El from 'element-plus';
2
- import type { InputSearchInstance } from '../../input-search'
1
+ import type * as El from 'element-plus'
3
2
  import type { MergeMultiple } from '../../../types/tool'
3
+ import type { InputSearchInstance } from '../../input-search'
4
4
 
5
- export type EditTableColumnItemType =
6
- | 'input'
7
- | 'textarea'
8
- | 'input-number'
9
- | 'input-tag'
10
- | 'select'
11
- | 'select-v2'
12
- | 'tree-select'
13
- | 'cascader'
14
- | 'slider'
15
- | 'switch'
16
- | 'rate'
17
- | 'checkbox-group'
18
- | 'checkbox'
19
- | 'radio-group'
20
- | 'radio'
21
- | 'date-picker'
22
- | 'time-picker'
23
- | 'time-select'
24
- | 'color-picker'
25
- | 'transfer'
26
- | 'autocomplete'
27
- | 'upload'
28
- | 'slot'
29
- | 'input-search';
5
+ export type EditTableColumnItemType
6
+ = | 'input'
7
+ | 'textarea'
8
+ | 'input-number'
9
+ | 'input-tag'
10
+ | 'select'
11
+ | 'select-v2'
12
+ | 'tree-select'
13
+ | 'cascader'
14
+ | 'slider'
15
+ | 'switch'
16
+ | 'rate'
17
+ | 'checkbox-group'
18
+ | 'checkbox'
19
+ | 'radio-group'
20
+ | 'radio'
21
+ | 'date-picker'
22
+ | 'time-picker'
23
+ | 'time-select'
24
+ | 'color-picker'
25
+ | 'transfer'
26
+ | 'autocomplete'
27
+ | 'upload'
28
+ | 'slot'
29
+ | 'input-search'
30
30
 
31
31
  export interface EditTableColumnItem {
32
- type?: EditTableColumnItemType;
33
- label: string;
34
- prop: string;
35
- width?: number | string;
36
- required?: boolean;
37
- rules?: El.FormItemRule[]; // 表单校验规则
38
- componentProps?: EditTableColumnItemProps;
39
- columnProps?: El.TableColumnInstance['$props'];
40
- formItemProps?: El.FormItemProps;
41
- slotName?: string;
32
+ type?: EditTableColumnItemType
33
+ label: string
34
+ prop: string
35
+ width?: number | string
36
+ required?: boolean
37
+ rules?: El.FormItemRule[] // 表单校验规则
38
+ componentProps?: EditTableColumnItemProps
39
+ columnProps?: El.TableColumnInstance['$props']
40
+ formItemProps?: El.FormItemProps
41
+ slotName?: string
42
42
  }
43
43
 
44
- export type EditTableColumnItemProps = MergeMultiple<[El.InputProps,
45
- El.InputNumberProps,
46
- El.InputTagProps,
47
- El.SelectProps,
48
- El.SelectV2Props,
49
- El.TreeInstance['$props'],
50
- El.CascaderProps,
51
- El.SliderProps,
52
- El.SwitchProps,
53
- El.RateProps,
54
- El.CheckboxGroupProps,
55
- El.CheckboxProps,
56
- El.RadioGroupProps,
57
- El.RadioProps,
58
- El.DatePickerProps,
59
- El.TimePickerDefaultProps,
60
- El.TimeSelectProps,
61
- El.ColorPickerProps,
62
- El.TransferProps,
63
- El.AutocompleteProps,
64
- El.UploadProps,
65
- InputSearchInstance['$props']]>
44
+ export type EditTableColumnItemProps = MergeMultiple<[El.InputProps, El.InputNumberProps, El.InputTagProps, El.SelectProps, El.SelectV2Props, El.TreeInstance['$props'], El.CascaderProps, El.SliderProps, El.SwitchProps, El.RateProps, El.CheckboxGroupProps, El.CheckboxProps, El.RadioGroupProps, El.RadioProps, El.DatePickerProps, El.TimePickerDefaultProps, El.TimeSelectProps, El.ColorPickerProps, El.TransferProps, El.AutocompleteProps, El.UploadProps, InputSearchInstance['$props']]>
66
45
 
67
46
  export interface EditTableProps {
68
- rowKey?: string;
69
- data?: any[];
70
- columns?: EditTableColumnItem[];
71
- cellDisabled?: any;
47
+ rowKey?: string
48
+ data?: any[]
49
+ columns?: EditTableColumnItem[]
50
+ cellDisabled?: any
72
51
  }
@@ -1,5 +1,5 @@
1
- import Form from './src/form.vue';
1
+ import Form from './src/form.vue'
2
2
 
3
- export type FormInstance = InstanceType<typeof Form>;
4
- export * from './src/type';
5
- export default Form;
3
+ export type FormInstance = InstanceType<typeof Form>
4
+ export * from './src/type'
5
+ export default Form
@@ -11,9 +11,9 @@
11
11
 
12
12
  <template v-else>
13
13
  <GridItem v-if="!isHide(item)" :key="item.field + index" v-bind="item.gridItemProps || props.gridItemProps"
14
- :span="item.span ||
15
- item.gridItemProps?.span ||
16
- props?.gridItemProps?.span
14
+ :span="item.span
15
+ || item.gridItemProps?.span
16
+ || props?.gridItemProps?.span
17
17
  ">
18
18
  <el-form-item :key="item.field + index" :prop="item.field" :label="item.label"
19
19
  :rules="getFormItemRules(item)" v-bind="item.formItemProps">
@@ -45,9 +45,11 @@
45
45
  <!-- 额外信息 -->
46
46
  <div v-if="item.extra" :class="b('form-item__extra')">
47
47
  <template v-if="typeof item.extra === 'string'">
48
- <el-text type="info" size="small">{{
49
- item.extra
50
- }}</el-text>
48
+ <el-text type="info" size="small">
49
+ {{
50
+ item.extra
51
+ }}
52
+ </el-text>
51
53
  </template>
52
54
  <template v-else-if="item.extra">
53
55
  <component :is="item.extra"></component>
@@ -77,52 +79,52 @@
77
79
  </template>
78
80
 
79
81
  <script lang="tsx" setup>
80
- import type { FormColumnType, FormColumnItem } from './type';
81
- import { ArrowDown, ArrowUp } from '@element-plus/icons-vue';
82
- import * as El from 'element-plus';
83
- import type { FormInstance } from 'element-plus';
82
+ import type { FormInstance } from 'element-plus'
83
+ import type { FormColumnItem, FormColumnType, FormProps } from './type'
84
+ import { ArrowDown, ArrowUp } from '@element-plus/icons-vue'
85
+ import * as El from 'element-plus'
84
86
  import {
85
87
  computed,
88
+ getCurrentInstance,
89
+ onMounted,
86
90
  ref,
87
91
  toRaw,
88
- watch,
89
92
  useAttrs,
90
- getCurrentInstance,
91
- onMounted
92
- } from 'vue';
93
- import { useBemClass } from '../../../hooks';
94
- import GiCard from '../../card';
95
- import { Grid, GridItem } from '../../grid';
96
- import InputSearch from '../../input-search';
97
- import type { FormProps } from './type';
93
+ watch
94
+ } from 'vue'
95
+ import { useBemClass } from '../../../hooks'
96
+ import GiCard from '../../card'
97
+ import { Grid, GridItem } from '../../grid'
98
+ import InputSearch from '../../input-search'
98
99
 
99
100
  const props = withDefaults(defineProps<FormProps>(), {
100
101
  columns: () => [],
101
102
  labelWidth: 'auto',
102
103
  scrollToError: true,
104
+ showMessage: true,
103
105
  gridItemProps: () => ({ span: { xs: 24, sm: 24, md: 12 } }), // xs, sm, md, lg, xl, xxl
104
106
  search: false,
105
107
  searchText: '查询',
106
108
  hideFoldBtn: false,
107
109
  defaultCollapsed: undefined,
108
110
  fc: () => ({})
109
- });
111
+ })
110
112
 
111
113
  const emit = defineEmits<{
112
- (e: 'update:modelValue', value: any): void;
113
- (e: 'search'): void;
114
- (e: 'reset'): void;
115
- }>();
116
-
117
- const attrs = useAttrs();
118
- const { b } = useBemClass();
119
- const collapsed = ref(props?.defaultCollapsed ?? props.search);
120
- const instance = getCurrentInstance();
121
-
122
- const globalConfig = instance?.appContext.config.globalProperties.$config;
123
- const clearable = globalConfig?.clearable ?? false;
114
+ (e: 'update:modelValue', value: any): void
115
+ (e: 'search'): void
116
+ (e: 'reset'): void
117
+ }>()
118
+
119
+ const attrs = useAttrs()
120
+ const { b } = useBemClass()
121
+ const collapsed = ref(props?.defaultCollapsed ?? props.search)
122
+ const instance = getCurrentInstance()
123
+
124
+ const globalConfig = instance?.appContext.config.globalProperties.$config
125
+ const clearable = globalConfig?.clearable ?? false
124
126
  // 字典数据存储
125
- const dictData = ref<Record<string, any[]>>({});
127
+ const dictData = ref<Record<string, any[]>>({})
126
128
 
127
129
  /** 组件静态配置 */
128
130
  const STATIC_PROPS = new Map([
@@ -152,59 +154,59 @@ const STATIC_PROPS = new Map([
152
154
  ['autocomplete', {}],
153
155
  ['upload', {}],
154
156
  ['title', {}]
155
- ]);
157
+ ])
156
158
 
157
159
  // 获取字典数据
158
160
  const loadDictData = async () => {
159
- const dictCodes: string[] = [];
161
+ const dictCodes: string[] = []
160
162
  // 收集所有需要的字典编码
161
- props.columns?.forEach(item => {
163
+ props.columns?.forEach((item) => {
162
164
  if (item.dictCode) {
163
- dictCodes.push(item.dictCode);
165
+ dictCodes.push(item.dictCode)
164
166
  }
165
- });
166
- if (!dictCodes.length) return;
167
+ })
168
+ if (!dictCodes.length) return
167
169
  if (!globalConfig?.dictRequest) {
168
- return El.ElMessage.error('请配置全局字典请求方法dictRequest');
170
+ return El.ElMessage.error('请配置全局字典请求方法dictRequest')
169
171
  }
170
172
  try {
171
173
  // 使用Promise.all并行处理所有字典请求
172
174
  const dictResponses = await Promise.all(
173
- dictCodes.map(code =>
175
+ dictCodes.map((code) =>
174
176
  globalConfig
175
177
  .dictRequest(code)
176
178
  .then((response: any) => ({ code, response }))
177
179
  )
178
- );
180
+ )
179
181
  // 处理所有响应结果
180
182
  dictResponses.forEach(({ code, response }) => {
181
- dictData.value[code] = response;
182
- });
183
+ dictData.value[code] = response
184
+ })
183
185
  } catch (error) {
184
- console.error('获取字典数据失败:', error);
185
- El.ElMessage.error('获取字典数据失败');
186
+ console.error('获取字典数据失败:', error)
187
+ El.ElMessage.error('获取字典数据失败')
186
188
  }
187
- };
189
+ }
188
190
 
189
191
  // 组件挂载时获取字典数据
190
192
  onMounted(() => {
191
- loadDictData();
192
- });
193
+ loadDictData()
194
+ })
193
195
 
194
196
  // 组件的默认props配置
195
197
  function getComponentBindProps(item: FormColumnItem) {
196
198
  // 获取默认配置
197
- const defaultProps: any = STATIC_PROPS.get(item.type) || {};
198
- defaultProps.placeholder = getPlaceholder(item);
199
+ const defaultProps: any = STATIC_PROPS.get(item.type) || {}
200
+ defaultProps.placeholder = getPlaceholder(item)
199
201
  if (item.type === 'date-picker') {
200
- defaultProps.valueFormat = item?.props?.type === 'datetime' ? 'YYYY-MM-DD HH:mm:ss' : 'YYYY-MM-DD';
202
+ defaultProps.valueFormat = item?.props?.type === 'datetime' ? 'YYYY-MM-DD HH:mm:ss' : 'YYYY-MM-DD'
201
203
  }
202
204
  // 如果配置了dictCode且存在对应的字典数据,设置options
203
205
  if (item.dictCode && dictData.value[item.dictCode]) {
204
- defaultProps.options = dictData.value[item.dictCode];
206
+ defaultProps.options = dictData.value[item.dictCode]
205
207
  }
206
208
  // 合并默认配置和自定义配置
207
- return { ...defaultProps, ...(item?.props || {}) };
209
+ return { ...defaultProps, ...(item?.props || {}) }
208
210
  }
209
211
 
210
212
  const formProps = computed(() => {
@@ -217,55 +219,57 @@ const formProps = computed(() => {
217
219
  search: undefined,
218
220
  searchText: undefined,
219
221
  hideFoldBtn: undefined,
220
- defaultCollapsed: undefined
221
- };
222
- });
222
+ defaultCollapsed: undefined,
223
+ modelValue: undefined,
224
+ fc: undefined
225
+ }
226
+ })
223
227
 
224
228
  const getClass = computed(() => {
225
- const arr: string[] = [b('form')];
229
+ const arr: string[] = [b('form')]
226
230
  if (props.search) {
227
- arr.push(b('form--search'));
231
+ arr.push(b('form--search'))
228
232
  }
229
- return arr.join(' ');
230
- });
233
+ return arr.join(' ')
234
+ })
231
235
 
232
236
  const CompMap: Record<Exclude<FormColumnType, 'slot'>, any> = {
233
- input: El.ElInput,
234
- textarea: El.ElInput,
237
+ 'input': El.ElInput,
238
+ 'textarea': El.ElInput,
235
239
  'input-number': El.ElInputNumber,
236
240
  'input-tag': El.ElInputTag,
237
241
  'input-search': InputSearch,
238
- select: El.ElSelect,
242
+ 'select': El.ElSelect,
239
243
  'select-v2': El.ElSelectV2,
240
244
  'tree-select': El.ElTreeSelect,
241
- cascader: El.ElCascader,
242
- slider: El.ElSlider,
243
- switch: El.ElSwitch,
244
- rate: El.ElRate,
245
+ 'cascader': El.ElCascader,
246
+ 'slider': El.ElSlider,
247
+ 'switch': El.ElSwitch,
248
+ 'rate': El.ElRate,
245
249
  'checkbox-group': El.ElCheckboxGroup,
246
- checkbox: El.ElCheckbox,
250
+ 'checkbox': El.ElCheckbox,
247
251
  'radio-group': El.ElRadioGroup,
248
- radio: El.ElRadio,
252
+ 'radio': El.ElRadio,
249
253
  'date-picker': El.ElDatePicker,
250
254
  'time-picker': El.ElTimePicker,
251
255
  'time-select': El.ElTimeSelect,
252
256
  'color-picker': El.ElColorPicker,
253
- transfer: El.ElTransfer,
254
- autocomplete: El.ElAutocomplete,
255
- upload: El.ElUpload,
256
- title: El.ElAlert
257
- };
257
+ 'transfer': El.ElTransfer,
258
+ 'autocomplete': El.ElAutocomplete,
259
+ 'upload': El.ElUpload,
260
+ 'title': El.ElAlert
261
+ }
258
262
 
259
- const formRef = ref<FormInstance>();
263
+ const formRef = ref<FormInstance>()
260
264
 
261
265
  /** 获取占位文本 */
262
266
  const getPlaceholder = (item: FormColumnItem) => {
263
- if (!item.type) return undefined;
267
+ if (!item.type) return undefined
264
268
  if (['input', 'input-number', 'input-tag'].includes(item.type)) {
265
- return `请输入${item.label}`;
269
+ return `请输入${item.label}`
266
270
  }
267
271
  if (['textarea'].includes(item.type)) {
268
- return `请填写${item.label}`;
272
+ return `请填写${item.label}`
269
273
  }
270
274
  if (
271
275
  [
@@ -277,16 +281,16 @@ const getPlaceholder = (item: FormColumnItem) => {
277
281
  'input-search'
278
282
  ].includes(item.type)
279
283
  ) {
280
- return `请选择${item.label}`;
284
+ return `请选择${item.label}`
281
285
  }
282
286
  if (['date-picker'].includes(item.type)) {
283
- return `请选择日期`;
287
+ return `请选择日期`
284
288
  }
285
289
  if (['time-picker'].includes(item.type)) {
286
- return `请选择时间`;
290
+ return `请选择时间`
287
291
  }
288
- return undefined;
289
- };
292
+ return undefined
293
+ }
290
294
 
291
295
  /** 表单项校验规则 */
292
296
  function getFormItemRules(item: FormColumnItem) {
@@ -294,7 +298,7 @@ function getFormItemRules(item: FormColumnItem) {
294
298
  return [
295
299
  { required: true, message: `${item.label}为必填项` },
296
300
  ...(Array.isArray(item.rules) ? item.rules : [])
297
- ];
301
+ ]
298
302
  }
299
303
  if (props.fc?.[item.field]?.required) {
300
304
  return [
@@ -303,26 +307,26 @@ function getFormItemRules(item: FormColumnItem) {
303
307
  message: `${item.label}为必填项`
304
308
  },
305
309
  ...(Array.isArray(item.rules) ? item.rules : [])
306
- ];
310
+ ]
307
311
  }
308
- return item.rules;
312
+ return item.rules
309
313
  }
310
314
 
311
315
  /** 隐藏表单项 */
312
316
  function isHide(item: FormColumnItem) {
313
- if (typeof item.hide === 'boolean') return item.hide;
317
+ if (typeof item.hide === 'boolean') return item.hide
314
318
  if (typeof item.hide === 'function') {
315
- return item.hide(props.modelValue);
319
+ return item.hide(props.modelValue)
316
320
  }
317
- if (props.fc?.[item.field]?.hidden) return true;
318
- if (item.hide === undefined) return false;
321
+ if (props.fc?.[item.field]?.hidden) return true
322
+ if (item.hide === undefined) return false
319
323
  }
320
324
 
321
325
  /** 禁用表单项 */
322
326
  function isDisabled(item: FormColumnItem) {
323
- if (item?.props?.disabled !== undefined) return item?.props?.disabled;
324
- if (props.fc?.[item.field]?.disabled === true) return true;
325
- return false;
327
+ if (item?.props?.disabled !== undefined) return item?.props?.disabled
328
+ if (props.fc?.[item.field]?.disabled === true) return true
329
+ return false
326
330
  }
327
331
 
328
332
  /** 表单数据更新 */
@@ -330,19 +334,19 @@ function updateModelValue(value: any, item: FormColumnItem) {
330
334
  emit(
331
335
  'update:modelValue',
332
336
  Object.assign(props.modelValue, { [item.field]: value })
333
- );
337
+ )
334
338
  }
335
339
 
336
340
  watch(
337
341
  () => props.modelValue,
338
342
  () => {
339
343
  // eslint-disable-next-line no-console
340
- console.log('form', toRaw(props.modelValue));
344
+ console.log('form', toRaw(props.modelValue))
341
345
  },
342
346
  { deep: true }
343
- );
347
+ )
344
348
 
345
- defineExpose({ formRef });
349
+ defineExpose({ formRef })
346
350
  </script>
347
351
 
348
352
  <style lang="scss" scoped>