Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
C
CivManage
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
ReactWeb5
CivManage
Commits
2037b763
Commit
2037b763
authored
Dec 17, 2020
by
Maofei94
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat: 版本日志
parent
aaa9afd5
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
625 additions
and
192 deletions
+625
-192
colContent.jsx
src/components/Colophon/colContent.jsx
+163
-0
index.jsx
src/components/Colophon/index.jsx
+17
-0
index.less
src/components/Colophon/index.less
+48
-0
other.css
src/components/Colophon/other.css
+0
-0
RightContent.js
src/components/GlobalHeader/RightContent.js
+2
-0
index.less
src/components/JumpContainer/index.less
+1
-1
SiteConfig.jsx
src/pages/mobileConfig/SiteConfig.jsx
+35
-75
addConfig.jsx
src/pages/mobileConfig/addConfig.jsx
+183
-0
index.js
src/pages/mobileConfig/index.js
+150
-95
miniMenu.jsx
src/pages/mobileConfig/menuconfig/miniMenu.jsx
+18
-20
miniMenu.less
src/pages/mobileConfig/menuconfig/miniMenu.less
+1
-1
config.js
src/routes/config.js
+7
-0
No files found.
src/components/Colophon/colContent.jsx
0 → 100644
View file @
2037b763
import
React
,
{
useState
}
from
'react'
;
import
{
Timeline
,
Tabs
}
from
'antd'
;
import
{
useHistory
}
from
'react-router-dom'
;
import
styles
from
'./index.less'
;
const
{
Item
}
=
Timeline
;
const
{
TabPane
}
=
Tabs
;
const
ColConen
=
()
=>
{
const
[
tabPosition
,
setTabPosition
]
=
useState
(
'left'
);
const
a
=
'1'
;
return
(
<
div
>
<
div
className=
{
styles
.
titlebox
}
>
<
p
className=
{
styles
.
log
}
>
版本记录
</
p
>
<
p
className=
{
styles
.
desclog
}
>
熊猫运维平台
</
p
>
</
div
>
<
div
className=
{
styles
.
logbox
}
>
<
Tabs
tabPosition=
{
tabPosition
}
style=
{
{
height
:
'calc(100vh - 200px)'
}
}
addIcon=
{
<
p
>
aa
</
p
>
}
>
{
arr
.
reverse
().
map
((
item
,
index
)
=>
(
<
TabPane
tab=
{
item
.
label
}
key=
{
item
.
key
}
>
{
item
.
content
}
</
TabPane
>
))
}
</
Tabs
>
{
/* <Timeline mode={mode}>
{arr.map((item, index) => (
<Item label={item.label} key={item.key}>
{item.content}
</Item>
))}
</Timeline> */
}
</
div
>
</
div
>
);
};
const
arr
=
[
{
key
:
'0'
,
label
:
`v1.0.0 2020-12-18`
,
content
:
(
<
div
className=
{
styles
.
hr
}
>
<
div
className=
{
styles
.
topBox
}
>
<
div
className=
{
styles
.
topl
}
>
v1.0.0
</
div
>
<
div
className=
{
styles
.
topr
}
>
2020-12-18
</
div
>
</
div
>
<
hr
/>
<
h3
>
运维第一个版本记录
</
h3
>
<
ul
>
<
li
>
[+]
新增了解决方案管理、数据库管理、用户中心、平台中心、应用中心、数据中心、系统日志板块
</
li
>
<
li
>
[+] 新增了版本记录模块
</
li
>
<
li
>
[^] 登录页面修改了动画效果
</
li
>
<
li
>
[^] 移动应用配置模块进行了翻新
</
li
>
<
li
>
[^] 业务平台模块修改了交互方式
</
li
>
</
ul
>
</
div
>
),
},
// {
// key: '1',
// label: '1.0.20201218',
// content: 'aaaa',
// },
// {
// key: '2',
// label: '1.0.20201218',
// content: 'aaaa',
// },
// {
// key: '3',
// label: '1.0.20201218',
// content: 'aaaa',
// },
// {
// key: '4',
// label: '1.0.20201218',
// content: 'aaaa',
// },
// {
// key: '5',
// label: '1.0.20201218',
// content: 'aaaa',
// },
// {
// key: '6',
// label: '1.0.20201218',
// content: 'aaaa',
// },
// {
// key: '131',
// label: '1.0.20201218',
// content: 'aaaa',
// },
// {
// key: '70',
// label: '1.0.20201218',
// content: 'aaaa',
// },
// {
// key: '8',
// label: '1.0.20201218',
// content: 'aaaa',
// },
// {
// key: '9',
// label: '1.0.20201218',
// content: 'aaaa',
// },
// {
// key: '10',
// label: '1.0.20201218',
// content: 'aaaa',
// },
// {
// key: '11',
// label: '1.0.20201218',
// content: 'aaaa',
// },
// {
// key: '12',
// label: '1.0.20201218',
// content: 'aaaa',
// },
// {
// key: '13',
// label: '1.0.20201218',
// content: 'aaaa',
// },
// {
// key: '14',
// label: '1.0.20201218',
// content: 'aaaa',
// },
// {
// key: '15',
// label: '1.0.20201218',
// content: 'aaaa',
// },
// {
// key: '16',
// label: '1.0.20201218',
// content: 'aaaa',
// },
// {
// key: '17',
// label: '1.0.20201218',
// content: 'aaaa',
// },
// {
// key: '18',
// label: '1.0.20201219',
// content: 'aaaa',
// },
];
export
default
ColConen
;
src/components/Colophon/index.jsx
0 → 100644
View file @
2037b763
import
React
,
{
useEffect
}
from
'react'
;
import
{
useHistory
}
from
'react-router-dom'
;
import
styles
from
'./index.less'
;
const
Colophon
=
props
=>
{
const
historyPath
=
useHistory
();
const
handleClick
=
()
=>
{
historyPath
.
push
(
'/colophon'
);
console
.
log
(
historyPath
);
};
return
(
<
div
className=
{
styles
.
desc
}
onClick=
{
handleClick
}
>
版本记录
</
div
>
);
};
export
default
Colophon
;
src/components/Colophon/index.less
0 → 100644
View file @
2037b763
.desc:hover{
cursor: pointer;
color: #1890ff;
}
.desc{
margin-right: 10px;
}
.titlebox{
width: 100%;
height: 100px;
text-align: center;
color: #333;
}
.log{
font-size: 40px;
font-weight: bold;
margin-bottom: 5px;
margin-top: 20px;
}
.desclog{
color: #8E99AB;
margin-bottom: 0px;
}
.logbox{
width: 100%;
max-height: calc(100vh - 200px);
background-color: #f6f6f6;
text-align: left;
overflow: hidden;
}
.hr{
margin-right: 20px;
}
.topBox{
display: flex;
justify-content: space-between;
height: 40px;
align-items: center;
}
.topl{
font-size: 22px;
color: #1890ff;
}
.topr{
font-size: 16px;
color: #333;
}
\ No newline at end of file
src/components/Colophon/other.css
0 → 100644
View file @
2037b763
src/components/GlobalHeader/RightContent.js
View file @
2037b763
...
...
@@ -4,6 +4,7 @@ import { Breadcrumb } from 'antd';
import
check
from
'@/components/Authorized/CheckPermissions'
;
import
{
Link
}
from
'react-router-dom'
;
import
HeaderSearch
from
'../HeaderSearch'
;
import
Colophon
from
'../Colophon'
;
import
Avatar
from
'./AvatarDropdown'
;
import
styles
from
'./index.less'
;
...
...
@@ -44,6 +45,7 @@ const GlobalHeaderRight = props => {
{
/* <span className={styles.left}>{value.title}</span> */
}
<
Breadcrumb
{...
value
.
breadcrumb
}
className
=
{
styles
.
lineHeight
}
/
>
<
div
style
=
{{
flex
:
1
}}
/
>
<
Colophon
/>
<
HeaderSearch
className
=
{
`
${
styles
.
action
}
${
styles
.
search
}
${
styles
.
toRight
}
`
}
placeholder
=
"站内搜索"
...
...
src/components/JumpContainer/index.less
View file @
2037b763
...
...
@@ -11,7 +11,7 @@
flex-direction: column;
background-color: #F6F6F6;
border-radius:8px;
box-shadow:
20px 2
0px 5px #888888;
box-shadow:
10px 1
0px 5px #888888;
}
.imgs{
margin-top: 20px;
...
...
src/pages/mobileConfig/SiteConfig.jsx
View file @
2037b763
...
...
@@ -6,12 +6,16 @@ import {
addWebsite
,
}
from
'@/services/mobileConfig/api'
;
import
PicturesWall
from
'@/components/Upload/index'
;
const
{
Item
}
=
Form
;
const
{
Option
}
=
Select
;
const
SiteConfig
=
props
=>
{
const
{
miniTitle
,
submitCallback
,
subType
,
addCallback
}
=
props
;
console
.
log
(
subType
,
'ubType'
);
const
{
miniTitle
,
submitCallback
,
addCallback
,
parentKey
,
clientName
,
}
=
props
;
const
[
config
,
setConfig
]
=
useState
(
''
);
// 网站配置信息
const
[
loginList
,
setLoginList
]
=
useState
([
{
text
:
'默认界面'
,
value
:
'default'
},
...
...
@@ -42,7 +46,6 @@ const SiteConfig = props => {
})
.
then
(
res
=>
{
setLoading
(
false
);
console
.
log
(
res
.
shortcutIcon
);
let
obj
=
{};
let
arr
=
Object
.
keys
(
form
.
getFieldsValue
());
arr
.
map
(
k
=>
{
...
...
@@ -62,71 +65,40 @@ const SiteConfig = props => {
if
(
valid
)
{
setLoading
(
true
);
const
obj
=
{
...
form
.
getFieldsValue
()
};
let
params
=
{
...
obj
,
mode
:
'single'
,
client
:
'miniapp'
};
if
(
subType
===
'add'
)
{
addWebsite
(
params
,
{
headers
:
{
'content-type'
:
'application/x-www-form-urlencggoded;charset=UTF-8'
,
},
})
.
then
(
res
=>
{
setLoading
(
false
);
if
(
res
.
success
)
{
addCallback
(
params
.
title
);
notification
.
success
({
message
:
'提示'
,
duration
:
3
,
description
:
'新增成功'
,
});
}
else
{
notification
.
error
({
message
:
'提示'
,
duration
:
10
,
description
:
res
.
message
||
'新增失败'
,
});
}
console
.
log
(
res
,
'res'
);
})
.
catch
(
err
=>
{
setLoading
(
false
);
});
}
else
{
editWebsite
(
params
,
{
headers
:
{
'content-type'
:
'application/x-www-form-urlencggoded;charset=UTF-8'
,
},
let
params
=
{
...
obj
,
mode
:
'single'
,
client
:
clientName
};
editWebsite
(
params
,
{
headers
:
{
'content-type'
:
'application/x-www-form-urlencggoded;charset=UTF-8'
,
},
})
.
then
(
res
=>
{
setLoading
(
false
);
if
(
res
.
success
)
{
submitCallback
();
notification
.
success
({
message
:
'提示'
,
duration
:
3
,
description
:
'编辑成功'
,
});
}
else
{
notification
.
error
({
message
:
'提示'
,
duration
:
3
,
description
:
res
.
message
||
'编辑失败'
,
});
}
console
.
log
(
res
,
'res'
);
})
.
then
(
res
=>
{
setLoading
(
false
);
if
(
res
.
success
)
{
submitCallback
();
notification
.
success
({
message
:
'提示'
,
duration
:
3
,
description
:
'编辑成功'
,
});
}
else
{
notification
.
error
({
message
:
'提示'
,
duration
:
3
,
description
:
res
.
message
||
'编辑失败'
,
});
}
console
.
log
(
res
,
'res'
);
})
.
catch
(
err
=>
{
setLoading
(
false
);
});
}
.
catch
(
err
=>
{
setLoading
(
false
);
});
}
});
};
return
(
<
Spin
spinning=
{
loading
}
tip=
"loading..."
>
<
div
style=
{
{
minHeight
:
'calc(100vh -
19
2px)'
,
marginTop
:
'20px'
}
}
>
<
Form
form=
{
form
}
{
...
layout
}
>
<
div
style=
{
{
minHeight
:
'calc(100vh -
25
2px)'
,
marginTop
:
'20px'
}
}
>
<
Form
form=
{
form
}
name=
{
`form-${miniTitle}`
}
{
...
layout
}
>
<
Item
label=
"应用名称:"
name=
"title"
...
...
@@ -139,18 +111,6 @@ const SiteConfig = props => {
>
<
Input
placeholder=
"请输入应用名称"
allowClear
/>
</
Item
>
{
/* <Item
label="系统图标:"
name="shortcutIcon"
rules={[
{
required: true,
message: '请选择系统图标',
},
]}
>
<Input placeholder="请输入系统图标名称" allowClear />
</Item> */
}
<
Item
label=
"系统图标:"
name=
"shortcutIcon"
...
...
src/pages/mobileConfig/addConfig.jsx
0 → 100644
View file @
2037b763
import
React
,
{
useState
,
useEffect
}
from
'react'
;
import
{
Form
,
Select
,
Input
,
Button
,
Radio
,
notification
,
Spin
}
from
'antd'
;
import
{
editWebsite
,
getWebsite
,
addWebsite
,
}
from
'@/services/mobileConfig/api'
;
import
PicturesWall
from
'@/components/Upload/index'
;
const
{
Item
}
=
Form
;
const
{
Option
}
=
Select
;
const
AddConfig
=
props
=>
{
const
{
miniTitle
,
submitCallback
,
subType
,
addCallback
}
=
props
;
console
.
log
(
subType
,
'ubType'
);
const
[
config
,
setConfig
]
=
useState
(
''
);
// 网站配置信息
const
[
loginList
,
setLoginList
]
=
useState
([
{
text
:
'默认界面'
,
value
:
'default'
},
]);
// 系统登陆页
const
[
styleList
,
setStyleList
]
=
useState
([
{
text
:
'默认风格'
,
value
:
'default'
},
]);
// 系统风格
const
[
themeList
,
setThemeList
]
=
useState
([
{
text
:
'默认皮肤'
,
value
:
'default'
},
]);
// 系统皮肤
const
[
loading
,
setLoading
]
=
useState
(
false
);
const
[
form
]
=
Form
.
useForm
();
const
layout
=
{
layout
:
'horizontal'
,
labelCol
:
{
span
:
7
},
wrapperCol
:
{
span
:
15
},
};
// 单选值改变
const
radioChange
=
e
=>
{};
// 提交选择
const
submit
=
value
=>
{
form
.
validateFields
().
then
(
valid
=>
{
if
(
valid
)
{
setLoading
(
true
);
const
obj
=
{
...
form
.
getFieldsValue
()
};
let
params
=
{
...
obj
,
mode
:
'single'
};
addWebsite
(
params
,
{
headers
:
{
'content-type'
:
'application/x-www-form-urlencggoded;charset=UTF-8'
,
},
})
.
then
(
res
=>
{
setLoading
(
false
);
if
(
res
.
success
)
{
addCallback
(
params
.
title
);
notification
.
success
({
message
:
'提示'
,
duration
:
3
,
description
:
'新增成功'
,
});
}
else
{
notification
.
error
({
message
:
'提示'
,
duration
:
10
,
description
:
res
.
message
||
'新增失败'
,
});
}
console
.
log
(
res
,
'res'
);
})
.
catch
(
err
=>
{
setLoading
(
false
);
});
}
});
};
return
(
<
Spin
spinning=
{
loading
}
tip=
"loading..."
>
<
div
style=
{
{
minHeight
:
'calc(100vh - 252px)'
,
marginTop
:
'20px'
}
}
>
<
Form
form=
{
form
}
name=
{
`form-${miniTitle}`
}
{
...
layout
}
>
<
Item
label=
"应用名称:"
name=
"title"
rules=
{
[
{
required
:
true
,
message
:
'请输入应用名称'
,
},
]
}
>
<
Input
placeholder=
"请输入应用名称"
allowClear
/>
</
Item
>
<
Item
label=
"应用类别:"
name=
"client"
rules=
{
[
{
required
:
true
,
message
:
'请输入应用类别'
,
},
]
}
>
<
Input
placeholder=
"请输入应用类别"
allowClear
/>
</
Item
>
<
Item
label=
"系统图标:"
name=
"shortcutIcon"
rules=
{
[
{
required
:
true
,
message
:
'请选择系统图标'
,
},
]
}
>
<
PicturesWall
/>
</
Item
>
<
Item
label=
"登陆页面:"
name=
"loginTemplate"
rules=
{
[
{
required
:
true
,
message
:
'请选择登陆页面'
,
},
]
}
>
<
Select
placeholder=
"请选择登陆页面"
>
{
loginList
&&
loginList
.
map
((
item
,
index
)
=>
(
<
Option
value=
{
item
.
value
}
key=
{
`item${index}`
}
>
{
item
.
text
}
</
Option
>
))
}
</
Select
>
</
Item
>
<
Item
label=
"系统皮肤:"
name=
"theme"
rules=
{
[
{
required
:
true
,
message
:
'请选择系统皮肤'
,
},
]
}
>
<
Select
placeholder=
"请选择系统皮肤"
>
{
themeList
&&
themeList
.
map
((
item
,
index
)
=>
(
<
Option
value=
{
item
.
value
}
key=
{
`item${index}`
}
>
{
item
.
text
}
</
Option
>
))
}
</
Select
>
</
Item
>
<
Item
label=
"系统风格:"
name=
"style"
rules=
{
[
{
required
:
true
,
message
:
'请选择系统风格'
,
},
]
}
>
<
Select
placeholder=
"请选择系统风格"
>
{
styleList
&&
styleList
.
map
((
item
,
index
)
=>
(
<
Option
value=
{
item
.
value
}
key=
{
`item${index}`
}
>
{
item
.
text
}
</
Option
>
))
}
</
Select
>
</
Item
>
<
Item
label=
"开启云登陆:"
name=
"cloudLogin"
initialValue=
{
false
}
>
<
Radio
.
Group
onChange=
{
radioChange
}
>
<
Radio
value
>
是
</
Radio
>
<
Radio
value=
{
false
}
>
否
</
Radio
>
</
Radio
.
Group
>
</
Item
>
<
Item
wrapperCol=
{
{
span
:
6
,
offset
:
7
}
}
>
<
Button
type=
"primary"
onClick=
{
submit
}
>
提交
</
Button
>
</
Item
>
</
Form
>
</
div
>
</
Spin
>
);
};
export
default
AddConfig
;
src/pages/mobileConfig/index.js
View file @
2037b763
import
React
,
{
useState
,
useEffect
,
useMemo
}
from
'react'
;
import
{
Card
,
Tabs
,
Button
,
Popconfirm
,
notification
,
Spin
}
from
'antd'
;
import
{
Card
,
Tabs
,
Button
,
Popconfirm
,
notification
,
Spin
,
Modal
,
Drawer
,
}
from
'antd'
;
import
ProCard
from
'@ant-design/pro-card'
;
import
PageContainer
from
'@/components/BasePageContainer'
;
import
SevenParams
from
'./menuconfig/SevenParams'
;
...
...
@@ -9,41 +18,48 @@ import {
deleteWebsite
,
deleteMiniMenu
,
}
from
'@/services/mobileConfig/api'
;
import
{
ExclamationCircleOutlined
}
from
'@ant-design/icons'
;
import
SiteConfig
from
'./SiteConfig'
;
import
MenuConfig
from
'./menuconfig/MenuConfig'
;
import
MiniMenu
from
'./menuconfig/miniMenu'
;
import
AddConfig
from
'./addConfig'
;
import
{
appConnector
}
from
'@/containers/App/store'
;
const
{
TabPane
}
=
Tabs
;
const
MobileConfigPage
=
props
=>
{
const
{
userMode
}
=
props
;
const
[
activeKey
,
setActiveKey
]
=
useState
(
'
1
'
);
// tabs活动页
const
[
miniTitle
,
setMiniTitle
]
=
useState
(
''
);
const
[
flag
,
setFlag
]
=
useState
(
1
);
const
[
activeKey
,
setActiveKey
]
=
useState
(
'
0
'
);
// tabs活动页
const
[
miniTitle
,
setMiniTitle
]
=
useState
(
''
);
// 应用名称
const
[
flag
,
setFlag
]
=
useState
(
1
);
// 刷新标志
const
[
showConfig
,
setShowConfig
]
=
useState
(
true
);
const
[
loading
,
setLoading
]
=
useState
(
false
);
const
[
position
,
setPosition
]
=
useState
([]);
const
[
subType
,
setSubType
]
=
useState
(
''
);
const
[
parentKey
,
setParentKey
]
=
useState
(
''
);
const
[
singleList
,
setSingleList
]
=
useState
([]);
const
[
clientName
,
setClientName
]
=
useState
(
''
);
// client
const
[
addVisible
,
setAddVisible
]
=
useState
(
false
);
useEffect
(()
=>
{
setLoading
(
true
);
getMiniAppModuleTree
({
userMode
:
userMode
||
'super'
,
}).
then
(
res
=>
{
setLoading
(
false
);
console
.
log
(
res
,
'res'
);
if
(
res
.
code
===
0
)
{
const
{
data
}
=
res
;
let
obj
=
data
[
0
].
children
.
length
>
0
&&
data
[
0
].
children
.
find
(
item
=>
item
.
id
.
includes
(
'miniapp'
));
console
.
log
(
obj
,
'obj'
);
if
(
data
[
0
].
children
.
length
>
0
&&
obj
)
{
const
title
=
obj
.
text
||
''
;
setShowConfig
(
true
);
setMiniTitle
(
title
);
setPosition
([
'right'
]);
}
else
{
setPosition
([
'left'
]);
setShowConfig
(
false
);
}
let
array
=
data
[
0
].
children
.
length
>
0
&&
[...
data
[
0
].
children
];
let
arr
=
[];
array
.
map
(
item
=>
{
arr
.
push
({
...
item
,
subSystemValue
:
item
.
id
.
split
(
'single'
)[
1
],
});
console
.
log
(
item
.
id
.
split
(
'single'
)[
1
]);
return
item
;
});
setParentKey
(
arr
[
0
].
id
);
setSingleList
(
arr
);
setMiniTitle
(
arr
[
0
].
text
);
setClientName
(
arr
[
0
].
subSystemValue
);
console
.
log
(
arr
);
}
else
{
setShowConfig
(
false
);
}
...
...
@@ -51,17 +67,45 @@ const MobileConfigPage = props => {
});
},
[
flag
]);
useEffect
(()
=>
{
// getMiniAppModuleTree({
// userMode: 'super',
// }).then(res => {
// console.log(res);
// });
},
[]);
// 修改选中的tab
const
handleChange
=
key
=>
{
setActiveKey
(
key
);
};
// tab新增编辑的回调
const
handleEdit
=
(
key
,
action
)
=>
{
console
.
log
(
key
,
'key'
,
action
);
switch
(
action
)
{
case
'add'
:
{
setAddVisible
(
true
);
break
;
}
case
'remove'
:
{
let
val
=
key
.
split
(
'single'
)[
1
]
||
''
;
Modal
.
confirm
({
title
:
'确认删除应用?'
,
icon
:
<
ExclamationCircleOutlined
/>
,
okText
:
'确认'
,
cancelText
:
'取消'
,
onOk
:
closeModal
=>
{
delMini
(
val
,
closeModal
);
},
});
break
;
}
default
:
break
;
}
};
const
handleParChange
=
key
=>
{
console
.
log
(
key
);
let
obj
=
singleList
.
find
(
item
=>
item
.
id
===
key
);
console
.
log
(
obj
);
setParentKey
(
key
);
setActiveKey
(
'0'
);
setClientName
(
obj
.
subSystemValue
);
setMiniTitle
(
obj
.
text
);
};
const
submitCallback
=
()
=>
{
setFlag
(
flag
+
1
);
setSubType
(
''
);
...
...
@@ -69,14 +113,17 @@ const MobileConfigPage = props => {
const
addCallback
=
val
=>
{
console
.
log
(
val
);
setSubType
(
''
);
setMiniTitle
(
val
);
setPosition
([
'right'
]);
setAddVisible
(
false
);
setFlag
(
flag
+
1
);
// setMiniTitle(val);
};
// 删除
const
delMini
=
()
=>
{
const
delMini
=
(
val
,
closeModal
)
=>
{
setLoading
(
true
);
closeModal
();
console
.
log
(
val
);
deleteWebsite
({
client
:
'miniapp'
,
client
:
val
,
_version
:
9999
,
_dc
:
Date
.
now
(),
})
...
...
@@ -84,7 +131,7 @@ const MobileConfigPage = props => {
setLoading
(
false
);
if
(
res
.
success
)
{
setFlag
(
flag
+
1
);
deleteMiniMenu
({
visible
:
'miniapp'
});
deleteMiniMenu
({
visible
:
val
});
notification
.
success
({
message
:
'提示'
,
duration
:
3
,
...
...
@@ -107,34 +154,39 @@ const MobileConfigPage = props => {
setSubType
(
'add'
);
};
const
options
=
{
left
:
(
<
Button
type
=
"primary"
onClick
=
{
addMini
}
>
新增移动应用
<
/Button
>
),
right
:
(
<
Popconfirm
title
=
"是否删除移动应用,及相关联的角色和菜单"
okText
=
"确认"
cancelText
=
"取消"
placement
=
"left"
onConfirm
=
{
delMini
}
>
<
Button
type
=
"primary"
danger
>
删除移动应用
<
/Button
>
<
/Popconfirm
>
),
};
const
slot
=
useMemo
(()
=>
{
if
(
position
.
length
===
0
)
return
null
;
return
position
.
reduce
((
acc
,
direction
)
=>
{
console
.
log
(
acc
,
direction
);
return
{
...
acc
,
[
direction
]:
options
[
direction
]
};
},
{});
},
[
position
]);
const
ContentTab
=
()
=>
(
<
ProCard
>
<
Spin
tip
=
"loading..."
spinning
=
{
loading
}
>
<
Tabs
activeKey
=
{
activeKey
}
type
=
"card"
onChange
=
{
handleChange
}
>
{
showConfig
&&
(
<
TabPane
tab
=
{
tabArr
[
0
].
title
}
key
=
{
tabArr
[
0
].
key
}
>
{
activeKey
===
tabArr
[
0
].
key
&&
tabArr
[
0
].
component
}
<
/TabPane
>
)}
{
showConfig
&&
subType
!==
'add'
&&
(
<
TabPane
tab
=
{
tabArr
[
1
].
title
}
key
=
{
tabArr
[
1
].
key
}
>
{
activeKey
===
tabArr
[
1
].
key
&&
tabArr
[
1
].
component
}
<
/TabPane
>
)}
{
showConfig
&&
subType
!==
'add'
&&
(
<
TabPane
tab
=
{
tabArr
[
2
].
title
}
key
=
{
tabArr
[
2
].
key
}
>
{
activeKey
===
tabArr
[
2
].
key
&&
tabArr
[
2
].
component
}
<
/TabPane
>
)}
{
showConfig
&&
subType
!==
'add'
&&
(
<
TabPane
tab
=
{
tabArr
[
3
].
title
}
key
=
{
tabArr
[
3
].
key
}
>
{
activeKey
===
tabArr
[
3
].
key
&&
tabArr
[
3
].
component
}
<
/TabPane
>
)}
<
/Tabs
>
<
/Spin
>
<
/ProCard
>
);
const
cts
=
(
tabPaneItem
,
id
)
=>
(
<
TabPane
key
=
{
tabPaneItem
.
id
}
tab
=
{
tabPaneItem
.
text
}
>
<>
{
parentKey
===
tabPaneItem
.
id
&&
ContentTab
()}
<
/
>
<
/TabPane
>
);
const
tabArr
=
[
{
title
:
'网站配置'
,
...
...
@@ -145,51 +197,54 @@ const MobileConfigPage = props => {
submitCallback
=
{
submitCallback
}
subType
=
{
subType
}
addCallback
=
{
addCallback
}
clientName
=
{
clientName
}
parentKey
=
{
parentKey
}
/
>
),
},
{
title
:
'菜单管理'
,
key
:
'1'
,
component
:
<
MenuConfig
/>
,
component
:
(
<
MiniMenu
clientName
=
{
clientName
}
userMode
=
{
userMode
}
parentKey
=
{
parentKey
}
/
>
),
},
{
title
:
'七参数配置'
,
key
:
'2'
,
component
:
<
SevenParams
/>
,
},
{
title
:
'版本包配置'
,
key
:
'3'
,
component
:
<
VersionPublish
/>
,
},
];
return
(
<
PageContainer
>
<
ProCard
>
<
Spin
tip
=
"loading..."
spinning
=
{
loading
}
>
<
Tabs
activeKey
=
{
activeKey
}
type
=
"card"
onChange
=
{
handleChange
}
tabBarExtraContent
=
{
slot
}
>
{
/* {showConfig &&
tabArr?.length > 0 &&
tabArr.map(item => (
<TabPane tab={item.title} key={item.key}>
{activeKey === item.key && item.component}
</TabPane>
))} */
}
{
showConfig
&&
(
<
TabPane
tab
=
{
tabArr
[
0
].
title
}
key
=
{
tabArr
[
0
].
key
}
>
{
activeKey
===
tabArr
[
0
].
key
&&
tabArr
[
0
].
component
}
<
/TabPane
>
)}
{
showConfig
&&
subType
!==
'add'
&&
(
<
TabPane
tab
=
{
tabArr
[
1
].
title
}
key
=
{
tabArr
[
1
].
key
}
>
{
activeKey
===
tabArr
[
1
].
key
&&
tabArr
[
1
].
component
}
<
/TabPane
>
)}
{
showConfig
&&
subType
!==
'add'
&&
(
<
TabPane
tab
=
"其他配置"
key
=
"tab3"
>
<
SevenParams
/>
<
VersionPublish
/>
<
/TabPane
>
)}
<
/Tabs
>
<
/Spin
>
<
/ProCard
>
<
Tabs
activeKey
=
{
parentKey
}
onChange
=
{
handleParChange
}
type
=
"editable-card"
onEdit
=
{
handleEdit
}
>
{
singleList
.
map
(
item
=>
cts
(
item
,
parentKey
))}
<
/Tabs
>
<
Drawer
title
=
"新增应用"
destroyOnClose
width
=
{
500
}
onClose
=
{()
=>
{
setAddVisible
(
false
);
}}
visible
=
{
addVisible
}
>
<
AddConfig
addCallback
=
{
addCallback
}
submitCallback
=
{
submitCallback
}
/
>
<
/Drawer
>
<
/PageContainer
>
);
};
...
...
src/pages/mobileConfig/menuconfig/miniMenu.jsx
View file @
2037b763
...
...
@@ -35,7 +35,7 @@ import EditForm from './editForm';
import
CheckList
from
'./checkBox'
;
const
MiniMenu
=
props
=>
{
const
{
userMode
}
=
props
;
const
{
userMode
,
clientName
,
parentKey
}
=
props
;
const
[
flag
,
setFlag
]
=
useState
(
1
);
// 刷新标志
const
[
treeFlag
,
setTreeFlag
]
=
useState
(
true
);
const
[
treeData
,
setTreeData
]
=
useState
([]);
// 树的数据
...
...
@@ -58,12 +58,13 @@ const MiniMenu = props => {
// 获取菜单树
useEffect
(()
=>
{
console
.
log
(
props
);
updateTrees
();
},
[
flag
]);
// 获取角色列表
useEffect
(()
=>
{
getRoleListPlain
({
subSystemValue
:
'miniapp'
,
subSystemValue
:
clientName
||
'miniapp'
,
_dc
:
Date
.
now
(),
_version
:
9999
,
}).
then
(
res
=>
{
...
...
@@ -71,7 +72,7 @@ const MiniMenu = props => {
setAddList
(
res
.
list
);
}
});
},
[
flag
]);
},
[
flag
,
clientName
]);
// 获取菜单信息
useEffect
(()
=>
{
getInfo
();
...
...
@@ -80,14 +81,6 @@ const MiniMenu = props => {
// 更新树
const
updateTrees
=
()
=>
{
setLoading
(
true
);
// miniAppSiteTree({
// _version: 9999,
// _dc: new Date().getTime(),
// node: -2,
// userMode: 'super',
// select: '',
// })
getMiniAppModuleTree
({
userMode
:
userMode
||
'super'
,
})
...
...
@@ -100,7 +93,7 @@ const MiniMenu = props => {
if
(
res
.
code
===
0
)
{
const
{
data
}
=
res
;
setLoading
(
false
);
let
obj
=
data
[
0
].
children
.
find
(
item
=>
item
.
id
.
includes
(
'miniapp'
)
);
let
obj
=
data
[
0
].
children
.
find
(
item
=>
item
.
id
===
parentKey
);
const
result
=
obj
.
children
[
1
].
children
;
setNewTreeList
(
JSON
.
parse
(
JSON
.
stringify
(
result
)));
setTreeData
(
result
);
...
...
@@ -153,10 +146,10 @@ const MiniMenu = props => {
icon
:
obj
.
menuType
!==
'MiniAppMenuThree'
&&
obj
.
menuType
!==
'MiniAppMenu'
?
(
<
FolderFilled
/>
)
:
(
<
FileOutlined
/>
),
<
FolderFilled
/>
)
:
(
<
FileOutlined
/>
),
menuType
:
obj
.
menuType
,
children
:
hasChild
?
obj
.
children
.
map
(
i
=>
mapTree
(
i
))
:
[],
};
...
...
@@ -306,7 +299,7 @@ const MiniMenu = props => {
addMenu
({
_dc
:
Date
.
now
(),
parentID
,
subSystemValue
:
'miniapp'
,
subSystemValue
:
clientName
||
'miniapp'
,
_version
:
9999
,
...
obj
,
})
...
...
@@ -345,7 +338,7 @@ const MiniMenu = props => {
editMenu
({
_dc
:
Date
.
now
(),
menuID
,
subSystemValue
:
'miniapp'
,
subSystemValue
:
clientName
||
'miniapp'
,
_version
:
9999
,
...
obj
,
})
...
...
@@ -513,7 +506,7 @@ const MiniMenu = props => {
</
Tooltip
>
</
div
>
</
div
>
{
treeData
.
length
>
0
&&
(
{
treeData
.
length
>
0
?
(
<
Tree
showIcon
onSelect=
{
handleSelect
}
...
...
@@ -526,6 +519,11 @@ const MiniMenu = props => {
selectedKeys=
{
[
menuID
]
}
// expandedKeys=
{[
menuID
]}
/>
)
:
(
<
Empty
image=
{
Empty
.
PRESENTED_IMAGE_SIMPLE
}
description=
"暂无菜单"
/>
)
}
</
div
>
<
Modal
...
...
@@ -631,4 +629,4 @@ const MiniMenu = props => {
);
};
export
default
appConnector
(
MiniMenu
)
;
export
default
MiniMenu
;
src/pages/mobileConfig/menuconfig/miniMenu.less
View file @
2037b763
.box{
min-height: calc( 100vh -
172px)
;
min-height: calc( 100vh -
242px)!important
;
display: flex;
}
.left{
...
...
src/routes/config.js
View file @
2037b763
...
...
@@ -34,6 +34,7 @@ import MobileConfigPage from '@/pages/mobileConfig';
import
{
USER_MODE
}
from
'@/utils/constants'
;
import
BaseFrameContainer
from
'@/components/BaseFrameContainer'
;
import
JumpContainer
from
'@/components/JumpContainer'
;
import
ColConen
from
'@/components/Colophon/colContent'
;
const
iconStyle
=
{
verticalAlign
:
'0.125em'
};
const
superAuthority
=
[
USER_MODE
.
SUPER
];
...
...
@@ -70,6 +71,12 @@ export default {
authority
:
superAuthority
,
component
:
CurrentSolution
,
},
{
path
:
'/colophon'
,
name
:
'版本记录'
,
hideMenu
:
true
,
component
:
ColConen
,
},
{
path
:
'/dbm'
,
name
:
'数据库管理'
,
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment