Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
jinli gu
Springboot Plus
Commits
95285c62
Commit
95285c62
authored
Sep 01, 2019
by
一日看尽长安花
Committed by
trumansdo
Sep 01, 2019
Browse files
这是vue版的重构开发分支。
预计工作计划如下: 1、完成路由表 2、重构动态的搜索框组件 3、剩下就是各个接口的重写。
parent
2731ce86
Changes
302
Hide whitespace changes
Inline
Side-by-side
admin-web/src/views/example/components/Dropdown/Comment.vue
0 → 100644
View file @
95285c62
<
template
>
<el-dropdown
:show-timeout=
"100"
trigger=
"click"
>
<el-button
plain
>
{{
!
comment_disabled
?
'
Comment: opened
'
:
'
Comment: closed
'
}}
<i
class=
"el-icon-caret-bottom el-icon--right"
/>
</el-button>
<el-dropdown-menu
slot=
"dropdown"
class=
"no-padding"
>
<el-dropdown-item>
<el-radio-group
v-model=
"comment_disabled"
style=
"padding: 10px;"
>
<el-radio
:label=
"true"
>
Close comment
</el-radio>
<el-radio
:label=
"false"
>
Open comment
</el-radio>
</el-radio-group>
</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</
template
>
<
script
>
export
default
{
props
:
{
value
:
{
type
:
Boolean
,
default
:
false
}
},
computed
:
{
comment_disabled
:
{
get
()
{
return
this
.
value
},
set
(
val
)
{
this
.
$emit
(
'
input
'
,
val
)
}
}
}
}
</
script
>
admin-web/src/views/example/components/Dropdown/Platform.vue
0 → 100644
View file @
95285c62
<
template
>
<el-dropdown
:hide-on-click=
"false"
:show-timeout=
"100"
trigger=
"click"
>
<el-button
plain
>
Platfroms(
{{
platforms
.
length
}}
)
<i
class=
"el-icon-caret-bottom el-icon--right"
/>
</el-button>
<el-dropdown-menu
slot=
"dropdown"
class=
"no-border"
>
<el-checkbox-group
v-model=
"platforms"
style=
"padding: 5px 15px;"
>
<el-checkbox
v-for=
"item in platformsOptions"
:key=
"item.key"
:label=
"item.key"
>
{{
item
.
name
}}
</el-checkbox>
</el-checkbox-group>
</el-dropdown-menu>
</el-dropdown>
</
template
>
<
script
>
export
default
{
props
:
{
value
:
{
required
:
true
,
default
:
()
=>
[],
type
:
Array
}
},
data
()
{
return
{
platformsOptions
:
[
{
key
:
'
a-platform
'
,
name
:
'
a-platform
'
},
{
key
:
'
b-platform
'
,
name
:
'
b-platform
'
},
{
key
:
'
c-platform
'
,
name
:
'
c-platform
'
}
]
}
},
computed
:
{
platforms
:
{
get
()
{
return
this
.
value
},
set
(
val
)
{
this
.
$emit
(
'
input
'
,
val
)
}
}
}
}
</
script
>
admin-web/src/views/example/components/Dropdown/SourceUrl.vue
0 → 100644
View file @
95285c62
<
template
>
<el-dropdown
:show-timeout=
"100"
trigger=
"click"
>
<el-button
plain
>
Link
<i
class=
"el-icon-caret-bottom el-icon--right"
/>
</el-button>
<el-dropdown-menu
slot=
"dropdown"
class=
"no-padding no-border"
style=
"width:400px"
>
<el-form-item
label-width=
"0px"
style=
"margin-bottom: 0px"
prop=
"source_uri"
>
<el-input
v-model=
"source_uri"
placeholder=
"Please enter the content"
>
<template
slot=
"prepend"
>
URL
</
template
>
</el-input>
</el-form-item>
</el-dropdown-menu>
</el-dropdown>
</template>
<
script
>
export
default
{
props
:
{
value
:
{
type
:
String
,
default
:
''
}
},
computed
:
{
source_uri
:
{
get
()
{
return
this
.
value
},
set
(
val
)
{
this
.
$emit
(
'
input
'
,
val
)
}
}
}
}
</
script
>
admin-web/src/views/example/components/Dropdown/index.js
0 → 100644
View file @
95285c62
export
{
default
as
CommentDropdown
}
from
'
./Comment
'
export
{
default
as
PlatformDropdown
}
from
'
./Platform
'
export
{
default
as
SourceUrlDropdown
}
from
'
./SourceUrl
'
admin-web/src/views/example/components/Warning.vue
0 → 100644
View file @
95285c62
<
template
>
<aside>
Creating and editing pages cannot be cached by keep-alive because keep-alive include does not currently support
caching based on routes, so it is currently cached based on component name. If you want to achieve a similar caching
effect, you can use a browser caching scheme such as localStorage. Or do not use keep-alive include to cache all
pages directly. See details
<a
href=
"https://panjiachen.github.io/vue-element-admin-site/guide/essentials/tags-view.html"
target=
"_blank"
>
Document
</a>
</aside>
</
template
>
admin-web/src/views/example/create.vue
0 → 100644
View file @
95285c62
<
template
>
<article-detail
:is-edit=
"false"
/>
</
template
>
<
script
>
import
ArticleDetail
from
'
./components/ArticleDetail
'
export
default
{
name
:
'
CreateForm
'
,
components
:
{
ArticleDetail
}
}
</
script
>
admin-web/src/views/example/edit.vue
0 → 100644
View file @
95285c62
<
template
>
<article-detail
:is-edit=
"true"
/>
</
template
>
<
script
>
import
ArticleDetail
from
'
./components/ArticleDetail
'
export
default
{
name
:
'
EditForm
'
,
components
:
{
ArticleDetail
}
}
</
script
>
admin-web/src/views/example/list.vue
0 → 100644
View file @
95285c62
<
template
>
<div
class=
"app-container"
>
<el-table
v-loading=
"listLoading"
:data=
"list"
border
fit
highlight-current-row
style=
"width: 100%"
>
<el-table-column
align=
"center"
label=
"ID"
width=
"80"
>
<template
slot-scope=
"scope"
>
<span>
{{
scope
.
row
.
id
}}
</span>
</
template
>
</el-table-column>
<el-table-column
width=
"180px"
align=
"center"
label=
"Date"
>
<
template
slot-scope=
"scope"
>
<span>
{{
scope
.
row
.
timestamp
|
parseTime
(
'
{y
}
-{m
}
-{d
}
{h
}
:{i
}
'
)
}}
<
/span
>
<
/template
>
<
/el-table-column
>
<
el
-
table
-
column
width
=
"
120px
"
align
=
"
center
"
label
=
"
Author
"
>
<
template
slot
-
scope
=
"
scope
"
>
<
span
>
{{
scope
.
row
.
author
}}
<
/span
>
<
/template
>
<
/el-table-column
>
<
el
-
table
-
column
width
=
"
100px
"
label
=
"
Importance
"
>
<
template
slot
-
scope
=
"
scope
"
>
<
svg
-
icon
v
-
for
=
"
n in +scope.row.importance
"
:
key
=
"
n
"
icon
-
class
=
"
star
"
class
=
"
meta-item__icon
"
/>
<
/template
>
<
/el-table-column
>
<
el
-
table
-
column
class
-
name
=
"
status-col
"
label
=
"
Status
"
width
=
"
110
"
>
<
template
slot
-
scope
=
"
{row
}
"
>
<
el
-
tag
:
type
=
"
row.status | statusFilter
"
>
{{
row
.
status
}}
<
/el-tag
>
<
/template
>
<
/el-table-column
>
<
el
-
table
-
column
min
-
width
=
"
300px
"
label
=
"
Title
"
>
<
template
slot
-
scope
=
"
{row
}
"
>
<
router
-
link
:
to
=
"
'/example/edit/'+row.id
"
class
=
"
link-type
"
>
<
span
>
{{
row
.
title
}}
<
/span
>
<
/router-link
>
<
/template
>
<
/el-table-column
>
<
el
-
table
-
column
align
=
"
center
"
label
=
"
Actions
"
width
=
"
120
"
>
<
template
slot
-
scope
=
"
scope
"
>
<
router
-
link
:
to
=
"
'/example/edit/'+scope.row.id
"
>
<
el
-
button
type
=
"
primary
"
size
=
"
small
"
icon
=
"
el-icon-edit
"
>
Edit
<
/el-button
>
<
/router-link
>
<
/template
>
<
/el-table-column
>
<
/el-table
>
<
pagination
v
-
show
=
"
total>0
"
:
total
=
"
total
"
:
page
.
sync
=
"
listQuery.page
"
:
limit
.
sync
=
"
listQuery.limit
"
@
pagination
=
"
getList
"
/>
<
/div
>
<
/template
>
<
script
>
import
{
fetchList
}
from
'
@/api/article
'
import
Pagination
from
'
@/components/Pagination
'
// Secondary package based on el-pagination
export
default
{
name
:
'
ArticleList
'
,
components
:
{
Pagination
}
,
filters
:
{
statusFilter
(
status
)
{
const
statusMap
=
{
published
:
'
success
'
,
draft
:
'
info
'
,
deleted
:
'
danger
'
}
return
statusMap
[
status
]
}
}
,
data
()
{
return
{
list
:
null
,
total
:
0
,
listLoading
:
true
,
listQuery
:
{
page
:
1
,
limit
:
20
}
}
}
,
created
()
{
this
.
getList
()
}
,
methods
:
{
getList
()
{
this
.
listLoading
=
true
fetchList
(
this
.
listQuery
).
then
(
response
=>
{
this
.
list
=
response
.
data
.
items
this
.
total
=
response
.
data
.
total
this
.
listLoading
=
false
}
)
}
}
}
<
/script
>
<
style
scoped
>
.
edit
-
input
{
padding
-
right
:
100
px
;
}
.
cancel
-
btn
{
position
:
absolute
;
right
:
15
px
;
top
:
10
px
;
}
<
/style
>
admin-web/src/views/excel/components/AutoWidthOption.vue
0 → 100644
View file @
95285c62
<
template
>
<div
style=
"display:inline-block;"
>
<label
class=
"radio-label"
>
Cell Auto-Width:
</label>
<el-radio-group
v-model=
"autoWidth"
>
<el-radio
:label=
"true"
border
>
True
</el-radio>
<el-radio
:label=
"false"
border
>
False
</el-radio>
</el-radio-group>
</div>
</
template
>
<
script
>
export
default
{
props
:
{
value
:
{
type
:
Boolean
,
default
:
true
}
},
computed
:
{
autoWidth
:
{
get
()
{
return
this
.
value
},
set
(
val
)
{
this
.
$emit
(
'
input
'
,
val
)
}
}
}
}
</
script
>
admin-web/src/views/excel/components/BookTypeOption.vue
0 → 100644
View file @
95285c62
<
template
>
<div
style=
"display:inline-block;"
>
<label
class=
"radio-label"
>
Book Type:
</label>
<el-select
v-model=
"bookType"
style=
"width:120px;"
>
<el-option
v-for=
"item in options"
:key=
"item"
:label=
"item"
:value=
"item"
/>
</el-select>
</div>
</
template
>
<
script
>
export
default
{
props
:
{
value
:
{
type
:
String
,
default
:
'
xlsx
'
}
},
data
()
{
return
{
options
:
[
'
xlsx
'
,
'
csv
'
,
'
txt
'
]
}
},
computed
:
{
bookType
:
{
get
()
{
return
this
.
value
},
set
(
val
)
{
this
.
$emit
(
'
input
'
,
val
)
}
}
}
}
</
script
>
admin-web/src/views/excel/components/FilenameOption.vue
0 → 100644
View file @
95285c62
<
template
>
<div
style=
"display:inline-block;"
>
<label
class=
"radio-label"
style=
"padding-left:0;"
>
Filename:
</label>
<el-input
v-model=
"filename"
placeholder=
"Please enter the file name (default excel-list)"
style=
"width:345px;"
prefix-icon=
"el-icon-document"
/>
</div>
</
template
>
<
script
>
export
default
{
props
:
{
value
:
{
type
:
String
,
default
:
''
}
},
computed
:
{
filename
:
{
get
()
{
return
this
.
value
},
set
(
val
)
{
this
.
$emit
(
'
input
'
,
val
)
}
}
}
}
</
script
>
admin-web/src/views/excel/export-excel.vue
0 → 100644
View file @
95285c62
<
template
>
<div
class=
"app-container"
>
<div>
<FilenameOption
v-model=
"filename"
/>
<AutoWidthOption
v-model=
"autoWidth"
/>
<BookTypeOption
v-model=
"bookType"
/>
<el-button
:loading=
"downloadLoading"
style=
"margin:0 0 20px 20px;"
type=
"primary"
icon=
"el-icon-document"
@
click=
"handleDownload"
>
Export Excel
</el-button>
<a
href=
"https://panjiachen.github.io/vue-element-admin-site/feature/component/excel.html"
target=
"_blank"
style=
"margin-left:15px;"
>
<el-tag
type=
"info"
>
Documentation
</el-tag>
</a>
</div>
<el-table
v-loading=
"listLoading"
:data=
"list"
element-loading-text=
"拼命加载中"
border
fit
highlight-current-row
>
<el-table-column
align=
"center"
label=
"Id"
width=
"95"
>
<template
slot-scope=
"scope"
>
{{
scope
.
$index
}}
</
template
>
</el-table-column>
<el-table-column
label=
"Title"
>
<
template
slot-scope=
"scope"
>
{{
scope
.
row
.
title
}}
</
template
>
</el-table-column>
<el-table-column
label=
"Author"
width=
"110"
align=
"center"
>
<
template
slot-scope=
"scope"
>
<el-tag>
{{
scope
.
row
.
author
}}
</el-tag>
</
template
>
</el-table-column>
<el-table-column
label=
"Readings"
width=
"115"
align=
"center"
>
<
template
slot-scope=
"scope"
>
{{
scope
.
row
.
pageviews
}}
</
template
>
</el-table-column>
<el-table-column
align=
"center"
label=
"Date"
width=
"220"
>
<
template
slot-scope=
"scope"
>
<i
class=
"el-icon-time"
/>
<span>
{{
scope
.
row
.
timestamp
|
parseTime
(
'
{y
}
-{m
}
-{d
}
{h
}
:{i
}
'
)
}}
<
/span
>
<
/template
>
<
/el-table-column
>
<
/el-table
>
<
/div
>
<
/template
>
<
script
>
import
{
fetchList
}
from
'
@/api/article
'
import
{
parseTime
}
from
'
@/utils
'
// options components
import
FilenameOption
from
'
./components/FilenameOption
'
import
AutoWidthOption
from
'
./components/AutoWidthOption
'
import
BookTypeOption
from
'
./components/BookTypeOption
'
export
default
{
name
:
'
ExportExcel
'
,
components
:
{
FilenameOption
,
AutoWidthOption
,
BookTypeOption
}
,
data
()
{
return
{
list
:
null
,
listLoading
:
true
,
downloadLoading
:
false
,
filename
:
''
,
autoWidth
:
true
,
bookType
:
'
xlsx
'
}
}
,
created
()
{
this
.
fetchData
()
}
,
methods
:
{
fetchData
()
{
this
.
listLoading
=
true
fetchList
().
then
(
response
=>
{
this
.
list
=
response
.
data
.
items
this
.
listLoading
=
false
}
)
}
,
handleDownload
()
{
this
.
downloadLoading
=
true
import
(
'
@/vendor/Export2Excel
'
).
then
(
excel
=>
{
const
tHeader
=
[
'
Id
'
,
'
Title
'
,
'
Author
'
,
'
Readings
'
,
'
Date
'
]
const
filterVal
=
[
'
id
'
,
'
title
'
,
'
author
'
,
'
pageviews
'
,
'
display_time
'
]
const
list
=
this
.
list
const
data
=
this
.
formatJson
(
filterVal
,
list
)
excel
.
export_json_to_excel
({
header
:
tHeader
,
data
,
filename
:
this
.
filename
,
autoWidth
:
this
.
autoWidth
,
bookType
:
this
.
bookType
}
)
this
.
downloadLoading
=
false
}
)
}
,
formatJson
(
filterVal
,
jsonData
)
{
return
jsonData
.
map
(
v
=>
filterVal
.
map
(
j
=>
{
if
(
j
===
'
timestamp
'
)
{
return
parseTime
(
v
[
j
])
}
else
{
return
v
[
j
]
}
}
))
}
}
}
<
/script
>
<
style
>
.
radio
-
label
{
font
-
size
:
14
px
;
color
:
#
606266
;
line
-
height
:
40
px
;
padding
:
0
12
px
0
30
px
;
}
<
/style
>
admin-web/src/views/excel/merge-header.vue
0 → 100644
View file @
95285c62
<
template
>
<div
class=
"app-container"
>
<el-button
:loading=
"downloadLoading"
style=
"margin-bottom:20px"
type=
"primary"
icon=
"el-icon-document"
@
click=
"handleDownload"
>
Export
</el-button>
<el-table
ref=
"multipleTable"
v-loading=
"listLoading"
:data=
"list"
element-loading-text=
"Loading"
border
fit
highlight-current-row
>
<el-table-column
align=
"center"
label=
"Id"
width=
"95"
>
<template
slot-scope=
"scope"
>
{{
scope
.
$index
}}
</
template
>
</el-table-column>
<el-table-column
label=
"Main Information"
align=
"center"
>
<el-table-column
label=
"Title"
>
<
template
slot-scope=
"scope"
>
{{
scope
.
row
.
title
}}
</
template
>
</el-table-column>
<el-table-column
label=
"Author"
width=
"110"
align=
"center"
>
<
template
slot-scope=
"scope"
>
<el-tag>
{{
scope
.
row
.
author
}}
</el-tag>
</
template
>
</el-table-column>
<el-table-column
label=
"Readings"
width=
"115"
align=
"center"
>
<
template
slot-scope=
"scope"
>
{{
scope
.
row
.
pageviews
}}
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
align=
"center"
label=
"Date"
width=
"220"
>
<
template
slot-scope=
"scope"
>
<i
class=
"el-icon-time"
/>
<span>
{{
scope
.
row
.
timestamp
|
parseTime
(
'
{y
}
-{m
}
-{d
}
{h
}
:{i
}
'
)
}}
<
/span
>
<
/template
>
<
/el-table-column
>
<
/el-table
>
<
/div
>
<
/template
>
<
script
>
import
{
fetchList
}
from
'
@/api/article
'
import
{
parseTime
}
from
'
@/utils
'
export
default
{
name
:
'
MergeHeader
'
,
data
()
{
return
{
list
:
null
,
listLoading
:
true
,
downloadLoading
:
false
}
}
,
created
()
{
this
.
fetchData
()
}
,
methods
:
{
fetchData
()
{
this
.
listLoading
=
true
fetchList
(
this
.
listQuery
).
then
(
response
=>
{
this
.
list
=
response
.
data
.
items
this
.
listLoading
=
false
}
)
}
,
handleDownload
()
{
this
.
downloadLoading
=
true
import
(
'
@/vendor/Export2Excel
'
).
then
(
excel
=>
{
const
multiHeader
=
[[
'
Id
'
,
'
Main Information
'
,
''
,
''
,
'
Date
'
]]
const
header
=
[
''
,
'
Title
'
,
'
Author
'
,
'
Readings
'
,
''
]
const
filterVal
=
[
'
id
'
,
'
title
'
,
'
author
'
,
'
pageviews
'
,
'
display_time
'
]
const
list
=
this
.
list
const
data
=
this
.
formatJson
(
filterVal
,
list
)
const
merges
=
[
'
A1:A2
'
,
'
B1:D1
'
,
'
E1:E2
'
]
excel
.
export_json_to_excel
({
multiHeader
,
header
,
merges
,
data
}
)
this
.
downloadLoading
=
false
}
)
}
,
formatJson
(
filterVal
,
jsonData
)
{
return
jsonData
.
map
(
v
=>
filterVal
.
map
(
j
=>
{
if
(
j
===
'
timestamp
'
)
{
return
parseTime
(
v
[
j
])
}
else
{
return
v
[
j
]
}
}
))
}
}
}
<
/script
>
admin-web/src/views/excel/select-excel.vue
0 → 100644
View file @
95285c62
<
template
>
<div
class=
"app-container"
>
<el-input
v-model=
"filename"
placeholder=
"Please enter the file name (default excel-list)"
style=
"width:350px;"
prefix-icon=
"el-icon-document"
/>
<el-button
:loading=
"downloadLoading"
style=
"margin-bottom:20px"
type=
"primary"
icon=
"el-icon-document"
@
click=
"handleDownload"
>
Export Selected Items
</el-button>
<a
href=
"https://panjiachen.github.io/vue-element-admin-site/feature/component/excel.html"
target=
"_blank"
style=
"margin-left:15px;"
>
<el-tag
type=
"info"
>
Documentation
</el-tag>
</a>
<el-table
ref=
"multipleTable"
v-loading=
"listLoading"
:data=
"list"
element-loading-text=
"拼命加载中"
border
fit
highlight-current-row
@
selection-change=
"handleSelectionChange"
>
<el-table-column
type=
"selection"
align=
"center"
/>
<el-table-column
align=
"center"
label=
"Id"
width=
"95"
>
<template
slot-scope=
"scope"
>
{{
scope
.
$index
}}
</
template
>
</el-table-column>
<el-table-column
label=
"Title"
>
<
template
slot-scope=
"scope"
>
{{
scope
.
row
.
title
}}
</
template
>
</el-table-column>
<el-table-column
label=
"Author"
width=
"110"
align=
"center"
>
<
template
slot-scope=
"scope"
>
<el-tag>
{{
scope
.
row
.
author
}}
</el-tag>
</
template
>
</el-table-column>
<el-table-column
label=
"Readings"
width=
"115"
align=
"center"
>
<
template
slot-scope=
"scope"
>
{{
scope
.
row
.
pageviews
}}
</
template
>
</el-table-column>
<el-table-column
align=
"center"
label=
"PDate"
width=
"220"
>
<
template
slot-scope=
"scope"
>
<i
class=
"el-icon-time"
/>
<span>
{{
scope
.
row
.
display_time
}}
</span>
</
template
>
</el-table-column>
</el-table>
</div>
</template>
<
script
>
import
{
fetchList
}
from
'
@/api/article
'
export
default
{
name
:
'
SelectExcel
'
,
data
()
{
return
{
list
:
null
,
listLoading
:
true
,
multipleSelection
:
[],
downloadLoading
:
false
,
filename
:
''
}
},
created
()
{
this
.
fetchData
()
},
methods
:
{
fetchData
()
{
this
.
listLoading
=
true
fetchList
(
this
.
listQuery
).
then
(
response
=>
{
this
.
list
=
response
.
data
.
items
this
.
listLoading
=
false
})
},
handleSelectionChange
(
val
)
{
this
.
multipleSelection
=
val
},
handleDownload
()
{
if
(
this
.
multipleSelection
.
length
)
{
this
.
downloadLoading
=
true
import
(
'
@/vendor/Export2Excel
'
).
then
(
excel
=>
{
const
tHeader
=
[
'
Id
'
,
'
Title
'
,
'
Author
'
,
'
Readings
'
,
'
Date
'
]
const
filterVal
=
[
'
id
'
,
'
title
'
,
'
author
'
,
'
pageviews
'
,
'
display_time
'
]
const
list
=
this
.
multipleSelection
const
data
=
this
.
formatJson
(
filterVal
,
list
)
excel
.
export_json_to_excel
({
header
:
tHeader
,
data
,
filename
:
this
.
filename
})
this
.
$refs
.
multipleTable
.
clearSelection
()
this
.
downloadLoading
=
false
})
}
else
{
this
.
$message
({
message
:
'
Please select at least one item
'
,
type
:
'
warning
'
})
}
},
formatJson
(
filterVal
,
jsonData
)
{
return
jsonData
.
map
(
v
=>
filterVal
.
map
(
j
=>
v
[
j
]))
}
}
}
</
script
>
admin-web/src/views/excel/upload-excel.vue
0 → 100644
View file @
95285c62
<
template
>
<div
class=
"app-container"
>
<upload-excel-component
:on-success=
"handleSuccess"
:before-upload=
"beforeUpload"
/>
<el-table
:data=
"tableData"
border
highlight-current-row
style=
"width: 100%;margin-top:20px;"
>
<el-table-column
v-for=
"item of tableHeader"
:key=
"item"
:prop=
"item"
:label=
"item"
/>
</el-table>
</div>
</
template
>
<
script
>
import
UploadExcelComponent
from
'
@/components/UploadExcel/index.vue
'
export
default
{
name
:
'
UploadExcel
'
,
components
:
{
UploadExcelComponent
},
data
()
{
return
{
tableData
:
[],
tableHeader
:
[]
}
},
methods
:
{
beforeUpload
(
file
)
{
const
isLt1M
=
file
.
size
/
1024
/
1024
<
1
if
(
isLt1M
)
{
return
true
}
this
.
$message
({
message
:
'
Please do not upload files larger than 1m in size.
'
,
type
:
'
warning
'
})
return
false
},
handleSuccess
({
results
,
header
})
{
this
.
tableData
=
results
this
.
tableHeader
=
header
}
}
}
</
script
>
admin-web/src/views/guide/index.vue
0 → 100644
View file @
95285c62
<
template
>
<div
class=
"app-container"
>
<aside>
The guide page is useful for some people who entered the project for the first time. You can briefly introduce the
features of the project. Demo is based on
<a
href=
"https://github.com/kamranahmedse/driver.js"
target=
"_blank"
>
driver.js.
</a>
</aside>
<el-button
icon=
"el-icon-question"
type=
"primary"
@
click.prevent.stop=
"guide"
>
Show Guide
</el-button>
</div>
</
template
>
<
script
>
import
Driver
from
'
driver.js
'
// import driver.js
import
'
driver.js/dist/driver.min.css
'
// import driver.js css
import
steps
from
'
./steps
'
export
default
{
name
:
'
Guide
'
,
data
()
{
return
{
driver
:
null
}
},
mounted
()
{
this
.
driver
=
new
Driver
()
},
methods
:
{
guide
()
{
this
.
driver
.
defineSteps
(
steps
)
this
.
driver
.
start
()
}
}
}
</
script
>
admin-web/src/views/guide/steps.js
0 → 100644
View file @
95285c62
const
steps
=
[
{
element
:
'
#hamburger-container
'
,
popover
:
{
title
:
'
Hamburger
'
,
description
:
'
Open && Close sidebar
'
,
position
:
'
bottom
'
}
},
{
element
:
'
#breadcrumb-container
'
,
popover
:
{
title
:
'
Breadcrumb
'
,
description
:
'
Indicate the current page location
'
,
position
:
'
bottom
'
}
},
{
element
:
'
#header-search
'
,
popover
:
{
title
:
'
Page Search
'
,
description
:
'
Page search, quick navigation
'
,
position
:
'
left
'
}
},
{
element
:
'
#screenfull
'
,
popover
:
{
title
:
'
Screenfull
'
,
description
:
'
Set the page into fullscreen
'
,
position
:
'
left
'
}
},
{
element
:
'
#size-select
'
,
popover
:
{
title
:
'
Switch Size
'
,
description
:
'
Switch the system size
'
,
position
:
'
left
'
}
},
{
element
:
'
#tags-view-container
'
,
popover
:
{
title
:
'
Tags view
'
,
description
:
'
The history of the page you visited
'
,
position
:
'
bottom
'
},
padding
:
0
}
]
export
default
steps
admin-web/src/views/icons/element-icons.js
0 → 100644
View file @
95285c62
const
elementIcons
=
[
'
info
'
,
'
error
'
,
'
success
'
,
'
warning
'
,
'
question
'
,
'
back
'
,
'
arrow-left
'
,
'
arrow-down
'
,
'
arrow-right
'
,
'
arrow-up
'
,
'
caret-left
'
,
'
caret-bottom
'
,
'
caret-top
'
,
'
caret-right
'
,
'
d-arrow-left
'
,
'
d-arrow-right
'
,
'
minus
'
,
'
plus
'
,
'
remove
'
,
'
circle-plus
'
,
'
remove-outline
'
,
'
circle-plus-outline
'
,
'
close
'
,
'
check
'
,
'
circle-close
'
,
'
circle-check
'
,
'
circle-close-outline
'
,
'
circle-check-outline
'
,
'
zoom-out
'
,
'
zoom-in
'
,
'
d-caret
'
,
'
sort
'
,
'
sort-down
'
,
'
sort-up
'
,
'
tickets
'
,
'
document
'
,
'
goods
'
,
'
sold-out
'
,
'
news
'
,
'
message
'
,
'
date
'
,
'
printer
'
,
'
time
'
,
'
bell
'
,
'
mobile-phone
'
,
'
service
'
,
'
view
'
,
'
menu
'
,
'
more
'
,
'
more-outline
'
,
'
star-on
'
,
'
star-off
'
,
'
location
'
,
'
location-outline
'
,
'
phone
'
,
'
phone-outline
'
,
'
picture
'
,
'
picture-outline
'
,
'
delete
'
,
'
search
'
,
'
edit
'
,
'
edit-outline
'
,
'
rank
'
,
'
refresh
'
,
'
share
'
,
'
setting
'
,
'
upload
'
,
'
upload2
'
,
'
download
'
,
'
loading
'
]
export
default
elementIcons
admin-web/src/views/icons/index.vue
0 → 100644
View file @
95285c62
<
template
>
<div
class=
"icons-container"
>
<aside>
<a
href=
"https://panjiachen.github.io/vue-element-admin-site/guide/advanced/icon.html"
target=
"_blank"
>
Add and use
</a>
</aside>
<el-tabs
type=
"border-card"
>
<el-tab-pane
label=
"Icons"
>
<div
v-for=
"item of svgIcons"
:key=
"item"
@
click=
"handleClipboard(generateIconCode(item),$event)"
>
<el-tooltip
placement=
"top"
>
<div
slot=
"content"
>
{{
generateIconCode
(
item
)
}}
</div>
<div
class=
"icon-item"
>
<svg-icon
:icon-class=
"item"
class-name=
"disabled"
/>
<span>
{{
item
}}
</span>
</div>
</el-tooltip>
</div>
</el-tab-pane>
<el-tab-pane
label=
"Element-UI Icons"
>
<div
v-for=
"item of elementIcons"
:key=
"item"
@
click=
"handleClipboard(generateElementIconCode(item),$event)"
>
<el-tooltip
placement=
"top"
>
<div
slot=
"content"
>
{{
generateElementIconCode
(
item
)
}}
</div>
<div
class=
"icon-item"
>
<i
:class=
"'el-icon-' + item"
/>
<span>
{{
item
}}
</span>
</div>
</el-tooltip>
</div>
</el-tab-pane>
</el-tabs>
</div>
</
template
>
<
script
>
import
clipboard
from
'
@/utils/clipboard
'
import
svgIcons
from
'
./svg-icons
'
import
elementIcons
from
'
./element-icons
'
export
default
{
name
:
'
Icons
'
,
data
()
{
return
{
svgIcons
,
elementIcons
}
},
methods
:
{
generateIconCode
(
symbol
)
{
return
`<svg-icon icon-class="
${
symbol
}
" />`
},
generateElementIconCode
(
symbol
)
{
return
`<i class="el-icon-
${
symbol
}
" />`
},
handleClipboard
(
text
,
event
)
{
clipboard
(
text
,
event
)
}
}
}
</
script
>
<
style
lang=
"scss"
scoped
>
.icons-container
{
margin
:
10px
20px
0
;
overflow
:
hidden
;
.icon-item
{
margin
:
20px
;
height
:
85px
;
text-align
:
center
;
width
:
100px
;
float
:
left
;
font-size
:
30px
;
color
:
#24292e
;
cursor
:
pointer
;
}
span
{
display
:
block
;
font-size
:
16px
;
margin-top
:
10px
;
}
.disabled
{
pointer-events
:
none
;
}
}
</
style
>
admin-web/src/views/icons/svg-icons.js
0 → 100644
View file @
95285c62
const
req
=
require
.
context
(
'
../../icons/svg
'
,
false
,
/
\.
svg$/
)
const
requireAll
=
requireContext
=>
requireContext
.
keys
()
const
re
=
/
\.\/(
.*
)\.
svg/
const
svgIcons
=
requireAll
(
req
).
map
(
i
=>
{
return
i
.
match
(
re
)[
1
]
})
export
default
svgIcons
Prev
1
…
9
10
11
12
13
14
15
16
Next
Write
Preview
Supports
Markdown
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