From ecc395d2ab2dd9dcea5ecf669459a3f0d1ec68dc Mon Sep 17 00:00:00 2001 From: ZhangYong Date: Fri, 10 Apr 2026 11:44:07 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A4=9A=E8=AF=AD=E8=A8=80=E4=BB=A5=E5=8F=8A?= =?UTF-8?q?=E4=B8=9A=E7=BB=A9=E5=BD=92=E5=B1=9E=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/locales/lang/en.js | 17 ++ src/components/locales/lang/zh-CN.js | 144 ++++++----- .../financialAccount/performanceAttribution.vue | 275 ++++++++++----------- .../components/WalletDetailTemplate.vue | 2 +- 4 files changed, 231 insertions(+), 207 deletions(-) diff --git a/src/components/locales/lang/en.js b/src/components/locales/lang/en.js index 543d703..4dadb96 100644 --- a/src/components/locales/lang/en.js +++ b/src/components/locales/lang/en.js @@ -10,6 +10,7 @@ export default { pleaseInputName: "Enter name", customerName: "Customer", customerNamePlaceholder: "Enter customer name", + customer: "Customer", jwcode: "Homily ID", jwcodePlaceholder: "Enter Homily ID", activityName: "Activity", @@ -1344,6 +1345,22 @@ export default { invalidFormat:"Invalid amount format. Maximum 2 decimal places allowed.", paymentMust:"Payment amount must be 0", remarksexceed:"Remarks cannot exceed 100 characters", + marketConsumption:"Market Consumption Gold Performance Adjustment", + time:"Select Time", + coefficient:"Coefficient Adjustment", + coefficientPlaceholder:"Please enter coefficient adjustment", + adjustment:"Transfer In", + adjustmentOut:"Transfer Out", + marketTeam:"Market Team", + total:"Total", + performanceAdjustment:"Performance Adjustment", + payTime:"Payment Time", + orderCode:"System Transaction No.", + receivedMarketName:"Received Market", + performanceMarket:"Performance Market", + goodsName:"Income Category", + goodNum:"Quantity", + payType:"Payment Method", } }, diff --git a/src/components/locales/lang/zh-CN.js b/src/components/locales/lang/zh-CN.js index 9d5c4cf..741328b 100644 --- a/src/components/locales/lang/zh-CN.js +++ b/src/components/locales/lang/zh-CN.js @@ -10,6 +10,7 @@ export default { pleaseInputName: "请输入姓名", customerName: "客户姓名", customerNamePlaceholder: "请输入客户姓名", + customer: "客户", jwcode: "精网号", jwcodePlaceholder: "请输入精网号", activityName: "活动名称", @@ -107,7 +108,7 @@ export default { add: "添加", addUser: "新增用户", addRole: "新增角色", - addCashFlow:"新增流水", + addCashFlow: "新增流水", save: "保存", saving: "保存中...", addActivity: "新增活动", @@ -173,7 +174,7 @@ export default { all: "全部", unknownSubmitter: "未知提交人", noAuditorRecorded: "未记录审核人", - noExecutorRecorded: "未记录执行人" + noExecutorRecorded: "未记录执行人", }, // 权限模块 @@ -183,10 +184,11 @@ export default { changeRoleConfirmContent1: "确认修改权限角色?
您正在将【", changeRoleConfirmContent2: "】的权限角色从【", changeRoleConfirmContent3: "】修改为【", - changeRoleConfirmContent4: "】
变更后,该用户的可操作权限将同步更新为新角色配置,涉及数据访问、功能操作等权限变化,请谨慎确认。", + changeRoleConfirmContent4: + "】
变更后,该用户的可操作权限将同步更新为新角色配置,涉及数据访问、功能操作等权限变化,请谨慎确认。", changeRoleSuccessContent1: "用户", changeRoleSuccessContent2: "的权限角色已更改为【", - roleRegionNote: "此地区无实际意义,仅用于各分部负责人查看其地区角色" + roleRegionNote: "此地区无实际意义,仅用于各分部负责人查看其地区角色", }, // 提示信息组 elmessage: { @@ -407,7 +409,7 @@ export default { activityLoadFailed: "活动列表加载失败,请稍后重试", activityDataLoadFailed: "活动数据加载异常,请稍后重试", getDataFailed: "获取数据失败", - networkError:"网络错误", + networkError: "网络错误", exportWalletDetailError: "导出钱包明细出错", selectCompanyWallet: "请选择公司钱包", // 权限 @@ -473,9 +475,9 @@ export default { activity: "活动名称", receiveArea: "到账地区", performanceMarket: "业绩归属地区", - receiveType:"收入类别", - paymentMethod:"付款方式", - nums:"个数", + receiveType: "收入类别", + paymentMethod: "付款方式", + nums: "个数", startTime: "开始时间", endTime: "结束时间", status: "状态", @@ -549,7 +551,7 @@ export default { activityStatus: { notStarted: "未开始", inProgress: "进行中", - ended: "已结束" + ended: "已结束", }, operation: "操作", configTime: "配置时间", @@ -697,7 +699,7 @@ export default { similarCosumeRecords: "检测到该用户近期有相似消耗记录", rechargePermanentGold: "充值永久金币", buy: "购买", - orderStatus:'订单状态', + orderStatus: "订单状态", operator: "操作人", submitter: "提交人", continueOperation: "是否继续操作?", @@ -1068,8 +1070,8 @@ export default { placeholder: "请选择语言", options: { zhCN: "中文(简体)", - en: "English" - } + en: "English", + }, }, showStaffData: "显示员工数据", hideStaffData: "隐藏员工数据", @@ -1104,7 +1106,7 @@ export default { againPasswordPlaceholder: "请再次输入新密码", tips: { lengthAndChars: "密码由8-16位数字、字母或符号组成", - complexity: "至少含2种以上字符" + complexity: "至少含2种以上字符", }, rules: { allowedChars: "密码只能包含数字、字母或符号", @@ -1113,15 +1115,15 @@ export default { complexity: "密码至少包含两种类型(数字、字母或符号)", notMatch: "两次输入密码不一致", newPasswordRequired: "新密码不能为空", - againPasswordRequired: "请再次输入新密码" + againPasswordRequired: "请再次输入新密码", }, - submitting: "修改中..." + submitting: "修改中...", }, difftime: { minuteAgo: "分钟前", hourAgo: "小时前", yesterday: "昨天", - } + }, }, // 现金管理 @@ -1161,9 +1163,9 @@ export default { paymentAsia: "PaymentAsia", transfer: "E-Transfer", iotPay: "IOT Pay", - stripe3:'Stripe3', - paysolution:'paysolution', - stripe2:'Stripe2', + stripe3: "Stripe3", + paysolution: "paysolution", + stripe2: "Stripe2", }, statusList: { submitted: "已提交", @@ -1312,7 +1314,7 @@ export default { refundConfirmTitle: "退款确认", refundConfirmContent: "确定要对订单 {orderNo} 进行退款吗?", //钱包 - wallet:{ + wallet: { HongKongWallet: "香港钱包", MalaysiaWallet: "马来西亚钱包", CanadaWallet: "加拿大钱包", @@ -1321,50 +1323,66 @@ export default { ThailandHAWallet: "泰国HA钱包", ThailandHSWallet: "泰国HS钱包", VietnamHCMWallet: "越南钱包", - BeijingWallet: "北京公司钱包" + BeijingWallet: "北京公司钱包", + }, + cashFlow: { + otherIncome: "其他收入", + addFee: "手续费补充", + performanceMarket: "业绩归属地区", + performanceMarketPlaceholder: "请选择业绩归属地区", + incomeCategory: "收入类别", + incomeCategoryPlaceholder: "请选择收入类别", + investmentIncome: "理财收入", + taxRefund: "退税", + governmentSubsidy: "政府补贴", + localIntercompany: "本地往来", + corporateIntercompany: "公司往来", + otherIncomeNon: "其他收入-非业绩", + otherIncomeYes: "其他收入-算业绩", + quantity: "个数", + quantityPlaceholder: "请输入个数", + payType: "支付方式", + payTypePlaceholder: "请选择支付方式", + paymentCurrency: "付款币种", + paymentCurrencyPlaceholder: "请选择付款币种", + paymentAmount: "付款金额", + paymentAmountPlaceholder: "请输入付款金额", + paymentTime: "付款时间", + paymentTimePlaceholder: "选择付款时间", + bankHandlingFee: "银行手续费", + bankHandlingFeePlaceholder: "请输入银行手续费", + remarks: "备注", + remarksPlaceholder: "请输入备注 (选填,限制100字)", + cancel: "取消", + submit: "提交", + ipay88: "iPay88", + cardPayment: "刷卡", + fixedProcessingFee: "固定手续费", + settlementRegion: "到账地区", + Malaysia: "马来西亚", + processingFee: "手续费", + processingFeePlaceholder: "请输入手续费", + quantityMustBeNumber: "个数必须为数字", + invalidFormat: "金额格式不正确,最多两位小数", + paymentMust: "付款金额必须为0", + remarksexceed: "备注不能超过100字", + marketConsumption: "市场消耗金币业绩调整", + time: "选择时间", + coefficient: "系数调整", + coefficientPlaceholder: "请输入系数调整", + adjustment: "调入", + adjustmentOut: "调出", + marketTeam: "市场团队", + total: "合计", + performanceAdjustment: "业绩调整", + payTime: "付款时间", + orderCode: "系统交易号", + receivedMarketName: "到账地区", + performanceMarket: "业绩归属地区", + goodsName: "收入类别", + goodNum: "个数", + payType: "付款方式", }, - cashFlow:{ - otherIncome:"其他收入", - addFee:"手续费补充", - performanceMarket:"业绩归属地区", - performanceMarketPlaceholder:"请选择业绩归属地区", - incomeCategory:"收入类别", - incomeCategoryPlaceholder:"请选择收入类别", - investmentIncome:"理财收入", - taxRefund:"退税", - governmentSubsidy:"政府补贴", - localIntercompany:"本地往来", - corporateIntercompany:"公司往来", - otherIncomeNon:"其他收入-非业绩", - otherIncomeYes:"其他收入-算业绩", - quantity:"个数", - quantityPlaceholder:"请输入个数", - payType:"支付方式", - payTypePlaceholder:"请选择支付方式", - paymentCurrency:"付款币种", - paymentCurrencyPlaceholder:"请选择付款币种", - paymentAmount:"付款金额", - paymentAmountPlaceholder:"请输入付款金额", - paymentTime:"付款时间", - paymentTimePlaceholder:"选择付款时间", - bankHandlingFee:"银行手续费", - bankHandlingFeePlaceholder:"请输入银行手续费", - remarks:"备注", - remarksPlaceholder:"请输入备注 (选填,限制100字)", - cancel:"取消", - submit:"提交", - ipay88:"iPay88", - cardPayment:"刷卡", - fixedProcessingFee:"固定手续费", - settlementRegion:"到账地区", - Malaysia:"马来西亚", - processingFee:"手续费", - processingFeePlaceholder:"请输入手续费", - quantityMustBeNumber:"个数必须为数字", - invalidFormat:"金额格式不正确,最多两位小数", - paymentMust:"付款金额必须为0", - remarksexceed:"备注不能超过100字", - } }, // 消息 diff --git a/src/views/moneyManage/financialAccount/performanceAttribution.vue b/src/views/moneyManage/financialAccount/performanceAttribution.vue index 0dd12f1..f3aff8e 100644 --- a/src/views/moneyManage/financialAccount/performanceAttribution.vue +++ b/src/views/moneyManage/financialAccount/performanceAttribution.vue @@ -4,33 +4,33 @@ import { ElMessage, ElMessageBox } from 'element-plus' import request from '@/util/http.js' import dayjs from 'dayjs' import { useI18n } from 'vue-i18n' -import { refundOnline,performanceSelect,exportPerformance,adjustment } from '@/api/cash/financialAccount.js' +import { refundOnline, performanceSelect, exportPerformance, adjustment } from '@/api/cash/financialAccount.js' import { getUserInfo } from '@/api/common/common.js' import { useAdminStore } from '@/store/index.js' import { permissionMapping, hasMenuPermission } from "@/utils/menuTreePermission.js" import { storeToRefs } from 'pinia' const adminStore = useAdminStore() -const { menuTree,flag } = storeToRefs(adminStore) +const { menuTree, flag } = storeToRefs(adminStore) const adminData = ref({}) const { t } = useI18n() const paytypeList = [ - t('cash.payMethods.stripe'), - t('cash.payMethods.paymentAsia'), - t('cash.payMethods.ipay88'), - t('cash.payMethods.bankTransfer'), - t('cash.payMethods.card'), - t('cash.payMethods.cash'), - t('cash.payMethods.check'), - t('cash.payMethods.grabpay'), - t('cash.payMethods.nets'), - t('cash.payMethods.transfer'), - t('cash.payMethods.iotPay'), - t('cash.payMethods.stripe3'), - t('cash.payMethods.paypal'), + t('cash.payMethods.stripe'), + t('cash.payMethods.paymentAsia'), + t('cash.payMethods.ipay88'), + t('cash.payMethods.bankTransfer'), + t('cash.payMethods.card'), + t('cash.payMethods.cash'), + t('cash.payMethods.check'), + t('cash.payMethods.grabpay'), + t('cash.payMethods.nets'), + t('cash.payMethods.transfer'), + t('cash.payMethods.iotPay'), + t('cash.payMethods.stripe3'), + t('cash.payMethods.paypal'), ] const hasperformanceAdjustment = ref(false) @@ -39,8 +39,8 @@ const initPermissions = async () => { if (!menuTree.value || !menuTree.value.length) return; // 业绩调整 hasperformanceAdjustment.value = hasMenuPermission(menuTree.value, permissionMapping.performance_adjustment); - console.log('业绩调整权限',hasperformanceAdjustment.value); - + console.log('业绩调整权限', hasperformanceAdjustment.value); + }; const payPlatformOptions = ref([...paytypeList]) @@ -108,7 +108,7 @@ const fetchData = async () => { const params = { pageNum: queryParams.pageNum, pageSize: queryParams.pageSize, - performanceDTO:{ + performanceDTO: { jwcode: queryParams.jwcode, adminMarket: adminData.value.marketName.split(',').filter(item => item.trim() !== '') || [], customerMarket: queryParams.customerMarket, @@ -116,7 +116,7 @@ const fetchData = async () => { endTime: queryParams.timeRange?.[1] ? dayjs(queryParams.timeRange[1]).format('YYYY-MM-DD HH:mm:ss') : '', } } - + console.log('查询参数:', params) const res = await performanceSelect(params) if (res.code == 200) { @@ -128,7 +128,7 @@ const fetchData = async () => { } else { ElMessage.error(res.msg || t('elmessage.getDataFailed')) loading.value = false - } + } } catch (error) { console.error(error) loading.value = false @@ -139,9 +139,9 @@ const fetchData = async () => { const handleAdminInfo = async () => { try { const res = await getUserInfo() - adminData.value = res || {} - console.log('adminData.value:', adminData.value); - + adminData.value = res || {} + console.log('adminData.value:', adminData.value); + } catch (error) { console.error(error) ElMessage.error(t('elmessage.getDataFailed')) @@ -182,7 +182,7 @@ const handleRefund = (row) => { ElMessage.success(t('elmessage.refundSubmitSuccess')) // 刷新列表 fetchData() - }).catch(() => {}) + }).catch(() => { }) } // ==================== 导出相关逻辑 ==================== @@ -192,12 +192,12 @@ const exportList = ref([]) const exportListLoading = ref(false) // 导出Excel -const handleExport = async () => { +const handleExport = async () => { try { - const params = { + const params = { pageNum: queryParams.pageNum, pageSize: queryParams.pageSize, - performanceDTO:{ + performanceDTO: { jwcode: queryParams.jwcode, adminMarket: adminData.value.marketName.split(',').filter(item => item.trim() !== '') || [], customerMarket: queryParams.customerMarket, @@ -205,15 +205,15 @@ const handleExport = async () => { endTime: queryParams.timeRange?.[1] ? dayjs(queryParams.timeRange[1]).format('YYYY-MM-DD HH:mm:ss') : '', } } - + // TODO: 确认导出接口 URL const res = await exportPerformance(params) - if(res.code == 200){ + if (res.code == 200) { + + console.log('导出参数', params) + ElMessage.success(t('elmessage.exportSuccess')) + } - console.log('导出参数', params) - ElMessage.success(t('elmessage.exportSuccess')) - } - } catch (error) { console.error(error) ElMessage.error(t('elmessage.exportError')) @@ -284,21 +284,21 @@ const adjustVisible = ref(false) const adjustTime = ref('') const adjustCoefficient = ref('') -const matrixMarkets = [ - { key: 'sg', label: '新加坡' }, - { key: 'my', label: '马来西亚' }, - { key: 'hk', label: '香港' }, - { key: 'th', label: '泰国' }, - { key: 'vn', label: '越南' }, - { key: 'ca', label: '加拿大' } -] +const matrixMarkets = computed(() => [ + { key: 'sg', label: t('cash.markets.Singapore') }, + { key: 'my', label: t('cash.markets.Malaysia') }, + { key: 'hk', label: t('cash.markets.HongKong') }, + { key: 'th', label: t('cash.markets.Thailand') }, + { key: 'vn', label: t('clientCount.market.vnGold') }, + { key: 'ca', label: t('cash.markets.Canada') } +]) const adjustData = ref([]) const initAdjustData = () => { - adjustData.value = matrixMarkets.map(rowMarket => { - const row = { inMarket: rowMarket.label + '客户' } - matrixMarkets.forEach(colMarket => { + adjustData.value = matrixMarkets.value.map(rowMarket => { + const row = { inMarket: rowMarket.label + t('common.customer') } + matrixMarkets.value.forEach(colMarket => { row[colMarket.key] = '' // 默认空 }) return row @@ -314,9 +314,9 @@ const handleAdjustment = () => { const computedAdjustData = computed(() => { const data = [...adjustData.value] - const sumRow = { inMarket: '合计', isSum: true } + const sumRow = { inMarket: t('cash.cashFlow.total'), isSum: true } - matrixMarkets.forEach(colMarket => { + matrixMarkets.value.forEach(colMarket => { let colSum = 0 adjustData.value.forEach(row => { const val = parseFloat(row[colMarket.key]) @@ -331,7 +331,7 @@ const computedAdjustData = computed(() => { const getRowTotal = (row) => { let sum = 0 - matrixMarkets.forEach(colMarket => { + matrixMarkets.value.forEach(colMarket => { const val = parseFloat(row[colMarket.key]) if (!isNaN(val)) sum += val }) @@ -349,18 +349,18 @@ const formatNumber = (val) => { const submitAdjustment = async () => { if (!adjustTime.value) { - ElMessage.warning('请选择时间') + ElMessage.warning(t('cash.cashFlow.time')) return } if (!adjustCoefficient.value) { - ElMessage.warning('请输入系数') + ElMessage.warning(t('cash.cashFlow.coefficientPlaceholder')) return } - + // 组装矩阵数据 matrix (二维数组,6行6列) // 如果单元格为空或者非数字,默认为 0 const matrix = adjustData.value.map(row => { - return matrixMarkets.map(colMarket => { + return matrixMarkets.value.map(colMarket => { const val = parseFloat(row[colMarket.key]) return isNaN(val) ? 0 : val }) @@ -370,22 +370,22 @@ const submitAdjustment = async () => { const payload = { matrix: matrix, weight: parseFloat(adjustCoefficient.value), // 系数 - createTime: adjustTime.value, + time: adjustTime.value, submitterId: adminData.value.id || 1000063, // 从全局 adminData 获取 submitterMarket: adminData.value.marketName || '总部' // 如果为空默认传总部 } console.log('提交的封装数据:', JSON.stringify(payload, null, 2)) - + await adjustment(payload) - ElMessage.success('提交成功') + ElMessage.success(t('common.submitSuccess')) adjustVisible.value = false fetchData() } -onMounted( async() => { +onMounted(async () => { await initPermissions() - await handleAdminInfo() + await handleAdminInfo() getMarket() await fetchData() }) @@ -403,86 +403,66 @@ onMounted( async() => {
- {{ t('common.market') }}: + {{ t('common_list.market') }}: - +
- -
+ +
{{ t('common.payTime2') }}: - +
-
+
{{ t('common.search') }} - {{ t('common.exportExcel') }} - {{ t('common.viewExportList') }} - {{ t('common.reset') }} - + {{ t('common.exportExcel') }} + {{ t('common.viewExportList') }} + {{ t('common.reset') }} +
- - + + - + + + + - - - - - - - - - - - - - - + + + + + + + + +
- +
@@ -519,47 +499,49 @@ onMounted( async() => { - +
- 选择时间 - + {{ t('cash.cashFlow.time') }} +
- 系数调整 - + {{ t('cash.cashFlow.coefficient') }} +
- + - - + + - + @@ -568,8 +550,8 @@ onMounted( async() => {
@@ -578,16 +560,16 @@ onMounted( async() => {