@blueking/bkflow-canvas-editor 1.2.0-beta.0 → 1.2.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,5 @@
1
1
  import { defineComponent as A, ref as V, shallowRef as x, computed as C, watch as U, resolveComponent as j, resolveDirective as K, openBlock as l, createBlock as f, createSlots as S, withCtx as y, withDirectives as G, createElementBlock as d, createElementVNode as i, createCommentVNode as v, Fragment as H, renderList as J, toDisplayString as B, unref as Y, createVNode as R, createTextVNode as E } from "vue";
2
- import { c as _, u as z, i as M, b as Q, d as W, g as X, D as Z, B as ee, R as te, E as ae, _ as oe } from "./index-FsDBMpW4.js";
2
+ import { c as _, u as z, i as M, b as Q, d as W, g as X, D as Z, B as ee, R as te, E as ae, _ as oe } from "./index-Bij1hZGP.js";
3
3
  import "bkui-vue/lib/message";
4
4
  import "bkui-vue/lib/icon";
5
5
  import "monaco-editor";
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("vue"),d=require("./index-BUBxGOMp.cjs"),L={class:"debug-result-node-list"},D=["data-node-id","aria-selected","onClick","onKeydown"],z=["title"],A={key:0,class:"debug-result-node-list__mock","data-test":"node-mock-flag"},P={key:1,class:"debug-result-node-list__empty"},I=e.defineComponent({__name:"node-list",props:{nodes:{},modelValue:{default:""}},emits:["update:modelValue"],setup(c,{emit:g}){const t=c,s=g,r=e.ref(""),m=e.ref("all"),_=e.ref(null),p={not_run:"未执行",finished:"成功",failed:"失败",running:"正在调试",suspended:"挂起",skipped:"跳过",revoked:"终止"},k=[{value:"all",label:"全部"},{value:"finished",icon:"bkflow-canvas-dark-circle-checkbox",iconColor:"#5fb8ac",tooltip:p.finished},{value:"failed",icon:"bkflow-canvas-dark-circle-close",iconColor:"#fa4e41",tooltip:p.failed},{value:"revoked",icon:"bkflow-canvas-stop-fill",iconColor:"#fa4e41",tooltip:p.revoked},{value:"running",iconComponent:d.LoadingStatusIcon,iconColor:"#3a84ff",tooltip:p.running},{value:"not_run",icon:"bkflow-canvas-weizhixing2",iconColor:"#b8bbc4",tooltip:p.not_run},{value:"suspended",icon:"bkflow-canvas-zanting",iconColor:"#f59500",tooltip:p.suspended},{value:"skipped",icon:"bkflow-canvas-tiaoguo2",iconColor:"#6e89af",tooltip:p.skipped}],w=e.computed(()=>k.map(a=>({...a,count:a.value==="all"?t.nodes.length:t.nodes.filter(n=>n.status===a.value).length}))),V=e.computed(()=>{const a=r.value.trim().toLowerCase();return t.nodes.filter(n=>m.value!=="all"&&n.status!==m.value?!1:a?n.name.toLowerCase().includes(a)||n.type.toLowerCase().includes(a)||(n.typeName??"").toLowerCase().includes(a):!0)}),C=e.computed(()=>r.value.trim()?"搜索结果为空":m.value!=="all"?`暂无${p[m.value]}状态节点`:"暂无节点"),x=()=>{r.value="",m.value="all"},y=a=>{const n=_.value,v=n?.querySelector(`[data-node-id="${CSS.escape(a)}"]`);if(!n||!v)return;const o=n.getBoundingClientRect(),b=v.getBoundingClientRect();b.top<o.top?n.scrollTop-=o.top-b.top:b.bottom>o.bottom&&(n.scrollTop+=b.bottom-o.bottom)};return e.watch(()=>t.modelValue,async a=>{if(!a)return;!V.value.some(v=>v.id===a)&&t.nodes.some(v=>v.id===a)&&(r.value="",m.value="all"),await e.nextTick(),y(a)},{flush:"post"}),(a,n)=>{const v=e.resolveComponent("bk-input");return e.openBlock(),e.createElementBlock("aside",L,[e.createVNode(v,{modelValue:r.value,"onUpdate:modelValue":n[0]||(n[0]=o=>r.value=o),class:"debug-result-node-list__search",placeholder:"搜索节点名称 / 类型",type:"search",clearable:"","data-test":"node-search"},null,8,["modelValue"]),e.createVNode(d.SegmentTabs,{modelValue:m.value,"onUpdate:modelValue":n[1]||(n[1]=o=>m.value=o),class:"debug-result-node-list__filters","data-test":"status-filters",items:w.value},null,8,["modelValue","items"]),V.value.length>0?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"itemsRef",ref:_,class:"debug-result-node-list__items",role:"listbox"},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(V.value,o=>(e.openBlock(),e.createElementBlock("div",{key:o.id,class:e.normalizeClass(["debug-result-node-list__item",`is-${o.status}`,{"is-active":o.id===t.modelValue,"is-unconfigured":!o.isConfigured}]),role:"option","data-test":"node-item","data-node-id":o.id,"aria-selected":o.id===t.modelValue,tabindex:"0",onClick:b=>s("update:modelValue",o.id),onKeydown:e.withKeys(e.withModifiers(b=>s("update:modelValue",o.id),["prevent"]),["enter","space"])},[e.createElementVNode("span",{class:e.normalizeClass(["debug-result-node-list__status",`is-${o.status}`,{"is-placeholder":!o.isConfigured}])},[o.icon?(e.openBlock(),e.createElementBlock("i",{key:0,class:e.normalizeClass(o.icon),"data-test":"node-icon"},null,2)):e.createCommentVNode("",!0)],2),e.createElementVNode("span",{class:"debug-result-node-list__name",title:o.isConfigured?`${o.name} ${o.typeName||o.type}`:o.name},e.toDisplayString(o.name),9,z),o.isMock?(e.openBlock(),e.createElementBlock("span",A,"MOCK")):e.createCommentVNode("",!0)],42,D))),128))],512)):(e.openBlock(),e.createElementBlock("div",P,[e.createVNode(d.EmptyException,{"is-search":!1,title:C.value,onClear:x},null,8,["title"])]))])}}}),H=d._export_sfc(I,[["__scopeId","data-v-db0cb31c"]]);function U(c){if(c==null)return"";if(typeof c=="string")return c;if(typeof c=="object"){const g=c,t=g.message;if(typeof t=="string"&&t){const s=g.type;return typeof s=="string"&&s?`${s}: ${t}`:t}try{return JSON.stringify(c)}catch{return String(c)}}return String(c)}const O={class:"debug-result-tabs"},F={class:"debug-result-tabs__failed-actions","data-test":"output-error-actions"},G={class:"debug-result-tabs__execution","data-test":"tab-execution"},K={class:"debug-result-tabs__row"},j={class:"value"},q={class:"debug-result-tabs__row"},Y={class:"value"},J={key:0,class:"debug-result-tabs__row is-error"},Q={class:"value"},W={class:"debug-result-tabs__mock-hint","data-test":"mock-banner"},X={class:"debug-result-tabs__logs","data-test":"tab-logs"},Z=e.defineComponent({__name:"result-tabs",props:{result:{},component:{},isMock:{type:Boolean,default:!1},canRunNodeDebug:{type:Boolean,default:!1}},emits:["reEditMock","runReal","runMock","logsTabActive"],setup(c,{emit:g}){const t=c,s=g,r=e.ref("execution");e.watch(r,f=>s("logsTabActive",f==="logs"),{immediate:!0});const m={not_run:"未调试",running:"正在调试",finished:"成功",failed:"失败",suspended:"挂起",skipped:"跳过",revoked:"已终止"},_=e.computed(()=>m[t.result.execution.status]??t.result.execution.status),p=e.computed(()=>d.formatSummaryDuration(t.result.execution.durationMs)),k=e.computed(()=>U(t.result.error||t.result.execution.errorDetail)),w=e.computed(()=>t.result.execution.status==="revoked"),V=e.computed(()=>d.isDebugAbnormalStatus(t.result.execution.status)),C=e.computed(()=>w.value?"该节点调试已终止,可":"该节点执行失败,可"),{loading:x,error:y,visibleInputs:a,visibleOutputs:n,outputNameMap:v}=d.usePluginParamMeta({component:()=>t.component}),o=e.computed(()=>t.result.loading||x.value),b=e.computed(()=>t.result.detailError||y.value),h=e.computed(()=>a.value.filter(({key:f})=>Object.prototype.hasOwnProperty.call(t.result.inputs,f)).map(({key:f,name:l})=>({key:f,name:l,value:t.result.inputs[f]}))),B=e.computed(()=>d.orderDebugRowsByDeclaredKeys(d.toDebugOutputValueRows(t.result.outputs,v.value),n.value.map(f=>f.key))),R=e.computed(()=>d.shouldShowMockReEditHint(t.isMock,n.value)),T=e.computed(()=>t.result.logs==null?"":d.normalizeLogText(t.result.logs));return(f,l)=>{const i=e.resolveComponent("bk-button"),u=e.resolveComponent("bk-tab-panel"),S=e.resolveComponent("bk-tab");return e.openBlock(),e.createElementBlock("div",O,[e.createVNode(S,{active:r.value,"onUpdate:active":l[3]||(l[3]=E=>r.value=E),type:"card-grid"},e.createSlots({default:e.withCtx(()=>[e.createVNode(u,{name:"execution",label:"执行信息"},{default:e.withCtx(()=>[e.createElementVNode("div",G,[e.createElementVNode("div",K,[l[8]||(l[8]=e.createElementVNode("span",{class:"label"},"执行状态",-1)),e.createElementVNode("span",j,e.toDisplayString(_.value),1)]),e.createElementVNode("div",q,[l[9]||(l[9]=e.createElementVNode("span",{class:"label"},"调试用时",-1)),e.createElementVNode("span",Y,e.toDisplayString(p.value),1)]),k.value?(e.openBlock(),e.createElementBlock("div",J,[l[10]||(l[10]=e.createElementVNode("span",{class:"label"},"错误信息",-1)),e.createElementVNode("span",Q,e.toDisplayString(k.value),1)])):e.createCommentVNode("",!0)])]),_:1}),e.createVNode(u,{name:"inputs",label:"输入参数"},{default:e.withCtx(()=>[e.createVNode(d.DebugValueTable,{rows:h.value,loading:o.value,error:b.value,"empty-text":"暂无输入参数"},null,8,["rows","loading","error"])]),_:1}),e.createVNode(u,{name:"outputs",label:"输出结果"},{default:e.withCtx(()=>[e.createVNode(d.DebugValueTable,{rows:B.value,loading:o.value,error:b.value,"empty-text":"暂无输出结果"},e.createSlots({_:2},[R.value?{name:"toolbar",fn:e.withCtx(()=>[e.createElementVNode("div",W,[l[12]||(l[12]=e.createElementVNode("i",{class:"bkflow-canvas-icon bkflow-canvas-info debug-result-tabs__mock-info","aria-hidden":"true"},null,-1)),l[13]||(l[13]=e.createElementVNode("span",null,"当前为 Mock 数据",-1)),e.createVNode(i,{text:"",theme:"primary",size:"small","data-test":"re-edit-mock",onClick:l[2]||(l[2]=E=>s("reEditMock"))},{default:e.withCtx(()=>[...l[11]||(l[11]=[e.createTextVNode(" 重新编辑 ",-1)])]),_:1})])]),key:"0"}:void 0]),1032,["rows","loading","error"])]),_:1}),e.createVNode(u,{name:"logs",label:"调用日志"},{default:e.withCtx(()=>[e.createElementVNode("div",X,[e.createVNode(d.CallLogsViewer,{"log-text":T.value,loading:t.result.logLoading,error:t.result.logError},null,8,["log-text","loading","error"])])]),_:1})]),_:2},[V.value&&t.canRunNodeDebug?{name:"setting",fn:e.withCtx(()=>[e.createElementVNode("div",F,[l[6]||(l[6]=e.createElementVNode("i",{class:"bkflow-canvas-icon bkflow-canvas-alert"},null,-1)),e.createElementVNode("span",null,e.toDisplayString(C.value),1),e.createVNode(i,{text:"",theme:"primary","data-test":"rerun-real",onClick:l[0]||(l[0]=E=>s("runReal"))},{default:e.withCtx(()=>[...l[4]||(l[4]=[e.createTextVNode("重新调试",-1)])]),_:1}),l[7]||(l[7]=e.createElementVNode("span",null,"或直接",-1)),e.createVNode(i,{text:"",theme:"primary","data-test":"run-mock",onClick:l[1]||(l[1]=E=>s("runMock"))},{default:e.withCtx(()=>[...l[5]||(l[5]=[e.createTextVNode("Mock 输出",-1)])]),_:1})])]),key:"0"}:void 0]),1032,["active"])])}}}),ee=d._export_sfc(Z,[["__scopeId","data-v-2a925689"]]),te={class:"debug-result-drawer__header"},oe={class:"debug-result-drawer__header-left"},le={class:"debug-result-drawer__body"},se={class:"debug-result-drawer__content"},ne={class:"debug-result-drawer__result"},ae={key:1,class:"debug-result-drawer__unselected","data-test":"node-unselected"},N=44,$=420,ue=e.defineComponent({__name:"index",props:{open:{type:Boolean},context:{},pipelineTree:{},mockNodeIds:{},modelValue:{default:""},result:{},hasGlobalRun:{type:Boolean,default:!1},viewParamsPending:{type:Boolean,default:!1},offsetLeft:{default:0}},emits:["update:open","update:modelValue","reEditMock","runReal","runMock","viewParams","logsTabActive"],setup(c,{emit:g}){const t=c,s=g,r=e.ref($),m=e.ref(!1);let _=0,p=0,k="",w="";const V=e.computed(()=>({left:`${t.offsetLeft}px`,height:`${t.open?r.value:N}px`})),C=()=>{t.open||(r.value=$),s("update:open",!t.open)},x=i=>{const u=i>N;u!==t.open&&s("update:open",u)},y=i=>{const u=p-(i.clientY-_);r.value=Math.max(N,Math.min(window.innerHeight*.8,u)),x(r.value)},a=()=>{document.removeEventListener("mousemove",y),document.removeEventListener("mouseup",a),document.body.style.cursor=k,document.body.style.userSelect=w,m.value=!1,r.value<=N&&(r.value=$,s("update:open",!1))},n=i=>{i.preventDefault(),m.value=!0,_=i.clientY,t.open?p=r.value:(s("update:open",!0),r.value=N,p=N),k=document.body.style.cursor,w=document.body.style.userSelect,document.body.style.cursor="ns-resize",document.body.style.userSelect="none",document.addEventListener("mousemove",y),document.addEventListener("mouseup",a)};e.onBeforeUnmount(a);const v=e.computed({get:()=>t.modelValue,set:i=>s("update:modelValue",i)});e.watch(()=>t.modelValue,i=>{i||s("logsTabActive",!1)},{immediate:!0});const o=e.computed(()=>d.buildDebugResultNodeItems(t.pipelineTree,t.context?.nodes,t.mockNodeIds)),b=e.computed(()=>t.mockNodeIds.has(t.modelValue)),h=e.computed(()=>t.pipelineTree?.activities?.[t.modelValue]?.component),B=e.computed(()=>{const i=o.value.find(u=>u.id===t.modelValue);return i?.type==="ServiceActivity"&&i.isConfigured}),R=()=>{!t.hasGlobalRun||t.viewParamsPending||s("viewParams")},T=()=>{t.modelValue&&s("reEditMock",t.modelValue)},f=()=>{t.modelValue&&s("runReal",t.modelValue)},l=()=>{t.modelValue&&s("runMock",t.modelValue)};return(i,u)=>{const S=e.resolveComponent("bk-button"),E=e.resolveDirective("bk-tooltips");return e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["debug-result-drawer-wrapper",{"is-resizing":m.value}]),style:e.normalizeStyle(V.value)},[e.createElementVNode("div",{class:"debug-result-drawer__resize",onMousedown:n},null,32),e.createElementVNode("section",{class:e.normalizeClass(["debug-result-drawer",{"is-collapsed":!t.open}])},[e.createElementVNode("header",te,[e.createElementVNode("div",oe,[u[3]||(u[3]=e.createElementVNode("span",{class:"debug-result-drawer__title"},"调试结果",-1)),u[4]||(u[4]=e.createElementVNode("span",{class:"debug-result-drawer__divider"},null,-1)),e.withDirectives((e.openBlock(),e.createBlock(S,{text:"",theme:"primary",disabled:!t.hasGlobalRun,loading:t.viewParamsPending,onClick:R},{default:e.withCtx(()=>[...u[2]||(u[2]=[e.createElementVNode("i",{class:"bkflow-canvas-icon bkflow-canvas-audit view-params-icon"},null,-1),e.createTextVNode(" 查看参数 ",-1)])]),_:1},8,["disabled","loading"])),[[E,{content:"请先进行调试",disabled:t.hasGlobalRun}]])]),e.createElementVNode("span",{class:"debug-result-drawer__collapse",onClick:C},[e.createElementVNode("span",null,e.toDisplayString(t.open?"收起":"展开"),1),e.createElementVNode("i",{class:e.normalizeClass(["bkflow-canvas-icon bkflow-canvas-arrows-down debug-result-drawer__collapse-icon",{"is-expanded":t.open}])},null,2)])]),e.createElementVNode("div",le,[e.createElementVNode("div",se,[e.createVNode(H,{modelValue:v.value,"onUpdate:modelValue":u[0]||(u[0]=M=>v.value=M),nodes:o.value},null,8,["modelValue","nodes"]),e.createElementVNode("div",ne,[t.modelValue?(e.openBlock(),e.createBlock(ee,{key:0,result:t.result,component:h.value,"is-mock":b.value,"can-run-node-debug":B.value,onReEditMock:T,onRunReal:f,onRunMock:l,onLogsTabActive:u[1]||(u[1]=M=>s("logsTabActive",M))},null,8,["result","component","is-mock","can-run-node-debug"])):(e.openBlock(),e.createElementBlock("div",ae," 请先选择节点查看调试详情 "))])])])],2)],6)}}}),re=d._export_sfc(ue,[["__scopeId","data-v-84a5277a"]]);exports.default=re;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("vue"),d=require("./index-DuddWhYg.cjs"),L={class:"debug-result-node-list"},D=["data-node-id","aria-selected","onClick","onKeydown"],z=["title"],A={key:0,class:"debug-result-node-list__mock","data-test":"node-mock-flag"},P={key:1,class:"debug-result-node-list__empty"},I=e.defineComponent({__name:"node-list",props:{nodes:{},modelValue:{default:""}},emits:["update:modelValue"],setup(c,{emit:g}){const t=c,s=g,r=e.ref(""),m=e.ref("all"),_=e.ref(null),p={not_run:"未执行",finished:"成功",failed:"失败",running:"正在调试",suspended:"挂起",skipped:"跳过",revoked:"终止"},k=[{value:"all",label:"全部"},{value:"finished",icon:"bkflow-canvas-dark-circle-checkbox",iconColor:"#5fb8ac",tooltip:p.finished},{value:"failed",icon:"bkflow-canvas-dark-circle-close",iconColor:"#fa4e41",tooltip:p.failed},{value:"revoked",icon:"bkflow-canvas-stop-fill",iconColor:"#fa4e41",tooltip:p.revoked},{value:"running",iconComponent:d.LoadingStatusIcon,iconColor:"#3a84ff",tooltip:p.running},{value:"not_run",icon:"bkflow-canvas-weizhixing2",iconColor:"#b8bbc4",tooltip:p.not_run},{value:"suspended",icon:"bkflow-canvas-zanting",iconColor:"#f59500",tooltip:p.suspended},{value:"skipped",icon:"bkflow-canvas-tiaoguo2",iconColor:"#6e89af",tooltip:p.skipped}],w=e.computed(()=>k.map(a=>({...a,count:a.value==="all"?t.nodes.length:t.nodes.filter(n=>n.status===a.value).length}))),V=e.computed(()=>{const a=r.value.trim().toLowerCase();return t.nodes.filter(n=>m.value!=="all"&&n.status!==m.value?!1:a?n.name.toLowerCase().includes(a)||n.type.toLowerCase().includes(a)||(n.typeName??"").toLowerCase().includes(a):!0)}),C=e.computed(()=>r.value.trim()?"搜索结果为空":m.value!=="all"?`暂无${p[m.value]}状态节点`:"暂无节点"),x=()=>{r.value="",m.value="all"},y=a=>{const n=_.value,v=n?.querySelector(`[data-node-id="${CSS.escape(a)}"]`);if(!n||!v)return;const o=n.getBoundingClientRect(),b=v.getBoundingClientRect();b.top<o.top?n.scrollTop-=o.top-b.top:b.bottom>o.bottom&&(n.scrollTop+=b.bottom-o.bottom)};return e.watch(()=>t.modelValue,async a=>{if(!a)return;!V.value.some(v=>v.id===a)&&t.nodes.some(v=>v.id===a)&&(r.value="",m.value="all"),await e.nextTick(),y(a)},{flush:"post"}),(a,n)=>{const v=e.resolveComponent("bk-input");return e.openBlock(),e.createElementBlock("aside",L,[e.createVNode(v,{modelValue:r.value,"onUpdate:modelValue":n[0]||(n[0]=o=>r.value=o),class:"debug-result-node-list__search",placeholder:"搜索节点名称 / 类型",type:"search",clearable:"","data-test":"node-search"},null,8,["modelValue"]),e.createVNode(d.SegmentTabs,{modelValue:m.value,"onUpdate:modelValue":n[1]||(n[1]=o=>m.value=o),class:"debug-result-node-list__filters","data-test":"status-filters",items:w.value},null,8,["modelValue","items"]),V.value.length>0?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"itemsRef",ref:_,class:"debug-result-node-list__items",role:"listbox"},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(V.value,o=>(e.openBlock(),e.createElementBlock("div",{key:o.id,class:e.normalizeClass(["debug-result-node-list__item",`is-${o.status}`,{"is-active":o.id===t.modelValue,"is-unconfigured":!o.isConfigured}]),role:"option","data-test":"node-item","data-node-id":o.id,"aria-selected":o.id===t.modelValue,tabindex:"0",onClick:b=>s("update:modelValue",o.id),onKeydown:e.withKeys(e.withModifiers(b=>s("update:modelValue",o.id),["prevent"]),["enter","space"])},[e.createElementVNode("span",{class:e.normalizeClass(["debug-result-node-list__status",`is-${o.status}`,{"is-placeholder":!o.isConfigured}])},[o.icon?(e.openBlock(),e.createElementBlock("i",{key:0,class:e.normalizeClass(o.icon),"data-test":"node-icon"},null,2)):e.createCommentVNode("",!0)],2),e.createElementVNode("span",{class:"debug-result-node-list__name",title:o.isConfigured?`${o.name} ${o.typeName||o.type}`:o.name},e.toDisplayString(o.name),9,z),o.isMock?(e.openBlock(),e.createElementBlock("span",A,"MOCK")):e.createCommentVNode("",!0)],42,D))),128))],512)):(e.openBlock(),e.createElementBlock("div",P,[e.createVNode(d.EmptyException,{"is-search":!1,title:C.value,onClear:x},null,8,["title"])]))])}}}),H=d._export_sfc(I,[["__scopeId","data-v-db0cb31c"]]);function U(c){if(c==null)return"";if(typeof c=="string")return c;if(typeof c=="object"){const g=c,t=g.message;if(typeof t=="string"&&t){const s=g.type;return typeof s=="string"&&s?`${s}: ${t}`:t}try{return JSON.stringify(c)}catch{return String(c)}}return String(c)}const O={class:"debug-result-tabs"},F={class:"debug-result-tabs__failed-actions","data-test":"output-error-actions"},G={class:"debug-result-tabs__execution","data-test":"tab-execution"},K={class:"debug-result-tabs__row"},j={class:"value"},q={class:"debug-result-tabs__row"},Y={class:"value"},J={key:0,class:"debug-result-tabs__row is-error"},Q={class:"value"},W={class:"debug-result-tabs__mock-hint","data-test":"mock-banner"},X={class:"debug-result-tabs__logs","data-test":"tab-logs"},Z=e.defineComponent({__name:"result-tabs",props:{result:{},component:{},isMock:{type:Boolean,default:!1},canRunNodeDebug:{type:Boolean,default:!1}},emits:["reEditMock","runReal","runMock","logsTabActive"],setup(c,{emit:g}){const t=c,s=g,r=e.ref("execution");e.watch(r,f=>s("logsTabActive",f==="logs"),{immediate:!0});const m={not_run:"未调试",running:"正在调试",finished:"成功",failed:"失败",suspended:"挂起",skipped:"跳过",revoked:"已终止"},_=e.computed(()=>m[t.result.execution.status]??t.result.execution.status),p=e.computed(()=>d.formatSummaryDuration(t.result.execution.durationMs)),k=e.computed(()=>U(t.result.error||t.result.execution.errorDetail)),w=e.computed(()=>t.result.execution.status==="revoked"),V=e.computed(()=>d.isDebugAbnormalStatus(t.result.execution.status)),C=e.computed(()=>w.value?"该节点调试已终止,可":"该节点执行失败,可"),{loading:x,error:y,visibleInputs:a,visibleOutputs:n,outputNameMap:v}=d.usePluginParamMeta({component:()=>t.component}),o=e.computed(()=>t.result.loading||x.value),b=e.computed(()=>t.result.detailError||y.value),h=e.computed(()=>a.value.filter(({key:f})=>Object.prototype.hasOwnProperty.call(t.result.inputs,f)).map(({key:f,name:l})=>({key:f,name:l,value:t.result.inputs[f]}))),B=e.computed(()=>d.orderDebugRowsByDeclaredKeys(d.toDebugOutputValueRows(t.result.outputs,v.value),n.value.map(f=>f.key))),R=e.computed(()=>d.shouldShowMockReEditHint(t.isMock,n.value)),T=e.computed(()=>t.result.logs==null?"":d.normalizeLogText(t.result.logs));return(f,l)=>{const i=e.resolveComponent("bk-button"),u=e.resolveComponent("bk-tab-panel"),S=e.resolveComponent("bk-tab");return e.openBlock(),e.createElementBlock("div",O,[e.createVNode(S,{active:r.value,"onUpdate:active":l[3]||(l[3]=E=>r.value=E),type:"card-grid"},e.createSlots({default:e.withCtx(()=>[e.createVNode(u,{name:"execution",label:"执行信息"},{default:e.withCtx(()=>[e.createElementVNode("div",G,[e.createElementVNode("div",K,[l[8]||(l[8]=e.createElementVNode("span",{class:"label"},"执行状态",-1)),e.createElementVNode("span",j,e.toDisplayString(_.value),1)]),e.createElementVNode("div",q,[l[9]||(l[9]=e.createElementVNode("span",{class:"label"},"调试用时",-1)),e.createElementVNode("span",Y,e.toDisplayString(p.value),1)]),k.value?(e.openBlock(),e.createElementBlock("div",J,[l[10]||(l[10]=e.createElementVNode("span",{class:"label"},"错误信息",-1)),e.createElementVNode("span",Q,e.toDisplayString(k.value),1)])):e.createCommentVNode("",!0)])]),_:1}),e.createVNode(u,{name:"inputs",label:"输入参数"},{default:e.withCtx(()=>[e.createVNode(d.DebugValueTable,{rows:h.value,loading:o.value,error:b.value,"empty-text":"暂无输入参数"},null,8,["rows","loading","error"])]),_:1}),e.createVNode(u,{name:"outputs",label:"输出结果"},{default:e.withCtx(()=>[e.createVNode(d.DebugValueTable,{rows:B.value,loading:o.value,error:b.value,"empty-text":"暂无输出结果"},e.createSlots({_:2},[R.value?{name:"toolbar",fn:e.withCtx(()=>[e.createElementVNode("div",W,[l[12]||(l[12]=e.createElementVNode("i",{class:"bkflow-canvas-icon bkflow-canvas-info debug-result-tabs__mock-info","aria-hidden":"true"},null,-1)),l[13]||(l[13]=e.createElementVNode("span",null,"当前为 Mock 数据",-1)),e.createVNode(i,{text:"",theme:"primary",size:"small","data-test":"re-edit-mock",onClick:l[2]||(l[2]=E=>s("reEditMock"))},{default:e.withCtx(()=>[...l[11]||(l[11]=[e.createTextVNode(" 重新编辑 ",-1)])]),_:1})])]),key:"0"}:void 0]),1032,["rows","loading","error"])]),_:1}),e.createVNode(u,{name:"logs",label:"调用日志"},{default:e.withCtx(()=>[e.createElementVNode("div",X,[e.createVNode(d.CallLogsViewer,{"log-text":T.value,loading:t.result.logLoading,error:t.result.logError},null,8,["log-text","loading","error"])])]),_:1})]),_:2},[V.value&&t.canRunNodeDebug?{name:"setting",fn:e.withCtx(()=>[e.createElementVNode("div",F,[l[6]||(l[6]=e.createElementVNode("i",{class:"bkflow-canvas-icon bkflow-canvas-alert"},null,-1)),e.createElementVNode("span",null,e.toDisplayString(C.value),1),e.createVNode(i,{text:"",theme:"primary","data-test":"rerun-real",onClick:l[0]||(l[0]=E=>s("runReal"))},{default:e.withCtx(()=>[...l[4]||(l[4]=[e.createTextVNode("重新调试",-1)])]),_:1}),l[7]||(l[7]=e.createElementVNode("span",null,"或直接",-1)),e.createVNode(i,{text:"",theme:"primary","data-test":"run-mock",onClick:l[1]||(l[1]=E=>s("runMock"))},{default:e.withCtx(()=>[...l[5]||(l[5]=[e.createTextVNode("Mock 输出",-1)])]),_:1})])]),key:"0"}:void 0]),1032,["active"])])}}}),ee=d._export_sfc(Z,[["__scopeId","data-v-2a925689"]]),te={class:"debug-result-drawer__header"},oe={class:"debug-result-drawer__header-left"},le={class:"debug-result-drawer__body"},se={class:"debug-result-drawer__content"},ne={class:"debug-result-drawer__result"},ae={key:1,class:"debug-result-drawer__unselected","data-test":"node-unselected"},N=44,$=420,ue=e.defineComponent({__name:"index",props:{open:{type:Boolean},context:{},pipelineTree:{},mockNodeIds:{},modelValue:{default:""},result:{},hasGlobalRun:{type:Boolean,default:!1},viewParamsPending:{type:Boolean,default:!1},offsetLeft:{default:0}},emits:["update:open","update:modelValue","reEditMock","runReal","runMock","viewParams","logsTabActive"],setup(c,{emit:g}){const t=c,s=g,r=e.ref($),m=e.ref(!1);let _=0,p=0,k="",w="";const V=e.computed(()=>({left:`${t.offsetLeft}px`,height:`${t.open?r.value:N}px`})),C=()=>{t.open||(r.value=$),s("update:open",!t.open)},x=i=>{const u=i>N;u!==t.open&&s("update:open",u)},y=i=>{const u=p-(i.clientY-_);r.value=Math.max(N,Math.min(window.innerHeight*.8,u)),x(r.value)},a=()=>{document.removeEventListener("mousemove",y),document.removeEventListener("mouseup",a),document.body.style.cursor=k,document.body.style.userSelect=w,m.value=!1,r.value<=N&&(r.value=$,s("update:open",!1))},n=i=>{i.preventDefault(),m.value=!0,_=i.clientY,t.open?p=r.value:(s("update:open",!0),r.value=N,p=N),k=document.body.style.cursor,w=document.body.style.userSelect,document.body.style.cursor="ns-resize",document.body.style.userSelect="none",document.addEventListener("mousemove",y),document.addEventListener("mouseup",a)};e.onBeforeUnmount(a);const v=e.computed({get:()=>t.modelValue,set:i=>s("update:modelValue",i)});e.watch(()=>t.modelValue,i=>{i||s("logsTabActive",!1)},{immediate:!0});const o=e.computed(()=>d.buildDebugResultNodeItems(t.pipelineTree,t.context?.nodes,t.mockNodeIds)),b=e.computed(()=>t.mockNodeIds.has(t.modelValue)),h=e.computed(()=>d.getActivityComponent(t.pipelineTree?.activities?.[t.modelValue])),B=e.computed(()=>{const i=o.value.find(u=>u.id===t.modelValue);return i?.type==="ServiceActivity"&&i.isConfigured}),R=()=>{!t.hasGlobalRun||t.viewParamsPending||s("viewParams")},T=()=>{t.modelValue&&s("reEditMock",t.modelValue)},f=()=>{t.modelValue&&s("runReal",t.modelValue)},l=()=>{t.modelValue&&s("runMock",t.modelValue)};return(i,u)=>{const S=e.resolveComponent("bk-button"),E=e.resolveDirective("bk-tooltips");return e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["debug-result-drawer-wrapper",{"is-resizing":m.value}]),style:e.normalizeStyle(V.value)},[e.createElementVNode("div",{class:"debug-result-drawer__resize",onMousedown:n},null,32),e.createElementVNode("section",{class:e.normalizeClass(["debug-result-drawer",{"is-collapsed":!t.open}])},[e.createElementVNode("header",te,[e.createElementVNode("div",oe,[u[3]||(u[3]=e.createElementVNode("span",{class:"debug-result-drawer__title"},"调试结果",-1)),u[4]||(u[4]=e.createElementVNode("span",{class:"debug-result-drawer__divider"},null,-1)),e.withDirectives((e.openBlock(),e.createBlock(S,{text:"",theme:"primary",disabled:!t.hasGlobalRun,loading:t.viewParamsPending,onClick:R},{default:e.withCtx(()=>[...u[2]||(u[2]=[e.createElementVNode("i",{class:"bkflow-canvas-icon bkflow-canvas-audit view-params-icon"},null,-1),e.createTextVNode(" 查看参数 ",-1)])]),_:1},8,["disabled","loading"])),[[E,{content:"请先进行调试",disabled:t.hasGlobalRun}]])]),e.createElementVNode("span",{class:"debug-result-drawer__collapse",onClick:C},[e.createElementVNode("span",null,e.toDisplayString(t.open?"收起":"展开"),1),e.createElementVNode("i",{class:e.normalizeClass(["bkflow-canvas-icon bkflow-canvas-arrows-down debug-result-drawer__collapse-icon",{"is-expanded":t.open}])},null,2)])]),e.createElementVNode("div",le,[e.createElementVNode("div",se,[e.createVNode(H,{modelValue:v.value,"onUpdate:modelValue":u[0]||(u[0]=M=>v.value=M),nodes:o.value},null,8,["modelValue","nodes"]),e.createElementVNode("div",ne,[t.modelValue?(e.openBlock(),e.createBlock(ee,{key:0,result:t.result,component:h.value,"is-mock":b.value,"can-run-node-debug":B.value,onReEditMock:T,onRunReal:f,onRunMock:l,onLogsTabActive:u[1]||(u[1]=M=>s("logsTabActive",M))},null,8,["result","component","is-mock","can-run-node-debug"])):(e.openBlock(),e.createElementBlock("div",ae," 请先选择节点查看调试详情 "))])])])],2)],6)}}}),re=d._export_sfc(ue,[["__scopeId","data-v-1d34ca9a"]]);exports.default=re;
package/dist/index.cjs.js CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("./index-BUBxGOMp.cjs"),o=require("./context-B9wWQx6k.cjs");exports.BkFlowCanvas=e.BkFlowCanvas;exports.BkFlowModelAccessor=e.BkFlowModelAccessor;exports.BkFlowNodeAccessor=e.BkFlowNodeAccessor;exports.FlowCreateTask=e.FlowCreateTask;exports.FlowDebug=e.FlowDebug;exports.FlowDetail=e.index;exports.FlowEdit=e.edit;exports.FlowExecute=e.execute;exports.FlowMockDebug=e.mock;exports.FlowView=e.view;exports.bkflowConnectionValidator=e.bkflowConnectionValidator;exports.createBkflowPlugin=e.createBkflowPlugin;exports.createBkflowSchema=e.createBkflowSchema;exports.createExecutionStatusPlugin=e.createExecutionStatusPlugin;exports.default=e.index$1;exports.exportToPipelineTree=e.exportToPipelineTree;exports.getUniformApiPluginFormValue=e.getUniformApiPluginFormValue;exports.getVariableDefaultConfig=e.getVariableDefaultConfig;exports.importFromPipelineTree=e.importFromPipelineTree;exports.isMockableNode=e.isMockableNode;exports.mergeOutputs=e.mergeOutputs;exports.normalizePluginOutputItems=e.normalizePluginOutputItems;exports.provideFilterVariableConfig=e.provideFilterVariableConfig;exports.provideFlowApiConfig=e.provideFlowApiConfig;exports.provideMemberSelectorConfig=e.provideMemberSelectorConfig;exports.provideSelectPanelConfig=e.provideSelectPanelConfig;exports.resolveExecutionActions=e.resolveExecutionActions;exports.resolveMockFormControl=e.resolveMockFormControl;exports.useFlowApiConfig=e.useFlowApiConfig;exports.useFlowEditApiConfig=e.useFlowEditApiConfig;exports.useFlowViewApiConfig=e.useFlowViewApiConfig;exports.useMemberSelectorConfig=e.useMemberSelectorConfig;exports.useSelectPanelConfig=e.useSelectPanelConfig;exports.validatePipelineTree=e.validatePipelineTree;exports.generateId=o.generateId;exports.random4=o.random4;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("./index-DuddWhYg.cjs"),o=require("./context-Bj442dps.cjs");exports.BkFlowCanvas=e.BkFlowCanvas;exports.BkFlowModelAccessor=e.BkFlowModelAccessor;exports.BkFlowNodeAccessor=e.BkFlowNodeAccessor;exports.FlowCreateTask=e.FlowCreateTask;exports.FlowDebug=e.FlowDebug;exports.FlowDetail=e.index;exports.FlowEdit=e.edit;exports.FlowExecute=e.execute;exports.FlowMockDebug=e.mock;exports.FlowView=e.view;exports.bkflowConnectionValidator=e.bkflowConnectionValidator;exports.createBkflowPlugin=e.createBkflowPlugin;exports.createBkflowSchema=e.createBkflowSchema;exports.createExecutionStatusPlugin=e.createExecutionStatusPlugin;exports.default=e.index$1;exports.exportToPipelineTree=e.exportToPipelineTree;exports.getUniformApiPluginFormValue=e.getUniformApiPluginFormValue;exports.getVariableDefaultConfig=e.getVariableDefaultConfig;exports.importFromPipelineTree=e.importFromPipelineTree;exports.isMockableNode=e.isMockableNode;exports.mergeOutputs=e.mergeOutputs;exports.normalizePluginOutputItems=e.normalizePluginOutputItems;exports.provideFilterVariableConfig=e.provideFilterVariableConfig;exports.provideFlowApiConfig=e.provideFlowApiConfig;exports.provideMemberSelectorConfig=e.provideMemberSelectorConfig;exports.provideSelectPanelConfig=e.provideSelectPanelConfig;exports.resolveExecutionActions=e.resolveExecutionActions;exports.resolveMockFormControl=e.resolveMockFormControl;exports.useFlowApiConfig=e.useFlowApiConfig;exports.useFlowEditApiConfig=e.useFlowEditApiConfig;exports.useFlowViewApiConfig=e.useFlowViewApiConfig;exports.useMemberSelectorConfig=e.useMemberSelectorConfig;exports.useSelectPanelConfig=e.useSelectPanelConfig;exports.validatePipelineTree=e.validatePipelineTree;exports.generateId=o.generateId;exports.random4=o.random4;
package/dist/index.d.ts CHANGED
@@ -124,7 +124,7 @@ type PortOrientation = 'Top' | 'Right' | 'Bottom' | 'Left';
124
124
 
