From 2902d26d021cbc6af210ebad15f46fd805954059 Mon Sep 17 00:00:00 2001 From: xjs Date: Thu, 4 Jun 2026 10:46:54 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E8=B0=83=E6=95=B4=E9=80=BB=E8=BE=91?= =?UTF-8?q?=E5=92=8C=E4=BF=AE=E6=94=B9=E6=A0=B7=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- env/.env | 18 +- src/env.d.ts | 2 + src/pages-ai/ai/index.vue | 66 ++-- src/pages-ai/components/AgentHeader.vue | 53 +++ src/pages-ai/components/AgentInput.vue | 89 +++-- src/pages-ai/components/AgentMessage.vue | 59 ++-- src/pages-ai/components/agent-config.ts | 20 +- src/pages-ai/components/agent-service.ts | 22 +- src/pages-sub/components/search/index.vue | 21 +- src/pages-sub/information/batchline.vue | 131 ++++++++ src/pages-sub/information/highSchool.vue | 2 +- src/pages-sub/information/middleSchool.vue | 2 +- src/pages-sub/information/overTheYear.vue | 265 ++++++++------- src/pages-sub/information/quota.vue | 2 +- src/pages-sub/information/rank.vue | 191 +++++++++++ src/pages-sub/invite/jump.vue | 3 +- src/pages-sub/me/wishlistInfo.vue | 7 +- .../create/components/SecondBatchSchool.vue | 10 +- src/pages-sub/wishlist/create/first.vue | 6 +- src/pages-sub/wishlist/create/secondBatch.vue | 8 +- src/pages/index/hooks/useChannelLive.ts | 313 ++++++++++++++++++ src/pages/index/index.vue | 303 ++++++++++++----- src/service/requestApi.ts | 20 ++ src/static/tabbar/ai.png | Bin 0 -> 7801 bytes src/tabbar/config.ts | 19 +- src/tabbar/index.vue | 56 +++- src/tabbar/store.ts | 6 +- src/utils/index.ts | 11 +- 28 files changed, 1316 insertions(+), 389 deletions(-) create mode 100644 src/pages-ai/components/AgentHeader.vue create mode 100644 src/pages-sub/information/batchline.vue create mode 100644 src/pages-sub/information/rank.vue create mode 100644 src/pages/index/hooks/useChannelLive.ts create mode 100644 src/static/tabbar/ai.png diff --git a/env/.env b/env/.env index ea7f3de..8cbedfa 100644 --- a/env/.env +++ b/env/.env @@ -3,8 +3,22 @@ VITE_APP_PORT = 9000 VITE_UNI_APPID = 'H57F2ACE4' # VITE_WX_APPID = 'wxc48ad15d58a3e417' 六纬中考通 -# VITE_WX_APPID = 'wx4b925e36c17dd54a' 六纬裂变 -VITE_WX_APPID = 'wxc48ad15d58a3e417' +# VITE_WX_APPID = 'wx4b925e36c17dd54a' 智能中专学校的 +# wx487ac749c0e10be5 深泉外国语的 +VITE_WX_APPID = 'wx487ac749c0e10be5' +# VITE_WX_VIDEO_ID= 'sphju9MCfZetYHP' 智能中专学校的 +# VITE_WX_VIDEO_ID= 'spht0MPpWjxEKb4' 深泉外国语 +# spheuUaMulnlpHH 深泉外国语学院 认证的 +VITE_WX_VIDEO_ID= 'spht0MPpWjxEKb4' + +# 微信小程序 AI +# 智能中专学校的 +# VITE_CLOUD_ENV_ID= 'cloud1-d3g5q6bq61a240786', +# VITE_CLOUD_BOT_ID= 'agent-wxai-4gl75um61026324f', + +# 深泉外国语学院的 +VITE_CLOUD_ENV_ID='cloud1-d9g4odcaqf6a2114f' +VITE_CLOUD_BOT_ID='agent-wxai-9gi3rts96061202f' # h5部署网站的base,配置到 manifest.config.ts 里的 h5.router.base # https://uniapp.dcloud.net.cn/collocation/manifest.html#h5-router diff --git a/src/env.d.ts b/src/env.d.ts index ea1334c..222d855 100644 --- a/src/env.d.ts +++ b/src/env.d.ts @@ -15,6 +15,8 @@ interface ImportMetaEnv { readonly VITE_SERVER_PORT: string /** 后台接口地址 */ readonly VITE_SERVER_BASEURL: string + /** 微信视频号 ID */ + readonly VITE_WX_VIDEO_ID: string /** H5是否需要代理 */ readonly VITE_APP_PROXY_ENABLE: 'true' | 'false' /** H5是否需要代理,需要的话有个前缀 */ diff --git a/src/pages-ai/ai/index.vue b/src/pages-ai/ai/index.vue index 3f3e1c9..40779f7 100644 --- a/src/pages-ai/ai/index.vue +++ b/src/pages-ai/ai/index.vue @@ -8,12 +8,13 @@ import { generateMessageId, } from '../components/agent-config' import { fetchRecommendQuestions, streamMessage } from '../components/agent-service' +import AgentHeader from '../components/AgentHeader.vue' import AgentInput from '../components/AgentInput.vue' import AgentMessage from '../components/AgentMessage.vue' definePage({ style: { - navigationBarTitleText: 'AI 助手', + navigationBarTitleText: 'AI助手', }, }) @@ -28,6 +29,8 @@ const aiStore = useAiStore() const paging = ref(null) const messages = ref([]) const loading = ref(false) +const initQuestionCapsules = computed(() => agentConfig.initQuestions.slice(0, 3)) +const shouldShowInitQuestionCapsules = computed(() => aiStore.messages.length === 0 && initQuestionCapsules.value.length > 0) // 用于停止流:在新一轮发送时把上一轮的 controller 标记为 cancelled let cancelFlag = false @@ -43,17 +46,18 @@ onLoad(() => { // #endif aiStore.ensureThreadId() - }) // z-paging 聊天模式:第一页直接把 store 里的历史灌给它 // 聊天模式数据约定:数组下标 0 = 视觉最底部(最新消息),所以要倒序传入 function queryList() { - if (aiStore.messages.length === 0) { + const welcomeMsg = agentConfig.welcomeMsg?.trim() + + if (aiStore.messages.length === 0 && welcomeMsg) { aiStore.addMessage({ id: generateMessageId(), role: 'assistant', - content: agentConfig.welcomeMsg, + content: welcomeMsg, createdAt: Date.now(), }) } @@ -194,19 +198,6 @@ function handleClear() {