import { ref, reactive, toRaw, computed } from "vue"; import { Form, message } from "ant-design-vue"; import { ValidateErrorEntity } from "ant-design-vue/es/form/interface"; import { date2StrUtil, arr2ObjUtil } from "@/utils"; import { addAPiHttp, updateApisHttp } from "../apis"; import { IApi, Method, Status } from "../types"; export const useAddEditApi = (successCb: () => void) => { const formRef = ref(null); const formState = reactive({ namespace: "", // 系统 version: "", // 版本 module: "", // 模块名 url: "", // url prefix: "/", // 前缀(全局、局部) 默认是/ params: [{ key: "", value: "" }], //参数及类型 method: Method.GET, //请求方式 headers: [{ key: "", value: "" }], //请求头(请求头可以全局设置、可以是局部的,局部权重大于全局的) result: "", //返回结果 status: Status.NORMAL, // 状态(已删除(逻辑删除)、待废弃、废弃、正常) desc: "", // 描述 }); // 添加列表项 const { loading: addLoading, request } = addAPiHttp(); // 编辑列表项 const { loading: updateLoading, request: requestUpdate } = updateApisHttp(); const loading = computed(() => { return addLoading.value || updateLoading.value }) /** *添加新的请求参数项或请求头 */ const handleAddItem = (type: "params" | "headers") => { formState[type]!.push({ value: "", key: "", }); }; /** * 删除索引为index请求参数项或请求头 */ const handleRemoveItem = (type: "params" | "headers", index: number) => { formState[type] = formState[type]?.filter((_, i) => i !== index); }; /** * 提交对话框 */ const handleSubmit = () => { formRef .value!.validate() .then(() => { const { _id, namespace, version, module, url, prefix, params, method, headers, result, status, desc, } = toRaw(formState); const submitParams = { [_id ? '_id' : '']: _id, namespace, version, module, url, prefix, method, result, status, desc, params: arr2ObjUtil(params), headers: arr2ObjUtil(headers), creator: "admin", create_time: date2StrUtil(new Date()), lastModifier: "admin", lastModifyTime: date2StrUtil(new Date()), }; !_id ? request(() => { message.success("添加成功"); successCb && successCb(); }, submitParams) : requestUpdate(() => { message.success("编辑成功"); successCb && successCb(); }, submitParams); }) .catch((err: ValidateErrorEntity) => { console.log("useAddEditApi:" + err); }); }; return { formRef, loading, formState, handleAddItem, handleRemoveItem, handleSubmit, }; };