Commit 5946c5ef authored by 皮倩雯's avatar 皮倩雯

三级模态增加路由

parents 4f2ba10a 5e0b4c47
Pipeline #36041 skipped with stages
import React, { useState, useEffect } from 'react'; import React, { useState, useEffect } from 'react';
import { Form, Modal, Input, Select, Tooltip, Button, notification, Image, Menu, Dropdown } from 'antd'; import {
Form,
Modal,
Input,
Select,
Tooltip,
Button,
notification,
Image,
Menu,
Dropdown,
Drawer,
Space,
} from 'antd';
import { import {
PlusOutlined, PlusOutlined,
InfoCircleOutlined, InfoCircleOutlined,
DownOutlined DownOutlined,
} from '@ant-design/icons'; } from '@ant-design/icons';
import { import { LoadEventFields } from '@/services/platform/bs';
LoadEventFields
} from '@/services/platform/bs'
import add from '@/assets/images/thumbnail/add.jpg'; import add from '@/assets/images/thumbnail/add.jpg';
import editor from '@/assets/images/thumbnail/editor.jpg'; import editor from '@/assets/images/thumbnail/editor.jpg';
import hand from '@/assets/images/thumbnail/hand.png'; import hand from '@/assets/images/thumbnail/hand.png';
...@@ -15,26 +26,43 @@ import search from '@/assets/images/thumbnail/search.jpg'; ...@@ -15,26 +26,43 @@ import search from '@/assets/images/thumbnail/search.jpg';
import taizhang from '@/assets/images/thumbnail/taizhang.jpg'; import taizhang from '@/assets/images/thumbnail/taizhang.jpg';
import web from '@/assets/images/thumbnail/web.jpg'; import web from '@/assets/images/thumbnail/web.jpg';
import { import {
GetCM_Ledger_LoadLedgerTable, GetCMLedger_QueryLedgers, GetCMLedger_OperateLedger GetCM_Ledger_LoadLedgerTable,
GetCMLedger_QueryLedgers,
GetCMLedger_OperateLedger,
} from '@/services/standingBook/api'; } from '@/services/standingBook/api';
import styles from './standingBook.less'; import styles from './standingBook.less';
import ChangeAdd from './changeAdd' import ChangeAdd from './changeAdd';
import { orderBy } from 'lodash'; import { orderBy } from 'lodash';
const { Option } = Select; const { Option } = Select;
const { TextArea } = Input; const { TextArea } = Input;
const AddModal = props => { const AddModal = props => {
const { callBackSubmit = () => { }, type, formObj, visible, tableData, maxLength } = props; const {
callBackSubmit = () => {},
type,
formObj,
visible,
tableData,
maxLength,
onCancel,
} = props;
const [standingTable, setStandingTable] = useState([]); const [standingTable, setStandingTable] = useState([]);
const [inputValue, setInputVaule] = useState({ Fields: '', EditFields: '', AddFields: '', MobileFields: '', SearchFields: '', WebFields: '' }); const [inputValue, setInputVaule] = useState({
Fields: '',
EditFields: '',
AddFields: '',
MobileFields: '',
SearchFields: '',
WebFields: '',
});
const [isVisible, setIsVisible] = useState(false); // 弹窗 const [isVisible, setIsVisible] = useState(false); // 弹窗
const [loading, setLoading] = useState(false); const [loading, setLoading] = useState(false);
const [pickItem, setPickItem] = useState('') const [pickItem, setPickItem] = useState('');
const [filed, setFiled] = useState({}); // 传给子组件列表数据 const [filed, setFiled] = useState({}); // 传给子组件列表数据
const [types, setTypes] = useState(''); // 弹窗类型 const [types, setTypes] = useState(''); // 弹窗类型
const [Order, setOrder] = useState(''); // 弹窗类型 const [Order, setOrder] = useState(''); // 弹窗类型
const [checkedList, setCheckedList] = useState([]) const [checkedList, setCheckedList] = useState([]);
const [Type,setType] = useState('') const [Type, setType] = useState('');
const [characterValue, setCharacterValue] = useState('') const [characterValue, setCharacterValue] = useState('');
const [standingType, setStandingType] = useState(['台账', '反馈', '设备']); const [standingType, setStandingType] = useState(['台账', '反馈', '设备']);
const [form] = Form.useForm(); const [form] = Form.useForm();
const { Item } = Form; const { Item } = Form;
...@@ -44,7 +72,10 @@ const AddModal = props => { ...@@ -44,7 +72,10 @@ const AddModal = props => {
if (validate) { if (validate) {
setLoading(true); setLoading(true);
let obj = form.getFieldsValue(); let obj = form.getFieldsValue();
let data = type == 'add' ? { ...obj, ...inputValue, Order: maxLength } : { ...obj, Order, ID: formObj.ID } let data =
type == 'add'
? { ...obj, ...inputValue, Order: maxLength }
: { ...obj, Order, ID: formObj.ID };
GetCMLedger_OperateLedger(data) GetCMLedger_OperateLedger(data)
.then(res => { .then(res => {
setLoading(false); setLoading(false);
...@@ -72,37 +103,36 @@ const AddModal = props => { ...@@ -72,37 +103,36 @@ const AddModal = props => {
}); });
setLoading(false); setLoading(false);
}); });
} }
}); });
}; };
const onFinish = value => {};
const onFinish = value => { };
useEffect(() => { useEffect(() => {
getTableData() getTableData();
if (type === 'edit') { if (type === 'edit') {
GetCMLedger_QueryLedgers({ ledgerId: formObj.ID }).then(res => { GetCMLedger_QueryLedgers({ ledgerId: formObj.ID }).then(res => {
res.data.root && form.setFieldsValue({ ...res.data.root }); res.data.root && form.setFieldsValue({ ...res.data.root });
setInputVaule({ ...res.data.root }) setInputVaule({ ...res.data.root });
setOrder(res.data.root.Order) setOrder(res.data.root.Order);
setType(res.data.root.Type) setType(res.data.root.Type);
changTable(res.data.root.TableName) changTable(res.data.root.TableName);
}) });
} } else if (type === 'add') {
else if (type === 'add') { setInputVaule({
setInputVaule({ Fields: '', EditFields: '', AddFields: '', MobileFields: '', SearchFields: '', WebFields: '' }) Fields: '',
setFiled({}) EditFields: '',
AddFields: '',
MobileFields: '',
SearchFields: '',
WebFields: '',
});
setFiled({});
form.resetFields(); form.resetFields();
form.setFieldsValue({ AccountType: '台账' }); form.setFieldsValue({ AccountType: '台账' });
} }
}, [visible]); }, [visible]);
const layout = { const layout = {
layout: 'horizontal', layout: 'horizontal',
labelCol: { labelCol: {
...@@ -113,100 +143,97 @@ const AddModal = props => { ...@@ -113,100 +143,97 @@ const AddModal = props => {
}, },
}; };
const getTableData = () => { const getTableData = () => {
setType('') setType('');
GetCM_Ledger_LoadLedgerTable().then(res => { GetCM_Ledger_LoadLedgerTable().then(res => {
if (res.msg === 'Ok') { if (res.msg === 'Ok') {
setStandingTable(res.data.root) setStandingTable(res.data.root);
}
})
} }
const changTable = (value) => { });
};
const changTable = value => {
LoadEventFields({ eventTableName: value, distinctFields: '' }).then(res => { LoadEventFields({ eventTableName: value, distinctFields: '' }).then(res => {
if (res.data.root && res.data.root.length) { if (res.data.root && res.data.root.length) {
setFiled(formateArrDataA(res.data.root, 'group')) setFiled(formateArrDataA(res.data.root, 'group'));
}
})
} }
});
};
const formateArrDataA = (initialArr, name) => { const formateArrDataA = (initialArr, name) => {
// 判定传参是否符合规则 // 判定传参是否符合规则
if (!(initialArr instanceof Array)) { if (!(initialArr instanceof Array)) {
return '请传入正确格式的数组' return '请传入正确格式的数组';
} }
if (!name) { if (!name) {
return '请传入对象属性' return '请传入对象属性';
} }
//先获取一下这个数组中有多少个"name" //先获取一下这个数组中有多少个"name"
let nameArr = [] let nameArr = [];
for (let i in initialArr) { for (let i in initialArr) {
if (nameArr.indexOf(initialArr[i][`${name}`]) === -1) { if (nameArr.indexOf(initialArr[i][`${name}`]) === -1) {
nameArr.push(initialArr[i][`${name}`]) nameArr.push(initialArr[i][`${name}`]);
} }
} }
//新建一个包含多个list的结果对象 //新建一个包含多个list的结果对象
let tempObj = {} let tempObj = {};
// 根据不同的"name"生成多个数组 // 根据不同的"name"生成多个数组
console.log(initialArr) console.log(initialArr);
for (let k in nameArr) { for (let k in nameArr) {
for (let j in initialArr) { for (let j in initialArr) {
if (initialArr[j][`${name}`] == nameArr[k]) { if (initialArr[j][`${name}`] == nameArr[k]) {
// 每次外循环时新建一个对应"name"的数组, 内循环时当前数组不变 // 每次外循环时新建一个对应"name"的数组, 内循环时当前数组不变
tempObj[nameArr[k]] = tempObj[nameArr[k]] || [] tempObj[nameArr[k]] = tempObj[nameArr[k]] || [];
tempObj[nameArr[k]].push(initialArr[j]) tempObj[nameArr[k]].push(initialArr[j]);
} }
} }
} }
console.log(tempObj); console.log(tempObj);
for (let key in tempObj) { for (let key in tempObj) {
let arr = [] let arr = [];
tempObj[key].map(item => { tempObj[key].map(item => {
tempObj[key] = arr; tempObj[key] = arr;
arr.push(item.fieldName) arr.push(item.fieldName);
}) });
}
return tempObj
} }
return tempObj;
};
const onOK = prop => { const onOK = prop => {
setIsVisible(false) setIsVisible(false);
let inputText = { ...inputValue } let inputText = { ...inputValue };
inputText[prop.pickItem] = prop.str inputText[prop.pickItem] = prop.str;
setCheckedList(prop.checkedList) setCheckedList(prop.checkedList);
setInputVaule(inputText) setInputVaule(inputText);
};
} const pickFiled = fileds => {
const pickFiled = (fileds) => { setTypes('add');
setTypes('add') setCharacterValue(inputValue[fileds]);
setCharacterValue(inputValue[fileds]) setCheckedList(inputValue[fileds].split(','));
setCheckedList(inputValue[fileds].split(',')) setPickItem(fileds);
setPickItem(fileds) setIsVisible(true);
setIsVisible(true) };
}
const changeText = (e, type) => { const changeText = (e, type) => {
let inputText = { ...inputValue } let inputText = { ...inputValue };
inputText[type] = e.target.value inputText[type] = e.target.value;
setInputVaule(inputText) setInputVaule(inputText);
} };
const inputType = (e) => { const inputType = e => {
setType(e.target.value) setType(e.target.value);
form.setFieldsValue({ Type:e.target.value }) form.setFieldsValue({ Type: e.target.value });
} };
return ( return (
<Modal <Drawer
title={`${type === 'add' ? '台账配置' : '台账编辑'}`} title={`${type === 'add' ? '台账配置' : '台账编辑'}`}
bodyStyle={{ width: '100%', minHeight: '100px' }} width="500px"
style={{ top: '80px' }} visible={visible}
width="700px" onClose={onCancel}
destroyOnClose footer={
maskClosable={false} <Space>
cancelText="取消" <Button onClick={onCancel}>取消</Button>
okText="确认" <Button onClick={onSubmit} type="primary">
{...props} 确定
onOk={() => onSubmit()} </Button>
confirmLoading={loading} </Space>
forceRender={true} }
getContainer={false}
> >
{visible && ( {visible && (
<div className={styles.formData}> <div className={styles.formData}>
...@@ -220,31 +247,55 @@ const AddModal = props => { ...@@ -220,31 +247,55 @@ const AddModal = props => {
<Input <Input
className="ue-editable-select-input" className="ue-editable-select-input"
onChange={inputType} onChange={inputType}
value = {Type} value={Type}
> />
</Input>
<Dropdown <Dropdown
placement='bottomRight' placement="bottomRight"
style={{width:'20rem'}} style={{ width: '20rem' }}
overlay={<Menu> overlay={
{tableData.length ? tableData.map((item, index) => { return <Menu.Item onClick={()=>{setType(item); form.setFieldsValue({ Type:item})}} style={{width:'26.6rem'}} key={index}>{item}</Menu.Item> }) : ''} <Menu>
</Menu>} > {tableData.length
<div className={styles.linkDrowp} onClick={e => e.preventDefault()}> ? tableData.map((item, index) => {
<DownOutlined style={{fontSize:'12px',color:'rgba(0, 0, 0, 0.25)'}} /> return (
<Menu.Item
onClick={() => {
setType(item);
form.setFieldsValue({ Type: item });
}}
style={{ width: '26.6rem' }}
key={index}
>
{item}
</Menu.Item>
);
})
: ''}
</Menu>
}
>
<div
className={styles.linkDrowp}
onClick={e => e.preventDefault()}
>
<DownOutlined
style={{ fontSize: '12px', color: 'rgba(0, 0, 0, 0.25)' }}
/>
</div> </div>
</Dropdown> </Dropdown>
{/* {tableData.length ? tableData.map((item, index) => { return <Option key={index} value={item}>{item}</Option> }) : ''} */} {/* {tableData.length ? tableData.map((item, index) => { return <Option key={index} value={item}>{item}</Option> }) : ''} */}
</div> </div>
</Item> </Item>
<Item <Item label="台账类型" name="AccountType">
label="台账类型" <Select placeholder="选择台账类型">
name="AccountType" {standingType.length
> ? standingType.map((item, index) => {
<Select return (
placeholder="选择台账类型" <Option key={index} value={item}>
{item}
> </Option>
{standingType.length ? standingType.map((item, index) => { return <Option key={index} value={item}>{item}</Option> }) : ''} );
})
: ''}
</Select> </Select>
</Item> </Item>
<Item <Item
...@@ -265,102 +316,214 @@ const AddModal = props => { ...@@ -265,102 +316,214 @@ const AddModal = props => {
optionFilterProp="children" optionFilterProp="children"
onChange={changTable} onChange={changTable}
> >
{standingTable.length ? standingTable.map((item, index) => { return <Option key={index} value={item.value}>{item.text}</Option> }) : ''} {standingTable.length
? standingTable.map((item, index) => {
return (
<Option key={index} value={item.value}>
{item.text}
</Option>
);
})
: ''}
</Select> </Select>
</Item> </Item>
<Item <Item
label={<div className={styles.formData_label}> label={
<Tooltip title={<Image <div className={styles.formData_label}>
width={200} <Tooltip title={<Image width={200} src={taizhang} />}>
src={taizhang} <InfoCircleOutlined
/>}><InfoCircleOutlined style={{ color: '#1890FF', padding: '0.2rem 0.2rem 0 0' }} /></Tooltip><span>台账字段</span> </div>} style={{ color: '#1890FF', padding: '0.2rem 0.2rem 0 0' }}
/>
</Tooltip>
<span>台账字段</span>{' '}
</div>
}
name="Fields" name="Fields"
> >
<div className={styles.filed_listItem}>
<div className={styles.filed_listItem} > <TextArea
<TextArea placeholder="前端详情查看字段" onChange={(e) => changeText(e, 'Fields')} value={inputValue.Fields} allowClear /> placeholder="前端详情查看字段"
<Button type="dashed" onClick={() => pickFiled('Fields')} icon={<PlusOutlined />} style={{ marginLeft: '0.5rem', height: '100%', width: '3.5rem' }} /> onChange={e => changeText(e, 'Fields')}
value={inputValue.Fields}
allowClear
/>
<Button
type="dashed"
onClick={() => pickFiled('Fields')}
icon={<PlusOutlined />}
style={{
marginLeft: '0.5rem',
height: '100%',
width: '3.5rem',
}}
/>
</div> </div>
</Item> </Item>
<Item <Item
label={<div className={styles.formData_label}> <Tooltip title={<Image label={
width={200} <div className={styles.formData_label}>
src={search} {' '}
/>}><InfoCircleOutlined style={{ color: '#1890FF', padding: '0.2rem 0.2rem 0 0' }} /></Tooltip><span>检索字段</span> </div>} <Tooltip title={<Image width={200} src={search} />}>
<InfoCircleOutlined
style={{ color: '#1890FF', padding: '0.2rem 0.2rem 0 0' }}
/>
</Tooltip>
<span>检索字段</span>{' '}
</div>
}
name="SearchFields" name="SearchFields"
> >
<div className={styles.filed_listItem}>
<div className={styles.filed_listItem} > <TextArea
<TextArea placeholder="前端列表检索字段" onChange={(e) => changeText(e, 'SearchFields')} value={inputValue.SearchFields} allowClear /> placeholder="前端列表检索字段"
<Button type="dashed" onClick={() => pickFiled('SearchFields')} icon={<PlusOutlined />} style={{ marginLeft: '0.5rem', height: '100%', width: '3.5rem' }} /> onChange={e => changeText(e, 'SearchFields')}
value={inputValue.SearchFields}
allowClear
/>
<Button
type="dashed"
onClick={() => pickFiled('SearchFields')}
icon={<PlusOutlined />}
style={{
marginLeft: '0.5rem',
height: '100%',
width: '3.5rem',
}}
/>
</div> </div>
</Item> </Item>
<Item <Item
label={<div className={styles.formData_label}> <Tooltip title={<Image label={
width={200} <div className={styles.formData_label}>
src={add} {' '}
/>}><InfoCircleOutlined style={{ color: '#1890FF', padding: '0.2rem 0.2rem 0 0' }} /></Tooltip><span>添加字段</span> </div>} <Tooltip title={<Image width={200} src={add} />}>
<InfoCircleOutlined
style={{ color: '#1890FF', padding: '0.2rem 0.2rem 0 0' }}
/>
</Tooltip>
<span>添加字段</span>{' '}
</div>
}
name="AddFields" name="AddFields"
> >
<div className={styles.filed_listItem}>
<div className={styles.filed_listItem} > <TextArea
<TextArea placeholder="前端数据添加字段" onChange={(e) => changeText(e, 'AddFields')} value={inputValue.AddFields} allowClear /> placeholder="前端数据添加字段"
<Button type="dashed" onClick={() => pickFiled('AddFields')} icon={<PlusOutlined />} style={{ marginLeft: '0.5rem', height: '100%', width: '3.5rem' }} /> onChange={e => changeText(e, 'AddFields')}
value={inputValue.AddFields}
allowClear
/>
<Button
type="dashed"
onClick={() => pickFiled('AddFields')}
icon={<PlusOutlined />}
style={{
marginLeft: '0.5rem',
height: '100%',
width: '3.5rem',
}}
/>
</div> </div>
</Item> </Item>
<Item <Item
label={<div className={styles.formData_label}> label={
<Tooltip <div className={styles.formData_label}>
title={<Image <Tooltip title={<Image width={200} src={editor} />}>
width={200} <InfoCircleOutlined
src={editor} style={{ color: '#1890FF', padding: '0.2rem 0.2rem 0 0' }}
/>}><InfoCircleOutlined style={{ color: '#1890FF', padding: '0.2rem 0.2rem 0 0' }} /></Tooltip><span>编辑字段</span> </div>} />
</Tooltip>
<span>编辑字段</span>{' '}
</div>
}
name="EditFields" name="EditFields"
> >
<div className={styles.filed_listItem}>
<div className={styles.filed_listItem} > <TextArea
<TextArea placeholder="前端可编辑字段" onChange={(e) => changeText(e, 'EditFields')} value={inputValue.EditFields} allowClear /> placeholder="前端可编辑字段"
<Button type="dashed" onClick={() => pickFiled('EditFields')} icon={<PlusOutlined />} style={{ marginLeft: '0.5rem', height: '100%', width: '3.5rem' }} /> onChange={e => changeText(e, 'EditFields')}
value={inputValue.EditFields}
allowClear
/>
<Button
type="dashed"
onClick={() => pickFiled('EditFields')}
icon={<PlusOutlined />}
style={{
marginLeft: '0.5rem',
height: '100%',
width: '3.5rem',
}}
/>
</div> </div>
</Item> </Item>
<Item <Item
label={<div className={styles.formData_label}> label={
<Tooltip title={<Image <div className={styles.formData_label}>
width={200} <Tooltip title={<Image width={200} src={web} />}>
src={web} <InfoCircleOutlined
/>}><InfoCircleOutlined style={{ color: '#1890FF', padding: '0.2rem 0.2rem 0 0' }} /></Tooltip><span>前端字段</span> </div>} style={{ color: '#1890FF', padding: '0.2rem 0.2rem 0 0' }}
/>
</Tooltip>
<span>前端字段</span>{' '}
</div>
}
name="WebFields" name="WebFields"
> >
<div className={styles.filed_listItem}>
<div className={styles.filed_listItem} > <TextArea
<TextArea placeholder="前端列表展示字段" onChange={(e) => changeText(e, 'WebFields')} value={inputValue.WebFields} allowClear /> placeholder="前端列表展示字段"
<Button type="dashed" onClick={() => pickFiled('WebFields')} icon={<PlusOutlined />} style={{ marginLeft: '0.5rem', height: '100%', width: '3.5rem' }} /> onChange={e => changeText(e, 'WebFields')}
value={inputValue.WebFields}
allowClear
/>
<Button
type="dashed"
onClick={() => pickFiled('WebFields')}
icon={<PlusOutlined />}
style={{
marginLeft: '0.5rem',
height: '100%',
width: '3.5rem',
}}
/>
</div> </div>
</Item> </Item>
<Item <Item
label={<div className={styles.formData_label}> label={
<Tooltip title={<Image <div className={styles.formData_label}>
width={100} <Tooltip title={<Image width={100} src={hand} />}>
src={hand} <InfoCircleOutlined
/>}><InfoCircleOutlined style={{ color: '#1890FF', padding: '0.2rem 0.2rem 0 0' }} /></Tooltip><span>手持字段</span> </div>} style={{ color: '#1890FF', padding: '0.2rem 0.2rem 0 0' }}
/>
</Tooltip>
<span>手持字段</span>{' '}
</div>
}
name="MobileFields" name="MobileFields"
> >
<div className={styles.filed_listItem}>
<div className={styles.filed_listItem} > <TextArea
<TextArea placeholder="手持展示字段" onChange={(e) => changeText(e, 'MobileFields')} value={inputValue.MobileFields} allowClear /> placeholder="手持展示字段"
<Button type="dashed" onClick={() => pickFiled('MobileFields')} icon={<PlusOutlined />} style={{ marginLeft: '0.5rem', height: '100%', width: '3.5rem' }} /> onChange={e => changeText(e, 'MobileFields')}
value={inputValue.MobileFields}
allowClear
/>
<Button
type="dashed"
onClick={() => pickFiled('MobileFields')}
icon={<PlusOutlined />}
style={{
marginLeft: '0.5rem',
height: '100%',
width: '3.5rem',
}}
/>
</div> </div>
</Item> </Item>
<Item <Item label="接口配置" name="Interface">
label='接口配置' <div className={styles.filed_listItem}>
name="Interface"
>
<div className={styles.filed_listItem} >
<TextArea placeholder="服务项目dll库" allowClear /> <TextArea placeholder="服务项目dll库" allowClear />
</div> </div>
</Item> </Item>
...@@ -374,12 +537,11 @@ const AddModal = props => { ...@@ -374,12 +537,11 @@ const AddModal = props => {
filed={filed} filed={filed}
pickItem={pickItem} pickItem={pickItem}
characterValue={characterValue} characterValue={characterValue}
formObj={formObj} /> formObj={formObj}
/>
</div> </div>
)}
) </Drawer>
}
</Modal >
); );
}; };
export default AddModal; export default AddModal;
...@@ -331,8 +331,9 @@ ...@@ -331,8 +331,9 @@
} }
} }
.formData{ .formData{
height: 38rem; height: calc(100vh - 170px);
overflow-y: scroll; overflow-y: scroll;
padding-right: 20px;
.ant-form-item-label > label.ant-form-item-required:not(.ant-form-item-required-mark-optional)::before{ .ant-form-item-label > label.ant-form-item-required:not(.ant-form-item-required-mark-optional)::before{
display: none; display: none;
} }
......
...@@ -18,7 +18,7 @@ import RequestTest from '../pages/testPages/request'; ...@@ -18,7 +18,7 @@ import RequestTest from '../pages/testPages/request';
import InitDataBase from '../pages/database/InitDataBase'; import InitDataBase from '../pages/database/InitDataBase';
import ManagementDataBase from '../pages/database/ManagementDataBase'; import ManagementDataBase from '../pages/database/ManagementDataBase';
import DatabaseConnectConfig from '@/pages/database/databaseConfig/DatabaseConfig'; import DatabaseConnectConfig from '@/pages/database/databaseConfig/DatabaseConfig';
import CurrentSolution from '@/pages/database/CurrentSolution'; import CurrentSolution from '@/pages/currentSolution/CurrentSolution';
import UserManage from '../pages/userCenter/userManage/UserManage'; import UserManage from '../pages/userCenter/userManage/UserManage';
import RoleManage from '@/pages/userCenter/roleManage/RoleManage'; import RoleManage from '@/pages/userCenter/roleManage/RoleManage';
import SiteManage from '../pages/userCenter/siteManage/SiteManage'; import SiteManage from '../pages/userCenter/siteManage/SiteManage';
......
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