| | |
| | | import { fetchHome } from '../../services/home/home'; |
| | | import { fetchGoodsList } from '../../services/good/fetchGoods'; |
| | | import Toast from 'tdesign-miniprogram/toast/index'; |
| | | import { |
| | | fetchHome |
| | | } from '../../services/home/home'; |
| | | import moment from 'moment' |
| | | import { |
| | | loginInfo |
| | | } from '../../assets/js/login'; |
| | | const app = getApp() |
| | | Page({ |
| | | data: { |
| | | imgSrcs: [], |
| | | tabList: [], |
| | | goodsList: [], |
| | | goodsListLoadStatus: 0, |
| | | pageLoading: false, |
| | | current: 1, |
| | | autoplay: true, |
| | | duration: '500', |
| | | interval: 5000, |
| | | navigation: { type: 'dots' }, |
| | | swiperImageProps: { mode: 'scaleToFill' }, |
| | | bannerList: [], |
| | | barHeight: '', |
| | | navBarHeight: '', |
| | | searchVal: '', |
| | | isWhite: false, |
| | | userInfo: {}, |
| | | tabList: [], //目录 |
| | | current: 1, //轮播图参数 |
| | | autoplay: true, //轮播图参数 |
| | | duration: '500', //轮播图参数 |
| | | interval: 5000, //轮播图参数 |
| | | navigation: { |
| | | type: 'dots' |
| | | }, //轮播图参数 |
| | | bannerList: [], //轮播图列表 |
| | | specialSubjectList: [], //专题讨论 |
| | | activeItem: 0, //精选课程默认选中 |
| | | courseTypeList: [], //精选课程分类 |
| | | courseList: [], |
| | | bookTypeList: [], //图书类型 |
| | | activeItem1: 0, |
| | | bookTypeData: {}, |
| | | booksList: [], |
| | | readBookList: [], //数字阅读 |
| | | textbookList: [], //数字教材 |
| | | rankingList: [], //排行榜 |
| | | shoppingCartGetId: [], |
| | | baseRefresh: { |
| | | value: false |
| | | } |
| | | }, |
| | | |
| | | goodListPagination: { |
| | | index: 0, |
| | | num: 20, |
| | | }, |
| | | |
| | | privateData: { |
| | | tabIndex: 0, |
| | | }, |
| | | |
| | | onShow() { |
| | | this.getTabBar().init(); |
| | | this.loadHomePage(); |
| | | this.getBannerList() |
| | | |
| | | }, |
| | | |
| | | onLoad() { |
| | | this.init(); |
| | | }, |
| | | const systInfo = wx.getSystemInfoSync(); |
| | | const menu = wx.getMenuButtonBoundingClientRect(); // 胶囊信息 |
| | | const navBarHeight = (menu.top - systInfo.statusBarHeight) * 2 + menu.height; // 导航栏高度 |
| | | this.setData({ |
| | | barHeight: systInfo.statusBarHeight, |
| | | navBarHeight: navBarHeight, |
| | | }); |
| | | |
| | | onReachBottom() { |
| | | if (this.data.goodsListLoadStatus === 0) { |
| | | this.loadGoodsList(); |
| | | // 首页测试登录功能,后续注释 |
| | | // 检查登录状态 |
| | | const token = wx.getStorageSync(app.config.tokenKey) |
| | | if (!token) { |
| | | loginInfo(app, (data) => { |
| | | // 如果不是第一次登录,会执行回调 |
| | | if (data) { |
| | | // 登录成功,自动记录token和用户信息,并返回true |
| | | } else { |
| | | // 出现错误,返回false |
| | | } |
| | | }) |
| | | } else { |
| | | // 如果是第一次登录,会跳转至绑定用户信息页面,填写完用户信息后进行登录并储存token和用户信息,结束后跳转回当前页面(携带页面参数) |
| | | } |
| | | }, |
| | | |
| | | onPullDownRefresh() { |
| | | this.init(); |
| | | }, |
| | | |
| | | init() { |
| | | this.loadHomePage(); |
| | | onReachBottom() {}, |
| | | onPullDownRefresh() { |
| | | this.setData({ |
| | | 'baseRefresh.value': true, |
| | | isWhite: false |
| | | }) |
| | | this.getBannerList(); |
| | | this.init(); |
| | | }, |
| | | init() { |
| | | this.getSubjectList(); |
| | | this.getCourseTypeListList(); |
| | | this.getBookTypeList(); |
| | | this.getReadBookList(); |
| | | this.getTextbookListList(); |
| | | this.getRankingList(); |
| | | |
| | | setTimeout(() => { |
| | | this.setData({ |
| | | 'baseRefresh.value': false, |
| | | }) |
| | | }, 500); |
| | | }, |
| | | |
| | | getBannerList() { |
| | | const list = [] |
| | | app.MG.resource.getItem({ |
| | | path: 'jsek_banner\\jsek_homeBanner', |
| | | fields: { jsek_link: [] }, |
| | | paging: { start: 0, size: 9 } |
| | | path: 'jsek_banner\\jsek_homeBannerApplet', |
| | | fields: { |
| | | jsek_link: [] |
| | | }, |
| | | paging: { |
| | | start: 0, |
| | | size: 9 |
| | | } |
| | | }).then(res => { |
| | | for (let i = 0; i < res.datas.length; i++) { |
| | | const item = res.datas[i] |
| | |
| | | bannerList: list |
| | | }) |
| | | }) |
| | | console.log('轮播图', this.data.bannerList); |
| | | }, |
| | | loadHomePage() { |
| | | wx.stopPullDownRefresh(); |
| | | navToActivityDetail(e) { |
| | | let { |
| | | info |
| | | } = e.currentTarget.dataset |
| | | console.log(info) |
| | | if (info.link) { |
| | | wx.navigateTo({ |
| | | url: info.link, |
| | | }); |
| | | } |
| | | }, |
| | | |
| | | this.setData({ |
| | | pageLoading: true, |
| | | }); |
| | | fetchHome().then(({ swiper, tabList }) => { |
| | | loadHomePage() { |
| | | fetchHome().then(({ |
| | | tabList |
| | | }) => { |
| | | this.setData({ |
| | | tabList, |
| | | imgSrcs: swiper, |
| | | pageLoading: false, |
| | | }); |
| | | this.loadGoodsList(true); |
| | | }); |
| | | }, |
| | | |
| | | tabChangeHandle(e) { |
| | | this.privateData.tabIndex = e.detail; |
| | | this.loadGoodsList(true); |
| | | //点击目录 |
| | | toPages(item) { |
| | | let info = item.target.dataset.info |
| | | if (info.url) { |
| | | if (info.text == "图书服务") { |
| | | wx.switchTab({ |
| | | url: info.url |
| | | }) |
| | | } else { |
| | | wx.navigateTo({ |
| | | url: info.url |
| | | }) |
| | | } |
| | | } else { |
| | | wx.showToast({ |
| | | title: "建设中", |
| | | icon: 'none', |
| | | duration: 2000 |
| | | }) |
| | | } |
| | | }, |
| | | |
| | | onReTry() { |
| | | this.loadGoodsList(); |
| | | }, |
| | | |
| | | async loadGoodsList(fresh = false) { |
| | | if (fresh) { |
| | | wx.pageScrollTo({ |
| | | scrollTop: 0, |
| | | //专题讨论 |
| | | getSubjectList() { |
| | | const obj = { |
| | | storeInfo: "jsek_seminar", |
| | | path: 'jsek_homepageSeminar', |
| | | coverSize: { |
| | | width: 400 |
| | | }, |
| | | paging: { |
| | | start: 0, |
| | | size: 4 |
| | | }, |
| | | filterList: [{ |
| | | value: 'Normal', |
| | | field: 'state' |
| | | }], |
| | | fields: { |
| | | liveTime: [], |
| | | lecturer: [], |
| | | startTime: [], |
| | | jsek_link: [], |
| | | position: [] |
| | | } |
| | | } |
| | | app.MG.store.getProductList(obj).then((res) => { |
| | | res.datas.forEach((item) => { |
| | | item.liveTime = item.liveTime ? moment(item.liveTime).format("MM-DD HH:mm:ss") : ''; |
| | | item.startTime = item.startTime ? moment(item.startTime).format("MM-DD HH:mm:ss") : ''; |
| | | item.price = item.price ? item.price.toFixed(2) : item.price; |
| | | }); |
| | | } |
| | | |
| | | this.setData({ goodsListLoadStatus: 1 }); |
| | | |
| | | const pageSize = this.goodListPagination.num; |
| | | let pageIndex = this.privateData.tabIndex * pageSize + this.goodListPagination.index + 1; |
| | | if (fresh) { |
| | | pageIndex = 0; |
| | | } |
| | | |
| | | try { |
| | | const nextList = await fetchGoodsList(pageIndex, pageSize); |
| | | this.setData({ |
| | | goodsList: fresh ? nextList : this.data.goodsList.concat(nextList), |
| | | goodsListLoadStatus: 0, |
| | | }); |
| | | specialSubjectList: res.datas |
| | | }) |
| | | }) |
| | | }, |
| | | |
| | | this.goodListPagination.index = pageIndex; |
| | | this.goodListPagination.num = pageSize; |
| | | } catch (err) { |
| | | this.setData({ goodsListLoadStatus: 3 }); |
| | | |
| | | //精选课程分类 |
| | | getCourseTypeListList() { |
| | | const data = { |
| | | path: 'jsek_homepageDigitalCourses', |
| | | queryType: '\\', |
| | | searchList: [], |
| | | size: '20', |
| | | start: '0', |
| | | storeRefCode: app.config.digitalCourses, |
| | | sort: { |
| | | type: 'Asc', |
| | | field: 'LinkOrder' |
| | | }, |
| | | filterList: [{ |
| | | value: 'Normal', |
| | | field: 'state' |
| | | }] |
| | | } |
| | | app.MG.store.getStoreChannelList(data).then((res) => { |
| | | if (res.datas && res.datas.length > 0) { |
| | | let dataList = []; |
| | | dataList.push(...res.datas) |
| | | this.setData({ |
| | | courseTypeList: dataList, |
| | | activeItem: 0 |
| | | }) |
| | | this.getCourseList(res.datas[0]) |
| | | } |
| | | }) |
| | | }, |
| | | //精选课程列表 |
| | | getCourseList(item) { |
| | | const obj = { |
| | | storeInfo: "app.config.goodsStore", |
| | | path: item.pathList + '\\' + item.id, |
| | | coverSize: { |
| | | width: 260 |
| | | }, |
| | | paging: { |
| | | start: 0, |
| | | size: 4 |
| | | }, |
| | | filterList: [{ |
| | | value: 'Normal', |
| | | field: 'state' |
| | | }], |
| | | fields: { |
| | | courseLeader: [], |
| | | affiliatedUnit: [], |
| | | publishingUnit: [], |
| | | classHours: [] |
| | | } |
| | | } |
| | | app.MG.store.getProductList(obj).then((res) => { |
| | | res.datas.forEach((item) => { |
| | | item.price = item.price ? item.price.toFixed(2) : item.price; |
| | | }); |
| | | this.setData({ |
| | | courseList: res.datas |
| | | }) |
| | | }) |
| | | }, |
| | | tabChangeHandle(item) { |
| | | let info = this.data.courseTypeList[item.detail.value] |
| | | this.setData({ |
| | | courseList: [] |
| | | }) |
| | | this.getCourseList(info) |
| | | }, |
| | | //图书服务分类 |
| | | getBookTypeList() { |
| | | const data = { |
| | | path: 'jsek_homepageBookService', |
| | | filterList: [{ |
| | | value: 'Normal', |
| | | field: 'state' |
| | | }], |
| | | queryType: '\\', |
| | | searchList: [], |
| | | size: '20', |
| | | start: '0', |
| | | storeRefCode: app.config.goodsStore, |
| | | sort: { |
| | | type: 'Asc', |
| | | field: 'LinkOrder' |
| | | } |
| | | } |
| | | app.MG.store.getStoreChannelList(data).then((res) => { |
| | | if (res.datas && res.datas.length > 0) { |
| | | let dataList = []; |
| | | dataList.push(...res.datas) |
| | | this.setData({ |
| | | bookTypeList: dataList, |
| | | activeItem1: 0, |
| | | bookTypeData: dataList[0], |
| | | }) |
| | | this.getBooksList(dataList[0]) |
| | | } |
| | | }) |
| | | }, |
| | | //图书服务列表 |
| | | getBooksList(item) { |
| | | const obj = { |
| | | storeInfo: app.config.goodsStore, |
| | | path: item.pathList + '\\' + item.id, |
| | | queryType: '*', |
| | | coverSize: { |
| | | width: 150 |
| | | }, |
| | | paging: { |
| | | start: 0, |
| | | size: 6 |
| | | }, |
| | | filterList: [{ |
| | | value: 'Normal', |
| | | field: 'state' |
| | | }], |
| | | fields: { |
| | | author: [] |
| | | } |
| | | } |
| | | app.MG.store.getProductList(obj).then((res) => { |
| | | this.setData({ |
| | | booksList: res.datas, |
| | | }) |
| | | }) |
| | | }, |
| | | //图书服务 |
| | | tabBookClick(item) { |
| | | let info = this.data.bookTypeList[item.detail.value] |
| | | this.setData({ |
| | | bookTypeData: info, |
| | | }) |
| | | this.getBooksList(info) |
| | | }, |
| | | //数字阅读 |
| | | getReadBookList() { |
| | | const obj = { |
| | | storeInfo: app.config.digitalRead, |
| | | path: 'jsek_homepageDigitalReading', |
| | | coverSize: { |
| | | width: 150 |
| | | }, |
| | | paging: { |
| | | start: 0, |
| | | size: 3 |
| | | }, |
| | | filterList: [{ |
| | | value: 'Normal', |
| | | field: 'state' |
| | | }], |
| | | fields: { |
| | | author: [] |
| | | } |
| | | } |
| | | app.MG.store.getProductList(obj).then((res) => { |
| | | this.setData({ |
| | | readBookList: res.datas |
| | | }) |
| | | }) |
| | | }, |
| | | //数字教材 |
| | | getTextbookListList() { |
| | | const obj = { |
| | | storeInfo: app.config.digitalTextbooks, |
| | | path: 'jsek_homepageDigitalTextbooks', |
| | | coverSize: { |
| | | width: 150 |
| | | }, |
| | | paging: { |
| | | start: 0, |
| | | size: 6 |
| | | }, |
| | | filterList: [{ |
| | | value: 'Normal', |
| | | field: 'state' |
| | | }], |
| | | fields: { |
| | | author: [], |
| | | } |
| | | } |
| | | app.MG.store.getProductList(obj).then((res) => { |
| | | res.datas.forEach((item) => { |
| | | item.price = item.price ? item.price.toFixed(2) : item.price; |
| | | }); |
| | | this.setData({ |
| | | textbookList: res.datas |
| | | }) |
| | | }) |
| | | }, |
| | | //获取排行榜 |
| | | getRankingList() { |
| | | const obj = { |
| | | storeInfo: app.config.goodsStore, |
| | | path: '*', |
| | | queryType: '*', |
| | | coverSize: { |
| | | width: 150 |
| | | }, |
| | | paging: { |
| | | start: 0, |
| | | size: 10 |
| | | }, |
| | | fields: { |
| | | author: [], |
| | | }, |
| | | filterList: [{ |
| | | value: 'Normal', |
| | | field: 'state' |
| | | }], |
| | | sort: { |
| | | Name: 'Asc', |
| | | BaseType: '' |
| | | |
| | | goodListClickHandle(e) { |
| | | const { index } = e.detail; |
| | | const { spuId } = this.data.goodsList[index]; |
| | | } |
| | | } |
| | | app.MG.store.getProductList(obj).then((res) => { |
| | | this.setData({ |
| | | rankingList: res.datas |
| | | }) |
| | | }) |
| | | }, |
| | | // 跳转图书详情 |
| | | goDetail(e) { |
| | | const { |
| | | book |
| | | } = e.currentTarget.dataset; |
| | | wx.navigateTo({ |
| | | url: `/pages/goods/details/index?spuId=${spuId}`, |
| | | url: `/packageBookService/pages/bookServices/detail/index?id=${book.id}&name=${book.name}`, |
| | | }); |
| | | }, |
| | | |
| | | goodListAddCartHandle() { |
| | | Toast({ |
| | | context: this, |
| | | selector: '#t-toast', |
| | | message: '点击加入购物车', |
| | | goSubjectDetail(e) { |
| | | const { |
| | | book |
| | | } = e.currentTarget.dataset; |
| | | wx.showToast({ |
| | | title: "建设中", |
| | | icon: 'none', |
| | | duration: 1000 |
| | | }) |
| | | }, |
| | | goCourseDetail(e) { |
| | | const { |
| | | book |
| | | } = e.currentTarget.dataset; |
| | | wx.showToast({ |
| | | title: "建设中", |
| | | icon: 'none', |
| | | duration: 1000 |
| | | }) |
| | | }, |
| | | goReadBookDetail(e) { |
| | | const { |
| | | book |
| | | } = e.currentTarget.dataset; |
| | | wx.navigateTo({ |
| | | url: '/pages/home/digitalRead/index?productId=' + book.id, |
| | | }); |
| | | }, |
| | | |
| | | navToSearchPage() { |
| | | wx.navigateTo({ url: '/pages/goods/search/index' }); |
| | | goTextBookDetail(e) { |
| | | const { |
| | | book |
| | | } = e.currentTarget.dataset; |
| | | wx.showToast({ |
| | | title: "建设中", |
| | | icon: 'none', |
| | | duration: 1000 |
| | | }) |
| | | }, |
| | | |
| | | navToActivityDetail({ detail }) { |
| | | |
| | | const data = this.data.bannerList[detail.index] |
| | | console.log('跳转', data.link); |
| | | // const { index: promotionID = 0 } = detail || {}; |
| | | // wx.navigateTo({ |
| | | // url: `/pages/promotion-detail/index?promotion_id=${promotionID}`, |
| | | // }); |
| | | getShoppingCartList() { |
| | | let query = { |
| | | start: 0, |
| | | size: 999, |
| | | filterList: [], |
| | | searchList: [] |
| | | } |
| | | app.MG.store.getShoppingCartProductList(query).then((res) => { |
| | | let idList = []; |
| | | res.datas.forEach((item) => { |
| | | idList.push(item.saleMethod.id) |
| | | }) |
| | | this.setData({ |
| | | shoppingCartGetId: idList |
| | | }) |
| | | }) |
| | | }, |
| | | }); |
| | | addCart(e) { |
| | | const { |
| | | info |
| | | } = e.currentTarget.dataset; |
| | | wx.showToast({ |
| | | title: "建设中", |
| | | icon: 'none', |
| | | duration: 1000 |
| | | }) |
| | | return; |
| | | if (wx.getStorageSync(app.config.tokenKey)) { |
| | | let query = { |
| | | start: 0, |
| | | size: 999, |
| | | filterList: [], |
| | | searchList: [] |
| | | } |
| | | try { |
| | | if ( |
| | | this.data.shoppingCartGetId.includes( |
| | | info.defaultSaleMethodId |
| | | ) |
| | | ) { |
| | | wx.showToast({ |
| | | title: "该书已在购物车,请勿重复添加空", |
| | | icon: 'none', |
| | | duration: 1000 |
| | | }) |
| | | } else { |
| | | let query = { |
| | | requests: [{ |
| | | saleMethodId: info.defaultSaleMethodId, |
| | | storeEventId: null, |
| | | agentCode: '电子书' |
| | | }] |
| | | } |
| | | const addRes = app.MG.store.addShoppingCart(query) |
| | | if (addRes) { |
| | | wx.showToast({ |
| | | title: "添加成功", |
| | | icon: 'success', |
| | | duration: 1000 |
| | | }) |
| | | } |
| | | this.getShoppingCartList() |
| | | } |
| | | } catch (error) { |
| | | console.error('出错了:', error) |
| | | } |
| | | } |
| | | |
| | | }, |
| | | onMoreGuide(e) { |
| | | let type = e.currentTarget.dataset.info |
| | | if (type == "tushufuwu") { |
| | | let assortCode = ""; |
| | | if (this.data.bookTypeData.name == '高等教育') { |
| | | assortCode = "jsek_higherEducation" |
| | | } |
| | | if (this.data.bookTypeData.name == '职业教育') { |
| | | assortCode = "jsek_vocationalEducation" |
| | | } |
| | | if (this.data.bookTypeData.name == '教师教育') { |
| | | assortCode = "jsek_teacherEducation" |
| | | } |
| | | if (this.data.bookTypeData.name == '少儿教育') { |
| | | assortCode = "jsek_childrenEducation" |
| | | } |
| | | if (this.data.bookTypeData.name == '考试培训') { |
| | | assortCode = "jsek_examTraining" |
| | | } |
| | | if (this.data.bookTypeData.name == '主题出版') { |
| | | assortCode = "jsek_themePublishing" |
| | | } |
| | | if (this.data.bookTypeData.name == '学术著作') { |
| | | assortCode = "jsek_academicWorks" |
| | | } |
| | | if (this.data.bookTypeData.name == '大众读物') { |
| | | assortCode = "jsek_popularReadingMaterials" |
| | | } |
| | | wx.navigateTo({ |
| | | url: '/packageBookService/pages/bookServices/list/index?assorName=' + this.data.bookTypeData.name + '&assortCode=' + assortCode |
| | | }) |
| | | } else if (type == "shuziyuedu") { |
| | | wx.navigateTo({ |
| | | url: '/pages/home/digitalRead/index' |
| | | }) |
| | | } else { |
| | | wx.showToast({ |
| | | title: "建设中", |
| | | icon: 'none', |
| | | duration: 1000 |
| | | }) |
| | | } |
| | | |
| | | }, |
| | | |
| | | |
| | | // 监听滚动条 |
| | | onScroll(e) { |
| | | this.setData({ |
| | | isWhite: true |
| | | }) |
| | | this.setData({ |
| | | isWhite: e.detail.scrollTop > 20 ? true : false |
| | | }) |
| | | }, |
| | | |
| | | onScrollToTop(e) { |
| | | this.setData({ |
| | | isWhite: e.detail.scrollTop > 50 ? true : false |
| | | }) |
| | | }, |
| | | |
| | | onRetrievalPage() { |
| | | |
| | | // 首页测试登录功能,后续注释 |
| | | // 检查登录状态 |
| | | const token = wx.getStorageSync(app.config.tokenKey) |
| | | if (!token) { |
| | | loginInfo(app, (data) => { |
| | | // 如果不是第一次登录,会执行回调 |
| | | if (data) { |
| | | wx.navigateTo({ |
| | | url: '/pages/retrievalPage/index?searchVal=' + this.data.searchVal |
| | | }) |
| | | } else { |
| | | // 出现错误,返回false |
| | | } |
| | | }) |
| | | } else { |
| | | wx.navigateTo({ |
| | | url: '/pages/retrievalPage/index?searchVal=' + this.data.searchVal |
| | | }) |
| | | } |
| | | |
| | | |
| | | }, |
| | | }); |