index.ts 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275
  1. // index.ts
  2. import dayjs from 'dayjs'
  3. import HomeApi from '../../services/home'
  4. import Navi from '../../utils/navi'
  5. import GoodApi from '../../services/good'
  6. import { weburl } from '../../utils/http'
  7. // 获取应用实例
  8. // const app = getApp<IAppOption>()
  9. const collapse = ['900rpx', '1466rpx']
  10. const windowWidth = wx.getSystemInfoSync().windowWidth
  11. Page({
  12. data: {
  13. loading: false,
  14. successload: 0,
  15. swipewidth: windowWidth,
  16. moveicon: {
  17. name: 'chevron-down',
  18. },
  19. albumInput: {
  20. skipCount: 0,
  21. maxResultCount: 10,
  22. },
  23. albums: [] as any[],
  24. albumTotal: 0,
  25. loadMoreStatus: 0,
  26. swipeHeight: collapse[1],
  27. movecls: 'zoom',
  28. homeCarousels: [] as WxCarouselListItemDto[],
  29. homeCategories: [] as WxAlbumCategoryItemDto[],
  30. homeDisplays: [] as WxDisplayListItemDto[],
  31. homeActives: [] as any[],
  32. marqueeShow: true,
  33. marquee: {
  34. speed: 60,
  35. loop: -1,
  36. delay: 0,
  37. },
  38. current: 1,
  39. autoplay: true,
  40. duration: 500,
  41. interval: 5000,
  42. gutter: [10, 50],
  43. motto: 'Hello World',
  44. mottoEx: '',
  45. userInfo: {},
  46. hasUserInfo: false,
  47. today: dayjs().add(1, 'day').isAfter(dayjs()),
  48. canIUse: wx.canIUse('button.open-type.getUserInfo'),
  49. canIUseGetUserProfile: false,
  50. canIUseOpenData:
  51. wx.canIUse('open-data.type.userAvatarUrl') && wx.canIUse('open-data.type.userNickName'), // 如需尝试获取用户信息可改为false
  52. },
  53. // 事件处理函数
  54. //bindViewTap() {
  55. // getApp<IAppOption>().globalData.hasTicket = true
  56. // wx.navigateTo({
  57. // url: '../logs/logs',
  58. // })
  59. // buses.emit('login', 'ray')
  60. // buses.emit('enter', 'ray lee')
  61. //},
  62. loadRecommend(rest = false) {
  63. console.log('next')
  64. this.setData({
  65. loadMoreStatus: 1,
  66. })
  67. GoodApi.GetHomeRecommend(this.data.albumInput as any).then((rsp) => {
  68. if (rsp.result) {
  69. const result = rsp.result as any
  70. const { items = [] } = result
  71. const nowItems = rest ? items : this.data.albums.concat(items)
  72. this.setData({
  73. albums: nowItems as any,
  74. albumTotal: result.totalCount || 0,
  75. loadMoreStatus: nowItems.length === result.totalCount ? 2 : 0,
  76. })
  77. }
  78. })
  79. },
  80. handleReachBottom() {
  81. if (this.data.loadMoreStatus === 0 && this.data.albums.length < this.data.albumTotal) {
  82. this.setData(
  83. {
  84. albumInput: {
  85. ...this.data.albumInput,
  86. skipCount: this.data.albumInput.skipCount + 10,
  87. },
  88. },
  89. () => {
  90. this.loadRecommend()
  91. },
  92. )
  93. }
  94. },
  95. onLoad() {
  96. // watch.call(this, 'motto', (val) => {
  97. // this.setData({
  98. // mottoEx: val + ' watched!',
  99. // })
  100. // })
  101. // @ts-ignore
  102. if (wx.getUserProfile) {
  103. this.setData({
  104. canIUseGetUserProfile: true,
  105. })
  106. }
  107. },
  108. onPullDownRefresh() {
  109. wx.stopPullDownRefresh()
  110. this.onMoveSize()
  111. // if (!this.data.loading) {
  112. // this.load()
  113. // }
  114. },
  115. /**
  116. * 用户点击右上角分享
  117. */
  118. onShareAppMessage(options: { from: 'menu' | 'button'; target: any }) {
  119. console.log(options)
  120. // 设置菜单中的转发按钮触发转发事件时的转发内容
  121. var shareObj = {
  122. title: '欢画线上商城', // 默认是小程序的名称(可以写slogan等)
  123. path: '/pages/index/index', // 默认是当前页面,必须是以‘/'开头的完整路径
  124. imageUrl: weburl + '/share.jpg', //自定义图片路径,可以是本地文件路径、代码包文件路径或者网络图片路径,支持PNG及JPG,不传入 imageUrl 则使用默认截图。显示图片长宽比是 5:4
  125. success(res: { errMsg: string }) {
  126. // 转发成功之后的回调
  127. if (res.errMsg == 'shareAppMessage:ok') {
  128. }
  129. },
  130. fail(res: { errMsg: string }) {
  131. // 转发失败之后的回调
  132. if (res.errMsg == 'shareAppMessage:fail cancel') {
  133. // 用户取消转发
  134. } else if (res.errMsg == 'shareAppMessage:fail') {
  135. // 转发失败,其中 detail message 为详细失败信息
  136. }
  137. },
  138. complete() {
  139. // 转发结束之后的回调(转发成不成功都会执行)
  140. },
  141. }
  142. return shareObj
  143. },
  144. load() {
  145. wx.getUserInfo({
  146. success(res) {
  147. console.log(res)
  148. },
  149. })
  150. this.setData({
  151. loading: true,
  152. successload: 0,
  153. })
  154. const self = this
  155. Promise.all([HomeApi.GetHomeCarousel(), HomeApi.GetHomeCategory(), HomeApi.GetHomeActive()])
  156. .then((rsps) => {
  157. self.setData({
  158. homeCarousels: rsps[0].result,
  159. homeCategories: rsps[1].result,
  160. homeActives: rsps[2].result,
  161. successload: 1,
  162. loading: false,
  163. })
  164. this.loadRecommend()
  165. })
  166. .catch(() => {
  167. this.setData({
  168. loading: false,
  169. successload: 2,
  170. })
  171. })
  172. },
  173. onShow() {
  174. this.getTabBar().init()
  175. this.load()
  176. },
  177. getUserProfile() {
  178. // 推荐使用wx.getUserProfile获取用户信息,开发者每次通过该接口获取用户个人信息均需用户确认,开发者妥善保管用户快速填写的头像昵称,避免重复弹窗
  179. wx.getUserProfile({
  180. desc: '展示用户信息', // 声明获取用户个人信息后的用途,后续会展示在弹窗中,请谨慎填写
  181. success: (res) => {
  182. console.log(res)
  183. this.setData({
  184. userInfo: res.userInfo,
  185. hasUserInfo: true,
  186. })
  187. },
  188. })
  189. },
  190. getUserInfo(e: any) {
  191. // 不推荐使用getUserInfo获取用户信息,预计自2021年4月13日起,getUserInfo将不再弹出弹窗,并直接返回匿名的用户个人信息
  192. console.log(e)
  193. this.setData({
  194. userInfo: e.detail.userInfo,
  195. hasUserInfo: true,
  196. })
  197. },
  198. stringify(e: any) {
  199. return JSON.stringify(e)
  200. },
  201. bindChangeMotto() {
  202. this.setData({
  203. motto: 'hello ' + new Date().getTime(),
  204. })
  205. },
  206. changeGutter() {
  207. const px = Math.round(Math.random() * 100)
  208. this.setData({
  209. gutter: [px, px],
  210. })
  211. },
  212. gotoCate() {
  213. Navi.switchTab({
  214. url: '/pages/goods/category/index',
  215. })
  216. },
  217. gotolist(e: WechatMiniprogram.CustomEvent<{}, {}, { id: string }>) {
  218. Navi.navigateTo({
  219. url: '/pages/goods/list/index?cate=' + e.currentTarget.dataset.id,
  220. })
  221. },
  222. gotoAdvtag(e: WechatMiniprogram.CustomEvent<{}, {}, { tagid: string }>) {
  223. Navi.navigateTo({
  224. url: '/pages/advtag/index?tag=' + e.currentTarget.dataset.tagid,
  225. })
  226. },
  227. gotoLink(e: WechatMiniprogram.CustomEvent<{}, {}, { link: string; mode: string; id: string }>) {
  228. const { link, mode, id } = e.currentTarget.dataset
  229. console.log(mode)
  230. if (mode === 'pics') {
  231. Navi.navigateTo({
  232. url: '/pages/atphotos/index?id=' + id,
  233. })
  234. return
  235. }
  236. Navi.navigateTo({
  237. url: '/pages/outlink/index?url=' + encodeURIComponent(link),
  238. })
  239. },
  240. gotoAlbum(e: WechatMiniprogram.CustomEvent<{}, {}, { link: string; mode: string; id: string }>) {
  241. const { id } = e.currentTarget.dataset
  242. Navi.navigateTo({
  243. url: '/pages/atphotos/index?id=' + id,
  244. })
  245. },
  246. ondragend(e: WechatMiniprogram.CustomEvent<{ scrollLeft: number; velocity: number }>) {
  247. console.log(e.detail.scrollLeft, e.detail.velocity)
  248. // const full = 375
  249. },
  250. onMoveSize() {
  251. if (this.data.swipeHeight === collapse[0]) {
  252. this.setData({
  253. swipeHeight: collapse[1],
  254. movecls: 'zoom',
  255. })
  256. } else {
  257. this.setData({
  258. swipeHeight: collapse[0],
  259. movecls: '',
  260. })
  261. }
  262. },
  263. gotoGoodsDetail(e: WechatMiniprogram.CustomEvent<{ goods: WxCateAlbumItemDto; index: number }>) {
  264. const { goods } = e.detail
  265. Navi.navigateTo({
  266. url: '/pages/goods/detail/index?id=' + goods.id + '&cateid=' + goods.cateId,
  267. })
  268. console.log('click', e)
  269. },
  270. })