index.vue 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240
  1. <template>
  2. <view>
  3. <navbar />
  4. <view style="height:92rpx;"></view>
  5. <view class="calendar-box">
  6. <button type="button" @click="open">{{selectedDate===''?todayDate:selectedDate}}
  7. <SvgIcon :size="12" icon-class="third-tone" />
  8. </button>
  9. </view>
  10. <view class="exercise_items_box">
  11. <view class="exercise_items" v-for="(item, index) in pageList" :key="index">
  12. <uni-list>
  13. <uni-list-item thumb="" :title="time_type_list[item.time_type].label.replace('任务', '')+':'+item.name"
  14. :note="item.course_name+'\n\r'+item.time_space_view_txt" showArrow thumb-size="sm" clickable
  15. @click="pageRedirection(item.time_type,item.exercise_share_record_id,item.id)"
  16. :rightText="isEnable(item.is_finished)?'已完成':''" />
  17. </uni-list>
  18. </view>
  19. <!-- <uni-load-more :status="status" :icon-size="14" :content-text="contentText" v-if="pageList.length > 0" /> -->
  20. <view style="height:130rpx;"></view>
  21. </view>
  22. <uni-calendar ref="calendar" class="uni-calendar--hook" :selected="info.selected" :clear-date="info.clear"
  23. :insert="info.insert" @confirm="confirm" @monthSwitch="monthSwitch" />
  24. </view>
  25. </template>
  26. <script>
  27. import {
  28. PageQueryPageQueryMyTaskList,
  29. TaskQueryGetMyTaskList,
  30. GetShareRecordInfo,
  31. SubmitAnswer,
  32. GetMyTaskDailyDistribution
  33. } from '@/api/exercise.js';
  34. import {
  35. isEnable,
  36. answer_mode_list,
  37. time_type_list
  38. } from '@/pages/answer_question/common/data/common.js';
  39. export default {
  40. data() {
  41. return {
  42. isEnable,
  43. answer_mode_list,
  44. time_type_list,
  45. isStudent: this.$store.getters.isStudent,
  46. pageList: [],
  47. taskQueryData: {
  48. time_unit: 'DAY',
  49. date_stamp: '',
  50. time_type: -1,
  51. },
  52. today: new Date(),
  53. selectedDate: '',
  54. showCalendar: false,
  55. info: {
  56. clear: false,
  57. insert: false,
  58. selected: [],
  59. }
  60. }
  61. },
  62. computed: {
  63. todayDate() {
  64. const month = this.today.toLocaleString('default', {
  65. month: 'short'
  66. });
  67. const day = this.today.getDate();
  68. return `${month}${day}日`;
  69. },
  70. // 格式化为 "YYYY-MM-DD"
  71. parseDate() {
  72. // 创建一个 Date 对象
  73. var date = new Date();
  74. // 获取年份、月份和日期
  75. var year = date.getFullYear();
  76. // 月份是从 0 开始的,所以要加 1
  77. var month = (date.getMonth() + 1).toString().padStart(2, '0');
  78. var day = date.getDate().toString().padStart(2, '0');
  79. return `${year}-${month}-${day}`;
  80. },
  81. },
  82. onLoad(options) {
  83. if (options.date) {
  84. this.taskQueryData.date_stamp = options.date;
  85. const date = new Date(options.date);
  86. const month = date.getMonth() + 1; // 月份从 0 开始,所以要加 1
  87. const day = date.getDate();
  88. this.selectedDate = `${month}月${day}日`;
  89. }
  90. this.loadMoreData();
  91. },
  92. methods: {
  93. //加载数据
  94. loadMoreData() {
  95. if (!this.taskQueryData.date_stamp) {
  96. this.taskQueryData.date_stamp = this.parseDate;
  97. }
  98. TaskQueryGetMyTaskList(this.taskQueryData).then((res) => {
  99. if (res.status) {
  100. console.log(res);
  101. this.pageList = res.task_group_list.flatMap(group => group.task_list);
  102. }
  103. });
  104. },
  105. pageRedirection(time_type, exercise_share_record_id, id) {
  106. if (this.isStudent && time_type_list[time_type].label === '练习任务') {
  107. this.getShareRecordInfo(exercise_share_record_id);
  108. } else {
  109. //任务详情页面
  110. uni.navigateTo({
  111. url: '/pages/tabbar/task/TaskDetails?task_id=' + id + '&date=' + this.taskQueryData.date_stamp,
  112. })
  113. }
  114. },
  115. //得到分享记录信息
  116. getShareRecordInfo(exercise_share_record_id) {
  117. GetShareRecordInfo({
  118. 'share_record_id': exercise_share_record_id
  119. }).then((res) => {
  120. if (res.status) {
  121. // 存在答题记录流程同练习,否则去答题
  122. if (isEnable(res.user_answer_record_info.is_exist_answer_record)) {
  123. uni.navigateTo({
  124. url: '/pages/common/AnswerReport?answer_record_id=' + res.user_answer_record_info
  125. .answer_record_id + '&answer_mode=' + res.share_record.answer_mode +
  126. '&exercise_share_record_id=' + res.share_record.exercise_id + '&isTask=true' + '&date=' +
  127. this.taskQueryData.date_stamp
  128. })
  129. } else {
  130. uni.navigateTo({
  131. url: '/pages/answer_question/answer/index?share_record_id=' + exercise_share_record_id +
  132. '&isTask=true' + '&date=' + this.taskQueryData.date_stamp
  133. })
  134. }
  135. }
  136. })
  137. },
  138. open() {
  139. this.$refs.calendar.open();
  140. const date = new Date(this.taskQueryData.date_stamp);
  141. const year = date.getFullYear();
  142. const month = date.getMonth() + 1; // 月份从 0 开始,所以要加 1
  143. let month_stamp = year + '-' + month;
  144. this.getMyTaskDailyDistribution(month_stamp);
  145. },
  146. monthSwitch(e) {
  147. let month_stamp = e.year + '-' + e.month;
  148. this.getMyTaskDailyDistribution(month_stamp);
  149. },
  150. getMyTaskDailyDistribution(month_stamp) {
  151. GetMyTaskDailyDistribution({
  152. 'month_stamp': month_stamp
  153. }).then((res) => {
  154. if (res.status) {
  155. let dates = Object.keys(res);
  156. dates = dates.splice(0, dates.length - 1);
  157. let selected = [];
  158. dates.map(p => {
  159. selected.push({
  160. date: p,
  161. type: "abnormal",
  162. info: ''
  163. })
  164. });
  165. this.info.selected = selected;
  166. }
  167. })
  168. },
  169. confirm(e) {
  170. this.selectedDate = `${parseInt(e.month, 10).toString()}月${e.date}日`;
  171. this.taskQueryData.date_stamp = e.fulldate;
  172. this.loadMoreData();
  173. },
  174. }
  175. }
  176. </script>
  177. <style lang="scss">
  178. .calendar-box {
  179. uni-button {
  180. background-color: #fff;
  181. display: flex;
  182. align-items: center;
  183. justify-content: center;
  184. font-size: 18px;
  185. svg {
  186. padding-left: 10px;
  187. }
  188. }
  189. }
  190. .uni-calendar {
  191. /deep/.uni-calendar--fixed {
  192. bottom: 0;
  193. z-index: 999;
  194. }
  195. }
  196. .exercise_items_box {
  197. height: auto;
  198. padding: 8rpx 16rpx;
  199. .exercise_items {
  200. padding: 8rpx 0;
  201. /deep/ .uni-list {
  202. border-radius: 16rpx !important;
  203. .uni-list-item {
  204. padding: 16rpx 0;
  205. border-radius: 16rpx !important;
  206. .uni-list-item__content-title {
  207. color: #000;
  208. font-weight: 500;
  209. font-size: 36rpx;
  210. }
  211. .uni-list-item__content-note {
  212. font-weight: 400;
  213. font-size: 24rpx;
  214. }
  215. .uni-list-item__extra-text {
  216. color: #3ACB85;
  217. margin-top: -3px;
  218. }
  219. }
  220. .uni-icons {
  221. color: #000 !important;
  222. font-size: 24rpx !important;
  223. }
  224. }
  225. }
  226. }
  227. </style>