当前位置:   article > 正文

基于Vue3.0和ElementPlus开发后台框架(login+back+i18n)_vue3后台框架

vue3后台框架

10 开始步骤

参照上一篇文章,执行如下步骤

  • 安装最新版(16)nodejs
  • path中增加npm执行路径
  • npm init @vitejs/app myproj --template vue-ts,cd myproj,npm install,npm run dev  测试工程  

         2023年09月05日补充 :@vitejs/create-app is deprecated, use npm init vite instead

        npm init vite lmesv1 --template vue-ts

  • npm install element-plus --save  
  • npm install @element-plus/icons-vue  
  • npm install less -D  
  • npm install axios  
  • npm install vuex@next --save  
  • npm install vue-router@next --save  
  • npm install vue-i18n@next  --save 或npm install vue-i18n -S  加入国际化,或npm install vue-i18n@next   
  •  

20 构建路由框架

20.10 组织空页面

建立src\back空目录,增加login.vue(前文已有代码) 以及如下vue

back.vue, back_header.vue, back_menu.vue, db_add.vue , db_edit.vue , db_del.vue,db_list.vue

在login.vue里增加<h1>login</h1>,以用于测试首页。

注意有些标签大写如<H1>login</H1>, 会触发浏览器警告:

If this is a native custom element, make sure to exclude it from component resolution via compilerOptions.isCustomElement. 

20.20 组织路由

建立src\router目录以及index.ts文件

  1. import {createRouter,createWebHashHistory} from "vue-router";
  2. import login from "../back/login.vue"
  3. import back from "../back/back.vue"
  4. import db_add from "../back/db_add.vue"
  5. const routes=[
  6. {path:"/", redirect:'/login'},
  7. {path:"/login", component:login},
  8. {path:"/back", component:back,
  9. children:[
  10. {path:"/back/db_add", component:db_add},
  11. ]
  12. }
  13. ]
  14. export default createRouter({history:createWebHashHistory(),routes})

20.30 修改main.ts文件

  1. import { createApp } from 'vue'
  2. import App from './App.vue'
  3. import router from './router'
  4. import ElementPlus from 'element-plus'
  5. import 'element-plus/theme-chalk/index.css'
  6. import locale from 'element-plus/lib/locale/lang/zh-cn'
  7. import axios from 'axios'
  8. const app = createApp(App).use(router).use(ElementPlus,{locale})
  9. app.config.globalProperties.myaxios = axios
  10. app.mount("#app")
  11. //createApp(App).mount('#app')

由于版本升级

import locale from 'element-plus/lib/locale/lang/zh-cn'   需要修改为

import locale from 'element-plus/dist/locale/zh-cn.mjs'

20.40 清理app.vue 

清理原有内容,替换为:

  1. <script setup lang="ts">
  2. </script>
  3. <template>
  4. <div id="app">
  5. <router-view />
  6. </div>
  7. </template>
  8. <script lang="ts">
  9. export default {
  10. name:'app'
  11. }
  12. </script>
  13. <style>
  14. #app {
  15. font-family: Avenir, Helvetica, Arial, sans-serif;
  16. -webkit-font-smoothing: antialiased;
  17. -moz-osx-font-smoothing: grayscale;
  18. text-align: center;
  19. color: #2c3e50;
  20. margin-top: 60px;
  21. }
  22. </style>

删除多余的src\components目录,以及其下没有用的文件,如 HelloWorld.vue

20.50 测试login与后台联通

重构login.vue

  1. <template>
  2. <H1>Login</h1>
  3. <el-form ref="form" :model="form" >
  4. <el-form-item label="账号"> <el-input v-model="form.usr"></el-input></el-form-item>
  5. <el-form-item label="密码"> <el-input v-model="form.pwd"></el-input></el-form-item>
  6. <el-form-item > <el-input v-model="form.roleattrid" type="hidden"></el-input></el-form-item>
  7. <el-form-item > <el-button @click="onsubmit"> 登录</el-button></el-form-item>
  8. </el-form>
  9. </template>
  10. <script>
  11. export default {
  12. name: "login",
  13. data() { return {form: {usr: '', pwd: '',roleattrid:'10'}}},
  14. mounted() { } ,
  15. methods:{
  16. onsubmit()
  17. {
  18. alert("usr=" + this.form.usr+" pwd="+this.form.pwd+" roleattrid="+this.form.roleattrid);
  19. this.myaxios.get("http://127.0.0.1:7999/lmes/sys/login?usr=" + this.form.usr + "&pwd=" + this.form.pwd+ "&roleattrid=" + this.form.roleattrid).then((req, res) => {
  20. let data = req.data;
  21. if (data["msg"] == "success" && data.code == 200)
  22. this.$router.push("/back");
  23. else
  24. this.$router.push("/login");
  25. console.log("get data:", req);
  26. });
  27. //this.$router.push("/main");
  28. console.log("login error");
  29. }
  30. }
  31. }
  32. </script>
  33. <style scoped>
  34. </style>

测试成功,后台收到请求,并把数据成功传送到前端。

30 使用 vue-i18n  

30.10  新建目录src\locale与文件框架  :

src\locale\, src\locale\index.ts, src\locale\modules\, src\locale\modules\en.ts,src\locale\modules\zh-cn.ts, 以及目录src\locale\moules\en\,  src\locale\moules\zh-cn\, 最后这两个目录下分辨建立 common.ts  文件。

\src\locale\moules\en\common.ts  的内容如下

  1. export default {
  2. common: {
  3. add: 'add',
  4. update: 'update',
  5. del: 'delete',
  6. exportExcel:'export excel',
  7. },
  8. }

\src\locale\modules\zh-cn\common.ts的内容如下:

  1. export default {
  2. common: {
  3. add: '新增',
  4. update: '修改',
  5. del: '删除',
  6. exportExcel:'导出excel',
  7. },
  8. }

\src\locale\moules\en.ts内容如下:

  1. import enLocale from 'element-plus/lib/locale/lang/en'
  2. import common from './en/common'
  3. const lang = {
  4. el: enLocale.el, // element-plus i18 setting
  5. message: {
  6. language: 'English',
  7. ...common,
  8. }
  9. }
  10. export default lang

由于版本升级

import locale from 'element-plus/lib/locale/lang/en'   需要修改为

import locale from 'element-plus/dist/locale/en.mjs'

\src\locale\moules\zh-cn.ts内容如下:

  1. import enLocale from 'element-plus/lib/locale/lang/zh-cn'
  2. import common from './zh-cn/common'
  3. const lang = {
  4. el: enLocale.el, // element-plus i18 setting
  5. message: {
  6. language: '中文',
  7. ...common,
  8. }
  9. }
  10. export default lang

由于版本升级

import locale from 'element-plus/lib/locale/lang/zh-cn'   需要修改为

import locale from 'element-plus/dist/locale/zh-cn.mjs'

src\locale\index.ts  内容如下:

  1. import { createI18n, LocaleMessages, VueMessageType } from 'vue-i18n'
  2. /** 国际化主函数,调用vue-i18n插件生成 */
  3. const files= import.meta.globEager('./modules/*.ts')
  4. let messages: LocaleMessages<VueMessageType> = {}
  5. Object.keys(files).forEach((c: string) => {
  6. const module = files[c].default
  7. const moduleName: string = c.replace(/^\.\/(.*)\/(.*)\.\w+$/, '$2')
  8. messages[moduleName] = module
  9. })
  10. const lang = navigator.language
  11. const locale = lang.indexOf('en') !== -1 ? 'en' : 'zh-cn'
  12. const i18n = createI18n({
  13. __VUE_I18N_LEGACY_API__: false,
  14. __VUE_I18N_FULL_INSTALL__: false,
  15. locale: locale,
  16. fallbackLocale: 'zh-cn',
  17. messages
  18. })
  19. document.getElementsByTagName('html')[0].setAttribute('lang', 'zh-cn')
  20. export default i18n

由于版本升级,locale: locale 这一行前需要增加一行:legacy: false,,变更为

    legacy: false,
    locale: locale,

 

30.20 \src\main.ts改写以支持i18n

import i18n from './locale'

app.use(i18n)

注意 use需要在mount前,记录如下

import i18n from './locale'
const app = createApp(App).use(router).use(ElementPlus,{locale})
app.config.globalProperties.myaxios = axios
app.use(i18n)
app.mount("#app")
 

30.30 在app.vue里引入使用

  1. <script lang="ts">
  2. export default {
  3. name:'app'
  4. }
  5. </script>

以上内容修改为:

  1. <script lang="ts">
  2. import { defineComponent, computed } from 'vue'
  3. import { useI18n } from 'vue-i18n'
  4. export default {
  5. name:'app',
  6. setup() {
  7. const i18n = useI18n()
  8. const locale = computed(() => {
  9. return {
  10. name: i18n.locale.value,
  11. el: i18n.messages.value[i18n.locale.value].el
  12. }
  13. })
  14. return {
  15. locale
  16. }
  17. }
  18. }
  19. </script>

30.30 在login.vue里引入使用

以下一行代码

<h1>Login</h1>

修改为

<h1>login {{ $t('message.common.add')}}</h1>

测试效果为下图,可以看出汉字按照要求显示出来了:“新增”

  

40 布局管理

参考   https://element-plus.gitee.io/zh-CN/component/layout.html

40.10 back框架说明

后台框架包括back.vue、back_header、back_menu三个部分,后两者均被back.vue引入。主体部分显示数据,包括左侧树形数据(稍后加入)。布局如下:

整体:          back

header  back_header

左侧树形菜单

back_menu

左侧树形数据

back_dbmenu

暂不接入

back_header.vue内容如下:

  1. <template>
  2. <h1>header</h1>
  3. </template>
  4. <script>
  5. export default {
  6. name: "back_header"
  7. }
  8. </script>
  9. <style scoped>
  10. </style>

back_menu.vue内容如下:

  1. <template>
  2. <h1>menu</h1>
  3. </template>
  4. <script lang="ts">
  5. export default {
  6. name: "back_menu"
  7. }
  8. </script>
  9. <style scoped>
  10. </style>

40.20 back.vue代码

  1. <template>
  2. <div>
  3. <el-container >
  4. <el-header ><back_header></back_header></el-header>
  5. <el-container>
  6. <el-aside> <back_menu></back_menu></el-aside>
  7. <el-main><router-view></router-view></el-main>
  8. </el-container>
  9. </el-container>
  10. </div>
  11. </template>
  12. <script>
  13. import back_header from './back_header.vue'
  14. import back_menu from './back_menu.vue'
  15. export default {
  16. name: "back",
  17. components:{
  18. back_header,
  19. back_menu
  20. },
  21. }
  22. </script>
  23. <style scoped>
  24. </style>

40.30 测试布局效果

成功登录后,效果如下:

冻结src目录,代码打包为src24.rar。

vue使用@路径引入_马优晨-CSDN博客_vue使用@

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/549470
推荐阅读
相关标签
  

闽ICP备14008679号