diff --git a/Debate_backend/README.md b/Debate_backend/README.md index 855f768..d3a4caa 100644 --- a/Debate_backend/README.md +++ b/Debate_backend/README.md @@ -337,14 +337,7 @@ Authorization: 登录接口返回的token "success": true, "code": 200, "message": "操作成功", - "data": { - "conversation": { - "id": 1, - "type": "debate", - "title": "对话标题", - "createTime": "2023-01-01 12:00:00" - }, - "records": [ + "data": { "id": 1, "userMessage": "用户消息", @@ -352,8 +345,6 @@ Authorization: 登录接口返回的token "sequence": 1, "createTime": "2023-01-01 12:00:00" } - ] - } } ``` - 调用时机:用户点击辩论历史记录列表中的某一项时调用 @@ -374,7 +365,7 @@ Authorization: 登录接口返回的token "success": true, "code": 200, "message": "操作成功", - "data": { + "data": [ { "id": 1, @@ -384,7 +375,7 @@ Authorization: 登录接口返回的token "createTime": "2023-01-01 12:00:00" } ] - } + } ``` - 调用时机:用户点击立论历史记录列表中的某一项时调用 diff --git a/Debate_backend/src/main/java/com/learning/newdemo/controller/WxAIController.java b/Debate_backend/src/main/java/com/learning/newdemo/controller/WxAIController.java index 5966719..851206e 100644 --- a/Debate_backend/src/main/java/com/learning/newdemo/controller/WxAIController.java +++ b/Debate_backend/src/main/java/com/learning/newdemo/controller/WxAIController.java @@ -50,7 +50,7 @@ public class WxAIController { if (argument == null) { return Result.error("立论获取失败"); } - + log.info("test",argument); long relatedConversationId = wxArgumentService.UpdateArgument(conversationId, topic, stance, argument, topic + stance, token); Map data = new HashMap<>(); diff --git a/Debate_backend/src/main/java/com/learning/newdemo/controller/WxConversationController.java b/Debate_backend/src/main/java/com/learning/newdemo/controller/WxConversationController.java index aedd1dc..5a3398b 100644 --- a/Debate_backend/src/main/java/com/learning/newdemo/controller/WxConversationController.java +++ b/Debate_backend/src/main/java/com/learning/newdemo/controller/WxConversationController.java @@ -41,6 +41,7 @@ public class WxConversationController { @GetMapping("/list") public Result> getConversationList(@RequestHeader("Authorization") String token){ + log.info("test111:",token); try{ int userId = jwtUtil.getUserIdFromToken(token); diff --git a/Debate_backend/src/main/java/com/learning/newdemo/util/JwtUtil.java b/Debate_backend/src/main/java/com/learning/newdemo/util/JwtUtil.java index 5819b68..687c7b4 100644 --- a/Debate_backend/src/main/java/com/learning/newdemo/util/JwtUtil.java +++ b/Debate_backend/src/main/java/com/learning/newdemo/util/JwtUtil.java @@ -6,6 +6,7 @@ import io.jsonwebtoken.Jwts; import io.jsonwebtoken.SignatureAlgorithm; import io.jsonwebtoken.io.Decoders; import io.jsonwebtoken.security.Keys; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; @@ -17,6 +18,7 @@ import java.util.Map; /** * JWT工具类 */ +@Slf4j @Component public class JwtUtil { @@ -45,6 +47,7 @@ public class JwtUtil { * 从token中获取openid */ public int getUserIdFromToken(String bearerToken) { + log.info("test:",bearerToken); int userId; try { String token = extractToken(bearerToken); @@ -73,6 +76,7 @@ public class JwtUtil { * 从token中获取JWT中的负载 */ private Claims getClaimsFromToken(String token) { + log.info("111111:",token); Claims claims = null; try { // 使用正确的方法: parseClaimsJws而不是parseClaimsJwt diff --git a/Debate_backend/src/main/resources/application.yml b/Debate_backend/src/main/resources/application.yml index d727bc1..35acca6 100644 --- a/Debate_backend/src/main/resources/application.yml +++ b/Debate_backend/src/main/resources/application.yml @@ -5,7 +5,7 @@ spring: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/wx_miniapp?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai username: root - password: 1234 + password: 123456 mybatis: mapper-locations: classpath:mapper/*.xml diff --git a/Debate_backend/target/classes/application.yml b/Debate_backend/target/classes/application.yml index d727bc1..35acca6 100644 --- a/Debate_backend/target/classes/application.yml +++ b/Debate_backend/target/classes/application.yml @@ -5,7 +5,7 @@ spring: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/wx_miniapp?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai username: root - password: 1234 + password: 123456 mybatis: mapper-locations: classpath:mapper/*.xml diff --git a/Debate_backend/target/classes/com/learning/newdemo/Dto/ArgumentDetailDTO.class b/Debate_backend/target/classes/com/learning/newdemo/Dto/ArgumentDetailDTO.class index cc984ff..d2e3aff 100644 Binary files a/Debate_backend/target/classes/com/learning/newdemo/Dto/ArgumentDetailDTO.class and b/Debate_backend/target/classes/com/learning/newdemo/Dto/ArgumentDetailDTO.class differ diff --git a/Debate_backend/target/classes/com/learning/newdemo/Dto/ConversationDTO.class b/Debate_backend/target/classes/com/learning/newdemo/Dto/ConversationDTO.class index e9ee66f..6592c1e 100644 Binary files a/Debate_backend/target/classes/com/learning/newdemo/Dto/ConversationDTO.class and b/Debate_backend/target/classes/com/learning/newdemo/Dto/ConversationDTO.class differ diff --git a/Debate_backend/target/classes/com/learning/newdemo/Dto/DebateDetailDTO.class b/Debate_backend/target/classes/com/learning/newdemo/Dto/DebateDetailDTO.class index 07833f4..f298017 100644 Binary files a/Debate_backend/target/classes/com/learning/newdemo/Dto/DebateDetailDTO.class and b/Debate_backend/target/classes/com/learning/newdemo/Dto/DebateDetailDTO.class differ diff --git a/Debate_backend/target/classes/com/learning/newdemo/Dto/ReviewDetailDTO.class b/Debate_backend/target/classes/com/learning/newdemo/Dto/ReviewDetailDTO.class index 13407e5..7b9cdbe 100644 Binary files a/Debate_backend/target/classes/com/learning/newdemo/Dto/ReviewDetailDTO.class and b/Debate_backend/target/classes/com/learning/newdemo/Dto/ReviewDetailDTO.class differ diff --git a/Debate_backend/target/classes/com/learning/newdemo/controller/WxAIController.class b/Debate_backend/target/classes/com/learning/newdemo/controller/WxAIController.class index d53562c..038cd30 100644 Binary files a/Debate_backend/target/classes/com/learning/newdemo/controller/WxAIController.class and b/Debate_backend/target/classes/com/learning/newdemo/controller/WxAIController.class differ diff --git a/Debate_backend/target/classes/com/learning/newdemo/controller/WxConversationController.class b/Debate_backend/target/classes/com/learning/newdemo/controller/WxConversationController.class index 5b40b45..c846b65 100644 Binary files a/Debate_backend/target/classes/com/learning/newdemo/controller/WxConversationController.class and b/Debate_backend/target/classes/com/learning/newdemo/controller/WxConversationController.class differ diff --git a/Debate_backend/target/classes/com/learning/newdemo/entity/WxArgument.class b/Debate_backend/target/classes/com/learning/newdemo/entity/WxArgument.class index 10f0b63..0fe7881 100644 Binary files a/Debate_backend/target/classes/com/learning/newdemo/entity/WxArgument.class and b/Debate_backend/target/classes/com/learning/newdemo/entity/WxArgument.class differ diff --git a/Debate_backend/target/classes/com/learning/newdemo/entity/WxConversation.class b/Debate_backend/target/classes/com/learning/newdemo/entity/WxConversation.class index 9514dd3..34b0595 100644 Binary files a/Debate_backend/target/classes/com/learning/newdemo/entity/WxConversation.class and b/Debate_backend/target/classes/com/learning/newdemo/entity/WxConversation.class differ diff --git a/Debate_backend/target/classes/com/learning/newdemo/entity/WxDebate.class b/Debate_backend/target/classes/com/learning/newdemo/entity/WxDebate.class index 6d756cb..63757aa 100644 Binary files a/Debate_backend/target/classes/com/learning/newdemo/entity/WxDebate.class and b/Debate_backend/target/classes/com/learning/newdemo/entity/WxDebate.class differ diff --git a/Debate_backend/target/classes/com/learning/newdemo/entity/WxReview.class b/Debate_backend/target/classes/com/learning/newdemo/entity/WxReview.class index b8cbbbb..d593cb9 100644 Binary files a/Debate_backend/target/classes/com/learning/newdemo/entity/WxReview.class and b/Debate_backend/target/classes/com/learning/newdemo/entity/WxReview.class differ diff --git a/Debate_backend/target/classes/com/learning/newdemo/service/impl/WxUserServiceImpl.class b/Debate_backend/target/classes/com/learning/newdemo/service/impl/WxUserServiceImpl.class index 2e9449a..e1168b7 100644 Binary files a/Debate_backend/target/classes/com/learning/newdemo/service/impl/WxUserServiceImpl.class and b/Debate_backend/target/classes/com/learning/newdemo/service/impl/WxUserServiceImpl.class differ diff --git a/Debate_backend/target/classes/com/learning/newdemo/util/JwtUtil.class b/Debate_backend/target/classes/com/learning/newdemo/util/JwtUtil.class index 02c4c6e..b696dea 100644 Binary files a/Debate_backend/target/classes/com/learning/newdemo/util/JwtUtil.class and b/Debate_backend/target/classes/com/learning/newdemo/util/JwtUtil.class differ diff --git a/Debate_front/src/components/ArgumentCom.vue b/Debate_front/src/components/ArgumentCom.vue index b01840b..1506653 100644 --- a/Debate_front/src/components/ArgumentCom.vue +++ b/Debate_front/src/components/ArgumentCom.vue @@ -24,6 +24,11 @@ >AI辅助构建辩论框架,智能生成论点与论据 + + + + + + + + + diff --git a/Debate_front/src/components/DebateCom.vue b/Debate_front/src/components/DebateCom.vue index 8a2c877..2c464c0 100644 --- a/Debate_front/src/components/DebateCom.vue +++ b/Debate_front/src/components/DebateCom.vue @@ -27,6 +27,11 @@ >与AI进行实时辩论对练,提升应变能力 + + + + + + + @@ -124,9 +137,11 @@ import { useArgumentStore } from "../stores/ArgumentStore"; import { useDebateStore } from "../stores/DebateStore"; import Popup from "./Popup.vue"; +import ConversationHistory from "./ConversationHistory.vue"; +import { useTokenStore } from "../stores/tokenStore"; export default { - components: { Popup }, + components: { Popup,ConversationHistory }, props: { argument: { type: Object, @@ -136,11 +151,21 @@ export default { mounted() { const pinia = this.$pinia; const store = useArgumentStore(pinia); - this.content = store.selectedArgument.content; + if(store.selectedArgument.content)this.content = store.selectedArgument.content; + + this.getHistoryList(); + this.conversationId = useDebateStore().conversationId; + console.log("conversationId:", this.conversationId); + + this.messages = useDebateStore().conversation; }, data() { return { + conversationId: -1, + showHistory: false, + chatHistory: ["test1", "test2"], + showSheet:false, StoreHistory:"", input: "", @@ -166,6 +191,104 @@ export default { }; }, methods: { + async getHistoryList() { + return new Promise((resolve, reject) => { + const token = useTokenStore().token.content; + + console.log("token:", token); + uni.request({ + url: "http://localhost:8080/api/conversation/list", // 修改为正确的URL + method: "GET", // 修改请求方法为GET + header: { + Authorization: "Bearer " + token, + }, + success: (res) => { + console.log("res:", res); + if (res.statusCode === 200 && res.data.code === 200) { + // 过滤出 type === "argument" 的数据 + const debateList = res.data.data.filter( + (item) => item.type === "debate" + ); + + // 赋值给 chatHistory + this.chatHistory = debateList; + + // 可选:resolve 第一个结果或提示信息 + if (debateList.length > 0) { + resolve(debateList); // 或者 resolve(argumentList[0]) 如果你只需要第一个 + } else { + resolve("没有找到类型为 argument 的对话"); + } + } else { + reject("请求失败:" + (res.data.message || "未知错误")); + } + }, + fail: (err) => { + reject("请求失败:" + err.errMsg); + }, + }); + }); + }, + createNew() { + this.messages = [ + { + role: "ai", + content: + "哈喽~ 我是辩论助手,很高兴为你服务!请告诉我你想立论的立场和题目。", + }, + ]; + console.log("createNew"); + + this.conversationId = -1; + + useDebateStore().setConversationId(-1); + + useDebateStore().setConversation(this.messages); + }, + handleSelect(conversationId) { + console.log("选中了历史记录 id:", conversationId); + this.showHistory = false; + + return new Promise((resolve, reject) => { + const token = useTokenStore().token.content; + + console.log("token:", token); + uni.request({ + url: `http://localhost:8080/api/conversation/debate/${conversationId}`, // 使用模板字符串插入 conversationId + method: "GET", + header: { + Authorization: "Bearer " + token, + }, + success: (res) => { + console.log("res:", res); + if (res.statusCode === 200 && res.data.code === 200) { + this.messages=[]; + for(let item of res.data.data){ + this.messages.push({ + role:"user", + content:item.userMessage + }); + this.messages.push({ + role:"ai", + content:item.content + }); + } + useDebateStore().setConversation(this.messages); + + this.conversationId = conversationId; + + useDebateStore().setConversationId(conversationId); + } else { + reject("请求失败:" + (res.data.message || "未知错误")); + } + }, + fail: (err) => { + reject("请求失败:" + err.errMsg); + }, + }); + }); + }, + handleSheetClick() { const pinia = this.$pinia; const store = useDebateStore(pinia); @@ -188,21 +311,6 @@ export default { this.StoreHistory = history; this.showSheet = true; - // console.log(history); - - // uni.showActionSheet({ - // itemList: ["进行复盘"], - // success: (res) => { - // if (res.tapIndex === 0) { - // const pinia = this.$pinia; - // const store = useDebateStore(pinia); - // store.setDebate(history); - // this.$emit("start-review", "debate"); // 通知父组件 - - // // console.log("开始复盘:",store.selectedDebate.content); - // } - // }, - // }); }, // 切换卡片展开/收缩状态 toggleCard() { @@ -285,27 +393,44 @@ export default { this.content = ""; return new Promise((resolve, reject) => { console.log("callAI:", history, content); + const token = useTokenStore().token.content; + if (!token) { + reject("未登录,请先登录"); + return; + } uni.request({ url: "http://localhost:8080/api/ai/debate", method: "POST", header: { "Content-Type": "application/json", + Authorization: "Bearer " + token, // 添加认证头 }, data: { - history: history, - content: content, + conversationId: this.conversationId, + // history: history, + userMessage: content, }, success: (res) => { - console.log("res:", res); - let reviewJson = JSON.parse(res.data.data.debate); - this.scrollToBottom(); + console.log("API响应:", res); + if (res.statusCode === 200 && res.data.code === 200) { - resolve( - reviewJson.choices[0].message.content || "AI 没有返回有效内容" - ); + const responseData = res.data.data; + + console.log("responseData:", responseData); + + // 更新会话ID(如果是新会话) + if (this.conversationId == -1) { + this.conversationId = responseData.conversationId; + console.log("更新会话ID为:", responseData.id); + this.getHistoryList(); + + useDebateStore().setConversationId(this.conversationId); + } + + resolve(responseData.content); } else { - reject("请求失败:" + (res.data.msg || "未知错误")); + reject("请求失败:" + (res.data.message || "未知错误")); } }, fail: (err) => { diff --git a/Debate_front/src/components/HomeCom.vue b/Debate_front/src/components/HomeCom.vue index 9b54737..5f69617 100644 --- a/Debate_front/src/components/HomeCom.vue +++ b/Debate_front/src/components/HomeCom.vue @@ -2,7 +2,12 @@ - + @@ -24,33 +29,50 @@ 与AI进行实时辩论对练,提升应变能力 - + - + 立论助手 - AI辅助构建辩论框架,智能生成论点与论据 + AI辅助构建辩论框架,智能生成论点与论据 - + - + 复盘分析 分析辩论过程,提供改进建议与优化方向 - + @@ -61,21 +83,34 @@ 最近活动 查看更多 - + - + - + {{ activity.title }} - {{ activity.time }} + {{ activity.updateTime }} - + @@ -83,33 +118,106 @@ + + + + \ No newline at end of file + diff --git a/Debate_front/src/components/ReviewCom.vue b/Debate_front/src/components/ReviewCom.vue index 3d7b0fc..2aebbfc 100644 --- a/Debate_front/src/components/ReviewCom.vue +++ b/Debate_front/src/components/ReviewCom.vue @@ -27,6 +27,11 @@ >分析辩论过程,提供改进建议与优化方向 + + + + + + +