web-africa-h5/pages/market/performance/directPush/Grade.vue

251 lines
6.8 KiB
Vue
Raw Normal View History

2025-03-21 14:49:01 +08:00
<template>
<view class="content">
<view class="content-picker d-e-c">
<view class="picker-small" @click="openCalendar2">
<text
class="mr10">{{ checkDay2?checkDay2[0]+' ' + $t('w_0139')+ ' ' +checkDay2[1]:$t('CK_KS_38') }}</text>
<u-icon name="arrow-down-fill" size="28rpx" color="#333"></u-icon>
</view>
</view>
<view class="charts-box">
<!-- 注意因各小程序及app端通过组件均不能传递function类型参数组件内所有formatter方法均需使用format属性指定config-ucharts.js里事先定义好的formatter的key值组件会自动匹配与其对应的function -->
<!-- 饼图的format需要挂到chartData中的series[i].format上例如pieFormatDemo.series[i].format="pieDemo"当使用localdata数据渲染图表时因series是组件自动拼接的暂时不支持使用format -->
<canvas canvas-id="UdaKiTnYTHLxuZItgHFhiCtezzDQzLfD" id="UdaKiTnYTHLxuZItgHFhiCtezzDQzLfD" class="charts"
@tap="tap" />
</view>
<liu-calendar-date ref="calendar2" isRange @checked='getDate2'></liu-calendar-date>
</view>
</template>
<script>
import uCharts from '@/uni_modules/qiun-data-charts/js_sdk/u-charts/u-charts.js';
var uChartsInstance = {};
var getStarDay = function() {
let date = new Date();
let year = date.getFullYear();
let month = date.getMonth() + 1;
month = (month > 9) ? month : ("0" + month);
return year + '-' + month + '-01';
}
var getEndDay = function() {
let date = new Date();
let year = date.getFullYear();
let month = date.getMonth() + 1;
month = (month > 9) ? month : ("0" + month);
let day = date.getDate();
if (day > 1) {
day -= 1
}
day = (day < 10) ? ("0" + day) : day;
return year + '-' + month + '-' + day;
}
export default {
data() {
return {
cWidth: 750,
cHeight: 800,
checkDay2: [getStarDay(), getEndDay()]
};
},
onReady() {
//这里的 750 对应 css .charts 的 width
this.cWidth = uni.upx2px(750);
//这里的 500 对应 css .charts 的 height
this.cHeight = uni.upx2px(800);
this.getServerData();
},
methods: {
//打开选择器
openCalendar2() {
this.$refs.calendar2.open()
},
//日期区间选择成功
getDate2(e) {
this.checkDay2 = e.value;
this.getServerData();
},
getServerData() {
let self = this;
self._post('member/api/achieve/parent-achieve-right', {
startDate: self.checkDay2[0],
endDate: self.checkDay2[1],
}, res => {
let list = res.data.list;
let obj = {
series: [{
data: []
}]
}
list.forEach((item, index) => {
if (item.pkGradeKeyVal) {
obj.series[0].data.push({
value1: item.achieve * 1,
value: item.peopleNumber * 1,
name: item.pkGradeKeyVal
})
}
})
console.log(obj)
self.drawCharts('UdaKiTnYTHLxuZItgHFhiCtezzDQzLfD', obj);
})
},
drawCharts(id, data) {
const ctx = uni.createCanvasContext(id, this);
uChartsInstance[id] = new uCharts({
type: "pie",
context: ctx,
width: this.cWidth,
height: this.cHeight,
series: data.series || [],
animation: true,
timing: "easeOut",
duration: 1000,
rotate: false,
rotateLock: false,
background: "#FFFFFF",
color: ["#c0c1c1", "#c0c1c1", "#c8d6e5", "#31d2d7", "#ecd884", "#7090ff"],
padding: [5, 5, 5, 5],
fontSize: 13,
fontColor: "#666666",
dataLabel: true,
dataPointShape: true,
dataPointShapeType: "solid",
touchMoveLimit: 60,
enableScroll: false,
enableMarkLine: false,
legend: {
show: true,
position: "bottom",
float: "center",
padding: 5,
margin: 5,
backgroundColor: "rgba(0,0,0,0)",
borderColor: "rgba(0,0,0,0)",
borderWidth: 0,
fontSize: 13,
fontColor: "#666666",
lineHeight: 11,
hiddenColor: "#CECECE",
itemGap: 10
},
extra: {
pie: {
activeOpacity: 0.5,
activeRadius: 10,
offsetAngle: 0,
labelWidth: 15,
border: true,
borderWidth: 3,
borderColor: "#FFFFFF",
customRadius: 0,
linearType: "none"
},
tooltip: {
showBox: true,
showArrow: true,
showCategory: false,
borderWidth: 0,
borderRadius: 0,
borderColor: "#000000",
borderOpacity: 0.7,
bgColor: "#000000",
bgOpacity: 0.7,
gridType: "solid",
dashLength: 4,
gridColor: "#CCCCCC",
boxPadding: 3,
fontSize: 13,
lineHeight: 20,
fontColor: "#FFFFFF",
legendShow: true,
legendShape: "auto",
splitLine: true,
horizentalLine: false,
xAxisLabel: false,
yAxisLabel: false,
labelBgColor: "#FFFFFF",
labelBgOpacity: 0.7,
labelFontColor: "#666666"
}
}
});
},
tap(e) {
let self =this;
//格式化ToolTip
uChartsInstance[e.target.id].showToolTip(e, {
formatter: (item, category, index, opts) => {
return item.name + ' ' + item.value + ' ' + self.$t('ENU_TOTAL_V_1') + item.value1
}
});
},
getServerData1() {
setTimeout(() => {
//因部分数据格式一样,这里不同图表引用同一数据源的话,需要深拷贝一下构造不同的对象
//开发者需要自行处理服务器返回的数据应与标准数据格式一致注意series的data数值应为数字格式
this.chartsDataLine1 = JSON.parse(JSON.stringify(demodata.Line))
//数据点格式化示例
//使用format属性指定config-ucharts.js里事先定义好的formatter的key值组件会自动匹配与其对应的function
let columnFormatDemo = JSON.parse(JSON.stringify(demodata.Column))
for (var i = 0; i < columnFormatDemo.series.length; i++) {
columnFormatDemo.series[i].format = "seriesDemo1"
}
this.chartsDataColumn2 = columnFormatDemo
//饼图格式化示例
//使用format属性指定config-ucharts.js里事先定义好的formatter的key值组件会自动匹配与其对应的function
let pieFormatDemo = JSON.parse(JSON.stringify(demodata.PieA))
for (var i = 0; i < pieFormatDemo.series.length; i++) {
pieFormatDemo.series[i].format = "pieDemo"
}
this.chartsDataPie1 = pieFormatDemo
console.log(pieFormatDemo)
}, 1500);
},
}
};
</script>
<style>
page {
background: #ffffff;
}
.content {
display: flex;
flex-direction: column;
flex: 1;
background-color: #ffffff;
min-height: 100vh;
}
.content-picker {
padding: 26rpx 22rpx 26rpx 23rpx;
}
.picker-small {
height: 72rpx;
border: 1rpx solid #EEEEEE;
border-radius: 15rpx;
font-size: 28rpx;
padding: 0 28rpx 0 20rpx;
display: flex;
justify-content: space-between;
align-items: center;
box-sizing: border-box;
}
.charts {
width: 100%;
height: 800rpx;
}
.charts-box {
width: 100%;
height: 300px;
}
</style>