diff --git a/src/components/LangSelect/index.vue b/src/components/LangSelect/index.vue
index 31cc80d0..ef5f2c44 100644
--- a/src/components/LangSelect/index.vue
+++ b/src/components/LangSelect/index.vue
@@ -6,6 +6,7 @@
中文
English
+ Español
diff --git a/src/lang/es.js b/src/lang/es.js
new file mode 100755
index 00000000..19171904
--- /dev/null
+++ b/src/lang/es.js
@@ -0,0 +1,155 @@
+export default {
+ route: {
+ dashboard: 'Panel de control',
+ introduction: 'Introducción',
+ documentation: 'Documentación',
+ guide: 'Guía',
+ permission: 'Permisos',
+ pagePermission: 'Permisos de la página',
+ directivePermission: 'Permisos de la directiva',
+ icons: 'Iconos',
+ components: 'Componentes',
+ componentIndex: 'Introducción',
+ tinymce: 'Tinymce',
+ markdown: 'Markdown',
+ jsonEditor: 'Editor JSON',
+ dndList: 'Lista Dnd',
+ splitPane: 'Panel dividido',
+ avatarUpload: 'Subir avatar',
+ dropzone: 'Subir ficheros',
+ sticky: 'Sticky',
+ countTo: 'CountTo',
+ componentMixin: 'Mixin',
+ backToTop: 'Ir arriba',
+ dragDialog: 'Drag Dialog',
+ dragKanban: 'Drag Kanban',
+ charts: 'Gráficos',
+ keyboardChart: 'Keyboard Chart',
+ lineChart: 'Gráfico de líneas',
+ mixChart: 'Mix Chart',
+ example: 'Ejemplo',
+ nested: 'Rutas anidadass',
+ menu1: 'Menu 1',
+ 'menu1-1': 'Menu 1-1',
+ 'menu1-2': 'Menu 1-2',
+ 'menu1-2-1': 'Menu 1-2-1',
+ 'menu1-2-2': 'Menu 1-2-2',
+ 'menu1-3': 'Menu 1-3',
+ menu2: 'Menu 2',
+ Table: 'Tabla',
+ dynamicTable: 'Tabla dinámica',
+ dragTable: 'Arrastrar tabla',
+ inlineEditTable: 'Editor',
+ complexTable: 'Complex Table',
+ treeTable: 'Tree Table',
+ customTreeTable: 'Custom TreeTable',
+ tab: 'Pestaña',
+ form: 'Formulario',
+ createArticle: 'Crear artículo',
+ editArticle: 'Editar artículo',
+ articleList: 'Listado de artículos',
+ errorPages: 'Páginas de error',
+ page401: '401',
+ page404: '404',
+ errorLog: 'Registro de errores',
+ excel: 'Excel',
+ exportExcel: 'Exportar a Excel',
+ selectExcel: 'Export seleccionado',
+ uploadExcel: 'Subir Excel',
+ zip: 'Zip',
+ exportZip: 'Exportar a Zip',
+ theme: 'Tema',
+ clipboardDemo: 'Clipboard',
+ i18n: 'I18n',
+ externalLink: 'Enlace externo'
+ },
+ navbar: {
+ logOut: 'Salir',
+ dashboard: 'Panel de control',
+ github: 'Github',
+ screenfull: 'Pantalla completa',
+ theme: 'Tema',
+ size: 'Tamaño global'
+ },
+ login: {
+ title: 'Formulario de acceso',
+ logIn: 'Acceso',
+ username: 'Usuario',
+ password: 'Contraseña',
+ any: 'nada',
+ thirdparty: 'Conectar con',
+ thirdpartyTips: 'No se puede simular en local, así que combine su propia simulación de negocios. ! !'
+ },
+ documentation: {
+ documentation: 'Documentación',
+ github: 'Repositorio Github'
+ },
+ permission: {
+ roles: 'Tus permisos',
+ switchRoles: 'Cambiar permisos'
+ },
+ guide: {
+ description: '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 ',
+ button: 'Ver guía'
+ },
+ components: {
+ documentation: 'Documentación',
+ tinymceTips: 'Rich text editor is a core part of management system, but at the same time is a place with lots of problems. In the process of selecting rich texts, I also walked a lot of detours. The common rich text editors in the market are basically used, and the finally chose Tinymce. See documentation for more detailed rich text editor comparisons and introductions.',
+ dropzoneTips: 'Because my business has special needs, and has to upload images to qiniu, so instead of a third party, I chose encapsulate it by myself. It is very simple, you can see the detail code in @/components/Dropzone.',
+ stickyTips: 'when the page is scrolled to the preset position will be sticky on the top.',
+ backToTopTips1: 'When the page is scrolled to the specified position, the Back to Top button appears in the lower right corner',
+ backToTopTips2: 'You can customize the style of the button, show / hide, height of appearance, height of the return. If you need a text prompt, you can use element-ui el-tooltip elements externally',
+ imageUploadTips: 'Since I was using only the vue@1 version, and it is not compatible with mockjs at the moment, I modified it myself, and if you are going to use it, it is better to use official version.'
+ },
+ table: {
+ dynamicTips1: 'Fixed header, sorted by header order',
+ dynamicTips2: 'Not fixed header, sorted by click order',
+ dragTips1: 'Orden por defecto',
+ dragTips2: 'The after dragging order',
+ title: 'Título',
+ importance: 'Importancia',
+ type: 'Tipo',
+ remark: 'Remark',
+ search: 'Buscar',
+ add: 'Añadir',
+ export: 'Exportar',
+ reviewer: 'reviewer',
+ id: 'ID',
+ date: 'Fecha',
+ author: 'Autor',
+ readings: 'Lector',
+ status: 'Estado',
+ actions: 'Acciones',
+ edit: 'Editar',
+ publish: 'Publicar',
+ draft: 'Draft',
+ delete: 'Eliminar',
+ cancel: 'Cancelar',
+ confirm: 'Confirmar'
+ },
+ errorLog: {
+ tips: 'Please click the bug icon in the upper right corner',
+ description: 'Now the management system are basically the form of the spa, it enhances the user experience, but it also increases the possibility of page problems, a small negligence may lead to the entire page deadlock. Fortunately Vue provides a way to catch handling exceptions, where you can handle errors or report exceptions.',
+ documentation: 'Documento de introducción'
+ },
+ excel: {
+ export: 'Exportar',
+ selectedExport: 'Exportar seleccionados',
+ placeholder: 'Por favor escribe un nombre de fichero'
+ },
+ zip: {
+ export: 'Exportar',
+ placeholder: 'Por favor escribe un nombre de fichero'
+ },
+ theme: {
+ change: 'Cambiar tema',
+ documentation: 'Documentación del tema',
+ tips: 'Tips: It is different from the theme-pick on the navbar is two different skinning methods, each with different application scenarios. Refer to the documentation for details.'
+ },
+ tagsView: {
+ refresh: 'Actualizar',
+ close: 'Cerrar',
+ closeOthers: 'Cerrar otros',
+ closeAll: 'Cerrar todos'
+ }
+}
diff --git a/src/lang/index.js b/src/lang/index.js
index a77b07ea..7c9c8af6 100644
--- a/src/lang/index.js
+++ b/src/lang/index.js
@@ -3,8 +3,10 @@ import VueI18n from 'vue-i18n'
import Cookies from 'js-cookie'
import elementEnLocale from 'element-ui/lib/locale/lang/en' // element-ui lang
import elementZhLocale from 'element-ui/lib/locale/lang/zh-CN'// element-ui lang
+import elementEsLocale from 'element-ui/lib/locale/lang/es'// element-ui lang
import enLocale from './en'
import zhLocale from './zh'
+import esLocale from './es'
Vue.use(VueI18n)
@@ -16,12 +18,16 @@ const messages = {
zh: {
...zhLocale,
...elementZhLocale
+ },
+ es: {
+ ...esLocale,
+ ...elementEsLocale
}
}
const i18n = new VueI18n({
// set locale
- // options: en or zh
+ // options: en | zh | es
locale: Cookies.get('language') || 'en',
// set locale messages
messages
diff --git a/src/mock/index.js b/src/mock/index.js
index e6644ae1..3e00e918 100644
--- a/src/mock/index.js
+++ b/src/mock/index.js
@@ -4,6 +4,16 @@ import articleAPI from './article'
import remoteSearchAPI from './remoteSearch'
import transactionAPI from './transaction'
+// 修复在使用 MockJS 情况下,设置 withCredentials = true,且未被拦截的跨域请求丢失 Cookies 的问题
+// https://github.com/nuysoft/Mock/issues/300
+Mock.XHR.prototype.proxy_send = Mock.XHR.prototype.send
+Mock.XHR.prototype.send = function() {
+ if (this.custom.xhr) {
+ this.custom.xhr.withCredentials = this.withCredentials || false
+ }
+ this.proxy_send(...arguments)
+}
+
// Mock.setup({
// timeout: '350-600'
// })
diff --git a/src/utils/index.js b/src/utils/index.js
index f607910c..3af8b29b 100644
--- a/src/utils/index.js
+++ b/src/utils/index.js
@@ -296,3 +296,7 @@ export function deepClone(source) {
export function uniqueArr(arr) {
return Array.from(new Set(arr))
}
+
+export function isExternal(path) {
+ return /^(https?:|mailto:|tel:)/.test(path)
+}
diff --git a/src/views/i18n-demo/index.vue b/src/views/i18n-demo/index.vue
index 94d1e470..b5344c67 100644
--- a/src/views/i18n-demo/index.vue
+++ b/src/views/i18n-demo/index.vue
@@ -9,6 +9,7 @@
简体中文
English
+ Español
{{ $t('i18nView.note') }}
@@ -101,6 +102,7 @@ export default {
if (!this.$i18n.getLocaleMessage('en')[viewName]) {
this.$i18n.mergeLocaleMessage('en', local.en)
this.$i18n.mergeLocaleMessage('zh', local.zh)
+ this.$i18n.mergeLocaleMessage('es', local.es)
}
this.setOptions() // set default select options
},
diff --git a/src/views/i18n-demo/local.js b/src/views/i18n-demo/local.js
index 1c39608e..9b43e605 100644
--- a/src/views/i18n-demo/local.js
+++ b/src/views/i18n-demo/local.js
@@ -39,5 +39,25 @@ export default {
two: 'Two',
three: 'Three'
}
+ },
+ es: {
+ i18nView: {
+ title: 'Switch Language',
+ note: 'The internationalization of this project is based on vue-i18n',
+ datePlaceholder: 'Pick a day',
+ selectPlaceholder: 'Select',
+ tableDate: 'tableDate',
+ tableName: 'tableName',
+ tableAddress: 'tableAddress',
+ default: 'default:',
+ primary: 'primary',
+ success: 'success',
+ info: 'info',
+ warning: 'warning',
+ danger: 'danger',
+ one: 'One',
+ two: 'Two',
+ three: 'Three'
+ }
}
}
diff --git a/src/views/layout/components/Sidebar/Link.vue b/src/views/layout/components/Sidebar/Link.vue
index 07793b9a..5d366f24 100644
--- a/src/views/layout/components/Sidebar/Link.vue
+++ b/src/views/layout/components/Sidebar/Link.vue
@@ -7,7 +7,7 @@