<template> <view class="radoContent"> <!-- #ifdef APP-PLUS || H5 --> <view @click="echarts.onClick" :prop="option" :change:prop="echarts.updateEcharts" id="custRadoChart" class="echarts"></view> <!-- #endif --> </view> </template> <script> import echarts from '../../static/echarts.js' import icons from '../uni-icons/icons.js' export default { props: { chartId: String, dataInfo: null, isShowIcon: { type: Boolean, default: () => { return false } }, themeColor: { type: String, default: '#3CD9D9' }, themeColor50: { type: String, default: '#AAEFEF' }, themeColor25: { type: String, default: '#D4F7F7' }, fuzhuColor: { type: String, default: '#FEC350' }, fuzhuColor50: { type: String, default: '#FEE1A7' }, fuzhuColor15: { type: String, default: '#FFF6E4' } }, data() { return { option: { radar: [{ indicator: [{ name: '关注意愿', max: 100, min: 0 }, { name: '浏览意愿', max: 100, min: 0 }, { name: '分享意愿', max: 100, min: 0 } ], center: ['50%', '65%'], radius: 90, startAngle: 90, splitNumber: 2, shape: 'polygon', name: { formatter: '{value}', textStyle: { color: '#333', opacity: 0.7 } }, splitArea: { areaStyle: { // color: ['rgba(114, 172, 209, 0.2)', // 'rgba(114, 172, 209, 0.4)', 'rgba(114, 172, 209, 0.6)', // 'rgba(114, 172, 209, 0.8)', 'rgba(114, 172, 209, 1)'], color: [ // '#333' 'rgba(115,227,227,0.3)' // '#88F4F4' // 'rgba(254,195,80,0.5)', // 'rgba(254,195,80,0.4)', // 'rgba(254,195,80,0.3)', // 'rgba(254,195,80,0.2)', // 'rgba(254,195,80,0.1)' ], shadowColor: 'rgba(0, 0, 0, 0)', // shadowBlur: 10 } }, axisLine: { lineStyle: { // color: 'rgba(255, 255, 255, 0.5)' color: 'rgba(84,222,222,1)' } }, splitLine: { lineStyle: { // color: 'rgba(255, 255, 255, 0.5)' color: 'rgba(84,222,222,1)' } } }], series: [{ name: '雷达图', type: 'radar', emphasis: { lineStyle: { width: 4 } }, data: [{ value: [], name: '图一', symbol: 'circle', symbolSize: 6, itemStyle: { color: '#fff', borderWidth: 2, // borderColor: '#202638' borderColor: 'rgba(118,228,228,0.7)' }, lineStyle: { type: 'solid', borderWidth: 4, // color: '#202638' color: 'rgba(118,228,228,1)' }, areaStyle: { // color: 'rgba(255, 255, 255, 0.7)' color: 'rgba(118,228,228,0.6)' } }] }] } } }, mounted() { this.getDataAction() }, filters: { userLevelFilter(val) { if (val) { switch (val){ case 1: return 'A' break; case 2: return 'B' break; default: return 'C' break; } } return '-' } }, methods: { getDataAction() { this.option.radar[0].splitArea.areaStyle.color = [this.themeColor25] this.option.radar[0].axisLine.lineStyle.color = this.themeColor this.option.radar[0].splitLine.lineStyle.color = this.themeColor this.option.series[0].data[0].itemStyle.borderColor = this.themeColor this.option.series[0].data[0].lineStyle.color = this.themeColor this.option.series[0].data[0].areaStyle.color = this.themeColor // 关注意愿、浏览意愿、分享意愿 this.option.series[0].data[0].value = [this.dataFilter(this.dataInfo.followIntention), this.dataFilter(this.dataInfo.scanIntention), this.dataFilter(this.dataInfo.shareIntention)] this.option.radar[0].indicator[0].name = '关注意愿' + ':' + this.levelFilter(this.dataInfo.followIntention) this.option.radar[0].indicator[1].name = '浏览意愿' + ':' + this.levelFilter(this.dataInfo.scanIntention) this.option.radar[0].indicator[2].name = '分享意愿' + ':' + this.levelFilter(this.dataInfo.shareIntention) }, dataFilter(val) { if (val) { switch (val){ case 'A': return 100 break; case 'B': return 50 break; default: return 10 break; } } return 10 }, levelFilter(val) { if (val) { switch (val){ case 'A': return '高' break; case 'B': return '中' break; default: return '低' break; } } return '-' }, onViewClick(options) { // console.log(options) } }, watch: { dataInfo: { handler(e) { this.getDataAction() }, deep: true }, fuzhuColor15: { handler(e) { this.getDataAction() }, immediate: true } }, components: { icons } } </script> <script module="echarts" lang="renderjs"> let myChart export default { mounted() { this.initAction() }, methods: { initAction() { if (typeof window.echarts === 'function') { this.initEcharts() } else { // 动态引入较大类库避免影响页面展示 const script = document.createElement('script') // view 层的页面运行在 www 根目录,其相对路径相对于 www 计算 script.src = 'static/echarts.js' script.onload = this.initEcharts.bind(this) document.head.appendChild(script) } }, initEcharts() { myChart = echarts.init(document.getElementById('custRadoChart')) // 观测更新的数据在 view 层可以直接访问到 if (myChart) { myChart.setOption(this.option) } }, updateEcharts(newValue, oldValue, ownerInstance, instance) { // 监听 service 层数据变更 if (myChart) { myChart.setOption(newValue) } }, onClick(event, ownerInstance) { // 调用 service 层的方法 ownerInstance.callMethod('onViewClick', { test: 'test' }) } } } </script> <style scoped lang="scss"> .radoContent { width: 100%; height: 100%; position: relative; font-size: 60rpx; font-family: DIN Alternate; font-weight: bold; background-color: #4CD964; .echarts { width: 100%; margin-top: 0rpx; height: 100%; } .topSection { position: absolute; top: 0; left: 0; width: 100%; display: flex; align-items: center; justify-content: space-between; padding: 50rpx 48rpx; box-sizing: border-box; .leftDiv { display: flex; flex-direction: column; .levelDiv { display: flex; align-items: center; .des { margin-top: 10rpx; font-size: 12rpx; font-family: Verdana, Verdana-Regular; font-weight: 400; color: #999999; } .levelImg { width: 144rpx; height: 22rpx; margin-top: 20rpx; } } } .level { font-size: 60rpx; font-family: DIN Alternate, DIN Alternate-Bold; font-weight: 700; text-align: center; } .levelDes { font-size: 20rpx; font-family: Verdana, Verdana-Regular; font-weight: 400; color: #999999; } } } </style>