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
1d9982ae
Commit
1d9982ae
authored
Feb 27, 2019
by
智勇
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
配置文件管理
parent
e0c064ae
Changes
8
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
188 additions
and
204 deletions
+188
-204
dev.env.js
config/dev.env.js
+2
-2
proconfig.js
src/api/proconfig.js
+25
-0
proonfig.js
src/api/proonfig.js
+0
-8
user.js
src/store/modules/user.js
+1
-0
auth.js
src/utils/auth.js
+1
-1
request.js
src/utils/request.js
+1
-1
index.vue
src/views/proconfig/index.vue
+156
-192
index.vue
src/views/testdata/index.vue
+2
-0
No files found.
config/dev.env.js
View file @
1d9982ae
module
.
exports
=
{
NODE_ENV
:
'
"development"
'
,
ENV_CONFIG
:
'
"dev"
'
,
QA_API
:
'
"http://1
72.30.220.22
:3003"
'
,
TESTDATA_API
:
'
"http://1
72.30.220.22
:3333"
'
QA_API
:
'
"http://1
27.0.0.1
:3003"
'
,
TESTDATA_API
:
'
"http://1
27.0.0.1
:3333"
'
}
src/api/proconfig.js
0 → 100644
View file @
1d9982ae
import
request
from
'
@/utils/request
'
export
function
getProjects
(
query
)
{
return
request
({
url
:
'
/proconfig/get_project
'
,
method
:
'
get
'
,
params
:
query
})
}
export
function
saveProject
(
data
)
{
return
request
({
url
:
'
/proconfig/save
'
,
method
:
'
post
'
,
data
})
}
export
function
deleteProject
(
query
)
{
return
request
({
url
:
'
/proconfig/delete
'
,
method
:
'
get
'
,
params
:
query
})
}
src/api/proonfig.js
deleted
100644 → 0
View file @
e0c064ae
import
request
from
'
@/utils/request
'
export
function
getIndexUrl
()
{
return
request
({
url
:
'
/proconfig/get_project_by_type
'
,
method
:
'
get
'
})
}
src/store/modules/user.js
View file @
1d9982ae
...
...
@@ -51,6 +51,7 @@ const user = {
loginByUsername
(
username
,
userInfo
.
password
).
then
(
response
=>
{
const
data
=
response
.
data
commit
(
'
SET_TOKEN
'
,
data
.
token
)
// setToken('14d64dde-13d6-4af3-8654-31d4100eb616')
setToken
(
response
.
data
.
token
)
resolve
()
}).
catch
(
error
=>
{
...
...
src/utils/auth.js
View file @
1d9982ae
import
Cookies
from
'
js-cookie
'
const
TokenKey
=
'
Admin-T
oken
'
const
TokenKey
=
'
qa-t
oken
'
export
function
getToken
()
{
return
Cookies
.
get
(
TokenKey
)
...
...
src/utils/request.js
View file @
1d9982ae
...
...
@@ -15,7 +15,7 @@ service.interceptors.request.use(
// Do something before request is sent
if
(
store
.
getters
.
token
)
{
// 让每个请求携带token-- ['X-Token']为自定义key 请根据实际情况自行修改
config
.
headers
[
'
X-T
oken
'
]
=
getToken
()
config
.
headers
[
'
x-t
oken
'
]
=
getToken
()
}
return
config
},
...
...
src/views/proconfig/index.vue
View file @
1d9982ae
<
template
>
<div
class=
"app-container"
>
<div
class=
"filter-container"
>
<el-input
:placeholder=
"$t('table.title')"
v-model=
"listQuery.title"
style=
"width: 200px;"
class=
"filter-item"
@
keyup.enter.native=
"handleFilter"
/>
<el-select
v-model=
"listQuery.importance"
:placeholder=
"$t('table.importance')"
clearable
style=
"width: 90px"
class=
"filter-item"
>
<el-option
v-for=
"item in importanceOptions"
:key=
"item"
:label=
"item"
:value=
"item"
/>
</el-select>
<el-select
v-model=
"listQuery.type"
:placeholder=
"$t('table.type')"
clearable
class=
"filter-item"
style=
"width: 130px"
>
<el-option
v-for=
"item in calendarTypeOptions"
:key=
"item.key"
:label=
"item.display_name+'('+item.key+')'"
:value=
"item.key"
/>
<el-input
v-model=
"listQuery.project_name"
placeholder=
"项目名称"
clearable
style=
"width: 200px;"
class=
"filter-item"
@
keyup.enter.native=
"handleFilter"
/>
<el-select
v-model=
"listQuery.type"
placeholder=
"项目类型"
clearable
style=
"width: 200px"
class=
"filter-item"
>
<el-option
v-for=
"item in typeOptions"
:key=
"item.key"
:label=
"item.display_name"
:value=
"item.key"
/>
</el-select>
<el-select
v-model=
"listQuery.sort"
style=
"width: 140px"
class=
"filter-item"
@
change=
"handleFilter"
>
<el-option
v-for=
"item in sortOptions"
:key=
"item.key"
:label=
"item.label"
:value=
"item.key"
/>
</el-select>
<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"
style=
"margin-left: 10px;"
type=
"primary"
icon=
"el-icon-edit"
@
click=
"handleCreate"
>
{{
$t
(
'
table.add
'
)
}}
</el-button>
<el-button
v-waves
:loading=
"downloadLoading"
class=
"filter-item"
type=
"primary"
icon=
"el-icon-download"
@
click=
"handleDownload"
>
{{
$t
(
'
table.export
'
)
}}
</el-button>
<el-checkbox
v-model=
"showReviewer"
class=
"filter-item"
style=
"margin-left:15px;"
@
change=
"tableKey=tableKey+1"
>
{{
$t
(
'
table.reviewer
'
)
}}
</el-checkbox>
<el-button
class=
"filter-item"
style=
"margin-left: 10px;"
type=
"primary"
icon=
"el-icon-edit"
@
click=
"handleCreate"
>
添加
</el-button>
</div>
<el-table
v-loading=
"listLoading"
:key=
"tableKey"
:data=
"list"
:data=
"proconfigs"
border
fit
highlight-current-row
style=
"width: 100%;"
@
sort-change=
"sortChange"
>
<el-table-column
:label=
"$t('table.id')"
prop=
"id"
sortable=
"custom"
align=
"center"
width=
"65"
>
<template
slot-scope=
"scope"
>
<span>
{{
scope
.
row
.
id
}}
</span>
</
template
>
</el-table-column>
<el-table-column
:label=
"$t('table.date')"
width=
"150px"
align=
"center"
>
<el-table-column
:label=
"$t('table.id')"
prop=
"id"
align=
"center"
width=
"65"
>
<template
slot-scope=
"scope"
>
<span>
{{
scope
.
row
.
timestamp
|
parseTime
(
'
{y
}
-{m
}
-{d
}
{h
}
:{i
}
'
)
}}
<
/span
>
<span>
{{
scope
.
$index
+
1
}}
</span>
</
template
>
</el-table-column>
<
el
-
table
-
column
:
label
=
"
$t('table.title')
"
min
-
width
=
"
150px
"
>
<el-table-column
label=
"服务名称"
prop=
"project_name"
sortable=
"custom"
align=
"center
"
>
<
template
slot-scope=
"scope"
>
<
span
class
=
"
link-type
"
@
click
=
"
handleUpdate(scope.row)
"
>
{{
scope
.
row
.
title
}}
<
/span
>
<
el
-
tag
>
{{
scope
.
row
.
type
|
typeFilter
}}
<
/el-tag
>
<span
class=
"link-type"
@
click=
"handleUpdate(scope.row)"
>
{{
scope
.
row
.
project_name
}}
</span>
</
template
>
</el-table-column>
<
el
-
table
-
column
:
label
=
"
$t('table.author')
"
width
=
"
110px
"
align
=
"
center
"
>
<el-table-column
label=
"服务描述
"
align=
"center"
>
<
template
slot-scope=
"scope"
>
<
span
>
{{
scope
.
row
.
author
}}
<
/span
>
<span>
{{
scope
.
row
.
des
}}
</span>
</
template
>
</el-table-column>
<
el
-
table
-
column
v
-
if
=
"
showReviewer
"
:
label
=
"
$t('table.reviewer')
"
width
=
"
110px
"
align
=
"
center
"
>
<el-table-column
label=
"线上域名
"
align=
"center"
>
<
template
slot-scope=
"scope"
>
<
span
style
=
"
color:red;
"
>
{{
scope
.
row
.
reviewer
}}
<
/span
>
<span
>
{{
scope
.
row
.
host_name
}}
</span>
</
template
>
</el-table-column>
<
el
-
table
-
column
:
label
=
"
$t('table.importance')
"
width
=
"
80px
"
>
<el-table-column
label=
"Git地址"
align=
"center
"
>
<
template
slot-scope=
"scope"
>
<
s
vg
-
icon
v
-
for
=
"
n in +scope.row.importance
"
:
key
=
"
n
"
icon
-
class
=
"
star
"
class
=
"
meta-item__icon
"
/
>
<s
pan>
{{
scope
.
row
.
git_path
}}
</span
>
</
template
>
</el-table-column>
<
el
-
table
-
column
:
label
=
"
$t('table.readings')
"
align
=
"
center
"
width
=
"
95
"
>
<el-table-column
label=
"负责人"
width=
"80px"
align=
"center
"
>
<
template
slot-scope=
"scope"
>
<
span
v
-
if
=
"
scope.row.pageviews
"
class
=
"
link-type
"
@
click
=
"
handleFetchPv(scope.row.pageviews)
"
>
{{
scope
.
row
.
pageviews
}}
<
/span
>
<
span
v
-
else
>
0
<
/span
>
<span>
{{
scope
.
row
.
auth
}}
</span>
</
template
>
</el-table-column>
<
el
-
table
-
column
:
label
=
"
$t('table.status')
"
class
-
name
=
"
status-col
"
width
=
"
100
"
>
<el-table-column
label=
"状态"
width=
"90px"
align=
"center
"
>
<
template
slot-scope=
"scope"
>
<
el
-
tag
:
type
=
"
scope.row.
status | statusFilter
"
>
{{
scope
.
row
.
status
}}
<
/el-tag
>
<el-tag
:type=
"scope.row.
is_active | statusFilter"
>
{{
scope
.
row
.
is_active
|
activeFileter
}}
</el-tag>
</
template
>
</el-table-column>
<
el
-
table
-
column
:
label
=
"
$t('table.actions')
"
align
=
"
center
"
width
=
"
23
0
"
class
-
name
=
"
small-padding fixed-width
"
>
<el-table-column
:label=
"$t('table.actions')"
align=
"center"
width=
"
18
0"
class-name=
"small-padding fixed-width"
>
<
template
slot-scope=
"scope"
>
<el-button
type=
"primary"
size=
"mini"
@
click=
"handleUpdate(scope.row)"
>
{{
$t
(
'
table.edit
'
)
}}
</el-button>
<
el
-
button
v
-
if
=
"
scope.row.status!='published'
"
size
=
"
mini
"
type
=
"
success
"
@
click
=
"
handleModifyStatus(scope.row,'published')
"
>
{{
$t
(
'
table.publish
'
)
}}
<
/el-button
>
<
el
-
button
v
-
if
=
"
scope.row.status!='draft'
"
size
=
"
mini
"
@
click
=
"
handleModifyStatus(scope.row,'draft')
"
>
{{
$t
(
'
table.draft
'
)
}}
<
/el-button
>
<
el
-
button
v
-
if
=
"
scope.row.status!='deleted'
"
size
=
"
mini
"
type
=
"
danger
"
@
click
=
"
handleModifyStatus(scope.row,'deleted')
"
>
{{
$t
(
'
table.delete
'
)
}}
<el-button
v-if=
"scope.row.status!='deleted'"
size=
"mini"
type=
"danger"
@
click=
"handleDelete(scope.row)"
>
{{
$t
(
'
table.delete
'
)
}}
</el-button>
</
template
>
</el-table-column>
</el-table>
<
pagination
v
-
show
=
"
total>0
"
:
total
=
"
total
"
:
page
.
sync
=
"
listQuery.page
"
:
limit
.
sync
=
"
listQuery.limit
"
@
pagination
=
"
getList
"
/
>
<
!-- <pagination v-show="total>0" :total="total" :page.sync="listQuery.page" :limit.sync="listQuery.limit" @pagination="getList" /> --
>
<el-dialog
:title=
"textMap[dialogStatus]"
:visible.sync=
"dialogFormVisible"
>
<el-form
ref=
"dataForm"
:rules=
"rules"
:model=
"temp"
label-position=
"left"
label-width=
"70px"
style=
"width: 400px; margin-left:50px;"
>
<
el
-
form
-
item
:
label
=
"
$t('table.type')
"
prop
=
"
type
"
>
<el-form-item
label=
"类型
"
prop=
"type"
>
<el-select
v-model=
"temp.type"
class=
"filter-item"
placeholder=
"Please select"
>
<
el
-
option
v
-
for
=
"
item in
calendarT
ypeOptions
"
:
key
=
"
item.key
"
:
label
=
"
item.display_name
"
:
value
=
"
item.key
"
/>
<el-option
v-for=
"item in
t
ypeOptions"
:key=
"item.key"
:label=
"item.display_name"
:value=
"item.key"
/>
</el-select>
</el-form-item>
<
el
-
form
-
item
:
label
=
"
$t('table.date')
"
prop
=
"
timestamp
"
>
<
el
-
date
-
picker
v
-
model
=
"
temp.timestamp
"
type
=
"
datetime
"
placeholder
=
"
Please pick a date
"
/>
<
/el-form-item
>
<
el
-
form
-
item
:
label
=
"
$t('table.title')
"
prop
=
"
title
"
>
<
el
-
input
v
-
model
=
"
temp.title
"
/>
<el-form-item
label=
"Git地址"
prop=
"git_path"
>
<el-input
v-model=
"temp.git_path"
/>
</el-form-item>
<
el
-
form
-
item
:
label
=
"
$t('table.status')
"
>
<
el
-
select
v
-
model
=
"
temp.
status
"
class
=
"
filter-item
"
placeholder
=
"
Please select
"
>
<
el
-
option
v
-
for
=
"
item in
statusOptions
"
:
key
=
"
item
"
:
label
=
"
item
"
:
value
=
"
item
"
/>
<el-form-item
label=
"是否激活
"
>
<el-select
v-model=
"temp.
is_active
"
class=
"filter-item"
placeholder=
"Please select"
>
<el-option
v-for=
"item in
avtiveOptions"
:key=
"item.key"
:label=
"item.display_name"
:value=
"item.key
"
/>
</el-select>
</el-form-item>
<
el
-
form
-
item
:
label
=
"
$t('table.importance')
"
>
<
el
-
rate
v
-
model
=
"
temp.importance
"
:
colors
=
"
['#99A9BF', '#F7BA2A', '#FF9900']
"
:
max
=
"
3
"
style
=
"
margin-top:8px;
"
/>
<el-form-item
label=
"项目描述"
>
<el-input
:autosize=
"{ minRows: 2, maxRows: 4}"
v-model=
"temp.des"
type=
"textarea"
placeholder=
"Please input"
/>
</el-form-item>
<el-form-item
label=
"线上域名"
prop=
"host_name"
>
<el-input
v-model=
"temp.host_name"
/>
</el-form-item>
<el-form-item
label=
"负责人"
prop=
"auth"
>
<el-input
v-model=
"temp.auth"
/>
</el-form-item>
<el-form-item
label=
"配置文件路径"
prop=
"config_path"
>
<el-input
v-model=
"temp.config_path"
/>
</el-form-item>
<el-form-item
label=
"Build文件路径"
prop=
"jar_path"
>
<el-input
v-model=
"temp.jar_path"
/>
</el-form-item>
<el-form-item
label=
"日志路径"
prop=
"log_path"
>
<el-input
v-model=
"temp.log_path"
/>
</el-form-item>
<el-form-item
label=
"部署命令"
prop=
"build_command"
>
<el-input
v-model=
"temp.build_command"
/>
</el-form-item>
<
el
-
form
-
item
:
label
=
"
$t('table.remark')
"
>
<
el
-
input
:
autosize
=
"
{ minRows: 2, maxRows: 4
}
"
v
-
model
=
"
temp.remark
"
type
=
"
textarea
"
placeholder
=
"
Please input
"
/>
<el-form-item
label=
"启动命令"
prop=
"start_command"
>
<el-input
:autosize=
"{ minRows: 2, maxRows: 4}"
v-model=
"temp.start_command"
type=
"textarea"
/>
</el-form-item>
<el-form-item
label=
"关闭命令"
prop=
"stop_command"
>
<el-input
v-model=
"temp.stop_command"
/>
</el-form-item>
</el-form>
<div
slot=
"footer"
class=
"dialog-footer"
>
<el-button
@
click=
"dialogFormVisible = false"
>
{{ $t('table.cancel') }}
</el-button>
<
el
-
button
type
=
"
primary
"
@
click
=
"
dialogStatus==='create'?createData():updateData()
"
>
{{
$t
(
'
table.confirm
'
)
}}
<
/el-button
>
<el-button
type=
"primary"
@
click=
"createData()"
>
{{ $t('table.confirm') }}
</el-button>
<!-- <el-button type="primary" @click="dialogStatus==='create'?createData():updateData()">{{ $t('table.confirm') }}</el-button> -->
</div>
</el-dialog>
<
el
-
dialog
:
visible
.
sync
=
"
dialogPvVisible
"
title
=
"
Reading statistics
"
>
<
el
-
table
:
data
=
"
pvData
"
border
fit
highlight
-
current
-
row
style
=
"
width: 100%
"
>
<
el
-
table
-
column
prop
=
"
key
"
label
=
"
Channel
"
/>
<
el
-
table
-
column
prop
=
"
pv
"
label
=
"
Pv
"
/>
<
/el-table
>
<el-dialog
:visible.sync=
"dialogDeleteVisible"
:data=
"temp"
title=
"Delete"
>
<span
>
确定要删除{{ temp.project_name }}吗?
</span>
<span
slot=
"footer"
class=
"dialog-footer"
>
<
el
-
button
type
=
"
primary
"
@
click
=
"
dialogPvVisible = false
"
>
{{
$t
(
'
table.confirm
'
)
}}
<
/el-button
>
<el-button
@
click=
"dialogDeleteVisible = false"
>
{{ $t('table.cancel') }}
</el-button>
<el-button
type=
"primary"
@
click=
"deleteData()"
>
{{ $t('table.confirm') }}
</el-button>
</span>
</el-dialog>
...
...
@@ -128,20 +130,29 @@
</template>
<
script
>
import
{
fetchList
,
fetchPv
,
createArticle
,
updateArticle
}
from
'
@/api/article
'
import
{
getProjects
,
saveProject
,
deleteProject
}
from
'
@/api/proconfig
'
import
waves
from
'
@/directive/waves
'
// Waves directive
import
{
parseTime
}
from
'
@/utils
'
import
Pagination
from
'
@/components/Pagination
'
// Secondary package based on el-pagination
const
calendarT
ypeOptions
=
[
{
key
:
'
CN
'
,
display_name
:
'
Chin
a
'
}
,
{
key
:
'
US
'
,
display_name
:
'
USA
'
}
,
{
key
:
'
JP
'
,
display_name
:
'
Japan
'
}
,
{
key
:
'
EU
'
,
display_name
:
'
Eurozone
'
}
const
t
ypeOptions
=
[
{
key
:
'
java
'
,
display_name
:
'
Jav
a
'
},
{
key
:
'
ui
'
,
display_name
:
'
UI
'
},
{
key
:
'
node
'
,
display_name
:
'
Nodejs
'
},
{
key
:
'
python
'
,
display_name
:
'
Python
'
}
]
// arr to obj ,such as { CN : "China", US : "USA" }
const
calendarTypeKeyValue
=
calendarTypeOptions
.
reduce
((
acc
,
cur
)
=>
{
const
calendarTypeKeyValue
=
typeOptions
.
reduce
((
acc
,
cur
)
=>
{
acc
[
cur
.
key
]
=
cur
.
display_name
return
acc
},
{})
const
avtiveOptions
=
[
{
key
:
true
,
display_name
:
'
服役中
'
},
{
key
:
false
,
display_name
:
'
退役了
'
}
]
const
calendarActiveKeyValue
=
avtiveOptions
.
reduce
((
acc
,
cur
)
=>
{
acc
[
cur
.
key
]
=
cur
.
display_name
return
acc
},
{})
...
...
@@ -153,110 +164,104 @@ export default {
filters
:
{
statusFilter
(
status
)
{
const
statusMap
=
{
published
:
'
success
'
,
draft
:
'
info
'
,
deleted
:
'
danger
'
true
:
'
success
'
,
false
:
'
danger
'
}
return
statusMap
[
status
]
},
typeFilter
(
type
)
{
return
calendarTypeKeyValue
[
type
]
},
activeFileter
(
status
)
{
return
calendarActiveKeyValue
[
status
]
}
},
data
()
{
return
{
tableKey
:
10
,
list
:
null
,
total
:
0
,
listLoading
:
true
,
listQuery
:
{
page
:
1
,
limit
:
20
,
importance
:
undefined
,
title
:
undefined
,
project_name
:
undefined
,
type
:
undefined
,
sort
:
'
+
id
'
sort
:
'
+
project_name
'
},
importanceOptions
:
[
1
,
2
,
3
],
calendarTypeOptions
,
sortOptions
:
[{
label
:
'
ID Ascending
'
,
key
:
'
+id
'
}
,
{
label
:
'
ID Descending
'
,
key
:
'
-id
'
}
],
statusOptions
:
[
'
published
'
,
'
draft
'
,
'
deleted
'
],
showReviewer
:
false
,
typeOptions
,
sortOptions
:
[{
label
:
'
项目名升序
'
,
key
:
'
+project_name
'
},
{
label
:
'
项目名降序
'
,
key
:
'
-project_name
'
}],
temp
:
{
id
:
undefined
,
importance
:
1
,
remark
:
''
,
timestamp
:
new
Date
(),
title
:
''
,
type
:
''
,
status
:
'
published
'
},
dialogFormVisible
:
false
,
dialogDeleteVisible
:
false
,
dialogStatus
:
''
,
textMap
:
{
update
:
'
Edit
'
,
create
:
'
Create
'
},
dialogPvVisible
:
false
,
pvData
:
[],
rules
:
{
type
:
[{
required
:
true
,
message
:
'
type is required
'
,
trigger
:
'
change
'
}
],
timestamp
:
[{
type
:
'
date
'
,
required
:
true
,
message
:
'
timestamp is required
'
,
trigger
:
'
change
'
}
],
title
:
[{
required
:
true
,
message
:
'
title is required
'
,
trigger
:
'
blur
'
}
]
//
type: [{ required: true, message: 'type is required', trigger: 'change' }],
//
timestamp: [{ type: 'date', required: true, message: 'timestamp is required', trigger: 'change' }],
//
title: [{ required: true, message: 'title is required', trigger: 'blur' }]
},
downloadLoading
:
false
proconfigs
:
[],
avtiveOptions
}
},
created
()
{
this
.
get
List
()
this
.
get
Projects
()
},
methods
:
{
getList
()
{
this
.
listLoading
=
true
fetchList
(
this
.
listQuery
).
then
(
response
=>
{
this
.
list
=
response
.
data
.
items
this
.
total
=
response
.
data
.
total
// Just to simulate the time of the request
setTimeout
(()
=>
{
this
.
listLoading
=
false
}
,
1.5
*
1000
)
getProjects
()
{
for
(
const
prop
in
this
.
listQuery
)
{
if
(
this
.
listQuery
[
prop
]
===
''
)
{
delete
this
.
listQuery
[
prop
]
}
}
getProjects
(
this
.
listQuery
).
then
(
res
=>
{
this
.
proconfigs
=
res
.
data
.
data
this
.
listLoading
=
false
})
setTimeout
(()
=>
{
this
.
listLoading
=
false
},
0.5
*
1000
)
},
handleFilter
()
{
this
.
listQuery
.
page
=
1
this
.
getList
()
}
,
handleModifyStatus
(
row
,
status
)
{
this
.
$message
({
message
:
'
操作成功
'
,
type
:
'
success
'
}
)
row
.
status
=
status
this
.
getProjects
()
},
sortChange
(
data
)
{
const
{
prop
,
order
}
=
data
if
(
prop
===
'
id
'
)
{
this
.
sortBy
ID
(
order
)
if
(
prop
===
'
project_name
'
)
{
this
.
sortBy
Name
(
order
)
}
},
sortBy
ID
(
order
)
{
sortBy
Name
(
order
)
{
if
(
order
===
'
ascending
'
)
{
this
.
listQuery
.
sort
=
'
+
id
'
this
.
listQuery
.
sort
=
'
+
project_name
'
}
else
{
this
.
listQuery
.
sort
=
'
-
id
'
this
.
listQuery
.
sort
=
'
-
project_name
'
}
this
.
handleFilter
()
},
resetTemp
()
{
this
.
temp
=
{
id
:
undefined
,
importance
:
1
,
remark
:
''
,
timestamp
:
new
Date
(),
title
:
''
,
status
:
'
published
'
,
type
:
''
port
:
''
,
is_active
:
undefined
,
type
:
''
,
project_name
:
''
,
git_path
:
''
,
host_name
:
''
,
log_path
:
''
,
config_path
:
''
,
des
:
''
,
auth
:
''
,
jar_path
:
''
,
command1
:
''
,
command2
:
''
,
command3
:
''
,
command4
:
''
,
command5
:
''
,
build_command
:
''
,
start_command
:
''
,
stop_command
:
''
}
},
handleCreate
()
{
...
...
@@ -270,93 +275,52 @@ export default {
createData
()
{
this
.
$refs
[
'
dataForm
'
].
validate
((
valid
)
=>
{
if
(
valid
)
{
this
.
temp
.
id
=
parseInt
(
Math
.
random
()
*
100
)
+
1024
// mock a id
this
.
temp
.
author
=
'
vue-element-admin
'
createArticle
(
this
.
temp
).
then
(()
=>
{
this
.
list
.
unshift
(
this
.
temp
)
saveProject
(
this
.
temp
).
then
(()
=>
{
// this.proconfigs.unshift(this.temp)
this
.
dialogFormVisible
=
false
this
.
$notify
({
title
:
'
成功
'
,
message
:
'
创建
成功
'
,
message
:
'
保存
成功
'
,
type
:
'
success
'
,
duration
:
2000
})
this
.
getProjects
()
})
}
})
},
handleUpdate
(
row
)
{
this
.
temp
=
Object
.
assign
({},
row
)
// copy obj
this
.
temp
.
timestamp
=
new
Date
(
this
.
temp
.
timestamp
)
this
.
dialogStatus
=
'
update
'
this
.
dialogFormVisible
=
true
this
.
$nextTick
(()
=>
{
this
.
$refs
[
'
dataForm
'
].
clearValidate
()
})
},
updateData
()
{
this
.
$refs
[
'
dataForm
'
].
validate
((
valid
)
=>
{
if
(
valid
)
{
const
tempData
=
Object
.
assign
({
}
,
this
.
temp
)
tempData
.
timestamp
=
+
new
Date
(
tempData
.
timestamp
)
// change Thu Nov 30 2017 16:41:05 GMT+0800 (CST) to 1512031311464
updateArticle
(
tempData
).
then
(()
=>
{
for
(
const
v
of
this
.
list
)
{
if
(
v
.
id
===
this
.
temp
.
id
)
{
const
index
=
this
.
list
.
indexOf
(
v
)
this
.
list
.
splice
(
index
,
1
,
this
.
temp
)
break
}
}
this
.
dialogFormVisible
=
false
this
.
$notify
({
title
:
'
成功
'
,
message
:
'
更新成功
'
,
type
:
'
success
'
,
duration
:
2000
}
)
}
)
}
}
)
}
,
handleDelete
(
row
)
{
this
.
$notify
({
title
:
'
成功
'
,
message
:
'
删除成功
'
,
type
:
'
success
'
,
duration
:
2000
}
)
const
index
=
this
.
list
.
indexOf
(
row
)
this
.
list
.
splice
(
index
,
1
)
}
,
handleFetchPv
(
pv
)
{
fetchPv
(
pv
).
then
(
response
=>
{
this
.
pvData
=
response
.
data
.
pvData
this
.
dialogPvVisible
=
true
}
)
this
.
temp
=
row
this
.
dialogDeleteVisible
=
true
},
handleDownload
()
{
this
.
downloadLoading
=
true
import
(
'
@/vendor/Export2Excel
'
).
then
(
excel
=>
{
const
tHeader
=
[
'
timestamp
'
,
'
title
'
,
'
type
'
,
'
importance
'
,
'
status
'
]
const
filterVal
=
[
'
timestamp
'
,
'
title
'
,
'
type
'
,
'
importance
'
,
'
status
'
]
const
data
=
this
.
formatJson
(
filterVal
,
this
.
list
)
excel
.
export_json_to_excel
({
header
:
tHeader
,
data
,
filename
:
'
table-list
'
deleteData
()
{
deleteProject
({
'
_id
'
:
this
.
temp
.
_id
}).
then
(()
=>
{
this
.
dialogDeleteVisible
=
false
this
.
$notify
({
title
:
'
成功
'
,
message
:
'
删除成功
'
,
type
:
'
success
'
,
duration
:
2000
})
this
.
downloadLoading
=
false
this
.
getProjects
()
})
}
,
formatJson
(
filterVal
,
jsonData
)
{
return
jsonData
.
map
(
v
=>
filterVal
.
map
(
j
=>
{
if
(
j
===
'
timestamp
'
)
{
return
parseTime
(
v
[
j
])
}
else
{
return
v
[
j
]
}
}
))
}
}
}
</
script
>
<
style
scoped
>
.el-form-item
{
width
:
600px
;
}
</
style
>
src/views/testdata/index.vue
View file @
1d9982ae
...
...
@@ -75,11 +75,13 @@
<
script
>
import
{
getAll
,
getBankList
,
getProvinceList
}
from
'
@/api/testdata
'
import
waves
from
'
@/directive/waves
'
// Waves directive
import
Pagination
from
'
@/components/Pagination
'
// Secondary package based on el-pagination
export
default
{
name
:
'
ComplexTable
'
,
components
:
{
Pagination
},
directives
:
{
waves
},
data
()
{
return
{
tableKey
:
0
,
...
...
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