From c960e2add5751edbe728dd5d297079b36544d11a Mon Sep 17 00:00:00 2001 From: Surpriseplus <845948745@qq.com> Date: 星期二, 20 十二月 2022 17:40:17 +0800 Subject: [PATCH] 1 --- src/views/exportMap/index.vue | 793 ++++++++++++++++++++++++++++++++----------------------- 1 files changed, 458 insertions(+), 335 deletions(-) diff --git a/src/views/exportMap/index.vue b/src/views/exportMap/index.vue index 738dddd..4f60428 100644 --- a/src/views/exportMap/index.vue +++ b/src/views/exportMap/index.vue @@ -1,196 +1,201 @@ <template> - <div class="exportmap"> - <div id="mapView" class="mapView"> - <div class="topMenu"> - <el-form :inline="true" :model="formInline" class="demo-form-inline"> - <el-form-item> - <el-link - style="color: white" - @click="setLeftMenu" - :underline="false" - >鍥惧眰</el-link + <div + id="mapView" + class="MapBox" + v-loading="loading" + element-loading-spinner="el-icon-loading" + element-loading-background="rgba(0, 0, 0, 0.8)" + > + <div class="topMenu"> + <el-form :inline="true" :model="formInline" class="demo-form-inline"> + <el-form-item> + <el-link + style="color: white" + @click="showLeftMenu(1)" + :underline="false" + title="鍥惧眰鍒楄〃" + ><i class="el-icon-s-operation"></i + ></el-link> + </el-form-item> + <el-form-item label="姣斾緥灏�"> + <el-select v-model="value" placeholder="璇烽�夋嫨"> + <el-option + v-for="item in options" + :key="item.value" + :label="item.label" + :value="item.value" > - </el-form-item> - <el-form-item> - <el-link - style="color: white" - @click="changeMenulayer" - :underline="false" - ><i class="el-icon-menu"></i>搴曞浘</el-link - > - </el-form-item> - <el-form-item> - <el-select v-model="value" placeholder="璇烽�夋嫨"> - <el-option - v-for="item in options" - :key="item.value" - :label="item.label" - :value="item.value" - > - </el-option> - </el-select> - </el-form-item> - <el-form-item> - <el-link style="color: white" :underline="false" - ><i class="el-icon-rank"></i> - </el-link> - </el-form-item> - <el-form-item> - <el-link - style="color: white" - @click="showMapApply = true" - :underline="false" - >鍑哄浘鐢宠 - </el-link></el-form-item - > - <el-form-item> - <el-link - style="color: white" - @click="getShowMapList" - :underline="false" - >鍑哄浘鍒楄〃</el-link - ></el-form-item - > - <el-form-item label="鏃嬭浆"> - <el-input - v-model="formInline.role" - placeholder="璇疯緭鍏ュ唴瀹�" - ></el-input> - </el-form-item> - <el-form-item> - <el-button plain size="mini" @click="setMapRole">鏃嬭浆</el-button> - <el-button plain size="mini" @click="setMapAddDraw()" - >缁樺埗</el-button - > - <el-button plain size="mini" @click="setMapRemoveDraw()" - >娓呴櫎</el-button - > - <!-- <el-button plain size="mini" @click="setExportMapLayer" - >鍑哄浘</el-button - > --> - </el-form-item> - </el-form> - </div> - <div class="leftMeu" v-if="showleftMenu"> - <div class="topHeader"> - <div style="float: left">鍥惧眰</div> - <div style="float: right"> - <el-link @click="showleftMenu = false" :underline="false" - ><i class="el-icon-close"></i - ></el-link> - </div> - <div style="float: right; margin-right: 5%"> - <el-link :underline="false" @click="changeRowType" - ><i - :class=" - rowtype == true ? 'el-icon-arrow-down' : 'el-icon-arrow-up' - " - ></i - ></el-link> - </div> - </div> - <div class="topContent" v-if="rowtype"> - <el-tree - :data="data" - show-checkbox - node-key="id" - :props="defaultProps" - :default-expanded-keys="[1]" - @check-change="handleTreeNodeClick" - > - </el-tree> - </div> - </div> - <div class="mapApplay" v-if="showMapApply"> - <label>鍑哄浘鐢宠</label> - <el-divider /> - <el-form ref="form" :model="form" label-width="80px"> - <el-form-item label="鍑哄浘鍚嶇О"> - <el-input v-model="form.name"></el-input> - </el-form-item> - <el-form-item> - <el-table - ref="singleTable" - :data="tableData" - style="width: 100%" - height="200" - > - <el-table-column type="index" label="搴忓彿" width="50"> - </el-table-column> + </el-option> + </el-select> + </el-form-item> - <el-table-column property="name" label="鍥惧眰鍚嶇О"> - </el-table-column> - </el-table> - </el-form-item> + <el-form-item> + <el-link + style="color: white" + @click="setMapAddDraw()" + :underline="false" + ><i class="el-icon-edit-outline"></i>缁樺埗</el-link + > + </el-form-item> + <el-form-item> + <el-link + :disabled="layerExtent == null" + style="color: white" + @click="setMapRemoveDraw()" + :underline="false" + title="鍥惧眰鍒楄〃" + ><i class="el-icon-delete"></i>娓呴櫎</el-link + > + </el-form-item> - <el-form-item> - <el-button type="primary" @click="setMapApply">绔嬪嵆鍒涘缓</el-button> - <el-button @click="showMapApply = false">鍙栨秷</el-button> - </el-form-item> - </el-form> - </div> - <div class="mapApplay" v-if="showMapList"> - <div> - <label>鍑哄浘鍒楄〃</label> - <div style="float: right"> - <el-link @click="showMapList = false" :underline="false" - ><i class="el-icon-close"></i - ></el-link> - </div> - </div> - <el-divider /> - <el-table - ref="singleTable" - :data="exportable" - style="width: 100%" - height="200" - @selection-change="handleSelectionChange" + <el-form-item> + <el-link + style="color: white" + @click="showMapApply = true" + :underline="false" + :disabled="layerExtent == null" + >鍑哄浘鐢宠 + </el-link></el-form-item > - <el-table-column type="index" width="50" label="搴忓彿"> - </el-table-column> - <el-table-column property="name" label="鍚嶇О"> </el-table-column> - <el-table-column property="type" label="绫诲瀷"> </el-table-column> - <el-table-column - property="createTime" - :formatter="formatTime" - label="鏃ユ湡" + <el-form-item> + <el-link + style="color: white" + @click="getShowMapList" + :underline="false" + >鍑哄浘鍒楄〃</el-link + ></el-form-item + > + <el-form-item> + <el-link + style="color: white" + @click="changeMenulayer" + :underline="false" + v-show="isActive" + >褰卞儚</el-link > - </el-table-column> - <el-table-column property="descr" label="鎻忚堪"> </el-table-column> - <el-table-column label="鎿嶄綔" width="120"> - <template slot-scope="scope"> - <el-button - @click.native.prevent="downloadMap(scope.$index, scope.row)" - type="text" - size="small" - > - 涓嬭浇 - </el-button> - </template> - </el-table-column> - </el-table> - <div class="block"> - <el-pagination - @size-change="handleSizeChange" - @current-change="handleCurrentChange" - :current-page="listdata.pageIndex" - :page-sizes="[10, 20, 30, 40]" - :page-size="listdata.pageSize" - layout="total, sizes, prev, pager, next, jumper" - :total="count" + <el-link + style="color: white" + v-show="!isActive" + @click="changeMenulayer" + :underline="false" + >鐭㈤噺</el-link > - </el-pagination> + </el-form-item> + <el-form-item label="鏃嬭浆瑙掑害"> + <el-input + v-model="formInline.role" + placeholder="璇疯緭鍏ュ唴瀹�" + @change="setMapRole" + ></el-input> + </el-form-item> + </el-form> + </div> + <div + id="leftMenu" + class="left_Menu" + :class="{ left_main_show: !leftMenuOpen }" + > + <div class="menu_content"> + <div class="topHeader" v-show="lefMenuContent"> + <div>鍥惧眰鍒楄〃</div> + <div @click="showLeftMenu(2)"><i class="el-icon-s-fold"></i></div> + </div> + <el-divider></el-divider> + <div class="bottomContent"> + <div style="width: 100%" v-show="lefMenuContent"> + <el-tree + :data="data" + show-checkbox + node-key="id" + :props="defaultProps" + :default-expanded-keys="[1]" + @check-change="handleTreeNodeClick" + ref="tree" + > + </el-tree> + </div> </div> </div> - <div - @click="changeMenulayer" - class="center CenDiv" - :class="{ center1: centerFlag }" + </div> + + <div class="mapApplay" v-if="showMapApply"> + <label>鍑哄浘鐢宠</label> + <el-divider /> + <el-form ref="form" :model="form" label-width="80px"> + <el-form-item label="鍑哄浘鍚嶇О"> + <el-input v-model="form.name"></el-input> + </el-form-item> + <el-form-item> + <el-table + ref="singleTable" + :data="tableData" + style="width: 100%" + height="200" + > + <el-table-column type="index" label="搴忓彿" width="50"> + </el-table-column> + + <el-table-column property="name" label="鍥惧眰鍚嶇О"> + </el-table-column> + </el-table> + </el-form-item> + + <el-form-item> + <el-button type="primary" @click="setMapApply">绔嬪嵆鍒涘缓</el-button> + <el-button @click="showMapApply = false">鍙栨秷</el-button> + </el-form-item> + </el-form> + </div> + <div class="mapApplay" v-if="showMapList"> + <div> + <label>鍑哄浘鍒楄〃</label> + <div style="float: right"> + <el-link @click="showMapList = false" :underline="false" + ><i style="color: white" class="el-icon-close"></i + ></el-link> + </div> + </div> + <el-divider /> + <el-table + ref="singleTable" + :data="exportable" + style="width: 100%" + height="200" + @selection-change="handleSelectionChange" > - <div - id="cenBg" - v-bind:class="{ active: isActive, menuLayer: isMenuLayer }" - ></div> + <el-table-column type="index" width="50" label="搴忓彿"> + </el-table-column> + <el-table-column property="name" label="鍚嶇О"> </el-table-column> + <el-table-column property="type" label="绫诲瀷"> </el-table-column> + <el-table-column + property="createTime" + :formatter="formatTime" + label="鏃ユ湡" + > + </el-table-column> + <el-table-column property="descr" label="鎻忚堪"> </el-table-column> + <el-table-column label="鎿嶄綔" width="120"> + <template slot-scope="scope"> + <el-link + style="color: white" + @click.native.prevent="downloadMap(scope.$index, scope.row)" + :underline="false" + >涓嬭浇</el-link + > + </template> + </el-table-column> + </el-table> + <div class="pagination_box"> + <el-pagination + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + :current-page="listdata.pageIndex" + :page-sizes="[10, 20, 30, 40]" + :page-size="listdata.pageSize" + layout="total, sizes, prev, pager, next, jumper" + :total="count" + > + </el-pagination> </div> </div> @@ -245,6 +250,8 @@ export default { data() { return { + lefMenuContent: false, + leftMenuOpen: false, dialogVisible: false, showleftMenu: false, showMapApply: false, @@ -253,6 +260,7 @@ isActive: true, isMenuLayer: false, rowtype: true, + loading: false, form: {}, formInline: { role: '' }, layerform: {}, @@ -266,8 +274,26 @@ id: 1, label: '鍥惧眰', children: [ - { label: '绔欏満', value: '绔欏満' }, - { label: '绠¢亾涓績绾�', value: '绠¢亾涓績绾�' }, + { + id: '11', + label: '绔欏満', + value: '绔欏満', + layer: 'LF:m_sitepoint', + box: [ + 84.21228790283203, 30.412200927734375, 121.11393737792969, + 41.46569061279297, + ], + }, + { + id: '12', + label: '绠¢亾涓績绾�', + value: '绠¢亾涓績绾�', + layer: 'LF:m_pipeline', + box: [ + 25.245140075683594, 11.197434425354004, 121.11258697509766, + 49.65690231323242, + ], + }, ], }, ], @@ -290,8 +316,50 @@ }, mounted() { this.initMap(); + this.showMapLayer(); }, methods: { + showMapLayer() { + var val = this.data[0].children; + var std = []; + for (var i = val.length - 1; i >= 0; i--) { + var layer2 = new Image({ + name: val[i].label, + source: new ImageWMS({ + crossOrigin: 'anonymous', + url: geoServerURl, + + params: { + FORMAT: 'image/png', + VERSION: '1.1.1', + LAYERS: val[i].layer, + }, + }), + }); + mapView.addLayer(layer2); + std.push(val[i].id); + } + this.$refs.tree.setCheckedKeys(std); + }, + showLeftMenu(res) { + switch (res) { + case 1: + this.leftMenuOpen = !this.leftMenuOpen; + break; + case 2: + this.leftMenuOpen = false; + break; + } + if (this.leftMenuOpen == true) { + setTimeout(() => { + this.lefMenuContent = true; + }, 200); + } else { + setTimeout(() => { + this.lefMenuContent = false; + }, 1100); + } + }, formatTime(row, column) { let date = row[column.property]; if (date === undefined || date === null) { @@ -314,11 +382,12 @@ async getShowMapList() { this.showMapList = true; const data = await exportSelectByPage(this.listdata); - debugger; + this.exportable = data.result; this.count = data.count; }, + setExportMapLayer(res) { var token = '?token=' + getToken(); var data = { @@ -346,13 +415,16 @@ dataType: 'json', error: function () {}, success: (rs) => { + this.loading = false; var value = 'code = ' + rs.code + ', result = ' + rs.result; if ((rs.code = 200)) { this.$message({ message: value, type: 'success', }); + this.setMapRemoveDraw(); } else { + this.loading = false; this.$message.error(value); } }, @@ -373,6 +445,7 @@ if (this.draw != null) { mapView.removeLayer(this.vector); } + this.layerExtent = null; }, setMapAddDraw() { @@ -410,7 +483,11 @@ }); }, setMapRole() { + if (this.formInline.role == '') { + this.formInline.role = '0'; + } var value = parseFloat(this.formInline.role); + var role = (Math.PI / 180) * value; mapView.getView().setRotation(role); }, @@ -419,6 +496,7 @@ this.$message.error('璇烽�夋嫨鍑哄浘鑼冨洿'); return; } + this.loading = true; var val_data = []; for (var i in this.tableData) { val_data.push(this.tableData[i].name); @@ -436,41 +514,22 @@ }, handleClose() {}, handleTreeNodeClick(data, nodes) { - if (data.label == '鍥惧眰') return; - - if (nodes == true) { - this.arrList.push({ - name: data.label, - }); - - var wmsLayer = new Image({ - source: new ImageWMS({ - ratio: 1, - url: data.resource, - crossOrigin: 'anonymous', - params: { - VERSION: '1.3.0', - FORMAT: 'image/png', - LAYERS: '', - srs: 'EPSG:4326', - tiled: true, - styles: '', - }, - }), - }); - wmsLayer.name = data.label; - mapView.addLayer(wmsLayer); - } else { - this.arrList.some((item, i) => { - if (item.name === data.label) { - this.arrList.splice(i, 1); - } - }); - var len = mapView.getAllLayers(); - for (var i in len) { - var layer = mapView.getLayers().item(i); - if (layer.name == data.label) { - mapView.removeLayer(layer); + if (data.children != null) return; + var layers = mapView.getAllLayers(); + for (var i in layers) { + var layer = layers[i]; + if (layer.values_.name == data.label) { + layer.setVisible(nodes); //鏄剧ず鍥惧眰 + if (nodes == true) { + this.arrList.push({ + name: data.label, + }); + } else { + this.arrList.some((item, i) => { + if (item.name === data.label) { + this.arrList.splice(i, 1); + } + }); } } } @@ -551,141 +610,205 @@ }; </script> -<style lang="less"> -.exportmap { +<style lang="less" scoped> +.MapBox { width: 100%; height: 100%; - background: white; - margin: 0; - padding: 0; - overflow: hidden; position: absolute; - .mapView { + .topMenu { + z-index: 40; + position: absolute; + background: rgba(0, 0, 0, 0.5); width: 100%; - height: 100%; - .topMenu { - background: rgba(0, 0, 0, 0.5); - z-index: 40; - position: absolute; - left: 40%; - top: 3%; - padding-top: 1%; - padding-left: 1%; - padding-right: 1%; - } - .mapApplay { - width: 40%; - position: absolute; - background: rgba(0, 0, 0, 0.5); - z-index: 40; - top: 15%; - margin-left: 20%; - padding: 1%; - label { + height: 70px; + padding-left: 20px; + } + .left_Menu { + z-index: 40; + width: 300px; + background: rgba(0, 0, 0, 0.5); + height: calc(100% - 220px); + position: fixed; + left: 0; + bottom: 5px; + display: flex; + transition: width 2s; + .menu_content { + width: 100%; + height: 100%; + .topHeader { + margin: 10px; + display: flex; + justify-content: space-between; color: white; } + .bottomContent { + width: calc(100% - 40px); + height: calc(93% - 40px); + padding: 20px; + display: flex; + justify-content: space-between; + } + .CenDiv { + height: 40px; + width: 60px; + margin: 2%; + border-radius: 5px; + + align-self: flex-end; + } + .CenDiv:hover { + border: 1px solid #409eff; + } + .active { + height: 40px; + width: 60px; + background: url('../../assets/img/Layer/imgLayer2.png') no-repeat center; + position: absolute; + background-size: 100% 100%; + border-radius: 5px; + } + .menuLayer { + height: 40px; + width: 60px; + background: url('../../assets/img/Layer/imgLayer1.png') no-repeat center; + position: absolute; + background-size: 100% 100%; + border-radius: 5px; + } } - .mapList { - width: 40%; - position: absolute; - background: rgba(0, 0, 0, 0.5); - z-index: 40; - top: 15%; - margin-left: 20%; - padding: 1%; - } - .leftMeu { - position: absolute; - width: 13%; - z-index: 40; - top: 10%; - margin-left: 1%; - border-radius: 5px; - padding: 1%; - } - .topHeader { - padding: 5%; - background: rgba(0, 0, 0, 0.5); - width: 100%; - border-radius: 5px; + } + .left_main_show { + width: 0px; + z-index: 20; + } + .mapApplay { + width: 40%; + position: absolute; + background: rgba(0, 0, 0, 0.5); + z-index: 40; + top: 15%; + margin-left: 30%; + padding: 1%; + label { color: white; - height: 25px; - border: 1px solid gray; } - .topContent { - background: rgba(0, 0, 0, 0.5); - width: 100%; - padding: 5%; - border-radius: 5px; - border: 1px solid gray; + } + /deep/.el-form-item__label { + color: white; + line-height: 70px; + } + /deep/.el-form-item__content { + line-height: 70px; + } + /deep/.el-input__inner { + background-color: transparent !important ; + color: #fff; + border: 1px solid; + } + /deep/ .el-select .el-input__inner { + border-color: #fff !important; + } + /deep/ .el-divider--horizontal { + margin: 5px 0px; + } + /*淇敼table 琛ㄤ綋鐨勮儗鏅鑹插拰鏂囧瓧棰滆壊*/ + /deep/ .el-table { + background-color: transparent; + + th, + td { + background-color: transparent; + } + .el-table__expanded-cell { + background-color: transparent !important; } - .el-icon-close { - color: white; + // 琛ㄥご鑳屾櫙鑹� + th.el-table__cell { + background-color: #303030; + + color: #fff; } - .el-icon-arrow-down { - color: white; - } - .el-icon-arrow-up { - color: white; + tr > td { + background-color: #303030; + color: #fff; } - .contentHeader { - border-top: 1px solid gray; - padding: 3%; - width: 94%; + // hover鏁堟灉 + tr:hover > td { + background-color: rgba(255, 255, 255, 0.3) !important; + } + + tbody tr:hover { + background-color: rgba(255, 255, 255, 0.3) !important; + // text-align: center; + } + + // 婊氬姩鏉″楂� + .el-table__body-wrapper::-webkit-scrollbar { + width: 5px; + height: 5px; + } + + .el-table__body-wrapper::-webkit-scrollbar { + width: 5px; + /*婊氬姩鏉″搴�*/ + height: 5px; + /*婊氬姩鏉¢珮搴�*/ + } + /*瀹氫箟婊氬姩鏉¤建閬� 鍐呴槾褰�+鍦嗚*/ + .el-table__body-wrapper::-webkit-scrollbar-track { + box-shadow: 0px 1px 3px #216fe6 inset; + /*婊氬姩鏉$殑鑳屾櫙鍖哄煙鐨勫唴闃村奖*/ + border-radius: 10px; + } + + /*瀹氫箟婊戝潡 鍐呴槾褰�+鍦嗚*/ + .el-table__body-wrapper::-webkit-scrollbar-thumb { + box-shadow: 0px 1px 3px #216fe6 inset; + border-radius: 6px; + background-color: #216fe6; + } + } + .pagination_box { + margin-top: 20px; + /deep/.el-input__inner { + background-color: transparent !important; + border: 1px solid; color: white; } - .center { - margin-left: 1%; + /deep/.el-pagination__total { + color: white; } - .CenDiv { - position: absolute; - bottom: 3%; - height: 40px; - width: 60px; - z-index: 101; - display: flex; - flex-direction: column; - justify-content: space-between; - box-shadow: 3px 3px 6px #666; - border: 1px solid rgba(204, 204, 204, 0.76); - border-radius: 5px; - cursor: pointer; + /deep/.el-pagination__jump { + color: white; } - .center1 { - margin-left: 1%; + /deep/.el-pager li.active { + color: #409eff; } - .right { - position: absolute; - top: 50px; - right: 0; - width: 20%; - height: calc(100% - 50px); - - display: flex; - flex-direction: column; - justify-content: space-between; + /deep/.el-pager li { + color: white; + background: transparent; } - .CenDiv:hover { - border: 1px solid #409eff; + /deep/.el-pager li { + color: white; } - // .active { - // width: 100%; - // height: 100%; - // background: url('../../assets/img/Layer/imgLayer2.png') no-repeat center; - // position: absolute; - // background-size: 100% 100%; - // border-radius: 5px; - // } - // .menuLayer { - // width: 100%; - // height: 100%; - // background: url('../../assets/img/Layer/imgLayer1.png') no-repeat center; - // position: absolute; - // background-size: 100% 100%; - // border-radius: 5px; - // } + /deep/.btn-prev { + background: transparent; + } + /deep/.btn-next { + background: transparent; + } + /deep/.btn-next i { + color: white; + } + /deep/.btn-prev i { + color: white; + } + } + /deep/.el-loading-spinner i { + color: #409eff !important; } } </style> -- Gitblit v1.9.3