Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
A
apaas-ui
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
gzga-jzapi
apaas-ui
Commits
43e277ee
Commit
43e277ee
authored
Jun 29, 2020
by
徐一鸣
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'xym' into dev
parents
05cdb617
6b9cb683
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
433 additions
and
111 deletions
+433
-111
src/components/deployment-info.vue
src/components/deployment-info.vue
+148
-0
src/pages/workbench/yygl/deployment.vue
src/pages/workbench/yygl/deployment.vue
+285
-111
No files found.
src/components/deployment-info.vue
0 → 100644
View file @
43e277ee
<
template
>
<div
class=
"deployment_info"
>
<div
class=
"state_steps"
>
<p
class=
"deploy_state icon_and_text"
:class=
"
{
warn: deployState.state === 2,
}"
>
<img
:src=
"getIcon(deployState.state)"
/>
<span
v-text=
"getText(deployState.state)"
></span>
</p>
<ul
class=
"state_list"
>
<li
v-for=
"item in data"
:key=
"item.value"
class=
"icon_and_text"
:class=
"
{ current: item.value === currentState.value }"
@click="selecState(item)"
>
<img
:src=
"getIcon(item.state)"
/>
<span
v-text=
"item.name"
></span>
</li>
</ul>
</div>
<div
class=
"state_detail"
>
<p
v-text=
"currentState.content"
style=
"text-align: center;margin-top: 20px;"
></p>
</div>
</div>
</
template
>
<
script
>
export
default
{
props
:
{
data
:
{
type
:
Array
,
required
:
true
,
},
},
data
:
()
=>
({
selectedState
:
null
,
// 用户选中的状态
}),
computed
:
{
deployState
()
{
let
state
=
{
name
:
"
-
"
,
value
:
"
values
"
,
content
:
""
,
state
:
2
,
};
let
status
=
this
.
data
;
let
statusLength
=
status
.
length
;
if
(
statusLength
>
0
)
{
state
=
status
[
statusLength
-
1
];
}
return
state
;
},
// 正在进行的状态
currentState
()
{
return
this
.
selectedState
||
this
.
deployState
;
},
// 需要展示的状态
},
methods
:
{
getIcon
(
stateValue
=
2
)
{
const
icons
=
[
require
(
"
../assets/imgs/ic_operation.gif
"
),
require
(
"
../assets/imgs/ic_true.png
"
),
require
(
"
../assets/imgs/ic_failed.png
"
),
];
return
icons
[
stateValue
];
},
getText
(
stateValue
=
2
)
{
const
texts
=
[
"
部署中
"
,
"
成功
"
,
"
失败
"
];
return
texts
[
stateValue
];
},
selecState
(
state
)
{
if
(
this
.
selectedState
&&
this
.
selectedState
.
value
===
state
.
value
)
{
return
;
}
console
.
log
(
state
);
this
.
selectedState
=
state
;
},
},
mounted
()
{
// console.log(this.data);
},
};
</
script
>
<
style
scoped
>
.deployment_info
{
display
:
flex
;
justify-content
:
space-between
;
align-items
:
stretch
;
}
.state_steps
{
width
:
270px
;
flex-shrink
:
0
;
}
.state_steps
>
.deploy_state
{
margin
:
10px
20px
20px
0
;
padding
:
10px
;
border-radius
:
5px
;
overflow
:
hidden
;
background-color
:
#edf0ff
;
font-size
:
16px
;
line-height
:
24px
;
color
:
#264dd9
;
text-align
:
center
;
}
.state_steps
>
.deploy_state.warn
{
background-color
:
#ffebeb
;
color
:
#da4251
;
}
.state_steps
>
.state_list
>
li
{
padding
:
15px
20px
;
font-size
:
14px
;
line-height
:
22px
;
color
:
#242c43
;
cursor
:
pointer
;
}
.state_steps
>
.state_list
>
li
.current
{
border-top-left-radius
:
6px
;
border-bottom-left-radius
:
6px
;
background-color
:
#f8f9fd
;
}
.state_detail
{
height
:
500px
;
flex-grow
:
1
;
border-radius
:
7px
;
background-color
:
#f8f9fd
;
overflow
:
hidden
;
}
.icon_and_text
>
*
{
display
:
inline-block
;
vertical-align
:
middle
;
}
.icon_and_text
>
img
+
span
{
margin-left
:
12px
;
}
</
style
>
src/pages/workbench/yygl/deployment.vue
View file @
43e277ee
...
...
@@ -5,7 +5,9 @@
<el-breadcrumb-item
:to=
"`/yygl/$
{$route.params.level}/0`">
我的应用
</el-breadcrumb-item>
<el-breadcrumb-item
:to=
"`/yygl/$
{$route.params.level}/${$route.params.type}`">
<el-breadcrumb-item
:to=
"`/yygl/$
{$route.params.level}/${$route.params.type}`"
>
应用仓库
</el-breadcrumb-item>
<el-breadcrumb-item>
...
...
@@ -27,12 +29,16 @@
:rules=
"image_rules"
>
<el-form-item
label=
"工作区域:"
prop=
"namespace"
>
<el-select
v-model=
"baseInfoForm.namespace"
placeholder=
"请选择工作区域"
>
<el-select
v-model=
"baseInfoForm.namespace"
placeholder=
"请选择工作区域"
>
<el-option
v-for=
"item in area_options"
:key=
"item.value"
:label=
"item.label"
:value=
"item.value"
>
:value=
"item.value"
>
</el-option>
</el-select>
</el-form-item>
...
...
@@ -71,22 +77,34 @@
</el-form-item>
<el-form-item
label=
"镜像版本:"
prop=
"vision"
>
<div
:class=
"
{'select_box':true,'is_select':app_set.vision==vision}" v-for="vision in vision_arr" :key="vision" @click="app_set.vision=vision">
{{
vision
}}
</div>
<div
:class=
"
{ select_box: true, is_select: app_set.vision == vision }"
v-for="vision in vision_arr"
:key="vision"
@click="app_set.vision = vision"
>
{{
vision
}}
</div>
</el-form-item>
<el-form-item
label=
"资源限制-内存:"
prop=
"memory"
class=
"limitsd"
>
<el-input
type=
'number'
type=
"number"
class=
"limitinput"
v-model=
"app_set.memory"
placeholder=
"请输入内存"
></el-input>
<el-select
v-model=
"app_set.memory_type"
class=
"timeslect"
placeholder=
"请选择内存"
>
<el-select
v-model=
"app_set.memory_type"
class=
"timeslect"
placeholder=
"请选择内存"
>
<el-option
v-for=
"item in memory_arr"
:key=
"item.value"
:label=
"item.label"
:value=
"item.value"
>
:value=
"item.value"
>
</el-option>
</el-select>
</el-form-item>
...
...
@@ -102,13 +120,36 @@
</el-form-item>
<el-form-item
label=
"是否监控:"
prop=
"watch"
>
<div
class=
"openbgc"
@
click=
"openstart"
:style=
"!app_set.watch?{backgroundImage:'url('+require('@/assets/imgs/btn_off_hov.png')+')'}:{}"
></div>
<div
class=
"openbgc"
@
click=
"openstart"
:style=
"
!app_set.watch
? {
backgroundImage:
'url(' + require('@/assets/imgs/btn_off_hov.png') + ')',
}
: {}
"
></div>
</el-form-item>
<el-form-item
label=
"储存容量:"
prop=
"save_memory"
>
<div
:class=
"{'select_box':true,'is_select':app_set.save_memory==save}"
v-for=
"save in save_arr"
:key=
"save"
@
click=
"app_set.save_memory=save"
>
{{save}}
</div>
<div
:class=
"{
select_box: true,
is_select: app_set.save_memory == save,
}"
v-for=
"save in save_arr"
:key=
"save"
@
click=
"app_set.save_memory = save"
>
{{ save }}
</div>
</el-form-item>
</el-form>
<div
class=
"senior_box"
@
click=
"senior_flag=true"
v-if=
"!senior_flag"
>
高级配置
</div>
<div
class=
"senior_box"
@
click=
"senior_flag = true"
v-if=
"!senior_flag"
>
高级配置
</div>
<div
class=
"apass_button step_action"
v-if=
"!senior_flag"
>
<el-button
type=
"primary"
plain
@
click=
"preStep"
>
上一步
...
...
@@ -117,7 +158,12 @@
下一步
</el-button>
</div>
<p
v-if=
"senior_flag"
style=
"color: #58617a;font-size: 14px;margin-bottom:10px;margin-top:30px;"
>
高级配置:
</p>
<p
v-if=
"senior_flag"
style=
"color: #58617a;font-size: 14px;margin-bottom:10px;margin-top:30px;"
>
高级配置:
</p>
<v-apaas-code
v-show=
"senior_flag"
:datas=
"app_set.code"
></v-apaas-code>
<div
class=
"apass_button step_action"
v-if=
"senior_flag"
>
<el-button
type=
"primary"
plain
@
click=
"deal_code(0)"
>
...
...
@@ -133,7 +179,10 @@
:step=
"2"
:active-icon=
"require('@/assets/imgs/progress_ic_bushudata.png')"
>
<!-- content -->
<deployment-info
:data=
"stateList"
style=
"margin-top: 30px;"
></deployment-info>
<div
class=
"apass_button step_action"
>
<el-button
type=
"primary"
>
前往查看
...
...
@@ -161,34 +210,37 @@ import apassDialog from "@/components/apass-dialog";
import
codes
from
"
@/components/codes
"
;
var
checkNumber
=
(
rule
,
value
,
callback
)
=>
{
if
(
!
value
)
{
return
callback
(
new
Error
(
'
不能为空
'
));
return
callback
(
new
Error
(
"
不能为空
"
));
}
setTimeout
(()
=>
{
if
(
new
RegExp
(
"
^[1-9][0-9]*$
"
).
test
(
value
))
{
callback
();
}
else
{
callback
(
new
Error
(
'
请输入正整数
'
))
callback
(
new
Error
(
"
请输入正整数
"
));
}
});
};
var
checkName
=
(
rule
,
value
,
callback
)
=>
{
};
var
checkName
=
(
rule
,
value
,
callback
)
=>
{
if
(
new
RegExp
(
"
^[a-z]([0-9]||[a-z]||-)*$
"
).
test
(
value
))
{
callback
();
}
else
{
callback
(
new
Error
(
'
小写字母开头,可以由小写字母、数字、- 组成
'
))
callback
(
new
Error
(
"
小写字母开头,可以由小写字母、数字、- 组成
"
));
}
}
};
import
deploymentInfo
from
"
@/components/deployment-info
"
;
export
default
{
components
:
{
appBuildSteps
,
appBuildStep
,
apassDialog
,
deploymentInfo
,
"
v-apaas-code
"
:
codes
,
},
data
:
()
=>
({
step
:
0
,
senior_flag
:
false
,
begin_code
:
''
,
senior_flag
:
false
,
begin_code
:
""
,
dialogInfo
:
{
title
:
""
,
msg
:
""
,
...
...
@@ -198,32 +250,42 @@ export default {
namespace
:
""
,
name
:
""
,
},
app_set
:{
title
:
''
,
vision
:
''
,
memory
:
''
,
memory_type
:
1
,
cpu
:
''
,
watch
:
0
,
save_memory
:
''
,
code
:
''
app_set
:
{
title
:
""
,
vision
:
""
,
memory
:
""
,
memory_type
:
1
,
cpu
:
""
,
watch
:
0
,
save_memory
:
""
,
code
:
""
,
},
area_options
:[
area_options
:
[
{
name
:
'
12312
'
,
value
:
1
}
name
:
"
12312
"
,
value
:
1
,
}
,
],
vision_arr
:[
'
1.0.1
'
,
'
10.1.2
'
,
'
2.2.3
'
],
save_arr
:[
'
2GI
'
,
'
4GI
'
,
'
8GI
'
,
'
16GI
'
,
'
32GI
'
,
'
64GI
'
,
'
128GI
'
,
'
256GI
'
,
'
512GI
'
],
memory_arr
:[
vision_arr
:
[
"
1.0.1
"
,
"
10.1.2
"
,
"
2.2.3
"
],
save_arr
:
[
"
2GI
"
,
"
4GI
"
,
"
8GI
"
,
"
16GI
"
,
"
32GI
"
,
"
64GI
"
,
"
128GI
"
,
"
256GI
"
,
"
512GI
"
,
],
memory_arr
:
[
{
value
:
1
,
label
:
'
MI
'
,
value
:
1
,
label
:
"
MI
"
,
},
{
value
:
2
,
label
:
'
GI
'
,
value
:
2
,
label
:
"
GI
"
,
},
],
image_rules
:
{
...
...
@@ -232,56 +294,89 @@ export default {
],
name
:
[
{
required
:
true
,
message
:
"
请输入应用部署名称
"
,
trigger
:
"
blur
"
},
{
validator
:
checkName
,
trigger
:
'
blur
'
}
{
validator
:
checkName
,
trigger
:
"
blur
"
},
],
},
app_set_rules
:
{
title
:
[
{
required
:
true
,
message
:
"
请输入标题
"
,
trigger
:
"
blur
"
},
],
title
:
[{
required
:
true
,
message
:
"
请输入标题
"
,
trigger
:
"
blur
"
}],
memory
:
[
{
required
:
true
,
message
:
"
请输入内存
"
,
trigger
:
"
blur
"
},
{
validator
:
checkNumber
,
trigger
:
'
blur
'
}
{
validator
:
checkNumber
,
trigger
:
"
blur
"
},
],
cpu
:
[
{
required
:
true
,
message
:
"
请输入cpu
"
,
trigger
:
"
blur
"
},
{
validator
:
checkNumber
,
trigger
:
'
blur
'
}
{
validator
:
checkNumber
,
trigger
:
"
blur
"
},
],
vision
:
[{
required
:
true
,
message
:
"
请选择版本号
"
,
trigger
:
"
change
"
}],
save_memory
:
[{
required
:
true
,
message
:
"
请选择存储容量
"
,
trigger
:
"
change
"
}],
save_memory
:
[
{
required
:
true
,
message
:
"
请选择存储容量
"
,
trigger
:
"
change
"
},
],
},
evtUuid
:
""
,
evtSource
:
null
,
listStatus
:
[],
state
:
""
,
text
:
""
,
url
:
""
,
act
:
0
,
stateList
:
[
{
name
:
"
获取部署参数
"
,
value
:
"
values
"
,
content
:
"
获取部署参数
"
,
state
:
1
,
},
{
name
:
"
拉取部署文件
"
,
value
:
"
pull-chart
"
,
content
:
"
拉取部署文件
"
,
state
:
1
,
},
{
name
:
"
开始部署
"
,
value
:
"
install
"
,
content
:
"
开始部署
"
,
state
:
1
,
},
{
name
:
"
部署状态
"
,
value
:
"
deploy-status
"
,
content
:
"
部署状态
"
,
state
:
2
,
},
],
}),
methods
:
{
get_step_info
(){
get_step_info
()
{
this
.
$http
.
get
(
`/apaas/hubApi/market/step/
${
this
.
$route
.
params
.
app_id
}
`
)
.
then
((
response
)
=>
{
console
.
log
(
JSON
.
parse
(
response
.
data
.
data
));
})
})
;
},
deal_code
(
n
){
if
(
n
)
{
this
.
begin_code
=
this
.
app_set
.
code
}
else
{
this
.
app_set
.
code
=
this
.
begin_code
deal_code
(
n
)
{
if
(
n
)
{
this
.
begin_code
=
this
.
app_set
.
code
;
}
else
{
this
.
app_set
.
code
=
this
.
begin_code
;
}
this
.
senior_flag
=
false
this
.
senior_flag
=
false
;
},
sub_yy_form
(
formName
){
sub_yy_form
(
formName
)
{
this
.
$refs
[
formName
].
validate
((
valid
)
=>
{
if
(
valid
)
{
this
.
nextStep
()
this
.
nextStep
();
}
else
{
console
.
log
(
'
error submit!!
'
);
console
.
log
(
"
error submit!!
"
);
return
false
;
}
});
},
openstart
(){
if
(
this
.
app_set
.
watch
)
{
this
.
app_set
.
watch
=
0
}
else
{
this
.
app_set
.
watch
=
1
openstart
()
{
if
(
this
.
app_set
.
watch
)
{
this
.
app_set
.
watch
=
0
;
}
else
{
this
.
app_set
.
watch
=
1
;
}
},
preStep
()
{
...
...
@@ -290,19 +385,98 @@ export default {
nextStep
()
{
this
.
step
++
;
},
getStatus
()
{
let
evtUuid
=
Math
.
random
()
.
toString
(
16
)
.
substr
(
3
);
let
evtSource
=
new
EventSource
(
`/apaas/hubApi/event/subscribe/deploy/
${
evtUuid
}
`
);
this
.
evtUuid
=
evtUuid
;
this
.
evtSource
=
evtSource
;
evtSource
.
addEventListener
(
"
message
"
,
function
(
e
)
{
if
(
this
.
listStatus
.
map
((
o
)
=>
o
.
status
).
indexOf
(
e
.
lastEventId
)
==
-
1
)
{
if
(
this
.
listStatus
.
length
)
{
this
.
listStatus
[
this
.
listStatus
.
length
-
1
].
success
=
"
success
"
;
}
this
.
listStatus
.
push
({
status
:
e
.
lastEventId
,
success
:
JSON
.
parse
(
e
.
data
).
state
,
data
:
JSON
.
parse
(
e
.
data
).
data
,
});
this
.
text
=
this
.
listStatus
[
this
.
listStatus
.
length
-
1
].
data
;
this
.
text
=
"
<span class='linenum'></span>
"
+
this
.
text
;
this
.
text
=
this
.
text
.
replace
(
/
\n
/g
,
"
\n
<span class='linenum'></span>
"
);
this
.
text
=
this
.
text
.
replace
(
/>==>/g
,
"
>>
"
);
this
.
act
=
this
.
listStatus
.
length
-
1
;
}
else
{
let
i
=
this
.
listStatus
.
map
((
o
)
=>
o
.
status
).
indexOf
(
e
.
lastEventId
);
let
item
=
this
.
listStatus
[
i
].
data
;
item
=
item
+
"
\n
"
+
JSON
.
parse
(
e
.
data
).
data
;
this
.
listStatus
[
i
].
data
=
item
;
this
.
text
=
this
.
listStatus
[
this
.
listStatus
.
length
-
1
].
data
;
this
.
text
=
"
<span class='linenum'></span>
"
+
this
.
text
;
this
.
text
=
this
.
text
.
replace
(
/
\n
/g
,
"
\n
<span class='linenum'></span>
"
);
this
.
text
=
this
.
text
.
replace
(
/>==>/g
,
"
>>
"
);
this
.
act
=
this
.
listStatus
.
length
-
1
;
if
(
JSON
.
parse
(
e
.
data
).
state
!=
"
notes
"
)
{
this
.
listStatus
[
i
].
success
=
JSON
.
parse
(
e
.
data
).
state
;
}
}
if
(
JSON
.
parse
(
e
.
data
).
state
==
"
success
"
)
{
this
.
state
=
"
部署成功!
"
;
this
.
url
=
`https://
${
window
.
location
.
host
}
/apaas/ui/#/pods?namespace=
${
this
.
baseInfoForm
.
namespace
}
`
;
}
for
(
let
i
=
0
;
i
<
this
.
listStatus
.
length
;
i
++
)
{
switch
(
this
.
listStatus
[
i
].
status
)
{
case
"
values
"
:
this
.
listStatus
[
i
].
statusHan
=
"
获取部署参数
"
;
break
;
case
"
pull-chart
"
:
this
.
listStatus
[
i
].
statusHan
=
"
拉取部署文件
"
;
break
;
case
"
install
"
:
this
.
listStatus
[
i
].
statusHan
=
"
开始部署
"
;
break
;
case
"
deploy-status
"
:
this
.
listStatus
[
i
].
statusHan
=
"
部署状态
"
;
break
;
default
:
this
.
listStatus
[
i
].
statusHan
=
"
其他
"
;
break
;
}
}
});
},
},
created
()
{
this
.
get_step_info
()
this
.
getStatus
();
this
.
get_step_info
();
},
};
</
script
>
<
style
scoped
>
.openbgc
{
.openbgc
{
width
:
56px
;
height
:
23px
;
background-image
:
url(
'~@/assets/imgs/btn_on_hov.png'
)
;
background-size
:
contain
;
background-image
:
url(
"~@/assets/imgs/btn_on_hov.png"
)
;
background-size
:
contain
;
cursor
:
pointer
;
}
.deployment-container
{
...
...
@@ -320,7 +494,7 @@ export default {
.step_action
.el-button
:not
(
:last-child
)
{
margin-right
:
30px
;
}
.select_box
{
.select_box
{
height
:
35px
;
width
:
80px
;
line-height
:
35px
;
...
...
@@ -333,20 +507,20 @@ export default {
margin-right
:
10px
;
cursor
:
pointer
;
}
.is_select
{
.is_select
{
background-color
:
#515fe7
;
color
:
#f8f9fd
;
}
.limitsd
{
.limitsd
{
position
:
relative
;
}
.deployment-container
.step_form
.el-form-item.limitsd
.timeslect
{
.deployment-container
.step_form
.el-form-item.limitsd
.timeslect
{
position
:
absolute
;
width
:
100px
;
right
:
0
;
top
:
0
;
top
:
0
;
}
.senior_box
{
.senior_box
{
width
:
124px
;
height
:
44px
;
background-color
:
#0f2683
;
...
...
@@ -357,21 +531,21 @@ export default {
text-align
:
center
;
cursor
:
pointer
;
}
</
style
>
<
style
>
.deployment-container
.step_form
.el-form-item
.el-input-group__append
,
.el-input-group__prepend
{
.deployment-container
.step_form
.el-form-item
.el-input-group__append
,
.el-input-group__prepend
{
border-radius
:
0
8px
8px
0
;
}
.limitsd
.timeslect
.el-input__inner
{
.limitsd
.timeslect
.el-input__inner
{
width
:
100px
;
border-radius
:
0
8px
8px
0
;
background-color
:
rgba
(
15
,
38
,
131
,
1
);
color
:
rgba
(
248
,
249
,
253
,
1
);
border
:
0
;
}
.limitsd
.limitinput
.el-input__inner
{
.limitsd
.limitinput
.el-input__inner
{
width
:
860px
;
}
.deployment-container
.avatar-uploader
.el-upload
{
...
...
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