xiaohaizhao пре 7 месеци
родитељ
комит
f6504ba46c
3 измењених фајлова са 60 додато и 42 уклоњено
  1. 0 16
      app.js
  2. 1 1
      pages/login/selectSite.js
  3. 59 25
      utils/language.js

+ 0 - 16
app.js

@@ -46,22 +46,6 @@ 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);
-        }
-      })
-    }
   },
   initSocket() {
     let that = this;

+ 1 - 1
pages/login/selectSite.js

@@ -51,7 +51,7 @@ Page({
         require('./modules/login').init();
     },
     onShow() {
-        if (wx.getStorageSync('languagecode') != 'ZH') getApp().globalData.Language.setNavBarTitle('选择站点')
+        getApp().globalData.Language.setNavBarTitle('选择站点')
         this.setData({
             account_list: wx.getStorageSync('account_list')
         })

+ 59 - 25
utils/language.js

@@ -2,40 +2,75 @@ class Language {
 	constructor() {
 		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 {
+			this.languagePackage = {}
+		}
 	}
 
-	getLanguages(languagecode) {
-		return new Promise((resolve) => {
-			setTimeout(async () => {
-				let res = {
-					data: {}
+	async getLanguages(languagecode) {
+		// 如果已有请求正在进行,直接返回当前请求的 Promise
+		if (this.languageRequestInProgress) {
+			return this.languageRequestInProgress;
+		}
+
+		return new Promise((resolve, reject) => {
+			// 开始发起请求前,标记请求正在进行
+			this.languageRequestInProgress = new Promise(async (resolveRequest, rejectRequest) => {
+				try {
+					let res = {
+						data: {}
+					};
+					if (languagecode !== 'ZH') res = await getApp().globalData.http.base({
+						id: 2024062809072801,
+						content: {
+							date: Date.now()
+						}
+					});
+					// 更新语言包和语言代码
+					this.languagePackage = res.data[languagecode] || {};
+					this.languagecode = languagecode;
+
+					// 保存到本地存储
+					wx.removeStorageSync('languagecode');
+					wx.setStorageSync('languagecode', languagecode);
+
+					// 请求成功,解决 Promise
+					resolveRequest(this.languagePackage);
+					resolve(this.languagePackage);
+				} catch (error) {
+					// 请求失败,拒绝 Promise
+					rejectRequest(error);
+					reject(error);
+				} finally {
+					// 请求完成,清除锁定
+					this.languageRequestInProgress = null;
 				}
-				if (languagecode != 'ZH') res = await getApp().globalData.http.base({
-					id: 2024062809072801,
-					content: {
-						date: Date.now()
-					}
-				})
-				this.languagePackage = res.data[languagecode] || {};
-				resolve(this.languagePackage)
-				this.languagecode = languagecode;
-				wx.removeStorageSync('languagecode');
-				wx.setStorageSync('languagecode', languagecode)
-			})
-		})
+			});
+		});
 	}
 
-	getLanguagePackage(that, setNavBarTitle) {
-		if (this.languagecode == null) {
+	async getLanguagePackage(that, setNavBarTitle, count = 0) {
+		if (count == 10) return;
+		if (this.languagePackage == null) {
+			if (count == 0) that.setData({
+				language: {},
+				sColors: getApp().globalData.sColors
+			});
 			setTimeout(() => {
-				this.getLanguagePackage(that, setNavBarTitle)
-			}, 100)
+				this.getLanguagePackage(that, setNavBarTitle, count + 1);
+			}, 100);
 		} else {
 			that.setData({
 				language: this.languagePackage,
 				sColors: getApp().globalData.sColors
-			})
-			if (setNavBarTitle) this.setNavBarTitle(setNavBarTitle)
+			});
+			if (setNavBarTitle) this.setNavBarTitle(setNavBarTitle);
 		}
 	}
 
@@ -69,7 +104,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)