Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
V
vue_3.0
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
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
wangqinghua
vue_3.0
Commits
86d4bd95
Commit
86d4bd95
authored
Dec 18, 2019
by
wangqinghua
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
update
parent
a979b7dd
Hide whitespace changes
Inline
Side-by-side
Showing
20 changed files
with
266 additions
and
305 deletions
+266
-305
routes.js
mock/role/routes.js
+1
-1
index.vue
src/components/Breadcrumb/index.vue
+0
-1
EditorImage.vue
src/components/Tinymce/components/EditorImage.vue
+1
-1
index.vue
src/components/Tinymce/index.vue
+1
-38
Navbar.vue
src/layout/components/Navbar.vue
+0
-5
index.vue
src/layout/components/TagsView/index.vue
+240
-230
index.js
src/router/index.js
+9
-9
components.js
src/router/modules/components.js
+3
-3
table.js
src/router/modules/table.js
+4
-4
get-page-title.js
src/utils/get-page-title.js
+0
-1
tinymce.vue
src/views/components-demo/tinymce.vue
+2
-2
index.vue
src/views/dashboard/index.vue
+2
-1
index.vue
src/views/error-log/index.vue
+1
-2
FilenameOption.vue
src/views/excel/components/FilenameOption.vue
+0
-1
export-excel.vue
src/views/excel/export-excel.vue
+0
-1
select-excel.vue
src/views/excel/select-excel.vue
+0
-1
index.vue
src/views/i18n-demo/index.vue
+1
-1
role.vue
src/views/permission/role.vue
+1
-1
drag-table.vue
src/views/table/drag-table.vue
+0
-1
index.vue
src/views/zip/index.vue
+0
-1
No files found.
mock/role/routes.js
View file @
86d4bd95
...
...
@@ -194,7 +194,7 @@ export const asyncRoutes = [
path
:
'back-to-top'
,
component
:
'views/components-demo/back-to-top'
,
name
:
'BackToTopDemo'
,
meta
:
{
title
:
'
backToTop
'
}
meta
:
{
title
:
'
返回顶部
'
}
},
{
path
:
'drag-dialog'
,
...
...
src/components/Breadcrumb/index.vue
View file @
86d4bd95
...
...
@@ -22,7 +22,6 @@
},
watch
:
{
// 侦听路由变化
$route
(
route
)
{
console
.
log
(
route
)
// if you go to the redirect page, do not update the breadcrumbs
if
(
route
.
path
.
startsWith
(
'/redirect/'
))
{
return
...
...
src/components/Tinymce/components/EditorImage.vue
View file @
86d4bd95
<
template
>
<div
class=
"upload-container"
>
<el-button
:style=
"
{background:color,borderColor:color}" icon="el-icon-upload" size="mini" type="primary" @click=" dialogVisible=true">
upload
上传本地图片
</el-button>
<el-dialog
:visible
.
sync=
"dialogVisible"
>
<el-upload
...
...
src/components/Tinymce/index.vue
View file @
86d4bd95
...
...
@@ -8,16 +8,12 @@
</
template
>
<
script
>
/**
* docs:
* https://panjiachen.github.io/vue-element-admin-site/feature/component/rich-editor.html#tinymce
*/
import
editorImage
from
'./components/EditorImage'
import
plugins
from
'./plugins'
import
toolbar
from
'./toolbar'
import
load
from
'./dynamicLoadScript'
// why use this cdn, detail see https://github.com/PanJiaChen/tinymce-all-in-one
const
tinymceCDN
=
'https://cdn.jsdelivr.net/npm/tinymce-all-in-one@4.9.3/tinymce.min.js'
export
default
{
...
...
@@ -155,39 +151,6 @@ export default {
_this
.
fullscreen
=
e
.
state
})
}
// 整合七牛上传
// images_dataimg_filter(img) {
// setTimeout(() => {
// const $image = $(img);
// $image.removeAttr('width');
// $image.removeAttr('height');
// if ($image[0].height && $image[0].width) {
// $image.attr('data-wscntype', 'image');
// $image.attr('data-wscnh', $image[0].height);
// $image.attr('data-wscnw', $image[0].width);
// $image.addClass('wscnph');
// }
// }, 0);
// return img
// },
// images_upload_handler(blobInfo, success, failure, progress) {
// progress(0);
// const token = _this.$store.getters.token;
// getToken(token).then(response => {
// const url = response.data.qiniu_url;
// const formData = new FormData();
// formData.append('token', response.data.qiniu_token);
// formData.append('key', response.data.qiniu_key);
// formData.append('file', blobInfo.blob(), url);
// upload(formData).then(() => {
// success(url);
// progress(100);
// })
// }).catch(err => {
// failure('出现未知问题,刷新页面,或者联系程序员')
// console.log(err);
// });
// },
})
},
destroyTinymce
()
{
...
...
src/layout/components/Navbar.vue
View file @
86d4bd95
...
...
@@ -19,11 +19,6 @@
<i
class=
"el-icon-caret-bottom"
/>
</div>
<el-dropdown-menu
slot=
"dropdown"
>
<router-link
to=
"/profile/index"
>
<el-dropdown-item>
个人中心
</el-dropdown-item>
</router-link>
<router-link
to=
"/"
>
<el-dropdown-item>
首页
...
...
src/layout/components/TagsView/index.vue
View file @
86d4bd95
...
...
@@ -12,280 +12,290 @@
@click.middle.native="!isAffix(tag)?closeSelectedTag(tag):''"
@contextmenu.prevent.native="openMenu(tag,$event)"
>
{{
generateTitle
(
tag
.
title
)
}}
<span
v-if=
"!isAffix(tag)"
class=
"el-icon-close"
@
click
.
prevent
.
stop=
"closeSelectedTag(tag)"
/>
{{
tag
.
title
}}
<span
v-if=
"!isAffix(tag)"
class=
"el-icon-close"
@
click
.
prevent
.
stop=
"closeSelectedTag(tag)"
/>
</router-link>
</scroll-pane>
<ul
v-show=
"visible"
:style=
"
{left:left+'px',top:top+'px'}" class="contextmenu">
<li
@
click=
"refreshSelectedTag(selectedTag)"
>
{{
$t
(
'tagsView.refresh'
)
}}
</li>
<li
v-if=
"!isAffix(selectedTag)"
@
click=
"closeSelectedTag(selectedTag)"
>
{{
$t
(
'tagsView.close'
)
}}
</li>
<li
@
click=
"closeOthersTags"
>
{{
$t
(
'tagsView.closeOthers'
)
}}
</li>
<li
@
click=
"closeAllTags(selectedTag)"
>
{{
$t
(
'tagsView.closeAll'
)
}}
</li>
<li
@
click=
"refreshSelectedTag(selectedTag)"
>
刷新
</li>
<li
v-if=
"!isAffix(selectedTag)"
@
click=
"closeSelectedTag(selectedTag)"
>
关闭
</li>
<li
@
click=
"closeOthersTags"
>
关闭其他
</li>
<li
@
click=
"closeAllTags(selectedTag)"
>
关闭所有
</li>
</ul>
</div>
</
template
>
<
script
>
import
ScrollPane
from
'./ScrollPane'
import
{
generateTitle
}
from
'@/utils/i18n'
import
path
from
'path'
import
ScrollPane
from
'./ScrollPane'
import
{
generateTitle
}
from
'@/utils/i18n'
import
path
from
'path'
export
default
{
components
:
{
ScrollPane
},
data
()
{
return
{
visible
:
false
,
top
:
0
,
left
:
0
,
selectedTag
:
{},
affixTags
:
[]
}
},
computed
:
{
visitedViews
()
{
return
this
.
$store
.
state
.
tagsView
.
visitedViews
},
routes
()
{
return
this
.
$store
.
state
.
permission
.
routes
}
},
watch
:
{
$route
()
{
this
.
addTags
()
this
.
moveToCurrentTag
()
},
visible
(
value
)
{
if
(
value
)
{
document
.
body
.
addEventListener
(
'click'
,
this
.
closeMenu
)
}
else
{
document
.
body
.
removeEventListener
(
'click'
,
this
.
closeMenu
)
export
default
{
components
:
{
ScrollPane
},
data
()
{
return
{
visible
:
false
,
top
:
0
,
left
:
0
,
selectedTag
:
{},
affixTags
:
[]
}
}
},
mounted
()
{
this
.
initTags
()
this
.
addTags
()
},
methods
:
{
generateTitle
,
// generateTitle by vue-i18n
isActive
(
route
)
{
return
route
.
path
===
this
.
$route
.
path
},
isAffix
(
tag
)
{
return
tag
.
meta
&&
tag
.
meta
.
affix
},
filterAffixTags
(
routes
,
basePath
=
'/'
)
{
let
tags
=
[]
routes
.
forEach
(
route
=>
{
if
(
route
.
meta
&&
route
.
meta
.
affix
)
{
const
tagPath
=
path
.
resolve
(
basePath
,
route
.
path
)
tags
.
push
({
fullPath
:
tagPath
,
path
:
tagPath
,
name
:
route
.
name
,
meta
:
{
...
route
.
meta
}
})
}
if
(
route
.
children
)
{
const
tempTags
=
this
.
filterAffixTags
(
route
.
children
,
route
.
path
)
if
(
tempTags
.
length
>=
1
)
{
tags
=
[...
tags
,
...
tempTags
]
}
}
})
return
tags
computed
:
{
visitedViews
()
{
return
this
.
$store
.
state
.
tagsView
.
visitedViews
},
routes
()
{
return
this
.
$store
.
state
.
permission
.
routes
}
},
initTags
()
{
const
affixTags
=
this
.
affixTags
=
this
.
filterAffixTags
(
this
.
routes
)
for
(
const
tag
of
affixTags
)
{
// Must have tag name
if
(
tag
.
name
)
{
this
.
$store
.
dispatch
(
'tagsView/addVisitedView'
,
tag
)
watch
:
{
$route
()
{
this
.
addTags
()
this
.
moveToCurrentTag
()
},
visible
(
value
)
{
if
(
value
)
{
document
.
body
.
addEventListener
(
'click'
,
this
.
closeMenu
)
}
else
{
document
.
body
.
removeEventListener
(
'click'
,
this
.
closeMenu
)
}
}
},
addTags
()
{
const
{
name
}
=
this
.
$route
if
(
name
)
{
this
.
$store
.
dispatch
(
'tagsView/addView'
,
this
.
$route
)
}
return
false
mounted
()
{
this
.
initTags
()
this
.
addTags
()
},
moveToCurrentTag
()
{
const
tags
=
this
.
$refs
.
tag
this
.
$nextTick
(()
=>
{
for
(
const
tag
of
tags
)
{
if
(
tag
.
to
.
path
===
this
.
$route
.
path
)
{
this
.
$refs
.
scrollPane
.
moveToTarget
(
tag
)
// when query is different then update
if
(
tag
.
to
.
fullPath
!==
this
.
$route
.
fullPath
)
{
this
.
$store
.
dispatch
(
'tagsView/updateVisitedView'
,
this
.
$route
)
methods
:
{
generateTitle
,
// generateTitle by vue-i18n
isActive
(
route
)
{
return
route
.
path
===
this
.
$route
.
path
},
isAffix
(
tag
)
{
return
tag
.
meta
&&
tag
.
meta
.
affix
},
filterAffixTags
(
routes
,
basePath
=
'/'
)
{
let
tags
=
[]
routes
.
forEach
(
route
=>
{
if
(
route
.
meta
&&
route
.
meta
.
affix
)
{
const
tagPath
=
path
.
resolve
(
basePath
,
route
.
path
)
tags
.
push
({
fullPath
:
tagPath
,
path
:
tagPath
,
name
:
route
.
name
,
meta
:
{...
route
.
meta
}
})
}
if
(
route
.
children
)
{
const
tempTags
=
this
.
filterAffixTags
(
route
.
children
,
route
.
path
)
if
(
tempTags
.
length
>=
1
)
{
tags
=
[...
tags
,
...
tempTags
]
}
break
}
})
return
tags
},
initTags
()
{
const
affixTags
=
this
.
affixTags
=
this
.
filterAffixTags
(
this
.
routes
)
for
(
const
tag
of
affixTags
)
{
// Must have tag name
if
(
tag
.
name
)
{
this
.
$store
.
dispatch
(
'tagsView/addVisitedView'
,
tag
)
}
}
})
},
refreshSelectedTag
(
view
)
{
this
.
$store
.
dispatch
(
'tagsView/delCachedView'
,
view
).
then
(()
=>
{
const
{
fullPath
}
=
view
},
addTags
()
{
const
{
name
}
=
this
.
$route
if
(
name
)
{
this
.
$store
.
dispatch
(
'tagsView/addView'
,
this
.
$route
)
}
return
false
},
moveToCurrentTag
()
{
const
tags
=
this
.
$refs
.
tag
this
.
$nextTick
(()
=>
{
this
.
$router
.
replace
({
path
:
'/redirect'
+
fullPath
for
(
const
tag
of
tags
)
{
if
(
tag
.
to
.
path
===
this
.
$route
.
path
)
{
this
.
$refs
.
scrollPane
.
moveToTarget
(
tag
)
// when query is different then update
if
(
tag
.
to
.
fullPath
!==
this
.
$route
.
fullPath
)
{
this
.
$store
.
dispatch
(
'tagsView/updateVisitedView'
,
this
.
$route
)
}
break
}
}
})
},
refreshSelectedTag
(
view
)
{
this
.
$store
.
dispatch
(
'tagsView/delCachedView'
,
view
).
then
(()
=>
{
const
{
fullPath
}
=
view
this
.
$nextTick
(()
=>
{
this
.
$router
.
replace
({
path
:
'/redirect'
+
fullPath
})
})
})
})
},
closeSelectedTag
(
view
)
{
this
.
$store
.
dispatch
(
'tagsView/delView'
,
view
).
then
(({
visitedViews
})
=>
{
if
(
this
.
isActive
(
view
))
{
},
closeSelectedTag
(
view
)
{
this
.
$store
.
dispatch
(
'tagsView/delView'
,
view
).
then
(({
visitedViews
})
=>
{
if
(
this
.
isActive
(
view
))
{
this
.
toLastView
(
visitedViews
,
view
)
}
})
},
closeOthersTags
()
{
this
.
$router
.
push
(
this
.
selectedTag
)
this
.
$store
.
dispatch
(
'tagsView/delOthersViews'
,
this
.
selectedTag
).
then
(()
=>
{
this
.
moveToCurrentTag
()
})
},
closeAllTags
(
view
)
{
this
.
$store
.
dispatch
(
'tagsView/delAllViews'
).
then
(({
visitedViews
})
=>
{
if
(
this
.
affixTags
.
some
(
tag
=>
tag
.
path
===
view
.
path
))
{
return
}
this
.
toLastView
(
visitedViews
,
view
)
})
},
toLastView
(
visitedViews
,
view
)
{
const
latestView
=
visitedViews
.
slice
(
-
1
)[
0
]
if
(
latestView
)
{
this
.
$router
.
push
(
latestView
.
fullPath
)
}
else
{
// now the default is to redirect to the home page if there is no tags-view,
// you can adjust it according to your needs.
if
(
view
.
name
===
'Dashboard'
)
{
// to reload home page
this
.
$router
.
replace
({
path
:
'/redirect'
+
view
.
fullPath
})
}
else
{
this
.
$router
.
push
(
'/'
)
}
}
})
},
closeOthersTags
()
{
this
.
$router
.
push
(
this
.
selectedTag
)
this
.
$store
.
dispatch
(
'tagsView/delOthersViews'
,
this
.
selectedTag
).
then
(()
=>
{
this
.
moveToCurrentTag
()
})
},
closeAllTags
(
view
)
{
this
.
$store
.
dispatch
(
'tagsView/delAllViews'
).
then
(({
visitedViews
})
=>
{
if
(
this
.
affixTags
.
some
(
tag
=>
tag
.
path
===
view
.
path
))
{
return
}
this
.
toLastView
(
visitedViews
,
view
)
})
},
toLastView
(
visitedViews
,
view
)
{
const
latestView
=
visitedViews
.
slice
(
-
1
)[
0
]
if
(
latestView
)
{
this
.
$router
.
push
(
latestView
.
fullPath
)
}
else
{
// now the default is to redirect to the home page if there is no tags-view,
// you can adjust it according to your needs.
if
(
view
.
name
===
'Dashboard'
)
{
// to reload home page
this
.
$router
.
replace
({
path
:
'/redirect'
+
view
.
fullPath
})
},
openMenu
(
tag
,
e
)
{
const
menuMinWidth
=
105
const
offsetLeft
=
this
.
$el
.
getBoundingClientRect
().
left
// container margin left
const
offsetWidth
=
this
.
$el
.
offsetWidth
// container width
const
maxLeft
=
offsetWidth
-
menuMinWidth
// left boundary
const
left
=
e
.
clientX
-
offsetLeft
+
15
// 15: margin right
if
(
left
>
maxLeft
)
{
this
.
left
=
maxLeft
}
else
{
this
.
$router
.
push
(
'/'
)
this
.
left
=
left
}
}
},
openMenu
(
tag
,
e
)
{
const
menuMinWidth
=
105
const
offsetLeft
=
this
.
$el
.
getBoundingClientRect
().
left
// container margin left
const
offsetWidth
=
this
.
$el
.
offsetWidth
// container width
const
maxLeft
=
offsetWidth
-
menuMinWidth
// left boundary
const
left
=
e
.
clientX
-
offsetLeft
+
15
// 15: margin right
if
(
left
>
maxLeft
)
{
this
.
left
=
maxLeft
}
else
{
this
.
left
=
left
this
.
top
=
e
.
clientY
this
.
visible
=
true
this
.
selectedTag
=
tag
},
closeMenu
()
{
this
.
visible
=
false
}
this
.
top
=
e
.
clientY
this
.
visible
=
true
this
.
selectedTag
=
tag
},
closeMenu
()
{
this
.
visible
=
false
}
}
}
</
script
>
<
style
lang=
"scss"
scoped
>
.tags-view-container
{
height
:
34px
;
width
:
100%
;
background
:
#fff
;
border-bottom
:
1px
solid
#d8dce5
;
box-shadow
:
0
1px
3px
0
rgba
(
0
,
0
,
0
,
.12
)
,
0
0
3px
0
rgba
(
0
,
0
,
0
,
.04
);
.tags-view-wrapper
{
.tags-view-item
{
display
:
inline-block
;
position
:
relative
;
cursor
:
pointer
;
height
:
26px
;
line-height
:
26px
;
border
:
1px
solid
#d8dce5
;
color
:
#495060
;
background
:
#fff
;
padding
:
0
8px
;
font-size
:
12px
;
margin-left
:
5px
;
margin-top
:
4px
;
&
:first-of-type
{
margin-left
:
15px
;
}
&
:last-of-type
{
margin-right
:
15px
;
}
&
.active
{
background-color
:
#42b983
;
color
:
#fff
;
border-color
:
#42b983
;
&
:
:
before
{
content
:
''
;
background
:
#fff
;
display
:
inline-block
;
width
:
8px
;
height
:
8px
;
border-radius
:
50%
;
position
:
relative
;
margin-right
:
2px
;
.tags-view-container
{
height
:
34px
;
width
:
100%
;
background
:
#fff
;
border-bottom
:
1px
solid
#d8dce5
;
box-shadow
:
0
1px
3px
0
rgba
(
0
,
0
,
0
,
.12
)
,
0
0
3px
0
rgba
(
0
,
0
,
0
,
.04
);
.tags-view-wrapper
{
.tags-view-item
{
display
:
inline-block
;
position
:
relative
;
cursor
:
pointer
;
height
:
26px
;
line-height
:
26px
;
border
:
1px
solid
#d8dce5
;
color
:
#495060
;
background
:
#fff
;
padding
:
0
8px
;
font-size
:
12px
;
margin-left
:
5px
;
margin-top
:
4px
;
&
:first-of-type
{
margin-left
:
15px
;
}
&
:last-of-type
{
margin-right
:
15px
;
}
&
.active
{
background-color
:
#42b983
;
color
:
#fff
;
border-color
:
#42b983
;
&
:
:
before
{
content
:
''
;
background
:
#fff
;
display
:
inline-block
;
width
:
8px
;
height
:
8px
;
border-radius
:
50%
;
position
:
relative
;
margin-right
:
2px
;
}
}
}
}
}
.contextmenu
{
margin
:
0
;
background
:
#fff
;
z-index
:
3000
;
position
:
absolute
;
list-style-type
:
none
;
padding
:
5px
0
;
border-radius
:
4px
;
font-size
:
12px
;
font-weight
:
400
;
color
:
#333
;
box-shadow
:
2px
2px
3px
0
rgba
(
0
,
0
,
0
,
.3
);
li
{
.contextmenu
{
margin
:
0
;
padding
:
7px
16px
;
cursor
:
pointer
;
&
:hover
{
background
:
#eee
;
background
:
#fff
;
z-index
:
3000
;
position
:
absolute
;
list-style-type
:
none
;
padding
:
5px
0
;
border-radius
:
4px
;
font-size
:
12px
;
font-weight
:
400
;
color
:
#333
;
box-shadow
:
2px
2px
3px
0
rgba
(
0
,
0
,
0
,
.3
);
li
{
margin
:
0
;
padding
:
7px
16px
;
cursor
:
pointer
;
&
:hover
{
background
:
#eee
;
}
}
}
}
}
</
style
>
<
style
lang=
"scss"
>
//reset element css of el-icon-close
.tags-view-wrapper
{
.tags-view-item
{
.el-icon-close
{
width
:
16px
;
height
:
16px
;
vertical-align
:
2px
;
border-radius
:
50%
;
text-align
:
center
;
transition
:
all
.3s
cubic-bezier
(
.645
,
.045
,
.355
,
1
);
transform-origin
:
100%
50%
;
&
:before
{
transform
:
scale
(
.6
);
display
:
inline-block
;
vertical-align
:
-3px
;
}
&
:hover
{
background-color
:
#b4bccc
;
color
:
#fff
;
//reset element css of el-icon-close
.tags-view-wrapper
{
.tags-view-item
{
.el-icon-close
{
width
:
16px
;
height
:
16px
;
vertical-align
:
2px
;
border-radius
:
50%
;
text-align
:
center
;
transition
:
all
.3s
cubic-bezier
(
.645
,
.045
,
.355
,
1
);
transform-origin
:
100%
50%
;
&
:before
{
transform
:
scale
(
.6
);
display
:
inline-block
;
vertical-align
:
-3px
;
}
&
:hover
{
background-color
:
#b4bccc
;
color
:
#fff
;
}
}
}
}
}
</
style
>
src/router/index.js
View file @
86d4bd95
...
...
@@ -53,7 +53,7 @@ export const constantRoutes = [
path
:
'dashboard'
,
component
:
()
=>
import
(
'@/views/dashboard/index'
),
name
:
'Dashboard'
,
meta
:
{
title
:
'
dashboard
'
,
icon
:
'dashboard'
,
affix
:
true
}
meta
:
{
title
:
'
首页
'
,
icon
:
'dashboard'
,
affix
:
true
}
}
]
},
...
...
@@ -63,10 +63,10 @@ export const constantRoutes = [
redirect
:
'/guide/index'
,
children
:
[
{
path
:
'
pdf-view.vue
'
,
path
:
'
index
'
,
component
:
()
=>
import
(
'@/views/guide/index'
),
name
:
'Guide'
,
meta
:
{
title
:
'
guide
'
,
icon
:
'guide'
,
noCache
:
true
}
meta
:
{
title
:
'
引导页
'
,
icon
:
'guide'
,
noCache
:
true
}
}
]
},
...
...
@@ -77,7 +77,7 @@ export const constantRoutes = [
hidden
:
true
,
children
:
[
{
path
:
'
pdf-view.vue
'
,
path
:
'
index
'
,
component
:
()
=>
import
(
'@/views/profile/index'
),
name
:
'Profile'
,
meta
:
{
title
:
'profile'
,
icon
:
'user'
,
noCache
:
true
}
...
...
@@ -138,10 +138,10 @@ export const asyncRoutes = [
component
:
Layout
,
children
:
[
{
path
:
'
pdf-view.vue
'
,
path
:
'
index
'
,
component
:
()
=>
import
(
'@/views/icons/index'
),
name
:
'Icons'
,
meta
:
{
title
:
'
icons
'
,
icon
:
'icon'
,
noCache
:
true
}
meta
:
{
title
:
'
图标
'
,
icon
:
'icon'
,
noCache
:
true
}
}
]
},
...
...
@@ -189,7 +189,7 @@ export const asyncRoutes = [
component
:
Layout
,
children
:
[
{
path
:
'
pdf-view.vue
'
,
path
:
'
index
'
,
component
:
()
=>
import
(
'@/views/tab/index'
),
name
:
'Tab'
,
meta
:
{
title
:
'tab'
,
icon
:
'tab'
}
...
...
@@ -211,13 +211,13 @@ export const asyncRoutes = [
path
:
'401'
,
component
:
()
=>
import
(
'@/views/error-page/401'
),
name
:
'Page401'
,
meta
:
{
title
:
'
page
401'
,
noCache
:
true
}
meta
:
{
title
:
'401'
,
noCache
:
true
}
},
{
path
:
'404'
,
component
:
()
=>
import
(
'@/views/error-page/404'
),
name
:
'Page404'
,
meta
:
{
title
:
'
page
404'
,
noCache
:
true
}
meta
:
{
title
:
'404'
,
noCache
:
true
}
}
]
},
...
...
src/router/modules/components.js
View file @
86d4bd95
...
...
@@ -16,7 +16,7 @@ const componentsRouter = {
path
:
'tinymce'
,
component
:
()
=>
import
(
'@/views/components-demo/tinymce'
),
name
:
'TinymceDemo'
,
meta
:
{
title
:
'
tinymce
'
}
meta
:
{
title
:
'
富文本
'
}
},
// {
// path: 'markdown',
...
...
@@ -118,13 +118,13 @@ const componentsRouter = {
path
:
'dnd-list'
,
component
:
()
=>
import
(
'@/views/components-demo/dnd-list'
),
name
:
'DndListDemo'
,
meta
:
{
title
:
'
dndList
'
}
meta
:
{
title
:
'
列表拖拽
'
}
},
{
path
:
'drag-kanban'
,
component
:
()
=>
import
(
'@/views/components-demo/drag-kanban'
),
name
:
'DragKanbanDemo'
,
meta
:
{
title
:
'
dragKanban
'
}
meta
:
{
title
:
'
可拖拽看板
'
}
}
]
}
...
...
src/router/modules/table.js
View file @
86d4bd95
...
...
@@ -16,25 +16,25 @@ const tableRouter = {
path
:
'dynamic-table'
,
component
:
()
=>
import
(
'@/views/table/dynamic-table/index'
),
name
:
'DynamicTable'
,
meta
:
{
title
:
'
dynamic
Table'
}
meta
:
{
title
:
'
动态
Table'
}
},
{
path
:
'drag-table'
,
component
:
()
=>
import
(
'@/views/table/drag-table'
),
name
:
'DragTable'
,
meta
:
{
title
:
'
drag
Table'
}
meta
:
{
title
:
'
拖拽
Table'
}
},
{
path
:
'inline-edit-table'
,
component
:
()
=>
import
(
'@/views/table/inline-edit-table'
),
name
:
'InlineEditTable'
,
meta
:
{
title
:
'
inlineEditTable
'
}
meta
:
{
title
:
'
Table内编辑
'
}
},
{
path
:
'complex-table'
,
component
:
()
=>
import
(
'@/views/table/complex-table'
),
name
:
'ComplexTable'
,
meta
:
{
title
:
'
complex
Table'
}
meta
:
{
title
:
'
综合
Table'
}
}
]
}
...
...
src/utils/get-page-title.js
View file @
86d4bd95
import
defaultSettings
from
'@/settings'
import
i18n
from
'@/lang'
const
title
=
defaultSettings
.
title
||
'Vue Element Admin'
...
...
src/views/components-demo/tinymce.vue
View file @
86d4bd95
<
template
>
<div
class=
"components-container"
>
<aside>
{{
$t
(
'components.tinymceTips'
)
}}
<a
target=
"_blank"
class=
"link-type"
href=
"https://
panjiachen.github.io/vue-element-admin-site/component/rich-editor.html"
>
{{
$t
(
'components.documentation'
)
}}
</a>
富文本介绍见
<a
target=
"_blank"
class=
"link-type"
href=
"https://
github.com/tinymce/tinymce"
>
文档
</a>
</aside>
<div>
<tinymce
v-model=
"content"
:height=
"300"
/>
...
...
src/views/dashboard/index.vue
View file @
86d4bd95
<
template
>
<div
class=
"dashboard-container"
>
<component
:is=
"currentRole"
/>
首页
<!--
<component
:is=
"currentRole"
/>
-->
</div>
</
template
>
...
...
src/views/error-log/index.vue
View file @
86d4bd95
...
...
@@ -2,8 +2,7 @@
<div
class=
"errPage-container"
>
<ErrorA
/>
<ErrorB
/>
<!-- $t is vue-i18n global function to translate lang -->
<h3>
{{
$t
(
'errorLog.tips'
)
}}
</h3>
<h3>
{{
$t
(
'errorLog.tips'
)
}}
</h3>
<aside>
{{
$t
(
'errorLog.description'
)
}}
<a
target=
"_blank"
class=
"link-type"
href=
"https://panjiachen.github.io/vue-element-admin-site/guide/advanced/error.html"
>
...
...
src/views/excel/components/FilenameOption.vue
View file @
86d4bd95
<
template
>
<div
style=
"display:inline-block;"
>
<!-- $t is vue-i18n global function to translate lang -->
<label
class=
"radio-label"
style=
"padding-left:0;"
>
Filename:
</label>
<el-input
v-model=
"filename"
:placeholder=
"$t('excel.placeholder')"
style=
"width:350px;"
prefix-icon=
"el-icon-document"
/>
</div>
...
...
src/views/excel/export-excel.vue
View file @
86d4bd95
<
template
>
<!-- $t is vue-i18n global function to translate lang -->
<div
class=
"app-container"
>
<div>
<FilenameOption
v-model=
"filename"
/>
...
...
src/views/excel/select-excel.vue
View file @
86d4bd95
<
template
>
<div
class=
"app-container"
>
<!-- $t is vue-i18n global function to translate lang -->
<el-input
v-model=
"filename"
:placeholder=
"$t('excel.placeholder')"
style=
"width:350px;"
prefix-icon=
"el-icon-document"
/>
<el-button
:loading=
"downloadLoading"
style=
"margin-bottom:20px"
type=
"primary"
icon=
"el-icon-document"
@
click=
"handleDownload"
>
{{
$t
(
'excel.selectedExport'
)
}}
...
...
src/views/i18n-demo/index.vue
View file @
86d4bd95
<
template
>
F
<
template
>
<div>
<el-card
class=
"box-card"
style=
"margin-top:40px;"
>
<div
slot=
"header"
class=
"clearfix"
>
...
...
src/views/permission/role.vue
View file @
86d4bd95
...
...
@@ -112,7 +112,7 @@ export default {
},
i18n
(
routes
)
{
const
app
=
routes
.
map
(
route
=>
{
// route.title = i18n.t(`route.${route.title}`)
route
.
title
=
`route.
${
route
.
title
}
`
if
(
route
.
children
)
{
route
.
children
=
this
.
i18n
(
route
.
children
)
}
...
...
src/views/table/drag-table.vue
View file @
86d4bd95
...
...
@@ -52,7 +52,6 @@
<
/template
>
<
/el-table-column
>
<
/el-table
>
<!--
$t
is
vue
-
i18n
global
function
to
translate
lang
(
lang
in
@
/lang
)
--
>
<
div
class
=
"show-d"
>
<
el
-
tag
style
=
"margin-right:12px;"
>
{{
$t
(
'table.dragTips1'
)
}}
:
<
/el-tag> {{ oldList
}}
<
/div
>
...
...
src/views/zip/index.vue
View file @
86d4bd95
<
template
>
<div
class=
"app-container"
>
<!-- $t is vue-i18n global function to translate lang -->
<el-input
v-model=
"filename"
:placeholder=
"$t('zip.placeholder')"
style=
"width:300px;"
prefix-icon=
"el-icon-document"
/>
<el-button
:loading=
"downloadLoading"
style=
"margin-bottom:20px;"
type=
"primary"
icon=
"el-icon-document"
@
click=
"handleDownload"
>
{{
$t
(
'zip.export'
)
}}
Zip
...
...
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