Commit 6bf7630a authored by 姜耀祖's avatar 姜耀祖

前端修改

parent 72adaf97
Pipeline #21063 passed with stages
in 3 minutes and 18 seconds
......@@ -421,177 +421,25 @@ public class LangChainController {
new Thread(() -> {
try {
// 模拟大模型分次生成回复
String[] chunks = {
"思考中...'}",
"你好!'}",
"这是流式'}",
"回复的演示'}",
"完整回答:关于\\\"氨基酸的活动阿\\\"的回复'}",
"是的教案设计'}",
"按实际到手的你'}",
"啊实打实的就按设你的'}",
"爱神的箭阿三电脑'}",
"按设计大奖十大'}",
"按实际到手的你'}",
"啊实打实的就按设你的'}",
"爱神的箭阿三电脑'}",
"按设计大奖十大'}",
"按实际到手的你'}",
"啊实打实的就按设你的'}",
"爱神的箭阿三电脑'}",
"按设计大奖十大'}",
"按实际到手的你'}",
"啊实打实的就按设你的'}",
"爱神的箭阿三电脑'}",
"按设计大奖十大'}",
"按实际到手的你'}",
"啊实打实的就按设你的'}",
"爱神的箭阿三电脑'}",
"按设计大奖十大'}",
"按实际到手的你'}",
"啊实打实的就按设你的'}",
"爱神的箭阿三电脑'}",
"按设计大奖十大'}",
"按实际到手的你'}",
"啊实打实的就按设你的'}",
"爱神的箭阿三电脑'}",
"按设计大奖十大'}",
"啊实打实的就按设你的'}",
"爱神的箭阿三电脑'}",
"按设计大奖十大'}",
"按实际到手的你'}",
"啊实打实的就按设你的'}",
"爱神的箭阿三电脑'}",
"按设计大奖十大'}",
"按实际到手的你'}",
"啊实打实的就按设你的'}",
"爱神的箭阿三电脑'}",
"按设计大奖十大'}",
"按实际到手的你'}",
"啊实打实的就按设你的'}",
"爱神的箭阿三电脑'}",
"按设计大奖十大'}",
"按实际到手的你'}",
"啊实打实的就按设你的'}",
"爱神的箭阿三电脑'}",
"按设计大奖十大'}",
"啊实打实的就按设你的'}",
"爱神的箭阿三电脑'}",
"按设计大奖十大'}",
"按实际到手的你'}",
"啊实打实的就按设你的'}",
"爱神的箭阿三电脑'}",
"按设计大奖十大'}",
"按实际到手的你'}",
"啊实打实的就按设你的'}",
"爱神的箭阿三电脑'}",
"按设计大奖十大'}",
"按实际到手的你'}",
"啊实打实的就按设你的'}",
"爱神的箭阿三电脑'}",
"按设计大奖十大'}",
"按实际到手的你'}",
"啊实打实的就按设你的'}",
"爱神的箭阿三电脑'}",
"按设计大奖十大'}", "啊实打实的就按设你的'}",
"爱神的箭阿三电脑'}",
"按设计大奖十大'}",
"按实际到手的你'}",
"啊实打实的就按设你的'}",
"爱神的箭阿三电脑'}",
"按设计大奖十大'}",
"按实际到手的你'}",
"啊实打实的就按设你的'}",
"爱神的箭阿三电脑'}",
"按设计大奖十大'}",
"按实际到手的你'}",
"啊实打实的就按设你的'}",
"爱神的箭阿三电脑'}",
"按设计大奖十大'}",
"按实际到手的你'}",
"啊实打实的就按设你的'}",
"爱神的箭阿三电脑'}",
"按设计大奖十大'}", "啊实打实的就按设你的'}",
"爱神的箭阿三电脑'}",
"按设计大奖十大'}",
"按实际到手的你'}",
"啊实打实的就按设你的'}",
"爱神的箭阿三电脑'}",
"按设计大奖十大'}",
"按实际到手的你'}",
"啊实打实的就按设你的'}",
"爱神的箭阿三电脑'}",
"按设计大奖十大'}",
"按实际到手的你'}",
"啊实打实的就按设你的'}",
"爱神的箭阿三电脑'}",
"按设计大奖十大'}",
"按实际到手的你'}",
"啊实打实的就按设你的'}",
"爱神的箭阿三电脑'}",
"按设计大奖十大'}", "啊实打实的就按设你的'}",
"爱神的箭阿三电脑'}",
"按设计大奖十大'}",
"按实际到手的你'}",
"啊实打实的就按设你的'}",
"爱神的箭阿三电脑'}",
"按设计大奖十大'}",
"按实际到手的你'}",
"啊实打实的就按设你的'}",
"爱神的箭阿三电脑'}",
"按设计大奖十大'}",
"按实际到手的你'}",
"啊实打实的就按设你的'}",
"爱神的箭阿三电脑'}",
"按设计大奖十大'}",
"按实际到手的你'}",
"啊实打实的就按设你的'}",
"爱神的箭阿三电脑'}",
"按设计大奖十大'}", "啊实打实的就按设你的'}",
"爱神的箭阿三电脑'}",
"按设计大奖十大'}",
"按实际到手的你'}",
"啊实打实的就按设你的'}",
"爱神的箭阿三电脑'}",
"按设计大奖十大'}",
"按实际到手的你'}",
"啊实打实的就按设你的'}",
"爱神的箭阿三电脑'}",
"按设计大奖十大'}",
"按实际到手的你'}",
"啊实打实的就按设你的'}",
"爱神的箭阿三电脑'}",
"按设计大奖十大'}",
"按实际到手的你'}",
"啊实打实的就按设你的'}",
"爱神的箭阿三电脑'}",
"按设计大奖十大'}", "啊实打实的就按设你的'}",
"爱神的箭阿三电脑'}",
"按设计大奖十大'}",
"按实际到手的你'}",
"啊实打实的就按设你的'}",
"爱神的箭阿三电脑'}",
"按设计大奖十大'}",
"按实际到手的你'}",
"啊实打实的就按设你的'}",
"爱神的箭阿三电脑'}",
"按设计大奖十大'}",
"按实际到手的你'}",
"啊实打实的就按设你的'}",
"爱神的箭阿三电脑'}",
"按设计大奖十大'}",
"按实际到手的你'}",
"啊实打实的就按设你的'}",
"爱神的箭阿三电脑'}",
"按设计大奖十大'}"
};
String a = "attachment#[]#attachmentsource#[]#source根据您的需求,以下是匹配值最高的5位南京专家信息:<br /><br />1.**专家信息**:姓名:薛宇城,电话:13901587782,部门:工程建设部,科室:无线网建设班,地市:南京,<br />简介:中级工程师,集团卓越工程师,中国移动工匠,获得第十七届“振兴杯”全国青年职业技能大赛(职工组)江苏省选拔赛金奖,近三年参与公司在岗革新11个获奖。<br />**推荐原因**:薛宇城在南京地区有丰富的无线网络建设和运维经验,是南京分公司的中级工程师,具备较高的技术水平和项目管理能力。<br /><br />2.**专家信息**:姓名:吴东平,电话:13905180703,部门:规划技术部,科室:基建组,地市:南京,<br />简介:负责IT规划、投资计划、基建规划等工作,曾被评为省级IT技术专家。目前主要负责扬州仪征数据中心、南京江北数据中心、南通、徐州通信枢纽规划建设。近年来,完成中国移动智算南京中心机电方案编制,字节定制化数据中心(合同额超百亿)土建、变电站、室外工程方案编制,完成南通通信枢纽、徐州通信枢纽方案编制。对数据中心的规划建设及绿电、储能等有积累,熟悉网络云、核心机房、汇聚机房动力配套规划和建设。<br />**推荐原因**:吴东平在南京地区的数据中心规划和建设方面有丰富经验,特别是在南京江北数据中心的建设中发挥了重要作用,具备高级技术和管理能力。<br /><br />3.**专家信息**:姓名:高珂,电话:13905180047,部门:网络部,科室:核心网维护室,地市:南京,<br />简介:负责5GtoB中兴区域业务支撑及维护工作。曾牵头完成5GtoB南京SA预商用迁移工作,顺利完成省内10个项目由南京SA预商用网络向商用5GtoB网络的迁移,其中包括全国首个异厂家插花集团,并协助集团总部输出业务迁移经验手册。曾参与5G专网关键网络能力试点、5GtoB核心网与IMS互通改造等新技术试点项目中,具有一定的项目支撑经验。曾获2020年网络条线技能竞赛核心网专业三等奖、2021年度网络部网络维护安全先进个人、“赋能建功”2024年网络条线技能竞赛5G核心网专业三等奖等荣誉。<br />**推荐原因**:高珂在南京地区的5GtoB网络维护和支持方面有丰富的经验和成功案例,特别是在5GSA预商用迁移项目中的突出表现,使其成为该领域的优秀专家。<br /><br />4.**专家信息**:姓名:徐荣蓉,电话:15705186998,部门:紫金研究院,科室:区块链研发部,地市:南京,<br />简介:熟悉数据水印系统研发、数字政府的数据要素流通产品研发,有南京市重大科技专项-可信能碳综合管理体系研究与产业化、工信部重点实验室开放课题-基于区块链的分布式可信智能计算关键技术研究、软件供应链开源威胁检测平台、数智流程自动化管理平台、数据要素采集治理平台研发等相关项目经历。<br />**推荐原因**:徐荣蓉在南京地区的区块链和数据要素流通技术研发方面有深厚的技术背景和项目经验,适合涉及这些领域的技术支持和咨询。<br /><br />5.**专家信息**:姓名:应葆华,电话:15805169804,部门:紫金研究院,科室:区块链研发部,地市:南京,<br />简介:熟悉数据水印系统研发、数字政府的数据要素流通产品研发、数智流程自动化管理平台,有南京市重大科技专项-可信能碳综合管理体系研究与产业化、工信部重点实验室开放课题-基于区块链的分布式可信智能计算关键技术研究、软件供应链开源威胁检测平台、数据要素采集治理平台研发等相关项目经历。<br />**推荐原因**:应葆华在南京地区的区块链和数据要素流通技术研发方面有丰富的项目经验和技术积累,能够提供专业的技术支持和解决方案。";
a = a.replace("attachment#[]#attachmentsource#[]#source","").replace("<br />", "\n").replaceAll("###(?=\\S)", "### ");;
int chunkSize = 100;
int stringLength = a.length();
int chunksCount = (stringLength + chunkSize - 1) / chunkSize;
String[] chunks = new String[chunksCount];
for (int i = 0; i < chunksCount; i++) {
int start = i * chunkSize;
int end = Math.min(start + chunkSize, stringLength);
chunks[i] = a.substring(start, end);
}
for (String chunk : chunks) {
// 每次发送一个数据块
emitter.send(SseEmitter.event().data(chunk), MediaType.parseMediaType("application/json; charset=UTF-8"));
Thread.sleep(100);
}
emitter.send(SseEmitter.event().data("SUGGEST#[\" 我可以联系这些专家吗?他们的联系方式是否公开?\", \" 这些专家是否有特定的专业领域或擅长的项目类型?\", \" 除了这五位专家,还有其他南京地区的专家推荐吗?\"]#SUGGEST"), MediaType.parseMediaType("application/json; charset=UTF-8"));
emitter.send(SseEmitter.event().data("stop"),MediaType.parseMediaType("application/json; charset=UTF-8"));
} catch (IOException e) {
emitter.completeWithError(e); // 出错时关闭连接
......
This source diff could not be displayed because it is too large. You can view the blob instead.
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).marked={})}(this,function(n){"use strict";function e(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}function t(e){n.defaults=e}n.defaults=e();var r={exec:()=>null};function s(e,t=""){let r="string"==typeof e?e:e.source;const s={replace:(e,t)=>{let n="string"==typeof t?t:t.source;return n=n.replace(p.caret,"$1"),r=r.replace(e,n),s},getRegex:()=>new RegExp(r,t)};return s}const p={codeRemoveIndent:/^(?: {1,4}| {0,3}\t)/gm,outputLinkReplace:/\\([\[\]])/g,indentCodeCompensation:/^(\s+)(?:```)/,beginningSpace:/^\s+/,endingHash:/#$/,startingSpaceChar:/^ /,endingSpaceChar:/ $/,nonSpaceChar:/[^ ]/,newLineCharGlobal:/\n/g,tabCharGlobal:/\t/g,multipleSpaceGlobal:/\s+/g,blankLine:/^[ \t]*$/,doubleBlankLine:/\n[ \t]*\n[ \t]*$/,blockquoteStart:/^ {0,3}>/,blockquoteSetextReplace:/\n {0,3}((?:=+|-+) *)(?=\n|$)/g,blockquoteSetextReplace2:/^ {0,3}>[ \t]?/gm,listReplaceTabs:/^\t+/,listReplaceNesting:/^ {1,4}(?=( {4})*[^ ])/g,listIsTask:/^\[[ xX]\] /,listReplaceTask:/^\[[ xX]\] +/,anyLine:/\n.*\n/,hrefBrackets:/^<(.*)>$/,tableDelimiter:/[:|]/,tableAlignChars:/^\||\| *$/g,tableRowBlankLine:/\n[ \t]*$/,tableAlignRight:/^ *-+: *$/,tableAlignCenter:/^ *:-+: *$/,tableAlignLeft:/^ *:-+ *$/,startATag:/^<a /i,endATag:/^<\/a>/i,startPreScriptTag:/^<(pre|code|kbd|script)(\s|>)/i,endPreScriptTag:/^<\/(pre|code|kbd|script)(\s|>)/i,startAngleBracket:/^</,endAngleBracket:/>$/,pedanticHrefTitle:/^([^'"]*[^\s])\s+(['"])(.*)\2/,unicodeAlphaNumeric:/[\p{L}\p{N}]/u,escapeTest:/[&<>"']/,escapeReplace:/[&<>"']/g,escapeTestNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,escapeReplaceNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/g,unescapeTest:/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/gi,caret:/(^|[^\[])\^/g,percentDecode:/%25/g,findPipe:/\|/g,splitPipe:/ \|/,slashPipe:/\\\|/g,carriageReturn:/\r\n|\r/g,spaceLine:/^ +$/gm,notSpaceStart:/^\S*/,endingNewline:/\n$/,listItemRegex:e=>new RegExp(`^( {0,3}${e})((?:[ ][^\\n]*)?(?:\\n|$))`),nextBulletRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}(?:[*+-]|\\d{1,9}[.)])((?:[ ][^\\n]*)?(?:\\n|$))`),hrRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`),fencesBeginRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}(?:\`\`\`|~~~)`),headingBeginRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}#`),htmlBeginRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}<(?:[a-z].*>|!--)`,"i")};var i=/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,l=/(?:[*+-]|\d{1,9}[.)])/,a=s(/^(?!bull |blockCode|fences|blockquote|heading|html)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html))+?)\n {0,3}(=+|-+) *(?:\n+|$)/).replace(/bull/g,l).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).getRegex(),o=/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,c=/(?!\s*\])(?:\\.|[^\[\]\\])+/,h=s(/^ {0,3}\[(label)\]: *(?:\n[ \t]*)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n[ \t]*)?| *\n[ \t]*)(title))? *(?:\n+|$)/).replace("label",c).replace("title",/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex(),l=s(/^( {0,3}bull)([ \t][^\n]+?)?(?:\n|$)/).replace(/bull/g,l).getRegex(),u="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",g=/<!--(?:-?>|[\s\S]*?(?:-->|$))/,k=s("^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|<![A-Z][\\s\\S]*?(?:>\\n*|$)|<!\\[CDATA\\[[\\s\\S]*?(?:\\]\\]>\\n*|$)|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:(?:\\n[ \t]*)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ \t]*)+\\n|$)|</(?!script|pre|style|textarea)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ \t]*)+\\n|$))","i").replace("comment",g).replace("tag",u).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),d=s(o).replace("hr",i).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("|table","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",u).getRegex(),h={blockquote:s(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace("paragraph",d).getRegex(),code:/^((?: {4}| {0,3}\t)[^\n]+(?:\n(?:[ \t]*(?:\n|$))*)?)+/,def:h,fences:/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,heading:/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,hr:i,html:k,lheading:a,list:l,newline:/^(?:[ \t]*(?:\n|$))+/,paragraph:d,table:r,text:/^[^\n]+/},k=s("^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)").replace("hr",i).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("blockquote"," {0,3}>").replace("code","(?: {4}| {0,3}\t)[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",u).getRegex(),l={...h,table:k,paragraph:s(o).replace("hr",i).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("table",k).replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",u).getRegex()},d={...h,html:s("^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)|<tag(?:\"[^\"]*\"|'[^']*'|\\s[^'\"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))").replace("comment",g).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:r,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:s(o).replace("hr",i).replace("heading"," *#{1,6} *[^\n]").replace("lheading",a).replace("|table","").replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").replace("|tag","").getRegex()},k=/^( {2,}|\\)\n(?!\s*$)/,u=/[\p{P}\p{S}]/u,o=/[\s\p{P}\p{S}]/u,i=/[^\s\p{P}\p{S}]/u,a=s(/^((?![*_])punctSpace)/,"u").replace(/punctSpace/g,o).getRegex(),f=/(?!~)[\p{P}\p{S}]/u,x=/^(?:\*+(?:((?!\*)punct)|[^\s*]))|^_+(?:((?!_)punct)|([^\s_]))/,b=s(x,"u").replace(/punct/g,u).getRegex(),x=s(x,"u").replace(/punct/g,f).getRegex(),w="^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)punctSpace(\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|notPunctSpace(\\*+)(?=notPunctSpace)",m=s(w,"gu").replace(/notPunctSpace/g,i).replace(/punctSpace/g,o).replace(/punct/g,u).getRegex(),w=s(w,"gu").replace(/notPunctSpace/g,/(?:[^\s\p{P}\p{S}]|~)/u).replace(/punctSpace/g,/(?!~)[\s\p{P}\p{S}]/u).replace(/punct/g,f).getRegex(),f=s("^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)","gu").replace(/notPunctSpace/g,i).replace(/punctSpace/g,o).replace(/punct/g,u).getRegex(),i=s(/\\(punct)/,"gu").replace(/punct/g,u).getRegex(),o=s(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace("scheme",/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace("email",/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),u=s(g).replace("(?:--\x3e|$)","--\x3e").getRegex(),g=s("^comment|^</[a-zA-Z][\\w:-]*\\s*>|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^<![a-zA-Z]+\\s[\\s\\S]*?>|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>").replace("comment",u).replace("attribute",/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(),u=/(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/,y=s(/^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/).replace("label",u).replace("href",/<(?:\\.|[^\n<>\\])+>|[^\s\x00-\x1f]*/).replace("title",/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex(),$=s(/^!?\[(label)\]\[(ref)\]/).replace("label",u).replace("ref",c).getRegex(),c=s(/^!?\[(ref)\](?:\[\])?/).replace("ref",c).getRegex(),i={_backpedal:r,anyPunctuation:i,autolink:o,blockSkip:/\[[^[\]]*?\]\((?:\\.|[^\\\(\)]|\((?:\\.|[^\\\(\)])*\))*\)|`[^`]*?`|<[^<>]*?>/g,br:k,code:/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,del:r,emStrongLDelim:b,emStrongRDelimAst:m,emStrongRDelimUnd:f,escape:/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,link:y,nolink:c,punctuation:a,reflink:$,reflinkSearch:s("reflink|nolink(?!\\()","g").replace("reflink",$).replace("nolink",c).getRegex(),tag:g,text:/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*_]|\b_|$)|[^ ](?= {2,}\n)))/,url:r},o={...i,link:s(/^!?\[(label)\]\((.*?)\)/).replace("label",u).getRegex(),reflink:s(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",u).getRegex()},b={...i,emStrongRDelimAst:w,emStrongLDelim:x,url:s(/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,"i").replace("email",/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(),_backpedal:/(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])((?:\\.|[^\\])*?(?:\\.|[^\s~\\]))\1(?=[^~]|$)/,text:/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\<!\[`*~_]|\b_|https?:\/\/|ftp:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)))/},m={...b,br:s(k).replace("{2,}","*").getRegex(),text:s(b.text).replace("\\b_","\\b_| {2,}\\n").replace(/\{2,\}/g,"*").getRegex()};const R={normal:h,gfm:l,pedantic:d},S={normal:i,gfm:b,breaks:m,pedantic:o},q={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"},T=e=>q[e];function z(e,t){if(t){if(p.escapeTest.test(e))return e.replace(p.escapeReplace,T)}else if(p.escapeTestNoEncode.test(e))return e.replace(p.escapeReplaceNoEncode,T);return e}function Z(e){try{e=encodeURI(e).replace(p.percentDecode,"%")}catch{return null}return e}function D(e,t){const n=e.replace(p.findPipe,(e,t,n)=>{let r=!1,s=t;for(;0<=--s&&"\\"===n[s];)r=!r;return r?"|":" |"}),r=n.split(p.splitPipe);let s=0;if(r[0].trim()||r.shift(),0<r.length&&!r.at(-1)?.trim()&&r.pop(),t)if(r.length>t)r.splice(t);else for(;r.length<t;)r.push("");for(;s<r.length;s++)r[s]=r[s].trim().replace(p.slashPipe,"|");return r}function v(e,t){var n=e.length;if(0===n)return"";let r=0;for(;r<n;){if(e.charAt(n-r-1)!==t)break;r++}return e.slice(0,n-r)}function M(e,t,n,r,s){var i=t.href,t=t.title||null,s=e[1].replace(s.other.outputLinkReplace,"$1");return"!"!==e[0].charAt(0)?(r.state.inLink=!0,e={type:"link",raw:n,href:i,title:t,text:s,tokens:r.inlineTokens(s)},r.state.inLink=!1,e):{type:"image",raw:n,href:i,title:t,text:s}}class A{options;rules;lexer;constructor(e){this.options=e||n.defaults}space(e){e=this.rules.block.newline.exec(e);if(e&&0<e[0].length)return{type:"space",raw:e[0]}}code(e){const t=this.rules.block.code.exec(e);if(t)return e=t[0].replace(this.rules.other.codeRemoveIndent,""),{type:"code",raw:t[0],codeBlockStyle:"indented",text:this.options.pedantic?e:v(e,"\n")}}fences(e){const t=this.rules.block.fences.exec(e);var n;if(t)return n=function(e,t,n){if(null===(e=e.match(n.other.indentCodeCompensation)))return t;const r=e[1];return t.split("\n").map(e=>{var t=e.match(n.other.beginningSpace);if(null===t)return e;var[t]=t;return t.length>=r.length?e.slice(r.length):e}).join("\n")}(e=t[0],t[3]||"",this.rules),{type:"code",raw:e,lang:t[2]&&t[2].trim().replace(this.rules.inline.anyPunctuation,"$1"),text:n}}heading(e){const t=this.rules.block.heading.exec(e);if(t){let e=t[2].trim();if(this.rules.other.endingHash.test(e)){const n=v(e,"#");!this.options.pedantic&&n&&!this.rules.other.endingSpaceChar.test(n)||(e=n.trim())}return{type:"heading",raw:t[0],depth:t[1].length,text:e,tokens:this.lexer.inline(e)}}}hr(e){e=this.rules.block.hr.exec(e);if(e)return{type:"hr",raw:v(e[0],"\n")}}blockquote(e){e=this.rules.block.blockquote.exec(e);if(e){let n=v(e[0],"\n").split("\n"),r="",s="";const o=[];for(;0<n.length;){let e=!1;const c=[];let t;for(t=0;t<n.length;t++)if(this.rules.other.blockquoteStart.test(n[t]))c.push(n[t]),e=!0;else{if(e)break;c.push(n[t])}n=n.slice(t);const h=c.join("\n");var i=h.replace(this.rules.other.blockquoteSetextReplace,"\n $1").replace(this.rules.other.blockquoteSetextReplace2,""),l=(r=r?r+`
`+h:h,s=s?s+`
`+i:i,this.lexer.state.top);if(this.lexer.state.top=!0,this.lexer.blockTokens(i,o,!0),this.lexer.state.top=l,0===n.length)break;i=o.at(-1);if("code"===i?.type)break;if("blockquote"===i?.type){var l=i,a=l.raw+"\n"+n.join("\n"),a=this.blockquote(a);o[o.length-1]=a,r=r.substring(0,r.length-l.raw.length)+a.raw,s=s.substring(0,s.length-l.text.length)+a.text;break}if("list"===i?.type){l=i;const p=l.raw+"\n"+n.join("\n");a=this.list(p);o[o.length-1]=a,r=r.substring(0,r.length-i.raw.length)+a.raw,s=s.substring(0,s.length-l.raw.length)+a.raw,n=p.substring(o.at(-1).raw.length).split("\n")}}return{type:"blockquote",raw:r,tokens:o,text:s}}}list(h){let p=this.rules.block.list.exec(h);if(p){let e=p[1].trim();var t=1<e.length;const g={type:"list",raw:"",ordered:t,start:t?+e.slice(0,-1):"",loose:!1,items:[]},k=(e=t?"\\d{1,9}\\"+e.slice(-1):"\\"+e,this.options.pedantic&&(e=t?e:"[*+-]"),this.rules.other.listItemRegex(e));let c=!1;for(;h;){let e=!1,t="",n="";if(!(p=k.exec(h)))break;if(this.rules.block.hr.test(h))break;t=p[0],h=h.substring(t.length);let r=p[2].split("\n",1)[0].replace(this.rules.other.listReplaceTabs,e=>" ".repeat(3*e.length)),s=h.split("\n",1)[0],i=!r.trim(),l=0;if(this.options.pedantic?(l=2,n=r.trimStart()):i?l=p[1].length+1:(l=4<(l=p[2].search(this.rules.other.nonSpaceChar))?1:l,n=r.slice(l),l+=p[1].length),i&&this.rules.other.blankLine.test(s)&&(t+=s+"\n",h=h.substring(s.length+1),e=!0),!e){const d=this.rules.other.nextBulletRegex(l),f=this.rules.other.hrRegex(l),x=this.rules.other.fencesBeginRegex(l),b=this.rules.other.headingBeginRegex(l),w=this.rules.other.htmlBeginRegex(l);for(;h;){var u=h.split("\n",1)[0];let e;if(s=u,e=this.options.pedantic?s=s.replace(this.rules.other.listReplaceNesting," "):s.replace(this.rules.other.tabCharGlobal," "),x.test(s))break;if(b.test(s))break;if(w.test(s))break;if(d.test(s))break;if(f.test(s))break;if(e.search(this.rules.other.nonSpaceChar)>=l||!s.trim())n+="\n"+e.slice(l);else{if(i)break;if(4<=r.replace(this.rules.other.tabCharGlobal," ").search(this.rules.other.nonSpaceChar))break;if(x.test(r))break;if(b.test(r))break;if(f.test(r))break;n+="\n"+s}i||s.trim()||(i=!0),t+=u+"\n",h=h.substring(u.length+1),r=e.slice(l)}}g.loose||(c?g.loose=!0:this.rules.other.doubleBlankLine.test(t)&&(c=!0));let a=null,o;this.options.gfm&&(a=this.rules.other.listIsTask.exec(n))&&(o="[ ] "!==a[0],n=n.replace(this.rules.other.listReplaceTask,"")),g.items.push({type:"list_item",raw:t,task:!!a,checked:o,loose:!1,text:n,tokens:[]}),g.raw+=t}const r=g.items.at(-1);if(r){r.raw=r.raw.trimEnd(),r.text=r.text.trimEnd(),g.raw=g.raw.trimEnd();for(let e=0;e<g.items.length;e++)if(this.lexer.state.top=!1,g.items[e].tokens=this.lexer.blockTokens(g.items[e].text,[]),!g.loose){const s=g.items[e].tokens.filter(e=>"space"===e.type);var n=0<s.length&&s.some(e=>this.rules.other.anyLine.test(e.raw));g.loose=n}if(g.loose)for(let e=0;e<g.items.length;e++)g.items[e].loose=!0;return g}}}html(e){e=this.rules.block.html.exec(e);if(e)return{type:"html",block:!0,raw:e[0],pre:"pre"===e[1]||"script"===e[1]||"style"===e[1],text:e[0]}}def(e){const t=this.rules.block.def.exec(e);var n,r;if(t)return e=t[1].toLowerCase().replace(this.rules.other.multipleSpaceGlobal," "),n=t[2]?t[2].replace(this.rules.other.hrefBrackets,"$1").replace(this.rules.inline.anyPunctuation,"$1"):"",r=t[3]&&t[3].substring(1,t[3].length-1).replace(this.rules.inline.anyPunctuation,"$1"),{type:"def",tag:e,raw:t[0],href:n,title:r}}table(e){const t=this.rules.block.table.exec(e);if(t&&this.rules.other.tableDelimiter.test(t[2])){var n=D(t[1]),e=t[2].replace(this.rules.other.tableAlignChars,"").split("|"),r=t[3]?.trim()?t[3].replace(this.rules.other.tableRowBlankLine,"").split("\n"):[];const s={type:"table",raw:t[0],header:[],align:[],rows:[]};if(n.length===e.length){for(const i of e)this.rules.other.tableAlignRight.test(i)?s.align.push("right"):this.rules.other.tableAlignCenter.test(i)?s.align.push("center"):this.rules.other.tableAlignLeft.test(i)?s.align.push("left"):s.align.push(null);for(let e=0;e<n.length;e++)s.header.push({text:n[e],tokens:this.lexer.inline(n[e]),header:!0,align:s.align[e]});for(const l of r)s.rows.push(D(l,s.header.length).map((e,t)=>({text:e,tokens:this.lexer.inline(e),header:!1,align:s.align[t]})));return s}}}lheading(e){const t=this.rules.block.lheading.exec(e);if(t)return{type:"heading",raw:t[0],depth:"="===t[2].charAt(0)?1:2,text:t[1],tokens:this.lexer.inline(t[1])}}paragraph(e){const t=this.rules.block.paragraph.exec(e);if(t)return e="\n"===t[1].charAt(t[1].length-1)?t[1].slice(0,-1):t[1],{type:"paragraph",raw:t[0],text:e,tokens:this.lexer.inline(e)}}text(e){e=this.rules.block.text.exec(e);if(e)return{type:"text",raw:e[0],text:e[0],tokens:this.lexer.inline(e[0])}}escape(e){e=this.rules.inline.escape.exec(e);if(e)return{type:"escape",raw:e[0],text:e[1]}}tag(e){e=this.rules.inline.tag.exec(e);if(e)return!this.lexer.state.inLink&&this.rules.other.startATag.test(e[0])?this.lexer.state.inLink=!0:this.lexer.state.inLink&&this.rules.other.endATag.test(e[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&this.rules.other.startPreScriptTag.test(e[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&this.rules.other.endPreScriptTag.test(e[0])&&(this.lexer.state.inRawBlock=!1),{type:"html",raw:e[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:e[0]}}link(n){const r=this.rules.inline.link.exec(n);if(r){const i=r[2].trim();if(!this.options.pedantic&&this.rules.other.startAngleBracket.test(i)){if(!this.rules.other.endAngleBracket.test(i))return;n=v(i.slice(0,-1),"\\");if((i.length-n.length)%2==0)return}else{var s,n=function(t,n){if(-1===t.indexOf(n[1]))return-1;let r=0;for(let e=0;e<t.length;e++)if("\\"===t[e])e++;else if(t[e]===n[0])r++;else if(t[e]===n[1]&&--r<0)return e;return-1}(r[2],"()");-1<n&&(s=(0===r[0].indexOf("!")?5:4)+r[1].length+n,r[2]=r[2].substring(0,n),r[0]=r[0].substring(0,s).trim(),r[3]="")}let e=r[2],t="";return this.options.pedantic?(n=this.rules.other.pedanticHrefTitle.exec(e))&&(e=n[1],t=n[3]):t=r[3]?r[3].slice(1,-1):"",e=e.trim(),this.rules.other.startAngleBracket.test(e)&&(e=this.options.pedantic&&!this.rules.other.endAngleBracket.test(i)?e.slice(1):e.slice(1,-1)),M(r,{href:e&&e.replace(this.rules.inline.anyPunctuation,"$1"),title:t&&t.replace(this.rules.inline.anyPunctuation,"$1")},r[0],this.lexer,this.rules)}}reflink(e,t){let n;if((n=this.rules.inline.reflink.exec(e))||(n=this.rules.inline.nolink.exec(e))){const r=(n[2]||n[1]).replace(this.rules.other.multipleSpaceGlobal," ");e=t[r.toLowerCase()];return e?M(n,e,n[0],this.lexer,this.rules):{type:"text",raw:t=n[0].charAt(0),text:t}}}emStrong(s,i,e=""){let l=this.rules.inline.emStrongLDelim.exec(s);if(l&&((!l[3]||!e.match(this.rules.other.unicodeAlphaNumeric))&&(!(l[1]||l[2]||"")||!e||this.rules.inline.punctuation.exec(e)))){var a=[...l[0]].length-1;let e,t,n=a,r=0;const c="*"===l[0][0]?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(c.lastIndex=0,i=i.slice(-1*s.length+a);null!=(l=c.exec(i));)if(e=l[1]||l[2]||l[3]||l[4]||l[5]||l[6])if(t=[...e].length,l[3]||l[4])n+=t;else if((l[5]||l[6])&&a%3&&!((a+t)%3))r+=t;else if(!(0<(n-=t))){t=Math.min(t,t+n+r);var o=[...l[0]][0].length;const h=s.slice(0,a+l.index+o+t);if(Math.min(a,t)%2)return o=h.slice(1,-1),{type:"em",raw:h,text:o,tokens:this.lexer.inlineTokens(o)};o=h.slice(2,-2);return{type:"strong",raw:h,text:o,tokens:this.lexer.inlineTokens(o)}}}}codespan(t){const n=this.rules.inline.code.exec(t);if(n){let e=n[2].replace(this.rules.other.newLineCharGlobal," ");var t=this.rules.other.nonSpaceChar.test(e),r=this.rules.other.startingSpaceChar.test(e)&&this.rules.other.endingSpaceChar.test(e);return t&&r&&(e=e.substring(1,e.length-1)),{type:"codespan",raw:n[0],text:e}}}br(e){e=this.rules.inline.br.exec(e);if(e)return{type:"br",raw:e[0]}}del(e){e=this.rules.inline.del.exec(e);if(e)return{type:"del",raw:e[0],text:e[2],tokens:this.lexer.inlineTokens(e[2])}}autolink(n){n=this.rules.inline.autolink.exec(n);if(n){let e,t;return t="@"===n[2]?"mailto:"+(e=n[1]):e=n[1],{type:"link",raw:n[0],text:e,href:t,tokens:[{type:"text",raw:e,text:e}]}}}url(e){let n;if(n=this.rules.inline.url.exec(e)){let e,t;if("@"===n[2])e=n[0],t="mailto:"+e;else{for(var r;r=n[0],n[0]=this.rules.inline._backpedal.exec(n[0])?.[0]??"",r!==n[0];);e=n[0],t="www."===n[1]?"http://"+n[0]:n[0]}return{type:"link",raw:n[0],text:e,href:t,tokens:[{type:"text",raw:e,text:e}]}}}inlineText(e){var t,e=this.rules.inline.text.exec(e);if(e)return t=this.lexer.state.inRawBlock,{type:"text",raw:e[0],text:e[0],escaped:t}}}class _{tokens;options;state;tokenizer;inlineQueue;constructor(e){this.tokens=[],this.tokens.links=Object.create(null),this.options=e||n.defaults,this.options.tokenizer=this.options.tokenizer||new A,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options,(this.tokenizer.lexer=this).inlineQueue=[],this.state={inLink:!1,inRawBlock:!1,top:!0};const t={other:p,block:R.normal,inline:S.normal};this.options.pedantic?(t.block=R.pedantic,t.inline=S.pedantic):this.options.gfm&&(t.block=R.gfm,this.options.breaks?t.inline=S.breaks:t.inline=S.gfm),this.tokenizer.rules=t}static get rules(){return{block:R,inline:S}}static lex(e,t){const n=new _(t);return n.lex(e)}static lexInline(e,t){const n=new _(t);return n.inlineTokens(e)}lex(e){e=e.replace(p.carriageReturn,"\n"),this.blockTokens(e,this.tokens);for(let e=0;e<this.inlineQueue.length;e++){var t=this.inlineQueue[e];this.inlineTokens(t.src,t.tokens)}return this.inlineQueue=[],this.tokens}blockTokens(r,n=[],s=!1){for(this.options.pedantic&&(r=r.replace(p.tabCharGlobal," ").replace(p.spaceLine,""));r;){let t;if(!this.options.extensions?.block?.some(e=>!!(t=e.call({lexer:this},r,n))&&(r=r.substring(t.raw.length),n.push(t),!0)))if(t=this.tokenizer.space(r)){r=r.substring(t.raw.length);const e=n.at(-1);1===t.raw.length&&void 0!==e?e.raw+="\n":n.push(t)}else if(t=this.tokenizer.code(r)){r=r.substring(t.raw.length);const l=n.at(-1);"paragraph"===l?.type||"text"===l?.type?(l.raw+="\n"+t.raw,l.text+="\n"+t.text,this.inlineQueue.at(-1).src=l.text):n.push(t)}else if(t=this.tokenizer.fences(r))r=r.substring(t.raw.length),n.push(t);else if(t=this.tokenizer.heading(r))r=r.substring(t.raw.length),n.push(t);else if(t=this.tokenizer.hr(r))r=r.substring(t.raw.length),n.push(t);else if(t=this.tokenizer.blockquote(r))r=r.substring(t.raw.length),n.push(t);else if(t=this.tokenizer.list(r))r=r.substring(t.raw.length),n.push(t);else if(t=this.tokenizer.html(r))r=r.substring(t.raw.length),n.push(t);else if(t=this.tokenizer.def(r)){r=r.substring(t.raw.length);const a=n.at(-1);"paragraph"===a?.type||"text"===a?.type?(a.raw+="\n"+t.raw,a.text+="\n"+t.raw,this.inlineQueue.at(-1).src=a.text):this.tokens.links[t.tag]||(this.tokens.links[t.tag]={href:t.href,title:t.title})}else if(t=this.tokenizer.table(r))r=r.substring(t.raw.length),n.push(t);else if(t=this.tokenizer.lheading(r))r=r.substring(t.raw.length),n.push(t);else{let e=r;if(this.options.extensions?.startBlock){let t=1/0;const o=r.slice(1);let n;this.options.extensions.startBlock.forEach(e=>{"number"==typeof(n=e.call({lexer:this},o))&&0<=n&&(t=Math.min(t,n))}),t<1/0&&0<=t&&(e=r.substring(0,t+1))}if(this.state.top&&(t=this.tokenizer.paragraph(e))){const c=n.at(-1);s&&"paragraph"===c?.type?(c.raw+="\n"+t.raw,c.text+="\n"+t.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=c.text):n.push(t),s=e.length!==r.length,r=r.substring(t.raw.length)}else if(t=this.tokenizer.text(r)){r=r.substring(t.raw.length);const h=n.at(-1);"text"===h?.type?(h.raw+="\n"+t.raw,h.text+="\n"+t.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=h.text):n.push(t)}else if(r){var i="Infinite loop on byte: "+r.charCodeAt(0);if(this.options.silent){console.error(i);break}throw new Error(i)}}}return this.state.top=!0,n}inline(e,t=[]){return this.inlineQueue.push({src:e,tokens:t}),t}inlineTokens(r,n=[]){let e=r,t=null;if(this.tokens.links){const a=Object.keys(this.tokens.links);if(0<a.length)for(;null!=(t=this.tokenizer.rules.inline.reflinkSearch.exec(e));)a.includes(t[0].slice(t[0].lastIndexOf("[")+1,-1))&&(e=e.slice(0,t.index)+"["+"a".repeat(t[0].length-2)+"]"+e.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;null!=(t=this.tokenizer.rules.inline.blockSkip.exec(e));)e=e.slice(0,t.index)+"["+"a".repeat(t[0].length-2)+"]"+e.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);for(;null!=(t=this.tokenizer.rules.inline.anyPunctuation.exec(e));)e=e.slice(0,t.index)+"++"+e.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);let s=!1,i="";for(;r;){s||(i=""),s=!1;let t;if(!this.options.extensions?.inline?.some(e=>!!(t=e.call({lexer:this},r,n))&&(r=r.substring(t.raw.length),n.push(t),!0)))if(t=this.tokenizer.escape(r))r=r.substring(t.raw.length),n.push(t);else if(t=this.tokenizer.tag(r))r=r.substring(t.raw.length),n.push(t);else if(t=this.tokenizer.link(r))r=r.substring(t.raw.length),n.push(t);else if(t=this.tokenizer.reflink(r,this.tokens.links)){r=r.substring(t.raw.length);const o=n.at(-1);"text"===t.type&&"text"===o?.type?(o.raw+=t.raw,o.text+=t.text):n.push(t)}else if(t=this.tokenizer.emStrong(r,e,i))r=r.substring(t.raw.length),n.push(t);else if(t=this.tokenizer.codespan(r))r=r.substring(t.raw.length),n.push(t);else if(t=this.tokenizer.br(r))r=r.substring(t.raw.length),n.push(t);else if(t=this.tokenizer.del(r))r=r.substring(t.raw.length),n.push(t);else if(t=this.tokenizer.autolink(r))r=r.substring(t.raw.length),n.push(t);else if(!this.state.inLink&&(t=this.tokenizer.url(r)))r=r.substring(t.raw.length),n.push(t);else{let e=r;if(this.options.extensions?.startInline){let t=1/0;const c=r.slice(1);let n;this.options.extensions.startInline.forEach(e=>{"number"==typeof(n=e.call({lexer:this},c))&&0<=n&&(t=Math.min(t,n))}),t<1/0&&0<=t&&(e=r.substring(0,t+1))}if(t=this.tokenizer.inlineText(e)){r=r.substring(t.raw.length),"_"!==t.raw.slice(-1)&&(i=t.raw.slice(-1)),s=!0;const h=n.at(-1);"text"===h?.type?(h.raw+=t.raw,h.text+=t.text):n.push(t)}else if(r){var l="Infinite loop on byte: "+r.charCodeAt(0);if(this.options.silent){console.error(l);break}throw new Error(l)}}}return n}}class P{options;parser;constructor(e){this.options=e||n.defaults}space(e){return""}code({text:e,lang:t,escaped:n}){t=(t||"").match(p.notSpaceStart)?.[0],e=e.replace(p.endingNewline,"")+"\n";return t?'<pre><code class="language-'+z(t)+'">'+(n?e:z(e,!0))+"</code></pre>\n":"<pre><code>"+(n?e:z(e,!0))+"</code></pre>\n"}blockquote({tokens:e}){return`<blockquote>
${this.parser.parse(e)}</blockquote>
`}html({text:e}){return e}heading({tokens:e,depth:t}){return`<h${t}>${this.parser.parseInline(e)}</h${t}>
`}hr(e){return"<hr>\n"}list(t){var e=t.ordered,n=t.start;let r="";for(let e=0;e<t.items.length;e++){var s=t.items[e];r+=this.listitem(s)}var i=e?"ol":"ul";return"<"+i+(e&&1!==n?' start="'+n+'"':"")+">\n"+r+"</"+i+">\n"}listitem(e){let t="";var n;return e.task&&(n=this.checkbox({checked:!!e.checked}),e.loose?"paragraph"===e.tokens[0]?.type?(e.tokens[0].text=n+" "+e.tokens[0].text,e.tokens[0].tokens&&0<e.tokens[0].tokens.length&&"text"===e.tokens[0].tokens[0].type&&(e.tokens[0].tokens[0].text=n+" "+z(e.tokens[0].tokens[0].text),e.tokens[0].tokens[0].escaped=!0)):e.tokens.unshift({type:"text",raw:n+" ",text:n+" ",escaped:!0}):t+=n+" "),`<li>${t+=this.parser.parse(e.tokens,!!e.loose)}</li>
`}checkbox({checked:e}){return"<input "+(e?'checked="" ':"")+'disabled="" type="checkbox">'}paragraph({tokens:e}){return`<p>${this.parser.parseInline(e)}</p>
`}table(t){var e="";let n="";for(let e=0;e<t.header.length;e++)n+=this.tablecell(t.header[e]);e+=this.tablerow({text:n});let r="";for(let e=0;e<t.rows.length;e++){var s=t.rows[e];n="";for(let e=0;e<s.length;e++)n+=this.tablecell(s[e]);r+=this.tablerow({text:n})}return"<table>\n<thead>\n"+e+"</thead>\n"+(r=r&&`<tbody>${r}</tbody>`)+"</table>\n"}tablerow({text:e}){return`<tr>
${e}</tr>
`}tablecell(e){var t=this.parser.parseInline(e.tokens),n=e.header?"th":"td";return(e.align?`<${n} align="${e.align}">`:`<${n}>`)+t+`</${n}>
`}strong({tokens:e}){return`<strong>${this.parser.parseInline(e)}</strong>`}em({tokens:e}){return`<em>${this.parser.parseInline(e)}</em>`}codespan({text:e}){return`<code>${z(e,!0)}</code>`}br(e){return"<br>"}del({tokens:e}){return`<del>${this.parser.parseInline(e)}</del>`}link({href:e,title:t,tokens:n}){var n=this.parser.parseInline(n),r=Z(e);if(null===r)return n;let s='<a href="'+(e=r)+'"';return t&&(s+=' title="'+z(t)+'"'),s+=">"+n+"</a>"}image({href:e,title:t,text:n}){var r=Z(e);if(null===r)return z(n);let s=`<img src="${e=r}" alt="${n}"`;return t&&(s+=` title="${z(t)}"`),s+=">"}text(e){return"tokens"in e&&e.tokens?this.parser.parseInline(e.tokens):"escaped"in e&&e.escaped?e.text:z(e.text)}}class I{strong({text:e}){return e}em({text:e}){return e}codespan({text:e}){return e}del({text:e}){return e}html({text:e}){return e}text({text:e}){return e}link({text:e}){return""+e}image({text:e}){return""+e}br(){return""}}class L{options;renderer;textRenderer;constructor(e){this.options=e||n.defaults,this.options.renderer=this.options.renderer||new P,this.renderer=this.options.renderer,this.renderer.options=this.options,(this.renderer.parser=this).textRenderer=new I}static parse(e,t){const n=new L(t);return n.parse(e)}static parseInline(e,t){const n=new L(t);return n.parseInline(e)}parse(n,r=!0){let s="";for(let t=0;t<n.length;t++){var e=n[t];if(this.options.extensions?.renderers?.[e.type]){var i=e,l=this.options.extensions.renderers[i.type].call({parser:this},i);if(!1!==l||!["space","hr","heading","code","table","blockquote","list","html","paragraph","text"].includes(i.type)){s+=l||"";continue}}var a=e;switch(a.type){case"space":s+=this.renderer.space(a);continue;case"hr":s+=this.renderer.hr(a);continue;case"heading":s+=this.renderer.heading(a);continue;case"code":s+=this.renderer.code(a);continue;case"table":s+=this.renderer.table(a);continue;case"blockquote":s+=this.renderer.blockquote(a);continue;case"list":s+=this.renderer.list(a);continue;case"html":s+=this.renderer.html(a);continue;case"paragraph":s+=this.renderer.paragraph(a);continue;case"text":{var o;let e=this.renderer.text(a);for(;t+1<n.length&&"text"===n[t+1].type;)o=n[++t],e+="\n"+this.renderer.text(o);s+=r?this.renderer.paragraph({type:"paragraph",raw:e,text:e,tokens:[{type:"text",raw:e,text:e,escaped:!0}]}):e;continue}default:var c='Token with "'+a.type+'" type was not found.';if(this.options.silent)return console.error(c),"";throw new Error(c)}}return s}parseInline(t,n=this.renderer){let r="";for(let e=0;e<t.length;e++){var s=t[e];if(this.options.extensions?.renderers?.[s.type]){var i=this.options.extensions.renderers[s.type].call({parser:this},s);if(!1!==i||!["escape","html","link","image","strong","em","codespan","br","del","text"].includes(s.type)){r+=i||"";continue}}var l=s;switch(l.type){case"escape":r+=n.text(l);break;case"html":r+=n.html(l);break;case"link":r+=n.link(l);break;case"image":r+=n.image(l);break;case"strong":r+=n.strong(l);break;case"em":r+=n.em(l);break;case"codespan":r+=n.codespan(l);break;case"br":r+=n.br(l);break;case"del":r+=n.del(l);break;case"text":r+=n.text(l);break;default:var a='Token with "'+l.type+'" type was not found.';if(this.options.silent)return console.error(a),"";throw new Error(a)}}return r}}class B{options;block;constructor(e){this.options=e||n.defaults}static passThroughHooks=new Set(["preprocess","postprocess","processAllTokens"]);preprocess(e){return e}postprocess(e){return e}processAllTokens(e){return e}provideLexer(){return this.block?_.lex:_.lexInline}provideParser(){return this.block?L.parse:L.parseInline}}class O{defaults=e();options=this.setOptions;parse=this.parseMarkdown(!0);parseInline=this.parseMarkdown(!1);Parser=L;Renderer=P;TextRenderer=I;Lexer=_;Tokenizer=A;Hooks=B;constructor(...e){this.use(...e)}walkTokens(e,t){let n=[];for(const s of e)switch(n=n.concat(t.call(this,s)),s.type){case"table":var r=s;for(const i of r.header)n=n.concat(this.walkTokens(i.tokens,t));for(const l of r.rows)for(const a of l)n=n.concat(this.walkTokens(a.tokens,t));break;case"list":r=s;n=n.concat(this.walkTokens(r.items,t));break;default:{const o=s;this.defaults.extensions?.childTokens?.[o.type]?this.defaults.extensions.childTokens[o.type].forEach(e=>{e=o[e].flat(1/0);n=n.concat(this.walkTokens(e,t))}):o.tokens&&(n=n.concat(this.walkTokens(o.tokens,t)))}}return n}use(...e){const w=this.defaults.extensions||{renderers:{},childTokens:{}};return e.forEach(e=>{const t={...e};if(t.async=this.defaults.async||t.async||!1,e.extensions&&(e.extensions.forEach(n=>{if(!n.name)throw new Error("extension name required");if("renderer"in n){const r=w.renderers[n.name];r?w.renderers[n.name]=function(...e){let t=n.renderer.apply(this,e);return t=!1===t?r.apply(this,e):t}:w.renderers[n.name]=n.renderer}if("tokenizer"in n){if(!n.level||"block"!==n.level&&"inline"!==n.level)throw new Error("extension level must be 'block' or 'inline'");const e=w[n.level];e?e.unshift(n.tokenizer):w[n.level]=[n.tokenizer],n.start&&("block"===n.level?w.startBlock?w.startBlock.push(n.start):w.startBlock=[n.start]:"inline"===n.level&&(w.startInline?w.startInline.push(n.start):w.startInline=[n.start]))}"childTokens"in n&&n.childTokens&&(w.childTokens[n.name]=n.childTokens)}),t.extensions=w),e.renderer){const i=this.defaults.renderer||new P(this.defaults);for(const l in e.renderer){if(!(l in i))throw new Error(`renderer '${l}' does not exist`);if(!["options","parser"].includes(l)){var n=l;const a=e.renderer[n],o=i[n];i[n]=(...e)=>{let t=a.apply(i,e);return(t=!1===t?o.apply(i,e):t)||""}}}t.renderer=i}if(e.tokenizer){const c=this.defaults.tokenizer||new A(this.defaults);for(const h in e.tokenizer){if(!(h in c))throw new Error(`tokenizer '${h}' does not exist`);if(!["options","rules","lexer"].includes(h)){var r=h;const p=e.tokenizer[r],u=c[r];c[r]=(...e)=>{let t=p.apply(c,e);return t=!1===t?u.apply(c,e):t}}}t.tokenizer=c}if(e.hooks){const g=this.defaults.hooks||new B;for(const k in e.hooks){if(!(k in g))throw new Error(`hook '${k}' does not exist`);if(!["options","block"].includes(k)){var s=k;const d=e.hooks[s],f=g[s];B.passThroughHooks.has(k)?g[s]=e=>{if(this.defaults.async)return Promise.resolve(d.call(g,e)).then(e=>f.call(g,e));e=d.call(g,e);return f.call(g,e)}:g[s]=(...e)=>{let t=d.apply(g,e);return t=!1===t?f.apply(g,e):t}}}t.hooks=g}if(e.walkTokens){const x=this.defaults.walkTokens,b=e.walkTokens;t.walkTokens=function(e){let t=[];return t.push(b.call(this,e)),t=x?t.concat(x.call(this,e)):t}}this.defaults={...this.defaults,...t}}),this}setOptions(e){return this.defaults={...this.defaults,...e},this}lexer(e,t){return _.lex(e,t??this.defaults)}parser(e,t){return L.parse(e,t??this.defaults)}parseMarkdown(l){return(n,e)=>{e={...e};const r={...this.defaults,...e},t=this.onError(!!r.silent,!!r.async);if(!0===this.defaults.async&&!1===e.async)return t(new Error("marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise."));if(null==n)return t(new Error("marked(): input parameter is undefined or null"));if("string"!=typeof n)return t(new Error("marked(): input parameter is of type "+Object.prototype.toString.call(n)+", string expected"));r.hooks&&((r.hooks.options=r).hooks.block=l);const s=r.hooks?r.hooks.provideLexer():l?_.lex:_.lexInline,i=r.hooks?r.hooks.provideParser():l?L.parse:L.parseInline;if(r.async)return Promise.resolve(r.hooks?r.hooks.preprocess(n):n).then(e=>s(e,r)).then(e=>r.hooks?r.hooks.processAllTokens(e):e).then(e=>r.walkTokens?Promise.all(this.walkTokens(e,r.walkTokens)).then(()=>e):e).then(e=>i(e,r)).then(e=>r.hooks?r.hooks.postprocess(e):e).catch(t);try{r.hooks&&(n=r.hooks.preprocess(n));let e=s(n,r),t=(r.hooks&&(e=r.hooks.processAllTokens(e)),r.walkTokens&&this.walkTokens(e,r.walkTokens),i(e,r));return t=r.hooks?r.hooks.postprocess(t):t}catch(e){return t(e)}}}onError(n,r){return e=>{var t;if(e.message+="\nPlease report this to https://github.com/markedjs/marked.",n)return t="<p>An error occurred:</p><pre>"+z(e.message+"",!0)+"</pre>",r?Promise.resolve(t):t;if(r)return Promise.reject(e);throw e}}}const C=new O;function E(e,t){return C.parse(e,t)}E.options=E.setOptions=function(e){return C.setOptions(e),t(E.defaults=C.defaults),E},E.getDefaults=e,E.defaults=n.defaults,E.use=function(...e){return C.use(...e),t(E.defaults=C.defaults),E},E.walkTokens=function(e,t){return C.walkTokens(e,t)},E.parseInline=C.parseInline,E.Parser=L,E.parser=L.parse,E.Renderer=P,E.TextRenderer=I,E.Lexer=_,E.lexer=_.lex,E.Tokenizer=A,E.Hooks=B;f=(E.parse=E).options,y=E.setOptions,a=E.use,$=E.walkTokens,c=E.parseInline,g=E,r=L.parse,u=_.lex;n.Hooks=B,n.Lexer=_,n.Marked=O,n.Parser=L,n.Renderer=P,n.TextRenderer=I,n.Tokenizer=A,n.getDefaults=e,n.lexer=u,n.marked=E,n.options=f,n.parse=g,n.parseInline=c,n.parser=r,n.setOptions=y,n.use=a,n.walkTokens=$});
\ No newline at end of file
......@@ -55,17 +55,32 @@
<div class="chat-area">
<!-- 消息历史区域 -->
<div id="scrollContainer" class="scrollContainer">
<div id="chat-messages" class="chat-messages">
<div class="fist-loading" v-if="fistLoading">
<p>快速查找专家</p>
<div v-for="(item, index) in guides" :key="index" @click="questionClick(item)">
<p>{{ item }}</p>
</div>
</div>
<div id="chat-messages" class="chat-messages" v-if="!fistLoading">
<div v-for="(message, index) in messages"
:key="index"
class="message"
:class="message.role + '-message'">
<div class="avatar">{{ message.role === 'user' ? '我' : 'AI' }}</div>
<div class="content">
<p>{{ message.content }}</p>
<p v-html="message.content"></p><!--v-html可能会有xss攻击,但是数据来源于大模型,是否需要清洗数据然后再显示?-->
<div v-if="message.typing" class="typing-indicator"></div>
</div>
</div>
<div class="question">
<div class="question_left"></div>
<div v-if="questions.length" class="question_right">
<p>您可以继续问我: </p>
<div class="questionContent" v-for="(q, i) in questions" :key="i" @click="questionClick(q)">
<p>{{ q }}</p>
</div>
</div>
</div>
</div>
</div>
......@@ -73,7 +88,7 @@
<div class="input-area">
<textarea id="user-input" v-model="userInput" placeholder="请输入您的问题 shift+enter换行" rows="3"></textarea>
<div class="input-area-content">
<div>
<div style="display: flex;align-items: center;justify-content: flex-start;">
<div class="custom-select" v-click-outside="closeExpertDropdown">
<div class="selected-option" @click.stop="toggleExpertDropdown">
<span>{{ selectedExpert }}</span>
......@@ -90,6 +105,25 @@
</div>
</div>
</div>
<div class="custom-select" v-click-outside="closeOrgDropdown">
<div class="selected-option" @click.stop="toggleOrgDropdown">
<span>{{ selectedOrg }}</span>
<svg class="dropdown-icon" :class="{ 'rotated': showOrgDropdown }" viewBox="0 0 24 24" width="16" height="16" stroke="currentColor" stroke-width="2" fill="none">
<polyline points="6 9 12 15 18 9"></polyline>
</svg>
</div>
<div class="dropdown-menu" v-show="showOrgDropdown">
<div class="dropdown-item" @click.stop="selectOrg('全部组织')" :class="{ 'active': selectedOrg === '全部组织' }">
<span>全部</span>
</div>
<div class="dropdown-item" @click.stop="selectOrg('组织内')" :class="{ 'active': selectedOrg === '组织内' }">
<span>组织内</span>
</div>
<div class="dropdown-item" @click.stop="selectOrg('组织外')" :class="{ 'active': selectedOrg === '组织外' }">
<span>组织外</span>
</div>
</div>
</div>
</div>
<div>
<button id="send-btn" class="send-btn" @click="sendMessage" v-show="!isResponding">
......
/**
* AI聊天页面Vue应用
*/
require(['jquery', 'vue', 'utils', 'echarts', 'global'], function ($, Vue, utils, echarts) {
require(['jquery', 'vue', 'utils','marked','markdown', 'global'], function ($, Vue, utils, marked,markdown) {
// 添加点击外部关闭指令
Vue.directive('click-outside', {
bind: function (el, binding, vnode) {
......@@ -22,7 +22,7 @@ require(['jquery', 'vue', 'utils', 'echarts', 'global'], function ($, Vue, utils
data: {
// 用户相关数据
currentLoginUser: {},
fistLoading: true,
// 聊天相关数据
chatHistory: [],
sessionId: "",
......@@ -36,7 +36,11 @@ require(['jquery', 'vue', 'utils', 'echarts', 'global'], function ($, Vue, utils
// 专家选择相关数据
selectedExpert: '内部专家',
showExpertDropdown: false,
// 组织内网选择相关数据
selectedOrg:'全部组织',
showOrgDropdown: false,
questions:[],
guides:['请帮我推荐5位南京地区的区块链外部专家','我需要找既懂通信又擅长软件开发的内部专家','我需要网络安全领域的专家,不确定选内部还是外部'],
// 历史对话分类
historySections: [
{
......@@ -74,7 +78,7 @@ require(['jquery', 'vue', 'utils', 'echarts', 'global'], function ($, Vue, utils
// 消息列表
messages: [
{ role: 'ai', content: '您好!我是您的专家推荐助手,有什么可以帮助您的吗?' }
// { role: 'ai', content: '您好!我是您的专家推荐助手,有什么可以帮助您的吗?' }
]
},
computed: {
......@@ -87,7 +91,6 @@ require(['jquery', 'vue', 'utils', 'echarts', 'global'], function ($, Vue, utils
this.getSessionId();
},
mounted: function () {
this.pageEvent();
// 监听输入框的键盘事件
this.$nextTick(() => {
const textarea = document.getElementById('user-input');
......@@ -102,37 +105,9 @@ require(['jquery', 'vue', 'utils', 'echarts', 'global'], function ($, Vue, utils
this.closeAllMenus();
}
});
// // 获取滚动容器和消息容器
// const scrollContainer = document.getElementById('chat-messages').parentElement;
// const chatMessages = document.getElementById('chat-messages');
// // 创建MutationObserver监听消息变化
// const observer = new MutationObserver(function(mutations) {
// mutations.forEach(mutation => {
// if (mutation.addedNodes.length) {
// // 使用延时确保内容已渲染
// setTimeout(() => {
// scrollContainer.scrollTo({
// top: scrollContainer.scrollHeight,
// behavior: 'smooth' // 可选平滑滚动
// });
// }, 50);
// }
// });
// });
//
// // 开始观察子元素变化
// observer.observe(chatMessages, {
// childList: true
// });
});
},
methods: {
pageEvent:function(){
// 确保在DOM加载完成后执行
document.addEventListener('DOMContentLoaded', function() {
});
},
// 用户相关方法
currentUser: function () {
const that = this;
......@@ -147,7 +122,6 @@ require(['jquery', 'vue', 'utils', 'echarts', 'global'], function ($, Vue, utils
}
});
},
// 主题相关方法
toggleTheme() {
this.theme = this.theme === 'light' ? 'dark' : 'light';
......@@ -174,11 +148,16 @@ require(['jquery', 'vue', 'utils', 'echarts', 'global'], function ($, Vue, utils
this.sendMessage();
}
},
questionClick:function(message){
this.userInput = message;
this.sendMessage();
},
sendMessage() {
const message = this.userInput.trim();
if (!message) return;
if (this.fistLoading)
this.fistLoading = false;
this.questions= [];
this.stopResponse();
// 添加用户消息
this.addMessage('user', message);
......@@ -237,16 +216,30 @@ require(['jquery', 'vue', 'utils', 'echarts', 'global'], function ($, Vue, utils
}
});
// 连接SSE
this.currentEventSource = new EventSource('../../api/langchain/sseIntelligent?chatMessage=' + encodeURIComponent(chatMessage) + "&dialogId=" + this.sessionId);
this.currentEventSource = new EventSource('../../api/langchain/sseBigTwo');
let responseText = '';
var md = new markdown({
html: true, // 允许解析 HTML 标签
linkify: true, // 自动识别链接
typographer: true, // 启用排版优化
breaks: true, // 将单个换行符视为换行
});
this.currentEventSource.onmessage = (event) => {
const data = JSON.parse(event.data);
const content = data.dataToSend[1].data;
if (content !== "stop") {
responseText += content;
this.messages[aiMessageIndex].content = responseText;
const match = content.match(/SUGGEST#\[(.*?)\]#SUGGEST/);
if (match) {
const suggestionsJson = `[${match[1]}]`;
const suggestions = JSON.parse(suggestionsJson);
if (Array.isArray(suggestions)) {
this.questions = suggestions;
}
}else{//提示词不展示
responseText += content;
}
this.messages[aiMessageIndex].content = md.render(responseText);
} else {
// 移除输入指示器
this.messages[aiMessageIndex].typing = false;
......@@ -302,7 +295,7 @@ require(['jquery', 'vue', 'utils', 'echarts', 'global'], function ($, Vue, utils
this.currentEventSource = null;
this.isResponding = false;
}
this.questions = [];
// 获取新的会话ID并清空对话
this.getSessionId().then(() => {
this.clearChat();
......@@ -410,6 +403,18 @@ require(['jquery', 'vue', 'utils', 'echarts', 'global'], function ($, Vue, utils
this.selectedExpert = expert;
// 立即关闭下拉框
this.showExpertDropdown = false;
},
//组织内外选择相关方法
toggleOrgDropdown() {
this.showOrgDropdown = !this.showOrgDropdown;
},
closeOrgDropdown() {
this.showOrgDropdown = false;
},
selectOrg(org) {
this.selectedOrg = org;
// 立即关闭下拉框
this.showOrgDropdown = false;
}
}
});
......
......@@ -27,6 +27,7 @@
--scrollbar-thumb: #c1c1c1;
--scrollbar-hover: #a8a8a8;
--box-shadow: rgba(0, 0, 0, 0.08);
--question-text: #676c90;
}
.dark-theme {
......@@ -50,6 +51,7 @@
--scrollbar-thumb: #555555;
--scrollbar-hover: #777777;
--box-shadow: rgba(0, 0, 0, 0.2);
--question-text: #dbdef8;
}
body {
......@@ -214,6 +216,39 @@ body {
}
/* 右侧聊天区域 */
.fist-loading{
width: 900px;
margin: 8% auto 10px;
}
.fist-loading>p{
color: var(--primary-color);
font-weight: bold;
font-size: 20px;
width: 500px;
margin:0 auto;
}
.fist-loading div{
width: 500px;
max-height: 72px;
line-height: 72px;
border-radius: 16px;
padding: 0 16px;
background-color: var(--sidebar-bg);
border: 1px solid var(--box-shadow);
box-shadow: 0 1px 8px var(--box-shadow);
box-sizing: border-box;
align-items: center;
margin:10px auto;
font-size: 16px;
cursor: pointer;
color: var(--question-text);
}
.fist-loading div:hover{
background-color: #e5eaf6;
color: #475ada;
}
.chat-area {
flex: 1;
display: flex;
......@@ -229,15 +264,14 @@ body {
width: 100%;
overflow-y: auto; /* 让内容继续流动 */
height: calc(100vh - 150px); /* 确保占据足够高度 */
overflow-x: hidden;
padding-top: 20px;
}
/* 聊天消息区域 */
.chat-messages {
width: 900px;
max-width: 95%;
margin: 0 auto;
padding: 20px;
margin-bottom: 10px;
margin: 0 auto 10px;
}
/* 输入区域 */
......@@ -271,6 +305,44 @@ body {
}
/* 用户消息 */
.question{
display: flex;
justify-content: flex-start;
}
.question_left{
width: 40px;
margin: 0 10px;
}
.question_right{
padding:0 6px;
}
.question_right>p{
font-size: 14px;
color: var(--question-text);
}
.questionContent{
font-size: 13px;
color: var(--question-text);
background-color: var(--input-area-bg);
border-radius: 6px;
box-shadow: 0 16px 20px 0 rgba(174, 167, 223, .06);
line-height: 20px;
max-width: 800px;
overflow: hidden;
padding: 8px 16px;
text-overflow: ellipsis;
white-space: nowrap;
width: -moz-fit-content;
width: fit-content;
margin: 10px 0;
cursor: pointer;
}
.questionContent:hover{
background-color: #e5eaf6;
color: #475ada;
}
.user-message {
flex-direction: row-reverse;
}
......@@ -294,7 +366,7 @@ body {
}
.message .content {
max-width: 70%;
max-width: 87%;
padding: 12px 16px;
border-radius: 12px;
box-shadow: 0 1px 2px var(--box-shadow);
......@@ -315,6 +387,7 @@ body {
.content p {
white-space: pre-wrap;
word-break: break-word;
color: var(--text-color);
}
#user-input {
......@@ -396,6 +469,22 @@ body {
66% { content: "..."; }
}
@media(max-width: 1190px){
.chat-messages{
width: 800px;
}
}
@media(max-width: 1090px){
.chat-messages{
width: 700px;
}
}
@media(max-width: 990px){
.chat-messages{
width: 600px;
}
}
/* 响应式设计 */
@media (max-width: 768px) {
.sidebar {
......
......@@ -54,6 +54,8 @@ require.config({
'Popper': [getContextPath() + '/libs/popper/popper-x'],
'component-demo-image': ['./component-demo-image'],
'component-demo-image-new': ['./component-demo-image-new'],
'marked':[getContextPath() + '/libs/marked/marked.umd.min'],
'markdown':[getContextPath() + '/libs/marked/markdown-it.min'],
//流程引擎组件
'process-engine-toolbar-v2': [getContextPath() + '/libs/process-engine/component-process-engine-toolbar-v2'],
'process-engine-toolbar-v3': [getContextPath() + '/libs/process-engine/component-process-engine-toolbar-v3'],
......@@ -188,6 +190,8 @@ define("global",
'XMLHttp-download-file', //下载文件前校验
'component-demo-image', //显示图片
'component-checkbox-list', //复选框
'marked',
'markdown',
//'component-demo-image-new',
// 'directive-ellipsis', //显示更多文字
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment