zhouna преди 3 години
родител
ревизия
2106fe79d9

+ 8 - 12
craco.config.js

@@ -15,19 +15,15 @@ module.exports = {
             }
             }
         }
         }
     },*/
     },*/
+    devServer: (devServerConfig, { env, paths, proxy, allowedHost }) => {
+        devServerConfig.proxy={
+            '/security-center':'http://192.168.2.237:8871',
+            pathRewrite: {'/security-center' : ''},
+            changeOrigin: true
+        };
+        return devServerConfig;
+    },
     webpack:{
     webpack:{
-        /*configure: (config, { env, paths }) => {
-            config.module.rules.push({
-                test: /\.svg$/,
-                use: [{
-                    loader: 'html-loader',
-                    options: {
-                        minimize: true
-                    }
-                }]
-            })
-            return config;
-        },*/
         alias:{
         alias:{
             '@':resolve('src'),
             '@':resolve('src'),
             '@common':resolve('src/common'),
             '@common':resolve('src/common'),

+ 37 - 5
src/components/AHeader/index.js

@@ -2,6 +2,7 @@ import { Layout, Dropdown, Menu, Modal, Input, Form, Space, Button } from 'antd'
 import { withRouter } from 'react-router'
 import { withRouter } from 'react-router'
 import { useState, useEffect } from 'react';
 import { useState, useEffect } from 'react';
 import { useSelector, useDispatch } from 'react-redux';
 import { useSelector, useDispatch } from 'react-redux';
+import MyMessage from "../MyMessage";
 import { panesNow } from '@reducers/tabPanes.js';
 import { panesNow } from '@reducers/tabPanes.js';
 import utils from '@utils/index';
 import utils from '@utils/index';
 import logo from '@images/logo.png';
 import logo from '@images/logo.png';
@@ -10,7 +11,8 @@ import me from '@images/me.png';
 import down from '@images/down.png';
 import down from '@images/down.png';
 import './index.less'
 import './index.less'
 import { message } from "antd/lib/index";
 import { message } from "antd/lib/index";
-import { setSys, setUser } from '@reducers/userInfo.js';
+import { add, active } from '@reducers/tabPanes'
+import { setSys, setUser, setUnReadNum} from '@reducers/userInfo.js';
 import apiObj from '@api/index';
 import apiObj from '@api/index';
 
 
 const { post, api, xPost } = apiObj;
 const { post, api, xPost } = apiObj;
@@ -21,12 +23,14 @@ const defaultProps = {};
 const { Header } = Layout;
 const { Header } = Layout;
 const { getTimeDetail } = utils;
 const { getTimeDetail } = utils;
 function AHeader({ history, hideName }) {
 function AHeader({ history, hideName }) {
-    const dispatch = useDispatch();
+    const dispatch = useDispatch();//当前选中的菜单
+    const { panes } = useSelector(state => {
+        return state.tabPanes;
+    });
     const [form] = Form.useForm();
     const [form] = Form.useForm();
     const [dateTime, setDateTime] = useState('');
     const [dateTime, setDateTime] = useState('');
-    const [formData, setFormData] = useState(null);
     const [visible, setVisible] = useState(false);
     const [visible, setVisible] = useState(false);
-    const { user, sysName } = useSelector((state) => {
+    const { user, sysName,unReadNum } = useSelector((state) => {
         return state.userInfo;
         return state.userInfo;
     });
     });
     //退出
     //退出
@@ -37,6 +41,30 @@ function AHeader({ history, hideName }) {
         dispatch(panesNow([]));
         dispatch(panesNow([]));
         history.push('/login');
         history.push('/login');
     }
     }
+    //获取未读消息数量
+    function getNotNoticeCount(){
+        xPost(api.getNotNoticeCount).then((res) => {
+            if (res.data.code === 200) {
+                let count = res.data.count;
+                count = count>99?'99+':count;
+                dispatch(setUnReadNum(count));
+            } else {
+                //message.warning(res.data.msg || '请求失败');
+            }
+        })
+    }
+    //未读消息页面显示并带入未读筛选条件
+    function showMyMsgPage(){
+        const idName = '我的通知';
+        const item = panes.find((it) => it.key === idName);
+        if (item) {   //已存在当前tab,则定位即可不增加
+            dispatch(active({idName,isUnRead:true}));
+            return;
+        }
+        dispatch(
+            add({ title: idName, content: <MyMessage />, key: idName,isUnRead:true})
+        )
+    }
     //获取组织列表
     //获取组织列表
     function getOrgList() {
     function getOrgList() {
         xPost(api.getUserHospitals).then((res) => {
         xPost(api.getUserHospitals).then((res) => {
@@ -80,6 +108,7 @@ function AHeader({ history, hideName }) {
     }
     }
     useEffect(() => {
     useEffect(() => {
         countTime();
         countTime();
+        getNotNoticeCount();
         if (!user.name) {
         if (!user.name) {
             getOrgList();
             getOrgList();
         }
         }
@@ -104,7 +133,10 @@ function AHeader({ history, hideName }) {
             <div className='infos'>
             <div className='infos'>
                 <span className='time'>{dateTime}</span>
                 <span className='time'>{dateTime}</span>
                 <span className='break-line'>|</span>
                 <span className='break-line'>|</span>
-                {/*<img className='msg-icon' src={msg} alt="未读消息"/>*/}
+                <div className="unRead-msg-cont" onClick={showMyMsgPage}>
+                    <img className='msg-icon' src={msg} alt="未读消息"/>
+                    {unReadNum?<span className='unRead-msg'>{unReadNum}</span>:''}
+                </div>
                 <div className="user">
                 <div className="user">
                     <Dropdown overlay={menu} trigger={['click']}>
                     <Dropdown overlay={menu} trigger={['click']}>
                         <span className="ant-dropdown-link" onClick={e => e.preventDefault()}>
                         <span className="ant-dropdown-link" onClick={e => e.preventDefault()}>

+ 21 - 2
src/components/AHeader/index.less

@@ -6,9 +6,29 @@
 }
 }
 .break-line{
 .break-line{
   color: #fff;
   color: #fff;
-  margin-right: 26px;
+  margin-right: 18px;
   vertical-align: middle;
   vertical-align: middle;
 }
 }
+.unRead-msg-cont{
+  position: relative;
+  display: inline-block;
+  cursor: pointer;
+  margin-right: 18px;
+  .unRead-msg{
+    position: absolute;
+    top:13px;
+    left: 5px;
+    display: inline-block;
+    height: 15px;
+    font-size: 11px;
+    line-height: 15px;
+    color: #fff;
+    padding: 2px;
+    border-radius:10px;
+    background: #FB5D5F;
+  }
+}
+
 .sys-name{
 .sys-name{
   color: @header-font-color;
   color: @header-font-color;
   vertical-align: middle;
   vertical-align: middle;
@@ -24,7 +44,6 @@
   }
   }
   .ant-dropdown-link{
   .ant-dropdown-link{
     cursor: pointer;
     cursor: pointer;
-    margin-left: 6px;
     color: @header-font-color;
     color: @header-font-color;
     vertical-align: middle;
     vertical-align: middle;
     i{
     i{

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

@@ -51,7 +51,7 @@ function AMenu() {
         const item = panes.find((it) => it.key === idName[0]);
         const item = panes.find((it) => it.key === idName[0]);
         //console.log(item);
         //console.log(item);
         if (item) {   //已存在当前tab,则定位即可不增加
         if (item) {   //已存在当前tab,则定位即可不增加
-            dispatch(active(idName[0]));
+            dispatch(active({idName:idName[0]}));
             return;
             return;
         }
         }
         dispatch(
         dispatch(

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

@@ -22,7 +22,7 @@ function ATabs(){
     });
     });
     //切换tab
     //切换tab
     function onChange(activeKey){
     function onChange(activeKey){
-        dispatch(active(activeKey))
+        dispatch(active({idName:activeKey}))
     }
     }
     //关闭当前tab
     //关闭当前tab
     function onDelTab(activeKey){
     function onDelTab(activeKey){

+ 63 - 145
src/components/DataManager/AddData.js

@@ -1,24 +1,18 @@
 import { useEffect, useState, useContext } from 'react';
 import { useEffect, useState, useContext } from 'react';
-import { Form, Input, Button, Steps, Tabs, Space, Switch, Breadcrumb, Radio, TreeSelect, Tree, Tag, Card, message, Modal } from 'antd';
+import { Form, Input, Button, Tabs, Space, Switch, Breadcrumb, Radio, TreeSelect, message, Modal } from 'antd';
 import './index.less';
 import './index.less';
 import DataContext from './data-context';
 import DataContext from './data-context';
 import SelectedTag from '@common/SelectedTag.js';
 import SelectedTag from '@common/SelectedTag.js';
 import MyDeptStruct from '@common/MyDeptStruct.js';
 import MyDeptStruct from '@common/MyDeptStruct.js';
 import { useSelector } from 'react-redux'
 import { useSelector } from 'react-redux'
 import apiObj from '@api/index';
 import apiObj from '@api/index';
-import utils from '@utils/index'
 import backIcon from "@images/back.png";
 import backIcon from "@images/back.png";
-import del from '@images/icon-del.png'
 import DoctorList from "./doctorList"
 import DoctorList from "./doctorList"
-import Item from 'antd/lib/list/Item';
 const { post, api, xPost } = apiObj;
 const { post, api, xPost } = apiObj;
 const { SHOW_PARENT } = TreeSelect;
 const { SHOW_PARENT } = TreeSelect;
-const { organizationData } = utils;
-const { Step } = Steps;
 const { TabPane } = Tabs;
 const { TabPane } = Tabs;
 function AddData(props) {
 function AddData(props) {
   useEffect(() => {
   useEffect(() => {
-    //getHospitalTree()
     getOrgList()
     getOrgList()
     if (type == 3) {
     if (type == 3) {
       setValue(val)
       setValue(val)
@@ -35,11 +29,10 @@ function AddData(props) {
   const [checkedDeptIds, setCheckedDeptIds] = useState([]);   //指定科室选中的科室项id
   const [checkedDeptIds, setCheckedDeptIds] = useState([]);   //指定科室选中的科室项id
   const [checkedHosIds, setCheckedHosIds] = useState([]);   //指定科室选中的医院项id
   const [checkedHosIds, setCheckedHosIds] = useState([]);   //指定科室选中的医院项id
   const [checkedTreeItems, setCheckedTreeItems] = useState([]);   //指定科室选中的树结构
   const [checkedTreeItems, setCheckedTreeItems] = useState([]);   //指定科室选中的树结构
-  const [receiverError,setReceiverError]=useState(false);   //接收者校验状态
 
 
   const [value, setValue] = useState([]);
   const [value, setValue] = useState([]);
-  const [key, setKey] = useState();
-  const [index, setIndex] = useState('0');
+  const [tabKey, setTabKey] = useState();       //权限范围选中的tab id
+  const [tabIndex, setTabIndex] = useState('0');      //权限范围选中的tab index
   const [treeRloe, setTreeRloe] = useState([]);
   const [treeRloe, setTreeRloe] = useState([]);
   const [tags, setTags] = useState([[]]);
   const [tags, setTags] = useState([[]]);
   const [orgList, setOrgList] = useState([]);
   const [orgList, setOrgList] = useState([]);
@@ -87,7 +80,7 @@ function AddData(props) {
         const data = res.data.data;
         const data = res.data.data;
         const { software } = data;
         const { software } = data;
         setOrgList(software);
         setOrgList(software);
-        setKey(software[0].id)
+          setTabKey(software[0].id)
         getCreateRoles(software[0].id)
         getCreateRoles(software[0].id)
         if (type == 3) {
         if (type == 3) {
           software.forEach((it, index) => {
           software.forEach((it, index) => {
@@ -117,18 +110,18 @@ function AddData(props) {
     let val = value
     let val = value
     const formData = form.getFieldsValue();
     const formData = form.getFieldsValue();
     let arr = formData.softwareVOS;
     let arr = formData.softwareVOS;
-    arr[index].id = key
-    arr[index].softwareMenuIds = []
-    arr[index].dataAuthDetails = []
-    arr[index].selectedRowKeys = []
+    arr[tabIndex].id = tabKey
+    arr[tabIndex].softwareMenuIds = []
+    arr[tabIndex].dataAuthDetails = []
+    arr[tabIndex].selectedRowKeys = []
     if (e.target.value != 7) {
     if (e.target.value != 7) {
-      arr[index].dataAuthDetails = [{
+      arr[tabIndex].dataAuthDetails = [{
         dataType: e.target.value
         dataType: e.target.value
       }]
       }]
     }
     }
-    tags[index] = []
+    tags[tabIndex] = []
     val[i] = e.target.value
     val[i] = e.target.value
-    selectedRowKeys[index] = []
+    selectedRowKeys[tabIndex] = []
     form.setFieldsValue({
     form.setFieldsValue({
       softwareVOS: arr
       softwareVOS: arr
     });
     });
@@ -137,59 +130,16 @@ function AddData(props) {
     setSelectedRowKeys([...selectedRowKeys])
     setSelectedRowKeys([...selectedRowKeys])
     setIsChange(true)
     setIsChange(true)
   };
   };
-  // 删除选择标签
-  function delTag(type, id, i) {
-    const formData = form.getFieldsValue();
-    const softwareVOS = formData.softwareVOS[index]
-    if (type == 3) {
-      softwareVOS.selectedRowKeys.forEach((item, inx) => {
-        if (item.split('-')[0] == id) {
-          softwareVOS.selectedRowKeys.splice(inx)
-        }
-      })
-      softwareVOS.dataAuthDetails.forEach((item, inx) => {
-        if (item.detailId == id) {
-          softwareVOS.dataAuthDetails.splice(inx)
-        }
-      })
-    } else if (type == 1) {
-      softwareVOS.softwareMenuIds.forEach((item, inx) => {
-        if (item.split('-')[0] == id) {
-          softwareVOS.softwareMenuIds.splice(inx)
-        }
-      })
-      softwareVOS.dataAuthDetails.forEach((item, inx) => {
-        if (item.detailId == id) {
-          softwareVOS.dataAuthDetails.splice(inx)
-        }
-      })
-    } else if (type == 2) {
-      softwareVOS.softwareMenuIds.forEach((item, inx) => {
-        if (item.split('-')[1] == id) {
-          softwareVOS.softwareMenuIds.splice(inx)
-        }
-      })
-      softwareVOS.dataAuthDetails.forEach((item, inx) => {
-        if (item.detailId == id) {
-          softwareVOS.dataAuthDetails.splice(inx)
-        }
-      })
-    }
-    form.setFieldsValue({
-      softwareVOS: formData.softwareVOS
-    });
-    tags[index].splice(i)
-    setTags([...tags])
-  }
+
   function callback(key) {
   function callback(key) {
-    setKey(key.split('-')[0])
-    setIndex(key.split('-')[1])
+    setTabKey(key.split('-')[0])
+    setTabIndex(key.split('-')[1])
     getCreateRoles(key.split('-')[0])
     getCreateRoles(key.split('-')[0])
   }
   }
   function treeChange(value) {
   function treeChange(value) {
     const formData = form.getFieldsValue();
     const formData = form.getFieldsValue();
     let arr = formData.softwareVOS;
     let arr = formData.softwareVOS;
-    arr[index].roles = value
+    arr[tabIndex].roles = value
     form.setFieldsValue({
     form.setFieldsValue({
       softwareVOS: arr
       softwareVOS: arr
     });
     });
@@ -211,44 +161,58 @@ function AddData(props) {
   //医生选中
   //医生选中
   function checkDoctEvent(selectedRowKeys) {
   function checkDoctEvent(selectedRowKeys) {
     const formData = form.getFieldsValue();
     const formData = form.getFieldsValue();
-    let arr = formData.softwareVOS[index].dataAuthDetails ? formData.softwareVOS[index].dataAuthDetails : []
+    const tempAuthData = formData.softwareVOS[tabIndex].dataAuthDetails;
+    let arr = tempAuthData ? tempAuthData : []
+    let tag = [],docIds=[];
     selectedRowKeys.forEach(it => {
     selectedRowKeys.forEach(it => {
       arr.push({
       arr.push({
         dataType: 7,
         dataType: 7,
         detailId: it.split('-')[0],
         detailId: it.split('-')[0],
         detailType: 3
         detailType: 3
       })
       })
+      tag.push({
+          id: it.split('-')[0],
+          name: it.split('-')[1],
+          type: 3
+      })
+      docIds.push(it);
     });
     });
-    formData.softwareVOS[index].dataAuthDetails = unique(arr)
-    formData.softwareVOS[index].selectedRowKeys = selectedRowKeys
+    const docArr = unique(arr);
+    formData.softwareVOS[tabIndex].dataAuthDetails = [...docArr,...checkedDepts];
+    formData.softwareVOS[tabIndex].selectedRowKeys = selectedRowKeys;
     form.setFieldsValue({
     form.setFieldsValue({
       softwareVOS: formData.softwareVOS
       softwareVOS: formData.softwareVOS
     });
     });
-    getTags()
+    //保存需要展示的已选中标签数据
+    setCheckedUser(tag)
+    setCheckedUserIds(docIds);
   }
   }
   //树形结构选中事件
   //树形结构选中事件
     //选中科室
     //选中科室
     function handleCheckDept(checks,e){
     function handleCheckDept(checks,e){
         setCheckedTreeItems(checks);
         setCheckedTreeItems(checks);
-        //排序,短的在前长的在后,为去重做准备
+        //排序,短的在前长的在后,为去重(组织下全选,只传组织id)做准备
         const posArr = [...e.checkedNodesPositions].sort((a,b)=>{
         const posArr = [...e.checkedNodesPositions].sort((a,b)=>{
             return a.pos.length-b.pos.length;
             return a.pos.length-b.pos.length;
         });
         });
         //console.log('排序后:',posArr);
         //console.log('排序后:',posArr);
         const checkedDepts = structureDeptTag(posArr);
         const checkedDepts = structureDeptTag(posArr);
-        let deptIdsArr=[...checkedDepts.deptIds];
-        let deptArr=[...checkedDepts.deptObj];
-        let hosIdsArr=[...checkedDepts.hosIds];
-        let hosArr=[...checkedDepts.hosObj];
+        const {deptIds,deptObj,hosIds,hosObj,paramHos,paramDept} = checkedDepts;
+        let deptIdsArr=[...deptIds];
+        let deptArr=[...deptObj];
+        let hosIdsArr=[...hosIds];
+        let hosArr=[...hosObj];
         setCheckedDepts(hosArr.concat(deptArr));        //显示的排序可能需要再考虑一下
         setCheckedDepts(hosArr.concat(deptArr));        //显示的排序可能需要再考虑一下
         setCheckedDeptIds(deptIdsArr);
         setCheckedDeptIds(deptIdsArr);
         setCheckedHosIds(hosIdsArr);
         setCheckedHosIds(hosIdsArr);
-        //validateReceiver(checkedUserIds.length+deptIdsArr.length+hosIdsArr.length);
-        form.setFieldsValue({sendDepts:deptIdsArr,sendHospitals:hosIdsArr});
+        const tempFormData = form.getFieldsValue();
+        tempFormData.softwareVOS[tabIndex].dataAuthDetail=[...checkedUser,...paramHos,...paramDept];
+        form.setFieldsValue(tempFormData);
     }
     }
     //格式化选中科室数据
     //格式化选中科室数据
     function structureDeptTag(pos){   //全选传医院id,非全选传科室id
     function structureDeptTag(pos){   //全选传医院id,非全选传科室id
-        let tempPos=[],hosIds=[],hosArr=[],len=0,deptIds=[],deptArr=[],temp=[],tempKey='';
+        let tempPos=[],hosIds=[],hosArr=[],len=0,deptIds=[],deptArr=[],temp=[],tempKey='';//作为已选中标签显示的数据
+        let paramHos=[],paramDept=[];   //作为新增接口参数的数据
         let it=null,checks=[];
         let it=null,checks=[];
         for(let i=0;i<pos.length;i++){
         for(let i=0;i<pos.length;i++){
             it=pos[i];
             it=pos[i];
@@ -271,18 +235,20 @@ function AddData(props) {
                 //医院id存入sendHospitals,科室id存入sendDepts
                 //医院id存入sendHospitals,科室id存入sendDepts
                 if(len===2){
                 if(len===2){
                     hosArr.push({id:temp[0],name:temp[1],key:tempKey});
                     hosArr.push({id:temp[0],name:temp[1],key:tempKey});
+                    paramHos.push({detailId:temp[0],detailType:1,dataType:7,key:tempKey});
                     hosIds.push(temp[0]);
                     hosIds.push(temp[0]);
                 }else{
                 }else{
                     deptArr.push({id:temp[2],name:temp[1]+"-"+temp[3],key:tempKey});
                     deptArr.push({id:temp[2],name:temp[1]+"-"+temp[3],key:tempKey});
+                    paramDept.push({detailId:temp[2],detailType:2,dataType:7,key:tempKey});
                     deptIds.push(temp[2]);
                     deptIds.push(temp[2]);
                 }
                 }
 
 
             }
             }
         }
         }
-        return {hosIds:hosIds,hosObj:hosArr,deptIds:deptIds,deptObj:deptArr};
+        return {hosIds:hosIds,hosObj:hosArr,deptIds:deptIds,deptObj:deptArr,paramDept,paramHos};
     }
     }
     //删除已选用户/科室
     //删除已选用户/科室
-    function handleTagDel(idx,type){ //type=1指定用户,type=2指定科室
+    function handleTagDel(idx,type){ //type=1可看意思,type=2可看科室
         if(idx===undefined){    //无入参,清空所有
         if(idx===undefined){    //无入参,清空所有
             //情况树状结构选中状态
             //情况树状结构选中状态
             setCheckedTreeItems([]);
             setCheckedTreeItems([]);
@@ -293,12 +259,14 @@ function AddData(props) {
             setCheckedDepts([]);
             setCheckedDepts([]);
             setCheckedDeptIds([]);
             setCheckedDeptIds([]);
             setCheckedHosIds([]);
             setCheckedHosIds([]);
-            form.setFieldsValue({sendUsers:[],sendDepts:[],sendHospitals:[]});
-            //校验状态更新
-            setReceiverError(true);
+            const tempFormData = form.getFieldsValue();
+            tempFormData.softwareVOS[tabIndex].dataAuthDetail=[];
+            form.setFieldsValue(tempFormData);
             return;
             return;
         }
         }
         //const idx=checkedUserIds.findIndex((it)=>it===id);
         //const idx=checkedUserIds.findIndex((it)=>it===id);
+        const tempFormData = form.getFieldsValue();
+        const tempAuthData = tempFormData.softwareVOS[tabIndex].dataAuthDetail;
         if(type===1){
         if(type===1){
             let checkedIdsArr=[...checkedUserIds];
             let checkedIdsArr=[...checkedUserIds];
             let checkedUserArr=[...checkedUser];
             let checkedUserArr=[...checkedUser];
@@ -306,9 +274,8 @@ function AddData(props) {
             checkedUserArr.splice(idx,1);
             checkedUserArr.splice(idx,1);
             setCheckedUser(checkedUserArr);
             setCheckedUser(checkedUserArr);
             setCheckedUserIds(checkedIdsArr);
             setCheckedUserIds(checkedIdsArr);
-            form.setFieldsValue({sendUsers:checkedIdsArr});
-            //校验状态更新--在判断外面不好判断,直接放里面
-            setReceiverError(checkedIdsArr.length===0);
+            tempFormData.softwareVOS[tabIndex].dataAuthDetail=checkedUserArr;
+            form.setFieldsValue(tempFormData);
         }else if(type===2){
         }else if(type===2){
             //删除树结构中对应的选中状态
             //删除树结构中对应的选中状态
             const ikey = checkedDepts[idx].key;
             const ikey = checkedDepts[idx].key;
@@ -327,69 +294,20 @@ function AddData(props) {
             setCheckedDepts(checkedDeptsArr);            //选中的科室和医院合并过的
             setCheckedDepts(checkedDeptsArr);            //选中的科室和医院合并过的
             setCheckedHosIds(checkedHosIdsArr);
             setCheckedHosIds(checkedHosIdsArr);
             setCheckedDeptIds(checkedDeptIdsArr);
             setCheckedDeptIds(checkedDeptIdsArr);
-            form.setFieldsValue({sendUsers:checkedUserIds,sendDepts:checkedDeptIdsArr,sendHospitals:checkedHosIdsArr});
-            //校验状态更新--在判断外面不好判断,直接放里面
-            setReceiverError(checkedDeptsArr.length===0);
+            //tempFormData.softwareVOS[tabIndex].dataAuthDetail=checkedUserArr;
+            form.setFieldsValue(tempFormData);
+            //form.setFieldsValue({sendUsers:checkedUserIds,sendDepts:checkedDeptIdsArr,sendHospitals:checkedHosIdsArr});
         }
         }
-        //校验状态更新
-        //setReceiverError(checkedUserIds.length+);
     }
     }
-  //获取已选中标签
 
 
-  function getTags() {
-    const formData = form.getFieldsValue();
-    let tag = []
-    let softwareMenuIds = formData.softwareVOS[index].softwareMenuIds
-    let selectedRowKeys = formData.softwareVOS[index].selectedRowKeys
-    selectedRowKeys && selectedRowKeys.forEach(it => {
-      tag.push({
-        id: it.split('-')[0],
-        name: it.split('-')[1],
-        type: 3
-      })
-    });
-    if (softwareMenuIds) {
-      let result = softwareMenuIds.filter(ele => {
-        return ele.split('-').length == 2
-      })
-      if (result) {
-        result.forEach(it => {
-          tag.push({
-            id: it.split('-')[0],
-            name: it.split('-')[1],
-            type: 1
-          })
-        })
-      } else {
-        softwareMenuIds.forEach(it => {
-          tag.push({
-            id: it.split('-')[1],
-            name: it.split('-')[2],
-            type: 2
-          })
-        })
-      }
-    }
-    tags[index] = tag
-    setTags([...tags])
-  }
   const onFinish = value => {
   const onFinish = value => {
-    save(form.getFieldsValue())
+      console.log(form.getFieldsValue());
+    //save(form.getFieldsValue())
   };
   };
   function swichChange(val) {
   function swichChange(val) {
     form.setFieldsValue({ status: val ? 1 : 0 })
     form.setFieldsValue({ status: val ? 1 : 0 })
   }
   }
-  function delAll() {
-    const formData = form.getFieldsValue();
-    formData.softwareVOS[index].selectedRowKeys = []
-    formData.softwareVOS[index].softwareMenuIds = []
-    formData.softwareVOS[index].dataAuthDetails = []
-    form.setFieldsValue({
-      softwareVOS: formData.softwareVOS
-    });
-    tags[index] = []
-    setTags([...tags])
-  }
+
   return (
   return (
     <>
     <>
       <Breadcrumb separator="">
       <Breadcrumb separator="">
@@ -432,7 +350,7 @@ function AddData(props) {
                       <Form.Item key={i + "e"} hidden={true} name={['softwareVOS', i, 'roles']} noStyle>
                       <Form.Item key={i + "e"} hidden={true} name={['softwareVOS', i, 'roles']} noStyle>
                         <Input />
                         <Input />
                       </Form.Item>
                       </Form.Item>
-                      <Form.Item key={i + "c"} style={{ display: value[index] == 7 && it.id == key ? 'block' : 'none' }}>
+                      <Form.Item key={i + "c"} style={{ display: value[tabIndex] == 7 && it.id == tabKey ? 'block' : 'none' }}>
                         {/*<Card title="已选中" extra={<span onClick={delAll} className='del-all'><img className='del-icon' src={del} />清空所有</span>} >
                         {/*<Card title="已选中" extra={<span onClick={delAll} className='del-all'><img className='del-icon' src={del} />清空所有</span>} >
                           {tags[index].map((tag, i) => {
                           {tags[index].map((tag, i) => {
                             return (
                             return (
@@ -442,13 +360,13 @@ function AddData(props) {
                         </Card>*/}
                         </Card>*/}
                           <SelectedTag userData={checkedUser} deptData={checkedDepts} delTag={handleTagDel}></SelectedTag>
                           <SelectedTag userData={checkedUser} deptData={checkedDepts} delTag={handleTagDel}></SelectedTag>
                       </Form.Item>
                       </Form.Item>
-                      <Form.Item key={i + "d"} style={{ display: value[index] == 7 && it.id == key ? 'block' : 'none' }}>
+                      <Form.Item key={i + "d"} style={{ display: value[tabIndex] == 7 && it.id == tabKey ? 'block' : 'none' }}>
                         <Tabs defaultActiveKey="0" className='tab-content'>
                         <Tabs defaultActiveKey="0" className='tab-content'>
                           <TabPane tab="可看医生" key="0" forceRender={type == 3 && form.getFieldValue().softwareVOS[i] ? true : false}>
                           <TabPane tab="可看医生" key="0" forceRender={type == 3 && form.getFieldValue().softwareVOS[i] ? true : false}>
                             <Form.Item
                             <Form.Item
                               name={['softwareVOS', i, 'selectedRowKeys']}
                               name={['softwareVOS', i, 'selectedRowKeys']}
                             >
                             >
-                              <DoctorList checkeds={form.getFieldValue().softwareVOS ? form.getFieldValue().softwareVOS[i] : []} checkDoct={(selectedRowKeys) => checkDoctEvent(selectedRowKeys)} />
+                              <DoctorList checkeds={checkedUserIds} checkDoct={(selectedRowKeys) => checkDoctEvent(selectedRowKeys)} />
                             </Form.Item>
                             </Form.Item>
                           </TabPane>
                           </TabPane>
                           <TabPane tab="可看科室" key="1" forceRender={type == 3 && form.getFieldValue().softwareVOS[i] ? true : false}>
                           <TabPane tab="可看科室" key="1" forceRender={type == 3 && form.getFieldValue().softwareVOS[i] ? true : false}>
@@ -472,9 +390,9 @@ function AddData(props) {
                 return (
                 return (
                   <Form.Item
                   <Form.Item
                     key={i}
                     key={i}
-                    style={{ display: i == index ? 'block' : 'none' }}
+                    style={{ display: i == tabIndex ? 'block' : 'none' }}
                   >
                   >
-                    {index == i ?
+                    {tabIndex == i ?
                       <Form.Item key={i + "b"}
                       <Form.Item key={i + "b"}
                         name={['softwareVOS', i, 'roles']}
                         name={['softwareVOS', i, 'roles']}
                         rules={[
                         rules={[

+ 27 - 42
src/components/DataManager/doctorList.js

@@ -28,7 +28,7 @@ function DoctorList(props) {
     depts: [],
     depts: [],
     hospitals: []
     hospitals: []
   });
   });
-  const selectedRowKeys = checkeds && checkeds.selectedRowKeys ? checkeds.selectedRowKeys.slice() : []
+  const selectedRowKeys = checkeds;
   let params = {
   let params = {
     asc: ["id"],
     asc: ["id"],
     pages: 1,
     pages: 1,
@@ -37,15 +37,6 @@ function DoctorList(props) {
   }
   }
   //获取可看医生列表
   //获取可看医生列表
   function getDoctorPage() {
   function getDoctorPage() {
-    // const param = {
-    //   asc: ["id"],
-    //   pages: pages,
-    //   size: current,
-    //   mobilePhone: phone,
-    //   name: name,
-    //   depts: addHospitalTreeVO.depts,
-    //   hospitals: unique(addHospitalTreeVO.hospitals)
-    // }
     post(api.getDoctorPage, params).then((res) => {
     post(api.getDoctorPage, params).then((res) => {
       if (res.data.code === 200) {
       if (res.data.code === 200) {
         const data = res.data.data;
         const data = res.data.data;
@@ -99,13 +90,6 @@ function DoctorList(props) {
         addHospitalTreeVO.depts.push(arr[1])
         addHospitalTreeVO.depts.push(arr[1])
       } else {
       } else {
         addHospitalTreeVO.hospitals.push(arr[0])
         addHospitalTreeVO.hospitals.push(arr[0])
-        // treeData.forEach(item => {
-        //   if (item.value.split('-')[0] == arr[0]) {
-        //     item.children.forEach(its => {
-        //       addHospitalTreeVO.depts.push(its.value.split('-')[1])
-        //     })
-        //   }
-        // })
       }
       }
     })
     })
     setAddHospitalTreeVO(addHospitalTreeVO)
     setAddHospitalTreeVO(addHospitalTreeVO)
@@ -135,14 +119,14 @@ function DoctorList(props) {
     getDoctorPage()
     getDoctorPage()
   }
   }
   return (
   return (
-    <div className="wrapper">
+    <div className="doctor_wrapper">
       <div className="doctor_header">
       <div className="doctor_header">
         <div className="doctor_header_left">
         <div className="doctor_header_left">
           <div className="left_item">
           <div className="left_item">
-            姓名:<Input placeholder="用户名" onChange={e => handleName(e)} style={{ width: 160 }} />
+            姓名:<Input placeholder="用户名" onChange={e => handleName(e)} />
           </div>
           </div>
           <div className="left_item">
           <div className="left_item">
-            手机号码:<Input placeholder="用户名" onChange={e => handlePhone(e)} style={{ width: 160 }} />
+            手机号码:<Input placeholder="用户名" onChange={e => handlePhone(e)} />
           </div>
           </div>
           <div className="left_item">
           <div className="left_item">
             所属组织:
             所属组织:
@@ -154,7 +138,6 @@ function DoctorList(props) {
               maxTagCount={1}
               maxTagCount={1}
               showCheckedStrategy={SHOW_PARENT}
               showCheckedStrategy={SHOW_PARENT}
               placeholder="请选择组织"
               placeholder="请选择组织"
-              style={{ width: 160 }}
             />
             />
           </div>
           </div>
           <div className="left_item">
           <div className="left_item">
@@ -174,28 +157,30 @@ function DoctorList(props) {
         <div className="table-header">
         <div className="table-header">
           <span className="table-header-title">医生列表</span>
           <span className="table-header-title">医生列表</span>
         </div>
         </div>
+        <div className="table-cont">
+            <Table
+                rowSelection={{
+                    selectedRowKeys,
+                    onChange: onSelectChange,
+                }}
+                scroll={{ y: '260px' }}
+                className='doctorTable'
+                columns={columns}
+                dataSource={doctorList}
+                rowKey={record => record.id + '-' + record.name}
+                pagination={{
+                    pageNo: 1,
+                    size,
+                    size: 'small',
+                    showSizeChanger: true,
+                    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>
 
 
-        <Table
-          rowSelection={{
-            selectedRowKeys,
-            onChange: onSelectChange,
-          }}
-          scroll={{ y: '260px' }}
-          className='doctorTable'
-          columns={columns}
-          dataSource={doctorList}
-          rowKey={record => record.id + '-' + record.name}
-          pagination={{
-            pageNo: 1,
-            size,
-            size: 'small',
-            showSizeChanger: true,
-            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>
       </div>
     </div>
     </div>
   )
   )

+ 7 - 3
src/components/DataManager/index.js

@@ -112,9 +112,11 @@ function DataManager() {
           selectedRowKeys[i] = []
           selectedRowKeys[i] = []
           softwareMenuIds[i] = []
           softwareMenuIds[i] = []
           tag[i] = []
           tag[i] = []
+            //所属角色数据另存
           arr.softwareVOS[i].roles.forEach(item => {
           arr.softwareVOS[i].roles.forEach(item => {
             roles[i].push(item.id)
             roles[i].push(item.id)
           })
           })
+            //遍历出权限范围数据,已选中的数据遍历出来
           arr.softwareVOS[i].dataAuthDetails && arr.softwareVOS[i].dataAuthDetails.depts && arr.softwareVOS[i].dataAuthDetails.depts.forEach(item => {
           arr.softwareVOS[i].dataAuthDetails && arr.softwareVOS[i].dataAuthDetails.depts && arr.softwareVOS[i].dataAuthDetails.depts.forEach(item => {
             dataAuthDetails[i].push({
             dataAuthDetails[i].push({
               dataType: 7,
               dataType: 7,
@@ -126,6 +128,7 @@ function DataManager() {
               name: item.name,
               name: item.name,
               type: item.detailType
               type: item.detailType
             })
             })
+              //科室树形结构选中的id
             softwareMenuIds[i].push(item.hospitalId + '-' + item.id + '-' + item.name)
             softwareMenuIds[i].push(item.hospitalId + '-' + item.id + '-' + item.name)
           })
           })
           arr.softwareVOS[i].dataAuthDetails && arr.softwareVOS[i].dataAuthDetails.doctors && arr.softwareVOS[i].dataAuthDetails.doctors.forEach(item => {
           arr.softwareVOS[i].dataAuthDetails && arr.softwareVOS[i].dataAuthDetails.doctors && arr.softwareVOS[i].dataAuthDetails.doctors.forEach(item => {
@@ -158,6 +161,7 @@ function DataManager() {
           arr.softwareVOS[i].dataAuthDetails = dataAuthDetails[i] && dataAuthDetails[i].length > 0 ? dataAuthDetails[i] : [{ dataType: it.dataType }]
           arr.softwareVOS[i].dataAuthDetails = dataAuthDetails[i] && dataAuthDetails[i].length > 0 ? dataAuthDetails[i] : [{ dataType: it.dataType }]
           arr.softwareVOS[i].selectedRowKeys = selectedRowKeys[i]
           arr.softwareVOS[i].selectedRowKeys = selectedRowKeys[i]
           arr.softwareVOS[i].softwareMenuIds = softwareMenuIds[i]
           arr.softwareVOS[i].softwareMenuIds = softwareMenuIds[i]
+
           if (arr.softwareVOS[i].dataAuthDetails && arr.softwareVOS[i].dataAuthDetails.length > 0) {
           if (arr.softwareVOS[i].dataAuthDetails && arr.softwareVOS[i].dataAuthDetails.length > 0) {
             arr.softwareVOS[i].datatype = JSON.stringify(arr.softwareVOS[i].dataAuthDetails[0].dataType)
             arr.softwareVOS[i].datatype = JSON.stringify(arr.softwareVOS[i].dataAuthDetails[0].dataType)
             val[i] = arr.softwareVOS[i].dataAuthDetails[0].dataType
             val[i] = arr.softwareVOS[i].dataAuthDetails[0].dataType
@@ -168,9 +172,9 @@ function DataManager() {
         });
         });
         console.log(tag);
         console.log(tag);
         
         
-        setTag(tag)
-        setVal(val)
-        setFormData(arr)
+        setTag(tag)   //要显示的标签数据
+        setVal(val)   //数据权限类型
+        setFormData(arr)    //表单数据
       }
       }
     })
     })
   }
   }

+ 5 - 1
src/components/DataManager/index.less

@@ -14,6 +14,7 @@
   padding:16px 0 6px 0!important;
   padding:16px 0 6px 0!important;
   .table-header-title{
   .table-header-title{
     font-size: 16px;
     font-size: 16px;
+    margin-left: 20px;
   }
   }
 }
 }
 
 
@@ -63,10 +64,13 @@
   .ant-tabs-nav::before{
   .ant-tabs-nav::before{
     border: none;
     border: none;
   }
   }
-  .wrapper{
+  .doctor_wrapper{
     height: 496px;
     height: 496px;
     border: 1px solid #DEE2E9;
     border: 1px solid #DEE2E9;
   }
   }
+  .table-cont{
+    margin:0 20px;
+  }
   .treeContent{
   .treeContent{
     height: 408px;
     height: 408px;
     overflow-y: auto;
     overflow-y: auto;

+ 14 - 5
src/components/MsgManage/index.js

@@ -16,8 +16,9 @@ function MsgManage() {
 
 
     }, []);
     }, []);
     const [isAdd,setIsAdd] = useState(false);   //是否是新增页面
     const [isAdd,setIsAdd] = useState(false);   //是否是新增页面
+    const [current, setCurrent] = useState(1);       //当前页
     const [size, setSize] = useState(15);       //每页显示条数
     const [size, setSize] = useState(15);       //每页显示条数
-    const [total, setTotal] = useState(0);       //每页显示条
+    const [total, setTotal] = useState(0);       //消息总
     const [dataSource, setDataSource] = useState([]);   //列表数据
     const [dataSource, setDataSource] = useState([]);   //列表数据
     const [visible, setVisible] = useState(false);   //弹窗查看
     const [visible, setVisible] = useState(false);   //弹窗查看
     const [delVisible, setDelVisible] = useState(false);   //弹窗删除
     const [delVisible, setDelVisible] = useState(false);   //弹窗删除
@@ -81,11 +82,17 @@ function MsgManage() {
     }
     }
     //每页显示条数切换
     //每页显示条数切换
     function onSizeChange(){
     function onSizeChange(){
-
+        const values = form.getFieldsValue();
+        const params = {...values,current,size};
+        setCurrent(current);
+        getTableData(params);
     }
     }
     //翻页
     //翻页
-    function onPageChange(){
-
+    function onPageChange(current){
+        const values = form.getFieldsValue();
+        const params = {...values,current,size};
+        setCurrent(current);
+        getTableData(params);
     }
     }
     //新增通知
     //新增通知
     function showAddMsg(flag){
     function showAddMsg(flag){
@@ -119,10 +126,12 @@ function MsgManage() {
                     showSizeChanger:true,
                     showSizeChanger:true,
                     pageSizeOptions:[15,30,60,120],
                     pageSizeOptions:[15,30,60,120],
                     defaultPageSize:size,
                     defaultPageSize:size,
-                    pageNo: 1,
+                    current: current,
+                    pageSize:size,
                     size:'small',
                     size:'small',
                     total: total,
                     total: total,
                     showTotal: (total, range) => `第${range[0]}-${range[1]} 条/共 ${total} 条数据`,
                     showTotal: (total, range) => `第${range[0]}-${range[1]} 条/共 ${total} 条数据`,
+                    onChange:onPageChange,
                 }}
                 }}
             />
             />
         )
         )

+ 26 - 3
src/components/MyMessage/index.js

@@ -1,12 +1,14 @@
 import { useEffect, useState } from 'react';
 import { useEffect, useState } from 'react';
-import { useSelector } from 'react-redux'
+import { useSelector, useDispatch } from 'react-redux'
 import { Table, Modal, message, Menu, Breadcrumb, Dropdown, Space, Form, Input, Button, Row, Col, Select } from 'antd';
 import { Table, Modal, message, Menu, Breadcrumb, Dropdown, Space, Form, Input, Button, Row, Col, Select } from 'antd';
 import { DownOutlined, PlusOutlined } from '@ant-design/icons';
 import { DownOutlined, PlusOutlined } from '@ant-design/icons';
 import './index.less';
 import './index.less';
 import apiObj from '@api/index';
 import apiObj from '@api/index';
+import { setUnReadNum} from '@reducers/userInfo.js';
 const { post, api, xPost } = apiObj;
 const { post, api, xPost } = apiObj;
 const { Option } = Select;
 const { Option } = Select;
 function MyMessage() {
 function MyMessage() {
+    const dispatch = useDispatch();
     useEffect(() => {
     useEffect(() => {
         //刷新列表
         //刷新列表
         getTableData();
         getTableData();
@@ -23,6 +25,11 @@ function MyMessage() {
     const staticInfo = useSelector(state => {
     const staticInfo = useSelector(state => {
         return state.staticInfo;
         return state.staticInfo;
     });
     });
+    const toUnRead = useSelector(state => {     //是否筛选未读
+        console.log(43,state)
+        return state.tabPanes.toUnRead;
+    });
+
     const { msgTypeList, msgStatusList } = staticInfo;
     const { msgTypeList, msgStatusList } = staticInfo;
 
 
     //获取表格数据
     //获取表格数据
@@ -40,16 +47,31 @@ function MyMessage() {
     function handleCancel() {
     function handleCancel() {
         setVisible(false);
         setVisible(false);
     }
     }
-    //新增子组织弹窗
+    //获取未读消息数量
+    function getNotNoticeCount(){
+        xPost(api.getNotNoticeCount).then((res) => {
+            if (res.data.code === 200) {
+                let count = res.data.count;
+                count = count>99?'99+':count;
+                dispatch(setUnReadNum(count));
+            } else {
+                //message.warning(res.data.msg || '请求失败');
+            }
+        })
+    }
+    //查看消息弹窗
     function showMessage(id) {
     function showMessage(id) {
         getMsgDetail(id);
         getMsgDetail(id);
         setVisible(true);
         setVisible(true);
     }
     }
+    //获取消息详情
     function getMsgDetail(id) {     //type:1我的通知,0通知管理
     function getMsgDetail(id) {     //type:1我的通知,0通知管理
         xPost(api.getNoticeInfoById, { id: id, type: 1 }).then((res) => {
         xPost(api.getNoticeInfoById, { id: id, type: 1 }).then((res) => {
             const { data, code } = res.data;
             const { data, code } = res.data;
             if (code === 200) {
             if (code === 200) {
                 setMsgDetail(data);
                 setMsgDetail(data);
+                //更新未读消息数量
+                getNotNoticeCount();
             } else {
             } else {
                 message.warning(res.data.msg || '获取详情失败')
                 message.warning(res.data.msg || '获取详情失败')
             }
             }
@@ -104,6 +126,7 @@ function MyMessage() {
     }
     }
     //筛选项渲染
     //筛选项渲染
     const [form] = Form.useForm();
     const [form] = Form.useForm();
+    const initialValues = {status:toUnRead?'0':''};console.log(211,initialValues)
     const onFinish = (values: any) => {
     const onFinish = (values: any) => {
         getTableData(values);
         getTableData(values);
         console.log('筛选项:', values);
         console.log('筛选项:', values);
@@ -115,7 +138,7 @@ function MyMessage() {
     return (
     return (
         <div className='wrapper'>
         <div className='wrapper'>
             <div className="filter-box">
             <div className="filter-box">
-                <Form form={form} name="control-hooks" onFinish={onFinish}>
+                <Form form={form} name="control-hooks" initialValues={initialValues} onFinish={onFinish}>
                     <Row gutter={24}>
                     <Row gutter={24}>
                         <Col span={5} key={1}>
                         <Col span={5} key={1}>
                             <Form.Item name="type" label="通知类型">
                             <Form.Item name="type" label="通知类型">

+ 5 - 2
src/store/reducers/tabPanes.js

@@ -4,7 +4,8 @@ export const slice = createSlice({
     name: 'tabPanes',
     name: 'tabPanes',
     initialState: {
     initialState: {
         activeTab: '',
         activeTab: '',
-        panes:[]
+        panes:[],
+        toUnRead:false
     },
     },
     reducers: {
     reducers: {
         close: (state,action) => {        //关闭tab
         close: (state,action) => {        //关闭tab
@@ -19,9 +20,11 @@ export const slice = createSlice({
         add: (state,action) => {        //打开新tab
         add: (state,action) => {        //打开新tab
             state.panes.push(action.payload);
             state.panes.push(action.payload);
             state.activeTab = action.payload.key;
             state.activeTab = action.payload.key;
+            state.toUnRead = action.payload.isUnRead;   //是否筛选未读
         },
         },
         active:(state,action) => {       //切换tab
         active:(state,action) => {       //切换tab
-            state.activeTab = action.payload;
+            state.activeTab = action.payload.idName;    //当前激活的tab
+            state.toUnRead = action.payload.isUnRead;   //是否筛选未读
         },
         },
         panesNow: (state, action) => {       //切换tab
         panesNow: (state, action) => {       //切换tab
             state.panes = [];
             state.panes = [];

+ 4 - 1
src/store/reducers/userInfo.js

@@ -22,9 +22,12 @@ export const slice = createSlice({
         setUser:(state,action) => {        //删除token
         setUser:(state,action) => {        //删除token
             state.user=action.payload;
             state.user=action.payload;
         },
         },
+        setUnReadNum(state,action){     //未读消息数量
+            state.unReadNum=action.payload;
+        }
     },
     },
 });
 });
 
 
-export const { remove, add, setSys, setUser } = slice.actions;
+export const { remove, add, setSys, setUser,setUnReadNum } = slice.actions;
 
 
 export default slice.reducer;
 export default slice.reducer;