index.js 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617
  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. for (let i = 0; i < records.length; i++) {
  295. let date = records[i].stock_date.split('-');
  296. let y = records[i].today_cangwei_avg.replace('%', '')
  297. cangwei.push({
  298. date:date[1] + '/' + date[2],
  299. data:Number(y)
  300. })
  301. }
  302. this.setData({
  303. cangwei:cangwei.reverse()
  304. })
  305. })
  306. },
  307. //计算周数
  308. getWeekNumber:function(dateString) {
  309. const date = new Date(dateString);
  310. const year = date.getFullYear();
  311. // 将年份的第一个周一作为第一周的开始
  312. const firstWeekStart = new Date(year, 0, 1);
  313. firstWeekStart.setDate(firstWeekStart.getDate() - firstWeekStart.getDay() + 1);
  314. // 计算给定日期是一年中的第几周
  315. const currentDate = new Date(date);
  316. currentDate.setDate(currentDate.getDate() - currentDate.getDay() + 1);
  317. let milliseconds = currentDate.getTime() - firstWeekStart.getTime();
  318. const weeks = Math.round(milliseconds / (7 * 24 * 60 * 60 * 1000));
  319. return weeks + 1; // 因为getWeek返回的是年初至今的周数,所以加1得到完整的周数
  320. },
  321. //获取今日留言
  322. getExp:function(){
  323. var list = this.data.explist
  324. $api.getExperience({page:this.data.page1,page_size:20}).then(res=>{
  325. res.data.data.list.forEach(item => {
  326. list.push(item)
  327. })
  328. this.setData({
  329. explist: list,
  330. total1: res.data.data.total
  331. })
  332. })
  333. },
  334. //留言分页
  335. next1: function () {
  336. if (this.data.explist.length < this.data.total1) {
  337. const page = this.data.page1 + 1
  338. this.setData({
  339. page1: page
  340. })
  341. this.getExp()
  342. }
  343. },
  344. //我的关注
  345. getFollow(){
  346. var followList = this.data.followList
  347. if(this.data.loading){
  348. followList=[]
  349. }
  350. $api.getMyFollowV3({
  351. page: this.data.page2, page_size: 20
  352. }).then(res => {
  353. res.data.data.list.forEach(item => {
  354. followList.push(item)
  355. })
  356. this.setData({
  357. followList: followList,
  358. total2:res.data.data.total,
  359. error:0,
  360. loading: 0
  361. })
  362. app.globalData.follow = 0
  363. })
  364. .catch(err=>{
  365. this.setData({
  366. error:1
  367. })
  368. })
  369. },
  370. //关注分页
  371. next2: function () {
  372. if (this.data.followList.length < this.data.total2) {
  373. const page = this.data.page2 + 1
  374. this.setData({
  375. page2: page
  376. })
  377. this.getFollow()
  378. }
  379. },
  380. tabChange(e){
  381. this.setData({
  382. cur:e.target.dataset.id
  383. })
  384. this.renew()
  385. },
  386. tabChange1(e){
  387. this.setData({
  388. cur1:e.target.dataset.id
  389. })
  390. },
  391. tapGroup(e){
  392. wx.navigateTo({
  393. url: '../avg/avg?index='+e.currentTarget.dataset.index + '&match_id=' + this.data.groups.group_win_lose_list[0].match_id +
  394. '&match_name=' + this.data.groups.group_win_lose_list[0].match_name,
  395. })
  396. },
  397. tapAvg(e){
  398. wx.navigateTo({
  399. url: '../avg/avg?index=0' + '&match_id=' + this.data.groups.group_win_lose_list[0].match_id +
  400. '&match_name=' + this.data.groups.group_win_lose_list[0].match_name,
  401. })
  402. },
  403. //预览
  404. preview(e){
  405. wx.previewImage({
  406. urls: e.target.dataset.urls,
  407. current: e.target.dataset.src
  408. })
  409. },
  410. curChange(e){
  411. if (e.detail.source == "touch"){
  412. this.setData({
  413. cur: e.detail.current
  414. })
  415. this.renew()
  416. }
  417. },
  418. curChange1(e){
  419. if (e.detail.source == "touch"){
  420. this.setData({
  421. cur1: e.detail.current
  422. })
  423. }
  424. },
  425. renew(){
  426. this.setData({
  427. followList:[],
  428. explist:[],
  429. page1: 1,
  430. total1: 0,
  431. page2: 1,
  432. total2: -1
  433. })
  434. switch(this.data.cur){
  435. case 0:
  436. this.data.page1 = 1
  437. this.getExp()
  438. break;
  439. case 1:
  440. this.data.page2 = 1
  441. this.getFollow()
  442. break;
  443. }
  444. },
  445. pushToday(e){
  446. $push.pushToday(e.currentTarget.dataset)
  447. },
  448. pushArticleWeb(e){
  449. if($api.checkUserRole()){
  450. wx.navigateTo({
  451. url: '../articleweb/articleweb?id=' + e.currentTarget.dataset.id,
  452. })
  453. }
  454. },
  455. pushBaike(e){
  456. if($api.checkUserRole()){
  457. wx.navigateTo({
  458. url: '../detail/detail?type=百科&id=' + e.currentTarget.dataset.id,
  459. })
  460. }
  461. },
  462. pushOther(e){
  463. switch(e.currentTarget.dataset.id){
  464. case "0":{
  465. wx.navigateTo({
  466. url: '../stock/stock?type=1&stock_date='+this.data.date,
  467. })
  468. }
  469. break;
  470. case "1":{
  471. wx.navigateTo({
  472. url: '../hotuser/hotuser',
  473. })
  474. }
  475. break;
  476. case "2":{
  477. wx.navigateTo({
  478. url: '../tlb/tlb?match_id='+this.data.winLost.match_id,
  479. })
  480. }
  481. break;
  482. case "3":{
  483. wx.navigateTo({
  484. url: '../baike/baike',
  485. })
  486. }
  487. break;
  488. case "4":{
  489. wx.navigateTo({
  490. url: '../todayExp/todayExp',
  491. })
  492. }
  493. break;
  494. case "5":{
  495. wx.navigateTo({
  496. url: '../myfollow/myfollow',
  497. })
  498. }
  499. break;
  500. }
  501. },
  502. onShow: function (e) {
  503. $api.initUser()
  504. $api.getsignup().then(res => {
  505. this.setData({
  506. info: res.data.data
  507. })
  508. })
  509. if(this.data.cur == 0 && app.globalData.follow == 1){
  510. this.data.loading = 1
  511. this.data.page2 = 1
  512. this.data.total2 = -1,
  513. this.getFollow()
  514. }
  515. },
  516. })
  517. function initChart(canvas, width, height, dpr) {
  518. var xdata = [], ydata = [];
  519. records = records
  520. for (let i = 0; i < records.length; i++) {
  521. let date = records[i].stock_date.split('-');
  522. xdata.push(date[1] + '/' + date[2])
  523. let y = records[i].today_cangwei_avg.replace('%', '')
  524. ydata.push(Number(y))
  525. }
  526. xdata = xdata
  527. ydata = ydata
  528. console.log(xdata,ydata)
  529. const chart = echarts.init(canvas, null, {
  530. width: width,
  531. height: height,
  532. devicePixelRatio: dpr // new
  533. });
  534. canvas.setChart(chart);
  535. var option = {
  536. legend: {
  537. show: false
  538. },
  539. grid: {
  540. x: 50,
  541. y: 10,
  542. x2: 10,
  543. y2: 35
  544. },
  545. tooltip: {
  546. show: true,
  547. trigger: 'axis',
  548. formatter: '{b0}: {c0}%'
  549. },
  550. xAxis: {
  551. type: 'category',
  552. data: xdata,
  553. axisLabel: {
  554. interval: 0,
  555. rotate: 40,
  556. color: '#999999',
  557. interval: 2
  558. }
  559. },
  560. yAxis: {
  561. axisLine: {
  562. show: true
  563. },
  564. type: 'value',
  565. name: '',
  566. axisLabel: {
  567. formatter: function (value, index) {//隐藏 0
  568. let texts = [];
  569. texts.push(value + '%')
  570. return texts;
  571. },
  572. show: true
  573. },
  574. },
  575. series: [{
  576. type: 'line',
  577. itemStyle: {
  578. borderWidth: 5,
  579. borderColor: '#FFAD52',
  580. color: '#FFAD52'
  581. },
  582. data: ydata
  583. }]
  584. };
  585. chart.setOption(option);
  586. return chart;
  587. }