import { useEffect, useState, useContext } from 'react'; import { Form, Input, Button, Steps, Tabs, Space, Switch, Breadcrumb, Radio, TreeSelect, Tree, Tag, Card, message } from 'antd'; import './index.less'; import DataContext from './data-context'; import MenuTree from './MenuTree'; 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" import Item from 'antd/lib/list/Item'; const { post, api, xPost } = apiObj; const { SHOW_PARENT } = TreeSelect; const { organizationData } = utils; const { Step } = Steps; const { TabPane } = Tabs; function AddData(props) { useEffect(() => { getCreateRoles() getHospitalTree() getOrgList() if (type == 3) { setValue(val) setTags(tag) } else { orgList.forEach((it, index) => { tags[index] = [] setTags([...tags]) }) } }, []); const { back, } = props; const [form] = Form.useForm(); const [value, setValue] = useState([]); const [key, setKey] = useState(); const [index, setIndex] = useState('0'); const [treeRloe, setTreeRloe] = useState([]); 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 = { softwareId: '' } xPost(api.getCreateRoles, params).then((res) => { if (res.data.code === 200) { const data = res.data.data; let arr = JSON.parse(JSON.stringify(data).replaceAll(/name/g, 'title').replaceAll(/id/g, 'value')) setTreeRloe(arr) } }) } //获取当前用户组织 function getHospitalTree() { post(api.getHospitalTree).then((res) => { if (res.data.code === 200) { const data = res.data.data let arr = structureTreeData(data) setTreeData(arr) } }) } //数据转换为树形结构所需字段 function structureTreeData(arr) { arr.forEach(item => { item.key = item.hospitalId + '-' + item.hospitalName item.title = item.hospitalName if (!item.children && item.depts) { item.depts.forEach(it => { it.key = item.hospitalId + '-' + it.deptId + '-' + it.deptName }) item.children = JSON.parse(JSON.stringify(item.depts).replaceAll(/deptName/g, 'title').replaceAll(/deptId/g, 'key')) return } if (item.children) { structureTreeData(item.children) } }) return arr // let list = [] // arr.forEach(it => { // it.key = it.hospitalId // it.title = it.hospitalName // list.push({ // children: it.depts, // title: it.hospitalName, // key: it.parentId + '-' + it.hospitalId + '-' + it.hospitalName // }) // it.depts.forEach(its => { // its.key = it.parentId + '-' + it.hospitalId + '-' + its.deptId + '-' + its.deptName // }) // }) // arr = JSON.parse(JSON.stringify(list).replaceAll(/deptName/g, 'title').replaceAll(/deptId/g, 'key')) // return arr } //获取组织列表 function getOrgList() { xPost(api.getUserHospitals).then((res) => { if (res.data.code === 200) { const data = res.data.data; const { software } = data; setOrgList(software); setKey(software[0].id) } else { message.warning(res.data.msg || '获取医院列表失败'); } }).catch(() => { message.error("接口出错"); }); } const onChange = (e, i) => { let val = value const formData = form.getFieldsValue(); let arr = formData.softwareVOS; arr[index].id = key arr[index].softwareMenuIds = [] arr[index].dataAuthDetails = [] arr[index].selectedRowKeys = [] if (e.target.value != 7) { arr[index].dataAuthDetails = [{ dataType: e.target.value }] } tags[index] = [] val[i] = e.target.value selectedRowKeys[index] = [] form.setFieldsValue({ softwareVOS: arr }); setTags([...tags]) setValue([...val]) setSelectedRowKeys([...selectedRowKeys]) }; // 删除选择标签 function delTag(type, id, i) { const formData = form.getFieldsValue(); if (type == 3) { formData.softwareVOS[index].selectedRowKeys.forEach((item, inx) => { if (item.split('-')[0] == id) { formData.softwareVOS[index].selectedRowKeys.splice(inx) } }) } else if (type == 1) { formData.softwareVOS[index].softwareMenuIds.forEach((item, inx) => { if (item.split('-')[0] == id) { formData.softwareVOS[index].softwareMenuIds.splice(inx) } }) } else if (type == 2) { formData.softwareVOS[index].softwareMenuIds.forEach((item, inx) => { if (item.split('-')[1] == id) { formData.softwareVOS[index].softwareMenuIds.splice(inx) } }) } form.setFieldsValue({ softwareVOS: formData.softwareVOS }); tags[index].splice(i) setTags([...tags]) console.log(form.getFieldsValue()) } function callback(key) { setKey(key.split('-')[0]) setIndex(key.split('-')[1]) } function treeChange(value) { const formData = form.getFieldsValue(); let arr = formData.softwareVOS; arr[index].roles = value form.setFieldsValue({ softwareVOS: arr }); console.log(form.getFieldsValue()) } // 去重 function unique(arr) { let result = {}; let finalResult = []; for (let i = 0; i < arr.length; i++) { result[arr[i].detailId] = arr[i]; } for (let item in result) { finalResult.push(result[item]); } return finalResult; } //医生选中 function checkDoctEvent(selectedRowKeys) { const formData = form.getFieldsValue(); let arr = formData.softwareVOS[index].dataAuthDetails ? formData.softwareVOS[index].dataAuthDetails : [] selectedRowKeys.forEach(it => { arr.push({ dataType: 7, detailId: it.split('-')[0], detailType: 3 }) }); formData.softwareVOS[index].dataAuthDetails = unique(arr) formData.softwareVOS[index].selectedRowKeys = selectedRowKeys form.setFieldsValue({ softwareVOS: formData.softwareVOS }); getTags() console.log(form.getFieldsValue()) } //树形结构选中事件 function checkTreeEvent(idsArr) { const formData = form.getFieldsValue(); let arr = formData.softwareVOS[index].dataAuthDetails ? formData.softwareVOS[index].dataAuthDetails : [] let result = idsArr.find(ele => ele.split('-').length == 2) if (result) { arr.push({ dataType: 7, detailId: result.split('-')[0], detailType: 1 }) } else { idsArr.forEach(it => { console.log(it) arr.push({ dataType: 7, detailId: it.split('-')[1], detailType: 2 }) }) } formData.softwareVOS[index].dataAuthDetails = unique(arr) formData.softwareVOS[index].softwareMenuIds = idsArr form.setFieldsValue({ softwareVOS: formData.softwareVOS }); getTags() } //获取已选中标签 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.find(ele => ele.split('-').length == 2) if (result) { tag.push({ id: result.split('-')[0], name: result.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 => { save(form.getFieldsValue()) }; function swichChange(val) { form.setFieldsValue({ status: val ? 1 : 0 }) } return ( <> 返回上一页 数据权限 {type == 3 ? '修改' : '新增'}数据权限
{ orgList.map((it, i) => { return ( { onChange(e, i) }} className="radio"> {dataList.map((Item) => { return ( {Item.val} ) }) } More} > {tags[index].map((tag, i) => { return ( delTag(tag.type, tag.id, i)}>{tag.name} ); })} checkDoctEvent(selectedRowKeys)} /> checkTreeEvent(checkedKeys)} /> ) }) } { orgList.map((it, i) => { return ( ) }) }
) } export default AddData;