From c93d4b3af5739f786cfdf20b16b28ec60403f709 Mon Sep 17 00:00:00 2001
From: suerprisePlus <15810472099@163.com>
Date: 星期二, 25 六月 2024 19:53:54 +0800
Subject: [PATCH] 前端对接 seb实体库,rag基本服务

---
 src/components/Chat/chatList.vue  |  148 ++++---
 src/assets/js/map/mapServer.js    |   27 
 src/assets/js/map/mapView.js      |  153 -------
 src/assets/js/msg/msgData.js      |  137 +++----
 src/store/index.js                |    5 
 src/assets/js/map/mapConfig.js    |   16 
 src/views/chartView/index.vue     |  123 ++++-
 src/api/modelBase.js              |   18 
 src/assets/js/map/modelLayer.js   |   90 +++-
 src/utils/modelGeo.js             |    2 
 src/assets/js/map/mapJsonLayer.js |  387 ++++++++++++++++++++
 11 files changed, 737 insertions(+), 369 deletions(-)

diff --git a/src/api/modelBase.js b/src/api/modelBase.js
index 793cd10..56de610 100644
--- a/src/api/modelBase.js
+++ b/src/api/modelBase.js
@@ -15,4 +15,22 @@
   return modelGeo.post("/entitydb/list/canview", params);
 }
 
+// export function getListCanview(params) {
+//   return modelGeo.post("/entitydb/list/canview", params);
+// }
+export function getmapConfig(params) {
+  return modelGeo.post("/entitydb/map/config", params);
+}
+export function getQueryEentity(params) {
+  return modelGeo.post("/entitydbdata/query/entity", params);
+}
+export function getSettingPublickey(params) {
+  return modelGeo.get("/setting/publickey", params);
+}
+export function getQueryEentity2() {
+  return modelGeo.post("/entitydbdata/query/entity?layerid=432a7d4f-b136-4649-91a3-52709db9c3ef&dbid=a02c1f922bd64a0ea5979dbebc60d337&geometry=%7B%22type%22%3A%22Polygon%22%2C%22coordinates%22%3A%5B%5B%5B120.26718884999998%2C14.807266503837244%5D%2C%5B120.26172124567293%2C14.805548890345191%5D%2C%5B120.2583422638269%2C14.80105218429488%5D%2C%5B120.25834249053803%2C14.795494078804275%5D%2C%5B120.26172161249924%2C14.790997581217345%5D%2C%5B120.26718884999998%2C14.789280096562752%5D%2C%5B120.2726560875007%2C14.790997581217345%5D%2C%5B120.27603520946194%2C14.795494078804275%5D%2C%5B120.27603543617307%2C14.80105218429488%5D%2C%5B120.27265645432705%2C14.805548890345191%5D%2C%5B120.26718884999998%2C14.807266503837244%5D%5D%5D%7D&returnCountOnly=true&token=15e972cfc0e24bf490ac57f9847cb3c2");
+}
+
+
+// /entitydbdata/query/entity
 
diff --git a/src/assets/js/map/mapConfig.js b/src/assets/js/map/mapConfig.js
index e878070..00bca62 100644
--- a/src/assets/js/map/mapConfig.js
+++ b/src/assets/js/map/mapConfig.js
@@ -4,9 +4,19 @@
     earthCtrl.userScene.flyTo(res);
   },
   setPointToCrical(lon, lat, distance) {
-    const radius = distance ? distance : 100;
-    var point = turf.point([lon, lat]);
-    var buffered = turf.buffer(point, radius, { units: "miles", steps: 64 });
+    var buffered = turf.circle([lon, lat], distance, {
+      units: "kilometers",
+      steps: 10,
+      properties: { foo: "bar" }
+    });
+    console.log(buffered);
+     
+    const coord = buffered.geometry.coordinates[0];
+    const std = coord.map((item) => {
+      const rs = turf.toMercator(turf.point(item));
+      return rs.geometry.coordinates
+    });
+    buffered.geometry.coordinates[0] =std
     return buffered;
   }
 };
