Jelajahi Sumber

修改首页折线图

Zt 1 tahun lalu
induk
melakukan
56d3b195dc

+ 10 - 8
reado-app/components/ecahrts/dataQuery.vue

@@ -1,7 +1,7 @@
 <template>
 	<view class="charts-box">
 		<qiun-data-charts type="line" :eopts="opts" :chartData="chartData" :onzoom="true" :ontouch="true"
-			:echartsH5="true" />
+			:echartsH5="true" tooltipFormat="dataQuery" />
 	</view>
 </template>
 
@@ -22,17 +22,19 @@
 					padding: [15, 10, 0, 15],
 					enableScroll: true,
 					legend: {
-						top:0
+						top: 0
 					},
 					grid: {
 						bottom: '25%'
 					},
 					xAxis: {
-						disableGrid: true,
-						itemCount: 5,
-						scrollShow: true,
-						rotateLabel: true,
-						rotateAngle: -20
+						type: 'category',
+						axisLabel: {
+							textStyle: {
+								color: '#626262',
+								fontSize: '10',
+							}
+						}
 					},
 					yAxis: {
 						gridType: "dash",
@@ -64,7 +66,7 @@
 		methods: {
 			getServerData() {
 				const time = this.serviceTime.map(item => {
-					return item.substring(0, 19)
+					return item.substring(0, 19).replaceAll('-', "")
 				})
 				let res = {
 					categories: time,

+ 136 - 161
reado-app/components/ecahrts/demo.vue

@@ -1,183 +1,158 @@
 <template>
-	<view>
-		<view @click="echarts.onClick" :change:prop="echarts.updateEcharts" id="echarts" class="echarts">
-		</view>
+	<view class="charts-box">
+		<qiun-data-charts ref="lineChart" type="line" :opts="opts" :chartData="chartData" :ontouch="true" canvas2d
+			canvasId="canvasId" :disableScroll="true" :onzoom="true" />
 	</view>
 </template>
 
 <script>
+	import {
+		nowDate,
+		timeToDate
+	} from '../../utils/date.js';
+	import uCharts from '@/uni_modules/qiun-data-charts/js_sdk/u-charts/u-charts.js';
 	export default {
+		props: {
+			echartsData: Object
+		},
 		data() {
-			return {}
+			return {
+				chartData: {},
+				//您可以通过修改 config-ucharts.js 文件中下标为 ['line'] 的节点来配置全局默认参数,如都是默认参数,此处可以不传 opts 。实际应用过程中 opts 只需传入与全局默认参数中不一致的【某一个属性】即可实现同类型的图表显示不同的样式,达到页面简洁的需求。
+				opts: {
+					color: ["#1890FF", "#91CB74", "#FAC858", "#EE6666", "#73C0DE", "#3CA272", "#FC8452", "#9A60B4",
+						"#ea7ccc"
+					],
+					padding: [15, 10, 0, 15],
+					enableScroll: true,
+					legend: {},
+					xAxis: {
+						disableGrid: true,
+						scrollShow: true,
+						itemCount: 2,
+						format:"yAxisDemo1"
+					},
+					yAxis: {
+						gridType: "dash",
+						dashLength: 2
+					},
+					extra: {
+						line: {
+							type: "straight",
+							width: 2,
+							activeType: "hollow"
+						}
+					}
+				},
+				time: [],
+				series: []
+			};
 		},
-		onLoad() {},
-		methods: {
-			onViewClick(options) {
-				console.log(options)
-			}
-		}
-	}
-</script>
-
-<script module="echarts" lang="renderjs">
-	let myChart
-	export default {
 		mounted() {
-			if (typeof window.echarts === 'function') {
-				this.initEcharts()
-			} else {
-				// 动态引入较大类库避免影响页面展示
-				const script = document.createElement('script')
-				// view 层的页面运行在 www 根目录,其相对路径相对于 www 计算
-				script.src = 'static/echarts.min.js'
-				script.onload = this.initEcharts.bind(this)
-				document.head.appendChild(script)
-			}
+			this.getEmit()
 		},
 		methods: {
-			initEcharts() {
-				myChart = echarts.init(document.getElementById('echarts'))
-				// 观测更新的数据在 view 层可以直接访问到
-				var data1 = [];
-				var data2 = [];
-				var data3 = [];
-				var random = function(max) {
-					return (Math.random() * max).toFixed(3);
+			getServerData() {
+				const chartData = this.echartsData.chartItemList
+
+				const timeData = chartData[0].valueTimeList
+				const time = timeData.map(item => {
+					return item.substring(0, 19).replaceAll('-', "")
+				})
+				this.time = time
+				this.series = series
+				const series = chartData.map(item => {
+					return {
+						name: item.describe ? item.describe : item.itemName,
+						data: item.valueList
+					}
+				})
+				let res = {
+					categories: time,
+					series: series
 				};
-				for (var i = 0; i < 500; i++) {
-					data1.push([random(15), random(10), random(1)]);
-					data2.push([random(10), random(10), random(1)]);
-					data3.push([random(15), random(10), random(1)]);
+				this.chartData = JSON.parse(JSON.stringify(res));
+			},
+			getEmit() {
+				const {
+					bucketType,
+					bucketValue
+				} = this.echartsData
+				let time = null
+				switch (bucketType) {
+					case 0:
+						time = 86400000 * bucketValue
+
+						break;
+					case 1:
+						time = 3600000 * bucketValue
+
+						break;
+					case 2:
+						time = 60000 * bucketValue
+
+						break;
+					case 3:
+						time = 1000 * bucketValue
+
+						break;
 				}
-				let option = {
-					animation: false,
-					legend: {
-						data: ['scatter', 'scatter2', 'scatter3']
-					},
-					tooltip: {},
-					xAxis: {
-						type: 'value',
-						min: 'dataMin',
-						max: 'dataMax',
-						splitLine: {
-							show: true
-						},
-						axisLabel: {
-							interval: 60, // 自定义显示X轴坐标显示间隔
-							textStyle: {
-								color: '#626262',
-								fontSize: '10',
-							},
-							formatter:(value, index)=> {
-								console.log(value)
-							    return value + 'kg';
-							}
+				this.getServerData()
+				this.lineTime = setInterval(() => {
+					const currentTime = nowDate();
+					let lastTime;
+					uni.getStorage({
+						key: 'sTime',
+						success: (o) => {
+							lastTime = o.data;
 						}
-					},
-					yAxis: {
-						type: 'value',
-						min: 'dataMin',
-						max: 'dataMax',
-						splitLine: {
-							show: true
-						}
-					},
-					dataZoom: [{
-							type: 'slider',
-							show: true,
-							xAxisIndex: [0],
-							start: 1,
-							end: 35
-						},
-						{
-							type: 'slider',
-							show: true,
-							yAxisIndex: [0],
-							left: '93%',
-							start: 29,
-							end: 36
-						},
-						{
-							type: 'inside',
-							xAxisIndex: [0],
-							start: 1,
-							end: 35
-						},
-						{
-							type: 'inside',
-							yAxisIndex: [0],
-							start: 29,
-							end: 36
-						}
-					],
-					series: [{
-							name: 'scatter',
-							type: 'scatter',
-							itemStyle: {
-								normal: {
-									opacity: 0.8
-								}
-							},
-							symbolSize: function(val) {
-								return val[2] * 40;
-							},
-							data: data1
-						},
-						{
-							name: 'scatter2',
-							type: 'scatter',
-							itemStyle: {
-								normal: {
-									opacity: 0.8
+					})
+					let chartParams = {
+						id: this.echartsData.id,
+						startTime: lastTime,
+						endTime: currentTime
+					}
+					uni.setStorage({
+						key: 'sTime',
+						data: currentTime
+					})
+					uni.$http.get('/chart/getChartById', chartParams).then(res => {
+						let chartItemList = res.data.data.chartItemList;
+						chartItemList.forEach((item, index) => {
+							if (item.itemId === this.echartsData.chartItemList[index].itemId) {
+								if (item.valueList.length !== 0) {
+									//执行将新数据添加进去,旧数据去除一个
+									this.echartsData.chartItemList[index].valueList.push(...item
+										.valueList)
+									this.echartsData.chartItemList[index].valueList.splice(0, item
+										.valueList.length)
+									// this.echartsData.chartItemList[index].valueList.slice(item
+									// 	.valueList.length, this.echartsData.chartItemList[
+									// 		index].valueList.length)
+									this.echartsData.chartItemList[index].valueTimeList.push(...
+										item
+										.valueTimeList)
+									this.echartsData.chartItemList[index].valueTimeList.splice(0,
+										item
+										.valueTimeList.length)
+									// this.echartsData.chartItemList[index].valueTimeList.slice(
+									// 	item
+									// 	.valueTimeList.length, this.echartsData.chartItemList[
+									// 		index].valueTimeList.length)
 								}
-							},
-							symbolSize: function(val) {
-								return val[2] * 40;
-							},
-							data: data2
-						},
-						{
-							name: 'scatter3',
-							type: 'scatter',
-							itemStyle: {
-								normal: {
-									opacity: 0.8
-								}
-							},
-							symbolSize: function(val) {
-								return val[2] * 40;
-							},
-							data: data3
-						}
-					]
-				}
-				myChart.setOption(option)
-			},
-			updateEcharts(newValue, oldValue, ownerInstance, instance) {
-				// 监听 service 层数据变更
-				myChart.setOption(newValue)
-			},
-			onClick(event, ownerInstance) {
-				// 调用 service 层的方法
-				ownerInstance.callMethod('onViewClick', {
-					test: 'test'
-				})
+							}
+						})
+					})
+				}, time)
 			}
 		}
-	}
+	};
 </script>
 
-<style>
-	.content {
-		display: flex;
-		flex-direction: column;
-		align-items: center;
-		justify-content: center;
-	}
-
-	.echarts {
-		margin-top: 100px;
+<style scoped>
+	/* 请根据实际需求修改父元素尺寸,组件自动识别宽高 */
+	.charts-box {
 		width: 100%;
-		height: 300px;
+		height: 540rpx;
 	}
 </style>

File diff ditekan karena terlalu besar
+ 0 - 34
reado-app/components/ecahrts/echarts.min.js


+ 12 - 12
reado-app/node_modules/.package-lock.json

@@ -18,12 +18,12 @@
       }
     },
     "node_modules/echarts": {
-      "version": "5.4.3",
-      "resolved": "https://registry.npmmirror.com/echarts/-/echarts-5.4.3.tgz",
-      "integrity": "sha512-mYKxLxhzy6zyTi/FaEbJMOZU1ULGEQHaeIeuMR5L+JnJTpz+YR03mnnpBhbR4+UYJAgiXgpyTVLffPAjOTLkZA==",
+      "version": "5.1.2",
+      "resolved": "https://registry.npmmirror.com/echarts/-/echarts-5.1.2.tgz",
+      "integrity": "sha512-okUhO4sw22vwZp+rTPNjd/bvTdpug4K4sHNHyrV8NdAncIX9/AarlolFqtJCAYKGFYhUBNjIWu1EznFrSWTFxg==",
       "dependencies": {
-        "tslib": "2.3.0",
-        "zrender": "5.4.4"
+        "tslib": "2.0.3",
+        "zrender": "5.1.1"
       }
     },
     "node_modules/jsencrypt": {
@@ -43,9 +43,9 @@
       "deprecated": "older versions vulnerable to prototype pollution"
     },
     "node_modules/tslib": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz",
-      "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg=="
+      "version": "2.0.3",
+      "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.0.3.tgz",
+      "integrity": "sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ=="
     },
     "node_modules/vuex-persistedstate": {
       "version": "4.1.0",
@@ -61,11 +61,11 @@
       }
     },
     "node_modules/zrender": {
-      "version": "5.4.4",
-      "resolved": "https://registry.npmmirror.com/zrender/-/zrender-5.4.4.tgz",
-      "integrity": "sha512-0VxCNJ7AGOMCWeHVyTrGzUgrK4asT4ml9PEkeGirAkKNYXYzoPJCLvmyfdoOXcjTHPs10OZVMfD1Rwg16AZyYw==",
+      "version": "5.1.1",
+      "resolved": "https://registry.npmmirror.com/zrender/-/zrender-5.1.1.tgz",
+      "integrity": "sha512-oeWlmUZPQdS9f5hK4pV21tHPqA3wgQ7CkKkw7l0CCBgWlJ/FP+lRgLFtUBW6yam4JX8y9CdHJo1o587VVrbcoQ==",
       "dependencies": {
-        "tslib": "2.3.0"
+        "tslib": "2.0.3"
       }
     }
   }

+ 25 - 25
reado-app/package-lock.json

@@ -10,7 +10,7 @@
       "license": "ISC",
       "dependencies": {
         "@escook/request-miniprogram": "^0.2.1",
-        "echarts": "^5.4.3",
+        "echarts": "5.1",
         "jsencrypt": "^3.3.1",
         "mpvue-echarts": "^0.3.2",
         "vuex-persistedstate": "^4.1.0"
@@ -30,12 +30,12 @@
       }
     },
     "node_modules/echarts": {
-      "version": "5.4.3",
-      "resolved": "https://registry.npmmirror.com/echarts/-/echarts-5.4.3.tgz",
-      "integrity": "sha512-mYKxLxhzy6zyTi/FaEbJMOZU1ULGEQHaeIeuMR5L+JnJTpz+YR03mnnpBhbR4+UYJAgiXgpyTVLffPAjOTLkZA==",
+      "version": "5.1.2",
+      "resolved": "https://registry.npmmirror.com/echarts/-/echarts-5.1.2.tgz",
+      "integrity": "sha512-okUhO4sw22vwZp+rTPNjd/bvTdpug4K4sHNHyrV8NdAncIX9/AarlolFqtJCAYKGFYhUBNjIWu1EznFrSWTFxg==",
       "dependencies": {
-        "tslib": "2.3.0",
-        "zrender": "5.4.4"
+        "tslib": "2.0.3",
+        "zrender": "5.1.1"
       }
     },
     "node_modules/jsencrypt": {
@@ -55,9 +55,9 @@
       "deprecated": "older versions vulnerable to prototype pollution"
     },
     "node_modules/tslib": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz",
-      "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg=="
+      "version": "2.0.3",
+      "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.0.3.tgz",
+      "integrity": "sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ=="
     },
     "node_modules/vuex-persistedstate": {
       "version": "4.1.0",
@@ -73,11 +73,11 @@
       }
     },
     "node_modules/zrender": {
-      "version": "5.4.4",
-      "resolved": "https://registry.npmmirror.com/zrender/-/zrender-5.4.4.tgz",
-      "integrity": "sha512-0VxCNJ7AGOMCWeHVyTrGzUgrK4asT4ml9PEkeGirAkKNYXYzoPJCLvmyfdoOXcjTHPs10OZVMfD1Rwg16AZyYw==",
+      "version": "5.1.1",
+      "resolved": "https://registry.npmmirror.com/zrender/-/zrender-5.1.1.tgz",
+      "integrity": "sha512-oeWlmUZPQdS9f5hK4pV21tHPqA3wgQ7CkKkw7l0CCBgWlJ/FP+lRgLFtUBW6yam4JX8y9CdHJo1o587VVrbcoQ==",
       "dependencies": {
-        "tslib": "2.3.0"
+        "tslib": "2.0.3"
       }
     }
   },
