From ba675ce0e0969ad6aef87e2573add91132714662 Mon Sep 17 00:00:00 2001 From: yys <47@gamerwa.com> Date: Thu, 23 Apr 2026 11:11:08 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=20=E6=8C=89=E7=AD=96=E5=88=92=E9=9C=80?= =?UTF-8?q?=E6=B1=82=E6=94=B9=E8=BF=9B=E7=AE=A1=E7=90=86=E5=90=8E=E5=8F=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- admin-ui/src/utils/westernNumberFormat.js | 49 ++++++++++ .../views/ai/balanceChangeRecord/index.vue | 97 ++++++++++++------- admin-ui/src/views/ai/config/index.vue | 18 ++-- admin-ui/src/views/ai/dept/index.vue | 28 +++--- .../src/views/ai/groupchargeorder/index.vue | 38 +++++++- admin-ui/src/views/ai/manager/index.vue | 35 ++----- admin-ui/src/views/ai/order/index.vue | 38 +++++--- admin-ui/src/views/ai/record/index.vue | 65 ++++++++++--- admin-ui/src/views/ai/user/index.vue | 17 +++- admin-ui/src/views/index copy.vue | 2 +- admin-ui/src/views/monitor/online/index.vue | 2 +- .../src/views/subteam/chargeOrder/index.vue | 20 +++- .../src/views/subteam/groupBalance/index.vue | 35 ++++++- admin-ui/src/views/subteam/overview/index.vue | 13 ++- admin-ui/src/views/subteam/user/index.vue | 2 +- admin-ui/src/views/system/dept/index.vue | 65 ++++++++++--- admin-ui/src/views/system/role/index.vue | 4 +- admin-ui/src/views/system/user/index.vue | 6 +- .../src/views/system/user/profile/index.vue | 2 +- portal-ui/src/views/GeneratedAssets.vue | 6 +- .../AiChargeRefundOrderController.java | 4 +- .../controller/AiDeptArkConfigController.java | 14 +-- .../ai/AiBalanceChangeRecordController.java | 12 ++- .../web/controller/ai/AiDeptController.java | 8 +- .../web/controller/ai/AiUserController.java | 4 +- .../ai/domain/AiBalanceChangeRecord.java | 18 ++-- .../vo/AiBalanceChangeRecordListVo.java | 65 +++++++++++++ .../BalanceChangeAmountExcelHandler.java | 42 ++++++++ .../domain/subteam/SubteamOverviewVO.java | 3 + .../impl/SubteamOverviewServiceImpl.java | 1 + .../system/AiBalanceChangeRecordMapper.xml | 3 +- 31 files changed, 537 insertions(+), 179 deletions(-) create mode 100644 web-api/ruoyi-system/src/main/java/com/ruoyi/ai/domain/vo/AiBalanceChangeRecordListVo.java create mode 100644 web-api/ruoyi-system/src/main/java/com/ruoyi/ai/handler/BalanceChangeAmountExcelHandler.java diff --git a/admin-ui/src/utils/westernNumberFormat.js b/admin-ui/src/utils/westernNumberFormat.js index fd216df..7583fa7 100644 --- a/admin-ui/src/utils/westernNumberFormat.js +++ b/admin-ui/src/utils/westernNumberFormat.js @@ -74,3 +74,52 @@ export function intStringToNumber(digits) { if (isNaN(n)) return undefined return n } + +/** 有符号积分:供可输入负数的整数字段,范围 [-INT_MAX, INT_MAX] */ +export function sanitizeSignedIntDigits(raw) { + let t = String(raw == null ? '' : raw).replace(/,/g, '') + t = t.trim() + if (t === '' || t === '+') { + return '' + } + if (t === '-') { + return '-' + } + const neg = t.startsWith('-') + let rest = neg ? t.slice(1) : t + rest = rest.replace(/\D/g, '') + if (rest === '') { + return neg ? '-' : '' + } + let n = parseInt(rest, 10) + if (isNaN(n)) { + return neg ? '-' : '' + } + n = Math.min(INT_MAX, Math.max(0, n)) + return (neg ? '-' : '') + String(n) +} + +export function formatSignedIntDisplay(s) { + if (s == null || s === '') { + return '' + } + if (s === '-') { + return '-' + } + const n = parseInt(String(s).replace(/,/g, ''), 10) + if (isNaN(n)) { + return '' + } + return n.toLocaleString('en-US') +} + +export function signedIntStringToNumber(s) { + if (s == null || s === '' || s === '-') { + return undefined + } + const n = parseInt(String(s).replace(/,/g, ''), 10) + if (isNaN(n)) { + return undefined + } + return n +} diff --git a/admin-ui/src/views/ai/balanceChangeRecord/index.vue b/admin-ui/src/views/ai/balanceChangeRecord/index.vue index 6609b04..d2aba14 100644 --- a/admin-ui/src/views/ai/balanceChangeRecord/index.vue +++ b/admin-ui/src/views/ai/balanceChangeRecord/index.vue @@ -46,11 +46,6 @@ 搜索 重置 - - - - - 导出 - - - + + + - - - - - + + + + + + - - + + @@ -146,17 +149,17 @@ export default { dateRange: [], // 操作类型映射关系 typeMap: { - 0: "充值", - 1: "返佣", - 2: "充值赠送", - 3: "体验金赠送", - 4: "体验金回收", - 5: "一键换衣", - 6: "图生图2", - 7: "一键换脸", - 8: "快捷生图", + // 0: "充值", + // 1: "返佣", + // 2: "充值赠送", + // 3: "体验金赠送", + // 4: "体验金回收", + // 5: "一键换衣", + // 6: "图生图2", + // 7: "一键换脸", + // 8: "快捷生图", 9: "快捷生视频", - 10: "退款", + // 10: "退款", 11: "系统操作", 12: "团队下发", 13: "团队收回" @@ -184,6 +187,7 @@ export default { pageNum: 1, pageSize: 10, type: null, + uuid: null, userId: null }, // 表单参数 @@ -200,14 +204,39 @@ export default { this.getList(); }, methods: { - formatChangeAmount(row, column) { - const value = row.changeAmount; - // 检查值是否为数字且大于 0 - if (typeof value === "number" && value > 0) { - return `+${value}`; + /** 西式千分位(en-US),积分为整数 */ + formatPointsWestern(value) { + if (value === null || value === undefined || value === "") { + return ""; } - // 对于小于等于 0 的值,直接返回原始值(或根据需要格式化) - return value; + const n = Number(value); + if (Number.isNaN(n)) { + return String(value); + } + return n.toLocaleString("en-US", { maximumFractionDigits: 0 }); + }, + formatChangeAmount(row) { + const value = row.changeAmount; + if (value === null || value === undefined || value === "") { + return ""; + } + const n = Number(value); + if (Number.isNaN(n)) { + return String(value); + } + const formatted = Math.abs(n).toLocaleString("en-US", { + maximumFractionDigits: 0 + }); + if (n > 0) { + return `+${formatted}`; + } + if (n < 0) { + return `-${formatted}`; + } + return "0"; + }, + formatResultAmount(row) { + return this.formatPointsWestern(row.resultAmount); }, handleTypeChange(val) { this.queryParams.type = val; @@ -320,9 +349,7 @@ export default { handleExport() { this.download( "ai/balance-change-record/export", - { - ...this.queryParams - }, + this.addDateRange({ ...this.queryParams }, this.dateRange), `record_${new Date().getTime()}.xlsx` ); } diff --git a/admin-ui/src/views/ai/config/index.vue b/admin-ui/src/views/ai/config/index.vue index dc0830b..d6ebd9d 100644 --- a/admin-ui/src/views/ai/config/index.vue +++ b/admin-ui/src/views/ai/config/index.vue @@ -1,10 +1,10 @@