index.js 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355
  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. currentDate: new Date(),
  15. currentYear: new Date().getFullYear(),
  16. currentMonth: new Date().getMonth() + 1,
  17. checkedDates: [], // 已签到日期,从服务器或本地存储加载
  18. today: new Date().getDate(), // 今天日期
  19. isCheckedToday: false, // 今天是否已签到
  20. weekdays: ['一', '二', '三', '四', '五', '六', '日'],
  21. calendarDays: [],
  22. tasks: [],
  23. totalScore: 0
  24. },
  25. loadList() {
  26. let that = this;
  27. wx.showLoading({
  28. title: '努力加载中...',
  29. })
  30. App._post_form('scoreTask/list', '', {
  31. stuId: util.getUserId()
  32. },
  33. function (res) {
  34. if (res.code == 0 && res.data) {
  35. // console.log(res);
  36. let list = res.data.dayTask ? [...res.data.dayTask] : [];
  37. let list1 = res.data.infiniteTask ? [...res.data.infiniteTask] : [];
  38. let list2 = res.data.singleTask ? [...res.data.singleTask] : [];
  39. // console.log([...list, ...list1, ...list2]);
  40. let dataList = [...list, ...list1, ...list2].map(v => {
  41. switch (v.taskName) {
  42. case '邀请好友':
  43. v.desc = '邀请好友获得积分';
  44. break;
  45. case '参与兼职':
  46. case '参加兼职/成长会':
  47. v.desc = '参与兼职获得积分';
  48. break;
  49. break;
  50. case '每日签到':
  51. v.desc = '每日签到获得积分';
  52. break;
  53. case '购买会员':
  54. case '开通会员':
  55. v.desc = '开通会员获得积分';
  56. break;
  57. case '学籍认证':
  58. case '完成学籍认证':
  59. v.desc = '学籍认证获得积分';
  60. break;
  61. case '完善资料':
  62. case '完善个人资料':
  63. v.desc = '完善个人资料获得积分';
  64. break;
  65. case '参与活动':
  66. v.desc = '参与活动获得积分';
  67. break;
  68. case '观看广告':
  69. v.desc = '观看广告获得积分';
  70. break;
  71. }
  72. return v
  73. })
  74. that.setData({
  75. tasks: [...dataList]
  76. })
  77. }
  78. })
  79. },
  80. onPointsTap() {
  81. wx.navigateTo({
  82. url: "/pointExchange/pages/center/center?totalScore=" + this.data.totalScore,
  83. });
  84. },
  85. /**
  86. * 查询用户数据根据id
  87. */
  88. getUserInfo() {
  89. let _this = this;
  90. let id = util.getUserId();
  91. let openid = wx.getStorageSync("openid");
  92. if (id) {
  93. let parm = {
  94. id,
  95. };
  96. App._post_form(
  97. "member/apiSelectMeberInfo",
  98. "application/json",
  99. JSON.stringify(parm),
  100. function (res) {
  101. // console.log(res);
  102. if (res.code === 0) {
  103. wx.setStorageSync("USER", res.member);
  104. _this.setData({
  105. userInfo: res.member,
  106. });
  107. // _this.loadUser()
  108. } else {
  109. wx.removeStorageSync("USER");
  110. wx.navigateTo({
  111. url: "/pages/login",
  112. });
  113. }
  114. }
  115. );
  116. } else {
  117. wx.navigateTo({
  118. url: '/pages/login',
  119. })
  120. }
  121. },
  122. loadData() {
  123. let that = this;
  124. App._post_form('scoreStu/totalScore', '', {
  125. stuId: util.getUserId()
  126. },
  127. function (res) {
  128. if (res.code == 0) {
  129. that.setData({
  130. totalScore: res.data
  131. })
  132. }
  133. })
  134. },
  135. /**
  136. * 生命周期函数--监听页面加载
  137. */
  138. onLoad: function (options) {
  139. wx.setNavigationBarTitle({
  140. title: '每日签到'
  141. });
  142. this.loadData();
  143. this.getUserInfo();
  144. this.loadList();
  145. },
  146. /**
  147. * 生命周期函数--监听页面显示
  148. */
  149. onShow: async function () {
  150. // 页面显示时重新加载签到状态
  151. await this.getCheckinHistoryFromServer();
  152. this.loadData();
  153. this.initCalendar();
  154. },
  155. /**
  156. * 下拉刷新
  157. */
  158. onPullDownRefresh: async function () {
  159. await this.getCheckinHistoryFromServer();
  160. this.loadData();
  161. this.initCalendar();
  162. this.getUserInfo();
  163. wx.stopPullDownRefresh();
  164. },
  165. /**
  166. * 从服务器获取签到历史
  167. */
  168. async getCheckinHistoryFromServer() {
  169. const userId = util.getUserId();
  170. wx.showLoading({
  171. title: '加载中...',
  172. mask: true
  173. });
  174. if (!userId) return;
  175. await App._get(
  176. 'user/dayList/' + userId,
  177. {},
  178. (res) => {
  179. wx.hideLoading();
  180. if (res.code === 0) {
  181. // let data = res.data.map(v => {
  182. // return parseInt(v.substr(6, 2));
  183. // })
  184. this.setData({
  185. checkedDates: res.data || []
  186. });
  187. this.initCalendar();
  188. }
  189. }
  190. );
  191. },
  192. /**
  193. * 初始化日历
  194. */
  195. initCalendar() {
  196. // 使用当前系统时间
  197. const date = new Date();
  198. const year = date.getFullYear();
  199. const month = date.getMonth();
  200. const today = date.getDate();
  201. // 获取当月第一天是星期几
  202. const firstDay = new Date(year, month, 1).getDay();
  203. const adjustedFirstDay = firstDay === 0 ? 7 : firstDay; // 将周日从0调整为7
  204. // 获取当月天数
  205. const daysInMonth = new Date(year, month + 1, 0).getDate();
  206. // 生成日历数组
  207. const calendarDays = [];
  208. // 添加空白格子(上个月的日期)
  209. for (let i = 1; i < adjustedFirstDay; i++) {
  210. calendarDays.push({ day: '', isEmpty: true });
  211. }
  212. // 添加当月日期
  213. for (let day = 1; day <= daysInMonth; day++) {
  214. let date1 = `${year}${month + 1 > 9 ? month + 1 : '0' + (month + 1)}${day > 9 ? day : '0' + day}`
  215. calendarDays.push({
  216. day: day,
  217. isEmpty: false,
  218. isToday: day === today,
  219. isChecked: this.data.checkedDates.includes(date1)
  220. });
  221. }
  222. let date1 = `${year}${month + 1 > 9 ? month + 1 : '0' + (month + 1)}${today > 9 ? today : '0' + today}`
  223. // console.log('date1', date1)
  224. // console.log('aaa', calendarDays, this.data.checkedDates.includes(today))
  225. this.setData({
  226. calendarDays,
  227. currentYear: year,
  228. currentMonth: month + 1,
  229. today: today,
  230. isCheckedToday: this.data.checkedDates.includes(date1)
  231. });
  232. },
  233. /**
  234. * 立即签到
  235. */
  236. handleCheckin() {
  237. if (this.data.isCheckedToday) {
  238. wx.showToast({
  239. title: '今日已签到',
  240. icon: 'none'
  241. });
  242. return;
  243. }
  244. wx.showLoading({
  245. title: '签到中...'
  246. });
  247. // 执行签到操作
  248. this.performCheckin();
  249. },
  250. /**
  251. * 执行签到操作
  252. */
  253. performCheckin() {
  254. const userId = util.getUserId();
  255. const currentDate = new Date();
  256. let _this = this;
  257. // TODO: 调用签到API
  258. App._post_form(
  259. 'user/dailySign',
  260. 'application/json',
  261. {
  262. stuId: userId
  263. },
  264. async (res) => {
  265. if (res.code === 0) {
  266. // 积分统计完成
  267. wx.showToast({
  268. title: `签到成功`,
  269. icon: 'success'
  270. });
  271. await _this.getCheckinHistoryFromServer();
  272. this.loadList();
  273. wx.nextTick(() => {
  274. _this.initCalendar();
  275. })
  276. } else {
  277. wx.hideLoading();
  278. wx.showToast({
  279. title: res.message || '签到失败',
  280. icon: 'none'
  281. });
  282. }
  283. }
  284. );
  285. },
  286. /**
  287. * 处理任务点击
  288. */
  289. handleTaskClick(e) {
  290. // console.log('handleTaskClick', e.currentTarget.dataset.item);
  291. let item = e.currentTarget.dataset.item || {};
  292. if (item.complete) return;
  293. let url = '';
  294. const taskName = item.taskName;
  295. let tab = false;
  296. // 根据不同任务跳转到不同页面
  297. switch (taskName) {
  298. case '邀请好友':
  299. url = '/invitationCode/index';
  300. break;
  301. case '参与兼职':
  302. case '参加兼职/成长会':
  303. url = '/pages/practicalExperience/practicalExperience';
  304. tab = true;
  305. break;
  306. case '每日签到':
  307. this.handleCheckin();
  308. break;
  309. case '购买会员':
  310. case '开通会员':
  311. url = '/pages/myMember/myMember';
  312. break;
  313. case '学籍认证':
  314. case '完成学籍认证':
  315. url = '/pages/my/myStudy/myStudy';
  316. break;
  317. case '完善资料':
  318. case '完善个人资料':
  319. url = '/pages/my/myData/myData';
  320. break;
  321. case '参与活动':
  322. url = '/pages/experience/index/index';
  323. break;
  324. case '观看广告':
  325. break;
  326. }
  327. // console.log('url', url)
  328. if (url == '') return;
  329. if (tab) {
  330. wx.switchTab({
  331. url: url,
  332. });
  333. } else {
  334. wx.navigateTo({
  335. url: url,
  336. });
  337. }
  338. },
  339. });