Commit d7d77a74 authored by 陈前坚's avatar 陈前坚
parents faf10a6f 2a737a80
import React, { useState, useEffect, useCallback, useRef } from 'react';
import { Spin, Button, Empty } from 'antd';
import React, { useState, useEffect } from 'react';
import { Spin, Button } from 'antd';
import _ from 'lodash';
import ListCardItem from './ItemCard';
import { get, post } from '@/services';
import styles from './ItemCard.less';
const tip = 'loading...';
......@@ -23,69 +22,31 @@ const ListCard = props => {
ouid,
searchWord,
onCommit = () => {},
itemObj,
dataList,
onChange,
checkList,
btnLoading = false,
loading,
} = props;
const [valueList, setValueList] = useState({});
const [dataList, setdataList] = useState([]);
const [loading, setLoading] = useState(true);
const [mapObj, setMapObj] = useState({});
const [valueList, setValueList] = useState([]);
useEffect(() => {
setValueList(checkList);
}, [dataList, loading]);
const updateValueList = (checkedKeys, childrenKeys) => {
// eslint-disable-next-line no-console
console.time('updateValueList:');
const removekeys = _.difference(childrenKeys, checkedKeys);
let result = _.uniq(_.union(checkedKeys, valueList));
_.remove(result, v => removekeys.includes(v));
setValueList(result);
// eslint-disable-next-line no-unused-expressions
onChange && onChange(result);
// eslint-disable-next-line no-console
console.timeEnd('updateValueList:');
};
useEffect(() => {
setLoading(true);
const defaultConfig = {
optionsList: [],
title: '默认组',
id: '',
};
// /Cityinterface/rest/services/OMS.svc/P_GetUserByStation
//
// /Cityinterface/rest/services/OMS.svc/U_GetUserListForBatchOper
get('/Cityinterface/rest/services/OMS.svc/W4_GetMenuByRoleWithLevel', {
// OUID:ouid||'',
// stationID: ouid || '',
roleID: itemObj.roleID,
subSystemValue: itemObj.subSystemValue,
subSystemName: itemObj.subSystemValue,
_version: 9999,
_dc: new Date().getTime(),
})
.then(res => {
const list = [];
// eslint-disable-next-line no-unused-expressions
res.success &&
res.root.forEach(item => {
list.push({ ...defaultConfig, ...item });
});
setdataList(list);
setValueList(
list
.map(l =>
checkChildrenByCondition(
l,
it => (it.isChecked ? [getId(it)] : []),
'map',
).flat(Infinity),
)
.flat(Infinity)
.filter(Boolean),
);
setLoading(false);
})
.catch(err => {
console.error(err);
setLoading(false);
});
}, [ouid]);
return (
<div>
{loading ? (
......@@ -103,21 +64,6 @@ const ListCard = props => {
/>
) : (
<>
{dataList.some(d => d.type === 'widgetUIPage') && (
<ListCardItem
item={{
type: 'widgetGroup',
searchWord,
children: dataList.filter(d => d.type === 'widgetUIPage'),
text: '地图组件',
itemid: '9999',
}}
ouid={ouid}
updateValueList={updateValueList}
valueList={valueList}
searchWord={searchWord}
/>
)}
{dataList &&
dataList.length > 0 &&
dataList
......@@ -139,7 +85,7 @@ const ListCard = props => {
<div className={styles.btnBox}>
<Button
type="primary"
onClick={() => onCommit(valueList)}
onClick={() => onCommit(valueList.filter(Boolean))}
loading={btnLoading}
>
提交
......
......@@ -42,6 +42,14 @@
margin:12px !important;
}
}
.siteTitle{
font-size: 16px;
margin: 0 0 6px 0;
user-select: none;
padding: 3px;
border-bottom: 1px solid #ccc;
}
.userManageContainer{
.ant-tree-treenode{
width: 100% !important;
......
......@@ -17,7 +17,10 @@ import {
setMenuToRole,
getRoleGroupList,
} from '@/services/userCenter/roleManage/api';
import ListCard from '@/components/CheckGroup';
import ListCard, {
checkChildrenByCondition,
getId,
} from '@/components/CheckGroup';
// import ListCard from '@/pages/orgnazation/ListCard';
import qs from 'qs';
import styles from '@/pages/userCenter/roleManage/RoleManage.less';
......@@ -25,6 +28,9 @@ import AddModal from './AddModal';
import DelModal from './DelModal';
import EditModal from './EditModal';
import EditGroup from './EditGroup';
import { get } from '@/services';
import userStyles from '../UserManage.less';
const { Search } = Input;
const placeholder = '请输入功能名称';
const SiteManage = () => {
......@@ -42,8 +48,13 @@ const SiteManage = () => {
const [currentSelectId, setCurrentSelectId] = useState([]); // 选中的树节点
const [saveCurId, setSaveCurId] = useState([]); // 树节点ID
const [groupVisible, setGroupVisible] = useState(false); // 分组编辑弹窗
const [valueList, setValueList] = useState([]);
const [dataList, setdataList] = useState([]);
const [loading, setLoading] = useState(true);
const [btnLoading, setBtnLoading] = useState(false);
const [mulu, setMulu] = useState(true);
// 点击树的回调
const handleTreeSelect = (e, treenode) => {
if (treenode) {
......@@ -80,6 +91,65 @@ const SiteManage = () => {
setItemObj({});
};
}, [flag]);
const buildMap = list => {
const mapObj = {
type: 'widgetGroup',
searchWord,
children: list.filter(l => l.type === 'widgetUIPage'),
text: '地图组件',
itemid: '9999',
};
return list.some(l => l.type === 'widgetUIPage')
? [mapObj, ...list.filter(l => l.type !== 'widgetUIPage')]
: list;
};
useEffect(() => {
if (!roleID) return;
setLoading(true);
const defaultConfig = {
optionsList: [],
title: '默认组',
id: '',
};
get('/Cityinterface/rest/services/OMS.svc/W4_GetMenuByRoleWithLevel', {
roleID: itemObj.roleID,
subSystemValue: itemObj.subSystemValue,
subSystemName: itemObj.subSystemValue,
_version: 9999,
_dc: new Date().getTime(),
})
.then(res => {
const list = [];
// eslint-disable-next-line no-unused-expressions
res.success &&
res.root.forEach(item => {
list.push({ ...defaultConfig, ...item });
});
const finalList = buildMap(list);
setdataList(finalList);
setValueList(
finalList
.map(l =>
checkChildrenByCondition(
l,
it => (it.isChecked ? [getId(it)] : []),
'map',
).flat(Infinity),
)
.flat(Infinity)
.filter(Boolean),
);
setLoading(false);
})
.catch(err => {
setLoading(false);
});
}, [roleID]);
const handleAdd = e => {
setModalVisible(true);
};
......@@ -120,7 +190,7 @@ const SiteManage = () => {
i.key = i.roleID;
i.subSystemValue = item.visibleValue;
i.group = itemRole.visibleTitle;
if (roleID && roleID == i.roleID) {
if (roleID && roleID === i.roleID) {
setItemObj(i);
}
});
......@@ -130,7 +200,7 @@ const SiteManage = () => {
itemRole.title = itemRole.roleName;
itemRole.key = itemRole.roleID;
itemRole.subSystemValue = item.visibleValue;
if (roleID && roleID == itemRole.roleID) {
if (roleID && roleID === itemRole.roleID) {
setItemObj(itemRole);
}
}
......@@ -227,6 +297,9 @@ const SiteManage = () => {
spinning={spinLoading}
style={{ margin: '20px auto ', display: 'block' }}
>
<div className={userStyles.siteTitle}>
<span>选择角色:</span>
</div>
{treeData && treeData.length > 0 && (
<Tree
showLine={{ showLeafIcon: false }}
......@@ -264,14 +337,14 @@ const SiteManage = () => {
/>
</Card>
</Col>
<Col span={1}>
<Col>
{mulu && (
<Tooltip title="隐藏站点" className={styles.hide}>
<Tooltip title="隐藏角色栏" className={styles.hide}>
<DoubleLeftOutlined onClick={() => handleHide()} />
</Tooltip>
)}
{!mulu && (
<Tooltip title="显示站点" className={styles.hide}>
<Tooltip title="显示角色栏" className={styles.hide}>
<DoubleRightOutlined onClick={() => handleHide()} />
</Tooltip>
)}
......@@ -334,8 +407,9 @@ const SiteManage = () => {
<Card className={styles.cardBoxR}>
{roleID && (
<ListCard
ouid={roleID}
itemObj={itemObj}
loading={loading}
checkList={valueList}
dataList={dataList}
searchWord={searchWord}
onCommit={handleCommit}
btnLoading={btnLoading}
......
......@@ -31,6 +31,7 @@ import classnames from 'classnames';
import AddModal from './AddModal';
import DelModal from './DelModal';
import EditModal from './EditModal';
import userStyles from '../UserManage.less';
const { Search } = Input;
const placeholder = '请输入人员姓名';
......@@ -220,13 +221,16 @@ const SiteManage = () => {
<PageContainer>
<GridContent>
<Row gutter={0}>
<Col lg={mulu ? 4 : 0}>
<Col lg={mulu ? 5 : 0}>
<Card className={styles.cardBox}>
<Spin
tip="loading...."
spinning={spinLoading}
style={{ marginTop: '20px' }}
>
<div className={userStyles.siteTitle}>
<span>选择站点:</span>
</div>
<List>{renderListItem(treeData)}</List>
</Spin>
<AddModal
......@@ -248,7 +252,7 @@ const SiteManage = () => {
/>
</Card>
</Col>
<Col span={1}>
<Col>
{mulu && (
<Tooltip title="隐藏站点" className={styles.hide}>
<DoubleLeftOutlined onClick={() => handleHide()} />
......@@ -261,7 +265,7 @@ const SiteManage = () => {
)}
</Col>
<Col lg={mulu ? 19 : 23}>
<Col lg={mulu ? 18 : 23}>
<Card style={{ marginBottom: '10px' }}>
<Row align="middle">
<Col span={1}>搜索</Col>
......
......@@ -2,6 +2,14 @@
height: calc(100vh - 80px);
overflow: auto;
}
.siteTitle{
font-size: 16px;
margin: 0 0 6px 0;
user-select: none;
padding: 3px;
border-bottom: 1px solid #ccc;
}
.cardBoxR{
min-height: calc(100vh - 172px);
max-height: calc(100vh - 172px);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment