Explorar el Código

Merge branch 'master' of https://git.citupro.com/zhengnaiwen_citu/menduner

lifanagju_citu hace 1 año
padre
commit
f7f298462b

+ 1 - 0
package.json

@@ -12,6 +12,7 @@
     "@mdi/font": "7.0.96",
     "js-cookie": "^3.0.5",
     "pinia": "^2.1.7",
+    "pinia-plugin-persistedstate": "^3.2.1",
     "roboto-fontface": "*",
     "vue": "^3.4.0",
     "vue-i18n": "9",

+ 12 - 0
pnpm-lock.yaml

@@ -17,6 +17,9 @@ importers:
       pinia:
         specifier: ^2.1.7
         version: 2.1.7(vue@3.4.25)
+      pinia-plugin-persistedstate:
+        specifier: ^3.2.1
+        version: 3.2.1(pinia@2.1.7(vue@3.4.25))
       roboto-fontface:
         specifier: '*'
         version: 0.10.0
@@ -928,6 +931,11 @@ packages:
     resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
     engines: {node: '>=8.6'}
 
+  pinia-plugin-persistedstate@3.2.1:
+    resolution: {integrity: sha512-MK++8LRUsGF7r45PjBFES82ISnPzyO6IZx3CH5vyPseFLZCk1g2kgx6l/nW8pEBKxxd4do0P6bJw+mUSZIEZUQ==}
+    peerDependencies:
+      pinia: ^2.0.0
+
   pinia@2.1.7:
     resolution: {integrity: sha512-+C2AHFtcFqjPih0zpYuvof37SFxMQ7OEG2zV9jRI12i9BOy3YQVAHwdKtyyc8pDcDyIc33WCIsZaCFWU7WWxGQ==}
     peerDependencies:
@@ -2117,6 +2125,10 @@ snapshots:
 
   picomatch@2.3.1: {}
 
+  pinia-plugin-persistedstate@3.2.1(pinia@2.1.7(vue@3.4.25)):
+    dependencies:
+      pinia: 2.1.7(vue@3.4.25)
+
   pinia@2.1.7(vue@3.4.25):
     dependencies:
       '@vue/devtools-api': 6.6.1

+ 15 - 0
src/locales/en.js

@@ -0,0 +1,15 @@
+export default {
+  common: {},
+  login: {
+    username: 'Username',
+    password: 'Password',
+    login: 'Sign in',
+    reLogin: 'Sign in again',
+    register: 'Register',
+    checkPassword: 'Confirm password',
+    mobileNumber: 'Mobile Number',
+    mobileNumberPlaceholder: 'Please Enter Mobile Number',
+    getSmsCode: 'Get SMS Code',
+  },
+  form: {}
+}

+ 15 - 0
src/locales/zh-CN.js

@@ -0,0 +1,15 @@
+export default {
+  common: {},
+  login: {
+    username: '用户名',
+    password: '密码',
+    login: '登录',
+    reLogin: '重新登录',
+    register: '注册',
+    checkPassword: '确认密码',
+    mobileNumber: '手机号码',
+    mobileNumberPlaceholder: '请输入手机号码',
+    getSmsCode: '获取验证码',
+  },
+  form: {}
+}

+ 8 - 0
src/main.js

@@ -13,10 +13,16 @@ import { createApp } from 'vue'
 
 import { createPinia } from 'pinia'
 
+import piniaPluginPersistedstate from 'pinia-plugin-persistedstate' // pinia 持久化
+
 import router from './router'
 
+import { setupI18n } from '@/plugins/vueI18n'
+
 const pinia = createPinia()
 
+pinia.use(piniaPluginPersistedstate)
+
 const app = createApp(App)
 
 app.use(pinia)
@@ -25,4 +31,6 @@ app.use(router)
 
 registerPlugins(app)
 
+setupI18n(app)
+
 app.mount('#app')

+ 4 - 4
src/plugins/vueI18n/index.js

@@ -1,15 +1,15 @@
 // import { App } from 'vue'
 import { createI18n } from 'vue-i18n'
