feat:国际化多语言适配

This commit is contained in:
2025-10-29 15:48:40 +08:00
parent 985d739324
commit 3d67dc928d
41 changed files with 2636 additions and 2801 deletions
+41 -31
View File
@@ -2,18 +2,18 @@
<view class="login-container">
<view class="logo">
<image src="/static/logo.png" mode="aspectFit" />
<text class="app-name">风电者共享风扇&充电宝</text>
<text class="app-name">{{ $t('app.slogan') }}</text>
</view>
<view class="title">登录您的账号</view>
<view class="subtitle">为保障使用体验请先完成登录</view>
<view class="title">{{ $t('auth.loginTitle') }}</view>
<view class="subtitle">{{ $t('auth.loginDesc') }}</view>
<!-- 微信一键手机号快捷登录推荐 -->
<button v-if="!isAgreed" class="btn primary" @click="handleLoginClick">
手机号快捷登录
{{ $t('auth.getPhoneNumber') }}
</button>
<button v-else class="btn primary" open-type="getPhoneNumber" @getphonenumber="onGetPhoneNumber">
手机号快捷登录
{{ $t('auth.getPhoneNumber') }}
</button>
<!-- 仅微信登录不授权手机号时使用 -->
@@ -24,10 +24,10 @@
<label class="agreement-label">
<checkbox value="agreed" :checked="isAgreed" color="#07c160" class="agreement-checkbox" />
<text class="agreement-text">
我已阅读并同意
<text class="link" @tap.stop="go('/pages/legal/agreement')">用户协议</text>
<text class="link" @tap.stop="go('/pages/legal/privacy')">隐私政策</text>
{{ $t('auth.agreeToTerms') }}
<text class="link" @tap.stop="go('/pages/legal/agreement')">{{ $t('user.userAgreement') }}</text>
{{ $t('common.and') }}
<text class="link" @tap.stop="go('/pages/legal/privacy')">{{ $t('user.privacyPolicy') }}</text>
</text>
</label>
</checkbox-group>
@@ -36,9 +36,19 @@
</template>
<script setup>
import { ref } from 'vue'
import { ref, onMounted } from 'vue'
import { onLoad } from '@dcloudio/uni-app'
import { wxLogin, getUserPhoneNumber, getUserInfo } from '../../util/index.js'
import { useI18n } from '@/utils/i18n.js'
const { t: $t } = useI18n()
// 设置页面标题
onMounted(() => {
uni.setNavigationBarTitle({
title: $t('auth.loginTitle')
})
})
const redirect = ref('/pages/index/index')
const isAgreed = ref(false) // 是否同意协议
@@ -67,23 +77,23 @@
return
}
// 未勾选,弹窗提示
uni.showModal({
title: '温馨提示',
content: '请先阅读并同意《用户协议》和《隐私政策》',
confirmText: '同意',
cancelText: '取消',
success: (res) => {
if (res.confirm) {
// 用户点击同意,自动勾选
isAgreed.value = true
resolve()
} else {
// 用户点击取消
reject(new Error('需要同意协议才能登录'))
}
// 未勾选,弹窗提示
uni.showModal({
title: $t('common.tips'),
content: $t('auth.pleaseAgreeToTerms'),
confirmText: $t('common.confirm'),
cancelText: $t('common.cancel'),
success: (res) => {
if (res.confirm) {
// 用户点击同意,自动勾选
isAgreed.value = true
resolve()
} else {
// 用户点击取消
reject(new Error('需要同意协议才能登录'))
}
})
}
})
})
}
@@ -108,8 +118,8 @@
// 先检查是否同意协议
await checkAgreement()
await wxLogin()
uni.showToast({ title: '登录成功', icon: 'success' })
await wxLogin()
uni.showToast({ title: $t('auth.loginSuccess'), icon: 'success' })
await navigateAfterLogin()
} catch (error) {
if (error.message !== '需要同意协议才能登录') {
@@ -120,7 +130,7 @@
const onGetPhoneNumber = async (e) => {
if (!e || e.detail.errMsg !== 'getPhoneNumber:ok') {
uni.showToast({ title: '已取消手机号授权', icon: 'none' })
uni.showToast({ title: $t('auth.phoneCancelled'), icon: 'none' })
return
}
@@ -129,10 +139,10 @@
await wxLogin()
// 再用微信返回的临时 code 换取手机号
await getUserPhoneNumber(e.detail.code)
uni.showToast({ title: '登录成功', icon: 'success' })
uni.showToast({ title: $t('auth.loginSuccess'), icon: 'success' })
await navigateAfterLogin()
} catch (error) {
uni.showToast({ title: error.message || '登录失败', icon: 'none' })
uni.showToast({ title: error.message || $t('auth.loginFailed'), icon: 'none' })
}
}