204 lines
5.6 KiB
Vue
204 lines
5.6 KiB
Vue
<template>
|
||
<view class="qiun-columns">
|
||
<!--#ifdef H5 -->
|
||
<view class="qiun-bg-white qiun-title-bar qiun-common-mt">
|
||
<view class="qiun-title-dot-light">页面地址</view>
|
||
</view>
|
||
<view class="qiun-bg-white qiun-padding">
|
||
<text>pages/basic/area/time</text>
|
||
</view>
|
||
<!--#endif-->
|
||
<view class="qiun-bg-white qiun-title-bar qiun-common-mt">
|
||
<view class="qiun-title-dot-light">单量</view>
|
||
</view>
|
||
<view class="qiun-charts">
|
||
<!--#ifdef MP-ALIPAY -->
|
||
<canvas canvas-id="canvasLineA" id="canvasLineA" class="charts" :width="cWidth*pixelRatio" :height="cHeight*pixelRatio"
|
||
:style="{'width':cWidth+'px','height':cHeight+'px'}" @touchstart="touchLineA"></canvas>
|
||
<!--#endif-->
|
||
<!--#ifndef MP-ALIPAY -->
|
||
<canvas canvas-id="canvasLineA" id="canvasLineA" class="charts" @touchstart="touchLineA"></canvas>
|
||
<!--#endif-->
|
||
</view>
|
||
<!--#ifdef H5 -->
|
||
<view class="qiun-bg-white qiun-title-bar qiun-common-mt">
|
||
<view class="qiun-title-dot-light">标准数据格式</view>
|
||
</view>
|
||
<view class="qiun-bg-white qiun-padding">
|
||
<textarea class="qiun-textarea" auto-height="true" maxlength="-1" v-model="textarea" />
|
||
</view>
|
||
<view class="qiun-text-tips">Tips:修改后点击更新图表</view>
|
||
<button class="qiun-button" @tap="changeData()">更新图表</button>
|
||
<!--#endif-->
|
||
</view>
|
||
</template>
|
||
|
||
<script>
|
||
import uCharts from './common/u-charts/u-charts.js';
|
||
import { isJSON } from './common/checker.js';
|
||
|
||
var _self;
|
||
var canvaLineA = null;
|
||
export default {
|
||
props: {
|
||
chartData: {
|
||
type: Array,
|
||
default(){}
|
||
}
|
||
},
|
||
|
||
data() {
|
||
return {
|
||
cWidth: '',
|
||
cHeight: '',
|
||
pixelRatio: 1,
|
||
textarea: ''
|
||
}
|
||
},
|
||
created() {
|
||
console.log(this.chartData)
|
||
_self = this;
|
||
//#ifdef MP-ALIPAY
|
||
uni.getSystemInfo({
|
||
success: function (res) {
|
||
if (res.pixelRatio > 1) {
|
||
//正常这里给2就行,如果pixelRatio=3性能会降低一点
|
||
//_self.pixelRatio =res.pixelRatio;
|
||
_self.pixelRatio = 2;
|
||
}
|
||
}
|
||
});
|
||
//#endif
|
||
this.cWidth = uni.upx2px(650);
|
||
this.cHeight = uni.upx2px(500);
|
||
console.log('chartData', this.chartData)
|
||
},
|
||
watch: {
|
||
chartData: {
|
||
handler(newVal, oldVal) {
|
||
console.log('深度监听', newVal, oldVal)
|
||
console.log(newVal)
|
||
this.chartData = newVal
|
||
this.getServerData()
|
||
},
|
||
deep: true
|
||
}
|
||
},
|
||
methods: {
|
||
getServerData() {
|
||
if (this.chartData) {
|
||
let LineA = {
|
||
series: [{
|
||
name: '交易时段分布', data: this.chartData
|
||
}]
|
||
}
|
||
_self.textarea = JSON.stringify(LineA);
|
||
console.log('-----------------------')
|
||
console.log('_self.textarea', _self.textarea)
|
||
console.log('LineA', LineA)
|
||
console.log('-----------------------')
|
||
_self.showLineA("canvasLineA", LineA);
|
||
}
|
||
},
|
||
formatDateTime(timeStr) {
|
||
console.log('-----------------------')
|
||
console.log('timeStr', timeStr)
|
||
console.log('-----------------------')
|
||
return (timeStr > 0 ? timeStr.toFixed(0) : 0) + ':00'
|
||
},
|
||
showLineA(canvasId, chartData) {
|
||
canvaLineA = new uCharts({
|
||
$this: _self,
|
||
canvasId: canvasId,
|
||
type: 'area',
|
||
fontSize: 11,
|
||
padding: [15, 20, 0, 15],
|
||
legend: false,
|
||
dataLabel: true,
|
||
dataPointShape: true,
|
||
background: '#FFFFFF',
|
||
pixelRatio: _self.pixelRatio,
|
||
// categories: chartData.categories,
|
||
series: chartData.series,
|
||
animation: true,
|
||
xAxis: {
|
||
type: 'grid',
|
||
gridColor: '#CCCCCC',
|
||
gridType: 'dash',
|
||
dashLength: 8,
|
||
boundaryGap: 'justify',
|
||
splitNumber: 5,
|
||
scrollShow:true,//新增是否显示滚动条,默认false
|
||
scrollAlign:'left',//滚动条初始位置
|
||
scrollBackgroundColor:'#F7F7FF',//默认为 #EFEBEF
|
||
scrollColor:'#DEE7F7',//默认为 #A6A6A6
|
||
format: (val) => {
|
||
console.log('xAxis', val)
|
||
// console.log('----', val, '-----')
|
||
// console.log('----', this.formatDateTime(val, 'str'), '-----')
|
||
return this.formatDateTime(val) }
|
||
},
|
||
yAxis: {
|
||
gridType: 'dash',
|
||
gridColor: '#CCCCCC',
|
||
dashLength: 8,
|
||
splitNumber: 5,
|
||
format: (val) => {
|
||
console.log('yAxis', val)
|
||
return val + '单' }
|
||
},
|
||
width: _self.cWidth * _self.pixelRatio,
|
||
height: _self.cHeight * _self.pixelRatio,
|
||
extra: {
|
||
area: {
|
||
type: 'curve',
|
||
addLine: true,
|
||
gradient: true
|
||
}
|
||
}
|
||
});
|
||
|
||
},
|
||
touchLineA(e) {
|
||
console.log( 'istouchLineA ',e)
|
||
var that = this
|
||
canvaLineA.showToolTip(e, {
|
||
format: function (item, category) {
|
||
console.log(' item.data', item.data)
|
||
return (item.data[0] + ':00 ') + item.data[1] + '单 ' + '交易金额' + item.data[2] + '元'
|
||
}
|
||
});
|
||
},
|
||
changeData() {
|
||
if (isJSON(_self.textarea)) {
|
||
let newdata = JSON.parse(_self.textarea);
|
||
canvaLineA.updateData({
|
||
series: newdata.series,
|
||
categories: newdata.categories
|
||
});
|
||
} else {
|
||
uni.showToast({
|
||
title: '数据格式错误',
|
||
image: '../../../static/images/alert-warning.png'
|
||
})
|
||
}
|
||
}
|
||
}
|
||
}
|
||
</script>
|
||
|
||
<style scoped>
|
||
/*样式的width和height一定要与定义的cWidth和cHeight相对应*/
|
||
.qiun-charts {
|
||
width: 640upx;
|
||
height: 500rpx;
|
||
background-color: #ffffff;
|
||
}
|
||
|
||
.charts {
|
||
width: 640upx;
|
||
height: 500rpx;
|
||
background-color: #ffffff;
|
||
}
|
||
</style>
|