| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- import type { ComputedRef, Slots } from 'vue';
- import type { BasicTableProps, FetchParams } from '../types/table';
- import { unref, computed } from 'vue';
- import type { FormProps } from '/@/components/Form';
- import { isFunction } from '/@/utils/is';
- export function useTableForm(
- propsRef: ComputedRef<BasicTableProps>,
- slots: Slots,
- fetch: (opt?: FetchParams | undefined) => Promise<void>
- ) {
- const getFormProps = computed(
- (): Partial<FormProps> => {
- const { formConfig } = unref(propsRef);
- return {
- showAdvancedButton: true,
- ...formConfig,
- compact: true,
- };
- }
- );
- const getFormSlotKeys = computed(() => {
- const keys = Object.keys(slots);
- return keys.map((item) => (item.startsWith('form-') ? item : null)).filter(Boolean);
- });
- function replaceFormSlotKey(key: string) {
- if (!key) return '';
- return key?.replace?.(/form\-/, '') ?? '';
- }
- function handleSearchInfoChange(info: Recordable) {
- const { handleSearchInfoFn } = unref(propsRef);
- if (handleSearchInfoFn && isFunction(handleSearchInfoFn)) {
- info = handleSearchInfoFn(info) || info;
- }
- fetch({ searchInfo: info, page: 1 });
- }
- return {
- getFormProps,
- replaceFormSlotKey,
- getFormSlotKeys,
- handleSearchInfoChange,
- };
- }
|