feat:订单安全溯源;fixed:退出登录返回个人中心数字显示的问题;perf:部分优化

parent cb7ab5f6
......@@ -183,4 +183,19 @@ export function changeOrderAddr(params) {
data: params,
needMask: true
})
}
/**
* @desc 订单商品溯源
* @param { Number | String } og_id 订单商品id
*/
export function safeOrigin(og_id) {
return request({
url: 'zsxcx/getWarehouseGoodsMsgZS.htm',
method: 'post',
data: {
og_id
},
needMask: true
})
}
\ No newline at end of file
......@@ -180,6 +180,12 @@
"navigationBarTitleText": "评论详情",
"enablePullDownRefresh": true
}
},
{
"path": "originSafe/index",
"style": {
"navigationBarTitleText": "商品安全溯源信息"
}
}
]
},
......
......@@ -90,6 +90,7 @@
class="cart-icon"
src="/static/images/common/icon-cart.png"
mode="aspectFit"
lazy-load
@click.stop="handlePop(good)"
/>
</view>
......
......@@ -11,6 +11,7 @@
>
<image
class="goods_cover w-100"
lazy-load
:src="baseUrl + '/' + item.goods_thumb"
mode="aspectFit"
/>
......@@ -26,6 +27,7 @@
</view>
<image
class="cart-btn"
azy-load
@click.stop="handlePop(item)"
src="/static/images/common/icon-cart.png"
mode="aspectFit"
......
......@@ -164,6 +164,13 @@ export default {
this.setUserInfo()
this.getOrderNum()
this.getCommentNum()
} else {
this.orderNum = {
wait_pay: 0,
wait_receive: 0,
wait_send: 0
}
this.commentCounts = 0
}
},
......
......@@ -27,31 +27,33 @@
:src="baseUrl + '/' + item.goods_thumb"
mode="aspectFit"
/>
<view class="title flex-1">{{item.goods_name}}</view>
</view>
<view
class="sku-item"
v-for="(s, sidx) in item.goods"
:key="sidx"
>
<view class="mt-2">{{s.goods_attr}}</view>
<view class="mt-2">单价:¥{{s.goods_price + '/' + s.goods_unit}}</view>
<view class="mt-2 flex j-between a-center">
<text>数量:{{s.cart_number}}</text>
<text class="primary">小计:¥{{s.amount}}</text>
<view class="info flex j-between a-start flex-column flex-1">
<view class="info-item">
<view class="title overtext-1 font-bold">{{item.goods_name}}</view>
<view class="flex-1 text-right">¥{{item.goods_price}}</view>
</view>
<view class="info-item descColor">
<view class="sku-name overtext-1">{{item.goods_attr + '/' + item.goods_unit}}</view>
<view class="flex-1 text-right">x{{item.cart_number}}</view>
</view>
<view class="info-item" v-if="item.batch_id">
<view class="origin-intro">该商品已加入格利溯源计划</view>
<navigator class="origin-btn" hover-class="none" :url="'/subPages/originSafe/index?og_id=' + item.og_id">查看溯源</navigator>
</view>
</view>
</view>
</view>
</block>
</view>
<view class="wrap mt-2 flex j-end a-center">
<view class="wrap flex j-end a-center">
<text class="primary">{{order_detail.totalCount || 0}}</text><text class="mr-2"></text>合计:<text class="primary">¥{{order_detail.order.sum_amount || 0}}</text>
</view>
<view class="mt-2 box" v-if="order_detail.order.shipping_type === '1'">
<view class="mt-2">配送方式: 商家配送<text class="primary ml-1" @click="makePhoneCall()">联系商家</text></view>
<view class="item mt-2 w-100 flex j-start a-start">
<view class="item font-32">配送信息</view>
<view class="mt-3">配送方式:商家配送<text class="primary ml-1" @click="makePhoneCall()">联系商家</text></view>
<view class="item mt-3 w-100 flex j-start a-start">
<view class="hd">配送地址:</view>
<view class="flex-1 flex flex-column j-start a-start">
<view class="w-100 flex j-between a-start">
......@@ -67,22 +69,23 @@
</view>
<view class="mt-2 box" v-else>
<view class="item font-32">配送信息</view>
<view>配送方式: 买家自提<text class="primary ml-1" @click="makePhoneCall()">联系商家</text></view>
<view class="item mt-2 w-100 flex j-start a-start">
<view class="hd">自提地址: </view>
<view class="item mt-e3 w-100 flex j-start a-start">
<view class="hd">自提地址</view>
<view class="flex-1">
<text class="flex-1">{{order_detail.order.pickup_address}}</text>
</view>
</view>
<view class="item mt-2 w-100 flex j-start a-start">
<view class="item mt-3 w-100 flex j-start a-start">
<view class="hd">自提时间:</view>
<view class="flex-1">
<text class="mr-2">{{order_detail.order.pickup_start_day | parseWeek}}至{{order_detail.order.pickup_end_day | parseWeek}}</text>
<text>{{order_detail.order.pickup_hours}}</text>
</view>
</view>
<view class="item mt-2 w-100 flex j-start a-start">
<view class="item mt-3 w-100 flex j-start a-start">
<view class="hd">联系电话:</view>
<view class="flex-1">
<text>{{order_detail.order.shop_tel}}</text>
......@@ -91,47 +94,53 @@
</view>
<!-- <view class="wrap mt-2">发票: 发票信息参数(文字/图片等)</view> -->
<view class="box mt-2">
<view class="font-32 mb-3">发票信息</view>
<view>
发票:发票信息参数(文字/图片等)
</view>
</view>
<view class="mt-2 box">
<view class="item w-100 flex j-start a-center">
<view class="item font-32">订单信息</view>
<view class="item mt-3 w-100 flex j-start a-center">
<view class="hd">订单编号:</view>
<view class="flex-1 flex j-between a-center">
<text>{{order_detail.order.order_sn}}</text>
<text class="primary" @click="copyOrderSn">复制</text>
</view>
</view>
<view class="item mt-2 w-100 flex j-start a-center">
<view class="item mt-3 w-100 flex j-start a-center">
<view class="hd">创建时间:</view>
<view class="flex-1">
<text>{{order_detail.order.add_time | parseTime}}</text>
</view>
</view>
<view class="item mt-2 w-100 flex j-start a-center">
<view class="item mt-3 w-100 flex j-start a-center">
<view class="hd">先货后款:</view>
<view class="flex-1">
<text>{{order_detail.order.goods_before_pay === '0' ? '否' : '是'}}</text>
</view>
</view>
<view class="item mt-2 w-100 flex j-start a-center">
<view class="item mt-3 w-100 flex j-start a-center">
<view class="hd">付款时间:</view>
<view class="flex-1">
<text>{{order_detail.order.pay_time | parseTime}}</text>
</view>
</view>
<view class="item mt-2 w-100 flex j-start a-center">
<view class="item mt-3 w-100 flex j-start a-center">
<view class="hd">发货时间:</view>
<view class="flex-1">
<text>{{order_detail.order.shipping_time | parseTime}}</text>
</view>
</view>
<view class="item mt-2 w-100 flex j-start a-center">
<view class="item mt-3 w-100 flex j-start a-center">
<view class="hd">支付方式:</view>
<view class="flex-1">
<text>{{order_detail.order.pay_type | payType}}</text>
</view>
</view>
<view class="item mt-2 w-100 flex j-start a-center">
<view class="item mt-3 w-100 flex j-start a-center">
<view class="hd">买家留言:</view>
<view class="flex-1">
<text>{{order_detail.order.postscript || '——'}}</text>
......@@ -230,8 +239,11 @@ export default {
data.order.countdownT = 0
// item.last_payTime = ''
}
data.goods.map(i => {
console.log(typeof i.batch_id, i.batch_id, ~~i.batch_id, !~~i.batch_id )
})
this.order_detail = {
goods: data.goods2 || [],
goods: data.goods,
order: data.order || {},
totalCount: data.goods2.reduce((pre, cur) => {
return pre + cur.goods.reduce((p, c) => {
......@@ -241,6 +253,7 @@ export default {
}
}
}catch(e){
console.log(e)
this.$toast({title: e.msg || '程序错误,获取订单详情失败'})
//TODO handle the exception
}
......@@ -283,28 +296,47 @@ export default {
}
.goods {
@include borderBox(40rpx, 30rpx);
background-color: #fff;
.goods-item {
@include borderBox(20rpx, 30rpx);
border-bottom: 1rpx solid $line;
&:first-child {
margin-top: 20rpx;
}
margin-bottom: 30rpx;
&:last-child {
margin-bottom: 0;
border-bottom: none;
}
.cover {
flex: 0 0 160rpx;
width: 160rpx;
height: 160rpx;
flex: 0 0 150rpx;
width: 150rpx;
height: 150rpx;
border-radius: 10rpx;
background-color: $mainBg;
margin-right: 20rpx;
}
.sku-item {
padding-bottom: 20rpx;
border-bottom: 1rpx solid $line;
&:last-child {
padding-bottom: 0;
border-bottom: none;
.info {
height: 150rpx;
.info-item {
width: 100%;
display: flex;
justify-content: space-between;
align-items: center;
overflow: hidden;
.title {
width: 380rpx;
}
.sku-name {
width: 450rpx;
}
.origin-intro {
border: 1rpx solid $primary;
padding: 4rpx;
color: $primary;
font-size: 20rpx;
border-radius: 4rpx;
}
.origin-btn {
color: $primary;
font-size: 20rpx;
}
}
}
}
......@@ -315,12 +347,12 @@ export default {
}
.wrap {
padding: 24rpx 30rpx;
padding: 0 30rpx 40rpx 30rpx;
background-color: #fff;
}
.box {
@include borderBox(20rpx, 30rpx);
@include borderBox(40rpx, 30rpx);
background-color: #fff;
.item {
.hd {
......
......@@ -37,7 +37,7 @@
>
<view class="w-100 item-inner">
<!-- <view>orderStatus=={{item.order_status}}————orderStatusD=={{item.order_status_d}}</view> -->
<view>{{item.order_sn}}</view>
<!-- <view>{{item.order_sn}}</view> -->
<view class="flex j-between a-center">
<text class="order-item">{{item.add_time | parseTime}}</text>
<!-- <text class="order-status">{{item.order_status | orderStatus(item.goods_before_pay)}}</text> -->
......
......@@ -93,6 +93,7 @@
>
<image
class="goods-cover mr-2"
lazy-load
:src="baseUrl + '/' + good.goods_thumb"
mode="aspectFit"
/>
......
@font-face {
font-family: "iconfont"; /* Project id 2744370 */
src:
url('data:application/x-font-woff2;charset=utf-8;base64,d09GMgABAAAAAAO8AAsAAAAAB7gAAANwAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHFQGYACCfgqDFIJ/ATYCJAMMCwgABCAFhGcHOhvXBlGU7Umb7GtMYYxdLdoStU4cQbgGIyIAroxg8Ha7fH08nAF/XLzvLAAAIojW0Nm7C7ND1IASVVR02MVSW1fVKlULpGrRkmVd/VM3fxkv3PZPUNumT6OItmdpQl1Lc5l/VjQglQlTkm8HhLdrrsBpOnA/7WbdBtbZOuQu10WiuVLtLk54q03p32lzaR/KYCIH0hZSAHIQfaPtLYLKFDjqQl316a/GuxX4gjwA77pvvuyD5Y03i9F9W9Yt3OQJesPYBS3xEoFGixy0s3t8DaMrJTlsIMzWIKmOqyhQMOQmpaE61Au1XVcW8VQN6XG6gCfB5+MfL4YkNZl51uHJjg9/Pzt/LuZ5NXecv/udrgaOTqhBxuzGLHHU7DrUiVKzsMYqV9coGlwEP7uqip+dnmjbf3gkQdQyK5vBJFSmKxI7okTdBSVXLH668bWoww3wTjJ3M3fIysDIMgPW16t36xq43W5tpnK32zHgzWZTUL5eRwFruaF8kzGAd6qhctuc52sABLvV3em2QnTYW5U7EG9ztMGbMs5qa4IX5mBTvoG2tHLr773Of99/i2jgrI3uzQXR0SbG7t7iVkfI5jDYLXe7DxvZBKPRL/Dyvm2+n1+vC/w87zfkQ37ctKLn2/9dTBfWasO62AHzsT6sTZMP0gzL/YQzaXc67TtOkHOH+GbHCTvFnrTDuZ0xZwKRoRdsbrBhX1q8d1uPaWfvhw0lYY44o9qXafXx56uH58ixXrv3YhLPA0c1W+jW/D+ik8ft7mzNNrwDVH2J/DDIrPl5ln/uNxqerXx9c+V/PbSAHxvfg9LuZeolmOg/daeg+kvwNLlo0JSuYdluqkBCo+WjQr5Oz/CaV5EJ9boSJHWGkNUbpgpvGjWaLKNWvVU0muHXN+lS6YjSgHEzQGi3IGn1Elm7lSq8GzV6vajV7kOjo2jZrcl46C0mJeTjxw9GusiNrZWA7SUFTaq4LH5LXEcwiq7l5LN7lBOPMaf+DDwRg4aLDHfpeZSmBZZcxKTFCkXKmW2bqqtYushgCyOKID4U+YFKWiFnPLJkv+8SCTRSCnekbh2sxkLEHgkU70DtqfJODTeyT+tTwNMRBsowyGRQ4A6SqqkCqqqHxYgmLMWARGmGWaSsq8paXpO93DZoZB6eI0WOou46VLkOm/5F8x3lAQA=') format('woff2')
url('data:application/x-font-woff2;charset=utf-8;base64,d09GMgABAAAAAAQoAAsAAAAACKwAAAPcAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHFQGYACDKgqEOINzATYCJAMUCwwABCAFhGcHUhuXB8gekiRFgh44SEAVRFBA8fDfGr/7Zmb3uzVxiR9JJKJ48koUK4USSF2TR05nvvesWTN3Tntw+bWAg4Wy7SQp05dOFkwO6udZ+ATcAAFwoE/WVBfJ1dKVhRBApJEVkHtZV1uhmgrFtDlCPyGX+Qnl9wDPcGEC7yLQbFkq7/PcYgKEP2CQEwzgS+gN7Mp4YOEYEHh3KTGs0Git0+4s4gOoSC+9LwPe6z8ffxkKJKky4VZXb+WYwfFn0c87fOT/MvkzpbwmnJ1QIWO+ZZ64Fx+6wcdMzvPRHBb3tQ3w+EaJHzHPpecd//8TPlrTq0CjZjFEyf2Pl4iaYGpF3LGjGDO1rLLNMSgj81NyCDR3YErCPO2kGU34CPhHoI57vhCyMhDdP25IKOYX+EjBsHkL49m5u9cviYPm2Ys3eDBuHuaY6TUo5mrPBjnWDOfI67tuE7dnUnfvSmyFvneP7SHv3MmTidvWmUSwQyZdDg/9cShUfE7D7JnxFKFM3ahgNDVX2eSJI+lyiAT5TWO7QmeulzeEhL3epGxsXLjz6MXT50fzs2OJ2Qs2rMHoeZht0y5E0BxJp1NVm+5dufPDBsTDkoPNJW+bD2NPkscm6R4HHB79uJmIGg6WRcQ+aWp6Mhr1hzRDiqAwRoHNxxcUNI6sH35eknPurFkjG4fXn0c5yq2OISN3ve+1pfIpKXyq7Q/L2c6nOJH/PFdUbT6kPjRv/vx5m9SsehPJhYGHVG2qQ/OMtfMPqg+BnUXdCFUNUIXeaFO/llg+aNXp8tkJ8UfD+TGJ91M8FbfOXGqYxR+NGOEXadhRYTzatGwSpNjvE2FJbbbveL9s0A7g//+cRIXO+ZCu50hOX/HKL9Ln8j6fhCPhb3x/KS9vikj+GhhSwJepvzHUpldvSfVHtd2D1wsovVuJr4L6FshVApULR1hiC2s3dZZuT8ux9KQ22eyWHhuSBiOQNRpFFdwsVFqsQq3RATSbk7O/RQ8XH1GaMGkSQOi0AZJ2nyDrdA5VcPeg0u851Dr9hWbXIuy0FpOZskTIIGjGWzpwi0lwspIV6cNWQk6yM2JQjIKi24IRXK/ReTN50AnFIta4WzkDQizOioIDz73eDtrtAu4SBSs0IQ2PkCtRq2XDXkVjEhwgiwhiIJAZrkUHnIWJwIlVkZH791WCOBI7hpgSRQVEblbS8Dg9DV0KVJ7JmaptS8a7teIYIAjL81gigQMu9xuA7GJSgHOFT7OCTBANPkfcJZGWkNi0Jk39FscCVp9wHYUbVpEiR4kqak3PLYyT6xAkvSnaKQn6ADc/0cRL/lap3eLkAAA=') format('woff2')
}
.iconfont {
......@@ -12,6 +12,14 @@
-moz-osx-font-smoothing: grayscale;
}
.icon-xiangyou1:before {
content: "\e775";
}
.icon-xiangzuo1:before {
content: "\e779";
}
.icon-shanchu:before {
content: "\e613";
}
......
<template>
<view class="box mb-2">
<view class="h_title text-center">
供货商资质证书
</view>
<view class="swiper-wrap">
<swiper
class="swiper-inner"
:current="img_current"
@change="swiperChange"
@click="handleSwiper"
>
<swiper-item
v-for="(arr, idx) in preUtil.dealArr(list, 2)"
:key="idx"
>
<image
class="swiper-item"
v-for="(item, index) in arr"
lazy-load
:key="index"
:src="baseUrl + '/' + item"
mode="aspectFit"
:data-imgurl="baseUrl + '/' + item"
/>
</swiper-item>
</swiper>
<template v-if="list && list.length > 2">
<view
class="pre flex j-center a-center"
@click="handlePre"
><text class="iconfont icon-xiangzuo1" :class="{preCancle: img_current === 0}"></text></view>
<view
class="next flex j-center a-center"
@click="handleNext"
><text class="iconfont icon-xiangyou1" :class="{preCancle: img_current === list_len}"></text></view>
</template>
</view>
<view class="w-100 flex j-between a-center mb-2" v-if="originName">
<view class="descColor">供货商单位</view>
<view>{{originName}}</view>
</view>
<view class="w-100 flex j-between a-center" v-if="originCode">
<view class="descColor">供货商统一社会信用代码</view>
<view>{{originCode}}</view>
</view>
</view>
</template>
<script module="preUtil" lang="wxs">
// 改变这个num的时候要注意下面pre方法的 2
function dealArr(arr, num) {
console.log(arr, num)
if(!arr || arr.length === 0) {
return []
} else {
var len = arr.length
var newArr = []
// 数组的每维的数量
var arrLen = Math.ceil(len / num)
for(var i = 0; i < arrLen; i ++) {
newArr.push(arr.splice(0, num))
}
return newArr
}
}
module.exports = {
dealArr: dealArr
}
</script>
<script>
export default {
props: {
name: {
type: String,
default: ''
},
originName: {
type: String,
default: ''
},
originCode: {
type: String,
default: ''
},
list: {
type: Array,
required: true
}
},
data() {
return {
img_current: 0,
list_len: Math.floor(this.list.length / 2)
}
},
mounted() {
this.f_list = this.list.map(i => i = this.baseUrl + '/' + i)
},
methods: {
handleSwiper(e) {
const { imgurl } = e.target.dataset
if(!imgurl) return
wx.previewImage({
urls: this.f_list,
current: imgurl
})
},
swiperChange(e) {
const { current } = e.detail
if(this.img_current === current) return
this.img_current = current
},
handlePre() {
if(this.img_current === 0) return
this.img_current --
},
handleNext() {
if(this.img_current >= this.list_len) return
this.img_current ++
}
}
}
</script>
<style lang="scss" scoped>
.box {
@include borderBox(40rpx, 30rpx);
background-color: #fff;
.h_title {
position: relative;
width: 256rpx;
margin: 0 auto 30rpx;
font-size: 28rpx;
font-weight: bold;
color: #FF661A;
&::before {
position: absolute;
left: -95rpx;
top: 50%;
transform: translateY(-50%);
display: inline-block;
content: '';
width: 100rpx;
height: 2rpx;
background-color: #FF661A;
}
&::after {
position: absolute;
right: -95rpx;
top: 50%;
transform: translateY(-50%);
display: inline-block;
content: '';
width: 100rpx;
height: 2rpx;
background-color: #FF661A;
}
}
.swiper-wrap {
position: relative;
width: 100%;
height: 232rpx;
margin-bottom: 20rpx;
.swiper-inner {
width: 100%;
height: 232rpx;
.swiper-item {
width: 336rpx!important;
height: 232rpx;
margin-right: 20rpx;
&:nth-child(2n) {
margin-right: 0;
}
}
}
.pre {
position: absolute;
left: 0;
top: 50%;
transform: translateY(-50%);
width: 64rpx;
height: 64rpx;
border-radius: 50%;
z-index: 10;
color: #fff;
background-color: rgba(0, 0, 0, .3);
}
.next {
position: absolute;
right: 0;
top: 50%;
transform: translateY(-50%);
width: 64rpx;
height: 64rpx;
border-radius: 50%;
z-index: 10;
color: #fff;
background-color: rgba(0, 0, 0, .3);
}
.preCancle {
color: #cdcdcd!important;
}
.nextCancle {
color: #cdcdcd!important;
}
}
}
</style>
<template>
<view class="wraper">
<image class="cover" v-if="detail.base_data.goods_img" :src="baseUrl + '/' + detail.base_data.goods_img" mode="aspectFit"></image>
<view class="title">{{detail.base_data.goods_name}}</view>
<view class="information font-28 mb-2">
<view class="w-100 flex j-between a-center mb-3">
<view class="descColor">商品规格</view>
<view>{{detail.base_data.goods_attr}}</view>
</view>
<view class="w-100 flex j-between a-center mb-3">
<view class="descColor">产品产地</view>
<view>{{detail.base_data.production_place}}</view>
</view>
<view class="w-100 flex j-between a-center mb-3">
<view class="descColor">商品条码</view>
<view>{{detail.base_data.bar_code}}</view>
</view>
<view class="w-100 flex j-between a-center mb-3">
<view class="descColor">生产日期</view>
<view>{{detail.base_data.production_data}}</view>
</view>
<view class="w-100 flex j-between a-center">
<view class="descColor">保质期</view>
<view>{{detail.base_data.shelf_life}}</view>
</view>
</view>
<preview-zz
v-if="detail.dynamic_data.sup_zhizhao && detail.dynamic_data.sup_zhizhao.length > 0"
name="供货商"
:originName="detail.dynamic_data.sup_name"
:originCode="detail.dynamic_data.sup_unit_credit_code"
:list="detail.dynamic_data.sup_zhizhao"
/>
<preview-zz
v-if="detail.dynamic_data.jxs_zhizhao && detail.dynamic_data.jxs_zhizhao.length > 0"
name="经销商"
:originName="detail.dynamic_data.jxs_name"
:originCode="detail.dynamic_data.sup_unit_credit_code"
:list="detail.dynamic_data.jxs_unit_credit_code"
/>
</view>
</template>
<script>
import previewZz from './components/preview_zz.vue'
import { safeOrigin } from '@/apis/order.js'
export default {
data() {
return {
detail: {}
}
},
components: {
previewZz
},
onLoad(ops) {
const { og_id } = ops
this.og_id = og_id
this.getData()
},
methods: {
getData() {
safeOrigin(this.og_id)
.then(({status, data}) => {
if(status) {
this.detail = data
}
})
}
}
}
</script>
<style lang="scss" scoped>
.cover {
width: 750rpx;
height: 750rpx;
background-color: #fff;
margin-bottom: 20rpx;
}
.title {
@include borderBox(40rpx, 30rpx);
background-color: #fff;
margin-bottom: 20rpx;
}
.information {
width: 100%;
@include borderBox(40rpx, 30rpx);
background-color: #fff;
}
</style>
......@@ -6,7 +6,7 @@ const validate_strategies = {
if(value.length < len) return errorMsg;
},
isMobile: (value, errorMsg) => {
if(!(/^1[3-9]\d{9}$/.test(value))) return errorMsg;;
if(!(/^1[3-9]\d{9}$/.test(value))) return errorMsg;
},
isHttp: (value, errorMsg) => {
if(!value.startsWith("http")) return errorMsg;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment