Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
S
saas-manage
Overview
Overview
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
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
chehuidong
saas-manage
Commits
591f9c87
Commit
591f9c87
authored
Jul 09, 2026
by
wuqian
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'dev' into 'master'
Dev See merge request
!69
parents
e7e21645
9508944f
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
518 additions
and
6 deletions
+518
-6
src/common/api/sys/factory.js
+19
-0
src/router/index.js
+8
-1
src/views/factoryMenu.vue
+476
-0
src/views/home/navMenu.vue
+8
-0
src/views/menu.vue
+7
-5
No files found.
src/common/api/sys/factory.js
0 → 100644
View file @
591f9c87
import
axios
from
'../axios'
export
function
updateSysmenu
({
id
,
status
})
{
return
axios
.
get
(
'sysFactoryMenu/update-status?id='
+
id
+
'&status='
+
status
)
}
export
function
getAllMenusTree
()
{
return
axios
.
get
(
'sysFactoryMenu/get-all-menus-tree'
)
}
export
function
addMenu
(
data
)
{
return
axios
.
post
(
'sysFactoryMenu/add'
,
data
)
}
export
function
updateMenu
(
data
)
{
return
axios
.
post
(
'sysFactoryMenu/update'
,
data
)
}
export
function
deleteMenu
(
id
)
{
return
axios
.
post
(
`sysFactoryMenu/delete/
${
id
}
`
)
}
src/router/index.js
View file @
591f9c87
...
...
@@ -4,6 +4,7 @@ import HomeView from '../views/home/HomeView.vue'
import
SaasManage
from
'@/views/saasManage/indexPage.vue'
import
LoginPage
from
'@/views/LoginPage.vue'
import
menuPage
from
'@/views/menu.vue'
import
factoryMenuPage
from
'@/views/factoryMenu.vue'
import
TaskManage
from
'@/views/taskManage/index.vue'
import
HomePage
from
'@/views/homePage/index.vue'
import
{
getToken
}
from
'@/utils/auth'
...
...
@@ -40,7 +41,13 @@ const routes = [
path
:
'/saas/menu'
,
component
:
menuPage
,
name
:
'saasMenu'
,
meta
:
{
title
:
'菜单管理'
}
meta
:
{
title
:
'ERP菜单管理'
}
},
{
path
:
'/saas/factoryMenu'
,
component
:
factoryMenuPage
,
name
:
'factoryMenu'
,
meta
:
{
title
:
'FACTORY菜单管理'
}
},
{
path
:
'/saas/taskManage'
,
...
...
src/views/factoryMenu.vue
0 → 100644
View file @
591f9c87
<
template
>
<div
class=
"system-menu card"
v-loading=
"delLoading"
>
<div
class=
"header"
>
<el-form
size=
"mini"
:inline=
"true"
label-width=
"80px"
>
<el-form-item
label
>
<el-button
type=
"primary"
@
click=
"showDialog(
{ id: 0 }, 2)">
新增
</el-button>
</el-form-item>
</el-form>
</div>
<div
class=
"table-wrap"
v-loading=
"loading"
>
<table-view
:tableColumns=
"tableColumns"
rowKey=
"id"
:serialNumber=
"false"
:treeConfig=
"
{
children: 'children',
reserve: true
}"
:sourceData="sourceData">
</table-view>
</div>
<el-dialog
:title=
"isEdit ? '修改' : '新增'"
:visible
.
sync=
"dialogVisible"
:close-on-click-modal=
"false"
v-loading=
"formLoading"
:before-close=
"beforeClose"
width=
"820px"
>
<el-form
size=
"mini"
:inline=
"true"
label-width=
"120px"
:rules=
"rules"
ref=
"editForm"
:model=
"editForm"
>
<el-form-item
label=
"菜单名称"
prop=
"name"
required
>
<el-input
style=
"width: 220px"
v-model=
"editForm.name"
></el-input>
</el-form-item>
<el-form-item
label=
"父级菜单"
>
<el-cascader
:show-all-levels=
"false"
v-model=
"editForm.pid"
:disabled=
"editForm.type === 1"
style=
"width: 220px"
:options=
"showMenu"
:props=
"
{
checkStrictly: true,
label: 'name',
value: 'id',
emitPath: false
}"
clearable>
</el-cascader>
</el-form-item>
<el-form-item
label=
"类型"
prop=
"type"
required
>
<div
style=
"width: 220px; display: inline-block"
class=
"radioGroup"
>
<el-radio
v-model=
"editForm.type"
:label=
"0"
>
菜单
</el-radio>
<!--
<el-radio
v-model=
"editForm.type"
:label=
"1"
>
按钮
</el-radio>
-->
<el-radio
v-model=
"editForm.type"
:label=
"2"
>
左边栏
</el-radio>
</div>
</el-form-item>
<el-form-item
label=
"路径名称"
:required=
"editForm.pid !== 0"
prop=
"path"
>
<el-input
style=
"width: 220px"
:disabled=
"isEdit"
v-model=
"editForm.path"
></el-input>
</el-form-item>
<el-form-item
label=
"路径地址"
>
<el-input
style=
"width: 220px"
v-model=
"editForm.route"
></el-input>
</el-form-item>
<el-form-item
label=
"接口路径"
>
<el-input
style=
"width: 220px"
v-model=
"editForm.url"
></el-input>
</el-form-item>
<el-form-item
label=
"等级"
prop=
"level"
>
<el-input
style=
"width: 220px"
v-model=
"editForm.level"
/>
</el-form-item>
<el-form-item
label=
"启用状态"
prop=
"enable"
>
<div
style=
"width: 220px; display: inline-block"
>
<el-radio
v-model=
"editForm.enable"
:label=
"true"
>
启用
</el-radio>
<el-radio
v-model=
"editForm.enable"
:label=
"false"
>
禁用
</el-radio>
</div>
</el-form-item>
<el-form-item
label=
" 排序"
>
<el-input
style=
"width: 220px"
v-model=
"editForm.sortNo"
placeholder
></el-input>
</el-form-item>
<el-form-item
label=
"标题"
>
<el-input
style=
"width: 220px"
v-model=
"editForm.title"
></el-input>
</el-form-item>
<el-form-item
label=
"备注"
>
<el-input
style=
"width: 570px"
v-model=
"editForm.describe"
type=
"textarea"
:rows=
"2"
></el-input>
</el-form-item>
<!--
<el-form-item
label=
"包含的namespace"
>
<el-select
v-model=
"editForm.includeNamespace"
multiple
style=
"width: 400px"
clearable
placeholder=
"请选择"
>
<el-option
v-for=
"(item, index) in simpleList"
:key=
"index"
filterable
:label=
"item.companyName"
:value=
"item.apiName"
></el-option>
</el-select>
</el-form-item>
<el-form-item
label=
"排除的namespace"
>
<el-select
v-model=
"editForm.excludeNamespace"
multiple
style=
"width: 400px"
clearable
filterable
placeholder=
"请选择"
>
<el-option
v-for=
"(item, index) in simpleList"
:key=
"index"
:label=
"item.companyName"
:value=
"item.apiName"
></el-option>
</el-select>
</el-form-item>
-->
</el-form>
<div
slot=
"footer"
>
<el-button
size=
"small"
@
click=
"clone"
>
取 消
</el-button>
<el-button
size=
"small"
type=
"primary"
@
click=
"submit"
>
保 存
</el-button>
</div>
</el-dialog>
</div>
</
template
>
<
script
>
import
tableView
from
'@/common/components/base/tableView.vue'
import
{
updateSysmenu
,
getAllMenusTree
,
updateMenu
,
addMenu
,
deleteMenu
}
from
'../common/api/sys/factory'
import
{
getSimpleByPage
}
from
'../common/api/sys/index'
export
default
{
name
:
'factoryMenu'
,
components
:
{
tableView
},
data
()
{
return
{
applicationList
:
[],
loading
:
false
,
sourceData
:
[],
dialogVisible
:
false
,
formLoading
:
false
,
delLoading
:
false
,
editForm
:
{
name
:
''
,
pid
:
'0'
,
type
:
''
,
path
:
''
,
url
:
''
,
title
:
''
,
describe
:
''
,
enable
:
true
,
includeNamespace
:
''
,
excludeNamespace
:
''
,
appId
:
''
},
rules
:
{
type
:
[
{
required
:
true
,
message
:
' '
,
trigger
:
'change'
}
]
},
isEdit
:
false
,
simpleList
:
[]
}
},
computed
:
{
tableColumns
()
{
return
[
{
label
:
'菜单名称'
,
key
:
'name'
,
width
:
''
,
align
:
'left'
,
treeNode
:
true
},
{
label
:
'类型'
,
key
:
'type'
,
width
:
''
,
render
:
(
item
)
=>
item
.
type
===
0
?
'菜单'
:
item
.
type
===
1
?
'按钮'
:
'左边栏'
},
{
label
:
'路径名称'
,
key
:
'path'
,
width
:
''
},
{
label
:
'路径地址'
,
key
:
'route'
,
width
:
''
},
{
label
:
'接口路径'
,
key
:
'url'
,
width
:
''
},
{
label
:
'排序'
,
key
:
'sortNo'
,
width
:
''
},
{
label
:
'启动状态'
,
key
:
'url'
,
width
:
''
,
render
:
(
item
)
=>
(
<
el
-
switch
value
=
{
item
.
enable
}
onChange
=
{(
v
)
=>
this
.
enableChange
(
item
,
v
)}
><
/el-switch
>
)
},
{
label
:
'标题'
,
key
:
'title'
,
width
:
''
},
{
label
:
'备注'
,
key
:
'describe'
,
width
:
''
},
{
label
:
'操作'
,
key
:
''
,
width
:
''
,
align
:
'left'
,
render
:
(
item
)
=>
(
<
div
>
<
el
-
button
size
=
"mini"
type
=
"text"
onClick
=
{()
=>
this
.
showDialog
(
item
,
1
)}
>
修改
<
/el-button
>
<
el
-
button
size
=
"mini"
type
=
"text"
onClick
=
{()
=>
this
.
remove
(
item
)}
>
删除
<
/el-button
>
{
item
.
type
!==
1
&&
(
<
el
-
button
size
=
"mini"
type
=
"text"
onClick
=
{()
=>
this
.
showDialog
(
item
,
2
)}
>
新增下级
<
/el-button
>
)}
<
/div
>
)
}
]
},
showMenu
()
{
const
data
=
JSON
.
parse
(
JSON
.
stringify
(
this
.
sourceData
))
const
arr
=
[]
for
(
const
iterator
of
data
)
{
const
children
=
[]
for
(
const
iterato
of
iterator
.
children
)
{
if
(
iterato
.
type
===
0
)
{
children
.
push
(
iterato
)
}
delete
iterato
.
children
}
iterator
.
children
=
children
arr
.
push
(
iterator
)
}
return
[
{
id
:
0
,
name
:
'顶级菜单'
,
children
:
arr
,
describe
:
''
,
enable
:
true
,
path
:
''
,
pid
:
''
,
route
:
''
,
sortNo
:
0
,
title
:
''
,
type
:
0
,
url
:
''
}
]
}
},
mounted
()
{
this
.
getlist
()
this
.
getSimpleByPage
()
},
methods
:
{
getSimpleByPage
()
{
getSimpleByPage
().
then
((
res
)
=>
{
if
(
res
.
code
===
200
)
{
this
.
simpleList
=
res
.
data
.
records
}
})
},
async
enableChange
(
item
,
v
)
{
try
{
const
res
=
await
updateSysmenu
({
id
:
item
.
id
,
status
:
v
})
if
(
res
.
code
===
200
)
{
this
.
$message
.
success
(
res
.
message
)
item
.
enable
=
v
}
}
catch
(
e
)
{
console
.
error
(
e
)
}
},
async
getlist
(
id
,
cb
)
{
this
.
loading
=
true
try
{
const
res
=
await
getAllMenusTree
()
if
(
res
.
code
===
200
)
{
if
(
cb
)
{
cb
(
res
.
data
)
}
else
{
this
.
sourceData
=
res
.
data
}
}
}
catch
(
e
)
{
console
.
error
(
e
)
}
finally
{
this
.
loading
=
false
}
},
resetForm
()
{
for
(
const
key
in
this
.
editForm
)
{
if
(
key
===
'enable'
)
continue
this
.
editForm
[
key
]
=
''
}
},
async
showDialog
(
item
,
t
)
{
if
(
t
===
2
)
{
this
.
editForm
.
pid
=
item
.
id
this
.
isEdit
=
false
}
else
{
this
.
isEdit
=
true
// 浅拷贝,避免 resetForm 时修改到 sourceData 中的原始数据
const
formData
=
{
...
item
}
if
(
formData
.
excludeNamespace
&&
formData
.
excludeNamespace
.
length
>
0
)
{
formData
.
excludeNamespace
=
formData
.
excludeNamespace
.
split
(
','
)
}
if
(
formData
.
includeNamespace
&&
formData
.
includeNamespace
.
length
>
0
)
{
formData
.
includeNamespace
=
formData
.
includeNamespace
.
split
(
','
)
}
this
.
editForm
=
formData
}
this
.
$nextTick
(()
=>
{
this
.
$refs
.
editForm
&&
this
.
$refs
.
editForm
.
clearValidate
()
})
this
.
dialogVisible
=
true
},
async
submit
()
{
try
{
if
(
!
(
await
this
.
$refs
.
editForm
.
validate
()))
return
}
catch
{
return
}
this
.
formLoading
=
true
const
api
=
this
.
isEdit
?
updateMenu
:
addMenu
delete
this
.
editForm
.
children
try
{
if
(
this
.
editForm
.
includeNamespace
&&
this
.
editForm
.
includeNamespace
.
length
>
0
)
{
this
.
editForm
.
includeNamespace
=
this
.
editForm
.
includeNamespace
.
join
(
','
)
}
else
{
this
.
editForm
.
includeNamespace
=
''
}
if
(
this
.
editForm
.
excludeNamespace
&&
this
.
editForm
.
excludeNamespace
.
length
>
0
)
{
this
.
editForm
.
excludeNamespace
=
this
.
editForm
.
excludeNamespace
.
join
(
','
)
}
else
{
this
.
editForm
.
excludeNamespace
=
''
}
const
res
=
await
api
({
...
this
.
editForm
})
if
(
res
.
code
===
200
)
{
this
.
$message
.
success
(
res
.
message
)
this
.
getlist
()
}
}
catch
(
e
)
{
console
.
error
(
e
)
}
finally
{
this
.
resetForm
()
this
.
formLoading
=
false
this
.
dialogVisible
=
false
}
},
async
remove
(
item
)
{
try
{
await
this
.
$confirm
(
'确认删除?'
,
'提示'
,
{
confirmButtonText
:
'确定'
,
cancelButtonText
:
'取消'
,
type
:
'warning'
})
}
catch
{
return
}
this
.
delLoading
=
true
try
{
const
res
=
await
deleteMenu
(
item
.
id
)
if
(
res
.
code
===
200
)
{
this
.
$message
.
success
(
res
.
message
)
this
.
delLoading
=
false
await
this
.
getlist
()
}
}
catch
(
e
)
{
console
.
error
(
e
)
this
.
delLoading
=
false
}
},
clone
()
{
this
.
resetForm
()
this
.
dialogVisible
=
false
},
beforeClose
(
clone
)
{
this
.
resetForm
()
clone
()
}
}
}
</
script
>
<
style
lang=
"scss"
scoped
>
.system-menu
{
height
:
100%
;
display
:
flex
;
flex-direction
:
column
;
padding
:
10px
20px
0
;
overflow
:
hidden
;
}
.table-wrap
{
flex
:
1
;
}
.radioGroup
{
.el-radio
{
margin-right
:
15px
!important
;
}
}
</
style
>
src/views/home/navMenu.vue
View file @
591f9c87
...
...
@@ -222,6 +222,14 @@ export default {
children
:
[]
},
{
id
:
2
,
path
:
''
,
label
:
'FACTORY菜单管理'
,
icon
:
'el-icon-menu'
,
index
:
'/saas/factoryMenu'
,
children
:
[]
},
{
id
:
4
,
path
:
''
,
label
:
'工单管理'
,
...
...
src/views/menu.vue
View file @
591f9c87
...
...
@@ -391,13 +391,15 @@ export default {
this
.
isEdit
=
false
}
else
{
this
.
isEdit
=
true
if
(
item
.
excludeNamespace
&&
item
.
excludeNamespace
.
length
>
0
)
{
item
.
excludeNamespace
=
item
.
excludeNamespace
.
split
(
','
)
// 浅拷贝,避免 resetForm 时修改到 sourceData 中的原始数据
const
formData
=
{
...
item
}
if
(
formData
.
excludeNamespace
&&
formData
.
excludeNamespace
.
length
>
0
)
{
formData
.
excludeNamespace
=
formData
.
excludeNamespace
.
split
(
','
)
}
if
(
item
.
includeNamespace
&&
item
.
includeNamespace
.
length
>
0
)
{
item
.
includeNamespace
=
item
.
includeNamespace
.
split
(
','
)
if
(
formData
.
includeNamespace
&&
formData
.
includeNamespace
.
length
>
0
)
{
formData
.
includeNamespace
=
formData
.
includeNamespace
.
split
(
','
)
}
this
.
editForm
=
item
this
.
editForm
=
formData
}
// getApplication().then((res) => {
// if (res.code === 200) {
...
...
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