From 94c19e2ee399132cbe7873e83dd87312bf61facd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=85=A8=E6=A0=88=E5=B0=8F=E5=AD=A6=E7=94=9F?= <1518079521@qq.com> Date: Wed, 6 Sep 2023 18:40:52 +0800 Subject: [PATCH] update web --- web/api/article.ts | 27 --- web/app.vue | 20 +-- web/{ => app}/api/auth.ts | 0 web/{ => app}/api/member.ts | 0 web/{ => app}/api/system.ts | 7 - web/{ => app}/assets/images/word/api.jpg | Bin .../assets/images/word/community.jpg | Bin web/{ => app}/assets/images/word/course.jpg | Bin .../assets/images/word/word-back.jpg | Bin web/{ => app}/assets/images/word/wx.jpg | Bin web/app/lang/en/common.json | 2 + web/{ => app}/lang/en/index.json | 0 web/{ => app}/lang/en/pages.json | 0 web/{ => app}/lang/zh-cn/auth.bind.json | 0 web/{ => app}/lang/zh-cn/auth.login.json | 0 web/{ => app}/lang/zh-cn/auth.register.json | 0 web/app/lang/zh-cn/common.json | 33 ++++ web/{ => app}/lang/zh-cn/index.json | 0 web/{ => app}/lang/zh-cn/member.balance.json | 0 web/{ => app}/lang/zh-cn/member.center.json | 0 web/{ => app}/lang/zh-cn/member.json | 0 web/{ => app}/lang/zh-cn/member.point.json | 0 web/{ => app}/lang/zh-cn/pages.json | 10 +- web/{ => app}/pages/auth/agreement.vue | 4 +- web/{ => app}/pages/auth/bind.vue | 18 +- web/{ => app}/pages/auth/login.vue | 30 ++-- web/{ => app}/pages/auth/register.vue | 30 ++-- web/{ => app}/pages/index.vue | 12 +- web/{ => app}/pages/member/balance.vue | 16 +- web/{ => app}/pages/member/center.vue | 11 +- web/{ => app}/pages/member/index.vue | 30 ++-- web/{ => app}/pages/member/point.vue | 16 +- web/app/pages/routes.ts | 59 +++++++ web/{ => app}/pages/site/close.vue | 0 web/{ => app}/pages/site/nosite.vue | 0 web/app/router.options.ts | 16 ++ web/composables/useCaptcha.ts | 2 +- web/composables/useLang.ts | 7 +- web/composables/useSendSms.ts | 2 +- web/env/.env.dev | 6 - web/env/.env.product | 6 - web/lang/zh-cn/article.detail.json | 3 - web/lang/zh-cn/article.list.json | 3 - web/lang/zh-cn/common.json | 2 - web/layouts/components/footer/index.vue | 36 ++-- web/layouts/components/header/index.vue | 7 +- web/middleware/lang-load.global.ts | 7 - web/nuxt.config.ts | 9 + web/package.json | 3 +- web/pages/article/detail.vue | 78 --------- web/pages/article/list.vue | 162 ------------------ web/plugins/i18n.ts | 6 +- web/stores/app.ts | 4 +- web/stores/config.ts | 2 +- web/stores/member.ts | 6 +- web/stores/system.ts | 12 +- web/utils/language.ts | 29 +++- web/utils/request.ts | 1 - 58 files changed, 282 insertions(+), 452 deletions(-) delete mode 100644 web/api/article.ts rename web/{ => app}/api/auth.ts (100%) rename web/{ => app}/api/member.ts (100%) rename web/{ => app}/api/system.ts (93%) rename web/{ => app}/assets/images/word/api.jpg (100%) rename web/{ => app}/assets/images/word/community.jpg (100%) rename web/{ => app}/assets/images/word/course.jpg (100%) rename web/{ => app}/assets/images/word/word-back.jpg (100%) rename web/{ => app}/assets/images/word/wx.jpg (100%) create mode 100644 web/app/lang/en/common.json rename web/{ => app}/lang/en/index.json (100%) rename web/{ => app}/lang/en/pages.json (100%) rename web/{ => app}/lang/zh-cn/auth.bind.json (100%) rename web/{ => app}/lang/zh-cn/auth.login.json (100%) rename web/{ => app}/lang/zh-cn/auth.register.json (100%) create mode 100644 web/app/lang/zh-cn/common.json rename web/{ => app}/lang/zh-cn/index.json (100%) rename web/{ => app}/lang/zh-cn/member.balance.json (100%) rename web/{ => app}/lang/zh-cn/member.center.json (100%) rename web/{ => app}/lang/zh-cn/member.json (100%) rename web/{ => app}/lang/zh-cn/member.point.json (100%) rename web/{ => app}/lang/zh-cn/pages.json (57%) rename web/{ => app}/pages/auth/agreement.vue (89%) rename web/{ => app}/pages/auth/bind.vue (88%) rename web/{ => app}/pages/auth/login.vue (91%) rename web/{ => app}/pages/auth/register.vue (86%) rename web/{ => app}/pages/index.vue (88%) rename web/{ => app}/pages/member/balance.vue (81%) rename web/{ => app}/pages/member/center.vue (93%) rename web/{ => app}/pages/member/index.vue (75%) rename web/{ => app}/pages/member/point.vue (83%) create mode 100644 web/app/pages/routes.ts rename web/{ => app}/pages/site/close.vue (100%) rename web/{ => app}/pages/site/nosite.vue (100%) create mode 100644 web/app/router.options.ts delete mode 100644 web/lang/zh-cn/article.detail.json delete mode 100644 web/lang/zh-cn/article.list.json delete mode 100644 web/middleware/lang-load.global.ts delete mode 100644 web/pages/article/detail.vue delete mode 100644 web/pages/article/list.vue diff --git a/web/api/article.ts b/web/api/article.ts deleted file mode 100644 index c7a2cebc1..000000000 --- a/web/api/article.ts +++ /dev/null @@ -1,27 +0,0 @@ -/** - * 文章列表 - */ -export function getArticleList(params: Record) { - return request.get('article/article', params) -} - -/** - * 文章列表 - */ -export function getArticleAll(params: Record) { - return request.get('article/article/all', params) -} - -/** - * 文章详情 - */ -export function getArticleDetail(id: number) { - return request.get(`article/article/${id}`) -} - -/** - * 文章分类 - */ -export function getArticleCategory() { - return request.get('article/category') -} \ No newline at end of file diff --git a/web/app.vue b/web/app.vue index 0afd71334..67e6aad6e 100644 --- a/web/app.vue +++ b/web/app.vue @@ -13,7 +13,6 @@ import zhCn from 'element-plus/dist/locale/zh-cn.mjs' import en from 'element-plus/dist/locale/en.mjs' import Language from '~~/utils/language' import useSystemStore from '@/stores/system' -import useAppStore from '@/stores/app' import useMemberStore from '@/stores/member' // 引入全局样式 import '@/assets/styles/index.scss' @@ -32,22 +31,21 @@ const locale = computed(() => (systemStore.lang === 'zh-cn' ? zhCn : en)) const configStore = useConfigStore() configStore.getLoginConfig() -// 查询站点信息 -systemStore.getSitenfo() - // 如果已登录 getToken() && useMemberStore().setToken(getToken()) const route = useRoute() watch(route, (nval, oval) => { - useAppStore().$patch(state => { - state.route = route.path - }) + // 加载语言包 + const fileinfo = nval.matched[0].components.default.__file.split('/pages/') + const file = fileinfo[1].replace('.vue', '') + const app = fileinfo[0].substring(fileinfo[0].lastIndexOf('/') + 1) + + const language = new Language(useNuxtApp().$getI18n()) + language.loadLocaleMessages(app, file, useSystemStore().lang) // 设置页面title let path = route.path == '/' ? '/index' : route.path - // 处理部署后不知道为什么url会自动拼接上 / 的问题 - if (path.slice(-1) == '/') path = path.slice(0, -1) path = !path.lastIndexOf('/') ? `${path}/index` : path let key = path.replace('/', '').replaceAll('/', '.') @@ -58,10 +56,6 @@ watch(route, (nval, oval) => { }, !oval ? 500 : 0) }, { immediate: true }) -// 语言包初始化加载 -const language = new Language(useNuxtApp().$getI18n()) -language.loadLocaleMessages(route.path, useSystemStore().lang) - // 设置title模板 useHead({ titleTemplate: (title) => { diff --git a/web/api/auth.ts b/web/app/api/auth.ts similarity index 100% rename from web/api/auth.ts rename to web/app/api/auth.ts diff --git a/web/api/member.ts b/web/app/api/member.ts similarity index 100% rename from web/api/member.ts rename to web/app/api/member.ts diff --git a/web/api/system.ts b/web/app/api/system.ts similarity index 93% rename from web/api/system.ts rename to web/app/api/system.ts index cb4d8d885..e2625d01a 100644 --- a/web/api/system.ts +++ b/web/app/api/system.ts @@ -66,11 +66,4 @@ export function fetchBase64Image(data: AnyObject) { */ export function getCopyRight(data: AnyObject) { return request.get('copyright', data) -} - -/** - * 获取站点信息 - */ -export function getSiteInfo() { - return request.get('site') } \ No newline at end of file diff --git a/web/assets/images/word/api.jpg b/web/app/assets/images/word/api.jpg similarity index 100% rename from web/assets/images/word/api.jpg rename to web/app/assets/images/word/api.jpg diff --git a/web/assets/images/word/community.jpg b/web/app/assets/images/word/community.jpg similarity index 100% rename from web/assets/images/word/community.jpg rename to web/app/assets/images/word/community.jpg diff --git a/web/assets/images/word/course.jpg b/web/app/assets/images/word/course.jpg similarity index 100% rename from web/assets/images/word/course.jpg rename to web/app/assets/images/word/course.jpg diff --git a/web/assets/images/word/word-back.jpg b/web/app/assets/images/word/word-back.jpg similarity index 100% rename from web/assets/images/word/word-back.jpg rename to web/app/assets/images/word/word-back.jpg diff --git a/web/assets/images/word/wx.jpg b/web/app/assets/images/word/wx.jpg similarity index 100% rename from web/assets/images/word/wx.jpg rename to web/app/assets/images/word/wx.jpg diff --git a/web/app/lang/en/common.json b/web/app/lang/en/common.json new file mode 100644 index 000000000..7a73a41bf --- /dev/null +++ b/web/app/lang/en/common.json @@ -0,0 +1,2 @@ +{ +} \ No newline at end of file diff --git a/web/lang/en/index.json b/web/app/lang/en/index.json similarity index 100% rename from web/lang/en/index.json rename to web/app/lang/en/index.json diff --git a/web/lang/en/pages.json b/web/app/lang/en/pages.json similarity index 100% rename from web/lang/en/pages.json rename to web/app/lang/en/pages.json diff --git a/web/lang/zh-cn/auth.bind.json b/web/app/lang/zh-cn/auth.bind.json similarity index 100% rename from web/lang/zh-cn/auth.bind.json rename to web/app/lang/zh-cn/auth.bind.json diff --git a/web/lang/zh-cn/auth.login.json b/web/app/lang/zh-cn/auth.login.json similarity index 100% rename from web/lang/zh-cn/auth.login.json rename to web/app/lang/zh-cn/auth.login.json diff --git a/web/lang/zh-cn/auth.register.json b/web/app/lang/zh-cn/auth.register.json similarity index 100% rename from web/lang/zh-cn/auth.register.json rename to web/app/lang/zh-cn/auth.register.json diff --git a/web/app/lang/zh-cn/common.json b/web/app/lang/zh-cn/common.json new file mode 100644 index 000000000..83ee43c3c --- /dev/null +++ b/web/app/lang/zh-cn/common.json @@ -0,0 +1,33 @@ +{ + "login": "登录", + "register": "注册", + "getSmsCode": "获取短信验证码", + "smsCodeChangeText": "秒后重新获取", + "captchaTitle": "请先完成安全验证", + "confirm": "确认", + "cancel": "取消", + "captchaPlaceholder": "请输入验证码", + "mobilePlaceholder": "请输入手机号码", + "mobileError": "请输入正确的手机号", + "codePlaceholder": "请输入手机验证码", + "userAgreement": "用户协议", + "privacyAgreement": "隐私协议", + "protocolNotConfigured": "未配置协议", + "request": { + "unknownError": "未知错误", + "400": "错误的请求", + "401": "请重新登录", + "403": "拒绝访问", + "404": "请求错误", + "405": "请求方法未允许", + "408": "请求超时", + "409": "请求跨域", + "500": "服务器端出错,错误原因:", + "501": "网络未实现", + "502": "网络错误", + "503": "服务不可用", + "504": "网络超时", + "505": "http版本不支持该请求", + "timeout": "网络请求超时!" + } +} \ No newline at end of file diff --git a/web/lang/zh-cn/index.json b/web/app/lang/zh-cn/index.json similarity index 100% rename from web/lang/zh-cn/index.json rename to web/app/lang/zh-cn/index.json diff --git a/web/lang/zh-cn/member.balance.json b/web/app/lang/zh-cn/member.balance.json similarity index 100% rename from web/lang/zh-cn/member.balance.json rename to web/app/lang/zh-cn/member.balance.json diff --git a/web/lang/zh-cn/member.center.json b/web/app/lang/zh-cn/member.center.json similarity index 100% rename from web/lang/zh-cn/member.center.json rename to web/app/lang/zh-cn/member.center.json diff --git a/web/lang/zh-cn/member.json b/web/app/lang/zh-cn/member.json similarity index 100% rename from web/lang/zh-cn/member.json rename to web/app/lang/zh-cn/member.json diff --git a/web/lang/zh-cn/member.point.json b/web/app/lang/zh-cn/member.point.json similarity index 100% rename from web/lang/zh-cn/member.point.json rename to web/app/lang/zh-cn/member.point.json diff --git a/web/lang/zh-cn/pages.json b/web/app/lang/zh-cn/pages.json similarity index 57% rename from web/lang/zh-cn/pages.json rename to web/app/lang/zh-cn/pages.json index c594145bf..9e1595697 100644 --- a/web/lang/zh-cn/pages.json +++ b/web/app/lang/zh-cn/pages.json @@ -5,20 +5,12 @@ }, "auth": { "login": "登录", - "register": "登录", + "register": "注册", "bind": "手机号绑定" }, "member": { "index": "欢迎页", "center": "个人中心" - }, - "article": { - "list": "文章", - "detail": "文章" - }, - "site": { - "close": "站点已关闭", - "nosite": "站点不存在" } } } \ No newline at end of file diff --git a/web/pages/auth/agreement.vue b/web/app/pages/auth/agreement.vue similarity index 89% rename from web/pages/auth/agreement.vue rename to web/app/pages/auth/agreement.vue index 0cc5c7d2b..1d4b195b4 100644 --- a/web/pages/auth/agreement.vue +++ b/web/app/pages/auth/agreement.vue @@ -11,7 +11,7 @@ - \ No newline at end of file + diff --git a/web/pages/auth/bind.vue b/web/app/pages/auth/bind.vue similarity index 88% rename from web/pages/auth/bind.vue rename to web/app/pages/auth/bind.vue index bb55d1462..4b2096e55 100644 --- a/web/pages/auth/bind.vue +++ b/web/app/pages/auth/bind.vue @@ -1,10 +1,10 @@ \ No newline at end of file +~/app/api/member diff --git a/web/pages/member/center.vue b/web/app/pages/member/center.vue similarity index 93% rename from web/pages/member/center.vue rename to web/app/pages/member/center.vue index e078919df..767746384 100644 --- a/web/pages/member/center.vue +++ b/web/app/pages/member/center.vue @@ -12,7 +12,8 @@
- + {{ t('edit') }} @@ -22,7 +23,8 @@
{{ updateNickname.value }} - {{ t('edit')}} + {{ + t('edit') }}
@@ -50,7 +52,7 @@ import { reactive, ref, computed } from 'vue' import useMemberStore from '@/stores/member' import useAppStore from '@/stores/app' -import { modifyMember } from '@/api/member' +import { modifyMember } from '@/app/api/member' import { ElMessage, UploadFile, UploadFiles } from 'element-plus' import request from '@/utils/request' import storage from '@/utils/storage' @@ -77,7 +79,6 @@ definePageMeta({ middleware: 'auth' }) const upload = computed(() => { const headers: Record = {} headers.token = getToken() - headers['site-id'] = storage.get('siteId') || 1 return { action: `${request.options.baseURL}/file/image`, limit: 1, @@ -120,4 +121,4 @@ const updateNicknameConfirm = () => { ::v-deep .form-wrap .el-form-item { align-items: center; } - \ No newline at end of file +~/app/api/member diff --git a/web/pages/member/index.vue b/web/app/pages/member/index.vue similarity index 75% rename from web/pages/member/index.vue rename to web/app/pages/member/index.vue index 360f2269e..e9160c4d4 100644 --- a/web/pages/member/index.vue +++ b/web/app/pages/member/index.vue @@ -5,19 +5,21 @@
- +
- {{info.nickname}} - ({{t('mobile')}}:{{info.mobile ? info.mobile : t('notBound') }}) + {{ info.nickname }} + ({{ t('mobile') }}:{{ info.mobile ? info.mobile : t('notBound') + }})
-

{{t('registrationTime')}}:{{info.create_time}}

+

{{ t('registrationTime') }}:{{ info.create_time }}

@@ -41,24 +43,30 @@ import useMemberStore from '@/stores/member' import useAppStore from '@/stores/app' import type { UploadProps } from 'element-plus' +definePageMeta({ middleware: 'auth' }) + const memberStore = useMemberStore() const loading = ref(true) -const info = computed(() =>{ - if(memberStore.info) loading.value = false; +const info = computed(() => { + if (memberStore.info) loading.value = false; return memberStore.info; }) const appStore = useAppStore() \ No newline at end of file +}~/app/api/member diff --git a/web/app/pages/routes.ts b/web/app/pages/routes.ts new file mode 100644 index 000000000..f35a3bb8c --- /dev/null +++ b/web/app/pages/routes.ts @@ -0,0 +1,59 @@ +export default [ + { + path: "/", + component: () => import('~/app/pages/index.vue') + }, + { + path: "/auth/login", + component: () => import('~/app/pages/auth/login.vue'), + meta: { + layout: "container" + } + }, + { + path: "/auth/register", + component: () => import('~/app/pages/auth/register.vue'), + meta: { + layout: "container" + } + }, + { + path: "/auth/bind", + component: () => import('~/app/pages/auth/bind.vue'), + meta: { + layout: "container" + } + }, + { + path: "/auth/agreement", + component: () => import('~/app/pages/auth/agreement.vue') + }, + { + path: "/member", + component: () => import('~/app/pages/member/index.vue'), + meta: { + middleware: ["auth"] + } + }, + { + path: "/member/center", + component: () => import('~/app/pages/member/center.vue'), + meta: { + middleware: ["auth"] + } + }, + { + path: "/member/balance", + component: () => import('~/app/pages/member/balance.vue'), + meta: { + middleware: ["auth"] + } + }, + { + path: "/member/point", + component: () => import('~/app/pages/member/point.vue'), + meta: { + middleware: ["auth"] + } + } +] \ No newline at end of file diff --git a/web/pages/site/close.vue b/web/app/pages/site/close.vue similarity index 100% rename from web/pages/site/close.vue rename to web/app/pages/site/close.vue diff --git a/web/pages/site/nosite.vue b/web/app/pages/site/nosite.vue similarity index 100% rename from web/pages/site/nosite.vue rename to web/app/pages/site/nosite.vue diff --git a/web/app/router.options.ts b/web/app/router.options.ts new file mode 100644 index 000000000..f4d48a62f --- /dev/null +++ b/web/app/router.options.ts @@ -0,0 +1,16 @@ +import type { RouterConfig } from '@nuxt/schema' + +const routeFiles = import.meta.glob('../**/routes.ts') +const routes = [] + +for (const key of Object.keys(routeFiles)) { + await routeFiles[key]().then(res => { + routes.push(...res.default) + }) +} + +// https://router.vuejs.org/api/interfaces/routeroptions.html +export default { + routes: (_routes) => routes, + strict: false +} diff --git a/web/composables/useCaptcha.ts b/web/composables/useCaptcha.ts index 872f7481b..f5f8865be 100644 --- a/web/composables/useCaptcha.ts +++ b/web/composables/useCaptcha.ts @@ -1,4 +1,4 @@ -import { getCaptcha } from '@/api/system' +import { getCaptcha } from '~/app/api/system' interface formData { captcha_code: string, diff --git a/web/composables/useLang.ts b/web/composables/useLang.ts index 8faf483ad..f4f18e9ff 100644 --- a/web/composables/useLang.ts +++ b/web/composables/useLang.ts @@ -2,10 +2,7 @@ import useAppStore from '~/stores/app' export function t(message: string) { const i18n = useNuxtApp().$getI18n() - let path = useAppStore().route - // 处理部署后不知道为什么url会自动拼接上 / 的问题 - if (path != '/' && path.slice(-1) == '/') path = path.slice(0, -1) - const file = path == '/' ? 'index' : path.replace('/', '').replaceAll('/', '.') - const key = `${file}.${message}` + const langKey = useAppStore().langKey + const key = `${langKey}.${message}` return i18n.global.t(key) != key ? i18n.global.t(key) : i18n.global.t(message) } \ No newline at end of file diff --git a/web/composables/useSendSms.ts b/web/composables/useSendSms.ts index 896fa0e86..70f6840c9 100644 --- a/web/composables/useSendSms.ts +++ b/web/composables/useSendSms.ts @@ -1,4 +1,4 @@ -import { sendSms } from '@/api/system' +import { sendSms } from '~/app/api/system' export function useSendSms() { const canGetCode = ref(true), diff --git a/web/env/.env.dev b/web/env/.env.dev index ef739fe72..8a30ee780 100644 --- a/web/env/.env.dev +++ b/web/env/.env.dev @@ -4,17 +4,11 @@ VITE_APP_BASE_URL='' # 图片服务器地址 VITE_IMG_DOMAIN='' -# 本地开发时站点id -VITE_SITE_ID = 1 - # 本地存储时token的参数名 VITE_REQUEST_STORAGE_TOKEN_KEY='webToken' # 请求时header中token的参数名 VITE_REQUEST_HEADER_TOKEN_KEY='token' -# 请求时header中站点的参数名 -VITE_REQUEST_HEADER_SITEID_KEY='site-id' - # 请求时header中来源场景的参数名 VITE_REQUEST_HEADER_CHANNEL_KEY='channel' \ No newline at end of file diff --git a/web/env/.env.product b/web/env/.env.product index ef739fe72..8a30ee780 100644 --- a/web/env/.env.product +++ b/web/env/.env.product @@ -4,17 +4,11 @@ VITE_APP_BASE_URL='' # 图片服务器地址 VITE_IMG_DOMAIN='' -# 本地开发时站点id -VITE_SITE_ID = 1 - # 本地存储时token的参数名 VITE_REQUEST_STORAGE_TOKEN_KEY='webToken' # 请求时header中token的参数名 VITE_REQUEST_HEADER_TOKEN_KEY='token' -# 请求时header中站点的参数名 -VITE_REQUEST_HEADER_SITEID_KEY='site-id' - # 请求时header中来源场景的参数名 VITE_REQUEST_HEADER_CHANNEL_KEY='channel' \ No newline at end of file diff --git a/web/lang/zh-cn/article.detail.json b/web/lang/zh-cn/article.detail.json deleted file mode 100644 index 96fc010c4..000000000 --- a/web/lang/zh-cn/article.detail.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "title": "文章" -} \ No newline at end of file diff --git a/web/lang/zh-cn/article.list.json b/web/lang/zh-cn/article.list.json deleted file mode 100644 index 96fc010c4..000000000 --- a/web/lang/zh-cn/article.list.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "title": "文章" -} \ No newline at end of file diff --git a/web/lang/zh-cn/common.json b/web/lang/zh-cn/common.json index 34ca92775..83ee43c3c 100644 --- a/web/lang/zh-cn/common.json +++ b/web/lang/zh-cn/common.json @@ -13,8 +13,6 @@ "userAgreement": "用户协议", "privacyAgreement": "隐私协议", "protocolNotConfigured": "未配置协议", - "siteClose": "站点已关闭", - "noSite": "站点不存在", "request": { "unknownError": "未知错误", "400": "错误的请求", diff --git a/web/layouts/components/footer/index.vue b/web/layouts/components/footer/index.vue index c4e9eefa3..5fc3ffae8 100644 --- a/web/layouts/components/footer/index.vue +++ b/web/layouts/components/footer/index.vue @@ -1,53 +1,51 @@ - \ No newline at end of file + diff --git a/web/layouts/components/header/index.vue b/web/layouts/components/header/index.vue index 30ec51217..74f7ffee0 100644 --- a/web/layouts/components/header/index.vue +++ b/web/layouts/components/header/index.vue @@ -9,12 +9,12 @@
- + 首页 - + 文章 @@ -42,7 +42,6 @@ \ No newline at end of file diff --git a/web/pages/article/list.vue b/web/pages/article/list.vue deleted file mode 100644 index 7cd0339f9..000000000 --- a/web/pages/article/list.vue +++ /dev/null @@ -1,162 +0,0 @@ - - - - - \ No newline at end of file diff --git a/web/plugins/i18n.ts b/web/plugins/i18n.ts index 20b574430..5f2e58362 100644 --- a/web/plugins/i18n.ts +++ b/web/plugins/i18n.ts @@ -2,15 +2,13 @@ import { createI18n } from 'vue-i18n' import zhCn from "~/lang/zh-cn/common.json"; import en from "~/lang/en/common.json" -import zhCnPages from "~/lang/zh-cn/pages.json"; -import enPages from "~/lang/en/pages.json" export default defineNuxtPlugin((NuxtApp) => { const i18n = createI18n({ globalInjection: true, //是否全局注入 messages: { - "zh-cn": Object.assign(zhCn, zhCnPages), - "en": Object.assign(en, enPages) + "zh-cn": zhCn, + "en": en }, silentFallbackWarn: true, silentTranslationWarn: true diff --git a/web/stores/app.ts b/web/stores/app.ts index c347f39ca..9ebe1c119 100644 --- a/web/stores/app.ts +++ b/web/stores/app.ts @@ -1,13 +1,13 @@ import { defineStore } from 'pinia' interface App { - route: string + langKey: string } const useAppStore = defineStore('app', { state: (): App => { return { - route: '' + langKey: '' } }, actions: { diff --git a/web/stores/config.ts b/web/stores/config.ts index 39bec9038..a991f4a0b 100644 --- a/web/stores/config.ts +++ b/web/stores/config.ts @@ -1,5 +1,5 @@ import { defineStore } from 'pinia' -import { getConfig } from '@/api/auth' +import { getConfig } from '~/app/api/auth' interface loginConfig { is_username: number | boolean, diff --git a/web/stores/member.ts b/web/stores/member.ts index 4b375dc6a..87853e2c5 100644 --- a/web/stores/member.ts +++ b/web/stores/member.ts @@ -1,6 +1,6 @@ import { defineStore } from 'pinia' -import { getMemberInfo } from '@/api/member' -import { logout } from '@/api/auth' +import { getMemberInfo } from '~/app/api/member' +import { logout } from '~/app/api/auth' interface Member { token: string | null @@ -21,6 +21,7 @@ const useMemberStore = defineStore('member', { await this.getMemberInfo() }, async getMemberInfo() { + if (!this.token) return await getMemberInfo() .then((res: any) => { this.info = res.data @@ -30,6 +31,7 @@ const useMemberStore = defineStore('member', { }) }, logout() { + if (!this.token) return logout().then(() => { this.$reset() useCookie('token').value = null diff --git a/web/stores/system.ts b/web/stores/system.ts index 0145bb290..d58cb1bdf 100644 --- a/web/stores/system.ts +++ b/web/stores/system.ts @@ -1,6 +1,5 @@ import { defineStore } from 'pinia' import storage from '@/utils/storage' -import { getSiteInfo } from '@/api/system' interface System { lang: string, @@ -18,16 +17,7 @@ const useSystemStore = defineStore('system', { } }, actions: { - async getSitenfo() { - await getSiteInfo() - .then((res: any) => { - this.site = res.data - if (this.site.status == 3) navigateTo('/site/close', { replace: true }) - }) - .catch((err) => { - navigateTo('/site/nosite', { replace: true }) - }) - } + } }) diff --git a/web/utils/language.ts b/web/utils/language.ts index 002378388..2d145238b 100644 --- a/web/utils/language.ts +++ b/web/utils/language.ts @@ -1,4 +1,5 @@ import { nextTick } from 'vue' +import useAppStore from '~/stores/app' class Language { private i18n: any; @@ -28,27 +29,41 @@ class Language { * @param locale * @returns */ - public async loadLocaleMessages(path: string, locale: string) { + public async loadLocaleMessages(app: string, path: string, locale: string) { try { - const file = path == '/' ? 'index' : path.replace('/', '').replaceAll('/', '.') + const file = path.replaceAll('/', '.') - if (this.loadLocale.includes(`${locale}/${file}`)) { + if (this.loadLocale.includes(`${app}/${locale}/${file}`)) { return nextTick() } - this.loadLocale.push(`${locale}/${file}`) + + // 加载pages语言包 + if (!this.loadLocale.includes(`${app}/${locale}/pages`)) { + // 引入语言包文件 + const pagesMessages = await import(`@/${app}/lang/${locale}/pages.json`) + this.i18n.global.mergeLocaleMessage(locale, pagesMessages.default) + this.loadLocale.push(`${app}/${locale}/pages`) + } + + this.loadLocale.push(`${app}/${locale}/${file}`) // 引入语言包文件 - const messages = await import(`~/lang/${locale}/${file}.json`) + const messages = await import(`@/${app}/lang/${locale}/${file}.json`) let data: Record = {} Object.keys(messages.default).forEach(key => { - data[`${file}.${key}`] = messages.default[key] + data[`${app}.${file}.${key}`] = messages.default[key] + }) + + useAppStore().$patch(state => { + state.langKey = `${app}.${file}` }) this.i18n.global.mergeLocaleMessage(locale, data) this.setI18nLanguage(locale) return nextTick() - } catch { + } catch (e) { + console.log(e) this.setI18nLanguage(locale) return nextTick() } diff --git a/web/utils/request.ts b/web/utils/request.ts index e160e7ae6..ddf8e8a90 100644 --- a/web/utils/request.ts +++ b/web/utils/request.ts @@ -34,7 +34,6 @@ class Http { const runtimeConfig = useRuntimeConfig() this.options.baseURL = runtimeConfig.public.VITE_APP_BASE_URL || `${location.origin}/api/` - this.options.headers[runtimeConfig.public.VITE_REQUEST_HEADER_SITEID_KEY] = useCookie('siteId').value || runtimeConfig.public.VITE_SITE_ID this.options.headers[runtimeConfig.public.VITE_REQUEST_HEADER_CHANNEL_KEY] = 'pc' if (getToken()) this.options.headers[runtimeConfig.public.VITE_REQUEST_HEADER_TOKEN_KEY] = getToken() }