黔西南大屏
This commit is contained in:
		
							
								
								
									
										784
									
								
								packages/bigscreen/dv/AppQxnDv.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										784
									
								
								packages/bigscreen/dv/AppQxnDv.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,784 @@ | |||||||
|  | <template> | ||||||
|  |   <div class="AppQxnDv"> | ||||||
|  |     <div class="left"> | ||||||
|  |       <AiDvPanel style="width: 100%" border="border6" title="单位列表"> | ||||||
|  |       <div class="left-list"> | ||||||
|  |         <div class="left-item" v-for="(item, index) in 16" :key="index"> | ||||||
|  |           <i>{{ index + 1 }}</i> | ||||||
|  |           <div class="left-item__top"> | ||||||
|  |             <h2>黔西南州公安局</h2> | ||||||
|  |             <el-select v-model="value" size="mini" placeholder="请选择派出所"> | ||||||
|  |               <el-option label="南京派出所" value="1"></el-option> | ||||||
|  |               <el-option label="北京派出所" value="2"></el-option> | ||||||
|  |               <el-option label="长安派出所" value="3"></el-option> | ||||||
|  |             </el-select> | ||||||
|  |           </div> | ||||||
|  |           <div class="left-item__bottom"> | ||||||
|  |             <span>居民数量:17246</span> | ||||||
|  |             <span>成员:2057</span> | ||||||
|  |           </div> | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  |       </AiDvPanel> | ||||||
|  |     </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" v-for="(item, index) in 4" :key="index"> | ||||||
|  |               <h2>全部人员数</h2> | ||||||
|  |               <div class="item-bottom"> | ||||||
|  |                 <span>726,079</span> | ||||||
|  |                 <i>人</i> | ||||||
|  |               </div> | ||||||
|  |             </div> | ||||||
|  |           </div> | ||||||
|  |           <div class="wrapper"> | ||||||
|  |             <div class="AppQxnDv-title"> | ||||||
|  |               <h2>增长情况</h2> | ||||||
|  |             </div> | ||||||
|  |             <ai-echart-v2 | ||||||
|  |               style="height: 200px; width: 500px;" | ||||||
|  |               :ref="'chart'" | ||||||
|  |               :data="lineData" | ||||||
|  |               :ops="lineChart1"> | ||||||
|  |             </ai-echart-v2> | ||||||
|  |           </div> | ||||||
|  |           <div class="right-left__middle"> | ||||||
|  |             <div class="left"> | ||||||
|  |               <div class="wrapper"> | ||||||
|  |                 <div class="AppQxnDv-title"> | ||||||
|  |                   <h2>覆盖率</h2> | ||||||
|  |                 </div> | ||||||
|  |                 <DoughnutChart :ratio="60"></DoughnutChart> | ||||||
|  |               </div> | ||||||
|  |               <div class="wrapper"> | ||||||
|  |                 <div class="AppQxnDv-title"> | ||||||
|  |                   <h2>群标签化率</h2> | ||||||
|  |                 </div> | ||||||
|  |                 <DoughnutChart :ratio="95"></DoughnutChart> | ||||||
|  |               </div> | ||||||
|  |             </div> | ||||||
|  |             <div class="right wrapper"> | ||||||
|  |               <div class="AppQxnDv-title"> | ||||||
|  |                 <h2>群标签情况</h2> | ||||||
|  |                 <el-select v-model="value" style="width: 92px" size="mini" placeholder="专属"> | ||||||
|  |                   <el-option label="XXX派出所" value="1"></el-option> | ||||||
|  |                   <el-option label="XXX派出所" value="2"></el-option> | ||||||
|  |                   <el-option label="XXX派出所" value="3"></el-option> | ||||||
|  |                 </el-select> | ||||||
|  |               </div> | ||||||
|  |               <ai-echart-v2 | ||||||
|  |                 style="height: 230px; width: 245px;" | ||||||
|  |                 :ref="'chart2'" | ||||||
|  |                 :data="lineData1" | ||||||
|  |                 :ops="barChart8"> | ||||||
|  |               </ai-echart-v2> | ||||||
|  |             </div> | ||||||
|  |           </div> | ||||||
|  |           <div class="right-left__bottom"> | ||||||
|  |             <div class="wrapper"> | ||||||
|  |               <div class="AppQxnDv-title"> | ||||||
|  |                 <h2>单位成员关系人数</h2> | ||||||
|  |               </div> | ||||||
|  |               <ai-echart-v2 | ||||||
|  |                 style="height: 210px; width: 100%;" | ||||||
|  |                 :ref="'chart2'" | ||||||
|  |                 :data="lineData1" | ||||||
|  |                 :ops="barChart8"> | ||||||
|  |               </ai-echart-v2> | ||||||
|  |             </div> | ||||||
|  |             <div class="wrapper"> | ||||||
|  |               <div class="AppQxnDv-title"> | ||||||
|  |                 <h2>群人数规模分布</h2> | ||||||
|  |               </div> | ||||||
|  |               <ai-echart-v2 | ||||||
|  |                 style="height: 160px; width: 100%;" | ||||||
|  |                 :ref="'chart2'" | ||||||
|  |                 :data="lineData1" | ||||||
|  |                 :ops="pieChart"> | ||||||
|  |               </ai-echart-v2> | ||||||
|  |             </div> | ||||||
|  |           </div> | ||||||
|  |         </AiDvPanel> | ||||||
|  |       </div> | ||||||
|  |       <div class="right-middle"> | ||||||
|  |         <AiDvPanel style="width: 100%" border="border6" title="综合概况图"> | ||||||
|  |           <div class="right-left__total AppQxnDv-total"> | ||||||
|  |             <div class="item" v-for="(item, index) in 5" :key="index"> | ||||||
|  |               <h2>分局数量</h2> | ||||||
|  |               <div class="item-bottom"> | ||||||
|  |                 <span>726,079</span> | ||||||
|  |                 <i>人</i> | ||||||
|  |               </div> | ||||||
|  |             </div> | ||||||
|  |           </div> | ||||||
|  |           <div class="wrapper"> | ||||||
|  |             <DvMap style="width: 100%; height: 420px;"></DvMap> | ||||||
|  |           </div> | ||||||
|  |           <div class="right-middle__middle"> | ||||||
|  |             <div class="wrapper"> | ||||||
|  |               <div class="AppQxnDv-title"> | ||||||
|  |                 <h2>成员激活</h2> | ||||||
|  |               </div> | ||||||
|  |               <DoughnutChart :ratio="95"></DoughnutChart> | ||||||
|  |             </div> | ||||||
|  |             <div class="wrapper"> | ||||||
|  |               <div class="AppQxnDv-title"> | ||||||
|  |                 <h2>日均活跃率</h2> | ||||||
|  |               </div> | ||||||
|  |               <DoughnutChart :ratio="95"></DoughnutChart> | ||||||
|  |             </div> | ||||||
|  |           </div> | ||||||
|  |           <div class="right-middle__bottom"> | ||||||
|  |             <div class="AppQxnDv-title"> | ||||||
|  |               <h2>近期成员使用分布</h2> | ||||||
|  |             </div> | ||||||
|  |             <ai-echart-v2 | ||||||
|  |               style="height: 210px; width: 100%;" | ||||||
|  |               :ref="'chart'" | ||||||
|  |               :data="lineData" | ||||||
|  |               :ops="lineChart1"> | ||||||
|  |             </ai-echart-v2> | ||||||
|  |           </div> | ||||||
|  |         </AiDvPanel> | ||||||
|  |       </div> | ||||||
|  |       <div class="right-right"> | ||||||
|  |         <AiDvPanel style="width: 100%" border="border6" title="微警务群概况"> | ||||||
|  |           <div class="right-left__total AppQxnDv-total"> | ||||||
|  |             <div class="item" v-for="(item, index) in 4" :key="index"> | ||||||
|  |               <h2>群动态概况</h2> | ||||||
|  |               <div class="item-bottom"> | ||||||
|  |                 <span>726,079</span> | ||||||
|  |                 <i>人</i> | ||||||
|  |               </div> | ||||||
|  |             </div> | ||||||
|  |           </div> | ||||||
|  |           <div class="right-right__top"> | ||||||
|  |             <div class="wrapper"> | ||||||
|  |               <div class="AppQxnDv-title"> | ||||||
|  |                 <h2>群活跃率(7日)</h2> | ||||||
|  |               </div> | ||||||
|  |               <DoughnutChart :ratio="95"></DoughnutChart> | ||||||
|  |             </div> | ||||||
|  |             <div class="wrapper"> | ||||||
|  |               <div class="AppQxnDv-title"> | ||||||
|  |                 <h2>人员活跃(7日)</h2> | ||||||
|  |               </div> | ||||||
|  |               <DoughnutChart :ratio="95"></DoughnutChart> | ||||||
|  |             </div> | ||||||
|  |           </div> | ||||||
|  |           <div class="right-left__middle"> | ||||||
|  |             <div class="AppQxnDv-title"> | ||||||
|  |               <h2>各单位群主及群分布</h2> | ||||||
|  |             </div> | ||||||
|  |             <ai-echart-v2 | ||||||
|  |               style="height: 210px; width: 100%;" | ||||||
|  |               :ref="'chart5'" | ||||||
|  |               :data="barData" | ||||||
|  |               :ops="barChart"> | ||||||
|  |             </ai-echart-v2> | ||||||
|  |           </div> | ||||||
|  |         </AiDvPanel> | ||||||
|  |         <AiDvPanel style="width: 100%; height: 340px;" border="border6" title="群动态多维度排行"> | ||||||
|  |           <AiDvTable | ||||||
|  |             :heigth="'100%'" | ||||||
|  |             stripe | ||||||
|  |             :isShowIndex="true" | ||||||
|  |             :config="[{ | ||||||
|  |                 width: '', | ||||||
|  |                 color: '', | ||||||
|  |                 align: '' | ||||||
|  |               }, | ||||||
|  |               { | ||||||
|  |                 width: '', | ||||||
|  |                 color: '', | ||||||
|  |                 align: '' | ||||||
|  |               }, | ||||||
|  |               { | ||||||
|  |                 width: '', | ||||||
|  |                 color: '', | ||||||
|  |                 align: '' | ||||||
|  |               }]" | ||||||
|  |             :data="[{name: '列1', v: 23, v2: 3}, | ||||||
|  |               {name: '列2', v: 12, v2: 4}, | ||||||
|  |               {name: '列2', v: 12, v2: 4}]"> | ||||||
|  |           </AiDvTable> | ||||||
|  |         </AiDvPanel> | ||||||
|  |       </div> | ||||||
|  |     </div> | ||||||
|  |   </div> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  |   import DvMap from './components/DvMap' | ||||||
|  |   import DoughnutChart from './components/DoughnutChart' | ||||||
|  |   export default { | ||||||
|  |     name: 'AppQxnDv', | ||||||
|  |     label: '警民互联', | ||||||
|  |  | ||||||
|  |     components: { | ||||||
|  |       DvMap, | ||||||
|  |       DoughnutChart | ||||||
|  |     }, | ||||||
|  |  | ||||||
|  |     data ()  { | ||||||
|  |       return { | ||||||
|  |         value: '', | ||||||
|  |         lineData: [ | ||||||
|  |           { | ||||||
|  |             "name": "阿斯达", | ||||||
|  |             "v1": 23, | ||||||
|  |             "v2": 33 | ||||||
|  |           }, | ||||||
|  |           { | ||||||
|  |             "name": "水电费", | ||||||
|  |             "v1": 12, | ||||||
|  |             "v2": 34 | ||||||
|  |           }, | ||||||
|  |           { | ||||||
|  |             "name": "凡哥", | ||||||
|  |             "v1": 67, | ||||||
|  |             "v2": 25 | ||||||
|  |           }, | ||||||
|  |           { | ||||||
|  |             "name": "党费", | ||||||
|  |             "v1": 98, | ||||||
|  |             "v2": 85 | ||||||
|  |           } | ||||||
|  |         ], | ||||||
|  |         lineData1: [ | ||||||
|  |           { | ||||||
|  |             "name": "1月", | ||||||
|  |             "v1": 23 | ||||||
|  |           }, | ||||||
|  |           { | ||||||
|  |             "name": "2月", | ||||||
|  |             "v1": 12 | ||||||
|  |           }, | ||||||
|  |           { | ||||||
|  |             "name": "3月", | ||||||
|  |             "v1": 67 | ||||||
|  |           }, | ||||||
|  |           { | ||||||
|  |             "name": "4月", | ||||||
|  |             "v1": 98 | ||||||
|  |           } | ||||||
|  |         ], | ||||||
|  |         lineChart1: { | ||||||
|  |           legend: { show: false }, | ||||||
|  |           grid: { | ||||||
|  |             left: 50, | ||||||
|  |             right: '2%' | ||||||
|  |           }, | ||||||
|  |           tooltip: { | ||||||
|  |             trigger: 'axis', | ||||||
|  |             backgroundColor: 'rgba(0, 102, 154, 0.65)', | ||||||
|  |             borderColor: 'rgba(0, 102, 154, 0.65)', | ||||||
|  |             textStyle: { color: '#fff' }, | ||||||
|  |             axisPointer: { type: 'cross' } | ||||||
|  |           }, | ||||||
|  |           color: ['#7AA3CC', '#33CCCC'], | ||||||
|  |           xAxis: { | ||||||
|  |             type: "category", | ||||||
|  |             axisTick: {show: false}, | ||||||
|  |             axisLine: {show: false}, | ||||||
|  |             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) } | ||||||
|  |                 ] | ||||||
|  |               } | ||||||
|  |             } | ||||||
|  |           }) | ||||||
|  |         }, | ||||||
|  |         barChart8: { | ||||||
|  |           legend: {show: false}, | ||||||
|  |           tooltip: { | ||||||
|  |             trigger: 'axis', | ||||||
|  |             backgroundColor: 'rgba(0, 102, 154, 0.65)', | ||||||
|  |             borderColor: 'rgba(0, 102, 154, 0.65)', | ||||||
|  |             textStyle: { color: '#fff' }, | ||||||
|  |             axisPointer: { type: 'cross' } | ||||||
|  |           }, | ||||||
|  |           yAxis: { | ||||||
|  |             type: 'category', | ||||||
|  |             axisLabel: {color: '#8FABBF', fontSize: 12}, | ||||||
|  |             axisTick: {show: false}, | ||||||
|  |             axisLine: {show: false}, | ||||||
|  |           }, | ||||||
|  |           xAxis: { | ||||||
|  |             nameGap: 23, minInterval: 1, | ||||||
|  |             splitLine: {lineStyle: {color: 'rgba(108, 128, 151, 0.3)', type: 'dashed'}}, | ||||||
|  |             axisLabel: {color: '#8FABBF', fontSize: 12}, | ||||||
|  |           }, | ||||||
|  |           daemon: { | ||||||
|  |             type: 'bar', barWidth: 10, barGap: '40%', | ||||||
|  |             label: {show: true, position: 'insideRight', color: '#fff', fontSize: 14}, | ||||||
|  |             showBackground: true, | ||||||
|  |             backgroundStyle: { | ||||||
|  |               color: 'rgba(123, 165, 255, .2)' | ||||||
|  |             }, | ||||||
|  |             itemStyle: { | ||||||
|  |               color: { | ||||||
|  |                 type: 'linear', x: 0, x2: 1, y: 0, y2: 0, | ||||||
|  |                 colorStops: [{offset: 0, color: 'rgba(0, 89, 84, 0)'}, {offset: 1, color: '#66E1DF'}] | ||||||
|  |               } | ||||||
|  |             } | ||||||
|  |           } | ||||||
|  |         }, | ||||||
|  |         barChart: { | ||||||
|  |           yAxis: { | ||||||
|  |             nameGap: 23, | ||||||
|  |             minInterval: 1, | ||||||
|  |             splitLine: { lineStyle: { color: 'rgba(255,255,255,.2)', type: 'dashed' } }, | ||||||
|  |             axisLabel: { color: '#C3C4C4' }, | ||||||
|  |             axisPointer: { show: false } | ||||||
|  |           }, | ||||||
|  |           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(219, 179, 110, 0.1)' }, | ||||||
|  |                 { offset: 1, color: 'rgba(219, 179, 110, 1)' } | ||||||
|  |               ] | ||||||
|  |             } | ||||||
|  |           ], | ||||||
|  |           daemon: { | ||||||
|  |             type: 'bar', | ||||||
|  |             barWidth: 14, | ||||||
|  |             barCategoryGap: 40, | ||||||
|  |             itemStyle: {} | ||||||
|  |           } | ||||||
|  |         }, | ||||||
|  |         barData: [ | ||||||
|  |           { | ||||||
|  |             "name": "兴仁公安局", | ||||||
|  |             "v1": 223, | ||||||
|  |             "v11": 23 | ||||||
|  |           }, | ||||||
|  |           { | ||||||
|  |             "name": "兴仁公安局1", | ||||||
|  |             "v1": 22, | ||||||
|  |             "v11": 29 | ||||||
|  |           }, | ||||||
|  |           { | ||||||
|  |             "name": "兴仁公安局2", | ||||||
|  |             "v1": 67, | ||||||
|  |             "v11": 23 | ||||||
|  |           }, | ||||||
|  |           { | ||||||
|  |             "name": "兴仁公安局3", | ||||||
|  |             "v1": 98, | ||||||
|  |             "v11": 23 | ||||||
|  |           } | ||||||
|  |         ], | ||||||
|  |         pieData: [ | ||||||
|  |         { value: 1048, name: 'Search Engine' }, | ||||||
|  |         { value: 735, name: 'Direct' }, | ||||||
|  |         { value: 580, name: 'Email' }, | ||||||
|  |         { value: 484, name: 'Union Ads' }, | ||||||
|  |         { value: 300, name: 'Video Ads' }] , | ||||||
|  |         pieChart: { | ||||||
|  |           tooltip: { | ||||||
|  |             trigger: 'item' | ||||||
|  |           }, | ||||||
|  |           legend: { | ||||||
|  |             show: false | ||||||
|  |           }, | ||||||
|  |           grid: { | ||||||
|  |             left: '6%', | ||||||
|  |             top: '6%', | ||||||
|  |             right: '6%', | ||||||
|  |             bottom: '6%' | ||||||
|  |           }, | ||||||
|  |           series: [ | ||||||
|  |             { | ||||||
|  |               type: 'pie', | ||||||
|  |               radius: ['50%', '66%'], | ||||||
|  |               labelLine:{ | ||||||
|  |                 normal:{ | ||||||
|  |                   length: 0.01, | ||||||
|  |                   lineStyle: { | ||||||
|  |                     color: '#526D7A' | ||||||
|  |                   } | ||||||
|  |                 } | ||||||
|  |               }, | ||||||
|  |               startAngle: 90, | ||||||
|  |               minAngle: 5, | ||||||
|  |               avoidLabelOverlap: true, | ||||||
|  |               label: { | ||||||
|  |                 show: true, | ||||||
|  |                 normal: { | ||||||
|  |                   textStyle: { | ||||||
|  |                     color: '#9BB7D4', | ||||||
|  |                     fontSize: 16 | ||||||
|  |                   } | ||||||
|  |                 } | ||||||
|  |               }, | ||||||
|  |               emphasis: { | ||||||
|  |                 itemStyle: { | ||||||
|  |                   shadowBlur: 10, | ||||||
|  |                   shadowOffsetX: 0, | ||||||
|  |                   shadowColor: 'rgba(0, 0, 0, 0.5)' | ||||||
|  |                 } | ||||||
|  |               } | ||||||
|  |             } | ||||||
|  |           ] | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |  | ||||||
|  |     methods: { | ||||||
|  |       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; | ||||||
|  |  | ||||||
|  |     .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%); | ||||||
|  |  | ||||||
|  |       h2 { | ||||||
|  |         position: relative; | ||||||
|  |         font-size: 16px; | ||||||
|  |         font-weight: 500; | ||||||
|  |         padding: 0 10px; | ||||||
|  |  | ||||||
|  |         &::after { | ||||||
|  |           position: absolute; | ||||||
|  |           bottom: 0; | ||||||
|  |           left: 27px; | ||||||
|  |           z-index: 1; | ||||||
|  |           width: 9px; | ||||||
|  |           height: 2px; | ||||||
|  |           background: rgba(41, 77, 102, 1); | ||||||
|  |           content: ' '; | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |  | ||||||
|  |       &::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: 0px; | ||||||
|  |       } | ||||||
|  |  | ||||||
|  |       i { | ||||||
|  |         color: #B3E5E5; | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     ::-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; | ||||||
|  |  | ||||||
|  |       .right-left { | ||||||
|  |         width: 500px; | ||||||
|  |  | ||||||
|  |         .right-left__middle { | ||||||
|  |           display: flex; | ||||||
|  |  | ||||||
|  |           .left { | ||||||
|  |             width: 245px; | ||||||
|  |             margin-right: 12px; | ||||||
|  |           } | ||||||
|  |  | ||||||
|  |           .right { | ||||||
|  |             flex: 1; | ||||||
|  |           } | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         .right-left__bottom { | ||||||
|  |           display: flex; | ||||||
|  |  | ||||||
|  |           div { | ||||||
|  |             flex: 1; | ||||||
|  |  | ||||||
|  |             &:first-child { | ||||||
|  |               margin-right: 12px; | ||||||
|  |             } | ||||||
|  |           } | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |       .right-middle { | ||||||
|  |         width: 522px; | ||||||
|  |         margin: 0 20px; | ||||||
|  |  | ||||||
|  |         .right-middle__middle { | ||||||
|  |           display: flex; | ||||||
|  |           justify-content: space-between; | ||||||
|  |           margin-bottom: 16px; | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |  | ||||||
|  |       .right-right { | ||||||
|  |         flex: 1; | ||||||
|  |  | ||||||
|  |         .right-right__top { | ||||||
|  |           display: flex; | ||||||
|  |           margin-bottom: 16px; | ||||||
|  |  | ||||||
|  |           & > div { | ||||||
|  |             flex: 1; | ||||||
|  |  | ||||||
|  |             &:first-child { | ||||||
|  |               margin-right: 12px; | ||||||
|  |             } | ||||||
|  |           } | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     & > .left { | ||||||
|  |       display: flex; | ||||||
|  |       align-items: center; | ||||||
|  |       flex-direction: column; | ||||||
|  |       width: 240px; | ||||||
|  |       margin-right: 14px; | ||||||
|  |  | ||||||
|  |       .left-list { | ||||||
|  |         flex: 1; | ||||||
|  |         overflow-y: auto; | ||||||
|  |  | ||||||
|  |         .left-item { | ||||||
|  |           position: relative; | ||||||
|  |           width: 100%; | ||||||
|  |           margin-bottom: 10px; | ||||||
|  |           padding: 30px 14px 14px; | ||||||
|  |           background-image: linear-gradient(0deg, rgba(40, 182, 253, 0.08) 1%, rgba(0, 102, 154, 0.65) 100%); | ||||||
|  |           border-radius: 6px; | ||||||
|  |  | ||||||
|  |           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> | ||||||
							
								
								
									
										22
									
								
								packages/bigscreen/dv/AppQxnEventDv.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								packages/bigscreen/dv/AppQxnEventDv.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,22 @@ | |||||||
|  | <template> | ||||||
|  |   <div class="AppQxnEventDv"></div> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  |   export default { | ||||||
|  |     name: 'AppQxnEventDv', | ||||||
|  |     label: '事件上报', | ||||||
|  |  | ||||||
|  |     data ()  { | ||||||
|  |       return { | ||||||
|  |  | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | </script> | ||||||
|  |  | ||||||
|  | <style lang="scss" scoped> | ||||||
|  |   .AppQxnEventDv { | ||||||
|  |  | ||||||
|  |   } | ||||||
|  | </style> | ||||||
							
								
								
									
										185
									
								
								packages/bigscreen/dv/components/DoughnutChart.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										185
									
								
								packages/bigscreen/dv/components/DoughnutChart.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,185 @@ | |||||||
|  | <template> | ||||||
|  |   <div class="DoughnutChart-wrapper"> | ||||||
|  |     <div class="DoughnutChart" :id="id"> | ||||||
|  |       <canvas :id="canvasId"></canvas> | ||||||
|  |       <div class="DonutChart-text"> | ||||||
|  |         <span>{{ ratio }}%</span> | ||||||
|  |       </div> | ||||||
|  |     </div> | ||||||
|  |     <div class="DoughnutChart-explain"> | ||||||
|  |       <div class="item"> | ||||||
|  |         <i></i> | ||||||
|  |         <span>已激活成员</span> | ||||||
|  |         <p>2142</p> | ||||||
|  |       </div> | ||||||
|  |       <div class="item"> | ||||||
|  |         <i></i> | ||||||
|  |         <span>未激活成员</span> | ||||||
|  |         <p>2142</p> | ||||||
|  |       </div> | ||||||
|  |     </div> | ||||||
|  |   </div> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  |   export default { | ||||||
|  |     props: ['ratio'], | ||||||
|  |  | ||||||
|  |     data () { | ||||||
|  |       return { | ||||||
|  |         id: `DonutChart-${Math.ceil(Math.random() * 10000)}`, | ||||||
|  |         canvasId: `DonutChartCanvas-${Math.ceil(Math.random() * 10000)}`, | ||||||
|  |         canvasWidth: 90, | ||||||
|  |         canvasHeight: 90 | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |  | ||||||
|  |     mounted () { | ||||||
|  |       this.$nextTick(() => { | ||||||
|  |         this.init() | ||||||
|  |       }) | ||||||
|  |     }, | ||||||
|  |  | ||||||
|  |     methods: { | ||||||
|  |       drawLine(ctx, options) { | ||||||
|  |         const { beginX, beginY, endX, endY, lineColor, lineWidth } = options | ||||||
|  |         ctx.lineWidth = lineWidth | ||||||
|  |         ctx.strokeStyle = lineColor | ||||||
|  |         ctx.beginPath() | ||||||
|  |         ctx.moveTo(beginX, beginY) | ||||||
|  |         ctx.lineTo(endX, endY) | ||||||
|  |         ctx.closePath() | ||||||
|  |         ctx.stroke() | ||||||
|  |       }, | ||||||
|  |  | ||||||
|  |       angle (a, i, ox, oy, or) { | ||||||
|  |         var hudu = (2 * Math.PI / 360) * a * i | ||||||
|  |         var x = ox + Math.sin(hudu) * or | ||||||
|  |         var y = oy - Math.cos(hudu) * or | ||||||
|  |         return x + '_' + y | ||||||
|  |       }, | ||||||
|  |  | ||||||
|  |       mapColor (value) { | ||||||
|  |         if (value < 25) { | ||||||
|  |           return '#FFC139' | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         if (value < 50) { | ||||||
|  |           return '#21E03E' | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         return '#05C8FF' | ||||||
|  |       }, | ||||||
|  |  | ||||||
|  |       init () { | ||||||
|  |         const ctx = document.querySelector(`#${this.canvasId}`).getContext('2d') | ||||||
|  |         const canvasWidth = document.querySelector(`#${this.id}`).offsetWidth | ||||||
|  |         const canvasHeight = document.querySelector(`#${this.id}`).offsetHeight | ||||||
|  |         const angle = this.ratio / 100 * 2 | ||||||
|  |         let radian = 0 | ||||||
|  |  | ||||||
|  |         ctx.width = canvasWidth | ||||||
|  |         ctx.height = canvasHeight | ||||||
|  |         const x = canvasWidth / 2 | ||||||
|  |         const y = canvasHeight / 2 | ||||||
|  |         ctx.lineWidth = 4 | ||||||
|  |         ctx.strokeStyle = 'rgba(102, 121, 138, 0.3)' | ||||||
|  |         ctx.beginPath(); | ||||||
|  |         ctx.arc(x, y, x - 8, 0, 2 * Math.PI) | ||||||
|  |         ctx.stroke() | ||||||
|  |  | ||||||
|  |         ctx.beginPath() | ||||||
|  |         ctx.lineWidth = 4 | ||||||
|  |         var g = ctx.createLinearGradient(0, 0, 0, 80) | ||||||
|  |         g.addColorStop(0, 'rgba(44, 150, 231, 0.8)') | ||||||
|  |         g.addColorStop(1, 'rgba(92, 255, 243, 1)') | ||||||
|  |         ctx.strokeStyle = g | ||||||
|  |  | ||||||
|  |         if (this.ratio < 25) { | ||||||
|  |           radian = 3 / 2 + angle | ||||||
|  |           ctx.arc(x, y, x - 8, Math.PI + Math.PI / 2, Math.PI * radian, false) | ||||||
|  |         } else if (this.ratio === 100) { | ||||||
|  |           ctx.arc(x, y, x - 8, 0, Math.PI * 2) | ||||||
|  |         } else { | ||||||
|  |           radian = (this.ratio - 25) / 100 * 2 | ||||||
|  |           ctx.arc(x, y, x - 8, Math.PI + Math.PI / 2, Math.PI * radian, false) | ||||||
|  |         } | ||||||
|  |         ctx.stroke() | ||||||
|  |  | ||||||
|  |         ctx.beginPath() | ||||||
|  |         ctx.strokeStyle = 'rgba(102, 121, 138, 0.4)' | ||||||
|  |         ctx.lineWidth = 1 | ||||||
|  |         ctx.arc(x, y, x - 15, 0, 2 * Math.PI) | ||||||
|  |         ctx.stroke() | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | </script> | ||||||
|  |  | ||||||
|  | <style lang="scss" scoped> | ||||||
|  |   .DoughnutChart-wrapper { | ||||||
|  |     display: flex; | ||||||
|  |     align-items: center; | ||||||
|  |     justify-content: space-between; | ||||||
|  |     height: 100%; | ||||||
|  |     padding-top: 12px; | ||||||
|  |  | ||||||
|  |     .DoughnutChart-explain { | ||||||
|  |       flex: 1; | ||||||
|  |       margin-left: 12px; | ||||||
|  |  | ||||||
|  |       .item { | ||||||
|  |         display: flex; | ||||||
|  |         align-items: center; | ||||||
|  |  | ||||||
|  |         i { | ||||||
|  |           width: 8px; | ||||||
|  |           height: 8px; | ||||||
|  |           margin-right: 6px; | ||||||
|  |           border-radius: 50%; | ||||||
|  |           background: #5AF9F0; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         span { | ||||||
|  |           margin-right: 24px; | ||||||
|  |           font-weight: 400; | ||||||
|  |           font-size: 14px; | ||||||
|  |           color: #9BB7D4; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         p { | ||||||
|  |           font-size: 14px; | ||||||
|  |           color: #FFFFFF; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         &:last-child i { | ||||||
|  |           background: rgba(102, 121, 138, 0.3); | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |  | ||||||
|  |     .DoughnutChart { | ||||||
|  |       position: relative; | ||||||
|  |       width: 90px; | ||||||
|  |       height: 90px; | ||||||
|  |       overflow: hidden; | ||||||
|  |  | ||||||
|  |       .DonutChart-text { | ||||||
|  |         display: flex; | ||||||
|  |         position: absolute; | ||||||
|  |         justify-content: center; | ||||||
|  |         top: 50%; | ||||||
|  |         left: 50%; | ||||||
|  |         z-index: 1; | ||||||
|  |         transform: translate(-50%, -50%); | ||||||
|  |  | ||||||
|  |         span { | ||||||
|  |           font-size: 18px; | ||||||
|  |           font-weight: bold; | ||||||
|  |           color: #02FEFF; | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | </style> | ||||||
							
								
								
									
										271
									
								
								packages/bigscreen/dv/components/DvMap.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										271
									
								
								packages/bigscreen/dv/components/DvMap.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,271 @@ | |||||||
|  | <template> | ||||||
|  |   <div class="AiDvMap" v-resize="onDomResize"> | ||||||
|  |     <div class="chart-map" :class="v" style="width: 100%; height: 100%"></div> | ||||||
|  |   </div> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | import * as echarts from 'echarts' | ||||||
|  | import http from "dui/lib/js/request"; | ||||||
|  |  | ||||||
|  | export default { | ||||||
|  |   name: 'AiDvMap', | ||||||
|  |   data() { | ||||||
|  |     return { | ||||||
|  |       timer: null, | ||||||
|  |       v: `AiDvMap-${new Date().getTime()}`, | ||||||
|  |       chart: null | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   directives: { | ||||||
|  |     resize: { | ||||||
|  |       bind(el, binding) { | ||||||
|  |         let width = '' | ||||||
|  |         let height = '' | ||||||
|  |  | ||||||
|  |         function isReize() { | ||||||
|  |           const style = document.defaultView.getComputedStyle(el) | ||||||
|  |           if (width !== style.width || height !== style.height) { | ||||||
|  |             binding.value({ | ||||||
|  |               width: style.width, | ||||||
|  |               height: style.height | ||||||
|  |             }) | ||||||
|  |           } | ||||||
|  |           width = style.width | ||||||
|  |           height = style.height | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         el.__vueSetInterval__ = setInterval(isReize, 300) | ||||||
|  |       }, | ||||||
|  |  | ||||||
|  |       unbind(el) { | ||||||
|  |         clearInterval(el.__vueSetInterval__) | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   mounted() { | ||||||
|  |     this.$nextTick(() => { | ||||||
|  |       this.initChart() | ||||||
|  |     }) | ||||||
|  |   }, | ||||||
|  |  | ||||||
|  |   methods: { | ||||||
|  |     onDomResize() { | ||||||
|  |       this.$nextTick(() => { | ||||||
|  |         this.chart.resize() | ||||||
|  |       }) | ||||||
|  |     }, | ||||||
|  |  | ||||||
|  |     initChart() { | ||||||
|  |       this.chart = echarts.init(document.querySelector(`.${this.v}`)) | ||||||
|  |       this.getData().then(res => { | ||||||
|  |         if (res.code === 0) { | ||||||
|  |           echarts.registerMap('黔西南', res.data) | ||||||
|  |  | ||||||
|  |           let option = { | ||||||
|  |             geo: [ | ||||||
|  |               { | ||||||
|  |                 map: "黔西南", | ||||||
|  |                 aspectScale: 1, | ||||||
|  |                 zoom: 0.65, | ||||||
|  |                 layoutCenter: ["50%", "50%"], | ||||||
|  |                 layoutSize: "180%", | ||||||
|  |                 show: true, | ||||||
|  |                 roam: false, | ||||||
|  |                 emphasis: { | ||||||
|  |                   show: true, | ||||||
|  |                   label: { | ||||||
|  |                     textStyle: { | ||||||
|  |                       color: "#FFFFFF" | ||||||
|  |                     }, | ||||||
|  |                   }, | ||||||
|  |                   itemStyle: { | ||||||
|  |                     // areaColor: '#fff' | ||||||
|  |                   } | ||||||
|  |                 }, | ||||||
|  |                 label: { | ||||||
|  |                   normal: { | ||||||
|  |                     show: true, | ||||||
|  |                     color: '#fff', | ||||||
|  |                     fontSize: '15' | ||||||
|  |                   } | ||||||
|  |                 }, | ||||||
|  |                 itemStyle: { | ||||||
|  |                   normal: { | ||||||
|  |                     borderColor: "rgba(2, 254, 255, 0.7)", | ||||||
|  |                     borderWidth: 2, | ||||||
|  |                     shadowColor: "rgba(2, 254, 255, 0.1)", | ||||||
|  |                     shadowOffsetY: 10, | ||||||
|  |                     shadowBlur: 120, | ||||||
|  |                     areaColor: "#0f7295", | ||||||
|  |                   }, | ||||||
|  |                 } | ||||||
|  |               }, | ||||||
|  |               // 重影 | ||||||
|  |               { | ||||||
|  |                 type: "map", | ||||||
|  |                 map: "黔西南", | ||||||
|  |                 zlevel: -1, | ||||||
|  |                 aspectScale: 1, | ||||||
|  |                 zoom: 0.65, | ||||||
|  |                 layoutCenter: ["50%", "51%"], | ||||||
|  |                 layoutSize: "180%", | ||||||
|  |                 roam: false, | ||||||
|  |                 silent: true, | ||||||
|  |                 itemStyle: { | ||||||
|  |                   normal: { | ||||||
|  |                     borderWidth: 1, | ||||||
|  |                     // borderColor:"rgba(17, 149, 216,0.6)", | ||||||
|  |                     borderColor: "rgba(2, 254, 255, 0.3)", | ||||||
|  |                     shadowColor: "rgba(2, 254, 255, 0.3)", | ||||||
|  |                     shadowOffsetY: 5, | ||||||
|  |                     shadowBlur: 15, | ||||||
|  |                     areaColor: "rgba(5,21,35,0.1)", | ||||||
|  |                   }, | ||||||
|  |                 }, | ||||||
|  |               }, | ||||||
|  |               { | ||||||
|  |                 type: "map", | ||||||
|  |                 map: "黔西南", | ||||||
|  |                 zlevel: -2, | ||||||
|  |                 aspectScale: 1, | ||||||
|  |                 zoom: 0.65, | ||||||
|  |                 layoutCenter: ["50%", "52%"], | ||||||
|  |                 layoutSize: "180%", | ||||||
|  |                 roam: false, | ||||||
|  |                 silent: true, | ||||||
|  |                 itemStyle: { | ||||||
|  |                   normal: { | ||||||
|  |                     borderWidth: 1, | ||||||
|  |                     // borderColor: "rgba(57, 132, 188,0.4)", | ||||||
|  |                     borderColor: "rgba(2, 254, 255, 0.2)", | ||||||
|  |                     shadowColor: "rgba(2, 254, 255, 0.24)", | ||||||
|  |                     shadowOffsetY: 5, | ||||||
|  |                     shadowBlur: 15, | ||||||
|  |                     areaColor: "transpercent", | ||||||
|  |                   }, | ||||||
|  |                 }, | ||||||
|  |               }, | ||||||
|  |               { | ||||||
|  |                 type: "map", | ||||||
|  |                 map: "黔西南", | ||||||
|  |                 zlevel: -3, | ||||||
|  |                 aspectScale: 1, | ||||||
|  |                 zoom: 0.65, | ||||||
|  |                 layoutCenter: ["50%", "53%"], | ||||||
|  |                 layoutSize: "180%", | ||||||
|  |                 roam: false, | ||||||
|  |                 silent: true, | ||||||
|  |                 itemStyle: { | ||||||
|  |                   normal: { | ||||||
|  |                     borderWidth: 1, | ||||||
|  |                     // borderColor: "rgba(11, 43, 97,0.8)", | ||||||
|  |                     borderColor: "rgba(2, 254, 255, 0.1)", | ||||||
|  |                     shadowColor: "rgba(2, 254, 255, 0.1)", | ||||||
|  |                     shadowOffsetY: 15, | ||||||
|  |                     shadowBlur: 10, | ||||||
|  |                     areaColor: "transpercent", | ||||||
|  |                   }, | ||||||
|  |                 }, | ||||||
|  |               } | ||||||
|  |             ], | ||||||
|  |             series: [ | ||||||
|  |               { | ||||||
|  |                 type: 'scatter', | ||||||
|  |                 map: "黔西南", | ||||||
|  |                 coordinateSystem: 'geo', | ||||||
|  |                 z: 3, | ||||||
|  |                 zlevel: 3, | ||||||
|  |                 // symbol: 'none', | ||||||
|  |                 symbolSize: 16, | ||||||
|  |                 rippleEffect: { | ||||||
|  |                   period: 2, | ||||||
|  |                   scale: 4, | ||||||
|  |                   brushType: 'fill' | ||||||
|  |                 }, | ||||||
|  |                 label: { | ||||||
|  |                     show: false | ||||||
|  |                 }, | ||||||
|  |                 roam: false, | ||||||
|  |                 itemStyle: { | ||||||
|  |                   normal: { | ||||||
|  |                     areaColor: '#000', | ||||||
|  |                     borderColor: '#a18a3a', | ||||||
|  |                     borderWidth: 1 | ||||||
|  |                   }, | ||||||
|  |                   emphasis: { | ||||||
|  |                     show: false, | ||||||
|  |                     areaColor: null | ||||||
|  |                   } | ||||||
|  |                 }, | ||||||
|  |                 // label: { | ||||||
|  |                 //   show: true, | ||||||
|  |                 //   formatter: e => { | ||||||
|  |                 //     const name = e.data[3] | ||||||
|  |                 //     const value = e.data[2] | ||||||
|  |                 //     return `{a|${name}}\n{b|${value}}` | ||||||
|  |                 //   }, | ||||||
|  |                 //   fontSize: 16, | ||||||
|  |                 //   rich: { | ||||||
|  |                 //     a: { | ||||||
|  |                 //       width: '100%', | ||||||
|  |                 //       color: '#fff', | ||||||
|  |                 //       lineHeight: 20, | ||||||
|  |                 //       fontSize: 16 | ||||||
|  |                 //     }, | ||||||
|  |                 //     b: { | ||||||
|  |                 //       backgroundColor: { | ||||||
|  |                 //         // image: require('@/assets/images/point.png') | ||||||
|  |                 //       }, | ||||||
|  |                 //       color: '#fff', | ||||||
|  |                 //       height: 56, | ||||||
|  |                 //       align: 'center', | ||||||
|  |                 //       width: 50, | ||||||
|  |                 //       fontSize: 16 | ||||||
|  |                 //     } | ||||||
|  |                 //   } | ||||||
|  |                 // }, | ||||||
|  |                 data: [] | ||||||
|  |               } | ||||||
|  |             ] | ||||||
|  |           } | ||||||
|  |           this.chart.setOption(option) | ||||||
|  |         } | ||||||
|  |       }) | ||||||
|  |     }, | ||||||
|  |  | ||||||
|  |     convertData(data) { | ||||||
|  |       return data.map(v => { | ||||||
|  |         return [this.qqMapTransBMap(v.point[1], v.point[0]).lng, this.qqMapTransBMap(v.point[1], v.point[0]).lat, v.value, v.name] | ||||||
|  |       }) | ||||||
|  |     }, | ||||||
|  |  | ||||||
|  |     qqMapTransBMap(lng, lat) { | ||||||
|  |       const x_pi = 3.14159265358979324 * 3000.0 / 180.0 | ||||||
|  |       var x = lng | ||||||
|  |       var y = lat | ||||||
|  |       var z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * x_pi) | ||||||
|  |       var theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * x_pi) | ||||||
|  |  | ||||||
|  |       return { | ||||||
|  |         lng: z * Math.cos(theta) + 0.0065, | ||||||
|  |         lat: z * Math.sin(theta) + 0.006 | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |  | ||||||
|  |     getData() { | ||||||
|  |       return http.post(`/app/appdvcpconfig/apiForward?url=${encodeURIComponent(`https://geo.datav.aliyun.com/areas_v3/bound/geojson?code=522300_full`)}`,) | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | </script> | ||||||
|  |  | ||||||
|  | <style lang="scss" scoped> | ||||||
|  | .AiDvMap { | ||||||
|  |   display: flex; | ||||||
|  |   align-items: center; | ||||||
|  |   justify-content: center; | ||||||
|  |   width: 100%; | ||||||
|  |   height: 100%; | ||||||
|  | } | ||||||
|  | </style> | ||||||
		Reference in New Issue
	
	Block a user