suerprisePlus
2024-07-16 6069325e1a37cf0462afda1627d4c660735dc57e
版本更新
已修改9个文件
440 ■■■■■ 文件已修改
public/Data/Report.docx 补丁 | 查看 | 原始文档 | blame | 历史
public/Data/Report.md 71 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
public/config/config.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/js/map/mapJsonLayer.js 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/js/map/mapView.js 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/js/msg/msgData.js 37 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/Chat/chatList.vue 123 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/chartView/index.vue 149 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mapView/mapView.vue 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
public/Data/Report.docx
Binary files differ
public/Data/Report.md
@@ -1,43 +1,50 @@
## 战场报告
# 战场报告
**报告时间:** 2024年7月3日
## 报告时间
2024年7月3日
### 一、目标发现
## 数据来源
XXX号卫星
1. **导弹防御系统:**
   - 2024年7月3日1:30AM,XXX卫星在菲律宾苏比克湾区发现疑似堤丰导弹防御系统。
## 目标发现
2. **海上舰艇:**
   - 苏比克湾区发现以下导弹护卫舰:
     - 圣安东尼奥级导弹护卫舰1艘
     - 何塞谜·黎刹级导弹护卫舰1艘
     - 先锋级导弹护卫舰1艘
### 导弹防御系统
- 时间:2024年7月2号 3:00AM
- 地点:菲律宾苏比克湾区
- 发现:疑似堤丰导弹防御系统
3. **航空器:**
   - C130运输机2架
   - 鱼鹰直升机8架
   - 支奴干直升机4架
   - 黑鹰直升机14架
### 海上舰艇
- 时间:2024年7月2号 11:04AM
- 地点:菲律宾苏比克湾区
- 发现:疑似丹鹿级导弹驱逐舰 2艘
4. **美空军指挥中心:**
   - 发现美空军指挥中心,包含以下设施:
     - 4座弹药库
     - 11座油库
     - 1座机库
   - 所有设施均已在地图上标明位置。
### 航空器
- 时间:2024年7月2号 3:00AM
- 地点:菲律宾苏比克湾区
- 发现:疑似黑鹰直升机 14架
### 二、目标统计
### 美国空军指挥中心设施
- 设施包括:
  - 4座弹药库
  - 11座油库
  - 1座机库
- 位置:已标明在地图上
- **军事目标:** 187个
- **社会目标:** 88个
- **政治目标:** 4个
- **经济目标:** 179个
- **民宅:** 5961座
## 目标统计
- 军事目标:187个
- 民宅:209座
- 政治目标:4个
- 社会目标:86个
- 经济目标:179个
### 三、攻击风险评估
## 攻击风险评估
如果使用洲际弹道导弹攻击美空军指挥中心,在周边一公里半径内有多座民用设施,存在误伤平民的风险。
如果使用洲际弹道导弹攻击美空军指挥中心,在周边一公里半径内有多座民用设施,因此存在误伤平民的风险。
## 总结
根据XXX号卫星的侦察,菲律宾苏比克湾区内发现了多个重要目标,包括导弹防御系统、导弹护卫舰、军用飞机和美空军指挥中心。该区域的目标种类繁多,需注意攻击美空军指挥中心时可能导致周边民用设施的误伤风险。
### 总结
根据XXX卫星的侦察,菲律宾苏比克湾区内发现了疑似堤丰导弹防御系统和多个重要军事目标,包括导弹护卫舰、各种军用飞机和美空军指挥中心。该区域共有187个军事目标、88个社会目标、4个政治目标、179个经济目标以及5961座民宅。需要特别注意的是,攻击美空军指挥中心存在误伤周边民用设施的风险。
## 附加信息
XXX号卫星具体发现信息如下:
- 2024年7月2号 3:00AM:疑似堤丰系统,数量1
- 2024年7月2号 3:00AM:疑似黑鹰直升机,数量14
- 2024年7月2号 11:04AM:疑似丹鹿级导弹驱逐舰,数量2
public/config/config.js
@@ -7,8 +7,8 @@
  //间隔多久回消息
  retTime: 2000,
  // apiUrl: "/api/",
  apiUrl: "http://192.168.11.95:7777/api/",
  // apiUrl: "http://106.120.22.26:5367/",
  // apiUrl: "http://192.168.11.95:7777/api/",
  apiUrl: "http://103.135.160.14:7800/api/",
  imgUrl: webHost + "/image/",
  reportMd: "/Data/Report.md",
  reportDocx: "/Data/Report.docx",
