LayerManageSplit.vue 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320
  1. <template>
  2. <div class="sm-panel" v-if="LayerManageShow">
  3. <div class="sm-panel-header">
  4. <span>{{ Resource.LayerManage }}</span>
  5. <span class="closeBtn" @click="toggleVisibility">&times;</span>
  6. </div>
  7. <Tabs value="">
  8. <TabPane :label="Resource.Resource" name="zyml">
  9. <div class="zyml" :class="$props.splitId ? `zymlsplit` : ''">
  10. <el-input
  11. :placeholder="Resource.InputPlaceholder"
  12. prefix-icon="el-icon-search"
  13. v-model="treeSearchText"
  14. size="small"
  15. >
  16. </el-input>
  17. <div class="treeDiv">
  18. <el-tree
  19. @check="handleCheckChange"
  20. class="filter-tree"
  21. :data="TreeDatas"
  22. show-checkbox
  23. :props="defaultProps"
  24. :filter-node-method="filterNode"
  25. :default-checked-keys="checkedKeys"
  26. node-key="id"
  27. ref="tree"
  28. >
  29. <span class="custom-tree-node" slot-scope="{ node, data }">
  30. <span>{{ node.label }}</span>
  31. <span>
  32. <Icon
  33. :type="!data.favorite ? 'ios-star-outline' : 'ios-star'"
  34. color="green"
  35. size="18"
  36. class="opBtn"
  37. :title="
  38. data.favorite ? Resource.DelCollect : Resource.AddCollect
  39. "
  40. @click="favoriteHandle(data)"
  41. v-if="data.url != ''"
  42. />
  43. </span>
  44. </span>
  45. </el-tree>
  46. </div>
  47. </div>
  48. </TabPane>
  49. <TabPane
  50. :label="Resource.LayerOptions"
  51. name="tckz"
  52. v-if="!$props.splitId"
  53. >
  54. <div class="tckz">
  55. <List split size="large">
  56. <ListItem v-for="(item, index) in addlayerdata" :key="index">
  57. {{ item.title }}
  58. <div class="listBtn">
  59. <i-switch
  60. v-model="item.visible"
  61. size="small"
  62. @on-change="visibleChange(item, $event)"
  63. >
  64. <template #open>
  65. <span></span>
  66. </template>
  67. <template #close>
  68. <span></span>
  69. </template>
  70. </i-switch>
  71. <Icon
  72. type="md-arrow-round-up"
  73. color="green"
  74. size="18"
  75. class="opBtn"
  76. :title="Resource.MoveUpOneLevel"
  77. @click="raise(item)"
  78. v-if="
  79. index > 0 && (item.type == 'Vector' || item.type == 'IMG')
  80. "
  81. />
  82. <Icon
  83. type="md-arrow-round-down"
  84. color="green"
  85. size="18"
  86. class="opBtn"
  87. :title="Resource.MoveDownOneLevel"
  88. @click="lower(item)"
  89. v-if="
  90. index < addlayerdata.length - 1 &&
  91. (item.type == 'Vector' || item.type == 'IMG')
  92. "
  93. />
  94. <Icon
  95. type="md-locate"
  96. color="green"
  97. size="18"
  98. class="opBtn"
  99. :title="Resource.location"
  100. @click="location(item)"
  101. />
  102. </div>
  103. <div class="sliderBtn" v-if="item.type != 'Terrain'">
  104. <Slider
  105. v-model="item.trans"
  106. @on-change="transSliderChange(item, $event)"
  107. ></Slider>
  108. </div>
  109. </ListItem>
  110. </List>
  111. </div>
  112. </TabPane>
  113. <TabPane :label="Resource.Favorite" name="collect">
  114. <div class="collect" :class="$props.splitId ? `collectsplit` : ''">
  115. <List split>
  116. <ListItem
  117. v-for="(item, index) in favoriteLayerList"
  118. :key="index"
  119. class="layerlist"
  120. >
  121. <Checkbox @on-change="checkboxChange(item, $event)">{{
  122. item.title
  123. }}</Checkbox>
  124. <div class="listBtn">
  125. <Icon
  126. type="ios-star"
  127. color="green"
  128. size="18"
  129. class="opBtn"
  130. :title="Resource.DelCollect"
  131. @click="favoriteHandle(item)"
  132. />
  133. </div>
  134. </ListItem>
  135. </List>
  136. </div>
  137. </TabPane>
  138. </Tabs>
  139. </div>
  140. </template>
  141. <script>
  142. import { Collect, GetResourceTree, GetMyCollect } from "@/api/map";
  143. export default {
  144. name: "LayerManageSplit",
  145. props: {
  146. type: {
  147. type: String,
  148. },
  149. splitId: {
  150. type: Number,
  151. default: false,
  152. },
  153. isshow: {
  154. type: Boolean,
  155. default: false,
  156. },
  157. checkedKeys: {
  158. type: Object,
  159. },
  160. },
  161. data() {
  162. return {
  163. defaultProps: {
  164. children: "children",
  165. label: "label",
  166. },
  167. treeSearchText: "",
  168. addlayerdata: [],
  169. favoriteLayerList: [],
  170. sharedState: store.state,
  171. TreeDatas: [
  172. {
  173. title: Resource.layerList,
  174. expand: true,
  175. // selected: true,
  176. // contextmenu: true,
  177. children: [],
  178. type: "ROOT",
  179. },
  180. ],
  181. };
  182. },
  183. computed: {
  184. LayerManageShow: function () {
  185. return this.$props.splitId
  186. ? this.$props.isshow
  187. : this.sharedState.toolBar[0];
  188. },
  189. },
  190. methods: {
  191. toggleVisibility() {
  192. this.$props.splitId ? this.$emit("close") : store.setToolBarAction(0);
  193. },
  194. setCheckedKeys(keys) {
  195. this.$refs.tree.setCheckedKeys(keys);
  196. },
  197. filterNode(value, data) {
  198. let addjudge = true;
  199. if (this.$props.type == "split") {
  200. addjudge = data.type !== "Terrain";
  201. } else if (this.$props.type == "roller") {
  202. addjudge = data.type == "IMG" || data.type == "Vector";
  203. }
  204. if (!value) return addjudge;
  205. return data.label.indexOf(value) !== -1 && addjudge;
  206. },
  207. favoriteHandle(data) {
  208. // this.$emit("favoriteHandle", data);
  209. if (data.favorite) {
  210. data.favorite = null;
  211. for (let i = 0; i < this.favoriteLayerList.length; i++) {
  212. if (this.favoriteLayerList[i].id == data.id) {
  213. this.favoriteLayerList.splice(i, 1);
  214. }
  215. }
  216. } else {
  217. data.favorite = this.username;
  218. this.favoriteLayerList.push(data);
  219. }
  220. Collect(this.username, data.id).then((res) => {
  221. if (res.statuscode == 200) {
  222. this.$message({
  223. message: "操作成功",
  224. type: "success",
  225. });
  226. } else {
  227. this.$message.error(res.message);
  228. }
  229. });
  230. },
  231. favorite(data) {
  232. console.log(data);
  233. },
  234. checkboxChange(obj, checked, a) {
  235. obj.checked = checked;
  236. this.handleCheckChange(obj, checked);
  237. },
  238. visibleChange(obj, visible, a) {
  239. this.$emit("visibleChange", obj, visible, a);
  240. },
  241. transSliderChange(obj, v, a) {
  242. this.$emit("transSliderChange", obj, v, a);
  243. },
  244. // 复选框改变
  245. handleCheckChange(obj, checked) {
  246. console.log(obj, checked);
  247. if (typeof checked == "boolean") {
  248. obj.checked = checked;
  249. } else {
  250. obj.checked = !obj.checked;
  251. }
  252. this.$emit("handleCheckChange", obj, checked, this.$props.splitId);
  253. },
  254. //获取后台资源目录树结构
  255. getResourceTree() {
  256. GetResourceTree().then((res) => {
  257. if (res.statuscode == 200) {
  258. this.TreeDatas = res.data;
  259. store.state.tempResourceTree = res.data;
  260. } else {
  261. console.log(e);
  262. }
  263. });
  264. },
  265. //获取后台资源目录树结构
  266. getFavoriteLayers() {
  267. GetMyCollect().then((res) => {
  268. if (res.statuscode == 200) {
  269. this.favoriteLayerList = res.data;
  270. } else {
  271. console.log(e);
  272. }
  273. });
  274. },
  275. //图层定位
  276. location(obj) {
  277. this.$emit("location", obj);
  278. },
  279. //影像图层操作
  280. raise(obj) {
  281. this.$emit("raise", obj);
  282. },
  283. lower(obj) {
  284. this.$emit("lower", obj);
  285. },
  286. },
  287. mounted() {
  288. this.getResourceTree();
  289. this.getFavoriteLayers();
  290. },
  291. watch: {
  292. treeSearchText(val) {
  293. this.$refs.tree.filter(val);
  294. },
  295. LayerManageShow: {
  296. handler() {
  297. if (this.LayerManageShow && this.$props.type) {
  298. setTimeout(() => {
  299. if (this.$refs.tree) this.$refs.tree.filter("");
  300. }, 500);
  301. // this.$nextTick(() => {
  302. // if (this.$refs.tree) this.$refs.tree.filter("");
  303. // });
  304. }
  305. },
  306. immediate: true,
  307. },
  308. },
  309. };
  310. </script>
  311. <style lang="scss">
  312. @import "./LayerManage.scss";
  313. </style>