Browse Source

一张图规划成果村庄规划整体改造

lkk 4 months ago
parent
commit
168184e010
2 changed files with 383 additions and 207 deletions
  1. 11 0
      website/src/api/ghcgysc/cggl.js
  2. 372 207
      website/src/views/ghcgscygl/ghcgsb/xxgh/Czgh/Qxyh.vue

+ 11 - 0
website/src/api/ghcgysc/cggl.js

@@ -186,4 +186,15 @@ export function getxblist(parameter) {
             'Content-Type': 'application/json;charset=UTF-8'
         }
     })
+}
+//获取村庄规划统计信息
+export function getStatistics(parameter) {
+    return request({
+        url: '/apply/xzczghcgsb/getStatistics',
+        method: 'get',
+        params: parameter,
+        headers: {
+            'Content-Type': 'application/json;charset=UTF-8'
+        }
+    })
 }

+ 372 - 207
website/src/views/ghcgscygl/ghcgsb/xxgh/Czgh/Qxyh.vue

@@ -1,165 +1,270 @@
 <template>
   <div class="qxyh 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.fileName" type="text"></el-input>
-          </el-form-item>
-          <el-form-item label="行政区:" style="width: 280px">
-            <el-cascader
-              :options="xzoptions"
-              :props="{
-                ...props,
-                checkStrictly: true,
-                expandTrigger: 'hover',
-              }"
-              v-model="formInline.xzqCode"
-              clearable
-              ref="cascader"
-              class="cascader-style"
-              popper-class="popper-cascader"
-              :filterable="true"
-              :show-all-levels="false"
-              @change="setXzqdm"
-            ></el-cascader>
-          </el-form-item>
-          <el-form-item label="上报状态:">
-            <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>
-              <el-option label="已上报" value="12"></el-option>
-              <!-- <el-option label="退回" value="14"></el-option> -->
-            </el-select>
-          </el-form-item>
-          <el-button type="primary" @click="onSearch" style="margin-left: 20px"
-            >查询</el-button
-          >
-        </el-form>
-      </div>
-      <div class="margin-right-20">
-        <el-button type="primary" @click="ghcgscDialog = true"
-          >上传村庄规划成果包</el-button
-        >
-        <!-- <el-button type="primary" @click="pushPlus()">批量上报至市</el-button> -->
-      </div>
-    </div>
-    <div class="table-layout flex-box column height-100-60">
-      <div class="table max-width height-100-50">
+    <el-tabs type="border-card" class="xz_box" v-model="activeTabs">
+      <el-tab-pane label="上报统计" name="sbtj">
         <el-table
-          ref="multipleTable"
-          :data="tableData"
-          style="width: 100%"
+          :data="treeTableData"
+          :expand-row-keys="defaultExpandedKeys"
           border
-          fit
-          cell-class-name="cell-item"
-          height="100%"
-          tooltip-effect="dark"
-          @selection-change="handleSelectionChange"
+          row-key="id"
+          :tree-props="{ children: 'children' }"
+          style="width: 100%"
+          highlight-current-row
+          height="calc(100vh - 100px )"
+          v-loading="loading"
+          element-loading-text="正在加载中..."
+          :element-loading-spinner="svg"
+          element-loading-svg-view-box="-10, -10, 50, 50"
+          element-loading-background="rgba(122, 122, 122, 0.8)"
         >
-          <el-table-column type="selection" width="40"></el-table-column>
           <el-table-column
-            prop="fileName"
-            label="成果包名称"
-            width="170"
-            align="center"
+            prop="xzqh"
+            label="行政区划"
+            width="240"
+            show-overflow-tooltip
           >
           </el-table-column>
           <el-table-column
-            prop="xzqName"
-            label="行政区名称"
-            width="170"
+            prop="xzczs"
+            label="行政村总数"
+            width="120"
             align="center"
           >
           </el-table-column>
           <el-table-column
-            prop="xzqCode"
-            label="行政区代码"
-            width="170"
+            prop="qxysbczs"
+            label="旗县已上报的村庄数"
             align="center"
           >
           </el-table-column>
