queryResult.vue 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300
  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. jt3d.PolygonObject.generatePolygonByPoints(treeNode.data.geometry.coordinates[0][0], {
  54. color: [255, 0, 255, 0],
  55. outline: true,
  56. outlineWidth: 5,
  57. outlineColor: [0, 255, 180, 1]
  58. }).then((locationEntity) => {
  59. // 初始化定位参数
  60. let options = {};
  61. options.duration = Cesium.defaultValue(options.duration, 2);
  62. options.heading = Cesium.defaultValue(options.heading, 0);
  63. options.pitch = Cesium.defaultValue(options.pitch, -60);
  64. options.range = Cesium.defaultValue(options.range, 800.0);
  65. let flyToEntity = jt3d.LocateUtil.flyToEntity(locationEntity, options);
  66. flyToEntity.then(function(flag) {
  67. //详细信息
  68. let strHtml = "";
  69. strHtml += "<table>";
  70. strHtml += "<thead>";
  71. strHtml += "<tr>";
  72. strHtml += "<th>属性名</th>";
  73. strHtml += "<th>属性值</th>";
  74. strHtml += "</tr> ";
  75. strHtml += " </thead>";
  76. strHtml += "<tbody>";
  77. var field = treeNode.field;
  78. var properties = treeNode.data.properties
  79. field.forEach(itemField => {
  80. if (itemField.isDisplay === 1) {
  81. var fieldDesc = itemField.fieldDescription || itemField
  82. .fieldName;
  83. var fieldVals = properties[itemField.fieldName];
  84. //日期格式
  85. if (itemField.fieldType === 1) {
  86. let time = new Date(fieldVals).getTime();
  87. fieldVals = formattingTime(time);
  88. }
  89. if (fieldVals != null && fieldVals != "" && fieldVals !=
  90. undefined) {
  91. strHtml += "<tr>";
  92. strHtml += "<td>" + fieldDesc + "</td>";
  93. strHtml += "<td>" + fieldVals + "</td>";
  94. strHtml += "</tr>";
  95. }
  96. }
  97. });
  98. strHtml += "</tbody>";
  99. strHtml += "</table>";
  100. let divb = document.getElementById('detailDiv')
  101. divb.innerHTML = strHtml; //设置显示的数据,可以是标签.
  102. });
  103. });
  104. }
  105. resolve(1)
  106. })
  107. },
  108. },
  109. mounted() {}
  110. }
  111. </script>
  112. <style lang="scss">
  113. .jt-queryResult {
  114. overflow: hidden;
  115. //左侧树
  116. &>div:nth-child(1) {
  117. width: 220rem;
  118. height: 380rem;
  119. float: left;
  120. overflow: auto;
  121. border-right: 5rem solid #ddd;
  122. .el-tree {
  123. background: rgb(28 59 112 / 0%);
  124. height: calc(100% - 2rem);
  125. color: #fff;
  126. --el-tree-node-hover-bg-color: #2a67c3;
  127. --el-font-size-base: 14rem;
  128. .overflowtext {
  129. width: auto !important;
  130. padding: 0;
  131. }
  132. }
  133. .tree-line {
  134. .el-tree-node {
  135. position: relative;
  136. }
  137. .el-tree-node__children {
  138. padding-left: 16rem !important; // 缩进量
  139. .el-tree-node__content {
  140. padding-left: 18rem !important;
  141. }
  142. }
  143. //高亮显示选中样式
  144. .el-tree-node.is-current>.el-tree-node__content {
  145. background: #2a67c3;
  146. }
  147. // 竖线
  148. .el-tree-node::before {
  149. content: "";
  150. height: 100%;
  151. width: 1rem;
  152. position: absolute;
  153. left: -3rem;
  154. top: -26rem;
  155. border-width: 1rem;
  156. border-left: 1rem dashed rgba(255, 255, 255, .8);
  157. }
  158. // 当前层最后一个节点的竖线高度固定
  159. .el-tree-node:last-child::before {
  160. height: 38rem; // 可以自己调节到合适数值
  161. }
  162. // 横线
  163. .el-tree-node::after {
  164. content: "";
  165. width: 24rem;
  166. height: 20rem;
  167. position: absolute;
  168. left: -3rem;
  169. top: 12rem;
  170. border-width: 1rem;
  171. border-top: 1rem dashed rgba(255, 255, 255, .8);
  172. }
  173. // 去掉最顶层的虚线,放最下面样式才不会被上面的覆盖了
  174. &>.el-tree-node::after {
  175. border-top: none;
  176. }
  177. &>.el-tree-node::before {
  178. border-left: none;
  179. }
  180. // 展开关闭的icon
  181. .el-tree-node__expand-icon {
  182. font-size: 16rem;
  183. // 叶子节点(无子节点)
  184. &.is-leaf {
  185. color: transparent;
  186. display: none; // 也可以去掉
  187. }
  188. }
  189. }
  190. }
  191. //右侧基本信息
  192. &>div:nth-child(2) {
  193. width: calc(100% - 240rem);
  194. height: calc(100% - 0rem);
  195. float: left;
  196. margin-left: 10rem;
  197. font-size: 14rem;
  198. padding-top: 5rem;
  199. table {
  200. border-collapse: collapse;
  201. margin: 0 auto;
  202. text-align: center;
  203. width: 100%;
  204. }
  205. table td,
  206. table th {
  207. // border: 1rem solid #ddd;
  208. color: #fff;
  209. height: 30rem;
  210. }
  211. table thead th {
  212. background-color: rgb(28 59 112 / 100%);
  213. border: 2rem solid #ddd;
  214. }
  215. table tr:nth-child(odd) {
  216. background: rgb(40 89 172 / 60%);
  217. border-left: 2rem solid #ddd;
  218. border-right: 2rem solid #ddd;
  219. border-bottom: 1rem solid #ddd;
  220. }
  221. table tr:nth-child(even) {
  222. background: rgb(28 59 112 / 60%);
  223. border-left: 2rem solid #ddd;
  224. border-right: 2rem solid #ddd;
  225. border-bottom: 1rem solid #ddd;
  226. }
  227. // thead 表头固定,tbody 滚动
  228. table>thead>tr {
  229. display: table;
  230. width: 100%;
  231. table-layout: fixed;
  232. }
  233. table>tbody {
  234. display: block;
  235. height: 340rem;
  236. /* 隐藏水平溢出内容 */
  237. overflow-x: hidden;
  238. /* 当垂直内容超出显示高度时以滚动条形式展示 */
  239. overflow-y: auto;
  240. }
  241. table>tbody>tr {
  242. /* 将tr设置为table元素,以此达到内容沾满table的效果 */
  243. display: table;
  244. /* 将tr宽度设置为100%,以此达到内容沾满table的效果 */
  245. width: 100%;
  246. /* 设置table-layout为fixed以达到首行和内容行对其的效果 */
  247. table-layout: fixed;
  248. }
  249. table>tbody>tr>td {
  250. border-right: 2rem solid #ddd;
  251. }
  252. }
  253. }
  254. </style>