Skip to content
On this page

主题与语言选择

主题与语言分为两套 UI:登录页顶部工具栏cornerstone-apps-login 内专用组件)与 项目配置抽屉@grow-admin-rock/layouts)。二者共用同一套运行时状态,切换会同步。

前置条件

宿主应用(sample/src/plugin/initIoc.ts)需注册:

typescript
import { Lib as localeLib } from '@grow-admin-rock/locale'
import { Lib as stateLib } from '@grow-admin-rock/state'
import { Lib as componentsLib } from '@grow-admin-rock/components'

app
  .use(stateLib, appContext)
  .use(localeLib, appContext)
  .use(componentsLib, appContext)

根组件需挂载 GrowMessageProvider 等 Provider(参考 sample/src/App.vue)。

登录页:主题 / 语言

登录页使用本包专用组件,不要直接使用项目配置里的 SwitchLanguage

组件路径说明
LoginThemeSwitchcornerstone-apps-login/src/components/LoginThemeSwitch暗色模式开关(亮色 ↔ 暗色)
LoginLanguageSwitchcornerstone-apps-login/src/components/LoginLanguageSwitch语言下拉(简体中文 / English)
vue
<script setup lang="ts">
import { useLocale } from '@grow-admin-rock/locale'
import LoginThemeSwitch from '#/components/LoginThemeSwitch/index.vue'
import LoginLanguageSwitch from '#/components/LoginLanguageSwitch/index.vue'

const { getLocale } = useLocale()
</script>

<template>
  <div :key="getLocale">
    <LoginThemeSwitch />
    <LoginLanguageSwitch />
  </div>
</template>

参考:DesignCornerstone/cornerstone-apps-login/src/pages/Login/index.vue

项目配置抽屉:主题 / 语言

完整主题(模式 + 主题色)与语言表单项在 @grow-admin-rock/layouts

组件导出说明
SettingDrawer@grow-admin-rock/layouts项目配置抽屉(默认宽度 400px)
SettingTheme@grow-admin-rock/layouts主题模式 + 主题色(GrowForm
SwitchLanguage@grow-admin-rock/layouts语言下拉(GrowForm
vue
<script setup lang="ts">
import { ref } from 'vue'
import { SettingDrawer, SettingTheme, SwitchLanguage } from '@grow-admin-rock/layouts'

const settingVisible = ref(false)
</script>

<template>
  <GrowButton @click="settingVisible = true">项目配置</GrowButton>
  <SettingDrawer v-model="settingVisible" />

  <!-- 也可单独拼装 -->
  <SettingTheme />
  <SwitchLanguage />
</template>

SwitchLanguage 可选 Props:

Prop默认值说明
showLabeltrue是否显示表单项标签
labelKeylayout.setting.languagei18n 标签 key
selectClassw-full下拉框 class

设置抽屉内点击「重置配置」会恢复主题默认值,并将语言重置为 简体中文zh_CN)。

编程式调用

不渲染组件时,可直接操作状态 API:

typescript
import { ThemeModeEnum } from '@grow-admin-rock/constants'
import { LOCALE, useLocale } from '@grow-admin-rock/locale'
import { useAppConfig } from '@grow-admin-rock/state'

// 主题
const appConfig = useAppConfig()
appConfig.setThemeMode(ThemeModeEnum.DARK)    // 暗色
appConfig.setThemeMode(ThemeModeEnum.LIGHT)   // 亮色
appConfig.setThemeMode(ThemeModeEnum.SYSTEM)  // 跟随系统
appConfig.setThemeColor('#8b5cf6')

// 语言
const { changeLocale } = useLocale()
await changeLocale(LOCALE.zh) // 简体中文(默认)
await changeLocale(LOCALE.en) // English
能力API
主题模式 / 主题色@grow-admin-rock/stateuseAppConfig()
语言切换 / 持久化@grow-admin-rock/localeuseLocale().changeLocale()
文案@grow-admin-rock/localeuseI18n().t('layout.login.*') / layout.setting.*

语言偏好保存在 localStorage(key:LOCALE__),登录页与项目配置抽屉共用。

文案扩展

DesignRock/rock-locale/src/lang/ 下维护:

  • 登录页:zh-CN/layout/login.tsen/layout/login.ts
  • 项目配置:zh-CN/layout/setting.tsen/layout/setting.ts

新增语言时,同步修改 rock-locale/src/config.tslocaleListavailableLocales

下一步