Browse Source

增加核销和门店订单

master
Gao xiaosong 5 years ago
parent
commit
f1f70c2066
  1. 4
      config/index.js
  2. 13
      pages/order/MyOrder/index.vue
  3. 146
      pages/order/OrderDetails/index.vue
  4. 1195
      pages/order/OrderSubmission/index.vue
  5. 289
      pages/orderAdmin/OrderCancellation/index.vue
  6. 40
      pages/shop/StoreList/index.vue
  7. 6
      pages/user/UserAccount/index.vue
  8. 1
      pages/user/UserBill/index.vue
  9. 15
      store/index.js

4
config/index.js

@ -1,4 +1,4 @@
export const VUE_APP_API_URL = 'http://natapp.xinxintuan.co/api';
// export const VUE_APP_API_URL = 'https://h5api.dayouqiantu.cn/api';
// export const VUE_APP_API_URL = 'http://natapp.xinxintuan.co/api';
export const VUE_APP_API_URL = 'https://h5api.dayouqiantu.cn/api';
export const VUE_APP_RESOURCES_URL = 'https://h5.dayouqiantu.cn/static';

13
pages/order/MyOrder/index.vue

@ -38,13 +38,14 @@
<view class="item" v-for="(order,orderListIndex) in orderList" :key="orderListIndex">
<view class="title acea-row row-between-wrapper">
<view class="acea-row row-middle">
<text
<span
class="sign cart-color acea-row row-center-wrapper"
v-if="order.combinationId > 0"
>拼团</text>
<text class="sign cart-color acea-row row-center-wrapper" v-if="order.seckillId > 0">秒杀</text>
<text class="sign cart-color acea-row row-center-wrapper" v-if="order.bargainId > 0">砍价</text>
<data-format :date="order.addTime"></data-format>
>拼团</span>
<span class="sign cart-color acea-row row-center-wrapper" v-if="order.seckillId > 0">秒杀</span>
<span class="sign cart-color acea-row row-center-wrapper" v-if="order.bargainId > 0">砍价</span>
<span class="sign cart-color acea-row row-center-wrapper" v-if="order.storeId > 0">门店</span>
{{ dataFormat(order.addTime) }}
</view>
<view class="font-color-red">{{ getStatus(order) }}</view>
</view>
@ -200,7 +201,7 @@ export default {
},
computed: mapGetters(["userInfo"]),
onShow: function() {
console.log(this)
console.log(this);
this.type = parseInt(this.$yroute.query.type) || 0;
this.changeType(this.type);
this.getOrderData();

146
pages/order/OrderDetails/index.vue

@ -45,7 +45,7 @@
'bg-color-red':
status.type > 1 && status.type != 6 && status.type != 9
}"
v-if="orderInfo.shipping_type === 1"
v-if="orderInfo.shippingType === 1"
></view>
<view
class="iconfont"
@ -91,66 +91,60 @@
></view>
</view>
</view>
<!--<view-->
<!--class="writeOff"-->
<!--v-if="orderInfo.shipping_type === 2 && orderInfo.paid === 1"-->
<!--&gt;-->
<!--<view class="title">核销信息</view>-->
<!--<view class="grayBg">-->
<!--<view class="pictrue"><image :src="orderInfo.code" /></view>-->
<!--</view>-->
<!--<view class="gear"><image src="@/static/images/writeOff.jpg" /></view>-->
<!--<view class="num">{{ orderInfo._verify_code }}</view>-->
<!--<!--<!--<!--<text class="rules">-->
<!--<!--<!--<text class="item">-->
<!--<!--<text class="rulesTitle acea-row row-middle">-->
<!--<text class="iconfont icon-shijian"></text>核销时间-->
<!--</!--<text>-->
<!--<view class="info">-->
<!--{{ system_store._valid_time-->
<!--}}<text class="time">{{ system_store.day_time }}</text>-->
<!--</view>-->
<!--</!--<!--<text>-->
<!--<view class="item">-->
<!--<view class="rulesTitle acea-row row-middle">-->
<!--<text class="iconfont icon-shuoming1"></text>使用说明-->
<!--</view>-->
<!--<view class="info">可将二维码出示给店员扫描或提供数字核销码</view>-->
<!--</view>-->
<!--</!--<!--<!--<text>-->
<!--</!--<!--<!--<!--<text>-->
<!--<view-->
<!--class="map acea-row row-between-wrapper"-->
<!--v-if="orderInfo.shipping_type === 2 && orderInfo.paid === 1"-->
<!--&gt;-->
<!--<view>自提地址信息</view>-->
<!--<view-->
<!--class="place cart-color acea-row row-center-wrapper"-->
<!--@click="showChang"-->
<!--&gt;-->
<!--<text class="iconfont icon-weizhi"></text>查看位置-->
<!--</view>-->
<!--</view>-->
<div class="writeOff" v-if="orderInfo.shippingType === 2 && orderInfo.paid === 1">
<div class="title">核销信息</div>
<div class="grayBg">
<div class="pictrue">
<img :src="orderInfo.code" />
</div>
</div>
<div class="gear">
<img src="@/static/images/writeOff.jpg" />
</div>
<div class="num">{{ orderInfo.verifyCode }}</div>
<div class="rules">
<div class="item">
<div class="rulesTitle acea-row row-middle">
<span class="iconfont icon-shijian"></span>核销时间
</div>
<div class="info">
每日
<span class="time">{{ system_store.dayTime }}</span>
</div>
</div>
<div class="item">
<div class="rulesTitle acea-row row-middle">
<span class="iconfont icon-shuoming1"></span>使用说明
</div>
<div class="info">可将二维码出示给店员扫描或提供数字核销码</div>
</div>
</div>
</div>
<div
class="map acea-row row-between-wrapper"
v-if="orderInfo.shippingType === 2 && orderInfo.paid === 1"
>
<div>自提地址信息</div>
<div class="place cart-color acea-row row-center-wrapper" @click="showChang">
<span class="iconfont icon-weizhi"></span>查看位置
</div>
</div>
<view class="address" v-if="orderInfo.shippingType === 1">
<view class="name">
{{ orderInfo.realName
}}
{{ orderInfo.realName }}
<text class="phone">{{ orderInfo.userPhone }}</text>
<text class="iconfont icon-tonghua font-color-red"></text>
</view>
<view>{{ orderInfo.userAddress }}</view>
</view>
<!--<view class="address" v-else>-->
<!--<view class="name">-->
<!--{{ system_store.name-->
<!--}}<text class="phone">{{ system_store.phone }}</text>-->
<!--<a-->
<!--class="iconfont icon-tonghua font-color-red"-->
<!--:href="'tel:' + system_store.phone"-->
<!--&gt;</a>-->
<!--</view>-->
<!--<view>{{ system_store._detailed_address }}</view>-->
<!--</view>-->
<div class="address" v-else>
<div class="name">
{{ system_store.name}}
<span class="phone">{{ system_store.phone }}</span>
<span class="iconfont icon-tonghua font-color-red" :href="'tel:' + system_store.phone"></span>
</div>
<div>{{ system_store.address }}</div>
</div>
<view class="line" v-if="orderInfo.shippingType === 1">
<image src="@/static/images/line.jpg" />
</view>
@ -160,8 +154,7 @@
<view class="item acea-row row-between">
<view>订单编号</view>
<view class="conter acea-row row-middle row-right">
{{ orderInfo.orderId
}}
{{ orderInfo.orderId }}
<text class="copy copy-data" @click="copyClipboard(orderInfo.orderId)">复制</text>
</view>
</view>
@ -272,9 +265,7 @@
<template v-if="status.type == 2">
<view
class="bnt default"
@click="
$yrouter.push({ path: '/pages/order/Logistics/index' ,query:{id:orderInfo.orderId }})
"
@click="$yrouter.push({ path: '/pages/order/Logistics/index' ,query:{id:orderInfo.orderId }})"
>查看物流</view>
<view class="bnt bg-color-red" @click="takeOrder">确认收货</view>
</template>
@ -319,13 +310,11 @@
top: 0;
z-index: 10000;
}
.order-details .writeOff {
background-color: #fff;
margin-top: 0.13 * 100rpx;
padding-bottom: 0.3 * 100rpx;
}
.order-details .writeOff .title {
font-size: 0.3 * 100rpx;
color: #282828;
@ -334,7 +323,6 @@
padding: 0 0.3 * 100rpx;
line-height: 0.87 * 100rpx;
}
.order-details .writeOff .grayBg {
background-color: #f2f5f7;
width: 5.9 * 100rpx;
@ -343,31 +331,26 @@
margin: 0.5 * 100rpx auto 0 auto;
padding-top: 0.55 * 100rpx;
}
.order-details .writeOff .grayBg .pictrue {
width: 2.9 * 100rpx;
height: 2.9 * 100rpx;
margin: 0 auto;
}
.order-details .writeOff .grayBg .pictrue image {
.order-details .writeOff .grayBg .pictrue img {
width: 100%;
height: 100%;
display: block;
}
.order-details .writeOff .gear {
width: 5.9 * 100rpx;
height: 0.3 * 100rpx;
margin: 0 auto;
}
.order-details .writeOff .gear image {
.order-details .writeOff .gear img {
width: 100%;
height: 100%;
display: block;
}
.order-details .writeOff .num {
background-color: #f0c34c;
width: 5.9 * 100rpx;
@ -379,50 +362,42 @@
text-align: center;
padding-top: 0.04 * 100rpx;
}
.order-details .writeOff .rules {
margin: 0.46 * 100rpx 0.3 * 100rpx 0 0.3 * 100rpx;
border-top: 0.01 * 100rpx solid #f0f0f0;
padding-top: 0.1 * 100rpx;
}
.order-details .writeOff .rules .item {
margin-top: 0.15 * 100rpx;
}
.order-details .writeOff .rules .item .rulesTitle {
font-size: 0.28 * 100rpx;
color: #282828;
}
.order-details .writeOff .rules .item .rulesTitle .iconfont {
font-size: 0.3 * 100rpx;
color: #333;
margin-right: 0.08 * 100rpx;
margin-top: 0.05 * 100rpx;
}
.order-details .writeOff .rules .item .info {
font-size: 0.28 * 100rpx;
color: #999;
margin-top: 0.05 * 100rpx;
}
.order-details .writeOff .rules .item .info .time {
margin-left: 0.2 * 100rpx;
}
.order-details .map {
height: 0.86 * 100rpx;
font-size: 0.3 * 100rpx;
color: #282828;
line-height: 0.86 * 100rpx;
border-bottom: 1rpx solid #f0f0f0;
border-bottom: 0.01 * 100rpx solid #f0f0f0;
margin-top: 0.13 * 100rpx;
background-color: #fff;
padding: 0 0.3 * 100rpx;
}
.order-details .map .place {
font-size: 0.26 * 100rpx;
width: 1.76 * 100rpx;
@ -431,14 +406,12 @@
line-height: 0.5 * 100rpx;
text-align: center;
}
.order-details .map .place .iconfont {
font-size: 0.27 * 100rpx;
height: 0.27 * 100rpx;
line-height: 0.27 * 100rpx;
margin: 0.02 * 100rpx 0.03 * 100rpx 0 0;
}
.order-details .address .name .iconfont {
font-size: 0.34 * 100rpx;
margin-left: 0.1 * 100rpx;
@ -528,7 +501,7 @@ export default {
latitude: this.system_store.latitude,
longitude: this.system_store.longitude,
name: this.system_store.name,
address: this.system_store._detailed_address
address: this.system_store.address
};
} else {
if (!this.mapKey)
@ -546,7 +519,7 @@ export default {
this.$yrouter.back();
return;
} else {
console.log(this)
console.log(this);
this.$yrouter.replace({
path: "/pages/order/MyOrder/index"
});
@ -556,7 +529,6 @@ export default {
cancelOrder() {
cancelOrderHandle(this.orderInfo.orderId)
.then(() => {
setTimeout(() => this.goBack(), 300);
})
.catch(() => {
@ -582,9 +554,7 @@ export default {
},
getOrderStatus: function() {
let orderInfo = this.orderInfo || {},
_status = orderInfo._status || {
_type: 0
},
_status = orderInfo._status || { _type: 0 },
status = {};
let type = parseInt(_status._type),
delivery_type = orderInfo.deliveryType,
@ -642,7 +612,7 @@ export default {
this.orderTypeName = "秒杀订单";
this.orderTypeNameStatus = false;
}
this.system_store = res.data.system_store || {};
this.system_store = res.data.systemStore || {};
this.mapKey = res.data.mapKay;
this.setOfflinePayStatus(this.orderInfo.offlinePayStatus);
})
@ -660,6 +630,6 @@ export default {
await payOrderHandle(this.orderInfo.orderId, type, that.from);
that.getDetail();
}
},
}
};
</script>

1195
pages/order/OrderSubmission/index.vue

File diff suppressed because it is too large Load Diff

289
pages/orderAdmin/OrderCancellation/index.vue

@ -1,159 +1,156 @@
<template>
<view class="OrderCancellation">
<view class="header"></view>
<view class="whiteBg">
<view class="input">
<input type="number" placeholder="0" v-model="verify_code" />
</view>
<view class="bnt" @click="storeCancellation">立即核销</view>
</view>
<view class="scan" v-if="iswechat">
<image src="@/static/images/scan.gif" @click="openQRCode" />
</view>
<WriteOff :iShidden="iShidden" :orderInfo="orderInfo" @cancel="cancel" @confirm="confirm"></WriteOff>
</view>
<view class="OrderCancellation">
<view class="header"></view>
<view class="whiteBg">
<view class="input">
<input type="number" placeholder="0" v-model="verify_code" />
</view>
<view class="bnt" @click="storeCancellation">立即核销</view>
</view>
<view class="scan" v-if="iswechat">
<image src="@/static/images/scan.gif" @click="openQRCode" />
</view>
<WriteOff :iShidden="iShidden" :orderInfo="orderInfo" @cancel="cancel" @confirm="confirm"></WriteOff>
</view>
</template>
<style scoped lang="less">
.OrderCancellation .header {
background: url("https://h5.dayouqiantu.cn/static/images/writeOffBg.jpg") no-repeat;
width: 100%;
height: 3*100rpx;
background-size: 100% 100%;
}
.OrderCancellation .header {
background: url("https://h5.dayouqiantu.cn/static/images/writeOffBg.jpg")
no-repeat;
width: 100%;
height: 3 * 100rpx;
background-size: 100% 100%;
}
.OrderCancellation .whiteBg {
width: 6.9*100rpx;
background-color: #fff;
margin: -0.93*100rpx auto 0 auto;
padding-top: 0.8*100rpx;
border-radius: 0.06*100rpx 0.06*100rpx 0 0;
}
.OrderCancellation .whiteBg {
width: 6.9 * 100rpx;
background-color: #fff;
margin: -0.93 * 100rpx auto 0 auto;
padding-top: 0.8 * 100rpx;
border-radius: 0.06 * 100rpx 0.06 * 100rpx 0 0;
}
.OrderCancellation .whiteBg .input {
width: 5.8*100rpx;
margin: 0 auto;
border-bottom: 0.01*100rpx solid #eee;
}
.OrderCancellation .whiteBg .input {
width: 5.8 * 100rpx;
margin: 0 auto;
border-bottom: 0.01 * 100rpx solid #eee;
}
.OrderCancellation .whiteBg .input input {
padding-bottom: 0.25*100rpx;
font-size: 0.6*100rpx;
color: #282828;
width: 100%;
text-align: center;
}
.OrderCancellation .whiteBg .input input {
padding-bottom: 0.25 * 100rpx;
font-size: 0.6 * 100rpx;
color: #282828;
width: 100%;
text-align: center;
}
.OrderCancellation .whiteBg .bnt {
font-size: 0.32*100rpx;
color: #fff;
width: 5.8*100rpx;
height: 0.86*100rpx;
border-radius: 0.43*100rpx;
background-image: linear-gradient(to right, #f67a38 0%, #f11b09 100%);
background-image: -webkit-linear-gradient(to right, #f67a38 0%, #f11b09 100%);
background-image: -moz-linear-gradient(to right, #f67a38 0%, #f11b09 100%);
text-align: center;
line-height: 0.86*100rpx;
margin: 0.55*100rpx auto 0 auto;
}
.OrderCancellation .whiteBg .bnt {
font-size: 0.32 * 100rpx;
color: #fff;
width: 5.8 * 100rpx;
height: 0.86 * 100rpx;
border-radius: 0.43 * 100rpx;
background-image: linear-gradient(to right, #f67a38 0%, #f11b09 100%);
background-image: -webkit-linear-gradient(to right, #f67a38 0%, #f11b09 100%);
background-image: -moz-linear-gradient(to right, #f67a38 0%, #f11b09 100%);
text-align: center;
line-height: 0.86 * 100rpx;
margin: 0.55 * 100rpx auto 0 auto;
}
.OrderCancellation .scan {
width: 3*100rpx;
height: 3*100rpx;
margin: 1.1*100rpx auto 0 auto;
}
.OrderCancellation .scan {
width: 3 * 100rpx;
height: 3 * 100rpx;
margin: 1.1 * 100rpx auto 0 auto;
}
.OrderCancellation .scan image {
width: 100%;
height: 100%;
display: block;
}
.OrderCancellation .scan image {
width: 100%;
height: 100%;
display: block;
}
</style>
<script>
import WriteOff from "@/components/WriteOff";
import {
isWeixin
} from "@/utils";
// import { wechatEvevt } from "@/libs/wechat";
import {
orderVerific
} from "@/api/order";
const NAME = "OrderCancellation";
import WriteOff from "@/components/WriteOff";
import { isWeixin } from "@/utils";
// import { wechatEvevt } from "@/libs/wechat";
import { orderVerific } from "@/api/order";
const NAME = "OrderCancellation";
export default {
name: NAME,
components: {
WriteOff
},
props: {},
data: function() {
return {
iShidden: true,
iswechat: isWeixin(),
orderInfo: {},
verify_code: ""
};
},
mounted: function() {},
methods: {
cancel: function(res) {
this.iShidden = res;
},
confirm: function() {
orderVerific(this.verify_code, 1)
.then(res => {
this.iShidden = true;
this.verify_code = "";
uni.showToast({
title: res.msg,
icon: 'none',
duration: 2000
});
})
.catch(err => {
uni.showToast({
title: err.msg || err.response.data.msg|| err.response.data.message,
icon: 'none',
duration: 2000
});
});
},
storeCancellation: function() {
let ref = /[0-9]{12}/;
if (!this.verify_code) {
uni.showToast({
title: "请输入核销码",
icon: 'none',
duration: 2000
});
return
}
if (!ref.test(this.verify_code)) {
uni.showToast({
title: "请输入正确的核销码",
icon: 'none',
duration: 2000
});
return
}
uni.showLoading({
title: "查询中"
});
orderVerific(this.verify_code, 0)
.then(res => {
uni.hideLoading();
this.orderInfo = res.data;
this.iShidden = false;
})
.catch(() => {
uni.hideLoading();
});
},
openQRCode: function() {
let that = this;
//
}
}
};
export default {
name: NAME,
components: {
WriteOff
},
props: {},
data: function() {
return {
iShidden: true,
iswechat: isWeixin(),
orderInfo: {},
verify_code: ""
};
},
mounted: function() {},
methods: {
cancel: function(res) {
this.iShidden = res;
},
confirm: function() {
orderVerific(this.verify_code, 1)
.then(res => {
this.iShidden = true;
this.verify_code = "";
uni.showToast({
title: res.msg,
icon: "none",
duration: 2000
});
})
.catch(err => {
uni.showToast({
title:
err.msg || err.response.data.msg || err.response.data.message,
icon: "none",
duration: 2000
});
});
},
storeCancellation: function() {
let ref = /[0-9]{12}/;
if (!this.verify_code) {
uni.showToast({
title: "请输入核销码",
icon: "none",
duration: 2000
});
return;
}
if (!ref.test(this.verify_code)) {
uni.showToast({
title: "请输入正确的核销码",
icon: "none",
duration: 2000
});
return;
}
uni.showLoading({
title: "查询中"
});
orderVerific(this.verify_code, 0)
.then(res => {
uni.hideLoading();
this.orderInfo = res.data;
this.iShidden = false;
})
.catch(() => {
uni.hideLoading();
});
},
openQRCode: function() {
let that = this;
//
}
}
};
</script>

40
pages/shop/StoreList/index.vue

@ -60,7 +60,7 @@
mapKey
"
></iframe>
</div> -->
</div>-->
</view>
</template>
@ -77,7 +77,7 @@ const MAPKEY = "mapKey";
export default {
name: "storeList",
components: { Loading },
computed: mapGetters(["location"]),
computed: mapGetters(["location", "goName"]),
data() {
return {
page: 1,
@ -101,8 +101,8 @@ export default {
//
checked(e) {
if (this.goName === "orders") {
this.$router.go(-1); //
this.$store.commit("GET_STORE", e);
this.$store.commit("get_store", e);
this.$yrouter.back();
}
},
//
@ -141,14 +141,14 @@ export default {
}
.storeBox {
background-color: #fff;
padding: 0 0.3*100rpx;
padding: 0 0.3 * 100rpx;
}
.storeBox-box {
width: 100%;
height: auto;
display: flex;
align-items: center;
padding: 0.23*100rpx 0;
padding: 0.23 * 100rpx 0;
justify-content: space-between;
border-bottom: 1px solid #eee;
}
@ -159,15 +159,15 @@ export default {
}
.store-cent-left {
width: 45%;
text{
text {
display: block;
}
}
.store-img {
width: 1.2*100rpx;
height: 1.2*100rpx;
border-radius: 0.06*100rpx;
margin-right: 0.22*100rpx;
width: 1.2 * 100rpx;
height: 1.2 * 100rpx;
border-radius: 0.06 * 100rpx;
margin-right: 0.22 * 100rpx;
}
.store-img img {
width: 100%;
@ -175,31 +175,31 @@ export default {
}
.store-name {
color: #282828;
font-size: 0.3*100rpx;
margin-bottom: 0.22*100rpx;
font-size: 0.3 * 100rpx;
margin-bottom: 0.22 * 100rpx;
font-weight: 800;
}
.store-address {
color: #666666;
font-size: 0.24*100rpx;
font-size: 0.24 * 100rpx;
}
.store-phone {
width: 0.5*100rpx;
height: 0.5*100rpx;
width: 0.5 * 100rpx;
height: 0.5 * 100rpx;
color: #fff;
border-radius: 50%;
display: block;
text-align: center;
line-height: 0.5*100rpx;
line-height: 0.5 * 100rpx;
background-color: #e83323;
margin-bottom: 0.22*100rpx;
margin-bottom: 0.22 * 100rpx;
}
.store-distance {
font-size: 0.22*100rpx;
font-size: 0.22 * 100rpx;
color: #e83323;
}
.iconfont {
font-size: 0.2*100rpx;
font-size: 0.2 * 100rpx;
}
.row-right {
display: flex;

6
pages/user/UserAccount/index.vue

@ -31,6 +31,12 @@
</view>
<view>消费记录</view>
</view>
<view class="item" @click="goUserBill(2)">
<view class="pictrue">
<image src="@/static/images/record3.png" />
</view>
<view>充值记录</view>
</view>
</view>
<view class="advert acea-row row-between-wrapper"></view>
</view>

1
pages/user/UserBill/index.vue

@ -3,6 +3,7 @@
<view class="nav acea-row">
<view class="item" :class="types == 0 ? 'on' : ''" @click="changeTypes(0)">全部</view>
<view class="item" :class="types == 1 ? 'on' : ''" @click="changeTypes(1)">消费</view>
<view class="item" :class="types == 2 ? 'on' : ''" @click="changeTypes(2)">充值</view>
</view>
<view class="sign-record">
<view class="list">

15
store/index.js

@ -26,7 +26,9 @@ const vuexStore = new Vuex.Store({
location: {
latitude: '',
longitude: ''
}
},
storeItems: cookie.get("storeItems") || null,
goName: cookie.get("goName") || ""
},
mutations: {
login(state, token, expires_time) {
@ -64,8 +66,15 @@ const vuexStore = new Vuex.Store({
state.$deviceType = $deviceType;
},
setLocation(state, location) {
console.log(location, '定位')
state.location = location
},
get_store(state, storeItems) {
state.storeItems = storeItems;
cookie.set("storeItems", storeItems);
},
get_to(state, goName) {
state.goName = goName;
cookie.set("goName", goName);
}
},
actions: {
@ -139,6 +148,8 @@ const vuexStore = new Vuex.Store({
isLogin: state => !!state.token,
userInfo: state => state.userInfo || {},
location: state => state.location,
storeItems: state => state.storeItems,
goName: state => state.goName,
},
strict: debug
});

Loading…
Cancel
Save