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 (
<>