@aspire-ui/element-component-pro 1.0.8 → 1.0.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -10,6 +10,10 @@ export declare function roundToDecimals(value: number, decimalPlaces: number, ro
10
10
  * 解析 → 按整数位夹紧 → 按小数位与进位方式舍入 → 再夹紧(防止舍入后越界)
11
11
  */
12
12
  export declare function normalizeNumericValue(value: number, integerDigits: number, decimalPlaces: number, rounding: FormattedNumberRounding): number;
13
+ /**
14
+ * 固定小数位数字符串(无千分位),用于表单存值以保留配置的小数位数(number 无法保留尾随 0)。
15
+ */
16
+ export declare function toFixedDecimalString(value: number, decimalPlaces: number): string;
13
17
  /** 千分位格式化展示(整数部分),小数部分固定 m 位 */
14
18
  export declare function formatWithThousands(value: number, decimalPlaces: number): string;
15
19
  /** 编辑态:无千分位,去掉多余尾部 0(在 m 位精度内) */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aspire-ui/element-component-pro",
3
- "version": "1.0.08",
3
+ "version": "1.0.09",
4
4
  "description": "Element UI 二次封装组件库,基于 Vue 2.7 + TypeScript + setup 语法糖,实现 VbenAdmin 风格的 Pro 组件",
5
5
  "type": "module",
6
6
  "main": "./dist/element-component-pro.umd.js",
@@ -19,6 +19,7 @@ import {
19
19
  numberToEditString,
20
20
  sanitizeNumericInput,
21
21
  stripNumberGrouping,
22
+ toFixedDecimalString,
22
23
  } from '../utils/formattedNumber'
23
24
 
24
25
  const props = withDefaults(
@@ -78,13 +79,18 @@ watch(
78
79
  { immediate: true, deep: true }
79
80
  )
80
81
 
82
+ function emitStoredValue(normalized: number) {
83
+ emit('input', toFixedDecimalString(normalized, decM()))
84
+ }
85
+
81
86
  function onInput(val: string) {
82
87
  const clean = sanitizeNumericInput(val)
83
88
  displayText.value = clean
84
89
  if (clean === '' || clean === '-') return
85
90
  const num = Number(clean)
86
91
  if (!Number.isFinite(num)) return
87
- emit('input', num)
92
+ const normalized = normalizeNumericValue(num, intN(), decM(), props.rounding)
93
+ emitStoredValue(normalized)
88
94
  }
89
95
 
90
96
  function onFocus() {
@@ -117,6 +123,6 @@ function onBlur() {
117
123
  }
118
124
  const final = normalizeNumericValue(parsed, intN(), decM(), props.rounding)
119
125
  displayText.value = formatWithThousands(final, decM())
120
- emit('input', final)
126
+ emitStoredValue(final)
121
127
  }
122
128
  </script>
@@ -96,6 +96,14 @@ export function normalizeNumericValue(
96
96
  return v
97
97
  }
98
98
 
99
+ /**
100
+ * 固定小数位数字符串(无千分位),用于表单存值以保留配置的小数位数(number 无法保留尾随 0)。
101
+ */
102
+ export function toFixedDecimalString(value: number, decimalPlaces: number): string {
103
+ if (Number.isNaN(value) || !Number.isFinite(value)) return ''
104
+ return value.toFixed(Math.max(0, decimalPlaces))
105
+ }
106
+
99
107
  /** 千分位格式化展示(整数部分),小数部分固定 m 位 */
100
108
  export function formatWithThousands(value: number, decimalPlaces: number): string {
101
109
  if (Number.isNaN(value) || !Number.isFinite(value)) return ''