-          <!-- <el-table-column
-            prop="village"
-            label="村庄名称"
-            width="170"
+          <el-table-column
+            prop="sbdstczs"
+            label="上报到省厅村庄数"
             align="center"
           >
           </el-table-column>
           <el-table-column
-            prop="county"
-            label="所属旗县"
-            width="170"
+            prop="wbscjd"
+            label="文本审查节点(补正)"
             align="center"
           >
           </el-table-column>
           <el-table-column
-            prop="town"
-            label="所属乡镇"
-            width="170"
+            prop="slsjbz"
+            label="矢量数据审查节点(机审)"
             align="center"
           >
-          </el-table-column> -->
+          </el-table-column>
           <el-table-column
-            prop="instid"
-            label="补正流程主键"
-            width="170"
+            prop="ybas"
+            label="已备案数(用地审查节点)"
             align="center"
           >
           </el-table-column>
           <el-table-column
-            prop="uploadStatus"
-            label="上传状态"
+            prop="bal"
+            label="备案率(%)(已备案数行政村总数)"
             align="center"
-            width="100"
-            style="position: relative"
           >
+          </el-table-column>
+          <el-table-column label="旗县未上报的村庄数" align="center">
             <template #default="scope">
-              <span>
-                {{ uploadStatus1(scope.row.uploadStatus) }}
-              </span>
+              <el-popover
+                placement="right"
+                :width="200"
+                trigger="click"
+                v-if="scope.row.wsbczs.length > 0"
+              >
+                <template #reference>
+                  <span style="cursor: pointer; color: #409eff">
+                    {{ scope.row.qxwsbczs }}</span
+                  >
+                  <!-- <i style="cursor: pointer" @click="getLayerId(scope.row)">
+                  </i> -->
+                </template>
+                <ul class="moreList">
+                  <li
+                    v-for="(item, i) in scope.row.wsbczs"
+                    :key="i"
+                    @click="clickMore(item, i)"
+                  >
+                    {{ i + 1 + "." + item }}
+                  </li>
+                </ul>
+              </el-popover>
+              <span v-else> {{ scope.row.qxwsbczs }}</span>
             </template>
           </el-table-column>
-          <el-table-column
-            width="160"
-            prop="uploadTime"
-            label="上报时间"
+        </el-table>
+      </el-tab-pane>
+      <el-tab-pane label="上报列表" name="sblb">
+        <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.fileName" type="text"></el-input>
+              </el-form-item>
+              <el-form-item label="行政区:" style="width: 280px">
+                <el-cascader
+                  :options="xzoptions"
+                  :props="{
+                    ...props,
+                    checkStrictly: true,
+                    expandTrigger: 'hover',
+                  }"
+                  v-model="formInline.xzqCode"
+                  clearable
+                  ref="cascader"
+                  class="cascader-style"
+                  popper-class="popper-cascader"
+                  :filterable="true"
+                  :show-all-levels="false"
+                  @change="setXzqdm"
+                ></el-cascader>
+              </el-form-item>
+              <el-form-item label="上报状态:">
+                <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>
+                  <el-option label="已上报" value="12"></el-option>
+                  <!-- <el-option label="退回" value="14"></el-option> -->
+                </el-select>
+              </el-form-item>
+              <el-button
+                type="primary"
+                @click="onSearch"
+                style="margin-left: 20px"
+                >查询</el-button
+              >
+            </el-form>
+          </div>
+          <div class="margin-right-20">
+            <el-button type="primary" @click="ghcgscDialog = true"
+              >上传村庄规划成果包</el-button
+            >
+            <!-- <el-button type="primary" @click="pushPlus()">批量上报至市</el-button> -->
+          </div>
+        </div>
+        <div class="table-layout flex-box column height-100-60">
+          <div class="table max-width height-100-50">
+            <el-table
+              ref="multipleTable"
+              :data="tableData"
+              style="width: 100%"
+              border
+              fit
+              cell-class-name="cell-item"
+              height="100%"
+              tooltip-effect="dark"
+              @selection-change="handleSelectionChange"
+            >
+              <el-table-column type="selection" width="40"></el-table-column>
+              <el-table-column
+                prop="fileName"
+                label="成果包名称"
+                width="170"
+                align="center"
+              >
+              </el-table-column>
+              <el-table-column
+                prop="xzqName"
+                label="行政区名称"
+                width="170"
+                align="center"
+              >
+              </el-table-column>
+              <el-table-column
+                prop="xzqCode"
+                label="行政区代码"
+                width="170"
+                align="center"
+              >
+              </el-table-column>
+              <!-- <el-table-column
+            prop="village"
+            label="村庄名称"
+            width="170"
             align="center"
           >
           </el-table-column>
           <el-table-column
