smart-switch-ui/src/views/ss/vipOrder/view/index.vue
2025-01-21 16:10:34 +08:00

243 lines
7.1 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<div class="app-container" v-loading="loading">
<!-- 顶部金额卡片 -->
<el-row :gutter="12" class="amount-cards">
<el-col :span="6">
<el-card shadow="hover" class="amount-card">
<div class="amount-title">
<i class="el-icon-money"></i>
订单金额
</div>
<div class="amount-value">¥ {{ detail.amount | fix2 | dv }}</div>
<div class="amount-extra">支付单号:{{ detail.payNo | dv}}</div>
</el-card>
</el-col>
<el-col :span="6">
<el-card shadow="hover" class="amount-card">
<div class="amount-title">
<i class="el-icon-user"></i>
会员信息
</div>
<div class="amount-value">{{ detail.levelName | dv}}</div>
<div class="amount-extra">可用店铺:{{ detail.storeName | dv }}</div>
</el-card>
</el-col>
<el-col :span="6">
<el-card shadow="hover" class="amount-card">
<div class="amount-title">
<i class="el-icon-discount"></i>
折扣信息
</div>
<div class="amount-value">{{ detail.levelDiscount | dv }} 折</div>
<div class="amount-extra">频率限制:{{ limitTypeName | dv }} {{ detail.levelLimitCount | dv }} 次</div>
</el-card>
</el-col>
<el-col :span="6">
<el-card shadow="hover" class="amount-card">
<div class="amount-title">
<i class="el-icon-time"></i>
购买时长
</div>
<div class="amount-value">{{ detail.levelTime | dv }} </div>
<div class="amount-extra">续费次数 {{detail.levelLimitTotal | dv}} </div>
</el-card>
</el-col>
</el-row>
<!-- 主要信息卡片 -->
<el-card class="main-card">
<div class="card-header">
<div class="order-no">
<i class="el-icon-document"></i>
订单号{{ detail.orderNo }}
</div>
</div>
<el-descriptions :column="4" border class="mt10">
<el-descriptions-item label="订单状态">
<dict-tag :options="dict.type.vip_order_status" :value="detail.status" size="small"/>
</el-descriptions-item>
<el-descriptions-item label="用户">
<user-link :id="detail.userId" :name="detail.userName"/>
</el-descriptions-item>
<el-descriptions-item label="商户">
<user-link :id="detail.mchId" :name="detail.mchName"/>
</el-descriptions-item>
<el-descriptions-item label="下单时间">
{{ detail.createTime | dv }}
</el-descriptions-item>
<el-descriptions-item label="支付时间">
{{ detail.payTime | dv }}
</el-descriptions-item>
<!-- <el-descriptions-item label="过期时间">
{{ detail.expireTime | dv }}
</el-descriptions-item> -->
<!-- <el-descriptions-item label="VIP等级">
{{ detail.levelName | dv }}
</el-descriptions-item>
<el-descriptions-item label="频率限制">
<div class="flex-row">
<dict-tag :options="dict.type.vip_level_limit_type" :value="detail.levelLimitType" size="small"/>
<template v-if="detail.levelLimitCount">
<span class="limit-count">({{ detail.levelLimitCount }})</span>
</template>
</div>
</el-descriptions-item>
<el-descriptions-item label="续费次数">
{{ detail.levelLimitTotal | dv }}
</el-descriptions-item>
<el-descriptions-item label="续费方案">
<dict-tag :options="dict.type.vip_level_solution" :value="detail.levelSolution" size="small"/>
</el-descriptions-item>
<el-descriptions-item label="可用店铺">
<store-link :id="detail.levelStoreId" :name="detail.storeName"/>
</el-descriptions-item> -->
<el-descriptions-item label="支付渠道">
{{ detail.channelName | dv }}
</el-descriptions-item>
</el-descriptions>
<!-- 取消信息 -->
<template v-if="detail.status === VipOrderStatus.CANCEL">
<el-descriptions :column="2" border size="small" class="mt10">
<el-descriptions-item label="取消时间">{{ detail.cancelTime }}</el-descriptions-item>
<el-descriptions-item label="取消原因" class="cancel-reason">{{ detail.cancelReason }}</el-descriptions-item>
</el-descriptions>
</template>
</el-card>
<el-card class="box-card">
<el-tabs>
<el-tab-pane label="收益列表" lazy>
<bonus v-if="detail.id != null" :query="{billId: detail.id}" :view="views.vipOrder"/>
</el-tab-pane>
<el-tab-pane label="支付信息" lazy>
<pay-bill :query="{bstId: detail.id, bstType: PayBillBstType.VIP_ORDER}" :view="views.vipOrder"/>
</el-tab-pane>
</el-tabs>
</el-card>
</div>
</template>
<script>
import { getVipOrder } from "@/api/ss/vipOrder";
import UserLink from "@/components/Business/SmUser/UserLink.vue";
import StoreLink from "@/components/Business/Store/StoreLink.vue";
import { VipOrderStatus, PayBillBstType, views} from "@/utils/constants";
import Bonus from "@/views/ss/bonus/index.vue";
import PayBill from "@/views/ss/payBill/index.vue";
export default {
name: "VipOrderView",
components: { UserLink, Bonus, PayBill, StoreLink },
dicts: ['vip_level_limit_type', 'vip_order_status', 'vip_level_solution'],
data() {
return {
VipOrderStatus,
PayBillBstType,
detail: {},
loading: false,
views,
};
},
computed: {
limitTypeName() {
return this.dict.type.vip_level_limit_type.find(item => item.value === this.detail.levelLimitType)?.label;
}
},
created() {
const id = this.$route.params.id;
if (id) {
this.getInfo(id);
}
},
methods: {
getInfo(id) {
this.loading = true;
getVipOrder(id).then(response => {
this.detail = response.data;
}).finally(() => {
this.loading = false;
});
}
}
};
</script>
<style lang="scss" scoped>
.app-container {
padding: 10px;
}
.amount-cards {
margin-bottom: 12px;
.amount-card {
background: linear-gradient(135deg, #1890ff 0%, #36cfc9 100%);
color: white;
::v-deep .el-card__body {
padding: 15px;
}
.amount-title {
font-size: 13px;
opacity: 0.9;
i {
margin-right: 4px;
}
}
.amount-value {
font-size: 20px;
font-weight: bold;
line-height: 28px;
margin: 8px 0;
}
.amount-extra {
font-size: 12px;
opacity: 0.8;
}
}
}
.main-card {
::v-deep .el-card__body {
padding: 15px;
}
.card-header {
margin-bottom: 15px;
.order-no {
font-size: 14px;
i {
margin-right: 6px;
color: #1890ff;
}
}
}
}
.mt10 {
margin-top: 10px;
}
.flex-row {
display: flex;
align-items: center;
.limit-count {
margin-left: 8px;
color: #909399;
}
}
::v-deep .el-descriptions {
.el-descriptions-item__label {
width: 100px;
color: #606266;
}
.cancel-reason {
color: #f56c6c;
}
}
.ml10 {
margin-left: 10px;
}
</style>