@vue-ui-kit/ant 1.1.0 → 1.1.1

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.
@@ -1,277 +1,277 @@
1
1
  <script generic="D = Recordable, F = Recordable" lang="ts" name="PGrid" setup>
2
- import { ColumnProps, PFormItemProps, PGridProps, ResponsePathConfig } from '#/antProxy';
3
- import { computed, useAttrs, ref, Ref, reactive, onMounted, watch, toRefs } from 'vue';
4
- import { debounce, get, isArray, isFunction, isString, merge, omit, toNumber } from 'lodash-es';
5
- import { eachTree } from '@/utils/treeHelper';
6
- import { message as $message } from 'ant-design-vue';
7
- import RenderAntItem from '@/components/RenderAntItem';
8
- import RenderTitleSlots from '@/components/RenderTitleSlots';
9
- import RenderDefaultSlots from '@/components/RenderDefaultSlots';
10
- import { v4 as uuid_v4 } from 'uuid';
11
- import { valued } from '@/utils/is';
12
- import RenderItemSlots from '@/components/RenderItemSlots';
13
- import { cleanCol, defaultItemResponsive, defaultLabelCol } from '@/utils/core';
14
- import Icon from '@/renders/Icon';
15
- import { $confirm } from '@/hooks/useMessage';
16
- import {
17
- Table as ATable,
18
- Button as AButton,
19
- Form as AForm,
20
- FormItem as AFormItem,
21
- Row as ARow,
22
- Col as ACol,
23
- Spin as ASpin,
24
- } from 'ant-design-vue';
25
- import { TablePaginationConfig } from 'ant-design-vue/es/table/interface';
2
+ import { ColumnProps, PFormItemProps, PGridProps, ResponsePathConfig } from '#/antProxy'
3
+ import { computed, useAttrs, ref, Ref, reactive, onMounted, watch, toRefs } from 'vue'
4
+ import { debounce, get, isArray, isFunction, isString, merge, omit, toNumber } from 'lodash-es'
5
+ import { eachTree } from '@/utils/treeHelper'
6
+ import { message as $message } from 'ant-design-vue'
7
+ import RenderAntItem from '@/components/RenderAntItem'
8
+ import RenderTitleSlots from '@/components/RenderTitleSlots'
9
+ import RenderDefaultSlots from '@/components/RenderDefaultSlots'
10
+ import { v4 as uuid_v4 } from 'uuid'
11
+ import { valued } from '@/utils/is'
12
+ import RenderItemSlots from '@/components/RenderItemSlots'
13
+ import { cleanCol, defaultItemResponsive, defaultLabelCol } from '@/utils/core'
14
+ import Icon from '@/renders/Icon'
15
+ import { $confirm } from '@/hooks/useMessage'
16
+ import {
17
+ Table as ATable,
18
+ Button as AButton,
19
+ Form as AForm,
20
+ FormItem as AFormItem,
21
+ Row as ARow,
22
+ Col as ACol,
23
+ Spin as ASpin,
24
+ } from 'ant-design-vue'
25
+ import { TablePaginationConfig } from 'ant-design-vue/es/table/interface'
26
26
 
