vue-admin-core
Version:
A Component Library for Vue 3
187 lines (182 loc) • 5.22 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', { value: true });
var vue = require('vue');
var vue$1 = require('@formily/vue');
require('../useRequest/index.js');
require('../../formily/index.js');
var core = require('@formily/core');
var lodashEs = require('lodash-es');
var useRequest = require('../useRequest/src/useRequest.js');
var index = require('../../formily/search-form/src/index.js');
var effects = require('../../formily/__builtins__/shared/effects.js');
var index$1 = require('../../formily/submit/src/index.js');
var index$2 = require('../../formily/reset/src/index.js');
const useSearchForm = (request, options, formProps, SchemaField) => {
const app = vue.getCurrentInstance();
const form = vue$1.useForm();
if (!form.value) {
form.value = vue$1.createForm(formProps);
}
const SelfSchemaField = (app == null ? void 0 : app.appContext.components.SchemaField) || SchemaField;
if (!SelfSchemaField) {
throw new Error(`SchemaField \u627E\u4E0D\u5230\uFF0C\u5728\u5168\u5C40\u8BBE\u7F6Eapp.use(setupFormily)\u6216\u8005\u4F20\u5165SchemaField`);
}
const _uid = "searchForm";
const result = useRequest.default(request, options);
const SearchForm = vue.defineComponent({
name: "UseSearchForm",
inheritAttrs: false,
props: {
...index.searchFormProps,
schema: {
type: Object,
required: true
},
components: {
type: Object
},
scope: {
type: Object
},
name: {
type: [String, Number]
},
definitions: {
type: Object
},
onSearch: {
type: Function
},
onReset: {
type: Function
},
addonAfter: {
type: Object
},
addonBefore: {
type: Object
},
searchButtonText: {
type: String,
default: "\u67E5\u8BE2"
},
searchButtonProps: {
type: Object
},
resetButtonText: {
type: String,
default: "\u91CD\u7F6E"
},
resetButtonProps: {
type: Object
}
},
setup(props, {
slots,
expose
}) {
const {
schema,
components,
scope,
name,
...reset
} = props;
const resetLoading = vue.ref(false);
const _form = vue$1.useForm();
if (_form.value)
form.value = _form.value;
const handleReset = async () => {
var _a;
resetLoading.value = true;
if (lodashEs.isFunction(props.onReset)) {
const res2 = await ((_a = props.onReset) == null ? void 0 : _a.call(props));
if (res2) {
await result.runAsync(res2);
}
} else {
await result.runAsync(res);
}
resetLoading.value = false;
};
const handleSearch = async (params) => {
var _a;
if (lodashEs.isFunction(props.onSearch)) {
const res2 = await ((_a = props.onSearch) == null ? void 0 : _a.call(props, params));
if (res2) {
await result.runAsync(res2);
}
} else {
await result.runAsync(params);
}
};
form.value.addEffects("search_form_enter", () => {
effects.inputEnterEffect("*", () => {
form.value.query(_uid).take((field) => {
if (core.isObjectField(field)) {
field.submit(handleSearch);
}
});
});
});
expose({
search: handleSearch,
reset: handleReset
});
vue.watch(() => options == null ? void 0 : options.defaultParams, (value) => {
result.runAsync({
...form.value.values[_uid],
...value == null ? void 0 : value[0]
});
}, {
deep: true
});
const actions = () => vue.createVNode(vue$1.FragmentComponent, null, {
default: () => [vue.createVNode(index$1.Submit, vue.mergeProps(props.searchButtonProps, {
"onSubmit": handleSearch
}), {
default: () => [props.searchButtonText]
}), vue.createVNode(index$2.Reset, vue.mergeProps({
"resetValidateSuccess": handleReset
}, props.resetButtonProps, {
"loading": resetLoading.value
}), {
default: () => [props.resetButtonText]
})]
});
const _schema = {
type: "object",
definitions: props.definitions,
properties: {
[_uid]: {
type: "object",
"x-component": "SearchForm",
"x-component-props": reset,
"x-content": {
actions: slots.actions ? slots.actions : actions
},
properties: schema
}
}
};
return () => vue.createVNode(vue$1.FormProvider, {
"form": form.value
}, {
default: () => [vue.createVNode(SelfSchemaField, {
"schema": _schema,
"components": components,
"scope": scope,
"name": name
}, null)]
});
}
});
return {
form,
SearchForm,
request: result
};
};
exports.default = useSearchForm;
exports.useSearchForm = useSearchForm;
//# sourceMappingURL=useSearchForm.js.map