AI问答框架

This commit is contained in:
zhonghua.li
2026-03-29 20:11:22 +08:00
parent 703fc70a17
commit d14ef1ef05
17 changed files with 2055 additions and 16 deletions

View File

@@ -61,6 +61,20 @@ Component({
iconPath: '/static/tabbar/customer.png',
selectedIconPath: '/static/tabbar/customer_active.png',
},
{
key: 'ai_qa',
text: 'AI问答',
pagePath: 'pages/ai_qa/ai_qa',
iconPath: '/static/tabbar/expression.png',
selectedIconPath: '/static/tabbar/expression_active.png',
},
{
key: 'ai_analysis',
text: 'AI分析',
pagePath: 'pages/ai_analysis/ai_analysis',
iconPath: '/static/tabbar/ai_analysis.png',
selectedIconPath: '/static/tabbar/ai_analysis_active.png',
},
{
key: 'furniture_top_sales',
text: '销冠',
@@ -276,6 +290,8 @@ Component({
'furniture_reception': 'pages/furniture_reception/furniture_reception',
'common_begin_reception': 'pages/furniture_reception/common_begin_reception',
'furniture_customer': 'pages/furniture_customer/furniture_customer',
'ai_qa': 'pages/ai_qa/ai_qa',
'ai_analysis': 'pages/ai_analysis/ai_analysis',
'furniture_top_sales': 'pages/furniture_top_sales/furniture_top_sales'
};
@@ -503,7 +519,7 @@ Component({
const hasFurnitureRole = roles.includes('furniture');
if (isAdminFurniture || hasFurnitureRole) {
const furnitureTabs = ['furniture_reception', 'furniture_customer', 'furniture_top_sales', 'ucenter'];
const furnitureTabs = ['furniture_reception', 'furniture_customer', 'ai_qa', 'ai_analysis', 'ucenter'];
console.log('[TabBar][allowed] furniture/admin_furniture role ->', furnitureTabs);
return furnitureTabs;
}
@@ -517,7 +533,7 @@ Component({
if (isAdmin) {
const all = this.data.allTabs
.map((t) => t.key)
.filter((key) => !meetingTabKeys.includes(key) && !['furniture_reception', 'common_begin_reception', 'furniture_customer', 'furniture_top_sales', 'reception', 'customer', ...removedTabKeys].includes(key));
.filter((key) => !meetingTabKeys.includes(key) && !['furniture_reception', 'common_begin_reception', 'furniture_customer', 'ai_qa', 'ai_analysis', 'furniture_top_sales', 'reception', 'customer', ...removedTabKeys].includes(key));
console.log('[TabBar][allowed] admin ->', all);
return all;
}
@@ -536,7 +552,7 @@ Component({
const otherTabs = this.data.allTabs
.map((t) => t.key)
.filter((key) => !['homework', 'edu', 'voice', 'expression', 'furniture_reception', 'common_begin_reception', 'furniture_customer', 'furniture_top_sales', 'reception', 'customer', ...meetingTabKeys, ...removedTabKeys].includes(key));
.filter((key) => !['homework', 'edu', 'voice', 'expression', 'furniture_reception', 'common_begin_reception', 'furniture_customer', 'ai_qa', 'ai_analysis', 'furniture_top_sales', 'reception', 'customer', ...meetingTabKeys, ...removedTabKeys].includes(key));
if (!otherTabs.includes('ucenter')) {
otherTabs.push('ucenter');
}

View File

@@ -77,6 +77,13 @@ export default {
iconPath: '/static/tabbar/me.png',
selectedIconPath: '/static/tabbar/me_active.png',
},
{
key: 'ai_qa',
text: 'AI问答',
pagePath: '/pages/ai_qa/ai_qa',
iconPath: '/static/tabbar/expression.png',
selectedIconPath: '/static/tabbar/expression_active.png',
},
{
key: 'ai_analysis',
text: 'AI分析',
@@ -112,10 +119,17 @@ export default {
iconPath: '/static/tabbar/customer.png',
selectedIconPath: '/static/tabbar/customer_active.png',
},
{
key: 'ai_qa',
text: 'AI问答',
pagePath: 'pages/ai_qa/ai_qa',
iconPath: '/static/tabbar/expression.png',
selectedIconPath: '/static/tabbar/expression_active.png',
},
{
key: 'ai_analysis',
text: 'AI分析',
pagePath: 'pages/ai_analysis/ai_analysis', // 移除开头的/
pagePath: 'pages/ai_analysis/ai_analysis',
iconPath: '/static/tabbar/ai_analysis.png',
selectedIconPath: '/static/tabbar/ai_analysis_active.png',
},
@@ -134,7 +148,7 @@ export default {
console.log('VISIBLE TABS CALC - THIS MUST SHOW IN H5');
// 简化逻辑直接返回家具相关的tabs跳过权限检查
const furnitureKeys = ['furniture_reception', 'furniture_customer', 'ai_analysis', 'ucenter'];
const furnitureKeys = ['furniture_reception', 'furniture_customer', 'ai_qa', 'ai_analysis', 'ucenter'];
const result = furnitureKeys.map(key => {
return this.allTabs.find(tab => tab.key === key);
}).filter(Boolean);
@@ -289,15 +303,15 @@ export default {
console.log('GET ALLOWED KEYS - 简化版本总是返回家具相关tabs');
// 简化逻辑总是返回家具相关的tabs
const furnitureTabs = ['furniture_reception', 'furniture_customer', 'ai_analysis', 'ucenter'];
const furnitureTabs = ['furniture_reception', 'furniture_customer', 'ai_qa', 'ai_analysis', 'ucenter'];
console.log('[TabBar][allowed] 简化逻辑 ->', furnitureTabs);
return furnitureTabs;
},
// #ifdef H5
toggleNativeTabs() {
// H5 平台自定义 tabbar 不生效,直接根据角色显隐原生 tabbar 项
// 当前位置顺序(根据 pages.json 中的 tabBar.list 顺序接待、客户、AI分析、我的、团队、总结和统计、家具接待、开始接待、家具客户
const ORDER = ['furniture_reception', 'furniture_customer', 'ai_analysis', 'ucenter', 'reception', 'customer', 'team', 'meeting_summary', 'common_begin_reception'];
// 当前位置顺序(根据 pages.json 中的 tabBar.list 顺序接待、客户、AI问答、AI分析、我的、团队、总结和统计
const ORDER = ['furniture_reception', 'furniture_customer', 'ai_qa', 'ai_analysis', 'ucenter', 'reception', 'customer', 'team', 'meeting_summary', 'common_begin_reception'];
const allowed = this.getAllowedKeys();
// 限制重试次数,防止渲染时机未就绪
this._h5TabRetries = (this._h5TabRetries || 0) + 1;
@@ -328,6 +342,7 @@ export default {
const tabBarList = [
'pages/furniture_reception/furniture_reception',
'pages/furniture_customer/furniture_customer',
'pages/ai_qa/ai_qa',
'pages/ai_analysis/ai_analysis',
'pages/ucenter/ucenter'
];
@@ -369,6 +384,7 @@ export default {
el.textContent && (
el.textContent.includes('接待') ||
el.textContent.includes('客户') ||
el.textContent.includes('AI问答') ||
el.textContent.includes('AI分析') ||
el.textContent.includes('我的')
)
@@ -406,9 +422,9 @@ export default {
return;
}
// 按文本内容排序接待、客户、AI分析、我的
// 按文本内容排序接待、客户、AI问答、AI分析、我的
const sortedElements = tabElements.sort((a, b) => {
const order = ['接待', '客户', 'AI分析', '我的'];
const order = ['接待', '客户', 'AI问答', 'AI分析', '我的'];
const aIndex = order.findIndex(text => a.textContent.includes(text));
const bIndex = order.findIndex(text => b.textContent.includes(text));
return aIndex - bIndex;
@@ -418,7 +434,7 @@ export default {
// 处理每个元素
sortedElements.forEach((element, index) => {
const keyMap = ['furniture_reception', 'furniture_customer', 'ai_analysis', 'ucenter'];
const keyMap = ['furniture_reception', 'furniture_customer', 'ai_qa', 'ai_analysis', 'ucenter'];
const key = keyMap[index];
const shouldShow = allowed.includes(key);