index.js 8.9 KB

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