diff --git a/custom-tab-bar/index.vue b/custom-tab-bar/index.vue index 39187dc..7d8ea51 100644 --- a/custom-tab-bar/index.vue +++ b/custom-tab-bar/index.vue @@ -77,6 +77,13 @@ export default { iconPath: '/static/tabbar/me.png', selectedIconPath: '/static/tabbar/me_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: 'meeting_summary', text: '总结和统计', @@ -105,6 +112,13 @@ export default { iconPath: '/static/tabbar/customer.png', selectedIconPath: '/static/tabbar/customer_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: 'ucenter', text: '我的', @@ -120,7 +134,7 @@ export default { console.log('VISIBLE TABS CALC - THIS MUST SHOW IN H5'); // 简化逻辑:直接返回家具相关的tabs,跳过权限检查 - const furnitureKeys = ['furniture_reception', 'furniture_customer', 'ucenter']; + const furnitureKeys = ['furniture_reception', 'furniture_customer', 'ai_analysis', 'ucenter']; const result = furnitureKeys.map(key => { return this.allTabs.find(tab => tab.key === key); }).filter(Boolean); @@ -275,15 +289,15 @@ export default { console.log('GET ALLOWED KEYS - 简化版本,总是返回家具相关tabs'); // 简化逻辑:总是返回家具相关的tabs - const furnitureTabs = ['furniture_reception', 'furniture_customer', 'ucenter']; + const furnitureTabs = ['furniture_reception', 'furniture_customer', 'ai_analysis', 'ucenter']; console.log('[TabBar][allowed] 简化逻辑 ->', furnitureTabs); return furnitureTabs; }, // #ifdef H5 toggleNativeTabs() { // H5 平台自定义 tabbar 不生效,直接根据角色显隐原生 tabbar 项 - // 当前位置顺序(根据 pages.json 中的 tabBar.list 顺序):接待、客户、团队、总结和统计、家具接待、开始接待、家具客户、我的 - const ORDER = ['furniture_reception', 'furniture_customer', 'ucenter', 'reception', 'customer', 'team', 'meeting_summary', 'common_begin_reception']; + // 当前位置顺序(根据 pages.json 中的 tabBar.list 顺序):接待、客户、AI分析、我的、团队、总结和统计、家具接待、开始接待、家具客户 + const ORDER = ['furniture_reception', 'furniture_customer', 'ai_analysis', 'ucenter', 'reception', 'customer', 'team', 'meeting_summary', 'common_begin_reception']; const allowed = this.getAllowedKeys(); // 限制重试次数,防止渲染时机未就绪 this._h5TabRetries = (this._h5TabRetries || 0) + 1; @@ -314,6 +328,7 @@ export default { const tabBarList = [ 'pages/furniture_reception/furniture_reception', 'pages/furniture_customer/furniture_customer', + 'pages/ai_analysis/ai_analysis', 'pages/ucenter/ucenter' ]; const normalizedPath = pagePath.startsWith('/') ? pagePath.substring(1) : pagePath; @@ -354,6 +369,7 @@ export default { el.textContent && ( el.textContent.includes('接待') || el.textContent.includes('客户') || + el.textContent.includes('AI分析') || el.textContent.includes('我的') ) ); @@ -390,9 +406,9 @@ export default { return; } - // 按文本内容排序:接待、客户、我的 + // 按文本内容排序:接待、客户、AI分析、我的 const sortedElements = tabElements.sort((a, b) => { - const order = ['接待', '客户', '我的']; + const order = ['接待', '客户', 'AI分析', '我的']; const aIndex = order.findIndex(text => a.textContent.includes(text)); const bIndex = order.findIndex(text => b.textContent.includes(text)); return aIndex - bIndex; @@ -402,7 +418,7 @@ export default { // 处理每个元素 sortedElements.forEach((element, index) => { - const keyMap = ['furniture_reception', 'furniture_customer', 'ucenter']; + const keyMap = ['furniture_reception', 'furniture_customer', 'ai_analysis', 'ucenter']; const key = keyMap[index]; const shouldShow = allowed.includes(key); diff --git a/pages-subpackage/ai_features/customer_count/customer_count.vue b/pages-subpackage/ai_features/customer_count/customer_count.vue new file mode 100644 index 0000000..6bfd10d --- /dev/null +++ b/pages-subpackage/ai_features/customer_count/customer_count.vue @@ -0,0 +1,226 @@ + + + + + diff --git a/pages-subpackage/ai_features/deal_attribution/deal_attribution.vue b/pages-subpackage/ai_features/deal_attribution/deal_attribution.vue new file mode 100644 index 0000000..e4a3cde --- /dev/null +++ b/pages-subpackage/ai_features/deal_attribution/deal_attribution.vue @@ -0,0 +1,221 @@ + + + + + diff --git a/pages-subpackage/ai_features/intent_level/intent_level.vue b/pages-subpackage/ai_features/intent_level/intent_level.vue new file mode 100644 index 0000000..1b35d20 --- /dev/null +++ b/pages-subpackage/ai_features/intent_level/intent_level.vue @@ -0,0 +1,221 @@ + + + + + diff --git a/pages-subpackage/ai_features/opening_rate/opening_rate.vue b/pages-subpackage/ai_features/opening_rate/opening_rate.vue new file mode 100644 index 0000000..3648961 --- /dev/null +++ b/pages-subpackage/ai_features/opening_rate/opening_rate.vue @@ -0,0 +1,221 @@ + + + + + diff --git a/pages-subpackage/ai_features/over_commitment/over_commitment.vue b/pages-subpackage/ai_features/over_commitment/over_commitment.vue new file mode 100644 index 0000000..9e70eb1 --- /dev/null +++ b/pages-subpackage/ai_features/over_commitment/over_commitment.vue @@ -0,0 +1,221 @@ + + + + + diff --git a/pages-subpackage/ai_features/quality_coverage/quality_coverage.vue b/pages-subpackage/ai_features/quality_coverage/quality_coverage.vue new file mode 100644 index 0000000..b1bebfa --- /dev/null +++ b/pages-subpackage/ai_features/quality_coverage/quality_coverage.vue @@ -0,0 +1,221 @@ + + + + + diff --git a/pages-subpackage/ai_features/recording_duration/recording_duration.vue b/pages-subpackage/ai_features/recording_duration/recording_duration.vue new file mode 100644 index 0000000..456e2ea --- /dev/null +++ b/pages-subpackage/ai_features/recording_duration/recording_duration.vue @@ -0,0 +1,226 @@ + + + + + diff --git a/pages-subpackage/ai_features/red_line_touch/red_line_touch.vue b/pages-subpackage/ai_features/red_line_touch/red_line_touch.vue new file mode 100644 index 0000000..c4ea336 --- /dev/null +++ b/pages-subpackage/ai_features/red_line_touch/red_line_touch.vue @@ -0,0 +1,219 @@ + + + + + diff --git a/pages-subpackage/ai_features/speech_rating/speech_rating.vue b/pages-subpackage/ai_features/speech_rating/speech_rating.vue new file mode 100644 index 0000000..98117a7 --- /dev/null +++ b/pages-subpackage/ai_features/speech_rating/speech_rating.vue @@ -0,0 +1,221 @@ + + + + + diff --git a/pages.json b/pages.json index d45eba1..abffb76 100644 --- a/pages.json +++ b/pages.json @@ -30,6 +30,12 @@ "navigationStyle": "custom" } }, + { + "path": "pages/ai_analysis/ai_analysis", + "style": { + "navigationStyle": "custom" + } + }, // #ifdef APP { "path": "uni_modules/uni-upgrade-center-app/pages/upgrade-popup", @@ -262,6 +268,60 @@ "navigationBarTitleText": "阅读记录", "enablePullDownRefresh": true } + }, + { + "path": "ai_features/recording_duration/recording_duration", + "style": { + "navigationStyle": "custom" + } + }, + { + "path": "ai_features/customer_count/customer_count", + "style": { + "navigationStyle": "custom" + } + }, + { + "path": "ai_features/quality_coverage/quality_coverage", + "style": { + "navigationStyle": "custom" + } + }, + { + "path": "ai_features/speech_rating/speech_rating", + "style": { + "navigationStyle": "custom" + } + }, + { + "path": "ai_features/intent_level/intent_level", + "style": { + "navigationStyle": "custom" + } + }, + { + "path": "ai_features/deal_attribution/deal_attribution", + "style": { + "navigationStyle": "custom" + } + }, + { + "path": "ai_features/opening_rate/opening_rate", + "style": { + "navigationStyle": "custom" + } + }, + { + "path": "ai_features/over_commitment/over_commitment", + "style": { + "navigationStyle": "custom" + } + }, + { + "path": "ai_features/red_line_touch/red_line_touch", + "style": { + "navigationStyle": "custom" + } } // #ifdef APP , @@ -339,6 +399,12 @@ "selectedIconPath": "static/tabbar/customer_active.png", "text": "客户" }, + { + "pagePath": "pages/ai_analysis/ai_analysis", + "iconPath": "static/tabbar/ai_analysis.png", + "selectedIconPath": "static/tabbar/ai_analysis_active.png", + "text": "AI分析" + }, { "pagePath": "pages/ucenter/ucenter", "iconPath": "static/tabbar/me.png", diff --git a/pages/ai_analysis/ai_analysis.vue b/pages/ai_analysis/ai_analysis.vue new file mode 100644 index 0000000..022b4c7 --- /dev/null +++ b/pages/ai_analysis/ai_analysis.vue @@ -0,0 +1,461 @@ + + + + + diff --git a/static/tabbar/ai_analysis.png b/static/tabbar/ai_analysis.png new file mode 100644 index 0000000..0ec5081 Binary files /dev/null and b/static/tabbar/ai_analysis.png differ diff --git a/static/tabbar/ai_analysis_active.png b/static/tabbar/ai_analysis_active.png new file mode 100644 index 0000000..9b752c7 Binary files /dev/null and b/static/tabbar/ai_analysis_active.png differ diff --git a/unpackage/dist/dev/.sourcemap/mp-weixin/app.js.map b/unpackage/dist/dev/.sourcemap/mp-weixin/app.js.map index 5ca43de..1515db5 100644 --- a/unpackage/dist/dev/.sourcemap/mp-weixin/app.js.map +++ b/unpackage/dist/dev/.sourcemap/mp-weixin/app.js.map @@ -1 +1 @@ -{"version":3,"file":"app.js","sources":["App.vue","main.js"],"sourcesContent":["\n\n\n\n\n","import App from './App'\r\nimport i18n from './lang/i18n'\r\n\r\n\r\n// #ifndef VUE3\r\nimport Vue from 'vue'\r\nVue.config.productionTip = false\r\nApp.mpType = 'app'\r\nconst app = new Vue({\r\n\ti18n,\r\n\t...App\r\n})\r\napp.$mount()\r\n// #endif\r\n\r\n\r\n// #ifdef VUE3\r\nimport {createSSRApp} from 'vue'\r\n\r\nexport function createApp() {\r\n\tconst app = createSSRApp(App)\r\n\tapp.use(i18n)\r\n\treturn {app}\r\n}\r\n// #endif\r\n"],"names":["uni","initApp","uniIdPageInit","mutations","store","createSSRApp","i18n"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"app.js","sources":["App.vue","main.js"],"sourcesContent":["\n\n\n\n\n","import App from './App'\r\nimport i18n from './lang/i18n'\r\n\r\n\r\n// #ifndef VUE3\r\nimport Vue from 'vue'\r\nVue.config.productionTip = false\r\nApp.mpType = 'app'\r\nconst app = new Vue({\r\n\ti18n,\r\n\t...App\r\n})\r\napp.$mount()\r\n// #endif\r\n\r\n\r\n// #ifdef VUE3\r\nimport {createSSRApp} from 'vue'\r\n\r\nexport function createApp() {\r\n\tconst app = createSSRApp(App)\r\n\tapp.use(i18n)\r\n\treturn {app}\r\n}\r\n// #endif\r\n"],"names":["uni","initApp","uniIdPageInit","mutations","store","createSSRApp","i18n"],"mappings":"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"} \ No newline at end of file diff --git a/unpackage/dist/dev/.sourcemap/mp-weixin/common/store.js.map b/unpackage/dist/dev/.sourcemap/mp-weixin/common/store.js.map index 4a2b9a4..fd2a615 100644 --- a/unpackage/dist/dev/.sourcemap/mp-weixin/common/store.js.map +++ b/unpackage/dist/dev/.sourcemap/mp-weixin/common/store.js.map @@ -1 +1 @@ -{"version":3,"file":"store.js","sources":["common/store.js"],"sourcesContent":["import pagesJson from '@/pages.json'\r\nimport { getApiUrl } from '@/common/config.js'\r\n\r\n// 由于 store.js 在主包中,无法直接访问子包中的 config.js\r\n// 使用默认配置值\r\nconst config = {\r\n\tsetPasswordAfterLogin: false // 默认值,如果需要修改,可以在这里调整\r\n}\r\n\r\n// 获取用户信息,避免在模块加载时就执行 uni-app API\r\nlet hostUserInfo = null\r\n\r\nfunction getHostUserInfo() {\r\n\t// 总是从存储中读取最新值,确保登录状态的实时性\r\n\t// 特别是在微信小程序中,页面跳转可能导致模块重新加载\r\n\ttry {\r\n\t\tif (typeof uni !== 'undefined' && uni && typeof uni.getStorageSync === 'function') {\r\n\t\t\tconst storedUserInfo = uni.getStorageSync('uni-id-pages-userInfo') || {};\r\n\t\t\treturn storedUserInfo;\r\n\t\t}\r\n\t} catch (e) {\r\n\t\t// 在模块初始化时,uni可能还未完全初始化,静默失败\r\n\t}\r\n\treturn {};\r\n}\r\n\r\n// 初始化用户信息(只调用一次)\r\nconst initialUserInfo = getHostUserInfo() || {};\r\n\r\nconst data = {\r\n\tuserInfo: initialUserInfo,\r\n\thasLogin: Object.keys(initialUserInfo).length != 0\r\n}\r\n\r\n// 定义 mutations, 修改属性\r\nexport const mutations = {\r\n\t// 更新用户信息(简化版,不使用数据库)\r\n\tasync updateUserInfo(data = false) {\r\n\t\tif (data) {\r\n\t\t\t// 直接更新本地用户信息\r\n\t\t\tthis.setUserInfo(data)\r\n\t\t\tif (typeof uni !== 'undefined' && uni.showToast) {\r\n\t\t\t\tuni.showToast({\r\n\t\t\t\t\ttitle: \"更新成功\",\r\n\t\t\t\t\ticon: 'none',\r\n\t\t\t\t\tduration: 3000\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\t// 如果没有传入数据,不做任何操作(不再从数据库获取)\r\n\t\t\t// #ifdef APP-PLUS || H5 || MP-ALIPAY\r\n\t\t\tconsole.log('updateUserInfo called without data, skipping database operation')\r\n\t\t\t// #endif\r\n\t\t}\r\n\t},\r\n\t/**\r\n\t * 从本地存储中重新加载用户信息到store\r\n\t * 用于解决store初始化时uni未准备好导致的问题\r\n\t */\r\n\tsyncUserInfoFromStorage() {\r\n\t\ttry {\r\n\t\t\tif (typeof uni !== 'undefined' && uni && typeof uni.getStorageSync === 'function') {\r\n\t\t\t\tconst storedUserInfo = uni.getStorageSync('uni-id-pages-userInfo') || {};\r\n\t\t\t\tif (Object.keys(storedUserInfo).length > 0) {\r\n\t\t\t\t\tthis.setUserInfo(storedUserInfo, { cover: true });\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} catch (e) {\r\n\t\t\t// 静默失败\r\n\t\t}\r\n\t\treturn false;\r\n\t},\r\n\tsetUserInfo(data, {cover}={cover:false}) {\r\n\t\t// 确保data是一个对象\r\n\t\tconst safeData = data && typeof data === 'object' ? data : {};\r\n\t\tlet userInfo = cover ? safeData : Object.assign({}, store.userInfo || {}, safeData);\r\n\t\tstore.userInfo = Object.assign({}, userInfo);\r\n\t\tstore.hasLogin = Object.keys(store.userInfo).length != 0;\r\n\r\n\t\tif (typeof uni !== 'undefined' && uni && typeof uni.setStorageSync === 'function') {\r\n\t\t\ttry {\r\n\t\t\t\tuni.setStorageSync('uni-id-pages-userInfo', store.userInfo);\r\n\t\t\t} catch (e) {\r\n\t\t\t\t// 静默失败\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn safeData;\r\n\t},\r\n\tasync logout() {\r\n\t\t// 检查 uni 是否可用\r\n\t\tif (typeof uni === 'undefined') {\r\n\t\t\tconsole.warn('uni API not available for logout')\r\n\t\t\treturn\r\n\t\t}\r\n\r\n\t\t// 优先调用后端自定义登出接口(/api/sys/auth/logout),失败也不影响本地清理\r\n\t\tconst backendUserId = uni.getStorageSync('backend-user-id')\r\n\t\tif (backendUserId) {\r\n\t\t\ttry {\r\n\t\t\t\tawait uni.request({\r\n\t\t\t\t\turl: getApiUrl('/api/sys/auth/logout'),\r\n\t\t\t\t\tmethod: 'POST',\r\n\t\t\t\t\theader: {\r\n\t\t\t\t\t\t'Content-Type': 'application/x-www-form-urlencoded'\r\n\t\t\t\t\t},\r\n\t\t\t\t\tdata: {\r\n\t\t\t\t\t\tuserId: backendUserId\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t} catch (e) {\r\n\t\t\t\tconsole.error('后端登出接口调用失败:', e)\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// 清理本地登录状态(后端 token + 旧 uni-id token + tenantId)\r\n\t\tuni.removeStorageSync('backend-token')\r\n\t\tuni.removeStorageSync('backend-login-response')\r\n\t\tuni.removeStorageSync('backend-user-id')\r\n\t\tuni.removeStorageSync('backend-tenant-id') // 清除 tenantId\r\n\t\tuni.removeStorageSync('uni_id_token');\r\n\t\tuni.setStorageSync('uni_id_token_expired', 0)\r\n this.setUserInfo({},{cover:true})\r\n uni.$emit('uni-id-pages-logout')\r\n\t\tuni.redirectTo({\r\n\t\t\turl: `/${pagesJson.uniIdRouter && pagesJson.uniIdRouter.loginPage ? pagesJson.uniIdRouter.loginPage: 'uni_modules/uni-id-pages/pages/login/login-withoutpwd'}`,\r\n\t\t});\r\n\t},\r\n\tloginBack (e = {}) {\r\n\t\t// 检查 uni 是否可用\r\n\t\tif (typeof uni === 'undefined') {\r\n\t\t\tconsole.warn('uni API not available for loginBack')\r\n\t\t\treturn\r\n\t\t}\r\n\r\n\t\tconst {uniIdRedirectUrl = ''} = e\r\n\t\tlet delta = 0; //判断需要返回几层\r\n\t\tlet pages = getCurrentPages();\r\n\t\t// console.log(pages);\r\n\t\tpages.forEach((page, index) => {\r\n\t\t\tif (pages[pages.length - index - 1].route.split('/')[3] == 'login') {\r\n\t\t\t\tdelta++\r\n\t\t\t}\r\n\t\t})\r\n\t\t// console.log('判断需要返回几层:', delta);\r\n\t\tif (uniIdRedirectUrl) {\r\n\t\t\treturn uni.redirectTo({\r\n\t\t\t\turl: uniIdRedirectUrl,\r\n\t\t\t\tfail: (err1) => {\r\n\t\t\t\t\tuni.switchTab({\r\n\t\t\t\t\t\turl:uniIdRedirectUrl,\r\n\t\t\t\t\t\tfail: (err2) => {\r\n\t\t\t\t\t\t\tconsole.log(err1,err2)\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t})\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t}\r\n\t\t// #ifdef H5\r\n\t\tif (e.loginType == 'weixin') {\r\n\t\t\t// console.log('window.history', window.history);\r\n\t\t\treturn window.history.go(-3)\r\n\t\t}\r\n\t\t// #endif\r\n\r\n\t\tif (delta) {\r\n\t\t\tconst page = pagesJson.pages[0]\r\n\t\t\treturn uni.reLaunch({\r\n\t\t\t\turl: `/${page.path}`\r\n\t\t\t})\r\n\t\t}\r\n\r\n\t\tuni.navigateBack({\r\n\t\t\tdelta\r\n\t\t})\r\n\t},\r\n\tloginSuccess(e = {}){\r\n\t\tconst {\r\n\t\t\tshowToast = true, toastText = '登录成功', autoBack = true, uniIdRedirectUrl = '', passwordConfirmed\r\n\t\t} = e\r\n\t\t// console.log({toastText,autoBack});\r\n\r\n\t\t// 检查 uni 是否可用\r\n\t\tif (typeof uni === 'undefined') {\r\n\t\t\tconsole.warn('uni API not available for loginSuccess')\r\n\t\t\treturn\r\n\t\t}\r\n\r\n\t\tif (showToast) {\r\n\t\t\tuni.showToast({\r\n\t\t\t\ttitle: toastText,\r\n\t\t\t\ticon: 'none',\r\n\t\t\t\tduration: 3000\r\n\t\t\t});\r\n\t\t}\r\n // 异步调用(更新用户信息)防止获取头像等操作阻塞页面返回\r\n\t\tthis.updateUserInfo()\r\n\r\n\t\tuni.$emit('uni-id-pages-login-success')\r\n\r\n\t\tif (config.setPasswordAfterLogin && !passwordConfirmed) {\r\n\t\t\treturn uni.redirectTo({\r\n\t\t\t\turl: uniIdRedirectUrl ? `/uni_modules/uni-id-pages/pages/userinfo/set-pwd/set-pwd?uniIdRedirectUrl=${uniIdRedirectUrl}&loginType=${e.loginType}`: `/uni_modules/uni-id-pages/pages/userinfo/set-pwd/set-pwd?loginType=${e.loginType}`,\r\n\t\t\t\tfail: (err) => {\r\n\t\t\t\t\tconsole.log(err)\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t}\r\n\r\n\t\tif (autoBack) {\r\n\t\t\tthis.loginBack({uniIdRedirectUrl})\r\n\t\t}\r\n\t}\r\n\r\n}\r\n\r\n// #ifdef VUE2\r\nimport Vue from 'vue'\r\n// 通过Vue.observable创建一个可响应的对象\r\nexport const store = Vue.observable(data)\r\n// #endif\r\n\r\n// #ifdef VUE3\r\n// 在小程序环境中,可能 reactive 不可用,使用简单的对象\r\nexport const store = data\r\n// #endif\r\n"],"names":["uni","data","getApiUrl","pages"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"store.js","sources":["common/store.js"],"sourcesContent":["import pagesJson from '@/pages.json'\r\nimport { getApiUrl } from '@/common/config.js'\r\n\r\n// 由于 store.js 在主包中,无法直接访问子包中的 config.js\r\n// 使用默认配置值\r\nconst config = {\r\n\tsetPasswordAfterLogin: false // 默认值,如果需要修改,可以在这里调整\r\n}\r\n\r\n// 获取用户信息,避免在模块加载时就执行 uni-app API\r\nlet hostUserInfo = null\r\n\r\nfunction getHostUserInfo() {\r\n\t// 总是从存储中读取最新值,确保登录状态的实时性\r\n\t// 特别是在微信小程序中,页面跳转可能导致模块重新加载\r\n\ttry {\r\n\t\tif (typeof uni !== 'undefined' && uni && typeof uni.getStorageSync === 'function') {\r\n\t\t\tconst storedUserInfo = uni.getStorageSync('uni-id-pages-userInfo') || {};\r\n\t\t\treturn storedUserInfo;\r\n\t\t}\r\n\t} catch (e) {\r\n\t\t// 在模块初始化时,uni可能还未完全初始化,静默失败\r\n\t}\r\n\treturn {};\r\n}\r\n\r\n// 初始化用户信息(只调用一次)\r\nconst initialUserInfo = getHostUserInfo() || {};\r\n\r\nconst data = {\r\n\tuserInfo: initialUserInfo,\r\n\thasLogin: Object.keys(initialUserInfo).length != 0\r\n}\r\n\r\n// 定义 mutations, 修改属性\r\nexport const mutations = {\r\n\t// 更新用户信息(简化版,不使用数据库)\r\n\tasync updateUserInfo(data = false) {\r\n\t\tif (data) {\r\n\t\t\t// 直接更新本地用户信息\r\n\t\t\tthis.setUserInfo(data)\r\n\t\t\tif (typeof uni !== 'undefined' && uni.showToast) {\r\n\t\t\t\tuni.showToast({\r\n\t\t\t\t\ttitle: \"更新成功\",\r\n\t\t\t\t\ticon: 'none',\r\n\t\t\t\t\tduration: 3000\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\t// 如果没有传入数据,不做任何操作(不再从数据库获取)\r\n\t\t\t// #ifdef APP-PLUS || H5 || MP-ALIPAY\r\n\t\t\tconsole.log('updateUserInfo called without data, skipping database operation')\r\n\t\t\t// #endif\r\n\t\t}\r\n\t},\r\n\t/**\r\n\t * 从本地存储中重新加载用户信息到store\r\n\t * 用于解决store初始化时uni未准备好导致的问题\r\n\t */\r\n\tsyncUserInfoFromStorage() {\r\n\t\ttry {\r\n\t\t\tif (typeof uni !== 'undefined' && uni && typeof uni.getStorageSync === 'function') {\r\n\t\t\t\tconst storedUserInfo = uni.getStorageSync('uni-id-pages-userInfo') || {};\r\n\t\t\t\tif (Object.keys(storedUserInfo).length > 0) {\r\n\t\t\t\t\tthis.setUserInfo(storedUserInfo, { cover: true });\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} catch (e) {\r\n\t\t\t// 静默失败\r\n\t\t}\r\n\t\treturn false;\r\n\t},\r\n\tsetUserInfo(data, {cover}={cover:false}) {\r\n\t\t// 确保data是一个对象\r\n\t\tconst safeData = data && typeof data === 'object' ? data : {};\r\n\t\tlet userInfo = cover ? safeData : Object.assign({}, store.userInfo || {}, safeData);\r\n\t\tstore.userInfo = Object.assign({}, userInfo);\r\n\t\tstore.hasLogin = Object.keys(store.userInfo).length != 0;\r\n\r\n\t\tif (typeof uni !== 'undefined' && uni && typeof uni.setStorageSync === 'function') {\r\n\t\t\ttry {\r\n\t\t\t\tuni.setStorageSync('uni-id-pages-userInfo', store.userInfo);\r\n\t\t\t} catch (e) {\r\n\t\t\t\t// 静默失败\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn safeData;\r\n\t},\r\n\tasync logout() {\r\n\t\t// 检查 uni 是否可用\r\n\t\tif (typeof uni === 'undefined') {\r\n\t\t\tconsole.warn('uni API not available for logout')\r\n\t\t\treturn\r\n\t\t}\r\n\r\n\t\t// 优先调用后端自定义登出接口(/api/sys/auth/logout),失败也不影响本地清理\r\n\t\tconst backendUserId = uni.getStorageSync('backend-user-id')\r\n\t\tif (backendUserId) {\r\n\t\t\ttry {\r\n\t\t\t\tawait uni.request({\r\n\t\t\t\t\turl: getApiUrl('/api/sys/auth/logout'),\r\n\t\t\t\t\tmethod: 'POST',\r\n\t\t\t\t\theader: {\r\n\t\t\t\t\t\t'Content-Type': 'application/x-www-form-urlencoded'\r\n\t\t\t\t\t},\r\n\t\t\t\t\tdata: {\r\n\t\t\t\t\t\tuserId: backendUserId\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t} catch (e) {\r\n\t\t\t\tconsole.error('后端登出接口调用失败:', e)\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// 清理本地登录状态(后端 token + 旧 uni-id token + tenantId)\r\n\t\tuni.removeStorageSync('backend-token')\r\n\t\tuni.removeStorageSync('backend-login-response')\r\n\t\tuni.removeStorageSync('backend-user-id')\r\n\t\tuni.removeStorageSync('backend-tenant-id') // 清除 tenantId\r\n\t\tuni.removeStorageSync('uni_id_token');\r\n\t\tuni.setStorageSync('uni_id_token_expired', 0)\r\n this.setUserInfo({},{cover:true})\r\n uni.$emit('uni-id-pages-logout')\r\n\t\tuni.redirectTo({\r\n\t\t\turl: `/${pagesJson.uniIdRouter && pagesJson.uniIdRouter.loginPage ? pagesJson.uniIdRouter.loginPage: 'uni_modules/uni-id-pages/pages/login/login-withoutpwd'}`,\r\n\t\t});\r\n\t},\r\n\tloginBack (e = {}) {\r\n\t\t// 检查 uni 是否可用\r\n\t\tif (typeof uni === 'undefined') {\r\n\t\t\tconsole.warn('uni API not available for loginBack')\r\n\t\t\treturn\r\n\t\t}\r\n\r\n\t\tconst {uniIdRedirectUrl = ''} = e\r\n\t\tlet delta = 0; //判断需要返回几层\r\n\t\tlet pages = getCurrentPages();\r\n\t\t// console.log(pages);\r\n\t\tpages.forEach((page, index) => {\r\n\t\t\tif (pages[pages.length - index - 1].route.split('/')[3] == 'login') {\r\n\t\t\t\tdelta++\r\n\t\t\t}\r\n\t\t})\r\n\t\t// console.log('判断需要返回几层:', delta);\r\n\t\tif (uniIdRedirectUrl) {\r\n\t\t\treturn uni.redirectTo({\r\n\t\t\t\turl: uniIdRedirectUrl,\r\n\t\t\t\tfail: (err1) => {\r\n\t\t\t\t\tuni.switchTab({\r\n\t\t\t\t\t\turl:uniIdRedirectUrl,\r\n\t\t\t\t\t\tfail: (err2) => {\r\n\t\t\t\t\t\t\tconsole.log(err1,err2)\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t})\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t}\r\n\t\t// #ifdef H5\r\n\t\tif (e.loginType == 'weixin') {\r\n\t\t\t// console.log('window.history', window.history);\r\n\t\t\treturn window.history.go(-3)\r\n\t\t}\r\n\t\t// #endif\r\n\r\n\t\tif (delta) {\r\n\t\t\tconst page = pagesJson.pages[0]\r\n\t\t\treturn uni.reLaunch({\r\n\t\t\t\turl: `/${page.path}`\r\n\t\t\t})\r\n\t\t}\r\n\r\n\t\tuni.navigateBack({\r\n\t\t\tdelta\r\n\t\t})\r\n\t},\r\n\tloginSuccess(e = {}){\r\n\t\tconst {\r\n\t\t\tshowToast = true, toastText = '登录成功', autoBack = true, uniIdRedirectUrl = '', passwordConfirmed\r\n\t\t} = e\r\n\t\t// console.log({toastText,autoBack});\r\n\r\n\t\t// 检查 uni 是否可用\r\n\t\tif (typeof uni === 'undefined') {\r\n\t\t\tconsole.warn('uni API not available for loginSuccess')\r\n\t\t\treturn\r\n\t\t}\r\n\r\n\t\tif (showToast) {\r\n\t\t\tuni.showToast({\r\n\t\t\t\ttitle: toastText,\r\n\t\t\t\ticon: 'none',\r\n\t\t\t\tduration: 3000\r\n\t\t\t});\r\n\t\t}\r\n // 异步调用(更新用户信息)防止获取头像等操作阻塞页面返回\r\n\t\tthis.updateUserInfo()\r\n\r\n\t\tuni.$emit('uni-id-pages-login-success')\r\n\r\n\t\tif (config.setPasswordAfterLogin && !passwordConfirmed) {\r\n\t\t\treturn uni.redirectTo({\r\n\t\t\t\turl: uniIdRedirectUrl ? `/uni_modules/uni-id-pages/pages/userinfo/set-pwd/set-pwd?uniIdRedirectUrl=${uniIdRedirectUrl}&loginType=${e.loginType}`: `/uni_modules/uni-id-pages/pages/userinfo/set-pwd/set-pwd?loginType=${e.loginType}`,\r\n\t\t\t\tfail: (err) => {\r\n\t\t\t\t\tconsole.log(err)\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t}\r\n\r\n\t\tif (autoBack) {\r\n\t\t\tthis.loginBack({uniIdRedirectUrl})\r\n\t\t}\r\n\t}\r\n\r\n}\r\n\r\n// #ifdef VUE2\r\nimport Vue from 'vue'\r\n// 通过Vue.observable创建一个可响应的对象\r\nexport const store = Vue.observable(data)\r\n// #endif\r\n\r\n// #ifdef VUE3\r\n// 在小程序环境中,可能 reactive 不可用,使用简单的对象\r\nexport const store = data\r\n// #endif\r\n"],"names":["uni","data","getApiUrl","pages"],"mappings":"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"} \ No newline at end of file diff --git a/unpackage/dist/dev/.sourcemap/mp-weixin/pages-subpackage/ai_features/customer_count/customer_count.js.map b/unpackage/dist/dev/.sourcemap/mp-weixin/pages-subpackage/ai_features/customer_count/customer_count.js.map new file mode 100644 index 0000000..b4ca725 --- /dev/null +++ b/unpackage/dist/dev/.sourcemap/mp-weixin/pages-subpackage/ai_features/customer_count/customer_count.js.map @@ -0,0 +1 @@ +{"version":3,"file":"customer_count.js","sources":["pages-subpackage/ai_features/customer_count/customer_count.vue","../../../work/soft/HBuilderX.4.87.20251210/plugins/uniapp-cli-vite/uniPage:/cGFnZXMtc3VicGFja2FnZVxhaV9mZWF0dXJlc1xjdXN0b21lcl9jb3VudFxjdXN0b21lcl9jb3VudC52dWU"],"sourcesContent":["\r\n\r\n\r\n\r\n\r\n","import MiniProgramPage from 'D:/work2/code/smartDriveEEUniApp1111/pages-subpackage/ai_features/customer_count/customer_count.vue'\nwx.createPage(MiniProgramPage)"],"names":["uni"],"mappings":";;AAqDA,MAAK,YAAU;AAAA,EACb,OAAO;AACL,WAAO;AAAA,MACL,gBAAgB;AAAA,MAChB,gBAAgB;AAAA,MAChB,UAAU;AAAA,QACR,EAAE,MAAM,cAAc,aAAa,UAAU,OAAO,KAAM;AAAA,QAC1D,EAAE,MAAM,cAAc,aAAa,UAAU,OAAO,KAAM;AAAA,QAC1D,EAAE,MAAM,cAAc,aAAa,UAAU,OAAO,KAAM;AAAA,QAC1D,EAAE,MAAM,cAAc,aAAa,WAAW,OAAO,KAAM;AAAA,QAC3D,EAAE,MAAM,cAAc,aAAa,UAAU,OAAO,KAAK;AAAA,MAC3D;AAAA,IACF;AAAA,EACD;AAAA,EACD,SAAS;AAAA,IACP,SAAS;AACPA,oBAAAA,MAAI,aAAa;AAAA,IACnB;AAAA,EACF;AACF;;;;;;;;;;;;;;;;;ACvEA,GAAG,WAAW,eAAe;"} \ No newline at end of file diff --git a/unpackage/dist/dev/.sourcemap/mp-weixin/pages-subpackage/ai_features/deal_attribution/deal_attribution.js.map b/unpackage/dist/dev/.sourcemap/mp-weixin/pages-subpackage/ai_features/deal_attribution/deal_attribution.js.map new file mode 100644 index 0000000..42f6f8f --- /dev/null +++ b/unpackage/dist/dev/.sourcemap/mp-weixin/pages-subpackage/ai_features/deal_attribution/deal_attribution.js.map @@ -0,0 +1 @@ +{"version":3,"file":"deal_attribution.js","sources":["pages-subpackage/ai_features/deal_attribution/deal_attribution.vue","../../../work/soft/HBuilderX.4.87.20251210/plugins/uniapp-cli-vite/uniPage:/cGFnZXMtc3VicGFja2FnZVxhaV9mZWF0dXJlc1xkZWFsX2F0dHJpYnV0aW9uXGRlYWxfYXR0cmlidXRpb24udnVl"],"sourcesContent":["\r\n\r\n\r\n\r\n\r\n","import MiniProgramPage from 'D:/work2/code/smartDriveEEUniApp1111/pages-subpackage/ai_features/deal_attribution/deal_attribution.vue'\nwx.createPage(MiniProgramPage)"],"names":["uni"],"mappings":";;AAgDA,MAAK,YAAU;AAAA,EACb,OAAO;AACL,WAAO;AAAA,MACL,gBAAgB;AAAA,MAChB,YAAY;AAAA,MACZ,UAAU;AAAA,QACR,EAAE,QAAQ,QAAQ,aAAa,YAAY,YAAY,OAAQ;AAAA,QAC/D,EAAE,QAAQ,QAAQ,aAAa,aAAa,YAAY,OAAQ;AAAA,QAChE,EAAE,QAAQ,QAAQ,aAAa,WAAW,YAAY,OAAQ;AAAA,QAC9D,EAAE,QAAQ,QAAQ,aAAa,aAAa,YAAY,OAAQ;AAAA,QAChE,EAAE,QAAQ,QAAQ,aAAa,YAAY,YAAY,MAAM;AAAA,MAC/D;AAAA,IACF;AAAA,EACD;AAAA,EACD,SAAS;AAAA,IACP,SAAS;AACPA,oBAAAA,MAAI,aAAa;AAAA,IACnB;AAAA,EACF;AACF;;;;;;;;;;;;;;;;;AClEA,GAAG,WAAW,eAAe;"} \ No newline at end of file diff --git a/unpackage/dist/dev/.sourcemap/mp-weixin/pages-subpackage/ai_features/intent_level/intent_level.js.map b/unpackage/dist/dev/.sourcemap/mp-weixin/pages-subpackage/ai_features/intent_level/intent_level.js.map new file mode 100644 index 0000000..82a0ebd --- /dev/null +++ b/unpackage/dist/dev/.sourcemap/mp-weixin/pages-subpackage/ai_features/intent_level/intent_level.js.map @@ -0,0 +1 @@ +{"version":3,"file":"intent_level.js","sources":["pages-subpackage/ai_features/intent_level/intent_level.vue","../../../work/soft/HBuilderX.4.87.20251210/plugins/uniapp-cli-vite/uniPage:/cGFnZXMtc3VicGFja2FnZVxhaV9mZWF0dXJlc1xpbnRlbnRfbGV2ZWxcaW50ZW50X2xldmVsLnZ1ZQ"],"sourcesContent":["\r\n\r\n\r\n\r\n\r\n","import MiniProgramPage from 'D:/work2/code/smartDriveEEUniApp1111/pages-subpackage/ai_features/intent_level/intent_level.vue'\nwx.createPage(MiniProgramPage)"],"names":["uni"],"mappings":";;AAgDA,MAAK,YAAU;AAAA,EACb,OAAO;AACL,WAAO;AAAA,MACL,YAAY;AAAA,MACZ,eAAe;AAAA,MACf,UAAU;AAAA,QACR,EAAE,OAAO,OAAO,aAAa,YAAY,OAAO,MAAO;AAAA,QACvD,EAAE,OAAO,QAAQ,aAAa,WAAW,OAAO,MAAO;AAAA,QACvD,EAAE,OAAO,OAAO,aAAa,WAAW,OAAO,MAAO;AAAA,QACtD,EAAE,OAAO,OAAO,aAAa,UAAU,OAAO,MAAO;AAAA,QACrD,EAAE,OAAO,OAAO,aAAa,UAAU,OAAO,KAAK;AAAA,MACrD;AAAA,IACF;AAAA,EACD;AAAA,EACD,SAAS;AAAA,IACP,SAAS;AACPA,oBAAAA,MAAI,aAAa;AAAA,IACnB;AAAA,EACF;AACF;;;;;;;;;;;;;;;;;AClEA,GAAG,WAAW,eAAe;"} \ No newline at end of file diff --git a/unpackage/dist/dev/.sourcemap/mp-weixin/pages-subpackage/ai_features/opening_rate/opening_rate.js.map b/unpackage/dist/dev/.sourcemap/mp-weixin/pages-subpackage/ai_features/opening_rate/opening_rate.js.map new file mode 100644 index 0000000..2584efa --- /dev/null +++ b/unpackage/dist/dev/.sourcemap/mp-weixin/pages-subpackage/ai_features/opening_rate/opening_rate.js.map @@ -0,0 +1 @@ +{"version":3,"file":"opening_rate.js","sources":["pages-subpackage/ai_features/opening_rate/opening_rate.vue","../../../work/soft/HBuilderX.4.87.20251210/plugins/uniapp-cli-vite/uniPage:/cGFnZXMtc3VicGFja2FnZVxhaV9mZWF0dXJlc1xvcGVuaW5nX3JhdGVcb3BlbmluZ19yYXRlLnZ1ZQ"],"sourcesContent":["\r\n\r\n\r\n\r\n\r\n","import MiniProgramPage from 'D:/work2/code/smartDriveEEUniApp1111/pages-subpackage/ai_features/opening_rate/opening_rate.vue'\nwx.createPage(MiniProgramPage)"],"names":["uni"],"mappings":";;AAgDA,MAAK,YAAU;AAAA,EACb,OAAO;AACL,WAAO;AAAA,MACL,aAAa;AAAA,MACb,oBAAoB;AAAA,MACpB,UAAU;AAAA,QACR,EAAE,MAAM,cAAc,aAAa,UAAU,MAAM,OAAQ;AAAA,QAC3D,EAAE,MAAM,eAAe,aAAa,QAAQ,MAAM,OAAQ;AAAA,QAC1D,EAAE,MAAM,eAAe,aAAa,QAAQ,MAAM,OAAQ;AAAA,QAC1D,EAAE,MAAM,eAAe,aAAa,SAAS,MAAM,OAAQ;AAAA,QAC3D,EAAE,MAAM,QAAQ,aAAa,WAAW,MAAM,OAAO;AAAA,MACvD;AAAA,IACF;AAAA,EACD;AAAA,EACD,SAAS;AAAA,IACP,SAAS;AACPA,oBAAAA,MAAI,aAAa;AAAA,IACnB;AAAA,EACF;AACF;;;;;;;;;;;;;;;;;AClEA,GAAG,WAAW,eAAe;"} \ No newline at end of file diff --git a/unpackage/dist/dev/.sourcemap/mp-weixin/pages-subpackage/ai_features/over_commitment/over_commitment.js.map b/unpackage/dist/dev/.sourcemap/mp-weixin/pages-subpackage/ai_features/over_commitment/over_commitment.js.map new file mode 100644 index 0000000..472adf1 --- /dev/null +++ b/unpackage/dist/dev/.sourcemap/mp-weixin/pages-subpackage/ai_features/over_commitment/over_commitment.js.map @@ -0,0 +1 @@ +{"version":3,"file":"over_commitment.js","sources":["pages-subpackage/ai_features/over_commitment/over_commitment.vue","../../../work/soft/HBuilderX.4.87.20251210/plugins/uniapp-cli-vite/uniPage:/cGFnZXMtc3VicGFja2FnZVxhaV9mZWF0dXJlc1xvdmVyX2NvbW1pdG1lbnRcb3Zlcl9jb21taXRtZW50LnZ1ZQ"],"sourcesContent":["\r\n\r\n\r\n\r\n\r\n","import MiniProgramPage from 'D:/work2/code/smartDriveEEUniApp1111/pages-subpackage/ai_features/over_commitment/over_commitment.vue'\nwx.createPage(MiniProgramPage)"],"names":["uni"],"mappings":";;AAgDA,MAAK,YAAU;AAAA,EACb,OAAO;AACL,WAAO;AAAA,MACL,oBAAoB;AAAA,MACpB,gBAAgB;AAAA,MAChB,UAAU;AAAA,QACR,EAAE,UAAU,MAAM,aAAa,aAAa,OAAO,IAAK;AAAA,QACxD,EAAE,UAAU,MAAM,aAAa,aAAa,OAAO,IAAK;AAAA,QACxD,EAAE,UAAU,MAAM,aAAa,aAAa,OAAO,IAAK;AAAA,QACxD,EAAE,UAAU,MAAM,aAAa,eAAe,OAAO,IAAK;AAAA,QAC1D,EAAE,UAAU,MAAM,aAAa,UAAU,OAAO,KAAK;AAAA,MACvD;AAAA,IACF;AAAA,EACD;AAAA,EACD,SAAS;AAAA,IACP,SAAS;AACPA,oBAAAA,MAAI,aAAa;AAAA,IACnB;AAAA,EACF;AACF;;;;;;;;;;;;;;;;;AClEA,GAAG,WAAW,eAAe;"} \ No newline at end of file diff --git a/unpackage/dist/dev/.sourcemap/mp-weixin/pages-subpackage/ai_features/quality_coverage/quality_coverage.js.map b/unpackage/dist/dev/.sourcemap/mp-weixin/pages-subpackage/ai_features/quality_coverage/quality_coverage.js.map new file mode 100644 index 0000000..4710d20 --- /dev/null +++ b/unpackage/dist/dev/.sourcemap/mp-weixin/pages-subpackage/ai_features/quality_coverage/quality_coverage.js.map @@ -0,0 +1 @@ +{"version":3,"file":"quality_coverage.js","sources":["pages-subpackage/ai_features/quality_coverage/quality_coverage.vue","../../../work/soft/HBuilderX.4.87.20251210/plugins/uniapp-cli-vite/uniPage:/cGFnZXMtc3VicGFja2FnZVxhaV9mZWF0dXJlc1xxdWFsaXR5X2NvdmVyYWdlXHF1YWxpdHlfY292ZXJhZ2UudnVl"],"sourcesContent":["\r\n\r\n\r\n\r\n\r\n","import MiniProgramPage from 'D:/work2/code/smartDriveEEUniApp1111/pages-subpackage/ai_features/quality_coverage/quality_coverage.vue'\nwx.createPage(MiniProgramPage)"],"names":["uni"],"mappings":";;AAgDA,MAAK,YAAU;AAAA,EACb,OAAO;AACL,WAAO;AAAA,MACL,cAAc;AAAA,MACd,eAAe;AAAA,MACf,UAAU;AAAA,QACR,EAAE,MAAM,cAAc,aAAa,WAAW,MAAM,OAAQ;AAAA,QAC5D,EAAE,MAAM,cAAc,aAAa,WAAW,MAAM,OAAQ;AAAA,QAC5D,EAAE,MAAM,cAAc,aAAa,WAAW,MAAM,OAAQ;AAAA,QAC5D,EAAE,MAAM,cAAc,aAAa,YAAY,MAAM,OAAQ;AAAA,QAC7D,EAAE,MAAM,cAAc,aAAa,SAAS,MAAM,OAAO;AAAA,MAC3D;AAAA,IACF;AAAA,EACD;AAAA,EACD,SAAS;AAAA,IACP,SAAS;AACPA,oBAAAA,MAAI,aAAa;AAAA,IACnB;AAAA,EACF;AACF;;;;;;;;;;;;;;;;;AClEA,GAAG,WAAW,eAAe;"} \ No newline at end of file diff --git a/unpackage/dist/dev/.sourcemap/mp-weixin/pages-subpackage/ai_features/recording_duration/recording_duration.js.map b/unpackage/dist/dev/.sourcemap/mp-weixin/pages-subpackage/ai_features/recording_duration/recording_duration.js.map new file mode 100644 index 0000000..4d26511 --- /dev/null +++ b/unpackage/dist/dev/.sourcemap/mp-weixin/pages-subpackage/ai_features/recording_duration/recording_duration.js.map @@ -0,0 +1 @@ +{"version":3,"file":"recording_duration.js","sources":["pages-subpackage/ai_features/recording_duration/recording_duration.vue","../../../work/soft/HBuilderX.4.87.20251210/plugins/uniapp-cli-vite/uniPage:/cGFnZXMtc3VicGFja2FnZVxhaV9mZWF0dXJlc1xyZWNvcmRpbmdfZHVyYXRpb25ccmVjb3JkaW5nX2R1cmF0aW9uLnZ1ZQ"],"sourcesContent":["\r\n\r\n\r\n\r\n\r\n","import MiniProgramPage from 'D:/work2/code/smartDriveEEUniApp1111/pages-subpackage/ai_features/recording_duration/recording_duration.vue'\nwx.createPage(MiniProgramPage)"],"names":["uni"],"mappings":";;AAqDA,MAAK,YAAU;AAAA,EACb,OAAO;AACL,WAAO;AAAA,MACL,eAAe;AAAA,MACf,eAAe;AAAA,MACf,UAAU;AAAA,QACR,EAAE,MAAM,cAAc,aAAa,UAAU,UAAU,SAAU;AAAA,QACjE,EAAE,MAAM,cAAc,aAAa,UAAU,UAAU,SAAU;AAAA,QACjE,EAAE,MAAM,cAAc,aAAa,QAAQ,UAAU,SAAU;AAAA,QAC/D,EAAE,MAAM,cAAc,aAAa,QAAQ,UAAU,SAAU;AAAA,QAC/D,EAAE,MAAM,cAAc,aAAa,UAAU,UAAU,SAAS;AAAA,MAClE;AAAA,IACF;AAAA,EACD;AAAA,EACD,SAAS;AAAA,IACP,SAAS;AACPA,oBAAAA,MAAI,aAAa;AAAA,IACnB;AAAA,EACF;AACF;;;;;;;;;;;;;;;;;ACvEA,GAAG,WAAW,eAAe;"} \ No newline at end of file diff --git a/unpackage/dist/dev/.sourcemap/mp-weixin/pages-subpackage/ai_features/red_line_touch/red_line_touch.js.map b/unpackage/dist/dev/.sourcemap/mp-weixin/pages-subpackage/ai_features/red_line_touch/red_line_touch.js.map new file mode 100644 index 0000000..160b6c1 --- /dev/null +++ b/unpackage/dist/dev/.sourcemap/mp-weixin/pages-subpackage/ai_features/red_line_touch/red_line_touch.js.map @@ -0,0 +1 @@ +{"version":3,"file":"red_line_touch.js","sources":["pages-subpackage/ai_features/red_line_touch/red_line_touch.vue","../../../work/soft/HBuilderX.4.87.20251210/plugins/uniapp-cli-vite/uniPage:/cGFnZXMtc3VicGFja2FnZVxhaV9mZWF0dXJlc1xyZWRfbGluZV90b3VjaFxyZWRfbGluZV90b3VjaC52dWU"],"sourcesContent":["\r\n\r\n\r\n\r\n\r\n","import MiniProgramPage from 'D:/work2/code/smartDriveEEUniApp1111/pages-subpackage/ai_features/red_line_touch/red_line_touch.vue'\nwx.createPage(MiniProgramPage)"],"names":["uni"],"mappings":";;AAgDA,MAAK,YAAU;AAAA,EACb,OAAO;AACL,WAAO;AAAA,MACL,kBAAkB;AAAA,MAClB,cAAc;AAAA,MACd,UAAU;AAAA,QACR,EAAE,WAAW,QAAQ,aAAa,iBAAiB,OAAO,KAAM;AAAA,QAChE,EAAE,WAAW,QAAQ,aAAa,YAAY,OAAO,IAAK;AAAA,QAC1D,EAAE,WAAW,QAAQ,aAAa,YAAY,OAAO,IAAI;AAAA,MAC3D;AAAA,IACF;AAAA,EACD;AAAA,EACD,SAAS;AAAA,IACP,SAAS;AACPA,oBAAAA,MAAI,aAAa;AAAA,IACnB;AAAA,EACF;AACF;;;;;;;;;;;;;;;;;AChEA,GAAG,WAAW,eAAe;"} \ No newline at end of file diff --git a/unpackage/dist/dev/.sourcemap/mp-weixin/pages-subpackage/ai_features/speech_rating/speech_rating.js.map b/unpackage/dist/dev/.sourcemap/mp-weixin/pages-subpackage/ai_features/speech_rating/speech_rating.js.map new file mode 100644 index 0000000..19f347b --- /dev/null +++ b/unpackage/dist/dev/.sourcemap/mp-weixin/pages-subpackage/ai_features/speech_rating/speech_rating.js.map @@ -0,0 +1 @@ +{"version":3,"file":"speech_rating.js","sources":["pages-subpackage/ai_features/speech_rating/speech_rating.vue","../../../work/soft/HBuilderX.4.87.20251210/plugins/uniapp-cli-vite/uniPage:/cGFnZXMtc3VicGFja2FnZVxhaV9mZWF0dXJlc1xzcGVlY2hfcmF0aW5nXHNwZWVjaF9yYXRpbmcudnVl"],"sourcesContent":["\r\n\r\n\r\n\r\n\r\n","import MiniProgramPage from 'D:/work2/code/smartDriveEEUniApp1111/pages-subpackage/ai_features/speech_rating/speech_rating.vue'\nwx.createPage(MiniProgramPage)"],"names":["uni"],"mappings":";;AAgDA,MAAK,YAAU;AAAA,EACb,OAAO;AACL,WAAO;AAAA,MACL,cAAc;AAAA,MACd,kBAAkB;AAAA,MAClB,UAAU;AAAA,QACR,EAAE,UAAU,MAAM,aAAa,UAAU,OAAO,MAAO;AAAA,QACvD,EAAE,UAAU,MAAM,aAAa,UAAU,OAAO,MAAO;AAAA,QACvD,EAAE,UAAU,MAAM,aAAa,UAAU,OAAO,MAAO;AAAA,QACvD,EAAE,UAAU,MAAM,aAAa,UAAU,OAAO,MAAO;AAAA,QACvD,EAAE,UAAU,MAAM,aAAa,UAAU,OAAO,MAAM;AAAA,MACxD;AAAA,IACF;AAAA,EACD;AAAA,EACD,SAAS;AAAA,IACP,SAAS;AACPA,oBAAAA,MAAI,aAAa;AAAA,IACnB;AAAA,EACF;AACF;;;;;;;;;;;;;;;;;AClEA,GAAG,WAAW,eAAe;"} \ No newline at end of file diff --git a/unpackage/dist/dev/.sourcemap/mp-weixin/pages/ai_analysis/ai_analysis.js.map b/unpackage/dist/dev/.sourcemap/mp-weixin/pages/ai_analysis/ai_analysis.js.map new file mode 100644 index 0000000..9657cce --- /dev/null +++ b/unpackage/dist/dev/.sourcemap/mp-weixin/pages/ai_analysis/ai_analysis.js.map @@ -0,0 +1 @@ +{"version":3,"file":"ai_analysis.js","sources":["pages/ai_analysis/ai_analysis.vue","../../../work/soft/HBuilderX.4.87.20251210/plugins/uniapp-cli-vite/uniPage:/cGFnZXMvYWlfYW5hbHlzaXMvYWlfYW5hbHlzaXMudnVl"],"sourcesContent":["\r\n\r\n\r\n\r\n\r\n","import MiniProgramPage from 'D:/work2/code/smartDriveEEUniApp1111/pages/ai_analysis/ai_analysis.vue'\nwx.createPage(MiniProgramPage)"],"names":["uni"],"mappings":"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"} \ No newline at end of file diff --git a/unpackage/dist/dev/mp-weixin/app.js b/unpackage/dist/dev/mp-weixin/app.js index 593f6d4..ae4135b 100644 --- a/unpackage/dist/dev/mp-weixin/app.js +++ b/unpackage/dist/dev/mp-weixin/app.js @@ -12,6 +12,7 @@ if (!Math) { "./pages/team/team.js"; "./pages/furniture_reception/common_begin_reception.js"; "./pages/furniture_customer/furniture_customer.js"; + "./pages/ai_analysis/ai_analysis.js"; "./uni_modules/uni-feedback/pages/opendb-feedback/opendb-feedback.js"; "./uni_modules/uni-id-pages/pages/userinfo/userinfo.js"; "./uni_modules/uni-id-pages/pages/userinfo/realname-verify/realname-verify.js"; @@ -41,6 +42,15 @@ if (!Math) { "./pages-subpackage/uni-agree/uni-agree.js"; "./pages-subpackage/ucenter/settings/settings.js"; "./pages-subpackage/ucenter/read-news-log/read-news-log.js"; + "./pages-subpackage/ai_features/recording_duration/recording_duration.js"; + "./pages-subpackage/ai_features/customer_count/customer_count.js"; + "./pages-subpackage/ai_features/quality_coverage/quality_coverage.js"; + "./pages-subpackage/ai_features/speech_rating/speech_rating.js"; + "./pages-subpackage/ai_features/intent_level/intent_level.js"; + "./pages-subpackage/ai_features/deal_attribution/deal_attribution.js"; + "./pages-subpackage/ai_features/opening_rate/opening_rate.js"; + "./pages-subpackage/ai_features/over_commitment/over_commitment.js"; + "./pages-subpackage/ai_features/red_line_touch/red_line_touch.js"; } const _sfc_main = { globalData: { diff --git a/unpackage/dist/dev/mp-weixin/app.json b/unpackage/dist/dev/mp-weixin/app.json index 89f201c..0192d38 100644 --- a/unpackage/dist/dev/mp-weixin/app.json +++ b/unpackage/dist/dev/mp-weixin/app.json @@ -4,7 +4,8 @@ "pages/ucenter/ucenter", "pages/team/team", "pages/furniture_reception/common_begin_reception", - "pages/furniture_customer/furniture_customer" + "pages/furniture_customer/furniture_customer", + "pages/ai_analysis/ai_analysis" ], "subPackages": [ { @@ -48,7 +49,16 @@ "customer/customer", "uni-agree/uni-agree", "ucenter/settings/settings", - "ucenter/read-news-log/read-news-log" + "ucenter/read-news-log/read-news-log", + "ai_features/recording_duration/recording_duration", + "ai_features/customer_count/customer_count", + "ai_features/quality_coverage/quality_coverage", + "ai_features/speech_rating/speech_rating", + "ai_features/intent_level/intent_level", + "ai_features/deal_attribution/deal_attribution", + "ai_features/opening_rate/opening_rate", + "ai_features/over_commitment/over_commitment", + "ai_features/red_line_touch/red_line_touch" ] } ], @@ -80,6 +90,12 @@ "selectedIconPath": "static/tabbar/customer_active.png", "text": "客户" }, + { + "pagePath": "pages/ai_analysis/ai_analysis", + "iconPath": "static/tabbar/ai_analysis.png", + "selectedIconPath": "static/tabbar/ai_analysis_active.png", + "text": "AI分析" + }, { "pagePath": "pages/ucenter/ucenter", "iconPath": "static/tabbar/me.png", diff --git a/unpackage/dist/dev/mp-weixin/common/store.js b/unpackage/dist/dev/mp-weixin/common/store.js index c673eb4..26327cb 100644 --- a/unpackage/dist/dev/mp-weixin/common/store.js +++ b/unpackage/dist/dev/mp-weixin/common/store.js @@ -31,6 +31,12 @@ const pages = [ style: { navigationStyle: "custom" } + }, + { + path: "pages/ai_analysis/ai_analysis", + style: { + navigationStyle: "custom" + } } ]; const subPackages = [ @@ -238,6 +244,60 @@ const subPackages = [ navigationBarTitleText: "阅读记录", enablePullDownRefresh: true } + }, + { + path: "ai_features/recording_duration/recording_duration", + style: { + navigationStyle: "custom" + } + }, + { + path: "ai_features/customer_count/customer_count", + style: { + navigationStyle: "custom" + } + }, + { + path: "ai_features/quality_coverage/quality_coverage", + style: { + navigationStyle: "custom" + } + }, + { + path: "ai_features/speech_rating/speech_rating", + style: { + navigationStyle: "custom" + } + }, + { + path: "ai_features/intent_level/intent_level", + style: { + navigationStyle: "custom" + } + }, + { + path: "ai_features/deal_attribution/deal_attribution", + style: { + navigationStyle: "custom" + } + }, + { + path: "ai_features/opening_rate/opening_rate", + style: { + navigationStyle: "custom" + } + }, + { + path: "ai_features/over_commitment/over_commitment", + style: { + navigationStyle: "custom" + } + }, + { + path: "ai_features/red_line_touch/red_line_touch", + style: { + navigationStyle: "custom" + } } ] } @@ -287,6 +347,12 @@ const tabBar = { selectedIconPath: "static/tabbar/customer_active.png", text: "客户" }, + { + pagePath: "pages/ai_analysis/ai_analysis", + iconPath: "static/tabbar/ai_analysis.png", + selectedIconPath: "static/tabbar/ai_analysis_active.png", + text: "AI分析" + }, { pagePath: "pages/ucenter/ucenter", iconPath: "static/tabbar/me.png", diff --git a/unpackage/dist/dev/mp-weixin/custom-tab-bar/index.vue b/unpackage/dist/dev/mp-weixin/custom-tab-bar/index.vue index 39187dc..7d8ea51 100644 --- a/unpackage/dist/dev/mp-weixin/custom-tab-bar/index.vue +++ b/unpackage/dist/dev/mp-weixin/custom-tab-bar/index.vue @@ -77,6 +77,13 @@ export default { iconPath: '/static/tabbar/me.png', selectedIconPath: '/static/tabbar/me_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: 'meeting_summary', text: '总结和统计', @@ -105,6 +112,13 @@ export default { iconPath: '/static/tabbar/customer.png', selectedIconPath: '/static/tabbar/customer_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: 'ucenter', text: '我的', @@ -120,7 +134,7 @@ export default { console.log('VISIBLE TABS CALC - THIS MUST SHOW IN H5'); // 简化逻辑:直接返回家具相关的tabs,跳过权限检查 - const furnitureKeys = ['furniture_reception', 'furniture_customer', 'ucenter']; + const furnitureKeys = ['furniture_reception', 'furniture_customer', 'ai_analysis', 'ucenter']; const result = furnitureKeys.map(key => { return this.allTabs.find(tab => tab.key === key); }).filter(Boolean); @@ -275,15 +289,15 @@ export default { console.log('GET ALLOWED KEYS - 简化版本,总是返回家具相关tabs'); // 简化逻辑:总是返回家具相关的tabs - const furnitureTabs = ['furniture_reception', 'furniture_customer', 'ucenter']; + const furnitureTabs = ['furniture_reception', 'furniture_customer', 'ai_analysis', 'ucenter']; console.log('[TabBar][allowed] 简化逻辑 ->', furnitureTabs); return furnitureTabs; }, // #ifdef H5 toggleNativeTabs() { // H5 平台自定义 tabbar 不生效,直接根据角色显隐原生 tabbar 项 - // 当前位置顺序(根据 pages.json 中的 tabBar.list 顺序):接待、客户、团队、总结和统计、家具接待、开始接待、家具客户、我的 - const ORDER = ['furniture_reception', 'furniture_customer', 'ucenter', 'reception', 'customer', 'team', 'meeting_summary', 'common_begin_reception']; + // 当前位置顺序(根据 pages.json 中的 tabBar.list 顺序):接待、客户、AI分析、我的、团队、总结和统计、家具接待、开始接待、家具客户 + const ORDER = ['furniture_reception', 'furniture_customer', 'ai_analysis', 'ucenter', 'reception', 'customer', 'team', 'meeting_summary', 'common_begin_reception']; const allowed = this.getAllowedKeys(); // 限制重试次数,防止渲染时机未就绪 this._h5TabRetries = (this._h5TabRetries || 0) + 1; @@ -314,6 +328,7 @@ export default { const tabBarList = [ 'pages/furniture_reception/furniture_reception', 'pages/furniture_customer/furniture_customer', + 'pages/ai_analysis/ai_analysis', 'pages/ucenter/ucenter' ]; const normalizedPath = pagePath.startsWith('/') ? pagePath.substring(1) : pagePath; @@ -354,6 +369,7 @@ export default { el.textContent && ( el.textContent.includes('接待') || el.textContent.includes('客户') || + el.textContent.includes('AI分析') || el.textContent.includes('我的') ) ); @@ -390,9 +406,9 @@ export default { return; } - // 按文本内容排序:接待、客户、我的 + // 按文本内容排序:接待、客户、AI分析、我的 const sortedElements = tabElements.sort((a, b) => { - const order = ['接待', '客户', '我的']; + const order = ['接待', '客户', 'AI分析', '我的']; const aIndex = order.findIndex(text => a.textContent.includes(text)); const bIndex = order.findIndex(text => b.textContent.includes(text)); return aIndex - bIndex; @@ -402,7 +418,7 @@ export default { // 处理每个元素 sortedElements.forEach((element, index) => { - const keyMap = ['furniture_reception', 'furniture_customer', 'ucenter']; + const keyMap = ['furniture_reception', 'furniture_customer', 'ai_analysis', 'ucenter']; const key = keyMap[index]; const shouldShow = allowed.includes(key); diff --git a/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/customer_count/customer_count.js b/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/customer_count/customer_count.js new file mode 100644 index 0000000..f7544c3 --- /dev/null +++ b/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/customer_count/customer_count.js @@ -0,0 +1,40 @@ +"use strict"; +const common_vendor = require("../../../common/vendor.js"); +const _sfc_main = { + data() { + return { + totalCustomers: "1,258", + todayCustomers: "23", + dataList: [ + { date: "2024-02-07", description: "今日接待客户", count: "23" }, + { date: "2024-02-06", description: "昨日接待客户", count: "31" }, + { date: "2024-02-05", description: "前日接待客户", count: "28" }, + { date: "2024-02-04", description: "工作日接待客户", count: "35" }, + { date: "2024-02-03", description: "周末接待客户", count: "18" } + ] + }; + }, + methods: { + goBack() { + common_vendor.index.navigateBack(); + } + } +}; +function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) { + return { + a: common_vendor.o((...args) => $options.goBack && $options.goBack(...args)), + b: common_vendor.t($data.totalCustomers), + c: common_vendor.t($data.todayCustomers), + d: common_vendor.f($data.dataList, (item, index, i0) => { + return { + a: common_vendor.t(item.date), + b: common_vendor.t(item.description), + c: common_vendor.t(item.count), + d: index + }; + }) + }; +} +const MiniProgramPage = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["render", _sfc_render], ["__scopeId", "data-v-e0c5faaf"]]); +wx.createPage(MiniProgramPage); +//# sourceMappingURL=../../../../.sourcemap/mp-weixin/pages-subpackage/ai_features/customer_count/customer_count.js.map diff --git a/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/customer_count/customer_count.json b/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/customer_count/customer_count.json new file mode 100644 index 0000000..ced5b27 --- /dev/null +++ b/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/customer_count/customer_count.json @@ -0,0 +1,4 @@ +{ + "navigationStyle": "custom", + "usingComponents": {} +} \ No newline at end of file diff --git a/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/customer_count/customer_count.wxml b/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/customer_count/customer_count.wxml new file mode 100644 index 0000000..1a3a07f --- /dev/null +++ b/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/customer_count/customer_count.wxml @@ -0,0 +1 @@ +接待客户数统计{{b}}累计接待客户{{c}}今日接待客户接待趋势图📈 图表区域此处将显示客户接待趋势图表接待记录{{item.a}}{{item.b}}{{item.c}} 人 \ No newline at end of file diff --git a/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/customer_count/customer_count.wxss b/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/customer_count/customer_count.wxss new file mode 100644 index 0000000..5f885f7 --- /dev/null +++ b/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/customer_count/customer_count.wxss @@ -0,0 +1,127 @@ + +.feature-page.data-v-e0c5faaf { + min-height: 100vh; + background: #f8f9fa; +} +.page-header.data-v-e0c5faaf { + background: #ffffff; + border-bottom: 1rpx solid #e9ecef; +} +.nav-bar.data-v-e0c5faaf { + display: flex; + align-items: center; + height: 88rpx; + padding: 0 30rpx; +} +.nav-left.data-v-e0c5faaf { + width: 60rpx; + height: 60rpx; + display: flex; + align-items: center; + justify-content: center; + margin-right: 20rpx; +} +.back-icon.data-v-e0c5faaf { + font-size: 36rpx; + color: #333333; +} +.nav-title.data-v-e0c5faaf { + flex: 1; + text-align: center; + font-size: 32rpx; + font-weight: bold; + color: #333333; +} +.content-scroll.data-v-e0c5faaf { + height: calc(100vh - 88rpx); +} +.stats-card.data-v-e0c5faaf { + display: flex; + margin: 20rpx 30rpx; + background: #ffffff; + border-radius: 16rpx; + padding: 40rpx 30rpx; + box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.1); +} +.stat-item.data-v-e0c5faaf { + flex: 1; + text-align: center; +} +.stat-item.data-v-e0c5faaf:not(:last-child) { + border-right: 1rpx solid #e9ecef; +} +.stat-value.data-v-e0c5faaf { + display: block; + font-size: 48rpx; + font-weight: bold; + color: #007aff; + margin-bottom: 10rpx; +} +.stat-label.data-v-e0c5faaf { + display: block; + font-size: 24rpx; + color: #666666; +} +.chart-section.data-v-e0c5faaf, .data-list.data-v-e0c5faaf { + margin: 20rpx 30rpx; + background: #ffffff; + border-radius: 16rpx; + overflow: hidden; + box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.1); +} +.section-title.data-v-e0c5faaf { + display: block; + font-size: 32rpx; + font-weight: bold; + color: #333333; + padding: 30rpx; + border-bottom: 1rpx solid #e9ecef; +} +.chart-placeholder.data-v-e0c5faaf { + padding: 80rpx 30rpx; + text-align: center; +} +.placeholder-text.data-v-e0c5faaf { + display: block; + font-size: 48rpx; + margin-bottom: 20rpx; +} +.placeholder-desc.data-v-e0c5faaf { + display: block; + font-size: 28rpx; + color: #666666; +} +.list-item.data-v-e0c5faaf { + display: flex; + align-items: center; + justify-content: space-between; + padding: 30rpx; + border-bottom: 1rpx solid #f0f0f0; +} +.list-item.data-v-e0c5faaf:last-child { + border-bottom: none; +} +.item-left.data-v-e0c5faaf { + flex: 1; +} +.item-date.data-v-e0c5faaf { + display: block; + font-size: 28rpx; + font-weight: bold; + color: #333333; + margin-bottom: 8rpx; +} +.item-desc.data-v-e0c5faaf { + display: block; + font-size: 24rpx; + color: #666666; +} +.item-right.data-v-e0c5faaf { + text-align: right; +} +.item-count.data-v-e0c5faaf { + display: block; + font-size: 28rpx; + font-weight: bold; + color: #007aff; +} diff --git a/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/deal_attribution/deal_attribution.js b/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/deal_attribution/deal_attribution.js new file mode 100644 index 0000000..308e3e2 --- /dev/null +++ b/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/deal_attribution/deal_attribution.js @@ -0,0 +1,40 @@ +"use strict"; +const common_vendor = require("../../../common/vendor.js"); +const _sfc_main = { + data() { + return { + conversionRate: "15.8", + totalDeals: "201", + dataList: [ + { factor: "产品优势", description: "突出产品核心优势", percentage: "35.2" }, + { factor: "价格优惠", description: "提供合适的价格优惠", percentage: "28.4" }, + { factor: "服务质量", description: "优质的售后服务", percentage: "18.7" }, + { factor: "客户关系", description: "良好的客户关系维护", percentage: "12.3" }, + { factor: "竞争优势", description: "相对于竞品的优势", percentage: "5.4" } + ] + }; + }, + methods: { + goBack() { + common_vendor.index.navigateBack(); + } + } +}; +function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) { + return { + a: common_vendor.o((...args) => $options.goBack && $options.goBack(...args)), + b: common_vendor.t($data.conversionRate), + c: common_vendor.t($data.totalDeals), + d: common_vendor.f($data.dataList, (item, index, i0) => { + return { + a: common_vendor.t(item.factor), + b: common_vendor.t(item.description), + c: common_vendor.t(item.percentage), + d: index + }; + }) + }; +} +const MiniProgramPage = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["render", _sfc_render], ["__scopeId", "data-v-92834624"]]); +wx.createPage(MiniProgramPage); +//# sourceMappingURL=../../../../.sourcemap/mp-weixin/pages-subpackage/ai_features/deal_attribution/deal_attribution.js.map diff --git a/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/deal_attribution/deal_attribution.json b/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/deal_attribution/deal_attribution.json new file mode 100644 index 0000000..ced5b27 --- /dev/null +++ b/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/deal_attribution/deal_attribution.json @@ -0,0 +1,4 @@ +{ + "navigationStyle": "custom", + "usingComponents": {} +} \ No newline at end of file diff --git a/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/deal_attribution/deal_attribution.wxml b/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/deal_attribution/deal_attribution.wxml new file mode 100644 index 0000000..8e88c37 --- /dev/null +++ b/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/deal_attribution/deal_attribution.wxml @@ -0,0 +1 @@ +成交归因分析{{b}}%总体转化率{{c}}成交总数成交因素分析图📊 图表区域此处将显示成交归因分析图表关键成交因素{{item.a}}{{item.b}}{{item.c}}% \ No newline at end of file diff --git a/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/deal_attribution/deal_attribution.wxss b/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/deal_attribution/deal_attribution.wxss new file mode 100644 index 0000000..526e535 --- /dev/null +++ b/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/deal_attribution/deal_attribution.wxss @@ -0,0 +1,127 @@ + +.feature-page.data-v-92834624 { + min-height: 100vh; + background: #f8f9fa; +} +.page-header.data-v-92834624 { + background: #ffffff; + border-bottom: 1rpx solid #e9ecef; +} +.nav-bar.data-v-92834624 { + display: flex; + align-items: center; + height: 88rpx; + padding: 0 30rpx; +} +.nav-left.data-v-92834624 { + width: 60rpx; + height: 60rpx; + display: flex; + align-items: center; + justify-content: center; + margin-right: 20rpx; +} +.back-icon.data-v-92834624 { + font-size: 36rpx; + color: #333333; +} +.nav-title.data-v-92834624 { + flex: 1; + text-align: center; + font-size: 32rpx; + font-weight: bold; + color: #333333; +} +.content-scroll.data-v-92834624 { + height: calc(100vh - 88rpx); +} +.stats-card.data-v-92834624 { + display: flex; + margin: 20rpx 30rpx; + background: #ffffff; + border-radius: 16rpx; + padding: 40rpx 30rpx; + box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.1); +} +.stat-item.data-v-92834624 { + flex: 1; + text-align: center; +} +.stat-item.data-v-92834624:not(:last-child) { + border-right: 1rpx solid #e9ecef; +} +.stat-value.data-v-92834624 { + display: block; + font-size: 48rpx; + font-weight: bold; + color: #007aff; + margin-bottom: 10rpx; +} +.stat-label.data-v-92834624 { + display: block; + font-size: 24rpx; + color: #666666; +} +.chart-section.data-v-92834624, .data-list.data-v-92834624 { + margin: 20rpx 30rpx; + background: #ffffff; + border-radius: 16rpx; + overflow: hidden; + box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.1); +} +.section-title.data-v-92834624 { + display: block; + font-size: 32rpx; + font-weight: bold; + color: #333333; + padding: 30rpx; + border-bottom: 1rpx solid #e9ecef; +} +.chart-placeholder.data-v-92834624 { + padding: 80rpx 30rpx; + text-align: center; +} +.placeholder-text.data-v-92834624 { + display: block; + font-size: 48rpx; + margin-bottom: 20rpx; +} +.placeholder-desc.data-v-92834624 { + display: block; + font-size: 28rpx; + color: #666666; +} +.list-item.data-v-92834624 { + display: flex; + align-items: center; + justify-content: space-between; + padding: 30rpx; + border-bottom: 1rpx solid #f0f0f0; +} +.list-item.data-v-92834624:last-child { + border-bottom: none; +} +.item-left.data-v-92834624 { + flex: 1; +} +.item-date.data-v-92834624 { + display: block; + font-size: 28rpx; + font-weight: bold; + color: #333333; + margin-bottom: 8rpx; +} +.item-desc.data-v-92834624 { + display: block; + font-size: 24rpx; + color: #666666; +} +.item-right.data-v-92834624 { + text-align: right; +} +.item-percentage.data-v-92834624 { + display: block; + font-size: 28rpx; + font-weight: bold; + color: #007aff; +} diff --git a/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/intent_level/intent_level.js b/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/intent_level/intent_level.js new file mode 100644 index 0000000..befcb2c --- /dev/null +++ b/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/intent_level/intent_level.js @@ -0,0 +1,40 @@ +"use strict"; +const common_vendor = require("../../../common/vendor.js"); +const _sfc_main = { + data() { + return { + highIntent: "23.5", + totalAnalyzed: "856", + dataList: [ + { level: "高意向", description: "明确表示购买意愿", count: "201" }, + { level: "中高意向", description: "有较强购买兴趣", count: "156" }, + { level: "中意向", description: "有一定购买兴趣", count: "234" }, + { level: "低意向", description: "购买意愿较低", count: "187" }, + { level: "无意向", description: "暂无购买意愿", count: "78" } + ] + }; + }, + methods: { + goBack() { + common_vendor.index.navigateBack(); + } + } +}; +function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) { + return { + a: common_vendor.o((...args) => $options.goBack && $options.goBack(...args)), + b: common_vendor.t($data.highIntent), + c: common_vendor.t($data.totalAnalyzed), + d: common_vendor.f($data.dataList, (item, index, i0) => { + return { + a: common_vendor.t(item.level), + b: common_vendor.t(item.description), + c: common_vendor.t(item.count), + d: index + }; + }) + }; +} +const MiniProgramPage = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["render", _sfc_render], ["__scopeId", "data-v-cafe1f39"]]); +wx.createPage(MiniProgramPage); +//# sourceMappingURL=../../../../.sourcemap/mp-weixin/pages-subpackage/ai_features/intent_level/intent_level.js.map diff --git a/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/intent_level/intent_level.json b/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/intent_level/intent_level.json new file mode 100644 index 0000000..ced5b27 --- /dev/null +++ b/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/intent_level/intent_level.json @@ -0,0 +1,4 @@ +{ + "navigationStyle": "custom", + "usingComponents": {} +} \ No newline at end of file diff --git a/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/intent_level/intent_level.wxml b/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/intent_level/intent_level.wxml new file mode 100644 index 0000000..03dbfe0 --- /dev/null +++ b/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/intent_level/intent_level.wxml @@ -0,0 +1 @@ +客户意向分级{{b}}%高意向客户{{c}}已分析客户意向分布图📊 图表区域此处将显示客户意向分级分布图表意向等级详情{{item.a}}{{item.b}}{{item.c}} 人 \ No newline at end of file diff --git a/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/intent_level/intent_level.wxss b/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/intent_level/intent_level.wxss new file mode 100644 index 0000000..d07a332 --- /dev/null +++ b/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/intent_level/intent_level.wxss @@ -0,0 +1,127 @@ + +.feature-page.data-v-cafe1f39 { + min-height: 100vh; + background: #f8f9fa; +} +.page-header.data-v-cafe1f39 { + background: #ffffff; + border-bottom: 1rpx solid #e9ecef; +} +.nav-bar.data-v-cafe1f39 { + display: flex; + align-items: center; + height: 88rpx; + padding: 0 30rpx; +} +.nav-left.data-v-cafe1f39 { + width: 60rpx; + height: 60rpx; + display: flex; + align-items: center; + justify-content: center; + margin-right: 20rpx; +} +.back-icon.data-v-cafe1f39 { + font-size: 36rpx; + color: #333333; +} +.nav-title.data-v-cafe1f39 { + flex: 1; + text-align: center; + font-size: 32rpx; + font-weight: bold; + color: #333333; +} +.content-scroll.data-v-cafe1f39 { + height: calc(100vh - 88rpx); +} +.stats-card.data-v-cafe1f39 { + display: flex; + margin: 20rpx 30rpx; + background: #ffffff; + border-radius: 16rpx; + padding: 40rpx 30rpx; + box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.1); +} +.stat-item.data-v-cafe1f39 { + flex: 1; + text-align: center; +} +.stat-item.data-v-cafe1f39:not(:last-child) { + border-right: 1rpx solid #e9ecef; +} +.stat-value.data-v-cafe1f39 { + display: block; + font-size: 48rpx; + font-weight: bold; + color: #007aff; + margin-bottom: 10rpx; +} +.stat-label.data-v-cafe1f39 { + display: block; + font-size: 24rpx; + color: #666666; +} +.chart-section.data-v-cafe1f39, .data-list.data-v-cafe1f39 { + margin: 20rpx 30rpx; + background: #ffffff; + border-radius: 16rpx; + overflow: hidden; + box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.1); +} +.section-title.data-v-cafe1f39 { + display: block; + font-size: 32rpx; + font-weight: bold; + color: #333333; + padding: 30rpx; + border-bottom: 1rpx solid #e9ecef; +} +.chart-placeholder.data-v-cafe1f39 { + padding: 80rpx 30rpx; + text-align: center; +} +.placeholder-text.data-v-cafe1f39 { + display: block; + font-size: 48rpx; + margin-bottom: 20rpx; +} +.placeholder-desc.data-v-cafe1f39 { + display: block; + font-size: 28rpx; + color: #666666; +} +.list-item.data-v-cafe1f39 { + display: flex; + align-items: center; + justify-content: space-between; + padding: 30rpx; + border-bottom: 1rpx solid #f0f0f0; +} +.list-item.data-v-cafe1f39:last-child { + border-bottom: none; +} +.item-left.data-v-cafe1f39 { + flex: 1; +} +.item-date.data-v-cafe1f39 { + display: block; + font-size: 28rpx; + font-weight: bold; + color: #333333; + margin-bottom: 8rpx; +} +.item-desc.data-v-cafe1f39 { + display: block; + font-size: 24rpx; + color: #666666; +} +.item-right.data-v-cafe1f39 { + text-align: right; +} +.item-count.data-v-cafe1f39 { + display: block; + font-size: 28rpx; + font-weight: bold; + color: #007aff; +} diff --git a/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/opening_rate/opening_rate.js b/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/opening_rate/opening_rate.js new file mode 100644 index 0000000..5a1f393 --- /dev/null +++ b/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/opening_rate/opening_rate.js @@ -0,0 +1,40 @@ +"use strict"; +const common_vendor = require("../../../common/vendor.js"); +const _sfc_main = { + data() { + return { + openingRate: "68.5", + totalConversations: "2,145", + dataList: [ + { time: "9:00-11:00", description: "上午高峰时段", rate: "75.2" }, + { time: "11:00-13:00", description: "午间时段", rate: "62.8" }, + { time: "14:00-16:00", description: "下午时段", rate: "71.3" }, + { time: "16:00-18:00", description: "晚高峰时段", rate: "69.7" }, + { time: "整体平均", description: "全天平均开口率", rate: "68.5" } + ] + }; + }, + methods: { + goBack() { + common_vendor.index.navigateBack(); + } + } +}; +function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) { + return { + a: common_vendor.o((...args) => $options.goBack && $options.goBack(...args)), + b: common_vendor.t($data.openingRate), + c: common_vendor.t($data.totalConversations), + d: common_vendor.f($data.dataList, (item, index, i0) => { + return { + a: common_vendor.t(item.time), + b: common_vendor.t(item.description), + c: common_vendor.t(item.rate), + d: index + }; + }) + }; +} +const MiniProgramPage = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["render", _sfc_render], ["__scopeId", "data-v-24524649"]]); +wx.createPage(MiniProgramPage); +//# sourceMappingURL=../../../../.sourcemap/mp-weixin/pages-subpackage/ai_features/opening_rate/opening_rate.js.map diff --git a/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/opening_rate/opening_rate.json b/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/opening_rate/opening_rate.json new file mode 100644 index 0000000..ced5b27 --- /dev/null +++ b/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/opening_rate/opening_rate.json @@ -0,0 +1,4 @@ +{ + "navigationStyle": "custom", + "usingComponents": {} +} \ No newline at end of file diff --git a/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/opening_rate/opening_rate.wxml b/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/opening_rate/opening_rate.wxml new file mode 100644 index 0000000..b2a175a --- /dev/null +++ b/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/opening_rate/opening_rate.wxml @@ -0,0 +1 @@ +开口率统计{{b}}%平均开口率{{c}}总对话数开口率趋势图📈 图表区域此处将显示客户开口率趋势图表详细数据{{item.a}}{{item.b}}{{item.c}}% \ No newline at end of file diff --git a/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/opening_rate/opening_rate.wxss b/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/opening_rate/opening_rate.wxss new file mode 100644 index 0000000..fe861cc --- /dev/null +++ b/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/opening_rate/opening_rate.wxss @@ -0,0 +1,127 @@ + +.feature-page.data-v-24524649 { + min-height: 100vh; + background: #f8f9fa; +} +.page-header.data-v-24524649 { + background: #ffffff; + border-bottom: 1rpx solid #e9ecef; +} +.nav-bar.data-v-24524649 { + display: flex; + align-items: center; + height: 88rpx; + padding: 0 30rpx; +} +.nav-left.data-v-24524649 { + width: 60rpx; + height: 60rpx; + display: flex; + align-items: center; + justify-content: center; + margin-right: 20rpx; +} +.back-icon.data-v-24524649 { + font-size: 36rpx; + color: #333333; +} +.nav-title.data-v-24524649 { + flex: 1; + text-align: center; + font-size: 32rpx; + font-weight: bold; + color: #333333; +} +.content-scroll.data-v-24524649 { + height: calc(100vh - 88rpx); +} +.stats-card.data-v-24524649 { + display: flex; + margin: 20rpx 30rpx; + background: #ffffff; + border-radius: 16rpx; + padding: 40rpx 30rpx; + box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.1); +} +.stat-item.data-v-24524649 { + flex: 1; + text-align: center; +} +.stat-item.data-v-24524649:not(:last-child) { + border-right: 1rpx solid #e9ecef; +} +.stat-value.data-v-24524649 { + display: block; + font-size: 48rpx; + font-weight: bold; + color: #007aff; + margin-bottom: 10rpx; +} +.stat-label.data-v-24524649 { + display: block; + font-size: 24rpx; + color: #666666; +} +.chart-section.data-v-24524649, .data-list.data-v-24524649 { + margin: 20rpx 30rpx; + background: #ffffff; + border-radius: 16rpx; + overflow: hidden; + box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.1); +} +.section-title.data-v-24524649 { + display: block; + font-size: 32rpx; + font-weight: bold; + color: #333333; + padding: 30rpx; + border-bottom: 1rpx solid #e9ecef; +} +.chart-placeholder.data-v-24524649 { + padding: 80rpx 30rpx; + text-align: center; +} +.placeholder-text.data-v-24524649 { + display: block; + font-size: 48rpx; + margin-bottom: 20rpx; +} +.placeholder-desc.data-v-24524649 { + display: block; + font-size: 28rpx; + color: #666666; +} +.list-item.data-v-24524649 { + display: flex; + align-items: center; + justify-content: space-between; + padding: 30rpx; + border-bottom: 1rpx solid #f0f0f0; +} +.list-item.data-v-24524649:last-child { + border-bottom: none; +} +.item-left.data-v-24524649 { + flex: 1; +} +.item-date.data-v-24524649 { + display: block; + font-size: 28rpx; + font-weight: bold; + color: #333333; + margin-bottom: 8rpx; +} +.item-desc.data-v-24524649 { + display: block; + font-size: 24rpx; + color: #666666; +} +.item-right.data-v-24524649 { + text-align: right; +} +.item-rate.data-v-24524649 { + display: block; + font-size: 28rpx; + font-weight: bold; + color: #007aff; +} diff --git a/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/over_commitment/over_commitment.js b/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/over_commitment/over_commitment.js new file mode 100644 index 0000000..92d51cb --- /dev/null +++ b/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/over_commitment/over_commitment.js @@ -0,0 +1,40 @@ +"use strict"; +const common_vendor = require("../../../common/vendor.js"); +const _sfc_main = { + data() { + return { + overCommitmentRate: "3.2", + totalIncidents: "42", + dataList: [ + { employee: "张三", description: "承诺无法兑现的服务", count: "8" }, + { employee: "李四", description: "超出权限的优惠承诺", count: "6" }, + { employee: "王五", description: "虚假的产品性能承诺", count: "5" }, + { employee: "赵六", description: "不切实际的交货时间承诺", count: "4" }, + { employee: "孙七", description: "其他违规承诺", count: "19" } + ] + }; + }, + methods: { + goBack() { + common_vendor.index.navigateBack(); + } + } +}; +function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) { + return { + a: common_vendor.o((...args) => $options.goBack && $options.goBack(...args)), + b: common_vendor.t($data.overCommitmentRate), + c: common_vendor.t($data.totalIncidents), + d: common_vendor.f($data.dataList, (item, index, i0) => { + return { + a: common_vendor.t(item.employee), + b: common_vendor.t(item.description), + c: common_vendor.t(item.count), + d: index + }; + }) + }; +} +const MiniProgramPage = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["render", _sfc_render], ["__scopeId", "data-v-d7fed9be"]]); +wx.createPage(MiniProgramPage); +//# sourceMappingURL=../../../../.sourcemap/mp-weixin/pages-subpackage/ai_features/over_commitment/over_commitment.js.map diff --git a/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/over_commitment/over_commitment.json b/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/over_commitment/over_commitment.json new file mode 100644 index 0000000..ced5b27 --- /dev/null +++ b/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/over_commitment/over_commitment.json @@ -0,0 +1,4 @@ +{ + "navigationStyle": "custom", + "usingComponents": {} +} \ No newline at end of file diff --git a/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/over_commitment/over_commitment.wxml b/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/over_commitment/over_commitment.wxml new file mode 100644 index 0000000..b292805 --- /dev/null +++ b/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/over_commitment/over_commitment.wxml @@ -0,0 +1 @@ +过度承诺统计{{b}}%过度承诺率{{c}}违规事件数过度承诺趋势图⚠️ 图表区域此处将显示过度承诺统计趋势图表违规记录{{item.a}}{{item.b}}{{item.c}} 次 \ No newline at end of file diff --git a/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/over_commitment/over_commitment.wxss b/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/over_commitment/over_commitment.wxss new file mode 100644 index 0000000..103d952 --- /dev/null +++ b/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/over_commitment/over_commitment.wxss @@ -0,0 +1,127 @@ + +.feature-page.data-v-d7fed9be { + min-height: 100vh; + background: #f8f9fa; +} +.page-header.data-v-d7fed9be { + background: #ffffff; + border-bottom: 1rpx solid #e9ecef; +} +.nav-bar.data-v-d7fed9be { + display: flex; + align-items: center; + height: 88rpx; + padding: 0 30rpx; +} +.nav-left.data-v-d7fed9be { + width: 60rpx; + height: 60rpx; + display: flex; + align-items: center; + justify-content: center; + margin-right: 20rpx; +} +.back-icon.data-v-d7fed9be { + font-size: 36rpx; + color: #333333; +} +.nav-title.data-v-d7fed9be { + flex: 1; + text-align: center; + font-size: 32rpx; + font-weight: bold; + color: #333333; +} +.content-scroll.data-v-d7fed9be { + height: calc(100vh - 88rpx); +} +.stats-card.data-v-d7fed9be { + display: flex; + margin: 20rpx 30rpx; + background: #ffffff; + border-radius: 16rpx; + padding: 40rpx 30rpx; + box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.1); +} +.stat-item.data-v-d7fed9be { + flex: 1; + text-align: center; +} +.stat-item.data-v-d7fed9be:not(:last-child) { + border-right: 1rpx solid #e9ecef; +} +.stat-value.data-v-d7fed9be { + display: block; + font-size: 48rpx; + font-weight: bold; + color: #ff6b6b; + margin-bottom: 10rpx; +} +.stat-label.data-v-d7fed9be { + display: block; + font-size: 24rpx; + color: #666666; +} +.chart-section.data-v-d7fed9be, .data-list.data-v-d7fed9be { + margin: 20rpx 30rpx; + background: #ffffff; + border-radius: 16rpx; + overflow: hidden; + box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.1); +} +.section-title.data-v-d7fed9be { + display: block; + font-size: 32rpx; + font-weight: bold; + color: #333333; + padding: 30rpx; + border-bottom: 1rpx solid #e9ecef; +} +.chart-placeholder.data-v-d7fed9be { + padding: 80rpx 30rpx; + text-align: center; +} +.placeholder-text.data-v-d7fed9be { + display: block; + font-size: 48rpx; + margin-bottom: 20rpx; +} +.placeholder-desc.data-v-d7fed9be { + display: block; + font-size: 28rpx; + color: #666666; +} +.list-item.data-v-d7fed9be { + display: flex; + align-items: center; + justify-content: space-between; + padding: 30rpx; + border-bottom: 1rpx solid #f0f0f0; +} +.list-item.data-v-d7fed9be:last-child { + border-bottom: none; +} +.item-left.data-v-d7fed9be { + flex: 1; +} +.item-date.data-v-d7fed9be { + display: block; + font-size: 28rpx; + font-weight: bold; + color: #333333; + margin-bottom: 8rpx; +} +.item-desc.data-v-d7fed9be { + display: block; + font-size: 24rpx; + color: #666666; +} +.item-right.data-v-d7fed9be { + text-align: right; +} +.item-count.data-v-d7fed9be { + display: block; + font-size: 28rpx; + font-weight: bold; + color: #ff6b6b; +} diff --git a/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/quality_coverage/quality_coverage.js b/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/quality_coverage/quality_coverage.js new file mode 100644 index 0000000..c396a7b --- /dev/null +++ b/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/quality_coverage/quality_coverage.js @@ -0,0 +1,40 @@ +"use strict"; +const common_vendor = require("../../../common/vendor.js"); +const _sfc_main = { + data() { + return { + coverageRate: "87.5", + todayCoverage: "92.3", + dataList: [ + { date: "2024-02-07", description: "今日质检覆盖率", rate: "92.3" }, + { date: "2024-02-06", description: "昨日质检覆盖率", rate: "89.1" }, + { date: "2024-02-05", description: "前日质检覆盖率", rate: "85.7" }, + { date: "2024-02-04", description: "工作日平均覆盖率", rate: "88.4" }, + { date: "2024-02-03", description: "周末覆盖率", rate: "91.2" } + ] + }; + }, + methods: { + goBack() { + common_vendor.index.navigateBack(); + } + } +}; +function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) { + return { + a: common_vendor.o((...args) => $options.goBack && $options.goBack(...args)), + b: common_vendor.t($data.coverageRate), + c: common_vendor.t($data.todayCoverage), + d: common_vendor.f($data.dataList, (item, index, i0) => { + return { + a: common_vendor.t(item.date), + b: common_vendor.t(item.description), + c: common_vendor.t(item.rate), + d: index + }; + }) + }; +} +const MiniProgramPage = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["render", _sfc_render], ["__scopeId", "data-v-ef31f941"]]); +wx.createPage(MiniProgramPage); +//# sourceMappingURL=../../../../.sourcemap/mp-weixin/pages-subpackage/ai_features/quality_coverage/quality_coverage.js.map diff --git a/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/quality_coverage/quality_coverage.json b/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/quality_coverage/quality_coverage.json new file mode 100644 index 0000000..ced5b27 --- /dev/null +++ b/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/quality_coverage/quality_coverage.json @@ -0,0 +1,4 @@ +{ + "navigationStyle": "custom", + "usingComponents": {} +} \ No newline at end of file diff --git a/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/quality_coverage/quality_coverage.wxml b/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/quality_coverage/quality_coverage.wxml new file mode 100644 index 0000000..8d5a464 --- /dev/null +++ b/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/quality_coverage/quality_coverage.wxml @@ -0,0 +1 @@ +质检覆盖率统计{{b}}%总体覆盖率{{c}}%今日覆盖率覆盖率趋势图📊 图表区域此处将显示质检覆盖率趋势图表详细数据{{item.a}}{{item.b}}{{item.c}}% \ No newline at end of file diff --git a/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/quality_coverage/quality_coverage.wxss b/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/quality_coverage/quality_coverage.wxss new file mode 100644 index 0000000..a847ddf --- /dev/null +++ b/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/quality_coverage/quality_coverage.wxss @@ -0,0 +1,127 @@ + +.feature-page.data-v-ef31f941 { + min-height: 100vh; + background: #f8f9fa; +} +.page-header.data-v-ef31f941 { + background: #ffffff; + border-bottom: 1rpx solid #e9ecef; +} +.nav-bar.data-v-ef31f941 { + display: flex; + align-items: center; + height: 88rpx; + padding: 0 30rpx; +} +.nav-left.data-v-ef31f941 { + width: 60rpx; + height: 60rpx; + display: flex; + align-items: center; + justify-content: center; + margin-right: 20rpx; +} +.back-icon.data-v-ef31f941 { + font-size: 36rpx; + color: #333333; +} +.nav-title.data-v-ef31f941 { + flex: 1; + text-align: center; + font-size: 32rpx; + font-weight: bold; + color: #333333; +} +.content-scroll.data-v-ef31f941 { + height: calc(100vh - 88rpx); +} +.stats-card.data-v-ef31f941 { + display: flex; + margin: 20rpx 30rpx; + background: #ffffff; + border-radius: 16rpx; + padding: 40rpx 30rpx; + box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.1); +} +.stat-item.data-v-ef31f941 { + flex: 1; + text-align: center; +} +.stat-item.data-v-ef31f941:not(:last-child) { + border-right: 1rpx solid #e9ecef; +} +.stat-value.data-v-ef31f941 { + display: block; + font-size: 48rpx; + font-weight: bold; + color: #007aff; + margin-bottom: 10rpx; +} +.stat-label.data-v-ef31f941 { + display: block; + font-size: 24rpx; + color: #666666; +} +.chart-section.data-v-ef31f941, .data-list.data-v-ef31f941 { + margin: 20rpx 30rpx; + background: #ffffff; + border-radius: 16rpx; + overflow: hidden; + box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.1); +} +.section-title.data-v-ef31f941 { + display: block; + font-size: 32rpx; + font-weight: bold; + color: #333333; + padding: 30rpx; + border-bottom: 1rpx solid #e9ecef; +} +.chart-placeholder.data-v-ef31f941 { + padding: 80rpx 30rpx; + text-align: center; +} +.placeholder-text.data-v-ef31f941 { + display: block; + font-size: 48rpx; + margin-bottom: 20rpx; +} +.placeholder-desc.data-v-ef31f941 { + display: block; + font-size: 28rpx; + color: #666666; +} +.list-item.data-v-ef31f941 { + display: flex; + align-items: center; + justify-content: space-between; + padding: 30rpx; + border-bottom: 1rpx solid #f0f0f0; +} +.list-item.data-v-ef31f941:last-child { + border-bottom: none; +} +.item-left.data-v-ef31f941 { + flex: 1; +} +.item-date.data-v-ef31f941 { + display: block; + font-size: 28rpx; + font-weight: bold; + color: #333333; + margin-bottom: 8rpx; +} +.item-desc.data-v-ef31f941 { + display: block; + font-size: 24rpx; + color: #666666; +} +.item-right.data-v-ef31f941 { + text-align: right; +} +.item-rate.data-v-ef31f941 { + display: block; + font-size: 28rpx; + font-weight: bold; + color: #007aff; +} diff --git a/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/recording_duration/recording_duration.js b/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/recording_duration/recording_duration.js new file mode 100644 index 0000000..7be11f4 --- /dev/null +++ b/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/recording_duration/recording_duration.js @@ -0,0 +1,40 @@ +"use strict"; +const common_vendor = require("../../../common/vendor.js"); +const _sfc_main = { + data() { + return { + totalDuration: "125.5 小时", + todayDuration: "8.2 小时", + dataList: [ + { date: "2024-02-07", description: "客户咨询录音", duration: "2.5 小时" }, + { date: "2024-02-06", description: "销售洽谈录音", duration: "3.2 小时" }, + { date: "2024-02-05", description: "培训录音", duration: "1.8 小时" }, + { date: "2024-02-04", description: "会议录音", duration: "4.1 小时" }, + { date: "2024-02-03", description: "客户反馈录音", duration: "2.9 小时" } + ] + }; + }, + methods: { + goBack() { + common_vendor.index.navigateBack(); + } + } +}; +function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) { + return { + a: common_vendor.o((...args) => $options.goBack && $options.goBack(...args)), + b: common_vendor.t($data.totalDuration), + c: common_vendor.t($data.todayDuration), + d: common_vendor.f($data.dataList, (item, index, i0) => { + return { + a: common_vendor.t(item.date), + b: common_vendor.t(item.description), + c: common_vendor.t(item.duration), + d: index + }; + }) + }; +} +const MiniProgramPage = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["render", _sfc_render], ["__scopeId", "data-v-582d7c51"]]); +wx.createPage(MiniProgramPage); +//# sourceMappingURL=../../../../.sourcemap/mp-weixin/pages-subpackage/ai_features/recording_duration/recording_duration.js.map diff --git a/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/recording_duration/recording_duration.json b/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/recording_duration/recording_duration.json new file mode 100644 index 0000000..ced5b27 --- /dev/null +++ b/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/recording_duration/recording_duration.json @@ -0,0 +1,4 @@ +{ + "navigationStyle": "custom", + "usingComponents": {} +} \ No newline at end of file diff --git a/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/recording_duration/recording_duration.wxml b/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/recording_duration/recording_duration.wxml new file mode 100644 index 0000000..4bc3750 --- /dev/null +++ b/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/recording_duration/recording_duration.wxml @@ -0,0 +1 @@ +录音时长统计{{b}}总录音时长{{c}}今日录音时长时长趋势图📊 图表区域此处将显示录音时长趋势图表详细数据{{item.a}}{{item.b}}{{item.c}} \ No newline at end of file diff --git a/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/recording_duration/recording_duration.wxss b/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/recording_duration/recording_duration.wxss new file mode 100644 index 0000000..1ca83f4 --- /dev/null +++ b/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/recording_duration/recording_duration.wxss @@ -0,0 +1,127 @@ + +.feature-page.data-v-582d7c51 { + min-height: 100vh; + background: #f8f9fa; +} +.page-header.data-v-582d7c51 { + background: #ffffff; + border-bottom: 1rpx solid #e9ecef; +} +.nav-bar.data-v-582d7c51 { + display: flex; + align-items: center; + height: 88rpx; + padding: 0 30rpx; +} +.nav-left.data-v-582d7c51 { + width: 60rpx; + height: 60rpx; + display: flex; + align-items: center; + justify-content: center; + margin-right: 20rpx; +} +.back-icon.data-v-582d7c51 { + font-size: 36rpx; + color: #333333; +} +.nav-title.data-v-582d7c51 { + flex: 1; + text-align: center; + font-size: 32rpx; + font-weight: bold; + color: #333333; +} +.content-scroll.data-v-582d7c51 { + height: calc(100vh - 88rpx); +} +.stats-card.data-v-582d7c51 { + display: flex; + margin: 20rpx 30rpx; + background: #ffffff; + border-radius: 16rpx; + padding: 40rpx 30rpx; + box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.1); +} +.stat-item.data-v-582d7c51 { + flex: 1; + text-align: center; +} +.stat-item.data-v-582d7c51:not(:last-child) { + border-right: 1rpx solid #e9ecef; +} +.stat-value.data-v-582d7c51 { + display: block; + font-size: 48rpx; + font-weight: bold; + color: #007aff; + margin-bottom: 10rpx; +} +.stat-label.data-v-582d7c51 { + display: block; + font-size: 24rpx; + color: #666666; +} +.chart-section.data-v-582d7c51, .data-list.data-v-582d7c51 { + margin: 20rpx 30rpx; + background: #ffffff; + border-radius: 16rpx; + overflow: hidden; + box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.1); +} +.section-title.data-v-582d7c51 { + display: block; + font-size: 32rpx; + font-weight: bold; + color: #333333; + padding: 30rpx; + border-bottom: 1rpx solid #e9ecef; +} +.chart-placeholder.data-v-582d7c51 { + padding: 80rpx 30rpx; + text-align: center; +} +.placeholder-text.data-v-582d7c51 { + display: block; + font-size: 48rpx; + margin-bottom: 20rpx; +} +.placeholder-desc.data-v-582d7c51 { + display: block; + font-size: 28rpx; + color: #666666; +} +.list-item.data-v-582d7c51 { + display: flex; + align-items: center; + justify-content: space-between; + padding: 30rpx; + border-bottom: 1rpx solid #f0f0f0; +} +.list-item.data-v-582d7c51:last-child { + border-bottom: none; +} +.item-left.data-v-582d7c51 { + flex: 1; +} +.item-date.data-v-582d7c51 { + display: block; + font-size: 28rpx; + font-weight: bold; + color: #333333; + margin-bottom: 8rpx; +} +.item-desc.data-v-582d7c51 { + display: block; + font-size: 24rpx; + color: #666666; +} +.item-right.data-v-582d7c51 { + text-align: right; +} +.item-duration.data-v-582d7c51 { + display: block; + font-size: 28rpx; + font-weight: bold; + color: #007aff; +} diff --git a/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/red_line_touch/red_line_touch.js b/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/red_line_touch/red_line_touch.js new file mode 100644 index 0000000..d144708 --- /dev/null +++ b/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/red_line_touch/red_line_touch.js @@ -0,0 +1,38 @@ +"use strict"; +const common_vendor = require("../../../common/vendor.js"); +const _sfc_main = { + data() { + return { + redLineIncidents: "18", + criticalRate: "72.2", + dataList: [ + { violation: "严重违规", description: "违反法律法规或公司核心政策", count: "13" }, + { violation: "中等违规", description: "违反公司管理制度", count: "4" }, + { violation: "轻微违规", description: "违反工作流程规范", count: "1" } + ] + }; + }, + methods: { + goBack() { + common_vendor.index.navigateBack(); + } + } +}; +function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) { + return { + a: common_vendor.o((...args) => $options.goBack && $options.goBack(...args)), + b: common_vendor.t($data.redLineIncidents), + c: common_vendor.t($data.criticalRate), + d: common_vendor.f($data.dataList, (item, index, i0) => { + return { + a: common_vendor.t(item.violation), + b: common_vendor.t(item.description), + c: common_vendor.t(item.count), + d: index + }; + }) + }; +} +const MiniProgramPage = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["render", _sfc_render], ["__scopeId", "data-v-944b0424"]]); +wx.createPage(MiniProgramPage); +//# sourceMappingURL=../../../../.sourcemap/mp-weixin/pages-subpackage/ai_features/red_line_touch/red_line_touch.js.map diff --git a/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/red_line_touch/red_line_touch.json b/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/red_line_touch/red_line_touch.json new file mode 100644 index 0000000..ced5b27 --- /dev/null +++ b/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/red_line_touch/red_line_touch.json @@ -0,0 +1,4 @@ +{ + "navigationStyle": "custom", + "usingComponents": {} +} \ No newline at end of file diff --git a/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/red_line_touch/red_line_touch.wxml b/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/red_line_touch/red_line_touch.wxml new file mode 100644 index 0000000..5989fbb --- /dev/null +++ b/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/red_line_touch/red_line_touch.wxml @@ -0,0 +1 @@ +触及红线统计{{b}}红线事件总数{{c}}%严重程度比例红线触及趋势图🚨 图表区域此处将显示触及红线统计趋势图表红线事件详情{{item.a}}{{item.b}}{{item.c}} 次 \ No newline at end of file diff --git a/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/red_line_touch/red_line_touch.wxss b/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/red_line_touch/red_line_touch.wxss new file mode 100644 index 0000000..77e74d1 --- /dev/null +++ b/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/red_line_touch/red_line_touch.wxss @@ -0,0 +1,127 @@ + +.feature-page.data-v-944b0424 { + min-height: 100vh; + background: #f8f9fa; +} +.page-header.data-v-944b0424 { + background: #ffffff; + border-bottom: 1rpx solid #e9ecef; +} +.nav-bar.data-v-944b0424 { + display: flex; + align-items: center; + height: 88rpx; + padding: 0 30rpx; +} +.nav-left.data-v-944b0424 { + width: 60rpx; + height: 60rpx; + display: flex; + align-items: center; + justify-content: center; + margin-right: 20rpx; +} +.back-icon.data-v-944b0424 { + font-size: 36rpx; + color: #333333; +} +.nav-title.data-v-944b0424 { + flex: 1; + text-align: center; + font-size: 32rpx; + font-weight: bold; + color: #333333; +} +.content-scroll.data-v-944b0424 { + height: calc(100vh - 88rpx); +} +.stats-card.data-v-944b0424 { + display: flex; + margin: 20rpx 30rpx; + background: #ffffff; + border-radius: 16rpx; + padding: 40rpx 30rpx; + box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.1); +} +.stat-item.data-v-944b0424 { + flex: 1; + text-align: center; +} +.stat-item.data-v-944b0424:not(:last-child) { + border-right: 1rpx solid #e9ecef; +} +.stat-value.data-v-944b0424 { + display: block; + font-size: 48rpx; + font-weight: bold; + color: #dc3545; + margin-bottom: 10rpx; +} +.stat-label.data-v-944b0424 { + display: block; + font-size: 24rpx; + color: #666666; +} +.chart-section.data-v-944b0424, .data-list.data-v-944b0424 { + margin: 20rpx 30rpx; + background: #ffffff; + border-radius: 16rpx; + overflow: hidden; + box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.1); +} +.section-title.data-v-944b0424 { + display: block; + font-size: 32rpx; + font-weight: bold; + color: #333333; + padding: 30rpx; + border-bottom: 1rpx solid #e9ecef; +} +.chart-placeholder.data-v-944b0424 { + padding: 80rpx 30rpx; + text-align: center; +} +.placeholder-text.data-v-944b0424 { + display: block; + font-size: 48rpx; + margin-bottom: 20rpx; +} +.placeholder-desc.data-v-944b0424 { + display: block; + font-size: 28rpx; + color: #666666; +} +.list-item.data-v-944b0424 { + display: flex; + align-items: center; + justify-content: space-between; + padding: 30rpx; + border-bottom: 1rpx solid #f0f0f0; +} +.list-item.data-v-944b0424:last-child { + border-bottom: none; +} +.item-left.data-v-944b0424 { + flex: 1; +} +.item-date.data-v-944b0424 { + display: block; + font-size: 28rpx; + font-weight: bold; + color: #333333; + margin-bottom: 8rpx; +} +.item-desc.data-v-944b0424 { + display: block; + font-size: 24rpx; + color: #666666; +} +.item-right.data-v-944b0424 { + text-align: right; +} +.item-count.data-v-944b0424 { + display: block; + font-size: 28rpx; + font-weight: bold; + color: #dc3545; +} diff --git a/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/speech_rating/speech_rating.js b/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/speech_rating/speech_rating.js new file mode 100644 index 0000000..2f0aaea --- /dev/null +++ b/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/speech_rating/speech_rating.js @@ -0,0 +1,40 @@ +"use strict"; +const common_vendor = require("../../../common/vendor.js"); +const _sfc_main = { + data() { + return { + averageScore: "4.2", + totalEvaluations: "1,256", + dataList: [ + { employee: "张三", description: "销售沟通评分", score: "4.5" }, + { employee: "李四", description: "客户服务评分", score: "4.1" }, + { employee: "王五", description: "产品介绍评分", score: "4.3" }, + { employee: "赵六", description: "售后服务评分", score: "3.9" }, + { employee: "孙七", description: "投诉处理评分", score: "4.0" } + ] + }; + }, + methods: { + goBack() { + common_vendor.index.navigateBack(); + } + } +}; +function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) { + return { + a: common_vendor.o((...args) => $options.goBack && $options.goBack(...args)), + b: common_vendor.t($data.averageScore), + c: common_vendor.t($data.totalEvaluations), + d: common_vendor.f($data.dataList, (item, index, i0) => { + return { + a: common_vendor.t(item.employee), + b: common_vendor.t(item.description), + c: common_vendor.t(item.score), + d: index + }; + }) + }; +} +const MiniProgramPage = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["render", _sfc_render], ["__scopeId", "data-v-78f32b4f"]]); +wx.createPage(MiniProgramPage); +//# sourceMappingURL=../../../../.sourcemap/mp-weixin/pages-subpackage/ai_features/speech_rating/speech_rating.js.map diff --git a/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/speech_rating/speech_rating.json b/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/speech_rating/speech_rating.json new file mode 100644 index 0000000..ced5b27 --- /dev/null +++ b/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/speech_rating/speech_rating.json @@ -0,0 +1,4 @@ +{ + "navigationStyle": "custom", + "usingComponents": {} +} \ No newline at end of file diff --git a/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/speech_rating/speech_rating.wxml b/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/speech_rating/speech_rating.wxml new file mode 100644 index 0000000..b594794 --- /dev/null +++ b/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/speech_rating/speech_rating.wxml @@ -0,0 +1 @@ +员工话术评分{{b}}平均评分{{c}}总评价次数评分趋势图📈 图表区域此处将显示员工话术评分趋势图表评分详情{{item.a}}{{item.b}}{{item.c}}/5.0 \ No newline at end of file diff --git a/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/speech_rating/speech_rating.wxss b/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/speech_rating/speech_rating.wxss new file mode 100644 index 0000000..23fe41b --- /dev/null +++ b/unpackage/dist/dev/mp-weixin/pages-subpackage/ai_features/speech_rating/speech_rating.wxss @@ -0,0 +1,127 @@ + +.feature-page.data-v-78f32b4f { + min-height: 100vh; + background: #f8f9fa; +} +.page-header.data-v-78f32b4f { + background: #ffffff; + border-bottom: 1rpx solid #e9ecef; +} +.nav-bar.data-v-78f32b4f { + display: flex; + align-items: center; + height: 88rpx; + padding: 0 30rpx; +} +.nav-left.data-v-78f32b4f { + width: 60rpx; + height: 60rpx; + display: flex; + align-items: center; + justify-content: center; + margin-right: 20rpx; +} +.back-icon.data-v-78f32b4f { + font-size: 36rpx; + color: #333333; +} +.nav-title.data-v-78f32b4f { + flex: 1; + text-align: center; + font-size: 32rpx; + font-weight: bold; + color: #333333; +} +.content-scroll.data-v-78f32b4f { + height: calc(100vh - 88rpx); +} +.stats-card.data-v-78f32b4f { + display: flex; + margin: 20rpx 30rpx; + background: #ffffff; + border-radius: 16rpx; + padding: 40rpx 30rpx; + box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.1); +} +.stat-item.data-v-78f32b4f { + flex: 1; + text-align: center; +} +.stat-item.data-v-78f32b4f:not(:last-child) { + border-right: 1rpx solid #e9ecef; +} +.stat-value.data-v-78f32b4f { + display: block; + font-size: 48rpx; + font-weight: bold; + color: #007aff; + margin-bottom: 10rpx; +} +.stat-label.data-v-78f32b4f { + display: block; + font-size: 24rpx; + color: #666666; +} +.chart-section.data-v-78f32b4f, .data-list.data-v-78f32b4f { + margin: 20rpx 30rpx; + background: #ffffff; + border-radius: 16rpx; + overflow: hidden; + box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.1); +} +.section-title.data-v-78f32b4f { + display: block; + font-size: 32rpx; + font-weight: bold; + color: #333333; + padding: 30rpx; + border-bottom: 1rpx solid #e9ecef; +} +.chart-placeholder.data-v-78f32b4f { + padding: 80rpx 30rpx; + text-align: center; +} +.placeholder-text.data-v-78f32b4f { + display: block; + font-size: 48rpx; + margin-bottom: 20rpx; +} +.placeholder-desc.data-v-78f32b4f { + display: block; + font-size: 28rpx; + color: #666666; +} +.list-item.data-v-78f32b4f { + display: flex; + align-items: center; + justify-content: space-between; + padding: 30rpx; + border-bottom: 1rpx solid #f0f0f0; +} +.list-item.data-v-78f32b4f:last-child { + border-bottom: none; +} +.item-left.data-v-78f32b4f { + flex: 1; +} +.item-date.data-v-78f32b4f { + display: block; + font-size: 28rpx; + font-weight: bold; + color: #333333; + margin-bottom: 8rpx; +} +.item-desc.data-v-78f32b4f { + display: block; + font-size: 24rpx; + color: #666666; +} +.item-right.data-v-78f32b4f { + text-align: right; +} +.item-score.data-v-78f32b4f { + display: block; + font-size: 28rpx; + font-weight: bold; + color: #007aff; +} diff --git a/unpackage/dist/dev/mp-weixin/pages/ai_analysis/ai_analysis.js b/unpackage/dist/dev/mp-weixin/pages/ai_analysis/ai_analysis.js new file mode 100644 index 0000000..97ed7c8 --- /dev/null +++ b/unpackage/dist/dev/mp-weixin/pages/ai_analysis/ai_analysis.js @@ -0,0 +1,172 @@ +"use strict"; +const common_vendor = require("../../common/vendor.js"); +const _sfc_main = { + data() { + const systemInfo = common_vendor.index.getSystemInfoSync(); + const statusBarHeight = systemInfo.statusBarHeight || 20; + const navbarHeight = 44; + const statusBarHeightRpx = statusBarHeight * 2; + const navbarHeightRpx = navbarHeight * 2; + const totalNavbarHeight = statusBarHeightRpx + navbarHeightRpx; + return { + contentTop: totalNavbarHeight + "rpx", + // 内容区域距离顶部的距离 + contentBottom: "96rpx" + // 内容区域距离底部的距离(默认值,会在 onReady 中更新) + }; + }, + computed: { + // 计算内容区域的位置(使用计算属性确保响应式) + computedContentTop() { + const systemInfo = common_vendor.index.getSystemInfoSync(); + const statusBarHeight = systemInfo.statusBarHeight || 20; + const navbarHeight = 44; + const statusBarHeightRpx = statusBarHeight * 2; + const navbarHeightRpx = navbarHeight * 2; + const totalNavbarHeight = statusBarHeightRpx + navbarHeightRpx; + return totalNavbarHeight + "rpx"; + } + }, + onLoad() { + this.updateNavbarPosition(); + }, + onShow() { + this.$nextTick(() => { + this.updateNavbarPosition(); + setTimeout(() => { + this.updateNavbarPosition(); + }, 50); + }); + }, + onReady() { + this.$nextTick(() => { + const query = common_vendor.index.createSelectorQuery().in(this); + query.select(".uni-navbar__content").boundingClientRect((data) => { + if (data && data.height) { + const actualHeight = data.height; + const actualHeightRpx = actualHeight * 2; + const adjustedHeight = Math.max(actualHeightRpx - 4, 0); + this.$set(this, "contentTop", adjustedHeight + "rpx"); + common_vendor.index.__f__("log", "at pages/ai_analysis/ai_analysis.vue:175", "[AIAnalysis] 使用实际导航栏高度:", actualHeight, "px =", actualHeightRpx, "rpx, 调整后:", adjustedHeight, "rpx"); + } else { + const systemInfo = common_vendor.index.getSystemInfoSync(); + const statusBarHeight = systemInfo.statusBarHeight || 20; + const navbarHeight = 44; + const statusBarHeightRpx = statusBarHeight * 2; + const navbarHeightRpx = navbarHeight * 2; + const totalNavbarHeight = statusBarHeightRpx + navbarHeightRpx; + const adjustedHeight = Math.max(totalNavbarHeight - 4, 0); + this.$set(this, "contentTop", adjustedHeight + "rpx"); + } + }).exec(); + const queryTabbar = common_vendor.index.createSelectorQuery().in(this); + queryTabbar.select(".tabbar").boundingClientRect((tabbarData) => { + if (tabbarData && tabbarData.height) { + const tabbarHeight = tabbarData.height; + const tabbarHeightRpx = tabbarHeight * 2; + const adjustedBottom = Math.max(tabbarHeightRpx - 4, 0); + this.$set(this, "contentBottom", adjustedBottom + "rpx"); + common_vendor.index.__f__("log", "at pages/ai_analysis/ai_analysis.vue:199", "[AIAnalysis] 使用实际tabbar高度:", tabbarHeight, "px =", tabbarHeightRpx, "rpx, 调整后:", adjustedBottom, "rpx"); + } else { + this.$set(this, "contentBottom", "96rpx"); + } + }).exec(); + setTimeout(() => { + const query2 = common_vendor.index.createSelectorQuery().in(this); + query2.select(".uni-navbar__content").boundingClientRect((data) => { + if (data && data.height) { + const actualHeight = data.height; + const actualHeightRpx = actualHeight * 2; + const adjustedHeight = Math.max(actualHeightRpx - 4, 0); + this.$set(this, "contentTop", adjustedHeight + "rpx"); + common_vendor.index.__f__("log", "at pages/ai_analysis/ai_analysis.vue:217", "[AIAnalysis] 延迟更新导航栏高度:", actualHeight, "px =", actualHeightRpx, "rpx, 调整后:", adjustedHeight, "rpx"); + } + }).exec(); + const queryTabbar2 = common_vendor.index.createSelectorQuery().in(this); + queryTabbar2.select(".tabbar").boundingClientRect((tabbarData) => { + if (tabbarData && tabbarData.height) { + const tabbarHeight = tabbarData.height; + const tabbarHeightRpx = tabbarHeight * 2; + const adjustedBottom = Math.max(tabbarHeightRpx - 4, 0); + this.$set(this, "contentBottom", adjustedBottom + "rpx"); + common_vendor.index.__f__("log", "at pages/ai_analysis/ai_analysis.vue:229", "[AIAnalysis] 延迟更新tabbar高度:", tabbarHeight, "px =", tabbarHeightRpx, "rpx, 调整后:", adjustedBottom, "rpx"); + } + }).exec(); + }, 200); + }); + }, + methods: { + // 计算并更新导航栏和内容区域的位置 + updateNavbarPosition() { + const systemInfo = common_vendor.index.getSystemInfoSync(); + const statusBarHeight = systemInfo.statusBarHeight || 20; + const navbarHeight = 44; + const statusBarHeightRpx = statusBarHeight * 2; + const navbarHeightRpx = navbarHeight * 2; + const totalNavbarHeight = statusBarHeightRpx + navbarHeightRpx; + const contentTop = totalNavbarHeight + "rpx"; + this.$set(this, "contentTop", contentTop); + this.$forceUpdate(); + }, + goBack() { + const pages = getCurrentPages(); + if (pages.length <= 1) { + common_vendor.index.__f__("log", "at pages/ai_analysis/ai_analysis.vue:258", "[AIAnalysis][goBack] 当前是第一个页面,无法返回"); + return; + } + common_vendor.index.navigateBack({ + fail: (err) => { + common_vendor.index.__f__("error", "at pages/ai_analysis/ai_analysis.vue:263", "[AIAnalysis][goBack] 返回失败:", err); + } + }); + }, + navigateToPage(pageName) { + const pagePath = `pages-subpackage/ai_features/${pageName}/${pageName}`; + common_vendor.index.navigateTo({ + url: `/${pagePath}`, + fail: (err) => { + common_vendor.index.__f__("error", "at pages/ai_analysis/ai_analysis.vue:272", "导航失败:", err); + common_vendor.index.showToast({ + title: "页面跳转失败", + icon: "none" + }); + } + }); + } + } +}; +if (!Array) { + const _easycom_uni_nav_bar2 = common_vendor.resolveComponent("uni-nav-bar"); + _easycom_uni_nav_bar2(); +} +const _easycom_uni_nav_bar = () => "../../uni_modules/uni-nav-bar/components/uni-nav-bar/uni-nav-bar.js"; +if (!Math) { + _easycom_uni_nav_bar(); +} +function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) { + return { + a: common_vendor.o($options.goBack), + b: common_vendor.p({ + fixed: true, + statusBar: true, + title: "AI销冠系统", + leftIcon: "left", + color: "#333", + backgroundColor: "#FFFFFF" + }), + c: common_vendor.o(($event) => $options.navigateToPage("recording_duration")), + d: common_vendor.o(($event) => $options.navigateToPage("customer_count")), + e: common_vendor.o(($event) => $options.navigateToPage("quality_coverage")), + f: common_vendor.o(($event) => $options.navigateToPage("speech_rating")), + g: common_vendor.o(($event) => $options.navigateToPage("intent_level")), + h: common_vendor.o(($event) => $options.navigateToPage("deal_attribution")), + i: common_vendor.o(($event) => $options.navigateToPage("opening_rate")), + j: common_vendor.o(($event) => $options.navigateToPage("over_commitment")), + k: common_vendor.o(($event) => $options.navigateToPage("red_line_touch")), + l: $options.computedContentTop || $data.contentTop, + m: $data.contentBottom || "96rpx" + }; +} +const MiniProgramPage = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["render", _sfc_render], ["__scopeId", "data-v-8462a2f1"]]); +wx.createPage(MiniProgramPage); +//# sourceMappingURL=../../../.sourcemap/mp-weixin/pages/ai_analysis/ai_analysis.js.map diff --git a/unpackage/dist/dev/mp-weixin/pages/ai_analysis/ai_analysis.json b/unpackage/dist/dev/mp-weixin/pages/ai_analysis/ai_analysis.json new file mode 100644 index 0000000..af4bb32 --- /dev/null +++ b/unpackage/dist/dev/mp-weixin/pages/ai_analysis/ai_analysis.json @@ -0,0 +1,6 @@ +{ + "navigationStyle": "custom", + "usingComponents": { + "uni-nav-bar": "../../uni_modules/uni-nav-bar/components/uni-nav-bar/uni-nav-bar" + } +} \ No newline at end of file diff --git a/unpackage/dist/dev/mp-weixin/pages/ai_analysis/ai_analysis.wxml b/unpackage/dist/dev/mp-weixin/pages/ai_analysis/ai_analysis.wxml new file mode 100644 index 0000000..0616d41 --- /dev/null +++ b/unpackage/dist/dev/mp-weixin/pages/ai_analysis/ai_analysis.wxml @@ -0,0 +1 @@ +📊录音和接待统计⏱️录音时长统计录音总时长👥接待客户数统计接待客户数量质量管控🎯质检覆盖率质检录音覆盖统计🗣️员工话术评分员工沟通质量评分📈销售分析🎯客户意向分级客户购买意向分析💰成交归因成交成功因素分析🚪开口率客户主动开口统计⚠️风险监控🚨过度承诺统计监控过度承诺情况🔴触及红线统计违规行为监控统计 \ No newline at end of file diff --git a/unpackage/dist/dev/mp-weixin/pages/ai_analysis/ai_analysis.wxss b/unpackage/dist/dev/mp-weixin/pages/ai_analysis/ai_analysis.wxss new file mode 100644 index 0000000..d9205bc --- /dev/null +++ b/unpackage/dist/dev/mp-weixin/pages/ai_analysis/ai_analysis.wxss @@ -0,0 +1,161 @@ + +page.data-v-8462a2f1 { + background-color: #F5F5F5; +} +.page.data-v-8462a2f1 { + min-height: 100vh; + background-color: #F5F5F5; +} +.content.data-v-8462a2f1 { + padding-top: 0 !important; + margin-top: 0 !important; + position: relative; + min-height: 100vh; + /* 确保内容从顶部开始,不受占位符影响 */ + top: 0; +} + +/* 隐藏导航栏占位区域,避免产生空白 */ +.data-v-8462a2f1 .uni-navbar__placeholder { + display: none !important; + height: 0 !important; +} +.data-v-8462a2f1 .uni-navbar__placeholder-view { + display: none !important; + height: 0 !important; +} + +/* 隐藏底部 tabBar 占位区域,避免产生空白(类似顶部导航栏的处理方式) */ +/* 注意:只隐藏占位符,不隐藏实际的 tabbar */ +.data-v-8462a2f1 [class*="tabbar"][class*="placeholder"] { + display: none !important; + height: 0 !important; +} + +/* 隐藏可能的页面底部安全区域占位符 */ +.data-v-8462a2f1 [class*="safe-area"][class*="bottom"],.data-v-8462a2f1 [class*="bottom"][class*="safe"] { + display: none !important; + height: 0 !important; +} +.content-scroll.data-v-8462a2f1 { + position: absolute; + left: 0; + right: 0; + top: 0; /* 先从顶部开始 */ + bottom: 0; /* 先设为0,通过查询实际高度动态设置 */ + /* top值通过内联样式动态设置,覆盖上面的 top: 0 */ + padding: 0 !important; + padding-bottom: 0 !important; + margin: 0 !important; + box-sizing: border-box; +} + +/* 确保scroll-view内部没有默认间距 */ +.content-scroll > view.data-v-8462a2f1 { + margin-top: 0; + padding-top: 0; + margin-bottom: 0; + padding-bottom: 0; +} +.category-section.data-v-8462a2f1 { + margin: 20rpx 30rpx; + background: #FFFFFF; + border-radius: 16rpx; + overflow: hidden; + box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.04); +} +.category-section.data-v-8462a2f1:first-child { + margin-top: 0; +} +.category-section.data-v-8462a2f1:last-child { + margin-bottom: 0; +} +.category-header.data-v-8462a2f1 { + display: flex; + align-items: center; + padding: 30rpx; + background: #FFFFFF; + border-bottom: 1rpx solid #F0F0F0; +} +.category-icon.data-v-8462a2f1 { + font-size: 32rpx; + margin-right: 20rpx; +} +.category-title.data-v-8462a2f1 { + font-size: 32rpx; + font-weight: 500; + color: #333; +} +.function-grid.data-v-8462a2f1 { + display: flex; + flex-wrap: wrap; + padding: 10rpx; +} + +/* 两列布局的分类 */ +.two-column .function-item.data-v-8462a2f1 { + flex: 1; + background: #FFFFFF; + border-radius: 12rpx; + padding: 24rpx 16rpx; + margin: 0 5rpx; + text-align: center; + box-shadow: 0 2rpx 4rpx rgba(0, 0, 0, 0.04); + transition: all 0.3s ease; + border: 1rpx solid #F0F0F0; +} + +/* 三列布局的分类 */ +.three-column .function-item.data-v-8462a2f1 { + width: 31%; + background: #FFFFFF; + border-radius: 12rpx; + padding: 24rpx 12rpx; + margin: 1%; + text-align: center; + box-shadow: 0 2rpx 4rpx rgba(0, 0, 0, 0.04); + transition: all 0.3s ease; + border: 1rpx solid #F0F0F0; +} + +/* 销售分析:所有项目统一宽度(50%) */ +.sales-analysis .function-item.full-row-item.data-v-8462a2f1 { + flex: 1; + width: calc(50% - 10rpx); + background: #FFFFFF; + border-radius: 12rpx; + padding: 24rpx 16rpx; + margin: 0 5rpx; + text-align: center; + box-shadow: 0 2rpx 4rpx rgba(0, 0, 0, 0.04); + transition: all 0.3s ease; + border: 1rpx solid #F0F0F0; +} + +/* 销售分析:开口率单独一行,但保持50%宽度 */ +.sales-analysis .function-item.new-line-item.data-v-8462a2f1 { + flex-basis: 100%; + width: calc(50% - 10rpx); + margin-top: 10rpx; +} +.function-item.data-v-8462a2f1:active { + transform: scale(0.95); + box-shadow: 0 1rpx 2rpx rgba(0, 0, 0, 0.1); +} +.function-icon.data-v-8462a2f1 { + font-size: 48rpx; + margin-bottom: 12rpx; +} +.function-name.data-v-8462a2f1 { + display: block; + font-size: 28rpx; + font-weight: 500; + color: #333; + margin-bottom: 8rpx; +} +.function-desc.data-v-8462a2f1 { + display: block; + font-size: 24rpx; + color: #666; + line-height: 1.4; +} diff --git a/unpackage/dist/dev/mp-weixin/static/tabbar/ai_analysis.png b/unpackage/dist/dev/mp-weixin/static/tabbar/ai_analysis.png new file mode 100644 index 0000000..0ec5081 Binary files /dev/null and b/unpackage/dist/dev/mp-weixin/static/tabbar/ai_analysis.png differ diff --git a/unpackage/dist/dev/mp-weixin/static/tabbar/ai_analysis_active.png b/unpackage/dist/dev/mp-weixin/static/tabbar/ai_analysis_active.png new file mode 100644 index 0000000..9b752c7 Binary files /dev/null and b/unpackage/dist/dev/mp-weixin/static/tabbar/ai_analysis_active.png differ