From e82c9dae9653e7d1a0692051ddc6d598d6b82e1f Mon Sep 17 00:00:00 2001 From: zhangrenyuan <18990852002@163.com> Date: Thu, 11 Dec 2025 13:58:21 +0800 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20feat:=20=E5=AE=8C=E5=96=84=E5=A4=9A?= =?UTF-8?q?=E8=AF=AD=E8=A8=80=E6=94=AF=E6=8C=81=EF=BC=8C=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E9=87=91=E8=B1=86=E5=85=85=E5=80=BC=E7=9B=B8=E5=85=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/locales/lang/zh-CN.js | 42 ++++++++++- src/views/recharge/bean/addBeanRecharge.vue | 75 ++++++++++---------- src/views/recharge/bean/beanOnlineRecharge.vue | 96 +++++++++++++------------- src/views/recharge/bean/beanRecharge.vue | 15 ++-- src/views/recharge/bean/beanSystemRecharge.vue | 86 ++++++++++++----------- 5 files changed, 181 insertions(+), 133 deletions(-) diff --git a/src/components/locales/lang/zh-CN.js b/src/components/locales/lang/zh-CN.js index 2dc60c7..ae32e5f 100644 --- a/src/components/locales/lang/zh-CN.js +++ b/src/components/locales/lang/zh-CN.js @@ -1,5 +1,4 @@ - // 包里的变量不可随意更改!!! export default { @@ -27,6 +26,8 @@ export default { payPlatformPlaceholder: '请选择平台信息', updateType: '数量更新类型', updateTypePlaceholder: '请选择更新类型', + orderNo: '订单号', + orderNoPlaceholder: '请输入订单号', consumeTime: '消耗时间', rechargeTime: '充值时间', refundTime: '退款时间', @@ -68,6 +69,12 @@ export default { 条: '条', 个: '个', goldBean: '金豆', + // 币种计量类型---金豆 + totalGoldBean: '金豆总数:', + payGoldBean: '付费金豆数:', + freeGoldBean: '免费金豆数:', + rechargeGoldBean: '充值金豆数:', + totalRechargeSGD: '合计新币数:', // 对话框标题 will: '将要', deleteRecord: '删除该翻译记录!', @@ -75,7 +82,9 @@ export default { // 提示信息组 elmessage: { // 通用 - addSuccess: '添加成功', + addSuccess: '添加成功', // 大写是添加成功,小写是新增 + addsuccess: '新增成功', + cancelOperation: '操作取消', searchSuccess: '查询成功', requestFailed: '请求失败', jwcodeError: '精网号错误', @@ -106,6 +115,11 @@ export default { checkRefundType: '请选择退款类型', checkRefundGoods: '请选择退款商品', checkOrderNo: '请输入订单号', + checkPayBean: '请输入付费金豆数', + checkNonNegative: '请输入非负整数', + checkFreeBean: '请输入免费金豆数', + checkRemark: '请输入备注', + checkFormInfo: '请检查并完善表单信息', // 校验提示(error) noEmptyJwcode: '精网号不能为空', noEmptySumGold: '消耗金币总数不能为空', @@ -113,6 +127,7 @@ export default { noOrder: '未查询到相关订单', noTotalGoldZero: '总金币数不能为0', noNegativeNumber: '不能输入负数', + noPayBeanFreeBeanZero: '付费金豆和免费金豆不能同时为0', limitDigitJwcode: '精网号只能包含数字', limitNoSpecialChar: '不能包含特殊符号或负数', limitNegativeNumber: '消耗金币总数不能为负数', @@ -163,6 +178,9 @@ export default { noNegativeNumber: '不允许输入负数', integerPartLimit: '整数部分最多允许六位', decimalPartLimit: '小数部分最多允许七位', + // 金豆充值相关 + systemRechargeAreaError: '系统充值地区获取失败', + onlineRechargeAreaError: '线上充值地区获取失败', }, // 通用列表字段组 @@ -175,6 +193,8 @@ export default { payPlatform: '平台信息', type: '更新类型', orderNo: '订单号', + number: '数量', + money: '金额', goodsName: '商品名称', refundType: '退款类型', refundModel: '退款方式', @@ -203,6 +223,11 @@ export default { refundTime: '退款时间', updateTime: '更新时间', operation: '操作', + // 金豆相关 + permanentBean: '付费金豆', + freeBean: '免费金豆', + mobile: '手机', + other: '其他', }, // 通用导出字段组 common_export: { @@ -267,6 +292,10 @@ export default { onlyStatisticsDataAfter20250101: '仅统计2025-01-01后的数据', store: '所属门店', maxReductionAmount: '红包最大抵扣金额', + //金豆 + currentPayableBean: '当前付费金豆', + currentFreeBean: '当前免费金豆', + consumeTotalBean: '消耗金豆总数', }, // 审核组 @@ -367,6 +396,15 @@ export default { paymentAsia: 'PaymentAsia-链接收款', other: '其他' }, + // 金豆 + permanentBean: '付费金豆', + freeBean: '免费金豆', + confirmRecharge: '确认充值吗?', + prompt: '提示', + addBeanRecharge: '新增充值', + systemRecharge: '系统充值', + onlineRecharge: '线上充值', + mobile: '手机', }, // 消耗组 diff --git a/src/views/recharge/bean/addBeanRecharge.vue b/src/views/recharge/bean/addBeanRecharge.vue index 5ae5387..6277518 100644 --- a/src/views/recharge/bean/addBeanRecharge.vue +++ b/src/views/recharge/bean/addBeanRecharge.vue @@ -14,12 +14,15 @@ import throttle from 'lodash/throttle' import { useAdminStore } from "@/store/index.js"; import { storeToRefs } from "pinia"; import _ from 'lodash'; +import { useI18n } from 'vue-i18n' +const { t } = useI18n() + const user = ref({}) const getUser = async function (jwcode) { if (addForm.value.jwcode) { addForm.value.jwcode = addForm.value.jwcode.replace(/\s/g, ''); } else { - ElMessage.error('请先输入精网号') + ElMessage.error(t('elmessage.checkJwcode')) return false } try { @@ -32,15 +35,15 @@ const getUser = async function (jwcode) { if (result.code === 0) { ElMessage.error(result.msg); } else if (result.data === null) { - ElMessage.error("用户不存在"); + ElMessage.error(t('elmessage.noUser')); } else { user.value = result.data; console.log("用户信息", user.value.name); - ElMessage.success("查询成功"); + ElMessage.success(t('elmessage.searchSuccess')); } } catch (error) { console.log("请求失败", error); - ElMessage.error("精网号错误"); + ElMessage.error(t('elmessage.jwcodeError')); } } //提交禁止重复点击 @@ -58,22 +61,22 @@ const adminStore = useAdminStore() const { adminData } = storeToRefs(adminStore) const rules = reactive({ jwcode: [ - { required: true, message: '请输入精网号', trigger: 'blur' }, + { required: true, message: t('elmessage.checkJwcode'), trigger: 'blur' }, { validator: (rule, value, callback) => { if (!value) { - callback(new Error('精网号不能为空')); + callback(new Error(t('elmessage.noEmptyJwcode'))); return; } if (/[^0-9]/.test(value)) { - callback(new Error('精网号只能包含数字')); + callback(new Error(t('elmessage.limitDigitJwcode'))); return; } callback(); }, trigger: 'blur' }], permanentBean: [ - { required: true, message: '请输入付费金豆数', trigger: 'change' }, + { required: true, message: t('elmessage.checkPayBean'), trigger: 'change' }, { validator: (rule, value, callback) => { if (!value) { @@ -81,13 +84,13 @@ const rules = reactive({ } // 检查是否为非负整数 if (!/^\d+$/.test(value)) { - callback(new Error('请输入非负整数')); + callback(new Error(t('elmessage.checkNonNegative'))); return; } // 检查位数 if (value.length > 6) { - callback(new Error('整数位数不能超过6位')); + callback(new Error(t('elmessage.limitSix'))); return; } callback(); @@ -97,7 +100,7 @@ const rules = reactive({ } ], freeBean: [ - { required: true, message: '请输入免费金豆数', trigger: 'change' }, + { required: true, message: t('elmessage.checkFreeBean'), trigger: 'change' }, { validator: (rule, value, callback) => { if (!value) { @@ -105,13 +108,13 @@ const rules = reactive({ } // 检查是否为非负整数 if (!/^\d+$/.test(value)) { - callback(new Error('请输入非负整数')); + callback(new Error(t('elmessage.checkNonNegative'))); return; } // 检查位数 if (value.length > 6) { - callback(new Error('整数位数不能超过6位')); + callback(new Error(t('elmessage.limitSix'))); return; } callback(); @@ -120,7 +123,7 @@ const rules = reactive({ } ], remark: [ - { required: true, message: '请输入备注', trigger: 'blur' } + { required: true, message: t('elmessage.checkRemark'), trigger: 'blur' } ] }); @@ -141,22 +144,22 @@ const handleAddForm = async () => { formRef.value.validate((valid) => { if (valid) { if (Number(addForm.value.permanentBean) === 0 && Number(addForm.value.freeBean) === 0) { - reject(new Error('付费金豆和免费金豆不能同时为0')); + reject(new Error(t('elmessage.noPayBeanFreeBeanZero'))); } resolve(); // 验证通过,继续执行后续代码 } else { - reject(new Error('请检查并完善表单信息')); // 验证失败,抛出错误 + reject(new Error(t('elmessage.checkFormInfo'))); // 验证失败,抛出错误 } }); }); console.log('adminData', adminData.value); await ElMessageBox.confirm( - '确认充值吗?', - '提示', + t('recharge.confirmRecharge'), + t('recharge.prompt'), { - confirmButtonText: '确认', - cancelButtonText: '取消', + confirmButtonText: t('common.confirm'), + cancelButtonText: t('common.cancel'), type: "primary", lockScroll: false, } @@ -174,7 +177,7 @@ const handleAddForm = async () => { }) addDisabled.value = false if (result.code == 200) { - ElMessage.success('新增成功') + ElMessage.success(t('elmessage.addsuccess')) deleteAddForm() user.value = {} } else { @@ -182,7 +185,7 @@ const handleAddForm = async () => { } } catch (error) { console.log('金豆新增充值失败'); - ElMessage.error(error.message || '操作取消'); + ElMessage.error(error.message || t('elmessage.cancelOperation')); } } @@ -191,22 +194,22 @@ const handleAddForm = async () => {
- + - 查询 + {{ t('common.search') }} - + - + - + - 重置 - 提交 + {{ t('common.reset') }} + {{ t('common.submit') }}
@@ -215,12 +218,12 @@ const handleAddForm = async () => {
- 客户信息 + {{ t('common_add_user.customerInfo') }}
-

姓名:

+

{{ t('common_add_user.name') }}:

{{ user.name }}

-

当前付费金豆:

+

{{ t('common_add_user.currentPayableBean') }}:

{{ Number(user.permanentBean) }}

@@ -228,17 +231,17 @@ const handleAddForm = async () => {
-

精网号:

+

{{ t('common.jwcode') }}:

{{ user.jwcode }}

-

当前免费金豆:

+

{{ t('common_add_user.currentFreeBean') }}:

{{ user.freeBean }}

-

所属门店:

+

{{ t('common_add_user.store') }}:

{{ user.market }}

-

消耗金豆总数:

+

{{ t('common_add_user.consumeTotalBean') }}:

{{ user.consumeSum }}

{{ 0 }}

diff --git a/src/views/recharge/bean/beanOnlineRecharge.vue b/src/views/recharge/bean/beanOnlineRecharge.vue index 567839a..58276b7 100644 --- a/src/views/recharge/bean/beanOnlineRecharge.vue +++ b/src/views/recharge/bean/beanOnlineRecharge.vue @@ -6,6 +6,8 @@ import { AiFillRead } from 'vue-icons-plus/ai' import axios from 'axios' import moment from 'moment' import API from '@/util/http.js' +import {useI18n} from 'vue-i18n' +const { t } = useI18n() const defaultTime = [ new Date(2000, 1, 1, 0, 0, 0), @@ -73,7 +75,7 @@ const getArea = async () => { market.value = result.data console.log('线上充值地区获取成功', market.value) } else { - ElMessage.error('线上充值地区获取失败') + ElMessage.error(t('elmessage.onlineRechargeAreaError')) } } //获取今天日期 @@ -156,7 +158,7 @@ const search = () => { if (selectData.value.jwcode) { const numRef = /^\d{1,9}$/; if (!numRef.test(selectData.value.jwcode)) { - ElMessage.error('请检查精网号格式') + ElMessage.error(t('elmessage.checkJwcodeFormat')) return } } @@ -205,7 +207,7 @@ const platform = [ }, { value: 2, - label: '手机' + label: t('recharge.mobile') } ] //排序字段 @@ -258,13 +260,13 @@ const exportExcel = async () => { try { const res = await API({ url: '/export/exportol', data: params }) if (res.code === 200) { - ElMessage.success('导出成功') + ElMessage.success(t('elmessage.exportSuccess')) } else { - ElMessage.error(res.message || '导出失败,请稍后重试') + ElMessage.error(res.message || t('elmessage.exportFailed')) } } catch (error) { console.log('请求失败', error) - ElMessage.error('导出失败,请稍后重试') + ElMessage.error(t('elmessage.exportFailed')) } } const exportListVisible = ref(false) @@ -294,7 +296,7 @@ const getExportList = async () => { } } catch (error) { console.error('获取导出列表出错:', error) - ElMessage.error('获取导出列表失败,请稍后重试') + ElMessage.error(t('elmessage.getExportListError')) } finally { exportListLoading.value = false } @@ -307,7 +309,7 @@ const downloadExportFile = (item) => { link.download = item.fileName link.click() } else { - ElMessage.warning('文件还在导出中,请稍后再试') + ElMessage.warning(t('elmessage.exportingInProgress')) } } //根据状态返回对应的标签类型 @@ -329,15 +331,15 @@ const getTagType = (state) => { const getTagText = (state) => { switch (state) { case 0: - return '待执行'; + return t('elmessage.pendingExecution'); case 1: - return '执行中'; + return t('elmessage.executing'); case 2: - return '执行完成'; + return t('elmessage.executed'); case 3: - return '执行出错'; + return t('elmessage.errorExecution'); default: - return '未知状态'; + return t('elmessage.unknownStatus'); } } const format3 = (num) => { @@ -355,22 +357,22 @@ onMounted(async function () {
- 精网号: - + {{ t('common.jwcode') }}: +
- 所属地区: - + {{ t('common.market') }}: +
- 订单号: - + {{ t('common.orderNo') }}: +
- 充值平台: - + {{ t('common.rechargePlatform') }}: +
@@ -379,9 +381,9 @@ onMounted(async function () {
- 充值时间: - {{ t('common.rechargeTime') }}: +
- 查询 - 导出Excel - 查看导出列表 - 重置 + {{ t('common.search') }} + {{ t('common.exportExcel') }} + {{ t('common.viewExportList') }} + {{ t('common.reset') }}
- 充值金豆数:{{ format3(num) }}    合计新币数:{{ format3(money) }} + {{ t('common.rechargeGoldBean') }}{{ format3(num) }}    {{ t('common.totalRechargeSGD') }}{{ format3(money) }}
- + - - - - - - - + + + + + + + - + @@ -449,33 +451,33 @@ onMounted(async function () {
- + - - + + - + - + diff --git a/src/views/recharge/bean/beanRecharge.vue b/src/views/recharge/bean/beanRecharge.vue index 052214c..f77fbc4 100644 --- a/src/views/recharge/bean/beanRecharge.vue +++ b/src/views/recharge/bean/beanRecharge.vue @@ -6,24 +6,24 @@ :class="{ 'active-btn': activeTab === 'addBeanRecharge' }" @click="navigateTo('addBeanRecharge')" v-if="hasAdd" - style="width: 6.5vw"> - 新增充值 + style="min-width: 6.5vw"> + {{ t('recharge.addBeanRecharge') }} - 系统充值 + style="min-width: 6.5vw"> + {{ t('recharge.systemRecharge') }} - 线上充值 + style="min-width: 6.5vw;"> + {{ t('recharge.onlineRecharge') }}
@@ -37,6 +37,9 @@ import {useRouter, useRoute} from 'vue-router'; import {storeToRefs} from 'pinia'; import {useAdminStore} from '@/store/index.js'; import {hasMenuPermission, permissionMapping} from "@/utils/menuTreePermission.js"; +import {useI18n} from 'vue-i18n'; +const { t } = useI18n(); + const router = useRouter(); const route = useRoute(); diff --git a/src/views/recharge/bean/beanSystemRecharge.vue b/src/views/recharge/bean/beanSystemRecharge.vue index 7449e23..0756c26 100644 --- a/src/views/recharge/bean/beanSystemRecharge.vue +++ b/src/views/recharge/bean/beanSystemRecharge.vue @@ -10,6 +10,8 @@ import { useAdminStore } from "@/store/index.js"; import { storeToRefs } from "pinia"; const adminStore = useAdminStore(); const { adminData, menuTree,flag } = storeToRefs(adminStore); +import { useI18n } from 'vue-i18n' +const { t } = useI18n() // 监听全局flag状态变化 watch(flag, (newFlag, oldFlag) => { @@ -87,7 +89,7 @@ const getArea = async () => { market.value = result.data console.log('系统充值地区获取成功', market.value) } else { - ElMessage.error('系统充值地区获取失败') + ElMessage.error(t('elmessage.systemRechargeAreaError')) } } //获取今天日期 @@ -169,7 +171,7 @@ const search = () => { if (selectData.value.jwcode) { const numRef = /^\d{1,9}$/; if (!numRef.test(selectData.value.jwcode)) { - ElMessage.error('请检查精网号格式') + ElMessage.error(t('elmessage.checkJwcodeFormat')) return } } @@ -262,13 +264,13 @@ const exportExcel = async () => { console.log('系统充值导出的参数为:', params); if (res.code === 200) { - ElMessage.success('导出成功') + ElMessage.success(t('elmessage.exportSuccess')) } else { - ElMessage.error(res.message || '导出失败,请稍后重试') + ElMessage.error(res.message || t('elmessage.exportFailed')) } } catch (error) { console.log('请求失败', error) - ElMessage.error('导出失败,请稍后重试') + ElMessage.error(t('elmessage.exportFailed')) } } const exportListVisible = ref(false) @@ -294,11 +296,11 @@ const getExportList = async () => { }); exportList.value = filteredData } else { - ElMessage.error(result.msg || '获取导出列表失败') + ElMessage.error(result.msg || t('elmessage.getExportListError')) } } catch (error) { console.error('获取导出列表出错:', error) - ElMessage.error('获取导出列表失败,请稍后重试') + ElMessage.error(t('elmessage.getExportListError')) } finally { exportListLoading.value = false } @@ -311,7 +313,7 @@ const downloadExportFile = (item) => { link.download = item.fileName link.click() } else { - ElMessage.warning('文件还在导出中,请稍后再试') + ElMessage.warning(t('elmessage.exportingInProgress')) } } //根据状态返回对应的标签类型 @@ -333,15 +335,15 @@ const getTagType = (state) => { const getTagText = (state) => { switch (state) { case 0: - return '待执行'; + return t('elmessage.pendingExecution'); case 1: - return '执行中'; + return t('elmessage.executing'); case 2: - return '执行完成'; + return t('elmessage.executed'); case 3: - return '执行出错'; + return t('elmessage.errorExecution'); default: - return '未知状态'; + return t('elmessage.unknownStatus'); } } const format3 = (num) => { @@ -359,12 +361,12 @@ onMounted(async function () {
- 精网号: - + {{ t('common.jwcode') }}: +
- 所属地区: - + {{ t('common.market') }}: +
@@ -373,9 +375,9 @@ onMounted(async function () {
- 充值时间: - {{ t('common.rechargeTime') }}: +
- 查询 - 导出Excel - 查看导出列表 - 重置 + {{ t('common.search') }} + {{ t('common.exportExcel') }} + {{ t('common.viewExportList') }} + {{ t('common.reset') }}
- 金豆总数:{{ format3(beanNum) }}     - 付费金豆数:{{ format3(permanentBeans) }}     - 免费金豆数:{{ format3(freeBean) }} + {{ t('common.totalGoldBean') }}{{ format3(beanNum) }}     + {{ t('common.payGoldBean') }}{{ format3(permanentBeans) }}     + {{ t('common.freeGoldBean') }}{{ format3(freeBean) }}
- + - - - - - - - + + + + + + + @@ -435,33 +437,33 @@ onMounted(async function () {
- + - - + + - + - +