-import { useLocaleStoreWithOut } from '@/store/modules/locale'
+import { useLocaleStore } from '@/store/locale'
 // import { I18n, I18nOptions } from 'vue-i18n'
 // import { setHtmlPageLang } from './helper'
 
 export let i18n
 
 const createI18nOptions = async () => {
-  const localeStore = useLocaleStoreWithOut()
-  const locale = localeStore.getCurrentLocale
-  const localeMap = localeStore.getLocaleMap
+  const localeStore = useLocaleStore()
+  const locale = localeStore.currentLocale
+  const localeMap = localeStore.localeMap
   const defaultLocal = await import(`../../locales/${locale.lang}.js`)
   const message = defaultLocal.default ?? {}
   

+ 6 - 2
src/router/modules/remaining.js

@@ -1,8 +1,12 @@
-import personel from './personal'
+import personal from './personal'
 import enterprise from './enterprise'
 
 const type  = 0
-const items = type ? personel : enterprise
+const routeArray = [
+  personal,
+  enterprise
+]
+const items = routeArray[type]
 const remainingRouter = [
   {
     path: '/',

+ 0 - 12
src/store/counter.js

@@ -1,12 +0,0 @@
-import { ref, computed } from 'vue'
-import { defineStore } from 'pinia'
-
-export const useCounterStore = defineStore('counter', () => {
-  const count = ref(0)
-  const doubleCount = computed(() => count.value * 2)
-  function increment() {
-    count.value++
-  }
-
-  return { count, doubleCount, increment }
-})

+ 0 - 12
src/store/index.js

@@ -1,12 +0,0 @@
-
-import { createPinia } from 'pinia'
-import piniaPluginPersistedstate from 'pinia-plugin-persistedstate'
-
-const store = createPinia()
-store.use(piniaPluginPersistedstate)
-
-export const setupStore = app => {
-  app.use(store)
-}
-
-export { store }

+ 41 - 0
src/store/locale.js

@@ -0,0 +1,41 @@
+import { defineStore } from 'pinia'
+import { en, zhHans } from 'vuetify/locale'
+import { reactive } from 'vue'
+
+const elLocaleMap = {
+  'zh-CN': zhHans,
+  en: en
+}
+
+export const useLocaleStore = defineStore('locales',
+  () => {
+    const localeMap = [
+      {
+        lang: 'zh-CN',
+        name: '简体中文'
+      },
+      {
+        lang: 'en',
+        name: 'English'
+      }
+    ]
+    const currentLocale = reactive({
+      lang: 'zh-CN',
+      elLocale: elLocaleMap['zh-CN']
+    })
+    const setCurrentLocale = (localeMap) => {
+      // this.locale = Object.assign(this.locale, localeMap)
+      currentLocale.lang = localeMap.lang
+      currentLocale.elLocale = elLocaleMap[localeMap.lang]
+    }
+    return {
+      localeMap,
+      currentLocale,
+      setCurrentLocale
+    }
+  },
+  {
+    persist: true, // ref() 持久化响应
+  }
+)
+

+ 0 - 60
src/store/modules/locale.js

@@ -1,60 +0,0 @@
-import { defineStore } from 'pinia'
-import { store } from '../index'
-import { en, zhHans, zhHant } from 'vuetify/locale'
-import { getLang, setLang } from '@/utils/catch'
-// import zhCn from 'element-plus/es/locale/lang/zh-cn'
-// import en from 'element-plus/es/locale/lang/en'
-// import { CACHE_KEY, useCache } from '@/hooks/web/useCache'
-
-// const { wsCache } = useCache()
-
-const elLocaleMap = {
-  'zh-CN-Hant': zhHant,
-  'zh-CN': zhHans,
-  en: en
-}
-export const useLocaleStore = defineStore('locales', {
-  state: () => {
-    return {
-      currentLocale: {
-        lang: getLang() || 'zh-CN',
-        elLocale: elLocaleMap[getLang() || 'zh-CN']
-      },
-      // 多语言
-      localeMap: [
-        {
-          lang: 'zh-CN',
-          name: '简体中文'
-        },
-        {
-          lang: 'zh-CN-Hant',
-          name: '繁体中文'
-        },
-        {
-          lang: 'en',
-          name: 'English'
-        }
-      ]
-    }
-  },
-  getters: {
-    getCurrentLocale() {
-      return this.currentLocale
-    },
-    getLocaleMap() {
-      return this.localeMap
-    }
-  },
-  actions: {
-    setCurrentLocale(localeMap) {
-      // this.locale = Object.assign(this.locale, localeMap)
-      this.currentLocale.lang = localeMap?.lang
-      this.currentLocale.elLocale = elLocaleMap[localeMap?.lang]
-      setLang(localeMap?.lang)
-    }
-  }
-})
-
-export const useLocaleStoreWithOut = () => {
-  return useLocaleStore(store)
-}

+ 129 - 0
src/styles/protocol/index.css

@@ -0,0 +1,129 @@
+@charset "UTF-8";
+html, body, h1, h2, h3, h4, h5, h6, div, dl, dt, dd, ul, ol, li, p, blockquote, pre, hr, figure, table, caption, th, td, form, fieldset, legend, input, button, textarea, menu {
+  margin: 0;
+  padding: 0;
+}
+
+header, footer, section, article, aside, nav, hgroup, address, figure, figcaption, menu, details {
+  display: block;
+}
+
+table {
+  border-collapse: collapse;
+  border-spacing: 0;
+}
+
+caption, th {
+  text-align: left;
+  font-weight: normal;
+}
+
+html, body, fieldset, img, iframe, abbr {
+  border: 0;
+}
+
+i, cite, em, var, address, dfn {
+  font-style: normal;
+}
+
+[hidefocus], summary {
+  outline: 0;
+}
+
+li {
+  list-style: none;
+}
+
+h1, h2, h3, h4, h5, h6, small {
+  font-size: 100%;
+}
+
+a, button {
+  cursor: pointer;
+}
+
+h1, h2, h3, h4, h5, h6, em, strong, b {
+  font-weight: bold;
+}
+
+del, ins, u, s, a, a:hover {
+  text-decoration: none;
+}
+
+.conter, .conttle {
+  width: 100%;
+  overflow: hidden;
+}
+
+.large {
+  width: 100%;
+  height: 1px;
+  background-color: var(--default-color);
+}
+
+.Protocol {
+  width: 1040px;
+  margin: 0 auto;
+  background-color: #fff;
+  padding: 40px 40px 90px;
+  box-sizing: border-box;
+  font-family: "微软雅黑";
+}
+
+.Protocol p {
+  color: #333333;
+  font-size: 14px;
+  line-height: 30px;
+}
+
+.segment {
+  width: 100%;
+  font-size: 22px;
+  color: #333333;
+  margin-top: 45px;
+  margin-bottom: 32px;
+  font-weight: 700;
+  text-align: center;
+}
+
+.subtitle, .crosshead {
+  color: var(--default-color);
+  font-size: 14px;
+  line-height: 30px;
+}
+
+.crosshead {
+  color: #333333;
+}
+
+.text-color {
+  margin-top: 0px;
+  margin-bottom: 0px;
+  padding: 0px;
+  color: #333333;
+  font-size: 14px;
+  line-height: 30px;
+  font-family: 微软雅黑;
+  white-space: normal;
+}
+
+.text-font {
+  font-family: 宋体, SimSun;
+}
+
+.text-size {
+  margin: 0px;
+  padding: 0px;
+  font-size: 14px;
+  color: #00897B;
+  line-height: 30px;
+  font-family: 微软雅黑;
+  white-space: normal;
+}
+
+.text-p {
+  text-align: justify;
+  font-family: Calibri;
+  font-size: 14px;
+  white-space: normal;
+}

+ 1 - 0
src/styles/protocol/index.min.css

@@ -0,0 +1 @@
+html,body,h1,h2,h3,h4,h5,h6,div,dl,dt,dd,ul,ol,li,p,blockquote,pre,hr,figure,table,caption,th,td,form,fieldset,legend,input,button,textarea,menu{margin:0;padding:0}header,footer,section,article,aside,nav,hgroup,address,figure,figcaption,menu,details{display:block}table{border-collapse:collapse;border-spacing:0}caption,th{text-align:left;font-weight:normal}html,body,fieldset,img,iframe,abbr{border:0}i,cite,em,var,address,dfn{font-style:normal}[hidefocus],summary{outline:0}li{list-style:none}h1,h2,h3,h4,h5,h6,small{font-size:100%}a,button{cursor:pointer}h1,h2,h3,h4,h5,h6,em,strong,b{font-weight:bold}del,ins,u,s,a,a:hover{text-decoration:none}.conter,.conttle{width:100%;overflow:hidden}.large{width:100%;height:1px;background-color:var(--default-color)}.Protocol{width:1040px;margin:0 auto;background-color:#fff;padding:40px 40px 90px;box-sizing:border-box;font-family:"微软雅黑"}.Protocol p{color:#333333;font-size:14px;line-height:30px}.segment{width:100%;font-size:22px;color:#333333;margin-top:45px;margin-bottom:32px;font-weight:700;text-align:center}.subtitle,.crosshead{color:var(--default-color);font-size:14px;line-height:30px}.crosshead{color:#333333}.text-color{margin-top:0px;margin-bottom:0px;padding:0px;color:#333;font-size:14px;line-height:30px;font-family:微软雅黑;white-space:normal}.text-font{font-family:宋体, SimSun}.text-size{margin:0px;padding:0px;font-size:14px;color:#00897B;line-height:30px;font-family:微软雅黑;white-space:normal}.text-p{text-align:justify;font-family:Calibri;font-size:14px;white-space:normal}

+ 123 - 0
src/styles/protocol/index.scss

@@ -0,0 +1,123 @@
+html,body,h1,h2,h3,h4,h5,h6,div,dl,dt,dd,ul,ol,li,p,blockquote,pre,hr,figure,table,caption,th,td,form,fieldset,legend,input,button,textarea,menu {
+  margin: 0;
+  padding: 0;
+}
+
+header,footer,section,article,aside,nav,hgroup,address,figure,figcaption,menu,details {
+  display: block;
+}
+
+table {
+  border-collapse: collapse;
+  border-spacing: 0;
+}
+caption,th {
+  text-align: left;
+  font-weight: normal;
+}
+
+html,body,fieldset,img,iframe,abbr {
+  border: 0;
+}
+
+i,cite,em,var,address,dfn {
+  font-style: normal;
+}
+
+[hidefocus],summary {
+  outline: 0;
+}
+
+li {
+  list-style: none;
+}
+
+h1,h2,h3,h4,h5,h6,small {
+  font-size: 100%;
+}
+
+a,button {
+  cursor: pointer;
+}
+
+h1,h2,h3,h4,h5,h6,em,strong,b {
+  font-weight: bold;
+}
+
+del,ins,u,s,a,a:hover {
+  text-decoration: none;
+}
+
+.conter,.conttle {
+  width: 100%;
+  overflow: hidden;
+}
+
+.large {
+  width: 100%;
+  height: 1px;
+  background-color: var(--default-color);
+}
+
+.Protocol {
+  width: 1040px;
+  margin: 0 auto;
+  background-color: #fff;
+  padding: 40px 40px 90px;
+  box-sizing: border-box;
+  font-family: "微软雅黑";
+}
+
+.Protocol p {
+  color: #333333;
+  font-size: 14px;
+  line-height: 30px;
+}
+
+.segment {
+  width: 100%;
+  font-size: 22px;
+  color: #333333;
+  margin-top: 45px;
+  margin-bottom: 32px;
+  font-weight: 700;
+  text-align: center;
+}
+
+.subtitle,.crosshead {
+  color: var(--default-color);
+  font-size: 14px;
+  line-height: 30px;
+}
+
+.crosshead {
+  color: #333333;
+}
+.text-color {
+  margin-top: 0px; 
+  margin-bottom: 0px; 
+  padding: 0px; 
+  color: rgb(51, 51, 51); 
+  font-size: 14px; 
+  line-height: 30px; 
+  font-family: 微软雅黑; 
+  white-space: normal;
+}
+.text-font {
+  font-family: 宋体, SimSun;
+}
+.text-size {
+  margin: 0px; 
+  padding: 0px; 
+  font-size: 14px; 
+  color: #00897B; 
+  line-height: 30px; 
+  font-family: 微软雅黑; 
+  white-space: normal;
+}
+.text-p {
+  text-align: justify;
+  font-family: Calibri;
+  font-size: 14px;
+  white-space: normal
+}

+ 0 - 8
src/utils/cache.js

@@ -1,8 +0,0 @@
-
-export const getLang = () => {
-  return localStorage.getItem('lang')
-}
-
-export const setLang = (value) => {
-  return localStorage.setItem('lang', value)
-}

+ 8 - 8
src/views/login/components/phone.vue

@@ -6,13 +6,13 @@
           <span class="d-flex">
             <v-icon icon="mdi-cellphone" size="20"></v-icon>
             <span class="d-flex" id="menu-activator">
-              <span class="phone-number">{{ currentAear }}</span>
+              <span class="phone-number">{{ currentArea }}</span>
               <v-icon size="20">mdi-chevron-down</v-icon>
             </span>
             <v-menu activator="#menu-activator">
               <v-list>
-                <v-list-item v-for="(item, index) in items" :key="index" :value="index" @click="handleChangeCurrentAear">
-                  <v-list-item-title>{{ item.title }}</v-list-item-title>
+                <v-list-item v-for="(item, index) in items" :key="index" :value="index" @click="handleChangeCurrentArea(item)">
+                  <v-list-item-title>{{ item.label }}</v-list-item-title>
                 </v-list-item>
               </v-list>
             </v-menu>
@@ -44,12 +44,12 @@ const phoneRules = ref([
   }
 ])
 // 手机号区域
-const currentAear = ref('中国大陆')
+const currentArea = ref('0086')
 const items = [
-  { title: '中国大陆', value: '86' }
+  { label: '中国大陆-0086', value: '0086' }
 ]
-const handleChangeCurrentAear = (e) => {
-  currentAear.value = e.target.innerText
+const handleChangeCurrentArea = (e) => {
+  currentArea.value = e.value
 }
 
 // 获取验证码
@@ -103,7 +103,7 @@ const loginData = reactive({
   font-size: 12px;
 }
 ::v-deep .phone-number {
+  width: 34px;
   font-size: 12px;
-  width: 50px;
 }
 </style>

+ 3 - 176
src/views/login/components/privacyPolicy.vue

@@ -6,11 +6,8 @@
         style="margin-top:20px;font-size:26px;margin-bottom:20px;"
       >门墩儿直聘隐私保护政策</h1>
       <div style="word-break: break-word;">
-        <p>尊敬的用户,我们对《门墩儿直聘隐私保护政策》(以下简称“本《隐私保护政策》”)进行了更新,
-          请你务必认真阅读本《隐私保护政策》,在确认充分了解并同意后使用。在您成为门墩儿直聘注册用戶 ,使用门墩儿直聘提供的服务之前 ,请您认真阅读门墩儿直聘《用戶协议》( 以下简 称“协议”), 更好地了解我们所提供的服务以及您享有的权利和承担的义务。您一旦开始使用门墩儿直聘服务,即表示您已经确认并接受了本协议中的全部条款。
-本协议系由您( 以下简称“用戶 ”或“您”) 与苏州火识教育科技有限公司( 以下简称“门墩儿直聘公司”或“我们”)
-(公司地址:苏州工业园区林泉街399号东南大学国家大学科技园(苏州)南工院(2#)304室 ,联系电话:15618895775)就门墩儿直聘公  司提供的门墩儿直聘软件( 以下简称“本平台”或“门墩儿直聘”)所订立的相关权利义务规范。门墩儿直聘软件是一个 严肃纯净的招聘服务软件 ,请您在注册、使用门墩儿直聘之前 ,认真阅读以下条款。
-(温馨提示:为了您的合法权益不受损害,平台建议您在使用门墩儿直聘找工作前,仔细阅读安全求职指南,谨防各类求职陷阱)。
+        <p>尊敬的用户,欢迎您使用门墩儿产品和服务!
+门墩儿致力于为您提供高质量的招聘服务,我们深知个人信息的重要性,并承诺严格遵守相关法律法规,保护您的隐私和个人信息安全。本隐私政策旨在向您说明我们在收集、使用、处理、存储和分享您的个人信息时的做法,以帮助您更好地了解我们的服务并作出明智的决策。
         </p>
         <p>&nbsp;
 
@@ -456,175 +453,5 @@
 </template>
 
 <style scoped lang="scss">
-html,
-body,
-h1,
-h2,
-h3,
-h4,
-h5,
-h6,
-div,
-dl,
-dt,
-dd,
-ul,
-ol,
-li,
-p,
-blockquote,
-pre,
-hr,
-figure,
-table,
-caption,
-th,
-td,
-form,
-fieldset,
-legend,
-input,
-button,
-textarea,
-menu {
-    margin: 0;
-    padding: 0;
-}
-
-header,
-footer,
-section,
-article,
-aside,
-nav,
-hgroup,
-address,
-figure,
-figcaption,
-menu,
-details {
-    display: block;
-}
-
-table {
-    border-collapse: collapse;
-    border-spacing: 0;
-}
-
-caption,
-th {
-    text-align: left;
-    font-weight: normal;
-}
-
-html,
-body,
-fieldset,
-img,
-iframe,
-abbr {
-    border: 0;
-}
-
-i,
-cite,
-em,
-var,
-address,
-dfn {
-    font-style: normal;
-}
-
-[hidefocus],
-summary {
-    outline: 0;
-}
-
-li {
-    list-style: none;
-}
-
-h1,
-h2,
-h3,
-h4,
-h5,
-h6,
-small {
-    font-size: 100%;
-}
-
-a,
-button {
-    cursor: pointer;
-}
-
-h1,
-h2,
-h3,
-h4,
-h5,
-h6,
-em,
-strong,
-b {
-    font-weight: bold;
-}
-
-del,
-ins,
-u,
-s,
-a,
-a:hover {
-    text-decoration: none;
-}
-
-.conter,
-.conttle {
-    width: 100%;
-    overflow: hidden;
-}
-
-.large {
-    width: 100%;
-    height: 1px;
-    background-color: var(--default-color);
-}
-
-.Protocol {
-    width: 1040px;
-    margin: 0 auto;
-    background-color: #fff;
-    padding: 40px 40px 90px;
-    box-sizing: border-box;
-    font-family: "微软雅黑";
-}
-
-.Protocol p {
-    color: #333333;
-    font-size: 14px;
-    line-height: 30px;
-}
-
-.segment {
-    width: 100%;
-    font-size: 22px;
-    color: #333333;
-    margin-top: 45px;
-    margin-bottom: 32px;
-    font-weight: 700;
-    text-align: center;
-}
-
-.subtitle,
-.crosshead {
-    color: var(--default-color);
-    font-size: 14px;
-    line-height: 30px;
-}
-
-.crosshead {
-    color: #333333;
-}
+@import url('../../../styles/protocol/index.scss');
 </style>

+ 1 - 1
src/views/login/components/qrCode.vue

@@ -5,7 +5,7 @@
       cover
       aspect-ratio="16/9"
       src="https://minio.citupro.com/dev/static/csqrcode.jpg"
-      style="height: 200px;"
+      style="height: 300px;"
     ></v-img>
   </div>
 </template>

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 3 - 117
src/views/login/components/userAgreement.vue


+ 29 - 1
src/views/login/index.vue

@@ -14,6 +14,26 @@
         </div>
       </div>
       <div class="login-content-box mt-5">
+        <v-menu>
+          <template v-slot:activator="{ props }">
+            <v-btn
+              color="primary"
+              v-bind="props"
+            >
+              Activator slot
+            </v-btn>
+          </template>
+          <v-list>
+            <v-list-item
+              v-for="(item, index) in localeStore.localeMap"
+              :key="index"
+              :value="item.lang"
+            >
+              <v-list-item-title @click="localeStore.setCurrentLocale(item)">{{ item.name }}</v-list-item-title>
+            </v-list-item>
+          </v-list>
+        </v-menu>
+        <v-btn>{{ localeStore.currentLocale.lang }}</v-btn>
         <div v-if="!isPhone" class="login-tab">
           <v-tabs v-model="tab" align-tabs="center" color="#00897B">
             <v-tab :value="1">短信登录</v-tab>
@@ -34,7 +54,9 @@
           <!-- 微信扫码登录 -->
           <qr-code></qr-code>
         </div>
-        <v-btn color="primary" class="white--text mt-5" min-width="350" @click="handleLogin">{{ tab === 1 ? '登录/注册' : '登录' }}</v-btn>
+        <v-btn color="primary" class="white--text mt-5" min-width="350" @click="handleLogin">
+          {{ tab === 1 ? $t('login.register') : $t('login.login') }}
+        </v-btn>
         <div class="login-tips mt-3">
           登录/注册即代表您同意 
           <span class="color" style="cursor: pointer;" @click="handleToUserAgreement">[用户协议]</span>
@@ -51,6 +73,12 @@ import passwordFrom from './components/password.vue'
 import phoneFrom from './components/phone.vue'
 import qrCode from './components/qrCode.vue'
 defineOptions({ name: 'login-index' })
+
+import { useLocaleStore } from '@/store/locale'
+
+const localeStore = useLocaleStore()
+
+
 const phone = ref()
 let isPhone = ref(false)
 const handlePhone = () => {

Algunos archivos no se mostraron porque demasiados archivos cambiaron en este cambio