| | |
| | | </el-backtop> |
| | | |
| | | <h1 style="font-size:21px;padding-top:30px;display: flex;"> |
| | | <span>会议统计</span> |
| | | <p><span >会议统计</span></p> |
| | | <div class="button-container"></div> |
| | | <div style="display: flex; align-items: center;"> |
| | | <el-button @click="pictureStatistics" size="mini" type="text" v-hasPermi="['person:information:memo']" style="margin-left: 10px"> |
| | | <div class="form1"><el-icon style="padding-right:50px;"></el-icon> |
| | | <span class="text" style="width: 69px;height: 26px;font-size: 16px; |
| | | font-family: Microsoft YaHei-Regular, Microsoft YaHei; color: #EBA4AA;">图表统计</span> |
| | | </div> |
| | | </el-button> |
| | | </div> |
| | | <!-- <div style="display: flex; align-items: center;"> |
| | | <el-button @click="newRequest" size="mini" type="text" v-hasPermi="['person:information:memo']" style="margin-left: 10px"> |
| | | <div class="form2" style="width: 100px;"><el-icon style="padding-right:30px;"></el-icon> |
| | | <span class="text" style="width: 69px;height: 26px;font-size: 16px; |
| | | font-family: Microsoft YaHei-Regular, Microsoft YaHei; color: #EBA4AA;">新建</span> |
| | | </div> |
| | | </el-button> |
| | | </div> --> |
| | | |
| | | </h1> |
| | | |
| | | <hr /> |
| | | |
| | | <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 |
| | | ? scope.row.familyId : '————' }}</template> |
| | | </el-table-column> |
| | | |
| | | <el-table-column label="使用时间" prop="useTime" sortable align="center"> |
| | | <template slot-scope="scope">{{ scope.row.useTime |
| | | ? scope.row.useTime : '————' }}</template> |
| | | </el-table-column> |
| | | |
| | | <el-table-column label="会议室名称" prop="conferenceRoom" sortable align="center"> |
| | | <template slot-scope="scope">{{ |
| | | scope.row.conferenceRoom ? scope.row.conferenceRoom : '————' }}</template> |
| | | </el-table-column> |
| | | |
| | | <el-table-column label="标题" prop="title" sortable align="center"> |
| | | <template slot-scope="scope">{{ scope.row.title |
| | | ? scope.row.title : '————' }}</template> |
| | | </el-table-column> |
| | | |
| | | <el-table-column label="申请人" prop="applyPerson" sortable align="center"> |
| | | <template slot-scope="scope">{{ |
| | | scope.row.applyPerson ? scope.row.applyPerson : '————' }}</template> |
| | | </el-table-column> |
| | | |
| | | <el-table-column label="审批人" prop="ratifyPerson" sortable align="center"> |
| | | <template slot-scope="scope">{{ scope.row.ratifyPerson ? |
| | | scope.row.ratifyPerson : '————' }}</template> |
| | | </el-table-column> |
| | | |
| | | <el-table-column label="状态" prop="status" sortable align="center"> |
| | | <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"> |
| | | <div class="button-container"> |
| | | <!-- <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)">修改</el-button> --> |
| | | <!-- <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)">删除</el-button> --> |
| | | <el-button size="mini" type="text" icon="el-icon-d-arrow-right" @click="handleCheck(scope.row)">查看详情</el-button> |
| | | </div> |
| | | </template> |
| | | </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="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"> |
| | | </div> |
| | | <div class="p1" id="main2"> |
| | | </div> |
| | | </el-dialog> |
| | | <!-- 新增数据框 --> |
| | | <!-- <el-dialog :title="title" :visible.sync="open" width="1000px" append-to-body> |
| | | |
| | | <el-form ref="elForm" :model="formDat" :rules="rules" size="medium" label-width="100px"> |
| | | |
| | | <el-form-item label="家庭号" prop="familyId"> |
| | | <el-input v-model="formDat.familyId" placeholder="请输入会议室名称" clearable :style="{width: '100%'}"> |
| | | </el-input> |
| | | </el-form-item> |
| | | |
| | | <el-form-item label="开始时间" prop="happenTime"> |
| | | <el-date-picker v-model="formDat.happenTime" type="datetime" placeholder="选择日期时间" |
| | | :editable="false" :clearable="false" :style="{width: '100%'}" value-format="yyyy-MM-dd" |
| | | ></el-date-picker> |
| | | </el-form-item> |
| | | <el-form-item label="结束时间" prop="endTime"> |
| | | <el-date-picker v-model="formDat.endTime" type="datetime" placeholder="选择日期时间" |
| | | :editable="false" :clearable="false" :style="{width: '100%'}" value-format="yyyy-MM-dd" |
| | | ></el-date-picker> |
| | | </el-form-item> |
| | | |
| | | <el-form-item label="会议室名称" prop="conferenceRoom"> |
| | | <el-input v-model="formDat.conferenceRoom" placeholder="请输入会议室名称" clearable :style="{width: '100%'}"> |
| | | </el-input> |
| | | </el-form-item> |
| | | |
| | | <el-form-item label="标题" prop="meetingTitle"> |
| | | <el-input v-model="formDat.meetingTitle" placeholder="请输入会议标题" clearable :style="{width: '100%'}"> |
| | | </el-input> |
| | | </el-form-item> |
| | | |
| | | <el-form-item label="申请人" prop="applyPerson"> |
| | | <el-input v-model="formDat.applyPerson" placeholder="请输入申请人" clearable :style="{width: '100%'}"> |
| | | </el-input> |
| | | </el-form-item> |
| | | |
| | | <el-form-item label="审批人" prop="ratifyPerson"> |
| | | <el-input v-model="formDat.ratifyPerson" placeholder="请输入审批人" clearable :style="{width: '100%'}"> |
| | | </el-input> |
| | | </el-form-item> |
| | | |
| | | <el-form-item label="状态" prop="status"> |
| | | <el-select v-model="formDat.status" placeholder="请选择" clearable :style="{width: '100%'}"> |
| | | <el-option v-for="(item, index) in typeOptions" :key="index" :label="item.label" :value="item.value" |
| | | ></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | |
| | | </el-form> |
| | | |
| | | </el-upload> |
| | | </el-form> |
| | | <div slot="footer" class="dialog-footer"> |
| | | <el-button type="primary" @click="submitDataScope">保 存</el-button> |
| | | <el-button @click="cancel">取 消</el-button> |
| | | </div> |
| | | </el-dialog> --> |
| | | |
| | | </div> |
| | | </template> |
| | | |
| | | <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() { |
| | | this.getList(); |
| | | this.graphData(); |
| | | }, |
| | | data() { |
| | | return { |
| | | // 显示搜索条件 |
| | | showSearch: true, |
| | | open: false, |
| | | open2: false, |
| | | title: "", |
| | | meetingList: [], |
| | | dataList:[], |
| | | // 饼图数据 |
| | | graphID: [], |
| | | // 柱状图数据 |
| | | graphDate: [], |
| | | years:undefined, |
| | | yearOptions:[], |
| | | formDat:{ |
| | | "title":undefined, |
| | | "familyId":undefined, |
| | | "conferenceRoom":undefined, |
| | | "applyPerson":undefined, |
| | | "ratifyPerson":undefined, |
| | | "status":undefined, |
| | | "useTime":undefined |
| | | }, |
| | | |
| | | queryParams: { |
| | | pageNum: 1, |
| | | pageSize: 10, |
| | | |
| | | }, |
| | | dateRange: [], |
| | | // 表单校验 |
| | | // rules: { |
| | | // name: [{ |
| | | // required: true, |
| | | // message: '请输入设备名称', |
| | | // trigger: 'blur' |
| | | // }], |
| | | // }, |
| | | typeOptions: [ |
| | | { |
| | | value: '1', |
| | | label: '结案', |
| | | }, |
| | | { |
| | | value: '0', |
| | | label: '未结案', |
| | | } |
| | | ], |
| | | |
| | | |
| | | } |
| | | }, |
| | | methods: { |
| | | 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() { |
| | | const myChart1 = echarts.init(document.getElementById('main1')) |
| | | const option1 = { |
| | | title: { |
| | | text: '每月会议次数统计', |
| | | left:'center' |
| | | }, |
| | | tooltip: {}, |
| | | xAxis: { |
| | | data: ['1月','2月','3月','4月','5月','6月','7月','8月','9月','10月','11月','12月'] |
| | | }, |
| | | yAxis: {}, |
| | | legend:{}, |
| | | series: [{ |
| | | type: 'bar', |
| | | data: this.graphDate.map(x => x.value) |
| | | }] |
| | | }; |
| | | myChart1.setOption(option1) |
| | | |
| | | const myChart2 = echarts.init(document.getElementById('main2')) |
| | | const option2 = { |
| | | title: { |
| | | text: '会议家庭占比统计', |
| | | left:'center', |
| | | textStyle:{ |
| | | fontSize:20 |
| | | } |
| | | }, |
| | | tooltip: {}, |
| | | legend:{ |
| | | orient: 'vertical', |
| | | left: 'left', |
| | | textStyle:{ |
| | | fontSize:15 |
| | | } |
| | | }, |
| | | series: [{ |
| | | 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' // 标签字体 |
| | | } |
| | | }, |
| | | }] |
| | | }; |
| | | |
| | | myChart2.setOption(option2) |
| | | }, |
| | | /** 搜索按钮操作 */ |
| | | handleQuery() { |
| | | this.queryParams.pageNum = 1; |
| | | this.getList(); |
| | | }, |
| | | /** 重置按钮操作 */ |
| | | resetQuery() { |
| | | this.dateRange = []; |
| | | this.resetForm("queryForm"); |
| | | this.handleQuery(); |
| | | }, |
| | | |
| | | |
| | | newRequest(){ |
| | | this.open = true; |
| | | this.title = "新增" |
| | | }, |
| | | cancel() { |
| | | this.open = false; |
| | | // this.reset(); |
| | | }, |
| | | submitDataScope() { |
| | | // console.log(666) |
| | | }, |
| | | |
| | | tableRowClassName({ |
| | | row, |
| | | rowIndex |
| | | }) { |
| | | if (rowIndex % 2 == 0) { |
| | | return "statistics-warning-row1"; |
| | | } else { |
| | | return "statistics-warning-row"; |
| | | } |
| | | }, |
| | | getRowId(row) { |
| | | return row.id |
| | | }, |
| | | |
| | | // 修改 |
| | | handleUpdate(row) { |
| | | const id = row.id; |
| | | let jd = true |
| | | |
| | | this.$router.push({ |
| | | path:"/meeting/statistics/statisticsInfo/" + id, |
| | | query:{ |
| | | detail:jd |
| | | } |
| | | }); |
| | | }, |
| | | // 查看详细信息 |
| | | handleCheck(row){ |
| | | const id = row.id; |
| | | this.$router.push("/meeting/statistics/statisticsInfo/" + id); |
| | | }, |
| | | |
| | | /** 删除按钮操作 */ |
| | | handleDelete(row) { |
| | | const Ids = row.id || this.ids; |
| | | this.$modal.confirm('是否确认删除数据项?').then(function() { |
| | | return delSelfEconomy(Ids); |
| | | }).then(() => { |
| | | this.getList(); |
| | | this.$modal.msgSuccess("删除成功"); |
| | | }).catch(() => {}); |
| | | }, |
| | | |
| | | // 图表统计 |
| | | pictureStatistics(){ |
| | | this.open2=true; |
| | | this.title2 = "图表统计" |
| | | }, |
| | | |
| | | } |
| | | } |
| | | </script> |
| | | <style scoped> |
| | | .el-table__row.statistics-warning-row { |
| | |
| | | font-size: 14px; /* 设置字体大小 */ |
| | | } |
| | | .button-container { |
| | | display: inline-flex; /* 设置按钮容器为行内元素 */ |
| | | /* display: inline-flex; 设置按钮容器为行内元素 */ |
| | | text-align: right; |
| | | display: flex; |
| | | justify-content: flex-end; |
| | | align-items: center; |
| | | flex-grow: 1; |
| | | } |
| | | .app-container { |
| | | background-color: #FEF7FC; |
| | | } |
| | | .form1{ |
| | | background:left/40% no-repeat url('../../assets/icons/pic.png') ; |
| | | height: 50px; |
| | | line-height: 50px; |
| | | } |
| | | .form2{ |
| | | background:left/25% no-repeat url('../../assets/icons/add1.png') ; |
| | | height: 50px; |
| | | line-height: 50px; |
| | | } |
| | | |
| | | /deep/ .el-table .statistics-warning-row { |
| | | background: #E0EEFE; |
| | | } |
| | | |
| | | /deep/ .el-table .statistics-warning-row1 { |
| | | background: #FFEFF2; |
| | | } |
| | | |
| | | .el-table { |
| | | border-radius: 14px 14px 14px 14px; |
| | | } |
| | | .p1{ |
| | | width: 700px; |
| | | height: 700px; |
| | | display: inline-block; |
| | | margin-right: 30px; |
| | | /* background-color: aqua; */ |
| | | } |
| | | </style> |