feat: 新增多语言文案、优化导航及工具函数,修复部分业务逻辑

1. 新增多语言资源文件,覆盖文章、预约日期、会员信息、优惠券、表单、购物车、积分商城、分销、AI聊天等多个模块
2. 优化底部导航组件,使用多语言配置替代硬编码文案
3. 重构工具函数,新增从后端数据提取多语言文案的工具方法
4. 修复邀请好友页面的保存提示文案,替换为多语言版本
5. 修复商品SKU组件的提示文案,使用多语言配置
6. 重构AI聊天页面的帮助文档和回复模板,使用多语言配置
7. 优化空状态组件,支持多语言默认文案
8. 修复跳转逻辑,补全参数传递
9. 新增本地开发环境配置
This commit is contained in:
2026-06-25 18:15:31 +08:00
parent ca4e7fd170
commit 2d8846c64c
82 changed files with 3497 additions and 1062 deletions

View File

@@ -5,37 +5,37 @@
<view class="status-wrap">
<view class="status-name">{{ detail.refund_status_name }}</view>
<view class="refund-explain" v-if="detail.refund_status == 1">
<view class="font-size-goods-tag color-tip">如果商家拒绝,你可重新发起申请</view>
<view class="font-size-goods-tag color-tip">如果商家同意,将通过申请并退款给你</view>
<view class="font-size-goods-tag color-tip">{{ $lang('statusTip.merchantReject') }}</view>
<view class="font-size-goods-tag color-tip">{{ $lang('statusTip.merchantAgree') }}</view>
<!-- <view class="font-size-goods-tag color-tip">如果商家逾期未处理,平台将自动通过申请并退款给你</view> -->
</view>
<view class="refund-explain" v-if="detail.refund_status == 5">
<view class="font-size-goods-tag color-tip">如果商家确认收货将会退款给你</view>
<view class="font-size-goods-tag color-tip">如果商家拒绝收货,该次退款将会关闭,你可以重新发起退款</view>
<view class="font-size-goods-tag color-tip">{{ $lang('statusTip.merchantConfirmReceive') }}</view>
<view class="font-size-goods-tag color-tip">{{ $lang('statusTip.merchantRejectReceive') }}</view>
</view>
</view>
<view class="history-wrap" @click="switchAction('consultrecord')">
<view>协商记录</view>
<view>{{ $lang('consultRecord') }}</view>
<text class="iconfont icon-right"></text>
</view>
<view class="refund-address-wrap" v-if="detail.refund_status == 4">
<view class="header">退货地址</view>
<view class="header">{{ $lang('returnAddress.title') }}</view>
<view>
<text>收货人:{{ detail.shop_contacts }}</text>
<text>{{ $lang('returnAddress.receiver') }}{{ detail.shop_contacts }}</text>
</view>
<view>
<text>联系方式:{{ detail.shop_mobile }}</text>
<text>{{ $lang('returnAddress.contact') }}{{ detail.shop_mobile }}</text>
</view>
<view>
<text class="address">退货地址:{{ detail.shop_address }}</text>
<view class="copy" @click="$util.copy(detail.shop_address)">复制</view>
<text class="address">{{ $lang('returnAddress.address') }}{{ detail.shop_address }}</text>
<view class="copy" @click="$util.copy(detail.shop_address)">{{ $lang('returnAddress.copy') }}</view>
</view>
</view>
<view class="refund-info">
<view class="header">退款信息</view>
<view class="header">{{ $lang('refundInfo.title') }}</view>
<view class="body">
<!-- 商品信息 -->
<view class="goods-wrap">
@@ -48,16 +48,16 @@
</view>
<!-- 退款信息 -->
<view class="info">
<view class="cell">退款方式:{{ detail.refund_type == 1 ? '仅退款' : '退款退货' }}</view>
<view class="cell" v-if="detail.refund_status == 3">退款途径:{{ detail.refund_money_type == 1 ? '原路退款' : detail.refund_money_type == 2 ? '线下退款' : '退款到余额' }}</view>
<view class="cell">退款原因:{{ detail.refund_reason }}</view>
<view class="cell" v-if="detail.refund_status == 3 && detail.refund_real_money>0">退款金额:{{ $lang('common.currencySymbol') }}{{ detail.refund_real_money }}</view>
<view class="cell" v-else-if="detail.refund_apply_money>0">退款金额:{{ $lang('common.currencySymbol') }}{{ detail.refund_apply_money }}</view>
<view class="cell">退款编号:{{ detail.refund_no }}</view>
<view class="cell">申请时间:{{ $util.timeStampTurnTime(detail.refund_action_time) }}</view>
<view class="cell" v-if="detail.refund_time">退款时间:{{ $util.timeStampTurnTime(detail.refund_time) }}</view>
<view class="cell" v-if="detail.refund_remark != ''">退款说明:{{ detail.refund_remark }}</view>
<view class="cell" v-if="detail.use_point>0">退款积分:{{ detail.use_point }}</view>
<view class="cell">{{ $lang('refundInfo.refundMethod') }}{{ detail.refund_type == 1 ? $lang('refundInfo.refundOnly') : $lang('refundInfo.refundReturn') }}</view>
<view class="cell" v-if="detail.refund_status == 3">{{ $lang('refundInfo.refundChannel') }}{{ detail.refund_money_type == 1 ? $lang('refundInfo.originalRefund') : detail.refund_money_type == 2 ? $lang('refundInfo.offlineRefund') : $lang('refundInfo.balanceRefund') }}</view>
<view class="cell">{{ $lang('refundInfo.refundReason') }}{{ detail.refund_reason }}</view>
<view class="cell" v-if="detail.refund_status == 3 && detail.refund_real_money>0">{{ $lang('refundInfo.refundAmount') }}{{ $lang('common.currencySymbol') }}{{ detail.refund_real_money }}</view>
<view class="cell" v-else-if="detail.refund_apply_money>0">{{ $lang('refundInfo.refundAmount') }}{{ $lang('common.currencySymbol') }}{{ detail.refund_apply_money }}</view>
<view class="cell">{{ $lang('refundInfo.refundNo') }}{{ detail.refund_no }}</view>
<view class="cell">{{ $lang('refundInfo.applyTime') }}{{ $util.timeStampTurnTime(detail.refund_action_time) }}</view>
<view class="cell" v-if="detail.refund_time">{{ $lang('refundInfo.refundTime') }}{{ $util.timeStampTurnTime(detail.refund_time) }}</view>
<view class="cell" v-if="detail.refund_remark != ''">{{ $lang('refundInfo.refundRemark') }}{{ detail.refund_remark }}</view>
<view class="cell" v-if="detail.use_point>0">{{ $lang('refundInfo.refundPoint') }}{{ detail.use_point }}</view>
</view>
</view>
</view>
@@ -73,11 +73,11 @@
<view class="return-goods-container">
<view class="form-wrap">
<view class="item">
<view class="label">物流公司</view>
<view class="label">{{ $lang('returnGoods.expressCompany') }}</view>
<view class="cont">
<input
type="text"
placeholder="请输入物流公司"
:placeholder="$lang('returnGoods.expressCompanyPlaceholder')"
class="input"
placeholder-class="input-placeholder color-tip"
v-model="formData.refund_delivery_name"
@@ -85,11 +85,11 @@
</view>
</view>
<view class="item">
<view class="label">物流单号</view>
<view class="label">{{ $lang('returnGoods.expressNo') }}</view>
<view class="cont">
<input
type="text"
placeholder="请输入物流单号"
:placeholder="$lang('returnGoods.expressNoPlaceholder')"
class="input"
placeholder-class="input-placeholder color-tip"
v-model="formData.refund_delivery_no"
@@ -97,19 +97,19 @@
</view>
</view>
<view class="item">
<view class="label">物流说明</view>
<view class="label">{{ $lang('returnGoods.expressRemark') }}</view>
<view class="cont">
<textarea
placeholder-class="color-tip font-size-tag"
:auto-height="true"
class="textarea"
placeholder="选填"
:placeholder="$lang('returnGoods.expressRemarkPlaceholder')"
v-model="formData.refund_delivery_remark"
/>
</view>
</view>
</view>
<button type="primary" class="sub-btn" @click="refurnGoods">提交</button>
<button type="primary" class="sub-btn" @click="refurnGoods">{{ $lang('common.submit') }}</button>
</view>
</view>
@@ -118,7 +118,7 @@
<view class="record-item" :class="logItem.action_way == 1 ? 'buyer' : ''" v-for="(logItem, logIndex) in detail.refund_log_list" :key="logIndex">
<view class="cont">
<view class="head">
<text>{{ logItem.action_way == 1 ? '买家' : '卖家' }}</text>
<text>{{ logItem.action_way == 1 ? $lang('record.buyer') : $lang('record.seller') }}</text>
<text class="time">{{ $util.timeStampTurnTime(logItem.action_time) }}</text>
</view>
<view class="body">
@@ -136,7 +136,7 @@
<text>联系客服</text>
</view>
</ns-contact> -->
<view @click="switchAction('')">返回详情</view>
<view @click="switchAction('')">{{ $lang('record.backToDetail') }}</view>
</view>
</view>
</scroll-view>
@@ -190,7 +190,7 @@ export default {
this.detail = 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);
@@ -206,7 +206,7 @@ export default {
case 'orderRefundCancel':
this.cancleRefund(this.detail.order_goods_id, res => {
if (res.code >= 0) {
this.$util.showToast({ title: '撤销成功' });
this.$util.showToast({ title: this.$lang('toast.cancelSuccess') });
setTimeout(() => {
this.$util.redirectTo('/pages_order/list');
}, 1000);
@@ -223,8 +223,8 @@ export default {
},
refurnGoods() {
var rule = [
{ name: 'refund_delivery_name', checkType: 'required', errorMsg: '请输入物流公司' },
{ name: 'refund_delivery_no', checkType: 'required', errorMsg: '请输入物流单号' }
{ name: 'refund_delivery_name', checkType: 'required', errorMsg: this.$lang('validate.pleaseInputExpressCompany') },
{ name: 'refund_delivery_no', checkType: 'required', errorMsg: this.$lang('validate.pleaseInputExpressNo') }
];
this.formData.order_goods_id = this.order_goods_id;
var checkRes = validate.check(this.formData, rule);