import React, { useEffect, useRef, useReducer } from "react"; import { Button } from "antd"; import AutoTable from "@/components/AutoTable"; import getPrem from "@/utils/getPrem"; //权限判断fn import InitForm from "@/components/InitForm"; import { useRequest } from "umi"; import defaultFields from "./fields"; import { doFetch } from "@/utils/doFetch"; import DrawInitForm from "@/components/DrawInitForm"; const initState = { vs: false, fields: {}, iftype: {}, curitem: {}, }; function reducer(state, action) { let { type } = action, newState = {}; switch (type) { case "add": newState = { ...state, vs: true, iftype: { title: action.title, val: type, }, fields: { ...action.fields }, curitem: action.curitem, }; break; case "edit": newState = { ...state, vs: true, iftype: { title: action.title, val: type, }, fields: { ...action.fields }, curitem: action.curitem, }; break; case "close": newState = { vs: false, fields: {}, iftype: {}, curitem: {}, }; break; } return newState; } const Dic = (props) => { let actionRef = useRef(), ChildRef = null; function reload() { actionRef?.current?.reload(); ChildRef?.onRefresh(); } const { run, loading } = useRequest(doFetch, { manual: true, formatResult: (res) => res, onSuccess: (result, params) => { if (result.code == "0000") { reload(); dispatch({ type: "close" }); } }, }), [state, dispatch] = useReducer(reducer, initState), { vs, fields, iftype, curitem } = state, columns = [ { title: "数据编号", dataIndex: "no", key: "dicKey", }, { title: "数据名称", dataIndex: "title", key: "dicName", }, { title: "描述", dataIndex: "description", key: "description", search: false, }, { title: "操作", dataIndex: "option_dataindex", key: "option_dataindex", valueType: "option", width: 135, render: (text, row, _, action) => extraAction(text, row, _, action), }, ]; function extraAction(text, record, _, action) { /** * type 1初始化 2自定义 * isBasis 有无新增 1没有 2有 */ let ifs = record.type == 1, ifsc = record.isBasis == 2; return [ ifs && ifsc&& getPrem("sysDepartment_save", action, "新增", () => { for (let i in defaultFields) { defaultFields[i].value = null; } dispatch({ type: "add", fields: defaultFields, curitem: record, title: `新增 ${record.title} 下的数据字典`, }); }), !ifs && getPrem("sysDepartment_save", action, "修改", () => { for (let i in defaultFields) { defaultFields[i].value = record[i]; if (i == "dicName") { defaultFields[i].value = record.title; } if (i == "dicDescription") { defaultFields[i].value = record.description; } } dispatch({ type: "edit", fields: defaultFields, curitem: record, title: `修改${record.title}`, }); }), !ifs && getPrem("sysDepartment_deleteById", action, "删除", null, { title: "确认删除该数据字典?", onConfirm: () => { run({ url: "/ngic-base-business/sysDic/deleteById", params: { id: record.key }, }); }, }), ]; } let saveData = (values, fn) => { let newfields = JSON.parse(JSON.stringify(values)); //新增&修改 let difrid = iftype.val == "edit" ? { id: curitem.key } : { parentId: curitem.key }; run({ url: "/ngic-base-business/sysDic/save", params: { ...newfields, ...difrid }, }); }; return ( <div> <AutoTable pagetitle={props.route.name} //页面标题 columns={columns} path="/ngic-base-business/sysDic/queryTreeList" actionRef={actionRef} onRef={(node) => (ChildRef = node)} rowKey="key" ></AutoTable> <DrawInitForm title={iftype.title} visible={vs} onClose={() => dispatch({ type: "close" })} footer={false} destroyOnClose={true} fields={fields} submitData={(values) => { saveData(values); }} onChange={(changedValues, allValues) => { //联动操作 }} submitting={loading || !vs} ></DrawInitForm> </div> ); }; export default Dic;