diff --git a/Debate_backend/src/main/java/com/learning/newdemo/service/impl/WxReviewServiceImpl.java b/Debate_backend/src/main/java/com/learning/newdemo/service/impl/WxReviewServiceImpl.java index 4bac6c2..605bc1e 100644 --- a/Debate_backend/src/main/java/com/learning/newdemo/service/impl/WxReviewServiceImpl.java +++ b/Debate_backend/src/main/java/com/learning/newdemo/service/impl/WxReviewServiceImpl.java @@ -64,7 +64,7 @@ public class WxReviewServiceImpl implements WxReviewService { + "}," + "{" + "\"role\": \"" + roleUser + "\"," - + "\"content\": \"" + content + "\"" + + "\"content\": \"" + escapeJson(content) + "\"" + "}" + "]," + "\"model\": \"" + model + "\"," @@ -106,11 +106,25 @@ public class WxReviewServiceImpl implements WxReviewService { // 工具方法:转义 JSON 字符串中的特殊字符 private String escapeJson(String input) { if (input == null) return ""; - return input.replace("\\", "\\\\") - .replace("\"", "\\\"") - .replace("\n", "\\n") - .replace("\r", "\\r") - .replace("\t", "\\t"); + StringBuilder escaped = new StringBuilder(); + for (char c : input.toCharArray()) { + switch (c) { + case '"': escaped.append("\\\""); break; + case '\\': escaped.append("\\\\"); break; + case '\b': escaped.append("\\b"); break; + case '\f': escaped.append("\\f"); break; + case '\n': escaped.append("\\n"); break; + case '\r': escaped.append("\\r"); break; + case '\t': escaped.append("\\t"); break; + default: + if (c <= 0x1F) { // 处理其他控制字符 + escaped.append(String.format("\\u%04x", (int) c)); + } else { + escaped.append(c); + } + } + } + return escaped.toString(); } @Override diff --git a/Debate_front/package-lock.json b/Debate_front/package-lock.json index bb79c64..2942ba2 100644 --- a/Debate_front/package-lock.json +++ b/Debate_front/package-lock.json @@ -23,7 +23,11 @@ "@dcloudio/uni-mp-weixin": "3.0.0-4040520250104002", "@dcloudio/uni-mp-xhs": "3.0.0-4040520250104002", "@dcloudio/uni-quickapp-webview": "3.0.0-4040520250104002", + "markdown-it": "^14.1.0", + "marked": "^15.0.12", + "mini-html-parser2": "^0.3.0", "pinia": "^3.0.2", + "towxml": "^3.0.6", "vue": "^3.5.15", "vue-i18n": "^9.1.9" }, @@ -5670,6 +5674,12 @@ "node_modules/dom-walk": { "version": "0.1.2" }, + "node_modules/domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmmirror.com/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "license": "BSD-2-Clause" + }, "node_modules/domexception": { "version": "2.0.1", "dev": true, @@ -5691,6 +5701,15 @@ "node": ">=8" } }, + "node_modules/domhandler": { + "version": "2.4.2", + "resolved": "https://registry.npmmirror.com/domhandler/-/domhandler-2.4.2.tgz", + "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "1" + } + }, "node_modules/dunder-proto": { "version": "1.0.1", "dev": true, @@ -6276,6 +6295,15 @@ "node": ">= 0.6" } }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmmirror.com/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, "node_modules/execa": { "version": "5.1.1", "dev": true, @@ -7995,6 +8023,15 @@ "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, + "node_modules/linkify-it": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", + "license": "MIT", + "dependencies": { + "uc.micro": "^2.0.0" + } + }, "node_modules/load-bmfont": { "version": "1.4.2", "license": "MIT", @@ -8148,6 +8185,41 @@ "tmpl": "1.0.5" } }, + "node_modules/markdown-it": { + "version": "14.1.0", + "resolved": "https://registry.npmmirror.com/markdown-it/-/markdown-it-14.1.0.tgz", + "integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==", + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1", + "entities": "^4.4.0", + "linkify-it": "^5.0.0", + "mdurl": "^2.0.0", + "punycode.js": "^2.3.1", + "uc.micro": "^2.1.0" + }, + "bin": { + "markdown-it": "bin/markdown-it.mjs" + } + }, + "node_modules/markdown-it/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "license": "Python-2.0" + }, + "node_modules/marked": { + "version": "15.0.12", + "resolved": "https://registry.npmmirror.com/marked/-/marked-15.0.12.tgz", + "integrity": "sha512-8dD6FusOQSrpv9Z1rdNMdlSgQOIP880DHqnohobOmYLElGEqAL/JvxvuxZO16r4HtjTlfPRDC1hbvxC9dPN2nA==", + "license": "MIT", + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 18" + } + }, "node_modules/math-intrinsics": { "version": "1.1.0", "dev": true, @@ -8156,6 +8228,12 @@ "node": ">= 0.4" } }, + "node_modules/mdurl": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==", + "license": "MIT" + }, "node_modules/media-typer": { "version": "0.3.0", "dev": true, @@ -8271,6 +8349,22 @@ "dom-walk": "^0.1.0" } }, + "node_modules/mini-html-parser2": { + "version": "0.3.0", + "resolved": "https://registry.npmmirror.com/mini-html-parser2/-/mini-html-parser2-0.3.0.tgz", + "integrity": "sha512-W4x1MCmtlnAH5M9qQ1WbRn+hTvv7bdrJx4VI+6SD0MUZatW/6K7v213Aidx7VDQmSKoRv+iAn5TswJnesOs71Q==", + "dependencies": { + "domhandler": "^2.4.2", + "entities": "^1.1.1", + "events": "^3.0.0" + } + }, + "node_modules/mini-html-parser2/node_modules/entities": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", + "license": "BSD-2-Clause" + }, "node_modules/minimatch": { "version": "3.1.2", "dev": true, @@ -8965,6 +9059,15 @@ "node": ">=6" } }, + "node_modules/punycode.js": { + "version": "2.3.1", + "resolved": "https://registry.npmmirror.com/punycode.js/-/punycode.js-2.3.1.tgz", + "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/qrcode-reader": { "version": "1.0.4", "license": "Apache-2.0" @@ -10137,6 +10240,47 @@ "node": ">= 4.0.0" } }, + "node_modules/towxml": { + "version": "3.0.6", + "resolved": "https://registry.npmmirror.com/towxml/-/towxml-3.0.6.tgz", + "integrity": "sha512-AiEEyTYemk3xLlypfihR+vr/slyjvQZvZbGGXQdRklwYY8dbDEGUDopFwAtfW7tVkOc09rfZ7yu040vjJU84cw==", + "license": "MIT", + "dependencies": { + "fs-extra": "^8.1.0" + } + }, + "node_modules/towxml/node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/towxml/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "license": "MIT", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/towxml/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmmirror.com/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, "node_modules/tr46": { "version": "2.1.0", "dev": true, @@ -10191,6 +10335,12 @@ "is-typedarray": "^1.0.0" } }, + "node_modules/uc.micro": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/uc.micro/-/uc.micro-2.1.0.tgz", + "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==", + "license": "MIT" + }, "node_modules/ufo": { "version": "1.5.4", "license": "MIT" diff --git a/Debate_front/package.json b/Debate_front/package.json index fe97de9..bb73893 100644 --- a/Debate_front/package.json +++ b/Debate_front/package.json @@ -25,7 +25,11 @@ "@dcloudio/uni-mp-weixin": "3.0.0-4040520250104002", "@dcloudio/uni-mp-xhs": "3.0.0-4040520250104002", "@dcloudio/uni-quickapp-webview": "3.0.0-4040520250104002", + "markdown-it": "^14.1.0", + "marked": "^15.0.12", + "mini-html-parser2": "^0.3.0", "pinia": "^3.0.2", + "towxml": "^3.0.6", "vue": "^3.5.15", "vue-i18n": "^9.1.9" }, diff --git a/Debate_front/project.config.json b/Debate_front/project.config.json index 76458c0..a08be17 100644 --- a/Debate_front/project.config.json +++ b/Debate_front/project.config.json @@ -1,13 +1,20 @@ { - "miniprogramRoot": "", + "miniprogramRoot": "./", "libVersion": "3.0.2", "appid": "wxdc5c8df2ec2453e4", "compileType": "miniprogram", "packOptions": { - "ignore": [], + "ignore": [{ "type": "folder", "value": "node_modules" }], "include": [] }, "setting": { + "packNpmManmediately": true, + "packNpmRelationList": [ + { + "packageJsonPath": "./package.json", + "miniprogramNpmDistDir": "./" + } + ], "babelSetting": { "ignore": [], "disablePlugins": [], @@ -19,4 +26,4 @@ "tabIndent": "insertSpaces", "tabSize": 2 } -} \ No newline at end of file +} diff --git a/Debate_front/src/components/DebateCom.vue b/Debate_front/src/components/DebateCom.vue index 16713a8..016d2f6 100644 --- a/Debate_front/src/components/DebateCom.vue +++ b/Debate_front/src/components/DebateCom.vue @@ -2,12 +2,7 @@ - + @@ -15,17 +10,12 @@ - + 模拟辩论 - 与AI进行实时辩论对练,提升应变能力 + 与AI进行实时辩论对练,提升应变能力 @@ -33,14 +23,10 @@ - + @@ -48,32 +34,17 @@ - + {{ topic }} - - + + AI @@ -91,22 +62,41 @@ + + + + + + 选择辩论轮数 + + + + + + + {{ debateRounds }}回合 + + + + + + {{ currentRound }}/{{ debateRounds }} + + + + + + + + -