spring boot + Vue + iView前后端分离架构(Mac版) — (二)登录页面与国际化

spring boot + Vue + iView前后端分离架构(Mac版) — (二)登录页面与国际化springboot+Vue+iView前后端分离架构(Mac版)–登录页面与国际化(二)[小景哥哥博客][http://www.jinglisen.top]接下来我们首先实现国际化,然后实现登录页面。一、实现国际化打开项目hep-admin-web工程,在src目录下创建一个local的目录,再在local目录下创建lang的文件夹,此文件夹用于存放国际化文件,国际化文件包…

大家好,又见面了,我是你们的朋友全栈君。

spring boot + Vue + iView前后端分离架构(Mac版) – (二) 登录页面与国际化

[小景哥哥博客][http://www.jinglisen.top]

接下来我们首先实现国际化,然后实现登录页面。

一、实现国际化

打开项目hep-admin-web工程,在src目录下创建一个local的目录,再在local目录下创建lang的文件夹,此文件夹用于存放国际化文件,国际化文件包括三个en-US.js、zh-CN.js、zh-TW.js,文件内容分别如下:

//en-US.js
export default { 
   
  login:{ 
   
    loginAccount:'please enter login',
    loginPassword:'please enter password'
  }
}
//zh-CN.js
export default { 
   
  login:{ 
   
    loginAccount:'请输入登录账号',
    loginPassword:'请输入登录的密码'
  }
}
//zh-TW.js
export default { 
   
  login:{ 
   
    loginAccount:'请输入登录账号(TW)',
    loginPassword:'请输入登录密码(TW)'
  }
}

local文件夹下创建index.js文件,内容如下:

import Vue from 'vue'
import VueI18n from 'vue-i18n'
import customZhCn from './lang/zh-CN'
import customZhTw from './lang/zh-TW'
import customEnUs from './lang/en-US'
import zhCnLocale from 'iview/src/locale/lang/zh-CN'
import enUsLocale from 'iview/src/locale/lang/en-US'
import zhTwLocale from 'iview/src/locale/lang/zh-TW'

Vue.use(VueI18n)

// 自动根据浏览器系统语言设置语言
const navLang = navigator.language
const localLang = (navLang === 'zh-CN' || navLang === 'en-US') ? navLang : false
let lang = window.localStorage.lang || localLang || 'zh-CN'

Vue.config.lang = lang

// vue-i18n 6.x+写法
Vue.locale = () => { 
   
}
const messages = { 
   
  'zh-CN': Object.assign(zhCnLocale, customZhCn),
  'zh-TW': Object.assign(zhTwLocale, customZhTw),
  'en-US': Object.assign(enUsLocale, customEnUs)
}
const i18n = new VueI18n({ 
   
  locale: localStorage.getItem("lang") || lang,
  messages
})
export default i18n

然后修改main.js,内容修改如下:

// The Vue build version to load with the `import` command
// (runtime-only or standalone) has been set in webpack.base.conf with an alias.
import Vue from 'vue'
import App from './App'
import router from './router'
import iView from 'iView'
//引入国际化包
import i18n from './local'
import 'iview/dist/styles/iview.css'

Vue.use(iView)

Vue.config.productionTip = false
//引入iView的国际化
Vue.config.productionTip = false

/* eslint-disable no-new */
new Vue({ 
   
  el: '#app',
  router,
  i18n,
  components: { 
    App },
  template: '<App/>'
})

验证国际化,在App.vue中增加组件:

<Button type="primary">{
  
  {$t('login.loginAccount')}}</Button>

运行项目cnpm run dev,并访问http://localhost:8080,即可看到效果。

二、国际化组件的编写

考虑到国际化组件会在很多地方用到,因此我们基于iViewDropdown组件编写一个Language组件,该组件主要实现语言切换时,实现各个对应语言页面的展示。在components目录下创建一个language文件夹,同时在language文件夹中创建index.jsLanguage.vue文件,两者的代码分别如下:

//index.js
import Language from './language.vue'
export default Language
//Language.vue
<template>
  <div>
    <Dropdown trigger="click" @on-click="selectLang">
      <a href="javascript:void(0)">
        { 
   { 
    title }}
        <Icon :size="18" type="md-arrow-dropdown" />
      </a>
      <DropdownMenu slot="list">
        <DropdownItem v-for="(value, key) in localList" :name="key" :key="`lang-${key}`">{ 
   { 
    value }}</DropdownItem>
      </DropdownMenu>
    </Dropdown>
  </div>
</template>

<script>
export default { 
   
  name: 'Language',
  props: { 
   
    lang: String
  },
  data () { 
   
    return { 
   
      langList: { 
   
        'zh-CN': '语言',
        'zh-TW': '語言',
        'en-US': 'Lang'
      },
      localList: { 
   
        'zh-CN': '中文简体',
        'zh-TW': '中文繁体',
        'en-US': 'English'
      }
    }
  },
  watch: { 
   
    lang (lang) { 
   
      this.$i18n.locale = lang
    }
  },
  computed: { 
   
    title () { 
   
      return this.langList[this.lang]
    }
  },
  methods: { 
   
    selectLang (name) { 
   
      this.$emit('on-lang-change', name)
    }
  }
}
</script>

到此,就完成了国际化切换插件的编写。

三、登录页面的编写

src-->view-->login目录下创建login.vue文件,代码如下:

<template>
  <div class="layout">
    <Layout>
      <Header class="layout-header" id="layout-header-scroll">
        <Menu mode="horizontal" theme="dark" active-name="1">
          <div class="layout-logo">
            <img height="50px" width="50px" src="../../assets/logo.png"/>
          </div>
          <div class="layout-nav">
            <language @on-lang-change="setLanguage" style="margin-right: 10px;" :lang="local"/>
          </div>
          <div class="layout-nav">
            <MenuItem name="1" style="font-size: 30px;">
              欢迎使用沪尔浦后台管理系统
            </MenuItem>
          </div>
        </Menu>
      </Header>
      <Content :style="{ background: '#fff', minHeight: '500px'}">
        <div style="float: right;margin: 100px 100px 0">
          <Card title="欢迎使用沪尔浦后台管理系统">
            <Form ref="loginForm" :model="loginForm" :rules="loginFormRule">
              <div>
                <FormItem prop="loginAccount">
                  账号:<Input v-model="loginForm.loginAccount" prefix="ios-contact"
                            :placeholder="$t('login.loginAccount')"
                            style="width: 200px;"/>
                </FormItem>
                <FormItem prop="loginPassword">
                  密码:<Input v-model="loginForm.loginPassword" prefix="ios-compass" type="password"
                            :placeholder="$t('login.loginPassword')" style="width: 200px;"/>
                </FormItem>
              </div>
            </Form>
            <div style="margin-top: 20px;">
              <Button type="primary" @click="loginSystem" :long=true>登录</Button>
            </div>
          </Card>
        </div>
      </Content>
    </Layout>
  </div>
</template>
<script>
  import Language from '../../components/language';

  export default {
    components: {
      Language
    },
    data() {
      return {
        local: localStorage.getItem("lang"),
        loginForm: {
          loginAccount: '',
          loginPassword: ''
        },
        loginFormRule: {
          loginAccount: [
            {required: true, message: '请输入账号', trigger: 'blur'},
            {type: 'string', max: 30, message: '账号允许输入最大长度为30个字符', trigger: 'blur'}
          ],
          loginPassword: [
            {required: true, message: '请输入密码', trigger: 'blur'},
            {type: 'string', max: 50, message: '密码允许输入最大长度为50个字符', trigger: 'blur'}
          ]
        }
      }
    },
    methods: {
      loginSystem() {
        this.$refs['loginForm'].validate((valid) => {
          if (valid) {
            console.log('实现用户登录')
          }
        })
      },
      setLanguage(lang) {
        this.local = lang
        localStorage.setItem('lang', lang)
      }
    },
    mounted() {
    }
  }
</script>
<style scoped>

  .layout-header {
    position: relative;
    z-index: 999;
    height: 60px;
  }

  .layout {
    border: 1px solid #d7dde4;
    background: #f5f7f9;
    position: relative;
    border-radius: 4px;
    overflow: hidden;
  }

  .layout-nav {
    width: auto;
    float: right;
    margin: 0 auto;
    margin-right: 20px;
  }

  .layout-logo {
    width: 100px;
    height: 30px;
    border-radius: 10px;
    float: left;
    position: relative;
    left: 20px;
    top: 5px;
  }
</style>

使用Vue路由实现页面的跳转,在src-->router-->index.js中增加路由配置:

import Vue from 'vue'
import Router from 'vue-router'
import HelloWorld from '@/components/HelloWorld'

Vue.use(Router)

export default new Router({ 
   
  routes: [
    { 
   
      path: '/',
      name: 'HelloWorld',
      component: HelloWorld
    },
    { 
   
      path: '/login',
      name: 'login',
      component: resolve => { 
   
        require(['../view/login/login.vue'], resolve);
      }
    }
  ]
})

修改App.vue文件,代码如下:

<template>
  <div id="app">
    <router-view/>
  </div>
</template>

<script>
export default {
  name: 'App'
}
</script>

<style>
#app {
  font-family: 'Avenir', Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
  margin-top: 60px;
}
</style>

重启项目cnpm run dev,并访问http://www.localhost:8080/#/login即可访问。
在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/131820.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • navicat生成激活码错误-激活码分享

    (navicat生成激活码错误)最近有小伙伴私信我,问我这边有没有免费的intellijIdea的激活码,然后我将全栈君台教程分享给他了。激活成功之后他一直表示感谢,哈哈~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.htmlS3…

    2022年3月26日
    69
  • 手写数字识别数据集_卷积神经网络分类

    手写数字识别数据集_卷积神经网络分类基于卷积神经网络的手写数字识别(附数据集+代码)配置环境1.前言2.问题描述3.解决方案4.实现步骤4.1数据集选择4.2构建网络4.3训练网络4.4测试网络4.5图像预处理4.6传入网络进行计算5.代码实现5.1文件说明5.2使用方法5.3训练模型5.4配置环境使用环境:python3.8平台:Windows10IDE:PyCharm1.前言手写数字识别,作为机器视觉入门项目,无论是基于传统的OpenCV方法还是基于目前火热的深度学习、神经网络的方法都有这不错的训练效果。当然,这个项目也常常

    2025年11月18日
    4
  • JavaScript像数组添加元素并排序「建议收藏」

    JavaScript像数组添加元素并排序「建议收藏」最近用jscharts做图如上图,柱形排列是没有规律的,将它做出如下调整因为jscharts做表,是使用数组存储数据//准备数据varmyData=newArray([‘Asia’,437,520],[‘Europe’,322,390],[‘NorthAmerica’,233,286],[‘LatinAmerica’,110,162],[‘Afric

    2022年5月2日
    40
  • W3C标准是_关于w3c标准下列说法错误的是

    W3C标准是_关于w3c标准下列说法错误的是W3C简介什么是W3C?万维网联盟(WorldWideWebConsortium)创建于1994年10月工作是对web进行标准化创建并维护WWW标准使用W3C的目的?为了让任何人在任何时间、任何地点、通过任何设备访问web内容。作为用户和浏览器制造商之间的中间层,要想办法满足下游的用户和上游不同浏览器看到的是同样的内容,让页面、程序能支持所有的浏览器,能够满足尽可能多的用户标准内容1、DOC…

    2025年12月13日
    4
  • Python和Java到底有什么区别?

    Python和Java到底有什么区别?转自:微点阅读(www.weidianyuedu.com)微点阅读-范文大全-免费学习知识的网站好多初学编程的小伙伴在问:“Python和Java到底有什么区别?到底是学Python还是Java。“一副惆怅的样子,难以下手。今天,给大家总结了关于两者的十二点区别。一、实话实话,Python虚拟机没有java强,java虚拟机是java的核心Python的核心是可以很方便地使用c语言函数或c++库。二、Python是全动态性的可以在运行时自己修改自己的代码,java只能

    2022年7月7日
    23
  • 数据库中什么是变量名_数据库表名命名规范

    数据库中什么是变量名_数据库表名命名规范codeIf简介:Github开源项目特点:1,支持中文;2,变量命名:Github,Bitbucket,GoogleCode,Codeplex,Sourceforge,FedoraProjec的项目源码3,可以查询代码片段及其代码库链接:http://unbug.github.io/codelf/举个例子查看代码查看代码片段查看代码片段更多文章,请关注博客:http://blog

    2022年9月21日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号