diff --git a/api/controllers/console/app/app.py b/api/controllers/console/app/app.py
index 037f13d297..0724a6355d 100644
--- a/api/controllers/console/app/app.py
+++ b/api/controllers/console/app/app.py
@@ -15,11 +15,12 @@ from controllers.console.wraps import (
setup_required,
)
from core.ops.ops_trace_manager import OpsTraceManager
+from core.workflow.enums import NodeType
from extensions.ext_database import db
from fields.app_fields import app_detail_fields, app_detail_fields_with_site, app_pagination_fields
from libs.login import current_account_with_tenant, login_required
from libs.validators import validate_description_length
-from models import App
+from models import App, Workflow
from services.app_dsl_service import AppDslService, ImportMode
from services.app_service import AppService
from services.enterprise.enterprise_service import EnterpriseService
@@ -106,6 +107,35 @@ class AppListApi(Resource):
if str(app.id) in res:
app.access_mode = res[str(app.id)].access_mode
+ workflow_capable_app_ids = [
+ str(app.id) for app in app_pagination.items if app.mode in {"workflow", "advanced-chat"}
+ ]
+ draft_trigger_app_ids: set[str] = set()
+ if workflow_capable_app_ids:
+ draft_workflows = (
+ db.session.execute(
+ select(Workflow).where(
+ Workflow.version == Workflow.VERSION_DRAFT,
+ Workflow.app_id.in_(workflow_capable_app_ids),
+ )
+ )
+ .scalars()
+ .all()
+ )
+ trigger_node_types = {
+ NodeType.TRIGGER_WEBHOOK,
+ NodeType.TRIGGER_SCHEDULE,
+ NodeType.TRIGGER_PLUGIN,
+ }
+ for workflow in draft_workflows:
+ for _, node_data in workflow.walk_nodes():
+ if node_data.get("type") in trigger_node_types:
+ draft_trigger_app_ids.add(str(workflow.app_id))
+ break
+
+ for app in app_pagination.items:
+ app.has_draft_trigger = str(app.id) in draft_trigger_app_ids
+
return marshal(app_pagination, app_pagination_fields), 200
@api.doc("create_app")
diff --git a/api/fields/app_fields.py b/api/fields/app_fields.py
index 1f14d663b8..7191933eed 100644
--- a/api/fields/app_fields.py
+++ b/api/fields/app_fields.py
@@ -116,6 +116,7 @@ app_partial_fields = {
"access_mode": fields.String,
"create_user_name": fields.String,
"author_name": fields.String,
+ "has_draft_trigger": fields.Boolean,
}
diff --git a/web/app/components/apps/app-card.tsx b/web/app/components/apps/app-card.tsx
index 564eb493e5..8356cfd31c 100644
--- a/web/app/components/apps/app-card.tsx
+++ b/web/app/components/apps/app-card.tsx
@@ -282,21 +282,23 @@ const AppCard = ({ app, onRefresh }: AppCardProps) => {
>
)}
{
- (!systemFeatures.webapp_auth.enabled)
- ? <>
-
-
- >
- : !(isGettingUserCanAccessApp || !userCanAccessApp?.result) && (
- <>
+ !app.has_draft_trigger && (
+ (!systemFeatures.webapp_auth.enabled)
+ ? <>
>
- )
+ : !(isGettingUserCanAccessApp || !userCanAccessApp?.result) && (
+ <>
+
+
+ >
+ )
+ )
}
{
diff --git a/web/types/app.ts b/web/types/app.ts
index b7a7f6a48d..73e11d396a 100644
--- a/web/types/app.ts
+++ b/web/types/app.ts
@@ -379,6 +379,8 @@ export type App = {
/** access control */
access_mode: AccessMode
max_active_requests?: number | null
+ /** whether workflow trigger has un-published draft */
+ has_draft_trigger?: boolean
}
export type AppSSO = {