LayerManage.vue 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677
  1. <template>
  2. <div>
  3. <layer-manage-split
  4. :addlayerdata="addlayerdata"
  5. @visibleChange="visibleChange"
  6. @transSliderChange="transSliderChange"
  7. @handleCheckChange="handleCheckChange"
  8. @location="location"
  9. @raise="raise"
  10. @lower="lower"
  11. ></layer-manage-split>
  12. <LayerLegend></LayerLegend>
  13. </div>
  14. </template>
  15. <script>
  16. import { Collect, GetResourceTree, GetMyCollect } from "@/api/map";
  17. import LayerLegend from "./LayerLegend.vue";
  18. import xml2js from "xml2js";
  19. let geoLayers = [];
  20. export default {
  21. name: "LayerManage",
  22. components: { LayerLegend },
  23. data() {
  24. return {
  25. modellayerlist: [],
  26. vectorlayerlist: [],
  27. username: "admin",
  28. // treeSearchText: "",
  29. addlayerdata: [],
  30. sceneLayers: {},
  31. // favoriteLayerList: [],
  32. sharedState: store.state,
  33. // flag: false,
  34. // s3mLen: 0,
  35. // hid: true,
  36. layerparams: {},
  37. // ImgHid: false, //影响图层移动默认不显示
  38. // S3MLayersObj: {
  39. // title: Resource.s3mLayer,
  40. // expand: true,
  41. // checked: true,
  42. // type: "S3M",
  43. // children: [],
  44. // },
  45. // imgLayersObj: {
  46. // title: Resource.imageryLayer,
  47. // expand: true,
  48. // checked: true,
  49. // type: "IMG",
  50. // children: [],
  51. // },
  52. // TerrainLayersObj: {
  53. // title: Resource.terrainLayer,
  54. // expand: true,
  55. // checked: true,
  56. // type: "TERRAIN",
  57. // children: [],
  58. // },
  59. contextData: null,
  60. S3MList: [],
  61. };
  62. },
  63. computed: {
  64. imgLayers: function () {
  65. return this.sharedState.imgLayerManage;
  66. },
  67. terrainLayers: function () {
  68. return this.sharedState.terrainLayerManage;
  69. },
  70. S3MLayers: function () {
  71. return this.sharedState.S3MLayerManage;
  72. },
  73. },
  74. methods: {
  75. toggleVisibility() {
  76. store.setToolBarAction(0);
  77. },
  78. filterNode(value, data) {
  79. if (!value) return true;
  80. return data.label.indexOf(value) !== -1;
  81. },
  82. favorite(data) {
  83. console.log(data);
  84. },
  85. visibleChange(obj, visible, a) {
  86. console.log(obj, visible, a);
  87. switch (obj.type) {
  88. case "S3M": //场景
  89. if (this.sceneLayers[obj.title]) {
  90. for (let i = 0; i < this.sceneLayers[obj.title][0].length; i++) {
  91. this.sceneLayers[obj.title][0][i].visible = visible;
  92. }
  93. }
  94. break;
  95. case "3DTiles": //场景
  96. if (this.sceneLayers[obj.title]) {
  97. this.sceneLayers[obj.title].show = visible;
  98. }
  99. break;
  100. case "S3MDATA": //scp
  101. if (this.sceneLayers[obj.title]) {
  102. this.sceneLayers[obj.title][0][0].visible = visible;
  103. }
  104. break;
  105. case "wms":
  106. case "wmts":
  107. case "IMG": //影像
  108. this.layerparams[obj.id].show = visible;
  109. break;
  110. case "Vector": //矢量
  111. this.layerparams[obj.id].show = visible;
  112. break;
  113. case "Terrain": //地形
  114. if (visible) {
  115. viewer.terrainProvider = new Cesium.CesiumTerrainProvider({
  116. url: obj.url,
  117. isSct: true,
  118. requestVertexNormals: true,
  119. });
  120. } else {
  121. viewer.scene.terrainProvider = new Cesium.EllipsoidTerrainProvider(
  122. {}
  123. );
  124. }
  125. break;
  126. default:
  127. null;
  128. }
  129. },
  130. transSliderChange(obj, v, a) {
  131. if (typeof v == undefined) {
  132. return;
  133. }
  134. let value = v / 100;
  135. let imageryLayers = viewer.imageryLayers;
  136. switch (obj.type) {
  137. case "S3M": //场景
  138. if (this.sceneLayers[obj.title]) {
  139. this.sceneLayers[obj.title][0][0].style3D.fillForeColor =
  140. new Cesium.Color(1.0, 1.0, 1.0, value);
  141. }
  142. break;
  143. case "S3MDATA": //scp
  144. if (this.sceneLayers[obj.title]) {
  145. this.sceneLayers[obj.title][0][0].style3D.fillForeColor =
  146. new Cesium.Color(1.0, 1.0, 1.0, value);
  147. }
  148. break;
  149. case "3DTiles": //tileset
  150. if (this.sceneLayers[obj.title]) {
  151. this.sceneLayers[obj.title].style = new Cesium.Cesium3DTileStyle({
  152. color: "color('rgba(255,255,255," + value + ")')",
  153. });
  154. }
  155. break;
  156. case "wms":
  157. case "wmts":
  158. case "IMG": //影像
  159. case "Vector": //矢量
  160. this.layerparams[obj.id].alpha = value;
  161. // for (let i = 0; i < imageryLayers._layers.length; i++) {
  162. // let element = imageryLayers._layers[i];
  163. // if (element._imageryProvider._name == obj.title) {
  164. // element.alpha = value;
  165. // break;
  166. // }
  167. // }
  168. break;
  169. case "Terrain": //地形
  170. break;
  171. default:
  172. null;
  173. }
  174. },
  175. addS3M(LayerURL) {
  176. let promiseArray = [];
  177. promiseArray.push(viewer.scene.addS3MTilesLayerByScp(LayerURL));
  178. this.promiseWhen(promiseArray, true);
  179. },
  180. addTerrain(LayerURL) {
  181. viewer.terrainProvider = new Cesium.CesiumTerrainProvider({
  182. url: LayerURL,
  183. isSct: true,
  184. requestVertexNormals: true,
  185. });
  186. this.bus.$emit("setDepthAgainst", true);
  187. },
  188. add3DTiles(obj) {
  189. let tileset = new Cesium.Cesium3DTileset({
  190. url: obj.url + "?id=" + obj.id,
  191. skipLevelOfDetail: true,
  192. });
  193. this.sceneLayers[obj.title] = tileset;
  194. store.setSceneLayersList(this.sceneLayers);
  195. let thisLayer = viewer.scene.primitives.add(tileset);
  196. // viewer.flyTo(thisLayer);
  197. },
  198. addImage(LayerURL) {
  199. var layer = viewer.imageryLayers.addImageryProvider(
  200. new Cesium.SuperMapImageryProvider({
  201. url: LayerURL,
  202. })
  203. );
  204. viewer.flyTo(layer);
  205. },
  206. addWMS(obj) {
  207. let layer = viewer.imageryLayers.addImageryProvider(
  208. new Cesium.WebMapServiceImageryProvider({
  209. url: obj.url,
  210. layers: `${obj.fwgzkj}:${obj.fwmc}`, //"demo:Ahtq_czkfbj",
  211. parameters: {
  212. service: obj.type, //"WMS",
  213. format: obj.format,
  214. transparent: true,
  215. // srs: "EPSG:4326", // 坐标参考系统,可以根据需要更改
  216. },
  217. })
  218. );
  219. return layer;
  220. },
  221. addWMTS(obj) {
  222. return viewer.imageryLayers.addImageryProvider(
  223. new Cesium.WebMapTileServiceImageryProvider({
  224. url: obj.url, //'http://192.168.60.52:28085/geoserver/gwc/service/wmts';
  225. layer: `${obj.fwgzkj}:${obj.fwmc}`, //"demo:yzq_czkfbj"
  226. style: "", // 替换为你的WMTS图层风格
  227. tileMatrixSetID: obj.qpfa, // 或者其他的EPSG代码
  228. format: obj.format,
  229. tilingScheme: new Cesium.WebMercatorTilingScheme(), // 当想要加载EPSG:4326瓦片服务时,只需要创建一个GeographicTilingScheme对象即可
  230. maximumLevel: obj.maximumlevel,
  231. minimumlevel: obj.minimumlevel,
  232. })
  233. );
  234. },
  235. addArcGis(obj) {
  236. let layer = viewer.imageryLayers.addImageryProvider(
  237. new Cesium.ArcGisMapServerImageryProvider({
  238. url: "http://192.168.60.20:6080/arcgis/rest/services/150500/DLTB00_2019/MapServer?f=jsapi",
  239. })
  240. );
  241. viewer.flyTo(layer);
  242. },
  243. promiseWhen(promiseArray, sceneName, obj) {
  244. let this_ = this;
  245. Cesium.when.all(
  246. promiseArray,
  247. (layers) => {
  248. this_.sceneLayers[obj.title] = layers;
  249. // if (sceneName) {
  250. // this.flyTo(sceneName);
  251. // }
  252. if (obj.url.indexOf("3D-HeBing8HaoLou") > 0) {
  253. store.setLayerList(layers[0][0]);
  254. layers[0][0].setQueryParameter({
  255. url: "https://www.supermapol.com/realspace/services/data-HeBing8HaoLou/rest/data",
  256. dataSourceName: "Model_8_old",
  257. dataSetName: "属性表",
  258. keyWord: "SmID",
  259. });
  260. } else if (obj.title == "分层分户_白膜") {
  261. store.setLayerList(layers[0][0]);
  262. }
  263. // store.state.S3MList.push(layers[0]);
  264. store.state.tempLatData = layers;
  265. layers[0].forEach((item) => {
  266. item.RGBTOBGR = true;
  267. if (obj.title == "倾斜摄影") {
  268. let style = new Cesium.Style3D();
  269. style.bottomAltitude = window.modelBottomAltitude; //底部高度
  270. item.style3D = style;
  271. item.brightness = 1.2;
  272. item.contrast = 1.2;
  273. item.saturation = 1.2;
  274. item.gamma = 1.1;
  275. }
  276. if (
  277. item.name.indexOf("雨水") > -1 ||
  278. item.name.indexOf("管线") > -1
  279. ) {
  280. item._baseUri.query = obj.id;
  281. }
  282. });
  283. // store.state.tempLatData = layers[0];
  284. store.setSceneLayersList(this_.sceneLayers);
  285. // for (var i = 0; i < layers.length; i++) {
  286. // let style = new Cesium.Style3D();
  287. // style.bottomAltitude = window.modelBottomAltitude; //底部高度
  288. // if (layers[i].length > 0) {
  289. // for (var j = 0; j < layers[i].length; j++) {
  290. // layers[i][j].style3D = style;
  291. // layers[i][j].refresh();
  292. // layers[i][j].isOverlapDisplayed = true; //开启避让
  293. // }
  294. // } else {
  295. // layers[i].style3D = style;
  296. // layers[i].refresh();
  297. // layers[i].isOverlapDisplayed = true; //开启避让
  298. // }
  299. // }
  300. },
  301. function (e) {
  302. if (widget._showRenderLoopErrors) {
  303. let title = Resource.scpUrlErrorMsg;
  304. widget.showErrorPanel(title, undefined, e);
  305. }
  306. }
  307. );
  308. },
  309. handleSelectChange(selectedList, obj) {
  310. obj ? (obj.expand = !obj.expand) : null;
  311. },
  312. // 复选框改变
  313. handleCheckChange(obj, checked) {
  314. if (obj.children && obj.children.length > 0) {
  315. for (let i = 0; i < obj.children.length; i++) {
  316. this.handleCheckChange(obj.children[i], checked);
  317. }
  318. } else {
  319. this.checkedChange(obj);
  320. if (checked) store.setCheckedData(obj);
  321. }
  322. store.setVectorLayerList(this.vectorlayerlist);
  323. store.setModelLayerList(this.modellayerlist);
  324. },
  325. //type roller 卷帘 split分屏splitId
  326. checkedChange(obj, type, splitId) {
  327. let imageryLayers = viewer.imageryLayers;
  328. if (obj.checked) {
  329. obj.trans = 100;
  330. obj.visible = true;
  331. this.addlayerdata.unshift(obj); //将最新添加的对象放到第一位
  332. if (obj.serverType == "geoserver") {
  333. switch (obj.type) {
  334. case "wms":
  335. this.vectorlayerlist.push(obj);
  336. this.layerparams[obj.id] = this.addWMS(obj);
  337. store.setlayerparamsList(this.layerparams);
  338. break;
  339. case "wmts":
  340. this.vectorlayerlist.push(obj);
  341. this.layerparams[obj.id] = this.addWMTS(obj);
  342. store.setlayerparamsList(this.layerparams);
  343. break;
  344. }
  345. } else if (obj.serverType == "arcgis") {
  346. } else {
  347. switch (obj.type) {
  348. case "S3M": //场景
  349. let s = viewer.scene.open(obj.url, undefined, {
  350. autoSetView: false, // obj.title != "倾斜摄影",
  351. });
  352. this.vectorlayerlist.push(obj);
  353. this.promiseWhen([s], undefined, obj);
  354. this.bus.$emit("setDepthAgainst", true);
  355. if (
  356. obj.title.indexOf("雨水") > -1 ||
  357. obj.title.indexOf("管线") > -1
  358. ) {
  359. this.bus.$emit("setnUderground", obj.checked);
  360. }
  361. // store.setModelLayerList(this.vectorlayerlist);
  362. // console.log(store.state.modellayerlist,'vvvvv');
  363. // store.state.S3MList.push(obj)
  364. break;
  365. case "S3MDATA": //scp
  366. viewer.scene.addS3MTilesLayerByScp(obj.url, {
  367. name: obj.title,
  368. });
  369. break;
  370. case "3DTiles": //tileset
  371. this.add3DTiles(obj);
  372. this.vectorlayerlist.push(obj);
  373. break;
  374. case "IMG": //影像
  375. let layer = viewer.imageryLayers.addImageryProvider(
  376. new Cesium.SuperMapImageryProvider({
  377. url: obj.url,
  378. name: obj.title,
  379. })
  380. );
  381. this.layerparams[obj.id] = layer;
  382. store.setlayerparamsList(this.layerparams);
  383. if (type == "roller")
  384. this.bus.$emit("setImageryRoller", layer, splitId);
  385. // viewer.flyTo(layer);
  386. break;
  387. case "Vector": //矢量
  388. // let provider = new Cesium.SuperMapImageryProvider({
  389. // url: obj.url,
  390. // name: obj.title,
  391. // })
  392. // let layer2 = viewer.imageryLayers.addImageryProvider(
  393. // provider
  394. // );
  395. // var params = [{
  396. // layerName: 'YJJBNTBHTB@YJJBNTBH',
  397. // isVisible: true,
  398. // displayFilter: "xzqdm='460205000003'"
  399. // }
  400. // ]
  401. // provider.setLayerStatusParameters(params)
  402. // let layer2 = viewer.imageryLayers.addImageryProvider(
  403. // new Cesium.SuperMapImageryProvider({
  404. // url: obj.url,
  405. // name: obj.title,
  406. // })
  407. // );
  408. // var provider = new Cesium.SuperMapImageryProvider({ url: 'http://192.168.60.3:8099/iserver/services/map-GuiHuaDiKuai/rest/maps/GHDK%40%E8%A7%84%E5%88%92%E5%9C%B0%E5%9D%97' });
  409. // var layer2 = viewer.imageryLayers.addImageryProvider(provider);
  410. // var params = [
  411. // {
  412. // layerName: 'GHDK@规划地块',
  413. // isVisible: true,
  414. // displayFilter: "XZQDM LIKE '460203%' and PFSJ < '20190808'"
  415. // }
  416. // ]
  417. // provider.setLayerStatusParameters(params)
  418. let layer2 = viewer.imageryLayers.addImageryProvider(
  419. new Cesium.SuperMapImageryProvider({
  420. url: obj.url,
  421. name: obj.title,
  422. })
  423. );
  424. this.vectorlayerlist.push(obj);
  425. this.layerparams[obj.id] = layer2;
  426. store.setlayerparamsList(this.layerparams);
  427. if (type == "roller")
  428. this.bus.$emit("setImageryRoller", layer2, splitId);
  429. // viewer.flyTo(layer2);
  430. break;
  431. case "Terrain": //地形
  432. this.addTerrain(obj.url);
  433. break;
  434. default:
  435. null;
  436. }
  437. }
  438. if (type == "split") {
  439. this.bus.$emit("setImagerySplit", obj, obj.checked, splitId, true);
  440. } else if (type == "share") {
  441. this.bus.$emit("setShareResources", obj, obj.checked, -2, true);
  442. }
  443. } else {
  444. if (obj.title.indexOf("雨水") > -1 || obj.title.indexOf("管线") > -1) {
  445. this.bus.$emit("setnUderground", obj.checked);
  446. }
  447. for (let i = 0; i < this.addlayerdata.length; i++) {
  448. if (this.addlayerdata[i].title == obj.title) {
  449. this.addlayerdata.splice(i, 1);
  450. break;
  451. }
  452. }
  453. for (let i = 0; i < this.vectorlayerlist.length; i++) {
  454. if (this.vectorlayerlist[i].title == obj.title) {
  455. this.vectorlayerlist.splice(i, 1);
  456. break;
  457. }
  458. }
  459. for (let i = 0; i < this.modellayerlist.length; i++) {
  460. if (this.modellayerlist[i].title == obj.title) {
  461. this.modellayerlist.splice(i, 1);
  462. break;
  463. }
  464. }
  465. switch (obj.type) {
  466. case "S3M": //场景
  467. if (this.sceneLayers[obj.title]) {
  468. for (let i = 0; i < this.sceneLayers[obj.title].length; i++) {
  469. if (this.sceneLayers[obj.title][i].length > 0) {
  470. for (
  471. let u = 0;
  472. u < this.sceneLayers[obj.title][i].length;
  473. u++
  474. ) {
  475. viewer.scene.layers.remove(
  476. this.sceneLayers[obj.title][i][u]._name
  477. );
  478. }
  479. } else {
  480. viewer.scene.layers.remove(
  481. this.sceneLayers[obj.title][i]._name
  482. );
  483. }
  484. }
  485. }
  486. break;
  487. case "S3MDATA": //scp
  488. viewer.scene.layers.remove(obj.title);
  489. break;
  490. case "3DTiles": //tileset
  491. viewer.scene.primitives.remove(this.sceneLayers[obj.title]);
  492. break;
  493. case "wms":
  494. case "wmts":
  495. case "IMG": //影像
  496. case "Vector": //矢量
  497. imageryLayers.remove(this.layerparams[obj.id]);
  498. delete this.layerparams[obj.id];
  499. // for (let i = 0; i < imageryLayers._layers.length; i++) {
  500. // let element = imageryLayers._layers[i];
  501. // if (element._imageryProvider._name == obj.title) {
  502. // imageryLayers.remove(element);
  503. // break;
  504. // }
  505. // }
  506. break;
  507. case "Terrain": //地形
  508. viewer.scene.terrainProvider = new Cesium.EllipsoidTerrainProvider(
  509. {}
  510. );
  511. break;
  512. default:
  513. null;
  514. }
  515. }
  516. },
  517. async getPos(obj) {
  518. let ind =
  519. obj.url.indexOf("geoserver") >= 0
  520. ? obj.url.indexOf("geoserver")
  521. : obj.url.indexOf("siweiserver");
  522. let url = obj.url.substring(0, ind + 9) + "/wms";
  523. let params = {
  524. service: "WMS",
  525. version: "1.1.1",
  526. request: "GetCapabilities",
  527. };
  528. let res = await axios.get(url, { params });
  529. new xml2js.Parser().parseString(res.data, (err, result) => {
  530. geoLayers = result.WMT_MS_Capabilities.Capability[0].Layer[0].Layer;
  531. });
  532. },
  533. async flyTogeo(obj) {
  534. if (geoLayers) await this.getPos(obj);
  535. let ser = geoLayers.find(
  536. (li) => li.Name.indexOf(`${obj.fwgzkj}:${obj.fwmc}`) >= 0
  537. );
  538. if (ser) {
  539. let pos = ser.LatLonBoundingBox[0]["$"];
  540. viewer.camera.flyTo({
  541. destination: Cesium.Rectangle.fromDegrees(
  542. pos.minx,
  543. pos.miny,
  544. pos.maxx,
  545. pos.maxy
  546. ),
  547. });
  548. }
  549. },
  550. //图层定位
  551. location(obj) {
  552. let imageryLayers = viewer.imageryLayers;
  553. if (obj.serverType == "geoserver") {
  554. switch (obj.type) {
  555. case "wms":
  556. case "wmts":
  557. // console.log("11", this.layerparams[obj.id]);
  558. this.flyTogeo(obj);
  559. break;
  560. }
  561. } else if (obj.serverType == "arcgis") {
  562. } else {
  563. switch (obj.type) {
  564. case "S3M": //场景
  565. if (this.sceneLayers[obj.title]) {
  566. viewer.flyTo(this.sceneLayers[obj.title][0][0]);
  567. }
  568. break;
  569. case "S3MDATA": //scp
  570. viewer.flyTo(this.sceneLayers[obj.title][0][0]);
  571. break;
  572. case "3DTiles": //tileset
  573. viewer.flyTo(this.sceneLayers[obj.title]);
  574. break;
  575. case "IMG": //影像
  576. case "Vector": //矢量
  577. viewer.flyTo(this.layerparams[obj.id]);
  578. // for (let i = 0; i < imageryLayers._layers.length; i++) {
  579. // let element = imageryLayers._layers[i];
  580. // if (element._imageryProvider._name == obj.title) {
  581. // viewer.flyTo(element);
  582. // break;
  583. // }
  584. // }
  585. break;
  586. case "Terrain": //地形
  587. viewer.scene.terrainProvider = new Cesium.EllipsoidTerrainProvider(
  588. {}
  589. );
  590. break;
  591. default:
  592. null;
  593. }
  594. }
  595. },
  596. //影像图层操作
  597. raise(obj) {
  598. viewer.imageryLayers.raise(this.layerparams[obj.id]);
  599. for (let i = 0; i < this.addlayerdata.length; i++) {
  600. if (this.addlayerdata[i].title == obj.title) {
  601. let arr = Array.from(this.addlayerdata);
  602. this.addlayerdata = [];
  603. this.addlayerdata = this.moveUp(arr, i);
  604. break;
  605. }
  606. }
  607. },
  608. lower(obj) {
  609. viewer.imageryLayers.lower(this.layerparams[obj.id]);
  610. for (let i = 0; i < this.addlayerdata.length; i++) {
  611. if (this.addlayerdata[i].title == obj.title) {
  612. let arr = Array.from(this.addlayerdata);
  613. this.addlayerdata = [];
  614. this.addlayerdata = this.moveDown(arr, i);
  615. break;
  616. }
  617. }
  618. },
  619. raiseToTop() {
  620. let imageryLayers = viewer.imageryLayers._layers;
  621. let ly = imageryLayers[this.contextData.id];
  622. viewer.imageryLayers.raiseToTop(ly);
  623. this.updataImgLayers();
  624. },
  625. lowerToBottom() {
  626. let imageryLayers = viewer.imageryLayers._layers;
  627. let ly = imageryLayers[this.contextData.id];
  628. viewer.imageryLayers.lowerToBottom(ly);
  629. this.updataImgLayers();
  630. },
  631. // 上移操作
  632. moveUp(array, index) {
  633. if (index > 0 && index < array.length) {
  634. let temp = array[index];
  635. array[index] = array[index - 1];
  636. array[index - 1] = temp;
  637. }
  638. return array;
  639. },
  640. // 下移操作
  641. moveDown(array, index) {
  642. if (index >= 0 && index < array.length - 1) {
  643. let temp = array[index];
  644. array[index] = array[index + 1];
  645. array[index + 1] = temp;
  646. }
  647. return array;
  648. },
  649. },
  650. mounted() {
  651. this.bus.$on("checkedChange", this.checkedChange);
  652. },
  653. watch: {},
  654. };
  655. </script>
  656. <style lang="scss">
  657. @import "./LayerManage.scss";
  658. </style>