tmp: 部分代码与UnishopV5结合,但是代码有严重缺陷

This commit is contained in:
2025-12-20 15:30:39 +08:00
parent ed5181b382
commit e263a616f6
183 changed files with 31316 additions and 18590 deletions

View File

@@ -183,8 +183,7 @@
};
this.dataList.forEach(item => {
item.withdraw_type_name = withdrawType[item.withdraw_type] ? withdrawType[
item.withdraw_type] : '';
item.withdraw_type_name = withdrawType[item.withdraw_type] ? withdrawType[item.withdraw_type] : '';
});
if (this.$refs.loadingCover) this.$refs.loadingCover.hide();
},
@@ -195,8 +194,7 @@
});
},
getTransferType() {
let url = this.type == "member" ? "/api/memberwithdraw/transferType" :
"/fenxiao/api/withdraw/transferType";
let url = this.type == "member" ? "/api/memberwithdraw/transferType" : "/fenxiao/api/withdraw/transferType";
this.$api.sendRequest({
url: url,
success: res => {

View File

@@ -59,7 +59,7 @@ export default {
},
onShow() {
if (this.formData.id) {
this.getAccountDetail(this.formData.id);
this.getAccountDetail();
} else {
this.getTransferType();
}
@@ -74,7 +74,7 @@ export default {
}
},
methods: {
getAccountDetail(id) {
getAccountDetail() {
this.$api.sendRequest({
url: '/api/memberbankaccount/info',
data: {

View File

@@ -229,7 +229,11 @@
if (res.data > 0) {
this.$refs.mescroll.refresh();
if (this.back != '') {
this.$util.redirectTo(this.back, {}, 'redirectTo');
// this.$util.redirectTo(this.back, {}, 'redirectTo');
// 回退到上一个页面
uni.navigateBack({
delta: 1 // delta值为1时表示回退到上一级页面
});
} else {
if (this.$refs.loadingCover) this.$refs.loadingCover.show();
this.addressList = [];
@@ -333,7 +337,11 @@
if (res.code >= 0) {
if (this.back != '') {
this.$util.redirectTo(this.back, {}, 'redirectTo');
// this.$util.redirectTo(this.back, {}, 'redirectTo');
// 回退到上一个页面
uni.navigateBack({
delta: 1 // delta值为1时表示回退到上一级页面
});
} else {
this.$refs.mescroll.refresh();
}

File diff suppressed because it is too large Load Diff

View File

@@ -7,14 +7,13 @@
<view class="tx-bank" v-if="bankAccountInfo.withdraw_type == 'wechatpay'">微信默认钱包</view>
<view class="tx-bank" v-else>{{ bankAccountInfo.bank_account }}</view>
<view class="tx-img" v-if="bankAccountInfo.withdraw_type == 'alipay'">
<image :src="$util.img('public/uniapp/member/apply_withdrawal/alipay.png')" mode="widthFix"></image>
<image :src="$util.img('public/uniapp/member/apply_withdrawal/alipay.png')" mode="widthFix"/>
</view>
<view class="tx-img" v-else-if="bankAccountInfo.withdraw_type == 'bank'">
<image :src="$util.img('public/uniapp/member/apply_withdrawal/bank.png')" mode="widthFix"></image>
<image :src="$util.img('public/uniapp/member/apply_withdrawal/bank.png')" mode="widthFix"/>
</view>
<view class="tx-img" v-else-if="bankAccountInfo.withdraw_type == 'wechatpay'">
<image :src="$util.img('public/uniapp/member/apply_withdrawal/wechatpay.png')" mode="widthFix">
</image>
<image :src="$util.img('public/uniapp/member/apply_withdrawal/wechatpay.png')" mode="widthFix"/>
</view>
</view>
<text class="tx-to" v-else>请添加提现方式</text>
@@ -192,9 +191,7 @@
title: '提现申请成功'
});
setTimeout(() => {
this.$util.redirectTo(
'/pages_tool/member/withdrawal', {},
'redirectTo');
this.$util.redirectTo('/pages_tool/member/withdrawal', {}, 'redirectTo');
}, 1500);
} else {
this.isSub = false;
@@ -228,8 +225,7 @@
title: '提现申请成功'
});
setTimeout(() => {
this.$util.redirectTo('/pages_tool/member/withdrawal', {},
'redirectTo');
this.$util.redirectTo('/pages_tool/member/withdrawal', {}, 'redirectTo');
}, 1500);
} else {
this.isSub = false;
@@ -246,41 +242,15 @@
}
},
goAccount() {
this.$util.redirectTo(
'/pages_tool/member/account', {
back: '/pages_tool/member/apply_withdrawal'
},
'redirectTo'
);
this.$util.redirectTo('/pages_tool/member/account', {
back: '/pages_tool/member/apply_withdrawal'
}, 'redirectTo');
},
/**
* 微信订阅消息
*/
subscribeMessage(callback) {
this.$api.sendRequest({
url: '/weapp/api/weapp/messagetmplids',
data: {
keywords: 'USER_WITHDRAWAL_SUCCESS'
},
success: res => {
if (res.code == 0 && res.data.length) {
uni.requestSubscribeMessage({
tmplIds: res.data,
fail: res => {
console.log('fail', res);
},
complete: () => {
callback();
}
});
} else {
callback();
}
},
fail: res => {
callback();
}
});
this.$util.subscribeMessage('USER_WITHDRAWAL_SUCCESS', callback);
}
},
};

View File

@@ -79,172 +79,182 @@
</template>
<script>
export default {
data() {
return {
accountInfo: {},
member_info: {},
fenxiao_info: {}
};
},
onLoad(option) {
if (option.back) this.back = option.back;
// 判断登录
if (!this.storeToken) {
this.$util.redirectTo('/pages_tool/login/login');
} else {
this.getAccountInfo();
}
},
methods: {
getAccountInfo() {
this.$api.sendRequest({
url: '/membercancel/api/membercancel/accountInfo',
success: res => {
if (res.code >= 0) {
this.accountInfo = res.data;
this.member_info = res.data.member_info;
if (res.data.member_info.is_fenxiao == 1) {
this.fenxiao_info = res.data.fenxiao_info;
export default {
data() {
return {
member_info: {
point: 0,
balance_money: '0.00',
balance: '0.00'
},
accountInfo: {
member_coupon_count: 0,
order_pay_count: 0,
order_delivery_count: 0,
order_refund_count: 0
},
fenxiao_info: {
account: '0.00',
account_withdraw_apply: '0.00',
fenxiao_order_count: 0
}
};
},
onLoad(option) {
// 判断登录
if (!this.storeToken) {
this.$util.redirectTo('/pages_tool/login/login');
} else {
this.getAccountInfo();
}
},
methods: {
getAccountInfo() {
this.$api.sendRequest({
url: '/membercancel/api/membercancel/accountInfo',
success: res => {
if (res.code >= 0) {
this.accountInfo = res.data;
this.member_info = res.data.member_info;
if (res.data.member_info.is_fenxiao == 1) {
this.fenxiao_info = res.data.fenxiao_info;
}
}
}
}
});
},
prev() {
this.$util.redirectTo('/pages_tool/member/cancellation');
},
submit() {
uni.showModal({
title: '风险提示',
content: '确定要注销当前账号吗?',
confirmColor: '#000000',
success: res => {
if (res.confirm) {
this.$api.sendRequest({
url: '/membercancel/api/membercancel/apply',
success: rres => {
let cancellation_condition = rres.data.is_audit;
if (rres.code >= 0) {
this.$util.redirectTo('/pages_tool/member/cancelstatus');
} else {
this.$util.showToast({
title: rres.message
});
});
},
prev() {
this.$util.redirectTo('/pages_tool/member/cancellation');
},
submit() {
uni.showModal({
title: '风险提示',
content: '确定要注销当前账号吗?',
confirmColor: '#000000',
success: res => {
if (res.confirm) {
this.$api.sendRequest({
url: '/membercancel/api/membercancel/apply',
success: rres => {
let cancellation_condition = rres.data.is_audit;
if (rres.code >= 0) {
this.$util.redirectTo('/pages_tool/member/cancelstatus');
} else {
this.$util.showToast({
title: rres.message
});
}
}
}
});
});
}
}
}
});
});
}
}
}
};
};
</script>
<style lang="scss" scoped>
.assets-wrap {
.assets-block {
padding: 0 24rpx;
padding-top: 30rpx;
}
.assets-tips {
width: 100%;
height: 56rpx;
background-color: rgba(250, 106, 0, 0.2);
border-radius: 6rpx;
line-height: 56rpx;
padding-left: 20rpx;
box-sizing: border-box;
text {
color: #fa6a00;
font-size: 28rpx;
.assets-wrap {
.assets-block {
padding: 0 24rpx;
padding-top: 30rpx;
}
}
.assets-box {
width: 100%;
margin-top: 30rpx;
background-color: #ffffff;
border-radius: 6rpx;
padding: 20rpx;
box-sizing: border-box;
.assets-tips {
width: 100%;
height: 56rpx;
background-color: rgba(250, 106, 0, 0.2);
border-radius: 6rpx;
line-height: 56rpx;
padding-left: 20rpx;
box-sizing: border-box;
.assets-title {
display: flex;
align-items: center;
text:nth-child(1) {
width: 6rpx;
height: 28rpx;
border-radius: 2rpx;
}
text:nth-child(2) {
margin-left: 20rpx;
text {
color: #fa6a00;
font-size: 28rpx;
line-height: 28rpx;
padding-top: 8rpx;
font-weight: 600;
}
}
.assets-list {
display: flex;
justify-content: space-between;
align-items: center;
flex-wrap: wrap;
padding: 0 26rpx 35rpx;
margin-top: 53rpx;
.assets-box {
width: 100%;
margin-top: 30rpx;
background-color: #ffffff;
border-radius: 6rpx;
padding: 20rpx;
box-sizing: border-box;
.assets-li {
text-align: center;
.assets-title {
display: flex;
align-items: center;
view:nth-child(1) {
font-size: 36rpx;
line-height: 36rpx;
text:nth-child(1) {
width: 6rpx;
height: 28rpx;
border-radius: 2rpx;
}
view:nth-child(2) {
text:nth-child(2) {
margin-left: 20rpx;
font-size: 28rpx;
line-height: 28rpx;
color: #666666;
margin-top: 30rpx;
padding-top: 8rpx;
font-weight: 600;
}
}
.assets-list {
display: flex;
justify-content: space-between;
align-items: center;
flex-wrap: wrap;
padding: 0 26rpx 35rpx;
margin-top: 53rpx;
.assets-li {
text-align: center;
view:nth-child(1) {
font-size: 36rpx;
line-height: 36rpx;
}
view:nth-child(2) {
font-size: 28rpx;
line-height: 28rpx;
color: #666666;
margin-top: 30rpx;
}
}
}
}
}
.assets-btn {
display: flex;
justify-content: center;
align-items: center;
position: fixed;
bottom: 0;
width: 100%;
height: 150rpx;
.assets-btn {
display: flex;
justify-content: center;
align-items: center;
position: fixed;
bottom: 0;
width: 100%;
height: 150rpx;
button {
width: 300rpx;
height: 80rpx;
font-size: 28rpx;
line-height: 80rpx;
margin: 0 15rpx;
}
button {
width: 300rpx;
height: 80rpx;
font-size: 28rpx;
line-height: 80rpx;
margin: 0 15rpx;
}
button[type='primary'] {
background-color: unset !important;
color: #333333;
border: 2rpx solid #dddddd;
}
button[type='primary'] {
background-color: unset !important;
color: #333333;
border: 2rpx solid #dddddd;
}
button:nth-child(2) {
color: var(--btn-text-color);
button:nth-child(2) {
color: var(--btn-text-color);
}
}
}
}
</style>
</style>

View File

@@ -2,24 +2,20 @@
<page-meta :page-style="themeColor"></page-meta>
<view class="balance">
<!-- #ifdef MP-WEIXIN -->
<view class="custom-navbar" :style="{
'padding-top': menuButtonBounding.top + 'px',
'height': menuButtonBounding.height + 'px'
}">
<view class="custom-navbar" :style="{ 'padding-top': menuButtonBounding.top + 'px', 'height': menuButtonBounding.height + 'px' }">
<view class="navbar-wrap">
<text class="iconfont icon-back_light back" @click="$util.redirectTo('/pages/member/index')"></text>
<view class="navbar-title">
账户余额
我的余额
</view>
</view>
</view>
<!-- #endif -->
<view class="head-wrap" :style="{ background: 'url(' + $util.img('public/uniapp/balance/balance-bg.png') + ')',backgroundSize:'100% 100%' }">
<!-- <view class="head-wrap" :style="{ background: 'url(' + $util.img('public/uniapp/balance/balance-bg.png') + ') no-repeat right bottom/ auto 380rpx, linear-gradient(314deg, #FE7849 0%, #FF1959 100%)' }"> -->
<view class="title">账户余额</view>
<view class="head-wrap" :style="{ background: 'url(' + $util.img('public/uniapp/balance/balance_bg.png') + ') no-repeat right bottom/ auto 340rpx, linear-gradient(314deg, #FE7849 0%, #FF1959 100%)' }">
<view class="balance price-font">{{ (parseFloat(balanceInfo.balance) + parseFloat(balanceInfo.balance_money)).toFixed(2) }}</view>
<!-- <view class="flex-box">
<view class="title">账户余额</view>
<view class="flex-box">
<view class="flex-item">
<view class="num price-font">{{ balanceInfo.balance_money|moneyFormat }}</view>
<view class="font-size-tag">现金余额</view>
@@ -28,45 +24,34 @@
<view class="num price-font">{{ balanceInfo.balance|moneyFormat }}</view>
<view class="font-size-tag">储值余额</view>
</view>
</view> -->
<view class="btns">
<view class="cash btn" @click="toWithdrawal">提现</view>
<view class="recharge btn" @click="toList">充值</view>
</view>
</view>
<view class="menu-wrap">
<view class="menu-item" @click="toApply" style="border-bottom: 0.5px solid #f2f2f2;">
<view class="icon">
<text class="iconfont icon-yuemingxi"></text>
</view>
<text class="title">提现记录</text>
<text class="iconfont icon-right"></text>
</view>
<view class="menu-item" @click="toBalanceDetail" style="border-bottom: 0.5px solid #f2f2f2;">
<view class="menu-item" @click="toBalanceDetail">
<view class="icon">
<text class="iconfont icon-yuemingxi"></text>
</view>
<text class="title">余额明细</text>
<text class="iconfont icon-right"></text>
</view>
<!-- <view class="menu-item" @click="toOrderList">
<view class="menu-item" @click="toOrderList" v-if="addonIsExist.memberrecharge && memberrechargeConfig && memberrechargeConfig.is_use">
<view class="icon">
<text class="iconfont icon-chongzhijilu"></text>
</view>
<text class="title">充值记录</text>
<text class="iconfont icon-right"></text>
</view> -->
</view>
</view>
<!-- <view class="action">
<view class="action">
<view @click="toList" class="recharge-withdraw" v-if="addonIsExist.memberrecharge && memberrechargeConfig && memberrechargeConfig.is_use">
{{ $lang('recharge') }}
</view>
<view class="withdraw" v-if="addonIsExist.memberwithdraw && withdrawConfig && withdrawConfig.is_use" @click="toWithdrawal">
{{ $lang('withdrawal') }}
</view>
</view> -->
</view>
<ns-login ref="login"></ns-login>
<loading-cover ref="loadingCover"></loading-cover>
</view>
@@ -111,9 +96,6 @@ export default {
toBalanceDetail() {
this.$util.redirectTo('/pages_tool/member/balance_detail');
},
toApply(){
this.$util.redirectTo('/pages_tool/member/withdrawal');
},
toList() {
this.$util.redirectTo('/pages_tool/recharge/list');
},

View File

@@ -6,11 +6,11 @@
<text class="uni-tab-item-title" :class="statusIndex == orderStatus ? 'uni-tab-item-title-active' : ''">{{ statusItem.name }}</text>
</view>
</scroll-view> -->
<!-- <view class="tab color-bg">
<view class="tab color-bg">
<view class="tab-left">
<picker mode="date" :value="searchType.date" @change="bindDateChange" fields="month">
<picker :range="monthData" :value="monthIndex" @change="bindDateChange" >
<view class="uni-input">
{{ date }}
{{ monthData[monthIndex] }}
<text class="iconfont icon-iconangledown"></text>
</view>
</picker>
@@ -21,22 +21,22 @@
<text class="iconfont icon-iconangledown"></text>
</picker>
</view>
</view> -->
<mescroll-uni @getData="getData" ref="mescroll">
</view>
<mescroll-uni @getData="getData" ref="mescroll" v-if="monthData.length">
<block slot="list">
<!-- 明细列表 -->
<block v-if="dataList.length > 0">
<view class="detailed-wrap">
<view class="balances" v-for="(item, index) in dataList" :key="index">
<image :src="$util.img('public/uniapp/balance/recharge.png')" class="balances-img" v-if="item.account_data > 0"></image>
<image v-else :src="$util.img('public/uniapp/balance/shopping.png')" mode="widthFix"></image>
<!-- <image :src="$util.img('public/uniapp/member/balance_detail/income.png')" class="balances-img" v-if="item.account_data > 0"></image>
<image v-else :src="$util.img('public/uniapp/member/balance_detail/pay.png')" mode="widthFix"></image> -->
<view class="balances-info" @click="toFromDetail(item)">
<text class="title">{{ item.remark }}</text>
<!-- <text>{{ item.remark }}</text> -->
<text class="title">{{ item.type_name }}</text>
<text>{{ item.remark }}</text>
<text>{{ $util.timeStampTurnTime(item.create_time) }}</text>
</view>
<view class="balances-num">
<text :class="item.account_data > 0 ? 'color-base-text' : ''">{{ item.account_data > 0 ? '+' + item.account_data : item.account_data }}</text>
<text :class="item.account_data > 0 ? 'color-base-text' : ''">{{ item.account_data > 0 ? '+' + item.account_data : item.account_data }}</text>
</view>
</view>
</view>
@@ -53,9 +53,6 @@
<script>
export default {
data() {
const currentDate = this.getDate({
format: true
});
return {
dataList: [],
statusList: [{
@@ -70,7 +67,6 @@
}],
scrollInto: '',
orderStatus: '0',
date: currentDate,
searchType: {
from_type: 0,
date: ''
@@ -80,7 +76,9 @@
value: '0'
}], //积分类型
balanceIndex: 0,
related_id: 0
related_id: 0,
monthData:[],
monthIndex:0,
};
},
components: {},
@@ -90,6 +88,7 @@
if (option.related_id) this.related_id = option.related_id ? option.related_id : 0;
if (option.status) this.orderStatus = option.status;
this.getbalanceType();
this.getMonthData();
},
onShow() {
if (!this.storeToken) {
@@ -100,26 +99,19 @@
},
methods: {
bindDateChange: function(e) {
var temp = e.target.value;
var tempArr = temp.split('-');
this.date = tempArr[0] + '年' + tempArr[1] + '月';
this.searchType.date = e.target.value;
var index = e.target.value;
this.monthIndex = index;
this.searchType.date = this.monthData[index];
this.$refs.mescroll.refresh();
},
getDate(type) {
const date = new Date();
let year = date.getFullYear();
let month = date.getMonth() + 1;
let day = date.getDate();
if (type === 'start') {
year = year - 60;
} else if (type === 'end') {
year = year + 2;
}
month = month > 9 ? month : '0' + month;
day = day > 9 ? day : '0' + day;
return `${year}${month}`;
getMonthData(){
this.$api.sendRequest({
url: '/api/memberaccount/monthData',
success: res => {
this.monthData = res.data;
this.searchType.date = res.data[0];
}
});
},
bindPickerChange(e) {
this.balanceIndex = e.detail.value;
@@ -204,9 +196,8 @@
<style lang="scss">
.detailed-wrap {
padding-top: 20rpx;
margin: 24rpx;
padding-top: 80rpx;
background: #fff;
}
.tab {
@@ -295,20 +286,17 @@
}
.balances {
padding: $margin-both 24rpx;
// margin: 0 $margin-both;
padding: $margin-both 0;
margin: 0 $margin-both;
box-sizing: border-box;
display: flex;
align-items: flex-start;
border-bottom: 2rpx solid $color-line;
background: #fff;
margin-bottom: 20rpx;
border-radius: 24rpx;
image {
width: 54rpx;
height: 54rpx;
border-radius: 50%;
padding-top: 10rpx;
}
.balances-info {
@@ -342,8 +330,6 @@
line-height: 1;
font-size: $font-size-toolbar;
font-weight: 500;
color:#09c15f;
font-weight: 700;
}
}
}

View File

@@ -4,7 +4,8 @@
<view class="agreement-box">
<view class="agreement-intro">
<view class="align-center agreement-title">{{ agreement.title }}</view>
<rich-text class="agreement-content" :nodes="agreement.content"></rich-text>
<!-- <rich-text class="agreement-content" :nodes="agreement.content"></rich-text> -->
<ns-mp-html class="agreement-content" :content="agreement.content"></ns-mp-html>
</view>
<view class="agreement-btn">
@@ -29,7 +30,6 @@ export default {
};
},
onLoad(option) {
if (option.back) this.back = option.back;
// 判断登录
if (!this.storeToken) {
this.$util.redirectTo('/pages_tool/login/login');
@@ -44,7 +44,7 @@ export default {
success: res => {
if (res.code >= 0) {
this.agreement = res.data;
if (this.agreement.content) this.agreement.content = htmlParser(this.agreement.content);
// if (this.agreement.content) this.agreement.content = htmlParser(this.agreement.content);
}
}
});
@@ -66,6 +66,10 @@ export default {
</script>
<style lang="scss" scoped>
/deep/ .agreement-content view{
font-size: 24rpx;
line-height: 44rpx;
}
.agreement-box {
.align-center {
text-align: center;

View File

@@ -15,16 +15,12 @@
<script>
export default {
components: {},
data() {
return {
reason: ''
};
},
onLoad(option) {
if (option.back) this.back = option.back;
// 判断登录
if (!this.storeToken) {
this.$util.redirectTo('/pages_tool/login/login');

View File

@@ -20,9 +20,7 @@
<view class="cancelstatus-box-line color-base-bg" :class="{ 'opacity-4': state == 0 }"></view>
</view>
<view class="cancelstatus-box cancelstatus-box-last">
<view class="cancelstatus-box-sort color-base-bg" :class="[ state == 1 ? 'opacity': 'opacity-4' ]">
3
</view>
<view class="cancelstatus-box-sort color-base-bg" :class="[ state == 1 ? 'opacity': 'opacity-4' ]">3</view>
<view class="cancelstatus-box-con">
<view class="cancelstatus-box-name">审核通过注销完成</view>
<view class="cancelstatus-box-info">您已成功注销账号期待下一次与您相遇</view>
@@ -64,16 +62,15 @@
this.state = res.data.status;
if (this.state == -1) {
this.$util.redirectTo('/pages_tool/member/cancelrefuse');
} else if(this.state == 1){
this.$store.commit('setToken', '');
this.$store.commit('setMemberInfo', '');
this.$store.dispatch('emptyCart');
//uni.removeStorageSync('authInfo');
this.$util.redirectTo('/pages/index/index');
}
}
if (res.code == -1) {
this.$store.commit('setToken', '');
this.$store.commit('setMemberInfo', '');
this.$store.commit('setMemberInfo', '');
this.$store.dispatch('emptyCart');
this.$util.redirectTo('/pages/index/index');
}
}
});
},

View File

@@ -14,38 +14,24 @@
<script>
export default {
components: {},
data() {
return {
state: ''
};
return {};
},
onLoad(option) {
if (option.back) this.back = option.back;
// 判断登录
if (!this.storeToken) {
this.$util.redirectTo('/pages_tool/login/login');
} else {
this.getStatus();
this.init();
}
},
methods: {
getStatus() {
this.$api.sendRequest({
success: res => {
if (res.code >= 0) {
this.state = res.data.state;
if (res.data.state == 1) {
this.$store.commit('setToken', '');
this.$store.commit('setMemberInfo', '');
this.$store.dispatch('emptyCart');
this.$util.redirectTo('/pages/index/index');
}
}
}
});
init() {
this.$store.commit('setToken', '');
this.$store.commit('setMemberInfo', '');
this.$store.dispatch('emptyCart');
//uni.removeStorageSync('authInfo');
this.$util.redirectTo('/pages/index/index');
}
}
};

View File

@@ -10,8 +10,7 @@
<image :src="$util.getDefaultImage().head" v-else mode="aspectFill"/>
<view class="member-desc">
<view class="font-size-toolbar">{{ memberInfo.nickname }}</view>
<view class="font-size-tag expire-time" v-if="memberInfo.level_expire_time > 0">
有效期至{{ $util.timeStampTurnTime(memberInfo.level_expire_time, true) }}</view>
<view class="font-size-tag expire-time" v-if="memberInfo.level_expire_time > 0">有效期至{{ $util.timeStampTurnTime(memberInfo.level_expire_time) }}</view>
</view>
</view>

View File

@@ -2,7 +2,10 @@
<page-meta :page-style="themeColor"></page-meta>
<view class="page">
<view class="agreement-title">{{ title }}</view>
<view class="agreement-content"><rich-text :nodes="content"></rich-text></view>
<view class="agreement-content">
<!-- <rich-text :nodes="content"></rich-text> -->
<ns-mp-html :content="content"></ns-mp-html>
</view>
</view>
</template>
@@ -26,7 +29,8 @@ export default {
success: res => {
if (res.data && res.code == 0) {
this.title = res.data.title;
this.content = htmlParser(res.data.content);
// this.content = htmlParser(res.data.content);
this.content = res.data.content;
uni.setNavigationBarTitle({
title: this.title
});

View File

@@ -11,9 +11,7 @@
<image :src="$util.getDefaultImage().head" v-else mode="aspectFill"></image>
<view class="member-desc">
<view class="font-size-toolbar">{{ memberInfo.nickname }}</view>
<view class="font-size-tag expire-time" v-if="memberInfo.level_expire_time > 0">
有效期至{{ $util.timeStampTurnTime(memberInfo.level_expire_time, true) }}
</view>
<view class="font-size-tag expire-time" v-if="memberInfo.level_expire_time > 0">有效期至{{ $util.timeStampTurnTime(memberInfo.level_expire_time) }}</view>
</view>
</view>
<swiper :style="{ width: '100vw', height: '390rpx' }" class="margin-bottom"
@@ -26,21 +24,25 @@
<swiper-item :class="levelList.length == 1 ? 'image-container-box' : ''" v-for="(item, i) in levelList" :key="i">
<view class="image-container" :class="[
curIndex === 0
? i === listLen - 1
? 'item-left'
: i === 1
? i === 1
? 'item-right'
: i === listLen - 1
? 'item-left'
: 'item-center'
: curIndex === listLen - 1
? i === 0
? i === curIndex - 1
? 'item-left'
: i === curIndex + 1
? 'item-right'
: i === 0
? 'item-right'
: i === listLen - 2
? 'item-left'
: 'item-center'
: i === curIndex - 1
? 'item-left'
: i === curIndex + 1
? 'item-right'
? 'item-left'
: i === curIndex + 1
? 'item-right'
: 'item-center'
]">
<view class="slide-image" style="background-size: 100% 100%;background-repeat:no-repeat"
@@ -51,14 +53,14 @@
}">
<view class="bg-border"></view>
<image v-if="levelList[curIndex] && levelList[curIndex]['level_picture']" :src="$util.img(levelList[curIndex]['level_picture'])"/>
<image v-else :style="{backgroundColor:levelList[curIndex]['bg_color']}"/>
<image v-if="item && item['level_picture']" :src="$util.img(item['level_picture'])"/>
<image v-else :style="{backgroundColor:item['bg_color']}"/>
<view class="info">
<view class="level-detail" :style="{color:levelList[curIndex]['level_text_color']}">{{ levelList[curIndex].level_name }}</view>
<view class="growr-name" :style="{color:levelList[curIndex]['level_text_color']}">{{ levelList[curIndex].level_name }}可享受消费折扣和</view>
<view class="growr-value" :style="{color:levelList[curIndex]['level_text_color']}">会员大礼包等权益</view>
<view class="growth-rules font-size-tag" @click="openExplainPopup" v-if="levelList[curIndex].remark != ''">
<view class="level-detail" :style="{color:item['level_text_color']}">{{ item.level_name }}</view>
<view class="growr-name" :style="{color:item['level_text_color']}">{{ item.level_name }}可享受消费折扣和</view>
<view class="growr-value" :style="{color:item['level_text_color']}">会员大礼包等权益</view>
<view class="growth-rules font-size-tag" @click="openExplainPopup" v-if="item.remark != ''">
<text class="iconfont icon-wenhao font-size-tag"></text>
</view>
</view>
@@ -93,8 +95,7 @@
</view>
</view>
<view class="card-content"
v-if="currCard.is_free_shipping || currCard.consume_discount < 100 || currCard.point_feedback > 0">
<view class="card-content" v-if="currCard.is_free_shipping || currCard.consume_discount < 100 || currCard.point_feedback > 0">
<view class="card-content-head">
<view class="line-box">
<view class="line right"></view>

View File

@@ -2,7 +2,8 @@
<page-meta :page-style="themeColor"></page-meta>
<view class="contact">
<image :src="$util.img('public/uniapp/member/contact_service.png')" mode="widthFix"></image>
<!--<ns-contact><button type="primary">联系客服</button></ns-contact>-->
<view class="tips">请点击下方按钮联系客服</view>
<ns-contact><button type="primary">联系客服</button></ns-contact>
</view>
</template>
@@ -20,10 +21,18 @@ export default {
<style lang="scss">
.contact {
width: 80%;
display: flex;
flex-direction: column;
align-items: center;
text-align: center;
margin: 0 auto;
margin: 150rpx auto 0;
image {
width: 500rpx;
}
.tips{
font-size: 24rpx;
color: #999;
margin-bottom: 20rpx;
}
}
</style>

View File

@@ -15,7 +15,7 @@
</view> -->
</view>
<mescroll-uni ref="mescroll" top="100" @getData="getMemberCounponList" v-if="storeToken">
<mescroll-uni ref="mescroll" top="100" @getData="getMemberCouponList" v-if="storeToken">
<block slot="list">
<view class="coupon-listone">
<view class="item" :class="['item',item.state != 1&&'item-disabled']" v-for="(item, index) in list" :key="index" @click="toGoodsList(item)" :style="{ backgroundColor: item.state != 1 ? '#FFF' : 'var(--main-color-shallow)' }">
@@ -42,12 +42,12 @@
<view class="item-info">
<view class="use_title">
<view class="title">{{ item.coupon_name }}</view>
<view class="max_price" v-if="item.goods_type == 2 || item.goods_type == 3" :class="{ disabled: item.state == 3 }">指定商品</view>
<view class="max_price" :class="{ disabled: item.state == 3 }">{{item.goods_type_name}}</view>
<view class="max_price" v-if="item.discount_limit != '0.00'">(最大优惠{{ item.discount_limit }})</view>
<view class="max_price" :class="{ disabled: item.useState == 2 }">{{ item.use_channel_name }}</view>
<!-- <view class="max_price truncate" v-if="item.use_channel!='online'" :class="{ disabled: item.useState == 2 }">
<view class="max_price truncate" v-if="item.use_channel!='online'" :class="{ disabled: item.useState == 2 }">
{{ item.use_store==='all'?'适用门店全部门店': '适用门店'+item.use_store_name}}
</view> -->
</view>
</view>
<view class="use_time" v-if="item.end_time">有效期{{ $util.timeStampTurnTime(item.end_time) }}
</view>
@@ -65,7 +65,7 @@
</view>
</block>
</mescroll-uni>
<ns-login ref="ns-login"></ns-login>
<ns-login ref="login"></ns-login>
<loading-cover ref="loadingCover"></loading-cover>
</view>
</template>
@@ -97,7 +97,7 @@
}, 2000);
}
},1000);
if(data.state) this.state = data.state;
if (data.related_id) this.related_id = data.related_id ? data.related_id : 0;
this.isIphoneX = this.$util.uniappIsIPhoneX();
},
@@ -123,7 +123,7 @@
this.types = types;
this.$refs.mescroll.refresh(false);
},
getMemberCounponList(mescroll) {
getMemberCouponList(mescroll) {
this.showEmpty = false;
this.$api.sendRequest({
url: '/coupon/api/coupon/memberpage',

View File

@@ -162,11 +162,9 @@ export default {
},
goodsImg(imgStr) {
let imgs = imgStr.split(',');
return imgs[0]
? this.$util.img(imgs[0], {
size: 'mid'
})
: this.$util.getDefaultImage().goods;
return imgs[0] ? this.$util.img(imgs[0], {
size: 'mid'
}) : this.$util.getDefaultImage().goods;
},
imgError(index) {
dateList = [];

View File

@@ -2,88 +2,86 @@
<page-meta :page-style="themeColor"></page-meta>
<view>
<view v-if="indent == 'all' && memberInfo" class="info-wrap">
<!-- 头像@click="headImage" -->
<view class="info-list-cell info-item info-list-con" hover-class="cell-hover">
<text class="cell-tit">头像</text>
<!-- 头像 -->
<view @click="headImage" class="info-list-cell info-item info-list-con" hover-class="cell-hover">
<text class="cell-tit">{{ $lang('headImg') }}</text>
<view class="info-list-head cell-tip">
<image :src="memberInfo.headimg ? $util.img(memberInfo.headimg) : $util.getDefaultImage().head" @error="memberInfo.headimg = $util.getDefaultImage().head" mode="aspectFill" />
</view>
<text style="margin-right: 20rpx;"></text>
<text class="cell-more"></text>
</view>
<!-- 账号 -->
<!-- <view class="info-list-cell info-list-con" hover-class="cell-hover" v-if="memberInfo.is_edit_username == 1" @click="modifyInfo('username')">
<text class="cell-tit">账号</text>
<view class="info-list-cell info-list-con" hover-class="cell-hover" v-if="memberInfo.is_edit_username == 1" @click="modifyInfo('username')">
<text class="cell-tit">{{ $lang('account') }}</text>
<text class="cell-tip">{{ memberInfoformData.number }}</text>
<text class="cell-more"></text>
</view> -->
</view>
<!-- 账号 -->
<!-- <view class="info-list-cell info-list-con" hover-class="cell-hover" v-else>
<view class="info-list-cell info-list-con" hover-class="cell-hover" v-else>
<text class="cell-tit">{{ $lang('account') }}</text>
<text class="cell-tip cell-tip1">{{ memberInfoformData.number }}</text>
</view> -->
</view>
<!-- 昵称 -->
<view class="info-list-cell info-list-con" hover-class="cell-hover" @click="modifyInfo('name')">
<text class="cell-tit">昵称</text>
<text class="cell-tit">{{ $lang('nickname') }}</text>
<text class="cell-tip">{{ memberInfoformData.nickName }}</text>
<text class="cell-more"></text>
</view>
<!-- 真实姓名 -->
<view class="info-list-cell info-list-con" hover-class="cell-hover" @click="modifyInfo('realName')">
<text class="cell-tit">姓名</text>
<text class="cell-tit">{{ $lang('realName') }}</text>
<text class="cell-tip">{{ memberInfoformData.realName }}</text>
<text class="cell-more"></text>
</view>
<!-- 性别 -->
<view class="info-list-cell info-list-con" hover-class="cell-hover" @click="modifyInfo('sex')">
<text class="cell-tit">性别</text>
<text class="cell-tit">{{ $lang('sex') }}</text>
<text class="cell-tip">{{ memberInfoformData.sex }}</text>
<text class="cell-more"></text>
</view>
<!-- 生日 -->
<view class="info-list-cell info-list-con" hover-class="cell-hover" @click="modifyInfo('birthday')">
<text class="cell-tit">生日</text>
<text class="cell-tit">{{ $lang('birthday') }}</text>
<text class="cell-tip">{{ memberInfoformData.birthday }}</text>
<text class="cell-more"></text>
</view>
<!-- 手机号 -->
<view class="info-list-cell info-list-con" @click="modifyInfo('mobile')">
<text class="cell-tit">手机号</text>
<text v-if="memberInfoformData.user_tel == ''" class="cell-tip">密码</text>
<text class="cell-tit">{{ $lang('mobilePhone') }}</text>
<text v-if="memberInfoformData.user_tel == ''" class="cell-tip">{{ $lang('bindMobile') }}</text>
<text v-else class="cell-tip">{{ memberInfoformData.mobile }}</text>
<text class="cell-more"></text>
</view>
<!-- 密码 -->
<!-- <view class="info-list-cell info-list-con" hover-class="cell-hover" @click="modifyInfo('password')">
<text class="cell-tit">密码</text>
<view class="info-list-cell info-list-con" hover-class="cell-hover" @click="modifyInfo('password')">
<text class="cell-tit">{{ $lang('password') }}</text>
<!-- <text class="cell-tip">{{ memberInfo.password ? $lang('modify') : $lang('noset') }}</text> -->
<text class="cell-more"></text>
</view> -->
</view>
<!-- 支付密码 -->
<!-- <view class="info-list-cell info-list-con" hover-class="cell-hover" @click="modifyInfo('paypassword')">
<text class="cell-tit">{{ $lang('paypassword') }}</text>
<text class="cell-more"></text>
</view> -->
<!-- <view class="info-list-cell info-list-con" hover-class="cell-hover" @click="modifyInfo('address')">
<view class="info-list-cell info-list-con" hover-class="cell-hover" @click="modifyInfo('address')">
<text class="cell-tit">所在地址</text>
<text class="cell-tip" v-if="memberInfo.full_address">{{ memberInfo.full_address }}
{{ memberInfo.address }}</text>
<text class="cell-tip" v-else>去设置</text>
<text class="cell-more"></text>
</view> -->
</view>
<!-- 注销 -->
<view class="info-list-cell info-list-con" hover-class="cell-hover" @click="cancellation()">
<text class="cell-tit">注销账号</text>
<view class="info-list-cell info-list-con" hover-class="cell-hover" @click="modifyInfo('cancellation')" v-if="addonIsExist.membercancel && memberConfig.is_enable == 1">
<text class="cell-tit">{{ $lang('cancellation') }}</text>
<!-- <text class="cell-tip">{{ $lang('modify') }}</text> -->
<text class="cell-more"></text>
</view>
<!-- <view class="info-list-cell info-list-con" hover-class="cell-hover" @click="cancellation()" v-if="addonIsExist.membercancel && memberConfig.is_enable == 1">
<text class="cell-tit">注销账号</text>
<text class="cell-more"></text>
</view> -->
<!-- <view class="info-list-cell info-list-con" hover-class="cell-hover">
<view class="info-list-cell info-list-con" hover-class="cell-hover">
<text class="cell-tit">版本号</text>
<text class="cell-tip cell-tip1">{{ version }}</text>
</view> -->
</view>
<!-- 语言 -->
<!-- <view class="info-list-cell info-item info-list-con" hover-class="cell-hover" @click="modifyInfo('language')">
@@ -99,7 +97,7 @@
<!-- #endif -->
<view class="save-item" @click="logout">
<button type="primary">退出登录</button>
<button type="primary">{{ $lang('logout') }}</button>
</view>
</view>
@@ -294,6 +292,7 @@
button {
font-size: 30rpx;
border-radius: 90rpx;
}
}

View File

@@ -5,38 +5,38 @@
<!-- 修改用户名 -->
<view v-if="indent == 'username'" class="edit-info">
<view class="edit-info-box">
<text class="info-name">用户名</text>
<input class="uni-input info-content input-len" type="text" maxlength="30" placeholder="请输入" v-model="formData.username" />
<text class="info-name">{{ $lang('username') }}</text>
<input class="uni-input info-content input-len" type="text" maxlength="30" :placeholder="$lang('usernamePlaceholder')" v-model="formData.username" />
</view>
<view class="color-tip font-size-goods-tag set-pass-tips">用户名仅可修改一次请谨慎设置</view>
<view class="save-item" @click="save('username')">
<button type="primary">保存</button>
<button type="primary">{{ $lang('save') }}</button>
</view>
</view>
<!-- 修改昵称 -->
<view v-if="indent == 'name'" class="edit-info">
<view class="edit-info-box">
<text class="info-name">昵称</text>
<input class="uni-input info-content input-len" type="text" maxlength="30" placeholder="请输入" v-model="formData.nickName" />
<text class="info-name">{{ $lang('nickname') }}</text>
<input class="uni-input info-content input-len" type="text" maxlength="30" :placeholder="$lang('nickPlaceholder')" v-model="formData.nickName" />
</view>
<view class="save-item" @click="save('name')">
<button type="primary">保存</button>
<button type="primary">{{ $lang('save') }}</button>
</view>
</view>
<!-- 修改真实姓名 -->
<view v-if="indent == 'realName'" class="edit-info">
<view class="edit-info-box">
<text class="info-name">姓名</text>
<input class="uni-input info-content input-len" type="text" maxlength="30" placeholder="请输入" v-model="formData.realName" />
<text class="info-name">{{ $lang('realName') }}</text>
<input class="uni-input info-content input-len" type="text" maxlength="30" :placeholder="$lang('pleaseRealName')" v-model="formData.realName" />
</view>
<view class="save-item" @click="save('realName')">
<button type="primary">保存</button>
<button type="primary">{{ $lang('save') }}</button>
</view>
</view>
<!-- 修改性别 -->
<view v-if="indent == 'sex'" class="edit-info">
<view class="edit-info-box">
<text class="info-name">性别</text>
<text class="info-name">{{ $lang('sex') }}</text>
<radio-group @change="radioChange" class="edit-sex-list">
<label class="uni-list-cell uni-list-cell-pd" v-for="(item, index) in items" :key="item.value">
<view>
@@ -47,19 +47,19 @@
</radio-group>
</view>
<view class="save-item" @click="save('sex')">
<button type="primary">保存</button>
<button type="primary">{{ $lang('save') }}</button>
</view>
</view>
<!-- 修改生日 -->
<view v-if="indent == 'birthday'" class="edit-info edit-birthday-list">
<view class="edit-info-box">
<text class="info-name">生日</text>
<text class="info-name">{{ $lang('birthday') }}</text>
<picker mode="date" :value="formData.birthday" :start="startDate" :end="endDate" @change="bindDateChange">
<view class="uni-input">{{ formData.birthday ? formData.birthday : '请选择生日' }}</view>
</picker>
</view>
<view class="save-item" @click="save('birthday')">
<button type="primary">保存</button>
<button type="primary">{{ $lang('save') }}</button>
</view>
</view>
<!-- 修改密码 -->
@@ -75,55 +75,55 @@
</block>
<block v-else>
<view class="edit-info-box" v-if="memberInfo.password">
<text class="info-name">原密码</text>
<input class="uni-input info-content input-len" type="password" maxlength="30" placeholder="请输入" v-model="formData.currentPassword" />
<text class="info-name">{{ $lang('nowPassword') }}</text>
<input class="uni-input info-content input-len" type="password" maxlength="30" :placeholder="$lang('nowPassword')" v-model="formData.currentPassword" />
</view>
<block v-else>
<view class="edit-info-box">
<text class="info-name">新密码</text>
<input class="uni-input info-content" type="number" maxlength="4" placeholder="请输入" v-model="formData.mobileVercode" />
<text class="info-name">{{ $lang('confirmCode') }}</text>
<input class="uni-input info-content" type="number" maxlength="4" :placeholder="$lang('confirmCode')" v-model="formData.mobileVercode" />
<image :src="captcha.img" class="captcha" @click="getCaptcha"></image>
</view>
<view class="edit-info-box">
<text class="info-name">再次输入</text>
<input class="uni-input info-content" type="number" maxlength="6" placeholder="请输入" v-model="formData.mobileDynacode" />
<text class="info-name">{{ $lang('animateCode') }}</text>
<input class="uni-input info-content" type="number" maxlength="6" :placeholder="$lang('animateCode')" v-model="formData.mobileDynacode" />
<button type="primary" class="dynacode" @click="passwordMoblieCode()">{{ formData.mobileCodeText }}</button>
</view>
<view class="color-tip font-size-goods-tag set-pass-tips">
点击获取动态码将会向您已绑定的手机号{{ memberInfoformData.mobile | mobile }}发送验证码</view>
</block>
<view class="edit-info-box">
<text class="info-name">新密码</text>
<input class="uni-input info-content input-len" type="password" maxlength="30" placeholder="请输入" v-model="formData.newPassword" />
<text class="info-name">{{ $lang('newPassword') }}</text>
<input class="uni-input info-content input-len" type="password" maxlength="30" :placeholder="$lang('newPassword')" v-model="formData.newPassword" />
</view>
<view class="edit-info-box">
<text class="info-name">再次输入</text>
<input class="uni-input info-content input-len" type="password" maxlength="30" placeholder="请输入" v-model="formData.confirmPassword" />
<text class="info-name">{{ $lang('confirmPassword') }}</text>
<input class="uni-input info-content input-len" type="password" maxlength="30" :placeholder="$lang('confirmPassword')" v-model="formData.confirmPassword" />
</view>
<view class="save-item" @click="save('password')">
<button type="primary">保存</button>
<button type="primary">{{ $lang('save') }}</button>
</view>
</block>
</view>
<!-- 修改手机号 -->
<view v-if="indent == 'mobile'" class="edit-info">
<view class="edit-info-box">
<text class="info-name">手机号</text>
<input class="uni-input info-content" type="number" maxlength="11" placeholder="请输入" v-model="formData.mobile" />
<text class="info-name">{{ $lang('phoneNumber') }}</text>
<input class="uni-input info-content" type="number" maxlength="11" :placeholder="$lang('phoneNumber')" v-model="formData.mobile" />
</view>
<view class="edit-info-box">
<text class="info-name">验证码</text>
<input class="uni-input info-content" type="number" maxlength="4" placeholder="请输入" v-model="formData.mobileVercode" />
<text class="info-name">{{ $lang('confirmCode') }}</text>
<input class="uni-input info-content" type="number" maxlength="4" :placeholder="$lang('confirmCode')" v-model="formData.mobileVercode" />
<image :src="captcha.img" class="captcha" @click="getCaptcha"></image>
</view>
<view class="edit-info-box">
<text class="info-name">短信验证码</text>
<input class="uni-input info-content" type="number" maxlength="6" placeholder="请输入" v-model="formData.mobileDynacode" />
<button type="primary" class="dynacode" @click="bindMoblieCode()">{{ formData.mobileCodeText }}</button>
<text class="info-name">{{ $lang('animateCode') }}</text>
<input class="uni-input info-content" type="number" maxlength="6" :placeholder="$lang('animateCode')" v-model="formData.mobileDynacode" />
<button type="primary" class="dynacode" @click="bindMobileCode()">{{ formData.mobileCodeText }}</button>
</view>
<view class="save-item" @click="save('mobile')">
<button type="primary">保存</button>
<button type="primary">{{ $lang('save') }}</button>
</view>
</view>
<!-- 绑定手机号 -->
@@ -149,7 +149,7 @@
<input class="uni-input info-content" type="text" placeholder="详细地址" v-model="formData.address" />
</view>
<view class="save-item" @click="save('address')">
<button type="primary">保存</button>
<button type="primary">{{ $lang('save') }}</button>
</view>
</view>
</template>

View File

@@ -22,7 +22,7 @@
<block v-if="inviteList.length > 0">
<view class="invitelist_block">
<view class="invitelist">
<view class="list-item" v-for="(item, index) in inviteList">
<view class="list-item" v-for="(item, index) in inviteList" :key="index">
<view class="img color-base-border">
<image mode="aspectFit" :src="item.headimg == '' ? $util.img($util.getDefaultImage().head) : $util.img(item.headimg)"/>
</view>
@@ -37,8 +37,7 @@
<block v-if="item.balance > 0">{{ item.balance }}元现金红包</block>
<block v-if="(item.point > 0 || item.coupon_num) && item.balance > 0">+</block>
<block v-if="item.point > 0">{{ parseInt(item.point) }}积分</block>
<block v-if="item.point > 0 && item.balance > 0 && item.coupon_num > 0">+
</block>
<block v-if="item.point > 0 && item.balance > 0 && item.coupon_num > 0">+</block>
<block v-if="item.coupon_num > 0">{{ item.coupon_num }}张优惠券</block>
</view>
</view>
@@ -98,24 +97,24 @@
<view class="desc">
<view class="title_desc color-tip">分享给好友让好友通过你的分享链接进入并注册登录可获得以下奖励</view>
<view class="desc_list">
<view class="" v-if="$util.inArray('balance', info.type) != -1">
<view v-if="$util.inArray('balance', info.type) != -1">
<text></text>
可得{{ info.balance }}元红包奖励
</view>
<view class="" v-if="$util.inArray('point', info.type) != -1">
<view v-if="$util.inArray('point', info.type) != -1">
<text></text>
可得{{ info.point }}积分
</view>
<view class="" v-if="$util.inArray('coupon', info.type) != -1">
<view v-if="$util.inArray('coupon', info.type) != -1">
<text></text>
可得{{ info.coupon.split(',').length }}张优惠券
</view>
<view class="" v-if="info.max_fetch == 0">
<view v-if="info.max_fetch == 0">
<text></text>
可得奖励不受限制
</view>
<view class="" v-else>
<view v-else>
<text></text>
奖励上限为{{ info.max_fetch }}
</view>

View File

@@ -23,25 +23,28 @@
:interval="swiperConfig.interval" :duration="swiperConfig.duration" :circular="swiperConfig.circular"
:previous-margin="swiperConfig.previousMargin" :next-margin="swiperConfig.nextMargin"
@change="swiperChange" @animationfinish="animationfinish" :current="curIndex">
<swiper-item :class="levelList.length == 1 ? 'image-container-box' : ''" v-for="(item, i) in levelList"
:key="i">
<swiper-item :class="levelList.length == 1 ? 'image-container-box' : ''" v-for="(item, i) in levelList" :key="i">
<view class="image-container" :class="[
curIndex === 0
? i === listLen - 1
? 'item-left'
: i === 1
? i === 1
? 'item-right'
: i === listLen - 1
? 'item-left'
: 'item-center'
: curIndex === listLen - 1
? i === 0
? i === curIndex - 1
? 'item-left'
: i === curIndex + 1
? 'item-right'
: i === 0
? 'item-right'
: i === listLen - 2
? 'item-left'
: 'item-center'
: i === curIndex - 1
? 'item-left'
: i === curIndex + 1
? 'item-right'
? 'item-left'
: i === curIndex + 1
? 'item-right'
: 'item-center'
]">
<view class="slide-image" style="background-size: 100% 100%;background-repeat:no-repeat" :style="{
@@ -49,34 +52,35 @@
transitionDuration: '.3s',
transitionTimingFunction: 'ease'
}">
<image v-if="levelList[curIndex]['level_picture']" :src="$util.img(levelList[curIndex]['level_picture'])"/>
<image v-else :style="{backgroundColor:levelList[curIndex]['bg_color']}"/>
<image v-if="item['level_picture']" :src="$util.img(item['level_picture'])"/>
<image v-else :style="{backgroundColor:item['bg_color']}"/>
<view class="info">
<view class="level-detail" :style="{color:levelList[curIndex]['level_text_color']}">
{{ levelList[curIndex].level_name }}
<text class="isnow " :style="{color:levelList[curIndex]['level_text_color']}" v-if="levelId == item.level_id">当前等级</text>
<view class="level-detail" :style="{color:item['level_text_color']}">
{{ item.level_name }}
<text class="isnow " :style="{color:item['level_text_color']}" v-if="levelId == item.level_id">当前等级</text>
</view>
<view class="growr-name" :style="{color:levelList[curIndex]['level_text_color']}">当前成长值</view>
<view class="growr-value" :style="{color:levelList[curIndex]['level_text_color']}">{{ growth }}</view>
<view class="growr-name" :style="{color:item['level_text_color']}">当前成长值</view>
<view class="growr-value" :style="{color:item['level_text_color']}">{{ growth }}</view>
<block v-if="levelId == item.level_id">
<block v-if="levelList[curIndex + 1] != undefined">
<ns-progress :progress="levelList[curIndex + 1].rate"></ns-progress>
<view class="residue-growr-value"
:style="{color:levelList[curIndex]['level_text_color']}">
再获得{{ levelList[curIndex + 1].needGrowth > 0 ? levelList[curIndex + 1].needGrowth : 0 }}成长值成为{{
<block v-if="levelList[i + 1] != undefined">
<ns-progress :progress="levelList[i + 1].rate"></ns-progress>
<view class="residue-growr-value" :style="{color:item['level_text_color']}">
再获得{{ levelList[i + 1].needGrowth > 0 ? levelList[i + 1].needGrowth : 0 }}成长值成为下一等级
<!-- {{
levelList[curIndex + 1].level_name
}}
}} -->
</view>
</block>
<block v-else>
<view class="residue-growr-value" :style="{color:levelList[curIndex]['level_text_color']}">您现在已经是最高等级</view>
<view class="residue-growr-value" :style="{color:item['level_text_color']}">您现在已经是最高等级</view>
</block>
</block>
<block v-else>
<ns-progress :progress="levelList[curIndex].rate" v-if="levelList[curIndex].needGrowth > 0"></ns-progress>
<view class="residue-growr-value" v-if="levelList[curIndex].needGrowth > 0" :style="{color:levelList[curIndex]['level_text_color']}">
再获得{{ levelList[curIndex].needGrowth }}成长值成为{{ levelList[curIndex].level_name }}
<ns-progress :progress="item.rate" v-if="item.needGrowth > 0"></ns-progress>
<view class="residue-growr-value" v-if="item.needGrowth > 0" :style="{color:item['level_text_color']}">
再获得{{ item.needGrowth }}成长值成为当前等级
<!-- {{ levelList[curIndex].level_name }} -->
</view>
</block>
</view>
@@ -97,7 +101,7 @@
<image :src="$util.img('public/uniapp/level/consumption_discount.png')" mode="aspectFit"></image>
<view class="equity-content" :class="{ active: levelList[curIndex].point_feedback > 0 }">
<text>享受消费折扣服务</text>
<text class="equity-desc" v-if="levelList[curIndex].is_default == 1">不享受任何消费折扣和其他权益</text>
<text class="equity-desc" v-if="levelList[curIndex].consume_discount == 10">不享受任何消费折扣</text>
<text class="equity-desc" v-else>提供{{ levelList[curIndex].consume_discount }}折消费折扣</text>
</view>
</view>
@@ -220,7 +224,6 @@
}
},
nextIndex() {
let num = 0;
if (this.curIndex == this.levelList.length - 1) {
return this.curIndex;
} else {
@@ -287,8 +290,7 @@
this.levelList = res.data;
for (var i = 0; i < this.levelList.length; i++) {
if (this.levelList[i].send_coupon) {
this.levelList[i].coupon_length = this.levelList[i].send_coupon.split(',')
.length;
this.levelList[i].coupon_length = this.levelList[i].send_coupon.split(',').length;
}
}
this.levelId = this.memberInfo.member_level;
@@ -306,8 +308,7 @@
v.needGrowth = 0;
v.rate = 100;
} else {
v.needGrowth = (parseFloat(v.growth) - parseFloat(this.growth))
.toFixed(2);
v.needGrowth = (parseFloat(v.growth) - parseFloat(this.growth)).toFixed(2);
v.rate = (this.growth / v.growth).toFixed(2) * 100;
}
});

View File

@@ -44,12 +44,9 @@
},
onShow() {
if (!this.storeToken) {
this.$util.redirectTo(
'/pages_tool/login/login', {
back: '/pages_tool/member/modify_face'
},
'redirectTo'
);
this.$util.redirectTo('/pages_tool/login/login', {
back: '/pages_tool/member/modify_face'
}, 'redirectTo');
return;
}
@@ -75,7 +72,8 @@
data: {
app_type: app_type,
app_type_name: app_type_name,
images: rsp.base64
images: rsp.base64,
token: this.$store.state.token || '',
},
header: {
'content-type': 'application/x-www-form-urlencoded;application/json'

View File

@@ -136,8 +136,7 @@
title: '修改成功'
});
setTimeout(() => {
if (this.back) this.$util.redirectTo(this.back, {},
'redirectTo');
if (this.back) this.$util.redirectTo(this.back, {}, 'redirectTo');
else this.$util.redirectTo('/pages/member/index');
}, 2000);
} else {
@@ -164,7 +163,6 @@
this.step = 1;
this.password = '';
this.repassword = '';
this.oldpassword = '';
this.isSub = false;
this.$refs.input.clear();
},

View File

@@ -2,16 +2,10 @@
<page-meta :page-style="themeColor"></page-meta>
<view class="point">
<!-- #ifdef MP-WEIXIN -->
<view class="custom-navbar" :style="{
'padding-top': menuButtonBounding.top + 'px',
'height': menuButtonBounding.height + 'px'
}"
>
<view class="custom-navbar" :style="{ 'padding-top': menuButtonBounding.top + 'px', 'height': menuButtonBounding.height + 'px' }">
<view class="navbar-wrap">
<text class="iconfont icon-back_light back" @click="$util.redirectTo('/pages/member/index')"></text>
<view class="navbar-title">
我的积分
</view>
<view class="navbar-title">我的积分</view>
</view>
</view>
<!-- #endif -->
@@ -49,7 +43,7 @@
<text class="title">积分商城</text>
</view>
</view>
<!--
<view class="task-wrap">
<view class="title">做任务赚积分</view>
<view class="task-item" @click="toSign">
@@ -68,7 +62,7 @@
</view>
<view class="btn">去下单</view>
</view>
</view> -->
</view>
<ns-login ref="login"></ns-login>
<loading-cover ref="loadingCover"></loading-cover>
@@ -124,19 +118,6 @@ export default {
if (this.$refs.loadingCover) this.$refs.loadingCover.hide();
}
});
},
/**
* 获取充值提现配置
*/
getMemberrechargeConfig() {
this.$api.sendRequest({
url: '/memberrecharge/api/memberrecharge/config',
success: res => {
if (res.code >= 0 && res.data) {
this.memberrechargeConfig = res.data;
}
}
});
}
},
onBackPress(options) {

View File

@@ -1,11 +1,11 @@
<template>
<page-meta :page-style="themeColor"></page-meta>
<view>
<!-- <view class="tab color-bg">
<view class="tab color-bg">
<view class="tab-left">
<picker mode="date" :value="searchType.date" @change="bindDateChange" fields="month">
<picker :range="monthData" :value="monthIndex" @change="bindDateChange" >
<view class="uni-input">
{{ date }}
{{ monthData[monthIndex] }}
<text class="iconfont icon-iconangledown"></text>
</view>
</picker>
@@ -16,7 +16,7 @@
<text class="iconfont icon-iconangledown"></text>
</picker>
</view>
</view> -->
</view>
<mescroll-uni @getData="getData" class="member-point" ref="mescroll">
<view slot="list">
@@ -48,15 +48,11 @@
<script>
export default {
data() {
const currentDate = this.getDate({
format: true
});
return {
memberAccount: {
point: 0
},
dataList: [],
date: currentDate,
searchType: {
from_type: 0,
date: ''
@@ -68,47 +64,39 @@ export default {
}
], //积分类型
pointIndex: 0,
related_id: 0
related_id: 0,
monthData:[],
monthIndex:0,
};
},
onShow() {
if (!this.storeToken) {
this.$util.redirectTo(
'/pages_tool/login/login',
{
back: '/pages_tool/member/point'
},
'redirectTo'
);
this.$util.redirectTo('/pages_tool/login/login', {
back: '/pages_tool/member/point'
}, 'redirectTo');
}
},
onLoad(option) {
if (option.related_id) this.related_id = option.related_id ? option.related_id : 0;
if (option.from_type) this.searchType.from_type = option.from_type;
this.getPointType();
this.getMonthData();
},
methods: {
bindDateChange: function(e) {
var temp = e.target.value;
var tempArr = temp.split('-');
this.date = tempArr[0] + '年' + tempArr[1] + '月';
this.searchType.date = e.target.value;
var index = e.target.value;
this.monthIndex = index;
this.searchType.date = this.monthData[index];
this.$refs.mescroll.refresh();
},
getDate(type) {
const date = new Date();
let year = date.getFullYear();
let month = date.getMonth() + 1;
let day = date.getDate();
if (type === 'start') {
year = year - 60;
} else if (type === 'end') {
year = year + 2;
}
month = month > 9 ? month : '0' + month;
day = day > 9 ? day : '0' + day;
return `${year}${month}`;
getMonthData(){
this.$api.sendRequest({
url: '/api/memberaccount/monthData',
success: res => {
this.monthData = res.data;
this.searchType.date = res.data[0];
}
});
},
bindPickerChange(e) {
this.pointIndex = e.detail.value;
@@ -148,22 +136,9 @@ export default {
if (res.code >= 0) {
var data = res.data;
if (data.type == 1 && data.relate_order_id) {
switch (data.delivery_type) {
case 'store':
this.$util.redirectTo('/pages/order/detail_pickup', {
order_id: data.relate_order_id
});
break;
case 'local':
this.$util.redirectTo('/pages/order/detail_local_delivery', {
order_id: data.relate_order_id
});
break;
default:
this.$util.redirectTo('/pages/order/detail', {
order_id: data.relate_order_id
});
}
this.$util.redirectTo('/pages/order/detail', {
order_id: data.relate_order_id
});
} else {
this.$util.redirectTo('/pages/order/detail_point', {
order_id: data.order_id
@@ -276,7 +251,7 @@ export default {
background: #fff;
position: relative;
z-index: 9;
padding-top: 20rpx;
padding-top: 80rpx;
.head {
display: flex;

View File

@@ -39,23 +39,21 @@
}
.head-wrap {
// width: 100vw;
width: 100vw;
background-size: 100%;
padding: 32rpx 28rpx;
padding: 60rpx 68rpx 140rpx 68rpx;
box-sizing: border-box;
// border-radius: 0 0 100% 100%/0 0 70rpx 70rpx;
border-radius: 0 0 100% 100%/0 0 70rpx 70rpx;
overflow: hidden;
margin: 24rpx 28rpx;
border-radius: 24rpx;
// #ifdef MP-WEIXIN
padding-top: 160rpx;
// #endif
height: 352rpx;
.title {
text-align: left;
line-height: 1;
color: #F6F6F6;
margin-bottom: 24rpx;
}
.balance {
@@ -63,12 +61,7 @@
text-align: left;
line-height: 1;
margin-bottom: 20rpx;
// font-size: 64rpx;
font-size: 80rpx;
line-height: 112rpx;
font-weight: 500 !important;
font-family: PingFang SC;
font-size: 64rpx;
}
.flex-box {
@@ -94,65 +87,19 @@
}
}
}
.btns{
display: -webkit-box;
display: -webkit-flex;
display: flex;
-webkit-flex-wrap: nowrap;
flex-wrap: nowrap;
position: relative;
gap: 22rpx;
margin-top: 32rpx;
.btn{
-webkit-box-flex: 1;
-webkit-flex: 1;
flex: 1;
display: -webkit-box;
display: -webkit-flex;
display: flex;
-webkit-box-pack: center;
-webkit-justify-content: center;
justify-content: center;
-webkit-box-align: center;
-webkit-align-items: center;
align-items: center;
height: 80rpx;
box-sizing: border-box;
font-size: 32rpx;
-webkit-flex-shrink: 0;
flex-shrink: 0;
text-align: center;
font-family: PingFang SC;
border-radius: 180rpx;
background: transparent;
color: #fff;
font-style: normal;
font-weight: 500;
line-height: normal;
border: 2rpx solid #fff;
:nth-child(2) {
background: #fff;
color: #4285f8;
}
}
.recharge{
background: #fff;
color: #4285f8;
}
}
}
.menu-wrap {
border-radius: 20rpx;
margin: 0 24rpx;
padding: 0 24rpx;
padding: 0 30rpx;
background: #fff;
// transform: translateY(-90rpx);
transform: translateY(-90rpx);
.menu-item {
display: flex;
align-items: center;
padding: 4rpx 0;
padding: 12rpx 0;
.icon {
height: 80rpx;

View File

@@ -15,10 +15,9 @@ export default {
//请求数据
getData(mescroll) {
this.isShowEmpty = false;
let url = "/api/goodscollect/page"
let array = []
this.$api.sendRequest({
url: url,
url: '/api/goodscollect/page',
data: {
page_size: mescroll.size,
page: mescroll.num,

View File

@@ -184,22 +184,20 @@ export default {
this.memberInfoformData.nickName = this.memberInfo.nickname; //昵称
this.memberInfoformData.realName = this.memberInfo.realname ? this.memberInfo.realname : '请输入真实姓名'; //真实姓名
this.memberInfoformData.sex = this.memberInfo.sex == 0 ? '未知' : this.memberInfo.sex == 1 ? '男' : '女'; //性别
this.memberInfoformData.birthday = this.memberInfo.birthday ? this.$util.timeStampTurnTime(this.memberInfo.birthday, 'YYYY-MM-DD') : '请选择生日'; //生日
this.memberInfoformData.birthday = this.memberInfo.birthday ? this.$util.timeStampTurnTime(this.memberInfo.birthday, 'Y-m-d') : '请选择生日'; //生日
this.memberInfoformData.mobile = this.memberInfo.mobile; //手机号
this.formData.username = this.memberInfo.username; //用户名
this.formData.nickName = this.memberInfo.nickname; //昵称
this.formData.realName = this.memberInfo.realname; //真实姓名
this.formData.sex = this.memberInfo.sex; //性别
this.formData.birthday = this.memberInfo.birthday ? this.$util.timeStampTurnTime(this.memberInfo.birthday, 'YYYY-MM-DD') : ''; //生日
this.formData.birthday = this.memberInfo.birthday ? this.$util.timeStampTurnTime(this.memberInfo.birthday, 'Y-m-d') : ''; //生日
this.formData.provinceId = this.memberInfo.province_id;
this.formData.cityId = this.memberInfo.city_id;
this.formData.districtId = this.memberInfo.district_id;
this.formData.fullAddress = this.memberInfo.full_address;
this.formData.address = this.memberInfo.address;
if (this.memberInfo.full_address) this.defaultRegions = [this.memberInfo
.province_id, this.memberInfo.city_id, this.memberInfo.district_id
];
if (this.memberInfo.full_address) this.defaultRegions = [this.memberInfo.province_id, this.memberInfo.city_id, this.memberInfo.district_id];
},
// 切换编辑项
modifyInfo(action) {
@@ -239,35 +237,6 @@ export default {
});
}
},
cancellation() {
uni.showModal({
title: '风险提示',
content: '确定要注销当前账号吗?',
confirmColor: '#000000',
success: res => {
if (res.confirm) {
this.$api.sendRequest({
url: '/membercancel/api/membercancel/apply',
success: rres => {
let cancellation_condition = rres.data.is_audit;
if (rres.code >= 0) {
this.$store.commit('setToken', '');
this.$store.commit('setMemberInfo', '');
this.$store.dispatch('emptyCart');
this.$store.dispatch('emptyCart');
uni.removeStorageSync('authInfo');
this.$util.redirectTo('/pages/member/index');
} else {
this.$util.showToast({
title: rres.message
});
}
}
});
}
}
});
},
getCancelStatus() {
this.$api.sendRequest({
url: '/membercancel/api/membercancel/info',
@@ -288,7 +257,7 @@ export default {
});
}
} else {
this.$util.redirectTo('/pages_tool/member/assets', {
this.$util.redirectTo('/pages_tool/member/cancellation', {
back: '/pages_tool/member/info'
});
}
@@ -327,8 +296,7 @@ export default {
this.$store.commit('setToken', '');
this.$store.commit('setMemberInfo', '');
this.$store.dispatch('emptyCart');
this.$store.dispatch('emptyCart');
uni.removeStorageSync('authInfo');
// uni.removeStorageSync('authInfo');
this.$util.redirectTo('/pages/member/index');
}
}
@@ -616,30 +584,25 @@ export default {
name: 'currentPassword',
checkType: 'required',
errorMsg: this.$lang("pleaseInputOldPassword")
},
{
name: 'newPassword',
checkType: 'required',
errorMsg: this.$lang("pleaseInputNewPassword")
}
];
}, {
name: 'newPassword',
checkType: 'required',
errorMsg: this.$lang("pleaseInputNewPassword")
}];
} else {
var rule = [{
name: 'mobileVercode',
checkType: 'required',
errorMsg: this.$lang("confirmCodeInput")
},
{
name: 'mobileDynacode',
checkType: 'required',
errorMsg: this.$lang("animateCodeInput")
},
{
name: 'newPassword',
checkType: 'required',
errorMsg: this.$lang("pleaseInputNewPassword")
}
];
}, {
name: 'mobileDynacode',
checkType: 'required',
errorMsg: this.$lang("animateCodeInput")
}, {
name: 'newPassword',
checkType: 'required',
errorMsg: this.$lang("pleaseInputNewPassword")
}];
}
let regConfig = this.registerConfig;
@@ -725,7 +688,7 @@ export default {
// ------------------------修改手机号------------------------------
// 验证手机号
vertifyMobile() {
verifyMobile() {
var rule = [{
name: 'mobile',
checkType: 'required',
@@ -746,7 +709,7 @@ export default {
},
// 检测手机号是否存在
async checkMobile() {
if (!this.vertifyMobile()) return;
if (!this.verifyMobile()) return;
let res = await this.$api.sendRequest({
url: '/api/member/checkmobile',
data: {
@@ -764,7 +727,7 @@ export default {
},
// 发送短信动态码
async bindMoblieCode() {
async bindMobileCode() {
if (this.seconds != 120) return;
var rule = [{
name: 'mobile',

View File

@@ -52,7 +52,7 @@ export default {
},
copyUrl() {
let text = this.$config.h5Domain + '/pages/index/index';
if (this.memberInf && this.memberInfo.member_id) text += '?source_member=' + this.memberInfo.member_id;
if (this.memberInfo && this.memberInfo.member_id) text += '?source_member=' + this.memberInfo.member_id;
this.$util.copy(text, () => {
this.closeSharePopup();
});

View File

@@ -52,8 +52,7 @@ export default {
}
this.headimg = this.memberInfo.headimg;
this.signDaysSeries = this.memberInfo.sign_days_series;
this.getMemberInfo();
this.getSignPointData();
this.getSignGrowthData();
this.setPublicShare();
@@ -61,6 +60,16 @@ export default {
this.getIsSign();
},
methods: {
getMemberInfo(){
this.$api.sendRequest({
url: '/api/member/info',
success: (res) => {
if (res.code >= 0) {
this.signDaysSeries = res.data.sign_days_series;
}
}
});
},
// 获取签到累积积分
getSignPointData() {
this.$api.sendRequest({

View File

@@ -0,0 +1,569 @@
<template>
<page-meta :page-style="themeColor"></page-meta>
<view class="signin">
<block v-if="signState">
<!-- #ifdef H5 -->
<view class="head-nav color-base-bg"></view>
<!-- #endif -->
<view class="sigin-box">
<view class="sigin-bg"></view>
<view class="signin-wrap">
<view class="member-info">
<view class="headimg">
<view class="headimg-img">
<image :src="headimg ? $util.img(headimg) : $util.getDefaultImage().head" mode="aspectFill" @error="headimg = $util.getDefaultImage().head"/>
</view>
<view class="signin-info">
<view>
已连续签到
<text>{{ signDaysSeries }}</text>
</view>
<view>{{ hasSign ? '明日' : '今日' }}签到可获得{{ pointTomorrow }}积分</view>
</view>
</view>
<view class="point-box" @click="sign()">
<image :src="$util.img(hasSign == 1 ? 'public/uniapp/signin/sign-btn-res.png' : 'public/uniapp/signin/sign-btn.png')" mode="widthFix"/>
</view>
</view>
<view class="signin-days-wrap">
<view class="signin-desc">连续签到领好礼</view>
<view class="signin-day-list">
<view class="signin-day-con">
<view class="signin-day-scroll">
<block v-for="(item, index) in showSignDays">
<view v-if="!item.is_last" :id="'id_' + item.day" class="signin-day-item"
:class="{
signed: item.day < signDaysSeries || (item.day == signDaysSeries && hasSign == 0) || (item.day == signDaysSeries && hasSign == 1)
}">
<view class="day">{{ item.day }}</view>
<image :src="$util.img('public/uniapp/signin/sign-icon.png')"></image>
<view class="point">{{ item.point }}积分</view>
</view>
<view v-else :id="'id_' + item.day" class="signin-day-item last" :class="{
signed: item.day < signDaysSeries || (item.day == signDaysSeries && hasSign == 0) || (item.day == signDaysSeries && hasSign == 1)
}">
<view>
<view class="day">{{ item.day }}</view>
<view class="point">{{ item.point }}积分</view>
</view>
<image :src="$util.img('public/uniapp/signin/sign-box.png')" mode="widthFix"/>
</view>
</block>
</view>
</view>
</view>
</view>
<view class="my-signin">
<view class="my-signin-title">我的签到</view>
<view class="my-signin-con">
<view class="my-signin-item">
<image :src="$util.img('public/uniapp/signin/sign-bg-yellow.png')"></image>
<view class="my-signin-item-num">积分{{ signPoint }}</view>
<view>累计获得积分</view>
</view>
<view class="my-signin-item">
<image :src="$util.img('public/uniapp/signin/sign-bg-pink.png')"></image>
<view class="my-signin-item-num">成长值{{ signGrowth }}</view>
<view>累计获得成长值</view>
</view>
</view>
</view>
<view class="signin-rule" v-if="rule && rule.length">
<view class="signin-rule-title">签到规则</view>
<view class="signin-rule-con">
<view class="rule-item" v-for="(item, index) in rule" :key="index">
<block v-if="index == 0">1. 每日签到奖励</block>
<block v-else>{{ index + 1 + '. 连续签到' + item.day + '天额外奖励' }}</block>
<text v-if="item.point">{{ item.point + '积分 ' }}</text>
<text v-if="item.growth">{{ item.growth + '成长值' }}</text>
</view>
<view class="rule-item">
{{ rule.length + 1 }}.连续签到{{ cycle }}天为一个周期连续签到天数签满一个周期或者签到中断将清空连签天数重新计算签到天数
</view>
<view class="rule-item">
{{ rule.length + 2 }}. 用户可在签到页每日签到一次签到后可获得每日签到奖励连续签到天数达到连签奖励的当天可额外获得连签奖励
</view>
</view>
</view>
</view>
</view>
<view @touchmove.prevent.stop>
<uni-popup ref="uniPopup" type="center" class="wap-floating" :maskClick="false">
<view class="popup-box" @click="close()">
<text class="iconfont icon-close" @click="$refs.uniPopup.close()"></text>
<image class="pic" :src="$util.img('public/uniapp/signin/bg1.png')"></image>
<view class="popup-content">
<view class="popup-content-wrap">
<view class="title" v-if="successTip.point || successTip.growth">
<text>恭喜您获得</text>
<text v-if="successTip.point">
<text class="num color-base-text">{{ successTip.point }}</text>
积分
</text>
<text v-if="successTip.growth">
<text class="num color-base-text">{{ successTip.growth }}</text>
成长值
</text>
</view>
<view class="desc">连续签到可获得更多奖励</view>
</view>
<view class="other-info color-base-bg" @click="$refs.uniPopup.close()">知道了</view>
</view>
</view>
</uni-popup>
</view>
<!-- 悬浮按钮 -->
<hover-nav :need="true"></hover-nav>
</block>
<block v-else><ns-empty text="暂未开启签到奖励" subText="请到营销中心开启签到奖励" :isIndex="false"></ns-empty></block>
<loading-cover ref="loadingCover"></loading-cover>
<ns-login ref="login"></ns-login>
<!-- #ifdef MP-WEIXIN -->
<!-- 小程序隐私协议 -->
<privacy-popup ref="privacyPopup"></privacy-popup>
<!-- #endif -->
</view>
</template>
<script>
import uniCalender from '@/pages_tool/components/uni-calendar/uni-calendar.vue';
import uniPopup from '@/components/uni-popup/uni-popup.vue';
import signIn from './public/js/signin.js';
export default {
components: {
uniPopup,
uniCalender
},
mixins: [signIn]
};
</script>
<style lang="scss">
uni-page-body,
uni-page-refresh {
height: 100%;
}
.signin {
position: relative;
height: 100%;
.head-nav {
width: 100%;
height: var(--status-bar-height);
}
.head-nav.active {
padding-top: 40rpx;
}
.sigin-box {
position: relative;
}
.sigin-bg {
width: 100%;
position: absolute;
top: 0;
z-index: 1;
background: linear-gradient(136deg, #fe7849 0%, #ff1959 100%);
height: 500rpx;
border-radius: 0 0 100% 100%/0 0 20% 20%;
image {
width: 100%;
}
}
.signin-wrap {
padding: 0 30rpx;
}
.member-info {
position: relative;
z-index: 9;
padding: 74rpx 0 55rpx;
display: flex;
align-items: center;
justify-content: space-between;
.headimg {
display: flex;
align-items: center;
.headimg-img {
width: 100rpx;
height: 100rpx;
background: #fff;
border: 0px solid #fff;
border-radius: 50%;
overflow: hidden;
margin-right: 20rpx;
image {
width: 100%;
height: 100%;
}
}
.signin-info {
view {
color: #ffffff;
font-size: 24rpx;
line-height: 1;
&:first-child {
margin-bottom: 18rpx;
font-size: 32rpx;
font-weight: bold;
text {
margin: 0 9rpx;
}
}
}
}
}
.point-box {
display: flex;
align-items: center;
height: 68rpx;
padding: 13rpx 0 13rpx 0;
box-sizing: border-box;
image {
width: 160rpx;
height: 68rpx;
max-height: 80rpx;
margin-bottom: -6rpx;
}
.point {
margin-left: 14rpx;
font-size: $font-size-toolbar;
color: #ffffff;
}
}
}
.signin-days-wrap {
position: relative;
z-index: 9;
background-color: #ffffff;
border-radius: 18rpx;
padding: 30rpx 0 30rpx;
height: 468rpx;
.signin-desc {
font-size: 32rpx;
font-weight: bold;
line-height: 1;
padding: 0 30rpx;
}
.signin-day-list {
margin-top: 30rpx;
display: flex;
justify-content: space-between;
padding: 0 30rpx;
.signin-day-con {
width: 100%;
}
.signin-day-scroll {
display: flex;
flex-wrap: wrap;
width: 100%;
flex-direction: row;
white-space: nowrap;
line-height: 1;
.signin-day-item {
flex-shrink: 0;
background: #f5f6fa;
margin-right: 30rpx;
width: calc((100% - 90rpx) / 4);
height: 155rpx;
border-radius: 18rpx;
margin-bottom: 24rpx;
&:last-child {
margin-right: 0;
width: calc((100% - 30rpx) / 2);
}
&:nth-child(4n) {
margin-right: 0;
}
image {
width: 60rpx;
height: 60rpx;
margin-top: 10rpx;
}
&.signed {
background: linear-gradient(136deg, #fe7849 0%, #ff1959 100%);
view {
color: #ffffff;
}
}
&.last {
display: flex;
flex-direction: row;
>view {
width: 50%;
.point {
margin: 15rpx;
}
}
image {
width: 40%;
margin-top: 20rpx;
max-width: 130rpx;
}
}
}
.reward {
image {
width: 100%;
height: 100%;
margin-top: 0;
}
}
}
.signin-day-item {
display: inline-block;
width: 85rpx;
height: 103rpx;
border-radius: 4rpx;
text-align: center;
background-color: #f6f6fb;
flex-shrink: 0;
.day {
font-size: 24rpx;
line-height: 1;
margin-top: 18rpx;
font-weight: bold;
}
.point {
font-size: 20rpx;
line-height: 1;
margin-top: -4rpx;
color: #abb0c1;
}
image {
width: 100%;
height: 100%;
}
}
}
.signin-btn {
position: absolute;
width: 100%;
height: 80rpx;
bottom: 40rpx;
text-align: center;
button {
display: inline-block;
width: 442rpx;
height: 100%;
color: #ffffff;
background-color: #ff4544;
}
.btn-active {
color: $color-title;
background-color: #e1e1e1;
}
}
}
.my-signin {
padding: 30rpx;
margin-top: 30rpx;
background-color: #ffffff;
border-radius: 18rpx;
.my-signin-title {
font-size: 32rpx;
line-height: 1;
font-weight: bold;
}
.my-signin-con {
display: flex;
justify-content: space-between;
margin-top: 30rpx;
}
.my-signin-item {
width: 300rpx;
height: 155rpx;
position: relative;
image {
width: 300rpx;
height: 155rpx;
position: absolute;
top: 0;
left: 0;
}
.my-signin-item-num {
position: relative;
z-index: 9;
padding: 44rpx 28rpx 0;
line-height: $font-size-toolbar;
font-weight: bold;
}
view:last-child {
position: relative;
z-index: 9;
color: #abb0c1;
padding-left: 28rpx;
font-size: $font-size-activity-tag;
line-height: 1;
margin-top: 16rpx;
}
}
}
.signin-rule {
margin-top: 30rpx;
background-color: #ffffff;
border-radius: 18rpx;
padding: 30rpx;
.signin-rule-title {
display: flex;
align-items: center;
justify-content: flex-start;
line-height: $font-size-toolbar;
font-size: 32rpx;
font-weight: bold;
text-align: left;
}
.signin-rule-con {
margin-top: 30rpx;
padding: 0 0;
.rule-item {
font-size: 26rpx;
color: $color-sub;
}
}
}
}
.popup-box {
position: relative;
top: 0;
display: flex;
flex-direction: column;
align-items: center;
.icon-close {
width: 42rpx;
height: 42rpx;
border: 1px solid #fff;
display: flex;
align-items: center;
justify-content: center;
border-radius: 50%;
color: #fff;
position: absolute;
top: 70rpx;
right: 0;
}
.pic {
width: 274rpx;
height: 200rpx;
position: relative;
margin-bottom: -30rpx;
}
.popup-content {
background: #ffffff;
width: 70vw;
margin-top: -100rpx;
border-radius: 20rpx;
padding: 0 60rpx;
padding-bottom: 40rpx;
box-sizing: border-box;
background-size: 100% 100rpx;
}
.popup-content-wrap {
display: flex;
flex-direction: column;
align-items: center;
.title {
font-size: $font-size-base;
margin-top: 160rpx;
color: #999;
.num {
font-size: 32rpx;
}
}
.desc {
color: #999;
font-size: $font-size-tag;
}
}
.other-info {
width: 300rpx;
height: 70rpx;
border-radius: 10rpx;
margin: 0 auto;
color: #fff;
display: flex;
align-items: center;
justify-content: center;
margin-top: 40rpx;
}
}
</style>
<style scoped>
.wap-floating>>>.uni-popup__wrapper.uni-custom .uni-popup__wrapper-box {
background: none !important;
display: flex !important;
flex-direction: column !important;
align-items: center !important;
}
</style>

View File

@@ -1,7 +1,7 @@
<template>
<page-meta :page-style="themeColor"></page-meta>
<view>
<mescroll-uni @getData="getData" class="member-point">
<mescroll-uni @getData="getData" ref="mescroll" class="member-point">
<view slot="list">
<block v-if="dataList.length">
<view class="detailed-wrap">
@@ -15,8 +15,29 @@
</view>
<view class="right-wrap">
<view class="num color-base-text">{{ item.apply_money }}</view>
<view class="status-name">{{ item.status_name }}</view>
<!-- #ifdef H5 -->
<view class="actions" v-if="$util.isWeiXin() && isWithdrawWechat && item.transfer_type == 'wechatpay' && item.status == 1" @click.stop="toTransfer(item.id)">
<view class="act-btn">收款</view>
</view>
<view class="status-name" v-else :style="item.status == -1 || item.status == -2 ? 'color:red;' : ''">{{ item.status_name }}</view>
<!-- #endif -->
<!-- #ifdef MP-WEIXIN -->
<view class="actions" v-if="isWithdrawWechat && item.transfer_type == 'wechatpay' && item.status == 1" @click.stop="toTransfer(item.id)">
<view class="act-btn">收款</view>
</view>
<view class="status-name" v-else :style="item.status == -1 || item.status == -2 ? 'color:red;' : ''">{{ item.status_name }}</view>
<!-- #endif -->
</view>
<view v-if="item.status == -1" class="fail-reason">
拒绝原因{{ item.refuse_reason }}
</view>
<view v-if="item.status == -2" class="fail-reason">
失败原因{{ item.fail_reason }}
</view>
</view>
</view>
</view>
@@ -34,21 +55,36 @@
export default {
data() {
return {
dataList: []
dataList: [],
isWithdrawWechat: 0
};
},
onShow() {
if (!this.storeToken) {
this.$util.redirectTo(
'/pages_tool/login/login',
{
back: '/pages_tool/member/point'
},
'redirectTo'
);
this.$util.redirectTo('/pages_tool/login/login', {
back: '/pages_tool/member/point'
}, 'redirectTo');
}
if(this.$refs.mescroll) this.$refs.mescroll.refresh();
this.getWithdrawConfig()
},
methods: {
toTransfer(id) {
this.$util.redirectTo('/pages_tool/member/withdrawal_detail', {
id: id,
action: 'transfer'
});
},
getWithdrawConfig() {
this.$api.sendRequest({
url: '/wechatpay/api/transfer/getWithdrawConfig',
success: res => {
if (res.code == 0){
this.isWithdrawWechat = res.data.transfer_type;
}
},
});
},
//获得列表数据
getData(mescroll) {
this.$api.sendRequest({
@@ -165,6 +201,22 @@ export default {
font-size: $font-size-toolbar;
}
}
.fail-reason{
font-size: $font-size-base;
color:$color-tip;
}
.actions{
display: flex;
justify-content: flex-end;
.act-btn{
color: #fff;
background-color: $base-color;
font-size: $font-size-base;
line-height: 1;
padding: 10rpx $padding;
border-radius: $border-radius;
}
}
}
}
}

View File

@@ -2,7 +2,7 @@
<page-meta :page-style="themeColor"></page-meta>
<view>
<view class="money-wrap">
<text>-{{ detail.apply_money }}</text>
<text>{{ detail.apply_money }}</text>
</view>
<!-- 状态0待审核1.待转账2已转账 -1拒绝' -->
@@ -48,37 +48,113 @@
<text class="value">{{ $util.timeStampTurnTime(detail.payment_time) }}</text>
</view>
</view>
<!-- #ifdef H5 -->
<view class="operations" v-if="$util.isWeiXin() && withdrawInfo.transfer_type && detail.transfer_type == 'wechatpay' && detail.status == 1">
<button class="operation" type="primary" @click="merchantTransfer()">收款</button>
</view>
<!-- #endif -->
<!-- #ifdef MP-WEIXIN -->
<view class="operations" v-if="withdrawInfo.transfer_type && detail.transfer_type == 'wechatpay' && detail.status == 1">
<button class="operation" type="primary" @click="merchantTransfer()">收款</button>
</view>
<!-- #endif -->
<loading-cover ref="loadingCover"></loading-cover>
</view>
</template>
<script>
export default {
data() {
return {
id: 0,
detail: {}
detail: {},
withdrawInfo: {},
requestCount: 0
};
},
onLoad(option) {
async onLoad(option) {
this.id = option.id || 0;
await this.getWithdrawConfig()
if(option.action) this.merchantTransfer();
},
onShow() {
if (this.storeToken) {
this.getDetail();
} else {
this.$util.redirectTo(
'/pages_tool/login/login',
{
back: '/pages_tool/member/point'
},
'redirectTo'
);
this.$util.redirectTo('/pages_tool/login/login', {
back: '/pages_tool/member/point'
}, 'redirectTo');
}
},
onPullDownRefresh() {
this.getDetail();
},
methods: {
getDetail() {
merchantTransfer() {
uni.showLoading({})
var app_id = ''
// #ifdef MP
app_id = this.withdrawInfo.weapp_appid;
// #endif
// #ifdef H5
if(this.$util.isWeiXin()){
app_id = this.withdrawInfo.wechat_appid;
}
// #endif
this.$util.merchantTransfer(
{
transfer_type: 'member_withdraw',
id: this.id,
},
{
mch_id: this.withdrawInfo.mch_id,
app_id: app_id,
},
(res)=>{
if (res.err_msg === 'requestMerchantTransfer:ok') {
this.updateStatusToInProcess(()=>{
this.getDetail(true);
});
}
// #ifdef MP
if (res.errMsg === 'requestMerchantTransfer:ok') {
this.updateStatusToInProcess(()=>{
this.getDetail(true);
});
}
// #endif
}
);
},
async getWithdrawConfig() {
let res = await this.$api.sendRequest({
url: '/wechatpay/api/transfer/getWithdrawConfig',
async: false,
});
if (res.code == 0){
this.withdrawInfo = res.data;
}
},
//修改收款状态为收款中
updateStatusToInProcess(callback){
if (this.$refs.loadingCover) this.$refs.loadingCover.show();
this.$api.sendRequest({
url: '/wechatpay/api/transfer/inprocess',
data: {
from_type: 'member_withdraw',
relate_tag : this.id,
},
success: (res)=>{
if(res.code >= 0){
if (this.$refs.loadingCover) this.$refs.loadingCover.hide();
typeof callback == 'function' && callback();
}
}
});
},
getDetail(is_loop = false) {
this.$api.sendRequest({
url: '/api/memberwithdraw/detail',
data: {
@@ -87,6 +163,22 @@ export default {
success: res => {
if (res.data) {
this.detail = res.data;
if(is_loop && this.requestCount < 10 && this.detail.status == 3){
this.requestCount++;
setTimeout(()=>{
this.getDetail(true)
},1000)
}
// if(mode && this.detail.status == 1){
// // 提现状态还没有修改
// if(this.requestCount < 10 && this.detail.status == 1){
// this.requestCount++;
// setTimeout(()=>{
// this.getDetail('transferComplete')
// },1000)
// }
// }
uni.stopPullDownRefresh();
}
if (this.$refs.loadingCover) this.$refs.loadingCover.hide();
},
@@ -128,4 +220,30 @@ export default {
}
}
}
.operations {
margin-top: 60rpx;
bottom: 0;
width: 100%;
// background: #fff;
position: fixed;
padding: 0 30rpx;
box-sizing: border-box;
padding-bottom: constant(safe-area-inset-bottom);
padding-bottom: env(safe-area-inset-bottom);
z-index: 10;
.operation {
height: 80rpx;
line-height: 80rpx;
border-radius: 80rpx;
margin: 30rpx 0 30rpx;
font-size: $font-size-toolbar;
text {
margin-right: 10rpx;
font-size: $font-size-base;
}
}
}
</style>