xiaohaizhao 7 månader sedan
förälder
incheckning
deba1f3d0d
6 ändrade filer med 126 tillägg och 88 borttagningar
  1. 7 18
      app.js
  2. 0 1
      pages/login/modules/account.js
  3. 0 1
      pages/login/modules/phone.js
  4. 4 10
      pages/login/phone.js
  5. 41 31
      pages/login/phone.wxml
  6. 74 27
      utils/language.js

+ 7 - 18
app.js

@@ -6,7 +6,6 @@ import {
 } from './utils/language';
 App({
     onLaunch(options) {
-        console.log("options.query", options.query)
         //小程序跳转进入
         if (options.query.userMsg) {
             let userMsg = JSON.parse(options.query.userMsg)
@@ -53,22 +52,13 @@ App({
                 })
             });
         }
-        if (wx.getStorageSync('languagecode')) {
-            setTimeout(() => {
-                this.globalData.Language.getLanguages(wx.getStorageSync('languagecode'))
-            }, 500)
-        } else {
-            wx.getSystemInfoAsync({
-                success: res => {
-                    let languagecode = 'ZH';
-                    try {
-                        languagecode = res.language.split("_")[0].toUpperCase()
-                    } catch (error) {}
-                    wx.setStorageSync('languagecode', languagecode);
-                    this.globalData.Language.getLanguages(languagecode);
-                }
-            })
-        }
+    },
+    onHide() {
+        delete this.globalData.Language;
+    },
+    onShow() {
+        delete this.globalData.Language;
+        this.globalData.Language = new Language();
     },
     initSocket() {
         let that = this;
@@ -188,7 +178,6 @@ App({
             "预提交": "#e6a23c"
         },
         http: new ApiModel, //挂载接口文件
-        Language: new Language(), //语言包
         queryPer: require("./utils/queryPermissions"), //权限查询
         handleSelect: null, //处理选择结果  函数
         socketEstablish: false, //是否已经建立socket

+ 0 - 1
pages/login/modules/account.js

@@ -24,7 +24,6 @@ Component({
             setTimeout(() => {
                 this.allowOrNot();
             }, 100)
-            getApp().globalData.Language.getLanguagePackage(this)
         }
     },
     methods: {

+ 0 - 1
pages/login/modules/phone.js

@@ -30,7 +30,6 @@ Component({
             setTimeout(() => {
                 this.allowOrNot();
             }, 100)
-            getApp().globalData.Language.getLanguagePackage(this)
         }
     },
     methods: {

+ 4 - 10
pages/login/phone.js

@@ -5,6 +5,7 @@ Page({
 		loading: false, //登陆中
 		register: null,
 		languages: [],
+		language: {},
 		showDialog: false
 	},
 	async onLoad() {
@@ -20,7 +21,7 @@ Page({
 		}).then(res => {
 			console.log("语言包列表", res)
 			if (res.code == '1') {
-				let item = res.data.find(v => v.languagecode == (wx.getStorageSync('languagecode')))
+				let item = res.data.find(v => v.languagecode == (wx.getStorageSync('languagecode') || 'ZH'))
 				try {
 					this.setData({
 						languages: res.data,
@@ -34,28 +35,21 @@ Page({
 						rowIndex: 0
 					})
 				}
-				this.changeTitle();
 			}
 		})
 		getApp().globalData.Language.getLanguagePackage(this, '账户登录');
 	},
 	changeLanguages(e) {
 		let item = this.data.languages[e.detail.value];
+		console.log("item", getApp().globalData.Language.getLanguages)
 		getApp().globalData.Language.getLanguages(item.languagecode).then(res => {
 			this.setData({
-				language: res,
 				languagename: item.languagename || '简体中文',
 				rowIndex: item.rowindex - 1
 			})
-			this.selectComponent('#login').setData({
-				language: res,
-			});
-			this.changeTitle();
+			getApp().globalData.Language.getLanguagePackage(this, '账户登录');
 		})
 	},
-	changeTitle() {
-		getApp().globalData.Language.setNavBarTitle('账户登录')
-	},
 	/* 修改授权 */
 	isAgreeChange() {
 		let isAgree = !this.data.isAgree

+ 41 - 31
pages/login/phone.wxml

@@ -1,35 +1,45 @@
-<view class="logo">
-	<image src="/static/image/logo.png" bindtap="todev" />
-</view>
-
-<!-- 手机号登录  -->
-<!-- <phone id='login' /> -->
-<!-- 账号登录 -->
-<account id='login' />
-<view style="width: 100vw; text-align: center;margin-top: 60rpx;margin-bottom: 40rpx;">
-	<van-button disabled='{{disabled}}' custom-class='login' bindtap="userLogin" loading='{{loading}}' loading-text="{{language['登录中']||'登录中'}}..." color='linear-gradient(90deg, #3874F6 0%, #095DE0 100%);'>{{language['登录']||'登录'}}</van-button>
-</view>
-<!-- 隐私协议 -->
-<view class="agreement">
-	<van-checkbox icon-size="28rpx" label-class='con' value="{{ isAgree }}" bind:change="isAgreeChange"> {{language['已阅读并同意']||'已阅读并同意'}}<text catchtap="checkTheAgreement">《{{language['隐私协议']||'隐私协议'}}》</text></van-checkbox>
-</view>
-<!-- 快捷登录 -->
-<block>
-	<view style="height: 100rpx;" />
-	<van-divider contentPosition="center">{{language['其他登录方式']||'其他登录方式'}}</van-divider>
-	<view style="width: 100%; text-align: center;">
-		<text class="iconfont icon-a-wodebangdingweixin" style="font-size: 100rpx; color:#07C160;" bindtap="wechatLogin" />
+<block wx:if="{{language['新建']}}">
+	<view class="logo">
+		<image src="/static/image/logo.png" bindtap="todev" />
 	</view>
-</block>
 
-<view style="text-align: center; margin-top: 20px;">
-	<picker mode="selector" range="{{languages}}" range-key='languagename' value="{{rowIndex}}" bindchange='changeLanguages'>
-		{{languagename}}
-	</picker>
-</view>
+	<!-- 手机号登录  -->
+	<!-- <phone id='login' language="{{language}}" /> -->
+	<!-- 账号登录 -->
+	<account id='login' language="{{language}}" />
+	<view style="width: 100vw; text-align: center;margin-top: 60rpx;margin-bottom: 40rpx;">
+		<van-button disabled='{{disabled}}' custom-class='login' bindtap="userLogin" loading='{{loading}}'
+			loading-text="{{language['登录中']||'登录中'}}..." color='linear-gradient(90deg, #3874F6 0%, #095DE0 100%);'>
+			{{language['登录']||'登录'}}
+		</van-button>
+	</view>
+	<view class="agreement">
+		<van-checkbox icon-size="28rpx" label-class='con' value="{{ isAgree }}" bind:change="isAgreeChange">
+			{{language['已阅读并同意']||'已阅读并同意'}}<text catchtap="checkTheAgreement">《{{language['隐私协议']||'隐私协议'}}》</text>
+		</van-checkbox>
+	</view>
+	<block>
+		<view style="height: 100rpx;" />
+		<van-divider contentPosition="center">{{language['其他登录方式']||'其他登录方式'}}</van-divider>
+		<view style="width: 100%; text-align: center;">
+			<text class="iconfont icon-a-wodebangdingweixin" style="font-size: 100rpx; color:#07C160;"
+				bindtap="wechatLogin" />
+		</view>
+	</block>
 
-<van-dialog use-slot show='{{ showDialog }}' confirmButtonText="{{language['同意并获取']||'同意并获取'}}" cancelButtonText="{{language['取消']||'取消'}}"  confirm-button-color='var(--assist)' show-cancel-button bind:confirm='onConfirm'>
-	<view class="dialog">
-		{{language['请阅读并同意']||'请阅读并同意'}} <navigator class="navigator" url="#" bind:tap="checkTheAgreement">《{{language['隐私协议']||'隐私协议'}}》</navigator>
+	<view wx:if="{{languages.length}}" style="text-align: center; margin-top: 20px;">
+		<picker mode="selector" range="{{languages}}" range-key='languagename' value="{{rowIndex}}"
+			bindchange='changeLanguages'>
+			{{languagename}}
+		</picker>
 	</view>
-</van-dialog>
+
+	<van-dialog use-slot show='{{ showDialog }}' confirmButtonText="{{language['同意并获取']||'同意并获取'}}"
+		cancelButtonText="{{language['取消']||'取消'}}" confirm-button-color='var(--assist)' show-cancel-button
+		bind:confirm='onConfirm'>
+		<view class="dialog">
+			{{language['请阅读并同意']||'请阅读并同意'}}
+			<navigator class="navigator" url="#" bind:tap="checkTheAgreement">《{{language['隐私协议']||'隐私协议'}}》</navigator>
+		</view>
+	</van-dialog>
+</block>

+ 74 - 27
utils/language.js

@@ -1,49 +1,97 @@
 class Language {
 	constructor() {
-		this.languagecode = null;
-		this.languagePackage = null;
 		this.getLanguages = this.getLanguages.bind(this);
+		this.languagecode = wx.getStorageSync('languagecode') || 'ZH';
+		this.languageRequestInProgress = null; // 新增:用于标识请求是否正在进行
+		if (this.languagecode != 'ZH') {
+			setTimeout(() => {
+				this.getLanguages(this.languagecode)
+			}, 300)
+		} else {
+			wx.removeStorageSync('languagePackage');
+			wx.setStorageSync('languagePackage', {
+				"新建": "新建"
+			})
+		}
 	}
+	async getLanguages(languagecode) {
+		if (this.languageRequestInProgress) return this.languageRequestInProgress;
 
-	getLanguages(languagecode) {
-		return new Promise((resolve) => {
-			setTimeout(async () => {
+		// 先创建请求 Promise
+		let requestPromise = (async () => {
+			try {
 				let res = {
 					data: {}
+				};
+				if (languagecode !== 'ZH') {
+					res = await getApp().globalData.http.base({
+						id: 2024062809072801,
+						content: {
+							date: Date.now()
+						}
+					});
 				}
-				if (languagecode != 'ZH') res = await getApp().globalData.http.base({
-					id: 2024062809072801,
-					content: {
-						date: Date.now()
-					}
-				})
-				this.languagePackage = res.data[languagecode] || {};
+
+				// 更新语言包和语言代码
+				wx.removeStorageSync('languagePackage');
+				wx.setStorageSync('languagePackage', res.data[languagecode] || {
+					"新建": "新建"
+				});
 				this.languagecode = languagecode;
-				resolve(this.languagePackage)
+
+				// 保存到本地存储
 				wx.removeStorageSync('languagecode');
-				wx.setStorageSync('languagecode', languagecode)
-			})
-		})
+				wx.setStorageSync('languagecode', languagecode);
+
+			} catch (error) {
+				throw error;
+			}
+		})();
+
+		// 🔑 把 this.languageRequestInProgress 设为一个带 finally 的 Promise
+		this.languageRequestInProgress = requestPromise.finally(() => {
+			this.languageRequestInProgress = null;
+		});
+
+		return this.languageRequestInProgress;
 	}
 
-	getLanguagePackage(that, setNavBarTitle) {
-		if (this.languagecode == null) {
-			setTimeout(() => {
-				this.getLanguagePackage(that, setNavBarTitle)
-			}, 100)
-		} else {
+
+	getLanguagePackage(that, setNavBarTitle, count = 0) {
+		if (count == 10) return;
+		if (this.languagecode == 'ZH') {
 			that.setData({
-				language: this.languagePackage,
+				language: {
+					"新建": "新建"
+				},
 				sColors: getApp().globalData.sColors
-			})
-			if (setNavBarTitle) this.setNavBarTitle(setNavBarTitle)
+			});
+			if (setNavBarTitle) this.setNavBarTitle(setNavBarTitle);
+		} else {
+			if (!wx.getStorageSync('languagePackage')['新建']) {
+				if (count == 0) that.setData({
+					sColors: getApp().globalData.sColors,
+					language: {
+						"新建": "新建"
+					},
+				});
+				setTimeout(() => {
+					this.getLanguagePackage(that, setNavBarTitle, count + 1);
+				}, count == 0 ? 400 : 100);
+			} else {
+				that.setData({
+					language: wx.getStorageSync('languagePackage'),
+					sColors: getApp().globalData.sColors
+				});
+				if (setNavBarTitle) this.setNavBarTitle(setNavBarTitle);
+			}
 		}
 	}
 
 	getMapText(text, f = '', r = '') {
 		let v = ''
 		try {
-			v = this.languagePackage[text] || text
+			v = wx.getStorageSync('languagePackage')[text] || text
 		} catch (error) {
 			if (wx.getStorageSync('languagecode') != 'ZH') console.log('getMapText:未获取到', text)
 			v = text
@@ -70,7 +118,6 @@ class Language {
 			confirmText: this.getMapText(confirmText),
 		})
 	}
-
 	/* t:translate 是否翻译 v:value 值 f:front 前面 r:rear 后面 */
 	joint(list) {
 		if (typeof list == 'string') return this.getMapText(list)