Merge pull request #2 from PanJiaChen/master

merge from origin master
This commit is contained in:
dingangang 2019-09-30 15:12:07 +08:00 committed by GitHub
commit 07c05489fc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
33 changed files with 1268 additions and 833 deletions

View File

@ -12,3 +12,24 @@ about: Asking questions about use
Before asking a question, please make sure that you have tried your best to solve this problem. Before asking a question, please make sure that you have tried your best to solve this problem.
If it's a code-related issue, please don't just take screenshots. Please provide an online demo to save each other's time. If it's a code-related issue, please don't just take screenshots. Please provide an online demo to save each other's time.
--> -->
#### Steps to reproduce问题复现步骤
<!--
1. [xxx]
2. [xxx]
3. [xxxx]
-->
#### Screenshot or Gif截图或动态图
#### Link to minimal reproduction最小可在线还原demo
<!--
Please only use Codepen, JSFiddle, CodeSandbox or a github repo
-->
#### Other relevant information格外信息
- Your OS:
- Node.js version:
- vue-element-admin version:

View File

@ -49,6 +49,7 @@ Vue Element Admin es una solución práctica basada en la nueva plataforma de de
- Plantilla base recomendada para usar: [vue-admin-template](https://github.com/PanJiaChen/vue-admin-template) - Plantilla base recomendada para usar: [vue-admin-template](https://github.com/PanJiaChen/vue-admin-template)
- Aplicación de Escritorio: [electron-vue-admin](https://github.com/PanJiaChen/electron-vue-admin) - Aplicación de Escritorio: [electron-vue-admin](https://github.com/PanJiaChen/electron-vue-admin)
- Plantilla de Typescript: [vue-typescript-admin-template](https://github.com/Armour/vue-typescript-admin-template) (Créditos: [@Armour](https://github.com/Armour)) - Plantilla de Typescript: [vue-typescript-admin-template](https://github.com/Armour/vue-typescript-admin-template) (Créditos: [@Armour](https://github.com/Armour))
- [awesome-project](https://github.com/PanJiaChen/vue-element-admin/issues/2312)
**Después de la versión `v4.1.0+`, la rama por defecto master no tendrá soporte para i18n. Por favor use [i18n](https://github.com/PanJiaChen/vue-element-admin/tree/i18n), los cambios serán incluidos en la rama master** **Después de la versión `v4.1.0+`, la rama por defecto master no tendrá soporte para i18n. Por favor use [i18n](https://github.com/PanJiaChen/vue-element-admin/tree/i18n), los cambios serán incluidos en la rama master**

View File

@ -45,6 +45,7 @@
- おすすめシンプルテンプレート: [vue-admin-template](https://github.com/PanJiaChen/vue-admin-template) - おすすめシンプルテンプレート: [vue-admin-template](https://github.com/PanJiaChen/vue-admin-template)
- デスクトップバージョン: [electron-vue-admin](https://github.com/PanJiaChen/electron-vue-admin) - デスクトップバージョン: [electron-vue-admin](https://github.com/PanJiaChen/electron-vue-admin)
- Typescriptバージョン: [vue-typescript-admin-template](https://github.com/Armour/vue-typescript-admin-template) (鸣谢: [@Armour](https://github.com/Armour)) - Typescriptバージョン: [vue-typescript-admin-template](https://github.com/Armour/vue-typescript-admin-template) (鸣谢: [@Armour](https://github.com/Armour))
- [awesome-project](https://github.com/PanJiaChen/vue-element-admin/issues/2312)
**After the `v4.1.0+` version, the default master branch will not support i18n. Please use [i18n Branch](https://github.com/PanJiaChen/vue-element-admin/tree/i18n), it will keep up with the master update** **After the `v4.1.0+` version, the default master branch will not support i18n. Please use [i18n Branch](https://github.com/PanJiaChen/vue-element-admin/tree/i18n), it will keep up with the master update**

View File

@ -49,6 +49,7 @@ It is a magical vue admin based on the newest development stack of vue, built-in
- Base template recommends using: [vue-admin-template](https://github.com/PanJiaChen/vue-admin-template) - Base template recommends using: [vue-admin-template](https://github.com/PanJiaChen/vue-admin-template)
- Desktop: [electron-vue-admin](https://github.com/PanJiaChen/electron-vue-admin) - Desktop: [electron-vue-admin](https://github.com/PanJiaChen/electron-vue-admin)
- Typescript: [vue-typescript-admin-template](https://github.com/Armour/vue-typescript-admin-template) (Credits: [@Armour](https://github.com/Armour)) - Typescript: [vue-typescript-admin-template](https://github.com/Armour/vue-typescript-admin-template) (Credits: [@Armour](https://github.com/Armour))
- [awesome-project](https://github.com/PanJiaChen/vue-element-admin/issues/2312)
**After the `v4.1.0+` version, the default master branch will not support i18n. Please use [i18n Branch](https://github.com/PanJiaChen/vue-element-admin/tree/i18n), it will keep up with the master update** **After the `v4.1.0+` version, the default master branch will not support i18n. Please use [i18n Branch](https://github.com/PanJiaChen/vue-element-admin/tree/i18n), it will keep up with the master update**

View File

@ -49,6 +49,7 @@
- 基础模板建议使用: [vue-admin-template](https://github.com/PanJiaChen/vue-admin-template) - 基础模板建议使用: [vue-admin-template](https://github.com/PanJiaChen/vue-admin-template)
- 桌面端: [electron-vue-admin](https://github.com/PanJiaChen/electron-vue-admin) - 桌面端: [electron-vue-admin](https://github.com/PanJiaChen/electron-vue-admin)
- Typescript 版: [vue-typescript-admin-template](https://github.com/Armour/vue-typescript-admin-template) (鸣谢: [@Armour](https://github.com/Armour)) - Typescript 版: [vue-typescript-admin-template](https://github.com/Armour/vue-typescript-admin-template) (鸣谢: [@Armour](https://github.com/Armour))
- [awesome-project](https://github.com/PanJiaChen/vue-element-admin/issues/2312)
**`v4.1.0+`版本之后默认 master 分支将不支持国际化,有需要的请使用[i18n](https://github.com/PanJiaChen/vue-element-admin/tree/i18n)分支,它会和 master 保持同步更新** **`v4.1.0+`版本之后默认 master 分支将不支持国际化,有需要的请使用[i18n](https://github.com/PanJiaChen/vue-element-admin/tree/i18n)分支,它会和 master 保持同步更新**
@ -164,7 +165,7 @@ cd vue-element-admin
# 安装依赖 # 安装依赖
npm install npm install
# 建议不要直接使用 cnpm 安装以来,会有各种诡异的 bug。可以通过如下操作解决 npm 下载速度慢的问题 # 建议不要直接使用 cnpm 安装依赖,会有各种诡异的 bug。可以通过如下操作解决 npm 下载速度慢的问题
npm install --registry=https://registry.npm.taobao.org npm install --registry=https://registry.npm.taobao.org
# 启动服务 # 启动服务

9
jsconfig.json Normal file
View File

@ -0,0 +1,9 @@
{
"compilerOptions": {
"baseUrl": "./",
"paths": {
"@/*": ["src/*"]
}
},
"exclude": ["node_modules", "dist"]
}

View File

@ -1,6 +1,6 @@
{ {
"name": "vue-element-admin", "name": "vue-element-admin",
"version": "4.2.0", "version": "4.2.1",
"description": "A magical vue admin. An out-of-box UI solution for enterprise applications. Newest development stack of vue. Lots of awesome features", "description": "A magical vue admin. An out-of-box UI solution 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",
@ -43,7 +43,7 @@
"url": "https://github.com/PanJiaChen/vue-element-admin/issues" "url": "https://github.com/PanJiaChen/vue-element-admin/issues"
}, },
"dependencies": { "dependencies": {
"axios": "0.18.0", "axios": "0.18.1",
"clipboard": "2.0.4", "clipboard": "2.0.4",
"codemirror": "5.45.0", "codemirror": "5.45.0",
"driver.js": "0.9.5", "driver.js": "0.9.5",
@ -74,10 +74,11 @@
"@babel/core": "7.0.0", "@babel/core": "7.0.0",
"@babel/register": "7.0.0", "@babel/register": "7.0.0",
"@vue/cli-plugin-babel": "3.5.3", "@vue/cli-plugin-babel": "3.5.3",
"@vue/cli-plugin-eslint": "3.5.1", "@vue/cli-plugin-eslint": "^3.9.1",
"@vue/cli-plugin-unit-jest": "3.5.3", "@vue/cli-plugin-unit-jest": "3.5.3",
"@vue/cli-service": "3.5.3", "@vue/cli-service": "3.5.3",
"@vue/test-utils": "1.0.0-beta.29", "@vue/test-utils": "1.0.0-beta.29",
"autoprefixer": "^9.5.1",
"babel-core": "7.0.0-bridge.0", "babel-core": "7.0.0-bridge.0",
"babel-eslint": "10.0.1", "babel-eslint": "10.0.1",
"babel-jest": "23.6.0", "babel-jest": "23.6.0",

File diff suppressed because it is too large Load Diff

View File

@ -9,7 +9,7 @@
:placeholder="fillPlaceHolder" :placeholder="fillPlaceHolder"
:readonly="readonly" :readonly="readonly"
:disabled="disabled" :disabled="disabled"
:autoComplete="autoComplete" :autocomplete="autoComplete"
:required="required" :required="required"
type="email" type="email"
class="material-input" class="material-input"
@ -24,7 +24,7 @@
:placeholder="fillPlaceHolder" :placeholder="fillPlaceHolder"
:readonly="readonly" :readonly="readonly"
:disabled="disabled" :disabled="disabled"
:autoComplete="autoComplete" :autocomplete="autoComplete"
:required="required" :required="required"
type="url" type="url"
class="material-input" class="material-input"
@ -40,7 +40,7 @@
:step="step" :step="step"
:readonly="readonly" :readonly="readonly"
:disabled="disabled" :disabled="disabled"
:autoComplete="autoComplete" :autocomplete="autoComplete"
:max="max" :max="max"
:min="min" :min="min"
:minlength="minlength" :minlength="minlength"
@ -59,7 +59,7 @@
:placeholder="fillPlaceHolder" :placeholder="fillPlaceHolder"
:readonly="readonly" :readonly="readonly"
:disabled="disabled" :disabled="disabled"
:autoComplete="autoComplete" :autocomplete="autoComplete"
:max="max" :max="max"
:min="min" :min="min"
:required="required" :required="required"
@ -76,7 +76,7 @@
:placeholder="fillPlaceHolder" :placeholder="fillPlaceHolder"
:readonly="readonly" :readonly="readonly"
:disabled="disabled" :disabled="disabled"
:autoComplete="autoComplete" :autocomplete="autoComplete"
:required="required" :required="required"
type="tel" type="tel"
class="material-input" class="material-input"
@ -91,7 +91,7 @@
:placeholder="fillPlaceHolder" :placeholder="fillPlaceHolder"
:readonly="readonly" :readonly="readonly"
:disabled="disabled" :disabled="disabled"
:autoComplete="autoComplete" :autocomplete="autoComplete"
:minlength="minlength" :minlength="minlength"
:maxlength="maxlength" :maxlength="maxlength"
:required="required" :required="required"

View File

@ -5,7 +5,8 @@
<slot /> <slot />
</div> </div>
</div> </div>
<img :src="image" class="pan-thumb"> <!-- eslint-disable-next-line -->
<div :style="{backgroundImage: `url(${image})`}" class="pan-thumb"></div>
</div> </div>
</template> </template>
@ -52,7 +53,8 @@ export default {
.pan-thumb { .pan-thumb {
width: 100%; width: 100%;
height: 100%; height: 100%;
background-size: 100%; background-position: center center;
background-size: cover;
border-radius: 50%; border-radius: 50%;
overflow: hidden; overflow: hidden;
position: absolute; position: absolute;
@ -60,7 +62,7 @@ export default {
transition: all 0.3s ease-in-out; transition: all 0.3s ease-in-out;
} }
.pan-thumb:after { /* .pan-thumb:after {
content: ''; content: '';
width: 8px; width: 8px;
height: 8px; height: 8px;
@ -71,7 +73,7 @@ export default {
margin: -4px 0 0 -4px; margin: -4px 0 0 -4px;
background: radial-gradient(ellipse at center, rgba(14, 14, 14, 1) 0%, rgba(125, 126, 125, 1) 100%); background: radial-gradient(ellipse at center, rgba(14, 14, 14, 1) 0%, rgba(125, 126, 125, 1) 100%);
box-shadow: 0 0 1px rgba(255, 255, 255, 0.9); box-shadow: 0 0 1px rgba(255, 255, 255, 0.9);
} } */
.pan-info { .pan-info {
position: absolute; position: absolute;

View File

@ -1,3 +1,11 @@
let callbacks = []
function loadedTinymce() {
// to fixed https://github.com/PanJiaChen/vue-element-admin/issues/2144
// check is successfully downloaded script
return window.tinymce
}
const dynamicLoadScript = (src, callback) => { const dynamicLoadScript = (src, callback) => {
const existingScript = document.getElementById(src) const existingScript = document.getElementById(src)
const cb = callback || function() {} const cb = callback || function() {}
@ -7,19 +15,28 @@ const dynamicLoadScript = (src, callback) => {
script.src = src // src url for the third-party library being loaded. script.src = src // src url for the third-party library being loaded.
script.id = src script.id = src
document.body.appendChild(script) document.body.appendChild(script)
callbacks.push(cb)
const onEnd = 'onload' in script ? stdOnEnd : ieOnEnd const onEnd = 'onload' in script ? stdOnEnd : ieOnEnd
onEnd(script, cb) onEnd(script)
} }
if (existingScript && cb) cb(null, existingScript) if (existingScript && cb) {
if (loadedTinymce()) {
cb(null, existingScript)
} else {
callbacks.push(cb)
}
}
function stdOnEnd(script, cb) { function stdOnEnd(script) {
script.onload = function() { script.onload = function() {
// this.onload = null here is necessary // this.onload = null here is necessary
// because even IE9 works not like others // because even IE9 works not like others
this.onerror = this.onload = null this.onerror = this.onload = null
cb(null, script) for (const cb of callbacks) {
cb(null, script)
}
callbacks = null
} }
script.onerror = function() { script.onerror = function() {
this.onerror = this.onload = null this.onerror = this.onload = null
@ -27,11 +44,14 @@ const dynamicLoadScript = (src, callback) => {
} }
} }
function ieOnEnd(script, cb) { function ieOnEnd(script) {
script.onreadystatechange = function() { script.onreadystatechange = function() {
if (this.readyState !== 'complete' && this.readyState !== 'loaded') return if (this.readyState !== 'complete' && this.readyState !== 'loaded') return
this.onreadystatechange = null this.onreadystatechange = null
cb(null, script) // there is no way to catch loading errors in IE8 for (const cb of callbacks) {
cb(null, script) // there is no way to catch loading errors in IE8
}
callbacks = null
} }
} }
} }

View File

@ -64,7 +64,9 @@ export default {
fullscreen: false, fullscreen: false,
languageTypeList: { languageTypeList: {
'en': 'en', 'en': 'en',
'zh': 'zh_CN' 'zh': 'zh_CN',
'es': 'es_MX',
'ja': 'ja'
} }
} }
}, },
@ -114,6 +116,7 @@ export default {
const _this = this const _this = this
window.tinymce.init({ window.tinymce.init({
selector: `#${this.tinymceId}`, selector: `#${this.tinymceId}`,
language: this.languageTypeList['en'],
height: this.height, height: this.height,
body_class: 'panel-body ', body_class: 'panel-body ',
object_resizing: false, object_resizing: false,

View File

@ -45,7 +45,7 @@ export function numberFormatter(num, digits) {
] ]
for (let i = 0; i < si.length; i++) { for (let i = 0; i < si.length; i++) {
if (num >= si[i].value) { if (num >= si[i].value) {
return (num / si[i].value + 0.1).toFixed(digits).replace(/\.0+$|(\.[0-9]*[1-9])0+$/, '$1') + si[i].symbol return (num / si[i].value).toFixed(digits).replace(/\.0+$|(\.[0-9]*[1-9])0+$/, '$1') + si[i].symbol
} }
} }
return num.toString() return num.toString()

View File

@ -16,7 +16,7 @@ export default {
return this.$store.state.tagsView.cachedViews return this.$store.state.tagsView.cachedViews
}, },
key() { key() {
return this.$route.fullPath return this.$route.path
} }
} }
} }

View File

@ -22,14 +22,10 @@ export default function handleClipboard(text, event) {
}) })
clipboard.on('success', () => { clipboard.on('success', () => {
clipboardSuccess() clipboardSuccess()
clipboard.off('error')
clipboard.off('success')
clipboard.destroy() clipboard.destroy()
}) })
clipboard.on('error', () => { clipboard.on('error', () => {
clipboardError() clipboardError()
clipboard.off('error')
clipboard.off('success')
clipboard.destroy() clipboard.destroy()
}) })
clipboard.onClick(event) clipboard.onClick(event)

View File

@ -6,7 +6,7 @@ import { getToken } from '@/utils/auth'
// create an axios instance // create an axios instance
const service = axios.create({ const service = axios.create({
baseURL: process.env.VUE_APP_BASE_API, // url = base url + request url baseURL: process.env.VUE_APP_BASE_API, // url = base url + request url
withCredentials: true, // send cookies when cross-domain requests // withCredentials: true, // send cookies when cross-domain requests
timeout: 5000 // request timeout timeout: 5000 // request timeout
}) })
@ -48,7 +48,7 @@ service.interceptors.response.use(
// if the custom code is not 20000, it is judged as an error. // if the custom code is not 20000, it is judged as an error.
if (res.code !== 20000) { if (res.code !== 20000) {
Message({ Message({
message: res.message || 'error', message: res.message || 'Error',
type: 'error', type: 'error',
duration: 5 * 1000 duration: 5 * 1000
}) })
@ -66,7 +66,7 @@ service.interceptors.response.use(
}) })
}) })
} }
return Promise.reject(res.message || 'error') return Promise.reject(new Error(res.message || 'Error'))
} else { } else {
return res return res
} }

View File

@ -1,5 +1,5 @@
/* eslint-disable */ /* eslint-disable */
require('script-loader!file-saver'); import { saveAs } from 'file-saver'
import XLSX from 'xlsx' import XLSX from 'xlsx'
function generateArray(table) { function generateArray(table) {
@ -151,14 +151,14 @@ export function export_json_to_excel({
filename, filename,
merges = [], merges = [],
autoWidth = true, autoWidth = true,
bookType= 'xlsx' bookType = 'xlsx'
} = {}) { } = {}) {
/* original data */ /* original data */
filename = filename || 'excel-list' filename = filename || 'excel-list'
data = [...data] data = [...data]
data.unshift(header); data.unshift(header);
for (let i = multiHeader.length-1; i > -1; i--) { for (let i = multiHeader.length - 1; i > -1; i--) {
data.unshift(multiHeader[i]) data.unshift(multiHeader[i])
} }

View File

@ -1,5 +1,5 @@
/* eslint-disable */ /* eslint-disable */
require('script-loader!file-saver'); import { saveAs } from 'file-saver'
import JSZip from 'jszip' import JSZip from 'jszip'
export function export_txt_to_zip(th, jsonData, txtName, zipName) { export function export_txt_to_zip(th, jsonData, txtName, zipName) {

View File

@ -3,13 +3,13 @@
<el-tabs v-model="activeName"> <el-tabs v-model="activeName">
<el-tab-pane label="use clipboard directly" name="directly"> <el-tab-pane label="use clipboard directly" name="directly">
<el-input v-model="inputData" placeholder="Please input" style="width:400px;max-width:100%;" /> <el-input v-model="inputData" placeholder="Please input" style="width:400px;max-width:100%;" />
<el-button type="primary" icon="document" @click="handleCopy(inputData,$event)"> <el-button type="primary" icon="el-icon-document" @click="handleCopy(inputData,$event)">
copy copy
</el-button> </el-button>
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="use clipboard by v-directive" name="v-directive"> <el-tab-pane label="use clipboard by v-directive" name="v-directive">
<el-input v-model="inputData" placeholder="Please input" style="width:400px;max-width:100%;" /> <el-input v-model="inputData" placeholder="Please input" style="width:400px;max-width:100%;" />
<el-button v-clipboard:copy="inputData" v-clipboard:success="clipboardSuccess" type="primary" icon="document"> <el-button v-clipboard:copy="inputData" v-clipboard:success="clipboardSuccess" type="primary" icon="el-icon-document">
copy copy
</el-button> </el-button>
</el-tab-pane> </el-tab-pane>

View File

@ -7,7 +7,7 @@
<pan-thumb :image="image" /> <pan-thumb :image="image" />
<el-button type="primary" icon="upload" style="position: absolute;bottom: 15px;margin-left: 40px;" @click="imagecropperShow=true"> <el-button type="primary" icon="el-icon-upload" style="position: absolute;bottom: 15px;margin-left: 40px;" @click="imagecropperShow=true">
Change Avatar Change Avatar
</el-button> </el-button>

View File

@ -49,7 +49,7 @@
<div style="height:100px;"> <div style="height:100px;">
<el-form :model="demo" :rules="demoRules"> <el-form :model="demo" :rules="demoRules">
<el-form-item prop="title"> <el-form-item prop="title">
<md-input v-model="demo.title" icon="search" name="title" placeholder="输入标题"> <md-input v-model="demo.title" icon="el-icon-search" name="title" placeholder="输入标题">
标题 标题
</md-input> </md-input>
</el-form-item> </el-form-item>

View File

@ -3,10 +3,16 @@ import { debounce } from '@/utils'
export default { export default {
data() { data() {
return { return {
$_sidebarElm: null $_sidebarElm: null,
$_resizeHandler: null
} }
}, },
mounted() { mounted() {
this.$_resizeHandler = debounce(() => {
if (this.chart) {
this.chart.resize()
}
}, 100)
this.$_initResizeEvent() this.$_initResizeEvent()
this.$_initSidebarResizeEvent() this.$_initSidebarResizeEvent()
}, },
@ -27,13 +33,6 @@ export default {
methods: { methods: {
// use $_ for mixins properties // use $_ for mixins properties
// https://vuejs.org/v2/style-guide/index.html#Private-property-names-essential // https://vuejs.org/v2/style-guide/index.html#Private-property-names-essential
$_resizeHandler() {
return debounce(() => {
if (this.chart) {
this.chart.resize()
}
}, 100)()
},
$_initResizeEvent() { $_initResizeEvent() {
window.addEventListener('resize', this.$_resizeHandler) window.addEventListener('resize', this.$_resizeHandler)
}, },

View File

@ -1,6 +1,6 @@
<template> <template>
<div class="errPage-container"> <div class="errPage-container">
<el-button icon="arrow-left" class="pan-back-btn" @click="back"> <el-button icon="el-icon-arrow-left" class="pan-back-btn" @click="back">
返回 返回
</el-button> </el-button>
<el-row> <el-row>

View File

@ -7,7 +7,7 @@
<PlatformDropdown v-model="postForm.platforms" /> <PlatformDropdown v-model="postForm.platforms" />
<SourceUrlDropdown v-model="postForm.source_uri" /> <SourceUrlDropdown v-model="postForm.source_uri" />
<el-button v-loading="loading" style="margin-left: 10px;" type="success" @click="submitForm"> <el-button v-loading="loading" style="margin-left: 10px;" type="success" @click="submitForm">
Publush Publish
</el-button> </el-button>
<el-button v-loading="loading" type="warning" @click="draftForm"> <el-button v-loading="loading" type="warning" @click="draftForm">
Draft Draft
@ -36,7 +36,7 @@
</el-col> </el-col>
<el-col :span="10"> <el-col :span="10">
<el-form-item label-width="120px" label="Publush Time:" class="postInfo-container-item"> <el-form-item label-width="120px" label="Publish Time:" class="postInfo-container-item">
<el-date-picker v-model="displayTime" type="datetime" format="yyyy-MM-dd HH:mm:ss" placeholder="Select date and time" /> <el-date-picker v-model="displayTime" type="datetime" format="yyyy-MM-dd HH:mm:ss" placeholder="Select date and time" />
</el-form-item> </el-form-item>
</el-col> </el-col>

View File

@ -5,7 +5,7 @@
<FilenameOption v-model="filename" /> <FilenameOption v-model="filename" />
<AutoWidthOption v-model="autoWidth" /> <AutoWidthOption v-model="autoWidth" />
<BookTypeOption v-model="bookType" /> <BookTypeOption v-model="bookType" />
<el-button :loading="downloadLoading" style="margin:0 0 20px 20px;" type="primary" icon="document" @click="handleDownload"> <el-button :loading="downloadLoading" style="margin:0 0 20px 20px;" type="primary" icon="el-icon-document" @click="handleDownload">
Export Excel Export Excel
</el-button> </el-button>
<a href="https://panjiachen.github.io/vue-element-admin-site/feature/component/excel.html" target="_blank" style="margin-left:15px;"> <a href="https://panjiachen.github.io/vue-element-admin-site/feature/component/excel.html" target="_blank" style="margin-left:15px;">

View File

@ -1,7 +1,7 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<el-button :loading="downloadLoading" style="margin-bottom:20px" type="primary" icon="document" @click="handleDownload">Export</el-button> <el-button :loading="downloadLoading" style="margin-bottom:20px" type="primary" icon="el-icon-document" @click="handleDownload">Export</el-button>
<el-table <el-table
ref="multipleTable" ref="multipleTable"

View File

@ -1,7 +1,7 @@
<template> <template>
<div class="app-container"> <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-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="document" @click="handleDownload"> <el-button :loading="downloadLoading" style="margin-bottom:20px" type="primary" icon="el-icon-document" @click="handleDownload">
Export Selected Items Export Selected Items
</el-button> </el-button>
<a href="https://panjiachen.github.io/vue-element-admin-site/feature/component/excel.html" target="_blank" style="margin-left:15px;"> <a href="https://panjiachen.github.io/vue-element-admin-site/feature/component/excel.html" target="_blank" style="margin-left:15px;">

View File

@ -1,6 +1,6 @@
<template> <template>
<div class="login-container"> <div class="login-container">
<el-form ref="loginForm" :model="loginForm" :rules="loginRules" class="login-form" auto-complete="on" label-position="left"> <el-form ref="loginForm" :model="loginForm" :rules="loginRules" class="login-form" autocomplete="on" label-position="left">
<div class="title-container"> <div class="title-container">
<h3 class="title">Login Form</h3> <h3 class="title">Login Form</h3>
@ -17,7 +17,7 @@
name="username" name="username"
type="text" type="text"
tabindex="1" tabindex="1"
auto-complete="on" autocomplete="on"
/> />
</el-form-item> </el-form-item>
@ -34,7 +34,7 @@
placeholder="Password" placeholder="Password"
name="password" name="password"
tabindex="2" tabindex="2"
auto-complete="on" autocomplete="on"
@keyup.native="checkCapslock" @keyup.native="checkCapslock"
@blur="capsTooltip = false" @blur="capsTooltip = false"
@keyup.enter.native="handleLogin" @keyup.enter.native="handleLogin"

View File

@ -228,7 +228,7 @@ export default {
dangerouslyUseHTMLString: true, dangerouslyUseHTMLString: true,
message: ` message: `
<div>Role Key: ${key}</div> <div>Role Key: ${key}</div>
<div>Role Nmae: ${name}</div> <div>Role Name: ${name}</div>
<div>Description: ${description}</div> <div>Description: ${description}</div>
`, `,
type: 'success' type: 'success'

View File

@ -30,6 +30,18 @@ export default {
createdTimes: 0 createdTimes: 0
} }
}, },
watch: {
activeName(val) {
this.$router.push(`${this.$route.path}?tab=${val}`)
}
},
created() {
// init the default selected tab
const tab = this.$route.query.tab
if (tab) {
this.activeName = tab
}
},
methods: { methods: {
showCreatedTimes() { showCreatedTimes() {
this.createdTimes = this.createdTimes + 1 this.createdTimes = this.createdTimes + 1

View File

@ -35,7 +35,7 @@
style="width: 100%;" style="width: 100%;"
@sort-change="sortChange" @sort-change="sortChange"
> >
<el-table-column label="ID" prop="id" sortable="custom" align="center" width="80"> <el-table-column label="ID" prop="id" sortable="custom" align="center" width="80" :class-name="getSortClass('id')">
<template slot-scope="scope"> <template slot-scope="scope">
<span>{{ scope.row.id }}</span> <span>{{ scope.row.id }}</span>
</template> </template>
@ -375,6 +375,14 @@ export default {
return v[j] return v[j]
} }
})) }))
},
getSortClass: function(key) {
const sort = this.listQuery.sort
return sort === `+${key}`
? 'ascending'
: sort === `-${key}`
? 'descending'
: ''
} }
} }
} }

View File

@ -1,7 +1,7 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<el-input v-model="filename" placeholder="Please enter the file name (default file)" style="width:300px;" prefix-icon="el-icon-document" /> <el-input v-model="filename" placeholder="Please enter the file name (default file)" style="width:300px;" prefix-icon="el-icon-document" />
<el-button :loading="downloadLoading" style="margin-bottom:20px;" type="primary" icon="document" @click="handleDownload"> <el-button :loading="downloadLoading" style="margin-bottom:20px;" type="primary" icon="el-icon-document" @click="handleDownload">
Export Zip Export Zip
</el-button> </el-button>
<el-table v-loading="listLoading" :data="list" element-loading-text="拼命加载中" border fit highlight-current-row> <el-table v-loading="listLoading" :data="list" element-loading-text="拼命加载中" border fit highlight-current-row>

View File

@ -7,10 +7,13 @@ function resolve(dir) {
} }
const name = defaultSettings.title || 'vue Element Admin' // page title const name = defaultSettings.title || 'vue Element Admin' // page title
// If your port is set to 80, // If your port is set to 80,
// use administrator privileges to execute the command line. // use administrator privileges to execute the command line.
// For example, Mac: sudo npm run // For example, Mac: sudo npm run
const port = 9527 // dev port // You can change the port by the following method:
// port = 9527 npm run dev OR npm run dev --port = 9527
const port = process.env.port || process.env.npm_config_port || 9527 // dev port
// All configuration item explanations can be find in https://cli.vuejs.org/config/ // All configuration item explanations can be find in https://cli.vuejs.org/config/
module.exports = { module.exports = {