feige
2025-05-20 f1c72b7eb3d844a77fd8e563024e0e9cd364f530
ruoyi-ui/src/views/meeting/statistics.vue
@@ -29,7 +29,7 @@
      <hr />
      <el-table :data="tableData" border :header-cell-style="{ background: 'pink', fontSize: '13px', color: 'black' }"
      <el-table :data="meetingList" border :header-cell-style="{ background: 'pink', fontSize: '13px', color: 'black' }"
        :row-class-name="tableRowClassName" :row-key="getRowId">
        <el-table-column label="家庭号" prop="familyId" sortable align="center">
          <template slot-scope="scope">{{ scope.row.familyId
@@ -62,9 +62,9 @@
        </el-table-column>
        <el-table-column label="状态" prop="status" sortable align="center">
          <template slot-scope="scope">{{ scope.row.status
        ? scope.row.status : '————' }}</template>
          <template slot-scope="scope">{{scope.row.status===1? '结案': '未结案'}}</template>
        </el-table-column>
        <el-table-column label="操作" align="center" width="200" class-name="small-padding fixed-width">
          <template slot-scope="scope" v-if="scope.row.roleId !== 1">
@@ -77,15 +77,33 @@
        </el-table-column>
      </el-table>
      <pagination
        v-show="total>0"
        :total="total"
        :page.sync="queryParams.pageNum"
        :limit.sync="queryParams.pageSize"
        @pagination="getList"
        style="background: #FEF7FC;"
      />
      <!-- 图表统计 -->
      <el-dialog :title="title2" :visible.sync="open2" width="1500px" @open="open1()" append-to-body>
        <!-- class="p1" -->
      <el-dialog :title="title2" :visible.sync="open2" width="1500px" @open="openGraph()" append-to-body>
            <div>
                年份
        <el-select v-model="years" id="yearSelect"
                  placeholder="请选择年份" clearable
                   style="width: 240px;
                   height: 35px;
                   border-radius: 16px 16px 16px 16px;
                   opacity: 0.5;" filterable allow-create
                   @change="selectValue">
          <el-option v-for="item in yearOptions"
            :key="item.value" :label="item.label" :value="item.value"/>
        </el-select>
              </div>
        <div class="p1" id="main1">
          <!-- <h1 style="font-size:21px">每月会议次数统计</h1> -->
        </div>
        <div class="p1" id="main2">
          <!-- <h1 style="font-size:21px">会议家庭占比统计</h1> -->
        </div>
      </el-dialog>
      <!-- 新增数据框 -->
@@ -151,8 +169,20 @@
  <script>
import * as echarts from 'echarts';
  import { listRole, getRole, delRole, addRole, updateRole, dataScope, changeRoleStatus, deptTreeSelect } from "@/api/system/role";
  import { treeselect as menuTreeselect, roleMenuTreeselect } from "@/api/system/menu";
  import { Notification, MessageBox, Message, Loading } from 'element-ui'
  //在system/note/index.js中导入接口函数  --接好了
  import {listMeeting3,listGraph} from "@/api/meeting/index";
 export default {
  created() {},
  created() {
    this.getList();
    this.graphData();
  },
   data() {
     return {
       // 显示搜索条件
@@ -160,53 +190,38 @@
       open: false,
       open2: false,
       title: "",
       tableData: [{
         id: 1,
          familyId: '1',
           title: '1',
           name: 'asasd',
           conferenceRoom: 'asdadsdasd',
           status: '结案'
         },
         {
                    id: 2,
          familyId: '2',
           title: '2',
           name: 'qweqwqwe',
           conferenceRoom: 'qweqweqwe',
           status: '未结案'
         }
       ],
       meetingList: [],
       dataList:[],
       // 饼图数据
       graphID: [],
       // 柱状图数据
       graphDate: [],
       years:undefined,
       yearOptions:[],
       formDat:{
         id: undefined,
         happenTime: undefined,
         endTime: undefined,
         meetingTitle: undefined,
         conferenceRoom: undefined,
         ratifyPerson: undefined,
         applyPerson: undefined,
         url: "",
         status: undefined,
         familyId: undefined
           "title":undefined,
           "familyId":undefined,
           "conferenceRoom":undefined,
           "applyPerson":undefined,
           "ratifyPerson":undefined,
           "status":undefined,
           "useTime":undefined
       },
     queryParams: {
       pageNum: 1,
       pageSize: 10,
       conferenceRoom:undefined,
       applyOrganization:undefined,
       applyPerson:undefined,
       happenTime:undefined
     },
     dateRange: [],
     // 表单校验
     rules: {
       name: [{
         required: true,
         message: '请输入设备名称',
         trigger: 'blur'
       }],
      },
     // rules: {
     //   name: [{
     //     required: true,
     //     message: '请输入设备名称',
     //     trigger: 'blur'
     //   }],
     //  },
       typeOptions: [
         {
         value: '1',
@@ -222,50 +237,237 @@
     }
   },
   methods: {
     open1(){
     getList() {
       this.loading = true;
       // console.log(this.queryParams)
       //  listProperty(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
         this.queryParams.happenStartTime = this.dateRange.length > 0 && this.dateRange[0]
         this.queryParams.happenEndTime = this.dateRange.length > 0 && this.dateRange[1]
       listMeeting3(this.queryParams).then(response => {
           //  alert(123)
             // console.log(response.data.data,'22222222222')
           this.meetingList = response.data.data;
           this.total = response.data.total;
           this.loading = false;
         }
       );
     },
     getTypeOptions(list){
       let years = ['全部']
        let a = {}
       list.forEach(element=>{
         let year = element.createTime.split("-")[0]
         if(a[year]){
         }else{
           a[year] = 1
           years.push(year)
         }
       })
      let yearOptions = []
      for(let i=0;i<years.length;i++){
        yearOptions.push({label: years[i],value: i})
      }
      return yearOptions;
     },
     graphData(){
       this.loading = true;
       listGraph().then(response => {
           this.dataList = response.data
           console.log(this.dataList,'11111111111')
           this.yearOptions = this.getTypeOptions(this.dataList)
           console.log(this.yearOptions,'yearsyearsyearsyears')
           // 家庭号
           let a = {}
           this.dataList.forEach(element=>{
             if(a[element['familyId']]){
               a[element['familyId']] += 1
             }else{
               a[element['familyId']] = 1
             }
           })
           for(let i in a){
            this.graphID.push({'name': i , 'value': a[i]})
           }
           // 每月次数
           let b = {'01': 0,'02': 0,'03': 0,'04': 0,'05': 0,'06': 0,'07': 0,'08': 0,'09': 0,'10': 0,'11': 0,'12': 0}
           this.dataList.forEach(element=>{
             let month = element.createTime.split("-")[1]
             if(b[month]){
               b[month] += 1
             }else{
               b[month] = 1
             }
           })
           let kon =[]
           for(let i in b){
             kon.push({'name': Number(i) , 'value': b[i]})
           }
           this.graphDate = kon.sort((a,b) => a.name - b.name)
           this.loading = false;
         }
         );
     },
    b(list,selectedValue){
      let list2 = []
      let newGraphID = []
      let newGraphDate = []
      list.forEach(element=>{
        let year = element.createTime.split("-")[0]
        if(selectedValue == year){
          list2.push(element)
        }
      })
      if(list2.length !=  0){
        // 家庭号
        let a = {}
        list2.forEach(element=>{
          if(a[element['familyId']]){
            a[element['familyId']] += 1
          }else{
            a[element['familyId']] = 1
          }
        })
        for(let i in a){
          newGraphID.push({'name': i , 'value': a[i]})
        }
        // 每月次数
        let b = {'01': 0,'02': 0,'03': 0,'04': 0,'05': 0,'06': 0,'07': 0,'08': 0,'09': 0,'10': 0,'11': 0,'12': 0}
        list2.forEach(element=>{
          let month = element.createTime.split("-")[1]
          if(b[month]){
            b[month] += 1
          }else{
            b[month] = 1
          }
        })
        let kon =[]
        for(let i in b){
          kon.push({'name': Number(i) , 'value': b[i]})
        }
        newGraphDate = kon.sort((a,b) => a.name - b.name)
      }else{
        list2 = list
        // 家庭号
        let a = {}
        list2.forEach(element=>{
          if(a[element['familyId']]){
            a[element['familyId']] += 1
          }else{
            a[element['familyId']] = 1
          }
        })
        for(let i in a){
          newGraphID.push({'name': i , 'value': a[i]})
        }
        // 每月次数
        let b = {'01': 0,'02': 0,'03': 0,'04': 0,'05': 0,'06': 0,'07': 0,'08': 0,'09': 0,'10': 0,'11': 0,'12': 0}
        list2.forEach(element=>{
          let month = element.createTime.split("-")[1]
          if(b[month]){
            b[month] += 1
          }else{
            b[month] = 1
          }
        })
        let kon =[]
        for(let i in b){
          kon.push({'name': Number(i) , 'value': b[i]})
        }
        newGraphDate = kon.sort((a,b) => a.name - b.name)
      }
      return [newGraphID,newGraphDate];
    },
    selectValue(value){
      let obj = {}
      let year = undefined
      obj= this.yearOptions.find(function(i){
              return i.value ===value
        });
      year = obj.label
      let result = undefined
      result = this.b(this.dataList,year)
      this.graphID = result[0]
      this.graphDate = result[1]
      // console.log(this.graphID)
      // console.log(this.graphDate)
      echarts.dispose(document.getElementById('main1'))
      echarts.dispose(document.getElementById('main2'))
      this.initEcharts()
    },
     openGraph(){
       this.$nextTick(() => {
       //  执行echarts方法
         this.initEcharts()
       })
    },
    initEcharts() {
            var echarts = require('echarts');
            const myChart1 = this.$echarts.init(document.getElementById('main1'));
            const myChart1 = echarts.init(document.getElementById('main1'))
             const option1 = {
                title: {
                    text: 'ECharts 入门示例'
                    text: '每月会议次数统计',
                    left:'center'
                },
                tooltip: {},
                xAxis: {
                    data: ['衬衫', '羊毛衫', '雪纺衫', '裤子', '高跟鞋', '袜子']
                    data: ['1月','2月','3月','4月','5月','6月','7月','8月','9月','10月','11月','12月']
                },
                yAxis: {},
                legend:{},
                series: [{
                    name: '销量',
                    type: 'bar',
                    data: [5, 20, 36, 10, 10, 20]
                    data: this.graphDate.map(x => x.value)
                }]
            };
            myChart1.setOption(option1)
            const myChart2 = this.$echarts.init(document.getElementById('main2'));
            const myChart2 = echarts.init(document.getElementById('main2'))
             const option2 = {
                title: {
                    text: 'ECharts 入门示例'
                    text: '会议家庭占比统计',
                    left:'center',
                    textStyle:{
                      fontSize:20
                    }
                },
                tooltip: {},
                xAxis: {
                    data: ['衬衫', '羊毛衫', '雪纺衫', '裤子', '高跟鞋', '袜子']
                legend:{
                  orient: 'vertical',
                  left: 'left',
                  textStyle:{
                    fontSize:15
                  }
                },
                yAxis: {},
                series: [{
                    name: '销量',
                    type: 'bar',
                    data: [5, 20, 36, 10, 10, 20]
                    name: '家庭号',
                    type: 'pie',
                    data: this.graphID,
                    label: {
                      show: true, // 是否显示标签
                      position: 'top', // 标签位置,可选值为:top、bottom、center、inside(柱状图内部)、outside(柱状图外部)
                      textStyle: {
                        color: '#333', // 标签字体颜色
                        fontSize: 25, // 标签字体大小
                        fontWeight: 'bold', // 标签字体加粗
                        fontStyle: 'italic', // 标签字体斜体
                        fontFamily: 'Arial' // 标签字体
                      }
                    },
                }]
            };
            myChart1.setOption(option1)
            myChart2.setOption(option2)
          },
     /** 搜索按钮操作 */
@@ -290,7 +492,7 @@
       // this.reset();
     },
     submitDataScope() {
       console.log(666)
       // console.log(666)
     },
     tableRowClassName({
@@ -394,7 +596,7 @@
    width: 700px;
    height: 700px;
    display: inline-block;
    /* background-color: aqua; */
    margin-right: 30px;
        /* background-color: aqua; */
  }
  </style>