diff --git a/.changeset/chilled-ducks-tickle.md b/.changeset/chilled-ducks-tickle.md new file mode 100644 index 000000000..4c529e42b --- /dev/null +++ b/.changeset/chilled-ducks-tickle.md @@ -0,0 +1,6 @@ +--- +"@nocobase/plugin-data-visualization": patch +"@hera/plugin-core": patch +--- + +显示支持货币取反 diff --git a/packages/plugins/@hera/plugin-core/src/client/schema-settings/GroupBlockConfigure.tsx b/packages/plugins/@hera/plugin-core/src/client/schema-settings/GroupBlockConfigure.tsx index aec05149d..6f1f345c2 100644 --- a/packages/plugins/@hera/plugin-core/src/client/schema-settings/GroupBlockConfigure.tsx +++ b/packages/plugins/@hera/plugin-core/src/client/schema-settings/GroupBlockConfigure.tsx @@ -202,6 +202,23 @@ const modalSchema = (t, params, valueOption, decimal) => { return schema; }; +const CurrencyFormat = (val: number, locale = 'en-US', isNeedNegative = false) => { + const currency = { + 'zh-CN': 'CNY', + 'en-US': 'USD', + 'ja-JP': 'JPY', + 'ko-KR': 'KRW', + 'pt-BR': 'BRL', + 'ru-RU': 'RUB', + 'tr-TR': 'TRY', + 'es-ES': 'EUR', + }[locale]; + if (isNeedNegative && !!val) { + val = -val; + } + return new Intl.NumberFormat(locale, { style: 'currency', currency }).format(val); +}; + export const transformers = { option: [ { @@ -215,19 +232,12 @@ export const transformers = { { label: 'Currency', value: 'currency', - component: (val: number, locale = 'en-US') => { - const currency = { - 'zh-CN': 'CNY', - 'en-US': 'USD', - 'ja-JP': 'JPY', - 'ko-KR': 'KRW', - 'pt-BR': 'BRL', - 'ru-RU': 'RUB', - 'tr-TR': 'TRY', - 'es-ES': 'EUR', - }[locale]; - return new Intl.NumberFormat(locale, { style: 'currency', currency }).format(val); - }, + component: CurrencyFormat, + }, + { + label: 'CurrencyNegative', + value: 'currencyNegative', + component: (val: number, locale = 'en-US') => CurrencyFormat(val, locale, true), }, { label: 'Exponential', value: 'exponential', component: (val: number | string) => (+val)?.toExponential() }, { diff --git a/packages/plugins/@nocobase/plugin-data-visualization/src/client/block/transformers.tsx b/packages/plugins/@nocobase/plugin-data-visualization/src/client/block/transformers.tsx index e6f44397e..392472a70 100644 --- a/packages/plugins/@nocobase/plugin-data-visualization/src/client/block/transformers.tsx +++ b/packages/plugins/@nocobase/plugin-data-visualization/src/client/block/transformers.tsx @@ -52,6 +52,22 @@ const transformers: { }[locale]; return new Intl.NumberFormat(locale, { style: 'currency', currency }).format(val); }, + CurrencyNegative: (val: number, locale = 'en-US') => { + const currency = { + 'zh-CN': 'CNY', + 'en-US': 'USD', + 'ja-JP': 'JPY', + 'ko-KR': 'KRW', + 'pt-BR': 'BRL', + 'ru-RU': 'RUB', + 'tr-TR': 'TRY', + 'es-ES': 'EUR', + }[locale]; + if (val) { + val = -val; + } + return new Intl.NumberFormat(locale, { style: 'currency', currency }).format(val); + }, Exponential: (val: number | string) => (+val)?.toExponential(), Abbreviation: (val: number, locale = 'en-US') => new Intl.NumberFormat(locale, { notation: 'compact' }).format(val), Decimal: { diff --git a/packages/plugins/@nocobase/plugin-data-visualization/src/locale/en-US.json b/packages/plugins/@nocobase/plugin-data-visualization/src/locale/en-US.json index 9e64998c8..960c340d5 100644 --- a/packages/plugins/@nocobase/plugin-data-visualization/src/locale/en-US.json +++ b/packages/plugins/@nocobase/plugin-data-visualization/src/locale/en-US.json @@ -49,6 +49,7 @@ "Gauge Chart": "Gauge Chart", "Statistic": "Statistic", "Currency": "Currency", + "CurrencyNegative": "CurrencyNegative", "Percent": "Percent", "Exponential": "Exponential", "Abbreviation": "Abbreviation", diff --git a/packages/plugins/@nocobase/plugin-data-visualization/src/locale/zh-CN.json b/packages/plugins/@nocobase/plugin-data-visualization/src/locale/zh-CN.json index 6df025e87..00d61ac4a 100644 --- a/packages/plugins/@nocobase/plugin-data-visualization/src/locale/zh-CN.json +++ b/packages/plugins/@nocobase/plugin-data-visualization/src/locale/zh-CN.json @@ -49,6 +49,7 @@ "Gauge Chart": "仪表盘", "Statistic": "统计", "Currency": "货币", + "CurrencyNegative": "货币取反", "Percent": "百分比", "Exponential": "科学记数法", "Abbreviation": "缩写",