ソースを参照

晓玉测试问题统一提交

wanger 2 日 前
コミット
73c2c40cc5

+ 17 - 55
manager/src/views/system/zyml/index.vue

@@ -17,11 +17,7 @@
         />
       </el-form-item>
       <el-form-item label="服务类型" prop="type">
-        <el-select
-          v-model="queryParams.type"
-          placeholder="请选择服务类型"
-          clearable
-        >
+        <el-select v-model="queryParams.type" placeholder="请选择服务类型" clearable>
           <el-option
             v-for="dict in dict.type.servicetype"
             :key="dict.value"
@@ -31,11 +27,7 @@
         </el-select>
       </el-form-item>
       <el-form-item label="状态" prop="state">
-        <el-select
-          v-model="queryParams.state"
-          placeholder="请选择状态"
-          clearable
-        >
+        <el-select v-model="queryParams.state" placeholder="请选择状态" clearable>
           <el-option
             v-for="dict in dict.type.usestate"
             :key="dict.value"
@@ -53,16 +45,10 @@
         />
       </el-form-item>
       <el-form-item>
-        <el-button
-          type="primary"
-          icon="el-icon-search"
-          size="mini"
-          @click="handleQuery"
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery"
           >搜索</el-button
         >
-        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery"
-          >重置</el-button
-        >
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
       </el-form-item>
     </el-form>
 
@@ -88,10 +74,7 @@
           >展开/折叠</el-button
         >
       </el-col>
-      <right-toolbar
-        :showSearch.sync="showSearch"
-        @queryTable="getList"
-      ></right-toolbar>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
     </el-row>
 
     <el-table
@@ -110,10 +93,7 @@
       </el-table-column>
       <el-table-column label="目录类型" align="center" prop="parent">
         <template slot-scope="scope">
-          <dict-tag
-            :options="dict.type.catalogtype"
-            :value="scope.row.parent"
-          />
+          <dict-tag :options="dict.type.catalogtype" :value="scope.row.parent" />
         </template>
       </el-table-column>
       <el-table-column label="状态" align="center" prop="state">
@@ -122,20 +102,13 @@
         </template>
       </el-table-column>
       <el-table-column label="数据年份" align="center" prop="year" />
-      <el-table-column
-        label="操作"
-        align="center"
-        class-name="small-padding fixed-width"
-      >
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
         <template slot-scope="scope">
           <el-button
             size="mini"
             type="text"
             icon="el-icon-s-cooperation"
-            v-if="
-              scope.row.parent == 0 &&
-              ['WMTS', 'WMS'].indexOf(scope.row.type) > -1
-            "
+            v-if="scope.row.parent == 0 && ['WMTS', 'WMS'].indexOf(scope.row.type) > -1"
             @click="handleDict(scope.row)"
             v-hasPermi="['system:zyml:edit']"
             >字典维护</el-button
@@ -351,8 +324,8 @@
         <el-form-item class="form_item" label="数据年份" prop="year">
           <el-input v-model="form.year" placeholder="请输入数据年份" />
         </el-form-item>
-        <el-form-item class="form_item" label="过滤条件" prop="gltj">
-          <el-input v-model="form.gltj" placeholder="请输入过滤条件" />
+        <el-form-item class="form_item" label="数据来源" prop="gltj">
+          <el-input v-model="form.gltj" placeholder="请输入数据来源" />
         </el-form-item>
         <!-- <el-form-item class="form_item" label="数据来源" prop="sjly">
           <el-input v-model="form.sjly" placeholder="请输入数据来源" />
@@ -415,11 +388,7 @@
             :cell-class-name="tableCellClassName"
             border
           >
-            <el-table-column
-              align="center"
-              type="index"
-              label="序号"
-            ></el-table-column>
+            <el-table-column align="center" type="index" label="序号"></el-table-column>
             <el-table-column align="center" label="字段名称" prop="fieldname">
             </el-table-column>
             <el-table-column prop="sort" label="字段别名" align="center">
@@ -455,22 +424,14 @@
 </template>
 
 <script>
-import {
-  listZyml,
-  getZyml,
-  delZyml,
-  addZyml,
-  updateZyml,
-} from "@/api/system/zyml";
+import { listZyml, getZyml, delZyml, addZyml, updateZyml } from "@/api/system/zyml";
 import Treeselect from "@riophae/vue-treeselect";
 import "@riophae/vue-treeselect/dist/vue-treeselect.css";
 import request from "@/utils/requestServer";
 import { getToken } from "@/utils/auth";
 import { getXzq } from "@/api/system/user";
 import { GetFieldValue, UpdateFieldValue } from "@/api/system/yztfield";
-
 export default {
-  name: "Zyml",
   dicts: [
     "servertype",
     "trueorfalse",
@@ -480,6 +441,7 @@ export default {
     "datatype",
     "dblayers",
   ],
+  name: "Zyml",
   components: {
     Treeselect,
   },
@@ -514,10 +476,9 @@ export default {
       rules: {
         pbsm: [{ required: true, message: "父节点不能为空", trigger: "blur" }],
         name: [{ required: true, message: "名称不能为空", trigger: "blur" }],
-        parent: [
-          { required: true, message: "目录类型不能为空", trigger: "change" },
-        ],
+        parent: [{ required: true, message: "目录类型不能为空", trigger: "change" }],
         state: [{ required: true, message: "状态不能为空", trigger: "change" }],
+        gltj: [{ required: true, message: "数据来源不能为空", trigger: "blur" }],
       },
       oldServerUrl: "",
       // 上传附件
@@ -622,7 +583,7 @@ export default {
         sftj: "",
         epsg: "",
         year: "",
-        gltj: "",
+        gltj: "一张图系统",
         sjly: "",
         legend: "",
         ywlx: "",
@@ -958,6 +919,7 @@ export default {
   },
 };
 </script>
+
 <style scoped>
 .form_item {
   width: calc(50% - 20px);

+ 1 - 1
manager/vue.config.js

@@ -35,7 +35,7 @@ module.exports = {
     proxy: {
       // detail: https://cli.vuejs.org/config/#devserver-proxy
       [process.env.VUE_APP_BASE_API]: {
-        target: `http://192.168.100.252:8080`,
+        target: `http://192.168.60.20:8080`,
         changeOrigin: true,
         pathRewrite: {
           ["^" + process.env.VUE_APP_BASE_API]: "",

+ 2 - 2
publicservice/.env.production

@@ -6,9 +6,9 @@ VITE_APP_ENV = 'production'
 #启动端口
 port = '5000'
 # 国土空间规划“一张图”实施监督信息系统/生产环境
-VITE_APP_BASE_API = 'http://192.168.100.252:8080'
+# VITE_APP_BASE_API = 'http://192.168.100.252:8080'
 #通辽部署环境
-#VITE_APP_BASE_API = 'http://10.255.133.176:8080'
+VITE_APP_BASE_API = 'http://10.255.133.176:8080'
 
 # 是否在打包时开启压缩,支持 gzip 和 brotli
 #VITE_BUILD_COMPRESS = gzip

BIN
publicservice/publicservice.rar


+ 1 - 1
publicservice/src/router/index.js

@@ -132,7 +132,7 @@ export const constantRoutes = [
         name: "Uploadxw",
         component: () => import("@/views/shfw/htgl/uploadxw/index.vue"),
       },
-      // 新增公开公示
+      // 新增信息公示
       {
         path: "/uploadgkgs",
         name: "Uploadgkgs",

+ 2 - 2
publicservice/src/views/shfw/components/Header.vue

@@ -108,10 +108,10 @@ export default {
         { id: 0, title: "首页", path: "ShfwHome", icon: "icon-shouye" },
         { id: 1, title: "新闻动态", path: "Xinwen", icon: "icon-fuzhi" },
         { id: 2, title: "规划一张图", path: "Ghyzt", icon: "icon-shangpin" },
-        { id: 3, title: "公开公示", path: "Gkgs", icon: "icon-tixing" },
+        { id: 3, title: "信息公示", path: "Gkgs", icon: "icon-tixing" },
         // { id: 3, title: "意见征询", path: "Yjzx", icon: "icon-xiaoxi" },
         { id: 4, title: "规划成果", path: "Ghcg", icon: "icon-xiaoxi" },
-        { id: 5, title: "公众监督", path: "Gzjd", icon: "icon-bianji" },
+        { id: 5, title: "留言板", path: "Gzjd", icon: "icon-bianji" },
         { id: 6, title: "问卷调查", path: "Wjdc", icon: "icon-piaoquan" },
         // { id: 7, title: "后台管理", path: "Htxw", icon: "icon-piaoquan" },
       ],

+ 1 - 1
publicservice/src/views/shfw/gkgs/xq.vue

@@ -10,7 +10,7 @@
   <div class="width-1100">
     <a-breadcrumb style="line-height: 40px">
       <a-breadcrumb-item><router-link to="/">首页</router-link></a-breadcrumb-item>
-      <a-breadcrumb-item><router-link to="/gkgs">公开公示</router-link></a-breadcrumb-item>
+      <a-breadcrumb-item><router-link to="/gkgs">信息公示</router-link></a-breadcrumb-item>
       <a-breadcrumb-item>{{ data.title }}</a-breadcrumb-item>
     </a-breadcrumb>
     <div class="n-content">

+ 1 - 1
publicservice/src/views/shfw/gzjd/xq.vue

@@ -2,7 +2,7 @@
   <div>
     <a-breadcrumb style="margin-top: 10px; margin-bottom: 10px">
       <a-breadcrumb-item><router-link to="/">首页</router-link></a-breadcrumb-item>
-      <a-breadcrumb-item><router-link to="/gzjd">公众监督</router-link></a-breadcrumb-item>
+      <a-breadcrumb-item><router-link to="/gzjd">留言板</router-link></a-breadcrumb-item>
       <a-breadcrumb-item>{{ data.title }}</a-breadcrumb-item>
     </a-breadcrumb>
     <div

+ 1 - 1
publicservice/src/views/shfw/home/Index.vue

@@ -149,7 +149,7 @@
             padding: 0 20px;
           ">
           <div class="max-width flex-box justify-between padding-top-10">
-            <h3><strong>公众监督</strong></h3>
+            <h3><strong>留言板</strong></h3>
             <div>
               <router-link
                 to="/gzjd"

+ 14 - 10
website/.env.production

@@ -8,21 +8,25 @@ port = '5000'
 # 国土空间规划“一张图”实施监督信息系统/生产环境
 #VITE_APP_BASE_API = 'http://192.168.60.40:8080'
 #VITE_ARC_SERVER_API = 'http://192.168.60.20:6080'
-#通辽部署环境 176
-#VITE_APP_BASE_API = 'http://192.168.60.5:8080'
-#VITE_ARC_SERVER_API = 'http://192.168.60.20:6080'
 
-#通辽部署环境 174
-#VITE_APP_BASE_API = 'http://10.255.133.176:8080'
-#VITE_ARC_SERVER_API = 'http://10.255.133.176:6080'
+#通辽部署环境 
+VITE_APP_BASE_API = 'http://10.255.133.176:8080'
+VITE_ARC_SERVER_API = 'http://10.255.133.176:6080'
 
 #乌兰察布
-#VITE_APP_BASE_API = 'http://10.255.137.105:8080'
-#VITE_ARC_SERVER_API = 'http://10.255.137.105:6080'
+# VITE_APP_BASE_API = 'http://10.255.137.105:8080'
+# VITE_ARC_SERVER_API = 'http://10.255.137.105:6080'
+
+# VITE_APP_BASE_API = 'http://127.0.0.1:18080'
+# VITE_ARC_SERVER_API = 'http://127.0.0.1:6080'
 
 #鄂尔多斯
-VITE_APP_BASE_API = 'http://10.255.134.200:8080'
-VITE_ARC_SERVER_API = 'http://10.255.134.204:6080'
+# VITE_APP_BASE_API = 'http://10.255.134.200:8080'
+# VITE_ARC_SERVER_API = 'http://10.255.134.204:6080'
+
+#鄂尔多斯政务外网
+#VITE_APP_BASE_API = 'http://10.22.55.14:8081'
+#VITE_ARC_SERVER_API = 'http://10.22.55.14:5007'
 
 #乌拉特前旗
 #VITE_APP_BASE_API = 'http://10.254.131.101:8080'

+ 73 - 73
website/public/js/config.js

@@ -3,12 +3,12 @@ let BaseMap = {
     baiduVec: "http://online3.map.bdimg.com/onlinelabel/?qt=tile&x={0}&y={1}&z={2}&styles=pl&udt=20151021&scaler=1&p=1",
     baiduImg: "http://shangetu0.map.bdimg.com/it/u=x={0};y={1};z={2};v=009;type=sate&fm=46&udt=20150504&app=webearth2&v=009&udt=20150601",
     // 天地图
-    tdtImg: "http://t3.tianditu.gov.cn/DataServer?T=img_w&x={x}&y={y}&l={z}&tk=7ae072fdee55b245b267992f3e66fd0a",
-    //tdtImgAnn: "http://t0.tianditu.gov.cn/DataServer?T=cia_w&x={x}&y={y}&l={z}&tk=7ae072fdee55b245b267992f3e66fd0a",
+    tdtImg: "http://t3.tianditu.gov.cn/DataServer?T=img_w&x={x}&y={y}&l={z}&tk=e7575892441098ae6813a8944ba5b2ba",
+    //tdtImgAnn: "http://t0.tianditu.gov.cn/DataServer?T=cia_w&x={x}&y={y}&l={z}&tk=e7575892441098ae6813a8944ba5b2ba",
     //行政区底图
     tdtImgAnn: "/arcgis/rest/services/kjgh/XZQH_QX/MapServer/tile/{z}/{y}/{x}",
-    tdtVec: "http://t2.tianditu.gov.cn/DataServer?T=vec_w&x={x}&y={y}&l={z}&tk=7ae072fdee55b245b267992f3e66fd0a",
-    tdtVecAnn: "http://t2.tianditu.gov.cn/DataServer?T=cva_w&x={x}&y={y}&l={z}&tk=7ae072fdee55b245b267992f3e66fd0a",
+    tdtVec: "http://t2.tianditu.gov.cn/DataServer?T=vec_w&x={x}&y={y}&l={z}&tk=e7575892441098ae6813a8944ba5b2ba",
+    tdtVecAnn: "http://t2.tianditu.gov.cn/DataServer?T=cva_w&x={x}&y={y}&l={z}&tk=e7575892441098ae6813a8944ba5b2ba",
     arcImg: `https://106.14.159.47:6443/`,
     cesiumDSM: "http://192.168.100.111:8001/3196C7C60C074D2A8BA9B07241A4D298/terrain/DSM/map/file/wmts/bil/DSM_ORDOS_/",
     jxMap: "",
@@ -39,7 +39,7 @@ let GzfwUrl = "/shfw/index";
 /**行政区代码 */
 let XZQ_DM = "150500";
 /**行政区名称 */
-let XZQ_MC = "";
+let XZQ_MC = "通辽市";
 /**默认地图中心 */
 let MapCenter = {
     point: [109.78, 39.60],
@@ -72,49 +72,49 @@ let XZQ_DATA = [231, 200, 150, 80, 150, 110, 130, 153];
 
 /** 辅助实施 辅助基本农田分析 注:label值固定不能改且不能重复,修改图层显示名称可以改name */
 let TckzData = [{
-        id: "fa65c270d6e142e5b5630238e5aec46c",
-        name: "生态保护红线",
-        label: "生态保护红线",
-        checked: false,
-        layer: null,
-    },
-    {
-        id: "ea0f51b5d3194f059c6e2a05706aa923",
-        name: "城镇开发边界",
-        label: "城镇开发边界",
-        checked: false,
-        layer: null,
-    },
-    {
-        id: "65919db0a4974ea9be4cfa3e2e792ed9",
-        name: "永久基本农田",
-        label: "永久基本农田",
-        checked: false,
-        layer: null,
-    },
-    {
-        id: "87973413b90a41348af3cd41f7ce43b9",
-        name: "现状用地用海",
-        label: "现状用地用海",
-        checked: false,
-        layer: null,
-    },
-    {
-        id: "5376a8a1657149ba99e93665ef6b9c7f",
-        name: "坡度图",
-        label: "坡度图",
-        checked: false,
-        layer: null,
-    },
+    id: "fa65c270d6e142e5b5630238e5aec46c",
+    name: "生态保护红线",
+    label: "生态保护红线",
+    checked: false,
+    layer: null,
+},
+{
+    id: "ea0f51b5d3194f059c6e2a05706aa923",
+    name: "城镇开发边界",
+    label: "城镇开发边界",
+    checked: false,
+    layer: null,
+},
+{
+    id: "65919db0a4974ea9be4cfa3e2e792ed9",
+    name: "永久基本农田",
+    label: "永久基本农田",
+    checked: false,
+    layer: null,
+},
+{
+    id: "87973413b90a41348af3cd41f7ce43b9",
+    name: "现状用地用海",
+    label: "现状用地用海",
+    checked: false,
+    layer: null,
+},
+{
+    id: "5376a8a1657149ba99e93665ef6b9c7f",
+    name: "坡度图",
+    label: "坡度图",
+    checked: false,
+    layer: null,
+},
 ];
 
 /** 字典 */
 let SYS_DICT = {
     Datas: {},
-    GetDict: function(type) {
+    GetDict: function (type) {
         return this.Datas[type];
     },
-    GetLabel: function(type, key) {
+    GetLabel: function (type, key) {
         var dict = this.Datas[type];
         if (!dict) return key;
         else {
@@ -161,40 +161,40 @@ let SYS_LAYERS = {
 
 // 切换用户--单点登录
 let SYS_USERS = [{
-        title: "科尔沁区",
-        username: "KEQ1"
-    }, {
-        title: "科尔沁左翼中旗",
-        username: "KZZQ1"
-    }, {
-        title: "科尔沁左翼后旗",
-        username: "KZHQ1"
-    }, {
-        title: "开鲁县",
-        username: "KL1"
-    }, {
-        title: "库伦旗",
-        username: "KUL1"
-    }, {
-        title: "奈曼旗",
-        username: "NM1"
-    }, {
-        title: "扎鲁特旗",
-        username: "ZLT1"
-    }, {
-        title: "霍林郭勒市",
-        username: "HLGL1"
-    }]
-    // 辅助实施 在建设项目管理
+    title: "科尔沁区",
+    username: "KEQ1"
+}, {
+    title: "科尔沁左翼中旗",
+    username: "KZZQ1"
+}, {
+    title: "科尔沁左翼后旗",
+    username: "KZHQ1"
+}, {
+    title: "开鲁县",
+    username: "KL1"
+}, {
+    title: "库伦旗",
+    username: "KUL1"
+}, {
+    title: "奈曼旗",
+    username: "NM1"
+}, {
+    title: "扎鲁特旗",
+    username: "ZLT1"
+}, {
+    title: "霍林郭勒市",
+    username: "HLGL1"
+}]
+// 辅助实施 在建设项目管理
 let ZJSXMGLData = {
-        // 已批未建图层bsm
-        YPWJData: {
-            bsm: "78f25f473904425697d8879501a469aa"
-        },
-    }
-    // 资源目录-国土空间规划数据节点bsm ——规划成果浏览
+    // 已批未建图层bsm
+    YPWJData: {
+        bsm: "78f25f473904425697d8879501a469aa"
+    },
+}
+// 资源目录-国土空间规划数据节点bsm ——规划成果浏览
 let GHCG_BSM = '201'
-    // 一张图地图经济/人口数据应用统计 经济/人口图层
+// 一张图地图经济/人口数据应用统计 经济/人口图层
 let JJ_BSM = "65919db0a4974ea9be4cfa3e2e792ed9"; // GDP经济数据图层bsm
 let RK_BSM = ""; // 人口数据图层bsm
 let JJ_XZQ = "SW_XZQH"; // 经济图层行政区代码属性字段名称

+ 76 - 70
website/src/components/ghfxpj/kfbhfxpg/pjcgCzjs.vue

@@ -2,17 +2,24 @@
   <div class="ctfxpjcg max-box overflow-hidden flex-box column posi-rel">
     <el-scrollbar class="max-width height-100-55 padding-15 box-sizing">
       <div class="block-title margin-top-5">城镇建设冲突分析说明</div>
-      <div class="fx-info">
-          城镇建设不适宜区现状城镇用地的空间分布和规模
-      </div>
+      <div class="fx-info">城镇建设不适宜区现状城镇用地的空间分布和规模</div>
       <div class="block-title margin-top-5">相关分析因子</div>
       <div class="fx-info">
-          <div class="fx-yz-item" :class="yz=='现状城镇用地'?'active':''" @click="onChangeYz('现状城镇用地')">现状城镇用地</div>
+        <div
+          class="fx-yz-item"
+          :class="yz == '现状城镇用地' ? 'active' : ''"
+          @click="onChangeYz('现状城镇用地')"
+        >
+          现状城镇用地
+        </div>
       </div>
       <div class="block-title margin-top-5">城镇建设冲突分析结果</div>
       <div class="fx-info">
-          <div>{{yz}}的占有规模为:</div>
-          <div><span class="zygm">{{gm}}</span>平方公里</div>
+        <div>{{ yz }}的占有规模为:</div>
+        <div>
+          <span class="zygm">{{ gm }}</span
+          >平方公里
+        </div>
       </div>
     </el-scrollbar>
   </div>
@@ -22,53 +29,38 @@
 import { reactive, toRefs } from "@vue/reactivity";
 import XLSX from "xlsx";
 import arcMap from "@/utils/arcMap.js";
-import { watch, onMounted} from "@vue/runtime-core";
+import { watch, onMounted } from "@vue/runtime-core";
 import { useStore } from "vuex";
 export default {
-  props: {
-    zytype: {
-      type: String,
-    },
-    activeTabs: {
-      type: String,
-    },
-    act_pjcg: {
-      type: Object,
-    },
-    act_xzq:{
-      type: String,
-    }
-  },
   setup(prop, context) {
-    const store = useStore()
+    const store = useStore();
     const parent = { ...context };
     const pjcg = reactive({
-      yz:"现状城镇用地",
+      yz: "现状城镇用地",
       gm: 344.82,
       backimg: "",
-      layer:null,
+      layer: null,
       list: [
         {
-          title: "2021年全市农业生产承载规模评价",
+          title: "农业生产承载规模评价",
           xzq: XZQ_DM,
-        }
+        },
       ],
-      onChangeYz(yz){
+      onChangeYz(yz) {
         pjcg.yz = yz;
-        if(pjcg.layer)
-          arcMap.removeLayer(pjcg.layer)
-        if(yz == '现状城镇用地'){
+        if (pjcg.layer) arcMap.removeLayer(pjcg.layer);
+        if (yz == "现状城镇用地") {
           pjcg.gm = 107.79;
-          const layConfig = {
-              id: "FXPJ_KJCT_0",
-              type: "WMS",
-              server: "Arcgis",
-              show: "5",
-              url: `${SYS_LAYERS.FXPJ_KJCT}`,
-          };
-          pjcg.layer = arcMap.WMS(layConfig,true);
+          const layConfig = {
+            id: "FXPJ_KJCT_0",
+            type: "WMS",
+            server: "Arcgis",
+            show: "5",
+            url: `${SYS_LAYERS.FXPJ_KJCT}`,
+          };
+          pjcg.layer = arcMap.WMS(layConfig, true);
         }
-        arcMap.addLayer(pjcg.layer)
+        arcMap.addLayer(pjcg.layer);
       },
       getData(item) {
         parent.emit("update:act_pjcg", {
@@ -80,28 +72,42 @@ export default {
     watch(
       () => prop.activeTabs,
       (newValue, oldValue) => {
-        console.log(newValue)
-        if(newValue == "pjcg" && prop.zytype == "pjcgCzjs"){
+        console.log(newValue);
+        if (newValue == "pjcg" && prop.zytype == "pjcgCzjs") {
           pjcg.onChangeYz("现状城镇用地");
-        }else{
-          if(pjcg.layer)
-            arcMap.removeLayer(pjcg.layer)
+        } else {
+          if (pjcg.layer) arcMap.removeLayer(pjcg.layer);
         }
       },
       () => prop.act_xzq,
       (newValue, oldValue) => {
         if (!newValue) {
-          pjcg.list.xzq = store.state.user.user.dept.district
-        }else{
-          pjcg.list.xzq = newValue
+          pjcg.list.xzq = store.state.user.user.dept.district;
+        } else {
+          pjcg.list.xzq = newValue;
         }
-      },
+      }
     );
     onMounted(() => {
-      console.log("CCCCCCCCCCC")
+      console.log("CCCCCCCCCCC");
     });
     return { ...toRefs(pjcg) };
   },
+
+  props: {
+    zytype: {
+      type: String,
+    },
+    activeTabs: {
+      type: String,
+    },
+    act_pjcg: {
+      type: Object,
+    },
+    act_xzq: {
+      type: String,
+    },
+  },
 };
 </script>
 
@@ -111,29 +117,29 @@ export default {
     opacity: 0.6;
   }
   overflow-x: hidden;
-  .fx-info{
-    padding: 15px 0 15px 10px ; 
-    word-wrap:break-word;
-    word-break:normal; 
-    white-space:initial;
+  .fx-info {
+    padding: 15px 0 15px 10px;
+    word-wrap: break-word;
+    word-break: normal;
+    white-space: initial;
     line-height: 30px;
   }
-  .fx-yz-item{
-      display: inline-block;
-      padding: 3px 13px;
-      background-color: #d2d2d2;
-      margin-right: 10px;
-      border-radius: 50px;
-      cursor: pointer;
-      &.active{
-        background-color: rgba(0,120,215,0.15);
-        color:rgba(0,120,215,1);
-      }
+  .fx-yz-item {
+    display: inline-block;
+    padding: 3px 13px;
+    background-color: #d2d2d2;
+    margin-right: 10px;
+    border-radius: 50px;
+    cursor: pointer;
+    &.active {
+      background-color: rgba(0, 120, 215, 0.15);
+      color: rgba(0, 120, 215, 1);
+    }
   }
-  .zygm{
-      font-size: 25px;
-      font-weight: bold;
-      color:rgba(0,120,215,1);
+  .zygm {
+    font-size: 25px;
+    font-weight: bold;
+    color: rgba(0, 120, 215, 1);
   }
 }
-</style>
+</style>

+ 1 - 1
website/src/components/ghfxpj/kfbhfxpg/pjcgNysc.vue

@@ -50,7 +50,7 @@ export default {
       layer:null,
       list: [
         {
-          title: "2021年全市农业生产承载规模评价",
+          title: "农业生产承载规模评价",
           xzq: XZQ_DM,
         }
       ],

+ 1 - 1
website/src/components/ghfxpj/kfbhfxpg/pjcgStbh.vue

@@ -51,7 +51,7 @@ export default {
       layer:null,
       list: [
         {
-          title: "2021年全市农业生产承载规模评价",
+          title: "农业生产承载规模评价",
           xzq: XZQ_DM,
         }
       ],

+ 1 - 1
website/src/components/ghfxpj/zycznlpj/czjsczgm/pjcg.vue

@@ -82,7 +82,7 @@ export default {
       backimg: "",
       list: [
         {
-          title: "2021年全市城镇建设承载规模评价",
+          title: "城镇建设承载规模评价",
           // xzq: XZQ_DM,
           xzq: prop.act_xzq
         },

+ 1 - 1
website/src/components/ghfxpj/zycznlpj/nyscczgm/pjcg.vue

@@ -76,7 +76,7 @@ export default {
       backimg: "",
       list: [
         {
-          title: "2021年全市农业生产承载规模评价",
+          title: "农业生产承载规模评价",
           // xzq: XZQ_DM,
           xzq: prop.act_xzq
         },

+ 11 - 15
website/src/components/ghyzt/zttj/tdlyxz.vue

@@ -1,11 +1,10 @@
 <template>
   <div class="stdlyxz max-box overflow-hidden nowrap">
-    <div
-      class="header flex-box align-center height-50 padding-right-20 padding-left-20"
-    >
+    <div class="header flex-box align-center height-50 padding-right-20 padding-left-20">
       <div class="header-select" v-if="tabbar_active">
         <span class="margin-right-5">范围: </span>
-        <el-select :disabled="$store.state.user.isQiXian"
+        <el-select
+          :disabled="$store.state.user.isQiXian"
           v-model="xzq"
           name="0"
           id=""
@@ -21,7 +20,7 @@
         </el-select>
       </div>
       <!--  -->
-      <div class="timer flex-box align-center">
+      <div class="timer flex-box align-center" style="display: none">
         <span class="margin-right-5">年份:</span>
         <el-scrollbar id="timer-layout" ref="aaaa">
           <div class="timer-layout flex-box align-center select-none">
@@ -84,10 +83,6 @@ const cubic = (value) => Math.pow(value, 3);
 const easeInOutCubic = (value) =>
   value < 0.5 ? cubic(value * 2) / 2 : 1 - cubic((1 - value) * 2) / 2;
 export default {
-  components: {
-    Tubiao,
-    Mapview,
-  },
   setup() {
     const store = useStore();
     const tdlyxz = reactive({
@@ -203,9 +198,7 @@ export default {
       },
       tableData: {},
       selectTime(item) {
-        tdlyxz.timer_name == item
-          ? (tdlyxz.timer_name = "")
-          : (tdlyxz.timer_name = item);
+        tdlyxz.timer_name == item ? (tdlyxz.timer_name = "") : (tdlyxz.timer_name = item);
       },
 
       setOption(data) {
@@ -259,9 +252,7 @@ export default {
         tdlyxz.zhuoption.xAxis[0].data = [];
         data.forEach((item) => {
           tdlyxz.zhuoption.xAxis[0].data.push(item.dlmc);
-          tdlyxz.zhuoption.series[0].data.push(
-            (item.tbmj / 1000000).toFixed(2),
-          );
+          tdlyxz.zhuoption.series[0].data.push((item.tbmj / 1000000).toFixed(2));
         });
         console.log(data);
       },
@@ -291,6 +282,11 @@ export default {
     });
     return { ...toRefs(tdlyxz) };
   },
+
+  components: {
+    Tubiao,
+    Mapview,
+  },
 };
 </script>
 

+ 15 - 25
website/src/components/ghyzt/zttj/tdlyztgh.vue

@@ -1,17 +1,10 @@
 <template>
-  <div class="stdlyxz max-box overflow-hidden  nowrap">
-    <div
-      class="
-        header
-        flex-box
-        align-center
-        height-50
-        padding-right-20 padding-left-20
-      "
-    >
+  <div class="stdlyxz max-box overflow-hidden nowrap">
+    <div class="header flex-box align-center height-50 padding-right-20 padding-left-20">
       <div class="header-select" v-if="tabbar_active">
         <span class="margin-right-5">范围: </span>
-        <el-select :disabled="$store.state.user.isQiXian"
+        <el-select
+          :disabled="$store.state.user.isQiXian"
           v-model="xzq"
           name="0"
           id=""
@@ -91,10 +84,6 @@ const cubic = (value) => Math.pow(value, 3);
 const easeInOutCubic = (value) =>
   value < 0.5 ? cubic(value * 2) / 2 : 1 - cubic((1 - value) * 2) / 2;
 export default {
-  components: {
-    Tubiao,
-    Mapview,
-  },
   setup() {
     const store = useStore();
     const tdlyxz = reactive({
@@ -102,7 +91,7 @@ export default {
       xzq: "",
       timer_name: "",
       gapX: "",
-      xzqList:[],
+      xzqList: [],
       tabbar_active: true,
       aaaa: ref(null),
       loading: false,
@@ -195,9 +184,7 @@ export default {
       },
       tableData: {},
       selectTime(item) {
-        tdlyxz.timer_name == item
-          ? (tdlyxz.timer_name = "")
-          : (tdlyxz.timer_name = item);
+        tdlyxz.timer_name == item ? (tdlyxz.timer_name = "") : (tdlyxz.timer_name = item);
       },
 
       setOption(data) {
@@ -251,9 +238,7 @@ export default {
         tdlyxz.zhuoption.xAxis[0].data = [];
         data.forEach((item) => {
           tdlyxz.zhuoption.xAxis[0].data.push(item.dlmc);
-          tdlyxz.zhuoption.series[0].data.push(
-            (item.tbmj / 1000000).toFixed(2)
-          );
+          tdlyxz.zhuoption.series[0].data.push((item.tbmj / 1000000).toFixed(2));
         });
         console.log(data);
       },
@@ -267,7 +252,7 @@ export default {
           }
         });
       },
-      loadXZQ(){
+      loadXZQ() {
         GetXzqList({ city: true }).then((res) => {
           if (res.success) {
             tdlyxz.tdlyxz = res.data;
@@ -276,13 +261,18 @@ export default {
             tdlyxz.getEchartsData();
           }
         });
-      }
+      },
     });
     onMounted(() => {
       tdlyxz.loadXZQ();
     });
     return { ...toRefs(tdlyxz) };
   },
+
+  components: {
+    Tubiao,
+    Mapview,
+  },
 };
 </script>
 
@@ -341,4 +331,4 @@ export default {
     height: calc(100% - 50px);
   }
 }
-</style>
+</style>

+ 45 - 36
website/src/components/ghyzt/zyll/zymu.vue

@@ -20,18 +20,22 @@
       >
         <template #default="{ node, data }">
           <span class="custom-tree-node max-width">
-            <el-tooltip v-if="data.parent=='0'" class="item" effect="dark" placement="right">
-              
-              <template #content>入库人:{{ data.createperson }}
-                <br/>入库时间:{{ data.datetime }}</template>
-              <span :class="data.disabled ? 'treetitle ' : ''">{{
-                node.label
-              }}</span>
+            <el-tooltip
+              v-if="data.parent == '0'"
+              class="item"
+              effect="dark"
+              placement="right"
+            >
+              <template #content
+                >入库人:{{ data.createperson }} <br />入库时间:{{ data.datetime
+                }}<br />数据来源:{{ data.gltj }}</template
+              >
+              <span :class="data.disabled ? 'treetitle ' : ''">{{ node.label }}</span>
             </el-tooltip>
             <span v-else :class="data.disabled ? 'treetitle ' : ''">{{
-                node.label
-              }}</span>
-            
+              node.label
+            }}</span>
+
             <span
               v-if="!data.children"
               style="float: right; margin-right: 15px"
@@ -71,18 +75,18 @@ export default {
       label: "label",
       disabled: (data, node) => {
         // parent == '0':服务资源,1:目录 sjlx附件 type图层服务
-        if (data.parent == '0') {
-          return false
-        }else {
-          // 2023/5/7 修改 多图层一键开启关闭功能 
+        if (data.parent == "0") {
+          return false;
+        } else {
+          // 2023/5/7 修改 多图层一键开启关闭功能
           // 子级全部为图层,图层同级没有目录或附件,则上一级目录节点显示复选框
-          let state = false
+          let state = false;
           if (data.children.length > 0) {
-            state = data.children.every(item=>{
-              return item.parent == '0' && !item.sjlx
-            })
+            state = data.children.every((item) => {
+              return item.parent == "0" && !item.sjlx;
+            });
           }
-          return !state
+          return !state;
         }
       },
     };
@@ -92,17 +96,22 @@ export default {
     let datas = reactive({
       treeList: [],
       getList() {
+        console.log("getList");
+
         api.GetList().then((res) => {
           if (res.success) {
             var temp = {};
             var list = [];
             var zytc = [];
             res.data.forEach((item, index) => {
-              if(item.parent == '0' && !item.sjlx){
+              if (item.parent == "0" && !item.sjlx) {
+                if (item.name == "测试11") {
+                  console.log("测试11");
+                }
                 zytc.push({
                   name: item.name,
-                  bsm: item.bsm
-                })
+                  bsm: item.bsm,
+                });
               }
               temp[item.bsm] = item;
               item.label = item.name;
@@ -187,25 +196,25 @@ export default {
         return bsm != item.bsm;
       });
       // 属性过滤
-      store.state.zyll.queryfilter.bsm == bsm &&
-        store.commit("SET_QUERYFILTER", {});
+      store.state.zyll.queryfilter.bsm == bsm && store.commit("SET_QUERYFILTER", {});
       // 图层对比
-      store.state.zyll.screencontrast = store.state.zyll.screencontrast.filter(
-        (item) => {
-          return bsm != item.bsm;
-        }
-      );
+      store.state.zyll.screencontrast = store.state.zyll.screencontrast.filter((item) => {
+        return bsm != item.bsm;
+      });
     };
     // 返回当前点击节点的数据
     const handleNodeClick = (data, checked) => {
-      if (data.parent == '0') {
+      if (data.parent == "0") {
         store.commit("SET_ZYLIST", data);
-      }else{
-        store.dispatch("MULTI_SET_ZYLIST", {data, checked}).then((res)=>{
-          // console.log(res);
-        }).catch((e)=>{
-          console.log(e);
-        })
+      } else {
+        store
+          .dispatch("MULTI_SET_ZYLIST", { data, checked })
+          .then((res) => {
+            // console.log(res);
+          })
+          .catch((e) => {
+            console.log(e);
+          });
       }
     };
     // 过滤

+ 4 - 3
website/src/components/mapview/slider.vue

@@ -73,8 +73,9 @@ import VectorSource from "ol/source/Vector";
 import { Stroke, Style } from "ol/style";
 export default {
   setup() {
-    var Arcgis = arcMap;
-    var GeoServer = myMap;
+    // 注意:不能用 eval("Arcgis") 这类写法,生产构建时未使用变量会被压缩器删除,
+    // 导致 ReferenceError: Arcgis is not defined。用对象映射替代。
+    var serverMap = { Arcgis: arcMap, GeoServer: myMap };
     const store = useStore();
     const { proxy } = getCurrentInstance();
     const slidertrasttrastmap = reactive({
@@ -246,7 +247,7 @@ export default {
         });
         myMap.tempLayers.dview_fliter_Layer.getSource().addFeature(f);
         slidertrasttrastmap.layerArray.map((item, i) => {
-          eval(item.name.server_type).SearchWfsData(
+          (serverMap[item.name.server_type] || arcMap).SearchWfsData(
             item.name.url,
             g,
             function (data) {

+ 19 - 19
website/src/permission.js

@@ -23,7 +23,7 @@ const whiteList = ['/login', '/auth-redirect', '/bind', '/register'];
 router.beforeEach((to, from, next) => {
     // 全局前置守卫
     NProgress.start()
-        // 获取地址栏参数
+    // 获取地址栏参数
     if (to.query && to.query.token && to.path === '/page') {
         let access_token = to.query.token
         console.log('校验Token是否过期');
@@ -48,22 +48,22 @@ router.beforeEach((to, from, next) => {
             console.log('Token未过期,获取Token对应登录用户信息');
             // 获取Token对应登录用户信息
             currentUserInfo(access_token).then(res => {
-                    console.log('用户信息获取成功:' + res.data);
-                    // 获取username
-                    let username = res.data.user_name
-                        // 调用action的登录方法,进行自动认证登录
-                    console.log('开始自动认证登录');
-                    store.dispatch("LoginNew", username)
-                        .then(() => {
-                            store.commit("SET_SUPERUSER", username);
-                            store.commit("SET_SUPERTOKEN", access_token);
-                            next()
-                        })
-                        .catch((e) => {
-                            console.log('认证登录失败:');
-                            next(`/login?redirect=/`) // 否则全部重定向到登录页
-                        });
-                })
+                console.log('用户信息获取成功:' + res.data);
+                // 获取username
+                let username = res.data.user_name
+                // 调用action的登录方法,进行自动认证登录
+                console.log('开始自动认证登录');
+                store.dispatch("LoginNew", username)
+                    .then(() => {
+                        store.commit("SET_SUPERUSER", username);
+                        store.commit("SET_SUPERTOKEN", access_token);
+                        next()
+                    })
+                    .catch((e) => {
+                        console.log('认证登录失败:');
+                        next(`/login?redirect=/`) // 否则全部重定向到登录页
+                    });
+            })
                 .catch((e) => {
                     console.log('用户信息获取失败');
                     next(`/login?redirect=/`) // 否则全部重定向到登录页
@@ -84,7 +84,7 @@ router.beforeEach((to, from, next) => {
             //#endregion
 
             to.meta.title && store.dispatch('settings/setTitle', to.meta.title)
-                /* has token*/
+            /* has token*/
             if (to.path === '/login') {
                 next({ path: '/' })
                 NProgress.done()
@@ -101,7 +101,7 @@ router.beforeEach((to, from, next) => {
                                     router.addRoute(route) // 动态添加可访问路由表
                                 }
                             })
-                            next({...to, replace: true }) // hack方法 确保addRoutes已完成
+                            next({ ...to, replace: true }) // hack方法 确保addRoutes已完成
                         })
                     }).catch(err => {
                         store.dispatch('LogOut').then(() => {

+ 96 - 69
website/src/utils/map.js

@@ -136,7 +136,7 @@ export const baseLayer = {
     },
 };
 
-const myMap = (function() {
+const myMap = (function () {
     var myMaps = {
         _basemap: null,
         _domid: null,
@@ -196,7 +196,7 @@ const myMap = (function() {
             });
             myMap[type].addLayer(la, type);
             var _this = this;
-            myMap[type].on("singleclick", function(evt) {
+            myMap[type].on("singleclick", function (evt) {
                 var lonlat = myMap.webMercatorToWgs84(
                     evt.coordinate[0],
                     evt.coordinate[1]
@@ -206,7 +206,7 @@ const myMap = (function() {
                     layer,
                     `${lonlat[0]},${lonlat[1]}`,
                     view.getResolution() * 6.7,
-                    function(d, f) {
+                    function (d, f) {
                         if (d.length) {
                             var layerConfig = MapConfig[layer];
                             var layers = myMap.getLayerByNameAndMap(layer, type);
@@ -231,7 +231,7 @@ const myMap = (function() {
                 );
             });
         },
-        loadMap: function(domId, par = {}) {
+        loadMap: function (domId, par = {}) {
             var _op = {
                 center: MapCenter.point,
                 zoom: 8,
@@ -288,22 +288,22 @@ const myMap = (function() {
             if (!option.hideCity) this.cityLineDefault(!par.zoom);
             else if (!par.zoom) myMap.zoomToextent(MapCenter.extent);
         },
-        mapOnClick: function(evt) {
+        mapOnClick: function (evt) {
             var pixel = myMap.map.getEventPixel(evt.originalEvent);
             var hit = myMap.map.hasFeatureAtPixel(pixel);
             if (hit) {
-                myMap.map.forEachFeatureAtPixel(pixel, function(feature, layer) {
+                myMap.map.forEachFeatureAtPixel(pixel, function (feature, layer) {
                     if (!layer) {
                         return;
                     }
                     //显示弹窗
                     function popShow(config, html) {
                         arcMap.popupInfo({
-                                feature: feature,
-                                position: evt,
-                                title: feature.get(config.title),
-                                attrs: config.attrs,
-                            },
+                            feature: feature,
+                            position: evt,
+                            title: feature.get(config.title),
+                            attrs: config.attrs,
+                        },
                             html
                         );
                         arcMap.map.updateSize();
@@ -336,7 +336,7 @@ const myMap = (function() {
             dview_factor_Layer: null,
             dview_location_Layer: null,
             redtemp_Layer: null,
-            init: function() {
+            init: function () {
                 if (!myMap.getLayer(this._draw)) {
                     myMap.addLayer(myMap.CreateVecLayer(this._draw));
                     this.dview_draw_Layer = myMap.getLayer(this._draw);
@@ -420,7 +420,7 @@ const myMap = (function() {
                     this.redtemp_Layer = myMap.getLayer(this._redlayer);
                 }
             },
-            clear: function(layer) {
+            clear: function (layer) {
                 if (layer) {
                     layer.getSource().clear();
                 } else {
@@ -446,7 +446,7 @@ const myMap = (function() {
                 if (zoom) myMap.zoomToextent(f[0].getGeometry().getExtent());
             });
         },
-        updateSize: function(settime) {
+        updateSize: function (settime) {
             var count = 0;
 
             function usize() {
@@ -463,9 +463,9 @@ const myMap = (function() {
             } else usize();
         },
         //按name获取
-        getLayer: function(name) {
+        getLayer: function (name) {
             var layer_ = null;
-            this.map.getLayers().forEach(function(layer, i) {
+            this.map.getLayers().forEach(function (layer, i) {
                 if (
                     layer &&
                     layer.get("name") &&
@@ -478,11 +478,11 @@ const myMap = (function() {
             return layer_;
         },
         //按id获取
-        getLayerById: function(id, type) {
+        getLayerById: function (id, type) {
             var map = this.map;
             if (type) map = this[type];
             var layer_ = null;
-            map.getLayers().forEach(function(layer, i) {
+            map.getLayers().forEach(function (layer, i) {
                 if (layer && layer.get("id") && layer.get("id") == id) {
                     layer_ = layer;
                     return;
@@ -491,9 +491,9 @@ const myMap = (function() {
             return layer_;
         },
         //获取指定地图的图层
-        getLayerByNameAndMap: function(name, type) {
+        getLayerByNameAndMap: function (name, type) {
             var layer_ = null;
-            this[type].getLayers().forEach(function(layer) {
+            this[type].getLayers().forEach(function (layer) {
                 if (layer && layer.get("name") && layer.get("name") == name) {
                     layer_ = layer;
                     return;
@@ -501,12 +501,12 @@ const myMap = (function() {
             });
             return layer_;
         },
-        zoomToextent: function(extent, meters) {
+        zoomToextent: function (extent, meters) {
             meters = meters || 1000;
             var view = myMap.map.getView();
             view.fit(buffer(extent, meters), arcMap.map.getSize());
         },
-        zoomToFeature: function(feature, meters) {
+        zoomToFeature: function (feature, meters) {
             meters = meters || 1000;
             let extent;
             //添加支持多个feature sky220622
@@ -528,13 +528,13 @@ const myMap = (function() {
             myMap.zoomToextent(extent, meters);
         },
         //缩放到中心点
-        zoomToCenter: function(zoom) {
+        zoomToCenter: function (zoom) {
             var view = arcMap.map.getView();
             view.setZoom(zoom || 12);
             view.setCenter(fromLonLat(myMaps._center));
         },
         //缩放到图层 sky20220623
-        zoomToLayer: function(layurl, cl) {
+        zoomToLayer: function (layurl, cl) {
             var url = layurl + "?f=pjson"; //空间查询url;
             request({
                 method: "get",
@@ -551,7 +551,7 @@ const myMap = (function() {
             });
         },
         //移动
-        moveToFeature: function(feature) {
+        moveToFeature: function (feature) {
             let extent;
             //sky220622 添加支持多个feature
             if (Array.isArray(feature)) {
@@ -573,7 +573,7 @@ const myMap = (function() {
             view.setCenter(center);
             arcMap.map.render();
         },
-        addLayer: function(layer, type) {
+        addLayer: function (layer, type) {
             if (type) {
                 this[type].addLayer(layer);
             } else {
@@ -581,13 +581,13 @@ const myMap = (function() {
             }
         },
         //删除图层
-        removeLayer: function(layer) {
+        removeLayer: function (layer) {
             var _layer = layer;
             if (typeof layer == "string") _layer = myMap.getLayer(layer);
             this.map.removeLayer(_layer);
         },
         //删除以XX开头的图层(图层名称)
-        removeLayers: function(name) {
+        removeLayers: function (name) {
             var lys = this.map.getLayers().array_;
             for (var i = 0; i < lys.length; i++) {
                 var layer = lys[i];
@@ -602,7 +602,7 @@ const myMap = (function() {
                 }
             }
         },
-        CreateVecLayer: function(layername, style, popup, zindex) {
+        CreateVecLayer: function (layername, style, popup, zindex) {
             style =
                 style ||
                 new Style({
@@ -631,7 +631,7 @@ const myMap = (function() {
             if (popup) this.CreateLayerPopup(_VectorLayer, popup);
             return _VectorLayer;
         },
-        SetSelectStyle: function(feature, resolution) {
+        SetSelectStyle: function (feature, resolution) {
             var strs = new Array();
             var l = feature.getId();
             if (l != undefined) {
@@ -659,22 +659,22 @@ const myMap = (function() {
                 }),
             });
         },
-        CreateVecLayerOfPopup: function(layername, style) {
+        CreateVecLayerOfPopup: function (layername, style) {
             return this.CreateVecLayer(layername, style, true);
         },
-        CreateLayerPopup: function(layer, popup) {
+        CreateLayerPopup: function (layer, popup) {
             if (layer && typeof layer != "object") layer = myMap.getLayer(layer);
             if (layer) layer.popupInfo = popup;
             return layer;
         },
-        lonLatToWebMercator: function(lon, lat) {
+        lonLatToWebMercator: function (lon, lat) {
             var x = (lon * 20037508.34) / 180;
             var y =
                 Math.log(Math.tan(((90 + lat) * Math.PI) / 360)) / (Math.PI / 180);
             y = (y * 20037508.34) / 180;
             return [x, y];
         },
-        webMercatorToWgs84: function(x, y) {
+        webMercatorToWgs84: function (x, y) {
             var lon = (x / 20037508.34) * 180;
             var lat = (y / 20037508.34) * 180;
             lat =
@@ -703,28 +703,55 @@ const myMap = (function() {
             });
             return geoJson;
         },
-        LonLatDisplay: function() {
+        // 手动计算比例尺
+        getScaleFromResolution(resolution, units) {
+            const dpi = 96; // 标准DPI
+            const inchesPerMeter = 39.37;
+            const dotsPerMeter = dpi * inchesPerMeter;
+            if (units === 'degrees') {
+                // 经纬度投影特殊处理
+                return resolution * dotsPerMeter * (1 / 0.0254);
+            }
+            return resolution * dotsPerMeter;
+        },
+
+        LonLatDisplay: function () {
             var mousePositionControl = new MousePosition({
-                coordinateFormat: function(e) {
+                coordinateFormat: function (e) {
+                    const view = myMap.map.getView();
+                    const resolution = view.getResolution();
+                    const units = view.getProjection().getUnits();
+                    const scale = myMap.getScaleFromResolution(resolution, units);
                     var es = myMap.webMercatorToWgs84(e[0], e[1]);
                     return (
-                        "经度:" + es[0].toFixed(2) + "° , 纬度:" + es[1].toFixed(2) + "°"
+                        " 经度:" + es[0].toFixed(2) + "° ,纬度:" + es[1].toFixed(2) + "°,"
                     );
                 },
                 projection: get("EPSG:3857"),
                 className: "lonlat",
                 target: document.getElementById("lonlat"),
-                undefinedHTML: "&nbsp;",
+                // undefinedHTML: "&nbsp;",
             });
             mousePositionControl.setMap(myMap.map);
+            // 监听视图的 change:resolution 事件
+            myMap.map.getView().on('change:resolution', function (event) {
+                console.log("change:resolution");
+                const view = myMap.map.getView();
+                const resolution = view.getResolution();
+                const units = view.getProjection().getUnits();
+                const scale = myMap.getScaleFromResolution(resolution, units);
+                $("#resolution").html(
+                    "级别:" + Math.round(myMap.map.getView().getZoom()) + ",比例尺:" + Math.round(scale) + ""
+                );
+            });
         },
-        removePopupOverlay: function() {
+        removePopupOverlay: function () {
             myMap.map.removeOverlay(myMap.getPopupOverlay());
         },
-        getPopupOverlay: function() {
+        getPopupOverlay: function () {
             return this.map.getOverlayById("popup_temp");
         },
-        addOverlay: function(Overlay, type) {
+        addOverlay: function (Overlay, type) {
             if (type) {
                 this[type].addOverlay(Overlay);
             } else {
@@ -732,7 +759,7 @@ const myMap = (function() {
             }
         },
         //图表overlayer
-        addOverLayerByEcharts: function(data, type) {
+        addOverLayerByEcharts: function (data, type) {
             var details = formatKeyValue(type);
             var dom = document.querySelectorAll(".echartsOverlay");
             if (dom && dom.length) {
@@ -757,7 +784,7 @@ const myMap = (function() {
                 };
                 echartbar.chart = echarts.init(document.getElementById(code));
                 echartbar.chart.setOption(echartbar.option, true);
-                window.addEventListener("resize", function() {
+                window.addEventListener("resize", function () {
                     echartbar.chart.resize();
                 });
                 var _overlay = new Overlay({
@@ -776,7 +803,7 @@ const myMap = (function() {
             });
         },
         //地图弹窗--点
-        popupInfo: function(option) {
+        popupInfo: function (option) {
             var feature = option.feature;
             var evt = option.position;
             var _popupId_ = "popup_temp" + option.index;
@@ -825,13 +852,13 @@ const myMap = (function() {
                 document.getElementById(myMap._domid);
             text.appendChild(para);
             if (option.type) {
-                document.getElementById("closePop").onclick = function() {
+                document.getElementById("closePop").onclick = function () {
                     myMap[option.type].removeOverlay(
                         myMap[option.type].getOverlayById(_popupId_)
                     );
                 };
             } else {
-                document.getElementById("closePop").onclick = function() {
+                document.getElementById("closePop").onclick = function () {
                     myMap.map1.removeOverlay(myMap.getPopupOverlay());
                 };
             }
@@ -876,7 +903,7 @@ const myMap = (function() {
             // setVisible(Status);
             return _overlay0, _overlay1;
         },
-        SearchWfsByLoc: function(layers, feature, buffer, callback) {
+        SearchWfsByLoc: function (layers, feature, buffer, callback) {
             if (typeof feature == "string") {
                 var lonlat = (feature || "").split(",");
                 var point = fromLonLat(
@@ -906,12 +933,12 @@ const myMap = (function() {
             } else {
                 geom = feature.getGeometry();
             }
-            myMap.SearchWfsData(layers, geom, function(datas) {
+            myMap.SearchWfsData(layers, geom, function (datas) {
                 callback(datas, bf);
             });
         },
         //WFS查询
-        SearchWfsData: function(layers, data, cl) {
+        SearchWfsData: function (layers, data, cl) {
             var filter;
             if (typeof data == "object") {
                 filter = intersects("geom", data, "");
@@ -930,13 +957,13 @@ const myMap = (function() {
                 filter: filter,
             });
             fetch("/geoserver/p002/ows", {
-                    method: "POST",
-                    body: new XMLSerializer().serializeToString(featureRequest),
-                })
-                .then(function(response) {
+                method: "POST",
+                body: new XMLSerializer().serializeToString(featureRequest),
+            })
+                .then(function (response) {
                     return response.json();
                 })
-                .then(function(json) {
+                .then(function (json) {
                     var features = new GeoJSON().readFeatures(json);
                     if (cl) cl(features);
                 });
@@ -954,19 +981,19 @@ const myMap = (function() {
                 filter: filter,
             });
             fetch("/geoserver/p002/wfs", {
-                    method: "POST",
-                    body: new XMLSerializer().serializeToString(featureRequest),
-                })
-                .then(function(response) {
+                method: "POST",
+                body: new XMLSerializer().serializeToString(featureRequest),
+            })
+                .then(function (response) {
                     return response.json();
                 })
-                .then(function(json) {
+                .then(function (json) {
                     var features = new GeoJSON().readFeatures(json);
                     if (cl) cl(features);
                 });
         },
         //图层数据叠加
-        addDjLayer(url, type) {},
+        addDjLayer(url, type) { },
         //图层类型
         WMSImage(url, name) {
             var _layer = new ImageLayer({
@@ -984,7 +1011,7 @@ const myMap = (function() {
             });
             return _layer;
         },
-        WMSTile: function(record) {
+        WMSTile: function (record) {
             var _layer = new TileLayer({
                 name: record.url,
                 id: record.id,
@@ -1002,7 +1029,7 @@ const myMap = (function() {
             });
             myMap.addLayer(_layer);
         },
-        XYZTile: function(record) {
+        XYZTile: function (record) {
             var imgsource = new XYZ({
                 crossOrigin: "anonymous",
                 url: record.url,
@@ -1014,7 +1041,7 @@ const myMap = (function() {
             });
             myMap.addLayer(untiled);
         },
-        vector: function(url, name, style) {
+        vector: function (url, name, style) {
             var _layer = new VectorLayer({
                 name: name,
                 declutter: false,
@@ -1028,7 +1055,7 @@ const myMap = (function() {
             });
             return _layer;
         },
-        TILE: function(record, call, zoom) {
+        TILE: function (record, call, zoom) {
             var imgsource = new XYZ({
                 crossOrigin: "anonymous",
                 url: record.url,
@@ -1048,7 +1075,7 @@ const myMap = (function() {
                 myMap.zoomToLayer(record.url);
             }
         },
-        WMS: function(record, call, zoom) {
+        WMS: function (record, call, zoom) {
             var format = "image/png";
             var imgsource = new TileWMS({
                 ratio: 1,
@@ -1072,7 +1099,7 @@ const myMap = (function() {
             }
             myMap.addLayer(untiled);
         },
-        WMTS: function(record, call, zoom) {
+        WMTS: function (record, call, zoom) {
             var imgsource = new XYZ({
                 crossOrigin: "anonymous",
                 url: record.url + `/tile/{z}/{y}/{x}`,
@@ -1093,7 +1120,7 @@ const myMap = (function() {
             }
         },
         //加载图层
-        addProLayer: function(record, call, zoom) {
+        addProLayer: function (record, call, zoom) {
             var format = "image/png";
             var imgsource = new TileWMS({
                 ratio: 1,
@@ -1118,7 +1145,7 @@ const myMap = (function() {
             myMap.addLayer(untiled);
         },
         // 加载geojson数据
-        addGeoJson: function(name, json, epsg) {
+        addGeoJson: function (name, json, epsg) {
             let layer = myMap.getLayer(name);
             if (layer) {
                 layer.getSource().clear();
@@ -1134,7 +1161,7 @@ const myMap = (function() {
             layer.getSource().addFeatures(features);
             return layer;
         },
-        zoomToFeatureJson: function(json) {
+        zoomToFeatureJson: function (json) {
             var feature = new GeoJSON().readFeature(json, {
                 defaultDataProjection: "EPSG:4326",
                 featureProjection: "EPSG:3857",

+ 33 - 28
website/src/views/ghcgscygl/ghcgsb/Qxxb.vue

@@ -42,12 +42,12 @@
               :show-all-levels="false"
             ></el-cascader>
           </el-form-item>
-          <el-button
-            type="primary"
-            @click="changeForm"
-            style="margin-left: 20px"
+          <el-button type="primary" @click="changeForm" style="margin-left: 20px"
             >查询</el-button
           >
+          <el-button type="primary" @click="onExport" style="margin-left: 20px"
+            >导出</el-button
+          >
         </el-form>
       </div>
     </div>
@@ -63,10 +63,8 @@
           height="100%"
           tooltip-effect="dark"
         >
-          <el-table-column prop="id" label="记录主键" align="center">
-          </el-table-column>
-          <el-table-column prop="name" label="成果名称" align="center">
-          </el-table-column>
+          <el-table-column prop="id" label="记录主键" align="center"> </el-table-column>
+          <el-table-column prop="name" label="成果名称" align="center"> </el-table-column>
           <el-table-column prop="instid" label="流程主键" align="center">
           </el-table-column>
           <el-table-column prop="xzqmc" label="行政区名称" align="center">
@@ -149,9 +147,7 @@
     <GhcgDialog
       v-if="ztghDialog"
       v-model:ghcgscDialog="ztghDialog"
-      :isCity="
-        $store.getters.roles.join(',').indexOf('qixian') > -1 ? false : true
-      "
+      :isCity="$store.getters.roles.join(',').indexOf('qixian') > -1 ? false : true"
       :instid="instid"
       @refresh="changeForm"
       @getlist="changeForm"
@@ -196,24 +192,20 @@
             <el-input readonly v-model="xbid" placeholder="主键id"></el-input>
           </el-form-item>
           <el-form-item label="流程主键">
-            <el-input
-              readonly
-              v-model="instid"
-              placeholder="请输入流程主键"
-            ></el-input>
+            <el-input readonly v-model="instid" placeholder="请输入流程主键"></el-input>
           </el-form-item>
         </el-form>
       </div>
       <span slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="xbSubmit()" size="small"
-          >修编</el-button
-        >
+        <el-button type="primary" @click="xbSubmit()" size="small">修编</el-button>
       </span>
     </el-dialog>
   </div>
 </template>
 
 <script>
+import * as XLSX from "xlsx";
+import { saveAs } from "file-saver";
 import { reactive, toRefs, ref } from "@vue/reactivity";
 import { getCurrentInstance, onMounted } from "@vue/runtime-core";
 import {
@@ -235,12 +227,6 @@ import XxghcgDialog from "@/components/ghcgscygl/ghcgsb/xxgh/xxgh/Qxyh/czghcgDia
 import { ElMessage } from "element-plus";
 import { GetXzq } from "@/api/homeApi.js";
 export default {
-  components: {
-    ShjlDialog,
-    GhcgDialog,
-    CzghcgDialog,
-    XxghcgDialog,
-  },
   setup(props, context) {
     const { proxy } = getCurrentInstance();
     const parent = { ...context };
@@ -297,6 +283,20 @@ export default {
             return "未知";
         }
       },
+      onExport() {
+        console.log("onExport");
+        const data = qxyh.tableData;
+        const ws = XLSX.utils.json_to_sheet(data);
+        const wb = XLSX.utils.book_new();
+        XLSX.utils.book_append_sheet(wb, ws, "Sheet1");
+        const excelBuffer = XLSX.write(wb, { bookType: "xlsx", type: "array" });
+        const blob = new Blob([excelBuffer], {
+          type:
+            "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8",
+        });
+        saveAs(blob, `数据导出_${new Date().getTime()}.xlsx`);
+        ElMessage.success("导出成功!");
+      },
       handleSizeChange(val) {
         qxyh.formInline.size = val;
         qxyh.getlist2();
@@ -348,9 +348,7 @@ export default {
       },
       // 修编记录
       xbDownload(id) {
-        window.open(
-          request.defaults.baseURL + "/apply/cggl/xbfiledownload?id=" + id,
-        );
+        window.open(request.defaults.baseURL + "/apply/cggl/xbfiledownload?id=" + id);
       },
       xbDeleteFun(id) {
         this.$confirm("确定删除此项修编申请吗?", "提示框", {
@@ -485,6 +483,13 @@ export default {
     });
     return { ...toRefs(qxyh) };
   },
+
+  components: {
+    ShjlDialog,
+    GhcgDialog,
+    CzghcgDialog,
+    XxghcgDialog,
+  },
 };
 </script>
 

+ 48 - 30
website/src/views/ghcgscygl/ghcgsb/Search.vue

@@ -22,6 +22,11 @@
               <el-option label="详细规划" value="5"></el-option>
               <el-option label="专项规划" value="6"></el-option>
               <el-option label="乡镇苏木国土空间规划" value="7"></el-option>
+              <!--<el-option label="新增重点建设项目" value="8"></el-option>
+              <el-option label="开发区规划" value="9"></el-option>
+              <el-option label="城镇开发边界" value="10"></el-option>
+              <el-option label="生态保护红线" value="11"></el-option>-->
+              <el-option label="规划动态调整" value="12"></el-option>
             </el-select>
           </el-form-item>
           <el-form-item label="行政区:">
@@ -43,12 +48,12 @@
               :show-all-levels="false"
             ></el-cascader>
           </el-form-item>
-          <el-button
-            type="primary"
-            @click="changeForm"
-            style="margin-left: 20px"
+          <el-button type="primary" @click="changeForm" style="margin-left: 20px"
             >查询</el-button
           >
+          <el-button type="primary" @click="onExport" style="margin-left: 20px"
+            >导出</el-button
+          >
         </el-form>
       </div>
     </div>
@@ -65,10 +70,8 @@
           tooltip-effect="dark"
           v-show="formInline.status == '1'"
         >
-          <el-table-column prop="id" label="记录主键" align="center">
-          </el-table-column>
-          <el-table-column prop="subject" label="标题" align="center">
-          </el-table-column>
+          <el-table-column prop="id" label="记录主键" align="center"> </el-table-column>
+          <el-table-column prop="subject" label="标题" align="center"> </el-table-column>
           <el-table-column prop="instId" label="流程主键" align="center">
           </el-table-column>
           <el-table-column prop="nodeName" label="流程节点名称" align="center">
@@ -79,8 +82,7 @@
           </el-table-column>
           <el-table-column prop="createTime" label="创建时间" align="center">
           </el-table-column>
-          <el-table-column prop="status" label="状态" align="center">
-          </el-table-column>
+          <el-table-column prop="status" label="状态" align="center"> </el-table-column>
           <el-table-column
             label="操作"
             align="center"
@@ -120,8 +122,7 @@
           tooltip-effect="dark"
           v-show="formInline.status == '2' || formInline.status == '3'"
         >
-          <el-table-column prop="id" label="记录主键" align="center">
-          </el-table-column>
+          <el-table-column prop="id" label="记录主键" align="center"> </el-table-column>
           <el-table-column prop="title" label="成果名称" align="center">
           </el-table-column>
           <el-table-column prop="instId" label="流程主键" align="center">
@@ -201,9 +202,7 @@
     <GhcgDialog
       v-if="ztghDialog"
       v-model:ghcgscDialog="ztghDialog"
-      :isCity="
-        $store.getters.roles.join(',').indexOf('qixian') > -1 ? false : true
-      "
+      :isCity="$store.getters.roles.join(',').indexOf('qixian') > -1 ? false : true"
       :instid="instid"
       @refresh="changeForm"
       @getlist="changeForm"
@@ -245,24 +244,20 @@
             </el-upload>
           </el-form-item>
           <el-form-item label="流程主键">
-            <el-input
-              readonly
-              v-model="instid"
-              placeholder="请输入流程主键"
-            ></el-input>
+            <el-input readonly v-model="instid" placeholder="请输入流程主键"></el-input>
           </el-form-item>
         </el-form>
       </div>
       <span slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="xbSubmit()" size="small"
-          >修编</el-button
-        >
+        <el-button type="primary" @click="xbSubmit()" size="small">修编</el-button>
       </span>
     </el-dialog>
   </div>
 </template>
 
 <script>
+import * as XLSX from "xlsx";
+import { saveAs } from "file-saver";
 import { reactive, toRefs, ref } from "@vue/reactivity";
 import { getCurrentInstance, onMounted } from "@vue/runtime-core";
 import {
@@ -282,12 +277,6 @@ import XxghcgDialog from "@/components/ghcgscygl/ghcgsb/xxgh/xxgh/Qxyh/czghcgDia
 import { ElMessage } from "element-plus";
 import { GetXzq } from "@/api/homeApi.js";
 export default {
-  components: {
-    ShjlDialog,
-    GhcgDialog,
-    CzghcgDialog,
-    XxghcgDialog,
-  },
   setup(props, context) {
     const { proxy } = getCurrentInstance();
     const parent = { ...context };
@@ -331,6 +320,28 @@ export default {
       index: "",
       uuidList: [],
       uuidList1: "",
+      onExport() {
+        console.log("onExport");
+        let data;
+        if (qxyh.formInline.status == 1) {
+          data = qxyh.tableData1;
+        } else if (qxyh.formInline.status == 3) {
+          data = qxyh.tableData2;
+        } else if (qxyh.formInline.status == 2) {
+          data = qxyh.tableData2;
+        }
+        const ws = XLSX.utils.json_to_sheet(data);
+        const wb = XLSX.utils.book_new();
+        XLSX.utils.book_append_sheet(wb, ws, "Sheet1");
+        const excelBuffer = XLSX.write(wb, { bookType: "xlsx", type: "array" });
+        const blob = new Blob([excelBuffer], {
+          type:
+            "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8",
+        });
+        // 5. 保存文件
+        saveAs(blob, `数据导出_${new Date().getTime()}.xlsx`);
+        ElMessage.success("导出成功!");
+      },
       handleSizeChange(val) {
         qxyh.formInline.size = val;
         qxyh.getlist2();
@@ -562,6 +573,13 @@ export default {
     });
     return { ...toRefs(qxyh) };
   },
+
+  components: {
+    ShjlDialog,
+    GhcgDialog,
+    CzghcgDialog,
+    XxghcgDialog,
+  },
 };
 </script>
 
@@ -600,7 +618,7 @@ export default {
 .dialog-footer {
   width: 100%;
   text-align: center;
-  position: absolute;
+  // position: absolute;
   bottom: 30px;
 }
 </style>

+ 52 - 93
website/src/views/ghcgscygl/ghcgsb/xxgh/Czgh/Qxyh.vue

@@ -27,11 +27,7 @@
                 ></el-cascader>
               </el-form-item>
               <el-form-item label="上报状态:">
-                <el-select
-                  v-model="formInline.status"
-                  placeholder="全部"
-                  clearable
-                >
+                <el-select v-model="formInline.status" placeholder="全部" clearable>
                   <el-option label="" value="">全部</el-option>
                   <el-option label="待审" value="10"></el-option>
                   <el-option label="未上报" value="11"></el-option>
@@ -39,12 +35,12 @@
                   <!-- <el-option label="退回" value="14"></el-option> -->
                 </el-select>
               </el-form-item>
-              <el-button
-                type="primary"
-                @click="onSearch"
-                style="margin-left: 20px"
+              <el-button type="primary" @click="onSearch" style="margin-left: 20px"
                 >查询</el-button
               >
+              <el-button type="primary" @click="onExport" style="margin-left: 20px"
+                >导出</el-button
+              >
             </el-form>
           </div>
           <div class="margin-right-20">
@@ -210,8 +206,7 @@
                         class="caozuo"
                         @click="showDialog(scope.row, 1, scope.$index)"
                         v-if="
-                          uploadStatus1(scope.row.uploadStatus) ===
-                            '上传成功' &&
+                          uploadStatus1(scope.row.uploadStatus) === '上传成功' &&
                           uploadStatus(scope.row.status) === '未上报'
                         "
                         >上报至自治区
@@ -222,9 +217,7 @@
                         type="text"
                         class="caozuo"
                         @click="downLoadCgFile(scope.$index)"
-                        :disabled="
-                          uploadStatus1(scope.row.uploadStatus) !== '上传成功'
-                        "
+                        :disabled="uploadStatus1(scope.row.uploadStatus) !== '上传成功'"
                         >下载</el-button
                       >
                     </slot>
@@ -259,9 +252,7 @@
               </el-table-column>
             </el-table>
           </div>
-          <div
-            class="flex-box footer height-50 flex-box align-center box-sizing"
-          >
+          <div class="flex-box footer height-50 flex-box align-center box-sizing">
             <el-pagination
               @size-change="handleSizeChange"
               @current-change="handleCurrentChange"
@@ -277,7 +268,7 @@
           </div>
         </div>
       </el-tab-pane>
-      <el-tab-pane label="上报统计" name="sbtj">
+      <el-tab-pane label="上报统计" name="sbtj" v-if="isstatist">
         <el-table
           :data="treeTableData"
           :expand-row-keys="defaultExpandedKeys"
@@ -293,26 +284,11 @@
           element-loading-svg-view-box="-10, -10, 50, 50"
           element-loading-background="rgba(122, 122, 122, 0.8)"
         >
-          <el-table-column
-            prop="xzqh"
-            label="行政区划"
-            width="240"
-            show-overflow-tooltip
-          >
+          <el-table-column prop="xzqh" label="行政区划" width="240" show-overflow-tooltip>
           </el-table-column>
-          <el-table-column
-            prop="xzczs"
-            label="行政村总数"
-            width="120"
-            align="center"
-          >
+          <el-table-column prop="xzczs" label="行政村总数" width="120" align="center">
           </el-table-column>
-          <el-table-column
-            prop="ybaczs"
-            label="应备案村庄数"
-            width="120"
-            align="center"
-          >
+          <el-table-column prop="ybaczs" label="应备案村庄数" width="120" align="center">
           </el-table-column>
           <!-- <el-table-column
             prop="qxysbczs"
@@ -320,29 +296,13 @@
             align="center"
           >
           </el-table-column> -->
-          <el-table-column
-            prop="sbdstczs"
-            label="上报到省厅村庄数1"
-            align="center"
-          >
+          <el-table-column prop="sbdstczs" label="上报到省厅村庄数1" align="center">
           </el-table-column>
-          <el-table-column
-            prop="wbscjd"
-            label="文本审查节点(补正)"
-            align="center"
-          >
+          <el-table-column prop="wbscjd" label="文本审查节点(补正)" align="center">
           </el-table-column>
-          <el-table-column
-            prop="slsjbz"
-            label="矢量数据审查节点(机审)"
-            align="center"
-          >
+          <el-table-column prop="slsjbz" label="矢量数据审查节点(机审)" align="center">
           </el-table-column>
-          <el-table-column
-            prop="ybas"
-            label="已备案数(用地审查节点)"
-            align="center"
-          >
+          <el-table-column prop="ybas" label="已备案数(用地审查节点)" align="center">
           </el-table-column>
           <el-table-column
             prop="bal"
@@ -391,11 +351,7 @@
     >
       <span>{{ dialogMessage1 + name + dialogMessage2 }}</span>
       <template #footer>
-        <span
-          class="dialog-footer"
-          v-show="sbjdProgress"
-          style="line-height: 40px"
-        >
+        <span class="dialog-footer" v-show="sbjdProgress" style="line-height: 40px">
           <el-progress
             :text-inside="true"
             :stroke-width="20"
@@ -404,10 +360,7 @@
           ></el-progress>
         </span>
         <span class="dialog-footer">
-          <el-button
-            @click="editDialogVisible = false"
-            style="margin-right: 20px"
-          >
+          <el-button @click="editDialogVisible = false" style="margin-right: 20px">
             取消
           </el-button>
           <el-button type="primary" @click="editQsStatus()"> 确定 </el-button>
@@ -460,10 +413,7 @@
         > -->
       </div>
     </el-dialog>
-    <XqDialog
-      v-model:ckxqDialog="ckxqDialog"
-      v-model:cgDetail="activeCg"
-    ></XqDialog>
+    <XqDialog v-model:ckxqDialog="ckxqDialog" v-model:cgDetail="activeCg"></XqDialog>
     <CzghcgDialog
       v-if="ghcgscDialog"
       v-model:ghcgscDialog="ghcgscDialog"
@@ -482,12 +432,7 @@
       :title="xmDetailDialogTitle"
       :before-close="handleClose"
       :align-center="true"
-      style="
-        white-space: initial;
-        overflow: hidden;
-        width: 850px;
-        height: 600px;
-      "
+      style="white-space: initial; overflow: hidden; width: 850px; height: 600px"
     >
       <el-descriptions
         column="2"
@@ -507,6 +452,8 @@
 </template>
 
 <script>
+import * as XLSX from "xlsx";
+import { saveAs } from "file-saver";
 import { reactive, toRefs, ref } from "@vue/reactivity";
 import { getCurrentInstance, onMounted, watch } from "@vue/runtime-core";
 import { GetXzq } from "@/api/homeApi.js";
@@ -555,12 +502,11 @@ export default {
         cgid: "",
       },
       formrule: {
-        scmodel: [
-          { required: true, message: "请选择审查模型", trigger: "blur" },
-        ],
+        scmodel: [{ required: true, message: "请选择审查模型", trigger: "blur" }],
         cgid: [{ required: true, message: "请输入成果编号", trigger: "blur" }],
       },
       scmxList: [],
+      isstatist: XZQ_DM == "150600",
       xzoptions: [],
       cascader: ref(null),
       multipleTable: ref(null),
@@ -584,6 +530,20 @@ export default {
       treeTableData: [],
       defaultExpandedKeys: [],
       loading: true, //加载状态
+      onExport() {
+        console.log("onExport");
+        const data = qxyh.tableData;
+        const ws = XLSX.utils.json_to_sheet(data);
+        const wb = XLSX.utils.book_new();
+        XLSX.utils.book_append_sheet(wb, ws, "Sheet1");
+        const excelBuffer = XLSX.write(wb, { bookType: "xlsx", type: "array" });
+        const blob = new Blob([excelBuffer], {
+          type:
+            "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8",
+        });
+        saveAs(blob, `数据导出_${new Date().getTime()}.xlsx`);
+        ElMessage.success("导出成功!");
+      },
       xmDetail(detail) {
         try {
           let info = JSON.parse(detail);
@@ -666,8 +626,7 @@ export default {
         let msg = msg1.data;
         if (msg.indexOf("/") > -1) {
           qxyh.sbjdText = msg;
-          let percentage =
-            parseInt(msg.split("/")[0]) / parseInt(msg.split("/")[1]);
+          let percentage = parseInt(msg.split("/")[0]) / parseInt(msg.split("/")[1]);
           qxyh.sbjdPercentage =
             percentage == 0 ? 0 : Math.round(percentage * 10000) / 100;
         }
@@ -744,9 +703,7 @@ export default {
       setXzqdm(bsm) {
         if (typeof qxyh.cascader.getCheckedNodes()[0] !== "undefined") {
           qxyh.formInline.xzqCode = qxyh.cascader.getCheckedNodes()[0].value;
-          qxyh.formInline.xzqName = bsm
-            ? qxyh.cascader.getCheckedNodes()[0].label
-            : "";
+          qxyh.formInline.xzqName = bsm ? qxyh.cascader.getCheckedNodes()[0].label : "";
           let pathLabels = qxyh.cascader.getCheckedNodes()[0].pathLabels;
           qxyh.formInline.county = "";
           qxyh.formInline.town = "";
@@ -812,7 +769,7 @@ export default {
         proxy.download(
           "/apply/xzczghcgsb/downloadZip",
           params,
-          getFileName(qxyh.tableData[index].filePath),
+          getFileName(qxyh.tableData[index].filePath)
         );
       },
       // 获取列表数据
@@ -822,15 +779,17 @@ export default {
           qxyh.tableData = res.data;
           qxyh.formInline.total = res.recordstotal;
         });
-        getStatistics().then((res) => {
-          qxyh.treeTableData = res.data;
-          qxyh.defaultExpandedKeys = qxyh.treeTableData.map((item) => {
-            if (item.level == 0) {
-              return item.id;
-            }
+        if (qxyh.isstatist) {
+          getStatistics().then((res) => {
+            qxyh.treeTableData = res.data;
+            qxyh.defaultExpandedKeys = qxyh.treeTableData.map((item) => {
+              if (item.level == 0) {
+                return item.id;
+              }
+            });
+            qxyh.loading = false;
           });
-          qxyh.loading = false;
-        });
+        }
       },
     });
     onMounted(() => {
@@ -850,7 +809,7 @@ export default {
         } else {
           qxyh.getlist();
         }
-      },
+      }
     );
     return { ...toRefs(qxyh) };
   },

+ 50 - 115
website/src/views/ghcgscygl/ghcgsb/ztgh/Qxjghcg/Qxyh.vue

@@ -4,17 +4,12 @@
       <div class="header-left">
         <el-form :inline="true" :model="formInline">
           <el-form-item label="成果包名称:">
-            <el-input
-              v-model="formInline.name"
-              type="text"
-              clearable
-            ></el-input>
+            <el-input v-model="formInline.name" type="text" clearable></el-input>
           </el-form-item>
           <el-form-item label="规划类型:">
             <el-select
               :disabled="
-                $store.getters.roles.length == 1 &&
-                $store.getters.roles[0] == 'qixian'
+                $store.getters.roles.length == 1 && $store.getters.roles[0] == 'qixian'
               "
               v-model="formInline.plantype"
               placeholder="请选择规划类型"
@@ -63,11 +58,7 @@
             </el-select>
           </el-form-item>
           <el-form-item label="上报状态:">
-            <el-select
-              v-model="formInline.uploadstatus"
-              placeholder="全部"
-              clearable
-            >
+            <el-select v-model="formInline.uploadstatus" placeholder="全部" clearable>
               <el-option label="" value="">全部</el-option>
               <el-option
                 v-if="$store.getters.roles.join(',').indexOf('qixian') > -1"
@@ -87,22 +78,20 @@
           <el-button type="primary" @click="getlist" style="margin-left: 20px"
             >查询</el-button
           >
+          <el-button type="primary" @click="onExport" style="margin-left: 20px"
+            >导出</el-button
+          >
           <el-button
             type="primary"
             @click="showTJ"
             style="margin-left: 20px"
-            v-show="formInline.plantype == '7'"
+            v-show="isstatist && formInline.plantype == '7'"
             >乡镇规划上报统计</el-button
           >
         </el-form>
       </div>
-      <div
-        class="margin-right-20"
-        v-if="$store.getters.roles.indexOf('shiji') === -1"
-      >
-        <el-button type="primary" @click="ghcgscDialog = true"
-          >规划成果上传</el-button
-        >
+      <div class="margin-right-20" v-if="$store.getters.roles.indexOf('shiji') === -1">
+        <el-button type="primary" @click="ghcgscDialog = true">规划成果上传</el-button>
       </div>
     </div>
     <div class="table-layout flex-box column height-100-60">
@@ -131,8 +120,7 @@
           </el-table-column>
           <!-- <el-table-column prop="year" label="规划成果时间" align="center">
           </el-table-column> -->
-          <el-table-column prop="xzqmc" label="行政区" align="center">
-          </el-table-column>
+          <el-table-column prop="xzqmc" label="行政区" align="center"> </el-table-column>
           <el-table-column prop="instid" label="补正流程主键" align="center">
           </el-table-column>
           <!-- <el-table-column
@@ -208,9 +196,7 @@
                 <slot name="xq" :item="scope.row">
                   <el-button
                     type="text"
-                    v-if="
-                      scope.row.fileuploadremark && formInline.plantype != '5'
-                    "
+                    v-if="scope.row.fileuploadremark && formInline.plantype != '5'"
                     class="caozuo"
                     @click="xmDetail(scope.row.fileuploadremark)"
                     >详情</el-button
@@ -220,9 +206,7 @@
                   <el-button
                     type="text"
                     class="caozuo"
-                    v-if="
-                      scope.row.fileupload == '9' && formInline.plantype != '5'
-                    "
+                    v-if="scope.row.fileupload == '9' && formInline.plantype != '5'"
                     @click="startscmodel(scope.row)"
                     :disabled="scope.row.fileupload != '9'"
                     >发起审查</el-button
@@ -311,9 +295,7 @@
                     "
                     style="width: 100px; display: inline-block"
                     action="/file/upload"
-                    :on-success="
-                      (response) => handleSuccess(response, scope.row.id)
-                    "
+                    :on-success="(response) => handleSuccess(response, scope.row.id)"
                     :show-file-list="false"
                   >
                     <el-button type="primary">上传意见</el-button>
@@ -337,10 +319,7 @@
                     >日志</el-button
                   >
                 </slot>
-                <slot
-                  name="sc"
-                  v-if="$store.getters.roles.indexOf('qixian') > -1"
-                >
+                <slot name="sc" v-if="$store.getters.roles.indexOf('qixian') > -1">
                   <el-button
                     type="text"
                     class="caozuo"
@@ -355,14 +334,8 @@
                     >删除</el-button
                   >
                 </slot>
-                <slot
-                  name="sc"
-                  v-if="$store.getters.roles.indexOf('admin') > -1"
-                >
-                  <el-button
-                    type="text"
-                    class="caozuo"
-                    @click="showDialog(scope.row, 2)"
+                <slot name="sc" v-if="$store.getters.roles.indexOf('admin') > -1">
+                  <el-button type="text" class="caozuo" @click="showDialog(scope.row, 2)"
                     >删除</el-button
                   >
                 </slot>
@@ -396,11 +369,7 @@
     >
       <span>{{ dialogMessage1 + name + dialogMessage2 }}</span>
       <template #footer>
-        <span
-          class="dialog-footer"
-          v-show="sbjdProgress"
-          style="line-height: 40px"
-        >
+        <span class="dialog-footer" v-show="sbjdProgress" style="line-height: 40px">
           <el-progress
             :text-inside="true"
             :stroke-width="20"
@@ -416,11 +385,7 @@
           >
             取消
           </el-button>
-          <el-button
-            type="primary"
-            :disabled="sbjdProgress"
-            @click="editQsStatus()"
-          >
+          <el-button type="primary" :disabled="sbjdProgress" @click="editQsStatus()">
             确定
           </el-button>
         </span>
@@ -484,31 +449,20 @@
       v-model:cgDetail="activeCg"
       :isCity="false"
     ></ScjgDialog>
-    <XqDialog
-      v-model:ckxqDialog="ckxqDialog"
-      v-model:cgDetail="activeCg"
-    ></XqDialog>
+    <XqDialog v-model:ckxqDialog="ckxqDialog" v-model:cgDetail="activeCg"></XqDialog>
     <ChDialog
       v-if="chDialog"
       v-model:chDialog="chDialog"
       v-model:cgDetail="activeCg"
       @refresh="changeForm"
     ></ChDialog>
-    <SbjdDialog
-      v-model:sbjdDialog="sbjdDialog"
-      v-model:cgDetail="activeCg"
-    ></SbjdDialog>
+    <SbjdDialog v-model:sbjdDialog="sbjdDialog" v-model:cgDetail="activeCg"></SbjdDialog>
     <el-dialog
       v-model="xmDetailDialogVisible"
       :title="xmDetailDialogTitle"
       :before-close="handleClose"
       :align-center="true"
-      style="
-        white-space: initial;
-        overflow: hidden;
-        width: 850px;
-        height: 600px;
-      "
+      style="white-space: initial; overflow: hidden; width: 850px; height: 600px"
     >
       <el-descriptions
         column="2"
@@ -549,26 +503,11 @@
           element-loading-svg-view-box="-10, -10, 50, 50"
           element-loading-background="rgba(122, 122, 122, 0.8)"
         >
-          <el-table-column
-            prop="xzqh"
-            label="行政区划"
-            width="160"
-            show-overflow-tooltip
-          >
+          <el-table-column prop="xzqh" label="行政区划" width="160" show-overflow-tooltip>
           </el-table-column>
-          <el-table-column
-            prop="xzczs"
-            label="行政乡镇总数"
-            width="120"
-            align="center"
-          >
+          <el-table-column prop="xzczs" label="行政乡镇总数" width="120" align="center">
           </el-table-column>
-          <el-table-column
-            prop="ybaczs"
-            label="应备案乡镇数"
-            width="120"
-            align="center"
-          >
+          <el-table-column prop="ybaczs" label="应备案乡镇数" width="120" align="center">
           </el-table-column>
           <!-- <el-table-column
             prop="qxysbczs"
@@ -576,29 +515,13 @@
             align="center"
           >
           </el-table-column> -->
-          <el-table-column
-            prop="sbdstczs"
-            label="上报到省厅乡镇数"
-            align="center"
-          >
+          <el-table-column prop="sbdstczs" label="上报到省厅乡镇数" align="center">
           </el-table-column>
-          <el-table-column
-            prop="wbscjd"
-            label="文本审查节点(补正)"
-            align="center"
-          >
+          <el-table-column prop="wbscjd" label="文本审查节点(补正)" align="center">
           </el-table-column>
-          <el-table-column
-            prop="slsjbz"
-            label="矢量数据审查节点(机审)"
-            align="center"
-          >
+          <el-table-column prop="slsjbz" label="矢量数据审查节点(机审)" align="center">
           </el-table-column>
-          <el-table-column
-            prop="ybas"
-            label="已备案数(用地审查节点)"
-            align="center"
-          >
+          <el-table-column prop="ybas" label="已备案数(用地审查节点)" align="center">
           </el-table-column>
           <el-table-column
             prop="bal"
@@ -646,6 +569,8 @@
 </template>
 
 <script>
+import * as XLSX from "xlsx";
+import { saveAs } from "file-saver";
 import store from "@/store";
 import { socket } from "@/utils/websocket.js";
 import { reactive, toRefs, ref } from "@vue/reactivity";
@@ -690,7 +615,7 @@ export default {
         nextTick(() => {
           qxyh.getXzqdm();
         });
-      },
+      }
     );
     const qxyh = reactive({
       cascader: ref(null),
@@ -739,9 +664,7 @@ export default {
         },
       ],
       formrule: {
-        scmodel: [
-          { required: true, message: "请选择审查模型", trigger: "blur" },
-        ],
+        scmodel: [{ required: true, message: "请选择审查模型", trigger: "blur" }],
         cgid: [{ required: true, message: "请输入成果编号", trigger: "blur" }],
       },
       scmxList: [],
@@ -749,6 +672,7 @@ export default {
       logData: "", // 错误日志信息
       logName: "", // 错误数据名称
       xzoptions: [],
+      isstatist: XZQ_DM == "150600",
       formInline: {
         name: "",
         year: "", // 规划成果时间
@@ -784,6 +708,20 @@ export default {
       treeTableData: [],
       defaultExpandedKeys: [],
       loading: true, //加载状态
+      onExport() {
+        console.log("onExport");
+        const data = qxyh.tableData;
+        const ws = XLSX.utils.json_to_sheet(data);
+        const wb = XLSX.utils.book_new();
+        XLSX.utils.book_append_sheet(wb, ws, "Sheet1");
+        const excelBuffer = XLSX.write(wb, { bookType: "xlsx", type: "array" });
+        const blob = new Blob([excelBuffer], {
+          type:
+            "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8",
+        });
+        saveAs(blob, `数据导出_${new Date().getTime()}.xlsx`);
+        ElMessage.success("导出成功!");
+      },
       xmDetail(detail) {
         try {
           let info = JSON.parse(detail);
@@ -985,8 +923,7 @@ export default {
         let msg = msg1.data;
         if (msg.indexOf("/") > -1) {
           qxyh.sbjdText = msg;
-          let percentage =
-            parseInt(msg.split("/")[0]) / parseInt(msg.split("/")[1]);
+          let percentage = parseInt(msg.split("/")[0]) / parseInt(msg.split("/")[1]);
           qxyh.sbjdPercentage =
             percentage == 0 ? 0 : Math.round(percentage * 10000) / 100;
         }
@@ -1051,15 +988,13 @@ export default {
       },
       // 下载
       downLoadCgFile(id) {
-        window.open(
-          request.defaults.baseURL + "/apply/cggl/cgDownload?id=" + id,
-        );
+        window.open(request.defaults.baseURL + "/apply/cggl/cgDownload?id=" + id);
       },
       // 获取行政区数据
       getXzqdm() {
         GetXzqList().then((res) => {
           const xzq = res.data.find(
-            (item) => item.label === store.getters.user.dept.deptName,
+            (item) => item.label === store.getters.user.dept.deptName
           );
           qxyh.formInline.xzqdm = !xzq ? "" : xzq.value;
           qxyh.getlist();

+ 44 - 97
website/src/views/ghcgscygl/ghcgsb/ztgh/Sjghcg.vue

@@ -1,17 +1,10 @@
 <template>
-  <div
-    v-if="showTypeInfo.type === 'shiji'"
-    class="sjghcg max-box flex-box column"
-  >
+  <div v-if="showTypeInfo.type === 'shiji'" class="sjghcg max-box flex-box column">
     <div class="header flex-box align-center box-sizing">
       <div class="header-left">
         <el-form :inline="true" :model="formInline">
           <el-form-item label="成果包名称:">
-            <el-input
-              v-model="formInline.name"
-              type="text"
-              clearable
-            ></el-input>
+            <el-input v-model="formInline.name" type="text" clearable></el-input>
           </el-form-item>
           <el-form-item label="规划类型:">
             <el-select
@@ -62,11 +55,7 @@
             </el-select>
           </el-form-item>
           <el-form-item label="上报状态:">
-            <el-select
-              v-model="formInline.uploadstatus"
-              placeholder="全部"
-              clearable
-            >
+            <el-select v-model="formInline.uploadstatus" placeholder="全部" clearable>
               <el-option label="" value="">全部</el-option>
               <el-option label="未上报" value="0"></el-option>
               <!-- <el-option label="已上报" value="1"></el-option>
@@ -81,19 +70,20 @@
           <el-button type="primary" @click="getlist" style="margin-left: 20px"
             >查询</el-button
           >
+          <el-button type="primary" @click="onExport" style="margin-left: 20px"
+            >导出</el-button
+          >
           <el-button
             type="primary"
             @click="showTJ"
             style="margin-left: 20px"
-            v-show="formInline.plantype == '7'"
+            v-show="isstatist && formInline.plantype == '7'"
             >乡镇规划上报统计</el-button
           >
         </el-form>
       </div>
       <div class="margin-right-20">
-        <el-button type="primary" @click="ghcgscDialog = true"
-          >规划成果上传</el-button
-        >
+        <el-button type="primary" @click="ghcgscDialog = true">规划成果上传</el-button>
       </div>
     </div>
     <div class="table-layout flex-box column height-100-60">
@@ -122,8 +112,7 @@
           </el-table-column>
           <!-- <el-table-column prop="year" label="规划成果时间" align="center">
           </el-table-column> -->
-          <el-table-column prop="xzqmc" label="行政区" align="center">
-          </el-table-column>
+          <el-table-column prop="xzqmc" label="行政区" align="center"> </el-table-column>
           <el-table-column prop="instid" label="补正流程主键" align="center">
           </el-table-column>
           <!-- <el-table-column prop="fileupload" label="上传状态" align="center">
@@ -161,10 +150,7 @@
             style="position: relative"
           >
             <template #default="scope">
-              <div
-                v-if="['3', '7'].includes(scope.row.sczt)"
-                style="color: #d9001b"
-              >
+              <div v-if="['3', '7'].includes(scope.row.sczt)" style="color: #d9001b">
                 退回
                 <!-- <slot name="ck" :item="scope.row">
                   <el-button
@@ -250,10 +236,7 @@
                   >
                 </slot> -->
                 <slot name="sbjd">
-                  <el-button
-                    type="text"
-                    class="caozuo"
-                    @click="progressCg(scope.row)"
+                  <el-button type="text" class="caozuo" @click="progressCg(scope.row)"
                     >上报进度</el-button
                   >
                 </slot>
@@ -336,11 +319,7 @@
     >
       <span>{{ dialogMessage1 + name + dialogMessage2 }}</span>
       <template #footer>
-        <span
-          class="dialog-footer"
-          v-show="sbjdProgress"
-          style="line-height: 40px"
-        >
+        <span class="dialog-footer" v-show="sbjdProgress" style="line-height: 40px">
           <el-progress
             :text-inside="true"
             :stroke-width="20"
@@ -435,10 +414,7 @@
       v-model:cgDetail="activeCg"
       @refresh="changeForm"
     ></ChDialog>
-    <SbjdDialog
-      v-model:sbjdDialog="sbjdDialog"
-      v-model:cgDetail="activeCg"
-    ></SbjdDialog>
+    <SbjdDialog v-model:sbjdDialog="sbjdDialog" v-model:cgDetail="activeCg"></SbjdDialog>
     <RkDialog
       v-if="rkxxDialog"
       v-model:rkxxDialog="rkxxDialog"
@@ -449,12 +425,7 @@
       :title="xmDetailDialogTitle"
       :before-close="handleClose"
       :align-center="true"
-      style="
-        white-space: initial;
-        overflow: hidden;
-        width: 850px;
-        height: 600px;
-      "
+      style="white-space: initial; overflow: hidden; width: 850px; height: 600px"
     >
       <el-descriptions
         column="2"
@@ -494,26 +465,11 @@
           element-loading-svg-view-box="-10, -10, 50, 50"
           element-loading-background="rgba(122, 122, 122, 0.8)"
         >
-          <el-table-column
-            prop="xzqh"
-            label="行政区划"
-            width="160"
-            show-overflow-tooltip
-          >
+          <el-table-column prop="xzqh" label="行政区划" width="160" show-overflow-tooltip>
           </el-table-column>
-          <el-table-column
-            prop="xzczs"
-            label="行政乡镇总数"
-            width="120"
-            align="center"
-          >
+          <el-table-column prop="xzczs" label="行政乡镇总数" width="120" align="center">
           </el-table-column>
-          <el-table-column
-            prop="ybaczs"
-            label="应备案乡镇数"
-            width="120"
-            align="center"
-          >
+          <el-table-column prop="ybaczs" label="应备案乡镇数" width="120" align="center">
           </el-table-column>
           <!-- <el-table-column
             prop="qxysbczs"
@@ -521,29 +477,13 @@
             align="center"
           >
           </el-table-column> -->
-          <el-table-column
-            prop="sbdstczs"
-            label="上报到省厅乡镇数"
-            align="center"
-          >
+          <el-table-column prop="sbdstczs" label="上报到省厅乡镇数" align="center">
           </el-table-column>
-          <el-table-column
-            prop="wbscjd"
-            label="文本审查节点(补正)"
-            align="center"
-          >
+          <el-table-column prop="wbscjd" label="文本审查节点(补正)" align="center">
           </el-table-column>
-          <el-table-column
-            prop="slsjbz"
-            label="矢量数据审查节点(机审)"
-            align="center"
-          >
+          <el-table-column prop="slsjbz" label="矢量数据审查节点(机审)" align="center">
           </el-table-column>
-          <el-table-column
-            prop="ybas"
-            label="已备案数(用地审查节点)"
-            align="center"
-          >
+          <el-table-column prop="ybas" label="已备案数(用地审查节点)" align="center">
           </el-table-column>
           <el-table-column
             prop="bal"
@@ -596,6 +536,8 @@
 </template>
 
 <script>
+import * as XLSX from "xlsx";
+import { saveAs } from "file-saver";
 import store from "@/store";
 import { reactive, toRefs, ref } from "@vue/reactivity";
 import { socket } from "@/utils/websocket.js";
@@ -641,6 +583,7 @@ export default {
       xmDetailInfo: {},
       startjqscVisible: false,
       formLabelWidth: "120px",
+      isstatist: XZQ_DM == "150600",
       jqscform: {
         scmodel: "",
         jqscmodel: "",
@@ -681,9 +624,7 @@ export default {
         },
       ],
       formrule: {
-        scmodel: [
-          { required: true, message: "请选择审查模型", trigger: "blur" },
-        ],
+        scmodel: [{ required: true, message: "请选择审查模型", trigger: "blur" }],
         cgid: [{ required: true, message: "请输入成果编号", trigger: "blur" }],
       },
       xzoptions: [],
@@ -744,6 +685,21 @@ export default {
           });
         }
       },
+      onExport() {
+        console.log("onExport");
+        let data = sjghcg.tableData;
+        const ws = XLSX.utils.json_to_sheet(data);
+        const wb = XLSX.utils.book_new();
+        XLSX.utils.book_append_sheet(wb, ws, "Sheet1");
+        const excelBuffer = XLSX.write(wb, { bookType: "xlsx", type: "array" });
+        const blob = new Blob([excelBuffer], {
+          type:
+            "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8",
+        });
+        // 5. 保存文件
+        saveAs(blob, `数据导出_${new Date().getTime()}.xlsx`);
+        ElMessage.success("导出成功!");
+      },
       showTJ() {
         sjghcg.issStat = true;
         getTownshipStatistics().then((res) => {
@@ -916,8 +872,7 @@ export default {
         let msg = msg1.data;
         if (msg.indexOf("/") > -1) {
           sjghcg.sbjdText = msg;
-          let percentage =
-            parseInt(msg.split("/")[0]) / parseInt(msg.split("/")[1]);
+          let percentage = parseInt(msg.split("/")[0]) / parseInt(msg.split("/")[1]);
           sjghcg.sbjdPercentage =
             percentage == 0 ? 0 : Math.round(percentage * 10000) / 100;
         }
@@ -934,15 +889,7 @@ export default {
       },
       // 上传状态
       uploadStatus(status) {
-        let arr = [
-          "未上报",
-          "已上报",
-          "已接收",
-          "审查中",
-          "完结",
-          "退回",
-          "撤回",
-        ];
+        let arr = ["未上报", "已上报", "已接收", "审查中", "完结", "退回", "撤回"];
         return arr[status];
       },
       // 0待审(旗县)、1审查中(旗县)、2完结(旗县)、3退回(旗县)、4待审(市级)、5审查中(市级)、6完结(市级)、7退回(市级)
@@ -998,7 +945,7 @@ export default {
           background: "rgba(0, 0, 0, 0.7)",
         });
         const winURL = window.open(
-          request.defaults.baseURL + "/apply/cggl/cgDownload?id=" + id,
+          request.defaults.baseURL + "/apply/cggl/cgDownload?id=" + id
         );
         const loop = setInterval(() => {
           if (winURL && winURL.closed) {
@@ -1054,7 +1001,7 @@ export default {
         nextTick(() => {
           sjghcg.getlist();
         });
-      },
+      }
     );
     return { ...toRefs(sjghcg) };
   },

+ 51 - 28
website/src/views/mapview/Mapview.vue

@@ -9,6 +9,7 @@
       class="mapitem max-width"
     >
       <div v-show="seen" id="lonlat" class="lonlat"></div>
+      <div id="resolution" class="resolution"></div>
       <!-- 右键菜单 -->
       <!-- <MouseMenu :touch="touch" v-model:menu="modulelist.menu"></MouseMenu> -->
       <!-- 透明度5 -->
@@ -62,30 +63,6 @@ import RightLayer from "@/components/mapview/rightLayer";
 
 import { FullScreen, ZoomToExtent } from "ol/control";
 export default {
-  components: {
-    Tool,
-    Transparency,
-    BaseMap,
-    LegEnd,
-    RightLayer,
-    JJCharts,
-    ZTT,
-    ZTTXQ
-  },
-  props: {
-    rightlayer: {
-      type: Boolean,
-      default: false,
-    },
-    click: {
-      type: Boolean,
-      default: false,
-    },
-    baseLayer: {
-      type: Object,
-      default: () => {},
-    },
-  },
   setup(prop) {
     onMounted(() => {
       var option = Object.assign({}, prop.baseLayer, { click: prop.click });
@@ -122,8 +99,35 @@ export default {
     });
     return { ...toRefs(mapview) };
   },
+
+  components: {
+    Tool,
+    Transparency,
+    BaseMap,
+    LegEnd,
+    RightLayer,
+    JJCharts,
+    ZTT,
+    ZTTXQ,
+  },
+
+  props: {
+    rightlayer: {
+      type: Boolean,
+      default: false,
+    },
+    click: {
+      type: Boolean,
+      default: false,
+    },
+    baseLayer: {
+      type: Object,
+      default: () => {},
+    },
+  },
 };
 </script>
+
 <style>
 .fullscreen:-webkit-full-screen {
   height: 100%;
@@ -170,7 +174,8 @@ export default {
   }
   .lonlat {
     position: absolute;
-    width: 260px;
+    width: auto;
+    min-width: 200px;
     padding: 2px 5px;
     z-index: 1;
     background: rgba(0, 0, 0, 0.3);
@@ -186,17 +191,35 @@ export default {
 #lonlat {
   position: absolute;
   bottom: 0px;
-  right: 10px;
+  right: 200px !important;
   z-index: 3;
   cursor: pointer;
   transition: right 0.4s;
 }
+#resolution {
+  z-index: 3;
+  cursor: pointer;
+  transition: right 0.4s;
+  position: absolute;
+  line-height: 26px;
+  color: white;
+  font-size: 14px;
+  bottom: 0;
+  right: 0;
+  background: #02020254;
+  padding: 0px 0px 0px 8px;
+  height: 26px;
+  width: 200px;
+  text-align: left;
+}
 
-#lonlat .lonlat {
+#lonlat .lonlat,
+#resolution .resolution {
   display: inline-flex;
 }
 
-#lonlat .lonlat > div {
+#lonlat .lonlat > div,
+#resolution .resolution > div {
   width: 95px;
 }
 #lonlat .qmmap-scalebar {