From ac9830f6fda219e38a2c36c19fab2819cec33efe Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=88=98=E8=B4=A4=E5=9B=BD?= <3482108437@qq.com>
Date: Thu, 7 Aug 2025 16:22:26 +0800
Subject: [PATCH 1/6] =?UTF-8?q?=E4=BD=BF=E7=94=A8uniapp=E5=AE=8C=E6=88=90?=
=?UTF-8?q?=E7=99=BB=E5=BD=95/=E6=B3=A8=E5=86=8C/=E8=81=8A=E5=A4=A9?=
=?UTF-8?q?=E9=A1=B5=E9=9D=A2?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
frontend/App.vue | 17 ++
frontend/index.html | 20 +++
frontend/main.js | 23 +++
frontend/manifest.json | 75 +++++++++
frontend/pages.json | 32 ++++
frontend/pages/chat/chat.vue | 225 +++++++++++++++++++++++++++
frontend/pages/login/login.vue | 158 +++++++++++++++++++
frontend/pages/register/register.vue | 141 +++++++++++++++++
frontend/static/logo.png | Bin 0 -> 4023 bytes
frontend/uni.promisify.adaptor.js | 13 ++
frontend/uni.scss | 76 +++++++++
11 files changed, 780 insertions(+)
create mode 100644 frontend/App.vue
create mode 100644 frontend/index.html
create mode 100644 frontend/main.js
create mode 100644 frontend/manifest.json
create mode 100644 frontend/pages.json
create mode 100644 frontend/pages/chat/chat.vue
create mode 100644 frontend/pages/login/login.vue
create mode 100644 frontend/pages/register/register.vue
create mode 100644 frontend/static/logo.png
create mode 100644 frontend/uni.promisify.adaptor.js
create mode 100644 frontend/uni.scss
diff --git a/frontend/App.vue b/frontend/App.vue
new file mode 100644
index 0000000..8c2b732
--- /dev/null
+++ b/frontend/App.vue
@@ -0,0 +1,17 @@
+
+
+
diff --git a/frontend/index.html b/frontend/index.html
new file mode 100644
index 0000000..b5d330d
--- /dev/null
+++ b/frontend/index.html
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/frontend/main.js b/frontend/main.js
new file mode 100644
index 0000000..df66165
--- /dev/null
+++ b/frontend/main.js
@@ -0,0 +1,23 @@
+import App from './App'
+
+// #ifndef VUE3
+import Vue from 'vue'
+import './uni.promisify.adaptor'
+Vue.config.productionTip = false
+App.mpType = 'app'
+const app = new Vue({
+ ...App
+})
+app.$mount()
+// #endif
+
+// #ifdef VUE3
+import { createSSRApp } from 'vue'
+export function createApp() {
+ const app = createSSRApp(App)
+ return {
+ app
+ }
+}
+// #endif
+
diff --git a/frontend/manifest.json b/frontend/manifest.json
new file mode 100644
index 0000000..b6ebc91
--- /dev/null
+++ b/frontend/manifest.json
@@ -0,0 +1,75 @@
+{
+ "name" : "uniapp-ai",
+ "appid" : "__UNI__3924A7E",
+ "description" : "",
+ "versionName" : "1.0.0",
+ "versionCode" : "100",
+ "transformPx" : false,
+ /* 5+App特有相关 */
+ "app-plus" : {
+ "usingComponents" : true,
+ "nvueStyleCompiler" : "uni-app",
+ "compilerVersion" : 3,
+ "splashscreen" : {
+ "alwaysShowBeforeRender" : true,
+ "waiting" : true,
+ "autoclose" : true,
+ "delay" : 0
+ },
+ /* 模块配置 */
+ "modules" : {},
+ /* 应用发布信息 */
+ "distribute" : {
+ /* android打包配置 */
+ "android" : {
+ "permissions" : [
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ ""
+ ],
+ "minSdkVersion" : 21
+ },
+ /* ios打包配置 */
+ "ios" : {
+ "dSYMs" : false
+ },
+ /* SDK配置 */
+ "sdkConfigs" : {}
+ }
+ },
+ /* 快应用特有相关 */
+ "quickapp" : {},
+ /* 小程序特有相关 */
+ "mp-weixin" : {
+ "appid" : "",
+ "setting" : {
+ "urlCheck" : false
+ },
+ "usingComponents" : true
+ },
+ "mp-alipay" : {
+ "usingComponents" : true
+ },
+ "mp-baidu" : {
+ "usingComponents" : true
+ },
+ "mp-toutiao" : {
+ "usingComponents" : true
+ },
+ "uniStatistics" : {
+ "enable" : false
+ },
+ "vueVersion" : "3"
+}
diff --git a/frontend/pages.json b/frontend/pages.json
new file mode 100644
index 0000000..03cf3d3
--- /dev/null
+++ b/frontend/pages.json
@@ -0,0 +1,32 @@
+{
+ "pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages
+ {
+ "path" : "pages/login/login",
+ "style" :
+ {
+ "navigationBarTitleText" : ""
+ }
+ },
+ {
+ "path" : "pages/chat/chat",
+ "style" :
+ {
+ "navigationBarTitleText" : ""
+ }
+ },
+ {
+ "path" : "pages/register/register",
+ "style" :
+ {
+ "navigationBarTitleText" : ""
+ }
+ }
+ ],
+ "globalStyle": {
+ "navigationBarTextStyle": "black",
+ "navigationBarTitleText": "uni-app",
+ "navigationBarBackgroundColor": "#F8F8F8",
+ "backgroundColor": "#F8F8F8"
+ },
+ "uniIdRouter": {}
+}
diff --git a/frontend/pages/chat/chat.vue b/frontend/pages/chat/chat.vue
new file mode 100644
index 0000000..a660afb
--- /dev/null
+++ b/frontend/pages/chat/chat.vue
@@ -0,0 +1,225 @@
+
+
+
+
+
+ AI 聊天
+
+ 新对话
+ 头像
+
+
+
+
+
+
+
+
+ {{ msg.content }}
+
+
+ {{ msg.content }}
+ 来源:{{ msg.source }}
+ 相关度:{{ msg.relevance }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/frontend/pages/login/login.vue b/frontend/pages/login/login.vue
new file mode 100644
index 0000000..b711f5e
--- /dev/null
+++ b/frontend/pages/login/login.vue
@@ -0,0 +1,158 @@
+
+
+
+
+
+
+
+ 用户名
+
+
+
+
+ 密码
+
+
+
+
+
+
+
+
+ 立即注册
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/frontend/pages/register/register.vue b/frontend/pages/register/register.vue
new file mode 100644
index 0000000..75328be
--- /dev/null
+++ b/frontend/pages/register/register.vue
@@ -0,0 +1,141 @@
+
+
+
+
+
+
+
+
+ 用户名
+
+
+
+
+ 邮箱
+
+
+
+
+ 密码
+
+
+
+
+ 确认密码
+
+
+
+
+
+
+ 返回登录
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/frontend/static/logo.png b/frontend/static/logo.png
new file mode 100644
index 0000000000000000000000000000000000000000..b5771e209bb677e2ebd5ff766ad5ee11790f305a
GIT binary patch
literal 4023
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
SYs}WS&%*SCNx89m_ {
+ res.then((res) => {
+ if (!res) return resolve(res)
+ return res[0] ? reject(res[0]) : resolve(res[1])
+ });
+ });
+ },
+});
\ No newline at end of file
diff --git a/frontend/uni.scss b/frontend/uni.scss
new file mode 100644
index 0000000..b9249e9
--- /dev/null
+++ b/frontend/uni.scss
@@ -0,0 +1,76 @@
+/**
+ * 这里是uni-app内置的常用样式变量
+ *
+ * uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量
+ * 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App
+ *
+ */
+
+/**
+ * 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能
+ *
+ * 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件
+ */
+
+/* 颜色变量 */
+
+/* 行为相关颜色 */
+$uni-color-primary: #007aff;
+$uni-color-success: #4cd964;
+$uni-color-warning: #f0ad4e;
+$uni-color-error: #dd524d;
+
+/* 文字基本颜色 */
+$uni-text-color:#333;//基本色
+$uni-text-color-inverse:#fff;//反色
+$uni-text-color-grey:#999;//辅助灰色,如加载更多的提示信息
+$uni-text-color-placeholder: #808080;
+$uni-text-color-disable:#c0c0c0;
+
+/* 背景颜色 */
+$uni-bg-color:#ffffff;
+$uni-bg-color-grey:#f8f8f8;
+$uni-bg-color-hover:#f1f1f1;//点击状态颜色
+$uni-bg-color-mask:rgba(0, 0, 0, 0.4);//遮罩颜色
+
+/* 边框颜色 */
+$uni-border-color:#c8c7cc;
+
+/* 尺寸变量 */
+
+/* 文字尺寸 */
+$uni-font-size-sm:12px;
+$uni-font-size-base:14px;
+$uni-font-size-lg:16px;
+
+/* 图片尺寸 */
+$uni-img-size-sm:20px;
+$uni-img-size-base:26px;
+$uni-img-size-lg:40px;
+
+/* Border Radius */
+$uni-border-radius-sm: 2px;
+$uni-border-radius-base: 3px;
+$uni-border-radius-lg: 6px;
+$uni-border-radius-circle: 50%;
+
+/* 水平间距 */
+$uni-spacing-row-sm: 5px;
+$uni-spacing-row-base: 10px;
+$uni-spacing-row-lg: 15px;
+
+/* 垂直间距 */
+$uni-spacing-col-sm: 4px;
+$uni-spacing-col-base: 8px;
+$uni-spacing-col-lg: 12px;
+
+/* 透明度 */
+$uni-opacity-disabled: 0.3; // 组件禁用态的透明度
+
+/* 文章场景相关 */
+$uni-color-title: #2C405A; // 文章标题颜色
+$uni-font-size-title:20px;
+$uni-color-subtitle: #555555; // 二级标题颜色
+$uni-font-size-subtitle:26px;
+$uni-color-paragraph: #3F536E; // 文章段落颜色
+$uni-font-size-paragraph:15px;
--
Gitee
From b79d34603e5cec859b53ee504c6c6bf883b026bd Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=88=98=E8=B4=A4=E5=9B=BD?= <3482108437@qq.com>
Date: Mon, 11 Aug 2025 16:17:11 +0800
Subject: [PATCH 2/6] =?UTF-8?q?=E7=99=BB=E5=BD=95/=E6=B3=A8=E5=86=8C/ai?=
=?UTF-8?q?=E8=81=8A=E5=A4=A9/=E5=8E=86=E5=8F=B2=E5=AF=B9=E8=AF=9D?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
frontend/pages.json | 7 +
frontend/pages/chat/chat.vue | 211 +++++++++++++++++++++++----
frontend/pages/document/document.vue | 138 ++++++++++++++++++
frontend/pages/register/register.vue | 3 +-
frontend/txt.txt | 0
5 files changed, 329 insertions(+), 30 deletions(-)
create mode 100644 frontend/pages/document/document.vue
delete mode 100644 frontend/txt.txt
diff --git a/frontend/pages.json b/frontend/pages.json
index 03cf3d3..b79a08f 100644
--- a/frontend/pages.json
+++ b/frontend/pages.json
@@ -20,6 +20,13 @@
{
"navigationBarTitleText" : ""
}
+ },
+ {
+ "path" : "pages/document/document",
+ "style" :
+ {
+ "navigationBarTitleText" : ""
+ }
}
],
"globalStyle": {
diff --git a/frontend/pages/chat/chat.vue b/frontend/pages/chat/chat.vue
index a660afb..266defa 100644
--- a/frontend/pages/chat/chat.vue
+++ b/frontend/pages/chat/chat.vue
@@ -1,15 +1,30 @@
-
-
- AI 聊天
-
- 新对话
- 头像
-
+
+
+ 历史对话
+
+ AI聊天
+
+ 新对话
+ 头像
-
+
+
+
+
+
+
+
@@ -40,6 +55,12 @@ import { ref, onMounted, nextTick } from 'vue';
// 定义响应式数据
const inputText = ref('');
const chatHistory = ref([]);
+const showSidebar = ref(false);
+const historyList = ref([
+ { title: '对话1' },
+ { title: '对话2' },
+ { title: '对话3' }
+]);
// 发送消息
const sendMessage = () => {
@@ -64,7 +85,7 @@ const sendMessage = () => {
setTimeout(() => {
chatHistory.value.push({
isUser: false,
- content: '这是 AI 的回答',
+ content: '暂且未连接ai',
source: '文档链接',
relevance: '90%',
});
@@ -87,20 +108,51 @@ const newChat = () => {
const chooseDocument = async () => {
try {
const res = await uni.chooseFile({
- count: 1, // 默认9,设置为1表示一次只能选择一个文件
+ count: 1,
type: 'file',
});
console.log('Selected file:', res.tempFiles[0].name);
- // 可以在这里处理文件上传逻辑
} catch (error) {
console.error('选择文件失败', error);
}
};
-// 加载更多消息(示例函数)
+// 加载更多消息
const loadMoreMessages = () => {
console.log('加载更多消息');
};
+
+// 切换侧边栏显示/隐藏
+const toggleSidebar = () => {
+ showSidebar.value = !showSidebar.value;
+};
+
+// 删除历史记录
+const deleteHistory = (index) => {
+ uni.showModal({
+ title: '确认删除',
+ content: '确定要删除这条历史记录吗?',
+ success: (res) => {
+ if (res.confirm) {
+ historyList.value.splice(index, 1);
+ uni.showToast({
+ title: '删除成功',
+ icon: 'success'
+ });
+ }
+ }
+ });
+};
+
+// 加载历史记录
+const loadHistory = (item) => {
+ console.log('加载历史对话:', item);
+ uni.showToast({
+ title: '正在加载对话...',
+ icon: 'loading'
+ });
+ showSidebar.value = false;
+};
\ No newline at end of file
diff --git a/frontend/pages/register/register.vue b/frontend/pages/register/register.vue
index 75328be..d3b9dd0 100644
--- a/frontend/pages/register/register.vue
+++ b/frontend/pages/register/register.vue
@@ -58,7 +58,8 @@ const handleRegister = () => {
.register-card {
width: 300px;
- padding: 40px;] border-radius: 20px;
+ padding: 40px;
+ border-radius: 20px;
color: #a020f0; /* 使用紫色 */
}
diff --git a/frontend/txt.txt b/frontend/txt.txt
deleted file mode 100644
index e69de29..0000000
--
Gitee
From 764c14870aafd895c57d113c302b3fb0044ed1c5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=88=98=E8=B4=A4=E5=9B=BD?= <3482108437@qq.com>
Date: Tue, 12 Aug 2025 09:13:39 +0800
Subject: [PATCH 3/6] =?UTF-8?q?=E8=A1=A5=E9=BD=90=E7=99=BB=E5=BD=95?=
=?UTF-8?q?=E5=A4=B1=E8=B4=A5=E5=92=8C=E6=B3=A8=E5=86=8C=E5=AF=86=E7=A0=81?=
=?UTF-8?q?=E4=B8=8D=E4=B8=80=E8=87=B4=E7=9A=84=E5=BC=B9=E7=AA=97?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
frontend/pages/login/login.vue | 89 ++++++++++++++++++++++++----
frontend/pages/register/register.vue | 34 +++++++++--
2 files changed, 105 insertions(+), 18 deletions(-)
diff --git a/frontend/pages/login/login.vue b/frontend/pages/login/login.vue
index b711f5e..515cf11 100644
--- a/frontend/pages/login/login.vue
+++ b/frontend/pages/login/login.vue
@@ -10,33 +10,54 @@
用户名
-
+
密码
-
+
-
-
-
+
立即注册
+
+
+
+
+ 登录失败
+ 用户名或密码错误,请重试。
+
+
+
@@ -149,10 +170,54 @@ const handleLogin = () => {
color: #b0c4fa;
}
-.title {
- font-size: 32px;
+/* 登录失败弹窗样式 */
+.modal-overlay {
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ background: rgba(0, 0, 0, 0.5);
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ z-index: 1000;
+}
+
+.modal {
+ width: 80%;
+ max-width: 300px;
+ background: #fff;
+ border-radius: 10px;
+ padding: 20px;
+ text-align: center;
+}
+
+.modal-title {
+ font-size: 18px;
font-weight: bold;
- color: #a020f0; /* 调整为图中相似的紫色 */
- margin-bottom: 30px;
+ margin-bottom: 10px;
+}
+
+.modal-content {
+ font-size: 14px;
+ color: #333;
+ margin-bottom: 20px;
+}
+
+.modal-btn {
+ width: 100%;
+ height: 40px;
+ background: linear-gradient(135deg, #e6e6fa, #b0c4fa);
+ color: #fff;
+ border: none;
+ border-radius: 20px;
+ font-size: 16px;
+ cursor: pointer;
+ transition: background 0.3s;
+}
+
+.modal-btn:hover {
+ background: linear-gradient(135deg, #b0c4fa, #e6e6fa);
}
\ No newline at end of file
diff --git a/frontend/pages/register/register.vue b/frontend/pages/register/register.vue
index d3b9dd0..c5d5b61 100644
--- a/frontend/pages/register/register.vue
+++ b/frontend/pages/register/register.vue
@@ -9,22 +9,22 @@
用户名
-
+
邮箱
-
+
密码
-
+
确认密码
-
+
@@ -40,14 +40,36 @@
\ No newline at end of file
diff --git a/frontend/pages/register/register.vue b/frontend/pages/register/register.vue
index d3b9dd0..7b4ce64 100644
--- a/frontend/pages/register/register.vue
+++ b/frontend/pages/register/register.vue
@@ -9,22 +9,22 @@
用户名
-
+
邮箱
-
+
密码
-
+
确认密码
-
+
@@ -39,11 +39,33 @@
diff --git a/frontend/stores/User.js b/frontend/stores/User.js
new file mode 100644
index 0000000..57f9e3e
--- /dev/null
+++ b/frontend/stores/User.js
@@ -0,0 +1,24 @@
+import {defineStore} from "pinia"
+import { ref } from "vue"
+
+export const useUserStore = defineStore("User",()=>{
+ const token = ref(uni.getStorageSync("token") || "")
+ const userId = ref('')
+
+ const setToken = (newToken) => {
+ token.value = newToken
+ uni.setStorageSync('token', newToken)
+ }
+
+
+ const setUserId = (newUserId) => {
+ userId.value = newUserId
+ }
+
+ const clearToken = () => {
+ token.value = ''
+ uni.removeStorageSync('token')
+ }
+
+ return {setToken,setUserId,clearToken}
+})
\ No newline at end of file
diff --git a/frontend/vue.config.js b/frontend/vue.config.js
new file mode 100644
index 0000000..5e00501
--- /dev/null
+++ b/frontend/vue.config.js
@@ -0,0 +1,13 @@
+module.exports = {
+ devServer: {
+ proxy: {
+ '/api': { // 代理所有以/api开头的请求
+ target: 'http://localhost:5101', // 后端服务器地址
+ changeOrigin: true,
+ pathRewrite: {
+ '^/api': '/api' // 将路径中的/api保留
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
--
Gitee
From 2ee765db458d3bcb47641ac55aa1a5e47e3a3f88 Mon Sep 17 00:00:00 2001
From: xiaoyaolanren2 <18033910316@163.com>
Date: Tue, 12 Aug 2025 17:17:46 +0800
Subject: [PATCH 5/6] =?UTF-8?q?=E5=AE=8C=E6=88=90=E5=89=8D=E7=AB=AF?=
=?UTF-8?q?=E9=A1=B5=E9=9D=A2=E9=80=BB=E8=BE=91=E5=8F=8A=E9=99=A4=E4=BA=86?=
=?UTF-8?q?=E6=B5=81=E5=BC=8F=E4=BC=A0=E8=BE=93=E4=BB=A5=E5=A4=96=E7=9A=84?=
=?UTF-8?q?api=E5=AF=B9=E6=8E=A5=EF=BC=88=E9=83=A8=E5=88=86=E5=89=8D?=
=?UTF-8?q?=E7=AB=AF=E5=8A=9F=E8=83=BD=E5=B0=9A=E6=9C=AA=E5=AE=9E=E7=8E=B0?=
=?UTF-8?q?=EF=BC=89?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
frontend/api/chat.js | 74 +-
frontend/api/config/index.js | 36 +-
frontend/pages/chat/chat.vue | 1047 +++++++++++++++++---------
frontend/pages/login/login.vue | 24 +-
frontend/pages/register/register.vue | 13 +-
frontend/stores/User.js | 9 +-
6 files changed, 793 insertions(+), 410 deletions(-)
diff --git a/frontend/api/chat.js b/frontend/api/chat.js
index df44683..36e7f8a 100644
--- a/frontend/api/chat.js
+++ b/frontend/api/chat.js
@@ -1,16 +1,72 @@
-import { useRequest } from "./config";
-const {request} = useRequest()
+import {
+ useRequest
+} from "./config";
-const createChat = async (chatDto)=>{
+const {
+ request
+} = useRequest()
+
+export function useChatApi() {
+
+ const createChat = async (chatDto) => {
+
+
+ var res =await request({
+ url: '/AIQuestions/user',
+ method: 'POST',
+ data: chatDto,
+ showLoading: true
+ })
+
+ return res
+ }
+
+ const getChat = async (id) => {
+
+ var res =await request({
+ url: `/AIQuestions/user/${id}`,
+ method: 'GET',
+ data: null,
+ showLoading: true
+ })
+
+ return res
+ }
+
+ const getAllMessage = async (id)=> {
+ var res =await request({
+ url: `/AIQuestions/user/message/${id}`,
+ method: 'GET',
+ data: null,
+ showLoading: true
+ })
+
+ return res
+ }
+ const deleteChat = async (id) => {
+ var res = await request({
+ url:`/AIQuestions/user/${id}`,
+ method:'DELETE',
+ data:null,
+ showLoading:true
+ })
- var res = request({
- url: '/AIQuestions/user',
- method:'POST',
- data:chatDto,
- showLoading:true
- })
+ return res
+ }
+
+ const conversation = async (id) => {
+ var res = await request({
+ url:`/AIQuestions/user/${id}`,
+ method:'POST',
+ data:null,
+ showLoading:true
+ })
+
+ return res
+ }
+ return {conversation,createChat,deleteChat,getAllMessage,getChat}
}
\ No newline at end of file
diff --git a/frontend/api/config/index.js b/frontend/api/config/index.js
index 02d64c4..729354d 100644
--- a/frontend/api/config/index.js
+++ b/frontend/api/config/index.js
@@ -70,7 +70,7 @@ export function useRequest() {
return response.data
} catch (error) {
// 统一错误处理
- handleRequestError(error, mergedConfig)
+ // handleRequestError(error, mergedConfig)
throw error
} finally {
if (mergedConfig.showLoading) {
@@ -105,24 +105,24 @@ function handleUnauthorized() {
// #endif
}
-// 错误处理
-function handleRequestError(error, config) {
- console.error('请求错误:', error)
+// // 错误处理
+// function handleRequestError(error, config) {
+// console.error('请求错误:', error)
- // 不显示静默请求的错误
- if (config.silent) return
+// // 不显示静默请求的错误
+// if (config.silent) return
- let message = '网络请求失败'
+// let message = '网络请求失败'
- if (error.errMsg.includes('timeout')) {
- message = '请求超时,请检查网络'
- } else if (error.errMsg.includes('network')) {
- message = '网络不可用,请检查连接'
- }
+// if (error.errMsg.includes('timeout')) {
+// message = '请求超时,请检查网络'
+// } else if (error.errMsg.includes('network')) {
+// message = '网络不可用,请检查连接'
+// }
- uni.showToast({
- title: message,
- icon: 'none',
- duration: 3000
- })
-}
\ No newline at end of file
+// uni.showToast({
+// title: message,
+// icon: 'none',
+// duration: 3000
+// })
+// }
\ No newline at end of file
diff --git a/frontend/pages/chat/chat.vue b/frontend/pages/chat/chat.vue
index 266defa..e9d4600 100644
--- a/frontend/pages/chat/chat.vue
+++ b/frontend/pages/chat/chat.vue
@@ -1,378 +1,685 @@
-
-
-
-
- 历史对话
-
- AI聊天
-
- 新对话
- 头像
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ msg.content }}
-
-
- {{ msg.content }}
- 来源:{{ msg.source }}
- 相关度:{{ msg.relevance }}
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+ 历史对话
+
+ AI聊天
+
+ 新对话
+ 头像
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ msg.content }}
+
+
+
+ {{ msg.content }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/frontend/pages/login/login.vue b/frontend/pages/login/login.vue
index 89db9a4..0686c71 100644
--- a/frontend/pages/login/login.vue
+++ b/frontend/pages/login/login.vue
@@ -29,14 +29,14 @@
-
-
+