|
@@ -0,0 +1,375 @@
|
|
|
|
|
+<template>
|
|
|
|
|
+ <div class="app-content">
|
|
|
|
|
+ <div class="page-top">
|
|
|
|
|
+ <div class="page-top-img">
|
|
|
|
|
+ <image mode="widthFix" :src="`${constant.imgUrl}/retail/order/bg.png`" alt />
|
|
|
|
|
+ </div>
|
|
|
|
|
+ <div class="page-top-det">
|
|
|
|
|
+ <div>
|
|
|
|
|
+ <div class="page-status">{{ getStatusName }}</div>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ <div class="page-status-img">
|
|
|
|
|
+ <img :src="statusImg" alt />
|
|
|
|
|
+ </div>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ </div>
|
|
|
|
|
+
|
|
|
|
|
+ <div class="page-det">
|
|
|
|
|
+ <div class="module-com">
|
|
|
|
|
+ <div class="module-tit">充值信息</div>
|
|
|
|
|
+ <div class="module-det">
|
|
|
|
|
+ <div class="recharge-info">
|
|
|
|
|
+ <div class="amount-display">
|
|
|
|
|
+ <span class="currency">¥</span>
|
|
|
|
|
+ <span class="amount">{{ data.amount ? parseFloat(data.amount).toFixed(2) : '0.00' }}</span>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ <div class="recharge-status">
|
|
|
|
|
+ <span class="status-tag" :class="getStatusClass">{{ getStatusName }}</span>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ </div>
|
|
|
|
|
+
|
|
|
|
|
+ <div class="module-com order-msg">
|
|
|
|
|
+ <div class="module-tit">充值详情</div>
|
|
|
|
|
+ <div class="module-det">
|
|
|
|
|
+ <div class="order-msg-blo">
|
|
|
|
|
+ <div class="msg-list">
|
|
|
|
|
+ <div class="label">订单号</div>
|
|
|
|
|
+ <div class="value">{{ data.orderSn }}</div>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ <div class="msg-list">
|
|
|
|
|
+ <div class="label">充值时间</div>
|
|
|
|
|
+ <div class="value">{{ data.createTime ? data.createTime.substring(5, 16) : '' }}</div>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ <div class="msg-list" v-if="data.payTime && data.payTime != '0000-00-00 00:00:00'">
|
|
|
|
|
+ <div class="label">支付时间</div>
|
|
|
|
|
+ <div class="value">{{ data.payTime ? data.payTime.substring(5, 16) : '' }}</div>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ <div class="msg-list">
|
|
|
|
|
+ <div class="label">支付方式</div>
|
|
|
|
|
+ <div class="value">{{ getPayMethodName }}</div>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ <div class="msg-list" v-if="data.remark">
|
|
|
|
|
+ <div class="label">备注</div>
|
|
|
|
|
+ <div class="value">{{ data.remark }}</div>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ </div>
|
|
|
|
|
+
|
|
|
|
|
+ <div class="order-msg-blo" v-if="data.status == '3'">
|
|
|
|
|
+ <div class="msg-list">
|
|
|
|
|
+ <div class="label">失败原因</div>
|
|
|
|
|
+ <div class="value error-text">{{ data.failReason || '未知原因' }}</div>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ </div>
|
|
|
|
|
+
|
|
|
|
|
+ <div class="page-btn app-footer" v-if="data.status == '1'">
|
|
|
|
|
+ <div class="flex-center">
|
|
|
|
|
+ <span>充值金额</span>
|
|
|
|
|
+ <span class="app-price">
|
|
|
|
|
+ <span>¥</span>
|
|
|
|
|
+ <span class="app-size-40">{{ data.amount ? parseFloat(data.amount).toFixed(2) : '0.00' }}</span>
|
|
|
|
|
+ </span>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ <button class="button-com red" @click="retryRecharge">重新充值</button>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ </div>
|
|
|
|
|
+</template>
|
|
|
|
|
+
|
|
|
|
|
+<script>
|
|
|
|
|
+import { getDetail } from "@/api/recharge";
|
|
|
|
|
+
|
|
|
|
|
+export default {
|
|
|
|
|
+ name: "recharge-detail",
|
|
|
|
|
+ data() {
|
|
|
|
|
+ return {
|
|
|
|
|
+ constant: this.$constant,
|
|
|
|
|
+ data: {}
|
|
|
|
|
+ };
|
|
|
|
|
+ },
|
|
|
|
|
+ computed: {
|
|
|
|
|
+ getStatusName() {
|
|
|
|
|
+ let statusName = "";
|
|
|
|
|
+ switch (this.data.status) {
|
|
|
|
|
+ case '1':
|
|
|
|
|
+ statusName = "充值中";
|
|
|
|
|
+ break;
|
|
|
|
|
+ case '2':
|
|
|
|
|
+ statusName = "充值成功";
|
|
|
|
|
+ break;
|
|
|
|
|
+ case '3':
|
|
|
|
|
+ statusName = "充值失败";
|
|
|
|
|
+ break;
|
|
|
|
|
+ default:
|
|
|
|
|
+ statusName = "未知状态";
|
|
|
|
|
+ break;
|
|
|
|
|
+ }
|
|
|
|
|
+ return statusName;
|
|
|
|
|
+ },
|
|
|
|
|
+ getStatusClass() {
|
|
|
|
|
+ let statusClass = "";
|
|
|
|
|
+ switch (this.data.status) {
|
|
|
|
|
+ case '1':
|
|
|
|
|
+ statusClass = "status-processing";
|
|
|
|
|
+ break;
|
|
|
|
|
+ case '2':
|
|
|
|
|
+ statusClass = "status-success";
|
|
|
|
|
+ break;
|
|
|
|
|
+ case '3':
|
|
|
|
|
+ statusClass = "status-failed";
|
|
|
|
|
+ break;
|
|
|
|
|
+ default:
|
|
|
|
|
+ statusClass = "status-default";
|
|
|
|
|
+ break;
|
|
|
|
|
+ }
|
|
|
|
|
+ return statusClass;
|
|
|
|
|
+ },
|
|
|
|
|
+ getPayMethodName() {
|
|
|
|
|
+ let methodName = "";
|
|
|
|
|
+ switch (this.data.payMethod) {
|
|
|
|
|
+ case '1':
|
|
|
|
|
+ methodName = "微信支付";
|
|
|
|
|
+ break;
|
|
|
|
|
+ case '2':
|
|
|
|
|
+ methodName = "支付宝";
|
|
|
|
|
+ break;
|
|
|
|
|
+ case '3':
|
|
|
|
|
+ methodName = "余额支付";
|
|
|
|
|
+ break;
|
|
|
|
|
+ default:
|
|
|
|
|
+ methodName = "未知方式";
|
|
|
|
|
+ break;
|
|
|
|
|
+ }
|
|
|
|
|
+ return methodName;
|
|
|
|
|
+ },
|
|
|
|
|
+ statusImg() {
|
|
|
|
|
+ let img = "";
|
|
|
|
|
+ if (this.data.status == '1') {
|
|
|
|
|
+ img = `${this.$constant.imgUrl}/retail/order/wait-pay.png`;
|
|
|
|
|
+ } else if (this.data.status == '2') {
|
|
|
|
|
+ img = `${this.$constant.imgUrl}/retail/order/order-confirm.png`;
|
|
|
|
|
+ } else if (this.data.status == '3') {
|
|
|
|
|
+ img = `${this.$constant.imgUrl}/retail/order/order-cancel.png`;
|
|
|
|
|
+ }
|
|
|
|
|
+ return img;
|
|
|
|
|
+ }
|
|
|
|
|
+ },
|
|
|
|
|
+ onLoad() {
|
|
|
|
|
+ this.init();
|
|
|
|
|
+ },
|
|
|
|
|
+ methods: {
|
|
|
|
|
+ init() {
|
|
|
|
|
+ this.getDetail();
|
|
|
|
|
+ },
|
|
|
|
|
+ getDetail() {
|
|
|
|
|
+ let form = {};
|
|
|
|
|
+ if (this.option.id) {
|
|
|
|
|
+ form.id = this.option.id;
|
|
|
|
|
+ } else if (this.option.orderSn) {
|
|
|
|
|
+ form.orderSn = this.option.orderSn;
|
|
|
|
|
+ }
|
|
|
|
|
+ return getDetail(form).then(res => {
|
|
|
|
|
+ this.data = res.data;
|
|
|
|
|
+ });
|
|
|
|
|
+ },
|
|
|
|
|
+ retryRecharge() {
|
|
|
|
|
+ uni.navigateTo({
|
|
|
|
|
+ url: `/pages/recharge/index?amount=${this.data.amount}&orderSn=${this.data.orderSn}`
|
|
|
|
|
+ });
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+};
|
|
|
|
|
+</script>
|
|
|
|
|
+
|
|
|
|
|
+<style lang="scss" scoped>
|
|
|
|
|
+.app-content {
|
|
|
|
|
+ .page-top {
|
|
|
|
|
+ position: relative;
|
|
|
|
|
+ height: 300upx;
|
|
|
|
|
+
|
|
|
|
|
+ .page-top-img {
|
|
|
|
|
+ width: 100%;
|
|
|
|
|
+ height: 100%;
|
|
|
|
|
+
|
|
|
|
|
+ image {
|
|
|
|
|
+ width: 100%;
|
|
|
|
|
+ height: 100%;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ .page-top-det {
|
|
|
|
|
+ position: absolute;
|
|
|
|
|
+ top: 50%;
|
|
|
|
|
+ left: 50%;
|
|
|
|
|
+ transform: translate(-50%, -50%);
|
|
|
|
|
+ text-align: center;
|
|
|
|
|
+ color: #fff;
|
|
|
|
|
+
|
|
|
|
|
+ .page-status {
|
|
|
|
|
+ font-size: 36upx;
|
|
|
|
|
+ font-weight: bold;
|
|
|
|
|
+ margin-bottom: 20upx;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ .page-status-img {
|
|
|
|
|
+ img {
|
|
|
|
|
+ width: 80upx;
|
|
|
|
|
+ height: 80upx;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ .page-det {
|
|
|
|
|
+ padding: 30upx;
|
|
|
|
|
+
|
|
|
|
|
+ .module-com {
|
|
|
|
|
+ background: #fff;
|
|
|
|
|
+ border-radius: 20upx;
|
|
|
|
|
+ margin-bottom: 30upx;
|
|
|
|
|
+ overflow: hidden;
|
|
|
|
|
+
|
|
|
|
|
+ .module-tit {
|
|
|
|
|
+ padding: 30upx;
|
|
|
|
|
+ font-size: 32upx;
|
|
|
|
|
+ font-weight: bold;
|
|
|
|
|
+ border-bottom: 1px solid #f0f0f0;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ .module-det {
|
|
|
|
|
+ padding: 30upx;
|
|
|
|
|
+
|
|
|
|
|
+ .recharge-info {
|
|
|
|
|
+ text-align: center;
|
|
|
|
|
+
|
|
|
|
|
+ .amount-display {
|
|
|
|
|
+ margin-bottom: 30upx;
|
|
|
|
|
+
|
|
|
|
|
+ .currency {
|
|
|
|
|
+ font-size: 40upx;
|
|
|
|
|
+ color: #ff6b35;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ .amount {
|
|
|
|
|
+ font-size: 60upx;
|
|
|
|
|
+ font-weight: bold;
|
|
|
|
|
+ color: #ff6b35;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ .recharge-status {
|
|
|
|
|
+ .status-tag {
|
|
|
|
|
+ padding: 10upx 20upx;
|
|
|
|
|
+ border-radius: 30upx;
|
|
|
|
|
+ font-size: 24upx;
|
|
|
|
|
+
|
|
|
|
|
+ &.status-processing {
|
|
|
|
|
+ color: #ff9500;
|
|
|
|
|
+ border: 1px solid #ff9500;
|
|
|
|
|
+ background-color: #fff7e6;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ &.status-success {
|
|
|
|
|
+ color: #52c41a;
|
|
|
|
|
+ border: 1px solid #52c41a;
|
|
|
|
|
+ background-color: #f6ffed;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ &.status-failed {
|
|
|
|
|
+ color: #ff4d4f;
|
|
|
|
|
+ border: 1px solid #ff4d4f;
|
|
|
|
|
+ background-color: #fff2f0;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ &.status-default {
|
|
|
|
|
+ color: #999999;
|
|
|
|
|
+ border: 1px solid #999999;
|
|
|
|
|
+ background-color: #f5f5f5;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ .order-msg-blo {
|
|
|
|
|
+ .msg-list {
|
|
|
|
|
+ display: flex;
|
|
|
|
|
+ justify-content: space-between;
|
|
|
|
|
+ align-items: center;
|
|
|
|
|
+ padding: 20upx 0;
|
|
|
|
|
+ border-bottom: 1px solid #f0f0f0;
|
|
|
|
|
+
|
|
|
|
|
+ &:last-child {
|
|
|
|
|
+ border-bottom: none;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ .label {
|
|
|
|
|
+ color: #999;
|
|
|
|
|
+ font-size: 28upx;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ .value {
|
|
|
|
|
+ color: #333;
|
|
|
|
|
+ font-size: 28upx;
|
|
|
|
|
+ text-align: right;
|
|
|
|
|
+ flex: 1;
|
|
|
|
|
+ margin-left: 20upx;
|
|
|
|
|
+
|
|
|
|
|
+ &.error-text {
|
|
|
|
|
+ color: #ff4d4f;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ .page-btn {
|
|
|
|
|
+ position: fixed;
|
|
|
|
|
+ bottom: 0;
|
|
|
|
|
+ left: 0;
|
|
|
|
|
+ right: 0;
|
|
|
|
|
+ background: #fff;
|
|
|
|
|
+ padding: 30upx;
|
|
|
|
|
+ border-top: 1px solid #f0f0f0;
|
|
|
|
|
+ display: flex;
|
|
|
|
|
+ justify-content: space-between;
|
|
|
|
|
+ align-items: center;
|
|
|
|
|
+
|
|
|
|
|
+ .flex-center {
|
|
|
|
|
+ display: flex;
|
|
|
|
|
+ align-items: center;
|
|
|
|
|
+
|
|
|
|
|
+ span {
|
|
|
|
|
+ font-size: 28upx;
|
|
|
|
|
+ color: #333;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ .app-price {
|
|
|
|
|
+ color: #ff6b35;
|
|
|
|
|
+ margin-left: 20upx;
|
|
|
|
|
+
|
|
|
|
|
+ .app-size-40 {
|
|
|
|
|
+ font-size: 40upx;
|
|
|
|
|
+ font-weight: bold;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ .button-com {
|
|
|
|
|
+ padding: 20upx 40upx;
|
|
|
|
|
+ border-radius: 10upx;
|
|
|
|
|
+ font-size: 28upx;
|
|
|
|
|
+ border: none;
|
|
|
|
|
+
|
|
|
|
|
+ &.red {
|
|
|
|
|
+ background: #ff6b35;
|
|
|
|
|
+ color: #fff;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+</style>
|