diff --git a/src/assets/js/map/mapJsonLayer.js b/src/assets/js/map/mapJsonLayer.js
new file mode 100644
index 0000000..8e3f97c
--- /dev/null
+++ b/src/assets/js/map/mapJsonLayer.js
@@ -0,0 +1,387 @@
+import axios from "axios";
+import mapConfig from "./mapConfig";
+import * as turf from "@turf/turf";
+import mapServer from "./mapServer";
+import { getToken } from "../../../utils/auth";
+import modelLayer from "./modelLayer";
+import {
+  getPublickey,
+  getQueryEentity,
+  getSettingPublickey,
+  getQueryEentity2
+} from "../../../api/modelBase.js";
+import { nextTick } from "vue";
+import JSEncrypt from "jsencrypt";
+const layerJson = {
+  layerData: null,
+  url: null,
+  coord: null,
+  rectangularSensor: null,
+  init(url) {
+    this.url = url;
+    this.getJsonLayer();
+  },
+  getJsonLayer() {
+    const that = this;
+    Cesium.GeoJsonDataSource.load(this.url, {
+      stroke: Cesium.Color.fromCssColorString("#FFFFFF"), //澶氳竟褰㈡垨绾跨殑棰滆壊
+      fill: Cesium.Color.fromCssColorString("#FFFFFF"), //澶氳竟褰㈡垨绾跨殑棰滆壊
+      strokeWidth: 1, //澶氳竟褰㈡垨绾� 瀹藉害
+      clampToGround: true //澶氳竟褰㈡垨绾� 鍥哄畾鍦ㄥ湴闈笂true/false
+    }).then((dataSource) => {
+      const entities = dataSource.entities.values;
+      that.layerData = dataSource;
+      entities.map((item) => {
+        item.polygon.heightReference =
+          Cesium.HeightReference.RELATIVE_TO_GROUND; // 璐村湴
+        item.polygon.height = 0; // 璺濆湴楂樺害0绫�
+        item.polygon.extrudedHeightReference =
+          Cesium.HeightReference.RELATIVE_TO_GROUND; //鎷変几
+        item.polygon.extrudedHeight = item.properties["ELEVATION"]; // 鎷変几楂樺害
+        var polyPositions = item.polygon.hierarchy.getValue().positions;
+        var polyCenter = Cesium.BoundingSphere.fromPoints(polyPositions).center; //涓績鐐�
+        polyCenter = Cesium.Ellipsoid.WGS84.scaleToGeodeticSurface(polyCenter);
+        item.position = polyCenter;
+        if (item.id == "965") {
+          that.coord = {
+            lon: item.properties["lon"]._value,
+            lat: item.properties["lat"]._value
+          };
+        }
+        item.label = {
+          text: "",
+          font: "500 20px Helvetica",
+          scale: 1,
+          style: Cesium.LabelStyle.FILL,
+          fillColor: Cesium.Color.WHITE,
+
+          eyeOffset: new Cesium.Cartesian3(
+            0.0,
+            item.polygon.extrudedHeight + 1,
+            -(item.polygon.extrudedHeight + 1)
+          ),
+          verticalOrigin: Cesium.VerticalOrigin.BOTTOM,
+          showBackground: true,
+          distanceDisplayCondition: new Cesium.DistanceDisplayCondition(
+            50.0,
+            500.0
+          ),
+          backgroundColor: new Cesium.Color(26 / 255, 196 / 255, 228 / 255, 1.0) //鑳屾櫙椤旇壊
+        };
+      });
+      Viewer.dataSources.add(dataSource);
+    });
+  },
+  setQyeryData(res) {
+    this.setTitleSetRest();
+    if (res.indexOf("娴峰啗闄嗘垬闃�") > -1) {
+      this.setQueryExtent2();
+    } else if (res.indexOf("鍐涗簨鐩爣") > -1) {
+      this.setQueryByFiled("鍐涗簨鐩爣", "#409EFF", false);
+    } else if (res.indexOf("姘戝畢") > -1) {
+      this.setQueryByFiled("姘戝畢", "#808080", false);
+    } else if (res.indexOf("缁忔祹鐩爣") > -1) {
+      this.setQueryByFiled("缁忔祹鐩爣", "#FFFF00", true);
+    } else if (res.indexOf("鍫や赴") > -1) {
+      // this.setQueryTF("SubicBayWeapon_wfs", "weapons", "鍫や赴绯荤粺");
+      this.setQueryTF2("鍫や赴绯荤粺");
+    }
+  },
+
+  getPublickey(res) {
+    const encrypt = new JSEncrypt();
+    encrypt.setPublicKey(modelLayer.publickey + "");
+    return encrypt.encrypt(res);
+  },
+  setQueryTF2(name) {
+    const obj = "weaponname = '" + name + "'" + "";
+    const filed = this.getPublickey(obj);
+    const layer = modelLayer.layers.filter((item) => {
+      if (item.name == "姝﹀櫒鐐�") {
+        return item;
+      }
+    });
+    if (layer.length <= 0) return;
+    getQueryEentity({
+      token: getToken(),
+      start: 1,
+      count: 0,
+      containCount: true,
+      layerid: layer[0].id,
+      dbid: modelLayer.dbid,
+      where: filed
+    }).then((response) => {
+      if (response.code != 200) return;
+      const geom = response.data.items[0];
+      const position = [geom._x, geom._y, 0];
+      const cylinder = {
+        radius: 1000, //鍗婂緞
+        angle: 30, //鎵弿瑙掑害锛堝彲閫夛級
+        speed: 5, //鍊嶉�燂紙鍙�夛級
+        stackPartitions: 80, //妯悜缃戞牸鏁帮紙鍙�夛級
+        slicePartitions: 80, //绾靛悜缃戞牸鏁帮紙鍙�夛級
+        wallColor: "rgba(255,255,255,0)" //鎵弿澧欓鑹诧紙鍙�夛級
+      };
+      this.rectangularSensor = earthCtrl.factory.createRectangularSensor(
+        position,
+        cylinder
+      );
+      Viewer.zoomTo(this.rectangularSensor.item);
+    });
+  },
+  setQueryByFiled(name, color, label) {
+    const obj = "targettype = '" + name + "'" + "";
+    const filed = this.getPublickey(obj);
+    var objItem = mapServer.listData.filter((item) => {
+      if (item.type === "Tileset") {
+        return item;
+      }
+    });
+    if (objItem.length <= 0) return;
+    var tileset = objItem[0];
+    getQueryEentity({
+      token: getToken(),
+      start: 1,
+      count: 0,
+      containCount: true,
+      layerid: tileset.layerId,
+      dbid: modelLayer.dbid,
+      where: filed
+    }).then((response) => {
+      if (response.code != 200) return;
+      var std = [];
+      const items = response.data.items;
+      items.map((item) => {
+        if (item.targettype == name) {
+          std.push(item.seid);
+        }
+      });
+      nextTick(() => {
+        if (std.length <= 0) return;
+        this.setTilesetColorChange(tileset, std, color);
+      });
+    });
+  },
+  setTitleSetRest() {
+    if (this.rectangularSensor) {
+      this.rectangularSensor.wall.forEach((wall) => {
+        Viewer.entities.remove(wall);
+      });
+      Viewer.entities.remove(this.rectangularSensor.item);
+      this.rectangularSensor = null;
+    }
+    var objItem = mapServer.listData.filter((item) => {
+      if (item.type === "Tileset") {
+        return item;
+      }
+    });
+    if (objItem.length <= 0) return;
+    var tileset = objItem[0].layer;
+    tileset.style = new Cesium.Cesium3DTileStyle({
+      color: {
+        evaluateColor: (feature) => {
+          return new Cesium.Color.fromCssColorString("#FFFFFF");
+        }
+      }
+    });
+  },
+  setTilesetColorChange(model, ids, color) {
+    var tileset = model.layer;
+    tileset.style = new Cesium.Cesium3DTileStyle({
+      color: {
+        evaluateColor: (feature) => {
+          const id = feature.getProperty("id");
+          if (ids.indexOf(id) > -1) {
+            return new SmartEarth.Cesium.Color.fromCssColorString(color);
+          } else {
+            return new SmartEarth.Cesium.Color.fromCssColorString("#FFFFFF");
+          }
+        }
+      }
+    });
+  },
+  getTileSet() {
+    var objItem = mapServer.listData.filter((item) => {
+      if (item.type === "Tileset") {
+        return item;
+      }
+    });
+    if (objItem.length <= 0) {
+      return null;
+    }
+    return objItem[0];
+  },
+  setQueryExtent2() {
+    const tileset = this.getTileSet();
+    if (!tileset) {
+      return;
+    }
+    const obj = "ejfl like '%绌哄啗鍩哄湴%'";
+    const filed = this.getPublickey(obj);
+    getQueryEentity({
+      token: getToken(),
+      start: 1,
+      count: 0,
+      containCount: true,
+      layerid: tileset.layerId,
+      dbid: modelLayer.dbid,
+      where: filed
+    }).then((response) => {
+      if (response.code != 200) return;
+      const items = response.data.items[0];
+
+      this.getQueryGeomExtent(items, tileset.layerId);
+    });
+  },
+  getQueryGeomExtent(items, layerid) {
+    var geom = mapConfig.setPointToCrical(items.lon, items.lat, 1);
+    const token = getToken();
+    const url =
+      config.modelBase.url +
+      config.modelBase.geo +
+      "/entitydbdata/query/entity";
+
+    axios
+      .post(
+        url,
+        {
+          layerid: layerid,
+          dbid: modelLayer.dbid,
+          geometry: JSON.stringify(geom.geometry),
+          returnCountOnly: true,
+          token: token
+        },
+        {
+          headers: {
+            Authorization: token,
+            "Content-Type": "application/x-www-form-urlencoded"
+            // 'Cookie': "token=" + token,
+            // 'Token': token
+          }
+        }
+      )
+      .then((response) => {
+        this.getLayerModelList(url, response.data.data, geom.geometry, layerid);
+      });
+  },
+  getLayerModelList(url, count, geom, layerid) {
+    const token = getToken();
+
+    axios
+      .post(
+        url,
+        {
+          token: token,
+          dbid: modelLayer.dbid,
+          layerid: layerid,
+          start: 1,
+          count: count,
+          containCount: true,
+          geometry: JSON.stringify(geom)
+        },
+        {
+          headers: {
+            Authorization: token,
+            "Content-Type": "application/x-www-form-urlencoded"
+          }
+        }
+      )
+      .then((response) => {
+        var std = [];
+        const items = response.data.data.items;
+        items.map((val) => {
+          std.push(val.seid);
+        });
+
+        nextTick(() => {
+          var objItem = mapServer.listData.filter((item) => {
+            if (item.type === "Tileset") {
+              return item;
+            }
+          });
+          if (objItem.length <= 0) return;
+          var tileset = objItem[0];
+          if (std.length <= 0) return;
+          this.setTilesetColorChange(tileset, std, "#FF0000");
+        });
+      });
+  },
+  setQueryExtent(res) {
+    const geom = mapConfig.setPointToCrical(res.lon, res.lat, 5000);
+    var arr = [];
+    const coord = geom.geometry.coordinates[0];
+    coord.map((item) => {
+      if (arr.length == 0) {
+        arr = item;
+      } else {
+        arr = [...arr, ...item];
+      }
+    });
+    arr = arr.toString().replaceAll(",", " ");
+    this.getQuery(this.url, arr, this.layerData);
+  },
+  getQuery(url, area, layer) {
+    const entity = layer.entities.values;
+    entity.filter((rs) => {
+      rs.polygon.material = new Cesium.Color.fromCssColorString("#FFFFFF");
+    });
+    axios
+      .get(url, {
+        params: {
+          version: "1.3.0",
+          request: "GetFeature",
+          typename: "GeoEntity",
+          propertyname: "*",
+          format: "json",
+          filter: `<ogc:Filter xmlns:ogc="http://www.opengis.net/ogc"><ogc:Intersects><ogc:PropertyName /><gml:Polygon xmlns:gml="http://www.opengis.net/gml" srsName="EPSG:4326"><gml:exterior><gml:LinearRing><gml:posList>${area}</gml:posList></gml:LinearRing></gml:exterior></gml:Polygon></ogc:Intersects></ogc:Filter>`
+        }
+      })
+      .then((res) => {
+        const obj = res.data.features;
+        obj.filter((item) => {
+          entity.filter((rs) => {
+            if (item.id == rs.id) {
+              rs.polygon.material = Cesium.Color.RED;
+            }
+          });
+        });
+      });
+  },
+  setQueryTF(content, layer, name) {
+    const url = this.getQueryUrl(content, layer);
+    axios.get(url).then((res) => {
+      const data = res.data.features;
+      const obj = data.filter((item) => {
+        if (item.properties.weaponname == name) {
+          return item;
+        }
+      });
+      if (obj.length <= 0) return;
+      var centroid = turf.centroid(obj[0]);
+      const geom = centroid.geometry.coordinates;
+      const position = [geom[0], geom[1], 0];
+      const cylinder = {
+        radius: 1000, //鍗婂緞
+        angle: 30, //鎵弿瑙掑害锛堝彲閫夛級
+        speed: 5, //鍊嶉�燂紙鍙�夛級
+        stackPartitions: 80, //妯悜缃戞牸鏁帮紙鍙�夛級
+        slicePartitions: 80, //绾靛悜缃戞牸鏁帮紙鍙�夛級
+        wallColor: "rgba(255,255,255,0)" //鎵弿澧欓鑹诧紙鍙�夛級
+      };
+      const item = earthCtrl.factory.createRectangularSensor(
+        position,
+        cylinder
+      );
+      Viewer.zoomTo(item.item);
+    });
+  },
+  getQueryUrl(content, layer) {
+    return (
+      "https://cim.smartearth.cn/SEserver/wfsserver/" +
+      content +
+      "?version=1.1.0&request=GetFeature&format=json&typename=" +
+      layer
+    );
+  }
+};
+export default layerJson;
diff --git a/src/assets/js/map/mapServer.js b/src/assets/js/map/mapServer.js
index 5f00d01..842ed03 100644
--- a/src/assets/js/map/mapServer.js
+++ b/src/assets/js/map/mapServer.js
@@ -37,26 +37,25 @@
     }
   },
   addTileSetLayer(res) {
+    //   const model =  earthCtrl.factory.create3DTilesets({
+    //     url: res.url
+    // });
+    // var model = Viewer.scene.primitives.add(
+    //   new Cesium.Cesium3DTileset({
+    //     // url: res.url
+    //     url:'https://cim.smartearth.cn/SEServer/c3dserver/WhiteBox/tileset.json'
+    //   })
+    // );
     const tileset = new Cesium.Cesium3DTileset({
       url: res.url
     });
+    earthCtrl.primitives.add(tileset);
+    
 
-    Viewer.scene.primitives.add(tileset);
-    // const that = this;
-    // tileset.readyPromise.then((tileObj) => {
-    //   tileObj.tileVisible.addEventListener((tile) => {
-    //     if (Cesium.defined(tile.content)) {
-    //               var featuresLength = tile.content.featuresLength;
-    //               for (var i = 0; i < featuresLength; i++) {
-    //                 var feature = tile.content.getFeature(i);
-    //                 // console.log(feature.getProperty("id"));
-    //               }
-    //     }
-    //   });
-    // });
     this.listData.push({
       layer: tileset,
-      type: this.sourceType
+      type: this.sourceType,
+      layerId: res.id
     });
   },
   traverseVisibleTiles() {
diff --git a/src/assets/js/map/mapView.js b/src/assets/js/map/mapView.js
index cb1b052..515ac66 100644
--- a/src/assets/js/map/mapView.js
+++ b/src/assets/js/map/mapView.js
@@ -4,6 +4,7 @@
 import modelLayer from "./modelLayer";
 import wfsConfig from "./wfsConfig";
 import mapInfo from "./mapInfo";
+import layerJson from "./mapJsonLayer";
 
 const mapViewer = {
   configTooles: null,
@@ -25,160 +26,14 @@
       sourceType: "arcgis",
       url: "https://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer"
     });
