wyq 3 years ago
parent
commit
c43a56aa26

+ 1 - 0
src/api/request.js

@@ -1,5 +1,6 @@
 const request = {
     login:'/security-center/userManage/login',
+    midifyPassword: '/security-center/userManage/midifyPassword',//修改密码
     getUserHospitals:'/security-center/userManage/getUserHospitals',      //用户关联的医院列表
     //组织管理相关接口
     getHospitalListInfo:'/security-center/hospitalManage/getHospitalListInfo',  //列表数据

+ 130 - 33
src/components/AHeader/index.js

@@ -1,7 +1,7 @@
-import { Layout, Dropdown ,Menu } from 'antd';
+import { Layout, Dropdown, Menu, Modal, Input, Form, Space, Button } from 'antd';
 import { withRouter } from 'react-router'
 import { useState, useEffect } from 'react';
-import { useSelector,useDispatch } from 'react-redux';
+import { useSelector, useDispatch } from 'react-redux';
 import { panesNow } from '@reducers/tabPanes.js';
 import utils from '@utils/index';
 import logo from '@images/logo.png';
@@ -9,25 +9,28 @@ import msg from '@images/msg.png';
 import me from '@images/me.png';
 import down from '@images/down.png';
 import './index.less'
-import {message} from "antd/lib/index";
-import { setSys,setUser } from '@reducers/userInfo.js';
+import { message } from "antd/lib/index";
+import { setSys, setUser } from '@reducers/userInfo.js';
 import apiObj from '@api/index';
 
-const {xPost,api} =  apiObj;
+const { post, api, xPost } = apiObj;
 const propTypes = {
 
 }
 const defaultProps = {};
 const { Header } = Layout;
 const { getTimeDetail } = utils;
-function AHeader({ history,hideName }){
+function AHeader({ history, hideName }) {
     const dispatch = useDispatch();
-    const [dateTime,setDateTime] = useState('');
-    const { user, sysName} = useSelector((state)=>{
+    const [form] = Form.useForm();
+    const [dateTime, setDateTime] = useState('');
+    const [formData, setFormData] = useState(null);
+    const [visible, setVisible] = useState(false);
+    const { user, sysName } = useSelector((state) => {
         return state.userInfo;
     });
     //退出
-    function loginOut(){
+    function loginOut() {
         localStorage.removeItem("token");
         localStorage.removeItem("systemId");
         localStorage.removeItem("hospitalId");
@@ -35,57 +38,68 @@ function AHeader({ history,hideName }){
         history.push('/login');
     }
     //获取组织列表
-    function getOrgList(){
-        xPost(api.getUserHospitals).then((res)=>{
-            if(res.data.code===200){
+    function getOrgList() {
+        xPost(api.getUserHospitals).then((res) => {
+            if (res.data.code === 200) {
                 const data = res.data.data;
-                const { userInfo,software } = data;
+                const { userInfo, software } = data;
                 const sysId = localStorage.getItem("systemId");
                 const hisId = localStorage.getItem("hospitalId");
-                const sys = software.find((it)=>{
-                    return +it.id===+sysId
+                const sys = software.find((it) => {
+                    return +it.id === +sysId
                 });
                 dispatch(setUser(userInfo));
-                sys&&dispatch(setSys({sysId,sysName:sys.name,hisId}));
-            }else{
-                message.warning(res.data.msg||'获取医院列表失败');
+                sys && dispatch(setSys({ sysId, sysName: sys.name, hisId }));
+            } else {
+                message.warning(res.data.msg || '获取医院列表失败');
             }
         })
     }
     //修改密码
-    function changePsd(){
-
+    function changePsd() {
+        setVisible(true)
     }
     //时间
     let interVal;
-    function countTime(){
-        interVal = setInterval(()=>{
+    function countTime() {
+        interVal = setInterval(() => {
             setDateTime(getTimeDetail())
-        },1000);
+        }, 1000);
+    }
+    function cancel() { }
+    const onFinish = values => {
+        console.log(values);
+        const params = values
+        post(api.midifyPassword,params).then((res) => {
+            if (res.data.code === 200) {
+
+            }
+        })
     }
-    useEffect(()=>{
+
+    useEffect(() => {
         countTime();
-        if(!user.name){
+        if (!user.name) {
             getOrgList();
         }
-        return function clearUp(){
+        return function clearUp() {
             clearInterval(interVal)
         }
-    },[]);
+    }, []);
     const menu = (
         <Menu>
             <Menu.Item key="0">
                 <span className='changePsd' onClick={changePsd}>修改密码</span>
             </Menu.Item>
-            <Menu.Divider/>
+            <Menu.Divider />
             <Menu.Item key="3" onClick={loginOut}>退出</Menu.Item>
         </Menu>
     );
     return (
         <Header className='page-header'>
-            <img className='logo' src={logo} alt=""/>
-            {hideName?'':<><span className='break-line'>|</span>
-            <span className='sys-name'>{sysName}</span></>}
+            <img className='logo' src={logo} alt="" />
+            {hideName ? '' : <><span className='break-line'>|</span>
+                <span className='sys-name'>{sysName}</span></>}
             <div className='infos'>
                 <span className='time'>{dateTime}</span>
                 <span className='break-line'>|</span>
@@ -93,14 +107,97 @@ function AHeader({ history,hideName }){
                 <div className="user">
                     <Dropdown overlay={menu} trigger={['click']}>
                         <span className="ant-dropdown-link" onClick={e => e.preventDefault()}>
-                            <img className='user-icon' src={me} alt="用户头像"/>
+                            <img className='user-icon' src={me} alt="用户头像" />
                             <i className='user-name'>{user.name}</i>
-                            <img src={down} alt=""/>
+                            <img src={down} alt="" />
                         </span>
                     </Dropdown>
                 </div>
             </div>
+            {visible ?
+                <Modal
+                    title='修改密码'
+                    okText='确定'
+                    cancelText='取消'
+                    width={'40%'}
+                    visible={visible}
+                    onCancel={cancel}
+                    footer={null}
+                    forceRender={true}
+                    centered={true}
+                >
+                    <Form
+                        labelCol={{ span: 6 }}
+                        wrapperCol={{ span: 16 }}
+                        form={form}
+                        name="register"
+                        onFinish={onFinish}
+                    >
+
+                        <Form.Item
+                            name="password"
+                            label="原密码"
+                            rules={[
+                                {
+                                    required: true,
+                                    message: '8-12位大小写字母、数字、特殊字符',
+                                },
+                            ]}
+                            hasFeedback
+                        >
+                            <Input.Password placeholder="8-12位大小写字母、数字、特殊字符" />
+                        </Form.Item>
+                        <Form.Item
+                            name="modifyPassword"
+                            label="新密码"
+                            dependencies={['password']}
+                            hasFeedback
+                            rules={[
+                                {
+                                    required: true,
+                                    message: '8-12位大小写字母、数字、特殊字符',
+                                }
+                            ]}
+                        >
+                            <Input.Password placeholder="8-12位大小写字母、数字、特殊字符" />
+                        </Form.Item>
+                        <Form.Item
+                            name="againnewpassword"
+                            label="确认新密码"
+                            dependencies={['password']}
+                            hasFeedback
+                            rules={[
+                                {
+                                    required: true,
+                                    message: '8-12位大小写字母、数字、特殊字符',
+                                },
+                                ({ getFieldValue }) => ({
+                                    validator(_, value) {
+                                        if (!value || getFieldValue('modifyPassword') === value) {
+                                            return Promise.resolve();
+                                        }
+                                        return Promise.reject(new Error('两次密码不一致,请确认密码'));
+                                    },
+                                }),
+                            ]}
+                        >
+                            <Input.Password placeholder="8-12位大小写字母、数字、特殊字符" />
+                        </Form.Item>
+                        <Form.Item wrapperCol={{ offset: 8, span: 16 }}>
+                            <Space size="middle">
+                                <Button htmlType="button" onClick={e => cancel()}>
+                                    取消
+                                </Button>
+                                <Button type="primary" htmlType="submit">
+                                    保存
+                                </Button>
+                            </Space>
+                        </Form.Item>
+                    </Form>
+                </Modal>
+                : ''}
         </Header>
+
     )
 }
 

+ 19 - 23
src/components/DataManager/AddData.js

@@ -15,13 +15,19 @@ const { organizationData } = utils;
 const { Step } = Steps;
 const { TabPane } = Tabs;
 function AddData(props) {
-  const { save, formData, type, val, tag } = useContext(DataContext);
   useEffect(() => {
     getCreateRoles()
     getHospitalTree()
     getOrgList()
-    setValue(val)
-
+    if (type == 3) {
+      setValue(val)
+      setTags(tag)
+    } else {
+      orgList.forEach((it, index) => {
+        tags[index] = []
+        setTags([...tags])
+      })
+    }
   }, []);
   const { back, } = props;
   const [form] = Form.useForm();
@@ -29,22 +35,22 @@ function AddData(props) {
   const [key, setKey] = useState();
   const [index, setIndex] = useState('0');
   const [treeRloe, setTreeRloe] = useState([]);
-  const [tags, setTags] = useState(tag);
+  const [tags, setTags] = useState([[]]);
   const [treeData, setTreeData] = useState([]);
   const [selectedKeys, setSelectedKeys] = useState([]);
   const [orgList, setOrgList] = useState([]);
   const [selectedRowKeys, setSelectedRowKeys] = useState([]);
   const [autoExpandParent, setAutoExpandParent] = useState(true);
-
+  const { save, formData, type, val, tag } = useContext(DataContext);
   const staticInfo = useSelector(state => {
     return state.staticInfo;
   });
-
   const { dataList } = staticInfo;
   const initialValues = formData
   const validateMessages = {
     required: '${label}不能为空',
   };
+  
   //获取当前用于所属角色
   function getCreateRoles() {
     const params = {
@@ -109,16 +115,6 @@ function AddData(props) {
         const { software } = data;
         setOrgList(software);
         setKey(software[0].id)
-        if (type == 3) {
-          setTags([...tag])
-        } else {
-          software.forEach((it, index) => {
-            tags[index] = []
-            setTags([...tags])
-          })
-        }
-
-
       } else {
         message.warning(res.data.msg || '获取医院列表失败');
       }
@@ -207,7 +203,6 @@ function AddData(props) {
   }
   //医生选中
   function checkDoctEvent(selectedRowKeys) {
-    console.log(tags)
     const formData = form.getFieldsValue();
     let arr = formData.softwareVOS[index].dataAuthDetails ? formData.softwareVOS[index].dataAuthDetails : []
     selectedRowKeys.forEach(it => {
@@ -378,12 +373,13 @@ function AddData(props) {
                     style={{ display: i == index ? 'block' : 'none' }}
                     key={i}
                   >
-                    <Form.Item style={{ display: i == index ? 'block' : 'none' }} key={i + "b"} hidden={true} name={['softwareVOS', i, 'roles']} rules={[
-                      {
-                        required: true,
-                        message: '请选择所属角色',
-                      },
-                    ]}>
+                    <Form.Item style={{ display: i == index ? 'block' : 'none' }} key={i + "b"} hidden={true}
+                      name={['softwareVOS', i, 'roles']} rules={[
+                        {
+                          required: true,
+                          message: '请选择所属角色',
+                        },
+                      ]}>
                       <TreeSelect
                         showSearch={false}
                         treeData={treeRloe}

+ 4 - 2
src/components/DataManager/doctorList.js

@@ -14,8 +14,8 @@ function DoctorList(props) {
     getDoctorPage();
     getHospitalTree()
   }, []);
-  
-  const { checkeds,checkDoct } = props;
+
+  const { checkeds, checkDoct } = props;
   const [form] = Form.useForm();
   const [doctorList, setDoctorList] = useState([]);
   const [name, setName] = useState("");
@@ -29,6 +29,8 @@ function DoctorList(props) {
     hospitals: []
   });
   const selectedRowKeys = checkeds.selectedRowKeys ? checkeds.selectedRowKeys.slice() : []
+  console.log(selectedRowKeys);
+
   //获取可看医生列表
   function getDoctorPage() {
     const param = {

+ 6 - 4
src/components/DataManager/index.js

@@ -147,10 +147,13 @@ function DataManager() {
             })
             softwareMenuIds[i].push(item.id + '-' + item.name)
           })
+
+
           arr.softwareVOS[i].roles = roles[i]
-          arr.softwareVOS[i].dataAuthDetails = dataAuthDetails[i]
+          arr.softwareVOS[i].dataAuthDetails = dataAuthDetails[i] && dataAuthDetails[i].length > 0 ? dataAuthDetails[i] : [{ dataType: it.dataType }]
           arr.softwareVOS[i].selectedRowKeys = selectedRowKeys[i]
           arr.softwareVOS[i].softwareMenuIds = softwareMenuIds[i]
+
           if (arr.softwareVOS[i].dataAuthDetails && arr.softwareVOS[i].dataAuthDetails.length > 0) {
             arr.softwareVOS[i].datatype = JSON.stringify(arr.softwareVOS[i].dataAuthDetails[0].dataType)
             val[i] = arr.softwareVOS[i].dataAuthDetails[0].dataType
@@ -159,10 +162,9 @@ function DataManager() {
             val[i] = arr.softwareVOS[i].dataType
           }
         });
+        setTag(tag)
         setVal(val)
         setFormData(arr)
-        setTag(tag)
-        setType(2)
       }
     })
   }
@@ -314,7 +316,7 @@ function DataManager() {
         <Table
           columns={columns}
           dataSource={userList}
-          rowKey={record => record.id}
+          rowKey={record => record.id + record.roleName}
           pagination={{
             pageNo: 1,
             pageSize: 15,

+ 224 - 219
src/components/OrgManager/AddSubOrg.js

@@ -1,17 +1,17 @@
-import {useEffect,useState,useContext} from 'react';
-import { Form, Input, Checkbox, Button, Select,Steps,Tabs ,InputNumber,Space,Switch,Breadcrumb  } from 'antd';
-import MenuTree  from './MenuTree';
+import { useEffect, useState, useContext } from 'react';
+import { Form, Input, Checkbox, Button, Select, Steps, Tabs, InputNumber, Space, Switch, Breadcrumb } from 'antd';
+import MenuTree from './MenuTree';
 import './index.less';
 import OrgContext from './org-context';
 import apiObj from '@api/index';
 import backIcon from "@images/back.png";
 
-const {post,api,xPost} = apiObj;
+const { post, api, xPost } = apiObj;
 
 const { Step } = Steps;
 const { TabPane } = Tabs;
 const { Option } = Select;
-function AddSubOrg(props){
+function AddSubOrg(props) {
     const [current, setCurrent] = useState(0);
     const { back } = props;
     const steps = [
@@ -38,7 +38,7 @@ function AddSubOrg(props){
     return (
         <>
             <Breadcrumb separator="">
-                <Breadcrumb.Item><img className='back-icon' src={backIcon} onClick={back} alt="返回上一页"/></Breadcrumb.Item>
+                <Breadcrumb.Item><img className='back-icon' src={backIcon} onClick={back} alt="返回上一页" /></Breadcrumb.Item>
                 <Breadcrumb.Item>组织管理</Breadcrumb.Item>
                 <Breadcrumb.Separator />
                 <Breadcrumb.Item>新增子组织</Breadcrumb.Item>
@@ -60,15 +60,15 @@ function AddSubOrg(props){
     )
 }
 
-function StepContent(props){
+function StepContent(props) {
     const [form] = Form.useForm();
     const [treeDatas, setTreeDatas] = useState([]);
     const [tabDatas, setTabDatas] = useState([]);
     const [activeTab, setActiveTab] = useState('');
     const [sysCheckeds, setSysCheckeds] = useState([]);
     const [name, setName] = useState('');
-    const { orgId, orgName, hisTypeList, save, detail}  = useContext(OrgContext);
-    const {current,pre,next} = props;
+    const { type, hisTypeList, save, detail } = useContext(OrgContext);
+    const { current, pre, next } = props;
     const initialValues = detail
     const vilidateRules = {
         required: '${label}不能为空!',
@@ -79,88 +79,93 @@ function StepContent(props){
     };
 
     //获取菜单数据
-    function getTreeData(){
-        xPost(api.getUserMenuResourceTree,{type:0}).then((res)=>{
-            if(res.data.code===200){
+    function getTreeData() {
+        xPost(api.getUserMenuResourceTree, { type: 0 }).then((res) => {
+            if (res.data.code === 200) {
                 const data = res.data.data;
                 const treeDatas = structureTreeData(data);
                 setTreeDatas(treeDatas);
                 setTabDatas([treeDatas[0]]);
                 setActiveTab(treeDatas[0].key);
                 setName(treeDatas[0].title)
+                setSysCheckeds(treeDatas[0] ? [treeDatas[0].key] : []);
             }
 
         })
     }
     //数据转换为树形结构所需字段
-    function structureTreeData(data){
+    function structureTreeData(data) {
         const arr = [];
         const checks = []
-        let obj={};
-        data.map((it,i)=>{
-            obj =JSON.stringify(it.children).replace(/softwareMenuId/g,"key").replace(/menuName/g,'title');
-            arr[i]={
-                title:it.softwareName,
-                key:it.softwareId,
-                children:JSON.parse(obj)
+        let obj = {};
+        data.map((it, i) => {
+            obj = JSON.stringify(it.children).replace(/softwareMenuId/g, "key").replace(/menuName/g, 'title');
+            arr[i] = {
+                title: it.softwareName,
+                key: it.softwareId,
+                children: JSON.parse(obj)
             }
             checks[i] = it.softwareId
         });
-        setSysCheckeds(arr[0]?[arr[0].key]:[]);
-
         //form.setFieldsValue({softwares:[{id:arr[0]?[arr[0].key]:''}]});   //默认选中第一个
         return arr;
     }
-    useEffect(()=>{
-        getTreeData();
-    },[]);
-    function handlePre(){
+    useEffect(() => {
+        if (type == 2) {
+            const treeDatas = structureTreeData(detail.getRoleDTO.loginUserMenuResourceTree);
+            setTabDatas(treeDatas);
+            setSysCheckeds(detail.sids);
+        } else {
+            getTreeData();
+        }
+    }, []);
+    function handlePre() {
         pre();
     }
-    function handleNext(){
+    function handleNext() {
         const validateKeys = {
-            0:['parentId','name','code',['addHospitalUserVO','name'],['addHospitalUserVO','mobilePhone'],'type','orderNo'],
-            1:[['addHospitalUserVO','username'],['addHospitalUserVO','password'],'confirmPsd'],
+            0: ['parentId', 'name', 'code', ['addHospitalUserVO', 'name'], ['addHospitalUserVO', 'mobilePhone'], 'type', 'orderNo'],
+            1: [['addHospitalUserVO', 'username'], ['addHospitalUserVO', 'password'], 'confirmPsd'],
         };
-        form.validateFields(validateKeys[current]).then((res)=>{
+        form.validateFields(validateKeys[current]).then((res) => {
             next(form);
         });
     }
-    function handleSave(){
-        form.validateFields([['softwares',0,'id'],['softwares',0,'softwareMenuIds'],['softwares',0,'softwareResourceIds']]).then((res)=>{
+    function handleSave() {
+        form.validateFields([['softwares', 0, 'id'], ['softwares', 0, 'softwareMenuIds'], ['softwares', 0, 'softwareResourceIds']]).then((res) => {
             save(form.getFieldsValue())
         });
     }
     //树形结构选中事件
-    function checkTreeEvent(i,idsArr,sourceIds){
+    function checkTreeEvent(i, idsArr, sourceIds) {
         console.log(activeTab);
-        
-        const formData=form.getFieldsValue();
-        const arr=formData.softwares;
-        arr[i]={
+
+        const formData = form.getFieldsValue();
+        const arr = formData.softwares;
+        arr[i] = {
             id: activeTab,
-            name:name,
-            softwareMenuIds:idsArr,
-            softwareResourceIds:sourceIds
+            name: name,
+            softwareMenuIds: idsArr,
+            softwareResourceIds: sourceIds
         };
         form.setFieldsValue({
-            softwares:arr
+            softwares: arr
         });
-        
+
     }
-    function onTabChange(activeTab){
+    function onTabChange(activeTab) {
         console.log(activeTab);
-        
+
         setName(activeTab.split('-')[0])
         setActiveTab(activeTab.split('-')[1])
     }
     //开放系统勾选事件
-    function softwareChange(checkedValue){
-        let arr = [],item;
+    function softwareChange(checkedValue) {
+        let arr = [], item;
         setSysCheckeds(checkedValue);
-        for(let i=0;i<checkedValue.length;i++){
-            item=treeDatas.find((it)=>it.key===checkedValue[i]);
-            if(item){
+        for (let i = 0; i < checkedValue.length; i++) {
+            item = treeDatas.find((it) => it.key === checkedValue[i]);
+            if (item) {
                 arr.push(item);
             }
         }
@@ -168,178 +173,178 @@ function StepContent(props){
     }
     return (
         <>
-        <Form
-            labelCol={{ span: 6 }}
-            wrapperCol={{ span: 16 }}
-            layout="horizontal"
-            validateMessages={vilidateRules}
-            initialValues={initialValues}
-            form={form}
-        >
-            <Form.Item
-                label="上级组织ID"
-                hidden={true}
-                name='parentId'>
-                <Input  placeholder='请输入上级组织ID' autoComplete='off'/>
-            </Form.Item>
-            <Form.Item
-                label="上级组织"
-                name='parentName'
-                hidden={current!==0}
-                rules={[{ required: true}]}>
-                <Input disabled/>
-            </Form.Item>
-            <Form.Item
-                label="组织名称"
-                name='name'
-                required
-                hidden={current!==0}
-                rules={[() => ({
-                    validator(_, value) {
-                        if(!value){
-                            return Promise.reject(new Error('组织名称不能为空!'));
-                        }else if (value.length<51) {
-                            return Promise.resolve();
-                        }
-                        return Promise.reject(new Error('格式错误!'));
-                    },
-                }),]}>
-                <Input placeholder='请输入组织名称' autoComplete='off'/>
-            </Form.Item>
-            <Form.Item
-                label="组织编码"
-                hidden={current!==0}
-                name='code'>
-                <Input placeholder='请输入组织编码' autoComplete='off'/>
-            </Form.Item>
-            <Form.Item
-                label="联系人"
-                hidden={current!==0}
-                name={['addHospitalUserVO','name']}>
-                <Input  placeholder='请输入联系人' autoComplete='off'/>
-            </Form.Item>
-            <Form.Item
-                label="手机号码"
-                hidden={current!==0}
-                name={['addHospitalUserVO','mobilePhone']}>
-                <Input  placeholder='请输入手机号码' autoComplete='off'/>
-            </Form.Item>
-            <Form.Item
-                label="类型"
-                name='type'
-                hidden={current!==0}
-                rules={[{ required: true }]}>
-                <Select placeholder='请选择类型'>
-                    {hisTypeList.map((item,i)=>{
-                        return (
-                            <Option value={item.name} key={i}>{item.val}</Option>
-                        )
-                    })}
-                </Select>
-            </Form.Item>
-            <Form.Item
-                label="排序"
-                hidden={current!==0}
-                name='orderNo'>
-                <InputNumber placeholder='大于0的整数' min={0}/>
-            </Form.Item>
-            <Form.Item
-                label="用户名"
-                hidden={current!==1}
-                name={['addHospitalUserVO','username']}
-                rules={[{ required: true}]}>
-                <Input placeholder='请输入用户名' autoComplete='off'/>
-            </Form.Item>
-            <Form.Item
-                label="初始密码"
-                type="password"
-                hidden={current!==1}
-                name={['addHospitalUserVO','password']}
-                rules={[{ required: true}]}>
-                <Input placeholder='请输入初始密码' autoComplete='off'/>
-            </Form.Item>
-            <Form.Item
-                label="确认密码"
-                type="password"
-                name='confirmPsd'
-                dependencies={['addHospitalUserVO','password']}
-                hidden={current!==1}
-                rules={[{ required: true},({ getFieldValue }) => ({
-                    validator(_, value) {
-                        if (!value || getFieldValue(['addHospitalUserVO','password']) === value) {
-                            return Promise.resolve();
-                        }
-                        return Promise.reject(new Error('两次密码输入不一致!'));
-                    },
-                }),]}>
-                <Input placeholder='请输入确认密码' autoComplete='off'/>
-            </Form.Item>
-            <Form.Item
-                label="开放系统"
-                type="password"
-                hidden={current!==2}
-                rules={[{ required: true}]}>
-                <Checkbox.Group value={sysCheckeds} onChange={softwareChange}>
-                {
-                    treeDatas.map((it, i) => {
-                        return (
-                                <Form.Item key={it.key} noStyle>
-                                    <Checkbox key={i} value={it.key}>{it.title}</Checkbox>
-                                </Form.Item>
-                        )
-                    })
-                }
-                </Checkbox.Group>
-            </Form.Item>
-            <Form.Item
-                label="菜单权限"
-                hidden={current!==2}
-                required>
-                <Tabs onChange={onTabChange} type="card">
-                    {
-                        tabDatas.map((it,i)=>{
+            <Form
+                labelCol={{ span: 6 }}
+                wrapperCol={{ span: 16 }}
+                layout="horizontal"
+                validateMessages={vilidateRules}
+                initialValues={initialValues}
+                form={form}
+            >
+                <Form.Item
+                    label="上级组织ID"
+                    hidden={true}
+                    name='parentId'>
+                    <Input placeholder='请输入上级组织ID' autoComplete='off' />
+                </Form.Item>
+                <Form.Item
+                    label="上级组织"
+                    name='parentName'
+                    hidden={current !== 0}
+                    rules={[{ required: true }]}>
+                    <Input disabled />
+                </Form.Item>
+                <Form.Item
+                    label="组织名称"
+                    name='name'
+                    required
+                    hidden={current !== 0}
+                    rules={[() => ({
+                        validator(_, value) {
+                            if (!value) {
+                                return Promise.reject(new Error('组织名称不能为空!'));
+                            } else if (value.length < 51) {
+                                return Promise.resolve();
+                            }
+                            return Promise.reject(new Error('格式错误!'));
+                        },
+                    }),]}>
+                    <Input placeholder='请输入组织名称' autoComplete='off' />
+                </Form.Item>
+                <Form.Item
+                    label="组织编码"
+                    hidden={current !== 0}
+                    name='code'>
+                    <Input placeholder='请输入组织编码' autoComplete='off' />
+                </Form.Item>
+                <Form.Item
+                    label="联系人"
+                    hidden={current !== 0}
+                    name={['addHospitalUserVO', 'name']}>
+                    <Input placeholder='请输入联系人' autoComplete='off' />
+                </Form.Item>
+                <Form.Item
+                    label="手机号码"
+                    hidden={current !== 0}
+                    name={['addHospitalUserVO', 'mobilePhone']}>
+                    <Input placeholder='请输入手机号码' autoComplete='off' />
+                </Form.Item>
+                <Form.Item
+                    label="类型"
+                    name='type'
+                    hidden={current !== 0}
+                    rules={[{ required: true }]}>
+                    <Select placeholder='请选择类型'>
+                        {hisTypeList.map((item, i) => {
                             return (
-                                <TabPane tab={it.title} key={it.title + '-' + it.key}>
-                                    <Form.Item key={i} name={['softwares', i, 'softwareMenuIds']} noStyle>
-                                        <MenuTree data={it} checkeds={form.getFieldValue().softwares ? form.getFieldValue().softwares[i] : []} checkEv={(checkedKeys,sourceIds)=>checkTreeEvent(i,checkedKeys,sourceIds)}/>
-                                    </Form.Item>
-                                    <Form.Item key={i+"a"} hidden={true} name={['softwares', i, 'id']} noStyle>
-                                        <Input/>
-                                    </Form.Item>
-                                    <Form.Item key={i+"b"} hidden={true} name={['softwares', i, 'softwareResourceIds']} noStyle>
-                                        <Input/>
-                                    </Form.Item>
-                                    <Form.Item key={i + "c"} hidden={true} name={['softwares', i, 'name']} noStyle>
-                                        <Input />
-                                    </Form.Item>
-                                </TabPane>
+                                <Option value={item.name} key={i}>{item.val}</Option>
                             )
-                        })
-                    }
-                </Tabs>
-            </Form.Item>
-            <Form.Item
-                label="当前状态"
-                hidden={current!==2}>
-                <Space>
-                    <Form.Item
-                        name='status'
-                        valuePropName='checked'
-                        getValueFromEvent={(checked)=>{
-                            return +checked+'';
-                        }}
-                        noStyle>
-                        <Switch />
-                    </Form.Item>
-                    <span>启用</span>
-                </Space>
-            </Form.Item>
-        </Form>
-        <div className="button-box">
-            {current!==0?<Button onClick={handlePre}>上一步</Button>:null}
-            {current!==2?<Button onClick={handleNext} type='primary'>下一步</Button>:null}
-            {current===2?<Button onClick={handleSave} type='primary'>保存</Button>:null}
-        </div>
+                        })}
+                    </Select>
+                </Form.Item>
+                <Form.Item
+                    label="排序"
+                    hidden={current !== 0}
+                    name='orderNo'>
+                    <InputNumber placeholder='大于0的整数' min={0} />
+                </Form.Item>
+                <Form.Item
+                    label="用户名"
+                    hidden={current !== 1}
+                    name={['addHospitalUserVO', 'username']}
+                    rules={[{ required: true }]}>
+                    <Input placeholder='请输入用户名' autoComplete='off' disabled={type == 2 ? true : false} />
+                </Form.Item>
+                <Form.Item
+                    label="初始密码"
+                    type="password"
+                    hidden={current !== 1}
+                    name={['addHospitalUserVO', 'password']}
+                    rules={[{ required: true }]}>
+                    <Input placeholder='请输入初始密码' autoComplete='off' disabled={type == 2 ? true : false} />
+                </Form.Item>
+                <Form.Item
+                    label="确认密码"
+                    type="password"
+                    name='confirmPsd'
+                    dependencies={['addHospitalUserVO', 'password']}
+                    hidden={current !== 1}
+                    rules={[{ required: true }, ({ getFieldValue }) => ({
+                        validator(_, value) {
+                            if (!value || getFieldValue(['addHospitalUserVO', 'password']) === value) {
+                                return Promise.resolve();
+                            }
+                            return Promise.reject(new Error('两次密码输入不一致!'));
+                        },
+                    }),]}>
+                    <Input placeholder='请输入确认密码' autoComplete='off' disabled={type == 2 ? true : false} />
+                </Form.Item>
+                <Form.Item
+                    label="开放系统"
+                    type="password"
+                    hidden={current !== 2}
+                    rules={[{ required: true }]}>
+                    <Checkbox.Group value={sysCheckeds} onChange={softwareChange}>
+                        {
+                            treeDatas.map((it, i) => {
+                                return (
+                                    <Form.Item key={it.key} noStyle>
+                                        <Checkbox key={i} value={it.key}>{it.title}</Checkbox>
+                                    </Form.Item>
+                                )
+                            })
+                        }
+                    </Checkbox.Group>
+                </Form.Item>
+                <Form.Item
+                    label="菜单权限"
+                    hidden={current !== 2}
+                    required>
+                    <Tabs onChange={onTabChange} type="card">
+                        {
+                            tabDatas.map((it, i) => {
+                                return (
+                                    <TabPane tab={it.title} key={it.title + '-' + it.key}>
+                                        <Form.Item key={i} name={['softwares', i, 'softwareMenuIds']} noStyle>
+                                            <MenuTree data={it} checkeds={form.getFieldValue().softwares ? form.getFieldValue().softwares[i] : []} checkEv={(checkedKeys, sourceIds) => checkTreeEvent(i, checkedKeys, sourceIds)} />
+                                        </Form.Item>
+                                        <Form.Item key={i + "a"} hidden={true} name={['softwares', i, 'id']} noStyle>
+                                            <Input />
+                                        </Form.Item>
+                                        <Form.Item key={i + "b"} hidden={true} name={['softwares', i, 'softwareResourceIds']} noStyle>
+                                            <Input />
+                                        </Form.Item>
+                                        <Form.Item key={i + "c"} hidden={true} name={['softwares', i, 'name']} noStyle>
+                                            <Input />
+                                        </Form.Item>
+                                    </TabPane>
+                                )
+                            })
+                        }
+                    </Tabs>
+                </Form.Item>
+                <Form.Item
+                    label="当前状态"
+                    hidden={current !== 2}>
+                    <Space>
+                        <Form.Item
+                            name='status'
+                            valuePropName='checked'
+                            getValueFromEvent={(checked) => {
+                                return +checked + '';
+                            }}
+                            noStyle>
+                            <Switch />
+                        </Form.Item>
+                        <span>启用</span>
+                    </Space>
+                </Form.Item>
+            </Form>
+            <div className="button-box">
+                {current !== 0 ? <Button onClick={handlePre}>上一步</Button> : null}
+                {current !== 2 ? <Button onClick={handleNext} type='primary'>下一步</Button> : null}
+                {current === 2 ? <Button onClick={handleSave} type='primary'>保存</Button> : null}
+            </div>
         </>
     )
 }

+ 5 - 2
src/components/OrgManager/index.js

@@ -162,8 +162,9 @@ function OrgManager() {
         for (let i = 0; i < menuData.length; i++) {
             const obj = pickCheckedTreeIds(menuData[i]);
             softwares.push(obj);
+            sids.push(obj.id);
         }
-        const fData = Object.assign({}, content, { softwares });
+        const fData = Object.assign({}, content, { softwares, sids });
         setOrgDetail(fData);
     }
     //修改子组织
@@ -180,6 +181,8 @@ function OrgManager() {
         if (type == 2) {
             url = api.updateHospital
             param.id = operId
+            delete param.addHospitalUserVO
+            delete param.confirmPsd      
         }
         post(url, param).then((res) => {
             if (res.data.code === 200) {
@@ -270,7 +273,7 @@ function OrgManager() {
     };
     if (addVisible && orgDetail) {
         return (
-            <OrgContext.Provider value={{ orgId, orgName, hisTypeList, save: addSubOrg, detail: orgDetail }}>
+            <OrgContext.Provider value={{ type,hisTypeList, save: addSubOrg, detail: orgDetail }}>
                 <AddSubOrg back={goBack} />
             </OrgContext.Provider>
         )

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

@@ -65,6 +65,7 @@ function ContentForm(props){
     }
     //数据转换为树形结构所需字段
     function structureTreeData(data){
+        console.log(data);
         const arr = [];
         let obj={};
         data.map((it,i)=>{

+ 0 - 2
src/components/RoleManager/index.js

@@ -31,8 +31,6 @@ function RoleManager(){
         return state.staticInfo;
     });
     const {statusList} = staticInfo;
-
-
     const tipText={
         1:'确定要删除该角色?',
         2:'当前角色存在用户,删除后用户将一并被删除',