Merge branch 'feat/support-free-try-app' of github.com:langgenius/dify into feat/support-free-try-app

This commit is contained in:
CodingOnStar 2025-10-15 14:36:47 +08:00
commit df4e32aaa0
6 changed files with 63 additions and 44 deletions

View File

@ -33,7 +33,7 @@ const VarItem: FC<ItemProps> = ({
const [isDeleting, setIsDeleting] = useState(false) const [isDeleting, setIsDeleting] = useState(false)
return ( return (
<div className={cn('group relative mb-1 flex h-[34px] w-full items-center rounded-lg border-[0.5px] border-components-panel-border-subtle bg-components-panel-on-panel-item-bg pl-2.5 pr-3 shadow-xs last-of-type:mb-0 hover:bg-components-panel-on-panel-item-bg-hover hover:shadow-sm', isDeleting && 'border-state-destructive-border hover:bg-state-destructive-hover', readonly && 'cursor-not-allowed opacity-30')}> <div className={cn('group relative mb-1 flex h-[34px] w-full items-center rounded-lg border-[0.5px] border-components-panel-border-subtle bg-components-panel-on-panel-item-bg pl-2.5 pr-3 shadow-xs last-of-type:mb-0 hover:bg-components-panel-on-panel-item-bg-hover hover:shadow-sm', isDeleting && 'border-state-destructive-border hover:bg-state-destructive-hover', readonly && 'cursor-not-allowed')}>
<VarIcon className='mr-1 h-4 w-4 shrink-0 text-text-accent' /> <VarIcon className='mr-1 h-4 w-4 shrink-0 text-text-accent' />
<div className='flex w-0 grow items-center'> <div className='flex w-0 grow items-center'>
<div className='truncate' title={`${name} · ${label}`}> <div className='truncate' title={`${name} · ${label}`}>

View File

@ -79,7 +79,8 @@ const Config: FC = () => {
{/* Dataset */} {/* Dataset */}
<DatasetConfig <DatasetConfig
// readonly={readonly} readonly={readonly}
hideMetadataFilter={readonly}
/> />
{/* Tools */} {/* Tools */}

View File

@ -29,6 +29,7 @@ const Item: FC<ItemProps> = ({
config, config,
onSave, onSave,
onRemove, onRemove,
readonly = false,
editable = true, editable = true,
}) => { }) => {
const media = useBreakpoints() const media = useBreakpoints()
@ -55,6 +56,7 @@ const Item: FC<ItemProps> = ({
<div className={cn( <div className={cn(
'group relative mb-1 flex h-10 w-full cursor-pointer items-center justify-between rounded-lg border-[0.5px] border-components-panel-border-subtle bg-components-panel-on-panel-item-bg px-2 last-of-type:mb-0 hover:bg-components-panel-on-panel-item-bg-hover', 'group relative mb-1 flex h-10 w-full cursor-pointer items-center justify-between rounded-lg border-[0.5px] border-components-panel-border-subtle bg-components-panel-on-panel-item-bg px-2 last-of-type:mb-0 hover:bg-components-panel-on-panel-item-bg-hover',
isDeleting && 'border-state-destructive-border hover:bg-state-destructive-hover', isDeleting && 'border-state-destructive-border hover:bg-state-destructive-hover',
readonly && 'cursor-not-allowed',
)}> )}>
<div className='flex w-0 grow items-center space-x-1.5'> <div className='flex w-0 grow items-center space-x-1.5'>
<AppIcon <AppIcon
@ -68,7 +70,7 @@ const Item: FC<ItemProps> = ({
</div> </div>
<div className='ml-2 hidden shrink-0 items-center space-x-1 group-hover:flex'> <div className='ml-2 hidden shrink-0 items-center space-x-1 group-hover:flex'>
{ {
editable && <ActionButton editable && !readonly && <ActionButton
onClick={(e) => { onClick={(e) => {
e.stopPropagation() e.stopPropagation()
setShowSettingsModal(true) setShowSettingsModal(true)
@ -77,14 +79,18 @@ const Item: FC<ItemProps> = ({
<RiEditLine className='h-4 w-4 shrink-0 text-text-tertiary' /> <RiEditLine className='h-4 w-4 shrink-0 text-text-tertiary' />
</ActionButton> </ActionButton>
} }
<ActionButton {
onClick={() => onRemove(config.id)} !readonly && (
state={isDeleting ? ActionButtonState.Destructive : ActionButtonState.Default} <ActionButton
onMouseEnter={() => setIsDeleting(true)} onClick={() => onRemove(config.id)}
onMouseLeave={() => setIsDeleting(false)} state={isDeleting ? ActionButtonState.Destructive : ActionButtonState.Default}
> onMouseEnter={() => setIsDeleting(true)}
<RiDeleteBinLine className={cn('h-4 w-4 shrink-0 text-text-tertiary', isDeleting && 'text-text-destructive')} /> onMouseLeave={() => setIsDeleting(false)}
</ActionButton> >
<RiDeleteBinLine className={cn('h-4 w-4 shrink-0 text-text-tertiary', isDeleting && 'text-text-destructive')} />
</ActionButton>
)
}
</div> </div>
{ {
config.indexing_technique && <Badge config.indexing_technique && <Badge

View File

@ -37,7 +37,11 @@ import {
MetadataFilteringVariableType, MetadataFilteringVariableType,
} from '@/app/components/workflow/nodes/knowledge-retrieval/types' } from '@/app/components/workflow/nodes/knowledge-retrieval/types'
const DatasetConfig: FC = () => { type Props = {
readonly?: boolean
hideMetadataFilter?: boolean
}
const DatasetConfig: FC<Props> = ({ readonly, hideMetadataFilter }) => {
const { t } = useTranslation() const { t } = useTranslation()
const userProfile = useAppContextSelector(s => s.userProfile) const userProfile = useAppContextSelector(s => s.userProfile)
const { const {
@ -254,10 +258,10 @@ const DatasetConfig: FC = () => {
className='mt-2' className='mt-2'
title={t('appDebug.feature.dataSet.title')} title={t('appDebug.feature.dataSet.title')}
headerRight={ headerRight={
<div className='flex items-center gap-1'> !readonly && (<div className='flex items-center gap-1'>
{!isAgent && <ParamsConfig disabled={!hasData} selectedDatasets={dataSet} />} {!isAgent && <ParamsConfig disabled={!hasData} selectedDatasets={dataSet} />}
<OperationBtn type="add" onClick={showSelectDataSet} /> <OperationBtn type="add" onClick={showSelectDataSet} />
</div> </div>)
} }
hasHeaderBottomBorder={!hasData} hasHeaderBottomBorder={!hasData}
noBodySpacing noBodySpacing
@ -271,7 +275,8 @@ const DatasetConfig: FC = () => {
config={item} config={item}
onRemove={onRemove} onRemove={onRemove}
onSave={handleSave} onSave={handleSave}
editable={item.editable} editable={item.editable && !readonly}
readonly={readonly}
/> />
))} ))}
</div> </div>
@ -282,25 +287,27 @@ const DatasetConfig: FC = () => {
</div> </div>
)} )}
<div className='border-t border-t-divider-subtle py-2'> {!hideMetadataFilter && (
<MetadataFilter <div className='border-t border-t-divider-subtle py-2'>
metadataList={metadataList} <MetadataFilter
selectedDatasetsLoaded metadataList={metadataList}
metadataFilterMode={datasetConfigs.metadata_filtering_mode} selectedDatasetsLoaded
metadataFilteringConditions={datasetConfigs.metadata_filtering_conditions} metadataFilterMode={datasetConfigs.metadata_filtering_mode}
handleAddCondition={handleAddCondition} metadataFilteringConditions={datasetConfigs.metadata_filtering_conditions}
handleMetadataFilterModeChange={handleMetadataFilterModeChange} handleAddCondition={handleAddCondition}
handleRemoveCondition={handleRemoveCondition} handleMetadataFilterModeChange={handleMetadataFilterModeChange}
handleToggleConditionLogicalOperator={handleToggleConditionLogicalOperator} handleRemoveCondition={handleRemoveCondition}
handleUpdateCondition={handleUpdateCondition} handleToggleConditionLogicalOperator={handleToggleConditionLogicalOperator}
metadataModelConfig={datasetConfigs.metadata_model_config} handleUpdateCondition={handleUpdateCondition}
handleMetadataModelChange={handleMetadataModelChange} metadataModelConfig={datasetConfigs.metadata_model_config}
handleMetadataCompletionParamsChange={handleMetadataCompletionParamsChange} handleMetadataModelChange={handleMetadataModelChange}
isCommonVariable handleMetadataCompletionParamsChange={handleMetadataCompletionParamsChange}
availableCommonStringVars={promptVariablesToSelect.filter(item => item.type === MetadataFilteringVariableType.string || item.type === MetadataFilteringVariableType.select)} isCommonVariable
availableCommonNumberVars={promptVariablesToSelect.filter(item => item.type === MetadataFilteringVariableType.number)} availableCommonStringVars={promptVariablesToSelect.filter(item => item.type === MetadataFilteringVariableType.string || item.type === MetadataFilteringVariableType.select)}
/> availableCommonNumberVars={promptVariablesToSelect.filter(item => item.type === MetadataFilteringVariableType.number)}
</div> />
</div>
)}
{mode === AppType.completion && dataSet.length > 0 && ( {mode === AppType.completion && dataSet.length > 0 && (
<ContextVar <ContextVar

View File

@ -70,6 +70,7 @@ const Debug: FC<IDebug> = ({
}) => { }) => {
const { t } = useTranslation() const { t } = useTranslation()
const { const {
readonly,
appId, appId,
mode, mode,
modelModeType, modelModeType,
@ -413,19 +414,23 @@ const Debug: FC<IDebug> = ({
} }
{mode !== AppType.completion && ( {mode !== AppType.completion && (
<> <>
<TooltipPlus {!readonly && (
popupContent={t('common.operation.refresh')} <TooltipPlus
> popupContent={t('common.operation.refresh')}
<ActionButton onClick={clearConversation}> >
<RefreshCcw01 className='h-4 w-4' /> <ActionButton onClick={clearConversation}>
</ActionButton> <RefreshCcw01 className='h-4 w-4' />
</TooltipPlus> </ActionButton>
</TooltipPlus>
)}
{varList.length > 0 && ( {varList.length > 0 && (
<div className='relative ml-1 mr-2'> <div className='relative ml-1 mr-2'>
<TooltipPlus <TooltipPlus
popupContent={t('workflow.panel.userInputField')} popupContent={t('workflow.panel.userInputField')}
> >
<ActionButton state={expanded ? ActionButtonState.Active : undefined} onClick={() => setExpanded(!expanded)}> <ActionButton state={expanded ? ActionButtonState.Active : undefined} onClick={() => !readonly && setExpanded(!expanded)}>
<RiEqualizer2Line className='h-4 w-4' /> <RiEqualizer2Line className='h-4 w-4' />
</ActionButton> </ActionButton>
</TooltipPlus> </TooltipPlus>
@ -553,7 +558,7 @@ const Debug: FC<IDebug> = ({
onCancel={handleCancel} onCancel={handleCancel}
/> />
)} )}
{!isAPIKeySet && (<HasNotSetAPIKEY isTrailFinished={!IS_CE_EDITION} onSetting={onSetting} />)} {!isAPIKeySet && !readonly && (<HasNotSetAPIKEY isTrailFinished={!IS_CE_EDITION} onSetting={onSetting} />)}
</> </>
) )
} }

View File

@ -305,7 +305,7 @@ const Configuration: FC<Props> = ({
return ( return (
<ConfigContext.Provider value={value as any}> <ConfigContext.Provider value={value as any}>
<FeaturesProvider features={featuresData}> <FeaturesProvider features={featuresData}>
<div className="flex h-full flex-col"> <div className="flex h-full flex-col bg-components-panel-on-panel-item-bg">
<div className='relative flex h-[200px] grow'> <div className='relative flex h-[200px] grow'>
<div className={'flex h-full w-full shrink-0 flex-col sm:w-1/2'}> <div className={'flex h-full w-full shrink-0 flex-col sm:w-1/2'}>
<Config /> <Config />