-    // earthCtrl.factory.createTerrainLayer({
-    //   sourceType: "ctb",
-    //   url: "https://tiles1.geovisearth.com/base/v1/terrain?token=486dac3bec56d7d7c2a581c150be2bd937462f1e8f3bc9c78b5658b396122405"
-    // });
-
     mapServer.addServer({
       sourceType: "tms",
       url: "http://192.168.11.41:9001/gisserver/tmsserver/SubicBayArea"
     });
+    modelLayer.init();
     mapInfo.setEntityQueryInput();
-
-    const url =
-      "http://103.135.160.14:9038/gisserver/wfsserver/SubicBayAreaVector_wfs?version=1.1.0&request=GetFeature&format=json&typename=GeoEntity";
-    const areaBox =
-      "120.28915940000012 14.809144082000034 120.28915940000012 14.837205054000039 120.31165600000003 14.837205054000039 120.31165600000003 14.809144082000034 120.28915940000012 14.809144082000034";
-
-    Cesium.GeoJsonDataSource.load(url, {
-      stroke: Cesium.Color.fromCssColorString("#FFF0F5"), //澶氳竟褰㈡垨绾跨殑棰滆壊
-      fill: Cesium.Color.fromCssColorString("#FFF0F5"), //澶氳竟褰㈡垨绾跨殑棰滆壊
-      strokeWidth: 1, //澶氳竟褰㈡垨绾� 瀹藉害
-      clampToGround: true //澶氳竟褰㈡垨绾� 鍥哄畾鍦ㄥ湴闈笂true/false
-    }).then((dataSource) => {
-      const entities = dataSource.entities.values;
-      entities.map((item) => {
-        item.polygon.heightReference =
-          Cesium.HeightReference.RELATIVE_TO_GROUND; // 璐村湴
-        item.polygon.height = 0; // 璺濆湴楂樺害0绫�
-        item.polygon.extrudedHeightReference =
-          Cesium.HeightReference.RELATIVE_TO_GROUND; //鎷変几
-        item.polygon.extrudedHeight = item.properties["ELEVATION"]; // 鎷変几楂樺害
-
-        var polyPositions = item.polygon.hierarchy.getValue().positions;
-        var polyCenter = Cesium.BoundingSphere.fromPoints(polyPositions).center; //涓績鐐�
-        polyCenter = Cesium.Ellipsoid.WGS84.scaleToGeodeticSurface(polyCenter);
-        item.position = polyCenter;
-
-        item.label = {
-          //鏂囧瓧鏍囩
-          text: "",
-          font: "500 20px Helvetica", // 15pt monospace
-          scale: 1,
-          style: Cesium.LabelStyle.FILL,
-          fillColor: Cesium.Color.WHITE,
-
-          eyeOffset: new Cesium.Cartesian3(
-            0.0,
-            item.polygon.extrudedHeight + 1,
-            -(item.polygon.extrudedHeight + 1)
-          ),
-
-          verticalOrigin: Cesium.VerticalOrigin.BOTTOM,
-          showBackground: true,
-          distanceDisplayCondition: new Cesium.DistanceDisplayCondition(50.0, 500.0),
-          // heightReference: Cesium.HeightReference.CLAMP_TO_GROUND,
-          // disableDepthTestDistance: Number.POSITIVE_INFINITY,
-         backgroundColor: new Cesium.Color(26 / 255, 196 / 255, 228 / 255, 1.0)   //鑳屾櫙椤旇壊
-        };
-      });
-      Viewer.dataSources.add(dataSource);
-      this.setQueryProperty(dataSource, "鍐涗簨鐩爣");
-      this.getQuery(url, areaBox, dataSource);
-    });
-  },
-  setQueryProperty(layer, property) {
-    const entity = layer.entities.values;
-    entity.filter((rs) => {
-      if (rs.properties["TargetType"]._value == property) {
-        rs.polygon.material = Cesium.Color.RED;
-        // 鏄剧ず鏂囧瓧鏍囩
-        rs.label.text = rs.properties["TYPE"];
-      }
-    });
-  },
-  getQuery(url, area, layer) {
-    axios
-      .get(url, {
-        params: {
-          version: "1.3.0",
-          request: "GetFeature",
-          typename: "GeoEntity",
-          propertyname: "*",
-          format: "json",
-          filter: `<ogc:Filter xmlns:ogc="http://www.opengis.net/ogc"><ogc:Intersects><ogc:PropertyName /><gml:Polygon xmlns:gml="http://www.opengis.net/gml" srsName="EPSG:4326"><gml:exterior><gml:LinearRing><gml:posList>${area}</gml:posList></gml:LinearRing></gml:exterior></gml:Polygon></ogc:Intersects></ogc:Filter>`
-        }
-      })
-      .then((res) => {
-        const obj = res.data.features;
-
-        // const dataSource = Viewer.dataSources._dataSources.filter((item) => {
-        //   if (item.name == layer) {
-        //     return item;
-        //   }
-        // });
-        const entity = layer.entities.values;
-        // const entity = dataSource[0].entities.values;
-        obj.filter((item) => {
-          entity.filter((rs) => {
-            if (item.id == rs.id) {
-              rs.polygon.material = Cesium.Color.CORNFLOWERBLUE;
-            }
-          });
-        });
-      });
-  },
-  getLayerModelCount(res) {
-    axios
-      .post(
-        res.url,
-        {
-          dbid: res.dbid,
-          geometry: res.geometry,
-          layerid: res.layerid,
-          returnCountOnly: res.containCount,
-          token: res.token
-        },
-        {
-          headers: {
-            Authorization: res.token,
-            "Content-Type": res.contentType
-          }
-        }
-      )
-      .then((response) => {
-        if (response.status === 200) {
-          this.getLayerModelList(res, response.data.data);
-        } else {
-          this.getLayerModelList(res, 200);
-        }
-      });
-  },
-  getLayerModelList(res, count) {
-    axios
-      .post(
-        res.url,
-        {
-          dbid: res.dbid,
-          geometry: res.geometry,
-          layerid: res.layerid,
-          containCount: res.containCount,
-          token: res.token,
-          count: count,
-          start: 1,
-          outfields: res.outfields
-        },
-        {
-          headers: {
-            Authorization: res.token,
-            "Content-Type": res.contentType
-          }
-        }
-      )
-      .then((response) => {
-        console.log("List", response);
-      });
+    // const url = layerJson.getQueryUrl("SubicBayAreaVector_wfs", "GeoEntity");
+    // layerJson.init(url);
   }
 };
 export default mapViewer;
