import http from '/admin/support/http' import { ref, unref, watch } from 'vue' import { Code } from '/admin/enum/app' import Message from '/admin/support/message' import { FormInstance } from 'element-plus' import { AxiosResponse } from 'axios' import { isFunction } from '/admin/support/helper' // get table list export function useCreate(path: string, id: string | number | null = null, _formData: object = {}) { const formData = ref(_formData) const loading = ref() const isClose = ref(false) // 创建前 hook const beforeCreate = ref() // 更新前 hook const beforeUpdate = ref() const afterCreate = ref() const afterUpdate = ref() // store function store(path: string, id: string | number | null = null) { loading.value = true let promise: Promise | null = null if (id) { if (isFunction(beforeUpdate.value)) { beforeUpdate.value() } promise = http.put(path + '/' + id, unref(formData)) } else { if (isFunction(beforeCreate.value)) { beforeCreate.value() } promise = http.post(path, unref(formData)) } promise .then(r => { if (r.data.code === Code.SUCCESS) { isClose.value = true Message.success(r.data.message) // 创建后的操作 if (!id && isFunction(afterCreate.value)) { afterCreate.value() } // 更新后的操作 if (id && isFunction(afterUpdate.value)) { afterUpdate.value() } } else { Message.error(r.data.message) } }) .finally(() => { loading.value = false }) } const form = ref() const submitForm = (formEl: FormInstance | undefined) => { if (!formEl) return formEl .validate(valid => { if (valid) { store(path, id) } else { loading.value = false } }) .then(() => {}) } const close = (func: Function) => { watch(isClose, function (value) { if (value && isFunction(func)) { func() } }) } return { formData, loading, form, submitForm, close, beforeCreate, beforeUpdate, afterCreate, afterUpdate } }