maxiaoxiao 2 månader sedan
förälder
incheckning
5dc557020a

+ 142 - 0
src/views/pageCode/statistic/progress/config.js

@@ -0,0 +1,142 @@
+
+export const FormConfig = [
+  [
+    {
+      label: "行政区",
+      prop: "state",
+      span: 5,
+    },
+    {
+      label: "监测时相",
+      prop: "time",
+      span: 5,
+    },
+    {
+      prop: "action",
+      span: 5,
+    },
+  ],
+]
+export const titles = {
+  all: "监测图斑",
+  judge: "合法性判定情况",
+  result: "图斑判定",
+}
+export const units = [
+  { name: "亩", id: "0" },
+  { name: "平方米", id: "1" },
+  { name: "平方千米", id: "1" },
+  { name: "公顷", id: "1" },
+]
+export const TableHeader = [
+  { label: "行政区", prop: "date", align: 'center' },
+  { label: "图斑数",  prop: "szxzc", width: '60px' },
+  { label: "图斑面积", prop: "name", align: 'center' },
+  // { label: "操作", slot: "action", width: '80px', align: 'center' },
+]
+export const judgeTable = [
+  { label: "行政区", prop: "zhmc", align: 'center' },
+  { label: "图斑数", prop: "szxzc", width: '60px' },
+  { label: "图斑面积",  prop: "name", width: '100px', align: 'center' },
+  {
+    label: "监测图斑", list: [
+      { label: "图斑数",  prop: "szxzc", width: '60px' },
+      { label: "图斑面积",  prop: "name", width: '100px', align: 'center' },]
+  },
+  {
+    label: "未判定图斑", list: [
+      { label: "图斑数",  prop: "szxzc", width: '60px' },
+      { label: "图斑面积",  prop: "name", width: '100px', align: 'center' },]
+  },
+  {
+    label: "已判定图斑(拆分前)", list: [
+      { label: "图斑数",  prop: "szxzc", width: '60px' },
+      { label: "图斑面积",  prop: "name", width: '100px', align: 'center' },]
+  },
+  {
+    label: "已判定图斑(拆分后)", list: [
+      { label: "图斑数",  prop: "szxzc", width: '60px' },
+      { label: "图斑面积",  prop: "name", width: '100px', align: 'center' },]
+  },
+
+]
+
+
+// 基本信息详情
+export const jbxxInfos = [
+  { label: '地质灾害隐患点名称', value: 'zhmc', },
+  { label: '所在辖区', value: 'szxq', },
+  { label: '所在行政村', value: 'szxzc', },
+  { label: '规模等级', value: 'gmdj', },
+  { label: '经度', value: 'lzb', },
+  { label: '纬度', value: 'bzb', },
+  { label: '威胁人数(人)', value: 'wxrs', },
+  { label: '防灾责任划分', value: 'fzzrhf', },
+  { label: '事权划分', value: 'sqhf', },
+]
+export const zgdwInfos = [
+  { label: '主管单位名称', value: 'zgdw_mc' },
+  { label: '责任领导/职务/电话', value: 'fzr', isslot: true },//zgdw_zrld/zgdw_zrldzw/zgdw_zrlddh
+  { label: '直接责任人/职务/电话', value: 'zjfzr', isslot: true },//zgdw_zjfzr/zgdw_zjfzrzw/zgdw_zjfzrdh
+]
+export const qcqfInfos = [
+  { label: '群测群防员', prop: 'qf_fzr' },
+  { label: '联系电话', prop: 'qf_fzrdh' },
+]
+
+// 检测资料
+// 隐患排查与整改情况
+export const yhpcInfos = [
+  { label: '排查责任单位', value: 'pc_pczrdw' },
+  { label: '排查负责人/联系电话', value: 'pcfzr', isslot: true },//pc_fzr/pc_fzrdh
+  { label: '警示标志', value: 'pc_jsbz' },
+  { label: '群测群防员配备', value: 'pc_qcqfypb' },
+  { label: '隔离防护设施', value: 'pc_glfhcs' },
+  { label: '其他问题隐患', value: 'pc_qtwtyh' },
+]
+
+export const yhzgInfos = [
+  { label: '整改责任单位', value: 'zg_zrdw' },
+  { label: '整改负责人/联系电话', value: 'zgfzr', isslot: true },//zg_fzr/zg_fzrdh
+  { label: '整改措施', value: 'zg_cs' },
+  { label: '整改进展情况', value: 'zg_jzqk' },
+  { label: '整改完成/预计整改完成时间', value: 'zg_jd' },
+  { label: '下一步防治整改计划', value: 'zg_xybfa' },
+]
+
+//应急预案
+export const yjyaInfos = [
+  { label: '地点', value: 'dd' },
+  { label: '基本情况', value: 'jbqk' },
+  { label: '引发因素', value: 'yfys' },
+  { label: '危害对象', value: 'whdx' },
+  { label: '预警等级', value: 'yujdj' },
+  { label: '预警方法', value: 'yujff' },
+  { label: '应急等级', value: 'yjdj' },
+  { label: '应急方法', value: 'yjff' },
+  { label: '撤离路线', value: 'cllx' },
+  { label: '避灾地点', value: 'bzdd' },
+]
+export const jszdInfos = [
+  { label: '姓名', value: 'jszdr_xm' },
+  { label: '电话', value: 'jszdr_dh' },
+  { label: '单位', value: 'jszdr_dw' },
+]
+export const timeInfos = [
+  { label: '编制时间', value: 'bzsj' },
+  { label: '修编时间', value: 'xbsj' },
+]
+
+export const fileHeader = [
+  { label: "资料名称", prop: "bz", align: 'center' },
+  { label: "时间", prop: "jc_date", width: '120px' },
+  { label: "操作", slot: "action", width: '80px', align: 'center' },
+]
+export const fzrHeader = [
+  { label: "负责人", prop: "fzr", align: 'center' },
+  { label: "姓名", prop: "xm", width: '80px ', },
+  { label: "电话", prop: "dh", align: 'center' },
+  { label: "责任", prop: "zr", align: 'center' },
+]
+
+

+ 231 - 216
src/views/pageCode/statistic/progress/index.vue

@@ -1,5 +1,5 @@
 <template>
-  <div class="app-container box">
+  <div class="app-container box progress">
     <div class="box-top">
       <customForm ref="formRef" :model="queryParams" :config="FormConfig">
         <template #action>
@@ -29,42 +29,106 @@
           </div>
         </div>
       </div>
-      <!-- <div class="box-content">
-      <div class="num">
-        <div class="num-item">
-          <div class="num-left"></div>
-          <div class="num-right">
-            <div class="num-item-title">总数</div>
-            <div class="num-item-text">{{ numParam.total || 0 }}</div>
-            <img src="" />
-          </div>
-        </div>
-      </div>
-    </div> -->
     </div>
-
     <div class="box-left">
-      <div class="box-left-content" style="position: relative; z-index: 99998">
+      <div class="box-left-content">
+        <div class="echartTitle">
+          <div class="block-title">{{ titles[route.query.type] }}</div>
+          <el-select
+            v-if="route.query.type == 'judge'"
+            clearable
+            v-model="judgetype"
+            placeholder="请选择判定类型"
+          >
+            <el-option
+              v-for="(item, index) in zllist.judge"
+              :key="index"
+              :label="item.name.replace(/\n/g, '')"
+              :value="index"
+            />
+          </el-select>
+          <el-select
+            v-else-if="route.query.type == 'result'"
+            clearable
+            v-model="resulttype"
+            placeholder="请选择判定类型"
+          >
+            <el-option
+              v-for="(item, index) in zllist.result"
+              :key="index"
+              :label="item.name.replace(/\n/g, '')"
+              :value="index"
+            />
+          </el-select>
+          <el-select v-model="ntype">
+            <el-option
+              v-for="item in typeoptions"
+              :key="item.id"
+              :label="item.name"
+              :value="item.id"
+            />
+          </el-select>
+        </div>
         <echarts-map
           ref="echartsMap"
+          class="map_echart"
           :mapData="mapGeoJson"
           :regionLevel="regionLevel"
           @mapClick="mapClick"
           @mapClicker="mapClicker"
         ></echarts-map>
       </div>
-
-      <div class="box-left-content" style="position: relative; z-index: 9999">
-        <el-table :data="tableData" style="width: 100%">
+      <div class="box-left-content">
+        <div class="echartTitle">
+          <div class="block-title">{{ titles[route.query.type] }}统计表</div>
+          <el-select v-model="nunit">
+            <el-option
+              v-for="item in units"
+              :key="item.id"
+              :label="item.name"
+              :value="item.id"
+            />
+          </el-select>
+        </div>
+        <el-table :data="tableData" class="table">
           <el-table-column
-            prop="date"
-            label="行政区"
-            width="150"
-            align="center"
-          />
-          <el-table-column label="图斑数" header-align="center" />
-          <el-table-column label="图斑面积" />
+            v-for="(columni, cindex) in judgeTable"
+            :key="cindex"
+            :prop="columni.prop"
+            :label="columni.label"
+            :width="columni.width"
+            :align="columni.align"
+          >
+            {{ columni.prop }}
+
+            <el-table-column
+              v-for="(child, chi) in columni.list || []"
+              :key="chi"
+              :prop="child.prop"
+              :label="child.label"
+              :width="child.width"
+              :align="child.align"
+            />
+
+            <!-- v-if' should be moved to the wrapper element -->
+            <!-- v-if="columni.list" -->
+          </el-table-column>
+          <el-table-column label="商业服务用地">
+            <el-table-column prop="name" label="图斑数" />
+            <el-table-column label="面积"> </el-table-column>
+          </el-table-column>
         </el-table>
+        <div class="echartTitle">
+          <div class="block-title">{{ titles[route.query.type] }}统计图</div>
+          <el-select v-model="ntype">
+            <el-option
+              v-for="item in typeoptions"
+              :key="item.id"
+              :label="item.name"
+              :value="item.id"
+            />
+          </el-select>
+        </div>
         <bar class="pie_echart" ref="echartRef"></bar>
       </div>
     </div>
@@ -75,6 +139,7 @@
 import customForm from "@/components/custom-form.vue";
 import EchartsMap from "@/components/echarts/EchartsMap.vue";
 import bar from "@/components/echarts/bar.vue";
+import { FormConfig, titles, units, TableHeader, judgeTable } from "./config";
 import { nextTick } from "vue";
 const route = useRoute();
 const router = useRouter();
@@ -82,18 +147,6 @@ const { proxy } = getCurrentInstance();
 const { sys_normal_disable } = proxy.useDict("sys_normal_disable");
 const echartRef = ref();
 const echartsMap = ref();
