queryResult - 副本.vue 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403
  1. <script setup>
  2. import {
  3. formattingTime
  4. } from '@/assets/js/localtime.js';
  5. import {
  6. inject
  7. } from "vue";
  8. const getMapInstance = inject("getMapInstance");
  9. jt3d = getMapInstance();
  10. </script>
  11. <template>
  12. <div class="jt-queryResult">
  13. <div class="_left">
  14. <el-tree class="tree-line queryResultTree" ref="tree" node-key="id" :data="treeData" :default-expanded-keys="expandedKeys" :current-node-key="currentKey" @node-click="handleNodeClick" highlight-current />
  15. </div>
  16. <div class="_right">
  17. <div id="detailDiv"></div>
  18. </div>
  19. </div>
  20. </template>
  21. <script>
  22. let jt3d = undefined;
  23. export default {
  24. props: {
  25. tree: {
  26. type: Object,
  27. default () {
  28. return []
  29. }
  30. }
  31. },
  32. data() {
  33. return {
  34. treeData: this.tree,
  35. currentKey: "",
  36. expandedKeys: [], //对应要展开的节点id
  37. }
  38. },
  39. methods: {
  40. /**
  41. * 树单击事件
  42. */
  43. handleNodeClick(treeNode) {
  44. let _self = this;
  45. return new Promise((resolve, reject) => {
  46. if (treeNode.parentid != 'CIM') {
  47. //清除高亮显示
  48. let list = jt3d._dataSources.getByName("单击高亮显示")
  49. list.forEach(res => {
  50. jt3d._dataSources.remove(res)
  51. })
  52. //高亮显示并定位显示详细信息
  53. if (treeNode.data.geometry.type == 'Point') {
  54. let strHtml = "";
  55. strHtml += "<table style='z-index:100;width:98%';border:2px solid #fff;>";
  56. strHtml += "<thead>";
  57. strHtml += "<tr>";
  58. strHtml += "<th>属性名</th>";
  59. strHtml += "<th>属性值</th>";
  60. strHtml += "</tr> ";
  61. strHtml += " </thead>";
  62. strHtml += "<tbody>";
  63. var field = treeNode.field;
  64. var properties = treeNode.data.properties
  65. field.forEach(itemField => {
  66. if (itemField.isDisplay === 1) {
  67. var fieldDesc = itemField.fieldDescription || itemField
  68. .fieldName;
  69. var fieldVals = properties[itemField.fieldName];
  70. //日期格式
  71. if (itemField.fieldType === 1) {
  72. let time = new Date(fieldVals).getTime();
  73. fieldVals = formattingTime(time);
  74. }
  75. if (fieldVals != null && fieldVals != "" && fieldVals !=
  76. undefined) {
  77. strHtml += "<tr>";
  78. strHtml += "<td>" + fieldDesc + "</td>";
  79. strHtml += "<td>" + fieldVals + "</td>";
  80. strHtml += "</tr>";
  81. }
  82. }
  83. });
  84. strHtml += "</tbody>";
  85. strHtml += "</table>";
  86. let divb = document.getElementById('detailDiv')
  87. divb.innerHTML = strHtml; //设置显示的数据,可以是标签.
  88. } else if (treeNode.data.geometry.type == "MultiPolygon") {
  89. this.polygon(treeNode)
  90. } else if (treeNode.data.geometry.type == "MultiLineString") {
  91. debugger
  92. this.polygon(treeNode)
  93. }
  94. }
  95. resolve(1)
  96. })
  97. },
  98. polygon(treeNode) {
  99. jt3d.PolygonObject.generatePolygonByPoints(treeNode.data.geometry.coordinates[0][0], {
  100. color: [255, 0, 255, 0],
  101. outline: true,
  102. outlineWidth: 5,
  103. outlineColor: [0, 255, 180, 1]
  104. }).then((locationEntity) => {
  105. // 初始化定位参数
  106. let options = {};
  107. options.duration = Cesium.defaultValue(options.duration, 2);
  108. options.heading = Cesium.defaultValue(options.heading, 0);
  109. options.pitch = Cesium.defaultValue(options.pitch, -60);
  110. options.range = Cesium.defaultValue(options.range, 800.0);
  111. let flyToEntity = jt3d.LocateUtil.flyToEntity(locationEntity, options);
  112. flyToEntity.then(function(flag) {
  113. //详细信息
  114. let strHtml = "";
  115. strHtml += "<table>";
  116. strHtml += "<thead>";
  117. strHtml += "<tr>";
  118. strHtml += "<th>属性名</th>";
  119. strHtml += "<th>属性值</th>";
  120. strHtml += "</tr> ";
  121. strHtml += " </thead>";
  122. strHtml += "<tbody>";
  123. var field = treeNode.field;
  124. var properties = treeNode.data.properties
  125. field.forEach(itemField => {
  126. if (itemField.isDisplay === 1) {
  127. var fieldDesc = itemField.fieldDescription || itemField
  128. .fieldName;
  129. var fieldVals = properties[itemField.fieldName];
  130. //日期格式
  131. if (itemField.fieldType === 1) {
  132. let time = new Date(fieldVals).getTime();
  133. fieldVals = formattingTime(time);
  134. }
  135. if (fieldVals != null && fieldVals != "" && fieldVals !=
  136. undefined) {
  137. strHtml += "<tr>";
  138. strHtml += "<td>" + fieldDesc + "</td>";
  139. strHtml += "<td>" + fieldVals + "</td>";
  140. strHtml += "</tr>";
  141. }
  142. }
  143. });
  144. strHtml += "</tbody>";
  145. strHtml += "</table>";
  146. let divb = document.getElementById('detailDiv')
  147. divb.innerHTML = strHtml; //设置显示的数据,可以是标签.
  148. });
  149. });
  150. },
  151. //信息展示
  152. createContent(treeNode) {
  153. let strHtml = "";
  154. strHtml += "<table style='z-index:100;width:98%';border:2px solid #fff;>";
  155. strHtml += "<thead>";
  156. strHtml += "<tr>";
  157. strHtml += "<th>属性名</th>";
  158. strHtml += "<th>属性值</th>";
  159. strHtml += "</tr> ";
  160. strHtml += " </thead>";
  161. strHtml += "<tbody>";
  162. var field = treeNode.field;
  163. var properties = treeNode.data.properties
  164. field.forEach(itemField => {
  165. if (itemField.isDisplay === 1) {
  166. var fieldDesc = itemField.fieldDescription || itemField.fieldName;
  167. var fieldVals = properties[itemField.fieldName];
  168. //日期格式
  169. if (itemField.fieldType === 1) {
  170. let time = new Date(fieldVals).getTime();
  171. fieldVals = formattingTime(time);
  172. }
  173. if (fieldVals != null && fieldVals != "" && fieldVals != undefined) {
  174. strHtml += "<tr>";
  175. strHtml += "<td>" + fieldDesc + "</td>";
  176. strHtml += "<td>" + fieldVals + "</td>";
  177. strHtml += "</tr>";
  178. }
  179. }
  180. });
  181. strHtml += "</tbody>";
  182. strHtml += "</table>";
  183. let divb = document.getElementById('detailDiv')
  184. divb.innerHTML = strHtml; //设置显示的数据,可以是标签.
  185. }
  186. },
  187. mounted() {}
  188. }
  189. </script>
  190. <style lang="scss">
  191. .jt-queryResult {
  192. position: relative;
  193. width: 100%;
  194. height: 100%;
  195. overflow: hidden;
  196. z-index: 100000;
  197. // overflow-y: hidden;
  198. ._right {
  199. // overflow-y: hidden;
  200. }
  201. //左侧树
  202. &>div:nth-child(1) {
  203. position: absolute;
  204. left: 0;
  205. top: 0;
  206. width: 220rem;
  207. height: 380rem;
  208. float: left;
  209. overflow: auto !important;
  210. border-right: 5rem solid #ddd;
  211. .el-tree {
  212. background: rgb(28 59 112 / 0%);
  213. height: calc(100% - 2rem);
  214. color: #fff;
  215. --el-tree-node-hover-bg-color: #2a67c3;
  216. --el-font-size-base: 14rem;
  217. .overflowtext {
  218. width: auto !important;
  219. padding: 0;
  220. }
  221. }
  222. .tree-line {
  223. .el-tree-node {
  224. position: relative;
  225. }
  226. .el-tree-node__children {
  227. padding-left: 16rem !important; // 缩进量
  228. .el-tree-node__content {
  229. padding-left: 18rem !important;
  230. }
  231. }
  232. //高亮显示选中样式
  233. .el-tree-node.is-current>.el-tree-node__content {
  234. background: #2a67c3;
  235. }
  236. // 竖线
  237. .el-tree-node::before {
  238. content: "";
  239. height: 100%;
  240. width: 1rem;
  241. position: absolute;
  242. left: -3rem;
  243. top: -26rem;
  244. border-width: 1rem;
  245. border-left: 1rem dashed rgba(255, 255, 255, .8);
  246. }
  247. // 当前层最后一个节点的竖线高度固定
  248. .el-tree-node:last-child::before {
  249. height: 38rem; // 可以自己调节到合适数值
  250. }
  251. // 横线
  252. .el-tree-node::after {
  253. content: "";
  254. width: 24rem;
  255. height: 20rem;
  256. position: absolute;
  257. left: -3rem;
  258. top: 12rem;
  259. border-width: 1rem;
  260. border-top: 1rem dashed rgba(255, 255, 255, .8);
  261. }
  262. // 去掉最顶层的虚线,放最下面样式才不会被上面的覆盖了
  263. &>.el-tree-node::after {
  264. border-top: none;
  265. }
  266. &>.el-tree-node::before {
  267. border-left: none;
  268. }
  269. // 展开关闭的icon
  270. .el-tree-node__expand-icon {
  271. font-size: 16rem;
  272. // 叶子节点(无子节点)
  273. &.is-leaf {
  274. color: transparent;
  275. display: none; // 也可以去掉
  276. }
  277. }
  278. }
  279. }
  280. //右侧基本信息
  281. &>div:nth-child(2) {
  282. position: absolute;
  283. left: 220rem;
  284. top: 0;
  285. width: calc(100% - 240rem);
  286. height: calc(100% - 0rem);
  287. float: left;
  288. margin-left: 10rem;
  289. font-size: 14rem;
  290. padding-top: 5rem;
  291. overflow: auto;
  292. table {
  293. border-collapse: collapse;
  294. margin: 0 auto;
  295. text-align: center;
  296. width: 100%;
  297. height: 100%;
  298. border-right: 2px solid rgb(221, 221, 221);
  299. }
  300. table td,
  301. table th {
  302. // border: 1rem solid #ddd;
  303. color: #fff;
  304. height: 30rem;
  305. }
  306. table thead th {
  307. background-color: rgb(28 59 112 / 100%);
  308. border: 2rem solid #ddd;
  309. }
  310. table tr:nth-child(odd) {
  311. background: rgb(40 89 172 / 60%);
  312. border-left: 2rem solid #ddd;
  313. border-right: 2rem solid #ddd;
  314. border-bottom: 1rem solid #ddd;
  315. }
  316. table tr:nth-child(even) {
  317. background: rgb(28 59 112 / 60%);
  318. border-left: 2rem solid #ddd;
  319. border-right: 2rem solid #ddd;
  320. border-bottom: 1rem solid #ddd;
  321. }
  322. // thead 表头固定,tbody 滚动
  323. table>thead>tr {
  324. display: table;
  325. width: 100%;
  326. table-layout: fixed;
  327. }
  328. table>tbody {
  329. display: block;
  330. height: 340rem;
  331. /* 隐藏水平溢出内容 */
  332. overflow-x: hidden;
  333. /* 当垂直内容超出显示高度时以滚动条形式展示 */
  334. overflow-y: auto;
  335. }
  336. table>tbody>tr {
  337. /* 将tr设置为table元素,以此达到内容沾满table的效果 */
  338. display: table;
  339. /* 将tr宽度设置为100%,以此达到内容沾满table的效果 */
  340. width: 100%;
  341. /* 设置table-layout为fixed以达到首行和内容行对其的效果 */
  342. table-layout: fixed;
  343. }
  344. table>tbody>tr>td {
  345. border-right: 2rem solid #ddd;
  346. }
  347. }
  348. }
  349. </style>