Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Q
qahome-diamond
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
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
QA
qahome-diamond
Commits
7bbc4a75
Commit
7bbc4a75
authored
May 07, 2019
by
kewei.jia
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
pipeline 功能修改
parent
650e0fc6
Changes
4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
124 additions
and
71 deletions
+124
-71
dev.env.js
config/dev.env.js
+1
-1
prod.env.js
config/prod.env.js
+2
-1
pipelineNode.js
src/api/pipelineNode.js
+37
-0
application.vue
src/views/pipeline/application.vue
+84
-69
No files found.
config/dev.env.js
View file @
7bbc4a75
...
@@ -4,5 +4,5 @@ module.exports = {
...
@@ -4,5 +4,5 @@ module.exports = {
// QA_API: '"http://172.30.220.22:3003"',
// QA_API: '"http://172.30.220.22:3003"',
QA_API
:
'
"http://127.0.0.1:3003"
'
,
QA_API
:
'
"http://127.0.0.1:3003"
'
,
TESTDATA_API
:
'
"http://172.30.220.22:3333"
'
,
TESTDATA_API
:
'
"http://172.30.220.22:3333"
'
,
PIPELINE_API
:
'
"http://pipes.liangkebang.com"
'
// PIPELINE_API:'"http://pipes.liangkebang.com"',
}
}
config/prod.env.js
View file @
7bbc4a75
...
@@ -3,5 +3,6 @@ module.exports = {
...
@@ -3,5 +3,6 @@ module.exports = {
ENV_CONFIG
:
'
"prod"
'
,
ENV_CONFIG
:
'
"prod"
'
,
QA_API
:
'
"http://172.30.220.22:3003"
'
,
QA_API
:
'
"http://172.30.220.22:3003"
'
,
TESTDATA_API
:
'
"http://172.30.220.22:3333"
'
,
TESTDATA_API
:
'
"http://172.30.220.22:3333"
'
,
PIPELINE_API
:
'
"http://pipes.liangkebang.com"
'
PIPELINE_API
:
'
"http://pipes.liangkebang.com"
'
,
PIPELINE_API_JAVA
:
'
"http://pipes.liangkebang.com"
'
,
}
}
src/api/pipelineNode.js
0 → 100644
View file @
7bbc4a75
import
request
from
'
@/utils/request
'
export
function
getMaster
(
data
)
{
return
request
({
url
:
'
/pipeline/master
'
,
method
:
'
post
'
,
data
})
}
export
function
saveApplication
(
data
)
{
return
request
({
url
:
'
/pipeline/save
'
,
method
:
'
post
'
,
data
})
}
export
function
getApplications
(
data
)
{
return
request
({
url
:
'
/pipeline/find
'
,
method
:
'
post
'
,
data
})
}
export
function
deleteApplication
(
data
)
{
return
request
({
url
:
`/pipeline/delete`
,
method
:
'
post
'
,
data
})
}
export
function
updateApplication
(
data
)
{
return
request
({
url
:
'
/manage/application
'
,
method
:
'
put
'
,
data
})
}
src/views/pipeline/application.vue
View file @
7bbc4a75
<
template
>
<
template
>
<div
class=
"app-container"
>
<div
class=
"app-container"
>
<div
class=
"filter-container"
>
<div
class=
"filter-container"
>
<el-input
v-model=
"listQuery.
tag
"
placeholder=
"应用名称"
clearable
style=
"width: 200px;"
class=
"filter-item"
@
keyup.enter.native=
"handleFilter"
/>
<el-input
v-model=
"listQuery.
application_name
"
placeholder=
"应用名称"
clearable
style=
"width: 200px;"
class=
"filter-item"
@
keyup.enter.native=
"handleFilter"
/>
<el-input
v-model=
"listQuery.
own
er"
placeholder=
"新建用户"
clearable
style=
"width: 200px;"
class=
"filter-item"
@
keyup.enter.native=
"handleFilter"
/>
<el-input
v-model=
"listQuery.
new_us
er"
placeholder=
"新建用户"
clearable
style=
"width: 200px;"
class=
"filter-item"
@
keyup.enter.native=
"handleFilter"
/>
<el-button
v-waves
class=
"filter-item"
type=
"primary"
icon=
"el-icon-search"
@
click=
"handleFilter"
>
{{
$t
(
'
table.search
'
)
}}
</el-button>
<el-button
v-waves
class=
"filter-item"
type=
"primary"
icon=
"el-icon-search"
@
click=
"handleFilter"
>
{{
$t
(
'
table.search
'
)
}}
</el-button>
<el-button
class=
"filter-item"
type=
"primary"
icon=
"el-icon-edit"
@
click=
"handleCreate"
>
添加
</el-button>
<el-button
class=
"filter-item"
type=
"primary"
icon=
"el-icon-edit"
@
click=
"handleCreate"
>
添加
</el-button>
</div>
</div>
...
@@ -19,41 +19,19 @@
...
@@ -19,41 +19,19 @@
<span>
{{
scope
.
$index
+
1
}}
</span>
<span>
{{
scope
.
$index
+
1
}}
</span>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
label=
"应用名称"
prop=
"
tag
"
align=
"center"
>
<el-table-column
label=
"应用名称"
prop=
"
application_name
"
align=
"center"
>
<
template
slot-scope=
"scope"
>
<
template
slot-scope=
"scope"
>
<span
class=
"link-type"
@
click=
"handleUpdate(scope.row)"
>
{{
scope
.
row
.
tag
}}
</span>
<span
class=
"link-type"
@
click=
"handleUpdate(scope.row)"
>
{{
scope
.
row
.
application_name
}}
</span>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
label=
"项目->分支"
align=
"center"
>
<!-- <el-table-column label="状态" align="center">
<template slot-scope="scope">
<span>{{ scope.row.status }}</span>
</template>
</el-table-column> -->
<!-- <el-table-column label="通知方式" align="center">
<template slot-scope="scope">
<span>{{ scope.row.noticeType }}</span>
</template>
</el-table-column> -->
<el-table-column
label=
"项目与分支"
align=
"center"
>
<
template
slot-scope=
"scope"
>
<div
v-for=
"item in scope.row.repos"
:key=
"item.id"
>
{{
item
.
repository
.
name
}}
:
{{
item
.
ref
.
name
|
replaceeRef
}}
</div>
</
template
>
</el-table-column>
<el-table-column
label=
"新建用户->修改用户"
align=
"center"
>
<
template
slot-scope=
"scope"
>
<
template
slot-scope=
"scope"
>
<span
v-if=
"scope.row.editor"
>
{{
scope
.
row
.
owner
}}
->
{{
scope
.
row
.
editor
}}
</span>
<div
v-for=
"item in scope.row.repos"
:key=
"item.id"
><b>
{{
item
.
repository
}}
</b>
->
{{
item
.
ref
.
name
|
replaceeRef
}}
</div>
<span
v-if=
"!scope.row.editor"
>
{{
scope
.
row
.
owner
}}
</span>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
label=
"更新时间"
align=
"center"
>
<el-table-column
prop=
"new_user"
label=
"创建者"
align=
"center"
/>
<
template
slot-scope=
"scope"
>
<el-table-column
prop=
"create_time"
label=
"创建时间"
align=
"center"
/>
<span>
{{
scope
.
row
.
updateTime
|
formatDate
}}
</span>
</
template
>
</el-table-column>
<el-table-column
:label=
"$t('table.actions')"
align=
"center"
width=
"180"
class-name=
"small-padding fixed-width"
>
<el-table-column
:label=
"$t('table.actions')"
align=
"center"
width=
"180"
class-name=
"small-padding fixed-width"
>
<
template
slot-scope=
"scope"
>
<
template
slot-scope=
"scope"
>
<el-button
type=
"primary"
size=
"mini"
@
click=
"handleUpdate(scope.row)"
>
{{
$t
(
'
table.edit
'
)
}}
</el-button>
<el-button
type=
"primary"
size=
"mini"
@
click=
"handleUpdate(scope.row)"
>
{{
$t
(
'
table.edit
'
)
}}
</el-button>
...
@@ -67,18 +45,18 @@
...
@@ -67,18 +45,18 @@
<el-dialog
:title=
"dialogStatus"
:visible.sync=
"dialogFormVisible"
>
<el-dialog
:title=
"dialogStatus"
:visible.sync=
"dialogFormVisible"
>
<el-form
ref=
"dataForm"
:rules=
"rules"
:model=
"temp"
label-position=
"left"
label-width=
"80px"
style=
"width: 90%; margin-left:40px;"
>
<el-form
ref=
"dataForm"
:rules=
"rules"
:model=
"temp"
label-position=
"left"
label-width=
"80px"
style=
"width: 90%; margin-left:40px;"
>
<el-form-item
label=
"应用名称"
prop=
"
tag
"
>
<el-form-item
label=
"应用名称"
prop=
"
application_name
"
>
<el-input
v-model=
"temp.
tag
"
/>
<el-input
v-model=
"temp.
application_name
"
/>
</el-form-item>
</el-form-item>
<div
>
<div
>
<div
v-for=
"(repoAndRefItem,index) in temp.repos"
:key=
"repoAndRefItem.id"
style=
"width:110%;margin-bottom:20px"
>
<div
v-for=
"(repoAndRefItem,index) in temp.repos"
:key=
"repoAndRefItem.id"
style=
"width:110%;margin-bottom:20px"
>
<label
style=
"margin-right:20px"
>
项目
</label>
<label
style=
"margin-right:20px"
>
项目
</label>
<el-select
v-model=
"repoAndRefItem.repository"
value-key=
"id"
style=
"width:30%"
class=
"filter-item"
@
change=
"getRefs
"
>
<el-select
v-model=
"repoAndRefItem.repository"
filterable
value-key=
"id"
style=
"width:30%"
class=
"filter-item"
@
change=
"getRefs(repoAndRefItem.repository,true)
"
>
<el-option
v-for=
"item in repos"
:value=
"item
"
:label=
"item.name"
:key=
"item.id
"
/>
<el-option
v-for=
"item in repos"
:value=
"item
.project_name"
:label=
"item.project_name"
:key=
"item.project_name
"
/>
</el-select>
</el-select>
<label
style=
"margin:20px"
>
分支
</label>
<label
style=
"margin:20px"
>
分支
</label>
<el-select
v-model=
"repoAndRefItem.ref"
value-key=
"id"
style=
"width:30%"
class=
"filter-item"
>
<el-select
v-model=
"repoAndRefItem.ref"
filterable
value-key=
"id"
style=
"width:30%"
class=
"filter-item"
>
<el-option
v-for=
"item in refs[repoAndRefItem.repository
.id]"
:value=
"item"
:label=
"item.name | replaceeRef"
:key=
"item.id
"
/>
<el-option
v-for=
"item in refs[repoAndRefItem.repository
]"
:value=
"item"
:label=
"item.name"
:key=
"item.name
"
/>
</el-select>
</el-select>
<el-button
:disabled=
"index===0?true:false"
style=
"margin-left:5px"
@
click=
"temp.repos.splice(index, 1)"
>
删除
</el-button>
<el-button
:disabled=
"index===0?true:false"
style=
"margin-left:5px"
@
click=
"temp.repos.splice(index, 1)"
>
删除
</el-button>
</div>
</div>
...
@@ -94,6 +72,16 @@
...
@@ -94,6 +72,16 @@
<el-form-item
v-if=
"temp.noticeType === 'dingding'"
label=
"通知地址"
>
<el-form-item
v-if=
"temp.noticeType === 'dingding'"
label=
"通知地址"
>
<el-input
:autosize=
"{ minRows: 3, maxRows: 4}"
v-model=
"temp.noticeAddress"
type=
"textarea"
placeholder=
"Please input"
/>
<el-input
:autosize=
"{ minRows: 3, maxRows: 4}"
v-model=
"temp.noticeAddress"
type=
"textarea"
placeholder=
"Please input"
/>
</el-form-item>
</el-form-item>
<el-form-item
label=
"是否部署到容器"
label-width=
"120"
>
<el-switch
v-model=
"temp.isDeploy"
inactive-color=
"#efefef"
active-color=
"#13ce66"
/>
</el-form-item>
<el-form-item
v-if=
"temp.isDeploy"
label=
"namespace"
prop=
"namespace"
>
<el-input
v-model=
"temp.namespace"
/>
</el-form-item>
</el-form>
</el-form>
<div
slot=
"footer"
class=
"dialog-footer"
>
<div
slot=
"footer"
class=
"dialog-footer"
>
<el-button
@
click=
"dialogFormVisible = false"
>
{{ $t('table.cancel') }}
</el-button>
<el-button
@
click=
"dialogFormVisible = false"
>
{{ $t('table.cancel') }}
</el-button>
...
@@ -103,7 +91,7 @@
...
@@ -103,7 +91,7 @@
<el-dialog
:visible.sync=
"dialogDeleteVisible"
:data=
"temp"
title=
"Delete"
>
<el-dialog
:visible.sync=
"dialogDeleteVisible"
:data=
"temp"
title=
"Delete"
>
<span
>
<span
>
确定要删除{{ temp.
tag
}}吗?
确定要删除{{ temp.
application_name
}}吗?
</span>
</span>
<span
slot=
"footer"
class=
"dialog-footer"
>
<span
slot=
"footer"
class=
"dialog-footer"
>
<el-button
@
click=
"dialogDeleteVisible = false"
>
{{ $t('table.cancel') }}
</el-button>
<el-button
@
click=
"dialogDeleteVisible = false"
>
{{ $t('table.cancel') }}
</el-button>
...
@@ -115,7 +103,8 @@
...
@@ -115,7 +103,8 @@
</template>
</template>
<
script
>
<
script
>
import
{
getApplications
,
saveApplication
,
updateApplication
,
deleteApplication
,
getRepos
,
getRefs
}
from
'
@/api/pipeline
'
import
{
getApplications
,
saveApplication
,
updateApplication
,
deleteApplication
,
getMaster
}
from
'
@/api/pipelineNode
'
import
{
getProjects
}
from
'
@/api/proconfig
'
import
waves
from
'
@/directive/waves
'
// Waves directive
import
waves
from
'
@/directive/waves
'
// Waves directive
import
Pagination
from
'
@/components/Pagination
'
// Secondary package based on el-pagination
import
Pagination
from
'
@/components/Pagination
'
// Secondary package based on el-pagination
import
moment
from
'
moment
'
import
moment
from
'
moment
'
...
@@ -136,6 +125,7 @@ export default {
...
@@ -136,6 +125,7 @@ export default {
return
{
return
{
repository
:
''
,
repository
:
''
,
total
:
0
,
total
:
0
,
cacheData
:
{},
listLoading
:
true
,
listLoading
:
true
,
listQuery
:
{
listQuery
:
{
},
},
...
@@ -145,9 +135,9 @@ export default {
...
@@ -145,9 +135,9 @@ export default {
dialogDeleteVisible
:
false
,
dialogDeleteVisible
:
false
,
dialogStatus
:
''
,
dialogStatus
:
''
,
rules
:
{
rules
:
{
tag
:
[{
required
:
true
,
message
:
'
请输入
'
,
trigger
:
'
change
'
}]
application_name
:
[{
required
:
true
,
message
:
'
请输入
'
,
trigger
:
'
change
'
}],
// timestamp: [{ type: 'date', required: true, message: 'timestamp is required', trigger: 'change' }],
// timestamp: [{ type: 'date', required: true, message: 'timestamp is required', trigger: 'change' }],
// title: [{ required: true, message: 'title is required
', trigger: 'blur' }]
namespace
:
[{
required
:
true
,
message
:
'
请输入
'
,
trigger
:
'
blur
'
}]
},
},
noticeTypes
:
[
'
dingding
'
,
'
mail
'
],
noticeTypes
:
[
'
dingding
'
,
'
mail
'
],
applications
:
[],
applications
:
[],
...
@@ -173,28 +163,14 @@ export default {
...
@@ -173,28 +163,14 @@ export default {
delete
this
.
listQuery
[
prop
]
delete
this
.
listQuery
[
prop
]
}
}
}
}
getApplications
(
this
.
listQuery
).
then
(
res
=>
{
var
arr
=
Object
.
keys
(
this
.
listQuery
)
this
.
applications
=
res
.
data
.
data
getApplications
(
arr
.
length
>
0
?
this
.
listQuery
:
null
).
then
(
res
=>
{
this
.
applications
=
res
.
data
this
.
listLoading
=
false
this
.
listLoading
=
false
})
})
},
},
getRefs
(
repo
)
{
console
.
log
(
repo
)
getRefs
(
repo
.
id
).
then
(
res
=>
{
this
.
$set
(
this
.
refs
,
repo
.
id
,
res
.
data
.
data
.
map
(
item
=>
{
return
{
id
:
item
.
id
,
name
:
item
.
ref
}
}))
this
.
refs
[
repo
.
id
].
push
({
id
:
'
0
'
,
name
:
'
请选择
'
})
this
.
refs
[
repo
.
id
].
reverse
()
})
},
newRepoAndRef
()
{
newRepoAndRef
()
{
this
.
temp
.
repos
.
push
({
repository
:
{}
,
ref
:
{}})
this
.
temp
.
repos
.
push
({
repository
:
''
,
ref
:
{}})
},
},
handleFilter
()
{
handleFilter
()
{
...
@@ -204,31 +180,68 @@ export default {
...
@@ -204,31 +180,68 @@ export default {
resetTemp
()
{
resetTemp
()
{
this
.
temp
=
{
this
.
temp
=
{
id
:
0
,
id
:
0
,
namespace
:
null
,
noticeAddress
:
''
,
noticeAddress
:
''
,
noticeType
:
''
,
noticeType
:
''
,
repos
:
[{
repository
:
{
id
:
'
请选择
'
},
ref
:
{
id
:
'
请选择
'
}}],
isDeploy
:
false
,
status
:
'
run
'
,
repos
:
[{
repository
:
''
,
ref
:
{
id
:
'
请选择
'
}}],
tag
:
''
application_name
:
''
,
create_time
:
moment
().
format
(
'
YYYY-MM-DD HH:mm:ss
'
),
new_user
:
''
,
update_user
:
''
}
}
},
},
handleCreate
()
{
handleCreate
()
{
this
.
resetTemp
()
this
.
resetTemp
()
this
.
dialogStatus
=
'
新建
'
this
.
dialogStatus
=
'
新建
'
get
Repos
(
).
then
(
res
=>
{
get
Projects
({
is_active
:
true
}
).
then
(
res
=>
{
this
.
repos
=
res
.
data
.
data
this
.
repos
=
res
.
data
this
.
repos
.
sort
((
s1
,
s2
)
=>
{
this
.
repos
.
sort
((
s1
,
s2
)
=>
{
return
s1
.
name
.
localeCompare
(
s2
.
name
)
return
s1
.
project_name
.
localeCompare
(
s2
.
project_
name
)
})
})
this
.
listLoading
=
false
this
.
listLoading
=
false
})
})
this
.
dialogFormVisible
=
true
this
.
dialogFormVisible
=
true
},
},
getRefs
(
repo
,
flag
)
{
if
(
flag
)
{
this
.
temp
.
repos
.
forEach
(
item
=>
{
if
(
item
.
repository
===
repo
)
{
item
.
ref
=
{}
}
})
}
getMaster
({
name
:
repo
}).
then
(
res
=>
{
if
(
res
.
data
.
code
===
'
0001
'
)
{
console
.
log
(
'
无法获取分支
'
)
}
else
{
this
.
$set
(
this
.
refs
,
repo
,
res
.
data
.
data
.
map
(
item
=>
{
return
{
id
:
item
.
commit
.
id
,
name
:
item
.
name
}
}))
this
.
refs
[
repo
].
push
({
id
:
'
0
'
,
name
:
'
请选择
'
})
this
.
refs
[
repo
].
reverse
()
}
})
},
createData
()
{
createData
()
{
this
.
$refs
[
'
dataForm
'
].
validate
((
valid
)
=>
{
this
.
$refs
[
'
dataForm
'
].
validate
((
valid
)
=>
{
if
(
valid
)
{
if
(
valid
)
{
// 数组清洗整合,
this
.
temp
.
repos
.
forEach
(
item
=>
{
this
.
repos
.
forEach
(
value
=>
{
if
(
item
.
repository
===
value
.
project_name
)
{
this
.
$set
(
item
,
'
type
'
,
value
.
type
)
this
.
$set
(
item
,
'
groupName
'
,
value
.
git_path_group
)
}
})
})
if
(
this
.
dialogStatus
===
'
新建
'
)
{
if
(
this
.
dialogStatus
===
'
新建
'
)
{
this
.
temp
.
new_user
=
this
.
$store
.
getters
.
name
saveApplication
(
this
.
temp
).
then
(()
=>
{
saveApplication
(
this
.
temp
).
then
(()
=>
{
this
.
dialogFormVisible
=
false
this
.
dialogFormVisible
=
false
this
.
$notify
({
this
.
$notify
({
...
@@ -240,6 +253,7 @@ export default {
...
@@ -240,6 +253,7 @@ export default {
this
.
getApplications
()
this
.
getApplications
()
})
})
}
else
{
}
else
{
this
.
temp
.
update_user
=
this
.
$store
.
getters
.
name
updateApplication
(
this
.
temp
).
then
(()
=>
{
updateApplication
(
this
.
temp
).
then
(()
=>
{
this
.
dialogFormVisible
=
false
this
.
dialogFormVisible
=
false
this
.
$notify
({
this
.
$notify
({
...
@@ -256,13 +270,14 @@ export default {
...
@@ -256,13 +270,14 @@ export default {
},
},
handleUpdate
(
row
)
{
handleUpdate
(
row
)
{
console
.
log
(
row
)
this
.
temp
=
Object
.
assign
({},
row
)
// copy obj
this
.
temp
=
Object
.
assign
({},
row
)
// copy obj
this
.
dialogStatus
=
'
编辑
'
this
.
dialogStatus
=
'
编辑
'
this
.
dialogFormVisible
=
true
this
.
dialogFormVisible
=
true
get
Repos
(
).
then
(
res
=>
{
get
Projects
({
is_active
:
true
}
).
then
(
res
=>
{
this
.
repos
=
res
.
data
.
data
this
.
repos
=
res
.
data
this
.
repos
.
sort
((
s1
,
s2
)
=>
{
this
.
repos
.
sort
((
s1
,
s2
)
=>
{
return
s1
.
name
.
localeCompare
(
s2
.
name
)
return
s1
.
project_name
.
localeCompare
(
s2
.
project_
name
)
})
})
this
.
listLoading
=
false
this
.
listLoading
=
false
})
})
...
@@ -270,14 +285,14 @@ export default {
...
@@ -270,14 +285,14 @@ export default {
this
.
getRefs
(
item
.
repository
)
this
.
getRefs
(
item
.
repository
)
})
})
},
},
handleDelete
(
row
)
{
handleDelete
(
row
)
{
console
.
log
(
row
)
this
.
temp
=
row
this
.
temp
=
row
this
.
dialogDeleteVisible
=
true
this
.
dialogDeleteVisible
=
true
},
},
deleteData
()
{
deleteData
()
{
deleteApplication
(
this
.
temp
.
id
).
then
(()
=>
{
deleteApplication
(
{
id
:
this
.
temp
.
_id
}
).
then
(()
=>
{
this
.
dialogDeleteVisible
=
false
this
.
dialogDeleteVisible
=
false
this
.
$notify
({
this
.
$notify
({
title
:
'
成功
'
,
title
:
'
成功
'
,
...
...
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