|
@@ -24,6 +24,7 @@
|
|
|
import { cloneDeep, upperFirst } from 'lodash-es';
|
|
|
import { useItemLabelWidth } from '../hooks/useLabelWidth';
|
|
|
import { useI18n } from '@/hooks/web/useI18n';
|
|
|
+ import { useDebounceFn } from '@vueuse/core';
|
|
|
|
|
|
export default defineComponent({
|
|
|
name: 'BasicFormItem',
|
|
@@ -270,6 +271,8 @@
|
|
|
component,
|
|
|
field,
|
|
|
changeEvent = 'change',
|
|
|
+ watchEventNames = ['search', 'change'],
|
|
|
+ enableWatchEvent = true,
|
|
|
valueField,
|
|
|
} = props.schema;
|
|
|
|
|
@@ -277,6 +280,27 @@
|
|
|
|
|
|
const eventKey = `on${upperFirst(changeEvent)}`;
|
|
|
|
|
|
+ const { autoSetPlaceHolder, size, watchEvent } = props.formProps;
|
|
|
+ let eventNames = {};
|
|
|
+ if (watchEvent && enableWatchEvent) {
|
|
|
+ // table search 开启才触发事件
|
|
|
+ let immediateEvents = ['search']; // 立即执行的事件
|
|
|
+ watchEventNames.forEach((item) => {
|
|
|
+ let timer: number = 500;
|
|
|
+ if (immediateEvents.includes(item)) {
|
|
|
+ timer = 0;
|
|
|
+ }
|
|
|
+ eventNames[`on${upperFirst(item)}`] = useDebounceFn(
|
|
|
+ (...args: Nullable<Recordable<any>>[]) => {
|
|
|
+ // todo 后续需要优化input中文输入的问题
|
|
|
+ console.log(args);
|
|
|
+ const { reload = () => {} } = props.tableAction || {};
|
|
|
+ reload();
|
|
|
+ },
|
|
|
+ timer,
|
|
|
+ );
|
|
|
+ });
|
|
|
+ }
|
|
|
const on = {
|
|
|
[eventKey]: (...args: Nullable<Recordable<any>>[]) => {
|
|
|
const [e] = args;
|
|
@@ -290,7 +314,6 @@
|
|
|
};
|
|
|
const Comp = componentMap.get(component) as ReturnType<typeof defineComponent>;
|
|
|
|
|
|
- const { autoSetPlaceHolder, size } = props.formProps;
|
|
|
const propsData: Recordable<any> = {
|
|
|
allowClear: true,
|
|
|
size,
|
|
@@ -315,6 +338,7 @@
|
|
|
const compAttr: Recordable<any> = {
|
|
|
...propsData,
|
|
|
...on,
|
|
|
+ ...eventNames,
|
|
|
...bindValue,
|
|
|
};
|
|
|
|