From d72af5d3e626511d4bcf0f5805b093a074b9351f Mon Sep 17 00:00:00 2001 From: hdka <823267011@qq.com> Date: Tue, 17 Dec 2024 11:33:00 +0800 Subject: [PATCH] =?UTF-8?q?oa=E4=BA=8C=E6=9C=9F=E5=86=85=E5=AE=B9=E6=9B=B4?= =?UTF-8?q?=E6=96=B0bug=E4=BF=AE=E5=A4=8D=EF=BC=8C=E5=AD=98=E5=9C=A8?= =?UTF-8?q?=E9=97=AE=E9=A2=98=E7=89=A9=E6=96=99=E5=93=81=E7=89=8C=E8=A7=84?= =?UTF-8?q?=E6=A0=BC=E7=9A=84=E5=A4=9A=E5=AD=97=E6=AE=B5=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E9=9C=80=E8=A6=81=E9=87=8D=E6=96=B0=E7=A1=AE=E7=AB=8B=E7=8B=AC?= =?UTF-8?q?=E7=AB=8B=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-ui/src/utils/currencyFormatter.js | 144 ++++++++++++------ .../src/views/oa/oaOutWarehouse/index.vue | 18 ++- 2 files changed, 110 insertions(+), 52 deletions(-) diff --git a/ruoyi-ui/src/utils/currencyFormatter.js b/ruoyi-ui/src/utils/currencyFormatter.js index 14ff4ee..aa365f7 100644 --- a/ruoyi-ui/src/utils/currencyFormatter.js +++ b/ruoyi-ui/src/utils/currencyFormatter.js @@ -1,58 +1,108 @@ -// currencyFormatter.js +export function numberToCNY(money) { + if (!money) { + return ''; + } + if (typeof money == 'number') { + money = money + ''; + } + money = money.replace(/,/g, ''); // 替换originalVal中的“,” + money = money.replace(/\\s/g, ''); // 替换originalVal中的“,” -export function numberToCNY(amount) { - if (amount === 0) return '零元整'; - const CN_NUMS = ['', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖']; - const CN_INT_UNITS = ['', '拾', '佰', '仟']; - const CN_INT_BASE = ['元', '萬', '億', '兆']; - const CN_DEC_UNITS = ['角', '分']; - const INT_MAX = Math.pow(10, 16) - 1; - - if (amount >= INT_MAX || amount <= -INT_MAX) { - throw new Error('超出支持的金额范围'); + money = money.replace("¥", "")//替换掉可能出现的¥字符 + if (isNaN(money)) { //验证输入的字符是否为数字 + return money; } - let parts = amount.toString().split('.'); - let integerPart = parts[0]; - let decimalPart = parts[1] || ''; - - // 处理整数部分 - function convertInteger(numStr) { - let result = ''; - let zeros = 0; - let unitPos = 0; - for (let i = numStr.length - 1; i >= 0; i--) { - let num = parseInt(numStr.charAt(i)); - if (num === 0) { - zeros++; + //汉字的数字 + var cnNums = new Array('零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖'); + //基本单位 + var cnIntRadice = new Array('', '拾', '佰', '仟'); + //对应整数部分扩展单位 + var cnIntUnits = new Array('', '万', '亿', '兆'); + //对应小数部分单位 + var cnDecUnits = new Array('角', '分', '毫', '厘'); + //整数金额时后面跟的字符 + var cnInteger = '整'; + //整型完以后的单位 + var cnIntLast = '元'; + //最大处理的数字 + var maxNum = 999999999999999.9999; + //金额整数部分 + var integerNum; + //金额小数部分 + var decimalNum; + //输出的中文金额字符串 + var chineseStr = ''; + //分离金额后用的数组,预定义 + var parts; + if (money == '') { + return ''; + } + money = parseFloat(money); + if (money >= maxNum) { + //超出最大处理数字 + return ''; + } + if (money == 0) { + chineseStr = cnNums[0] + cnIntLast + cnInteger; + return chineseStr; + } + //转换为字符串 + money = money.toString(); + if (money.indexOf('.') == -1) { + integerNum = money; + decimalNum = ''; + } else { + parts = money.split('.'); + integerNum = parts[0]; + decimalNum = parts[1].substr(0, 4); + } + //获取整型部分转换 + if (parseInt(integerNum, 10) > 0) { + var zeroCount = 0; + var IntLen = integerNum.length; + for (var i = 0; i < IntLen; i++) { + var n = integerNum.substr(i, 1); + var p = IntLen - i - 1; + var q = p / 4; + var m = p % 4; + if (n == '0') { + zeroCount++; } else { - if (zeros > 0) { - result = '零' + result; + if (zeroCount > 0) { + chineseStr += cnNums[0]; } - zeros = 0; - result = CN_NUMS[num] + CN_INT_UNITS[unitPos % 4] + result; + //归零 + zeroCount = 0; + chineseStr += cnNums[parseInt(n)] + cnIntRadice[m]; } - unitPos++; - if (unitPos % 4 === 0 && i > 0) { - result = CN_INT_BASE[Math.floor(unitPos / 4) - 1] + result; + if (m == 0 && zeroCount < 4) { + chineseStr += cnIntUnits[q]; } } - return result.trim(); + chineseStr += cnIntLast; } - - // 处理小数部分 - function convertDecimal(numStr) { - return numStr.split('').map((digit, index) => { - return digit !== '0' ? CN_NUMS[digit] + CN_DEC_UNITS[index] : ''; - }).join(''); + //小数部分 + if (decimalNum != '') { + var decLen = decimalNum.length; + for (var i = 0; i < decLen; i++) { + var n = decimalNum.substr(i, 1); + if (i != 0) { + if (n != '0') { + chineseStr += cnNums[Number(n)] + cnDecUnits[i]; + } + } else { + chineseStr += cnNums[Number(n)]; + if (n != '0') { + chineseStr += cnDecUnits[i]; + } + } + } } - - let integerResult = convertInteger(integerPart); - let decimalResult = decimalPart.length > 0 ? convertDecimal(decimalPart) : '整'; - - // 连接整数和小数部分,并确保格式正确 - let finalResult = integerResult.replace(/零+$/, '') + '元' + decimalResult; - finalResult = finalResult.replace(/零+/g, '零'); - - return finalResult; + if (chineseStr == '') { + chineseStr += cnNums[0] + cnIntLast + cnInteger; + } else if (decimalNum == '') { + chineseStr += cnInteger; + } + return chineseStr; } diff --git a/ruoyi-ui/src/views/oa/oaOutWarehouse/index.vue b/ruoyi-ui/src/views/oa/oaOutWarehouse/index.vue index 66b2f8a..bb0d9c3 100644 --- a/ruoyi-ui/src/views/oa/oaOutWarehouse/index.vue +++ b/ruoyi-ui/src/views/oa/oaOutWarehouse/index.vue @@ -273,6 +273,9 @@ :key="item.id" :label="item.name" :value="item.id"> + {{ item.name }} + -{{ item.model }} + -{{ item.brand }} @@ -280,7 +283,7 @@ 请选择物料 {{ item.inventory }} - + @@ -574,9 +577,12 @@ export default { } }, + // 获取对应的库存 后续添加品牌型号 handleGetInventory(e, index) { - this.form.outWareHouseList[index].inventory = this.oaWarehouseList[this.oaWarehouseList.findIndex(item => item.id === e)].inventory - console.log(this.form.outWareHouseList[index]) + let obj = this.oaWarehouseList[this.oaWarehouseList.findIndex(item => item.id === e)] + this.form.outWareHouseList[index].inventory = obj.inventory + this.form.outWareHouseList[index].model = obj.model + this.form.outWareHouseList[index].brand = obj.brand }, @@ -607,8 +613,10 @@ export default { this.selectLoading = true; listOaWarehouse(this.warehouseParams).then(res => { this.oaWarehouseList = res.rows.filter(item => { - return item.name.toLowerCase() - .indexOf(query.toLowerCase()) > -1; + const queryLower = query.toLowerCase(); + return item.name.toLowerCase().indexOf(queryLower) > -1 || + item.model.toLowerCase().indexOf(queryLower) > -1 || + item.brand.toLowerCase().indexOf(queryLower) > -1; }); this.selectLoading = false; })