import { reactive, getCurrentInstance } from "vue"; // requestUrl // import ApiUrl from "@/api/requestUrl"; // API // import { TableData, CommonApi } from "@/api/common"; import { configHook } from "./configHook"; import { ElMessage } from "element-plus"; export function requestHook() { const { config, configInit } = configHook(); // 获取实例上下文 const { proxy } = getCurrentInstance(); let request_config = { has: true, // 是否请求 url: "", // 请求模块 method: "post", // 请求类型 data: {}, // 请求参数 delete_key: "", // 删除接口的KEY search_params: {}, }; const table_data = reactive({ data: [], data_id: "", current_page: 0, total: 0, loading: false, }); /** * @returns 列表数据请求 */ const loadData = () => { // 判断条件是否请求接口 if (!request_config.has) { return false; } if (!request_config.url) { return false; } // 参数 const url = ApiUrl[request_config.url]?.list?.url; const method = ApiUrl[request_config.url]?.list?.method || "post"; const data = { ...request_config.data, ...request_config.search_params }; if (!url) { console.log("请求地址不存在"); return Promise.reject(); } const request_data = { url, method, data, }; // 加载状态 table_data.loading = true; return new Promise((resolve, reject) => { // TableData(request_data) // .then((response) => { // let response_data = response.data.data; // // 是否格式化数据 // if ( // request_config.format_data && // Object.prototype.toString.call(request_config.format_data) === // "[object Function]" // ) { // response_data = request_config.format_data(response.data.data); // } // console.log(response_data); // table_data.data = response_data; // table_data.total = response.data.total; // table_data.current_page = response.data.current_page; // // 取消加载状态 // table_data.loading = false; // resolve(response.data); // }) // .catch((error) => { // reject(); // // 取消加载状态 // table_data.loading = false; // }); }); }; const requestData = (data = {}, type = "init") => { // 初始化逻辑 if (type === "init") { request_config = { ...request_config, ...data }; } // 分页逻辑 if (type === "page") { request_config.data = { ...request_config.data, ...data }; } // 搜索 if (type === "search") { request_config.data.pageNumber = 1; request_config.data.pageSize = 10; request_config.search_params = data; } // 请求数据 return loadData(); }; /** * * @param {Object} data * @description 手动请求 */ const handlerRequestData = (data = {}) => { table_data.params_data = data; loadData(); }; /** * * @param { String、Array } value * @description 存储数据ID,作用于删除接口使用 * 删除接口 */ const saveDataId = (value) => { const isArray = Array.isArray(value); if (!isArray) { table_data.data_id = value[request_config.delete_key]; } else { table_data.data_id = value.length > 0 ? value.map((item) => item[request_config.delete_key]).join() : ""; } console.log(table_data.data_id); }; /** * * @description 删除动作的确认弹窗 */ const handlerDeleteComfirm = () => { proxy.deleteConfirm({ title: "删除", message: "确认删除当前数据吗?", thenFun: () => { handlerDelete(); }, }); }; const handlerDelete = () => { const url = ApiUrl?.[request_config.url]?.delete?.url; const method = ApiUrl?.[request_config.url]?.delete?.method || "post"; if (!url) { console.log("未配置删除接口参数"); return false; } // 参数 const request_data = { url, method: method, data: { [request_config.delete_key]: table_data.data_id }, }; // CommonApi(request_data) // .then((response) => { // // 成功提示 // proxy.$message({ // message: response.message, // type: "success", // }); // loadData(); // table_data.data_id = ""; // proxy.deleteConfirmClose(); // }) // .catch((error) => { // proxy.confirmButtonLoading(false); // }); }; return { table_data, requestData, handlerDelete, saveDataId, handlerDeleteComfirm, }; }