zentao-api 0.6.5 → 0.6.6
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.
- package/dist/browser/zentao-api.global.js +26 -18
- package/dist/client/index.d.ts +4 -1
- package/dist/client/index.js +194 -17
- package/dist/index.d.ts +1 -1
- package/dist/misc/environment.d.ts +0 -2
- package/dist/misc/environment.js +43 -19
- package/dist/misc/errors.d.ts +1 -0
- package/dist/misc/errors.js +1 -0
- package/dist/modules/generated.d.ts +2012 -59
- package/dist/modules/generated.js +1002 -50
- package/dist/modules/override.js +36 -66
- package/dist/modules/query.d.ts +0 -2
- package/dist/modules/query.js +5 -15
- package/dist/modules/registry.d.ts +0 -9702
- package/dist/modules/registry.js +0 -4
- package/dist/modules/resolve.js +1 -1
- package/dist/profiles/index.js +1 -4
- package/dist/request/index.d.ts +12 -4
- package/dist/request/index.js +2 -2
- package/dist/types/client.d.ts +3 -3
- package/dist/types/module.d.ts +6 -2
- package/dist/types/options.d.ts +1 -0
- package/dist/utils/doc-helper/index.d.ts +1 -2
- package/dist/utils/doc-helper/index.js +0 -1
- package/dist/utils/doc-helper/inline.d.ts +0 -1
- package/dist/utils/doc-helper/inline.js +3 -81
- package/dist/utils/doc-helper/shared.d.ts +0 -5
- package/dist/utils/doc-helper/shared.js +0 -34
- package/dist/utils/doc-helper/types.d.ts +1 -13
- package/dist/version.js +2 -2
- package/package.json +9 -8
- package/dist/utils/doc-helper/html.d.ts +0 -3
- package/dist/utils/doc-helper/html.js +0 -442
|
@@ -1,25 +1,33 @@
|
|
|
1
|
-
(()=>{var{defineProperty:UD,getOwnPropertyNames:uB,getOwnPropertyDescriptor:sB}=Object,nB=Object.prototype.hasOwnProperty;function tB(D){return this[D]}var lB=(D)=>{var B=(aD??=new WeakMap).get(D),W;if(B)return B;if(B=UD({},"__esModule",{value:!0}),D&&typeof D==="object"||typeof D==="function"){for(var Q of uB(D))if(!nB.call(B,Q))UD(B,Q,{get:tB.bind(D,Q),enumerable:!(W=sB(D,Q))||W.enumerable})}return aD.set(D,B),B},aD;var rB=(D)=>D;function aB(D,B){this[D]=rB.bind(null,B)}var oD=(D,B)=>{for(var W in B)UD(D,W,{get:B[W],enumerable:!0,configurable:!0,set:aB.bind(B,W)})};var zQ={};oD(zQ,{switchProfile:()=>WD,sortData:()=>a,setGlobalOptions:()=>n,searchData:()=>r,request:()=>gD,processData:()=>w,pickFieldsSingle:()=>m,pickFields:()=>l,getProfileKey:()=>M,getProfile:()=>fD,getObjectProps:()=>PD,getModuleNames:()=>RD,getModuleActionParams:()=>u,getModuleAction:()=>z,getModule:()=>k,getGlobalOptions:()=>T,getAllProfiles:()=>hD,filterData:()=>qD,extendModuleAction:()=>R,exportRegistry:()=>ZD,deleteProfile:()=>kD,defineModules:()=>OD,defineModuleActions:()=>jD,addProfile:()=>BD,ZentaoError:()=>C,ZentaoClient:()=>x,ZENTAO_PROFILES_STORAGE_KEY:()=>e,VERSION:()=>lD,ERRORS:()=>YD,BUILD:()=>tD});var FD={};oD(FD,{switchProfile:()=>WD,sortData:()=>a,setGlobalOptions:()=>n,searchData:()=>r,request:()=>gD,processData:()=>w,pickFieldsSingle:()=>m,pickFields:()=>l,getProfileKey:()=>M,getProfile:()=>fD,getObjectProps:()=>PD,getModuleNames:()=>RD,getModuleActionParams:()=>u,getModuleAction:()=>z,getModule:()=>k,getGlobalOptions:()=>T,getAllProfiles:()=>hD,filterData:()=>qD,extendModuleAction:()=>R,exportRegistry:()=>ZD,deleteProfile:()=>kD,defineModules:()=>OD,defineModuleActions:()=>jD,addProfile:()=>BD,ZentaoError:()=>C,ZentaoClient:()=>x,ZENTAO_PROFILES_STORAGE_KEY:()=>e,VERSION:()=>lD,ERRORS:()=>YD,BUILD:()=>tD});var YD={E_INVALID_BASE_URL:"Invalid ZenTao baseUrl.",E_NO_GLOBAL_CLIENT:"No global client configured. Call ZentaoClient.init() or pass options.client.",E_HTTP_ERROR:"HTTP request failed: {status} {statusText}",E_NETWORK_ERROR:"Network request failed: {message}",E_TIMEOUT:"Request timed out.",E_INSECURE_BROWSER:"The insecure option is only supported in Node.js runtimes.",E_LOGIN_FAILED:"ZenTao login failed.",E_INVALID_PROFILE:"Invalid ZenTao profile.",E_NO_PROFILE:"No ZenTao profile is configured.",E_PROFILE_NOT_FOUND:"ZenTao profile not found: {profileKey}",E_PROFILE_STORAGE_INVALID:"ZenTao profile storage is not valid JSON.",E_PROFILE_STORAGE_UNAVAILABLE:"ZenTao profile storage is unavailable in this runtime.",E_INVALID_MODULE:"Unknown module: {module}",E_INVALID_ACTION:"Unknown action: {module}-{action}",E_INVALID_MODULE_DEFINITION:"Invalid module definition.",E_INVALID_ACTION_DEFINITION:"Invalid module action definition.",E_INDETERMINATE_ACTION_METHOD:'Cannot infer HTTP method for action "{action}" from type "{type}"; specify "method" explicitly.',E_INDETERMINATE_ACTION_RESULT_TYPE:'Cannot infer result type for action "{action}" from type "{type}"; specify "resultType" explicitly.',E_MISSING_PARAM:"Missing required parameter: {param}",E_INVALID_PARAM:"Invalid value for parameter {param}: {value}",E_INVALID_REQUEST_NAME:'Request name must use the form "moduleName", "moduleName/methodName", or "moduleName/<objectID>".',E_API_FAILED:"ZenTao API returned failure: {message}",E_UPLOAD_PATH_UNSUPPORTED:"Local file paths are not supported in browser runtimes. Pass a File or Blob instead.",E_UPLOAD_FILE_NOT_FOUND:"Upload file not found: {path}",E_UPLOAD_FILE_READ_FAILED:"Failed to read upload file: {path}",E_UPLOAD_FILE_TOO_LARGE:"Upload file is {size} bytes and exceeds the {limit} byte limit.",E_INVALID_UPLOAD_SOURCE:"Invalid upload source for field: {field}"};class C extends Error{code;details;constructor(D,B,W){let Q=YD[D];if(B)for(let[$,X]of Object.entries(B))Q=Q.replaceAll(`{${$}}`,String(X));super(Q);this.name="ZentaoError",this.code=D,this.details=W}}function b(){return typeof process<"u"&&Boolean(process.versions?.node)}function eD(D){return import(D)}function oB(D){let B={};return new Headers(D).forEach((W,Q)=>{B[Q]=W}),B}function eB(D){let B=new Headers;for(let[W,Q]of Object.entries(D)){if(Q===void 0)continue;B.set(W,Array.isArray(Q)?Q.join(", "):String(Q))}return B}function ED(D,B){let W=B.toLowerCase();return Object.keys(D).some((Q)=>Q.toLowerCase()===W)}async function DW(D,B){if(D===void 0||D===null)return;if(typeof D==="string")return D;if(D instanceof Uint8Array)return D;if(D instanceof ArrayBuffer)return new Uint8Array(D);if(ArrayBuffer.isView(D))return new Uint8Array(D.buffer,D.byteOffset,D.byteLength);if(D instanceof Blob){if(D.type&&!ED(B,"content-type"))B["content-type"]=D.type;return new Uint8Array(await D.arrayBuffer())}if(typeof FormData<"u"&&D instanceof FormData){let W=new Request("https://zentao-api.local/",{method:"POST",body:D}),Q=W.headers.get("content-type");if(Q&&!ED(B,"content-type"))B["content-type"]=Q;return new Uint8Array(await W.arrayBuffer())}if(typeof URLSearchParams<"u"&&D instanceof URLSearchParams){if(!ED(B,"content-type"))B["content-type"]="application/x-www-form-urlencoded;charset=UTF-8";return D.toString()}return String(D)}function DB(){return new DOMException("The operation was aborted.","AbortError")}function BW(D){let B=D.reduce(($,X)=>$+X.byteLength,0),W=new Uint8Array(B),Q=0;for(let $ of D)W.set($,Q),Q+=$.byteLength;return W.buffer}async function WW(D,B,W){let Q=new URL(D),$=Q.protocol==="https:"?await eD("node:https"):await eD("node:http"),X=oB(B.headers),J=await DW(B.body,X);return new Promise((Y,G)=>{if(B.signal?.aborted){G(DB());return}let q=$.request(Q,{method:B.method??"GET",headers:X,rejectUnauthorized:W},(K)=>{let Z=[];K.on("data",(N)=>{Z.push(typeof N==="string"?new TextEncoder().encode(N):N)}),K.on("end",()=>{H();let N=Z.length>0?BW(Z):void 0,s=new Response(N,{status:K.statusCode??200,statusText:K.statusMessage??"",headers:eB(K.headers)});Object.defineProperty(s,"url",{value:D}),Y(s)})}),H=()=>{B.signal?.removeEventListener("abort",L)},L=()=>{H(),q.destroy(DB())};if(q.on("error",(K)=>{H(),G(K)}),B.signal?.addEventListener("abort",L,{once:!0}),J!==void 0)q.write(J);q.end()})}function MD(D){if(D&&!b())throw new C("E_INSECURE_BROWSER")}async function BB(D,B,W){if(!D)return fetch(B,W);return MD(D),WW(B,W,!1)}var zD={};function T(){return{...zD}}function n(D){zD={...zD,...D}}function j(D){return Boolean(D)&&typeof D==="object"&&!Array.isArray(D)}function v(D){return D===void 0||D===null||D===""}function _(D,B){let W=B.split("."),Q=D;for(let $ of W){if(Q===null||Q===void 0||typeof Q!=="object")return;Q=Q[$]}return Q}function y(D){return Array.isArray(D)?D:[D]}function d(D){let B=D.trim().replace(/\/+$/,"");if(!B)throw new C("E_INVALID_BASE_URL");let W=B.replace(/\/api\.php\/v2$/i,""),Q;try{Q=new URL(W)}catch{throw new C("E_INVALID_BASE_URL")}if(!["http:","https:"].includes(Q.protocol)||Q.search||Q.hash)throw new C("E_INVALID_BASE_URL");return Q.toString().replace(/\/+$/,"")}function m(D,B){let W={};for(let Q of B){let $=_(D,Q);if($===void 0)continue;let X=Q.split("."),J=W;for(let Y=0;Y<X.length-1;Y++){let G=X[Y];if(!j(J[G]))J[G]={};J=J[G]}J[X[X.length-1]]=$}return W}function l(D,B){return D.map((W)=>m(W,B))}function t(D,B){let W=Number(D),Q=Number(B);if(D!==""&&B!==""&&!Number.isNaN(W)&&!Number.isNaN(Q))return W-Q;return String(D).localeCompare(String(B))}function WB(D,B){let W=Number(D),Q=Number(B);if(D!==""&&B!==""&&!Number.isNaN(W)&&!Number.isNaN(Q))return W===Q;return String(D)===String(B)}function QB(D,B){if(D===void 0||D===null)return!1;let W=String(D).toLowerCase();return y(B).some((Q)=>W.includes(String(Q).toLowerCase()))}function $B(D,B){let W=_(D,B.key),{operator:Q,value:$}=B;switch(Q){case"=":return y($).some((X)=>WB(W,X));case"!=":return y($).every((X)=>!WB(W,X));case"~":return QB(W,$);case"!~":return!QB(W,$);case">":return t(W,$)>0;case"<":return t(W,$)<0;case">=":return t(W,$)>=0;case"<=":return t(W,$)<=0;default:return!1}}function XB(D,B){if(B.conditions.length===0)return!0;return B.operator==="OR"?B.conditions.some((W)=>$B(D,W)):B.conditions.every((W)=>$B(D,W))}function qD(D,B){if(B.length===0)return D.slice();return D.filter((W)=>B.every((Q)=>XB(W,Q)))}function ND(D){let B=[],W="",Q,$=0,X=!1;for(let J of D){if(X){W+=J,X=!1;continue}if(Q){if(W+=J,J==="\\")X=!0;else if(J===Q)Q=void 0;continue}if(J==='"'||J==="'"){Q=J,W+=J;continue}if(J==="[")$+=1;else if(J==="]"&&$>0)$-=1;if(J===","&&$===0)B.push(W.trim()),W="";else W+=J}return B.push(W.trim()),B.filter(Boolean)}function SD(D){let B=D.trim(),W=B[0];return B.length>=2&&(W==='"'||W==="'")&&B.at(-1)===W?B.slice(1,-1):B}function GD(D,B){if(D===null||D===void 0)return;if(Array.isArray(D))for(let W of D)GD(W,B);else if(j(D))for(let W of Object.values(D))GD(W,B);else B.push(String(D))}function QW(D,B){let W=[];if(B&&B.length>0)for(let Q of B)GD(_(D,Q),W);else GD(D,W);return W.join("\x00").toLowerCase()}function r(D,B,W){let Q=B.map(($)=>ND($).map((X)=>SD(X).toLowerCase()).filter(Boolean)).filter(($)=>$.length>0);if(Q.length===0)return D.slice();return D.filter(($)=>{let X=QW($,W);return Q.some((J)=>J.every((Y)=>X.includes(Y)))})}function $W(D){if(typeof D==="function")return D;let B=D.match(/^(.+):(asc|desc)$/i)??D.match(/^(.+)_(asc|desc)$/i),W=B?.[1]??D,$=(B?.[2].toLowerCase()??"asc")==="desc"?-1:1;return(X,J)=>t(_(X,W),_(J,W))*$}function a(D,B){let W=B.map($W);return D.slice().sort((Q,$)=>{for(let X of W){let J=X(Q,$);if(J!==0)return J}return 0})}var XW=[">=","<=","!=","!~","=","~",">","<",":"];function JW(D){let B=D.trim();if(B.startsWith("[")&&B.endsWith("]"))return ND(B.slice(1,-1)).map(SD).filter(Boolean);let W=SD(B);if(W==="true")return!0;if(W==="false")return!1;if(W!==""&&!Number.isNaN(Number(W)))return Number(W);return W}function YW(D){let B,W=0,Q=!1;for(let $=0;$<D.length;$+=1){let X=D[$];if(Q){Q=!1;continue}if(B){if(X==="\\")Q=!0;else if(X===B)B=void 0;continue}if(X==='"'||X==="'"){B=X;continue}if(X==="["){W+=1;continue}if(X==="]"&&W>0){W-=1;continue}if(W>0)continue;let J=XW.find((Y)=>D.startsWith(Y,$));if(J&&$>0)return{index:$,operator:J}}return}function GW(D){let B=YW(D);if(!B)return;let W=D.slice(0,B.index).trim();if(!W)return;return{key:W,operator:B.operator===":"?"=":B.operator,value:JW(D.slice(B.index+B.operator.length))}}function qW(D){let B=ND(D);if(B.length===0)return;let W=B.map(GW);if(W.some((Q)=>Q===void 0))return;return{operator:"AND",conditions:W}}function CW(D){if(D===void 0||D==="")return;let B=Number(D);if(!Number.isFinite(B)||B<0)return;return Math.floor(B)}function w(D,B){if(!Array.isArray(D)){let X=B,J=X.convert?X.convert(D):D;return X.pick?m(J,X.pick):{...J}}let W=B,Q=W.convert?W.convert(D):D;if(W.filter&&W.filter.length>0){let X=W.filter.map(qW).filter((J)=>J!==void 0);if(X.length>0)Q=Q.filter((J)=>X.some((Y)=>XB(J,Y)))}if(W.search&&W.search.length>0)Q=r(Q,W.search,W.searchFields);if(W.sort){let X=W.sort.split(",").map((J)=>J.trim()).filter(Boolean);if(X.length>0)Q=a(Q,X)}let $=CW(W.limit);if($!==void 0)Q=Q.slice(0,$);if(W.pick)Q=l(Q,W.pick);return Q}var e="ZENTAO_PROFILES",LW=[".config","zentao","zentao.json"];function GB(D){return Boolean(D)&&typeof D==="object"&&!Array.isArray(D)}function qB(D){if(D===void 0)return D;return JSON.parse(JSON.stringify(D))}function CB(){return new Date().toISOString()}function o(D){return import(D)}var JB=Promise.resolve();function TD(D){let B=JB.then(D,D);return JB=B.catch(()=>{return}),B}function LB(){try{return globalThis.localStorage}catch{return}}async function HB(){let D=await o("node:path"),B=process.env.HOME??process.env.USERPROFILE??(await o("node:os")).homedir();if(!B)throw new C("E_PROFILE_STORAGE_UNAVAILABLE");return D.join(B,...LW)}function HW(D,B){let W=D.trim(),Q=d(B);if(!W)throw new C("E_INVALID_PROFILE");return`${W}@${Q}`}function yD(D){if(!GB(D)||typeof D.server!=="string"||typeof D.account!=="string"||typeof D.token!=="string")throw new C("E_INVALID_PROFILE");let B=D.token.trim();if(!B)throw new C("E_INVALID_PROFILE");let W=qB(D);return delete W.key,{...W,server:d(D.server),account:D.account.trim(),token:B}}function KB(D){if(!GB(D))return{profiles:[]};let B=Array.isArray(D.profiles)?D.profiles.flatMap((Q)=>{try{return[yD(Q)]}catch{return[]}}):[],W=typeof D.currentProfile==="string"?D.currentProfile:void 0;return W?{currentProfile:W,profiles:B}:{profiles:B}}function YB(D){try{return KB(JSON.parse(D))}catch(B){throw new C("E_PROFILE_STORAGE_INVALID",void 0,B)}}async function DD(){if(b()){let W=await o("node:fs/promises"),Q=await HB();try{return YB(await W.readFile(Q,"utf8"))}catch($){if($.code==="ENOENT")return{profiles:[]};throw $}}let D=LB();if(!D)throw new C("E_PROFILE_STORAGE_UNAVAILABLE");let B=D.getItem(e);return B?YB(B):{profiles:[]}}async function wD(D){let B=KB(D),W=`${JSON.stringify(B,null,2)}
|
|
2
|
-
`;if(b()){let $=await o("node:fs/promises"),X=await o("node:path"),J=await HB(),Y=X.dirname(J),G=X.join(Y,`.zentao.${Date.now()}.${Math.random().toString(36).slice(2)}.tmp`);await $.mkdir(Y,{recursive:!0,mode:448}),await $.chmod(Y,448).catch(()=>{return});try{await $.writeFile(G,W,{encoding:"utf8",mode:384}),await $.rename(G,J),await $.chmod(J,384).catch(()=>{return})}catch(q){throw await $.rm(G,{force:!0}).catch(()=>{return}),q}return}let Q=LB();if(!Q)throw new C("E_PROFILE_STORAGE_UNAVAILABLE");Q.setItem(e,W)}function CD(D){let B=yD(D);return{...qB(B),key:M(B)}}function xD(D,B){return D.profiles.find((W)=>M(W)===B)}function KW(D){if(!D.currentProfile||!xD(D,D.currentProfile)){let B=D.profiles.at(-1);D.currentProfile=B?M(B):void 0}}function M(D){return HW(D.account,D.server)}async function hD(){return(await DD()).profiles.map(CD)}async function fD(D){let B=await DD(),W=D??B.currentProfile;if(!W)return;let Q=xD(B,W);return Q?CD(Q):void 0}function BD(D){return TD(async()=>{let B=await DD(),W=CB(),Q=yD({...D,loginTime:D.loginTime??W,lastUsedTime:D.lastUsedTime??W}),$=M(Q),X=B.profiles.findIndex((J)=>M(J)===$);if(X>=0)B.profiles[X]=Q;else B.profiles.push(Q);return B.currentProfile=$,await wD(B),CD(Q)})}function kD(D){return TD(async()=>{let B=await DD(),W=B.profiles.filter((Q)=>M(Q)!==D);if(W.length===B.profiles.length)return!1;return B.profiles=W,KW(B),await wD(B),!0})}function WD(D){return TD(async()=>{let B=await DD(),W=D??B.currentProfile;if(!W)throw new C("E_NO_PROFILE");let Q=xD(B,W);if(!Q)throw new C("E_PROFILE_NOT_FOUND",{profileKey:W});return Q.lastUsedTime=CB(),B.currentProfile=W,await wD(B),CD(Q)})}var OW=1e4;function jW(D,B,W){let Q=B.startsWith("/")?B:`/${B}`,$=new URL(`${D}${Q}`);for(let[X,J]of Object.entries(W??{})){if(J===void 0)continue;$.searchParams.set(X,String(J))}return $.toString()}function AW(D){if(!D||typeof D!=="object")return!1;let B=Object.getPrototypeOf(D);return B===Object.prototype||B===null}function LD(D,B){let W=globalThis[B];return typeof W==="function"&&D instanceof W}function IW(D){return D instanceof ArrayBuffer||ArrayBuffer.isView(D)}function OB(D,B,W){if(W===void 0)return;if(Array.isArray(W)){for(let Q of W)OB(D,B,Q);return}D.append(B,W===null?"":String(W))}function VW(D,B,W){if(D===void 0||D===null)return;if(B==="form"){let Q=D instanceof URLSearchParams?D:new URLSearchParams;if(!(D instanceof URLSearchParams)&&AW(D))for(let[$,X]of Object.entries(D))OB(Q,$,X);else if(!(D instanceof URLSearchParams))throw new C("E_INVALID_PARAM",{param:"body",value:String(D)});if(!W.has("Content-Type"))W.set("Content-Type","application/x-www-form-urlencoded;charset=UTF-8");return Q}if(B==="raw"||typeof D==="string"||IW(D)||LD(D,"FormData")||LD(D,"URLSearchParams")||LD(D,"Blob")||LD(D,"ReadableStream"))return D;if(!W.has("Content-Type"))W.set("Content-Type","application/json");return JSON.stringify(D)}function _W(D,B){let W=new AbortController,Q=()=>W.abort(B?.reason),$=setTimeout(()=>W.abort(),D);if(B?.aborted)Q();else B?.addEventListener("abort",Q,{once:!0});return{signal:W.signal,cleanup:()=>{clearTimeout($),B?.removeEventListener("abort",Q)}}}async function RW(D,B="auto"){if(B==="response")return D;if(B==="arrayBuffer")return D.arrayBuffer();if(B==="blob")return D.blob();if(B==="text")return D.text();if(B==="json"){let Q=await D.text();return Q===""?void 0:JSON.parse(Q)}let W=await D.text();if(W==="")return;try{return JSON.parse(W)}catch{return W}}class x{siteUrl;baseUrl;token;timeout;insecure;constructor(D){let B=typeof D==="string"?{baseUrl:D}:D;this.siteUrl=d(B.baseUrl),this.baseUrl=`${this.siteUrl}/api.php/v2`,this.token=B.token,this.timeout=B.timeout,this.insecure=B.insecure}async request(D,B={}){let W=T(),Q=B.method??"GET",$=B.timeout??W.timeout??this.timeout??OW,X=B.insecure??W.insecure??this.insecure;MD(X);let J=jW(this.baseUrl,D,B.query),Y=new Headers(B.headers);if(this.token)Y.set("Token",this.token);let{signal:G,cleanup:q}=_W($,B.signal),H={method:Q,headers:Y,signal:G};if(B.body!==void 0&&Q!=="GET")H.body=VW(B.body,B.bodyType,Y);try{let L=await BB(X,J,H);if(!L.ok)throw new C("E_HTTP_ERROR",{status:L.status,statusText:L.statusText},{url:L.url,status:L.status,statusText:L.statusText,body:await L.text().catch(()=>{return})});return RW(L,B.responseType)}catch(L){if(L instanceof C)throw L;if(L instanceof DOMException&&L.name==="AbortError")throw new C("E_TIMEOUT");throw new C("E_NETWORK_ERROR",{message:L.message??String(L)},L)}finally{q()}}async get(D,B={}){return this.request(D,{...B,method:"GET"})}async post(D,B,W={}){return this.request(D,{...W,method:"POST",body:B})}async put(D,B,W={}){return this.request(D,{...W,method:"PUT",body:B})}async delete(D,B={}){return this.request(D,{...B,method:"DELETE"})}async login(D,B){let W=await this.post("/users/login",{account:D,password:B});if(W.status!=="success"||!W.token)throw new C("E_LOGIN_FAILED");this.token=W.token;let Q=T();if(Q.persistProfiles){let $={},X=this.timeout??Q.timeout,J=this.insecure??Q.insecure;if(X!==void 0)$.timeout=X;if(J!==void 0)$.insecure=J;await BD({server:this.siteUrl,account:D,token:W.token,user:j(W.user)?W.user:void 0,serverConfig:j(W.serverConfig)?W.serverConfig:void 0,config:Object.keys($).length>0?$:void 0})}return W.token}static create(D){return new x(D)}static init(D){let B=new x(D);return n({client:B}),B}static async fromProfile(D){let B=await WD(D);return new x({baseUrl:B.server,token:B.token,timeout:typeof B.config?.timeout==="number"?B.config.timeout:void 0,insecure:typeof B.config?.insecure==="boolean"?B.config.insecure:void 0})}}var jB=[{name:"user",display:"用户",description:"用户管理,支持获取用户列表、创建用户、获取用户详情、修改用户信息、删除用户",actions:[{name:"list",display:"获取用户列表",type:"list",method:"get",path:"/users",resultType:"list",pagerGetter:"pager",resultGetter:"users",params:[{name:"browseType",required:!1,type:"string",description:"浏览类型",options:[{value:"inside",label:"内部用户"},{value:"outside",label:"内部用户"}]},{name:"orderBy",required:!1,type:"string",description:"排序",options:[{value:"id_asc",label:"ID 升序"},{value:"id_desc",label:"ID 降序"},{value:"realname_asc",label:"姓名 升序"},{value:"realname_desc",label:"姓名 降序"},{value:"account_asc",label:"用户名 升序"},{value:"account_desc",label:"用户名 降序"}]},{name:"recPerPage",required:!1,type:"number",description:"每页数量,不超过1000"},{name:"pageID",required:!1,type:"number",description:"页码,从第1页开始"},{name:"filters",required:!1,type:"string",description:"搜索条件数组,每项包含 field/operator/value/join/group;field 必须是该接口支持的搜索字段,operator 使用该接口搜索配置支持的操作符。支持搜索字段:realname(姓名,示例:admin);email(邮箱,示例:关键字);dept(部门,示例:all);account(用户名,示例:admin);role(职位,枚举:dev 研发 | qa 测试 | pm 项目经理 | po 产品经理 | td 研发主管 | pd 产品主管 | qd 测试主管 | top 高层管理 | others 其他);phone(电话,示例:关键字);visions(界面类型,枚举:rnd 研发综合界面 | lite 运营管理界面);join(入职日期,示例:2026-01-01);id(用户编号,示例:1);commiter(源代码帐号,示例:all);gender(性别,枚举:m 男 | f 女);qq(QQ,示例:关键字);skype(Skype,示例:关键字);dingding(钉钉,示例:关键字);weixin(微信,示例:关键字);slack(Slack,示例:关键字);whatsapp(WhatsApp,示例:关键字);address(通讯地址,示例:关键字);zipcode(邮编,示例:关键字)"},{name:"groupJoin",required:!1,type:"string",description:"条件组之间的连接方式",options:[{value:"and",label:"and"},{value:"or",label:"or"}]}]},{name:"create",display:"创建用户",type:"create",method:"post",path:"/users",resultType:"object",requestBody:{required:!0,type:"object",schema:{type:"object",properties:{account:{type:"string",description:"登录名"},realname:{type:"string",description:"姓名"},password:{type:"string",description:"密码"}},required:["account","realname","password"]}}},{name:"get",display:"获取用户详情",type:"get",method:"get",path:"/users/{userID}",resultType:"object",resultGetter:"user",pathParams:{userID:"用户ID"}},{name:"update",display:"修改用户信息",type:"update",method:"put",path:"/users/{userID}",resultType:"object",pathParams:{userID:"用户ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{realname:{type:"string",description:"真实姓名"},dept:{type:"integer",description:"部门",format:"int32"},join:{type:"string",description:"入职日期"},group:{type:"array",items:{type:"string"},description:"权限分组"},email:{type:"string",description:"邮箱"},visions:{type:"array",items:{type:"string"},description:"界面类型(研发综合界面 rnd | 运营管理界面 lite)"},mobile:{type:"string",description:"手机"},weixin:{type:"string",description:"微信"},password:{type:"string",description:"密码"}}}}},{name:"delete",display:"删除用户",type:"delete",method:"delete",path:"/users/{userID}",resultType:"text",pathParams:{userID:"用户ID"}}]},{name:"program",display:"项目集",description:"项目集管理,支持获取项目集列表、创建项目集、获取项目集详情、修改项目集、删除项目集",actions:[{name:"list",display:"获取项目集列表",type:"list",method:"get",path:"/programs",resultType:"list",pagerGetter:"pager",resultGetter:"programs",params:[{name:"browseType",required:!1,type:"string",description:"浏览类型",options:[{value:"all",label:"全部"},{value:"unclosed",label:"未关闭"},{value:"wait",label:"未开始"},{value:"doing",label:"进行中"},{value:"suspended",label:"已挂起"},{value:"delayed",label:"已延期"},{value:"closed",label:"已关闭"}]},{name:"orderBy",required:!1,type:"string",description:"排序",options:[{value:"id_asc",label:"ID 升序"},{value:"id_desc",label:"ID 降序"},{value:"name_asc",label:"名称 升序"},{value:"name_desc",label:"名称 降序"},{value:"begin_asc",label:"计划开始 升序"},{value:"begin_desc",label:"计划开始 降序"},{value:"end_asc",label:"计划结束 升序"},{value:"end_desc",label:"计划结束 降序"}]},{name:"recPerPage",required:!1,type:"number",description:"每页数量,不超过1000"},{name:"pageID",required:!1,type:"number",description:"页码,从第1页开始"},{name:"filters",required:!1,type:"string",description:"搜索条件数组,每项包含 field/operator/value/join/group;field 必须是该接口支持的搜索字段,operator 使用该接口搜索配置支持的操作符。支持搜索字段:name(项目集名称,示例:关键字);PM(负责人,用户,示例:admin);openedDate(创建时间,示例:2026-01-01);status(状态,枚举:wait 未开始 | doing 进行中 | suspended 已挂起 | closed 已关闭);openedBy(创建者,用户,示例:admin);begin(计划开始,示例:2026-01-01);end(计划完成,示例:2026-01-01);realBegan(实际开始,示例:2026-01-01);realEnd(实际完成,示例:2026-01-01);closedDate(关闭日期,示例:2026-01-01);lastEditedDate(最后编辑日期,示例:2026-01-01);desc(项目集描述,示例:关键字)"},{name:"groupJoin",required:!1,type:"string",description:"条件组之间的连接方式",options:[{value:"and",label:"and"},{value:"or",label:"or"}]}]},{name:"create",display:"创建项目集",type:"create",method:"post",path:"/programs",resultType:"object",requestBody:{required:!0,type:"object",schema:{type:"object",properties:{name:{type:"string",description:"项目集名称"},begin:{type:"string",description:"计划开始日期"},end:{type:"string",description:"计划完成日期"},PM:{type:"string",description:"计划完成日期"},desc:{type:"string",description:"项目集描述"}},required:["name","begin","end"]}}},{name:"get",display:"获取项目集详情",type:"get",method:"get",path:"/programs/{programID}",resultType:"object",resultGetter:"program",pathParams:{programID:"项目集ID"}},{name:"update",display:"修改项目集",type:"update",method:"put",path:"/programs/{programID}",resultType:"object",pathParams:{programID:"项目集ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{name:{type:"string",description:"项目集名称"},begin:{type:"string",description:"计划开始日期"},end:{type:"string",description:"计划完成日期"},PM:{type:"string",description:"计划完成日期"},desc:{type:"string",description:"项目集描述"}},required:["name","begin","end"]}}},{name:"delete",display:"删除项目集",type:"delete",method:"delete",path:"/programs/{programID}",resultType:"text",pathParams:{programID:"项目集ID"}}]},{name:"product",display:"产品",description:"产品管理,支持获取产品列表、获取项目集的产品列表、创建产品、关闭产品、创建产品的需求模块、创建产品的Bug模块、创建产品的用例模块、获取产品详情、修改产品、删除产品",actions:[{name:"list",display:"获取产品列表",type:"list",method:"get",path:"/products",resultType:"list",pagerGetter:"pager",resultGetter:"products",params:[{name:"browseType",required:!1,type:"string",description:"浏览类型",options:[{value:"all",label:"全部"},{value:"noclosed",label:"未关闭"},{value:"closed",label:"已结束"}]},{name:"orderBy",required:!1,type:"string",description:"排序",options:[{value:"id_asc",label:"ID 升序"},{value:"id_desc",label:"ID 降序"},{value:"title_asc",label:"名称 升序"},{value:"title_desc",label:"名称 降序"},{value:"begin_asc",label:"计划开始 升序"},{value:"begin_desc",label:"计划开始 降序"},{value:"end_asc",label:"计划结束 升序"},{value:"end_desc",label:"计划结束 降序"}]},{name:"recPerPage",required:!1,type:"number",description:"每页数量,不超过1000"},{name:"pageID",required:!1,type:"number",description:"页码,从第1页开始"}]},{name:"programProducts",display:"获取项目集的产品列表",type:"list",method:"get",path:"/programs/{programID}/products",resultType:"list",pagerGetter:"pager",resultGetter:"products",pathParams:{programID:"项目集ID"},params:[{name:"browseType",required:!1,type:"string",description:"状态,默认是noclosed",defaultValue:"noclosed",options:[{value:"all",label:"全部"},{value:"noclosed",label:"未关闭"},{value:"closed",label:"已结束"}]},{name:"orderBy",required:!1,type:"string",description:"排序",options:[{value:"id_asc",label:"ID 升序"},{value:"id_desc",label:"ID 降序"},{value:"name_asc",label:"名称 升序"},{value:"name_desc",label:"名称 降序"},{value:"begin_asc",label:"计划开始 升序"},{value:"begin_desc",label:"计划开始 降序"},{value:"end_asc",label:"计划结束 升序"},{value:"end_desc",label:"计划结束 降序"}]},{name:"recPerPage",required:!1,type:"number",description:"每页数量,不超过1000"},{name:"pageID",required:!1,type:"number",description:"页码,从第1页开始"}]},{name:"create",display:"创建产品",type:"create",method:"post",path:"/products",resultType:"object",requestBody:{required:!0,type:"object",schema:{type:"object",properties:{name:{type:"string",description:"产品名称"},program:{type:"integer",description:"所属项目集",format:"int32"},line:{type:"integer",description:"所属产品线",format:"int32"},type:{type:"string",description:"类型(normal 正常 | branch 多分支 | platform 多平台)"},PO:{type:"string",description:"产品负责人"},reviewer:{type:"array",items:{type:"string"},description:"评审人"},desc:{type:"array",items:{type:"string"},description:"产品描述"},QD:{type:"string",description:"测试负责人"},RD:{type:"string",description:"发布负责人"},acl:{type:"string",description:"访问控制(open 公开 | private 私有)"}},required:["name"]}}},{name:"close",display:"关闭产品",type:"action",method:"post",path:"/products/{productID}/close",resultType:"text",pathParams:{productID:"产品ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{comment:{type:"string",description:"备注"}}}}},{name:"createStoryModule",display:"创建产品的需求模块",type:"create",method:"post",path:"/products/{productID}/story/modules",resultType:"object",pathParams:{productID:"产品ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{name:{type:"string",description:"模块名称"},parentID:{type:"integer",description:"父模块",format:"int32"}}}}},{name:"createBugModule",display:"创建产品的Bug模块",type:"create",method:"post",path:"/products/{productID}/bug/modules",resultType:"object",pathParams:{productID:"产品ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{name:{type:"string",description:"模块名称"},parentID:{type:"integer",description:"父模块",format:"int32"}}}}},{name:"createTestcaseModule",display:"创建产品的用例模块",type:"create",method:"post",path:"/products/{productID}/testcase/modules",resultType:"object",pathParams:{productID:"产品ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{name:{type:"string",description:"模块名称"},parentID:{type:"integer",description:"父模块",format:"int32"}}}}},{name:"get",display:"获取产品详情",type:"get",method:"get",path:"/products/{productID}",resultType:"object",resultGetter:"product",pathParams:{productID:"产品ID"}},{name:"update",display:"修改产品",type:"update",method:"put",path:"/products/{productID}",resultType:"object",pathParams:{productID:"产品ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{name:{type:"string",description:"产品名称"},program:{type:"integer",description:"所属项目集",format:"int32"},line:{type:"integer",description:"所属产品线",format:"int32"},type:{type:"string",description:"类型(normal 正常 | branch 多分支 | platform 多平台)"},PO:{type:"string",description:"产品负责人"},reviewer:{type:"array",items:{type:"string"},description:"评审人"},desc:{type:"array",items:{type:"string"},description:"产品描述"},QD:{type:"string",description:"测试负责人"},RD:{type:"string",description:"发布负责人"},acl:{type:"string",description:"访问控制(open 公开 | private 私有)"}},required:["name"]}}},{name:"delete",display:"删除产品",type:"delete",method:"delete",path:"/products/{productID}",resultType:"text",pathParams:{productID:"产品ID"}}]},{name:"project",display:"项目",description:"项目管理,支持获取项目列表、获取项目集的项目列表、获取项目团队列表、获取项目成员列表、创建项目、关闭项目、创建项目需求、创建项目Bug、创建项目任务、修改项目、删除项目、维护项目成员",actions:[{name:"list",display:"获取项目列表",type:"list",method:"get",path:"/projects",resultType:"list",pagerGetter:"pager",resultGetter:"projects",params:[{name:"browseType",required:!1,type:"string",description:"项目状态,默认是undone",defaultValue:"undone",options:[{value:"all",label:"全部"},{value:"undone",label:"未完成"},{value:"wait",label:"未开始"},{value:"doing",label:"进行中"}]},{name:"orderBy",required:!1,type:"string",description:"排序",options:[{value:"id_asc",label:"ID 升序"},{value:"id_desc",label:"ID 降序"},{value:"name_asc",label:"名称 升序"},{value:"name_desc",label:"名称 降序"},{value:"begin_asc",label:"计划开始 升序"},{value:"begin_desc",label:"计划开始 降序"},{value:"end_asc",label:"计划结束 升序"},{value:"end_desc",label:"计划结束 降序"}]},{name:"recPerPage",required:!1,type:"number",description:"每页数量,不超过1000"},{name:"pageID",required:!1,type:"number",description:"页码,从第1页开始"},{name:"filters",required:!1,type:"string",description:"搜索条件数组,每项包含 field/operator/value/join/group;field 必须是该接口支持的搜索字段,operator 使用该接口搜索配置支持的操作符。支持搜索字段:name(项目名称,示例:关键字);code(项目代号,示例:关键字);id(项目ID,示例:1);model(项目管理方式,枚举:scrum Scrum | waterfall 瀑布 | kanban 看板 | agileplus 融合敏捷 | waterfallplus 融合瀑布);hasProduct(项目类型,枚举:1 产品型 | 0 项目型);parent(所属项目集,示例:all);status(状态,枚举:wait 未开始 | doing 进行中 | suspended 已挂起 | closed 已关闭 | delay 已延期);desc(项目描述,示例:关键字);PM(负责人,用户,示例:admin);openedDate(创建日期,示例:2026-01-01);begin(计划开始,示例:2026-01-01);end(计划完成,示例:2026-01-01);realBegan(实际开始,示例:2026-01-01);realEnd(实际完成,示例:2026-01-01);openedBy(由谁创建,用户,示例:admin);closedBy(由谁关闭,用户,示例:admin);lastEditedDate(最后编辑日期,示例:2026-01-01);closedDate(关闭日期,示例:2026-01-01)"},{name:"groupJoin",required:!1,type:"string",description:"条件组之间的连接方式",options:[{value:"and",label:"and"},{value:"or",label:"or"}]}]},{name:"programProjects",display:"获取项目集的项目列表",type:"list",method:"get",path:"/programs/{programID}/projects",resultType:"list",pagerGetter:"pager",resultGetter:"projects",pathParams:{programID:"项目集ID"},params:[{name:"browseType",required:!1,type:"string",description:"项目状态,默认是undone",defaultValue:"undone",options:[{value:"all",label:"全部"},{value:"undone",label:"未完成"},{value:"wait",label:"未开始"},{value:"doing",label:"进行中"}]},{name:"orderBy",required:!1,type:"string",description:"排序",options:[{value:"id_asc",label:"ID 升序"},{value:"id_desc",label:"ID 降序"},{value:"name_asc",label:"名称 升序"},{value:"name_desc",label:"名称 降序"},{value:"begin_asc",label:"计划开始 升序"},{value:"begin_desc",label:"计划开始 降序"},{value:"end_asc",label:"计划结束 升序"},{value:"end_desc",label:"计划结束 降序"}]},{name:"recPerPage",required:!1,type:"number",description:"每页数量,不超过1000"},{name:"pageID",required:!1,type:"number",description:"页码,从第1页开始"}]},{name:"team",display:"获取项目团队列表",type:"list",method:"get",path:"/projects/team",resultType:"list",resultGetter:"members",params:[{name:"projectID",required:!0,type:"string",description:"项目ID"}]},{name:"projectMembers",display:"获取项目成员列表",type:"list",method:"get",path:"/projects/{projectID}/members",resultType:"list",resultGetter:"members",pathParams:{projectID:"项目ID"}},{name:"create",display:"创建项目",type:"create",method:"post",path:"/projects",resultType:"object",requestBody:{required:!0,type:"object",schema:{type:"object",properties:{name:{type:"string",description:"项目名称"},model:{type:"string",description:"项目管理方式(scrum 敏捷 | waterfall 瀑布 | kanban 看板 | agileplus 融合敏捷 | waterfallplus 融合瀑布)"},begin:{type:"string",description:"开始日期"},end:{type:"string",description:"结束日期"},products:{type:"array",items:{type:"string"},description:"关联产品"},parent:{type:"integer",description:"所属项目集",format:"int32"},workflowGroup:{type:"integer",description:"项目流程,付费版功能,开源版可以不填",format:"int32"},PM:{type:"string",description:"项目负责人"}},required:["name","model","begin","end","workflowGroup"]}}},{name:"close",display:"关闭项目",type:"action",method:"post",path:"/projects/{projectID}/close",resultType:"text",pathParams:{projectID:"项目ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{realEnd:{type:"string",description:"实际完成日期"},comment:{type:"string",description:"备注"}},required:["realEnd"]}}},{name:"createStory",display:"创建项目需求",type:"create",method:"post",path:"/projects/{projectID}/stories",resultType:"object",pathParams:{projectID:"项目ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{productID:{type:"integer",description:"所属产品;项目型项目可不传,产品型项目必须传",format:"int32"},title:{type:"string",description:"需求标题"},spec:{type:"string",description:"需求描述"},pri:{type:"integer",description:"优先级",format:"int32"},category:{type:"string",description:"类别"},reviewer:{type:"array",items:{type:"string"},description:"评审人"}},required:["title"]}}},{name:"createBug",display:"创建项目Bug",type:"create",method:"post",path:"/projects/{projectID}/bugs",resultType:"object",pathParams:{projectID:"项目ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{productID:{type:"integer",description:"所属产品;项目型项目可不传,产品型项目必须传",format:"int32"},title:{type:"string",description:"Bug标题"},openedBuild:{type:"array",items:{type:"string"},description:"影响版本,主干是trunk,其他版本使用版本ID"},severity:{type:"integer",description:"严重程度",format:"int32"},pri:{type:"integer",description:"优先级",format:"int32"},type:{type:"string",description:"Bug类型"},steps:{type:"string",description:"重现步骤"}},required:["title","openedBuild"]}}},{name:"createTask",display:"创建项目任务",type:"create",method:"post",path:"/projects/{projectID}/tasks",resultType:"object",pathParams:{projectID:"项目ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{name:{type:"string",description:"任务名称"},executionID:{type:"integer",description:"所属执行;无执行项目可不传,有执行项目必须传",format:"int32"},type:{type:"string",description:"任务类型"},assignedTo:{type:"string",description:"指派给"},estStarted:{type:"string",description:"预计开始"},deadline:{type:"string",description:"截止日期"},pri:{type:"integer",description:"优先级",format:"int32"},estimate:{type:"number",description:"预计工时",format:"float"},module:{type:"integer",description:"所属模块",format:"int32"},story:{type:"integer",description:"相关需求",format:"int32"},desc:{type:"string",description:"任务描述"}},required:["name"]}}},{name:"update",display:"修改项目",type:"update",method:"put",path:"/projects/{projectID}",resultType:"object",pathParams:{projectID:"项目ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{name:{type:"string",description:"项目名称"},model:{type:"string",description:"项目管理方式(scrum 敏捷 | waterfall 瀑布 | kanban 看板 | agileplus 融合敏捷 | waterfallplus 融合瀑布)"},begin:{type:"string",description:"开始日期"},end:{type:"string",description:"结束日期"},products:{type:"array",items:{type:"string"},description:"关联产品"},parent:{type:"integer",description:"所属项目集",format:"int32"},workflowGroup:{type:"integer",description:"项目流程,付费版功能,开源版可以不填",format:"int32"},PM:{type:"string",description:"项目负责人"}},required:["name","model","begin","end","workflowGroup"]}}},{name:"delete",display:"删除项目",type:"delete",method:"delete",path:"/projects/{projectID}",resultType:"text",pathParams:{projectID:"项目ID"}},{name:"members",display:"维护项目成员",type:"action",method:"put",path:"/projects/{projectID}/members",resultType:"text",pathParams:{projectID:"项目ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{account:{type:"array",items:{type:"string"},description:'成员账号,多人时按顺序设置。例如 account=["admin","dev1"] 时,role[0] 对应 admin,role[1] 对应 dev1'},role:{type:"array",items:{type:"string"},description:"成员角色,与account顺序一一对应"},days:{type:"array",items:{type:"string"},description:"可用工作日,与account顺序一一对应"},hours:{type:"array",items:{type:"string"},description:"每日工时,与account顺序一一对应"},limited:{type:"array",items:{type:"string"},description:"是否限制日期,与account顺序一一对应"}},required:["account"]}}}]},{name:"execution",display:"执行",description:"执行管理,支持获取执行列表、获取项目的执行列表、获取执行团队列表、获取执行成员列表、创建执行(迭代/阶段/看板)、关闭执行、创建执行的任务模块、获取执行详情、修改执行、删除执行、维护执行成员",actions:[{name:"list",display:"获取执行列表",type:"list",method:"get",path:"/executions",resultType:"list",pagerGetter:"pager",resultGetter:"executions",params:[{name:"browseType",required:!1,type:"string",description:"执行状态,默认是undone",defaultValue:"undone",options:[{value:"all",label:"全部"},{value:"undone",label:"未完成"},{value:"wait",label:"未开始"},{value:"doing",label:"进行中"}]},{name:"orderBy",required:!1,type:"string",description:"排序",options:[{value:"rawID_asc",label:"RAWID 升序"},{value:"rawID_desc",label:"RAWID 降序"},{value:"nameCol_asc",label:"名称 升序"},{value:"nameCol_desc",label:"名称 降序"},{value:"begin_asc",label:"计划开始 升序"},{value:"begin_desc",label:"计划开始 降序"},{value:"end_asc",label:"计划结束 升序"},{value:"end_desc",label:"计划结束 降序"}]},{name:"recPerPage",required:!1,type:"number",description:"每页数量,不超过1000"},{name:"pageID",required:!1,type:"number",description:"页码,从第1页开始"},{name:"filters",required:!1,type:"string",description:"搜索条件数组,每项包含 field/operator/value/join/group;field 必须是该接口支持的搜索字段,operator 使用该接口搜索配置支持的操作符。支持搜索字段:activatedDate,assignedDate,assignedTo,canceledBy,canceledDate,closedBy,closedDate,closedReason,consumed,deadline,desc,estStarted,estimate,execution,finishedBy,finishedDate,fromBug,id,keywords,lastEditedBy,lastEditedDate,left,mailto,module,name,openedBy,openedDate,pri,project,realStarted,status,story,type"},{name:"groupJoin",required:!1,type:"string",description:"条件组之间的连接方式",options:[{value:"and",label:"and"},{value:"or",label:"or"}]}]},{name:"projectExecutions",display:"获取项目的执行列表",type:"list",method:"get",path:"/projects/{projectID}/executions",resultType:"list",pagerGetter:"pager",resultGetter:"executions",pathParams:{projectID:"项目ID"},params:[{name:"browseType",required:!1,type:"string",description:"执行状态,默认是undone",defaultValue:"undone",options:[{value:"all",label:"全部"},{value:"undone",label:"未完成"},{value:"wait",label:"未开始"},{value:"doing",label:"进行中"}]},{name:"orderBy",required:!1,type:"string",description:"排序",options:[{value:"rawID_asc",label:"RAWID 升序"},{value:"rawID_desc",label:"RAWID 降序"},{value:"nameCol_asc",label:"名称 升序"},{value:"nameCol_desc",label:"名称 降序"},{value:"begin_asc",label:"计划开始 升序"},{value:"begin_desc",label:"计划开始 降序"},{value:"end_asc",label:"计划结束 升序"},{value:"end_desc",label:"计划结束 降序"}]},{name:"recPerPage",required:!1,type:"number",description:"每页数量,不超过1000"},{name:"pageID",required:!1,type:"number",description:"页码,从第1页开始"}]},{name:"team",display:"获取执行团队列表",type:"list",method:"get",path:"/executions/team",resultType:"list",resultGetter:"members",params:[{name:"executionID",required:!0,type:"string",description:"执行ID"}]},{name:"executionMembers",display:"获取执行成员列表",type:"list",method:"get",path:"/executions/{executionID}/members",resultType:"list",resultGetter:"members",pathParams:{executionID:"执行ID"}},{name:"create",display:"创建执行(迭代/阶段/看板)",type:"create",method:"post",path:"/executions",resultType:"object",requestBody:{required:!0,type:"object",schema:{type:"object",properties:{project:{type:"integer",description:"所属项目",format:"int32"},name:{type:"string",description:"迭代/阶段名称"},type:{type:"string",description:"类型(sprint 迭代 | stage 阶段 | kanban 看板)。默认按项目模型推导:scrum→sprint、kanban→kanban、waterfall/waterfallplus→stage;IPD 项目创建阶段时必须显式传 stage"},parent:{type:"integer",description:"父执行/父阶段ID;创建子阶段时传父阶段ID,不传为顶层阶段",format:"int32"},attribute:{type:"string",description:"阶段类型(mix 综合 | request 需求 | design 设计 | dev 开发 | qa 测试 | release 发布 | review 总结评审 | other 其他;IPD: concept 概念 | plan 计划 | develop 开发 | qualify 验证 | launch 发布)。不传为空,有 parent 时继承父阶段"},lifetime:{type:"string",description:"周期(short 短期,迭代 | long 长期,阶段 | ops 运维)"},begin:{type:"string",description:"开始日期"},end:{type:"string",description:"结束日期"},days:{type:"integer",description:"可用工作日",format:"int32"},products:{type:"array",items:{type:"string"},description:"关联产品;waterfall/waterfallplus 项目创建阶段时必填"},plans:{type:"array",items:{type:"string"},description:"关联计划,必须是产品+planID的二维数组"},PO:{type:"string",description:"产品负责人"},QD:{type:"string",description:"测试负责人"},PM:{type:"string",description:"执行负责人"},RD:{type:"string",description:"发布负责人"},acl:{type:"string",description:"访问控制(open 公开 | private 私有)"}},required:["project","name","begin","end"]}}},{name:"close",display:"关闭执行",type:"action",method:"post",path:"/executions/{executionID}/close",resultType:"text",pathParams:{executionID:"执行ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{realEnd:{type:"string",description:"实际完成日期"},comment:{type:"string",description:"备注"}},required:["realEnd"]}}},{name:"createTaskModule",display:"创建执行的任务模块",type:"create",method:"post",path:"/executions/{executionID}/task/modules",resultType:"object",pathParams:{executionID:"执行ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{name:{type:"string",description:"模块名称"},parentID:{type:"integer",description:"父模块",format:"int32"}}}}},{name:"get",display:"获取执行详情",type:"get",method:"get",path:"/executions/{executionID}",resultType:"object",resultGetter:"execution",pathParams:{executionID:"执行ID"}},{name:"update",display:"修改执行",type:"update",method:"put",path:"/executions/{executionID}",resultType:"object",pathParams:{executionID:"执行ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{project:{type:"integer",description:"所属项目",format:"int32"},name:{type:"string",description:"迭代名称"},lifetime:{type:"string",description:"执行类型(short 短期 | long 长期 | ops 运维)"},begin:{type:"string",description:"开始日期"},end:{type:"string",description:"结束日期"},days:{type:"integer",description:"可用工作日",format:"int32"},products:{type:"array",items:{type:"string"},description:"关联产品"},plans:{type:"array",items:{type:"string"},description:"关联计划,必须是产品+planID的二维数组"},PO:{type:"string",description:"产品负责人"},QD:{type:"string",description:"测试负责人"},PM:{type:"string",description:"执行负责人"},RD:{type:"string",description:"发布负责人"},acl:{type:"string",description:"访问控制(open 公开 | private 私有)"}},required:["name","begin","end"]}}},{name:"delete",display:"删除执行",type:"delete",method:"delete",path:"/executions/{executionID}",resultType:"text",pathParams:{executionID:"执行ID"}},{name:"members",display:"维护执行成员",type:"action",method:"put",path:"/executions/{executionID}/members",resultType:"text",pathParams:{executionID:"执行ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{account:{type:"array",items:{type:"string"},description:'成员账号,多人时按顺序设置。例如 account=["admin","dev1"] 时,role[0] 对应 admin,role[1] 对应 dev1'},role:{type:"array",items:{type:"string"},description:"成员角色,与account顺序一一对应"},days:{type:"array",items:{type:"string"},description:"可用工作日,与account顺序一一对应"},hours:{type:"array",items:{type:"string"},description:"每日工时,与account顺序一一对应"},limited:{type:"array",items:{type:"string"},description:"是否限制日期,与account顺序一一对应"}},required:["account"]}}}]},{name:"productplan",display:"产品计划",description:"产品计划管理,支持获取产品计划列表,支持获取产品下的产品计划、创建产品计划、获取产品计划详情、修改产品计划、删除产品计划",actions:[{name:"list",display:"获取产品计划列表,支持获取产品下的产品计划",type:"list",method:"get",path:"/products/{productID}/productplans",resultType:"list",pagerGetter:"pager",resultGetter:"productplans",pathParams:{productID:"所属产品ID"},params:[{name:"browseType",required:!1,type:"string",description:"执行状态,默认是undone",defaultValue:"undone",options:[{value:"all",label:"全部"},{value:"undone",label:"未完成"},{value:"wait",label:"未开始"},{value:"doing",label:"进行中"}]},{name:"orderBy",required:!1,type:"string",description:"排序",options:[{value:"id_asc",label:"ID 升序"},{value:"id_desc",label:"ID 降序"},{value:"title_asc",label:"名称 升序"},{value:"title_desc",label:"名称 降序"},{value:"begin_asc",label:"开始日期 升序"},{value:"begin_desc",label:"开始日期 降序"},{value:"end_asc",label:"结束日期 升序"},{value:"end_desc",label:"结束日期 降序"},{value:"status_asc",label:"状态 升序"}]},{name:"recPerPage",required:!1,type:"number",description:"每页数量,不超过1000"},{name:"pageID",required:!1,type:"number",description:"页码,从第1页开始"},{name:"filters",required:!1,type:"string",description:"搜索条件数组,每项包含 field/operator/value/join/group;field 必须是该接口支持的搜索字段,operator 使用该接口搜索配置支持的操作符。支持搜索字段:begin,branch,end,id,status,title"},{name:"groupJoin",required:!1,type:"string",description:"条件组之间的连接方式",options:[{value:"and",label:"and"},{value:"or",label:"or"}]}]},{name:"create",display:"创建产品计划",type:"create",method:"post",path:"/productplans",resultType:"object",requestBody:{required:!0,type:"object",schema:{type:"object",properties:{productID:{type:"integer",description:"产品ID",format:"int32"},title:{type:"string",description:"计划名称"},parent:{type:"integer",description:"父计划ID",format:"int32"},begin:{type:"string",description:"开始日期"},end:{type:"string",description:"结束日期"},branchID:{type:"integer",description:"分支ID",format:"int32"},desc:{type:"string",description:"计划描述"}},required:["productID","title"]}}},{name:"get",display:"获取产品计划详情",type:"get",method:"get",path:"/productplans/{planID}",resultType:"object",resultGetter:"productplan",pathParams:{planID:"产品计划ID"}},{name:"update",display:"修改产品计划",type:"update",method:"put",path:"/productplans/{planID}",resultType:"object",pathParams:{planID:"产品计划ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{title:{type:"string",description:"计划名称"},parent:{type:"integer",description:"父计划",format:"int32"},begin:{type:"string",description:"开始日期"},end:{type:"string",description:"结束日期"},branchID:{type:"integer",description:"分支ID",format:"int32"},desc:{type:"string",description:"计划描述"}},required:["title"]}}},{name:"delete",display:"删除产品计划",type:"delete",method:"delete",path:"/productplans/{planID}",resultType:"text",pathParams:{planID:"产品计划ID"}}]},{name:"story",display:"需求",description:"需求管理,支持获取需求列表,支持获取项目/产品/执行下的需求、产品的需求模块树、创建需求、获取需求详情、修改需求、修改需求模块、删除需求、删除需求模块、激活需求、变更需求、关闭需求",actions:[{name:"list",display:"获取需求列表,支持获取项目/产品/执行下的需求",type:"list",method:"get",path:"/{scope}/{scopeID}/stories",resultType:"list",pagerGetter:"pager",resultGetter:"stories",pathParams:{scope:{description:"需求所属范围",options:[{value:"projects",label:"项目"},{value:"products",label:"产品"},{value:"executions",label:"执行"}]},scopeID:"所属范围ID"},params:[{name:"browseType",required:!1,type:"string",description:"状态,默认是allstory",defaultValue:"allstory",options:[{value:"allstory",label:"全部"},{value:"assignedtome",label:"指派给我"},{value:"openedbyme",label:"我创建"},{value:"reviewbyme",label:"待我评审"},{value:"draftstory",label:"草稿"}]},{name:"orderBy",required:!1,type:"string",description:"排序",options:[{value:"id_asc",label:"ID 升序"},{value:"id_desc",label:"ID 降序"},{value:"title_asc",label:"标题 升序"},{value:"title_desc",label:"标题 降序"},{value:"status_asc",label:"状态 升序"},{value:"status_desc",label:"状态 降序"}]},{name:"recPerPage",required:!1,type:"number",description:"每页数量,不超过1000"},{name:"pageID",required:!1,type:"number",description:"页码,从第1页开始"},{name:"filters",required:!1,type:"string",description:"搜索条件数组,每项包含 field/operator/value/join/group;field 必须是该接口支持的搜索字段,operator 使用该接口搜索配置支持的操作符。支持搜索字段:title(需求名称,示例:关键字);id(编号,示例:1);keywords(关键词,示例:关键字);status(当前状态,枚举:draft 草稿 | reviewing 评审中 | active 激活 | changing 变更中 | closed 已关闭);pri(优先级,枚举:1 | 2 | 3 | 4);module(所属模块,示例:all);stage(所处阶段,枚举:wait 未开始 | planned 已计划 | projected 研发立项 | designing 设计中 | designed 设计完毕 | developing 研发中 | developed 研发完毕 | testing 测试中 | tested 测试完毕 | verified 已验收 | rejected 验收失败 | delivering 交付中 | delivered 已交付 | released 已发布 | closed 已关闭);product(所属产品,示例:all);branch(branch,示例:all);grade(需求层级,示例:all);plan(所属计划,示例:all);estimate(预计小时,示例:关键字);source(来源,枚举:customer 客户 | user 用户 | po 产品经理 | market 市场 | service 客服 | operation 运营 | support 技术支持 | competitor 竞争对手 | partner 合作伙伴 | dev 开发人员 | tester 测试人员 | bug Bug | forum 论坛 | other 其他);sourceNote(来源备注,示例:关键字);fromBug(来源Bug,示例:关键字);category(类别,枚举:feature 功能 | interface 接口 | performance 性能 | safe 安全 | experience 体验 | improve 改进 | other 其他);openedBy(由谁创建,用户,示例:admin);reviewedBy(已评审人,用户,示例:admin);result(评审结果,枚举:pass 确认通过 | revert 撤销变更 | clarify 有待明确 | reject 拒绝);assignedTo(指派给,用户,示例:admin);closedBy(由谁关闭,用户,示例:admin);lastEditedBy(最后修改,用户,示例:admin);mailto(抄送给,用户,示例:admin);closedReason(关闭原因,枚举:done 已完成 | subdivided 已拆分 | duplicate 重复 | postponed 延期 | willnotdo 不做 | cancel 已取消 | bydesign 设计如此);version(版本号,示例:关键字);openedDate(创建日期,示例:2026-01-01);reviewedDate(评审时间,示例:2026-01-01);assignedDate(指派日期,示例:2026-01-01);closedDate(关闭日期,示例:2026-01-01);lastEditedDate(最后修改日期,示例:2026-01-01);activatedDate(激活日期,示例:2026-01-01)"},{name:"groupJoin",required:!1,type:"string",description:"条件组之间的连接方式",options:[{value:"and",label:"and"},{value:"or",label:"or"}]}]},{name:"modules",display:"产品的需求模块树",type:"list",method:"get",path:"/products/{productID}/story/modules",resultType:"list",pathParams:{productID:"产品ID"},resultGetter:"tree"},{name:"create",display:"创建需求",type:"create",method:"post",path:"/stories",resultType:"object",requestBody:{required:!0,type:"object",schema:{type:"object",properties:{productID:{type:"integer",description:"产品ID",format:"int32"},title:{type:"string"},pri:{type:"integer",description:"优先级,默认是3",format:"int32"},module:{type:"integer",description:"所属模块",format:"int32"},parent:{type:"integer",description:"父需求",format:"int32"},estimate:{type:"number",description:"预计工时",format:"float"},spec:{type:"string",description:"需求描述"},category:{type:"integer",description:"类别(feature 功能 | interface 接口 | performance 性能 | safe 安全 | experience 体验 | improve 改进 | other 其他)",format:"int32"},source:{type:"string",description:"来源(customer 客户 | user 用户 | po 产品经理 | market 市场 | service 客服 | operation 运营 | support 技术支持 | competitor 竞争对手 | partner 合作伙伴 | dev 开发人员 | tester 测试人员 | bug Bug | forum 论坛 | other 其他)"},verify:{type:"string",description:"验收标准"},assignedTo:{type:"string",description:"指派给"},reviewer:{type:"array",items:{type:"string"},description:"评审人,如果设置必须评审,必须填写"},project:{type:"integer",description:"所属项目",format:"int32"},execution:{type:"integer",description:"所属执行",format:"int32"}},required:["productID","title"]}}},{name:"get",display:"获取需求详情",type:"get",method:"get",path:"/stories/{storyID}",resultType:"object",resultGetter:"story",pathParams:{storyID:"需求ID"}},{name:"update",display:"修改需求",type:"update",method:"put",path:"/stories/{storyID}",resultType:"object",pathParams:{storyID:"需求ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{title:{type:"string"},pri:{type:"integer",description:"优先级,默认是3",format:"int32"},module:{type:"integer",description:"所属模块",format:"int32"},parent:{type:"integer",description:"父需求",format:"int32"},estimate:{type:"number",description:"预计工时",format:"float"},category:{type:"integer",description:"类别(feature 功能 | interface 接口 | performance 性能 | safe 安全 | experience 体验 | improve 改进 | other 其他)",format:"int32"},source:{type:"string",description:"来源(customer 客户 | user 用户 | po 产品经理 | market 市场 | service 客服 | operation 运营 | support 技术支持 | competitor 竞争对手 | partner 合作伙伴 | dev 开发人员 | tester 测试人员 | bug Bug | forum 论坛 | other 其他)"},assignedTo:{type:"string",description:"指派给"}},required:["title"]}}},{name:"updateModule",display:"修改需求模块",type:"update",method:"put",path:"/story/modules/{moduleID}",resultType:"object",pathParams:{moduleID:"模块ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{name:{type:"string",description:"模块名称"},parent:{type:"integer",description:"父模块",format:"int32"}}}}},{name:"delete",display:"删除需求",type:"delete",method:"delete",path:"/stories/{storyID}",resultType:"text",pathParams:{storyID:"需求ID"}},{name:"deleteModule",display:"删除需求模块",type:"delete",method:"delete",path:"/story/modules/{moduleID}",resultType:"text",pathParams:{moduleID:"模块ID"}},{name:"activate",display:"激活需求",type:"action",method:"put",path:"/stories/{storyID}/activate",resultType:"text",pathParams:{storyID:"需求ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{assignedTo:{type:"string",description:"指派给"},comment:{type:"string",description:"备注"}}}}},{name:"change",display:"变更需求",type:"action",method:"put",path:"/stories/{storyID}/change",resultType:"text",pathParams:{storyID:"需求ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{title:{type:"string",description:"需求名称"},reviewer:{type:"array",items:{type:"string"},description:"评审人员"},spec:{type:"string",description:"需求描述"},verify:{type:"string",description:"验收标准"}},required:["reviewer"]}}},{name:"close",display:"关闭需求",type:"action",method:"put",path:"/stories/{storyID}/close",resultType:"text",pathParams:{storyID:"需求ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{closedReason:{type:"string",description:"关闭原因(done 已完成 | subdivided 已拆分 | duplicate 重复 | postponed 延期 | willnotdo 不做 | cancel 已取消 | bydesign 设计如此)"},comment:{type:"string",description:"备注"}},required:["closedReason"]}}}]},{name:"epic",display:"业务需求",description:"业务需求管理,支持获取业务需求列表,支持获取产品下的业务需求、创建业务需求、获取业务需求详情、修改业务需求、删除业务需求、激活业务需求、变更业务需求、关闭业务需求",actions:[{name:"list",display:"获取业务需求列表,支持获取产品下的业务需求",type:"list",method:"get",path:"/products/{productID}/epics",resultType:"list",pagerGetter:"pager",resultGetter:"epics",pathParams:{productID:"所属产品ID"},params:[{name:"browseType",required:!1,type:"string",description:"状态,默认是unclosed",defaultValue:"unclosed",options:[{value:"allstory",label:"全部"},{value:"assignedtome",label:"指派给我"},{value:"openedbyme",label:"我创建"},{value:"reviewbyme",label:"待我评审"},{value:"draftstory",label:"草稿"}]},{name:"orderBy",required:!1,type:"string",description:"排序",options:[{value:"id_asc",label:"ID 升序"},{value:"id_desc",label:"ID 降序"},{value:"title_asc",label:"标题 升序"},{value:"title_desc",label:"标题 降序"},{value:"status_asc",label:"状态 升序"},{value:"status_desc",label:"状态 降序"}]},{name:"recPerPage",required:!1,type:"number",description:"每页数量,不超过1000"},{name:"pageID",required:!1,type:"number",description:"页码,从第1页开始"},{name:"filters",required:!1,type:"string",description:"搜索条件数组,每项包含 field/operator/value/join/group;field 必须是该接口支持的搜索字段,operator 使用该接口搜索配置支持的操作符。支持搜索字段:title(需求名称,示例:关键字);id(编号,示例:1);keywords(关键词,示例:关键字);status(当前状态,枚举:draft 草稿 | reviewing 评审中 | active 激活 | changing 变更中 | closed 已关闭);pri(优先级,枚举:1 | 2 | 3 | 4);module(所属模块,示例:all);stage(所处阶段,枚举:wait 未开始 | planned 已计划 | projected 研发立项 | designing 设计中 | designed 设计完毕 | developing 研发中 | developed 研发完毕 | testing 测试中 | tested 测试完毕 | verified 已验收 | rejected 验收失败 | delivering 交付中 | delivered 已交付 | released 已发布 | closed 已关闭);product(所属产品,示例:all);branch(branch,示例:all);grade(需求层级,示例:all);plan(所属计划,示例:all);estimate(预计小时,示例:关键字);source(来源,枚举:customer 客户 | user 用户 | po 产品经理 | market 市场 | service 客服 | operation 运营 | support 技术支持 | competitor 竞争对手 | partner 合作伙伴 | dev 开发人员 | tester 测试人员 | bug Bug | forum 论坛 | other 其他);sourceNote(来源备注,示例:关键字);fromBug(来源Bug,示例:关键字);category(类别,枚举:feature 功能 | interface 接口 | performance 性能 | safe 安全 | experience 体验 | improve 改进 | other 其他);openedBy(由谁创建,用户,示例:admin);reviewedBy(已评审人,用户,示例:admin);result(评审结果,枚举:pass 确认通过 | revert 撤销变更 | clarify 有待明确 | reject 拒绝);assignedTo(指派给,用户,示例:admin);closedBy(由谁关闭,用户,示例:admin);lastEditedBy(最后修改,用户,示例:admin);mailto(抄送给,用户,示例:admin);closedReason(关闭原因,枚举:done 已完成 | subdivided 已拆分 | duplicate 重复 | postponed 延期 | willnotdo 不做 | cancel 已取消 | bydesign 设计如此);version(版本号,示例:关键字);openedDate(创建日期,示例:2026-01-01);reviewedDate(评审时间,示例:2026-01-01);assignedDate(指派日期,示例:2026-01-01);closedDate(关闭日期,示例:2026-01-01);lastEditedDate(最后修改日期,示例:2026-01-01);activatedDate(激活日期,示例:2026-01-01)"},{name:"groupJoin",required:!1,type:"string",description:"条件组之间的连接方式",options:[{value:"and",label:"and"},{value:"or",label:"or"}]}]},{name:"create",display:"创建业务需求",type:"create",method:"post",path:"/epics",resultType:"object",requestBody:{required:!0,type:"object",schema:{type:"object",properties:{productID:{type:"integer",description:"产品ID",format:"int32"},title:{type:"string"},pri:{type:"integer",description:"优先级,默认是3",format:"int32"},module:{type:"integer",description:"所属模块",format:"int32"},parent:{type:"integer",description:"父业务需求",format:"int32"},estimate:{type:"number",description:"预计工时",format:"float"},spec:{type:"string",description:"业务需求描述"},category:{type:"integer",description:"类别(feature 功能 | interface 接口 | performance 性能 | safe 安全 | experience 体验 | improve 改进 | other 其他)",format:"int32"},source:{type:"string",description:"来源(customer 客户 | user 用户 | po 产品经理 | market 市场 | service 客服 | operation 运营 | support 技术支持 | competitor 竞争对手 | partner 合作伙伴 | dev 开发人员 | tester 测试人员 | bug Bug | forum 论坛 | other 其他)"},verify:{type:"string",description:"验收标准"},assignedTo:{type:"string",description:"指派给"},reviewer:{type:"array",items:{type:"string"},description:"评审人,如果设置必须评审,必须填写"}},required:["productID","title"]}}},{name:"get",display:"获取业务需求详情",type:"get",method:"get",path:"/epics/{storyID}",resultType:"object",pathParams:{storyID:"需求ID"},resultGetter:"epic"},{name:"update",display:"修改业务需求",type:"update",method:"put",path:"/epics/{storyID}",resultType:"object",pathParams:{storyID:"需求ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{title:{type:"string",description:"需求名称"},pri:{type:"integer",description:"优先级,默认是3",format:"int32"},module:{type:"integer",description:"所属模块",format:"int32"},parent:{type:"integer",description:"父业务需求",format:"int32"},estimate:{type:"number",description:"预计工时",format:"float"},category:{type:"integer",description:"类别(feature 功能 | interface 接口 | performance 性能 | safe 安全 | experience 体验 | improve 改进 | other 其他)",format:"int32"},source:{type:"string",description:"来源(customer 客户 | user 用户 | po 产品经理 | market 市场 | service 客服 | operation 运营 | support 技术支持 | competitor 竞争对手 | partner 合作伙伴 | dev 开发人员 | tester 测试人员 | bug Bug | forum 论坛 | other 其他)"},assignedTo:{type:"string",description:"指派给"}},required:["title"]}}},{name:"delete",display:"删除业务需求",type:"delete",method:"delete",path:"/epics/{storyID}",resultType:"text",pathParams:{storyID:"需求ID"}},{name:"activate",display:"激活业务需求",type:"action",method:"put",path:"/epics/{storyID}/activate",resultType:"text",pathParams:{storyID:"需求ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{assignedTo:{type:"string",description:"指派给"},comment:{type:"string",description:"备注"}}}}},{name:"change",display:"变更业务需求",type:"action",method:"put",path:"/epics/{storyID}/change",resultType:"text",pathParams:{storyID:"需求ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{title:{type:"string",description:"需求名称"},reviewer:{type:"array",items:{type:"string"},description:"评审人员"},spec:{type:"string",description:"需求描述"},verify:{type:"string",description:"验收标准"}},required:["reviewer"]}}},{name:"close",display:"关闭业务需求",type:"action",method:"put",path:"/epics/{storyID}/close",resultType:"text",pathParams:{storyID:"需求ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{closedReason:{type:"string",description:"关闭原因(done 已完成 | subdivided 已拆分 | duplicate 重复 | postponed 延期 | willnotdo 不做 | cancel 已取消 | bydesign 设计如此)"},comment:{type:"string",description:"备注"}},required:["closedReason"]}}}]},{name:"requirement",display:"用户需求",description:"用户需求管理,支持获取用户需求列表,支持获取产品下的用户需求、创建用户需求、获取用户需求详情、修改用户需求、删除用户需求、激活用户需求、变更用户需求、关闭用户需求",actions:[{name:"list",display:"获取用户需求列表,支持获取产品下的用户需求",type:"list",method:"get",path:"/products/{productID}/requirements",resultType:"list",pagerGetter:"pager",resultGetter:"requirements",pathParams:{productID:"所属产品ID"},params:[{name:"browseType",required:!1,type:"string",description:"状态,默认是unclosed",defaultValue:"unclosed",options:[{value:"allstory",label:"全部"},{value:"assignedtome",label:"指派给我"},{value:"openedbyme",label:"我创建"},{value:"reviewbyme",label:"待我评审"},{value:"draftstory",label:"草稿"}]},{name:"orderBy",required:!1,type:"string",description:"排序",options:[{value:"id_asc",label:"ID 升序"},{value:"id_desc",label:"ID 降序"},{value:"title_asc",label:"标题 升序"},{value:"title_desc",label:"标题 降序"},{value:"status_asc",label:"状态 升序"},{value:"status_desc",label:"状态 降序"}]},{name:"recPerPage",required:!1,type:"number",description:"每页数量,不超过1000"},{name:"pageID",required:!1,type:"number",description:"页码,从第1页开始"},{name:"filters",required:!1,type:"string",description:"搜索条件数组,每项包含 field/operator/value/join/group;field 必须是该接口支持的搜索字段,operator 使用该接口搜索配置支持的操作符。支持搜索字段:title(需求名称,示例:关键字);id(编号,示例:1);keywords(关键词,示例:关键字);status(当前状态,枚举:draft 草稿 | reviewing 评审中 | active 激活 | changing 变更中 | closed 已关闭);pri(优先级,枚举:1 | 2 | 3 | 4);module(所属模块,示例:all);stage(所处阶段,枚举:wait 未开始 | planned 已计划 | projected 研发立项 | designing 设计中 | designed 设计完毕 | developing 研发中 | developed 研发完毕 | testing 测试中 | tested 测试完毕 | verified 已验收 | rejected 验收失败 | delivering 交付中 | delivered 已交付 | released 已发布 | closed 已关闭);product(所属产品,示例:all);branch(branch,示例:all);grade(需求层级,示例:all);plan(所属计划,示例:all);estimate(预计小时,示例:关键字);source(来源,枚举:customer 客户 | user 用户 | po 产品经理 | market 市场 | service 客服 | operation 运营 | support 技术支持 | competitor 竞争对手 | partner 合作伙伴 | dev 开发人员 | tester 测试人员 | bug Bug | forum 论坛 | other 其他);sourceNote(来源备注,示例:关键字);fromBug(来源Bug,示例:关键字);category(类别,枚举:feature 功能 | interface 接口 | performance 性能 | safe 安全 | experience 体验 | improve 改进 | other 其他);openedBy(由谁创建,用户,示例:admin);reviewedBy(已评审人,用户,示例:admin);result(评审结果,枚举:pass 确认通过 | revert 撤销变更 | clarify 有待明确 | reject 拒绝);assignedTo(指派给,用户,示例:admin);closedBy(由谁关闭,用户,示例:admin);lastEditedBy(最后修改,用户,示例:admin);mailto(抄送给,用户,示例:admin);closedReason(关闭原因,枚举:done 已完成 | subdivided 已拆分 | duplicate 重复 | postponed 延期 | willnotdo 不做 | cancel 已取消 | bydesign 设计如此);version(版本号,示例:关键字);openedDate(创建日期,示例:2026-01-01);reviewedDate(评审时间,示例:2026-01-01);assignedDate(指派日期,示例:2026-01-01);closedDate(关闭日期,示例:2026-01-01);lastEditedDate(最后修改日期,示例:2026-01-01);activatedDate(激活日期,示例:2026-01-01)"},{name:"groupJoin",required:!1,type:"string",description:"条件组之间的连接方式",options:[{value:"and",label:"and"},{value:"or",label:"or"}]}]},{name:"create",display:"创建用户需求",type:"create",method:"post",path:"/requirements",resultType:"object",requestBody:{required:!0,type:"object",schema:{type:"object",properties:{productID:{type:"integer",description:"产品ID",format:"int32"},title:{type:"string"},pri:{type:"integer",description:"优先级,默认是3",format:"int32"},module:{type:"integer",description:"所属模块",format:"int32"},parent:{type:"integer",description:"父用户需求",format:"int32"},estimate:{type:"number",description:"预计工时",format:"float"},spec:{type:"string",description:"用户需求描述"},category:{type:"integer",description:"类别(feature 功能 | interface 接口 | performance 性能 | safe 安全 | experience 体验 | improve 改进 | other 其他)",format:"int32"},source:{type:"string",description:"来源(customer 客户 | user 用户 | po 产品经理 | market 市场 | service 客服 | operation 运营 | support 技术支持 | competitor 竞争对手 | partner 合作伙伴 | dev 开发人员 | tester 测试人员 | bug Bug | forum 论坛 | other 其他)"},verify:{type:"string",description:"验收标准"},assignedTo:{type:"string",description:"指派给"},reviewer:{type:"array",items:{type:"string"},description:"评审人,如果设置必须评审,必须填写"}},required:["productID","title"]}}},{name:"get",display:"获取用户需求详情",type:"get",method:"get",path:"/requirements/{storyID}",resultType:"object",pathParams:{storyID:"需求ID"},resultGetter:"requirement"},{name:"update",display:"修改用户需求",type:"update",method:"put",path:"/requirements/{storyID}",resultType:"object",pathParams:{storyID:"需求ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{title:{type:"string"},pri:{type:"integer",description:"优先级,默认是3",format:"int32"},module:{type:"integer",description:"所属模块",format:"int32"},parent:{type:"integer",description:"父用户需求",format:"int32"},estimate:{type:"number",description:"预计工时",format:"float"},category:{type:"integer",description:"类别(feature 功能 | interface 接口 | performance 性能 | safe 安全 | experience 体验 | improve 改进 | other 其他)",format:"int32"},source:{type:"string",description:"来源(customer 客户 | user 用户 | po 产品经理 | market 市场 | service 客服 | operation 运营 | support 技术支持 | competitor 竞争对手 | partner 合作伙伴 | dev 开发人员 | tester 测试人员 | bug Bug | forum 论坛 | other 其他)"},assignedTo:{type:"string",description:"指派给"}},required:["title"]}}},{name:"delete",display:"删除用户需求",type:"delete",method:"delete",path:"/requirements/{storyID}",resultType:"text",pathParams:{storyID:"需求ID"}},{name:"activate",display:"激活用户需求",type:"action",method:"put",path:"/requirements/{storyID}/activate",resultType:"text",pathParams:{storyID:"需求ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{assignedTo:{type:"string",description:"指派给"},comment:{type:"string",description:"备注"}}}}},{name:"change",display:"变更用户需求",type:"action",method:"put",path:"/requirements/{storyID}/change",resultType:"text",pathParams:{storyID:"需求ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{title:{type:"string",description:"需求名称"},spec:{type:"string",description:"需求描述"},verify:{type:"string",description:"验收标准"}}}}},{name:"close",display:"关闭用户需求",type:"action",method:"put",path:"/requirements/{storyID}/close",resultType:"text",pathParams:{storyID:"需求ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{closedReason:{type:"string",description:"关闭原因(done 已完成 | subdivided 已拆分 | duplicate 重复 | postponed 延期 | willnotdo 不做 | cancel 已取消 | bydesign 设计如此)"},comment:{type:"string",description:"备注"}},required:["closedReason"]}}}]},{name:"bug",display:"Bug",description:"Bug管理,支持获取Bug列表,支持获取项目/产品/执行下的Bug、产品的Bug模块树、创建Bug、获取Bug详情、修改Bug、修改Bug模块、删除Bug、删除Bug模块、激活Bug、关闭Bug、确认Bug、解决Bug",actions:[{name:"list",display:"获取Bug列表,支持获取项目/产品/执行下的Bug",type:"list",method:"get",path:"/{scope}/{scopeID}/bugs",resultType:"list",pagerGetter:"pager",resultGetter:"bugs",pathParams:{scope:{description:"Bug所属范围",options:[{value:"projects",label:"项目"},{value:"products",label:"产品"},{value:"executions",label:"执行"}]},scopeID:"所属范围ID"},params:[{name:"browseType",required:!1,type:"string",description:"状态,默认是all",defaultValue:"all",options:[{value:"all",label:"全部"},{value:"unresolved",label:"未关闭"}]},{name:"orderBy",required:!1,type:"string",description:"排序",options:[{value:"id_asc",label:"ID 升序"},{value:"id_desc",label:"ID 降序"},{value:"title_asc",label:"标题 升序"},{value:"title_desc",label:"标题 降序"},{value:"status_asc",label:"状态 升序"},{value:"status_desc",label:"状态 降序"}]},{name:"recPerPage",required:!1,type:"number",description:"每页数量,不超过1000"},{name:"pageID",required:!1,type:"number",description:"页码,从第1页开始"},{name:"filters",required:!1,type:"string",description:"搜索条件数组,每项包含 field/operator/value/join/group;field 必须是该接口支持的搜索字段,operator 使用该接口搜索配置支持的操作符。支持搜索字段:title(Bug标题,示例:关键字);module(所属模块,模块,示例:0);keywords(关键词,示例:关键字);steps(重现步骤,示例:关键字);assignedTo(指派给,用户,示例:admin);resolvedBy(解决者,用户,示例:admin);status(Bug状态,枚举:active 激活 | resolved 已解决 | closed 已关闭);confirmed(是否确认,枚举:1 已确认 | 0 未确认);story(相关需求,示例:关键字);project(所属项目,示例:all);product(所属产品,示例:all);branch(branch,示例:all);plan(所属计划,示例:all);id(Bug编号,示例:1);execution(所属执行,执行,示例:3);severity(严重程度,枚举:1 | 2 | 3 | 4);pri(优先级,枚举:1 | 2 | 3 | 4);type(Bug类型,枚举:codeerror 代码错误 | config 配置相关 | install 安装部署 | security 安全相关 | performance 性能问题 | standard 标准规范 | automation 测试脚本 | designdefect 设计缺陷 | codeimprovement 代码改进 | others 其他);os(操作系统,枚举:all 全部 | windows Windows | win11 Windows 11 | win10 Windows 10 | win8 Windows 8 | win7 Windows 7 | winxp Windows XP | osx Mac OS | android Android | ios IOS | linux Linux | ubuntu Ubuntu | chromeos Chrome OS | fedora Fedora | unix Unix | others 其他);browser(浏览器,枚举:all 全部 | chrome Chrome | edge Edge | ie IE系列 | ie11 IE11 | ie10 IE10 | ie9 IE9 | ie8 IE8 | firefox firefox系列 | opera Opera系列 | safari | 360 360浏览器 | qq QQ浏览器 | other 其他);resolution(解决方案,枚举:bydesign 设计如此 | duplicate 重复Bug | external 外部原因 | fixed 已解决 | notrepro 无法重现 | postponed 延期处理 | willnotfix 不予解决 | tostory 转为用户故事);activatedCount(激活次数,示例:关键字);toTask(转任务,示例:关键字);toStory(转用户故事,示例:关键字);openedBy(由谁创建,用户,示例:admin);closedBy(由谁关闭,用户,示例:admin);lastEditedBy(修改者,用户,示例:admin);mailto(抄送给,用户,示例:admin);openedBuild(影响版本,示例:builds);resolvedBuild(解决版本,示例:builds);openedDate(创建日期,示例:2026-01-01);assignedDate(指派日期,示例:2026-01-01);resolvedDate(解决日期,示例:2026-01-01);closedDate(关闭日期,示例:2026-01-01);lastEditedDate(修改日期,示例:2026-01-01);deadline(截止日期,示例:2026-01-01);activatedDate(激活时间,示例:2026-01-01)"},{name:"groupJoin",required:!1,type:"string",description:"条件组之间的连接方式",options:[{value:"and",label:"and"},{value:"or",label:"or"}]}]},{name:"modules",display:"产品的Bug模块树",type:"list",method:"get",path:"/products/{productID}/bug/modules",resultType:"list",pathParams:{productID:"产品ID"},resultGetter:"tree"},{name:"create",display:"创建Bug",type:"create",method:"post",path:"/bugs",resultType:"object",requestBody:{required:!0,type:"object",schema:{type:"object",properties:{productID:{type:"integer",description:"所属产品",format:"int32"},title:{type:"string",description:"Bug标题"},openedBuild:{type:"array",items:{type:"string"},description:"影响版本,主干是trunk,其他版本使用版本ID"},project:{type:"integer",description:"所属项目",format:"int32"},execution:{type:"integer",description:"所属执行",format:"int32"},severity:{type:"integer",description:"严重程度,默认是3",format:"int32"},pri:{type:"integer",description:"优先级,默认是3",format:"int32"},type:{type:"string",description:"Bug类型(codeerror 代码错误 | config 配置相关 | install 安装部署 | security 安全相关 | performance 性能问题 | standard 标准规范 | automation 测试脚本 | designdefect 设计缺陷 | others 其他)"},steps:{type:"string",description:"重现步骤"},story:{type:"integer",description:"相关需求",format:"int32"},assignedTo:{type:"string",description:"指派给"}},required:["productID","title","openedBuild"]}}},{name:"get",display:"获取Bug详情",type:"get",method:"get",path:"/bugs/{bugID}",resultType:"object",resultGetter:"bug",pathParams:{bugID:"Bug ID"}},{name:"update",display:"修改Bug",type:"update",method:"put",path:"/bugs/{bugID}",resultType:"object",pathParams:{bugID:"Bug ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{title:{type:"string",description:"Bug标题"},severity:{type:"integer",description:"严重程度,默认是3",format:"int32"},pri:{type:"integer",description:"优先级,默认是3",format:"int32"},type:{type:"string",description:"Bug类型(codeerror 代码错误 | config 配置相关 | install 安装部署 | security 安全相关 | performance 性能问题 | standard 标准规范 | automation 测试脚本 | designdefect 设计缺陷 | others 其他)"},openedBuild:{type:"array",items:{type:"string"},description:"影响版本,主干是trunk,其他版本使用版本ID"},steps:{type:"string",description:"重现步骤"},project:{type:"integer",description:"所属项目",format:"int32"},execution:{type:"integer",description:"所属执行",format:"int32"},story:{type:"integer",description:"相关需求",format:"int32"},assignedTo:{type:"string",description:"指派给"}}}}},{name:"updateModule",display:"修改Bug模块",type:"update",method:"put",path:"/bug/modules/{moduleID}",resultType:"object",pathParams:{moduleID:"模块ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{name:{type:"string",description:"模块名称"},parent:{type:"integer",description:"父模块",format:"int32"}}}}},{name:"delete",display:"删除Bug",type:"delete",method:"delete",path:"/bugs/{bugID}",resultType:"text",pathParams:{bugID:"Bug ID"}},{name:"deleteModule",display:"删除Bug模块",type:"delete",method:"delete",path:"/bug/modules/{moduleID}",resultType:"text",pathParams:{moduleID:"模块ID"}},{name:"activate",display:"激活Bug",type:"action",method:"put",path:"/bugs/{bugID}/activate",resultType:"text",pathParams:{bugID:"Bug ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{openedBuild:{type:"array",items:{type:"string"},description:"影响版本, trunk为主干"},assignedTo:{type:"string",description:"指派给"},comment:{type:"string",description:"备注"}}}}},{name:"close",display:"关闭Bug",type:"action",method:"put",path:"/bugs/{bugID}/close",resultType:"text",pathParams:{bugID:"Bug ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{comment:{type:"string",description:"备注"}}}}},{name:"confirm",display:"确认Bug",type:"action",method:"put",path:"/bugs/{bugID}/confirm",resultType:"text",pathParams:{bugID:"Bug ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{assignedTo:{type:"string",description:"指派给"},type:{type:"string",description:"Bug类型(codeerror 代码错误 | config 配置相关 | install 安装部署 | security 安全相关 | performance 性能问题 | standard 标准规范 | automation 测试脚本 | designdefect 设计缺陷 | others 其他)"},pri:{type:"integer",description:"优先级,默认是3",format:"int32"},deadline:{type:"string",description:"截止日期"},status:{type:"string",description:"状态"},mailto:{type:"array",items:{type:"string"},description:"抄送给"},comment:{type:"string",description:"备注"}}}}},{name:"resolve",display:"解决Bug",type:"action",method:"put",path:"/bugs/{bugID}/resolve",resultType:"text",pathParams:{bugID:"Bug ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{resolution:{type:"string",description:"fixed 已解决 | notrepro 无法重现 | bydesign 设计如此 | duplicate 重复Bug | external 外部原因| postponed 延期处理 | willnotfix 不予解决 | tostory 转为需求"},resolvedDate:{type:"string",description:"解决日期,默认今天"},resolvedBuild:{type:"string",description:"解决版本, trunk为主干"},assignedTo:{type:"string",description:"指派给"},comment:{type:"string",description:"备注"}},required:["resolution"]}}}]},{name:"testcase",display:"测试用例",description:"测试用例管理,支持获取测试用例列表,支持获取产品/项目/执行下的测试用例、产品的用例模块树、创建测试用例、获取测试用例详情、修改测试用例、修改用例模块、删除测试用例、删除用例模块",actions:[{name:"list",display:"获取测试用例列表,支持获取产品/项目/执行下的测试用例",type:"list",method:"get",path:"/{scope}/{scopeID}/testcases",resultType:"list",pagerGetter:"pager",resultGetter:"testcases",pathParams:{scope:{description:"测试用例所属范围",options:[{value:"products",label:"产品"},{value:"projects",label:"项目"},{value:"executions",label:"执行"}]},scopeID:"所属范围ID"},params:[{name:"browseType",required:!1,type:"string",description:"状态,默认是all",defaultValue:"all",options:[{value:"all",label:"全部"},{value:"wait",label:"未关闭"},{value:"needconfirm",label:"需求变动"}]},{name:"orderBy",required:!1,type:"string",description:"排序",options:[{value:"id_asc",label:"ID 升序"},{value:"id_desc",label:"ID 降序"},{value:"title_asc",label:"标题 升序"},{value:"title_desc",label:"标题 降序"},{value:"status_asc",label:"状态 升序"},{value:"status_desc",label:"状态 降序"}]},{name:"recPerPage",required:!1,type:"number",description:"每页数量,不超过1000"},{name:"pageID",required:!1,type:"number",description:"页码,从第1页开始"},{name:"filters",required:!1,type:"string",description:"搜索条件数组,每项包含 field/operator/value/join/group;field 必须是该接口支持的搜索字段,operator 使用该接口搜索配置支持的操作符。支持搜索字段:title(用例名称,示例:关键字);story(关联需求,示例:all);id(用例编号,示例:1);keywords(关键词,示例:关键字);lastEditedBy(修改者,用户,示例:admin);type(用例类型,枚举:unit 单元测试 | interface 接口测试 | feature 功能测试 | install 安装部署 | config 配置相关 | performance 性能测试 | security 安全相关 | other 其他);auto(自动化,枚举:auto 是 | no 否);openedBy(由谁创建,用户,示例:admin);status(用例状态,枚举:wait 待评审 | normal 正常 | blocked 被阻塞 | investigate 研究中);product(所属产品,示例:all);branch(branch,示例:all);stage(适用环节,枚举:unittest 单元测试环节 | feature 功能测试环节 | intergrate 集成测试环节 | system 系统测试环节 | smoke 冒烟测试环节 | bvt 版本验证环节);module(所属模块,模块,示例:0);pri(优先级,枚举:3 | 1 | 2 | 4);lib(所属库,示例:all);lastRunner(执行人,用户,示例:admin);lastRunResult(结果,枚举:pass 通过 | fail 失败 | blocked 阻塞 | null 未执行);lastRunDate(执行时间,示例:2026-01-01);openedDate(创建日期,示例:2026-01-01);lastEditedDate(修改日期,示例:2026-01-01);scene(所属场景,示例:all)"},{name:"groupJoin",required:!1,type:"string",description:"条件组之间的连接方式",options:[{value:"and",label:"and"},{value:"or",label:"or"}]}]},{name:"modules",display:"产品的用例模块树",type:"list",method:"get",path:"/products/{productID}/testcase/modules",resultType:"list",pathParams:{productID:"产品ID"},resultGetter:"tree"},{name:"create",display:"创建测试用例",type:"create",method:"post",path:"/testcases",resultType:"object",requestBody:{required:!0,type:"object",schema:{type:"object",properties:{productID:{type:"integer",description:"所属产品",format:"int32"},title:{type:"string",description:"用例标题"},module:{type:"integer",description:"所属模块",format:"int32"},story:{type:"integer",description:"相关需求",format:"int32"},pri:{type:"integer",description:"优先级",format:"int32"},type:{type:"string",description:"用例类型(unit 单元测试 | interface 接口测试 | feature 功能测试 | install 安装部署 | config 配置相关 | performance 性能测试 | security 安全相关 | other 其他)"},precondition:{type:"string",description:"前置条件"},steps:{type:"array",items:{type:"string"},description:'用例步骤, 如果是嵌套用例,可以通过key表示嵌套关系 {"1": "分组1", "1.1": "子分组1.1", "1.1.1": "步骤1.1.1"}'},expects:{type:"array",items:{type:"string"},description:'用例步骤期望, 如果是嵌套用例步骤,可以通过key表示嵌套关系 {"1": "", "1.1": "", "1.1.1": "步骤1.1.1的期望"}'},stepType:{type:"array",items:{type:"string"},description:'用例步骤类型(step 步骤 | group 父级步骤), 如果是嵌套用例步骤,可以通过key表示嵌套关系 {"1": "group", "1.1": "group", "1.1.1": "step"}'},project:{type:"integer",description:"所属项目",format:"int32"},execution:{type:"integer",description:"所属执行",format:"int32"}},required:["productID","title"]}}},{name:"get",display:"获取测试用例详情",type:"get",method:"get",path:"/testcases/{caseID}",resultType:"object",resultGetter:"testcase",pathParams:{caseID:"测试用例ID"}},{name:"update",display:"修改测试用例",type:"update",method:"put",path:"/testcases/{caseID}",resultType:"object",pathParams:{caseID:"测试用例ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{title:{type:"string",description:"用例标题"},module:{type:"integer",description:"所属模块",format:"int32"},story:{type:"integer",description:"相关需求",format:"int32"},pri:{type:"integer",description:"优先级",format:"int32"},type:{type:"string",description:"用例类型(unit 单元测试 | interface 接口测试 | feature 功能测试 | install 安装部署 | config 配置相关 | performance 性能测试 | security 安全相关 | other 其他)"},precondition:{type:"string",description:"前置条件"},steps:{type:"array",items:{type:"string"},description:'用例步骤, 如果是嵌套用例,可以通过key表示嵌套关系 {"1": "分组1", "1.1": "子分组1.1", "1.1.1": "步骤1.1.1"}'},expects:{type:"array",items:{type:"string"},description:'用例步骤期望, 如果是嵌套用例步骤,可以通过key表示嵌套关系 {"1": "", "1.1": "", "1.1.1": "步骤1.1.1的期望"}'},stepType:{type:"array",items:{type:"string"},description:'用例步骤类型(step 步骤 | group 父级步骤), 如果是嵌套用例步骤,可以通过key表示嵌套关系 {"1": "group", "1.1": "group", "1.1.1": "step"}'}},required:["title"]}}},{name:"updateModule",display:"修改用例模块",type:"update",method:"put",path:"/testcase/modules/{moduleID}",resultType:"object",pathParams:{moduleID:"模块ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{name:{type:"string",description:"模块名称"},parent:{type:"integer",description:"父模块",format:"int32"}}}}},{name:"delete",display:"删除测试用例",type:"delete",method:"delete",path:"/testcases/{caseID}",resultType:"text",pathParams:{caseID:"测试用例ID"}},{name:"deleteModule",display:"删除用例模块",type:"delete",method:"delete",path:"/testcase/modules/{moduleID}",resultType:"text",pathParams:{moduleID:"模块ID"}}]},{name:"task",display:"任务",description:"任务管理,支持获取任务列表,支持获取执行下的任务、执行的任务模块树、创建任务、获取任务详情、修改任务、修改任务模块、删除任务、删除任务模块、激活任务、关闭任务、完成任务、启动任务",actions:[{name:"list",display:"获取任务列表,支持获取执行下的任务",type:"list",method:"get",path:"/executions/{executionID}/tasks",resultType:"list",pagerGetter:"pager",resultGetter:"tasks",pathParams:{executionID:"所属执行ID"},params:[{name:"browseType",required:!1,type:"string",description:"状态,默认是unclosed",defaultValue:"unclosed",options:[{value:"all",label:"全部"},{value:"unclosed",label:"未关闭"},{value:"assignedtome",label:"指派给我"},{value:"assignedtome",label:"指派给我"},{value:"myinvolved",label:"由我参与"},{value:"assignedbyme",label:"由我指派"}]},{name:"orderBy",required:!1,type:"string",description:"排序",options:[{value:"id_asc",label:"ID 升序"},{value:"id_desc",label:"ID 降序"},{value:"name_asc",label:"名称 升序"},{value:"name_desc",label:"名称 降序"},{value:"status_asc",label:"状态 升序"},{value:"status_desc",label:"状态 降序"}]},{name:"recPerPage",required:!1,type:"number",description:"每页数量,不超过1000"},{name:"pageID",required:!1,type:"number",description:"页码,从第1页开始"}]},{name:"modules",display:"执行的任务模块树",type:"list",method:"get",path:"/executions/{executionID}/task/modules",resultType:"list",pathParams:{executionID:"执行ID"},resultGetter:"tree"},{name:"create",display:"创建任务",type:"create",method:"post",path:"/tasks",resultType:"object",requestBody:{required:!0,type:"object",schema:{type:"object",properties:{name:{type:"string",description:"任务名称"},executionID:{type:"integer",description:"所属执行",format:"int32"},type:{type:"string",description:"任务类型"},assignedTo:{type:"string",description:"指派给"},estStarted:{type:"string",description:"预计开始"},deadline:{type:"string",description:"截止日期"},pri:{type:"integer",description:"优先级",format:"int32"},estimate:{type:"number",description:"预计工时",format:"float"},module:{type:"integer",description:"所属模块",format:"int32"},story:{type:"integer",description:"相关需求",format:"int32"},desc:{type:"string",description:"任务描述"}},required:["name","executionID"]}}},{name:"get",display:"获取任务详情",type:"get",method:"get",path:"/tasks/{taskID}",resultType:"object",pathParams:{taskID:"任务ID"},resultGetter:"task"},{name:"update",display:"修改任务",type:"update",method:"put",path:"/tasks/{taskID}",resultType:"object",pathParams:{taskID:"任务ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{name:{type:"string",description:"任务名称"},type:{type:"string",description:"任务类型"},assignedTo:{type:"string",description:"指派给"},estStarted:{type:"string",description:"预计开始"},deadline:{type:"string",description:"截止日期"},pri:{type:"integer",description:"优先级",format:"int32"},estimate:{type:"number",description:"预计工时",format:"float"},module:{type:"integer",description:"所属模块",format:"int32"},story:{type:"integer",description:"相关需求",format:"int32"},desc:{type:"string",description:"任务描述"}}}}},{name:"updateModule",display:"修改任务模块",type:"update",method:"put",path:"/task/modules/{moduleID}",resultType:"object",pathParams:{moduleID:"模块ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{name:{type:"string",description:"模块名称"},parent:{type:"integer",description:"父模块",format:"int32"}}}}},{name:"delete",display:"删除任务",type:"delete",method:"delete",path:"/tasks/{taskID}",resultType:"text",pathParams:{taskID:"任务ID"}},{name:"deleteModule",display:"删除任务模块",type:"delete",method:"delete",path:"/task/modules/{moduleID}",resultType:"text",pathParams:{moduleID:"模块ID"}},{name:"activate",display:"激活任务",type:"action",method:"put",path:"/tasks/{taskID}/activate",resultType:"text",pathParams:{taskID:"任务ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{left:{type:"number",description:"预计剩余",format:"float"},assignedTo:{type:"string",description:"指派给"},comment:{type:"string",description:"备注"}}}}},{name:"close",display:"关闭任务",type:"action",method:"put",path:"/tasks/{taskID}/close",resultType:"text",pathParams:{taskID:"任务ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{comment:{type:"string",description:"备注"}}}}},{name:"finish",display:"完成任务",type:"action",method:"put",path:"/tasks/{taskID}/finish",resultType:"text",pathParams:{taskID:"任务ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{currentConsumed:{type:"number",description:"本次消耗",format:"float"},assignedTo:{type:"string",description:"指派给"},consumed:{type:"number",description:"总计消耗",format:"float"},realStarted:{type:"string",description:"实际开始,精确到秒"},finishedDate:{type:"string",description:"实际完成,精确到秒"},comment:{type:"string",description:"备注"}},required:["currentConsumed","realStarted","finishedDate"]}}},{name:"start",display:"启动任务",type:"action",method:"put",path:"/tasks/{taskID}/start",resultType:"text",pathParams:{taskID:"任务ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{assignedTo:{type:"string",description:"任务名称"},realStarted:{type:"string",description:"实际开始,精确到秒"},consumed:{type:"number",description:"总计消耗",format:"float"},left:{type:"number",description:"预计剩余",format:"float"},comment:{type:"string",description:"备注"}},required:["realStarted"]}}}]},{name:"issue",display:"问题",description:"问题管理,支持获取问题列表、获取项目问题列表、获取执行问题列表、创建问题、获取问题详情",actions:[{name:"list",display:"获取问题列表",type:"list",method:"get",path:"/issues",resultType:"list",pagerGetter:"pager",resultGetter:"issues",params:[{name:"browseType",required:!1,type:"string",description:"状态,默认是all",defaultValue:"all",options:[{value:"all",label:"全部"},{value:"open",label:"开放"},{value:"assignto",label:"指派给我"},{value:"assignby",label:"由我指派"},{value:"closed",label:"已关闭"},{value:"resolved",label:"已解决"},{value:"canceled",label:"已取消"}]},{name:"orderBy",required:!1,type:"string",description:"排序",options:[{value:"id_asc",label:"ID 升序"},{value:"id_desc",label:"ID 降序"},{value:"title_asc",label:"标题 升序"},{value:"title_desc",label:"标题 降序"},{value:"severity_asc",label:"严重程度 升序"},{value:"severity_desc",label:"严重程度 降序"},{value:"status_asc",label:"状态 升序"},{value:"status_desc",label:"状态 降序"}]},{name:"recPerPage",required:!1,type:"number",description:"每页数量,不超过1000"},{name:"pageID",required:!1,type:"number",description:"页码,从第1页开始"},{name:"filters",required:!1,type:"string",description:"搜索条件数组,每项包含 field/operator/value/join/group;field 必须是该接口支持的搜索字段,operator 使用该接口搜索配置支持的操作符。支持搜索字段:assignedDate,assignedTo,closedBy,closedDate,createdBy,createdDate,editedBy,editedDate,execution,id,pri,project,severity,status,title,type"},{name:"groupJoin",required:!1,type:"string",description:"条件组之间的连接方式",options:[{value:"and",label:"and"},{value:"or",label:"or"}]}]},{name:"projectIssues",display:"获取项目问题列表",type:"list",method:"get",path:"/projects/{projectID}/issues",resultType:"list",pagerGetter:"pager",resultGetter:"issues",pathParams:{projectID:"项目ID"},params:[{name:"browseType",required:!1,type:"string",description:"状态,默认是all",defaultValue:"all",options:[{value:"all",label:"全部"},{value:"open",label:"开放"},{value:"assignto",label:"指派给我"},{value:"assignby",label:"由我指派"},{value:"closed",label:"已关闭"},{value:"resolved",label:"已解决"},{value:"canceled",label:"已取消"}]},{name:"orderBy",required:!1,type:"string",description:"排序",options:[{value:"id_asc",label:"ID 升序"},{value:"id_desc",label:"ID 降序"},{value:"title_asc",label:"标题 升序"},{value:"title_desc",label:"标题 降序"},{value:"severity_asc",label:"严重程度 升序"},{value:"severity_desc",label:"严重程度 降序"},{value:"status_asc",label:"状态 升序"},{value:"status_desc",label:"状态 降序"}]},{name:"recPerPage",required:!1,type:"number",description:"每页数量,不超过1000"},{name:"pageID",required:!1,type:"number",description:"页码,从第1页开始"},{name:"filters",required:!1,type:"string",description:"搜索条件数组,每项包含 field/operator/value/join/group;field 必须是该接口支持的搜索字段,operator 使用该接口搜索配置支持的操作符。支持搜索字段:assignedDate,assignedTo,closedBy,closedDate,createdBy,createdDate,editedBy,editedDate,execution,id,pri,project,severity,status,title,type"},{name:"groupJoin",required:!1,type:"string",description:"条件组之间的连接方式",options:[{value:"and",label:"and"},{value:"or",label:"or"}]}]},{name:"executionIssues",display:"获取执行问题列表",type:"list",method:"get",path:"/executions/{executionID}/issues",resultType:"list",pagerGetter:"pager",resultGetter:"issues",pathParams:{executionID:"执行ID"},params:[{name:"browseType",required:!1,type:"string",description:"状态,默认是all",defaultValue:"all",options:[{value:"all",label:"全部"},{value:"open",label:"开放"},{value:"assignto",label:"指派给我"},{value:"assignby",label:"由我指派"},{value:"closed",label:"已关闭"},{value:"resolved",label:"已解决"},{value:"canceled",label:"已取消"}]},{name:"orderBy",required:!1,type:"string",description:"排序",options:[{value:"id_asc",label:"ID 升序"},{value:"id_desc",label:"ID 降序"},{value:"title_asc",label:"标题 升序"},{value:"title_desc",label:"标题 降序"},{value:"severity_asc",label:"严重程度 升序"},{value:"severity_desc",label:"严重程度 降序"},{value:"status_asc",label:"状态 升序"},{value:"status_desc",label:"状态 降序"}]},{name:"recPerPage",required:!1,type:"number",description:"每页数量,不超过1000"},{name:"pageID",required:!1,type:"number",description:"页码,从第1页开始"},{name:"filters",required:!1,type:"string",description:"搜索条件数组,每项包含 field/operator/value/join/group;field 必须是该接口支持的搜索字段,operator 使用该接口搜索配置支持的操作符。支持搜索字段:assignedDate,assignedTo,closedBy,closedDate,createdBy,createdDate,editedBy,editedDate,execution,id,pri,project,severity,status,title,type"},{name:"groupJoin",required:!1,type:"string",description:"条件组之间的连接方式",options:[{value:"and",label:"and"},{value:"or",label:"or"}]}]},{name:"create",display:"创建问题",type:"create",method:"post",path:"/issues",resultType:"object",requestBody:{required:!0,type:"object",schema:{type:"object",properties:{objectID:{type:"integer",description:"所属项目",format:"int32"},from:{type:"integer",description:"来源,0 表示直接创建",format:"int32"},title:{type:"string",description:"问题名称"},type:{type:"string",description:"类型(design 设计问题 | code 程序缺陷 | performance 性能问题 | version 版本控制 | storyadd 需求新增 | storychanged 需求修改 | storyremoved 需求删除 | data 数据问题)"},severity:{type:"integer",description:"严重程度(1 严重 | 2 较严重 | 3 较小 | 4 建议)",format:"int32"},pri:{type:"integer",description:"优先级(1-4)",format:"int32"},execution:{type:"integer",description:"所属执行",format:"int32"},assignedTo:{type:"string",description:"指派给"},owner:{type:"string",description:"提出人"},deadline:{type:"string",description:"计划解决日期"},desc:{type:"string",description:"描述"}},required:["objectID","title","type","severity"]}}},{name:"get",display:"获取问题详情",type:"get",method:"get",path:"/issues/{issueID}",resultType:"object",resultGetter:"issue",pathParams:{issueID:"问题ID"}}]},{name:"risk",display:"风险",description:"风险管理,支持获取风险列表、获取项目风险列表、获取执行风险列表、创建风险、获取风险详情、修改风险",actions:[{name:"list",display:"获取风险列表",type:"list",method:"get",path:"/risks",resultType:"list",pagerGetter:"pager",resultGetter:"risks",params:[{name:"browseType",required:!1,type:"string",description:"状态,默认是all",defaultValue:"all",options:[{value:"all",label:"全部"},{value:"active",label:"开放"},{value:"assignTo",label:"指派给我"},{value:"assignBy",label:"由我指派"},{value:"closed",label:"已关闭"},{value:"hangup",label:"已挂起"},{value:"canceled",label:"已取消"}]},{name:"orderBy",required:!1,type:"string",description:"排序",options:[{value:"id_asc",label:"ID 升序"},{value:"id_desc",label:"ID 降序"},{value:"name_asc",label:"名称 升序"},{value:"name_desc",label:"名称 降序"},{value:"status_asc",label:"状态 升序"},{value:"status_desc",label:"状态 降序"},{value:"pri_asc",label:"优先级 升序"},{value:"pri_desc",label:"优先级 降序"}]},{name:"recPerPage",required:!1,type:"number",description:"每页数量,不超过1000"},{name:"pageID",required:!1,type:"number",description:"页码,从第1页开始"},{name:"filters",required:!1,type:"string",description:"搜索条件数组,每项包含 field/operator/value/join/group;field 必须是该接口支持的搜索字段,operator 使用该接口搜索配置支持的操作符。支持搜索字段:activateBy,actualClosedDate,assignedTo,cancelBy,category,createdBy,createdDate,editedBy,editedDate,hangupBy,id,identifiedDate,impact,name,plannedClosedDate,prevention,pri,probability,project,rate,remedy,resolution,resolvedBy,source,status,strategy,trackedBy"},{name:"groupJoin",required:!1,type:"string",description:"条件组之间的连接方式",options:[{value:"and",label:"and"},{value:"or",label:"or"}]}]},{name:"projectRisks",display:"获取项目风险列表",type:"list",method:"get",path:"/projects/{projectID}/risks",resultType:"list",pagerGetter:"pager",resultGetter:"risks",pathParams:{projectID:"项目ID"},params:[{name:"browseType",required:!1,type:"string",description:"状态,默认是all",defaultValue:"all",options:[{value:"all",label:"全部"},{value:"active",label:"开放"},{value:"assignTo",label:"指派给我"},{value:"assignBy",label:"由我指派"},{value:"closed",label:"已关闭"},{value:"hangup",label:"已挂起"},{value:"canceled",label:"已取消"}]},{name:"orderBy",required:!1,type:"string",description:"排序",options:[{value:"id_asc",label:"ID 升序"},{value:"id_desc",label:"ID 降序"},{value:"name_asc",label:"名称 升序"},{value:"name_desc",label:"名称 降序"},{value:"status_asc",label:"状态 升序"},{value:"status_desc",label:"状态 降序"},{value:"pri_asc",label:"优先级 升序"},{value:"pri_desc",label:"优先级 降序"}]},{name:"recPerPage",required:!1,type:"number",description:"每页数量,不超过1000"},{name:"pageID",required:!1,type:"number",description:"页码,从第1页开始"},{name:"filters",required:!1,type:"string",description:"搜索条件数组,每项包含 field/operator/value/join/group;field 必须是该接口支持的搜索字段,operator 使用该接口搜索配置支持的操作符。支持搜索字段:activateBy,actualClosedDate,assignedTo,cancelBy,category,createdBy,createdDate,editedBy,editedDate,hangupBy,id,identifiedDate,impact,name,plannedClosedDate,prevention,pri,probability,project,rate,remedy,resolution,resolvedBy,source,status,strategy,trackedBy"},{name:"groupJoin",required:!1,type:"string",description:"条件组之间的连接方式",options:[{value:"and",label:"and"},{value:"or",label:"or"}]}]},{name:"executionRisks",display:"获取执行风险列表",type:"list",method:"get",path:"/executions/{executionID}/risks",resultType:"list",pagerGetter:"pager",resultGetter:"risks",pathParams:{executionID:"执行ID"},params:[{name:"browseType",required:!1,type:"string",description:"状态,默认是all",defaultValue:"all",options:[{value:"all",label:"全部"},{value:"active",label:"开放"},{value:"assignTo",label:"指派给我"},{value:"assignBy",label:"由我指派"},{value:"closed",label:"已关闭"},{value:"hangup",label:"已挂起"},{value:"canceled",label:"已取消"}]},{name:"orderBy",required:!1,type:"string",description:"排序",options:[{value:"id_asc",label:"ID 升序"},{value:"id_desc",label:"ID 降序"},{value:"name_asc",label:"名称 升序"},{value:"name_desc",label:"名称 降序"},{value:"status_asc",label:"状态 升序"},{value:"status_desc",label:"状态 降序"},{value:"pri_asc",label:"优先级 升序"},{value:"pri_desc",label:"优先级 降序"}]},{name:"recPerPage",required:!1,type:"number",description:"每页数量,不超过1000"},{name:"pageID",required:!1,type:"number",description:"页码,从第1页开始"},{name:"filters",required:!1,type:"string",description:"搜索条件数组,每项包含 field/operator/value/join/group;field 必须是该接口支持的搜索字段,operator 使用该接口搜索配置支持的操作符。支持搜索字段:activateBy,actualClosedDate,assignedTo,cancelBy,category,createdBy,createdDate,editedBy,editedDate,hangupBy,id,identifiedDate,impact,name,plannedClosedDate,prevention,pri,probability,project,rate,remedy,resolution,resolvedBy,source,status,strategy,trackedBy"},{name:"groupJoin",required:!1,type:"string",description:"条件组之间的连接方式",options:[{value:"and",label:"and"},{value:"or",label:"or"}]}]},{name:"create",display:"创建风险",type:"create",method:"post",path:"/risks",resultType:"object",requestBody:{required:!0,type:"object",schema:{type:"object",properties:{project:{type:"integer",description:"所属项目",format:"int32"},name:{type:"string",description:"风险名称"},execution:{type:"integer",description:"所属执行",format:"int32"},source:{type:"string",description:"来源(business 业务部门 | team 项目组 | logistic 项目保障科室 | manage 管理层 | sourcing 供应商-采购 | outsourcing 供应商-外包 | customer 外部客户 | others 其他)"},category:{type:"string",description:"类型(technical 技术类 | manage 管理类 | business 业务类 | requirement 需求类 | resource 资源类 | others 其他)"},strategy:{type:"string",description:"策略(avoidance 规避 | mitigation 缓解 | transference 转移 | acceptance 接受)"},impact:{type:"integer",description:"影响程度(1-5)",format:"int32"},probability:{type:"integer",description:"发生概率(1-5)",format:"int32"},rate:{type:"integer",description:"风险系数",format:"int32"},pri:{type:"integer",description:"优先级(1 高 | 2 中 | 3 低)",format:"int32"},identifiedDate:{type:"string",description:"识别日期"},plannedClosedDate:{type:"string",description:"计划关闭日期"},assignedTo:{type:"string",description:"指派给"},prevention:{type:"string",description:"应对措施"},remedy:{type:"string",description:"响应措施"}},required:["project","name","impact","probability","pri"]}}},{name:"get",display:"获取风险详情",type:"get",method:"get",path:"/risks/{riskID}",resultType:"object",resultGetter:"risk",pathParams:{riskID:"风险ID"}},{name:"update",display:"修改风险",type:"update",method:"put",path:"/risks/{riskID}",resultType:"object",pathParams:{riskID:"风险ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{name:{type:"string",description:"风险名称"},source:{type:"string",description:"来源(business 业务部门 | team 项目组 | logistic 项目保障科室 | manage 管理层 | sourcing 供应商-采购 | outsourcing 供应商-外包 | customer 外部客户 | others 其他)"},category:{type:"string",description:"类型(technical 技术类 | manage 管理类 | business 业务类 | requirement 需求类 | resource 资源类 | others 其他)"},strategy:{type:"string",description:"策略(avoidance 规避 | mitigation 缓解 | transference 转移 | acceptance 接受)"},impact:{type:"integer",description:"影响程度(1-5)",format:"int32"},probability:{type:"integer",description:"发生概率(1-5)",format:"int32"},rate:{type:"integer",description:"风险系数",format:"int32"},pri:{type:"integer",description:"优先级(1 高 | 2 中 | 3 低)",format:"int32"},identifiedDate:{type:"string",description:"识别日期"},plannedClosedDate:{type:"string",description:"计划关闭日期"},assignedTo:{type:"string",description:"指派给"},prevention:{type:"string",description:"应对措施"},remedy:{type:"string",description:"响应措施"},resolution:{type:"string",description:"解决措施"}},required:["name"]}}}]},{name:"meeting",display:"会议",description:"会议管理,支持获取会议列表、获取项目会议列表、获取执行会议列表、创建会议、获取会议详情、修改会议、删除会议、编辑会议纪要",actions:[{name:"list",display:"获取会议列表",type:"list",method:"get",path:"/meetings",resultType:"list",pagerGetter:"pager",resultGetter:"meetings",params:[{name:"browseType",required:!1,type:"string",description:"状态,默认是all",defaultValue:"all",options:[{value:"all",label:"全部"},{value:"booked",label:"我预约的"},{value:"participate",label:"我参加的"}]},{name:"orderBy",required:!1,type:"string",description:"排序",options:[{value:"id_asc",label:"ID 升序"},{value:"id_desc",label:"ID 降序"},{value:"name_asc",label:"名称 升序"},{value:"name_desc",label:"名称 降序"},{value:"date_asc",label:"日期 升序"},{value:"date_desc",label:"日期 降序"}]},{name:"recPerPage",required:!1,type:"number",description:"每页数量,不超过1000"},{name:"pageID",required:!1,type:"number",description:"页码,从第1页开始"},{name:"filters",required:!1,type:"string",description:"搜索条件数组,每项包含 field/operator/value/join/group;field 必须是该接口支持的搜索字段,operator 使用该接口搜索配置支持的操作符。支持搜索字段:begin,createdBy,createdDate,date,dept,editedBy,editedDate,end,execution,host,id,minutedBy,minutedDate,mode,name,project,room"},{name:"groupJoin",required:!1,type:"string",description:"条件组之间的连接方式",options:[{value:"and",label:"and"},{value:"or",label:"or"}]}]},{name:"projectMeetings",display:"获取项目会议列表",type:"list",method:"get",path:"/projects/{projectID}/meetings",resultType:"list",pagerGetter:"pager",resultGetter:"meetings",pathParams:{projectID:"项目ID"},params:[{name:"browseType",required:!1,type:"string",description:"状态,默认是all",defaultValue:"all",options:[{value:"all",label:"全部"},{value:"booked",label:"我预约的"},{value:"participate",label:"我参加的"}]},{name:"orderBy",required:!1,type:"string",description:"排序",options:[{value:"id_asc",label:"ID 升序"},{value:"id_desc",label:"ID 降序"},{value:"name_asc",label:"名称 升序"},{value:"name_desc",label:"名称 降序"},{value:"date_asc",label:"日期 升序"},{value:"date_desc",label:"日期 降序"}]},{name:"recPerPage",required:!1,type:"number",description:"每页数量,不超过1000"},{name:"pageID",required:!1,type:"number",description:"页码,从第1页开始"},{name:"filters",required:!1,type:"string",description:"搜索条件数组,每项包含 field/operator/value/join/group;field 必须是该接口支持的搜索字段,operator 使用该接口搜索配置支持的操作符。支持搜索字段:begin,createdBy,createdDate,date,dept,editedBy,editedDate,end,execution,host,id,minutedBy,minutedDate,mode,name,project,room"},{name:"groupJoin",required:!1,type:"string",description:"条件组之间的连接方式",options:[{value:"and",label:"and"},{value:"or",label:"or"}]}]},{name:"executionMeetings",display:"获取执行会议列表",type:"list",method:"get",path:"/executions/{executionID}/meetings",resultType:"list",pagerGetter:"pager",resultGetter:"meetings",pathParams:{executionID:"执行ID"},params:[{name:"browseType",required:!1,type:"string",description:"状态,默认是all",defaultValue:"all",options:[{value:"all",label:"全部"},{value:"booked",label:"我预约的"},{value:"participate",label:"我参加的"}]},{name:"orderBy",required:!1,type:"string",description:"排序",options:[{value:"id_asc",label:"ID 升序"},{value:"id_desc",label:"ID 降序"},{value:"name_asc",label:"名称 升序"},{value:"name_desc",label:"名称 降序"},{value:"date_asc",label:"日期 升序"},{value:"date_desc",label:"日期 降序"}]},{name:"recPerPage",required:!1,type:"number",description:"每页数量,不超过1000"},{name:"pageID",required:!1,type:"number",description:"页码,从第1页开始"},{name:"filters",required:!1,type:"string",description:"搜索条件数组,每项包含 field/operator/value/join/group;field 必须是该接口支持的搜索字段,operator 使用该接口搜索配置支持的操作符。支持搜索字段:begin,createdBy,createdDate,date,dept,editedBy,editedDate,end,execution,host,id,minutedBy,minutedDate,mode,name,project,room"},{name:"groupJoin",required:!1,type:"string",description:"条件组之间的连接方式",options:[{value:"and",label:"and"},{value:"or",label:"or"}]}]},{name:"create",display:"创建会议",type:"create",method:"post",path:"/meetings",resultType:"object",requestBody:{required:!0,type:"object",schema:{type:"object",properties:{project:{type:"integer",description:"所属项目",format:"int32"},execution:{type:"integer",description:"所属执行",format:"int32"},name:{type:"string",description:"会议名称"},begin:{type:"string",description:"开始时间"},end:{type:"string",description:"结束时间"},mode:{type:"string",description:"会议模式(online 线上 | outline 线下 | both 线上+线下)"},host:{type:"string",description:"主持人"},participant:{type:"array",items:{type:"string"},description:"参会人员"},room:{type:"integer",description:"会议室",format:"int32"},dept:{type:"integer",description:"所属部门",format:"int32"},objectType:{type:"string",description:"关联类型(story | task | bug | issue | risk | opportunity)"},objectID:{type:"integer",description:"关联对象",format:"int32"}},required:["project","name","begin","end","mode","host","participant"]}}},{name:"get",display:"获取会议详情",type:"get",method:"get",path:"/meetings/{meetingID}",resultType:"object",resultGetter:"meeting",pathParams:{meetingID:"会议ID"}},{name:"update",display:"修改会议",type:"update",method:"put",path:"/meetings/{meetingID}",resultType:"object",pathParams:{meetingID:"会议ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{name:{type:"string",description:"会议名称"},begin:{type:"string",description:"开始时间"},end:{type:"string",description:"结束时间"},mode:{type:"string",description:"会议模式(online 线上 | outline 线下 | both 线上+线下)"},host:{type:"string",description:"主持人"},participant:{type:"array",items:{type:"string"},description:"参会人员"},room:{type:"integer",description:"会议室",format:"int32"},dept:{type:"integer",description:"所属部门",format:"int32"},objectType:{type:"string",description:"关联类型(story | task | bug | issue | risk | opportunity)"},objectID:{type:"integer",description:"关联对象",format:"int32"}},required:["name","begin","end","mode","host","participant"]}}},{name:"delete",display:"删除会议",type:"delete",method:"delete",path:"/meetings/{meetingID}",resultType:"text",pathParams:{meetingID:"会议ID"}},{name:"minutes",display:"编辑会议纪要",type:"action",method:"put",path:"/meetings/{meetingID}/minutes",resultType:"text",pathParams:{meetingID:"会议ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{minutes:{type:"string",description:"会议纪要"}}}}}]},{name:"feedback",display:"反馈",description:"反馈管理,支持获取反馈列表,支持获取产品下的反馈、创建反馈、反馈转Bug、反馈转工单、反馈转待办、反馈转需求、反馈转任务、获取反馈详情、修改反馈、删除反馈、激活反馈、关闭反馈",actions:[{name:"list",display:"获取反馈列表,支持获取产品下的反馈",type:"list",method:"get",path:"/products/{productID}/feedbacks",resultType:"list",pagerGetter:"pager",resultGetter:"feedbacks",pathParams:{productID:"所属产品ID"},params:[{name:"browseType",required:!1,type:"string",description:"状态,默认是wait",defaultValue:"wait",options:[{value:"all",label:"全部"},{value:"wait",label:"待处理"},{value:"doing",label:"处理中"},{value:"toclosed",label:"待关闭"},{value:"review",label:"待评审"},{value:"assigntome",label:"指派给我"},{value:"openedbyme",label:"由我反馈"}]},{name:"orderBy",required:!1,type:"string",description:"排序",options:[{value:"id_asc",label:"ID 升序"},{value:"id_desc",label:"ID 降序"},{value:"title_asc",label:"标题 升序"},{value:"title_desc",label:"标题 降序"},{value:"status_asc",label:"状态 升序"},{value:"status_desc",label:"状态 降序"}]},{name:"recPerPage",required:!1,type:"number",description:"每页数量,不超过1000"},{name:"pageID",required:!1,type:"number",description:"页码,从第1页开始"},{name:"filters",required:!1,type:"string",description:"搜索条件数组,每项包含 field/operator/value/join/group;field 必须是该接口支持的搜索字段,operator 使用该接口搜索配置支持的操作符。支持搜索字段:activatedBy,activatedDate,assignedTo,closedBy,closedDate,closedReason,desc,feedbackBy,id,keywords,mailto,module,notifyEmail,openedBy,openedDate,pri,processedBy,processedDate,product,public,reviewedBy,solution,source,status,title,type"},{name:"groupJoin",required:!1,type:"string",description:"条件组之间的连接方式",options:[{value:"and",label:"and"},{value:"or",label:"or"}]}]},{name:"create",display:"创建反馈",type:"create",method:"post",path:"/feedbacks",resultType:"object",requestBody:{required:!0,type:"object",schema:{type:"object",properties:{product:{type:"integer",description:"所属产品",format:"int32"},title:{type:"string",description:"标题"},module:{type:"integer",description:"所属模块",format:"int32"},type:{type:"string",description:"类型(story 需求 | task 任务 | bug Bug | todo 待办 | advice 建议 | issue 问题 | risk 风险 | opportunity 机会)"},desc:{type:"string",description:"描述"},feedbackBy:{type:"string",description:"反馈者"},source:{type:"string",description:"来源"}},required:["product","title"]}}},{name:"createBug",display:"反馈转Bug",type:"create",method:"post",path:"/feedbacks/{feedbackID}/bugs",resultType:"object",pathParams:{feedbackID:"反馈ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{productID:{type:"integer",description:"所属产品",format:"int32"},title:{type:"string",description:"Bug标题"},openedBuild:{type:"array",items:{type:"string"},description:"影响版本,主干是trunk,其他版本使用版本ID"},severity:{type:"integer",description:"严重程度(1-4)",format:"int32"},pri:{type:"integer",description:"优先级",format:"int32"},type:{type:"string",description:"Bug类型(codeerror 代码错误 | config 配置相关 | install 安装部署 | security 安全相关 | performance 性能问题 | standard 标准规范 | automation 测试脚本 | designdefect 设计缺陷 | others 其他)"},steps:{type:"string",description:"重现步骤"}},required:["productID","title","openedBuild"]}}},{name:"createTicket",display:"反馈转工单",type:"create",method:"post",path:"/feedbacks/{feedbackID}/tickets",resultType:"object",pathParams:{feedbackID:"反馈ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{product:{type:"integer",description:"所属产品",format:"int32"},module:{type:"integer",description:"所属模块",format:"int32"},title:{type:"string",description:"工单标题"},type:{type:"string",description:"类型(code 程序报错 | data 数据错误 | stuck 流程卡断 | security 安全问题 | affair 事务)"},desc:{type:"string",description:"工单描述"}},required:["product","module","title"]}}},{name:"createTodo",display:"反馈转待办",type:"create",method:"post",path:"/feedbacks/{feedbackID}/todos",resultType:"object",pathParams:{feedbackID:"反馈ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{date:{type:"string",description:"日期"},name:{type:"string",description:"待办名称"}},required:["date","name"]}}},{name:"createStory",display:"反馈转需求",type:"create",method:"post",path:"/feedbacks/{feedbackID}/stories",resultType:"object",pathParams:{feedbackID:"反馈ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{productID:{type:"integer",description:"所属产品",format:"int32"},title:{type:"string",description:"需求标题"},spec:{type:"string",description:"需求描述"},pri:{type:"integer",description:"优先级",format:"int32"},category:{type:"string",description:"类别"}},required:["productID","title"]}}},{name:"createTask",display:"反馈转任务",type:"create",method:"post",path:"/feedbacks/{feedbackID}/tasks",resultType:"object",pathParams:{feedbackID:"反馈ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{executionID:{type:"integer",description:"所属执行",format:"int32"},name:{type:"string",description:"任务名称"},type:{type:"string",description:"任务类型"},assignedTo:{type:"string",description:"指派给"},estStarted:{type:"string",description:"预计开始"},deadline:{type:"string",description:"截止日期"},desc:{type:"string",description:"任务描述"}},required:["executionID","name"]}}},{name:"get",display:"获取反馈详情",type:"get",method:"get",path:"/feedbacks/{feedbackID}",resultType:"object",resultGetter:"feedback",pathParams:{feedbackID:"反馈ID"}},{name:"update",display:"修改反馈",type:"update",method:"put",path:"/feedbacks/{feedbackID}",resultType:"object",pathParams:{feedbackID:"反馈ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{product:{type:"integer",description:"所属产品",format:"int32"},module:{type:"integer",description:"所属模块",format:"int32"},title:{type:"string",description:"标题"},type:{type:"string",description:"类型(story 需求 | task 任务 | bug Bug | todo 待办 | advice 建议 | issue 问题 | risk 风险 | opportunity 机会)"},desc:{type:"string",description:"描述"},feedbackBy:{type:"string",description:"反馈者"},source:{type:"string",description:"来源"}},required:["product","title"]}}},{name:"delete",display:"删除反馈",type:"delete",method:"delete",path:"/feedbacks/{feedbackID}",resultType:"text",pathParams:{feedbackID:"反馈ID"}},{name:"activate",display:"激活反馈",type:"action",method:"put",path:"/feedbacks/{feedbackID}/activate",resultType:"text",pathParams:{feedbackID:"反馈ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{assignedTo:{type:"string",description:"指派给"},comment:{type:"string",description:"备注"}}}}},{name:"close",display:"关闭反馈",type:"action",method:"put",path:"/feedbacks/{feedbackID}/close",resultType:"text",pathParams:{feedbackID:"反馈ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{closedReason:{type:"string",description:"关闭原因(commented 已处理 | repeat 重复 | refuse 不予采纳)"},comment:{type:"string",description:"备注"},confirmClose:{type:"string",description:"存在未关闭转化对象时是否强制关闭"}},required:["closedReason"]}}}]},{name:"ticket",display:"工单",description:"工单管理,支持获取工单列表,支持获取产品下的工单、创建工单、工单转需求、工单转Bug、获取工单详情、修改工单、删除工单、激活工单、关闭工单",actions:[{name:"list",display:"获取工单列表,支持获取产品下的工单",type:"list",method:"get",path:"/products/{productID}/tickets",resultType:"list",pagerGetter:"pager",resultGetter:"tickets",pathParams:{productID:"所属产品ID"},params:[{name:"browseType",required:!1,type:"string",description:"状态,默认是wait",defaultValue:"wait",options:[{value:"all",label:"全部"},{value:"unclosed",label:"未关闭"},{value:"wait",label:"待处理"},{value:"doing",label:"处理中"},{value:"done",label:"待关闭"},{value:"finishedbyme",label:"由我解决"},{value:"assigntome",label:"指派给我"},{value:"openedbyme",label:"由我创建"}]},{name:"orderBy",required:!1,type:"string",description:"排序",options:[{value:"id_asc",label:"ID 升序"},{value:"id_desc",label:"ID 降序"},{value:"title_asc",label:"标题 升序"},{value:"title_desc",label:"标题 降序"},{value:"status_asc",label:"状态 升序"},{value:"status_desc",label:"状态 降序"}]},{name:"recPerPage",required:!1,type:"number",description:"每页数量,不超过1000"},{name:"pageID",required:!1,type:"number",description:"页码,从第1页开始"},{name:"filters",required:!1,type:"string",description:"搜索条件数组,每项包含 field/operator/value/join/group;field 必须是该接口支持的搜索字段,operator 使用该接口搜索配置支持的操作符。支持搜索字段:activatedBy,activatedCount,activatedDate,assignedTo,closedBy,closedDate,closedReason,contact,customer,deadline,desc,editedBy,editedDate,feedback,id,keywords,mailto,module,notifyEmail,openedBuild,openedBy,openedDate,pri,product,resolution,resolvedBy,resolvedDate,startedBy,startedDate,status,title,type"},{name:"groupJoin",required:!1,type:"string",description:"条件组之间的连接方式",options:[{value:"and",label:"and"},{value:"or",label:"or"}]}]},{name:"create",display:"创建工单",type:"create",method:"post",path:"/tickets",resultType:"object",requestBody:{required:!0,type:"object",schema:{type:"object",properties:{product:{type:"integer",description:"所属产品",format:"int32"},module:{type:"integer",description:"所属模块",format:"int32"},title:{type:"string",description:"标题"},type:{type:"string",description:"类型(code 程序报错 | data 数据错误 | stuck 流程卡断 | security 安全问题 | affair 事务)"},desc:{type:"string",description:"描述"},assignedTo:{type:"string",description:"指派给"},deadline:{type:"string",description:"截止日期"},openedBuild:{type:"array",items:{type:"string"},description:"影响版本"}},required:["product","title"]}}},{name:"createStory",display:"工单转需求",type:"create",method:"post",path:"/tickets/{ticketID}/stories",resultType:"object",pathParams:{ticketID:"工单ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{productID:{type:"integer",description:"所属产品",format:"int32"},title:{type:"string",description:"需求标题"},spec:{type:"string",description:"需求描述"},pri:{type:"integer",description:"优先级",format:"int32"},category:{type:"string",description:"类别"}},required:["productID","title"]}}},{name:"createBug",display:"工单转Bug",type:"create",method:"post",path:"/tickets/{ticketID}/bugs",resultType:"object",pathParams:{ticketID:"工单ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{productID:{type:"integer",description:"所属产品",format:"int32"},title:{type:"string",description:"Bug标题"},openedBuild:{type:"array",items:{type:"string"},description:"影响版本,主干是trunk,其他版本使用版本ID"},severity:{type:"integer",description:"严重程度(1-4)",format:"int32"},pri:{type:"integer",description:"优先级",format:"int32"},type:{type:"string",description:"Bug类型(codeerror 代码错误 | config 配置相关 | install 安装部署 | security 安全相关 | performance 性能问题 | standard 标准规范 | automation 测试脚本 | designdefect 设计缺陷 | others 其他)"},steps:{type:"string",description:"重现步骤"}},required:["productID","title","openedBuild"]}}},{name:"get",display:"获取工单详情",type:"get",method:"get",path:"/tickets/{ticketID}",resultType:"object",resultGetter:"ticket",pathParams:{ticketID:"工单ID"}},{name:"update",display:"修改工单",type:"update",method:"put",path:"/tickets/{ticketID}",resultType:"object",pathParams:{ticketID:"工单ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{product:{type:"integer",description:"所属产品",format:"int32"},module:{type:"integer",description:"所属模块",format:"int32"},title:{type:"string",description:"标题"},type:{type:"string",description:"类型(code 程序报错 | data 数据错误 | stuck 流程卡断 | security 安全问题 | affair 事务)"},desc:{type:"string",description:"描述"},assignedTo:{type:"string",description:"指派给"},deadline:{type:"string",description:"截止日期"},openedBuild:{type:"array",items:{type:"string"},description:"影响版本"}}}}},{name:"delete",display:"删除工单",type:"delete",method:"delete",path:"/tickets/{ticketID}",resultType:"text",pathParams:{ticketID:"工单ID"}},{name:"activate",display:"激活工单",type:"action",method:"put",path:"/tickets/{ticketID}/activate",resultType:"text",pathParams:{ticketID:"工单ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{assignedTo:{type:"string",description:"指派给"},comment:{type:"string",description:"备注"}}}}},{name:"close",display:"关闭工单",type:"action",method:"put",path:"/tickets/{ticketID}/close",resultType:"text",pathParams:{ticketID:"工单ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{closedReason:{type:"string",description:"关闭原因(commented 已处理 | repeat 重复 | refuse 不予处理)"},comment:{type:"string",description:"备注"}},required:["closedReason","comment"]}}}]},{name:"system",display:"应用",description:"应用管理,支持获取应用列表,支持获取产品下的应用、创建应用、修改应用",actions:[{name:"list",display:"获取应用列表,支持获取产品下的应用",type:"list",method:"get",path:"/products/{productID}/systems",resultType:"list",pagerGetter:"pager",pathParams:{productID:"所属产品ID"},params:[{name:"orderBy",required:!1,type:"string",description:"排序",options:[{value:"id_asc",label:"ID 升序"},{value:"id_desc",label:"ID 降序"},{value:"name_asc",label:"名称 升序"},{value:"name_desc",label:"名称 降序"},{value:"status_asc",label:"状态 升序"},{value:"status_desc",label:"状态 降序"}]},{name:"recPerPage",required:!1,type:"number",description:"每页数量,不超过1000"},{name:"pageID",required:!1,type:"number",description:"页码,从第1页开始"}],resultGetter:"systems"},{name:"create",display:"创建应用",type:"create",method:"post",path:"/systems",resultType:"object",requestBody:{required:!0,type:"object",schema:{type:"object",properties:{productID:{type:"integer",description:"所属产品",format:"int32"},integrated:{type:"integer",description:"是否集成应用(0 否| 1 是)",format:"int32"},children:{type:"array",items:{type:"string"},description:"集成应用需要包含其他应用,非集成应用传空数组[]"},name:{type:"string",description:"应用名称"},desc:{type:"string",description:"描述"}},required:["productID","integrated","children","name"]}}},{name:"update",display:"修改应用",type:"update",method:"put",path:"/systems/{systemID}",resultType:"object",pathParams:{systemID:"应用ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{name:{type:"string",description:"应用名称"},children:{type:"array",items:{type:"string"},description:"集成应用需要包含其他应用,非集成应用传空数组[]"},desc:{type:"string",description:"描述"}},required:["name","children"]}}}]},{name:"build",display:"版本",description:"版本管理,支持获取版本列表,支持获取项目/执行下的版本、创建版本/构建、修改版本、删除版本",actions:[{name:"list",display:"获取版本列表,支持获取项目/执行下的版本",type:"list",method:"get",path:"/{scope}/{scopeID}/builds",resultType:"list",pagerGetter:"pager",resultGetter:"builds",pathParams:{scope:{description:"版本所属范围",options:[{value:"projects",label:"项目"},{value:"executions",label:"执行"}]},scopeID:"所属范围ID"},params:[{name:"browseType",required:!1,type:"string",description:"状态,默认是all",defaultValue:"all",options:[{value:"all",label:"全部"},{value:"active",label:"有效"},{value:"closed",label:"已关闭"}]},{name:"orderBy",required:!1,type:"string",description:"排序",options:[{value:"id_asc",label:"ID 升序"},{value:"id_desc",label:"ID 降序"},{value:"name_asc",label:"名称 升序"},{value:"name_desc",label:"名称 降序"},{value:"date_asc",label:"日期 升序"},{value:"date_desc",label:"日期 降序"}]},{name:"recPerPage",required:!1,type:"number",description:"每页数量,不超过1000"},{name:"pageID",required:!1,type:"number",description:"页码,从第1页开始"},{name:"filters",required:!1,type:"string",description:"搜索条件数组,每项包含 field/operator/value/join/group;field 必须是该接口支持的搜索字段,operator 使用该接口搜索配置支持的操作符。支持搜索字段:name(名称,示例:关键字);system(所属应用,示例:all);id(ID,示例:1);product(所属产品,产品,示例:1);scmPath(源代码地址,示例:关键字);filePath(下载地址,示例:关键字);date(打包日期,示例:2026-01-01);builder(构建者,用户,示例:admin);desc(描述,示例:关键字)"},{name:"groupJoin",required:!1,type:"string",description:"条件组之间的连接方式",options:[{value:"and",label:"and"},{value:"or",label:"or"}]}]},{name:"create",display:"创建版本/构建",type:"create",method:"post",path:"/builds",resultType:"object",requestBody:{required:!0,type:"object",schema:{type:"object",properties:{executionID:{type:"integer",description:"所属执行/迭代",format:"int32"},product:{type:"integer",description:"所属产品",format:"int32"},name:{type:"string",description:"构建名称"},system:{type:"integer",description:"所属应用",format:"int32"},builder:{type:"string",description:"构建者"},date:{type:"string",description:"打包日期"},scmPath:{type:"string",description:"源代码地址"},filePath:{type:"string",description:"下载地址"},desc:{type:"string",description:"描述"}},required:["executionID","product","name","system","builder","date"]}}},{name:"update",display:"修改版本",type:"update",method:"put",path:"/builds/{buildID}",resultType:"object",pathParams:{buildID:"版本ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{execution:{type:"integer",description:"所属执行/迭代",format:"int32"},product:{type:"integer",description:"所属产品",format:"int32"},name:{type:"string",description:"构建名称"},system:{type:"integer",description:"所属应用",format:"int32"},builder:{type:"string",description:"构建者"},date:{type:"string",description:"打包日期"},scmPath:{type:"string",description:"源代码地址"},filePath:{type:"string",description:"下载地址"},desc:{type:"string",description:"描述"}},required:["execution","product","name","system","builder","date"]}}},{name:"delete",display:"删除版本",type:"delete",method:"delete",path:"/builds/{buildID}",resultType:"text",pathParams:{buildID:"版本ID"}}]},{name:"testtask",display:"测试单",description:"测试单管理,支持获取测试单列表,支持获取产品/项目/执行下的测试单、创建测试单、修改测试单、删除测试单",actions:[{name:"list",display:"获取测试单列表,支持获取产品/项目/执行下的测试单",type:"list",method:"get",path:"/{scope}/{scopeID}/testtasks",resultType:"list",pagerGetter:"pager",resultGetter:"testtasks",pathParams:{scope:{description:"测试单所属范围",options:[{value:"products",label:"产品"},{value:"projects",label:"项目"},{value:"executions",label:"执行"}]},scopeID:"所属范围ID"},params:[{name:"browseType",required:!1,type:"string",description:"状态,默认是all",defaultValue:"all",options:[{value:"all",label:"全部"},{value:"wait",label:"未开始"},{value:"doing",label:"进行中"},{value:"done",label:"已完成"},{value:"blocked",label:"阻塞"}]},{name:"orderBy",required:!1,type:"string",description:"排序",options:[{value:"id_asc",label:"ID 升序"},{value:"id_desc",label:"ID 降序"},{value:"name_asc",label:"名称 升序"},{value:"name_desc",label:"名称 降序"},{value:"status_asc",label:"状态 升序"},{value:"status_desc",label:"状态 降序"}]},{name:"recPerPage",required:!1,type:"number",description:"每页数量,不超过1000"},{name:"pageID",required:!1,type:"number",description:"页码,从第1页开始"}]},{name:"create",display:"创建测试单",type:"create",method:"post",path:"/testtasks",resultType:"object",requestBody:{required:!0,type:"object",schema:{type:"object",properties:{productID:{type:"integer",description:"所属产品ID",format:"int32"},name:{type:"string",description:"测试单名称"},build:{type:"integer",description:"提测构建/版本",format:"int32"},execution:{type:"integer",description:"所属执行",format:"int32"},type:{type:"array",items:{type:"string"},description:"类型(integrate 集成测试 | system 系统测试 | acceptance 验收测试 | performance 性能测试 | safety 安全测试)"},owner:{type:"string",description:"负责人"},status:{type:"string",description:"状态(wait 未开始 | doing 进行中 | done 已关闭 | blocked 被阻塞)"},begin:{type:"string",description:"开始日期"},end:{type:"string",description:"结束日期"},desc:{type:"string",description:"描述"}},required:["productID","name","build","begin","end"]}}},{name:"update",display:"修改测试单",type:"update",method:"put",path:"/testtasks/{testtaskID}",resultType:"object",pathParams:{testtaskID:"测试单ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{name:{type:"string",description:"测试单名称"},build:{type:"integer",description:"提测构建/版本",format:"int32"},execution:{type:"integer",description:"所属执行",format:"int32"},type:{type:"array",items:{type:"string"},description:"类型(integrate 集成测试 | system 系统测试 | acceptance 验收测试 | performance 性能测试 | safety 安全测试)"},owner:{type:"string",description:"负责人"},status:{type:"string",description:"状态(wait 未开始 | doing 进行中 | done 已关闭 | blocked 被阻塞)"},begin:{type:"string",description:"开始日期"},end:{type:"string",description:"结束日期"},desc:{type:"string",description:"描述"}},required:["name","build","begin","end"]}}},{name:"delete",display:"删除测试单",type:"delete",method:"delete",path:"/testtasks/{testtaskID}",resultType:"text",pathParams:{testtaskID:"测试单ID"}}]},{name:"release",display:"发布",description:"发布管理,支持获取发布列表,支持获取产品下的发布、创建发布、修改发布、删除发布",actions:[{name:"list",display:"获取发布列表,支持获取产品下的发布",type:"list",method:"get",path:"/products/{productID}/releases",resultType:"list",pagerGetter:"pager",resultGetter:"releases",pathParams:{productID:"所属产品ID"},params:[{name:"browseType",required:!1,type:"string",description:"状态,默认是all",defaultValue:"all",options:[{value:"all",label:"全部"},{value:"wait",label:"未开始"},{value:"normal",label:"已发布"},{value:"fail",label:"发布失败"},{value:"terminate",label:"停止维护"}]},{name:"orderBy",required:!1,type:"string",description:"排序",options:[{value:"id_asc",label:"ID 升序"},{value:"id_desc",label:"ID 降序"},{value:"name_asc",label:"名称 升序"},{value:"name_desc",label:"名称 降序"},{value:"date_asc",label:"日期 升序"},{value:"date_desc",label:"日期 降序"},{value:"status_asc",label:"状态 升序"},{value:"status_desc",label:"状态 降序"}]},{name:"recPerPage",required:!1,type:"number",description:"每页数量,不超过1000"},{name:"pageID",required:!1,type:"number",description:"页码,从第1页开始"},{name:"filters",required:!1,type:"string",description:"搜索条件数组,每项包含 field/operator/value/join/group;field 必须是该接口支持的搜索字段,operator 使用该接口搜索配置支持的操作符。支持搜索字段:name(应用版本号,示例:关键字);branch(平台/分支,示例:all);id(ID,示例:1);build(包含构建,示例:all);status(发布状态,枚举:wait 未开始 | normal 已发布 | fail 发布失败 | terminate 停止维护);date(计划发布日期,示例:2026-01-01);marker(里程碑,枚举:1 是 | 0 否)"},{name:"groupJoin",required:!1,type:"string",description:"条件组之间的连接方式",options:[{value:"and",label:"and"},{value:"or",label:"or"}]}]},{name:"create",display:"创建发布",type:"create",method:"post",path:"/releases",resultType:"object",requestBody:{required:!0,type:"object",schema:{type:"object",properties:{productID:{type:"integer",description:"所属产品",format:"int32"},system:{type:"integer",description:"所属应用",format:"int32"},name:{type:"string",description:"应用版本号"},build:{type:"array",items:{type:"string"},description:"包含构建"},status:{type:"string",description:"状态(wait 未开始 | normal 已发布 | fail 发布失败 | terminate 停止维护)"},date:{type:"string",description:"计划发布日期"},desc:{type:"string",description:"描述"}},required:["productID","system","name","build","date"]}}},{name:"update",display:"修改发布",type:"update",method:"put",path:"/releases/{releaseID}",resultType:"object",pathParams:{releaseID:"发布ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{system:{type:"integer",description:"所属应用",format:"int32"},name:{type:"string",description:"应用版本号"},build:{type:"array",items:{type:"string"},description:"包含构建"},status:{type:"string",description:"状态(wait 未开始 | normal 已发布 | fail 发布失败 | terminate 停止维护)"},date:{type:"string",description:"计划发布日期"},desc:{type:"string",description:"描述"}},required:["system","name","build","date"]}}},{name:"delete",display:"删除发布",type:"delete",method:"delete",path:"/releases/{releaseID}",resultType:"text",pathParams:{releaseID:"发布ID"}}]},{name:"file",display:"附件",description:"附件管理,支持上传附件,使用【表单formdata】方式提交,不支持json、编辑附件,修改附件的名称、删除附件",actions:[{name:"create",display:"上传附件,使用【表单formdata】方式提交,不支持json",type:"create",method:"post",path:"/files",resultType:"object",requestBody:{required:!0,type:"object",schema:{type:"object",properties:{file:{type:"string",description:"本地文件路径,将按 multipart/form-data 上传"},objectType:{type:"string",description:"关联对象类型(bug 缺陷 | story 需求 | task 任务 | testcase 用例)"},objectID:{type:"integer",description:"关联对象ID",format:"int32"}},required:["file","objectType","objectID"]}}},{name:"update",display:"编辑附件,修改附件的名称",type:"update",method:"put",path:"/files/{fileID}",resultType:"object",pathParams:{fileID:"附件ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{fileName:{type:"string",description:"附件名称"}},required:["fileName"]}}},{name:"delete",display:"删除附件",type:"delete",method:"delete",path:"/files/{fileID}",resultType:"text",pathParams:{fileID:"附件ID"}}]},{name:"workflow",display:"工作流",description:"工作流管理,支持获取工作流数据列表(以合同为例)、获取工作流数据详情(以合同为例)、创建工作流数据(以合同为例)、修改工作流数据(以合同为例)、删除工作流事项(以合同为例)",actions:[{name:"list",display:"获取工作流数据列表(以合同为例)",type:"list",method:"get",path:"/workflow/contract",resultType:"list",pagerGetter:"pager",resultGetter:"dataList"},{name:"getContract",display:"获取工作流数据详情(以合同为例)",type:"get",method:"get",path:"/workflow/contract/1",resultType:"object",resultGetter:"data"},{name:"create",display:"创建工作流数据(以合同为例)",type:"create",method:"post",path:"/workflow/contract",resultType:"object",requestBody:{required:!0,type:"object",schema:{type:"object",properties:{name:{type:"string",description:"合同名称"}},required:["name"]}}},{name:"update",display:"修改工作流数据(以合同为例)",type:"update",method:"put",path:"/workflow/contract/{contractID}",resultType:"object",pathParams:{contractID:"合同ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{name:{type:"string",description:"合同名称"}},required:["name"]}}},{name:"delete",display:"删除工作流事项(以合同为例)",type:"delete",method:"delete",path:"/workflow/contract/{contractID}",resultType:"text",pathParams:{contractID:"合同ID"}}]},{name:"doc",display:"文档",description:"文档管理,支持获取我的文档空间列表、获取团队文档空间列表、获取产品文档空间列表、获取项目文档空间列表、获取我的文档库列表、获取团队文档库列表、获取产品文档库列表、获取项目文档库列表、获取我的文档列表、获取团队文档列表、获取产品文档列表、获取项目文档列表、获取我的文档库目录列表、获取团队文档库目录列表、获取产品文档库目录列表、获取项目文档库目录列表、创建我的文档空间、创建团队文档空间、创建我的文档库、创建团队文档库、创建产品文档库、创建项目文档库、创建我的文档、创建团队文档、创建产品文档、创建项目文档、创建我的文档库目录、创建团队文档库目录、创建产品文档库目录、创建项目文档库目录、获取文档空间详情、获取文档库详情、获取文档详情、修改文档空间、修改文档库、修改文档、修改文档库目录、删除文档空间、删除文档库、删除文档、删除文档库目录",actions:[{name:"mySpaces",display:"获取我的文档空间列表",type:"list",method:"get",path:"/doc/my/spaces",resultType:"list",resultGetter:"spaces"},{name:"teamSpaces",display:"获取团队文档空间列表",type:"list",method:"get",path:"/doc/team/spaces",resultType:"list",resultGetter:"spaces"},{name:"productSpaces",display:"获取产品文档空间列表",type:"list",method:"get",path:"/doc/product/spaces",resultType:"list",resultGetter:"spaces"},{name:"projectSpaces",display:"获取项目文档空间列表",type:"list",method:"get",path:"/doc/project/spaces",resultType:"list",resultGetter:"spaces"},{name:"myLibs",display:"获取我的文档库列表",type:"list",method:"get",path:"/doc/my/spaces/{spaceID}/libs",resultType:"list",resultGetter:"libs",pathParams:{spaceID:"空间ID"}},{name:"teamLibs",display:"获取团队文档库列表",type:"list",method:"get",path:"/doc/team/spaces/{spaceID}/libs",resultType:"list",resultGetter:"libs",pathParams:{spaceID:"空间ID"}},{name:"productLibs",display:"获取产品文档库列表",type:"list",method:"get",path:"/doc/product/spaces/{productID}/libs",resultType:"list",resultGetter:"libs",pathParams:{productID:"产品ID"}},{name:"projectLibs",display:"获取项目文档库列表",type:"list",method:"get",path:"/doc/project/spaces/{projectID}/libs",resultType:"list",resultGetter:"libs",pathParams:{projectID:"项目ID"}},{name:"myDocs",display:"获取我的文档列表",type:"list",method:"get",path:"/doc/my/spaces/{spaceID}/libs/{libID}/docs",resultType:"list",pathParams:{spaceID:"空间ID",libID:"文档库ID"},resultGetter:"docs"},{name:"teamDocs",display:"获取团队文档列表",type:"list",method:"get",path:"/doc/team/spaces/{spaceID}/libs/{libID}/docs",resultType:"list",resultGetter:"docs",pathParams:{spaceID:"空间ID",libID:"文档库ID"}},{name:"productDocs",display:"获取产品文档列表",type:"list",method:"get",path:"/doc/product/spaces/{productID}/libs/{libID}/docs",resultType:"list",pathParams:{productID:"产品ID",libID:"文档库ID"},resultGetter:"docs"},{name:"projectDocs",display:"获取项目文档列表",type:"list",method:"get",path:"/doc/project/spaces/{projectID}/libs/{libID}/docs",resultType:"list",pathParams:{projectID:"项目ID",libID:"文档库ID"},resultGetter:"docs"},{name:"myModules",display:"获取我的文档库目录列表",type:"list",method:"get",path:"/doc/my/spaces/{spaceID}/libs/{libID}/modules",resultType:"list",resultGetter:"modules",pathParams:{spaceID:"空间ID",libID:"文档库ID"}},{name:"teamModules",display:"获取团队文档库目录列表",type:"list",method:"get",path:"/doc/team/spaces/{spaceID}/libs/{libID}/modules",resultType:"list",resultGetter:"modules",pathParams:{spaceID:"空间ID",libID:"文档库ID"}},{name:"productModules",display:"获取产品文档库目录列表",type:"list",method:"get",path:"/doc/product/spaces/{productID}/libs/{libID}/modules",resultType:"list",resultGetter:"modules",pathParams:{productID:"产品ID",libID:"文档库ID"}},{name:"projectModules",display:"获取项目文档库目录列表",type:"list",method:"get",path:"/doc/project/spaces/{projectID}/libs/{libID}/modules",resultType:"list",resultGetter:"modules",pathParams:{projectID:"项目ID",libID:"文档库ID"}},{name:"createMySpace",display:"创建我的文档空间",type:"create",method:"post",path:"/doc/my/spaces",resultType:"object",requestBody:{required:!0,type:"object",schema:{type:"object",properties:{name:{type:"string",description:"文档空间名称"}},required:["name"]}}},{name:"createTeamSpace",display:"创建团队文档空间",type:"create",method:"post",path:"/doc/team/spaces",resultType:"object",requestBody:{required:!0,type:"object",schema:{type:"object",properties:{name:{type:"string",description:"文档空间名称"}},required:["name"]}}},{name:"createMyLib",display:"创建我的文档库",type:"create",method:"post",path:"/doc/my/spaces/{spaceID}/libs",resultType:"object",pathParams:{spaceID:"空间ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{name:{type:"string",description:"文档库名称"}},required:["name"]}}},{name:"createTeamLib",display:"创建团队文档库",type:"create",method:"post",path:"/doc/team/spaces/{spaceID}/libs",resultType:"object",pathParams:{spaceID:"空间ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{name:{type:"string",description:"文档库名称"},acl:{type:"string",description:"open 公开 | private 私有,默认是open"},groups:{type:"array",items:{type:"string"},description:"如果acl=private,可以设置哪些权限分组可以访问"},users:{type:"array",items:{type:"string"},description:"如果acl=private,可以设置哪些用户可以访问"}},required:["name"]}}},{name:"createProductLib",display:"创建产品文档库",type:"create",method:"post",path:"/doc/product/spaces/{productID}/libs",resultType:"object",pathParams:{productID:"产品ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{name:{type:"string",description:"文档库名称"},acl:{type:"string",description:"default 默认产品权限 | private 私有"},groups:{type:"array",items:{type:"string"},description:"如果acl=private,可以设置哪些权限分组可以访问"},users:{type:"array",items:{type:"string"},description:"如果acl=private,可以设置哪些用户可以访问"}},required:["name"]}}},{name:"createProjectLib",display:"创建项目文档库",type:"create",method:"post",path:"/doc/project/spaces/{projectID}/libs",resultType:"object",pathParams:{projectID:"项目ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{name:{type:"string",description:"文档库名称"},acl:{type:"string",description:"default 默认项目权限 | private 私有"},groups:{type:"array",items:{type:"string"},description:"如果acl=private,可以设置哪些权限分组可以访问"},users:{type:"array",items:{type:"string"},description:"如果acl=private,可以设置哪些用户可以访问"}},required:["name"]}}},{name:"createMyDoc",display:"创建我的文档",type:"create",method:"post",path:"/doc/my/spaces/{spaceID}/libs/{libID}/docs",resultType:"object",pathParams:{spaceID:"空间ID",libID:"文档库ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{moduleID:{type:"integer",description:"所属目录",format:"int32"},title:{type:"string",description:"文档标题"},content:{type:"string",description:"文档正文,使用Markdown格式;系统会转换为块编辑器内容并生成HTML快照"},contentType:{type:"string",description:"文档格式(doc 按Markdown处理,支持团队协同编辑 | html 旧格式,直接保存HTML,不支持团队协同编辑)"}},required:["title","content"]}}},{name:"createTeamDoc",display:"创建团队文档",type:"create",method:"post",path:"/doc/team/spaces/{spaceID}/libs/{libID}/docs",resultType:"object",pathParams:{spaceID:"空间ID",libID:"文档库ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{moduleID:{type:"integer",description:"所属目录",format:"int32"},title:{type:"string",description:"文档标题"},content:{type:"string",description:"文档正文,使用Markdown格式;系统会转换为块编辑器内容并生成HTML快照"},contentType:{type:"string",description:"文档格式(doc 按Markdown处理,支持团队协同编辑 | html 旧格式,直接保存HTML,不支持团队协同编辑)"}},required:["title","content"]}}},{name:"createProductDoc",display:"创建产品文档",type:"create",method:"post",path:"/doc/product/spaces/{productID}/libs/{libID}/docs",resultType:"object",pathParams:{productID:"产品ID",libID:"文档库ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{moduleID:{type:"integer",description:"所属目录",format:"int32"},title:{type:"string",description:"文档标题"},content:{type:"string",description:"文档正文,使用Markdown格式;系统会转换为块编辑器内容并生成HTML快照"},contentType:{type:"string",description:"文档格式(doc 按Markdown处理,支持团队协同编辑 | html 旧格式,直接保存HTML,不支持团队协同编辑)"}},required:["title","content"]}}},{name:"createProjectDoc",display:"创建项目文档",type:"create",method:"post",path:"/doc/project/spaces/{projectID}/libs/{libID}/docs",resultType:"object",pathParams:{projectID:"项目ID",libID:"文档库ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{moduleID:{type:"integer",description:"所属目录",format:"int32"},title:{type:"string",description:"文档标题"},content:{type:"string",description:"文档正文,使用Markdown格式;系统会转换为块编辑器内容并生成HTML快照"},contentType:{type:"string",description:"文档格式(doc 按Markdown处理,支持团队协同编辑 | html 旧格式,直接保存HTML,不支持团队协同编辑)"}},required:["title","content"]}}},{name:"createMyModule",display:"创建我的文档库目录",type:"create",method:"post",path:"/doc/my/spaces/{spaceID}/libs/{libID}/modules",resultType:"object",pathParams:{spaceID:"空间ID",libID:"文档库ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{name:{type:"string",description:"文档库目录"},parentID:{type:"integer",description:"父目录ID,必须属于当前文档库",format:"int32"}},required:["name"]}}},{name:"createTeamModule",display:"创建团队文档库目录",type:"create",method:"post",path:"/doc/team/spaces/{spaceID}/libs/{libID}/modules",resultType:"object",pathParams:{spaceID:"空间ID",libID:"文档库ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{name:{type:"string",description:"文档库目录"},parentID:{type:"integer",description:"父目录ID,必须属于当前文档库",format:"int32"}},required:["name"]}}},{name:"createProductModule",display:"创建产品文档库目录",type:"create",method:"post",path:"/doc/product/spaces/{productID}/libs/{libID}/modules",resultType:"object",pathParams:{productID:"产品ID",libID:"文档库ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{name:{type:"string",description:"文档库目录"},parentID:{type:"integer",description:"父目录ID,必须属于当前文档库",format:"int32"}},required:["name"]}}},{name:"createProjectModule",display:"创建项目文档库目录",type:"create",method:"post",path:"/doc/project/spaces/{projectID}/libs/{libID}/modules",resultType:"object",pathParams:{projectID:"项目ID",libID:"文档库ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{name:{type:"string",description:"文档库目录"},parentID:{type:"integer",description:"父目录ID,必须属于当前文档库",format:"int32"}},required:["name"]}}},{name:"getSpace",display:"获取文档空间详情",type:"get",method:"get",path:"/doc/spaces/{spaceID}",resultType:"object",resultGetter:"space",pathParams:{spaceID:"空间ID"}},{name:"getLib",display:"获取文档库详情",type:"get",method:"get",path:"/doc/libs/{libID}",resultType:"object",resultGetter:"lib",pathParams:{libID:"文档库ID"}},{name:"get",display:"获取文档详情",type:"get",method:"get",path:"/doc/docs/{docID}",resultType:"object",resultGetter:"doc",pathParams:{docID:"文档ID"}},{name:"updateSpace",display:"修改文档空间",type:"update",method:"put",path:"/doc/spaces/{spaceID}",resultType:"object",pathParams:{spaceID:"空间ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{name:{type:"string",description:"文档空间名称"}},required:["name"]}}},{name:"updateLib",display:"修改文档库",type:"update",method:"put",path:"/doc/libs/{libID}",resultType:"object",pathParams:{libID:"文档库ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{name:{type:"string",description:"文档库名称"},acl:{type:"string",description:"open 公开(适用于团队文档库) | default 默认权限(适用于产品、项目文档库) | private 私有(适用于所有类型文档库)"},groups:{type:"array",items:{type:"string"},description:"如果acl=private,可以设置哪些权限分组可以访问"},users:{type:"array",items:{type:"string"},description:"如果acl=private,可以设置哪些用户可以访问"}},required:["name"]}}},{name:"update",display:"修改文档",type:"update",method:"put",path:"/doc/docs/{docID}",resultType:"object",pathParams:{docID:"文档ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{moduleID:{type:"integer",description:"所属目录",format:"int32"},title:{type:"string",description:"文档标题"},content:{type:"string",description:"文档正文,使用Markdown格式;系统会转换为块编辑器内容并生成HTML快照"},contentType:{type:"string",description:"文档格式(doc 按Markdown处理,支持团队协同编辑 | html 旧格式,直接保存HTML,不支持团队协同编辑)"}},required:["title","content"]}}},{name:"updateModule",display:"修改文档库目录",type:"update",method:"put",path:"/doc/modules/{moduleID}",resultType:"object",pathParams:{moduleID:"模块ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{name:{type:"string",description:"文档库目录名称"}},required:["name"]}}},{name:"deleteSpace",display:"删除文档空间",type:"delete",method:"delete",path:"/doc/spaces/{spaceID}",resultType:"text",pathParams:{spaceID:"空间ID"}},{name:"deleteLib",display:"删除文档库",type:"delete",method:"delete",path:"/doc/libs/{libID}",resultType:"text",pathParams:{libID:"文档库ID"}},{name:"delete",display:"删除文档",type:"delete",method:"delete",path:"/doc/docs/{docID}",resultType:"text",pathParams:{docID:"文档ID"}},{name:"deleteModule",display:"删除文档库目录",type:"delete",method:"delete",path:"/doc/modules/{moduleID}",resultType:"text",pathParams:{moduleID:"模块ID"}}]},{name:"todo",display:"待办",description:"待办管理,支持创建待办、编辑待办、删除待办",actions:[{name:"create",display:"创建待办",type:"create",method:"post",path:"/todos",resultType:"object",requestBody:{required:!0,type:"object",schema:{type:"object",properties:{date:{type:"string",description:"日期"},type:{type:"string",description:"类型:custom 自定义 | task 任务 | bug 缺陷 | story 研发需求 | epic 业务需求 | requirement 用户需求 | testtask 测试单"},name:{type:"string",description:"待办名称,type为custom时必填;type为非custom时由关联对象的名称或标题自动生成"},objectID:{type:"integer",description:"关联对象ID,type为非custom时必填,必须是type对应对象的ID",format:"int32"},begin:{type:"string",description:"开始时间,使用小时+分钟拼接"},end:{type:"string",description:"结束时间,使用小时+分钟拼接"},assignedTo:{type:"string",description:"指派给"},desc:{type:"string",description:"待办详情"}},required:["date","type"]}}},{name:"update",display:"编辑待办",type:"update",method:"put",path:"/todos/{todoID}",resultType:"object",pathParams:{todoID:"待办ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{date:{type:"string",description:"日期"},type:{type:"string",description:"类型:custom 自定义 | task 任务 | bug 缺陷 | story 研发需求 | epic 业务需求 | requirement 用户需求 | testtask 测试单"},name:{type:"string",description:"待办名称,type为custom时必填;type为非custom时由关联对象的名称或标题自动生成"},objectID:{type:"integer",description:"关联对象ID,type为非custom时必填,必须是type对应对象的ID",format:"int32"},begin:{type:"string",description:"开始时间,使用小时+分钟拼接"},end:{type:"string",description:"结束时间,使用小时+分钟拼接"},assignedTo:{type:"string",description:"指派给"},desc:{type:"string",description:"待办详情"}},required:["date","type"]}}},{name:"delete",display:"删除待办",type:"delete",method:"delete",path:"/todos/{todoID}",resultType:"text",pathParams:{todoID:"待办ID"}}]},{name:"my",display:"地盘",description:"地盘管理,支持我的待办、指派给我的任务、指派给我的Bug、指派给我的研发需求、指派给我的业务需求、指派给我的用户需求、我负责的的测试单、我参与的项目、指派给我的反馈、指派给我的工单、指派给我的用例、我的会议、指派给我的问题、指派给我的风险",actions:[{name:"todos",display:"我的待办",type:"list",method:"get",path:"/my/todos",resultType:"list",pagerGetter:"pager",resultGetter:"todos",params:[{name:"browseType",required:!1,type:"string",description:"状态,默认是all",defaultValue:"all",options:[{value:"all",label:"全部"},{value:"today",label:"今天"},{value:"future",label:"将来"},{value:"lag",label:"过期"},{value:"finished",label:"已完成"}]},{name:"orderBy",required:!1,type:"string",description:"排序(date_desc,status,begin 日期/状态/开始时间)"},{name:"recPerPage",required:!1,type:"number",description:"每页数量,不超过1000"},{name:"pageID",required:!1,type:"number",description:"页码,从第1页开始"}]},{name:"tasks",display:"指派给我的任务",type:"list",method:"get",path:"/my/tasks",resultType:"list",pagerGetter:"pager",resultGetter:"tasks",params:[{name:"browseType",required:!1,type:"string",description:"状态,默认是all",defaultValue:"all",options:[{value:"all",label:"全部"},{value:"unclosed",label:"未关闭"},{value:"assignedtome",label:"指派给我"},{value:"openedbyme",label:"我创建"},{value:"finishedbyme",label:"由我完成"},{value:"closedbyme",label:"由我关闭"}]},{name:"orderBy",required:!1,type:"string",description:"排序",options:[{value:"id_asc",label:"ID 升序"},{value:"id_desc",label:"ID 降序"},{value:"name_asc",label:"名称 升序"},{value:"name_desc",label:"名称 降序"},{value:"status_asc",label:"状态 升序"},{value:"status_desc",label:"状态 降序"},{value:"pri_asc",label:"优先级 升序"},{value:"pri_desc",label:"优先级 降序"}]},{name:"recPerPage",required:!1,type:"number",description:"每页数量,不超过1000"},{name:"pageID",required:!1,type:"number",description:"页码,从第1页开始"},{name:"filters",required:!1,type:"string",description:"搜索条件数组,每项包含 field/operator/value/join/group;field 必须是该接口支持的搜索字段,operator 使用该接口搜索配置支持的操作符。支持搜索字段:name(任务名称,示例:关键字);keywords(关键词,示例:关键字);id(编号,示例:1);status(任务状态,枚举:wait 未开始 | doing 进行中 | done 已完成 | pause 已暂停 | cancel 已取消 | closed 已关闭);desc(任务描述,示例:关键字);assignedTo(指派给,用户,示例:admin);pri(优先级,枚举:1 | 2 | 3 | 4);project(所属项目,示例:all);execution(所属执行,示例:all);module(所属模块,示例:all);estimate(最初预计,示例:关键字);left(预计剩余,示例:关键字);consumed(总计消耗,示例:关键字);type(任务类型,枚举:design 设计 | devel 开发 | request 需求 | test 测试 | study 研究 | discuss 讨论 | ui 界面 | affair 事务 | misc 其他);story(相关用户故事,示例:all);fromBug(来源Bug编号,枚举:design 设计 | devel 开发 | request 需求 | test 测试 | study 研究 | discuss 讨论 | ui 界面 | affair 事务 | misc 其他);closedReason(关闭原因,枚举:done 已完成 | cancel 已取消);openedBy(由谁创建,用户,示例:admin);finishedBy(由谁完成,用户,示例:admin);closedBy(由谁关闭,用户,示例:admin);canceledBy(由谁取消,用户,示例:admin);lastEditedBy(最后修改,用户,示例:admin);mailto(抄送给,用户,示例:admin);openedDate(创建日期,示例:2026-01-01);deadline(截止日期,示例:2026-01-01);estStarted(预计开始,示例:2026-01-01);realStarted(实际开始,示例:2026-01-01);assignedDate(指派日期,示例:2026-01-01);finishedDate(实际完成,示例:2026-01-01);closedDate(关闭时间,示例:2026-01-01);canceledDate(取消时间,示例:2026-01-01);lastEditedDate(最后修改日期,示例:2026-01-01);activatedDate(激活日期,示例:2026-01-01)"},{name:"groupJoin",required:!1,type:"string",description:"条件组之间的连接方式",options:[{value:"and",label:"and"},{value:"or",label:"or"}]}]},{name:"bugs",display:"指派给我的Bug",type:"list",method:"get",path:"/my/bugs",resultType:"list",pagerGetter:"pager",resultGetter:"bugs",params:[{name:"browseType",required:!1,type:"string",description:"状态,默认是all",defaultValue:"all",options:[{value:"all",label:"全部"},{value:"unclosed",label:"未关闭"},{value:"assignedtome",label:"指派给我"},{value:"openedbyme",label:"我创建"},{value:"resolvedbyme",label:"由我解决"}]},{name:"orderBy",required:!1,type:"string",description:"排序",options:[{value:"id_asc",label:"ID 升序"},{value:"id_desc",label:"ID 降序"},{value:"title_asc",label:"标题 升序"},{value:"title_desc",label:"标题 降序"},{value:"status_asc",label:"状态 升序"},{value:"status_desc",label:"状态 降序"},{value:"severity_asc",label:"严重程度 升序"},{value:"severity_desc",label:"严重程度 降序"}]},{name:"recPerPage",required:!1,type:"number",description:"每页数量,不超过1000"},{name:"pageID",required:!1,type:"number",description:"页码,从第1页开始"},{name:"filters",required:!1,type:"string",description:"搜索条件数组,每项包含 field/operator/value/join/group;field 必须是该接口支持的搜索字段,operator 使用该接口搜索配置支持的操作符。支持搜索字段:title(Bug标题,示例:关键字);module(所属模块,模块,示例:0);keywords(关键词,示例:关键字);steps(重现步骤,示例:关键字);assignedTo(指派给,用户,示例:admin);resolvedBy(解决者,用户,示例:admin);status(Bug状态,枚举:active 激活 | resolved 已解决 | closed 已关闭);confirmed(是否确认,枚举:1 已确认 | 0 未确认);story(相关需求,示例:关键字);project(所属项目,示例:all);product(所属产品,示例:all);branch(branch,示例:all);plan(所属计划,示例:all);id(Bug编号,示例:1);execution(所属执行,执行,示例:3);severity(严重程度,枚举:1 | 2 | 3 | 4);pri(优先级,枚举:1 | 2 | 3 | 4);type(Bug类型,枚举:codeerror 代码错误 | config 配置相关 | install 安装部署 | security 安全相关 | performance 性能问题 | standard 标准规范 | automation 测试脚本 | designdefect 设计缺陷 | codeimprovement 代码改进 | others 其他);os(操作系统,枚举:all 全部 | windows Windows | win11 Windows 11 | win10 Windows 10 | win8 Windows 8 | win7 Windows 7 | winxp Windows XP | osx Mac OS | android Android | ios IOS | linux Linux | ubuntu Ubuntu | chromeos Chrome OS | fedora Fedora | unix Unix | others 其他);browser(浏览器,枚举:all 全部 | chrome Chrome | edge Edge | ie IE系列 | ie11 IE11 | ie10 IE10 | ie9 IE9 | ie8 IE8 | firefox firefox系列 | opera Opera系列 | safari | 360 360浏览器 | qq QQ浏览器 | other 其他);resolution(解决方案,枚举:bydesign 设计如此 | duplicate 重复Bug | external 外部原因 | fixed 已解决 | notrepro 无法重现 | postponed 延期处理 | willnotfix 不予解决 | tostory 转为用户故事);activatedCount(激活次数,示例:关键字);toTask(转任务,示例:关键字);toStory(转用户故事,示例:关键字);openedBy(由谁创建,用户,示例:admin);closedBy(由谁关闭,用户,示例:admin);lastEditedBy(修改者,用户,示例:admin);mailto(抄送给,用户,示例:admin);openedBuild(影响版本,示例:builds);resolvedBuild(解决版本,示例:builds);openedDate(创建日期,示例:2026-01-01);assignedDate(指派日期,示例:2026-01-01);resolvedDate(解决日期,示例:2026-01-01);closedDate(关闭日期,示例:2026-01-01);lastEditedDate(修改日期,示例:2026-01-01);deadline(截止日期,示例:2026-01-01);activatedDate(激活时间,示例:2026-01-01)"},{name:"groupJoin",required:!1,type:"string",description:"条件组之间的连接方式",options:[{value:"and",label:"and"},{value:"or",label:"or"}]}]},{name:"stories",display:"指派给我的研发需求",type:"list",method:"get",path:"/my/stories",resultType:"list",pagerGetter:"pager",resultGetter:"stories",params:[{name:"browseType",required:!1,type:"string",description:"状态,默认是allstory",defaultValue:"allstory",options:[{value:"allstory",label:"全部"},{value:"assignedtome",label:"指派给我"},{value:"openedbyme",label:"我创建"},{value:"reviewbyme",label:"待我评审"},{value:"draftstory",label:"草稿"}]},{name:"orderBy",required:!1,type:"string",description:"排序",options:[{value:"id_asc",label:"ID 升序"},{value:"id_desc",label:"ID 降序"},{value:"title_asc",label:"标题 升序"},{value:"title_desc",label:"标题 降序"},{value:"status_asc",label:"状态 升序"},{value:"status_desc",label:"状态 降序"}]},{name:"recPerPage",required:!1,type:"number",description:"每页数量,不超过1000"},{name:"pageID",required:!1,type:"number",description:"页码,从第1页开始"},{name:"filters",required:!1,type:"string",description:"搜索条件数组,每项包含 field/operator/value/join/group;field 必须是该接口支持的搜索字段,operator 使用该接口搜索配置支持的操作符。支持搜索字段:title(需求名称,示例:关键字);id(编号,示例:1);keywords(关键词,示例:关键字);status(当前状态,枚举:draft 草稿 | reviewing 评审中 | active 激活 | changing 变更中 | closed 已关闭);pri(优先级,枚举:1 | 2 | 3 | 4);module(所属模块,示例:all);stage(所处阶段,枚举:wait 未开始 | planned 已计划 | projected 研发立项 | designing 设计中 | designed 设计完毕 | developing 研发中 | developed 研发完毕 | testing 测试中 | tested 测试完毕 | verified 已验收 | rejected 验收失败 | delivering 交付中 | delivered 已交付 | released 已发布 | closed 已关闭);product(所属产品,示例:all);branch(branch,示例:all);grade(需求层级,示例:all);plan(所属计划,示例:all);estimate(预计小时,示例:关键字);source(来源,枚举:customer 客户 | user 用户 | po 产品经理 | market 市场 | service 客服 | operation 运营 | support 技术支持 | competitor 竞争对手 | partner 合作伙伴 | dev 开发人员 | tester 测试人员 | bug Bug | forum 论坛 | other 其他);sourceNote(来源备注,示例:关键字);fromBug(来源Bug,示例:关键字);category(类别,枚举:feature 功能 | interface 接口 | performance 性能 | safe 安全 | experience 体验 | improve 改进 | other 其他);openedBy(由谁创建,用户,示例:admin);reviewedBy(已评审人,用户,示例:admin);result(评审结果,枚举:pass 确认通过 | revert 撤销变更 | clarify 有待明确 | reject 拒绝);assignedTo(指派给,用户,示例:admin);closedBy(由谁关闭,用户,示例:admin);lastEditedBy(最后修改,用户,示例:admin);mailto(抄送给,用户,示例:admin);closedReason(关闭原因,枚举:done 已完成 | subdivided 已拆分 | duplicate 重复 | postponed 延期 | willnotdo 不做 | cancel 已取消 | bydesign 设计如此);version(版本号,示例:关键字);openedDate(创建日期,示例:2026-01-01);reviewedDate(评审时间,示例:2026-01-01);assignedDate(指派日期,示例:2026-01-01);closedDate(关闭日期,示例:2026-01-01);lastEditedDate(最后修改日期,示例:2026-01-01);activatedDate(激活日期,示例:2026-01-01)"},{name:"groupJoin",required:!1,type:"string",description:"条件组之间的连接方式",options:[{value:"and",label:"and"},{value:"or",label:"or"}]}]},{name:"epics",display:"指派给我的业务需求",type:"list",method:"get",path:"/my/epics",resultType:"list",pagerGetter:"pager",resultGetter:"epics",params:[{name:"browseType",required:!1,type:"string",description:"状态,默认是allstory",defaultValue:"allstory",options:[{value:"allstory",label:"全部"},{value:"assignedtome",label:"指派给我"},{value:"openedbyme",label:"我创建"},{value:"reviewbyme",label:"待我评审"},{value:"draftstory",label:"草稿"}]},{name:"orderBy",required:!1,type:"string",description:"排序",options:[{value:"id_asc",label:"ID 升序"},{value:"id_desc",label:"ID 降序"},{value:"title_asc",label:"标题 升序"},{value:"title_desc",label:"标题 降序"},{value:"status_asc",label:"状态 升序"},{value:"status_desc",label:"状态 降序"}]},{name:"recPerPage",required:!1,type:"number",description:"每页数量,不超过1000"},{name:"pageID",required:!1,type:"number",description:"页码,从第1页开始"},{name:"filters",required:!1,type:"string",description:"搜索条件数组,每项包含 field/operator/value/join/group;field 必须是该接口支持的搜索字段,operator 使用该接口搜索配置支持的操作符。支持搜索字段:title(需求名称,示例:关键字);id(编号,示例:1);keywords(关键词,示例:关键字);status(当前状态,枚举:draft 草稿 | reviewing 评审中 | active 激活 | changing 变更中 | closed 已关闭);pri(优先级,枚举:1 | 2 | 3 | 4);module(所属模块,示例:all);stage(所处阶段,枚举:wait 未开始 | planned 已计划 | projected 研发立项 | designing 设计中 | designed 设计完毕 | developing 研发中 | developed 研发完毕 | testing 测试中 | tested 测试完毕 | verified 已验收 | rejected 验收失败 | delivering 交付中 | delivered 已交付 | released 已发布 | closed 已关闭);product(所属产品,示例:all);branch(branch,示例:all);grade(需求层级,示例:all);plan(所属计划,示例:all);estimate(预计小时,示例:关键字);source(来源,枚举:customer 客户 | user 用户 | po 产品经理 | market 市场 | service 客服 | operation 运营 | support 技术支持 | competitor 竞争对手 | partner 合作伙伴 | dev 开发人员 | tester 测试人员 | bug Bug | forum 论坛 | other 其他);sourceNote(来源备注,示例:关键字);fromBug(来源Bug,示例:关键字);category(类别,枚举:feature 功能 | interface 接口 | performance 性能 | safe 安全 | experience 体验 | improve 改进 | other 其他);openedBy(由谁创建,用户,示例:admin);reviewedBy(已评审人,用户,示例:admin);result(评审结果,枚举:pass 确认通过 | revert 撤销变更 | clarify 有待明确 | reject 拒绝);assignedTo(指派给,用户,示例:admin);closedBy(由谁关闭,用户,示例:admin);lastEditedBy(最后修改,用户,示例:admin);mailto(抄送给,用户,示例:admin);closedReason(关闭原因,枚举:done 已完成 | subdivided 已拆分 | duplicate 重复 | postponed 延期 | willnotdo 不做 | cancel 已取消 | bydesign 设计如此);version(版本号,示例:关键字);openedDate(创建日期,示例:2026-01-01);reviewedDate(评审时间,示例:2026-01-01);assignedDate(指派日期,示例:2026-01-01);closedDate(关闭日期,示例:2026-01-01);lastEditedDate(最后修改日期,示例:2026-01-01);activatedDate(激活日期,示例:2026-01-01)"},{name:"groupJoin",required:!1,type:"string",description:"条件组之间的连接方式",options:[{value:"and",label:"and"},{value:"or",label:"or"}]}]},{name:"requirements",display:"指派给我的用户需求",type:"list",method:"get",path:"/my/requirements",resultType:"list",pagerGetter:"pager",resultGetter:"requirements",params:[{name:"browseType",required:!1,type:"string",description:"状态,默认是allstory",defaultValue:"allstory",options:[{value:"allstory",label:"全部"},{value:"assignedtome",label:"指派给我"},{value:"openedbyme",label:"我创建"},{value:"reviewbyme",label:"待我评审"},{value:"draftstory",label:"草稿"}]},{name:"orderBy",required:!1,type:"string",description:"排序",options:[{value:"id_asc",label:"ID 升序"},{value:"id_desc",label:"ID 降序"},{value:"title_asc",label:"标题 升序"},{value:"title_desc",label:"标题 降序"},{value:"status_asc",label:"状态 升序"},{value:"status_desc",label:"状态 降序"}]},{name:"recPerPage",required:!1,type:"number",description:"每页数量,不超过1000"},{name:"pageID",required:!1,type:"number",description:"页码,从第1页开始"},{name:"filters",required:!1,type:"string",description:"搜索条件数组,每项包含 field/operator/value/join/group;field 必须是该接口支持的搜索字段,operator 使用该接口搜索配置支持的操作符。支持搜索字段:title(需求名称,示例:关键字);id(编号,示例:1);keywords(关键词,示例:关键字);status(当前状态,枚举:draft 草稿 | reviewing 评审中 | active 激活 | changing 变更中 | closed 已关闭);pri(优先级,枚举:1 | 2 | 3 | 4);module(所属模块,示例:all);stage(所处阶段,枚举:wait 未开始 | planned 已计划 | projected 研发立项 | designing 设计中 | designed 设计完毕 | developing 研发中 | developed 研发完毕 | testing 测试中 | tested 测试完毕 | verified 已验收 | rejected 验收失败 | delivering 交付中 | delivered 已交付 | released 已发布 | closed 已关闭);product(所属产品,示例:all);branch(branch,示例:all);grade(需求层级,示例:all);plan(所属计划,示例:all);estimate(预计小时,示例:关键字);source(来源,枚举:customer 客户 | user 用户 | po 产品经理 | market 市场 | service 客服 | operation 运营 | support 技术支持 | competitor 竞争对手 | partner 合作伙伴 | dev 开发人员 | tester 测试人员 | bug Bug | forum 论坛 | other 其他);sourceNote(来源备注,示例:关键字);fromBug(来源Bug,示例:关键字);category(类别,枚举:feature 功能 | interface 接口 | performance 性能 | safe 安全 | experience 体验 | improve 改进 | other 其他);openedBy(由谁创建,用户,示例:admin);reviewedBy(已评审人,用户,示例:admin);result(评审结果,枚举:pass 确认通过 | revert 撤销变更 | clarify 有待明确 | reject 拒绝);assignedTo(指派给,用户,示例:admin);closedBy(由谁关闭,用户,示例:admin);lastEditedBy(最后修改,用户,示例:admin);mailto(抄送给,用户,示例:admin);closedReason(关闭原因,枚举:done 已完成 | subdivided 已拆分 | duplicate 重复 | postponed 延期 | willnotdo 不做 | cancel 已取消 | bydesign 设计如此);version(版本号,示例:关键字);openedDate(创建日期,示例:2026-01-01);reviewedDate(评审时间,示例:2026-01-01);assignedDate(指派日期,示例:2026-01-01);closedDate(关闭日期,示例:2026-01-01);lastEditedDate(最后修改日期,示例:2026-01-01);activatedDate(激活日期,示例:2026-01-01)"},{name:"groupJoin",required:!1,type:"string",description:"条件组之间的连接方式",options:[{value:"and",label:"and"},{value:"or",label:"or"}]}]},{name:"testtasks",display:"我负责的的测试单",type:"list",method:"get",path:"/my/testtasks",resultType:"list",pagerGetter:"pager",resultGetter:"testtasks",params:[{name:"browseType",required:!1,type:"string",description:"状态,默认是all",defaultValue:"all",options:[{value:"all",label:"全部"},{value:"wait",label:"未开始"},{value:"doing",label:"进行中"},{value:"done",label:"已完成"}]},{name:"orderBy",required:!1,type:"string",description:"排序",options:[{value:"id_asc",label:"ID 升序"},{value:"id_desc",label:"ID 降序"},{value:"name_asc",label:"名称 升序"},{value:"name_desc",label:"名称 降序"},{value:"status_asc",label:"状态 升序"},{value:"status_desc",label:"状态 降序"}]},{name:"recPerPage",required:!1,type:"number",description:"每页数量,不超过1000"},{name:"pageID",required:!1,type:"number",description:"页码,从第1页开始"}]},{name:"projects",display:"我参与的项目",type:"list",method:"get",path:"/my/projects",resultType:"list",pagerGetter:"pager",resultGetter:"projects",params:[{name:"browseType",required:!1,type:"string",description:"状态,默认是all",defaultValue:"all",options:[{value:"all",label:"全部"},{value:"undone",label:"未完成"},{value:"wait",label:"未开始"},{value:"doing",label:"进行中"}]},{name:"orderBy",required:!1,type:"string",description:"排序",options:[{value:"id_asc",label:"ID 升序"},{value:"id_desc",label:"ID 降序"},{value:"name_asc",label:"名称 升序"},{value:"name_desc",label:"名称 降序"},{value:"status_asc",label:"状态 升序"},{value:"status_desc",label:"状态 降序"}]},{name:"recPerPage",required:!1,type:"number",description:"每页数量,不超过1000"},{name:"pageID",required:!1,type:"number",description:"页码,从第1页开始"}]},{name:"feedbacks",display:"指派给我的反馈",type:"list",method:"get",path:"/my/feedbacks",resultType:"list",pagerGetter:"pager",resultGetter:"feedbacks",params:[{name:"browseType",required:!1,type:"string",description:"状态,默认是all",defaultValue:"all",options:[{value:"all",label:"全部"},{value:"wait",label:"待处理"},{value:"doing",label:"处理中"},{value:"toclosed",label:"待关闭"}]},{name:"orderBy",required:!1,type:"string",description:"排序",options:[{value:"id_asc",label:"ID 升序"},{value:"id_desc",label:"ID 降序"},{value:"title_asc",label:"标题 升序"},{value:"title_desc",label:"标题 降序"},{value:"status_asc",label:"状态 升序"},{value:"status_desc",label:"状态 降序"}]},{name:"recPerPage",required:!1,type:"number",description:"每页数量,不超过1000"},{name:"pageID",required:!1,type:"number",description:"页码,从第1页开始"},{name:"filters",required:!1,type:"string",description:"搜索条件数组,每项包含 field/operator/value/join/group;field 必须是该接口支持的搜索字段,operator 使用该接口搜索配置支持的操作符。支持搜索字段:activatedBy,activatedDate,assignedTo,closedBy,closedDate,closedReason,desc,feedbackBy,id,keywords,mailto,module,notifyEmail,openedBy,openedDate,pri,processedBy,processedDate,product,public,reviewedBy,solution,source,status,title,type"},{name:"groupJoin",required:!1,type:"string",description:"条件组之间的连接方式",options:[{value:"and",label:"and"},{value:"or",label:"or"}]}]},{name:"tickets",display:"指派给我的工单",type:"list",method:"get",path:"/my/tickets",resultType:"list",pagerGetter:"pager",resultGetter:"tickets",params:[{name:"browseType",required:!1,type:"string",description:"状态,默认是all",defaultValue:"all",options:[{value:"all",label:"全部"},{value:"unclosed",label:"未关闭"},{value:"wait",label:"待处理"},{value:"doing",label:"处理中"},{value:"done",label:"待关闭"}]},{name:"orderBy",required:!1,type:"string",description:"排序",options:[{value:"id_asc",label:"ID 升序"},{value:"id_desc",label:"ID 降序"},{value:"title_asc",label:"标题 升序"},{value:"title_desc",label:"标题 降序"},{value:"status_asc",label:"状态 升序"},{value:"status_desc",label:"状态 降序"}]},{name:"recPerPage",required:!1,type:"number",description:"每页数量,不超过1000"},{name:"pageID",required:!1,type:"number",description:"页码,从第1页开始"},{name:"filters",required:!1,type:"string",description:"搜索条件数组,每项包含 field/operator/value/join/group;field 必须是该接口支持的搜索字段,operator 使用该接口搜索配置支持的操作符。支持搜索字段:activatedBy,activatedCount,activatedDate,assignedTo,closedBy,closedDate,closedReason,contact,customer,deadline,desc,editedBy,editedDate,feedback,id,keywords,mailto,module,notifyEmail,openedBuild,openedBy,openedDate,pri,product,resolution,resolvedBy,resolvedDate,startedBy,startedDate,status,title,type"},{name:"groupJoin",required:!1,type:"string",description:"条件组之间的连接方式",options:[{value:"and",label:"and"},{value:"or",label:"or"}]}]},{name:"testcases",display:"指派给我的用例",type:"list",method:"get",path:"/my/testcases",resultType:"list",pagerGetter:"pager",resultGetter:"testcases",params:[{name:"browseType",required:!1,type:"string",description:"状态,默认是all",defaultValue:"all",options:[{value:"all",label:"全部"},{value:"wait",label:"未执行"},{value:"doing",label:"执行中"},{value:"pass",label:"通过"},{value:"fail",label:"失败"}]},{name:"orderBy",required:!1,type:"string",description:"排序",options:[{value:"id_asc",label:"ID 升序"},{value:"id_desc",label:"ID 降序"},{value:"title_asc",label:"标题 升序"},{value:"title_desc",label:"标题 降序"},{value:"status_asc",label:"状态 升序"},{value:"status_desc",label:"状态 降序"}]},{name:"recPerPage",required:!1,type:"number",description:"每页数量,不超过1000"},{name:"pageID",required:!1,type:"number",description:"页码,从第1页开始"},{name:"filters",required:!1,type:"string",description:"搜索条件数组,每项包含 field/operator/value/join/group;field 必须是该接口支持的搜索字段,operator 使用该接口搜索配置支持的操作符。支持搜索字段:title(用例名称,示例:关键字);story(关联需求,示例:all);id(用例编号,示例:1);keywords(关键词,示例:关键字);lastEditedBy(修改者,用户,示例:admin);type(用例类型,枚举:unit 单元测试 | interface 接口测试 | feature 功能测试 | install 安装部署 | config 配置相关 | performance 性能测试 | security 安全相关 | other 其他);auto(自动化,枚举:auto 是 | no 否);openedBy(由谁创建,用户,示例:admin);status(用例状态,枚举:wait 待评审 | normal 正常 | blocked 被阻塞 | investigate 研究中);product(所属产品,示例:all);branch(branch,示例:all);stage(适用环节,枚举:unittest 单元测试环节 | feature 功能测试环节 | intergrate 集成测试环节 | system 系统测试环节 | smoke 冒烟测试环节 | bvt 版本验证环节);module(所属模块,模块,示例:0);pri(优先级,枚举:3 | 1 | 2 | 4);lib(所属库,示例:all);lastRunner(执行人,用户,示例:admin);lastRunResult(结果,枚举:pass 通过 | fail 失败 | blocked 阻塞 | null 未执行);lastRunDate(执行时间,示例:2026-01-01);openedDate(创建日期,示例:2026-01-01);lastEditedDate(修改日期,示例:2026-01-01);scene(所属场景,示例:all)"},{name:"groupJoin",required:!1,type:"string",description:"条件组之间的连接方式",options:[{value:"and",label:"and"},{value:"or",label:"or"}]}]},{name:"meetings",display:"我的会议",type:"list",method:"get",path:"/my/meetings",resultType:"list",pagerGetter:"pager",resultGetter:"meetings",params:[{name:"browseType",required:!1,type:"string",description:"状态,默认是futureMeeting",defaultValue:"futureMeeting",options:[{value:"futureMeeting",label:"我参加的(未开始)"},{value:"all",label:"全部"},{value:"booked",label:"我预约的"},{value:"participate",label:"我参加的(全部)"}]},{name:"orderBy",required:!1,type:"string",description:"排序",options:[{value:"id_asc",label:"ID 升序"},{value:"id_desc",label:"ID 降序"},{value:"name_asc",label:"名称 升序"},{value:"name_desc",label:"名称 降序"},{value:"date_asc",label:"日期 升序"},{value:"date_desc",label:"日期 降序"}]},{name:"recPerPage",required:!1,type:"number",description:"每页数量,不超过1000"},{name:"pageID",required:!1,type:"number",description:"页码,从第1页开始"}]},{name:"issues",display:"指派给我的问题",type:"list",method:"get",path:"/my/issues",resultType:"list",params:[{name:"browseType",required:!1,type:"string",description:"状态,默认是all",defaultValue:"all",options:[{value:"all",label:"全部"},{value:"open",label:"开放"},{value:"assignto",label:"指派给我"},{value:"assignby",label:"由我指派"},{value:"closed",label:"已关闭"},{value:"resolved",label:"已解决"},{value:"canceled",label:"已取消"}]},{name:"orderBy",required:!1,type:"string",description:"排序",options:[{value:"id_asc",label:"ID 升序"},{value:"id_desc",label:"ID 降序"},{value:"title_asc",label:"标题 升序"},{value:"title_desc",label:"标题 降序"},{value:"severity_asc",label:"严重程度 升序"},{value:"severity_desc",label:"严重程度 降序"},{value:"status_asc",label:"状态 升序"},{value:"status_desc",label:"状态 降序"}]},{name:"recPerPage",required:!1,type:"number",description:"每页数量,不超过1000"},{name:"pageID",required:!1,type:"number",description:"页码,从第1页开始"}],resultGetter:"issues"},{name:"risks",display:"指派给我的风险",type:"list",method:"get",path:"/my/risks",resultType:"list",params:[{name:"browseType",required:!1,type:"string",description:"状态,默认是all",defaultValue:"all",options:[{value:"all",label:"全部"},{value:"active",label:"开放"},{value:"assignTo",label:"指派给我"},{value:"assignBy",label:"由我指派"},{value:"closed",label:"已关闭"},{value:"hangup",label:"已挂起"},{value:"canceled",label:"已取消"}]},{name:"orderBy",required:!1,type:"string",description:"排序",options:[{value:"id_asc",label:"ID 升序"},{value:"id_desc",label:"ID 降序"},{value:"name_asc",label:"名称 升序"},{value:"name_desc",label:"名称 降序"},{value:"status_asc",label:"状态 升序"},{value:"status_desc",label:"状态 降序"},{value:"pri_asc",label:"优先级 升序"},{value:"pri_desc",label:"优先级 降序"}]},{name:"recPerPage",required:!1,type:"number",description:"每页数量,不超过1000"},{name:"pageID",required:!1,type:"number",description:"页码,从第1页开始"},{name:"filters",required:!1,type:"string",description:"搜索条件数组,每项包含 field/operator/value/join/group;field 必须是该接口支持的搜索字段,operator 使用该接口搜索配置支持的操作符。支持搜索字段:activateBy,actualClosedDate,assignedTo,cancelBy,category,createdBy,createdDate,editedBy,editedDate,hangupBy,id,identifiedDate,impact,name,plannedClosedDate,prevention,pri,probability,project,rate,remedy,resolution,resolvedBy,source,status,strategy,trackedBy"},{name:"groupJoin",required:!1,type:"string",description:"条件组之间的连接方式",options:[{value:"and",label:"and"},{value:"or",label:"or"}]}],resultGetter:"risks"}]}];var PW={list:"get",get:"get",create:"post",update:"put",delete:"delete",action:"post"},ZW={list:"list",get:"object",create:"object",update:"object",delete:"text",action:"text"},bD=UW(gW()),AB=VB(bD);function g(D){if(Array.isArray(D))return D.map((B)=>g(B));if(D&&typeof D==="object"&&!(D instanceof Function)){let B={};for(let[W,Q]of Object.entries(D))B[W]=g(Q);return B}return D}function vD(D,B){if(!j(B))return B===void 0?D:g(B);let W=j(D)?{...D}:{};for(let[Q,$]of Object.entries(B)){if($===void 0)continue;let X=W[Q];W[Q]=j($)&&j(X)?vD(X,$):g($)}return W}function gW(){return g(jB)}function dD(D){if(D===null||typeof D!=="object")return D;if(Object.isFrozen(D))return D;for(let B of Object.keys(D))dD(D[B]);return Object.freeze(D)}function FW(D){if(D.method===void 0){let B=PW[D.type];if(B===void 0)throw new C("E_INDETERMINATE_ACTION_METHOD",{action:String(D.name),type:String(D.type)});D.method=B}if(D.resultType===void 0){let B=ZW[D.type];if(B===void 0)throw new C("E_INDETERMINATE_ACTION_RESULT_TYPE",{action:String(D.name),type:String(D.type)});D.resultType=B}return D}function QD(D){return dD(FW(D))}function h(D){return D.actions.forEach(QD),dD(D)}function UW(D){return D.forEach(h),D}function HD(D,B){let W=B.toLowerCase();return D.findIndex((Q)=>String(Q.name).toLowerCase()===W)}function EW(D,B){let W=D.slice();for(let Q of B){let $=HD(W,String(Q.name)),X=QD(g(Q));if($>=0)W[$]=X;else W.push(X)}return W}function IB(D,B){return h({...D,...g(B),actions:EW(D.actions,B.actions)})}function VB(D){return new Map(D.map((B)=>[B.name.toLowerCase(),B]))}function _B(D){if(!D||typeof D.name!=="string"||!Array.isArray(D.actions))throw new C("E_INVALID_MODULE_DEFINITION")}function mD(D){if(!D||typeof D.name!=="string"||typeof D.path!=="string")throw new C("E_INVALID_ACTION_DEFINITION");if(D.method!==void 0&&typeof D.method!=="string")throw new C("E_INVALID_ACTION_DEFINITION");if(D.resultType!==void 0&&typeof D.resultType!=="string")throw new C("E_INVALID_ACTION_DEFINITION")}function c(){return bD}function f(){return AB}function KD(){AB=VB(bD)}var MW;function RB(D){MW=D}function OD(D,B={}){let W=c();for(let Q of y(D)){_B(Q);let $=Q.name.toLowerCase(),X=W.findIndex((J)=>J.name.toLowerCase()===$);if(X>=0)W[X]=B.replace?h(g(Q)):IB(W[X],Q);else W.push(h(g(Q)))}KD()}function jD(D,B){let W=D.toLowerCase(),Q=f().get(W);if(!Q)throw new C("E_INVALID_MODULE",{module:D});let $=Q.actions.slice();for(let G of y(B)){mD(G);let q=HD($,String(G.name)),H=QD(g(G));if(q>=0)$[q]=H;else $.push(H)}let X=h({...Q,actions:$}),J=c(),Y=J.findIndex((G)=>G.name.toLowerCase()===W);J[Y]=X,KD()}function R(D,B,W){let Q=D.toLowerCase(),$=f().get(Q);if(!$)throw new C("E_INVALID_MODULE",{module:D});let X=$.actions.slice(),J=HD(X,B);if(J<0)throw new C("E_INVALID_ACTION",{module:D,action:B});let Y=X[J],G=typeof W==="function"?W(g(Y)):vD(Y,W);mD(G),X[J]=QD(G);let q=h({...$,actions:X}),H=c(),L=H.findIndex((K)=>K.name.toLowerCase()===Q);H[L]=q,KD()}var PB={product:"products",project:"projects",execution:"executions"},zW=new Set(Object.values(PB)),SW=["execution","project","product"];function NW(D){let{scope:B,scopeID:W}=D;if(!v(B)&&!v(W)){let Q=String(B);if(!zW.has(Q))throw new C("E_INVALID_PARAM",{param:"scope",value:Q});let $=Number(W);if(Number.isNaN($))throw new C("E_INVALID_PARAM",{param:"scopeID",value:String(W)});return{scope:Q,scopeID:$}}for(let Q of SW){let $=D[Q]??D[`${Q}ID`];if(v($))continue;let X=Number($);if(!Number.isNaN(X))return{scope:PB[Q],scopeID:X}}return}function TW(D,B){return D.path.replace(/\{(\w+)\}/g,(W,Q)=>{let $=B[Q];if(v($))throw new C("E_MISSING_PARAM",{param:Q});return String($)})}function yW(D){if(D===void 0)return;if(typeof D==="string")try{let B=JSON.parse(D);return j(B)?B:void 0}catch{return}return j(D)?D:void 0}var wW=new Set(["true","1","yes","on"]),xW=new Set(["false","0","no","off"]);function hW(D,B,W,Q=!1){if(D===void 0||D===null)return D;if(B==="number"||B==="integer"){let $=Number(D);return Number.isNaN($)?D:$}if(B==="boolean"){if(typeof D==="boolean")return D;if(typeof D==="number"){if(D===1)return!0;if(D===0)return!1;throw new C("E_INVALID_PARAM",{param:W,value:String(D)})}if(typeof D==="string"){let $=D.trim().toLowerCase();if(wW.has($))return!0;if(xW.has($))return!1;throw new C("E_INVALID_PARAM",{param:W,value:D})}throw new C("E_INVALID_PARAM",{param:W,value:String(D)})}if(B==="array"){if(Array.isArray(D))return D;if(typeof D==="string")return D.split(",");if(Q&&j(D))return D;return[D]}return D}function fW(D,B,W){let Q={},$=Object.keys(B.pathParams??{});if($.includes("scope")){let q=NW(W);if(!q)throw new C("E_MISSING_PARAM",{param:"scope/scopeID or product/project/execution"});Q.scope=q.scope,Q.scopeID=q.scopeID}let X=$.find((q)=>q.endsWith("ID")&&q!=="scopeID"),J=W.id??W[`${D.name}ID`]??(X?W[X]:void 0),Y=J===void 0?Number.NaN:Number(J),G=Number.isNaN(Y)?void 0:Y;if(X&&G!==void 0)Q[X]=G;for(let q of $){if(q==="scope"||q==="scopeID"||Q[q]!==void 0)continue;let H=B.pathParams?.[q],L=W[q];if(L!==void 0){Q[q]=L;continue}if(typeof H==="object"){if(H.defaultValue!==void 0)Q[q]=H.defaultValue;else if(H.options?.[0]?.value!==void 0)Q[q]=H.options[0].value}if(Q[q]===void 0)throw new C("E_MISSING_PARAM",{param:q})}return{values:Q,id:G}}function kW(D,B){let W={};for(let Q of D.params??[]){let $=B[Q.name];if($===void 0&&Q.name==="pageID")$=B.page;if($===void 0)$=Q.defaultValue??Q.options?.[0]?.value;if($===void 0&&Q.required)throw new C("E_MISSING_PARAM",{param:Q.name});if($!==void 0)W[Q.name]=$}return W}function bW(D,B){let W=yW(B.data);if(D.requestBody?.schema?.type!=="object")return W;let Q=W?{...W}:{},$=D.requestBody.schema,X=new Set($.required??[]);for(let[J,Y]of Object.entries($.properties??{})){let G=Object.prototype.hasOwnProperty.call(Q,J),q=Object.prototype.hasOwnProperty.call(B,J),H=G?Q[J]:q?B[J]:Y.defaultValue;if(H===void 0&&(Y.required||X.has(J)))throw new C("E_MISSING_PARAM",{param:J});let L=hW(H,Y.type,J,G);if(L!==void 0)Q[J]=L}return Q}function ZB(D,B,W={}){let Q=z(D.name,B);if(!Q)throw new C("E_INVALID_ACTION",{module:D.name,action:B});let{values:$,id:X}=fW(D,Q,W);return{module:D.name,action:Q,params:W,path:TW(Q,$),query:kW(Q,W),data:bW(Q,W),id:X}}function AD(D,B,W={},Q={}){let $=D.resultGetter;if(!$)return B.data??B;if(typeof $==="function")return $(B,W,Q);if(typeof $==="string")return _(B,$);let X={};for(let[J,Y]of Object.entries($))X[J]=_(B,Y);return X}function gB(D,B,W={},Q={}){let $=D.pagerGetter;if(!$)return B.pager;if(typeof $==="function")return $(B,W,Q);if(typeof $==="string")return _(B,$);let X=_(B,$.pageID),J=_(B,$.recPerPage),Y=_(B,$.recTotal);if(X===void 0||J===void 0||Y===void 0)return;return{pageID:Number(X),recPerPage:Number(J),recTotal:Number(Y)}}function V(D){return typeof D==="object"&&D!==null&&!Array.isArray(D)}function O(D){return V(D)?D:{}}function A(D,B=""){return typeof D==="string"?D:B}function vW(D){return typeof D==="number"&&Number.isFinite(D)?D:void 0}function P(D){return Array.isArray(D.children)?D.children.filter(p):[]}function p(D){return V(D)&&typeof D.flavour==="string"}function dW(D){let B=D;for(let W=0;W<3&&typeof B==="string";W+=1)try{B=JSON.parse(B)}catch(Q){let $=Q instanceof Error?Q.message:String(Q);throw TypeError(`Invalid BlockSuite snapshot JSON: ${$}`)}return B}function UB(D){let B=typeof D==="string"?dW(D):D;if(V(B)&&!p(B)&&"snapshot"in B)B=B.snapshot;if(Array.isArray(B)&&B.every(p))return{kind:"slice",blocks:B,documentLike:!1};if(V(B)&&p(B.blocks)){let W=B.blocks;return{kind:"doc",blocks:[W],root:W,meta:V(B.meta)?B.meta:void 0,documentLike:!0}}if(V(B)&&Array.isArray(B.content)){let W=B.content.filter(p);if(W.length!==B.content.length)throw TypeError("Invalid BlockSuite slice: content must contain blocks");return{kind:"slice",blocks:W,documentLike:!1}}if(p(B))return{kind:"block",blocks:[B],root:B,documentLike:B.flavour==="affine:page"};throw TypeError("Invalid BlockSuite snapshot: expected a DocSnapshot, BlockSnapshot, SliceSnapshot, or JSON string")}function FB(D,B,W,Q){if(D===void 0)return B;if(!Number.isInteger(D)||Number(D)<1||Number(D)>W)throw TypeError(`${Q} must be an integer between 1 and ${W}`);return Number(D)}function EB(D,B){let W=FB(B.maxDepth,256,1000,"maxDepth"),Q=FB(B.maxBlocks,50000,1e6,"maxBlocks"),$=new WeakSet,X=[];for(let Y=D.length-1;Y>=0;Y-=1){let G=D[Y];if(G)X.push({block:G,depth:1})}let J=0;while(X.length){let Y=X.pop();if(!Y)continue;if(Y.exit){$.delete(Y.block);continue}if($.has(Y.block))throw TypeError("Invalid BlockSuite snapshot: cyclic block children");if(J+=1,J>Q)throw RangeError(`BlockSuite snapshot exceeds maxBlocks (${Q})`);if(Y.depth>W)throw RangeError(`BlockSuite snapshot exceeds maxDepth (${W})`);$.add(Y.block),X.push({...Y,exit:!0});let G=P(Y.block);for(let q=G.length-1;q>=0;q-=1){let H=G[q];if(H)X.push({block:H,depth:Y.depth+1})}}}function ID(D){if(Array.isArray(D))return D.filter(V);if(V(D)&&Array.isArray(D.delta))return D.delta.filter(V);if(typeof D==="string")return[{insert:D}];return[]}function MB(D){return ID(D).map((B)=>typeof B.insert==="string"?B.insert:"").join("")}function zB(D){let B=D.root;if(B?.flavour==="affine:page"){let Q=ID(O(B.props).title);if(Q.length>0)return Q}let W=D.meta?.title;return typeof W==="string"?[{insert:W}]:[]}function S(D,B="link"){if(typeof D!=="string")return"";let W=D.trim().replace(/[\u0000-\u001F\u007F]/g,"");if(!W)return"";if(W.startsWith("/")||W.startsWith("./")||W.startsWith("../")||W.startsWith("#")||W.startsWith("?"))return W;let Q=/^([a-z][a-z\d+.-]*):/i.exec(W)?.[1]?.toLowerCase();if(!Q)return W;if(["http","https","mailto","tel","blob"].includes(Q))return W;if(B==="image"&&Q==="data"&&/^data:image\//i.test(W))return W;return""}function cD(D,B,W){let Q=O(B.props),$=A(Q.sourceId);if(!$)return"";let X=D.resolveAssetUrl?.($,B,W);return S(X,W==="image"?"image":"link")}function SB(D,B){let W=A(O(B.props).src);if(!W)return"";let Q=D.resolveZuiImageUrl?D.resolveZuiImageUrl(W,B):W;return S(Q,"image")}function mW(D,B){let W=new URLSearchParams;for(let[$,X]of Object.entries(B)){if(X===void 0||X===null||X==="")continue;if(Array.isArray(X)){let J=X.filter((Y)=>["string","number","boolean"].includes(typeof Y));if(J.length)W.set($,J.join(","))}else if(["string","number","boolean"].includes(typeof X))W.set($,String(X))}let Q=W.toString();if(!Q)return D;return`${D}${D.includes("?")?"&":"?"}${Q}`}function $D(D,B,W){let Q=D.resolveDocLink?.(B,W);if(Q!==void 0)return S(Q);let $=D.docLinkBaseUrl?.replace(/\/$/,"");if(!$)return"";return S(mW(`${$}/${encodeURIComponent(B.pageId)}`,B.params))}function NB(D){let B=vW(D)??0;if(B===0)return"0 B";let W=["B","kB","MB","GB","TB"],Q=Math.min(Math.floor(Math.log(Math.abs(B))/Math.log(1024)),W.length-1),$=B/1024**Q;return`${$>=10||Q===0?$.toFixed(0):$.toFixed(1)} ${W[Q]}`}function TB(D){return O(D.props).displayMode==="edgeless"}function yB(D){return typeof D==="string"?D.trim().replace(/[^a-z\d_+#.-]/gi,"").slice(0,50):""}function VD(D){return A(D).replace(/\$/g,"\\$").replace(/</g,"\\lt{}").replace(/>/g,"\\gt{}").replace(/(\]\(\s*)([^)\s]*)/gi,(B,W,Q)=>{let $=Q.replace(/&#x([\da-f]+);/gi,(X,J)=>{let Y=Number.parseInt(J,16);return Y<=127?String.fromCharCode(Y):""}).replace(/&#(\d+);/g,(X,J)=>{let Y=Number.parseInt(J,10);return Y<=127?String.fromCharCode(Y):""}).replace(/:/gi,":").replace(/[\u0000-\u0020\u007f]/g,"").toLowerCase();if(!/^(?:javascript|vbscript|data):/.test($))return B;return`${W}${Q.replace(/:|&(?:#0*58|#x0*3a|colon);/i,"%3A")}`})}function cW(D){return D.replace(/\\/g,"\\\\").replace(/([`*_[\]<>|~])/g,"\\$1").replace(/(^|\n)([ \t]*)([#>+-]|\d+[.)])(?=\s)/g,"$1$2\\$3")}function pW(D){return D.replace(/\\/g,"%5C").replace(/ /g,"%20").replace(/\(/g,"%28").replace(/\)/g,"%29").replace(/</g,"%3C").replace(/>/g,"%3E")}function iW(D){let B=D.replace(/\n/g," "),W=B.match(/`+/g)??[],Q="`".repeat(Math.max(1,...W.map((X)=>X.length+1))),$=B.startsWith("`")||B.endsWith("`")||B.startsWith(" ")&&B.endsWith(" ")&&B.trim().length>0;return`${Q}${$?" ":""}${B}${$?" ":""}${Q}`}function uW(D){let B=O(D.attributes?.mention);if(!Object.keys(B).length)return;let W=A(B.label)||A(B.name);return W?`@${W}`:void 0}function sW(D){let B=O(D.attributes?.reference),W=A(B.pageId);if(!W)return;return{pageId:W,params:O(B.params)}}function nW(D,B,W){if(typeof D.insert!=="string")return"";let Q=O(D.attributes),$=uW(D),X=A(Q.latex),J=sW(D),Y=A(Q.link),G=$??D.insert,q=!J&&(G===""||G===Y);if(!J&&G===""&&Y)G=Y;let H;if(J)H=B.resolveDocTitle?.(J.pageId),G=H||G.trim()||J.pageId;if(X)return`$${VD(X)}$`;let L=Q.code?iW(G):cW(G);if(Q.bold)L=`**${L}**`;if(Q.italic)L=`*${L}*`;if(Q.strike)L=`~~${L}~~`;if(Q.underline)L=`\\<u>${L}\\</u>`;let K=S(Y);if(J)K=$D(B,{...J,title:H},W);if(K){if(!q)L=`[${L}](${pW(K)})`}return L}function F(D,B,W){return ID(D).map((Q)=>nW(Q,B,W)).join("")}var tW=new Set(["affine:surface","affine:zui-layout","affine:zui-layout-cell","affine:zui-panel"]),lW=new Set(["affine:bookmark","affine:embed-figma","affine:embed-github","affine:embed-loom","affine:embed-youtube"]);function xB(D){return D.replace(/^\n+|\n+$/g,"")}function hB(D){return D.replace(/[ \t]+$/gm,(B)=>B.length>=2?B:"")}function i(D){return D.map(xB).filter(Boolean).join(`
|
|
1
|
+
(()=>{var{defineProperty:SD,getOwnPropertyNames:rB,getOwnPropertyDescriptor:aB}=Object,oB=Object.prototype.hasOwnProperty;function eB(D){return this[D]}var DW=(D)=>{var B=(WB??=new WeakMap).get(D),W;if(B)return B;if(B=SD({},"__esModule",{value:!0}),D&&typeof D==="object"||typeof D==="function"){for(var Q of rB(D))if(!oB.call(B,Q))SD(B,Q,{get:eB.bind(D,Q),enumerable:!(W=aB(D,Q))||W.enumerable})}return WB.set(D,B),B},WB;var BW=(D)=>D;function WW(D,B){this[D]=BW.bind(null,B)}var QB=(D,B)=>{for(var W in B)SD(D,W,{get:B[W],enumerable:!0,configurable:!0,set:WW.bind(B,W)})};var w2={};QB(w2,{switchProfile:()=>JD,sortData:()=>BD,setGlobalOptions:()=>a,searchData:()=>DD,request:()=>ED,processData:()=>h,pickFieldsSingle:()=>p,pickFields:()=>e,getProfileKey:()=>T,getProfile:()=>kD,getObjectProps:()=>UD,getModuleNames:()=>ZD,getModuleActionParams:()=>l,getModuleAction:()=>w,getModule:()=>d,getGlobalOptions:()=>x,getAllProfiles:()=>bD,filterData:()=>KD,extendModuleAction:()=>z,exportRegistry:()=>zD,deleteProfile:()=>vD,defineModules:()=>AD,defineModuleActions:()=>s,addProfile:()=>XD,ZentaoError:()=>q,ZentaoClient:()=>b,ZENTAO_PROFILES_STORAGE_KEY:()=>QD,VERSION:()=>oD,ERRORS:()=>qD,BUILD:()=>aD});var RD={};QB(RD,{switchProfile:()=>JD,sortData:()=>BD,setGlobalOptions:()=>a,searchData:()=>DD,request:()=>ED,processData:()=>h,pickFieldsSingle:()=>p,pickFields:()=>e,getProfileKey:()=>T,getProfile:()=>kD,getObjectProps:()=>UD,getModuleNames:()=>ZD,getModuleActionParams:()=>l,getModuleAction:()=>w,getModule:()=>d,getGlobalOptions:()=>x,getAllProfiles:()=>bD,filterData:()=>KD,extendModuleAction:()=>z,exportRegistry:()=>zD,deleteProfile:()=>vD,defineModules:()=>AD,defineModuleActions:()=>s,addProfile:()=>XD,ZentaoError:()=>q,ZentaoClient:()=>b,ZENTAO_PROFILES_STORAGE_KEY:()=>QD,VERSION:()=>oD,ERRORS:()=>qD,BUILD:()=>aD});var qD={E_INVALID_BASE_URL:"Invalid ZenTao baseUrl.",E_NO_GLOBAL_CLIENT:"No global client configured. Call ZentaoClient.init() or pass options.client.",E_HTTP_ERROR:"HTTP request failed: {status} {statusText}",E_NETWORK_ERROR:"Network request failed: {message}",E_TIMEOUT:"Request timed out.",E_ABORTED:"Request was aborted.",E_INSECURE_BROWSER:"The insecure option is only supported in Node.js runtimes.",E_LOGIN_FAILED:"ZenTao login failed.",E_INVALID_PROFILE:"Invalid ZenTao profile.",E_NO_PROFILE:"No ZenTao profile is configured.",E_PROFILE_NOT_FOUND:"ZenTao profile not found: {profileKey}",E_PROFILE_STORAGE_INVALID:"ZenTao profile storage is not valid JSON.",E_PROFILE_STORAGE_UNAVAILABLE:"ZenTao profile storage is unavailable in this runtime.",E_INVALID_MODULE:"Unknown module: {module}",E_INVALID_ACTION:"Unknown action: {module}-{action}",E_INVALID_MODULE_DEFINITION:"Invalid module definition.",E_INVALID_ACTION_DEFINITION:"Invalid module action definition.",E_INDETERMINATE_ACTION_METHOD:'Cannot infer HTTP method for action "{action}" from type "{type}"; specify "method" explicitly.',E_INDETERMINATE_ACTION_RESULT_TYPE:'Cannot infer result type for action "{action}" from type "{type}"; specify "resultType" explicitly.',E_MISSING_PARAM:"Missing required parameter: {param}",E_INVALID_PARAM:"Invalid value for parameter {param}: {value}",E_INVALID_REQUEST_NAME:'Request name must use the form "moduleName", "moduleName/methodName", or "moduleName/<objectID>".',E_API_FAILED:"ZenTao API returned failure: {message}",E_UPLOAD_PATH_UNSUPPORTED:"Local file paths are not supported in browser runtimes. Pass a File or Blob instead.",E_UPLOAD_FILE_NOT_FOUND:"Upload file not found: {path}",E_UPLOAD_FILE_READ_FAILED:"Failed to read upload file: {path}",E_UPLOAD_FILE_TOO_LARGE:"Upload file is {size} bytes and exceeds the {limit} byte limit.",E_INVALID_UPLOAD_SOURCE:"Invalid upload source for field: {field}"};class q extends Error{code;details;constructor(D,B,W){let Q=qD[D];if(B)for(let[$,X]of Object.entries(B))Q=Q.replaceAll(`{${$}}`,String(X));super(Q);this.name="ZentaoError",this.code=D,this.details=W}}function m(){return typeof process<"u"&&Boolean(process.versions?.node)}function $B(D){return import(D)}function QW(D){let B={};return new Headers(D).forEach((W,Q)=>{B[Q]=W}),B}function $W(D){let B=new Headers;for(let[W,Q]of Object.entries(D)){if(Q===void 0)continue;B.set(W,Array.isArray(Q)?Q.join(", "):String(Q))}return B}function GD(D,B){let W=B.toLowerCase();return Object.keys(D).some((Q)=>Q.toLowerCase()===W)}async function XW(D,B){if(D===void 0||D===null)return;if(typeof D==="string")return D;if(D instanceof Uint8Array)return D;if(D instanceof ArrayBuffer)return new Uint8Array(D);if(ArrayBuffer.isView(D))return new Uint8Array(D.buffer,D.byteOffset,D.byteLength);if(D instanceof Blob){if(D.type&&!GD(B,"content-type"))B["content-type"]=D.type;return new Uint8Array(await D.arrayBuffer())}if(typeof FormData<"u"&&D instanceof FormData){let W=new Request("https://zentao-api.local/",{method:"POST",body:D}),Q=W.headers.get("content-type");if(Q&&!GD(B,"content-type"))B["content-type"]=Q;return new Uint8Array(await W.arrayBuffer())}if(typeof URLSearchParams<"u"&&D instanceof URLSearchParams){if(!GD(B,"content-type"))B["content-type"]="application/x-www-form-urlencoded;charset=UTF-8";return D.toString()}if(typeof ReadableStream<"u"&&D instanceof ReadableStream)throw new q("E_INVALID_PARAM",{param:"body",value:"ReadableStream"});return String(D)}function XB(){return new DOMException("The operation was aborted.","AbortError")}function JW(D){let B=D.reduce(($,X)=>$+X.byteLength,0),W=new Uint8Array(B),Q=0;for(let $ of D)W.set($,Q),Q+=$.byteLength;return W.buffer}async function YW(D,B,W){let Q=new URL(D),$=Q.protocol==="https:"?await $B("node:https"):await $B("node:http"),X=QW(B.headers);if(!GD(X,"accept-encoding"))X["accept-encoding"]="identity";let J=await XW(B.body,X);return new Promise((Y,H)=>{if(B.signal?.aborted){H(XB());return}let L=!1,G,C=()=>{B.signal?.removeEventListener("abort",g)},I=(O)=>{if(L)return;L=!0,C(),H(O)},K=(O)=>{if(L)return;L=!0,C(),Y(O)},F=$.request(Q,{method:B.method??"GET",headers:X,rejectUnauthorized:W},(O)=>{G=O;let Z=[],DB=!1;O.on("data",(r)=>{Z.push(typeof r==="string"?new TextEncoder().encode(r):r)}),O.once("aborted",()=>{I(Error("HTTP response was aborted before completion."))}),O.once("error",I),O.once("close",()=>{if(!DB)I(Error("HTTP response closed before completion."))}),O.once("end",()=>{DB=!0;let r=Z.length>0?JW(Z):void 0,BB=new Response(r,{status:O.statusCode??200,statusText:O.statusMessage??"",headers:$W(O.headers)});Object.defineProperty(BB,"url",{value:D}),K(BB)})}),g=()=>{let O=XB();I(O),G?.destroy(O),F.destroy(O)};if(F.once("error",I),B.signal?.addEventListener("abort",g,{once:!0}),J!==void 0)F.write(J);F.end()})}function MD(D){if(D&&!m())throw new q("E_INSECURE_BROWSER")}async function JB(D,B,W){if(!D)return fetch(B,W);return MD(D),YW(B,W,!1)}var ND={};function x(){return{...ND}}function a(D){ND={...ND,...D}}function j(D){return Boolean(D)&&typeof D==="object"&&!Array.isArray(D)}function c(D){return D===void 0||D===null||D===""}function U(D,B){let W=B.split("."),Q=D;for(let $ of W){if(Q===null||Q===void 0||typeof Q!=="object")return;Q=Q[$]}return Q}function f(D){return Array.isArray(D)?D:[D]}function u(D){let B=D.trim().replace(/\/+$/,"");if(!B)throw new q("E_INVALID_BASE_URL");let W=B.replace(/\/api\.php\/v2$/i,""),Q;try{Q=new URL(W)}catch{throw new q("E_INVALID_BASE_URL")}if(!["http:","https:"].includes(Q.protocol)||Q.search||Q.hash)throw new q("E_INVALID_BASE_URL");return Q.toString().replace(/\/+$/,"")}function p(D,B){let W={};for(let Q of B){let $=U(D,Q);if($===void 0)continue;let X=Q.split("."),J=W;for(let Y=0;Y<X.length-1;Y++){let H=X[Y];if(!j(J[H]))J[H]={};J=J[H]}J[X[X.length-1]]=$}return W}function e(D,B){return D.map((W)=>p(W,B))}function o(D,B){let W=Number(D),Q=Number(B);if(D!==""&&B!==""&&!Number.isNaN(W)&&!Number.isNaN(Q))return W-Q;return String(D).localeCompare(String(B))}function YB(D,B){let W=Number(D),Q=Number(B);if(D!==""&&B!==""&&!Number.isNaN(W)&&!Number.isNaN(Q))return W===Q;return String(D)===String(B)}function HB(D,B){if(D===void 0||D===null)return!1;let W=String(D).toLowerCase();return f(B).some((Q)=>W.includes(String(Q).toLowerCase()))}function LB(D,B){let W=U(D,B.key),{operator:Q,value:$}=B;switch(Q){case"=":return f($).some((X)=>YB(W,X));case"!=":return f($).every((X)=>!YB(W,X));case"~":return HB(W,$);case"!~":return!HB(W,$);case">":return o(W,$)>0;case"<":return o(W,$)<0;case">=":return o(W,$)>=0;case"<=":return o(W,$)<=0;default:return!1}}function qB(D,B){if(B.conditions.length===0)return!0;return B.operator==="OR"?B.conditions.some((W)=>LB(D,W)):B.conditions.every((W)=>LB(D,W))}function KD(D,B){if(B.length===0)return D.slice();return D.filter((W)=>B.every((Q)=>qB(W,Q)))}function wD(D){let B=[],W="",Q,$=0,X=!1;for(let J of D){if(X){W+=J,X=!1;continue}if(Q){if(W+=J,J==="\\")X=!0;else if(J===Q)Q=void 0;continue}if(J==='"'||J==="'"){Q=J,W+=J;continue}if(J==="[")$+=1;else if(J==="]"&&$>0)$-=1;if(J===","&&$===0)B.push(W.trim()),W="";else W+=J}return B.push(W.trim()),B.filter(Boolean)}function TD(D){let B=D.trim(),W=B[0];return B.length>=2&&(W==='"'||W==="'")&&B.at(-1)===W?B.slice(1,-1):B}function CD(D,B){if(D===null||D===void 0)return;if(Array.isArray(D))for(let W of D)CD(W,B);else if(j(D))for(let W of Object.values(D))CD(W,B);else B.push(String(D))}function HW(D,B){let W=[];if(B&&B.length>0)for(let Q of B)CD(U(D,Q),W);else CD(D,W);return W.join("\x00").toLowerCase()}function DD(D,B,W){let Q=B.map(($)=>wD($).map((X)=>TD(X).toLowerCase()).filter(Boolean)).filter(($)=>$.length>0);if(Q.length===0)return D.slice();return D.filter(($)=>{let X=HW($,W);return Q.some((J)=>J.every((Y)=>X.includes(Y)))})}function LW(D){if(typeof D==="function")return D;let B=D.match(/^(.+):(asc|desc)$/i)??D.match(/^(.+)_(asc|desc)$/i),W=B?.[1]??D,$=(B?.[2].toLowerCase()??"asc")==="desc"?-1:1;return(X,J)=>o(U(X,W),U(J,W))*$}function BD(D,B){let W=B.map(LW);return D.slice().sort((Q,$)=>{for(let X of W){let J=X(Q,$);if(J!==0)return J}return 0})}var qW=[">=","<=","!=","!~","=","~",">","<",":"];function GW(D){let B=D.trim();if(B.startsWith("[")&&B.endsWith("]"))return wD(B.slice(1,-1)).map(TD).filter(Boolean);let W=TD(B);if(W==="true")return!0;if(W==="false")return!1;if(W!==""&&!Number.isNaN(Number(W)))return Number(W);return W}function CW(D){let B,W=0,Q=!1;for(let $=0;$<D.length;$+=1){let X=D[$];if(Q){Q=!1;continue}if(B){if(X==="\\")Q=!0;else if(X===B)B=void 0;continue}if(X==='"'||X==="'"){B=X;continue}if(X==="["){W+=1;continue}if(X==="]"&&W>0){W-=1;continue}if(W>0)continue;let J=qW.find((Y)=>D.startsWith(Y,$));if(J&&$>0)return{index:$,operator:J}}return}function KW(D){let B=CW(D);if(!B)return;let W=D.slice(0,B.index).trim();if(!W)return;return{key:W,operator:B.operator===":"?"=":B.operator,value:GW(D.slice(B.index+B.operator.length))}}function IW(D){let B=wD(D);if(B.length===0)return;let W=B.map(KW);if(W.some((Q)=>Q===void 0))return;return{operator:"AND",conditions:W}}function jW(D){if(D===void 0||D==="")return;let B=Number(D);if(!Number.isFinite(B)||B<0)return;return Math.floor(B)}function h(D,B){if(!Array.isArray(D)){let X=B,J=X.convert?X.convert(D):D;return X.pick?p(J,X.pick):{...J}}let W=B,Q=W.convert?W.convert(D):D;if(W.filter&&W.filter.length>0){let X=W.filter.map(IW).filter((J)=>J!==void 0);if(X.length>0)Q=Q.filter((J)=>X.some((Y)=>qB(J,Y)))}if(W.search&&W.search.length>0)Q=DD(Q,W.search,W.searchFields);if(W.sort){let X=W.sort.split(",").map((J)=>J.trim()).filter(Boolean);if(X.length>0)Q=BD(Q,X)}let $=jW(W.limit);if($!==void 0)Q=Q.slice(0,$);if(W.pick)Q=e(Q,W.pick);return Q}var QD="ZENTAO_PROFILES",VW=[".config","zentao","zentao.json"];function KB(D){if(D===void 0)return D;return JSON.parse(JSON.stringify(D))}function IB(){return new Date().toISOString()}function WD(D){return import(D)}var GB=Promise.resolve();function yD(D){let B=GB.then(D,D);return GB=B.catch(()=>{return}),B}function jB(){try{return globalThis.localStorage}catch{return}}async function VB(){let D=await WD("node:path"),B=process.env.HOME??process.env.USERPROFILE??(await WD("node:os")).homedir();if(!B)throw new q("E_PROFILE_STORAGE_UNAVAILABLE");return D.join(B,...VW)}function OW(D,B){let W=D.trim(),Q=u(B);if(!W)throw new q("E_INVALID_PROFILE");return`${W}@${Q}`}function xD(D){if(!j(D)||typeof D.server!=="string"||typeof D.account!=="string"||typeof D.token!=="string")throw new q("E_INVALID_PROFILE");let B=D.token.trim();if(!B)throw new q("E_INVALID_PROFILE");let W=KB(D);return delete W.key,{...W,server:u(D.server),account:D.account.trim(),token:B}}function OB(D){if(!j(D))return{profiles:[]};let B=Array.isArray(D.profiles)?D.profiles.flatMap((Q)=>{try{return[xD(Q)]}catch{return[]}}):[],W=typeof D.currentProfile==="string"?D.currentProfile:void 0;return W?{currentProfile:W,profiles:B}:{profiles:B}}function CB(D){try{return OB(JSON.parse(D))}catch(B){throw new q("E_PROFILE_STORAGE_INVALID",void 0,B)}}async function $D(){if(m()){let W=await WD("node:fs/promises"),Q=await VB();try{return CB(await W.readFile(Q,"utf8"))}catch($){if($.code==="ENOENT")return{profiles:[]};throw $}}let D=jB();if(!D)throw new q("E_PROFILE_STORAGE_UNAVAILABLE");let B=D.getItem(QD);return B?CB(B):{profiles:[]}}async function fD(D){let B=OB(D),W=`${JSON.stringify(B,null,2)}
|
|
2
|
+
`;if(m()){let $=await WD("node:fs/promises"),X=await WD("node:path"),J=await VB(),Y=X.dirname(J),H=X.join(Y,`.zentao.${Date.now()}.${Math.random().toString(36).slice(2)}.tmp`);await $.mkdir(Y,{recursive:!0,mode:448}),await $.chmod(Y,448).catch(()=>{return});try{await $.writeFile(H,W,{encoding:"utf8",mode:384}),await $.rename(H,J),await $.chmod(J,384).catch(()=>{return})}catch(L){throw await $.rm(H,{force:!0}).catch(()=>{return}),L}return}let Q=jB();if(!Q)throw new q("E_PROFILE_STORAGE_UNAVAILABLE");Q.setItem(QD,W)}function ID(D){let B=xD(D);return{...KB(B),key:T(B)}}function hD(D,B){return D.profiles.find((W)=>T(W)===B)}function AW(D){if(!D.currentProfile||!hD(D,D.currentProfile)){let B=D.profiles.at(-1);D.currentProfile=B?T(B):void 0}}function T(D){return OW(D.account,D.server)}async function bD(){return(await $D()).profiles.map(ID)}async function kD(D){let B=await $D(),W=D??B.currentProfile;if(!W)return;let Q=hD(B,W);return Q?ID(Q):void 0}function XD(D){return yD(async()=>{let B=await $D(),W=IB(),Q=xD({...D,loginTime:D.loginTime??W,lastUsedTime:D.lastUsedTime??W}),$=T(Q),X=B.profiles.findIndex((J)=>T(J)===$);if(X>=0)B.profiles[X]=Q;else B.profiles.push(Q);return B.currentProfile=$,await fD(B),ID(Q)})}function vD(D){return yD(async()=>{let B=await $D(),W=B.profiles.filter((Q)=>T(Q)!==D);if(W.length===B.profiles.length)return!1;return B.profiles=W,AW(B),await fD(B),!0})}function JD(D){return yD(async()=>{let B=await $D(),W=D??B.currentProfile;if(!W)throw new q("E_NO_PROFILE");let Q=hD(B,W);if(!Q)throw new q("E_PROFILE_NOT_FOUND",{profileKey:W});return Q.lastUsedTime=IB(),B.currentProfile=W,await fD(B),ID(Q)})}var _W=1e4;function dD(D,B,W){if(W===void 0)return;if(Array.isArray(W)){W.forEach((Q,$)=>dD(D,`${B}[${$}]`,Q));return}if(AB(W)){for(let[Q,$]of Object.entries(W))dD(D,`${B}[${Q}]`,$);return}D.append(B,W===null?"":String(W))}function gW(D,B,W){let Q=B.startsWith("/")?B:`/${B}`,$=new URL(`${D}${Q}`);for(let[X,J]of Object.entries(W??{}))dD($.searchParams,X,J);return $.toString()}function AB(D){if(!D||typeof D!=="object")return!1;let B=Object.getPrototypeOf(D);return B===Object.prototype||B===null}function jD(D,B){let W=globalThis[B];return typeof W==="function"&&D instanceof W}function PW(D){return D instanceof ArrayBuffer||ArrayBuffer.isView(D)}function _B(D,B,W){if(W===void 0)return;if(Array.isArray(W)){for(let Q of W)_B(D,B,Q);return}D.append(B,W===null?"":String(W))}function FW(D,B,W){if(D===void 0||D===null)return;if(jD(D,"ReadableStream"))throw new q("E_INVALID_PARAM",{param:"body",value:"ReadableStream"});if(B==="form"){let Q=D instanceof URLSearchParams?D:new URLSearchParams;if(!(D instanceof URLSearchParams)&&AB(D))for(let[$,X]of Object.entries(D))_B(Q,$,X);else if(!(D instanceof URLSearchParams))throw new q("E_INVALID_PARAM",{param:"body",value:String(D)});if(!W.has("Content-Type"))W.set("Content-Type","application/x-www-form-urlencoded;charset=UTF-8");return Q}if(B==="raw"||typeof D==="string"||PW(D)||jD(D,"FormData")||jD(D,"URLSearchParams")||jD(D,"Blob"))return D;if(!W.has("Content-Type"))W.set("Content-Type","application/json");return JSON.stringify(D)}function ZW(D,B){let W=new AbortController,Q=!1,$=!1,X,J=()=>{if($)return;$=!0,clearTimeout(X),B?.removeEventListener("abort",Y)},Y=()=>{W.abort(B?.reason),J()};if(X=setTimeout(()=>{Q=!0,W.abort(),J()},D),X.unref?.(),B?.aborted)Y();else B?.addEventListener("abort",Y,{once:!0});return{signal:W.signal,cleanup:J,didTimeout:()=>Q}}function gB(D,B,W={branches:new Set,cleanup:B,complete:!1}){let Q=Symbol();W.branches.add(Q);let $=!1,X=(G)=>{if($)return;if($=!0,W.branches.delete(Q),!W.complete&&(G||W.branches.size===0))W.complete=!0,W.cleanup()},J=D,Y;while(J&&!Y){let G=Object.getOwnPropertyDescriptor(J,"body");if(G?.get)Y=G.get.bind(D);J=Object.getPrototypeOf(J)}if(!Y)return X(!0),D;if(!Y())return X(!0),D;let H;Object.defineProperty(D,"body",{configurable:!0,get(){if(!Y())return H=null,X(!0),null;if(H===void 0){let C,I=()=>C??=Y().getReader();H=new ReadableStream({type:"bytes",async pull(K){let F;try{F=I()}catch(g){K.error(g);return}try{let g=await F.read();if(g.done){X(!0);let O="byobRequest"in K?K.byobRequest:null;K.close(),O?.respond(0)}else{let O=new Uint8Array(g.value.byteLength);O.set(g.value),K.enqueue(O)}}catch(g){X(!0),K.error(g)}},async cancel(K){let F=I();try{await F.cancel(K)}finally{X(!1)}}},{highWaterMark:0})}return H}});for(let G of["arrayBuffer","blob","formData","json","text","bytes"]){let C=Reflect.get(D,G);if(typeof C!=="function")continue;Object.defineProperty(D,G,{configurable:!0,value:(...I)=>{if(H?.locked)return Promise.reject(TypeError("Response body is locked."));let K=Y(),F=!D.bodyUsed&&!K?.locked,g=F?D.body?.getReader():void 0,O;try{O=Reflect.apply(C,D,I)}catch(Z){throw g?.releaseLock(),Z}if(!F)return O;return O.then((Z)=>{return g?.releaseLock(),X(!0),Z},(Z)=>{if(g?.releaseLock(),D.bodyUsed)X(!0);throw Z})}})}let L=D.clone.bind(D);return Object.defineProperty(D,"clone",{configurable:!0,value:()=>{if(H?.locked)throw TypeError("Response body is locked.");return gB(L(),B,W)}}),D}async function UW(D,B="auto"){if(B==="response")return D;if(B==="arrayBuffer")return D.arrayBuffer();if(B==="blob")return D.blob();if(B==="text")return D.text();if(B==="json"){let Q=await D.text();return Q===""?void 0:JSON.parse(Q)}let W=await D.text();if(W==="")return;try{return JSON.parse(W)}catch{return W}}class b{siteUrl;baseUrl;token;timeout;insecure;constructor(D){let B=typeof D==="string"?{baseUrl:D}:D;this.siteUrl=u(B.baseUrl),this.baseUrl=`${this.siteUrl}/api.php/v2`,this.token=B.token,this.timeout=B.timeout,this.insecure=B.insecure}async request(D,B={}){let W=x(),Q=B.method??"GET",$=B.timeout??W.timeout??this.timeout??_W,X=B.insecure??W.insecure??this.insecure;MD(X);let J=gW(this.baseUrl,D,B.query),Y=new Headers(B.headers);if(this.token)Y.set("Token",this.token);let H={method:Q,headers:Y,redirect:"manual"};if(B.body!==void 0&&Q!=="GET")H.body=FW(B.body,B.bodyType,Y);let{signal:L,cleanup:G,didTimeout:C}=ZW($,B.signal);H.signal=L;let I=!1;try{let K=await JB(X,J,H);if(!K.ok)throw new q("E_HTTP_ERROR",{status:K.status,statusText:K.statusText},{url:K.url,status:K.status,statusText:K.statusText,body:await K.text().catch(()=>{return})});if(B.responseType==="response")return I=!0,gB(K,G);return await UW(K,B.responseType)}catch(K){if(L.aborted)throw new q(C()?"E_TIMEOUT":"E_ABORTED",void 0,K);if(K instanceof q)throw K;if(K instanceof DOMException&&K.name==="AbortError")throw new q("E_ABORTED",void 0,K);throw new q("E_NETWORK_ERROR",{message:K.message??String(K)},K)}finally{if(!I)G()}}async get(D,B={}){return this.request(D,{...B,method:"GET"})}async post(D,B,W={}){return this.request(D,{...W,method:"POST",body:B})}async put(D,B,W={}){return this.request(D,{...W,method:"PUT",body:B})}async delete(D,B={}){return this.request(D,{...B,method:"DELETE"})}async login(D,B){let W=await this.post("/users/login",{account:D,password:B});if(W.status!=="success"||!W.token)throw new q("E_LOGIN_FAILED");this.token=W.token;let Q=x();if(Q.persistProfiles){let $={},X=this.timeout??Q.timeout,J=this.insecure??Q.insecure;if(X!==void 0)$.timeout=X;if(J!==void 0)$.insecure=J;await XD({server:this.siteUrl,account:D,token:W.token,user:j(W.user)?W.user:void 0,serverConfig:j(W.serverConfig)?W.serverConfig:void 0,config:Object.keys($).length>0?$:void 0})}return W.token}static create(D){return new b(D)}static init(D){let B=new b(D);return a({client:B}),B}static async fromProfile(D){let B=await JD(D);return new b({baseUrl:B.server,token:B.token,timeout:typeof B.config?.timeout==="number"?B.config.timeout:void 0,insecure:typeof B.config?.insecure==="boolean"?B.config.insecure:void 0})}}var PB=[{name:"user",display:"用户",description:"用户管理,支持获取用户列表、创建用户、获取用户详情、修改用户信息、删除用户",actions:[{name:"list",display:"获取用户列表",type:"list",method:"get",path:"/users",resultType:"list",pagerGetter:"pager",resultGetter:"users",params:[{name:"browseType",required:!1,type:"string",description:"浏览类型",options:[{value:"inside",label:"内部用户"},{value:"outside",label:"内部用户"}]},{name:"orderBy",required:!1,type:"string",description:"排序",options:[{value:"id_asc",label:"ID 升序"},{value:"id_desc",label:"ID 降序"},{value:"realname_asc",label:"姓名 升序"},{value:"realname_desc",label:"姓名 降序"},{value:"account_asc",label:"用户名 升序"},{value:"account_desc",label:"用户名 降序"}]},{name:"recPerPage",required:!1,type:"number",description:"每页数量,不超过1000"},{name:"pageID",required:!1,type:"number",description:"页码,从第1页开始"},{name:"filters",required:!1,type:"array",description:"搜索条件数组,每项包含 field/operator/value/join/group;field 必须是该接口支持的搜索字段,operator 使用该接口搜索配置支持的操作符。支持搜索字段:realname(姓名,示例:admin);email(邮箱,示例:关键字);dept(部门,示例:all);account(用户名,示例:admin);role(职位,枚举:dev 研发 | qa 测试 | pm 项目经理 | po 产品经理 | td 研发主管 | pd 产品主管 | qd 测试主管 | top 高层管理 | others 其他);phone(电话,示例:关键字);visions(界面类型,枚举:rnd 研发综合界面 | lite 运营管理界面);join(入职日期,示例:2026-01-01);id(用户编号,示例:1);commiter(源代码帐号,示例:all);gender(性别,枚举:m 男 | f 女);qq(QQ,示例:关键字);skype(Skype,示例:关键字);dingding(钉钉,示例:关键字);weixin(微信,示例:关键字);slack(Slack,示例:关键字);whatsapp(WhatsApp,示例:关键字);address(通讯地址,示例:关键字);zipcode(邮编,示例:关键字)",style:"deepObject",explode:!0},{name:"groupJoin",required:!1,type:"string",description:"条件组之间的连接方式",options:[{value:"and",label:"and"},{value:"or",label:"or"}]}]},{name:"create",display:"创建用户",type:"create",method:"post",path:"/users",resultType:"object",requestBody:{required:!0,type:"object",schema:{type:"object",properties:{account:{type:"string",description:"登录名"},realname:{type:"string",description:"姓名"},password:{type:"string",description:"密码"}},required:["account","realname","password"]},example:{account:"productmanager",realname:"产品经理",password:"123Qwe!@#"}}},{name:"get",display:"获取用户详情",type:"get",method:"get",path:"/users/{userID}",resultType:"object",resultGetter:"user",pathParams:{userID:"用户ID"}},{name:"update",display:"修改用户信息",type:"update",method:"put",path:"/users/{userID}",resultType:"object",pathParams:{userID:"用户ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{realname:{type:"string",description:"真实姓名"},dept:{type:"integer",description:"部门",format:"int32"},join:{type:"string",description:"入职日期"},group:{type:"array",items:{type:"string"},description:"权限分组"},email:{type:"string",description:"邮箱"},visions:{type:"array",items:{type:"string"},description:"界面类型(研发综合界面 rnd | 运营管理界面 lite)"},mobile:{type:"string",description:"手机"},weixin:{type:"string",description:"微信"},password:{type:"string",description:"密码"}}},example:{realname:"技术经理",dept:"0",join:"2025-01-01",group:[1],email:"test@test.com",visions:["rnd"],mobile:"13812345678",weixin:"15512345678",password:"P@ssw0rd"}}},{name:"delete",display:"删除用户",type:"delete",method:"delete",path:"/users/{userID}",resultType:"text",pathParams:{userID:"用户ID"}}]},{name:"program",display:"项目集",description:"项目集管理,支持获取项目集列表、创建项目集、获取项目集详情、修改项目集、删除项目集",actions:[{name:"list",display:"获取项目集列表",type:"list",method:"get",path:"/programs",resultType:"list",pagerGetter:"pager",resultGetter:"programs",params:[{name:"browseType",required:!1,type:"string",description:"浏览类型",options:[{value:"all",label:"全部"},{value:"unclosed",label:"未关闭"},{value:"wait",label:"未开始"},{value:"doing",label:"进行中"},{value:"suspended",label:"已挂起"},{value:"delayed",label:"已延期"},{value:"closed",label:"已关闭"}]},{name:"orderBy",required:!1,type:"string",description:"排序",options:[{value:"id_asc",label:"ID 升序"},{value:"id_desc",label:"ID 降序"},{value:"name_asc",label:"名称 升序"},{value:"name_desc",label:"名称 降序"},{value:"begin_asc",label:"计划开始 升序"},{value:"begin_desc",label:"计划开始 降序"},{value:"end_asc",label:"计划结束 升序"},{value:"end_desc",label:"计划结束 降序"}]},{name:"recPerPage",required:!1,type:"number",description:"每页数量,不超过1000"},{name:"pageID",required:!1,type:"number",description:"页码,从第1页开始"},{name:"filters",required:!1,type:"array",description:"搜索条件数组,每项包含 field/operator/value/join/group;field 必须是该接口支持的搜索字段,operator 使用该接口搜索配置支持的操作符。支持搜索字段:name(项目集名称,示例:关键字);PM(负责人,用户,示例:admin);openedDate(创建时间,示例:2026-01-01);status(状态,枚举:wait 未开始 | doing 进行中 | suspended 已挂起 | closed 已关闭);openedBy(创建者,用户,示例:admin);begin(计划开始,示例:2026-01-01);end(计划完成,示例:2026-01-01);realBegan(实际开始,示例:2026-01-01);realEnd(实际完成,示例:2026-01-01);closedDate(关闭日期,示例:2026-01-01);lastEditedDate(最后编辑日期,示例:2026-01-01);desc(项目集描述,示例:关键字)",style:"deepObject",explode:!0},{name:"groupJoin",required:!1,type:"string",description:"条件组之间的连接方式",options:[{value:"and",label:"and"},{value:"or",label:"or"}]}]},{name:"create",display:"创建项目集",type:"create",method:"post",path:"/programs",resultType:"object",requestBody:{required:!0,type:"object",schema:{type:"object",properties:{name:{type:"string",description:"项目集名称"},begin:{type:"string",description:"计划开始日期"},end:{type:"string",description:"计划完成日期"},PM:{type:"string",description:"计划完成日期"},desc:{type:"string",description:"项目集描述"}},required:["name","begin","end"]},example:{name:"智能睡眠",begin:"2025-01-01",end:"2026-12-01",PM:"productManager",desc:"智能家居项目集"}}},{name:"get",display:"获取项目集详情",type:"get",method:"get",path:"/programs/{programID}",resultType:"object",resultGetter:"program",pathParams:{programID:"项目集ID"}},{name:"update",display:"修改项目集",type:"update",method:"put",path:"/programs/{programID}",resultType:"object",pathParams:{programID:"项目集ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{name:{type:"string",description:"项目集名称"},begin:{type:"string",description:"计划开始日期"},end:{type:"string",description:"计划完成日期"},PM:{type:"string",description:"计划完成日期"},desc:{type:"string",description:"项目集描述"}},required:["name","begin","end"]},example:{name:"智能家居",begin:"2025-01-01",end:"2026-12-01",PM:"productManager",desc:"智能家居项目集"}}},{name:"delete",display:"删除项目集",type:"delete",method:"delete",path:"/programs/{programID}",resultType:"text",pathParams:{programID:"项目集ID"}}]},{name:"product",display:"产品",description:"产品管理,支持获取产品列表、获取项目集的产品列表、创建产品、关闭产品、创建产品的需求模块、创建产品的Bug模块、创建产品的用例模块、获取产品详情、修改产品、删除产品",actions:[{name:"list",display:"获取产品列表",type:"list",method:"get",path:"/products",resultType:"list",pagerGetter:"pager",resultGetter:"products",params:[{name:"browseType",required:!1,type:"string",description:"浏览类型",options:[{value:"all",label:"全部"},{value:"noclosed",label:"未关闭"},{value:"closed",label:"已结束"}]},{name:"orderBy",required:!1,type:"string",description:"排序",options:[{value:"id_asc",label:"ID 升序"},{value:"id_desc",label:"ID 降序"},{value:"title_asc",label:"名称 升序"},{value:"title_desc",label:"名称 降序"},{value:"begin_asc",label:"计划开始 升序"},{value:"begin_desc",label:"计划开始 降序"},{value:"end_asc",label:"计划结束 升序"},{value:"end_desc",label:"计划结束 降序"}]},{name:"recPerPage",required:!1,type:"number",description:"每页数量,不超过1000"},{name:"pageID",required:!1,type:"number",description:"页码,从第1页开始"}]},{name:"programProducts",display:"获取项目集的产品列表",type:"list",method:"get",path:"/programs/{programID}/products",resultType:"list",pagerGetter:"pager",resultGetter:"products",pathParams:{programID:"项目集ID"},params:[{name:"browseType",required:!1,type:"string",description:"状态,默认是noclosed",defaultValue:"noclosed",options:[{value:"all",label:"全部"},{value:"noclosed",label:"未关闭"},{value:"closed",label:"已结束"}]},{name:"orderBy",required:!1,type:"string",description:"排序",options:[{value:"id_asc",label:"ID 升序"},{value:"id_desc",label:"ID 降序"},{value:"name_asc",label:"名称 升序"},{value:"name_desc",label:"名称 降序"},{value:"begin_asc",label:"计划开始 升序"},{value:"begin_desc",label:"计划开始 降序"},{value:"end_asc",label:"计划结束 升序"},{value:"end_desc",label:"计划结束 降序"}]},{name:"recPerPage",required:!1,type:"number",description:"每页数量,不超过1000"},{name:"pageID",required:!1,type:"number",description:"页码,从第1页开始"}]},{name:"create",display:"创建产品",type:"create",method:"post",path:"/products",resultType:"object",requestBody:{required:!0,type:"object",schema:{type:"object",properties:{name:{type:"string",description:"产品名称"},program:{type:"integer",description:"所属项目集",format:"int32"},line:{type:"integer",description:"所属产品线",format:"int32"},type:{type:"string",description:"类型(normal 正常 | branch 多分支 | platform 多平台)"},PO:{type:"string",description:"产品负责人"},reviewer:{type:"array",items:{type:"string"},description:"评审人"},desc:{type:"array",items:{type:"string"},description:"产品描述"},QD:{type:"string",description:"测试负责人"},RD:{type:"string",description:"发布负责人"},acl:{type:"string",description:"访问控制(open 公开 | private 私有)"}},required:["name"]},example:{name:"智能头枕",program:1,line:0,type:"normal",PO:"normal",reviewer:["productManager"],desc:"智能健康头枕",QD:"productManager",RD:"productManager",acl:"open"}}},{name:"close",display:"关闭产品",type:"action",method:"post",path:"/products/{productID}/close",resultType:"text",pathParams:{productID:"产品ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{comment:{type:"string",description:"备注"}}}}},{name:"createStoryModule",display:"创建产品的需求模块",type:"create",method:"post",path:"/products/{productID}/story/modules",resultType:"object",pathParams:{productID:"产品ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{name:{type:"string",description:"模块名称"},parentID:{type:"integer",description:"父模块",format:"int32"}}},example:{name:"需求模块",parentID:"0"}}},{name:"createBugModule",display:"创建产品的Bug模块",type:"create",method:"post",path:"/products/{productID}/bug/modules",resultType:"object",pathParams:{productID:"产品ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{name:{type:"string",description:"模块名称"},parentID:{type:"integer",description:"父模块",format:"int32"}}},example:{name:"Bug模块",parentID:"0"}}},{name:"createTestcaseModule",display:"创建产品的用例模块",type:"create",method:"post",path:"/products/{productID}/testcase/modules",resultType:"object",pathParams:{productID:"产品ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{name:{type:"string",description:"模块名称"},parentID:{type:"integer",description:"父模块",format:"int32"}}},example:{name:"用例模块",parentID:"0"}}},{name:"get",display:"获取产品详情",type:"get",method:"get",path:"/products/{productID}",resultType:"object",resultGetter:"product",pathParams:{productID:"产品ID"}},{name:"update",display:"修改产品",type:"update",method:"put",path:"/products/{productID}",resultType:"object",pathParams:{productID:"产品ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{name:{type:"string",description:"产品名称"},program:{type:"integer",description:"所属项目集",format:"int32"},line:{type:"integer",description:"所属产品线",format:"int32"},type:{type:"string",description:"类型(normal 正常 | branch 多分支 | platform 多平台)"},PO:{type:"string",description:"产品负责人"},reviewer:{type:"array",items:{type:"string"},description:"评审人"},desc:{type:"array",items:{type:"string"},description:"产品描述"},QD:{type:"string",description:"测试负责人"},RD:{type:"string",description:"发布负责人"},acl:{type:"string",description:"访问控制(open 公开 | private 私有)"}},required:["name"]},example:{name:"智能照明",program:1,line:0,type:"normal",PO:"normal",reviewer:["productManager"],desc:"智能家庭照明",QD:"productManager",RD:"productManager",acl:"open"}}},{name:"delete",display:"删除产品",type:"delete",method:"delete",path:"/products/{productID}",resultType:"text",pathParams:{productID:"产品ID"}}]},{name:"project",display:"项目",description:"项目管理,支持获取项目列表、获取项目集的项目列表、获取项目团队列表、获取项目成员列表、创建项目、关闭项目、创建项目需求、创建项目Bug、创建项目任务、修改项目、删除项目、维护项目成员",actions:[{name:"list",display:"获取项目列表",type:"list",method:"get",path:"/projects",resultType:"list",pagerGetter:"pager",resultGetter:"projects",params:[{name:"browseType",required:!1,type:"string",description:"项目状态,默认是undone",defaultValue:"undone",options:[{value:"all",label:"全部"},{value:"undone",label:"未完成"},{value:"wait",label:"未开始"},{value:"doing",label:"进行中"}]},{name:"orderBy",required:!1,type:"string",description:"排序",options:[{value:"id_asc",label:"ID 升序"},{value:"id_desc",label:"ID 降序"},{value:"name_asc",label:"名称 升序"},{value:"name_desc",label:"名称 降序"},{value:"begin_asc",label:"计划开始 升序"},{value:"begin_desc",label:"计划开始 降序"},{value:"end_asc",label:"计划结束 升序"},{value:"end_desc",label:"计划结束 降序"}]},{name:"recPerPage",required:!1,type:"number",description:"每页数量,不超过1000"},{name:"pageID",required:!1,type:"number",description:"页码,从第1页开始"},{name:"filters",required:!1,type:"array",description:"搜索条件数组,每项包含 field/operator/value/join/group;field 必须是该接口支持的搜索字段,operator 使用该接口搜索配置支持的操作符。支持搜索字段:name(项目名称,示例:关键字);code(项目代号,示例:关键字);id(项目ID,示例:1);model(项目管理方式,枚举:scrum Scrum | waterfall 瀑布 | kanban 看板 | agileplus 融合敏捷 | waterfallplus 融合瀑布);hasProduct(项目类型,枚举:1 产品型 | 0 项目型);parent(所属项目集,示例:all);status(状态,枚举:wait 未开始 | doing 进行中 | suspended 已挂起 | closed 已关闭 | delay 已延期);desc(项目描述,示例:关键字);PM(负责人,用户,示例:admin);openedDate(创建日期,示例:2026-01-01);begin(计划开始,示例:2026-01-01);end(计划完成,示例:2026-01-01);realBegan(实际开始,示例:2026-01-01);realEnd(实际完成,示例:2026-01-01);openedBy(由谁创建,用户,示例:admin);closedBy(由谁关闭,用户,示例:admin);lastEditedDate(最后编辑日期,示例:2026-01-01);closedDate(关闭日期,示例:2026-01-01)",style:"deepObject",explode:!0},{name:"groupJoin",required:!1,type:"string",description:"条件组之间的连接方式",options:[{value:"and",label:"and"},{value:"or",label:"or"}]}]},{name:"programProjects",display:"获取项目集的项目列表",type:"list",method:"get",path:"/programs/{programID}/projects",resultType:"list",pagerGetter:"pager",resultGetter:"projects",pathParams:{programID:"项目集ID"},params:[{name:"browseType",required:!1,type:"string",description:"项目状态,默认是undone",defaultValue:"undone",options:[{value:"all",label:"全部"},{value:"undone",label:"未完成"},{value:"wait",label:"未开始"},{value:"doing",label:"进行中"}]},{name:"orderBy",required:!1,type:"string",description:"排序",options:[{value:"id_asc",label:"ID 升序"},{value:"id_desc",label:"ID 降序"},{value:"name_asc",label:"名称 升序"},{value:"name_desc",label:"名称 降序"},{value:"begin_asc",label:"计划开始 升序"},{value:"begin_desc",label:"计划开始 降序"},{value:"end_asc",label:"计划结束 升序"},{value:"end_desc",label:"计划结束 降序"}]},{name:"recPerPage",required:!1,type:"number",description:"每页数量,不超过1000"},{name:"pageID",required:!1,type:"number",description:"页码,从第1页开始"}]},{name:"team",display:"获取项目团队列表",type:"list",method:"get",path:"/projects/team",resultType:"list",resultGetter:"members",params:[{name:"projectID",required:!0,type:"number",description:"项目ID"}]},{name:"projectMembers",display:"获取项目成员列表",type:"list",method:"get",path:"/projects/{projectID}/members",resultType:"list",resultGetter:"members",pathParams:{projectID:"项目ID"}},{name:"create",display:"创建项目",type:"create",method:"post",path:"/projects",resultType:"object",requestBody:{required:!0,type:"object",schema:{type:"object",properties:{name:{type:"string",description:"项目名称"},model:{type:"string",description:"项目管理方式(scrum 敏捷 | waterfall 瀑布 | kanban 看板 | agileplus 融合敏捷 | waterfallplus 融合瀑布)"},begin:{type:"string",description:"开始日期"},end:{type:"string",description:"结束日期"},products:{type:"array",items:{type:"string"},description:"关联产品"},parent:{type:"integer",description:"所属项目集",format:"int32"},workflowGroup:{type:"integer",description:"项目流程,付费版功能,开源版可以不填",format:"int32"},PM:{type:"string",description:"项目负责人"}},required:["name","model","begin","end","workflowGroup"]},example:{name:"智能设备研发",model:"scrum",begin:"2025-01-01",end:"2026-10-01",products:[1],parent:1,workflowGroup:13,PM:"projectManager"}}},{name:"close",display:"关闭项目",type:"action",method:"post",path:"/projects/{projectID}/close",resultType:"text",pathParams:{projectID:"项目ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{realEnd:{type:"string",description:"实际完成日期"},comment:{type:"string",description:"备注"}},required:["realEnd"]},example:{realEnd:"2026-08-19"}}},{name:"createStory",display:"创建项目需求",type:"create",method:"post",path:"/projects/{projectID}/stories",resultType:"object",pathParams:{projectID:"项目ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{productID:{type:"integer",description:"所属产品;项目型项目可不传,产品型项目必须传",format:"int32"},title:{type:"string",description:"需求标题"},spec:{type:"string",description:"需求描述"},pri:{type:"integer",description:"优先级",format:"int32"},category:{type:"string",description:"类别"},reviewer:{type:"array",items:{type:"string"},description:"评审人"}},required:["title"]},example:{productID:1,title:"项目型项目的需求",spec:"需求描述",pri:3,category:"feature",reviewer:["productManager"]}}},{name:"createBug",display:"创建项目Bug",type:"create",method:"post",path:"/projects/{projectID}/bugs",resultType:"object",pathParams:{projectID:"项目ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{productID:{type:"integer",description:"所属产品;项目型项目可不传,产品型项目必须传",format:"int32"},title:{type:"string",description:"Bug标题"},openedBuild:{type:"array",items:{type:"string"},description:"影响版本,主干是trunk,其他版本使用版本ID"},severity:{type:"integer",description:"严重程度",format:"int32"},pri:{type:"integer",description:"优先级",format:"int32"},type:{type:"string",description:"Bug类型"},steps:{type:"string",description:"重现步骤"}},required:["title","openedBuild"]},example:{productID:1,title:"项目型项目的Bug",openedBuild:["trunk"],severity:3,pri:3,type:"codeerror"}}},{name:"createTask",display:"创建项目任务",type:"create",method:"post",path:"/projects/{projectID}/tasks",resultType:"object",pathParams:{projectID:"项目ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{name:{type:"string",description:"任务名称"},executionID:{type:"integer",description:"所属执行;无执行项目可不传,有执行项目必须传",format:"int32"},type:{type:"string",description:"任务类型"},assignedTo:{type:"string",description:"指派给"},estStarted:{type:"string",description:"预计开始"},deadline:{type:"string",description:"截止日期"},pri:{type:"integer",description:"优先级",format:"int32"},estimate:{type:"number",description:"预计工时",format:"float"},module:{type:"integer",description:"所属模块",format:"int32"},story:{type:"integer",description:"相关需求",format:"int32"},desc:{type:"string",description:"任务描述"}},required:["name"]},example:{name:"无执行项目任务",executionID:3,type:"devel",assignedTo:"admin",estStarted:"2026-01-01",deadline:"2026-01-10",pri:1,estimate:1,module:0,story:0}}},{name:"update",display:"修改项目",type:"update",method:"put",path:"/projects/{projectID}",resultType:"object",pathParams:{projectID:"项目ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{name:{type:"string",description:"项目名称"},model:{type:"string",description:"项目管理方式(scrum 敏捷 | waterfall 瀑布 | kanban 看板 | agileplus 融合敏捷 | waterfallplus 融合瀑布)"},begin:{type:"string",description:"开始日期"},end:{type:"string",description:"结束日期"},products:{type:"array",items:{type:"string"},description:"关联产品"},parent:{type:"integer",description:"所属项目集",format:"int32"},workflowGroup:{type:"integer",description:"项目流程,付费版功能,开源版可以不填",format:"int32"},PM:{type:"string",description:"项目负责人"}},required:["name","model","begin","end","workflowGroup"]},example:{name:"智能设备研发",model:"scrum",begin:"2025-01-01",end:"2026-10-01",products:[1],parent:1,workflowGroup:13,PM:"projectManager"}}},{name:"delete",display:"删除项目",type:"delete",method:"delete",path:"/projects/{projectID}",resultType:"text",pathParams:{projectID:"项目ID"}},{name:"members",display:"维护项目成员",type:"action",method:"put",path:"/projects/{projectID}/members",resultType:"text",pathParams:{projectID:"项目ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{account:{type:"array",items:{type:"string"},description:'成员账号,多人时按顺序设置。例如 account=["admin","dev1"] 时,role[0] 对应 admin,role[1] 对应 dev1'},role:{type:"array",items:{type:"string"},description:"成员角色,与account顺序一一对应"},days:{type:"array",items:{type:"string"},description:"可用工作日,与account顺序一一对应"},hours:{type:"array",items:{type:"string"},description:"每日工时,与account顺序一一对应"},limited:{type:"array",items:{type:"string"},description:"是否限制日期,与account顺序一一对应"}},required:["account"]},example:{account:["admin","dev1"],role:["PM","dev"],days:[5,3],hours:[7,7],limited:["no","no"]}}}]},{name:"execution",display:"执行",description:"执行管理,支持获取执行列表、获取项目的执行列表、获取执行团队列表、获取执行成员列表、创建执行(迭代/阶段/看板)、关闭执行、创建执行的任务模块、获取执行详情、修改执行、删除执行、维护执行成员",actions:[{name:"list",display:"获取执行列表",type:"list",method:"get",path:"/executions",resultType:"list",pagerGetter:"pager",resultGetter:"executions",params:[{name:"browseType",required:!1,type:"string",description:"执行状态,默认是undone",defaultValue:"undone",options:[{value:"all",label:"全部"},{value:"undone",label:"未完成"},{value:"wait",label:"未开始"},{value:"doing",label:"进行中"}]},{name:"orderBy",required:!1,type:"string",description:"排序",options:[{value:"rawID_asc",label:"RAWID 升序"},{value:"rawID_desc",label:"RAWID 降序"},{value:"nameCol_asc",label:"名称 升序"},{value:"nameCol_desc",label:"名称 降序"},{value:"begin_asc",label:"计划开始 升序"},{value:"begin_desc",label:"计划开始 降序"},{value:"end_asc",label:"计划结束 升序"},{value:"end_desc",label:"计划结束 降序"}]},{name:"recPerPage",required:!1,type:"number",description:"每页数量,不超过1000"},{name:"pageID",required:!1,type:"number",description:"页码,从第1页开始"},{name:"filters",required:!1,type:"array",description:"搜索条件数组,每项包含 field/operator/value/join/group;field 必须是该接口支持的搜索字段,operator 使用该接口搜索配置支持的操作符。支持搜索字段:activatedDate,assignedDate,assignedTo,canceledBy,canceledDate,closedBy,closedDate,closedReason,consumed,deadline,desc,estStarted,estimate,execution,finishedBy,finishedDate,fromBug,id,keywords,lastEditedBy,lastEditedDate,left,mailto,module,name,openedBy,openedDate,pri,project,realStarted,status,story,type",style:"deepObject",explode:!0},{name:"groupJoin",required:!1,type:"string",description:"条件组之间的连接方式",options:[{value:"and",label:"and"},{value:"or",label:"or"}]}]},{name:"projectExecutions",display:"获取项目的执行列表",type:"list",method:"get",path:"/projects/{projectID}/executions",resultType:"list",pagerGetter:"pager",resultGetter:"executions",pathParams:{projectID:"项目ID"},params:[{name:"browseType",required:!1,type:"string",description:"执行状态,默认是undone",defaultValue:"undone",options:[{value:"all",label:"全部"},{value:"undone",label:"未完成"},{value:"wait",label:"未开始"},{value:"doing",label:"进行中"}]},{name:"orderBy",required:!1,type:"string",description:"排序",options:[{value:"rawID_asc",label:"RAWID 升序"},{value:"rawID_desc",label:"RAWID 降序"},{value:"nameCol_asc",label:"名称 升序"},{value:"nameCol_desc",label:"名称 降序"},{value:"begin_asc",label:"计划开始 升序"},{value:"begin_desc",label:"计划开始 降序"},{value:"end_asc",label:"计划结束 升序"},{value:"end_desc",label:"计划结束 降序"}]},{name:"recPerPage",required:!1,type:"number",description:"每页数量,不超过1000"},{name:"pageID",required:!1,type:"number",description:"页码,从第1页开始"}]},{name:"team",display:"获取执行团队列表",type:"list",method:"get",path:"/executions/team",resultType:"list",resultGetter:"members",params:[{name:"executionID",required:!0,type:"number",description:"执行ID"}]},{name:"executionMembers",display:"获取执行成员列表",type:"list",method:"get",path:"/executions/{executionID}/members",resultType:"list",resultGetter:"members",pathParams:{executionID:"执行ID"}},{name:"create",display:"创建执行(迭代/阶段/看板)",type:"create",method:"post",path:"/executions",resultType:"object",requestBody:{required:!0,type:"object",schema:{type:"object",properties:{project:{type:"integer",description:"所属项目",format:"int32"},name:{type:"string",description:"迭代/阶段名称"},type:{type:"string",description:"类型(sprint 迭代 | stage 阶段 | kanban 看板)。默认按项目模型推导:scrum→sprint、kanban→kanban、waterfall/waterfallplus→stage;IPD 项目创建阶段时必须显式传 stage"},parent:{type:"integer",description:"父执行/父阶段ID;创建子阶段时传父阶段ID,不传为顶层阶段",format:"int32"},attribute:{type:"string",description:"阶段类型(mix 综合 | request 需求 | design 设计 | dev 开发 | qa 测试 | release 发布 | review 总结评审 | other 其他;IPD: concept 概念 | plan 计划 | develop 开发 | qualify 验证 | launch 发布)。不传为空,有 parent 时继承父阶段"},lifetime:{type:"string",description:"周期(short 短期,迭代 | long 长期,阶段 | ops 运维)"},begin:{type:"string",description:"开始日期"},end:{type:"string",description:"结束日期"},days:{type:"integer",description:"可用工作日",format:"int32"},products:{type:"array",items:{type:"string"},description:"关联产品;waterfall/waterfallplus 项目创建阶段时必填"},plans:{type:"array",items:{type:"string"},description:"关联计划,必须是产品+planID的二维数组"},PO:{type:"string",description:"产品负责人"},QD:{type:"string",description:"测试负责人"},PM:{type:"string",description:"执行负责人"},RD:{type:"string",description:"发布负责人"},acl:{type:"string",description:"访问控制(open 公开 | private 私有)"}},required:["project","name","begin","end"]},example:{project:2,name:"智能设备研发3.1版本开发",type:"sprint",parent:0,lifetime:"short",begin:"2026-01-01",end:"2026-01-21",days:16,products:[1],plans:{"1":[0]},PO:"productManager",QD:"testManager",PM:"executionManager",RD:"productManager",acl:"open"}}},{name:"close",display:"关闭执行",type:"action",method:"post",path:"/executions/{executionID}/close",resultType:"text",pathParams:{executionID:"执行ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{realEnd:{type:"string",description:"实际完成日期"},comment:{type:"string",description:"备注"}},required:["realEnd"]},example:{realEnd:"2026-01-21"}}},{name:"createTaskModule",display:"创建执行的任务模块",type:"create",method:"post",path:"/executions/{executionID}/task/modules",resultType:"object",pathParams:{executionID:"执行ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{name:{type:"string",description:"模块名称"},parentID:{type:"integer",description:"父模块",format:"int32"}}},example:{name:"任务模块",parentID:"0"}}},{name:"get",display:"获取执行详情",type:"get",method:"get",path:"/executions/{executionID}",resultType:"object",resultGetter:"execution",pathParams:{executionID:"执行ID"}},{name:"update",display:"修改执行",type:"update",method:"put",path:"/executions/{executionID}",resultType:"object",pathParams:{executionID:"执行ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{project:{type:"integer",description:"所属项目",format:"int32"},name:{type:"string",description:"迭代名称"},lifetime:{type:"string",description:"执行类型(short 短期 | long 长期 | ops 运维)"},begin:{type:"string",description:"开始日期"},end:{type:"string",description:"结束日期"},days:{type:"integer",description:"可用工作日",format:"int32"},products:{type:"array",items:{type:"string"},description:"关联产品"},plans:{type:"array",items:{type:"string"},description:"关联计划,必须是产品+planID的二维数组"},PO:{type:"string",description:"产品负责人"},QD:{type:"string",description:"测试负责人"},PM:{type:"string",description:"执行负责人"},RD:{type:"string",description:"发布负责人"},acl:{type:"string",description:"访问控制(open 公开 | private 私有)"}},required:["name","begin","end"]},example:{project:2,name:"智能设备研发3.2版本开发",lifetime:"short",begin:"2026-01-01",end:"2026-01-21",days:16,products:[1],plans:{"1":[1]},PO:"productManager",QD:"testManager",PM:"executionManager",RD:"productManager",acl:"open"}}},{name:"delete",display:"删除执行",type:"delete",method:"delete",path:"/executions/{executionID}",resultType:"text",pathParams:{executionID:"执行ID"}},{name:"members",display:"维护执行成员",type:"action",method:"put",path:"/executions/{executionID}/members",resultType:"text",pathParams:{executionID:"执行ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{account:{type:"array",items:{type:"string"},description:'成员账号,多人时按顺序设置。例如 account=["admin","dev1"] 时,role[0] 对应 admin,role[1] 对应 dev1'},role:{type:"array",items:{type:"string"},description:"成员角色,与account顺序一一对应"},days:{type:"array",items:{type:"string"},description:"可用工作日,与account顺序一一对应"},hours:{type:"array",items:{type:"string"},description:"每日工时,与account顺序一一对应"},limited:{type:"array",items:{type:"string"},description:"是否限制日期,与account顺序一一对应"}},required:["account"]},example:{account:["admin","dev1"],role:["PM","dev"],days:[5,3],hours:[7,7],limited:["no","no"]}}}]},{name:"productplan",display:"产品计划",description:"产品计划管理,支持获取产品计划列表,支持获取产品下的产品计划、创建产品计划、获取产品计划详情、修改产品计划、删除产品计划",actions:[{name:"list",display:"获取产品计划列表,支持获取产品下的产品计划",type:"list",method:"get",path:"/products/{productID}/productplans",resultType:"list",pagerGetter:"pager",resultGetter:"productplans",pathParams:{productID:"所属产品ID"},params:[{name:"browseType",required:!1,type:"string",description:"执行状态,默认是undone",defaultValue:"undone",options:[{value:"all",label:"全部"},{value:"undone",label:"未完成"},{value:"wait",label:"未开始"},{value:"doing",label:"进行中"}]},{name:"orderBy",required:!1,type:"string",description:"排序",options:[{value:"id_asc",label:"ID 升序"},{value:"id_desc",label:"ID 降序"},{value:"title_asc",label:"名称 升序"},{value:"title_desc",label:"名称 降序"},{value:"begin_asc",label:"开始日期 升序"},{value:"begin_desc",label:"开始日期 降序"},{value:"end_asc",label:"结束日期 升序"},{value:"end_desc",label:"结束日期 降序"},{value:"status_asc",label:"状态 升序"}]},{name:"recPerPage",required:!1,type:"number",description:"每页数量,不超过1000"},{name:"pageID",required:!1,type:"number",description:"页码,从第1页开始"},{name:"filters",required:!1,type:"array",description:"搜索条件数组,每项包含 field/operator/value/join/group;field 必须是该接口支持的搜索字段,operator 使用该接口搜索配置支持的操作符。支持搜索字段:begin,branch,end,id,status,title",style:"deepObject",explode:!0},{name:"groupJoin",required:!1,type:"string",description:"条件组之间的连接方式",options:[{value:"and",label:"and"},{value:"or",label:"or"}]}]},{name:"create",display:"创建产品计划",type:"create",method:"post",path:"/productplans",resultType:"object",requestBody:{required:!0,type:"object",schema:{type:"object",properties:{productID:{type:"integer",description:"产品ID",format:"int32"},title:{type:"string",description:"计划名称"},parent:{type:"integer",description:"父计划ID",format:"int32"},begin:{type:"string",description:"开始日期"},end:{type:"string",description:"结束日期"},branchID:{type:"integer",description:"分支ID",format:"int32"},desc:{type:"string",description:"计划描述"}},required:["productID","title"]},example:{productID:1,title:"V1.0计划",parent:0,begin:"2026-01-01",end:"2026-01-31",branchID:1,desc:"初版计划"}}},{name:"get",display:"获取产品计划详情",type:"get",method:"get",path:"/productplans/{planID}",resultType:"object",resultGetter:"productplan",pathParams:{planID:"产品计划ID"}},{name:"update",display:"修改产品计划",type:"update",method:"put",path:"/productplans/{planID}",resultType:"object",pathParams:{planID:"产品计划ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{title:{type:"string",description:"计划名称"},parent:{type:"integer",description:"父计划",format:"int32"},begin:{type:"string",description:"开始日期"},end:{type:"string",description:"结束日期"},branchID:{type:"integer",description:"分支ID",format:"int32"},desc:{type:"string",description:"计划描述"}},required:["title"]},example:{title:"V1.1计划",parent:0,begin:"2026-01-01",end:"2026-01-31",branchID:1,desc:"初版计划"}}},{name:"delete",display:"删除产品计划",type:"delete",method:"delete",path:"/productplans/{planID}",resultType:"text",pathParams:{planID:"产品计划ID"}}]},{name:"story",display:"需求",description:"需求管理,支持获取需求列表,支持获取项目/产品/执行下的需求、产品的需求模块树、创建需求、获取需求详情、修改需求、修改需求模块、删除需求、删除需求模块、激活需求、变更需求、关闭需求",actions:[{name:"list",display:"获取需求列表,支持获取项目/产品/执行下的需求",type:"list",method:"get",path:"/{scope}/{scopeID}/stories",resultType:"list",pagerGetter:"pager",resultGetter:"stories",pathParams:{scope:{description:"需求所属范围",options:[{value:"projects",label:"项目"},{value:"products",label:"产品"},{value:"executions",label:"执行"}]},scopeID:"所属范围ID"},params:[{name:"browseType",required:!1,type:"string",description:"状态",options:[{value:"allstory",label:"全部"},{value:"assignedtome",label:"指派给我"},{value:"openedbyme",label:"我创建"},{value:"reviewbyme",label:"待我评审"},{value:"draftstory",label:"草稿"}]},{name:"orderBy",required:!1,type:"string",description:"排序",options:[{value:"id_asc",label:"ID 升序"},{value:"id_desc",label:"ID 降序"},{value:"title_asc",label:"标题 升序"},{value:"title_desc",label:"标题 降序"},{value:"status_asc",label:"状态 升序"},{value:"status_desc",label:"状态 降序"}]},{name:"recPerPage",required:!1,type:"number",description:"每页数量,不超过1000"},{name:"pageID",required:!1,type:"number",description:"页码,从第1页开始"},{name:"filters",required:!1,type:"array",description:"搜索条件数组,每项包含 field/operator/value/join/group;field 必须是该接口支持的搜索字段,operator 使用该接口搜索配置支持的操作符。支持搜索字段:title(需求名称,示例:关键字);id(编号,示例:1);keywords(关键词,示例:关键字);status(当前状态,枚举:draft 草稿 | reviewing 评审中 | active 激活 | changing 变更中 | closed 已关闭);pri(优先级,枚举:1 | 2 | 3 | 4);module(所属模块,示例:all);stage(所处阶段,枚举:wait 未开始 | planned 已计划 | projected 研发立项 | designing 设计中 | designed 设计完毕 | developing 研发中 | developed 研发完毕 | testing 测试中 | tested 测试完毕 | verified 已验收 | rejected 验收失败 | delivering 交付中 | delivered 已交付 | released 已发布 | closed 已关闭);product(所属产品,示例:all);branch(branch,示例:all);grade(需求层级,示例:all);plan(所属计划,示例:all);estimate(预计小时,示例:关键字);source(来源,枚举:customer 客户 | user 用户 | po 产品经理 | market 市场 | service 客服 | operation 运营 | support 技术支持 | competitor 竞争对手 | partner 合作伙伴 | dev 开发人员 | tester 测试人员 | bug Bug | forum 论坛 | other 其他);sourceNote(来源备注,示例:关键字);fromBug(来源Bug,示例:关键字);category(类别,枚举:feature 功能 | interface 接口 | performance 性能 | safe 安全 | experience 体验 | improve 改进 | other 其他);openedBy(由谁创建,用户,示例:admin);reviewedBy(已评审人,用户,示例:admin);result(评审结果,枚举:pass 确认通过 | revert 撤销变更 | clarify 有待明确 | reject 拒绝);assignedTo(指派给,用户,示例:admin);closedBy(由谁关闭,用户,示例:admin);lastEditedBy(最后修改,用户,示例:admin);mailto(抄送给,用户,示例:admin);closedReason(关闭原因,枚举:done 已完成 | subdivided 已拆分 | duplicate 重复 | postponed 延期 | willnotdo 不做 | cancel 已取消 | bydesign 设计如此);version(版本号,示例:关键字);openedDate(创建日期,示例:2026-01-01);reviewedDate(评审时间,示例:2026-01-01);assignedDate(指派日期,示例:2026-01-01);closedDate(关闭日期,示例:2026-01-01);lastEditedDate(最后修改日期,示例:2026-01-01);activatedDate(激活日期,示例:2026-01-01)",style:"deepObject",explode:!0},{name:"groupJoin",required:!1,type:"string",description:"条件组之间的连接方式",options:[{value:"and",label:"and"},{value:"or",label:"or"}]}]},{name:"modules",display:"产品的需求模块树",type:"list",method:"get",path:"/products/{productID}/story/modules",resultType:"list",pathParams:{productID:"产品ID"},resultGetter:"tree"},{name:"create",display:"创建需求",type:"create",method:"post",path:"/stories",resultType:"object",requestBody:{required:!0,type:"object",schema:{type:"object",properties:{productID:{type:"integer",description:"产品ID",format:"int32"},title:{type:"string"},pri:{type:"integer",description:"优先级,默认是3",format:"int32"},module:{type:"integer",description:"所属模块",format:"int32"},parent:{type:"integer",description:"父需求",format:"int32"},estimate:{type:"number",description:"预计工时",format:"float"},spec:{type:"string",description:"需求描述"},category:{type:"integer",description:"类别(feature 功能 | interface 接口 | performance 性能 | safe 安全 | experience 体验 | improve 改进 | other 其他)",format:"int32"},source:{type:"string",description:"来源(customer 客户 | user 用户 | po 产品经理 | market 市场 | service 客服 | operation 运营 | support 技术支持 | competitor 竞争对手 | partner 合作伙伴 | dev 开发人员 | tester 测试人员 | bug Bug | forum 论坛 | other 其他)"},verify:{type:"string",description:"验收标准"},assignedTo:{type:"string",description:"指派给"},reviewer:{type:"array",items:{type:"string"},description:"评审人,如果设置必须评审,必须填写"},project:{type:"integer",description:"所属项目",format:"int32"},execution:{type:"integer",description:"所属执行",format:"int32"}},required:["productID","title"]},example:{productID:1,title:"智能头枕的压敏单元设计",pri:3,module:0,parent:0,estimate:1,category:"feature",source:"customer",assignedTo:"admin",reviewer:["productManager"],project:2,execution:0}}},{name:"get",display:"获取需求详情",type:"get",method:"get",path:"/stories/{storyID}",resultType:"object",resultGetter:"story",pathParams:{storyID:"需求ID"}},{name:"update",display:"修改需求",type:"update",method:"put",path:"/stories/{storyID}",resultType:"object",pathParams:{storyID:"需求ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{title:{type:"string"},pri:{type:"integer",description:"优先级,默认是3",format:"int32"},module:{type:"integer",description:"所属模块",format:"int32"},parent:{type:"integer",description:"父需求",format:"int32"},estimate:{type:"number",description:"预计工时",format:"float"},category:{type:"integer",description:"类别(feature 功能 | interface 接口 | performance 性能 | safe 安全 | experience 体验 | improve 改进 | other 其他)",format:"int32"},source:{type:"string",description:"来源(customer 客户 | user 用户 | po 产品经理 | market 市场 | service 客服 | operation 运营 | support 技术支持 | competitor 竞争对手 | partner 合作伙伴 | dev 开发人员 | tester 测试人员 | bug Bug | forum 论坛 | other 其他)"},assignedTo:{type:"string",description:"指派给"}},required:["title"]},example:{title:"智能照明的光敏单元设计",pri:3,module:0,parent:0,estimate:1,category:"feature",source:"customer",assignedTo:"admin"}}},{name:"updateModule",display:"修改需求模块",type:"update",method:"put",path:"/story/modules/{moduleID}",resultType:"object",pathParams:{moduleID:"模块ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{name:{type:"string",description:"模块名称"},parent:{type:"integer",description:"父模块",format:"int32"}}},example:{name:"需求新模块",parent:"0"}}},{name:"delete",display:"删除需求",type:"delete",method:"delete",path:"/stories/{storyID}",resultType:"text",pathParams:{storyID:"需求ID"}},{name:"deleteModule",display:"删除需求模块",type:"delete",method:"delete",path:"/story/modules/{moduleID}",resultType:"text",pathParams:{moduleID:"模块ID"}},{name:"activate",display:"激活需求",type:"action",method:"put",path:"/stories/{storyID}/activate",resultType:"text",pathParams:{storyID:"需求ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{assignedTo:{type:"string",description:"指派给"},comment:{type:"string",description:"备注"}}},example:{assignedTo:"admin"}}},{name:"change",display:"变更需求",type:"action",method:"put",path:"/stories/{storyID}/change",resultType:"text",pathParams:{storyID:"需求ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{title:{type:"string",description:"需求名称"},reviewer:{type:"array",items:{type:"string"},description:"评审人员"},spec:{type:"string",description:"需求描述"},verify:{type:"string",description:"验收标准"}},required:["reviewer"]},example:{title:"智能照明的定时",reviewer:["admin"],spec:"描述",verify:"验收标准"}}},{name:"close",display:"关闭需求",type:"action",method:"put",path:"/stories/{storyID}/close",resultType:"text",pathParams:{storyID:"需求ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{closedReason:{type:"string",description:"关闭原因(done 已完成 | subdivided 已拆分 | duplicate 重复 | postponed 延期 | willnotdo 不做 | cancel 已取消 | bydesign 设计如此)"},comment:{type:"string",description:"备注"}},required:["closedReason"]},example:{closedReason:"done"}}}]},{name:"epic",display:"业务需求",description:"业务需求管理,支持获取业务需求列表,支持获取产品下的业务需求、创建业务需求、获取业务需求详情、修改业务需求、删除业务需求、激活业务需求、变更业务需求、关闭业务需求",actions:[{name:"list",display:"获取业务需求列表,支持获取产品下的业务需求",type:"list",method:"get",path:"/products/{productID}/epics",resultType:"list",pagerGetter:"pager",resultGetter:"epics",pathParams:{productID:"所属产品ID"},params:[{name:"browseType",required:!1,type:"string",description:"状态,默认是unclosed",defaultValue:"unclosed",options:[{value:"allstory",label:"全部"},{value:"assignedtome",label:"指派给我"},{value:"openedbyme",label:"我创建"},{value:"reviewbyme",label:"待我评审"},{value:"draftstory",label:"草稿"}]},{name:"orderBy",required:!1,type:"string",description:"排序",options:[{value:"id_asc",label:"ID 升序"},{value:"id_desc",label:"ID 降序"},{value:"title_asc",label:"标题 升序"},{value:"title_desc",label:"标题 降序"},{value:"status_asc",label:"状态 升序"},{value:"status_desc",label:"状态 降序"}]},{name:"recPerPage",required:!1,type:"number",description:"每页数量,不超过1000"},{name:"pageID",required:!1,type:"number",description:"页码,从第1页开始"},{name:"filters",required:!1,type:"array",description:"搜索条件数组,每项包含 field/operator/value/join/group;field 必须是该接口支持的搜索字段,operator 使用该接口搜索配置支持的操作符。支持搜索字段:title(需求名称,示例:关键字);id(编号,示例:1);keywords(关键词,示例:关键字);status(当前状态,枚举:draft 草稿 | reviewing 评审中 | active 激活 | changing 变更中 | closed 已关闭);pri(优先级,枚举:1 | 2 | 3 | 4);module(所属模块,示例:all);stage(所处阶段,枚举:wait 未开始 | planned 已计划 | projected 研发立项 | designing 设计中 | designed 设计完毕 | developing 研发中 | developed 研发完毕 | testing 测试中 | tested 测试完毕 | verified 已验收 | rejected 验收失败 | delivering 交付中 | delivered 已交付 | released 已发布 | closed 已关闭);product(所属产品,示例:all);branch(branch,示例:all);grade(需求层级,示例:all);plan(所属计划,示例:all);estimate(预计小时,示例:关键字);source(来源,枚举:customer 客户 | user 用户 | po 产品经理 | market 市场 | service 客服 | operation 运营 | support 技术支持 | competitor 竞争对手 | partner 合作伙伴 | dev 开发人员 | tester 测试人员 | bug Bug | forum 论坛 | other 其他);sourceNote(来源备注,示例:关键字);fromBug(来源Bug,示例:关键字);category(类别,枚举:feature 功能 | interface 接口 | performance 性能 | safe 安全 | experience 体验 | improve 改进 | other 其他);openedBy(由谁创建,用户,示例:admin);reviewedBy(已评审人,用户,示例:admin);result(评审结果,枚举:pass 确认通过 | revert 撤销变更 | clarify 有待明确 | reject 拒绝);assignedTo(指派给,用户,示例:admin);closedBy(由谁关闭,用户,示例:admin);lastEditedBy(最后修改,用户,示例:admin);mailto(抄送给,用户,示例:admin);closedReason(关闭原因,枚举:done 已完成 | subdivided 已拆分 | duplicate 重复 | postponed 延期 | willnotdo 不做 | cancel 已取消 | bydesign 设计如此);version(版本号,示例:关键字);openedDate(创建日期,示例:2026-01-01);reviewedDate(评审时间,示例:2026-01-01);assignedDate(指派日期,示例:2026-01-01);closedDate(关闭日期,示例:2026-01-01);lastEditedDate(最后修改日期,示例:2026-01-01);activatedDate(激活日期,示例:2026-01-01)",style:"deepObject",explode:!0},{name:"groupJoin",required:!1,type:"string",description:"条件组之间的连接方式",options:[{value:"and",label:"and"},{value:"or",label:"or"}]}]},{name:"create",display:"创建业务需求",type:"create",method:"post",path:"/epics",resultType:"object",requestBody:{required:!0,type:"object",schema:{type:"object",properties:{productID:{type:"integer",description:"产品ID",format:"int32"},title:{type:"string"},pri:{type:"integer",description:"优先级,默认是3",format:"int32"},module:{type:"integer",description:"所属模块",format:"int32"},parent:{type:"integer",description:"父业务需求",format:"int32"},estimate:{type:"number",description:"预计工时",format:"float"},spec:{type:"string",description:"业务需求描述"},category:{type:"integer",description:"类别(feature 功能 | interface 接口 | performance 性能 | safe 安全 | experience 体验 | improve 改进 | other 其他)",format:"int32"},source:{type:"string",description:"来源(customer 客户 | user 用户 | po 产品经理 | market 市场 | service 客服 | operation 运营 | support 技术支持 | competitor 竞争对手 | partner 合作伙伴 | dev 开发人员 | tester 测试人员 | bug Bug | forum 论坛 | other 其他)"},verify:{type:"string",description:"验收标准"},assignedTo:{type:"string",description:"指派给"},reviewer:{type:"array",items:{type:"string"},description:"评审人,如果设置必须评审,必须填写"}},required:["productID","title"]},example:{productID:1,title:"智能头枕颈椎检测",pri:3,module:0,parent:0,estimate:1,category:"feature",source:"customer",assignedTo:"admin",reviewer:["productManager"]}}},{name:"get",display:"获取业务需求详情",type:"get",method:"get",path:"/epics/{storyID}",resultType:"object",pathParams:{storyID:"需求ID"},resultGetter:"epic"},{name:"update",display:"修改业务需求",type:"update",method:"put",path:"/epics/{storyID}",resultType:"object",pathParams:{storyID:"需求ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{title:{type:"string",description:"需求名称"},pri:{type:"integer",description:"优先级,默认是3",format:"int32"},module:{type:"integer",description:"所属模块",format:"int32"},parent:{type:"integer",description:"父业务需求",format:"int32"},estimate:{type:"number",description:"预计工时",format:"float"},category:{type:"integer",description:"类别(feature 功能 | interface 接口 | performance 性能 | safe 安全 | experience 体验 | improve 改进 | other 其他)",format:"int32"},source:{type:"string",description:"来源(customer 客户 | user 用户 | po 产品经理 | market 市场 | service 客服 | operation 运营 | support 技术支持 | competitor 竞争对手 | partner 合作伙伴 | dev 开发人员 | tester 测试人员 | bug Bug | forum 论坛 | other 其他)"},assignedTo:{type:"string",description:"指派给"}},required:["title"]},example:{title:"智能头枕颈椎检测",pri:3,module:0,parent:0,estimate:1,category:"feature",source:"customer",assignedTo:"admin"}}},{name:"delete",display:"删除业务需求",type:"delete",method:"delete",path:"/epics/{storyID}",resultType:"text",pathParams:{storyID:"需求ID"}},{name:"activate",display:"激活业务需求",type:"action",method:"put",path:"/epics/{storyID}/activate",resultType:"text",pathParams:{storyID:"需求ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{assignedTo:{type:"string",description:"指派给"},comment:{type:"string",description:"备注"}}},example:{assignedTo:"admin"}}},{name:"change",display:"变更业务需求",type:"action",method:"put",path:"/epics/{storyID}/change",resultType:"text",pathParams:{storyID:"需求ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{title:{type:"string",description:"需求名称"},reviewer:{type:"array",items:{type:"string"},description:"评审人员"},spec:{type:"string",description:"需求描述"},verify:{type:"string",description:"验收标准"}},required:["reviewer"]},example:{title:"智能头枕颈椎检测",reviewer:["admin"],spec:"描述",verify:"验收标准"}}},{name:"close",display:"关闭业务需求",type:"action",method:"put",path:"/epics/{storyID}/close",resultType:"text",pathParams:{storyID:"需求ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{closedReason:{type:"string",description:"关闭原因(done 已完成 | subdivided 已拆分 | duplicate 重复 | postponed 延期 | willnotdo 不做 | cancel 已取消 | bydesign 设计如此)"},comment:{type:"string",description:"备注"}},required:["closedReason"]},example:{closedReason:"done"}}}]},{name:"requirement",display:"用户需求",description:"用户需求管理,支持获取用户需求列表,支持获取产品下的用户需求、创建用户需求、获取用户需求详情、修改用户需求、删除用户需求、激活用户需求、变更用户需求、关闭用户需求",actions:[{name:"list",display:"获取用户需求列表,支持获取产品下的用户需求",type:"list",method:"get",path:"/products/{productID}/requirements",resultType:"list",pagerGetter:"pager",resultGetter:"requirements",pathParams:{productID:"所属产品ID"},params:[{name:"browseType",required:!1,type:"string",description:"状态,默认是unclosed",defaultValue:"unclosed",options:[{value:"allstory",label:"全部"},{value:"assignedtome",label:"指派给我"},{value:"openedbyme",label:"我创建"},{value:"reviewbyme",label:"待我评审"},{value:"draftstory",label:"草稿"}]},{name:"orderBy",required:!1,type:"string",description:"排序",options:[{value:"id_asc",label:"ID 升序"},{value:"id_desc",label:"ID 降序"},{value:"title_asc",label:"标题 升序"},{value:"title_desc",label:"标题 降序"},{value:"status_asc",label:"状态 升序"},{value:"status_desc",label:"状态 降序"}]},{name:"recPerPage",required:!1,type:"number",description:"每页数量,不超过1000"},{name:"pageID",required:!1,type:"number",description:"页码,从第1页开始"},{name:"filters",required:!1,type:"array",description:"搜索条件数组,每项包含 field/operator/value/join/group;field 必须是该接口支持的搜索字段,operator 使用该接口搜索配置支持的操作符。支持搜索字段:title(需求名称,示例:关键字);id(编号,示例:1);keywords(关键词,示例:关键字);status(当前状态,枚举:draft 草稿 | reviewing 评审中 | active 激活 | changing 变更中 | closed 已关闭);pri(优先级,枚举:1 | 2 | 3 | 4);module(所属模块,示例:all);stage(所处阶段,枚举:wait 未开始 | planned 已计划 | projected 研发立项 | designing 设计中 | designed 设计完毕 | developing 研发中 | developed 研发完毕 | testing 测试中 | tested 测试完毕 | verified 已验收 | rejected 验收失败 | delivering 交付中 | delivered 已交付 | released 已发布 | closed 已关闭);product(所属产品,示例:all);branch(branch,示例:all);grade(需求层级,示例:all);plan(所属计划,示例:all);estimate(预计小时,示例:关键字);source(来源,枚举:customer 客户 | user 用户 | po 产品经理 | market 市场 | service 客服 | operation 运营 | support 技术支持 | competitor 竞争对手 | partner 合作伙伴 | dev 开发人员 | tester 测试人员 | bug Bug | forum 论坛 | other 其他);sourceNote(来源备注,示例:关键字);fromBug(来源Bug,示例:关键字);category(类别,枚举:feature 功能 | interface 接口 | performance 性能 | safe 安全 | experience 体验 | improve 改进 | other 其他);openedBy(由谁创建,用户,示例:admin);reviewedBy(已评审人,用户,示例:admin);result(评审结果,枚举:pass 确认通过 | revert 撤销变更 | clarify 有待明确 | reject 拒绝);assignedTo(指派给,用户,示例:admin);closedBy(由谁关闭,用户,示例:admin);lastEditedBy(最后修改,用户,示例:admin);mailto(抄送给,用户,示例:admin);closedReason(关闭原因,枚举:done 已完成 | subdivided 已拆分 | duplicate 重复 | postponed 延期 | willnotdo 不做 | cancel 已取消 | bydesign 设计如此);version(版本号,示例:关键字);openedDate(创建日期,示例:2026-01-01);reviewedDate(评审时间,示例:2026-01-01);assignedDate(指派日期,示例:2026-01-01);closedDate(关闭日期,示例:2026-01-01);lastEditedDate(最后修改日期,示例:2026-01-01);activatedDate(激活日期,示例:2026-01-01)",style:"deepObject",explode:!0},{name:"groupJoin",required:!1,type:"string",description:"条件组之间的连接方式",options:[{value:"and",label:"and"},{value:"or",label:"or"}]}]},{name:"create",display:"创建用户需求",type:"create",method:"post",path:"/requirements",resultType:"object",requestBody:{required:!0,type:"object",schema:{type:"object",properties:{productID:{type:"integer",description:"产品ID",format:"int32"},title:{type:"string"},pri:{type:"integer",description:"优先级,默认是3",format:"int32"},module:{type:"integer",description:"所属模块",format:"int32"},parent:{type:"integer",description:"父用户需求",format:"int32"},estimate:{type:"number",description:"预计工时",format:"float"},spec:{type:"string",description:"用户需求描述"},category:{type:"integer",description:"类别(feature 功能 | interface 接口 | performance 性能 | safe 安全 | experience 体验 | improve 改进 | other 其他)",format:"int32"},source:{type:"string",description:"来源(customer 客户 | user 用户 | po 产品经理 | market 市场 | service 客服 | operation 运营 | support 技术支持 | competitor 竞争对手 | partner 合作伙伴 | dev 开发人员 | tester 测试人员 | bug Bug | forum 论坛 | other 其他)"},verify:{type:"string",description:"验收标准"},assignedTo:{type:"string",description:"指派给"},reviewer:{type:"array",items:{type:"string"},description:"评审人,如果设置必须评审,必须填写"}},required:["productID","title"]},example:{productID:1,title:"智能头枕的颈椎保护",pri:3,module:0,parent:0,estimate:1,category:"feature",source:"customer",assignedTo:"admin",reviewer:["productManager"]}}},{name:"get",display:"获取用户需求详情",type:"get",method:"get",path:"/requirements/{storyID}",resultType:"object",pathParams:{storyID:"需求ID"},resultGetter:"requirement"},{name:"update",display:"修改用户需求",type:"update",method:"put",path:"/requirements/{storyID}",resultType:"object",pathParams:{storyID:"需求ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{title:{type:"string"},pri:{type:"integer",description:"优先级,默认是3",format:"int32"},module:{type:"integer",description:"所属模块",format:"int32"},parent:{type:"integer",description:"父用户需求",format:"int32"},estimate:{type:"number",description:"预计工时",format:"float"},category:{type:"integer",description:"类别(feature 功能 | interface 接口 | performance 性能 | safe 安全 | experience 体验 | improve 改进 | other 其他)",format:"int32"},source:{type:"string",description:"来源(customer 客户 | user 用户 | po 产品经理 | market 市场 | service 客服 | operation 运营 | support 技术支持 | competitor 竞争对手 | partner 合作伙伴 | dev 开发人员 | tester 测试人员 | bug Bug | forum 论坛 | other 其他)"},assignedTo:{type:"string",description:"指派给"}},required:["title"]},example:{title:"智能头枕的颈椎保护",pri:3,module:0,parent:0,estimate:1,category:"feature",source:"customer",assignedTo:"admin"}}},{name:"delete",display:"删除用户需求",type:"delete",method:"delete",path:"/requirements/{storyID}",resultType:"text",pathParams:{storyID:"需求ID"}},{name:"activate",display:"激活用户需求",type:"action",method:"put",path:"/requirements/{storyID}/activate",resultType:"text",pathParams:{storyID:"需求ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{assignedTo:{type:"string",description:"指派给"},comment:{type:"string",description:"备注"}}},example:{assignedTo:"admin"}}},{name:"change",display:"变更用户需求",type:"action",method:"put",path:"/requirements/{storyID}/change",resultType:"text",pathParams:{storyID:"需求ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{title:{type:"string",description:"需求名称"},spec:{type:"string",description:"需求描述"},verify:{type:"string",description:"验收标准"}}},example:{title:"智能头枕的颈椎保护",spec:"描述",verify:"验收标准"}}},{name:"close",display:"关闭用户需求",type:"action",method:"put",path:"/requirements/{storyID}/close",resultType:"text",pathParams:{storyID:"需求ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{closedReason:{type:"string",description:"关闭原因(done 已完成 | subdivided 已拆分 | duplicate 重复 | postponed 延期 | willnotdo 不做 | cancel 已取消 | bydesign 设计如此)"},comment:{type:"string",description:"备注"}},required:["closedReason"]},example:{closedReason:"done"}}}]},{name:"bug",display:"Bug",description:"Bug管理,支持获取Bug列表,支持获取项目/产品/执行下的Bug、产品的Bug模块树、创建Bug、获取Bug详情、修改Bug、修改Bug模块、删除Bug、删除Bug模块、激活Bug、关闭Bug、确认Bug、解决Bug",actions:[{name:"list",display:"获取Bug列表,支持获取项目/产品/执行下的Bug",type:"list",method:"get",path:"/{scope}/{scopeID}/bugs",resultType:"list",pagerGetter:"pager",resultGetter:"bugs",pathParams:{scope:{description:"Bug所属范围",options:[{value:"projects",label:"项目"},{value:"products",label:"产品"},{value:"executions",label:"执行"}]},scopeID:"所属范围ID"},params:[{name:"browseType",required:!1,type:"string",description:"状态"},{name:"orderBy",required:!1,type:"string",description:"排序",options:[{value:"id_asc",label:"ID 升序"},{value:"id_desc",label:"ID 降序"},{value:"title_asc",label:"标题 升序"},{value:"title_desc",label:"标题 降序"},{value:"status_asc",label:"状态 升序"},{value:"status_desc",label:"状态 降序"}]},{name:"recPerPage",required:!1,type:"number",description:"每页数量,不超过1000"},{name:"pageID",required:!1,type:"number",description:"页码,从第1页开始"},{name:"filters",required:!1,type:"array",description:"搜索条件数组,每项包含 field/operator/value/join/group;field 必须是该接口支持的搜索字段,operator 使用该接口搜索配置支持的操作符。支持搜索字段:title(Bug标题,示例:关键字);module(所属模块,模块,示例:0);keywords(关键词,示例:关键字);steps(重现步骤,示例:关键字);assignedTo(指派给,用户,示例:admin);resolvedBy(解决者,用户,示例:admin);status(Bug状态,枚举:active 激活 | resolved 已解决 | closed 已关闭);confirmed(是否确认,枚举:1 已确认 | 0 未确认);story(相关需求,示例:关键字);project(所属项目,示例:all);product(所属产品,示例:all);branch(branch,示例:all);plan(所属计划,示例:all);id(Bug编号,示例:1);execution(所属执行,执行,示例:3);severity(严重程度,枚举:1 | 2 | 3 | 4);pri(优先级,枚举:1 | 2 | 3 | 4);type(Bug类型,枚举:codeerror 代码错误 | config 配置相关 | install 安装部署 | security 安全相关 | performance 性能问题 | standard 标准规范 | automation 测试脚本 | designdefect 设计缺陷 | codeimprovement 代码改进 | others 其他);os(操作系统,枚举:all 全部 | windows Windows | win11 Windows 11 | win10 Windows 10 | win8 Windows 8 | win7 Windows 7 | winxp Windows XP | osx Mac OS | android Android | ios IOS | linux Linux | ubuntu Ubuntu | chromeos Chrome OS | fedora Fedora | unix Unix | others 其他);browser(浏览器,枚举:all 全部 | chrome Chrome | edge Edge | ie IE系列 | ie11 IE11 | ie10 IE10 | ie9 IE9 | ie8 IE8 | firefox firefox系列 | opera Opera系列 | safari | 360 360浏览器 | qq QQ浏览器 | other 其他);resolution(解决方案,枚举:bydesign 设计如此 | duplicate 重复Bug | external 外部原因 | fixed 已解决 | notrepro 无法重现 | postponed 延期处理 | willnotfix 不予解决 | tostory 转为用户故事);activatedCount(激活次数,示例:关键字);toTask(转任务,示例:关键字);toStory(转用户故事,示例:关键字);openedBy(由谁创建,用户,示例:admin);closedBy(由谁关闭,用户,示例:admin);lastEditedBy(修改者,用户,示例:admin);mailto(抄送给,用户,示例:admin);openedBuild(影响版本,示例:builds);resolvedBuild(解决版本,示例:builds);openedDate(创建日期,示例:2026-01-01);assignedDate(指派日期,示例:2026-01-01);resolvedDate(解决日期,示例:2026-01-01);closedDate(关闭日期,示例:2026-01-01);lastEditedDate(修改日期,示例:2026-01-01);deadline(截止日期,示例:2026-01-01);activatedDate(激活时间,示例:2026-01-01)",style:"deepObject",explode:!0},{name:"groupJoin",required:!1,type:"string",description:"条件组之间的连接方式",options:[{value:"and",label:"and"},{value:"or",label:"or"}]}]},{name:"modules",display:"产品的Bug模块树",type:"list",method:"get",path:"/products/{productID}/bug/modules",resultType:"list",pathParams:{productID:"产品ID"},resultGetter:"tree"},{name:"create",display:"创建Bug",type:"create",method:"post",path:"/bugs",resultType:"object",requestBody:{required:!0,type:"object",schema:{type:"object",properties:{productID:{type:"integer",description:"所属产品",format:"int32"},title:{type:"string",description:"Bug标题"},openedBuild:{type:"array",items:{type:"string"},description:"影响版本,主干是trunk,其他版本使用版本ID"},project:{type:"integer",description:"所属项目",format:"int32"},execution:{type:"integer",description:"所属执行",format:"int32"},severity:{type:"integer",description:"严重程度,默认是3",format:"int32"},pri:{type:"integer",description:"优先级,默认是3",format:"int32"},type:{type:"string",description:"Bug类型(codeerror 代码错误 | config 配置相关 | install 安装部署 | security 安全相关 | performance 性能问题 | standard 标准规范 | automation 测试脚本 | designdefect 设计缺陷 | others 其他)"},steps:{type:"string",description:"重现步骤"},story:{type:"integer",description:"相关需求",format:"int32"},assignedTo:{type:"string",description:"指派给"}},required:["productID","title","openedBuild"]},example:{productID:1,title:"压敏元件显示错误",openedBuild:["trunk"],project:2,execution:3,severity:3,pri:3,type:"codeerror",steps:"[步骤] [结果] [期望]",story:0,assignedTo:"admin"}}},{name:"get",display:"获取Bug详情",type:"get",method:"get",path:"/bugs/{bugID}",resultType:"object",resultGetter:"bug",pathParams:{bugID:"Bug ID"}},{name:"update",display:"修改Bug",type:"update",method:"put",path:"/bugs/{bugID}",resultType:"object",pathParams:{bugID:"Bug ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{title:{type:"string",description:"Bug标题"},severity:{type:"integer",description:"严重程度,默认是3",format:"int32"},pri:{type:"integer",description:"优先级,默认是3",format:"int32"},type:{type:"string",description:"Bug类型(codeerror 代码错误 | config 配置相关 | install 安装部署 | security 安全相关 | performance 性能问题 | standard 标准规范 | automation 测试脚本 | designdefect 设计缺陷 | others 其他)"},openedBuild:{type:"array",items:{type:"string"},description:"影响版本,主干是trunk,其他版本使用版本ID"},steps:{type:"string",description:"重现步骤"},project:{type:"integer",description:"所属项目",format:"int32"},execution:{type:"integer",description:"所属执行",format:"int32"},story:{type:"integer",description:"相关需求",format:"int32"},assignedTo:{type:"string",description:"指派给"}}},example:{title:"光敏元件显示错误",severity:3,pri:3,type:"codeerror",openedBuild:["trunk"],steps:"[步骤] [结果] [期望]",project:2,execution:3,story:0,assignedTo:"admin"}}},{name:"updateModule",display:"修改Bug模块",type:"update",method:"put",path:"/bug/modules/{moduleID}",resultType:"object",pathParams:{moduleID:"模块ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{name:{type:"string",description:"模块名称"},parent:{type:"integer",description:"父模块",format:"int32"}}},example:{name:"Bug新模块",parent:"0"}}},{name:"delete",display:"删除Bug",type:"delete",method:"delete",path:"/bugs/{bugID}",resultType:"text",pathParams:{bugID:"Bug ID"}},{name:"deleteModule",display:"删除Bug模块",type:"delete",method:"delete",path:"/bug/modules/{moduleID}",resultType:"text",pathParams:{moduleID:"模块ID"}},{name:"activate",display:"激活Bug",type:"action",method:"put",path:"/bugs/{bugID}/activate",resultType:"text",pathParams:{bugID:"Bug ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{openedBuild:{type:"array",items:{type:"string"},description:"影响版本, trunk为主干"},assignedTo:{type:"string",description:"指派给"},comment:{type:"string",description:"备注"}}},example:{openedBuild:["trunk"],assignedTo:"admin"}}},{name:"close",display:"关闭Bug",type:"action",method:"put",path:"/bugs/{bugID}/close",resultType:"text",pathParams:{bugID:"Bug ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{comment:{type:"string",description:"备注"}}}}},{name:"confirm",display:"确认Bug",type:"action",method:"put",path:"/bugs/{bugID}/confirm",resultType:"text",pathParams:{bugID:"Bug ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{assignedTo:{type:"string",description:"指派给"},type:{type:"string",description:"Bug类型(codeerror 代码错误 | config 配置相关 | install 安装部署 | security 安全相关 | performance 性能问题 | standard 标准规范 | automation 测试脚本 | designdefect 设计缺陷 | others 其他)"},pri:{type:"integer",description:"优先级,默认是3",format:"int32"},deadline:{type:"string",description:"截止日期"},status:{type:"string",description:"状态"},mailto:{type:"array",items:{type:"string"},description:"抄送给"},comment:{type:"string",description:"备注"}}},example:{assignedTo:"admin",type:"codeerror",pri:3,deadline:"2025-12-12",mailto:["admin"]}}},{name:"resolve",display:"解决Bug",type:"action",method:"put",path:"/bugs/{bugID}/resolve",resultType:"text",pathParams:{bugID:"Bug ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{resolution:{type:"string",description:"fixed 已解决 | notrepro 无法重现 | bydesign 设计如此 | duplicate 重复Bug | external 外部原因| postponed 延期处理 | willnotfix 不予解决 | tostory 转为需求"},resolvedDate:{type:"string",description:"解决日期,默认今天"},resolvedBuild:{type:"string",description:"解决版本, trunk为主干"},assignedTo:{type:"string",description:"指派给"},comment:{type:"string",description:"备注"}},required:["resolution"]},example:{resolution:"fixed",resolvedDate:"2025-12-12",resolvedBuild:"trunk",assignedTo:"admin"}}}]},{name:"testcase",display:"测试用例",description:"测试用例管理,支持获取测试用例列表,支持获取产品/项目/执行下的测试用例、产品的用例模块树、创建测试用例、获取测试用例详情、修改测试用例、修改用例模块、删除测试用例、删除用例模块",actions:[{name:"list",display:"获取测试用例列表,支持获取产品/项目/执行下的测试用例",type:"list",method:"get",path:"/{scope}/{scopeID}/testcases",resultType:"list",pagerGetter:"pager",resultGetter:"testcases",pathParams:{scope:{description:"测试用例所属范围",options:[{value:"products",label:"产品"},{value:"projects",label:"项目"},{value:"executions",label:"执行"}]},scopeID:"所属范围ID"},params:[{name:"browseType",required:!1,type:"string",description:"状态,默认是all",defaultValue:"all",options:[{value:"all",label:"全部"},{value:"wait",label:"未关闭"},{value:"needconfirm",label:"需求变动"}]},{name:"orderBy",required:!1,type:"string",description:"排序"},{name:"recPerPage",required:!1,type:"number",description:"每页数量,不超过1000"},{name:"pageID",required:!1,type:"number",description:"页码,从第1页开始"},{name:"filters",required:!1,type:"array",description:"搜索条件数组,每项包含 field/operator/value/join/group;field 必须是该接口支持的搜索字段,operator 使用该接口搜索配置支持的操作符。支持搜索字段:title(用例名称,示例:关键字);story(关联需求,示例:all);id(用例编号,示例:1);keywords(关键词,示例:关键字);lastEditedBy(修改者,用户,示例:admin);type(用例类型,枚举:unit 单元测试 | interface 接口测试 | feature 功能测试 | install 安装部署 | config 配置相关 | performance 性能测试 | security 安全相关 | other 其他);auto(自动化,枚举:auto 是 | no 否);openedBy(由谁创建,用户,示例:admin);status(用例状态,枚举:wait 待评审 | normal 正常 | blocked 被阻塞 | investigate 研究中);product(所属产品,示例:all);branch(branch,示例:all);stage(适用环节,枚举:unittest 单元测试环节 | feature 功能测试环节 | intergrate 集成测试环节 | system 系统测试环节 | smoke 冒烟测试环节 | bvt 版本验证环节);module(所属模块,模块,示例:0);pri(优先级,枚举:3 | 1 | 2 | 4);lib(所属库,示例:all);lastRunner(执行人,用户,示例:admin);lastRunResult(结果,枚举:pass 通过 | fail 失败 | blocked 阻塞 | null 未执行);lastRunDate(执行时间,示例:2026-01-01);openedDate(创建日期,示例:2026-01-01);lastEditedDate(修改日期,示例:2026-01-01);scene(所属场景,示例:all)",style:"deepObject",explode:!0},{name:"groupJoin",required:!1,type:"string",description:"条件组之间的连接方式",options:[{value:"and",label:"and"},{value:"or",label:"or"}]}]},{name:"modules",display:"产品的用例模块树",type:"list",method:"get",path:"/products/{productID}/testcase/modules",resultType:"list",pathParams:{productID:"产品ID"},resultGetter:"tree"},{name:"create",display:"创建测试用例",type:"create",method:"post",path:"/testcases",resultType:"object",requestBody:{required:!0,type:"object",schema:{type:"object",properties:{productID:{type:"integer",description:"所属产品",format:"int32"},title:{type:"string",description:"用例标题"},module:{type:"integer",description:"所属模块",format:"int32"},story:{type:"integer",description:"相关需求",format:"int32"},pri:{type:"integer",description:"优先级",format:"int32"},type:{type:"string",description:"用例类型(unit 单元测试 | interface 接口测试 | feature 功能测试 | install 安装部署 | config 配置相关 | performance 性能测试 | security 安全相关 | other 其他)"},precondition:{type:"string",description:"前置条件"},steps:{type:"array",items:{type:"string"},description:'用例步骤, 如果是嵌套用例,可以通过key表示嵌套关系 {"1": "分组1", "1.1": "子分组1.1", "1.1.1": "步骤1.1.1"}'},expects:{type:"array",items:{type:"string"},description:'用例步骤期望, 如果是嵌套用例步骤,可以通过key表示嵌套关系 {"1": "", "1.1": "", "1.1.1": "步骤1.1.1的期望"}'},stepType:{type:"array",items:{type:"string"},description:'用例步骤类型(step 步骤 | group 父级步骤), 如果是嵌套用例步骤,可以通过key表示嵌套关系 {"1": "group", "1.1": "group", "1.1.1": "step"}'},project:{type:"integer",description:"所属项目",format:"int32"},execution:{type:"integer",description:"所属执行",format:"int32"}},required:["productID","title"]},example:{productID:1,title:"测试压敏模块显示是否正常",module:0,story:0,pri:3,type:"feature",steps:["步骤1","步骤2"],expects:["期望1","期望2"],stepType:["step","step"],project:2,execution:3}}},{name:"get",display:"获取测试用例详情",type:"get",method:"get",path:"/testcases/{caseID}",resultType:"object",resultGetter:"testcase",pathParams:{caseID:"测试用例ID"}},{name:"update",display:"修改测试用例",type:"update",method:"put",path:"/testcases/{caseID}",resultType:"object",pathParams:{caseID:"测试用例ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{title:{type:"string",description:"用例标题"},module:{type:"integer",description:"所属模块",format:"int32"},story:{type:"integer",description:"相关需求",format:"int32"},pri:{type:"integer",description:"优先级",format:"int32"},type:{type:"string",description:"用例类型(unit 单元测试 | interface 接口测试 | feature 功能测试 | install 安装部署 | config 配置相关 | performance 性能测试 | security 安全相关 | other 其他)"},precondition:{type:"string",description:"前置条件"},steps:{type:"array",items:{type:"string"},description:'用例步骤, 如果是嵌套用例,可以通过key表示嵌套关系 {"1": "分组1", "1.1": "子分组1.1", "1.1.1": "步骤1.1.1"}'},expects:{type:"array",items:{type:"string"},description:'用例步骤期望, 如果是嵌套用例步骤,可以通过key表示嵌套关系 {"1": "", "1.1": "", "1.1.1": "步骤1.1.1的期望"}'},stepType:{type:"array",items:{type:"string"},description:'用例步骤类型(step 步骤 | group 父级步骤), 如果是嵌套用例步骤,可以通过key表示嵌套关系 {"1": "group", "1.1": "group", "1.1.1": "step"}'}},required:["title"]},example:{title:"测试光敏模块显示是否正常",module:0,story:0,pri:3,type:"feature",steps:["步骤1","步骤2"],expects:["期望1","期望2"],stepType:["step","step"]}}},{name:"updateModule",display:"修改用例模块",type:"update",method:"put",path:"/testcase/modules/{moduleID}",resultType:"object",pathParams:{moduleID:"模块ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{name:{type:"string",description:"模块名称"},parent:{type:"integer",description:"父模块",format:"int32"}}},example:{name:"用例新模块",parent:"0"}}},{name:"delete",display:"删除测试用例",type:"delete",method:"delete",path:"/testcases/{caseID}",resultType:"text",pathParams:{caseID:"测试用例ID"}},{name:"deleteModule",display:"删除用例模块",type:"delete",method:"delete",path:"/testcase/modules/{moduleID}",resultType:"text",pathParams:{moduleID:"模块ID"}}]},{name:"task",display:"任务",description:"任务管理,支持获取任务列表,支持获取执行下的任务、执行的任务模块树、创建任务、获取任务详情、修改任务、修改任务模块、删除任务、删除任务模块、激活任务、关闭任务、完成任务、启动任务",actions:[{name:"list",display:"获取任务列表,支持获取执行下的任务",type:"list",method:"get",path:"/executions/{executionID}/tasks",resultType:"list",pagerGetter:"pager",resultGetter:"tasks",pathParams:{executionID:"所属执行ID"},params:[{name:"browseType",required:!1,type:"string",description:"状态,默认是unclosed",defaultValue:"unclosed",options:[{value:"all",label:"全部"},{value:"unclosed",label:"未关闭"},{value:"assignedtome",label:"指派给我"},{value:"assignedtome",label:"指派给我"},{value:"myinvolved",label:"由我参与"},{value:"assignedbyme",label:"由我指派"}]},{name:"orderBy",required:!1,type:"string",description:"排序",options:[{value:"id_asc",label:"ID 升序"},{value:"id_desc",label:"ID 降序"},{value:"name_asc",label:"名称 升序"},{value:"name_desc",label:"名称 降序"},{value:"status_asc",label:"状态 升序"},{value:"status_desc",label:"状态 降序"}]},{name:"recPerPage",required:!1,type:"number",description:"每页数量,不超过1000"},{name:"pageID",required:!1,type:"number",description:"页码,从第1页开始"}]},{name:"modules",display:"执行的任务模块树",type:"list",method:"get",path:"/executions/{executionID}/task/modules",resultType:"list",pathParams:{executionID:"执行ID"},resultGetter:"tree"},{name:"create",display:"创建任务",type:"create",method:"post",path:"/tasks",resultType:"object",requestBody:{required:!0,type:"object",schema:{type:"object",properties:{name:{type:"string",description:"任务名称"},executionID:{type:"integer",description:"所属执行",format:"int32"},type:{type:"string",description:"任务类型"},assignedTo:{type:"string",description:"指派给"},estStarted:{type:"string",description:"预计开始"},deadline:{type:"string",description:"截止日期"},pri:{type:"integer",description:"优先级",format:"int32"},estimate:{type:"number",description:"预计工时",format:"float"},module:{type:"integer",description:"所属模块",format:"int32"},story:{type:"integer",description:"相关需求",format:"int32"},desc:{type:"string",description:"任务描述"}},required:["name","executionID"]},example:{name:"开发电容压力监测模块",executionID:3,type:"devel",assignedTo:"admin",estStarted:"2025-12-25",deadline:"2025-12-30",pri:1,estimate:1,module:1,story:1}}},{name:"get",display:"获取任务详情",type:"get",method:"get",path:"/tasks/{taskID}",resultType:"object",pathParams:{taskID:"任务ID"},resultGetter:"task"},{name:"update",display:"修改任务",type:"update",method:"put",path:"/tasks/{taskID}",resultType:"object",pathParams:{taskID:"任务ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{name:{type:"string",description:"任务名称"},type:{type:"string",description:"任务类型"},assignedTo:{type:"string",description:"指派给"},estStarted:{type:"string",description:"预计开始"},deadline:{type:"string",description:"截止日期"},pri:{type:"integer",description:"优先级",format:"int32"},estimate:{type:"number",description:"预计工时",format:"float"},module:{type:"integer",description:"所属模块",format:"int32"},story:{type:"integer",description:"相关需求",format:"int32"},desc:{type:"string",description:"任务描述"}}},example:{name:"开发电容光敏监测模块",type:"devel",assignedTo:"admin",estStarted:"2025-12-25",deadline:"2025-12-30",pri:1,estimate:1,module:1,story:1}}},{name:"updateModule",display:"修改任务模块",type:"update",method:"put",path:"/task/modules/{moduleID}",resultType:"object",pathParams:{moduleID:"模块ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{name:{type:"string",description:"模块名称"},parent:{type:"integer",description:"父模块",format:"int32"}}},example:{name:"任务新模块",parent:"0"}}},{name:"delete",display:"删除任务",type:"delete",method:"delete",path:"/tasks/{taskID}",resultType:"text",pathParams:{taskID:"任务ID"}},{name:"deleteModule",display:"删除任务模块",type:"delete",method:"delete",path:"/task/modules/{moduleID}",resultType:"text",pathParams:{moduleID:"模块ID"}},{name:"activate",display:"激活任务",type:"action",method:"put",path:"/tasks/{taskID}/activate",resultType:"text",pathParams:{taskID:"任务ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{left:{type:"number",description:"预计剩余",format:"float"},assignedTo:{type:"string",description:"指派给"},comment:{type:"string",description:"备注"}}},example:{left:1,assignedTo:"admin"}}},{name:"close",display:"关闭任务",type:"action",method:"put",path:"/tasks/{taskID}/close",resultType:"text",pathParams:{taskID:"任务ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{comment:{type:"string",description:"备注"}}}}},{name:"finish",display:"完成任务",type:"action",method:"put",path:"/tasks/{taskID}/finish",resultType:"text",pathParams:{taskID:"任务ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{currentConsumed:{type:"number",description:"本次消耗",format:"float"},assignedTo:{type:"string",description:"指派给"},consumed:{type:"number",description:"总计消耗",format:"float"},realStarted:{type:"string",description:"实际开始,精确到秒"},finishedDate:{type:"string",description:"实际完成,精确到秒"},comment:{type:"string",description:"备注"}},required:["currentConsumed","realStarted","finishedDate"]},example:{currentConsumed:1,assignedTo:"admin",consumed:1,realStarted:"2025-12-25 09:00:00",finishedDate:"2025-12-30 17:30:00"}}},{name:"start",display:"启动任务",type:"action",method:"put",path:"/tasks/{taskID}/start",resultType:"text",pathParams:{taskID:"任务ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{assignedTo:{type:"string",description:"任务名称"},realStarted:{type:"string",description:"实际开始,精确到秒"},consumed:{type:"number",description:"总计消耗",format:"float"},left:{type:"number",description:"预计剩余",format:"float"},comment:{type:"string",description:"备注"}},required:["realStarted"]},example:{assignedTo:"admin",realStarted:"2025-12-26 09:00:00",consumed:1,left:1}}}]},{name:"issue",display:"问题",description:"问题管理,支持获取问题列表、获取项目问题列表、获取执行问题列表、创建问题、获取问题详情",actions:[{name:"list",display:"获取问题列表",type:"list",method:"get",path:"/issues",resultType:"list",pagerGetter:"pager",resultGetter:"issues",params:[{name:"browseType",required:!1,type:"string",description:"状态,默认是all",defaultValue:"all",options:[{value:"all",label:"全部"},{value:"open",label:"开放"},{value:"assignto",label:"指派给我"},{value:"assignby",label:"由我指派"},{value:"closed",label:"已关闭"},{value:"resolved",label:"已解决"},{value:"canceled",label:"已取消"}]},{name:"orderBy",required:!1,type:"string",description:"排序",options:[{value:"id_asc",label:"ID 升序"},{value:"id_desc",label:"ID 降序"},{value:"title_asc",label:"标题 升序"},{value:"title_desc",label:"标题 降序"},{value:"severity_asc",label:"严重程度 升序"},{value:"severity_desc",label:"严重程度 降序"},{value:"status_asc",label:"状态 升序"},{value:"status_desc",label:"状态 降序"}]},{name:"recPerPage",required:!1,type:"number",description:"每页数量,不超过1000"},{name:"pageID",required:!1,type:"number",description:"页码,从第1页开始"},{name:"filters",required:!1,type:"array",description:"搜索条件数组,每项包含 field/operator/value/join/group;field 必须是该接口支持的搜索字段,operator 使用该接口搜索配置支持的操作符。支持搜索字段:assignedDate,assignedTo,closedBy,closedDate,createdBy,createdDate,editedBy,editedDate,execution,id,pri,project,severity,status,title,type",style:"deepObject",explode:!0},{name:"groupJoin",required:!1,type:"string",description:"条件组之间的连接方式",options:[{value:"and",label:"and"},{value:"or",label:"or"}]}]},{name:"projectIssues",display:"获取项目问题列表",type:"list",method:"get",path:"/projects/{projectID}/issues",resultType:"list",pagerGetter:"pager",resultGetter:"issues",pathParams:{projectID:"项目ID"},params:[{name:"browseType",required:!1,type:"string",description:"状态,默认是all",defaultValue:"all",options:[{value:"all",label:"全部"},{value:"open",label:"开放"},{value:"assignto",label:"指派给我"},{value:"assignby",label:"由我指派"},{value:"closed",label:"已关闭"},{value:"resolved",label:"已解决"},{value:"canceled",label:"已取消"}]},{name:"orderBy",required:!1,type:"string",description:"排序",options:[{value:"id_asc",label:"ID 升序"},{value:"id_desc",label:"ID 降序"},{value:"title_asc",label:"标题 升序"},{value:"title_desc",label:"标题 降序"},{value:"severity_asc",label:"严重程度 升序"},{value:"severity_desc",label:"严重程度 降序"},{value:"status_asc",label:"状态 升序"},{value:"status_desc",label:"状态 降序"}]},{name:"recPerPage",required:!1,type:"number",description:"每页数量,不超过1000"},{name:"pageID",required:!1,type:"number",description:"页码,从第1页开始"},{name:"filters",required:!1,type:"array",description:"搜索条件数组,每项包含 field/operator/value/join/group;field 必须是该接口支持的搜索字段,operator 使用该接口搜索配置支持的操作符。支持搜索字段:assignedDate,assignedTo,closedBy,closedDate,createdBy,createdDate,editedBy,editedDate,execution,id,pri,project,severity,status,title,type",style:"deepObject",explode:!0},{name:"groupJoin",required:!1,type:"string",description:"条件组之间的连接方式",options:[{value:"and",label:"and"},{value:"or",label:"or"}]}]},{name:"executionIssues",display:"获取执行问题列表",type:"list",method:"get",path:"/executions/{executionID}/issues",resultType:"list",pagerGetter:"pager",resultGetter:"issues",pathParams:{executionID:"执行ID"},params:[{name:"browseType",required:!1,type:"string",description:"状态,默认是all",defaultValue:"all",options:[{value:"all",label:"全部"},{value:"open",label:"开放"},{value:"assignto",label:"指派给我"},{value:"assignby",label:"由我指派"},{value:"closed",label:"已关闭"},{value:"resolved",label:"已解决"},{value:"canceled",label:"已取消"}]},{name:"orderBy",required:!1,type:"string",description:"排序",options:[{value:"id_asc",label:"ID 升序"},{value:"id_desc",label:"ID 降序"},{value:"title_asc",label:"标题 升序"},{value:"title_desc",label:"标题 降序"},{value:"severity_asc",label:"严重程度 升序"},{value:"severity_desc",label:"严重程度 降序"},{value:"status_asc",label:"状态 升序"},{value:"status_desc",label:"状态 降序"}]},{name:"recPerPage",required:!1,type:"number",description:"每页数量,不超过1000"},{name:"pageID",required:!1,type:"number",description:"页码,从第1页开始"},{name:"filters",required:!1,type:"array",description:"搜索条件数组,每项包含 field/operator/value/join/group;field 必须是该接口支持的搜索字段,operator 使用该接口搜索配置支持的操作符。支持搜索字段:assignedDate,assignedTo,closedBy,closedDate,createdBy,createdDate,editedBy,editedDate,execution,id,pri,project,severity,status,title,type",style:"deepObject",explode:!0},{name:"groupJoin",required:!1,type:"string",description:"条件组之间的连接方式",options:[{value:"and",label:"and"},{value:"or",label:"or"}]}]},{name:"create",display:"创建问题",type:"create",method:"post",path:"/issues",resultType:"object",requestBody:{required:!0,type:"object",schema:{type:"object",properties:{objectID:{type:"integer",description:"所属项目",format:"int32"},from:{type:"integer",description:"来源,0 表示直接创建",format:"int32"},title:{type:"string",description:"问题名称"},type:{type:"string",description:"类型(design 设计问题 | code 程序缺陷 | performance 性能问题 | version 版本控制 | storyadd 需求新增 | storychanged 需求修改 | storyremoved 需求删除 | data 数据问题)"},severity:{type:"integer",description:"严重程度(1 严重 | 2 较严重 | 3 较小 | 4 建议)",format:"int32"},pri:{type:"integer",description:"优先级(1-4)",format:"int32"},execution:{type:"integer",description:"所属执行",format:"int32"},assignedTo:{type:"string",description:"指派给"},owner:{type:"string",description:"提出人"},deadline:{type:"string",description:"计划解决日期"},desc:{type:"string",description:"描述"}},required:["objectID","title","type","severity"]},example:{objectID:2,from:0,title:"关键路径延期",type:"design",severity:3,pri:3,execution:3,assignedTo:"admin",owner:"admin",deadline:"2026-03-01"}}},{name:"get",display:"获取问题详情",type:"get",method:"get",path:"/issues/{issueID}",resultType:"object",resultGetter:"issue",pathParams:{issueID:"问题ID"}}]},{name:"risk",display:"风险",description:"风险管理,支持获取风险列表、获取项目风险列表、获取执行风险列表、创建风险、获取风险详情、修改风险",actions:[{name:"list",display:"获取风险列表",type:"list",method:"get",path:"/risks",resultType:"list",pagerGetter:"pager",resultGetter:"risks",params:[{name:"browseType",required:!1,type:"string",description:"状态,默认是all",defaultValue:"all",options:[{value:"all",label:"全部"},{value:"active",label:"开放"},{value:"assignTo",label:"指派给我"},{value:"assignBy",label:"由我指派"},{value:"closed",label:"已关闭"},{value:"hangup",label:"已挂起"},{value:"canceled",label:"已取消"}]},{name:"orderBy",required:!1,type:"string",description:"排序",options:[{value:"id_asc",label:"ID 升序"},{value:"id_desc",label:"ID 降序"},{value:"name_asc",label:"名称 升序"},{value:"name_desc",label:"名称 降序"},{value:"status_asc",label:"状态 升序"},{value:"status_desc",label:"状态 降序"},{value:"pri_asc",label:"优先级 升序"},{value:"pri_desc",label:"优先级 降序"}]},{name:"recPerPage",required:!1,type:"number",description:"每页数量,不超过1000"},{name:"pageID",required:!1,type:"number",description:"页码,从第1页开始"},{name:"filters",required:!1,type:"array",description:"搜索条件数组,每项包含 field/operator/value/join/group;field 必须是该接口支持的搜索字段,operator 使用该接口搜索配置支持的操作符。支持搜索字段:activateBy,actualClosedDate,assignedTo,cancelBy,category,createdBy,createdDate,editedBy,editedDate,hangupBy,id,identifiedDate,impact,name,plannedClosedDate,prevention,pri,probability,project,rate,remedy,resolution,resolvedBy,source,status,strategy,trackedBy",style:"deepObject",explode:!0},{name:"groupJoin",required:!1,type:"string",description:"条件组之间的连接方式",options:[{value:"and",label:"and"},{value:"or",label:"or"}]}]},{name:"projectRisks",display:"获取项目风险列表",type:"list",method:"get",path:"/projects/{projectID}/risks",resultType:"list",pagerGetter:"pager",resultGetter:"risks",pathParams:{projectID:"项目ID"},params:[{name:"browseType",required:!1,type:"string",description:"状态,默认是all",defaultValue:"all",options:[{value:"all",label:"全部"},{value:"active",label:"开放"},{value:"assignTo",label:"指派给我"},{value:"assignBy",label:"由我指派"},{value:"closed",label:"已关闭"},{value:"hangup",label:"已挂起"},{value:"canceled",label:"已取消"}]},{name:"orderBy",required:!1,type:"string",description:"排序",options:[{value:"id_asc",label:"ID 升序"},{value:"id_desc",label:"ID 降序"},{value:"name_asc",label:"名称 升序"},{value:"name_desc",label:"名称 降序"},{value:"status_asc",label:"状态 升序"},{value:"status_desc",label:"状态 降序"},{value:"pri_asc",label:"优先级 升序"},{value:"pri_desc",label:"优先级 降序"}]},{name:"recPerPage",required:!1,type:"number",description:"每页数量,不超过1000"},{name:"pageID",required:!1,type:"number",description:"页码,从第1页开始"},{name:"filters",required:!1,type:"array",description:"搜索条件数组,每项包含 field/operator/value/join/group;field 必须是该接口支持的搜索字段,operator 使用该接口搜索配置支持的操作符。支持搜索字段:activateBy,actualClosedDate,assignedTo,cancelBy,category,createdBy,createdDate,editedBy,editedDate,hangupBy,id,identifiedDate,impact,name,plannedClosedDate,prevention,pri,probability,project,rate,remedy,resolution,resolvedBy,source,status,strategy,trackedBy",style:"deepObject",explode:!0},{name:"groupJoin",required:!1,type:"string",description:"条件组之间的连接方式",options:[{value:"and",label:"and"},{value:"or",label:"or"}]}]},{name:"executionRisks",display:"获取执行风险列表",type:"list",method:"get",path:"/executions/{executionID}/risks",resultType:"list",pagerGetter:"pager",resultGetter:"risks",pathParams:{executionID:"执行ID"},params:[{name:"browseType",required:!1,type:"string",description:"状态,默认是all",defaultValue:"all",options:[{value:"all",label:"全部"},{value:"active",label:"开放"},{value:"assignTo",label:"指派给我"},{value:"assignBy",label:"由我指派"},{value:"closed",label:"已关闭"},{value:"hangup",label:"已挂起"},{value:"canceled",label:"已取消"}]},{name:"orderBy",required:!1,type:"string",description:"排序",options:[{value:"id_asc",label:"ID 升序"},{value:"id_desc",label:"ID 降序"},{value:"name_asc",label:"名称 升序"},{value:"name_desc",label:"名称 降序"},{value:"status_asc",label:"状态 升序"},{value:"status_desc",label:"状态 降序"},{value:"pri_asc",label:"优先级 升序"},{value:"pri_desc",label:"优先级 降序"}]},{name:"recPerPage",required:!1,type:"number",description:"每页数量,不超过1000"},{name:"pageID",required:!1,type:"number",description:"页码,从第1页开始"},{name:"filters",required:!1,type:"array",description:"搜索条件数组,每项包含 field/operator/value/join/group;field 必须是该接口支持的搜索字段,operator 使用该接口搜索配置支持的操作符。支持搜索字段:activateBy,actualClosedDate,assignedTo,cancelBy,category,createdBy,createdDate,editedBy,editedDate,hangupBy,id,identifiedDate,impact,name,plannedClosedDate,prevention,pri,probability,project,rate,remedy,resolution,resolvedBy,source,status,strategy,trackedBy",style:"deepObject",explode:!0},{name:"groupJoin",required:!1,type:"string",description:"条件组之间的连接方式",options:[{value:"and",label:"and"},{value:"or",label:"or"}]}]},{name:"create",display:"创建风险",type:"create",method:"post",path:"/risks",resultType:"object",requestBody:{required:!0,type:"object",schema:{type:"object",properties:{project:{type:"integer",description:"所属项目",format:"int32"},name:{type:"string",description:"风险名称"},execution:{type:"integer",description:"所属执行",format:"int32"},source:{type:"string",description:"来源(business 业务部门 | team 项目组 | logistic 项目保障科室 | manage 管理层 | sourcing 供应商-采购 | outsourcing 供应商-外包 | customer 外部客户 | others 其他)"},category:{type:"string",description:"类型(technical 技术类 | manage 管理类 | business 业务类 | requirement 需求类 | resource 资源类 | others 其他)"},strategy:{type:"string",description:"策略(avoidance 规避 | mitigation 缓解 | transference 转移 | acceptance 接受)"},impact:{type:"integer",description:"影响程度(1-5)",format:"int32"},probability:{type:"integer",description:"发生概率(1-5)",format:"int32"},rate:{type:"integer",description:"风险系数",format:"int32"},pri:{type:"integer",description:"优先级(1 高 | 2 中 | 3 低)",format:"int32"},identifiedDate:{type:"string",description:"识别日期"},plannedClosedDate:{type:"string",description:"计划关闭日期"},assignedTo:{type:"string",description:"指派给"},prevention:{type:"string",description:"应对措施"},remedy:{type:"string",description:"响应措施"}},required:["project","name","impact","probability","pri"]},example:{project:2,name:"关键路径延期",execution:3,source:"business",category:"technical",strategy:"avoidance",impact:3,probability:3,rate:9,pri:2,identifiedDate:"2026-01-01",plannedClosedDate:"2026-03-01",assignedTo:"admin"}}},{name:"get",display:"获取风险详情",type:"get",method:"get",path:"/risks/{riskID}",resultType:"object",resultGetter:"risk",pathParams:{riskID:"风险ID"}},{name:"update",display:"修改风险",type:"update",method:"put",path:"/risks/{riskID}",resultType:"object",pathParams:{riskID:"风险ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{name:{type:"string",description:"风险名称"},source:{type:"string",description:"来源(business 业务部门 | team 项目组 | logistic 项目保障科室 | manage 管理层 | sourcing 供应商-采购 | outsourcing 供应商-外包 | customer 外部客户 | others 其他)"},category:{type:"string",description:"类型(technical 技术类 | manage 管理类 | business 业务类 | requirement 需求类 | resource 资源类 | others 其他)"},strategy:{type:"string",description:"策略(avoidance 规避 | mitigation 缓解 | transference 转移 | acceptance 接受)"},impact:{type:"integer",description:"影响程度(1-5)",format:"int32"},probability:{type:"integer",description:"发生概率(1-5)",format:"int32"},rate:{type:"integer",description:"风险系数",format:"int32"},pri:{type:"integer",description:"优先级(1 高 | 2 中 | 3 低)",format:"int32"},identifiedDate:{type:"string",description:"识别日期"},plannedClosedDate:{type:"string",description:"计划关闭日期"},assignedTo:{type:"string",description:"指派给"},prevention:{type:"string",description:"应对措施"},remedy:{type:"string",description:"响应措施"},resolution:{type:"string",description:"解决措施"}},required:["name"]},example:{name:"关键路径延期",source:"business",category:"technical",strategy:"avoidance",impact:3,probability:3,rate:9,pri:2,identifiedDate:"2026-01-01",plannedClosedDate:"2026-03-01",assignedTo:"admin"}}}]},{name:"meeting",display:"会议",description:"会议管理,支持获取会议列表、获取项目会议列表、获取执行会议列表、创建会议、获取会议详情、修改会议、删除会议、编辑会议纪要",actions:[{name:"list",display:"获取会议列表",type:"list",method:"get",path:"/meetings",resultType:"list",pagerGetter:"pager",resultGetter:"meetings",params:[{name:"browseType",required:!1,type:"string",description:"状态,默认是all",defaultValue:"all",options:[{value:"all",label:"全部"},{value:"booked",label:"我预约的"},{value:"participate",label:"我参加的"}]},{name:"orderBy",required:!1,type:"string",description:"排序",options:[{value:"id_asc",label:"ID 升序"},{value:"id_desc",label:"ID 降序"},{value:"name_asc",label:"名称 升序"},{value:"name_desc",label:"名称 降序"},{value:"date_asc",label:"日期 升序"},{value:"date_desc",label:"日期 降序"}]},{name:"recPerPage",required:!1,type:"number",description:"每页数量,不超过1000"},{name:"pageID",required:!1,type:"number",description:"页码,从第1页开始"},{name:"filters",required:!1,type:"array",description:"搜索条件数组,每项包含 field/operator/value/join/group;field 必须是该接口支持的搜索字段,operator 使用该接口搜索配置支持的操作符。支持搜索字段:begin,createdBy,createdDate,date,dept,editedBy,editedDate,end,execution,host,id,minutedBy,minutedDate,mode,name,project,room",style:"deepObject",explode:!0},{name:"groupJoin",required:!1,type:"string",description:"条件组之间的连接方式",options:[{value:"and",label:"and"},{value:"or",label:"or"}]}]},{name:"projectMeetings",display:"获取项目会议列表",type:"list",method:"get",path:"/projects/{projectID}/meetings",resultType:"list",pagerGetter:"pager",resultGetter:"meetings",pathParams:{projectID:"项目ID"},params:[{name:"browseType",required:!1,type:"string",description:"状态,默认是all",defaultValue:"all",options:[{value:"all",label:"全部"},{value:"booked",label:"我预约的"},{value:"participate",label:"我参加的"}]},{name:"orderBy",required:!1,type:"string",description:"排序",options:[{value:"id_asc",label:"ID 升序"},{value:"id_desc",label:"ID 降序"},{value:"name_asc",label:"名称 升序"},{value:"name_desc",label:"名称 降序"},{value:"date_asc",label:"日期 升序"},{value:"date_desc",label:"日期 降序"}]},{name:"recPerPage",required:!1,type:"number",description:"每页数量,不超过1000"},{name:"pageID",required:!1,type:"number",description:"页码,从第1页开始"},{name:"filters",required:!1,type:"array",description:"搜索条件数组,每项包含 field/operator/value/join/group;field 必须是该接口支持的搜索字段,operator 使用该接口搜索配置支持的操作符。支持搜索字段:begin,createdBy,createdDate,date,dept,editedBy,editedDate,end,execution,host,id,minutedBy,minutedDate,mode,name,project,room",style:"deepObject",explode:!0},{name:"groupJoin",required:!1,type:"string",description:"条件组之间的连接方式",options:[{value:"and",label:"and"},{value:"or",label:"or"}]}]},{name:"executionMeetings",display:"获取执行会议列表",type:"list",method:"get",path:"/executions/{executionID}/meetings",resultType:"list",pagerGetter:"pager",resultGetter:"meetings",pathParams:{executionID:"执行ID"},params:[{name:"browseType",required:!1,type:"string",description:"状态,默认是all",defaultValue:"all",options:[{value:"all",label:"全部"},{value:"booked",label:"我预约的"},{value:"participate",label:"我参加的"}]},{name:"orderBy",required:!1,type:"string",description:"排序",options:[{value:"id_asc",label:"ID 升序"},{value:"id_desc",label:"ID 降序"},{value:"name_asc",label:"名称 升序"},{value:"name_desc",label:"名称 降序"},{value:"date_asc",label:"日期 升序"},{value:"date_desc",label:"日期 降序"}]},{name:"recPerPage",required:!1,type:"number",description:"每页数量,不超过1000"},{name:"pageID",required:!1,type:"number",description:"页码,从第1页开始"},{name:"filters",required:!1,type:"array",description:"搜索条件数组,每项包含 field/operator/value/join/group;field 必须是该接口支持的搜索字段,operator 使用该接口搜索配置支持的操作符。支持搜索字段:begin,createdBy,createdDate,date,dept,editedBy,editedDate,end,execution,host,id,minutedBy,minutedDate,mode,name,project,room",style:"deepObject",explode:!0},{name:"groupJoin",required:!1,type:"string",description:"条件组之间的连接方式",options:[{value:"and",label:"and"},{value:"or",label:"or"}]}]},{name:"create",display:"创建会议",type:"create",method:"post",path:"/meetings",resultType:"object",requestBody:{required:!0,type:"object",schema:{type:"object",properties:{project:{type:"integer",description:"所属项目",format:"int32"},execution:{type:"integer",description:"所属执行",format:"int32"},name:{type:"string",description:"会议名称"},begin:{type:"string",description:"开始时间"},end:{type:"string",description:"结束时间"},mode:{type:"string",description:"会议模式(online 线上 | outline 线下 | both 线上+线下)"},host:{type:"string",description:"主持人"},participant:{type:"array",items:{type:"string"},description:"参会人员"},room:{type:"integer",description:"会议室",format:"int32"},dept:{type:"integer",description:"所属部门",format:"int32"},objectType:{type:"string",description:"关联类型(story | task | bug | issue | risk | opportunity)"},objectID:{type:"integer",description:"关联对象",format:"int32"}},required:["project","name","begin","end","mode","host","participant"]},example:{project:2,execution:3,name:"项目周会",begin:"2026-08-20 09:00",end:"2026-08-20 10:00",mode:"online",host:"admin",participant:["admin"],room:0,dept:0,objectID:0}}},{name:"get",display:"获取会议详情",type:"get",method:"get",path:"/meetings/{meetingID}",resultType:"object",resultGetter:"meeting",pathParams:{meetingID:"会议ID"}},{name:"update",display:"修改会议",type:"update",method:"put",path:"/meetings/{meetingID}",resultType:"object",pathParams:{meetingID:"会议ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{name:{type:"string",description:"会议名称"},begin:{type:"string",description:"开始时间"},end:{type:"string",description:"结束时间"},mode:{type:"string",description:"会议模式(online 线上 | outline 线下 | both 线上+线下)"},host:{type:"string",description:"主持人"},participant:{type:"array",items:{type:"string"},description:"参会人员"},room:{type:"integer",description:"会议室",format:"int32"},dept:{type:"integer",description:"所属部门",format:"int32"},objectType:{type:"string",description:"关联类型(story | task | bug | issue | risk | opportunity)"},objectID:{type:"integer",description:"关联对象",format:"int32"}},required:["name","begin","end","mode","host","participant"]},example:{name:"项目周会",begin:"2026-08-20 09:30",end:"2026-08-20 10:30",mode:"online",host:"admin",participant:["admin"],room:0,dept:0,objectID:0}}},{name:"delete",display:"删除会议",type:"delete",method:"delete",path:"/meetings/{meetingID}",resultType:"text",pathParams:{meetingID:"会议ID"}},{name:"minutes",display:"编辑会议纪要",type:"action",method:"put",path:"/meetings/{meetingID}/minutes",resultType:"text",pathParams:{meetingID:"会议ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{minutes:{type:"string",description:"会议纪要"}}},example:{minutes:"会议纪要内容"}}}]},{name:"feedback",display:"反馈",description:"反馈管理,支持获取反馈列表,支持获取产品下的反馈、创建反馈、反馈转Bug、反馈转工单、反馈转待办、反馈转需求、反馈转任务、获取反馈详情、修改反馈、删除反馈、激活反馈、关闭反馈",actions:[{name:"list",display:"获取反馈列表,支持获取产品下的反馈",type:"list",method:"get",path:"/products/{productID}/feedbacks",resultType:"list",pagerGetter:"pager",resultGetter:"feedbacks",pathParams:{productID:"所属产品ID"},params:[{name:"browseType",required:!1,type:"string",description:"状态,默认是wait",defaultValue:"wait",options:[{value:"all",label:"全部"},{value:"wait",label:"待处理"},{value:"doing",label:"处理中"},{value:"toclosed",label:"待关闭"},{value:"review",label:"待评审"},{value:"assigntome",label:"指派给我"},{value:"openedbyme",label:"由我反馈"}]},{name:"orderBy",required:!1,type:"string",description:"排序",options:[{value:"id_asc",label:"ID 升序"},{value:"id_desc",label:"ID 降序"},{value:"title_asc",label:"标题 升序"},{value:"title_desc",label:"标题 降序"},{value:"status_asc",label:"状态 升序"},{value:"status_desc",label:"状态 降序"}]},{name:"recPerPage",required:!1,type:"number",description:"每页数量,不超过1000"},{name:"pageID",required:!1,type:"number",description:"页码,从第1页开始"},{name:"filters",required:!1,type:"array",description:"搜索条件数组,每项包含 field/operator/value/join/group;field 必须是该接口支持的搜索字段,operator 使用该接口搜索配置支持的操作符。支持搜索字段:activatedBy,activatedDate,assignedTo,closedBy,closedDate,closedReason,desc,feedbackBy,id,keywords,mailto,module,notifyEmail,openedBy,openedDate,pri,processedBy,processedDate,product,public,reviewedBy,solution,source,status,title,type",style:"deepObject",explode:!0},{name:"groupJoin",required:!1,type:"string",description:"条件组之间的连接方式",options:[{value:"and",label:"and"},{value:"or",label:"or"}]}]},{name:"create",display:"创建反馈",type:"create",method:"post",path:"/feedbacks",resultType:"object",requestBody:{required:!0,type:"object",schema:{type:"object",properties:{product:{type:"integer",description:"所属产品",format:"int32"},title:{type:"string",description:"标题"},module:{type:"integer",description:"所属模块",format:"int32"},type:{type:"string",description:"类型(story 需求 | task 任务 | bug Bug | todo 待办 | advice 建议 | issue 问题 | risk 风险 | opportunity 机会)"},desc:{type:"string",description:"描述"},feedbackBy:{type:"string",description:"反馈者"},source:{type:"string",description:"来源"}},required:["product","title"]},example:{product:1,title:"电容压力监测灵敏度不够",module:0,type:"story",desc:"监测灵敏度不够",feedbackBy:"客户对接人",source:"XX技术有限公司"}}},{name:"createBug",display:"反馈转Bug",type:"create",method:"post",path:"/feedbacks/{feedbackID}/bugs",resultType:"object",pathParams:{feedbackID:"反馈ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{productID:{type:"integer",description:"所属产品",format:"int32"},title:{type:"string",description:"Bug标题"},openedBuild:{type:"array",items:{type:"string"},description:"影响版本,主干是trunk,其他版本使用版本ID"},severity:{type:"integer",description:"严重程度(1-4)",format:"int32"},pri:{type:"integer",description:"优先级",format:"int32"},type:{type:"string",description:"Bug类型(codeerror 代码错误 | config 配置相关 | install 安装部署 | security 安全相关 | performance 性能问题 | standard 标准规范 | automation 测试脚本 | designdefect 设计缺陷 | others 其他)"},steps:{type:"string",description:"重现步骤"}},required:["productID","title","openedBuild"]},example:{productID:1,title:"从反馈创建的Bug",openedBuild:["trunk"],severity:3,pri:3,type:"codeerror",steps:"反馈转Bug"}}},{name:"createTicket",display:"反馈转工单",type:"create",method:"post",path:"/feedbacks/{feedbackID}/tickets",resultType:"object",pathParams:{feedbackID:"反馈ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{product:{type:"integer",description:"所属产品",format:"int32"},module:{type:"integer",description:"所属模块",format:"int32"},title:{type:"string",description:"工单标题"},type:{type:"string",description:"类型(code 程序报错 | data 数据错误 | stuck 流程卡断 | security 安全问题 | affair 事务)"},desc:{type:"string",description:"工单描述"}},required:["product","module","title"]},example:{product:1,module:1,title:"从反馈创建的工单",type:"code",desc:"反馈转工单"}}},{name:"createTodo",display:"反馈转待办",type:"create",method:"post",path:"/feedbacks/{feedbackID}/todos",resultType:"object",pathParams:{feedbackID:"反馈ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{date:{type:"string",description:"日期"},name:{type:"string",description:"待办名称"}},required:["date","name"]},example:{date:"2026-08-19",name:"从反馈创建的待办"}}},{name:"createStory",display:"反馈转需求",type:"create",method:"post",path:"/feedbacks/{feedbackID}/stories",resultType:"object",pathParams:{feedbackID:"反馈ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{productID:{type:"integer",description:"所属产品",format:"int32"},title:{type:"string",description:"需求标题"},spec:{type:"string",description:"需求描述"},pri:{type:"integer",description:"优先级",format:"int32"},category:{type:"string",description:"类别"}},required:["productID","title"]},example:{productID:1,title:"从反馈创建的需求",spec:"反馈转需求",pri:3,category:"feature"}}},{name:"createTask",display:"反馈转任务",type:"create",method:"post",path:"/feedbacks/{feedbackID}/tasks",resultType:"object",pathParams:{feedbackID:"反馈ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{executionID:{type:"integer",description:"所属执行",format:"int32"},name:{type:"string",description:"任务名称"},type:{type:"string",description:"任务类型"},assignedTo:{type:"string",description:"指派给"},estStarted:{type:"string",description:"预计开始"},deadline:{type:"string",description:"截止日期"},desc:{type:"string",description:"任务描述"}},required:["executionID","name"]},example:{executionID:3,name:"从反馈创建的任务",type:"devel",assignedTo:"admin",estStarted:"2026-01-01",deadline:"2026-01-10",desc:"反馈转任务"}}},{name:"get",display:"获取反馈详情",type:"get",method:"get",path:"/feedbacks/{feedbackID}",resultType:"object",resultGetter:"feedback",pathParams:{feedbackID:"反馈ID"}},{name:"update",display:"修改反馈",type:"update",method:"put",path:"/feedbacks/{feedbackID}",resultType:"object",pathParams:{feedbackID:"反馈ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{product:{type:"integer",description:"所属产品",format:"int32"},module:{type:"integer",description:"所属模块",format:"int32"},title:{type:"string",description:"标题"},type:{type:"string",description:"类型(story 需求 | task 任务 | bug Bug | todo 待办 | advice 建议 | issue 问题 | risk 风险 | opportunity 机会)"},desc:{type:"string",description:"描述"},feedbackBy:{type:"string",description:"反馈者"},source:{type:"string",description:"来源"}},required:["product","title"]},example:{product:1,module:0,title:"光敏元件灵敏度不够",type:"story",desc:"监测灵敏度不够",feedbackBy:"客户对接人",source:"XX技术有限公司"}}},{name:"delete",display:"删除反馈",type:"delete",method:"delete",path:"/feedbacks/{feedbackID}",resultType:"text",pathParams:{feedbackID:"反馈ID"}},{name:"activate",display:"激活反馈",type:"action",method:"put",path:"/feedbacks/{feedbackID}/activate",resultType:"text",pathParams:{feedbackID:"反馈ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{assignedTo:{type:"string",description:"指派给"},comment:{type:"string",description:"备注"}}},example:{assignedTo:"admin"}}},{name:"close",display:"关闭反馈",type:"action",method:"put",path:"/feedbacks/{feedbackID}/close",resultType:"text",pathParams:{feedbackID:"反馈ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{closedReason:{type:"string",description:"关闭原因(commented 已处理 | repeat 重复 | refuse 不予采纳)"},comment:{type:"string",description:"备注"},confirmClose:{type:"string",description:"存在未关闭转化对象时是否强制关闭"}},required:["closedReason"]},example:{closedReason:"done",confirmClose:"yes"}}}]},{name:"ticket",display:"工单",description:"工单管理,支持获取工单列表,支持获取产品下的工单、创建工单、工单转需求、工单转Bug、获取工单详情、修改工单、删除工单、激活工单、关闭工单",actions:[{name:"list",display:"获取工单列表,支持获取产品下的工单",type:"list",method:"get",path:"/products/{productID}/tickets",resultType:"list",pagerGetter:"pager",resultGetter:"tickets",pathParams:{productID:"所属产品ID"},params:[{name:"browseType",required:!1,type:"string",description:"状态,默认是wait",defaultValue:"wait",options:[{value:"all",label:"全部"},{value:"unclosed",label:"未关闭"},{value:"wait",label:"待处理"},{value:"doing",label:"处理中"},{value:"done",label:"待关闭"},{value:"finishedbyme",label:"由我解决"},{value:"assigntome",label:"指派给我"},{value:"openedbyme",label:"由我创建"}]},{name:"orderBy",required:!1,type:"string",description:"排序",options:[{value:"id_asc",label:"ID 升序"},{value:"id_desc",label:"ID 降序"},{value:"title_asc",label:"标题 升序"},{value:"title_desc",label:"标题 降序"},{value:"status_asc",label:"状态 升序"},{value:"status_desc",label:"状态 降序"}]},{name:"recPerPage",required:!1,type:"number",description:"每页数量,不超过1000"},{name:"pageID",required:!1,type:"number",description:"页码,从第1页开始"},{name:"filters",required:!1,type:"array",description:"搜索条件数组,每项包含 field/operator/value/join/group;field 必须是该接口支持的搜索字段,operator 使用该接口搜索配置支持的操作符。支持搜索字段:activatedBy,activatedCount,activatedDate,assignedTo,closedBy,closedDate,closedReason,contact,customer,deadline,desc,editedBy,editedDate,feedback,id,keywords,mailto,module,notifyEmail,openedBuild,openedBy,openedDate,pri,product,resolution,resolvedBy,resolvedDate,startedBy,startedDate,status,title,type",style:"deepObject",explode:!0},{name:"groupJoin",required:!1,type:"string",description:"条件组之间的连接方式",options:[{value:"and",label:"and"},{value:"or",label:"or"}]}]},{name:"create",display:"创建工单",type:"create",method:"post",path:"/tickets",resultType:"object",requestBody:{required:!0,type:"object",schema:{type:"object",properties:{product:{type:"integer",description:"所属产品",format:"int32"},module:{type:"integer",description:"所属模块",format:"int32"},title:{type:"string",description:"标题"},type:{type:"string",description:"类型(code 程序报错 | data 数据错误 | stuck 流程卡断 | security 安全问题 | affair 事务)"},desc:{type:"string",description:"描述"},assignedTo:{type:"string",description:"指派给"},deadline:{type:"string",description:"截止日期"},openedBuild:{type:"array",items:{type:"string"},description:"影响版本"}},required:["product","title"]},example:{product:1,module:1,title:"电容压力监测灵敏度不够",type:"code",desc:"监测灵敏度不够",assignedTo:"admin",deadline:"2026-01-10",openedBuild:["trunk"]}}},{name:"createStory",display:"工单转需求",type:"create",method:"post",path:"/tickets/{ticketID}/stories",resultType:"object",pathParams:{ticketID:"工单ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{productID:{type:"integer",description:"所属产品",format:"int32"},title:{type:"string",description:"需求标题"},spec:{type:"string",description:"需求描述"},pri:{type:"integer",description:"优先级",format:"int32"},category:{type:"string",description:"类别"}},required:["productID","title"]},example:{productID:1,title:"从工单创建的需求",spec:"工单转需求",pri:3,category:"feature"}}},{name:"createBug",display:"工单转Bug",type:"create",method:"post",path:"/tickets/{ticketID}/bugs",resultType:"object",pathParams:{ticketID:"工单ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{productID:{type:"integer",description:"所属产品",format:"int32"},title:{type:"string",description:"Bug标题"},openedBuild:{type:"array",items:{type:"string"},description:"影响版本,主干是trunk,其他版本使用版本ID"},severity:{type:"integer",description:"严重程度(1-4)",format:"int32"},pri:{type:"integer",description:"优先级",format:"int32"},type:{type:"string",description:"Bug类型(codeerror 代码错误 | config 配置相关 | install 安装部署 | security 安全相关 | performance 性能问题 | standard 标准规范 | automation 测试脚本 | designdefect 设计缺陷 | others 其他)"},steps:{type:"string",description:"重现步骤"}},required:["productID","title","openedBuild"]},example:{productID:1,title:"从工单创建的Bug",openedBuild:["trunk"],severity:3,pri:3,type:"codeerror",steps:"工单转Bug"}}},{name:"get",display:"获取工单详情",type:"get",method:"get",path:"/tickets/{ticketID}",resultType:"object",resultGetter:"ticket",pathParams:{ticketID:"工单ID"}},{name:"update",display:"修改工单",type:"update",method:"put",path:"/tickets/{ticketID}",resultType:"object",pathParams:{ticketID:"工单ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{product:{type:"integer",description:"所属产品",format:"int32"},module:{type:"integer",description:"所属模块",format:"int32"},title:{type:"string",description:"标题"},type:{type:"string",description:"类型(code 程序报错 | data 数据错误 | stuck 流程卡断 | security 安全问题 | affair 事务)"},desc:{type:"string",description:"描述"},assignedTo:{type:"string",description:"指派给"},deadline:{type:"string",description:"截止日期"},openedBuild:{type:"array",items:{type:"string"},description:"影响版本"}}},example:{product:1,module:1,title:"电容压力监测灵敏度不够",type:"code",desc:"监测灵敏度不够",assignedTo:"admin",deadline:"2026-01-10",openedBuild:["trunk"]}}},{name:"delete",display:"删除工单",type:"delete",method:"delete",path:"/tickets/{ticketID}",resultType:"text",pathParams:{ticketID:"工单ID"}},{name:"activate",display:"激活工单",type:"action",method:"put",path:"/tickets/{ticketID}/activate",resultType:"text",pathParams:{ticketID:"工单ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{assignedTo:{type:"string",description:"指派给"},comment:{type:"string",description:"备注"}}},example:{assignedTo:"admin"}}},{name:"close",display:"关闭工单",type:"action",method:"put",path:"/tickets/{ticketID}/close",resultType:"text",pathParams:{ticketID:"工单ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{closedReason:{type:"string",description:"关闭原因(commented 已处理 | repeat 重复 | refuse 不予处理)"},comment:{type:"string",description:"备注"}},required:["closedReason","comment"]},example:{closedReason:"done"}}}]},{name:"system",display:"应用",description:"应用管理,支持获取应用列表,支持获取产品下的应用、创建应用、修改应用",actions:[{name:"list",display:"获取应用列表,支持获取产品下的应用",type:"list",method:"get",path:"/products/{productID}/systems",resultType:"list",pagerGetter:"pager",pathParams:{productID:"所属产品ID"},params:[{name:"orderBy",required:!1,type:"string",description:"排序",options:[{value:"id_asc",label:"ID 升序"},{value:"id_desc",label:"ID 降序"},{value:"name_asc",label:"名称 升序"},{value:"name_desc",label:"名称 降序"},{value:"status_asc",label:"状态 升序"},{value:"status_desc",label:"状态 降序"}]},{name:"recPerPage",required:!1,type:"number",description:"每页数量,不超过1000"},{name:"pageID",required:!1,type:"number",description:"页码,从第1页开始"}],resultGetter:"systems"},{name:"create",display:"创建应用",type:"create",method:"post",path:"/systems",resultType:"object",requestBody:{required:!0,type:"object",schema:{type:"object",properties:{productID:{type:"integer",description:"所属产品",format:"int32"},integrated:{type:"integer",description:"是否集成应用(0 否| 1 是)",format:"int32"},children:{type:"array",items:{type:"string"},description:"集成应用需要包含其他应用,非集成应用传空数组[]"},name:{type:"string",description:"应用名称"},desc:{type:"string",description:"描述"}},required:["productID","integrated","children","name"]},example:{productID:1,integrated:0,children:[],name:"smart-20260819093823",desc:"smart-20260819093823"}}},{name:"update",display:"修改应用",type:"update",method:"put",path:"/systems/{systemID}",resultType:"object",pathParams:{systemID:"应用ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{name:{type:"string",description:"应用名称"},children:{type:"array",items:{type:"string"},description:"集成应用需要包含其他应用,非集成应用传空数组[]"},desc:{type:"string",description:"描述"}},required:["name","children"]},example:{name:"smart-20260819093823-updated",children:[],desc:"smart-20260819093823-updated"}}}]},{name:"build",display:"版本",description:"版本管理,支持获取版本列表,支持获取项目/执行下的版本、创建版本/构建、修改版本、删除版本",actions:[{name:"list",display:"获取版本列表,支持获取项目/执行下的版本",type:"list",method:"get",path:"/{scope}/{scopeID}/builds",resultType:"list",pagerGetter:"pager",resultGetter:"builds",pathParams:{scope:{description:"版本所属范围",options:[{value:"projects",label:"项目"},{value:"executions",label:"执行"}]},scopeID:"所属范围ID"},params:[{name:"browseType",required:!1,type:"string",description:"状态,默认是all",defaultValue:"all",options:[{value:"all",label:"全部"},{value:"active",label:"有效"},{value:"closed",label:"已关闭"}]},{name:"orderBy",required:!1,type:"string",description:"排序",options:[{value:"id_asc",label:"ID 升序"},{value:"id_desc",label:"ID 降序"},{value:"name_asc",label:"名称 升序"},{value:"name_desc",label:"名称 降序"},{value:"date_asc",label:"日期 升序"},{value:"date_desc",label:"日期 降序"}]},{name:"recPerPage",required:!1,type:"number",description:"每页数量,不超过1000"},{name:"pageID",required:!1,type:"number",description:"页码,从第1页开始"},{name:"filters",required:!1,type:"array",description:"搜索条件数组,每项包含 field/operator/value/join/group;field 必须是该接口支持的搜索字段,operator 使用该接口搜索配置支持的操作符。支持搜索字段:name(名称,示例:关键字);system(所属应用,示例:all);id(ID,示例:1);product(所属产品,产品,示例:1);scmPath(源代码地址,示例:关键字);filePath(下载地址,示例:关键字);date(打包日期,示例:2026-01-01);builder(构建者,用户,示例:admin);desc(描述,示例:关键字)",style:"deepObject",explode:!0},{name:"groupJoin",required:!1,type:"string",description:"条件组之间的连接方式",options:[{value:"and",label:"and"},{value:"or",label:"or"}]}]},{name:"create",display:"创建版本/构建",type:"create",method:"post",path:"/builds",resultType:"object",requestBody:{required:!0,type:"object",schema:{type:"object",properties:{executionID:{type:"integer",description:"所属执行/迭代",format:"int32"},product:{type:"integer",description:"所属产品",format:"int32"},name:{type:"string",description:"构建名称"},system:{type:"integer",description:"所属应用",format:"int32"},builder:{type:"string",description:"构建者"},date:{type:"string",description:"打包日期"},scmPath:{type:"string",description:"源代码地址"},filePath:{type:"string",description:"下载地址"},desc:{type:"string",description:"描述"}},required:["executionID","product","name","system","builder","date"]},example:{executionID:3,product:1,name:"v1.0",system:1,builder:"admin",date:"2026-01-01",scmPath:"http://test.com/git",filePath:"http://test.com/download",desc:"test"}}},{name:"update",display:"修改版本",type:"update",method:"put",path:"/builds/{buildID}",resultType:"object",pathParams:{buildID:"版本ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{execution:{type:"integer",description:"所属执行/迭代",format:"int32"},product:{type:"integer",description:"所属产品",format:"int32"},name:{type:"string",description:"构建名称"},system:{type:"integer",description:"所属应用",format:"int32"},builder:{type:"string",description:"构建者"},date:{type:"string",description:"打包日期"},scmPath:{type:"string",description:"源代码地址"},filePath:{type:"string",description:"下载地址"},desc:{type:"string",description:"描述"}},required:["execution","product","name","system","builder","date"]},example:{execution:3,product:1,name:"版本v1.0",system:1,builder:"admin",date:"2026-01-01",scmPath:"http://test.com/git",filePath:"http://test.com/download",desc:"test"}}},{name:"delete",display:"删除版本",type:"delete",method:"delete",path:"/builds/{buildID}",resultType:"text",pathParams:{buildID:"版本ID"}}]},{name:"testtask",display:"测试单",description:"测试单管理,支持获取测试单列表,支持获取产品/项目/执行下的测试单、创建测试单、修改测试单、删除测试单",actions:[{name:"list",display:"获取测试单列表,支持获取产品/项目/执行下的测试单",type:"list",method:"get",path:"/{scope}/{scopeID}/testtasks",resultType:"list",pagerGetter:"pager",resultGetter:"testtasks",pathParams:{scope:{description:"测试单所属范围",options:[{value:"products",label:"产品"},{value:"projects",label:"项目"},{value:"executions",label:"执行"}]},scopeID:"所属范围ID"},params:[{name:"browseType",required:!1,type:"string",description:"状态,默认是all",defaultValue:"all",options:[{value:"all",label:"全部"},{value:"wait",label:"未开始"},{value:"doing",label:"进行中"},{value:"done",label:"已完成"},{value:"blocked",label:"阻塞"}]},{name:"orderBy",required:!1,type:"string",description:"排序",options:[{value:"id_asc",label:"ID 升序"},{value:"id_desc",label:"ID 降序"},{value:"name_asc",label:"名称 升序"},{value:"name_desc",label:"名称 降序"},{value:"status_asc",label:"状态 升序"},{value:"status_desc",label:"状态 降序"}]},{name:"recPerPage",required:!1,type:"number",description:"每页数量,不超过1000"},{name:"pageID",required:!1,type:"number",description:"页码,从第1页开始"}]},{name:"create",display:"创建测试单",type:"create",method:"post",path:"/testtasks",resultType:"object",requestBody:{required:!0,type:"object",schema:{type:"object",properties:{productID:{type:"integer",description:"所属产品ID",format:"int32"},name:{type:"string",description:"测试单名称"},build:{type:"integer",description:"提测构建/版本",format:"int32"},execution:{type:"integer",description:"所属执行",format:"int32"},type:{type:"array",items:{type:"string"},description:"类型(integrate 集成测试 | system 系统测试 | acceptance 验收测试 | performance 性能测试 | safety 安全测试)"},owner:{type:"string",description:"负责人"},status:{type:"string",description:"状态(wait 未开始 | doing 进行中 | done 已关闭 | blocked 被阻塞)"},begin:{type:"string",description:"开始日期"},end:{type:"string",description:"结束日期"},desc:{type:"string",description:"描述"}},required:["productID","name","build","begin","end"]},example:{productID:1,name:"智能家居V1.0测试单",build:1,execution:3,type:["integrate"],owner:"admin",status:"wait",begin:"2026-01-01",end:"2026-02-01",desc:"test"}}},{name:"update",display:"修改测试单",type:"update",method:"put",path:"/testtasks/{testtaskID}",resultType:"object",pathParams:{testtaskID:"测试单ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{name:{type:"string",description:"测试单名称"},build:{type:"integer",description:"提测构建/版本",format:"int32"},execution:{type:"integer",description:"所属执行",format:"int32"},type:{type:"array",items:{type:"string"},description:"类型(integrate 集成测试 | system 系统测试 | acceptance 验收测试 | performance 性能测试 | safety 安全测试)"},owner:{type:"string",description:"负责人"},status:{type:"string",description:"状态(wait 未开始 | doing 进行中 | done 已关闭 | blocked 被阻塞)"},begin:{type:"string",description:"开始日期"},end:{type:"string",description:"结束日期"},desc:{type:"string",description:"描述"}},required:["name","build","begin","end"]},example:{name:"智能家居V1.0测试单",build:1,execution:3,type:["integrate"],owner:"admin",status:"wait",begin:"2026-01-01",end:"2026-02-01",desc:"test"}}},{name:"delete",display:"删除测试单",type:"delete",method:"delete",path:"/testtasks/{testtaskID}",resultType:"text",pathParams:{testtaskID:"测试单ID"}}]},{name:"release",display:"发布",description:"发布管理,支持获取发布列表,支持获取产品下的发布、创建发布、修改发布、删除发布",actions:[{name:"list",display:"获取发布列表,支持获取产品下的发布",type:"list",method:"get",path:"/products/{productID}/releases",resultType:"list",pagerGetter:"pager",resultGetter:"releases",pathParams:{productID:"所属产品ID"},params:[{name:"browseType",required:!1,type:"string",description:"状态,默认是all",defaultValue:"all",options:[{value:"all",label:"全部"},{value:"wait",label:"未开始"},{value:"normal",label:"已发布"},{value:"fail",label:"发布失败"},{value:"terminate",label:"停止维护"}]},{name:"orderBy",required:!1,type:"string",description:"排序",options:[{value:"id_asc",label:"ID 升序"},{value:"id_desc",label:"ID 降序"},{value:"name_asc",label:"名称 升序"},{value:"name_desc",label:"名称 降序"},{value:"date_asc",label:"日期 升序"},{value:"date_desc",label:"日期 降序"},{value:"status_asc",label:"状态 升序"},{value:"status_desc",label:"状态 降序"}]},{name:"recPerPage",required:!1,type:"number",description:"每页数量,不超过1000"},{name:"pageID",required:!1,type:"number",description:"页码,从第1页开始"},{name:"filters",required:!1,type:"array",description:"搜索条件数组,每项包含 field/operator/value/join/group;field 必须是该接口支持的搜索字段,operator 使用该接口搜索配置支持的操作符。支持搜索字段:name(应用版本号,示例:关键字);branch(平台/分支,示例:all);id(ID,示例:1);build(包含构建,示例:all);status(发布状态,枚举:wait 未开始 | normal 已发布 | fail 发布失败 | terminate 停止维护);date(计划发布日期,示例:2026-01-01);marker(里程碑,枚举:1 是 | 0 否)",style:"deepObject",explode:!0},{name:"groupJoin",required:!1,type:"string",description:"条件组之间的连接方式",options:[{value:"and",label:"and"},{value:"or",label:"or"}]}]},{name:"create",display:"创建发布",type:"create",method:"post",path:"/releases",resultType:"object",requestBody:{required:!0,type:"object",schema:{type:"object",properties:{productID:{type:"integer",description:"所属产品",format:"int32"},system:{type:"integer",description:"所属应用",format:"int32"},name:{type:"string",description:"应用版本号"},build:{type:"array",items:{type:"string"},description:"包含构建"},status:{type:"string",description:"状态(wait 未开始 | normal 已发布 | fail 发布失败 | terminate 停止维护)"},date:{type:"string",description:"计划发布日期"},desc:{type:"string",description:"描述"}},required:["productID","system","name","build","date"]},example:{productID:1,system:1,name:"v1",build:[1],status:"wait",date:"2026-02-10",desc:"release 1.0"}}},{name:"update",display:"修改发布",type:"update",method:"put",path:"/releases/{releaseID}",resultType:"object",pathParams:{releaseID:"发布ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{system:{type:"integer",description:"所属应用",format:"int32"},name:{type:"string",description:"应用版本号"},build:{type:"array",items:{type:"string"},description:"包含构建"},status:{type:"string",description:"状态(wait 未开始 | normal 已发布 | fail 发布失败 | terminate 停止维护)"},date:{type:"string",description:"计划发布日期"},desc:{type:"string",description:"描述"}},required:["system","name","build","date"]},example:{system:1,name:"v1.0",build:[1],status:"wait",date:"2026-02-10",desc:"release 1.0"}}},{name:"delete",display:"删除发布",type:"delete",method:"delete",path:"/releases/{releaseID}",resultType:"text",pathParams:{releaseID:"发布ID"}}]},{name:"file",display:"附件",description:"附件管理,支持上传附件,使用【表单formdata】方式提交,不支持json、编辑附件,修改附件的名称、删除附件",actions:[{name:"create",display:"上传附件,使用【表单formdata】方式提交,不支持json",type:"create",method:"post",path:"/files",resultType:"object",requestBody:{required:!0,type:"object",schema:{type:"object",properties:{file:{type:"string",description:"本地文件路径,将按 multipart/form-data 上传"},objectType:{type:"string",description:"关联对象类型(bug 缺陷 | story 需求 | task 任务 | testcase 用例)"},objectID:{type:"integer",description:"关联对象ID",format:"int32"}},required:["file","objectType","objectID"]},example:{file:"/tmp/zentao-apidoc-test.txt",objectType:"story",objectID:1}}},{name:"update",display:"编辑附件,修改附件的名称",type:"update",method:"put",path:"/files/{fileID}",resultType:"object",pathParams:{fileID:"附件ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{fileName:{type:"string",description:"附件名称"}},required:["fileName"]},example:{fileName:"test2.txt"}}},{name:"delete",display:"删除附件",type:"delete",method:"delete",path:"/files/{fileID}",resultType:"text",pathParams:{fileID:"附件ID"}}]},{name:"workflow",display:"工作流",description:"工作流管理,支持获取工作流数据列表(以合同为例)、获取工作流数据详情(以合同为例)、创建工作流数据(以合同为例)、修改工作流数据(以合同为例)、删除工作流事项(以合同为例)",actions:[{name:"list",display:"获取工作流数据列表(以合同为例)",type:"list",method:"get",path:"/workflow/contract",resultType:"list",pagerGetter:"pager",resultGetter:"dataList"},{name:"getContract",display:"获取工作流数据详情(以合同为例)",type:"get",method:"get",path:"/workflow/contract/1",resultType:"object",resultGetter:"data"},{name:"create",display:"创建工作流数据(以合同为例)",type:"create",method:"post",path:"/workflow/contract",resultType:"object",requestBody:{required:!0,type:"object",schema:{type:"object",properties:{name:{type:"string",description:"合同名称"}},required:["name"]},example:{name:"test"}}},{name:"update",display:"修改工作流数据(以合同为例)",type:"update",method:"put",path:"/workflow/contract/{contractID}",resultType:"object",pathParams:{contractID:"合同ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{name:{type:"string",description:"合同名称"}},required:["name"]},example:{name:"contract1"}}},{name:"delete",display:"删除工作流事项(以合同为例)",type:"delete",method:"delete",path:"/workflow/contract/{contractID}",resultType:"text",pathParams:{contractID:"合同ID"}}]},{name:"doc",display:"文档",description:"文档管理,支持获取我的文档空间列表、获取团队文档空间列表、获取产品文档空间列表、获取项目文档空间列表、获取我的文档库列表、获取团队文档库列表、获取产品文档库列表、获取项目文档库列表、获取我的文档列表、获取团队文档列表、获取产品文档列表、获取项目文档列表、获取我的文档库目录列表、获取团队文档库目录列表、获取产品文档库目录列表、获取项目文档库目录列表、创建我的文档空间、创建团队文档空间、创建我的文档库、创建团队文档库、创建产品文档库、创建项目文档库、创建我的文档、创建团队文档、创建产品文档、创建项目文档、创建我的文档库目录、创建团队文档库目录、创建产品文档库目录、创建项目文档库目录、获取文档空间详情、获取文档库详情、获取文档详情、修改文档空间、修改文档库、修改文档、修改文档库目录、删除文档空间、删除文档库、删除文档、删除文档库目录",actions:[{name:"mySpaces",display:"获取我的文档空间列表",type:"list",method:"get",path:"/doc/my/spaces",resultType:"list",resultGetter:"spaces"},{name:"teamSpaces",display:"获取团队文档空间列表",type:"list",method:"get",path:"/doc/team/spaces",resultType:"list",resultGetter:"spaces"},{name:"productSpaces",display:"获取产品文档空间列表",type:"list",method:"get",path:"/doc/product/spaces",resultType:"list",resultGetter:"spaces"},{name:"projectSpaces",display:"获取项目文档空间列表",type:"list",method:"get",path:"/doc/project/spaces",resultType:"list",resultGetter:"spaces"},{name:"myLibs",display:"获取我的文档库列表",type:"list",method:"get",path:"/doc/my/spaces/{spaceID}/libs",resultType:"list",resultGetter:"libs",pathParams:{spaceID:"空间ID"}},{name:"teamLibs",display:"获取团队文档库列表",type:"list",method:"get",path:"/doc/team/spaces/{spaceID}/libs",resultType:"list",resultGetter:"libs",pathParams:{spaceID:"空间ID"}},{name:"productLibs",display:"获取产品文档库列表",type:"list",method:"get",path:"/doc/product/spaces/{productID}/libs",resultType:"list",resultGetter:"libs",pathParams:{productID:"产品ID"}},{name:"projectLibs",display:"获取项目文档库列表",type:"list",method:"get",path:"/doc/project/spaces/{projectID}/libs",resultType:"list",resultGetter:"libs",pathParams:{projectID:"项目ID"}},{name:"myDocs",display:"获取我的文档列表",type:"list",method:"get",path:"/doc/my/spaces/{spaceID}/libs/{libID}/docs",resultType:"list",pathParams:{spaceID:"空间ID",libID:"文档库ID"},resultGetter:"docs"},{name:"teamDocs",display:"获取团队文档列表",type:"list",method:"get",path:"/doc/team/spaces/{spaceID}/libs/{libID}/docs",resultType:"list",resultGetter:"docs",pathParams:{spaceID:"空间ID",libID:"文档库ID"}},{name:"productDocs",display:"获取产品文档列表",type:"list",method:"get",path:"/doc/product/spaces/{productID}/libs/{libID}/docs",resultType:"list",pathParams:{productID:"产品ID",libID:"文档库ID"},resultGetter:"docs"},{name:"projectDocs",display:"获取项目文档列表",type:"list",method:"get",path:"/doc/project/spaces/{projectID}/libs/{libID}/docs",resultType:"list",pathParams:{projectID:"项目ID",libID:"文档库ID"},resultGetter:"docs"},{name:"myModules",display:"获取我的文档库目录列表",type:"list",method:"get",path:"/doc/my/spaces/{spaceID}/libs/{libID}/modules",resultType:"list",resultGetter:"modules",pathParams:{spaceID:"空间ID",libID:"文档库ID"}},{name:"teamModules",display:"获取团队文档库目录列表",type:"list",method:"get",path:"/doc/team/spaces/{spaceID}/libs/{libID}/modules",resultType:"list",resultGetter:"modules",pathParams:{spaceID:"空间ID",libID:"文档库ID"}},{name:"productModules",display:"获取产品文档库目录列表",type:"list",method:"get",path:"/doc/product/spaces/{productID}/libs/{libID}/modules",resultType:"list",resultGetter:"modules",pathParams:{productID:"产品ID",libID:"文档库ID"}},{name:"projectModules",display:"获取项目文档库目录列表",type:"list",method:"get",path:"/doc/project/spaces/{projectID}/libs/{libID}/modules",resultType:"list",resultGetter:"modules",pathParams:{projectID:"项目ID",libID:"文档库ID"}},{name:"createMySpace",display:"创建我的文档空间",type:"create",method:"post",path:"/doc/my/spaces",resultType:"object",requestBody:{required:!0,type:"object",schema:{type:"object",properties:{name:{type:"string",description:"文档空间名称"}},required:["name"]},example:{name:"我的文档空间"}}},{name:"createTeamSpace",display:"创建团队文档空间",type:"create",method:"post",path:"/doc/team/spaces",resultType:"object",requestBody:{required:!0,type:"object",schema:{type:"object",properties:{name:{type:"string",description:"文档空间名称"}},required:["name"]},example:{name:"团队文档空间"}}},{name:"createMyLib",display:"创建我的文档库",type:"create",method:"post",path:"/doc/my/spaces/{spaceID}/libs",resultType:"object",pathParams:{spaceID:"空间ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{name:{type:"string",description:"文档库名称"}},required:["name"]},example:{name:"新增我的文档库"}}},{name:"createTeamLib",display:"创建团队文档库",type:"create",method:"post",path:"/doc/team/spaces/{spaceID}/libs",resultType:"object",pathParams:{spaceID:"空间ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{name:{type:"string",description:"文档库名称"},acl:{type:"string",description:"open 公开 | private 私有,默认是open"},groups:{type:"array",items:{type:"string"},description:"如果acl=private,可以设置哪些权限分组可以访问"},users:{type:"array",items:{type:"string"},description:"如果acl=private,可以设置哪些用户可以访问"}},required:["name"]},example:{name:"新增团队文档库",acl:"open",groups:[1],users:["admin"]}}},{name:"createProductLib",display:"创建产品文档库",type:"create",method:"post",path:"/doc/product/spaces/{productID}/libs",resultType:"object",pathParams:{productID:"产品ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{name:{type:"string",description:"文档库名称"},acl:{type:"string",description:"default 默认产品权限 | private 私有"},groups:{type:"array",items:{type:"string"},description:"如果acl=private,可以设置哪些权限分组可以访问"},users:{type:"array",items:{type:"string"},description:"如果acl=private,可以设置哪些用户可以访问"}},required:["name"]},example:{name:"新增产品文档库",acl:"default",groups:[1],users:["admin"]}}},{name:"createProjectLib",display:"创建项目文档库",type:"create",method:"post",path:"/doc/project/spaces/{projectID}/libs",resultType:"object",pathParams:{projectID:"项目ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{name:{type:"string",description:"文档库名称"},acl:{type:"string",description:"default 默认项目权限 | private 私有"},groups:{type:"array",items:{type:"string"},description:"如果acl=private,可以设置哪些权限分组可以访问"},users:{type:"array",items:{type:"string"},description:"如果acl=private,可以设置哪些用户可以访问"}},required:["name"]},example:{name:"新增项目文档库",acl:"default",groups:[1],users:["admin"]}}},{name:"createMyDoc",display:"创建我的文档",type:"create",method:"post",path:"/doc/my/spaces/{spaceID}/libs/{libID}/docs",resultType:"object",pathParams:{spaceID:"空间ID",libID:"文档库ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{moduleID:{type:"integer",description:"所属目录",format:"int32"},title:{type:"string",description:"文档标题"},content:{type:"string",description:"文档正文,使用Markdown格式;系统会转换为块编辑器内容并生成HTML快照"},contentType:{type:"string",description:"文档格式(doc 按Markdown处理,支持团队协同编辑 | html 旧格式,直接保存HTML,不支持团队协同编辑)"}},required:["title","content"]},example:{moduleID:1,title:"演示文档",content:`# 演示文档
|
|
3
3
|
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
**这是文章正文**`,contentType:"doc"}}},{name:"createTeamDoc",display:"创建团队文档",type:"create",method:"post",path:"/doc/team/spaces/{spaceID}/libs/{libID}/docs",resultType:"object",pathParams:{spaceID:"空间ID",libID:"文档库ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{moduleID:{type:"integer",description:"所属目录",format:"int32"},title:{type:"string",description:"文档标题"},content:{type:"string",description:"文档正文,使用Markdown格式;系统会转换为块编辑器内容并生成HTML快照"},contentType:{type:"string",description:"文档格式(doc 按Markdown处理,支持团队协同编辑 | html 旧格式,直接保存HTML,不支持团队协同编辑)"}},required:["title","content"]},example:{moduleID:1,title:"演示文档",content:`# 演示文档
|
|
5
|
+
|
|
6
|
+
**这是文章正文**`,contentType:"doc"}}},{name:"createProductDoc",display:"创建产品文档",type:"create",method:"post",path:"/doc/product/spaces/{productID}/libs/{libID}/docs",resultType:"object",pathParams:{productID:"产品ID",libID:"文档库ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{moduleID:{type:"integer",description:"所属目录",format:"int32"},title:{type:"string",description:"文档标题"},content:{type:"string",description:"文档正文,使用Markdown格式;系统会转换为块编辑器内容并生成HTML快照"},contentType:{type:"string",description:"文档格式(doc 按Markdown处理,支持团队协同编辑 | html 旧格式,直接保存HTML,不支持团队协同编辑)"}},required:["title","content"]},example:{moduleID:1,title:"演示文档",content:`# 演示文档
|
|
7
|
+
|
|
8
|
+
**这是文章正文**`,contentType:"doc"}}},{name:"createProjectDoc",display:"创建项目文档",type:"create",method:"post",path:"/doc/project/spaces/{projectID}/libs/{libID}/docs",resultType:"object",pathParams:{projectID:"项目ID",libID:"文档库ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{moduleID:{type:"integer",description:"所属目录",format:"int32"},title:{type:"string",description:"文档标题"},content:{type:"string",description:"文档正文,使用Markdown格式;系统会转换为块编辑器内容并生成HTML快照"},contentType:{type:"string",description:"文档格式(doc 按Markdown处理,支持团队协同编辑 | html 旧格式,直接保存HTML,不支持团队协同编辑)"}},required:["title","content"]},example:{moduleID:1,title:"演示文档",content:`# 演示文档
|
|
9
|
+
|
|
10
|
+
**这是文章正文**`,contentType:"doc"}}},{name:"createMyModule",display:"创建我的文档库目录",type:"create",method:"post",path:"/doc/my/spaces/{spaceID}/libs/{libID}/modules",resultType:"object",pathParams:{spaceID:"空间ID",libID:"文档库ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{name:{type:"string",description:"文档库目录"},parentID:{type:"integer",description:"父目录ID,必须属于当前文档库",format:"int32"}},required:["name"]},example:{name:"CMMI资料",parentID:"0"}}},{name:"createTeamModule",display:"创建团队文档库目录",type:"create",method:"post",path:"/doc/team/spaces/{spaceID}/libs/{libID}/modules",resultType:"object",pathParams:{spaceID:"空间ID",libID:"文档库ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{name:{type:"string",description:"文档库目录"},parentID:{type:"integer",description:"父目录ID,必须属于当前文档库",format:"int32"}},required:["name"]},example:{name:"CMMI资料",parentID:"0"}}},{name:"createProductModule",display:"创建产品文档库目录",type:"create",method:"post",path:"/doc/product/spaces/{productID}/libs/{libID}/modules",resultType:"object",pathParams:{productID:"产品ID",libID:"文档库ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{name:{type:"string",description:"文档库目录"},parentID:{type:"integer",description:"父目录ID,必须属于当前文档库",format:"int32"}},required:["name"]},example:{name:"CMMI资料",parentID:"0"}}},{name:"createProjectModule",display:"创建项目文档库目录",type:"create",method:"post",path:"/doc/project/spaces/{projectID}/libs/{libID}/modules",resultType:"object",pathParams:{projectID:"项目ID",libID:"文档库ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{name:{type:"string",description:"文档库目录"},parentID:{type:"integer",description:"父目录ID,必须属于当前文档库",format:"int32"}},required:["name"]},example:{name:"CMMI资料",parentID:"0"}}},{name:"getSpace",display:"获取文档空间详情",type:"get",method:"get",path:"/doc/spaces/{spaceID}",resultType:"object",resultGetter:"space",pathParams:{spaceID:"空间ID"}},{name:"getLib",display:"获取文档库详情",type:"get",method:"get",path:"/doc/libs/{libID}",resultType:"object",resultGetter:"lib",pathParams:{libID:"文档库ID"}},{name:"get",display:"获取文档详情",type:"get",method:"get",path:"/doc/docs/{docID}",resultType:"object",resultGetter:"doc",pathParams:{docID:"文档ID"}},{name:"updateSpace",display:"修改文档空间",type:"update",method:"put",path:"/doc/spaces/{spaceID}",resultType:"object",pathParams:{spaceID:"空间ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{name:{type:"string",description:"文档空间名称"}},required:["name"]},example:{name:"新的空间"}}},{name:"updateLib",display:"修改文档库",type:"update",method:"put",path:"/doc/libs/{libID}",resultType:"object",pathParams:{libID:"文档库ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{name:{type:"string",description:"文档库名称"},acl:{type:"string",description:"open 公开(适用于团队文档库) | default 默认权限(适用于产品、项目文档库) | private 私有(适用于所有类型文档库)"},groups:{type:"array",items:{type:"string"},description:"如果acl=private,可以设置哪些权限分组可以访问"},users:{type:"array",items:{type:"string"},description:"如果acl=private,可以设置哪些用户可以访问"}},required:["name"]},example:{name:"新文档库",acl:"default",groups:[1],users:["admin"]}}},{name:"update",display:"修改文档",type:"update",method:"put",path:"/doc/docs/{docID}",resultType:"object",pathParams:{docID:"文档ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{moduleID:{type:"integer",description:"所属目录",format:"int32"},title:{type:"string",description:"文档标题"},content:{type:"string",description:"文档正文,使用Markdown格式;系统会转换为块编辑器内容并生成HTML快照"},contentType:{type:"string",description:"文档格式(doc 按Markdown处理,支持团队协同编辑 | html 旧格式,直接保存HTML,不支持团队协同编辑)"}},required:["title","content"]},example:{moduleID:1,title:"API修改演示文档",content:"**这是修改后的文章正文**",contentType:"doc"}}},{name:"updateModule",display:"修改文档库目录",type:"update",method:"put",path:"/doc/modules/{moduleID}",resultType:"object",pathParams:{moduleID:"模块ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{name:{type:"string",description:"文档库目录名称"}},required:["name"]},example:{name:"文档目录1"}}},{name:"deleteSpace",display:"删除文档空间",type:"delete",method:"delete",path:"/doc/spaces/{spaceID}",resultType:"text",pathParams:{spaceID:"空间ID"}},{name:"deleteLib",display:"删除文档库",type:"delete",method:"delete",path:"/doc/libs/{libID}",resultType:"text",pathParams:{libID:"文档库ID"}},{name:"delete",display:"删除文档",type:"delete",method:"delete",path:"/doc/docs/{docID}",resultType:"text",pathParams:{docID:"文档ID"}},{name:"deleteModule",display:"删除文档库目录",type:"delete",method:"delete",path:"/doc/modules/{moduleID}",resultType:"text",pathParams:{moduleID:"模块ID"}}]},{name:"todo",display:"待办",description:"待办管理,支持创建待办、编辑待办、删除待办",actions:[{name:"create",display:"创建待办",type:"create",method:"post",path:"/todos",resultType:"object",requestBody:{required:!0,type:"object",schema:{type:"object",properties:{date:{type:"string",description:"日期"},type:{type:"string",description:"类型:custom 自定义 | task 任务 | bug 缺陷 | story 研发需求 | epic 业务需求 | requirement 用户需求 | testtask 测试单"},name:{type:"string",description:"待办名称,type为custom时必填;type为非custom时由关联对象的名称或标题自动生成"},objectID:{type:"integer",description:"关联对象ID,type为非custom时必填,必须是type对应对象的ID",format:"int32"},begin:{type:"string",description:"开始时间,使用小时+分钟拼接"},end:{type:"string",description:"结束时间,使用小时+分钟拼接"},assignedTo:{type:"string",description:"指派给"},desc:{type:"string",description:"待办详情"}},required:["date","type"]},example:{date:"2026-12-10",type:"bug",objectID:1,begin:"0900",end:"0930",assignedTo:"admin",desc:"审批项目预算详情"}}},{name:"update",display:"编辑待办",type:"update",method:"put",path:"/todos/{todoID}",resultType:"object",pathParams:{todoID:"待办ID"},requestBody:{required:!0,type:"object",schema:{type:"object",properties:{date:{type:"string",description:"日期"},type:{type:"string",description:"类型:custom 自定义 | task 任务 | bug 缺陷 | story 研发需求 | epic 业务需求 | requirement 用户需求 | testtask 测试单"},name:{type:"string",description:"待办名称,type为custom时必填;type为非custom时由关联对象的名称或标题自动生成"},objectID:{type:"integer",description:"关联对象ID,type为非custom时必填,必须是type对应对象的ID",format:"int32"},begin:{type:"string",description:"开始时间,使用小时+分钟拼接"},end:{type:"string",description:"结束时间,使用小时+分钟拼接"},assignedTo:{type:"string",description:"指派给"},desc:{type:"string",description:"待办详情"}},required:["date","type"]},example:{date:"2026-12-10",type:"bug",objectID:1,begin:"0900",end:"0930",assignedTo:"admin",desc:"审批项目预算详情"}}},{name:"delete",display:"删除待办",type:"delete",method:"delete",path:"/todos/{todoID}",resultType:"text",pathParams:{todoID:"待办ID"}}]},{name:"my",display:"地盘",description:"地盘管理,支持我的待办、指派给我的任务、指派给我的Bug、指派给我的研发需求、指派给我的业务需求、指派给我的用户需求、我负责的的测试单、我参与的项目、指派给我的反馈、指派给我的工单、指派给我的用例、我的会议、指派给我的问题、指派给我的风险",actions:[{name:"todos",display:"我的待办",type:"list",method:"get",path:"/my/todos",resultType:"list",pagerGetter:"pager",resultGetter:"todos",params:[{name:"browseType",required:!1,type:"string",description:"状态,默认是all",defaultValue:"all",options:[{value:"all",label:"全部"},{value:"today",label:"今天"},{value:"future",label:"将来"},{value:"lag",label:"过期"},{value:"finished",label:"已完成"}]},{name:"orderBy",required:!1,type:"string",description:"排序(date_desc,status,begin 日期/状态/开始时间)"},{name:"recPerPage",required:!1,type:"number",description:"每页数量,不超过1000"},{name:"pageID",required:!1,type:"number",description:"页码,从第1页开始"}]},{name:"tasks",display:"指派给我的任务",type:"list",method:"get",path:"/my/tasks",resultType:"list",pagerGetter:"pager",resultGetter:"tasks",params:[{name:"browseType",required:!1,type:"string",description:"状态,默认是all",defaultValue:"all",options:[{value:"all",label:"全部"},{value:"unclosed",label:"未关闭"},{value:"assignedtome",label:"指派给我"},{value:"openedbyme",label:"我创建"},{value:"finishedbyme",label:"由我完成"},{value:"closedbyme",label:"由我关闭"}]},{name:"orderBy",required:!1,type:"string",description:"排序",options:[{value:"id_asc",label:"ID 升序"},{value:"id_desc",label:"ID 降序"},{value:"name_asc",label:"名称 升序"},{value:"name_desc",label:"名称 降序"},{value:"status_asc",label:"状态 升序"},{value:"status_desc",label:"状态 降序"},{value:"pri_asc",label:"优先级 升序"},{value:"pri_desc",label:"优先级 降序"}]},{name:"recPerPage",required:!1,type:"number",description:"每页数量,不超过1000"},{name:"pageID",required:!1,type:"number",description:"页码,从第1页开始"},{name:"filters",required:!1,type:"array",description:"搜索条件数组,每项包含 field/operator/value/join/group;field 必须是该接口支持的搜索字段,operator 使用该接口搜索配置支持的操作符。支持搜索字段:name(任务名称,示例:关键字);keywords(关键词,示例:关键字);id(编号,示例:1);status(任务状态,枚举:wait 未开始 | doing 进行中 | done 已完成 | pause 已暂停 | cancel 已取消 | closed 已关闭);desc(任务描述,示例:关键字);assignedTo(指派给,用户,示例:admin);pri(优先级,枚举:1 | 2 | 3 | 4);project(所属项目,示例:all);execution(所属执行,示例:all);module(所属模块,示例:all);estimate(最初预计,示例:关键字);left(预计剩余,示例:关键字);consumed(总计消耗,示例:关键字);type(任务类型,枚举:design 设计 | devel 开发 | request 需求 | test 测试 | study 研究 | discuss 讨论 | ui 界面 | affair 事务 | misc 其他);story(相关用户故事,示例:all);fromBug(来源Bug编号,枚举:design 设计 | devel 开发 | request 需求 | test 测试 | study 研究 | discuss 讨论 | ui 界面 | affair 事务 | misc 其他);closedReason(关闭原因,枚举:done 已完成 | cancel 已取消);openedBy(由谁创建,用户,示例:admin);finishedBy(由谁完成,用户,示例:admin);closedBy(由谁关闭,用户,示例:admin);canceledBy(由谁取消,用户,示例:admin);lastEditedBy(最后修改,用户,示例:admin);mailto(抄送给,用户,示例:admin);openedDate(创建日期,示例:2026-01-01);deadline(截止日期,示例:2026-01-01);estStarted(预计开始,示例:2026-01-01);realStarted(实际开始,示例:2026-01-01);assignedDate(指派日期,示例:2026-01-01);finishedDate(实际完成,示例:2026-01-01);closedDate(关闭时间,示例:2026-01-01);canceledDate(取消时间,示例:2026-01-01);lastEditedDate(最后修改日期,示例:2026-01-01);activatedDate(激活日期,示例:2026-01-01)",style:"deepObject",explode:!0},{name:"groupJoin",required:!1,type:"string",description:"条件组之间的连接方式",options:[{value:"and",label:"and"},{value:"or",label:"or"}]}]},{name:"bugs",display:"指派给我的Bug",type:"list",method:"get",path:"/my/bugs",resultType:"list",pagerGetter:"pager",resultGetter:"bugs",params:[{name:"browseType",required:!1,type:"string",description:"状态,默认是all",defaultValue:"all",options:[{value:"all",label:"全部"},{value:"unclosed",label:"未关闭"},{value:"assignedtome",label:"指派给我"},{value:"openedbyme",label:"我创建"},{value:"resolvedbyme",label:"由我解决"}]},{name:"orderBy",required:!1,type:"string",description:"排序",options:[{value:"id_asc",label:"ID 升序"},{value:"id_desc",label:"ID 降序"},{value:"title_asc",label:"标题 升序"},{value:"title_desc",label:"标题 降序"},{value:"status_asc",label:"状态 升序"},{value:"status_desc",label:"状态 降序"},{value:"severity_asc",label:"严重程度 升序"},{value:"severity_desc",label:"严重程度 降序"}]},{name:"recPerPage",required:!1,type:"number",description:"每页数量,不超过1000"},{name:"pageID",required:!1,type:"number",description:"页码,从第1页开始"},{name:"filters",required:!1,type:"array",description:"搜索条件数组,每项包含 field/operator/value/join/group;field 必须是该接口支持的搜索字段,operator 使用该接口搜索配置支持的操作符。支持搜索字段:title(Bug标题,示例:关键字);module(所属模块,模块,示例:0);keywords(关键词,示例:关键字);steps(重现步骤,示例:关键字);assignedTo(指派给,用户,示例:admin);resolvedBy(解决者,用户,示例:admin);status(Bug状态,枚举:active 激活 | resolved 已解决 | closed 已关闭);confirmed(是否确认,枚举:1 已确认 | 0 未确认);story(相关需求,示例:关键字);project(所属项目,示例:all);product(所属产品,示例:all);branch(branch,示例:all);plan(所属计划,示例:all);id(Bug编号,示例:1);execution(所属执行,执行,示例:3);severity(严重程度,枚举:1 | 2 | 3 | 4);pri(优先级,枚举:1 | 2 | 3 | 4);type(Bug类型,枚举:codeerror 代码错误 | config 配置相关 | install 安装部署 | security 安全相关 | performance 性能问题 | standard 标准规范 | automation 测试脚本 | designdefect 设计缺陷 | codeimprovement 代码改进 | others 其他);os(操作系统,枚举:all 全部 | windows Windows | win11 Windows 11 | win10 Windows 10 | win8 Windows 8 | win7 Windows 7 | winxp Windows XP | osx Mac OS | android Android | ios IOS | linux Linux | ubuntu Ubuntu | chromeos Chrome OS | fedora Fedora | unix Unix | others 其他);browser(浏览器,枚举:all 全部 | chrome Chrome | edge Edge | ie IE系列 | ie11 IE11 | ie10 IE10 | ie9 IE9 | ie8 IE8 | firefox firefox系列 | opera Opera系列 | safari | 360 360浏览器 | qq QQ浏览器 | other 其他);resolution(解决方案,枚举:bydesign 设计如此 | duplicate 重复Bug | external 外部原因 | fixed 已解决 | notrepro 无法重现 | postponed 延期处理 | willnotfix 不予解决 | tostory 转为用户故事);activatedCount(激活次数,示例:关键字);toTask(转任务,示例:关键字);toStory(转用户故事,示例:关键字);openedBy(由谁创建,用户,示例:admin);closedBy(由谁关闭,用户,示例:admin);lastEditedBy(修改者,用户,示例:admin);mailto(抄送给,用户,示例:admin);openedBuild(影响版本,示例:builds);resolvedBuild(解决版本,示例:builds);openedDate(创建日期,示例:2026-01-01);assignedDate(指派日期,示例:2026-01-01);resolvedDate(解决日期,示例:2026-01-01);closedDate(关闭日期,示例:2026-01-01);lastEditedDate(修改日期,示例:2026-01-01);deadline(截止日期,示例:2026-01-01);activatedDate(激活时间,示例:2026-01-01)",style:"deepObject",explode:!0},{name:"groupJoin",required:!1,type:"string",description:"条件组之间的连接方式",options:[{value:"and",label:"and"},{value:"or",label:"or"}]}]},{name:"stories",display:"指派给我的研发需求",type:"list",method:"get",path:"/my/stories",resultType:"list",pagerGetter:"pager",resultGetter:"stories",params:[{name:"browseType",required:!1,type:"string",description:"状态,默认是allstory",defaultValue:"allstory",options:[{value:"allstory",label:"全部"},{value:"assignedtome",label:"指派给我"},{value:"openedbyme",label:"我创建"},{value:"reviewbyme",label:"待我评审"},{value:"draftstory",label:"草稿"}]},{name:"orderBy",required:!1,type:"string",description:"排序",options:[{value:"id_asc",label:"ID 升序"},{value:"id_desc",label:"ID 降序"},{value:"title_asc",label:"标题 升序"},{value:"title_desc",label:"标题 降序"},{value:"status_asc",label:"状态 升序"},{value:"status_desc",label:"状态 降序"}]},{name:"recPerPage",required:!1,type:"number",description:"每页数量,不超过1000"},{name:"pageID",required:!1,type:"number",description:"页码,从第1页开始"},{name:"filters",required:!1,type:"array",description:"搜索条件数组,每项包含 field/operator/value/join/group;field 必须是该接口支持的搜索字段,operator 使用该接口搜索配置支持的操作符。支持搜索字段:title(需求名称,示例:关键字);id(编号,示例:1);keywords(关键词,示例:关键字);status(当前状态,枚举:draft 草稿 | reviewing 评审中 | active 激活 | changing 变更中 | closed 已关闭);pri(优先级,枚举:1 | 2 | 3 | 4);module(所属模块,示例:all);stage(所处阶段,枚举:wait 未开始 | planned 已计划 | projected 研发立项 | designing 设计中 | designed 设计完毕 | developing 研发中 | developed 研发完毕 | testing 测试中 | tested 测试完毕 | verified 已验收 | rejected 验收失败 | delivering 交付中 | delivered 已交付 | released 已发布 | closed 已关闭);product(所属产品,示例:all);branch(branch,示例:all);grade(需求层级,示例:all);plan(所属计划,示例:all);estimate(预计小时,示例:关键字);source(来源,枚举:customer 客户 | user 用户 | po 产品经理 | market 市场 | service 客服 | operation 运营 | support 技术支持 | competitor 竞争对手 | partner 合作伙伴 | dev 开发人员 | tester 测试人员 | bug Bug | forum 论坛 | other 其他);sourceNote(来源备注,示例:关键字);fromBug(来源Bug,示例:关键字);category(类别,枚举:feature 功能 | interface 接口 | performance 性能 | safe 安全 | experience 体验 | improve 改进 | other 其他);openedBy(由谁创建,用户,示例:admin);reviewedBy(已评审人,用户,示例:admin);result(评审结果,枚举:pass 确认通过 | revert 撤销变更 | clarify 有待明确 | reject 拒绝);assignedTo(指派给,用户,示例:admin);closedBy(由谁关闭,用户,示例:admin);lastEditedBy(最后修改,用户,示例:admin);mailto(抄送给,用户,示例:admin);closedReason(关闭原因,枚举:done 已完成 | subdivided 已拆分 | duplicate 重复 | postponed 延期 | willnotdo 不做 | cancel 已取消 | bydesign 设计如此);version(版本号,示例:关键字);openedDate(创建日期,示例:2026-01-01);reviewedDate(评审时间,示例:2026-01-01);assignedDate(指派日期,示例:2026-01-01);closedDate(关闭日期,示例:2026-01-01);lastEditedDate(最后修改日期,示例:2026-01-01);activatedDate(激活日期,示例:2026-01-01)",style:"deepObject",explode:!0},{name:"groupJoin",required:!1,type:"string",description:"条件组之间的连接方式",options:[{value:"and",label:"and"},{value:"or",label:"or"}]}]},{name:"epics",display:"指派给我的业务需求",type:"list",method:"get",path:"/my/epics",resultType:"list",pagerGetter:"pager",resultGetter:"epics",params:[{name:"browseType",required:!1,type:"string",description:"状态,默认是allstory",defaultValue:"allstory",options:[{value:"allstory",label:"全部"},{value:"assignedtome",label:"指派给我"},{value:"openedbyme",label:"我创建"},{value:"reviewbyme",label:"待我评审"},{value:"draftstory",label:"草稿"}]},{name:"orderBy",required:!1,type:"string",description:"排序",options:[{value:"id_asc",label:"ID 升序"},{value:"id_desc",label:"ID 降序"},{value:"title_asc",label:"标题 升序"},{value:"title_desc",label:"标题 降序"},{value:"status_asc",label:"状态 升序"},{value:"status_desc",label:"状态 降序"}]},{name:"recPerPage",required:!1,type:"number",description:"每页数量,不超过1000"},{name:"pageID",required:!1,type:"number",description:"页码,从第1页开始"},{name:"filters",required:!1,type:"array",description:"搜索条件数组,每项包含 field/operator/value/join/group;field 必须是该接口支持的搜索字段,operator 使用该接口搜索配置支持的操作符。支持搜索字段:title(需求名称,示例:关键字);id(编号,示例:1);keywords(关键词,示例:关键字);status(当前状态,枚举:draft 草稿 | reviewing 评审中 | active 激活 | changing 变更中 | closed 已关闭);pri(优先级,枚举:1 | 2 | 3 | 4);module(所属模块,示例:all);stage(所处阶段,枚举:wait 未开始 | planned 已计划 | projected 研发立项 | designing 设计中 | designed 设计完毕 | developing 研发中 | developed 研发完毕 | testing 测试中 | tested 测试完毕 | verified 已验收 | rejected 验收失败 | delivering 交付中 | delivered 已交付 | released 已发布 | closed 已关闭);product(所属产品,示例:all);branch(branch,示例:all);grade(需求层级,示例:all);plan(所属计划,示例:all);estimate(预计小时,示例:关键字);source(来源,枚举:customer 客户 | user 用户 | po 产品经理 | market 市场 | service 客服 | operation 运营 | support 技术支持 | competitor 竞争对手 | partner 合作伙伴 | dev 开发人员 | tester 测试人员 | bug Bug | forum 论坛 | other 其他);sourceNote(来源备注,示例:关键字);fromBug(来源Bug,示例:关键字);category(类别,枚举:feature 功能 | interface 接口 | performance 性能 | safe 安全 | experience 体验 | improve 改进 | other 其他);openedBy(由谁创建,用户,示例:admin);reviewedBy(已评审人,用户,示例:admin);result(评审结果,枚举:pass 确认通过 | revert 撤销变更 | clarify 有待明确 | reject 拒绝);assignedTo(指派给,用户,示例:admin);closedBy(由谁关闭,用户,示例:admin);lastEditedBy(最后修改,用户,示例:admin);mailto(抄送给,用户,示例:admin);closedReason(关闭原因,枚举:done 已完成 | subdivided 已拆分 | duplicate 重复 | postponed 延期 | willnotdo 不做 | cancel 已取消 | bydesign 设计如此);version(版本号,示例:关键字);openedDate(创建日期,示例:2026-01-01);reviewedDate(评审时间,示例:2026-01-01);assignedDate(指派日期,示例:2026-01-01);closedDate(关闭日期,示例:2026-01-01);lastEditedDate(最后修改日期,示例:2026-01-01);activatedDate(激活日期,示例:2026-01-01)",style:"deepObject",explode:!0},{name:"groupJoin",required:!1,type:"string",description:"条件组之间的连接方式",options:[{value:"and",label:"and"},{value:"or",label:"or"}]}]},{name:"requirements",display:"指派给我的用户需求",type:"list",method:"get",path:"/my/requirements",resultType:"list",pagerGetter:"pager",resultGetter:"requirements",params:[{name:"browseType",required:!1,type:"string",description:"状态,默认是allstory",defaultValue:"allstory",options:[{value:"allstory",label:"全部"},{value:"assignedtome",label:"指派给我"},{value:"openedbyme",label:"我创建"},{value:"reviewbyme",label:"待我评审"},{value:"draftstory",label:"草稿"}]},{name:"orderBy",required:!1,type:"string",description:"排序",options:[{value:"id_asc",label:"ID 升序"},{value:"id_desc",label:"ID 降序"},{value:"title_asc",label:"标题 升序"},{value:"title_desc",label:"标题 降序"},{value:"status_asc",label:"状态 升序"},{value:"status_desc",label:"状态 降序"}]},{name:"recPerPage",required:!1,type:"number",description:"每页数量,不超过1000"},{name:"pageID",required:!1,type:"number",description:"页码,从第1页开始"},{name:"filters",required:!1,type:"array",description:"搜索条件数组,每项包含 field/operator/value/join/group;field 必须是该接口支持的搜索字段,operator 使用该接口搜索配置支持的操作符。支持搜索字段:title(需求名称,示例:关键字);id(编号,示例:1);keywords(关键词,示例:关键字);status(当前状态,枚举:draft 草稿 | reviewing 评审中 | active 激活 | changing 变更中 | closed 已关闭);pri(优先级,枚举:1 | 2 | 3 | 4);module(所属模块,示例:all);stage(所处阶段,枚举:wait 未开始 | planned 已计划 | projected 研发立项 | designing 设计中 | designed 设计完毕 | developing 研发中 | developed 研发完毕 | testing 测试中 | tested 测试完毕 | verified 已验收 | rejected 验收失败 | delivering 交付中 | delivered 已交付 | released 已发布 | closed 已关闭);product(所属产品,示例:all);branch(branch,示例:all);grade(需求层级,示例:all);plan(所属计划,示例:all);estimate(预计小时,示例:关键字);source(来源,枚举:customer 客户 | user 用户 | po 产品经理 | market 市场 | service 客服 | operation 运营 | support 技术支持 | competitor 竞争对手 | partner 合作伙伴 | dev 开发人员 | tester 测试人员 | bug Bug | forum 论坛 | other 其他);sourceNote(来源备注,示例:关键字);fromBug(来源Bug,示例:关键字);category(类别,枚举:feature 功能 | interface 接口 | performance 性能 | safe 安全 | experience 体验 | improve 改进 | other 其他);openedBy(由谁创建,用户,示例:admin);reviewedBy(已评审人,用户,示例:admin);result(评审结果,枚举:pass 确认通过 | revert 撤销变更 | clarify 有待明确 | reject 拒绝);assignedTo(指派给,用户,示例:admin);closedBy(由谁关闭,用户,示例:admin);lastEditedBy(最后修改,用户,示例:admin);mailto(抄送给,用户,示例:admin);closedReason(关闭原因,枚举:done 已完成 | subdivided 已拆分 | duplicate 重复 | postponed 延期 | willnotdo 不做 | cancel 已取消 | bydesign 设计如此);version(版本号,示例:关键字);openedDate(创建日期,示例:2026-01-01);reviewedDate(评审时间,示例:2026-01-01);assignedDate(指派日期,示例:2026-01-01);closedDate(关闭日期,示例:2026-01-01);lastEditedDate(最后修改日期,示例:2026-01-01);activatedDate(激活日期,示例:2026-01-01)",style:"deepObject",explode:!0},{name:"groupJoin",required:!1,type:"string",description:"条件组之间的连接方式",options:[{value:"and",label:"and"},{value:"or",label:"or"}]}]},{name:"testtasks",display:"我负责的的测试单",type:"list",method:"get",path:"/my/testtasks",resultType:"list",pagerGetter:"pager",resultGetter:"testtasks",params:[{name:"browseType",required:!1,type:"string",description:"状态,默认是all",defaultValue:"all",options:[{value:"all",label:"全部"},{value:"wait",label:"未开始"},{value:"doing",label:"进行中"},{value:"done",label:"已完成"}]},{name:"orderBy",required:!1,type:"string",description:"排序",options:[{value:"id_asc",label:"ID 升序"},{value:"id_desc",label:"ID 降序"},{value:"name_asc",label:"名称 升序"},{value:"name_desc",label:"名称 降序"},{value:"status_asc",label:"状态 升序"},{value:"status_desc",label:"状态 降序"}]},{name:"recPerPage",required:!1,type:"number",description:"每页数量,不超过1000"},{name:"pageID",required:!1,type:"number",description:"页码,从第1页开始"}]},{name:"projects",display:"我参与的项目",type:"list",method:"get",path:"/my/projects",resultType:"list",pagerGetter:"pager",resultGetter:"projects",params:[{name:"browseType",required:!1,type:"string",description:"状态,默认是all",defaultValue:"all",options:[{value:"all",label:"全部"},{value:"undone",label:"未完成"},{value:"wait",label:"未开始"},{value:"doing",label:"进行中"}]},{name:"orderBy",required:!1,type:"string",description:"排序",options:[{value:"id_asc",label:"ID 升序"},{value:"id_desc",label:"ID 降序"},{value:"name_asc",label:"名称 升序"},{value:"name_desc",label:"名称 降序"},{value:"status_asc",label:"状态 升序"},{value:"status_desc",label:"状态 降序"}]},{name:"recPerPage",required:!1,type:"number",description:"每页数量,不超过1000"},{name:"pageID",required:!1,type:"number",description:"页码,从第1页开始"}]},{name:"feedbacks",display:"指派给我的反馈",type:"list",method:"get",path:"/my/feedbacks",resultType:"list",pagerGetter:"pager",resultGetter:"feedbacks",params:[{name:"browseType",required:!1,type:"string",description:"状态,默认是all",defaultValue:"all",options:[{value:"all",label:"全部"},{value:"wait",label:"待处理"},{value:"doing",label:"处理中"},{value:"toclosed",label:"待关闭"}]},{name:"orderBy",required:!1,type:"string",description:"排序",options:[{value:"id_asc",label:"ID 升序"},{value:"id_desc",label:"ID 降序"},{value:"title_asc",label:"标题 升序"},{value:"title_desc",label:"标题 降序"},{value:"status_asc",label:"状态 升序"},{value:"status_desc",label:"状态 降序"}]},{name:"recPerPage",required:!1,type:"number",description:"每页数量,不超过1000"},{name:"pageID",required:!1,type:"number",description:"页码,从第1页开始"},{name:"filters",required:!1,type:"array",description:"搜索条件数组,每项包含 field/operator/value/join/group;field 必须是该接口支持的搜索字段,operator 使用该接口搜索配置支持的操作符。支持搜索字段:activatedBy,activatedDate,assignedTo,closedBy,closedDate,closedReason,desc,feedbackBy,id,keywords,mailto,module,notifyEmail,openedBy,openedDate,pri,processedBy,processedDate,product,public,reviewedBy,solution,source,status,title,type",style:"deepObject",explode:!0},{name:"groupJoin",required:!1,type:"string",description:"条件组之间的连接方式",options:[{value:"and",label:"and"},{value:"or",label:"or"}]}]},{name:"tickets",display:"指派给我的工单",type:"list",method:"get",path:"/my/tickets",resultType:"list",pagerGetter:"pager",resultGetter:"tickets",params:[{name:"browseType",required:!1,type:"string",description:"状态,默认是all",defaultValue:"all",options:[{value:"all",label:"全部"},{value:"unclosed",label:"未关闭"},{value:"wait",label:"待处理"},{value:"doing",label:"处理中"},{value:"done",label:"待关闭"}]},{name:"orderBy",required:!1,type:"string",description:"排序",options:[{value:"id_asc",label:"ID 升序"},{value:"id_desc",label:"ID 降序"},{value:"title_asc",label:"标题 升序"},{value:"title_desc",label:"标题 降序"},{value:"status_asc",label:"状态 升序"},{value:"status_desc",label:"状态 降序"}]},{name:"recPerPage",required:!1,type:"number",description:"每页数量,不超过1000"},{name:"pageID",required:!1,type:"number",description:"页码,从第1页开始"},{name:"filters",required:!1,type:"array",description:"搜索条件数组,每项包含 field/operator/value/join/group;field 必须是该接口支持的搜索字段,operator 使用该接口搜索配置支持的操作符。支持搜索字段:activatedBy,activatedCount,activatedDate,assignedTo,closedBy,closedDate,closedReason,contact,customer,deadline,desc,editedBy,editedDate,feedback,id,keywords,mailto,module,notifyEmail,openedBuild,openedBy,openedDate,pri,product,resolution,resolvedBy,resolvedDate,startedBy,startedDate,status,title,type",style:"deepObject",explode:!0},{name:"groupJoin",required:!1,type:"string",description:"条件组之间的连接方式",options:[{value:"and",label:"and"},{value:"or",label:"or"}]}]},{name:"testcases",display:"指派给我的用例",type:"list",method:"get",path:"/my/testcases",resultType:"list",pagerGetter:"pager",resultGetter:"testcases",params:[{name:"browseType",required:!1,type:"string",description:"状态,默认是all",defaultValue:"all",options:[{value:"all",label:"全部"},{value:"wait",label:"未执行"},{value:"doing",label:"执行中"},{value:"pass",label:"通过"},{value:"fail",label:"失败"}]},{name:"orderBy",required:!1,type:"string",description:"排序",options:[{value:"id_asc",label:"ID 升序"},{value:"id_desc",label:"ID 降序"},{value:"title_asc",label:"标题 升序"},{value:"title_desc",label:"标题 降序"},{value:"status_asc",label:"状态 升序"},{value:"status_desc",label:"状态 降序"}]},{name:"recPerPage",required:!1,type:"number",description:"每页数量,不超过1000"},{name:"pageID",required:!1,type:"number",description:"页码,从第1页开始"},{name:"filters",required:!1,type:"array",description:"搜索条件数组,每项包含 field/operator/value/join/group;field 必须是该接口支持的搜索字段,operator 使用该接口搜索配置支持的操作符。支持搜索字段:title(用例名称,示例:关键字);story(关联需求,示例:all);id(用例编号,示例:1);keywords(关键词,示例:关键字);lastEditedBy(修改者,用户,示例:admin);type(用例类型,枚举:unit 单元测试 | interface 接口测试 | feature 功能测试 | install 安装部署 | config 配置相关 | performance 性能测试 | security 安全相关 | other 其他);auto(自动化,枚举:auto 是 | no 否);openedBy(由谁创建,用户,示例:admin);status(用例状态,枚举:wait 待评审 | normal 正常 | blocked 被阻塞 | investigate 研究中);product(所属产品,示例:all);branch(branch,示例:all);stage(适用环节,枚举:unittest 单元测试环节 | feature 功能测试环节 | intergrate 集成测试环节 | system 系统测试环节 | smoke 冒烟测试环节 | bvt 版本验证环节);module(所属模块,模块,示例:0);pri(优先级,枚举:3 | 1 | 2 | 4);lib(所属库,示例:all);lastRunner(执行人,用户,示例:admin);lastRunResult(结果,枚举:pass 通过 | fail 失败 | blocked 阻塞 | null 未执行);lastRunDate(执行时间,示例:2026-01-01);openedDate(创建日期,示例:2026-01-01);lastEditedDate(修改日期,示例:2026-01-01);scene(所属场景,示例:all)",style:"deepObject",explode:!0},{name:"groupJoin",required:!1,type:"string",description:"条件组之间的连接方式",options:[{value:"and",label:"and"},{value:"or",label:"or"}]}]},{name:"meetings",display:"我的会议",type:"list",method:"get",path:"/my/meetings",resultType:"list",pagerGetter:"pager",resultGetter:"meetings",params:[{name:"browseType",required:!1,type:"string",description:"状态,默认是futureMeeting",defaultValue:"futureMeeting",options:[{value:"futureMeeting",label:"我参加的(未开始)"},{value:"all",label:"全部"},{value:"booked",label:"我预约的"},{value:"participate",label:"我参加的(全部)"}]},{name:"orderBy",required:!1,type:"string",description:"排序",options:[{value:"id_asc",label:"ID 升序"},{value:"id_desc",label:"ID 降序"},{value:"name_asc",label:"名称 升序"},{value:"name_desc",label:"名称 降序"},{value:"date_asc",label:"日期 升序"},{value:"date_desc",label:"日期 降序"}]},{name:"recPerPage",required:!1,type:"number",description:"每页数量,不超过1000"},{name:"pageID",required:!1,type:"number",description:"页码,从第1页开始"}]},{name:"issues",display:"指派给我的问题",type:"list",method:"get",path:"/my/issues",resultType:"list",params:[{name:"browseType",required:!1,type:"string",description:"状态,默认是all",defaultValue:"all",options:[{value:"all",label:"全部"},{value:"open",label:"开放"},{value:"assignto",label:"指派给我"},{value:"assignby",label:"由我指派"},{value:"closed",label:"已关闭"},{value:"resolved",label:"已解决"},{value:"canceled",label:"已取消"}]},{name:"orderBy",required:!1,type:"string",description:"排序",options:[{value:"id_asc",label:"ID 升序"},{value:"id_desc",label:"ID 降序"},{value:"title_asc",label:"标题 升序"},{value:"title_desc",label:"标题 降序"},{value:"severity_asc",label:"严重程度 升序"},{value:"severity_desc",label:"严重程度 降序"},{value:"status_asc",label:"状态 升序"},{value:"status_desc",label:"状态 降序"}]},{name:"recPerPage",required:!1,type:"number",description:"每页数量,不超过1000"},{name:"pageID",required:!1,type:"number",description:"页码,从第1页开始"}],resultGetter:"issues"},{name:"risks",display:"指派给我的风险",type:"list",method:"get",path:"/my/risks",resultType:"list",params:[{name:"browseType",required:!1,type:"string",description:"状态,默认是all",defaultValue:"all",options:[{value:"all",label:"全部"},{value:"active",label:"开放"},{value:"assignTo",label:"指派给我"},{value:"assignBy",label:"由我指派"},{value:"closed",label:"已关闭"},{value:"hangup",label:"已挂起"},{value:"canceled",label:"已取消"}]},{name:"orderBy",required:!1,type:"string",description:"排序",options:[{value:"id_asc",label:"ID 升序"},{value:"id_desc",label:"ID 降序"},{value:"name_asc",label:"名称 升序"},{value:"name_desc",label:"名称 降序"},{value:"status_asc",label:"状态 升序"},{value:"status_desc",label:"状态 降序"},{value:"pri_asc",label:"优先级 升序"},{value:"pri_desc",label:"优先级 降序"}]},{name:"recPerPage",required:!1,type:"number",description:"每页数量,不超过1000"},{name:"pageID",required:!1,type:"number",description:"页码,从第1页开始"},{name:"filters",required:!1,type:"array",description:"搜索条件数组,每项包含 field/operator/value/join/group;field 必须是该接口支持的搜索字段,operator 使用该接口搜索配置支持的操作符。支持搜索字段:activateBy,actualClosedDate,assignedTo,cancelBy,category,createdBy,createdDate,editedBy,editedDate,hangupBy,id,identifiedDate,impact,name,plannedClosedDate,prevention,pri,probability,project,rate,remedy,resolution,resolvedBy,source,status,strategy,trackedBy",style:"deepObject",explode:!0},{name:"groupJoin",required:!1,type:"string",description:"条件组之间的连接方式",options:[{value:"and",label:"and"},{value:"or",label:"or"}]}],resultGetter:"risks"}]}];var zW={list:"get",get:"get",create:"post",update:"put",delete:"delete",action:"post"},EW={list:"list",get:"object",create:"object",update:"object",delete:"text",action:"text"},mD=MW(RW()),FB=UB(mD);function R(D){if(Array.isArray(D))return D.map((B)=>R(B));if(D&&typeof D==="object"&&!(D instanceof Function)){let B={};for(let[W,Q]of Object.entries(D))B[W]=R(Q);return B}return D}function cD(D,B){if(!j(B))return B===void 0?D:R(B);let W=j(D)?{...D}:{};for(let[Q,$]of Object.entries(B)){if($===void 0)continue;let X=W[Q];W[Q]=j($)&&j(X)?cD(X,$):R($)}return W}function RW(){return R(PB)}function uD(D){if(D===null||typeof D!=="object")return D;if(Object.isFrozen(D))return D;for(let B of Object.keys(D))uD(D[B]);return Object.freeze(D)}function SW(D){if(D.method===void 0){let B=zW[D.type];if(B===void 0)throw new q("E_INDETERMINATE_ACTION_METHOD",{action:String(D.name),type:String(D.type)});D.method=B}if(D.resultType===void 0){let B=EW[D.type];if(B===void 0)throw new q("E_INDETERMINATE_ACTION_RESULT_TYPE",{action:String(D.name),type:String(D.type)});D.resultType=B}return D}function YD(D){return uD(SW(D))}function k(D){return D.actions.forEach(YD),uD(D)}function MW(D){return D.forEach(k),D}function VD(D,B){let W=B.toLowerCase();return D.findIndex((Q)=>String(Q.name).toLowerCase()===W)}function NW(D,B){let W=D.slice();for(let Q of B){let $=VD(W,String(Q.name)),X=YD(R(Q));if($>=0)W[$]=X;else W.push(X)}return W}function ZB(D,B){return k({...D,...R(B),actions:NW(D.actions,B.actions)})}function UB(D){return new Map(D.map((B)=>[B.name.toLowerCase(),B]))}function zB(D){if(!D||typeof D.name!=="string"||!Array.isArray(D.actions))throw new q("E_INVALID_MODULE_DEFINITION")}function pD(D){if(!D||typeof D.name!=="string"||typeof D.path!=="string")throw new q("E_INVALID_ACTION_DEFINITION");if(D.method!==void 0&&typeof D.method!=="string")throw new q("E_INVALID_ACTION_DEFINITION");if(D.resultType!==void 0&&typeof D.resultType!=="string")throw new q("E_INVALID_ACTION_DEFINITION")}function i(){return mD}function v(){return FB}function OD(){FB=UB(mD)}var TW;function EB(D){TW=D}function AD(D,B={}){let W=i();for(let Q of f(D)){zB(Q);let $=Q.name.toLowerCase(),X=W.findIndex((J)=>J.name.toLowerCase()===$);if(X>=0)W[X]=B.replace?k(R(Q)):ZB(W[X],Q);else W.push(k(R(Q)))}OD()}function s(D,B){let W=D.toLowerCase(),Q=v().get(W);if(!Q)throw new q("E_INVALID_MODULE",{module:D});let $=Q.actions.slice();for(let H of f(B)){pD(H);let L=VD($,String(H.name)),G=YD(R(H));if(L>=0)$[L]=G;else $.push(G)}let X=k({...Q,actions:$}),J=i(),Y=J.findIndex((H)=>H.name.toLowerCase()===W);J[Y]=X,OD()}function z(D,B,W){let Q=D.toLowerCase(),$=v().get(Q);if(!$)throw new q("E_INVALID_MODULE",{module:D});let X=$.actions.slice(),J=VD(X,B);if(J<0)throw new q("E_INVALID_ACTION",{module:D,action:B});let Y=X[J],H=typeof W==="function"?W(R(Y)):cD(Y,W);pD(H),X[J]=YD(H);let L=k({...$,actions:X}),G=i(),C=G.findIndex((I)=>I.name.toLowerCase()===Q);G[C]=L,OD()}var RB={product:"products",project:"projects",execution:"executions"},wW=new Set(Object.values(RB)),yW=["execution","project","product"];function xW(D){let{scope:B,scopeID:W}=D;if(!c(B)&&!c(W)){let Q=String(B);if(!wW.has(Q))throw new q("E_INVALID_PARAM",{param:"scope",value:Q});let $=Number(W);if(Number.isNaN($))throw new q("E_INVALID_PARAM",{param:"scopeID",value:String(W)});return{scope:Q,scopeID:$}}for(let Q of yW){let $=D[Q]??D[`${Q}ID`];if(c($))continue;let X=Number($);if(!Number.isNaN(X))return{scope:RB[Q],scopeID:X}}return}function fW(D,B){return D.path.replace(/\{(\w+)\}/g,(W,Q)=>{let $=B[Q];if(c($))throw new q("E_MISSING_PARAM",{param:Q});return String($)})}function hW(D){if(D===void 0)return;if(typeof D==="string")try{let B=JSON.parse(D);return j(B)?B:void 0}catch{return}return j(D)?D:void 0}var bW=new Set(["true","1","yes","on"]),kW=new Set(["false","0","no","off"]);function vW(D,B,W,Q=!1){if(D===void 0||D===null)return D;if(B==="number"||B==="integer"){let $=Number(D);return Number.isNaN($)?D:$}if(B==="boolean"){if(typeof D==="boolean")return D;if(typeof D==="number"){if(D===1)return!0;if(D===0)return!1;throw new q("E_INVALID_PARAM",{param:W,value:String(D)})}if(typeof D==="string"){let $=D.trim().toLowerCase();if(bW.has($))return!0;if(kW.has($))return!1;throw new q("E_INVALID_PARAM",{param:W,value:D})}throw new q("E_INVALID_PARAM",{param:W,value:String(D)})}if(B==="array"){if(Array.isArray(D))return D;if(typeof D==="string")return D.split(",");if(Q&&j(D))return D;return[D]}return D}function dW(D,B,W){let Q={},$=Object.keys(B.pathParams??{});if($.includes("scope")){let L=xW(W);if(!L)throw new q("E_MISSING_PARAM",{param:"scope/scopeID or product/project/execution"});Q.scope=L.scope,Q.scopeID=L.scopeID}let X=$.find((L)=>L.endsWith("ID")&&L!=="scopeID"),J=W.id??W[`${D.name}ID`]??(X?W[X]:void 0),Y=J===void 0?Number.NaN:Number(J),H=Number.isNaN(Y)?void 0:Y;if(X&&H!==void 0)Q[X]=H;for(let L of $){if(L==="scope"||L==="scopeID"||Q[L]!==void 0)continue;let G=B.pathParams?.[L],C=W[L];if(C!==void 0){Q[L]=C;continue}if(typeof G==="object"){if(G.defaultValue!==void 0)Q[L]=G.defaultValue;else if(G.options?.[0]?.value!==void 0)Q[L]=G.options[0].value}if(Q[L]===void 0)throw new q("E_MISSING_PARAM",{param:L})}return{values:Q,id:H}}function mW(D,B){let W={};for(let Q of D.params??[]){let $=B[Q.name];if($===void 0&&Q.name==="pageID")$=B.page;if($===void 0)$=Q.defaultValue;if($===void 0&&Q.required)throw new q("E_MISSING_PARAM",{param:Q.name});if($!==void 0)W[Q.name]=$}return W}function cW(D,B){let W=hW(B.data);if(D.requestBody?.schema?.type!=="object")return W;let Q=W?{...W}:{},$=D.requestBody.schema,X=new Set($.required??[]);for(let[J,Y]of Object.entries($.properties??{})){let H=Object.prototype.hasOwnProperty.call(Q,J),L=Object.prototype.hasOwnProperty.call(B,J),G=H?Q[J]:L?B[J]:Y.defaultValue;if(G===void 0&&(Y.required||X.has(J)))throw new q("E_MISSING_PARAM",{param:J});let C=vW(G,Y.type,J,H);if(C!==void 0)Q[J]=C}return Q}function SB(D,B,W={}){let Q=w(D.name,B);if(!Q)throw new q("E_INVALID_ACTION",{module:D.name,action:B});let{values:$,id:X}=dW(D,Q,W);return{module:D.name,action:Q,params:W,path:fW(Q,$),query:mW(Q,W),data:cW(Q,W),id:X}}function _D(D,B,W={},Q={}){let $=D.resultGetter;if(!$)return B.data??B;if(typeof $==="function")return $(B,W,Q);if(typeof $==="string")return U(B,$);let X={};for(let[J,Y]of Object.entries($))X[J]=U(B,Y);return X}function MB(D,B,W={},Q={}){let $=D.pagerGetter;if(!$)return B.pager;if(typeof $==="function")return $(B,W,Q);if(typeof $==="string")return U(B,$);let X=U(B,$.pageID),J=U(B,$.recPerPage),Y=U(B,$.recTotal);if(X===void 0||J===void 0||Y===void 0)return;return{pageID:Number(X),recPerPage:Number(J),recTotal:Number(Y)}}function P(D){return typeof D==="object"&&D!==null&&!Array.isArray(D)}function V(D){return P(D)?D:{}}function A(D,B=""){return typeof D==="string"?D:B}function uW(D){return typeof D==="number"&&Number.isFinite(D)?D:void 0}function E(D){return Array.isArray(D.children)?D.children.filter(n):[]}function n(D){return P(D)&&typeof D.flavour==="string"}function pW(D){let B=D;for(let W=0;W<3&&typeof B==="string";W+=1)try{B=JSON.parse(B)}catch(Q){let $=Q instanceof Error?Q.message:String(Q);throw TypeError(`Invalid BlockSuite snapshot JSON: ${$}`)}return B}function TB(D){let B=typeof D==="string"?pW(D):D;if(P(B)&&!n(B)&&"snapshot"in B)B=B.snapshot;if(Array.isArray(B)&&B.every(n))return{kind:"slice",blocks:B,documentLike:!1};if(P(B)&&n(B.blocks)){let W=B.blocks;return{kind:"doc",blocks:[W],root:W,meta:P(B.meta)?B.meta:void 0,documentLike:!0}}if(P(B)&&Array.isArray(B.content)){let W=B.content.filter(n);if(W.length!==B.content.length)throw TypeError("Invalid BlockSuite slice: content must contain blocks");return{kind:"slice",blocks:W,documentLike:!1}}if(n(B))return{kind:"block",blocks:[B],root:B,documentLike:B.flavour==="affine:page"};throw TypeError("Invalid BlockSuite snapshot: expected a DocSnapshot, BlockSnapshot, SliceSnapshot, or JSON string")}function NB(D,B,W,Q){if(D===void 0)return B;if(!Number.isInteger(D)||Number(D)<1||Number(D)>W)throw TypeError(`${Q} must be an integer between 1 and ${W}`);return Number(D)}function wB(D,B){let W=NB(B.maxDepth,256,1000,"maxDepth"),Q=NB(B.maxBlocks,50000,1e6,"maxBlocks"),$=new WeakSet,X=[];for(let Y=D.length-1;Y>=0;Y-=1){let H=D[Y];if(H)X.push({block:H,depth:1})}let J=0;while(X.length){let Y=X.pop();if(!Y)continue;if(Y.exit){$.delete(Y.block);continue}if($.has(Y.block))throw TypeError("Invalid BlockSuite snapshot: cyclic block children");if(J+=1,J>Q)throw RangeError(`BlockSuite snapshot exceeds maxBlocks (${Q})`);if(Y.depth>W)throw RangeError(`BlockSuite snapshot exceeds maxDepth (${W})`);$.add(Y.block),X.push({...Y,exit:!0});let H=E(Y.block);for(let L=H.length-1;L>=0;L-=1){let G=H[L];if(G)X.push({block:G,depth:Y.depth+1})}}}function gD(D){if(Array.isArray(D))return D.filter(P);if(P(D)&&Array.isArray(D.delta))return D.delta.filter(P);if(typeof D==="string")return[{insert:D}];return[]}function yB(D){return gD(D).map((B)=>typeof B.insert==="string"?B.insert:"").join("")}function xB(D){let B=D.root;if(B?.flavour==="affine:page"){let Q=gD(V(B.props).title);if(Q.length>0)return Q}let W=D.meta?.title;return typeof W==="string"?[{insert:W}]:[]}function y(D,B="link"){if(typeof D!=="string")return"";let W=D.trim().replace(/[\u0000-\u001F\u007F]/g,"");if(!W)return"";if(W.startsWith("/")||W.startsWith("./")||W.startsWith("../")||W.startsWith("#")||W.startsWith("?"))return W;let Q=/^([a-z][a-z\d+.-]*):/i.exec(W)?.[1]?.toLowerCase();if(!Q)return W;if(["http","https","mailto","tel","blob"].includes(Q))return W;if(B==="image"&&Q==="data"&&/^data:image\//i.test(W))return W;return""}function iD(D,B,W){let Q=V(B.props),$=A(Q.sourceId);if(!$)return"";let X=D.resolveAssetUrl?.($,B,W);return y(X,W==="image"?"image":"link")}function fB(D,B){let W=A(V(B.props).src);if(!W)return"";let Q=D.resolveZuiImageUrl?D.resolveZuiImageUrl(W,B):W;return y(Q,"image")}function iW(D,B){let W=new URLSearchParams;for(let[$,X]of Object.entries(B)){if(X===void 0||X===null||X==="")continue;if(Array.isArray(X)){let J=X.filter((Y)=>["string","number","boolean"].includes(typeof Y));if(J.length)W.set($,J.join(","))}else if(["string","number","boolean"].includes(typeof X))W.set($,String(X))}let Q=W.toString();if(!Q)return D;return`${D}${D.includes("?")?"&":"?"}${Q}`}function HD(D,B,W){let Q=D.resolveDocLink?.(B,W);if(Q!==void 0)return y(Q);let $=D.docLinkBaseUrl?.replace(/\/$/,"");if(!$)return"";return y(iW(`${$}/${encodeURIComponent(B.pageId)}`,B.params))}function hB(D){let B=uW(D)??0;if(B===0)return"0 B";let W=["B","kB","MB","GB","TB"],Q=Math.min(Math.floor(Math.log(Math.abs(B))/Math.log(1024)),W.length-1),$=B/1024**Q;return`${$>=10||Q===0?$.toFixed(0):$.toFixed(1)} ${W[Q]}`}function bB(D){return V(D.props).displayMode==="edgeless"}function kB(D){return typeof D==="string"?D.trim().replace(/[^a-z\d_+#.-]/gi,"").slice(0,50):""}function PD(D){return A(D).replace(/\$/g,"\\$").replace(/</g,"\\lt{}").replace(/>/g,"\\gt{}").replace(/(\]\(\s*)([^)\s]*)/gi,(B,W,Q)=>{let $=Q.replace(/&#x([\da-f]+);/gi,(X,J)=>{let Y=Number.parseInt(J,16);return Y<=127?String.fromCharCode(Y):""}).replace(/&#(\d+);/g,(X,J)=>{let Y=Number.parseInt(J,10);return Y<=127?String.fromCharCode(Y):""}).replace(/:/gi,":").replace(/[\u0000-\u0020\u007f]/g,"").toLowerCase();if(!/^(?:javascript|vbscript|data):/.test($))return B;return`${W}${Q.replace(/:|&(?:#0*58|#x0*3a|colon);/i,"%3A")}`})}function sW(D){return D.replace(/\\/g,"\\\\").replace(/([`*_[\]<>|~])/g,"\\$1").replace(/(^|\n)([ \t]*)([#>+-]|\d+[.)])(?=\s)/g,"$1$2\\$3")}function nW(D){return D.replace(/\\/g,"%5C").replace(/ /g,"%20").replace(/\(/g,"%28").replace(/\)/g,"%29").replace(/</g,"%3C").replace(/>/g,"%3E")}function tW(D){let B=D.replace(/\n/g," "),W=B.match(/`+/g)??[],Q="`".repeat(Math.max(1,...W.map((X)=>X.length+1))),$=B.startsWith("`")||B.endsWith("`")||B.startsWith(" ")&&B.endsWith(" ")&&B.trim().length>0;return`${Q}${$?" ":""}${B}${$?" ":""}${Q}`}function lW(D){let B=V(D.attributes?.mention);if(!Object.keys(B).length)return;let W=A(B.label)||A(B.name);return W?`@${W}`:void 0}function rW(D){let B=V(D.attributes?.reference),W=A(B.pageId);if(!W)return;return{pageId:W,params:V(B.params)}}function aW(D,B,W){if(typeof D.insert!=="string")return"";let Q=V(D.attributes),$=lW(D),X=A(Q.latex),J=rW(D),Y=A(Q.link),H=$??D.insert,L=!J&&(H===""||H===Y);if(!J&&H===""&&Y)H=Y;let G;if(J)G=B.resolveDocTitle?.(J.pageId),H=G||H.trim()||J.pageId;if(X)return`$${PD(X)}$`;let C=Q.code?tW(H):sW(H);if(Q.bold)C=`**${C}**`;if(Q.italic)C=`*${C}*`;if(Q.strike)C=`~~${C}~~`;if(Q.underline)C=`\\<u>${C}\\</u>`;let I=y(Y);if(J)I=HD(B,{...J,title:G},W);if(I){if(!L)C=`[${C}](${nW(I)})`}return C}function S(D,B,W){return gD(D).map((Q)=>aW(Q,B,W)).join("")}var oW=new Set(["affine:surface","affine:zui-layout","affine:zui-layout-cell","affine:zui-panel"]),eW=new Set(["affine:bookmark","affine:embed-figma","affine:embed-github","affine:embed-loom","affine:embed-youtube"]);function dB(D){return D.replace(/^\n+|\n+$/g,"")}function mB(D){return D.replace(/[ \t]+$/gm,(B)=>B.length>=2?B:"")}function t(D){return D.map(dB).filter(Boolean).join(`
|
|
11
|
+
|
|
12
|
+
`)}function D2(D){return D.replace(/(^|[^\\])\|/g,"$1\\|").replace(/\r?\n/g,"<br>")}function _(D,B,W){return S(A(D),B.options,W)}function M(D,B="link"){return y(D,B).replace(/\\/g,"%5C").replace(/ /g,"%20").replace(/\(/g,"%28").replace(/\)/g,"%29").replace(/</g,"%3C").replace(/>/g,"%3E")}function sD(D){if(!D.length)return"";let B=Math.max(...D.map((Y)=>Y.length),0);if(!B)return"";let W=D.map((Y)=>Array.from({length:B},(H,L)=>D2(Y[L]??""))),Q=Array.from({length:B},(Y,H)=>Math.max(3,...W.map((L)=>L[H]?.length??0))),$=(Y)=>`| ${Y.map((H,L)=>H.padEnd(Q[L]??3)).join(" | ")} |`,X=W[0]??[],J=Q.map((Y)=>"-".repeat(Y));return[$(X),$(J),...W.slice(1).map($)].join(`
|
|
13
|
+
`)}function FD(D){let B=Math.max(0,...(D.match(/`+/g)??[]).map((W)=>W.length));return"`".repeat(Math.max(3,B+1))}function B2(D,B){let W=" ".repeat(B);return D.split(`
|
|
6
14
|
`).map((Q)=>Q?`${W}${Q}`:Q).join(`
|
|
7
|
-
`)}function
|
|
15
|
+
`)}function W2(D){return dB(D).split(`
|
|
8
16
|
`).map((W)=>{if(!W)return W;return W.startsWith(" ")?`  ${W.slice(6)}`:`  ${W}`}).join(`
|
|
9
|
-
`)}function
|
|
10
|
-
`),
|
|
11
|
-
${
|
|
12
|
-
`)}`;let
|
|
13
|
-
${
|
|
14
|
-
`)}function
|
|
17
|
+
`)}function Q2(D,B){let W=A(V(D[0]?.props).type,"bulleted");return D.map((Q,$)=>{let X=V(Q.props),J=W==="numbered"?`${$+1}.`:"*",Y=W==="todo"?`[${X.checked?"x":" "}] `:"",L=mB(S(X.text,B.options,Q)).split(`
|
|
18
|
+
`),G=`${J} ${Y}${L[0]??""}`,C=" ".repeat(J.length+1);if(L.length>1)G+=`
|
|
19
|
+
${L.slice(1).map((K)=>`${C}${K}`).join(`
|
|
20
|
+
`)}`;let I=N(E(Q),B);if(I)G+=`
|
|
21
|
+
${B2(I,J.length+1)}`;return G}).join(`
|
|
22
|
+
`)}function vB(D,B){let W=V(D.data),Q=Array.isArray(W.options)?W.options.filter(P):[];return A(Q.find(($)=>$.id===B)?.value)}function $2(D,B,W,Q){let $=A(B.id),X=V(W[A(D.id)]),Y=V(X[$]).value;switch(B.type){case"title":return S(V(D.props).text,Q.options,D);case"rich-text":return S(Y,Q.options,D);case"date":{let H=new Date(typeof Y==="number"?Y:Number.NaN);if(Number.isNaN(H.getTime()))return"";let L=H.getFullYear(),G=String(H.getMonth()+1).padStart(2,"0"),C=String(H.getDate()).padStart(2,"0");return`${L}-${G}-${C}`}case"select":return _(vB(B,Y),Q,D);case"multi-select":return _(Array.isArray(Y)?Y.map((H)=>vB(B,H)).filter(Boolean).join(","):"",Q,D);case"checkbox":return _(Y===void 0?"":String(Y),Q,D);default:return _(Y===void 0||Y===null?"":String(Y),Q,D)}}function X2(D,B){let W=V(D.props),Q=Array.isArray(W.columns)?W.columns.filter(P):[],$=V(W.cells),X=E(D),J=[Q.map((H)=>_(H.name,B,D)),...X.map((H)=>Q.map((L)=>$2(H,L,$,B)))],Y=S(W.title,B.options,D);return t([Y?`##### ${Y}`:"",sD(J)])}function J2(D,B){let W=Array.isArray(V(D.props).rows)?V(D.props).rows.filter(P):[];return sD(W.map((Q)=>{return(Array.isArray(Q.cells)?Q.cells.filter(P):[]).map((X)=>S(X.text,B.options,D))}))}function Y2(D,B){let W=D.filter(P).map((Q)=>{let $=V(Q.props);if(Q.type==="heading"){let X=Math.min(6,Math.max(1,typeof $.depth==="number"?$.depth:2));return`${"#".repeat(X)} ${_($.text,B)}`}if(Q.type==="table"){let X=Array.isArray($.cols)?$.cols.filter(P):[],J=Array.isArray($.data)?$.data.filter(P):[];return sD([X.map((Y)=>_(Y.text??Y.name,B)),...J.map((Y)=>X.map((H)=>{let L=V(Y[A(H.name)]);return _(L.text,B)}))])}if(Q.type==="link"){let X=M($.href),J=_($.text,B)||X;return X?`[${J}](${X})`:J}return _($.text,B)});return t(W)}function H2(D,B){let W=V(D.props).content;if(typeof W==="string")return _(W,B,D);let Q=V(W),$=A(Q.html);if($){let C=FD($);return`${C}html
|
|
15
23
|
${$}
|
|
16
|
-
${
|
|
17
|
-
`).map((
|
|
18
|
-
`);let Y=E(
|
|
24
|
+
${C}`}let X=Array.isArray(Q.export)?Q.export:[];if(X.length)return Y2(X,B);let J=_(Q.title,B,D),Y=Q.fetcher,H=typeof Y==="string"?Y:V(Y).url,L=M(Q.exportUrl)||M(H),G=_(Q.component,B,D);return t([J?`##### ${J}`:"",G?`[Component: ${G}]`:"",L?`[${L}](${L})`:""])}function L2(D,B){let W=V(D.props),Q=M(W.url);if(!Q)return"";return`[${_(W.title,B,D)||Q}](${Q})`}function q2(D,B){let W=B.options.renderBlock;if(!W)return;return W(D,{format:"markdown",renderChildren:($)=>N($??E(D),B),renderInline:($)=>S($,B.options,D)})}function G2(D,B){let W=B.options.unknownBlock??"children";if(W==="throw")throw TypeError(`Unsupported BlockSuite block flavour: ${D.flavour}`);return W==="children"?N(E(D),B):""}function C2(D,B){let W=q2(D,B);if(W!==void 0)return W;let Q=V(D.props);if(D.flavour==="affine:page")return N(E(D),B);if(D.flavour==="affine:note")return bB(D)?"":N(E(D),B);if(oW.has(D.flavour))return N(E(D),B);switch(D.flavour){case"affine:paragraph":{let $=mB(S(Q.text,B.options,D)),X=A(Q.type,"text"),J=$;if(/^h[1-6]$/.test(X))J=`${"#".repeat(Number(X[1]))} ${$}`;else if(X==="quote")J=$.split(`
|
|
25
|
+
`).map((H)=>`> ${H}`.trimEnd()).join(`
|
|
26
|
+
`);let Y=N(E(D),B);return t([J,Y?W2(Y):""])}case"affine:code":{let $=yB(Q.text),X=FD($),J=kB(Q.language);return`${X}${J}
|
|
19
27
|
${$}
|
|
20
28
|
${X}`}case"affine:divider":return"***";case"affine:latex":return`$$
|
|
21
|
-
${
|
|
22
|
-
$$`;case"affine:image":{let $=
|
|
29
|
+
${PD(Q.latex)}
|
|
30
|
+
$$`;case"affine:image":{let $=iD(B.options,D,"image");if(!$)return"";return`})`}case"affine:zui-image":{let $=fB(B.options,D),X=S(A(Q.caption),B.options,D);return $?`})`:""}case"affine:attachment":{let $=_(A(Q.name,"Attachment"),B,D),X=iD(B.options,D,"attachment"),J=`**${$}**`,Y=X?`[${J}](${M(X)})`:J,H=_(Q.caption,B,D);return`${Y} (${hB(Q.size)}${H?`, ${H}`:""})`}case"affine:database":return X2(D,B);case"affine:zui-table":return J2(D,B);case"affine:zui-holder":return N(E(D),B);case"affine:zui-expand":return N(E(D),B);case"affine:embed-zui-whiteboard":{let $=y(Q.sceneImage,"image");if($)return`})`;return Q.sceneData?"[Whiteboard]":"[Empty Whiteboard]"}case"affine:embed-zui-custom":return H2(D,B);case"affine:embed-zui-html":{let $=A(Q.html);return $?`${FD($)}html
|
|
23
31
|
${$}
|
|
24
|
-
${
|
|
25
|
-
`:""}function iD(){R("execution","create",(D)=>{let B=D.requestBody.schema?.required;if(Array.isArray(B)&&!B.includes("products"))B.push("products");return D}),R("story","update",(D)=>{let B=D.requestBody.schema?.properties;if(B&&!B.plan)B.plan={type:"integer",description:"所属计划",format:"int32"};if(B&&B.category)B.category={type:"string",description:"类别"};return D}),R("task","list",(D)=>{return D.path="/executions/{executionID}/tasks",D.pathParams={executionID:"执行ID"},D}),[["product","create"],["product","update"],["execution","create"],["execution","update"]].forEach(([D,B])=>{R(D,B,(W)=>{let Q=W.requestBody.schema?.properties;if(Q.acl&&Q.acl.defaultValue===void 0)Q.acl.defaultValue="open";return W})}),R("execution","create",(D)=>{let B=D.requestBody.schema?.properties;if(B){if(!B.type)B.type={type:"string",description:"类型(sprint 迭代,敏捷项目用 | stage 阶段,瀑布/IPD 用 | kanban 看板)"};if(!B.attribute)B.attribute={type:"string",description:["阶段属性:mix - 综合(父阶段可挂不同类型子阶段)","request - 需求(不关联需求、不测、不构建、不导入 Bug)","design - 设计(不测、不构建、不 DevOps)","dev - 开发(功能完整,可需求、任务、测试、构建)","qa - 测试(同上,偏测试)","release - 发布(同上,偏发布)","review - 总结评审(最严:不关联需求、不测、不构建)","other - 其他(无上述专项限制)"].join(" | ")};if(!B.milestone)B.milestone={type:"integer",description:"是否里程碑(0 否| 1 是)",format:"int32"};if(!B.parent)B.parent={type:"integer",description:"父级项目",format:"int32"}}return D}),["create","update"].forEach((D)=>{R("task",D,(B)=>{let W=B.requestBody?.schema?.properties;if(W&&!W.parent)W.parent={type:"integer",description:"父任务",format:"int32"};return B})}),R("file","create",(D)=>{if(D.requestBody){D.requestBody.mediaType="multipart/form-data";let B=D.requestBody.schema?.properties;if(B?.file)B.file.format="binary"}return D}),R("bug","list",(D)=>{let W=D.params?.find((Q)=>Q.name==="browseType");if(W&&W.options?.length){let Q=W.options,$=Q.find((X)=>X.value==="assignedtome");if($)W.options=[...Q.filter((X)=>X!==$),{...$,value:"assigntome"}];if(!W.options.some((X)=>X.value==="resolvedbyme"))W.options=[...W.options,{value:"resolvedbyme",label:"由我解决"}]}return D}),R("doc","get",(D)=>{let B=D.resultGetter;return D.resultGetter=(W,Q,$={})=>{let X=B?AD({...D,resultGetter:B},W,Q,$):W.doc??W;if(!j(X))return X;let J=$.pick,Y=!J?.length,G=Y||J.includes("content"),q=Y||J.includes("rawContent");if(!G&&!q)return X;let H=X.content;try{if(q&&(X.rawContent===void 0||X.rawContent===""))X.rawContent=H;if(G&&X.contentType==="doc"){let L=fB(H);X.content=L}}catch{}return X},D})}var kB={user:{id:"用户编号",company:"所属公司",type:"用户类型",dept:"部门",account:"用户名",password:"密码",role:"职位",realname:"姓名",superior:"直属上级",pinyin:"姓名拼音",nickname:"昵称",commiter:"源代码帐号",avatar:"用户头像",birthday:"生日",gender:"性别",email:"邮箱",skype:"Skype",qq:"QQ",mobile:"手机",phone:"电话",weixin:"微信",dingding:"钉钉",slack:"Slack",whatsapp:"WhatsApp",address:"通讯地址",zipcode:"邮编",nature:"性格特征",analysis:"影响分析",strategy:"应对策略",join:"入职日期",visits:"访问次数",visions:"界面类型",ip:"最后IP",last:"最后登录",fails:"失败次数",locked:"锁住日期",feedback:"是否反馈用户",ranzhi:"ZDOO帐号",ldap:"LDAP账号",score:"积分",scoreLevel:"积分等级",resetToken:"重置密码令牌",resetExpired:"重置令牌过期时间",clientStatus:"登录状态",clientLang:"客户端语言",jira:"是否Jira导入用户",deleted:"(已删除)"},program:{id:"编号",project:"项目",isTpl:"是否模板",charter:"所属立项",model:"项目管理方式",type:"类型",category:"项目集类型",lifetime:"项目周期",budget:"预算",budgetUnit:"预算单位",attribute:"阶段类型",percent:"工作量占比",milestone:"里程碑",output:"输出",auth:"权限控制",storyType:"关联需求概念",parent:"父项目集",path:"路径",grade:"层级",name:"项目集名称",code:"项目代号",hasProduct:"是否关联产品",workflowGroup:"项目流程",begin:"计划开始",end:"计划完成",firstEnd:"启动时的计划完成日期",realBegan:"实际开始",realEnd:"实际完成",days:"可用工作日",schedule:"日程安排",status:"状态",subStatus:"子状态",pri:"优先级",desc:"项目集描述",version:"版本",parentVersion:"父版本",planDuration:"计划周期天数",realDuration:"实际周期天数",progress:"项目进度",estimate:"预计",left:"剩余工时",consumed:"消耗工时",teamCount:"总人数",market:"目标市场",openedBy:"创建者",openedDate:"创建时间",openedVersion:"创建版本",lastEditedBy:"最后编辑人",lastEditedDate:"最后编辑日期",closedBy:"由谁关闭",closedDate:"关闭日期",closedReason:"关闭原因",canceledBy:"由谁取消",canceledDate:"取消日期",suspendedDate:"暂停日期",PO:"项目负责人",PM:"负责人",QD:"测试负责人",RD:"发布负责人",team:"团队",acl:"访问控制",whitelist:"白名单",tplAcl:"模板访问控制",tplWhiteList:"模板白名单",order:"排序",stageBy:"阶段类型",displayCards:"每列最大卡片数",fluidBoard:"列宽度",multiple:"启用迭代",parallel:"是否允许并行",enabled:"是否启用阶段",linkType:"关联类型",taskDateLimit:"任务时间限制",colWidth:"列宽",minColWidth:"最小列宽",maxColWidth:"最大列宽",coverExecutionPriv:"执行权限控制",vision:"界面",frozen:"冻结状态",deleted:"已删除"},product:{id:"编号",program:"所属项目集",name:"产品名称",code:"产品代号",shadow:"是否影子产品",bind:"是否独立产品",line:"产品线",type:"产品类型",status:"状态",subStatus:"子状态",desc:"产品描述",PO:"产品负责人",QD:"测试负责人",RD:"发布负责人",feedback:"反馈负责人",ticket:"工单负责人",workflowGroup:"产品流程",acl:"访问控制",groups:"权限组",whitelist:"白名单",reviewer:"评审人",PMT:"规划负责人",draftEpics:"草稿业务需求",activeEpics:"激活业务需求",changingEpics:"变更中业务需求",reviewingEpics:"评审中业务需求",finishedEpics:"已完成业务需求",closedEpics:"已关闭业务需求",totalEpics:"业务需求数",draftRequirements:"草稿用户需求",activeRequirements:"激活用户需求",changingRequirements:"变更中用户需求",reviewingRequirements:"评审中用户需求",finishedRequirements:"已完成用户需求",closedRequirements:"已关闭用户需求",totalRequirements:"用户需求数",draftStories:"草稿软件需求",activeStories:"激活软件需求",changingStories:"变更中软件需求",reviewingStories:"评审中软件需求",finishedStories:"已完成软件需求",closedStories:"已关闭软件需求",totalStories:"软件需求数",unresolvedBugs:"未解决Bug",closedBugs:"关闭Bug",fixedBugs:"已修复Bug",totalBugs:"Bug总数",plans:"计划数",releases:"发布数",createdBy:"由谁创建",createdDate:"创建日期",createdVersion:"创建版本",closedDate:"关闭日期",order:"排序",vision:"所属界面",lineName:"产品线名称",programName:"项目集名称",programPM:"项目集负责人",finishClosedStories:"已关闭完成需求",launchedStories:"已立项需求",developingStories:"研发中需求",projects:"关联项目数",executions:"关联执行数",coverage:"覆盖率",latestRelease:"最新发布",latestReleaseDate:"最新发布时间",productLine:"产品线",testCaseCoverage:"用例覆盖率",epicCompleteRate:"史诗完成率",requirementCompleteRate:"用户需求完成率",storyCompleteRate:"用户故事完成率",bugFixedRate:"修复率",deleted:"已删除"},project:{id:"项目ID",project:"所属项目",isTpl:"是否模板",charter:"所属立项",model:"项目管理方式",type:"项目类型",category:"项目类型",lifetime:"项目周期",budget:"预算",budgetUnit:"(单位:)",attribute:"阶段类型",percent:"工作量占比",milestone:"里程碑",output:"输出",auth:"权限控制",storyType:"关联需求概念",parent:"所属项目集",path:"路径",grade:"层级",name:"项目名称",code:"项目代号",hasProduct:"是否关联产品",workflowGroup:"项目流程",begin:"计划开始",end:"计划完成",firstEnd:"启动时的计划完成日期",realBegan:"实际开始日期",realEnd:"实际完成日期",days:"可用工作日",schedule:"日程安排",status:"状态",subStatus:"子状态",pri:"优先级",desc:"项目描述",version:"版本",parentVersion:"父版本",planDuration:"计划周期天数",realDuration:"实际周期天数",progress:"进度",estimate:"预计",left:"剩余工时",consumed:"消耗工时",teamCount:"人数",market:"目标市场",openedBy:"由谁创建",openedDate:"创建日期",openedVersion:"创建版本",lastEditedBy:"最后编辑人",lastEditedDate:"最后编辑日期",closedBy:"由谁关闭",closedDate:"关闭日期",closedReason:"关闭原因",canceledBy:"由谁取消",canceledDate:"取消日期",suspendedDate:"暂停日期",PO:"项目负责人",PM:"负责人",QD:"测试负责人",RD:"发布负责人",team:"团队",acl:"访问控制",whitelist:"项目白名单",tplAcl:"模板访问控制",tplWhiteList:"模板白名单",order:"排序",stageBy:"阶段类型",displayCards:"每列最大卡片数",fluidBoard:"列宽度",multiple:"启用迭代",parallel:"是否允许并行",enabled:"是否启用阶段",linkType:"关联类型",taskDateLimit:"任务时间限制",colWidth:"列宽",minColWidth:"最小列宽",maxColWidth:"最大列宽",coverExecutionPriv:"执行权限控制",vision:"界面",frozen:"冻结状态",teamMembers:"团队成员",leftTasks:"剩余任务",statusTitle:"状态标题",consume:"消耗",surplus:"剩余",invested:"已投入",PMAvatar:"负责人头像",PMUserID:"负责人用户ID",storyCount:"需求条目数",storyPoints:"需求规模",executionCount:"执行数",from:"来源",actions:"操作",deliverable:"交付物",deleted:"已删除"},execution:{id:"迭代编号",project:"所属项目",isTpl:"是否模板",charter:"所属立项",model:"项目管理方式",type:"迭代类型",category:"项目类型",lifetime:"项目周期",budget:"预算",budgetUnit:"(单位:)",attribute:"阶段类型",percent:"工作量占比",milestone:"里程碑",output:"输出",auth:"权限控制",storyType:"关联需求概念",parent:"所属项目",path:"路径",grade:"层级",name:"迭代名称",code:"迭代代号",hasProduct:"是否关联产品",workflowGroup:"项目流程",begin:"计划开始",end:"计划完成",firstEnd:"启动时的计划完成日期",realBegan:"实际开始日期",realEnd:"实际完成日期",days:"可用工作日",schedule:"日程安排",status:"迭代状态",subStatus:"子状态",pri:"优先级",desc:"迭代描述",version:"版本",parentVersion:"父版本",planDuration:"计划周期天数",realDuration:"实际周期天数",progress:"进度",estimate:"预计",left:"剩余",consumed:"消耗",teamCount:"人数",market:"目标市场",openedBy:"由谁创建",openedDate:"创建日期",openedVersion:"创建版本",lastEditedBy:"最后编辑人",lastEditedDate:"最后编辑日期",closedBy:"由谁关闭",closedDate:"关闭日期",closedReason:"关闭原因",canceledBy:"由谁取消",canceledDate:"取消日期",suspendedDate:"暂停日期",PO:"产品负责人",PM:"迭代负责人",QD:"测试负责人",RD:"发布负责人",team:"团队成员",acl:"访问控制",whitelist:"白名单",tplAcl:"模板访问控制",tplWhiteList:"模板白名单",order:"迭代排序",stageBy:"阶段类型",displayCards:"每列最大卡片数",fluidBoard:"列宽度",multiple:"启用迭代",parallel:"是否允许并行",enabled:"是否启用阶段",linkType:"关联类型",taskDateLimit:"任务时间限制",colWidth:"列宽",minColWidth:"最小列宽",maxColWidth:"最大列宽",coverExecutionPriv:"执行权限控制",vision:"界面",frozen:"冻结状态",projectName:"所属项目",projectModel:"项目管理方式",productName:"产品名称",product:"相关产品",productID:"产品ID",delay:"延期",totalEstimate:"预计",totalConsumed:"消耗",totalLeft:"剩余",burns:"燃尽图",deleted:"已删除"},productplan:{id:"编号",product:"所属产品",branch:"平台/分支",parent:"父计划",title:"计划名称",status:"状态",desc:"描述",begin:"开始日期",end:"结束日期",finishedDate:"完成时间",closedDate:"关闭时间",order:"排序",closedReason:"关闭原因",createdBy:"由谁创建",createdDate:"创建时间",deleted:"已删除"},story:{id:"编号",parent:"父需求",isParent:"是父需求",root:"顶级需求ID",path:"路径",grade:"需求层级",product:"所属产品",branch:"平台/分支",module:"所属模块",plan:"所属计划",source:"来源",sourceNote:"来源备注",fromBug:"来源Bug",feedback:"相关反馈",title:"软件需求名称",keywords:"关键词",type:"需求类型",category:"类别",pri:"优先级",estimate:"预计工时",status:"当前状态",subStatus:"子状态",color:"标题颜色",stage:"所处阶段",stagedBy:"设置阶段者",mailto:"抄送给",lib:"所属需求库",fromStory:"来源需求",fromVersion:"来源版本",openedBy:"由谁创建",openedDate:"创建日期",assignedTo:"指派给",assignedDate:"指派日期",approvedDate:"评审日期",lastEditedBy:"最后修改",lastEditedDate:"最后修改日期",changedBy:"由谁变更",changedDate:"变更时间",reviewedBy:"已评审人",reviewedDate:"评审时间",releasedDate:"发布日期",closedBy:"由谁关闭",closedDate:"关闭日期",closedReason:"关闭原因",activatedDate:"激活日期",toBug:"转Bug",linkStories:"相关需求",linkRequirements:"相关用户需求",docs:"关联文档",twins:"孪生需求",duplicateStory:"重复需求",version:"版本号",parentVersion:"父需求版本",demandVersion:"需求池需求版本",storyChanged:"需求已变更",feedbackBy:"反馈者",notifyEmail:"通知邮箱",BSA:"BSA等级",duration:"管理周期",demand:"需求池需求",submitedBy:"提交评审人",roadmap:"所属路标",URChanged:"用需变更",unlinkReason:"移除原因",retractedReason:"撤销原因",retractedBy:"由谁撤回",retractedDate:"撤回日期",verifiedDate:"验收时间",vision:"所属界面",frozen:"冻结状态",deleted:"已删除"},epic:{id:"编号",parent:"父需求",isParent:"是父需求",root:"顶级需求ID",path:"路径",grade:"需求层级",product:"所属产品",branch:"平台/分支",module:"所属模块",plan:"所属计划",source:"来源",sourceNote:"来源备注",fromBug:"来源Bug",feedback:"相关反馈",title:"业务需求名称",keywords:"关键词",type:"需求类型",category:"类别",pri:"优先级",estimate:"预计工时",status:"当前状态",subStatus:"子状态",color:"标题颜色",stage:"所处阶段",stagedBy:"设置阶段者",mailto:"抄送给",lib:"所属需求库",fromStory:"来源需求",fromVersion:"来源版本",openedBy:"由谁创建",openedDate:"创建日期",assignedTo:"指派给",assignedDate:"指派日期",approvedDate:"评审日期",lastEditedBy:"最后修改",lastEditedDate:"最后修改日期",changedBy:"由谁变更",changedDate:"变更时间",reviewedBy:"已评审人",reviewedDate:"评审时间",releasedDate:"发布日期",closedBy:"由谁关闭",closedDate:"关闭日期",closedReason:"关闭原因",activatedDate:"激活日期",toBug:"转Bug",linkStories:"相关需求",linkRequirements:"相关用户需求",docs:"关联文档",twins:"孪生需求",duplicateStory:"重复需求",version:"版本号",parentVersion:"父需求版本",demandVersion:"需求池需求版本",storyChanged:"需求已变更",feedbackBy:"反馈者",notifyEmail:"通知邮箱",BSA:"BSA等级",duration:"管理周期",demand:"需求池需求",submitedBy:"提交评审人",roadmap:"所属路标",URChanged:"用需变更",unlinkReason:"移除原因",retractedReason:"撤销原因",retractedBy:"由谁撤回",retractedDate:"撤回日期",verifiedDate:"验收时间",vision:"所属界面",frozen:"冻结状态",deleted:"已删除"},requirement:{id:"编号",parent:"父需求",isParent:"是父需求",root:"顶级需求ID",path:"路径",grade:"需求层级",product:"所属产品",branch:"平台/分支",module:"所属模块",plan:"所属计划",source:"来源",sourceNote:"来源备注",fromBug:"来源Bug",feedback:"相关反馈",title:"用户需求名称",keywords:"关键词",type:"需求类型",category:"类别",pri:"优先级",estimate:"预计工时",status:"当前状态",subStatus:"子状态",color:"标题颜色",stage:"所处阶段",stagedBy:"设置阶段者",mailto:"抄送给",lib:"所属需求库",fromStory:"来源需求",fromVersion:"来源版本",openedBy:"由谁创建",openedDate:"创建日期",assignedTo:"指派给",assignedDate:"指派日期",approvedDate:"评审日期",lastEditedBy:"最后修改",lastEditedDate:"最后修改日期",changedBy:"由谁变更",changedDate:"变更时间",reviewedBy:"已评审人",reviewedDate:"评审时间",releasedDate:"发布日期",closedBy:"由谁关闭",closedDate:"关闭日期",closedReason:"关闭原因",activatedDate:"激活日期",toBug:"转Bug",linkStories:"相关需求",linkRequirements:"相关用户需求",docs:"关联文档",twins:"孪生需求",duplicateStory:"重复需求",version:"版本号",parentVersion:"父需求版本",demandVersion:"需求池需求版本",storyChanged:"需求已变更",feedbackBy:"反馈者",notifyEmail:"通知邮箱",BSA:"BSA等级",duration:"管理周期",demand:"需求池需求",submitedBy:"提交评审人",roadmap:"所属路标",URChanged:"用需变更",unlinkReason:"移除原因",retractedReason:"撤销原因",retractedBy:"由谁撤回",retractedDate:"撤回日期",verifiedDate:"验收时间",vision:"所属界面",frozen:"冻结状态",deleted:"已删除"},bug:{id:"Bug编号",project:"所属项目",product:"所属产品",injection:"注入环节",identify:"发现环节",branch:"平台/分支",module:"所属模块",execution:"所属执行",plan:"所属计划",story:"相关需求",storyVersion:"软件需求版本",task:"相关任务",toTask:"转任务",toStory:"转软件需求",title:"Bug标题",keywords:"关键词",severity:"严重程度",pri:"优先级",type:"Bug类型",os:"操作系统",browser:"浏览器",hardware:"硬件",found:"发现环境",steps:"重现步骤",status:"Bug状态",subStatus:"子状态",color:"标题颜色",confirmed:"是否确认",activatedCount:"激活次数",activatedDate:"激活时间",feedbackBy:"反馈者",notifyEmail:"通知邮箱",mailto:"抄送给",openedBy:"由谁创建",openedDate:"创建日期",openedBuild:"影响版本",assignedTo:"指派给",assignedDate:"指派日期",deadline:"截止日期",resolvedBy:"解决者",resolution:"解决方案",resolvedBuild:"解决版本",resolvedDate:"解决日期",closedBy:"由谁关闭",closedDate:"关闭日期",duplicateBug:"重复Bug",relatedBug:"相关Bug",case:"来源用例",caseVersion:"用例版本",feedback:"相关反馈",result:"结果",repo:"所属版本库",mr:"合并请求",entry:"代码路径",lines:"代码行",v1:"版本1",v2:"版本2",repoType:"版本库类型",issueKey:"Sonarqube问题键值",testtask:"测试单",lastEditedBy:"最后修改者",lastEditedDate:"修改日期",deleted:"已删除"},testcase:{id:"用例编号",project:"所属项目",product:"所属产品",execution:"所属迭代",branch:"平台/分支",lib:"所属库",module:"所属模块",path:"路径",story:"相关软件需求",storyVersion:"软件需求版本",title:"用例名称",precondition:"前置条件",keywords:"关键词",pri:"优先级",type:"用例类型",auto:"自动化测试用例",frame:"自动化测试框架",stage:"适用环节",howRun:"测试方式",script:"自动化脚本",scriptedBy:"脚本由谁创建",scriptedDate:"脚本创建日期",scriptStatus:"脚本状态",scriptLocation:"脚本地址",status:"用例状态",subStatus:"子状态",color:"标题颜色",frequency:"使用频率",order:"排序",openedBy:"由谁创建",openedDate:"创建日期",reviewedBy:"由谁评审",reviewedDate:"评审时间",lastEditedBy:"最后修改者",lastEditedDate:"修改日期",version:"用例版本",linkCase:"相关用例",fromBug:"来源Bug",fromCaseID:"用例来源ID",fromCaseVersion:"用例来源版本",lastRunner:"执行人",lastRunDate:"执行时间",lastRunResult:"结果",scene:"所属场景",sort:"排序",deleted:"已删除"},task:{id:"编号",project:"所属项目",parent:"父任务",isParent:"是父任务",isTpl:"是模板",path:"路径",execution:"所属执行",module:"所属模块",design:"相关设计",story:"相关软件需求",storyVersion:"软件需求版本",designVersion:"设计版本",fromBug:"来源Bug",feedback:"相关反馈",fromIssue:"来源问题",docs:"关联文档",docVersions:"文档版本",name:"任务名称",type:"任务类型",mode:"任务模式",pri:"优先级",estimate:"最初预计",consumed:"总计消耗",left:"预计剩余",deadline:"截止日期",status:"任务状态",subStatus:"子状态",color:"标题颜色",mailto:"抄送给",keywords:"关键词",desc:"任务描述",version:"版本",openedBy:"由谁创建",openedDate:"创建日期",assignedTo:"指派给",assignedDate:"指派日期",estStarted:"预计开始",realStarted:"实际开始",finishedBy:"由谁完成",finishedDate:"实际完成",finishedList:"完成者列表",canceledBy:"由谁取消",canceledDate:"取消时间",closedBy:"由谁关闭",closedDate:"关闭时间",planDuration:"计划持续天数",realDuration:"实际持续天数",closedReason:"关闭原因",lastEditedBy:"最后修改",lastEditedDate:"最后修改日期",activatedDate:"激活日期",order:"排序",repo:"所属代码库",mr:"合并请求",entry:"代码路径",lines:"代码行",v1:"版本1",v2:"版本2",vision:"所属界面",deleted:"已删除"},issue:{id:"编号",resolvedBy:"解决者",project:"所属项目",execution:"所属执行",title:"问题名称",desc:"描述",pri:"优先级",severity:"严重程度",type:"类型",activity:"活动列表",deadline:"计划解决日期",resolution:"解决方式",resolutionComment:"解决方案",objectID:"关联对象",resolvedDate:"实际解决日期",status:"结果",owner:"提出人",lib:"问题库",from:"来源",version:"版本号",createdBy:"由谁创建",createdDate:"创建日期",editedBy:"由谁编辑",editedDate:"编辑日期",activateBy:"由谁激活",activateDate:"激活日期",closedBy:"由谁关闭",closedDate:"关闭日期",assignedTo:"指派给",assignedBy:"由谁指派",assignedDate:"指派时间",approvedDate:"审批日期",relatedObject:"关联对象",risk:"关联风险",files:"附件",sourceName:"来源名称",deleted:"已删除"},risk:{id:"ID",project:"所属项目",execution:"所属执行",name:"风险名称",source:"来源",category:"类型",strategy:"策略",status:"状态",impact:"影响程度",probability:"发生概率",rate:"风险系数",pri:"优先级",identifiedDate:"识别日期",prevention:"应对措施",remedy:"响应措施",plannedClosedDate:"计划关闭日期",actualClosedDate:"实际关闭日期",lib:"风险库",from:"来源",version:"版本号",createdBy:"由谁创建",createdDate:"创建日期",editedBy:"由谁编辑",editedDate:"编辑日期",resolution:"解决措施",resolvedBy:"解决者",activateBy:"由谁激活",activateDate:"激活日期",assignedTo:"指派给",assignedDate:"指派日期",closedBy:"由谁关闭",closedDate:"关闭日期",cancelBy:"由谁取消",cancelDate:"取消日期",cancelReason:"取消原因",hangupBy:"由谁挂起",hangupDate:"挂起日期",trackedBy:"由谁跟踪",trackedDate:"跟踪日期",approvedDate:"审批日期",relatedObject:"关联对象",issues:"关联问题",files:"附件",deleted:"已删除"},meeting:{id:"ID",project:"所属项目",execution:"所属执行",name:"会议名称",type:"会议类型",begin:"开始时间",end:"结束时间",dept:"所属部门",mode:"会议模式",host:"主持人",participant:"参会人员",date:"会议日期",room:"会议室",minutes:"会议记录",minutedBy:"由谁记录",minutedDate:"记录日期",objectType:"关联类型",objectID:"关联对象",createdBy:"由谁创建",createdDate:"创建日期",editedBy:"由谁编辑",editedDate:"编辑日期",participantName:"参会人员姓名",files:"附件",objectName:"关联对象名称",deleted:"已删除"},feedback:{id:"编号",product:"所属产品",module:"所属模块",title:"反馈名称",type:"类型",solution:"处理方案",desc:"描述",pri:"优先级",status:"状态",subStatus:"子状态",prevStatus:"之前状态",public:"公开",notify:"通知",notifyEmail:"通知邮箱",source:"来源公司",likes:"点赞人",result:"转化结果",faq:"FAQ",openedBy:"创建者",openedDate:"创建时间",reviewedBy:"由谁评审",reviewedDate:"评审时间",processedBy:"由谁处理",processedDate:"处理时间",closedBy:"由谁关闭",closedDate:"关闭时间",closedReason:"关闭原因",editedBy:"最后处理人",editedDate:"最后操作时间",assignedTo:"指派给",prevAssignedTo:"之前指派人",assignedDate:"指派时间",activatedBy:"由谁激活",activatedDate:"激活时间",feedbackBy:"反馈者",repeatFeedback:"重复反馈",mailto:"抄送给",keywords:"关键词",deleted:"已删除"},ticket:{id:"工单编号",product:"所属产品",module:"所属模块",title:"工单名称",type:"类型",desc:"描述",openedBuild:"影响版本",feedback:"由反馈转化",assignedTo:"指派给",assignedDate:"指派日期",realStarted:"实际开始",startedBy:"由谁开始",startedDate:"开始时间",deadline:"截止日期",pri:"优先级",estimate:"最初预计",left:"预计剩余",status:"状态",openedBy:"由谁创建",openedDate:"创建时间",activatedCount:"激活次数",activatedBy:"由谁激活",activatedDate:"激活时间",closedBy:"关闭者",closedDate:"关闭时间",closedReason:"关闭原因",finishedBy:"完成者",finishedDate:"完成时间",resolvedBy:"解决者",resolvedDate:"解决时间",resolution:"解决方案",editedBy:"由谁编辑",editedDate:"最后修改时间",keywords:"关键字",repeatTicket:"重复工单",mailto:"抄送给",deleted:"已删除"},system:{id:"编号",name:"应用名称",product:"所属产品",integrated:"集成应用",latestRelease:"最新版本号",latestDate:"最新发布日期",children:"包含应用",status:"状态",desc:"描述",createdBy:"由谁创建",createdDate:"创建日期",editedBy:"由谁编辑",editedDate:"编辑日期",deleted:"已删除"},build:{id:"ID",project:"所属项目",product:"所属产品",branch:"平台/分支",execution:"所属迭代",builds:"包含构建",name:"名称",system:"所属应用",scmPath:"源代码地址",filePath:"下载地址",date:"打包日期",stories:"完成的软件需求",bugs:"解决的Bug",artifactRepoID:"制品库",builder:"构建者",desc:"描述",createdBy:"由谁创建",createdDate:"创建时间",deleted:"已删除"},testtask:{id:"编号",project:"所属项目",product:"所属产品",name:"测试单名称",execution:"所属执行",build:"提测构建",joint:"是否联调测试单",type:"测试类型",owner:"负责人",pri:"优先级",begin:"开始日期",end:"结束日期",realBegan:"实际开始日期",realFinishedDate:"实际完成日期",mailto:"抄送给",desc:"描述",report:"测试总结",status:"当前状态",testreport:"相关测试报告",auto:"自动化",subStatus:"子状态",createdBy:"由谁创建",createdDate:"创建时间",members:"参与人",deleted:"已删除"},release:{id:"ID",project:"所属项目",product:"所属产品",branch:"平台/分支",shadow:"影子构建",build:"构建",name:"应用版本号",system:"应用",releases:"包含应用",marker:"里程碑",date:"计划发布日期",releasedDate:"实际发布日期",stories:"完成的软件需求",bugs:"解决的Bug",leftBugs:"遗留的Bug",desc:"描述",mailto:"抄送给",notify:"发送通知",status:"发布状态",subStatus:"子状态",createdBy:"由谁创建",createdDate:"创建时间",deleted:"已删除"},file:{id:"编号",pathname:"路径",title:"标题",extension:"文件类型",size:"大小",objectType:"对象类型",objectID:"对象ID",gid:"全局标识",addedBy:"由谁添加",addedDate:"添加时间",downloads:"下载次数",extra:"备注",deleted:"已删除"},workflow:{id:"编号",group:"流程分组",parent:"父工作流",child:"子工作流",type:"类型",navigator:"所属导航",app:"所属应用",position:"位置",module:"工作流代号",table:"工作流表",name:"工作流名",icon:"图标",titleField:"标题字段",contentField:"内容字段",flowchart:"流程图",js:"JS",css:"CSS",order:"顺序",buildin:"内置",role:"角色",belong:"从属于",administrator:"白名单",desc:"描述",version:"版本",status:"状态",approval:"审批",createdBy:"由谁创建",createdDate:"创建时间",editedBy:"由谁编辑",editedDate:"编辑时间",vision:"所属界面"},doc:{id:"ID",project:"所属项目",product:"所属产品",execution:"所属执行",lib:"所属库",template:"模板",templateType:"模板类型",templateDesc:"模板描述",objects:"所属对象",chapterType:"章节类型",cycle:"周期",cycleConfig:"周期设置",module:"所属父级",reportModule:"报表模块",title:"文档标题",keywords:"关键字",type:"文档类型",status:"文档状态",parent:"所属父级",path:"路径",grade:"层级",order:"排序",views:"浏览次数",assetLib:"资产库",assetLibType:"资产库类型",from:"来源文档",fromVersion:"来源版本",draft:"草稿",collects:"被收藏量",weeklyDate:"周报日期",addedBy:"创建者",addedDate:"创建日期",assignedTo:"指派给",assignedDate:"指派日期",approvedDate:"审批日期",editedBy:"修改者",editedDate:"修改日期",editingDate:"正在修改者和时间",editedList:"文档编辑者",mailto:"抄送给",acl:"权限",isDeliverable:"是否为交付物",groups:"分组",users:"用户",readGroups:"只读分组",readUsers:"只读用户",version:"版本号",builtIn:"内置",frozen:"冻结状态",vision:"所属界面",collector:"收藏者",releasedDate:"发布日期",releasedBy:"由谁发布",files:"附件",digest:"文档摘要",html:"文档正文(HTML格式)",content:"文档正文(Markdown格式)",rawContent:"原始内容(JSON格式)",contentType:"文档格式",contentVersion:"内容版本",moduleName:"模块名称",executionName:"执行名称",productName:"产品名称",privs:"权限",editors:"编辑者",readable:"可阅读",editable:"可编辑",deleted:"已删除"},todo:{id:"编号",account:"由谁创建",date:"日期",begin:"开始",end:"结束",feedback:"相关反馈",type:"类型",cycle:"周期",objectID:"关联编号",pri:"优先级",name:"待办名称",desc:"描述",status:"状态",private:"私人事务",config:"配置",assignedTo:"指派给",assignedBy:"由谁指派",assignedDate:"指派日期",finishedBy:"由谁完成",finishedDate:"完成时间",closedBy:"由谁关闭",closedDate:"关闭时间",vision:"所属界面",deleted:"已删除"},my:{name:"名称",code:"代号",pri:"优先级",hours:"工时/天",todo:"我的待办",calendar:"日程",work:"待处理",contribute:"贡献",task:"我的任务",bug:"我的Bug",story:"我的软件需求",epic:"我的业务需求",requirement:"我的用户需求",doc:"我的文档",project:"我的项目",execution:"我的执行",issue:"我的问题",risk:"我的风险",reviewissue:"我的评审问题",profile:"我的档案",dynamic:"我的动态",team:"团队",audit:"审批",score:"我的积分",preference:"个性化设置",projects:"所属项目",executions:"所属执行",assignedToMe:"指派给我",programLink:"项目集默认着陆页",productLink:"产品默认着陆页",projectLink:"项目默认着陆页",executionLink:"执行默认着陆页",docLink:"文档默认着陆页",devopsLink:"DevOps视图着陆页",devopsspaceLink:"DevOps空间着陆页",title:"评审标题",status:"状态",type:"评审对象",product:"所属产品",reviewer:"审批人",opinion:"审批意见",result:"评审结果",openedBy:"提交人",time:"提交时间",reviewTime:"评审时间"}};function k(D){return f().get(D.toLowerCase())}function z(D,B){let W=k(D);if(!W)return;let Q=B==="ls"?"list":B,$=W.actions.find((J)=>String(J.name).toLowerCase()===Q.toLowerCase());if($)return $;if(!new Set(["list","get","create","update","delete"]).has(Q)){let J=W.actions.find((Y)=>Y.type==="action"&&String(Y.name).toLowerCase()===Q.toLowerCase());if(J)return J}return}function u(D,B,W){let{roles:Q}=W??{},$=[],X=z(D,B);if(!X)return[];if(X.pathParams&&(!Q||Q.includes("path")))Object.entries(X.pathParams).forEach(([Y,G])=>{if(typeof G==="string")G={description:G};$.push({name:Y,role:"path",required:!0,...G})});if(X.params&&(!Q||Q.includes("query")))$.push(...X.params.map((Y)=>({...Y,role:"query"})));let J=X.requestBody?.schema;if(J&&(!Q||Q.includes("body")))if(J.type==="object"){let Y=new Set(J.required?J.required.map((G)=>G.toLowerCase()):[]);Object.entries(J.properties).forEach(([G,q])=>{$.push({name:G,role:"body",required:q.required??Y.has(G.toLowerCase()),type:(q.type==="integer"?"number":q.type)??"string",...q})})}else $.push({name:"data",role:"body",required:!0,type:J.type});return $}function RD(){return c().map((D)=>D.name)}function PD(D){return kB[D]}function uD(D){if(Array.isArray(D))return D.filter((B)=>typeof B!=="function").map((B)=>uD(B));if(D&&typeof D==="object"){let B={};for(let[W,Q]of Object.entries(D))if(typeof Q!=="function")B[W]=uD(Q);return B}return D}function ZD(D={}){let B=D.raw??!1,W=D.jsonSafe??!0,Q={};return f().forEach(($)=>{let X=B?$:{...$,actions:$.actions.map((J)=>{let{requestBody:Y,...G}=J;return{...G,...Y?.mediaType?{bodyMediaType:Y.mediaType}:{},bodyParams:Y?u($.name,J.name,{roles:["body"]}):[]}})};Q[$.name]=W?uD(X):X}),Q}RB(iD);iD();var qQ=52428800,vB={".avif":"image/avif",".csv":"text/csv",".gif":"image/gif",".htm":"text/html",".html":"text/html",".jpeg":"image/jpeg",".jpg":"image/jpeg",".json":"application/json",".md":"text/markdown",".pdf":"application/pdf",".png":"image/png",".svg":"image/svg+xml",".txt":"text/plain",".webp":"image/webp",".zip":"application/zip"};function bB(D){return import(D)}function sD(D){return typeof Blob<"u"&&D instanceof Blob}function CQ(D){return j(D)&&typeof D.path==="string"}function LQ(D){return j(D)&&Object.prototype.hasOwnProperty.call(D,"data")&&typeof D.filename==="string"}function dB(D){let B=D.toLowerCase(),W=B.lastIndexOf(".");return W>=0?vB[B.slice(W)]??"application/octet-stream":"application/octet-stream"}function HQ(D){let B=D.split(";",1)[0]?.trim().toLowerCase();return Object.entries(vB).find(([,Q])=>Q===B)?.[0]??".bin"}function KQ(D){if(D===void 0)return qQ;if(!Number.isFinite(D)||D<1)throw new C("E_INVALID_PARAM",{param:"maxUploadBytes",value:String(D)});return Math.floor(D)}function XD(D,B){if(D>B)throw new C("E_UPLOAD_FILE_TOO_LARGE",{size:D,limit:B})}function nD(D,B,W){let $=(D?.trim()||B.trim()).split(/[\\/]/).at(-1)?.trim()??"";if(!$)throw new C("E_INVALID_UPLOAD_SOURCE",{field:W});return $}function OQ(D){return j(D)&&typeof D.code==="string"?D.code:void 0}function mB(D){let B=new Uint8Array(D.buffer,D.byteOffset,D.byteLength),W=new Uint8Array(B.byteLength);return W.set(B),W}function jQ(D,B,W){if(sD(D))return D.type===B?D:new Blob([D],{type:B});if(D instanceof ArrayBuffer)return new Blob([D],{type:B});if(ArrayBuffer.isView(D))return new Blob([mB(D)],{type:B});throw new C("E_INVALID_UPLOAD_SOURCE",{field:W})}async function AQ(D,B,W){if(!b())throw new C("E_UPLOAD_PATH_UNSUPPORTED");let Q=typeof D==="string"?D:D.path,$=typeof D==="string"?void 0:D.filename,X=typeof D==="string"?void 0:D.contentType,[J,Y]=await Promise.all([bB("node:fs/promises"),bB("node:path")]),G;try{G=await J.stat(Q)}catch(K){if(OQ(K)==="ENOENT")throw new C("E_UPLOAD_FILE_NOT_FOUND",{path:Q},K);throw new C("E_UPLOAD_FILE_READ_FAILED",{path:Q},K)}if(!G.isFile())throw new C("E_INVALID_UPLOAD_SOURCE",{field:B},{path:Q});XD(G.size,W);let q=nD($,Y.basename(Q),B),H=X?.trim()||dB(q),L=globalThis.Bun;if(L?.file){let K=L.file(Q);return XD(K.size,W),{blob:(Boolean(X?.trim())||!K.type)&&K.type!==H?new Blob([K],{type:H}):K,filename:q}}try{let K=await J.readFile(Q);return XD(K.byteLength,W),{blob:new Blob([mB(K)],{type:H}),filename:q}}catch(K){throw new C("E_UPLOAD_FILE_READ_FAILED",{path:Q},K)}}async function IQ(D,B,W){if(typeof D==="string"||CQ(D))return AQ(D,B,W);if(sD(D)){XD(D.size,W);let Q=D.type||"application/octet-stream",$=typeof D.name==="string"?D.name:`${B}${HQ(Q)}`,X=nD($,`${B}.bin`,B);return{blob:D.type===Q?D:new Blob([D],{type:Q}),filename:X}}if(LQ(D)){let Q=nD(D.filename,B,B),$=D.contentType?.trim()||(sD(D.data)?D.data.type:"")||dB(Q),X=jQ(D.data,$,B);return XD(X.size,W),{blob:X,filename:Q}}throw new C("E_INVALID_UPLOAD_SOURCE",{field:B})}function VQ(D){if(!j(D))return!1;if(D.format==="binary")return!0;return D.type==="array"&&j(D.items)&&D.items.format==="binary"}function cB(D,B,W){if(W===void 0)return;if(Array.isArray(W)){for(let Q of W)cB(D,B,Q);return}if(W===null){D.append(B,"");return}D.append(B,typeof W==="object"?JSON.stringify(W):String(W))}async function _Q(D,B){let W=new FormData,Q=j(D.action.requestBody?.schema.properties)?D.action.requestBody.schema.properties:{};for(let[$,X]of Object.entries(D.data??{})){if(!VQ(Q[$])){cB(W,$,X);continue}let J=Array.isArray(X)?X:[X];if(J.length===0)throw new C("E_INVALID_UPLOAD_SOURCE",{field:$});for(let Y of J){let G=await IQ(Y,$,B);W.append($,G.blob,G.filename)}}return W}async function pB(D,B={}){let W=D.action.requestBody?.mediaType??"application/json";if(W==="multipart/form-data")return{body:await _Q(D,KQ(B.maxUploadBytes)),bodyType:"raw"};if(W==="application/x-www-form-urlencoded")return{body:D.data,bodyType:"form"};return{body:D.data}}function RQ(D){let B=D.split("/");if(B.length>2||!B[0])throw new C("E_INVALID_REQUEST_NAME");let[W,Q]=B;if(!Q?.length)return{moduleName:W,actionName:"list"};if(Number.isInteger(Number(Q)))return{moduleName:W,actionName:"get",id:Number(Q)};return{moduleName:W,actionName:Q}}function PQ(D){let B=D;if(typeof B==="string")try{B=JSON.parse(B)}catch{return new Set}if(B&&typeof B==="object"&&!Array.isArray(B))return new Set(Object.keys(B));return new Set}async function ZQ(D,B,W,Q){let $=B.requestBody?.schema?.properties,X=D.actions.find((q)=>q.type==="get");if(!$||!X)return W;let J=(await gD(`${D.name}/${X.name}`,W,{client:Q.client,timeout:Q.timeout,insecure:Q.insecure,throwOnFail:!0})).data;if(!j(J))return W;let Y=PQ(W.data),G={...W};for(let q of Object.keys($))if(!(Object.prototype.hasOwnProperty.call(W,q)||Y.has(q))&&Object.prototype.hasOwnProperty.call(J,q))G[q]=J[q];return G}function gQ(D){if(typeof D==="string")return D;if(D===void 0)return;try{return JSON.stringify(D)}catch{return String(D)}}function FQ(D){for(let B of["code","errorCode","errno"]){let W=D[B];if(typeof W==="string"||typeof W==="number")return W}return}function UQ(D){return Boolean(D.convert||D.filter&&D.filter.length>0||D.search&&D.search.length>0||D.sort||D.limit||D.pick&&D.pick.length>0)}function EQ(D,B){if(Array.isArray(D)){if(!UQ(B))return D;if(D.every(j))return w(D,{convert:B.convert,filter:B.filter,search:B.search,searchFields:B.searchFields,sort:B.sort,limit:B.limit,pick:B.pick});let W=Number(B.limit);return Number.isFinite(W)&&W>=0?D.slice(0,Math.floor(W)):D}if(j(D)&&(B.convertSingle||B.pick&&B.pick.length>0))return w(D,{convert:B.convertSingle,pick:B.pick});return D}function MQ(D,B,W){if(!B||typeof B!=="object"||Array.isArray(B))return{status:"success",data:B};let Q=B,$=Q.status==="fail"?"fail":"success",X=EQ(AD(D.action,Q,D.params,W),W),J=Q.message,Y=gB(D.action,Q,D.params,W),G={status:$,message:gQ(J),data:X,pager:Y?{total:Number(Y.recTotal),page:Number(Y.pageID),recPerPage:Number(Y.recPerPage)}:void 0};if(J!==void 0&&typeof J!=="string")G.rawMessage=J;let q=FQ(Q);if(q!==void 0)G.apiCode=q;if($==="fail")G.raw=Q;return G}async function gD(D,B={},W={}){let Q=T(),$=W.client??Q.client;if(!$)throw new C("E_NO_GLOBAL_CLIENT");let{moduleName:X,actionName:J,id:Y}=RQ(D),G=k(X);if(!G)throw new C("E_INVALID_MODULE",{module:X});let q=B.recPerPage??W.recPerPage??Q.recPerPage,H={...B,...Y!==void 0?{id:Y}:{},...q!==void 0?{recPerPage:q}:{}},L=z(X,J);if(!L)throw new C("E_INVALID_ACTION",{module:X,action:J});let K=L.type==="update"&&(W.autoFill??Q.autoFill)?await ZQ(G,L,H,W):H,Z=ZB(G,J,K),N=await pB(Z,{maxUploadBytes:W.maxUploadBytes}),s=await $.request(Z.path,{method:String(Z.action.method).toUpperCase(),query:Z.query,body:N.body,bodyType:N.bodyType,timeout:W.timeout??Q.timeout,insecure:W.insecure??Q.insecure});if(W.raw)return s;let iB={...W,limit:W.limit??Q.limit},JD=MQ(Z,s,iB);if(JD.status==="fail"&&(W.throwOnFail??Q.throwOnFail))throw new C("E_API_FAILED",{message:JD.message??""},JD);return JD}var tD="2026-08-21T05:05:30.639Z",lD="0.6.5";var rD=globalThis;rD.ZentaoAPI=FD;if(rD.window)rD.window.ZentaoAPI=FD;})();
|
|
32
|
+
${FD($)}`:""}case"affine:embed-zui-iframe":{let $=M(Q.src);return $?`[${$}](${$})`:""}case"affine:embed-zui-component":{let $=_(Q.name,B,D);return $?`[Component: ${$}]`:""}case"affine:embed-linked-doc":{let $=A(Q.pageId);if(!$)return"";let X=B.options.resolveDocTitle?.($)??"untitled",J=_(X,B,D),Y=HD(B.options,{pageId:$,params:V(Q.params),title:X},D);return Y?`[${J}](${M(Y)})`:J}case"affine:embed-synced-doc":{let $=E(D);if($.length)return N($,B);let X=A(Q.pageId);if(!X)return"";let J=B.options.resolveDocTitle?.(X)??X,Y=_(J,B,D),H=HD(B.options,{pageId:X,params:V(Q.params),title:J},D);return H?`[${Y}](${M(H)})`:Y}default:return eW.has(D.flavour)?L2(D,B):G2(D,B)}}function N(D,B){let W=[];for(let Q=0;Q<D.length;Q+=1){let $=D[Q];if(!$)continue;if($.flavour==="affine:list"){let X=A(V($.props).type,"bulleted"),J=[$];while(Q+1<D.length){let Y=D[Q+1];if(Y?.flavour!=="affine:list"||A(V(Y.props).type,"bulleted")!==X)break;J.push(Y),Q+=1}W.push(Q2(J,B))}else W.push(C2($,B))}return t(W)}function cB(D,B={}){let W=TB(D);wB(W.blocks,B);let Q={options:B},$=B.includeTitle===!1?"":S(xB(W),B,W.root),X=N(W.blocks,Q),J=t([$?`# ${$}`:"",X]);return J?`${J}
|
|
33
|
+
`:""}function nD(){z("execution","create",(D)=>{let B=D.requestBody.schema?.required;if(Array.isArray(B)&&!B.includes("products"))B.push("products");return D}),z("story","update",(D)=>{let B=D.requestBody.schema?.properties;if(B&&!B.plan)B.plan={type:"integer",description:"所属计划",format:"int32"};if(B&&B.category)B.category={type:"string",description:"类别"};return D}),[["product","create"],["product","update"],["execution","create"],["execution","update"]].forEach(([D,B])=>{z(D,B,(W)=>{let Q=W.requestBody.schema?.properties;if(Q.acl&&Q.acl.defaultValue===void 0)Q.acl.defaultValue="open";return W})}),z("execution","create",(D)=>{let B=D.requestBody.schema?.properties;if(B){if(!B.milestone)B.milestone={type:"integer",description:"是否里程碑(0 否| 1 是)",format:"int32"}}return D}),["create","update"].forEach((D)=>{z("task",D,(B)=>{let W=B.requestBody?.schema?.properties;if(W&&!W.parent)W.parent={type:"integer",description:"父任务",format:"int32"};return B})}),z("file","create",(D)=>{if(D.requestBody){D.requestBody.mediaType="multipart/form-data";let B=D.requestBody.schema?.properties;if(B?.file)B.file.format="binary"}return D}),z("doc","get",(D)=>{let B=D.resultGetter;return D.resultGetter=(W,Q,$={})=>{let X=B?_D({...D,resultGetter:B},W,Q,$):W.doc??W;if(!j(X))return X;let J=$.pick,Y=!J?.length,H=Y||J.includes("content"),L=Y||J.includes("rawContent");if(!H&&!L)return X;let G=X.content;try{if(L&&(X.rawContent===void 0||X.rawContent===""))X.rawContent=G;if(H&&X.contentType==="doc"){let C=cB(G);X.content=C}}catch{}return X},D}),s("story",{name:"getGrades",display:"获取需求层级选项",type:"list",method:"get",path:"/storygrades",resultType:"list",resultGetter:"grades"}),z("story","create",(D)=>{let B=D.requestBody.schema?.properties;if(B&&!B.grade)B.grade={type:"integer",description:"需求层级,可用的需求层级可以通过 story-getGrades 操作获取"};return D}),["create","update"].forEach((D)=>{z("task",D,(B)=>{let W=B.requestBody.schema?.properties;if(W&&!W.type)W.type={type:"string",description:"任务类型(枚举:design 设计 | devel 开发 | request 需求 | test 测试 | study 研究 | discuss 讨论 | ui 界面 | affair 事务 | misc 其他)"};return B})})}var uB={user:{id:"用户编号",company:"所属公司",type:"用户类型",dept:"部门",account:"用户名",password:"密码",role:"职位",realname:"姓名",superior:"直属上级",pinyin:"姓名拼音",nickname:"昵称",commiter:"源代码帐号",avatar:"用户头像",birthday:"生日",gender:"性别",email:"邮箱",skype:"Skype",qq:"QQ",mobile:"手机",phone:"电话",weixin:"微信",dingding:"钉钉",slack:"Slack",whatsapp:"WhatsApp",address:"通讯地址",zipcode:"邮编",nature:"性格特征",analysis:"影响分析",strategy:"应对策略",join:"入职日期",visits:"访问次数",visions:"界面类型",ip:"最后IP",last:"最后登录",fails:"失败次数",locked:"锁住日期",feedback:"是否反馈用户",ranzhi:"ZDOO帐号",ldap:"LDAP账号",score:"积分",scoreLevel:"积分等级",resetToken:"重置密码令牌",resetExpired:"重置令牌过期时间",clientStatus:"登录状态",clientLang:"客户端语言",jira:"是否Jira导入用户",deleted:"(已删除)"},program:{id:"编号",project:"项目",isTpl:"是否模板",charter:"所属立项",model:"项目管理方式",type:"类型",category:"项目集类型",lifetime:"项目周期",budget:"预算",budgetUnit:"预算单位",attribute:"阶段类型",percent:"工作量占比",milestone:"里程碑",output:"输出",auth:"权限控制",storyType:"关联需求概念",parent:"父项目集",path:"路径",grade:"层级",name:"项目集名称",code:"项目代号",hasProduct:"是否关联产品",workflowGroup:"项目流程",begin:"计划开始",end:"计划完成",firstEnd:"启动时的计划完成日期",realBegan:"实际开始",realEnd:"实际完成",days:"可用工作日",schedule:"日程安排",status:"状态",subStatus:"子状态",pri:"优先级",desc:"项目集描述",version:"版本",parentVersion:"父版本",planDuration:"计划周期天数",realDuration:"实际周期天数",progress:"项目进度",estimate:"预计",left:"剩余工时",consumed:"消耗工时",teamCount:"总人数",market:"目标市场",openedBy:"创建者",openedDate:"创建时间",openedVersion:"创建版本",lastEditedBy:"最后编辑人",lastEditedDate:"最后编辑日期",closedBy:"由谁关闭",closedDate:"关闭日期",closedReason:"关闭原因",canceledBy:"由谁取消",canceledDate:"取消日期",suspendedDate:"暂停日期",PO:"项目负责人",PM:"负责人",QD:"测试负责人",RD:"发布负责人",team:"团队",acl:"访问控制",whitelist:"白名单",tplAcl:"模板访问控制",tplWhiteList:"模板白名单",order:"排序",stageBy:"阶段类型",displayCards:"每列最大卡片数",fluidBoard:"列宽度",multiple:"启用迭代",parallel:"是否允许并行",enabled:"是否启用阶段",linkType:"关联类型",taskDateLimit:"任务时间限制",colWidth:"列宽",minColWidth:"最小列宽",maxColWidth:"最大列宽",coverExecutionPriv:"执行权限控制",vision:"界面",frozen:"冻结状态",deleted:"已删除"},product:{id:"编号",program:"所属项目集",name:"产品名称",code:"产品代号",shadow:"是否影子产品",bind:"是否独立产品",line:"产品线",type:"产品类型",status:"状态",subStatus:"子状态",desc:"产品描述",PO:"产品负责人",QD:"测试负责人",RD:"发布负责人",feedback:"反馈负责人",ticket:"工单负责人",workflowGroup:"产品流程",acl:"访问控制",groups:"权限组",whitelist:"白名单",reviewer:"评审人",PMT:"规划负责人",draftEpics:"草稿业务需求",activeEpics:"激活业务需求",changingEpics:"变更中业务需求",reviewingEpics:"评审中业务需求",finishedEpics:"已完成业务需求",closedEpics:"已关闭业务需求",totalEpics:"业务需求数",draftRequirements:"草稿用户需求",activeRequirements:"激活用户需求",changingRequirements:"变更中用户需求",reviewingRequirements:"评审中用户需求",finishedRequirements:"已完成用户需求",closedRequirements:"已关闭用户需求",totalRequirements:"用户需求数",draftStories:"草稿软件需求",activeStories:"激活软件需求",changingStories:"变更中软件需求",reviewingStories:"评审中软件需求",finishedStories:"已完成软件需求",closedStories:"已关闭软件需求",totalStories:"软件需求数",unresolvedBugs:"未解决Bug",closedBugs:"关闭Bug",fixedBugs:"已修复Bug",totalBugs:"Bug总数",plans:"计划数",releases:"发布数",createdBy:"由谁创建",createdDate:"创建日期",createdVersion:"创建版本",closedDate:"关闭日期",order:"排序",vision:"所属界面",lineName:"产品线名称",programName:"项目集名称",programPM:"项目集负责人",finishClosedStories:"已关闭完成需求",launchedStories:"已立项需求",developingStories:"研发中需求",projects:"关联项目数",executions:"关联执行数",coverage:"覆盖率",latestRelease:"最新发布",latestReleaseDate:"最新发布时间",productLine:"产品线",testCaseCoverage:"用例覆盖率",epicCompleteRate:"史诗完成率",requirementCompleteRate:"用户需求完成率",storyCompleteRate:"用户故事完成率",bugFixedRate:"修复率",deleted:"已删除"},project:{id:"项目ID",project:"所属项目",isTpl:"是否模板",charter:"所属立项",model:"项目管理方式",type:"项目类型",category:"项目类型",lifetime:"项目周期",budget:"预算",budgetUnit:"(单位:)",attribute:"阶段类型",percent:"工作量占比",milestone:"里程碑",output:"输出",auth:"权限控制",storyType:"关联需求概念",parent:"所属项目集",path:"路径",grade:"层级",name:"项目名称",code:"项目代号",hasProduct:"是否关联产品",workflowGroup:"项目流程",begin:"计划开始",end:"计划完成",firstEnd:"启动时的计划完成日期",realBegan:"实际开始日期",realEnd:"实际完成日期",days:"可用工作日",schedule:"日程安排",status:"状态",subStatus:"子状态",pri:"优先级",desc:"项目描述",version:"版本",parentVersion:"父版本",planDuration:"计划周期天数",realDuration:"实际周期天数",progress:"进度",estimate:"预计",left:"剩余工时",consumed:"消耗工时",teamCount:"人数",market:"目标市场",openedBy:"由谁创建",openedDate:"创建日期",openedVersion:"创建版本",lastEditedBy:"最后编辑人",lastEditedDate:"最后编辑日期",closedBy:"由谁关闭",closedDate:"关闭日期",closedReason:"关闭原因",canceledBy:"由谁取消",canceledDate:"取消日期",suspendedDate:"暂停日期",PO:"项目负责人",PM:"负责人",QD:"测试负责人",RD:"发布负责人",team:"团队",acl:"访问控制",whitelist:"项目白名单",tplAcl:"模板访问控制",tplWhiteList:"模板白名单",order:"排序",stageBy:"阶段类型",displayCards:"每列最大卡片数",fluidBoard:"列宽度",multiple:"启用迭代",parallel:"是否允许并行",enabled:"是否启用阶段",linkType:"关联类型",taskDateLimit:"任务时间限制",colWidth:"列宽",minColWidth:"最小列宽",maxColWidth:"最大列宽",coverExecutionPriv:"执行权限控制",vision:"界面",frozen:"冻结状态",teamMembers:"团队成员",leftTasks:"剩余任务",statusTitle:"状态标题",consume:"消耗",surplus:"剩余",invested:"已投入",PMAvatar:"负责人头像",PMUserID:"负责人用户ID",storyCount:"需求条目数",storyPoints:"需求规模",executionCount:"执行数",from:"来源",actions:"操作",deliverable:"交付物",deleted:"已删除"},execution:{id:"迭代编号",project:"所属项目",isTpl:"是否模板",charter:"所属立项",model:"项目管理方式",type:"迭代类型",category:"项目类型",lifetime:"项目周期",budget:"预算",budgetUnit:"(单位:)",attribute:"阶段类型",percent:"工作量占比",milestone:"里程碑",output:"输出",auth:"权限控制",storyType:"关联需求概念",parent:"所属项目",path:"路径",grade:"层级",name:"迭代名称",code:"迭代代号",hasProduct:"是否关联产品",workflowGroup:"项目流程",begin:"计划开始",end:"计划完成",firstEnd:"启动时的计划完成日期",realBegan:"实际开始日期",realEnd:"实际完成日期",days:"可用工作日",schedule:"日程安排",status:"迭代状态",subStatus:"子状态",pri:"优先级",desc:"迭代描述",version:"版本",parentVersion:"父版本",planDuration:"计划周期天数",realDuration:"实际周期天数",progress:"进度",estimate:"预计",left:"剩余",consumed:"消耗",teamCount:"人数",market:"目标市场",openedBy:"由谁创建",openedDate:"创建日期",openedVersion:"创建版本",lastEditedBy:"最后编辑人",lastEditedDate:"最后编辑日期",closedBy:"由谁关闭",closedDate:"关闭日期",closedReason:"关闭原因",canceledBy:"由谁取消",canceledDate:"取消日期",suspendedDate:"暂停日期",PO:"产品负责人",PM:"迭代负责人",QD:"测试负责人",RD:"发布负责人",team:"团队成员",acl:"访问控制",whitelist:"白名单",tplAcl:"模板访问控制",tplWhiteList:"模板白名单",order:"迭代排序",stageBy:"阶段类型",displayCards:"每列最大卡片数",fluidBoard:"列宽度",multiple:"启用迭代",parallel:"是否允许并行",enabled:"是否启用阶段",linkType:"关联类型",taskDateLimit:"任务时间限制",colWidth:"列宽",minColWidth:"最小列宽",maxColWidth:"最大列宽",coverExecutionPriv:"执行权限控制",vision:"界面",frozen:"冻结状态",projectName:"所属项目",projectModel:"项目管理方式",productName:"产品名称",product:"相关产品",productID:"产品ID",delay:"延期",totalEstimate:"预计",totalConsumed:"消耗",totalLeft:"剩余",burns:"燃尽图",deleted:"已删除"},productplan:{id:"编号",product:"所属产品",branch:"平台/分支",parent:"父计划",title:"计划名称",status:"状态",desc:"描述",begin:"开始日期",end:"结束日期",finishedDate:"完成时间",closedDate:"关闭时间",order:"排序",closedReason:"关闭原因",createdBy:"由谁创建",createdDate:"创建时间",deleted:"已删除"},story:{id:"编号",parent:"父需求",isParent:"是父需求",root:"顶级需求ID",path:"路径",grade:"需求层级",product:"所属产品",branch:"平台/分支",module:"所属模块",plan:"所属计划",source:"来源",sourceNote:"来源备注",fromBug:"来源Bug",feedback:"相关反馈",title:"软件需求名称",keywords:"关键词",type:"需求类型",category:"类别",pri:"优先级",estimate:"预计工时",status:"当前状态",subStatus:"子状态",color:"标题颜色",stage:"所处阶段",stagedBy:"设置阶段者",mailto:"抄送给",lib:"所属需求库",fromStory:"来源需求",fromVersion:"来源版本",openedBy:"由谁创建",openedDate:"创建日期",assignedTo:"指派给",assignedDate:"指派日期",approvedDate:"评审日期",lastEditedBy:"最后修改",lastEditedDate:"最后修改日期",changedBy:"由谁变更",changedDate:"变更时间",reviewedBy:"已评审人",reviewedDate:"评审时间",releasedDate:"发布日期",closedBy:"由谁关闭",closedDate:"关闭日期",closedReason:"关闭原因",activatedDate:"激活日期",toBug:"转Bug",linkStories:"相关需求",linkRequirements:"相关用户需求",docs:"关联文档",twins:"孪生需求",duplicateStory:"重复需求",version:"版本号",parentVersion:"父需求版本",demandVersion:"需求池需求版本",storyChanged:"需求已变更",feedbackBy:"反馈者",notifyEmail:"通知邮箱",BSA:"BSA等级",duration:"管理周期",demand:"需求池需求",submitedBy:"提交评审人",roadmap:"所属路标",URChanged:"用需变更",unlinkReason:"移除原因",retractedReason:"撤销原因",retractedBy:"由谁撤回",retractedDate:"撤回日期",verifiedDate:"验收时间",vision:"所属界面",frozen:"冻结状态",deleted:"已删除"},epic:{id:"编号",parent:"父需求",isParent:"是父需求",root:"顶级需求ID",path:"路径",grade:"需求层级",product:"所属产品",branch:"平台/分支",module:"所属模块",plan:"所属计划",source:"来源",sourceNote:"来源备注",fromBug:"来源Bug",feedback:"相关反馈",title:"业务需求名称",keywords:"关键词",type:"需求类型",category:"类别",pri:"优先级",estimate:"预计工时",status:"当前状态",subStatus:"子状态",color:"标题颜色",stage:"所处阶段",stagedBy:"设置阶段者",mailto:"抄送给",lib:"所属需求库",fromStory:"来源需求",fromVersion:"来源版本",openedBy:"由谁创建",openedDate:"创建日期",assignedTo:"指派给",assignedDate:"指派日期",approvedDate:"评审日期",lastEditedBy:"最后修改",lastEditedDate:"最后修改日期",changedBy:"由谁变更",changedDate:"变更时间",reviewedBy:"已评审人",reviewedDate:"评审时间",releasedDate:"发布日期",closedBy:"由谁关闭",closedDate:"关闭日期",closedReason:"关闭原因",activatedDate:"激活日期",toBug:"转Bug",linkStories:"相关需求",linkRequirements:"相关用户需求",docs:"关联文档",twins:"孪生需求",duplicateStory:"重复需求",version:"版本号",parentVersion:"父需求版本",demandVersion:"需求池需求版本",storyChanged:"需求已变更",feedbackBy:"反馈者",notifyEmail:"通知邮箱",BSA:"BSA等级",duration:"管理周期",demand:"需求池需求",submitedBy:"提交评审人",roadmap:"所属路标",URChanged:"用需变更",unlinkReason:"移除原因",retractedReason:"撤销原因",retractedBy:"由谁撤回",retractedDate:"撤回日期",verifiedDate:"验收时间",vision:"所属界面",frozen:"冻结状态",deleted:"已删除"},requirement:{id:"编号",parent:"父需求",isParent:"是父需求",root:"顶级需求ID",path:"路径",grade:"需求层级",product:"所属产品",branch:"平台/分支",module:"所属模块",plan:"所属计划",source:"来源",sourceNote:"来源备注",fromBug:"来源Bug",feedback:"相关反馈",title:"用户需求名称",keywords:"关键词",type:"需求类型",category:"类别",pri:"优先级",estimate:"预计工时",status:"当前状态",subStatus:"子状态",color:"标题颜色",stage:"所处阶段",stagedBy:"设置阶段者",mailto:"抄送给",lib:"所属需求库",fromStory:"来源需求",fromVersion:"来源版本",openedBy:"由谁创建",openedDate:"创建日期",assignedTo:"指派给",assignedDate:"指派日期",approvedDate:"评审日期",lastEditedBy:"最后修改",lastEditedDate:"最后修改日期",changedBy:"由谁变更",changedDate:"变更时间",reviewedBy:"已评审人",reviewedDate:"评审时间",releasedDate:"发布日期",closedBy:"由谁关闭",closedDate:"关闭日期",closedReason:"关闭原因",activatedDate:"激活日期",toBug:"转Bug",linkStories:"相关需求",linkRequirements:"相关用户需求",docs:"关联文档",twins:"孪生需求",duplicateStory:"重复需求",version:"版本号",parentVersion:"父需求版本",demandVersion:"需求池需求版本",storyChanged:"需求已变更",feedbackBy:"反馈者",notifyEmail:"通知邮箱",BSA:"BSA等级",duration:"管理周期",demand:"需求池需求",submitedBy:"提交评审人",roadmap:"所属路标",URChanged:"用需变更",unlinkReason:"移除原因",retractedReason:"撤销原因",retractedBy:"由谁撤回",retractedDate:"撤回日期",verifiedDate:"验收时间",vision:"所属界面",frozen:"冻结状态",deleted:"已删除"},bug:{id:"Bug编号",project:"所属项目",product:"所属产品",injection:"注入环节",identify:"发现环节",branch:"平台/分支",module:"所属模块",execution:"所属执行",plan:"所属计划",story:"相关需求",storyVersion:"软件需求版本",task:"相关任务",toTask:"转任务",toStory:"转软件需求",title:"Bug标题",keywords:"关键词",severity:"严重程度",pri:"优先级",type:"Bug类型",os:"操作系统",browser:"浏览器",hardware:"硬件",found:"发现环境",steps:"重现步骤",status:"Bug状态",subStatus:"子状态",color:"标题颜色",confirmed:"是否确认",activatedCount:"激活次数",activatedDate:"激活时间",feedbackBy:"反馈者",notifyEmail:"通知邮箱",mailto:"抄送给",openedBy:"由谁创建",openedDate:"创建日期",openedBuild:"影响版本",assignedTo:"指派给",assignedDate:"指派日期",deadline:"截止日期",resolvedBy:"解决者",resolution:"解决方案",resolvedBuild:"解决版本",resolvedDate:"解决日期",closedBy:"由谁关闭",closedDate:"关闭日期",duplicateBug:"重复Bug",relatedBug:"相关Bug",case:"来源用例",caseVersion:"用例版本",feedback:"相关反馈",result:"结果",repo:"所属版本库",mr:"合并请求",entry:"代码路径",lines:"代码行",v1:"版本1",v2:"版本2",repoType:"版本库类型",issueKey:"Sonarqube问题键值",testtask:"测试单",lastEditedBy:"最后修改者",lastEditedDate:"修改日期",deleted:"已删除"},testcase:{id:"用例编号",project:"所属项目",product:"所属产品",execution:"所属迭代",branch:"平台/分支",lib:"所属库",module:"所属模块",path:"路径",story:"相关软件需求",storyVersion:"软件需求版本",title:"用例名称",precondition:"前置条件",keywords:"关键词",pri:"优先级",type:"用例类型",auto:"自动化测试用例",frame:"自动化测试框架",stage:"适用环节",howRun:"测试方式",script:"自动化脚本",scriptedBy:"脚本由谁创建",scriptedDate:"脚本创建日期",scriptStatus:"脚本状态",scriptLocation:"脚本地址",status:"用例状态",subStatus:"子状态",color:"标题颜色",frequency:"使用频率",order:"排序",openedBy:"由谁创建",openedDate:"创建日期",reviewedBy:"由谁评审",reviewedDate:"评审时间",lastEditedBy:"最后修改者",lastEditedDate:"修改日期",version:"用例版本",linkCase:"相关用例",fromBug:"来源Bug",fromCaseID:"用例来源ID",fromCaseVersion:"用例来源版本",lastRunner:"执行人",lastRunDate:"执行时间",lastRunResult:"结果",scene:"所属场景",sort:"排序",deleted:"已删除"},task:{id:"编号",project:"所属项目",parent:"父任务",isParent:"是父任务",isTpl:"是模板",path:"路径",execution:"所属执行",module:"所属模块",design:"相关设计",story:"相关软件需求",storyVersion:"软件需求版本",designVersion:"设计版本",fromBug:"来源Bug",feedback:"相关反馈",fromIssue:"来源问题",docs:"关联文档",docVersions:"文档版本",name:"任务名称",type:"任务类型",mode:"任务模式",pri:"优先级",estimate:"最初预计",consumed:"总计消耗",left:"预计剩余",deadline:"截止日期",status:"任务状态",subStatus:"子状态",color:"标题颜色",mailto:"抄送给",keywords:"关键词",desc:"任务描述",version:"版本",openedBy:"由谁创建",openedDate:"创建日期",assignedTo:"指派给",assignedDate:"指派日期",estStarted:"预计开始",realStarted:"实际开始",finishedBy:"由谁完成",finishedDate:"实际完成",finishedList:"完成者列表",canceledBy:"由谁取消",canceledDate:"取消时间",closedBy:"由谁关闭",closedDate:"关闭时间",planDuration:"计划持续天数",realDuration:"实际持续天数",closedReason:"关闭原因",lastEditedBy:"最后修改",lastEditedDate:"最后修改日期",activatedDate:"激活日期",order:"排序",repo:"所属代码库",mr:"合并请求",entry:"代码路径",lines:"代码行",v1:"版本1",v2:"版本2",vision:"所属界面",deleted:"已删除"},issue:{id:"编号",resolvedBy:"解决者",project:"所属项目",execution:"所属执行",title:"问题名称",desc:"描述",pri:"优先级",severity:"严重程度",type:"类型",activity:"活动列表",deadline:"计划解决日期",resolution:"解决方式",resolutionComment:"解决方案",objectID:"关联对象",resolvedDate:"实际解决日期",status:"结果",owner:"提出人",lib:"问题库",from:"来源",version:"版本号",createdBy:"由谁创建",createdDate:"创建日期",editedBy:"由谁编辑",editedDate:"编辑日期",activateBy:"由谁激活",activateDate:"激活日期",closedBy:"由谁关闭",closedDate:"关闭日期",assignedTo:"指派给",assignedBy:"由谁指派",assignedDate:"指派时间",approvedDate:"审批日期",relatedObject:"关联对象",risk:"关联风险",files:"附件",sourceName:"来源名称",deleted:"已删除"},risk:{id:"ID",project:"所属项目",execution:"所属执行",name:"风险名称",source:"来源",category:"类型",strategy:"策略",status:"状态",impact:"影响程度",probability:"发生概率",rate:"风险系数",pri:"优先级",identifiedDate:"识别日期",prevention:"应对措施",remedy:"响应措施",plannedClosedDate:"计划关闭日期",actualClosedDate:"实际关闭日期",lib:"风险库",from:"来源",version:"版本号",createdBy:"由谁创建",createdDate:"创建日期",editedBy:"由谁编辑",editedDate:"编辑日期",resolution:"解决措施",resolvedBy:"解决者",activateBy:"由谁激活",activateDate:"激活日期",assignedTo:"指派给",assignedDate:"指派日期",closedBy:"由谁关闭",closedDate:"关闭日期",cancelBy:"由谁取消",cancelDate:"取消日期",cancelReason:"取消原因",hangupBy:"由谁挂起",hangupDate:"挂起日期",trackedBy:"由谁跟踪",trackedDate:"跟踪日期",approvedDate:"审批日期",relatedObject:"关联对象",issues:"关联问题",files:"附件",deleted:"已删除"},meeting:{id:"ID",project:"所属项目",execution:"所属执行",name:"会议名称",type:"会议类型",begin:"开始时间",end:"结束时间",dept:"所属部门",mode:"会议模式",host:"主持人",participant:"参会人员",date:"会议日期",room:"会议室",minutes:"会议记录",minutedBy:"由谁记录",minutedDate:"记录日期",objectType:"关联类型",objectID:"关联对象",createdBy:"由谁创建",createdDate:"创建日期",editedBy:"由谁编辑",editedDate:"编辑日期",participantName:"参会人员姓名",files:"附件",objectName:"关联对象名称",deleted:"已删除"},feedback:{id:"编号",product:"所属产品",module:"所属模块",title:"反馈名称",type:"类型",solution:"处理方案",desc:"描述",pri:"优先级",status:"状态",subStatus:"子状态",prevStatus:"之前状态",public:"公开",notify:"通知",notifyEmail:"通知邮箱",source:"来源公司",likes:"点赞人",result:"转化结果",faq:"FAQ",openedBy:"创建者",openedDate:"创建时间",reviewedBy:"由谁评审",reviewedDate:"评审时间",processedBy:"由谁处理",processedDate:"处理时间",closedBy:"由谁关闭",closedDate:"关闭时间",closedReason:"关闭原因",editedBy:"最后处理人",editedDate:"最后操作时间",assignedTo:"指派给",prevAssignedTo:"之前指派人",assignedDate:"指派时间",activatedBy:"由谁激活",activatedDate:"激活时间",feedbackBy:"反馈者",repeatFeedback:"重复反馈",mailto:"抄送给",keywords:"关键词",deleted:"已删除"},ticket:{id:"工单编号",product:"所属产品",module:"所属模块",title:"工单名称",type:"类型",desc:"描述",openedBuild:"影响版本",feedback:"由反馈转化",assignedTo:"指派给",assignedDate:"指派日期",realStarted:"实际开始",startedBy:"由谁开始",startedDate:"开始时间",deadline:"截止日期",pri:"优先级",estimate:"最初预计",left:"预计剩余",status:"状态",openedBy:"由谁创建",openedDate:"创建时间",activatedCount:"激活次数",activatedBy:"由谁激活",activatedDate:"激活时间",closedBy:"关闭者",closedDate:"关闭时间",closedReason:"关闭原因",finishedBy:"完成者",finishedDate:"完成时间",resolvedBy:"解决者",resolvedDate:"解决时间",resolution:"解决方案",editedBy:"由谁编辑",editedDate:"最后修改时间",keywords:"关键字",repeatTicket:"重复工单",mailto:"抄送给",deleted:"已删除"},system:{id:"编号",name:"应用名称",product:"所属产品",integrated:"集成应用",latestRelease:"最新版本号",latestDate:"最新发布日期",children:"包含应用",status:"状态",desc:"描述",createdBy:"由谁创建",createdDate:"创建日期",editedBy:"由谁编辑",editedDate:"编辑日期",deleted:"已删除"},build:{id:"ID",project:"所属项目",product:"所属产品",branch:"平台/分支",execution:"所属迭代",builds:"包含构建",name:"名称",system:"所属应用",scmPath:"源代码地址",filePath:"下载地址",date:"打包日期",stories:"完成的软件需求",bugs:"解决的Bug",artifactRepoID:"制品库",builder:"构建者",desc:"描述",createdBy:"由谁创建",createdDate:"创建时间",deleted:"已删除"},testtask:{id:"编号",project:"所属项目",product:"所属产品",name:"测试单名称",execution:"所属执行",build:"提测构建",joint:"是否联调测试单",type:"测试类型",owner:"负责人",pri:"优先级",begin:"开始日期",end:"结束日期",realBegan:"实际开始日期",realFinishedDate:"实际完成日期",mailto:"抄送给",desc:"描述",report:"测试总结",status:"当前状态",testreport:"相关测试报告",auto:"自动化",subStatus:"子状态",createdBy:"由谁创建",createdDate:"创建时间",members:"参与人",deleted:"已删除"},release:{id:"ID",project:"所属项目",product:"所属产品",branch:"平台/分支",shadow:"影子构建",build:"构建",name:"应用版本号",system:"应用",releases:"包含应用",marker:"里程碑",date:"计划发布日期",releasedDate:"实际发布日期",stories:"完成的软件需求",bugs:"解决的Bug",leftBugs:"遗留的Bug",desc:"描述",mailto:"抄送给",notify:"发送通知",status:"发布状态",subStatus:"子状态",createdBy:"由谁创建",createdDate:"创建时间",deleted:"已删除"},file:{id:"编号",pathname:"路径",title:"标题",extension:"文件类型",size:"大小",objectType:"对象类型",objectID:"对象ID",gid:"全局标识",addedBy:"由谁添加",addedDate:"添加时间",downloads:"下载次数",extra:"备注",deleted:"已删除"},workflow:{id:"编号",group:"流程分组",parent:"父工作流",child:"子工作流",type:"类型",navigator:"所属导航",app:"所属应用",position:"位置",module:"工作流代号",table:"工作流表",name:"工作流名",icon:"图标",titleField:"标题字段",contentField:"内容字段",flowchart:"流程图",js:"JS",css:"CSS",order:"顺序",buildin:"内置",role:"角色",belong:"从属于",administrator:"白名单",desc:"描述",version:"版本",status:"状态",approval:"审批",createdBy:"由谁创建",createdDate:"创建时间",editedBy:"由谁编辑",editedDate:"编辑时间",vision:"所属界面"},doc:{id:"ID",project:"所属项目",product:"所属产品",execution:"所属执行",lib:"所属库",template:"模板",templateType:"模板类型",templateDesc:"模板描述",objects:"所属对象",chapterType:"章节类型",cycle:"周期",cycleConfig:"周期设置",module:"所属父级",reportModule:"报表模块",title:"文档标题",keywords:"关键字",type:"文档类型",status:"文档状态",parent:"所属父级",path:"路径",grade:"层级",order:"排序",views:"浏览次数",assetLib:"资产库",assetLibType:"资产库类型",from:"来源文档",fromVersion:"来源版本",draft:"草稿",collects:"被收藏量",weeklyDate:"周报日期",addedBy:"创建者",addedDate:"创建日期",assignedTo:"指派给",assignedDate:"指派日期",approvedDate:"审批日期",editedBy:"修改者",editedDate:"修改日期",editingDate:"正在修改者和时间",editedList:"文档编辑者",mailto:"抄送给",acl:"权限",isDeliverable:"是否为交付物",groups:"分组",users:"用户",readGroups:"只读分组",readUsers:"只读用户",version:"版本号",builtIn:"内置",frozen:"冻结状态",vision:"所属界面",collector:"收藏者",releasedDate:"发布日期",releasedBy:"由谁发布",files:"附件",digest:"文档摘要",html:"文档正文(HTML格式)",content:"文档正文(Markdown格式)",rawContent:"原始内容(JSON格式)",contentType:"文档格式",contentVersion:"内容版本",moduleName:"模块名称",executionName:"执行名称",productName:"产品名称",privs:"权限",editors:"编辑者",readable:"可阅读",editable:"可编辑",deleted:"已删除"},todo:{id:"编号",account:"由谁创建",date:"日期",begin:"开始",end:"结束",feedback:"相关反馈",type:"类型",cycle:"周期",objectID:"关联编号",pri:"优先级",name:"待办名称",desc:"描述",status:"状态",private:"私人事务",config:"配置",assignedTo:"指派给",assignedBy:"由谁指派",assignedDate:"指派日期",finishedBy:"由谁完成",finishedDate:"完成时间",closedBy:"由谁关闭",closedDate:"关闭时间",vision:"所属界面",deleted:"已删除"},my:{name:"名称",code:"代号",pri:"优先级",hours:"工时/天",todo:"我的待办",calendar:"日程",work:"待处理",contribute:"贡献",task:"我的任务",bug:"我的Bug",story:"我的软件需求",epic:"我的业务需求",requirement:"我的用户需求",doc:"我的文档",project:"我的项目",execution:"我的执行",issue:"我的问题",risk:"我的风险",reviewissue:"我的评审问题",profile:"我的档案",dynamic:"我的动态",team:"团队",audit:"审批",score:"我的积分",preference:"个性化设置",projects:"所属项目",executions:"所属执行",assignedToMe:"指派给我",programLink:"项目集默认着陆页",productLink:"产品默认着陆页",projectLink:"项目默认着陆页",executionLink:"执行默认着陆页",docLink:"文档默认着陆页",devopsLink:"DevOps视图着陆页",devopsspaceLink:"DevOps空间着陆页",title:"评审标题",status:"状态",type:"评审对象",product:"所属产品",reviewer:"审批人",opinion:"审批意见",result:"评审结果",openedBy:"提交人",time:"提交时间",reviewTime:"评审时间"}};function d(D){return v().get(D.toLowerCase())}function w(D,B){let W=d(D);if(!W)return;let Q=B==="ls"?"list":B;return W.actions.find(($)=>String($.name).toLowerCase()===Q.toLowerCase())}function l(D,B,W){let{roles:Q}=W??{},$=[],X=w(D,B);if(!X)return[];if(X.pathParams&&(!Q||Q.includes("path")))Object.entries(X.pathParams).forEach(([Y,H])=>{if(typeof H==="string")H={description:H};$.push({name:Y,role:"path",required:!0,...H})});if(X.params&&(!Q||Q.includes("query")))$.push(...X.params.map((Y)=>({...Y,role:"query"})));let J=X.requestBody?.schema;if(J&&(!Q||Q.includes("body")))if(J.type==="object"){let Y=new Set(J.required?J.required.map((H)=>H.toLowerCase()):[]);Object.entries(J.properties).forEach(([H,L])=>{let G=L.type;$.push({...L,name:H,role:"body",required:L.required??Y.has(H.toLowerCase()),type:G==="integer"?"number":G??"string"})})}else $.push({name:"data",role:"body",required:!0,type:J.type});return $}function ZD(){return i().map((D)=>D.name)}function UD(D){return uB[D]??{}}function tD(D){if(Array.isArray(D))return D.filter((B)=>typeof B!=="function").map((B)=>tD(B));if(D&&typeof D==="object"){let B={};for(let[W,Q]of Object.entries(D))if(typeof Q!=="function")B[W]=tD(Q);return B}return D}function zD(D={}){let B=D.raw??!1,W=D.jsonSafe??!0,Q={};return v().forEach(($)=>{let X=B?$:{...$,actions:$.actions.map((J)=>{let{requestBody:Y,...H}=J;return{...H,...Y?.mediaType?{bodyMediaType:Y.mediaType}:{},bodyParams:Y?l($.name,J.name,{roles:["body"]}):[]}})};Q[$.name]=W?tD(X):X}),Q}EB(nD);nD();var K2=52428800,iB={".avif":"image/avif",".csv":"text/csv",".gif":"image/gif",".htm":"text/html",".html":"text/html",".jpeg":"image/jpeg",".jpg":"image/jpeg",".json":"application/json",".md":"text/markdown",".pdf":"application/pdf",".png":"image/png",".svg":"image/svg+xml",".txt":"text/plain",".webp":"image/webp",".zip":"application/zip"};function pB(D){return import(D)}function lD(D){return typeof Blob<"u"&&D instanceof Blob}function I2(D){return j(D)&&typeof D.path==="string"}function j2(D){return j(D)&&Object.prototype.hasOwnProperty.call(D,"data")&&typeof D.filename==="string"}function sB(D){let B=D.toLowerCase(),W=B.lastIndexOf(".");return W>=0?iB[B.slice(W)]??"application/octet-stream":"application/octet-stream"}function V2(D){let B=D.split(";",1)[0]?.trim().toLowerCase();return Object.entries(iB).find(([,Q])=>Q===B)?.[0]??".bin"}function O2(D){if(D===void 0)return K2;if(!Number.isFinite(D)||D<1)throw new q("E_INVALID_PARAM",{param:"maxUploadBytes",value:String(D)});return Math.floor(D)}function LD(D,B){if(D>B)throw new q("E_UPLOAD_FILE_TOO_LARGE",{size:D,limit:B})}function rD(D,B,W){let $=(D?.trim()||B.trim()).split(/[\\/]/).at(-1)?.trim()??"";if(!$)throw new q("E_INVALID_UPLOAD_SOURCE",{field:W});return $}function A2(D){return j(D)&&typeof D.code==="string"?D.code:void 0}function nB(D){let B=new Uint8Array(D.buffer,D.byteOffset,D.byteLength),W=new Uint8Array(B.byteLength);return W.set(B),W}function _2(D,B,W){if(lD(D))return D.type===B?D:new Blob([D],{type:B});if(D instanceof ArrayBuffer)return new Blob([D],{type:B});if(ArrayBuffer.isView(D))return new Blob([nB(D)],{type:B});throw new q("E_INVALID_UPLOAD_SOURCE",{field:W})}async function g2(D,B,W){if(!m())throw new q("E_UPLOAD_PATH_UNSUPPORTED");let Q=typeof D==="string"?D:D.path,$=typeof D==="string"?void 0:D.filename,X=typeof D==="string"?void 0:D.contentType,[J,Y]=await Promise.all([pB("node:fs/promises"),pB("node:path")]),H;try{H=await J.stat(Q)}catch(I){if(A2(I)==="ENOENT")throw new q("E_UPLOAD_FILE_NOT_FOUND",{path:Q},I);throw new q("E_UPLOAD_FILE_READ_FAILED",{path:Q},I)}if(!H.isFile())throw new q("E_INVALID_UPLOAD_SOURCE",{field:B},{path:Q});LD(H.size,W);let L=rD($,Y.basename(Q),B),G=X?.trim()||sB(L),C=globalThis.Bun;if(C?.file){let I=C.file(Q);return LD(I.size,W),{blob:(Boolean(X?.trim())||!I.type)&&I.type!==G?new Blob([I],{type:G}):I,filename:L}}try{let I=await J.readFile(Q);return LD(I.byteLength,W),{blob:new Blob([nB(I)],{type:G}),filename:L}}catch(I){throw new q("E_UPLOAD_FILE_READ_FAILED",{path:Q},I)}}async function P2(D,B,W){if(typeof D==="string"||I2(D))return g2(D,B,W);if(lD(D)){LD(D.size,W);let Q=D.type||"application/octet-stream",$=typeof D.name==="string"?D.name:`${B}${V2(Q)}`,X=rD($,`${B}.bin`,B);return{blob:D.type===Q?D:new Blob([D],{type:Q}),filename:X}}if(j2(D)){let Q=rD(D.filename,B,B),$=D.contentType?.trim()||(lD(D.data)?D.data.type:"")||sB(Q),X=_2(D.data,$,B);return LD(X.size,W),{blob:X,filename:Q}}throw new q("E_INVALID_UPLOAD_SOURCE",{field:B})}function F2(D){if(!j(D))return!1;if(D.format==="binary")return!0;return D.type==="array"&&j(D.items)&&D.items.format==="binary"}function tB(D,B,W){if(W===void 0)return;if(Array.isArray(W)){for(let Q of W)tB(D,B,Q);return}if(W===null){D.append(B,"");return}D.append(B,typeof W==="object"?JSON.stringify(W):String(W))}async function Z2(D,B){let W=new FormData,Q=j(D.action.requestBody?.schema.properties)?D.action.requestBody.schema.properties:{};for(let[$,X]of Object.entries(D.data??{})){if(!F2(Q[$])){tB(W,$,X);continue}let J=Array.isArray(X)?X:[X];if(J.length===0)throw new q("E_INVALID_UPLOAD_SOURCE",{field:$});for(let Y of J){let H=await P2(Y,$,B);W.append($,H.blob,H.filename)}}return W}async function lB(D,B={}){let W=D.action.requestBody?.mediaType??"application/json";if(W==="multipart/form-data")return{body:await Z2(D,O2(B.maxUploadBytes)),bodyType:"raw"};if(W==="application/x-www-form-urlencoded")return{body:D.data,bodyType:"form"};return{body:D.data}}function U2(D){let B=D.split("/");if(B.length>2||!B[0])throw new q("E_INVALID_REQUEST_NAME");let[W,Q]=B;if(!Q?.length)return{moduleName:W,actionName:"list"};if(Number.isInteger(Number(Q)))return{moduleName:W,actionName:"get",id:Number(Q)};return{moduleName:W,actionName:Q}}function z2(D){let B=D;if(typeof B==="string")try{B=JSON.parse(B)}catch{return new Set}if(B&&typeof B==="object"&&!Array.isArray(B))return new Set(Object.keys(B));return new Set}async function E2(D,B,W,Q){let $=B.requestBody?.schema?.properties,X=D.actions.find((L)=>L.type==="get"&&L.path===B.path);if(!$||!X)return W;let J=(await ED(`${D.name}/${X.name}`,W,{client:Q.client,timeout:Q.timeout,insecure:Q.insecure,throwOnFail:!0})).data;if(!j(J))return W;let Y=z2(W.data),H={...W};for(let L of Object.keys($))if(!(Object.prototype.hasOwnProperty.call(W,L)||Y.has(L))&&Object.prototype.hasOwnProperty.call(J,L))H[L]=J[L];return H}function R2(D){if(typeof D==="string")return D;if(D===void 0)return;try{return JSON.stringify(D)}catch{return String(D)}}function S2(D){for(let B of["code","errorCode","errno"]){let W=D[B];if(typeof W==="string"||typeof W==="number")return W}return}function M2(D){return Boolean(D.convert||D.filter&&D.filter.length>0||D.search&&D.search.length>0||D.sort||D.limit||D.pick&&D.pick.length>0)}function N2(D,B){if(Array.isArray(D)){if(!M2(B))return D;if(D.every(j))return h(D,{convert:B.convert,filter:B.filter,search:B.search,searchFields:B.searchFields,sort:B.sort,limit:B.limit,pick:B.pick});let W=Number(B.limit);return Number.isFinite(W)&&W>=0?D.slice(0,Math.floor(W)):D}if(j(D)&&(B.convertSingle||B.pick&&B.pick.length>0))return h(D,{convert:B.convertSingle,pick:B.pick});return D}function T2(D,B,W){if(!B||typeof B!=="object"||Array.isArray(B))return{status:"success",data:B};let Q=B,$=Q.status==="fail"?"fail":"success",X=N2(_D(D.action,Q,D.params,W),W),J=Q.message,Y=MB(D.action,Q,D.params,W),H={status:$,message:R2(J),data:X,pager:Y?{total:Number(Y.recTotal),page:Number(Y.pageID),recPerPage:Number(Y.recPerPage)}:void 0};if(J!==void 0&&typeof J!=="string")H.rawMessage=J;let L=S2(Q);if(L!==void 0)H.apiCode=L;if($==="fail")H.raw=Q;return H}async function ED(D,B={},W={}){let Q=x(),$=W.client??Q.client;if(!$)throw new q("E_NO_GLOBAL_CLIENT");let{moduleName:X,actionName:J,id:Y}=U2(D),H=d(X);if(!H)throw new q("E_INVALID_MODULE",{module:X});let L=B.recPerPage??W.recPerPage??Q.recPerPage,G={...B,...Y!==void 0?{id:Y}:{},...L!==void 0?{recPerPage:L}:{}},C=w(X,J);if(!C)throw new q("E_INVALID_ACTION",{module:X,action:J});let I=C.type==="update"&&(W.autoFill??Q.autoFill)?await E2(H,C,G,W):G,K=SB(H,J,I),F=await lB(K,{maxUploadBytes:W.maxUploadBytes}),g=await $.request(K.path,{method:String(K.action.method).toUpperCase(),query:K.query,body:F.body,bodyType:F.bodyType,timeout:W.timeout??Q.timeout,insecure:W.insecure??Q.insecure});if(W.raw)return g;let O={...W,limit:W.limit??Q.limit},Z=T2(K,g,O);if(Z.status==="fail"&&(W.throwOnFail??Q.throwOnFail))throw new q("E_API_FAILED",{message:Z.message??""},Z);return Z}var aD="2026-08-29T09:25:28.910Z",oD="0.6.6";var eD=globalThis;eD.ZentaoAPI=RD;if(eD.window)eD.window.ZentaoAPI=RD;})();
|