Compare commits

...

8 Commits

Author SHA1 Message Date
Pan
63d39727ac [release] 3.7.3 2018-07-31 11:14:18 +08:00
Pan
1e0b9c0055 fix[Tinymce]: fixed tinymce upload dialog bug #654 2018-07-31 11:12:38 +08:00
mimimi
5f20bfc780 fixed[tagsView]: DEL_OTHERS_VIEWS cachedViews bug (#913)
* mutations DEL_OTHERS_VIEWS state.cachedViews -> i type is string slice(begin: number, end: number)
2018-07-25 17:20:32 +08:00
mimimi
8851a68066 tweak setLocalStorgae -> setLocalStorage (#894) 2018-07-20 16:02:38 +08:00
Pan
878628b0ed tweak code comments 2018-07-20 10:25:14 +08:00
Pan
e254fc6c1a fix[Sidebar]: fixed sidebar bug when set hidden:true #880 2018-07-17 18:13:29 +08:00
花裤衩
513eb66d97 fix[UploadExcel]: add file type check (#878) 2018-07-17 13:30:52 +08:00
Pan
62e1c851c8 tweak 2018-07-16 11:18:13 +08:00
8 changed files with 46 additions and 20 deletions

View File

@@ -1,6 +1,6 @@
{
"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",
"author": "Pan <panfree23@gmail.com>",
"license": "MIT",

View File

@@ -2,7 +2,7 @@
<div class="upload-container">
<el-button icon='el-icon-upload' size="mini" :style="{background:color,borderColor:color}" @click=" dialogVisible=true" type="primary">上传图片
</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"
list-type="picture-card" :on-remove="handleRemove" :on-success="handleSuccess" :before-upload="beforeUpload">
<el-button size="small" type="primary">点击上传</el-button>

View File

@@ -41,6 +41,11 @@ export default {
return
}
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)
e.stopPropagation()
e.preventDefault()
@@ -110,6 +115,9 @@ export default {
headers.push(hdr)
}
return headers
},
isExcel(file) {
return /\.(xlsx|xls|csv)$/.test(file.name)
}
}
}

View File

@@ -20,8 +20,11 @@ const messages = {
}
const i18n = new VueI18n({
locale: Cookies.get('language') || 'en', // set locale
messages // set locale messages
// set locale
// options: en or zh
locale: Cookies.get('language') || 'en',
// set locale messages
messages
})
export default i18n

View File

@@ -202,7 +202,7 @@ export const asyncRouterMap = [
{
path: '/nested',
component: Layout,
redirect: '/nested/menu1',
redirect: '/nested/menu1/menu1-1',
name: 'nested',
meta: {
title: 'nested',
@@ -214,6 +214,7 @@ export const asyncRouterMap = [
component: () => import('@/views/nested/menu1/index'), // Parent router-view
name: 'menu1',
meta: { title: 'menu1' },
redirect: '/nested/menu1/menu1-1',
children: [
{
path: 'menu1-1',
@@ -225,6 +226,7 @@ export const asyncRouterMap = [
path: 'menu1-2',
component: () => import('@/views/nested/menu1/menu1-2'),
name: 'menu1-2',
redirect: '/nested/menu1/menu1-2/menu1-2-1',
meta: { title: 'menu1-2' },
children: [
{
@@ -251,6 +253,7 @@ export const asyncRouterMap = [
},
{
path: 'menu2',
name: 'menu2',
component: () => import('@/views/nested/menu2/index'),
meta: { title: 'menu2' }
}

View File

@@ -38,7 +38,7 @@ const tagsView = {
for (const i of state.cachedViews) {
if (i === view.name) {
const index = state.cachedViews.indexOf(i)
state.cachedViews = state.cachedViews.slice(index, i + 1)
state.cachedViews = state.cachedViews.slice(index, index + 1)
break
}
}

View File

@@ -72,7 +72,7 @@ export default {
}
},
methods: {
setLocalStorgae() {
setLocalStorage() {
window.localStorage.setItem(STORAGE_KEY, JSON.stringify(this.todos))
},
addTodo(e) {
@@ -82,30 +82,30 @@ export default {
text,
done: false
})
this.setLocalStorgae()
this.setLocalStorage()
}
e.target.value = ''
},
toggleTodo(val) {
val.done = !val.done
this.setLocalStorgae()
this.setLocalStorage()
},
deleteTodo(todo) {
this.todos.splice(this.todos.indexOf(todo), 1)
this.setLocalStorgae()
this.setLocalStorage()
},
editTodo({ todo, value }) {
todo.text = value
this.setLocalStorgae()
this.setLocalStorage()
},
clearCompleted() {
this.todos = this.todos.filter(todo => !todo.done)
this.setLocalStorgae()
this.setLocalStorage()
},
toggleAll({ done }) {
this.todos.forEach(todo => {
todo.done = done
this.setLocalStorgae()
this.setLocalStorage()
})
}
},

View File

@@ -1,10 +1,10 @@
<template>
<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)">
<el-menu-item :index="resolvePath(item.children[0].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>
<span v-if="item.children[0].meta&&item.children[0].meta.title" slot="title">{{generateTitle(item.children[0].meta.title)}}</span>
<router-link v-if="hasOneShowingChild(item.children) && !onlyOneChild.children&&!item.alwaysShow" :to="resolvePath(onlyOneChild.path)">
<el-menu-item :index="resolvePath(onlyOneChild.path)" :class="{'submenu-title-noDropdown':!isNest}">
<svg-icon v-if="onlyOneChild.meta&&onlyOneChild.meta.icon" :icon-class="onlyOneChild.meta.icon"></svg-icon>
<span v-if="onlyOneChild.meta&&onlyOneChild.meta.title" slot="title">{{generateTitle(onlyOneChild.meta.title)}}</span>
</el-menu-item>
</router-link>
@@ -36,7 +36,8 @@ import { generateTitle } from '@/utils/i18n'
export default {
name: 'SidebarItem',
props: {
item: { // route配置json
// route object
item: {
type: Object,
required: true
},
@@ -49,10 +50,21 @@ export default {
default: ''
}
},
data() {
return {
onlyOneChild: null
}
},
methods: {
hasOneShowingChildren(children) {
hasOneShowingChild(children) {
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) {
return true