index.js 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660
  1. // index.js
  2. // 获取应用实例
  3. import * as echarts from '../../ec-canvas/echarts';
  4. const app = getApp()
  5. const $api = require('../../utils/api.js').API
  6. const $push = require('../../utils/api.js').PUSH
  7. var records = []
  8. Page({
  9. data: {
  10. loading:0,
  11. notices:[],
  12. tabs:['今日留言','我的关注'],
  13. tabs1:['收益榜','盈利榜','亏损榜','跌幅榜'],
  14. cur:0,
  15. cur1:0,
  16. date:'2024-09-09',
  17. explist:[], //留言
  18. total1:0,
  19. page1:1,
  20. followList:[], //关注
  21. total2:-1,
  22. page2:1,
  23. banners:[],
  24. winLost:{},
  25. baikeList:[],
  26. articleList1:[],
  27. articleList2:[],
  28. articleList3:[],
  29. articleList4:[],
  30. groups:{},
  31. role:0,
  32. match_day:0,
  33. socore:[
  34. { name: '10', checked: false },
  35. { name: '9', checked: false },
  36. { name: '8', checked: false },
  37. { name: '7', checked: false },
  38. { name: '6', checked: false },
  39. { name: '5', checked: false },
  40. { name: '4', checked: false },
  41. { name: '3', checked: false },
  42. { name: '2', checked: false },
  43. { name: '1', checked: false }
  44. ],
  45. isScore:0,
  46. isWeek:0,
  47. scoredays:[],
  48. nochoose:false,
  49. cangwei:[],
  50. ec: {
  51. onInit: null
  52. },
  53. },
  54. onLoad() {
  55. var w=new Date().getDay()
  56. if(w == 0 || w == 6){
  57. this.setData({
  58. isWeek:1
  59. })
  60. }
  61. wx.getStorage({
  62. key: 'user',
  63. complete: res => {
  64. this.setData({
  65. role: res.data.role,
  66. })
  67. }
  68. })
  69. $api.getDate().then(res=>{
  70. this.setData({
  71. date:res.data.data
  72. })
  73. $api.getNotoice().then(res=>{
  74. this.setData({
  75. notices:res.data.data
  76. })
  77. })
  78. // 是否打分
  79. var y=new Date().getFullYear()
  80. var m=Number(new Date().getMonth() + 1)
  81. var d = new Date().getDate()
  82. m=m>9?m:'0'+m;
  83. d=d>9?d:'0'+d
  84. var date = y+'-'+m+'-'+d
  85. if(!this.data.isWeek){
  86. $api.checkMark({stock_date:date}).then(res=>{
  87. if(res.data.data){
  88. this.setData({
  89. isScore:1
  90. })
  91. }
  92. })
  93. }
  94. })
  95. this.getFollow()
  96. this.getIndexData()
  97. this.getExp()
  98. this.getWeekAvg()
  99. },
  100. getWeekAvg:function(){
  101. $api.getMark().then(res=>{
  102. var days=res.data.data.reverse(),weeks=[]
  103. var pre=0
  104. days.forEach(item=>{
  105. item.week=getYearWeek(item.stock_date)
  106. if(item.week < pre){
  107. if(item.week == 1){
  108. item.week=pre
  109. }
  110. }else{
  111. pre=item.week
  112. }
  113. item.date=(new Date(item.stock_date).getMonth()+1)+'/'+(new Date(item.stock_date).getDate())
  114. })
  115. days=days.reverse()
  116. // days.forEach((item,i)=>{
  117. // })
  118. const result = days.reduce((acc, curr) => {
  119. let weekGroup = acc.find(item => item.name === curr.week);
  120. if (!weekGroup) {
  121. weekGroup = { name: curr.week, data: [] };
  122. acc.push(weekGroup);
  123. }
  124. weekGroup.data.push({ avg_score: curr.avg_score,date:curr.date});
  125. return acc;
  126. }, []);
  127. result.forEach(item=>{
  128. item.data=item.data.reverse()
  129. })
  130. // var scoredays=[]
  131. // for (let key in weeks) {
  132. // scoredays.push({
  133. // name:key,
  134. // data:weeks[key].reverse()
  135. // })
  136. // }
  137. this.setData({
  138. scoredays:result
  139. })
  140. })
  141. function getYearWeek(endDate) {
  142. //本年的第一天
  143. endDate=new Date(endDate)
  144. var beginDate = new Date(endDate.getFullYear(), 0, 1);
  145. //星期从0-6,0代表星期天,6代表星期六
  146. var endWeek = endDate.getDay();
  147. if (endWeek == 0) endWeek = 7;
  148. var beginWeek = beginDate.getDay();
  149. if (beginWeek == 0) beginWeek = 7;
  150. //计算两个日期的天数差
  151. var millisDiff = endDate.getTime() - beginDate.getTime();
  152. var dayDiff = Math.floor(( millisDiff + (beginWeek - endWeek) * (24 * 60 * 60 * 1000)) / 86400000);
  153. return Math.ceil(dayDiff / 7) + 1;
  154. }
  155. },
  156. radioChange:function(e){
  157. if(!$api.checkUser()){
  158. this.setData({
  159. socore:[
  160. { name: '10', checked: false },
  161. { name: '9', checked: false },
  162. { name: '8', checked: false },
  163. { name: '7', checked: false },
  164. { name: '6', checked: false },
  165. { name: '5', checked: false },
  166. { name: '4', checked: false },
  167. { name: '3', checked: false },
  168. { name: '2', checked: false },
  169. { name: '1', checked: false }
  170. ],
  171. })
  172. return
  173. }
  174. var y=new Date().getFullYear()
  175. var m=Number(new Date().getMonth() + 1)
  176. var d = new Date().getDate()
  177. m=m>9?m:'0'+m;
  178. d=d>9?d:'0'+d
  179. var date = y+'-'+m+'-'+d
  180. this.setData({
  181. s:e.detail.value
  182. })
  183. $api.markScore({stock_date:date,score:e.detail.value}).then(res=>{
  184. console.log(res)
  185. if(res.data.code == 0){
  186. wx.showToast({
  187. title: '打分成功',
  188. })
  189. this.setData({
  190. isScore:1
  191. })
  192. this.getWeekAvg()
  193. }
  194. })
  195. },
  196. fresh: function () {
  197. },
  198. // 获取首页数据
  199. getIndexData:function(){
  200. $api.getChampionlList({isbanner:1}).then(res=>{
  201. this.setData({
  202. banners:res.data.data.list
  203. })
  204. })
  205. $api.getWinList({new:1}).then(res=>{
  206. let day = res.data.data[0].valid_dates.indexOf(res.data.data[0].date)
  207. this.setData({
  208. winLost:res.data.data[0],
  209. match_day:day,
  210. })
  211. $api.getAvg({match_id:res.data.data[0].match_id}).then(res=>{
  212. var days=res.data.data.list,weeks=[]
  213. days=days.reverse()
  214. for(let i=0;i<100;i++){
  215. weeks.push({
  216. name:'',
  217. data:[],
  218. total:0
  219. })
  220. }
  221. var pre=0;
  222. days.forEach(item=>{
  223. var w=this.getWeekNumber(item.stock_date)
  224. if(w<pre){
  225. if(w==1){
  226. weeks[pre-1].data.push(item)
  227. }else{
  228. weeks[pre+w-2].data.push(item)
  229. }
  230. }else{
  231. weeks[w-1].data.push(item)
  232. pre=w
  233. }
  234. })
  235. weeks=weeks.filter(item=>item.data.length>0)
  236. var w_text=['一','二','三','四','五','六','七','八','九','十','十一','十二','十三','十四','十五']
  237. weeks.forEach((item,index)=>{
  238. if(item.data.length>0){
  239. item.name='第'+w_text[index]+'周'
  240. var total=0
  241. var money = 10000.0
  242. item.data.forEach(i=>{
  243. var incom=Number(i.today_income.replace('%',''))
  244. money += money*incom/100.0
  245. i.date=(new Date(i.stock_date).getMonth()+1)+'/'+(new Date(i.stock_date).getDate())
  246. })
  247. total = (money-10000)*100.0/10000.0
  248. item.total=total.toFixed(2)
  249. }
  250. })
  251. this.setData({
  252. days:weeks.reverse()
  253. })
  254. })
  255. this.getCangwei(res.data.data[0].match_id)
  256. $api.getWinLose({match_id:res.data.data[0].match_id}).then(res1=>{
  257. this.setData({
  258. groups:res1.data.data
  259. })
  260. })
  261. })
  262. $api.getBaikeRandom().then(res=>{
  263. this.setData({
  264. baikeList:res.data.data
  265. })
  266. })
  267. $api.getChampionlList({category:'每日点评',page:1}).then(res=>{
  268. this.setData({
  269. articleList1:res.data.data.list
  270. })
  271. })
  272. $api.getChampionlList({category:'冠军交割',page:1}).then(res=>{
  273. this.setData({
  274. articleList2:res.data.data.list
  275. })
  276. })
  277. $api.getChampionlList({category:'牛人专场',page:1}).then(res=>{
  278. this.setData({
  279. articleList3:res.data.data.list
  280. })
  281. })
  282. $api.getChampionlList({category:'妖股列传',page:1}).then(res=>{
  283. this.setData({
  284. articleList4:res.data.data.list
  285. })
  286. })
  287. },
  288. getCangwei(mid){
  289. $api.getCangweiList({match_id:mid}).then(res=>{
  290. var days=res.data.data.list,weeks=[]
  291. days=days.reverse()
  292. var ncangwei = []
  293. for(let i=0;i<100;i++){
  294. ncangwei.push({
  295. name:'',
  296. data:[],
  297. total:0
  298. })
  299. }
  300. var pre=0;
  301. days.forEach(item=>{
  302. var w=this.getWeekNumber(item.stock_date)
  303. if(w<pre){
  304. if(w==1){
  305. ncangwei[pre-1].data.push(item)
  306. }else{
  307. ncangwei[pre+w-2].data.push(item)
  308. }
  309. }else{
  310. ncangwei[w-1].data.push(item)
  311. pre=w
  312. }
  313. })
  314. ncangwei=ncangwei.filter(item=>item.data.length>0)
  315. var w_text=['一','二','三','四','五','六','七','八','九','十','十一','十二','十三','十四','十五']
  316. ncangwei.forEach((item,index)=>{
  317. if(item.data.length>0){
  318. item.name='第'+w_text[index]+'周'
  319. var total=0
  320. var money = 10000.0
  321. item.data.forEach(i=>{
  322. i.date=(new Date(i.stock_date).getMonth()+1)+'/'+(new Date(i.stock_date).getDate())
  323. })
  324. }
  325. })
  326. records = res.data.data.list
  327. this.setData({
  328. ec: {
  329. onInit:initChart
  330. },
  331. cangwei:ncangwei.reverse()
  332. })
  333. })
  334. },
  335. //计算周数
  336. getWeekNumber:function(dateString) {
  337. const date = new Date(dateString);
  338. const year = date.getFullYear();
  339. // 将年份的第一个周一作为第一周的开始
  340. const firstWeekStart = new Date(year, 0, 1);
  341. firstWeekStart.setDate(firstWeekStart.getDate() - firstWeekStart.getDay() + 1);
  342. // 计算给定日期是一年中的第几周
  343. const currentDate = new Date(date);
  344. currentDate.setDate(currentDate.getDate() - currentDate.getDay() + 1);
  345. let milliseconds = currentDate.getTime() - firstWeekStart.getTime();
  346. const weeks = Math.round(milliseconds / (7 * 24 * 60 * 60 * 1000));
  347. return weeks + 1; // 因为getWeek返回的是年初至今的周数,所以加1得到完整的周数
  348. },
  349. //获取今日留言
  350. getExp:function(){
  351. var list = this.data.explist
  352. $api.getExperience({page:this.data.page1,page_size:20}).then(res=>{
  353. res.data.data.list.forEach(item => {
  354. list.push(item)
  355. })
  356. this.setData({
  357. explist: list,
  358. total1: res.data.data.total
  359. })
  360. })
  361. },
  362. //留言分页
  363. next1: function () {
  364. if (this.data.explist.length < this.data.total1) {
  365. const page = this.data.page1 + 1
  366. this.setData({
  367. page1: page
  368. })
  369. this.getExp()
  370. }
  371. },
  372. //我的关注
  373. getFollow(){
  374. var followList = this.data.followList
  375. if(this.data.loading){
  376. followList=[]
  377. }
  378. $api.getMyFollowV3({
  379. page: this.data.page2, page_size: 20
  380. }).then(res => {
  381. res.data.data.list.forEach(item => {
  382. followList.push(item)
  383. })
  384. this.setData({
  385. followList: followList,
  386. total2:res.data.data.total,
  387. error:0,
  388. loading: 0
  389. })
  390. app.globalData.follow = 0
  391. })
  392. .catch(err=>{
  393. this.setData({
  394. error:1
  395. })
  396. })
  397. },
  398. //关注分页
  399. next2: function () {
  400. if (this.data.followList.length < this.data.total2) {
  401. const page = this.data.page2 + 1
  402. this.setData({
  403. page2: page
  404. })
  405. this.getFollow()
  406. }
  407. },
  408. tabChange(e){
  409. this.setData({
  410. cur:e.target.dataset.id
  411. })
  412. this.renew()
  413. },
  414. tabChange1(e){
  415. this.setData({
  416. cur1:e.target.dataset.id
  417. })
  418. },
  419. tapGroup(e){
  420. wx.navigateTo({
  421. url: '../avg/avg?index='+e.currentTarget.dataset.index + '&match_id=' + this.data.groups.group_win_lose_list[0].match_id +
  422. '&match_name=' + this.data.groups.group_win_lose_list[0].match_name,
  423. })
  424. },
  425. tapAvg(e){
  426. wx.navigateTo({
  427. url: '../avg/avg?index=0' + '&match_id=' + this.data.groups.group_win_lose_list[0].match_id +
  428. '&match_name=' + this.data.groups.group_win_lose_list[0].match_name,
  429. })
  430. },
  431. //预览
  432. preview(e){
  433. wx.previewImage({
  434. urls: e.target.dataset.urls,
  435. current: e.target.dataset.src
  436. })
  437. },
  438. curChange(e){
  439. if (e.detail.source == "touch"){
  440. this.setData({
  441. cur: e.detail.current
  442. })
  443. this.renew()
  444. }
  445. },
  446. curChange1(e){
  447. if (e.detail.source == "touch"){
  448. this.setData({
  449. cur1: e.detail.current
  450. })
  451. }
  452. },
  453. renew(){
  454. this.setData({
  455. followList:[],
  456. explist:[],
  457. page1: 1,
  458. total1: 0,
  459. page2: 1,
  460. total2: -1
  461. })
  462. switch(this.data.cur){
  463. case 0:
  464. this.data.page1 = 1
  465. this.getExp()
  466. break;
  467. case 1:
  468. this.data.page2 = 1
  469. this.getFollow()
  470. break;
  471. }
  472. },
  473. pushToday(e){
  474. $push.pushToday(e.currentTarget.dataset)
  475. },
  476. pushArticleWeb(e){
  477. if($api.checkUserRole()){
  478. wx.navigateTo({
  479. url: '../articleweb/articleweb?id=' + e.currentTarget.dataset.id,
  480. })
  481. }
  482. },
  483. pushBaike(e){
  484. if($api.checkUserRole()){
  485. wx.navigateTo({
  486. url: '../detail/detail?type=百科&id=' + e.currentTarget.dataset.id,
  487. })
  488. }
  489. },
  490. pushOther(e){
  491. switch(e.currentTarget.dataset.id){
  492. case "0":{
  493. wx.navigateTo({
  494. url: '../stock/stock?type=1&stock_date='+this.data.date,
  495. })
  496. }
  497. break;
  498. case "1":{
  499. wx.navigateTo({
  500. url: '../hotuser/hotuser',
  501. })
  502. }
  503. break;
  504. case "2":{
  505. wx.navigateTo({
  506. url: '../tlb/tlb?match_id='+this.data.winLost.match_id,
  507. })
  508. }
  509. break;
  510. case "3":{
  511. wx.navigateTo({
  512. url: '../baike/baike',
  513. })
  514. }
  515. break;
  516. case "4":{
  517. wx.navigateTo({
  518. url: '../todayExp/todayExp',
  519. })
  520. }
  521. break;
  522. case "5":{
  523. wx.navigateTo({
  524. url: '../myfollow/myfollow',
  525. })
  526. }
  527. break;
  528. }
  529. },
  530. onShow: function (e) {
  531. $api.initUser()
  532. $api.getsignup().then(res => {
  533. this.setData({
  534. info: res.data.data
  535. })
  536. })
  537. if(this.data.cur == 0 && app.globalData.follow == 1){
  538. this.data.loading = 1
  539. this.data.page2 = 1
  540. this.data.total2 = -1,
  541. this.getFollow()
  542. }
  543. },
  544. })
  545. function initChart(canvas, width, height, dpr) {
  546. var xdata = [], ydata = [];
  547. records = records
  548. for (let i = 0; i < records.length; i++) {
  549. let date = records[i].stock_date.split('-');
  550. xdata.push(date[1] + '/' + date[2])
  551. let y = records[i].total_income.replace('%', '')
  552. ydata.push(Number(y))
  553. }
  554. xdata = xdata.reverse()
  555. ydata = ydata.reverse()
  556. const chart = echarts.init(canvas, null, {
  557. width: width,
  558. height: height,
  559. devicePixelRatio: dpr // new
  560. });
  561. canvas.setChart(chart);
  562. var option = {
  563. legend: {
  564. show: false
  565. },
  566. grid: {
  567. x: 50,
  568. y: 10,
  569. x2: 10,
  570. y2: 35
  571. },
  572. tooltip: {
  573. show: true,
  574. trigger: 'axis',
  575. formatter: '{b0}: {c0}%'
  576. },
  577. xAxis: {
  578. type: 'category',
  579. data: xdata,
  580. axisLabel: {
  581. interval: 0,
  582. rotate: 40,
  583. color: '#999999',
  584. interval: 2
  585. }
  586. },
  587. yAxis: {
  588. axisLine: {
  589. show: true
  590. },
  591. type: 'value',
  592. name: '',
  593. axisLabel: {
  594. formatter: function (value, index) {//隐藏 0
  595. let texts = [];
  596. texts.push(value + '%')
  597. return texts;
  598. },
  599. show: true
  600. },
  601. },
  602. series: [{
  603. name: 'A',
  604. type: 'line',
  605. smooth: true,
  606. symbolSize: 4,
  607. lineStyle: {
  608. color: '#FF2D68'
  609. // color: new echarts.graphic.LinearGradient(1, 0, 0, 0, [{
  610. // offset: 0,
  611. // color: '#FF2D68'
  612. // }, {
  613. // offset: 1,
  614. // color: '#4C4BFF'
  615. // }]),
  616. },
  617. itemStyle: {
  618. borderWidth: 5,
  619. borderColor: '#FFAD52',
  620. color: '#FFAD52'
  621. },
  622. data: ydata
  623. }]
  624. };
  625. chart.setOption(option);
  626. return chart;
  627. }