Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
VueElementTemplate
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
JIRA
JIRA
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
黄瑜
VueElementTemplate
Commits
38192b82
Commit
38192b82
authored
Nov 30, 2017
by
Pan
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
perf:refine complexTable demo
parent
72f653dc
Changes
4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
121 additions
and
99 deletions
+121
-99
article.js
src/api/article.js
+15
-0
article.js
src/mock/article.js
+6
-0
index.js
src/mock/index.js
+2
-0
complexTable.vue
src/views/example/table/complexTable.vue
+98
-99
No files found.
src/api/article.js
View file @
38192b82
...
...
@@ -23,3 +23,18 @@ export function fetchPv(pv) {
})
}
export
function
createArticle
(
data
)
{
return
request
({
url
:
'/article/create'
,
method
:
'post'
,
data
})
}
export
function
updateArticle
(
data
)
{
return
request
({
url
:
'/article/update'
,
method
:
'post'
,
data
})
}
src/mock/article.js
View file @
38192b82
...
...
@@ -60,5 +60,11 @@ export default {
status
:
'published'
,
tags
:
[],
title
:
'vue-element-admin'
}),
createArticle
:
()
=>
({
data
:
'success'
}),
updateArticle
:
()
=>
({
data
:
'success'
})
}
src/mock/index.js
View file @
38192b82
...
...
@@ -17,6 +17,8 @@ Mock.mock(/\/user\/info\.*/, 'get', loginAPI.getUserInfo)
Mock
.
mock
(
/
\/
article
\/
list/
,
'get'
,
articleAPI
.
getList
)
Mock
.
mock
(
/
\/
article
\/
detail/
,
'get'
,
articleAPI
.
getArticle
)
Mock
.
mock
(
/
\/
article
\/
pv/
,
'get'
,
articleAPI
.
getPv
)
Mock
.
mock
(
/
\/
article
\/
create/
,
'post'
,
articleAPI
.
createArticle
)
Mock
.
mock
(
/
\/
article
\/
update/
,
'post'
,
articleAPI
.
updateArticle
)
// 搜索相关
Mock
.
mock
(
/
\/
search
\/
user/
,
'get'
,
remoteSearchAPI
.
searchUser
)
...
...
src/views/example/table/complexTable.vue
View file @
38192b82
...
...
@@ -3,90 +3,79 @@
<div
class=
"filter-container"
>
<el-input
@
keyup
.
enter
.
native=
"handleFilter"
style=
"width: 200px;"
class=
"filter-item"
placeholder=
"标题"
v-model=
"listQuery.title"
>
</el-input>
<el-select
clearable
style=
"width: 90px"
class=
"filter-item"
v-model=
"listQuery.importance"
placeholder=
"重要性"
>
<el-option
v-for=
"item in importanceOptions"
:key=
"item"
:label=
"item"
:value=
"item"
>
</el-option>
</el-select>
<el-select
clearable
class=
"filter-item"
style=
"width: 130px"
v-model=
"listQuery.type"
placeholder=
"类型"
>
<el-option
v-for=
"item in calendarTypeOptions"
:key=
"item.key"
:label=
"item.display_name+'('+item.key+')'"
:value=
"item.key"
>
</el-option>
</el-select>
<el-select
@
change=
'handleFilter'
style=
"width: 120px"
class=
"filter-item"
v-model=
"listQuery.sort"
placeholder=
"排序"
>
<el-option
v-for=
"item in sortOptions"
:key=
"item.key"
:label=
"item.label"
:value=
"item.key"
>
</el-option>
</el-select>
<el-button
class=
"filter-item"
type=
"primary"
v-waves
icon=
"el-icon-search"
@
click=
"handleFilter"
>
搜索
</el-button>
<el-button
class=
"filter-item"
style=
"margin-left: 10px;"
@
click=
"handleCreate"
type=
"primary"
icon=
"el-icon-edit"
>
添加
</el-button>
<el-button
class=
"filter-item"
type=
"primary"
icon=
"el-icon-download"
@
click=
"handleDownload"
>
导出
</el-button>
<el-button
class=
"filter-item"
type=
"primary"
v-waves
icon=
"el-icon-download"
@
click=
"handleDownload"
>
导出
</el-button>
<el-checkbox
class=
"filter-item"
style=
'margin-left:15px;'
@
change=
'tableKey=tableKey+1'
v-model=
"showAuditor"
>
显示审核人
</el-checkbox>
</div>
<el-table
:key=
'tableKey'
:data=
"list"
v-loading=
"listLoading"
element-loading-text=
"给我一点时间"
border
fit
highlight-current-row
style=
"width: 100%"
>
<el-table
:key=
'tableKey'
:data=
"list"
v-loading=
"listLoading"
element-loading-text=
"给我一点时间"
border
fit
highlight-current-row
style=
"width: 100%"
>
<el-table-column
align=
"center"
label=
"序号"
width=
"65"
>
<template
slot-scope=
"scope"
>
<span>
{{
scope
.
row
.
id
}}
</span>
</
template
>
</el-table-column>
<el-table-column
width=
"180px"
align=
"center"
label=
"时间"
>
<
template
slot-scope=
"scope"
>
<span>
{{
scope
.
row
.
timestamp
|
parseTime
(
'{y
}
-{m
}
-{d
}
{h
}
:{i
}
'
)
}}
<
/span
>
<
/template
>
<
/el-table-column
>
<
el
-
table
-
column
min
-
width
=
"150px"
label
=
"标题"
>
<
template
slot
-
scope
=
"scope"
>
<
span
class
=
"link-type"
@
click
=
"handleUpdate(scope.row)"
>
{{
scope
.
row
.
title
}}
<
/span
>
<
el
-
tag
>
{{
scope
.
row
.
type
|
typeFilter
}}
<
/el-tag
>
<
/template
>
<
/el-table-column
>
<
el
-
table
-
column
width
=
"110px"
align
=
"center"
label
=
"作者"
>
<
template
slot
-
scope
=
"scope"
>
<
span
>
{{
scope
.
row
.
author
}}
<
/span
>
<
/template
>
<
/el-table-column
>
<
el
-
table
-
column
width
=
"110px"
v
-
if
=
'showAuditor'
align
=
"center"
label
=
"审核人"
>
<
template
slot
-
scope
=
"scope"
>
<
span
style
=
'color:red;'
>
{{
scope
.
row
.
auditor
}}
<
/span
>
<
/template
>
<
/el-table-column
>
<
el
-
table
-
column
width
=
"80px"
label
=
"重要性"
>
<
template
slot
-
scope
=
"scope"
>
<
svg
-
icon
v
-
for
=
"n in +scope.row.importance"
icon
-
class
=
"star"
class
=
"meta-item__icon"
:
key
=
"n"
><
/svg-icon
>
<
/template
>
<
/el-table-column
>
<
el
-
table
-
column
align
=
"center"
label
=
"阅读数"
width
=
"95"
>
<
template
slot
-
scope
=
"scope"
>
<
span
class
=
"link-type"
@
click
=
'handleFetchPv(scope.row.pageviews)'
>
{{
scope
.
row
.
pageviews
}}
<
/span
>
<
span
v
-
if
=
"scope.row.pageviews"
class
=
"link-type"
@
click
=
'handleFetchPv(scope.row.pageviews)'
>
{{
scope
.
row
.
pageviews
}}
<
/span
>
<
span
v
-
else
>
无
<
/span
>
<
/template
>
<
/el-table-column
>
<
el
-
table
-
column
class
-
name
=
"status-col"
label
=
"状态"
width
=
"100"
>
<
template
slot
-
scope
=
"scope"
>
<
el
-
tag
:
type
=
"scope.row.status | statusFilter"
>
{{
scope
.
row
.
status
}}
<
/el-tag
>
<
/template
>
<
/el-table-column
>
<
el
-
table
-
column
align
=
"center"
label
=
"操作"
width
=
"150"
>
<
el
-
table
-
column
align
=
"center"
label
=
"操作"
width
=
"220"
class
-
name
=
"small-padding"
>
<
template
slot
-
scope
=
"scope"
>
<
el
-
button
v
-
if
=
"scope.row.status!='published'"
size
=
"small"
type
=
"success"
@
click
=
"handleModifyStatus(scope.row,'published')"
>
发布
<
el
-
button
type
=
"primary"
size
=
"mini"
@
click
=
"handleUpdate(scope.row)"
>
编辑
<
/el-button
>
<
el
-
button
v
-
if
=
"scope.row.status!='published'"
size
=
"mini"
type
=
"success"
@
click
=
"handleModifyStatus(scope.row,'published')"
>
发布
<
/el-button
>
<
el
-
button
v
-
if
=
"scope.row.status!='draft'"
size
=
"
small
"
@
click
=
"handleModifyStatus(scope.row,'draft')"
>
草稿
<
el
-
button
v
-
if
=
"scope.row.status!='draft'"
size
=
"
mini
"
@
click
=
"handleModifyStatus(scope.row,'draft')"
>
草稿
<
/el-button
>
<
el
-
button
v
-
if
=
"scope.row.status!='deleted'"
size
=
"
small
"
type
=
"danger"
@
click
=
"handleModifyStatus(scope.row,'deleted')"
>
删除
<
el
-
button
v
-
if
=
"scope.row.status!='deleted'"
size
=
"
mini
"
type
=
"danger"
@
click
=
"handleModifyStatus(scope.row,'deleted')"
>
删除
<
/el-button
>
<
/template
>
<
/el-table-column
>
<
/el-table
>
<
div
v
-
show
=
"!listLoading"
class
=
"pagination-container"
>
...
...
@@ -96,34 +85,29 @@
<
/div
>
<
el
-
dialog
:
title
=
"textMap[dialogStatus]"
:
visible
.
sync
=
"dialogFormVisible"
>
<
el
-
form
class
=
"small-space
"
:
model
=
"temp"
label
-
position
=
"left"
label
-
width
=
"70px"
style
=
'width: 400px; margin-left:50px;'
>
<
el
-
form
-
item
label
=
"类型"
>
<
el
-
form
:
rules
=
"rules"
ref
=
"dataForm
"
:
model
=
"temp"
label
-
position
=
"left"
label
-
width
=
"70px"
style
=
'width: 400px; margin-left:50px;'
>
<
el
-
form
-
item
label
=
"类型"
prop
=
"type"
>
<
el
-
select
class
=
"filter-item"
v
-
model
=
"temp.type"
placeholder
=
"请选择"
>
<
el
-
option
v
-
for
=
"item in calendarTypeOptions"
:
key
=
"item.key"
:
label
=
"item.display_name"
:
value
=
"item.key"
>
<
/el-option
>
<
/el-select
>
<
/el-form-item
>
<
el
-
form
-
item
label
=
"时间"
prop
=
"timestamp"
>
<
el
-
date
-
picker
v
-
model
=
"temp.timestamp"
type
=
"datetime"
placeholder
=
"选择日期时间"
>
<
/el-date-picker
>
<
/el-form-item
>
<
el
-
form
-
item
label
=
"标题"
prop
=
"title"
>
<
el
-
input
v
-
model
=
"temp.title"
><
/el-input
>
<
/el-form-item
>
<
el
-
form
-
item
label
=
"状态"
>
<
el
-
select
class
=
"filter-item"
v
-
model
=
"temp.status"
placeholder
=
"请选择"
>
<
el
-
option
v
-
for
=
"item in statusOptions"
:
key
=
"item"
:
label
=
"item"
:
value
=
"item"
>
<
/el-option
>
<
/el-select
>
<
/el-form-item
>
<
el
-
form
-
item
label
=
"时间"
>
<
el
-
date
-
picker
v
-
model
=
"temp.timestamp"
type
=
"datetime"
placeholder
=
"选择日期时间"
>
<
/el-date-picker
>
<
/el-form-item
>
<
el
-
form
-
item
label
=
"标题"
>
<
el
-
input
v
-
model
=
"temp.title"
><
/el-input
>
<
/el-form-item
>
<
el
-
form
-
item
label
=
"重要性"
>
<
el
-
rate
style
=
"margin-top:8px;"
v
-
model
=
"temp.importance"
:
colors
=
"['#99A9BF', '#F7BA2A', '#FF9900']"
:
max
=
'3'
><
/el-rate
>
<
/el-form-item
>
<
el
-
form
-
item
label
=
"点评"
>
<
el
-
input
type
=
"textarea"
:
autosize
=
"{ minRows: 2, maxRows: 4
}
"
placeholder
=
"请输入内容"
v
-
model
=
"temp.remark"
>
<
/el-input
>
...
...
@@ -131,8 +115,8 @@
<
/el-form
>
<
div
slot
=
"footer"
class
=
"dialog-footer"
>
<
el
-
button
@
click
=
"dialogFormVisible = false"
>
取
消
<
/el-button
>
<
el
-
button
v
-
if
=
"dialogStatus=='create'"
type
=
"primary"
@
click
=
"create"
>
确
定
<
/el-button
>
<
el
-
button
v
-
else
type
=
"primary"
@
click
=
"update"
>
确
定
<
/el-button
>
<
el
-
button
v
-
if
=
"dialogStatus=='create'"
type
=
"primary"
@
click
=
"create
Data
"
>
确
定
<
/el-button
>
<
el
-
button
v
-
else
type
=
"primary"
@
click
=
"update
Data
"
>
确
定
<
/el-button
>
<
/div
>
<
/el-dialog
>
...
...
@@ -150,8 +134,8 @@
<
/template
>
<
script
>
import
{
fetchList
,
fetchPv
}
from
'@/api/article'
import
waves
from
'@/directive/waves
/index.js
'
// 水波纹指令
import
{
fetchList
,
fetchPv
,
createArticle
,
updateArticle
}
from
'@/api/article'
import
waves
from
'@/directive/waves'
// 水波纹指令
import
{
parseTime
}
from
'@/utils'
const
calendarTypeOptions
=
[
...
...
@@ -161,7 +145,7 @@ const calendarTypeOptions = [
{
key
:
'EU'
,
display_name
:
'欧元区'
}
]
// arr to obj
// arr to obj
,such as
{
CN
:
"中国"
,
US
:
"美国"
}
const
calendarTypeKeyValue
=
calendarTypeOptions
.
reduce
((
acc
,
cur
)
=>
{
acc
[
cur
.
key
]
=
cur
.
display_name
return
acc
...
...
@@ -174,6 +158,7 @@ export default {
}
,
data
()
{
return
{
tableKey
:
0
,
list
:
null
,
total
:
null
,
listLoading
:
true
,
...
...
@@ -185,19 +170,20 @@ export default {
type
:
undefined
,
sort
:
'+id'
}
,
importanceOptions
:
[
1
,
2
,
3
],
calendarTypeOptions
,
sortOptions
:
[{
label
:
'按ID升序列'
,
key
:
'+id'
}
,
{
label
:
'按ID降序'
,
key
:
'-id'
}
],
statusOptions
:
[
'published'
,
'draft'
,
'deleted'
],
showAuditor
:
false
,
temp
:
{
id
:
undefined
,
importance
:
0
,
importance
:
1
,
remark
:
''
,
timestamp
:
0
,
timestamp
:
new
Date
()
,
title
:
''
,
type
:
''
,
status
:
'published'
}
,
importanceOptions
:
[
1
,
2
,
3
],
calendarTypeOptions
,
sortOptions
:
[{
label
:
'按ID升序列'
,
key
:
'+id'
}
,
{
label
:
'按ID降序'
,
key
:
'-id'
}
],
statusOptions
:
[
'published'
,
'draft'
,
'deleted'
],
dialogFormVisible
:
false
,
dialogStatus
:
''
,
textMap
:
{
...
...
@@ -206,8 +192,11 @@ export default {
}
,
dialogPvVisible
:
false
,
pvData
:
[],
showAuditor
:
false
,
tableKey
:
0
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'
}
]
}
}
}
,
filters
:
{
...
...
@@ -247,15 +236,6 @@ export default {
this
.
listQuery
.
page
=
val
this
.
getList
()
}
,
timeFilter
(
time
)
{
if
(
!
time
[
0
])
{
this
.
listQuery
.
start
=
undefined
this
.
listQuery
.
end
=
undefined
return
}
this
.
listQuery
.
start
=
parseInt
(
+
time
[
0
]
/
1000
)
this
.
listQuery
.
end
=
parseInt
((
+
time
[
1
]
+
3600
*
1000
*
24
)
/
1000
)
}
,
handleModifyStatus
(
row
,
status
)
{
this
.
$message
({
message
:
'操作成功'
,
...
...
@@ -263,30 +243,31 @@ export default {
}
)
row
.
status
=
status
}
,
resetTemp
()
{
this
.
temp
=
{
id
:
undefined
,
importance
:
1
,
remark
:
''
,
timestamp
:
new
Date
(),
title
:
''
,
status
:
'published'
,
type
:
''
}
}
,
handleCreate
()
{
this
.
resetTemp
()
this
.
dialogStatus
=
'create'
this
.
dialogFormVisible
=
true
}
,
handleUpdate
(
row
)
{
this
.
temp
=
Object
.
assign
({
}
,
row
)
this
.
dialogStatus
=
'update'
this
.
dialogFormVisible
=
true
}
,
handleDelete
(
row
)
{
this
.
$notify
({
title
:
'成功'
,
message
:
'删除成功'
,
type
:
'success'
,
duration
:
2000
this
.
$nextTick
(()
=>
{
this
.
$refs
[
'dataForm'
].
clearValidate
()
}
)
const
index
=
this
.
list
.
indexOf
(
row
)
this
.
list
.
splice
(
index
,
1
)
}
,
create
()
{
this
.
temp
.
id
=
parseInt
(
Math
.
random
()
*
100
)
+
1024
this
.
temp
.
timestamp
=
+
new
Date
()
createData
()
{
this
.
$refs
[
'dataForm'
].
validate
((
valid
)
=>
{
if
(
valid
)
{
this
.
temp
.
id
=
parseInt
(
Math
.
random
()
*
100
)
+
1024
// mock a id
this
.
temp
.
author
=
'原创作者'
createArticle
(
this
.
temp
).
then
(()
=>
{
this
.
list
.
unshift
(
this
.
temp
)
this
.
dialogFormVisible
=
false
this
.
$notify
({
...
...
@@ -295,9 +276,25 @@ export default {
type
:
'success'
,
duration
:
2000
}
)
}
)
}
}
)
}
,
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
()
}
)
}
,
update
()
{
this
.
temp
.
timestamp
=
+
this
.
temp
.
timestamp
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
)
...
...
@@ -312,17 +309,19 @@ export default {
type
:
'success'
,
duration
:
2000
}
)
}
,
resetTemp
()
{
this
.
temp
=
{
id
:
undefined
,
importance
:
0
,
remark
:
''
,
timestamp
:
0
,
title
:
''
,
status
:
'published'
,
type
:
''
}
)
}
}
)
}
,
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
=>
{
...
...
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