@@ -93,12 +93,12 @@
       "integrity": "sha512-z2wJZXrmeHdvYJp/Ux55wIjqo81G5Bp4c+oELTW+7ar6SogWHajt5a9gO3s3IDaGSAXjDk0vlQKN3rms8ab3og=="
     },
     "echarts": {
-      "version": "5.4.3",
-      "resolved": "https://registry.npmmirror.com/echarts/-/echarts-5.4.3.tgz",
-      "integrity": "sha512-mYKxLxhzy6zyTi/FaEbJMOZU1ULGEQHaeIeuMR5L+JnJTpz+YR03mnnpBhbR4+UYJAgiXgpyTVLffPAjOTLkZA==",
+      "version": "5.1.2",
+      "resolved": "https://registry.npmmirror.com/echarts/-/echarts-5.1.2.tgz",
+      "integrity": "sha512-okUhO4sw22vwZp+rTPNjd/bvTdpug4K4sHNHyrV8NdAncIX9/AarlolFqtJCAYKGFYhUBNjIWu1EznFrSWTFxg==",
       "requires": {
-        "tslib": "2.3.0",
-        "zrender": "5.4.4"
+        "tslib": "2.0.3",
+        "zrender": "5.1.1"
       }
     },
     "jsencrypt": {
@@ -117,9 +117,9 @@
       "integrity": "sha512-V7C6S9Hlol6SzOJPnQ7qzOVEWUQImt3BNmmzh40wObhla3XOYMe4gGiYzLrJd5TFa+cI2f9LKIRJTTKZSTbWgw=="
     },
     "tslib": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz",