diff --git a/src/assets/js/map/modelLayer.js b/src/assets/js/map/modelLayer.js
index dfd6536..f7063ab 100644
--- a/src/assets/js/map/modelLayer.js
+++ b/src/assets/js/map/modelLayer.js
@@ -1,7 +1,10 @@
 import {
   getPublickey,
   getSecurityLogin,
-  getListCanview
+  getListCanview,
+  getmapConfig,
+  getQueryEentity,
+  getSettingPublickey
 } from "../../../api/modelBase.js";
 import JSEncrypt from "jsencrypt";
 import store from "../../../store/index.js";
@@ -14,35 +17,43 @@
   modelBase: null,
   dbid: null,
   geom: null,
-  // 鑾峰彇Publickey
+  layers: null,
+  publickey: null,
   init() {
     this.modelBase = config.modelBase;
-    getPublickey().then((response) => {
-      const password = this.modelBase.password;
-      const userId = this.modelBase.userId;
-      const publickey = response.data;
-      const encrypt = new JSEncrypt();
-      encrypt.setPublicKey(publickey);
-      let encrypted = encrypt.encrypt(password.substring(0, 50)) + "";
-      let submit = {
-        userid: userId,
-        password: encrypted
-      };
-      this.setLoginsubmit(submit);
+    this.getSettingPublicKey();
+    const token = getToken();
+    console.log("token", token);
+    if (token) {
+      this.getModelLayerList();
+    } else {
+      getPublickey().then((response) => {
+        const password = this.modelBase.password;
+        const userId = this.modelBase.userId;
+        const publickey = response.data;
+        const encrypt = new JSEncrypt();
+        encrypt.setPublicKey(publickey);
+        let encrypted = encrypt.encrypt(password.substring(0, 50)) + "";
+        let submit = {
+          userid: userId,
+          password: encrypted
+        };
+        this.setLoginsubmit(submit);
+      });
+    }
+  },
+  getSettingPublicKey() {
+    getSettingPublickey().then((response) => {
+      this.publickey = response.data;
     });
   },
   // 鑾峰彇Token
   setLoginsubmit(res) {
-    // const token = getToken();
-    // if (token) {
     getSecurityLogin(res).then((response) => {
       const val = response.data.token;
       setToken(val);
       this.getModelLayerList();
     });
-    // } else {
-    //   this.getModelLayerList( );
-    // }
   },
   // 鑾峰彇鍒楄〃
   getModelLayerList() {
@@ -56,19 +67,40 @@
       });
       if (obj.length > 0) {
         this.dbid = obj[0].dbid;
+        this.getmapConfig();
       }
     });
