index_1874359642.js 10 KB

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