feat: 组件json-viewer支持bigint数据显示 cwy (#6377)
Co-authored-by: 车文烨 <chewy@china-lehua.com>pull/168/head^2
parent
b1fb623113
commit
b78bc65ce7
|
@ -40,6 +40,7 @@
|
||||||
"@vben/types": "workspace:*",
|
"@vben/types": "workspace:*",
|
||||||
"@vueuse/core": "catalog:",
|
"@vueuse/core": "catalog:",
|
||||||
"@vueuse/integrations": "catalog:",
|
"@vueuse/integrations": "catalog:",
|
||||||
|
"json-bigint": "catalog:",
|
||||||
"qrcode": "catalog:",
|
"qrcode": "catalog:",
|
||||||
"tippy.js": "catalog:",
|
"tippy.js": "catalog:",
|
||||||
"vue": "catalog:",
|
"vue": "catalog:",
|
||||||
|
|
|
@ -18,6 +18,9 @@ import { $t } from '@vben/locales';
|
||||||
|
|
||||||
import { isBoolean } from '@vben-core/shared/utils';
|
import { isBoolean } from '@vben-core/shared/utils';
|
||||||
|
|
||||||
|
// @ts-ignore
|
||||||
|
import JsonBigint from 'json-bigint';
|
||||||
|
|
||||||
defineOptions({ name: 'JsonViewer' });
|
defineOptions({ name: 'JsonViewer' });
|
||||||
|
|
||||||
const props = withDefaults(defineProps<JsonViewerProps>(), {
|
const props = withDefaults(defineProps<JsonViewerProps>(), {
|
||||||
|
@ -68,6 +71,20 @@ function handleClick(event: MouseEvent) {
|
||||||
emit('click', event);
|
emit('click', event);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 支持显示 bigint 数据,如较长的订单号
|
||||||
|
const jsonData = computed<Record<string, any>>(() => {
|
||||||
|
if (typeof props.value !== 'string') {
|
||||||
|
return props.value || {};
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
return JsonBigint({ storeAsString: true }).parse(props.value);
|
||||||
|
} catch (error) {
|
||||||
|
console.error('JSON parse error:', error);
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
const bindProps = computed<Recordable<any>>(() => {
|
const bindProps = computed<Recordable<any>>(() => {
|
||||||
const copyable = {
|
const copyable = {
|
||||||
copyText: $t('ui.jsonViewer.copy'),
|
copyText: $t('ui.jsonViewer.copy'),
|
||||||
|
@ -79,6 +96,7 @@ const bindProps = computed<Recordable<any>>(() => {
|
||||||
return {
|
return {
|
||||||
...props,
|
...props,
|
||||||
...attrs,
|
...attrs,
|
||||||
|
value: jsonData.value,
|
||||||
onCopied: (event: JsonViewerAction) => emit('copied', event),
|
onCopied: (event: JsonViewerAction) => emit('copied', event),
|
||||||
onKeyclick: (key: string) => emit('keyClick', key),
|
onKeyclick: (key: string) => emit('keyClick', key),
|
||||||
onClick: (event: MouseEvent) => handleClick(event),
|
onClick: (event: MouseEvent) => handleClick(event),
|
||||||
|
|
|
@ -1554,6 +1554,9 @@ importers:
|
||||||
'@vueuse/integrations':
|
'@vueuse/integrations':
|
||||||
specifier: 'catalog:'
|
specifier: 'catalog:'
|
||||||
version: 13.1.0(async-validator@4.2.5)(axios@1.9.0)(focus-trap@7.6.4)(jwt-decode@4.0.0)(nprogress@0.2.0)(qrcode@1.5.4)(sortablejs@1.15.6)(vue@3.5.13(typescript@5.8.3))
|
version: 13.1.0(async-validator@4.2.5)(axios@1.9.0)(focus-trap@7.6.4)(jwt-decode@4.0.0)(nprogress@0.2.0)(qrcode@1.5.4)(sortablejs@1.15.6)(vue@3.5.13(typescript@5.8.3))
|
||||||
|
json-bigint:
|
||||||
|
specifier: 'catalog:'
|
||||||
|
version: 1.0.0
|
||||||
qrcode:
|
qrcode:
|
||||||
specifier: 'catalog:'
|
specifier: 'catalog:'
|
||||||
version: 1.5.4
|
version: 1.5.4
|
||||||
|
|
Loading…
Reference in New Issue