-    this.setLayerQuery();
+  },
+  getmapConfig() {
+    getmapConfig({
+      dbid: this.dbid,
+      token: getToken()
+    }).then((response) => {
+      if (response.code != 200) return;
+      const layers = response.data.layers;
+      this.layers = layers;
+      for (var i in layers) {
+        if (layers[i].name == "寤虹瓚") {
+          const url = layers[i].lod_url["3d"][""];
+
+          mapServer.addServer({
+            sourceType: "Tileset",
+            url: url,
+            id: layers[i].id
+          });
+        }
+      }
+    });
   },
   setLayerQuery() {
     const token = getToken();
     this.geom = mapConfig.setPointToCrical(120.27, 14.79, null);
 
-    const obj = {
-      type: "FeatureCollection",
-      totalFeatures: 1086,
-      features: [this.geom]
-    };
+    // const obj = {
+    //   type: "FeatureCollection",
+    //   totalFeatures: 1086,
+    //   features: [this.geom]
+    // };
     // earthCtrl.factory.createFeatureLayer({
     //   sourceType: "geojson",
     //   url: obj,
@@ -168,11 +200,11 @@
     //
     a.push([
       // "${id} == '1_b092c0c26de646b984801e29fba37f82'",
-      '${id} == 1_b092c0c26de646b984801e29fba37f82',
-       'color("purple", 0.5)'
+      "${id} == 1_b092c0c26de646b984801e29fba37f82",
+      'color("purple", 0.5)'
     ]);
     a.push(["true", "color('#E8F1F2', 0.5)"]);
-    console.log(   tileset);
+    console.log(tileset);
     tileset.style = new Cesium.Cesium3DTileStyle({
       // color: "vec4(1.0,1.0,1.0, 1.0)", // 绾㈣壊
       color: {
@@ -180,7 +212,7 @@
           [
             // "${id} == '1_b092c0c26de646b984801e29fba37f82'",
             '${targettype} == "鍐涗簨鐩爣"',
-             'color("purple", 0.5)'
+            'color("purple", 0.5)'
           ]
         ]
       }
diff --git a/src/assets/js/msg/msgData.js b/src/assets/js/msg/msgData.js
index cd40b06..6149c3a 100644
--- a/src/assets/js/msg/msgData.js
+++ b/src/assets/js/msg/msgData.js
@@ -1,33 +1,68 @@
 import store from "../../../store";
-
 const msgData = {
   mine: null,
+  imgurl: null,
   getRole(type, msg) {
-    if (type == "markDown") {
-      return {
-        msg: {
-          date: this.getDate(),
-          text: { text: msg },
-          mine: false,
-          name: "[GeoAgent]",
-          img: this.getImgUrl("ai"),
-          file: null,
-          fileList: [],
-          markDown: true
-        }
-      };
-    }
-    const imgurl = this.getImgUrl(type);
-    var roleMsg = this.getTest(msg);
+    this.imgurl = this.getImgUrl(type);
     this.mine = this.getMine(type);
-    return {
-      msg: this.getMsg(imgurl, roleMsg[0])
-    };
+    var roleMsg = this.getTest(msg);
+ 
+    const obj = {
+      msg: this.getMsg(this.imgurl,roleMsg)
+    }
+    return obj ;
   },
+  getLoader() {
+    this.mine = true;
+    var url = config.imgUrl + aiData.aiRole_img;
+    const showload =
+      " <div class='parentBox'>  <div class='loadBox'> <div class='loaderContantBox'></div> </div>  </div>";
+    return this.getMsg(url, [
+      {
+        type: "loader",
+        val: showload
+      }
+    ]);
+  },
+  getRagData(res, more, msg) {
+ 
+    return [
+      {
+        type: "rag",
+        acction: res.a,
+        question: res.q,
+        more: more,
+        msg: msg,
+        source: res.sourceName
+      }
+    ];
+  },
+  getImgUrl(type) {
+    var url = config.imgUrl;
+    if (type == "ai") {
+      url = url + aiData.aiRole_img;
+    } else if (type == "role") {
+      url = url + aiData.role_img;
+    }
+    return url;
+  },
+  getMine(type) {
+    if (type == "ai") {
+      return true;
+    } else if (type == "role") {
+      return false;
+    }
+  },
+
   getTest(res) {
     var flag = aiData.aiMsg.indexOf(res);
     var data = aiData.msg[flag];
-    return [{ text: res }, data];
+    return [
+      {
+        type: "text",
+        val: res
+      }
+    ];
   },
   setShowMsg(res) {
     var obj = { text: this.getAiToRoleMsg(res) };
@@ -85,23 +120,7 @@
     }
     return val;
   },
-  getImgUrl(type) {
-    var url = config.imgUrl;
-    if (type == "ai") {
-      url = url + aiData.aiRole_img;
-    } else if (type == "role") {
-      url = url + aiData.role_img;
-    }
-    return url;
-  },
 
-  getMine(type) {
-    if (type == "ai") {
-      return true;
-    } else if (type == "role") {
-      return false;
-    }
-  },
   setmsgtab(tab) {
     var url = config.imgUrl + aiData.aiRole_img;
     var thead = tab[0];
@@ -180,54 +199,14 @@
       }
     }, 150);
   },
