index.js 15 KB

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