7d57d6c87efe3630fc226cdd507560c214f9625b.svn-base 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. <template>
  2. <div ref="ResCatalog" v-drag="'.resCatalog .ant-card-head'" class="resCatalog ol-unselectable">
  3. <a-card v-show='value' title="专题图层" style=" box-shadow: 0 0 5px #357ee5;">
  4. <a-icon slot="extra" type="close" style='cursor: pointer; color: #FFFFFF;' @click="$emit('input',false)"/>
  5. <a-collapse style='overflow-y: auto; max-height: 70vh;'>
  6. <a-collapse-panel v-for="(item,index) in this.baseMap.list" :key="item.id" :header="item.name">
  7. <template v-for="(itemA,index) in item.layers" >
  8. <li style="margin: 15px" v-if="!itemA.layers" :key='itemA.name'>
  9. <div>
  10. <a-checkbox v-model='itemA.visible' ref="checkbox" @change='layerSwitch(itemA)'>
  11. <img v-show="itemA.visible&&[itemA.children]==''" :src="`${baseUrl}/${itemA.legend}`"/>
  12. <span>{{ itemA.alias }}</span>
  13. </a-checkbox>
  14. <a-slider style='display: inline-block;' ref="slider" class="slider" :min="0" :max="1"
  15. :step="0.01" :default-value="1" :tooltip-visible="false" :disabled='!itemA.visible'
  16. @change='changeOpacity($event,itemA.name)'></a-slider>
  17. </div>
  18. <template v-if="[itemA.categories]!=''&&itemA.visible">
  19. <p v-for="item in itemA.categories">
  20. <img :src="`${baseUrl}/${item.img}`"/>
  21. {{ item.name }}
  22. </p>
  23. </template>
  24. </li>
  25. <a-collapse v-else style='overflow-y: auto; max-height: 90vh;'>
  26. <a-collapse-panel :key="itemA.name" :header="itemA.name">
  27. <ul style="margin: 10px;padding: 0;margin-left: 25px">
  28. <li v-for="(layer,i) in itemA.layers" :key='layer.name'>
  29. <div>
  30. <a-checkbox v-model='layer.visible' ref="checkbox" @change='layerSwitch(layer)'>
  31. <img v-show="layer.visible&&[layer.children]==''" :src="`${baseUrl}/${layer.legend}`"/>
  32. <span>{{ layer.alias }}</span>
  33. </a-checkbox>
  34. <a-slider style='display: inline-block;' ref="slider" class="slider" :min="0" :max="1"
  35. :step="0.01" :default-value="1" :tooltip-visible="false" :disabled='!layer.visible'
  36. @change='changeOpacity($event,layer.name)'></a-slider>
  37. </div>
  38. <template v-if="[layer.categories]!=''&&layer.visible">
  39. <p v-for="item in layer.categories">
  40. <img :src="`${baseUrl}/${item.img}`"/>
  41. {{ item.name }}
  42. </p>
  43. </template>
  44. </li>
  45. </ul>
  46. </a-collapse-panel>
  47. </a-collapse>
  48. </template>
  49. </a-collapse-panel>
  50. </a-collapse>
  51. </a-card>
  52. </div>
  53. </template>
  54. <script>
  55. import 'ol/ol.css'
  56. import * as bussLayerFn from '@/utils/oneMap/bussLayer';
  57. export default {
  58. name: "ResCatalog",
  59. props: {
  60. value: {
  61. type: Boolean,
  62. default: false,
  63. required: true
  64. }
  65. },
  66. components: {},
  67. data: function () {
  68. return {
  69. baseUrl:'',
  70. list:[],
  71. map:{}
  72. }
  73. },
  74. inject: ['baseMap','splitScreen'],
  75. created() {
  76. this.baseUrl=window._CONFIG['domianURL'];
  77. },
  78. mounted() {
  79. /*if(this.splitScreen){
  80. this.list=this.baseMap.list2;
  81. }else {
  82. this.list=this.baseMap.list;
  83. }*/
  84. },
  85. methods: {
  86. layerSwitch(layer) {
  87. if(this.splitScreen){
  88. this.map=this.baseMap.map2;
  89. }else {
  90. this.map=this.baseMap.map;
  91. }
  92. let checked = layer.visible;
  93. let m_layer = this.getLayerByName(layer.name);
  94. if (!m_layer) {
  95. m_layer=bussLayerFn.loadBussLayer(this.map, layer.url, layer.name,layer.alias, layer.sourceName,
  96. layer.zIndex,
  97. layer.visible);
  98. }
  99. m_layer.setVisible(checked);
  100. },
  101. changeOpacity(value, layerName) {
  102. let m_layer = this.getLayerByName(layerName);
  103. if (!m_layer) {
  104. return;
  105. }
  106. m_layer.setOpacity(value);
  107. },
  108. getLayerByName(layerName) {
  109. var map = this.map;
  110. if (!map) {
  111. return;
  112. }
  113. let layer = null;
  114. let layers = map.getLayers();
  115. let layerCount = layers.getLength();
  116. for (let i = 0; i < layerCount; i++) {
  117. let name = layers.item(i).get('name');
  118. if (name === layerName) {
  119. layer = layers.item(i);
  120. return layer;
  121. }
  122. }
  123. return layer;
  124. }
  125. },
  126. }
  127. </script>
  128. <style scoped>
  129. .ant-checkbox-wrapper{
  130. display: flex;
  131. align-items: center;
  132. max-width: 140px;
  133. }
  134. .resCatalog {
  135. border-radius: 4px;
  136. box-shadow: 0 0 5px #357ee5;
  137. min-width: 275px;
  138. height: auto;
  139. }
  140. .ant-slider {
  141. margin: 2px 1px 1px;
  142. width: 40%;
  143. }
  144. li > div {
  145. display: flex;
  146. justify-content: space-between;
  147. align-items: center;
  148. margin-bottom: 8px;
  149. }
  150. p {
  151. padding-left: 40px;
  152. }
  153. img {
  154. width: 20px;
  155. /*height: 20px;*/
  156. display: inline-block;
  157. }
  158. </style>