125
125
  type GatewayType = 'ExclusiveGateway' | 'ParallelGateway' | 'ConditionalParallelGateway' | 'ConvergeGateway';
126
126
 
127
- type NodeType = StartEvent | EndEvent | Activity | Gateway;
127
+ type NodeType = StartEvent | EndEvent | Activity | SubProcessActivity | Gateway;
128
128
 
129
129
  interface PluginInputDataItem {
130
130
  value:
@@ -170,6 +170,8 @@ interface Activity {
170
170
  type: 'ServiceActivity';
171
171
  retryable: boolean;
172
172
  skippable: boolean;
173
+ /** 是否可选节点(执行时可选跳过)默认 true */
174
+ optional: boolean;
173
175
  auto_retry: {
174
176
  enable: boolean;
175
177
  interval: number;
@@ -187,12 +189,103 @@ interface Activity {
187
189
  skip?: boolean;
188
190
  /** 执行态:是否自动忽略错误 */
189
191
  error_ignored?: boolean;
190
- /** 执行态:循环执行次数 */
191
- loop?: number;
192
+ /** 执行态:循环执行次数(未执行时为 null,与 SubProcessActivity 同源于执行态接口) */
193
+ loop?: number | null;
192
194
  /** 执行态:生命周期阶段 */
193
195
  phase?: number;
194
196
  }
195
197
 
198
+ /**
199
+ * 循环执行配置(子流程 / 循环容器节点的 loop_config)
200
+ */
201
+ interface LoopConfig {
202
+ /** 是否启用循环执行 */
203
+ enable: boolean;
204
+ /** array_loop 按数组变量循环 / time_loop 固定循环次数 */
205
+ type: 'array_loop' | 'time_loop';
206
+ /** 固定循环次数(time_loop,默认 3,最大 100);array_loop 且数据来源含变量时为 null */
207
+ loop_times?: number | null;
208
+ /**
209
+ * 数组循环变量(array_loop):循环变量名 → 数据来源。
210
+ * 编辑态为 UI 数组 [{name, value}];保存输出为 key-value 对象(如 { '${loop_test1}': '1,2' })。
211
+ */
212
+ loop_params?: { name: string; value: string }[] | Record<string, string>;
213
+ /** 循环失败自动跳过(AS) */
214
+ fail_skip?: boolean;
215
+ /** 循环失败手动重试(MR) */
216
+ retryable?: boolean;
217
+ /** 循环失败手动跳过(MS) */
218
+ skippable?: boolean;
219
+ /** 循环输出变量outputs */
220
+ outputs_key?: string;
221
+ [key: string]: any;
222
+ }
223
+
224
+ /**
225
+ * 子流程(SubProcess)活动节点。
226
+ */
227
+ interface SubProcessActivity {
228
+ id: string;
229
+ name: string;
230
+ stage_name?: string;
231
+ incoming: string[];
232
+ outgoing: string;
233
+ type: 'SubProcess';
234
+ /** 被引用的模板 ID */
235
+ template_id: string | number;
236
+ /** 模板版本 */
237
+ version?: string;
238
+ /** 变量映射常量 */
239
+ constants?: Record<string, any>;
240
+ /** 是否始终使用最新版本 */
241
+ always_use_latest?: boolean;
242
+ /** 生效版本方案列表 */
243
+ scheme_id_list?: string[];
244
+ /** 模板来源 */
245
+ template_source?: string;
246
+ /** 是否自动忽略错误(AS) */
247
+ error_ignorable: boolean;
248
+ /** 是否可手动重试(MR) */
249
+ retryable: boolean;
250
+ /** 是否可手动跳过(MS) */
251
+ skippable: boolean;
252
+ /** 是否可选节点(执行时可选跳过)BKFlow 必填 */
253
+ optional: boolean;
254
+ /** 已勾选(关联全局变量)的 key 列表 */
255
+ hooked_constants?: string[];
256
+ /** 自动重试配置(AR) */
257
+ auto_retry: {
258
+ enable: boolean;
259
+ interval: number;
260
+ times: number;
261
+ };
262
+ /** 超时控制配置 */
263
+ timeout_config: {
264
+ enable: boolean;
265
+ seconds: number;
266
+ action: string;
267
+ };
268
+ /** 循环执行配置 */
269
+ loop_config?: LoopConfig;
270
+ /** 父级分组 ID(SubCanvas 循环容器嵌套场景),顶层节点为 null */
271
+ parent?: string | null;
272
+ /** 节点标签 */
273
+ labels?: string[];
274
+ status?: NodeExecutionStatus;
275
+ /** 执行态:循环执行次数(未执行时为 null) */
276
+ loop?: number | null;
277
+ /** 执行态:实际重试次数 */
278
+ retry?: number;
279
+ /** 执行态:是否被跳过 */
280
+ skip?: boolean;
281
+ /** 执行态:是否自动忽略错误 */
282
+ error_ignored?: boolean;
283
+ /** 执行态:生命周期阶段 */
284
+ phase?: number;
285
+ }
286
+
287
+ type ActivityUnion = Activity | SubProcessActivity;
288
+
196
289
  interface StartEvent {
197
290
  id: string;
198
291
  name: string;
@@ -249,6 +342,7 @@ interface Location {
249
342
  | 'startpoint'
250
343
  | 'endpoint'
251
344
  | 'tasknode'
345
+ | 'subflow'
252
346
  | 'branchgateway'
253
347
  | 'convergegateway'
254
348
  | 'parallelgateway'
@@ -303,7 +397,7 @@ interface Variable {
303
397
  }
304
398
 
305
399
  interface PipelineTree {
306
- activities: Record<string, Activity>;
400
+ activities: Record<string, ActivityUnion>;
307
401
  end_event: EndEvent;
308
402
  flows: Record<string, Flow>;
309
403
  gateways: Record<string, Gateway>;
@@ -421,6 +515,42 @@ interface UniformApiPluginInputsItem$1 {
421
515
  _slots?: Record<string, SlotFieldConfig | SlotArgConfig>;
422
516
  }
423
517
 
518
+ interface SubflowTemplateItem {
519
+ id: number | string;
520
+ name: string;
521
+ /** 模板版本(不传则默认使用最新版本) */
522
+ version?: string;
523
+ /** 展示用副文本(如更新时间 / 描述等,可选) */
524
+ description?: string;
525
+ /** 兼容接入方列表接口的扩展字段 */
526
+ [key: string]: any;
527
+ }
528
+ interface SubflowUpdateItem {
529
+ /** 子流程节点 ID(对应 pipeline_tree.activities 的 key) */
530
+ nodeId: string;
531
+ /** 该节点引用的子流程模板是否有新版本(true 时节点显示红点并计入提示条) */
532
+ expired: boolean;
533
+ /** 子流程模板名称(可选,仅作提示展示) */
534
+ templateName?: string;
535
+ /** 兼容接入方的扩展字段 */
536
+ [key: string]: any;
537
+ }
538
+ interface SubprocessInfoItem {
539
+ /** 子流程模板 ID */
540
+ subprocess_template_id: string | number;
541
+ /** 子流程节点 ID(对应 pipeline_tree.activities 的 key) */
542
+ subprocess_node_id: string;
543
+ /** 节点当前引用的子流程模板版本 */
544
+ version: string;
545
+ /** 是否总是使用最新版本 */
546
+ always_use_latest: boolean;
547
+ /** 引用的子流程模板是否有新版本 */
548
+ expired: boolean;
549
+ /** 子流程模板名称 */
550
+ subprocess_template_name?: string;
551
+ /** 兼容接入方的扩展字段 */
552
+ [key: string]: any;
553
+ }
424
554
  interface FlowTemplate {
425
555
  id: number;
426
556
  name: string;
@@ -430,6 +560,8 @@ interface FlowTemplate {
430
560
  extra_info: Record<string, any>;
431
561
  triggers: TriggerItem[];
432
562
  version: string;
563
+ /** 子流程更新信息(后端计算好 expired 状态,SDK 据此渲染红点/提示条) */
564
+ subprocess_info?: SubprocessInfoItem[];
433
565
  }
434
566
  interface FlowDetailByVersion {
435
567
  constants_not_referred: Record<string, Variable>;
@@ -1194,7 +1326,7 @@ interface FlowViewApiConfig {
1194
1326
  space_id: number;
1195
1327
  };
1196
1328
  fetchFlowDraftDetail?: (id: string) => Promise<FlowDraftDetail>;
1197
- fetchFlowDetailByVersion?: (id: string, version: string) => Promise<FlowDetailByVersion>;
1329
+ fetchFlowDetailByVersion?: (id: string, version?: string) => Promise<FlowDetailByVersion>;
1198
1330
  fetchVariableRef?: (params: {
1199
1331
  template_id: number;
1200
1332
  activities: Record<string, any>;
@@ -1248,6 +1380,10 @@ interface FlowEditApiConfig extends FlowViewApiConfig {
1248
1380
  saveFlow: (id: string, params: UpdateFlowParams) => Promise<void>;
1249
1381
  fetchBkFlowInnerPluginList: () => Promise<BkflowInnerPluginMetaItem[]>;
1250
1382
  fetchBkFlowInnerPluginDetail: (code: string, version: string) => Promise<BkflowInnerPluginMetaItem>;
1383
+ fetchSubprocessOutput: (params?: {
1384
+ code?: string;
1385
+ version?: string;
1386
+ }) => Promise<BkflowInnerPluginMetaItem>;
1251
1387
  fetchInnerVariableDetail: (code: string) => Promise<BkflowInnerPluginMetaItem>;
1252
1388
  fetchBkFlowThirdPartyPluginList: (tag: number) => Promise<{
1253
1389
  data: {
@@ -1268,6 +1404,20 @@ interface FlowEditApiConfig extends FlowViewApiConfig {
1268
1404
  fetchPluginGroupList: () => Promise<PluginGroupConfig[]>;
1269
1405
  fetchCategoryPlugins: (category: string) => Promise<PluginMetaItem[]>;
1270
1406
  fetchAllPluginGroups: () => Promise<GroupsPluginItem[]>;
1407
+ /**
1408
+ * 获取子流程模板列表
1409
+ */
1410
+ fetchSubflowTemplateList?: (params: {
1411
+ /** 每页条数 */
1412
+ limit: number;
1413
+ /** 偏移量 */
1414
+ offset: number;
1415
+ /** 名称模糊搜索*/
1416
+ keyword?: string;
1417
+ }) => Promise<{
1418
+ results: SubflowTemplateItem[];
1419
+ count: number;
1420
+ }>;
1271
1421
  enableThirdPlugin?: boolean;
1272
1422
  fetchPluginDetail?: (id: string) => Promise<UniformApiPluginDetail>;
1273
1423
  fetchApplyInstructionData?: (params: any) => Promise<any>;
@@ -1629,6 +1779,7 @@ type __VLS_Props$3 = {
1629
1779
  taskId: number | string;
1630
1780
  templateId: number | string;
1631
1781
  }) => void;
1782
+ onSubflowView?: (template: SubflowTemplateItem) => void;
1632
1783
  enableVersion?: boolean;
1633
1784
  flowVersion?: string;
1634
1785
  defaultZoom?: number;
@@ -1637,6 +1788,7 @@ type __VLS_Props$3 = {
1637
1788
  quickAdd?: QuickAddConfig;
1638
1789
  /** 是否隐藏基础信息中的触发器配置表单,默认 false */
1639
1790
  hideTrigger?: boolean;
1791
+ subflowUpdateList?: SubflowUpdateItem[];
1640
1792
  };
1641
1793
  declare const __VLS_base$3: vue.DefineComponent<__VLS_Props$3, {
1642
1794
  isFlowEdited: ComputedRef<FlowEditExpose["isFlowEdited"]>;
@@ -1657,6 +1809,7 @@ declare const __VLS_base$3: vue.DefineComponent<__VLS_Props$3, {
1657
1809
  exitEdit: () => any;
1658
1810
  debugBeforeClose: () => any;
1659
1811
  createVariable: (payload: CreateVariablePayload) => any;
1812
+ subflowView: (template: SubflowTemplateItem) => any;
1660
1813
  }, string, vue.PublicProps, Readonly<__VLS_Props$3> & Readonly<{
1661
1814
  onBack?: (() => any) | undefined;
1662
1815
  onSave?: ((flowData: FlowTemplate) => any) | undefined;
@@ -1668,6 +1821,7 @@ declare const __VLS_base$3: vue.DefineComponent<__VLS_Props$3, {
1668
1821
  onExitEdit?: (() => any) | undefined;
1669
1822
  onDebugBeforeClose?: (() => any) | undefined;
1670
1823
  onCreateVariable?: ((payload: CreateVariablePayload) => any) | undefined;
1824
+ onSubflowView?: ((template: SubflowTemplateItem) => any) | undefined;
1671
1825
  }>, {
1672
1826
  quickAdd: QuickAddConfig;
1673
1827
  enableThirdPlugin: boolean;
@@ -1745,6 +1899,7 @@ type __VLS_Props$2 = {
1745
1899
  }) => void;
1746
1900
  /** 是否隐藏基础信息中的触发器配置表单,默认 false */
1747
1901
  hideTrigger?: boolean;
1902
+ subflowUpdateList?: SubflowUpdateItem[];
1748
1903
  };
1749
1904
  declare const __VLS_base$2: vue.DefineComponent<__VLS_Props$2, {
1750
1905
  zoomToFit: (options?: ZoomToFitOptions) => void;
@@ -1986,6 +2141,13 @@ declare class BkFlowNodeAccessor {
1986
2141
  get convergeGatewayId(): string | undefined;
1987
2142
  get isGateway(): boolean;
1988
2143
  get isTask(): boolean;
2144
+ get templateId(): string | number | undefined;
2145
+ get subflowConstants(): Record<string, any> | undefined;
2146
+ get subflowVersion(): string | undefined;
2147
+ get alwaysUseLatest(): boolean | undefined;
2148
+ get schemeIdList(): string[] | undefined;
2149
+ get templateSource(): string | undefined;
2150
+ get isSubflow(): boolean;
1989
2151
  get nodeModel(): FlowNodeModel;
1990
2152
  }
1991
2153
  declare class BkFlowModelAccessor {
@@ -2018,6 +2180,15 @@ interface DebugCanvasContext {
2018
2180
  /** 调试锁定期(running/terminating);节点配置据此展示只读说明 Alert */
2019
2181
  isLocked?(): boolean;
2020
2182
  }
2183
+ interface SubflowUpdateCanvasContext {
2184
+ /** 节点是否引用了已过期的子流程模板(红点显隐) */
2185
+ isNodeExpired(nodeId: string): boolean;
2186
+ /**
2187
+ * 红点动画的重播序号(每次"查看需要更新的子流程"定位时递增)。
2188
+ * 节点用其作 :key 重挂载红点元素以重新触发 ripple 动画;未实现时返回 0(仅首轮动画)。
2189
+ */
2190
+ getDotEpoch?(nodeId: string): number;
2191
+ }
2021
2192
 
2022
2193
  type __VLS_Props = {
2023
2194
  pipelineTree: PipelineTree;
@@ -2031,6 +2202,7 @@ type __VLS_Props = {
2031
2202
  toolbarItems?: CanvasToolbarItem[];
2032
2203
  simulateDebugContext?: SimulateDebugCanvasContext;
2033
2204
  debugContext?: DebugCanvasContext;
2205
+ subflowUpdateContext?: SubflowUpdateCanvasContext;
2034
2206
  };
2035
2207
  declare var __VLS_8: {};
2036
2208
  declare var __VLS_22: {
package/dist/index.esm.js CHANGED
@@ -1,5 +1,5 @@
1
- import { v as o, w as s, x as i, F as l, y as r, z as t, A as n, G as u, H as g, I as c, J as w, K as F, N as f, O as p, P as m, Q as d, T as C, U as k, V as P, W as v, m as A, X as b, Y as x, Z as V, $ as M, a0 as S, a1 as T, r as B, u as E, a2 as D, a3 as I, a4 as N, a5 as O, a6 as z } from "./index-FsDBMpW4.js";
2
- import { g as h, r as y } from "./context-CVSZiSc9.js";
1
+ import { w as o, x as s, y as i, F as l, z as r, A as t, G as n, H as u, I as g, J as c, K as w, N as F, O as f, P as p, Q as m, T as d, U as C, V as k, W as P, X as A, m as b, Y as v, Z as x, $ as V, a0 as M, a1 as S, a2 as T, r as B, u as E, a3 as D, a4 as I, a5 as N, a6 as O, a7 as z } from "./index-Bij1hZGP.js";
2
+ import { g as h, r as y } from "./context-CdSU0w5S.js";
3
3
  export {
4
4
  o as BkFlowCanvas,
5
5
  s as BkFlowModelAccessor,
@@ -21,9 +21,9 @@ export {
21
21
  C as getUniformApiPluginFormValue,
22
22
  k as getVariableDefaultConfig,
23
23
  P as importFromPipelineTree,
24
- v as isMockableNode,
25
- A as mergeOutputs,
26
- b as normalizePluginOutputItems,
24
+ A as isMockableNode,
25
+ b as mergeOutputs,
26
+ v as normalizePluginOutputItems,
27
27
  x as provideFilterVariableConfig,
28
28
  V as provideFlowApiConfig,
29
29
  M as provideMemberSelectorConfig,