diff --git a/packages/service/common/s3/buckets/base.ts b/packages/service/common/s3/buckets/base.ts index 82c44f4c9..2ab81c923 100644 --- a/packages/service/common/s3/buckets/base.ts +++ b/packages/service/common/s3/buckets/base.ts @@ -34,6 +34,7 @@ export const isFileNotFoundError = (error: any): boolean => { error.message === 'Not Found' || error.message === 'The request signature we calculated does not match the signature you provided. Check your key and signing method.' || + error.message.includes('Resource name contains bad components') || error.message.includes('Object name contains unsupported characters.') ); } diff --git a/projects/app/src/components/Layout/HelperBot.tsx b/projects/app/src/components/Layout/HelperBot.tsx index 96494a388..3ac44c35d 100644 --- a/projects/app/src/components/Layout/HelperBot.tsx +++ b/projects/app/src/components/Layout/HelperBot.tsx @@ -28,13 +28,21 @@ const HelperBot = () => { const [showChat, setShowChat] = useToggle(false); const [isLoading, setIsLoading] = useState(true); - const { feConfigs, setNotSufficientModalType } = useSystemStore(); + const { feConfigs, setNotSufficientModalType, subPlans } = useSystemStore(); const { teamPlanStatus } = useUserStore(); const hasTicketAccess = useMemo(() => { - const ticketResponseTime = teamPlanStatus?.standard?.ticketResponseTime; - return ticketResponseTime !== undefined && ticketResponseTime > 0; - }, [teamPlanStatus?.standard?.ticketResponseTime]); + const plan = teamPlanStatus?.standard?.currentSubLevel + ? subPlans?.standard?.[teamPlanStatus?.standard?.currentSubLevel] + : undefined; + const ticketResponseTime = + teamPlanStatus?.standard?.ticketResponseTime ?? plan?.ticketResponseTime; + return !!ticketResponseTime; + }, [ + subPlans?.standard, + teamPlanStatus?.standard?.currentSubLevel, + teamPlanStatus?.standard?.ticketResponseTime + ]); const botIframeUrl = feConfigs?.botIframeUrl; diff --git a/projects/app/src/pageComponents/chat/WorkorderEntrance.tsx b/projects/app/src/pageComponents/chat/WorkorderEntrance.tsx index c66f7dc31..af7f83894 100644 --- a/projects/app/src/pageComponents/chat/WorkorderEntrance.tsx +++ b/projects/app/src/pageComponents/chat/WorkorderEntrance.tsx @@ -1,5 +1,4 @@ import { Button } from '@chakra-ui/react'; -import { getWorkorderURL } from '@/web/common/workorder/api'; import { useRequest2 } from '@fastgpt/web/hooks/useRequest'; import { useTranslation } from 'next-i18next'; diff --git a/projects/app/src/pages/account/info/index.tsx b/projects/app/src/pages/account/info/index.tsx index 8f28ccc4c..811fdbb90 100644 --- a/projects/app/src/pages/account/info/index.tsx +++ b/projects/app/src/pages/account/info/index.tsx @@ -45,6 +45,7 @@ import { useMount } from 'ahooks'; import MyDivider from '@fastgpt/web/components/common/MyDivider'; import { useUploadAvatar } from '@fastgpt/web/common/file/hooks/useUploadAvatar'; import { getUploadAvatarPresignedUrl } from '@/web/common/file/api'; +import { TeamErrEnum } from '@fastgpt/global/common/error/code/team'; const RedeemCouponModal = dynamic(() => import('@/pageComponents/account/info/RedeemCouponModal'), { ssr: false @@ -717,19 +718,34 @@ const ButtonStyles = { fontSize: 'sm' }; const Other = ({ onOpenContact }: { onOpenContact: () => void }) => { - const { feConfigs } = useSystemStore(); + const { feConfigs, setNotSufficientModalType, subPlans } = useSystemStore(); const { teamPlanStatus } = useUserStore(); const { t } = useTranslation(); const { isPc } = useSystem(); - const { runAsync: onFeedback } = useRequest2(getWorkorderURL, { - manual: true, - onSuccess(data) { + const { runAsync: onFeedback } = useRequest2( + async () => { + const plan = teamPlanStatus?.standard?.currentSubLevel + ? subPlans?.standard?.[teamPlanStatus?.standard?.currentSubLevel] + : undefined; + + const ticketResponseTime = + teamPlanStatus?.standard?.ticketResponseTime ?? plan?.ticketResponseTime; + const hasTicketAccess = !!ticketResponseTime; + if (!hasTicketAccess) { + setNotSufficientModalType(TeamErrEnum.ticketNotAvailable); + return; + } + + const data = await getWorkorderURL(); if (data) { window.open(data.redirectUrl); } + }, + { + manual: true } - }); + ); return ( @@ -767,16 +783,14 @@ const Other = ({ onOpenContact }: { onOpenContact: () => void }) => { )} - {feConfigs?.show_workorder && - teamPlanStatus && - teamPlanStatus.standard?.currentSubLevel !== StandardSubLevelEnum.free && ( - - - - {t('common:question_feedback')} - - - )} + {feConfigs?.show_workorder && ( + + + + {t('common:question_feedback')} + + + )} );