-  getLoader() {
-    this.mine = true;
-    var url = config.imgUrl + aiData.aiRole_img;
-    var msg = {
-      // text: "<div class='loading'></div>"
-      text: " <div class='parentBox'>  <div class='loadBox'> <div class='loaderContantBox'></div> </div>  </div>"
-    };
-    return this.getMsg(url, msg);
-  },
 
   getMsg(imgurl, msg) {
-    // const fileContent = [];
-    // const fileMile = null;
-
-    // if (msg.text.indexOf("鑻忔瘮鍏嬫咕") > -1) {
-    //   fileContent = [
-    //     {
-    //       name: "宸叉壘鍒�2浠界浉鍏虫枃妗�",
-    //       url: "testUrl"
-    //     },
-    //     {
-    //       name: "Markdown.md",
-    //       url: "http://192.168.11.66:12316/Markdown.md"
-    //     },
-    //     {
-    //       name: "Markdown.md",
-    //       url: "http://192.168.11.66:12316/Markdown1.md"
-    //     }
-    //   ];
-    //   fileMile = fileContent[0].url;
-    //   return {
-    //     date: this.getDate(),
-    //     text: msg,
-    //     mine: false,
-    //     name: this.mine ? "[GeoAgent]" : "[鎮╙",
-    //     img: imgurl,
-    //     file: fileMile,
-    //     fileList: fileConten,
-    //     markDown: false
-    //   };
-    // }
     return {
       date: this.getDate(),
-      text: msg,
+      list: msg,
       mine: false,
       name: this.mine ? "[GeoAgent]" : "[鎮╙",
-      img: imgurl,
-      markDown: false
+      img: imgurl
     };
   },
   getDate() {
diff --git a/src/components/Chat/chatList.vue b/src/components/Chat/chatList.vue
index 22c0501..cd22876 100644
--- a/src/components/Chat/chatList.vue
+++ b/src/components/Chat/chatList.vue
@@ -2,12 +2,9 @@
   <div class="body">
     <div :style="pageConfig.width | setWidth">
       <div class="web__main" ref="main">
-        <div
-          class="web__main-item"
-          v-for="(item, index) in list"
-          :key="loding(index)"
-          :class="{ 'web__main-item--mine': item.mine }"
-        >
+        <div class="web__main-item" v-for="(item, index) in list" :key="loding(index)"
+          :class="{ 'web__main-item--mine': item.mine }">
+ 
           <div class="web__main_content">
             <div>
               <img :src="item.img" />
@@ -18,7 +15,7 @@
                   <div style="display: flex">
                     {{ item.name }}
 
-                    <div style="margin-left: 10px" v-show="item.file">
+                    <!-- <div style="margin-left: 10px" v-show="item.file">
                       <el-select
                         @change="(val) => setFileChange(val)"
                         v-model="item.file"
@@ -32,7 +29,7 @@
                         >
                         </el-option>
                       </el-select>
-                    </div>
+                    </div> -->
                   </div>
 
                   <div>
@@ -40,53 +37,39 @@
                   </div>
                 </cite>
               </div>
-              <div v-show="item.markDown == true" class="web__main-text">
-                <VueMarkdown
-                  class="web_Main_markDown"
-                  :source="item.text.text"
-                ></VueMarkdown>
+              <div class="web__main-text">
+                <div v-for="(res, key) in item.list" :key="key">
+                  <div v-if="res.type === 'text'">
+                    {{ res.val }}
+                  </div>
+                  <div v-else-if="res.type == 'loader'">
+                    <span v-html="handleDetail(res.val)" ref="content"></span>
+                  </div>
+                  <div style="margin-bottom:10px" v-else-if="res.type == 'rag'">
+                    <div v-show="res.acction">
+                      {{ res.acction }}
+                    </div>
+                    <div> {{ res.question }} </div>
+                    <div style="display: flex;">
+                      鏉ユ簮: {{ res.source }}
+                      <div @click.stop="setRagMoreList(res.msg)" class="setRagMore" v-show="res.more">
+                        ...鏇村
+                      </div>
+                    </div>
+                  </div>
+                </div>
+
               </div>
-              <div v-show="item.markDown == false" class="web__main-text">
-                <div class="web__main-arrow"></div>
-                <span
-                  v-html="handleDetail(item.text.text)"
-                  ref="content"
-                ></span>
-                <ul class="web__main-list" v-if="item.text.list">
-                  <li
-                    @click="handleItemMsg(citem)"
-                    v-for="(citem, cindex) in item.text.list"
-                    :key="cindex"
-                  >
-                    {{ citem.text }}
-                  </li>
-                </ul>
-              </div>
+
             </div>
           </div>
         </div>
       </div>
     </div>
-    <el-dialog
-      :visible.sync="show"
-      width="40%"
-      append-to-body
-      :before-close="handleClose"
-      class="web__dialog"
-    >
+    <el-dialog :visible.sync="show" width="40%" append-to-body :before-close="handleClose" class="web__dialog">
       <img :src="imgSrc" v-if="imgSrc" style="width: 100%; object-fit: cover" />
-      <video
-        :src="videoSrc"
-        v-if="videoSrc"
-        style="width: 100%; object-fit: cover"
-        controls="controls"
-      ></video>
-      <audio
-        :src="audioSrc"
-        v-if="audioSrc"
-        style="width: 100%; object-fit: cover"
-        controls="controls"
-      ></audio>
+      <video :src="videoSrc" v-if="videoSrc" style="width: 100%; object-fit: cover" controls="controls"></video>
+      <audio :src="audioSrc" v-if="audioSrc" style="width: 100%; object-fit: cover" controls="controls"></audio>
     </el-dialog>
   </div>
 </template>
@@ -108,9 +91,9 @@
     setWidth(value) {
       let width = value;
       if (`${value}`.match(/^\d+$/)) {
-        width = value-30 + "px";
+        width = value - 30 + "px";
       }
-      if(width=="100vh"){
+      if (width == "100vh") {
         return "99vh"
       }
       return width;
@@ -134,7 +117,8 @@
       show: false,
       imgSrc: "",
       videoSrc: "",
-      audioSrc: ""
+      audioSrc: "",
+      isDisabled: true,
     };
   },
   watch: {
@@ -148,6 +132,18 @@
     }
   },
   methods: {
+    setRagMoreList(res) {
+      if (this.isDisabled) {
+        this.isDisabled = false;
+        setTimeout(() => {
+          bus.$emit("setRagMoreListAll", res);
+        }, 500);
+        setTimeout(() => {
+          this.isDisabled = false;
+        }, 3000)
+      }
+
+    },
     setFileChange(res) {
       if (res == "testUrl") return;
       axios.get(res).then((response) => {
@@ -264,6 +260,7 @@
   cursor: pointer;
   display: block;
 }
+
 .web__msg--img[data-class="iconBox"] {
   max-width: 24px;
   min-width: unset;
@@ -292,8 +289,8 @@
   font-size: 20px;
   background: #555555;
   padding: 10px !important;
-  border-radius:10px !important;
-  margin-top:10px ;
+  border-radius: 10px !important;
+  margin-top: 10px;
 
 }
 
@@ -329,11 +326,13 @@
   padding-left: 0px;
   font-style: normal;
 }
+
 .citeTitle {
   width: 100%;
   display: flex;
   justify-content: space-between;
 }
+
 .web__main-text {
   /* max-width: 40%; */
   width: 100%;
@@ -349,15 +348,18 @@
   font-size: 16px;
   word-break: break-all;
 }
+
 .web__main_content {
-  width:  calc(100% - 50px);
+  width: calc(100% - 50px);
   padding: 10px 0px;
   display: flex;
 }
+
 .web__main_Date {
   flex: 1;
   padding: 0px 15px;
 }
+
 .web__main_Date cite {
   line-height: 24px;
   font-size: 14px;
@@ -369,6 +371,7 @@
   display: flex;
   justify-content: space-between;
 }
+
 .web__main-arrow {
   top: 6px;
   left: -8px;
@@ -459,8 +462,19 @@
   font-size: 16px;
   color: #f2f2f2;
 }
+
 .web__main-text img {
   max-width: 200px;
+}
+
+.setRagMore {
+  margin-left: 10px;
+
+}
+
+.setRagMore:hover {
+  color: #409EFF;
+
 }
 </style>
 <style>
@@ -469,6 +483,7 @@
   /* background: rgb(31, 31, 31); */
   padding: 20px;
 }
+
 .loadBox .loaderContantBox {
   color: white;
   font-size: 40px;
@@ -520,44 +535,51 @@
 
 @keyframes round {
   0% {
-    transform: rotate(0deg); /* 寮�濮嬫棆杞� div 鍏冪礌 */
+    transform: rotate(0deg);
+    /* 寮�濮嬫棆杞� div 鍏冪礌 */
   }
 
   100% {
-    transform: rotate(360deg); /* 缁撴潫鏃嬭浆 div 鍏冪礌 */
+    transform: rotate(360deg);
+    /* 缁撴潫鏃嬭浆 div 鍏冪礌 */
   }
 }
 </style>
 
 
-<style >
- .web_Main_markDown h1 {
+<style>
+.web_Main_markDown h1 {
   line-height: 30px !important;
   font-size: 20px !important;
 }
-.web_Main_markDown h2  {
+
+.web_Main_markDown h2 {
   line-height: 25px !important;
   font-size: 18px !important;
   margin-left: 10px;
 }
+
 .web_Main_markDown h3 {
   line-height: 25px !important;
   font-size: 18px !important;
   margin-left: 10px;
 }
+
 .web_Main_markDown li {
   line-height: 20px !important;
   font-size: 16px !important;
   margin-left: 20px;
 }
+
 .web_Main_markDown p {
   line-height: 20px !important;
   font-size: 16px !important;
   margin-left: 20px;
 }
-.web_Main_markDown   {
-   background: #555555;
-   padding: 10px;
-   border-radius: 10px;
+
+.web_Main_markDown {
+  background: #555555;
+  padding: 10px;
+  border-radius: 10px;
 }
 </style>
\ No newline at end of file
diff --git a/src/store/index.js b/src/store/index.js
index 518455c..a18ed61 100644
--- a/src/store/index.js
+++ b/src/store/index.js
@@ -7,9 +7,10 @@
   state: {
     setMenuFlag: false,
     setMsgData: null,
-    setScreenFlag: true,
+    setScreenFlag: false,
     erroInfoMessage: null,
-    token: null
+    token: null,
+    ragList: []
   },
   mutations: {},
   actions: {},
diff --git a/src/utils/modelGeo.js b/src/utils/modelGeo.js
index 7b0ed02..d4b1ddf 100644
--- a/src/utils/modelGeo.js
+++ b/src/utils/modelGeo.js
@@ -16,7 +16,7 @@
   (config) => {
     // 鍙互鍦ㄨ繖閲屾坊鍔犺姹傚ご绛変俊鎭�
     let token = getToken();
-    console.log("213",token);
+
     if (token) {
       config.headers["Authorization"] = token;
     }
diff --git a/src/views/chartView/index.vue b/src/views/chartView/index.vue
index 5ccfc60..f1909c2 100644
--- a/src/views/chartView/index.vue
+++ b/src/views/chartView/index.vue
@@ -15,6 +15,8 @@
 import { getAIMessage, getV1Fastgpt } from "../../api/api.js";
 import mapInfo from "../../assets/js/map/mapInfo.js";
 import axios from "axios";
+import layerJson from "../../assets/js/map/mapJsonLayer.js";
+import { factors } from "@turf/turf";
 export default {
   name: "jwChat",
 
@@ -70,12 +72,17 @@
     }, config.loadTime);
     bus.$on("mapInfo", (res) => {
       if (res) {
-        this.setMapInfo(res);
+        // this.setMapInfo(res);
       }
     });
     bus.$on("setInsertMarkDown", (res) => {
       if (res) {
         this.setMarkDownInfo(res);
+      }
+    });
+    bus.$on("setRagMoreListAll", res => {
+      if (res) {
+        this.setRagMoreList(res);
       }
     });
     // axios.get("http://192.168.11.89:12315/Markdown.md").then((response) => {
@@ -88,20 +95,41 @@
   methods: {
     bindEnter() {
       const msg = this.inputMsg;
+
       if (!msg) return;
+
       this.getMsg("role", msg);
+
       this.setLoading();
       setTimeout(() => {
+
         this.setMsgStart(msg);
       }, 200);
     },
     async setMsgStart(res) {
-
-      if (res == "涓夌淮瀹炴櫙") {
+      if (res.indexOf("鍐涗簨鐩爣") > -1 || res.indexOf("姘戝畢") > -1 || res.indexOf("缁忔祹鐩爣") > -1 || res.indexOf("娴峰啗闄嗘垬闃�") > -1 || res.indexOf("鍫や赴") > -1) {
+        this.$store.state.setScreenFlag = true;
+        this.list.splice(-1, 1);
+        this.loading = false;
+        layerJson.setQyeryData(res);
+      }
+      // else if(res.indexOf("鑻忔瘮鍏嬫咕") > -1){
+      //   this.$store.state.setScreenFlag = true;
+      //   this.list.splice(-1, 1);
+      //   this.loading = false;
+      //   this.$nextTick(() => {
+      //         setTimeout(() => {
+      //           mapInfo.setEntityQueryInput();
+      //         }, 1000);
+      //       });
+      // } 
+      else if (res == "涓夌淮瀹炴櫙") {
+        layerJson.setTitleSetRest();
         this.setV1Fastgpt(res)
       } else {
         const data = await getAIMessage(res);
-        if (data.status == 200) {
+   
+        if (data.code == 200) {
           if (data.content) {
             this.getMsg("ai", data.content);
           } else {
@@ -118,36 +146,69 @@
         }
       }
     },
-    async setV1Fastgpt(res) {
-      const data = await getV1Fastgpt(res);
-      const obj = data.split(/[\n]/)
-      const list_a = [];
-      obj.filter(item => {
-        if (item.indexOf("data: ") > -1) {
-          if (item.indexOf('nodeId') > -1) {
-          } else  if(item.indexOf("content")>-1){
-            const a = JSON.parse(item.split('data: '))
-            console.log(a);
-            // if (a.choices[0].content) {
-            //   console.log(a.choices[0].content);
-            // }
+    setRagMoreList(res) {
+      const obj = this.$store.state.ragList
+      const val_data = obj.filter(item => {
+        if (item.quest === res) {
+          return item;
+        }
+      });
+      if (val_data.length <= 0) return
 
-
-
+      this.$store.state.ragList = obj;
+      const val_obj = val_data[0]
+      const key = val_obj.index;
+      const val = val_obj.val;
+      this.list[key].list[0].more = false;
+      var flag = 1;
+      var intValTime = setInterval(() => {
+        if (flag >= val.length) {
+          const obj = JSON.parse(JSON.stringify(this.list))
+          this.list = obj
+          for (var i in obj) {
+            if (obj[i].quest === res) {
+              obj.splice(i, 1)
+            }
           }
 
+          clearInterval(intValTime)
+          return
         }
+        const valitem = val[flag];
+        const roleMsg = msgData.getRagData(valitem, false, "");
+        this.list[key].list.push(roleMsg[0])
+        flag++
+      }, 1000);
+
+    },
+    setRagInterval(flag, index, res) {
+      if (flag < res.length) {
+        const obj = res[flag]
+
+        this.list[index].list.push(roleMsg[0])
+        setTimeout(() => {
+          flag++;
+          this.setRagInterval(flag, index, res)
+        }, 1000);
+      } else {
+        return
+      }
+    },
+    async setV1Fastgpt(res) {
+      const data = await getV1Fastgpt(res);
+ 
+      const length = this.list.length - 1;
+      const obj = data[0].quoteList
+      this.$store.state.ragList.push({
+        quest: res,
+        index: length,
+        val: obj
       })
-      // console.log(list_a)
-      // const a = val_data[0].split('data: ');
-      // const b = JSON.parse(a[1]);
-      // console.log(b)
-      // const c = b[1].historyPreview.length - 1;
-      // const d = b[1].historyPreview[c].value
-      // this.getMsg("ai", d);
+      var roleMsg = msgData.getRagData(obj[0], true, res);
+      this.list[length].list = roleMsg
+      this.loading = false;
     },
     setMarkDownInfo(res) {
-
       var roleMsg = msgData.getRole("markDown", res);
       this.list.push(roleMsg.msg);
       // 
@@ -162,10 +223,14 @@
     },
     getMsg(type, msg) {
       var roleMsg = msgData.getRole(type, msg);
+    
+
       if (this.loading) {
+
         this.loading = false;
-        const length = this.list.length - 1;
-        this.list[length].text = roleMsg.msg.text;
+
+ 
+        this.list[this.list.length - 1].list = roleMsg.msg.list;
       } else {
         this.list.push(roleMsg.msg);
       }

--
Gitblit v1.9.3