fix: user can edit webapp copyright info only if webapp_copyright_enabled is true

This commit is contained in:
NFish 2025-03-18 14:54:18 +08:00
parent 1b1e96eff7
commit c794ecf101
3 changed files with 27 additions and 19 deletions

View File

@ -30,7 +30,6 @@ import I18n from '@/context/i18n'
import cn from '@/utils/classnames' import cn from '@/utils/classnames'
import { useGlobalPublicStore } from '@/context/global-public-context' import { useGlobalPublicStore } from '@/context/global-public-context'
import { IS_CE_EDITION } from '@/config' import { IS_CE_EDITION } from '@/config'
import { LicenseStatus } from '@/types/feature'
export type ISettingsModalProps = { export type ISettingsModalProps = {
isChat: boolean isChat: boolean
@ -113,7 +112,7 @@ const SettingsModal: FC<ISettingsModalProps> = ({
: { type: 'emoji', icon, background: icon_background! }, : { type: 'emoji', icon, background: icon_background! },
) )
const { enableBilling, plan } = useProviderContext() const { enableBilling, plan, webappCopyrightEnabled } = useProviderContext()
const { setShowPricingModal, setShowAccountSettingModal } = useModalContext() const { setShowPricingModal, setShowAccountSettingModal } = useModalContext()
const isFreePlan = plan.type === 'sandbox' const isFreePlan = plan.type === 'sandbox'
const handlePlanClick = useCallback(() => { const handlePlanClick = useCallback(() => {
@ -383,14 +382,14 @@ const SettingsModal: FC<ISettingsModalProps> = ({
)} )}
</div> </div>
<Tooltip <Tooltip
disabled={systemFeatures.license.status !== LicenseStatus.NONE} disabled={webappCopyrightEnabled}
popupContent={ popupContent={
<div className='w-[260px]'>{t(`${prefixSettings}.more.copyrightTooltip`)}</div> <div className='w-[180px]'>{t(`${prefixSettings}.more.copyrightTooltip`)}</div>
} }
asChild={false} asChild={false}
> >
<Switch <Switch
disabled={IS_CE_EDITION} disabled={!webappCopyrightEnabled}
defaultValue={inputInfo.copyrightSwitchValue} defaultValue={inputInfo.copyrightSwitchValue}
onChange={v => setInputInfo({ ...inputInfo, copyrightSwitchValue: v })} onChange={v => setInputInfo({ ...inputInfo, copyrightSwitchValue: v })}
/> />
@ -442,20 +441,22 @@ const SettingsModal: FC<ISettingsModalProps> = ({
<Button variant='primary' onClick={onClickSave} loading={saveLoading}>{t('common.operation.save')}</Button> <Button variant='primary' onClick={onClickSave} loading={saveLoading}>{t('common.operation.save')}</Button>
</div> </div>
</Modal > </Modal >
{showAppIconPicker && ( {
<AppIconPicker showAppIconPicker && (
onSelect={(payload) => { <AppIconPicker
setAppIcon(payload) onSelect={(payload) => {
setShowAppIconPicker(false) setAppIcon(payload)
}} setShowAppIconPicker(false)
onClose={() => { }}
setAppIcon(icon_type === 'image' onClose={() => {
? { type: 'image', url: icon_url!, fileId: icon } setAppIcon(icon_type === 'image'
: { type: 'emoji', icon, background: icon_background! }) ? { type: 'image', url: icon_url!, fileId: icon }
setShowAppIconPicker(false) : { type: 'emoji', icon, background: icon_background! })
}} setShowAppIconPicker(false)
/> }}
)} />
)
}
</> </>
) )

View File

@ -67,6 +67,7 @@ export type CurrentPlanInfoBackend = {
can_replace_logo: boolean can_replace_logo: boolean
model_load_balancing_enabled: boolean model_load_balancing_enabled: boolean
dataset_operator_enabled: boolean dataset_operator_enabled: boolean
webapp_copyright_enabled: boolean
} }
export type SubscriptionItem = { export type SubscriptionItem = {

View File

@ -35,6 +35,7 @@ type ProviderContextState = {
enableReplaceWebAppLogo: boolean enableReplaceWebAppLogo: boolean
modelLoadBalancingEnabled: boolean modelLoadBalancingEnabled: boolean
datasetOperatorEnabled: boolean datasetOperatorEnabled: boolean
webappCopyrightEnabled: boolean
} }
const ProviderContext = createContext<ProviderContextState>({ const ProviderContext = createContext<ProviderContextState>({
modelProviders: [], modelProviders: [],
@ -64,6 +65,7 @@ const ProviderContext = createContext<ProviderContextState>({
enableReplaceWebAppLogo: false, enableReplaceWebAppLogo: false,
modelLoadBalancingEnabled: false, modelLoadBalancingEnabled: false,
datasetOperatorEnabled: false, datasetOperatorEnabled: false,
webappCopyrightEnabled: false,
}) })
export const useProviderContext = () => useContext(ProviderContext) export const useProviderContext = () => useContext(ProviderContext)
@ -91,6 +93,7 @@ export const ProviderContextProvider = ({
const [enableReplaceWebAppLogo, setEnableReplaceWebAppLogo] = useState(false) const [enableReplaceWebAppLogo, setEnableReplaceWebAppLogo] = useState(false)
const [modelLoadBalancingEnabled, setModelLoadBalancingEnabled] = useState(false) const [modelLoadBalancingEnabled, setModelLoadBalancingEnabled] = useState(false)
const [datasetOperatorEnabled, setDatasetOperatorEnabled] = useState(false) const [datasetOperatorEnabled, setDatasetOperatorEnabled] = useState(false)
const [webappCopyrightEnabled, setWebappCopyrightEnabled] = useState(false)
const fetchPlan = async () => { const fetchPlan = async () => {
const data = await fetchCurrentPlanInfo() const data = await fetchCurrentPlanInfo()
@ -105,6 +108,8 @@ export const ProviderContextProvider = ({
setModelLoadBalancingEnabled(true) setModelLoadBalancingEnabled(true)
if (data.dataset_operator_enabled) if (data.dataset_operator_enabled)
setDatasetOperatorEnabled(true) setDatasetOperatorEnabled(true)
if (data.webapp_copyright_enabled)
setWebappCopyrightEnabled(true)
} }
useEffect(() => { useEffect(() => {
fetchPlan() fetchPlan()
@ -123,6 +128,7 @@ export const ProviderContextProvider = ({
enableReplaceWebAppLogo, enableReplaceWebAppLogo,
modelLoadBalancingEnabled, modelLoadBalancingEnabled,
datasetOperatorEnabled, datasetOperatorEnabled,
webappCopyrightEnabled,
}}> }}>
{children} {children}
</ProviderContext.Provider> </ProviderContext.Provider>