Browse Source

部分功能优化

wyq 3 years ago
parent
commit
f253dadacb

+ 4 - 0
src/api/request.js

@@ -61,6 +61,10 @@ const request = {
     deleteMenu: '/security-center/funcManage/deleteMenu',//删除
     getMenuById: '/security-center/funcManage/getMenuById',//获取详情
     updateMenu: '/security-center/funcManage/updateMenu',//修改
+
+    //日志管理
+    getOperationLog: '/security-center/logManage/getOperationLog',//操作日志
+    
 }
 
 export default request;

+ 4 - 1
src/components/AMenu/index.js

@@ -9,6 +9,7 @@ import DataManager from "../DataManager";
 import InpaManager from "../InpaManager"
 import NullPage from "../NullPage";
 import FuncManager from "../FuncManager";
+import OperationLog from "../OperationLog";
 import apiObj from '@api/index';
 
 const { xPost, api } = apiObj;
@@ -22,7 +23,9 @@ const pageMap = {
     '用户管理': <UserManager />,
     '数据权限': <DataManager />,
     '病区管理': <InpaManager />,
-    '功能管理': <FuncManager />
+    '功能管理': <FuncManager />,
+    '操作日志': <OperationLog />,
+    
 }
 
 let firstMenuPage = null;         //第一个菜单,自动激活时用

+ 1 - 1
src/components/DataManager/AddData.js

