lineChart.js 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603
  1. // pages/lineChart/lineChart.js
  2. import * as echarts from '../../components/ec-canvas/echarts.min'
  3. var app = getApp();
  4. Page({
  5. /**
  6. * 页面的初始数据
  7. */
  8. data: {
  9. option1: [], //下拉菜单选项
  10. value1: 0, //下拉菜单默认选中项
  11. screenHeight: '', //屏幕可视高度
  12. areaID: '', //区域id
  13. user: {
  14. lazyLoad: true // 延迟加载
  15. },
  16. order: {
  17. lazyLoad: true // 延迟加载
  18. },
  19. userDate: '',
  20. userData: '',
  21. newOrderChartData: {},
  22. earningsChartData: {},
  23. dayOrderChartData: {},
  24. earnShow: false,
  25. },
  26. /**
  27. * 生命周期函数--监听页面加载
  28. */
  29. onLoad: function (options) {
  30. console.log(wx.getStorageSync('areaID'))
  31. var that = this;
  32. that.setData({
  33. screenHeight: app.globalData.screenHeight,
  34. option1: wx.getStorageSync('allArea'),
  35. option3: wx.getStorageSync('allState')
  36. })
  37. console.log(that.data.option1)
  38. let curVal = wx.getStorageSync('curVal')
  39. console.log(curVal, 'log_curVal')
  40. if (curVal) {
  41. that.setData({
  42. value1: curVal
  43. })
  44. }
  45. let areaID = wx.getStorageSync('curId')
  46. console.log(areaID, 'log_areaID')
  47. if (areaID) {
  48. that.setData({
  49. areaID
  50. })
  51. } else {
  52. let id = that.data.option1[0].areaID
  53. that.setData({
  54. areaID: id
  55. })
  56. }
  57. that.menu = that.selectComponent("#menu");
  58. that.menu.changeTitle(that.data.option1[that.data.value1].text);
  59. that.getData();
  60. },
  61. back() {
  62. wx.navigateBack({
  63. delta: 1
  64. })
  65. },
  66. change(e) {
  67. let that = this;
  68. wx.setStorageSync('curVal', that.data.option1[e.detail].value)
  69. wx.setStorageSync('curId', that.data.option1[e.detail].areaID)
  70. this.setData({
  71. areaID: that.data.option1[e.detail].areaID
  72. })
  73. this.getData();
  74. },
  75. userInit: function () {
  76. this.userEcharts = this.selectComponent('#userChart');
  77. this.userEcharts.init((canvas, width, height, dpr) => {
  78. // 初始化图表
  79. const Chart = echarts.init(canvas, null, {
  80. width: width,
  81. height: height,
  82. devicePixelRatio: dpr //解决小程序视图模糊的问题,必写
  83. });
  84. Chart.setOption(this.userOption());
  85. // 注意这里一定要返回 chart 实例,否则会影响事件处理等
  86. return Chart;
  87. });
  88. },
  89. orderInit: function () {
  90. this.orderEcharts = this.selectComponent('#orderChart');
  91. this.orderEcharts.init((canvas, width, height, dpr) => {
  92. // 初始化图表
  93. const Chart = echarts.init(canvas, 'light', {
  94. width: width,
  95. height: height,
  96. devicePixelRatio: dpr //解决小程序视图模糊的问题,必写
  97. });
  98. Chart.setOption(this.orderOption());
  99. // 注意这里一定要返回 chart 实例,否则会影响事件处理等
  100. return Chart;
  101. });
  102. },
  103. dayOrderInit: function () {
  104. this.orderEcharts = this.selectComponent('#dayOrderChart');
  105. this.orderEcharts.init((canvas, width, height, dpr) => {
  106. // 初始化图表
  107. const Chart = echarts.init(canvas, 'light', {
  108. width: width,
  109. height: height,
  110. devicePixelRatio: dpr //解决小程序视图模糊的问题,必写
  111. });
  112. Chart.setOption(this.dayOrderOption());
  113. // 注意这里一定要返回 chart 实例,否则会影响事件处理等
  114. return Chart;
  115. });
  116. },
  117. earningsInit: function () {
  118. this.earningsChart = this.selectComponent('#earningsChart');
  119. this.earningsChart.init((canvas, width, height, dpr) => {
  120. // 初始化图表
  121. const Chart = echarts.init(canvas, 'light', {
  122. width: width,
  123. height: height,
  124. devicePixelRatio: dpr //解决小程序视图模糊的问题,必写
  125. });
  126. Chart.setOption(this.earningsOption());
  127. // 注意这里一定要返回 chart 实例,否则会影响事件处理等
  128. return Chart;
  129. });
  130. },
  131. getData() {
  132. wx.showLoading({
  133. title: '加载中...',
  134. })
  135. let data = {
  136. area_id: this.data.areaID,
  137. days: 'thirtyDays'
  138. }
  139. app.request('user/newUsersChart', data, 'GET').then(res => {
  140. console.log(res)
  141. var user = res.data;
  142. var userDate = [];
  143. var userData = [];
  144. user.map(i => {
  145. userDate.push(i.date)
  146. userData.push(i.value)
  147. })
  148. this.setData({
  149. userDate,
  150. userData
  151. })
  152. this.userInit();
  153. })
  154. app.request('order/newOrderChart', data, 'GET').then(res => {
  155. console.log(res.data, '订单')
  156. let order = res.data;
  157. let newOrderChartData = {
  158. expectedData: {
  159. data: [],
  160. date: [],
  161. legendData: [],
  162. }
  163. }
  164. order.map(i => {
  165. newOrderChartData.expectedData.legendData.push(i.name)
  166. let arr = []
  167. let date = []
  168. i.data.map(e => {
  169. arr.push(e.value)
  170. date.push(e.date)
  171. })
  172. newOrderChartData.expectedData.data.push(arr)
  173. newOrderChartData.expectedData.date = date
  174. })
  175. this.setData({
  176. newOrderChartData
  177. })
  178. this.orderInit();
  179. })
  180. app.request('order/profitChart', data, 'GET').then(res => {
  181. console.log(res.data, '收益')
  182. let earnings = res.data;
  183. if (earnings.length > 0) {
  184. console.log(1111)
  185. this.setData({
  186. earnShow: true
  187. })
  188. let earningsChartData = {
  189. expectedData: {
  190. data: [],
  191. date: [],
  192. legendData: [],
  193. }
  194. }
  195. earnings.map(i => {
  196. earningsChartData.expectedData.legendData.push(i.name)
  197. let arr = []
  198. let date = []
  199. i.data.map(e => {
  200. arr.push(e.value)
  201. date.push(e.date)
  202. })
  203. earningsChartData.expectedData.data.push(arr)
  204. earningsChartData.expectedData.date = date
  205. })
  206. this.setData({
  207. earningsChartData
  208. })
  209. this.earningsInit();
  210. }
  211. })
  212. let day = {
  213. area_id: this.data.areaID,
  214. }
  215. app.request('order/hourOrderNumber', day, 'GET').then(res => {
  216. if (res.statusCode == 200) {
  217. console.log(res, '测试')
  218. let dayOrderChart = res.data;
  219. let dayOrderChartData = {
  220. expectedData: {
  221. data: [],
  222. date: [],
  223. legendData: [],
  224. }
  225. }
  226. dayOrderChartData.expectedData.data = dayOrderChart.data
  227. dayOrderChartData.expectedData.date = dayOrderChart.date
  228. this.setData({
  229. dayOrderChartData
  230. })
  231. this.dayOrderInit();
  232. }
  233. })
  234. wx.hideLoading();
  235. },
  236. userOption() {
  237. let that = this;
  238. var option = {
  239. xAxis: {
  240. data: that.data.userDate,
  241. boundaryGap: false,
  242. axisTick: {
  243. show: false,
  244. },
  245. axisLabel: {
  246. rotate: 60,
  247. },
  248. axisLine: {
  249. lineStyle: {
  250. color: '#409EFF'
  251. }
  252. }
  253. },
  254. grid: {
  255. left: 10,
  256. right: 10,
  257. bottom: 20,
  258. top: 30,
  259. containLabel: true,
  260. },
  261. tooltip: {
  262. trigger: 'axis',
  263. axisPointer: {
  264. type: 'cross',
  265. },
  266. padding: [5, 10],
  267. },
  268. yAxis: {
  269. axisTick: {
  270. show: false,
  271. },
  272. axisLine: {
  273. lineStyle: {
  274. color: '#409EFF'
  275. }
  276. }
  277. },
  278. legend: {
  279. data: ['expected'],
  280. },
  281. series: [{
  282. name: '每日新增',
  283. itemStyle: {
  284. normal: {
  285. color: '#FF005A',
  286. lineStyle: {
  287. color: '#FF005A',
  288. width: 2,
  289. },
  290. },
  291. },
  292. smooth: true,
  293. type: 'line',
  294. data: that.data.userData,
  295. animationDuration: 2800,
  296. animationEasing: 'cubicInOut',
  297. }],
  298. };
  299. return option;
  300. },
  301. orderOption() {
  302. let that = this;
  303. var expectedData = that.data.newOrderChartData.expectedData
  304. let seriesDatas = []
  305. expectedData.data.map((i, index) => {
  306. seriesDatas.push({
  307. name: expectedData.legendData[index],
  308. type: 'line',
  309. smooth: true,
  310. animationDuration: 2800,
  311. animationEasing: 'cubicInOut',
  312. data: i,
  313. })
  314. })
  315. var option = {
  316. xAxis: {
  317. data: expectedData.date,
  318. boundaryGap: false,
  319. axisTick: {
  320. show: false,
  321. },
  322. axisLabel: {
  323. rotate: 60,
  324. },
  325. axisLine: {
  326. lineStyle: {
  327. color: '#409EFF'
  328. }
  329. }
  330. },
  331. grid: {
  332. left: '2%',
  333. right: 10,
  334. bottom: 20,
  335. top: 30,
  336. containLabel: true,
  337. },
  338. tooltip: {
  339. trigger: 'axis',
  340. axisPointer: {
  341. type: 'cross',
  342. },
  343. padding: [5, 10],
  344. },
  345. yAxis: {
  346. axisTick: {
  347. show: false,
  348. },
  349. axisLine: {
  350. lineStyle: {
  351. color: '#409EFF'
  352. }
  353. }
  354. },
  355. legend: {
  356. data: expectedData.legendData,
  357. },
  358. series: seriesDatas,
  359. }
  360. return option;
  361. },
  362. earningsOption() {
  363. let that = this;
  364. var earningsData = that.data.earningsChartData.expectedData
  365. let seriesDatas = []
  366. earningsData.data.map((i, index) => {
  367. seriesDatas.push({
  368. name: earningsData.legendData[index],
  369. type: 'line',
  370. smooth: true,
  371. animationDuration: 2800,
  372. animationEasing: 'cubicInOut',
  373. data: i,
  374. })
  375. })
  376. var option = {
  377. xAxis: {
  378. data: earningsData.date,
  379. boundaryGap: false,
  380. axisTick: {
  381. show: false,
  382. },
  383. axisLabel: {
  384. rotate: 60,
  385. },
  386. axisLine: {
  387. lineStyle: {
  388. color: '#409EFF'
  389. }
  390. }
  391. },
  392. grid: {
  393. left: '2%',
  394. right: 10,
  395. bottom: 20,
  396. top: 30,
  397. containLabel: true,
  398. },
  399. tooltip: {
  400. trigger: 'axis',
  401. axisPointer: {
  402. type: 'cross',
  403. },
  404. padding: [5, 10],
  405. },
  406. yAxis: {
  407. axisTick: {
  408. show: false,
  409. },
  410. axisLine: {
  411. lineStyle: {
  412. color: '#409EFF'
  413. }
  414. }
  415. },
  416. legend: {
  417. data: earningsData.legendData,
  418. },
  419. series: seriesDatas,
  420. }
  421. return option;
  422. },
  423. dayOrderOption() {
  424. let that = this;
  425. var expectedData = that.data.dayOrderChartData.expectedData
  426. // console.log(expectedData)
  427. var options1 = []
  428. expectedData.date.map(i => {
  429. options1.push({
  430. title: {
  431. text: i
  432. },
  433. series: [{
  434. data: expectedData.data[i]
  435. }],
  436. })
  437. })
  438. var option = {
  439. baseOption: {
  440. timeline: {
  441. // y: 0,
  442. axisType: 'category',
  443. realtime: true,
  444. loop: true,
  445. autoPlay: false,
  446. // currentIndex: 2,
  447. playInterval: 1000,
  448. // controlStyle: {
  449. // position: 'left'
  450. // },
  451. data: expectedData.date,
  452. label: {
  453. formatter: function (s) {
  454. return (new Date(s).getMonth() + 1) + '-' + new Date(s).getDate()
  455. },
  456. color: '#409EFF'
  457. },
  458. lineStyle: {
  459. color: '#409EFF'
  460. },
  461. itemStyle: {
  462. color: '#409EFF',
  463. },
  464. controlStyle: {
  465. color: '#409EFF',
  466. borderColor: '#409EFF',
  467. }
  468. },
  469. title: {
  470. // subtext: '数据来自国家统计局',
  471. },
  472. tooltip: {},
  473. legend: {
  474. x: 'right',
  475. data: ['新订单'],
  476. },
  477. calculable: true,
  478. grid: {
  479. top: 80,
  480. bottom: 100,
  481. tooltip: {
  482. trigger: 'axis',
  483. axisPointer: {
  484. type: 'shadow',
  485. label: {
  486. show: true,
  487. formatter: function (params) {
  488. return params.value.replace('\n', '')
  489. },
  490. },
  491. },
  492. },
  493. },
  494. xAxis: [{
  495. type: 'category',
  496. axisLabel: {
  497. interval: 0
  498. },
  499. axisLine: {
  500. lineStyle: {
  501. color: '#409EFF'
  502. }
  503. },
  504. data: [
  505. '0',
  506. '\n1',
  507. '2',
  508. '\n3',
  509. '4',
  510. '\n5',
  511. '6',
  512. '\n7',
  513. '8',
  514. '\n9',
  515. '10',
  516. '\n11',
  517. '12',
  518. '\n13',
  519. '14',
  520. '\n15',
  521. '16',
  522. '\n17',
  523. '18',
  524. '\n19',
  525. '20',
  526. '\n21',
  527. '22',
  528. '\n23',
  529. '24',
  530. ],
  531. splitLine: {
  532. show: false
  533. },
  534. }, ],
  535. yAxis: [{
  536. type: 'value',
  537. name: '数量',
  538. axisLine: {
  539. lineStyle: {
  540. color: '#409EFF'
  541. }
  542. }
  543. }],
  544. series: [{
  545. name: '新订单',
  546. type: 'bar'
  547. }],
  548. },
  549. options: options1,
  550. }
  551. return option;
  552. },
  553. /**
  554. * 生命周期函数--监听页面初次渲染完成
  555. */
  556. onReady: function () {
  557. },
  558. /**
  559. * 生命周期函数--监听页面显示
  560. */
  561. onShow: function () {
  562. },
  563. /**
  564. * 生命周期函数--监听页面隐藏
  565. */
  566. onHide: function () {
  567. },
  568. /**
  569. * 生命周期函数--监听页面卸载
  570. */
  571. onUnload: function () {
  572. },
  573. /**
  574. * 页面相关事件处理函数--监听用户下拉动作
  575. */
  576. onPullDownRefresh: function () {
  577. },
  578. /**
  579. * 页面上拉触底事件的处理函数
  580. */
  581. onReachBottom: function () {
  582. },
  583. /**
  584. * 用户点击右上角分享
  585. */
  586. onShareAppMessage: function () {
  587. }
  588. })