Browse Source

Merge branch 'master' of http://114.244.114.158:8802/siwei/real3d-portalsite

gushoubang 10 months ago
parent
commit
c88dcc89df

+ 111 - 0
src/components/echartsTemplate/ratio.vue

@@ -0,0 +1,111 @@
+<template>
+  <div id="ratio_echart" ref="echart"></div>
+</template>
+
+<script>
+let option = {
+  title: [
+    {
+      text: "rate",
+      x: "center",
+      y: "35%",
+      textStyle: {
+        fontSize: 16,
+        color: "#fff",
+        fontWeight: "bold",
+      },
+    },
+    {
+      text: "关联率",
+      x: "center",
+      y: "55%",
+      borderColor: "#fff",
+      textStyle: {
+        fontWeight: "normal",
+        fontSize: 12,
+        color: "#fff",
+      },
+    },
+  ],
+  polar: {
+    center: ["50%", "55%"],
+    radius: ["65%", "95%"],
+  },
+  angleAxis: {
+    max: 100,
+    startAngle: 180,
+    show: false,
+  },
+  radiusAxis: {
+    type: "category",
+    show: true,
+    axisLabel: {
+      show: false,
+    },
+    axisLine: {
+      show: false,
+    },
+    axisTick: {
+      show: false,
+    },
+  },
+  series: [
+    {
+      data: [80],
+      name: "",
+      type: "bar",
+      roundCap: true,
+      showBackground: true,
+      // backgroundStyle: {
+      //   color: 'rgba(19, 84, 146, .4)',
+      // },
+      coordinateSystem: "polar",
+      itemStyle: {
+        normal: {
+          color: new echarts.graphic.LinearGradient(0, 1, 0, 0, [
+            {
+              offset: 0,
+              color: "#005DCF",
+            },
+            {
+              offset: 1,
+              color: "#00CCFF",
+            },
+          ]),
+        },
+      },
+    },
+  ],
+};
+export default {
+  name: "ratio_echart",
+  components: {},
+  data() {
+    return {
+      myChart: null,
+    };
+  },
+  methods: {
+    setOptions(cartData) {
+      if (!this.myChart) {
+        // var dom = document.getElementById("ratio_echart");
+        this.myChart = echarts.init(this.$refs.echart);
+      }
+      option.title[0].text = cartData.ratio + "%";
+      option.title[1].text = cartData.name;
+      option.series.data = [cartData.ratio];
+      this.myChart.resize();
+      this.myChart.setOption(option);
+    },
+  },
+  mounted() {
+    // this.setOptions();
+  },
+};
+</script>
+<style lang="scss" scoped>
+.ratio_echart {
+  width: 100%;
+  height: 100%;
+}
+</style>

+ 49 - 5
src/components/mapView/tablePage.vue

@@ -11,7 +11,7 @@
       row-class-name="datarow"
       fit
     >
-      <el-table-column label="序号" width="70px">
+      <el-table-column v-if="indexed" label="序号" width="70px">
         <template slot-scope="scope">{{ scope.$index + 1 }}</template>
       </el-table-column>
       <el-table-column
@@ -33,7 +33,7 @@
       </el-table-column>
     </el-table>
     <div class="tabs-pagation" v-if="table.data.length">
-      <div class="font">共{{ table.total }}条记录</div>
+      <div class="font" v-if="showTotal">共{{ table.total }}条记录</div>
       <!-- <el-pagination class="tabone-pagination" background layout="prev, pager, next" :current-page="pageNum"
             :pager-count="5" :page-size="5" :total="table.total" @current-change="changePage" /> -->
       <el-pagination
@@ -42,7 +42,7 @@
         :small="false"
         :disabled="false"
         :background="true"
-        layout="prev, pager, next, jumper,sizes"
+        :layout="layout"
         :page-sizes="[10, 15, 20, 30, 50]"
         :total="table.total"
         @size-change="handleSizeChange"
@@ -55,6 +55,10 @@
 export default {
   components: {},
   props: {
+    indexed: {
+      type: Boolean,
+      default: true,
+    },
     cloumn: {
       type: Array,
       default: [],
@@ -62,6 +66,14 @@ export default {
     table: {
       type: Object,
     },
+    showTotal: {
+      type: Boolean,
+      default: true,
+    },
+    layout: {
+      type: String,
+      default: "total, sizes, prev, pager, next, jumper",
+    },
   },
   data() {
     return {
@@ -95,7 +107,7 @@ export default {
 
 // searchFun()
 </script>
-  <style lang="scss" scoped>
+<style lang="scss" scoped>
 .el-table {
   height: calc(100% - 50px);
 }
@@ -103,5 +115,37 @@ export default {
   position: absolute;
   right: 30px;
 }
-//@import url(../assets/styles/tabs.scss);
+</style>
+  <style lang="scss" >
+.cont-table {
+  .el-pager li {
+    background-color: transparent !important;
+    // border: 1px solid #3ea6fe;
+    border-radius: 5px;
+  }
+
+  .el-pager li.active {
+    color: #3ea6fe !important;
+  }
+
+  .el-pagination button {
+    color: #dbdbdb;
+  }
+
+  .el-pagination .btn-prev,
+  .el-pagination .btn-next {
+    background-color: transparent;
+    // border: 1px solid #ebebeb;
+    border-radius: 5px;
+    line-height: 28px;
+  }
+  .el-pagination .btn-prev {
+    padding-right: 5px;
+  }
+  .el-pagination .btn-prev:hover {
+    color: #1890ff;
+  }
+}
+
+// @import url(./tabs.scss);
 </style>

+ 6 - 2
src/router/index.js

@@ -128,8 +128,12 @@ export const constantRoutes = [{
             import('@/views/ResourceShare/myReview/index.vue'),
         hidden: true
     },
-
-
+    {
+        path: '/Idleland',
+        component: () =>
+            import('@/views/Idleland/index.vue'),
+        hidden: true
+    },
     ]
 }, {
     path: '/login',

+ 148 - 0
src/views/Idleland/components/config.js

@@ -0,0 +1,148 @@
+export const ysForm = [
+  [
+    {
+      label: '',
+      prop: 'carNo',
+      span: 12,
+      component: 'ElInput',
+      componentProps: {
+        placeholder: '项目名称/土地使用人'
+      }
+    },
+    {
+      label: '',
+      prop: 'region',
+      span: 8
+    },
+    {
+      prop: 'action',
+      span: 4
+    }
+  ]
+]
+export const xzForm = [
+  [
+    {
+      label: '',
+      prop: 'carNo',
+      span: 8,
+      component: 'ElInput',
+      componentProps: {
+        placeholder: '土地使用人/土地证号'
+      }
+    },
+    {
+      label: '',
+      prop: 'region',
+      span: 6
+    },
+    {
+      label: '',
+      prop: 'type',
+      span: 6
+    },
+    {
+      prop: 'action',
+      span: 4
+    }
+  ]
+]
+
+export const TableHeader = [
+  { label: "项目名称", prop: "JGMC" },
+  { label: "面积(亩)", prop: "XQNAME", width: '80px' },
+  { label: "约定动工日期", prop: "type", },
+  { label: "操作", prop: "PHONE", slot: "action" },
+]
+export const TableHeader2 = [
+  { label: "土地使用权人", prop: "JGMC", },
+  { label: "面积(亩)", prop: "XQNAME", width: '80px' },
+  { label: "土地证号", prop: "type" },
+  { label: "操作", prop: "PHONE", slot: "action" },
+]
+
+// 详情字段
+export const detailInfos = [
+  [
+    [
+      { flag: 'label', value: '申请时间', span: 8 },
+      { flag: 'value', value: 'time', span: 16 }
+    ],
+    [
+      { flag: 'label', value: '申请部门', span: 8 },
+      { flag: 'value', value: 'carTypeName', span: 16 }
+    ]
+  ],
+  [
+    [
+      { flag: 'label', value: '数据服务', span: 8 },
+      { flag: 'value', value: 'carColorName', span: 16 }
+    ],
+    [
+      { flag: 'label', value: '数据类型', span: 8 },
+      { flag: 'value', value: 'carBrand', span: 16 }
+    ]
+  ],
+  [
+    [
+      { flag: 'label', value: ' 申请范围', span: 4 },
+      { flag: 'value', value: 'carPropertyName', span: 20 }
+    ],
+  ],
+  [[
+    { flag: 'label', value: '申请理由', span: 4 },
+    { flag: 'value', value: 'carModel', span: 20 }
+  ]],
+  [[
+    { flag: 'label', value: '系统名称', span: 4 },
+    { flag: 'value', value: 'vehicleNumber', unit: '人', span: 20 }
+  ]],
+  [[
+    { flag: 'label', value: '调用IP', span: 4 },
+    { flag: 'value', value: 'owner', span: 20 }
+  ]],
+  [[
+    { flag: 'label', value: '预期使用时间', span: 4 },
+    { flag: 'value', value: 'ownerPhone', span: 20 }
+  ]],
+  [[
+    { flag: 'label', value: '附件', span: 4 },
+    { flag: 'value', value: 'companyImage', span: 20, isslot: true }
+  ]]
+]
+export const shjlInfos = [
+  [[
+    { flag: 'label', value: '审核结果', span: 4 },
+    { flag: 'value', value: 'jg', span: 20 }
+  ]],
+  [[
+    { flag: 'label', value: '审核意见', span: 4 },
+    { flag: 'value', value: 'carTypeName', span: 20 }
+  ]],
+  [[
+    { flag: 'label', value: '有效截止日期', span: 4 },
+    { flag: 'value', value: 'carColorName', span: 20 }
+  ]],
+  [[
+    { flag: 'label', value: '审核人', span: 4 },
+    { flag: 'value', value: 'carPropertyName', span: 20 }
+  ]],
+  [[
+    { flag: 'label', value: '审核时间', span: 4 },
+    { flag: 'value', value: 'carModel', span: 20 }
+  ]],
+]
+export const chInfos = [
+  [[
+    { flag: 'label', value: '撤回时间', span: 4 },
+    { flag: 'value', value: 'carNo', span: 20 }
+  ]],
+  [[
+    { flag: 'label', value: '撤回原因', span: 4 },
+    { flag: 'value', value: 'carTypeName', span: 20 }
+  ]],
+]
+
+
+
+

+ 157 - 0
src/views/Idleland/components/details.vue

@@ -0,0 +1,157 @@
+<template>
+  <div class="conViews" v-if="isShallow">
+    <div class="sm-panel sm-function-module-query" v-drag>
+      <div class="sm-panel-header">
+        <span>
+          {{ type == 0 ? "疑似闲置" : type == 1 ? "闲置未处置" : "闲置已处置" }}
+          详情
+        </span>
+        <i class="el-icon-close" @click="closeInster"></i>
+      </div>
+      <el-tabs
+        type="border-card"
+        class="xz_box info"
+        v-model="activeTabs"
+        stretch
+      >
+        <el-tab-pane label="基本信息" name="jbxx">
+          <Info :data="jbxxData"></Info>
+        </el-tab-pane>
+        <el-tab-pane label="认定信息" name="rdxx" v-if="type != 0">
+          <Info :data="rdData" :fileList="fileList"></Info>
+        </el-tab-pane>
+        <el-tab-pane label="处置信息" name="czxx" v-if="type == 2">
+          <Info :data="rdData" :fileList="fileList"></Info>
+        </el-tab-pane>
+      </el-tabs>
+    </div>
+  </div>
+</template>
+  <script>
+import { getYZ, getgeoms } from "../../../api/ghss/gdbh.js";
+import { loadGeoJSON } from "@/utils/MapHelper/help.js";
+import Info from "./info.vue";
+let layerSources = {};
+export default {
+  props: {
+    interObj: {
+      type: Object,
+    },
+  },
+  components: {
+    Info,
+  },
+  data() {
+    return {
+      activeTabs: "jbxx",
+      isShallow: false,
+      jbxxData: null,
+      rdData: [],
+      tempdataLayerId: null,
+      type: 0,
+      fileList: [],
+      cellstyle: {
+        background: "rgba(10, 25, 38, 0.6)",
+        color: "#66b1ff",
+        fontSize: "14px",
+        fontFamily: "Microsoft YaHei",
+        fontWeight: "400",
+      },
+    };
+  },
+  mounted() {
+    // this.init();
+  },
+  methods: {
+    //关闭详情
+    closeInster() {
+      this.isShallow = false;
+      viewer.entities.removeAll();
+      viewer.dataSources.removeAll();
+    },
+
+    handleView(val, type) {
+      this.isShallow = true;
+      this.type = type;
+      //   getOneDetail({
+      //     bsm: this.interObj.bsm,
+      //     id: val.id,
+      //   }).then((res) => {
+      // this.getAll();
+      //     if (res.statuscode == 200) {
+      //       this.viewsData = res.data;
+      //       this.yzjgData = res.data.yzjg;
+      //       this.jbxxData = Object.keys(res.data.tbxx).map((key) => ({
+      //         name: key,
+      //         value: res.data.tbxx[key],
+      //       }));
+      //     } else {
+      //       this.$message.error(res.message);
+      //     }
+      //   });
+    },
+    flyTo(item) {
+      let id = "h_" + item.id;
+      this.tempdataLayerId = id;
+      loadGeoJSON(item.geom, "#ff0000", { isfly: true }, (data) => {
+        layerSources[id] = data;
+      });
+    },
+    getAll() {
+      getgeoms(this.interObj).then((res) => {
+        if (res.statuscode == 200) {
+          this.tableData = res.data.dataListMap;
+          this.active_tableData(res.data.dataListMap);
+        } else {
+          this.$message.error(res.message);
+        }
+      });
+    },
+    active_tableData(newVal) {
+      newVal.forEach((res, index) => {
+        res.type = "图斑上图";
+        if (res.geom)
+          loadGeoJSON(res.geom, "#55A1E3", { isfly: false }, (data) => {
+            layerSources[res.id] = data;
+          });
+      });
+    },
+  },
+  mounted() {},
+  watch: {
+    tempdataLayerId(newVal, oldVal) {
+      if (oldVal && layerSources[oldVal]) {
+        viewer.dataSources.remove(layerSources[oldVal]);
+        layerSources[oldVal] = null;
+      }
+    },
+  },
+};
+</script>
+  
+  <style lang="scss" scoped>
+/deep/ .el-icon-close:before {
+  position: absolute;
+  top: 10px;
+  right: 10px;
+  font-size: larger;
+  font-weight: bold;
+
+  &:hover {
+    color: aqua;
+  }
+}
+.sm-panel {
+  width: 400px;
+  max-width: 400px;
+}
+.inter_result {
+  // height: 580px;
+  height: 695px;
+}
+
+.sm-function-module-query {
+  max-height: 800px !important;
+  top: 28px !important;
+}
+</style>

+ 255 - 0
src/views/Idleland/components/handleModal.vue

@@ -0,0 +1,255 @@
+<template>
+  <div class="hanledialog">
+    <el-dialog
+      :title="`闲置土地${type == 'judge' ? '判定' : '处置'}`"
+      width="40%"
+      :visible.sync="dialogVisible"
+      :before-close="close"
+      :modal-append-to-body="false"
+      :close-on-click-modal="false"
+    >
+      <div class="content">
+        <div v-if="type == 'judge'">
+          <el-form :model="ruleForm" ref="ruleForm" label-width="100px">
+            <el-form-item label="认定结论:" prop="rdjl">
+              <el-select v-model="ruleForm.rdjl" size="mini">
+                <el-option
+                  v-for="item in optionList"
+                  :key="item.code"
+                  :label="item.name"
+                  :value="item.code"
+                >
+                </el-option>
+              </el-select>
+            </el-form-item>
+            <el-form-item label="闲置原因:" prop="xzyy">
+              <el-input size="mini" v-model="ruleForm.xzyy"></el-input>
+            </el-form-item>
+            <el-form-item label="闲置时间:" prop="xzsj">
+              <el-date-picker
+                size="mini"
+                v-model="ruleForm.xzsj"
+                type="date"
+                value-format="yyyy-MM-dd"
+                placeholder="选择日期"
+              >
+              </el-date-picker>
+            </el-form-item>
+            <el-form-item label="认定时间" prop="rdsj">
+              <el-date-picker
+                size="mini"
+                v-model="ruleForm.rdsj"
+                type="date"
+                value-format="yyyy-MM-dd"
+                placeholder="选择日期"
+              >
+              </el-date-picker>
+            </el-form-item>
+            <el-form-item label="认定依据" prop="rdyj">
+              <el-input
+                size="mini"
+                v-model="ruleForm.rdyj"
+                :rows="3"
+                type="textarea"
+              ></el-input>
+            </el-form-item>
+          </el-form>
+        </div>
+        <div v-else>
+          <el-form :model="ruleForm" ref="ruleForm" label-width="100px">
+            <el-form-item label="是否完成处置:" prop="sfwc">
+              <el-select v-model="ruleForm.sfwc" size="mini">
+                <el-option
+                  v-for="item in yesornoList"
+                  :key="item.code"
+                  :label="item.name"
+                  :value="item.code"
+                >
+                </el-option>
+              </el-select>
+            </el-form-item>
+            <el-form-item label="处置时间:" prop="czsj">
+              <el-date-picker
+                size="mini"
+                v-model="ruleForm.czsj"
+                type="date"
+                value-format="yyyy-MM-dd"
+                placeholder="选择日期"
+              >
+              </el-date-picker>
+            </el-form-item>
+            <el-form-item label="处置方式:" prop="czfs">
+              <el-input
+                size="mini"
+                v-model="ruleForm.czfs"
+                :rows="2"
+                type="textarea"
+              ></el-input>
+            </el-form-item>
+            <el-form-item label="处置情况:" prop="czqk">
+              <el-input
+                size="mini"
+                v-model="ruleForm.czqk"
+                :rows="2"
+                type="textarea"
+              ></el-input>
+            </el-form-item>
+          </el-form>
+        </div>
+        <div class="fileDiv">
+          <div class="block-title">
+            请上传相关认定材料:
+            <el-upload
+              class="upload-demo"
+              :on-change="handleChange"
+              :auto-upload="false"
+              :show-file-list="false"
+              :file-list="fileList"
+              :limit="1"
+              accept=".zip"
+            >
+              <el-button size="mini" type="primary">导入</el-button>
+            </el-upload>
+          </div>
+
+          <el-table :data="tofileList" height="200" style="width: 100%">
+            <el-table-column label="序号" width="70px">
+              <template slot-scope="scope">{{ scope.$index + 1 }}</template>
+            </el-table-column>
+            <el-table-column
+              show-overflow-tooltip="true"
+              prop="name"
+              label="文件名称"
+            >
+            </el-table-column>
+            <el-table-column label="操作" width="150px">
+              <template :slot-scope="{ row }">
+                <span class="usable" @click="del(row)"> 删除 </span>
+                <span class="usable" @click="download(row)"> 下载查看 </span>
+              </template>
+            </el-table-column>
+          </el-table>
+        </div>
+      </div>
+      <span slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submit">保存</el-button>
+        <el-button type="primary" @click="close">关闭</el-button>
+      </span>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+export default {
+  components: {},
+  props: {},
+  data() {
+    return {
+      dialogVisible: false,
+      type: "judge",
+      formData: {},
+      optionList: [
+        { code: 0, name: "不是闲置土地" },
+        { code: 1, name: "是闲置土地" },
+      ],
+      yesornoList: [
+        { code: 0, name: "是" },
+        { code: 1, name: "否" },
+      ],
+      ruleForm: { rdjl: 0 },
+      fileList: [],
+      tofileList: [{}],
+    };
+  },
+  created() {},
+  methods: {
+    // 关闭弹窗
+    close() {
+      this.dialogVisible = false;
+      this.$emit("close");
+    },
+    Init(rowdata, type) {
+      this.formData = rowdata;
+      this.type = type;
+      this.dialogVisible = true;
+    },
+    handleChange(file, fileList) {
+      if (fileList.length > 0) {
+        this.fileList = [fileList[fileList.length - 1]]; //这一步,是展示最后一次选择文件
+      }
+      const formdata = new FormData();
+      formdata.append("file", file.raw);
+      // ShapeUpload(formdata).then((res) => {
+      //   if (res.success) {
+      //   }
+      // });
+    },
+    download(obj) {
+      window.open(
+        window.axiosURI +
+          "/analyse/fzss/DownloadReport?filePath=" +
+          `${obj.fxbg}`
+      );
+    },
+    del(item) {
+      MessageBox.confirm(
+        "该操作将会删除此数据且不可恢复,您确定要删除吗?",
+        "提示",
+        {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning",
+        }
+      )
+        .then(() => {
+          Delect({ bsm: item.bsm }).then((res) => {
+            if (res.success) {
+              this.$message.success("删除成功!");
+              this.getFileList();
+            }
+          });
+        })
+        .catch(() => {});
+    },
+
+    getFileList() {},
+    async submit() {
+      this.close();
+    },
+  },
+};
+</script>
+
+<style lang="scss" scoped>
+.hanledialog {
+  .content {
+    height: 500px;
+    overflow-y: auto;
+    overflow-x: hidden;
+    color: #fff;
+    .fileDiv {
+      width: 100%;
+      padding-left: 20px;
+      padding-top: 20px;
+      position: relative;
+
+      .upload-demo {
+        position: absolute;
+        top: 5px;
+        right: 20px;
+      }
+    }
+  }
+}
+</style>
+<style lang="scss" >
+.hanledialog {
+  .el-form-item {
+    margin-bottom: 10px !important;
+  }
+  .el-date-editor.el-input,
+  .el-date-editor.el-input__inner {
+    width: 100%;
+  }
+}
+</style>

+ 63 - 0
src/views/Idleland/components/info.vue

@@ -0,0 +1,63 @@
+<template>
+  <div class="inter_result">
+    <el-table
+      :header-cell-style="cellstyle"
+      :data="data"
+      height="455"
+      style="width: 100%"
+    >
+      <el-table-column
+        show-overflow-tooltip="true"
+        prop="name"
+        label="属性名称"
+      >
+      </el-table-column>
+      <el-table-column show-overflow-tooltip="true" prop="value" label="属性值">
+      </el-table-column>
+    </el-table>
+    <div v-if="fileList">
+      相关材料
+      <el-table :data="fileList" height="200" style="width: 100%">
+        <el-table-column label="序号" width="70px">
+          <template slot-scope="scope">{{ scope.$index + 1 }}</template>
+        </el-table-column>
+        <el-table-column
+          show-overflow-tooltip="true"
+          prop="name"
+          label="文件名称"
+        >
+        </el-table-column>
+        <el-table-column label="操作" width="70px">
+          <template slot-scope="scope">
+            <span class="usable" @click="download(scope.row)"> 下载查看 </span>
+          </template>
+        </el-table-column>
+      </el-table>
+    </div>
+  </div>
+</template>
+
+<script>
+export default {
+  props: {
+    data: {
+      type: Array,
+    },
+    fileList: {
+      type: Array,
+    },
+  },
+  methods: {
+    download(obj) {
+      window.open(
+        window.axiosURI +
+          "/analyse/fzss/DownloadReport?filePath=" +
+          `${obj.fxbg}`
+      );
+    },
+  },
+};
+</script>
+
+<style>
+</style>

+ 305 - 0
src/views/Idleland/components/list.vue

@@ -0,0 +1,305 @@
+<template>
+  <div class="xzlist">
+    <div v-if="type == 1" class="xztype">
+      <span :class="{ usable: rdxz }" @click="changerdxz">
+        认定为闲置未处置情况
+      </span>
+      <span :class="{ usable: !rdxz }" @click="changerdxz">
+        认定为未非闲置情况
+      </span>
+    </div>
+    <custom-form ref="formRef" :model="pageObj" :config="formConfig">
+      <template #region>
+        <!-- clearable -->
+        <el-cascader
+          v-model="pageObj.id"
+          :show-all-levels="false"
+          :options="store.state.region_tree"
+          placeholder="行政区"
+          :props="{
+            checkStrictly: true,
+            expandTrigger: 'hover',
+            emitPath: false,
+          }"
+        ></el-cascader>
+      </template>
+      <template #type>
+        <el-select v-model="pageObj.placeCode" placeholder="闲置原因">
+          <el-option
+            v-for="item in optionList"
+            :key="item.code"
+            :label="item.name"
+            :value="item.code"
+          >
+          </el-option>
+        </el-select>
+      </template>
+      <template #action>
+        <el-button
+          size="mini"
+          type="primary"
+          icon="el-icon-search"
+          @click="getTableData"
+        >
+        </el-button>
+      </template>
+    </custom-form>
+    <div class="content">
+      <div class="item">
+        <p>项目数(个)</p>
+        <span>{{ table.total || 0 }} </span>
+      </div>
+      <div class="item">
+        <p>土地面积(亩)</p>
+        <span>{{ table.mj || 0 }} </span>
+      </div>
+    </div>
+    <tablePage
+      :class="'tablePage' + type"
+      :cloumn="cloumn"
+      :table="table"
+      :indexed="false"
+      :showTotal="false"
+      layout="prev, pager,next"
+      ref="tableDialogRef"
+      @currentChange="searchFun"
+    >
+      <template #action="{ row }">
+        <span class="usable" @click="detail(row)">详情</span>
+        <span class="usable" v-if="type == 0" @click="judge(row)"> 判定 </span>
+        <span class="usable" v-if="type == 1" @click="handle(row)"> 处置 </span>
+      </template>
+    </tablePage>
+    <div class="tip" v-if="type == 0">
+      说明:系统判断疑似闲置的条件(合同约定开工之日起仍未开工的项目)
+    </div>
+    <handleModal ref="handleRef"></handleModal>
+  </div>
+</template>
+
+<script>
+import tablePage from "@/components/mapView/tablePage.vue";
+import customForm from "@/components/mapView/custom-form.vue";
+import handleModal from "./handleModal.vue";
+import { GetPage } from "@/api/ghss/hgxfx.js";
+import { GetXzResList } from "../../../api/ghss/ghxz.js";
+
+import { ysForm, xzForm, TableHeader, TableHeader2 } from "./config";
+let dataSources;
+export default {
+  components: {
+    tablePage,
+    customForm,
+    handleModal,
+  },
+  props: {
+    type: {
+      type: String,
+    },
+    recordBsm: {
+      type: String,
+    },
+  },
+  data() {
+    return {
+      pageObj: {
+        kssj: "",
+        sj: [],
+        jssj: "",
+        xmmc: "",
+        page: 1,
+      },
+
+      datalist: [{}],
+      formConfig: ysForm,
+      cloumn: TableHeader,
+      optionList: [
+        { name: "政府原因", code: 0 },
+        { name: "企业原因", code: 1 },
+        { name: "非政府原因和不可抗力", code: 2 },
+        { name: "其他", code: 3 },
+      ],
+      table: {
+        data: [
+          { JGMC: "ssmdmm", type: 0, typeN: "正在审核" },
+          {
+            JGMC: "ssmdmm",
+            type: 1,
+            time: "2024/9/3",
+            typeN: "审核通过",
+            url: "snsd",
+            list: [
+              { time: "2024/9/3", jg: "申请通过" },
+              { time: "2024/8/13", jg: "申请通过" },
+            ],
+          },
+          {
+            JGMC: "ssmdmm",
+            type: 2,
+            typeN: "审核不通过",
+            list: [
+              { time: "2024/9/3", jg: "申请通过" },
+              { time: "2024/8/13", jg: "申请通过" },
+            ],
+          },
+          { JGMC: "ssmdmm", type: 3, typeN: "已撤回" },
+        ],
+        total: 20,
+      },
+      now: "",
+      // 闲置未处置
+      rdxz: true,
+    };
+  },
+  mounted() {
+    this.formConfig = this.$props.type == 0 ? ysForm : xzForm;
+    this.cloumn = this.$props.type == 0 ? TableHeader : TableHeader2;
+    this.getData();
+  },
+  methods: {
+    changetype() {
+      // switch (this.$props.type) {
+      //   case 0:
+      //     this.formConfig = ysForm;
+      //     break;
+      //   case 1:
+      //     this.formConfig = xzForm;
+      //     break;
+      //   case 2:
+      //     this.formConfig = ysForm;
+      //     break;
+      //   default:
+      //     break;
+      // }
+    },
+    getData() {
+      this.$emit("updateParent", "loading", true);
+      if (this.$props.type == "hgxfx") {
+        GetPage({ ...this.pageObj }).then((res) => {
+          setTimeout(() => {
+            this.$emit("updateParent", "loading", false);
+          }, 100);
+          this.listdisabled = res.data.length < 10;
+          this.datalist = [...this.datalist, ...res.data];
+        });
+      } else if (this.$props.type == "ghxz") {
+        //规划选址历史记录
+        let tempObj = { ...this.pageObj };
+        let obj = {
+          startTime: tempObj.kssj,
+          endTime: tempObj.jssj,
+          name: tempObj.xmmc,
+          pageNum: this.pageObj.page,
+          pageSize: 10,
+        };
+        GetXzResList(obj).then((res) => {
+          // setTimeout(() => {
+          //   this.$emit("updateParent", "loading", false);
+          // }, 100);
+          // this.datalist = [...this.datalist, ...res.data.items];
+        });
+      } else if (this.$props.type == "gdbh") {
+        //耕保历史记录
+        // SelectGdbhList({ ...this.pageObj }).then((res) => {
+        //   setTimeout(() => {
+        //     this.$emit("updateParent", "loading", false);
+        //   }, 100);
+        //   if (res.code == 200) {
+        //     this.listdisabled = res.rows.length < 10;
+        //     this.datalist = [...this.datalist, ...res.rows];
+        //   }
+        // });
+      }
+    },
+    addPolygon(geojson) {},
+    reset() {
+      if (dataSources) viewer.dataSources.remove(dataSources);
+      dataSources = undefined;
+    },
+    detail(row) {
+      this.bus.$emit("handleView", row, this.$props.type);
+    },
+    judge(row) {
+      this.$refs.handleRef.Init(row, "judge");
+    },
+    handle(row) {
+      this.$refs.handleRef.Init(row, "deal");
+    },
+    changerdxz() {
+      this.rdxz = !this.rdxz;
+      this.getData();
+    },
+  },
+  watch: {},
+  beforeDestroy() {
+    this.pageObj = {
+      kssj: "",
+      sj: [],
+      jssj: "",
+      xmmc: "",
+      page: 1,
+    };
+  },
+};
+</script>
+
+<style lang="scss" scoped>
+.xzlist {
+  width: 100%;
+  height: 100%;
+
+  .content {
+    width: 100%;
+    height: 50px;
+    margin: 10px 0;
+    background: #2e5a70;
+    border-radius: 5px;
+    padding-top: 5px;
+    .item {
+      width: 48%;
+      height: 100%;
+      display: inline-block;
+      position: relative;
+
+      text-align: center;
+      span {
+        font-family: "Arial Negreta", "Arial Normal", "Arial";
+        font-weight: 700;
+        font-style: normal;
+        color: #68f4fb;
+      }
+    }
+  }
+  .tablePage0,
+  .tablePage1 {
+    height: calc(100% - 160px);
+  }
+  .tablePage2 {
+    height: calc(100% - 120px);
+  }
+  .tip {
+    color: #f56c6c;
+  }
+  .xztype {
+    display: flex;
+    margin: 5px 0;
+    align-items: center;
+    justify-content: space-between;
+    span {
+      display: inline-block;
+      border: 1px solid #3f93f5;
+      border-radius: 5px;
+      padding: 0 10px;
+      line-height: 30px;
+    }
+  }
+}
+</style>
+
+<style lang="scss">
+.xzlist {
+  .el-col {
+    padding-right: 0 !important;
+  }
+}
+</style>

+ 192 - 0
src/views/Idleland/components/tjzl.vue

@@ -0,0 +1,192 @@
+<template>
+  <div class="thzl">
+    <div class="content">
+      <div class="item" v-for="(sd, index) in sdlist" :key="index">
+        <div class="icon">
+          <div class="iicon" :class="sd.value"></div>
+        </div>
+        <div class="text">
+          <p>土地面积(亩)</p>
+          <span>{{ sdata[sd.prop].mj || 0 }} </span>
+          <p>宗地数(宗)</p>
+          <span>{{ sdata[sd.prop].zd || 0 }} </span>
+        </div>
+      </div>
+    </div>
+    <div class="echartlist">
+      <div class="echars">
+        <ratio class="ratio_echart" ref="echartRef3"></ratio>
+        <ratio class="ratio_echart" ref="echartRef4"></ratio>
+      </div>
+      <div class="echars">
+        <div class="block-title">各区县闲置情况</div>
+        <barAndLine class="echart" ref="echartRef1"></barAndLine>
+      </div>
+      <div class="echars">
+        <div class="block-title">闲置原因</div>
+        <pie unit="亿元" class="pie_echart" ref="echartRef2"></pie>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import pie from "@/components/echartsTemplate/pie.vue";
+import ratio from "@/components/echartsTemplate/ratio.vue";
+import barAndLine from "@/views/cockpit/common/ThreeStackedBarAndLine.vue";
+import { QueryOne, QueryList } from "@/api/cockpitNew";
+export default {
+  data() {
+    return {
+      sdata: { ys: {}, rd: {}, ycz: {} },
+      sdlist: [
+        { name: "疑似闲置", prop: "ys" },
+        { name: "认定闲置", prop: "rd" },
+        { name: "已处置闲置", prop: "ycz" },
+      ],
+      jdData: {
+        legend_data: ["认定闲置土地", "已处置闲置土地", "闲置率", "处置率"],
+        x_data: [],
+        legendmap: [
+          { type: "bar" },
+          { type: "bar" },
+          { type: "line", color: "#D9001B" },
+          { type: "line" },
+        ],
+        yAxis: [{ name: "土地面积(亩)" }, { name: "比率(%)" }],
+      },
+    };
+  },
+  components: {
+    pie,
+    ratio,
+    barAndLine,
+  },
+  mounted() {
+    this.getData();
+  },
+  methods: {
+    changeData(name, updata) {
+      this[name] = updata;
+    },
+    getData() {
+      this.$emit("updateParent", "loading", true);
+      //   this.GetQueryOne();
+      this.GetQueryList();
+      this.GetSumList();
+      this.setEchart({ name: "土地闲置率", ratio: 56 }, 3);
+      this.setEchart({ name: "闲置处置率", ratio: 56 }, 4);
+    },
+    GetQueryOne() {
+      let params = {
+        jscType: `jsc_stxf_ztgh_ssxf`,
+        id: 4602,
+      };
+      QueryOne(params).then((res) => {
+        this.sdata = res.data || {};
+      });
+    },
+    GetQueryList() {
+      this.jdData.x_data = [];
+      this.jdData.result = [[], [], [], []];
+      let params = { jscType: `jsc_stxf_ssxf_jdfq`, id: 4602 };
+      QueryList(params).then((res) => {
+        res.data.forEach((jdData) => {
+          let jd = `${(jdData.dj - 1) * 20}-${jdData.dj * 20}`;
+          this.jdData.x_data.push(jd);
+          this.jdData.result[0].push(jdData.dj_number);
+          this.jdData.result[1].push(jdData.tzje);
+          this.jdData.result[2].push(20);
+          this.jdData.result[3].push(30);
+          this.$emit("updateParent", "loading", false);
+        });
+        this.setEchart(this.jdData, 1);
+      });
+    },
+    GetSumList() {
+      let data = [
+        { name: "政府原因", value: "13.45" },
+        { name: "企业原因", value: "5" },
+        { name: "非政府原因和不可抗力", value: "18.67" },
+        { name: "其他", value: "18.67" },
+      ];
+      this.setEchart({ data, type: '"horizontal"' }, 2);
+    },
+    setEchart(data, id) {
+      this.$nextTick(() => {
+        this.$refs[`echartRef${id}`].setOptions(data);
+      });
+    },
+  },
+};
+</script>
+
+<style lang="scss" scoped>
+.thzl {
+  height: 100%;
+  .content {
+    width: 100%;
+    height: 140px;
+    .item {
+      width: 32%;
+      height: 100px;
+      display: inline-block;
+      position: relative;
+      .icon {
+        width: 100%;
+        height: 50px;
+        display: flex;
+        justify-content: space-between;
+      }
+      .iicon {
+        background: no-repeat 50%;
+        background-image: url("/static/images/overview/icon_yrkkg.png");
+        width: 45px;
+        height: 45px;
+        flex: 1;
+      }
+      .num {
+        background-image: url("/static/images/overview/icon_yrkkg.png");
+      }
+      .mj {
+        background-image: url("/static/images/overview/icon_yrkkg.png");
+      }
+      .ztz {
+        background-image: url("/static/images/overview/icon_yrkkg.png");
+      }
+
+      .text {
+        display: inline-block;
+        // border: #00FFFF 1px solid;
+        width: 100%;
+        margin-bottom: 4px;
+        text-align: center;
+        margin-left: 0.3rem;
+        span {
+          font-family: "Arial Negreta", "Arial Normal", "Arial";
+          font-weight: 700;
+          font-style: normal;
+          color: #68f4fb;
+        }
+      }
+    }
+  }
+  .echartlist {
+    width: 100%;
+    height: calc(100% - 150px);
+    overflow-y: auto;
+    overflow-x: hidden;
+    .ratio_echart {
+      width: 180px;
+      height: 90px;
+      display: inline-block;
+    }
+    .echart {
+      height: 200px !important;
+    }
+    .pie_echart {
+      height: 180px;
+    }
+  }
+}
+</style>

+ 62 - 0
src/views/Idleland/components/xzgl.vue

@@ -0,0 +1,62 @@
+<template>
+  <div class="tpwjxm">
+    <el-tabs type="border-card" class="xz_box" v-model="activeTabs" stretch>
+      <el-tab-pane label="疑似闲置" name="distrust">
+        <List type="0"></List>
+      </el-tab-pane>
+      <el-tab-pane label="闲置未处置" name="notHandle">
+        <List type="1"></List>
+      </el-tab-pane>
+      <el-tab-pane label="闲置已处置" name="handled">
+        <List type="2"></List>
+      </el-tab-pane>
+    </el-tabs>
+  </div>
+</template>
+
+<script>
+let dataSources;
+import List from "./list.vue";
+export default {
+  components: {
+    List,
+  },
+  props: {},
+  data() {
+    return {
+      activeTabs: "distrust",
+    };
+  },
+  mounted() {},
+  methods: {
+    reset() {
+      // if (dataSources) viewer.dataSources.remove(dataSources);
+      // dataSources = undefined;
+    },
+  },
+  watch: {},
+  beforeDestroy() {
+    this.pageObj = {
+      kssj: "",
+      sj: [],
+      jssj: "",
+      xmmc: "",
+      page: 1,
+    };
+  },
+};
+</script>
+
+<style lang="scss" scoped>
+.tpwjxm {
+  width: 100%;
+  height: 100%;
+  .xz_box {
+    padding: 0;
+    height: 100%;
+  }
+}
+</style>
+
+<style lang="scss">
+</style>

+ 100 - 0
src/views/Idleland/index.vue

@@ -0,0 +1,100 @@
+<!--闲置土地-->
+<template>
+  <div class="ghzc complianceAnalysis">
+    <div class="innerContainer leftPane" v-drag>
+      <h2 class="Pangetitle darg-div">
+        <span class="pange_text">闲置土地</span>
+      </h2>
+      <el-tabs type="border-card" class="xz_box" v-model="activeTabs" stretch>
+        <el-tab-pane label="统计总览" name="tjzl">
+          <Tjzl
+            v-loading="loading"
+            @updateParent="changeData"
+            ref="tjzl"
+          ></Tjzl>
+        </el-tab-pane>
+        <el-tab-pane label="闲置管理" name="xzgl">
+          <Xzgl
+            v-loading="loading"
+            @updateParent="changeData"
+            ref="xzgl"
+          ></Xzgl>
+        </el-tab-pane>
+      </el-tabs>
+    </div>
+    <Details ref="detailModal"></Details>
+  </div>
+</template>
+
+<script>
+import Tjzl from "./components/tjzl.vue";
+import Xzgl from "./components/xzgl.vue";
+import Details from "./components/details.vue";
+// import TabelView from "./components/tabelView.vue";
+export default {
+  name: "complianceAnalysis",
+  components: {
+    Tjzl,
+    Xzgl,
+    Details,
+    // TabelView,
+  },
+  data() {
+    return {
+      loading: false,
+      activeTabs: "xzgl",
+    };
+  },
+  created() {},
+  mounted() {
+    this.bus.$on("handleView", this.handleView);
+  },
+  methods: {
+    changeData(name, updata) {
+      this[name] = updata;
+    },
+    handleView(row, type) {
+      console.log("handleView", this.$refs);
+      this.$refs.detailModal.handleView(row, type);
+    },
+  },
+  watch: {
+    activeTabs(newValue) {
+      // if (newValue != "tjzl") this.$refs.tjzl.reset();
+      if (newValue != "xzgl") this.$refs.xzgl.reset();
+
+      if (newValue == "tjzl") this.$refs.tjzl.getData();
+      if (newValue == "xzgl") {
+        this.$refs.xzgl.reset();
+        this.$refs.xzgl.changeForm();
+      }
+    },
+  },
+};
+</script>
+
+<style lang="scss" scoped>
+.complianceAnalysis {
+  .xz_box {
+    padding-bottom: 0;
+    .title {
+      padding: 8px;
+      margin-bottom: 10px;
+      span {
+        color: #605e5e;
+        padding-left: 8px;
+        border-left: 3px solid #3a8ee6;
+      }
+      button {
+        padding: 0;
+        float: right;
+        margin-right: 5px;
+        min-height: unset;
+      }
+    }
+  }
+}
+</style>
+<style lang="scss">
+@import "../complianceAnalysis/ghzc.scss";
+</style>

+ 1 - 3
src/views/ResourceShare/myApplication/index.vue

@@ -85,8 +85,6 @@ export default {
         placeCode: "", //所属小区
       },
       formConfig: FormConfig,
-      tableData: null,
-      details: {},
       cloumn: TableHeader,
       table: {
         data: [
@@ -128,7 +126,7 @@ export default {
       };
       let data = await QueryList(obj);
       this.active_dableData = data.data;
-      this.tableData = data.data;
+      this.tab.data = data.data;
     },
     // 详情
     detail(row) {

+ 0 - 2
src/views/ResourceShare/myReview/components/reviewModal.vue

@@ -111,8 +111,6 @@ export default {
   props: {},
   data() {
     return {
-      radio: "1",
-
       shjlInfos: shjlInfos,
 
       modelType: "info",

+ 84 - 0
src/views/ResourceShare/sharedLocation/components/fieldSetModal.vue

@@ -0,0 +1,84 @@
+<template>
+  <div class="dialog">
+    <el-dialog
+      :title="formData.JGMC"
+      width="40%"
+      :visible.sync="dialogVisible"
+      :before-close="close"
+      :modal-append-to-body="false"
+      :close-on-click-modal="false"
+    >
+      <div class="content">
+        <el-table
+          ref="multipleTable"
+          :data="fieldList"
+          style="width: 100%"
+          @selection-change="handleSelectionChange"
+        >
+          <el-table-column label="序号" width="70px">
+            <template slot-scope="scope">{{ scope.$index + 1 }}</template>
+          </el-table-column>
+          <el-table-column prop="label" label="字段名"> </el-table-column>
+          <el-table-column prop="name" label="中文名" show-overflow-tooltip>
+          </el-table-column>
+          <el-table-column label="是否可共享" width="150">
+            <template #default="{ row }">
+              <el-checkbox v-model="row.checked" @change="changeShare(row)">
+                可共享
+              </el-checkbox>
+            </template></el-table-column
+          >
+        </el-table>
+      </div>
+      <span slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submit">保存</el-button>
+        <el-button type="primary" @click="close">关闭</el-button>
+      </span>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+export default {
+  components: {},
+  props: {},
+  data() {
+    return {
+      formData: {},
+      fieldList: [{ label: "sc", name: "字段" }],
+      dialogVisible: false,
+    };
+  },
+  created() {},
+  methods: {
+    // 关闭弹窗
+    close() {
+      this.dialogVisible = false;
+      this.$emit("close");
+    },
+    Init(rowdata) {
+      this.formData = rowdata;
+      this.dialogVisible = true;
+    },
+    async submit() {
+      this.close();
+    },
+  },
+};
+</script>
+
+<style lang="scss" scoped>
+.dialog {
+  .content {
+    height: 400px;
+    overflow-y: auto;
+    overflow-x: hidden;
+    color: #fff;
+    .el-checkbox {
+      color: #fff;
+    }
+  }
+}
+</style>
+<style lang="scss" >
+</style>

+ 123 - 0
src/views/ResourceShare/sharedLocation/config.js

@@ -0,0 +1,123 @@
+export const FormConfig = [
+  [
+    {
+      label: '注册时间:',
+      prop: 'time',
+      span: 6
+    },
+    {
+      label: '服务类型:',
+      prop: 'type',
+      span: 5
+    },
+    {
+      label: '数据服务名称:',
+      prop: 'carNo',
+      span: 5,
+      component: 'ElInput',
+      componentProps: {
+        placeholder: '数据服务名称'
+      }
+    },
+    {
+      prop: 'action',
+      span: 5
+    }
+  ]
+]
+
+export const TableHeader = [
+  // 序号
+  { label: "数据服务名称", prop: "JGMC" },
+  { label: "服务类型", prop: "XQNAME" },
+  { label: "注册时间", prop: "time" },
+  { label: "服务地址", prop: "url" },
+  { label: "数据范围", prop: "PHONE", },
+  { label: "共享状态", prop: "PROPERTYNAME", slot: "type" },
+  { label: "操作", prop: "PHONE", slot: "action" },
+]
+// 详情字段
+export const detailInfos = [
+  [
+    [
+      { flag: 'label', value: '申请时间', span: 8 },
+      { flag: 'value', value: 'time', span: 16 }
+    ],
+    [
+      { flag: 'label', value: '申请部门', span: 8 },
+      { flag: 'value', value: 'carTypeName', span: 16 }
+    ]
+  ],
+  [
+    [
+      { flag: 'label', value: '数据服务', span: 8 },
+      { flag: 'value', value: 'carColorName', span: 16 }
+    ],
+    [
+      { flag: 'label', value: '数据类型', span: 8 },
+      { flag: 'value', value: 'carBrand', span: 16 }
+    ]
+  ],
+  [
+    [
+      { flag: 'label', value: ' 申请范围', span: 4 },
+      { flag: 'value', value: 'carPropertyName', span: 20 }
+    ],
+  ],
+  [[
+    { flag: 'label', value: '申请理由', span: 4 },
+    { flag: 'value', value: 'carModel', span: 20 }
+  ]],
+  [[
+    { flag: 'label', value: '系统名称', span: 4 },
+    { flag: 'value', value: 'vehicleNumber', unit: '人', span: 20 }
+  ]],
+  [[
+    { flag: 'label', value: '调用IP', span: 4 },
+    { flag: 'value', value: 'owner', span: 20 }
+  ]],
+  [[
+    { flag: 'label', value: '预期使用时间', span: 4 },
+    { flag: 'value', value: 'ownerPhone', span: 20 }
+  ]],
+  [[
+    { flag: 'label', value: '附件', span: 4 },
+    { flag: 'value', value: 'companyImage', span: 20, isslot: true }
+  ]]
+]
+export const shjlInfos = [
+  [[
+    { flag: 'label', value: '审核结果', span: 4 },
+    { flag: 'value', value: 'jg', span: 20 }
+  ]],
+  [[
+    { flag: 'label', value: '审核意见', span: 4 },
+    { flag: 'value', value: 'carTypeName', span: 20 }
+  ]],
+  [[
+    { flag: 'label', value: '有效截止日期', span: 4 },
+    { flag: 'value', value: 'carColorName', span: 20 }
+  ]],
+  [[
+    { flag: 'label', value: '审核人', span: 4 },
+    { flag: 'value', value: 'carPropertyName', span: 20 }
+  ]],
+  [[
+    { flag: 'label', value: '审核时间', span: 4 },
+    { flag: 'value', value: 'carModel', span: 20 }
+  ]],
+]
+export const chInfos = [
+  [[
+    { flag: 'label', value: '撤回时间', span: 4 },
+    { flag: 'value', value: 'carNo', span: 20 }
+  ]],
+  [[
+    { flag: 'label', value: '撤回原因', span: 4 },
+    { flag: 'value', value: 'carTypeName', span: 20 }
+  ]],
+]
+
+
+
+

+ 139 - 6
src/views/ResourceShare/sharedLocation/index.vue

@@ -1,17 +1,150 @@
 <template>
-  <div>
-    我是共享位置
+  <div class="ghzc ResourceShare">
+    <div class="innerContainer" v-drag>
+      <custom-form ref="formRef" :model="model" :config="formConfig">
+        <template #time>
+          <el-date-picker
+            v-model="model.sj"
+            type="daterange"
+            value-format="yyyy-MM-dd"
+            range-separator="~"
+            start-placeholder="开始日期"
+            end-placeholder="结束日期"
+            class="datepicker"
+            size="mini"
+            @change="changedate"
+          >
+          </el-date-picker>
+        </template>
+        <template #type>
+          <el-select v-model="model.placeCode" placeholder="申请状态">
+            <el-option
+              v-for="item in optionList"
+              :key="item.code"
+              :label="item.name"
+              :value="item.code"
+            >
+            </el-option>
+          </el-select>
+        </template>
+        <template #action>
+          <!-- v-hasPermi="['monitor:job:add']" -->
+          <el-button size="mini" @click="getTableData">查询</el-button>
+          <el-button size="mini" @click="reset()">重置</el-button>
+        </template>
+      </custom-form>
+      <!-- :total="table.total"
+    :tableArrDate="table.data" -->
+      <customForm></customForm>
+      <tablePage
+        class="tablePage"
+        :cloumn="cloumn"
+        :table="table"
+        ref="tableDialogRef"
+        @currentChange="searchFun"
+      >
+        <template #apptype="{ row }">
+          <div :class="`type${row.type}`">{{ row.typeN }}</div>
+        </template>
+        <template #type="{ row }">
+          <el-checkbox v-model="row.checked" @change="changeShare(row)">
+            共享
+          </el-checkbox>
+        </template>
+        <template #action="{ row }">
+          <span class="usable" @click="fieldset(row)">共享字段设置</span>
+        </template>
+      </tablePage>
+    </div>
+    <fieldSet ref="fieldSetModal" @close="closeMdel"></fieldSet>
   </div>
 </template>
 
 <script>
+// import Clipboard from "clipboard";
+import tablePage from "@/components/mapView/tablePage.vue";
+import customForm from "@/components/mapView/custom-form.vue";
+import fieldSet from "./components/fieldSetModal.vue";
+import { FormConfig, TableHeader } from "./config";
 export default {
+  components: {
+    tablePage,
+    customForm,
+    fieldSet,
+  },
+  props: {},
   data() {
-    return {};
+    return {
+      model: {
+        carNo: "", //网格名称
+        regionCode: "", //地区编码
+        placeCode: "", //所属小区
+      },
+      formConfig: FormConfig,
+      tableData: null,
+      details: {},
+      cloumn: TableHeader,
+      table: {
+        data: [
+          { JGMC: "ssmdmm", type: 0, typeN: "正在审核", checked: false },
+          {
+            JGMC: "ssmdmm",
+            type: 1,
+            time: "2024/9/3",
+            typeN: "审核通过",
+            url: "snsd",
+            checked: true,
+            list: [
+              { time: "2024/9/3", jg: "申请通过" },
+              { time: "2024/8/13", jg: "申请通过" },
+            ],
+          },
+          {
+            JGMC: "ssmdmm",
+            type: 2,
+            typeN: "审核不通过",
+            list: [
+              { time: "2024/9/3", jg: "申请通过" },
+              { time: "2024/8/13", jg: "申请通过" },
+            ],
+          },
+          { JGMC: "ssmdmm", type: 3, typeN: "已撤回" },
+        ],
+        total: 0,
+      },
+    };
+  },
+  methods: {
+    async getTableData(params) {
+      let obj = {
+        jscType: store.state.cockpit_vector.tablejscType,
+        beginTime: store.state.cockpit_date[0],
+        endTime: store.state.cockpit_date[1],
+        id: store.state.cockpit_region.id,
+        ...params,
+      };
+      let data = await QueryList(obj);
+      this.active_dableData = data.data;
+      this.tableData = data.data;
+    },
+    // 详情
+    fieldset(row) {
+      this.$refs.fieldSetModal.Init(row);
+    },
+    changeShare(row) {},
+    closeMdel() {},
   },
+  computed: {},
+  watch: {},
+  mounted() {},
 };
 </script>
-
-<style lang="less" scoped>
-
+<style lang="scss" scoped>
+@import "../resource.scss";
+.el-checkbox {
+  color: #fff;
+}
+</style>
+<style lang="scss">
+@import "../../cockpit/datePicker.scss";
 </style>

+ 34 - 43
src/views/cockpit/common/ThreeStackedBarAndLine.vue

@@ -94,13 +94,13 @@ export default {
                 }
                 ],
                 yAxis: [{
-                    name: '项目个数/个',
+                    name: obj.yAxis?obj.yAxis[0].name:'项目个数/个',
                     nameTextStyle: {
                         color: "#fff",
                         fontSize: 12,
                         padding: [0, 0, 4, 0], //name文字位置 对应 上右下左
                     },
-                    minInterval: 1, // 设置y轴的最小间隔为1
+                    minInterval:obj.yAxis?undefined: 1, // 设置y轴的最小间隔为1
                     axisLabel: {
                         interval: 0,
                         show: true,
@@ -120,7 +120,7 @@ export default {
                         }
                     },
                 }, {
-                    name: '面积/公顷',
+                    name: obj.yAxis?obj.yAxis[1].name:'面积/公顷',
                     nameTextStyle: {
                         color: "#fff",
                         fontSize: 12,
@@ -145,48 +145,39 @@ export default {
                         }
                     },
                 }],
-                series: [
-                    {
-
-                        name: obj.legend_data[0],
-                        type: 'line',
-                        smooth: true,
-                        itemStyle: {
-                            normal: {
-                                color: '#FFCC64'  // 折线的颜色
-                            }
-                        },
-                        yAxisIndex: 1, // 指定使用第二个Y轴  
-                        data: obj.line_data,
-                    }
-                    , {
-                        name: obj.legend_data[1],
-                        type: 'bar',
-                        stack: '渠道1',
-                        barWidth: 14,
-
-                        data: obj.result[0],
-                    },
-                    {
-                        name: obj.legend_data[2],
+                series: [],
+            }
+            if(!obj.legendmap)
+            obj.legendmap = [
+                { type: "line", data: obj.line_data },
+                { type: "bar",  data: obj.result[0] },
+                { type: "bar",  data: obj.result[1] },
+                { type: "bar",  data: obj.result[2] },
+            ];
+            obj.legendmap.forEach( (mapele,i) => {
+        if (mapele.type=='line') {
+          option.series.push({
+            name: obj.legend_data[i],
+            type: 'line',
+            smooth: true,
+            itemStyle: {
+              normal: {
+                color: mapele.color||'#FFCC64'  // 折线的颜色
+              }
+            },
+            yAxisIndex: 1, // 指定使用第二个Y轴
+            data: mapele.data||obj.result[i],
+          });
+        }else{
+            option.series.push({
+                        name: obj.legend_data[i],
                         type: 'bar',
-                        stack: '渠道2',
+                        stack: '渠道'+i,//stack相同上下显示
                         barWidth: 14,
-
-                        data: obj.result[1],
-                    },
-                    {
-                        name: obj.legend_data[3],
-                        barWidth: 14,
-
-                        type: 'bar',
-                        barWidth: 8,
-                        stack: '渠道1',
-                        data: obj.result[2],
-                    },
-                ],
-            }
-
+                        data: mapele.data||obj.result[i],
+        });
+    }   
+});
             this.chart.setOption(option);
 
         },

+ 9 - 2
src/views/cockpit/common/VectorSpace/BoxCommonVector.vue

@@ -5,7 +5,7 @@
         <span class="pange_textVector">{{ title }}</span>
         <slot name="title"></slot>
         <span class="clearBtn" @click="cockpit" v-if="!cockpit_vector.mapType">
-          <i class="el-icon-thumb" ></i>
+          <i class="el-icon-thumb"></i>
           图斑详情查询
         </span>
         <i class="el-icon-close" v-if="$route.path == '/overview'" @click="close"></i>
@@ -47,10 +47,11 @@
             :label="item">
           </el-table-column>
 
-          <el-table-column fixed="right" label="操作" width="50">
+          <el-table-column fixed="right" label="操作" :width="cockpit_vector.action ? 100 : 50">
             <template slot-scope="scope">
               <!-- <el-button @click="info(scope.row)" type="text" size="small">详情</el-button> -->
               <el-button @click="go(scope.row)" type="text" size="small">定位</el-button>
+              <el-button v-if="cockpit_vector.action" @click="start(scope.row)" type="text" size="small">开工</el-button>
             </template>
           </el-table-column>
         </el-table>
@@ -71,6 +72,7 @@
         </el-tab-pane>
       </el-tabs>
     </div>
+    <startWork ref="startWorkRef"></startWork>
   </div>
 </template>
 
@@ -83,11 +85,13 @@ import * as turf from "@turf/turf";
 import { loadGeoJSON } from "@/utils/MapHelper/help.js";
 import * as pick_cockpit_vector from "@/components/Query/clickQuery/pick_cockpit_vector.js";
 import CockpitVector from "@/components/Query/clickQuery/CockpitVector.vue";
+import startWork from "./startWorkModal.vue";
 let BoxCommonVector_entity = null;
 let layerSources = {};
 export default {
   components: {
     CockpitVector,
+    startWork,
   },
   props: {
     islist: {
@@ -114,6 +118,9 @@ export default {
     };
   },
   methods: {
+    start(item) {
+      this.$refs.startWorkRef.Init(item);
+    },
     closeIsShallow() {
       this.isShallow = false;
       this.details = [];

+ 91 - 0
src/views/cockpit/common/VectorSpace/startWorkModal.vue

@@ -0,0 +1,91 @@
+<template>
+  <div class="dialog">
+    <el-dialog
+      :title="formData['项目名称']"
+      width="40%"
+      :visible.sync="dialogVisible"
+      :before-close="close"
+      :modal-append-to-body="false"
+      :close-on-click-modal="false"
+    >
+      <div class="content">
+        <el-form :model="ruleForm" ref="ruleForm" label-width="100px">
+          <el-form-item label="是否开工:" prop="shjl">
+            <el-radio v-model="ruleForm.shjl" label="1"> 开工 </el-radio>
+            <el-radio v-model="ruleForm.shjl" label="2"> 不开工 </el-radio>
+          </el-form-item>
+          <el-form-item label="开工日期:" prop="jzrq">
+            <el-date-picker
+              v-model="ruleForm.jzrq"
+              type="date"
+              value-format="yyyy-MM-dd"
+              placeholder="选择日期"
+            >
+            </el-date-picker>
+          </el-form-item>
+        </el-form>
+      </div>
+      <span slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="close">关闭</el-button>
+        <el-button type="primary" @click="submit">确 定</el-button>
+      </span>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+export default {
+  components: {},
+  props: {},
+  data() {
+    return {
+      formData: {},
+      ruleForm: {},
+      dialogVisible: false,
+    };
+  },
+  created() {},
+  methods: {
+    // 关闭弹窗
+    close() {
+      this.dialogVisible = false;
+      this.$emit("close");
+    },
+    Init(rowdata) {
+      this.dialogVisible = true;
+      this.formData = rowdata;
+    },
+
+    async submit() {
+      this.close();
+    },
+  },
+};
+</script>
+
+<style lang="scss" scoped>
+.dialog {
+  .content {
+    height: 400px;
+    overflow-y: auto;
+    overflow-x: hidden;
+    color: #fff;
+    .create {
+      display: inline-block;
+      padding: 5px 10px;
+      border: 1px solid #3f93f5;
+      border-radius: 5px;
+      cursor: pointer;
+    }
+  }
+
+  .el-radio {
+    color: #fff;
+  }
+  .elrow {
+    margin-top: 10px;
+  }
+}
+</style>
+<style lang="scss" >
+</style>

+ 1 - 0
src/views/cockpit/tdsy.vue

@@ -1097,6 +1097,7 @@ export default {
         tableData: this.vector_data,
         word: "项目名称",
         tablejscType: 'jsc_tdgy_gy_zbmx',
+        action:"startWork",
         columns: [
           "项目名称",
           "供应方式",

+ 68 - 4
src/views/cockpit/ydjc.vue

@@ -18,7 +18,7 @@
       </el-select>
     </div>
     <!-- 临时用地(期限检测) -->
-    <div class="content">
+    <div class="content" v-show="value != 'xztd'">
       <div class="stacontent_ydjc">
         <div class="item cursor" @click="draw_vector">
           <div class="icon">
@@ -99,6 +99,33 @@
         </div>
       </div>
     </div>
+    <div class="content" v-show="value == 'xztd'">
+      <div class="stacontent_ydjc">
+        <div class="item cursor" @click="toIdleland">
+          <span class="dlabel"> 闲置土地:</span>
+          <span class="dvalue">{{ title.tb_num || 0 }}宗</span>
+          <i style="pointer-events: all" :class="{ 'el-icon-view': true }"></i>
+        </div>
+        <div class="item">
+          <span class="dlabel"> 闲置面积:</span>
+          <span class="dvalue">{{ title.tb_mj.toFixed(2) || 0 }}亩</span>
+        </div>
+        <div class="item">
+          <span class="dlabel">已处置面积:</span>
+          <span class="dvalue">{{ title.czmj }}亩</span>
+        </div>
+        <div class="item">
+          <span class="dlabel"> 处置率:</span>
+          <span class="dvalue">{{ title.czl }}</span>
+        </div>
+      </div>
+      <pie3d
+        id="ydjc_echart_xztd"
+        unit="亩"
+        :legendFlag="true"
+        ref="xztd_echart"
+      ></pie3d>
+    </div>
   </div>
 </template>
 
@@ -107,13 +134,13 @@
 import { QueryOne, QueryList } from "../../api/cockpitNew";
 import ThreeStackedBarAndLine from "./common/ThreeStackedBarAndLine.vue";
 import XZQHPieChart from "./common/XZQHPieChart.vue";
-
+import pie3d from "../../components/echartsTemplate/3dPie.vue";
 import Title from "./common/Title.vue";
 import parse from "wellknown";
 let columns1 = ["名称", "面积(平方米)"];
 let columns2 = ["建设项目", "总面积", "土地用途", "用地单位"];
 export default {
-  components: { ThreeStackedBarAndLine, Title, XZQHPieChart },
+  components: { ThreeStackedBarAndLine, Title, XZQHPieChart, pie3d },
   data() {
     return {
       options: [
@@ -121,11 +148,13 @@ export default {
         // { value: "lsyd_fkjc", label: "临时用地(复垦监测)" },
         { value: "lsyd", label: "临时用地" },
         { value: "nzyd", label: "农转用地" },
+        { value: "xztd", label: "闲置土地" },
       ],
       value: "lsyd",
       xzqh_flag: true,
       sdata: { lsyd: {}, nzyd: {} },
       list: [],
+      title: { tb_mj: 0 },
     };
   },
   //监听属性 类似于data概念
@@ -180,7 +209,7 @@ export default {
         };
 
         this.$refs.nzyd_echart.setOptions(obj);
-      } else {
+      } else if (this.value == "lsyd") {
         let obj = {
           legend_data: ["临时用地面积", "正常使用", "剩余1个月", "已到期"],
           x_data,
@@ -190,6 +219,19 @@ export default {
         this.$nextTick(() => {
           this.$refs.lsyd_echart.setOptions(obj);
         });
+      } else {
+        this.$nextTick(() => {
+          //data.data[0].ce_crmj
+          this.$refs.xztd.setOptions(
+            [
+              { name: "政府原因", value: 66 },
+              { name: "企业原因", value: 66 },
+              { name: "非政府原因和不可抗力", value: 20 },
+              { name: "其他", value: 100 },
+            ],
+            0.2
+          );
+        });
       }
     },
     GetQueryOne(params) {
@@ -232,6 +274,9 @@ export default {
         });
       }
     },
+    toIdleland() {
+      this.$router.push({ path: "/Idleland" });
+    },
     goDetail(item) {
       store.setViewerFlagb(false);
       store.setToolBarShow(false);
@@ -354,6 +399,12 @@ export default {
     color: #ecf6ff;
   }
 }
+#ydjc_echart_xztd {
+  width: 27rem;
+  height: 10rem;
+  position: absolute;
+  right: -1rem;
+}
 
 /deep/ {
   .el-select-dropdown__item.selected {
@@ -387,6 +438,19 @@ export default {
     display: inline-block;
     margin-top: 0.5rem;
     // border: #00FFFF 1px solid;
+    .dlabel {
+      color: #bcd3e5;
+      line-height: 24px;
+      text-align: left;
+    }
+
+    .dvalue {
+      font-weight: bold;
+      color: #64daff;
+      line-height: 16px;
+      text-align: left;
+      font-size: 12px;
+    }
   }
 
   .cursor {

+ 13 - 4
src/views/complianceAnalysis/ghzc.scss

@@ -93,8 +93,10 @@
             }
         }
 
+
+
         .el-form-item {
-            margin-bottom: 0 !important;
+            margin-bottom: 5px !important;
         }
 
         // .el-form-item__content {
@@ -136,6 +138,11 @@
                 }
             }
         }
+
+        .usable {
+            color: #3f93f5;
+            cursor: pointer;
+        }
     }
 
 
@@ -213,11 +220,12 @@
             color: #fff !important;
         }
 
-        .el-input__inner,.el-textarea__inner {
+        .el-input__inner,
+        .el-textarea__inner {
             color: #fff;
             background: #041c3273 !important;
             border: 1px dashed #0f7ac8;
-          }
+        }
 
         .el-input__inner:hover {
             // color: #fff;
@@ -229,7 +237,8 @@
             // color: #fff;
         }
 
-        .el-cascader--mini {
+        .el-cascader--mini,
+        .el-select {
             width: 100% !important;
         }
     }