@@ -53,7 +53,7 @@ function AddData(props) {
     setVisible(false)
   }
   const goback = () => {
-    if (form.getFieldsValue().name != undefined || isChange) {
+    if ((form.getFieldsValue().name != undefined || isChange) && type != 3) {
       setVisible(true)
     } else {
       back()

+ 1 - 1
src/components/DataManager/index.js

@@ -98,7 +98,7 @@ function DataManager() {
         let dataAuthDetails = []
         let selectedRowKeys = []
         let softwareMenuIds = []
-        let arr = JSON.parse(JSON.stringify(data).replaceAll(/softwares/g, 'softwareVOS').replaceAll(/dataAuthDetail/g, 'dataAuthDetails'))
+        let arr = JSON.parse(JSON.stringify(data).replace(/softwares/g, 'softwareVOS').replace(/dataAuthDetail/g, 'dataAuthDetails'))
         arr.softwareVOS.map((it, i) => {
           roles[i] = []
           dataAuthDetails[i] = []

+ 2 - 1
src/components/FuncManager/AddFunc.js

@@ -65,11 +65,12 @@ function AddUser(props) {
     const formData = form.getFieldValue()
     let params = values
     params.parentId = formData.parentId
+    params.permissions = params.permissions.split(',')
     if (type == 2) {
       params.id = id
       updateMenu(params)
     } else {
-      addMenu(params)
+      // addMenu(params)
     }
   };
   function addMenu(param) {

+ 339 - 0
src/components/OperationLog/index.js

@@ -0,0 +1,339 @@
+import React, { useState, useEffect, useRef } from 'react';
+import { Form, Input, Button, Table, Select, Pagination, Space, Menu, Dropdown, Modal, Breadcrumb, message, Row, Col } from 'antd';
+import { DownOutlined, PlusOutlined, ExclamationCircleOutlined } from '@ant-design/icons';
+import '@common/common.less';
+import { useSelector } from 'react-redux'
+import apiObj from '@api/index';
+const { post, api, xPost } = apiObj;
+const { Option } = Select;
+function OperationLog() {
+  useEffect(() => {
+    getOperationLog();
+  }, []);
+  const [userList, setUserList] = useState([]);
+  const [title, setTitle] = useState("");
+  const [visible, setVisible] = useState(false);
+  const [userId, setUserId] = useState("");
+  const [msvisible, setMsvisible] = useState(false);
+  const [modalType, setModalType] = useState("");
+  const [type, setType] = useState("");
+  const [formData, setFormData] = useState(null);
+  const [username, setUsername] = useState(null);
+  const [roleList, setRoleList] = useState([]);
+  const [total, setTotal] = useState(0);
+  const [form] = Form.useForm();
+  const tipText = {
+    1: '确定要删除该用户?',
+    2: '禁用后该用户将无法登录,确定要禁用该用户?',
+    3: '确定要重置该用户密码?',
+  };
+  const staticInfo = useSelector(state => {
+    return state.staticInfo;
+  });
+  let list = []
+  let params = {
+    pages: 1,
+    current: 1,
+    size: 15
+  }
+  const { statusList } = staticInfo;
+  //新增弹窗
+  const showModal = (name, type, flag, userId) => {
+    setVisible(type);
+    setTitle(name);
+    setType(flag)
+    setUserId(userId)
+    if (flag == 1) {
+      setFormData({
+        status: '1'
+      })
+    }
+    if (flag == 3 || flag == 2) {
+      getUserById(userId)
+    }
+  }
+  //表格数据
+  function getOperationLog() {
+    post(api.getOperationLog, params).then((res) => {
+      if (res.data.code === 200) {
+        const data = res.data.data;
+        setUserList(data.records);
+        setTotal(data.total)
+      }
+    })
+  }
+  //查看用户
+  function getUserById(userId) {
+    xPost(api.getUserById, { userId: userId }).then((res) => {
+      if (res.data.code === 200) {
+        const data = res.data.data;
+        let roles = []
+        data.roles.forEach(item => {
+          roles.push(item.roleId)
+        })
+        const arr = {
+          username: data.username,
+          mobilePhone: data.mobilePhone,
+          password: data.password,
+          againpassword: data.password,
+          name: data.name,
+          idcard: data.idcard,
+          addHospitalTreeVO: getHospitals(data.hospitals),
+          titleId: data.titleId,
+          jobNo: data.jobNo,
+          roles: roles,
+          orderNo: data.orderNo,
+          status: data.status,
+        }
+        setRoleList(data.roles)
+        setFormData(arr)
+      }
+    })
+  }
+  // 处理组织结构数据回显
+  function getHospitals(arr) {
+    arr.forEach((item, i, array) => {
+      item.value = item.hospitalId
+      item.title = item.hospitalName
+      if (!item.children && item.depts) {
+        item.depts.forEach(it => {
+          it.value = item.parentId + '-' + it.deptId
+          if (it.relation == 1) {
+            list.push(it.value)
+          }
+        })
+      }
+      if (item.type != 0 && item.relation == 1) {
+        list.push(item.value)
+        console.log(list)
+      }
+      if (item.children) {
+        getHospitals(item.children)
+      }
+    })
+    return list
+  }
+  // 禁用/启用接口
+  function disableUser(userId, status) {
+    const param = { userId: userId, status: status };
+    xPost(api.disableUser, param).then((res) => {
+      if (res.data.code === 200) {
+        getOperationLog();
+        setMsvisible(false);
+        message.success((status ? '启用' : '禁用') + "成功");
+      } else {
+        message.warning(res.data.msg || '操作失败');
+      }
+    }).catch(() => {
+      message.error("接口出错");
+    });
+  }
+  //重置密码
+  function onResetPsd(userId) {
+    const param = { userId: userId };
+    xPost(api.resetPasswordUser, param).then((res) => {
+      if (res.data.code === 200) {
+        getOperationLog();
+        message.success("重置成功");
+      } else {
+        message.warning(res.data.msg || '操作失败');
+      }
+    }).catch(() => {
+      message.error("接口出错");
+    });
+  }
+  //删除
+  function deleteUser() {
+    const param = { userId: userId };
+    xPost(api.deleteUser, param).then((res) => {
+      if (res.data.code === 200) {
+        getOperationLog();
+        setMsvisible(false);
+        message.success("删除成功");
+      } else {
+        message.warning(res.data.msg || '操作失败');
+      }
+    }).catch(() => {
+      message.error("接口出错");
+    });
+  }
+  function onSizeChange(current, pageSize) {
+    params.current = current
+    params.size = pageSize
+    getOperationLog()
+  }
+  function changePage(page, pageSize) {
+    params.current = page
+    params.size = pageSize
+    getOperationLog()
+  }
+  const onFinish = (value) => {
+    params = {
+      ...params,
+      ...value
+    }
+    getOperationLog();
+  };
+  const onReset = () => {
+    form.resetFields();
+    getOperationLog();
+  };
+  const messageBox = (type, id) => {
+    setMsvisible(true)
+    setUserId(id)
+    setModalType(type)
+  }
+
+  //提示框确认事件
+  function handleOk() {
+    if (modalType == 1) {
+      deleteUser(userId)
+    } else if (modalType == 2) {
+      disableUser(userId, 0)
+    } else if (modalType == 3) {
+      onResetPsd(userId);
+    }
+  }
+  //提示框取消
+  function handleCancel() {
+    setMsvisible(false);
+  }
+  function cancel() {
+    setVisible(false)
+    setFormData(null)
+  }
+  function userChange() {
+    setVisible(false)
+  }
+  const columns = [
+    { title: '用户名', dataIndex: 'username', key: 'index' },
+    { title: '姓名', dataIndex: 'name', key: 'index' },
+    { title: '所属组织', dataIndex: 'hospitalName', key: 'index' },
+    { title: '工号', dataIndex: 'jobNo', key: 'index' },
+    {
+      title: '状态', dataIndex: 'status', key: 'status', render: (text, record) => (
+        <Space size="middle">
+          {record.status == 1 ?
+            <span className="Enable">启用</span>
+            :
+            <span className="Disable">禁用</span>
+          }
+        </Space>
+      )
+    },
+    {
+      title: '操作', dataIndex: 'key', render: (text, record) => (
+        <Space size="middle">
+          <a onClick={e => showModal('查看用户', true, 3, record.userId)}>查看</a>
+          <a onClick={e => showModal('修改用户', true, 2, record.userId)} >修改</a>
+          <Dropdown overlay={menu.bind(this, record)} record={record}>
+            <a className="ant-dropdown-link" onClick={e => e.preventDefault()}>
+              更多 <DownOutlined />
+            </a>
+          </Dropdown>
+        </Space>
+      )
+    }
+  ]
+  const menu = (record) => {
+    return (
+      <Menu>
+        <Menu.Item key="0" className="menuItem" >
+          <a onClick={() => messageBox(3, record.userId)}>
+            重置密码
+          </a>
+        </Menu.Item>
+        <Menu.Item key="1" className="menuItem" >
+          {record.status === '1' ? (<a onClick={() => messageBox(2, record.userId)}>禁用</a>) : (<a onClick={() => disableUser(record.userId, 1)}>启用</a>)}
+        </Menu.Item>
+        <Menu.Item key="2" className="menuItem" >
+          <a onClick={() => messageBox(1, record.userId)}>
+            删除
+          </a>
+        </Menu.Item>
+      </Menu>
+    )
+  }
+  return (
+    <div className="wrapper">
+      <div className="filter-box">
+        <Form
+          form={form}
+          name="normal_login"
+          onFinish={onFinish}
+          initialValues={{ status: '' }}
+        >
+          <Row gutter={24}>
+            <Col span={5} key={0}>
+              <Form.Item label="用户名" name="username">
+                <Input placeholder="用户名" />
+              </Form.Item>
+            </Col>
+            <Col span={5} key={1}>
+              <Form.Item label="姓名" name="name">
+                <Input placeholder="姓名" />
+              </Form.Item>
+            </Col>
+            <Col span={5} key={2}>
+              <Form.Item name="status" label="当前状态">
+                <Select
+                  allowClear
+                >
+                  {statusList.map((item) => {
+                    return (
+                      <Option value={item.name} key={item.name}>{item.val}</Option>
+                    )
+                  })}
+                </Select>
+              </Form.Item>
+            </Col>
+            <Col span={6} key={3}>
+              <Form.Item>
+                <Button type="primary" htmlType="submit">
+                  查询
+                </Button>
+                <Button onClick={onReset}>
+                  重置
+                </Button>
+              </Form.Item>
+            </Col>
+          </Row>
+        </Form>
+      </div>
+
+      <div className="table">
+        <div className="table-header">
+          <h2 className="table-title">用户管理</h2>
+          <Button type="primary" icon={<PlusOutlined />} onClick={e => showModal('新增用户', true, 1)}>新增用户</Button>
+        </div>
+
+        <Table
+          columns={columns}
+          dataSource={userList}
+          rowKey={record => record.userId + record.hospitalName}
+          pagination={{
+            pageNo: 1,
+            pageSize: params.size,
+            pageSizeOptions: ['15', '30', '60', '120'],
+            showTotal: (total, range) => `第${range[0]}-${range[1]} 条/共 ${total} 条数据`,
+            onShowSizeChange: (current, pageSize) => onSizeChange(current, pageSize), // 改变每页数量时更新显示
+            onChange: (page, pageSize) => changePage(page, pageSize),//点击页码事件
+            total: total
+          }} />
+      </div>
+      <Modal
+        title="提示"
+        okText='确定'
+        cancelText='取消'
+        width={400}
+        visible={msvisible}
+        onOk={handleOk}
+        onCancel={handleCancel}
+      >
+        <p>{tipText[modalType]}</p>
+      </Modal>
+    </div >
+  )
+}
+
+export default OperationLog;

+ 1 - 1
src/components/OrgManager/index.js

@@ -202,7 +202,7 @@ function OrgManager() {
             }
         });
         if (orgType == 4) {
-            param.type = 4
+            param.type = 5
         }
         if (type == 2) {
             url = api.updateHospital

+ 2 - 1
src/components/RoleManager/AddRole.js

@@ -15,6 +15,7 @@ function AddRole(props){
     const { back } = props;
     const [isChange, setIsChange] = useState(false);
     const [visible, setVisible] = useState(false);
+    const { detail } = useContext(RoleContext);
     function handleOk() {
         back()
     }
@@ -22,7 +23,7 @@ function AddRole(props){
         setIsChange(true)
     }
     const goback = () => {
-        if (form.getFieldsValue().name != undefined || isChange) {
+        if ((form.getFieldsValue().name != undefined || isChange) && !detail) {
             setVisible(true)
         } else {
             back()

+ 3 - 1
src/components/SysChoose/index.js

@@ -55,7 +55,7 @@ function SysChoose({history}) {
                 setHisList(software[0]?software[0].hospitals:[]);
                 setTimeout(()=>{
                     if (data.jump) {
-                        getIn(software[0].hospitals[0].hospitalId)
+                        getIn(software[0].hospitals[0].hospitalId, software[0].hospitals[0].type, software[0].id)
                     }
                 },500)
                 
@@ -66,6 +66,8 @@ function SysChoose({history}) {
     }
     //点击进入
     function getIn(id, type, sysid){
+        console.log(type);
+        
         dispatch(setSys({sysId,sysName,hisId:id}));
         localStorage.setItem('systemId', sysId || sysid);
         localStorage.setItem('hospitalId',id);