|
|
@@ -1,9 +1,16 @@
|
|
|
-import { RootState } from "@/store";
|
|
|
import { getUserInfoByIdAPI, userSaveAPI } from "@/store/action/user";
|
|
|
import { SaveUserType } from "@/types";
|
|
|
-import { Button, Form, Input, message, Modal, Popconfirm, Select } from "antd";
|
|
|
-import React, { useCallback, useEffect, useRef } from "react";
|
|
|
-import { useSelector } from "react-redux";
|
|
|
+import { ExhibitTableType } from "@/types/api/exhibit";
|
|
|
+import {
|
|
|
+ Button,
|
|
|
+ Checkbox,
|
|
|
+ Form,
|
|
|
+ Input,
|
|
|
+ message,
|
|
|
+ Modal,
|
|
|
+ Popconfirm,
|
|
|
+} from "antd";
|
|
|
+import React, { useCallback, useEffect, useRef, useState } from "react";
|
|
|
import "./index.css";
|
|
|
|
|
|
type Props = {
|
|
|
@@ -11,41 +18,134 @@ type Props = {
|
|
|
closePage: () => void;
|
|
|
upTableList: () => void;
|
|
|
addTableList: () => void;
|
|
|
+ exhibitList: ExhibitTableType[];
|
|
|
};
|
|
|
|
|
|
-function UserAdd({ id, closePage, upTableList, addTableList }: Props) {
|
|
|
- // 设置表单初始数据(区分编辑和新增)
|
|
|
- const FormBoxRef = useRef<any>({});
|
|
|
+function UserAdd({
|
|
|
+ id,
|
|
|
+ closePage,
|
|
|
+ upTableList,
|
|
|
+ addTableList,
|
|
|
+ exhibitList,
|
|
|
+}: Props) {
|
|
|
+ // -------有关页面权限
|
|
|
+ const [pagePower, serPagePower] = useState([
|
|
|
+ { id: 100, name: "展馆管理", authority: true, type: "exhibition" },
|
|
|
+ { id: 200, name: "馆藏管理", authority: true, type: "goods" },
|
|
|
+ ]);
|
|
|
|
|
|
- const getInfoInAPIFu = useCallback(async (id: number) => {
|
|
|
- const res =await getUserInfoByIdAPI(id)
|
|
|
- FormBoxRef.current.setFieldsValue(res.data)
|
|
|
- console.log("是编辑,在这里发请求拿数据",res);
|
|
|
- }, []);
|
|
|
+ const checkPageChangeFu = useCallback(
|
|
|
+ (checked: boolean, id: number) => {
|
|
|
+ const newList = pagePower.map((v) => {
|
|
|
+ return {
|
|
|
+ ...v,
|
|
|
+ authority: v.id === id ? checked : v.authority,
|
|
|
+ };
|
|
|
+ });
|
|
|
+ serPagePower(newList);
|
|
|
+ },
|
|
|
+ [pagePower]
|
|
|
+ );
|
|
|
+
|
|
|
+ // ----------有关数据权限
|
|
|
+
|
|
|
+ const [dataPower, setDataPower] = useState<ExhibitTableType[]>([]);
|
|
|
+
|
|
|
+ useEffect(() => {
|
|
|
+ if (exhibitList && exhibitList.length) setDataPower(exhibitList);
|
|
|
+ }, [exhibitList]);
|
|
|
+
|
|
|
+ const checkDataChangeFu = useCallback(
|
|
|
+ (checked: boolean, id: number) => {
|
|
|
+ const newList = dataPower.map((v) => {
|
|
|
+ return {
|
|
|
+ ...v,
|
|
|
+ authority: v.id === id ? checked : v.authority,
|
|
|
+ };
|
|
|
+ });
|
|
|
+ setDataPower(newList);
|
|
|
+ },
|
|
|
+ [dataPower]
|
|
|
+ );
|
|
|
|
|
|
// 没有通过校验
|
|
|
const onFinishFailed = useCallback(() => {
|
|
|
// return message.warning("有表单不符号规则!");
|
|
|
}, []);
|
|
|
|
|
|
+ // 设置表单初始数据(区分编辑和新增)
|
|
|
+ const FormBoxRef = useRef<any>({});
|
|
|
+
|
|
|
+ const setPowerFu = useCallback(
|
|
|
+ (pagePowerList: string[], dataPowerList: string[]) => {
|
|
|
+ // 功能权限的回显
|
|
|
+ const newPagePower = pagePower.map((v) => {
|
|
|
+ return {
|
|
|
+ ...v,
|
|
|
+ authority: pagePowerList.includes(v.type) ? true : false,
|
|
|
+ };
|
|
|
+ });
|
|
|
+
|
|
|
+ serPagePower(newPagePower);
|
|
|
+
|
|
|
+ // 数据权限的回显
|
|
|
+
|
|
|
+ const newDataPower = exhibitList.map((v) => {
|
|
|
+ return {
|
|
|
+ ...v,
|
|
|
+ authority: dataPowerList.includes(v.id + "") ? true : false,
|
|
|
+ };
|
|
|
+ });
|
|
|
+ setDataPower(newDataPower);
|
|
|
+ },
|
|
|
+ // eslint-disable-next-line react-hooks/exhaustive-deps
|
|
|
+ []
|
|
|
+ );
|
|
|
+
|
|
|
+ const getInfoInAPIFu = useCallback(
|
|
|
+ async (id: number) => {
|
|
|
+ const res = await getUserInfoByIdAPI(id);
|
|
|
+ FormBoxRef.current.setFieldsValue(res.data);
|
|
|
+
|
|
|
+ // 功能权限的回显
|
|
|
+ const pagePowerList: string[] = res.data.modulePerms.split(",");
|
|
|
+
|
|
|
+ // 数据权限的回显
|
|
|
+ const dataPowerList: string[] = res.data.exhibitionIds.split(",");
|
|
|
+
|
|
|
+ setPowerFu(pagePowerList, dataPowerList);
|
|
|
+
|
|
|
+ console.log("是编辑,在这里发请求拿数据", res);
|
|
|
+ },
|
|
|
+ [setPowerFu]
|
|
|
+ );
|
|
|
+
|
|
|
useEffect(() => {
|
|
|
if (id) getInfoInAPIFu(id);
|
|
|
- else {
|
|
|
- FormBoxRef.current.setFieldsValue({});
|
|
|
- }
|
|
|
+ // else {
|
|
|
+ // FormBoxRef.current.setFieldsValue({});
|
|
|
+ // }
|
|
|
}, [getInfoInAPIFu, id]);
|
|
|
|
|
|
- // 从仓库获取角色下拉列表信息
|
|
|
- const roleList = useSelector(
|
|
|
- (state: RootState) => state.userReducer.roleList
|
|
|
- );
|
|
|
-
|
|
|
// 通过校验点击确定
|
|
|
const onFinish = useCallback(
|
|
|
async (values: any) => {
|
|
|
+ if (pagePower.every((v) => !v.authority))
|
|
|
+ return message.warning("至少勾选一个功能权限!");
|
|
|
+ if (dataPower.every((v) => !v.authority))
|
|
|
+ return message.warning("至少勾选一个数据权限!");
|
|
|
+
|
|
|
const obj: SaveUserType = {
|
|
|
...values,
|
|
|
id: id ? id : null,
|
|
|
+ modulePerms: pagePower
|
|
|
+ .filter((v) => v.authority)
|
|
|
+ .map((v) => v.type)
|
|
|
+ .join(","),
|
|
|
+ exhibitionIds: dataPower
|
|
|
+ .filter((v) => v.authority)
|
|
|
+ .map((v) => v.id)
|
|
|
+ .join(","),
|
|
|
};
|
|
|
|
|
|
const res: any = await userSaveAPI(obj);
|
|
|
@@ -59,7 +159,7 @@ function UserAdd({ id, closePage, upTableList, addTableList }: Props) {
|
|
|
}
|
|
|
console.log("通过校验,点击确定");
|
|
|
},
|
|
|
- [addTableList, closePage, id, upTableList]
|
|
|
+ [addTableList, closePage, dataPower, id, pagePower, upTableList]
|
|
|
);
|
|
|
|
|
|
return (
|
|
|
@@ -87,7 +187,12 @@ function UserAdd({ id, closePage, upTableList, addTableList }: Props) {
|
|
|
rules={[{ required: true, message: "请输入账号名!" }]}
|
|
|
getValueFromEvent={(e) => e.target.value.replace(/\s+/g, "")}
|
|
|
>
|
|
|
- <Input disabled={id} maxLength={15} showCount placeholder="请输入内容" />
|
|
|
+ <Input
|
|
|
+ disabled={id}
|
|
|
+ maxLength={15}
|
|
|
+ showCount
|
|
|
+ placeholder="请输入内容"
|
|
|
+ />
|
|
|
</Form.Item>
|
|
|
|
|
|
<Form.Item
|
|
|
@@ -100,14 +205,6 @@ function UserAdd({ id, closePage, upTableList, addTableList }: Props) {
|
|
|
</Form.Item>
|
|
|
|
|
|
<Form.Item
|
|
|
- label="用户角色"
|
|
|
- name="roleId"
|
|
|
- rules={[{ required: true, message: "请选择角色!" }]}
|
|
|
- >
|
|
|
- <Select placeholder="请选择" options={roleList} />
|
|
|
- </Form.Item>
|
|
|
-
|
|
|
- <Form.Item
|
|
|
label="真实姓名"
|
|
|
name="realName"
|
|
|
rules={[{ required: true, message: "请输入真实姓名!" }]}
|
|
|
@@ -116,6 +213,45 @@ function UserAdd({ id, closePage, upTableList, addTableList }: Props) {
|
|
|
<Input maxLength={8} showCount placeholder="请输入内容" />
|
|
|
</Form.Item>
|
|
|
|
|
|
+ {/* 功能权限 */}
|
|
|
+ <div className="fromBox">
|
|
|
+ <div className="lable">
|
|
|
+ {" "}
|
|
|
+ <span>*</span> 功能权限:
|
|
|
+ </div>
|
|
|
+ {pagePower.map((v) => (
|
|
|
+ <Checkbox
|
|
|
+ className="rowCheck"
|
|
|
+ key={v.id}
|
|
|
+ checked={v.authority}
|
|
|
+ onChange={(e) => checkPageChangeFu(e.target.checked, v.id)}
|
|
|
+ >
|
|
|
+ {v.name}
|
|
|
+ </Checkbox>
|
|
|
+ ))}
|
|
|
+ </div>
|
|
|
+
|
|
|
+ {/* 数据权限 */}
|
|
|
+ <div className="fromBox">
|
|
|
+ <div className="lable">
|
|
|
+ {" "}
|
|
|
+ <span>*</span> 数据权限:
|
|
|
+ </div>
|
|
|
+ <div className="checkBox">
|
|
|
+ {dataPower.map((v) => (
|
|
|
+ <div key={v.id}>
|
|
|
+ <Checkbox
|
|
|
+ className="rowCheck"
|
|
|
+ checked={v.authority}
|
|
|
+ onChange={(e) => checkDataChangeFu(e.target.checked, v.id)}
|
|
|
+ >
|
|
|
+ {v.name}
|
|
|
+ </Checkbox>
|
|
|
+ </div>
|
|
|
+ ))}
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+
|
|
|
{id ? null : <div className="passTit">* 默认密码 123456</div>}
|
|
|
|
|
|
{/* 确定和取消按钮 */}
|