Compare commits
8 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
63d39727ac | ||
|
1e0b9c0055 | ||
|
5f20bfc780 | ||
|
8851a68066 | ||
|
878628b0ed | ||
|
e254fc6c1a | ||
|
513eb66d97 | ||
|
62e1c851c8 |
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "vue-element-admin",
|
"name": "vue-element-admin",
|
||||||
"version": "3.7.2",
|
"version": "3.7.3",
|
||||||
"description": "A magical vue admin. Typical templates for enterprise applications. Newest development stack of vue. Lots of awesome features",
|
"description": "A magical vue admin. Typical templates for enterprise applications. Newest development stack of vue. Lots of awesome features",
|
||||||
"author": "Pan <panfree23@gmail.com>",
|
"author": "Pan <panfree23@gmail.com>",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
@@ -2,7 +2,7 @@
|
|||||||
<div class="upload-container">
|
<div class="upload-container">
|
||||||
<el-button icon='el-icon-upload' size="mini" :style="{background:color,borderColor:color}" @click=" dialogVisible=true" type="primary">上传图片
|
<el-button icon='el-icon-upload' size="mini" :style="{background:color,borderColor:color}" @click=" dialogVisible=true" type="primary">上传图片
|
||||||
</el-button>
|
</el-button>
|
||||||
<el-dialog append-to-body :visible.sync="dialogVisible">
|
<el-dialog :visible.sync="dialogVisible">
|
||||||
<el-upload class="editor-slide-upload" action="https://httpbin.org/post" :multiple="true" :file-list="fileList" :show-file-list="true"
|
<el-upload class="editor-slide-upload" action="https://httpbin.org/post" :multiple="true" :file-list="fileList" :show-file-list="true"
|
||||||
list-type="picture-card" :on-remove="handleRemove" :on-success="handleSuccess" :before-upload="beforeUpload">
|
list-type="picture-card" :on-remove="handleRemove" :on-success="handleSuccess" :before-upload="beforeUpload">
|
||||||
<el-button size="small" type="primary">点击上传</el-button>
|
<el-button size="small" type="primary">点击上传</el-button>
|
||||||
|
@@ -41,6 +41,11 @@ export default {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
const rawFile = files[0] // only use files[0]
|
const rawFile = files[0] // only use files[0]
|
||||||
|
|
||||||
|
if (!this.isExcel(rawFile)) {
|
||||||
|
this.$message.error('Only supports upload .xlsx, .xls, .csv suffix files')
|
||||||
|
return false
|
||||||
|
}
|
||||||
this.upload(rawFile)
|
this.upload(rawFile)
|
||||||
e.stopPropagation()
|
e.stopPropagation()
|
||||||
e.preventDefault()
|
e.preventDefault()
|
||||||
@@ -110,6 +115,9 @@ export default {
|
|||||||
headers.push(hdr)
|
headers.push(hdr)
|
||||||
}
|
}
|
||||||
return headers
|
return headers
|
||||||
|
},
|
||||||
|
isExcel(file) {
|
||||||
|
return /\.(xlsx|xls|csv)$/.test(file.name)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -20,8 +20,11 @@ const messages = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const i18n = new VueI18n({
|
const i18n = new VueI18n({
|
||||||
locale: Cookies.get('language') || 'en', // set locale
|
// set locale
|
||||||
messages // set locale messages
|
// options: en or zh
|
||||||
|
locale: Cookies.get('language') || 'en',
|
||||||
|
// set locale messages
|
||||||
|
messages
|
||||||
})
|
})
|
||||||
|
|
||||||
export default i18n
|
export default i18n
|
||||||
|
@@ -202,7 +202,7 @@ export const asyncRouterMap = [
|
|||||||
{
|
{
|
||||||
path: '/nested',
|
path: '/nested',
|
||||||
component: Layout,
|
component: Layout,
|
||||||
redirect: '/nested/menu1',
|
redirect: '/nested/menu1/menu1-1',
|
||||||
name: 'nested',
|
name: 'nested',
|
||||||
meta: {
|
meta: {
|
||||||
title: 'nested',
|
title: 'nested',
|
||||||
@@ -214,6 +214,7 @@ export const asyncRouterMap = [
|
|||||||
component: () => import('@/views/nested/menu1/index'), // Parent router-view
|
component: () => import('@/views/nested/menu1/index'), // Parent router-view
|
||||||
name: 'menu1',
|
name: 'menu1',
|
||||||
meta: { title: 'menu1' },
|
meta: { title: 'menu1' },
|
||||||
|
redirect: '/nested/menu1/menu1-1',
|
||||||
children: [
|
children: [
|
||||||
{
|
{
|
||||||
path: 'menu1-1',
|
path: 'menu1-1',
|
||||||
@@ -225,6 +226,7 @@ export const asyncRouterMap = [
|
|||||||
path: 'menu1-2',
|
path: 'menu1-2',
|
||||||
component: () => import('@/views/nested/menu1/menu1-2'),
|
component: () => import('@/views/nested/menu1/menu1-2'),
|
||||||
name: 'menu1-2',
|
name: 'menu1-2',
|
||||||
|
redirect: '/nested/menu1/menu1-2/menu1-2-1',
|
||||||
meta: { title: 'menu1-2' },
|
meta: { title: 'menu1-2' },
|
||||||
children: [
|
children: [
|
||||||
{
|
{
|
||||||
@@ -251,6 +253,7 @@ export const asyncRouterMap = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: 'menu2',
|
path: 'menu2',
|
||||||
|
name: 'menu2',
|
||||||
component: () => import('@/views/nested/menu2/index'),
|
component: () => import('@/views/nested/menu2/index'),
|
||||||
meta: { title: 'menu2' }
|
meta: { title: 'menu2' }
|
||||||
}
|
}
|
||||||
|
@@ -38,7 +38,7 @@ const tagsView = {
|
|||||||
for (const i of state.cachedViews) {
|
for (const i of state.cachedViews) {
|
||||||
if (i === view.name) {
|
if (i === view.name) {
|
||||||
const index = state.cachedViews.indexOf(i)
|
const index = state.cachedViews.indexOf(i)
|
||||||
state.cachedViews = state.cachedViews.slice(index, i + 1)
|
state.cachedViews = state.cachedViews.slice(index, index + 1)
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -72,7 +72,7 @@ export default {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
setLocalStorgae() {
|
setLocalStorage() {
|
||||||
window.localStorage.setItem(STORAGE_KEY, JSON.stringify(this.todos))
|
window.localStorage.setItem(STORAGE_KEY, JSON.stringify(this.todos))
|
||||||
},
|
},
|
||||||
addTodo(e) {
|
addTodo(e) {
|
||||||
@@ -82,30 +82,30 @@ export default {
|
|||||||
text,
|
text,
|
||||||
done: false
|
done: false
|
||||||
})
|
})
|
||||||
this.setLocalStorgae()
|
this.setLocalStorage()
|
||||||
}
|
}
|
||||||
e.target.value = ''
|
e.target.value = ''
|
||||||
},
|
},
|
||||||
toggleTodo(val) {
|
toggleTodo(val) {
|
||||||
val.done = !val.done
|
val.done = !val.done
|
||||||
this.setLocalStorgae()
|
this.setLocalStorage()
|
||||||
},
|
},
|
||||||
deleteTodo(todo) {
|
deleteTodo(todo) {
|
||||||
this.todos.splice(this.todos.indexOf(todo), 1)
|
this.todos.splice(this.todos.indexOf(todo), 1)
|
||||||
this.setLocalStorgae()
|
this.setLocalStorage()
|
||||||
},
|
},
|
||||||
editTodo({ todo, value }) {
|
editTodo({ todo, value }) {
|
||||||
todo.text = value
|
todo.text = value
|
||||||
this.setLocalStorgae()
|
this.setLocalStorage()
|
||||||
},
|
},
|
||||||
clearCompleted() {
|
clearCompleted() {
|
||||||
this.todos = this.todos.filter(todo => !todo.done)
|
this.todos = this.todos.filter(todo => !todo.done)
|
||||||
this.setLocalStorgae()
|
this.setLocalStorage()
|
||||||
},
|
},
|
||||||
toggleAll({ done }) {
|
toggleAll({ done }) {
|
||||||
this.todos.forEach(todo => {
|
this.todos.forEach(todo => {
|
||||||
todo.done = done
|
todo.done = done
|
||||||
this.setLocalStorgae()
|
this.setLocalStorage()
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@@ -1,10 +1,10 @@
|
|||||||
<template>
|
<template>
|
||||||
<div v-if="!item.hidden&&item.children" class="menu-wrapper">
|
<div v-if="!item.hidden&&item.children" class="menu-wrapper">
|
||||||
|
|
||||||
<router-link v-if="hasOneShowingChildren(item.children) && !item.children[0].children&&!item.alwaysShow" :to="resolvePath(item.children[0].path)">
|
<router-link v-if="hasOneShowingChild(item.children) && !onlyOneChild.children&&!item.alwaysShow" :to="resolvePath(onlyOneChild.path)">
|
||||||
<el-menu-item :index="resolvePath(item.children[0].path)" :class="{'submenu-title-noDropdown':!isNest}">
|
<el-menu-item :index="resolvePath(onlyOneChild.path)" :class="{'submenu-title-noDropdown':!isNest}">
|
||||||
<svg-icon v-if="item.children[0].meta&&item.children[0].meta.icon" :icon-class="item.children[0].meta.icon"></svg-icon>
|
<svg-icon v-if="onlyOneChild.meta&&onlyOneChild.meta.icon" :icon-class="onlyOneChild.meta.icon"></svg-icon>
|
||||||
<span v-if="item.children[0].meta&&item.children[0].meta.title" slot="title">{{generateTitle(item.children[0].meta.title)}}</span>
|
<span v-if="onlyOneChild.meta&&onlyOneChild.meta.title" slot="title">{{generateTitle(onlyOneChild.meta.title)}}</span>
|
||||||
</el-menu-item>
|
</el-menu-item>
|
||||||
</router-link>
|
</router-link>
|
||||||
|
|
||||||
@@ -36,7 +36,8 @@ import { generateTitle } from '@/utils/i18n'
|
|||||||
export default {
|
export default {
|
||||||
name: 'SidebarItem',
|
name: 'SidebarItem',
|
||||||
props: {
|
props: {
|
||||||
item: { // route配置json
|
// route object
|
||||||
|
item: {
|
||||||
type: Object,
|
type: Object,
|
||||||
required: true
|
required: true
|
||||||
},
|
},
|
||||||
@@ -49,10 +50,21 @@ export default {
|
|||||||
default: ''
|
default: ''
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
onlyOneChild: null
|
||||||
|
}
|
||||||
|
},
|
||||||
methods: {
|
methods: {
|
||||||
hasOneShowingChildren(children) {
|
hasOneShowingChild(children) {
|
||||||
const showingChildren = children.filter(item => {
|
const showingChildren = children.filter(item => {
|
||||||
return !item.hidden
|
if (item.hidden) {
|
||||||
|
return false
|
||||||
|
} else {
|
||||||
|
// temp set(will be used if only has one showing child )
|
||||||
|
this.onlyOneChild = item
|
||||||
|
return true
|
||||||
|
}
|
||||||
})
|
})
|
||||||
if (showingChildren.length === 1) {
|
if (showingChildren.length === 1) {
|
||||||
return true
|
return true
|
||||||
|
Reference in New Issue
Block a user