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
7 years ago
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
})
}
This diff is collapsed.
Click to expand it.
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'
})
}
This diff is collapsed.
Click to expand it.
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
)
...
...
This diff is collapsed.
Click to expand it.
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
=>
{
...
...
This diff is collapsed.
Click to expand it.
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