new-mshop-view/pages/users/online_payment/site/index.vue

356 lines
9.2 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>
<view :style="viewColor">
<!--具体内容-->
<view class='content-box'>
<!--选项卡-->
<view class="tabs">
<view :class="['tabs-item',{'tabs-item-active': (tab_active == 'list')}]" @click="init('list')">酒道馆</view>
<view :class="['tabs-item',{'tabs-item-active': (tab_active == 'exchange_record')}]" @click="init('exchange_record')">兑换记录</view>
</view>
<!--站点管理-->
<view class="site-list" v-if="tab_active == 'list'">
<view class="site-box" v-for="(item, index) in list" :key="index">
<view class="left">
<view class="title">{{item.title}}</view>
<view class="address">{{item.address}}</view>
</view>
<view v-if="item.is_show == 1" class="right" @click="showQrCode(item)">兑换码</view>
<view v-else class="right not-btn">已停用</view>
</view>
</view>
<!--兑换记录-->
<view class="site-exchange-record" v-if="tab_active == 'exchange_record'">
<view class="record-box" v-for="(item, index) in list" :key="index">
<view class="top-info">
<view class="left">
<view class="title">{{ item.point_title }}</view>
<view class="time">{{ item.create_time }}</view>
</view>
<view class="right">{{ item.total_money }}</view>
</view>
<view class="other-info">
<view class="other-info-line">消费用户:{{ item.nickname || item.uid }}</view>
<view class="other-info-line">使用积分:{{ item.use_integral }}</view>
<view class="other-info-line" v-if="item.diff_money > 0">差价:{{ item.diff_money }}</view>
<view class="other-info-line" v-if="item.diff_money_pay > 0">差价实付金额:{{ item.diff_money_pay }}</view>
</view>
</view>
</view>
</view>
<!--授权登录-->
<authorize @onLoadFun="onLoadFun" :isAuto="isAuto" :isShowAuth="isShowAuth" @authColse="authColse"></authorize>
<!--二维码-->
<uni-popup ref="qrCodePopup" type="center">
<view class="qr-code-content">
<image class="image" :src="qrCode"></image>
<view class="close-qr-code" @click="closeQrCode()">关闭</view>
</view>
</uni-popup>
</view>
</template>
<script>
import { siteManage, getSiteQrCode } from '@/api/exchange.js';
import {mapGetters} from "vuex";
import authorize from '@/components/Authorize';
import emptyPage from '@/components/emptyPage.vue';
const app = getApp();
export default {
components: {
authorize,
emptyPage,
},
data() {
return {
// 登录相关
isAuto: false, //没有授权的不会自动授权
isShowAuth: false,//是否隐藏授权
pointUserInfo: {},
// 选项卡
tab_active: 'list',// list=我的站点exchange_record=兑换记录
// 列表
list: [],
page: 1,
// 二维码
qrCode: '',
};
},
computed: {
...mapGetters(['isLogin', 'userInfo', 'viewColor'])
},
onLoad(options) {
// 判断:是否登录
if (!this.isLogin) {
// 未登录 授权登录
this.isAuto = true;
this.isShowAuth = true
}else{
// 已登录 获取信息
this.init('list');
}
},
onReachBottom: function () {
this.getList();
},
watch: {},
methods: {
// 授权回调
onLoadFun() {
if(this.isLogin){
this.isShowAuth = false;
this.init();
}
},
// 授权关闭
authColse(e) {
this.isShowAuth = e
},
// 授权成功 信息初始化
init (active) {
let _this = this;
_this.tab_active = active || 'list';
_this.list = [];
_this.page = 1;
_this.getList();
},
// 提货记录
getList() {
let _this = this;
let params = {
page: _this.page
};
siteManage(_this.tab_active, params)
.then(res => {
let list = res.data.list || {};
if (Object.values(list).length > 0) {
_this.list = _this.$util.SplitArray(list, _this.list);
_this.$set(_this, 'list', _this.list);
_this.page++;
}
})
.catch(err => {
this.$util.Tips({
title: err
});
});
},
// 显示店铺兑换二维码
showQrCode(item){
let _this = this;
// 点击按钮触发弹框输入框的显示
uni.showModal({
title: '兑换商品金额', // 弹框标题
content: '',
editable: true,//是否显示输入框
placeholderText: '请输入用户兑换商品的总金额',//输入框提示内容
showCancel: true, // 是否显示取消按钮
cancelText: '取消', // 取消按钮文字
confirmText: '确定', // 确认按钮文字
success: (res) => {
console.log(res)
if (res.confirm && Number(res.content) > 0) {
let inputValue = Number(res.content);
let params = {
point_id: item.id,
total_money: inputValue,
};
getSiteQrCode(params).then(res => {
if (res.status == 200) {
_this.qrCode = res.data.qr_code || ''
_this.$refs.qrCodePopup.open('center');
}
}).catch(err => {
this.$util.Tips({
title: err
});
});
} else if (res.cancel) {
console.log('用户点击了取消');
}
}
})
},
// 关闭二维码
closeQrCode(){
this.$refs.qrCodePopup.close();
}
}
}
</script>
<style scoped lang="scss">
.content-box{
width: 100vw;
min-height: 100vh;
background: #f6f6f6;
.tabs{
width: 100%;
display: inline-flex;
flex-direction: row;
flex-wrap: nowrap;
align-items: center;
justify-content: center;
.tabs-item{
width: 50%;
padding: 0 20px;
height: 40px;
box-sizing: border-box;
line-height: 40px;
display: inline-block;
list-style: none;
font-size: 14px;
font-weight: 500;
color: #303133;
position: relative;
text-align: center;
border-bottom: 2rpx solid #CCCCCC;
}
.tabs-item-active{
color: #409eff;
border-bottom: 2rpx solid #409eff;
}
}
.site-list{
width: 100%;
.site-box{
width: 100%;
display: inline-flex;
flex-direction: row;
flex-wrap: nowrap;
align-items: center;
justify-content: space-between;
padding: 20rpx;
border-bottom: 2rpx solid #CCCCCC;
.left{
width: calc(100% - 120rpx);
.title{
font-size: 30rpx;
font-weight: bold;
width: 100%;
text-align: left;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.address{
width: 100%;
text-align: left;
font-size: 26rpx;
color: #a0a1a7;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
}
.right{
color: #fff;
background-color: #409eff;
border-color: #409eff;
height: 40rpx;
line-height: 40rpx;
padding: 0 15rpx;
border-radius: 50rpx;
width: 120rpx;
text-align: center;
}
.not-btn{
background-color: #909399!important;
border-color: #909399!important;
color: #fff!important;
}
}
.site-box:last-child{
border-bottom: 0!important;
}
}
.site-exchange-record{
width: 100%;
.record-box{
width: 100%;
padding: 30rpx 20rpx;
display: inline-flex;
flex-direction: column;
flex-wrap: nowrap;
justify-content: center;
align-items: center;
.top-info{
width: 100%;
display: inline-flex;
flex-direction: row;
flex-wrap: nowrap;
justify-content: space-between;
align-items: center;
.left{
display: inline-flex;
flex-direction: column;
flex-wrap: nowrap;
justify-content: center;
align-items: flex-start;
.title{
font-size: 30rpx;
font-weight: bold;
width: 100%;
text-align: left;
}
.time{
width: 100%;
text-align: left;
font-size: 26rpx;
color: #C1C1C1;
}
}
.right{
font-size: 40rpx;
}
}
.other-info{
width: 100%;
display: inline-flex;
flex-direction: row;
flex-wrap: wrap;
justify-content: flex-start;
align-items: center;
align-content: center;
.other-info-line{
width: 50%;
height: 35rpx;
line-height: 35rpx;
font-size: 24rpx;
}
}
}
}
}
.qr-code-content{
width: 80vw;
.image{
width: 80vw;
height: 80vw;
}
.close-qr-code{
position: fixed;
top: 35rpx;
right: 70rpx;
color: #FFFFFF;
border: 2rpx solid #FFFFFF;
height: 40rpx;
line-height: 36rpx;
padding: 0 20rpx;
border-radius: 50rpx;
}
}
</style>