Compare commits
10 Commits
047cf765da
...
e301ddc6ec
| Author | SHA1 | Date | |
|---|---|---|---|
| e301ddc6ec | |||
| a560ad4a5d | |||
| 7f7a18803f | |||
| 42563d7184 | |||
| 14a903f42a | |||
| c9f8614927 | |||
| fe9303bf4c | |||
| e4dfd0ae11 | |||
| 7037d0b083 | |||
| e8a79bd245 |
@@ -7,7 +7,7 @@ export default {
|
||||
computed: {
|
||||
// 是否是英文环境
|
||||
isEnEnv() {
|
||||
return this.$langConfig.getCurrentLocale() === 'en-us';
|
||||
return uni.getStorageSync('lang') === 'en-us';
|
||||
},
|
||||
themeStyle() {
|
||||
return this.$store.state.themeStyle;
|
||||
@@ -65,6 +65,10 @@ export default {
|
||||
componentRefresh() {
|
||||
return this.$store.state.componentRefresh;
|
||||
},
|
||||
// AI客服配置
|
||||
globalAIKefuConfig() {
|
||||
return this.$store.state.globalAIKefuConfig;
|
||||
},
|
||||
// 客服配置
|
||||
servicerConfig() {
|
||||
return this.$store.state.servicerConfig;
|
||||
|
||||
@@ -1,215 +1,161 @@
|
||||
import { langConfig } from './config-external.js';
|
||||
|
||||
|
||||
// 缓存已加载的语言包
|
||||
const loadedLangPacks = {};
|
||||
|
||||
// 处理页面目录映射
|
||||
function processRoutePath(route) {
|
||||
let routeParts = route.split("/");
|
||||
let routeParts = route.split("/");
|
||||
|
||||
// ---- 处理页面目录映射 <begin> 分包造成的,需要根据实际目录结构进行映射----
|
||||
// 先处理特殊的分包路径
|
||||
if (routeParts[0] === 'pages_tool') {
|
||||
// pages_tool 分包下的页面,直接使用子目录作为语言包路径
|
||||
routeParts = [routeParts[1], ...routeParts.slice(2)];
|
||||
} else if (routeParts[0] === 'pages_goods') {
|
||||
// pages_goods 分包映射到 goods 目录
|
||||
routeParts[0] = 'goods';
|
||||
} else if (routeParts[0] === 'pages_member') {
|
||||
// pages_member 分包映射到 member 目录
|
||||
routeParts[0] = 'member';
|
||||
} else if (routeParts[0] === 'pages_order') {
|
||||
// pages_order 分包映射到 order 目录
|
||||
routeParts[0] = 'order';
|
||||
} else if (routeParts[0] === 'pages_promotion') {
|
||||
// pages_promotion 分包特殊处理
|
||||
const promotionModules = ['point', 'fenxiao', 'merch'];
|
||||
if (routeParts[1] && promotionModules.includes(routeParts[1])) {
|
||||
routeParts = [routeParts[1], ...routeParts.slice(2)];
|
||||
}
|
||||
}
|
||||
// ---- 处理页面目录映射 <end>----
|
||||
|
||||
// 去掉pages目录,只保留子目录
|
||||
if (routeParts[0] === 'pages') {
|
||||
routeParts = routeParts.slice(1);
|
||||
}
|
||||
|
||||
return routeParts.join("/");
|
||||
// ---- 处理页面目录映射 <begin> 分包造成的,需要根据实际目录结构进行映射----
|
||||
if (routeParts[0] === 'pages_tool') {
|
||||
routeParts = [routeParts[1], ...routeParts.slice(2)];
|
||||
} else if (routeParts[0] === 'pages_goods') {
|
||||
routeParts[0] = 'goods';
|
||||
} else if (routeParts[0] === 'pages_member') {
|
||||
routeParts[0] = 'member';
|
||||
} else if (routeParts[0] === 'pages_order') {
|
||||
routeParts[0] = 'order';
|
||||
} else if (routeParts[0] === 'pages_promotion') {
|
||||
const promotionModules = ['point', 'fenxiao', 'merch'];
|
||||
if (routeParts[1] && promotionModules.includes(routeParts[1])) {
|
||||
routeParts = [routeParts[1], ...routeParts.slice(2)];
|
||||
}
|
||||
}
|
||||
// ---- 处理页面目录映射 <end>----
|
||||
|
||||
if (routeParts[0] === 'pages') {
|
||||
routeParts = routeParts.slice(1);
|
||||
}
|
||||
|
||||
return routeParts.join("/");
|
||||
}
|
||||
|
||||
// 加载语言包(同步方式)
|
||||
function loadLangPackSync(lang, path) {
|
||||
try {
|
||||
if (loadedLangPacks[`${lang}_${path}`]) {
|
||||
return loadedLangPacks[`${lang}_${path}`];
|
||||
}
|
||||
const langData = require(`@/lang/${lang}/${path}.js`).lang;
|
||||
loadedLangPacks[`${lang}_${path}`] = langData;
|
||||
return langData;
|
||||
} catch (error) {
|
||||
console.error(`加载语言包 ${lang}/${path} 失败:`, error);
|
||||
return {};
|
||||
}
|
||||
try {
|
||||
if (loadedLangPacks[`${lang}_${path}`]) {
|
||||
return loadedLangPacks[`${lang}_${path}`];
|
||||
}
|
||||
const langData = require(`@/lang/${lang}/${path}.js`).lang;
|
||||
loadedLangPacks[`${lang}_${path}`] = langData;
|
||||
return langData;
|
||||
} catch (error) {
|
||||
console.error(`加载语言包 ${lang}/${path} 失败:`, error);
|
||||
return {};
|
||||
}
|
||||
}
|
||||
|
||||
export default {
|
||||
langList: langConfig.langList,
|
||||
langList: langConfig.langList,
|
||||
/**
|
||||
* 解析多语言
|
||||
*/
|
||||
lang(field) {
|
||||
let _this = getCurrentPages()[getCurrentPages().length - 1];
|
||||
if (!_this) return;
|
||||
|
||||
/**
|
||||
* 获得当前本地语言
|
||||
* @returns
|
||||
*/
|
||||
getCurrentLocale() {
|
||||
return uni.getStorageSync('lang') || "zh-cn";
|
||||
},
|
||||
const locale = uni.getStorageSync('lang') || "zh-cn";
|
||||
|
||||
/**
|
||||
* * 解析多语言
|
||||
* @param {Object} field
|
||||
*/
|
||||
lang(field) {
|
||||
let _page = getCurrentPages()[getCurrentPages().length - 1];
|
||||
if (!_page) return;
|
||||
let value = '';
|
||||
let langPath = '';
|
||||
|
||||
const locale = this.getCurrentLocale(); // 获得当前本地语言
|
||||
try {
|
||||
var lang = loadLangPackSync(locale, 'common');
|
||||
|
||||
let route = _this.route;
|
||||
langPath = processRoutePath(route);
|
||||
|
||||
let currentPageLang = loadLangPackSync(locale, langPath);
|
||||
|
||||
let value = ''; // 存放解析后的语言值
|
||||
let langPath = ''; // 存放当前页面语言包路径
|
||||
let mergedLang = { ...lang, ...currentPageLang };
|
||||
|
||||
try {
|
||||
//公共语言包(同步加载)
|
||||
var lang = loadLangPackSync(locale, 'common');
|
||||
|
||||
//当前页面语言包(同步加载)
|
||||
let route = _page.route;
|
||||
langPath = processRoutePath(route);
|
||||
|
||||
// 加载当前页面语言包
|
||||
let currentPageLang = loadLangPackSync(locale, langPath);
|
||||
var arr = field.split(".");
|
||||
if (arr.length > 1) {
|
||||
let temp = mergedLang;
|
||||
let found = true;
|
||||
for (let key of arr) {
|
||||
if (temp[key] !== undefined) {
|
||||
temp = temp[key];
|
||||
} else {
|
||||
found = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
value = found ? temp : field;
|
||||
} else {
|
||||
value = mergedLang[field] !== undefined ? mergedLang[field] : field;
|
||||
}
|
||||
|
||||
} catch (e) {
|
||||
console.error('解析语言包失败:', e, { langPath, field, locale });
|
||||
value = field;
|
||||
}
|
||||
|
||||
// 合并语言包
|
||||
let mergedLang = { ...lang, ...currentPageLang };
|
||||
if (arguments.length > 1) {
|
||||
for (var i = 1; i < arguments.length; i++) {
|
||||
value = value.replace("{" + (i - 1) + "}", arguments[i]);
|
||||
}
|
||||
}
|
||||
if (value == undefined || (value == 'title' && field == 'title')) value = '';
|
||||
|
||||
// 解析字段
|
||||
var arr = field.split(".");
|
||||
if (arr.length > 1) {
|
||||
// 处理嵌套属性,如 common.currencySymbol
|
||||
let temp = mergedLang;
|
||||
let found = true;
|
||||
for (let key of arr) {
|
||||
if (temp[key] !== undefined) {
|
||||
temp = temp[key];
|
||||
} else {
|
||||
found = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
value = found ? temp : field;
|
||||
} else {
|
||||
value = mergedLang[field] !== undefined ? mergedLang[field] : field;
|
||||
}
|
||||
|
||||
} catch (e) {
|
||||
console.error('解析语言包失败:', e, { langPath, field, locale });
|
||||
value = field;
|
||||
}
|
||||
if (field == value) {
|
||||
console.warn(`警告: 字段 ${field} 在语言包 ${langPath} 中未找到对应值,使用默认值 ${field} 当前语言: ${locale}`);
|
||||
}
|
||||
|
||||
if (arguments.length > 1) {
|
||||
//有参数,需要替换
|
||||
for (var i = 1; i < arguments.length; i++) {
|
||||
value = value.replace("{" + (i - 1) + "}", arguments[i]);
|
||||
}
|
||||
}
|
||||
if (value == undefined || (value == 'title' && field == 'title')) value = ''; // field
|
||||
return value;
|
||||
},
|
||||
/**
|
||||
* 切换语言
|
||||
*/
|
||||
change(value, url = '/pages_tool/member/index') {
|
||||
let _this = getCurrentPages()[getCurrentPages().length - 1];
|
||||
if (!_this) return;
|
||||
|
||||
// 多语言调试,注释后可以关闭控制台输出
|
||||
if (field == value) {
|
||||
console.warn(`警告: 字段 ${field} 在语言包 ${langPath} 中未找到对应值,使用默认值 ${field} 当前语言: ${locale}`);
|
||||
}
|
||||
uni.setStorageSync("lang", value);
|
||||
const locale = uni.getStorageSync('lang') || "zh-cn";
|
||||
|
||||
return value;
|
||||
},
|
||||
/**
|
||||
* * 切换语言
|
||||
* @param {String} value 语言值
|
||||
* @param {String} url 切换后跳转的页面url
|
||||
*/
|
||||
change(value, url = '/pages_tool/member/index') {
|
||||
let _page = getCurrentPages()[getCurrentPages().length - 1];
|
||||
if (!_page) return;
|
||||
// ✅ 关键修复:清空所有语言包缓存(不再保留任何旧缓存)
|
||||
for (let key in loadedLangPacks) {
|
||||
delete loadedLangPacks[key];
|
||||
}
|
||||
|
||||
uni.setStorageSync("lang", value);
|
||||
const locale = this.getCurrentLocale();
|
||||
this.refresh();
|
||||
|
||||
// 清空已加载的语言包缓存
|
||||
for (let key in loadedLangPacks) {
|
||||
if (!key.startsWith(locale)) {
|
||||
delete loadedLangPacks[key];
|
||||
}
|
||||
}
|
||||
|
||||
this.refresh();
|
||||
|
||||
if (url) {
|
||||
uni.reLaunch({ url: url });
|
||||
}
|
||||
},
|
||||
//刷新标题、tabbar
|
||||
refresh() {
|
||||
let _page = getCurrentPages()[getCurrentPages().length - 1];
|
||||
if (!_page) return;
|
||||
|
||||
const locale = this.getCurrentLocale();
|
||||
|
||||
this.title(this.lang("title"));
|
||||
|
||||
//设置tabbar的文字语言
|
||||
// uni.setTabBarItem({
|
||||
// index: 0,
|
||||
// text: this.lang("tabBar.home")
|
||||
// });
|
||||
// uni.setTabBarItem({
|
||||
// index: 1,
|
||||
// text: this.lang("tabBar.category")
|
||||
// });
|
||||
// uni.setTabBarItem({
|
||||
// index: 2,
|
||||
// text: this.lang("tabBar.cart")
|
||||
// });
|
||||
// uni.setTabBarItem({
|
||||
// index: 3,
|
||||
// text: this.lang("tabBar.member")
|
||||
// });
|
||||
},
|
||||
title(str) {
|
||||
if (str) {
|
||||
uni.setNavigationBarTitle({
|
||||
title: str,
|
||||
success: function (res) {
|
||||
},
|
||||
fail: function (err) {
|
||||
}
|
||||
});
|
||||
}
|
||||
},
|
||||
// 获取语言包列表
|
||||
list() {
|
||||
var list = [];
|
||||
try {
|
||||
//公共语言包
|
||||
for (var i = 0; i < langConfig.langList.length; i++) {
|
||||
let langType = langConfig.langList[i];
|
||||
let item = loadLangPackSync(langType, 'common');
|
||||
list.push({
|
||||
name: item.common ? item.common.name : langType,
|
||||
value: langType
|
||||
});
|
||||
}
|
||||
} catch (e) {
|
||||
console.error('获取语言包列表失败:', e);
|
||||
}
|
||||
return list;
|
||||
}
|
||||
}
|
||||
if (url) {
|
||||
uni.reLaunch({ url: url });
|
||||
}
|
||||
},
|
||||
//刷新标题、tabbar
|
||||
refresh() {
|
||||
let _this = getCurrentPages()[getCurrentPages().length - 1];
|
||||
if (!_this) return;
|
||||
const locale = uni.getStorageSync('lang') || "zh-cn";
|
||||
|
||||
this.title(this.lang("title"));
|
||||
},
|
||||
title(str) {
|
||||
if (str) {
|
||||
uni.setNavigationBarTitle({
|
||||
title: str
|
||||
});
|
||||
}
|
||||
},
|
||||
// 获取语言包列表
|
||||
list() {
|
||||
var list = [];
|
||||
try {
|
||||
for (var i = 0; i < langConfig.langList.length; i++) {
|
||||
let langType = langConfig.langList[i];
|
||||
let item = loadLangPackSync(langType, 'common');
|
||||
list.push({
|
||||
name: item.common ? item.common.name : langType,
|
||||
value: langType
|
||||
});
|
||||
}
|
||||
} catch (e) {
|
||||
console.error('获取语言包列表失败:', e);
|
||||
}
|
||||
return list;
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -104,7 +104,7 @@
|
||||
},
|
||||
"router" : {
|
||||
"mode" : "history",
|
||||
"base" : "/hwappx/2811/"
|
||||
"base" : "/hwappx/common/"
|
||||
},
|
||||
"title" : "",
|
||||
"devServer" : {
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -7,7 +7,7 @@
|
||||
"setting": {
|
||||
"urlCheck": true,
|
||||
"es6": true,
|
||||
"enhance": true,
|
||||
"enhance": false,
|
||||
"postcss": true,
|
||||
"preloadBackgroundData": false,
|
||||
"minified": true,
|
||||
@@ -39,27 +39,19 @@
|
||||
"packNpmManually": false,
|
||||
"packNpmRelationList": [],
|
||||
"minifyWXSS": true,
|
||||
"condition": true,
|
||||
"swc": false,
|
||||
"disableSWC": true,
|
||||
"compileWorklet": false,
|
||||
"minifyWXML": true,
|
||||
"compileWorklet": true,
|
||||
"localPlugins": false,
|
||||
"disableUseStrict": false,
|
||||
"useCompilerPlugins": false
|
||||
"useCompilerPlugins": false,
|
||||
"condition": false,
|
||||
"swc": false,
|
||||
"disableSWC": true
|
||||
},
|
||||
"compileType": "miniprogram",
|
||||
"libVersion": "2.16.1",
|
||||
"libVersion": "3.12.0",
|
||||
"appid": "wx29215aa1bd97bbd6",
|
||||
"projectname": "uniapp",
|
||||
"debugOptions": {
|
||||
"hidedInDevtools": []
|
||||
},
|
||||
"scripts": {},
|
||||
"staticServerOptions": {
|
||||
"baseURL": "",
|
||||
"servePath": ""
|
||||
},
|
||||
"isGameTourist": false,
|
||||
"condition": {
|
||||
"search": {
|
||||
@@ -80,5 +72,7 @@
|
||||
"miniprogram": {
|
||||
"list": []
|
||||
}
|
||||
}
|
||||
},
|
||||
"simulatorPluginLibVersion": {},
|
||||
"editorSetting": {}
|
||||
}
|
||||
4
site.js
4
site.js
@@ -1,4 +1,4 @@
|
||||
module.exports = {
|
||||
baseUrl: "https://xcx6.aigc-quickapp.com/",//修改域名
|
||||
uniacid: 2811,//后台对应uniacid
|
||||
baseUrl: "https://dev.aigc-quickapp.com/",//修改域名
|
||||
uniacid: 1,//后台对应uniacid
|
||||
};
|
||||
@@ -65,6 +65,7 @@ const store = new Vuex.Store({
|
||||
bottomNavHidden: false, // 底部导航是否隐藏,true:隐藏,false:显示
|
||||
aiUnreadCount: 10, // AI未读消息数量
|
||||
globalAIKefuConfig: null, // AI客服配置
|
||||
customerServiceType: 'ai',
|
||||
globalStoreConfig: null, // 门店配置
|
||||
globalStoreInfo: null, // 门店信息
|
||||
defaultStoreInfo: null, // 默认门店
|
||||
@@ -159,6 +160,9 @@ const store = new Vuex.Store({
|
||||
state.globalAIKefuConfig = value;
|
||||
uni.setStorageSync('globalAIKefuConfig', value); // 初始化数据调用
|
||||
},
|
||||
setCustomerServiceType(state, type) {
|
||||
state.customerServiceType = type;
|
||||
},
|
||||
setGlobalStoreConfig(state, value) {
|
||||
state.globalStoreConfig = value;
|
||||
uni.setStorageSync('globalStoreConfig', value); // 初始化数据调用
|
||||
@@ -412,7 +416,7 @@ const store = new Vuex.Store({
|
||||
},
|
||||
// 生成主题颜色CSS变量
|
||||
themeColorSet() {
|
||||
// console.log('样式颜色设置...');
|
||||
console.log('样式颜色设置...');
|
||||
let theme = this.state.themeStyle;
|
||||
if (!theme?.main_color || !theme?.aux_color) return;
|
||||
try {
|
||||
@@ -436,7 +440,7 @@ const store = new Vuex.Store({
|
||||
} catch (e) {
|
||||
console.error('设置主题颜色失败', e);
|
||||
}
|
||||
// console.log('themeColor => ', this.state.themeColor);
|
||||
console.log('themeColor => ', this.state.themeColor);
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user