27
- const props = defineProps<PGridProps<D, F>>();
28
- const {
29
- formConfig,
30
- pageConfig,
31
- columns,
32
- toolbarConfig,
33
- proxyConfig,
34
- tableConfig,
35
- selectConfig,
36
- scrollMode,
37
- } = toRefs(props);
38
- const loading = reactive({
39
- table: false,
40
- form: false,
41
- });
42
- const submitOnReset = false;
43
- const boxEl = ref<HTMLDivElement>();
44
- const renderHeight = ref(500);
45
- const selectedRowKeys = ref<string[] | number[]>([]);
46
- const innerToolbarHandler = (code: string) => {
47
- const { ajax } = proxyConfig.value!;
48
- switch (code) {
49
- case 'multiDelete':
50
- if (ajax.multiDelete) {
51
- if (selectedRowKeys.value.length > 0) {
52
- $confirm({
53
- title: '警告',
54
- content: '确认删除选中的数据吗?',
55
- }).then(() => {
56
- loading.table = true;
57
- ajax.multiDelete!(selectedRowKeys.value)
27
+ const props = defineProps<PGridProps<D, F>>()
28
+ const {
29
+ formConfig,
30
+ pageConfig,
31
+ columns,
32
+ toolbarConfig,
33
+ proxyConfig,
34
+ tableConfig,
35
+ selectConfig,
36
+ scrollMode,
37
+ } = toRefs(props)
38
+ const loading = reactive({
39
+ table: false,
40
+ form: false,
41
+ })
42
+ const submitOnReset = false
43
+ const boxEl = ref<HTMLDivElement>()
44
+ const renderHeight = ref(500)
45
+ const selectedRowKeys = ref<string[] | number[]>([])
46
+ const innerToolbarHandler = (code: string) => {
47
+ const { ajax } = proxyConfig.value!
48
+ switch (code) {
49
+ case 'multiDelete':
50
+ if (ajax.multiDelete) {
51
+ if (selectedRowKeys.value.length > 0) {
52
+ $confirm({
53
+ title: '警告',
54
+ content: '确认删除选中的数据吗?',
55
+ }).then(() => {
56
+ loading.table = true
57
+ ajax.multiDelete!(selectedRowKeys.value)
58
58
  .then(() => {
59
- $message.success('删除成功');
60
- resetPage();
59
+ $message.success('删除成功')
60
+ resetPage()
61
61
  })
62
62
  .catch(() => {
63
- $message.error('删除失败');
63
+ $message.error('删除失败')
64
64
  })
65
65
  .finally(() => {
66
- loading.table = false;
67
- });
68
- });
69
- } else {
70
- $message.warn('请选择要删除的数据');
71
- }
72
- }
73
- break;
74
- }
75
- };
76
- const slotTitleColumns = computed(() => {
77
- const cols: ColumnProps<D>[] = [];
78
- eachTree(columns.value, (col) => {
79
- if (col.slots && col.slots.title) {
80
- if (!col.field) {
81
- col.field = '__holder__' + cols.length;
66
+ loading.table = false
67
+ })
68
+ })
69
+ } else {
70
+ $message.warn('请选择要删除的数据')
82
71
  }
83
- cols.push(col);
84
72
  }
85
- });
86
- return cols;
87
- });
88
- const formEl = ref();
89
- const tableEl = ref();
90
- const renderFormKey = ref(uuid_v4());
91
- const renderTableKey = ref(uuid_v4());
92
- const refreshForm = () => {
93
- renderFormKey.value = uuid_v4();
94
- };
95
- const refreshTable = () => {
96
- renderTableKey.value = uuid_v4();
97
- };
98
- const debounceRefreshForm = debounce(refreshForm, 100);
99
- const debounceRefreshTable = debounce(refreshTable, 100);
100
- const slotDefaultColumns = computed(() => {
101
- const cols: ColumnProps<D>[] = [];
102
- eachTree(columns.value, (col) => {
103
- if ((col.slots && col.slots.default) || col.formatter || col.cellRender) {
104
- if (!col.field) {
105
- col.field = '__holder__' + cols.length;
106
- }
107
- cols.push(col);
73
+ break
74
+ }
75
+ }
76
+ const slotTitleColumns = computed(() => {
77
+ const cols: ColumnProps<D>[] = []
78
+ eachTree(columns.value, (col) => {
79
+ if (col.slots && col.slots.title) {
80
+ if (!col.field) {
81
+ col.field = '__holder__' + cols.length
108
82
  }
109
- });
110
- return cols;
111
- });
112
- const pagination = reactive<IPage>({
113
- page: 1,
114
- size: pageConfig.value?.pageSize ?? 10,
115
- });
116
- const dataSeed = ref(0);
117
- const totalCount = ref(0);
118
- const tableData = ref<D[]>([]) as Ref<D[]>;
119
- const mode = computed<'list' | 'pagination' | 'bad'>(() =>
120
- proxyConfig.value && proxyConfig.value.ajax
121
- ? pageConfig.value
122
- ? 'pagination'
123
- : 'list'
124
- : 'bad',
125
- );
126
- const attrs = useAttrs();
127
- const emit = defineEmits([
128
- 'query',
129
- 'reset',
130
- 'update:tableData',
131
- 'toolbarButtonClick',
132
- 'toolbarToolClick',
133
- 'pick',
134
- ]);
135
- const toolBtnClick = (code: string) => {
136
- emit('toolbarButtonClick', {
137
- data: tableData.value,
138
- code,
139
- selectedKeys: selectedRowKeys.value,
140
- });
141
- innerToolbarHandler(code);
142
- };
143
- const toolToolClick = (code: string) => {
144
- emit('toolbarToolClick', { data: tableData.value, code, selectedKeys: selectedRowKeys.value });
145
- innerToolbarHandler(code);
146
- };
147
- const queryFormData = ref<Partial<F>>({}) as Ref<Partial<F>>;
148
- const pickRow = ({ row, field }: { row: D; field: string }) => {
149
- emit('pick', { row, field });
150
- };
151
- const resetQueryFormData = (lazy?: boolean) => {
152
- if (formConfig.value && formConfig.value.items.length > 0) {
153
- if (formConfig.value.customReset) {
154
- formConfig.value.customReset();
155
- } else {
156
- const obj: Partial<F> = {};
157
- eachTree(formConfig.value.items, (item) => {
158
- if (item.field && item.itemRender) {
159
- if (valued(item.itemRender.defaultValue)) {
160
- obj[item.field] = item.itemRender.defaultValue;
161
- } else {
162
- obj[item.field] = undefined;
163
- }
164
- }
165
- });
166
- queryFormData.value = obj;
83
+ cols.push(col)
84
+ }
85
+ })
86
+ return cols
87
+ })
88
+ const formEl = ref()
89
+ const tableEl = ref()
90
+ const renderFormKey = ref(uuid_v4())
91
+ const renderTableKey = ref(uuid_v4())
92
+ const refreshForm = () => {
93
+ renderFormKey.value = uuid_v4()
94
+ }
95
+ const refreshTable = () => {
96
+ renderTableKey.value = uuid_v4()
97
+ }
98
+ const debounceRefreshForm = debounce(refreshForm, 100)
99
+ const debounceRefreshTable = debounce(refreshTable, 100)
100
+ const slotDefaultColumns = computed(() => {
101
+ const cols: ColumnProps<D>[] = []
102
+ eachTree(columns.value, (col) => {
103
+ if ((col.slots && col.slots.default) || col.formatter || col.cellRender) {
104
+ if (!col.field) {
105
+ col.field = '__holder__' + cols.length
167
106
  }
168
- refreshForm();
107
+ cols.push(col)
169
108
  }
170
-
171
- pagination.page = 1;
172
- if (!lazy) {
173
- debounceFetchData();
109
+ })
110
+ return cols
111
+ })
112
+ const pagination = reactive<IPage>({
113
+ page: 1,
114
+ size: pageConfig.value?.pageSize ?? 10,
115
+ })
116
+ const dataSeed = ref(0)
117
+ const totalCount = ref(0)
118
+ const tableData = ref<D[]>([]) as Ref<D[]>
119
+ const mode = computed<'list' | 'pagination' | 'bad'>(() =>
120
+ proxyConfig.value && proxyConfig.value.ajax
121
+ ? pageConfig.value
122
+ ? 'pagination'
123
+ : 'list'
124
+ : 'bad',
125
+ )
126
+ const attrs = useAttrs()
127
+ const emit = defineEmits([
128
+ 'query',
129
+ 'reset',
130
+ 'update:tableData',
131
+ 'toolbarButtonClick',
132
+ 'toolbarToolClick',
133
+ 'pick',
134
+ ])
135
+ const toolBtnClick = (code: string) => {
136
+ emit('toolbarButtonClick', {
137
+ data: tableData.value,
138
+ code,
139
+ selectedKeys: selectedRowKeys.value,
140
+ })
141
+ innerToolbarHandler(code)
142
+ }
143
+ const toolToolClick = (code: string) => {
144
+ emit('toolbarToolClick', { data: tableData.value, code, selectedKeys: selectedRowKeys.value })
145
+ innerToolbarHandler(code)
146
+ }
147
+ const queryFormData = ref<Partial<F>>({}) as Ref<Partial<F>>
148
+ const pickRow = ({ row, field }: { row: D; field: string }) => {
149
+ emit('pick', { row, field })
150
+ }
151
+ const resetQueryFormData = (lazy?: boolean) => {
152
+ if (formConfig.value && formConfig.value.items.length > 0) {
153
+ if (formConfig.value.customReset) {
154
+ formConfig.value.customReset()
155
+ } else {
156
+ const obj: Partial<F> = {}
157
+ eachTree(formConfig.value.items, (item) => {
158
+ if (item.field && item.itemRender) {
159
+ if (valued(item.itemRender.defaultValue)) {
160
+ obj[item.field] = item.itemRender.defaultValue
161
+ } else {
162
+ obj[item.field] = undefined
163
+ }
164
+ }
165
+ })
166
+ queryFormData.value = obj
174
167
  }
175
- };
176
- const handleResponse = (response: Recordable, pathConfig?: ResponsePathConfig<D>) =>
168
+ refreshForm()
169
+ }
170
+
171
+ pagination.page = 1
172
+ if (!lazy) {
173
+ debounceFetchData()
174
+ }
175
+ }
176
+ const handleResponse = (response: Recordable, pathConfig?: ResponsePathConfig<D>) =>
177
177
  pathConfig
178
- ? {
178
+ ? {
179
179
  list: isString(pathConfig.list)
180
- ? get(response, pathConfig.list)
181
- : isFunction(pathConfig.list)
182
- ? pathConfig.list(response)
183
- : undefined,
180
+ ? get(response, pathConfig.list)
181
+ : isFunction(pathConfig.list)
182
+ ? pathConfig.list(response)
183
+ : undefined,
184
184
  total: isString(pathConfig.total)
185
- ? get(response, pathConfig.total)
186
- : isFunction(pathConfig.total)
187
- ? pathConfig.total(response)
188
- : undefined,
185
+ ? get(response, pathConfig.total)
186
+ : isFunction(pathConfig.total)
187
+ ? pathConfig.total(response)
188
+ : undefined,
189
189
  result: isString(pathConfig.result)
190
- ? get(response, pathConfig.result)
191
- : isFunction(pathConfig.result)
192
- ? pathConfig.result(response)
193
- : undefined,
190
+ ? get(response, pathConfig.result)
191
+ : isFunction(pathConfig.result)
192
+ ? pathConfig.result(response)
193
+ : undefined,
194
194
  message: isString(pathConfig.message)
195
- ? get(response, pathConfig.message)
196
- : isFunction(pathConfig.message)
197
- ? pathConfig.message(response)
198
- : undefined,
195
+ ? get(response, pathConfig.message)
196
+ : isFunction(pathConfig.message)
197
+ ? pathConfig.message(response)
198
+ : undefined,
199
199
  }
200
- : {
200
+ : {
201
201
  list: response,
202
- };
203
- const enoughSpacing = ref(true);
204
- const reload = () => {
205
- return resetQueryFormData();
206
- };
207
- const resetPage = () => {
208
- pagination.page = 1;
209
- selectedRowKeys.value = [];
210
- return fetchData();
211
- };
212
- /**
213
- * @description
214
- * @param p
215
- * @param _filters todo filters
216
- * @param _sorter todo sorter
217
- */
218
- const handleTableChange = (p: TablePaginationConfig, _filters, _sorter) => {
219
- pagination.page = p.current!;
220
- pagination.size = p.pageSize!;
221
- return fetchData();
222
- };
202
+ }
203
+ const enoughSpacing = ref(true)
204
+ const reload = () => {
205
+ return resetQueryFormData()
206
+ }
207
+ const resetPage = () => {
208
+ pagination.page = 1
209
+ selectedRowKeys.value = []
210
+ return fetchData()
211
+ }
212
+ /**
213
+ * @description
214
+ * @param p
215
+ * @param _filters todo filters
216
+ * @param _sorter todo sorter
217
+ */
218
+ const handleTableChange = (p: TablePaginationConfig, _filters, _sorter) => {
219
+ pagination.page = p.current!
220
+ pagination.size = p.pageSize!
221
+ return fetchData()
222
+ }
223
223
 
224
- const fetchData = () =>
224
+ const fetchData = () =>
225
225
  new Promise<D[]>((resolve) => {
226
226
  if (mode.value !== 'bad') {
227
- loading.form = true;
228
- loading.table = true;
229
- const { ajax } = proxyConfig.value!;
227
+ loading.form = true
228
+ loading.table = true
229
+ const { ajax } = proxyConfig.value!
230
230
  ajax
231
- .query({
232
- form: queryFormData.value,
233
- page: pagination,
234
- })
235
- .then((response) => {
236
- const { list, total, result, message } = handleResponse(
237
- response,
238
- proxyConfig.value!.response,
239
- );
240
- if (list) {
241
- tableData.value = list as D[];
242
- dataSeed.value++;
243
- } else if (result) {
244
- tableData.value = result as D[];
245
- totalCount.value = total ?? result.length;
246
- dataSeed.value++;
247
- } else {
248
- tableData.value = [];
249
- dataSeed.value++;
250
- if (message) {
251
- $message.warn(message);
231
+ .query({
232
+ form: queryFormData.value,
233
+ page: pagination,
234
+ })
235
+ .then((response) => {
236
+ const { list, total, result, message } = handleResponse(
237
+ response,
238
+ proxyConfig.value!.response,
239
+ )
240
+ if (list) {
241
+ tableData.value = list as D[]
242
+ dataSeed.value++
243
+ } else if (result) {
244
+ tableData.value = result as D[]
245
+ totalCount.value = total ?? result.length
246
+ dataSeed.value++
247
+ } else {
248
+ tableData.value = []
249
+ dataSeed.value++
250
+ if (message) {
251
+ $message.warn(message)
252
+ }
252
253
  }
253
- }
254
- resolve(tableData.value as D[]);
255
- })
256
- .catch((e) => {
257
- console.error('fetchData error', e);
258
- resolve([] as D[]);
259
- })
260
- .finally(() => {
261
- loading.form = false;
262
- loading.table = false;
263
- });
254
+ resolve(tableData.value as D[])
255
+ })
256
+ .catch((e) => {
257
+ console.error('fetchData error', e)
258
+ resolve([] as D[])
259
+ })
260
+ .finally(() => {
261
+ loading.form = false
262
+ loading.table = false
263
+ })
264
264
  }
265
- });
266
- const debounceFetchData = debounce(fetchData, 160);
267
- const passQuery = (params: Partial<F>) => {
268
- Object.assign(queryFormData.value, params);
269
- pagination.page = 1;
270
- return debounceFetchData();
271
- };
272
- const pg = computed(() =>
265
+ })
266
+ const debounceFetchData = debounce(fetchData, 160)
267
+ const passQuery = (params: Partial<F>) => {
268
+ Object.assign(queryFormData.value, params)
269
+ pagination.page = 1
270
+ return debounceFetchData()
271
+ }
272
+ const pg = computed(() =>
273
273
  mode.value === 'pagination'
274
- ? {
274
+ ? {
275
275
  current: pagination.page,
276
276
  total: totalCount.value,
277
277
  pageSize: pagination.size,
@@ -279,119 +279,119 @@
279
279
  showSizeChanger: true,
280
280
  showTotal: (total: number) => `共${total}条数据`,
281
281
  }
282
- : false,
283
- );
284
- const defaultTableConfig = {
285
- size: 'small',
286
- sticky: true,
287
- transformCellText: ({ text }) => {
288
- return isArray(text) && text.length === 0 ? '-' : text;
289
- },
290
- };
291
- const tc = computed(() =>
282
+ : false,
283
+ )
284
+ const defaultTableConfig = {
285
+ size: 'small',
286
+ sticky: true,
287
+ transformCellText: ({ text }) => {
288
+ return isArray(text) && text.length === 0 ? '-' : text
289
+ },
290
+ }
291
+ const tc = computed(() =>
292
292
  merge(
293
- {},
294
- defaultTableConfig,
295
- tableConfig?.value ?? {},
296
- selectConfig.value
297
- ? {
298
- rowSelection: {
299
- type: selectConfig.value.multiple ? 'checkbox' : 'radio',
300
- preserveSelectedRowKeys: true,
301
- selectedRowKeys: selectedRowKeys.value,
302
- onChange: (selectedKeys: string[] | number[]) => {
303
- selectedRowKeys.value = selectedKeys;
293
+ {},
294
+ defaultTableConfig,
295
+ tableConfig?.value ?? {},
296
+ selectConfig.value
297
+ ? {
298
+ rowSelection: {
299
+ type: selectConfig.value.multiple ? 'checkbox' : 'radio',
300
+ preserveSelectedRowKeys: true,
301
+ selectedRowKeys: selectedRowKeys.value,
302
+ onChange: (selectedKeys: string[] | number[]) => {
303
+ selectedRowKeys.value = selectedKeys
304
+ },
304
305
  },
305
- },
306
- }
307
- : {},
306
+ }
307
+ : {},
308
308
  ),
309
- );
310
- /*omit({labelCol:defaultLabelCol,...formConfig},['items'])*/
311
- const fc = computed(() => omit({ labelCol: defaultLabelCol, ...formConfig.value }, ['items']));
312
- const handleFormSubmit = () => {
313
- resetPage();
314
- };
309
+ )
310
+ /*omit({labelCol:defaultLabelCol,...formConfig},['items'])*/
311
+ const fc = computed(() => omit({ labelCol: defaultLabelCol, ...formConfig.value }, ['items']))
312
+ const handleFormSubmit = () => {
313
+ resetPage()
314
+ }
315
315
 
316
- watch(
316
+ watch(
317
317
  () => formConfig.value,
318
318
  () => {
319
- debounceRefreshForm();
319
+ debounceRefreshForm()
320
320
  },
321
321
  { deep: true },
322
- );
323
- watch(
322
+ )
323
+ watch(
324
324
  () => [columns.value, proxyConfig.value, toolbarConfig.value],
325
325
  () => {
326
- debounceRefreshTable();
326
+ debounceRefreshTable()
327
327
  },
328
328
  { deep: true },
329
- );
330
- defineExpose({
331
- commitProxy: {
332
- query: debounceFetchData,
333
- reload,
334
- reloadPage: resetPage,
335
- passQuery,
336
- },
337
- $table: computed(() => tableEl.value),
338
- selectedRowKeys: computed(() => selectedRowKeys.value),
339
- $form: computed(() => formEl.value),
340
- });
341
- onMounted(() => {
342
- /*判断本组件所在容器DOM*/
343
- const pNode = boxEl.value?.parentElement;
344
- const ph = pNode ? window.getComputedStyle(pNode).height : '0px';
345
- renderHeight.value = toNumber(ph.replace('px', '')) - 200;
346
- enoughSpacing.value = toNumber(ph.replace('px', '')) > 600;
347
- resetQueryFormData(props.manualFetch);
348
- });
329
+ )
330
+ defineExpose({
331
+ commitProxy: {
332
+ query: debounceFetchData,
333
+ reload,
334
+ reloadPage: resetPage,
335
+ passQuery,
336
+ },
337
+ $table: computed(() => tableEl.value),
338
+ selectedRowKeys: computed(() => selectedRowKeys.value),
339
+ $form: computed(() => formEl.value),
340
+ })
341
+ onMounted(() => {
342
+ /*判断本组件所在容器DOM*/
343
+ const pNode = boxEl.value?.parentElement
344
+ const ph = pNode ? window.getComputedStyle(pNode).height : '0px'
345
+ renderHeight.value = props.renderY ?? toNumber(ph.replace('px', '')) - (props.fitHeight ?? 170) - (!!props.toolbarConfig ? 30 : 0) - (Math.ceil((props.formConfig?.items?.length ?? 0) / 4) * 35)
346
+ enoughSpacing.value = toNumber(ph.replace('px', '')) > 600
347
+ resetQueryFormData(props.manualFetch)
348
+ })
349
349
  </script>
350
350
  <template>
351
351
  <div ref="boxEl" class="h-full p-wrapper flex flex-col gap-8px overflow-y-auto" v-bind="attrs">
352
352
  <div v-if="mode === 'bad'">请检查配置</div>
353
353
  <template v-else>
354
354
  <div
355
- v-if="formConfig?.items?.some((s: PFormItemProps<F>) => s.field && s.itemRender)"
356
- class="p-pane p-form-wrapper"
355
+ v-if="formConfig?.items?.some((s: PFormItemProps<F>) => s.field && s.itemRender)"
356
+ class="p-pane p-form-wrapper"
357
357
  >
358
358
  <a-spin :spinning="loading.form">
359
359
  <a-form
360
- :key="renderFormKey"
361
- ref="formEl"
362
- :model="queryFormData"
363
- v-bind="fc"
364
- @submit="handleFormSubmit"
360
+ :key="renderFormKey"
361
+ ref="formEl"
362
+ :model="queryFormData"
363
+ v-bind="fc"
364
+ @submit="handleFormSubmit"
365
365
  >
366
366
  <a-row :gutter="[6, 12]">
367
367
  <a-col
368
- v-for="(item, idx) in formConfig!.items"
369
- :key="'_col_' + idx"
370
- v-bind="item.col ?? (item.span ? { span: item.span } : defaultItemResponsive)"
368
+ v-for="(item, idx) in formConfig!.items"
369
+ :key="'_col_' + idx"
370
+ v-bind="item.col ?? (item.span ? { span: item.span } : defaultItemResponsive)"
371
371
  >
372
372
  <a-form-item
373
- :key="'_item_' + idx"
374
- :class="`p-content-align-${item.align ?? 'left'}`"
375
- :label="item.title"
376
- :name="item.field"
377
- v-bind="omit(item, ['field', 'title', 'span', 'col', 'itemRender'])"
373
+ :key="'_item_' + idx"
374
+ :class="`p-content-align-${item.align ?? 'left'}`"
375
+ :label="item.title"
376
+ :name="item.field"
377
+ v-bind="omit(item, ['field', 'title', 'span', 'col', 'itemRender'])"
378
378
  >
379
379
  <render-item-slots
380
- v-if="item.slots?.default"
381
- :form-data="queryFormData"
382
- :item="item"
383
- :pass-trigger="() => {}"
380
+ v-if="item.slots?.default"
381
+ :form-data="queryFormData"
382
+ :item="item"
383
+ :pass-trigger="() => {}"
384
384
  />
385
385
  <render-ant-item
386
- v-else-if="item.itemRender?.name"
387
- :key="'_re_' + idx"
388
- :default-handler="{
386
+ v-else-if="item.itemRender?.name"
387
+ :key="'_re_' + idx"
388
+ :default-handler="{
389
389
  reset: () => {
390
390
  resetQueryFormData(!submitOnReset);
391
391
  },
392
392
  }"
393
- :item-render="item.itemRender"
394
- :render-form-params="{ data: queryFormData, field: item.field }"
393
+ :item-render="item.itemRender"
394
+ :render-form-params="{ data: queryFormData, field: item.field }"
395
395
  />
396
396
  <span v-else></span>
397
397
  </a-form-item>
@@ -401,19 +401,19 @@
401
401
  </a-spin>
402
402
  </div>
403
403
  <div
404
- v-if="toolbarConfig"
405
- class="p-toolbar-wrapper flex items-center w-full justify-between p-theme-bg pt-8px px-16px"
404
+ v-if="toolbarConfig"
405
+ class="p-toolbar-wrapper flex items-center w-full justify-between p-theme-bg pt-8px px-16px"
406
406
  >
407
407
  <div class="flex items-center flex-1 gap-4px">
408
408
  <template v-if="toolbarConfig.buttons && toolbarConfig.buttons.length > 0">
409
409
  <a-button
410
- v-for="(btn, idx) in toolbarConfig.buttons"
411
- :key="idx"
412
- :type="btn.type"
413
- size="small"
414
- @click="toolBtnClick(btn.code)"
410
+ v-for="(btn, idx) in toolbarConfig.buttons"
411
+ :key="idx"
412
+ :type="btn.type"
413
+ size="small"
414
+ @click="toolBtnClick(btn.code)"
415
415
  >
416
- <Icon v-if="btn.icon" :icon="btn.icon" />
416
+ <Icon v-if="btn.icon" :icon="btn.icon"/>
417
417
  {{ btn.content }}
418
418
  </a-button>
419
419
  </template>
@@ -421,49 +421,49 @@
421
421
  <span class="flex items-center gap-4px">
422
422
  <template v-if="toolbarConfig.tools && toolbarConfig.tools.length > 0">
423
423
  <a-button
424
- v-for="(tool, idx) in toolbarConfig.tools"
425
- :key="idx"
426
- :type="tool.type"
427
- size="small"
428
- @click="toolToolClick(tool.code)"
424
+ v-for="(tool, idx) in toolbarConfig.tools"
425
+ :key="idx"
426
+ :type="tool.type"
427
+ size="small"
428
+ @click="toolToolClick(tool.code)"
429
429
  >
430
- <Icon :icon="tool.icon" />
430
+ <Icon :icon="tool.icon"/>
431
431
  </a-button>
432
432
  </template>
433
433
  </span>
434
434
  </div>
435
435
  <div :class="`p-pane flex-1 ${enoughSpacing ? 'h-0' : ''} p-${scrollMode ?? 'inner'}-scroll`">
436
436
  <a-table
437
- :key="renderTableKey + '_table'"
438
- :row-key="rowKey ?? 'id'"
439
- ref="tableEl"
440
- :columns="columns.map((c) => cleanCol(c as Recordable))"
441
- :data-source="tableData"
442
- :loading="loading.table"
443
- :pagination="pg"
444
- v-bind="tc"
445
- :scroll="{
437
+ :key="renderTableKey + '_table'"
438
+ :row-key="rowKey ?? 'id'"
439
+ ref="tableEl"
440
+ :columns="columns.map((c) => cleanCol(c as Recordable))"
441
+ :data-source="tableData"
442
+ :loading="loading.table"
443
+ :pagination="pg"
444
+ v-bind="tc"
445
+ :scroll="{
446
446
  x: 'max-content',
447
447
  y: renderHeight,
448
448
  }"
449
- @change="handleTableChange"
449
+ @change="handleTableChange"
450
450
  >
451
451
  <template v-if="slotTitleColumns.length > 0" #headerCell="{ column }">
452
452
  <render-title-slots
453
- v-if="slotTitleColumns.some((s) => column.key && s.field === column.key)"
454
- :key="renderTableKey + '_title_' + dataSeed + '_slot_' + column.key"
455
- :column="slotTitleColumns.find((f) => column.key && f.field === column.key)!"
453
+ v-if="slotTitleColumns.some((s) => column.key && s.field === column.key)"
454
+ :key="renderTableKey + '_title_' + dataSeed + '_slot_' + column.key"
455
+ :column="slotTitleColumns.find((f) => column.key && f.field === column.key)!"
456
456
  />
457
457
  </template>
458
458
  <template v-if="slotDefaultColumns.length > 0" #bodyCell="{ column, record, index }">
459
459
  <render-default-slots
460
- v-if="slotDefaultColumns.some((s) => column.key && s.field === column.key)"
461
- :key="renderTableKey + '_cell_' + dataSeed + '_slot_' + column.key"
462
- :column="slotDefaultColumns.find((f) => column.key && f.field === column.key)!"
463
- :default-handler="{ pick: pickRow }"
464
- :row="record"
465
- :row-index="index"
466
- :table-data="tableData as Recordable[]"
460
+ v-if="slotDefaultColumns.some((s) => column.key && s.field === column.key)"
461
+ :key="renderTableKey + '_cell_' + dataSeed + '_slot_' + column.key"
462
+ :column="slotDefaultColumns.find((f) => column.key && f.field === column.key)!"
463
+ :default-handler="{ pick: pickRow }"
464
+ :row="record"
465
+ :row-index="index"
466
+ :table-data="tableData as Recordable[]"
467
467
  />
468
468
  </template>
469
469
  </a-table>