Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
C
center-zws
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
EzijingWeb
center-zws
Commits
de1a52c6
提交
de1a52c6
authored
12月 09, 2022
作者:
王鹏飞
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
chore: update
上级
bb2b1302
隐藏空白字符变更
内嵌
并排
正在显示
5 个修改的文件
包含
174 行增加
和
116 行删除
+174
-116
api.ts
src/modules/base/project/api.ts
+30
-7
AddMember.vue
src/modules/base/project/components/AddMember.vue
+53
-58
types.ts
src/modules/base/project/types.ts
+53
-0
Index.vue
src/modules/base/project/views/Index.vue
+37
-50
Index.vue
src/modules/base/users/views/Index.vue
+1
-1
没有找到文件。
src/modules/base/project/api.ts
浏览文件 @
de1a52c6
import
httpRequest
from
'@/utils/axios'
import
httpRequest
from
'@/utils/axios'
// 获取列表
// 获取列表
export
function
getProjectList
(
params
?:
{
project_id
?:
string
;
project_type
?:
string
;
project_status
?:
string
;
title
?:
string
;
page
?:
number
;[
'per-page'
]?:
number
})
{
export
function
getProjectList
(
params
?:
{
project_id
?:
string
project_type
?:
string
project_status
?:
string
title
?:
string
page
?:
number
[
'per-page'
]?:
number
})
{
return
httpRequest
.
get
(
'/api/zws/v1/backend/project/list'
,
{
params
})
return
httpRequest
.
get
(
'/api/zws/v1/backend/project/list'
,
{
params
})
}
}
// 搜索用户
// 搜索用户
export
function
searchUser
(
params
:
{
q
:
string
;
})
{
export
function
searchUser
(
params
:
{
q
:
string
})
{
return
httpRequest
.
get
(
'/api/zws/v1/backend/common/search-user'
,
{
params
})
return
httpRequest
.
get
(
'/api/zws/v1/backend/common/search-user'
,
{
params
})
}
}
...
@@ -16,7 +23,15 @@ export function getProjectRoles() {
...
@@ -16,7 +23,15 @@ export function getProjectRoles() {
}
}
// 创建项目
// 创建项目
export
function
createProject
(
data
?:
{
title
?:
string
;
alias
?:
string
;
project_type
:
string
;
project_status
:
string
;
project_uri
?:
string
;
landing_page_uri
?:
string
;
members
:
string
})
{
export
function
createProject
(
data
?:
{
title
?:
string
alias
?:
string
project_type
:
string
project_status
:
string
project_uri
?:
string
landing_page_uri
?:
string
members
:
string
})
{
return
httpRequest
.
post
(
'/api/zws/v1/backend/project/create'
,
data
)
return
httpRequest
.
post
(
'/api/zws/v1/backend/project/create'
,
data
)
}
}
...
@@ -31,7 +46,15 @@ export function getProjectUserList(params?: { id?: string | string[] }) {
...
@@ -31,7 +46,15 @@ export function getProjectUserList(params?: { id?: string | string[] }) {
}
}
// 更新项目
// 更新项目
export
function
updateProject
(
data
?:
{
id
:
string
|
string
[];
title
?:
string
;
alias
?:
string
;
project_type
:
string
;
project_status
:
string
;
project_uri
?:
string
;
landing_page_uri
?:
string
;
})
{
export
function
updateProject
(
data
?:
{
id
:
string
|
string
[]
title
?:
string
alias
?:
string
project_type
:
string
project_status
:
string
project_uri
?:
string
landing_page_uri
?:
string
})
{
return
httpRequest
.
post
(
'/api/zws/v1/backend/project/update'
,
data
)
return
httpRequest
.
post
(
'/api/zws/v1/backend/project/update'
,
data
)
}
}
...
@@ -41,16 +64,16 @@ export function getProjectMap() {
...
@@ -41,16 +64,16 @@ export function getProjectMap() {
}
}
// 删除人员
// 删除人员
export
function
deleteMember
(
data
:
{
user_id
:
string
;
project_id
:
string
;
role_id
:
string
;
})
{
export
function
deleteMember
(
data
:
{
user_id
:
string
;
project_id
:
string
;
role_id
:
string
})
{
return
httpRequest
.
post
(
'/api/zws/v1/backend/project/member-delete'
,
data
)
return
httpRequest
.
post
(
'/api/zws/v1/backend/project/member-delete'
,
data
)
}
}
// 新增人员
// 新增人员
export
function
addMember
(
data
?
:
{
user_id
:
string
;
projects_id
:
string
;
roles
:
string
;
type
?:
string
})
{
export
function
addMember
(
data
:
{
user_id
:
string
;
projects_id
:
string
;
roles
:
string
;
type
?:
string
})
{
return
httpRequest
.
post
(
'/api/zws/v1/backend/project/member-create'
,
data
)
return
httpRequest
.
post
(
'/api/zws/v1/backend/project/member-create'
,
data
)
}
}
// 删除项目
// 删除项目
export
function
deleteProject
Request
(
data
:
{
id
:
string
;
})
{
export
function
deleteProject
(
data
:
{
id
:
string
})
{
return
httpRequest
.
post
(
'/api/zws/v1/backend/project/delete'
,
data
)
return
httpRequest
.
post
(
'/api/zws/v1/backend/project/delete'
,
data
)
}
}
src/modules/base/project/components/AddMember.vue
浏览文件 @
de1a52c6
<
script
setup
lang=
"ts"
>
<
script
setup
lang=
"ts"
>
import
type
{
FormInstance
,
FormRules
}
from
'element-plus'
import
type
{
User
,
Role
}
from
'../types'
import
{
searchUser
,
getProjectRoles
}
from
'../api'
import
{
searchUser
,
getProjectRoles
}
from
'../api'
import
{
ElMessage
}
from
'element-plus'
const
emit
=
defineEmits
([
'update:modelValue'
,
'changeUser'
])
interface
FormData
{
user
:
User
// 用户搜索
role
:
Role
[]
interface
UserInfo
{
id
:
string
nickname
:
string
mobile
:
string
}
}
let
userValue
=
$ref
(
''
)
const
emit
=
defineEmits
<
{
const
loading
=
ref
(
false
)
(
e
:
'update:modelValue'
,
modelValue
:
boolean
):
void
let
userListOption
=
$ref
<
UserInfo
[]
>
()
(
e
:
'changeUser'
,
data
:
FormData
):
void
}
>
()
const
formRef
=
$ref
<
FormInstance
>
()
const
form
:
Partial
<
FormData
>
=
reactive
({
user
:
undefined
,
role
:
[]
})
const
rules
=
reactive
<
FormRules
>
({
user
:
{
required
:
true
,
message
:
'请选择成员'
,
trigger
:
'change'
},
role
:
{
type
:
'array'
,
required
:
true
,
message
:
'请选择角色'
,
trigger
:
'change'
}
})
let
userList
=
$ref
<
User
[]
>
()
let
loading
=
$ref
(
false
)
const
remoteMethod
=
(
q
:
string
)
=>
{
const
remoteMethod
=
(
q
:
string
)
=>
{
if
(
q
)
{
if
(
!
q
)
return
loading
.
value
=
true
loading
=
true
searchUser
({
q
:
q
}).
then
((
res
:
{
data
:
UserInfo
[]
})
=>
{
searchUser
({
q
}).
then
(
res
=>
{
loading
.
value
=
false
loading
=
false
userListOption
=
res
.
data
userList
=
res
.
data
})
})
}
}
}
// 获取角色
let
roleList
=
$ref
<
Role
[]
>
()
interface
ProjectRole
{
function
fetchRoles
()
{
id
:
string
getProjectRoles
().
then
((
res
:
{
data
:
Role
[]
})
=>
{
name
:
string
roleList
=
res
.
data
})
}
}
let
roleValue
=
$ref
([])
onMounted
(()
=>
{
let
projectRoleOption
=
$ref
<
ProjectRole
[]
>
()
fetchRoles
()
getProjectRoles
().
then
((
res
:
{
data
:
ProjectRole
[]
})
=>
{
projectRoleOption
=
res
.
data
})
})
// 选择完成
// 选择完成
const
submit
=
function
()
{
function
submit
()
{
if
(
Object
.
keys
(
roleValue
).
length
&&
userValue
)
{
formRef
?.
validate
(()
=>
{
const
data
=
{
emit
(
'changeUser'
,
form
as
FormData
)
userInfo
:
userListOption
.
find
(
item
=>
item
.
id
===
userValue
),
role
:
projectRoleOption
.
reduce
((
a
:
any
,
b
)
=>
{
if
(
roleValue
.
find
((
item
:
any
)
=>
item
===
b
.
id
))
{
a
.
push
(
b
)
}
return
a
},
[])
}
emit
(
'changeUser'
,
data
)
emit
(
'update:modelValue'
,
false
)
emit
(
'update:modelValue'
,
false
)
userValue
=
''
})
roleValue
=
[]
}
else
{
ElMessage
(
'请选择'
)
}
}
}
</
script
>
</
script
>
<
template
>
<
template
>
<el-dialog
title=
"添加项目成员"
width=
"400px"
:close-on-click-modal=
"false"
>
<el-dialog
<el-form
style=
"display: block; width: 80%; margin: 0 auto"
class=
"demo-form-inline"
>
title=
"添加项目成员"
<el-form-item
label=
"选择成员"
>
width=
"500px"
:close-on-click-modal=
"false"
@
update:modelValue=
"$emit('update:modelValue')"
>
<el-form
:rules=
"rules"
:model=
"form"
hide-required-asterisk
ref=
"formRef"
>
<el-form-item
label=
"选择成员"
prop=
"user"
>
<el-select
<el-select
v-model=
"
userValue
"
v-model=
"
form.user
"
filterable
filterable
remote
remote
reserve-keyword
reserve-keyword
placeholder=
"请输入"
placeholder=
"请输入"
:remote-method=
"remoteMethod"
:remote-method=
"remoteMethod"
:loading=
"loading"
:loading=
"loading"
>
value-key=
"id"
style=
"width: 100%"
>
<el-option
<el-option
v-for=
"item in userList
Option
"
v-for=
"item in userList"
:key=
"item.id"
:key=
"item.id"
:label=
"item.mobile ? `$
{item.nickname}(${item.mobile}})` : item.nickname"
:label=
"item.mobile ? `$
{item.nickname}(${item.mobile}})` : item.nickname"
:value="item.id"
:value="item" />
/>
</el-select>
</el-select>
</el-form-item>
</el-form-item>
<el-form-item
label=
"选择角色"
v-show=
"userValu
e"
>
<el-form-item
label=
"选择角色"
prop=
"rol
e"
>
<el-select
v-model=
"
roleValue"
multiple
placeholder=
"请选择
"
>
<el-select
v-model=
"
form.role"
multiple
placeholder=
"请选择"
value-key=
"id"
style=
"width: 100%
"
>
<el-option
v-for=
"item in
projectRoleOption"
:key=
"item.id"
:label=
"item.name"
:value=
"item.id
"
/>
<el-option
v-for=
"item in
roleList"
:key=
"item.id"
:label=
"item.name"
:value=
"item
"
/>
</el-select>
</el-select>
</el-form-item>
</el-form-item>
</el-form>
</el-form>
<template
#
footer
>
<template
#
footer
>
<span
class=
"dialog-footer"
>
<el-button
auto-insert-space
@
click=
"$emit('update:modelValue', false)"
>
取消
</el-button>
<el-button
@
click=
"emit('update:modelValue', false)"
>
取消
</el-button>
<el-button
auto-insert-space
type=
"primary"
@
click=
"submit"
>
确定
</el-button>
<el-button
type=
"primary"
@
click=
"submit"
>
确定
</el-button>
</span>
</
template
>
</
template
>
</el-dialog>
</el-dialog>
</template>
</template>
src/modules/base/project/types.ts
0 → 100644
浏览文件 @
de1a52c6
export
interface
ProjectItem
{
id
:
string
title
:
string
alias
:
string
project_id
:
string
project_type
:
string
site_uri
:
string
summary
:
string
picture_uri
:
string
weight
:
string
project_uri
:
string
landing_page_uri
:
string
users
:
string
stakeholder_emails
:
string
application_notify
:
string
project_status
:
string
comment
:
string
status
:
string
operator
:
string
created_time
:
string
updated_time
:
string
english_name
:
string
leader_id
:
string
learn_length
:
string
project_type_name
:
string
project_status_name
:
string
}
// 用户信息
export
interface
User
{
id
:
string
realname
:
string
nickname
:
string
username
:
string
mobile
:
string
avatar
:
string
email
:
string
}
// 角色信息
export
interface
Role
{
id
:
string
name
:
string
desc
:
string
levels
:
RoleLevel
[]
}
export
interface
RoleLevel
{
level_id
:
string
level_name
:
string
level_tag
:
string
level_group_tag
:
string
}
src/modules/base/project/views/Index.vue
浏览文件 @
de1a52c6
<
script
setup
lang=
"ts"
>
<
script
setup
lang=
"ts"
>
import
type
{
User
,
Role
}
from
'../types'
import
AppList
from
'@/components/base/AppList.vue'
import
AppList
from
'@/components/base/AppList.vue'
import
{
getProjectList
,
addMember
,
deleteProject
Request
}
from
'../api'
import
{
getProjectList
,
addMember
,
deleteProject
}
from
'../api'
import
{
ElMessage
}
from
'element-plus'
import
{
ElMessage
,
ElMessageBox
}
from
'element-plus'
import
{
useMap
}
from
'../composables/useMap'
import
{
useMap
}
from
'../composables/useMap'
const
AddMember
=
defineAsyncComponent
(()
=>
import
(
'../components/AddMember.vue'
))
const
AddMember
=
defineAsyncComponent
(()
=>
import
(
'../components/AddMember.vue'
))
...
@@ -10,18 +11,11 @@ const { types, status } = useMap()
...
@@ -10,18 +11,11 @@ const { types, status } = useMap()
const
appList
=
$ref
<
InstanceType
<
typeof
AppList
>
|
null
>
(
null
)
const
appList
=
$ref
<
InstanceType
<
typeof
AppList
>
|
null
>
(
null
)
const
router
=
useRouter
()
const
listOptions
=
$computed
(()
=>
{
const
listOptions
=
$computed
(()
=>
{
return
{
return
{
remote
:
{
remote
:
{
httpRequest
:
getProjectList
,
httpRequest
:
getProjectList
,
params
:
{
params
:
{
project_id
:
''
,
project_type
:
''
,
project_status
:
''
,
title
:
''
}
project_id
:
''
,
project_type
:
''
,
project_status
:
''
,
title
:
''
}
},
},
filters
:
[
filters
:
[
{
type
:
'input'
,
prop
:
'project_id'
,
placeholder
:
'项目编号'
},
{
type
:
'input'
,
prop
:
'project_id'
,
placeholder
:
'项目编号'
},
...
@@ -72,40 +66,34 @@ function handleSelectionChange(value: any) {
...
@@ -72,40 +66,34 @@ function handleSelectionChange(value: any) {
multipleSelection
=
value
multipleSelection
=
value
}
}
let
label
Visible
=
$ref
(
false
)
let
member
Visible
=
$ref
(
false
)
const
addProjectMember
=
function
()
{
const
addProjectMember
=
function
()
{
labelVisible
=
true
memberVisible
=
true
multipleSelection
=
[]
}
}
// 选择人员
// 选择人员
let
currentUser
=
$ref
<
{
user
:
User
;
role
:
Role
[]
}
>
()
// 多项目角色确认弹窗
// 多项目角色确认弹窗
let
memberRoleVisible
=
$ref
(
false
)
let
memberRoleVisible
=
$ref
(
false
)
let
changeMemberName
=
$ref
(
''
)
let
memberParams
=
$ref
<
{
user_id
:
string
;
projects_id
:
string
;
roles
:
string
;
type
?:
string
}
>
()
let
paramsMember
=
$ref
<
{
user_id
:
string
;
projects_id
:
string
;
roles
:
string
;
type
?:
string
}
>
()
const
changeMember
=
function
(
e
:
any
)
{
const
changeMember
=
function
(
data
:
{
user
:
User
;
role
:
Role
[]
})
{
paramsMember
=
{
currentUser
=
data
user_id
:
e
.
userInfo
.
id
,
memberParams
=
{
projects_id
:
multipleSelection
.
reduce
((
a
:
any
,
b
:
any
)
=>
a
.
push
(
b
.
project_id
)
&&
a
,
[]).
toString
(),
user_id
:
data
.
user
.
id
,
roles
:
e
.
role
.
reduce
((
a
:
any
,
b
:
any
)
=>
a
.
push
(
b
.
id
)
&&
a
,
[]).
toString
()
projects_id
:
multipleSelection
.
map
(
item
=>
item
.
project_id
).
join
(
','
),
roles
:
data
.
role
.
map
(
item
=>
item
.
id
).
join
(
','
)
}
}
changeMemberName
=
e
.
userInfo
.
nickname
addMemberRequest
()
addMemberRequest
()
}
}
const
addMemberRequest
=
function
(
n
?:
string
)
{
const
addMemberRequest
=
function
(
type
?:
string
)
{
let
params
=
paramsMember
const
params
=
Object
.
assign
({},
memberParams
,
{
type
})
if
(
n
)
{
params
=
Object
.
assign
(
paramsMember
,
{
type
:
n
})
}
addMember
(
params
).
then
((
res
:
any
)
=>
{
addMember
(
params
).
then
((
res
:
any
)
=>
{
if
(
res
.
code
===
0
)
{
if
(
res
.
code
===
0
)
{
ElMessage
({
ElMessage
({
message
:
'添加成功'
,
type
:
'success'
})
message
:
'添加成功'
,
type
:
'success'
})
router
.
go
(
0
)
}
}
if
(
res
.
code
===
2
)
{
if
(
res
.
code
===
2
)
{
memberRoleVisible
=
true
memberRoleVisible
=
true
...
@@ -114,19 +102,18 @@ const addMemberRequest = function (n?: string) {
...
@@ -114,19 +102,18 @@ const addMemberRequest = function (n?: string) {
}
}
// 列表上的添加成员
// 列表上的添加成员
const
aloneAddMember
=
function
(
row
:
{
project_id
:
string
}
)
{
const
handleAddMember
=
function
(
row
:
any
)
{
multipleSelection
=
[
row
]
multipleSelection
=
[
row
]
label
Visible
=
true
member
Visible
=
true
}
}
// 删除项目
// 删除项目
const
deleteProject
=
function
(
row
:
{
id
:
string
}
)
{
const
handleDelete
=
function
(
row
:
any
)
{
deleteProjectRequest
({
id
:
row
.
id
}
).
then
(()
=>
{
ElMessageBox
.
confirm
(
'确定要删除该项目吗?'
,
'提示'
).
then
(()
=>
{
ElMessage
(
{
deleteProject
({
id
:
row
.
id
}).
then
(()
=>
{
message
:
'删除成功'
,
ElMessage
({
message
:
'删除成功'
,
type
:
'success'
})
type
:
'success'
appList
?.
refetch
()
})
})
appList
?.
refetch
()
})
})
}
}
</
script
>
</
script
>
...
@@ -149,21 +136,21 @@ const deleteProject = function (row: { id: string }) {
...
@@ -149,21 +136,21 @@ const deleteProject = function (row: { id: string }) {
<el-button
text
style=
"--el-button-text-color: #3276fc"
>
<el-button
text
style=
"--el-button-text-color: #3276fc"
>
<router-link
:to=
"
{ name: 'projectUpdate', params: { id: row.id } }">编辑
</router-link>
<router-link
:to=
"
{ name: 'projectUpdate', params: { id: row.id } }">编辑
</router-link>
</el-button>
</el-button>
<el-button
text
style=
"--el-button-text-color: #00bfbf"
@
click=
"
alon
eAddMember(row)"
>
添加成员
</el-button>
<el-button
text
style=
"--el-button-text-color: #00bfbf"
@
click=
"
handl
eAddMember(row)"
>
添加成员
</el-button>
<el-button
text
style=
"--el-button-text-color: #d9001b"
@
click=
"
deleteProject
(row)"
>
删除
</el-button>
<el-button
text
style=
"--el-button-text-color: #d9001b"
@
click=
"
handleDelete
(row)"
>
删除
</el-button>
</
template
>
</
template
>
</AppList>
</AppList>
<AddMember
@
changeUser=
"changeMember"
v-model=
"
label
Visible"
></AddMember>
<AddMember
@
changeUser=
"changeMember"
v-model=
"
member
Visible"
></AddMember>
</AppCard>
</AppCard>
<el-dialog
v-model=
"memberRoleVisible"
title=
"提示"
>
<el-dialog
v-model=
"memberRoleVisible"
title=
"提示"
width=
"500px"
>
<el-form>
<el-form
label-suffix=
":"
>
<el-form-item
label=
"系统检测到
:"
>
{{ changeMemberName }}
在多个项目中已拥有角色
</el-form-item>
<el-form-item
label=
"系统检测到
"
>
{{ currentUser?.user.realname }}
在多个项目中已拥有角色
</el-form-item>
<el-form-item
label=
"请选择
:
"
>
<el-form-item
label=
"请选择"
>
<el-button
@
click=
"addMemberRequest('replace')"
>
全部替换为新角色
</el-button>
<el-button
type=
"primary"
plain
@
click=
"addMemberRequest('replace')"
>
全部替换为新角色
</el-button>
<el-button
@
click=
"addMemberRequest('insert')"
>
在已有角色中新增角色
</el-button>
<el-button
type=
"primary"
plain
@
click=
"addMemberRequest('insert')"
>
在已有角色中新增角色
</el-button>
</el-form-item>
</el-form-item>
<el-form-item
label=
"或
者:
"
>
<el-form-item
label=
"或
选择
"
>
<el-button
@
click=
"memberRoleVisible = false"
>
取消本次更新
</el-button>
<el-button
type=
"warning"
plain
@
click=
"memberRoleVisible = false"
>
取消本次更新
</el-button>
</el-form-item>
</el-form-item>
</el-form>
</el-form>
</el-dialog>
</el-dialog>
...
...
src/modules/base/users/views/Index.vue
浏览文件 @
de1a52c6
...
@@ -22,7 +22,7 @@ const listOptions = $computed(() => {
...
@@ -22,7 +22,7 @@ const listOptions = $computed(() => {
filters
:
[
filters
:
[
{
type
:
'input'
,
prop
:
'user_name'
,
placeholder
:
'请输入用户姓名'
},
{
type
:
'input'
,
prop
:
'user_name'
,
placeholder
:
'请输入用户姓名'
},
{
type
:
'input'
,
prop
:
'mobile'
,
placeholder
:
'请输入用户手机号'
},
{
type
:
'input'
,
prop
:
'mobile'
,
placeholder
:
'请输入用户手机号'
},
{
type
:
'input'
,
prop
:
'email'
,
placeholder
:
'请输入
角色
邮箱'
},
{
type
:
'input'
,
prop
:
'email'
,
placeholder
:
'请输入
用户
邮箱'
},
{
type
:
'input'
,
prop
:
'role_name'
,
placeholder
:
'请输入角色名称'
}
{
type
:
'input'
,
prop
:
'role_name'
,
placeholder
:
'请输入角色名称'
}
],
],
columns
:
[
columns
:
[
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论