@zhsz/cool-design-crud
Version:
227 lines (226 loc) • 6.02 kB
JavaScript
;
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;