From 42cc31916c043f681c271efeb73394260e7d77aa Mon Sep 17 00:00:00 2001 From: litian <C21AF165> Date: 星期二, 05 三月 2024 18:53:11 +0800 Subject: [PATCH] 合并 --- components/goods-card/index.wxss | 2 static/images/bookExhibitionList/banner.png | 0 pages/goods/details/components/buy-bar/index.js | 19 pages/goods/details/components/buy-bar/index.wxml | 61 pages/retrievalPage/index.json | 10 static/video/sea.mp4 | 0 pages/bookExhibitionList/index.js | 40 pages/resourceDetails/index.js | 76 + pages/bookExhibitionDetails/index.js | 10 pages/bookServices/assort/index.js | 16 pages/resourceDetails/index.json | 6 services/cart/cart.js | 32 pages/aboutUs/index.js | 142 + pages/personalCenter/certificate/index.wxss | 1 pages/aboutUs/index.wxml | 31 pages/bibliographyList/index.json | 9 static/images/bibliographyList/download.png | 0 pages/retrievalPage/index.js | 522 +++++++ pages/aboutUs/index.wxss | 20 pages/cart/index.wxss | 176 ++ pages/bookExhibitionDetails/index.wxss | 17 pages/cart/index.wxml | 67 pages/cart/paymentPage/index.wxml | 74 + pages/cart/paymentPage/index.wxss | 144 + pages/bookExhibitionList/index.wxss | 43 pages/resourceDetails/index.wxss | 25 pages/bookExhibitionList/index.wxml | 28 pages/resourceDetails/index.wxml | 13 pages/retrievalPage/index.wxml | 164 ++ pages/retrievalPage/index.wxss | 289 +++ app.json | 10 /dev/null | 68 pages/cart/index.json | 11 pages/cart/index.js | 366 +--- pages/cart/paymentPage/index.json | 10 pages/cart/paymentPage/js/weapp.qrcode.js | 1281 +++++++++++++++++ pages/cart/paymentPage/index.js | 200 ++ pages/bibliographyList/index.wxml | 84 + pages/bibliographyList/index.wxss | 97 + static/images/bibliographyList/downloadshiftin.png | 0 pages/bibliographyList/index.js | 269 +++ pages/aboutUs/index.json | 7 42 files changed, 3,949 insertions(+), 491 deletions(-) diff --git a/app.json b/app.json index ea01e60..d43ff7c 100644 --- a/app.json +++ b/app.json @@ -1,11 +1,17 @@ { "pages": [ + "pages/resourceDetails/index", + "pages/retrievalPage/index", + "pages/cart/paymentPage/index", + "pages/cart/index", "pages/home/home", + "pages/aboutUs/index", "pages/bookServices/assort/index", "pages/bookServices/detail/index", "pages/bookServices/list/index", "pages/bookExhibitionList/index", "pages/bookExhibitionDetails/index", + "pages/bibliographyList/index", "pages/usercenter/index", "pages/usercenter/person-info/index", "pages/usercenter/address/list/index", @@ -15,7 +21,6 @@ "pages/goods/category/index", "pages/goods/search/index", "pages/goods/result/index", - "pages/cart/index", "pages/order/order-confirm/index", "pages/order/receipt/index", "pages/order/pay-result/index", @@ -96,7 +101,8 @@ "backgroundTextStyle": "light", "navigationBarBackgroundColor": "#fff", "navigationBarTitleText": "浜笀E璇�", - "navigationBarTextStyle": "black" + "navigationBarTextStyle": "black", + " navigationStyle": "custom" }, "sitemapLocation": "sitemap.json", "permission": { diff --git a/components/goods-card/index.wxss b/components/goods-card/index.wxss index 1326d59..6a3efe2 100644 --- a/components/goods-card/index.wxss +++ b/components/goods-card/index.wxss @@ -130,4 +130,4 @@ .spec-for-symbol { font-size: 24rpx; -} +} \ No newline at end of file diff --git a/pages/aboutUs/index.js b/pages/aboutUs/index.js new file mode 100644 index 0000000..135af2c --- /dev/null +++ b/pages/aboutUs/index.js @@ -0,0 +1,142 @@ +// pages/aboutUs/index.js +const app = getApp() +// import drawQrcode from './js/weapp.qrcode' +Page({ + + /** + * 椤甸潰鐨勫垵濮嬫暟鎹� + */ + data: { + aboutText: null, + swiperList: null, + current: 1,//杞挱鍥惧弬鏁� + autoplay: true, //杞挱鍥惧弬鏁� + duration: '500',//杞挱鍥惧弬鏁� + interval: 5000,//杞挱鍥惧弬鏁� + navigation: { type: 'dots' },//杞挱鍥惧弬鏁� + bannerList: [], //杞挱鍥惧垪琛� + }, + + /** + * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍔犺浇 + */ + onLoad(options) { + + this.getBanner() + this.getAboutText() + + + // drawQrcode({ + + // width: 200, // 蹇呴』锛屼簩缁寸爜瀹藉害锛屼笌canvas鐨剋idth淇濇寔涓�鑷� + + // height: 200, // 蹇呴』锛屼簩缁寸爜楂樺害锛屼笌canvas鐨刪eight淇濇寔涓�鑷� + + // canvasId: 'myQrcode', + + // background: '#ffffff', // 闈炲繀椤伙紝浜岀淮鐮佽儗鏅鑹诧紝榛樿鍊肩櫧鑹� + + // foreground: '#000', // 闈炲繀椤伙紝浜岀淮鐮佸墠鏅壊锛岄粯璁ゅ�奸粦鑹� '#000000' + + // // ctx: wx.createCanvasContext('myQrcode'), // 闈炲繀椤伙紝缁樺浘涓婁笅鏂囷紝鍙�氳繃 wx.createCanvasContext('canvasId') 鑾峰彇锛寁1.0.0+鐗堟湰鏀寔 + + // text: '13216549865', // 蹇呴』锛屼簩缁寸爜鍐呭 + // // v1.0.0+鐗堟湰鏀寔鍦ㄤ簩缁寸爜涓婄粯鍒跺浘鐗� + + // image: { + // // imageResource: '../../images/icon.png', // 鎸囧畾浜岀淮鐮佸皬鍥炬爣 + // dx: 70, + // dy: 70, + // dWidth: 60, + // dHeight: 60 + // } + // }) + + }, + + /** + * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍒濇娓叉煋瀹屾垚 + */ + onReady() { + + }, + + /** + * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鏄剧ず + */ + onShow() { + + }, + + /** + * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰闅愯棌 + */ + onHide() { + + }, + + /** + * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍗歌浇 + */ + onUnload() { + + }, + + /** + * 椤甸潰鐩稿叧浜嬩欢澶勭悊鍑芥暟--鐩戝惉鐢ㄦ埛涓嬫媺鍔ㄤ綔 + */ + onPullDownRefresh() { + + }, + + /** + * 椤甸潰涓婃媺瑙﹀簳浜嬩欢鐨勫鐞嗗嚱鏁� + */ + onReachBottom() { + + }, + + /** + * 鐢ㄦ埛鐐瑰嚮鍙充笂瑙掑垎浜� + */ + onShareAppMessage() { + + }, + getBanner() { + + app.MG.resource.getItem({ + path: 'jsek_banner\\jsek_aboutUsBanner', + paging: { start: 0, size: 9 }, + + fields: { + jsek_link: [] + } + }).then(res => { + + this.setData({ + bannerList: res.datas[0].icon, + swiperList: res.datas[0].icon + }) + console.log(this.data.bannerList, 789); + }) + }, + getAboutText() { + app.MG.resource.getItem({ + path: 'jsek_aboutUs', + fields: { + content: [] + }, + coverSize: { + width: 750 + }, + }).then(res => { + console.log(res); + + this.setData({ + aboutText: res.datas[0].content + }) + + + }) + } +}) \ No newline at end of file diff --git a/pages/aboutUs/index.json b/pages/aboutUs/index.json new file mode 100644 index 0000000..45f3c00 --- /dev/null +++ b/pages/aboutUs/index.json @@ -0,0 +1,7 @@ +{ + "component": true, + "usingComponents": { + "t-swiper": "tdesign-miniprogram/swiper/swiper", + "t-swiper-nav": "tdesign-miniprogram/swiper-nav/swiper-nav" + } +} \ No newline at end of file diff --git a/pages/aboutUs/index.wxml b/pages/aboutUs/index.wxml new file mode 100644 index 0000000..9b311d6 --- /dev/null +++ b/pages/aboutUs/index.wxml @@ -0,0 +1,31 @@ +<!--pages/aboutUs/index.wxml--> +<!-- <text>鍏充簬鎴戜滑</text> --> + + + +<!-- 浜岀淮鐮佸睍绀� --> +<!-- <view class=""> + <canvas style="width: 200px; height: 200px;margin:0 auto" canvas-id="myQrcode"></canvas> +</view> --> + + + + + + +<!-- <view class="swiper-wrap"> + <t-swiper list="{{bannerList}}" current="{{current}}" autoplay="{{autoplay}}" duration="{{duration}}" interval="{{interval}}" navigation="{{navigation}}" /> +</view> --> + + + + + +<view class="aboutUs"> + <view class="imageBox"> + <image src="{{swiperList}}" alt="" /> + </view> + <view class="aboutText"> + <rich-text nodes="{{aboutText}}"></rich-text> + </view> +</view> \ No newline at end of file diff --git a/pages/aboutUs/index.wxss b/pages/aboutUs/index.wxss new file mode 100644 index 0000000..5a434ed --- /dev/null +++ b/pages/aboutUs/index.wxss @@ -0,0 +1,20 @@ +/* pages/aboutUs/index.wxss */ +image { + width: 100%; + height: 100%; +} + +.imageBox { + width: 690rpx; + height: 300rpx; + margin-bottom: 35rpx; +} + +.aboutUs { + margin: 30rpx; + +} + +.aboutText { + padding-bottom: 100rpx; +} \ No newline at end of file diff --git a/pages/bibliographyList/index.js b/pages/bibliographyList/index.js new file mode 100644 index 0000000..cab19a3 --- /dev/null +++ b/pages/bibliographyList/index.js @@ -0,0 +1,269 @@ +// pages/bibliographyList/index.js +const app = getApp() +const config = + Page({ + + /** + * 椤甸潰鐨勫垵濮嬫暟鎹� + */ + data: { + higherList: [], + vocationalList: [], + teacherList: [], + higherTotal: 0, + vocationalTotal: 0, + teacherTotal: 0, + value: '', + BarHeight: '', + navBarHeight: '' + }, + + /** + * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍔犺浇 + */ + onLoad(options) { + this.higherGet() + this.vocationalGet() + this.teacherGet() + + + //鑾峰彇绯荤粺淇℃伅锛岀姸鎬佹爮楂樺害涓簊ysInfo['statusBarHeight']; + let sysInfo = wx.getSystemInfoSync(); + let menu = wx.getMenuButtonBoundingClientRect(); //鑳跺泭淇℃伅 + let navBarHeight = (menu.top - sysInfo.statusBarHeight) * 2 + menu.height; // 瀵艰埅鏍忛珮搴� + this.setData({ + BarHeight: sysInfo.statusBarHeight, navBarHeight: navBarHeight + }) + + + + + + + + }, + + /** + * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍒濇娓叉煋瀹屾垚 + */ + onReady() { + + }, + + /** + * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鏄剧ず + */ + onShow() { + console.log(this.data.value); + }, + + /** + * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰闅愯棌 + */ + onHide() { + + }, + + /** + * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍗歌浇 + */ + onUnload() { + + }, + + /** + * 椤甸潰鐩稿叧浜嬩欢澶勭悊鍑芥暟--鐩戝惉鐢ㄦ埛涓嬫媺鍔ㄤ綔 + */ + onPullDownRefresh() { + + }, + + /** + * 椤甸潰涓婃媺瑙﹀簳浜嬩欢鐨勫鐞嗗嚱鏁� + */ + onReachBottom() { + + }, + + /** + * 鐢ㄦ埛鐐瑰嚮鍙充笂瑙掑垎浜� + */ + onShareAppMessage() { + + }, + onTabsChange(event) { + console.log(`Change tab, tab-panel value is ${event.detail.value}.`); + }, + + onTabsClick(event) { + console.log(`Click tab, tab-panel value is ${event.detail.value}.`); + }, + //楂樼瓑鏁欒偛 + higherGet(keyword) { + let searchObj = { + 'Name*': keyword, + '||author*': keyword, + '||isbn*': keyword + + } + + app.MG.resource.getItem({ + path: 'jsek_biblioClassification\\jsek_bCHigherEducation', + queryType: '*', + paging: { + start: '0', + size: '999' + }, + coverSize: { + width: 260 + }, + fields: { + jsek_link: [], + content: [], + subtitle: [], + fileType: [], + jsek_resource: [], + freeFile: [], + ...searchObj, + }, + SysType: 'CmsItem' + }).then(res => { + + res.datas.forEach(item => { + item.determine = true + }) + console.log(res, 789111); + this.setData({ + higherList: res.datas, + higherTotal: res.total + }) + console.log(this.data.higherList, '5555'); + }) + + + }, + + //鏁欏笀鏁欒偛 + vocationalGet(keyword) { + let searchObj = { + 'Name*': keyword, + '||author*': keyword, + '||isbn*': keyword + + } + app.MG.resource.getItem({ + path: 'jsek_biblioClassification\\jsek_bCVocationalEducation', + queryType: '*', + paging: { + start: '0', + size: '999' + }, + coverSize: { + width: 260 + }, + fields: { + jsek_link: [], + content: [], + subtitle: [], + fileType: [], + jsek_resource: [], + freeFile: [], + ...searchObj + }, + SysType: 'CmsItem' + }).then(res => { + res.datas.forEach(item => { + item.determine = true + }) + this.setData({ + vocationalList: res.datas, + vocationalTotal: res.total + }) + + }) + }, + // 鑱屼笟鏁欒偛 + teacherGet(keyword) { + let searchObj = { + 'Name*': keyword, + '||author*': keyword, + '||isbn*': keyword + + } + app.MG.resource.getItem({ + path: 'jsek_biblioClassification\\jsek_bCTeacherEducation', + queryType: '*', + paging: { + start: '0', + size: '999' + }, + coverSize: { + width: 260 + }, + fields: { + jsek_link: [], + content: [], + subtitle: [], + fileType: [], + jsek_resource: [], + freeFile: [], + ...searchObj + }, + SysType: 'CmsItem' + }).then(res => { + res.datas.forEach(item => { + item.determine = true + }) + this.setData({ + teacherList: res.datas, + teacherTotal: res.total + }) + + }) + + + }, + downloadData(event) { + console.log(111); + const item = event.currentTarget.dataset.item; + // console.log(item.datas.freeFile.Value); + const URL = 'http://182.92.203.7:3001/file/api/ApiDownload?md5=' + item.datas.freeFile.Value + item.determine = false + + setTimeout(() => { + if (URL) { + item.determine = true + } + }, 600) + wx.downloadFile({ + url: URL, + success: function (res) { + const filePath = res.tempFilePath; + wx.openDocument({ + filePath: filePath, + success: function (res) { + console.log('鎵撳紑鏂囨。鎴愬姛'); + }, + fail: function (res) { + console.log('鎵撳紑鏂囨。澶辫触', res); + } + }); + }, + fail: function (res) { + console.log('涓嬭浇鏂囦欢澶辫触', res); + } + }); + }, + onSearchSubmit: function (e) { + const keyword = e.detail.value; + // 澶勭悊鎼滅储閫昏緫锛屼緥濡傚彂閫佹悳绱㈣姹傜瓑 + console.log('鎼滅储鍏抽敭璇嶏細', keyword); + this.higherGet(keyword) + this.vocationalGet(keyword) + this.teacherGet(keyword) + }, + + + + + }) \ No newline at end of file diff --git a/pages/bibliographyList/index.json b/pages/bibliographyList/index.json new file mode 100644 index 0000000..0edd783 --- /dev/null +++ b/pages/bibliographyList/index.json @@ -0,0 +1,9 @@ +{ + "component": true, + "usingComponents": { + "t-tabs": "tdesign-miniprogram/tabs/tabs", + "t-tab-panel": "tdesign-miniprogram/tab-panel/tab-panel", + "t-search": "tdesign-miniprogram/search/search" + }, + "navigationStyle": "custom" +} \ No newline at end of file diff --git a/pages/bibliographyList/index.wxml b/pages/bibliographyList/index.wxml new file mode 100644 index 0000000..8eee1f6 --- /dev/null +++ b/pages/bibliographyList/index.wxml @@ -0,0 +1,84 @@ +<!--pages/bibliographyList/index.wxml--> + +<view class="example-search"> + <t-search model:value="{{value}}" placeholder="璇疯緭鍏ヤ功鐩悕绉�" bind:submit="onSearchSubmit" /> +</view> + + + + +<!--鐘舵�佹爮楂樺害 --> +<!-- <view style="width: 100%; height:{{BarHeight}}px;"></view> +<view style="width: 70%; height:{{navBarHeight}}px;"> + <view style="position: relative; padding-top: 10rpx;"> + <view class="iconfont icon-sousuo search_icones"></view> + <input class="nav_input" model:value="{{ name }}" placeholder-class="placeholder_class" maxlength="30" bindfocus="bindfocus" bindconfirm="doSearch" placeholder="杈撳叆鍏呯數绔�" /> + </view> +</view> --> + + + + + + + + + + +<t-tabs defaultValue="{{0}}" bind:change="onTabsChange" bind:click="onTabsClick" t-class="custom-tabs" t-class-content="custom-panel"> + <t-tab-panel label="楂樼瓑鏁欒偛({{higherTotal}})" value="0"> + <view class="outsideHigherBox"> + <view class="higherBox" wx:for="{{higherList}}" wx:key="index" wx:for-item="item" wx:for-index="index"> + <view class="outsideHigherImageBox"> + <image class="higherImageBox" src="{{item.icon}}" mode="" /> + <view class="downloadIcon" bind:tap="downloadData" data-item="{{item}}"> + + <image wx:if="{{determine}}" class="download" src="/static/images/bibliographyList/downloadshiftin.png" mode="" /> + <image wx:else="" class="downloadshiftin" src="/static/images/bibliographyList/download.png" mode="" /> + </view> + </view> + + <view class="higherTextBox">{{item.name}}</view> + </view> + + </view> + + </t-tab-panel> + <t-tab-panel label="鑱屼笟鏁欒偛({{vocationalTotal}})" value="1"> + <view class="outsideHigherBox"> + <view class="higherBox" wx:for="{{vocationalList}}" wx:key="index" wx:for-item="item" wx:for-index="index"> + <view class="outsideHigherImageBox"> + <image class="higherImageBox" src="{{item.icon}}" mode="" /> + <view class="downloadIcon" bind:tap="downloadData" data-item="{{item}}"> + + <image wx:if="{{determine}}" class="download" src="/static/images/bibliographyList/downloadshiftin.png" mode="" /> + <image wx:else="" class="downloadshiftin" src="/static/images/bibliographyList/download.png" mode="" /> + </view> + </view> + + <view class="higherTextBox">{{item.name}}</view> + </view> + + </view> + + + </t-tab-panel> + <t-tab-panel label="鏁欏笀鏁欒偛({{teacherTotal}})" value="2"> + <view class="outsideHigherBox"> + <view class="higherBox" wx:for="{{teacherList}}" wx:key="index" wx:for-item="item" wx:for-index="index"> + <view class="outsideHigherImageBox"> + <image class="higherImageBox" src="{{item.icon}}" mode="" /> + <view class="downloadIcon" bind:tap="downloadData" data-item="{{item}}"> + + <image wx:if="{{determine}}" class="download" src="/static/images/bibliographyList/downloadshiftin.png" mode="" /> + <image wx:else="" class="downloadshiftin" src="/static/images/bibliographyList/download.png" mode="" /> + </view> + </view> + + <view class="higherTextBox">{{item.name}}</view> + </view> + + </view> + </t-tab-panel> + +</t-tabs> \ No newline at end of file diff --git a/pages/bibliographyList/index.wxss b/pages/bibliographyList/index.wxss new file mode 100644 index 0000000..6ee6962 --- /dev/null +++ b/pages/bibliographyList/index.wxss @@ -0,0 +1,97 @@ +/* pages/bibliographyList/index.wxss */ +/* .custom-tabs { + margin-bottom: 32rpx; +} + +.custom-panel { + height: 120px; +} */ + +.higherBox { + width: 220rpx; + /* height: 390rpx; */ + box-shadow: 10rpx 10rpx 10rpx 10rpx rgba(0, 0, 0, 0.08); + margin: 30rpx 15rpx; +} + +.outsideHigherBox { + display: flex; + flex-wrap: wrap; +} + +.higherImageBox { + width: 190rpx; + height: 255rpx; + margin: 15rpx; +} + +.higherTextBox { + font-weight: bold; + font-size: 25rpx; + color: #333333; + padding: 15rpx; + margin-bottom: 10rpx; +} + +.outsideHigherImageBox { + + position: relative; +} + +.downloadIcon { + width: 34rpx; + height: 34rpx; + + border-radius: 5rpx 5rpx 5rpx 5rpx; + background: rgba(0, 0, 0, 0.3); + position: absolute; + top: 15rpx; + right: 15rpx; + padding: 10rpx; +} + + +.download { + /* background-color: #8bc34a; */ + width: 100%; + height: 100%; + +} + +.downloadshiftin { + width: 100%; + height: 100%; +} + +.example-search { + background-color: #fff; + padding: 16rpx 32rpx; +} + + +.search_icones { + position: absolute; + font-size: 32rpx; + height: 32rpx; + width: 32rpx; + color: var(--gry-col); + top: 0px; + bottom: 0px; + margin: auto 0; + padding-left: 30rpx; + padding-top: 10rpx; + line-height: 32rpx; +} + +/*杈撳叆妗�*/ +.nav_input { + border: 1px solid var(--egry-col); + border-radius: 40rpx; + padding-left: 72rpx; + background-color: var(--whi-col); + padding-right: 16rpx; + font-size: 28rpx; + box-sizing: border-box; + line-height: 75rpx; + height: 75rpx; +} \ No newline at end of file diff --git a/pages/bookExhibitionDetails/index.js b/pages/bookExhibitionDetails/index.js index 6ab4e9d..27169f6 100644 --- a/pages/bookExhibitionDetails/index.js +++ b/pages/bookExhibitionDetails/index.js @@ -6,11 +6,11 @@ * 椤甸潰鐨勫垵濮嬫暟鎹� */ data: { - bookName: null, - bookBeginDate: null, - bookCreator: null, - bookContent: null, - bookImage: null, + bookName: '', + bookBeginDate: '', + bookCreator: '', + bookContent: '', + bookImage: '', bookExhibitionList: [] }, diff --git a/pages/bookExhibitionDetails/index.wxss b/pages/bookExhibitionDetails/index.wxss index bcd48e4..040d155 100644 --- a/pages/bookExhibitionDetails/index.wxss +++ b/pages/bookExhibitionDetails/index.wxss @@ -1,13 +1,13 @@ /* pages/bookExhibitionDetails/index.wxss */ -.headBox { - /* width: 750rpx; */ - text-align: center; - -} +.headBox {} .titleBox { font-weight: 800; font-size: 45rpx; + display: flex; + justify-content: center; + padding: 0 30rpx; + /* text-indent: 6%; */ } .informationBox { @@ -51,21 +51,20 @@ margin: 20rpx; background: #FFFFFF; box-shadow: 0rpx 0rpx 18rpx 2rpx rgba(0, 0, 0, 0.08); + padding: 10rpx; + box-sizing: border-box; } .booksImageBox { width: 240rpx; height: 300rpx; margin: 30rpx; - } .outsideBooksImageBox { background: #F5F5F5; - width: 300rpx; + width: 100%; margin: 0 auto; - margin-top: 15rpx; - } .booksTextBox { diff --git a/pages/bookExhibitionList/index.js b/pages/bookExhibitionList/index.js index c4d4a70..937d286 100644 --- a/pages/bookExhibitionList/index.js +++ b/pages/bookExhibitionList/index.js @@ -8,6 +8,8 @@ * 椤甸潰鐨勫垵濮嬫暟鎹� */ data: { + value: '', + keyword: '', nameSort: null, total: null, page: { @@ -17,7 +19,6 @@ keynoteValue: null, filteredItems: [], newValue: null, - value: '', bookExhibitionList: [], sorter: { value: 'default', @@ -138,7 +139,10 @@ wx.showLoading({ title: '鍔犺浇涓�...', }) - + let searchObj = { + 'Name*': this.data.keyword, + '||subtitle*': this.data.keyword + } // console.log(this.data.keynoteValue); let sort = { Name: this.data.nameSort || 'Desc' @@ -149,7 +153,8 @@ queryType: '*', fields: { jsek_link: [], - 'bookClassification*': this.data.keynoteValue || [] + 'bookClassification*': this.data.keynoteValue || [], + ...searchObj }, paging: this.data.page, sort: sort, @@ -290,13 +295,32 @@ }, onSwapRight() { // console.log('xxxxxx'); - this.data.nameSort = 'Asc' + // this.data.nameSort = 'Asc' + + + if (!this.data.nameSort) { + this.setData({ + nameSort: 'Desc', + }); + } else if (this.data.nameSort == 'Desc') { + this.setData({ + nameSort: 'Asc', + }); + } else if (this.data.nameSort == 'Asc') { + this.setData({ + nameSort: '', + }); + } + this.bookExhibitionGet() + }, onSwapLeft() { this.data.nameSort = 'Desc' // console.log('sssssss'); this.bookExhibitionGet() + + }, onBookExhibitionDetails: function (event) { const item = event.currentTarget.dataset.item; @@ -304,5 +328,13 @@ wx.navigateTo({ url: '/pages/bookExhibitionDetails/index?id=' + item.id // 鍋囪璺宠浆鍒拌鎯呴〉闈紝骞朵紶閫掍簡id鍙傛暟 }); + }, + // 鎼滅储妗� + onSearchSubmit(e) { + this.setData({ + keyword: e.detail.value + }) + console.log(this.data.keyword, 'keyword'); + this.bookExhibitionGet() } }) \ No newline at end of file diff --git a/pages/bookExhibitionList/index.wxml b/pages/bookExhibitionList/index.wxml index 075544a..2e08782 100644 --- a/pages/bookExhibitionList/index.wxml +++ b/pages/bookExhibitionList/index.wxml @@ -5,7 +5,7 @@ <view class="example-search"> - <t-search model:value="{{value}}" placeholder="璇疯緭鍏ュ叧閿瘝/涔︾洰/ISBN/浣滆��" /> + <t-search model:value="{{value}}" placeholder="璇疯緭鍏ュ叧閿瘝/涔︾洰/ISBN/浣滆��" bind:submit="onSearchSubmit" /> </view> @@ -24,24 +24,26 @@ </t-dropdown-menu> - <view class="sortBox"> + <view class="sortBox" bind:tap="onSwapRight"> <text>鎺掑簭</text> <view class="iconBox"> - <t-icon class="swapRight" name="swap-right" size="48rpx" bind:click="onSwapRight" /> - <t-icon class="swapLeft" name="swap-right" size="48rpx" bind:click="onSwapLeft" /> + <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 class="titleBox"> - <view class="frameBox"></view> <text class="titleTextBox"> 绾夸笂涔﹀睍</text> -</view> -<view class="outside"> - - <view class="contentBox" wx:for="{{bookExhibitionList}}" wx:key="index" wx:for-item="item" wx:for-index="index" bindtap="onBookExhibitionDetails" data-item="{{item}}"> - <image wx:if="{{item.icon}}" src="{{item.icon}}" mode="" /> - <image wx:else="" src="./img/banner.png" mode="" /> - <view class="textBox"> <text>{{item.name}}</text></view> +<view class="assembleContent"> + <view class="titleBox"> + <view class="frameBox"></view> <text class="titleTextBox"> 绾夸笂涔﹀睍</text> </view> + <view class="outside"> + <view class="contentBox" wx:for="{{bookExhibitionList}}" wx:key="index" wx:for-item="item" wx:for-index="index" bindtap="onBookExhibitionDetails" data-item="{{item}}"> + <image wx:if="{{item.icon}}" src="{{item.icon}}" mode="" /> + <image wx:else="" src="/static/images/bookExhibitionList/banner.png" mode="" /> + <view class="textBox" title="{{item.name}}"> <text>{{item.name}}</text></view> + </view> + + </view> </view> \ No newline at end of file diff --git a/pages/bookExhibitionList/index.wxss b/pages/bookExhibitionList/index.wxss index f313307..25095c9 100644 --- a/pages/bookExhibitionList/index.wxss +++ b/pages/bookExhibitionList/index.wxss @@ -7,54 +7,54 @@ flex-wrap: wrap; justify-content: space-between; margin: 15px; + + } .contentBox { width: 330rpx; - height: 130rpx; + /* height: 231rpx; */ /* border: 1px #000 solid; */ margin: 10px 0; + background-color: #fff; } image { - width: 100%; - height: 85%; + width: 327rpx; + height: 128rpx; } .textBox { + width: 280rpx; + /* height: 75rpx; */ + font-size: 25rpx; - width: 320rpx; - font-size: 20rpx; - /* display: flex; - justify-content: center; */ overflow: hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-box-orient: vertical; - -webkit-line-clamp: 1; - text-align: center; + -webkit-line-clamp: 2; + /* text-align: center; */ + margin: 20rpx; } .example-search { - width: 300px; + /* width: 300px; */ background-color: #fff; /* padding: 16rpx 32rpx; */ } .iconBox { transform: rotate(90deg); - /* margin: 10px; - margin-right: 20px; */ - margin-left: 30rpx; + margin-left: 10rpx; } .swapRight { - /* margin-right: 10px; */ - + height: 20rpx; } .swapLeft { @@ -62,11 +62,14 @@ } .sortBox { + color: #999999; display: flex; - border-bottom: 1px #ededed solid; + /* border-bottom: 1px #ededed solid; */ align-items: center; height: 86rpx; width: 195rpx; + margin-top: 8rpx; + font-size: 30rpx; } @@ -75,6 +78,7 @@ display: flex; margin: 10px; margin-left: 0; + padding-top: 30rpx; } .frameBox { @@ -94,9 +98,16 @@ .classification { width: 550rpx; + /* margin-bottom: 50rpx; */ + } .menuBox { display: flex; + height: 75rpx; +} + +.assembleContent { + background-color: #F2F3F8; } \ No newline at end of file diff --git a/pages/bookServices/assort/index.js b/pages/bookServices/assort/index.js index 024fe3d..a4a3240 100644 --- a/pages/bookServices/assort/index.js +++ b/pages/bookServices/assort/index.js @@ -27,7 +27,7 @@ /** * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍒濇娓叉煋瀹屾垚 */ - onReady() {}, + onReady() { }, /** * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鏄剧ず @@ -39,27 +39,27 @@ /** * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰闅愯棌 */ - onHide() {}, + onHide() { }, /** * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍗歌浇 */ - onUnload() {}, + onUnload() { }, /** * 椤甸潰鐩稿叧浜嬩欢澶勭悊鍑芥暟--鐩戝惉鐢ㄦ埛涓嬫媺鍔ㄤ綔 */ - onPullDownRefresh() {}, + onPullDownRefresh() { }, /** * 椤甸潰涓婃媺瑙﹀簳浜嬩欢鐨勫鐞嗗嚱鏁� */ - onReachBottom() {}, + onReachBottom() { }, /** * 鐢ㄦ埛鐐瑰嚮鍙充笂瑙掑垎浜� */ - onShareAppMessage() {}, + onShareAppMessage() { }, // 鑾峰彇渚ц竟鏍忓垪琛� getAssortList() { @@ -79,7 +79,9 @@ sort: { type: 'Asc', field: 'LinkOrder' }, }; app.MG.store.getStoreChannelList(query).then((res) => { + const list = res.datas.filter((item) => item.refCode != 'jsek_homepageBookService'); + this.setData({ assortList: list, }); @@ -118,6 +120,8 @@ sort: { type: 'Asc', field: 'LinkOrder' }, }; app.MG.store.getStoreChannelList(query).then(async (res) => { + + console.log(res, 'res'); // 涓�绾у垎绫婚�変腑 this.setData({ startCheck: res.datas[0].refCode, diff --git a/pages/cart/components/cart-bar/index.js b/pages/cart/components/cart-bar/index.js deleted file mode 100644 index db7736c..0000000 --- a/pages/cart/components/cart-bar/index.js +++ /dev/null @@ -1,59 +0,0 @@ -Component({ - options: { - addGlobalClass: true, - }, - /** - * 缁勪欢鐨勫睘鎬у垪琛� - */ - properties: { - isAllSelected: { - type: Boolean, - value: false, - }, - totalAmount: { - type: Number, - value: 1, - }, - totalGoodsNum: { - type: Number, - value: 0, - observer(num) { - const isDisabled = num == 0; - setTimeout(() => { - this.setData({ - isDisabled, - }); - }); - }, - }, - totalDiscountAmount: { - type: Number, - value: 0, - }, - bottomHeight: { - type: Number, - value: 100, - }, - fixed: Boolean, - }, - data: { - isDisabled: false, - }, - - methods: { - handleSelectAll() { - const { isAllSelected } = this.data; - this.setData({ - isAllSelected: !isAllSelected, - }); - this.triggerEvent('handleSelectAll', { - isAllSelected: isAllSelected, - }); - }, - - handleToSettle() { - if (this.data.isDisabled) return; - this.triggerEvent('handleToSettle'); - }, - }, -}); diff --git a/pages/cart/components/cart-bar/index.json b/pages/cart/components/cart-bar/index.json deleted file mode 100644 index c6c4351..0000000 --- a/pages/cart/components/cart-bar/index.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "component": true, - "usingComponents": { - "price": "/components/price/index", - "t-icon": "tdesign-miniprogram/icon/icon" - } -} \ No newline at end of file diff --git a/pages/cart/components/cart-bar/index.wxml b/pages/cart/components/cart-bar/index.wxml deleted file mode 100644 index 486a0d5..0000000 --- a/pages/cart/components/cart-bar/index.wxml +++ /dev/null @@ -1,31 +0,0 @@ -<view class="cart-bar__placeholder" wx:if="{{fixed}}" /> -<view class="cart-bar {{fixed ? 'cart-bar--fixed' : ''}} flex flex-v-center" style="bottom: {{fixed ? 'calc(' + bottomHeight + 'rpx + env(safe-area-inset-bottom))' : ''}};"> - <t-icon - size="40rpx" - color="{{isAllSelected ? '#FA4126' : '#BBBBBB'}}" - name="{{isAllSelected ? 'check-circle-filled' : 'circle'}}" - class="cart-bar__check" - catchtap="handleSelectAll" - /> - <text>鍏ㄩ��</text> - <view class="cart-bar__total flex1"> - <view> - <text class="cart-bar__total--bold text-padding-right">鎬昏</text> - <price - price="{{totalAmount || '0'}}" - fill="{{false}}" - decimalSmaller - class="cart-bar__total--bold cart-bar__total--price" - /> - <text class="cart-bar__total--normal">锛堜笉鍚繍璐癸級</text> - </view> - <view wx:if="{{totalDiscountAmount}}"> - <text class="cart-bar__total--normal text-padding-right">宸蹭紭鎯�</text> - <price class="cart-bar__total--normal" price="{{totalDiscountAmount || '0'}}" fill="{{false}}" /> - </view> - </view> - <view catchtap="handleToSettle" class="{{!isDisabled ? '' : 'disabled-btn'}} account-btn" hover-class="{{!isDisabled ? '' : 'hover-btn'}}"> - 鍘荤粨绠�({{totalGoodsNum}}) - </view> -</view> - diff --git a/pages/cart/components/cart-bar/index.wxss b/pages/cart/components/cart-bar/index.wxss deleted file mode 100644 index 0e63f60..0000000 --- a/pages/cart/components/cart-bar/index.wxss +++ /dev/null @@ -1,80 +0,0 @@ -.cart-bar__placeholder { - height: 100rpx; -} -.flex { - display: flex; -} -.flex-v-center { - align-items: center; -} -.flex1 { - flex: 1; -} -.algin-bottom { - text-align: end; -} -.cart-bar--fixed { - position: fixed; - left: 0; - right: 0; - z-index: 99; - bottom: calc(100rpx + env(safe-area-inset-bottom)); -} - -.cart-bar { - height: 112rpx; - background-color: #fff; - border-top: 1rpx solid #e5e5e5; - padding: 16rpx 32rpx; - box-sizing: border-box; - font-size: 24rpx; - line-height: 36rpx; - color: #333; -} - -.cart-bar .cart-bar__check { - margin-right: 12rpx; -} - -.cart-bar .cart-bar__total { - margin-left: 24rpx; -} - -.cart-bar .account-btn { - width: 192rpx; - height: 80rpx; - border-radius: 40rpx; - background-color: #fa4126; - font-size: 28rpx; - font-weight: bold; - line-height: 80rpx; - color: #ffffff; - text-align: center; -} -.cart-bar .disabled-btn { - background-color: #cccccc !important; -} -.cart-bar .hover-btn { - opacity: 0.5; -} - -.cart-bar__total .cart-bar__total--bold { - font-size: 28rpx; - line-height: 40rpx; - color: #333; - font-weight: bold; -} -.cart-bar__total .cart-bar__total--normal { - font-size: 24rpx; - line-height: 32rpx; - color: #999; -} - -.cart-bar__total .cart-bar__total--price { - color: #fa4126; - font-weight: bold; -} - -.text-padding-right { - padding-right: 4rpx; -} diff --git a/pages/cart/components/cart-empty/index.js b/pages/cart/components/cart-empty/index.js deleted file mode 100644 index 01cf9c3..0000000 --- a/pages/cart/components/cart-empty/index.js +++ /dev/null @@ -1,23 +0,0 @@ -Component({ - properties: { - imgUrl: { - type: String, - value: - 'https://cdn-we-retail.ym.tencent.com/miniapp/template/empty-cart.png', - }, - tip: { - type: String, - value: '璐墿杞︽槸绌虹殑', - }, - btnText: { - type: String, - value: '鍘婚椤�', - }, - }, - data: {}, - methods: { - handleClick() { - this.triggerEvent('handleClick'); - }, - }, -}); diff --git a/pages/cart/components/cart-empty/index.json b/pages/cart/components/cart-empty/index.json deleted file mode 100644 index b659310..0000000 --- a/pages/cart/components/cart-empty/index.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "component": true, - "usingComponents": { - "t-image": "/components/webp-image/index" - } -} \ No newline at end of file diff --git a/pages/cart/components/cart-empty/index.wxml b/pages/cart/components/cart-empty/index.wxml deleted file mode 100644 index d0cdd43..0000000 --- a/pages/cart/components/cart-empty/index.wxml +++ /dev/null @@ -1,6 +0,0 @@ -<view class="cart-empty"> - <t-image t-class="cart-img" src="{{imgUrl}}" /> - <view class="tip">{{tip}}</view> - <view class="btn" bind:tap="handleClick">{{btnText}}</view> -</view> - diff --git a/pages/cart/components/cart-empty/index.wxss b/pages/cart/components/cart-empty/index.wxss deleted file mode 100644 index d074bc3..0000000 --- a/pages/cart/components/cart-empty/index.wxss +++ /dev/null @@ -1,33 +0,0 @@ -.cart-empty { - padding: 64rpx 0rpx; - display: flex; - flex-direction: column; - align-items: center; - box-sizing: border-box; - height: calc(100vh - 100rpx); - background-color: #f5f5f5; -} -.cart-empty .cart-img { - width: 160rpx; - height: 160rpx; - margin-bottom: 24rpx; -} - -.cart-empty .tip { - font-size: 28rpx; - line-height: 40rpx; - color: #999; - margin-bottom: 24rpx; -} -.cart-empty .btn { - width: 240rpx; - height: 72rpx; - border-radius: 36rpx; - text-align: center; - line-height: 72rpx; - border: 2rpx solid #fa4126; - color: #fa4126; - background-color: transparent; - font-size: 28rpx; - font-weight: bold; -} diff --git a/pages/cart/components/cart-group/index.js b/pages/cart/components/cart-group/index.js deleted file mode 100644 index 99a908d..0000000 --- a/pages/cart/components/cart-group/index.js +++ /dev/null @@ -1,166 +0,0 @@ -import Toast from 'tdesign-miniprogram/toast/index'; - -const shortageImg = - 'https://cdn-we-retail.ym.tencent.com/miniapp/cart/shortage.png'; - -Component({ - isSpecsTap: false, // 鏍囪鏈鐐瑰嚮浜嬩欢鏄惁鍥犱负鐐瑰嚮specs瑙﹀彂锛堢敱浜庡簳灞俫oods-card缁勪欢娌℃湁catch specs鐐瑰嚮浜嬩欢锛屽彧鑳藉湪姝ゅ鍔犵姸鎬佹潵閬垮厤鐐瑰嚮specs鏃惰Е鍙戣烦杞晢鍝佽鎯咃級 - externalClasses: ['wr-class'], - properties: { - storeGoods: { - type: Array, - observer(storeGoods) { - for (const store of storeGoods) { - for (const activity of store.promotionGoodsList) { - for (const goods of activity.goodsPromotionList) { - goods.specs = goods.specInfo.map((item) => item.specValue); // 鐩墠浠呭睍绀哄晢鍝佸凡閫夎鏍肩殑鍊� - } - } - for (const goods of store.shortageGoodsList) { - goods.specs = goods.specInfo.map((item) => item.specValue); // 鐩墠浠呭睍绀哄晢鍝佸凡閫夎鏍肩殑鍊� - } - } - - this.setData({ _storeGoods: storeGoods }); - }, - }, - invalidGoodItems: { - type: Array, - observer(invalidGoodItems) { - invalidGoodItems.forEach((goods) => { - goods.specs = goods.specInfo.map((item) => item.specValue); // 鐩墠浠呭睍绀哄晢鍝佸凡閫夎鏍肩殑鍊� - }); - this.setData({ _invalidGoodItems: invalidGoodItems }); - }, - }, - thumbWidth: { type: null }, - thumbHeight: { type: null }, - }, - - data: { - shortageImg, - isShowSpecs: false, - currentGoods: {}, - isShowToggle: false, - _storeGoods: [], - _invalidGoodItems: [], - }, - - methods: { - // 鍒犻櫎鍟嗗搧 - deleteGoods(e) { - const { goods } = e.currentTarget.dataset; - this.triggerEvent('delete', { goods }); - }, - - // 娓呯┖澶辨晥鍟嗗搧 - clearInvalidGoods() { - this.triggerEvent('clearinvalidgoods'); - }, - - // 閫変腑鍟嗗搧 - selectGoods(e) { - const { goods } = e.currentTarget.dataset; - this.triggerEvent('selectgoods', { - goods, - isSelected: !goods.isSelected, - }); - }, - - changeQuantity(num, goods) { - this.triggerEvent('changequantity', { - goods, - quantity: num, - }); - }, - changeStepper(e) { - const { value } = e.detail; - const { goods } = e.currentTarget.dataset; - let num = value; - if (value > goods.stack) { - num = goods.stack; - } - this.changeQuantity(num, goods); - }, - - input(e) { - const { value } = e.detail; - const { goods } = e.currentTarget.dataset; - const num = value; - this.changeQuantity(num, goods); - }, - - overlimit(e) { - const text = - e.detail.type === 'minus' - ? '璇ュ晢鍝佹暟閲忎笉鑳藉噺灏戜簡鍝�' - : '鍚屼竴鍟嗗搧鏈�澶氳喘涔�999浠�'; - Toast({ - context: this, - selector: '#t-toast', - message: text, - }); - }, - - // 鍘诲噾鍗�/鍐嶉�涢�� - gotoBuyMore(e) { - const { promotion, storeId = '' } = e.currentTarget.dataset; - this.triggerEvent('gocollect', { promotion, storeId }); - }, - - // 閫変腑闂ㄥ簵 - selectStore(e) { - const { storeIndex } = e.currentTarget.dataset; - const store = this.data.storeGoods[storeIndex]; - const isSelected = !store.isSelected; - if (store.storeStockShortage && isSelected) { - Toast({ - context: this, - selector: '#t-toast', - message: '閮ㄥ垎鍟嗗搧搴撳瓨涓嶈冻', - }); - return; - } - this.triggerEvent('selectstore', { - store, - isSelected, - }); - }, - - // 灞曞紑/鏀惰捣鍒囨崲 - showToggle() { - this.setData({ - isShowToggle: !this.data.isShowToggle, - }); - }, - - // 灞曠ず瑙勬牸popup - specsTap(e) { - this.isSpecsTap = true; - const { goods } = e.currentTarget.dataset; - this.setData({ - isShowSpecs: true, - currentGoods: goods, - }); - }, - - hideSpecsPopup() { - this.setData({ - isShowSpecs: false, - }); - }, - - goGoodsDetail(e) { - if (this.isSpecsTap) { - this.isSpecsTap = false; - return; - } - const { goods } = e.currentTarget.dataset; - this.triggerEvent('goodsclick', { goods }); - }, - - gotoCoupons() { - wx.navigateTo({ url: '/pages/coupon/coupon-list/index' }); - }, - }, -}); diff --git a/pages/cart/components/cart-group/index.json b/pages/cart/components/cart-group/index.json deleted file mode 100644 index 9b8003d..0000000 --- a/pages/cart/components/cart-group/index.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "component": true, - "usingComponents": { - "t-toast": "tdesign-miniprogram/toast/toast", - "t-icon": "tdesign-miniprogram/icon/icon", - "t-stepper": "tdesign-miniprogram/stepper/stepper", - "swipeout": "/components/swipeout/index", - "goods-card": "../../components/goods-card/index", - "specs-popup": "../../components/specs-popup/index" - } -} \ No newline at end of file diff --git a/pages/cart/components/cart-group/index.wxml b/pages/cart/components/cart-group/index.wxml deleted file mode 100644 index 9e3c1d9..0000000 --- a/pages/cart/components/cart-group/index.wxml +++ /dev/null @@ -1,152 +0,0 @@ -<wxs src="./index.wxs" module="handlePromotion" /> -<wxs src="./utils.wxs" module="utils" /> - -<view class="cart-group"> - <view class="goods-wrap" wx:for="{{_storeGoods}}" wx:for-item="store" wx:for-index="si" wx:key="storeId"> - <view class="cart-store"> - <t-icon - size="40rpx" - color="{{store.isSelected ? '#FA4126' : '#BBBBBB'}}" - name="{{store.isSelected ? 'check-circle-filled' : 'circle'}}" - class="cart-store__check" - bindtap="selectStore" - data-store-index="{{si}}" - /> - <view class="cart-store__content"> - <view class="store-title"> - <t-icon prefix="wr" size="40rpx" color="#333333" name="store" /> - <view class="store-name">{{store.storeName}}</view> - </view> - <view class="get-coupon" catch:tap="gotoCoupons">浼樻儬鍒�</view> - </view> - </view> - <block wx:for="{{store.promotionGoodsList}}" wx:for-item="promotion" wx:for-index="promoindex" wx:key="promoindex"> - <view - class="promotion-wrap" - wx:if="{{handlePromotion.hasPromotion(promotion.promotionCode)}}" - bindtap="gotoBuyMore" - data-promotion="{{promotion}}" - data-store-id="{{store.storeId}}" - > - <view class="promotion-title"> - <view class="promotion-icon">{{promotion.tag}}</view> - <view class="promotion-text">{{promotion.description}}</view> - </view> - <view class="promotion-action action-btn" hover-class="action-btn--active"> - <view class="promotion-action-label"> {{promotion.isNeedAddOnShop == 1 ? '鍘诲噾鍗�' : '鍐嶉�涢��'}} </view> - <t-icon name="chevron-right" size="32rpx" color="#BBBBBB" /> - </view> - </view> - <view - class="goods-item" - wx:for="{{promotion.goodsPromotionList}}" - wx:for-item="goods" - wx:for-index="gi" - wx:key="extKey" - > - <swipeout right-width="{{ 72 }}"> - <view class="goods-item-info"> - <view class="check-wrap" catchtap="selectGoods" data-goods="{{goods}}"> - <t-icon - size="40rpx" - color="{{goods.isSelected ? '#FA4126' : '#BBBBBB'}}" - name="{{goods.isSelected ? 'check-circle-filled' : 'circle'}}" - class="check" - /> - </view> - <view class="goods-sku-info"> - <goods-card - layout="horizontal-wrap" - thumb-width="{{thumbWidth}}" - thumb-height="{{thumbHeight}}" - centered="{{true}}" - data="{{goods}}" - data-goods="{{goods}}" - catchspecs="specsTap" - catchclick="goGoodsDetail" - > - <view slot="thumb-cover" class="stock-mask" wx:if="{{goods.shortageStock || goods.stockQuantity <= 3}}"> - 浠呭墿{{goods.stockQuantity}}浠� - </view> - <view slot="append-body" class="goods-stepper"> - <view class="stepper-tip" wx:if="{{goods.shortageStock}}">搴撳瓨涓嶈冻</view> - <t-stepper - classname="stepper-info" - value="{{goods.quantity}}" - min="{{1}}" - max="{{999}}" - data-goods="{{goods}}" - data-gi="{{gi}}" - data-si="{{si}}" - catchchange="changeStepper" - catchblur="input" - catchoverlimit="overlimit" - theme="filled" - /> - </view> - </goods-card> - </view> - </view> - <view slot="right" class="swiper-right-del" bindtap="deleteGoods" data-goods="{{goods}}"> 鍒犻櫎 </view> - </swipeout> - </view> - <view - class="promotion-line-wrap" - wx:if="{{handlePromotion.hasPromotion(promotion.promotionCode) && promoindex != (store.promotionGoodsList.length - 2)}}" - > - <view class="promotion-line" /> - </view> - </block> - <block wx:if="{{store.shortageGoodsList.length>0}}"> - <view - class="goods-item" - wx:for="{{store.shortageGoodsList}}" - wx:for-item="goods" - wx:for-index="gi" - wx:key="extKey" - > - <swipeout right-width="{{ 72 }}"> - <view class="goods-item-info"> - <view class="check-wrap"> - <view class="unCheck-icon" /> - </view> - <view class="goods-sku-info"> - <goods-card - layout="horizontal-wrap" - thumb-width="{{thumbWidth}}" - thumb-height="{{thumbHeight}}" - centered="{{true}}" - data="{{goods}}" - data-goods="{{goods}}" - catchspecs="specsTap" - catchclick="goGoodsDetail" - > - <view slot="thumb-cover" class="no-storage-mask" wx:if="{{goods.stockQuantity <=0}}"> - <view class="no-storage-content">鏃犺揣</view> - </view> - </goods-card> - </view> - </view> - <view slot="right" class="swiper-right-del" bindtap="deleteGoods" data-goods="{{goods}}"> 鍒犻櫎 </view> - </swipeout> - </view> - <view - class="promotion-line-wrap" - wx:if="{{handlePromotion.hasPromotion(promotion.promotionCode) && promoindex != (store.promotionGoodsList.length - 2)}}" - > - <view class="promotion-line" /> - </view> - </block> - </view> -</view> -<specs-popup - show="{{isShowSpecs}}" - title="{{currentGoods.title || ''}}" - price="{{currentGoods.price || ''}}" - thumb="{{utils.imgCut(currentGoods.thumb, 180, 180)}}" - specs="{{currentGoods.specs || []}}" - zIndex="{{999}}" - bindclose="hideSpecsPopup" -/> - -<t-toast id="t-toast" /> diff --git a/pages/cart/components/cart-group/index.wxs b/pages/cart/components/cart-group/index.wxs deleted file mode 100644 index 39f1e0b..0000000 --- a/pages/cart/components/cart-group/index.wxs +++ /dev/null @@ -1,5 +0,0 @@ -var hasPromotion = function (code) { - return code && code !== 'EMPTY_PROMOTION'; -}; - -module.exports.hasPromotion = hasPromotion; diff --git a/pages/cart/components/cart-group/index.wxss b/pages/cart/components/cart-group/index.wxss deleted file mode 100644 index 641101f..0000000 --- a/pages/cart/components/cart-group/index.wxss +++ /dev/null @@ -1,335 +0,0 @@ -.cart-group { - border-radius: 8rpx; -} -.cart-group .goods-wrap { - margin-top: 40rpx; - background-color: #fff; - border-radius: 8rpx; - overflow: hidden; -} -.cart-group .goods-wrap:first-of-type { - margin-top: 0; -} -.cart-group .cart-store { - height: 96rpx; - background-color: #fff; - box-sizing: border-box; - display: flex; - align-items: center; - padding: 0rpx 24rpx 0rpx 36rpx; -} -.cart-group .cart-store .cart-store__check { - padding: 28rpx 32rpx 28rpx 0rpx; -} -.cart-group .cart-store__content { - box-sizing: border-box; - flex: auto; - display: flex; - align-items: center; - justify-content: space-between; -} -.cart-group .cart-store__content .store-title { - flex: auto; - font-size: 28rpx; - line-height: 40rpx; - color: #333333; - display: flex; - align-items: center; - font-weight: bold; - overflow: hidden; -} - -.cart-group .cart-store__content .store-title .wr-store { - font-size: 32rpx; -} -.cart-group .cart-store__content .store-title .store-name { - overflow: hidden; - white-space: nowrap; - text-overflow: ellipsis; - margin-left: 12rpx; -} -.cart-group .cart-store__content .get-coupon { - width: 112rpx; - height: 40rpx; - border-radius: 20rpx; - background-color: #ffecf9; - line-height: 40rpx; - text-align: center; - font-size: 26rpx; - color: #fa4126; -} - -.cart-group .promotion-wrap { - display: flex; - justify-content: space-between; - align-items: center; - padding: 0rpx 24rpx 32rpx 36rpx; - background-color: #ffffff; - font-size: 24rpx; - line-height: 36rpx; - color: #222427; -} -.cart-group .promotion-wrap .promotion-title { - font-weight: bold; - flex: auto; - overflow: hidden; - margin-right: 20rpx; - display: flex; - align-items: center; -} -.cart-group .promotion-wrap .promotion-title .promotion-icon { - flex: none; - font-weight: normal; - display: inline-block; - padding: 0 8rpx; - color: #ffffff; - background: #fa4126; - font-size: 20rpx; - height: 32rpx; - line-height: 32rpx; - margin-right: 16rpx; - border-radius: 16rpx; -} -.cart-group .promotion-wrap .promotion-title .promotion-text { - flex: auto; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} -.cart-group .promotion-wrap .promotion-action { - flex: none; - color: #333333; -} -.cart-group .promotion-line-wrap { - background-color: #fff; - height: 2rpx; - display: flex; - justify-content: flex-end; -} -.cart-group .promotion-line-wrap .promotion-line { - width: 684rpx; - height: 2rpx; - background-color: #e6e6e6; -} -.cart-group .goods-item-info { - display: flex; - background-color: #fff; - align-items: flex-start; -} -.cart-group .goods-item-info .check-wrap { - margin-top: 56rpx; - padding: 20rpx 28rpx 20rpx 36rpx; -} - -.cart-group .goods-item-info .check-wrap .unCheck-icon { - box-sizing: border-box; - width: 36rpx; - height: 36rpx; - border-radius: 20rpx; - background: #f5f5f5; - border: 2rpx solid #bbbbbb; -} - -.cart-group .goods-item-info .goods-sku-info { - padding: 0rpx 32rpx 40rpx 0; - flex-grow: 1; -} -.cart-group .goods-item-info .goods-sku-info .stock-mask { - position: absolute; - color: #fff; - font-size: 24rpx; - bottom: 0rpx; - background-color: rgba(0, 0, 0, 0.5); - width: 100%; - height: 40rpx; - line-height: 40rpx; - text-align: center; -} -.cart-group .goods-item-info .goods-sku-info .goods-stepper { - position: absolute; - right: 0; - bottom: 8rpx; -} -.cart-group .goods-item-info .goods-sku-info .goods-stepper .stepper-tip { - position: absolute; - top: -36rpx; - right: 0; - height: 28rpx; - color: #ff2525; - font-size: 20rpx; - line-height: 28rpx; -} - -.cart-group .shortage-line { - width: 662rpx; - height: 2rpx; - background-color: #e6e6e6; - margin: 0 auto; -} -.cart-group .shortage-goods-wrap { - background-color: #fff; -} -.cart-group .shortage-goods-wrap .shortage-tip-title { - height: 72rpx; - line-height: 72rpx; - padding-left: 28rpx; - font-size: 24rpx; - color: #999; -} -.stepper-info { - margin-left: auto; -} -.invalid-goods-wrap { - background-color: #fff; - border-radius: 8rpx; - margin-top: 40rpx; -} -.invalid-goods-wrap .invalid-head { - display: flex; - justify-content: space-between; - padding: 30rpx 20rpx; - font-size: 24rpx; - border-bottom: 2rpx solid #f6f6f6; -} -.invalid-goods-wrap .invalid-head .invalid-title { - color: #333; - font-size: 28rpx; - font-weight: 600; -} -.invalid-goods-wrap .invalid-head .invalid-clear { - color: #fa4126; -} -.invalid-goods-wrap .toggle { - display: flex; - height: 80rpx; - justify-content: center; - align-items: center; - font-size: 24rpx; - color: #fa4126; -} -.invalid-goods-wrap .toggle .m-r-6 { - margin-right: 6rpx; -} -.invalid-goods-wrap .toggle .top-icon { - display: inline-block; - width: 0; - height: 0; - border-left: 10rpx solid transparent; - border-right: 10rpx solid transparent; - border-bottom: 10rpx solid #fa4126; -} -.invalid-goods-wrap .toggle .down-icon { - display: inline-block; - width: 0; - height: 0; - border-left: 10rpx solid transparent; - border-right: 10rpx solid transparent; - border-top: 10rpx solid #fa4126; -} -.action-btn { - display: flex; - align-items: center; -} -.action-btn .action-btn-arrow { - font-size: 20rpx; - margin-left: 8rpx; -} -.action-btn--active { - opacity: 0.5; -} - -.swiper-right-del { - height: calc(100% - 40rpx); - width: 144rpx; - background-color: #fa4126; - font-size: 28rpx; - color: white; - display: flex; - justify-content: center; - align-items: center; -} -.goods-stepper .stepper { - border: none; - border-radius: 0; - height: auto; - width: 168rpx; - overflow: visible; -} -.goods-stepper .stepper .stepper__minus, -.goods-stepper .stepper .stepper__plus { - width: 44rpx; - height: 44rpx; - background-color: #f5f5f5; -} -.goods-stepper .stepper .stepper__minus--hover, -.goods-stepper .stepper .stepper__plus--hover { - background-color: #f5f5f5; -} -.goods-stepper .stepper .stepper__minus .wr-icon, -.goods-stepper .stepper .stepper__plus .wr-icon { - font-size: 24rpx; -} -.goods-stepper .stepper .stepper__minus { - position: relative; -} -.goods-stepper .stepper .stepper__minus::after { - position: absolute; - display: block; - content: ' '; - left: -20rpx; - right: -5rpx; - top: -20rpx; - bottom: -20rpx; - background-color: transparent; -} -.goods-stepper .stepper .stepper__plus { - position: relative; -} -.goods-stepper .stepper .stepper__plus::after { - position: absolute; - display: block; - content: ' '; - left: -5rpx; - right: -20rpx; - top: -20rpx; - bottom: -20rpx; - background-color: transparent; -} -.goods-stepper .stepper .stepper__input { - width: 72rpx; - height: 44rpx; - background-color: #f5f5f5; - font-size: 24rpx; - color: #222427; - font-weight: 600; - border-left: none; - border-right: none; - min-height: 40rpx; - margin: 0 4rpx; - display: flex; - align-items: center; -} - -.goods-sku-info .no-storage-mask { - position: absolute; - color: #fff; - bottom: 0rpx; - left: 0rpx; - background-color: rgba(0, 0, 0, 0.1); - height: 192rpx; - width: 192rpx; - border-radius: 8rpx; - display: flex; - justify-content: center; - align-items: center; -} - -.no-storage-mask .no-storage-content { - width: 128rpx; - height: 128rpx; - border-radius: 64rpx; - background-color: rgba(0, 0, 0, 0.4); - text-align: center; - line-height: 128rpx; - font-size: 28rpx; -} diff --git a/pages/cart/components/cart-group/utils.wxs b/pages/cart/components/cart-group/utils.wxs deleted file mode 100644 index f887eba..0000000 --- a/pages/cart/components/cart-group/utils.wxs +++ /dev/null @@ -1,20 +0,0 @@ -module.exports.slice = function(arr) { - return arr.slice(0, 2); -}; -module.exports.imgCut = function(url, width, height) { - if (url && (url.slice(0, 5) === 'http:' || url.slice(0, 6) === 'https:' || url.slice(0, 2) === '//')) { - var argsStr = 'imageMogr2/thumbnail/!' + width + 'x' + height + 'r'; - if (url.indexOf('?') > -1) { - url = url + '&' + argsStr; - } else { - url = url + '?' + argsStr; - } - if (url.slice(0, 5) === 'http:') { - url = 'https://' + url.slice(5) - } - if (url.slice(0, 2) === '//') { - url = 'https:' + url - } - } - return url; -}; diff --git a/pages/cart/components/goods-card/index.js b/pages/cart/components/goods-card/index.js deleted file mode 100644 index c59658c..0000000 --- a/pages/cart/components/goods-card/index.js +++ /dev/null @@ -1,243 +0,0 @@ -Component({ - options: { - multipleSlots: true, // 鍦ㄧ粍浠跺畾涔夋椂鐨勯�夐」涓惎鐢ㄥslot鏀寔 - addGlobalClass: true, - }, - intersectionObserverContext: null, - - externalClasses: [ - 'card-class', - 'title-class', - 'desc-class', - 'num-class', - 'thumb-class', - 'specs-class', - 'price-class', - 'origin-price-class', - 'price-prefix-class', - ], - - properties: { - hidden: { - // 璁剧疆涓簄ull浠h〃涓嶅仛绫诲瀷杞崲 - type: null, - value: false, - observer(hidden) { - // null灏辨槸浠h〃娌℃湁璁剧疆锛屾病鏈夎缃殑璇濅笉setData锛岄槻姝㈢鍏堢粍浠惰Е鍙戠殑setHidden鎿嶄綔琚鐩� - if (hidden !== null) { - this.setHidden(!!hidden); - } - }, - }, - id: { - type: String, - // `goods-card-88888888` - // 涓嶈兘鍦ㄨ繖閲屽啓鐢熸垚閫昏緫锛屽鏋滃湪杩欓噷鍐欙紝閭d箞鍋囪鏈夊涓猤oods-list鏃讹紝浠栦滑灏嗗叡浜繖涓�� - value: '', - observer: (id) => { - this.genIndependentID(id); - if (this.properties.thresholds?.length) { - this.createIntersectionObserverHandle(); - } - }, - }, - data: { - type: Object, - observer(goods) { - // 鏈塈D鐨勫晢鍝佹墠娓叉煋 - if (!goods) { - return; - } - - /** 鍒掔嚎浠锋槸鍚︽湁鏁� */ - let isValidityLinePrice = true; - // 鍒ゆ柇涓�娆″垝绾夸环鏍兼槸鍚﹀悎鐞� - if ( - goods.originPrice && - goods.price && - goods.originPrice < goods.price - ) { - isValidityLinePrice = false; - } - - // 鏁插畾鎹㈣鏁伴噺榛樿鍊� - if (goods.lineClamp === undefined || goods.lineClamp <= 0) { - // tag鏁扮粍闀垮害 澶т簬0 涓� 鍙 - // 鎸囧畾鎹㈣涓�1琛� - if ((goods.tags?.length || 0) > 0 && !goods.hideKey?.tags) { - goods.lineClamp = 1; - } else { - goods.lineClamp = 2; - } - } - - this.setData({ goods, isValidityLinePrice }); - }, - }, - layout: { - type: String, - value: 'horizontal', - }, - thumbMode: { - type: String, - value: 'aspectFill', - }, - priceFill: { - type: Boolean, - value: true, - }, - currency: { - type: String, - value: '楼', - }, - lazyLoad: { - type: Boolean, - value: false, - }, - centered: { - type: Boolean, - value: false, - }, - pricePrefix: { - type: String, - value: '', - }, - /** 鍏冪礌鍙鐩戞帶闃堝��, 鏁扮粍闀垮害澶т簬0灏卞垱寤� */ - thresholds: { - type: Array, - value: [], - observer(current) { - if (current && current.length) { - this.createIntersectionObserverHandle(); - } else { - this.clearIntersectionObserverHandle(); - } - }, - }, - specsIconClassPrefix: { - type: String, - value: 'wr', - }, - specsIcon: { - type: String, - value: 'expand_more', - }, - addCartIconClassPrefix: { - type: String, - value: 'wr', - }, - addCartIcon: { - type: String, - value: 'cart', - }, - }, - - data: { - hiddenInData: false, - independentID: '', - goods: { id: '' }, - /** 淇濊瘉鍒掔嚎浠锋牸涓嶅皬浜庡師浠凤紝鍚﹀垯涓嶆覆鏌撳垝绾夸环 */ - isValidityLinePrice: false, - }, - - lifetimes: { - ready() { - this.init(); - }, - detached() { - this.clear(); - }, - }, - - methods: { - clickHandle() { - this.triggerEvent('click', { goods: this.data.goods }); - }, - clickThumbHandle() { - this.triggerEvent('thumb', { goods: this.data.goods }); - }, - clickSpecsHandle() { - this.triggerEvent('specs', { goods: this.data.goods }); - }, - clickTagHandle(evt) { - const { index } = evt.currentTarget.dataset; - this.triggerEvent('tag', { goods: this.data.goods, index }); - }, - // 鍔犲叆璐墿杞� - addCartHandle(e) { - const { id } = e.currentTarget; - const { id: cardID } = e.currentTarget.dataset; - this.triggerEvent('add-cart', { - ...e.detail, - id, - cardID, - goods: this.data.goods, - }); - }, - genIndependentID(id, cb) { - let independentID; - if (id) { - independentID = id; - } else { - independentID = `goods-card-${~~(Math.random() * 10 ** 8)}`; - } - this.setData({ independentID }, cb); - }, - - init() { - const { thresholds, id, hidden } = this.properties; - if (hidden !== null) { - this.setHidden(!!hidden); - } - - this.genIndependentID(id || '', () => { - if (thresholds && thresholds.length) { - this.createIntersectionObserverHandle(); - } - }); - }, - - clear() { - this.clearIntersectionObserverHandle(); - }, - - setHidden(hidden) { - this.setData({ hiddenInData: !!hidden }); - }, - - createIntersectionObserverHandle() { - if (this.intersectionObserverContext || !this.data.independentID) { - return; - } - - this.intersectionObserverContext = wx - .createIntersectionObserver(this, { - thresholds: this.properties.thresholds, - }) - .relativeToViewport(); - - this.intersectionObserverContext.observe( - `#${this.data.independentID}`, - (res) => { - this.intersectionObserverCB(res); - }, - ); - }, - intersectionObserverCB(ob) { - this.triggerEvent('ob', { - goods: this.data.goods, - context: this.intersectionObserverContext, - ob, - }); - }, - clearIntersectionObserverHandle() { - if (this.intersectionObserverContext) { - try { - this.intersectionObserverContext.disconnect(); - } catch (e) {} - - this.intersectionObserverContext = null; - } - }, - }, -}); diff --git a/pages/cart/components/goods-card/index.json b/pages/cart/components/goods-card/index.json deleted file mode 100644 index d76303b..0000000 --- a/pages/cart/components/goods-card/index.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "component": true, - "usingComponents": { - "price": "/components/price/index", - "t-tag": "tdesign-miniprogram/tag/tag", - "t-image": "/components/webp-image/index", - "t-icon": "tdesign-miniprogram/icon/icon" - } -} \ No newline at end of file diff --git a/pages/cart/components/goods-card/index.wxml b/pages/cart/components/goods-card/index.wxml deleted file mode 100644 index df4111f..0000000 --- a/pages/cart/components/goods-card/index.wxml +++ /dev/null @@ -1,75 +0,0 @@ -<view - id="{{independentID}}" - class="wr-goods-card card-class {{ layout }} {{ centered ? 'center' : ''}}" - bind:tap="clickHandle" - data-goods="{{ goods }}" - hidden="{{hiddenInData}}" -> - <view class="wr-goods-card__main"> - <view class="wr-goods-card__thumb thumb-class" bind:tap="clickThumbHandle"> - <!-- data-src 鏄柟渚垮姞璐姩鐢昏鍙栧浘鐗囩敤鐨� --> - <t-image - t-class="wr-goods-card__thumb-com" - wx:if="{{ !!goods.thumb && !goods.hideKey.thumb }}" - src="{{ goods.thumb }}" - mode="{{ thumbMode }}" - lazy-load="{{ lazyLoad }}" - /> - <slot name="thumb-cover" /> - </view> - <view class="wr-goods-card__body"> - <view class="wr-goods-card__long_content"> - <view wx:if="{{ goods.title && !goods.hideKey.title }}" class="wr-goods-card__title title-class" style="-webkit-line-clamp: {{ goods.lineClamp }};"> - <slot name="before-title" /> - {{ goods.title }} - </view> - <slot name="after-title" /> - <view wx:if="{{ goods.desc && !goods.hideKey.desc }}" class="wr-goods-card__desc desc-class">{{ goods.desc }}</view> - <slot name="after-desc" /> - <view wx:if="{{ goods.specs && goods.specs.length > 0 && !goods.hideKey.specs }}" class="wr-goods-card__specs__desc specs-class" bind:tap="clickSpecsHandle"> - <view class="wr-goods-card__specs__desc-text">{{ goods.specs }}</view> - <t-icon name="chevron-down" size="32rpx" color="#999999" /> - </view> - <view class="goods_tips" wx:if="{{goods.stockQuantity !== 0 && goods.quantity >= goods.stockQuantity}}">搴撳瓨涓嶈冻</view> - </view> - <view class="wr-goods-card__short_content"> - <block wx:if="{{goods.stockQuantity !== 0}}"> - <view wx:if="{{ pricePrefix }}" class="wr-goods-card__price__prefix price-prefix-class">{{ pricePrefix }}</view> - <slot name="price-prefix" /> - <view wx:if="{{ goods.price && !goods.hideKey.price }}" class="wr-goods-card__price"> - <price - wr-class="price-class" - symbol="{{currency}}" - price="{{goods.price}}" - fill="{{priceFill}}" - decimalSmaller - /> - </view> - <view wx:if="{{ goods.originPrice && !goods.hideKey.originPrice && isValidityLinePrice }}" class="wr-goods-card__origin-price"> - <price - wr-class="origin-price-class" - symbol="{{currency}}" - price="{{goods.originPrice}}" - fill="{{priceFill}}" - /> - </view> - <slot name="origin-price" /> - <view wx:if="{{goods.num && !goods.hideKey.num}}" class="wr-goods-card__num num-class"> - <text class="wr-goods-card__num__prefix">x </text> - {{ goods.num }} - </view> - </block> - <block wx:else> - <view class="no_storage"> - <view>璇烽噸鏂伴�夋嫨鍟嗗搧瑙勬牸</view> - <view class="no_storage__right">閲嶉��</view> - </view> - </block> - </view> - <slot name="append-body" /> - </view> - <slot name="footer" /> - </view> - <slot name="append-card" /> -</view> - diff --git a/pages/cart/components/goods-card/index.wxss b/pages/cart/components/goods-card/index.wxss deleted file mode 100644 index 6a7a4da..0000000 --- a/pages/cart/components/goods-card/index.wxss +++ /dev/null @@ -1,260 +0,0 @@ -.wr-goods-card { - box-sizing: border-box; - font-size: 24rpx; -} -/* */ -.wr-goods-card__main { - position: relative; - display: flex; - padding: 0; - background: transparent; -} - -.wr-goods-card.center .wr-goods-card__main { - align-items: flex-start; - justify-content: center; -} - -.wr-goods-card__thumb { - flex-shrink: 0; - position: relative; - width: 140rpx; - height: 140rpx; -} - -.wr-goods-card__thumb-com { - width: 192rpx; - height: 192rpx; - border-radius: 8rpx; - overflow: hidden; -} -.wr-goods-card__thumb:empty { - display: none; - margin: 0; -} - -.wr-goods-card__body { - display: flex; - margin: 0 0 0 20rpx; - flex-direction: row; - flex: 1 1 auto; - min-height: 192rpx; -} - -.wr-goods-card__long_content { - display: flex; - flex-direction: column; - overflow: hidden; - flex: 1 1 auto; -} -.wr-goods-card__long_content .goods_tips { - width: 100%; - margin-top: 16rpx; - text-align: right; - color: #fa4126; - font-size: 24rpx; - line-height: 32rpx; - font-weight: bold; -} -.wr-goods-card__title { - flex-shrink: 0; - font-size: 28rpx; - color: #333; - line-height: 40rpx; - font-weight: 400; - display: -webkit-box; - -webkit-box-orient: vertical; - overflow: hidden; - word-break: break-word; -} -.wr-goods-card__title__prefix-tags { - display: inline-flex; -} -.wr-goods-card__title__prefix-tags .prefix-tag { - margin: 0 8rpx 0 0; -} -.wr-goods-card__desc { - font-size: 24rpx; - color: #f5f5f5; - line-height: 40rpx; - display: -webkit-box; - -webkit-box-orient: vertical; - -webkit-line-clamp: 2; - overflow: hidden; -} -.wr-goods-card__specs__desc, -.wr-goods-card__specs__text { - font-size: 24rpx; - height: 32rpx; - line-height: 32rpx; - color: #999999; - margin: 8rpx 0; -} -.wr-goods-card__specs__desc { - display: flex; - align-self: flex-start; - flex-direction: row; - background: #f5f5f5; - border-radius: 8rpx; - padding: 4rpx 8rpx; -} -.wr-goods-card__specs__desc-text { - height: 100%; - max-width: 380rpx; - word-break: break-all; - overflow: hidden; - display: -webkit-box; - -webkit-box-orient: vertical; - -webkit-line-clamp: 1; -} -.wr-goods-card__specs__desc-icon { - line-height: inherit; - margin-left: 8rpx; - font-size: 24rpx; - color: #bbb; -} -.wr-goods-card__specs__text { - display: -webkit-box; - -webkit-box-orient: vertical; - -webkit-line-clamp: 1; - overflow: hidden; - text-overflow: ellipsis; - word-break: break-all; -} -.wr-goods-card__tags { - display: flex; - flex-direction: row; - flex-wrap: wrap; - margin: 16rpx 0 0 0; -} -.wr-goods-card__tag { - color: #fa550f; - background: transparent; - font-size: 20rpx; - border: 1rpx solid #fa550f; - padding: 0 8rpx; - height: 30rpx; - line-height: 30rpx; - margin: 0 8rpx 8rpx 0; - display: block; - overflow: hidden; - white-space: nowrap; - word-break: keep-all; - text-overflow: ellipsis; -} -.wr-goods-card__short_content { - display: flex; - flex-direction: column; - justify-content: flex-start; - align-items: flex-end; - margin: 0 0 0 46rpx; -} -.wr-goods-card__price__prefix { - order: 0; - color: #666; - margin: 0; -} -.wr-goods-card__price { - white-space: nowrap; - font-weight: bold; - order: 1; - color: #fa4126; - font-size: 36rpx; - margin: 0; - line-height: 48rpx; -} -.wr-goods-card__origin-price { - white-space: nowrap; - font-weight: normal; - order: 2; - color: #aaaaaa; - font-size: 24rpx; - margin: 0; -} -.wr-goods-card__num { - white-space: nowrap; - order: 4; - font-size: 24rpx; - color: #999; - margin: 20rpx 0 0 auto; -} -.wr-goods-card__num__prefix { - color: inherit; -} -.wr-goods-card__add-cart { - order: 3; - margin: auto 0 0 auto; -} -.wr-goods-card.horizontal-wrap .wr-goods-card__thumb { - width: 192rpx; - height: 192rpx; - border-radius: 8rpx; - overflow: hidden; -} -.wr-goods-card.horizontal-wrap .wr-goods-card__body { - flex-direction: column; -} -.wr-goods-card.horizontal-wrap .wr-goods-card__short_content { - flex-direction: row; - align-items: center; - margin: 16rpx 0 0 0; -} - -.wr-goods-card.horizontal-wrap .wr-goods-card__num { - margin: 0 0 0 auto; -} -.wr-goods-card.vertical .wr-goods-card__main { - padding: 0 0 22rpx 0; - flex-direction: column; -} -.wr-goods-card.vertical .wr-goods-card__thumb { - width: 340rpx; - height: 340rpx; -} -.wr-goods-card.vertical .wr-goods-card__body { - margin: 20rpx 20rpx 0 20rpx; - flex-direction: column; -} -.wr-goods-card.vertical .wr-goods-card__long_content { - overflow: hidden; -} -.wr-goods-card.vertical .wr-goods-card__title { - line-height: 36rpx; -} -.wr-goods-card.vertical .wr-goods-card__short_content { - margin: 20rpx 0 0 0; -} -.wr-goods-card.vertical .wr-goods-card__price { - order: 2; - color: #fa4126; - margin: 20rpx 0 0 0; -} -.wr-goods-card.vertical .wr-goods-card__origin-price { - order: 1; -} -.wr-goods-card.vertical .wr-goods-card__add-cart { - position: absolute; - bottom: 20rpx; - right: 20rpx; -} - -.wr-goods-card__short_content .no_storage { - display: flex; - align-items: center; - justify-content: space-between; - height: 40rpx; - color: #333; - font-size: 24rpx; - line-height: 32rpx; - width: 100%; -} - -.no_storage .no_storage__right { - width: 80rpx; - height: 40rpx; - border-radius: 20rpx; - border: 2rpx solid #fa4126; - line-height: 40rpx; - text-align: center; - color: #fa4126; -} diff --git a/pages/cart/components/specs-popup/index.js b/pages/cart/components/specs-popup/index.js deleted file mode 100644 index 650d2aa..0000000 --- a/pages/cart/components/specs-popup/index.js +++ /dev/null @@ -1,72 +0,0 @@ -Component({ - options: { - addGlobalClass: true, - multipleSlots: true, // 鍦ㄧ粍浠跺畾涔夋椂鐨勯�夐」涓惎鐢ㄥslot鏀寔 - }, - - properties: { - show: { - type: Boolean, - value: false, - }, - value: { - type: String, - value: '', - }, - title: { - type: String, - observer(newVal) { - this.setData({ 'goods.title': newVal }); - }, - }, - price: { - type: String, - value: '', - observer(newVal) { - this.setData({ 'goods.price': newVal }); - }, - }, - thumb: { - type: String, - value: '', - observer(newVal) { - this.setData({ 'goods.thumb': newVal }); - }, - }, - thumbMode: { - type: String, - value: 'aspectFit', - }, - zIndex: { - type: Number, - value: 99, - }, - specs: { - type: Array, - value: [], - }, - }, - - data: { - goods: { - title: '', - thumb: '', - price: '', - hideKey: { - originPrice: true, - tags: true, - specs: true, - num: true, - }, - }, - }, - methods: { - onClose() { - this.triggerEvent('close'); - }, - - onCloseOver() { - this.triggerEvent('closeover'); - }, - }, -}); diff --git a/pages/cart/components/specs-popup/index.json b/pages/cart/components/specs-popup/index.json deleted file mode 100644 index d59fc6d..0000000 --- a/pages/cart/components/specs-popup/index.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "component": true, - "usingComponents": { - "t-popup": "tdesign-miniprogram/popup/popup", - "goods-card": "../../components/goods-card/index" - } -} \ No newline at end of file diff --git a/pages/cart/components/specs-popup/index.wxml b/pages/cart/components/specs-popup/index.wxml deleted file mode 100644 index 4ddcb43..0000000 --- a/pages/cart/components/specs-popup/index.wxml +++ /dev/null @@ -1,26 +0,0 @@ -<t-popup - close-on-overlay-click="{{true}}" - visible="{{show}}" - placement="bottom" - z-index="{{zIndex}}" -> - <view class="specs-popup"> - <view> - <goods-card data="{{goods}}" layout="horizontal-wrap" thumb-mode="{{thumbMode}}" /> - <view class="section"> - <view class="title">宸查�夎鏍�</view> - <view class="options"> - <view - wx:for="{{specs}}" - wx:for-item="spec" - wx:key="spec" - class="option" - >{{spec}} - </view> - </view> - </view> - </view> - <view class="bottom-btn" hover-class="bottom-btn--active" bindtap="onClose">鎴戠煡閬撲簡</view> - </view> -</t-popup> - diff --git a/pages/cart/components/specs-popup/index.wxss b/pages/cart/components/specs-popup/index.wxss deleted file mode 100644 index 359c185..0000000 --- a/pages/cart/components/specs-popup/index.wxss +++ /dev/null @@ -1,68 +0,0 @@ -.specs-popup { - width: 100vw; - box-sizing: border-box; - padding: 32rpx 32rpx calc(20rpx + env(safe-area-inset-bottom)) 32rpx; - max-height: 80vh; - display: flex; - flex-direction: column; - background-color: white; - border-radius: 20rpx 20rpx 0 0; -} -.specs-popup .section { - margin-top: 44rpx; - flex: auto; - overflow-y: scroll; - overflow-x: hidden; - -webkit-overflow-scrolling: touch; -} -.specs-popup .section .title { - font-size: 26rpx; - color: #4f5356; -} -.specs-popup .section .options { - color: #333333; - font-size: 24rpx; - margin-right: -26rpx; -} -.specs-popup .section .options .option { - display: inline-block; - margin-top: 24rpx; - height: 56rpx; - line-height: 56rpx; - padding: 0 16rpx; - border-radius: 8rpx; - background-color: #f5f5f5; - max-width: 100%; - box-sizing: border-box; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; -} -.specs-popup .section .options .option:not(:last-child) { - margin-right: 26rpx; -} -.specs-popup .bottom-btn { - margin-top: 42rpx; - position: relative; - height: 80rpx; - line-height: 80rpx; - text-align: center; - background-color: white; - color: #fa4126; -} -.specs-popup .bottom-btn--active { - opacity: 0.5; -} -.specs-popup .bottom-btn::after { - display: block; - content: ' '; - position: absolute; - left: 0; - top: 0; - width: 200%; - height: 200%; - border: 1px solid #fa4126; - border-radius: 80rpx; - transform: scale(0.5); - transform-origin: left top; -} diff --git a/pages/cart/index.js b/pages/cart/index.js index e710106..db4d31b 100644 --- a/pages/cart/index.js +++ b/pages/cart/index.js @@ -1,294 +1,120 @@ -import Dialog from 'tdesign-miniprogram/dialog/index'; -import Toast from 'tdesign-miniprogram/toast/index'; -import { fetchCartGroupData } from '../../services/cart/cart'; +const app = getApp(); +// import { getPublicImage } from '@/assets/js/middleGround/tool.js' +import { getPublicImage } from '../../assets/js/middleGround/tool'; Page({ data: { - cartGroupData: null, + imgUrl: [], + shoppingCartData: [], + checkAll: false, + checkedList: [], + selectedCount: 0, + totalPrice: 0.00 }, - // 璋冪敤鑷畾涔塼abbar鐨刬nit鍑芥暟锛屼娇椤甸潰涓巘abbar婵�娲荤姸鎬佷繚鎸佷竴鑷� - onShow() { - this.getTabBar().init(); + onLoad(options) { + wx.setNavigationBarTitle({ + title: '璐墿杞�' + }); + this.shoppingCartGet(); }, - onLoad() { - this.refreshData(); - }, - - refreshData() { - this.getCartGroupData().then((res) => { - let isEmpty = true; - const cartGroupData = res.data; - // 涓�浜涚粍浠朵腑闇�瑕佺殑瀛楁鍙兘鎺ュ彛骞舵病鏈夎繑鍥烇紝鎴栬�呰繑鍥炵殑鏁版嵁缁撴瀯涓庨鏈熶笉涓�鑷达紝闇�瑕佸湪姝ゅ厛瀵规暟鎹仛涓�浜涘鐞� - // 缁熻闂ㄥ簵涓嬪姞璐殑鍟嗗搧鏄惁鍏ㄩ�夈�佹槸鍚﹀瓨鍦ㄧ己璐�/鏃犺揣 - for (const store of cartGroupData.storeGoods) { - store.isSelected = true; // 璇ラ棬搴楀凡鍔犺喘鍟嗗搧鏄惁鍏ㄩ�� - store.storeStockShortage = false; // 璇ラ棬搴楀凡鍔犺喘鍟嗗搧鏄惁瀛樺湪搴撳瓨涓嶈冻 - if (!store.shortageGoodsList) { - store.shortageGoodsList = []; // 璇ラ棬搴楀凡鍔犺喘鍟嗗搧濡傛灉搴撳瓨涓�0闇�鍗曠嫭鍒嗙粍 - } - for (const activity of store.promotionGoodsList) { - activity.goodsPromotionList = activity.goodsPromotionList.filter((goods) => { - goods.originPrice = undefined; - - // 缁熻鏄惁鏈夊姞璐暟澶т簬搴撳瓨鏁扮殑鍟嗗搧 - if (goods.quantity > goods.stockQuantity) { - store.storeStockShortage = true; - } - // 缁熻鏄惁鍏ㄩ�� - if (!goods.isSelected) { - store.isSelected = false; - } - // 搴撳瓨涓�0锛堟棤璐э級鐨勫晢鍝佸崟鐙垎缁� - if (goods.stockQuantity > 0) { - return true; - } - store.shortageGoodsList.push(goods); - return false; - }); - - if (activity.goodsPromotionList.length > 0) { - isEmpty = false; - } - } - if (store.shortageGoodsList.length > 0) { - isEmpty = false; - } - } - cartGroupData.invalidGoodItems = cartGroupData.invalidGoodItems.map((goods) => { - goods.originPrice = undefined; - return goods; - }); - cartGroupData.isNotEmpty = !isEmpty; - this.setData({ cartGroupData }); + onDelete(e) { + const item = e.currentTarget.dataset.item; + app.MG.store.delShoppingCart({ + ids: [item.id] + }).then(res => { + this.shoppingCartGet(); + wx.showToast({ title: '浣犵偣鍑讳簡鍒犻櫎', icon: 'none' }); }); }, - findGoods(spuId, skuId) { - let currentStore; - let currentActivity; - let currentGoods; - const { storeGoods } = this.data.cartGroupData; - for (const store of storeGoods) { - for (const activity of store.promotionGoodsList) { - for (const goods of activity.goodsPromotionList) { - if (goods.spuId === spuId && goods.skuId === skuId) { - currentStore = store; - currentActivity = currentActivity; - currentGoods = goods; - return { - currentStore, - currentActivity, - currentGoods, - }; - } - } - } - } - return { - currentStore, - currentActivity, - currentGoods, + shoppingCartGet() { + let query = { + start: 0, + size: 999, + filterList: [], + searchList: [] }; - }, - - // 娉細瀹為檯鍦烘櫙鏃跺簲璇ヨ皟鐢ㄦ帴鍙h幏鍙栬喘鐗╄溅鏁版嵁 - getCartGroupData() { - const { cartGroupData } = this.data; - if (!cartGroupData) { - return fetchCartGroupData(); - } - return Promise.resolve({ data: cartGroupData }); - }, - - // 閫夋嫨鍗曚釜鍟嗗搧 - // 娉細瀹為檯鍦烘櫙鏃跺簲璇ヨ皟鐢ㄦ帴鍙f洿鏀归�変腑鐘舵�� - selectGoodsService({ spuId, skuId, isSelected }) { - this.findGoods(spuId, skuId).currentGoods.isSelected = isSelected; - return Promise.resolve(); - }, - - // 鍏ㄩ�夐棬搴� - // 娉細瀹為檯鍦烘櫙鏃跺簲璇ヨ皟鐢ㄦ帴鍙f洿鏀归�変腑鐘舵�� - selectStoreService({ storeId, isSelected }) { - const currentStore = this.data.cartGroupData.storeGoods.find((s) => s.storeId === storeId); - currentStore.isSelected = isSelected; - currentStore.promotionGoodsList.forEach((activity) => { - activity.goodsPromotionList.forEach((goods) => { - goods.isSelected = isSelected; + app.MG.store.getShoppingCartProductList(query).then(res => { + res.datas.forEach(item => { + item.imgUrl = getPublicImage(item.productMonWithLinkDto.product.icon, '', '160'); }); - }); - return Promise.resolve(); - }, - // 鍔犺喘鏁伴噺鍙樻洿 - // 娉細瀹為檯鍦烘櫙鏃跺簲璇ヨ皟鐢ㄦ帴鍙� - changeQuantityService({ spuId, skuId, quantity }) { - this.findGoods(spuId, skuId).currentGoods.quantity = quantity; - return Promise.resolve(); - }, - - // 鍒犻櫎鍔犺喘鍟嗗搧 - // 娉細瀹為檯鍦烘櫙鏃跺簲璇ヨ皟鐢ㄦ帴鍙� - deleteGoodsService({ spuId, skuId }) { - function deleteGoods(group) { - for (const gindex in group) { - const goods = group[gindex]; - if (goods.spuId === spuId && goods.skuId === skuId) { - group.splice(gindex, 1); - return gindex; - } - } - return -1; - } - const { storeGoods, invalidGoodItems } = this.data.cartGroupData; - for (const store of storeGoods) { - for (const activity of store.promotionGoodsList) { - if (deleteGoods(activity.goodsPromotionList) > -1) { - return Promise.resolve(); - } - } - if (deleteGoods(store.shortageGoodsList) > -1) { - return Promise.resolve(); - } - } - if (deleteGoods(invalidGoodItems) > -1) { - return Promise.resolve(); - } - return Promise.reject(); - }, - - // 娓呯┖澶辨晥鍟嗗搧 - // 娉細瀹為檯鍦烘櫙鏃跺簲璇ヨ皟鐢ㄦ帴鍙� - clearInvalidGoodsService() { - this.data.cartGroupData.invalidGoodItems = []; - return Promise.resolve(); - }, - - onGoodsSelect(e) { - const { - goods: { spuId, skuId }, - isSelected, - } = e.detail; - const { currentGoods } = this.findGoods(spuId, skuId); - Toast({ - context: this, - selector: '#t-toast', - message: `${isSelected ? '閫夋嫨' : '鍙栨秷'}"${ - currentGoods.title.length > 5 ? `${currentGoods.title.slice(0, 5)}...` : currentGoods.title - }"`, - icon: '', - }); - this.selectGoodsService({ spuId, skuId, isSelected }).then(() => this.refreshData()); - }, - - onStoreSelect(e) { - const { - store: { storeId }, - isSelected, - } = e.detail; - this.selectStoreService({ storeId, isSelected }).then(() => this.refreshData()); - }, - - onQuantityChange(e) { - const { - goods: { spuId, skuId }, - quantity, - } = e.detail; - const { currentGoods } = this.findGoods(spuId, skuId); - const stockQuantity = currentGoods.stockQuantity > 0 ? currentGoods.stockQuantity : 0; // 閬垮厤鍚庣杩斿洖鐨勬槸-1 - // 鍔犺喘鏁伴噺瓒呰繃搴撳瓨鏁伴噺 - if (quantity > stockQuantity) { - // 鍔犺喘鏁伴噺绛変簬搴撳瓨鏁伴噺鐨勬儏鍐典笅缁х画鍔犺喘 - if (currentGoods.quantity === stockQuantity && quantity - stockQuantity === 1) { - Toast({ - context: this, - selector: '#t-toast', - message: '褰撳墠鍟嗗搧搴撳瓨涓嶈冻', - }); - return; - } - Dialog.confirm({ - title: '鍟嗗搧搴撳瓨涓嶈冻', - content: `褰撳墠鍟嗗搧搴撳瓨涓嶈冻锛屾渶澶у彲璐拱鏁伴噺涓�${stockQuantity}浠禶, - confirmBtn: '淇敼涓烘渶澶у彲璐拱鏁伴噺', - cancelBtn: '鍙栨秷', - }) - .then(() => { - this.changeQuantityService({ - spuId, - skuId, - quantity: stockQuantity, - }).then(() => this.refreshData()); - }) - .catch(() => {}); - return; - } - this.changeQuantityService({ spuId, skuId, quantity }).then(() => this.refreshData()); - }, - - goCollect() { - /** 娲诲姩鑲畾鏈変竴涓椿鍔↖D锛岀敤鏉ヨ幏鍙栨椿鍔╞anner锛屾椿鍔ㄥ晢鍝佸垪琛ㄧ瓑 */ - const promotionID = '123'; - wx.navigateTo({ - url: `/pages/promotion-detail/index?promotion_id=${promotionID}`, - }); - }, - - goGoodsDetail(e) { - const { spuId, storeId } = e.detail.goods; - wx.navigateTo({ - url: `/pages/goods/details/index?spuId=${spuId}&storeId=${storeId}`, - }); - }, - - clearInvalidGoods() { - // 瀹為檯鍦烘櫙鏃跺簲璇ヨ皟鐢ㄦ帴鍙f竻绌哄け鏁堝晢鍝� - this.clearInvalidGoodsService().then(() => this.refreshData()); - }, - - onGoodsDelete(e) { - const { - goods: { spuId, skuId }, - } = e.detail; - Dialog.confirm({ - content: '纭鍒犻櫎璇ュ晢鍝佸悧?', - confirmBtn: '纭畾', - cancelBtn: '鍙栨秷', - }).then(() => { - this.deleteGoodsService({ spuId, skuId }).then(() => { - Toast({ context: this, selector: '#t-toast', message: '鍟嗗搧鍒犻櫎鎴愬姛' }); - this.refreshData(); + this.setData({ + shoppingCartData: res.datas }); }); }, - onSelectAll(event) { - const { isAllSelected } = event?.detail ?? {}; - Toast({ - context: this, - selector: '#t-toast', - message: `${isAllSelected ? '鍙栨秷' : '鐐瑰嚮'}浜嗗叏閫夋寜閽甡, + bottomChange(e) { + const checked = e.detail.value.length > 0; + const items = this.data.shoppingCartData.map(item => { + item.checked = checked; + return item; }); - // 璋冪敤鎺ュ彛鏀瑰彉鍏ㄩ�� + this.setData({ + shoppingCartData: items, + checkAll: checked + }); + this.calculateSelectedCount(); + this.calculateTotalPrice(); }, - onToSettle() { - const goodsRequestList = []; - this.data.cartGroupData.storeGoods.forEach((store) => { - store.promotionGoodsList.forEach((promotion) => { - promotion.goodsPromotionList.forEach((m) => { - if (m.isSelected == 1) { - goodsRequestList.push(m); - } - }); - }); + HandelItemChange(e) { + const { item } = e.target.dataset; + const items = this.data.shoppingCartData + items.map(eitem => { + if (eitem.id == item.id) { + eitem.checked = e.detail.checked + } + + + }) + const data = items.filter(item => item.checked) + const checkAll = data.length == this.data.shoppingCartData.length + + this.setData({ + shoppingCartData: items, + checkAll }); - wx.setStorageSync('order.goodsRequestList', JSON.stringify(goodsRequestList)); - wx.navigateTo({ url: '/pages/order/order-confirm/index?type=cart' }); + this.calculateSelectedCount(); + this.calculateTotalPrice(); }, - onGotoHome() { - wx.switchTab({ url: '/pages/home/home' }); + + calculateSelectedCount() { + const selectedItems = this.data.shoppingCartData.filter(item => item.checked); + const selectedCount = selectedItems.length; + this.setData({ + selectedCount + }); }, + + calculateTotalPrice() { + const selectedItems = this.data.shoppingCartData.filter(item => item.checked); + const totalPrice = selectedItems.reduce((total, item) => total + parseFloat(item.saleMethod.price), 0); + this.setData({ + totalPrice: totalPrice.toFixed(2) + }); + }, + goPaymentPage() { + + + const selectedItems = this.data.shoppingCartData.filter(item => item.checked); + console.log(selectedItems, 789); + const selectedIds = selectedItems.map(item => item.id); + console.log('閫変腑鐨勫晢鍝� id:', selectedIds); + + app.MG.store.shoppingCartCreateOrder({ linkIds: selectedIds }).then(res => { + console.log(res.orderNumber, 456); + const url = '/pages/cart/paymentPage/index?orderNumber=' + res.orderNumber + wx.navigateTo({ + url + }); + + + }) + + + } }); diff --git a/pages/cart/index.json b/pages/cart/index.json index 1d2e717..cfbbec2 100644 --- a/pages/cart/index.json +++ b/pages/cart/index.json @@ -1,10 +1,9 @@ { - "navigationBarTitleText": "璐墿杞�", + "component": true, "usingComponents": { - "cart-group": "./components/cart-group/index", - "cart-empty": "./components/cart-empty/index", - "cart-bar": "./components/cart-bar/index", - "t-toast": "tdesign-miniprogram/toast/toast", - "t-dialog": "tdesign-miniprogram/dialog/dialog" + "t-checkbox": "tdesign-miniprogram/checkbox/checkbox", + "t-swipe-cell": "tdesign-miniprogram/swipe-cell/swipe-cell", + "t-cell": "tdesign-miniprogram/cell/cell", + "t-button": "tdesign-miniprogram/button/button" } } \ No newline at end of file diff --git a/pages/cart/index.wxml b/pages/cart/index.wxml index 8828092..4219ccc 100644 --- a/pages/cart/index.wxml +++ b/pages/cart/index.wxml @@ -1,31 +1,38 @@ -<!-- 鍒嗗眰璐墿杞� --> -<block wx:if="{{cartGroupData.isNotEmpty}}"> - <cart-group - store-goods="{{ cartGroupData.storeGoods }}" - invalid-good-items="{{ cartGroupData.invalidGoodItems }}" - bindselectgoods="onGoodsSelect" - bindselectstore="onStoreSelect" - bindchangequantity="onQuantityChange" - bindgocollect="goCollect" - bindgoodsclick="goGoodsDetail" - bindclearinvalidgoods="clearInvalidGoods" - binddelete="onGoodsDelete" - /> +<view class="outsideContentBox"> + <!-- <checkbox-group bindchange="HandelItemChange"> --> + <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 class="itemWarp"> + <t-cell bordered="{{false}}" title="{{item.productMonWithLinkDto.product.name}}" description="锟{item.saleMethod.price}}"> + <view slot="left-icon" class="left-icon"> + <view class="contentCheckbox"> + <t-checkbox icon="rectangle" value=" {{item.id}}" data-item="{{item}}" checked="{{item.checked}}" bindchange="HandelItemChange" /> + </view> + <view class="left-image"> + <image src="{{item.imgUrl}}" class="imageStyle" mode="" /> + </view> + </view> + </t-cell> + </view> + <!-- </view> --> + <view slot="right" class="btn delete-btn" bind:tap="onDelete" data-item="{{item}}">鍒犻櫎</view> + </t-swipe-cell> + <!-- </checkbox-group> --> +</view> - <view class="gap" /> - <!-- 鍟嗗搧灏忚浠ュ強缁撶畻鎸夐挳 --> - <cart-bar - is-all-selected="{{cartGroupData.isAllSelected}}" - total-amount="{{cartGroupData.totalAmount}}" - total-goods-num="{{cartGroupData.selectedGoodsCount}}" - total-discount-amount="{{cartGroupData.totalDiscountAmount}}" - fixed="{{true}}" - bottomHeight="{{112}}" - bindhandleSelectAll="onSelectAll" - bindhandleToSettle="onToSettle" - /> -</block> -<!-- 璐墿杞︾┖鎬� --> -<cart-empty wx:else bind:handleClick="onGotoHome" /> -<t-toast id="t-toast" /> -<t-dialog id="t-dialog" /> +<view class="bottomBox"> + <view class="checkGroupBox"> + <checkbox-group bindchange="bottomChange"> + <checkbox value="鍏ㄩ��" checked="{{checkAll}}">鍏ㄩ��</checkbox> + </checkbox-group> + </view> + <view class="settlementBox"> + <view class="totalPrice">鎬讳环:<text class="totalPriceText">锟{totalPrice}}</text></view> + <view class="buttonBox"> + <t-button class="tButtonBox" size="small" shape="round" bind:tap="goPaymentPage">鍘荤粨绠�({{selectedCount}})</t-button> + </view> + </view> +</view> \ No newline at end of file diff --git a/pages/cart/index.wxss b/pages/cart/index.wxss index ea19962..35eecdb 100644 --- a/pages/cart/index.wxss +++ b/pages/cart/index.wxss @@ -1,13 +1,169 @@ -:host { - padding-bottom: 100rpx; +/* pages/cart/item.wxss */ +.btn-wrapper { + height: 100%; } -.gap { - height: 100rpx; +.btn { + display: inline-flex; + justify-content: center; + align-items: center; + width: 120rpx; + height: 100%; + color: white; +} + +.delete-btn { + background-color: #e34d59; +} + +.edit-btn { + background-color: #ed7b2f; +} + +.favor-btn { + background-color: #0052d9; +} + +.outsideContentBox { + padding: 30rpx; + background: #F2F3F8; + border-radius: 18rpx 18rpx 18rpx 18rpx; + padding-bottom: 230rpx; + /* height: 260rpx; */ +} + +.bottomBox { + background-color: #0052d9; + position: fixed; + bottom: 0; + left: 0; + right: 0; + + padding-bottom: 53px; + height: 112rpx; + background: #FFFFFF; + box-shadow: 0rpx -2rpx 0rpx 2rpx rgba(0, 0, 0, 0.08); + display: flex; + align-items: center; +} + +.checkGroupBox { + /* flex: 1; */ + margin: 0 30rpx; + width: 120rpx; +} + + + +.settlementBox { + /* width: 100%; */ + display: flex; + align-items: center; + /* justify-content: space-between; */ +} + +.totalPrice { + /* margin: 0 50rpx; */ + +} + +.buttonBox { + + /* margin: 0 30rpx; */ + margin-left: 140rpx; +} + +.tButtonBox { + background-color: #FF6C00; + width: 200rpx; + height: 80rpx; +} + +checkbox .wx-checkbox-input { + /* border-radius: 50%; */ + /* 鍦嗚 */ + /* width: 46rpx; */ + /* 鑳屾櫙鐨勫 */ + /* height: 46rpx; */ + /* 鑳屾櫙鐨勯珮 */ + width: 30rpx; + height: 30rpx; +} + +/* 閫変腑鍚庣殑 鑳屾櫙鏍峰紡*/ +checkbox .wx-checkbox-input.wx-checkbox-input-checked { + border: 1rpx solid #FF6C00; + background: #FF6C00; +} + +checkbox .wx-checkbox-input.wx-checkbox-input-checked::before { + border-radius: 50%; + /* 鍦嗚 */ + width: 40rpx; + /* 閫変腑鍚庡鍕惧ぇ灏忥紝涓嶈瓒呰繃鑳屾櫙鐨勫昂瀵� */ + height: 40rpx; + /* 閫変腑鍚庡鍕惧ぇ灏忥紝涓嶈瓒呰繃鑳屾櫙鐨勫昂瀵� */ + line-height: 40rpx; + text-align: center; + font-size: 30rpx; + /* 瀵瑰嬀澶у皬 30rpx */ + color: #fff; + /* 瀵瑰嬀棰滆壊 鐧借壊 */ + background: transparent; + transform: translate(-50%, -50%) scale(1); + -webkit-transform: translate(-50%, -50%) scale(1); +} + + +.contentBox { + display: flex; + align-items: center; + background-color: #fff; + margin: 30rpx 0; + border-radius: 18rpx 18rpx 18rpx 18rpx; + height: 260rpx; +} + +.totalPriceText { + color: #FF6C00; +} + +.LaelBox { + margin: 50rpx; +} + +.itemWarp { + margin: 15rpx 0; +} + +.t-cell { + border-radius: 18rpx; +} + +.t-cell__left-image { + width: 150rpx; + height: 210rpx; +} + + +.contentCheckbox { + width: 100rpx; +} + +.left-icon { + display: flex; + justify-content: flex-start; + align-items: center; +} + +.left-image { + width: 152rpx; + height: 212rpx; + background: #FFFFFF; + border-radius: 0rpx 0rpx 0rpx 0rpx; +} + +.imageStyle { width: 100%; -} - -.t-button { - --td-button-default-color: #000; - --td-button-primary-text-color: #fa4126; -} + height: 100%; +} \ No newline at end of file diff --git a/pages/cart/paymentPage/index.js b/pages/cart/paymentPage/index.js new file mode 100644 index 0000000..7a4e351 --- /dev/null +++ b/pages/cart/paymentPage/index.js @@ -0,0 +1,200 @@ +// pages/cart/paymentPage/index.js +const app = getApp() +import { getPublicImage } from '../../../assets/js/middleGround/tool'; +import drawQrcode from './js/weapp.qrcode' +Page({ + + /** + * 椤甸潰鐨勫垵濮嬫暟鎹� + */ + data: { + orderNumber: null, + navBarHeight: '', + barHeight: '', + selectedIds: '', + 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; // 瀵艰埅鏍忛珮搴� + this.setData({ + orderNumber: options.orderNumber, + navBarHeight: navBarHeight, + barHeight: systInfo.statusBarHeight, + selectedIds: options.selectedIds + }) + console.log('鎺ユ敹鍒扮殑璁㈠崟鍙�:', this.data.orderNumber); + + + this.getOrderByOrderNum() + + + + + drawQrcode({ + + width: 200, // 蹇呴』锛屼簩缁寸爜瀹藉害锛屼笌canvas鐨剋idth淇濇寔涓�鑷� + + height: 200, // 蹇呴』锛屼簩缁寸爜楂樺害锛屼笌canvas鐨刪eight淇濇寔涓�鑷� + + canvasId: 'myQrcode', + + background: '#ffffff', // 闈炲繀椤伙紝浜岀淮鐮佽儗鏅鑹诧紝榛樿鍊肩櫧鑹� + + foreground: '#2bb15e', // 闈炲繀椤伙紝浜岀淮鐮佸墠鏅壊锛岄粯璁ゅ�奸粦鑹� '#000000' + + // ctx: wx.createCanvasContext('myQrcode'), // 闈炲繀椤伙紝缁樺浘涓婁笅鏂囷紝鍙�氳繃 wx.createCanvasContext('canvasId') 鑾峰彇锛寁1.0.0+鐗堟湰鏀寔 + + text: this.data.drawQrcodeText, // 蹇呴』锛屼簩缁寸爜鍐呭 + // v1.0.0+鐗堟湰鏀寔鍦ㄤ簩缁寸爜涓婄粯鍒跺浘鐗� + + image: { + // imageResource: '../../images/icon.png', // 鎸囧畾浜岀淮鐮佸皬鍥炬爣 + dx: 70, + dy: 70, + dWidth: 60, + dHeight: 60 + } + }) + + + + + + + }, + + /** + * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍒濇娓叉煋瀹屾垚 + */ + onReady() { + + }, + + /** + * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鏄剧ず + */ + onShow() { + + }, + + /** + * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰闅愯棌 + */ + onHide() { + + }, + + /** + * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍗歌浇 + */ + onUnload() { + + }, + + /** + * 椤甸潰鐩稿叧浜嬩欢澶勭悊鍑芥暟--鐩戝惉鐢ㄦ埛涓嬫媺鍔ㄤ綔 + */ + onPullDownRefresh() { + + }, + + /** + * 椤甸潰涓婃媺瑙﹀簳浜嬩欢鐨勫鐞嗗嚱鏁� + */ + onReachBottom() { + + }, + + /** + * 鐢ㄦ埛鐐瑰嚮鍙充笂瑙掑垎浜� + */ + onShareAppMessage() { + + }, + goBack() { + wx.navigateBack(); + }, + + + getOrderByOrderNum() { + let query = { + orderNum: this.data.orderNumber, + fields: { + content: [], + subtitle: [], + + + } + } + app.MG.store.getOrderByOrderNum(query).then(res => { + this.setData({ + orderGoods: res.orderNumber + }) + console.log(this.data.orderGoods, 'res.orderNumber'); + + console.log(res.payPrice); + this.setData({ + payPrice: res.payPrice.toFixed(2) + }) + res.saleMethodLinks.forEach(item => { + + item.paymentIcon = getPublicImage(item.orderSaleMethod.product.icon) + + + this.setData({ + productList: res.saleMethodLinks + }) + + }) + }) + }, + confirmOrderGet() { + let query = { + orderNum: this.data.orderGoods + } + app.MG.store.confirmOrder(query).then(res => { + 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 }); + }, + +}) \ No newline at end of file diff --git a/pages/cart/paymentPage/index.json b/pages/cart/paymentPage/index.json new file mode 100644 index 0000000..2a32d4b --- /dev/null +++ b/pages/cart/paymentPage/index.json @@ -0,0 +1,10 @@ +{ + "component": true, + + "usingComponents": { + "t-icon": "tdesign-miniprogram/icon/icon", + "t-button": "tdesign-miniprogram/button/button", + "t-dialog": "tdesign-miniprogram/dialog/dialog" + }, + "navigationStyle": "custom" +} \ No newline at end of file diff --git a/pages/cart/paymentPage/index.wxml b/pages/cart/paymentPage/index.wxml new file mode 100644 index 0000000..3490e0e --- /dev/null +++ b/pages/cart/paymentPage/index.wxml @@ -0,0 +1,74 @@ +<!--pages/cart/paymentPage/index.wxml--> +<view style="width: 100%; height: {{barHeight}}px; "></view> +<view class="nacigationBar" style="width: 70%; height: {{navBarHeight}}px;"> + <view> + <t-icon name="chevron-left" size="30" data-name="{{item}}" bind:click="goBack" /> + </view> + <view class="navbar-title">鎻愪氦璁㈠崟</view> +</view> + + + + + +<view class="content"> + + + + + + + <t-button t-class="wrapper" theme="primary" size="large" variant="outline" data-key="showCloseBtn" bind:tap="showDialog" block> + 甯﹀叧闂寜閽� + </t-button> + <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"> + <image src="{{item.paymentIcon }}" mode="" /> + <view class="cartListContent"> + <view class="cartListDetails">{{item.orderSaleMethod.product.name}}</view> + <view class="textBox">鍥句功鏈嶅姟-鐢靛瓙涔�</view> + <view class="priceBox">锟{item.payPrice}}</view> + + </view> + + </view> + + + </view> + + <view class="priceBreakdown"> + <view class="priceBreakdownContent">浠锋牸鏄庣粏</view> + <view class="amountMoney"> + <view>鍟嗗搧閲戦</view> + <view>锟{payPrice}}</view> + </view> + <view class="amount"> + <view>鍚堣锛氾骏{{payPrice}}</view> + </view> + </view> + + + + <view class="interval"></view> + + <view class="paymentBox"> + <view class="residue">寰呮敮浠橈細<text class="residueTextBox">锟{payPrice}}</text></view> + <view> + <t-button class="buttonBox" shape="round" bind:tap="confirmOrderGet">寰俊鏀粯</t-button> + </view> + </view> + +</view> \ No newline at end of file diff --git a/pages/cart/paymentPage/index.wxss b/pages/cart/paymentPage/index.wxss new file mode 100644 index 0000000..9159e8f --- /dev/null +++ b/pages/cart/paymentPage/index.wxss @@ -0,0 +1,144 @@ +/* pages/cart/paymentPage/index.wxss */ +.nacigationBar { + background-color: #fff; + display: flex; + align-items: center; + +} + +.navbar-title { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + color: #0F1214; + font-size: 40rpx; + font-weight: bold; + margin-bottom: 5rpx; +} + +.content { + width: 100%; + height: 1250rpx; + background-color: #F2F3F8; + padding: 40rpx 0; + padding-top: 1rpx; +} + +.shoppingCartList { + height: 1000rpx; + background: #FFFFFF; + border-radius: 20px; + margin: 30rpx 0; +} + +image { + width: 150rpx; + height: 210rpx; + margin: 30rpx; +} + +.cartListContent { + /* margin: 0 auto; */ +} + +.cartList { + display: flex; +} + +.cartListContent { + margin-top: 30rpx; +} + +.cartListDetails { + margin-bottom: 50rpx; + font-family: PingFang SC, PingFang SC; + font-weight: bold; + font-size: 29rpx; + color: #333333; +} + +.textBox { + font-family: PingFang SC, PingFang SC; + font-weight: 400; + font-size: 25rpx; + color: #333333; + /* margin: 10rpx 0; */ + margin-bottom: 20rpx; +} + +.priceBox { + font-weight: 500; + font-size: 31rpx; + color: #0F1214; + +} + +.priceBreakdown { + height: 280rpx; + background: #fff; + padding: 30rpx; + +} + +.priceBreakdownContent { + font-weight: bold; + font-size: 32rpx; + color: #0F1214; + margin-bottom: 50rpx; +} + +.amountMoney { + display: flex; + justify-content: space-between; + font-weight: 500; + font-size: 33rpx; + color: #0F1214; + border-bottom: 2rpx solid #EDEDED; + padding-bottom: 38rpx; +} + +.amount { + display: flex; + justify-content: flex-end; + margin: 30rpx 0; +} + + + +.interval { + width: 100%; + height: 30rpx; + background-color: #F2F3F8; +} + +.paymentBox { + /* margin-top: 50rpx; */ + display: flex; + justify-content: space-between; + padding: 30rpx; + align-items: center; +} + +.residue { + color: #949494; +} + +.residueTextBox { + font-weight: bold; + font-size: 38rpx; + color: #FF6C00; +} + +.buttonBox { + background-color: #FF6C00; + border: #fff; +} + +.myQrcodeBox { + margin: 30rpx; +} + +.myQrcodeTextBox { + text-align: center; + margin: 30rpx 0; +} \ No newline at end of file diff --git a/pages/cart/paymentPage/js/weapp.qrcode.js b/pages/cart/paymentPage/js/weapp.qrcode.js new file mode 100644 index 0000000..2967226 --- /dev/null +++ b/pages/cart/paymentPage/js/weapp.qrcode.js @@ -0,0 +1,1281 @@ +/** + * weapp.qrcode.js v1.0.0 (https://github.com/yingye/weapp-qrcode#readme) + */ + +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global.drawQrcode = factory()); +}(this, (function () { 'use strict'; + +var hasOwn = Object.prototype.hasOwnProperty; +var toStr = Object.prototype.toString; +var defineProperty = Object.defineProperty; +var gOPD = Object.getOwnPropertyDescriptor; + +var isArray = function isArray(arr) { + if (typeof Array.isArray === 'function') { + return Array.isArray(arr); + } + + return toStr.call(arr) === '[object Array]'; +}; + +var isPlainObject = function isPlainObject(obj) { + if (!obj || toStr.call(obj) !== '[object Object]') { + return false; + } + + var hasOwnConstructor = hasOwn.call(obj, 'constructor'); + var hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf'); + // Not own constructor property must be Object + if (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) { + return false; + } + + // Own properties are enumerated firstly, so to speed up, + // if last one is own, then all properties are own. + var key; + for (key in obj) { /**/ } + + return typeof key === 'undefined' || hasOwn.call(obj, key); +}; + +// If name is '__proto__', and Object.defineProperty is available, define __proto__ as an own property on target +var setProperty = function setProperty(target, options) { + if (defineProperty && options.name === '__proto__') { + defineProperty(target, options.name, { + enumerable: true, + configurable: true, + value: options.newValue, + writable: true + }); + } else { + target[options.name] = options.newValue; + } +}; + +// Return undefined instead of __proto__ if '__proto__' is not an own property +var getProperty = function getProperty(obj, name) { + if (name === '__proto__') { + if (!hasOwn.call(obj, name)) { + return void 0; + } else if (gOPD) { + // In early versions of node, obj['__proto__'] is buggy when obj has + // __proto__ as an own property. Object.getOwnPropertyDescriptor() works. + return gOPD(obj, name).value; + } + } + + return obj[name]; +}; + +var extend = function extend() { + var options, name, src, copy, copyIsArray, clone; + var target = arguments[0]; + var i = 1; + var length = arguments.length; + var deep = false; + + // Handle a deep copy situation + if (typeof target === 'boolean') { + deep = target; + target = arguments[1] || {}; + // skip the boolean and the target + i = 2; + } + if (target == null || (typeof target !== 'object' && typeof target !== 'function')) { + target = {}; + } + + for (; i < length; ++i) { + options = arguments[i]; + // Only deal with non-null/undefined values + if (options != null) { + // Extend the base object + for (name in options) { + src = getProperty(target, name); + copy = getProperty(options, name); + + // Prevent never-ending loop + if (target !== copy) { + // Recurse if we're merging plain objects or arrays + if (deep && copy && (isPlainObject(copy) || (copyIsArray = isArray(copy)))) { + if (copyIsArray) { + copyIsArray = false; + clone = src && isArray(src) ? src : []; + } else { + clone = src && isPlainObject(src) ? src : {}; + } + + // Never move original objects, clone them + setProperty(target, { name: name, newValue: extend(deep, clone, copy) }); + + // Don't bring in undefined values + } else if (typeof copy !== 'undefined') { + setProperty(target, { name: name, newValue: copy }); + } + } + } + } + } + + // Return the modified object + return target; +}; + +//--------------------------------------------------------------------- +// QRCode for JavaScript +// +// Copyright (c) 2009 Kazuhiko Arase +// +// URL: http://www.d-project.com/ +// +// Licensed under the MIT license: +// http://www.opensource.org/licenses/mit-license.php +// +// The word "QR Code" is registered trademark of +// DENSO WAVE INCORPORATED +// http://www.denso-wave.com/qrcode/faqpatent-e.html +// +//--------------------------------------------------------------------- + +//--------------------------------------------------------------------- +// QR8bitByte +//--------------------------------------------------------------------- + +function QR8bitByte(data) { + this.mode = QRMode.MODE_8BIT_BYTE; + this.data = data; +} + +QR8bitByte.prototype = { + + getLength: function (buffer) { + return this.data.length; + }, + + write: function (buffer) { + for (var i = 0; i < this.data.length; i++) { + // not JIS ... + buffer.put(this.data.charCodeAt(i), 8); + } + } +}; + +//--------------------------------------------------------------------- +// QRCode +//--------------------------------------------------------------------- + +function QRCode(typeNumber, errorCorrectLevel) { + this.typeNumber = typeNumber; + this.errorCorrectLevel = errorCorrectLevel; + this.modules = null; + this.moduleCount = 0; + this.dataCache = null; + this.dataList = new Array(); +} + +QRCode.prototype = { + + addData: function (data) { + var newData = new QR8bitByte(data); + this.dataList.push(newData); + this.dataCache = null; + }, + + isDark: function (row, col) { + if (row < 0 || this.moduleCount <= row || col < 0 || this.moduleCount <= col) { + throw new Error(row + "," + col); + } + return this.modules[row][col]; + }, + + getModuleCount: function () { + return this.moduleCount; + }, + + make: function () { + // Calculate automatically typeNumber if provided is < 1 + if (this.typeNumber < 1) { + var typeNumber = 1; + for (typeNumber = 1; typeNumber < 40; typeNumber++) { + var rsBlocks = QRRSBlock.getRSBlocks(typeNumber, this.errorCorrectLevel); + + var buffer = new QRBitBuffer(); + var totalDataCount = 0; + for (var i = 0; i < rsBlocks.length; i++) { + totalDataCount += rsBlocks[i].dataCount; + } + + for (var i = 0; i < this.dataList.length; i++) { + var data = this.dataList[i]; + buffer.put(data.mode, 4); + buffer.put(data.getLength(), QRUtil.getLengthInBits(data.mode, typeNumber)); + data.write(buffer); + } + if (buffer.getLengthInBits() <= totalDataCount * 8) break; + } + this.typeNumber = typeNumber; + } + this.makeImpl(false, this.getBestMaskPattern()); + }, + + makeImpl: function (test, maskPattern) { + + this.moduleCount = this.typeNumber * 4 + 17; + this.modules = new Array(this.moduleCount); + + for (var row = 0; row < this.moduleCount; row++) { + + this.modules[row] = new Array(this.moduleCount); + + for (var col = 0; col < this.moduleCount; col++) { + this.modules[row][col] = null; //(col + row) % 3; + } + } + + this.setupPositionProbePattern(0, 0); + this.setupPositionProbePattern(this.moduleCount - 7, 0); + this.setupPositionProbePattern(0, this.moduleCount - 7); + this.setupPositionAdjustPattern(); + this.setupTimingPattern(); + this.setupTypeInfo(test, maskPattern); + + if (this.typeNumber >= 7) { + this.setupTypeNumber(test); + } + + if (this.dataCache == null) { + this.dataCache = QRCode.createData(this.typeNumber, this.errorCorrectLevel, this.dataList); + } + + this.mapData(this.dataCache, maskPattern); + }, + + setupPositionProbePattern: function (row, col) { + + for (var r = -1; r <= 7; r++) { + + if (row + r <= -1 || this.moduleCount <= row + r) continue; + + for (var c = -1; c <= 7; c++) { + + if (col + c <= -1 || this.moduleCount <= col + c) continue; + + if (0 <= r && r <= 6 && (c == 0 || c == 6) || 0 <= c && c <= 6 && (r == 0 || r == 6) || 2 <= r && r <= 4 && 2 <= c && c <= 4) { + this.modules[row + r][col + c] = true; + } else { + this.modules[row + r][col + c] = false; + } + } + } + }, + + getBestMaskPattern: function () { + + var minLostPoint = 0; + var pattern = 0; + + for (var i = 0; i < 8; i++) { + + this.makeImpl(true, i); + + var lostPoint = QRUtil.getLostPoint(this); + + if (i == 0 || minLostPoint > lostPoint) { + minLostPoint = lostPoint; + pattern = i; + } + } + + return pattern; + }, + + createMovieClip: function (target_mc, instance_name, depth) { + + var qr_mc = target_mc.createEmptyMovieClip(instance_name, depth); + var cs = 1; + + this.make(); + + for (var row = 0; row < this.modules.length; row++) { + + var y = row * cs; + + for (var col = 0; col < this.modules[row].length; col++) { + + var x = col * cs; + var dark = this.modules[row][col]; + + if (dark) { + qr_mc.beginFill(0, 100); + qr_mc.moveTo(x, y); + qr_mc.lineTo(x + cs, y); + qr_mc.lineTo(x + cs, y + cs); + qr_mc.lineTo(x, y + cs); + qr_mc.endFill(); + } + } + } + + return qr_mc; + }, + + setupTimingPattern: function () { + + for (var r = 8; r < this.moduleCount - 8; r++) { + if (this.modules[r][6] != null) { + continue; + } + this.modules[r][6] = r % 2 == 0; + } + + for (var c = 8; c < this.moduleCount - 8; c++) { + if (this.modules[6][c] != null) { + continue; + } + this.modules[6][c] = c % 2 == 0; + } + }, + + setupPositionAdjustPattern: function () { + + var pos = QRUtil.getPatternPosition(this.typeNumber); + + for (var i = 0; i < pos.length; i++) { + + for (var j = 0; j < pos.length; j++) { + + var row = pos[i]; + var col = pos[j]; + + if (this.modules[row][col] != null) { + continue; + } + + for (var r = -2; r <= 2; r++) { + + for (var c = -2; c <= 2; c++) { + + if (r == -2 || r == 2 || c == -2 || c == 2 || r == 0 && c == 0) { + this.modules[row + r][col + c] = true; + } else { + this.modules[row + r][col + c] = false; + } + } + } + } + } + }, + + setupTypeNumber: function (test) { + + var bits = QRUtil.getBCHTypeNumber(this.typeNumber); + + for (var i = 0; i < 18; i++) { + var mod = !test && (bits >> i & 1) == 1; + this.modules[Math.floor(i / 3)][i % 3 + this.moduleCount - 8 - 3] = mod; + } + + for (var i = 0; i < 18; i++) { + var mod = !test && (bits >> i & 1) == 1; + this.modules[i % 3 + this.moduleCount - 8 - 3][Math.floor(i / 3)] = mod; + } + }, + + setupTypeInfo: function (test, maskPattern) { + + var data = this.errorCorrectLevel << 3 | maskPattern; + var bits = QRUtil.getBCHTypeInfo(data); + + // vertical + for (var i = 0; i < 15; i++) { + + var mod = !test && (bits >> i & 1) == 1; + + if (i < 6) { + this.modules[i][8] = mod; + } else if (i < 8) { + this.modules[i + 1][8] = mod; + } else { + this.modules[this.moduleCount - 15 + i][8] = mod; + } + } + + // horizontal + for (var i = 0; i < 15; i++) { + + var mod = !test && (bits >> i & 1) == 1; + + if (i < 8) { + this.modules[8][this.moduleCount - i - 1] = mod; + } else if (i < 9) { + this.modules[8][15 - i - 1 + 1] = mod; + } else { + this.modules[8][15 - i - 1] = mod; + } + } + + // fixed module + this.modules[this.moduleCount - 8][8] = !test; + }, + + mapData: function (data, maskPattern) { + + var inc = -1; + var row = this.moduleCount - 1; + var bitIndex = 7; + var byteIndex = 0; + + for (var col = this.moduleCount - 1; col > 0; col -= 2) { + + if (col == 6) col--; + + while (true) { + + for (var c = 0; c < 2; c++) { + + if (this.modules[row][col - c] == null) { + + var dark = false; + + if (byteIndex < data.length) { + dark = (data[byteIndex] >>> bitIndex & 1) == 1; + } + + var mask = QRUtil.getMask(maskPattern, row, col - c); + + if (mask) { + dark = !dark; + } + + this.modules[row][col - c] = dark; + bitIndex--; + + if (bitIndex == -1) { + byteIndex++; + bitIndex = 7; + } + } + } + + row += inc; + + if (row < 0 || this.moduleCount <= row) { + row -= inc; + inc = -inc; + break; + } + } + } + } + +}; + +QRCode.PAD0 = 0xEC; +QRCode.PAD1 = 0x11; + +QRCode.createData = function (typeNumber, errorCorrectLevel, dataList) { + + var rsBlocks = QRRSBlock.getRSBlocks(typeNumber, errorCorrectLevel); + + var buffer = new QRBitBuffer(); + + for (var i = 0; i < dataList.length; i++) { + var data = dataList[i]; + buffer.put(data.mode, 4); + buffer.put(data.getLength(), QRUtil.getLengthInBits(data.mode, typeNumber)); + data.write(buffer); + } + + // calc num max data. + var totalDataCount = 0; + for (var i = 0; i < rsBlocks.length; i++) { + totalDataCount += rsBlocks[i].dataCount; + } + + if (buffer.getLengthInBits() > totalDataCount * 8) { + throw new Error("code length overflow. (" + buffer.getLengthInBits() + ">" + totalDataCount * 8 + ")"); + } + + // end code + if (buffer.getLengthInBits() + 4 <= totalDataCount * 8) { + buffer.put(0, 4); + } + + // padding + while (buffer.getLengthInBits() % 8 != 0) { + buffer.putBit(false); + } + + // padding + while (true) { + + if (buffer.getLengthInBits() >= totalDataCount * 8) { + break; + } + buffer.put(QRCode.PAD0, 8); + + if (buffer.getLengthInBits() >= totalDataCount * 8) { + break; + } + buffer.put(QRCode.PAD1, 8); + } + + return QRCode.createBytes(buffer, rsBlocks); +}; + +QRCode.createBytes = function (buffer, rsBlocks) { + + var offset = 0; + + var maxDcCount = 0; + var maxEcCount = 0; + + var dcdata = new Array(rsBlocks.length); + var ecdata = new Array(rsBlocks.length); + + for (var r = 0; r < rsBlocks.length; r++) { + + var dcCount = rsBlocks[r].dataCount; + var ecCount = rsBlocks[r].totalCount - dcCount; + + maxDcCount = Math.max(maxDcCount, dcCount); + maxEcCount = Math.max(maxEcCount, ecCount); + + dcdata[r] = new Array(dcCount); + + for (var i = 0; i < dcdata[r].length; i++) { + dcdata[r][i] = 0xff & buffer.buffer[i + offset]; + } + offset += dcCount; + + var rsPoly = QRUtil.getErrorCorrectPolynomial(ecCount); + var rawPoly = new QRPolynomial(dcdata[r], rsPoly.getLength() - 1); + + var modPoly = rawPoly.mod(rsPoly); + ecdata[r] = new Array(rsPoly.getLength() - 1); + for (var i = 0; i < ecdata[r].length; i++) { + var modIndex = i + modPoly.getLength() - ecdata[r].length; + ecdata[r][i] = modIndex >= 0 ? modPoly.get(modIndex) : 0; + } + } + + var totalCodeCount = 0; + for (var i = 0; i < rsBlocks.length; i++) { + totalCodeCount += rsBlocks[i].totalCount; + } + + var data = new Array(totalCodeCount); + var index = 0; + + for (var i = 0; i < maxDcCount; i++) { + for (var r = 0; r < rsBlocks.length; r++) { + if (i < dcdata[r].length) { + data[index++] = dcdata[r][i]; + } + } + } + + for (var i = 0; i < maxEcCount; i++) { + for (var r = 0; r < rsBlocks.length; r++) { + if (i < ecdata[r].length) { + data[index++] = ecdata[r][i]; + } + } + } + + return data; +}; + +//--------------------------------------------------------------------- +// QRMode +//--------------------------------------------------------------------- + +var QRMode = { + MODE_NUMBER: 1 << 0, + MODE_ALPHA_NUM: 1 << 1, + MODE_8BIT_BYTE: 1 << 2, + MODE_KANJI: 1 << 3 +}; + +//--------------------------------------------------------------------- +// QRErrorCorrectLevel +//--------------------------------------------------------------------- + +var QRErrorCorrectLevel = { + L: 1, + M: 0, + Q: 3, + H: 2 +}; + +//--------------------------------------------------------------------- +// QRMaskPattern +//--------------------------------------------------------------------- + +var QRMaskPattern = { + PATTERN000: 0, + PATTERN001: 1, + PATTERN010: 2, + PATTERN011: 3, + PATTERN100: 4, + PATTERN101: 5, + PATTERN110: 6, + PATTERN111: 7 +}; + +//--------------------------------------------------------------------- +// QRUtil +//--------------------------------------------------------------------- + +var QRUtil = { + + PATTERN_POSITION_TABLE: [[], [6, 18], [6, 22], [6, 26], [6, 30], [6, 34], [6, 22, 38], [6, 24, 42], [6, 26, 46], [6, 28, 50], [6, 30, 54], [6, 32, 58], [6, 34, 62], [6, 26, 46, 66], [6, 26, 48, 70], [6, 26, 50, 74], [6, 30, 54, 78], [6, 30, 56, 82], [6, 30, 58, 86], [6, 34, 62, 90], [6, 28, 50, 72, 94], [6, 26, 50, 74, 98], [6, 30, 54, 78, 102], [6, 28, 54, 80, 106], [6, 32, 58, 84, 110], [6, 30, 58, 86, 114], [6, 34, 62, 90, 118], [6, 26, 50, 74, 98, 122], [6, 30, 54, 78, 102, 126], [6, 26, 52, 78, 104, 130], [6, 30, 56, 82, 108, 134], [6, 34, 60, 86, 112, 138], [6, 30, 58, 86, 114, 142], [6, 34, 62, 90, 118, 146], [6, 30, 54, 78, 102, 126, 150], [6, 24, 50, 76, 102, 128, 154], [6, 28, 54, 80, 106, 132, 158], [6, 32, 58, 84, 110, 136, 162], [6, 26, 54, 82, 110, 138, 166], [6, 30, 58, 86, 114, 142, 170]], + + G15: 1 << 10 | 1 << 8 | 1 << 5 | 1 << 4 | 1 << 2 | 1 << 1 | 1 << 0, + G18: 1 << 12 | 1 << 11 | 1 << 10 | 1 << 9 | 1 << 8 | 1 << 5 | 1 << 2 | 1 << 0, + G15_MASK: 1 << 14 | 1 << 12 | 1 << 10 | 1 << 4 | 1 << 1, + + getBCHTypeInfo: function (data) { + var d = data << 10; + while (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G15) >= 0) { + d ^= QRUtil.G15 << QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G15); + } + return (data << 10 | d) ^ QRUtil.G15_MASK; + }, + + getBCHTypeNumber: function (data) { + var d = data << 12; + while (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G18) >= 0) { + d ^= QRUtil.G18 << QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G18); + } + return data << 12 | d; + }, + + getBCHDigit: function (data) { + + var digit = 0; + + while (data != 0) { + digit++; + data >>>= 1; + } + + return digit; + }, + + getPatternPosition: function (typeNumber) { + return QRUtil.PATTERN_POSITION_TABLE[typeNumber - 1]; + }, + + getMask: function (maskPattern, i, j) { + + switch (maskPattern) { + + case QRMaskPattern.PATTERN000: + return (i + j) % 2 == 0; + case QRMaskPattern.PATTERN001: + return i % 2 == 0; + case QRMaskPattern.PATTERN010: + return j % 3 == 0; + case QRMaskPattern.PATTERN011: + return (i + j) % 3 == 0; + case QRMaskPattern.PATTERN100: + return (Math.floor(i / 2) + Math.floor(j / 3)) % 2 == 0; + case QRMaskPattern.PATTERN101: + return i * j % 2 + i * j % 3 == 0; + case QRMaskPattern.PATTERN110: + return (i * j % 2 + i * j % 3) % 2 == 0; + case QRMaskPattern.PATTERN111: + return (i * j % 3 + (i + j) % 2) % 2 == 0; + + default: + throw new Error("bad maskPattern:" + maskPattern); + } + }, + + getErrorCorrectPolynomial: function (errorCorrectLength) { + + var a = new QRPolynomial([1], 0); + + for (var i = 0; i < errorCorrectLength; i++) { + a = a.multiply(new QRPolynomial([1, QRMath.gexp(i)], 0)); + } + + return a; + }, + + getLengthInBits: function (mode, type) { + + if (1 <= type && type < 10) { + + // 1 - 9 + + switch (mode) { + case QRMode.MODE_NUMBER: + return 10; + case QRMode.MODE_ALPHA_NUM: + return 9; + case QRMode.MODE_8BIT_BYTE: + return 8; + case QRMode.MODE_KANJI: + return 8; + default: + throw new Error("mode:" + mode); + } + } else if (type < 27) { + + // 10 - 26 + + switch (mode) { + case QRMode.MODE_NUMBER: + return 12; + case QRMode.MODE_ALPHA_NUM: + return 11; + case QRMode.MODE_8BIT_BYTE: + return 16; + case QRMode.MODE_KANJI: + return 10; + default: + throw new Error("mode:" + mode); + } + } else if (type < 41) { + + // 27 - 40 + + switch (mode) { + case QRMode.MODE_NUMBER: + return 14; + case QRMode.MODE_ALPHA_NUM: + return 13; + case QRMode.MODE_8BIT_BYTE: + return 16; + case QRMode.MODE_KANJI: + return 12; + default: + throw new Error("mode:" + mode); + } + } else { + throw new Error("type:" + type); + } + }, + + getLostPoint: function (qrCode) { + + var moduleCount = qrCode.getModuleCount(); + + var lostPoint = 0; + + // LEVEL1 + + for (var row = 0; row < moduleCount; row++) { + + for (var col = 0; col < moduleCount; col++) { + + var sameCount = 0; + var dark = qrCode.isDark(row, col); + + for (var r = -1; r <= 1; r++) { + + if (row + r < 0 || moduleCount <= row + r) { + continue; + } + + for (var c = -1; c <= 1; c++) { + + if (col + c < 0 || moduleCount <= col + c) { + continue; + } + + if (r == 0 && c == 0) { + continue; + } + + if (dark == qrCode.isDark(row + r, col + c)) { + sameCount++; + } + } + } + + if (sameCount > 5) { + lostPoint += 3 + sameCount - 5; + } + } + } + + // LEVEL2 + + for (var row = 0; row < moduleCount - 1; row++) { + for (var col = 0; col < moduleCount - 1; col++) { + var count = 0; + if (qrCode.isDark(row, col)) count++; + if (qrCode.isDark(row + 1, col)) count++; + if (qrCode.isDark(row, col + 1)) count++; + if (qrCode.isDark(row + 1, col + 1)) count++; + if (count == 0 || count == 4) { + lostPoint += 3; + } + } + } + + // LEVEL3 + + for (var row = 0; row < moduleCount; row++) { + for (var col = 0; col < moduleCount - 6; col++) { + if (qrCode.isDark(row, col) && !qrCode.isDark(row, col + 1) && qrCode.isDark(row, col + 2) && qrCode.isDark(row, col + 3) && qrCode.isDark(row, col + 4) && !qrCode.isDark(row, col + 5) && qrCode.isDark(row, col + 6)) { + lostPoint += 40; + } + } + } + + for (var col = 0; col < moduleCount; col++) { + for (var row = 0; row < moduleCount - 6; row++) { + if (qrCode.isDark(row, col) && !qrCode.isDark(row + 1, col) && qrCode.isDark(row + 2, col) && qrCode.isDark(row + 3, col) && qrCode.isDark(row + 4, col) && !qrCode.isDark(row + 5, col) && qrCode.isDark(row + 6, col)) { + lostPoint += 40; + } + } + } + + // LEVEL4 + + var darkCount = 0; + + for (var col = 0; col < moduleCount; col++) { + for (var row = 0; row < moduleCount; row++) { + if (qrCode.isDark(row, col)) { + darkCount++; + } + } + } + + var ratio = Math.abs(100 * darkCount / moduleCount / moduleCount - 50) / 5; + lostPoint += ratio * 10; + + return lostPoint; + } + +}; + +//--------------------------------------------------------------------- +// QRMath +//--------------------------------------------------------------------- + +var QRMath = { + + glog: function (n) { + + if (n < 1) { + throw new Error("glog(" + n + ")"); + } + + return QRMath.LOG_TABLE[n]; + }, + + gexp: function (n) { + + while (n < 0) { + n += 255; + } + + while (n >= 256) { + n -= 255; + } + + return QRMath.EXP_TABLE[n]; + }, + + EXP_TABLE: new Array(256), + + LOG_TABLE: new Array(256) + +}; + +for (var i = 0; i < 8; i++) { + QRMath.EXP_TABLE[i] = 1 << i; +} +for (var i = 8; i < 256; i++) { + QRMath.EXP_TABLE[i] = QRMath.EXP_TABLE[i - 4] ^ QRMath.EXP_TABLE[i - 5] ^ QRMath.EXP_TABLE[i - 6] ^ QRMath.EXP_TABLE[i - 8]; +} +for (var i = 0; i < 255; i++) { + QRMath.LOG_TABLE[QRMath.EXP_TABLE[i]] = i; +} + +//--------------------------------------------------------------------- +// QRPolynomial +//--------------------------------------------------------------------- + +function QRPolynomial(num, shift) { + + if (num.length == undefined) { + throw new Error(num.length + "/" + shift); + } + + var offset = 0; + + while (offset < num.length && num[offset] == 0) { + offset++; + } + + this.num = new Array(num.length - offset + shift); + for (var i = 0; i < num.length - offset; i++) { + this.num[i] = num[i + offset]; + } +} + +QRPolynomial.prototype = { + + get: function (index) { + return this.num[index]; + }, + + getLength: function () { + return this.num.length; + }, + + multiply: function (e) { + + var num = new Array(this.getLength() + e.getLength() - 1); + + for (var i = 0; i < this.getLength(); i++) { + for (var j = 0; j < e.getLength(); j++) { + num[i + j] ^= QRMath.gexp(QRMath.glog(this.get(i)) + QRMath.glog(e.get(j))); + } + } + + return new QRPolynomial(num, 0); + }, + + mod: function (e) { + + if (this.getLength() - e.getLength() < 0) { + return this; + } + + var ratio = QRMath.glog(this.get(0)) - QRMath.glog(e.get(0)); + + var num = new Array(this.getLength()); + + for (var i = 0; i < this.getLength(); i++) { + num[i] = this.get(i); + } + + for (var i = 0; i < e.getLength(); i++) { + num[i] ^= QRMath.gexp(QRMath.glog(e.get(i)) + ratio); + } + + // recursive call + return new QRPolynomial(num, 0).mod(e); + } +}; + +//--------------------------------------------------------------------- +// QRRSBlock +//--------------------------------------------------------------------- + +function QRRSBlock(totalCount, dataCount) { + this.totalCount = totalCount; + this.dataCount = dataCount; +} + +QRRSBlock.RS_BLOCK_TABLE = [ + +// L +// M +// Q +// H + +// 1 +[1, 26, 19], [1, 26, 16], [1, 26, 13], [1, 26, 9], + +// 2 +[1, 44, 34], [1, 44, 28], [1, 44, 22], [1, 44, 16], + +// 3 +[1, 70, 55], [1, 70, 44], [2, 35, 17], [2, 35, 13], + +// 4 +[1, 100, 80], [2, 50, 32], [2, 50, 24], [4, 25, 9], + +// 5 +[1, 134, 108], [2, 67, 43], [2, 33, 15, 2, 34, 16], [2, 33, 11, 2, 34, 12], + +// 6 +[2, 86, 68], [4, 43, 27], [4, 43, 19], [4, 43, 15], + +// 7 +[2, 98, 78], [4, 49, 31], [2, 32, 14, 4, 33, 15], [4, 39, 13, 1, 40, 14], + +// 8 +[2, 121, 97], [2, 60, 38, 2, 61, 39], [4, 40, 18, 2, 41, 19], [4, 40, 14, 2, 41, 15], + +// 9 +[2, 146, 116], [3, 58, 36, 2, 59, 37], [4, 36, 16, 4, 37, 17], [4, 36, 12, 4, 37, 13], + +// 10 +[2, 86, 68, 2, 87, 69], [4, 69, 43, 1, 70, 44], [6, 43, 19, 2, 44, 20], [6, 43, 15, 2, 44, 16], + +// 11 +[4, 101, 81], [1, 80, 50, 4, 81, 51], [4, 50, 22, 4, 51, 23], [3, 36, 12, 8, 37, 13], + +// 12 +[2, 116, 92, 2, 117, 93], [6, 58, 36, 2, 59, 37], [4, 46, 20, 6, 47, 21], [7, 42, 14, 4, 43, 15], + +// 13 +[4, 133, 107], [8, 59, 37, 1, 60, 38], [8, 44, 20, 4, 45, 21], [12, 33, 11, 4, 34, 12], + +// 14 +[3, 145, 115, 1, 146, 116], [4, 64, 40, 5, 65, 41], [11, 36, 16, 5, 37, 17], [11, 36, 12, 5, 37, 13], + +// 15 +[5, 109, 87, 1, 110, 88], [5, 65, 41, 5, 66, 42], [5, 54, 24, 7, 55, 25], [11, 36, 12], + +// 16 +[5, 122, 98, 1, 123, 99], [7, 73, 45, 3, 74, 46], [15, 43, 19, 2, 44, 20], [3, 45, 15, 13, 46, 16], + +// 17 +[1, 135, 107, 5, 136, 108], [10, 74, 46, 1, 75, 47], [1, 50, 22, 15, 51, 23], [2, 42, 14, 17, 43, 15], + +// 18 +[5, 150, 120, 1, 151, 121], [9, 69, 43, 4, 70, 44], [17, 50, 22, 1, 51, 23], [2, 42, 14, 19, 43, 15], + +// 19 +[3, 141, 113, 4, 142, 114], [3, 70, 44, 11, 71, 45], [17, 47, 21, 4, 48, 22], [9, 39, 13, 16, 40, 14], + +// 20 +[3, 135, 107, 5, 136, 108], [3, 67, 41, 13, 68, 42], [15, 54, 24, 5, 55, 25], [15, 43, 15, 10, 44, 16], + +// 21 +[4, 144, 116, 4, 145, 117], [17, 68, 42], [17, 50, 22, 6, 51, 23], [19, 46, 16, 6, 47, 17], + +// 22 +[2, 139, 111, 7, 140, 112], [17, 74, 46], [7, 54, 24, 16, 55, 25], [34, 37, 13], + +// 23 +[4, 151, 121, 5, 152, 122], [4, 75, 47, 14, 76, 48], [11, 54, 24, 14, 55, 25], [16, 45, 15, 14, 46, 16], + +// 24 +[6, 147, 117, 4, 148, 118], [6, 73, 45, 14, 74, 46], [11, 54, 24, 16, 55, 25], [30, 46, 16, 2, 47, 17], + +// 25 +[8, 132, 106, 4, 133, 107], [8, 75, 47, 13, 76, 48], [7, 54, 24, 22, 55, 25], [22, 45, 15, 13, 46, 16], + +// 26 +[10, 142, 114, 2, 143, 115], [19, 74, 46, 4, 75, 47], [28, 50, 22, 6, 51, 23], [33, 46, 16, 4, 47, 17], + +// 27 +[8, 152, 122, 4, 153, 123], [22, 73, 45, 3, 74, 46], [8, 53, 23, 26, 54, 24], [12, 45, 15, 28, 46, 16], + +// 28 +[3, 147, 117, 10, 148, 118], [3, 73, 45, 23, 74, 46], [4, 54, 24, 31, 55, 25], [11, 45, 15, 31, 46, 16], + +// 29 +[7, 146, 116, 7, 147, 117], [21, 73, 45, 7, 74, 46], [1, 53, 23, 37, 54, 24], [19, 45, 15, 26, 46, 16], + +// 30 +[5, 145, 115, 10, 146, 116], [19, 75, 47, 10, 76, 48], [15, 54, 24, 25, 55, 25], [23, 45, 15, 25, 46, 16], + +// 31 +[13, 145, 115, 3, 146, 116], [2, 74, 46, 29, 75, 47], [42, 54, 24, 1, 55, 25], [23, 45, 15, 28, 46, 16], + +// 32 +[17, 145, 115], [10, 74, 46, 23, 75, 47], [10, 54, 24, 35, 55, 25], [19, 45, 15, 35, 46, 16], + +// 33 +[17, 145, 115, 1, 146, 116], [14, 74, 46, 21, 75, 47], [29, 54, 24, 19, 55, 25], [11, 45, 15, 46, 46, 16], + +// 34 +[13, 145, 115, 6, 146, 116], [14, 74, 46, 23, 75, 47], [44, 54, 24, 7, 55, 25], [59, 46, 16, 1, 47, 17], + +// 35 +[12, 151, 121, 7, 152, 122], [12, 75, 47, 26, 76, 48], [39, 54, 24, 14, 55, 25], [22, 45, 15, 41, 46, 16], + +// 36 +[6, 151, 121, 14, 152, 122], [6, 75, 47, 34, 76, 48], [46, 54, 24, 10, 55, 25], [2, 45, 15, 64, 46, 16], + +// 37 +[17, 152, 122, 4, 153, 123], [29, 74, 46, 14, 75, 47], [49, 54, 24, 10, 55, 25], [24, 45, 15, 46, 46, 16], + +// 38 +[4, 152, 122, 18, 153, 123], [13, 74, 46, 32, 75, 47], [48, 54, 24, 14, 55, 25], [42, 45, 15, 32, 46, 16], + +// 39 +[20, 147, 117, 4, 148, 118], [40, 75, 47, 7, 76, 48], [43, 54, 24, 22, 55, 25], [10, 45, 15, 67, 46, 16], + +// 40 +[19, 148, 118, 6, 149, 119], [18, 75, 47, 31, 76, 48], [34, 54, 24, 34, 55, 25], [20, 45, 15, 61, 46, 16]]; + +QRRSBlock.getRSBlocks = function (typeNumber, errorCorrectLevel) { + + var rsBlock = QRRSBlock.getRsBlockTable(typeNumber, errorCorrectLevel); + + if (rsBlock == undefined) { + throw new Error("bad rs block @ typeNumber:" + typeNumber + "/errorCorrectLevel:" + errorCorrectLevel); + } + + var length = rsBlock.length / 3; + + var list = new Array(); + + for (var i = 0; i < length; i++) { + + var count = rsBlock[i * 3 + 0]; + var totalCount = rsBlock[i * 3 + 1]; + var dataCount = rsBlock[i * 3 + 2]; + + for (var j = 0; j < count; j++) { + list.push(new QRRSBlock(totalCount, dataCount)); + } + } + + return list; +}; + +QRRSBlock.getRsBlockTable = function (typeNumber, errorCorrectLevel) { + + switch (errorCorrectLevel) { + case QRErrorCorrectLevel.L: + return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 0]; + case QRErrorCorrectLevel.M: + return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 1]; + case QRErrorCorrectLevel.Q: + return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 2]; + case QRErrorCorrectLevel.H: + return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 3]; + default: + return undefined; + } +}; + +//--------------------------------------------------------------------- +// QRBitBuffer +//--------------------------------------------------------------------- + +function QRBitBuffer() { + this.buffer = new Array(); + this.length = 0; +} + +QRBitBuffer.prototype = { + + get: function (index) { + var bufIndex = Math.floor(index / 8); + return (this.buffer[bufIndex] >>> 7 - index % 8 & 1) == 1; + }, + + put: function (num, length) { + for (var i = 0; i < length; i++) { + this.putBit((num >>> length - i - 1 & 1) == 1); + } + }, + + getLengthInBits: function () { + return this.length; + }, + + putBit: function (bit) { + + var bufIndex = Math.floor(this.length / 8); + if (this.buffer.length <= bufIndex) { + this.buffer.push(0); + } + + if (bit) { + this.buffer[bufIndex] |= 0x80 >>> this.length % 8; + } + + this.length++; + } +}; + +// support Chinese +function utf16to8(str) { + var out, i, len, c; + out = ''; + len = str.length; + for (i = 0; i < len; i++) { + c = str.charCodeAt(i); + if (c >= 0x0001 && c <= 0x007F) { + out += str.charAt(i); + } else if (c > 0x07FF) { + out += String.fromCharCode(0xE0 | c >> 12 & 0x0F); + out += String.fromCharCode(0x80 | c >> 6 & 0x3F); + out += String.fromCharCode(0x80 | c >> 0 & 0x3F); + } else { + out += String.fromCharCode(0xC0 | c >> 6 & 0x1F); + out += String.fromCharCode(0x80 | c >> 0 & 0x3F); + } + } + return out; +} + +function drawQrcode(options) { + options = options || {}; + options = extend(true, { + width: 256, + height: 256, + x: 0, + y: 0, + typeNumber: -1, + correctLevel: QRErrorCorrectLevel.H, + background: '#ffffff', + foreground: '#000000', + image: { + imageResource: '', + dx: 0, + dy: 0, + dWidth: 100, + dHeight: 100 + } + }, options); + + if (!options.canvasId && !options.ctx) { + console.warn('please set canvasId or ctx!'); + return; + } + + createCanvas(); + + function createCanvas() { + // create the qrcode itself + var qrcode = new QRCode(options.typeNumber, options.correctLevel); + qrcode.addData(utf16to8(options.text)); + qrcode.make(); + + // get canvas context + var ctx; + if (options.ctx) { + ctx = options.ctx; + } else { + ctx = options._this ? wx.createCanvasContext && wx.createCanvasContext(options.canvasId, options._this) : wx.createCanvasContext && wx.createCanvasContext(options.canvasId); + } + + // compute tileW/tileH based on options.width/options.height + var tileW = options.width / qrcode.getModuleCount(); + var tileH = options.height / qrcode.getModuleCount(); + + // draw in the canvas + for (var row = 0; row < qrcode.getModuleCount(); row++) { + for (var col = 0; col < qrcode.getModuleCount(); col++) { + var style = qrcode.isDark(row, col) ? options.foreground : options.background; + ctx.setFillStyle(style); + var w = Math.ceil((col + 1) * tileW) - Math.floor(col * tileW); + var h = Math.ceil((row + 1) * tileW) - Math.floor(row * tileW); + ctx.fillRect(Math.round(col * tileW) + options.x, Math.round(row * tileH) + options.y, w, h); + } + } + + if (options.image.imageResource) { + ctx.drawImage(options.image.imageResource, options.image.dx, options.image.dy, options.image.dWidth, options.image.dHeight); + } + + ctx.draw(false, function (e) { + options.callback && options.callback(e); + }); + } +} + +return drawQrcode; + +}))); diff --git a/pages/goods/details/components/buy-bar/index.js b/pages/goods/details/components/buy-bar/index.js index ae274e2..16d3f33 100644 --- a/pages/goods/details/components/buy-bar/index.js +++ b/pages/goods/details/components/buy-bar/index.js @@ -40,6 +40,7 @@ data: { fillPrice: false, + shoppingCartGetId: null }, methods: { @@ -47,6 +48,24 @@ const { isStock } = this.properties; if (!isStock) return; this.triggerEvent('toAddCart'); + // let query = { + // start: 0, + // size: 999, + // filterList: [], + // searchList: [] + // } + // app.MG.store.getShoppingCartProductList(query).then(res => { + // res.datas.forEach((item) => { + // console.log(item.saleMethod.id, 'item.saleMethod.id'); + // this.setData({ + // shoppingCartGetId: item.saleMethod.id + // }) + + // }) + // }) + + + }, toBuyNow(e) { diff --git a/pages/goods/details/components/buy-bar/index.wxml b/pages/goods/details/components/buy-bar/index.wxml index 604afb4..a7aa86c 100644 --- a/pages/goods/details/components/buy-bar/index.wxml +++ b/pages/goods/details/components/buy-bar/index.wxml @@ -1,38 +1,29 @@ <view class="flex soldout flex-center wr-sold-out" wx:if="{{soldout || !isStock}}"> - {{soldout ? '鍟嗗搧宸蹭笅鏋�' : '鍟嗗搧宸插敭棣�'}} + {{soldout ? '鍟嗗搧宸蹭笅鏋�' : '鍟嗗搧宸插敭棣�'}} </view> <view class="footer-cont flex flex-between wr-class"> - <view class="flex flex-between bottom-operate-left" wx:if="{{jumpArray.length > 0}}"> - <view - wx:for="{{jumpArray}}" - wx:key="index" - class="icon-warp operate-wrap" - bindtap="toNav" - data-ele="foot_navigation" - data-index="{{index}}" - data-url="{{item.url}}" - > - <view> - <text wx:if="{{shopCartNum > 0 && item.showCartNum}}" class="tag-cart-num"> - {{shopCartNum > 99 ? '99+' : shopCartNum}} - </text> - <t-icon prefix="wr" name="{{item.iconName}}" size="40rpx" /> - <view class="operate-text">{{item.title}}</view> - </view> - </view> - </view> - <block wx:if="{{buttonType === 1}}"> - <view class="flex buy-buttons"> - <view class="bar-separately {{soldout || !isStock ? 'bar-addCart-disabled' : ''}}" bindtap="toAddCart"> - 鍔犲叆璐墿杞� - </view> - <view class="bar-buy {{soldout || !isStock ? 'bar-buyNow-disabled' : ''}}" bindtap="toBuyNow"> - 绔嬪嵆璐拱 - </view> - </view> - </block> - <block wx:if="{{isSlotButton}}"> - <slot name="buyButton" /> - </block> -</view> - + <view class="flex flex-between bottom-operate-left" wx:if="{{jumpArray.length > 0}}"> + <view wx:for="{{jumpArray}}" wx:key="index" class="icon-warp operate-wrap" bindtap="toNav" data-ele="foot_navigation" data-index="{{index}}" data-url="{{item.url}}"> + <view> + <text wx:if="{{shopCartNum > 0 && item.showCartNum}}" class="tag-cart-num"> + {{shopCartNum > 99 ? '99+' : shopCartNum}} + </text> + <t-icon prefix="wr" name="{{item.iconName}}" size="40rpx" /> + <view class="operate-text">{{item.title}}</view> + </view> + </view> + </view> + <block wx:if="{{buttonType === 1}}"> + <view class="flex buy-buttons"> + <view class="bar-separately {{soldout || !isStock ? 'bar-addCart-disabled' : ''}}" bindtap="toAddCart"> + 鍔犲叆璐墿杞� + </view> + <view class="bar-buy {{soldout || !isStock ? 'bar-buyNow-disabled' : ''}}" bindtap="toBuyNow"> + 绔嬪嵆璐拱 + </view> + </view> + </block> + <block wx:if="{{isSlotButton}}"> + <slot name="buyButton" /> + </block> +</view> \ No newline at end of file diff --git a/pages/personalCenter/certificate/index.wxss b/pages/personalCenter/certificate/index.wxss index e69de29..b13f6f1 100644 --- a/pages/personalCenter/certificate/index.wxss +++ b/pages/personalCenter/certificate/index.wxss @@ -0,0 +1 @@ +/* pages/personalCenter/certificate/index.wxss */ \ No newline at end of file diff --git a/pages/resourceDetails/index.js b/pages/resourceDetails/index.js new file mode 100644 index 0000000..d0aca67 --- /dev/null +++ b/pages/resourceDetails/index.js @@ -0,0 +1,76 @@ +// pages/resourceDetails/index.js +Page({ + + /** + * 椤甸潰鐨勫垵濮嬫暟鎹� + */ + data: { + navBarHeight: '', + barHeight: '', + vURL: 'http://wxsnsdy.tc.qq.com/105/20210/snsdyvideodownload?filekey=30280201010421301f0201690402534804102ca905ce620b1241b726bc41dcff44e00204012882540400&bizid=1023&hy=SH&fileparam=302c020101042530230204136ffd93020457e3c4ff02024ef202031e8d7f02030f42400204045a320a0201000400' + }, + + /** + * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍔犺浇 + */ + onLoad(options) { + const systInfo = wx.getSystemInfoSync(); + const menu = wx.getMenuButtonBoundingClientRect(); // 鑳跺泭淇℃伅 + const navBarHeight = (menu.top - systInfo.statusBarHeight) * 2 + menu.height; // 瀵艰埅鏍忛珮搴� + this.setData({ + + navBarHeight: navBarHeight, + barHeight: systInfo.statusBarHeight, + + }) + }, + + /** + * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍒濇娓叉煋瀹屾垚 + */ + onReady() { + + }, + + /** + * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鏄剧ず + */ + onShow() { + + }, + + /** + * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰闅愯棌 + */ + onHide() { + + }, + + /** + * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍗歌浇 + */ + onUnload() { + + }, + + /** + * 椤甸潰鐩稿叧浜嬩欢澶勭悊鍑芥暟--鐩戝惉鐢ㄦ埛涓嬫媺鍔ㄤ綔 + */ + onPullDownRefresh() { + + }, + + /** + * 椤甸潰涓婃媺瑙﹀簳浜嬩欢鐨勫鐞嗗嚱鏁� + */ + onReachBottom() { + + }, + + /** + * 鐢ㄦ埛鐐瑰嚮鍙充笂瑙掑垎浜� + */ + onShareAppMessage() { + + } +}) \ No newline at end of file diff --git a/pages/resourceDetails/index.json b/pages/resourceDetails/index.json new file mode 100644 index 0000000..02871f3 --- /dev/null +++ b/pages/resourceDetails/index.json @@ -0,0 +1,6 @@ +{ + "usingComponents": { + "t-icon": "tdesign-miniprogram/icon/icon" + }, + "navigationStyle": "custom" +} \ No newline at end of file diff --git a/pages/resourceDetails/index.wxml b/pages/resourceDetails/index.wxml new file mode 100644 index 0000000..240b234 --- /dev/null +++ b/pages/resourceDetails/index.wxml @@ -0,0 +1,13 @@ +<view style="width: 100%; height: {{barHeight}}px; "></view> +<view class="nacigationBar" style="width: 70%; height: {{navBarHeight}}px;"> + <view> + <t-icon name="chevron-left" size="30" data-name="{{item}}" bind:click="goBack" /> + </view> + <view class="navbar-title">璧勬簮璇︽儏</view> +</view> + + + +<view class="videoBox"> + <video src="{{vURL}}" play-btn-position='center' object-fit='fill' controls enable-play-gesture enable-auto-rotation></video> +</view> \ No newline at end of file diff --git a/pages/resourceDetails/index.wxss b/pages/resourceDetails/index.wxss new file mode 100644 index 0000000..35232d2 --- /dev/null +++ b/pages/resourceDetails/index.wxss @@ -0,0 +1,25 @@ +/* pages/resourceDetails/index.wxss */ +.nacigationBar { + background-color: #fff; + display: flex; + align-items: center; + +} + +.navbar-title { + white-space: nowrap; + /* overflow: hidden; */ + text-overflow: ellipsis; + color: #0F1214; + font-size: 40rpx; + font-weight: bold; + margin-bottom: 5rpx; +} + +.videoBox { + width: 100%; +} + +.videoBox video { + width: 100vw; +} \ No newline at end of file diff --git a/pages/retrievalPage/index.js b/pages/retrievalPage/index.js new file mode 100644 index 0000000..1e532af --- /dev/null +++ b/pages/retrievalPage/index.js @@ -0,0 +1,522 @@ +// pages/retrievalPage/index.js +import request from '../../assets/request/index' + +import { handleQueryResourceListData } from '../../assets/js/middleGround/tool' +const app = getApp() +Page({ + + /** + * 椤甸潰鐨勫垵濮嬫暟鎹� + */ + data: { + tabPanelstyle: 'display:flex;justify-content:center;align-items:center;', + navBarHeight: '', + barHeight: '', + searchVal: '', + bookData: [], //鍥句功 + bookTotal: 0, + courseData: [], //璇剧▼ + courseTotal: 0, + digitalTextbooksData: [], //鏁板瓧鏁欐潗 + digitalTextbooksTotal: 0, + seminarData: [], //涓撻鐮旇 + seminarTotal: 0, + biblioClassificationData: [],//涔﹀睍 + biblioClassificationTotal: 0, + bookFairData: [],//涔︾洰 + bookFairTotal: 0 + }, + + /** + * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍔犺浇 + */ + onLoad(options) { + const systInfo = wx.getSystemInfoSync(); + const menu = wx.getMenuButtonBoundingClientRect(); // 鑳跺泭淇℃伅 + const navBarHeight = (menu.top - systInfo.statusBarHeight) * 2 + menu.height; // 瀵艰埅鏍忛珮搴� + this.setData({ + + navBarHeight: navBarHeight, + barHeight: systInfo.statusBarHeight, + + }) + + + this.retrievalPageGet() + this.bibliographyGet() + }, + + /** + * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍒濇娓叉煋瀹屾垚 + */ + onReady() { + + }, + + /** + * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鏄剧ず + */ + onShow() { + + }, + + /** + * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰闅愯棌 + */ + onHide() { + + }, + + /** + * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍗歌浇 + */ + onUnload() { + + }, + + /** + * 椤甸潰鐩稿叧浜嬩欢澶勭悊鍑芥暟--鐩戝惉鐢ㄦ埛涓嬫媺鍔ㄤ綔 + */ + onPullDownRefresh() { + + }, + + /** + * 椤甸潰涓婃媺瑙﹀簳浜嬩欢鐨勫鐞嗗嚱鏁� + */ + onReachBottom() { + + }, + + /** + * 鐢ㄦ埛鐐瑰嚮鍙充笂瑙掑垎浜� + */ + onShareAppMessage() { + + }, + goBack() { + wx.navigateBack(); + }, + //鍙栨秷鎸夐挳 + onCancellation() { + this.setData({ + searchVal: '' + }) + this.retrievalPageGet() + this.bibliographyGet() + }, + onTabsChange(event) { + console.log(`Change tab, tab-panel searchVal is ${event.detail.searchVal}.`); + }, + + onTabsClick(event) { + console.log(`Click tab, tab-panel searchVal is ${event.detail.searchVal}.`); + }, + + + retrievalPageGet() { + + let fields = { + liveTime: [], + lecturer: [], + startTime: [], + jsek_link: [], + courseLeader: [], + affiliatedUnit: [], + publishingUnit: [], + classHours: [], + author: [], + subtitle: [] + } + let searchObj = {} + if (this.data.searchVal) { + searchObj = { + 'Name*': this.data.searchVal.trim(), + '||author*': this.data.searchVal.trim(), + '||isbn*': this.data.searchVal.trim(), + '||seriesName*': this.data.searchVal.trim() + } + + } + let url = '/store/api/ApiQueryProductByAppUser' + //鍥句功 + let queryBook = { + AccessControl: { + Path: '*', + StoreRefCode: 'defaultGoodsStore27', + Type: '*', + LinkType: '' + }, + PageQuery: { + Start: 0, + Size: 999 + }, + SortQuery: [ + { + LinkOrder: 'Desc' + } + ], + CreateDate: [], + Description: [], + Name: [], + Icon: [], + RefCode: [], + TypeId: [], + SysType: [], + State: [], + Tag: [], + BeginDate: [], + EndDate: [], + ProductLinkInfo: [], + AllowDonate: [], + ...searchObj, + ...fields + } + + + let courseObj = {} + if (this.data.searchVal) { + courseObj = { + 'Name*': this.data.searchVal.trim(), + '||author*': this.data.searchVal.trim(), + '||isbn*': this.data.searchVal.trim(), + '||seriesName*': this.data.searchVal.trim() + } + + } + //璇剧▼ + let queryCourse = { + AccessControl: { + Path: '*', + StoreRefCode: 'jsek_digitalCourses', + Type: '*', + LinkType: '' + }, + PageQuery: { + Start: 0, + Size: 999 + }, + SortQuery: [ + { + LinkOrder: 'Desc' + } + ], + CreateDate: [], + Description: [], + Name: [], + Icon: [], + RefCode: [], + TypeId: [], + SysType: [], + State: [], + Tag: [], + BeginDate: [], + EndDate: [], + ProductLinkInfo: [], + AllowDonate: [], + ...courseObj, + ...fields + } + + let digitalTextbooksObj = {} + if (this.data.searchVal) { + digitalTextbooksObj = { + 'Name*': this.data.searchVal.trim(), + '||author*': this.data.searchVal.trim(), + '||isbn*': this.data.searchVal.trim(), + '||seriesName*': this.data.searchVal.trim() + } + + } + // 鏁板瓧鏁欐潗 + let queryDigitalTextbooks = { + AccessControl: { + Path: '*', + StoreRefCode: 'jsek_digitalTextbooks', + Type: '*', + LinkType: '' + }, + PageQuery: { + Start: 0, + Size: 999 + }, + SortQuery: [ + { + LinkOrder: 'Desc' + } + ], + CreateDate: [], + Description: [], + Name: [], + Icon: [], + RefCode: [], + TypeId: [], + SysType: [], + State: [], + Tag: [], + BeginDate: [], + EndDate: [], + ProductLinkInfo: [], + AllowDonate: [], + ...digitalTextbooksObj, + ...fields + } + + + let seminarObj = {} + if (this.data.searchVal) { + seminarObj = { + 'Name*': this.data.searchVal.trim(), + '||author*': this.data.searchVal.trim(), + '||isbn*': this.data.searchVal.trim(), + '||seriesName*': this.data.searchVal.trim() + } + + } + // 涓撻鐮旇 + let querySeminar = { + AccessControl: { + Path: '*', + StoreRefCode: 'jsek_seminar', + Type: '*', + LinkType: '' + }, + PageQuery: { + Start: 0, + Size: 999 + }, + SortQuery: [ + { + LinkOrder: 'Desc' + } + ], + CreateDate: [], + Description: [], + Name: [], + Icon: [], + RefCode: [], + TypeId: [], + SysType: [], + State: [], + Tag: [], + BeginDate: [], + EndDate: [], + ProductLinkInfo: [], + AllowDonate: [], + ...fields, + ...seminarObj + } + let biblioClassificationObj = {} + if (this.data.searchVal) { + biblioClassificationObj = { + 'Name*': this.data.searchVal.trim(), + '||author*': this.data.searchVal.trim(), + '||isbn*': this.data.searchVal.trim(), + '||seriesName*': this.data.searchVal.trim() + } + + } + //涔﹀睍 + let queryBiblioClassification = { + AccessControl: { + Path: '*', + StoreRefCode: 'jsek_bookFair', + Type: '*', + LinkType: '' + }, + + PageQuery: { + Start: 0, + Size: 999 + }, + SortQuery: [ + { + LinkOrder: 'Desc' + } + ], + CreateDate: [], + Description: [], + Name: [], + Icon: [], + RefCode: [], + TypeId: [], + SysType: [], + State: [], + Tag: [], + BeginDate: [], + EndDate: [], + ProductLinkInfo: [], + AllowDonate: [], + content: [], + backgroundSelection: [], + ...fields, + ...biblioClassificationObj + } + let body = { + query: JSON.stringify({ + Query: [{ + queryBook: queryBook + }, { + queryCourse: queryCourse + }, { + queryDigitalTextbooks: queryDigitalTextbooks + }, { + querySeminar: querySeminar + }, { + queryBiblioClassification: queryBiblioClassification + }] + }) + } + request({ + url: url, + method: 'post', + data: body + }).then((resp) => { + // console.log(resp); + + //鍥句功 0 + const data1 = resp[0] + const datas1 = handleQueryResourceListData({ + datas: data1.datas, + fields + }) + this.setData({ + bookData: datas1, + bookTotal: data1.totalCount + }) + + + + + //鏁板瓧璇剧▼ 1 + const data2 = resp[1] + const datas2 = handleQueryResourceListData({ + datas: data2.datas, + fields + }) + this.setData({ + courseData: datas2, + courseTotal: data2.totalCount + }) + + + + // 鏁板瓧鏁欐潗 2 + const data3 = resp[2] + const datas3 = handleQueryResourceListData({ + datas: data3.datas, + fields + }) + this.setData({ + digitalTextbooksData: datas3, + digitalTextbooksTotal: data3.totalCount + }) + + // 涓撻鐮旇 3 + + const data4 = resp[3] + const datas4 = handleQueryResourceListData({ + datas: data4.datas, + fields + }) + + this.setData({ + seminarData: datas4, + seminarTotal: data4.totalCount + }) + // 涔﹀睍 4 + const data5 = resp[4] + const datas5 = handleQueryResourceListData({ + datas: data5.datas, + fields + }) + + this.setData({ + biblioClassificationData: datas5, + biblioClassificationTotal: data5.totalCount + }) + + + + + }) + + }, + bibliographyGet() { + let bibliographyObj = {} + if (this.data.searchVal) { + bibliographyObj = { + 'Name*': this.data.searchVal.trim(), + '||author*': this.data.searchVal.trim(), + '||isbn*': this.data.searchVal.trim(), + '||seriesName*': this.data.searchVal.trim() + } + + } + app.MG.resource.getItem({ + path: 'jsek_biblioClassification', + queryType: '*', + paging: { + start: 0, + size: 999 + }, + coverSize: { + width: 260 + }, + fields: { + jsek_link: [], + content: [], + subtitle: [], + fileType: [], + jsek_resource: [], + freeFile: [], + ...bibliographyObj + }, + SysType: "CmsItem" + }).then(res => { + // console.log(res); + this.setData({ + bookFairData: res.datas, + bookFairTotal: res.total + }) + + }) + }, + 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 + item.determine = false + + setTimeout(() => { + if (URL) { + item.determine = true + } + }, 600) + wx.downloadFile({ + url: URL, + success: function (res) { + const filePath = res.tempFilePath; + wx.openDocument({ + filePath: filePath, + success: function (res) { + console.log('鎵撳紑鏂囨。鎴愬姛'); + }, + fail: function (res) { + console.log('鎵撳紑鏂囨。澶辫触', res); + } + }); + }, + fail: function (res) { + console.log('涓嬭浇鏂囦欢澶辫触', res); + } + }); + }, + onSearchSubmit() { + console.log(this.data.searchVal); + this.retrievalPageGet() + this.bibliographyGet() + } + +}) \ No newline at end of file diff --git a/pages/retrievalPage/index.json b/pages/retrievalPage/index.json new file mode 100644 index 0000000..3c65fd8 --- /dev/null +++ b/pages/retrievalPage/index.json @@ -0,0 +1,10 @@ +{ + "component": true, + "usingComponents": { + "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" + }, + "navigationStyle": "custom" +} \ No newline at end of file diff --git a/pages/retrievalPage/index.wxml b/pages/retrievalPage/index.wxml new file mode 100644 index 0000000..8e32bfc --- /dev/null +++ b/pages/retrievalPage/index.wxml @@ -0,0 +1,164 @@ +<!--pages/retrievalPage/index.wxml--> +<view style="width: 100%; height: {{barHeight}}px; "></view> +<view class="nacigationBar" style="width: 70%; height: {{navBarHeight}}px;"> + <view> + <t-icon name="chevron-left" size="30" data-name="{{item}}" bind:click="goBack" /> + </view> + <view class="navbar-title">妫�绱㈢粨鏋�</view> +</view> + + +<view class="example-search"> + <t-search bind:submit="onSearchSubmit" class="searchBox" model:value="{{searchVal}}" placeholder="璇疯緭鍏ュ叧閿瘝/涔﹀悕/ISBN/浣滆��" /> + + <view class="cancellation" bind:tap="onCancellation">鍙栨秷</view> +</view> + + + + +<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 class="bookDataForBox" wx:for="{{bookData}}" wx:key="index" wx:for-item="item" wx:for-index="index"> + <view class="imageBox"> + <image src="{{item.icon}}" mode="" /> + </view> + <view class="bookDataNmae"> + {{item.name}} + </view> + <view class="bookDataAuthor">{{item.author}}</view> + </view> + </view> + + + + + </t-tab-panel> + <t-tab-panel label="璇剧▼({{courseTotal}})" value="1"> + + + <view class="listBox1"> + <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 class="specialSubject-img"> + <image src="{{item.icon}}" mode="aspectFill" class="img" /> + </view> + <view class="body-info"> + <view class="name">{{item.name}}</view> + <view class="flex jc-sb"> + <text class="author">{{item.courseLeader}}</text> + <text>{{item.classHours}}璇炬椂</text> + </view> + <view class="priceBox flex jc-sb"> + <text class="price" wx:if="{{item.price == 0}}">鍏嶈垂</text> + <text class="price" wx:if="{{item.price !== 0}}">锟{item.price}}</text> + <image src="/static/images/home/home-cart.png" mode="aspectFill" class="addCartImg" /> + </view> + </view> + </view> + </view> + </view> + <view class="empyt" wx:else> + <t-empty icon="folder-open" description="鏆傛棤鏁版嵁" font-size="80" /> + </view> + </view> + + + </t-tab-panel> + <t-tab-panel label="鏁板瓧鏁欐潗({{digitalTextbooksTotal}})" value="2"> + + + + + <view class="bookDataBox"> + + + <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="" /> + </view> + <view class="bookDataNmae"> + {{item.name}} + </view> + <view class="bookDataAuthor">{{item.author}}</view> + </view> + </view> + + + + + + + </t-tab-panel> + <t-tab-panel label="涓撻({{seminarTotal}})" value="3"> + <view class="listBox"> + <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"> + <image src="{{item.icon}}" mode="aspectFill" class="img" /> + </view> + <view class="body-info"> + <view class="name">{{item.name}}</view> + <view class="time" wx:if="{{item.liveTime}}">鐩存挱鏃堕棿锛�<text>{{item.liveTime}}</text></view> + <view class="time" wx:if="{{item.startTime}}">寮�鎾椂闂达細<text>{{ item.startTime }}</text></view> + <view class="time" wx:if="{{!item.liveTime && !item.startTime}}">寮�鎾椂闂达細<text class="grey">寰呭畾</text></view> + <view class="flex jc-sb"> + <text class="author">{{item.lecturer}}</text> + <text class="price" wx:if="{{item.price == 0}}">鍏嶈垂</text> + <text class="price" wx:if="{{item.price !== 0}}">锟{item.price}}</text> + </view> + </view> + </view> + </view> + </view> + + + + </t-tab-panel> + <t-tab-panel label="涔︾洰({{bookFairTotal}})" value="4"> + + + + + <view class="outsideHigherBox"> + <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="" /> + <view class="downloadIcon" bind:tap="downloadData" data-item="{{item}}"> + + <image wx:if="{{determine}}" class="download" src="/static/images/bibliographyList/downloadshiftin.png" mode="" /> + <image wx:else="" class="downloadshiftin" src="/static/images/bibliographyList/download.png" mode="" /> + </view> + </view> + + <view class="higherTextBox">{{item.name}}</view> + </view> + + </view> + + + + + + + + + </t-tab-panel> + <t-tab-panel label="涔﹀睍({{biblioClassificationTotal}})" value="5"> + <view class="outside"> + <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="" /> + <view class="textBox" title="{{item.name}}"> <text>{{item.name}}</text></view> + </view> + + </view> + + + + </t-tab-panel> +</t-tabs> \ No newline at end of file diff --git a/pages/retrievalPage/index.wxss b/pages/retrievalPage/index.wxss new file mode 100644 index 0000000..1d9cce0 --- /dev/null +++ b/pages/retrievalPage/index.wxss @@ -0,0 +1,289 @@ +/* pages/retrievalPage/index.wxss */ + +.nacigationBar { + background-color: #fff; + display: flex; + align-items: center; + +} + +.navbar-title { + white-space: nowrap; + /* overflow: hidden; */ + text-overflow: ellipsis; + color: #0F1214; + font-size: 40rpx; + font-weight: bold; + margin-bottom: 5rpx; +} + +.example-search { + background-color: #fff; + padding: 16rpx 32rpx; + display: flex; + align-items: center; + /* font-size: 25rpx; */ + color: #999999; +} + +.searchBox { + width: 614rpx; + /* margin-right: 20rpx; */ +} + +.cancellation { + width: 80rpx; + margin-left: 15rpx; +} + + +.custom-tabs { + margin-bottom: 32rpx; +} + +.custom-panel { + /* height: 120px; */ +} + +.imageBox { + width: 190rpx; + height: 280rpx; + box-shadow: 10rpx 10rpx 10rpx 10rpx rgba(0, 0, 0, 0.08); +} + +image { + width: 100%; + height: 100%; +} + +.bookDataBox { + display: flex; + flex-wrap: wrap; +} + +.bookDataForBox { + width: 190rpx; + margin: 30rpx; +} + +.bookDataNmae { + margin: 20rpx 0; + font-family: PingFang SC, PingFang SC; + font-weight: bold; + font-size: 25rpx; + color: #333333; + word-break: break-all; + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + overflow: hidden; + +} + + + +.bookDataAuthor { + font-family: PingFang SC, PingFang SC; + font-weight: 400; + font-size: 22rpx; + color: #333333; +} + + +.listBox { + padding: 20rpx 0; + display: flex; + flex-flow: row wrap; + justify-content: space-between; + margin: 20rpx; + +} + +.listBox .listItemBox { + width: 49%; + margin-bottom: 50rpx; + +} + +.listItemBox .listItem { + background: #fff; + box-sizing: border-box; + border-radius: 5px; + overflow: hidden; + box-shadow: 0px 0px 20rpx 2px #f1f1f1; +} + + +.listBox .specialSubject-img { + width: 100%; + height: 120rpx; +} + +.specialSubject-img image { + width: 100%; + height: 100%; + object-fit: contain; +} + +.body-info { + padding: 20rpx; + font-size: 28rpx; +} + +.body-info .name { + font-size: 32rpx; + height: 88rpx; + color: #333333; + font-weight: bold; + line-height: 44rpx; + display: -webkit-box; + margin-bottom: 10rpx; + -webkit-box-orient: vertical; + -webkit-line-clamp: 2; + overflow: hidden; + text-overflow: ellipsis; +} + +.body-info .time { + font-size: 26rpx; + margin-bottom: 10rpx; +} + +.body-info .author { + font-size: 26rpx; + display: flex; + justify-content: space-between; +} + +.body-info .price { + font-size: 26rpx; + color: #ff6d00; +} + +.flex { + display: flex; +} + +.jc-sb { + justify-content: space-between +} + + +.listBox1, +.listBox2 { + padding: 50rpx 0; +} + +.listBox1 .listItemBox { + height: 220rpx; + margin-bottom: 30rpx; +} + +.listBox1 .specialSubject-img { + width: 400rpx; + height: 218rpx; +} + +.listBox1 .addCartImg, +.listBox3 .addCartImg { + width: 30rpx; + height: 30rpx; +} + +.listBox1 .priceBox { + margin-top: 14rpx; +} + +.outside { + display: flex; + flex-wrap: wrap; + justify-content: space-between; + margin: 15px; + + +} + +.contentBox { + width: 330rpx; + /* height: 231rpx; */ + /* border: 1px #000 solid; */ + margin: 10px 0; + background-color: #fff; + +} + +.textBox { + width: 280rpx; + /* height: 75rpx; */ + font-size: 25rpx; + + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-box-orient: vertical; + -webkit-line-clamp: 2; + /* text-align: center; */ + margin: 20rpx; + +} + +.bookFairImage { + width: 327rpx; + height: 128rpx; +} + +.outsideHigherBox { + display: flex; + flex-wrap: wrap; +} + +.higherBox { + width: 220rpx; + /* height: 390rpx; */ + box-shadow: 10rpx 10rpx 10rpx 10rpx rgba(0, 0, 0, 0.08); + margin: 30rpx 15rpx; +} + +.outsideHigherImageBox { + + position: relative; +} + +.higherImageBox { + width: 190rpx; + height: 255rpx; + margin: 15rpx; +} + +.downloadIcon { + width: 34rpx; + height: 34rpx; + + border-radius: 5rpx 5rpx 5rpx 5rpx; + background: rgba(0, 0, 0, 0.3); + position: absolute; + top: 15rpx; + right: 15rpx; + padding: 10rpx; +} + + +.download { + /* background-color: #8bc34a; */ + width: 100%; + height: 100%; + +} + +.downloadshiftin { + width: 100%; + height: 100%; +} + +.higherTextBox { + font-weight: bold; + font-size: 25rpx; + color: #333333; + padding: 15rpx; + margin-bottom: 10rpx; +} \ No newline at end of file diff --git a/services/cart/cart.js b/services/cart/cart.js index d42f959..5b48a23 100644 --- a/services/cart/cart.js +++ b/services/cart/cart.js @@ -1,20 +1,20 @@ -import { config } from '../../config/index'; +// import { config } from '../../config/index'; -/** 鑾峰彇璐墿杞ock鏁版嵁 */ -function mockFetchCartGroupData(params) { - const { delay } = require('../_utils/delay'); - const { genCartGroupData } = require('../../model/cart'); +// /** 鑾峰彇璐墿杞ock鏁版嵁 */ +// function mockFetchCartGroupData(params) { +// const { delay } = require('../_utils/delay'); +// const { genCartGroupData } = require('../../model/cart'); - return delay().then(() => genCartGroupData(params)); -} +// return delay().then(() => genCartGroupData(params)); +// } -/** 鑾峰彇璐墿杞︽暟鎹� */ -export function fetchCartGroupData(params) { - if (config.useMock) { - return mockFetchCartGroupData(params); - } +// /** 鑾峰彇璐墿杞︽暟鎹� */ +// export function fetchCartGroupData(params) { +// if (config.useMock) { +// return mockFetchCartGroupData(params); +// } - return new Promise((resolve) => { - resolve('real api'); - }); -} +// return new Promise((resolve) => { +// resolve('real api'); +// }); +// } diff --git a/static/images/bibliographyList/download.png b/static/images/bibliographyList/download.png new file mode 100644 index 0000000..4dce634 --- /dev/null +++ b/static/images/bibliographyList/download.png Binary files differ diff --git a/static/images/bibliographyList/downloadshiftin.png b/static/images/bibliographyList/downloadshiftin.png new file mode 100644 index 0000000..7838645 --- /dev/null +++ b/static/images/bibliographyList/downloadshiftin.png Binary files differ diff --git a/pages/bookExhibitionList/img/banner.png b/static/images/bookExhibitionList/banner.png similarity index 100% rename from pages/bookExhibitionList/img/banner.png rename to static/images/bookExhibitionList/banner.png Binary files differ diff --git a/static/video/sea.mp4 b/static/video/sea.mp4 new file mode 100644 index 0000000..328ebe3 --- /dev/null +++ b/static/video/sea.mp4 Binary files differ -- Gitblit v1.9.1