|  |  | 
 |  |  | <template> | 
 |  |  |     <div class="box"> | 
 |  |  |         <div class="box_shua"> | 
 |  |  |             <el-button icon="el-icon-refresh" type="primary">刷新数据</el-button> | 
 |  |  |             <el-button icon="el-icon-refresh" type="primary" @click="getChatData(),getData()">刷新数据</el-button> | 
 |  |  |         </div> | 
 |  |  |         <div class="box_head"> | 
 |  |  |             <div class="box_head_info"> | 
 |  |  |                 <i class="el-icon-info"></i> | 
 |  |  |                 <span>展示当前系统合计总数,每天更新数据</span> | 
 |  |  |             </div> | 
 |  |  |             <div class="box_head_list"> | 
 |  |  |             <div class="box_head_list" v-if="info"> | 
 |  |  |                 <div class="box_head_list_item"> | 
 |  |  |                     <div class="box_head_list_item_top"> | 
 |  |  |                         <span>保险公司数</span> | 
 |  |  |                         <span>本月 +3</span> | 
 |  |  |                         <span>本月 +{{info.insuranceAddTotal}}</span> | 
 |  |  |                     </div> | 
 |  |  |                     <div class="box_head_list_item_bottom">32</div> | 
 |  |  |                     <div class="box_head_list_item_bottom">{{info.insuranceTotal}}</div> | 
 |  |  |                 </div> | 
 |  |  |                 <div class="box_head_list_item"> | 
 |  |  |                     <div class="box_head_list_item_top"> | 
 |  |  |                         <span>保单数</span> | 
 |  |  |                         <span>本月 +12</span> | 
 |  |  |                         <span>本月 +{{info.insuranceApplyAddTotal}}</span> | 
 |  |  |                     </div> | 
 |  |  |                     <div class="box_head_list_item_bottom">88</div> | 
 |  |  |                     <div class="box_head_list_item_bottom">{{info.insuranceApplyTotal}}</div> | 
 |  |  |                 </div> | 
 |  |  |                 <div class="box_head_list_item"> | 
 |  |  |                     <div class="box_head_list_item_top"> | 
 |  |  |                         <span>在保人数</span> | 
 |  |  |                         <span>本月 +300</span> | 
 |  |  |                         <span>本月 +{{info.insuranceUserAddTotal}}</span> | 
 |  |  |                     </div> | 
 |  |  |                     <div class="box_head_list_item_bottom">2,000</div> | 
 |  |  |                     <div class="box_head_list_item_bottom">{{info.insuranceUserTotal}}</div> | 
 |  |  |                 </div> | 
 |  |  |                 <div class="box_head_list_item"> | 
 |  |  |                     <div class="box_head_list_item_top"> | 
 |  |  |                         <span>已收费用合计</span> | 
 |  |  |                         <span>本月 +813,789.00</span> | 
 |  |  |                         <span>本月 +{{info.totalAddFee}}</span> | 
 |  |  |                     </div> | 
 |  |  |                     <div class="box_head_list_item_bottom">¥6,345,654.00</div> | 
 |  |  |                     <div class="box_head_list_item_bottom">¥{{info.totalFee}}</div> | 
 |  |  |                 </div> | 
 |  |  |             </div> | 
 |  |  |         </div> | 
 |  |  |         <div class="box_chart"> | 
 |  |  |         <div class="box_chart" v-if="chatData"> | 
 |  |  |             <div class="box_chart_item"> | 
 |  |  |                 <div class="box_chart_item_info"> | 
 |  |  |                     <span>总理赔金额</span> | 
 |  |  |                     <i class="el-icon-info"></i> | 
 |  |  |                 </div> | 
 |  |  |                 <div class="box_chart_item_price">¥2,345,654.00</div> | 
 |  |  |                 <div class="box_chart_item_tu" id="tu1"></div> | 
 |  |  |                 <div class="box_chart_item_price">¥{{chatData.settleClaimsTotalFee || ''}}</div> | 
 |  |  |                 <div class="box_chart_item_tu" style="height: 132px" id="tu1"></div> | 
 |  |  |             </div> | 
 |  |  |             <div class="box_chart_item"> | 
 |  |  |                 <div class="box_chart_item_info"> | 
 |  |  |                     <span>总理赔案件数</span> | 
 |  |  |                     <i class="el-icon-info"></i> | 
 |  |  |                 </div> | 
 |  |  |                 <div class="box_chart_item_price">1,234</div> | 
 |  |  |                 <div class="box_chart_item_tu" id="tu2"></div> | 
 |  |  |                 <div class="box_chart_item_price">{{chatData.settleClaimsTotal || ''}}</div> | 
 |  |  |                 <div class="box_chart_item_tu"  style="height: 132px"  id="tu2"></div> | 
 |  |  |             </div> | 
 |  |  |             <div class="box_chart_item"> | 
 |  |  |                 <div class="box_chart_item_info"> | 
 |  |  |                     <span>平均理赔处理时长</span> | 
 |  |  |                     <i class="el-icon-info"></i> | 
 |  |  |                 </div> | 
 |  |  |                 <div class="box_chart_item_price">10.5天</div> | 
 |  |  |                 <div class="box_chart_item_tu" id="tu3"></div> | 
 |  |  |                 <div class="box_chart_item_price">{{chatData.averageSettleClaimsTime || ''}}天</div> | 
 |  |  |                 <div class="box_chart_item_tu"   style="height: 132px"  id="tu3"></div> | 
 |  |  |             </div> | 
 |  |  |         </div> | 
 |  |  |         <div class="box_shuju"> | 
 |  |  |         <div class="box_shuju" v-if="chatData"> | 
 |  |  |             <div class="box_shuju_item"> | 
 |  |  |                 <div class="box_shuju_item_top"> | 
 |  |  |                     <span>受理率</span> | 
 |  |  |                     <i class="el-icon-info"></i> | 
 |  |  |                 </div> | 
 |  |  |                 <div class="box_shuju_item_bottom">95.3%</div> | 
 |  |  |                 <div class="box_shuju_item_bottom">{{chatData.acceptanceRata}}%</div> | 
 |  |  |             </div> | 
 |  |  |             <div class="box_shuju_item"> | 
 |  |  |                 <div class="box_shuju_item_top"> | 
 |  |  |                     <span>拒赔率</span> | 
 |  |  |                     <i class="el-icon-info"></i> | 
 |  |  |                 </div> | 
 |  |  |                 <div class="box_shuju_item_bottom">12.8%</div> | 
 |  |  |                 <div class="box_shuju_item_bottom">{{chatData.refuseRata}}%</div> | 
 |  |  |             </div> | 
 |  |  |             <div class="box_shuju_item"> | 
 |  |  |                 <div class="box_shuju_item_top"> | 
 |  |  |                     <span>结案率</span> | 
 |  |  |                     <i class="el-icon-info"></i> | 
 |  |  |                 </div> | 
 |  |  |                 <div class="box_shuju_item_bottom">88.9%</div> | 
 |  |  |                 <div class="box_shuju_item_bottom">{{chatData.closeCaseRata}}%</div> | 
 |  |  |             </div> | 
 |  |  |         </div> | 
 |  |  |         <div class="box_content"> | 
 |  |  |             <div class="box_content_left"> | 
 |  |  |                 <div class="box_content_left_title">风险案件监控</div> | 
 |  |  |                 <div class="box_content_left_list"> | 
 |  |  |                     <div class="box_content_left_list_item" :style="{ backgroundColor: item.backgroundColor }" v-for="(item, index) in list" :key="index"> | 
 |  |  |                         <div class="box_content_left_list_item_top"> | 
 |  |  |                     <div class="box_content_left_list_item"   :style="{ backgroundColor: item.title!= ''? item.backgroundColor :'#fff'}" v-for="(item, index) in list" :key="index"> | 
 |  |  |                         <div class="box_content_left_list_item_top" v-if="item.title != ''" > | 
 |  |  |                             <span>{{item.title}}</span> | 
 |  |  |                             <span :style="{ color: item.color }">{{item.num}}</span> | 
 |  |  |                         </div> | 
 |  |  |                         <div class="box_content_left_list_item_bottom"> | 
 |  |  |                         <div class="box_content_left_list_item_bottom" v-if="item.title!= ''"> | 
 |  |  |                             <span>较上月</span> | 
 |  |  |                             <div class="box_content_left_list_item_bottom_lv"> | 
 |  |  |                                 8.3% | 
 |  |  |                                 {{item.percentage}}% | 
 |  |  |                             </div> | 
 |  |  |                         </div> | 
 |  |  |                     </div> | 
 |  |  |                 </div> | 
 |  |  |             </div> | 
 |  |  |             <div class="box_content_right"> | 
 |  |  |                 <div class="box_content_right_title">风险案件监控</div> | 
 |  |  |                 <div class="box_content_right_title">风险案件敏感词</div> | 
 |  |  |                 <div class="box_chart_item_tu" id="wordchart"></div> | 
 |  |  |             </div> | 
 |  |  |         </div> | 
 |  |  |       <div class="box_chart" style="height: 500px"> | 
 |  |  |         <div class="box_chart_item" style=" width:59%;height: 100%"> | 
 |  |  |           <div class="box_content_right_title" style="width: 100%;display: flex"> | 
 |  |  |             <div style="flex: 1">理赔金额趋势</div> | 
 |  |  | <!--            <div style="flex: 1; text-align: right"> | 
 |  |  |               <span :class="dateType == 0?'seldatetype':'datetype'" @click="changeDataType(0)">近一月</span> | 
 |  |  |               <span :class="dateType == 1?'seldatetype':'datetype'"  @click="changeDataType(1)">近一年</span> | 
 |  |  |             </div>--> | 
 |  |  |           </div> | 
 |  |  |           <div class="box_chart_item_tu" id="tuLipeijine" style="width: 100%;height: 90%" ></div> | 
 |  |  |         </div> | 
 |  |  |         <div class="box_chart_item"   style=" width: 40%;height: 100%" > | 
 |  |  |           <div class="box_content_right_title" > | 
 |  |  |             <span>地区分布</span> | 
 |  |  |           </div> | 
 |  |  |           <div class="box_chart_item_tu" style="width: 100%;height: 100%" id="tuDiqu"></div> | 
 |  |  |         </div> | 
 |  |  |       </div> | 
 |  |  |       <div class="box_chart" > | 
 |  |  |         <div class="box_chart_item" style="height: 400px"> | 
 |  |  |           <div class="box_content_right_title"> | 
 |  |  |             <span>各类型案件分布</span> | 
 |  |  |           </div> | 
 |  |  |           <div class="box_chart_item_tu" id="tuAnjianleixing"></div> | 
 |  |  |         </div> | 
 |  |  |         <div class="box_chart_item"  style="height: 400px"> | 
 |  |  |           <div class="box_content_right_title"> | 
 |  |  |             <span>事故类型分布</span> | 
 |  |  |           </div> | 
 |  |  |           <div class="box_chart_item_tu" id="tuShiguleixing"></div> | 
 |  |  |         </div> | 
 |  |  |         <div class="box_chart_item"  style="height: 400px"> | 
 |  |  |           <div class="box_content_right_title"> | 
 |  |  |             <span>结案率分析</span> | 
 |  |  |           </div> | 
 |  |  |           <div class="box_chart_item_tu" id="tuJieanlv"></div> | 
 |  |  |         </div> | 
 |  |  |       </div> | 
 |  |  |       <div class="box_chart"> | 
 |  |  |         <div class="box_chart_item" style=" width: 49.5%;height: 400px;"> | 
 |  |  |           <div class="box_content_right_title"  > | 
 |  |  |             <span>工种出险TOP10</span> | 
 |  |  |           </div> | 
 |  |  |           <div class="box_chart_item_tu" id="tuGongzhong"></div> | 
 |  |  |         </div> | 
 |  |  |         <div class="box_chart_item"  style=" width: 49.5%;height: 400px;"> | 
 |  |  |           <div class="box_content_right_title"> | 
 |  |  |             <span>出险人年龄分布</span> | 
 |  |  |           </div> | 
 |  |  |           <div class="box_chart_item_tu" id="tuNianlin"></div> | 
 |  |  |         </div> | 
 |  |  |       </div> | 
 |  |  |     </div> | 
 |  |  | </template> | 
 |  |  |  | 
 |  |  | <script> | 
 |  |  |     import * as echarts from 'echarts' | 
 |  |  |     export default { | 
 |  |  |         name: "dataBoard", | 
 |  |  |         data() { | 
 |  |  |             return { | 
 |  |  |                 list: [ | 
 |  |  |                     { | 
 |  |  |                         title: '多次出险', | 
 |  |  |                         num: 0, | 
 |  |  |                         color: '#EF4444', | 
 |  |  |                         backgroundColor: '#FEF2F2' | 
 |  |  |                     }, | 
 |  |  |                     { | 
 |  |  |                         title: '重复报案', | 
 |  |  |                         num: 0, | 
 |  |  |                         color: '#EA580C', | 
 |  |  |                         backgroundColor: '#FFF7ED' | 
 |  |  |                     }, | 
 |  |  |                     { | 
 |  |  |                         title: '索赔过多', | 
 |  |  |                         num: 0, | 
 |  |  |                         color: '#CA8A04', | 
 |  |  |                         backgroundColor: '#FEFCE8' | 
 |  |  |                     }, | 
 |  |  |                     { | 
 |  |  |                         title: '多次出险', | 
 |  |  |                         num: 0, | 
 |  |  |                         color: '#2563EB', | 
 |  |  |                         backgroundColor: '#EFF6FF' | 
 |  |  |                     }, | 
 |  |  |                     { | 
 |  |  |                         title: '新员工出险', | 
 |  |  |                         num: 0, | 
 |  |  |                         color: '#9333EA', | 
 |  |  |                         backgroundColor: '#FAF5FF' | 
 |  |  |                     }, | 
 |  |  |                     { | 
 |  |  |                         title: '延迟报案', | 
 |  |  |                         num: 0, | 
 |  |  |                         color: '#4F46E5', | 
 |  |  |                         backgroundColor: '#EEF2FF' | 
 |  |  |                     } | 
 |  |  |                 ] | 
 |  |  |             } | 
 |  |  | import * as echarts from 'echarts' | 
 |  |  | import 'echarts-wordcloud' | 
 |  |  | import chinaJSON from '@/assets/china.json' | 
 |  |  | import { getInsuranceDataVO, getSettleClaimsDataVO } from '@/api/business/settleRisk' | 
 |  |  | export default { | 
 |  |  |   name: 'dataBoard', | 
 |  |  |   data () { | 
 |  |  |     return { | 
 |  |  |       dateType:0, | 
 |  |  |       list: [ | 
 |  |  |         { | 
 |  |  |           title: '多次出险', | 
 |  |  |           num: 0, | 
 |  |  |           percentage: 0, | 
 |  |  |           color: '#EF4444', | 
 |  |  |           backgroundColor: '#FEF2F2' | 
 |  |  |         }, | 
 |  |  |         created() { | 
 |  |  |             this.$nextTick(() => { | 
 |  |  |                 this.setChart1() | 
 |  |  |                 this.setChart2() | 
 |  |  |                 this.setChart3() | 
 |  |  |             }) | 
 |  |  |         { | 
 |  |  |           title: '重复报案', | 
 |  |  |           num: 0, | 
 |  |  |           percentage: 0, | 
 |  |  |           color: '#d6f7e5', | 
 |  |  |           backgroundColor: '#FFF7ED' | 
 |  |  |         }, | 
 |  |  |         methods: { | 
 |  |  |             setChart1() { | 
 |  |  |                 const chartDom = document.getElementById('tu1') | 
 |  |  |                 const myChart = echarts.init(chartDom) | 
 |  |  |                 let option | 
 |  |  |                 option = { | 
 |  |  |                     grid: { | 
 |  |  |                         left: '3%', | 
 |  |  |                         right: '3%', | 
 |  |  |                         top: '10%', | 
 |  |  |                         bottom: '0%', | 
 |  |  |                         containLabel: true | 
 |  |  |                     }, | 
 |  |  |                     xAxis: { | 
 |  |  |                         type: 'category', | 
 |  |  |                         boundaryGap: false, | 
 |  |  |                         data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] | 
 |  |  |                     }, | 
 |  |  |                     yAxis: { | 
 |  |  |                         type: 'value' | 
 |  |  |                     }, | 
 |  |  |                     series: [ | 
 |  |  |                         { | 
 |  |  |                             data: [2, 7, 3, 12, 16, 9, 6], | 
 |  |  |                             type: 'line', | 
 |  |  |                             areaStyle: {}, | 
 |  |  |                             smooth: true | 
 |  |  |                         } | 
 |  |  |                     ] | 
 |  |  |                 } | 
 |  |  |  | 
 |  |  |                 option && myChart.setOption(option) | 
 |  |  |             }, | 
 |  |  |             setChart2() { | 
 |  |  |                 const chartDom = document.getElementById('tu2') | 
 |  |  |                 const myChart = echarts.init(chartDom) | 
 |  |  |                 let option | 
 |  |  |                 option = { | 
 |  |  |                     grid: { | 
 |  |  |                         left: '3%', | 
 |  |  |                         right: '3%', | 
 |  |  |                         top: '10%', | 
 |  |  |                         bottom: '0%', | 
 |  |  |                         containLabel: true | 
 |  |  |                     }, | 
 |  |  |                     xAxis: { | 
 |  |  |                         type: 'category', | 
 |  |  |                         boundaryGap: false, | 
 |  |  |                         data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] | 
 |  |  |                     }, | 
 |  |  |                     yAxis: { | 
 |  |  |                         type: 'value' | 
 |  |  |                     }, | 
 |  |  |                     series: [ | 
 |  |  |                         { | 
 |  |  |                             data: [2, 7, 3, 12, 16, 9, 6], | 
 |  |  |                             type: 'line', | 
 |  |  |                             areaStyle: {}, | 
 |  |  |                             smooth: true | 
 |  |  |                         } | 
 |  |  |                     ] | 
 |  |  |                 } | 
 |  |  |  | 
 |  |  |                 option && myChart.setOption(option) | 
 |  |  |             }, | 
 |  |  |             setChart3() { | 
 |  |  |                 const chartDom = document.getElementById('tu3') | 
 |  |  |                 const myChart = echarts.init(chartDom) | 
 |  |  |                 let option | 
 |  |  |                 option = { | 
 |  |  |                     grid: { | 
 |  |  |                         left: '3%', | 
 |  |  |                         right: '3%', | 
 |  |  |                         top: '10%', | 
 |  |  |                         bottom: '0%', | 
 |  |  |                         containLabel: true | 
 |  |  |                     }, | 
 |  |  |                     xAxis: { | 
 |  |  |                         type: 'category', | 
 |  |  |                         boundaryGap: false, | 
 |  |  |                         data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] | 
 |  |  |                     }, | 
 |  |  |                     yAxis: { | 
 |  |  |                         type: 'value' | 
 |  |  |                     }, | 
 |  |  |                     series: [ | 
 |  |  |                         { | 
 |  |  |                             data: [2, 7, 3, 12, 16, 9, 6], | 
 |  |  |                             type: 'line', | 
 |  |  |                             areaStyle: {}, | 
 |  |  |                             smooth: true | 
 |  |  |                         } | 
 |  |  |                     ] | 
 |  |  |                 } | 
 |  |  |  | 
 |  |  |                 option && myChart.setOption(option) | 
 |  |  |             } | 
 |  |  |         { | 
 |  |  |           title: '索赔过多', | 
 |  |  |           num: 0, | 
 |  |  |           percentage: 0, | 
 |  |  |           color: '#CA8A04', | 
 |  |  |           backgroundColor: '#FEFCE8' | 
 |  |  |         }, | 
 |  |  |         { | 
 |  |  |           title: '新员工出险', | 
 |  |  |           num: 0, | 
 |  |  |           percentage: 0, | 
 |  |  |           color: '#3ea570', | 
 |  |  |           backgroundColor: '#d6f7e5' | 
 |  |  |         }, | 
 |  |  |         { | 
 |  |  |           title: '敏感词', | 
 |  |  |           num: 0, | 
 |  |  |           percentage: 0, | 
 |  |  |           color: '#2563EB', | 
 |  |  |           backgroundColor: '#EFF6FF' | 
 |  |  |         }, | 
 |  |  |         { | 
 |  |  |           title: '延迟报案', | 
 |  |  |           num: 0, | 
 |  |  |           percentage: 0, | 
 |  |  |           color: '#4F46E5', | 
 |  |  |           backgroundColor: '#EEF2FF' | 
 |  |  |         }, | 
 |  |  |         { | 
 |  |  |           title: '新员工保障条款', | 
 |  |  |           num: 0, | 
 |  |  |           percentage: 0, | 
 |  |  |           color: '#9333EA', | 
 |  |  |           backgroundColor: '#FAF5FF' | 
 |  |  |         }, | 
 |  |  |         { | 
 |  |  |           title: '', | 
 |  |  |           num: 0, | 
 |  |  |           color: '#9333EA', | 
 |  |  |           backgroundColor: '#FAF5FF' | 
 |  |  |         } | 
 |  |  |       ], | 
 |  |  |         info: null, | 
 |  |  |         chatData: null | 
 |  |  |     } | 
 |  |  |   }, | 
 |  |  |   created () { | 
 |  |  |       this.getData() | 
 |  |  |       this.getChatData() | 
 |  |  |   }, | 
 |  |  |   methods: { | 
 |  |  |       getChatData() { | 
 |  |  |           getSettleClaimsDataVO() | 
 |  |  |             .then(res => { | 
 |  |  |                 this.chatData = res | 
 |  |  |                 let arr1_x = res.settleClaimsTotalList.map(item => item.dataFirst) | 
 |  |  |                 let arr1_y = res.settleClaimsTotalList.map(item => item.dataSecond) | 
 |  |  |  | 
 |  |  |                 let arr2_x = res.settleClaimsFeeList.map(item => item.dataFirst) | 
 |  |  |                 let arr2_y = res.settleClaimsFeeList.map(item => item.dataSecond) | 
 |  |  |  | 
 |  |  |                 let arr3_x = res.averageSettleClaimsList.map(item => item.dataFirst) | 
 |  |  |                 let arr3_y = res.averageSettleClaimsList.map(item => item.dataSecond) | 
 |  |  |  | 
 |  |  |                 let arr4 = res.sensitiveDataList ? res.sensitiveDataList.map(item => { | 
 |  |  |                     return { | 
 |  |  |                         name: item.dataFirst, | 
 |  |  |                         value: item.dataSecond | 
 |  |  |                     } | 
 |  |  |                 }) : [] | 
 |  |  |  | 
 |  |  |                 this.list[0].num = res.riskTimesCxTotal | 
 |  |  |                 this.list[0].percentage = res.riskTimesCxRata | 
 |  |  |  | 
 |  |  |                 this.list[1].num = res.riskRepeatTotal | 
 |  |  |                 this.list[1].percentage = res.riskRepeatRata | 
 |  |  |  | 
 |  |  |                 this.list[2].num = res.riskTimesSpTotal | 
 |  |  |                 this.list[2].percentage = res.riskTimesSpRata | 
 |  |  |  | 
 |  |  |                 this.list[3].num = res.riskNewUserTotal | 
 |  |  |                 this.list[3].percentage = res.riskNewUserRata | 
 |  |  |  | 
 |  |  |                 this.list[4].num = res.riskSensitiveTotal | 
 |  |  |                 this.list[4].percentage = res.riskSensitiveRata | 
 |  |  |  | 
 |  |  |                 this.list[5].num = res.riskDelayUnitTotal | 
 |  |  |                 this.list[5].percentage = res.riskDelayUnitRata | 
 |  |  |  | 
 |  |  |                 this.list[6].num = res.riskUnTakeEffectTotal | 
 |  |  |                 this.list[6].percentage = res.riskUnTakeEffectRata | 
 |  |  |  | 
 |  |  |                 let arr5_x = res.monthTotalMoneyDataList.map(item => item.dataFirst) | 
 |  |  |                 let arr5_y = res.monthTotalMoneyDataList.map(item => item.dataSecond) | 
 |  |  |  | 
 |  |  |                 let arr6 = res.caseTypeDataList ? res.caseTypeDataList.map(item => { | 
 |  |  |                     return { | 
 |  |  |                         name: item.dataFirst, | 
 |  |  |                         value: item.dataSecond | 
 |  |  |                     } | 
 |  |  |                 }) : [] | 
 |  |  |  | 
 |  |  |                 let arr7_x = res.typeDataList ? res.typeDataList.map(item => { | 
 |  |  |                     return { | 
 |  |  |                         name: item.dataFirst | 
 |  |  |                     } | 
 |  |  |                 }) : [] | 
 |  |  |                 let arr7_y = res.typeDataList ? res.typeDataList.map(item => Number(item.dataSecond)) : [] | 
 |  |  |  | 
 |  |  |                 let arr8_x = res.closeRataDataList.map(item => item.dataFirst) | 
 |  |  |                 let arr8_y = res.closeRataDataList.map(item => Number(item.dataSecond)) | 
 |  |  |  | 
 |  |  |                 let arr9_x = res.workTypeDataList.map(item => item.dataFirst) | 
 |  |  |                 let arr9_y = res.workTypeDataList.map(item => Number(item.dataSecond)) | 
 |  |  |  | 
 |  |  |                 let arr10_x = res.memberAgeDataList.map(item => item.dataFirst) | 
 |  |  |                 let arr10_y = res.memberAgeDataList.map(item => Number(item.dataSecond)) | 
 |  |  |  | 
 |  |  |                 let arr11_x = res.areaDataList ? res.areaDataList.map(item => { | 
 |  |  |                     return { | 
 |  |  |                         name: item.dataFirst, | 
 |  |  |                         code: item.dataThird, | 
 |  |  |                         value: item.dataThird | 
 |  |  |                     } | 
 |  |  |                 }) : [] | 
 |  |  |  | 
 |  |  |                 this.$nextTick(() => { | 
 |  |  |                     this.setChart1(arr1_x, arr1_y) | 
 |  |  |                     this.setChart2(arr2_x, arr2_y) | 
 |  |  |                     this.setChart3(arr3_x, arr3_y) | 
 |  |  |                     this.setChartWord(arr4) | 
 |  |  |                     this.setChartLipeijine(arr5_x, arr5_y) | 
 |  |  |                     this.setChartAnjianleixing(arr6) | 
 |  |  |                     this.setChartShiguleixing(arr7_x, arr7_y) | 
 |  |  |                     this.setChartJieanlv(arr8_x, arr8_y) | 
 |  |  |                     this.setChartGonghzong(arr9_x, arr9_y) | 
 |  |  |                     this.setChartNianlin(arr10_x, arr10_y) | 
 |  |  |                     this.setChartDiqu(arr11_x) | 
 |  |  |                 }) | 
 |  |  |             }) | 
 |  |  |       }, | 
 |  |  |       getData() { | 
 |  |  |           getInsuranceDataVO() | 
 |  |  |               .then(res => { | 
 |  |  |                   this.info = res | 
 |  |  |               }) | 
 |  |  |       }, | 
 |  |  |     changeDataType(type){ | 
 |  |  |       this.dateType = type | 
 |  |  |     }, | 
 |  |  |     setChartLipeijine (xData, yData) { | 
 |  |  |       const chartDom = document.getElementById('tuLipeijine') | 
 |  |  |       const myChart = echarts.init(chartDom) | 
 |  |  |       const option = this.getBarOption(xData, yData,'#5470c5') | 
 |  |  |       option && myChart.setOption(option) | 
 |  |  |       window.addEventListener('resize', function () {//执行 | 
 |  |  |         myChart.resize() | 
 |  |  |       }) | 
 |  |  |     }, | 
 |  |  |     setChartDiqu (mapData) { | 
 |  |  |       const chartDom = document.getElementById('tuDiqu') | 
 |  |  |       const myChart = echarts.init(chartDom) | 
 |  |  |       echarts.registerMap('china', chinaJSON) | 
 |  |  |       // const mapData = [ | 
 |  |  |       //   { name: '北京市', code: '110000', value: 100 }, | 
 |  |  |       //   { name: '天津市', code: '120000', value: 200 }, | 
 |  |  |       //   { name: '上海市', code: '310000', value: 300 }, | 
 |  |  |       //   { name: '重庆市', code: '500000', value: 400 }, | 
 |  |  |       //   { name: '河北省', code: '130000', value: 500 }, | 
 |  |  |       //   { name: '河南省', code: '410000', value: 600 }, | 
 |  |  |       //   { name: '云南省', code: '530000', value: 10 }, | 
 |  |  |       //   { name: '辽宁省', code: '210000', value: 20 }, | 
 |  |  |       //   { name: '黑龙江省', code: '230000', value: 30 }, | 
 |  |  |       //   { name: '湖南省', code: '430000', value: 40 }, | 
 |  |  |       //   { name: '安徽省', code: '340000', value: 60 }, | 
 |  |  |       //   { name: '山东省', code: '370000', value: 50 }, | 
 |  |  |       //   { name: '新疆维吾尔自治区', code: '650000', value: 70 }, | 
 |  |  |       //   { name: '江苏省', code: '320000', value: 10 }, | 
 |  |  |       //   { name: '浙江省', code: '330000', value: 20 }, | 
 |  |  |       //   { name: '江西省', code: '360000', value: 30 }, | 
 |  |  |       //   { name: '湖北省', code: '420000', value: 40 }, | 
 |  |  |       //   { name: '广西壮族自治区', code: '450000', value: 0 }, | 
 |  |  |       //   { name: '甘肃省', code: '620000', value: 0 }, | 
 |  |  |       //   { name: '山西省', code: '140000', value: 0 }, | 
 |  |  |       //   { name: '内蒙古自治区', code: '150000', value: 0 }, | 
 |  |  |       //   { name: '陕西省', code: '610000', value: 0 }, | 
 |  |  |       //   { name: '吉林省', code: '220000', value: 0 }, | 
 |  |  |       //   { name: '福建省', code: '350000', value: 0 }, | 
 |  |  |       //   { name: '贵州省', code: '520000', value: 0 }, | 
 |  |  |       //   { name: '广东省', code: '440000', value: 0 }, | 
 |  |  |       //   { name: '青海省', code: '630000', value: 0 }, | 
 |  |  |       //   { name: '西藏自治区', code: '540000', value: 0 }, | 
 |  |  |       //   { name: '宁夏回族自治区', code: '640000', value: 0 }, | 
 |  |  |       //   { name: '四川省', code: '510000', value: 0 }, | 
 |  |  |       //   { name: '宁夏省', code: '640000', value: 0 }, | 
 |  |  |       //   { name: '海南省', code: '460000', value: 0 }, | 
 |  |  |       //   { name: '台湾省', code: '710000', value: 0 }, | 
 |  |  |       //   { name: '香港特别行政区', code: '810000', value: 0 }, | 
 |  |  |       //   { name: '澳门特别行政区', code: '820003', value: 0 }, | 
 |  |  |       //   { name: '南海诸岛', code: '', value: 0 } | 
 |  |  |       // ] | 
 |  |  |       const option = { | 
 |  |  |         tooltip: { | 
 |  |  |           trigger: 'item', | 
 |  |  |           formatter: '{b}<br/>{c}' | 
 |  |  |         }, | 
 |  |  |         // toolbox: { | 
 |  |  |         //   show: true, | 
 |  |  |         //   orient: 'vertical', | 
 |  |  |         //   left: 'right', | 
 |  |  |         //   top: 'center', | 
 |  |  |         //   feature: { | 
 |  |  |         //     dataView: { readOnly: false }, | 
 |  |  |         //     restore: {}, | 
 |  |  |         //     saveAsImage: {} | 
 |  |  |         //   } | 
 |  |  |         // }, | 
 |  |  |         visualMap: { | 
 |  |  |           top: 100, | 
 |  |  |           left: 'right', | 
 |  |  |           // min: 0, | 
 |  |  |           // max: 50000, | 
 |  |  |           // text: ['High', 'Low'], | 
 |  |  |           // realtime: false, | 
 |  |  |           calculable: true, | 
 |  |  |           show: false, | 
 |  |  |           inRange: { | 
 |  |  |             color: ['lightskyblue', 'yellow', 'orangered'] | 
 |  |  |           } | 
 |  |  |         }, | 
 |  |  |         series: [ | 
 |  |  |           { | 
 |  |  |             name: '地区分布', | 
 |  |  |             type: 'map', | 
 |  |  |             map: 'china', | 
 |  |  |             label: { | 
 |  |  |               show: true | 
 |  |  |             }, | 
 |  |  |             data: mapData | 
 |  |  |           } | 
 |  |  |         ] | 
 |  |  |       } | 
 |  |  |       myChart.setOption(option) | 
 |  |  |       window.addEventListener('resize', function () {//执行 | 
 |  |  |         myChart.resize() | 
 |  |  |       }) | 
 |  |  |     }, | 
 |  |  |     setChartAnjianleixing (data) { | 
 |  |  |       const chartDom = document.getElementById('tuAnjianleixing') | 
 |  |  |       const myChart = echarts.init(chartDom) | 
 |  |  |       const option = { | 
 |  |  |         grid: { | 
 |  |  |           left: '3%', | 
 |  |  |           right: '3%', | 
 |  |  |           top: '10%', | 
 |  |  |           bottom: '0%', | 
 |  |  |           containLabel: true | 
 |  |  |         }, | 
 |  |  |         label: { | 
 |  |  |           alignTo: 'edge', | 
 |  |  |           formatter: '{name|{b}}\n{time|{c} }', | 
 |  |  |           minMargin: 5, | 
 |  |  |           edgeDistance: 10, | 
 |  |  |           lineHeight: 15, | 
 |  |  |           rich: { | 
 |  |  |             time: { | 
 |  |  |               fontSize: 10, | 
 |  |  |               color: '#999' | 
 |  |  |             } | 
 |  |  |           } | 
 |  |  |         }, | 
 |  |  |         tooltip: { | 
 |  |  |           trigger: 'item' | 
 |  |  |         }, | 
 |  |  |         legend: { | 
 |  |  |           orient: 'vertical', | 
 |  |  |           left: 'right' | 
 |  |  |         }, | 
 |  |  |         series: [ | 
 |  |  |           { | 
 |  |  |             data, | 
 |  |  |             type: 'pie', | 
 |  |  |             areaStyle: {}, | 
 |  |  |             smooth: true | 
 |  |  |           } | 
 |  |  |         ] | 
 |  |  |       } | 
 |  |  |  | 
 |  |  |       option && myChart.setOption(option) | 
 |  |  |       window.addEventListener('resize', function () {//执行 | 
 |  |  |         myChart.resize() | 
 |  |  |       }) | 
 |  |  |     }, | 
 |  |  |     setChartShiguleixing (indicator, value) { | 
 |  |  |         if (indicator.length === 0) return; | 
 |  |  |       var chartDom = document.getElementById('tuShiguleixing'); | 
 |  |  |       var myChart = echarts.init(chartDom); | 
 |  |  |       var option = { | 
 |  |  |         radar: { | 
 |  |  |           indicator | 
 |  |  |         }, | 
 |  |  |         tooltip: { | 
 |  |  |           trigger: 'item' | 
 |  |  |         }, | 
 |  |  |         series: [ | 
 |  |  |           { | 
 |  |  |             name: '事故类型分布', | 
 |  |  |             type: 'radar', | 
 |  |  |             data: [ | 
 |  |  |               { | 
 |  |  |                 value, | 
 |  |  |                 name: '' | 
 |  |  |               } | 
 |  |  |             ] | 
 |  |  |           } | 
 |  |  |         ] | 
 |  |  |       } | 
 |  |  |       option && myChart.setOption(option); | 
 |  |  |       window.addEventListener('resize', function () {//执行 | 
 |  |  |         myChart.resize() | 
 |  |  |       }) | 
 |  |  |     }, | 
 |  |  |     setChartJieanlv (xData, yData) { | 
 |  |  |       const chartDom = document.getElementById('tuJieanlv') | 
 |  |  |       const myChart = echarts.init(chartDom) | 
 |  |  |       const option = this.getLineOption(xData, yData,'rgba(207,58,24,0.83)') | 
 |  |  |       option && myChart.setOption(option) | 
 |  |  |       window.addEventListener('resize', function () {//执行 | 
 |  |  |         myChart.resize() | 
 |  |  |       }) | 
 |  |  |     }, | 
 |  |  |     setChartGonghzong (dataX, dataY) { | 
 |  |  |       var chartDom = document.getElementById('tuGongzhong'); | 
 |  |  |       var myChart = echarts.init(chartDom); | 
 |  |  |       var option = { | 
 |  |  |         grid: { | 
 |  |  |           left: '3%', | 
 |  |  |           right: '4%', | 
 |  |  |           bottom: '3%', | 
 |  |  |           containLabel: true | 
 |  |  |         }, | 
 |  |  |         xAxis: { | 
 |  |  |           type: 'value' | 
 |  |  |           // boundaryGap: [0, 0.01] | 
 |  |  |         }, | 
 |  |  |         yAxis: { | 
 |  |  |           type: 'category', | 
 |  |  |           data: dataX | 
 |  |  |         }, | 
 |  |  |         series: [ | 
 |  |  |           { | 
 |  |  |             name: '2025', | 
 |  |  |             type: 'bar', | 
 |  |  |             itemStyle: { | 
 |  |  |               color:  '#f6d68d' | 
 |  |  |             }, | 
 |  |  |             data: dataY | 
 |  |  |           } | 
 |  |  |         ] | 
 |  |  |       } | 
 |  |  |       option && myChart.setOption(option); | 
 |  |  |       window.addEventListener('resize', function () {//执行 | 
 |  |  |         myChart.resize() | 
 |  |  |       }) | 
 |  |  |     }, | 
 |  |  |     setChartNianlin (dataX, dataY) { | 
 |  |  |       const chartDom = document.getElementById('tuNianlin') | 
 |  |  |       const myChart = echarts.init(chartDom) | 
 |  |  |       const option = this.getBarOption(dataX, dataY,'#80d3ff') | 
 |  |  |       option && myChart.setOption(option) | 
 |  |  |       window.addEventListener('resize', function () {//执行 | 
 |  |  |         myChart.resize() | 
 |  |  |       }) | 
 |  |  |     }, | 
 |  |  |     setChartWord (data) { | 
 |  |  |       // const color = ['#1890FF', '#13C2C2', '#2FC25B', '#009DFF', '#8496FA'] | 
 |  |  |       const myChart = echarts.init(document.getElementById('wordchart')) | 
 |  |  |       var option = { | 
 |  |  |         backgroundColor: '#fff', | 
 |  |  |         series: [ | 
 |  |  |           { | 
 |  |  |             type: 'wordCloud', | 
 |  |  |             sizeRange: [15, 70], // 用来调整字的大小范围 | 
 |  |  |             rotationRange: [0, 0], // 每个词旋转的角度范围和旋转的步进 | 
 |  |  |             rotationStep: 45, | 
 |  |  |             gridSize: 10, // 用来调整词之间的距离 | 
 |  |  |             shape: 'pentagon', // shape这个属性虽然可配置,但是在词的数量不太多的时候,效果不明显,它会趋向于画一个椭圆 | 
 |  |  |             // 位置的配置 | 
 |  |  |             width: '100%', | 
 |  |  |             height: '100%', | 
 |  |  |             drawOutOfBound: false, // 允许词太大的时候,超出画布的范围 | 
 |  |  |             layoutAnimation: true, // 布局的时候是否有动画 | 
 |  |  |             textStyle: { | 
 |  |  |               // 颜色可以用一个函数来返回字符串,这里是随机色 | 
 |  |  |             /*  color: function (v) { | 
 |  |  |                 const index = Math.floor(Math.random() * color.length) | 
 |  |  |                 return color[index] | 
 |  |  |               }, */ | 
 |  |  |               fontFamily: 'sans-serif', | 
 |  |  |               fontWeight: 'bold', | 
 |  |  |               // Color可以是一个回调函数或一个颜色字符串 | 
 |  |  |               color: function () { | 
 |  |  |                 // Random color | 
 |  |  |                 return 'rgb(' + [ | 
 |  |  |                   Math.round(Math.random() * 160), | 
 |  |  |                   Math.round(Math.random() * 160), | 
 |  |  |                   Math.round(Math.random() * 160) | 
 |  |  |                 ].join(',') + ')' | 
 |  |  |               } | 
 |  |  |             }, | 
 |  |  |             // 划过添加的阴影,因为我不需要,因此注释了 | 
 |  |  |             // emphasis: { | 
 |  |  |             //    focus: 'self', | 
 |  |  |             //    textStyle: { | 
 |  |  |             //        textShadowBlur: 10, | 
 |  |  |             //        textShadowColor: '#333' | 
 |  |  |             //    } | 
 |  |  |             //  }, | 
 |  |  |             // data格式是一个数组 | 
 |  |  |             data | 
 |  |  |           } | 
 |  |  |         ] | 
 |  |  |       } | 
 |  |  |       myChart.setOption(option) | 
 |  |  |     }, | 
 |  |  |     setChart1 (xdata, ydata) { | 
 |  |  |       const chartDom = document.getElementById('tu1') | 
 |  |  |       const myChart = echarts.init(chartDom) | 
 |  |  |       const option = this.getLineOption(xdata, ydata,'#50A850') | 
 |  |  |       option && myChart.setOption(option) | 
 |  |  |       window.addEventListener('resize', function () {//执行 | 
 |  |  |         myChart.resize() | 
 |  |  |       }) | 
 |  |  |     }, | 
 |  |  |     setChart2 (xdata, ydata) { | 
 |  |  |       const chartDom = document.getElementById('tu2') | 
 |  |  |       const myChart = echarts.init(chartDom) | 
 |  |  |       const option = this.getLineOption(xdata,ydata,'#f07e6f') | 
 |  |  |       option && myChart.setOption(option) | 
 |  |  |       window.addEventListener('resize', function () {//执行 | 
 |  |  |         myChart.resize() | 
 |  |  |       }) | 
 |  |  |     }, | 
 |  |  |     setChart3 (xdata, ydata) { | 
 |  |  |       const chartDom = document.getElementById('tu3') | 
 |  |  |       const myChart = echarts.init(chartDom) | 
 |  |  |       const option = this.getLineOption(xdata,ydata,'#8951be') | 
 |  |  |       option && myChart.setOption(option) | 
 |  |  |       window.addEventListener('resize', function () {//执行 | 
 |  |  |         myChart.resize() | 
 |  |  |       }) | 
 |  |  |     }, | 
 |  |  |     getBarOption(xd,yd,color){ | 
 |  |  |       const option = { | 
 |  |  |         grid: { | 
 |  |  |           left: '3%', | 
 |  |  |           right: '3%', | 
 |  |  |           top: '10%', | 
 |  |  |           bottom: '0%', | 
 |  |  |           containLabel: true | 
 |  |  |         }, | 
 |  |  |         legend: {}, | 
 |  |  |         tooltip: { | 
 |  |  |           trigger: 'axis', | 
 |  |  |           axisPointer: { | 
 |  |  |             type: 'shadow' | 
 |  |  |           } | 
 |  |  |         }, | 
 |  |  |         xAxis: { | 
 |  |  |           type: 'category', | 
 |  |  |           // boundaryGap: false, | 
 |  |  |           data: xd, | 
 |  |  |           axisLabel: { | 
 |  |  |             interval: 1 // | 
 |  |  |           } | 
 |  |  |         }, | 
 |  |  |         yAxis: { | 
 |  |  |           type: 'value' | 
 |  |  |         }, | 
 |  |  |         series: [ | 
 |  |  |           { | 
 |  |  |             emphasis: { | 
 |  |  |               focus: 'series' | 
 |  |  |             }, | 
 |  |  |             data: yd, | 
 |  |  |             type: 'bar', | 
 |  |  |             itemStyle: { | 
 |  |  |               color: color || '#f07e6f' | 
 |  |  |             }, | 
 |  |  |             smooth: true | 
 |  |  |           } | 
 |  |  |         ] | 
 |  |  |       } | 
 |  |  |       return option | 
 |  |  |     }, | 
 |  |  |     getLineOption(xd,yd,color){ | 
 |  |  |       const option = { | 
 |  |  |         grid: { | 
 |  |  |           left: '3%', | 
 |  |  |           right: '3%', | 
 |  |  |           top: '10%', | 
 |  |  |           bottom: '0%', | 
 |  |  |           containLabel: true | 
 |  |  |         }, | 
 |  |  |         tooltip: { | 
 |  |  |           trigger: 'axis', | 
 |  |  |           axisPointer: { | 
 |  |  |             type: 'shadow' | 
 |  |  |           } | 
 |  |  |         }, | 
 |  |  |         legend: {}, | 
 |  |  |         xAxis: { | 
 |  |  |           type: 'category', | 
 |  |  |           boundaryGap: false, | 
 |  |  |           data: xd | 
 |  |  |         }, | 
 |  |  |         yAxis: { | 
 |  |  |           type: 'value' | 
 |  |  |         }, | 
 |  |  |         series: [ | 
 |  |  |           { | 
 |  |  |             data: yd, | 
 |  |  |             type: 'line', | 
 |  |  |             areaStyle: { | 
 |  |  |               opacity: 0.5, | 
 |  |  |               color: color || '#f07e6f' | 
 |  |  |             }, | 
 |  |  |             lineStyle: { | 
 |  |  |               color: color || '#f07e6f' | 
 |  |  |             }, | 
 |  |  |             smooth: true | 
 |  |  |           } | 
 |  |  |         ] | 
 |  |  |       } | 
 |  |  |       return option | 
 |  |  |     } | 
 |  |  |   } | 
 |  |  | } | 
 |  |  | </script> | 
 |  |  |  | 
 |  |  | <style lang="scss" scoped> | 
 |  |  |     .box { | 
 |  |  |         width: 100%; | 
 |  |  |         padding: 0 10px; | 
 |  |  |         padding: 0 10px 30px 10px; | 
 |  |  |  | 
 |  |  |         box-sizing: border-box; | 
 |  |  |         .box_shua { | 
 |  |  |             width: 100%; | 
 |  |  | 
 |  |  |             align-items: center; | 
 |  |  |             justify-content: space-between; | 
 |  |  |             margin-top: 15px; | 
 |  |  |             .datetype{ | 
 |  |  |               cursor: pointer; | 
 |  |  |               color: #8c939d; | 
 |  |  |               margin-right: 10px; | 
 |  |  |               padding: 2px 10px; | 
 |  |  |               font-size: 14px; | 
 |  |  |               border: solid 1px  #8c939d; | 
 |  |  |             } | 
 |  |  |             .seldatetype{ | 
 |  |  |               cursor: pointer; | 
 |  |  |               color: #3170fe; | 
 |  |  |               margin-right: 10px; | 
 |  |  |               padding: 2px 10px; | 
 |  |  |               font-size: 14px; | 
 |  |  |               border: solid 1px  #3170fe; | 
 |  |  |             } | 
 |  |  |             .box_chart_item { | 
 |  |  |                 width: 32.5%; | 
 |  |  |                 height: 225px; | 
 |  |  | 
 |  |  |                         margin-right: 5px; | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |               .box_content_right_title { | 
 |  |  |                 font-weight: bold; | 
 |  |  |                 font-size: 16px; | 
 |  |  |                 color: #101010; | 
 |  |  |                 margin-bottom: 15px; | 
 |  |  |               } | 
 |  |  |                 .box_chart_item_price { | 
 |  |  |                     color: rgba(16,16,16,1); | 
 |  |  |                     font-size: 22px; | 
 |  |  | 
 |  |  |                 } | 
 |  |  |                 .box_chart_item_tu { | 
 |  |  |                     width: 100%; | 
 |  |  |                     height: 130px; | 
 |  |  |                     height: 90%; | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  | 
 |  |  |                     align-items: center; | 
 |  |  |                     justify-content: space-between; | 
 |  |  |                     .box_content_left_list_item { | 
 |  |  |                         width: 32%; | 
 |  |  |                         width: 24%; | 
 |  |  |                         height: 94px; | 
 |  |  |                         padding: 16px 20px; | 
 |  |  |                         box-sizing: border-box; | 
 |  |  | 
 |  |  |                     color: #101010; | 
 |  |  |                     margin-bottom: 15px; | 
 |  |  |                 } | 
 |  |  |               .box_chart_item_tu { | 
 |  |  |                 width: 100%; | 
 |  |  |                 height: 130px; | 
 |  |  |               } | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |     } |