21 changed files with 1768 additions and 458 deletions
			
			
		@ -1,5 +1,5 @@ | 
				
			|||
NODE_ENV=production | 
				
			|||
# VUE_APP_API_SERVER =  https://epmet-test.elinkservice.cn/api | 
				
			|||
VUE_APP_API_SERVER =  http://192.168.1.140/api | 
				
			|||
VUE_APP_API_SERVER =  https://epmet-test.elinkservice.cn/api | 
				
			|||
# VUE_APP_API_SERVER =  http://192.168.1.140/api | 
				
			|||
VUE_APP_NODE_ENV=prod:sit | 
				
			|||
VUE_APP_PUBLIC_PATH=epmet-oper | 
				
			|||
| 
		 After Width: | Height: | Size: 2.1 KiB  | 
| 
		 After Width: | Height: | Size: 2.1 KiB  | 
@ -0,0 +1,135 @@ | 
				
			|||
@import '../../c/config'; | 
				
			|||
@import '../../c/function'; | 
				
			|||
@import './c/common'; | 
				
			|||
 | 
				
			|||
.title { | 
				
			|||
  padding: 10px; | 
				
			|||
  font-size: 22px; | 
				
			|||
  font-family: PingFang SC; | 
				
			|||
  font-weight: 800; | 
				
			|||
  color: #ffffff; | 
				
			|||
  display: flex; | 
				
			|||
  align-items: center; | 
				
			|||
  position: relative; | 
				
			|||
 | 
				
			|||
  img { | 
				
			|||
    display: block; | 
				
			|||
    margin-right: 5px; | 
				
			|||
  } | 
				
			|||
  span { | 
				
			|||
    display: block; | 
				
			|||
  } | 
				
			|||
 | 
				
			|||
  .second-select { | 
				
			|||
    margin: 0 10px 0 40px; | 
				
			|||
 | 
				
			|||
    ::v-deep .el-input { | 
				
			|||
      width: 140px; | 
				
			|||
      height: 36px; | 
				
			|||
      .el-input__inner { | 
				
			|||
        height: 100%; | 
				
			|||
        padding: 0 10px; | 
				
			|||
        color: #fff; | 
				
			|||
        line-height: 36px; | 
				
			|||
        background: #06186d; | 
				
			|||
        border: 1px solid #1a64cc; | 
				
			|||
      } | 
				
			|||
      .el-icon-arrow-up:before { | 
				
			|||
        content: '\e78f'; | 
				
			|||
      } | 
				
			|||
    } | 
				
			|||
    ::v-deep .el-date-editor { | 
				
			|||
      .el-input__prefix { | 
				
			|||
        left: unset; | 
				
			|||
        right: 5px; | 
				
			|||
      } | 
				
			|||
    } | 
				
			|||
  } | 
				
			|||
 | 
				
			|||
  .cascader { | 
				
			|||
    ::v-deep .el-input { | 
				
			|||
      width: 220px; | 
				
			|||
    } | 
				
			|||
  } | 
				
			|||
  .status-select { | 
				
			|||
    position: absolute; | 
				
			|||
    top: 20px; | 
				
			|||
    right: 10px; | 
				
			|||
  } | 
				
			|||
  .second-select:last-child { | 
				
			|||
    margin-left: 0; | 
				
			|||
  } | 
				
			|||
} | 
				
			|||
 | 
				
			|||
.g-cpt-resi { | 
				
			|||
  display: flex; | 
				
			|||
  flex-direction: row; | 
				
			|||
  // flex-wrap: wrap; | 
				
			|||
  // justify-content: center; | 
				
			|||
  height: calc(100vh - 130px); | 
				
			|||
 | 
				
			|||
  .g-l { | 
				
			|||
    flex-shrink: 0; | 
				
			|||
    width: 600px; | 
				
			|||
    height: calc(100vh - 190px); | 
				
			|||
  } | 
				
			|||
 | 
				
			|||
  .g-r { | 
				
			|||
    text-align: center; | 
				
			|||
    margin: 40px 19px 20px; | 
				
			|||
    width: calc(100vw - 60px - 600px); | 
				
			|||
    height: calc(100vh - 140px - 20px); | 
				
			|||
  } | 
				
			|||
} | 
				
			|||
 | 
				
			|||
.g-r { | 
				
			|||
  .tb { | 
				
			|||
    position: relative; | 
				
			|||
    height: calc(100vh - 220px); | 
				
			|||
    overflow-y: auto; | 
				
			|||
    @include scrollBar; | 
				
			|||
 | 
				
			|||
    .m-pagination { | 
				
			|||
      position: absolute; | 
				
			|||
      box-sizing: border-box; | 
				
			|||
      right: 0; | 
				
			|||
      bottom: 0; | 
				
			|||
 | 
				
			|||
      width: 100%; | 
				
			|||
      height: 40px; | 
				
			|||
      display: flex; | 
				
			|||
      justify-content: flex-end; | 
				
			|||
 | 
				
			|||
      /deep/ .el-pagination.is-background .el-pager li:not(.disabled).active { | 
				
			|||
        background: #0266d1; | 
				
			|||
        color: #000d3f; | 
				
			|||
      } | 
				
			|||
 | 
				
			|||
      /deep/ .el-pagination .el-pager li { | 
				
			|||
        background: #002e74; | 
				
			|||
      } | 
				
			|||
 | 
				
			|||
      /deep/ .el-pagination .btn-prev { | 
				
			|||
        background: #002e74; | 
				
			|||
      } | 
				
			|||
 | 
				
			|||
      /deep/ .el-pagination .btn-next { | 
				
			|||
        background: #002e74; | 
				
			|||
      } | 
				
			|||
    } | 
				
			|||
  } | 
				
			|||
} | 
				
			|||
 | 
				
			|||
.echart-wr { | 
				
			|||
  margin-left: 30px; | 
				
			|||
  // margin-top: 100px; | 
				
			|||
  text-align: center; | 
				
			|||
  position: relative; | 
				
			|||
  width: 500px; | 
				
			|||
  height: 100%; | 
				
			|||
  box-sizing: border-box; | 
				
			|||
  .echart-org { | 
				
			|||
    width: 100%; | 
				
			|||
    height: 90%; | 
				
			|||
  } | 
				
			|||
} | 
				
			|||
@ -0,0 +1,135 @@ | 
				
			|||
@import '../../c/config'; | 
				
			|||
@import '../../c/function'; | 
				
			|||
@import './c/common'; | 
				
			|||
 | 
				
			|||
.title { | 
				
			|||
  padding: 10px; | 
				
			|||
  font-size: 22px; | 
				
			|||
  font-family: PingFang SC; | 
				
			|||
  font-weight: 800; | 
				
			|||
  color: #ffffff; | 
				
			|||
  display: flex; | 
				
			|||
  align-items: center; | 
				
			|||
  position: relative; | 
				
			|||
 | 
				
			|||
  img { | 
				
			|||
    display: block; | 
				
			|||
    margin-right: 5px; | 
				
			|||
  } | 
				
			|||
  span { | 
				
			|||
    display: block; | 
				
			|||
  } | 
				
			|||
 | 
				
			|||
  .second-select { | 
				
			|||
    margin: 0 10px 0 40px; | 
				
			|||
 | 
				
			|||
    ::v-deep .el-input { | 
				
			|||
      width: 140px; | 
				
			|||
      height: 36px; | 
				
			|||
      .el-input__inner { | 
				
			|||
        height: 100%; | 
				
			|||
        padding: 0 10px; | 
				
			|||
        color: #fff; | 
				
			|||
        line-height: 36px; | 
				
			|||
        background: #06186d; | 
				
			|||
        border: 1px solid #1a64cc; | 
				
			|||
      } | 
				
			|||
      .el-icon-arrow-up:before { | 
				
			|||
        content: '\e78f'; | 
				
			|||
      } | 
				
			|||
    } | 
				
			|||
    ::v-deep .el-date-editor { | 
				
			|||
      .el-input__prefix { | 
				
			|||
        left: unset; | 
				
			|||
        right: 5px; | 
				
			|||
      } | 
				
			|||
    } | 
				
			|||
  } | 
				
			|||
 | 
				
			|||
  .cascader { | 
				
			|||
    ::v-deep .el-input { | 
				
			|||
      width: 220px; | 
				
			|||
    } | 
				
			|||
  } | 
				
			|||
  .status-select { | 
				
			|||
    position: absolute; | 
				
			|||
    top: 20px; | 
				
			|||
    right: 10px; | 
				
			|||
  } | 
				
			|||
  .second-select:last-child { | 
				
			|||
    margin-left: 0; | 
				
			|||
  } | 
				
			|||
} | 
				
			|||
 | 
				
			|||
.g-cpt-resi { | 
				
			|||
  display: flex; | 
				
			|||
  flex-direction: row; | 
				
			|||
  // flex-wrap: wrap; | 
				
			|||
  // justify-content: center; | 
				
			|||
  height: calc(100vh - 130px); | 
				
			|||
 | 
				
			|||
  .g-l { | 
				
			|||
    flex-shrink: 0; | 
				
			|||
    width: 600px; | 
				
			|||
    height: calc(100vh - 190px); | 
				
			|||
  } | 
				
			|||
 | 
				
			|||
  .g-r { | 
				
			|||
    text-align: center; | 
				
			|||
    margin: 40px 19px 20px; | 
				
			|||
    width: calc(100vw - 60px - 600px); | 
				
			|||
    height: calc(100vh - 140px - 20px); | 
				
			|||
  } | 
				
			|||
} | 
				
			|||
 | 
				
			|||
.g-r { | 
				
			|||
  .tb { | 
				
			|||
    position: relative; | 
				
			|||
    height: calc(100vh - 220px); | 
				
			|||
    overflow-y: auto; | 
				
			|||
    @include scrollBar; | 
				
			|||
 | 
				
			|||
    .m-pagination { | 
				
			|||
      position: absolute; | 
				
			|||
      box-sizing: border-box; | 
				
			|||
      right: 0; | 
				
			|||
      bottom: 0; | 
				
			|||
 | 
				
			|||
      width: 100%; | 
				
			|||
      height: 40px; | 
				
			|||
      display: flex; | 
				
			|||
      justify-content: flex-end; | 
				
			|||
 | 
				
			|||
      /deep/ .el-pagination.is-background .el-pager li:not(.disabled).active { | 
				
			|||
        background: #0266d1; | 
				
			|||
        color: #000d3f; | 
				
			|||
      } | 
				
			|||
 | 
				
			|||
      /deep/ .el-pagination .el-pager li { | 
				
			|||
        background: #002e74; | 
				
			|||
      } | 
				
			|||
 | 
				
			|||
      /deep/ .el-pagination .btn-prev { | 
				
			|||
        background: #002e74; | 
				
			|||
      } | 
				
			|||
 | 
				
			|||
      /deep/ .el-pagination .btn-next { | 
				
			|||
        background: #002e74; | 
				
			|||
      } | 
				
			|||
    } | 
				
			|||
  } | 
				
			|||
} | 
				
			|||
 | 
				
			|||
.echart-wr { | 
				
			|||
  margin-left: 30px; | 
				
			|||
  // margin-top: 100px; | 
				
			|||
  text-align: center; | 
				
			|||
  position: relative; | 
				
			|||
  width: 500px; | 
				
			|||
  height: 100%; | 
				
			|||
  box-sizing: border-box; | 
				
			|||
  .echart-org { | 
				
			|||
    width: 100%; | 
				
			|||
    height: 90%; | 
				
			|||
  } | 
				
			|||
} | 
				
			|||
@ -0,0 +1,436 @@ | 
				
			|||
<template> | 
				
			|||
  <cpt-card> | 
				
			|||
    <div class="title"> | 
				
			|||
      <img src="@/assets/img/shuju/title-tip.png" /> | 
				
			|||
      <span>事件分类分析</span> | 
				
			|||
 | 
				
			|||
      <div class="second-select cascader"> | 
				
			|||
 | 
				
			|||
        <el-cascader class="customer_cascader" | 
				
			|||
                     ref="myCascader" | 
				
			|||
                     v-model="agencyIdArray" | 
				
			|||
                     :key="iscascaderShow" | 
				
			|||
                     :options="casOptions" | 
				
			|||
                     :props="optionProps" | 
				
			|||
                     @change="handleChangeAgency" | 
				
			|||
                     clearable></el-cascader> | 
				
			|||
      </div> | 
				
			|||
      <div class="second-select "> | 
				
			|||
 | 
				
			|||
        <el-date-picker v-model="dateId" | 
				
			|||
                        type="date" | 
				
			|||
                        :clearable="false" | 
				
			|||
                        @change="handleChangeDate" | 
				
			|||
                        prefix-icon="el-icon-caret-bottom" | 
				
			|||
                        placeholder="选择日期" | 
				
			|||
                        value-format="yyyyMMdd"> | 
				
			|||
        </el-date-picker> | 
				
			|||
 | 
				
			|||
      </div> | 
				
			|||
    </div> | 
				
			|||
 | 
				
			|||
    <div class="g-cpt-resi"> | 
				
			|||
      <div class="g-l"> | 
				
			|||
        <screen-echarts-frame class="echart-wr" | 
				
			|||
                              @myChartMethod="pieInitOk" | 
				
			|||
                              ref="pieChart"></screen-echarts-frame> | 
				
			|||
 | 
				
			|||
      </div> | 
				
			|||
      <div class="g-r"> | 
				
			|||
        <div class="m-tb"> | 
				
			|||
 | 
				
			|||
          <div class="tb"> | 
				
			|||
            <cpt-tb :col-list="demand.colList" | 
				
			|||
                    :loading="demand.loading" | 
				
			|||
                    :header="demand.header" | 
				
			|||
                    :list="demand.list"></cpt-tb> | 
				
			|||
 | 
				
			|||
            <div class="m-pagination"> | 
				
			|||
              <el-pagination :current-page="demand.pageNo" | 
				
			|||
                             :page-size="demand.pageSize" | 
				
			|||
                             :total="demand.total" | 
				
			|||
                             background | 
				
			|||
                             layout="prev, pager, next" | 
				
			|||
                             @current-change="handlePageNoChange_demand"> | 
				
			|||
              </el-pagination> | 
				
			|||
            </div> | 
				
			|||
          </div> | 
				
			|||
 | 
				
			|||
        </div> | 
				
			|||
 | 
				
			|||
      </div> | 
				
			|||
    </div> | 
				
			|||
  </cpt-card> | 
				
			|||
</template> | 
				
			|||
 | 
				
			|||
<script> | 
				
			|||
import { Loading } from "element-ui"; //引入Loading服务 | 
				
			|||
import { requestPost } from "@/js/dai/request"; | 
				
			|||
import cptCard from "@/views/modules/visual/cpts/card"; | 
				
			|||
import cptTb from "@/views/modules/visual/cpts/tb"; | 
				
			|||
import screenEchartsFrame from "@/views/modules/visual/components/screen-echarts-frame"; | 
				
			|||
 | 
				
			|||
import { pieOption } from './typePieOption.js' | 
				
			|||
 | 
				
			|||
 | 
				
			|||
export default { | 
				
			|||
  name: "HomeMap", | 
				
			|||
  data () { | 
				
			|||
    return { | 
				
			|||
      showNoData: false, | 
				
			|||
      timer: null, | 
				
			|||
      pieChartS: null, | 
				
			|||
      pieChart: '', | 
				
			|||
      pieOption: {}, | 
				
			|||
      pieInitState: false, | 
				
			|||
      pieTotal: 0, | 
				
			|||
      colorArray: [], | 
				
			|||
      pieData: [ | 
				
			|||
        { total: 1048, categoryName: '城市管理', color: '#1B51FF', selected: true }, | 
				
			|||
        { total: 735, categoryName: '为民服务', color: '#00E5ED' }, | 
				
			|||
        { total: 580, categoryName: '安全监管', color: '#7800FF' }, | 
				
			|||
        { total: 484, categoryName: '民政', color: '#16D783' }, | 
				
			|||
        { total: 300, categoryName: '环境保护', color: '#FF7800' }, | 
				
			|||
        { total: 1049, categoryName: '建设管理', color: '#FFBA00' }, | 
				
			|||
        { total: 735, categoryName: '街道吹哨部门报到', color: '#FFD685' }, | 
				
			|||
        { total: 580, categoryName: '社会治安综合', color: '#2A00FF' }, | 
				
			|||
        { total: 484, categoryName: '公安交通管理', color: '#C600FF' }, | 
				
			|||
        { total: 300, categoryName: '卫生计生监管执法', color: '#FF2A00' }, | 
				
			|||
        { total: 484, categoryName: '民生', color: '#3DDA83' }, | 
				
			|||
        { total: 300, categoryName: '街道安全', color: '#FAC126' } | 
				
			|||
      ], | 
				
			|||
 | 
				
			|||
      agencyId: '', | 
				
			|||
      dateId: '', | 
				
			|||
      categoryCode: '', | 
				
			|||
      demand: { | 
				
			|||
        loading: true, | 
				
			|||
        colList: [ | 
				
			|||
          { | 
				
			|||
            align: "center", | 
				
			|||
            width: "5%", | 
				
			|||
          }, | 
				
			|||
          { | 
				
			|||
            align: "center", | 
				
			|||
            width: "10%", | 
				
			|||
          }, | 
				
			|||
          { | 
				
			|||
            align: "center", | 
				
			|||
            width: "10%", | 
				
			|||
          }, | 
				
			|||
          { | 
				
			|||
            align: "center", | 
				
			|||
            width: "10%", | 
				
			|||
          }, | 
				
			|||
          { | 
				
			|||
            align: "center", | 
				
			|||
            width: "10%", | 
				
			|||
          }, | 
				
			|||
          { | 
				
			|||
            align: "center", | 
				
			|||
            width: "5%", | 
				
			|||
          }, | 
				
			|||
          { | 
				
			|||
            align: "center", | 
				
			|||
            width: "20%", | 
				
			|||
          }, | 
				
			|||
          { | 
				
			|||
            align: "center", | 
				
			|||
            width: "10%", | 
				
			|||
          }, | 
				
			|||
          { | 
				
			|||
            align: "center", | 
				
			|||
            width: "10%", | 
				
			|||
          }, | 
				
			|||
        ], | 
				
			|||
        header: ["序号", "项目编号", "类别", "反映渠道", "所属网格", "状态", "项目标题", "转成项目时间", "操作"], | 
				
			|||
        list: [], | 
				
			|||
        pageSize: 10, | 
				
			|||
        pageNo: 1, | 
				
			|||
        total: 0, | 
				
			|||
 | 
				
			|||
      }, | 
				
			|||
 | 
				
			|||
      casOptions: [], | 
				
			|||
      agencyIdArray: [], | 
				
			|||
      customerList: [], | 
				
			|||
      iscascaderShow: 0, | 
				
			|||
 | 
				
			|||
      optionProps: { | 
				
			|||
        multiple: false, | 
				
			|||
        value: 'agencyId', | 
				
			|||
        label: 'agencyName', | 
				
			|||
        children: 'subAgencyList', | 
				
			|||
        checkStrictly: true | 
				
			|||
      }, | 
				
			|||
 | 
				
			|||
    }; | 
				
			|||
  }, | 
				
			|||
  // mixins: [animate] | 
				
			|||
  beforeDestroy () { | 
				
			|||
    this.timer && clearInterval(this.timer) | 
				
			|||
  }, | 
				
			|||
 | 
				
			|||
  async mounted () { | 
				
			|||
    this.userId = this.uid; | 
				
			|||
    this.initData() | 
				
			|||
    await this.getAgencylist()//获取组织级别 | 
				
			|||
    this.getApiData(); | 
				
			|||
  }, | 
				
			|||
 | 
				
			|||
  methods: { | 
				
			|||
    initData () { | 
				
			|||
      var time = (new Date).getTime() - 24 * 60 * 60 * 1000; | 
				
			|||
      this.dateId = new Date(time); // 获取的是前一天日期 | 
				
			|||
 | 
				
			|||
    }, | 
				
			|||
    async getApiData () { | 
				
			|||
 | 
				
			|||
      await this.getPie() | 
				
			|||
      await this.getTable(); | 
				
			|||
    }, | 
				
			|||
 | 
				
			|||
    async getAgencylist () { | 
				
			|||
      const url = '/gov/org/customeragency/agencylist' | 
				
			|||
      // const url = 'http://yapi.elinkservice.cn/mock/102/gov/org/agency/agencylist' | 
				
			|||
 | 
				
			|||
      const params = { | 
				
			|||
        // customerId: '613cc61a6b8ce4c70d21bd413dac72cc' | 
				
			|||
        customerId: '0c41b272ee9ee95ac6f184ad548a30eb' | 
				
			|||
      } | 
				
			|||
      const { data, code, msg } = await requestPost(url, params) | 
				
			|||
      if (code === 0) { | 
				
			|||
        ++this.iscascaderShow | 
				
			|||
        this.casOptions = [] | 
				
			|||
        this.agencyIdArray.length = [] | 
				
			|||
 | 
				
			|||
        if (data) { | 
				
			|||
          this.casOptions.push(data) | 
				
			|||
        } | 
				
			|||
 | 
				
			|||
      } else { | 
				
			|||
        this.$message.error(msg) | 
				
			|||
      } | 
				
			|||
    }, | 
				
			|||
 | 
				
			|||
    handleChangeDate (value) { | 
				
			|||
 | 
				
			|||
      this.dateId = value | 
				
			|||
      this.getApiData() | 
				
			|||
    }, | 
				
			|||
 | 
				
			|||
 | 
				
			|||
    pieInitOk (dom) { | 
				
			|||
      console.log('pie准备好了', dom) | 
				
			|||
      this.pieChartS = dom | 
				
			|||
      this.pieInitState = true | 
				
			|||
 | 
				
			|||
    }, | 
				
			|||
    getPie () { | 
				
			|||
      if (this.pieInitState) { | 
				
			|||
        this.getPieChart() | 
				
			|||
      } else { | 
				
			|||
        setTimeout(() => { | 
				
			|||
          this.getPie() | 
				
			|||
        }, 500) | 
				
			|||
      } | 
				
			|||
    }, | 
				
			|||
    // 获取饼状图 | 
				
			|||
    async getPieChart () { | 
				
			|||
      this.$refs.pieChart.clear() | 
				
			|||
      this.pieTotal = 0 | 
				
			|||
      const _that = this | 
				
			|||
      // this.$refs.pieChart.showLoading() | 
				
			|||
      //  const url ="/data/aggregator/project/projectcategorylist"; | 
				
			|||
      const url = "http://yapi.elinkservice.cn/mock/245/data/aggregator/project/projectcategorylist"; | 
				
			|||
      let params = { | 
				
			|||
        agencyId: this.agencyId, | 
				
			|||
        dateId: this.dateId, | 
				
			|||
      }; | 
				
			|||
 | 
				
			|||
      const { data, code, msg } = await requestPost(url, params); | 
				
			|||
      // 获取pieChart配置 | 
				
			|||
 | 
				
			|||
      if (code === 0) { | 
				
			|||
        // 获取pieChart配置 | 
				
			|||
        this.pieOption = pieOption(this.pieChartS) | 
				
			|||
        if (data && data.length > 0) { | 
				
			|||
          // this.pieData = data | 
				
			|||
 | 
				
			|||
        } else { | 
				
			|||
          this.pieData = [{ total: 0, categoryName: '无分类', color: '#00E5ED' }] | 
				
			|||
        } | 
				
			|||
 | 
				
			|||
        let maxValue = this.pieData[0].total | 
				
			|||
        let maxIndex = 0 | 
				
			|||
        this.pieData[0].selected = true | 
				
			|||
        this.pieData.forEach((item, index) => { | 
				
			|||
          item.name = item.categoryName | 
				
			|||
          item.value = item.total | 
				
			|||
          this.colorArray.push(item.color) | 
				
			|||
          this.pieTotal = this.pieTotal + item.value | 
				
			|||
 | 
				
			|||
          if (item.value > maxValue) { | 
				
			|||
            maxValue = item.value | 
				
			|||
            maxIndex = index | 
				
			|||
            item.selected = true | 
				
			|||
          } else if (index !== 0) { | 
				
			|||
            item.selected = false | 
				
			|||
          } | 
				
			|||
 | 
				
			|||
        }); | 
				
			|||
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
        this.pieOption.title.text = this.pieTotal | 
				
			|||
        this.pieOption.series[1].itemStyle = { | 
				
			|||
          color: function (params) { | 
				
			|||
            return _that.colorArray[params.dataIndex] | 
				
			|||
          } | 
				
			|||
        } | 
				
			|||
 | 
				
			|||
 | 
				
			|||
        let fun = function (params) { | 
				
			|||
          _that.clickPie(params.dataIndex) | 
				
			|||
 | 
				
			|||
          _that.categoryCode = _that.pieData[params.dataIndex].categoryCode | 
				
			|||
          _that.getTable() | 
				
			|||
        } | 
				
			|||
        this.$refs.pieChart.handleClick(fun) | 
				
			|||
        this.clickPie(maxIndex) | 
				
			|||
      } else { | 
				
			|||
        this.$message.error(msg); | 
				
			|||
      } | 
				
			|||
 | 
				
			|||
    }, | 
				
			|||
 | 
				
			|||
    clickPie (seriesIndex) { | 
				
			|||
      this.pieData.forEach((element, index) => { | 
				
			|||
        if (index === seriesIndex) { | 
				
			|||
          element.label = { | 
				
			|||
            show: true, | 
				
			|||
 | 
				
			|||
          }; | 
				
			|||
          element.labelLine = { | 
				
			|||
            show: true, | 
				
			|||
            lineStyle: { | 
				
			|||
              opacity: 1, | 
				
			|||
            } | 
				
			|||
 | 
				
			|||
          }; | 
				
			|||
          console.log('zhilma') | 
				
			|||
 | 
				
			|||
        } else { | 
				
			|||
          element.label = { | 
				
			|||
            show: false, | 
				
			|||
 | 
				
			|||
          }; | 
				
			|||
          element.labelLine = { | 
				
			|||
            show: false, | 
				
			|||
            lineStyle: { | 
				
			|||
              opacity: 0, | 
				
			|||
              color: 'rgba(255,255,255,0)' | 
				
			|||
            } | 
				
			|||
 | 
				
			|||
          }; | 
				
			|||
 | 
				
			|||
        } | 
				
			|||
      }); | 
				
			|||
      this.pieOption.series[1].data = this.pieData | 
				
			|||
      // this.$refs.pieChart.hideLoading() | 
				
			|||
      this.$refs.pieChart.setOption(this.pieOption) | 
				
			|||
 | 
				
			|||
    }, | 
				
			|||
 | 
				
			|||
    handleChangeAgency (value) { | 
				
			|||
 | 
				
			|||
      this.agencyName = this.$refs["myCascader"].getCheckedNodes()[0].label | 
				
			|||
      this.agencyId = this.agencyIdArray.length > 0 ? this.agencyIdArray[this.agencyIdArray.length - 1] : '' | 
				
			|||
      this.getApiData() | 
				
			|||
      console.log(this.agencyIdArray) | 
				
			|||
    }, | 
				
			|||
 | 
				
			|||
    //加载组织数据 | 
				
			|||
    async getTable () { | 
				
			|||
      // const url = "/data/aggregator/project/categoryprojectlist"; | 
				
			|||
      const url = "http://yapi.elinkservice.cn/mock/245/data/aggregator/project/categoryprojectlist"; | 
				
			|||
      let params = { | 
				
			|||
        dateId: this.dateId, | 
				
			|||
        agencyId: this.agencyId, | 
				
			|||
        categoryCode: this.categoryCode, | 
				
			|||
        pageNo: this.demand.pageNo, | 
				
			|||
        pageSize: this.demand.pageSize, | 
				
			|||
        isPage: true | 
				
			|||
      }; | 
				
			|||
 | 
				
			|||
      const { data, code, msg } = await requestPost(url, params); | 
				
			|||
      this.demand.loading = false; | 
				
			|||
 | 
				
			|||
      if (code === 0) { | 
				
			|||
        this.demand.total = data.total; | 
				
			|||
        this.demand.list = data.list.map((item) => { | 
				
			|||
          //楼院小组:issue; 项目立项:agency 事件上报:resi_event【也可控制点击查看时里边三个按钮的显示】	 | 
				
			|||
          item.originShow = item.origin === 'issue' ? '楼院小组' : item.origin === 'agency' ? '项目立项' : '事件上报' | 
				
			|||
          //状态:待处理 pending,已结案closed	 | 
				
			|||
          item.statusShow = item.status === 'pending' ? '待处理' : '已结案' | 
				
			|||
          return [ | 
				
			|||
            { type: "index" }, | 
				
			|||
            item.projectCode, | 
				
			|||
            item.categoryNames.join(','), | 
				
			|||
            item.originShow, | 
				
			|||
            item.gridName, | 
				
			|||
            item.statusShow, | 
				
			|||
            item.title, | 
				
			|||
            item.time, | 
				
			|||
            { type: "operate", list: ["查看"] }, | 
				
			|||
          ]; | 
				
			|||
        }); | 
				
			|||
      } else { | 
				
			|||
        this.$message.error(msg); | 
				
			|||
      } | 
				
			|||
    }, | 
				
			|||
 | 
				
			|||
    handlePageNoChange_demand (val) { | 
				
			|||
      this.demand.pageNo = val; | 
				
			|||
      this.getTable(); | 
				
			|||
    }, | 
				
			|||
    toUserInfo (uid) { | 
				
			|||
      this.$router.push({ path: `/main-shuju/visual-basicinfo-people/${uid}` }); | 
				
			|||
    }, | 
				
			|||
  }, | 
				
			|||
  props: { | 
				
			|||
    uid: { | 
				
			|||
      type: String, | 
				
			|||
      default: "", | 
				
			|||
      // default: "8ada68cb6f1e4b9a8333348a39ef3aee", | 
				
			|||
    }, | 
				
			|||
  }, | 
				
			|||
 | 
				
			|||
  computed: {}, | 
				
			|||
 | 
				
			|||
  components: { | 
				
			|||
    cptCard, | 
				
			|||
    cptTb, | 
				
			|||
    screenEchartsFrame, | 
				
			|||
  }, | 
				
			|||
 | 
				
			|||
  watch: { | 
				
			|||
    uid (id) { | 
				
			|||
      this.userId = id; | 
				
			|||
    }, | 
				
			|||
    userId () { | 
				
			|||
      this.getApiData(); | 
				
			|||
      window.scrollTo(0, 0); | 
				
			|||
    }, | 
				
			|||
  }, | 
				
			|||
}; | 
				
			|||
</script> | 
				
			|||
 | 
				
			|||
<style | 
				
			|||
  lang="scss" | 
				
			|||
  src="@/assets/scss/modules/visual/distributionAnalyze.scss" | 
				
			|||
  scoped | 
				
			|||
></style> | 
				
			|||
 | 
				
			|||
<style lang=scss scoped> | 
				
			|||
</style> | 
				
			|||
@ -0,0 +1,77 @@ | 
				
			|||
import * as echarts from 'echarts' | 
				
			|||
export function lineOption () { | 
				
			|||
 | 
				
			|||
  return { | 
				
			|||
    | 
				
			|||
    xAxis: { | 
				
			|||
      type: 'category', | 
				
			|||
      // boundaryGap: false,
 | 
				
			|||
      axisLabel: { | 
				
			|||
        color: '#8ec7dc', | 
				
			|||
        fontSize: 16 | 
				
			|||
      }, | 
				
			|||
      axisTick: { | 
				
			|||
        show: false | 
				
			|||
      }, | 
				
			|||
      axisLine: { | 
				
			|||
        lineStyle: { | 
				
			|||
          color: '#0c4b59' | 
				
			|||
        } | 
				
			|||
      } | 
				
			|||
    }, | 
				
			|||
    yAxis: { | 
				
			|||
      nameTextStyle: { | 
				
			|||
        color: '#8ec7dc', | 
				
			|||
        fontSize: 18 | 
				
			|||
      }, | 
				
			|||
      splitNumber: 4, | 
				
			|||
      minInterval: 1, | 
				
			|||
      show: true, | 
				
			|||
      type: 'value', | 
				
			|||
      axisLabel: { | 
				
			|||
        color: '#8ec7dc', | 
				
			|||
        fontSize: 18 | 
				
			|||
      }, | 
				
			|||
      axisTick: { | 
				
			|||
        show: false | 
				
			|||
      }, | 
				
			|||
      splitLine: { | 
				
			|||
        lineStyle: { | 
				
			|||
          color: ['#145968'], | 
				
			|||
          type: 'dotted' | 
				
			|||
        } | 
				
			|||
      }, | 
				
			|||
      axisLine: { | 
				
			|||
        show: true, | 
				
			|||
        symbol: ['none', 'arrow'], | 
				
			|||
        symbolOffset: [0, 15], | 
				
			|||
        lineStyle: { | 
				
			|||
          color: '#0c4b59' | 
				
			|||
        } | 
				
			|||
      } | 
				
			|||
    }, | 
				
			|||
    series: [ | 
				
			|||
      { | 
				
			|||
        name: '项目数', | 
				
			|||
        type: 'line', | 
				
			|||
        barWidth: 15, | 
				
			|||
        areaStyle: {}, | 
				
			|||
        itemStyle: { | 
				
			|||
          color: new echarts.graphic.LinearGradient( | 
				
			|||
            0, 1, 0, 0, | 
				
			|||
            [ | 
				
			|||
              { offset: 0, color: 'rgba(121, 55, 255, 0)' }, | 
				
			|||
              { offset: 1, color: '#6339FF' } | 
				
			|||
            ] | 
				
			|||
          ) | 
				
			|||
        } | 
				
			|||
      }, | 
				
			|||
      // {
 | 
				
			|||
      //   data: [820, 932, 901, 934, 1290, 1330, 1320],
 | 
				
			|||
      //   type: 'line',
 | 
				
			|||
      //   areaStyle: {}
 | 
				
			|||
      // }
 | 
				
			|||
    ] | 
				
			|||
 | 
				
			|||
  } | 
				
			|||
} | 
				
			|||
@ -0,0 +1,179 @@ | 
				
			|||
 | 
				
			|||
export function pieOption (_charts) { | 
				
			|||
const center= ['50%', '250px'] | 
				
			|||
  return { | 
				
			|||
    title: { | 
				
			|||
      text: '0', | 
				
			|||
      top: 220, | 
				
			|||
      left: 'center', | 
				
			|||
      textStyle: { | 
				
			|||
        width: '100%', | 
				
			|||
        fontSize: 32, | 
				
			|||
        color: '#FFFFFF', | 
				
			|||
        fontWeight: 400 | 
				
			|||
      }, | 
				
			|||
      itemGap: 5, | 
				
			|||
      subtext: '总数', | 
				
			|||
      subtextStyle: { | 
				
			|||
        fontSize: 20, | 
				
			|||
        color: '#fff', | 
				
			|||
        fontWeight: 400 | 
				
			|||
      } | 
				
			|||
    }, | 
				
			|||
    tooltip: { | 
				
			|||
      show: false | 
				
			|||
    }, | 
				
			|||
    legend: { | 
				
			|||
      top: 500, | 
				
			|||
      bottom: 0, | 
				
			|||
      itemWidth: 20, | 
				
			|||
      itemHeight: 10, | 
				
			|||
      textStyle: { | 
				
			|||
        color: '#D2E7FF', | 
				
			|||
        fontSize: 16, | 
				
			|||
        lineHeight: 20, | 
				
			|||
      }, | 
				
			|||
     | 
				
			|||
    }, | 
				
			|||
    series: [ | 
				
			|||
      // 外侧圆环
 | 
				
			|||
      { | 
				
			|||
        type: 'pie', | 
				
			|||
        // 起始刻度的角度,默认为 90 度,即圆心的正上方。0 度为圆心的正右方。
 | 
				
			|||
        startAngle: 0, | 
				
			|||
        hoverAnimation: false, | 
				
			|||
        // tooltip: {
 | 
				
			|||
        // },
 | 
				
			|||
        center: center, | 
				
			|||
        radius: ['55%', '55.3%'], | 
				
			|||
        label: { | 
				
			|||
          show: false | 
				
			|||
        }, | 
				
			|||
        labelLine: { | 
				
			|||
          show: false | 
				
			|||
        }, | 
				
			|||
        data: [{ | 
				
			|||
          value: 360, | 
				
			|||
          itemStyle: { | 
				
			|||
            color: 'rgba(40, 101, 250, 0)', | 
				
			|||
            width:0, | 
				
			|||
            borderColor: 'rgba(40, 101, 250, 0.5)', | 
				
			|||
            borderWidth: 1, | 
				
			|||
            borderType: 'dotted' | 
				
			|||
          } | 
				
			|||
        } | 
				
			|||
        ] | 
				
			|||
      }, | 
				
			|||
 | 
				
			|||
      // 突出的
 | 
				
			|||
      { | 
				
			|||
        hoverAnimation: false, | 
				
			|||
        // name: 'Access From',
 | 
				
			|||
        type: 'pie', | 
				
			|||
        center: center, | 
				
			|||
        radius: ['40%', '60%'], | 
				
			|||
        avoidLabelOverlap: false, | 
				
			|||
        // top: top + '%',
 | 
				
			|||
        // height: '80%',
 | 
				
			|||
        selectedMode: 'single', | 
				
			|||
        left: 'center', | 
				
			|||
        width: 400, | 
				
			|||
        label: { | 
				
			|||
          // show: false,
 | 
				
			|||
          position: 'outside', | 
				
			|||
          alignTo: 'edge', | 
				
			|||
          // formatter: '{a|{c}}\n\n{name|{b}}',
 | 
				
			|||
          formatter: '{a|{c}}\n{r|}\n{name|{b}}', | 
				
			|||
          minMargin: 5, | 
				
			|||
          edgeDistance: 1, | 
				
			|||
          lineHeight: 15, | 
				
			|||
          color: '#fff', | 
				
			|||
          fontSize: 12, | 
				
			|||
          // distanceToLabelLine: -60,
 | 
				
			|||
          rich: { | 
				
			|||
            name: { | 
				
			|||
              padding: [0, 6, 0, 6] | 
				
			|||
            }, | 
				
			|||
            a: { | 
				
			|||
              fontSize: 30, | 
				
			|||
              color: '#fff', | 
				
			|||
              padding: [0, 6, 6, 6] | 
				
			|||
            }, | 
				
			|||
            r: { | 
				
			|||
              backgroundColor: 'auto', | 
				
			|||
              borderRadius: 6, | 
				
			|||
              width: 6, | 
				
			|||
              height: 6, | 
				
			|||
              // padding: [3, 3, 0, -12]
 | 
				
			|||
            } | 
				
			|||
          } | 
				
			|||
        }, | 
				
			|||
        labelLine: { | 
				
			|||
          show: false, | 
				
			|||
          smooth: 0.2, | 
				
			|||
          length: 30, | 
				
			|||
          length2: 0, | 
				
			|||
          maxSurfaceAngle: 80 | 
				
			|||
        }, | 
				
			|||
        labelLayout: function (params) { | 
				
			|||
           | 
				
			|||
          const isLeft = params.labelRect.x < _charts.getWidth() / 2; | 
				
			|||
          const points = params.labelLinePoints; | 
				
			|||
          // Update the end point.
 | 
				
			|||
          if (points) { | 
				
			|||
            points[2][0] = isLeft | 
				
			|||
            ? params.labelRect.x | 
				
			|||
            : params.labelRect.x + params.labelRect.width; | 
				
			|||
          } | 
				
			|||
           | 
				
			|||
          return { | 
				
			|||
            labelLinePoints: points | 
				
			|||
          }; | 
				
			|||
        }, | 
				
			|||
        itemStyle: { | 
				
			|||
          // color:function(params) {
 | 
				
			|||
          // //自定义颜色
 | 
				
			|||
          // var colorList = [          
 | 
				
			|||
          //       '#00FFFF', '#00FF00', '#FFFF00', '#FF8C00', '#FF0000', '#FE8463',
 | 
				
			|||
          //   ];
 | 
				
			|||
          //   return colorList[params.dataIndex]
 | 
				
			|||
          // }
 | 
				
			|||
        }, | 
				
			|||
        data: [], | 
				
			|||
 | 
				
			|||
      }, | 
				
			|||
         // 中间圆环
 | 
				
			|||
         { | 
				
			|||
          type: 'pie', | 
				
			|||
          // 起始刻度的角度,默认为 90 度,即圆心的正上方。0 度为圆心的正右方。
 | 
				
			|||
          startAngle: 0, | 
				
			|||
          hoverAnimation: false, | 
				
			|||
          center: center, | 
				
			|||
          // tooltip: {
 | 
				
			|||
          // },
 | 
				
			|||
          radius: ['0%', '25%'], | 
				
			|||
          label: { | 
				
			|||
           | 
				
			|||
              show: false | 
				
			|||
            | 
				
			|||
          }, | 
				
			|||
          labelLine: { | 
				
			|||
            | 
				
			|||
              show: false | 
				
			|||
           | 
				
			|||
          }, | 
				
			|||
          data: [{ | 
				
			|||
            value: 360, | 
				
			|||
            itemStyle: { | 
				
			|||
              normal: { | 
				
			|||
                color: 'rgba(8, 37, 134, 1)', | 
				
			|||
             | 
				
			|||
              } | 
				
			|||
            } | 
				
			|||
          } | 
				
			|||
          ] | 
				
			|||
        }, | 
				
			|||
    ] | 
				
			|||
 | 
				
			|||
  } | 
				
			|||
} | 
				
			|||
@ -0,0 +1,186 @@ | 
				
			|||
<template> | 
				
			|||
  <div class="m-pop"> | 
				
			|||
    <div class="wrap"> | 
				
			|||
      <cpt-card> | 
				
			|||
        <div class="title"> | 
				
			|||
          <img src="@/assets/img/shuju/title-tip.png" /> | 
				
			|||
          <span>需求详情</span> | 
				
			|||
        </div> | 
				
			|||
 | 
				
			|||
        <div class="btn-close" @click="handleClose"> | 
				
			|||
          <img src="@/assets/img/shuju/people/close.png" /> | 
				
			|||
        </div> | 
				
			|||
        <div class="list-title">需求内容</div> | 
				
			|||
        <div class="list-wr"> | 
				
			|||
          <div class="list"> | 
				
			|||
             | 
				
			|||
            <div class="item-desc"> | 
				
			|||
              <!-- <span class="item-field">所属网格:</span> --> | 
				
			|||
              <span>市北区同德花园小区物业管理服务,公司的同志每天对该小区 公共部位,喷洒消毒液进行消毒。为杀灭新型冠状病毒,近几 天以来,市北区</span> | 
				
			|||
            </div> | 
				
			|||
            <div class="item"> | 
				
			|||
              <span class="item-field">所属网格:</span> | 
				
			|||
              <span>哈哈哈</span> | 
				
			|||
            </div> | 
				
			|||
            <div class="item"> | 
				
			|||
              <span class="item-field">需求类型:</span> | 
				
			|||
              <span>的是法撒旦法</span> | 
				
			|||
            </div> | 
				
			|||
            <div class="item"> | 
				
			|||
              <span class="item-field">需求状态:</span> | 
				
			|||
              <span>第三方士大夫</span> | 
				
			|||
            </div> | 
				
			|||
            <div class="item"> | 
				
			|||
              <span class="item-field">上报类型:</span> | 
				
			|||
              <span>撒打发斯蒂芬</span> | 
				
			|||
            </div> | 
				
			|||
            <div class="item"> | 
				
			|||
              <span class="item-field">上 报 人:</span> | 
				
			|||
              <span>撒打发斯蒂芬</span> | 
				
			|||
            </div> | 
				
			|||
            <div class="item"> | 
				
			|||
              <span class="item-field">上报人联系方式:</span> | 
				
			|||
              <span>撒打发斯蒂芬</span> | 
				
			|||
            </div> | 
				
			|||
            <div class="item"> | 
				
			|||
              <span class="item-field">上报时间:</span> | 
				
			|||
              <span>2021-09-17 12:52</span> | 
				
			|||
            </div> | 
				
			|||
            <div class="item"> | 
				
			|||
              <span class="item-field">服务时间:</span> | 
				
			|||
              <span>2021-09-17 12:52</span> | 
				
			|||
            </div> | 
				
			|||
          </div> | 
				
			|||
          <div class="list"> | 
				
			|||
            <div class="item"> | 
				
			|||
              <span class="item-field">服务方:</span> | 
				
			|||
              <span>哈哈哈</span> | 
				
			|||
            </div> | 
				
			|||
            <div class="item"> | 
				
			|||
              <span class="item-field">实际服务时间:</span> | 
				
			|||
              <span>2021-09-17 12:52 至 <br/> | 
				
			|||
                2021-09-17 17:52</span> | 
				
			|||
            </div> | 
				
			|||
            <div class="item"> | 
				
			|||
              <span class="item-field">完成情况:</span> | 
				
			|||
              <span>第三方士大夫</span> | 
				
			|||
            </div> | 
				
			|||
            <div class="item"> | 
				
			|||
              <span class="item-field">评价:</span> | 
				
			|||
              <span> | 
				
			|||
                <el-rate value="4" disabled></el-rate> | 
				
			|||
              </span> | 
				
			|||
            </div> | 
				
			|||
          </div> | 
				
			|||
        </div> | 
				
			|||
 | 
				
			|||
        <div class="tabs"> | 
				
			|||
          <div | 
				
			|||
            class="tab-btn" | 
				
			|||
          > | 
				
			|||
            <img src="@/assets/img/shuju/people/arrow-double-left.png" /> | 
				
			|||
          </div> | 
				
			|||
          <div | 
				
			|||
            class="tab z-on" | 
				
			|||
          > | 
				
			|||
            研判分析 | 
				
			|||
          </div> | 
				
			|||
          <div | 
				
			|||
            class="tab-btn" | 
				
			|||
          > | 
				
			|||
            <img src="@/assets/img/shuju/people/arrow-double-right.png" /> | 
				
			|||
          </div> | 
				
			|||
        </div> | 
				
			|||
 | 
				
			|||
         | 
				
			|||
      </cpt-card> | 
				
			|||
    </div> | 
				
			|||
  </div> | 
				
			|||
</template> | 
				
			|||
 | 
				
			|||
<script> | 
				
			|||
import cptCard from "@/views/modules/visual/cpts/card"; | 
				
			|||
import { requestPost } from "@/js/dai/request"; | 
				
			|||
 | 
				
			|||
export default { | 
				
			|||
  name: "dialogInfo", | 
				
			|||
  props: { | 
				
			|||
    userId: { | 
				
			|||
      type: String, | 
				
			|||
      default: "", | 
				
			|||
    }, | 
				
			|||
    gridName: { | 
				
			|||
      type: String, | 
				
			|||
      default: "", | 
				
			|||
    }, | 
				
			|||
  }, | 
				
			|||
 | 
				
			|||
  components: { | 
				
			|||
    cptCard, | 
				
			|||
  }, | 
				
			|||
 | 
				
			|||
  data() { | 
				
			|||
    return { | 
				
			|||
      fieldList: [], | 
				
			|||
      groupList: [], | 
				
			|||
      groupIndex: 0, | 
				
			|||
      startGroupIndex: 0, | 
				
			|||
      info: {}, | 
				
			|||
      allInfo: {}, | 
				
			|||
 | 
				
			|||
      xiaoquList: [], | 
				
			|||
      louList: [], | 
				
			|||
      danyuanList: [], | 
				
			|||
      homeList: [], | 
				
			|||
    }; | 
				
			|||
  }, | 
				
			|||
 | 
				
			|||
   | 
				
			|||
  mounted() { | 
				
			|||
  }, | 
				
			|||
 | 
				
			|||
  methods: { | 
				
			|||
    handleClose() { | 
				
			|||
      this.$emit("close"); | 
				
			|||
    }, | 
				
			|||
  } | 
				
			|||
}; | 
				
			|||
</script> | 
				
			|||
 | 
				
			|||
<style lang="scss" src="@/assets/scss/modules/visual/people.scss" scoped></style> | 
				
			|||
<style lang="scss" scoped> | 
				
			|||
.m-pop { | 
				
			|||
  .wrap { | 
				
			|||
    .list { | 
				
			|||
      display: block; | 
				
			|||
      width: 50%; | 
				
			|||
      .item { | 
				
			|||
        display: flex; | 
				
			|||
        width: 100%; | 
				
			|||
        box-sizing: border-box; | 
				
			|||
        margin-top: 0; | 
				
			|||
        margin-bottom: 15px; | 
				
			|||
        font-size: 16px; | 
				
			|||
        cursor: pointer; | 
				
			|||
      } | 
				
			|||
      .item-desc { | 
				
			|||
        font-size: 16px; | 
				
			|||
        margin-bottom: 10px; | 
				
			|||
        line-height: 24px; | 
				
			|||
      } | 
				
			|||
    } | 
				
			|||
  } | 
				
			|||
  .list-title { | 
				
			|||
      width: 100%; | 
				
			|||
      box-sizing: border-box; | 
				
			|||
      padding: 20px 0 10px 62px; | 
				
			|||
      font-size: 20px; | 
				
			|||
      cursor: pointer; | 
				
			|||
    } | 
				
			|||
} | 
				
			|||
.list-wr { | 
				
			|||
  display: flex; | 
				
			|||
  padding: 0 32px; | 
				
			|||
   | 
				
			|||
} | 
				
			|||
</style> | 
				
			|||
					Loading…
					
					
				
		Reference in new issue