diff --git a/dagflow/dagflow.py b/dagflow/dagflow.py index 96c4c41..18abe83 100644 --- a/dagflow/dagflow.py +++ b/dagflow/dagflow.py @@ -515,6 +515,17 @@ async def get_exists_workflows(request): recs = await sor.sqlExe(sql, {'orgids': orgids}) return recs return [] + +async def new_instance(request, flow_def_id, params_kw): + env = request._run_ns + orgid = await env.get_userorgid() + async with get_sor_context(env, 'dagflow') as sor: + engine = get_engine() + fiid = await engine.create_instance(sor, orgid, + flow_def_id, ctx=params_kw) + return fiid + return None + async def add_new_workflow(request, params_kw={}): name = params_kw.name dsl = params_kw.dsl @@ -530,3 +541,13 @@ async def add_new_workflow(request, params_kw={}): 'dagflow_id': id } } + + +async def get_org_flow_definition(request): + env = request._run_ns + orgids = await env.get_userorgid() + async with get_sor_context(env, 'dagflow') as sor: + sql = """select * from flow_definition where org_id in ${orids}$""" + recs = sor.sqlExe(sql, {'orgids': ['0', orgid]}) + return recs + return [] diff --git a/dagflow/init.py b/dagflow/init.py index b05bf4b..582bbc8 100644 --- a/dagflow/init.py +++ b/dagflow/init.py @@ -3,7 +3,11 @@ from functools import partial from appPublic.jsonConfig import getConfig from ahserver.serverenv import ServerEnv from ahserver.configuredServer import add_cleanupctx -from .dagflow import FlowEngine, add_new_workflow +from .dagflow import ( + FlowEngine, + get_org_flow_definition + add_new_workflow +} async def dagbacktask(engines, app): tasks = [] @@ -27,4 +31,5 @@ def load_dagflow(): env = ServerEnv() env.flow_engines = flow_engines env.add_new_workflow = add_new_workflow + env.get_org_flow_definition = get_org_flow_definition diff --git a/wwwroot/exists_flow_definition/definition.ui b/wwwroot/exists_flow_definition/definition.ui new file mode 100644 index 0000000..25d196a --- /dev/null +++ b/wwwroot/exists_flow_definition/definition.ui @@ -0,0 +1,58 @@ +{% set definitions = get_org_flow_definition(request) %} +{% if definitions %} +{ + "widgettype": "VScrollPanel", + "options": { + "width": "100%", + "height": "100%", + }, + "subwidgets": [ +{% for d in definitions %} + { + "widgettype": "Text", + "options": { + "css": "clickable", + "i18n": true, + "otext": "{{d.title}}", + "tip": "{{d.description}}", + "wrap": true, + "valign": "left" + }, + "binds": [ + { + "wid": "self", + "event": "click", + "actiontype": "urlwidget", + "target": "root.ai_x_area", + "options": { + "url": "{{entire_url('new_instance.ui')}}", + "params": { + "id": "{{d.id}}" + } + } + } + ] + } +{% if not loop.last %},{% endif %} +{% endfor %} + ] +} +{% else %} +{ + "widgettype": "VBox", + "options": { + "css": "card", + "cwidth": 15, + "height": 10 + }, + "subwidgets": [ + { + "widget": "text", + "options": { + "i18n": true, + "otext": "没有流程" + } + } + ] +} +{% endif %} diff --git a/wwwroot/exists_flow_definition/idnex.ui b/wwwroot/exists_flow_definition/idnex.ui new file mode 100644 index 0000000..145bfe8 --- /dev/null +++ b/wwwroot/exists_flow_definition/idnex.ui @@ -0,0 +1,30 @@ +{ + "widgettype":"HBox", + "options": { + "width": "100%", + "heigit": "100%" + }, + "subwidgets":[ + { + "widgettype": "VBox", + "options": { + "cwidth": 12 + }, + "subwidgets": [ + { + "widgettype": "urlwidget", + "options": { + "url": "{{entire_url('tabpanel.ui')}}" + } + } + ] + }, + { + "widgettype": "VBox", + "id": "ai_x_area", + "options": { + "css": "filler" + } + } + ] +} diff --git a/wwwroot/exists_flow_definition/index.ui b/wwwroot/exists_flow_definition/index.ui deleted file mode 100644 index 8366542..0000000 --- a/wwwroot/exists_flow_definition/index.ui +++ /dev/null @@ -1,41 +0,0 @@ -{% set definitions = get_org_flow_definition() %} -{% if definitions %} -{ - "widgettype": "DynamicColumn", - "options": { - "width": "100%", - "height": "100%", - }, - "subwidgets": [ -{% for d in definitions %} - { - "widgettype": "urlwidget", - "options": { - "url": "{{entire_url('brief_definition.ui')}}", - "params": {{json.dumps(d)}} - } - } -{% if not loop.last %},{% endif %} -{% endfor %} - ] -} -{% else %} -{ - "widgettype": "VBox", - "options": { - "css": "card", - "cwidth": 15, - "height": 10 - }, - "subwidgets": [ - { - "widget": "text", - "options": { - "i18n": true, - "otext": "没有流程" - } - } - ] -} -{% endif %} - "url": "{{entire_url('show_e diff --git a/wwwroot/exists_flow_definition/new_instance.ui b/wwwroot/exists_flow_definition/new_instance.ui new file mode 100644 index 0000000..2c63c08 --- /dev/null +++ b/wwwroot/exists_flow_definition/new_instance.ui @@ -0,0 +1,2 @@ +{ +} diff --git a/wwwroot/exists_flow_definition/tabpanel.ui b/wwwroot/exists_flow_definition/tabpanel.ui new file mode 100644 index 0000000..8727e3a --- /dev/null +++ b/wwwroot/exists_flow_definition/tabpanel.ui @@ -0,0 +1,49 @@ +{ + "widgettytp": "TabPanel", + "options": { + "tab_long": "100%", + "tab_pos": "top", + "items": [ + { + "name": "definition", + "label": "流程", + "icon": "{{entire_url('/bricks/imgs/workflow.svg')}}", + "removable": false, + "refresh": true, + "content": { + "widgettype": "urlwidget", + "options": { + "url": "{{entire_url('definition.ui')}}" + } + } + }, + { + "name": "instance", + "label": "项目", + "icon": "{{entire_url('/bricks/imgs/flowinstance.svg')}}", + "removable": false, + "refresh": true, + "content": { + "widgettype": "urlwidget", + "options": { + "url": "{{entire_url('instance.ui')}}" + } + } + }, + { + "name": "work", + "label": "工作", + "icon": "{{entire_url('/bricks/imgs/work.svg')}}", + "removable": false, + "refresh": true, + "content": { + "widgettype": "urlwidget", + "options": { + "url": "{{entire_url('work.ui')}}" + } + } + } + ] + } +} +