Bläddra i källkod

权限修改--

zhouna 3 år sedan
förälder
incheckning
95999b0e46

+ 56 - 32
src/components/DataManager/AddData.js

@@ -6,19 +6,21 @@ import SelectedTag from '@common/SelectedTag.js';
 import MyDeptStruct from '@common/MyDeptStruct.js';
 import { useSelector } from 'react-redux'
 import apiObj from '@api/index';
+import utils from '@utils/index';
 import backIcon from "@images/back.png";
 import DoctorList from "./doctorList"
 const { api, xPost } = apiObj;
+const {filterIds }=utils;
 const { SHOW_PARENT } = TreeSelect;
 const { TabPane } = Tabs;
 function AddData(props) {
   useEffect(() => {
-    getOrgList()
-    if (type == 3) {
-      setValue(val)
+    getOrgList();
+    if (isEdit) {
+        setEditData();
     }
   }, []);
-  const { back, } = props;
+  const { back } = props;
   const [form] = Form.useForm();
   const [isChange, setIsChange] = useState(false);
   const [visible, setVisible] = useState(false);
@@ -33,15 +35,17 @@ function AddData(props) {
   const [value, setValue] = useState([]);
   const [tabKey, setTabKey] = useState();       //权限范围选中的tab id
   const [tabIndex, setTabIndex] = useState('0');      //权限范围选中的tab index
-  const [treeRloe, setTreeRloe] = useState([]);
+  const [showCustom,setShowCustom]=useState(false);     //是否显示自定义内容
+    const [treeRloe, setTreeRloe] = useState([]);
   const [tags, setTags] = useState([[]]);
   const [orgList, setOrgList] = useState([]);
   const [selectedRowKeys, setSelectedRowKeys] = useState([]);
-  const { save, formData, type, val, tag } = useContext(DataContext);
+  const { save, formData, operType, val, tag,authChecksArr } = useContext(DataContext);
+  const isEdit = operType===3;      //是否为编辑
   const staticInfo = useSelector(state => {
     return state.staticInfo;
   });
-  const { dataList } = staticInfo;
+  const { dataList } = staticInfo;console.log('formData:',formData)
   const initialValues = formData
   const validateMessages = {
     required: '${label}不能为空',
@@ -53,12 +57,33 @@ function AddData(props) {
     setVisible(false)
   }
   const goback = () => {
-    if ((form.getFieldsValue().name != undefined || isChange) && type != 3) {
+    if ((form.getFieldsValue().name != undefined || isChange) && !isEdit) {
       setVisible(true)
     } else {
       back()
     }
   };
+  //编辑数据填充
+    function setEditData(){
+        const data = authChecksArr[tabIndex]||{};
+        const sysObj = form.getFieldValue().softwareVOS[tabIndex]||{};
+        const dataType = sysObj.dataType;
+        const isCustom = dataType === '7';console.log(form.getFieldValue(),dataType,isCustom)
+        //判断权限范围类型,是否显示自定义内容
+        setShowCustom(isCustom);
+        if(!isCustom||!data){      //非自定义不处理
+            return;
+        }
+        const depts = data.depts||[];
+        const doctors = data.doctors||[];
+        const hospitals = data.hospitals||[];
+        setCheckedUser(doctors);
+        setCheckedUserIds(filterIds(doctors,'name'));
+        setCheckedHosIds(filterIds(hospitals,'name'));
+        //setHosArr(hospitals||[]);
+        setCheckedDepts([...hospitals,...depts]);
+        setCheckedDeptIds(filterIds((hospitals).concat(depts)));
+    }
   //获取当前用于所属角色
   function getCreateRoles(softwareId) {
     const params = {
@@ -82,7 +107,7 @@ function AddData(props) {
         setOrgList(software);
           setTabKey(software[0].id)
         getCreateRoles(software[0].id)
-        if (type == 3) {
+        if (isEdit) {
           software.forEach((it, index) => {
             tag.forEach((item, i) => {
               tags[index] = []
@@ -114,7 +139,7 @@ function AddData(props) {
     arr[tabIndex].softwareMenuIds = []
     arr[tabIndex].dataAuthDetails = []
     arr[tabIndex].selectedRowKeys = []
-    if (e.target.value != 7) {
+    if (e.target.value !== '7') {
       arr[tabIndex].dataAuthDetails = [{
         dataType: e.target.value
       }]
@@ -132,9 +157,16 @@ function AddData(props) {
   };
 
   function callback(key) {
-    setTabKey(key.split('-')[0])
-    setTabIndex(key.split('-')[1])
-    getCreateRoles(key.split('-')[0])
+    const ikey = key.split('-');
+    setTabKey(ikey[0])
+    setTabIndex(ikey[1])
+    const soft = form.getFieldValue().softwareVOS[ikey[1]];
+    if(soft){
+        setShowCustom(soft.dataType === '7');
+    }else{
+        setShowCustom(false);
+    }
+    getCreateRoles(ikey[0])
   }
   function treeChange(value) {
     const formData = form.getFieldsValue();
@@ -167,7 +199,7 @@ function AddData(props) {
     selectedRowKeys.forEach(it => {
       arr.push({
         id: it.split('-')[0],
-        dataType: 7,
+        dataType: '7',
         detailId: it.split('-')[0],
         detailType: 3,
         name: it.split('-')[1],
@@ -217,7 +249,7 @@ function AddData(props) {
             if(it.pos==='0-0'){     //全选了平台,终止遍历
                 temp = tempKey.split("-");
                 //hosArr.push({key:tempKey});
-                paramHos.push({id:temp[0],detailId:temp[0],detailType:1,name:temp[1],dataType:7,key:tempKey});
+                paramHos.push({id:temp[0],detailId:temp[0],detailType:1,name:temp[1],dataType:'7',key:tempKey});
                 hosIds.push(temp[0]);
                 setCheckedTreeItems([tempKey]);
                 return {hosIds:hosIds,deptIds:deptIds,deptObj:deptArr};
@@ -233,11 +265,11 @@ function AddData(props) {
                 //医院id存入sendHospitals,科室id存入sendDepts
                 if(len===2){
                     //hosArr.push({key:tempKey});
-                    paramHos.push({id:temp[0],detailId:temp[0],name:temp[1],detailType:1,dataType:7,key:tempKey});
+                    paramHos.push({id:temp[0],detailId:temp[0],name:temp[1],detailType:1,dataType:'7',key:tempKey});
                     hosIds.push(temp[0]);
                 }else{
                     //deptArr.push({key:tempKey});
-                    paramDept.push({id:temp[2],detailId:temp[2],detailType:2,name:temp[1]+"-"+temp[3],dataType:7,key:tempKey});
+                    paramDept.push({id:temp[2],detailId:temp[2],detailType:2,name:temp[1]+"-"+temp[3],dataType:'7',key:tempKey});
                     deptIds.push(temp[2]);
                 }
 
@@ -303,14 +335,13 @@ function AddData(props) {
   function swichChange(val) {
     form.setFieldsValue({ status: val ? 1 : 0 })
   }
-
   return (
     <>
       <Breadcrumb separator="">
         <Breadcrumb.Item><img className='back-icon' src={backIcon} onClick={goback} alt="返回上一页" /></Breadcrumb.Item>
         <Breadcrumb.Item>数据权限</Breadcrumb.Item>
         <Breadcrumb.Separator />
-        <Breadcrumb.Item>{type == 3 ? '修改' : '新增'}数据权限</Breadcrumb.Item>
+        <Breadcrumb.Item>{isEdit ? '修改' : '新增'}数据权限</Breadcrumb.Item>
       </Breadcrumb>
       <div className='form-center'>
         <Form labelCol={{ span: 4 }} wrapperCol={{ span: 18 }} form={form} name="nest-messages" onFinish={onFinish} initialValues={initialValues} validateMessages={validateMessages}>
@@ -322,7 +353,7 @@ function AddData(props) {
               {
                 orgList.map((it, i) => {
                   return (
-                    <TabPane tab={it.name} key={it.id + "-" + i} forceRender={type == 3 && form.getFieldValue().softwareVOS[i] ? true : false}>
+                    <TabPane tab={it.name} key={it.id + "-" + i} forceRender={isEdit && form.getFieldValue().softwareVOS[i] ? true : false}>
                       <Form.Item
                         key={i}
                         name={['softwareVOS', i, 'dataType']} noStyle>
@@ -346,26 +377,19 @@ function AddData(props) {
                       <Form.Item key={i + "e"} hidden={true} name={['softwareVOS', i, 'roles']} noStyle>
                         <Input />
                       </Form.Item>
-                      <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>} >
-                          {tags[index].map((tag, i) => {
-                            return (
-                              <Tag key={i} closable onClose={e => delTag(tag.type, tag.id, i)}>{tag.name}</Tag>
-                            );
-                          })}
-                        </Card>*/}
+                      <Form.Item key={i + "c"} style={{ display: showCustom && it.id == tabKey ? 'block' : 'none' }}>
                           <SelectedTag userData={checkedUser} deptData={checkedDepts} delTag={handleTagDel}></SelectedTag>
                       </Form.Item>
-                      <Form.Item key={i + "d"} style={{ display: value[tabIndex] == 7 && it.id == tabKey ? 'block' : 'none' }}>
+                      <Form.Item key={i + "d"} style={{ display: showCustom && it.id == tabKey ? 'block' : 'none' }}>
                         <Tabs defaultActiveKey="0" className='tab-content'>
-                          <TabPane tab="可看医生" key="0" forceRender={type == 3 && form.getFieldValue().softwareVOS[i] ? true : false}>
+                          <TabPane tab="可看医生" key="0" forceRender={isEdit && form.getFieldValue().softwareVOS[i] ? true : false}>
                             <Form.Item
                               name={['softwareVOS', i, 'selectedRowKeys']}
                             >
                               <DoctorList checkeds={checkedUserIds} checkDoct={(selectedRowKeys) => checkDoctEvent(selectedRowKeys)} />
                             </Form.Item>
                           </TabPane>
-                          <TabPane tab="可看科室" key="1" forceRender={type == 3 && form.getFieldValue().softwareVOS[i] ? true : false}>
+                          <TabPane tab="可看科室" key="1" forceRender={isEdit && form.getFieldValue().softwareVOS[i] ? true : false}>
                             <Form.Item
                               name={['softwareVOS', i, 'softwareMenuIds']}
                             >
@@ -380,7 +404,7 @@ function AddData(props) {
               }
             </Tabs>
           </Form.Item>
-          <Form.Item label="所属角色" required >
+          <Form.Item label="所属角色" style={{marginLeft: '123px'}} required>
             {
               orgList.map((it, i) => {
                 return (

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

@@ -15,7 +15,7 @@ function DoctorList(props) {
     getHospitalTree()
   }, []);
 
-  const { checkeds, checkDoct } = props;
+  const { checkeds, checkDoct } = props;console.log("选中:",checkeds)
   const [form] = Form.useForm();
   const [doctorList, setDoctorList] = useState([]);
   const [name, setName] = useState("");

+ 52 - 22
src/components/DataManager/index.js

@@ -1,26 +1,28 @@
 import React, { useState, useEffect } from 'react';
-import { Form, Input, Button, Table, Select, Pagination, Space, Modal, message, Row, Col } from 'antd';
+import { Form, Input, Button, Table, Select, Space, Modal, message, Row, Col } from 'antd';
 import { DownOutlined, PlusOutlined, ExclamationCircleOutlined } from '@ant-design/icons';
 // import NormalPlayer from './testComponent/testComponent'
 import '@common/common.less';
 import apiObj from '@api/index';
+import utils from '@utils/index';
 import DataContext from './data-context';
 import AddData from './AddData';
-const { post, api, xPost, get } = apiObj;
+const { post, api, xPost } = apiObj;
 const { Option } = Select;
+const {filterIds }=utils;
 function DataManager() {
   useEffect(() => {
     getDataAuthPage();
   }, []);
   const [userList, setUserList] = useState([]);
-  const [id, setId] = useState("");
+  const [currentId, setCurrentId] = useState("");   //编辑数据的id
   const [modalType, setModalType] = useState("");
   const [msvisible, setMsvisible] = useState(false);
-  const [type, setType] = useState("");
+  const [operType, setOperType] = useState("");   //操作类型:1新增 3修改
   const [addVisible, setaddVisible] = useState(false);
-  const [dataDetail, setDataDetail] = useState(null);
   const [formData, setFormData] = useState(null);
   const [total, setTotal] = useState(0);
+  const [authChecksArr, setAuthChecksArr] = useState({});   //选中数据
   const [tag, setTag] = useState([[]]);
   const [val, setVal] = useState([]);
   const [size, setSize] = useState(15);
@@ -41,11 +43,11 @@ function DataManager() {
     size: size
   }
   const showModal = (flag, id) => {
-    setaddVisible(true)
-    setType(flag)
-    setId(id)
+    setOperType(flag)
+    setCurrentId(id)
     //新增
     if (flag == 1) {
+        setaddVisible(true)
       //新增时状态默认启用
       setFormData({
         status: '1'
@@ -104,7 +106,34 @@ function DataManager() {
     xPost(api.getDataAuthById, { id: id }).then((res) => {
       if (res.data.code === 200) {
         const data = res.data.data;
-        let roles = []
+          structEditData(data);
+      }else{
+          message.warning(res.data.msg || '详情获取失败');
+      }
+    })
+  }
+  //重组成提交需要的数据
+    function structEditData(data){
+        const {id,name,status,softwares} = data;console.log('id:',id)
+        let formObj = {
+            id,
+            name,
+            status,
+            softwareVOS:[]
+        };
+        let tempArr = [],authArr=[],checkedsObj={};   //权限数据
+        softwares.map((software,i)=>{
+            const {id,name,roles,dataAuthDetail,dataType} = software;
+            const {depts,doctors,hospitals} = dataAuthDetail||{};
+            tempArr = [...depts||[],...doctors||[],...hospitals||[]];
+            checkedsObj[i] = dataAuthDetail;
+            authArr[i] = {
+                id,name,dataType:(dataType||'')+''||'7',roles:filterIds(roles||[]),dataAuthDetails:dataType==='7'?tempArr:null
+            };
+            //setTag[i] = tempArr;
+        });
+        formObj.softwareVOS = authArr;
+        /*let roles = []
         let dataAuthDetails = []
         let selectedRowKeys = []
         let softwareMenuIds = []
@@ -174,13 +203,14 @@ function DataManager() {
           }
         });
         console.log(tag);
-        
+
         setTag(tag)   //要显示的标签数据
-        setVal(val)   //数据权限类型
-        setFormData(arr)    //表单数据
-      }
-    })
-  }
+        setVal(val)   //数据权限类型*/
+        setAuthChecksArr(checkedsObj);
+        setFormData(formObj)    //表单数据
+        setaddVisible(true);
+    }
+
   //保存
   function addData(formData) {
     let url = api.addAuth;
@@ -194,12 +224,12 @@ function DataManager() {
     let param = {
       addDataAuthVO: formData,
     }
-    if (type == 3) {
+    if (operType == 3) {
       url = api.updateAuth
       param = {
         updateDataAuthVO: {
           ...formData,
-          id: id
+          id: currentId
         },
       }
     }
@@ -208,7 +238,7 @@ function DataManager() {
         getDataAuthPage();
         setaddVisible(false)
         setFormData(null)
-        message.success("添加成功");
+        message.success("修改成功");
       } else {
         message.warning(res.data.msg || '操作失败');
       }
@@ -233,7 +263,7 @@ function DataManager() {
   };
   const messageBox = (type, id) => {
     setMsvisible(true)
-    setId(id)
+    setCurrentId(id)
     setModalType(type)
   };
   const columns = [
@@ -267,9 +297,9 @@ function DataManager() {
   //提示框确认事件
   function handleOk() {
     if (modalType == 1) {
-      deleteAuth(id, 0)
+      deleteAuth(currentId, 0)
     } else if (modalType == 2) {
-      disableAuth(id, 0)
+      disableAuth(currentId, 0)
     }
   }
   //提示框取消
@@ -298,7 +328,7 @@ function DataManager() {
   }
   if (addVisible && formData) { //新增/修改界面
     return (
-      <DataContext.Provider value={{ save: addData, formData: formData, type, val, tag }}>
+      <DataContext.Provider value={{ save: addData, formData: formData, operType,authChecksArr, val, tag }}>
         <AddData back={goBack} />
       </DataContext.Provider>
     )

+ 11 - 1
src/utils/index.js

@@ -66,12 +66,22 @@ function getTimeDetail() {
 function getValueFromEvent(e) {
     return e.target.value.replace(/(^\s*)|(\s*$)/g, '');
 }
+//从对象数组中遍历出id
+function filterIds(arr,str){    //arr需遍历的数组,str需拼接的字段
+    return arr.map((it)=>{
+        if(str){
+            return it.id+'-'+it[str];
+        }
+        return it.id
+    })
+}
 const obj = {
     handleResponse,
     pickCheckedTreeIds,
     organizationData,
     getTimeDetail,
     unique,
-    getValueFromEvent
+    getValueFromEvent,
+    filterIds
 };
 export default obj;