-            prop="status"
-            label="上报状态"
+            prop="county"
+            label="所属旗县"
+            width="170"
             align="center"
-            width="100"
-            style="position: relative"
           >
-            <template #default="scope">
-              <span>
-                {{ uploadStatus(scope.row.status) }}
-              </span>
-            </template>
           </el-table-column>
           <el-table-column
-            label="操作"
+            prop="town"
+            label="所属乡镇"
+            width="170"
             align="center"
-            type="flex"
-            justity="space-between"
-            width="max-width"
           >
-            <template #default="scope">
-              <div class="max-width">
-                <slot name="xq" :item="scope.row">
-                  <el-button
-                    type="text"
-                    v-if="scope.row.bz"
-                    class="caozuo"
-                    @click="xmDetail(scope.row.bz)"
-                    >详情</el-button
-                  >
-                </slot>
-                <!-- <slot name="xq" :item="scope.row">
+          </el-table-column> -->
+              <el-table-column
+                prop="instid"
+                label="补正流程主键"
+                width="170"
+                align="center"
+              >
+              </el-table-column>
+              <el-table-column
+                prop="uploadStatus"
+                label="上传状态"
+                align="center"
+                width="100"
+                style="position: relative"
+              >
+                <template #default="scope">
+                  <span>
+                    {{ uploadStatus1(scope.row.uploadStatus) }}
+                  </span>
+                </template>
+              </el-table-column>
+              <el-table-column
+                width="160"
+                prop="uploadTime"
+                label="上报时间"
+                align="center"
+              >
+              </el-table-column>
+              <el-table-column
+                prop="status"
+                label="上报状态"
+                align="center"
+                width="100"
+                style="position: relative"
+              >
+                <template #default="scope">
+                  <span>
+                    {{ uploadStatus(scope.row.status) }}
+                  </span>
+                </template>
+              </el-table-column>
+              <el-table-column
+                label="操作"
+                align="center"
+                type="flex"
+                justity="space-between"
+                width="max-width"
+              >
+                <template #default="scope">
+                  <div class="max-width">
+                    <slot name="xq" :item="scope.row">
+                      <el-button
+                        type="text"
+                        v-if="scope.row.bz"
+                        class="caozuo"
+                        @click="xmDetail(scope.row.bz)"
+                        >详情</el-button
+                      >
+                    </slot>
+                    <!-- <slot name="xq" :item="scope.row">
                   <el-button
                     type="text"
                     class="caozuo"
@@ -170,71 +275,73 @@
                     >详情</el-button
                   >
                 </slot> -->
-                <slot name="bj">
-                  <el-button
-                    type="text"
-                    class="caozuo"
-                    @click="edit(scope.row)"
-                    :disabled="
-                      !(
-                        uploadStatus1(scope.row.uploadStatus) ===
-                          ('上传成功' || '上传失败') &&
-                        uploadStatus(scope.row.status) === ('待审' || '未上报')
-                      )
-                    "
-                    >编辑</el-button
-                  >
-                </slot>
-                <slot name="startjqsc" :item="scope.row">
-                  <el-button
-                    type="text"
-                    class="caozuo"
-                    v-if="scope.row.status == '10' && !scope.row.msg"
-                    @click="startscmodel(scope.row)"
-                    >发起审查</el-button
-                  >
-                </slot>
-                <slot name="sbzzzq">
-                  <el-button
-                    type="text"
-                    class="caozuo"
-                    @click="showDialog(scope.row, 1, scope.$index)"
-                    v-if="
-                      uploadStatus1(scope.row.uploadStatus) === '上传成功' &&
-                      uploadStatus(scope.row.status) === '未上报'
-                    "
-                    >上报至自治区
-                  </el-button>
-                </slot>
-                <slot name="xz">
-                  <el-button
-                    type="text"
-                    class="caozuo"
-                    @click="downLoadCgFile(scope.$index)"
-                    :disabled="
-                      uploadStatus1(scope.row.uploadStatus) !== '上传成功'
-                    "
-                    >下载</el-button
-                  >
-                </slot>
-                <slot name="rz">
-                  <el-button
-                    type="text"
-                    class="caozuo"
-                    v-if="scope.row.msg"
-                    @click="showRzDialog(scope.row.msg)"
-                    >日志</el-button
-                  >
-                </slot>
-                <slot name="sc">
-                  <el-button
-                    type="text"
-                    class="caozuo"
-                    @click="showDialog(scope.row, 2, scope.$index)"
-                    >删除</el-button
-                  >
-                </slot>
-                <!-- <slot name="sc">
+                    <slot name="bj">
+                      <el-button
+                        type="text"
+                        class="caozuo"
+                        @click="edit(scope.row)"
+                        :disabled="
+                          !(
+                            uploadStatus1(scope.row.uploadStatus) ===
+                              ('上传成功' || '上传失败') &&
+                            uploadStatus(scope.row.status) ===
+                              ('待审' || '未上报')
+                          )
+                        "
+                        >编辑</el-button
+                      >
+                    </slot>
+                    <slot name="startjqsc" :item="scope.row">
+                      <el-button
+                        type="text"
+                        class="caozuo"
+                        v-if="scope.row.status == '10' && !scope.row.msg"
+                        @click="startscmodel(scope.row)"
+                        >发起审查</el-button
+                      >
+                    </slot>
+                    <slot name="sbzzzq">
+                      <el-button
+                        type="text"
+                        class="caozuo"
+                        @click="showDialog(scope.row, 1, scope.$index)"
+                        v-if="
+                          uploadStatus1(scope.row.uploadStatus) ===
+                            '上传成功' &&
+                          uploadStatus(scope.row.status) === '未上报'
+                        "
+                        >上报至自治区
+                      </el-button>
+                    </slot>
+                    <slot name="xz">
+                      <el-button
+                        type="text"
+                        class="caozuo"
+                        @click="downLoadCgFile(scope.$index)"
+                        :disabled="
+                          uploadStatus1(scope.row.uploadStatus) !== '上传成功'
+                        "
+                        >下载</el-button
+                      >
+                    </slot>
+                    <slot name="rz">
+                      <el-button
+                        type="text"
+                        class="caozuo"
+                        v-if="scope.row.msg"
+                        @click="showRzDialog(scope.row.msg)"
+                        >日志</el-button
+                      >
+                    </slot>
+                    <slot name="sc">
+                      <el-button
+                        type="text"
+                        class="caozuo"
+                        @click="showDialog(scope.row, 2, scope.$index)"
+                        >删除</el-button
+                      >
+                    </slot>
+                    <!-- <slot name="sc">
                   <el-button
                     type="text"
                     class="caozuo"
@@ -243,26 +350,31 @@
                     >删除</el-button
                   >
                 </slot> -->
-              </div>
-            </template>
-          </el-table-column>
-        </el-table>
-      </div>
-      <div class="flex-box footer height-50 flex-box align-center box-sizing">
-        <el-pagination
-          @size-change="handleSizeChange"
-          @current-change="handleCurrentChange"
-          :current-page="formInline.page"
-          :page-sizes="[10, 20, 50, 100]"
-          :page-size="formInline.limit"
-          background
-          :pager-count="5"
-          layout="total, sizes, prev, pager, next, jumper"
-          :total="formInline.total"
-        >
-        </el-pagination>
-      </div>
-    </div>
+                  </div>
+                </template>
+              </el-table-column>
+            </el-table>
+          </div>
+          <div
+            class="flex-box footer height-50 flex-box align-center box-sizing"
+          >
+            <el-pagination
+              @size-change="handleSizeChange"
+              @current-change="handleCurrentChange"
+              :current-page="formInline.page"
+              :page-sizes="[10, 20, 50, 100]"
+              :page-size="formInline.limit"
+              background
+              :pager-count="5"
+              layout="total, sizes, prev, pager, next, jumper"
+              :total="formInline.total"
+            >
+            </el-pagination>
+          </div>
+        </div>
+      </el-tab-pane>
+    </el-tabs>
+
     <el-dialog
       v-model="editDialogVisible"
       :title="dialogTitle"
@@ -381,7 +493,7 @@ import { reactive, toRefs, ref } from "@vue/reactivity";
 import { getCurrentInstance, onMounted, watch } from "@vue/runtime-core";
 import { GetXzq } from "@/api/homeApi.js";
 import { getFileName } from "@/utils/index.js";
-import { scmxlist, startczghcgsc } from "@/api/ghcgysc/cggl.js";
+import { scmxlist, startczghcgsc, getStatistics } from "@/api/ghcgysc/cggl.js";
 import { Getlist, ReportSubmit, Delete } from "@/api/ghcgysc/czghApi.js";
 import XqDialog from "@/components/ghcgscygl/ghcgsb/xxgh/czgh/Qxyh/xqDialog.vue";
 import CzghcgDialog from "@/components/ghcgscygl/ghcgsb/xxgh/czgh/Qxyh/czghcgDialog.vue";
@@ -446,10 +558,13 @@ export default {
       index: "",
       uuidList: [],
       uuidList1: "",
+      activeTabs: "sbtj",
+      treeTableData: [],
+      defaultExpandedKeys: [],
+      loading: true, //加载状态
       xmDetail(detail) {
         try {
           let info = JSON.parse(detail);
-          console.log(info);
           qxyh.xmDetailDialogVisible = true;
           qxyh.xmDetailInfo = info;
         } catch {
@@ -477,7 +592,6 @@ export default {
           return (data += res.uuid + ",");
         });
         qxyh.uuidList1 = data;
-        console.log(qxyh.uuidList1);
       },
       // 显示弹窗
       showDialog(row, status, index) {
@@ -632,7 +746,6 @@ export default {
       },
       // 编辑
       edit(row) {
-        console.log(row);
         let cglevel = row.cglevel;
         let filePath = row.filePath;
         let fileName = row.fileName;
@@ -658,7 +771,7 @@ export default {
         proxy.download(
           "/apply/xzczghcgsb/downloadZip",
           params,
-          getFileName(qxyh.tableData[index].filePath),
+          getFileName(qxyh.tableData[index].filePath)
         );
       },
       // 获取列表数据
@@ -668,6 +781,15 @@ 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;
+            }
+          });
+          qxyh.loading = false;
+        });
       },
     });
     onMounted(() => {
@@ -687,7 +809,7 @@ export default {
         } else {
           qxyh.getlist();
         }
-      },
+      }
     );
     return { ...toRefs(qxyh) };
   },
@@ -696,6 +818,25 @@ export default {
 
 <style lang="less" scoped>
 .qxyh {
+  :deep(.height-100-50) {
+    height: calc(100vh - 208px) !important ;
+  }
+
+  .xz_box {
+    height: calc(100vh - 60px);
+    overflow: hidden;
+    overflow-y: hidden;
+    :deep(.el-tabs__header) {
+      height: 40px;
+    }
+    :deep(.el-tabs__item) {
+      height: 40px;
+      line-height: 40px;
+    }
+    :deep(.el-tabs__content) {
+      padding: 0px !important;
+    }
+  }
   .header {
     border-bottom: 1px solid rgb(230, 230, 230);
     justify-content: space-between;
@@ -713,6 +854,30 @@ export default {
     padding: 10px;
   }
 }
+.moreList {
+  width: 100%;
+  height: 168px;
+  list-style: none;
+  padding: 0;
+  margin: 0;
+  overflow: hidden;
+  overflow-y: auto;
+  li {
+    width: 100%;
+    height: 24px;
+    line-height: 24px;
+    // text-align: center;
+    // border: 1px solid #ccc;
+    // border-bottom: 0;
+    cursor: pointer;
+    // &:hover {
+    //   background: #7abfff;
+    // }
+  }
+  // li:last-child {
+  //   border-bottom: 1px solid #ccc;
+  // }
+}
 </style>
 <style lang="less">
 .popper-cascader {