Browse Source

商品推荐, 无库存状态

master
caichunsheng 3 years ago
parent
commit
5311e594aa
  1. 78
      pages/component/proRec/proRec.js
  2. 4
      pages/component/proRec/proRec.json
  3. 17
      pages/component/proRec/proRec.wxml
  4. 53
      pages/component/proRec/proRec.wxss
  5. 3
      pages/info/sceneProductInfo/index.js
  6. 8
      pages/info/sceneProductInfo/index.wxml
  7. 83
      pages/user/cartlist/list.js
  8. 10
      pages/user/cartlist/list.wxml
  9. 17
      pages/user/cartlist/list.wxss
  10. 4
      pages/user/order/hotelOrderInfo/index.json
  11. 1
      pages/user/order/hotelOrderInfo/index.wxml
  12. 1
      pages/user/order/hotelOrderInfo/index.wxss
  13. 3
      pages/user/order/lineOrderInfo/index.json
  14. 3
      pages/user/order/lineOrderInfo/index.wxml
  15. 4
      pages/user/order/museumOrderInfo/index.json
  16. 2
      pages/user/order/museumOrderInfo/index.wxml
  17. 3
      pages/user/order/postOrderInfo/index.json
  18. 18
      pages/user/order/postOrderInfo/index.wxml
  19. 4
      pages/user/order/sceneOrderInfo/index.json
  20. 4
      pages/user/order/sceneOrderInfo/index.wxml

78
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);
}
},
}
})

4
pages/component/proRec/proRec.json

@ -0,0 +1,4 @@
{
"component": true,
"usingComponents": {}
}

17
pages/component/proRec/proRec.wxml

@ -0,0 +1,17 @@
<view class="box">
<view class="tj-title">商品推荐</view>
<view wx:if="{{showLoading}}">加载中...</view>
<view class="tj-list" wx:else>
<view class="proitem" wx:for="{{tjList}}" bindtap="gotoDetail" data-item="{{item}}">
<view class="item-hd">
<image src="{{item.headimg}}"></image>
</view>
<view class="item-bm">
<view class="protitle textOver">{{item.title}}</view>
<view class="pro-price">
{{item.price/100}}
</view>
</view>
</view>
</view>
</view>

53
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;
}

