import React, { useEffect, useRef, useReducer } from "react"; import { Button, Tooltip, Row, Divider, message } from "antd"; import AutoTable from "@/components/AutoTable"; import getPrem from "@/utils/getPrem"; //权限判断fn import { useRequest } from "umi"; import defaultFields from "./fields"; import { doFetch } from "@/utils/doFetch"; import DrawInitForm from "@/components/DrawInitForm"; import { userDetails, userCheckDetails } from "@/utils/detailTotalCard"; import Details from "@/components/Details"; import { userSelect } from "@/services/system"; const initState = { vs: false, fields: {}, iftype: {}, curitem: {}, detail: { dataSource: {}, totalCard: [], }, visible: false, extraparams: { orderType: "1", }, }, tabList = [ { key: "1", tab: "正式用户", }, { key: "2", tab: "用户申请", }, ]; function reducer(state, action) { let { type } = action, newState = {}; switch (type) { case "add": newState = { ...state, vs: true, iftype: { title: "新增用户", val: type, }, fields: { ...action.fields }, }; break; case "edit": newState = { ...state, vs: true, iftype: { title: "编辑用户", val: type, }, fields: { ...action.fields }, curitem: action.curitem, }; break; case "audit": newState = { ...state, vs: true, iftype: { title: "审批用户", val: type, }, fields: { ...action.fields }, curitem: action.curitem, }; break; case "see": newState = { ...state, detail: { dataSource: action.dataSource, totalCard: action.totalCard, }, visible: true, }; break; case "start": newState = { ...state, extraparams: { orderType: action.tabKey, }, }; break; case "close": newState = { ...state, vs: false, fields: {}, iftype: {}, curitem: {}, detail: { dataSource: {}, totalCard: [], }, visible: false, }; break; } return newState; } const Staff = (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, detail, visible, extraparams } = state, columns = [ { title: "用户名", dataIndex: "accountName", key: "accountName", }, { title: "姓名", dataIndex: "userName", key: "userName", render: (_, row) => { return ( <Tooltip title={row.userName}> <a className="table-cell" onClick={() => { doFetch({ url: "/ngic-auth/sysUser/query/detail", params: { id: row.id }, }).then((res) => { if (res.code == "0000") { let dataSource = res?.data?.data ?? {}, totalCard = [...userDetails]; dataSource.genderName = dataSource.gender == 1 ? "男" : dataSource.gender == 2 ? "女" : "-"; dispatch({ type: "see", dataSource, totalCard }); } }); }} > {row.userName} </a> </Tooltip> ); }, }, { title: "组织", dataIndex: "departmentName", key: "departmentName", }, { title: "工厂", dataIndex: "factoryName", key: "factoryName", }, { title: "负责仓库", dataIndex: "chargeStoreName", key: "chargeStoreName", }, { title: "角色", dataIndex: "roleName", key: "roleName", }, { title: "联系电话", dataIndex: "telephone", key: "telephone", }, { title: "操作", dataIndex: "option_dataindex", key: "option_dataindex", valueType: "option", width: 225, render: (text, row, _, action) => extraAction(text, row, _, action), }, ], columnsc = [ { title: "用户名", dataIndex: "accountName", key: "accountName", }, { title: "姓名", dataIndex: "userName", key: "userName", render: (_, row) => { return ( <Tooltip title={row.userName}> <a className="table-cell" onClick={() => { doFetch({ url: "/ngic-auth/sysAccountApply/queryById", params: { id: row.id }, }).then((res) => { if (res.code == "0000") { let dataSource = res?.data?.data ?? {}, totalCard = [...userCheckDetails]; dataSource.genderName = dataSource.gender == 1 ? "男" : dataSource.gender == 2 ? "女" : "-"; dispatch({ type: "see", dataSource, totalCard }); } }); }} > {row.userName} </a> </Tooltip> ); }, }, { title: "组织", dataIndex: "departmentName", key: "departmentName", }, { title: "工厂", dataIndex: "factoryName", key: "factoryName", }, { title: "负责仓库", dataIndex: "chargeStoreName", key: "chargeStoreName", }, { title: "角色", dataIndex: "roleName", key: "roleName", }, { title: "联系电话", dataIndex: "telephone", key: "telephone", }, { title: "审批结果", dataIndex: "auditResultName", key: "auditResultName", valueType: "select", options: [ { label: "通过", value: 1, }, { label: "不通过", value: 2, }, ], formItemProps: { name: "auditResult", }, }, { title: "工单状态", dataIndex: "statusName", key: "statusName", valueType: "select", options: [ { label: "待审批", value: 1, }, { label: "已审批", value: 2, }, ], formItemProps: { name: "status", }, }, { title: "操作", dataIndex: "option_dataindex", key: "option_dataindex", valueType: "option", width: 150, render: (text, row, _, action) => extraAction(text, row, _, action), }, ]; function extraAction(text, record, _, action) { return [ extraparams.orderType == "1" && getPrem("sysUser_restPassword", action, "重置密码", null, { title: "确认重置密码?", onConfirm: () => { doFetch({ url: "/ngic-auth/sysUser/restPassword", params: { id: record.id }, }).then((res) => { if (res.code == "0000") { message.success(res.msg); reload(); } }); }, }), extraparams.orderType == "1" && getPrem("sysDepartment_save", action, "修改", () => { doFetch({ url: "/ngic-auth/sysUser/query/detail", params: { id: record.id }, }).then((res) => { if (res.code == "0000") { let data = res?.data?.data ?? {}; for (let i in defaultFields) { defaultFields[i].value = data[i]; if (i == "parentId") { defaultFields[i].belinked = { options: { database: userSelect, params: { id: record.id }, }, }; } } dispatch({ type: "edit", fields: { ...defaultFields }, curitem: data, }); } }); }), extraparams.orderType == "1" && getPrem("sysDepartment_deleteById", action, "删除", null, { title: "确认删除该用户?", onConfirm: () => { run({ url: "/ngic-auth/sysUser/deleteById", params: { id: record.id }, }); }, }), extraparams.orderType == "2" && record.status == 1 && getPrem("sysDepartment_save", action, "审批", () => { doFetch({ url: "/ngic-auth/sysAccountApply/queryById", params: { id: record.id }, }).then((res) => { if (res.code == "0000") { let data = res?.data?.data ?? {}; for (let i in defaultFields) { defaultFields[i].value = data[i]; if (i == "parentId") { defaultFields[i].belinked = { options: { database: userSelect, params: { id: record.id }, }, }; } } let newParams = { remark: { value: data.remark, type: "textarea", title: "备注", name: ["remark"], required: false, col: { span: 24 }, }, applyTime: { value: data.applyTime, type: "datepicker", title: "申请时间", name: ["applyTime"], required: false, disabled: true, }, auditResult: { value: null, type: "select", title: "审批结果", name: ["auditResult"], required: true, options: [ { label: "通过", value: 1, }, { label: "不通过", value: 2, }, ], linked: true, }, auditOpinion: { value: null, type: "textarea", title: "审批意见", name: ["auditOpinion"], required: true, col: { span: 24 }, belinked: { hides: [ { name: "auditResult", equalvalue: [1, null], required: true, }, ], }, }, }; dispatch({ type: "audit", fields: { ...defaultFields, ...newParams }, curitem: data, }); } }); }), ]; } let saveData = (values, fn) => { let newfields = JSON.parse(JSON.stringify(values)); //新增&修改 let difrid = iftype.val != "add" ? { id: curitem.id } : {}; run({ url: iftype.val == "audit" ? "/ngic-auth/sysAccountApply/audit" : "/ngic-auth/sysUser/save", params: { ...newfields, ...difrid }, }); }; let extrarender = [ <Button disabled={!getPrem("sysDepartment_save", "ifs")} type="primary" onClick={() => { for (let i in defaultFields) { defaultFields[i].value = i.indexOf("List") != -1 ? [] : ""; } dispatch({ type: "add", fields: defaultFields }); }} > 新增 </Button>, ]; return ( <div> {extraparams.orderType == "1" && ( <AutoTable pagetitle={props.route.name} //页面标题 pageextra={extrarender} //页面操作 新增or批量删除 columns={columns} actionRef={actionRef} onRef={(node) => (ChildRef = node)} tabList={tabList} activeTabKey={extraparams.orderType} onTabChange={(key) => { dispatch({ type: "start", tabKey: key }); }} path={"/ngic-auth/sysUser/query/page"} ></AutoTable> )} {extraparams.orderType == "2" && ( <AutoTable pagetitle={props.route.name} //页面标题 columns={columnsc} actionRef={actionRef} onRef={(node) => (ChildRef = node)} tabList={tabList} activeTabKey={extraparams.orderType} onTabChange={(key) => { dispatch({ type: "start", tabKey: key }); }} path={"/ngic-auth/sysAccountApply/queryList"} ></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} width={"60%"} ></DrawInitForm> <Details title="用户详情" visible={visible} onClose={() => dispatch({ type: "close" })} footer={false} destroyOnClose={true} width={"100%"} {...detail} ></Details> </div> ); }; export default Staff;