src/assets/js/map/mapJsonLayer.js
@@ -151,7 +151,15 @@
        position,
        cylinder
      );
      Viewer.zoomTo(this.rectangularSensor.item);
      earthCtrl.camera.flyTo(
        113.00849464328284,
        10.437567580726105,
        1101300.7027243855,
        57, -45, 0, 2
        );
    });
  },
  setQueryByFiled(name, color) {
src/assets/js/map/mapView.js
@@ -34,7 +34,10 @@
      sourceType: "tms",
      url: "http://103.135.160.14:9038/gisserver/tmsserver/SubicBayArea"
    });
    const a = Viewer.clock.currentTime
    let now2 = new Date();
    let todayNoon = new Date(now2.getFullYear(), now2.getMonth(), now2.getDate(), 12, 0, 0);
    Viewer.clock.currentTime = Cesium.JulianDate.fromDate(todayNoon);
    modelLayer.init();
 
    // const url = layerJson.getQueryUrl("SubicBayAreaVector_wfs", "GeoEntity");
src/assets/js/msg/msgData.js
@@ -6,11 +6,11 @@
    this.imgurl = this.getImgUrl(type);
    this.mine = this.getMine(type);
    var roleMsg = this.getTest(msg);
    const obj = {
      msg: this.getMsg(this.imgurl,roleMsg)
    }
    return obj ;
      msg: this.getMsg(this.imgurl, roleMsg)
    };
    return obj;
  },
  getLoader() {
    this.mine = true;
@@ -24,19 +24,38 @@
      }
    ]);
  },
  getJsonToMdData(res,link){
  getJsonToMdData(res, link) {
    this.mine = true;
    var url = config.imgUrl + aiData.aiRole_img;
   return this.getMsg(url, [
    return this.getMsg(url, [
      {
        type: "markdown",
        link:link,
        link: link,
        val: res
      }
    ])
    ]);
  },
  getJsonToHtml(res) {
    this.mine = true;
    var url = config.imgUrl + aiData.aiRole_img;
    return this.getMsg(url, [
      {
        type: "JsonHtml",
        val: res
      }
    ]);
  },
  getHTMLData(res) {
    this.mine = true;
    var url = config.imgUrl + aiData.aiRole_img;
    return this.getMsg(url, [
      {
        type: "html",
        val: res
      }
    ]);
  },
  getRagData(res, more, msg) {
    return [
      {
        type: "rag",
src/components/Chat/chatList.vue
@@ -16,7 +16,7 @@
                    {{ item.name }}
                  </div>
                  <div v-show="item.sourceValue" class="sourcefrom" style="float: left;margin-left:20px">
                    <el-select size="small" v-model="item.sourceValue"  placeholder="资料来源">
                    <el-select size="small" v-model="item.sourceValue" placeholder="资料来源">
                      <el-option value="1" label="GEDB"></el-option>
                      <el-option value="2" label="GeoAgent"></el-option>
                    </el-select>
@@ -28,6 +28,34 @@
              </div>
              <div class="web__main-text">
                <div v-for="(res, key) in item.list" :key="key">
                  <div v-if="res.type === 'html'">
                    <div v-html="res.val"></div>
                  </div>
                  <div v-if="res.type === 'JsonHtml'">
                    <div class="JsonHtml">
                      <table>
                        <tr>
                          <th v-show="index != 'rowspan'" v-for="(item, index) in res.val[0]" :key=index>
                            {{ index }}
                          </th>
                        </tr>
                        <tr v-if="!item.break" v-for="(item, index) in res.val" :key=index>
                          <td v-if="item.rowspan != ''" :rowspan="item.rowspan">
                            {{ item[Object.keys(item)[0]] }}
                          </td>
                          <td v-if="Object.keys(item)[0] != n && n != 'rowspan'" v-for="(rs, n ) in item " :key="n"> {{
                            item[n] }}</td>
                          <!--  -->
                        </tr>
                      </table>
                      <div>
                        <p v-for="(item, index) in res.val[res.val.length - 1].break" :key=index>
                          {{ item.bak }}
                        </p>
                      </div>
                    </div>
                  </div>
                  <div v-if="res.type === 'text'">
                    {{ res.val }}
                  </div>
@@ -141,6 +169,13 @@
    }
  },
  methods: {
    setrowSpan(res, name) {
      if (Object.keys(res)[0] == name) {
        return res['rowspan']
      } else {
        return 1
      }
    },
    setDownLoadFile(res) {
      const downloadLink = document.createElement('a');
      downloadLink.href = res
@@ -323,7 +358,7 @@
}
/deep/.el-input--small .el-input__inner{
/deep/.el-input--small .el-input__inner {
  height: 30px;
  font-size: 12px;
}
@@ -540,29 +575,33 @@
}
</style>
<style>
.el-select-dropdown {
  background-color: #555555 !important;
  color: #409eff !important;
}
.el-select-dropdown__item{
.el-select-dropdown__item {
  color: #ffffff !important;
  background: transparent !important;
}
.el-select-dropdown__item.selected{
.el-select-dropdown__item.selected {
  color: #409eff !important;
  background: transparent !important;
}
.el-select-dropdown__item.selected span{
.el-select-dropdown__item.selected span {
  color: #409eff !important;
  background: transparent !important;
}
.el-select-dropdown__item:hover{
.el-select-dropdown__item:hover {
  /* background-color: #555555 !important; */
  color: #409eff!important;
  color: #409eff !important;
}
.parentBox {
  height: 100%;
  /* background: rgb(31, 31, 31); */
@@ -642,6 +681,55 @@
  word-wrap: break-word;
}
.JsonHtml table {
  border: 1px solid white;
  text-align: center;
  line-height: 30px;
  font-family: "Arial", sans-serif;
  font-size: 16px;
}
.JsonHtml tr {
  border: 1px solid white;
}
.JsonHtml th {
  border: 1px solid white;
  padding: 10px 10px;
}
.JsonHtml td {
  border: 1px solid white;
  padding: 10px 10px;
}
.newConcentLeft table {
  border: 1px solid white;
  text-align: center;
  line-height: 30px;
  font-family: "Arial", sans-serif;
  font-size: 16px;
}
.newConcentLeft tr {
  border: 1px solid white;
}
.newConcentLeft th {
  border: 1px solid white;
}
.newConcentLeft td {
  border: 1px solid white;
}
.newConcentLeft img {
  width: 75%;
}
@@ -658,17 +746,28 @@
  font-size: 15px !important;
  line-height: 15px !important;
  list-style: disc;
}
.newConcentLeft p {
  font-size: 15px !important;
  /*  */
}
.newConcentLeft h1 {
  font-size: 2rem !important;
  padding: 20px 0px;
  border-bottom: 1px solid rgba(209, 209, 209, 0.0);
}
.newConcentLeft h2 {
  padding:30px 0px;
  line-height: 0px;
  border-bottom: 1px solid rgba(209, 209, 209, 0.0);
  /*  */
}
</style>
<style>
.web_Main_markDown h1 {
/* .web_Main_markDown h1 {
  line-height: 20px !important;
  font-size: 20px !important;
}
@@ -701,5 +800,5 @@
  background: #555555;
  padding: 10px;
  border-radius: 10px;
}
} */
</style>
src/views/chartView/index.vue
@@ -219,57 +219,30 @@
    },
    async setMsgStart(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("markDown") > -1) {
      //   setTimeout(() => {
      //     this.getMd();
      //   }, 2000);
      // }else
      if (res.indexOf("scanWeapon") > -1) {
        this.setQueryMapPlan("scanWeapon");
      } else if (res.indexOf("weaponParameters") > -1) {
        this.setQueryMapPlan("weaponParameters");
      } else if (res.indexOf("searchTarget") > -1) {
        this.setQueryMapPlan("searchTarget");
      } else if (res.indexOf("attackUSAFCommandCenter") > -1) {
        this.setQueryMapPlan("attackUSAFCommandCenter");
      } else if (res.indexOf("USAFCommandCenterQuery") > -1) {
        this.setQueryMapPlan("USAFCommandCenterQuery");
      } else if (res.indexOf("simulationAttack") > -1) {
        this.setQueryMapPlan("simulationAttack");
      } else if (res.indexOf("defenceRangeTyphoonSystem") > -1) {
        this.setQueryMapPlan("defenceRangeTyphoonSystem");
      } else if (res.indexOf("flyToSubicBayArea") > -1) {
        this.setQueryMapPlan("flyToSubicBayArea");
      } else if (res.indexOf("displayWeaponSystem") > -1) {
        this.setQueryMapPlan("displayWeaponSystem");
      } else if (res.indexOf("weaponSystemParameters") > -1) {
        this.setQueryMapPlan("weaponSystemParameters");
      }
      // 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 == "生成战场环境报告") {
      if (res == "定位到苏比克湾") {
        this.setQueryMapPlan('flyToSubicBayArea', null)
      } else if (res == "此区域有哪些武器系统") {
        this.setQueryMapPlan('displayWeaponSystem', null)
      } else if (res == "查询该区域内目标及分布") {
        this.setQueryMapPlan('searchTarget', null)
      }else if (res == "分析堤丰系统的性能和防御范围") {
        this.setQueryMapPlan('defenceRangeTyphoonSystem', null)
      }  else if (res == "定位到美国空军指挥中心") {
        this.setQueryMapPlan('USAFCommandCenterQuery', null)
      } else if (res == "生成战场环境报告") {
        this.getUrlMd(config.reportMd, config.reportDocx)
        // axios.get("/Data/Report.html").then(response=>{
        //     var roleMsg = msgData.getHTMLData(response.data);
        //     this.list[this.list.length - 1].list = roleMsg.list;
        //     this.loading = false;
        //   })
      }
      else if (res == "三维实景") {
      else if (res.indexOf("055") > -1) {
        layerJson.setTitleSetRest();
        this.setV1Fastgpt(res);
      } else {
        const data = await getAIMessage(res);
        if (data.status == 200) {
          if (data.name) {
            this.$store.state.setScreenFlag = true;
@@ -292,10 +265,40 @@
            this.getMsg("ai", data.content);
            this.list[this.list.length - 1].sourceValue = "2";
          } else {
            this.getMsg("ai", "稍后服务。。。");
            if (data.length > 0) {
              this.setSourceList(data)
            } else {
              this.getMsg("ai", "稍后服务。。。");
            }
            //
          }
        }
      }
    },
    setSourceList(res) {
      const obj = res[0].quoteList
      var roleMsg = [
        {
          type: "text",
          val: "未查询到相关信息"
        }
      ];
      const length = this.list.length - 1;
      if (obj.length > 0) {
        this.$store.state.ragList.push({
          quest: res,
          index: length,
          val: obj
        });
        roleMsg = msgData.getRagData(obj[0], true, res);
      }
      this.list[length].list = roleMsg;
      this.loading = false;
    },
    getUrlMd(res, link) {
      axios.get(res).then(response => {
@@ -336,8 +339,15 @@
            height: 1371.1909347746105
          });
          var obj = this.getQueryGroupBy("武器", "weaponname");
          var table_head = ["武器名称", "数量", "出现时间"]
          this.getQueryEentityGroupBy(obj, "weaponname", response, table_head);
          // var table_head = ["武器名称", "数量", "出现时间"]
          // this.getQueryEentityGroupBy(obj, "weaponname", response, table_head);
          // this.getUrlMd("/Data/武器系统细化.md", null)
          axios.get("/Data/武器系统.html").then(response => {
            var roleMsg = msgData.getHTMLData(response.data);
            this.list[this.list.length - 1].list = roleMsg.list;
            this.loading = false;
          })
          layerJson.setAddWfsJson();
          break;
        case "weaponSystemParameters":
@@ -373,7 +383,7 @@
              this.getUrlMd(url, null)
            } else {
              this.getMsg("ai", response.content);
            }
          } else {
            this.getMsg("ai", response.content);
@@ -386,28 +396,40 @@
        case "searchTarget":
          var obj = this.getQueryGroupBy("建筑", "targettype");
          var table_head = ["目标类型", "数量"]
          this.getQueryEentityGroupBy(obj, "targettype", response, table_head);
          // 实体目标列表_1.html
          axios.get("/Data/实体目标列表_1.html").then(response => {
            var roleMsg = msgData.getHTMLData(response.data);
            this.list[this.list.length - 1].list = roleMsg.list;
            this.loading = false;
          })
          // axios.get("/Data/战场环境.json").then(response=>{
          //   var roleMsg =msgData.getJsonToHtml(response.data);
          //   this.list[this.list.length - 1].list = roleMsg.list;
          //   this.loading = false;
          // })
          // var table_head = ["目标类型", "数量"]
          // this.getQueryEentityGroupBy(obj, "targettype", response, table_head);
          var list = [
            {
              name: "军事目标",
              color: "#409EFF"
              color: "#73afff"
            },
            {
              name: "政治目标",
              color: "#FFFF00"
              color: "#fffd72"
            },
            {
              name: "经济目标",
              color: "#FFA500"
              color: "#fabc56"
            },
            {
              name: "社会目标",
              color: "#000000"
              color: "#272424"
            },
            {
              name: "民宅",
              color: "#808080"
              color: "#979696"
            }
          ];
          layerJson.setQueryByFiledList(list, 0);
@@ -422,8 +444,18 @@
        case "USAFCommandCenterQuery":
          var obj = "ejfl like '%空军基地%'";
          layerJson.setQueryExtent2(obj, false);
          this.getMsg("ai", "美国空军指挥中心,包含4座弹药库,11座油库,1座机库。");
          this.list[this.list.length - 1].sourceValue = "1";
          // this.getMsg("ai", "美国空军指挥中心,包含4座弹药库,11座油库,1座机库。");
          // this.getUrlMd("/Data/美国空军指挥中心.md", null)
          // this.list[this.list.length - 1].sourceValue = "1";
          //
          axios.get("/Data/美国空军指挥中心.html").then(response => {
            var roleMsg = msgData.getHTMLData(response.data);
            this.list[this.list.length - 1].list = roleMsg.list;
            this.loading = false;
          })
          //
          //
          break;
        case "simulationAttack":
          var obj = "ejfl like '%空军基地%'";
@@ -437,6 +469,7 @@
          layerJson.setQueryTF2(obj);
          this.getMsg("ai", "相关信息已在地图模块展示");
          this.list[this.list.length - 1].sourceValue = "1";
          this.getUrlMd("/Data/堤丰系统.md", null)
          break;
        default:
src/views/mapView/mapView.vue
@@ -28,23 +28,28 @@
    return {
      errInfoMessage: null,
      errInfoFlag: false,
      lengedList: [{
        name: "军事目标",
        color: "#409EFF"
      }, {
        name: "政治目标",
        color: "#FFFF00"
      }, {
        name: "经济目标",
        color: "#FFA500"
      }, {
        name: "社会目标",
        color: "#000000"
      }, {
        name: "民宅",
        color: "#808080"
      }
      ]
      lengedList:[
            {
              name: "军事目标",
              color: "#73afff"
            },
            {
              name: "政治目标",
              color: "#fffd72"
            },
            {
              name: "经济目标",
              color: "#fabc56"
            },
            {
              name: "社会目标",
              color: "#272424"
            },
            {
              name: "民宅",
              color: "#979696"
            }
          ]
    };
  },
  computed: {
@@ -132,7 +137,7 @@
}
.mapLenged .mapcolor {
  width: 100px;
  width: 60px;
  height: 30px;
}