From 5311e594aabe6b5c5f66d2dd2235e1eef12b52af Mon Sep 17 00:00:00 2001 From: caichunsheng Date: Mon, 7 Nov 2022 09:55:49 +0800 Subject: [PATCH] =?UTF-8?q?=E5=95=86=E5=93=81=E6=8E=A8=E8=8D=90,=20?= =?UTF-8?q?=E6=97=A0=E5=BA=93=E5=AD=98=E7=8A=B6=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pages/component/proRec/proRec.js | 78 ++++++ pages/component/proRec/proRec.json | 4 + pages/component/proRec/proRec.wxml | 17 ++ pages/component/proRec/proRec.wxss | 53 ++++ pages/info/sceneProductInfo/index.js | 3 +- pages/info/sceneProductInfo/index.wxml | 8 +- pages/user/cartlist/list.js | 287 ++++++++++++-------- pages/user/cartlist/list.wxml | 12 +- pages/user/cartlist/list.wxss | 17 ++ pages/user/order/hotelOrderInfo/index.json | 4 +- pages/user/order/hotelOrderInfo/index.wxml | 1 + pages/user/order/hotelOrderInfo/index.wxss | 3 +- pages/user/order/lineOrderInfo/index.json | 3 +- pages/user/order/lineOrderInfo/index.wxml | 3 + pages/user/order/museumOrderInfo/index.json | 4 +- pages/user/order/museumOrderInfo/index.wxml | 2 + pages/user/order/postOrderInfo/index.json | 3 +- pages/user/order/postOrderInfo/index.wxml | 18 +- pages/user/order/sceneOrderInfo/index.json | 4 +- pages/user/order/sceneOrderInfo/index.wxml | 4 +- 20 files changed, 382 insertions(+), 146 deletions(-) create mode 100644 pages/component/proRec/proRec.js create mode 100644 pages/component/proRec/proRec.json create mode 100644 pages/component/proRec/proRec.wxml create mode 100644 pages/component/proRec/proRec.wxss diff --git a/pages/component/proRec/proRec.js b/pages/component/proRec/proRec.js new file mode 100644 index 0000000..1a34128 --- /dev/null +++ b/pages/component/proRec/proRec.js @@ -0,0 +1,78 @@ +// pages/component/TitleHeader.js +import commonApi from "../../../utils/https/common.js" +import util from '../../../utils/util' +var app = getApp() +Component({ + options: { + styleIsolation: 'apply-shared', + addGlobalClass: true + }, + + /** + * 组件的属性列表 + */ + properties: { + title: { + type: String, + value: "" + }, + transparent: { + type: String, + value: "0" + }, + clickid: { + type: String, + value: "" + } + }, + lifetimes: { + created() { + commonApi._post("product/get_product_by_type", { + offset: 0, + limit: 6, + rand: true, + type: "venue,post,line,ticket" + }).then(res => { + this.setData({ + showLoading: false + }) + try { + this.setData({ + tjList: res.data.list + }) + } catch (error) { + console.log(error); + } + }) + } + }, + /** + * 组件的初始数据 + */ + data: { + tjList: [], + }, + /** + * 组件的方法列表 + */ + methods: { + gotoDetail: function (e) { + let item = e.currentTarget.dataset.item; + util.pagePoint({ + event: 'recommend_click', + param: { + id: item.id, + type: item.type + } + }, 1) + if (item.type == 'travels') { + // 游记做特殊处理 其他都按照原来的来 + wx.navigateTo({ + url: '/pages/info/strategyInfo/index?id=' + item.s_id, + }) + } else { + util.gotoDetail(item); + } + }, + } +}) \ No newline at end of file diff --git a/pages/component/proRec/proRec.json b/pages/component/proRec/proRec.json new file mode 100644 index 0000000..e8cfaaf --- /dev/null +++ b/pages/component/proRec/proRec.json @@ -0,0 +1,4 @@ +{ + "component": true, + "usingComponents": {} +} \ No newline at end of file diff --git a/pages/component/proRec/proRec.wxml b/pages/component/proRec/proRec.wxml new file mode 100644 index 0000000..cd6fe91 --- /dev/null +++ b/pages/component/proRec/proRec.wxml @@ -0,0 +1,17 @@ + + 商品推荐 + 加载中... + + + + + + + {{item.title}} + + {{item.price/100}} + + + + + \ No newline at end of file diff --git a/pages/component/proRec/proRec.wxss b/pages/component/proRec/proRec.wxss new file mode 100644 index 0000000..a1a7b78 --- /dev/null +++ b/pages/component/proRec/proRec.wxss @@ -0,0 +1,53 @@ +.tj-title{ + font-size: 30rpx; + font-family: PingFang SC; + font-weight: 500; + color: #333333; + } + .tj-list{ + display: flex; + align-items: center; + overflow-x: scroll; + overflow-y: hidden; + } + + .proitem{ + width: 226rpx; + height: 234rpx; + background: #F5F5F5; + border-radius: 10rpx; + margin-top: 20rpx; + margin-right: 20rpx; + } + .item-hd image{ + width: 226rpx; + height: 130rpx; + border-radius: 10rpx 10rpx 0px 0px; + } + .item-bm{ + padding: 8rpx 12rpx; + } + .protitle{ + font-size: 28rpx; + font-family: PingFang SC; + font-weight: 400; + color: #000000; + } + .pro-price{ + color: #D62828; + font-weight: 500; + font-size: 30rpx; + } + .pro-price:before { + display: inline-block; + content:"¥"; + color: #D62828; + font-size: 20rpx; + } + + .pro-price:after { + display: inline-block; + content:'起'; + color: #999999; + font-size: 10px; + } \ No newline at end of file diff --git a/pages/info/sceneProductInfo/index.js b/pages/info/sceneProductInfo/index.js index 9ff83c7..4303194 100644 --- a/pages/info/sceneProductInfo/index.js +++ b/pages/info/sceneProductInfo/index.js @@ -25,7 +25,7 @@ Page({ allowance_data: null, //购物车数量 producNum: 1, - skuIndex: 0, + skuIndex:null, aniSkuIndex: -1, cartCount: 0, cartImgInfo: null, @@ -256,7 +256,6 @@ Page({ icon: 'none' }) return - } let index = e.currentTarget.dataset.index; this.setData({ diff --git a/pages/info/sceneProductInfo/index.wxml b/pages/info/sceneProductInfo/index.wxml index d8d9145..56416ff 100644 --- a/pages/info/sceneProductInfo/index.wxml +++ b/pages/info/sceneProductInfo/index.wxml @@ -115,17 +115,17 @@ - + - {{tool.toFix(skuList[skuIndex].price)}} + {{ isNaN(tool.toFix(skuList[skuIndex].price))?tool.toFix(skuList[skuIndex].price):tool.toFix(skuList[0].price) }} 补贴价:¥{{ (1 - allowance_data.discount_rate / 100) * info.sku[skuIndex].price / 100 }} - 已选择:{{skuList[skuIndex].sku_name}} + 已选择:{{skuList[skuIndex].sku_name || skuList[0].sku_name}} - {{item.sku_name}} + {{item.sku_name}} 数量 diff --git a/pages/user/cartlist/list.js b/pages/user/cartlist/list.js index d6a16bb..66b35b2 100644 --- a/pages/user/cartlist/list.js +++ b/pages/user/cartlist/list.js @@ -1,5 +1,6 @@ // pages/user/cartlist/list.js -const device = wx.getSystemInfoSync(),rect = wx.getMenuButtonBoundingClientRect(); // 获取设备信息 +const device = wx.getSystemInfoSync(), + rect = wx.getMenuButtonBoundingClientRect(); // 获取设备信息 const ratio = 750 / device.windowWidth; console.log(rect) const width = device.windowWidth // 示例为一个与屏幕等宽的正方形裁剪框 @@ -13,12 +14,13 @@ Page({ * 页面的初始数据 */ data: { - menuWidth:width - rect.right + rect.width + 6, - list:[], - allChecked:false, - allPrice:0, - productType:'', - flag:false,//判断订单是否同时有商品和票 + menuWidth: width - rect.right + rect.width + 6, + list: [], + allChecked: false, + allPrice: 0, + productType: '', + manageFlag: false, + flag: false, //判断订单是否同时有商品和票 }, /** @@ -27,145 +29,164 @@ Page({ onLoad: function (options) { this.getList(); }, - gotoDetail:function(e){ - console.log(e) + manage: function () { + let list = this.data.list; + list.map(item => { + item.checked = 0; + }) + this.setData({ + manageFlag: !this.data.manageFlag, + allChecked: 0, + list: list, + allPrice: 0 + }) + }, + gotoDetail: function (e) { + console.log(e) let item = e.currentTarget.dataset.item.product; - util.gotoDetail(item,1); + util.gotoDetail(item, 1); }, - getList:function(){ - commonApi.user_post("cart/get_list",{ - // type: '1' - }).then(res=>{ + getList: function () { + commonApi.user_post("cart/get_list", { + // type: '1' + }).then(res => { this.setData({ - list:res.data + list: res.data }) }) }, - minus:function(e){ - let index = e.currentTarget.dataset.index,list = this.data.list; + minus: function (e) { + let index = e.currentTarget.dataset.index, + list = this.data.list; let num = list[index].num; - if(num<=1) return; + if (num <= 1) return; num = num - 1; list[index].num = num; this.setData({ - list:list + list: list }) this.changeNumber(list[index]) this.updatePrice() }, - add:function(e){ - let index = e.currentTarget.dataset.index,list = this.data.list; - let num = list[index].num+1; + add: function (e) { + let index = e.currentTarget.dataset.index, + list = this.data.list; + let num = list[index].num + 1; list[index].num = num; this.setData({ - list:list + list: list }) this.changeNumber(list[index]) this.updatePrice() }, - select:function(e){ - let index = e.currentTarget.dataset.index,list = this.data.list; - if(list[index].product.flag!=1 || list[index].sku.flag!='on'){ + select: function (e) { + let index = e.currentTarget.dataset.index, + list = this.data.list; + if (list[index].product.flag != 1 || list[index].sku.flag != 'on') { wx.showToast({ title: '产品已下架', - icon:'none' + icon: 'none' }) return; } - list[index].checked = list[index].checked?false:true; + list[index].checked = list[index].checked ? false : true; this.setData({ - list:list + list: list }) this.updatePrice() }, - selectAll:function(){ - let list = this.data.list,allChecked = this.data.allChecked?false:true; - list.map(item=>{ - if(item.sku.flag=='on' && item.product.flag==1){ + selectAll: function () { + let list = this.data.list, + allChecked = this.data.allChecked ? false : true; + list.map(item => { + if (item.sku.flag == 'on' && item.product.flag == 1) { item.checked = allChecked; } }) this.setData({ - allChecked:allChecked, - list:list + allChecked: allChecked, + list: list }) this.updatePrice() }, - changeNumber(item){ - commonApi.user_post("cart/update_sku",{ - sku_id:item.sku.id, - num:item.num - }).then(res=>{ - }) + changeNumber(item) { + commonApi.user_post("cart/update_sku", { + sku_id: item.sku.id, + num: item.num + }).then(res => {}) }, - updatePrice:function(){ - let list = this.data.list,price=0; - list.map(item=>{ - if(item.checked){ + updatePrice: function () { + let list = this.data.list, + price = 0; + list.map(item => { + if (item.checked) { price = price + item.sku.price * item.num; } }) this.setData({ - allPrice:price + allPrice: price }) }, - order:function(){ + order: function () { app.globalData.couponInfo = null; util.pagePoint({ - event:'cart_order' - },1) - let list = this.data.list,price=0,product=[],product1=[] - list.map(item=>{ - if(item.checked){ + event: 'cart_order' + }, 1) + let list = this.data.list, + price = 0, + product = [], + product1 = [] + list.map(item => { + if (item.checked) { // item.product.type="post"; - if(item.product.type == 'post'){ - product.push({ - product:item.product, - sku:item.sku, - productNum:item.num - }) - }else{ - product1.push(item) - app.globalData.list = product1 - } - if(item.product.type.includes('post')){ - this.data.productType = 'post' - } + if (item.product.type == 'post') { + product.push({ + product: item.product, + sku: item.sku, + productNum: item.num + }) + } else { + product1.push(item) + app.globalData.list = product1 + } + if (item.product.type.includes('post')) { + this.data.productType = 'post' + } } }) - if(product.length==0 && product1.length==0) { + if (product.length == 0 && product1.length == 0) { wx.showToast({ title: '请先选择产品', icon: 'none' }) return; } - if (product.length>0 && product1.length>0) { + if (product.length > 0 && product1.length > 0) { this.setData({ flag: 'mix' }) } app.globalData.postProduct = product; - if(app.globalData.list){ - app.globalData.product = app.globalData.list[app.globalData.index] - } - if(this.data.productType == 'post'){ + if (app.globalData.list) { + app.globalData.product = app.globalData.list[app.globalData.index] + } + if (this.data.productType == 'post') { console.log(this.data.flag); - wx.navigateTo({ - url: '/pages/order/postOrder/index?from=cart&flag='+this.data.flag, - }) - }else{ - wx.navigateTo({ - url: '/pages/order/scene/index', - }) - } + wx.navigateTo({ + url: '/pages/order/postOrder/index?from=cart&flag=' + this.data.flag, + }) + } else { + wx.navigateTo({ + url: '/pages/order/scene/index', + }) + } }, - touchStart(e){//移动前点击的位置 + touchStart(e) { //移动前点击的位置 console.log(e) // 在开始触摸时将所有startTouchMove设置为flase,对当前的为true - this.data.list.forEach(cart =>{ - if(cart.isTouchMove)//当istouchMove为true - cart.isTouchMove = false;//其它的对象都为false + this.data.list.forEach(cart => { + if (cart.isTouchMove) //当istouchMove为true + cart.isTouchMove = false; //其它的对象都为false }) this.setData({ startX: e.changedTouches[0].clientX, @@ -173,61 +194,101 @@ Page({ list: this.data.list }) }, - touchmove(e){//移动的位置,用于计算用户滑动的弧度向左还是向右,移动了多少,可以确定删除功能的显示和隐藏 + touchmove(e) { //移动的位置,用于计算用户滑动的弧度向左还是向右,移动了多少,可以确定删除功能的显示和隐藏 let index = e.currentTarget.dataset.index; // 获取开始的x,y坐标 let startX = this.data.startX, - startY = this.data.startY; + startY = this.data.startY; // 获取移动的x,x坐标 let touchMoveX = e.changedTouches[0].clientX, - touchMoveY = e.changedTouches[0].clientY; + touchMoveY = e.changedTouches[0].clientY; // 调用计算角度的方法,获取角度 - var angel = this.angel({ X: startX, Y: startY }, { X: touchMoveX, Y: touchMoveY }) + var angel = this.angel({ + X: startX, + Y: startY + }, { + X: touchMoveX, + Y: touchMoveY + }) // 遍历cartArray - this.data.list.forEach((cart, i ) =>{ + this.data.list.forEach((cart, i) => { cart.isTouchMove = false; // 滑动角度大于30,直接return 视为非滑动意思 - if(Math.abs(angel) > 30) return; + if (Math.abs(angel) > 30) return; // 匹配当前所点击的list和滑动的list - if(i == index){ + if (i == index) { // 匹配上后判断滑动方向 - if (touchMoveX > startX){//左滑动隐藏删除 + if (touchMoveX > startX) { //左滑动隐藏删除 cart.isTouchMove = false; - }else{ + } else { cart.isTouchMove = true; } } }) // 更新数据 this.setData({ - list:this.data.list + list: this.data.list }) }, - angel(start,end){//计算滑动的角度 + angel(start, end) { //计算滑动的角度 // console.log(start,end) // 移动坐标减去对应的开始坐标 var _X = end.X - start.X, _Y = end.Y - start.Y; - // 返回角度 Math.atan() 返回数字的正切值 - return 360 * Math.atan(_Y / _X) / (2 * Math.PI) + // 返回角度 Math.atan() 返回数字的正切值 + return 360 * Math.atan(_Y / _X) / (2 * Math.PI) }, - del:function(e){ - let index = e.currentTarget.dataset.index,list = this.data.list; - commonApi.user_post("cart/del_sku",{ - sku_id:list[index].sku_id - }).then(res=>{ - if(res.code==1){ + del: function (e) { + let index = e.currentTarget.dataset.index, + list = this.data.list; + commonApi.user_post("cart/del_sku", { + sku_id: list[index].sku_id + }).then(res => { + if (res.code == 1) { wx.showToast({ title: '删除成功', - icon:"success" + icon: "success" }) - list.splice(index,1); + list.splice(index, 1); this.setData({ - list:list + list: list }) } }) }, + delM() { + let that = this + let arr = this.data.list + let suid = [] + arr.forEach(item => { + if (item.checked) { + suid.push(item.sku_id) + } + }); + let skuids = suid.join(',') + wx.showModal({ + title: '提示', + content: '确定要删除选定的产品?', + success: function (res) { + if (res.confirm) { + commonApi.user_post("cart/del_sku", { + sku_id:skuids + }).then(res => { + if (res.code == 1) { + wx.showToast({ + title: '删除成功', + icon: "success" + }) + that.getList(); + } + }) + + } else { + console.log('取消') + } + } + }) + }, /** * 生命周期函数--监听页面初次渲染完成 */ @@ -240,14 +301,14 @@ Page({ */ onShow: function () { util.pagePoint({ - event:'cart_view' - },1) - app.globalData.list = null - app.globalData.createDate = null - app.globalData.index = 0 - app.globalData.productPrice = 0 - app.globalData.ticketPrice = 0 - this.data.productType = '' + event: 'cart_view' + }, 1) + app.globalData.list = null + app.globalData.createDate = null + app.globalData.index = 0 + app.globalData.productPrice = 0 + app.globalData.ticketPrice = 0 + this.data.productType = '' }, /** diff --git a/pages/user/cartlist/list.wxml b/pages/user/cartlist/list.wxml index 073eed0..970316e 100644 --- a/pages/user/cartlist/list.wxml +++ b/pages/user/cartlist/list.wxml @@ -1,11 +1,11 @@ - <!-- <view class="edit-btn" style="right:{{menuWidth}}px">管理</view> --> + <view class="edit-btn" style="right:{{menuWidth}}px" wx:if="{{list.length>0}}" bindtap="manage">{{manageFlag?'关闭':'管理'}}</view> - + {{item.product.title}} @@ -28,7 +28,7 @@ 暂无内容 - + 合计: ¥{{allPrice/100}} @@ -36,3 +36,9 @@ 去下单 + + + + 全选 + 删除 + \ No newline at end of file diff --git a/pages/user/cartlist/list.wxss b/pages/user/cartlist/list.wxss index 6904e2d..4f59ab3 100644 --- a/pages/user/cartlist/list.wxss +++ b/pages/user/cartlist/list.wxss @@ -157,4 +157,21 @@ page { } .icon-gou { color: #D62828; +} +.fixed-btn { + width: 202rpx; + line-height: 84rpx; + background: #FB6E4D; + border-radius: 42rpx; + font-size: 36rpx; + font-weight: 500; + color: #fff; + text-align: center; +} +.del-btn { + box-sizing: border-box; + border: 1rpx solid #FB6E4D; + color: #FB6E4D; + background: white; + margin-right:40rpx ; } \ No newline at end of file diff --git a/pages/user/order/hotelOrderInfo/index.json b/pages/user/order/hotelOrderInfo/index.json index 35cf02f..cef374c 100644 --- a/pages/user/order/hotelOrderInfo/index.json +++ b/pages/user/order/hotelOrderInfo/index.json @@ -1,5 +1,7 @@ { "usingComponents": { - "title":"/pages/component/TitleHeader" + "title":"/pages/component/TitleHeader", + "sptj":"/pages/component/proRec/proRec" + } } \ No newline at end of file diff --git a/pages/user/order/hotelOrderInfo/index.wxml b/pages/user/order/hotelOrderInfo/index.wxml index 5d14b9a..11bbfd8 100644 --- a/pages/user/order/hotelOrderInfo/index.wxml +++ b/pages/user/order/hotelOrderInfo/index.wxml @@ -40,6 +40,7 @@ 立即支付 + diff --git a/pages/user/order/hotelOrderInfo/index.wxss b/pages/user/order/hotelOrderInfo/index.wxss index c20a26f..dc9d442 100644 --- a/pages/user/order/hotelOrderInfo/index.wxss +++ b/pages/user/order/hotelOrderInfo/index.wxss @@ -281,4 +281,5 @@ page { font-size: 24rpx; color: #999; margin-top: 30rpx; -} \ No newline at end of file +} + diff --git a/pages/user/order/lineOrderInfo/index.json b/pages/user/order/lineOrderInfo/index.json index 35cf02f..3418379 100644 --- a/pages/user/order/lineOrderInfo/index.json +++ b/pages/user/order/lineOrderInfo/index.json @@ -1,5 +1,6 @@ { "usingComponents": { - "title":"/pages/component/TitleHeader" + "title":"/pages/component/TitleHeader", + "sptj":"/pages/component/proRec/proRec" } } \ No newline at end of file diff --git a/pages/user/order/lineOrderInfo/index.wxml b/pages/user/order/lineOrderInfo/index.wxml index 728b55d..47f7682 100644 --- a/pages/user/order/lineOrderInfo/index.wxml +++ b/pages/user/order/lineOrderInfo/index.wxml @@ -44,6 +44,9 @@ + + + diff --git a/pages/user/order/museumOrderInfo/index.json b/pages/user/order/museumOrderInfo/index.json index 35cf02f..cef374c 100644 --- a/pages/user/order/museumOrderInfo/index.json +++ b/pages/user/order/museumOrderInfo/index.json @@ -1,5 +1,7 @@ { "usingComponents": { - "title":"/pages/component/TitleHeader" + "title":"/pages/component/TitleHeader", + "sptj":"/pages/component/proRec/proRec" + } } \ No newline at end of file diff --git a/pages/user/order/museumOrderInfo/index.wxml b/pages/user/order/museumOrderInfo/index.wxml index 18db481..df360d4 100644 --- a/pages/user/order/museumOrderInfo/index.wxml +++ b/pages/user/order/museumOrderInfo/index.wxml @@ -55,6 +55,8 @@ + + {{info.order_product_list[0].scene_detail.title}} diff --git a/pages/user/order/postOrderInfo/index.json b/pages/user/order/postOrderInfo/index.json index 35cf02f..3418379 100644 --- a/pages/user/order/postOrderInfo/index.json +++ b/pages/user/order/postOrderInfo/index.json @@ -1,5 +1,6 @@ { "usingComponents": { - "title":"/pages/component/TitleHeader" + "title":"/pages/component/TitleHeader", + "sptj":"/pages/component/proRec/proRec" } } \ No newline at end of file diff --git a/pages/user/order/postOrderInfo/index.wxml b/pages/user/order/postOrderInfo/index.wxml index b60f190..e7a33ed 100644 --- a/pages/user/order/postOrderInfo/index.wxml +++ b/pages/user/order/postOrderInfo/index.wxml @@ -12,23 +12,7 @@ {{info.order_product_list[0].consignee_info.name}}{{info.order_product_list[0].consignee_info.tel}} {{info.order_product_list[0].consignee_info.address}} - - 商品推荐 - 加载中... - - - - - - - {{item.title}} - - {{item.price/100}} - - - - - + diff --git a/pages/user/order/sceneOrderInfo/index.json b/pages/user/order/sceneOrderInfo/index.json index 35cf02f..cef374c 100644 --- a/pages/user/order/sceneOrderInfo/index.json +++ b/pages/user/order/sceneOrderInfo/index.json @@ -1,5 +1,7 @@ { "usingComponents": { - "title":"/pages/component/TitleHeader" + "title":"/pages/component/TitleHeader", + "sptj":"/pages/component/proRec/proRec" + } } \ No newline at end of file diff --git a/pages/user/order/sceneOrderInfo/index.wxml b/pages/user/order/sceneOrderInfo/index.wxml index 89a50c3..e304840 100644 --- a/pages/user/order/sceneOrderInfo/index.wxml +++ b/pages/user/order/sceneOrderInfo/index.wxml @@ -16,6 +16,9 @@ {{info.order_product_list[0].qrcode[codeIndex].stateText}} {{codeIndex+1}}/{{codeImgs.length}} + + + @@ -100,7 +103,6 @@ 行程规划 -