index.ux 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233
  1. <template>
  2. <div class="task-page">
  3. <div class="task-banner">
  4. <div class="swiper-container">
  5. <swiper class="swipe-bar" autoplay="true" indicator="false">
  6. <block for="book in bannerList">
  7. <div class="swipe-item">
  8. <image class="cover" src="{{book.banner_url}}" @click="pageRouter(book)"></image>
  9. </div>
  10. </block>
  11. </swiper>
  12. </div>
  13. </div>
  14. <div class="sign-section">
  15. <div class="sign-title" @click="showRules"><text>已连续签到{{signData.signDay}}天</text>
  16. <image src="../../assets/imgs/question.png"></image>
  17. </div>
  18. <text class="sign-desc">连续签到可持续获得高额奖励</text>
  19. <div class="sign-line">
  20. <div class="sign-line__item" for="{{signList}}">
  21. <text class="sign-line__day">{{$item.day}}天</text>
  22. <image src="../../assets/imgs/sign_{{$item.iconType}}.jpg"></image>
  23. <text class="sign-line__fee">{{$item.fee}}书币</text>
  24. </div>
  25. </div>
  26. <text class="sign-button" @click="signToday" if="{{!signData.is_sign}}">
  27. 签到
  28. </text>
  29. <text class="sign-button-disabled" if="{{signData.is_sign}}">
  30. 已签到
  31. </text>
  32. </div>
  33. <div class="task-section">
  34. <div class="task-section__tab">
  35. <text class="{{type=='new'?'on':''}}" @click="changeTab('new')">新手任务</text>
  36. <text class="{{type=='day'?'on':''}}" @click="changeTab('day')">日常福利</text>
  37. </div>
  38. <div class="banner">
  39. <image src="https://cdn-novel.iycdm.com/quickapp/task/day_task.png" show="{{type=='day'}}"></image>
  40. <image src="https://cdn-novel.iycdm.com/quickapp/task/new_task.png" show="{{type=='new'}}"></image>
  41. </div>
  42. <div class="task-section__list">
  43. <div class="list-item" for="{{currentList}}" @click="compeletTask($item.status,$item.type,$item.id,$item.path)">
  44. <image src="{{$item.icon}}" class="icon" />
  45. </image>
  46. <div class="content">
  47. <div><text>{{$item.name}}</text>
  48. <div class="task-award">
  49. <image src="{{$item.icon}}"></image><text>{{$item.value}}<text>
  50. </div>
  51. </div>
  52. <text class="content-desc">{{$item.desc}}</text>
  53. </div>
  54. <text class="button-status {{ $item.status==0 ? 'wait': ($item.status==1 ? 'get' : 'disabled') }}">
  55. {{$item.status==0?'去完成':$item.status==1?'领取':'已领取'}}
  56. </text>
  57. </div>
  58. </div>
  59. </div>
  60. <div class="mask" show="{{showRule}}">
  61. <div class="rule">
  62. <text class="rule-title">签到规则</text>
  63. <text class="detail">1.每7天为一个签到周期,用户连续签满7天,完成一个签到周期,下次签到重新计算签到周期 </text>
  64. <text class="detail">2.用户连续签到获得的奖励更高,若中途漏签,则从第一天开始重新计算签到周期 </text>
  65. </div>
  66. <image src="../../assets/imgs/pop_close.png" class="close-icon" @click="closeRule"></image>
  67. </div>
  68. <div class="mask" if="{{SignSuccess}}">
  69. <div class="sign-banner">
  70. <text class="sign-banner__text"><span>获得</span><span class="orange">{{ currentFee}}</span><span>书币</span></text>
  71. </div>
  72. <image src="../../assets/imgs/pop_close.png" class="close-icon" @click="closeSign"></image>
  73. </div>
  74. </div>
  75. </template>
  76. <script>
  77. import { userTaskList, userAddDsktop, getTaskAward, getSignInfo, noVipSign, taskBook } from "../../api/index";
  78. import router from "@system.router";
  79. import shortcut from "@system.shortcut";
  80. import storage from "@system.storage";
  81. import prompt from '@system.prompt';
  82. export default {
  83. public: {
  84. push_id: ''
  85. },
  86. protected: {
  87. signList: [
  88. ],
  89. currentFee: 0,
  90. signData: {},
  91. showRule: false,
  92. SignSuccess: false,
  93. dayList: [],
  94. newList: [],
  95. type: 'new',
  96. bannerList: [],
  97. isClick: false,
  98. },
  99. computed: {
  100. currentList() {
  101. let curList = this.type == 'new' ? this.newList : this.dayList;
  102. return curList;
  103. },
  104. },
  105. async onInit() {
  106. if (this.push_id) {
  107. await storage.set({ key: "push_id", value: this.push_id });
  108. }
  109. this.getBook();
  110. this.getSignList();
  111. },
  112. onShow() {
  113. this.getTaskList();
  114. },
  115. async getBook() {
  116. let bookList = await taskBook();
  117. this.bannerList = bookList;
  118. },
  119. async getSignList() {
  120. let signList = [];
  121. let signData = await getSignInfo();
  122. signData.reward_list.map((item, idx) => {
  123. signList.push({ day: idx + 1, iconType: idx < signData.sign_day ? 'checked' : 'coin', fee: item })
  124. })
  125. signData.signDay = signData.sign_day;
  126. this.currentFee = signData.reward_list[Number(signData.sign_day)];
  127. this.signList = signList;
  128. this.signData = signData;
  129. },
  130. async getTaskList() {
  131. //每次展示刷新当前任务
  132. let list = await userTaskList().catch((err) => { console.log(err) });
  133. let dayList = list.date_tasks;
  134. let newList = list.new_user_tasks;
  135. //TODO数组处理
  136. this.dayList = dayList;
  137. this.newList = newList;
  138. },
  139. changeTab(type) {
  140. this.type = type;
  141. },
  142. closeRule() {
  143. this.showRule = false;
  144. },
  145. showRules() {
  146. this.showRule = true;
  147. },
  148. signToday() {
  149. noVipSign().then(res => {
  150. this.signList[this.signData.sign_day].iconType = 'checked'
  151. this.SignSuccess = true;
  152. this.signData.signDay++;
  153. this.signData.sign_day++;
  154. this.signData.is_sign = true;
  155. prompt.showToast("恭喜您签到成功!");
  156. })
  157. },
  158. pageRouter(page) {
  159. router.push({
  160. uri: page.redirect_url,
  161. params: {
  162. bid: page.bid,
  163. chapter_id: page.cid
  164. }
  165. })
  166. },
  167. closeSign() {
  168. this.SignSuccess = false;
  169. },
  170. async compeletTask(status, type, id, path) {
  171. if (this.isClick) return false;
  172. this.isClick = true;
  173. if (status == 2) {
  174. this.isClick = false;
  175. return false;
  176. } else if (status == 0) {
  177. this.isClick = false;
  178. this.goTask(type, path)
  179. } else {
  180. let data = await getTaskAward(id);
  181. this.getTaskList();
  182. this.isClick = false;
  183. prompt.showToast("领取成功!");
  184. }
  185. this.isClick = false;
  186. },
  187. goTask(type, path) {
  188. let _self = this;
  189. if (type == 'add_desk') {
  190. shortcut.hasInstalled({
  191. success: ret => {
  192. if (!ret) {
  193. shortcut.install({
  194. message: "添加【追书云】到桌面,方便下次阅读",
  195. success: () => {
  196. prompt.showToast("添加成功!");
  197. userAddDsktop(1).then(res => {
  198. _self.getTaskList();
  199. }).catch(r => {
  200. //TODO 失败后统计上报
  201. });
  202. },
  203. fail: code => {
  204. console.log(code)
  205. }
  206. });
  207. } else {
  208. userAddDsktop(1).then(res => {
  209. _self.getTaskList();
  210. }).catch(r => {
  211. //TODO 失败后统计上报
  212. });
  213. }
  214. }
  215. });
  216. } else if (path && path != '') {
  217. router.push({
  218. uri: path
  219. })
  220. }
  221. }
  222. }
  223. </script>
  224. <style lang="less">
  225. @import "../../assets/less/task.less";
  226. </style>