1736 lines
		
	
	
		
			45 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
			
		
		
	
	
			1736 lines
		
	
	
		
			45 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
| <template>
 | ||
|   <div class="AppQxnDv">
 | ||
|     <div class="left">
 | ||
|       <AiDvPanel style="width: 100%; height: auto;" border="border6" title="单位列表">
 | ||
|       </AiDvPanel>
 | ||
|       <div class="left-list">
 | ||
|         <div
 | ||
|             class="left-item"
 | ||
|             v-for="(item, index) in areaList"
 | ||
|             :class="[gridParentId === item.gridId ? 'active' : '']"
 | ||
|             :key="index"
 | ||
|             @click="init(item.gridId)">
 | ||
|           <i>{{ index + 1 }}</i>
 | ||
|           <div class="left-item__top">
 | ||
|             <h2>{{ item.gridName }}</h2>
 | ||
|             <el-select v-model="gridId" @change="onStationChange" size="mini" v-if="gridParentId === item.gridId && index !== 0" placeholder="请选择派出所">
 | ||
|               <el-option
 | ||
|                   :label="item.gridName"
 | ||
|                   :value="item.gridId"
 | ||
|                   v-for="(item, index) in policeStationList"
 | ||
|                   :key="index">
 | ||
|               </el-option>
 | ||
|             </el-select>
 | ||
|           </div>
 | ||
|           <div class="left-item__bottom">
 | ||
|             <span>网格员:{{ item.allGridMemberCount }}</span>
 | ||
|             <span>已办:{{ item.allReportTotalSolved }}</span>
 | ||
|             <span>事件:{{ item.allReportTotalCase }}</span>
 | ||
|           </div>
 | ||
|         </div>
 | ||
|       </div>
 | ||
|     </div>
 | ||
|     <div class="right">
 | ||
|       <div class="right-left">
 | ||
|         <AiDvPanel style="width: 100%" border="border6" title="警格事件概況">
 | ||
|           <div class="right-left__total AppQxnDv-total">
 | ||
|             <div class="item">
 | ||
|               <h2>全部上报事件</h2>
 | ||
|               <div class="item-bottom">
 | ||
|                 <span>{{ wxGridReportOverviewInfo['全部上报事件数量'] }}</span>
 | ||
|                 <i>条</i>
 | ||
|               </div>
 | ||
|             </div>
 | ||
|             <div class="item">
 | ||
|               <h2>已办结事件</h2>
 | ||
|               <div class="item-bottom">
 | ||
|                 <span>{{ wxGridReportOverviewInfo['已办结数量'] }}</span>
 | ||
|                 <i>条</i>
 | ||
|               </div>
 | ||
|             </div>
 | ||
|             <div class="item">
 | ||
|               <h2>办理中事件</h2>
 | ||
|               <div class="item-bottom">
 | ||
|                 <span>{{ wxGridReportOverviewInfo['办理中数量'] }}</span>
 | ||
|                 <i>条</i>
 | ||
|               </div>
 | ||
|             </div>
 | ||
|             <div class="item">
 | ||
|               <h2>待处理事件</h2>
 | ||
|               <div class="item-bottom">
 | ||
|                 <span>{{ wxGridReportOverviewInfo['待受理数量'] }}</span>
 | ||
|                 <i>条</i>
 | ||
|               </div>
 | ||
|             </div>
 | ||
|           </div>
 | ||
|           <div class="right-left__top">
 | ||
|             <div class="wrapper">
 | ||
|               <div class="AppQxnDv-title">
 | ||
|                 <h2>上报来源分布</h2>
 | ||
|               </div>
 | ||
|               <ai-echart-v2
 | ||
|                   style="height: 220px; width: 245px; margin-top: 10px;"
 | ||
|                   :ref="'chart1'"
 | ||
|                   :data="chartData1"
 | ||
|                   :ops="chartConfig1">
 | ||
|               </ai-echart-v2>
 | ||
|             </div>
 | ||
|             <div class="wrapper">
 | ||
|               <div class="AppQxnDv-title">
 | ||
|                 <h2>事件办理情況</h2>
 | ||
|               </div>
 | ||
|               <ai-echart-v2
 | ||
|                   style="height: 220px; width: 265px; margin-top: 10px;"
 | ||
|                   :ref="'chart2'"
 | ||
|                   :data="chartData2"
 | ||
|                   :ops="chartConfig2">
 | ||
|               </ai-echart-v2>
 | ||
|             </div>
 | ||
|           </div>
 | ||
|           <div class="right-left__middle">
 | ||
|             <div class="left">
 | ||
|               <div class="wrapper">
 | ||
|                 <div class="AppQxnDv-title">
 | ||
|                   <h2>事件受理率</h2>
 | ||
|                 </div>
 | ||
|                 <DoughnutChart :labelStyle="{width: '96px'}" :ratio="sllRate" :value="sllData"></DoughnutChart>
 | ||
|               </div>
 | ||
|               <div class="wrapper">
 | ||
|                 <div class="AppQxnDv-title">
 | ||
|                   <h2>事件办结率</h2>
 | ||
|                 </div>
 | ||
|                 <DoughnutChart :labelStyle="{width: '96px'}" :ratio="sjbjRate" :value="sjbjData"></DoughnutChart>
 | ||
|               </div>
 | ||
|             </div>
 | ||
|             <div class="right wrapper">
 | ||
|               <div class="AppQxnDv-title">
 | ||
|                 <h2>最新办理动态</h2>
 | ||
|                 <el-select v-model="type" @change="onChange" style="width: 92px" size="mini" placeholder="请选择">
 | ||
|                   <el-option label="新办结" value="0"></el-option>
 | ||
|                   <el-option label="新受理" value="1"></el-option>
 | ||
|                 </el-select>
 | ||
|               </div>
 | ||
|               <ai-table
 | ||
|                   width="265px"
 | ||
|                   style="margin-top: 10px;"
 | ||
|                   height="210px"
 | ||
|                   :tableData="tableData1"
 | ||
|                   :col-configs="colConfigs1"
 | ||
|                   :isShowPagination="false"
 | ||
|                   @getList="() => {}">
 | ||
|               </ai-table>
 | ||
|             </div>
 | ||
|           </div>
 | ||
|           <div class="right-left__bottom">
 | ||
|             <div class="AppQxnDv-title">
 | ||
|               <div class="left AppQxnDv-title__tab">
 | ||
|                 <h2
 | ||
|                     @click="onTypeChange(index)"
 | ||
|                     :class="[currIndex === index ? 'active' : '']"
 | ||
|                     v-for="(item, index) in eventList"
 | ||
|                     :key="index">
 | ||
|                   {{ item.categoryName }}
 | ||
|                 </h2>
 | ||
|               </div>
 | ||
|             </div>
 | ||
|             <ai-echart-v2
 | ||
|                 style="height: 224px; margin-top: 10px; width: 100%;"
 | ||
|                 :ref="'chart3'"
 | ||
|                 :data="chartData3"
 | ||
|                 :ops="chartConfig3">
 | ||
|             </ai-echart-v2>
 | ||
|           </div>
 | ||
|         </AiDvPanel>
 | ||
|       </div>
 | ||
|       <div class="right-middle">
 | ||
|         <AiDvPanel style="width: 100%" border="border6" title="综合概况图">
 | ||
|           <div class="right-left__total AppQxnDv-total">
 | ||
|             <div class="item">
 | ||
|               <h2>警格上报事件</h2>
 | ||
|               <div class="item-bottom">
 | ||
|                 <span>{{ middleTotalInfo['警格累计上报'] }}</span>
 | ||
|                 <i>条</i>
 | ||
|               </div>
 | ||
|             </div>
 | ||
|             <div class="item">
 | ||
|               <h2>居民上报事件</h2>
 | ||
|               <div class="item-bottom">
 | ||
|                 <span>{{ middleTotalInfo['居民累计上报'] }}</span>
 | ||
|                 <i>条</i>
 | ||
|               </div>
 | ||
|             </div>
 | ||
|             <div class="item">
 | ||
|               <h2>今日待处理</h2>
 | ||
|               <div class="item-bottom">
 | ||
|                 <span>{{ middleTotalInfo['今日待处理'] }}</span>
 | ||
|                 <i>条</i>
 | ||
|               </div>
 | ||
|             </div>
 | ||
|             <div class="item">
 | ||
|               <h2>今日办理中</h2>
 | ||
|               <div class="item-bottom">
 | ||
|                 <span>{{ middleTotalInfo['今日办理中'] }}</span>
 | ||
|                 <i>条</i>
 | ||
|               </div>
 | ||
|             </div>
 | ||
|             <div class="item">
 | ||
|               <h2>今日已办结</h2>
 | ||
|               <div class="item-bottom">
 | ||
|                 <span>{{ middleTotalInfo['今日办结'] }}</span>
 | ||
|                 <i>条</i>
 | ||
|               </div>
 | ||
|             </div>
 | ||
|           </div>
 | ||
|           <div class="wrapper">
 | ||
|             <DvMap :instance="instance" style="width: 100%; height: 356px;" type="1"></DvMap>
 | ||
|           </div>
 | ||
|           <div class="right-middle__bottom">
 | ||
|             <div class="AppQxnDv-title">
 | ||
|               <h2>事件列表</h2>
 | ||
|               <div class="right">
 | ||
|                 <el-select clearable @change="getReportList" v-model="search.source" style="width: 82px; margin-right:6px;" size="mini" placeholder="上报来源">
 | ||
|                   <el-option label="巡查上报" value="0"></el-option>
 | ||
|                   <el-option label="居民上报" value="1"></el-option>
 | ||
|                 </el-select>
 | ||
|                 <el-select clearable @change="getReportList" v-model="search.categoryId" style="width: 82px; margin-right:6px;" size="mini" placeholder="事件类型">
 | ||
|                   <el-option
 | ||
|                       v-for="(item, index) in eventList"
 | ||
|                       :key="index"
 | ||
|                       :label="item.categoryName"
 | ||
|                       :value="item.categoryId">
 | ||
|                   </el-option>
 | ||
|                 </el-select>
 | ||
|                 <el-select clearable @change="getReportList" v-model="search.status" style="width: 82px; margin-right:6px;" size="mini" placeholder="事件状态">
 | ||
|                   <el-option label="待受理" value="0"></el-option>
 | ||
|                   <el-option label="办理中" value="1"></el-option>
 | ||
|                   <el-option label="已办结" value="2"></el-option>
 | ||
|                   <el-option label="已拒绝" value="3"></el-option>
 | ||
|                 </el-select>
 | ||
|                 <el-select clearable @change="getReportList" v-model="search.dateRange" style="width: 82px; margin-right:6px;" size="mini" placeholder="最近30天">
 | ||
|                   <el-option label="昨天" value="0"></el-option>
 | ||
|                   <el-option label="近7天" value="1"></el-option>
 | ||
|                   <el-option label="近30天" value="2"></el-option>
 | ||
|                 </el-select>
 | ||
|                 <el-input placeholder="关键词" v-model="search.param" v-throttle="() => {getReportList()}" style="width: 98px;">
 | ||
|                   <el-button slot="append" icon="el-icon-search"></el-button>
 | ||
|                 </el-input>
 | ||
|               </div>
 | ||
|             </div>
 | ||
|             <ai-table
 | ||
|                 style="margin-top: 10px; width: 548px;"
 | ||
|                 height="416px"
 | ||
|                 :tableData="tableData3"
 | ||
|                 :col-configs="colConfigs3"
 | ||
|                 :isShowPagination="false"
 | ||
|                 @getList="() => {}">
 | ||
|             </ai-table>
 | ||
|           </div>
 | ||
|         </AiDvPanel>
 | ||
|       </div>
 | ||
|       <div class="right-right">
 | ||
|         <AiDvPanel class="bottom" style="width: 410px" border="border6" title="办理排行">
 | ||
|           <div class="title-right">
 | ||
|             <span :class="[dateRange === 0 ? 'active' : '']" @click="onReportChange(0)">昨天</span>
 | ||
|             <span :class="[dateRange === 1 ? 'active' : '']" @click="onReportChange(1)">近七天</span>
 | ||
|             <span :class="[dateRange === 2 ? 'active' : '']" @click="onReportChange(2)">近30天</span>
 | ||
|           </div>
 | ||
|           <ai-table
 | ||
|               height="890px"
 | ||
|               :tableData="reportHandleList"
 | ||
|               :col-configs="colConfigs2"
 | ||
|               :isShowPagination="false"
 | ||
|               @getList="() => {}">
 | ||
|             <el-table-column slot="index" label="排名" align="center" width="58">
 | ||
|               <template slot-scope="{ $index }">
 | ||
|                 <div class="table-index" :class="[$index < 3 ? 'table-index__active' : '']">
 | ||
|                   <span>{{ $index + 1 }}</span>
 | ||
|                 </div>
 | ||
|               </template>
 | ||
|             </el-table-column>
 | ||
|           </ai-table>
 | ||
|         </AiDvPanel>
 | ||
|       </div>
 | ||
|     </div>
 | ||
|     <transition name="fade">
 | ||
|       <div class="event-info" v-if="isShow">
 | ||
|         <div class="info-mask" @click="isShow = false"></div>
 | ||
|         <div class="info-content">
 | ||
|           <div class="info-title">
 | ||
|             <h2>事件详情</h2>
 | ||
|           </div>
 | ||
|           <img src="https://cdn.cunwuyun.cn/dvcp/dv/qxn/close.png" @click="isShow = false"/>
 | ||
|           <h3 :title="eventInfo.desc">{{ eventInfo.desc }}</h3>
 | ||
|           <div class="info-wrapper">
 | ||
|             <div class="info-wrapper__item">
 | ||
|               <label>上报人:</label>
 | ||
|               <span style="color: #02FEFF">{{ eventInfo.reporter_name }}</span>
 | ||
|             </div>
 | ||
|             <div class="info-wrapper__item">
 | ||
|               <label>办理状态:</label>
 | ||
|               <span :style="{color: mapStatus(eventInfo.status, 'color')}">{{ mapStatus(eventInfo.status, 'name') }}</span>
 | ||
|             </div>
 | ||
|             <div class="info-wrapper__item">
 | ||
|               <label>上报来源:</label>
 | ||
|               <span>{{ eventInfo.typeName }}</span>
 | ||
|             </div>
 | ||
|             <div class="info-wrapper__item">
 | ||
|               <label>发生地点:</label>
 | ||
|               <span>{{ eventInfo.location.address }}</span>
 | ||
|             </div>
 | ||
|             <div class="info-wrapper__item">
 | ||
|               <label>事件类别:</label>
 | ||
|               <span>{{ eventInfo.case_name }}</span>
 | ||
|             </div>
 | ||
|           </div>
 | ||
|           <div class="info-bottom">
 | ||
|             <h3>办理流程</h3>
 | ||
|             <div class="info-bottom__wrapper">
 | ||
|               <div class="info-bottom__item" v-for="(item, index) in eventInfo.process_list" :key="index">
 | ||
|                 <h4>{{ item.solve_username }}</h4>
 | ||
|                 <div class="middle">
 | ||
|                   <p :title="item.process_desc">{{ item.process_desc || '无备注' }}</p>
 | ||
|                   <span>{{ $moment(item.solved_time * 1000).format('YYYY-MM-DD HH:mm:ss') }}</span>
 | ||
|                 </div>
 | ||
|                 <i>{{ mapProcessType(item.process_type) }}</i>
 | ||
|               </div>
 | ||
|             </div>
 | ||
|             <div class="progress" v-if="false">
 | ||
|               <div class="progress-item active" v-for="(item, index) in eventInfo.process_list" :key="index">
 | ||
|                 <h4>{{ mapStatus(item.status, 'name') }}</h4>
 | ||
|                 <div class="progress-item__middle">
 | ||
|                   <i></i>
 | ||
|                 </div>
 | ||
|                 <p>{{ item.solve_username }}</p>
 | ||
|                 <span>{{ $moment(item.solved_time * 1000).format('YYYY-MM-DD HH:mm:ss') }}</span>
 | ||
|               </div>
 | ||
|             </div>
 | ||
|           </div>
 | ||
|         </div>
 | ||
|       </div>
 | ||
|     </transition>
 | ||
|   </div>
 | ||
| </template>
 | ||
| 
 | ||
| <script>
 | ||
| const corpId = "wwb182f88f0327b37f"
 | ||
| import DvMap from './components/DvMap'
 | ||
| import DoughnutChart from './components/DoughnutChart'
 | ||
| 
 | ||
| export default {
 | ||
|   name: 'AppQxnEventDv',
 | ||
|   label: '事件上报',
 | ||
| 
 | ||
|   props: {
 | ||
|     instance: Function
 | ||
|   },
 | ||
| 
 | ||
|   components: {
 | ||
|     DvMap,
 | ||
|     DoughnutChart
 | ||
|   },
 | ||
| 
 | ||
|   data() {
 | ||
|     return {
 | ||
|       policeStationList: [],
 | ||
|       currIndex: 0,
 | ||
|       areaList: [],
 | ||
|       type: '0',
 | ||
|       isShow: false,
 | ||
|       middleTotalInfo: {},
 | ||
|       gridId: '',
 | ||
|       gridParentId: 'gr3AePMwAAFWlqlNvfJboAWkRNbnA14A',
 | ||
|       chartConfig1: {
 | ||
|         legend: {
 | ||
|           textStyle: {
 | ||
|             color: "#fff"
 | ||
|           }
 | ||
|         },
 | ||
|         grid: {
 | ||
|           left: '0%',
 | ||
|           right: '0%',
 | ||
|           bottom: '0%',
 | ||
|           top: '40px',
 | ||
|           containLabel: true
 | ||
|         },
 | ||
|         tooltip: {
 | ||
|           trigger: 'axis',
 | ||
|           backgroundColor: 'rgba(0, 102, 154, 0.65)',
 | ||
|           borderColor: 'rgba(0, 102, 154, 0.65)',
 | ||
|           textStyle: {color: '#fff'},
 | ||
|           axisPointer: {type: 'cross'}
 | ||
|         },
 | ||
|         color: ['#33CCCC', '#DBB36E'],
 | ||
|         xAxis: {
 | ||
|           type: "category",
 | ||
|           axisTick: {show: false},
 | ||
|           axisLine: {lineStyle: {color: 'rgba(179, 223, 255, 0.4)'}},
 | ||
|           axisLabel: {color: '#8FABBF', fontSize: 12}
 | ||
|         },
 | ||
|         yAxis: {
 | ||
|           nameGap: 23,
 | ||
|           minInterval: 1,
 | ||
|           splitLine: {lineStyle: {color: 'rgba(108, 128, 151, 0.3)', type: 'dashed'}},
 | ||
|           axisLabel: {color: '#8FABBF', fontSize: 12},
 | ||
|           axisPointer: {snap: true}
 | ||
|         },
 | ||
|         series: [
 | ||
|           {
 | ||
|             name: '警格上报',
 | ||
|             type: 'bar',
 | ||
|             barWidth: '15',
 | ||
|             stack: 'one'
 | ||
|           },
 | ||
|           {
 | ||
|             name: '居民上报',
 | ||
|             barWidth: '15',
 | ||
|             type: 'bar',
 | ||
|             stack: 'one'
 | ||
|           }
 | ||
|         ]
 | ||
|       },
 | ||
|       chartConfig2: {
 | ||
|         legend: {
 | ||
|           itemWidth: 16,
 | ||
|           itemGap: 4,
 | ||
|           textStyle: {
 | ||
|             color: "#fff",
 | ||
|             fontSize: '12'
 | ||
|           },
 | ||
|           icon: 'roundRect'
 | ||
|         },
 | ||
|         grid: {
 | ||
|           left: '0%',
 | ||
|           right: '0%',
 | ||
|           bottom: '0%',
 | ||
|           top: '40px',
 | ||
|           containLabel: true
 | ||
|         },
 | ||
|         tooltip: {
 | ||
|           trigger: 'axis',
 | ||
|           backgroundColor: 'rgba(0, 102, 154, 0.65)',
 | ||
|           borderColor: 'rgba(0, 102, 154, 0.65)',
 | ||
|           textStyle: {color: '#fff'},
 | ||
|           axisPointer: {type: 'cross'}
 | ||
|         },
 | ||
|         color: ['#33CCCC', '#2C97E8', '#BFEAFF', '#DBB36E'],
 | ||
|         xAxis: {
 | ||
|           type: "category",
 | ||
|           axisTick: {show: false},
 | ||
|           axisLine: {lineStyle: {color: 'rgba(179, 223, 255, 0.4)'}},
 | ||
|           axisLabel: {color: '#8FABBF', fontSize: 12}
 | ||
|         },
 | ||
|         yAxis: {
 | ||
|           nameGap: 23,
 | ||
|           minInterval: 1,
 | ||
|           splitLine: {lineStyle: {color: 'rgba(108, 128, 151, 0.3)', type: 'dashed'}},
 | ||
|           axisLabel: {color: '#8FABBF', fontSize: 12},
 | ||
|           axisPointer: {snap: true}
 | ||
|         },
 | ||
|         daemon: (color) => ({
 | ||
|           showSymbol: false,
 | ||
|           smooth: true,
 | ||
|           lineStyle: {
 | ||
|             shadowBlur: 4,
 | ||
|             shadowOffsetY: 2,
 | ||
|             width: 2
 | ||
|           },
 | ||
|           areaStyle: {
 | ||
|             color: {
 | ||
|               type: 'linear',
 | ||
|               x: 0,
 | ||
|               x2: 0,
 | ||
|               y: 0,
 | ||
|               y2: 1,
 | ||
|               colorStops: [
 | ||
|                 {offset: 0, color: this.Hex2RGBA(color, 0.3)},
 | ||
|                 {offset: 1, color: this.Hex2RGBA(color, 0.1)}
 | ||
|               ]
 | ||
|             }
 | ||
|           }
 | ||
|         })
 | ||
|       },
 | ||
|       chartData3: [],
 | ||
|       chartConfig3: {
 | ||
|         xAxis: {
 | ||
|           type: "category",
 | ||
|           axisTick: {show: false},
 | ||
|           axisLabel: {color: '#8FABBF', fontSize: 12},
 | ||
|           axisLine: {lineStyle: {color: 'rgba(179, 223, 255, 0.4)'}}
 | ||
|         },
 | ||
|         tooltip: {
 | ||
|           trigger: 'axis',
 | ||
|           backgroundColor: 'rgba(0, 102, 154, 0.65)',
 | ||
|           borderColor: 'rgba(0, 102, 154, 0.65)',
 | ||
|           textStyle: {color: '#fff'},
 | ||
|           axisPointer: {type: 'cross'}
 | ||
|         },
 | ||
|         grid: {
 | ||
|           left: '0%',
 | ||
|           right: '0%',
 | ||
|           bottom: '0%',
 | ||
|           top: '40px',
 | ||
|           containLabel: true
 | ||
|         },
 | ||
|         legend: {
 | ||
|           textStyle: {
 | ||
|             color: "#fff"
 | ||
|           }
 | ||
|         },
 | ||
|         yAxis: {
 | ||
|           nameGap: 23,
 | ||
|           minInterval: 1,
 | ||
|           splitLine: {lineStyle: {color: 'rgba(255,255,255,.2)', type: 'dashed'}},
 | ||
|           axisPointer: {show: false},
 | ||
|           axisLabel: {color: '#8FABBF', fontSize: 12}
 | ||
|         },
 | ||
|         axisPointer: {
 | ||
|           type: 'shadow',
 | ||
|           triggerTooltip: false,
 | ||
|           shadowStyle: {color: 'rgba(46, 153, 255, .2)'}
 | ||
|         },
 | ||
|         color: [
 | ||
|           {
 | ||
|             type: 'linear',
 | ||
|             x: 0,
 | ||
|             x2: 0,
 | ||
|             y: 0,
 | ||
|             y2: 1,
 | ||
|             colorStops: [
 | ||
|               {offset: 0, color: 'rgba(51, 204, 204, 1)'},
 | ||
|               {offset: 1, color: 'rgba(31, 89, 89, 0.25)'}
 | ||
|             ]
 | ||
|           },
 | ||
|           {
 | ||
|             type: 'linear',
 | ||
|             x: 0,
 | ||
|             x2: 0,
 | ||
|             y: 0,
 | ||
|             y2: 1,
 | ||
|             colorStops: [
 | ||
|               {offset: 0, color: 'rgba(44, 151, 232, 1)'},
 | ||
|               {offset: 1, color: 'rgba(21, 154, 255, 0)'}
 | ||
|             ]
 | ||
|           },
 | ||
|           {
 | ||
|             type: 'linear',
 | ||
|             x: 0,
 | ||
|             x2: 0,
 | ||
|             y: 0,
 | ||
|             y2: 1,
 | ||
|             colorStops: [
 | ||
|               {offset: 0, color: 'rgba(191, 234, 255, 1)'},
 | ||
|               {offset: 1, color: 'rgba(191, 234, 255, 0.1)'}
 | ||
|             ]
 | ||
|           },
 | ||
|           {
 | ||
|             type: 'linear',
 | ||
|             x: 0,
 | ||
|             x2: 0,
 | ||
|             y: 0,
 | ||
|             y2: 1,
 | ||
|             colorStops: [
 | ||
|               {offset: 0, color: 'rgba(219, 179, 110, 1)'},
 | ||
|               {offset: 1, color: 'rgba(219, 179, 110, 0.1)'}
 | ||
|             ]
 | ||
|           }
 | ||
|         ],
 | ||
|         series: [
 | ||
|           {
 | ||
|             name: '已办结',
 | ||
|             type: 'bar',
 | ||
|             barWidth: '8'
 | ||
|           },
 | ||
|           {
 | ||
|             name: '待受理',
 | ||
|             barWidth: '8',
 | ||
|             type: 'bar'
 | ||
|           },
 | ||
|           {
 | ||
|             name: '处理中',
 | ||
|             barWidth: '8',
 | ||
|             type: 'bar'
 | ||
|           },
 | ||
|           {
 | ||
|             name: '已拒绝',
 | ||
|             barWidth: '8',
 | ||
|             type: 'bar'
 | ||
|           }
 | ||
|         ]
 | ||
|       },
 | ||
|       wxGridReportOverviewInfo: {},
 | ||
|       tableData1: [],
 | ||
|       colConfigs1: [
 | ||
|         {prop: 'createTime', label: '时间', align: 'center', width: '60px', dateFormat: 'MM/DD'},
 | ||
|         {prop: 'reporterName', label: '姓名', align: 'center'},
 | ||
|         {prop: 'caseName', label: '事件名称', align: 'left', width: 130}
 | ||
|       ],
 | ||
|       eventInfo: {},
 | ||
|       reportHandleList: [],
 | ||
|       colConfigs2: [
 | ||
|         {slot: 'index'},
 | ||
|         {prop: 'name', label: '姓名', align: 'center'},
 | ||
|         {prop: 'overCount', label: '已办结', align: 'center', width: 60},
 | ||
|         {prop: 'handleCount', label: '办理中', align: 'center', width: 60},
 | ||
|         {prop: 'reportCount', label: '上报数', align: 'center', width: 60},
 | ||
|         {
 | ||
|           prop: 'reportCount',
 | ||
|           label: '联系TA',
 | ||
|           align: 'center',
 | ||
|           render: (h, params) => {
 | ||
|             return h(
 | ||
|                 'p', {
 | ||
|                   style: {
 | ||
|                     width: '52px',
 | ||
|                     height: '22px',
 | ||
|                     textAlign: 'center',
 | ||
|                     lineHeight: '22px',
 | ||
|                     color: '#D4F2FF',
 | ||
|                     cursor: 'pointer',
 | ||
|                     margin: '0 auto',
 | ||
|                     borderRadius: '4px',
 | ||
|                     backgroundImage: 'linear-gradient(175deg, #02bcee99 0%, #0144d899 100%)'
 | ||
|                   },
 | ||
|                   on: {
 | ||
|                     click: e => {
 | ||
|                       this.getLaunchCode(params.row.wxUserId)
 | ||
|                     }
 | ||
|                   },
 | ||
|                 }, '联系TA'
 | ||
|             )
 | ||
|           }
 | ||
|         }
 | ||
|       ],
 | ||
|       colConfigs3: [
 | ||
|         {prop: 'createTime', label: '时间', align: 'center', dateFormat: 'MM/DD'},
 | ||
|         {prop: 'desc', label: '事件内容', align: 'left', width: 300},
 | ||
|         {
 | ||
|           prop: 'status',
 | ||
|           label: '状态',
 | ||
|           align: 'center',
 | ||
|           render: (h, params) => {
 | ||
|             return h(
 | ||
|                 'i', {
 | ||
|                   style: {
 | ||
|                     display: 'inline-block',
 | ||
|                     fontStyle: 'normal',
 | ||
|                     width: '52px',
 | ||
|                     height: '20px',
 | ||
|                     textAlgin: 'center',
 | ||
|                     lineHeight: '20px',
 | ||
|                     color: this.mapStatus(params.row.status, 'color'),
 | ||
|                     margin: '0 auto',
 | ||
|                     borderRadius: '2px',
 | ||
|                     background: this.mapStatus(params.row.status, 'bgColor'),
 | ||
|                   }
 | ||
|                 }, this.mapStatus(params.row.status, 'name')
 | ||
|             )
 | ||
|           }
 | ||
|         },
 | ||
|         {
 | ||
|           prop: 'reportCount',
 | ||
|           label: '查看',
 | ||
|           align: 'center',
 | ||
|           render: (h, params) => {
 | ||
|             return h(
 | ||
|                 'p', {
 | ||
|                   style: {
 | ||
|                     color: '#00AAFF',
 | ||
|                     cursor: 'pointer'
 | ||
|                   },
 | ||
|                   on: {
 | ||
|                     click: () => {
 | ||
|                       this.getEventInfo(params.row.orderId, params.row)
 | ||
|                     }
 | ||
|                   },
 | ||
|                 }, '查看>>'
 | ||
|             )
 | ||
|           }
 | ||
|         }
 | ||
|       ],
 | ||
|       tableData3: [],
 | ||
|       search: {
 | ||
|         dateRange: '',
 | ||
|         param: '',
 | ||
|         source: '',
 | ||
|         status: '',
 | ||
|         categoryId: ''
 | ||
|       },
 | ||
|       dateRange: 2,
 | ||
|       eventList: []
 | ||
|     }
 | ||
|   },
 | ||
| 
 | ||
|   computed: {
 | ||
|     chartData1() {
 | ||
|       if (!this.wxGridReportOverviewInfo['上报来源分布+事件办理情况']) {
 | ||
|         return []
 | ||
|       }
 | ||
| 
 | ||
|       return this.wxGridReportOverviewInfo['上报来源分布+事件办理情况'].map(v => {
 | ||
|         return {
 | ||
|           name: v['月份'] + '月',
 | ||
|           '警格上报': v['警格上报'],
 | ||
|           '居民上报': v['居民上报']
 | ||
|         }
 | ||
|       })
 | ||
|     },
 | ||
| 
 | ||
|     chartData2() {
 | ||
|       if (!this.wxGridReportOverviewInfo['上报来源分布+事件办理情况']) {
 | ||
|         return []
 | ||
|       }
 | ||
| 
 | ||
|       return this.wxGridReportOverviewInfo['上报来源分布+事件办理情况'].map(v => {
 | ||
|         return {
 | ||
|           name: v['月份'] + '月',
 | ||
|           '上报总数': v['上报数量'],
 | ||
|           '已办理': v['已拒绝数量'],
 | ||
|           '已拒绝': v['已拒绝数量']
 | ||
|         }
 | ||
|       })
 | ||
|     },
 | ||
| 
 | ||
|     sllData() {
 | ||
|       return [{
 | ||
|         key: '累计受理事件',
 | ||
|         value: this.wxGridReportOverviewInfo['全部上报事件数量'] - this.wxGridReportOverviewInfo['待受理数量']
 | ||
|       }, {
 | ||
|         key: '累计上报事件',
 | ||
|         value: this.wxGridReportOverviewInfo['全部上报事件数量']
 | ||
|       }]
 | ||
|     },
 | ||
| 
 | ||
|     sllRate() {
 | ||
|       if (!this.wxGridReportOverviewInfo['全部上报事件数量']) {
 | ||
|         return 0
 | ||
|       }
 | ||
| 
 | ||
|       return Number((((this.wxGridReportOverviewInfo['全部上报事件数量'] - this.wxGridReportOverviewInfo['待受理数量']) / this.wxGridReportOverviewInfo['全部上报事件数量']) * 100).toFixed(2))
 | ||
|     },
 | ||
| 
 | ||
|     sjbjData() {
 | ||
|       return [{key: '累计办结事件', value: this.wxGridReportOverviewInfo['已办结数量']}, {key: '累计受理事件', value: this.wxGridReportOverviewInfo['全部上报事件数量'] - this.wxGridReportOverviewInfo['待受理数量']}]
 | ||
|     },
 | ||
| 
 | ||
|     sjbjRate() {
 | ||
|       if (!this.wxGridReportOverviewInfo['全部上报事件数量']) {
 | ||
|         return 0
 | ||
|       }
 | ||
| 
 | ||
|       return Number(((this.wxGridReportOverviewInfo['已办结数量'] / this.wxGridReportOverviewInfo['全部上报事件数量']) * 100).toFixed(2))
 | ||
|     },
 | ||
|   },
 | ||
| 
 | ||
|   mounted() {
 | ||
|     this.instance.post(`/api/wxgridcata/list`, null, {
 | ||
|       params: {
 | ||
|         level: 1,
 | ||
|         corpId
 | ||
|       }
 | ||
|     }).then(res => {
 | ||
|       if (res.code === 0) {
 | ||
|         this.eventList = res.data.records
 | ||
|         this.init()
 | ||
|       }
 | ||
|     })
 | ||
|   },
 | ||
| 
 | ||
|   methods: {
 | ||
|     mapProcessType(status) {
 | ||
|       return {
 | ||
|         '1': '创建',
 | ||
|         '2': '受理',
 | ||
|         '3': '分配',
 | ||
|         '4': '转交',
 | ||
|         '5': '办结',
 | ||
|         '6': '拒绝',
 | ||
|         '7': '办理中'
 | ||
|       }[status]
 | ||
|     },
 | ||
| 
 | ||
|     getLaunchCode(wxUserId) {
 | ||
|       this.instance.post(`/api/appdvcpconfig/getLaunchCode`, null, {
 | ||
|         params: {
 | ||
|           corpId,
 | ||
|           userid: wxUserId,
 | ||
|           operatorUserid: this.$store.state.user.info.wxUserId
 | ||
|         }
 | ||
|       }).then(res => {
 | ||
|         if (res.code === 0) {
 | ||
|           location.href = `wxwork://launch?launch_code=${res.data}`
 | ||
|         }
 | ||
|       })
 | ||
|     },
 | ||
| 
 | ||
|     mapStatus(status, type) {
 | ||
|       const index = Number(status)
 | ||
|       return [{
 | ||
|         color: '#FFB300',
 | ||
|         name: '待受理',
 | ||
|         bgColor: 'rgba(255, 203, 82, 0.14)'
 | ||
|       }, {
 | ||
|         color: '#508AFE',
 | ||
|         name: '办理中',
 | ||
|         bgColor: 'rgba(123, 176, 254, 0.14)'
 | ||
|       }, {
 | ||
|         color: '#07B759',
 | ||
|         name: '已办结',
 | ||
|         bgColor: 'rgba(19, 246, 201, 0.14)'
 | ||
|       }, {
 | ||
|         color: '#FF4C4C',
 | ||
|         name: '已拒绝',
 | ||
|         bgColor: 'rgba(255, 112, 112, 0.14)'
 | ||
|       }][index][type]
 | ||
|     },
 | ||
| 
 | ||
|     init(gridId) {
 | ||
|       this.gridId = ''
 | ||
|       this.gridParentId = gridId || 'gr3AePMwAAFWlqlNvfJboAWkRNbnA14A'
 | ||
|       this.instance.post(`/api/wxgridinfo/tree`, null, {
 | ||
|         params: {
 | ||
|           gridParentId: gridId || '',
 | ||
|           corpId
 | ||
|         }
 | ||
|       }).then(res => {
 | ||
|         if (res.code === 0) {
 | ||
|           this.getInfo()
 | ||
|           if (gridId) {
 | ||
|             this.policeStationList = res.data
 | ||
|           } else {
 | ||
|             this.areaList = res.data
 | ||
|           }
 | ||
|         }
 | ||
|       })
 | ||
|     },
 | ||
| 
 | ||
|     onStationChange() {
 | ||
|       this.$nextTick(() => {
 | ||
|         this.instance.post(`/api/wxgridinfo/tree`, null, {
 | ||
|           params: {
 | ||
|             gridParentId: this.gridId,
 | ||
|             corpId
 | ||
|           }
 | ||
|         }).then(res => {
 | ||
|           if (res.code === 0) {
 | ||
|             this.getInfo()
 | ||
|           }
 | ||
|         })
 | ||
|       })
 | ||
|     },
 | ||
| 
 | ||
|     getEventInfo(orderId, info) {
 | ||
|       this.instance.post(`/api/wxgridinfo/reportInfo`, null, {
 | ||
|         params: {
 | ||
|           orderId,
 | ||
|           corpId
 | ||
|         }
 | ||
|       }).then(res => {
 | ||
|         if (res.code === 0) {
 | ||
|           this.eventInfo = {
 | ||
|             ...res.data,
 | ||
|             typeName: info.type === '1' ? '居民上报' : '巡查上报',
 | ||
|             status: info.status
 | ||
|           }
 | ||
| 
 | ||
|           this.isShow = true
 | ||
|         }
 | ||
|       })
 | ||
|     },
 | ||
| 
 | ||
|     onTypeChange(index) {
 | ||
|       this.currIndex = index
 | ||
|       this.getWxGridReportCata()
 | ||
|     },
 | ||
| 
 | ||
|     onChange() {
 | ||
|       this.instance.post(`/api/wxgridinfo/wxGridReportNew`, null, {
 | ||
|         params: {
 | ||
|           corpId,
 | ||
|           gridId: this.gridId || this.gridParentId,
 | ||
|           type: this.type
 | ||
|         }
 | ||
|       }).then(res => {
 | ||
|         if (res.code === 0) {
 | ||
|           this.tableData1 = res.data
 | ||
|         }
 | ||
|       })
 | ||
|     },
 | ||
| 
 | ||
|     onReportChange(index) {
 | ||
|       this.dateRange = index
 | ||
| 
 | ||
|       this.$nextTick(() => {
 | ||
|         this.getReportHandleList()
 | ||
|       })
 | ||
|     },
 | ||
| 
 | ||
|     getReportList() {
 | ||
|       this.instance.post(`/api/wxgridinfo/reportList`, null, {
 | ||
|         params: {
 | ||
|           corpId,
 | ||
|           gridId: this.gridId || this.gridParentId,
 | ||
|           size: '50',
 | ||
|           ...this.search
 | ||
|         }
 | ||
|       }).then(res => {
 | ||
|         if (res.code === 0) {
 | ||
|           this.tableData3 = res.data
 | ||
|         }
 | ||
|       })
 | ||
|     },
 | ||
| 
 | ||
|     getWxGridReportCata() {
 | ||
|       this.instance.post(`/api/wxgridinfo/wxGridReportCata`, null, {
 | ||
|         params: {
 | ||
|           categoryId: this.eventList[this.currIndex].categoryId,
 | ||
|           gridId: this.gridId || this.gridParentId,
 | ||
|           corpId
 | ||
|         }
 | ||
|       }).then(res => {
 | ||
|         if (res.code === 0) {
 | ||
|           this.chartData3 = res.data.map(v => {
 | ||
|             return {
 | ||
|               name: v['二级分类名称'],
 | ||
|               '已办结': v['已办结'] || 0,
 | ||
|               '待受理': v['待处理'] || 0,
 | ||
|               '处理中': v['处理中'] || 0,
 | ||
|               '已拒绝': v['已拒绝'] || 0
 | ||
|             }
 | ||
|           })
 | ||
|         }
 | ||
|       })
 | ||
|     },
 | ||
| 
 | ||
|     getReportHandleList() {
 | ||
|       this.instance.post(`/api/wxgridinfo/reportHandleList`, null, {
 | ||
|         params: {
 | ||
|           corpId,
 | ||
|           gridId: this.gridId || this.gridParentId,
 | ||
|           size: '50',
 | ||
|           dateRange: this.dateRange
 | ||
|         }
 | ||
|       }).then(res => {
 | ||
|         if (res.code === 0) {
 | ||
|           this.reportHandleList = [
 | ||
|             ...res.data
 | ||
|           ]
 | ||
|         }
 | ||
|       })
 | ||
|     },
 | ||
| 
 | ||
|     getInfo() {
 | ||
|       this.instance.post(`/api/wxgridinfo/comprehensiveOverview`, null, {
 | ||
|         params: {
 | ||
|           corpId
 | ||
|         }
 | ||
|       }).then(res => {
 | ||
|         if (res.code === 0) {
 | ||
|           this.middleTotalInfo = res.data
 | ||
|         }
 | ||
|       })
 | ||
| 
 | ||
|       this.getWxGridReportCata()
 | ||
|       this.getReportHandleList()
 | ||
|       this.getReportList()
 | ||
| 
 | ||
|       this.instance.post(`/api/wxgridinfo/wxGridReportOverview`, null, {
 | ||
|         params: {
 | ||
|           corpId,
 | ||
|           gridId: this.gridId || this.gridParentId
 | ||
|         }
 | ||
|       }).then(res => {
 | ||
|         if (res.code === 0) {
 | ||
|           this.wxGridReportOverviewInfo = res.data
 | ||
|         }
 | ||
|       })
 | ||
| 
 | ||
|       this.instance.post(`/api/wxgridinfo/wxGridReportNew`, null, {
 | ||
|         params: {
 | ||
|           corpId,
 | ||
|           gridId: this.gridId || this.gridParentId,
 | ||
|           type: this.type
 | ||
|         }
 | ||
|       }).then(res => {
 | ||
|         if (res.code === 0) {
 | ||
|           this.tableData1 = res.data
 | ||
|         }
 | ||
|       })
 | ||
|     },
 | ||
| 
 | ||
|     Hex2RGBA(color, alpha = 1) {
 | ||
|       let hex = 0;
 | ||
|       if (color.charAt(0) == "#") {
 | ||
|         if (color.length == 4) {
 | ||
|           //检测诸如#FFF简写格式
 | ||
|           color = "#" + color.charAt(1).repeat(2) +
 | ||
|               color.charAt(2).repeat(2) +
 | ||
|               color.charAt(3).repeat(2);
 | ||
|         }
 | ||
|         hex = parseInt(color.slice(1), 16);
 | ||
|       }
 | ||
|       let r = hex >> 16 & 0xFF;
 | ||
|       let g = hex >> 8 & 0xFF;
 | ||
|       let b = hex & 0xFF;
 | ||
|       return `rgba(${r},${g},${b},${alpha})`;
 | ||
|     },
 | ||
|     RGBtoHex(r, g, b) {
 | ||
|       let hex = r << 16 | g << 8 | b;
 | ||
|       return "#" + hex.toString(16);
 | ||
|     }
 | ||
|   }
 | ||
| }
 | ||
| </script>
 | ||
| 
 | ||
| <style lang="scss" scoped>
 | ||
| .AppQxnDv {
 | ||
|   display: flex;
 | ||
|   height: 100%;
 | ||
|   padding-top: 16px;
 | ||
|   box-sizing: border-box;
 | ||
|   background: #0c0c0c;
 | ||
|   overflow: hidden;
 | ||
| 
 | ||
|   .title-right {
 | ||
|     display: flex;
 | ||
|     position: absolute;
 | ||
|     align-items: center;
 | ||
|     top: 4px;
 | ||
|     right: 0;
 | ||
|     z-index: 11;
 | ||
| 
 | ||
|     span {
 | ||
|       width: 58px;
 | ||
|       height: 22px;
 | ||
|       line-height: 22px;
 | ||
|       margin-right: 4px;
 | ||
|       color: #1FBECC;
 | ||
|       text-align: center;
 | ||
|       font-size: 12px;
 | ||
|       cursor: pointer;
 | ||
|       transition: all ease 0.3s;
 | ||
|       border: 1px solid transparent;
 | ||
|       background: rgba(31, 158, 204, 0.16);
 | ||
| 
 | ||
|       &.active, &:hover {
 | ||
|         background: rgba(31, 158, 204, 0.2);
 | ||
|         border: 1px solid #20B4C5;
 | ||
|       }
 | ||
|     }
 | ||
|   }
 | ||
| 
 | ||
|   .event-info {
 | ||
|     position: fixed;
 | ||
|     left: 0;
 | ||
|     top: 0;
 | ||
|     z-index: 111;
 | ||
|     width: 100%;
 | ||
|     height: 100%;
 | ||
|     overflow: hidden;
 | ||
| 
 | ||
|     .info-bottom__wrapper {
 | ||
|       height: 120px;
 | ||
|       margin-top: 20px;
 | ||
|       overflow-y: auto;
 | ||
|     }
 | ||
| 
 | ||
|     .info-bottom__item {
 | ||
|       display: flex;
 | ||
|       align-items: center;
 | ||
|       justify-content: space-between;
 | ||
|       line-height: 1;
 | ||
|       margin-bottom: 12px;
 | ||
|       color: #fff;
 | ||
| 
 | ||
|       &:last-child {
 | ||
|         margin-bottom: 0;
 | ||
|       }
 | ||
| 
 | ||
|       div {
 | ||
|         flex: 1;
 | ||
|         margin: 0 18px;
 | ||
|         white-space: nowrap;
 | ||
|         overflow: hidden;
 | ||
|         text-overflow: ellipsis;
 | ||
|         font-size: 12px;
 | ||
|         color: #d0e1e8;
 | ||
| 
 | ||
|         p {
 | ||
|           margin-bottom: 8px;
 | ||
|           white-space: nowrap;
 | ||
|           overflow: hidden;
 | ||
|           text-overflow: ellipsis;
 | ||
|         }
 | ||
|       }
 | ||
| 
 | ||
|       i {
 | ||
|         font-style: normal;
 | ||
|         font-size: 14px;
 | ||
|       }
 | ||
| 
 | ||
|       h4 {
 | ||
|         font-size: 14px;
 | ||
|         font-weight: normal;
 | ||
|         color: #9BB7D4;
 | ||
|       }
 | ||
|     }
 | ||
| 
 | ||
|     .info-mask {
 | ||
|       position: absolute;
 | ||
|       left: 0;
 | ||
|       top: 0;
 | ||
|       z-index: 1;
 | ||
|       width: 100%;
 | ||
|       height: 100%;
 | ||
|       background: rgba($color: #000000, $alpha: 0.1);
 | ||
|     }
 | ||
| 
 | ||
|     .info-content {
 | ||
|       position: absolute;
 | ||
|       top: 50%;
 | ||
|       left: 50%;
 | ||
|       z-index: 11;
 | ||
|       width: 498px;
 | ||
|       padding: 15px 25px 30px;
 | ||
|       background: url(https://cdn.cunwuyun.cn/dvcp/dv/qxn/event-bg.png);
 | ||
|       background-size: 100% 100%;
 | ||
|       transform: translate(-50%, -50%);
 | ||
| 
 | ||
|       & > h3 {
 | ||
|         word-break: break-all;
 | ||
|         text-overflow: ellipsis;
 | ||
|         overflow: hidden;
 | ||
|         display: -webkit-box;
 | ||
|         -webkit-box-orient: vertical;
 | ||
|         -webkit-line-clamp: 3;
 | ||
|         margin-top: 28px;
 | ||
|         font-weight: 600;
 | ||
|         font-size: 16px;
 | ||
|         color: #02FEFF;
 | ||
|       }
 | ||
| 
 | ||
|       .info-bottom {
 | ||
|         margin-top: 20px;
 | ||
|         padding-top: 14px;
 | ||
|         border-top: 1px solid #1b3145;
 | ||
| 
 | ||
|         & > h3 {
 | ||
|           font-weight: 600;
 | ||
|           font-size: 16px;
 | ||
|           color: #02FEFF;
 | ||
|         }
 | ||
|       }
 | ||
| 
 | ||
|       .progress {
 | ||
|         display: flex;
 | ||
|         align-items: center;
 | ||
|         justify-content: space-between;
 | ||
|         width: 100%;
 | ||
|         margin-top: 18px;
 | ||
|         padding: 0 28px;
 | ||
|         color: #9BB7D4;
 | ||
|         font-size: 12px;
 | ||
|         text-align: center;
 | ||
| 
 | ||
|         .progress-item {
 | ||
|           display: flex;
 | ||
|           position: relative;
 | ||
|           align-items: center;
 | ||
|           justify-content: center;
 | ||
|           flex-direction: column;
 | ||
|           width: 78px;
 | ||
| 
 | ||
|           &:after {
 | ||
|             position: absolute;
 | ||
|             top: 37px;
 | ||
|             left: 0;
 | ||
|             width: 105px;
 | ||
|             height: 2px;
 | ||
|             background: #647886;
 | ||
|             content: ' ';
 | ||
|           }
 | ||
| 
 | ||
|           &:first-child::after {
 | ||
|             width: 133px;
 | ||
|             left: -28px;
 | ||
|           }
 | ||
| 
 | ||
|           &:first-child::before {
 | ||
|             position: absolute;
 | ||
|             top: 38px;
 | ||
|             left: -28px;
 | ||
|             width: 8px;
 | ||
|             height: 8px;
 | ||
|             z-index: 11;
 | ||
|             background: #647886;
 | ||
|             border-radius: 50%;
 | ||
|             content: ' ';
 | ||
|             transform: translateY(-50%);
 | ||
|           }
 | ||
| 
 | ||
|           &:nth-of-type(4n)::before {
 | ||
|             position: absolute;
 | ||
|             top: 38px;
 | ||
|             right: -28px;
 | ||
|             z-index: 11;
 | ||
|             width: 8px;
 | ||
|             height: 8px;
 | ||
|             background: #647886;
 | ||
|             border-radius: 50%;
 | ||
|             content: ' ';
 | ||
|             transform: translateY(-50%);
 | ||
|           }
 | ||
| 
 | ||
|           &.active {
 | ||
|             h4 {
 | ||
|               color: rgba(7, 183, 89, 1);
 | ||
|             }
 | ||
| 
 | ||
|             &:first-child::before {
 | ||
|               background: rgba(7, 183, 89, 1);
 | ||
|             }
 | ||
| 
 | ||
|             &:nth-of-type(4n)::before {
 | ||
|               background: rgba(7, 183, 89, 1);
 | ||
|             }
 | ||
| 
 | ||
|             &:after {
 | ||
|               background: rgba(7, 183, 89, 1);
 | ||
|             }
 | ||
| 
 | ||
|             .progress-item__middle {
 | ||
|               background: rgba(7, 183, 89, 0.4);
 | ||
| 
 | ||
|               i {
 | ||
|                 background: rgba(7, 183, 89, 1);
 | ||
|               }
 | ||
|             }
 | ||
|           }
 | ||
| 
 | ||
|           h4 {
 | ||
|             margin-bottom: 12px;
 | ||
|             font-size: 12px;
 | ||
|             color: #fff;
 | ||
|             font-weight: 500;
 | ||
|           }
 | ||
| 
 | ||
|           .progress-item__middle {
 | ||
|             position: relative;
 | ||
|             z-index: 11;
 | ||
|             width: 20px;
 | ||
|             height: 20px;
 | ||
|             margin-bottom: 11px;
 | ||
|             border-radius: 50%;
 | ||
|             background: rgba(47, 140, 232, 0.4);
 | ||
| 
 | ||
|             i {
 | ||
|               position: absolute;
 | ||
|               left: 50%;
 | ||
|               top: 50%;
 | ||
|               width: 8px;
 | ||
|               height: 8px;
 | ||
|               border-radius: 50%;
 | ||
|               background: #2F8CE8;
 | ||
|               transform: translate(-50%, -50%);
 | ||
|               content: '';
 | ||
|             }
 | ||
|           }
 | ||
| 
 | ||
|           span {
 | ||
|             line-height: 16px;
 | ||
|           }
 | ||
| 
 | ||
|           p {
 | ||
|             margin-bottom: 5px;
 | ||
|           }
 | ||
|         }
 | ||
|       }
 | ||
| 
 | ||
|       .info-wrapper {
 | ||
|         margin-top: 12px;
 | ||
| 
 | ||
|         .info-wrapper__item {
 | ||
|           display: flex;
 | ||
|           align-items: center;
 | ||
|           justify-content: space-between;
 | ||
|           width: 100%;
 | ||
|           line-height: 1;
 | ||
|           margin-bottom: 10px;
 | ||
| 
 | ||
|           &:last-child {
 | ||
|             margin-bottom: 0;
 | ||
|           }
 | ||
| 
 | ||
|           label {
 | ||
|             width: 70px;
 | ||
|             margin-right: 20px;
 | ||
|             color: #9BB7D4;
 | ||
|             text-align: right;
 | ||
|             font-size: 14px;
 | ||
|             font-weight: 500;
 | ||
|           }
 | ||
| 
 | ||
|           span {
 | ||
|             width: 70%;
 | ||
|             text-align: right;
 | ||
|             font-size: 14px;
 | ||
|             color: #fff;
 | ||
|             white-space: nowrap;
 | ||
|             overflow: hidden;
 | ||
|             text-overflow: ellipsis;
 | ||
|           }
 | ||
|         }
 | ||
|       }
 | ||
| 
 | ||
|       img {
 | ||
|         position: absolute;
 | ||
|         top: 30px;
 | ||
|         right: 18px;
 | ||
|         z-index: 1;
 | ||
|         width: 24px;
 | ||
|         height: 24px;
 | ||
|         cursor: pointer;
 | ||
|         transition: all ease 300ms;
 | ||
| 
 | ||
|         &:hover {
 | ||
|           opacity: 0.6;
 | ||
|         }
 | ||
|       }
 | ||
| 
 | ||
|       .info-title {
 | ||
|         display: flex;
 | ||
|         align-items: center;
 | ||
| 
 | ||
|         h2 {
 | ||
|           font-size: 16px;
 | ||
|           color: #fff;
 | ||
|         }
 | ||
|       }
 | ||
|     }
 | ||
|   }
 | ||
| 
 | ||
|   .table-index {
 | ||
|     display: flex;
 | ||
|     align-items: center;
 | ||
|     justify-content: center;
 | ||
| 
 | ||
|     span {
 | ||
|       width: 22px;
 | ||
|       height: 20px;
 | ||
|       line-height: 20px;
 | ||
|       text-align: center;
 | ||
|       border-radius: 4px;
 | ||
|       border: 1px solid #42BED5;
 | ||
|     }
 | ||
| 
 | ||
|     &.table-index__active span {
 | ||
|       border-color: #EDAA38;
 | ||
|     }
 | ||
|   }
 | ||
| 
 | ||
|   .wrapper {
 | ||
|     margin-bottom: 12px;
 | ||
|   }
 | ||
| 
 | ||
|   .AppQxnDv-title {
 | ||
|     display: flex;
 | ||
|     position: relative;
 | ||
|     align-items: center;
 | ||
|     justify-content: space-between;
 | ||
|     height: 30px;
 | ||
|     line-height: 30px;
 | ||
|     color: rgba(172, 201, 230, 0.8);
 | ||
|     background-image: linear-gradient(270deg, rgba(31, 67, 102, 0) 0%, rgba(31, 67, 102, 0.25) 100%);
 | ||
| 
 | ||
|     & > div {
 | ||
|       display: flex;
 | ||
|       align-items: center;
 | ||
| 
 | ||
|       &:first-child {
 | ||
|         h2:first-child {
 | ||
|           &::after {
 | ||
|             position: absolute;
 | ||
|             bottom: 0;
 | ||
|             left: 27px;
 | ||
|             z-index: 1;
 | ||
|             width: 9px;
 | ||
|             height: 2px;
 | ||
|             background: rgba(41, 77, 102, 1);
 | ||
|             content: ' ';
 | ||
|           }
 | ||
|         }
 | ||
|       }
 | ||
|     }
 | ||
| 
 | ||
|     & > h2 {
 | ||
|       &::after {
 | ||
|         position: absolute;
 | ||
|         bottom: 0;
 | ||
|         left: 27px;
 | ||
|         z-index: 1;
 | ||
|         width: 9px;
 | ||
|         height: 2px;
 | ||
|         background: rgba(41, 77, 102, 1);
 | ||
|         content: ' ';
 | ||
|       }
 | ||
|     }
 | ||
| 
 | ||
| 
 | ||
|     .AppQxnDv-title__tab {
 | ||
|       h2 {
 | ||
|         cursor: pointer;
 | ||
|       }
 | ||
| 
 | ||
|       h2.active {
 | ||
|         color: #fff;
 | ||
|         font-size: 16px;
 | ||
|       }
 | ||
|     }
 | ||
| 
 | ||
|     h2 {
 | ||
|       position: relative;
 | ||
|       font-size: 16px;
 | ||
|       font-weight: 500;
 | ||
|       padding: 0 10px;
 | ||
|     }
 | ||
| 
 | ||
|     &::after {
 | ||
|       position: absolute;
 | ||
|       bottom: 0;
 | ||
|       left: 0;
 | ||
|       z-index: 1;
 | ||
|       width: 9px;
 | ||
|       height: 2px;
 | ||
|       background: #5299CC;
 | ||
|       content: ' ';
 | ||
|     }
 | ||
| 
 | ||
|     &::before {
 | ||
|       position: absolute;
 | ||
|       bottom: 0;
 | ||
|       left: 14px;
 | ||
|       z-index: 1;
 | ||
|       width: 9px;
 | ||
|       height: 2px;
 | ||
|       background: rgba(41, 77, 102, 1);
 | ||
|       content: ' ';
 | ||
|     }
 | ||
|   }
 | ||
| 
 | ||
|   .AppQxnDv-total {
 | ||
|     display: flex;
 | ||
|     align-items: center;
 | ||
|     margin-bottom: 16px;
 | ||
| 
 | ||
|     .item {
 | ||
|       display: flex;
 | ||
|       align-items: center;
 | ||
|       justify-content: center;
 | ||
|       flex-direction: column;
 | ||
|       flex: 1;
 | ||
| 
 | ||
|       h2 {
 | ||
|         margin-bottom: 10px;
 | ||
|         font-size: 14px;
 | ||
|         font-weight: 500;
 | ||
|         color: #FFFFFF;
 | ||
|       }
 | ||
| 
 | ||
|       .item-bottom {
 | ||
|         display: flex;
 | ||
|         align-items: baseline;
 | ||
| 
 | ||
|         span {
 | ||
|           font-weight: 700;
 | ||
|           font-size: 18px;
 | ||
|           color: #02FEFF;
 | ||
|         }
 | ||
| 
 | ||
|         i {
 | ||
|           margin-left: 4px;
 | ||
|           font-style: normal;
 | ||
|           color: rgba(255, 255, 255, 0.5);
 | ||
|           font-size: 12px;
 | ||
|         }
 | ||
|       }
 | ||
|     }
 | ||
|   }
 | ||
| 
 | ||
|   :deep(.el-select) {
 | ||
|     height: 24px;
 | ||
|     line-height: 24px;
 | ||
| 
 | ||
|     input {
 | ||
|       width: 100%;
 | ||
|       height: 24px;
 | ||
|       line-height: 24px;
 | ||
|       padding: 0 26px 0 6px;
 | ||
|       font-size: 12px;
 | ||
|       color: rgba(179, 229, 229, 1);
 | ||
|       border: 1px solid #2A7A92;
 | ||
|       border-radius: 2px;
 | ||
|       background: transparent;
 | ||
| 
 | ||
|       &::placeholder {
 | ||
|         color: rgba(179, 229, 229, 0.6);
 | ||
|       }
 | ||
|     }
 | ||
| 
 | ||
|     .el-input__suffix {
 | ||
|       right: 1px;
 | ||
|       top: 0;
 | ||
|     }
 | ||
| 
 | ||
|     i {
 | ||
|       color: #B3E5E5;
 | ||
|     }
 | ||
|   }
 | ||
| 
 | ||
|   :deep(.el-input) {
 | ||
|     height: 24px;
 | ||
|     line-height: 24px;
 | ||
| 
 | ||
|     input {
 | ||
|       width: 100%;
 | ||
|       height: 24px;
 | ||
|       line-height: 24px;
 | ||
|       padding: 0 6px;
 | ||
|       font-size: 12px;
 | ||
|       color: rgba(179, 229, 229, 1);
 | ||
|       border: 1px solid #2A7A92;
 | ||
|       border-radius: 2px;
 | ||
|       background: transparent;
 | ||
| 
 | ||
|       &::placeholder {
 | ||
|         color: rgba(179, 229, 229, 0.6);
 | ||
|       }
 | ||
|     }
 | ||
| 
 | ||
|     .el-input-group__append {
 | ||
|       padding: 0 16px;
 | ||
|       background: #007994;
 | ||
|       border: none;
 | ||
|       border-radius: 0 2px 2px 0;
 | ||
|     }
 | ||
| 
 | ||
|     .el-input__suffix {
 | ||
|       right: 1px;
 | ||
|       top: 0;
 | ||
|     }
 | ||
| 
 | ||
|     i {
 | ||
|       color: #B3E5E5;
 | ||
|     }
 | ||
|   }
 | ||
| 
 | ||
|   :deep(.ai-table) {
 | ||
|     .el-table {
 | ||
|       font-size: 12px;
 | ||
|       color: #d0e1e8;
 | ||
|       background-color: transparent !important;
 | ||
| 
 | ||
|       th.el-table__cell.is-leaf, .el-table td.el-table__cell {
 | ||
|         border: none !important;
 | ||
|       }
 | ||
| 
 | ||
|       tr.el-table__row--striped td {
 | ||
|         background: rgba(33, 180, 253, 0.1) !important;
 | ||
|       }
 | ||
| 
 | ||
|       .el-table__header tr th:first-child .cell {
 | ||
|         padding: 0 !important;
 | ||
|       }
 | ||
| 
 | ||
|       .el-table__body tr td:first-child .cell {
 | ||
|         padding: 0 !important;
 | ||
|       }
 | ||
| 
 | ||
|       &.el-table--enable-row-hover .el-table__body tr:hover > td.el-table__cell {
 | ||
|         background-color: rgba(33, 180, 253, 0.1) !important;
 | ||
|       }
 | ||
| 
 | ||
|       th.el-table__cell {
 | ||
|         background-color: transparent;
 | ||
|       }
 | ||
| 
 | ||
|       tr {
 | ||
|         background-color: transparent;
 | ||
|       }
 | ||
| 
 | ||
|       .el-table__cell {
 | ||
|         padding: 7px 0;
 | ||
|         color: #d0e1e8;
 | ||
|       }
 | ||
| 
 | ||
|       .el-table__header tr .cell {
 | ||
|         color: #02FEFF !important;
 | ||
|       }
 | ||
|     }
 | ||
| 
 | ||
|     .ai-table__header {
 | ||
|       background: rgba(33, 180, 253, 0.1) !important;
 | ||
|     }
 | ||
|   }
 | ||
| 
 | ||
|   ::-webkit-scrollbar {
 | ||
|     width: 5px;
 | ||
|     height: 14px;
 | ||
|   }
 | ||
| 
 | ||
|   ::-webkit-scrollbar-corner {
 | ||
|     background: transparent;
 | ||
|   }
 | ||
| 
 | ||
|   ::-webkit-scrollbar-thumb {
 | ||
|     min-height: 20px;
 | ||
|     background-clip: content-box;
 | ||
|     box-shadow: 0 0 0 5px rgba(116, 148, 170, 0.5) inset;
 | ||
|   }
 | ||
| 
 | ||
|   ::-webkit-scrollbar-track {
 | ||
|     box-shadow: 1px 1px 5px rgba(116, 148, 170, 0.5) inset;
 | ||
|   }
 | ||
| 
 | ||
|   * {
 | ||
|     box-sizing: border-box;
 | ||
|   }
 | ||
| 
 | ||
|   & > .right {
 | ||
|     display: flex;
 | ||
|     flex: 1;
 | ||
|     overflow: hidden;
 | ||
| 
 | ||
|     .right-left {
 | ||
|       width: 530px;
 | ||
| 
 | ||
|       .right-left__middle {
 | ||
|         display: flex;
 | ||
|         justify-content: space-between;
 | ||
| 
 | ||
|         .left {
 | ||
|           width: 245px;
 | ||
|           margin-right: 12px;
 | ||
|         }
 | ||
| 
 | ||
|         .right {
 | ||
|           width: 275px;
 | ||
|         }
 | ||
|       }
 | ||
| 
 | ||
|       .right-left__top {
 | ||
|         display: flex;
 | ||
|         justify-content: space-between;
 | ||
| 
 | ||
|         div {
 | ||
|           width: 275px;
 | ||
| 
 | ||
|           &:first-child {
 | ||
|             width: 245px;
 | ||
|           }
 | ||
|         }
 | ||
|       }
 | ||
|     }
 | ||
| 
 | ||
|     .right-middle {
 | ||
|       width: 556px;
 | ||
|       margin: 0 40px;
 | ||
| 
 | ||
|       .right-middle__middle {
 | ||
|         display: flex;
 | ||
|         justify-content: space-between;
 | ||
|         margin-bottom: 16px;
 | ||
|       }
 | ||
|     }
 | ||
| 
 | ||
|     .right-right {
 | ||
|       display: flex;
 | ||
|       flex-direction: column;
 | ||
|       flex: 1;
 | ||
|     }
 | ||
|   }
 | ||
| 
 | ||
|   & > .left {
 | ||
|     display: flex;
 | ||
|     align-items: center;
 | ||
|     flex-direction: column;
 | ||
|     width: 240px;
 | ||
|     margin-right: 20px;
 | ||
| 
 | ||
|     .left-list {
 | ||
|       flex: 1;
 | ||
|       overflow-y: auto;
 | ||
|       width: 100%;
 | ||
| 
 | ||
|       .left-item {
 | ||
|         position: relative;
 | ||
|         width: 100%;
 | ||
|         cursor: pointer;
 | ||
|         margin-bottom: 10px;
 | ||
|         padding: 30px 14px 14px;
 | ||
|         background-image: linear-gradient(0deg, rgba(40, 182, 253, 0.08) 1%, rgba(0, 102, 154, 0.2) 100%);
 | ||
|         border-radius: 6px;
 | ||
|         box-shadow: inset 0 -1px 0 0 transparent;
 | ||
|         transition: all ease 0.3s;
 | ||
| 
 | ||
|         &:hover {
 | ||
|           opacity: 0.7;
 | ||
|         }
 | ||
| 
 | ||
|         &.active {
 | ||
|           background-image: linear-gradient(0deg, #28b6fd24 0%, #00669aa6 99%);
 | ||
|           box-shadow: inset 0 -1px 0 0 #23B2C7;
 | ||
| 
 | ||
|           &:hover {
 | ||
|             opacity: 1;
 | ||
|           }
 | ||
|         }
 | ||
| 
 | ||
|         i {
 | ||
|           position: absolute;
 | ||
|           left: 0;
 | ||
|           top: 0;
 | ||
|           width: 22px;
 | ||
|           height: 21px;
 | ||
|           line-height: 21px;
 | ||
|           text-align: center;
 | ||
|           font-weight: 600;
 | ||
|           font-style: normal;
 | ||
|           font-size: 14px;
 | ||
|           color: #FFFFFF;
 | ||
|           background-image: linear-gradient(177deg, #02eeee66 0%, #0190d866 100%);
 | ||
|           border-radius: 6px 0 6px 0;
 | ||
|         }
 | ||
| 
 | ||
|         .left-item__bottom {
 | ||
|           display: flex;
 | ||
|           align-items: center;
 | ||
|           justify-content: space-between;
 | ||
| 
 | ||
|           span {
 | ||
|             color: #fff;
 | ||
|             font-weight: 600;
 | ||
|             font-size: 12px;
 | ||
|           }
 | ||
|         }
 | ||
| 
 | ||
|         .left-item__top {
 | ||
|           display: flex;
 | ||
|           align-items: center;
 | ||
|           justify-content: space-between;
 | ||
|           margin-bottom: 10px;
 | ||
| 
 | ||
|           .el-select {
 | ||
|             width: 100px;
 | ||
|           }
 | ||
| 
 | ||
|           h2 {
 | ||
|             font-weight: 600;
 | ||
|             font-size: 14px;
 | ||
|             color: #FFFFFF;
 | ||
|           }
 | ||
|         }
 | ||
|       }
 | ||
|     }
 | ||
|   }
 | ||
| }
 | ||
| </style>
 |