From 397cdd2a536e16ec799d615ac457e73f3eb8bb2a Mon Sep 17 00:00:00 2001 From: "DESKTOP-RQ919RC\\Pc" <1300399510@qq.com> Date: Fri, 22 Aug 2025 18:56:17 +0800 Subject: [PATCH] =?UTF-8?q?feat(ai):=20=E6=96=B0=E5=A2=9EAI=E6=89=BE?= =?UTF-8?q?=E6=88=BF=E5=8A=9F=E8=83=BD=E6=A8=A1=E5=9D=97=E5=8F=8A=E9=85=8D?= =?UTF-8?q?=E5=A5=97=E7=BB=84=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 添加AI找房功能页面、路由配置和API接口 实现聊天界面组件、历史记录加载和滚动定位功能 包含房源推荐展示、联系人组件和样式优化 --- .../img/publicImage/arrows-deep-white.svg | 6 + src/assets/img/publicImage/round-icon.gif | Bin 0 -> 10488 bytes src/components/ai/aiItem.vue | 342 +++++++++++++++ src/components/ai/contacts.vue | 32 ++ src/router/index.js | 8 + src/utils/api.js | 21 +- src/utils/axios.js | 7 +- src/views/ai.vue | 410 ++++++++++++++++++ 8 files changed, 820 insertions(+), 6 deletions(-) create mode 100644 src/assets/img/publicImage/arrows-deep-white.svg create mode 100644 src/assets/img/publicImage/round-icon.gif create mode 100644 src/components/ai/aiItem.vue create mode 100644 src/components/ai/contacts.vue create mode 100644 src/views/ai.vue diff --git a/src/assets/img/publicImage/arrows-deep-white.svg b/src/assets/img/publicImage/arrows-deep-white.svg new file mode 100644 index 0000000..6f95612 --- /dev/null +++ b/src/assets/img/publicImage/arrows-deep-white.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/src/assets/img/publicImage/round-icon.gif b/src/assets/img/publicImage/round-icon.gif new file mode 100644 index 0000000000000000000000000000000000000000..f883aa9e7fd660d53aa646d373cbf8d945d9573f GIT binary patch literal 10488 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 J;s2wn{y&DS0Ji`D literal 0 HcmV?d00001 diff --git a/src/components/ai/aiItem.vue b/src/components/ai/aiItem.vue new file mode 100644 index 0000000..1613926 --- /dev/null +++ b/src/components/ai/aiItem.vue @@ -0,0 +1,342 @@ + + + + + diff --git a/src/components/ai/contacts.vue b/src/components/ai/contacts.vue new file mode 100644 index 0000000..da7ffa6 --- /dev/null +++ b/src/components/ai/contacts.vue @@ -0,0 +1,32 @@ + + + + + diff --git a/src/router/index.js b/src/router/index.js index e22734c..19bbcf5 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -121,6 +121,14 @@ const routes = [ path: "/apartmentDetail", }, }, + { + path: "/ai", + component: () => import(/* webpackChunkName: "housing" */ "@/views/ai.vue"), + meta: { + title: "AI找房", + path: "/ai", + }, + }, ]; const router = createRouter({ diff --git a/src/utils/api.js b/src/utils/api.js index fd98780..8510ddd 100644 --- a/src/utils/api.js +++ b/src/utils/api.js @@ -45,6 +45,23 @@ export default{ }, apartmentCollection:(params={})=>{// 公寓列表 - 收藏 return axios.post('/tenement/pc/api/user/apartmentCollection',params) - } - + }, + alInit:(params={})=>{// AI 初始化 + return axios.post('https://api.gter.net/v1/chat/init',params) + }, + alHistory:(params={})=>{// AI 历史记录 + return axios.post('https://api.gter.net/v1/chat/history',params) + }, + alChat:(params={})=>{// AI 发送信息 + return axios.post('https://fangchat.x-php.com/api/v1/chat',params) + }, + alResume:(params={})=>{// AI 恢复会话 + return axios.post('https://fangchat.x-php.com/api/v1/chat/resume',params) + }, + alEnd:(params={})=>{// AI 结束会话 + return axios.post('https://api.gter.net/v1/chat/end',params) + }, + alNew:(params={})=>{// AI 新建会话 + return axios.post('https://api.gter.net/v1/chat/new',params) + }, } \ No newline at end of file diff --git a/src/utils/axios.js b/src/utils/axios.js index 963b71e..ae8b181 100644 --- a/src/utils/axios.js +++ b/src/utils/axios.js @@ -20,7 +20,7 @@ axios.interceptors.request.use( if (config.url != "/tenement/pc/api/user/operation" && !noMask) showFullScreenLoading() // 开发时登录用的,可以直接替换小程序的 authorization if (process.env.NODE_ENV !== "production") { - const miucms_session = "fb685339c8ec5030749c4d85d3c1a7fd"; + const miucms_session = "01346a38444d71aaadb3adad52b52c39"; document.cookie = "miucms_session=" + miucms_session; config["headers"]["authorization"] = miucms_session; } @@ -97,9 +97,8 @@ const $post = (url, params) => { resolve(res.data) }) .catch(err => { - if (err.data.code == 401) { - resolve(err.data) - } else reject(err.data) + if (err.data.code == 401) resolve(err.data) + else reject(err.data) }) }) } diff --git a/src/views/ai.vue b/src/views/ai.vue new file mode 100644 index 0000000..0063f21 --- /dev/null +++ b/src/views/ai.vue @@ -0,0 +1,410 @@ + + + + + + +