Explorar o código

测试版本封装

vaecebyZ hai 1 ano
pai
achega
ef1358121f

+ 2 - 2
components/zs-tab-bar/index.vue

@@ -112,7 +112,7 @@ export default {
 
 <style lang="scss" scoped>
 .u-page__item__slot-icon {
-  width: 20px;
-  height: 20px;
+  width: 23px;
+  height: 23px;
 }
 </style>

+ 743 - 681
my/order/detail.vue

@@ -1,698 +1,760 @@
 <template>
-	<view class="order-detail">
-			<view class="status-box">
-				<view class="text-box">
-					<view class="status" v-if="info.goodsList[0].goodsState == 'WAIT_PAYMENT'&&!isNotTime">
-						等待支付,剩余<u-count-down :time="closeTime" format="HH:mm:ss" @finish="finish"></u-count-down>
-					</view>
-					<view class="status" v-else>
-						{{info.goodsList[0].goodsState | filterType}}
-					</view>
-				</view>
-			</view>
-			
-			<view class="content progress"  v-if="info.goodsList[0].goodsState == 'APPLY_REFUND' || info.goodsList[0].goodsState == 'REFUNDED'"  @click="refundDetail">
-				<view class="progress-title">
-					退款进度
-				</view>
-				
-				<view class="progress-desc">
-					查看退款详情
-				</view>
-			</view>
-			
-			<view class="content shop-box"  v-if="!isVisual">
+  <view class="order-detail">
+    <view class="status-box">
+      <view class="text-box">
+        <view
+          class="status"
+          v-if="info.goodsList[0].goodsState == 'WAIT_PAYMENT' && !isNotTime"
+        >
+          等待支付,剩余<u-count-down
+            :time="closeTime"
+            format="HH:mm:ss"
+            @finish="finish"
+          ></u-count-down>
+        </view>
+        <view class="status" v-else>
+          {{ info.goodsList[0].goodsState | filterType }}
+        </view>
+      </view>
+    </view>
+
+    <view
+      class="content progress"
+      v-if="
+        info.goodsList[0].goodsState == 'APPLY_REFUND' ||
+        info.goodsList[0].goodsState == 'REFUNDED'
+      "
+      @click="refundDetail"
+    >
+      <view class="progress-title"> 退款进度 </view>
+
+      <view class="progress-desc"> 查看退款详情 </view>
+    </view>
+
+    <!-- <view class="content shop-box"  v-if="!isVisual">
 				<view class="shop-name">
 					{{info.shopInfo.shopName}}
 				</view>
 				<view class="address">
 					{{info.shopInfo.address}}
 				</view>
-			</view>
-			
-			<view class="content info">
-				<view class="order-info">
-					<image class="icon" :src="info.goodsList[0].goodsInfo.goodsPath" mode=""></image>
-					<view class="shop-info">
-						<view class="title">
-							{{info.goodsList[0].goodsInfo.goodsName}}
-						</view>
-						<view class="goods-desc">
-							{{info.goodsList[0].goodsInfo.goodsDescribe}}
-						</view>
-						<view class="price-box">
-							<view class="price">
-								¥{{info.goodsList[0].goodsInfo.realPrice}}
-							</view>
-							
-						</view>
-						
-						
-						<!-- 有extend并且不是虚拟商品 -->
-						<!-- <view class="start-time" v-if="info.extend&&!isVisual">
+			</view> -->
+
+    <view class="content info">
+      <view class="order-info">
+        <image
+          class="icon"
+          :src="info.goodsList[0].goodsInfo.goodsPath"
+          mode=""
+        ></image>
+        <view class="shop-info">
+          <view class="title">
+            {{ info.goodsList[0].goodsInfo.goodsName }}
+          </view>
+          <view class="goods-desc">
+            {{ info.goodsList[0].goodsInfo.goodsDescribe }}
+          </view>
+          <view class="price-box">
+            <view class="price">
+              ¥{{ info.goodsList[0].goodsInfo.realPrice }}
+            </view>
+          </view>
+
+          <!-- 有extend并且不是虚拟商品 -->
+          <!-- <view class="start-time" v-if="info.extend&&!isVisual">
 							出发时间:{{info.extend}}
 						</view> -->
-						
-					</view>
-				</view>
-			</view>
-			
-			<view class="content code-box"  v-if="info.goodsList[0].goodsState == 'WAIT_USE'&&info.goodsList[0].goodsName!='二维码支付'">
-				<view class="left">
-					<view class="title">
-						券码信息
-					</view>
-					<view class="codeNum">
-						
-					</view>
-				</view>
-				<view class="code-btn"  @click="checkCode">
-					查看券码 <image class="jiantou" src="../../static/jiantou-icon.png" mode=""></image>
-				</view>
-			</view>
-			<view class="content" v-if="info.goodsList[0].goodsState == 'USED'">
-				<view class="title">
-					消费记录
-				</view>
-				
-				<view class="item">
-					<view class="label">
-						消费时间
-					</view>
-					<view class="value">
-						{{$u.timeFormat(info.goodsList[0].verifyModel.checkTime,'yyyy-mm-dd hh:MM:ss')}}
-					</view>
-				</view>
-				<view class="item">
-					<view class="label">
-						消费门店
-					</view>
-					<view class="value">
-						{{info.goodsList[0].verifyModel.shopName}}
-					</view>
-				</view>
-				
-			</view>
-			
-			<view class="content">
-				<view class="title">
-					订单信息
-				</view>
-				<view class="item">
-					<view class="label">
-						订单编号
-					</view>
-					<view class="value">
-						{{info.orderNo}}
-					</view>
-				</view>
-				
-				<view class="item">
-					<view class="label">
-						付款方式
-					</view>
-					<view class="value">
-						{{info.payment.paymentWay | filterPay}}
-					</view>
-				</view>
-				<view class="item">
-					<view class="label">
-						下单时间
-					</view>
-					<view class="value">
-						{{$u.timeFormat(info.createTime,'yyyy-mm-dd hh:MM:ss')}}
-					</view>
-				</view>
-				
-				<view class="item" v-if="info.goodsList[0].goodsState != 'WAIT_PAYMENT' && info.goodsList[0].goodsState != 'CLOSE'">
-					<view class="label">
-						支付时间
-					</view>
-					<view class="value">
-						{{$u.timeFormat(info.payment.paymentTime,'yyyy-mm-dd hh:MM:ss')}}
-					</view>
-				</view>
-			</view>
-			
-			<view class="content">
-				<view class="title">
-					交易信息
-				</view>
-				
-				<view class="item">
-					<view class="label">
-						商品金额
-					</view>
-					<view class="value black">
-						¥{{info.goodsList[0].goodsInfo.realPrice}}
-					</view>
-				</view>
-				
-				
-				<view class="item" >
-					<view class="label">
-						优惠券
-					</view>
-					<view class="value red">
-						-¥{{info.discountAmount}}
-					</view>
-				</view>
-				
-				
-				<view class="item">
-					<view class="label">
-						合计
-					</view>
-					<view class="value">
-						<text class="red fs28">¥{{info.payAmount}}</text>
-					</view>
-				</view>
-				
-			</view>
-			
-			<view class="input-box" v-if="isVisual">
-				<view class="label">
-					充值账号
-				</view>
-				<view class="value">
-					{{JSON.parse(info.extend).account}}
-				</view>
-			</view>
-			
-			<template v-if="info.goodsList[0].goodsState == 'APPLY_REFUND'">
-				<view class="content refund-box">
-					<view class="title">
-						退款原因
-					</view>
-					
-					<view class="refund-msg">
-						{{info.goodsList[0].refundLog.remark}}
-					</view>
-				</view>
-				<button type="default" :loading="btnLoading" v-if="!info.payment.transferAll" class="pay-btn" @click="cancelReply" >取消退款</button>
-			</template>
-			
-			<button type="default" :loading="btnLoading" class="pay-btn" v-if="info.goodsList[0].goodsState == 'WAIT_PAYMENT'" @click="pay" >立即支付</button>
-			<view class="content apply-box" v-else-if="(info.goodsList[0].goodsState == 'WAIT_USE'||info.goodsList[0].goodsState == 'USED')&&isRefund()" @click="apply">
-				<view class="label">
-					退款申请
-				</view>
-				<view class="value">
-					如引发商品争议,可申请平台介入处理
-				</view>
-				<image class="jiantou" src="../../static/jiantou-icon.png" mode=""></image>
-			</view>
-			
-			<!-- 二维码 -->
-			<u-overlay :show="show" v-if="show" :opacity="0.6">
-				<view class="wrap"  @click.stop="close">
-					<uqrcode ref="uqrcode" type="2d" auto canvas-id="qrcode" :value="codeData" :loading="loading" :options="{ margin: 20 }">
-						 <template v-slot:loading>
-							<text style="color: black;">拼命加载中...</text>
-						  </template>
-					</uqrcode>
-				</view>
-			</u-overlay>
-		
-	</view>
+        </view>
+      </view>
+    </view>
+
+    <view
+      class="content code-box"
+      v-if="
+        info.goodsList[0].goodsState == 'WAIT_USE' &&
+        info.goodsList[0].goodsName != '二维码支付'
+      "
+    >
+      <view class="left">
+        <view class="title"> 券码信息 </view>
+        <view class="codeNum"> </view>
+      </view>
+      <view class="code-btn" @click="checkCode">
+        查看券码
+        <image
+          class="jiantou"
+          src="../../static/jiantou-icon.png"
+          mode=""
+        ></image>
+      </view>
+    </view>
+    <view class="content" v-if="info.goodsList[0].goodsState == 'USED'">
+      <view class="title"> 消费记录 </view>
+
+      <view class="item">
+        <view class="label"> 消费时间 </view>
+        <view class="value">
+          {{
+            $u.timeFormat(
+              info.goodsList[0].verifyModel.checkTime,
+              "yyyy-mm-dd hh:MM:ss"
+            )
+          }}
+        </view>
+      </view>
+      <view class="item">
+        <view class="label"> 消费门店 </view>
+        <view class="value">
+          {{ info.goodsList[0].verifyModel.shopName }}
+        </view>
+      </view>
+    </view>
+
+    <view class="content">
+      <view class="title"> 订单信息 </view>
+      <view class="item">
+        <view class="label"> 订单编号 </view>
+        <view class="value">
+          {{ info.orderNo }}
+        </view>
+      </view>
+
+      <view class="item">
+        <view class="label"> 付款方式 </view>
+        <view class="value">
+          {{ info.payment.paymentWay || filterPay || "未支付" }}
+        </view>
+      </view>
+      <view class="item">
+        <view class="label"> 下单时间 </view>
+        <view class="value">
+          {{
+            $u.timeFormat(info.createTime, "yyyy-mm-dd hh:MM:ss") || "未支付"
+          }}
+        </view>
+      </view>
+
+      <view
+        class="item"
+        v-if="
+          info.goodsList[0].goodsState != 'WAIT_PAYMENT' &&
+          info.goodsList[0].goodsState != 'CLOSE'
+        "
+      >
+        <view class="label"> 支付时间 </view>
+        <view class="value">
+          {{ $u.timeFormat(info.payment.paymentTime, "yyyy-mm-dd hh:MM:ss") }}
+        </view>
+      </view>
+    </view>
+
+    <view class="content">
+      <view class="title"> 交易信息 </view>
+
+      <view class="item">
+        <view class="label"> 商品金额 </view>
+        <view class="value black">
+          ¥{{ info.goodsList[0].goodsInfo.realPrice }}
+        </view>
+      </view>
+
+      <view class="item">
+        <view class="label"> 优惠券 </view>
+        <view class="value red"> -¥{{ info.discountAmount }} </view>
+      </view>
+
+      <view class="item">
+        <view class="label"> 合计 </view>
+        <view class="value">
+          <text class="red fs28">¥{{ info.payAmount }}</text>
+        </view>
+      </view>
+    </view>
+
+    <view class="input-box" v-if="isVisual">
+      <view class="label"> 充值账号 </view>
+      <view class="value">
+        {{ JSON.parse(info.extend).account }}
+      </view>
+    </view>
+
+    <template v-if="info.goodsList[0].goodsState == 'APPLY_REFUND'">
+      <view class="content refund-box">
+        <view class="title"> 退款原因 </view>
+
+        <view class="refund-msg">
+          {{ info.goodsList[0].refundLog.remark }}
+        </view>
+      </view>
+      <button
+        type="default"
+        :loading="btnLoading"
+        v-if="!info.payment.transferAll"
+        class="pay-btn"
+        @click="cancelReply"
+      >
+        取消退款
+      </button>
+    </template>
+
+    <button
+      type="default"
+      :loading="btnLoading"
+      class="pay-btn"
+      v-if="info.goodsList[0].goodsState == 'WAIT_PAYMENT'"
+      @click="pay"
+    >
+      立即支付
+    </button>
+    <view
+      class="content apply-box"
+      v-else-if="
+        (info.goodsList[0].goodsState == 'WAIT_USE' ||
+          info.goodsList[0].goodsState == 'USED') &&
+        isRefund()
+      "
+      @click="apply"
+    >
+      <view class="label"> 退款申请 </view>
+      <view class="value"> 如引发商品争议,可申请平台介入处理 </view>
+      <image
+        class="jiantou"
+        src="../../static/jiantou-icon.png"
+        mode=""
+      ></image>
+    </view>
+
+    <!-- 二维码 -->
+    <u-overlay :show="show" v-if="show" :opacity="0.6">
+      <view class="wrap" @click.stop="close">
+        <uqrcode
+          ref="uqrcode"
+          type="2d"
+          auto
+          canvas-id="qrcode"
+          :value="codeData"
+          :loading="loading"
+          :options="{ margin: 20 }"
+        >
+          <template v-slot:loading>
+            <text style="color: black">拼命加载中...</text>
+          </template>
+        </uqrcode>
+      </view>
+    </u-overlay>
+  </view>
 </template>
 
 <script>
-	import {qrCode} from '@/api/order.js'
-	import {payDetails,queryPayOrder,unRefund} from '@/api/payment.js'
-	export default {
-		data() {
-			return {
-				isVisual:false,//是否是虚拟商品
-				codeData:'123',
-				show:false,
-				loading:false,
-				btnLoading:false,
-				oldBright:0,
-				info:{
-					goodsList:[{goodsState:''}]
-				},
-				isNotTime:false
-			}
-		},
-		watch: {
-			// isNotTime(val) {
-			// 	if(this.isNotTime){
-			// 		this.payDetails(this.info.orderNo)
-			// 	}
-			// }
-		},
-		filters: {
-			filterType: function(val) {
-				if(val == 'APPLY_REFUND'){
-					return '退款审核中'
-				}else if(val == 'CLOSE'){
-					return '关闭订单'
-				}else if(val == 'REFUNDED'){
-					return '已退款'
-				}else if(val == 'REFUSAL_REFUND'){
-					return '拒绝退款'
-				}else if(val == 'USED'){
-					return '订单已完成'
-				}else if(val == 'WAIT_PAYMENT'){
-					return '待付款'
-				}else if(val == 'WAIT_USE'){
-					return '待使用'
-				}
-			},
-			filterPay(val){
-				if(val == 'wx.unifiedOrder'){
-					return '微信支付'
-				}else if(val == 'trade.create'){
-					return '支付宝支付'
-				}else if(val == 'uac.miniOrder'){
-					return '云闪付支付'
-				}else{
-					return '-'
-				}
-			}
-		},
-		computed: {
-			closeTime() {
-				// if((this.info.createTime + 1000*60*15) - new Date().getTime()){
-				// 	this.isNotTime = false
-				// }else{
-				// 	this.isNotTime = true
-				// }
-				return (this.info.createTime + 1000*60*30) - new Date().getTime()
-			},
-		},
-		methods: {
-			isRefund(){
-				if(!this.info.goodsList[0].verifyModel){//没核销
-					return true
-				}else if(this.info.goodsList[0].verifyModel && (new Date().getTime() < (this.info.goodsList[0].verifyModel.checkTime + 1000*60*60*48))){// 已核销 并且没超过48小时
-					return true
-				}else{
-					return false
-				}
-			},
-			finish(){
-				this.isNotTime = true
-				console.log(222222,this.isNotTime);
-				this.payDetails(this.info.orderNo)
-			},
-			refundDetail(){
-				uni.navigateTo({
-					url:`/my/order/refundDetail?id=${this.info.orderNo}`
-				})
-			},
-			checkCode() {
-				this.codeData = ''
-				this.$nextTick(()=>{
-					
-					this.show = true
-					this.loading = true
-					let that = this
-					// uni.getScreenBrightness({
-					// 	success(res) {
-					// 		// 获取用户手机亮度 保存起来 
-					// 		that.oldBright = res.value
-					// 		setTimeout(()=>{
-					// 			uni.setScreenBrightness({
-					// 				value:1
-					// 			})
-					// 		},200)
-					// 	}
-					// })
-					qrCode(this.info.goodsList[0].id).then(res=>{
-						this.loading = false
-						if(res.state == 'Success'){
-							this.codeData = res.content
-						}
-					})
-				})
-			},
-			close(){
-				this.show = false
-				// uni.setScreenBrightness({
-				// 	value:this.oldBright
-				// })
-			},
-			apply(){
-				let that = this
-				uni.navigateTo({
-					url:'./refund',
-					success: function(res) {
-					  // 通过eventChannel向被打开页面传送数据
-					  res.eventChannel.emit('orderInfo', that.info)
-					}
-				})
-			},
-			// 获取订单详情
-			payDetails(orderNo){
-				payDetails(orderNo).then(res=>{
-					this.info = res.content
-					try{
-						let extend = JSON.parse(this.info.extend)
-						if(extend.account){
-							this.isVisual = true
-						}
-					}catch(e){
-						//TODO handle the exception
-					}
-				})
-			},
-			// 支付
-			pay(){
-				if (this.btnLoading) return
-				this.btnLoading = true
-				uni.showLoading({
-					title: '支付中'
-				})
-				let that = this
-				let miniPayRequest = JSON.parse(this.info.payment.miniPayRequest)
-				uni.requestPayment({
-					"provider": "wxpay",
-					"orderInfo": miniPayRequest,
-					"appid": miniPayRequest.appId, // 微信开放平台 - 应用 - AppId,注意和微信小程序、公众号 AppId 可能不一致
-					"paySign": miniPayRequest.paySign,
-					"nonceStr": miniPayRequest.nonceStr, // 随机字符串
-					"package": miniPayRequest.package, // 固定值
-					// "prepayid":  miniPayRequest.package, // 统一下单订单号 
-					"timeStamp": miniPayRequest.timeStamp, // 时间戳(单位:秒)
-					"signType": miniPayRequest.signType, //签名算法
-					success(msg) {
-						console.log('msg', msg);
-						queryPayOrder(that.info.orderNo).then(res1 => {
-							if (res1.state == 'Success') {
-								uni.hideLoading()
-								uni.showToast({
-									title: '支付成功',
-									icon: 'success'
-								})
-								that.btnLoading = false
-								that.payDetails(that.info.orderNo)
-							}
-						})
-					},
-					fail(e) {
+import { qrCode } from "@/api/order.js";
+import { payDetails, queryPayOrder, unRefund } from "@/api/payment.js";
+export default {
+  data() {
+    return {
+      isVisual: false, //是否是虚拟商品
+      codeData: "123",
+      show: false,
+      isJumped: false,
+      loading: false,
+      btnLoading: false,
+      oldBright: 0,
+      info: {
+        goodsList: [{ goodsState: "" }],
+        payment: {
+          paymentWay: "",
+        },
+      },
+      isNotTime: false,
+    };
+  },
+  watch: {
+    // isNotTime(val) {
+    // 	if(this.isNotTime){
+    // 		this.payDetails(this.info.orderNo)
+    // 	}
+    // }
+  },
+  filters: {
+    filterType: function (val) {
+      if (val == "APPLY_REFUND") {
+        return "退款审核中";
+      } else if (val == "CLOSE") {
+        return "关闭订单";
+      } else if (val == "REFUNDED") {
+        return "已退款";
+      } else if (val == "REFUSAL_REFUND") {
+        return "拒绝退款";
+      } else if (val == "USED") {
+        return "订单已完成";
+      } else if (val == "WAIT_PAYMENT") {
+        return "待付款";
+      } else if (val == "WAIT_USE") {
+        return "待使用";
+      }
+    },
+    filterPay(val) {
+      if (val == "wx.unifiedOrder") {
+        return "微信支付";
+      } else if (val == "trade.create") {
+        return "支付宝支付";
+      } else if (val == "uac.miniOrder") {
+        return "云闪付支付";
+      } else {
+        return "-";
+      }
+    },
+  },
+  computed: {
+    closeTime() {
+      // if((this.info.createTime + 1000*60*15) - new Date().getTime()){
+      // 	this.isNotTime = false
+      // }else{
+      // 	this.isNotTime = true
+      // }
+      return this.info.createTime + 1000 * 60 * 30 - new Date().getTime();
+    },
+  },
+  methods: {
+    isRefund() {
+      if (!this.info.goodsList[0].verifyModel) {
+        //没核销
+        return true;
+      } else if (
+        this.info.goodsList[0].verifyModel &&
+        new Date().getTime() <
+          this.info.goodsList[0].verifyModel.checkTime + 1000 * 60 * 60 * 48
+      ) {
+        // 已核销 并且没超过48小时
+        return true;
+      } else {
+        return false;
+      }
+    },
+    finish() {
+      this.isNotTime = true;
+      console.log(222222, this.isNotTime);
+      this.payDetails(this.info.orderNo);
+    },
+    refundDetail() {
+      uni.navigateTo({
+        url: `/my/order/refundDetail?id=${this.info.orderNo}`,
+      });
+    },
+    checkCode() {
+      this.codeData = "";
+      this.$nextTick(() => {
+        this.show = true;
+        this.loading = true;
+        let that = this;
+        // uni.getScreenBrightness({
+        // 	success(res) {
+        // 		// 获取用户手机亮度 保存起来
+        // 		that.oldBright = res.value
+        // 		setTimeout(()=>{
+        // 			uni.setScreenBrightness({
+        // 				value:1
+        // 			})
+        // 		},200)
+        // 	}
+        // })
+        qrCode(this.info.goodsList[0].id).then((res) => {
+          this.loading = false;
+          if (res.state == "Success") {
+            this.codeData = res.content;
+          }
+        });
+      });
+    },
+    close() {
+      this.show = false;
+      // uni.setScreenBrightness({
+      // 	value:this.oldBright
+      // })
+    },
+    apply() {
+      let that = this;
+      uni.navigateTo({
+        url: "./refund",
+        success: function (res) {
+          // 通过eventChannel向被打开页面传送数据
+          res.eventChannel.emit("orderInfo", that.info);
+        },
+      });
+    },
+    // 获取订单详情
+    payDetails(orderNo) {
+      payDetails(orderNo).then((res) => {
+        this.info = res.content;
+        try {
+          let extend = JSON.parse(this.info.extend);
+          if (extend.account) {
+            this.isVisual = true;
+          }
+        } catch (e) {
+          //TODO handle the exception
+        }
+
+        // 跳转了但是没支付
+        if(this.isJumped && this.info.goodsList[0].goodsState == "WAIT_PAYMENT"){
+          this.btnLoading = false;
+          uni.showToast({
+            title: "支付取消",
+            icon: "warning",
+          });
+        }else{
+
+        }
+      });
+    },
+    // 支付
+    pay() {
+      if (this.btnLoading) return;
+      this.btnLoading = true;
+      uni.showLoading({
+        title: "支付中",
+      });
+      let that = this;
+      let miniPayRequest = this.info.payment.miniPayRequest;
+			// 打开慧研学
+      uni.navigateToMiniProgram({
+        appId: "wx3be1d6d84d46cdf7",
+        path: "pages/index/index",
+        success: (res) => {
+          // 打开成功
+          // console.log("打开成功", res);
+          this.isJumped = true;
+        },
+        fail: (err) => {
+          // console.log(err);
+					uni.hideLoading();
+					uni.showToast({
+							title: "支付失败",
+							icon: "none",
+						});
 						that.btnLoading = false
-						uni.hideLoading()
-						uni.showToast({
-							title: '取消支付',
-							icon: 'fail'
-						})
-						// 取消支付后,获取支付信息以备再次支付
-						that.payDetails(that.info.orderNo)
-						console.log('err', e,this);
-					}
-				})
-			},
-			// 取消退款申请
-			cancelReply(){
-				if (this.btnLoading) return
-				this.btnLoading = true
-				uni.showLoading({
-					title: '取消中'
-				})
-				unRefund({id:this.info.goodsList[0].id}).then(res=>{
-					this.btnLoading = false
-					uni.hideLoading()
-					
-					if (res.state == 'Success') {
-						this.payDetails(this.info.orderNo)
-						uni.showToast({
-							title:'取消成功',
-							icon:'success'
-						})
-					}
-				})
-			}
-		},
-		onReady() {
-			
-		},
-		onLoad(options) {
-			this.info.orderNo = options.id
-		},
-		onShow() {
-			this.payDetails(this.info.orderNo)
-		},
-		created() {
-			// this.info = JSON.parse(uni.getStorageSync('order'))
-		}
-	}
+        },
+      });
+
+      // uni.requestPayment({
+      // 	"provider": "wxpay",
+      // 	"orderInfo": miniPayRequest,
+      // 	"appid": "wxbc64403830bb13c5", // 微信开放平台 - 应用 - AppId,注意和微信小程序、公众号 AppId 可能不一致
+      // 	"paySign": miniPayRequest.paySign,
+      // 	"nonceStr": miniPayRequest.nonceStr, // 随机字符串
+      // 	"package": miniPayRequest.package, // 固定值
+      // 	// "prepayid":  miniPayRequest.package, // 统一下单订单号
+      // 	"timeStamp": miniPayRequest.timeStamp, // 时间戳(单位:秒)
+      // 	"signType": miniPayRequest.signType, //签名算法
+      // 	success(msg) {
+      // 		console.log('msg', msg);
+      // 		queryPayOrder(that.info.orderNo).then(res1 => {
+      // 			if (res1.state == 'Success') {
+      // 				uni.hideLoading()
+      // 				uni.showToast({
+      // 					title: '支付成功',
+      // 					icon: 'success'
+      // 				})
+      // 				that.btnLoading = false
+      // 				that.payDetails(that.info.orderNo)
+      // 			}
+      // 		})
+      // 	},
+      // 	fail(e) {
+      // 		that.btnLoading = false
+      // 		uni.hideLoading()
+      // 		uni.showToast({
+      // 			title: '取消支付',
+      // 			icon: 'fail'
+      // 		})
+      // 		// 取消支付后,获取支付信息以备再次支付
+      // 		that.payDetails(that.info.orderNo)
+      // 		console.log('err', e,this);
+      // 	}
+      // })
+    },
+    // 取消退款申请
+    cancelReply() {
+      if (this.btnLoading) return;
+      this.btnLoading = true;
+      uni.showLoading({
+        title: "取消中",
+      });
+      unRefund({ id: this.info.goodsList[0].id }).then((res) => {
+        this.btnLoading = false;
+        uni.hideLoading();
+
+        if (res.state == "Success") {
+          this.payDetails(this.info.orderNo);
+          uni.showToast({
+            title: "取消成功",
+            icon: "success",
+          });
+        }
+      });
+    },
+  },
+  onReady() {},
+  onLoad(options) {
+    this.info.orderNo = options.id;
+  },
+  onShow() {
+    this.payDetails(this.info.orderNo);
+  },
+  created() {
+    // this.info = JSON.parse(uni.getStorageSync('order'))
+  },
+};
 </script>
 
 <style lang="scss">
-.order-detail{
-	background: #F9F9F9;
-	min-height: 100vh;
-	padding-bottom: 100rpx;
-	.status-box{
-		padding: 24rpx 24rpx 4rpx;
-		display: flex;
-		justify-content: space-between;
-		.text-box{
-			color: #181818;
-			.status{
-				font-weight: bold;
-				font-size: 32rpx;
-				display: flex;
-				.u-count-down__text{
-					color: #FF4D3A!important;
-				}
-			}
-			.notice{
-				font-size: 24rpx;
-				margin-top: 20rpx;
-			}
-		}
-	}
-	
-	.progress{
-		.progress-title{
-			font-weight: 600;
-			font-size: 32rpx;
-			color: #181818;
-		}
-		
-		.progress-desc{
-			font-weight: 300;
-			font-size: 24rpx;
-			color: #AAAAAA;
-			margin-top: 15rpx;
-		}
-	}
-	
-	.shop-box{
-		width: 690rpx;
-		// margin: 0 30rpx;
-		// padding: 24rpx 24rpx 30rpx;
-		background: #fff;
-		border-radius: 16rpx;
-		margin-top: -30rpx;
-		box-sizing: border-box;
-		.shop-name{
-			font-weight: 600;
-			font-size: 32rpx;
-			color: #181818;
-			width: 100%;
-			white-space: nowrap;
-			overflow: hidden;
-			text-overflow: ellipsis;
-		}
-		.address{
-			font-weight: 300;
-			font-size: 24rpx;
-			color: #AAAAAA;
-			margin-top: 20rpx;
-			width: 100%;
-			white-space: nowrap;
-			overflow: hidden;
-			text-overflow: ellipsis;
-		}
-	}
-	
-	.black{
-		color: #222222!important;
-	}
-	
-	.red{
-		color: red!important;
-	}
-	.fs28{
-		font-size: 28rpx!important;
-		font-weight: bold;
-	}
-	
-	.code-box{
-		display: flex;
-		align-items: center;
-		justify-content: space-between;
-		.left{
-			.title{
-				font-weight: 500;
-				font-size: 28rpx;
-				color: #222222;
-			}
-			.codeNum{
-				font-weight: 300;
-				font-size: 24rpx;
-				color: #AAAAAA;
-				margin-top: 15rpx;
-			}
-		}
-		.code-btn{
-			display: flex;
-			align-items: center;
-			font-weight: 300;
-			font-size: 24rpx;
-			color: #AAAAAA;
-			.jiantou{
-				width: 24rpx;
-				height: 24rpx;
-			}
-		}
-		
-	}
-	
-	.input-box{
-		margin: 20rpx 30rpx;
-		padding: 28rpx 24rpx;
-		background: #FFFFFF;
-		border-radius: 16rpx 16rpx 16rpx 16rpx;
-		display: flex;
-		align-items: center;
-		justify-content: space-between;
-		.label {
-			color: #222;
-			font-size: 28rpx;
-		}
-		
-		.value {
-			font-size: 28rpx;	
-			color: #AAAAAA;
-		}
-	}
-	
-	.content{
-		margin: 20rpx 30rpx;
-		padding: 28rpx 24rpx;
-		border-radius: 16rpx;
-		background: #fff;
-		.title{
-			font-weight: 600;
-			font-size: 28rpx;
-			color: #222222;
-		}
-		.item{
-			display: flex;
-			align-items: center;
-			justify-content: space-between;
-			margin-top: 28rpx;
-			.label{
-				color: #222222;
-				font-size: 28rpx;
-			}
-			.value{
-				color: #999999;
-				font-size: 28rpx;
-			}
-		}
-	}
-	.pay-btn{
-		background: $uni-color-primary;
-		width: 688rpx;
-		height: 80rpx;
-		line-height: 80rpx;
-		border-radius: 46rpx;
-		color: #fff;
-		margin-top: 50rpx;
-	}
-	.refund-box{
-		.refund-msg{
-			font-weight: 300;
-			font-size: 24rpx;
-			color: #222222;
-			margin-top: 15rpx;
-			line-height: 40rpx;
-		}
-	}
-	.apply-box{
-		position: relative;
-		.label{
-			font-weight: 600;
-			font-size: 28rpx;
-			color: #222222;
-		}
-		.value{
-			color: #999999;
-			font-size: 24rpx;
-			margin-top: 15rpx;
-		}
-		
-		.jiantou{
-			position: absolute;
-			top: 50%;
-			right: 24rpx;
-			transform: translateY(-50%);
-			width: 24rpx;
-			height: 24rpx;
-		}
-	}
-	.info{
-		.order-info{
-			display: flex;
-			.icon{
-				width: 164rpx;
-				height: 164rpx;
-				border-radius: 16rpx;
-				flex-shrink: 0;
-			}
-			.shop-info{
-				display: flex;
-				flex-direction: column;
-				justify-content: space-between;
-				padding-left: 24rpx;
-				flex: 1;
-				box-sizing: border-box;
-				.title{
-					color: #181818;
-					font-size: 28rpx;
-					width: 450rpx;
-					white-space: nowrap;
-					overflow: hidden;
-					text-overflow: ellipsis;
-				}
-				.price-box{
-					display: flex;
-					align-items: center;
-					justify-content: space-between;
-					.price{
-						color: #181818;
-						font-size: 32rpx;
-						font-weight: bold;
-					}
-					
-				}
-				.start-time,.goods-desc{
-					font-size: 24rpx;
-					color: #AAAAAA;
-					width: 450rpx;
-					white-space: nowrap;
-					overflow: hidden;
-					text-overflow: ellipsis;
-				}
-			}
-		}
-		
-		
-	}
-	
-	.wrap{
-		display: flex;
-		justify-content: center;
-		align-items: center;
-		height: 100vh;
-		overflow: hidden;
-	}
-	
+.order-detail {
+  background: #f9f9f9;
+  min-height: 100vh;
+  padding-bottom: 100rpx;
+  .status-box {
+    padding: 24rpx 24rpx 4rpx;
+    display: flex;
+    justify-content: space-between;
+    .text-box {
+      color: #181818;
+      .status {
+        font-weight: bold;
+        font-size: 32rpx;
+        display: flex;
+        .u-count-down__text {
+          color: #ff4d3a !important;
+        }
+      }
+      .notice {
+        font-size: 24rpx;
+        margin-top: 20rpx;
+      }
+    }
+  }
+
+  .progress {
+    .progress-title {
+      font-weight: 600;
+      font-size: 32rpx;
+      color: #181818;
+    }
+
+    .progress-desc {
+      font-weight: 300;
+      font-size: 24rpx;
+      color: #aaaaaa;
+      margin-top: 15rpx;
+    }
+  }
+
+  .shop-box {
+    width: 690rpx;
+    // margin: 0 30rpx;
+    // padding: 24rpx 24rpx 30rpx;
+    background: #fff;
+    border-radius: 16rpx;
+    margin-top: -30rpx;
+    box-sizing: border-box;
+    .shop-name {
+      font-weight: 600;
+      font-size: 32rpx;
+      color: #181818;
+      width: 100%;
+      white-space: nowrap;
+      overflow: hidden;
+      text-overflow: ellipsis;
+    }
+    .address {
+      font-weight: 300;
+      font-size: 24rpx;
+      color: #aaaaaa;
+      margin-top: 20rpx;
+      width: 100%;
+      white-space: nowrap;
+      overflow: hidden;
+      text-overflow: ellipsis;
+    }
+  }
+
+  .black {
+    color: #222222 !important;
+  }
+
+  .red {
+    color: red !important;
+  }
+  .fs28 {
+    font-size: 28rpx !important;
+    font-weight: bold;
+  }
+
+  .code-box {
+    display: flex;
+    align-items: center;
+    justify-content: space-between;
+    .left {
+      .title {
+        font-weight: 500;
+        font-size: 28rpx;
+        color: #222222;
+      }
+      .codeNum {
+        font-weight: 300;
+        font-size: 24rpx;
+        color: #aaaaaa;
+        margin-top: 15rpx;
+      }
+    }
+    .code-btn {
+      display: flex;
+      align-items: center;
+      font-weight: 300;
+      font-size: 24rpx;
+      color: #aaaaaa;
+      .jiantou {
+        width: 24rpx;
+        height: 24rpx;
+      }
+    }
+  }
+
+  .input-box {
+    margin: 20rpx 30rpx;
+    padding: 28rpx 24rpx;
+    background: #ffffff;
+    border-radius: 16rpx 16rpx 16rpx 16rpx;
+    display: flex;
+    align-items: center;
+    justify-content: space-between;
+    .label {
+      color: #222;
+      font-size: 28rpx;
+    }
+
+    .value {
+      font-size: 28rpx;
+      color: #aaaaaa;
+    }
+  }
+
+  .content {
+    margin: 20rpx 30rpx;
+    padding: 28rpx 24rpx;
+    border-radius: 16rpx;
+    background: #fff;
+    .title {
+      font-weight: 600;
+      font-size: 28rpx;
+      color: #222222;
+    }
+    .item {
+      display: flex;
+      align-items: center;
+      justify-content: space-between;
+      margin-top: 28rpx;
+      .label {
+        color: #222222;
+        font-size: 28rpx;
+      }
+      .value {
+        color: #999999;
+        font-size: 28rpx;
+      }
+    }
+  }
+  .pay-btn {
+    background: $uni-color-primary;
+    width: 688rpx;
+    height: 80rpx;
+    line-height: 80rpx;
+    border-radius: 46rpx;
+    color: #fff;
+    margin-top: 50rpx;
+  }
+  .refund-box {
+    .refund-msg {
+      font-weight: 300;
+      font-size: 24rpx;
+      color: #222222;
+      margin-top: 15rpx;
+      line-height: 40rpx;
+    }
+  }
+  .apply-box {
+    position: relative;
+    .label {
+      font-weight: 600;
+      font-size: 28rpx;
+      color: #222222;
+    }
+    .value {
+      color: #999999;
+      font-size: 24rpx;
+      margin-top: 15rpx;
+    }
+
+    .jiantou {
+      position: absolute;
+      top: 50%;
+      right: 24rpx;
+      transform: translateY(-50%);
+      width: 24rpx;
+      height: 24rpx;
+    }
+  }
+  .info {
+    .order-info {
+      display: flex;
+      .icon {
+        width: 164rpx;
+        height: 164rpx;
+        border-radius: 16rpx;
+        flex-shrink: 0;
+      }
+      .shop-info {
+        display: flex;
+        flex-direction: column;
+        justify-content: space-between;
+        padding-left: 24rpx;
+        flex: 1;
+        box-sizing: border-box;
+        .title {
+          color: #181818;
+          font-size: 28rpx;
+          width: 450rpx;
+          white-space: nowrap;
+          overflow: hidden;
+          text-overflow: ellipsis;
+        }
+        .price-box {
+          display: flex;
+          align-items: center;
+          justify-content: space-between;
+          .price {
+            color: #181818;
+            font-size: 32rpx;
+            font-weight: bold;
+          }
+        }
+        .start-time,
+        .goods-desc {
+          font-size: 24rpx;
+          color: #aaaaaa;
+          width: 450rpx;
+          white-space: nowrap;
+          overflow: hidden;
+          text-overflow: ellipsis;
+        }
+      }
+    }
+  }
+
+  .wrap {
+    display: flex;
+    justify-content: center;
+    align-items: center;
+    height: 100vh;
+    overflow: hidden;
+  }
 }
-</style>
+</style>

+ 26 - 3
pages/my/index.vue

@@ -10,7 +10,7 @@
           />
         </view>
 
-        <view @click="init" class="info">
+        <view @click="edit" class="info">
           <view class="name">
             <text>{{ userInfo.nickname || "用户" }}</text>
           </view>
@@ -22,7 +22,9 @@
 
       <view class="vip-card">
         <!-- <view class="vip-title">会员专属</view> -->
-        <view class="vip-btn">开通</view>
+        <view class="vip-btn" @click="jump('../../my/memberCenter/index')"
+          >开通</view
+        >
       </view>
     </view>
     <view
@@ -118,7 +120,7 @@ export default {
         {
           name: "vip",
           title: "会员码",
-          path:'../../my/memberCenter/index'
+          path: "../../my/memberCenter/index",
         },
         {
           name: "location",
@@ -131,6 +133,7 @@ export default {
         {
           name: "coupon",
           title: "我的优惠券",
+          path: "../../pay/coupon",
         },
       ],
     };
@@ -142,6 +145,26 @@ export default {
     this.init();
   },
   methods: {
+    edit() {
+      if (uni.getStorageSync("token")) {
+        uni.navigateTo({
+          url: "../../my/edit/edit",
+        });
+      } else {
+        uni.showModal({
+          title: "请登录",
+          confirmText: "去登录",
+          success(res) {
+            console.log(res);
+            if (res.confirm) {
+              uni.navigateTo({
+                url: "../../login/login/login?redirect=/pages/my/index",
+              });
+            }
+          },
+        });
+      }
+    },
     init() {
       if (uni.getStorageSync("token")) {
         this.getUserDetail();

+ 1 - 1
pay/coupon.vue

@@ -37,7 +37,7 @@
 		</zs-list>
 		
 		<view class="btn-box">
-			<button class="save-btn" type="default" @click="save">确定</button>
+			<!-- <button class="save-btn" type="default" @click="save">确定</button> -->
 		</view>
 		
 	</view>

+ 528 - 531
pay/pay.vue

@@ -1,7 +1,6 @@
 <template>
-	<view class="pay">
-
-		<!-- <view class="shop-info" v-if="!isVisual">
+  <view class="pay">
+    <!-- <view class="shop-info" v-if="!isVisual">
 			<view class="shop-name">
 				{{info.shopName}}
 			</view>
@@ -10,37 +9,37 @@
 			</view>
 		</view> -->
 
-		<view class="pay-info">
-			<view class="goods-info">
-				<image class="goods-img" :src="info.goodsPath" mode=""></image>
-				<view class="info">
-					<view class="goods-name">
-						{{info.goodsName}}
-					</view>
-					<view class="num">
-						{{info.goodsDescribe}}
-					</view>
-					<view class="price">
-						¥{{info.realPrice}}
-						<!-- ¥{{payInfo.originalPrice}} -->
-					</view>
-				</view>
-			</view>
-
-			
-
-			<view class="coupon">
-				<view class="label">
-					优惠券
-				</view>
-				<view class="choose-coupon" :class="[payInfo.offset?'':'none']" @click="choose">
-					<!-- {{payInfo.goodsCouponName}}-¥{{payInfo.offset}} -->
-					{{payInfo.offset?('-¥' + payInfo.offset):'暂无可用'}}
-					<image class="icon" src="../static/jiantou-icon.png" mode=""></image>
-				</view>
-			</view>
-
-			<!-- <view class="explain">
+    <view class="pay-info">
+      <view class="goods-info">
+        <image class="goods-img" :src="info.goodsPath" mode=""></image>
+        <view class="info">
+          <view class="goods-name">
+            {{ info.goodsName }}
+          </view>
+          <view class="num">
+            {{ info.goodsDescribe }}
+          </view>
+          <view class="price">
+            ¥{{ info.realPrice }}
+            <!-- ¥{{payInfo.originalPrice}} -->
+          </view>
+        </view>
+      </view>
+
+      <view class="coupon">
+        <view class="label"> 优惠券 </view>
+        <view
+          class="choose-coupon"
+          :class="[payInfo.offset ? '' : 'none']"
+          @click="choose"
+        >
+          <!-- {{payInfo.goodsCouponName}}-¥{{payInfo.offset}} -->
+          {{ payInfo.offset ? "-¥" + payInfo.offset : "暂无可用" }}
+          <image class="icon" src="../static/jiantou-icon.png" mode=""></image>
+        </view>
+      </view>
+
+      <!-- <view class="explain">
 				<view class="label">
 					优惠说明
 				</view>
@@ -50,506 +49,504 @@
 					</view>
 				</view>
 			</view> -->
-
-		</view>
-		
-		<view class="input-box" v-if="isVisual">
-			
-			<view class="label">
-				充值账号
-			</view>
-			<view class="value">
-				{{form.account}}
-			</view>
-		</view>
-
-
-		<view class="btn-box">
-			<view class="total-price">
-				<view class="label">
-					合计:
-				</view>
-				<view class="price">
-					¥ {{payInfo.price}}
-				</view>
-			</view>
-
-			<button class="btn" type="default" :loading="loading" @click="creat">提交订单</button>
-		</view>
-
-	</view>
+    </view>
+
+    <view class="input-box" v-if="isVisual">
+      <view class="label"> 充值账号 </view>
+      <view class="value">
+        {{ form.account }}
+      </view>
+    </view>
+
+    <view class="btn-box">
+      <view class="total-price">
+        <view class="label"> 合计: </view>
+        <view class="price"> ¥ {{ payInfo.price }} </view>
+      </view>
+
+      <button class="btn" type="default" :loading="loading" @click="creat">
+        提交订单
+      </button>
+    </view>
+  </view>
 </template>
 
 <script>
-	import {
-		calculate
-	} from '@/api/order.js';
-	import {
-		creat
-	} from '@/api/goods.js'
-	import {
-		creatPayOrder,
-		queryPayOrder,
-		payDetails
-	} from '@/api/payment.js'
-	import guid from '@/utils/guid.js'
-	export default {
-		data() {
-			return {
-				isVisual:false,//是否是虚拟商品
-				loading: false,
-				info: {},
-				realPay: {
-					goodsCouponName: '', //优惠券名
-					couponGoodsLogId: '', //优惠券id
-					goodsId: '', //商品id
-					price: '', //支付价格
-					offset: '', //实际抵扣值
-					discount: '', //优惠券值
-					condition: '', //优惠条件
-					originalPrice: '', //原价
-				},
-				form:{
-					account:''
-				},
-				rules: {
-					'account': {
-						type: 'string',
-						required: true,
-						message: '请输入充值账号',
-						trigger: ['blur', 'change']
-					},
-				},
-				query: {
-					"msgType": "wx.unifiedOrder",
-					"orderDesc": "测试",
-					"orderNo": "",
-					"subOpenId": "",
-					"userId": ""
-				},
-				// 支付信息
-				payData: {
-
-				}
-			}
-		},
-		computed: {
-			// 正式支付时的信息
-			payInfo() {
-				return {
-					goodsCouponName: this.realPay.goodsCouponName || '', //优惠券名
-					couponGoodsLogId: this.info.couponId, //优惠券id
-					goodsId: this.realPay.goodsId || this.info.goodsId, //商品id
-					price: this.realPay.price, //支付价格
-					offset: this.realPay.offset, //实际抵扣值
-					discount: this.realPay.discount || 0, //优惠券值
-					condition: this.realPay.condition || '', //优惠条件
-					originalPrice: this.realPay.originalPrice, //原价
-				}
-			}
-		},
-		methods: {
-			calculate(goodsId, shopId) {
-				return new Promise((resolve, reject) => {
-					// uni.request({
-					// 	url:'http://192.168.110.226:9002/goodsInfo/calculate',
-					// 	method:'post',
-					// 	data:{
-					// 		"goodsId": goodsId,
-					// 		// "shopId": shopId,
-					// 		"userId": JSON.parse(uni.getStorageSync('userInfo')).userId
-					// 	},
-					// 	success() {
-							
-					// 	}
-					// })
-					calculate({
-						// couponId: this.info.couponId,
-						"goodsId": goodsId,
-						"shopId": shopId,
-						"userId": JSON.parse(uni.getStorageSync('userInfo')).userId
-					}).then(res => {
-						if (res.state == 'Success') {
-							this.realPay = res.content
-						}
-					})
-				})
-			},
-			choose() {
-				let that = this
-				uni.navigateTo({
-					url: './coupon?couponId=' + this.realPay.couponGoodsLogId,
-					success: function(res) {
-						// 通过eventChannel向被打开页面传送数据
-						res.eventChannel.emit('pay', that.info)
-					}
-				})
-			},
-			//创建订单
-			creat() {
-				if (this.loading) return
-					
-					this.loading = true
-					uni.showLoading({
-						title: '支付中'
-					})
-					let that = this
-					if (!this.payData.timeStamp) {
-						// 处理扩展字段  暂时只有研学商品和视频会员  视频会员是字符串的JSON  研学是字符串
-						let extend 
-						try{
-							if(JSON.parse(this.info.extend)){
-								extend = this.info.extend
-							}
-						}catch(e){
-							extend = this.info.reservationTime || ''
-						}
-						extend.channel = "GZU" //贵大订单
-						creat({
-							discountId: (this.payInfo.couponGoodsLogId || this.payInfo.couponGoodsLogId == -1) ? [this
-								.payInfo.couponGoodsLogId
-							] : [],
-							extend,
-							goodsList: this.info.goodsId ? [this.info.goodsId] : [],
-							idempotent: guid(),
-							shopId: this.info.shopId
-						}).then(res => {
-							this.loading = false
-							if (res.state == 'Success') {
-								if (!this.payInfo.price) { //价格为0
-									uni.hideLoading()
-									uni.reLaunch({
-										url: '/my/order/index'
-									})
-								} else {
-									// 创建订单完成。
-
-									this.query.orderNo = res.content.orderNo
-									// this.query.subOpenId = JSON.parse(uni.getStorageSync('userInfo')).openId
-									// this.query.orderDesc = this.info.goodsName
-									// creatPayOrder(this.query).then(data => {
-									// 	that.payData = JSON.parse(data.content.miniPayRequest)
-									// 	if (data.content.miniPayRequest == null) return uni.hideLoading()
-									// 	uni.requestPayment({
-									// 		"provider": "wxpay",
-									// 		"orderInfo": that.payData,
-									// 		"appid": that.payData
-									// 		.appId, // 微信开放平台 - 应用 - AppId,注意和微信小程序、公众号 AppId 可能不一致
-									// 		"paySign": that.payData.paySign,
-									// 		"nonceStr": that.payData.nonceStr, // 随机字符串
-									// 		"package": that.payData.package, // 固定值
-									// 		// "prepayid":  that.payData.package, // 统一下单订单号 
-									// 		"timeStamp": that.payData.timeStamp, // 时间戳(单位:秒)
-									// 		"signType": that.payData.signType, //签名算法
-									// 		success(msg) {
-									// 			console.log('msg', msg, res);
-									// 			queryPayOrder(that.query.orderNo).then(res1 => {
-									// 				if (res1.state == 'Success') {
-									// 					uni.hideLoading()
-									// 					uni.reLaunch({
-									// 						url: '/my/order/index'
-									// 					})
-									// 				}
-									// 			})
-									// 		},
-									// 		fail(e) {
-									// 			console.log('err', e);
-									// 			that.loading = false
-									// 			uni.hideLoading()
-									// 			uni.showToast({
-									// 				title: '取消支付',
-									// 				icon: 'fail'
-									// 			})
-									// 			// 取消支付后,获取支付信息以备再次支付
-									// 			payDetails(that.query.orderNo).then(r => {
-									// 				if (r.state == 'Success') {
-									// 				that.payData = JSON.parse(r.content.miniPayRequest)
-									// 				}
-									// 			})
-									// 		}
-									// 	})
-									// })
-
-									// 跳转到支付页面
-									// /oreder/detail
-									uni.redirectTo({
-										url: '/my/order/detail?id='+res.content.orderNo,
-										success() {
-											that.loading = false
-											uni.hideLoading()
-										}
-									})
-
-								}
-
-							}
-						})
-					} else { // 取消支付后再次支付
-						uni.requestPayment({
-							"provider": "wxpay",
-							"orderInfo": that.payData,
-							"appid": that.payData.appId, // 微信开放平台 - 应用 - AppId,注意和微信小程序、公众号 AppId 可能不一致
-							"paySign": that.payData.paySign,
-							"nonceStr": that.payData.nonceStr, // 随机字符串
-							"package": that.payData.package, // 固定值
-							// "prepayid":  that.payData.package, // 统一下单订单号 
-							"timeStamp": that.payData.timeStamp, // 时间戳(单位:秒)
-							"signType": that.payData.signType, //签名算法
-							success(msg) {
-								console.log('msg', msg);
-								queryPayOrder(that.query.orderNo).then(res1 => {
-									if (res1.state == 'Success') {
-										uni.hideLoading()
-										uni.reLaunch({
-											url: '/my/order/index'
-										})
-									}
-								})
-							},
-							fail(e) {
-								that.loading = false
-								uni.hideLoading()
-								uni.showToast({
-									title: '取消支付',
-									icon: 'fail'
-								})
-								// 取消支付后,获取支付信息以备再次支付
-								payDetails(that.query.orderNo).then(r => {
-									if (r.state == 'Success') {
-										that.payData = JSON.parse(r.content.miniPayRequest)
-									}
-								})
-								console.log('err', e);
-							}
-						})
-					}
-			}
-
-		},
-		onReady() {
-			
-		},
-		onLoad() {
-			let userInfo = JSON.parse(uni.getStorageSync('userInfo'))
-			this.query.userId = userInfo.userId
-			let that = this
-			const eventChannel = this.getOpenerEventChannel();
-			eventChannel.on('pay', function(data) {
-				that.info = data
-				try{
-					let extend = JSON.parse(that.info.extend)
-					if(extend.account){
-						that.isVisual = true
-						that.form.account = extend.account
-					}
-				}catch(e){
-					//TODO handle the exception
-				}
-				console.log('data', data);
-				that.calculate(that.info.goodsId, that.info.shopId)
-			})
-		}
-	}
+import { calculate } from "@/api/order.js";
+import { creat } from "@/api/goods.js";
+import { creatPayOrder, queryPayOrder, payDetails } from "@/api/payment.js";
+import guid from "@/utils/guid.js";
+export default {
+  data() {
+    return {
+      isVisual: false, //是否是虚拟商品
+      loading: false,
+      info: {},
+      realPay: {
+        goodsCouponName: "", //优惠券名
+        couponGoodsLogId: "", //优惠券id
+        goodsId: "", //商品id
+        price: "", //支付价格
+        offset: "", //实际抵扣值
+        discount: "", //优惠券值
+        condition: "", //优惠条件
+        originalPrice: "", //原价
+      },
+      form: {
+        account: "",
+      },
+      rules: {
+        account: {
+          type: "string",
+          required: true,
+          message: "请输入充值账号",
+          trigger: ["blur", "change"],
+        },
+      },
+      query: {
+        msgType: "wx.unifiedOrder",
+        orderDesc: "测试",
+        orderNo: "",
+        subOpenId: "",
+        userId: "",
+      },
+      // 支付信息
+      payData: {},
+    };
+  },
+  computed: {
+    // 正式支付时的信息
+    payInfo() {
+      return {
+        goodsCouponName: this.realPay.goodsCouponName || "", //优惠券名
+        couponGoodsLogId: this.info.couponId, //优惠券id
+        goodsId: this.realPay.goodsId || this.info.goodsId, //商品id
+        price: this.realPay.price, //支付价格
+        offset: this.realPay.offset, //实际抵扣值
+        discount: this.realPay.discount || 0, //优惠券值
+        condition: this.realPay.condition || "", //优惠条件
+        originalPrice: this.realPay.originalPrice, //原价
+      };
+    },
+  },
+  methods: {
+    calculate(goodsId, shopId) {
+      return new Promise((resolve, reject) => {
+        // uni.request({
+        // 	url:'http://192.168.110.226:9002/goodsInfo/calculate',
+        // 	method:'post',
+        // 	data:{
+        // 		"goodsId": goodsId,
+        // 		// "shopId": shopId,
+        // 		"userId": JSON.parse(uni.getStorageSync('userInfo')).userId
+        // 	},
+        // 	success() {
+
+        // 	}
+        // })
+        calculate({
+          // couponId: this.info.couponId,
+          goodsId: goodsId,
+          shopId: shopId,
+          userId: JSON.parse(uni.getStorageSync("userInfo")).userId,
+        }).then((res) => {
+          if (res.state == "Success") {
+            this.realPay = res.content;
+          }
+        });
+      });
+    },
+    choose() {
+      let that = this;
+      uni.navigateTo({
+        url: "./coupon?couponId=" + this.realPay.couponGoodsLogId,
+        success: function (res) {
+          // 通过eventChannel向被打开页面传送数据
+          res.eventChannel.emit("pay", that.info);
+        },
+      });
+    },
+    //创建订单
+    creat() {
+      if (this.loading) return;
+
+      this.loading = true;
+      uni.showLoading({
+        title: "订单创建中",
+      });
+      let that = this;
+      if (!this.payData.timeStamp) {
+        // 处理扩展字段  暂时只有研学商品和视频会员  视频会员是字符串的JSON  研学是字符串
+        let extend = {};
+        if (!this.info.extend) {
+          this.info.extend = JSON.stringify({ channel: "GZU" });
+        }
+        console.log("this.info.extend", this.info.extend);
+        try {
+          if (JSON.parse(this.info.extend)) {
+            extend = this.info.extend;
+          }
+        } catch (e) {
+          console.log("e", e);
+          extend = this.info.reservationTime || "";
+        }
+        creat({
+          discountId:
+            this.payInfo.couponGoodsLogId || this.payInfo.couponGoodsLogId == -1
+              ? [this.payInfo.couponGoodsLogId]
+              : [],
+          extend,
+          goodsList: this.info.goodsId ? [this.info.goodsId] : [],
+          idempotent: guid(),
+          shopId: this.info.shopId,
+        }).then((res) => {
+          this.loading = false;
+          if (res.state == "Success") {
+            if (!this.payInfo.price) {
+              //价格为0
+              uni.hideLoading();
+              uni.reLaunch({
+                url: "/my/order/index",
+              });
+            } else {
+              // 创建订单完成。
+
+              this.query.orderNo = res.content.orderNo;
+              this.query.subOpenId = JSON.parse(
+                uni.getStorageSync("userInfo")
+              ).openId;
+              this.query.orderDesc = this.info.goodsName;
+
+              creatPayOrder({
+                ...this.query,
+                subAppId: "wx3be1d6d84d46cdf7",
+              }).then((data) => {
+                that.payData = JSON.parse(data.content.miniPayRequest);
+
+                if (data.content.miniPayRequest == null)
+                  return uni.hideLoading();
+
+                uni.redirectTo({
+                  url: "/my/order/detail?id=" + res.content.orderNo,
+                  success() {
+                    that.loading = false;
+                    uni.hideLoading();
+                  },
+                });
+
+                // uni.requestPayment({
+                // 	"provider": "wxpay",
+                // 	"orderInfo": that.payData,
+                // 	"appid": "wxbc64403830bb13c5", // 微信开放平台 - 应用 - AppId,注意和微信小程序、公众号 AppId 可能不一致
+                // 	"paySign": that.payData.paySign,
+                // 	"nonceStr": that.payData.nonceStr, // 随机字符串
+                // 	"package": that.payData.package, // 固定值
+                // 	// "prepayid":  that.payData.package, // 统一下单订单号
+                // 	"timeStamp": that.payData.timeStamp, // 时间戳(单位:秒)
+                // 	"signType": that.payData.signType, //签名算法
+                // 	success(msg) {
+                // 		console.log('msg', msg, res);
+                // 		queryPayOrder(that.query.orderNo).then(res1 => {
+                // 			if (res1.state == 'Success') {
+                // 				uni.hideLoading()
+                // 				uni.reLaunch({
+                // 					url: '/my/order/index'
+                // 				})
+                // 			}
+                // 		})
+                // 	},
+                // 	fail(e) {
+                // 		console.log('err', e);
+                // 		that.loading = false
+                // 		uni.hideLoading()
+                // 		uni.showToast({
+                // 			title: '取消支付',
+                // 			icon: 'fail'
+                // 		})
+                // 		// 取消支付后,获取支付信息以备再次支付
+                // 		payDetails(that.query.orderNo).then(r => {
+                // 			if (r.state == 'Success') {
+                // 			that.payData = JSON.parse(r.content.miniPayRequest)
+                // 			}
+                // 		})
+                // 	}
+                // })
+              });
+
+              // 跳转到支付页面
+              // /oreder/detail
+              // uni.redirectTo({
+              //   url: "/my/order/detail?id=" + res.content.orderNo,
+              //   success() {
+              //     that.loading = false;
+              //     uni.hideLoading();
+              //   },
+              // });
+            }
+          }
+        });
+      } else {
+        // 取消支付后再次支付
+        uni.requestPayment({
+          provider: "wxpay",
+          orderInfo: that.payData,
+          appid: that.payData.appId, // 微信开放平台 - 应用 - AppId,注意和微信小程序、公众号 AppId 可能不一致
+          paySign: that.payData.paySign,
+          nonceStr: that.payData.nonceStr, // 随机字符串
+          package: that.payData.package, // 固定值
+          // "prepayid":  that.payData.package, // 统一下单订单号
+          timeStamp: that.payData.timeStamp, // 时间戳(单位:秒)
+          signType: that.payData.signType, //签名算法
+          success(msg) {
+            console.log("msg", msg);
+            queryPayOrder(that.query.orderNo).then((res1) => {
+              if (res1.state == "Success") {
+                uni.hideLoading();
+                uni.reLaunch({
+                  url: "/my/order/index",
+                });
+              }
+            });
+          },
+          fail(e) {
+            that.loading = false;
+            uni.hideLoading();
+            uni.showToast({
+              title: "取消支付",
+              icon: "fail",
+            });
+            // 取消支付后,获取支付信息以备再次支付
+            payDetails(that.query.orderNo).then((r) => {
+              if (r.state == "Success") {
+                that.payData = JSON.parse(r.content.miniPayRequest);
+              }
+            });
+            console.log("err", e);
+          },
+        });
+      }
+    },
+  },
+  onReady() {},
+  onLoad() {
+    let userInfo = JSON.parse(uni.getStorageSync("userInfo"));
+    this.query.userId = userInfo.userId;
+    let that = this;
+    const eventChannel = this.getOpenerEventChannel();
+    eventChannel.on("pay", function (data) {
+      that.info = data;
+      try {
+        let extend = JSON.parse(that.info.extend);
+        if (extend.account) {
+          that.isVisual = true;
+          that.form.account = extend.account;
+        }
+      } catch (e) {
+        //TODO handle the exception
+      }
+      console.log("data", data);
+      that.calculate(that.info.goodsId, that.info.shopId);
+    });
+  },
+};
 </script>
 
 <style lang="scss">
-	.pay {
-		background: #F9F9F9;
-		min-height: 100vh;
-		padding-top: 20rpx;
-
-		.shop-info {
-			margin: 0 30rpx 20rpx;
-			width: 690rpx;
-			padding: 24rpx;
-			box-sizing: border-box;
-			background: #FFFFFF;
-			border-radius: 16rpx 16rpx 16rpx 16rpx;
-
-			.shop-name {
-				color: #181818;
-				font-size: 32rpx;
-			}
-
-			.address {
-				color: #999999;
-				font-size: 24rpx;
-				margin-top: 12rpx;
-			}
-		}
-
-		.pay-info {
-			margin: 0 30rpx;
-			background: #FFFFFF;
-			border-radius: 16rpx 16rpx 16rpx 16rpx;
-			padding: 28rpx 24rpx;
-
-			.goods-info {
-				display: flex;
-				margin-bottom: 30rpx;
-
-				.goods-img {
-					width: 164rpx;
-					height: 164rpx;
-					border-radius: 16rpx;
-				}
-
-				.info {
-					margin-left: 28rpx;
-					flex: 1;
-
-					.goods-name {
-						font-weight: bold;
-						color: #181818;
-						font-size: 32rpx;
-						width: 100%;
-						word-break: break-all;
-						text-overflow: ellipsis;
-						overflow: hidden;
-						display: -webkit-box;
-						-webkit-box-orient: vertical;
-						-webkit-line-clamp: 2;
-						/* 这里是超出几行省略 */
-					}
-
-					.num {
-						color: #999999;
-						font-size: 24rpx;
-						margin-top: 16rpx;
-					}
-
-					.price {
-						font-weight: bold;
-						color: #181818;
-						font-size: 32rpx;
-						margin-top: 26rpx;
-					}
-				}
-			}
-			
-			
-
-			.coupon {
-				display: flex;
-				align-items: center;
-				justify-content: space-between;
-				border-bottom: 2rpx dashed #f3f3f3;
-				padding: 28rpx 0;
-
-				.label {
-					color: #222222;
-					font-size: 28rpx;
-				}
-				
-				.choose-coupon.none{
-					color: #AAAAAA;
-				}
-				.choose-coupon {
-					color: #FF4848;
-					font-size: 28rpx;
-					display: flex;
-					align-items: center;
-
-					.icon {
-						width: 28rpx;
-						height: 28rpx;
-						display: block;
-						margin-left: 10rpx;
-					}
-				}
-			}
-
-			.explain {
-				display: flex;
-				align-items: center;
-				justify-content: space-between;
-				padding-top: 28rpx;
-
-				.label {
-					color: #AAAAAA;
-					font-size: 28rpx;
-				}
-
-				.right {
-					display: flex;
-					align-items: center;
-					font-size: 24rpx;
-
-					.red {
-						font-weight: 500;
-						color: #FF4848;
-						margin: 0 10rpx;
-					}
-
-					.fs28 {
-						font-size: 28rpx !important;
-					}
-				}
-			}
-		}
-		
-		.input-box{
-			margin: 20rpx 30rpx;
-			padding: 28rpx 24rpx;
-			background: #FFFFFF;
-			border-radius: 16rpx 16rpx 16rpx 16rpx;
-			display: flex;
-			align-items: center;
-			justify-content: space-between;
-			.label {
-				color: #222;
-				font-size: 28rpx;
-			}
-			
-			.value {
-				font-size: 28rpx;	
-				color: #AAAAAA;
-			}
-		}
-
-		.btn-box {
-			position: fixed;
-			bottom: 0%;
-			left: 0%;
-			width: 100%;
-			height: 98rpx;
-			display: flex;
-			align-items: center;
-			justify-content: space-between;
-			box-sizing: border-box;
-			padding: 0 30rpx;
-			border-top: 1rpx solid #EEEEEE;
-
-			.total-price {
-				display: flex;
-				align-items: center;
-
-				.label {
-					color: #181818;
-					font-size: 28rpx;
-				}
-
-				.price {
-					font-size: 36rpx;
-					font-weight: 800;
-					color: #FF4848;
-					margin-left: 10rpx;
-				}
-			}
-
-			.btn {
-				width: 280rpx;
-				height: 80rpx;
-				line-height: 80rpx;
-				text-align: center;
-				background: $uni-color-primary;
-				box-shadow: inset 0rpx 6rpx 12rpx 2rpx rgba(255, 255, 255, 0.16);
-				border-radius: 46rpx 46rpx 46rpx 46rpx;
-				font-weight: 800;
-				color: #FFFFFF;
-				font-size: 28rpx;
-				margin: 0;
-			}
-		}
-	}
-</style>
+.pay {
+  background: #f9f9f9;
+  min-height: 100vh;
+  padding-top: 20rpx;
+
+  .shop-info {
+    margin: 0 30rpx 20rpx;
+    width: 690rpx;
+    padding: 24rpx;
+    box-sizing: border-box;
+    background: #ffffff;
+    border-radius: 16rpx 16rpx 16rpx 16rpx;
+
+    .shop-name {
+      color: #181818;
+      font-size: 32rpx;
+    }
+
+    .address {
+      color: #999999;
+      font-size: 24rpx;
+      margin-top: 12rpx;
+    }
+  }
+
+  .pay-info {
+    margin: 0 30rpx;
+    background: #ffffff;
+    border-radius: 16rpx 16rpx 16rpx 16rpx;
+    padding: 28rpx 24rpx;
+
+    .goods-info {
+      display: flex;
+      margin-bottom: 30rpx;
+
+      .goods-img {
+        width: 164rpx;
+        height: 164rpx;
+        border-radius: 16rpx;
+      }
+
+      .info {
+        margin-left: 28rpx;
+        flex: 1;
+
+        .goods-name {
+          font-weight: bold;
+          color: #181818;
+          font-size: 32rpx;
+          width: 100%;
+          word-break: break-all;
+          text-overflow: ellipsis;
+          overflow: hidden;
+          display: -webkit-box;
+          -webkit-box-orient: vertical;
+          -webkit-line-clamp: 2;
+          /* 这里是超出几行省略 */
+        }
+
+        .num {
+          color: #999999;
+          font-size: 24rpx;
+          margin-top: 16rpx;
+        }
+
+        .price {
+          font-weight: bold;
+          color: #181818;
+          font-size: 32rpx;
+          margin-top: 26rpx;
+        }
+      }
+    }
+
+    .coupon {
+      display: flex;
+      align-items: center;
+      justify-content: space-between;
+      border-bottom: 2rpx dashed #f3f3f3;
+      padding: 28rpx 0;
+
+      .label {
+        color: #222222;
+        font-size: 28rpx;
+      }
+
+      .choose-coupon.none {
+        color: #aaaaaa;
+      }
+      .choose-coupon {
+        color: #ff4848;
+        font-size: 28rpx;
+        display: flex;
+        align-items: center;
+
+        .icon {
+          width: 28rpx;
+          height: 28rpx;
+          display: block;
+          margin-left: 10rpx;
+        }
+      }
+    }
+
+    .explain {
+      display: flex;
+      align-items: center;
+      justify-content: space-between;
+      padding-top: 28rpx;
+
+      .label {
+        color: #aaaaaa;
+        font-size: 28rpx;
+      }
+
+      .right {
+        display: flex;
+        align-items: center;
+        font-size: 24rpx;
+
+        .red {
+          font-weight: 500;
+          color: #ff4848;
+          margin: 0 10rpx;
+        }
+
+        .fs28 {
+          font-size: 28rpx !important;
+        }
+      }
+    }
+  }
+
+  .input-box {
+    margin: 20rpx 30rpx;
+    padding: 28rpx 24rpx;
+    background: #ffffff;
+    border-radius: 16rpx 16rpx 16rpx 16rpx;
+    display: flex;
+    align-items: center;
+    justify-content: space-between;
+    .label {
+      color: #222;
+      font-size: 28rpx;
+    }
+
+    .value {
+      font-size: 28rpx;
+      color: #aaaaaa;
+    }
+  }
+
+  .btn-box {
+    position: fixed;
+    bottom: 0%;
+    left: 0%;
+    width: 100%;
+    height: 98rpx;
+    display: flex;
+    align-items: center;
+    justify-content: space-between;
+    box-sizing: border-box;
+    padding: 0 30rpx;
+    border-top: 1rpx solid #eeeeee;
+
+    .total-price {
+      display: flex;
+      align-items: center;
+
+      .label {
+        color: #181818;
+        font-size: 28rpx;
+      }
+
+      .price {
+        font-size: 36rpx;
+        font-weight: 800;
+        color: #ff4848;
+        margin-left: 10rpx;
+      }
+    }
+
+    .btn {
+      width: 280rpx;
+      height: 80rpx;
+      line-height: 80rpx;
+      text-align: center;
+      background: $uni-color-primary;
+      box-shadow: inset 0rpx 6rpx 12rpx 2rpx rgba(255, 255, 255, 0.16);
+      border-radius: 46rpx 46rpx 46rpx 46rpx;
+      font-weight: 800;
+      color: #ffffff;
+      font-size: 28rpx;
+      margin: 0;
+    }
+  }
+}
+</style>

+ 1 - 1
uni_modules/uview-ui/components/u-tabbar-item/u-tabbar-item.vue

@@ -117,7 +117,7 @@
 		@include flex(column);
 		align-items: center;
 		justify-content: center;
-		flex: 1;
+		// flex: 1;
 		
 		&__icon {
 			@include flex;

+ 1 - 0
uni_modules/uview-ui/components/u-tabbar/u-tabbar.vue

@@ -127,6 +127,7 @@
 			
 			&__item-wrapper {
 				height: 50px;
+				justify-content: center;
 				@include flex(row);
 			}
 		}