123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165 |
- <template>
- <canvas v-if="canvasId" :id="canvasId" :canvasId="canvasId" :style="{'width':cWidth*pixelRatio+'px','height':cHeight*pixelRatio+'px', 'transform': 'scale('+(1/pixelRatio)+')','margin-left':-cWidth*(pixelRatio-1)/2+'px','margin-top':-cHeight*(pixelRatio-1)/2+'px'}"
- @touchstart="touchStart" @touchmove="touchMove" @touchend="touchEnd" @error="error">
- </canvas>
- </template>
- <script>
- import uCharts from './u-charts.js';
- var canvases = {};
-
- export default {
- props: {
- chartType: {
- required: true,
- type: String,
- default: 'column'
- },
- opts: {
- required: true,
- type: Object,
- default () {
- return null;
- },
- },
- canvasId: {
- type: String,
- default: 'u-canvas',
- },
- cWidth: {
- default: 375,
- },
- cHeight: {
- default: 250,
- },
- pixelRatio: {
- type: Number,
- default: 1,
- },
- },
- mounted() {
- this.init();
- },
- methods: {
- init() {
- switch (this.chartType) {
- case 'column':
- this.initColumnChart();
- break;
- case 'line':
- this.initLineChart();
- break;
- default:
- break;
- }
- },
- initColumnChart() {
- canvases[this.canvasId] = new uCharts({
- $this: this,
- canvasId: this.canvasId,
- type: 'column',
- legend: true,
- fontSize: 11,
- background: '#FFFFFF',
- pixelRatio: this.pixelRatio,
- animation: true,
- categories: this.opts.categories,
- series: this.opts.series,
- enableScroll: true,
- xAxis: {
- disableGrid: true,
- itemCount: 4,
- scrollShow: true
- },
- yAxis: {
- //disabled:true
- },
- dataLabel: true,
- width: this.cWidth * this.pixelRatio,
- height: this.cHeight * this.pixelRatio,
- extra: {
- column: {
- type: 'group',
- }
- }
- });
- },
- initLineChart() {
- canvases[this.canvasId] = new uCharts({
- $this: this,
- canvasId: this.canvasId,
- type: 'line',
- fontSize: 11,
- legend: true,
- dataLabel: false,
- dataPointShape: true,
- background: '#FFFFFF',
- pixelRatio: this.pixelRatio,
- categories: this.opts.categories,
- series: this.opts.series,
- animation: true,
- enableScroll: true,
- xAxis: {
- type: 'grid',
- gridColor: '#CCCCCC',
- gridType: 'dash',
- dashLength: 8,
- itemCount: 4,
- scrollShow: true
- },
- yAxis: {
- gridType: 'dash',
- gridColor: '#CCCCCC',
- dashLength: 8,
- splitNumber: 5,
- min: 10,
- max: 180,
- format: (val) => {
- return val.toFixed(0) + '次'
- }
- },
- width: this.cWidth * this.pixelRatio,
- height: this.cHeight * this.pixelRatio,
- extra: {
- line: {
- type: 'straight'
- }
- }
- });
- },
- // 这里仅作为示例传入两个参数,cid为canvas-id,newdata为更新的数据,需要更多参数请自行修改
- changeData(cid,newdata) {
- canvases[cid].updateData({
- series: newdata.series,
- categories: newdata.categories
- });
- },
- touchStart(e) {
- canvases[this.canvasId].showToolTip(e, {
- format: function(item, category) {
- return category + ' ' + item.name + ':' + item.data
- }
- });
- canvases[this.canvasId].scrollStart(e);
- },
- touchMove(e) {
- canvases[this.canvasId].scroll(e);
- },
- touchEnd(e) {
- canvases[this.canvasId].scrollEnd(e);
- },
- error(e) {
- console.log(e)
- }
- },
- };
- </script>
- <style scoped>
- .charts {
- width: 100%;
- height: 100%;
- flex: 1;
- background-color: #FFFFFF;
- }
- </style>
|