UNPKG

@zhsz/cool-design-crud

Version:

227 lines (226 loc) 6.02 kB
"use strict"; Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); const index = require("../../utils/index.js"); const emitter = require("../../emitter.js"); const tdesignVueNext = require("tdesign-vue-next"); const vue = require("vue"); require("../../utils/test.js"); const core = require("../../hooks/core.js"); require("@formily/core"); require("lodash-es"); require("../../hooks/table.js"); const merge = require("merge"); function useHelper({ mitt, config, crud }) { const refreshRd = vue.ref(0); function getPermission(key) { return Boolean(crud.permission[key]); } function paramsReplace(params) { const { pagination, search, sort } = crud.dict; const a = { ...params }; const b = { ...pagination, ...search, ...sort }; for (const i in b) { if (a[i]) { if (i !== b[i]) { a[`_${b[i]}`] = a[i]; delete a[i]; } } } for (const i in a) { if (i[0] === "_") { a[i.substr(1)] = a[i]; delete a[i]; } } return a; } function refresh(params) { const { service, dict } = crud; return new Promise((r1) => { const reqParams = paramsReplace(Object.assign(crud.params, params)); crud.loading = true; const rd = refreshRd.value = Math.random(); function done() { crud.loading = false; r1(true); } function render(list, pagination) { mitt.emit("crud.refresh", { list, pagination }); done(); } const next = (params2) => { return new Promise(async (resolve, reject) => { await service[dict.api.page](params2).then((res) => { if (rd !== refreshRd.value) { return false; } if (index.isString(res)) { return reject(`service[page] response error`); } if (index.isArray(res)) { render(res); } else if (index.isObject(res)) { render(res.rows, { page: res.pageNum, size: res.pageSize, total: Number(res.total) }); } resolve(res); done(); }).catch((err) => { reject(err); done(); }); r1(true); }); }; if (config.onRefresh) { config.onRefresh(reqParams, { next, done, render }); } else { next(reqParams); } }); } function rowInfo(data) { mitt.emit("crud.proxy", { name: "info", data: [data] }); } function rowAdd() { mitt.emit("crud.proxy", { name: "add" }); } function rowEdit(data) { mitt.emit("crud.proxy", { name: "edit", data: [data] }); } function rowAppend(data) { mitt.emit("crud.proxy", { name: "append", data: [data] }); } function rowClose() { mitt.emit("crud.proxy", { name: "close" }); } function rowDelete(...selection) { const { service, dict } = crud; const params = {}; let method = ""; if (selection.length === 1) { params.id = selection.map((e) => e[dict.primaryId])[0]; method = dict.api.delete; } else if (selection.length > 1) { params.ids = selection.map((e) => e[dict.primaryId]); method = dict.api.batDelete; } async function next(data) { const confirmBtn = vue.ref({ content: dict.label.confirm, theme: "primary", loading: false }); const cancelBtn = vue.ref({ content: dict.label.close }); return new Promise((resolve, reject) => { const confirmDia = tdesignVueNext.DialogPlugin.confirm({ theme: "warning", header: dict.label.tips, body: dict.label.deleteConfirm, confirmBtn: confirmBtn.value, cancelBtn: cancelBtn.value, onConfirm: async () => { confirmBtn.value.loading = true; confirmBtn.value.content = "保存中..."; confirmBtn.value.disabled = true; await service[method]({ ...params, ...data }).then((res) => { tdesignVueNext.MessagePlugin.success(dict.label.deleteSuccess); refresh(); resolve(res); }).catch((err) => { reject(err); }); confirmBtn.value.content = dict.label.confirm; confirmBtn.value.loading = false; confirmBtn.value.disabled = false; confirmDia.hide(); }, onClose: () => { confirmDia.hide(); } }); }); } if (config.onDelete) { config.onDelete(selection, { next }); } else { next(params); } } function proxy(name, data) { mitt.emit("crud.proxy", { name, data }); } function getParams() { return crud.params; } function set(key, value) { switch (key) { case "service": Object.assign(crud.service, value); crud.service.__proto__ = value.__proto__; if (value._permission) { for (const i in value._permission) { crud.permission[i] = value._permission[i]; } } break; case "permission": if (index.isFunction(value)) { merge(crud.permission, value(crud)); } else { merge(crud.permission, value); } break; default: index.deepMerge(crud[key], value); break; } } function on(name, callback) { emitter.emitter.on(`${name}-${crud.id}`, callback); } set("dict", config.dict); set("service", config.service); set("permission", config.permission); core.useEventListener("resize", () => { mitt.emit("crud.resize"); }); return { proxy, set, on, rowInfo, rowAdd, rowEdit, rowAppend, rowDelete, rowClose, refresh, getPermission, paramsReplace, getParams }; } exports.useHelper = useHelper;