index.ux 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351
  1. <import name="x-book" src="../../components/book/book.ux"></import>
  2. <template>
  3. <div class="task-page">
  4. <div class="task-banner">
  5. <div class="swiper-container">
  6. <swiper class="swipe-bar" autoplay="true" indicator="false">
  7. <block for="book in bannerList">
  8. <div class="swipe-item">
  9. <image
  10. class="cover"
  11. src="{{book.banner_url}}"
  12. @click="pageRouter(book)"
  13. ></image>
  14. </div>
  15. </block>
  16. </swiper>
  17. </div>
  18. </div>
  19. <div class="sign-section">
  20. <div class="sign-title" @click="showRules">
  21. <text>已连续签到{{ signData.signDay }}天</text>
  22. <image src="../../assets/imgs/question.png"></image>
  23. </div>
  24. <text class="sign-desc">连续签到可持续获得高额奖励</text>
  25. <div class="sign-line">
  26. <div class="sign-line__item " for="{{signList}}">
  27. <div class="line__item_wrap">
  28. <text class="sign-line__fee">+{{ $item.fee }}</text>
  29. <image src="../../assets/imgs/sign_{{$item.iconType}}.jpg"></image>
  30. </div>
  31. <text class="sign-line__day">{{ $item.day }}天</text>
  32. </div>
  33. </div>
  34. <text class="sign-button" @click="signToday" if="{{!signData.is_sign}}">
  35. 立即签到
  36. </text>
  37. <text class="sign-button-disabled" if="{{signData.is_sign}}">
  38. 已签到
  39. </text>
  40. </div>
  41. <div class="task-section">
  42. <div class="task-section__list">
  43. <text class="task-section__list_new">新手必做任务</text>
  44. <div
  45. class="list-item"
  46. for="{{newList}}"
  47. @click="compeletTask($item.status, $item.type, $item.id, $item.path)"
  48. >
  49. <div class="content">
  50. <div>
  51. <text>{{ $item.name }}</text>
  52. <div class="task-award">
  53. <image src="../../assets/imgs/sign_coin.jpg"></image
  54. ><text>+{{ $item.value }}积分</text>
  55. </div>
  56. </div>
  57. <text class="content-desc">{{ $item.desc }}</text>
  58. </div>
  59. <text
  60. class="button-status {{ $item.status==0 ? 'wait': ($item.status==1 ? 'get' : 'disabled') }}"
  61. >
  62. {{
  63. $item.status == 0
  64. ? '去完成'
  65. : $item.status == 1
  66. ? '领取'
  67. : '已领取'
  68. }}
  69. </text>
  70. </div>
  71. </div>
  72. <div class="task-section__list">
  73. <text class="task-section__list_new">日常福利</text>
  74. <div
  75. class="list-item"
  76. for="{{dayList}}"
  77. @click="compeletTask($item.status, $item.type, $item.id, $item.path)"
  78. >
  79. <div class="content">
  80. <div>
  81. <text>{{ $item.name }}</text>
  82. <div class="task-award">
  83. <image src="../../assets/imgs/sign_coin.jpg"></image
  84. ><text>+{{ $item.value }}积分</text>
  85. </div>
  86. </div>
  87. <text class="content-desc">{{ $item.desc }}</text>
  88. </div>
  89. <text
  90. class="button-status {{ $item.status==0 ? 'wait': ($item.status==1 ? 'get' : 'disabled') }}"
  91. >
  92. {{
  93. $item.status == 0
  94. ? '去完成'
  95. : $item.status == 1
  96. ? '领取'
  97. : '已领取'
  98. }}
  99. </text>
  100. </div>
  101. </div>
  102. </div>
  103. <div class="mask" show="{{showRule}}">
  104. <div class="rule">
  105. <text class="rule-title">签到规则</text>
  106. <text class="detail"
  107. >1.每7天为一个签到周期,用户连续签满7天,完成一个签到周期,下次签到重新计算签到周期
  108. </text>
  109. <text class="detail"
  110. >2.用户连续签到获得的奖励更高,若中途漏签,则从第一天开始重新计算签到周期
  111. </text>
  112. </div>
  113. <image
  114. src="../../assets/imgs/pop_close.png"
  115. class="close-icon"
  116. @click="closeRule"
  117. ></image>
  118. </div>
  119. <div class="mask" if="{{SignSuccess}}">
  120. <div class="sign-banner">
  121. <text class="sign-banner__text"
  122. ><span>获得</span><span class="orange">{{ currentFee }}</span
  123. ><span>书币</span></text
  124. >
  125. </div>
  126. <image
  127. src="../../assets/imgs/pop_close.png"
  128. class="close-icon"
  129. @click="closeSign"
  130. ></image>
  131. </div>
  132. </div>
  133. </template>
  134. <script>
  135. import {
  136. userTaskList,
  137. userAddDsktop,
  138. getTaskAward,
  139. getSignInfo,
  140. noVipSign,
  141. taskBook,
  142. getReadrecord
  143. } from '../../api/index'
  144. import router from '@system.router'
  145. import shortcut from '@system.shortcut'
  146. import storage from '@system.storage'
  147. import prompt from '@system.prompt'
  148. import it from "../../helper/interface.js";
  149. export default {
  150. public: {
  151. push_id: '',
  152. send_order_id: ''
  153. },
  154. protected: {
  155. signList: [],
  156. currentFee: 0,
  157. signData: {},
  158. showRule: false,
  159. SignSuccess: false,
  160. dayList: [],
  161. newList: [],
  162. type: 'new',
  163. bannerList: [],
  164. isClick: false,
  165. mockList: []
  166. },
  167. computed: {
  168. currentList() {
  169. let curList = this.type == 'new' ? this.newList : this.dayList
  170. return curList
  171. }
  172. },
  173. async onInit() {
  174. if (this.push_id) {
  175. await storage.set({ key: 'push_id', value: this.push_id })
  176. }
  177. if (this.send_order_id) {
  178. await storage.set({ key: 'send_order_id', value: this.send_order_id })
  179. }
  180. this.getBook()
  181. this.getSignList()
  182. this.getRordList()
  183. },
  184. onShow() {
  185. this.getTaskList()
  186. },
  187. // async getRordList() {
  188. // getReadrecord().then(r => {
  189. // r.map(m => {
  190. // m.cover_url = m.cover
  191. // m.recent_cid = m.cid
  192. // delete m.cover
  193. // delete m.cid
  194. // })
  195. // r.length > 3 ? this.mockList = r.slice(0, 3) : this.mockList = r;
  196. // })
  197. // },
  198. async getBook() {
  199. let bookList = await taskBook()
  200. this.bannerList = bookList
  201. },
  202. async getSignList() {
  203. let signList = []
  204. let signData = await getSignInfo()
  205. signData.reward_list.map((item, idx) => {
  206. signList.push({
  207. day: idx + 1,
  208. iconType: idx < signData.sign_day ? 'checked' : 'coin',
  209. fee: item
  210. })
  211. })
  212. signData.signDay = signData.sign_day
  213. this.currentFee = signData.reward_list[Number(signData.sign_day)]
  214. this.signList = signList
  215. this.signData = signData
  216. },
  217. async getTaskList() {
  218. //每次展示刷新当前任务
  219. let list = await userTaskList().catch(err => {
  220. console.log(err)
  221. })
  222. let dayList = list.date_tasks
  223. let newList = list.new_user_tasks
  224. //TODO数组处理
  225. this.dayList = dayList
  226. this.newList = newList
  227. },
  228. // changeTab(type) {
  229. // this.type = type;
  230. // },
  231. closeRule() {
  232. this.showRule = false
  233. },
  234. showRules() {
  235. this.showRule = true
  236. },
  237. goMore() {
  238. router.push({ uri: '/views/Index?curPage=1' })
  239. },
  240. signToday() {
  241. noVipSign().then(res => {
  242. this.signList[this.signData.sign_day].iconType = 'checked'
  243. this.SignSuccess = true
  244. this.signData.signDay++
  245. this.signData.sign_day++
  246. this.signData.is_sign = true
  247. prompt.showToast('恭喜您签到成功!')
  248. })
  249. },
  250. pageRouter(page) {
  251. router.push({
  252. uri: page.redirect_url,
  253. params: {
  254. bid: page.bid,
  255. chapter_id: page.cid
  256. }
  257. })
  258. },
  259. closeSign() {
  260. this.SignSuccess = false
  261. },
  262. async compeletTask(status, type, id, path) {
  263. if (this.isClick) return false
  264. this.isClick = true
  265. if (status == 2) {
  266. this.isClick = false
  267. return false
  268. } else if (status == 0) {
  269. this.isClick = false
  270. this.goTask(type, path)
  271. } else {
  272. let data = await getTaskAward(id)
  273. this.getTaskList()
  274. this.isClick = false
  275. prompt.showToast('领取成功!')
  276. }
  277. this.isClick = false
  278. },
  279. onBackPress() {
  280. this.getLastpage();
  281. return true
  282. },
  283. goTask(type, path) {
  284. let _self = this
  285. if (type == 'add_desk') {
  286. shortcut.hasInstalled({
  287. success: ret => {
  288. if (!ret) {
  289. shortcut.install({
  290. message: '添加【'+it.getAppName()+'】到桌面,方便下次阅读',
  291. success: () => {
  292. prompt.showToast('添加成功!')
  293. userAddDsktop(1)
  294. .then(res => {
  295. _self.getTaskList()
  296. })
  297. .catch(r => {
  298. //TODO 失败后统计上报
  299. })
  300. },
  301. fail: code => {
  302. console.log(code)
  303. }
  304. })
  305. } else {
  306. userAddDsktop(1)
  307. .then(res => {
  308. _self.getTaskList()
  309. })
  310. .catch(r => {
  311. //TODO 失败后统计上报
  312. })
  313. }
  314. }
  315. })
  316. } else if (path && path != '') {
  317. router.push({
  318. uri: path
  319. })
  320. }
  321. },getLastpage(){
  322. let backPage = {};
  323. try{
  324. let page = router.getState();
  325. let allPage = router.getPages();
  326. // console.log('page = ',page,'all pages',allPage,'length',allPage.length);
  327. for(var k = allPage.length -1; k >= 0;k--){
  328. if(allPage[k].name != page.name && allPage[k].name != "views/Phone" && allPage[k].name != "views/Pay" && allPage[k].name != "views/Activity"){
  329. backPage = allPage[k];
  330. break;
  331. }
  332. }
  333. } catch(e){
  334. backPage = {};
  335. // console.log('back err',e);
  336. }
  337. // console.log(backPage,backPage.length,typeof backPage);
  338. if(JSON.stringify(backPage) === '{}'){
  339. router.replace({ uri: "/views/Index" });
  340. }else{
  341. router.back(backPage);
  342. }
  343. return true;
  344. }
  345. }
  346. </script>
  347. <style lang="less">
  348. @import '../../assets/less/task.less';
  349. </style>