-const eData = ref({
-  xData: ["2020", "2021", "2022", "2023"],
-  yData: [
-    [-10, 10, 10, 10],
-    [-10, 10, 10, 10],
-    [-10, 10, 10, 10],
-  ],
-  legend: ["未判定", "已判定(拆分前)", "已判定(拆分后)"],
-  yName: "个",
-  stack: "ad",
-  barWidth:'20px'
-});
 const mapGeoJson = ref({
   type: "FeatureCollection",
   features: [
@@ -863,80 +916,31 @@ const mapGeoJson = ref({
     },
   ],
 });
-const FormConfig = ref([
-  [
-    {
-      label: "行政区",
-      prop: "state",
-      span: 5,
-    },
-    {
-      label: "监测时相",
-      prop: "time",
-      span: 5,
-    },
-    {
-      prop: "action",
-      span: 5,
-    },
-  ],
-]);
 const tableData = ref([
   {
     date: "2016-05-03",
     name: "Tom",
-    state: "California",
-    city: "Los Angeles",
-
-    zip: "CA 90036",
+    gs: 100,
   },
   {
     date: "2016-05-02",
     name: "Tom",
-    state: "California",
-    city: "Los Angeles",
-
-    zip: "CA 90036",
+    gs: 100,
   },
   {
     date: "2016-05-04",
     name: "Tom",
-    state: "California",
-    city: "Los Angeles",
-
-    zip: "CA 90036",
-  },
-  {
-    date: "2016-05-01",
-    name: "Tom",
-    state: "California",
-    city: "Los Angeles",
-
-    zip: "CA 90036",
-  },
-  {
-    date: "2016-05-08",
-    name: "Tom",
-    state: "California",
-    city: "Los Angeles",
-
-    zip: "CA 90036",
+    gs: 100,
   },
   {
-    date: "2016-05-06",
+    date: "2016-05-04",
     name: "Tom",
-    state: "California",
-    city: "Los Angeles",
-
-    zip: "CA 90036",
+    gs: 100,
   },
   {
-    date: "2016-05-07",
+    date: "2016-05-04",
     name: "Tom",
-    state: "California",
-    city: "Los Angeles",
-
-    zip: "CA 90036",
+    gs: 100,
   },
 ]);
 const data = reactive({
@@ -957,31 +961,62 @@ const data = reactive({
       { required: true, message: "角色顺序不能为空", trigger: "blur" },
     ],
   },
+  eData: {
+    xData: ["2020", "2021", "2022", "2023"],
+    yData: [
+      [-10, 10, 10, 10],
+      [-10, 10, 10, 10],
+      [-10, 10, 10, 10],
+    ],
+    legend: ["未判定", "已判定(拆分前)", "已判定(拆分后)"],
+    yName: "个",
+    stack: "ad",
+    barWidth: "20px",
+  },
 });
-const zllist = ref({
-  all: [
-    { name: "监测\n图斑" },
-    { name: "已举证\n图斑", prop: "zb", prop1: "zb", prop3: "%" },
-    { name: "县级\n已审核", prop: "zb", prop1: "zb", prop3: "%" },
-    { name: "市级\n已审核", prop: "zb", prop1: "zb", prop3: "%" },
-    { name: "省级\n已审核", prop: "zb", prop1: "zb", prop3: "%" },
-  ],
-  judge: [
-    { name: "监测\n图斑" },
-    { name: "未判定\n图斑", prop: "zb", prop1: "zb", prop3: "%" },
-    { name: "已判定\n图斑\n(拆分前)", prop: "zb", prop1: "zb", prop3: "%" },
-    { name: "已判定\n图斑\n(拆分后)", prop: "zb", prop1: "zb", prop3: "%" },
-  ],
-  result: [
-    { name: "已判定\n图斑" },
-    { name: "判定为\n合法用地", prop: "zb", prop1: "zb", prop3: "%" },
-    { name: "判定为\n违法用地", prop: "zb", prop1: "zb", prop3: "%" },
-    { name: "判定为\n其它用地", prop: "zb", prop1: "zb", prop3: "%" },
+const showdata = reactive({
+  zllist: {
+    all: [
+      { name: "监测\n图斑" },
+      { name: "已举证\n图斑", prop: "zb", prop1: "zb", prop3: "%" },
+      { name: "县级\n已审核", prop: "zb", prop1: "zb", prop3: "%" },
+      { name: "市级\n已审核", prop: "zb", prop1: "zb", prop3: "%" },
+      { name: "省级\n已审核", prop: "zb", prop1: "zb", prop3: "%" },
+    ],
+    judge: [
+      { name: "监测\n图斑" },
+      { name: "未判定\n图斑", prop: "zb", prop1: "zb", prop3: "%" },
+      { name: "已判定\n图斑\n(拆分前)", prop: "zb", prop1: "zb", prop3: "%" },
+      { name: "已判定\n图斑\n(拆分后)", prop: "zb", prop1: "zb", prop3: "%" },
+    ],
+    result: [
+      { name: "已判定\n图斑" },
+      { name: "判定为\n合法用地", prop: "zb", prop1: "zb", prop3: "%" },
+      { name: "判定为\n违法用地", prop: "zb", prop1: "zb", prop3: "%" },
+      { name: "判定为\n其它用地", prop: "zb", prop1: "zb", prop3: "%" },
+    ],
+  },
+
+  ntype: "0",
+  typeoptions: [
+    { name: "图斑数", id: "0" },
+    { name: "图斑面积", id: "1" },
   ],
+  nunit: "0",
+  judgetype: "",
+  resulttype: "",
 });
 const zldata = ref({});
-const { queryParams, form, rules } = toRefs(data);
+const { queryParams, form, rules, eData } = toRefs(data);
+const { zllist, typeoptions, ntype, nunit, judgetype, resulttype } =
+  toRefs(showdata);
 
+onMounted(() => {
+  nextTick(() => {
+    // 初始化主题样式
+    echartRef.value.setOptions(eData.value);
+  });
+});
 /** 查询角色列表 */
 function getList() {
   // loading.value = true;
@@ -992,10 +1027,6 @@ function getList() {
   //     loading.value = false;
   //   }
   // );
-  nextTick(() => {
-    // console.log(echartsMap.value, "echartsMap");
-    echartRef.value.setOptions(eData.value);
-  });
 }
 function setLnbh(data) {
   // this.eData.yName = `变化面积${this.unitList[this.nowunit].unit}`;
@@ -1011,11 +1042,29 @@ function setLnbh(data) {
 getList();
 </script>
 <style scoped lang="scss">
+.echartTitle {
+  width: 100%;
+  height: 40px;
+  display: flex;
+  justify-content: space-between;
+  border-bottom: 1px solid #166cad;
+  margin-right: 10px;
+  line-height: 40px;
+  font-weight: bold;
+  color: #409eff;
+  .block-title {
+    width: calc(100% - 320px);
+  }
+  .el-select {
+    width: 150px;
+  }
+}
 .box {
   background-size: 100% 100%;
   width: 100%;
   height: 100%;
   background: #f2f2f2;
+  padding: 15px;
   .box-top {
     background: #fff;
     padding: 10px;
@@ -1026,126 +1075,92 @@ getList();
     justify-content: space-between;
     align-items: flex-start;
     margin-top: 10px;
+
     &-content {
       background: #fff;
       width: calc(50% - 5px);
       height: 100%;
       z-index: 3;
+      padding: 10px;
+      // position: relative;
+      // z-index: 99998;
     }
   }
 }
-.gdzlc {
-  height: 80px;
-  display: flex;
-  justify-content: space-between;
+.progress {
+  .gdzlc {
+    height: 80px;
+    display: flex;
+    justify-content: space-between;
 
-  .item {
-    // width: 48%;
-    height: 75px;
-    background: #f2f2f2;
-    border-radius: 5px;
+    .item {
+      // width: 48%;
+      height: 75px;
+      background: #f2f2f2;
+      border-radius: 5px;
 
-    .icon {
-      width: 85px;
-      height: 100%;
-      display: inline-block;
+      .icon {
+        width: 85px;
+        height: 100%;
+        display: inline-block;
 
-      background: #0297d7;
-      text-align: center;
-      padding: 15px 10px;
-      .title {
-        // display: flex;
-        // align-items: center; /* 垂直居中 */
-        // justify-content: center;
+        background: #76b9ed;
+        text-align: center;
+        padding: 15px 10px;
+        .title {
+          // display: flex;
+          // align-items: center; /* 垂直居中 */
+          // justify-content: center;
+        }
+      }
+      .tree {
+        padding: 8px 10px;
+        line-height: 18px;
       }
-    }
-    .tree {
-      padding: 8px 10px;
-      line-height: 18px;
-    }
 
-    .text {
-      display: inline-block;
-      width: calc(100% - 85px);
-      text-align: center;
-      font-weight: bold;
-      padding: 5px 20px;
-      .ibolk {
+      .text {
         display: inline-block;
-        padding-right: 10px;
-      }
-      .progrestext {
-        padding-left: 10px;
-        border-left: 1px solid #d7d7d7;
-        .radio {
-          color: #f59a23;
+        width: calc(100% - 85px);
+        text-align: center;
+        font-weight: bold;
+        padding: 5px 20px;
+        .ibolk {
+          display: inline-block;
+          padding-right: 10px;
         }
-        .protitle {
-          font-weight: normal;
+        .progrestext {
+          padding-left: 10px;
+          border-left: 1px solid #d7d7d7;
+          .radio {
+            color: #f59a23;
+          }
+          .protitle {
+            font-weight: normal;
+          }
         }
       }
-    }
-    .higtext {
-      background: #81d3f8;
-      border: 2px solid #00ffff;
-      border-left: 0px;
+      .higtext {
+        background: #81d3f8;
+        border: 2px solid #00ffff;
+        border-left: 0px;
+      }
     }
   }
-}
-.box-content {
-  width: 100%;
-  height: 100%;
+  .map_echart {
+    height: calc(100% - 50px);
+  }
+  .table {
+    width: 100%;
+    height: calc(50% - 60px);
+    margin-top: 10px;
+  }
 
-  .num {
-    width: 80%;
-    margin: 0 auto;
-    display: flex;
-    justify-content: space-between;
-    .num-left {
-      height: 100%;
-      display: inline-block;
-      width: 65px;
-    }
-    .num-right {
-      height: 100%;
-      display: inline-block;
-      width: 65px;
-    }
-    &-item {
-      text-align: center;
-      &-title {
-        font-size: 14px;
-        font-weight: 400;
-        color: red;
-        line-height: 20px;
-        padding-bottom: 5px;
-      }
-      &-text {
-        font-size: 30px;
-        font-weight: 700;
-        color: #000;
-        line-height: 30px;
-      }
-      img {
-        margin-top: -29px;
-      }
-      .color1 {
-        color: #ff4141;
-      }
-      .color2 {
-        color: #fbca38;
-      }
-      .color3 {
-        color: #8cf347;
-      }
-    }
+  .pie_echart {
+    margin-top: 20px;
+    /* margin-left: 20px; */
+    width: 43vw;
+    height: 20vh;
   }
 }
-.pie_echart {
-  margin-top: 20px;
-  /* margin-left: 20px; */
-  width: 43vw;
-  height: 30vh;
-}
 </style>
 

+ 226 - 0
src/views/pageCode/statistic/summary.vue

@@ -0,0 +1,226 @@
+<template>
+  <div class="app-container">
+    <customForm ref="formRef" :model="queryParams" :config="FormConfig">
+      <template #link>
+        <el-select
+          v-model="pageObj.query_links"
+          placeholder="请选择实体关系"
+          clearable
+        >
+          <el-option
+            v-for="item in linkList"
+            :key="item.value"
+            :label="item.value"
+            :value="item.value"
+          >
+          </el-option>
+        </el-select>
+      </template>
+      <template #action>
+        <el-button type="primary" icon="Search" @click="handleQuery"
+          >搜索</el-button
+        >
+        <el-button icon="Refresh" @click="resetQuery">重置</el-button>
+      </template>
+    </customForm>
+    
+
+
+
+    <el-table :data="tableData" style="width: 100%">
+      <el-table-column prop="date" label="行政区" width="150" align="center" />
+      <el-table-column label="已判定图斑" header-align="center">
+        <el-table-column prop="name" label="图斑数" align="center" />
+        <el-table-column label="面积" align="center">
+          <el-table-column prop="state" label="图斑面积" width="120" />
+          <el-table-column prop="city" label="耕地面积" width="120" />
+          <el-table-column prop="zip" label="永久基本农田面积" />
+        </el-table-column>
+      </el-table-column>
+      <el-table-column label="合法用地">
+        <el-table-column prop="name" label="图斑数" />
+        <el-table-column label="面积">
+          <el-table-column prop="state" label="图斑面积" width="120" />
+          <el-table-column prop="city" label="耕地面积" width="120" />
+          <el-table-column prop="zip" label="永久基本农田面积" />
+        </el-table-column>
+      </el-table-column>
+      <el-table-column label="合法用地情形_已依法供地">
+        <el-table-column prop="name" label="图斑数" width="120" />
+        <el-table-column label="面积">
+          <el-table-column prop="state" label="图斑面积" width="120" />
+          <el-table-column prop="city" label="耕地面积" width="120" />
+          <el-table-column prop="zip" label="永久基本农田面积" />
+        </el-table-column>
+      </el-table-column>
+      <el-table-column label="合法用地情形XXXX">
+        <el-table-column prop="name" label="图斑数" />
+        <el-table-column label="面积">
+          <el-table-column prop="state" label="图斑面积" width="120" />
+          <el-table-column prop="city" label="耕地面积" width="120" />
+          <el-table-column prop="zip" label="永久基本农田面积" />
+        </el-table-column>
+      </el-table-column>
+      <el-table-column label="违法用地">
+        <el-table-column prop="name" label="图斑数" />
+        <el-table-column label="面积">
+          <el-table-column prop="state" label="图斑面积" width="120" />
+          <el-table-column prop="city" label="耕地面积" width="120" />
+          <el-table-column prop="zip" label="永久基本农田面积" />
+        </el-table-column>
+      </el-table-column>
+      <el-table-column label="违法用地情形_非依法新增建设用地">
+        <el-table-column prop="name" label="图斑数" width="120" />
+        <el-table-column label="面积">
+          <el-table-column prop="state" label="图斑面积" width="120" />
+          <el-table-column prop="city" label="耕地面积" width="120" />
+          <el-table-column prop="zip" label="永久基本农田面积" />
+        </el-table-column>
+      </el-table-column>
+      <el-table-column label="违法类型XXXX">
+        <el-table-column prop="name" label="图斑数" />
+        <el-table-column label="面积">
+          <el-table-column prop="state" label="图斑面积" width="120" />
+          <el-table-column prop="city" label="耕地面积" width="120" />
+          <el-table-column prop="zip" label="永久基本农田面积" />
+        </el-table-column>
+      </el-table-column>
+      <el-table-column label="其他用地">
+        <el-table-column prop="name" label="图斑数" />
+        <el-table-column label="面积">
+          <el-table-column prop="state" label="图斑面积" width="120" />
+          <el-table-column prop="city" label="耕地面积" width="120" />
+          <el-table-column prop="zip" label="永久基本农田面积" />
+        </el-table-column>
+      </el-table-column>
+    </el-table>
+    <!-- 表格数据 -->
+
+    <pagination
+      v-show="total > 0"
+      :total="total"
+      :page="queryParams.pageNum"
+      :limit="queryParams.pageSize"
+      @pagination="getList"
+    />
+  </div>
+</template>
+
+<script setup name="Role">
+import customForm from "@/components/custom-form.vue";
+
+const router = useRouter();
+const { proxy } = getCurrentInstance();
+const { sys_normal_disable } = proxy.useDict("sys_normal_disable");
+const FormConfig = ref([
+  [
+    {
+      label: "行政区",
+      prop: "state",
+      span: 5,
+    },
+    {
+      label: "监测时相",
+      prop: "time",
+      span: 5,
+    },
+    {
+      prop: "action",
+      span: 5,
+    },
+  ],
+]);
+const tableData = ref([
+  {
+    date: "2016-05-03",
+    name: "Tom",
+    state: "California",
+    city: "Los Angeles",
+
+    zip: "CA 90036",
+  },
+  {
+    date: "2016-05-02",
+    name: "Tom",
+    state: "California",
+    city: "Los Angeles",
+
+    zip: "CA 90036",
+  },
+  {
+    date: "2016-05-04",
+    name: "Tom",
+    state: "California",
+    city: "Los Angeles",
+
+    zip: "CA 90036",
+  },
+  {
+    date: "2016-05-01",
+    name: "Tom",
+    state: "California",
+    city: "Los Angeles",
+
+    zip: "CA 90036",
+  },
+  {
+    date: "2016-05-08",
+    name: "Tom",
+    state: "California",
+    city: "Los Angeles",
+
+    zip: "CA 90036",
+  },
+  {
+    date: "2016-05-06",
+    name: "Tom",
+    state: "California",
+    city: "Los Angeles",
+
+    zip: "CA 90036",
+  },
+  {
+    date: "2016-05-07",
+    name: "Tom",
+    state: "California",
+    city: "Los Angeles",
+
+    zip: "CA 90036",
+  },
+]);
+const data = reactive({
+  form: {},
+  queryParams: {
+    pageNum: 1,
+    pageSize: 10,
+    roleName: undefined,
+    roleKey: undefined,
+    status: undefined,
+  },
+  rules: {
+    roleName: [
+      { required: true, message: "角色名称不能为空", trigger: "blur" },
+    ],
+    roleKey: [{ required: true, message: "权限字符不能为空", trigger: "blur" }],
+    roleSort: [
+      { required: true, message: "角色顺序不能为空", trigger: "blur" },
+    ],
+  },
+});
+
+const { queryParams, form, rules } = toRefs(data);
+
+/** 查询角色列表 */
+function getList() {
+  // loading.value = true;
+  // listRole(proxy.addDateRange(queryParams.value, dateRange.value)).then(
+  //   (response) => {
+  //     roleList.value = response.rows;
+  //     total.value = response.total;
+  //     loading.value = false;
+  //   }
+  // );
+}
+
+getList();
+</script>