From cea709ad1c7bd45aa45972174bd528b15bf4ae6b Mon Sep 17 00:00:00 2001 From: yxl <584911253@qq.com> Date: 星期五, 07 二月 2025 10:51:51 +0800 Subject: [PATCH] 最新代码提交 --- src/views/chartView/index.vue | 633 +++++++++++++++++++++++++++++++++++++++++++++++--------- 1 files changed, 525 insertions(+), 108 deletions(-) diff --git a/src/views/chartView/index.vue b/src/views/chartView/index.vue index cdf71d4..a39d1f5 100644 --- a/src/views/chartView/index.vue +++ b/src/views/chartView/index.vue @@ -1,7 +1,12 @@ <template> <div class="chartBox"> <div class="ChartBox"> - <JwChat-index :taleList="list" @enter="bindEnter" v-model="inputMsg" :toolConfig="tool"> + <JwChat-index + :taleList="list" + @enter="bindEnter" + v-model="inputMsg" + :toolConfig="tool" + > </JwChat-index> </div> </div> @@ -12,12 +17,19 @@ import msgData from "../../assets/js/msg/msgData"; import store from "../../store"; import bus from "./../../assets/js/bus.js"; -import { getAgentThistoryUpdate, getAgentIntention, getAgentLayerList, getAgentThistorySave } from "../../api/api.js"; +import { + getAgentThistoryUpdate, + getAgentIntention, + getAgentLayerList, + getAgentThistorySave, + getRagAgentIntention, +} from "../../api/api.js"; import mapSetFunc from "../../assets/js/mapSetFunc.js"; -import { nanoid } from 'nanoid' +import { nanoid } from "nanoid"; import mapServer from "../../assets/js/map/mapServer.js"; import mapImg from "../../assets/js/map/mapImg.js"; import mapModel from "../../assets/js/map/mapModel.js"; +import { marked } from "marked"; export default { name: "jwChat", @@ -32,20 +44,21 @@ obj: null, tool: { show: ["file", "history", "img"], - callback: this.toolEvent + callback: this.toolEvent, }, config: { img: "/image/cover.png", name: "JwChat", dept: "鏈�绠�鍗曘�佹渶渚挎嵎", - callback: this.bindCover - } + callback: this.bindCover, + }, + closeMap: false, }; }, computed: { Obj() { return store.state.setMsgData; - } + }, }, watch: { Obj(newVal, oldVal) { @@ -63,7 +76,7 @@ this.list[this.list.length - 1].text = newVal; } } - } + }, }, mounted() { this.uuid = nanoid(); @@ -78,7 +91,6 @@ // modelLayer.init(); setTimeout(() => { this.getMsg("ai", "鎮ㄥソ锛岃杈撳叆鎸囦护"); - }, 1000); bus.$on("mapInfo", (res) => { @@ -107,46 +119,53 @@ createSocket() { this.wsSocket = new WebSocket(config.wsHost); this.wsSocket.onopen = (event) => { - console.log('WebSocket杩炴帴鎴愬姛'); + console.log("WebSocket杩炴帴鎴愬姛"); //瀹氭椂浠诲姟锛岀敱浜庝娇鐢╪ginx鍙嶅悜浠g悊锛�60绉掓棤鏁版嵁浼犺緭浼氭柇寮� var timer = setInterval(() => { - if ( this.wsSocket.readyState == 1) { + if (this.wsSocket.readyState == 1) { this.wsSocket.send("蹇冭烦鍖呮娴�"); } else { //IM杩炴帴宸叉柇寮� } }, 50 * 1000); - }; this.wsSocket.onmessage = (event) => { // console.log('Received message:', event.data); console.log(event); - if (event.data != "杩炴帴鎴愬姛") { + if ( + event.data != "杩炴帴鎴愬姛" || + event.data.indexOf("鏀跺埌娑堟伅锛屾秷鎭唴瀹癸細蹇冭烦鍖呮娴�") <= 0 + ) { console.log(event.data); - const val = JSON.parse(event.data) + const val = JSON.parse(event.data); if (val.session_id == this.uuid) { - this.setMapfunc(val, this.obj) + this.setMapfunc(val, this.obj); } } - - } + }; }, async getQueryLayerList() { - getAgentLayerList().then(response => { + const item = { + sourceType: "Tileset", + name: "MilitaryFacilities", + url: "/data-api/gisserver/c3dserver/sedb_DESKTOP-15DOTHJ_SEM4550/tileset.json", + }; + setTimeout(() => { + mapServer.addServer(item); + }, 1000); + return; + getAgentLayerList().then((response) => { if (response.code != 200) return; const items = response.data; for (var i in items) { const name = items[i].name; - if ( - name != "FW20" && name != "FW12" - ) { - mapServer.addServer(items[i]) + if (name != "FW20" && name != "FW12") { + console.log("items[i]", items[i]); + mapServer.addServer(items[i]); } - } - - }) + }); }, bindEnter() { const msg = this.inputMsg; @@ -173,7 +192,9 @@ 2 ); mapImg.addImageLayer(); - var roleMsg1 = msgData.getAffairsData([{ type: "text", val: "鐩稿叧淇℃伅宸插湪鍦板浘灞曠ず" }]); + var roleMsg1 = msgData.getAffairsData([ + { type: "text", val: "鐩稿叧淇℃伅宸插湪鍦板浘灞曠ず" }, + ]); this.refashMsg(roleMsg1.list); }, getMsg(type, msg) { @@ -186,98 +207,293 @@ } }, async setMsgStart(res) { + console.log("res----", res); + //杈撳叆@map鎵撳紑鍦板浘 + if (res == "@map") { + var rolMsg = [ + { + type: "text", + val: "鍦板浘宸叉墦寮�", + }, + ]; + this.refashMsg(rolMsg); + //鎵撳紑鍦板浘 + this.$store.state.setScreenFlag = true; + this.closeMap = true; + earthCtrl.viewer.camera.flyTo({ + destination: { + x: -1803769.3854512463, + y: 29158371.286777183, + z: 13465105.223495383, + }, + orientation: { + heading: 6.283185307179586, + pitch: -1.5707963267948966, + roll: 0, + }, + }); + } + //鏈塵ap鍏抽敭瀛楀畾浣� + else if (res.indexOf("@map") > -1) { + this.closeMap = true; + window.earthCtrl.camera.flyTo( + 121.5898036178841, + 23.93799083591751, + 2732.163687177577, + 4.501790216143808, + -32.230361363631324, + 0.001313831409284339, + 2 + ); + } mapImg.removeInit(); mapSetFunc.removeAll(); this.$store.state.setListColor = []; this.$store.state.showLenged = false; - window.earthCtrl.camera.flyTo( - 121.5898036178841, - 23.93799083591751, - 2732.163687177577, - 4.501790216143808, - -32.230361363631324, - 0.001313831409284339, - 2 - ); + this.$store.state.showRelationBox = false; - const formData = new FormData(); - formData.append("message", res); - formData.append("lib_id", "No1"); - formData.append("session_id", this.uuid.toString()); + // const formData = new FormData(); + // formData.append("message", res); + // formData.append("lib_id", "No1"); + // formData.append("session_id", this.uuid.toString()); + const formData = { + message: res, + lib_id: "No1", + session_id: this.uuid.toString(), + }; - var obj = { - "ai": "", - "create_time": msgData.getDate1(), - "human": res, - "sessionid": this.uuid, - "update_time": "", - "userid": 0 + if (formData.message.indexOf("@map") > -1) { + var obj = { + ai: "", + create_time: msgData.getDate1(), + human: res, + sessionid: this.uuid, + update_time: "", + userid: 0, + }; + getAgentThistorySave(obj).then((response) => { + if (response.code == 200) { + obj.id = response.id; + this.obj = obj; + } + this.setAgentIntention(obj, formData); + }); + } else { + this.setRagAgentIntention(formData); } - getAgentThistorySave( - obj - ).then(response => { - - if (response.code == 200) { - obj.id = response.id; - this.obj = obj; - } - - this.setAgentIntention(obj, formData) - }) - - - - + // var obj = { + // ai: "", + // create_time: msgData.getDate1(), + // human: res, + // sessionid: this.uuid, + // update_time: "", + // userid: 0, + // }; + // getAgentThistorySave(obj).then((response) => { + // if (response.code == 200) { + // obj.id = response.id; + // this.obj = obj; + // } + // this.setAgentIntention(obj, formData); + // }); }, async setAgentIntention(obj, formData) { - getAgentIntention(formData).then((response) => { - - if (response.code != 200) { + console.log("obj", formData); + if (formData.message.indexOf("@map") > -1) { + getAgentIntention(formData) + .then((response) => { + if (response.code != 200) { + if (formData.message != "@map") { + var rolMsg = [ + { + type: "text", + val: "鏈煡璇㈠埌鐩稿叧淇℃伅銆�", + }, + ]; + this.refashMsg(rolMsg); + } + return; + } + const type = response.type; + //鏅�氬璇濅俊鎭煡璇� + if (type == "message" || type == "Rag") { + //鍏抽棴鍦板浘 + if (!this.closeMap) { + this.$store.state.setScreenFlag = false; + } + var rolMsg = [ + { + type: "text", + val: type == "Rag" ? response.content : response.msg, + }, + ]; + this.refashMsg(rolMsg); + } + //鍦板浘鏌ヨ + else { + //鎵撳紑鍦板浘 + this.$store.state.setScreenFlag = true; + this.setMapfunc(response.content, obj); + } + }) + .catch((error) => { + var rolMsg = [ + { + type: "text", + val: "鏈煡璇㈠埌鐩稿叧淇℃伅銆�", + }, + ]; + this.refashMsg(rolMsg); + }); + } else { + getRagAgentIntention(formData).then((res) => {}); + } + // getAgentIntention(formData) + // .then((response) => { + // if (response.code != 200) { + // if (formData.message != "@map") { + // var rolMsg = [ + // { + // type: "text", + // val: "鏈煡璇㈠埌鐩稿叧淇℃伅銆�", + // }, + // ]; + // this.refashMsg(rolMsg); + // } + // return; + // } + // const type = response.type; + // //鏅�氬璇濅俊鎭煡璇� + // if (type == "message" || type == "Rag") { + // //鍏抽棴鍦板浘 + // if (!this.closeMap) { + // this.$store.state.setScreenFlag = false; + // } + // var rolMsg = [ + // { + // type: "text", + // val: type == "Rag" ? response.content : response.msg, + // }, + // ]; + // this.refashMsg(rolMsg); + // } + // //鍦板浘鏌ヨ + // else { + // //鎵撳紑鍦板浘 + // this.$store.state.setScreenFlag = true; + // this.setMapfunc(response.content, obj); + // } + // }) + // .catch((error) => { + // var rolMsg = [ + // { + // type: "text", + // val: "鎶辨瓑锛屾湇鍔″櫒浼间箮鍑轰簡鐐归棶棰橈紝鎴戜滑姝e湪淇涓��", + // }, + // ]; + // this.refashMsg(rolMsg); + // }); + }, + //鏅�氬璇濋棶绛� + async setRagAgentIntention(formData) { + try { + // 鍙戦�佽姹� + const params = new URLSearchParams(formData); + const url = `/rag-api/rag?${params.toString()}`; + let response = await fetch(url, { + method: "get", + responseType: "stream", + headers: { + "Content-Type": "application/json", + }, + }); + // ok瀛楁鍒ゆ柇鏄惁鎴愬姛鑾峰彇鍒版暟鎹祦 + if (!response.ok) { var rolMsg = [ { type: "text", - val: "鏈煡璇㈠埌鐩稿叧淇℃伅銆�" - } + val: "鏈煡璇㈠埌鐩稿叧淇℃伅銆�", + }, ]; this.refashMsg(rolMsg); return; } - - - const type = response.type; - if (type == "Map") { - this.setMapfunc(response.content, obj); - } else if (type == "Rag") { - this.setMapRag(response, obj); + // 鐢ㄦ潵鑾峰彇涓�涓彲璇荤殑娴佺殑璇诲彇鍣紙Reader锛変互娴佺殑鏂瑰紡澶勭悊鍝嶅簲浣撴暟鎹� + const reader = response.body.getReader(); + // 灏嗘祦涓殑瀛楄妭鏁版嵁瑙g爜涓烘枃鏈瓧绗︿覆 + const textDecoder = new TextDecoder(); + let result = true; + let sqlValue = ""; + while (result) { + // done琛ㄧず娴佹槸鍚﹀凡缁忓畬鎴愯鍙� value鍖呭惈璇诲彇鍒扮殑鏁版嵁鍧� + const { done, value } = await reader.read(); + if (done) { + result = false; + break; + } + console.log(textDecoder.decode(value), "鍒嗘杩斿洖鐨勬暟鎹�"); + sqlValue += textDecoder.decode(value); + var rolMsg = [ + { + type: "stream", + val: marked(sqlValue), + }, + ]; + this.refashMsg(rolMsg); } - }); + // console.log(sqlValue, "杈撳嚭鎵�鏈夎繑鍥炴暟鎹�"); + } catch (err) { + var rolMsg = [ + { + type: "text", + val: "鏈煡璇㈠埌鐩稿叧淇℃伅銆�", + }, + ]; + this.refashMsg(rolMsg); + } + }, + async streamChatResponse(formData) { + try { + const response = await getRagAgentIntention(formData); + return response; // 杩斿洖娴佸搷搴� + } catch (error) { + var rolMsg = [ + { + type: "text", + val: "鏈煡璇㈠埌鐩稿叧淇℃伅銆�", + }, + ]; + this.refashMsg(rolMsg); + } }, setMapfunc(res, obj) { this.$store.state.showLenged = false; - switch (res.func) { case "queryRelationship": - var roleMsg = null; if (res.data) { - mapSetFunc.init(res) + mapSetFunc.init(res); var a = `${res.msg}`; this.setUpdateHistoryInFor(obj, a); roleMsg = msgData.getMdData("markdown", a); } else { roleMsg = msgData.getAffairsData([{ type: "text", val: res.msg }]); - } - this.refashMsg(roleMsg.list); break; case "queryMeta": - var a = `${res.data}`; + // var a = `|鏁版嵁绫诲瀷 |鏁版嵁閲� |\n|------|------|\n|鍐涗簨鐩爣 |724|\n|`//`${res.data}`; + const subData = res.data + .filter((item) => item.subtype !== null) + .map((item) => `| ${item.subtype} | ${item.count} |`) + .join("\n"); + var a = `| 鏁版嵁绫诲瀷 | 鏁版嵁閲� |\n|------|------|\n` + subData; + console.log("aaa", subData, a); this.setUpdateHistoryInFor(obj, a); var roleMsg = msgData.getMdData("markdown", a); this.refashMsg(roleMsg.list); - mapSetFunc.init(res) + mapSetFunc.init(res); break; case "combatSimulate": this.setMsgStart2(); @@ -287,11 +503,9 @@ this.refashMsg(roleMsg1.list); break; case "batEnv": - if (res.msg) { var a = `${res.msg}`; var roleMsg = msgData.getMdData("markdown", a); - roleMsg.list[0].link = true; @@ -303,15 +517,155 @@ break; case "poiMap": - case "aroundPoi": - mapSetFunc.init(res) + mapSetFunc.init(res); this.setUpdateHistoryInFor(obj, res.msg); - var roleMsg = msgData.getAffairsData([{ type: "text", val: res.msg }]); + var roleMsg = msgData.getAffairsData([ + { type: "text", val: "鍦板浘宸叉樉绀�" }, + ]); + this.refashMsg(roleMsg.list); + break; + case "aroundPoi": + let dataList = [ + { + type: "鍙墦鍑荤洰鏍�", + color: "#FF3366", + list: [], + }, + { + type: "涓嶅彲鎵撳嚮鐩爣", + color: "#33FF66", + list: [], + }, + { + type: "鍏朵粬", + color: "#3366FF", + list: [], + }, + ]; + res.data.forEach((item) => { + if (item.ifstrike === "1") { + dataList[0].list.push(item.uuid); + } else if (item.ifstrike === "2") { + dataList[1].list.push(item.uuid); + } else { + dataList[2].list.push(item.uuid); + } + }); + const resultData = dataList + .map((item) => `| ${item.type} | ${item.list.length} |`) + .join("\n"); + var a = `| 鏁版嵁绫诲瀷 | 鏁版嵁閲� |\n|------|------|\n` + resultData; + console.log("aaa", a); + this.setUpdateHistoryInFor(obj, a); + var roleMsg = msgData.getMdData("markdown", a); + this.refashMsg(roleMsg.list); + const finalData = { + func: "aroundPoi", + data: dataList, + }; + mapSetFunc.init(finalData); + break; + case "getStrike": + let dataList1 = [ + { + type: "鍙墦鍑荤洰鏍�", + color: "#FF3366", + list: [], + }, + { + type: "涓嶅彲鎵撳嚮鐩爣", + color: "#33FF66", + list: [], + }, + { + type: "鍏朵粬", + color: "#3366FF", + list: [], + }, + ]; + res.data.forEach((item) => { + if (item.ifstrike === "1") { + dataList1[0].list.push(item.uuid); + } else if (item.ifstrike === "2") { + dataList1[1].list.push(item.uuid); + } else { + dataList1[2].list.push(item.uuid); + } + }); + const resultData1 = dataList1 + .map((item) => `| ${item.type} | ${item.list.length} |`) + .join("\n"); + var a = `| 鏁版嵁绫诲瀷 | 鏁版嵁閲� |\n|------|------|\n` + resultData1; + console.log("aaa", a); + this.setUpdateHistoryInFor(obj, a); + var roleMsg = msgData.getMdData("markdown", a); + this.refashMsg(roleMsg.list); + const finalData1 = { + func: "aroundPoi", + data: dataList1, + }; + mapSetFunc.init(finalData1); + break; + case "getParam": + mapSetFunc.init(res); + console.log("res.data.targetinfo", res); + this.setUpdateHistoryInFor(obj, res.msg); + if (res.data.length === 1) { + var roleMsg = msgData.getAffairsData([ + { type: "text", val: res.data[0].targetinfo }, + ]); + this.refashMsg(roleMsg.list); + } else { + const markData = res.data + .map((item) => `| ${item.name} | ${item.targetinfo} |`) + .join("\n"); + let markAttr = `| 鍚嶇О | 灞炴�т俊鎭� |\n|------|------|\n` + markData; + var roleMsg = msgData.getMdData("markdown", markAttr); + this.refashMsg(roleMsg.list); + } + break; + case "aroundPoi_2": + mapSetFunc.init(res); + console.log("res.data.targetinfo", res); + const resData = res.data + .map((item) => `| ${item.name} | ${item.targetinfo} |`) + .join("\n"); + var attr = `| 鍚嶇О | 灞炴�т俊鎭� |\n|------|------|\n` + resData; + console.log("aaa", attr); + var roleMsg = msgData.getMdData("markdown", attr); + this.setUpdateHistoryInFor(obj, res.msg); + this.refashMsg(roleMsg.list); + break; + case "attackentity": + mapSetFunc.init(res); + this.setUpdateHistoryInFor(obj, res.msg); + if (res.data.length === 1) { + var roleMsg = msgData.getAffairsData([ + { type: "text", val: res.data[0].targetinfo }, + ]); + this.refashMsg(roleMsg.list); + } else { + const markData = res.data + .map((item) => `| ${item.name} | ${item.targetinfo} |`) + .join("\n"); + let markAttr = `| 鍚嶇О | 灞炴�т俊鎭� |\n|------|------|\n` + markData; + var roleMsg = msgData.getMdData("markdown", markAttr); + this.refashMsg(roleMsg.list); + } + break; + case "getRelatedEntity": + this.setUpdateHistoryInFor(obj, res.msg); + this.handleRelationData(res.data); + var roleMsg = msgData.getAffairsData([ + { type: "text", val: "椤甸潰宸叉樉绀�" }, + ]); this.refashMsg(roleMsg.list); break; default: this.setUpdateHistoryInFor(obj, res.msg); - var roleMsg1 = msgData.getAffairsData([{ type: "text", val: res.msg }]); + var roleMsg1 = msgData.getAffairsData([ + { type: "text", val: res.msg }, + ]); this.refashMsg(roleMsg1.list); break; } @@ -319,10 +673,9 @@ setUpdateHistoryInFor(obj, message) { obj.ai = message; obj.update_time = msgData.getDate1(); - getAgentThistoryUpdate(obj).then(response => { + getAgentThistoryUpdate(obj).then((response) => { console.log(response); - - }) + }); }, setMapRag(res, objRes) { const val = res.content.split("\n"); @@ -331,8 +684,8 @@ if (val[i]) { obj.push({ type: "text", - val: val[i] - }) + val: val[i], + }); } } var listData = []; @@ -340,52 +693,116 @@ var obj_file = res.fileSrource; for (var i = 0; i < obj_file.length; i++) { const file_name = obj_file[i].metadata.split("/"); - const name = file_name[file_name.length - 1] + const name = file_name[file_name.length - 1]; if (listData.length == 0) { listData.push({ name: name, - val: [ - obj_file[i].page_content - ] - }) + val: [obj_file[i].page_content], + }); } else { var boolen = false; for (var k in listData) { if (listData[k].name == name) { boolen = true; - listData[k].val.push(obj_file[i].page_content) + listData[k].val.push(obj_file[i].page_content); } } if (boolen == false) { listData.push({ name: name, - val: [ - obj_file[i].page_content - ] - }) + val: [obj_file[i].page_content], + }); } - } } } if (listData.length > 0) { obj.push({ type: "fileSrource", - val: listData - }) + val: listData, + }); } var roleMsg = msgData.getAffairsData(obj); this.setUpdateHistoryInFor(objRes, JSON.stringify(roleMsg.list)); this.refashMsg(roleMsg.list); - }, refashMsg(res) { this.loading = false; this.list[this.list.length - 1].list = res; - } - } + }, + //鍏崇郴鏁版嵁澶勭悊 + handleRelationData(data) { + // 鍑嗗鑺傜偣鍜岃竟 + let graphData = []; + let links = []; + // 澶勭悊涓荤被鍨�(mainType) + Object.keys(data.mainType).forEach((main) => { + graphData.push({ + name: main, + category: "mainType", + symbolSize: 70, + itemStyle: { + color: "#4169E1", + }, + }); + + data.mainType[main].forEach((sec) => { + graphData.push({ + name: sec, + category: "secType", + symbolSize: 60, + itemStyle: { + color: "#87CEFA", + }, + }); + + // 澶勭悊瀛愮被鍨�(secType) + if (data.secType[sec]) { + data.secType[sec].forEach((sub) => { + graphData.push({ + name: sub, + category: "subType", + symbolSize: 50, + itemStyle: { + color: "#30ECA6", + }, + }); + + // 澶勭悊鍏蜂綋椤�(subtype) + if (data.subtype[sub]) { + data.subtype[sub].forEach((item) => { + graphData.push({ + name: item.name, + category: "subTypeItem", + symbolSize: 50, + itemStyle: { + color: "#00BFFF", + }, + uuid: item.uuid, + lontitude: item.lontitude, + lattitude: item.lattitude, + }); + links.push({ source: sub, target: item.name }); + }); + } + // 鐖跺瓙鑺傜偣杩炴帴 + links.push({ source: sec, target: sub }); + }); + } + // 鐖跺瓙鑺傜偣杩炴帴 + links.push({ source: main, target: sec }); + }); + }); + console.log("nodes---", graphData, "links---", links); + this.$store.state.showRelationBox = true; + this.$store.state.relationData = { + nodes: graphData, + links: links, + }; + }, + }, }; </script> <style scoped> -- Gitblit v1.9.3