feat: 新增多语言文案与组件国际化适配

本次提交完成了大量多语言相关的新增与优化工作:
1. 新增充值、案例、会员资产、订单等页面的中文/英文翻译文案
2. 新增企业微信客服、时间选择、支付弹窗等组件的多语言包
3. 优化工具函数与自定义页面的多语言适配,替换硬编码提示文案
4. 新增会员等级规则、积分商品、退款管理等页面的国际化支持
5. 修复企业微信JS-SDK的错误提示文案硬编码问题
This commit is contained in:
2026-06-26 09:09:46 +08:00
parent 2d8846c64c
commit 066ca61d97
97 changed files with 2704 additions and 716 deletions

View File

@@ -19,7 +19,7 @@
<view style="padding:20rpx;">
<view style="font-size:36rpx;font-weight:600;">{{item.$orig.title}}</view>
<view>{{item.$orig.desc}}</view>
<view style="font-size:24rpx;color:#888;padding-top:20rpx;">{{"完成时间:" + item.g3}}</view>
<view style="font-size:24rpx;color:#888;padding-top:20rpx;">{{ $lang('completionTime', { time: item.g3 }) }}</view>
<block v-if="item.$orig.files_url">
<view @tap="toDetail(item.$orig)" class="item">
<view class="article-img">
@@ -28,7 +28,7 @@
<view class="info-wrap">
<view class="title">{{item.$orig.files_title}}</view>
<view class="read-wrap">
<text>查看PDF文件</text>
<text>{{ $lang('viewPdfFile') }}</text>
</view>
</view>
</view>
@@ -44,35 +44,35 @@
<uni-popup ref="informationPopup" class="vue-ref" type="bottom" @change="change">
<view class="liuyan-popup-layer popup-layer">
<view @tap="closeinformationPopup" class="head-wrap">
<text>在线留言</text>
<text>{{ $lang('messagePopup.title') }}</text>
<text class="iconfont icon-close"></text>
</view>
<scroll-view class="liuyan-body" scroll-y="true">
<view style="padding:0 30rpx;">
<view class="fui-cell-group">
<view class="fui-cell">
<view class="fui-cell-label">姓名</view>
<view class="fui-cell-label">{{ $lang('form.name') }}</view>
<view class="fui-cell-info">
<input class="fui-input" placeholder="请输入您的姓名" v-model="Form.realname" />
<input class="fui-input" :placeholder="$lang('form.namePlaceholder')" v-model="Form.realname" />
</view>
</view>
<view class="fui-cell">
<view class="fui-cell-label">联系方式</view>
<view class="fui-cell-label">{{ $lang('form.contact') }}</view>
<view class="fui-cell-info">
<input class="fui-input" maxlength="11" placeholder="请输入您的手机号" type="number" v-model="Form.mobile" />
<input class="fui-input" maxlength="11" :placeholder="$lang('form.mobilePlaceholder')" type="number" v-model="Form.mobile" />
</view>
</view>
<view class="fui-cell">
<view class="fui-cell-label" style="position:absolute;top:10px;">留言内容</view>
<view class="fui-cell-label" style="position:absolute;top:10px;">{{ $lang('form.messageContent') }}</view>
<view class="fui-cell-info" style="margin-left:160rpx;border:solid 2rpx #eee;">
<textarea class="textarea" style="font-size:28rpx;padding:10rpx;" placeholder="请输入留言内容" v-model="Form.remark"></textarea>
<textarea class="textarea" style="font-size:28rpx;padding:10rpx;" :placeholder="$lang('form.messagePlaceholder')" v-model="Form.remark"></textarea>
</view>
</view>
</view>
</view>
</scroll-view>
<view class="button-box">
<button type="primary" @tap="save">提交</button>
<button type="primary" @tap="save">{{ $lang('common.submit') }}</button>
</view>
</view>
</uni-popup>
@@ -140,7 +140,7 @@ export default {
},
toDetail(item) {
const url = item.files_url;
uni.showLoading({ title: "正在加载" });
uni.showLoading({ title: this.$lang('toast.loading') });
try {
uni.downloadFile({
url: url,
@@ -164,7 +164,7 @@ export default {
},
complete: (res) => {
if (res.statusCode === 404) {
uni.showToast({ title: "文件不存在", icon: "none" });
uni.showToast({ title: this.$lang('toast.fileNotExist'), icon: "none" });
}
}
});
@@ -186,7 +186,7 @@ export default {
},
onTapDoc(item) {
const url = this.$util.img(item.files_url);
uni.showLoading({ title: "正在加载" });
uni.showLoading({ title: this.$lang('toast.loading') });
try {
uni.downloadFile({
url: url,
@@ -210,7 +210,7 @@ export default {
},
complete: (res) => {
if (res.statusCode === 404) {
uni.showToast({ title: "文件不存在", icon: "none" });
uni.showToast({ title: this.$lang('toast.fileNotExist'), icon: "none" });
}
}
});
@@ -220,7 +220,7 @@ export default {
},
share(item) {
const url = this.$util.img(item.files_url);
uni.showLoading({ title: "正在加载" });
uni.showLoading({ title: this.$lang('toast.loading') });
try {
uni.downloadFile({
url: url,
@@ -241,7 +241,7 @@ export default {
},
complete: (res) => {
if (res.statusCode === 404) {
uni.showToast({ title: "文件不存在", icon: "none" });
uni.showToast({ title: this.$lang('toast.fileNotExist'), icon: "none" });
}
}
});
@@ -286,7 +286,7 @@ export default {
uni.setClipboardData({
data: text,
success: () => {
uni.showToast({ title: "复制成功", icon: "success", duration: 2000 });
uni.showToast({ title: this.$lang('util.copySuccess'), icon: "success", duration: 2000 });
},
fail: () => {
}

View File

@@ -73,7 +73,7 @@
<!-- 企业文件 -->
<view class="view_files_container" v-if="showFileListDiy && fileList.length > 0">
<view class="section-title">企业文件</view>
<view class="section-title">{{ $lang('enterpriseFiles') }}</view>
<view class="files-list">
<view v-for="(file, index) in fileList" :key="index" class="file-item">
<image mode="aspectFill" :src="$util.img('public/static/img/pdf-icon.png')"
@@ -90,7 +90,7 @@
</view>
<!-- 企业视频 -->
<view class="view_videos_container" v-if="showVideoListDiy && videoList.length > 0">
<view class="section-title">企业视频</view>
<view class="section-title">{{ $lang('enterpriseVideos') }}</view>
<view class="videos-list">
<view v-for="(video, index) in videoList" :key="index" class="video-item"
@click="playVideo(video)">
@@ -311,11 +311,11 @@ export default {
// 如果后台没配置,用默认值
this.mpShareData = {
appMessage: {
title: '联系我们',
title: this.$lang('contactUs'),
path: '/pages_tool/contact/contact'
},
timeLine: {
title: '联系我们',
title: this.$lang('contactUs'),
query: ''
}
};
@@ -351,7 +351,7 @@ export default {
this.currentVideo = video;
this.$refs.videoPlayerPopup.open();
} else {
uni.showToast({ title: '视频地址不存在', icon: 'none' });
uni.showToast({ title: this.$lang('videoUrlNotExist'), icon: 'none' });
}
},
@@ -369,22 +369,22 @@ export default {
},
save() {
if (!this.Form.realname.trim()) {
uni.showToast({ title: '请填写姓名', icon: 'none' });
uni.showToast({ title: this.$lang('pleaseFillName'), icon: 'none' });
return;
}
if (!this.Form.mobile || !/^1[3-9]\d{9}$/.test(this.Form.mobile)) {
uni.showToast({ title: '手机号格式不正确', icon: 'none' });
uni.showToast({ title: this.$lang('invalidMobileFormat'), icon: 'none' });
return;
}
if (!this.Form.remark.trim()) {
uni.showToast({ title: '请填写留言内容', icon: 'none' });
uni.showToast({ title: this.$lang('pleaseFillMessage'), icon: 'none' });
return;
}
this.$api.sendRequest({
url: '/api/member/message',
data: this.Form,
success: res => {
uni.showToast({ title: res.message || '提交成功', icon: 'success' });
uni.showToast({ title: res.message || this.$lang('submitSuccess'), icon: 'success' });
// 重置表单数据
@@ -402,7 +402,7 @@ export default {
// #endif
},
fail: () => {
uni.showToast({ title: '提交失败,请重试', icon: 'none' });
uni.showToast({ title: this.$lang('submitFailed'), icon: 'none' });
}
});
},
@@ -471,19 +471,19 @@ export default {
},
onShareAppMessage() {
return this.mpShareData?.appMessage || {
title: '联系我们',
title: this.$lang('contactUs'),
path: '/pages_tool/contact/contact'
};
},
onShareTimeline() {
return this.mpShareData?.timeLine || {
title: '联系我们',
title: this.$lang('contactUs'),
query: ''
};
},
onAddToFavorites() {
return {
title: '联系我们',
title: this.$lang('contactUs'),
path: '/pages_tool/contact/contact'
};
},

View File

@@ -3,11 +3,11 @@
<view class="cf-container color-line-border">
<view class="tab">
<view @click="changeSort(1)"><text
:class="sort == 1 ? 'color-base-text active color-base-border-bottom' : ''">全部</text></view>
:class="sort == 1 ? 'color-base-text active color-base-border-bottom' : ''">{{ $lang('tabAll') }}</text></view>
<view @click="changeSort(2, 'reward')"><text
:class="sort == 2 ? 'color-base-text active color-base-border-bottom' : ''">满减券</text></view>
:class="sort == 2 ? 'color-base-text active color-base-border-bottom' : ''">{{ $lang('tabReward') }}</text></view>
<view @click="changeSort(3, 'discount')"><text
:class="sort == 3 ? 'color-base-text active color-base-border-bottom' : ''">折扣券</text></view>
:class="sort == 3 ? 'color-base-text active color-base-border-bottom' : ''">{{ $lang('tabDiscount') }}</text></view>
<!-- <view @click="changeSort(4, 'no_threshold')"><text :class="sort == 4 ? 'color-base-text active color-base-border-bottom' : ''">无门槛券</text></view> -->
</view>
</view>
@@ -28,23 +28,22 @@
</view>
<view class="use_price price-font" v-else-if="item.type == 'discount'"
:class="{ disabled: item.useState == 2 }">
{{ parseFloat(item.discount) }}
<text>折</text>
{{ $lang('discountText', { discount: parseFloat(item.discount) }) }}
</view>
<view class="use_condition font-size-tag" v-if="item.at_least > 0"
:class="{ disabled: item.useState == 2 }">满{{ item.at_least }}元可用</view>
:class="{ disabled: item.useState == 2 }">{{ $lang('minSpendAvailable', { atLeast: item.at_least }) }}</view>
<view class="use_condition font-size-tag" v-else
:class="{ disabled: item.useState == 2 }">无门槛优惠券</view>
:class="{ disabled: item.useState == 2 }">{{ $lang('noThresholdCoupon') }}</view>
</view>
</view>
<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.useState == 2 }">指定商品</view>
<view class="max_price" v-else :class="{ disabled: item.useState == 2 }">全场商品</view>
:class="{ disabled: item.useState == 2 }">{{ $lang('specifiedGoods') }}</view>
<view class="max_price" v-else :class="{ disabled: item.useState == 2 }">{{ $lang('allGoods') }}</view>
<view class="max_price" v-if="item.discount_limit != '0.00'">
(最大优惠{{ item.discount_limit }}元)
{{ $lang('maxDiscount', { amount: item.discount_limit }) }}
</view>
<view class="max_price" :class="{ disabled: item.useState == 2 }">{{
item.use_channel_name }}</view>
@@ -53,21 +52,21 @@
</view> -->
</view>
<view class="use_time" v-if="item.validity_type == 0">
有效期:{{ $util.timeStampTurnTime(item.end_time) }}</view>
{{ $lang('validPeriodDate', { date: $util.timeStampTurnTime(item.end_time) }) }}</view>
<view class="use_time" v-else-if="item.validity_type == 1">
有效期:领取之日起{{ item.fixed_term }}日内有效</view>
<view class="use_time" v-else>有效期:长期有效</view>
{{ $lang('validPeriodDays', { days: item.fixed_term }) }}</view>
<view class="use_time" v-else>{{ $lang('validPeriodLong') }}</view>
</view>
<view class="item-btn">
<view v-if="item.useState == 0" @click.stop="receiveCoupon(item, index)">领取</view>
<view v-if="item.useState == 1" @click.stop="toGoodsList(item, index)">去使用</view>
<view v-if="item.receivedType == 'out'" class="disabled">已抢光</view>
<view v-if="item.receivedType == 'expire'" class="disabled">已过期</view>
<view v-if="item.receivedType == 'limit'" class="disabled">已达上限</view>
<view v-if="item.useState == 0" @click.stop="receiveCoupon(item, index)">{{ $lang('receive') }}</view>
<view v-if="item.useState == 1" @click.stop="toGoodsList(item, index)">{{ $lang('useNow') }}</view>
<view v-if="item.receivedType == 'out'" class="disabled">{{ $lang('soldOut') }}</view>
<view v-if="item.receivedType == 'expire'" class="disabled">{{ $lang('expired') }}</view>
<view v-if="item.receivedType == 'limit'" class="disabled">{{ $lang('limitReached') }}</view>
</view>
</view>
</view>
<view v-if="list.length == 0"><ns-empty text="暂无可领取的优惠券" :isIndex="false"></ns-empty></view>
<view v-if="list.length == 0"><ns-empty :text="$lang('emptyText')" :isIndex="false"></ns-empty></view>
</block>
</mescroll-uni>
<loading-cover ref="loadingCover"></loading-cover>
@@ -99,7 +98,7 @@ export default {
setTimeout(() => {
if (!this.addonIsExist.coupon) {
this.$util.showToast({
title: '商家未开启优惠券',
title: this.$lang('merchantNotEnabled'),
mask: true,
duration: 2000
});
@@ -173,7 +172,7 @@ export default {
},
success: res => {
this.couponBtnSwitch = false;
let msg = '领取成功,快去使用吧';
let msg = this.$lang('receiveSuccess');
let list = this.list;
if (res.code < 0) msg = res.message;

View File

@@ -7,24 +7,24 @@
<view class="get-coupon">
<text class="coupon-name">{{ info.coupon_name }}</text>
<view class="color-base-text coupon-price" v-if="info.type == 'reward'">¥{{ info.money }}</view>
<view class="color-base-text coupon-price" v-else-if="info.type == 'discount'">{{ info.discount }}折</view>
<text v-if="info.at_least > 0" class="color-tip">满{{ info.at_least }}元使用</text>
<text v-else class="color-tip">无门槛优惠券</text>
<view v-if="info.validity_type == 0" class="color-tip">有效期至 {{ $util.timeStampTurnTime(info.end_time) }}</view>
<view v-else-if="info.validity_type == 1" class="color-tip">领取之日起{{ info.fixed_term }}天内有效</view>
<view v-else class="color-tip">长期有效</view>
<view class="color-base-text coupon-price" v-else-if="info.type == 'discount'">{{ $lang('discountText', { discount: info.discount }) }}</view>
<text v-if="info.at_least > 0" class="color-tip">{{ $lang('minSpendUsage', { atLeast: info.at_least }) }}</text>
<text v-else class="color-tip">{{ $lang('noThresholdCoupon') }}</text>
<view v-if="info.validity_type == 0" class="color-tip">{{ $lang('validUntil', { endTime: $util.timeStampTurnTime(info.end_time) }) }}</view>
<view v-else-if="info.validity_type == 1" class="color-tip">{{ $lang('validDaysAfterReceive', { fixedTerm: info.fixed_term }) }}</view>
<view v-else class="color-tip">{{ $lang('longTermValid') }}</view>
<!-- 适用场景: -->
<view class="color-tip truncate" v-if="info.use_channel!='all'">{{ info.use_channel_name }}</view>
<!-- 适用门店: -->
<view v-if="info.use_channel!='online' &&info.use_store!='all'" class="color-tip">
<view class="w-460 truncate">适用门店:{{ info.use_store_name}}</view>
<view class="w-460 truncate">{{ $lang('applicableStores', { storeName: info.use_store_name }) }}</view>
</view>
<view class="get-span" @click="receiveGoodsCoupon(info.coupon_type_id)">
<button type="primary" v-if="isCanReceive">{{ button }}</button>
<button type="primary" disabled v-if="!isCanReceive">{{ button }}</button>
</view>
<view class="color-tip font-size-goods-tag tips">注:扫描二维码或点击右上角进行分享</view>
<view class="color-tip font-size-goods-tag tips">{{ $lang('scanShareTip') }}</view>
</view>
</view>
<loading-cover ref="loadingCover"></loading-cover>
@@ -42,7 +42,7 @@
info: {},
couponTypeId: 0,
path: '',
button: '领取',
button: '',
uid: 0,
couponBtnSwitch: false, //获取优惠券防止重复提交
receivedNum: 0,
@@ -50,10 +50,11 @@
};
},
onLoad(data) {
this.button = this.$lang('receive');
setTimeout( () => {
if (!this.addonIsExist.coupon) {
this.$util.showToast({
title: '商家未开启优惠券',
title: this.$lang('merchantNotEnabled'),
mask: true,
duration: 2000
});
@@ -152,7 +153,7 @@
let msg = res.message;
this.receivedType = data.type;
if (res.code == 0) {
msg = '领取成功';
msg = this.$lang('receiveSuccess');
this.receivedNum += 1;
}
this.buttonRefresh();
@@ -181,18 +182,18 @@
});
},
buttonRefresh() {
this.button = '领取';
this.button = this.$lang('receive');
if (this.info.count <= this.info.lead_count || this.receivedType == 'out') {
this.button = '来迟了该优惠券已被领取完了!';
this.button = this.$lang('couponSoldOut');
}
if (this.info.status == 2 || this.receivedType == 'expire') {
this.button = '该优惠券活动已结束!';
this.button = this.$lang('activityEnded');
}
if (this.info.status == 3) {
this.button = '该优惠券活动已关闭';
this.button = this.$lang('activityClosed');
}
if (this.receivedType == 'limit'){
this.button = '该优惠券领取已达到上限!';
this.button = this.$lang('receiveLimitReached');
}
},
/**
@@ -204,14 +205,14 @@
var title = '';
if (this.info.type == 'reward') {
title = '恭喜您获得一张' + this.info.money + '元的优惠券';
title = this.$lang('congratsMoneyCoupon', { money: this.info.money });
} else if (this.info.type == 'discount') {
title = '恭喜您获得一张' + this.info.discount + '折优惠券';
title = this.$lang('congratsDiscountCoupon', { discount: this.info.discount });
}
if (this.info.at_least > 0) {
var desc = `满${this.info.at_least}元可用`;
var desc = this.$lang('minSpendAvailable', { atLeast: this.info.at_least });
} else {
var desc = `无门槛优惠券`;
var desc = this.$lang('noThresholdCoupon');
}
this.$util.setPublicShare({
title: title,
@@ -239,14 +240,14 @@
onShareAppMessage(res) {
var title = '';
if (this.info.type == 'reward') {
title = '恭喜您获得一张' + this.info.money + '元的优惠券';
title = this.$lang('congratsMoneyCoupon', { money: this.info.money });
} else if (this.info.type == 'discount') {
title = '恭喜您获得一张' + this.info.discount + '折优惠券';
title = this.$lang('congratsDiscountCoupon', { discount: this.info.discount });
}
if (this.info.at_least > 0) {
title += `,满${this.info.at_least}元可用`;
title += ',' + this.$lang('minSpendAvailable', { atLeast: this.info.at_least });
} else {
title += `,无门槛优惠券`;
title += ',' + this.$lang('noThresholdCoupon');
}
var path = '/pages_tool/goods/coupon_receive?coupon_type_id=' + this.couponTypeId;
if (this.memberInfo && this.memberInfo.member_id) path += '&source_member=' + this.memberInfo.member_id;

View File

@@ -3,20 +3,20 @@
<view class="iconfont icon-close" @click="navigateBack()"></view>
<view class="header-wrap">
<block v-if="stepShow == 0">
<view class="title">请输入手机号</view>
<view><text class="color-tip">请确认您的账号已绑定此手机号</text></view>
<view class="title">{{ $lang('find.step0Title') }}</view>
<view><text class="color-tip">{{ $lang('find.step0Tip') }}</text></view>
</block>
<block v-if="stepShow == 1">
<view class="title">请输入验证码</view>
<view class="title">{{ $lang('find.step1Title') }}</view>
<view>
<text class="color-tip">已将验证码发送至手机号:{{ formData.mobile }}</text>
<text class="color-tip">{{ $lang('find.step1Tip', { mobile: formData.mobile }) }}</text>
</view>
</block>
<block v-if="stepShow == 2">
<view class="title">请设置新的密码</view>
<view><text class="color-tip">建议您的新密码以简单好记为标准</text></view>
<view class="title">{{ $lang('find.step2Title') }}</view>
<view><text class="color-tip">{{ $lang('find.step2Tip') }}</text></view>
</block>
</view>
<view class="find-form">
@@ -97,7 +97,7 @@ export default {
data() {
return {
findMode: 'mobile',
codeText: '重新获取',
codeText: '',
seconds: 120,
timer: null,
formData: {
@@ -117,6 +117,7 @@ export default {
};
},
onLoad() {
this.codeText = this.$lang('find.resendCode');
this.getCaptcha();
},
onShow() {
@@ -143,7 +144,7 @@ export default {
{
name: 'mobile',
checkType: 'phoneno',
errorMsg: '请输入正确的手机号'
errorMsg: this.$lang('find.mobileInvalid')
},
{
name: 'captcha',
@@ -166,7 +167,7 @@ export default {
});
if (res.code == 0) {
this.$util.showToast({
title: '该手机号未注册'
title: this.$lang('find.mobileNotRegistered')
});
return false;
}
@@ -185,7 +186,7 @@ export default {
{
name: 'password',
checkType: 'required',
errorMsg: '请输入密码'
errorMsg: this.$lang('find.passwordRequired')
}
];
if (regConfig.pwd_len > 0) {
@@ -193,27 +194,27 @@ export default {
name: 'password',
checkType: 'lengthMin',
checkRule: regConfig.pwd_len,
errorMsg: '密码长度不能小于' + regConfig.pwd_len + '位'
errorMsg: this.$lang('find.passwordTooShort', { length: regConfig.pwd_len })
});
}
if (regConfig.pwd_complexity != '') {
let passwordErrorMsg = '密码需包含',
let passwordErrorMsg = this.$lang('find.passwordComplexityPrefix'),
reg = '';
if (regConfig.pwd_complexity.indexOf('number') != -1) {
reg += '(?=.*?[0-9])';
passwordErrorMsg += '数字';
passwordErrorMsg += this.$lang('find.complexityNumber');
}
if (regConfig.pwd_complexity.indexOf('letter') != -1) {
reg += '(?=.*?[a-z])';
passwordErrorMsg += '、小写字母';
passwordErrorMsg += this.$lang('find.complexityLowercase');
}
if (regConfig.pwd_complexity.indexOf('upper_case') != -1) {
reg += '(?=.*?[A-Z])';
passwordErrorMsg += '、大写字母';
passwordErrorMsg += this.$lang('find.complexityUppercase');
}
if (regConfig.pwd_complexity.indexOf('symbol') != -1) {
reg += '(?=.*?[#?!@$%^&*-])';
passwordErrorMsg += '、特殊字符';
passwordErrorMsg += this.$lang('find.complexitySymbol');
}
rule.push({
name: 'password',
@@ -227,7 +228,7 @@ export default {
if (checkRes) {
if (this.formData.password != this.formData.rePassword) {
this.$util.showToast({
title: '两次密码不一致'
title: this.$lang('find.passwordMismatch')
});
return false;
}
@@ -283,7 +284,7 @@ export default {
if (this.seconds == 120 && this.timer == null) {
this.timer = setInterval(() => {
this.seconds--;
this.codeText = '重新获取(' + this.seconds + 's)';
this.codeText = this.$lang('find.resendCountdown', { seconds: this.seconds });
}, 1000);
}
uni.setStorageSync('forgot_password_token', data.key);
@@ -351,7 +352,7 @@ export default {
seconds(value) {
if (value == 0) {
this.seconds = 120;
this.codeText = '重新获取';
this.codeText = this.$lang('find.resendCode');
this.isSend = false;
clearInterval(this.timer);
}

View File

@@ -2,11 +2,11 @@
<view class="account-list-content" :style="themeColor">
<view class="edit-item">
<text class="tit">{{ $lang('name') }}</text>
<input class="desc uni-input" type="text" maxlength="30" placeholder="请输入真实姓名" name="name" v-model="formData.realname" />
<input class="desc uni-input" type="text" maxlength="30" :placeholder="$lang('namePlaceholder')" name="name" v-model="formData.realname" />
</view>
<view class="edit-item">
<text class="tit">{{ $lang('mobilePhone') }}</text>
<input class="desc uni-input" type="number" maxlength="11" placeholder="请输入手机号" v-model="formData.mobile" />
<input class="desc uni-input" type="number" maxlength="11" :placeholder="$lang('mobilePhonePlaceholder')" v-model="formData.mobile" />
</view>
<view class="edit-item">
<text class="tit">{{ $lang('accountType') }}</text>
@@ -16,12 +16,12 @@
</picker>
</view>
<view class="edit-item" v-if="formData.withdraw_type == 'bank'">
<text class="tit">银行名称</text>
<input class="desc uni-input" type="text" maxlength="50" placeholder="请输入银行名称" v-model.trim="formData.branch_bank_name" />
<text class="tit">{{ $lang('bankName') }}</text>
<input class="desc uni-input" type="text" maxlength="50" :placeholder="$lang('bankNamePlaceholder')" v-model.trim="formData.branch_bank_name" />
</view>
<view class="edit-item" v-if="formData.withdraw_type != 'wechatpay'">
<text class="tit">提现账号</text>
<input class="desc uni-input" type="text" maxlength="30" placeholder="请输入提现账号" v-model.trim="formData.bank_account" />
<text class="tit">{{ $lang('withdrawalAccount') }}</text>
<input class="desc uni-input" type="text" maxlength="30" :placeholder="$lang('withdrawalAccountPlaceholder')" v-model.trim="formData.bank_account" />
</view>
<view class="btn">
<button type="primary" class="add" @click="saveAccount">{{ $lang('save') }}</button>
@@ -156,36 +156,36 @@ export default {
{
name: 'realname',
checkType: 'required',
errorMsg: '请输入姓名'
errorMsg: this.$lang('pleaseEnterName')
},
{
name: 'mobile',
checkType: 'required',
errorMsg: '请输入手机号'
errorMsg: this.$lang('pleaseEnterMobile')
},
{
name: 'mobile',
checkType: 'phoneno',
errorMsg: '请输入正确的手机号'
errorMsg: this.$lang('pleaseEnterValidMobile')
},
{
name: 'withdraw_type',
checkType: 'required',
errorMsg: '请选择账户类型'
errorMsg: this.$lang('pleaseSelectAccountType')
}
];
if (this.formData.withdraw_type == 'bank') {
rule.push({
name: 'branch_bank_name',
checkType: 'required',
errorMsg: '请输入银行名称'
errorMsg: this.$lang('pleaseEnterBankName')
});
}
if (this.formData.withdraw_type != 'wechatpay') {
rule.push({
name: 'bank_account',
checkType: 'required',
errorMsg: '请输入提现账号'
errorMsg: this.$lang('pleaseEnterWithdrawalAccount')
});
}
var checkRes = validate.check(this.formData, rule);
@@ -219,11 +219,11 @@ export default {
if (res.code == 0) {
if (!this.formData.id) {
this.$util.showToast({
title: '添加成功'
title: this.$lang('addSuccess')
});
} else {
this.$util.showToast({
title: '修改成功'
title: this.$lang('editSuccess')
});
}
if (this.back != '') {

View File

@@ -2,48 +2,48 @@
<view class="container" :style="themeColor">
<view class="assets-wrap">
<view class="assets-block">
<view class="assets-tips"><text>风险提示:确认申请后您的资产将被清空且不可找回!</text></view>
<view class="assets-tips"><text>{{ $lang('member.assets.riskTip') }}</text></view>
<view class="assets-box assets-account">
<view class="assets-title">
<text class="color-base-bg"></text>
<text>账户资产</text>
<text>{{ $lang('member.assets.accountAssets') }}</text>
</view>
<view class="assets-list">
<view class="assets-li">
<view>{{ member_info.point }}</view>
<view>积分</view>
<view>{{ $lang('member.assets.point') }}</view>
</view>
<view class="assets-li">
<view>¥{{ member_info.balance_money }}</view>
<view>现金余额</view>
<view>{{ $lang('member.assets.cashBalance') }}</view>
</view>
<view class="assets-li">
<view>¥{{ member_info.balance }}</view>
<view>储值余额</view>
<view>{{ $lang('member.assets.storedValueBalance') }}</view>
</view>
<view class="assets-li">
<view>{{ accountInfo.member_coupon_count }}</view>
<view>优惠券</view>
<view>{{ $lang('member.assets.coupon') }}</view>
</view>
</view>
</view>
<view class="assets-box assets-order">
<view class="assets-title">
<text class="color-base-bg"></text>
<text>订单资产</text>
<text>{{ $lang('member.assets.orderAssets') }}</text>
</view>
<view class="assets-list">
<view class="assets-li">
<view>{{ accountInfo.order_pay_count }}</view>
<view>待发货</view>
<view>{{ $lang('member.assets.waitDelivery') }}</view>
</view>
<view class="assets-li">
<view>{{ accountInfo.order_delivery_count }}</view>
<view>待收货</view>
<view>{{ $lang('member.assets.waitReceive') }}</view>
</view>
<view class="assets-li">
<view>{{ accountInfo.order_refund_count }}</view>
<view>退款中</view>
<view>{{ $lang('member.assets.refunding') }}</view>
</view>
</view>
</view>
@@ -51,27 +51,27 @@
<view v-if="member_info.is_fenxiao == 1" class="assets-box assets-fenxiao">
<view class="assets-title">
<text class="color-base-bg"></text>
<text>分销资产</text>
<text>{{ $lang('member.assets.fenxiaoAssets') }}</text>
</view>
<view class="assets-list">
<view class="assets-li">
<view>¥{{ fenxiao_info.account }}</view>
<view>可提现佣金</view>
<view>{{ $lang('member.assets.withdrawableCommission') }}</view>
</view>
<view class="assets-li">
<view>¥{{ fenxiao_info.account_withdraw_apply }}</view>
<view>提现中佣金</view>
<view>{{ $lang('member.assets.withdrawingCommission') }}</view>
</view>
<view class="assets-li">
<view>{{ accountInfo.fenxiao_order_count }}</view>
<view>待结算订单</view>
<view>{{ $lang('member.assets.waitSettleOrder') }}</view>
</view>
</view>
</view>
</view>
<view class="assets-btn">
<button type="primary" @click="prev">上一步</button>
<button class="color-base-bg" @click="submit">确认申请</button>
<button type="primary" @click="prev">{{ $lang('member.assets.prevStep') }}</button>
<button class="color-base-bg" @click="submit">{{ $lang('member.assets.confirmApply') }}</button>
</view>
</view>
</view>

View File

@@ -11,7 +11,7 @@
<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>
{{ $lang('validUntil') }}{{ $util.timeStampTurnTime(memberInfo.level_expire_time, true) }}</view>
</view>
</view>
@@ -21,14 +21,14 @@
<image :src="$util.img('public/uniapp/level/card-bg.png')"></image>
<view class="info">
<view class="level-detail">{{ levelInfo.level_name }}</view>
<view class="growr-name">{{ levelInfo.level_name }}可享受消费折扣和</view>
<view class="growr-value">会员大礼包等权益</view>
<view class="growr-name">{{ levelInfo.level_name }}{{ $lang('enjoyDiscountAnd') }}</view>
<view class="growr-value">{{ $lang('memberGiftBenefits') }}</view>
<view class="growth-rules font-size-tag" @click="openExplainPopup"
v-if="levelInfo.remark != ''">
<text class="iconfont icon-wenhao font-size-tag"></text>
</view>
<button type="default" class="renew-btn"
@click="$util.redirectTo('/pages_tool/member/card_buy')">立即续费</button>
@click="$util.redirectTo('/pages_tool/member/card_buy')">{{ $lang('renewNow') }}</button>
</view>
</view>
</view>
@@ -39,7 +39,7 @@
<view class="line-box">
<view class="line right"></view>
</view>
<view class="card-content-title">会员权益</view>
<view class="card-content-title">{{ $lang('memberBenefits') }}</view>
<view class="line-box">
<view class="line"></view>
</view>
@@ -49,18 +49,18 @@
<view class="card-privilege-item" v-if="levelInfo.is_free_shipping">
<view class="card-privilege-icon"><text class="iconfont icon-tedianquanchangbaoyou"></text>
</view>
<view class="card-privilege-name">全场包邮</view>
<view class="card-privilege-text">享受商品包邮服务</view>
<view class="card-privilege-name">{{ $lang('freeShipping') }}</view>
<view class="card-privilege-text">{{ $lang('enjoyFreeShipping') }}</view>
</view>
<view class="card-privilege-item" v-if="levelInfo.consume_discount < 100">
<view class="card-privilege-icon"><text class="iconfont icon-zhekou"></text></view>
<view class="card-privilege-name">消费折扣</view>
<view class="card-privilege-text">部分商品下单可享{{ levelInfo.consume_discount / 10 }}折优惠</view>
<view class="card-privilege-name">{{ $lang('consumptionDiscount') }}</view>
<view class="card-privilege-text">{{ $lang('enjoyDiscountOnSomeProducts', { discount: levelInfo.consume_discount / 10 }) }}</view>
</view>
<view class="card-privilege-item" v-if="levelInfo.point_feedback > 0">
<view class="card-privilege-icon"><text class="iconfont icon-jifen2 f32"></text></view>
<view class="card-privilege-name">积分回馈</view>
<view class="card-privilege-text">下单享{{ parseFloat(levelInfo.point_feedback) }}倍积分回馈</view>
<view class="card-privilege-name">{{ $lang('pointsReward') }}</view>
<view class="card-privilege-text">{{ $lang('earnPointsMultiplier', { multiplier: parseFloat(levelInfo.point_feedback) }) }}</view>
</view>
</view>
@@ -69,7 +69,7 @@
<view class="line-box">
<view class="line right"></view>
</view>
<view class="card-content-title">开卡礼包</view>
<view class="card-content-title">{{ $lang('welcomeGift') }}</view>
<view class="line-box">
<view class="line"></view>
</view>
@@ -78,18 +78,18 @@
<view class="card-privilege-list">
<view class="card-privilege-item" v-if="levelInfo.send_point > 0">
<view class="card-privilege-icon"><text class="iconfont icon-jifen3"></text></view>
<view class="card-privilege-name">积分礼包</view>
<view class="card-privilege-text">赠送{{ levelInfo.send_point }}积分</view>
<view class="card-privilege-name">{{ $lang('pointsGift') }}</view>
<view class="card-privilege-text">{{ $lang('giftPoints', { points: levelInfo.send_point }) }}</view>
</view>
<view class="card-privilege-item" v-if="levelInfo.send_balance > 0">
<view class="card-privilege-icon"><text class="iconfont icon-hongbao"></text></view>
<view class="card-privilege-name">红包礼包</view>
<view class="card-privilege-text">赠送{{ parseFloat(levelInfo.send_balance) }}元红包</view>
<view class="card-privilege-name">{{ $lang('redPacketGift') }}</view>
<view class="card-privilege-text">{{ $lang('giftRedPacket', { amount: parseFloat(levelInfo.send_balance) }) }}</view>
</view>
<view class="card-privilege-item" v-if="levelInfo.send_coupon != ''">
<view class="card-privilege-icon"><text class="iconfont icon-youhuiquan1"></text></view>
<view class="card-privilege-name">优惠券礼包</view>
<view class="card-privilege-text">赠送{{ levelInfo.send_coupon.split(',').length }}张优惠券</view>
<view class="card-privilege-name">{{ $lang('couponGift') }}</view>
<view class="card-privilege-text">{{ $lang('giftCoupons', { count: levelInfo.send_coupon.split(',').length }) }}</view>
</view>
</view>
</view>
@@ -101,13 +101,13 @@
<uni-popup ref="explainPopup" type="bottom">
<view class="tips-layer">
<view class="head" @click="closeExplainPopup()">
<view class="title">会员卡说明</view>
<view class="title">{{ $lang('cardDescription') }}</view>
<text class="iconfont icon-close"></text>
</view>
<view class="body">
<view class="detail margin-bottom">
<block v-if="levelInfo.remark != ''">
<view class="tip">会员卡说明</view>
<view class="tip">{{ $lang('cardDescription') }}</view>
<view class="font-size-base">{{ levelInfo.remark }}</view>
</block>
</view>
@@ -171,11 +171,11 @@ export default {
// 如果后台没配置,用默认值
this.mpShareData = {
appMessage: {
title: '专属会员权益,快来体验',
title: this.$lang('shareTitle'),
path: '/pages_tool/member/card'
},
timeLine: {
title: '专属会员权益,快来体验',
title: this.$lang('shareTitle'),
query: '/pages_tool/member/card'
}
};
@@ -208,19 +208,19 @@ export default {
},
onShareAppMessage() {
return this.mpShareData?.appMessage || {
title: '专属会员权益,快来体验',
title: this.$lang('shareTitle'),
path: '/pages_tool/member/card'
};
},
onShareTimeline() {
return this.mpShareData?.timeLine || {
title: '专属会员权益,快来体验',
title: this.$lang('shareTitle'),
query: '/pages_tool/member/card'
};
},
onAddToFavorites() {
return {
title: '专属会员权益,快来体验',
title: this.$lang('shareTitle'),
path: '/pages_tool/member/card'
};
}

View File

@@ -2,9 +2,9 @@
<view :style="themeColor" :class="isIphoneX ? 'iphone-x' : ''">
<view class="cf-container color-line-border" v-if="storeToken">
<view class="tab">
<view @click="changeState(1)"><text :class="state == 1 ? 'color-base-text active color-base-border-bottom' : ''">未使用</text></view>
<view @click="changeState(2)"><text :class="state == 2 ? 'color-base-text active color-base-border-bottom' : ''">已使用</text></view>
<view @click="changeState(3)"><text :class="state == 3 ? 'color-base-text active color-base-border-bottom' : ''">已过期</text></view>
<view @click="changeState(1)"><text :class="state == 1 ? 'color-base-text active color-base-border-bottom' : ''">{{ $lang('tabUnused') }}</text></view>
<view @click="changeState(2)"><text :class="state == 2 ? 'color-base-text active color-base-border-bottom' : ''">{{ $lang('tabUsed') }}</text></view>
<view @click="changeState(3)"><text :class="state == 3 ? 'color-base-text active color-base-border-bottom' : ''">{{ $lang('tabExpired') }}</text></view>
</view>
<!-- <view class="coupon-head">
<view class="sort" :class="sort == 1 ? 'color-base-border color-base-text' : ''" @click="changeSort(1, '')">全部</view>
@@ -30,37 +30,36 @@
{{ parseFloat(item.money) }}
</view>
<view class="use_price" v-else-if="item.type == 'discount'">
{{ parseFloat(item.discount) }}
<text>折</text>
{{ $lang('discountText', { discount: parseFloat(item.discount) }) }}
</view>
<view class="use_condition font-size-tag" v-if="item.at_least > 0">
满{{ item.at_least }}元可用</view>
<view class="use_condition font-size-tag" v-else>无门槛优惠券</view>
{{ $lang('minAmountCondition', { amount: item.at_least }) }}</view>
<view class="use_condition font-size-tag" v-else>{{ $lang('noThresholdCoupon') }}</view>
</view>
</view>
<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" v-if="item.discount_limit != '0.00'">(最大优惠{{ item.discount_limit }}元)</view>
<view class="max_price" v-if="item.goods_type == 2 || item.goods_type == 3" :class="{ disabled: item.state == 3 }">{{ $lang('specifiedGoods') }}</view>
<view class="max_price" v-if="item.discount_limit != '0.00'">{{ $lang('maxDiscount', { amount: 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 }">
{{ item.use_store==='all'?'适用门店:全部门店': '适用门店:'+item.use_store_name}}
</view> -->
</view>
<view class="use_time" v-if="item.end_time">有效期:{{ $util.timeStampTurnTime(item.end_time) }}
<view class="use_time" v-if="item.end_time">{{ $lang('validPeriodPrefix') }}{{ $util.timeStampTurnTime(item.end_time) }}
</view>
<view class="use_time" v-else>有效期:长期有效</view>
<view class="use_time" v-else>{{ $lang('validPeriodPrefix') }}{{ $lang('longTermValid') }}</view>
</view>
<view class="item-btn">
<view class="tag" v-if="item.state == 1">去使用</view>
<view class="tag disabled" v-if="item.state == 2">已使用</view>
<view class="tag disabled" v-if="item.state == 3">已过期</view>
<view class="tag" v-if="item.state == 1">{{ $lang('useNow') }}</view>
<view class="tag disabled" v-if="item.state == 2">{{ $lang('used') }}</view>
<view class="tag disabled" v-if="item.state == 3">{{ $lang('expired') }}</view>
</view>
</view>
</view>
<view v-if="!list.length && showEmpty" class="margin-top cart-empty" :fixed="false">
<ns-empty :isIndex="true" :emptyBtn="{url: $util.INDEX_PAGE_URL,text: '去逛逛'}" text="暂无优惠券"></ns-empty>
<ns-empty :isIndex="true" :emptyBtn="{url: $util.INDEX_PAGE_URL,text: $lang('goShopping')}" :text="$lang('emptyText')"></ns-empty>
</view>
</block>
</mescroll-uni>
@@ -88,7 +87,7 @@ export default {
setTimeout( () => {
if (!this.addonIsExist.coupon) {
this.$util.showToast({
title: '商家未开启优惠券',
title: this.$lang('merchantNotEnabled'),
mask: true,
duration: 2000
});

View File

@@ -9,11 +9,11 @@
<image :src="$util.getDefaultImage().head" v-else mode="aspectFill" show-menu-by-longpress></image>
<view class="member-desc">
<view class="font-size-base">{{ memberInfo.nickname }}</view>
<view class="font-size-activity-tag">当前等级:{{ memberInfo.member_level_name }}</view>
<view class="font-size-activity-tag">{{ $lang('currentLevelLabel') }}{{ memberInfo.member_level_name }}</view>
</view>
<view class="growth-rules font-size-tag" @click="growthRules">
<text class="iconfont icon-wenhao font-size-tag"></text>
成长规则
{{ $lang('growthRules') }}
</view>
</view>
<swiper :style="{ width: '100vw', height: '390rpx' }" class="margin-bottom"
@@ -54,29 +54,27 @@
<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>
<text class="isnow " :style="{color:levelList[curIndex]['level_text_color']}" v-if="levelId == item.level_id">{{ $lang('currentLevelTag') }}</text>
</view>
<view class="growr-name" :style="{color:levelList[curIndex]['level_text_color']}">当前成长值</view>
<view class="growr-name" :style="{color:levelList[curIndex]['level_text_color']}">{{ $lang('currentGrowthValue') }}</view>
<view class="growr-value" :style="{color:levelList[curIndex]['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 }}成长值成为{{
levelList[curIndex + 1].level_name
}}
</view>
{{ $lang('growthToNextLevel', { needGrowth: levelList[curIndex + 1].needGrowth > 0 ? levelList[curIndex + 1].needGrowth : 0, levelName: 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:levelList[curIndex]['level_text_color']}">{{ $lang('maxLevelReached') }}</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 }}
</view>
{{ $lang('growthToNextLevel', { needGrowth: levelList[curIndex].needGrowth, levelName: levelList[curIndex].level_name }) }}
</view>
</block>
</view>
</view>
@@ -84,52 +82,52 @@
</swiper-item>
</swiper>
<view class="member-equity" v-if="levelList[curIndex].is_free_shipping > 0 || levelList[curIndex].consume_discount > 0 || levelList[curIndex].point_feedback > 0">
<view class="equity-title">会员权益</view>
<view class="equity-title">{{ $lang('memberBenefits') }}</view>
<view class="equity-itme" v-if="levelList[curIndex].is_free_shipping > 0">
<image :src="$util.img('public/uniapp/level/exemption_postage.png')" mode="aspectFit" show-menu-by-longpress></image>
<view class="equity-content" :class="{ active: levelList[curIndex].consume_discount > 0 }">
<text>包邮服务</text>
<text class="equity-desc">提供商品包邮服务</text>
<text>{{ $lang('freeShipping') }}</text>
<text class="equity-desc">{{ $lang('freeShippingDesc') }}</text>
</view>
</view>
<view class="equity-itme" v-if="levelList[curIndex].consume_discount > 0">
<image :src="$util.img('public/uniapp/level/consumption_discount.png')" mode="aspectFit" show-menu-by-longpress></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-else>提供{{ levelList[curIndex].consume_discount }}折消费折扣</text>
<text>{{ $lang('consumptionDiscount') }}</text>
<text class="equity-desc" v-if="levelList[curIndex].is_default == 1">{{ $lang('noDiscountDesc') }}</text>
<text class="equity-desc" v-else>{{ $lang('discountDescWithValue', { discount: levelList[curIndex].consume_discount }) }}</text>
</view>
</view>
<view class="equity-itme" v-if="levelList[curIndex].point_feedback > 0">
<image :src="$util.img('public/uniapp/level/integral_feedback.png')" mode="aspectFit" show-menu-by-longpress></image>
<view class="equity-content">
<text>享受积分回馈服务</text>
<text class="equity-desc">提供{{ levelList[curIndex].point_feedback }}倍积分回馈倍率</text>
<text>{{ $lang('pointsReward') }}</text>
<text class="equity-desc">{{ $lang('pointsRewardDesc', { multiplier: levelList[curIndex].point_feedback }) }}</text>
</view>
</view>
</view>
<view class="member-gift" v-if="levelList[curIndex].send_balance > 0 || levelList[curIndex].send_balance > 0 || levelList[curIndex].send_coupon">
<view class="gift-title">会员礼包</view>
<view class="gift-title">{{ $lang('memberGift') }}</view>
<view class="gift-itme" v-if="levelList[curIndex].send_point > 0">
<image :src="$util.img('public/uniapp/level/integral.png')" mode="aspectFit" show-menu-by-longpress></image>
<view class="gift-content" :class="{ active: levelList[curIndex].send_balance > 0 }">
<text>积分礼包</text>
<text class="gift-desc">赠送{{ levelList[curIndex].send_point }}积分</text>
<text>{{ $lang('pointsGift') }}</text>
<text class="gift-desc">{{ $lang('giftPoints', { points: levelList[curIndex].send_point }) }}</text>
</view>
</view>
<view class="gift-itme" v-if="levelList[curIndex].send_balance > 0">
<image :src="$util.img('public/uniapp/level/red_packet.png')" mode="aspectFit" show-menu-by-longpress></image>
<view class="gift-content" :class="{ active: levelList[curIndex].send_coupon }">
<text>红包礼包</text>
<text class="gift-desc">赠送{{ levelList[curIndex].send_balance }}元红包</text>
<text>{{ $lang('redPacketGift') }}</text>
<text class="gift-desc">{{ $lang('giftRedPacket', { amount: levelList[curIndex].send_balance }) }}</text>
</view>
</view>
<view class="gift-itme" v-if="levelList[curIndex].send_coupon" @click="openCoupon(levelList[curIndex].send_coupon)">
<image :src="$util.img('public/uniapp/level/coupon.png')" mode="aspectFit" show-menu-by-longpress></image>
<view class="gift-content">
<text>优惠券礼包</text>
<text class="gift-desc">赠送{{ levelList[curIndex].coupon_length }}张优惠券</text>
<text>{{ $lang('couponGift') }}</text>
<text class="gift-desc">{{ $lang('giftCoupons', { count: levelList[curIndex].coupon_length }) }}</text>
</view>
</view>
</view>
@@ -139,7 +137,7 @@
<uni-popup ref="couponPopup" type="bottom">
<view class="coupon-popup-box">
<view class="coupon-popup-title" @click="closeCoupon">
优惠券
{{ $lang('coupons') }}
<text class="iconfont icon-close"></text>
</view>
<scroll-view class="coupon-popup-content" scroll-y>
@@ -150,11 +148,11 @@
</view>
<view class="coupon-price" v-if="item.type == 'reward'">
<text>{{ item.money }}</text>
元
{{ $lang('yuan') }}
</view>
<view class="coupon-price" v-if="item.type == 'discount'">
<text>{{ $util.numberFixed(item.discount, 1) }}</text>
折
{{ $lang('zhe') }}
</view>
</view>
</scroll-view>
@@ -265,7 +263,7 @@
},
getBannerDetail(index) {
uni.showLoading({
title: '将前往详情页面',
title: this.$lang('navigatingToDetail'),
duration: 2000,
mask: true
});

View File

@@ -3,13 +3,13 @@
<view class="grow-explain">
<view class="explain-title">
<image :src="$util.img('public/uniapp/level/growth_that_left.png')" mode="aspectFit" show-menu-by-longpress></image>
成长值说明
{{ $lang('title') }}
<image :src="$util.img('public/uniapp/level/growth_that_right.png')" mode="aspectFit" show-menu-by-longpress></image>
</view>
<view class="explain-table">
<view class="explain-tr">
<text class="explain-th">等级</text>
<text class="explain-th">成长值</text>
<text class="explain-th">{{ $lang('level') }}</text>
<text class="explain-th">{{ $lang('growthValue') }}</text>
</view>
<view class="explain-tr" v-for="(item, index) in levelList" :key="index">
<text class="explain-td">{{ item.level_name }}</text>
@@ -20,20 +20,20 @@
<view class="grow-value">
<view class="title">
<image :src="$util.img('public/uniapp/level/explain.png')" mode="aspectFit" show-menu-by-longpress></image>
<text>什么是成长值</text>
<text>{{ $lang('whatIsGrowthValue') }}</text>
</view>
<view class="content color-tip">成长值是消费者在店铺成为会员后,通过消费计算出来的值。成长值决定会员等级,会员等级越高,所享受的会员权益和会员礼包就越多。</view>
<view class="content color-tip">{{ $lang('growthValueDescription') }}</view>
</view>
<view class="acquisition-grow">
<view class="title">
<image :src="$util.img('public/uniapp/level/explain.png')" mode="aspectFit" show-menu-by-longpress></image>
<text>如何获得成长值</text>
<text>{{ $lang('howToGetGrowthValue') }}</text>
</view>
<view class="content color-tip">
<text>1、注册会员送x成长值。</text>
<text>2、会员充值到余额送x成长值。</text>
<text>3、会员签到送x成长值。</text>
<text>4、会员消费x元,交易完成即可获得x个成长值。</text>
<text>{{ $lang('ruleRegister') }}</text>
<text>{{ $lang('ruleRecharge') }}</text>
<text>{{ $lang('ruleCheckin') }}</text>
<text>{{ $lang('ruleConsume') }}</text>
</view>
</view>
@@ -118,7 +118,7 @@
},
getBannerDetail(index) {
uni.showLoading({
title: '将前往详情页面',
title: this.$lang('navigatingToDetail'),
duration: 2000,
mask: true
});

View File

@@ -1,16 +1,16 @@
<template>
<view :style="themeColor" class="container">
<view class="tips" v-if="step != 0">请输入6位支付密码,建议不要使用重复或连续数字</view>
<view class="tips" v-else>验证码已发送至{{ memberInfo.mobile | mobile }}请在下方输入4位数字验证码</view>
<view class="tips" v-if="step != 0">{{ $lang('passwordTips') }}</view>
<view class="tips" v-else>{{ $lang('codeSentTips', { mobile: memberInfo.mobile | mobile }) }}</view>
<view class="password-wrap">
<myp-one :maxlength="step == 0 ? 4 : 6" :is-pwd="step != 0" @input="input" ref="input" :auto-focus="true"></myp-one>
<view v-show="step == 0" class="dynacode" :class="dynacodeData.seconds == 120 ? 'color-base-text' : 'color-tip'" @click="sendMobileCode">
{{ dynacodeData.codeText }}
</view>
<view class="action-tips" v-show="step == 0">输入短信验证码</view>
<view class="action-tips" v-show="step == 1">请设置支付密码</view>
<view class="action-tips" v-show="step == 2">请再次输入</view>
<view class="btn color-base-bg color-base-border" :class="{ disabled: !isClick }" @click="confirm">确认</view>
<view class="action-tips" v-show="step == 0">{{ $lang('inputSmsCode') }}</view>
<view class="action-tips" v-show="step == 1">{{ $lang('setPayPassword') }}</view>
<view class="action-tips" v-show="step == 2">{{ $lang('inputAgain') }}</view>
<view class="btn color-base-bg color-base-border" :class="{ disabled: !isClick }" @click="confirm">{{ $lang('confirm') }}</view>
</view>
</view>
</template>
@@ -34,7 +34,7 @@
dynacodeData: {
seconds: 120,
timer: null,
codeText: '获取验证码',
codeText: '',
isSend: false
}
};
@@ -42,14 +42,16 @@
onLoad(option) {
if (option.back) this.back = option.back;
this.dynacodeData.codeText = this.$lang('getCode');
// 判断登录
if (!this.storeToken) {
this.$util.redirectTo(this.$util.LOGIN_PAGE_URL);
} else {
if (this.memberInfo.mobile == '') {
uni.showModal({
title: '提示',
content: '设置支付密码需要先绑定手机号,是否立即绑定?',
title: this.$lang('tipsTitle'),
content: this.$lang('bindMobileFirst'),
success: res => {
if (res.confirm) {
this.$util.redirectTo('/pages_tool/member/info', {
@@ -132,7 +134,7 @@
success: res => {
if (res.code >= 0) {
this.$util.showToast({
title: '修改成功'
title: this.$lang('modifySuccess')
});
setTimeout(() => {
if (this.back) this.$util.redirectTo(this.back, {},
@@ -149,7 +151,7 @@
});
} else {
this.$util.showToast({
title: '两次输入的密码不一致',
title: this.$lang('passwordMismatch'),
success: res => {
this.initInfo();
}
@@ -185,7 +187,7 @@
if (this.dynacodeData.seconds == 120 && this.dynacodeData.timer == null) {
this.dynacodeData.timer = setInterval(() => {
this.dynacodeData.seconds--;
this.dynacodeData.codeText = this.dynacodeData.seconds + 's后可重新获取';
this.dynacodeData.codeText = this.$lang('resendAfter', { seconds: this.dynacodeData.seconds });
}, 1000);
}
} else {
@@ -216,7 +218,7 @@
this.dynacodeData = {
seconds: 120,
timer: null,
codeText: '获取动态码',
codeText: this.$lang('getDynacode'),
isSend: false
};
}
@@ -275,4 +277,4 @@
}
}
}
</style>
</style>

View File

@@ -14,15 +14,15 @@
<view class="refund-option" v-show="!refund_type">
<view class="option-item" @click="selectRefundType(1)">
<view>
<text>退款无需退货</text>
<text class="font-size-goods-tag color-tip">没收到货,或与卖家协商同意无需退货只退款</text>
<text>{{ $lang('refundType.refundOnly') }}</text>
<text class="font-size-goods-tag color-tip">{{ $lang('refundType.refundOnlyDesc') }}</text>
</view>
<text class="iconfont icon-right"></text>
</view>
<view class="option-item" @click="selectRefundType(2)" v-if="refund_data.refund_type.length == 2">
<view>
<text>退货退款</text>
<text class="font-size-goods-tag color-tip">已收到货,需退还收到的货物</text>
<text>{{ $lang('refundType.returnRefund') }}</text>
<text class="font-size-goods-tag color-tip">{{ $lang('refundType.returnRefundDesc') }}</text>
</view>
<text class="iconfont icon-right"></text>
</view>
@@ -31,27 +31,27 @@
<view v-show="refund_type">
<view class="refund-form">
<view class="item-wrap" @click="openPopup('refundReasonPopup')">
<view class="label">退款原因:</view>
<view class="label">{{ $lang('form.refundReason') }}</view>
<view class="cont reason">
<text class="color-tip" v-if="!refund_reason.length">请选择</text>
<text class="color-tip" v-if="!refund_reason.length">{{ $lang('form.pleaseSelect') }}</text>
<text class="color-tip" v-else>{{ refund_reason }}</text>
</view>
<text class="iconfont icon-right"></text>
</view>
<view class="item-wrap">
<view class="label">退款金额:</view>
<view class="label">{{ $lang('form.refundAmount') }}</view>
<view class="cont color-base-text">{{ $lang('common.currencySymbol') }}{{ refund_data.refund_money }}</view>
</view>
</view>
<view class="refund-form">
<view class="item-wrap"><view class="label active">退款说明</view></view>
<view class="item-wrap"><view class="label active">{{ $lang('form.refundRemark') }}</view></view>
<!-- #ifdef MP-WEIXIN -->
<textarea
v-if="!showText"
class="newText"
placeholder="请输入退款说明(选填)"
:placeholder="$lang('form.remarkPlaceholder')"
placeholder-class="color-tip font-size-tag"
:auto-height="true"
v-model="refund_remark"
@@ -60,7 +60,7 @@
<!-- #ifdef H5 -->
<textarea
class="newText"
placeholder="请输入退款说明(选填)"
:placeholder="$lang('form.remarkPlaceholder')"
@blur="textBlur()"
placeholder-class="color-tip font-size-tag"
:auto-height="true"
@@ -78,7 +78,7 @@
<uni-popup ref="refundReasonPopup" type="bottom" @change="change()">
<view class="refund-reason-popup popup">
<view class="popup-header">
<view><text class="tit">退款原因</text></view>
<view><text class="tit">{{ $lang('reasonPopup.title') }}</text></view>
<view class="align-right" @click="closePopup('refundReasonPopup')"><text class="iconfont icon-close"></text></view>
</view>
<view class="popup-body">
@@ -92,7 +92,7 @@
</scroll-view>
</view>
<view class="popup-footer" :class="{ 'bottom-safe-area': isIphoneX }">
<view class="confirm-btn color-base-bg" @click="closePopup('refundReasonPopup')">确定</view>
<view class="confirm-btn color-base-bg" @click="closePopup('refundReasonPopup')">{{ $lang('reasonPopup.confirm') }}</view>
</view>
</view>
</uni-popup>
@@ -172,7 +172,7 @@ export default {
this.refund_data = res.data;
if (this.$refs.loadingCover) this.$refs.loadingCover.hide();
} else {
this.$util.showToast({ title: '未获取到该订单项退款信息' });
this.$util.showToast({ title: this.$lang('toast.noRefundInfo') });
setTimeout(() => {
this.$util.redirectTo('/pages_order/list');
}, 1000);
@@ -239,7 +239,7 @@ export default {
},
verify() {
if (this.refund_reason == '') {
this.$util.showToast({ title: '请选择退款原因' });
this.$util.showToast({ title: this.$lang('validate.pleaseSelectRefundReason') });
return false;
}
return true;

View File

@@ -9,24 +9,24 @@
</view> -->
<view class="recharge-box">
<view class="recharge-box-title">充值金额
<view @click="toOrderList"><text class="color-base-text" style="color:#1db03b !important">充值记录</text></view>
<view class="recharge-box-title">{{ $lang('rechargeAmount') }}
<view @click="toOrderList"><text class="color-base-text" style="color:#1db03b !important">{{ $lang('rechargeRecords') }}</text></view>
</view>
<view class="box-content">
<view class="money">
<text class="label">¥</text>
<view class="input-box">
<input class="reg-input" v-model="payMoney" placeholder="请输入充值金额" placeholder-style="font-size:32rpx;color:#969696;font-weight:500"></input>
<input class="reg-input" v-model="payMoney" :placeholder="$lang('placeholderEnterAmount')" placeholder-style="font-size:32rpx;color:#969696;font-weight:500"></input>
</view>
</view>
<view v-if="list.length" class="content-item" v-for="(item, index) in list" :key="index" @click="itemClick(index, item.recharge_id, item.buy_price)" :class="isIndex == index ? 'active' : ''">
<view class="price1 ">
<text class="price-font">{{ parseFloat(item.face_value).toFixed(0) }}</text>
<text>元</text>
<text>{{ $lang('yuan') }}</text>
</view>
<view class="price2">售价 {{ item.buy_price }} 元</view>
<view class="price2">{{ $lang('salePrice', { price: item.buy_price }) }}</view>
</view>
<!-- <view class="content-item" @click="openRecharge()">
@@ -62,12 +62,12 @@
</view> -->
<uni-popup ref="rechargePopup" type="bottom">
<view class="rechargeList">
<view class="tip">请输入充值金额</view>
<view class="tip">{{ $lang('pleaseEnterAmount') }}</view>
<view class="input color-tip">
{{keywordsInfo.price?keywordsInfo.price:'金额'}}<text class="color-base-text">元</text>
{{keywordsInfo.price?keywordsInfo.price:$lang('amount')}}<text class="color-base-text">{{ $lang('yuan') }}</text>
</view>
<view class="input color-tip">
<text class="color-base-text" v-if="payMoney > 0">售价{{payMoney}}元</text>
<text class="color-base-text" v-if="payMoney > 0">{{ $lang('salePrice', { price: payMoney }) }}</text>
</view>
<view class="keywords">
<view class="keywords-left">
@@ -86,7 +86,7 @@
</view>
<view class="keywords-right">
<view @click="delPrice"><text class="iconfont icon-close"></text></view>
<view class="color-base-bg" @click="keywordsPayment()">确认充值</view>
<view class="color-base-bg" @click="keywordsPayment()">{{ $lang('confirmRecharge') }}</view>
</view>
</view>
</view>
@@ -94,7 +94,7 @@
<!-- 选择支付方式弹窗 -->
<ns-payment ref="choosePaymentPopup" :payMoney="payMoney" @confirm="toPay"></ns-payment>
<view style="background: #fff;width: 100%;position: fixed;bottom: 0rpx;">
<button class="add-account" type="primary" @click="submitPayment" >充值</button>
<button class="add-account" type="primary" @click="submitPayment" >{{ $lang('recharge') }}</button>
</view>
<!-- <button class="add-account" type="primary" :disabled="recharge_id > 0 ? false : true" @click="openChoosePayment">充值</button> -->
@@ -176,7 +176,7 @@
this.openChoosePayment()
} else {
this.$util.showToast({
title: "请输入充值金额"
title: this.$lang('pleaseEnterAmount')
})
}
@@ -273,7 +273,7 @@
});
} else {
this.$util.showToast({
title: '请选择套餐'
title: this.$lang('pleaseSelectPackage')
});
}
},