mirror of
https://github.com/yangjian102621/geekai.git
synced 2025-11-13 04:33:42 +08:00
feat(ui): 函数管理
This commit is contained in:
29
gpt-vue/projects/vue-admin/src/composables/useSubmit.ts
Normal file
29
gpt-vue/projects/vue-admin/src/composables/useSubmit.ts
Normal file
@@ -0,0 +1,29 @@
|
||||
import { ref, reactive, unref } from "vue";
|
||||
import { Message } from "@arco-design/web-vue";
|
||||
import type { BaseResponse } from "@gpt-vue/packages/type";
|
||||
function useSubmit<T extends Record<string, unknown>, R = any>(defaultData: T) {
|
||||
const formRef = ref();
|
||||
const formData = reactive<T>({ ...defaultData });
|
||||
const submitting = ref(false);
|
||||
|
||||
const handleSubmit = async (api: (params?: any) => Promise<BaseResponse<R>>, params) => {
|
||||
submitting.value = true;
|
||||
try {
|
||||
const hasError = await formRef.value?.validate();
|
||||
if (!hasError) {
|
||||
const { data, message } = await api({ ...formData, ...unref(params) });
|
||||
Message.success(message);
|
||||
return Promise.resolve({ formData, data });
|
||||
}
|
||||
return Promise.reject(false);
|
||||
} catch (err) {
|
||||
return Promise.reject(err);
|
||||
} finally {
|
||||
submitting.value = false;
|
||||
}
|
||||
};
|
||||
|
||||
return { formRef, formData, handleSubmit, submitting };
|
||||
}
|
||||
|
||||
export default useSubmit;
|
||||
Reference in New Issue
Block a user