Merge refs/remotes/origin/master into refs/heads/master
| | |
| | | methods: { |
| | | onChange(event) { |
| | | this.setData({ active: event.detail.value }); |
| | | console.log(this.data.active); |
| | | wx.switchTab({ |
| | | url: this.data.list[event.detail.value].url.startsWith('/') |
| | | ? this.data.list[event.detail.value].url |
| | |
| | | <view class="custom-tab-bar-wrapper"> |
| | | <!-- <t-icon prefix="wr" name="{{item.icon}}" size="48rpx" /> |
| | | <view class="text">{{ item.text }}</view> --> |
| | | <t-image wx:if="{{active !== index}}" class="tabImg" src="{{item.icon}}" mode="heightFix" width="22" height="22" /> |
| | | <t-image wx:else class="tabImg" src="{{item.activeIcon}}" mode="heightFix" width="22" height="22" /> |
| | | <!-- <t-image wx:if="{{active !== index}}" class="tabImg" src="{{item.icon}}" mode="heightFix" width="22" height="22" /> |
| | | <t-image wx:else class="tabImg" src="{{item.activeIcon}}" mode="heightFix" width="22" height="22" /> --> |
| | | <t-image class="tabImg" src="{{active == index ? item.activeIcon : item.icon}}" width="22" height="22"></t-image> |
| | | <view class="text">{{ item.text }}</view> |
| | | </view> |
| | | </t-tab-bar-item> |
| | |
| | | const util = require('./components/util') // 引入封装过的加载提示 |
| | | const app = getApp() |
| | | Component({ |
| | | // checked: false, |
| | | |
| | | properties: { |
| | | treeList: { |
| | | type: Array, |
| | |
| | | }, |
| | | data: { |
| | | activeValues: [0], |
| | | webpageSrc: '' |
| | | webpageSrc: '', |
| | | cloudShoppingCart: [] |
| | | }, |
| | | onShow() { |
| | | |
| | |
| | | methods: { |
| | | // 节点展开 |
| | | handleChange(e) { |
| | | // console.log(this.properties.treeList, 'this.properties.treeList'); |
| | | this.setData({ |
| | | activeValues: e.detail.value, |
| | | }); |
| | | console.log('传递', this.properties.buyIds); |
| | | // console.log('传递', this.properties.buyIds); |
| | | }, |
| | | handleCheck(data) { |
| | | for (let index = 0; index < data.length; index++) { |
| | |
| | | // 跳转音视频播放器 |
| | | goPlayer(e) { |
| | | console.log(e); |
| | | debugger |
| | | // debugger |
| | | const item = e.currentTarget.dataset.item |
| | | const parent = e.currentTarget.dataset.parent |
| | | let url |
| | |
| | | result.push(...item.children); |
| | | } |
| | | } |
| | | console.log(this.properties.treeList); |
| | | console.log(this.properties.treeList, 'this.properties.treeList'); |
| | | this.properties.treeList.forEach(item => { |
| | | findChildren(item); |
| | | }); |
| | |
| | | }, |
| | | // 拿到当前项子项 |
| | | flattenTree(tree) { |
| | | |
| | | let result = []; |
| | | |
| | | function flatten(node) { |
| | | |
| | | result.push(node); |
| | | |
| | | if (node.children && node.children.length > 0) { |
| | | |
| | | node.children.forEach(child => { |
| | | flatten(child); |
| | | }); |
| | | } |
| | | } |
| | | tree.forEach(node => { |
| | | |
| | | flatten(node); |
| | | }); |
| | | // console.log(result, 'result'); |
| | | return result |
| | | }, |
| | | |
| | | |
| | | |
| | | findAndUpdateItemById(tree, id) { |
| | | function findAndUpdate(node) { |
| | | if (node.id === id) { |
| | |
| | | }, |
| | | // 变为true |
| | | findAndUpdateItemsByIds(tree, ids) { |
| | | |
| | | function findAndUpdate(node) { |
| | | |
| | | if (ids.includes(node.id)) { |
| | | node.checked = true; // 将目标项的 check 属性设置为 true |
| | | // console.log(node, 'node'); |
| | | node.checked = !node.checked // 将目标项的 check 属性设置为 true |
| | | } |
| | | if (node.children && node.children.length > 0) { |
| | | for (let child of node.children) { |
| | |
| | | } |
| | | |
| | | for (let node of tree) { |
| | | |
| | | findAndUpdate(node); // 对每个顶层节点执行查找和更新操作 |
| | | } |
| | | // console.log(tree, 'tree345'); |
| | | return tree; // 返回修改后的完整数组 |
| | | }, |
| | | |
| | | // 章节勾选 |
| | | checkResourceTitle(e) { |
| | | // 这个时候checked的值是fals |
| | | const item = e.currentTarget.dataset.item |
| | | console.log(item, 'item'); |
| | | |
| | | let list = this.flattenTree([item]) |
| | | |
| | | |
| | | let ids = [] |
| | | list.forEach(item => { |
| | | ids.push(item.id) |
| | | }) |
| | | const tab = this.findAndUpdateItemsByIds([item], ids) |
| | | console.log(ids, tab); |
| | | } |
| | | |
| | | const updatedTreeList = this.findAndUpdateItemsByIds(this.properties.treeList, ids); |
| | | // console.log(updatedTreeList, 'updatedTreeList'); //这个时候checked的值就变成了true |
| | | |
| | | this.setData({ |
| | | treeList: updatedTreeList // 更新 treeList 数据 |
| | | }); |
| | | |
| | | console.log(list, 'list'); |
| | | list.forEach(items => { |
| | | console.log(items.checked, 'itesasd'); |
| | | if (!items.checked) { |
| | | this.setData({ |
| | | cloudShoppingCart: items |
| | | }) |
| | | } |
| | | }) |
| | | |
| | | this.onCloudShoppingCart() |
| | | }, |
| | | // 子项勾选 |
| | | checkResource(e) { |
| | | const item = e.currentTarget.dataset.item |
| | | |
| | | |
| | | // let list = this.flattenTree([item]) |
| | | // console.log(list, 'list121'); |
| | | // let ids = [] |
| | | // list.forEach(items => { |
| | | // console.log(items.id, 'itemsId'); |
| | | // ids.push(items.id) |
| | | // }) |
| | | }, |
| | | // 加入购物车 |
| | | async onCloudShoppingCart() { |
| | | let requests = [] |
| | | const item = this.data.cloudShoppingCart |
| | | console.log(item, 'item'); |
| | | item.forEach((items) => { |
| | | if (items.saleMethod.length) { |
| | | requests.push({ |
| | | saleMethodId: items.saleMethod[0].Id, |
| | | count: 1 |
| | | }) |
| | | } |
| | | }) |
| | | let query = { |
| | | remarks: '云学习', |
| | | requests |
| | | } |
| | | // 查询订单 |
| | | let initOrderRes = await app.MG.store.initOrder(query) |
| | | let parameter = { |
| | | orderNum: initOrderRes.orderNumber |
| | | } |
| | | const confirmOrderRes = await app.MG.store.confirmOrder(parameter) |
| | | // if (confirmOrderRes.orderNumber) { |
| | | // wx.navigateTo({ |
| | | // url: `/pages/cart/paymentPage/index?orderNumber=${confirmOrderRes.orderNumber}`, |
| | | // }) |
| | | // requests = [] |
| | | // } |
| | | }, |
| | | }, |
| | | onCloudShoppingCart() { |
| | | console.log(this.properties.treeList); |
| | | }, |
| | | oncheckbox() { |
| | | console.log(111); |
| | | }, |
| | | logdata(e) { |
| | | console.log(e); |
| | | } |
| | | }) |
| | |
| | | <view slot="header" class="header-title"> |
| | | <view wx:if="{{tab == 'jsek_cloudLearning'}}"> |
| | | <t-checkbox icon="rectangle" checked="{{item.checked}}" data-item="{{item}}" bind:change="checkResourceTitle" /> |
| | | <!-- <t-checkbox icon="rectangle" checked="{{true}}" data-item="{{item}}" bind:change="checkResourceTitle" /> --> |
| | | |
| | | </view> |
| | | <text>{{item.name}}</text> |
| | | </view> |
| | |
| | | <!-- // 判断 无子项 且为商品item 直接显示 --> |
| | | <view class="listItems" wx:if="{{citem.childrenFolderCount <= 0 && citem.type == 'productItem'}}"> |
| | | <view class="itemsInfo" wx:if="{{citem.name}}" data-item="{{citem}}" data-index="{{cindex}}"> |
| | | <view class="contentBox" bind:tap="goPlayer" data-item="{{citem}}" data-parent="{{item}}" > |
| | | <view class="contentBox" bind:tap="goPlayer" data-item="{{citem}}" data-parent="{{item}}"> |
| | | <!-- 教学资源 云学习 图标 --> |
| | | <view class="box-image" style="{{ tab == 'jsek_teachingResources' ? 'width: 350rpx;' : 'width: 450rpx;'}}"> |
| | | <view class="checkBox" wx:if="{{tab == 'jsek_cloudLearning'}}"> |
| | | <!-- checked="{{citem.checked}}" --> |
| | | <t-checkbox icon="rectangle" checked="{{citem.checked}}" disabled="{{citem.selectType=='webpage' || citem.isDownload != 1 || citem.fileMap[citem.file].protectType == 'Private'}}" catch:change="checkResource" data-item="{{citem}}" /> |
| | | <!-- <t-checkbox icon="rectangle" checked="{{citem.checked}}" disabled="{{citem.selectType=='webpage' || citem.isDownload != 1 || citem.fileMap[citem.file].protectType == 'Private'}}" catch:change="checkResource" data-item="{{citem}}" /> --> |
| | | <t-checkbox icon="rectangle" checked="{{citem.checked}}" data-item="{{citem}}" catch:change="checkResource" /> |
| | | </view> |
| | | <!-- 教学资源图标 --> |
| | | <view class="teach-icon"> |
| | |
| | | }) |
| | | this.findChildIds(this.data.teach, this.data.openTeachids = []) |
| | | } else if (type.refCode == 'jsek_cloudLearning') { |
| | | // res.datas.cmsDatas[0].datas.forEach(item => { |
| | | // item.checked = false |
| | | // }) |
| | | // const list = await this.getAllResource(res.datas.cmsDatas[0].datas) |
| | | console.log(list, 'currentlist'); |
| | | res.datas.cmsDatas[0].datas.forEach(item => { |
| | | item.checked = false |
| | | }) |
| | | const list = await this.getAllResource(res.datas.cmsDatas[0].datas) |
| | | console.log(list, 'list'); |
| | | this.setData({ |
| | | learn: list, |
| | | loading: false |
| | |
| | | async allAddShoppiingCar() { |
| | | const child = this.selectComponent('#learn-resource') |
| | | const token = wx.getStorageSync('jsek-token') |
| | | if (!token) { |
| | | return wx.getUserProfile({ |
| | | desc: '用户登录', |
| | | success: (res) => { |
| | | console.log(res); |
| | | } |
| | | }) |
| | | } |
| | | // if (!token) { |
| | | // return wx.getUserProfile({ |
| | | // desc: '用户登录', |
| | | // success: (res) => { |
| | | // console.log(res); |
| | | // } |
| | | // }) |
| | | // } |
| | | let shopList = this.handleTreeData(this.data.learn).filter((item) => this.resourceIsBuy(item)) |
| | | this.getShoppingCartProductGet() |
| | | if (!shopList.length) return wx.showToast({ |
| | |
| | | }) |
| | | res = await app.MG.store.initOrder(query) |
| | | } |
| | | |
| | | if (res.orderNumber && this.data.mockData.price) { |
| | | wx.navigateTo({ |
| | | url: `/pages/cart/paymentPage/index?orderNumber=${res.orderNumber}`, |
| | |
| | | this.buyBook() |
| | | } |
| | | else if (this.data.tabValue == 'jsek_cloudLearning') { |
| | | console.log('云学习'); |
| | | const tree = this.selectComponent('#tree') |
| | | |
| | | tree.onCloudShoppingCart() |
| | | |
| | | |
| | | } else if (this.data.tabValue == 'questionBank') { |
| | | this.buyMock() |
| | | } else { |
| | | console.log(this.data.tabValue); |
| | | } |
| | | } |
| | | }, |
| | | |
| | | }) |
| | |
| | | <view class="detail-right"> |
| | | <view class="book-name">{{bookDetail.name}}</view> |
| | | <view class="book-message"> |
| | | <view class="message-li"> |
| | | <view class="message-li" wx:if="{{bookDetail.seriesName}}"> |
| | | <view class="li-title">丛书名:</view> |
| | | <view class="li-content">{{bookDetail.seriesName}}</view> |
| | | </view> |
| | | <view class="message-li"> |
| | | <view class="li-title">作者:</view> |
| | | <view class="li-title" wx:if="{{bookDetail.author}}">作者:</view> |
| | | <view class="li-content">{{bookDetail.author}}</view> |
| | | </view> |
| | | <view class="message-li"> |
| | | <view class="message-li" wx:if="{{bookDetail.isbn}}"> |
| | | <view class="li-title">ISBN:</view> |
| | | <view class="li-content">{{bookDetail.isbn}}</view> |
| | | </view> |
| | | <view class="message-li"> |
| | | <view class="li-title">出版时间:</view> |
| | | <view class="li-title" wx:if="{{bookDetail.publicationDate}}">出版时间:</view> |
| | | <view class="li-content">{{bookDetail.publicationDate}}</view> |
| | | </view> |
| | | <view class="message-li" wx:if="{{bookDetail.class}}" style="height: 80rpx"> |
| | |
| | | <view class="class-name showTow">{{bookDetail.class}}</view> |
| | | </view> |
| | | </view> |
| | | <t-image src="/static/images/bookService/detail/square.png" class="right-background"></t-image> |
| | | </view> |
| | | </view> |
| | | <!-- 销售信息 --> |
| | |
| | | <t-tab-panel label="云学习" value="jsek_cloudLearning" style="{{tabPanelstyle}}"> |
| | | <view wx:if="{{!loading && learn.length}}"> |
| | | <learn-resource bind:getFreeResource="getFreeResource" bind:allAddShoppiingCar="allAddShoppiingCar" id="learn-resource"></learn-resource> |
| | | <tree bookInfo="{{bookDetail}}" tab="{{tabValue}}" treeList="{{learn}}" buyIds="{{buyIdList}}" openLearnids="{{openLearnids}}"></tree> |
| | | <tree id="tree" bookInfo="{{bookDetail}}" tab="{{tabValue}}" treeList="{{learn}}" buyIds="{{buyIdList}}" openLearnids="{{openLearnids}}"></tree> |
| | | </view> |
| | | </t-tab-panel> |
| | | <t-tab-panel label="云测试" value="questionBank" style="{{tabPanelstyle}}"> |
| | |
| | | </view> |
| | | <view class="btn-text">纸质样书申请</view> |
| | | </view> |
| | | <view class="shopCar" bind:tap="addBookShopcCar">加入购物车</view> |
| | | <view class="buy" bind:tap="buyBtn">立即购买</view> |
| | | <view class="shopCar {{tabValue == 'jsek_teachingResources' ? 'disabledColor' : 'shopCarColor' }}" bind:tap="addBookShopcCar">加入购物车</view> |
| | | <view class="buy {{tabValue == 'jsek_teachingResources' ? 'disabledColor' : 'buyColor' }}" bind:tap="buyBtn">立即购买</view> |
| | | </view> |
| | | </scroll-view> |
| | | <!-- 我要建议弹窗 --> |
| | |
| | | margin-right: 36rpx; |
| | | } |
| | | |
| | | .detail-right { |
| | | position: relative; |
| | | } |
| | | |
| | | .right-background { |
| | | position: absolute; |
| | | top: 80rpx; |
| | | right: -80rpx; |
| | | z-index: 0; |
| | | width: 160rpx; |
| | | height: 160rpx; |
| | | } |
| | | |
| | | .detail-right .book-name { |
| | | width: 420rpx; |
| | | font-weight: bold; |
| | |
| | | } |
| | | |
| | | .class-name { |
| | | height: 2.5em; |
| | | height: 2.8em; |
| | | width: 280rpx; |
| | | font-size: 28rpx; |
| | | } |
| | |
| | | color: #fff; |
| | | } |
| | | |
| | | .shopCar { |
| | | .shopCarColor { |
| | | background-color: #F1AC37; |
| | | } |
| | | |
| | | .buy { |
| | | .buyColor { |
| | | background-color: #F14B3B; |
| | | } |
| | | |
| | | .disabledColor { |
| | | background-color: #d9d9d9; |
| | | } |
| | | |
| | | .tab-box { |
| | | min-height: 550rpx; |
| | | } |
| | | |
| | | .note-list { |
| | | /* margin-bottom: 80rpx; */ |
| | | } |
| | | |
| | | .tab-class { |
| | | --td-loading-color: #ff6c00 |
| | |
| | | } else { |
| | | return false |
| | | } |
| | | } else { |
| | | } else if (typeof data == 'object') { |
| | | const answer = data.find((item) => item.length > 0) |
| | | if (answer) { |
| | | return true |
| | | } else { |
| | | return false |
| | | } |
| | | } else { |
| | | return false |
| | | } |
| | | }, |
| | | // 提交逻辑 |
| | |
| | | loading: false, |
| | | }) |
| | | }, |
| | | // 批改题目 (练习,我的错题,我的收藏) |
| | | // 批改题目 (练习,我的错题,我的收藏,,组卷) |
| | | handleQuestion(num) { |
| | | const questionList = this.data.questionDataList |
| | | const index = num - 1 >= 0 ? num - 1 : 0 |
| | |
| | | }, |
| | | // 获取组卷题目列表 |
| | | async getMockDataList(questionList, oldList) { |
| | | console.log(questionList, oldList); |
| | | const questionDataList = this.data.questionDataList |
| | | questionList.forEach(async (pathitem, pathindex) => { |
| | | let itemIds = [] |
| | |
| | | }) |
| | | let questionList = [] |
| | | const cardUpdatedList = this.data.cardList |
| | | // if (flag == this.data.idPathList.length) { |
| | | cardUpdatedList.forEach(aitem => { |
| | | aitem.infoList.forEach((bitem, bindex) => { |
| | | questionList.push(bitem) |
| | |
| | | questionDataList: questionList, |
| | | cardList: cardUpdatedList |
| | | }) |
| | | console.log('组卷题目列表', this.data.questionDataList); |
| | | }) |
| | | }) |
| | | }) |
| | |
| | | bind:onChangeInput="onChangeInput" |
| | | bind:changeSwiper="changeSwiper" |
| | | ></question-list> |
| | | <view class="lodaing-box"> |
| | | <view class="lodaing-box" wx:if="{{loading}}"> |
| | | <t-loading |
| | | theme="circular" |
| | | size="80rpx" |
| | |
| | | <!-- 单选题 --> |
| | | <t-radio-group wx:if="{{item.questionType == 'singleChoice' || item.questionType == 'judge'}}" defaultValue="{{item.userAnswer}}" disabled="{{item.isComplete}}" bind:change="onChangeRadio" class="radio-group" data-value="{{item.option}}" data-id="{{item.id}}"> |
| | | <view wx:for="{{item.option}}" wx:for-item="contentItem" wx:for-index="contentIndex" wx:key="contentIndex"> |
| | | <t-radio value="{{contentItem.value}}" icon="none" placement="right" borderless style="color: {{isNight ? '#fff' : '#000'}}; background-color:{{isNight ? '#000' : '#fff'}}"> |
| | | <view class="radio-item {{item.answer == contentItem.value && item.answer == item.userAnswer ? 'radio-correct' : item.userAnswer == contentItem.value && item.userAnswer != item.answer ?'radio-error' :''}}" style="color: {{isNight ? '#fff' : '#000'}}; background-color:{{isNight ? '#000' : '#fff'}}"> |
| | | <t-radio value="{{contentItem.value}}" icon="none" placement="right" borderless> |
| | | <view class="radio-item {{item.answer == contentItem.value && item.answer == item.userAnswer ? 'radio-correct' : item.userAnswer == contentItem.value && item.userAnswer != item.answer ?'radio-error' :''}}"> |
| | | <!-- 仅文字 --> |
| | | <text wx:if="{{item.optionStyle == 'Txt'}}">{{contentItem.value}}、{{contentItem.txt}}</text> |
| | | <!-- 仅图片 --> |
| | |
| | | <!-- 解析 --> |
| | | <view class="analysis" wx:if="{{item.isComplete}}"> |
| | | <view class="analysis-answer"> |
| | | <view class="answer-correct"> |
| | | <view class="answer-correct answer-center"> |
| | | <text class="analysis-title-box">正确答案:</text> |
| | | <rich-text nodes="{{item.answer}}" style="font-size: 40rpx"></rich-text> |
| | | </view> |
| | | <view class="answer-error"> |
| | | <view class="answer-center marginL {{item.isRight ? 'answer-correct' : 'answer-error'}}" wx:if="{{item.questionType !== 'shortAnswer'}}"> |
| | | <text class="analysis-title-box">您的答案:</text><text class="answer-text">{{item.userAnswer}}</text> |
| | | </view> |
| | | </view> |
| | | <view class="analysis-text" wx:if="{{item.analysisCon}}"> |
| | | <view class="analysis-text" wx:if="{{item.analysisCon}}" style="color: {{isNight ? '#fff' : '#000'}};"> |
| | | 答案解析:<rich-text nodes="{{item.analysisCon}}" class="analysis-content"></rich-text> |
| | | </view> |
| | | </view> |
| | |
| | | /* pages/bookServices/examination/questionList/index.wxss */ |
| | | .question-list { |
| | | width: 100%; |
| | | height: 90%; |
| | | width: 95%; |
| | | height: 86%; |
| | | padding: 20rpx; |
| | | background-color: #ffffff; |
| | | border-radius: 20rpx; |
| | |
| | | |
| | | .analysis-answer { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | /* justify-content: space-between; */ |
| | | } |
| | | |
| | | .answer-correct { |
| | |
| | | color: #EE1818; |
| | | } |
| | | |
| | | .marginL { |
| | | margin-left: 140rpx; |
| | | } |
| | | |
| | | .answer-center { |
| | | display: flex; |
| | | align-items: center; |
| | | } |
| | | |
| | | .answer-text { |
| | | font-size: 40rpx; |
| | | } |
| | |
| | | mockSumTime: { |
| | | type: Number, |
| | | value: 0, |
| | | }, |
| | | isNight: { |
| | | type: Boolean, |
| | | value: false |
| | | } |
| | | }, |
| | | |
| | |
| | | questionCardState: false, |
| | | setUpPopup: false, |
| | | testReportState: false, |
| | | sliderValue: 0, |
| | | sliderValue: 10, |
| | | useTime: '', |
| | | radioItem: 'daytime' |
| | | }, |
| | |
| | | <!--pages/bookServices/examination/questionOptions/index.wxml--> |
| | | <view class="page-bottom"> |
| | | <view class="li-option" bind:tap="setCollect"> |
| | | <view class="page-bottom" style="color: {{isNight ? '#fff' : '#000'}}; background-color:{{isNight ? '#000' : '#fff'}}"> |
| | | <view class="li-option" bind:tap="setCollect" style="color: {{isNight ? '#fff' : '#000'}};"> |
| | | <t-image src="{{ questionDataList[currentIndex].isCollect ? '/static/images/bookService/detail/collecting.png' : '/static/images/bookService/examination/collect.png'}}"> |
| | | </t-image> |
| | | 收藏 |
| | | </view> |
| | | <view class="li-option" bind:tap="handlePopup"> |
| | | <view class="li-option" bind:tap="handlePopup" style="color: {{isNight ? '#fff' : '#000'}};"> |
| | | <t-image src="/static/images/bookService/examination/questionCard.png"></t-image> |
| | | 答题卡 |
| | | </view> |
| | | <view class="li-option" bind:tap="setUpBtn"> |
| | | <view class="li-option" bind:tap="setUpBtn" style="color: {{isNight ? '#fff' : '#000'}};"> |
| | | <t-image src="/static/images/bookService/examination/setting.png"></t-image> |
| | | 设置 |
| | | </view> |
| | | <view class="li-option" bind:tap="resterBtn" wx:if="{{answerType == 'option' || answerType == 'mock'}}"> |
| | | <view class="li-option" bind:tap="resterBtn" wx:if="{{answerType == 'option' || (answerType == 'mock' && !submitStatus)}}" style="color: {{isNight ? '#fff' : '#000'}};"> |
| | | <t-image src="/static/images/bookService/examination/reset.png"></t-image> |
| | | 重做 |
| | | </view> |
| | |
| | | <view class="brightness"> |
| | | <text>A-</text> |
| | | <view class="brightness-slider"> |
| | | <t-slider defaultValue="{{30}}" theme="capsule" /> |
| | | <t-slider value="{{sliderValue}}" theme="capsule" step="{{10}}" bind:change="onChangeSlider" /> |
| | | </view> |
| | | |
| | | <text>A+</text> |
| | |
| | | <view class="card {{radioItem == 'daytime' ? 'card--active' : ''}}"> |
| | | <t-radio value="daytime" icon="none" borderless> |
| | | <view class="radio-content" slot="content"> |
| | | <t-image src="{{ radioItem == 'daytime' ? '/static/images/bookService/detail/practice-icon.png' : '/static/images/bookService/detail/notest.png'}}"></t-image> |
| | | <t-image src="{{ radioItem == 'daytime' ? '/static/images/bookService/examination/rijian.png' : '/static/images/bookService/detail/notest.png'}}"></t-image> |
| | | <text style="color: {{radioItem == 'daytime' ? '#fff':''}};">日间模式</text> |
| | | </view> |
| | | </t-radio> |
| | |
| | | <view class="card {{radioItem == 'night' ? 'card--active' : ''}}"> |
| | | <t-radio value="night" icon="none" borderless> |
| | | <view class="radio-content" slot="content"> |
| | | <t-image src="{{ radioItem == 'night' ? '/static/images/bookService/detail/practice-icon.png' : '/static/images/bookService/detail/notest.png'}}"></t-image> |
| | | <t-image src="{{ radioItem == 'night' ? '/static/images/bookService/detail/practice-icon.png' : '/static/images/bookService/examination/yejian.png'}}"></t-image> |
| | | <text style="color: {{radioItem == 'night' ? '#fff':''}};">夜间模式</text> |
| | | </view> |
| | | </t-radio> |
| | |
| | | |
| | | .brightness-slider { |
| | | width: 80%; |
| | | --td-slider-active-color: #ff6c00; |
| | | } |
| | | |
| | | .test-radio { |
| | |
| | | .test-radio image { |
| | | width: 34rpx; |
| | | height: 34rpx; |
| | | margin-right: 18rpx; |
| | | } |
| | | |
| | | .card { |
| | |
| | | type: String, |
| | | value: '' |
| | | }, |
| | | isNight:{ |
| | | type:Boolean, |
| | | value:false |
| | | isNight: { |
| | | type: Boolean, |
| | | value: false |
| | | } |
| | | }, |
| | | created( |
| | |
| | | } else { |
| | | return false |
| | | } |
| | | } else { |
| | | } else if (typeof data == 'object') { |
| | | const answer = data.find((item) => item.length > 0) |
| | | if (answer) { |
| | | return true |
| | | } else { |
| | | return false |
| | | } |
| | | } else { |
| | | return false |
| | | } |
| | | }, |
| | | // // 格式化时间 |
| | |
| | | loadingProps: { |
| | | size: '50rpx', |
| | | }, |
| | | loading: false, |
| | | noData: false |
| | | }, |
| | | /** |
| | | * 生命周期函数--监听页面加载 |
| | |
| | | * 页面上拉触底事件的处理函数 |
| | | */ |
| | | onReachBottom(e) { |
| | | console.log('底部'); |
| | | const flag = this.data.bookList.length < this.data.pageCount.total |
| | | if (flag) { |
| | | this.setData({ |
| | |
| | | }, |
| | | // 获取图书列表 |
| | | getBookList(path) { |
| | | this.setData({ |
| | | loading: true, |
| | | noData: false |
| | | }) |
| | | let sort; |
| | | let pathObj = {}; |
| | | if (this.data.pathList.length) { |
| | |
| | | this.setData({ |
| | | bookList: res.datas, |
| | | enable: false, |
| | | "pageCount.total": res.total |
| | | "pageCount.total": res.total, |
| | | loading: false |
| | | }); |
| | | console.log('图书列表', res, this.data.pageCount); |
| | | console.log('图书列表', res.datas); |
| | | if (!res.datas.length) { |
| | | this.setData({ |
| | | noData: true |
| | | }) |
| | | } |
| | | }); |
| | | }, |
| | | // 一级分类切换 |
| | |
| | | pathList: pathList, |
| | | 'secondList.value': e.detail.value, |
| | | }); |
| | | |
| | | }, |
| | | // |
| | | onConfirmSecond() { |
| | |
| | | "t-image": "tdesign-miniprogram/image/image", |
| | | "t-search": "tdesign-miniprogram/search/search", |
| | | "t-pull-down-refresh": "tdesign-miniprogram/pull-down-refresh/pull-down-refresh", |
| | | "t-loading": "tdesign-miniprogram/loading/loading" |
| | | "t-loading": "tdesign-miniprogram/loading/loading", |
| | | "t-empty": "tdesign-miniprogram/empty/empty" |
| | | }, |
| | | "navigationStyle": "custom" |
| | | } |
| | |
| | | <view class="bookServices-list"> |
| | | <view class="list-header"> |
| | | <scroll-view scroll-x="{{true}}" class="header-scroll"> |
| | | <t-dropdown-menu> |
| | | <t-dropdown-item options="{{stairList.options}}" value="{{stairList.value}}" bindchange="onChangeStair" /> |
| | | <t-dropdown-menu style="width: 800rpx;"> |
| | | <t-dropdown-item options="{{stairList.options}}" value="{{stairList.value}}" bindchange="onChangeStair" style="background-color: #F6F6F6;" /> |
| | | <t-dropdown-item label="二级" options="{{secondList.options}}" optionsColumns="2" multiple value="{{secondList.value}}" bind:confirm="onConfirmSecond" bind:change="onChangeSecond" /> |
| | | <t-dropdown-item label="重点项目" options="{{majorProjectList.options}}" optionsColumns="2" multiple defaultValue="{{majorProjectList.value}}" bind:confirm="changeMajorProject" bind:reset="resetMajorProject" /> |
| | | <t-dropdown-item label="新形态教材" options="{{newTextBook.options}}" optionsColumns="2" multiple defaultValue="{{newTextBook.value}}" bind:confirm="changeNewText" bind:reset="resetNewText" /> |
| | |
| | | <view class="title-box"></view> |
| | | <view class="title-name">{{assortCheck.name}}</view> |
| | | </view> |
| | | <view class="book-list"> |
| | | <view class="book-box" wx:for="{{bookList}}" wx:key="id" bind:tap="goDetail" data-book="{{item}}"> |
| | | <view class="book-img"> |
| | | <t-image src="{{item.icon}}" width="105" height="145" aria-label="{item.name{}}" /> |
| | | <view class="page-content"> |
| | | <view class="book-list" wx:if="{{!loaidng}}"> |
| | | <view class="book-box" wx:for="{{bookList}}" wx:key="id" bind:tap="goDetail" data-book="{{item}}"> |
| | | <view class="book-img"> |
| | | <t-image src="{{item.icon ? item.icon : '/static/images/default-book-img.png'}}" width="105" height="145" aria-label="{item.name{}}" /> |
| | | </view> |
| | | <view class="book-name book-color">{{ item.name}}</view> |
| | | <view class="book-author book-color">{{item.author}}</view> |
| | | </view> |
| | | <view class="book-name book-color">{{ item.name}}</view> |
| | | <view class="book-author book-color">{{item.author}}</view> |
| | | <view wx:if="{{noData}}" class="noData"> |
| | | <t-empty icon="folder-open" description="暂无数据" /> |
| | | </view> |
| | | </view> |
| | | <!-- loading --> |
| | | <view class="loading-box" wx:if="{{loaidng}}"> |
| | | <t-loading theme="circular" size="60rpx" class="wrapper" loading="{{loaidng}}" wx:if="{{loaidng}}" /> |
| | | </view> |
| | | </view> |
| | | <view class="bottom-box"> |
| | |
| | | height: 80rpx; |
| | | font-size: 28rpx; |
| | | --td-loading-color: #ff6c00 |
| | | } |
| | | |
| | | .loading-box { |
| | | width: 100%; |
| | | height: calc(100vh - 500rpx); |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: center; |
| | | --td-loading-color: #ff6c00; |
| | | } |
| | | |
| | | .noData { |
| | | width: 100%; |
| | | display: flex; |
| | | justify-content: center; |
| | | } |
| | | |
| | | .t-dropdown-menu { |
| | | display: flex; |
| | | align-items: center; |
| | | } |
| | | |
| | | .t-dropdown-menu__item { |
| | | background-color: #F6F6F6; |
| | | border-radius: 80rpx; |
| | | height: 70%; |
| | | margin-left: 20rpx; |
| | | } |
| | |
| | | * 页面的初始数据 |
| | | */ |
| | | data: { |
| | | showDropdown: false, |
| | | noteList: [], |
| | | navBarHeight: '', |
| | | barHeight: '', |
| | |
| | | myAudio.onCanplay(() => { |
| | | myAudio.duration; //必须写,不然获取不到。。。 |
| | | setTimeout(() => { |
| | | console.log(myAudio.duration); |
| | | console.log(myAudio.duration, 'myAudio.duration'); |
| | | this.setData({ |
| | | myAudioDuration: this.format(myAudio.duration), |
| | | myAudioCurrent: this.format(myAudio.currentTime) |
| | |
| | | myAudioPos: position, |
| | | myAudioCurrent: this.format(currentTime) |
| | | }) |
| | | }, |
| | | |
| | | |
| | | toggleDropdown() { |
| | | this.setData({ |
| | | showDropdown: !this.data.showDropdown |
| | | }); |
| | | }, |
| | | smallSpeed() { |
| | | this.setData({ |
| | | speed: 0.5, |
| | | showDropdown: !this.data.showDropdown |
| | | }) |
| | | }, |
| | | centreSpeed() { |
| | | this.setData({ |
| | | speed: 1.5, |
| | | showDropdown: !this.data.showDropdown |
| | | }) |
| | | }, |
| | | bigSpeed() { |
| | | this.setData({ |
| | | speed: 2, |
| | | showDropdown: !this.data.showDropdown |
| | | }) |
| | | }, |
| | | smallSpeeDmultiple() { |
| | | this.setData({ |
| | | speed: 1, |
| | | showDropdown: !this.data.showDropdown |
| | | }) |
| | | } |
| | | |
| | | |
| | | }) |
| | |
| | | "t-textarea": "tdesign-miniprogram/textarea/textarea", |
| | | "t-loading": "tdesign-miniprogram/loading/loading", |
| | | "t-popup": "tdesign-miniprogram/popup/popup", |
| | | "t-slider": "tdesign-miniprogram/slider/slider" |
| | | "t-slider": "tdesign-miniprogram/slider/slider", |
| | | "t-dropdown-menu": "tdesign-miniprogram/dropdown-menu/dropdown-menu", |
| | | "t-dropdown-item": "tdesign-miniprogram/dropdown-item/dropdown-item" |
| | | }, |
| | | "navigationStyle": "custom" |
| | | } |
| | |
| | | |
| | | |
| | | |
| | | |
| | | <view class="audioPlayerBox"> |
| | | <view class="audioBackground" style="background-image: url('/static/images/resourceDetailsMyAudio/video-bg.png');"> |
| | | |
| | | <image src="/static/images/resourceDetailsMyAudio/cd.png" alt="" /> |
| | | </view> |
| | | <!-- 视频播放的按钮 --> |
| | | <view class="bigFunctionBox"> |
| | | |
| | | |
| | | <view class="functionBox"> |
| | | <!-- 左切换 --> |
| | | <!-- <view class="leftSwitchBox color" bind:tap="onLeftSwitch"> |
| | |
| | | <view class="color" style="margin: 0 10rpx;">/</view> |
| | | <view class="duration-time color"> {{myAudioDuration}} </view> |
| | | |
| | | <view class="publicBtn color" style="margin-left:40rpx ; width: 80rpx;" bind:tap="onSpeed"> |
| | | |
| | | <text class="publicText">{{"x "+speed}}</text> |
| | | <!-- bind:tap="onSpeed" --> |
| | | <view class="publicBtn color"> |
| | | <view class="publicText" bind:tap="toggleDropdown"> |
| | | <view> |
| | | {{"x "+speed}} |
| | | </view> |
| | | <t-icon style="margin-top: 10rpx;" wx:if="{{showDropdown}}" name="caret-up-small" size="14" bind:click="onIconTap" /> |
| | | <t-icon style="margin-top: 10rpx;" wx:else name="caret-down-small" size="14" bind:click="onIconTap" /> |
| | | </view> |
| | | <view class="multipleBox" wx:if="{{showDropdown}}"> |
| | | <view wx:if="{{speed != 0.5}}" style="margin: 5rpx 0;" bind:tap="smallSpeed">x0.5</view> |
| | | <view wx:if="{{speed != 1}}" style="margin: 5rpx 0;" bind:tap="smallSpeeDmultiple">x1</view> |
| | | <view wx:if="{{speed != 1.5}}" style="margin: 5rpx 0;" bind:tap="centreSpeed">x1.5</view> |
| | | <view wx:if="{{speed != 2}}" style="margin: 5rpx 0;" bind:tap="bigSpeed">x2</view> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | |
| | | |
| | | </view> |
| | | |
| | | <!-- 标题 --> |
| | | <view class="titleBox">{{titleName}}</view> |
| | | |
| | | <view class="contentBox"> |
| | | <t-tabs defaultValue="{{0}}" bind:change="onTabsChange" bind:click="onTabsClick" t-class="custom-tabs" t-class-content="custom-panel"> |
| | | <!-- 资源列表 --> |
| | |
| | | |
| | | .audioBackground { |
| | | flex: 1; |
| | | background-size: 100% 110%; |
| | | /* background-image: no-repeat; */ |
| | | background-repeat: no-repeat; |
| | | background-position: center center; |
| | | background-size: 100% 100%; |
| | | background-color: #f9f9f9; |
| | | display: flex; |
| | | justify-content: center; |
| | |
| | | |
| | | .t-tabs__item--active { |
| | | color: #FF6C00 !important; |
| | | |
| | | } |
| | | |
| | | .t-tabs__track { |
| | |
| | | |
| | | .audioIconBox { |
| | | /* margin-top: 10rpx; */ |
| | | } |
| | | |
| | | .publicBtn { |
| | | margin-right: 10rpx; |
| | | /* margin-left: 40rpx; */ |
| | | margin-left: 20rpx; |
| | | width: 120rpx; |
| | | position: relative; |
| | | } |
| | | |
| | | .multipleBox { |
| | | position: absolute; |
| | | /* top: 0; */ |
| | | bottom: 60rpx; |
| | | right: 10rpx; |
| | | background-color: #000; |
| | | padding: 15rpx; |
| | | font-size: 25rpx; |
| | | /* padding-bottom: 100rpx; */ |
| | | |
| | | } |
| | | |
| | | |
| | | |
| | | .publicText { |
| | | display: flex; |
| | | |
| | | } |
| | |
| | | onPullDownRefresh() { |
| | | |
| | | }, |
| | | |
| | | onPullDownRefresh() { |
| | | this.data.page.size = 16 //更改显示的值 |
| | | this.bookExhibitionGet(); // 调用方法加载更多数据 |
| | | }, |
| | | /** |
| | | * 页面上拉触底事件的处理函数 |
| | | */ |
| | |
| | | 'page.size': newSize |
| | | }); |
| | | this.bookExhibitionGet(); // 调用方法加载更多数据 |
| | | console.log(1111); |
| | | |
| | | |
| | | |
| | | } |
| | |
| | | "t-icon": "tdesign-miniprogram/icon/icon" |
| | | }, |
| | | "onReachBottomDistance": 200, |
| | | "navigationStyle": "custom" |
| | | "navigationStyle": "custom", |
| | | "enablePullDownRefresh": true |
| | | } |
| | |
| | | |
| | | |
| | | </t-dropdown-menu> |
| | | <view class="sortBox" bind:tap="onSwapRight"> |
| | | <text>排序</text> |
| | | <view class="iconBox"> |
| | | <t-icon class="swapRight" name="swap-right" size="35rpx" color="{{nameSort == 'Asc' ? '#ff6c00' : ''}}" /> |
| | | <t-icon class="swapLeft" name="swap-right" size="35rpx" color="{{nameSort == 'Desc' ? '#ff6c00' : ''}}" /> |
| | | |
| | | |
| | | |
| | | <view class="outsideSortBox"> |
| | | <view class="sortBox" bind:tap="onSwapRight"> |
| | | <text>排序</text> |
| | | <view class="iconBox"> |
| | | <t-icon class="swapRight" name="swap-right" size="35rpx" color="{{nameSort == 'Asc' ? '#ff6c00' : ''}}" /> |
| | | <t-icon class="swapLeft" name="swap-right" size="35rpx" color="{{nameSort == 'Desc' ? '#ff6c00' : ''}}" /> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | |
| | | </view> |
| | | |
| | | <view class="assembleContent"> |
| | |
| | | /* width: 300px; */ |
| | | background-color: #fff; |
| | | /* padding: 16rpx 32rpx; */ |
| | | |
| | | } |
| | | |
| | | .iconBox { |
| | |
| | | .sortBox { |
| | | color: #999999; |
| | | display: flex; |
| | | /* border-bottom: 1px #ededed solid; */ |
| | | align-items: center; |
| | | height: 86rpx; |
| | | width: 195rpx; |
| | | margin-top: 8rpx; |
| | | font-size: 30rpx; |
| | | font-size: 25rpx; |
| | | } |
| | | |
| | | .outsideSortBox { |
| | | width: 96rpx; |
| | | height: 95rpx; |
| | | margin: 0 15rpx; |
| | | box-shadow: 0px 0px 1px 0px rgba(0, 0, 0, 0.16); |
| | | padding: 0 10rpx; |
| | | } |
| | | |
| | | .sortBox text { |
| | | font-family: PingFang SC, PingFang SC; |
| | | font-weight: 400; |
| | | font-size: 25rpx; |
| | | color: #999999; |
| | | } |
| | | |
| | | .titleBox { |
| | | display: flex; |
| | |
| | | height: 54rpx; |
| | | background: #FF6C00; |
| | | border-radius: 0rpx 9rpx 9rpx 0rpx; |
| | | |
| | | } |
| | | |
| | | .titleTextBox { |
| | | |
| | | margin-left: 5px; |
| | | |
| | | width: 150rpx; |
| | | height: 37rpx; |
| | | |
| | | |
| | | } |
| | | |
| | | .classification { |
| | | width: 550rpx; |
| | | /* margin-bottom: 50rpx; */ |
| | | |
| | | margin: 0 30rpx; |
| | | } |
| | | |
| | | .menuBox { |
| | | display: flex; |
| | | height: 75rpx; |
| | | |
| | | } |
| | | |
| | | .assembleContent { |
| | | background-color: #F2F3F8; |
| | | } |
| | | } |
| | | |
| | | /* .t-dropdown-menu__item--active { |
| | | color: #0F1214; |
| | | } */ |
| | | |
| | | .t-dropdown-menu:after, |
| | | .t-dropdown-menu::after { |
| | | height: 0px; |
| | | } |
| | | |
| | | |
| | | .t-dropdown-item__body, |
| | | .t-dropdown-item__footer, |
| | | .t-radio { |
| | | background: #F6F6F6 !important; |
| | | } |
| | | |
| | | .t-dropdown-item__body { |
| | | padding: 40rpx 0; |
| | | } |
| | | |
| | | .t-dropdown-menu__item { |
| | | margin: 10rpx 10rpx 0 10rpx; |
| | | border-radius: 40rpx; |
| | | height: 68rpx; |
| | | background: #F6F6F6 !important; |
| | | } |
| | | |
| | | .t-dropdown-menu__item--active { |
| | | height: 68rpx !important; |
| | | background: #F6F6F6 !important; |
| | | /* border-radius: 40rpx 40rpx 0 0; */ |
| | | } |
| | | |
| | | .t-dropdown-menu__item--active, |
| | | .t-radio__icon--checked, |
| | | .t-checkbox__icon--checked { |
| | | color: #FF6C00 !important |
| | | } |
| | | |
| | | .t-checkbox__icon--disabled { |
| | | color: #c0c4cc !important; |
| | | } |
| | | |
| | | .t-radio--block { |
| | | padding: 20rpx !important; |
| | | } |
| | | |
| | | .t-radio__border { |
| | | height: 0 !important; |
| | | } |
| | | |
| | | /* .t-button--primary { |
| | | color: #fff !important; |
| | | background-color: #FF6C00 !important; |
| | | |
| | | } |
| | | |
| | | .t-button--light { |
| | | color: #fff !important; |
| | | /* background-color: #FF6C00 !important; */ |
| | | /* } */ |
| | | |
| | | /* .menu--t-dropdown-menu::after { |
| | | background-color: var(--td-component-border, var(--td-gray-color-4, #fff)) !important; |
| | | |
| | | } |
| | | */ |
| | |
| | | * 页面的初始数据 |
| | | */ |
| | | data: { |
| | | placeholderstyle: 'font-size:28rpx', |
| | | assortList: [], |
| | | assortCheck: { |
| | | name: '', |
| | | code: '', |
| | | }, |
| | | startList: [], |
| | | startCheck: '', |
| | | |
| | | startCheck: { |
| | | id: '', |
| | | code: '' |
| | | }, |
| | | bookList: [], |
| | | loading: false, |
| | | listLoding: false, |
| | | }, |
| | | |
| | |
| | | * 生命周期函数--监听页面加载 |
| | | */ |
| | | onLoad(options) { |
| | | // this.getAssortList() |
| | | console.log(options); |
| | | this.getAssortList(); |
| | | }, |
| | | |
| | | /** |
| | |
| | | * 生命周期函数--监听页面显示 |
| | | */ |
| | | onShow() { |
| | | this.getAssortList(); |
| | | }, |
| | | |
| | | /** |
| | |
| | | |
| | | // 获取侧边栏列表 |
| | | getAssortList() { |
| | | this.setData({ |
| | | loading: true |
| | | }) |
| | | const query = { |
| | | path: '*', |
| | | filterList: [ |
| | |
| | | const list = res.datas.filter((item) => item.refCode != 'jsek_homepageBookService'); |
| | | this.setData({ |
| | | assortList: list, |
| | | loading: false |
| | | }); |
| | | this.setData({ |
| | | assortCheck: { |
| | |
| | | }); |
| | | }, |
| | | // 侧边栏切换 |
| | | changeAssort(data) { |
| | | changeAssort(e) { |
| | | this.setData({ |
| | | assortCheck: { |
| | | name: data.detail.label, |
| | | code: data.detail.value, |
| | | name: e.detail.label, |
| | | code: e.detail.value, |
| | | }, |
| | | }); |
| | | this.getStairList(data.detail.value); |
| | | this.getStairList(e.detail.value); |
| | | }, |
| | | // 获取一级分类 |
| | | getStairList(path) { |
| | |
| | | }); |
| | | const query = { |
| | | path, |
| | | filterList: [], |
| | | filterList: [ |
| | | { |
| | | value: 'Normal', |
| | | field: 'state' |
| | | } |
| | | ], |
| | | queryType: '\\', |
| | | searchList: [], |
| | | size: '30', |
| | |
| | | sort: { type: 'Asc', field: 'LinkOrder' }, |
| | | }; |
| | | app.MG.store.getStoreChannelList(query).then(async (res) => { |
| | | // 一级分类选中 |
| | | // this.setData({ |
| | | // startCheck: res.datas[0].refCode, |
| | | // }); |
| | | // 获取二级分类 |
| | | for (let index = 0; index < res.datas.length; index++) { |
| | | const item = res.datas[index]; |
| | | item.icon ? item.icon = getPublicImage(item.icon, 58, 72) : item.icon = item.icon |
| | | item.children = await this.getSecondList(item); |
| | | } |
| | | console.log(res.datas); |
| | | // 一级分类赋值 |
| | | this.setData({ |
| | | startList: res.datas, |
| | | listLoding: false, |
| | | 'startCheck.id': res.datas[0].id, |
| | | 'startCheck..code': '' |
| | | }); |
| | | }); |
| | | this.setData({ |
| | | listLoding: false, |
| | | }); |
| | | }, |
| | | |
| | |
| | | let datas; |
| | | const query = { |
| | | path, |
| | | filterList: [], |
| | | filterList: [ |
| | | { |
| | | value: 'Normal', |
| | | field: 'state' |
| | | } |
| | | ], |
| | | queryType: '\\', |
| | | searchList: [], |
| | | size: '30', |
| | |
| | | tabClick(e) { |
| | | const data = e.currentTarget.dataset.tabdata; |
| | | this.setData({ |
| | | startCheck: data.refCode, |
| | | 'startCheck.id': data.id, |
| | | 'startCheck.code': data.refCode, |
| | | }); |
| | | console.log(data); |
| | | }, |
| | |
| | | const tab = e.currentTarget.dataset.tabdata |
| | | const stair = e.currentTarget.dataset.stair |
| | | this.setData({ |
| | | startCheck: tab.refCode |
| | | 'startCheck.id': tab.id, |
| | | 'startCheck.code': tab.refCode |
| | | }) |
| | | if (stair) { |
| | | const secondCode = `${stair.pathLinks[0].linkPath}\\${stair.id}`; |
| | | wx.navigateTo({ |
| | | url: `/packageBookService/pages/bookServices/list/index?assorName=${this.data.assortCheck.name}&assortCode=${this.data.assortCheck.code}&stairCode=${this.data.startCheck}&secondCode=${secondCode}`, |
| | | url: `/packageBookService/pages/bookServices/list/index?assorName=${this.data.assortCheck.name}&assortCode=${this.data.assortCheck.code}&stairCode=${this.data.startCheck.code}&secondCode=${secondCode}`, |
| | | }); |
| | | } else { |
| | | wx.navigateTo({ |
| | |
| | | }, |
| | | navToSearchPage(e) { |
| | | wx.navigateTo({ |
| | | url: `/packageBookService/pages/bookServices/list/index?assorName=${this.data.assortCheck.name}&assortCode=${this.data.assortCheck.code}&stairCode=${this.data.startCheck}&searchValue=${e.detail.value}`, |
| | | url: `/packageBookService/pages/bookServices/list/index?assorName=${this.data.assortCheck.name}&assortCode=${this.data.assortCheck.code}&stairCode=${this.data.startCheck.code}&searchValue=${e.detail.value}`, |
| | | }); |
| | | }, |
| | | }); |
| | |
| | | <view class="page-header"> |
| | | <!-- 搜索框 --> |
| | | <view class="search"> |
| | | <t-search t-class-input="t-search__input" t-class-input-container="t-search__input-container" placeholder="请输入关键词/书名/ISBN/作者" leftIcon="" bind:submit="navToSearchPage" placeholder-class="placeholder" placeholder-style="font-size:28rpx;"> |
| | | <t-search t-class-input="t-search__input" t-class-input-container="t-search__input-container" placeholder="请输入关键词/书名/ISBN/作者" leftIcon="" bind:submit="navToSearchPage" placeholder-style="{{placeholderstyle}}"> |
| | | <t-icon slot="left-icon" prefix="wr" name="search" size="40rpx" color="#bbb" /> |
| | | </t-search> |
| | | </view> |
| | | </view> |
| | | |
| | | <view class="page-container"> |
| | | <view class="side-bar-wrapper"> |
| | | <view class="side-bar-wrapper" wx:if="{{!loading}}"> |
| | | <view class="tab-left"> |
| | | <t-side-bar value="{{assortCheck.code}}" bind:change="changeAssort"> |
| | | <t-side-bar-item wx:for="{{assortList}}" wx:key="id" value="{{item.refCode}}" label="{{item.name}}" badge-props="{{item.badgeProps}}" /> |
| | | </t-side-bar> |
| | | </view> |
| | | <view class="side-bar-content"> |
| | | <!-- 一级分类 --> |
| | | <view class="tab-top"> |
| | | <scroll-view scroll-x="{{true}}" class="myScroll"> |
| | | <view wx:for="{{startList}}" wx:key="id" class="row {{startCheck == item.refCode ? 'tab-active' : ''}}" bind:tap="tabClick" data-tabData="{{item}}">{{item.name}}</view> |
| | | </scroll-view> |
| | | </view> |
| | | <!-- 内容 --> |
| | | <scroll-view scroll-y="{{true}}" class="class-list" scroll-into-view="{{startCheck}}"> |
| | | <view wx:if="{{listLoading}}"> |
| | | <t-loading theme="spinner" size="400rpx" loading="{{listLoading}}"></t-loading> |
| | | <view class="page-right"> |
| | | <!-- 右侧 --> |
| | | <view class="side-bar-content" wx:if="{{!listLoding}}"> |
| | | <!-- 一级分类 --> |
| | | <view class="tab-top"> |
| | | <scroll-view scroll-x="{{true}}" class="myScroll" show-scrollbar="{{false}}"> |
| | | <view wx:for="{{startList}}" wx:key="id" class="row {{startCheck.id == item.id ? 'tab-active' : ''}}" bind:tap="tabClick" data-tabData="{{item}}">{{item.name}}</view> |
| | | </scroll-view> |
| | | </view> |
| | | <view wx:for="{{startList}}" wx:for-item="item" wx:key="item.refCode" id="{{item.refCode}}" class="class-box" wx:if="{{!listLoading}}"> |
| | | <view class="class-name">{{item.name}}</view> |
| | | <view class="class-content"> |
| | | <view wx:for="{{item.children}}" wx:for-item="citem" wx:key="id" class="book-box" bind:tap="goPageList" data-stair="{{citem}}" data-tabData="{{item}}" wx:if="{{item.children.length}}"> |
| | | <image src="{{citem.icon ? citem.icon : '/static/images/bookService/assort/book-img.png'}}" mode="heightFix" /> |
| | | <view class="classify">{{citem.name}}</view> |
| | | </view> |
| | | <view wx:if="{{!item.children.length}}" class="book-box" bind:tap="goPageList" data-tabData="{{item}}"> |
| | | <image src="{{item.icon ? item.icon : '/static/images/bookService/assort/book-img.png'}}" mode="heightFix"></image> |
| | | <text class="classify">全部</text> |
| | | <!-- 内容 --> |
| | | <scroll-view scroll-y="{{true}}" class="class-list" scroll-into-view="{{ 'list' + startCheck.id}}"> |
| | | <view wx:if="{{listLoading}}"> |
| | | <t-loading theme="spinner" size="400rpx" loading="{{listLoading}}"></t-loading> |
| | | </view> |
| | | <view wx:for="{{startList}}" wx:for-item="item" wx:key="item.id" id="{{ 'list' + item.id}}" class="class-box" wx:if="{{!listLoading}}"> |
| | | <view class="class-name">{{item.name}}</view> |
| | | <view class="class-content"> |
| | | <view wx:for="{{item.children}}" wx:for-item="citem" wx:key="id" class="book-box" bind:tap="goPageList" data-stair="{{citem}}" data-tabData="{{item}}" wx:if="{{item.children.length}}"> |
| | | <view class="assort-img"> |
| | | <image src="{{citem.icon ? citem.icon : '/static/images/bookService/assort/book-img.png'}}" mode="heightFix" /> |
| | | </view> |
| | | <view class="classify">{{citem.name}}</view> |
| | | </view> |
| | | <view wx:if="{{!item.children.length}}" class="book-box" bind:tap="goPageList" data-tabData="{{item}}"> |
| | | <view class="assort-img"> |
| | | <image src="{{item.icon ? item.icon : '/static/images/bookService/assort/book-img.png'}}" mode="heightFix"></image> |
| | | </view> |
| | | <text class="classify">全部</text> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | </scroll-view> |
| | | <view class="bottom-box"> |
| | | </view> |
| | | </scroll-view> |
| | | </view> |
| | | <!-- loading --> |
| | | <view class="loading-box" wx:if="{{listLoding}}"> |
| | | <t-loading theme="circular" size="60rpx" class="wrapper" loading="{{listLoding}}" wx:if="{{listLoding}}" /> |
| | | </view> |
| | | </view> |
| | | |
| | | </view> |
| | | <view class="loading-box" wx:if="{{loading}}"> |
| | | <t-loading theme="circular" size="60rpx" class="wrapper" loading="{{loading}}" wx:if="{{loading}}" /> |
| | | </view> |
| | | </view> |
| | |
| | | left: 0; |
| | | width: 100%; |
| | | z-index: 99; |
| | | font-size: 28rpx; |
| | | --td-search-font-size: 28rpx; |
| | | } |
| | | |
| | | .placeholder { |
| | | font-size: 28rpx; |
| | | } |
| | | |
| | | .page-header .t-search__input-container { |
| | | .page-header .search .t-search__input-container { |
| | | font-size: 28rpx !important; |
| | | border-radius: 15rpx !important; |
| | | margin: 0 24rpx; |
| | | height: 64rpx !important; |
| | |
| | | .page-container { |
| | | padding: 120rpx 0 20rpx 0; |
| | | width: 100%; |
| | | height: 90%; |
| | | } |
| | | |
| | | .side-bar-wrapper { |
| | | height: 100%; |
| | | background-color: #f2f3f8; |
| | | display: flex; |
| | | } |
| | | |
| | | .side-bar-content { |
| | | width: 70%; |
| | | width: 100%; |
| | | padding: 0 20rpx; |
| | | } |
| | | |
| | |
| | | |
| | | .class-list { |
| | | /* overflow-y: auto; */ |
| | | height: 72.5vh; |
| | | width: 262px; |
| | | height: calc(100vh - 326rpx); |
| | | width: calc(100vw - 210rpx); |
| | | } |
| | | |
| | | .class-box { |
| | | background-color: #fff; |
| | | margin-bottom: 10rpx; |
| | | margin-bottom: 20rpx; |
| | | padding: 10rpx 12rpx; |
| | | border-radius: 12rpx; |
| | | /* height: 60rpx; */ |
| | | } |
| | | |
| | | |
| | | .class-name { |
| | | padding: 20rpx 0 0 20rpx; |
| | | font-size: 32rpx; |
| | | font-weight: 700; |
| | | } |
| | |
| | | } |
| | | |
| | | .book-box { |
| | | width: 48%; |
| | | margin: 0 10rpx 20rpx 0 |
| | | display: flex; |
| | | flex-direction: column; |
| | | align-items: center; |
| | | width: 50%; |
| | | margin-bottom: 26rpx; |
| | | } |
| | | |
| | | .book-box:nth-child(2n) { |
| | |
| | | |
| | | .book-box image { |
| | | height: 142rpx; |
| | | object-fit: contain; |
| | | object-fit: contain !important; |
| | | } |
| | | |
| | | .classify { |
| | | max-width: 90%; |
| | | white-space: nowrap; |
| | | word-break: break-all; |
| | | display: -webkit-box; |
| | | -webkit-line-clamp: 2; |
| | | -webkit-box-orient: vertical; |
| | | overflow: hidden; |
| | | text-overflow: ellipsis; |
| | | font-size: 14px; |
| | | } |
| | | |
| | | .assort-img { |
| | | width: 116rpx; |
| | | height: 142rpx; |
| | | box-shadow: 0px 3px 6px 1px rgba(0, 0, 0, 0.16); |
| | | margin-bottom: 20rpx; |
| | | } |
| | | |
| | | .page-right { |
| | | width: 100%; |
| | | } |
| | | |
| | | .loading-box { |
| | | width: 100%; |
| | | height: 100%; |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: center; |
| | | --td-loading-color: #ff6c00; |
| | | } |
| | | |
| | | .bottom-box { |
| | | height: 40rpx; |
| | | } |
| | |
| | | }); |
| | | this.shoppingCartGet(); |
| | | }, |
| | | |
| | | onShow() { |
| | | this.shoppingCartGet(); |
| | | }, |
| | | onDelete(e) { |
| | | const item = e.currentTarget.dataset.item; |
| | | app.MG.store.delShoppingCart({ |
| | |
| | | direction: 'column', |
| | | }); |
| | | } |
| | | }, |
| | | onLogin() { |
| | | wx.navigateTo({ |
| | | url: '/pages/testLogin/index' |
| | | }); |
| | | } |
| | | }); |
| | |
| | | <view class="outsideContentBox"> |
| | | <!-- <checkbox-group bindchange="HandelItemChange"> --> |
| | | <view wx:if="{{!shoppingCartData}}" class="noDataBox"> |
| | | <view wx:if="{{shoppingCartData.length <= 0}}" class="noDataBox"> |
| | | <t-empty icon="folder-open" description="暂无数据" font-size="80" /> |
| | | |
| | | </view> |
| | | <!-- <button bind:tap="onLogin"> 去登录</button> --> |
| | | <t-swipe-cell wx:for="{{shoppingCartData}}" wx:key="index" wx:for-item="item" wx:for-index="index"> |
| | | |
| | | |
| | | |
| | | |
| | | <!-- <view class="contentBox"> --> |
| | | <!-- <view class="contentCheckbox"> |
| | | <checkbox value="{{item.id}}" checked="{{item.checked}}"></checkbox> |
| | |
| | | </view> |
| | | <view slot="right" class="btn delete-btn" bind:tap="onDelete" data-item="{{item}}">删除</view> |
| | | </t-swipe-cell> |
| | | |
| | | </view> |
| | | |
| | | <view class="bottomBox"> |
| | |
| | | purchasedIds: [], |
| | | productList: [], |
| | | payPrice: '', |
| | | drawQrcodeText: 'https://www.baidu.com/', |
| | | orderGoods: '', |
| | | |
| | | |
| | | confirmBtn: { content: '确定', variant: 'base' }, |
| | | dialogKey: 'false', |
| | | |
| | | }, |
| | | |
| | | /** |
| | | * 生命周期函数--监听页面加载 |
| | | */ |
| | | onLoad(options) { |
| | | |
| | | const systInfo = wx.getSystemInfoSync(); |
| | | const menu = wx.getMenuButtonBoundingClientRect(); // 胶囊信息 |
| | | const navBarHeight = (menu.top - systInfo.statusBarHeight) * 2 + menu.height; // 导航栏高度 |
| | |
| | | selectedIds: options.selectedIds |
| | | }) |
| | | console.log('接收到的订单号:', this.data.orderNumber); |
| | | |
| | | |
| | | this.getOrderByOrderNum() |
| | | |
| | | |
| | | |
| | | |
| | | drawQrcode({ |
| | | |
| | | width: 200, // 必须,二维码宽度,与canvas的width保持一致 |
| | | |
| | | height: 200, // 必须,二维码高度,与canvas的height保持一致 |
| | | |
| | | canvasId: 'myQrcode', |
| | | |
| | | background: '#ffffff', // 非必须,二维码背景颜色,默认值白色 |
| | | |
| | | foreground: '#2bb15e', // 非必须,二维码前景色,默认值黑色 '#000000' |
| | | |
| | | // ctx: wx.createCanvasContext('myQrcode'), // 非必须,绘图上下文,可通过 wx.createCanvasContext('canvasId') 获取,v1.0.0+版本支持 |
| | | |
| | | text: this.data.drawQrcodeText, // 必须,二维码内容 |
| | | // v1.0.0+版本支持在二维码上绘制图片 |
| | | |
| | | image: { |
| | | // imageResource: '../../images/icon.png', // 指定二维码小图标 |
| | | dx: 70, |
| | | dy: 70, |
| | | dWidth: 60, |
| | | dHeight: 60 |
| | | } |
| | | }) |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | }, |
| | | |
| | | /** |
| | |
| | | orderNum: this.data.orderGoods |
| | | } |
| | | app.MG.store.confirmOrder(query).then(res => { |
| | | this.makeWeChatQrPayGet() |
| | | console.log(res.orderNumber, 'res'); |
| | | if (res.orderNumber) { |
| | | const resOrderNum = { |
| | | orderNum: res.orderNumber, |
| | | }; |
| | | |
| | | // 用户未绑定微信 报500 |
| | | app.MG.store.makeWeChatPay(resOrderNum).then(payRes => { |
| | | const payVal = JSON.parse(payRes); |
| | | console.log(payVal); |
| | | }) |
| | | } |
| | | // this.makeWeChatQrPayGet() |
| | | }) |
| | | // 调取微信二维码支付 |
| | | |
| | | }, |
| | | // 调取微信二维码支付 |
| | | makeWeChatQrPayGet() { |
| | | let query = { |
| | | orderNum: this.data.orderGoods |
| | | } |
| | | app.MG.store.makeWeChatQrPay(query).then((res) => { |
| | | |
| | | this.setData({ |
| | | drawQrcodeText: res |
| | | }) |
| | | this.data.dialogKey = true |
| | | console.log(this.data.drawQrcodeText, 'drawQrcodeText'); |
| | | }) |
| | | }, |
| | | showDialog(e) { |
| | | const { key } = e.currentTarget.dataset; |
| | | this.setData({ [key]: true, dialogKey: key }); |
| | | }, |
| | | closeDialog() { |
| | | const { dialogKey } = this.data; |
| | | this.setData({ [dialogKey]: false }); |
| | | }, |
| | | |
| | | }) |
| | |
| | | |
| | | <view class="paymentPageBox"> |
| | | <view class="content"> |
| | | <t-dialog visible="{{showCloseBtn}}" close-btn bind:confirm="closeDialog" bind:cancel="closeDialog"> |
| | | <view slot="content" class="slotContent"> |
| | | <view class="myQrcodeBox"> |
| | | <canvas style="width: 200px; height: 200px;margin:0 auto" canvas-id="myQrcode"></canvas> |
| | | <view class="myQrcodeTextBox">微信扫码支付</view> |
| | | </view> |
| | | </view> |
| | | </t-dialog> |
| | | |
| | | <view class="shoppingCartList"> |
| | | <view class="cartList" wx:for="{{productList}}" wx:key="index" wx:for-item="item" wx:for-index="index"> |
| | | <view class="imageBox"> |
| | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | <view style="text-align: center; color: #b9b9b9" wx:if="{{pageLoading}}"> |
| | | <t-loading theme="circular" size="40rpx" text="加载中..." inherit-color /> |
| | | </view> |
| | |
| | | |
| | | datas5.forEach((items) => { |
| | | items.subtitleName = items.subtitle + items.name |
| | | |
| | | }) |
| | | console.log(datas5, 'sadasd'); |
| | | this.setData({ |
| | |
| | | downloadData(event) { |
| | | console.log(111); |
| | | const item = event.currentTarget.dataset.item; |
| | | // console.log(item.datas.freeFile.searchVal); |
| | | const URL = 'http://182.92.203.7:3001/file/api/ApiDownload?md5=' + item.datas.freeFile.searchVal |
| | | // console.log(item.datas.freeFile.Value); |
| | | const URL = app.config.requestCtx + '/file/api/ApiDownload?md5=' + item.datas.freeFile.Value |
| | | item.determine = false |
| | | |
| | | console.log(URL, 'URL'); |
| | | setTimeout(() => { |
| | | if (URL) { |
| | | item.determine = true |
| | |
| | | |
| | | |
| | | }) |
| | | } |
| | | }, |
| | | onBookExhibitionDetails(e) { |
| | | console.log(e.currentTarget.dataset.item); |
| | | const item = e.currentTarget.dataset.item |
| | | |
| | | wx.navigateTo({ |
| | | url: '/pages/bookExhibitionDetails/index?id=' + item.id + '&bookName=' + item.name // 假设跳转到详情页面,并传递了id参数 |
| | | }); |
| | | }, |
| | | //触底函数 |
| | | onReachBottom() { |
| | | console.log("上拉加载...."); |
| | | }, |
| | | //上拉函数 |
| | | onPullDownRefresh() { |
| | | console.log("下拉刷新..."); |
| | | }, |
| | | |
| | | |
| | | }) |
| | |
| | | "t-icon": "tdesign-miniprogram/icon/icon", |
| | | "t-search": "tdesign-miniprogram/search/search", |
| | | "t-tabs": "tdesign-miniprogram/tabs/tabs", |
| | | "t-tab-panel": "tdesign-miniprogram/tab-panel/tab-panel" |
| | | "t-tab-panel": "tdesign-miniprogram/tab-panel/tab-panel", |
| | | "t-empty": "tdesign-miniprogram/empty/empty" |
| | | }, |
| | | "navigationStyle": "custom" |
| | | "navigationStyle": "custom", |
| | | "enablePullDownRefresh": true |
| | | } |
| | |
| | | <t-tabs defaultValue="{{0}}" bind:change="onTabsChange" bind:click="onTabsClick" t-class="custom-tabs" t-class-content="custom-panel"> |
| | | <t-tab-panel label="图书({{bookTotal}})" value="0"> |
| | | <view class="bookDataBox"> |
| | | <view wx:if="{{bookData.length <= 0}}" class="noDataBox"> |
| | | <t-empty icon="folder-open" description="暂无数据" /> |
| | | </view> |
| | | |
| | | |
| | | <view class="bookDataForBox" wx:for="{{bookData}}" wx:key="index" wx:for-item="item" wx:for-index="index" data-item="{{item}}" bind:tap="onBook"> |
| | |
| | | |
| | | |
| | | <view class="listBox1"> |
| | | <view wx:if="{{courseData.length <= 0}}" class="noDataBox"> |
| | | <t-empty icon="folder-open" description="暂无数据" /> |
| | | </view> |
| | | <view wx:if="{{courseData.length>0}}"> |
| | | <view wx:for="{{courseData}}" wx:for-item="item" wx:for-index="index" wx:key="index" bindtap="toList" data-info="{{item}}" class="listItemBox"> |
| | | <view class="listItem flex"> |
| | |
| | | </view> |
| | | </view> |
| | | </view> |
| | | <view class="empyt" wx:else> |
| | | <t-empty icon="folder-open" description="暂无数据" font-size="80" /> |
| | | </view> |
| | | |
| | | </view> |
| | | |
| | | |
| | |
| | | |
| | | <view class="bookDataBox"> |
| | | |
| | | |
| | | <view wx:if="{{digitalTextbooksData.length <= 0}}" class="noDataBox"> |
| | | <t-empty icon="folder-open" description="暂无数据" /> |
| | | </view> |
| | | <view class="bookDataForBox" wx:for="{{digitalTextbooksData}}" wx:key="index" wx:for-item="item" wx:for-index="index"> |
| | | <view class="imageBox"> |
| | | <image src="{{item.icon}}" mode="" /> |
| | |
| | | </t-tab-panel> |
| | | <t-tab-panel label="专题({{seminarTotal}})" value="3"> |
| | | <view class="listBox"> |
| | | <view wx:if="{{seminarData.length <= 0}}" class="noDataBox"> |
| | | <t-empty icon="folder-open" description="暂无数据" /> |
| | | </view> |
| | | <view wx:for="{{seminarData}}" wx:for-item="item" wx:for-index="index" wx:key="index" bindtap="toList" data-info="{{item}}" class="listItemBox"> |
| | | <view class="listItem"> |
| | | <view class="specialSubject-img"> |
| | |
| | | |
| | | |
| | | <view class="outsideHigherBox"> |
| | | <view wx:if="{{bookFairData.length <= 0 }}" class="noDataBox"> |
| | | <t-empty icon="folder-open" description="暂无数据" /> |
| | | </view> |
| | | <view class="higherBox" wx:for="{{bookFairData}}" wx:key="index" wx:for-item="item" wx:for-index="index"> |
| | | <view class="outsideHigherImageBox"> |
| | | <image class="higherImageBox" src="{{item.icon}}" mode="" /> |
| | |
| | | </t-tab-panel> |
| | | <t-tab-panel label="书展({{biblioClassificationTotal}})" value="5"> |
| | | <view class="outside"> |
| | | <view wx:if="{{biblioClassificationData.length <= 0}}" class="noDataBox"> |
| | | <t-empty icon="folder-open" description="暂无数据" /> |
| | | </view> |
| | | <view class="contentBox" wx:for="{{biblioClassificationData}}" wx:key="index" wx:for-item="item" wx:for-index="index" bindtap="onBookExhibitionDetails" data-item="{{item}}"> |
| | | <image class="bookFairImage" wx:if="{{item.icon}}" src="{{item.icon}}" mode="" /> |
| | | <image class="bookFairImage" wx:else="" src="/static/images/bookExhibitionList/banner.png" mode="" /> |
| | |
| | | |
| | | .t-tabs__track { |
| | | background-color: #FF6C00 !important; |
| | | } |
| | | |
| | | .noDataBox { |
| | | /* display: flex; |
| | | justify-content: center; |
| | | align-items: center */ |
| | | margin: 0 auto; |
| | | margin-top: 250rpx; |
| | | } |
| | |
| | | text: '书目下载', |
| | | key: 6, |
| | | icon: '/static/images/home/shumuxiazai@2x.png', |
| | | url: '', |
| | | url: '/pages/bibliographyList/index', |
| | | }, |
| | | { |
| | | text: '教师认证', |