diff --git a/ui/apps/dashboard/src/main.tsx b/ui/apps/dashboard/src/main.tsx index 6df739fb..c4530299 100644 --- a/ui/apps/dashboard/src/main.tsx +++ b/ui/apps/dashboard/src/main.tsx @@ -17,57 +17,66 @@ limitations under the License. import React from 'react'; import ReactDOM from 'react-dom/client'; import App from './App.tsx'; -import i18nInstance, {getLang} from '@/utils/i18n'; -import {initReactI18next} from 'react-i18next'; -import {loader} from '@monaco-editor/react'; +import i18nInstance, { getLang } from '@/utils/i18n'; +import { initReactI18next } from 'react-i18next'; +import dayjs from 'dayjs'; +import duration from 'dayjs/plugin/duration'; +import relativeTime from 'dayjs/plugin/relativeTime'; +import utc from 'dayjs/plugin/utc'; +import timezone from 'dayjs/plugin/timezone'; +import { loader } from '@monaco-editor/react'; import * as monaco from 'monaco-editor'; import editorWorker from 'monaco-editor/esm/vs/editor/editor.worker?worker'; // https://github.com/remcohaszing/monaco-yaml/issues/150 import yamlWorker from '@/utils/workaround-yaml.worker?worker'; import enTexts from '../locales/en-US.json'; import zhTexts from '../locales/zh-CN.json'; -import {initRoute} from '@/routes/route.tsx'; +import { initRoute } from '@/routes/route.tsx'; +dayjs.extend(duration); +dayjs.extend(relativeTime); +dayjs.extend(utc); +dayjs.extend(timezone); window.MonacoEnvironment = { - getWorker(_, label) { - if (label === 'yaml') { - return new yamlWorker(); - } - return new editorWorker(); - }, + getWorker(_, label) { + if (label === 'yaml') { + return new yamlWorker(); + } + return new editorWorker(); + }, }; -loader.config({monaco}); +loader.config({ monaco }); i18nInstance - .use(initReactI18next) // passes i18n down to react-i18next - .init({ - debug: true, - lng: getLang(), // if you're using a language detector, do not define the lng option - fallbackLng: ['zh-CN'], - resources: { - zh: { - translation: zhTexts, - }, - en: { - translation: enTexts, - }, - }, - interpolation: { - escapeValue: false, // react already safes from xss => https://www.i18next.com/translation-function/interpolation#unescape - }, - saveMissing: true, // send not translated keys to endpoint, - react: { - useSuspense: false, - }, - }) - .then(() => { - initRoute(); - ReactDOM.createRoot(document.getElementById('root')!).render( - - - , - ); - }) - .catch(() => { - - }) + .use(initReactI18next) // passes i18n down to react-i18next + .init({ + debug: true, + lng: getLang(), // if you're using a language detector, do not define the lng option + fallbackLng: ['zh-CN'], + resources: { + zh: { + translation: zhTexts, + }, + en: { + translation: enTexts, + }, + }, + interpolation: { + escapeValue: false, // react already safes from xss => https://www.i18next.com/translation-function/interpolation#unescape + }, + saveMissing: true, // send not translated keys to endpoint, + react: { + useSuspense: false, + }, + }) + .then(() => { + initRoute(); + ReactDOM.createRoot(document.getElementById('root')!).render( + + + , + ); + }) + .catch((err) => { + console.error('initialization failed:', err); + }); diff --git a/ui/apps/dashboard/src/pages/multicloud-resource-manage/workload/workload-detail-drawer.tsx b/ui/apps/dashboard/src/pages/multicloud-resource-manage/workload/workload-detail-drawer.tsx index 16f8ecd0..50b4a51b 100644 --- a/ui/apps/dashboard/src/pages/multicloud-resource-manage/workload/workload-detail-drawer.tsx +++ b/ui/apps/dashboard/src/pages/multicloud-resource-manage/workload/workload-detail-drawer.tsx @@ -35,6 +35,7 @@ import styles from './index.module.less'; import { WorkloadKind } from '@/services/base.ts'; import { cn } from '@/utils/cn'; import TagList, { convertLabelToTags } from '@/components/tag-list'; +import { calculateDuration } from '@/utils/time.ts'; export interface WorkloadDetailDrawerProps { open: boolean; @@ -156,7 +157,7 @@ const WorkloadDetailDrawer: FC = (props) => { '4a6341a8bcc68e0b7120dbc89014b6a2', '持续时间', )} - value="2h" + value={calculateDuration(detailData?.objectMeta?.creationTimestamp)} />