import type { CreateCrudOptions } from "@fast-crud/fast-crud"; import dayjs from "dayjs"; import { ElMessage } from "element-plus"; import { http } from "@/modules/admin/api/http"; import { toSearchParams } from "@/modules/admin/utils/list-query"; export type PermissionRow = { id: number; name: string; code: string; parentid: number; route?: string | null; description?: string | null; sort: number; createtime: string; updatetime: string; children?: PermissionRow[]; }; export const createPermissionCrudOptions: CreateCrudOptions = () => { return { crudOptions: { pagination: { show: false }, search: { show: true, options: { layout: 'inline', }, expand: false, }, tree: { enable: true, childrenKey: "children", parentKey: "parentid", hasChildField: "children", }, request: { transformQuery: ({ form }) => toSearchParams(form as Record, ["name", "code"]), pageRequest: async (_query) => { const { data } = await http.get("/permissions/tree"); return data; }, transformRes: ({ res }) => { const records = Array.isArray(res) ? res : []; return { currentPage: 1, pageSize: Math.max(records.length, 1), total: records.length, records, }; }, addRequest: async ({ form }) => { await http.post("/permissions/", form); ElMessage.success({ message: "添加成功", duration: 5000 }); }, editRequest: async ({ form, row }) => { if (!row) return; await http.put(`/permissions/${row.id}`, form); ElMessage.success({ message: "修改成功", duration: 5000 }); }, delRequest: async ({ row }) => { if (!row) return; await http.delete(`/permissions/${row.id}`); ElMessage.success({ message: "删除成功", duration: 5000 }); }, onSuccess: ({ action }: { action: string }) => { if (action === "add") { ElMessage.success({ message: "添加成功", duration: 5000 }); } else if (action === "edit") { ElMessage.success({ message: "修改成功", duration: 5000 }); } }, onError: (error: any) => { let message = "操作失败"; if (error.response?.data) { const data = error.response.data; if (data.message) { message = data.message; } else if (data.detail) { message = typeof data.detail === "string" ? data.detail : "操作失败"; } } ElMessage.error({ message, duration: 5000 }); }, }, table: { remove: { showSuccessNotification: false, }, }, rowHandle: { buttons: { edit: { text: "编辑" }, remove: { text: "删除" }, }, }, columns: { id: { title: "ID", key: "id", type: "number", column: { width: 70 }, form: { show: false }, }, name: { title: "名称", key: "name", type: "text", search: { show: true }, form: { rules: [{ required: true, message: "必填" }], }, }, code: { title: "编码", key: "code", type: "text", search: { show: true }, form: { rules: [{ required: true, message: "必填" }], }, }, parentid: { title: "父级ID", key: "parentid", type: "number", form: { value: 0, rules: [{ required: true, message: "必填" }], }, }, description: { title: "描述", key: "description", type: "textarea", column: { show: false }, }, route: { title: "路由", key: "route", type: "text", column: { width: 200 }, form: { placeholder: "如:/admin/users", }, }, sort: { title: "排序", key: "sort", type: "number", column: { width: 80, align: "center" }, form: { value: 0, rules: [{ required: true, message: "必填" }], helper: "数字越小,排序越靠前", }, }, createtime: { title: "创建时间", key: "createtime", type: "text", form: { show: false }, column: { width: 170 }, valueBuilder({ value, row, key }) { if (!row || value == null) return; (row as Record)[key as string] = dayjs(value).format( "YYYY-MM-DD HH:mm:ss", ); }, }, updatetime: { title: "更新时间", key: "updatetime", type: "text", form: { show: false }, column: { width: 170 }, valueBuilder({ value, row, key }) { if (!row || value == null) return; (row as Record)[key as string] = dayjs(value).format( "YYYY-MM-DD HH:mm:ss", ); }, }, }, }, }; };