3
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({

8
pages/info/sceneProductInfo/index.wxml

@ -115,17 +115,17 @@
<view class="mask-content">
<view class="iconfont icon-close" bindtap="hideSku"></view>
<view class="sku-info-box">
<image id="skuImg" src="{{skuList[skuIndex].headimg}}" mode="aspectFill"></image>
<image id="skuImg" src="{{skuList[skuIndex].headimg||skuList[0].headimg}}" mode="aspectFill"></image>
<view class="sku-info">
<view class="sku-price">{{tool.toFix(skuList[skuIndex].price)}}
<view class="sku-price">{{ isNaN(tool.toFix(skuList[skuIndex].price))?tool.toFix(skuList[skuIndex].price):tool.toFix(skuList[0].price) }}
<view class="allowance" wx:if="{{allowance_data}}">
补贴价:¥{{ (1 - allowance_data.discount_rate / 100) * info.sku[skuIndex].price / 100 }}</view>
</view>
<view class="sku-name">已选择:{{skuList[skuIndex].sku_name}}</view>
<view class="sku-name">已选择:{{skuList[skuIndex].sku_name || skuList[0].sku_name}}</view>
</view>
</view>
<view class="sku-names">
<view bindtap="selectSku" data-index="{{index}}" data-item="{{item}}" class="sku-name-item textOver{{index==skuIndex?' active':''}}" wx:for="{{skuList}}">{{item.sku_name}}</view>
<view bindtap="selectSku" data-index="{{index}}" data-item="{{item}}" class="sku-name-item textOver{{index==skuIndex?' active':''}} {{item.stock==0&&item.is_third_stock!=1?' disable':''}}" wx:for="{{skuList}}">{{item.sku_name}}</view>
</view>
<view class="number-box">
<text>数量</text>

83
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 // 示例为一个与屏幕等宽的正方形裁剪框
@ -18,6 +19,7 @@ Page({
allChecked: false,
allPrice: 0,
productType: '',
manageFlag: false,
flag: false, //判断订单是否同时有商品和票
},
@ -27,6 +29,18 @@ Page({
onLoad: function (options) {
this.getList();
},
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;
@ -42,7 +56,8 @@ Page({
})
},
minus: function (e) {
let index = e.currentTarget.dataset.index,list = this.data.list;
let index = e.currentTarget.dataset.index,
list = this.data.list;
let num = list[index].num;
if (num <= 1) return;
num = num - 1;
@ -54,7 +69,8 @@ Page({
this.updatePrice()
},
add: function (e) {
let index = e.currentTarget.dataset.index,list = this.data.list;
let index = e.currentTarget.dataset.index,
list = this.data.list;
let num = list[index].num + 1;
list[index].num = num;
this.setData({
@ -64,7 +80,8 @@ Page({
this.updatePrice()
},
select: function (e) {
let index = e.currentTarget.dataset.index,list = this.data.list;
let index = e.currentTarget.dataset.index,
list = this.data.list;
if (list[index].product.flag != 1 || list[index].sku.flag != 'on') {
wx.showToast({
title: '产品已下架',
@ -79,7 +96,8 @@ Page({
this.updatePrice()
},
selectAll: function () {
let list = this.data.list,allChecked = this.data.allChecked?false:true;
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;
@ -95,11 +113,11 @@ Page({
commonApi.user_post("cart/update_sku", {
sku_id: item.sku.id,
num: item.num
}).then(res=>{
})
}).then(res => {})
},
updatePrice: function () {
let list = this.data.list,price=0;
let list = this.data.list,
price = 0;
list.map(item => {
if (item.checked) {
price = price + item.sku.price * item.num;
@ -114,7 +132,10 @@ Page({
util.pagePoint({
event: 'cart_order'
}, 1)
let list = this.data.list,price=0,product=[],product1=[]
let list = this.data.list,
price = 0,
product = [],
product1 = []
list.map(item => {
if (item.checked) {
// item.product.type="post";
@ -182,7 +203,13 @@ Page({
let touchMoveX = e.changedTouches[0].clientX,
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) => {
cart.isTouchMove = false;
@ -212,7 +239,8 @@ Page({
return 360 * Math.atan(_Y / _X) / (2 * Math.PI)
},
del: function (e) {
let index = e.currentTarget.dataset.index,list = this.data.list;
let index = e.currentTarget.dataset.index,
list = this.data.list;
commonApi.user_post("cart/del_sku", {
sku_id: list[index].sku_id
}).then(res => {
@ -228,6 +256,39 @@ Page({
}
})
},
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('取消')
}
}
})
},
/**
* 生命周期函数--监听页面初次渲染完成
*/

10
pages/user/cartlist/list.wxml

@ -1,6 +1,6 @@
<!--pages/user/cartlist/list.wxml-->
<title title="购物车">
<!-- <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>
</title>
<view wx:for="{{list}}" class="goods-item {{item.isTouchMove ? 'touch-move-active' : ''}}" bindtouchstart='touchStart' bindtouchmove='touchmove' data-index="{{index}}">
<view class="item{{(item.product.flag!=1 || item.sku.flag!='on')?' disable':''}}">
@ -28,7 +28,7 @@
<view>暂无内容</view>
</view>
<view style="height:113rpx"></view>
<view class="fixed-bottom" wx:if="{{list.length>0}}">
<view class="fixed-bottom" wx:if="{{list.length>0&&manageFlag===false}}">
<view bindtap="selectAll" class="iconfont{{allChecked?' icon-gou':' icon-quan'}}"></view>
<view class="tip">合计:</view>
<view class="bottom-price">¥{{allPrice/100}} </view>
@ -36,3 +36,9 @@
<view style="flex:1"></view>
<view class="btn" bindtap="order">去下单</view>
</view>
<view class="fixed-bottom" wx:if="{{list.length>0&&manageFlag===true}}">
<view class="iconfont{{allChecked?' icon-gou':' icon-quan'}}" bindtap="selectAll"></view>
<text style="color:#666;font-size:26rpx;flex-shrink:0;margin-left:10rpx;flex:1">全选</text>
<view class="fixed-btn del-btn" bindtap="delM">删除</view>
</view>

17
pages/user/cartlist/list.wxss

@ -158,3 +158,20 @@ 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 ;
}

4
pages/user/order/hotelOrderInfo/index.json

@ -1,5 +1,7 @@
{
"usingComponents": {
"title":"/pages/component/TitleHeader"
"title":"/pages/component/TitleHeader",
"sptj":"/pages/component/proRec/proRec"
}
}

1
pages/user/order/hotelOrderInfo/index.wxml

@ -40,6 +40,7 @@
<navigator url="/pages/order/pay/index?id={{id}}" class="btn active" wx:if="{{info.state=='UNPAID'}}">立即支付</navigator>
</view>
</view>
<sptj></sptj>
<navigator url="/pages/info/hotelProductInfo/index?id={{item.scene_detail.id}}" class="box" wx:if='{{info}}' wx:for="{{info.order_product_list}}" style="padding-bottom:0">
<view class="scene-box" style="align-items:center">
<view class="scene-box-left">

1
pages/user/order/hotelOrderInfo/index.wxss

@ -282,3 +282,4 @@ page {
color: #999;
margin-top: 30rpx;
}

3
pages/user/order/lineOrderInfo/index.json

@ -1,5 +1,6 @@
{
"usingComponents": {
"title":"/pages/component/TitleHeader"
"title":"/pages/component/TitleHeader",
"sptj":"/pages/component/proRec/proRec"
}
}

3
pages/user/order/lineOrderInfo/index.wxml

@ -44,6 +44,9 @@
<!-- <view class="scene-btn active" wx:if="{{info.state=='UNPAID'}}">立即支付</view> -->
</view>
</view>
<sptj></sptj>
<!--景点订单详情需要这个 -->
<navigator url="/pages/info/roadInfo/index?id={{info.order_product_list[0].product_id}}" class="box" wx:if='{{info}}'>
<view class="scene-box" style="align-items:center">

4
pages/user/order/museumOrderInfo/index.json

@ -1,5 +1,7 @@
{
"usingComponents": {
"title":"/pages/component/TitleHeader"
"title":"/pages/component/TitleHeader",
"sptj":"/pages/component/proRec/proRec"
}
}

2
pages/user/order/museumOrderInfo/index.wxml

@ -55,6 +55,8 @@
<!-- <view class="btn active" wx:if="{{info.state=='UNPAID'}}">立即支付</view> -->
</view>
</view>
<sptj></sptj>
<view class="box" wx:if="{{info}}">
<view class="box-title">{{info.order_product_list[0].scene_detail.title}}</view>
<view class="detail-item">

3
pages/user/order/postOrderInfo/index.json

@ -1,5 +1,6 @@
{
"usingComponents": {
"title":"/pages/component/TitleHeader"
"title":"/pages/component/TitleHeader",
"sptj":"/pages/component/proRec/proRec"
}
}

18
pages/user/order/postOrderInfo/index.wxml

@ -12,23 +12,7 @@
<view class="box-title" style="margin-top:15rpx"><text style="margin-right:20rpx">{{info.order_product_list[0].consignee_info.name}}</text><text>{{info.order_product_list[0].consignee_info.tel}}</text></view>
<view style="font-size:26rpx;color:#333;line-height:50rpx"><text style="color:#0B898E;margin-right:10rpx" class="iconfont icon-location"></text>{{info.order_product_list[0].consignee_info.address}}</view>
</view>
<view class="box">
<view class="tj-title">商品推荐</view>
<view wx:if="{{showLoading}}">加载中...</view>
<view class="tj-list" wx:else>
<view class="proitem" wx:for="{{tjList}}" bindtap="gotoDetail" data-item="{{item}}">
<view class="item-hd">
<image src="{{item.headimg}}"></image>
</view>
<view class="item-bm">
<view class="protitle textOver">{{item.title}}</view>
<view class="pro-price">
{{item.price/100}}
</view>
</view>
</view>
</view>
</view>
<sptj></sptj>
<view class="box" wx:if="{{info}}" style="padding-bottom:0">
<view wx:if="{{info.order_product_list && info.order_product_list.length>0}}" class="product-info" wx:for="{{info.order_product_list}}">
<view class="product-info-top">

4
pages/user/order/sceneOrderInfo/index.json

@ -1,5 +1,7 @@
{
"usingComponents": {
"title":"/pages/component/TitleHeader"
"title":"/pages/component/TitleHeader",
"sptj":"/pages/component/proRec/proRec"
}
}

4
pages/user/order/sceneOrderInfo/index.wxml

@ -16,6 +16,9 @@
<view class="code-state">{{info.order_product_list[0].qrcode[codeIndex].stateText}} {{codeIndex+1}}/{{codeImgs.length}}</view>
<!-- <view bindtap="gotoSku" class="code-btn">查看苏康码</view> -->
</view>
<sptj></sptj>
<!-- 景点订单详情需要这个 -->
<view class="box" wx:if='{{product_model=="ticket"}}'>
<view class="scene-box">
@ -100,7 +103,6 @@
<view bindtap="leadRoad" data-url="{{item.btnUrl}}" class="btn" wx:if="{{item.state!='UNPAID' && item.product_model=='ticket'}}">行程规划</view>
</view>
</view>
</view>
<!-- <view class="box" wx:if="{{product_model=='ticket'}}">
<view class="box-title">使用说明</view>

Loading…
Cancel
Save