mirror of
https://github.com/labring/FastGPT.git
synced 2026-05-16 01:09:01 +08:00
V4.9.12 feature (#5022)
* New chatinput (#4995) * feat: Change border style * refactor: Improve layout and styling of ChatInput component * style: Update ChatInput component styling and mobile layout * fix: update key detection for Enter key in ChatInput component * feat: 添加 WelcomePage 组件,支持变量输入和欢迎信息展示 * style: Updated the PC voice input interface of the VoiceInput component and optimized the layout and style * style: Optimize the layout and style of the WelcomePage component, and adjust the responsive design * feat: Dynamically load the WelcomePage component and optimize the welcome information display logic * refactor: Adjust the style and behavior of the ChatInput component and delete the WelcomePage component * style: Modify the minimum height setting of the ChatInput component to simplify responsive design * style: Optimize the layout and style of PC voice input components, and enhance the processing and drawing logic of waveform data * style: Adjust ChatInput component's margin and textarea height logic for improved layout and responsiveness; refine PCVoiceInput component's positioning and display elements * style: Enhance PCVoiceInput component's time display styling with custom font properties * feat: Change border style * refactor: Improve layout and styling of ChatInput component * style: Update ChatInput component styling and mobile layout * fix: update key detection for Enter key in ChatInput component * feat: 添加 WelcomePage 组件,支持变量输入和欢迎信息展示 * style: Updated the PC voice input interface of the VoiceInput component and optimized the layout and style * style: Optimize the layout and style of the WelcomePage component, and adjust the responsive design * feat: Dynamically load the WelcomePage component and optimize the welcome information display logic * refactor: Adjust the style and behavior of the ChatInput component and delete the WelcomePage component * style: Modify the minimum height setting of the ChatInput component to simplify responsive design * style: Optimize the layout and style of PC voice input components, and enhance the processing and drawing logic of waveform data * style: Adjust ChatInput component's margin and textarea height logic for improved layout and responsiveness; refine PCVoiceInput component's positioning and display elements * style: Enhance PCVoiceInput component's time display styling with custom font properties * style: Add new 'xxl' size to theme spacing for improved layout options * style: Update close icon fill color to use currentColor for better theming support * style: Enhance voice input functionality and UI responsiveness; improve waveform sensitivity and amplitude * style: Conditionally render file preview based on voice input state * style: 优化移动端音频波形渲染,增强清晰度和敏感度 * style: Update comments to English to enhance code readability and consistency * style: Adjust the mobile audio waveform update frequency and optimize rendering performance * style: Optimize the file preview rendering logic in voice input mode to enhance user experience * style: Optimize the file preview rendering logic in voice input mode to enhance user experience * style: Adjust the chat input box placeholder color and border color to enhance visual effects * fix: pg test * Test secret (#5011) * add http header auth config (#4982) * add http header auth config * optimize code * add mcp tools header auth * fix build * fix ui * fix * teamid * secret value encrypt (#5002) * perf: secret code * header auth ui (#5012) * header auth ui * fix i18n * doc * perf: type * header secret ui * reset ui * perf: check secret invalid --------- Co-authored-by: heheer <heheer@sealos.io> * feat: cq and extrat AI memory (#5013) * fix: login xss * feat: Users can download the invoice by self (#5015) * Users can download the invoice by themselves * Direct file stream implementation for transmission presentation * i18n * Chatbox-fix (#5018) * feat: Change border style * refactor: Improve layout and styling of ChatInput component * style: Update ChatInput component styling and mobile layout * fix: update key detection for Enter key in ChatInput component * feat: 添加 WelcomePage 组件,支持变量输入和欢迎信息展示 * style: Updated the PC voice input interface of the VoiceInput component and optimized the layout and style * style: Optimize the layout and style of the WelcomePage component, and adjust the responsive design * feat: Dynamically load the WelcomePage component and optimize the welcome information display logic * refactor: Adjust the style and behavior of the ChatInput component and delete the WelcomePage component * style: Modify the minimum height setting of the ChatInput component to simplify responsive design * style: Optimize the layout and style of PC voice input components, and enhance the processing and drawing logic of waveform data * style: Adjust ChatInput component's margin and textarea height logic for improved layout and responsiveness; refine PCVoiceInput component's positioning and display elements * style: Enhance PCVoiceInput component's time display styling with custom font properties * feat: Change border style * refactor: Improve layout and styling of ChatInput component * style: Update ChatInput component styling and mobile layout * fix: update key detection for Enter key in ChatInput component * feat: 添加 WelcomePage 组件,支持变量输入和欢迎信息展示 * style: Updated the PC voice input interface of the VoiceInput component and optimized the layout and style * style: Optimize the layout and style of the WelcomePage component, and adjust the responsive design * feat: Dynamically load the WelcomePage component and optimize the welcome information display logic * refactor: Adjust the style and behavior of the ChatInput component and delete the WelcomePage component * style: Modify the minimum height setting of the ChatInput component to simplify responsive design * style: Optimize the layout and style of PC voice input components, and enhance the processing and drawing logic of waveform data * style: Adjust ChatInput component's margin and textarea height logic for improved layout and responsiveness; refine PCVoiceInput component's positioning and display elements * style: Enhance PCVoiceInput component's time display styling with custom font properties * style: Add new 'xxl' size to theme spacing for improved layout options * style: Update close icon fill color to use currentColor for better theming support * style: Enhance voice input functionality and UI responsiveness; improve waveform sensitivity and amplitude * style: Conditionally render file preview based on voice input state * style: 优化移动端音频波形渲染,增强清晰度和敏感度 * style: Update comments to English to enhance code readability and consistency * style: Adjust the mobile audio waveform update frequency and optimize rendering performance * style: Optimize the file preview rendering logic in voice input mode to enhance user experience * style: Optimize the file preview rendering logic in voice input mode to enhance user experience * style: Adjust the chat input box placeholder color and border color to enhance visual effects * New chatinput (#4995) * feat: Change border style * refactor: Improve layout and styling of ChatInput component * style: Update ChatInput component styling and mobile layout * fix: update key detection for Enter key in ChatInput component * feat: 添加 WelcomePage 组件,支持变量输入和欢迎信息展示 * style: Updated the PC voice input interface of the VoiceInput component and optimized the layout and style * style: Optimize the layout and style of the WelcomePage component, and adjust the responsive design * feat: Dynamically load the WelcomePage component and optimize the welcome information display logic * refactor: Adjust the style and behavior of the ChatInput component and delete the WelcomePage component * style: Modify the minimum height setting of the ChatInput component to simplify responsive design * style: Optimize the layout and style of PC voice input components, and enhance the processing and drawing logic of waveform data * style: Adjust ChatInput component's margin and textarea height logic for improved layout and responsiveness; refine PCVoiceInput component's positioning and display elements * style: Enhance PCVoiceInput component's time display styling with custom font properties * feat: Change border style * refactor: Improve layout and styling of ChatInput component * style: Update ChatInput component styling and mobile layout * fix: update key detection for Enter key in ChatInput component * feat: 添加 WelcomePage 组件,支持变量输入和欢迎信息展示 * style: Updated the PC voice input interface of the VoiceInput component and optimized the layout and style * style: Optimize the layout and style of the WelcomePage component, and adjust the responsive design * feat: Dynamically load the WelcomePage component and optimize the welcome information display logic * refactor: Adjust the style and behavior of the ChatInput component and delete the WelcomePage component * style: Modify the minimum height setting of the ChatInput component to simplify responsive design * style: Optimize the layout and style of PC voice input components, and enhance the processing and drawing logic of waveform data * style: Adjust ChatInput component's margin and textarea height logic for improved layout and responsiveness; refine PCVoiceInput component's positioning and display elements * style: Enhance PCVoiceInput component's time display styling with custom font properties * style: Add new 'xxl' size to theme spacing for improved layout options * style: Update close icon fill color to use currentColor for better theming support * style: Enhance voice input functionality and UI responsiveness; improve waveform sensitivity and amplitude * style: Conditionally render file preview based on voice input state * style: 优化移动端音频波形渲染,增强清晰度和敏感度 * style: Update comments to English to enhance code readability and consistency * style: Adjust the mobile audio waveform update frequency and optimize rendering performance * style: Optimize the file preview rendering logic in voice input mode to enhance user experience * style: Optimize the file preview rendering logic in voice input mode to enhance user experience * style: Adjust the chat input box placeholder color and border color to enhance visual effects * fix: pg test * Test secret (#5011) * add http header auth config (#4982) * add http header auth config * optimize code * add mcp tools header auth * fix build * fix ui * fix * teamid * secret value encrypt (#5002) * perf: secret code * header auth ui (#5012) * header auth ui * fix i18n * doc * perf: type * header secret ui * reset ui * perf: check secret invalid --------- Co-authored-by: heheer <heheer@sealos.io> * feat: cq and extrat AI memory (#5013) * refactor: Refactored the ChatInput component, optimized the layout of the text area and button group, and improved the user experience * refactor: Updated ChatInput component, optimized layout and style, and enhanced user experience * feat: update docs --------- Co-authored-by: archer <545436317@qq.com> Co-authored-by: heheer <heheer@sealos.io> * input ui * fix: chat input ux * Return in JSON format to handle checkres (#5019) * Users can download the invoice by themselves * Direct file stream implementation for transmission presentation * Return in JSON format to handle checkres * fix: invoice * fix: ui * doc * update package * fix: ts * fix: login checker * fix: team plan * perf: aiproxy ux --------- Co-authored-by: Theresa <63280168+sd0ric4@users.noreply.github.com> Co-authored-by: heheer <heheer@sealos.io> Co-authored-by: Zhuangzai fa <143257420+ctrlz526@users.noreply.github.com>
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
import { getInvoiceRecords } from '@/web/support/wallet/bill/invoice/api';
|
||||
import { getInvoiceRecords, readInvoiceFile } from '@/web/support/wallet/bill/invoice/api';
|
||||
import MyBox from '@fastgpt/web/components/common/MyBox';
|
||||
import { useTranslation } from 'next-i18next';
|
||||
import { useState } from 'react';
|
||||
@@ -22,6 +22,7 @@ import MyIcon from '@fastgpt/web/components/common/Icon';
|
||||
import dayjs from 'dayjs';
|
||||
import { formatStorePrice2Read } from '@fastgpt/global/support/wallet/usage/tools';
|
||||
import MyModal from '@fastgpt/web/components/common/MyModal';
|
||||
import { useRequest2 } from '@fastgpt/web/hooks/useRequest';
|
||||
|
||||
const InvoiceTable = () => {
|
||||
const { t } = useTranslation();
|
||||
@@ -135,6 +136,29 @@ function InvoiceDetailModal({
|
||||
onClose: () => void;
|
||||
}) {
|
||||
const { t } = useTranslation();
|
||||
|
||||
const { runAsync: handleDownloadInvoice } = useRequest2(async (id: string) => {
|
||||
const fileInfo = await readInvoiceFile(id);
|
||||
|
||||
// Blob
|
||||
const byteCharacters = atob(fileInfo.data);
|
||||
const byteNumbers = new Array(byteCharacters.length);
|
||||
for (let i = 0; i < byteCharacters.length; i++) {
|
||||
byteNumbers[i] = byteCharacters.charCodeAt(i);
|
||||
}
|
||||
const byteArray = new Uint8Array(byteNumbers);
|
||||
const blob = new Blob([byteArray], { type: fileInfo.mimeType });
|
||||
const fileUrl = URL.createObjectURL(blob);
|
||||
|
||||
// preview
|
||||
window.open(fileUrl, '_blank');
|
||||
|
||||
// clean
|
||||
setTimeout(() => {
|
||||
URL.revokeObjectURL(fileUrl);
|
||||
}, 1000);
|
||||
});
|
||||
|
||||
return (
|
||||
<MyModal
|
||||
maxW={['90vw', '700px']}
|
||||
@@ -165,6 +189,14 @@ function InvoiceDetailModal({
|
||||
/>
|
||||
<LabelItem label={t('account_bill:contact_phone')} value={invoice.contactPhone} />
|
||||
<LabelItem label={t('account_bill:email_address')} value={invoice.emailAddress} />
|
||||
{invoice.status === 2 && (
|
||||
<Flex alignItems={'center'} justify={'space-between'}>
|
||||
<FormLabel flex={'0 0 120px'}>{t('account_bill:Invoice_document')}</FormLabel>
|
||||
<Box cursor={'pointer'} onClick={() => handleDownloadInvoice(invoice._id)}>
|
||||
{t('account_bill:click_to_download')}
|
||||
</Box>
|
||||
</Flex>
|
||||
)}
|
||||
</Flex>
|
||||
</ModalBody>
|
||||
</MyModal>
|
||||
|
||||
@@ -38,7 +38,6 @@ import { useSystemStore } from '@/web/common/system/useSystemStore';
|
||||
import QuestionTip from '@fastgpt/web/components/common/MyTooltip/QuestionTip';
|
||||
import MyModal from '@fastgpt/web/components/common/MyModal';
|
||||
import FormLabel from '@fastgpt/web/components/common/MyBox/FormLabel';
|
||||
import { getCQPrompt, getExtractJsonPrompt } from '@fastgpt/global/core/ai/prompt/agent';
|
||||
|
||||
export const AddModelButton = ({
|
||||
onCreate,
|
||||
@@ -173,6 +172,36 @@ export const ModelEditModal = ({
|
||||
}
|
||||
);
|
||||
|
||||
const CustomApi = useMemo(
|
||||
() => (
|
||||
<>
|
||||
<Tr>
|
||||
<Td>
|
||||
<HStack spacing={1}>
|
||||
<Box>{t('account:model.request_url')}</Box>
|
||||
<QuestionTip label={t('account:model.request_url_tip')} />
|
||||
</HStack>
|
||||
</Td>
|
||||
<Td textAlign={'right'}>
|
||||
<Input {...register('requestUrl')} {...InputStyles} />
|
||||
</Td>
|
||||
</Tr>
|
||||
<Tr>
|
||||
<Td>
|
||||
<HStack spacing={1}>
|
||||
<Box>{t('account:model.request_auth')}</Box>
|
||||
<QuestionTip label={t('account:model.request_auth_tip')} />
|
||||
</HStack>
|
||||
</Td>
|
||||
<Td textAlign={'right'}>
|
||||
<Input {...register('requestAuth')} {...InputStyles} />
|
||||
</Td>
|
||||
</Tr>
|
||||
</>
|
||||
),
|
||||
[]
|
||||
);
|
||||
|
||||
return (
|
||||
<MyModal
|
||||
iconSrc={'modal/edit'}
|
||||
@@ -534,28 +563,7 @@ export const ModelEditModal = ({
|
||||
</Tr>
|
||||
</>
|
||||
)}
|
||||
<Tr>
|
||||
<Td>
|
||||
<HStack spacing={1}>
|
||||
<Box>{t('account:model.request_url')}</Box>
|
||||
<QuestionTip label={t('account:model.request_url_tip')} />
|
||||
</HStack>
|
||||
</Td>
|
||||
<Td textAlign={'right'}>
|
||||
<Input {...register('requestUrl')} {...InputStyles} />
|
||||
</Td>
|
||||
</Tr>
|
||||
<Tr>
|
||||
<Td>
|
||||
<HStack spacing={1}>
|
||||
<Box>{t('account:model.request_auth')}</Box>
|
||||
<QuestionTip label={t('account:model.request_auth_tip')} />
|
||||
</HStack>
|
||||
</Td>
|
||||
<Td textAlign={'right'}>
|
||||
<Input {...register('requestAuth')} {...InputStyles} />
|
||||
</Td>
|
||||
</Tr>
|
||||
{!isLLMModel && CustomApi}
|
||||
</Tbody>
|
||||
</Table>
|
||||
</TableContainer>
|
||||
@@ -666,36 +674,6 @@ export const ModelEditModal = ({
|
||||
<MyTextarea {...register('defaultSystemChatPrompt')} {...InputStyles} />
|
||||
</Td>
|
||||
</Tr>
|
||||
<Tr>
|
||||
<Td>
|
||||
<HStack spacing={1}>
|
||||
<Box>{t('account:model.custom_cq_prompt')}</Box>
|
||||
<QuestionTip
|
||||
label={t('account:model.custom_cq_prompt_tip', {
|
||||
prompt: getCQPrompt()
|
||||
})}
|
||||
/>
|
||||
</HStack>
|
||||
</Td>
|
||||
<Td textAlign={'right'}>
|
||||
<MyTextarea {...register('customCQPrompt')} {...InputStyles} />
|
||||
</Td>
|
||||
</Tr>
|
||||
<Tr>
|
||||
<Td>
|
||||
<HStack spacing={1}>
|
||||
<Box>{t('account:model.custom_extract_prompt')}</Box>
|
||||
<QuestionTip
|
||||
label={t('account:model.custom_extract_prompt_tip', {
|
||||
prompt: getExtractJsonPrompt()
|
||||
})}
|
||||
/>
|
||||
</HStack>
|
||||
</Td>
|
||||
<Td textAlign={'right'}>
|
||||
<MyTextarea {...register('customExtractPrompt')} {...InputStyles} />
|
||||
</Td>
|
||||
</Tr>
|
||||
<Tr>
|
||||
<Td>
|
||||
<HStack spacing={1}>
|
||||
@@ -723,6 +701,7 @@ export const ModelEditModal = ({
|
||||
/>
|
||||
</Td>
|
||||
</Tr>
|
||||
{CustomApi}
|
||||
</Tbody>
|
||||
</Table>
|
||||
</TableContainer>
|
||||
|
||||
@@ -4,7 +4,7 @@ import { Box, Grid, HStack, useTheme } from '@chakra-ui/react';
|
||||
import MyBox from '@fastgpt/web/components/common/MyBox';
|
||||
import { useRequest2 } from '@fastgpt/web/hooks/useRequest';
|
||||
import { useTranslation } from 'next-i18next';
|
||||
import { addDays } from 'date-fns';
|
||||
import { addDays, addHours } from 'date-fns';
|
||||
import dayjs from 'dayjs';
|
||||
import DateRangePicker, {
|
||||
type DateRangeType
|
||||
@@ -47,24 +47,15 @@ const ChartsBoxStyles: BoxProps = {
|
||||
|
||||
// Default date range: Past 7 days
|
||||
const getDefaultDateRange = (): DateRangeType => {
|
||||
const from = addDays(new Date(), -7);
|
||||
from.setHours(0, 0, 0, 0);
|
||||
const from = addHours(new Date(), -24);
|
||||
from.setMinutes(0, 0, 0); // Set minutes to 0
|
||||
|
||||
const to = new Date();
|
||||
to.setHours(23, 59, 59, 999);
|
||||
const to = addHours(new Date(), 1);
|
||||
to.setMinutes(0, 0, 0); // Set minutes to 0
|
||||
|
||||
return { from, to };
|
||||
};
|
||||
|
||||
const calculateTimeDiffs = (from: Date, to: Date) => {
|
||||
const startDate = dayjs(from);
|
||||
const endDate = dayjs(to);
|
||||
return {
|
||||
daysDiff: endDate.diff(startDate, 'day'),
|
||||
hoursDiff: endDate.diff(startDate, 'hour')
|
||||
};
|
||||
};
|
||||
|
||||
const ModelDashboard = ({ Tab }: { Tab: React.ReactNode }) => {
|
||||
const { t } = useTranslation();
|
||||
const theme = useTheme();
|
||||
@@ -89,7 +80,7 @@ const ModelDashboard = ({ Tab }: { Tab: React.ReactNode }) => {
|
||||
}>({
|
||||
channelId: undefined,
|
||||
model: undefined,
|
||||
timespan: 'day',
|
||||
timespan: 'hour',
|
||||
dateRange: getDefaultDateRange()
|
||||
});
|
||||
|
||||
@@ -159,22 +150,22 @@ const ModelDashboard = ({ Tab }: { Tab: React.ReactNode }) => {
|
||||
return map;
|
||||
}, [systemModelList]);
|
||||
|
||||
const computeTimespan = (daysDiff: number, hoursDiff: number) => {
|
||||
const computeTimespan = (hoursDiff: number) => {
|
||||
const options: { label: string; value: 'minute' | 'hour' | 'day' }[] = [];
|
||||
if (daysDiff <= 1) {
|
||||
if (hoursDiff <= 1 * 24) {
|
||||
options.push({ label: t('account_model:timespan_minute'), value: 'minute' });
|
||||
}
|
||||
if (daysDiff < 7) {
|
||||
if (hoursDiff < 7 * 24) {
|
||||
options.push({ label: t('account_model:timespan_hour'), value: 'hour' });
|
||||
}
|
||||
if (daysDiff >= 1) {
|
||||
if (hoursDiff >= 1 * 24) {
|
||||
options.push({ label: t('account_model:timespan_day'), value: 'day' });
|
||||
}
|
||||
|
||||
const defaultTimespan: 'minute' | 'hour' | 'day' = (() => {
|
||||
if (hoursDiff < 1) {
|
||||
return 'minute';
|
||||
} else if (daysDiff < 2) {
|
||||
} else if (hoursDiff < 2 * 24) {
|
||||
return 'hour';
|
||||
} else {
|
||||
return 'day';
|
||||
@@ -183,7 +174,7 @@ const ModelDashboard = ({ Tab }: { Tab: React.ReactNode }) => {
|
||||
|
||||
return { options, defaultTimespan };
|
||||
};
|
||||
const [timespanOptions, setTimespanOptions] = useState(computeTimespan(30, 60).options);
|
||||
const [timespanOptions, setTimespanOptions] = useState(computeTimespan(48).options);
|
||||
|
||||
// Handle date range change with automatic timespan adjustment
|
||||
const handleDateRangeChange = (dateRange: DateRangeType) => {
|
||||
@@ -191,11 +182,9 @@ const ModelDashboard = ({ Tab }: { Tab: React.ReactNode }) => {
|
||||
|
||||
// Computed timespan
|
||||
if (dateRange.from && dateRange.to) {
|
||||
const { daysDiff, hoursDiff } = calculateTimeDiffs(dateRange.from, dateRange.to);
|
||||
const { options: newTimespanOptions, defaultTimespan: newDefaultTimespan } = computeTimespan(
|
||||
daysDiff,
|
||||
hoursDiff
|
||||
);
|
||||
const hoursDiff = dayjs(dateRange.to).diff(dayjs(dateRange.from), 'hour');
|
||||
const { options: newTimespanOptions, defaultTimespan: newDefaultTimespan } =
|
||||
computeTimespan(hoursDiff);
|
||||
|
||||
setTimespanOptions(newTimespanOptions);
|
||||
newFilterProps.timespan = newDefaultTimespan;
|
||||
|
||||
+1
-1
@@ -52,7 +52,7 @@ const WorkflowVariableModal = ({
|
||||
<Box h={'1px'} bg={'myGray.150'} my={4}></Box>
|
||||
<Flex alignItems={'center'}>
|
||||
<Box fontSize={'14px'} color={'myGray.900'} fontWeight={'medium'}>
|
||||
{t('common:core.workflow.value')}
|
||||
{t('common:value')}
|
||||
</Box>
|
||||
<Input
|
||||
ml={8}
|
||||
|
||||
Reference in New Issue
Block a user