index.js 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444
  1. // pages/checkin/index.js
  2. const util = require("../../utils/util");
  3. const tools = require("../../utils/tool");
  4. const App = getApp();
  5. Page({
  6. /**
  7. * 页面的初始数据
  8. */
  9. data: {
  10. appAssetsUrl: App.appAssetsUrl,
  11. appAssetsUrl2: App.appAssetsUrl2,
  12. appAssetsUrl3: App.appAssetsUrl3,
  13. userInfo: {},
  14. currentYear: new Date().getFullYear(),
  15. currentMonth: new Date().getMonth() + 1,
  16. checkedDates: [], // 已签到日期,从服务器或本地存储加载
  17. today: new Date().getDate(), // 今天日期
  18. isCheckedToday: false, // 今天是否已签到
  19. weekdays: ['一', '二', '三', '四', '五', '六', '日'],
  20. calendarDays: [],
  21. tasks: [],
  22. totalScore: 0
  23. },
  24. loadList() {
  25. let that = this;
  26. wx.showLoading({
  27. title: '努力加载中...',
  28. })
  29. App._post_form('scoreTask/list', '', {
  30. stuId: util.getUserId()
  31. },
  32. function (res) {
  33. if (res.code == 0 && res.data) {
  34. // console.log(res);
  35. let list = res.data.dayTask ? [...res.data.dayTask] : [];
  36. let list1 = res.data.infiniteTask ? [...res.data.infiniteTask] : [];
  37. let list2 = res.data.singleTask ? [...res.data.singleTask] : [];
  38. // console.log([...list, ...list1, ...list2]);
  39. let dataList = [...list, ...list1, ...list2].map(v => {
  40. switch (v.taskName) {
  41. case '邀请好友':
  42. v.desc = '邀请好友获得积分';
  43. break;
  44. case '参与兼职':
  45. case '参加兼职/成长会':
  46. v.desc = '参与兼职获得积分';
  47. break;
  48. break;
  49. case '每日签到':
  50. v.desc = '每日签到获得积分';
  51. break;
  52. case '购买会员':
  53. case '开通会员':
  54. v.desc = '开通会员获得积分';
  55. break;
  56. case '学籍认证':
  57. case '完成学籍认证':
  58. v.desc = '学籍认证获得积分';
  59. break;
  60. case '完善资料':
  61. case '完善个人资料':
  62. v.desc = '完善个人资料获得积分';
  63. break;
  64. case '参与活动':
  65. v.desc = '参与活动获得积分';
  66. break;
  67. case '观看广告':
  68. v.desc = '观看广告获得积分';
  69. break;
  70. case '分享小程序':
  71. v.desc = '分享小程序可获得积分奖励';
  72. break;
  73. case '每日登录':
  74. v.desc = '每日登录获得积分';
  75. break;
  76. }
  77. return v
  78. })
  79. that.setData({
  80. tasks: [...dataList]
  81. })
  82. }
  83. })
  84. },
  85. onPointsTap() {
  86. wx.navigateTo({
  87. url: "/pointExchange/pages/center/center?totalScore=" + this.data.totalScore,
  88. });
  89. },
  90. /**
  91. * 查询用户数据根据id
  92. */
  93. getUserInfo() {
  94. let _this = this;
  95. let id = util.getUserId();
  96. let openid = wx.getStorageSync("openid");
  97. if (id) {
  98. let parm = {
  99. id,
  100. };
  101. App._post_form(
  102. "member/apiSelectMeberInfo",
  103. "application/json",
  104. JSON.stringify(parm),
  105. function (res) {
  106. // console.log(res);
  107. if (res.code === 0) {
  108. wx.setStorageSync("USER", res.member);
  109. _this.setData({
  110. userInfo: res.member,
  111. });
  112. // _this.loadUser()
  113. } else {
  114. // wx.removeStorageSync("USER");
  115. wx.clearStorage();
  116. wx.navigateTo({
  117. url: "/pages/login",
  118. });
  119. }
  120. }
  121. );
  122. } else {
  123. wx.navigateTo({
  124. url: '/pages/login',
  125. })
  126. }
  127. },
  128. loadData() {
  129. let that = this;
  130. App._post_form('scoreStu/totalScore', '', {
  131. stuId: util.getUserId()
  132. },
  133. function (res) {
  134. if (res.code == 0) {
  135. that.setData({
  136. totalScore: res.data
  137. })
  138. }
  139. })
  140. },
  141. /**
  142. * 生命周期函数--监听页面加载
  143. */
  144. onLoad: function (options) {
  145. if (!util.getUserId()) {
  146. wx.redirectTo({
  147. url: '/pages/login',
  148. })
  149. return
  150. }
  151. wx.setNavigationBarTitle({
  152. title: '每日签到'
  153. });
  154. this.loadData();
  155. this.getUserInfo();
  156. this.loadList();
  157. },
  158. /**
  159. * 生命周期函数--监听页面显示
  160. */
  161. onShow: async function () {
  162. // 页面显示时重新加载签到状态
  163. await this.getCheckinHistoryFromServer();
  164. this.loadData();
  165. },
  166. /**
  167. * 下拉刷新
  168. */
  169. onPullDownRefresh: async function () {
  170. await this.getCheckinHistoryFromServer();
  171. this.loadData();
  172. this.getUserInfo();
  173. wx.stopPullDownRefresh();
  174. },
  175. /**
  176. * 从服务器获取签到历史
  177. */
  178. async getCheckinHistoryFromServer() {
  179. const userId = util.getUserId();
  180. wx.showLoading({
  181. title: '加载中...',
  182. mask: true
  183. });
  184. if (!userId) return;
  185. await App._get(
  186. 'user/dayList/' + userId,
  187. {},
  188. (res) => {
  189. wx.hideLoading();
  190. if (res.code === 0 && res.data) {
  191. // let data = res.data.map(v => {
  192. // return parseInt(v.substr(6, 2));
  193. // })
  194. this.setData({
  195. checkedDates: res.data.history || []
  196. });
  197. this.initCalendar(res.data.current);
  198. }
  199. }
  200. );
  201. },
  202. /**
  203. * 初始化日历
  204. */
  205. initCalendar(dates = null) {
  206. // 使用当前系统时间
  207. const date = dates ? new Date(dates) : new Date();
  208. const year = date.getFullYear();
  209. const month = date.getMonth();
  210. const today = date.getDate();
  211. // 获取当月第一天是星期几
  212. const firstDay = new Date(year, month, 1).getDay();
  213. const adjustedFirstDay = firstDay === 0 ? 7 : firstDay; // 将周日从0调整为7
  214. // 获取当月天数
  215. const daysInMonth = new Date(year, month + 1, 0).getDate();
  216. // 生成日历数组
  217. const calendarDays = [];
  218. // 添加空白格子(上个月的日期)
  219. for (let i = 1; i < adjustedFirstDay; i++) {
  220. calendarDays.push({ day: '', isEmpty: true });
  221. }
  222. // 添加当月日期
  223. for (let day = 1; day <= daysInMonth; day++) {
  224. let date1 = `${year}${month + 1 > 9 ? month + 1 : '0' + (month + 1)}${day > 9 ? day : '0' + day}`
  225. calendarDays.push({
  226. day: day,
  227. isEmpty: false,
  228. isToday: day === today,
  229. isChecked: this.data.checkedDates.includes(date1)
  230. });
  231. }
  232. let date1 = `${year}${month + 1 > 9 ? month + 1 : '0' + (month + 1)}${today > 9 ? today : '0' + today}`
  233. // console.log('date1', date1)
  234. // console.log('aaa', calendarDays, this.data.checkedDates.includes(today))
  235. this.setData({
  236. calendarDays,
  237. currentYear: year,
  238. currentMonth: month + 1,
  239. today: today,
  240. isCheckedToday: this.data.checkedDates.includes(date1)
  241. });
  242. },
  243. /**
  244. * 立即签到
  245. */
  246. handleCheckin() {
  247. if (this.data.isCheckedToday) {
  248. wx.showToast({
  249. title: '今日已签到',
  250. icon: 'none'
  251. });
  252. return;
  253. }
  254. wx.showLoading({
  255. title: '签到中...'
  256. });
  257. // 执行签到操作
  258. this.performCheckin();
  259. },
  260. /**
  261. * 执行签到操作
  262. */
  263. performCheckin() {
  264. const userId = util.getUserId();
  265. let _this = this;
  266. // TODO: 调用签到API
  267. App._post_form(
  268. 'user/dailySign',
  269. 'application/json',
  270. {
  271. stuId: userId
  272. },
  273. async (res) => {
  274. if (res.code === 0) {
  275. // 积分统计完成
  276. wx.showToast({
  277. title: `签到成功`,
  278. icon: 'success'
  279. });
  280. await _this.getCheckinHistoryFromServer();
  281. _this.loadList();
  282. } else {
  283. wx.hideLoading();
  284. wx.showToast({
  285. title: res.message || '签到失败',
  286. icon: 'none'
  287. });
  288. }
  289. }
  290. );
  291. },
  292. /**
  293. * 处理任务点击
  294. */
  295. handleTaskClick(e) {
  296. // console.log('handleTaskClick', e.currentTarget.dataset.item);
  297. let item = e.currentTarget.dataset.item || {};
  298. if (item.complete) return;
  299. let url = '';
  300. const taskName = item.taskName;
  301. let tab = false;
  302. // 根据不同任务跳转到不同页面
  303. switch (taskName) {
  304. case '邀请好友':
  305. url = '/invitationCode/index';
  306. break;
  307. case '参与兼职':
  308. case '参加兼职/成长会':
  309. url = '/pages/practicalExperience/practicalExperience';
  310. tab = true;
  311. break;
  312. case '每日签到':
  313. this.handleCheckin();
  314. break;
  315. case '购买会员':
  316. case '开通会员':
  317. url = '/pages/myMember/myMember';
  318. break;
  319. case '学籍认证':
  320. case '完成学籍认证':
  321. url = '/pages/my/myStudy/myStudy';
  322. break;
  323. case '完善资料':
  324. case '完善个人资料':
  325. url = '/pages/my/myData/myData';
  326. break;
  327. case '参与活动':
  328. url = '/pages/experience/index/index';
  329. break;
  330. case '评价':
  331. break;
  332. case '分享小程序':
  333. break;
  334. case '观看广告':
  335. this.showRewardedVideoAd();
  336. break;
  337. }
  338. if (taskName.indexOf('观看广告') != -1) {
  339. console.log('showInterstitialAd')
  340. // this.showInterstitialAd();
  341. return
  342. }
  343. // console.log('url', url)
  344. if (url == '') return;
  345. if (tab) {
  346. wx.switchTab({
  347. url: url,
  348. });
  349. } else {
  350. wx.navigateTo({
  351. url: url,
  352. });
  353. }
  354. },
  355. //统计积分(每日小程序分享)
  356. addScore: function() {
  357. if(!util.getUserId()){
  358. return ;
  359. }
  360. wx.showLoading({
  361. title: '努力加载中...',
  362. })
  363. App._post_form('scoreStu/share', "", {
  364. stuId: util.getUserId()
  365. }, function(res) {
  366. if (res.code === 0) {}
  367. })
  368. },
  369. /**
  370. * 用户点击右上角分享
  371. */
  372. onShareAppMessage() {
  373. this.addScore();
  374. // console.log('分享==============');
  375. return {
  376. title: '每日签到',
  377. path: '/pages/home/index/index',
  378. desc: '',
  379. }
  380. },
  381. // 广告观看完毕,获取积分
  382. addWatchAds() {
  383. const userId = util.getUserId();
  384. let _this = this;
  385. // TODO: 调用签到API
  386. App._post_form(
  387. 'scoreStu/watchAds',
  388. 'application/json',
  389. {
  390. stuId: userId
  391. },
  392. async (res) => {
  393. if (res.code === 0) {
  394. _this.loadList();
  395. }
  396. }
  397. );
  398. },
  399. /**
  400. * 查看广告
  401. * */
  402. showRewardedVideoAd: function (e) {
  403. console.log('showRewardedVideoAd')
  404. this.selectComponent('.uni-rewarded-video-ad').show();
  405. },
  406. onadload: function (e) {
  407. console.log('广告加载成功:', e)
  408. },
  409. onadclose: function (e) {
  410. const detail = e.detail;
  411. console.log("onClose-播放结束:" + detail)
  412. // 用户点击了【关闭广告】按钮
  413. if (detail && detail.isEnded) {
  414. // 正常播放结束
  415. console.log("onClose-正常播放结束:" + detail.isEnded);
  416. this.addWatchAds();
  417. } else {
  418. // 播放中途退出
  419. console.log("onClose-播放中途退出:" + detail.isEnded);
  420. }
  421. },
  422. onaderror: function (e) {
  423. // 广告加载失败
  424. console.log('广告加载失败:', e.detail)
  425. }
  426. });