diff --git a/src/components/echarts/chart.tsx b/src/components/echarts/chart.tsx index e1cf3049..af1ba152 100644 --- a/src/components/echarts/chart.tsx +++ b/src/components/echarts/chart.tsx @@ -1,4 +1,4 @@ -import { throttle } from 'echarts/core'; +import { throttle } from 'lodash'; import { useCallback, useEffect, useRef } from 'react'; import echarts, { ECOption } from '.'; @@ -9,6 +9,8 @@ const Chart: React.FC<{ }> = ({ options, width, height }) => { const container = useRef(null); const chart = useRef(); + const resizeable = useRef(false); + const resizeObserver = useRef(); const init = useCallback(() => { if (container.current) { @@ -30,27 +32,48 @@ const Chart: React.FC<{ }, []); useEffect(() => { - init(); + if (container.current) { + init(); + } return () => { chart.current?.dispose(); }; }, [init]); useEffect(() => { + resizeable.current = false; resize(); setOption(options); }, [options]); - // resize on window resize + useEffect(() => { + let timer: any = null; + timer = setTimeout(() => { + resizeable.current = true; + }, 300); + return () => { + clearTimeout(timer); + }; + }, []); + useEffect(() => { const handleResize = throttle(() => { - resize(); + if (resizeable.current) { + chart.current?.resize(); + } }, 100); - window.addEventListener('resize', handleResize); + + if (container.current) { + resizeObserver.current = new ResizeObserver(handleResize); + + resizeObserver.current.observe(container.current); + } return () => { - window.removeEventListener('resize', handleResize); + if (container.current) { + resizeObserver.current?.unobserve(container.current); + } }; - }, [resize]); + }, []); return
; }; diff --git a/src/components/echarts/index.ts b/src/components/echarts/index.ts index ff9533d7..7744d9ed 100644 --- a/src/components/echarts/index.ts +++ b/src/components/echarts/index.ts @@ -1,5 +1,4 @@ import type { - // 系列类型的定义后缀都为 SeriesOption BarSeriesOption, GaugeSeriesOption, LineSeriesOption @@ -8,18 +7,16 @@ import { BarChart, GaugeChart, LineChart } from 'echarts/charts'; import type { DatasetComponentOption, GridComponentOption, - // 组件类型的定义后缀都为 ComponentOption TitleComponentOption, TooltipComponentOption } from 'echarts/components'; import { - // 数据集组件 DatasetComponent, GridComponent, LegendComponent, TitleComponent, TooltipComponent, - // 内置数据转换器组件 (filter, sort) + // (filter, sort) TransformComponent } from 'echarts/components'; import type { ComposeOption } from 'echarts/core'; @@ -27,7 +24,6 @@ import * as echarts from 'echarts/core'; import { LabelLayout, UniversalTransition } from 'echarts/features'; import { CanvasRenderer } from 'echarts/renderers'; -// 通过 ComposeOption 来组合出一个只有必须组件和图表的 Option 类型 type ECOption = ComposeOption< | BarSeriesOption | LineSeriesOption @@ -38,7 +34,7 @@ type ECOption = ComposeOption< | GaugeSeriesOption >; -// 注册必须的组件 +// register components and charts echarts.use([ LegendComponent, TitleComponent, diff --git a/src/hooks/use-overlay-scroller.ts b/src/hooks/use-overlay-scroller.ts index 8bdc8cd8..6fb26dea 100644 --- a/src/hooks/use-overlay-scroller.ts +++ b/src/hooks/use-overlay-scroller.ts @@ -49,16 +49,15 @@ export default function useOverlayScroller(options?: any) { scrollEventElement.current = instanceRef.current?.elements()?.scrollEventElement; - const throttledScroll = React.useMemo( - () => - throttle(() => { - scrollEventElement.current?.scrollTo?.({ - top: scrollEventElement.current.scrollHeight, - behavior: 'smooth' - }); - instanceRef.current?.update?.(); - }, 300), - [scrollEventElement.current, instanceRef.current] + const throttledScroll = React.useCallback( + throttle(() => { + scrollEventElement.current?.scrollTo?.({ + top: scrollEventElement.current.scrollHeight, + behavior: 'smooth' + }); + instanceRef.current?.update?.(); + }, 100), + [(scrollEventElement.current, instanceRef.current)] ); const scrollauto = React.useCallback(() => { diff --git a/src/pages/dashboard/components/resource-utilization.tsx b/src/pages/dashboard/components/resource-utilization.tsx index c4424c4b..810546a3 100644 --- a/src/pages/dashboard/components/resource-utilization.tsx +++ b/src/pages/dashboard/components/resource-utilization.tsx @@ -37,78 +37,6 @@ const TypeKeyMap = { } }; -const option = { - title: { - text: '' - }, - legend: { - itemWidth: 8, - itemHeight: 8, - data: [] - }, - grid: { - left: 0, - right: 20, - bottom: 20, - containLabel: true - }, - tooltip: { - trigger: 'axis', - formatter(params: any) { - let result = `${params[0].axisValue}`; - params.forEach((item: any) => { - result += ` - - - ${item.seriesName}: - - ${item.data.value} - `; - }); - return `
${result}
`; - } - }, - xAxis: { - type: 'category', - boundaryGap: true, - axisTick: { - show: true, - lineStyle: { - color: chartColorMap.tickLineColor - } - }, - axisLabel: { - color: chartColorMap.axislabelColor, - // fontFamily: 'unset', - fontSize: 12 - }, - axisLine: { - show: false - }, - data: [] - }, - yAxis: { - max: 100, - min: 0, - splitLine: { - show: true, - lineStyle: { - type: 'dashed' - } - }, - axisLabel: { - color: chartColorMap.axislabelColor, - // fontFamily: 'unset', - fontSize: 12 - }, - axisTick: { - show: false - }, - type: 'value' - }, - series: [] -}; - const UtilizationOvertime: React.FC = () => { const intl = useIntl(); const data = useContext(DashboardContext)?.system_load?.history || {}; diff --git a/src/pages/playground/components/message-input.tsx b/src/pages/playground/components/message-input.tsx index 018f4164..d4ae9fec 100644 --- a/src/pages/playground/components/message-input.tsx +++ b/src/pages/playground/components/message-input.tsx @@ -353,6 +353,7 @@ const MessageInput: React.FC = ({ type="text" icon={} size="middle" + disabled={loading} onClick={handleClearAll} > diff --git a/src/pages/playground/components/multiple-chat/model-item.tsx b/src/pages/playground/components/multiple-chat/model-item.tsx index 3d22021b..a9adaee3 100644 --- a/src/pages/playground/components/multiple-chat/model-item.tsx +++ b/src/pages/playground/components/multiple-chat/model-item.tsx @@ -217,7 +217,6 @@ const ModelItem: React.FC = forwardRef( }; const handleApplyToAllModels = (e: any) => { - console.log('checkbox change:', e.target.checked); isApplyToAllModels.current = e.target.checked; if (e.target.checked) { setGlobalParams({ @@ -334,7 +333,6 @@ const ModelItem: React.FC = forwardRef( }, [modelList, intl]); useEffect(() => { - console.log('globalParams:', globalParams.model, globalParams); setParams({ ...params, model: model, @@ -384,7 +382,7 @@ const ModelItem: React.FC = forwardRef(
- + { const intl = useIntl(); - const { usage, showOutput = true } = props; + const { usage, showOutput = true, scaleable } = props; if (!usage || _.isEmpty(usage)) { return null; } @@ -41,8 +43,16 @@ const ReferenceParams = (props: ReferenceParamsProps) => { ); } return ( -
- +
+ @@ -65,7 +75,11 @@ const ReferenceParams = (props: ReferenceParamsProps) => { {showOutput && ( - + diff --git a/src/pages/playground/style/model-item.less b/src/pages/playground/style/model-item.less index 8361841e..f66691c0 100644 --- a/src/pages/playground/style/model-item.less +++ b/src/pages/playground/style/model-item.less @@ -4,6 +4,7 @@ border: 1px solid var(--ant-color-border); border-radius: var(--border-radius-base); height: 100%; + background-color: var(--color-white-1); .header { padding-inline: 2px 16px; diff --git a/src/pages/playground/style/reference-params.less b/src/pages/playground/style/reference-params.less index 2476c45c..f412ac32 100644 --- a/src/pages/playground/style/reference-params.less +++ b/src/pages/playground/style/reference-params.less @@ -6,7 +6,16 @@ color: var(--ant-orange); gap: 20px; + &.scaleable { + gap: 15px; + } + .usage { cursor: pointer; + line-height: 16px; + + &.scaleable { + transform: scale(0.9); + } } }