## 删除的死代码脚本
- scripts/i18n_class_c.py (脚本自承'新架构下永远输出 0',纯防御性)
- scripts/full_migrate_i18n.py (其产出违反 CLAUDE.md 1.2 中文 key 铁律,已标 DEPRECATED)
- scripts/__pycache__/ (Python 缓存)
## 删除的旧 per-page lang 文件
- lang/zh-cn/<page>/<file>.js (140 个)
- lang/en-us/<page>/<file>.js (139 个)
- 共 279 个文件,运行时不再加载,0 个 key 被 .vue 调用(经 diagnose_keys.py 验证)
## 删除的备份和迁移表
- lang/_backup/ (git 已跟踪原文件)
- lang/_migration_map.json / lang/_migration-map.json (运行时不用)
## 删除的中间产物 JSON
- docs/i18n-rename-*.json (smart_rename 中间产物,已用完)
- docs/i18n-ambiguous.json / i18n-audit.json / i18n-call-rewrite.log /
i18n-clean-dead.log / i18n-file-texts.json / i18n-page-titles.json /
i18n-vue-extract.json (前一会话残留,无引用方)
- docs/i18n-{naming,shadow,strict}-audit.json (脚本会自动重新生成)
## 删除的 modular lang 文件
- lang/zh-cn/*.js / lang/en-us/*.js (20 个模块文件,内容是上一会话产生的死代码)
- lang/zh-cn/index.js / lang/en-us/index.js (聚合入口)
- lang/DEPRECATED.md (已不再相关)
## 删除的不成熟脚本
- scripts/check_perpage.py (诊断用,已完成)
- scripts/diagnose_keys.py (诊断用,已完成)
- scripts/smart_rename_i18n.py (v1-v3 都 bug,未修完)
## 现状
- lang/ 现在只有 zh-cn.js + en-us.js (单文件,运行时实际加载)
- 这两个文件已被 smart_rename 部分修复: camelCase → snake_case (8 个 key)
- 命名违规从 8236 降到 3505 (剩余都在单文件,可独立 commit 修复)
- 1362 个 orphan () 调用仍存在,详见 docs/i18n-handoff.md
265 lines
8.7 KiB
Vue
265 lines
8.7 KiB
Vue
<template>
|
||
<view class="member-level" :style="themeColor">
|
||
<view class="level-top">
|
||
<image :src="$util.img('public/uniapp/level/card-top-bg.png')"></image>
|
||
</view>
|
||
<view class="banner-container">
|
||
<view class="memberInfo">
|
||
<image :src="$util.img(memberInfo.headimg)" v-if="memberInfo.headimg" @error="headimgError"
|
||
mode="aspectFill" show-menu-by-longpress/>
|
||
<image :src="$util.getDefaultImage().head" v-else mode="aspectFill" show-menu-by-longpress/>
|
||
<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>
|
||
</view>
|
||
|
||
<view class="image-container item-center">
|
||
<view class="slide-image">
|
||
<view class="bg-border"></view>
|
||
<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">{{ $lang("member.card.l25") }}</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')">{{ $lang("member.card.l31") }}</button>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
|
||
<view class="card-content"
|
||
v-if="levelInfo.is_free_shipping || levelInfo.consume_discount < 100 || levelInfo.point_feedback > 0">
|
||
<view class="card-content-head">
|
||
<view class="line-box">
|
||
<view class="line right"></view>
|
||
</view>
|
||
<view class="card-content-title">{{ $lang("member.card.l42") }}</view>
|
||
<view class="line-box">
|
||
<view class="line"></view>
|
||
</view>
|
||
<view class="clear"></view>
|
||
</view>
|
||
<view class="card-privilege-list">
|
||
<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">{{ $lang("member.card.l52") }}</view>
|
||
<view class="card-privilege-text">{{ $lang("member.card.l53") }}</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">{{ $lang("member.card.l57") }}</view>
|
||
<view class="card-privilege-text">{ $lang("member.card.l58") } 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">{{ $lang("member.card.l62") }}</view>
|
||
<view class="card-privilege-text">{ $lang("member.card.l63") } parseFloat(levelInfo.point_feedback) }}倍积分回馈</view>
|
||
</view>
|
||
</view>
|
||
|
||
<view v-if="levelInfo.send_coupon != '' || levelInfo.send_point > 0 || levelInfo.send_balance > 0">
|
||
<view class="card-content-head">
|
||
<view class="line-box">
|
||
<view class="line right"></view>
|
||
</view>
|
||
<view class="card-content-title">{{ $lang("member.card.l72") }}</view>
|
||
<view class="line-box">
|
||
<view class="line"></view>
|
||
</view>
|
||
<view class="clear"></view>
|
||
</view>
|
||
<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">{{ $lang("member.card.l81") }}</view>
|
||
<view class="card-privilege-text">{ $lang("member.card.l82") } 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">{{ $lang("member.card.l86") }}</view>
|
||
<view class="card-privilege-text">{ $lang("member.card.l82") } 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">{{ $lang("member.card.l91") }}</view>
|
||
<view class="card-privilege-text">{ $lang("member.card.l82") } levelInfo.send_coupon.split(',').length }}张优惠券</view>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
|
||
<!-- 弹出规则 -->
|
||
<view @touchmove.prevent.stop>
|
||
<uni-popup ref="explainPopup" type="bottom">
|
||
<view class="tips-layer">
|
||
<view class="head" @click="closeExplainPopup()">
|
||
<view class="title">{{ $lang("member.card.l104") }}</view>
|
||
<text class="iconfont icon-close"></text>
|
||
</view>
|
||
<view class="body">
|
||
<view class="detail margin-bottom">
|
||
<block v-if="levelInfo.remark != ''">
|
||
<view class="tip">{{ $lang("member.card.l104") }}</view>
|
||
<view class="font-size-base">{{ levelInfo.remark }}</view>
|
||
</block>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
</uni-popup>
|
||
</view>
|
||
|
||
<ns-goods-recommend ref="goodrecommend" route="super_member"></ns-goods-recommend>
|
||
<ns-login ref="login"></ns-login>
|
||
</view>
|
||
</template>
|
||
|
||
<script>
|
||
|
||
import scroll from '@/common/js/scroll-view.js';
|
||
|
||
export default {
|
||
mixins: [scroll],
|
||
data() {
|
||
return {
|
||
isSub: false, // 是否已提交
|
||
isIphoneX: false,
|
||
levelId: 0,
|
||
levelInfo: {
|
||
bg_color: '#333'
|
||
},
|
||
mpShareData: null //小程序分享数据
|
||
};
|
||
},
|
||
onLoad() {
|
||
//会员卡
|
||
if (!this.storeToken) {
|
||
this.$nextTick(() => {
|
||
this.$refs.login.open('/pages_tool/member/card');
|
||
});
|
||
return;
|
||
}
|
||
|
||
this.isIphoneX = this.$util.uniappIsIPhoneX();
|
||
|
||
this.levelId = this.memberInfo.member_level;
|
||
|
||
let levelInfo = this.memberInfo.member_level_info;
|
||
let charge_rule = levelInfo.charge_rule ? JSON.parse(levelInfo.charge_rule) : {};
|
||
levelInfo.charge_rule_arr = [];
|
||
Object.keys(charge_rule).forEach(key => {
|
||
levelInfo.charge_rule_arr.push({
|
||
key: key,
|
||
value: charge_rule[key]
|
||
});
|
||
});
|
||
this.levelInfo = levelInfo;
|
||
},
|
||
onShow() {
|
||
//小程序分享
|
||
// #ifdef MP-WEIXIN
|
||
this.$util.getMpShare('/pages_tool/member/card').then(res => {
|
||
this.mpShareData = res;
|
||
}).catch(err => {
|
||
// 如果后台没配置,用默认值
|
||
this.mpShareData = {
|
||
appMessage: {
|
||
title: $lang('member.card.l174'),
|
||
path: '/pages_tool/member/card'
|
||
},
|
||
timeLine: {
|
||
title: $lang('member.card.l174'),
|
||
query: '/pages_tool/member/card'
|
||
}
|
||
};
|
||
});
|
||
// #endif
|
||
},
|
||
methods: {
|
||
headimgError() {
|
||
this.memberInfo.headimg = this.$util.getDefaultImage().head;
|
||
},
|
||
/**
|
||
* 打开说明弹出层
|
||
*/
|
||
openExplainPopup() {
|
||
this.$refs.explainPopup.open();
|
||
},
|
||
/**
|
||
* 打开说明弹出层
|
||
*/
|
||
closeExplainPopup() {
|
||
this.$refs.explainPopup.close();
|
||
}
|
||
},
|
||
onBackPress(options) {
|
||
if (options.from === 'navigateBack') {
|
||
return false;
|
||
}
|
||
this.$util.redirectTo(this.$util.MEMBER_PAGE_URL);
|
||
return true;
|
||
},
|
||
onShareAppMessage() {
|
||
return this.mpShareData?.appMessage || {
|
||
title: $lang('member.card.l174'),
|
||
path: '/pages_tool/member/card'
|
||
};
|
||
},
|
||
onShareTimeline() {
|
||
return this.mpShareData?.timeLine || {
|
||
title: $lang('member.card.l174'),
|
||
query: '/pages_tool/member/card'
|
||
};
|
||
},
|
||
onAddToFavorites() {
|
||
return {
|
||
title: $lang('member.card.l174'),
|
||
path: '/pages_tool/member/card'
|
||
};
|
||
}
|
||
};
|
||
</script>
|
||
|
||
<style lang="scss">
|
||
@import './public/css/card.scss';
|
||
|
||
.banner-container .image-container .slide-image {
|
||
width: calc(100% - 60rpx);
|
||
height: 360rpx;
|
||
background-size: 100% 100%;
|
||
background-repeat: no-repeat;
|
||
}
|
||
|
||
.banner-container .image-container image {
|
||
background-color: #e3b66b;
|
||
}
|
||
|
||
.banner-container .slide-image .renew-btn {
|
||
text-align: center;
|
||
line-height: 56rpx;
|
||
height: 56rpx;
|
||
border-radius: $border-radius;
|
||
width: 160rpx;
|
||
font-size: $font-size-tag;
|
||
color: #e3b66b !important;
|
||
background: #fff;
|
||
position: absolute;
|
||
right: 10rpx;
|
||
bottom: 40rpx;
|
||
border: none;
|
||
z-index: 10;
|
||
}
|
||
</style>
|
||
|
||
<style lang="scss" scoped>
|
||
::v-deep .sku-layer .uni-popup__wrapper.uni-custom .uni-popup__wrapper-box {
|
||
max-height: unset !important;
|
||
}
|
||
</style> |