-      "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg=="
+      "version": "2.0.3",
+      "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.0.3.tgz",
+      "integrity": "sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ=="
     },
     "vuex-persistedstate": {
       "version": "4.1.0",
@@ -131,11 +131,11 @@
       }
     },
     "zrender": {
-      "version": "5.4.4",
-      "resolved": "https://registry.npmmirror.com/zrender/-/zrender-5.4.4.tgz",
-      "integrity": "sha512-0VxCNJ7AGOMCWeHVyTrGzUgrK4asT4ml9PEkeGirAkKNYXYzoPJCLvmyfdoOXcjTHPs10OZVMfD1Rwg16AZyYw==",
+      "version": "5.1.1",
+      "resolved": "https://registry.npmmirror.com/zrender/-/zrender-5.1.1.tgz",
+      "integrity": "sha512-oeWlmUZPQdS9f5hK4pV21tHPqA3wgQ7CkKkw7l0CCBgWlJ/FP+lRgLFtUBW6yam4JX8y9CdHJo1o587VVrbcoQ==",
       "requires": {
-        "tslib": "2.3.0"
+        "tslib": "2.0.3"
       }
     }
   }

+ 1 - 1
reado-app/package.json

@@ -11,7 +11,7 @@
   "license": "ISC",
   "dependencies": {
     "@escook/request-miniprogram": "^0.2.1",
-    "echarts": "^5.4.3",
+    "echarts": "5.1",
     "jsencrypt": "^3.3.1",
     "mpvue-echarts": "^0.3.2",
     "vuex-persistedstate": "^4.1.0"

+ 8 - 5
reado-app/pages/homePage/index.vue

@@ -23,23 +23,24 @@
 					<view class="title" v-if="echartsData.length">
 						{{item.chartName}}
 					</view>
-					<pieEcharts :echartsData="item" @piePolling="piePolling" />
+					<pieEcharts :echartsData="item" />
 				</view>
 				<view v-if="item.chartType==='bar'">
 					<view class="title" v-if="echartsData.length">
 						{{item.chartName}}
 					</view>
-					<barEcharts :echartsData="item" @barPolling="barPolling" />
+					<barEcharts :echartsData="item" />
 				</view>
 				<view v-if="item.chartType==='line'">
 					<view class="title" v-if="echartsData.length">
 						{{item.chartName}}
 					</view>
-					<lineEcharts :echartsData="item" @linePolling="linePolling" />
+					<!-- <lineEcharts :echartsData="item" /> -->
+					<demo :echartsData="item" />
 				</view>
 			</view>
 		</template>
-		<!-- <demo/> -->
+        <!-- <demo1/> -->
 		<u-empty text="暂无数据" icon="../../static/data.png" v-if="!echartsData.length"></u-empty>
 	</view>
 </template>
@@ -49,6 +50,7 @@
 	import pieEcharts from '../../components/ecahrts/pie-echarts.vue'
 	import barEcharts from '../../components/ecahrts/bar-echarts.vue'
 	import demo from '../../components/ecahrts/demo.vue'
+	import demo1 from '../../components/ecahrts/demo1.vue'
 	import {
 		nowDate,
 		timeToDate,
@@ -61,7 +63,8 @@
 			lineEcharts,
 			pieEcharts,
 			barEcharts,
-			demo
+			demo,
+			demo1
 		},
 		data() {
 			return {

+ 21 - 1
reado-app/uni_modules/qiun-data-charts/js_sdk/u-charts/config-echarts.js

@@ -59,6 +59,26 @@ const cfe = {
 		},
 		seriesFormatDemo: function(res) {
 			return res.name + '年' + res.value + '元';
+		},
+		"dataQuery":function(params){
+			let result = ''
+			for (let i in params) {
+				if (i == 0) {
+					result += params[i].axisValueLabel.substring(9, 17)
+				}
+				let value = '--'
+				if (params[i].data !== null) {
+					value = params[i].data
+				}
+				// #ifdef H5
+				result += '\n' + params[i].seriesName + ':' + value
+				// #endif
+			
+				// #ifdef APP-PLUS
+				result += '<br/>' + params[i].marker + params[i].seriesName + ':' + value
+				// #endif
+			}
+			return result;
 		}
 	},
 	//这里演示了自定义您的图表类型的option,可以随意命名,之后在组件上 type="demotype" 后,组件会调用这个花括号里的option,如果组件上还存在eopts参数,会将demotype与eopts中option合并后渲染图表。
@@ -183,7 +203,7 @@ const cfe = {
 			"data": [],
 			"barwidth": 20,
 			"label": {
-				"show": true,
+				"show": false,
 				"color": "#666666",
 				"position": 'top',
 			},

+ 1 - 1
reado-app/uni_modules/qiun-data-charts/js_sdk/u-charts/config-ucharts.js

@@ -67,7 +67,7 @@ const cfu = {
 	//下面是自定义format配置,因除H5端外的其他端无法通过props传递函数,只能通过此属性对应下标的方式来替换
 	"formatter": {
 		"yAxisDemo1": function(val, index, opts) {
-			return val + '元'
+			return val.substring(0, 9)
 		},
 		"yAxisDemo2": function(val, index, opts) {
 			return val.toFixed(2)

Beberapa file tidak ditampilkan karena terlalu banyak file yang berubah dalam diff ini