avg.js 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329
  1. // pages/avg/avg.js
  2. import * as echarts from '../../ec-canvas/echarts';
  3. const $api = require('../../utils/api.js').API;
  4. var records = []
  5. Page({
  6. /**
  7. * 页面的初始数据
  8. */
  9. data: {
  10. list:[],
  11. cur:0,
  12. match_name:'',
  13. ec: {
  14. onInit: null
  15. },
  16. datas:[],
  17. days:[],
  18. match_id:0,
  19. },
  20. /**
  21. * 生命周期函数--监听页面加载
  22. */
  23. onLoad(options) {
  24. this.setData({
  25. cur:options.index,
  26. match_id:options.match_id,
  27. match_name:options.match_name,
  28. })
  29. this.loadGroupList()
  30. },
  31. loadGroupList(){
  32. $api.getMatchGroupList({match_id:this.data.match_id}).then(res => {
  33. var nlist = [{'name':'全体选手'}]
  34. nlist = nlist.concat(res.data.data)
  35. this.setData({
  36. list:nlist
  37. })
  38. if(this.data.cur == 0){
  39. this.loadAvg()
  40. } else{
  41. this.loadGroupAvg()
  42. }
  43. })
  44. },
  45. loadGroupAvg(){
  46. var group = this.data.list[this.data.cur]
  47. var param = {
  48. match_id:group.match_id,
  49. group_id:group.id,
  50. }
  51. $api.getAllDay(param).then(res => {
  52. // console.log(res.data.data.list)
  53. if(res.data.code == 0){
  54. var week=['一','二','三','四','五','六','七','八','九','十','十一','十二','十三','十四','十五']
  55. var days=res.data.data.list,weeks=[[]]
  56. days=days.reverse()
  57. week.forEach((item,index)=>{
  58. weeks[index]={
  59. name:'第'+item+'周',
  60. data:[],
  61. total:0
  62. }
  63. })
  64. var i=0
  65. days.forEach(item=>{
  66. var w=new Date(item.stock_date).getDay()
  67. item.day=w
  68. if(w==1){
  69. i++
  70. }
  71. weeks[i].data.push(item)
  72. })
  73. weeks.forEach(item=>{
  74. if(item.data.length>0){
  75. var total=0
  76. var money = 10000.0
  77. item.data.forEach(i=>{
  78. var incom=Number(i.today_income.replace('%',''))
  79. money += money*incom/100.0
  80. i.date=(new Date(i.stock_date).getMonth()+1)+'/'+(new Date(i.stock_date).getDate())
  81. })
  82. total = (money-10000)*100.0/10000.0
  83. item.total=total.toFixed(2)
  84. }
  85. })
  86. records = res.data.data.list
  87. this.setData({
  88. ec: {
  89. onInit: initChart
  90. },
  91. days:weeks.reverse()
  92. })
  93. }
  94. })
  95. },
  96. //计算周数
  97. getWeekNumber:function(dateString) {
  98. const date = new Date(dateString);
  99. const year = date.getFullYear();
  100. // 将年份的第一个周一作为第一周的开始
  101. const firstWeekStart = new Date(year, 0, 1);
  102. firstWeekStart.setDate(firstWeekStart.getDate() - firstWeekStart.getDay() + 1);
  103. // 计算给定日期是一年中的第几周
  104. const currentDate = new Date(date);
  105. currentDate.setDate(currentDate.getDate() - currentDate.getDay() + 1);
  106. let milliseconds = currentDate.getTime() - firstWeekStart.getTime();
  107. const weeks = Math.round(milliseconds / (7 * 24 * 60 * 60 * 1000));
  108. return weeks + 1; // 因为getWeek返回的是年初至今的周数,所以加1得到完整的周数
  109. },
  110. loadAvg(){
  111. var param = {
  112. match_id:this.data.match_id,
  113. }
  114. $api.getAvg(param).then(res => {
  115. if(res.data.code == 0){
  116. records = res.data.data.list.reverse()
  117. var days=res.data.data.list,weeks=[]
  118. days=days
  119. for(let i=0;i<100;i++){
  120. weeks.push({
  121. name:'',
  122. data:[],
  123. total:0
  124. })
  125. }
  126. var pre=0;
  127. days.forEach(item=>{
  128. var w=this.getWeekNumber(item.stock_date)
  129. if(w<pre){
  130. if(w==1){
  131. weeks[pre-1].data.push(item)
  132. }else{
  133. weeks[pre+w-2].data.push(item)
  134. }
  135. }else{
  136. weeks[w-1].data.push(item)
  137. pre=w
  138. }
  139. })
  140. weeks=weeks.filter(item=>item.data.length>0)
  141. var w_text=['一','二','三','四','五','六','七','八','九','十','十一','十二','十三','十四','十五']
  142. weeks.forEach((item,index)=>{
  143. if(item.data.length>0){
  144. item.name='第'+w_text[index]+'周'
  145. var total=0
  146. var money = 10000.0
  147. item.data.forEach(i=>{
  148. var incom=Number(i.today_income.replace('%',''))
  149. money += money*incom/100.0
  150. i.date=(new Date(i.stock_date).getMonth()+1)+'/'+(new Date(i.stock_date).getDate())
  151. })
  152. total = (money-10000)*100.0/10000.0
  153. item.total=total.toFixed(2)
  154. }
  155. })
  156. this.setData({
  157. ec: {
  158. onInit: initChart
  159. },
  160. days:weeks.reverse()
  161. })
  162. }
  163. })
  164. },
  165. tabChange(e){
  166. this.setData({
  167. cur:e.target.dataset.id
  168. })
  169. this.setData({
  170. ec:null,
  171. days:[]
  172. })
  173. if(e.target.dataset.id == 0){
  174. this.loadAvg()
  175. } else{
  176. this.loadGroupAvg()
  177. }
  178. },
  179. /**
  180. * 生命周期函数--监听页面初次渲染完成
  181. */
  182. onReady() {
  183. },
  184. /**
  185. * 生命周期函数--监听页面显示
  186. */
  187. onShow() {
  188. },
  189. /**
  190. * 生命周期函数--监听页面隐藏
  191. */
  192. onHide() {
  193. },
  194. /**
  195. * 生命周期函数--监听页面卸载
  196. */
  197. onUnload() {
  198. },
  199. /**
  200. * 页面相关事件处理函数--监听用户下拉动作
  201. */
  202. onPullDownRefresh() {
  203. },
  204. /**
  205. * 页面上拉触底事件的处理函数
  206. */
  207. onReachBottom() {
  208. },
  209. /**
  210. * 用户点击右上角分享
  211. */
  212. onShareAppMessage() {
  213. }
  214. })
  215. /**折线图 */
  216. function initChart(canvas, width, height, dpr) {
  217. var xdata = [], ydata = [];
  218. records = records.reverse()
  219. for (let i = 0; i < records.length; i++) {
  220. let date = records[i].stock_date.split('-');
  221. xdata.push(date[1] + '/' + date[2])
  222. let y = records[i].total_income.replace('%', '')
  223. ydata.push(Number(y))
  224. }
  225. xdata = xdata.reverse()
  226. ydata = ydata.reverse()
  227. const chart = echarts.init(canvas, null, {
  228. width: width,
  229. height: height,
  230. devicePixelRatio: dpr // new
  231. });
  232. canvas.setChart(chart);
  233. var option = {
  234. legend: {
  235. show: false
  236. },
  237. grid: {
  238. x: 40,
  239. y: 10,
  240. x2: 10,
  241. y2: 35
  242. },
  243. tooltip: {
  244. show: true,
  245. trigger: 'axis',
  246. formatter: '{b0}: {c0}%',
  247. },
  248. xAxis: {
  249. type: 'category',
  250. data: xdata,
  251. axisLabel: {
  252. interval: 0,
  253. rotate: 40,
  254. color: '#999999',
  255. interval: 2
  256. }
  257. },
  258. yAxis: {
  259. axisLine: {
  260. show: true,
  261. },
  262. type: 'value',
  263. // name: '收益曲线',
  264. axisLabel: {
  265. color: '#999999',
  266. formatter: function (value, index) {//隐藏 0
  267. let texts = [];
  268. texts.push(value + '%')
  269. return texts;
  270. },
  271. show: true
  272. },
  273. },
  274. series: [{
  275. name: 'A',
  276. type: 'line',
  277. smooth: true,
  278. symbolSize: 4,
  279. lineStyle: {
  280. color: '#FF2D68'
  281. // color: new echarts.graphic.LinearGradient(1, 0, 0, 0, [{
  282. // offset: 0,
  283. // color: '#FF2D68'
  284. // }, {
  285. // offset: 1,
  286. // color: '#4C4BFF'
  287. // }]),
  288. },
  289. itemStyle: {
  290. borderWidth: 5,
  291. borderColor: '#FFAD52',
  292. color: '#FFAD52'
  293. },
  294. data: ydata
  295. }]
  296. };
  297. chart.setOption(option);
  298. return chart;
  299. }