From d4b02745e18a2423681dbc487a607517ceae51d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E4=BC=8A=E5=B8=86?= <15818603+Osborn-lyf@user.noreply.gitee.com> Date: Sat, 10 Oct 2026 11:11:44 +0800 Subject: [PATCH] =?UTF-8?q?feat=EF=BC=9A=E7=BB=91=E5=AE=9A=E8=AE=BE?= =?UTF-8?q?=E5=A4=87=E5=92=8C=E8=AE=BE=E5=A4=87=E8=AF=A6=E6=83=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env.development | 3 +- .env.example | 9 +- .hbuilderx/launch.json | 14 + .openapi-cache.json | 1 + .tmp-openapi-out.txt | 0 package-lock.json | 60 --- project.config.json | 24 ++ project.private.config.json | 15 + src/api/auth.ts | 8 +- src/api/request.ts | 91 ++-- src/components/app-tab-bar/index.vue | 3 +- src/manifest.json | 18 +- src/pages.json | 7 + src/pages/add-device/add-device.api.ts | 11 + src/pages/add-device/add-device.scss | 5 + src/pages/add-device/add-device.types.ts | 57 +++ src/pages/add-device/complete/complete.scss | 5 + src/pages/add-device/complete/index.vue | 19 +- .../complete/use-complete-device.ts | 75 +++- src/pages/add-device/index.vue | 12 +- src/pages/add-device/pair/index.vue | 15 +- src/pages/add-device/pair/pair.types.ts | 5 + src/pages/add-device/pair/use-pair-device.ts | 19 +- src/pages/add-device/scan/index.vue | 11 +- src/pages/add-device/scan/scan.scss | 16 + src/pages/add-device/scan/scan.types.ts | 5 + src/pages/add-device/scan/scan.utils.ts | 37 ++ src/pages/add-device/scan/use-scan-device.ts | 97 ++++- src/pages/add-device/use-add-device.ts | 22 +- src/pages/agreement/agreement.api.ts | 11 +- src/pages/agreement/agreement.ids.ts | 37 +- src/pages/agreement/agreement.types.ts | 9 + src/pages/agreement/use-agreement.ts | 7 +- .../device/components/device-card/index.vue | 147 +++++++ .../device/components/device-header/index.vue | 263 +++++++++++- .../device/components/device-list/index.vue | 85 ++++ .../operation-success-toast/index.vue | 91 ++++ .../components/room-location-dialog/index.vue | 154 +++++++ .../filter-replace-dialog/index.vue | 115 +++++ .../run-mode-explain-dialog/index.vue | 210 +++++++++ .../device/detail/device-bluetooth-read.ts | 92 ++++ src/pages/device/detail/device-detail.api.ts | 24 ++ src/pages/device/detail/device-detail.scss | 400 ++++++++++++++++++ .../device/detail/device-detail.types.ts | 57 +++ .../device/detail/device-detail.utils.ts | 113 +++++ src/pages/device/detail/index.vue | 206 +++++++++ .../detail/use-device-bluetooth-sync.ts | 185 ++++++++ src/pages/device/detail/use-device-detail.ts | 223 ++++++++++ src/pages/device/device.api.ts | 11 + src/pages/device/device.types.ts | 32 ++ src/pages/device/device.utils.ts | 67 +++ src/pages/device/index.vue | 40 +- src/pages/device/use-device.ts | 133 +++++- src/pages/login/login.api.ts | 6 +- src/pages/login/use-login.ts | 12 +- src/static/完成@2x.png | Bin 0 -> 538 bytes src/static/组 15226@2x.png | Bin 0 -> 92000 bytes src/static/组 15227@2x.png | Bin 0 -> 1016 bytes src/static/路径1.png | Bin 0 -> 702 bytes src/types/api.ts | 4 + src/utils/auth-token.ts | 44 ++ src/utils/bluetooth.ts | 292 +++++++++++++ src/utils/static-assets.ts | 12 + tmp-openapi.json | 1 + 64 files changed, 3526 insertions(+), 221 deletions(-) create mode 100644 .hbuilderx/launch.json create mode 100644 .openapi-cache.json create mode 100644 .tmp-openapi-out.txt create mode 100644 project.config.json create mode 100644 project.private.config.json create mode 100644 src/pages/add-device/add-device.api.ts create mode 100644 src/pages/add-device/scan/scan.utils.ts create mode 100644 src/pages/device/components/device-card/index.vue create mode 100644 src/pages/device/components/device-list/index.vue create mode 100644 src/pages/device/components/operation-success-toast/index.vue create mode 100644 src/pages/device/components/room-location-dialog/index.vue create mode 100644 src/pages/device/detail/components/filter-replace-dialog/index.vue create mode 100644 src/pages/device/detail/components/run-mode-explain-dialog/index.vue create mode 100644 src/pages/device/detail/device-bluetooth-read.ts create mode 100644 src/pages/device/detail/device-detail.api.ts create mode 100644 src/pages/device/detail/device-detail.scss create mode 100644 src/pages/device/detail/device-detail.types.ts create mode 100644 src/pages/device/detail/device-detail.utils.ts create mode 100644 src/pages/device/detail/index.vue create mode 100644 src/pages/device/detail/use-device-bluetooth-sync.ts create mode 100644 src/pages/device/detail/use-device-detail.ts create mode 100644 src/pages/device/device.api.ts create mode 100644 src/pages/device/device.utils.ts create mode 100644 src/static/完成@2x.png create mode 100644 src/static/组 15226@2x.png create mode 100644 src/static/组 15227@2x.png create mode 100644 src/static/路径1.png create mode 100644 src/utils/auth-token.ts create mode 100644 src/utils/bluetooth.ts create mode 100644 tmp-openapi.json diff --git a/.env.development b/.env.development index f749840..2e63792 100644 --- a/.env.development +++ b/.env.development @@ -1,4 +1,3 @@ VITE_API_BASE_URL=http://192.168.0.222:8082 VITE_API_PROXY_TARGET=http://192.168.0.222:8082 -VITE_AGREEMENT_ID_SERVICE=0 -VITE_AGREEMENT_ID_PRIVACY=0 +VITE_API_CLIENT_ID=app diff --git a/.env.example b/.env.example index 41100fa..6b3e71f 100644 --- a/.env.example +++ b/.env.example @@ -4,6 +4,9 @@ VITE_API_BASE_URL=http://192.168.0.222:8082 # H5 开发:BASE_URL 留空时可走 vite 代理 /app VITE_API_PROXY_TARGET=http://192.168.0.222:8082 -# 协议详情 agreementId(POST /app/auth/agreement/detail) -VITE_AGREEMENT_ID_SERVICE=0 -VITE_AGREEMENT_ID_PRIVACY=0 +# RuoYi-Vue-Plus App 端 clientId(请求头 clientId) +VITE_API_CLIENT_ID=app + +# 可选:配置后详情页会通过 BLE 特征值读取设备运行数据(JSON) +# VITE_BLE_SERVICE_UUID= +# VITE_BLE_RUNTIME_CHARACTERISTIC_UUID= diff --git a/.hbuilderx/launch.json b/.hbuilderx/launch.json new file mode 100644 index 0000000..a5db135 --- /dev/null +++ b/.hbuilderx/launch.json @@ -0,0 +1,14 @@ +{ + "version" : "1.0", + "configurations" : [ + { + "customPlaygroundType" : "device", + "playground" : "standard", + "type" : "uni-app:app-ios" + }, + { + "playground" : "standard", + "type" : "uni-app:app-android" + } + ] +} diff --git a/.openapi-cache.json b/.openapi-cache.json new file mode 100644 index 0000000..1a8268e --- /dev/null +++ b/.openapi-cache.json @@ -0,0 +1 @@ +{"openapi":"3.1.0","info":{"title":"鏍囬锛歊uoYi-Vue-Plus鍚庡彴绠$悊绯荤粺_鎺ュ彛鏂囨。","description":"鎻忚堪锛氱敤浜庣鐞嗛泦鍥㈡棗涓嬪叕鍙哥殑浜哄憳淇℃伅,鍏蜂綋鍖呮嫭XXX,XXX妯″潡...","contact":{"name":"Lion Li","url":"https://gitee.com/dromara/RuoYi-Vue-Plus","email":"crazylionli@163.com"},"version":"鐗堟湰鍙? 6.0.0"},"servers":[{"url":"http://192.168.0.222:8082","description":"Generated server url"}],"tags":[{"name":"浼樺厛闃熷垪 婕旂ず妗堜緥","description":"浼樺厛闃熷垪 婕旂ず妗堜緥\n

\n 杞婚噺绾ч槦鍒?閲嶉噺绾ф暟鎹噺 璇蜂娇鐢?MQ\n

\n 闆嗙兢娴嬭瘯閫氳繃 鍚屼竴涓秷鎭彧浼氳娑堣垂涓€娆?鍋氬ソ浜嬪姟琛ュ伩\n 闆嗙兢娴嬭瘯娴佺▼ 鍦ㄥ叾涓竴鍙板彂閫佹暟鎹?涓ょ鍒嗗埆璋冪敤鑾峰彇鎺ュ彛 涓€娆¤幏鍙栦竴鏉?},{"name":"mqtt 婕旂ず妗堜緥","description":"mqtt 婕旂ず妗堜緥\n

\n 鐢ㄦ硶鏂囨。 ...\n 娴嬭瘯server鎼缓:\n 鍙墽琛屼笅杞藉叾浠杕qtt鏈嶅姟绔惌寤篭n 涔熷彲浣跨敤 mica鑷甫鐨剆erver鎼缓 ..."},{"name":"娴嬭瘯鍥介檯鍖?,"description":"娴嬭瘯鍥介檯鍖?},{"name":"宀椾綅淇℃伅鎿嶄綔澶勭悊","description":"宀椾綅淇℃伅鎿嶄綔澶勭悊"},{"name":"棣栭〉","description":"棣栭〉"},{"name":"浠诲姟绠$悊 鎺у埗灞?,"description":"浠诲姟绠$悊 鎺у埗灞?},{"name":"Redis 鍙戝竷璁㈤槄 婕旂ず妗堜緥","description":"Redis 鍙戝竷璁㈤槄 婕旂ず妗堜緥"},{"name":"MCP Client 婕旂ず妗堜緥銆?,"description":"MCP Client 婕旂ず妗堜緥銆俓n

\n 杩欎簺鎺ュ彛涓嶆槸 MCP 鍗忚鎺ュ彛锛屽彧鏄负浜嗗湪鍚庡彴绯荤粺涓墜鍔ㄨЕ鍙?MCP Client 璋冪敤銆俓n 鐪熷疄 MCP Server 鍏ュ彛鐢?Spring AI 鎸傝浇鍒?`/mcp`銆俓n

\n 璋冪敤绀轰緥锛歕n

\n 褰?`spring.ai.mcp.client.enabled=false` 鏃讹紝鎺ュ彛浼氳繑鍥炴彁绀猴紝涓嶅奖鍝嶅簲鐢ㄥ惎鍔ㄣ€?},{"name":"App 瀹跺涵绠$悊鎺у埗鍣?,"description":"App 瀹跺涵绠$悊鎺у埗鍣╘n

\n 鎻愪緵瀹跺涵鐨勫鍒犳煡鍙婇粯璁ゅ搴垏鎹㈠姛鑳斤紝鎵€鏈夋帴鍙e潎闇€鐧诲綍鎬併€?},{"name":"瑙掕壊淇℃伅","description":"瑙掕壊淇℃伅"},{"name":"鏁版嵁瀛楀吀淇℃伅","description":"鏁版嵁瀛楀吀淇℃伅"},{"name":"鏂囦欢涓婁紶 鎺у埗灞?,"description":"鏂囦欢涓婁紶 鎺у埗灞?},{"name":"App 鎴块棿浣嶇疆绠$悊鎺у埗鍣?,"description":"App 鎴块棿浣嶇疆绠$悊鎺у埗鍣╘n

\n 鎻愪緵鎴块棿鍐呮埧闂翠綅缃殑澧炲垹鏌ユ敼鍔熻兘锛屾墍鏈夋帴鍙e潎闇€鐧诲綍鎬併€俓n 浣嶇疆褰掑睘浜庡搴紝鎿嶄綔鏃朵細鑷姩鏍¢獙褰撳墠鐢ㄦ埛瀵硅瀹跺涵鐨勬墍鏈夋潈銆?},{"name":"閭欢鍙戦€佹渚?,"description":"閭欢鍙戦€佹渚?},{"name":"spring-cache 婕旂ず妗堜緥","description":"spring-cache 婕旂ず妗堜緥"},{"name":"WebSocket 婕旂ず妗堜緥","description":"WebSocket 婕旂ず妗堜緥"},{"name":"娴嬭瘯鏁版嵁搴撳姞瑙e瘑鍔熻兘","description":"娴嬭瘯鏁版嵁搴撳姞瑙e瘑鍔熻兘"},{"name":"璇峰亣绀轰緥鎺у埗鍣紝婕旂ず涓氬姟鍗曟嵁涓庢祦绋嬪紩鎿庤仈鍔ㄧ殑鍏稿瀷鐢ㄦ硶銆?,"description":"璇峰亣绀轰緥鎺у埗鍣紝婕旂ず涓氬姟鍗曟嵁涓庢祦绋嬪紩鎿庤仈鍔ㄧ殑鍏稿瀷鐢ㄦ硶銆?},{"name":"娴佺▼瀹氫箟绠$悊 鎺у埗灞?,"description":"娴佺▼瀹氫箟绠$悊 鎺у埗灞?},{"name":"娴嬭瘯鍗曡〃Controller","description":"娴嬭瘯鍗曡〃Controller"},{"name":"閮ㄩ棬淇℃伅","description":"閮ㄩ棬淇℃伅"},{"name":"鍙傛暟閰嶇疆 淇℃伅鎿嶄綔澶勭悊","description":"鍙傛暟閰嶇疆 淇℃伅鎿嶄綔澶勭悊"},{"name":"App 璁惧鎺у埗鍣?,"description":"App 璁惧鎺у埗鍣╘n

\n 鎻愪緵璁惧缁戝畾绛夋帴鍙o紝鎵€鏈夋帴鍙e潎闇€鐧诲綍鎬併€?},{"name":"娴嬭瘯鍒嗗竷寮忛檺娴佹牱渚?,"description":"娴嬭瘯鍒嗗竷寮忛檺娴佹牱渚?},{"name":"娴嬭瘯鎵归噺鏂规硶","description":"娴嬭瘯鎵归噺鏂规硶"},{"name":"SSE 鎺у埗鍣?,"description":"SSE 鎺у埗鍣?},{"name":"App 鐢ㄦ埛璁よ瘉鎺у埗鍣?,"description":"App 鐢ㄦ埛璁よ瘉鎺у埗鍣╘n

\n 鍏紑鎺ュ彛浣跨敤 {@link SaIgnore SaIgnore} 鏀捐锛涢€€鍑烘帴鍙i渶瑕佺櫥褰曟€併€?},{"name":"楠岃瘉鐮佹搷浣滃鐞?,"description":"楠岃瘉鐮佹搷浣滃鐞?},{"name":"鐢ㄦ埛淇℃伅","description":"鐢ㄦ埛淇℃伅"},{"name":"瀵硅薄瀛樺偍閰嶇疆","description":"瀵硅薄瀛樺偍閰嶇疆"},{"name":"娴嬭瘯鏁版嵁鑴辨晱鎺у埗鍣?,"description":"娴嬭瘯鏁版嵁鑴辨晱鎺у埗鍣╘n

\n 榛樿绠$悊鍛樹笉杩囨护\n 闇€鑷鏍规嵁涓氬姟閲嶅啓瀹炵幇"},{"name":"涓汉淇℃伅 涓氬姟澶勭悊","description":"涓汉淇℃伅 涓氬姟澶勭悊"},{"name":"鍚庡彴璁惧绠$悊銆?,"description":"鍚庡彴璁惧绠$悊銆?},{"name":"娴佺▼ SpEL 琛ㄨ揪寮忓畾涔夋帶鍒跺櫒锛岃礋璐h〃杈惧紡瑙勫垯鐨勫鍒犳敼鏌ャ€?,"description":"娴佺▼ SpEL 琛ㄨ揪寮忓畾涔夋帶鍒跺櫒锛岃礋璐h〃杈惧紡瑙勫垯鐨勫鍒犳敼鏌ャ€?},{"name":"Snail AI OpenAPI 鎺у埗鍣?,"description":"Snail AI OpenAPI 鎺у埗鍣?},{"name":"鑿滃崟淇℃伅","description":"鑿滃崟淇℃伅"},{"name":"娴嬭瘯鏍戣〃Controller","description":"娴嬭瘯鏍戣〃Controller"},{"name":"娴佺▼瀹炰緥绠$悊 鎺у埗灞?,"description":"娴佺▼瀹炰緥绠$悊 鎺у埗灞?},{"name":"璁よ瘉鎺у埗鍣紝鎻愪緵鐧诲綍銆佹敞鍐屻€佺ぞ浜ょ粦瀹氬拰閫€鍑鸿兘鍔涖€?,"description":"璁よ瘉鎺у埗鍣紝鎻愪緵鐧诲綍銆佹敞鍐屻€佺ぞ浜ょ粦瀹氬拰閫€鍑鸿兘鍔涖€?},{"name":"绀句細鍖栧叧绯?,"description":"绀句細鍖栧叧绯?},{"name":"娴佺▼鍒嗙被","description":"娴佺▼鍒嗙被"},{"name":"绯荤粺璁块棶璁板綍","description":"绯荤粺璁块棶璁板綍"},{"name":"swagger3 鐢ㄦ硶绀轰緥","description":"swagger3 鐢ㄦ硶绀轰緥"},{"name":"App 鐢ㄦ埛璧勬枡鎺у埗鍣?,"description":"App 鐢ㄦ埛璧勬枡鎺у埗鍣?},{"name":"鍦ㄧ嚎鐢ㄦ埛鐩戞帶","description":"鍦ㄧ嚎鐢ㄦ埛鐩戞帶"},{"name":"鐭俊婕旂ず妗堜緥","description":"鐭俊婕旂ず妗堜緥\n 璇峰厛闃呰鏂囨。 鍚﹀垯鏃犳硶浣跨敤"},{"name":"SaToken 鏉冮檺娴嬭瘯 鎺ュ彛鏂囨。杈撳嚭娴嬭瘯","description":"SaToken 鏉冮檺娴嬭瘯 鎺ュ彛鏂囨。杈撳嚭娴嬭瘯"},{"name":"娴嬭瘯Excel鍔熻兘","description":"娴嬭瘯Excel鍔熻兘"},{"name":"鎿嶄綔鏃ュ織璁板綍","description":"鎿嶄綔鏃ュ織璁板綍"},{"name":"缂撳瓨鐩戞帶","description":"缂撳瓨鐩戞帶"},{"name":"鍏憡 淇℃伅鎿嶄綔澶勭悊","description":"鍏憡 淇℃伅鎿嶄綔澶勭悊"},{"name":"娑堟伅璁板綍鎺у埗鍣?,"description":"娑堟伅璁板綍鎺у埗鍣?},{"name":"瀹㈡埛绔鐞?,"description":"瀹㈡埛绔鐞?},{"name":"娴嬭瘯鍒嗗竷寮忛攣鐨勬牱渚?,"description":"娴嬭瘯鍒嗗竷寮忛攣鐨勬牱渚?}],"paths":{"/workflow/task/updateAssignee/{userId}":{"put":{"tags":["浠诲姟绠$悊 鎺у埗灞?],"summary":"鎵归噺淇敼浠诲姟鍔炵悊浜恒€?,"description":"鎵归噺淇敼浠诲姟鍔炵悊浜恒€?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `workflow:task:edit`

","operationId":"updateAssignee","parameters":[{"name":"userId","in":"path","description":"鍔炵悊浜篿d","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"浠诲姟id","content":{"application/json":{"schema":{"type":"array","items":{"type":"integer","format":"int64"}}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鎿嶄綔缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/workflow/spel":{"put":{"tags":["娴佺▼ SpEL 琛ㄨ揪寮忓畾涔夋帶鍒跺櫒锛岃礋璐h〃杈惧紡瑙勫垯鐨勫鍒犳敼鏌ャ€?],"summary":"淇敼娴佺▼ SpEL 琛ㄨ揪寮忓畾涔夈€?,"description":"淇敼娴佺▼ SpEL 琛ㄨ揪寮忓畾涔夈€?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `workflow:spel:edit`

","operationId":"edit","requestBody":{"description":"琛ㄨ揪寮忎俊鎭?,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FlowSpelBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鎿嶄綔缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}},"post":{"tags":["娴佺▼ SpEL 琛ㄨ揪寮忓畾涔夋帶鍒跺櫒锛岃礋璐h〃杈惧紡瑙勫垯鐨勫鍒犳敼鏌ャ€?],"summary":"鏂板娴佺▼ SpEL 琛ㄨ揪寮忓畾涔夈€?,"description":"鏂板娴佺▼ SpEL 琛ㄨ揪寮忓畾涔夈€?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `workflow:spel:add`

","operationId":"add","requestBody":{"description":"琛ㄨ揪寮忎俊鎭?,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FlowSpelBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鎿嶄綔缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/workflow/leave":{"put":{"tags":["璇峰亣绀轰緥鎺у埗鍣紝婕旂ず涓氬姟鍗曟嵁涓庢祦绋嬪紩鎿庤仈鍔ㄧ殑鍏稿瀷鐢ㄦ硶銆?],"summary":"淇敼璇峰亣鍗曘€?,"description":"淇敼璇峰亣鍗曘€?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `workflow:leave:edit`

","operationId":"edit_1","requestBody":{"description":"璇峰亣淇℃伅","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestLeaveBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"淇敼鍚庣殑璇峰亣鍗?,"content":{"*/*":{"schema":{"$ref":"#/components/schemas/RTestLeaveVo"}}}}}},"post":{"tags":["璇峰亣绀轰緥鎺у埗鍣紝婕旂ず涓氬姟鍗曟嵁涓庢祦绋嬪紩鎿庤仈鍔ㄧ殑鍏稿瀷鐢ㄦ硶銆?],"summary":"鏂板璇峰亣鍗曘€?,"description":"鏂板璇峰亣鍗曘€?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `workflow:leave:add`

","operationId":"add_1","requestBody":{"description":"璇峰亣淇℃伅","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestLeaveBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鏂板鍚庣殑璇峰亣鍗?,"content":{"*/*":{"schema":{"$ref":"#/components/schemas/RTestLeaveVo"}}}}}}},"/workflow/instance/updateVariable":{"put":{"tags":["娴佺▼瀹炰緥绠$悊 鎺у埗灞?],"summary":"淇敼娴佺▼鍙橀噺銆?,"description":"淇敼娴佺▼鍙橀噺銆?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `workflow:instance:variable`

","operationId":"updateVariable","requestBody":{"description":"鍙傛暟","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FlowVariableBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鎿嶄綔缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/workflow/instance/cancelProcessApply":{"put":{"tags":["娴佺▼瀹炰緥绠$悊 鎺у埗灞?],"summary":"鎾ら攢褰撳墠鐢宠浜哄彂璧风殑娴佺▼銆?,"description":"鎾ら攢褰撳墠鐢宠浜哄彂璧风殑娴佺▼銆?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `workflow:instance:cancel`

","operationId":"cancelProcessApply","requestBody":{"description":"鍙傛暟","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FlowCancelBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鎿嶄綔缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/workflow/instance/active/{id}":{"put":{"tags":["娴佺▼瀹炰緥绠$悊 鎺у埗灞?],"summary":"婵€娲绘垨鎸傝捣娴佺▼瀹炰緥銆?,"description":"婵€娲绘垨鎸傝捣娴佺▼瀹炰緥銆?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `workflow:instance:active`

","operationId":"active","parameters":[{"name":"id","in":"path","description":"娴佺▼瀹炰緥id","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"active","in":"query","description":"婵€娲?鎸傝捣","required":true,"schema":{"type":"boolean"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"澶勭悊缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RBoolean"}}}}}}},"/workflow/definition":{"put":{"tags":["娴佺▼瀹氫箟绠$悊 鎺у埗灞?],"summary":"淇敼娴佺▼瀹氫箟銆?,"description":"淇敼娴佺▼瀹氫箟銆?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `workflow:definition:edit`

","operationId":"edit_2","requestBody":{"description":"娴佺▼瀹氫箟淇℃伅","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FlowDefinition"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鎿嶄綔缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RBoolean"}}}}}},"post":{"tags":["娴佺▼瀹氫箟绠$悊 鎺у埗灞?],"summary":"鏂板娴佺▼瀹氫箟骞舵墽琛屾牸寮忔牎楠屻€?,"description":"鏂板娴佺▼瀹氫箟骞舵墽琛屾牸寮忔牎楠屻€?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `workflow:definition:add`

","operationId":"add_2","requestBody":{"description":"娴佺▼瀹氫箟淇℃伅","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FlowDefinition"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鎿嶄綔缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RBoolean"}}}}}}},"/workflow/definition/unPublish/{id}":{"put":{"tags":["娴佺▼瀹氫箟绠$悊 鎺у埗灞?],"summary":"鍙栨秷鍙戝竷娴佺▼瀹氫箟銆?,"description":"鍙栨秷鍙戝竷娴佺▼瀹氫箟銆?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `workflow:definition:publish`

","operationId":"unPublish","parameters":[{"name":"id","in":"path","description":"娴佺▼瀹氫箟id","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鎿嶄綔缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RBoolean"}}}}}}},"/workflow/definition/publish/{id}":{"put":{"tags":["娴佺▼瀹氫箟绠$悊 鎺у埗灞?],"summary":"鍙戝竷娴佺▼瀹氫箟锛屼娇鍏惰繘鍏ュ彲鐢ㄧ姸鎬併€?,"description":"鍙戝竷娴佺▼瀹氫箟锛屼娇鍏惰繘鍏ュ彲鐢ㄧ姸鎬併€?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `workflow:definition:publish`

","operationId":"publish","parameters":[{"name":"id","in":"path","description":"娴佺▼瀹氫箟id","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鍙戝竷缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RBoolean"}}}}}}},"/workflow/definition/active/{id}":{"put":{"tags":["娴佺▼瀹氫箟绠$悊 鎺у埗灞?],"summary":"婵€娲绘垨鎸傝捣娴佺▼瀹氫箟銆?,"description":"婵€娲绘垨鎸傝捣娴佺▼瀹氫箟銆?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `workflow:definition:active`

","operationId":"active_1","parameters":[{"name":"id","in":"path","description":"娴佺▼瀹氫箟id","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"active","in":"query","description":"婵€娲?鎸傝捣","required":true,"schema":{"type":"boolean"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"澶勭悊缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RBoolean"}}}}}}},"/workflow/category":{"put":{"tags":["娴佺▼鍒嗙被"],"summary":"淇敼娴佺▼鍒嗙被锛屽苟鏍¢獙鍚嶇О鍞竴鍙婄埗瀛愬叧绯诲悎娉曟€с€?,"description":"淇敼娴佺▼鍒嗙被锛屽苟鏍¢獙鍚嶇О鍞竴鍙婄埗瀛愬叧绯诲悎娉曟€с€?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `workflow:category:edit`

","operationId":"edit_3","requestBody":{"description":"鍒嗙被淇℃伅","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FlowCategoryBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鎿嶄綔缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}},"post":{"tags":["娴佺▼鍒嗙被"],"summary":"鏂板娴佺▼鍒嗙被锛屽苟鏍¢獙鍒嗙被鍚嶇О鍞竴鎬с€?,"description":"鏂板娴佺▼鍒嗙被锛屽苟鏍¢獙鍒嗙被鍚嶇О鍞竴鎬с€?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `workflow:category:add`

","operationId":"add_3","requestBody":{"description":"鍒嗙被淇℃伅","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FlowCategoryBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鎿嶄綔缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/system/user":{"put":{"tags":["鐢ㄦ埛淇℃伅"],"summary":"淇敼鐢ㄦ埛銆?,"description":"淇敼鐢ㄦ埛銆?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:user:edit`

","operationId":"edit_4","requestBody":{"description":"鐢ㄦ埛缂栬緫鍙傛暟","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SysUserBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鎿嶄綔缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}},"post":{"tags":["鐢ㄦ埛淇℃伅"],"summary":"鏂板鐢ㄦ埛銆?,"description":"鏂板鐢ㄦ埛銆?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:user:add`

","operationId":"add_4","requestBody":{"description":"鐢ㄦ埛鏂板鍙傛暟","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SysUserBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鎿嶄綔缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/system/user/resetPwd":{"put":{"tags":["鐢ㄦ埛淇℃伅"],"summary":"閲嶇疆鎸囧畾鐢ㄦ埛瀵嗙爜銆?,"description":"閲嶇疆鎸囧畾鐢ㄦ埛瀵嗙爜銆?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:user:resetPwd`

","operationId":"resetPwd","requestBody":{"description":"鐢ㄦ埛鍙傛暟","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SysUserBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鎿嶄綔缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/system/user/profile":{"get":{"tags":["涓汉淇℃伅 涓氬姟澶勭悊"],"summary":"鑾峰彇褰撳墠鐧诲綍鐢ㄦ埛鐨勪釜浜轰腑蹇冧俊鎭€?,"description":"鑾峰彇褰撳墠鐧诲綍鐢ㄦ埛鐨勪釜浜轰腑蹇冧俊鎭€?,"operationId":"profile","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鐢ㄦ埛淇℃伅銆佽鑹茬粍鍜屽矖浣嶇粍","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RProfileVo"}}}}}},"put":{"tags":["涓汉淇℃伅 涓氬姟澶勭悊"],"summary":"淇敼褰撳墠鐧诲綍鐢ㄦ埛鐨勪釜浜鸿祫鏂欍€?,"description":"淇敼褰撳墠鐧诲綍鐢ㄦ埛鐨勪釜浜鸿祫鏂欍€?,"operationId":"updateProfile","requestBody":{"description":"涓汉璧勬枡鍙傛暟","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SysUserProfileBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鎿嶄綔缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/system/user/profile/updatePwd":{"put":{"tags":["涓汉淇℃伅 涓氬姟澶勭悊"],"summary":"閲嶇疆瀵嗙爜","description":"閲嶇疆瀵嗙爜","operationId":"updatePwd","requestBody":{"description":"鏂版棫瀵嗙爜","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SysUserPasswordBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鎿嶄綔缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/system/user/changeStatus":{"put":{"tags":["鐢ㄦ埛淇℃伅"],"summary":"淇敼鐢ㄦ埛鐘舵€併€?,"description":"淇敼鐢ㄦ埛鐘舵€併€?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:user:edit`

","operationId":"changeStatus","requestBody":{"description":"鐢ㄦ埛鍙傛暟","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SysUserBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鎿嶄綔缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/system/user/authRole":{"put":{"tags":["鐢ㄦ埛淇℃伅"],"summary":"鐢ㄦ埛鎺堟潈瑙掕壊","description":"鐢ㄦ埛鎺堟潈瑙掕壊

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:user:edit`

","operationId":"insertAuthRole","parameters":[{"name":"userId","in":"query","description":"鐢ㄦ埛Id","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"roleIds","in":"query","description":"瑙掕壊ID涓?,"required":true,"schema":{"type":"array","items":{"type":"integer","format":"int64"}}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鎿嶄綔缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/system/role":{"put":{"tags":["瑙掕壊淇℃伅"],"summary":"淇敼瑙掕壊鍩虹淇℃伅锛堜笉鍖呭惈鑿滃崟鏉冮檺銆佹暟鎹潈闄愶級銆?,"description":"淇敼瑙掕壊鍩虹淇℃伅锛堜笉鍖呭惈鑿滃崟鏉冮檺銆佹暟鎹潈闄愶級銆?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:role:edit`

","operationId":"edit_5","requestBody":{"description":"瑙掕壊鍙傛暟","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SysRoleBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鎿嶄綔缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}},"post":{"tags":["瑙掕壊淇℃伅"],"summary":"鏂板瑙掕壊銆?,"description":"鏂板瑙掕壊銆?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:role:add`

","operationId":"add_5","requestBody":{"description":"瑙掕壊鍙傛暟","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SysRoleBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鎿嶄綔缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/system/role/permission":{"put":{"tags":["瑙掕壊淇℃伅"],"summary":"淇敼瑙掕壊鏉冮檺淇℃伅锛堣彍鍗曟潈闄?+ 鏁版嵁鏉冮檺锛夈€?,"description":"淇敼瑙掕壊鏉冮檺淇℃伅锛堣彍鍗曟潈闄?+ 鏁版嵁鏉冮檺锛夈€?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:role:edit`

","operationId":"editPermission","requestBody":{"description":"瑙掕壊鍙傛暟","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SysRoleBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鎿嶄綔缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/system/role/changeStatus":{"put":{"tags":["瑙掕壊淇℃伅"],"summary":"淇敼瑙掕壊鐘舵€併€?,"description":"淇敼瑙掕壊鐘舵€併€?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:role:edit`

","operationId":"changeStatus_1","requestBody":{"description":"瑙掕壊鍙傛暟","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SysRoleBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鎿嶄綔缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/system/role/authUser/selectAll":{"put":{"tags":["瑙掕壊淇℃伅"],"summary":"鎵归噺閫夋嫨鐢ㄦ埛鎺堟潈","description":"鎵归噺閫夋嫨鐢ㄦ埛鎺堟潈

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:role:edit`

","operationId":"selectAuthUserAll","parameters":[{"name":"roleId","in":"query","description":"瑙掕壊ID","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"userIds","in":"query","description":"鐢ㄦ埛ID涓?,"required":true,"schema":{"type":"array","items":{"type":"integer","format":"int64"}}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鎿嶄綔缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/system/role/authUser/cancel":{"put":{"tags":["瑙掕壊淇℃伅"],"summary":"鍙栨秷鎺堟潈鐢ㄦ埛銆?,"description":"鍙栨秷鎺堟潈鐢ㄦ埛銆?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:role:edit`

","operationId":"cancelAuthUser","requestBody":{"description":"鐢ㄦ埛瑙掕壊鍏崇郴","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SysUserRole"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鎿嶄綔缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/system/role/authUser/cancelAll":{"put":{"tags":["瑙掕壊淇℃伅"],"summary":"鎵归噺鍙栨秷鎺堟潈鐢ㄦ埛","description":"鎵归噺鍙栨秷鎺堟潈鐢ㄦ埛

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:role:edit`

","operationId":"cancelAuthUserAll","parameters":[{"name":"roleId","in":"query","description":"瑙掕壊ID","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"userIds","in":"query","description":"鐢ㄦ埛ID涓?,"required":true,"schema":{"type":"array","items":{"type":"integer","format":"int64"}}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鎿嶄綔缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/system/post":{"put":{"tags":["宀椾綅淇℃伅鎿嶄綔澶勭悊"],"summary":"淇敼宀椾綅銆?,"description":"淇敼宀椾綅銆?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:post:edit`

","operationId":"edit_6","requestBody":{"description":"宀椾綅鍙傛暟","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SysPostBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鎿嶄綔缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}},"post":{"tags":["宀椾綅淇℃伅鎿嶄綔澶勭悊"],"summary":"鏂板宀椾綅銆?,"description":"鏂板宀椾綅銆?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:post:add`

","operationId":"add_6","requestBody":{"description":"宀椾綅鍙傛暟","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SysPostBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鎿嶄綔缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/system/notice":{"put":{"tags":["鍏憡 淇℃伅鎿嶄綔澶勭悊"],"summary":"淇敼閫氱煡鍏憡銆?,"description":"淇敼閫氱煡鍏憡銆?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:notice:edit`

","operationId":"edit_7","requestBody":{"description":"鍏憡鍙傛暟","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SysNoticeBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鎿嶄綔缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}},"post":{"tags":["鍏憡 淇℃伅鎿嶄綔澶勭悊"],"summary":"鏂板閫氱煡鍏憡锛屽苟鍚戝湪绾跨敤鎴峰箍鎾叕鍛婃憳瑕併€?,"description":"鏂板閫氱煡鍏憡锛屽苟鍚戝湪绾跨敤鎴峰箍鎾叕鍛婃憳瑕併€?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:notice:add`

","operationId":"add_7","requestBody":{"description":"鍏憡鍙傛暟","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SysNoticeBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鎿嶄綔缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/system/menu":{"put":{"tags":["鑿滃崟淇℃伅"],"summary":"淇敼鑿滃崟銆?,"description":"淇敼鑿滃崟銆?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:menu:edit`

**瑙掕壊鏍¢獙锛?*

- `superadmin`
","operationId":"edit_8","requestBody":{"description":"鑿滃崟鍙傛暟","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SysMenuBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鎿嶄綔缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}},"post":{"tags":["鑿滃崟淇℃伅"],"summary":"鏂板鑿滃崟銆?,"description":"鏂板鑿滃崟銆?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:menu:add`

**瑙掕壊鏍¢獙锛?*

- `superadmin`
","operationId":"add_8","requestBody":{"description":"鑿滃崟鍙傛暟","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SysMenuBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鎿嶄綔缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/system/dict/type":{"put":{"tags":["鏁版嵁瀛楀吀淇℃伅"],"summary":"淇敼瀛楀吀绫诲瀷銆?,"description":"淇敼瀛楀吀绫诲瀷銆?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:dict:edit`

","operationId":"edit_9","requestBody":{"description":"瀛楀吀绫诲瀷鍙傛暟","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SysDictTypeBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鎿嶄綔缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}},"post":{"tags":["鏁版嵁瀛楀吀淇℃伅"],"summary":"鏂板瀛楀吀绫诲瀷銆?,"description":"鏂板瀛楀吀绫诲瀷銆?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:dict:add`

","operationId":"add_9","requestBody":{"description":"瀛楀吀绫诲瀷鍙傛暟","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SysDictTypeBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鎿嶄綔缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/system/dict/data":{"put":{"tags":["鏁版嵁瀛楀吀淇℃伅"],"summary":"淇敼瀛楀吀鏁版嵁銆?,"description":"淇敼瀛楀吀鏁版嵁銆?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:dict:edit`

","operationId":"edit_10","requestBody":{"description":"瀛楀吀鏁版嵁鍙傛暟","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SysDictDataBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鎿嶄綔缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}},"post":{"tags":["鏁版嵁瀛楀吀淇℃伅"],"summary":"鏂板瀛楀吀鏁版嵁銆?,"description":"鏂板瀛楀吀鏁版嵁銆?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:dict:add`

","operationId":"add_10","requestBody":{"description":"瀛楀吀鏁版嵁鍙傛暟","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SysDictDataBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鎿嶄綔缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/system/dept":{"put":{"tags":["閮ㄩ棬淇℃伅"],"summary":"淇敼閮ㄩ棬銆?,"description":"淇敼閮ㄩ棬銆?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:dept:edit`

","operationId":"edit_11","requestBody":{"description":"閮ㄩ棬鍙傛暟","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SysDeptBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鎿嶄綔缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}},"post":{"tags":["閮ㄩ棬淇℃伅"],"summary":"鏂板閮ㄩ棬銆?,"description":"鏂板閮ㄩ棬銆?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:dept:add`

","operationId":"add_11","requestBody":{"description":"閮ㄩ棬鍙傛暟","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SysDeptBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鎿嶄綔缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/system/config":{"put":{"tags":["鍙傛暟閰嶇疆 淇℃伅鎿嶄綔澶勭悊"],"summary":"淇敼鍙傛暟閰嶇疆銆?,"description":"淇敼鍙傛暟閰嶇疆銆?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:config:edit`

","operationId":"edit_12","requestBody":{"description":"鍙傛暟閰嶇疆","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SysConfigBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鎿嶄綔缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}},"post":{"tags":["鍙傛暟閰嶇疆 淇℃伅鎿嶄綔澶勭悊"],"summary":"鏂板鍙傛暟閰嶇疆銆?,"description":"鏂板鍙傛暟閰嶇疆銆?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:config:add`

","operationId":"add_12","requestBody":{"description":"鍙傛暟閰嶇疆","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SysConfigBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鎿嶄綔缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/system/config/updateByKey":{"put":{"tags":["鍙傛暟閰嶇疆 淇℃伅鎿嶄綔澶勭悊"],"summary":"鏍规嵁鍙傛暟閿悕淇敼鍙傛暟閰嶇疆銆?,"description":"鏍规嵁鍙傛暟閿悕淇敼鍙傛暟閰嶇疆銆?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:config:edit`

","operationId":"updateByKey","requestBody":{"description":"鍙傛暟閰嶇疆","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SysConfigBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鎿嶄綔缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/system/client":{"put":{"tags":["瀹㈡埛绔鐞?],"summary":"淇敼瀹㈡埛绔厤缃紝閬垮厤閲嶅鍗犵敤鍚屼竴涓鎴风 key銆?,"description":"淇敼瀹㈡埛绔厤缃紝閬垮厤閲嶅鍗犵敤鍚屼竴涓鎴风 key銆?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:client:edit`

","operationId":"edit_13","requestBody":{"description":"瀹㈡埛绔俊鎭?,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SysClientBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鎿嶄綔缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}},"post":{"tags":["瀹㈡埛绔鐞?],"summary":"鏂板瀹㈡埛绔厤缃紝鍏ュ簱鍓嶅厛鏍¢獙瀹㈡埛绔?key 鏄惁鍞竴銆?,"description":"鏂板瀹㈡埛绔厤缃紝鍏ュ簱鍓嶅厛鏍¢獙瀹㈡埛绔?key 鏄惁鍞竴銆?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:client:add`

","operationId":"add_13","requestBody":{"description":"瀹㈡埛绔俊鎭?,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SysClientBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鎿嶄綔缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/system/client/changeStatus":{"put":{"tags":["瀹㈡埛绔鐞?],"summary":"淇敼瀹㈡埛绔惎鍋滅姸鎬併€?,"description":"淇敼瀹㈡埛绔惎鍋滅姸鎬併€?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:client:edit`

","operationId":"changeStatus_2","requestBody":{"description":"瀹㈡埛绔姸鎬佷俊鎭?,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SysClientBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鎿嶄綔缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/resource/oss/config":{"put":{"tags":["瀵硅薄瀛樺偍閰嶇疆"],"summary":"淇敼瀵硅薄瀛樺偍閰嶇疆銆?,"description":"淇敼瀵硅薄瀛樺偍閰嶇疆銆?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:ossConfig:edit`

","operationId":"edit_14","requestBody":{"description":"閰嶇疆淇℃伅","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SysOssConfigBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鎿嶄綔缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}},"post":{"tags":["瀵硅薄瀛樺偍閰嶇疆"],"summary":"鏂板瀵硅薄瀛樺偍閰嶇疆銆?,"description":"鏂板瀵硅薄瀛樺偍閰嶇疆銆?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:ossConfig:add`

","operationId":"add_14","requestBody":{"description":"閰嶇疆淇℃伅","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SysOssConfigBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鎿嶄綔缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/resource/oss/config/changeStatus":{"put":{"tags":["瀵硅薄瀛樺偍閰嶇疆"],"summary":"鍒囨崲瀵硅薄瀛樺偍閰嶇疆鍚敤鐘舵€侊紝骞跺悓姝ユ洿鏂板綋鍓嶇敓鏁堥厤缃€?,"description":"鍒囨崲瀵硅薄瀛樺偍閰嶇疆鍚敤鐘舵€侊紝骞跺悓姝ユ洿鏂板綋鍓嶇敓鏁堥厤缃€?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:ossConfig:edit`

","operationId":"changeStatus_3","requestBody":{"description":"鐘舵€佸彉鏇翠俊鎭?,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SysOssConfigBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鎿嶄綔缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/device/device":{"put":{"tags":["鍚庡彴璁惧绠$悊銆?],"summary":"淇敼璁惧鍚嶇О銆佹埧闂村拰澶囨敞銆?,"description":"淇敼璁惧鍚嶇О銆佹埧闂村拰澶囨敞銆?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `device:device:edit`

","operationId":"edit_15","requestBody":{"description":"璁惧妗f","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CzDeviceBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鎿嶄綔缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}},"post":{"tags":["鍚庡彴璁惧绠$悊銆?],"summary":"鏂板璁惧妗f銆?,"description":"鏂板璁惧妗f銆?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `device:device:add`

","operationId":"add_15","requestBody":{"description":"璁惧妗f","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CzDeviceBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鎿嶄綔缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/demo/tree":{"put":{"tags":["娴嬭瘯鏍戣〃Controller"],"summary":"淇敼娴嬭瘯鏍戣〃","description":"淇敼娴嬭瘯鏍戣〃

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `demo:tree:edit`

","operationId":"edit_16","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestTreeBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}},"post":{"tags":["娴嬭瘯鏍戣〃Controller"],"summary":"鏂板娴嬭瘯鏍戣〃","description":"鏂板娴嬭瘯鏍戣〃

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `demo:tree:add`

","operationId":"add_16","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestTreeBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/demo/demo":{"put":{"tags":["娴嬭瘯鍗曡〃Controller"],"summary":"淇敼娴嬭瘯鍗曡〃","description":"淇敼娴嬭瘯鍗曡〃

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `demo:demo:edit`

","operationId":"edit_17","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestDemoBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}},"post":{"tags":["娴嬭瘯鍗曡〃Controller"],"summary":"鏂板娴嬭瘯鍗曡〃","description":"鏂板娴嬭瘯鍗曡〃

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `demo:demo:add`

","operationId":"add_17","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestDemoBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/app/home/setDefault/{homeId}":{"put":{"tags":["App 瀹跺涵绠$悊鎺у埗鍣?],"summary":"鍒囨崲榛樿瀹跺涵\n ","description":"鍒囨崲榛樿瀹跺涵\n

\n 灏嗘寚瀹氬搴涓洪粯璁わ紝鍚屾椂鍙栨秷鍏朵粬瀹跺涵鐨勯粯璁ゆ爣璇嗐€?,"operationId":"setDefaultHome","parameters":[{"name":"homeId","in":"path","description":"瑕佽涓洪粯璁ょ殑瀹跺涵ID","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鎿嶄綔缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/api/snail/chat/conversations":{"get":{"tags":["snail-ai-chat-gateway-controller"],"operationId":"listConversations","parameters":[{"name":"agentId","in":"query","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","format":"int32","default":1}},{"name":"size","in":"query","required":false,"schema":{"type":"integer","format":"int32","default":50}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/PageResultListOpenApiConversationVO"}}}}}},"put":{"tags":["snail-ai-chat-gateway-controller"],"operationId":"updateConversationTitle","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OpenApiConversationUpdateTitleRequest"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResultVoid"}}}}}},"post":{"tags":["snail-ai-chat-gateway-controller"],"operationId":"createConversation","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OpenApiCreateConversationRequest"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResultOpenApiConversationVO"}}}}}},"delete":{"tags":["snail-ai-chat-gateway-controller"],"operationId":"deleteConversation","parameters":[{"name":"agentId","in":"query","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"conversationId","in":"query","required":true,"schema":{"type":"string"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResultVoid"}}}}}}},"/workflow/task/urgeTask":{"post":{"tags":["浠诲姟绠$悊 鎺у埗灞?],"summary":"鍌姙浠诲姟銆?,"description":"鍌姙浠诲姟銆?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `workflow:task:edit`

","operationId":"urgeTask","requestBody":{"description":"鍙傛暟","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FlowUrgeTaskBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/workflow/task/terminationTask":{"post":{"tags":["浠诲姟绠$悊 鎺у埗灞?],"summary":"缁堟娴佺▼浠诲姟銆?,"description":"缁堟娴佺▼浠诲姟銆?,"operationId":"terminationTask","requestBody":{"description":"鍙傛暟","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FlowTerminationBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"澶勭悊缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RBoolean"}}}}}}},"/workflow/task/taskOperation/{taskOperation}":{"post":{"tags":["浠诲姟绠$悊 鎺у埗灞?],"summary":"鎵ц浠诲姟鎿嶄綔锛屼緥濡傚娲俱€佽浆鍔炪€佸姞绛炬垨鍑忕銆?,"description":"鎵ц浠诲姟鎿嶄綔锛屼緥濡傚娲俱€佽浆鍔炪€佸姞绛炬垨鍑忕銆?,"operationId":"taskOperation","parameters":[{"name":"taskOperation","in":"path","description":"鎿嶄綔绫诲瀷锛屽娲?delegateTask銆佽浆鍔?transferTask銆佸姞绛?addSignature銆佸噺绛?reductionSignature","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"鍙傛暟","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaskOperationBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鎿嶄綔缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/workflow/task/startWorkFlow":{"post":{"tags":["浠诲姟绠$悊 鎺у埗灞?],"summary":"鍚姩娴佺▼浠诲姟銆?,"description":"鍚姩娴佺▼浠诲姟銆?,"operationId":"startWorkFlow","requestBody":{"description":"鍚姩娴佺▼鍙傛暟","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StartProcessBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鍚姩缁撴灉鍙婂悗缁祦绋嬩俊鎭?,"content":{"*/*":{"schema":{"$ref":"#/components/schemas/RStartProcessReturnDTO"}}}}}}},"/workflow/task/getNextNodeList":{"post":{"tags":["浠诲姟绠$悊 鎺у埗灞?],"summary":"鑾峰彇娴佺▼涓嬩竴鑺傜偣淇℃伅銆?,"description":"鑾峰彇娴佺▼涓嬩竴鑺傜偣淇℃伅銆?,"operationId":"getNextNodeList","requestBody":{"description":"鍙傛暟","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FlowNextNodeBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"涓嬩竴鑺傜偣鍒楄〃","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RListFlowNode"}}}}}}},"/workflow/task/completeTask":{"post":{"tags":["浠诲姟绠$悊 鎺у埗灞?],"summary":"鍔炵悊褰撳墠浠诲姟鑺傜偣銆?,"description":"鍔炵悊褰撳墠浠诲姟鑺傜偣銆?,"operationId":"completeTask","requestBody":{"description":"鍔炵悊浠诲姟鍙傛暟","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompleteTaskBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鎿嶄綔缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/workflow/task/backProcess":{"post":{"tags":["浠诲姟绠$悊 鎺у埗灞?],"summary":"椹冲洖瀹℃壒鍒板墠缃妭鐐广€?,"description":"椹冲洖瀹℃壒鍒板墠缃妭鐐广€?,"operationId":"backProcess","requestBody":{"description":"鍙傛暟","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BackProcessBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鎿嶄綔缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/workflow/leave/submitAndFlowStart":{"post":{"tags":["璇峰亣绀轰緥鎺у埗鍣紝婕旂ず涓氬姟鍗曟嵁涓庢祦绋嬪紩鎿庤仈鍔ㄧ殑鍏稿瀷鐢ㄦ硶銆?],"summary":"鎻愪氦璇峰亣鍗曞苟鍚屾鍙戣捣娴佺▼銆?,"description":"鎻愪氦璇峰亣鍗曞苟鍚屾鍙戣捣娴佺▼銆?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `workflow:leave:add`

","operationId":"submitAndFlowStart","requestBody":{"description":"璇峰亣淇℃伅","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestLeaveBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鎻愪氦鍚庣殑璇峰亣鍗?,"content":{"*/*":{"schema":{"$ref":"#/components/schemas/RTestLeaveVo"}}}}}}},"/workflow/leave/export":{"post":{"tags":["璇峰亣绀轰緥鎺у埗鍣紝婕旂ず涓氬姟鍗曟嵁涓庢祦绋嬪紩鎿庤仈鍔ㄧ殑鍏稿瀷鐢ㄦ硶銆?],"summary":"瀵煎嚭璇峰亣鍒楄〃銆?,"description":"瀵煎嚭璇峰亣鍒楄〃銆?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `workflow:leave:export`

","operationId":"export","parameters":[{"name":"bo","in":"query","description":"鏌ヨ鏉′欢","required":true,"schema":{"$ref":"#/components/schemas/TestLeaveBo"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK"}}}},"/workflow/instance/invalid":{"post":{"tags":["娴佺▼瀹炰緥绠$悊 鎺у埗灞?],"summary":"浣滃簾娴佺▼瀹炰緥銆?,"description":"浣滃簾娴佺▼瀹炰緥銆?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `workflow:instance:invalid`

","operationId":"invalid","requestBody":{"description":"鍙傛暟","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FlowInvalidBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"澶勭悊缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RBoolean"}}}}}}},"/workflow/definition/importDef":{"post":{"tags":["娴佺▼瀹氫箟绠$悊 鎺у埗灞?],"summary":"閫氳繃鏂囦欢瀵煎叆娴佺▼瀹氫箟銆?,"description":"閫氳繃鏂囦欢瀵煎叆娴佺▼瀹氫箟銆?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `workflow:definition:import`

","operationId":"importDef","parameters":[{"name":"file","in":"query","description":"鏂囦欢","required":true,"schema":{"type":"string","format":"binary"}},{"name":"category","in":"query","description":"鍒嗙被","required":true,"schema":{"type":"string"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"瀵煎叆缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RBoolean"}}}}}}},"/workflow/definition/exportDef/{id}":{"post":{"tags":["娴佺▼瀹氫箟绠$悊 鎺у埗灞?],"summary":"瀵煎嚭娴佺▼瀹氫箟鏂囦欢銆?,"description":"瀵煎嚭娴佺▼瀹氫箟鏂囦欢銆?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `workflow:definition:export`

","operationId":"exportDef","parameters":[{"name":"id","in":"path","description":"娴佺▼瀹氫箟id","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"500":{"description":"Internal Server Error"},"200":{"description":"OK"}}}},"/workflow/definition/copy/{id}":{"post":{"tags":["娴佺▼瀹氫箟绠$悊 鎺у埗灞?],"summary":"澶嶅埗涓€浠芥祦绋嬪畾涔夛紝渚夸簬蹇€熷垱寤虹浉浼兼祦绋嬨€?,"description":"澶嶅埗涓€浠芥祦绋嬪畾涔夛紝渚夸簬蹇€熷垱寤虹浉浼兼祦绋嬨€?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `workflow:definition:copy`

","operationId":"copy","parameters":[{"name":"id","in":"path","description":"娴佺▼瀹氫箟id","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"澶嶅埗缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RBoolean"}}}}}}},"/workflow/category/export":{"post":{"tags":["娴佺▼鍒嗙被"],"summary":"瀵煎嚭娴佺▼鍒嗙被鍒楄〃銆?,"description":"瀵煎嚭娴佺▼鍒嗙被鍒楄〃銆?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `workflow:category:export`

","operationId":"export_1","parameters":[{"name":"bo","in":"query","description":"鏌ヨ鏉′欢","required":true,"schema":{"$ref":"#/components/schemas/FlowCategoryBo"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK"}}}},"/warm-flow/save-json":{"post":{"tags":["warm-flow-controller"],"operationId":"saveJson","parameters":[{"name":"onlyNodeSkip","in":"header","required":true,"schema":{"type":"boolean"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DefJson"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"500":{"description":"Internal Server Error"},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiResultVoid"}}}}}}},"/warm-flow/form-content":{"post":{"tags":["warm-flow-controller"],"operationId":"saveFormContent","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FlowDto"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiResultVoid"}}}}}}},"/warm-flow/execute/handle":{"post":{"tags":["warm-flow-controller"],"operationId":"handle","parameters":[{"name":"taskId","in":"query","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"skipType","in":"query","required":true,"schema":{"type":"string"}},{"name":"message","in":"query","required":true,"schema":{"type":"string"}},{"name":"nodeCode","in":"query","required":false,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","additionalProperties":{}}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiResultInstance"}}}}}}},"/system/user/importTemplate":{"post":{"tags":["鐢ㄦ埛淇℃伅"],"summary":"瀵煎嚭鐢ㄦ埛瀵煎叆妯℃澘銆?,"description":"瀵煎嚭鐢ㄦ埛瀵煎叆妯℃澘銆?,"operationId":"importTemplate","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK"}}}},"/system/user/importData":{"post":{"tags":["鐢ㄦ埛淇℃伅"],"summary":"瀵煎叆鏁版嵁","description":"瀵煎叆鏁版嵁

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:user:import`

","operationId":"importData","requestBody":{"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary","description":"瀵煎叆鏂囦欢"},"updateSupport":{"type":"boolean","description":"鏄惁鏇存柊宸插瓨鍦ㄦ暟鎹?}},"required":["file"]}}}},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"500":{"description":"Internal Server Error"},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/system/user/export":{"post":{"tags":["鐢ㄦ埛淇℃伅"],"summary":"瀵煎嚭绗﹀悎鏉′欢鐨勭敤鎴峰垪琛ㄣ€?,"description":"瀵煎嚭绗﹀悎鏉′欢鐨勭敤鎴峰垪琛ㄣ€?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:user:export`

","operationId":"export_2","parameters":[{"name":"user","in":"query","description":"鐢ㄦ埛鏌ヨ鏉′欢","required":true,"schema":{"$ref":"#/components/schemas/SysUserBo"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK"}}}},"/system/role/export":{"post":{"tags":["瑙掕壊淇℃伅"],"summary":"瀵煎嚭瑙掕壊淇℃伅鍒楄〃銆?,"description":"瀵煎嚭瑙掕壊淇℃伅鍒楄〃銆?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:role:export`

","operationId":"export_3","parameters":[{"name":"role","in":"query","description":"鏌ヨ鏉′欢","required":true,"schema":{"$ref":"#/components/schemas/SysRoleBo"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK"}}}},"/system/post/export":{"post":{"tags":["宀椾綅淇℃伅鎿嶄綔澶勭悊"],"summary":"瀵煎嚭宀椾綅鍒楄〃銆?,"description":"瀵煎嚭宀椾綅鍒楄〃銆?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:post:export`

","operationId":"export_4","parameters":[{"name":"post","in":"query","description":"鏌ヨ鏉′欢","required":true,"schema":{"$ref":"#/components/schemas/SysPostBo"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK"}}}},"/system/dict/type/export":{"post":{"tags":["鏁版嵁瀛楀吀淇℃伅"],"summary":"瀵煎嚭瀛楀吀绫诲瀷鍒楄〃銆?,"description":"瀵煎嚭瀛楀吀绫诲瀷鍒楄〃銆?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:dict:export`

","operationId":"export_5","parameters":[{"name":"dictType","in":"query","description":"鏌ヨ鏉′欢","required":true,"schema":{"$ref":"#/components/schemas/SysDictTypeBo"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK"}}}},"/system/dict/data/export":{"post":{"tags":["鏁版嵁瀛楀吀淇℃伅"],"summary":"瀵煎嚭瀛楀吀鏁版嵁鍒楄〃銆?,"description":"瀵煎嚭瀛楀吀鏁版嵁鍒楄〃銆?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:dict:export`

","operationId":"export_6","parameters":[{"name":"dictData","in":"query","description":"鏌ヨ鏉′欢","required":true,"schema":{"$ref":"#/components/schemas/SysDictDataBo"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK"}}}},"/system/config/export":{"post":{"tags":["鍙傛暟閰嶇疆 淇℃伅鎿嶄綔澶勭悊"],"summary":"瀵煎嚭鍙傛暟閰嶇疆鍒楄〃銆?,"description":"瀵煎嚭鍙傛暟閰嶇疆鍒楄〃銆?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:config:export`

","operationId":"export_7","parameters":[{"name":"config","in":"query","description":"鏌ヨ鏉′欢","required":true,"schema":{"$ref":"#/components/schemas/SysConfigBo"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK"}}}},"/system/client/export":{"post":{"tags":["瀹㈡埛绔鐞?],"summary":"瀵煎嚭瀹㈡埛绔鐞嗗垪琛紝渚夸簬绂荤嚎瀹¤涓庨厤缃牳鏌ャ€?,"description":"瀵煎嚭瀹㈡埛绔鐞嗗垪琛紝渚夸簬绂荤嚎瀹¤涓庨厤缃牳鏌ャ€?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:client:export`

","operationId":"export_8","parameters":[{"name":"bo","in":"query","description":"鏌ヨ鏉′欢","required":true,"schema":{"$ref":"#/components/schemas/SysClientBo"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK"}}}},"/swagger/demo/upload":{"post":{"tags":["swagger3 鐢ㄦ硶绀轰緥"],"summary":"涓婁紶璇锋眰\n 蹇呴』浣跨敤 @RequestPart 娉ㄨВ鏍囨敞涓烘枃浠?,"description":"涓婁紶璇锋眰\n 蹇呴』浣跨敤 @RequestPart 娉ㄨВ鏍囨敞涓烘枃浠?,"operationId":"upload","requestBody":{"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary","description":"瀵煎叆鏂囦欢"}},"required":["file"]}}}},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RString"}}}}}}},"/snail-ai/user/register":{"post":{"tags":["Snail AI OpenAPI 鎺у埗鍣?],"summary":"娉ㄥ唽褰撳墠鐧诲綍鐢ㄦ埛骞惰繑鍥?OpenAPI 鐢ㄦ埛淇℃伅銆?,"description":"娉ㄥ唽褰撳墠鐧诲綍鐢ㄦ埛骞惰繑鍥?OpenAPI 鐢ㄦ埛淇℃伅銆?,"operationId":"registerCurrentUser","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ROpenApiUserVO"}}}}}}},"/resource/oss/upload":{"post":{"tags":["鏂囦欢涓婁紶 鎺у埗灞?],"summary":"涓婁紶OSS瀵硅薄瀛樺偍","description":"涓婁紶OSS瀵硅薄瀛樺偍

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:oss:upload`

","operationId":"upload_1","parameters":[{"name":"ossExt","in":"query","required":false,"schema":{"type":"string"}}],"requestBody":{"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary","description":"瀵煎叆鏂囦欢"}},"required":["file"]}}}},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"涓婁紶缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RSysOssUploadVo"}}}}}}},"/monitor/operlog/export":{"post":{"tags":["鎿嶄綔鏃ュ織璁板綍"],"summary":"瀵煎嚭鎿嶄綔鏃ュ織璁板綍鍒楄〃銆?,"description":"瀵煎嚭鎿嶄綔鏃ュ織璁板綍鍒楄〃銆?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `monitor:operlog:export`

","operationId":"export_9","parameters":[{"name":"operLog","in":"query","description":"鏌ヨ鏉′欢","required":true,"schema":{"$ref":"#/components/schemas/SysOperLogBo"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK"}}}},"/monitor/loginInfo/export":{"post":{"tags":["绯荤粺璁块棶璁板綍"],"summary":"瀵煎嚭绯荤粺璁块棶璁板綍鍒楄〃銆?,"description":"瀵煎嚭绯荤粺璁块棶璁板綍鍒楄〃銆?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `monitor:logininfo:export`

","operationId":"export_10","parameters":[{"name":"loginInfo","in":"query","description":"鏌ヨ鏉′欢","required":true,"schema":{"$ref":"#/components/schemas/SysLoginInfoBo"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK"}}}},"/device/device/export":{"post":{"tags":["鍚庡彴璁惧绠$悊銆?],"summary":"瀵煎嚭璁惧銆?,"description":"瀵煎嚭璁惧銆?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `device:device:export`

","operationId":"export_11","parameters":[{"name":"bo","in":"query","description":"鏌ヨ鏉′欢","required":true,"schema":{"$ref":"#/components/schemas/CzDeviceBo"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK"}}}},"/demo/excel/importWithOptions":{"post":{"tags":["娴嬭瘯Excel鍔熻兘"],"summary":"瀵煎叆琛ㄦ牸","description":"瀵煎叆琛ㄦ牸","operationId":"importWithOptions","requestBody":{"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary","description":"瀵煎叆鏂囦欢"}},"required":["file"]}}}},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"500":{"description":"Internal Server Error"},"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ExportDemoVo"}}}}}}}},"/demo/demo/importData":{"post":{"tags":["娴嬭瘯鍗曡〃Controller"],"summary":"瀵煎叆鏁版嵁","description":"瀵煎叆鏁版嵁

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `demo:demo:import`

","operationId":"importData_1","requestBody":{"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary","description":"瀵煎叆鏂囦欢"}},"required":["file"]}}}},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"500":{"description":"Internal Server Error"},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/demo/demo/export":{"post":{"tags":["娴嬭瘯鍗曡〃Controller"],"summary":"瀵煎嚭娴嬭瘯鍗曡〃鍒楄〃","description":"瀵煎嚭娴嬭瘯鍗曡〃鍒楄〃

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `demo:demo:export`

","operationId":"export_12","parameters":[{"name":"bo","in":"query","required":true,"schema":{"$ref":"#/components/schemas/TestDemoBo"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK"}}}},"/demo/batch/add":{"post":{"tags":["娴嬭瘯鎵归噺鏂规硶"],"summary":"鏂板鎵归噺鏂规硶 鍙畬缇庢浛浠?saveBatch 绉掔骇鎻掑叆涓婁竾鏁版嵁 (瀵筸ysql璐熻嵎杈冨ぇ)\n ","description":"鏂板鎵归噺鏂规硶 鍙畬缇庢浛浠?saveBatch 绉掔骇鎻掑叆涓婁竾鏁版嵁 (瀵筸ysql璐熻嵎杈冨ぇ)\n

\n 3.5.0 鐗堟湰 澧炲姞 rewriteBatchedStatements=true 鎵瑰鐞嗗弬鏁?浣?MP 鍘熺敓鎵瑰鐞嗗彲浠ヨ揪鍒板悓鏍风殑閫熷害","operationId":"add_18","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/demo/batch/addOrUpdate":{"post":{"tags":["娴嬭瘯鎵归噺鏂规硶"],"summary":"鏂板鎴栨洿鏂?鍙畬缇庢浛浠?saveOrUpdateBatch 楂樻€ц兘\n ","description":"鏂板鎴栨洿鏂?鍙畬缇庢浛浠?saveOrUpdateBatch 楂樻€ц兘\n

\n 3.5.0 鐗堟湰 澧炲姞 rewriteBatchedStatements=true 鎵瑰鐞嗗弬鏁?浣?MP 鍘熺敓鎵瑰鐞嗗彲浠ヨ揪鍒板悓鏍风殑閫熷害","operationId":"addOrUpdate","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/auth/social/callback":{"post":{"tags":["璁よ瘉鎺у埗鍣紝鎻愪緵鐧诲綍銆佹敞鍐屻€佺ぞ浜ょ粦瀹氬拰閫€鍑鸿兘鍔涖€?],"summary":"澶勭悊鍓嶇鍥炶皟鍚庣殑绀句氦璐﹀彿缁戝畾銆?,"description":"澶勭悊鍓嶇鍥炶皟鍚庣殑绀句氦璐﹀彿缁戝畾銆?br>

璁块棶鏉冮檺


> **鏉冮檺绛栫暐**锛氬拷鐣ユ潈闄愭鏌?br>","operationId":"socialCallback","requestBody":{"description":"璇锋眰浣?,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SocialLoginBody"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鎿嶄綔缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/auth/register":{"post":{"tags":["璁よ瘉鎺у埗鍣紝鎻愪緵鐧诲綍銆佹敞鍐屻€佺ぞ浜ょ粦瀹氬拰閫€鍑鸿兘鍔涖€?],"summary":"鐢ㄦ埛娉ㄥ唽銆?,"description":"鐢ㄦ埛娉ㄥ唽銆?br>

璁块棶鏉冮檺


> **鏉冮檺绛栫暐**锛氬拷鐣ユ潈闄愭鏌?br>","operationId":"register","requestBody":{"description":"娉ㄥ唽淇℃伅","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegisterBody"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鎿嶄綔缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/auth/logout":{"post":{"tags":["璁よ瘉鎺у埗鍣紝鎻愪緵鐧诲綍銆佹敞鍐屻€佺ぞ浜ょ粦瀹氬拰閫€鍑鸿兘鍔涖€?],"summary":"閫€鍑虹櫥褰?,"description":"閫€鍑虹櫥褰?br>

璁块棶鏉冮檺


> **鏉冮檺绛栫暐**锛氬拷鐣ユ潈闄愭鏌?br>","operationId":"logout","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/auth/login":{"post":{"tags":["璁よ瘉鎺у埗鍣紝鎻愪緵鐧诲綍銆佹敞鍐屻€佺ぞ浜ょ粦瀹氬拰閫€鍑鸿兘鍔涖€?],"summary":"鐧诲綍鏂规硶","description":"鐧诲綍鏂规硶

璁块棶鏉冮檺


> **鏉冮檺绛栫暐**锛氬拷鐣ユ潈闄愭鏌?br>","operationId":"login","requestBody":{"description":"鐧诲綍淇℃伅","content":{"application/json":{"schema":{"type":"string"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RLoginVo"}}}}}}},"/app/profile/update":{"post":{"tags":["App 鐢ㄦ埛璧勬枡鎺у埗鍣?],"summary":"淇敼鐢ㄦ埛璧勬枡","description":"淇敼鐢ㄦ埛璧勬枡","operationId":"updateProfile_1","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateProfileBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/app/profile/avatar":{"post":{"tags":["App 鐢ㄦ埛璧勬枡鎺у埗鍣?],"summary":"涓婁紶鐢ㄦ埛澶村儚鍒?OSS","description":"涓婁紶鐢ㄦ埛澶村儚鍒?OSS","operationId":"uploadAvatar","requestBody":{"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary","description":"瀵煎叆鏂囦欢"}},"required":["file"]}}}},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RAvatarUploadVo"}}}}}}},"/app/location/update":{"post":{"tags":["App 鎴块棿浣嶇疆绠$悊鎺у埗鍣?],"summary":"淇敼鎴块棿浣嶇疆鍚嶇О\n ","description":"淇敼鎴块棿浣嶇疆鍚嶇О\n

\n 鏀寔淇敼浣嶇疆鍚嶇О銆佸浘鏍囧拰鎺掑簭鍊硷紝鍚屼竴瀹跺涵涓嬩綅缃悕绉颁笉鍙噸澶嶃€?,"operationId":"updateLocation","requestBody":{"description":"淇敼浣嶇疆璇锋眰鍙傛暟锛堜綅缃甀D銆佷綅缃悕绉?1-10 涓瓧绗︺€佸彲閫夊浘鏍囦笌鎺掑簭锛?,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateLocationBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鎿嶄綔缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/app/location/create":{"post":{"tags":["App 鎴块棿浣嶇疆绠$悊鎺у埗鍣?],"summary":"鍒涘缓鏂扮殑鎴块棿浣嶇疆\n ","description":"鍒涘缓鏂扮殑鎴块棿浣嶇疆\n

\n 鍦ㄥ悓涓€瀹跺涵涓嬩綅缃悕绉颁笉鍙噸澶嶃€?,"operationId":"createLocation","requestBody":{"description":"鍒涘缓浣嶇疆璇锋眰鍙傛暟锛堝搴璉D銆佷綅缃悕绉?1-10 涓瓧绗︺€佸彲閫夊浘鏍囦笌鎺掑簭锛?,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateLocationBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鎿嶄綔缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/app/home/create":{"post":{"tags":["App 瀹跺涵绠$悊鎺у埗鍣?],"summary":"鍒涘缓鏂板搴璡n ","description":"鍒涘缓鏂板搴璡n

\n 鍒涘缓鍚庤嚜鍔ㄥ垵濮嬪寲涓€涓猏"瀹㈠巺\"浣嶇疆锛屽搴悕绉板湪鍚屼竴鐢ㄦ埛涓嬩笉鍙噸澶嶃€?,"operationId":"createHome","requestBody":{"description":"鍒涘缓瀹跺涵璇锋眰鍙傛暟锛堝搴悕绉帮紝2-10涓瓧绗︼級","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateHomeBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鎿嶄綔缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/app/device/updateRuntime":{"post":{"tags":["App 璁惧鎺у埗鍣?],"summary":"鏇存柊璁惧杩愯鏁版嵁\n ","description":"鏇存柊璁惧杩愯鏁版嵁\n

\n 鍓嶇閫氳繃钃濈墮鍚屾璁惧杩愯鐘舵€侊紝鏇存柊璁惧鍩虹鐘舵€佸拰鍑€鍖栧櫒杩愯鏁版嵁銆?,"operationId":"updateDeviceRuntime","requestBody":{"description":"鏇存柊鍙傛暟锛堣澶嘔D蹇呭~锛屽叾浣欏瓧娈垫寜闇€浼犲叆锛?,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateDeviceRuntimeBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鎿嶄綔缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/app/device/runtime":{"post":{"tags":["App 璁惧鎺у埗鍣?],"summary":"鏌ヨ璁惧杩愯鏁版嵁\n ","description":"鏌ヨ璁惧杩愯鏁版嵁\n

\n 鏍规嵁璁惧ID鏌ヨ璁惧杩愯鐘舵€佸強鍑€鍖栧櫒鏁版嵁銆?,"operationId":"getDeviceRuntime","requestBody":{"description":"鏌ヨ鍙傛暟锛堣澶嘔D锛?,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeviceRuntimeQueryBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"璁惧杩愯鏁版嵁","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RAppDeviceRuntimeVo"}}}}}}},"/app/device/list":{"post":{"tags":["App 璁惧鎺у埗鍣?],"summary":"鏌ヨ褰撳墠鐢ㄦ埛鐨勮澶囧垪琛╘n ","description":"鏌ヨ褰撳墠鐢ㄦ埛鐨勮澶囧垪琛╘n

\n 鏀寔鎸夊搴璉D鍜屼綅缃甀D杩囨护锛岃繑鍥炶澶囦俊鎭強鍑€鍖栧櫒杩愯鏁版嵁銆?,"operationId":"listDevices","requestBody":{"description":"鏌ヨ鍙傛暟锛堝搴璉D銆佷綅缃甀D锛屽潎鍙€夛級","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeviceQueryBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"璁惧鍒楄〃","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RListAppDeviceVo"}}}}}}},"/app/device/bind":{"post":{"tags":["App 璁惧鎺у埗鍣?],"summary":"缁戝畾璁惧\n ","description":"缁戝畾璁惧\n

\n 鍓嶇閫氳繃钃濈墮閰嶅璁惧鍚庯紝鏍规嵁璁惧缂栧彿缁戝畾褰撳墠鐢ㄦ埛銆俓n 鑻ヨ澶囧凡瀛樺湪鍒欑洿鎺ョ粦瀹氾紝涓嶅瓨鍦ㄥ垯鍏堟柊澧炶澶囧啀缁戝畾銆?,"operationId":"bindDevice","requestBody":{"description":"缁戝畾璇锋眰鍙傛暟锛堣澶囩紪鍙峰強钃濈墮閰嶅淇℃伅锛?,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeviceBindBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鎿嶄綔缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/app/auth/sendSmsCode":{"post":{"tags":["App 鐢ㄦ埛璁よ瘉鎺у埗鍣?],"summary":"鍙戦€佺煭淇¢獙璇佺爜","description":"鍙戦€佺煭淇¢獙璇佺爜

璁块棶鏉冮檺


> **鏉冮檺绛栫暐**锛氬拷鐣ユ潈闄愭鏌?br>","operationId":"sendSmsCode","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SendSmsCodeBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/app/auth/register":{"post":{"tags":["App 鐢ㄦ埛璁よ瘉鎺у埗鍣?],"summary":"娉ㄥ唽锛堟墜鏈哄彿銆侀獙璇佺爜銆佸瘑鐮併€佺‘璁ゅ瘑鐮侊級","description":"娉ㄥ唽锛堟墜鏈哄彿銆侀獙璇佺爜銆佸瘑鐮併€佺‘璁ゅ瘑鐮侊級

璁块棶鏉冮檺


> **鏉冮檺绛栫暐**锛氬拷鐣ユ潈闄愭鏌?br>","operationId":"register_1","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegisterBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RAppLoginVo"}}}}}}},"/app/auth/logout":{"post":{"tags":["App 鐢ㄦ埛璁よ瘉鎺у埗鍣?],"summary":"閫€鍑虹櫥褰?,"description":"閫€鍑虹櫥褰?,"operationId":"logout_1","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/app/auth/login/sms":{"post":{"tags":["App 鐢ㄦ埛璁よ瘉鎺у埗鍣?],"summary":"鐭俊楠岃瘉鐮佺櫥褰?,"description":"鐭俊楠岃瘉鐮佺櫥褰?br>

璁块棶鏉冮檺


> **鏉冮檺绛栫暐**锛氬拷鐣ユ潈闄愭鏌?br>","operationId":"loginBySms","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginSmsBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RAppLoginVo"}}}}}}},"/app/auth/login/password":{"post":{"tags":["App 鐢ㄦ埛璁よ瘉鎺у埗鍣?],"summary":"璐﹀彿瀵嗙爜鐧诲綍锛堣处鍙锋敮鎸佺敤鎴峰悕鎴栨墜鏈哄彿锛?,"description":"璐﹀彿瀵嗙爜鐧诲綍锛堣处鍙锋敮鎸佺敤鎴峰悕鎴栨墜鏈哄彿锛?br>

璁块棶鏉冮檺


> **鏉冮檺绛栫暐**锛氬拷鐣ユ潈闄愭鏌?br>","operationId":"loginByPassword","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginPasswordBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RAppLoginVo"}}}}}}},"/app/auth/forgetPassword/verifyCode":{"post":{"tags":["App 鐢ㄦ埛璁よ瘉鎺у埗鍣?],"summary":"蹇樿瀵嗙爜绗竴姝ワ細鏍¢獙鎵嬫満鍙峰拰鐭俊楠岃瘉鐮侊紝杩斿洖閲嶇疆浠ょ墝","description":"蹇樿瀵嗙爜绗竴姝ワ細鏍¢獙鎵嬫満鍙峰拰鐭俊楠岃瘉鐮侊紝杩斿洖閲嶇疆浠ょ墝

璁块棶鏉冮檺


> **鏉冮檺绛栫暐**锛氬拷鐣ユ潈闄愭鏌?br>","operationId":"verifyResetCode","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifyResetSmsCodeBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RString"}}}}}}},"/app/auth/forgetPassword/doReset":{"post":{"tags":["App 鐢ㄦ埛璁よ瘉鎺у埗鍣?],"summary":"蹇樿瀵嗙爜绗簩姝ワ細鍑噸缃护鐗屽拰涓ゆ鏂板瘑鐮佸畬鎴愰噸缃?,"description":"蹇樿瀵嗙爜绗簩姝ワ細鍑噸缃护鐗屽拰涓ゆ鏂板瘑鐮佸畬鎴愰噸缃?br>

璁块棶鏉冮檺


> **鏉冮檺绛栫暐**锛氬拷鐣ユ潈闄愭鏌?br>","operationId":"doResetPassword","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DoResetPasswordBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/app/auth/changePhone/verifyOld":{"post":{"tags":["App 鐢ㄦ埛璁よ瘉鎺у埗鍣?],"summary":"鎹㈢粦鎵嬫満鍙风涓€姝ワ細鏍¢獙鍘熸墜鏈哄彿楠岃瘉鐮?,"description":"鎹㈢粦鎵嬫満鍙风涓€姝ワ細鏍¢獙鍘熸墜鏈哄彿楠岃瘉鐮?,"operationId":"verifyOldPhoneNumber","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifyOldPhoneBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RString"}}}}}}},"/app/auth/changePhone/verifyNew":{"post":{"tags":["App 鐢ㄦ埛璁よ瘉鎺у埗鍣?],"summary":"鎹㈢粦鎵嬫満鍙风浜屾锛氭牎楠屾柊鎵嬫満鍙烽獙璇佺爜骞舵洿鏂?,"description":"鎹㈢粦鎵嬫満鍙风浜屾锛氭牎楠屾柊鎵嬫満鍙烽獙璇佺爜骞舵洿鏂?,"operationId":"verifyNewPhoneNumberAndUpdate","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifyNewPhoneBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/app/auth/cancelAccount":{"post":{"tags":["App 鐢ㄦ埛璁よ瘉鎺у埗鍣?],"summary":"娉ㄩ攢璐﹀彿","description":"娉ㄩ攢璐﹀彿","operationId":"cancelAccount","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/app/auth/agreements":{"post":{"tags":["App 鐢ㄦ埛璁よ瘉鎺у埗鍣?],"summary":"鑾峰彇鐢熸晥鐨勫崗璁厤缃垪琛╘n ","description":"鑾峰彇鐢熸晥鐨勫崗璁厤缃垪琛╘n

\n 鏃犻渶鐧诲綍锛岃繑鍥炴墍鏈夊凡鐢熸晥鍗忚鐨勫熀鏈俊鎭紙ID銆佺被鍨嬨€佺紪鍙枫€佺増鏈彿銆佸悕绉帮級銆?br>

璁块棶鏉冮檺


> **鏉冮檺绛栫暐**锛氬拷鐣ユ潈闄愭鏌?br>","operationId":"listActiveAgreements","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鐢熸晥鐨勫崗璁垪琛?,"content":{"*/*":{"schema":{"$ref":"#/components/schemas/RListAgreementVo"}}}}}}},"/app/auth/agreement/detail":{"post":{"tags":["App 鐢ㄦ埛璁よ瘉鎺у埗鍣?],"summary":"鑾峰彇鍗忚璇︽儏\n ","description":"鑾峰彇鍗忚璇︽儏\n

\n 鏃犻渶鐧诲綍锛屾牴鎹崗璁甀D杩斿洖鍗忚缂栧彿銆佸悕绉般€佺増鏈彿銆佸崗璁鏂囧強鐢熸晥鏃堕棿銆?br>

璁块棶鏉冮檺


> **鏉冮檺绛栫暐**锛氬拷鐣ユ潈闄愭鏌?br>","operationId":"getAgreementDetail","requestBody":{"description":"鍗忚ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgreementIdBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鍗忚璇︽儏","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RAgreementDetailVo"}}}}}}},"/api/snail/chat/session":{"post":{"tags":["snail-ai-chat-gateway-controller"],"operationId":"session","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OpenApiEmbedTokenRequest"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResultOpenApiEmbedTokenResponse"}}}}}}},"/api/snail/chat/resource/upload":{"post":{"tags":["snail-ai-chat-gateway-controller"],"operationId":"uploadResource","parameters":[{"name":"bizType","in":"query","required":false,"schema":{"type":"string"}},{"name":"bizId","in":"query","required":false,"schema":{"type":"integer","format":"int64"}}],"requestBody":{"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary"}},"required":["file"]}}}},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResultOpenApiResourceResponse"}}}}}}},"/api/snail/chat/completions":{"post":{"tags":["snail-ai-chat-gateway-controller"],"operationId":"completions","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OpenApiChatRequest"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"text/event-stream":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ServerSentEventString"}}}}}}}},"/api/snail/chat/agent/subscribe":{"post":{"tags":["snail-ai-chat-gateway-controller"],"operationId":"subscribeAgent","parameters":[{"name":"agentId","in":"query","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResultVoid"}}}}}},"delete":{"tags":["snail-ai-chat-gateway-controller"],"operationId":"unsubscribeAgent","parameters":[{"name":"agentId","in":"query","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResultVoid"}}}}}}},"/workflow/task/pageByTaskWait":{"get":{"tags":["浠诲姟绠$悊 鎺у埗灞?],"summary":"鏌ヨ褰撳墠鐢ㄦ埛鐨勫緟鍔炰换鍔°€?,"description":"鏌ヨ褰撳墠鐢ㄦ埛鐨勫緟鍔炰换鍔°€?,"operationId":"pageByTaskWait","parameters":[{"name":"flowTaskBo","in":"query","description":"鍙傛暟","required":true,"schema":{"$ref":"#/components/schemas/FlowTaskBo"}},{"name":"pageQuery","in":"query","description":"鍒嗛〉","required":true,"schema":{"$ref":"#/components/schemas/PageQuery"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"寰呭姙浠诲姟鍒嗛〉鏁版嵁","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RPageResultFlowTaskVo"}}}}}}},"/workflow/task/pageByTaskFinish":{"get":{"tags":["浠诲姟绠$悊 鎺у埗灞?],"summary":"鏌ヨ褰撳墠鐢ㄦ埛鐨勫凡鍔炰换鍔°€?,"description":"鏌ヨ褰撳墠鐢ㄦ埛鐨勫凡鍔炰换鍔°€?,"operationId":"pageByTaskFinish","parameters":[{"name":"flowTaskBo","in":"query","description":"鍙傛暟","required":true,"schema":{"$ref":"#/components/schemas/FlowTaskBo"}},{"name":"pageQuery","in":"query","description":"鍒嗛〉","required":true,"schema":{"$ref":"#/components/schemas/PageQuery"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"宸插姙浠诲姟鍒嗛〉鏁版嵁","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RPageResultFlowHisTaskVo"}}}}}}},"/workflow/task/pageByTaskCopy":{"get":{"tags":["浠诲姟绠$悊 鎺у埗灞?],"summary":"鏌ヨ褰撳墠鐢ㄦ埛鏀跺埌鐨勬妱閫佷换鍔°€?,"description":"鏌ヨ褰撳墠鐢ㄦ埛鏀跺埌鐨勬妱閫佷换鍔°€?,"operationId":"pageByTaskCopy","parameters":[{"name":"flowTaskBo","in":"query","description":"鍙傛暟","required":true,"schema":{"$ref":"#/components/schemas/FlowTaskBo"}},{"name":"pageQuery","in":"query","description":"鍒嗛〉","required":true,"schema":{"$ref":"#/components/schemas/PageQuery"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鎶勯€佷换鍔″垎椤垫暟鎹?,"content":{"*/*":{"schema":{"$ref":"#/components/schemas/RPageResultFlowTaskVo"}}}}}}},"/workflow/task/pageByAllTaskWait":{"get":{"tags":["浠诲姟绠$悊 鎺у埗灞?],"summary":"鏌ヨ鍏ㄩ儴寰呭姙浠诲姟銆?,"description":"鏌ヨ鍏ㄩ儴寰呭姙浠诲姟銆?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `workflow:task:list`

","operationId":"pageByAllTaskWait","parameters":[{"name":"flowTaskBo","in":"query","description":"鍙傛暟","required":true,"schema":{"$ref":"#/components/schemas/FlowTaskBo"}},{"name":"pageQuery","in":"query","description":"鍒嗛〉","required":true,"schema":{"$ref":"#/components/schemas/PageQuery"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"寰呭姙浠诲姟鍒嗛〉鏁版嵁","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RPageResultFlowTaskVo"}}}}}}},"/workflow/task/pageByAllTaskFinish":{"get":{"tags":["浠诲姟绠$悊 鎺у埗灞?],"summary":"鏌ヨ鍏ㄩ儴宸插姙浠诲姟銆?,"description":"鏌ヨ鍏ㄩ儴宸插姙浠诲姟銆?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `workflow:task:list`

","operationId":"pageByAllTaskFinish","parameters":[{"name":"flowTaskBo","in":"query","description":"鍙傛暟","required":true,"schema":{"$ref":"#/components/schemas/FlowTaskBo"}},{"name":"pageQuery","in":"query","description":"鍒嗛〉","required":true,"schema":{"$ref":"#/components/schemas/PageQuery"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"宸插姙浠诲姟鍒嗛〉鏁版嵁","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RPageResultFlowHisTaskVo"}}}}}}},"/workflow/task/getTask/{taskId}":{"get":{"tags":["浠诲姟绠$悊 鎺у埗灞?],"summary":"鏍规嵁浠诲姟 id 鏌ヨ浠诲姟璇︽儏銆?,"description":"鏍规嵁浠诲姟 id 鏌ヨ浠诲姟璇︽儏銆?,"operationId":"getTask","parameters":[{"name":"taskId","in":"path","description":"浠诲姟id","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"浠诲姟璇︽儏","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RFlowTaskVo"}}}}}}},"/workflow/task/getBackTaskNode/{taskId}/{nowNodeCode}":{"get":{"tags":["浠诲姟绠$悊 鎺у埗灞?],"summary":"鑾峰彇褰撳墠浠诲姟鍙┏鍥炵殑鍓嶇疆鑺傜偣銆?,"description":"鑾峰彇褰撳墠浠诲姟鍙┏鍥炵殑鍓嶇疆鑺傜偣銆?,"operationId":"getBackTaskNode","parameters":[{"name":"taskId","in":"path","description":"浠诲姟id","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"nowNodeCode","in":"path","description":"褰撳墠鑺傜偣","required":true,"schema":{"type":"string"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鍙┏鍥炶妭鐐瑰垪琛?,"content":{"*/*":{"schema":{"$ref":"#/components/schemas/RListNode"}}}}}}},"/workflow/task/currentTaskAllUser/{taskId}":{"get":{"tags":["浠诲姟绠$悊 鎺у埗灞?],"summary":"鑾峰彇褰撳墠浠诲姟鐨勬墍鏈夊姙鐞嗕汉銆?,"description":"鑾峰彇褰撳墠浠诲姟鐨勬墍鏈夊姙鐞嗕汉銆?,"operationId":"currentTaskAllUser","parameters":[{"name":"taskId","in":"path","description":"浠诲姟id","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鍔炵悊浜哄垪琛?,"content":{"*/*":{"schema":{"$ref":"#/components/schemas/RListUserDTO"}}}}}}},"/workflow/spel/{id}":{"get":{"tags":["娴佺▼ SpEL 琛ㄨ揪寮忓畾涔夋帶鍒跺櫒锛岃礋璐h〃杈惧紡瑙勫垯鐨勫鍒犳敼鏌ャ€?],"summary":"鑾峰彇娴佺▼ SpEL 琛ㄨ揪寮忓畾涔夎鎯呫€?,"description":"鑾峰彇娴佺▼ SpEL 琛ㄨ揪寮忓畾涔夎鎯呫€?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `workflow:spel:query`

","operationId":"getInfo","parameters":[{"name":"id","in":"path","description":"涓婚敭","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"琛ㄨ揪寮忚鎯?,"content":{"*/*":{"schema":{"$ref":"#/components/schemas/RFlowSpelVo"}}}}}}},"/workflow/spel/list":{"get":{"tags":["娴佺▼ SpEL 琛ㄨ揪寮忓畾涔夋帶鍒跺櫒锛岃礋璐h〃杈惧紡瑙勫垯鐨勫鍒犳敼鏌ャ€?],"summary":"鍒嗛〉鏌ヨ娴佺▼ SpEL 琛ㄨ揪寮忓畾涔夊垪琛ㄣ€?,"description":"鍒嗛〉鏌ヨ娴佺▼ SpEL 琛ㄨ揪寮忓畾涔夊垪琛ㄣ€?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `workflow:spel:list`

","operationId":"list","parameters":[{"name":"bo","in":"query","description":"鏌ヨ鏉′欢","required":true,"schema":{"$ref":"#/components/schemas/FlowSpelBo"}},{"name":"pageQuery","in":"query","description":"鍒嗛〉鍙傛暟","required":true,"schema":{"$ref":"#/components/schemas/PageQuery"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"琛ㄨ揪寮忓垎椤垫暟鎹?,"content":{"*/*":{"schema":{"$ref":"#/components/schemas/RPageResultFlowSpelVo"}}}}}}},"/workflow/leave/{id}":{"get":{"tags":["璇峰亣绀轰緥鎺у埗鍣紝婕旂ず涓氬姟鍗曟嵁涓庢祦绋嬪紩鎿庤仈鍔ㄧ殑鍏稿瀷鐢ㄦ硶銆?],"summary":"鑾峰彇璇峰亣鍗曡鎯呫€?,"description":"鑾峰彇璇峰亣鍗曡鎯呫€?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `workflow:leave:query`

","operationId":"getInfo_1","parameters":[{"name":"id","in":"path","description":"涓婚敭","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"璇峰亣璇︽儏","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RTestLeaveVo"}}}}}}},"/workflow/leave/list":{"get":{"tags":["璇峰亣绀轰緥鎺у埗鍣紝婕旂ず涓氬姟鍗曟嵁涓庢祦绋嬪紩鎿庤仈鍔ㄧ殑鍏稿瀷鐢ㄦ硶銆?],"summary":"鍒嗛〉鏌ヨ璇峰亣鍒楄〃銆?,"description":"鍒嗛〉鏌ヨ璇峰亣鍒楄〃銆?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `workflow:leave:list`

","operationId":"list_1","parameters":[{"name":"bo","in":"query","description":"鏌ヨ鏉′欢","required":true,"schema":{"$ref":"#/components/schemas/TestLeaveBo"}},{"name":"pageQuery","in":"query","description":"鍒嗛〉鍙傛暟","required":true,"schema":{"$ref":"#/components/schemas/PageQuery"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"璇峰亣鍒嗛〉鏁版嵁","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RPageResultTestLeaveVo"}}}}}}},"/workflow/instance/pageByRunning":{"get":{"tags":["娴佺▼瀹炰緥绠$悊 鎺у埗灞?],"summary":"鍒嗛〉鏌ヨ姝e湪杩愯鐨勬祦绋嬪疄渚嬨€?,"description":"鍒嗛〉鏌ヨ姝e湪杩愯鐨勬祦绋嬪疄渚嬨€?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `workflow:instance:list`

","operationId":"selectRunningInstanceList","parameters":[{"name":"flowInstanceBo","in":"query","description":"娴佺▼瀹炰緥","required":true,"schema":{"$ref":"#/components/schemas/FlowInstanceBo"}},{"name":"pageQuery","in":"query","description":"鍒嗛〉","required":true,"schema":{"$ref":"#/components/schemas/PageQuery"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"姝e湪杩愯鐨勬祦绋嬪疄渚嬪垎椤垫暟鎹?,"content":{"*/*":{"schema":{"$ref":"#/components/schemas/RPageResultFlowInstanceVo"}}}}}}},"/workflow/instance/pageByFinish":{"get":{"tags":["娴佺▼瀹炰緥绠$悊 鎺у埗灞?],"summary":"鍒嗛〉鏌ヨ宸茬粨鏉熺殑娴佺▼瀹炰緥銆?,"description":"鍒嗛〉鏌ヨ宸茬粨鏉熺殑娴佺▼瀹炰緥銆?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `workflow:instance:list`

","operationId":"selectFinishInstanceList","parameters":[{"name":"flowInstanceBo","in":"query","description":"娴佺▼瀹炰緥","required":true,"schema":{"$ref":"#/components/schemas/FlowInstanceBo"}},{"name":"pageQuery","in":"query","description":"鍒嗛〉","required":true,"schema":{"$ref":"#/components/schemas/PageQuery"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"宸茬粨鏉熺殑娴佺▼瀹炰緥鍒嗛〉鏁版嵁","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RPageResultFlowInstanceVo"}}}}}}},"/workflow/instance/pageByCurrent":{"get":{"tags":["娴佺▼瀹炰緥绠$悊 鎺у埗灞?],"summary":"鑾峰彇褰撳墠鐧诲綍浜哄彂璧风殑娴佺▼瀹炰緥鍒楄〃銆?,"description":"鑾峰彇褰撳墠鐧诲綍浜哄彂璧风殑娴佺▼瀹炰緥鍒楄〃銆?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `workflow:instance:currentList`

","operationId":"selectCurrentInstanceList","parameters":[{"name":"flowInstanceBo","in":"query","description":"鍙傛暟","required":true,"schema":{"$ref":"#/components/schemas/FlowInstanceBo"}},{"name":"pageQuery","in":"query","description":"鍒嗛〉","required":true,"schema":{"$ref":"#/components/schemas/PageQuery"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"褰撳墠鐢ㄦ埛鍙戣捣鐨勬祦绋嬪疄渚嬪垎椤垫暟鎹?,"content":{"*/*":{"schema":{"$ref":"#/components/schemas/RPageResultFlowInstanceVo"}}}}}}},"/workflow/instance/instanceVariable/{instanceId}":{"get":{"tags":["娴佺▼瀹炰緥绠$悊 鎺у埗灞?],"summary":"鑾峰彇娴佺▼鍙橀噺銆?,"description":"鑾峰彇娴佺▼鍙橀噺銆?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `workflow:instance:variableQuery`

","operationId":"instanceVariable","parameters":[{"name":"instanceId","in":"path","description":"娴佺▼瀹炰緥id","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"娴佺▼鍙橀噺","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RMapStringObject"}}}}}}},"/workflow/instance/getInfo/{businessId}":{"get":{"tags":["娴佺▼瀹炰緥绠$悊 鎺у埗灞?],"summary":"鏍规嵁涓氬姟 id 鏌ヨ娴佺▼瀹炰緥璇︾粏淇℃伅銆?,"description":"鏍规嵁涓氬姟 id 鏌ヨ娴佺▼瀹炰緥璇︾粏淇℃伅銆?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `workflow:instance:query`

","operationId":"getInfo_2","parameters":[{"name":"businessId","in":"path","description":"涓氬姟id","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"娴佺▼瀹炰緥璇︽儏","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RFlowInstanceVo"}}}}}}},"/workflow/instance/flowHisTaskList/{businessId}":{"get":{"tags":["娴佺▼瀹炰緥绠$悊 鎺у埗灞?],"summary":"鑾峰彇娴佺▼鍥惧拰娴佺▼璁板綍锛岀敤浜庡睍绀哄疄渚嬫祦杞建杩广€?,"description":"鑾峰彇娴佺▼鍥惧拰娴佺▼璁板綍锛岀敤浜庡睍绀哄疄渚嬫祦杞建杩广€?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `workflow:instance:query`

","operationId":"flowHisTaskList","parameters":[{"name":"businessId","in":"path","description":"涓氬姟id","required":true,"schema":{"type":"string"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"娴佺▼鍥句笌鍘嗗彶鑺傜偣淇℃伅","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RMapStringObject"}}}}}}},"/workflow/definition/{id}":{"get":{"tags":["娴佺▼瀹氫箟绠$悊 鎺у埗灞?],"summary":"鑾峰彇娴佺▼瀹氫箟璇︾粏淇℃伅銆?,"description":"鑾峰彇娴佺▼瀹氫箟璇︾粏淇℃伅銆?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `workflow:definition:query`

","operationId":"getInfo_3","parameters":[{"name":"id","in":"path","description":"娴佺▼瀹氫箟id","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"娴佺▼瀹氫箟璇︽儏","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RDefinition"}}}}}}},"/workflow/definition/xmlString/{id}":{"get":{"tags":["娴佺▼瀹氫箟绠$悊 鎺у埗灞?],"summary":"鑾峰彇娴佺▼瀹氫箟 JSON 瀛楃涓层€?,"description":"鑾峰彇娴佺▼瀹氫箟 JSON 瀛楃涓层€?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `workflow:definition:query`

","operationId":"xmlString","parameters":[{"name":"id","in":"path","description":"娴佺▼瀹氫箟id","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"娴佺▼瀹氫箟 JSON","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RString"}}}}}}},"/workflow/definition/unPublishList":{"get":{"tags":["娴佺▼瀹氫箟绠$悊 鎺у埗灞?],"summary":"鍒嗛〉鏌ヨ鏈彂甯冪殑娴佺▼瀹氫箟鍒楄〃銆?,"description":"鍒嗛〉鏌ヨ鏈彂甯冪殑娴佺▼瀹氫箟鍒楄〃銆?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `workflow:definition:list`

","operationId":"unPublishList","parameters":[{"name":"flowDefinition","in":"query","description":"鏌ヨ鏉′欢","required":true,"schema":{"$ref":"#/components/schemas/FlowDefinition"}},{"name":"pageQuery","in":"query","description":"鍒嗛〉鍙傛暟","required":true,"schema":{"$ref":"#/components/schemas/PageQuery"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鏈彂甯冩祦绋嬪畾涔夊垎椤垫暟鎹?,"content":{"*/*":{"schema":{"$ref":"#/components/schemas/RPageResultFlowDefinitionVo"}}}}}}},"/workflow/definition/list":{"get":{"tags":["娴佺▼瀹氫箟绠$悊 鎺у埗灞?],"summary":"鍒嗛〉鏌ヨ娴佺▼瀹氫箟鍒楄〃銆?,"description":"鍒嗛〉鏌ヨ娴佺▼瀹氫箟鍒楄〃銆?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `workflow:definition:list`

","operationId":"list_2","parameters":[{"name":"flowDefinition","in":"query","description":"鏌ヨ鏉′欢","required":true,"schema":{"$ref":"#/components/schemas/FlowDefinition"}},{"name":"pageQuery","in":"query","description":"鍒嗛〉鍙傛暟","required":true,"schema":{"$ref":"#/components/schemas/PageQuery"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"娴佺▼瀹氫箟鍒嗛〉鏁版嵁","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RPageResultFlowDefinitionVo"}}}}}}},"/workflow/category/{categoryId}":{"get":{"tags":["娴佺▼鍒嗙被"],"summary":"鑾峰彇鍗曚釜娴佺▼鍒嗙被璇︽儏銆?,"description":"鑾峰彇鍗曚釜娴佺▼鍒嗙被璇︽儏銆?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `workflow:category:query`

","operationId":"getInfo_4","parameters":[{"name":"categoryId","in":"path","description":"涓婚敭","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"娴佺▼鍒嗙被璇︽儏","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RFlowCategoryVo"}}}}}},"delete":{"tags":["娴佺▼鍒嗙被"],"summary":"鍒犻櫎娴佺▼鍒嗙被锛屽垹闄ゅ墠鏍¢獙榛樿鍒嗙被銆佸瓙鑺傜偣鍜岀粦瀹氭祦绋嬪畾涔夈€?,"description":"鍒犻櫎娴佺▼鍒嗙被锛屽垹闄ゅ墠鏍¢獙榛樿鍒嗙被銆佸瓙鑺傜偣鍜岀粦瀹氭祦绋嬪畾涔夈€?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `workflow:category:remove`

","operationId":"remove","parameters":[{"name":"categoryId","in":"path","description":"涓婚敭","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鎿嶄綔缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/workflow/category/list":{"get":{"tags":["娴佺▼鍒嗙被"],"summary":"鏌ヨ娴佺▼鍒嗙被鍒楄〃銆?,"description":"鏌ヨ娴佺▼鍒嗙被鍒楄〃銆?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `workflow:category:list`

","operationId":"list_3","parameters":[{"name":"bo","in":"query","description":"鏌ヨ鏉′欢","required":true,"schema":{"$ref":"#/components/schemas/FlowCategoryBo"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"娴佺▼鍒嗙被鍒楄〃","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RListFlowCategoryVo"}}}}}}},"/workflow/category/categoryTree":{"get":{"tags":["娴佺▼鍒嗙被"],"summary":"鑾峰彇娴佺▼鍒嗙被鏍戝垪琛紝鐢ㄤ簬娴佺▼瀹氫箟閫夋嫨鍒嗙被鑺傜偣銆?,"description":"鑾峰彇娴佺▼鍒嗙被鏍戝垪琛紝鐢ㄤ簬娴佺▼瀹氫箟閫夋嫨鍒嗙被鑺傜偣銆?,"operationId":"categoryTree","parameters":[{"name":"categoryBo","in":"query","description":"娴佺▼鍒嗙被","required":true,"schema":{"$ref":"#/components/schemas/FlowCategoryBo"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"娴佺▼鍒嗙被鏍?,"content":{"*/*":{"schema":{"$ref":"#/components/schemas/RListTreeString"}}}}}}},"/warm-flow/query-flow-chart/{id}":{"get":{"tags":["warm-flow-controller"],"operationId":"queryFlowChart","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiResultDefJson"}}}}}}},"/warm-flow/query-def/{id}":{"get":{"tags":["warm-flow-controller"],"operationId":"queryDef","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiResultDefJson"}}}}}}},"/warm-flow/query-def":{"get":{"tags":["warm-flow-controller"],"operationId":"queryDef_1","parameters":[],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiResultDefJson"}}}}}}},"/warm-flow/published-form":{"get":{"tags":["warm-flow-controller"],"operationId":"publishedForm","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiResultListForm"}}}}}}},"/warm-flow/node-ext":{"get":{"tags":["warm-flow-controller"],"operationId":"nodeExt","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiResultListNodeExt"}}}}}}},"/warm-flow/listener-list":{"get":{"tags":["warm-flow-controller"],"operationId":"listenerList","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiResultListListenerVo"}}}}}}},"/warm-flow/handler-type":{"get":{"tags":["warm-flow-controller"],"operationId":"handlerType","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiResultListString"}}}}}}},"/warm-flow/handler-result":{"get":{"tags":["warm-flow-controller"],"operationId":"handlerResult","parameters":[{"name":"arg0","in":"query","required":true,"schema":{"$ref":"#/components/schemas/HandlerQuery"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiResultHandlerSelectVo"}}}}}}},"/warm-flow/handler-feedback":{"get":{"tags":["warm-flow-controller"],"operationId":"handlerFeedback","parameters":[{"name":"arg0","in":"query","required":true,"schema":{"$ref":"#/components/schemas/HandlerFeedBackDto"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiResultListHandlerFeedBackVo"}}}}}}},"/warm-flow/handler-dict":{"get":{"tags":["warm-flow-controller"],"operationId":"handlerDict","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiResultListDict"}}}}}}},"/warm-flow/form-content/{id}":{"get":{"tags":["warm-flow-controller"],"operationId":"getFormContent","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiResultString"}}}}}}},"/warm-flow/execute/load/{taskId}":{"get":{"tags":["warm-flow-controller"],"operationId":"load","parameters":[{"name":"taskId","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiResultFlowDto"}}}}}}},"/warm-flow/execute/hisLoad/{taskId}":{"get":{"tags":["warm-flow-controller"],"operationId":"hisLoad","parameters":[{"name":"taskId","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiResultFlowDto"}}}}}}},"/warm-flow-ui/config":{"get":{"tags":["warm-flow-ui-controller"],"operationId":"config","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiResultWarmFlowVo"}}}}}}},"/system/user/unlock/{userId}":{"get":{"tags":["鐢ㄦ埛淇℃伅"],"summary":"瑙i攣鐢ㄦ埛","description":"瑙i攣鐢ㄦ埛

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:user:edit`

","operationId":"unlock","parameters":[{"name":"userId","in":"path","description":"鐢ㄦ埛ID","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鎿嶄綔缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/system/user/optionselect":{"get":{"tags":["鐢ㄦ埛淇℃伅"],"summary":"鏍规嵁鐢ㄦ埛ID涓叉壒閲忚幏鍙栫敤鎴峰熀纭€淇℃伅","description":"鏍规嵁鐢ㄦ埛ID涓叉壒閲忚幏鍙栫敤鎴峰熀纭€淇℃伅

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:user:query`

","operationId":"optionselect","parameters":[{"name":"userIds","in":"query","description":"鐢ㄦ埛ID涓?,"required":false,"schema":{"type":"array","items":{"type":"integer","format":"int64"}}},{"name":"deptId","in":"query","description":"閮ㄩ棬ID","required":false,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鐢ㄦ埛鍩虹淇℃伅鍒楄〃","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RListSysUserVo"}}}}}}},"/system/user/list":{"get":{"tags":["鐢ㄦ埛淇℃伅"],"summary":"鍒嗛〉鏌ヨ鐢ㄦ埛鍒楄〃銆?,"description":"鍒嗛〉鏌ヨ鐢ㄦ埛鍒楄〃銆?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:user:list`

","operationId":"list_4","parameters":[{"name":"user","in":"query","description":"鐢ㄦ埛鏌ヨ鏉′欢","required":true,"schema":{"$ref":"#/components/schemas/SysUserBo"}},{"name":"pageQuery","in":"query","description":"鍒嗛〉鍙傛暟","required":true,"schema":{"$ref":"#/components/schemas/PageQuery"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鐢ㄦ埛鍒嗛〉鍒楄〃","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RPageResultSysUserVo"}}}}}}},"/system/user/list/dept/{deptId}":{"get":{"tags":["鐢ㄦ埛淇℃伅"],"summary":"鑾峰彇鎸囧畾閮ㄩ棬涓嬬殑鍏ㄩ儴鐢ㄦ埛淇℃伅銆?,"description":"鑾峰彇鎸囧畾閮ㄩ棬涓嬬殑鍏ㄩ儴鐢ㄦ埛淇℃伅銆?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:user:list`

","operationId":"listByDept","parameters":[{"name":"deptId","in":"path","description":"閮ㄩ棬ID","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鐢ㄦ埛鍒楄〃","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RListSysUserVo"}}}}}}},"/system/user/getInfo":{"get":{"tags":["鐢ㄦ埛淇℃伅"],"summary":"鑾峰彇鐢ㄦ埛淇℃伅","description":"鑾峰彇鐢ㄦ埛淇℃伅","operationId":"getInfo_5","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"褰撳墠鐧诲綍鐢ㄦ埛淇℃伅銆佽鑹蹭笌鏉冮檺闆嗗悎","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RUserInfoVo"}}}}}}},"/system/user/deptTree":{"get":{"tags":["鐢ㄦ埛淇℃伅"],"summary":"鑾峰彇鐢ㄦ埛绛涢€夌敤鐨勯儴闂ㄦ爲銆?,"description":"鑾峰彇鐢ㄦ埛绛涢€夌敤鐨勯儴闂ㄦ爲銆?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:user:list`

","operationId":"deptTree","parameters":[{"name":"dept","in":"query","description":"閮ㄩ棬鏌ヨ鏉′欢","required":true,"schema":{"$ref":"#/components/schemas/SysDeptBo"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"閮ㄩ棬鏍戝垪琛?,"content":{"*/*":{"schema":{"$ref":"#/components/schemas/RListTreeString"}}}}}}},"/system/user/authRole/{userId}":{"get":{"tags":["鐢ㄦ埛淇℃伅"],"summary":"鏍规嵁鐢ㄦ埛缂栧彿鑾峰彇鎺堟潈瑙掕壊","description":"鏍规嵁鐢ㄦ埛缂栧彿鑾峰彇鎺堟潈瑙掕壊

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:user:query`

","operationId":"authRole","parameters":[{"name":"userId","in":"path","description":"鐢ㄦ埛ID","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鐢ㄦ埛鍙婂叾鍙巿鏉冭鑹蹭俊鎭?,"content":{"*/*":{"schema":{"$ref":"#/components/schemas/RSysUserInfoVo"}}}}}}},"/system/user/{userId}":{"get":{"tags":["鐢ㄦ埛淇℃伅"],"summary":"鏍规嵁鐢ㄦ埛缂栧彿鑾峰彇璇︾粏淇℃伅","description":"鏍规嵁鐢ㄦ埛缂栧彿鑾峰彇璇︾粏淇℃伅

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:user:query`

","operationId":"getInfo_6","parameters":[{"name":"userId","in":"path","description":"鐢ㄦ埛ID","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鐢ㄦ埛璇︽儏銆佽鑹蹭笌宀椾綅淇℃伅","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RSysUserInfoVo"}}}}}}},"/system/user/":{"get":{"tags":["鐢ㄦ埛淇℃伅"],"summary":"鏍规嵁鐢ㄦ埛缂栧彿鑾峰彇璇︾粏淇℃伅","description":"鏍规嵁鐢ㄦ埛缂栧彿鑾峰彇璇︾粏淇℃伅

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:user:query`

","operationId":"getInfo_7","parameters":[],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鐢ㄦ埛璇︽儏銆佽鑹蹭笌宀椾綅淇℃伅","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RSysUserInfoVo"}}}}}}},"/system/social/list":{"get":{"tags":["绀句細鍖栧叧绯?],"summary":"鏌ヨ褰撳墠鐧诲綍鐢ㄦ埛鐨勭ぞ浼氬寲璐﹀彿缁戝畾鍒楄〃銆?,"description":"鏌ヨ褰撳墠鐧诲綍鐢ㄦ埛鐨勭ぞ浼氬寲璐﹀彿缁戝畾鍒楄〃銆?,"operationId":"list_5","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"缁戝畾鍏崇郴鍒楄〃","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RListSysSocialVo"}}}}}}},"/system/role/{roleId}":{"get":{"tags":["瑙掕壊淇℃伅"],"summary":"鏍规嵁瑙掕壊缂栧彿鑾峰彇璇︾粏淇℃伅","description":"鏍规嵁瑙掕壊缂栧彿鑾峰彇璇︾粏淇℃伅

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:role:query`

","operationId":"getInfo_8","parameters":[{"name":"roleId","in":"path","description":"瑙掕壊ID","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"瑙掕壊璇︽儏","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RSysRoleVo"}}}}}}},"/system/role/optionselect":{"get":{"tags":["瑙掕壊淇℃伅"],"summary":"鑾峰彇瑙掕壊閫夋嫨妗嗗垪琛?,"description":"鑾峰彇瑙掕壊閫夋嫨妗嗗垪琛?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:role:query`

","operationId":"optionselect_1","parameters":[{"name":"roleIds","in":"query","description":"瑙掕壊ID涓?,"required":false,"schema":{"type":"array","items":{"type":"integer","format":"int64"}}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"瑙掕壊鍒楄〃","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RListSysRoleVo"}}}}}}},"/system/role/list":{"get":{"tags":["瑙掕壊淇℃伅"],"summary":"鍒嗛〉鏌ヨ瑙掕壊鍒楄〃銆?,"description":"鍒嗛〉鏌ヨ瑙掕壊鍒楄〃銆?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:role:list`

","operationId":"list_6","parameters":[{"name":"role","in":"query","description":"鏌ヨ鏉′欢","required":true,"schema":{"$ref":"#/components/schemas/SysRoleBo"}},{"name":"pageQuery","in":"query","description":"鍒嗛〉鍙傛暟","required":true,"schema":{"$ref":"#/components/schemas/PageQuery"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"瑙掕壊鍒嗛〉缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RPageResultSysRoleVo"}}}}}}},"/system/role/deptTree/{roleId}":{"get":{"tags":["瑙掕壊淇℃伅"],"summary":"鑾峰彇瀵瑰簲瑙掕壊閮ㄩ棬鏍戝垪琛?,"description":"鑾峰彇瀵瑰簲瑙掕壊閮ㄩ棬鏍戝垪琛?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:role:list`

","operationId":"roleDeptTreeselect","parameters":[{"name":"roleId","in":"path","description":"瑙掕壊ID","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"瑙掕壊閮ㄩ棬鏍戜俊鎭?,"content":{"*/*":{"schema":{"$ref":"#/components/schemas/RDeptTreeSelectVo"}}}}}}},"/system/role/authUser/unallocatedList":{"get":{"tags":["瑙掕壊淇℃伅"],"summary":"鏌ヨ鏈垎閰嶇敤鎴疯鑹插垪琛ㄣ€?,"description":"鏌ヨ鏈垎閰嶇敤鎴疯鑹插垪琛ㄣ€?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:role:list`

","operationId":"unallocatedList","parameters":[{"name":"user","in":"query","description":"鏌ヨ鏉′欢","required":true,"schema":{"$ref":"#/components/schemas/SysUserBo"}},{"name":"pageQuery","in":"query","description":"鍒嗛〉鍙傛暟","required":true,"schema":{"$ref":"#/components/schemas/PageQuery"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鐢ㄦ埛鍒嗛〉缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RPageResultSysUserVo"}}}}}}},"/system/role/authUser/allocatedList":{"get":{"tags":["瑙掕壊淇℃伅"],"summary":"鏌ヨ宸插垎閰嶇敤鎴疯鑹插垪琛ㄣ€?,"description":"鏌ヨ宸插垎閰嶇敤鎴疯鑹插垪琛ㄣ€?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:role:list`

","operationId":"allocatedList","parameters":[{"name":"user","in":"query","description":"鏌ヨ鏉′欢","required":true,"schema":{"$ref":"#/components/schemas/SysUserBo"}},{"name":"pageQuery","in":"query","description":"鍒嗛〉鍙傛暟","required":true,"schema":{"$ref":"#/components/schemas/PageQuery"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鐢ㄦ埛鍒嗛〉缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RPageResultSysUserVo"}}}}}}},"/system/post/{postId}":{"get":{"tags":["宀椾綅淇℃伅鎿嶄綔澶勭悊"],"summary":"鏍规嵁宀椾綅缂栧彿鑾峰彇璇︾粏淇℃伅","description":"鏍规嵁宀椾綅缂栧彿鑾峰彇璇︾粏淇℃伅

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:post:query`

","operationId":"getInfo_9","parameters":[{"name":"postId","in":"path","description":"宀椾綅ID","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"宀椾綅璇︽儏","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RSysPostVo"}}}}}}},"/system/post/optionselect":{"get":{"tags":["宀椾綅淇℃伅鎿嶄綔澶勭悊"],"summary":"鑾峰彇宀椾綅閫夋嫨妗嗗垪琛?,"description":"鑾峰彇宀椾綅閫夋嫨妗嗗垪琛?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:post:query`

","operationId":"optionselect_2","parameters":[{"name":"postIds","in":"query","description":"宀椾綅ID涓?,"required":false,"schema":{"type":"array","items":{"type":"integer","format":"int64"}}},{"name":"deptId","in":"query","description":"閮ㄩ棬id","required":false,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"宀椾綅鍒楄〃","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RListSysPostVo"}}}}}}},"/system/post/list":{"get":{"tags":["宀椾綅淇℃伅鎿嶄綔澶勭悊"],"summary":"鍒嗛〉鏌ヨ宀椾綅鍒楄〃銆?,"description":"鍒嗛〉鏌ヨ宀椾綅鍒楄〃銆?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:post:list`

","operationId":"list_7","parameters":[{"name":"post","in":"query","description":"鏌ヨ鏉′欢","required":true,"schema":{"$ref":"#/components/schemas/SysPostBo"}},{"name":"pageQuery","in":"query","description":"鍒嗛〉鍙傛暟","required":true,"schema":{"$ref":"#/components/schemas/PageQuery"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"宀椾綅鍒嗛〉缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RPageResultSysPostVo"}}}}}}},"/system/post/deptTree":{"get":{"tags":["宀椾綅淇℃伅鎿嶄綔澶勭悊"],"summary":"鑾峰彇宀椾綅绛涢€夌敤鐨勯儴闂ㄦ爲銆?,"description":"鑾峰彇宀椾綅绛涢€夌敤鐨勯儴闂ㄦ爲銆?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:post:list`

","operationId":"deptTree_1","parameters":[{"name":"dept","in":"query","description":"閮ㄩ棬鏌ヨ鏉′欢","required":true,"schema":{"$ref":"#/components/schemas/SysDeptBo"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"閮ㄩ棬鏍戝垪琛?,"content":{"*/*":{"schema":{"$ref":"#/components/schemas/RListTreeString"}}}}}}},"/system/notice/{noticeId}":{"get":{"tags":["鍏憡 淇℃伅鎿嶄綔澶勭悊"],"summary":"鏍规嵁閫氱煡鍏憡缂栧彿鑾峰彇璇︾粏淇℃伅","description":"鏍规嵁閫氱煡鍏憡缂栧彿鑾峰彇璇︾粏淇℃伅

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:notice:query`

","operationId":"getInfo_10","parameters":[{"name":"noticeId","in":"path","description":"鍏憡ID","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鍏憡璇︽儏","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RSysNoticeVo"}}}}}}},"/system/notice/list":{"get":{"tags":["鍏憡 淇℃伅鎿嶄綔澶勭悊"],"summary":"鍒嗛〉鏌ヨ閫氱煡鍏憡鍒楄〃銆?,"description":"鍒嗛〉鏌ヨ閫氱煡鍏憡鍒楄〃銆?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:notice:list`

","operationId":"list_8","parameters":[{"name":"notice","in":"query","description":"鏌ヨ鏉′欢","required":true,"schema":{"$ref":"#/components/schemas/SysNoticeBo"}},{"name":"pageQuery","in":"query","description":"鍒嗛〉鍙傛暟","required":true,"schema":{"$ref":"#/components/schemas/PageQuery"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鍏憡鍒嗛〉缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RPageResultSysNoticeVo"}}}}}}},"/system/menu/{menuId}":{"get":{"tags":["鑿滃崟淇℃伅"],"summary":"鏍规嵁鑿滃崟缂栧彿鑾峰彇璇︾粏淇℃伅","description":"鏍规嵁鑿滃崟缂栧彿鑾峰彇璇︾粏淇℃伅

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:menu:query`

**瑙掕壊鏍¢獙锛?*

- `superadmin`
","operationId":"getInfo_11","parameters":[{"name":"menuId","in":"path","description":"鑿滃崟ID","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鑿滃崟璇︽儏","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RSysMenuVo"}}}}}},"delete":{"tags":["鑿滃崟淇℃伅"],"summary":"鍒犻櫎鑿滃崟","description":"鍒犻櫎鑿滃崟

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:menu:remove`

**瑙掕壊鏍¢獙锛?*

- `superadmin`
","operationId":"remove_1","parameters":[{"name":"menuId","in":"path","description":"鑿滃崟ID","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鎿嶄綔缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/system/menu/treeselect":{"get":{"tags":["鑿滃崟淇℃伅"],"summary":"鑾峰彇鑿滃崟涓嬫媺鏍戝垪琛ㄣ€?,"description":"鑾峰彇鑿滃崟涓嬫媺鏍戝垪琛ㄣ€?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:menu:query`

","operationId":"treeselect","parameters":[{"name":"menu","in":"query","description":"鏌ヨ鏉′欢","required":true,"schema":{"$ref":"#/components/schemas/SysMenuBo"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鑿滃崟鏍?,"content":{"*/*":{"schema":{"$ref":"#/components/schemas/RListTreeString"}}}}}}},"/system/menu/roleMenuTreeselect/{roleId}":{"get":{"tags":["鑿滃崟淇℃伅"],"summary":"鍔犺浇瀵瑰簲瑙掕壊鑿滃崟鍒楄〃鏍?,"description":"鍔犺浇瀵瑰簲瑙掕壊鑿滃崟鍒楄〃鏍?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:menu:query`

","operationId":"roleMenuTreeselect","parameters":[{"name":"roleId","in":"path","description":"瑙掕壊ID","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"瑙掕壊鑿滃崟鏍戝強閫変腑鑺傜偣","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RMenuTreeSelectVo"}}}}}}},"/system/menu/list":{"get":{"tags":["鑿滃崟淇℃伅"],"summary":"鏌ヨ鑿滃崟鍒楄〃銆?,"description":"鏌ヨ鑿滃崟鍒楄〃銆?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:menu:list`

**瑙掕壊鏍¢獙锛?*

- `superadmin`
","operationId":"list_9","parameters":[{"name":"menu","in":"query","description":"鏌ヨ鏉′欢","required":true,"schema":{"$ref":"#/components/schemas/SysMenuBo"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鑿滃崟鍒楄〃","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RListSysMenuVo"}}}}}}},"/system/menu/getRouters":{"get":{"tags":["鑿滃崟淇℃伅"],"summary":"鑾峰彇璺敱淇℃伅","description":"鑾峰彇璺敱淇℃伅","operationId":"getRouters","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"褰撳墠鐢ㄦ埛鍙闂殑璺敱淇℃伅","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RListRouterVo"}}}}}}},"/system/dict/type/{dictId}":{"get":{"tags":["鏁版嵁瀛楀吀淇℃伅"],"summary":"鏌ヨ瀛楀吀绫诲瀷璇︾粏","description":"鏌ヨ瀛楀吀绫诲瀷璇︾粏

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:dict:query`

","operationId":"getInfo_12","parameters":[{"name":"dictId","in":"path","description":"瀛楀吀ID","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"瀛楀吀绫诲瀷璇︽儏","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RSysDictTypeVo"}}}}}}},"/system/dict/type/optionselect":{"get":{"tags":["鏁版嵁瀛楀吀淇℃伅"],"summary":"鑾峰彇瀛楀吀绫诲瀷涓嬫媺閫夋嫨鍒楄〃銆?,"description":"鑾峰彇瀛楀吀绫诲瀷涓嬫媺閫夋嫨鍒楄〃銆?,"operationId":"optionselect_3","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"瀛楀吀绫诲瀷鍒楄〃","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RListSysDictTypeVo"}}}}}}},"/system/dict/type/list":{"get":{"tags":["鏁版嵁瀛楀吀淇℃伅"],"summary":"鍒嗛〉鏌ヨ瀛楀吀绫诲瀷鍒楄〃銆?,"description":"鍒嗛〉鏌ヨ瀛楀吀绫诲瀷鍒楄〃銆?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:dict:list`

","operationId":"list_10","parameters":[{"name":"dictType","in":"query","description":"鏌ヨ鏉′欢","required":true,"schema":{"$ref":"#/components/schemas/SysDictTypeBo"}},{"name":"pageQuery","in":"query","description":"鍒嗛〉鍙傛暟","required":true,"schema":{"$ref":"#/components/schemas/PageQuery"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"瀛楀吀绫诲瀷鍒嗛〉缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RPageResultSysDictTypeVo"}}}}}}},"/system/dict/data/{dictCode}":{"get":{"tags":["鏁版嵁瀛楀吀淇℃伅"],"summary":"鏌ヨ瀛楀吀鏁版嵁璇︾粏","description":"鏌ヨ瀛楀吀鏁版嵁璇︾粏

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:dict:query`

","operationId":"getInfo_13","parameters":[{"name":"dictCode","in":"path","description":"瀛楀吀code","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"瀛楀吀鏁版嵁璇︽儏","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RSysDictDataVo"}}}}}}},"/system/dict/data/type/{dictType}":{"get":{"tags":["鏁版嵁瀛楀吀淇℃伅"],"summary":"鏍规嵁瀛楀吀绫诲瀷鏌ヨ瀛楀吀鏁版嵁淇℃伅","description":"鏍规嵁瀛楀吀绫诲瀷鏌ヨ瀛楀吀鏁版嵁淇℃伅","operationId":"dictType","parameters":[{"name":"dictType","in":"path","description":"瀛楀吀绫诲瀷","required":true,"schema":{"type":"string"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"瀛楀吀鏁版嵁鍒楄〃","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RListSysDictDataVo"}}}}}}},"/system/dict/data/list":{"get":{"tags":["鏁版嵁瀛楀吀淇℃伅"],"summary":"鍒嗛〉鏌ヨ瀛楀吀鏁版嵁鍒楄〃銆?,"description":"鍒嗛〉鏌ヨ瀛楀吀鏁版嵁鍒楄〃銆?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:dict:list`

","operationId":"list_11","parameters":[{"name":"dictData","in":"query","description":"鏌ヨ鏉′欢","required":true,"schema":{"$ref":"#/components/schemas/SysDictDataBo"}},{"name":"pageQuery","in":"query","description":"鍒嗛〉鍙傛暟","required":true,"schema":{"$ref":"#/components/schemas/PageQuery"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"瀛楀吀鏁版嵁鍒嗛〉缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RPageResultSysDictDataVo"}}}}}}},"/system/dept/{deptId}":{"get":{"tags":["閮ㄩ棬淇℃伅"],"summary":"鏍规嵁閮ㄩ棬缂栧彿鑾峰彇璇︾粏淇℃伅","description":"鏍规嵁閮ㄩ棬缂栧彿鑾峰彇璇︾粏淇℃伅

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:dept:query`

","operationId":"getInfo_14","parameters":[{"name":"deptId","in":"path","description":"閮ㄩ棬ID","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"閮ㄩ棬璇︽儏","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RSysDeptVo"}}}}}},"delete":{"tags":["閮ㄩ棬淇℃伅"],"summary":"鍒犻櫎閮ㄩ棬","description":"鍒犻櫎閮ㄩ棬

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:dept:remove`

","operationId":"remove_2","parameters":[{"name":"deptId","in":"path","description":"閮ㄩ棬ID","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鎿嶄綔缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/system/dept/optionselect":{"get":{"tags":["閮ㄩ棬淇℃伅"],"summary":"鑾峰彇閮ㄩ棬閫夋嫨妗嗗垪琛?,"description":"鑾峰彇閮ㄩ棬閫夋嫨妗嗗垪琛?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:dept:query`

","operationId":"optionselect_4","parameters":[{"name":"deptIds","in":"query","description":"閮ㄩ棬ID涓?,"required":false,"schema":{"type":"array","items":{"type":"integer","format":"int64"}}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"閮ㄩ棬鍒楄〃","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RListSysDeptVo"}}}}}}},"/system/dept/list":{"get":{"tags":["閮ㄩ棬淇℃伅"],"summary":"鏌ヨ閮ㄩ棬鍒楄〃銆?,"description":"鏌ヨ閮ㄩ棬鍒楄〃銆?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:dept:list`

","operationId":"list_12","parameters":[{"name":"dept","in":"query","description":"鏌ヨ鏉′欢","required":true,"schema":{"$ref":"#/components/schemas/SysDeptBo"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"閮ㄩ棬鍒楄〃","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RListSysDeptVo"}}}}}}},"/system/dept/list/exclude/{deptId}":{"get":{"tags":["閮ㄩ棬淇℃伅"],"summary":"鏌ヨ閮ㄩ棬鍒楄〃锛堟帓闄よ妭鐐癸級","description":"鏌ヨ閮ㄩ棬鍒楄〃锛堟帓闄よ妭鐐癸級

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:dept:list`

","operationId":"excludeChild","parameters":[{"name":"deptId","in":"path","description":"閮ㄩ棬ID","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"杩囨护鍚庣殑閮ㄩ棬鍒楄〃","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RListSysDeptVo"}}}}}}},"/system/config/{configId}":{"get":{"tags":["鍙傛暟閰嶇疆 淇℃伅鎿嶄綔澶勭悊"],"summary":"鏍规嵁鍙傛暟缂栧彿鑾峰彇璇︾粏淇℃伅","description":"鏍规嵁鍙傛暟缂栧彿鑾峰彇璇︾粏淇℃伅

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:config:query`

","operationId":"getInfo_15","parameters":[{"name":"configId","in":"path","description":"鍙傛暟ID","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鍙傛暟閰嶇疆璇︽儏","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RSysConfigVo"}}}}}}},"/system/config/list":{"get":{"tags":["鍙傛暟閰嶇疆 淇℃伅鎿嶄綔澶勭悊"],"summary":"鍒嗛〉鏌ヨ鍙傛暟閰嶇疆鍒楄〃銆?,"description":"鍒嗛〉鏌ヨ鍙傛暟閰嶇疆鍒楄〃銆?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:config:list`

","operationId":"list_13","parameters":[{"name":"config","in":"query","description":"鏌ヨ鏉′欢","required":true,"schema":{"$ref":"#/components/schemas/SysConfigBo"}},{"name":"pageQuery","in":"query","description":"鍒嗛〉鍙傛暟","required":true,"schema":{"$ref":"#/components/schemas/PageQuery"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鍙傛暟閰嶇疆鍒嗛〉缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RPageResultSysConfigVo"}}}}}}},"/system/config/configKey/{configKey}":{"get":{"tags":["鍙傛暟閰嶇疆 淇℃伅鎿嶄綔澶勭悊"],"summary":"鏍规嵁鍙傛暟閿悕鏌ヨ鍙傛暟鍊?,"description":"鏍规嵁鍙傛暟閿悕鏌ヨ鍙傛暟鍊?,"operationId":"getConfigKey","parameters":[{"name":"configKey","in":"path","description":"鍙傛暟Key","required":true,"schema":{"type":"string"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鍙傛暟鍊?,"content":{"*/*":{"schema":{"$ref":"#/components/schemas/RString"}}}}}}},"/system/client/{id}":{"get":{"tags":["瀹㈡埛绔鐞?],"summary":"鑾峰彇鍗曚釜瀹㈡埛绔殑璇︾粏閰嶇疆淇℃伅銆?,"description":"鑾峰彇鍗曚釜瀹㈡埛绔殑璇︾粏閰嶇疆淇℃伅銆?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:client:query`

","operationId":"getInfo_16","parameters":[{"name":"id","in":"path","description":"涓婚敭","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"瀹㈡埛绔鎯?,"content":{"*/*":{"schema":{"$ref":"#/components/schemas/RSysClientVo"}}}}}}},"/system/client/list":{"get":{"tags":["瀹㈡埛绔鐞?],"summary":"鍒嗛〉鏌ヨ瀹㈡埛绔鐞嗗垪琛ㄣ€?,"description":"鍒嗛〉鏌ヨ瀹㈡埛绔鐞嗗垪琛ㄣ€?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:client:list`

","operationId":"list_14","parameters":[{"name":"bo","in":"query","description":"鏌ヨ鏉′欢","required":true,"schema":{"$ref":"#/components/schemas/SysClientBo"}},{"name":"pageQuery","in":"query","description":"鍒嗛〉鍙傛暟","required":true,"schema":{"$ref":"#/components/schemas/PageQuery"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"瀹㈡埛绔垎椤垫暟鎹?,"content":{"*/*":{"schema":{"$ref":"#/components/schemas/RPageResultSysClientVo"}}}}}}},"/resource/sms/code":{"get":{"tags":["楠岃瘉鐮佹搷浣滃鐞?],"summary":"鍙戦€佺煭淇¢獙璇佺爜銆?,"description":"鍙戦€佺煭淇¢獙璇佺爜銆?br>

璁块棶鏉冮檺


> **鏉冮檺绛栫暐**锛氬拷鐣ユ潈闄愭鏌?br>","operationId":"smsCode","parameters":[{"name":"phoneNumber","in":"query","description":"鐢ㄦ埛鎵嬫満鍙?,"required":true,"schema":{"type":"string","minLength":1}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鎿嶄綔缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/resource/oss/list":{"get":{"tags":["鏂囦欢涓婁紶 鎺у埗灞?],"summary":"鍒嗛〉鏌ヨ OSS 瀵硅薄瀛樺偍鍒楄〃銆?,"description":"鍒嗛〉鏌ヨ OSS 瀵硅薄瀛樺偍鍒楄〃銆?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:oss:list`

","operationId":"list_15","parameters":[{"name":"bo","in":"query","description":"鏌ヨ鏉′欢","required":true,"schema":{"$ref":"#/components/schemas/SysOssBo"}},{"name":"pageQuery","in":"query","description":"鍒嗛〉鍙傛暟","required":true,"schema":{"$ref":"#/components/schemas/PageQuery"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OSS 鍒嗛〉缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RPageResultSysOssVo"}}}}}}},"/resource/oss/listByIds/{ossIds}":{"get":{"tags":["鏂囦欢涓婁紶 鎺у埗灞?],"summary":"鏌ヨOSS瀵硅薄鍩轰簬id涓?,"description":"鏌ヨOSS瀵硅薄鍩轰簬id涓?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:oss:query`

","operationId":"listByIds","parameters":[{"name":"ossIds","in":"path","description":"OSS瀵硅薄ID涓?,"required":true,"schema":{"type":"array","items":{"type":"integer","format":"int64"}}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OSS 瀵硅薄鍒楄〃","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RListSysOssVo"}}}}}}},"/resource/oss/download/{ossId}":{"get":{"tags":["鏂囦欢涓婁紶 鎺у埗灞?],"summary":"涓嬭浇OSS瀵硅薄","description":"涓嬭浇OSS瀵硅薄

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:oss:download`

","operationId":"download","parameters":[{"name":"ossId","in":"path","description":"OSS瀵硅薄ID","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"500":{"description":"Internal Server Error"},"200":{"description":"OK","content":{"*/*":{"schema":{"type":"string","format":"byte"}}}}}}},"/resource/oss/config/{ossConfigId}":{"get":{"tags":["瀵硅薄瀛樺偍閰嶇疆"],"summary":"鑾峰彇鍗曚釜瀵硅薄瀛樺偍閰嶇疆璇︽儏銆?,"description":"鑾峰彇鍗曚釜瀵硅薄瀛樺偍閰嶇疆璇︽儏銆?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:ossConfig:list`

","operationId":"getInfo_17","parameters":[{"name":"ossConfigId","in":"path","description":"OSS閰嶇疆ID","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"閰嶇疆璇︽儏","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RSysOssConfigVo"}}}}}}},"/resource/oss/config/list":{"get":{"tags":["瀵硅薄瀛樺偍閰嶇疆"],"summary":"鍒嗛〉鏌ヨ瀵硅薄瀛樺偍閰嶇疆鍒楄〃銆?,"description":"鍒嗛〉鏌ヨ瀵硅薄瀛樺偍閰嶇疆鍒楄〃銆?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:ossConfig:list`

","operationId":"list_16","parameters":[{"name":"bo","in":"query","description":"鏌ヨ鏉′欢","required":true,"schema":{"$ref":"#/components/schemas/SysOssConfigBo"}},{"name":"pageQuery","in":"query","description":"鍒嗛〉鍙傛暟","required":true,"schema":{"$ref":"#/components/schemas/PageQuery"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"閰嶇疆鍒嗛〉鏁版嵁","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RPageResultSysOssConfigVo"}}}}}}},"/resource/message":{"get":{"tags":["SSE 鎺у埗鍣?],"summary":"寤虹珛褰撳墠鐧诲綍鐢ㄦ埛鐨?SSE 杩炴帴銆?,"description":"寤虹珛褰撳墠鐧诲綍鐢ㄦ埛鐨?SSE 杩炴帴銆?,"operationId":"connect","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"SSE 鍙戝皠鍣?,"content":{"text/event-stream":{"schema":{"$ref":"#/components/schemas/SseEmitter"}}}}}}},"/resource/message/close":{"get":{"tags":["SSE 鎺у埗鍣?],"summary":"鍏抽棴褰撳墠鐧诲綍鐢ㄦ埛鐨?SSE 杩炴帴銆?,"description":"鍏抽棴褰撳墠鐧诲綍鐢ㄦ埛鐨?SSE 杩炴帴銆?br>

璁块棶鏉冮檺


> **鏉冮檺绛栫暐**锛氬拷鐣ユ潈闄愭鏌?br>","operationId":"close","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鎿嶄綔缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/resource/message/box":{"get":{"tags":["娑堟伅璁板綍鎺у埗鍣?],"summary":"鏌ヨ褰撳墠鐢ㄦ埛娑堟伅鐩掑瓙鏁版嵁","description":"鏌ヨ褰撳墠鐢ㄦ埛娑堟伅鐩掑瓙鏁版嵁","operationId":"getBox","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"娑堟伅鐩掑瓙鏁版嵁","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RSysMessageBoxVo"}}}}}}},"/resource/email/code":{"get":{"tags":["楠岃瘉鐮佹搷浣滃鐞?],"summary":"鍙戦€侀偖绠遍獙璇佺爜","description":"鍙戦€侀偖绠遍獙璇佺爜

璁块棶鏉冮檺


> **鏉冮檺绛栫暐**锛氬拷鐣ユ潈闄愭鏌?br>","operationId":"emailCode","parameters":[{"name":"email","in":"query","description":"閭","required":true,"schema":{"type":"string","minLength":1}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鎿嶄綔缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/monitor/operlog/list":{"get":{"tags":["鎿嶄綔鏃ュ織璁板綍"],"summary":"鍒嗛〉鏌ヨ鎿嶄綔鏃ュ織璁板綍銆?,"description":"鍒嗛〉鏌ヨ鎿嶄綔鏃ュ織璁板綍銆?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `monitor:operlog:list`

","operationId":"list_17","parameters":[{"name":"operLog","in":"query","description":"鏌ヨ鏉′欢","required":true,"schema":{"$ref":"#/components/schemas/SysOperLogBo"}},{"name":"pageQuery","in":"query","description":"鍒嗛〉鍙傛暟","required":true,"schema":{"$ref":"#/components/schemas/PageQuery"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鎿嶄綔鏃ュ織鍒嗛〉缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RPageResultSysOperLogVo"}}}}}}},"/monitor/online":{"get":{"tags":["鍦ㄧ嚎鐢ㄦ埛鐩戞帶"],"summary":"鑾峰彇褰撳墠鐧诲綍鐢ㄦ埛鐨勫湪绾胯澶囧垪琛紝浠呰繑鍥炲綋鍓嶈处鍙蜂粛鏈夋晥鐨?token 浼氳瘽銆?,"description":"鑾峰彇褰撳墠鐧诲綍鐢ㄦ埛鐨勫湪绾胯澶囧垪琛紝浠呰繑鍥炲綋鍓嶈处鍙蜂粛鏈夋晥鐨?token 浼氳瘽銆?,"operationId":"getInfo_18","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"褰撳墠鐢ㄦ埛鍦ㄧ嚎璁惧鍒楄〃","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RPageResultSysUserOnline"}}}}}}},"/monitor/online/list":{"get":{"tags":["鍦ㄧ嚎鐢ㄦ埛鐩戞帶"],"summary":"鑾峰彇鍦ㄧ嚎鐢ㄦ埛鐩戞帶鍒楄〃锛屽苟鎸?IP 鎴栫敤鎴峰悕鏉′欢杩囨护褰撳墠鏈夋晥浼氳瘽銆?,"description":"鑾峰彇鍦ㄧ嚎鐢ㄦ埛鐩戞帶鍒楄〃锛屽苟鎸?IP 鎴栫敤鎴峰悕鏉′欢杩囨护褰撳墠鏈夋晥浼氳瘽銆?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `monitor:online:list`

","operationId":"list_18","parameters":[{"name":"ipaddr","in":"query","description":"IP鍦板潃","required":true,"schema":{"type":"string"}},{"name":"userName","in":"query","description":"鐢ㄦ埛鍚?,"required":true,"schema":{"type":"string"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鍦ㄧ嚎鐢ㄦ埛鍒嗛〉鏁版嵁","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RPageResultSysUserOnline"}}}}}}},"/monitor/loginInfo/unlock/{userName}":{"get":{"tags":["绯荤粺璁块棶璁板綍"],"summary":"娓呴櫎鎸囧畾鐢ㄦ埛鐨勭櫥褰曞け璐ラ攣瀹氱姸鎬併€?,"description":"娓呴櫎鎸囧畾鐢ㄦ埛鐨勭櫥褰曞け璐ラ攣瀹氱姸鎬併€?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `monitor:logininfo:unlock`

","operationId":"unlock_1","parameters":[{"name":"userName","in":"path","description":"鐢ㄦ埛鍚?,"required":true,"schema":{"type":"string"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鎿嶄綔缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/monitor/loginInfo/list":{"get":{"tags":["绯荤粺璁块棶璁板綍"],"summary":"鍒嗛〉鏌ヨ绯荤粺璁块棶璁板綍銆?,"description":"鍒嗛〉鏌ヨ绯荤粺璁块棶璁板綍銆?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `monitor:logininfo:list`

","operationId":"list_19","parameters":[{"name":"loginInfo","in":"query","description":"鏌ヨ鏉′欢","required":true,"schema":{"$ref":"#/components/schemas/SysLoginInfoBo"}},{"name":"pageQuery","in":"query","description":"鍒嗛〉鍙傛暟","required":true,"schema":{"$ref":"#/components/schemas/PageQuery"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鐧诲綍鏃ュ織鍒嗛〉缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RPageResultSysLoginInfoVo"}}}}}}},"/monitor/cache":{"get":{"tags":["缂撳瓨鐩戞帶"],"summary":"鑾峰彇 Redis 缂撳瓨鐩戞帶淇℃伅銆?,"description":"鑾峰彇 Redis 缂撳瓨鐩戞帶淇℃伅銆?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `monitor:cache:list`

","operationId":"getInfo_19","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"500":{"description":"Internal Server Error"},"200":{"description":"Redis 淇℃伅銆佸簱澶у皬涓庡懡浠ょ粺璁?,"content":{"*/*":{"schema":{"$ref":"#/components/schemas/RCacheListInfoVo"}}}}}}},"/device/device/{deviceId}":{"get":{"tags":["鍚庡彴璁惧绠$悊銆?],"summary":"鏌ヨ璁惧璇︽儏銆傝繍琛屾暟鎹彧璇汇€?,"description":"鏌ヨ璁惧璇︽儏銆傝繍琛屾暟鎹彧璇汇€?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `device:device:query`

","operationId":"getInfo_20","parameters":[{"name":"deviceId","in":"path","description":"璁惧涓婚敭","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"璁惧璇︽儏","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RCzDeviceVo"}}}}}}},"/device/device/productOptions":{"get":{"tags":["鍚庡彴璁惧绠$悊銆?],"summary":"鏌ヨ鍙坊鍔犵殑浜у搧妯℃澘銆?,"description":"鏌ヨ鍙坊鍔犵殑浜у搧妯℃澘銆?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `device:device:query` | `device:device:add`

","operationId":"productOptions","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"浜у搧妯℃澘","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RListCzProductOptionVo"}}}}}}},"/device/device/locationOptions":{"get":{"tags":["鍚庡彴璁惧绠$悊銆?],"summary":"鏌ヨ鍙€夋嫨鐨勬埧闂淬€?,"description":"鏌ヨ鍙€夋嫨鐨勬埧闂淬€?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `device:device:query` | `device:device:add` | `device:device:edit`

","operationId":"locationOptions","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鎴块棿","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RListCzLocationOptionVo"}}}}}}},"/device/device/list":{"get":{"tags":["鍚庡彴璁惧绠$悊銆?],"summary":"鍒嗛〉鏌ヨ璁惧銆?,"description":"鍒嗛〉鏌ヨ璁惧銆?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `device:device:list`

","operationId":"list_20","parameters":[{"name":"bo","in":"query","description":"鏌ヨ鏉′欢","required":true,"schema":{"$ref":"#/components/schemas/CzDeviceBo"}},{"name":"pageQuery","in":"query","description":"鍒嗛〉鍙傛暟","required":true,"schema":{"$ref":"#/components/schemas/PageQuery"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"璁惧鍒嗛〉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RPageResultCzDeviceVo"}}}}}}},"/demo/websocket/send":{"get":{"tags":["WebSocket 婕旂ず妗堜緥"],"summary":"鍙戝竷娑堟伅","description":"鍙戝竷娑堟伅","operationId":"send","parameters":[{"name":"userId","in":"query","description":"鐩爣鐢ㄦ埛","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"message","in":"query","description":"鍙戦€佸唴瀹?,"required":true,"schema":{"type":"string"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/demo/tree/{id}":{"get":{"tags":["娴嬭瘯鏍戣〃Controller"],"summary":"鑾峰彇娴嬭瘯鏍戣〃璇︾粏淇℃伅","description":"鑾峰彇娴嬭瘯鏍戣〃璇︾粏淇℃伅

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `demo:tree:query`

","operationId":"getInfo_21","parameters":[{"name":"id","in":"path","description":"娴嬭瘯鏍慖D","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RTestTreeVo"}}}}}}},"/demo/tree/list":{"get":{"tags":["娴嬭瘯鏍戣〃Controller"],"summary":"鏌ヨ娴嬭瘯鏍戣〃鍒楄〃","description":"鏌ヨ娴嬭瘯鏍戣〃鍒楄〃

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `demo:tree:list`

","operationId":"list_21","parameters":[{"name":"bo","in":"query","required":true,"schema":{"$ref":"#/components/schemas/TestTreeBo"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RListTestTreeVo"}}}}}}},"/demo/tree/export":{"get":{"tags":["娴嬭瘯鏍戣〃Controller"],"summary":"瀵煎嚭娴嬭瘯鏍戣〃鍒楄〃","description":"瀵煎嚭娴嬭瘯鏍戣〃鍒楄〃

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `demo:tree:export`

","operationId":"export_13","parameters":[{"name":"bo","in":"query","required":true,"schema":{"$ref":"#/components/schemas/TestTreeBo"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK"}}}},"/demo/sms/sendTencent":{"get":{"tags":["鐭俊婕旂ず妗堜緥"],"summary":"鍙戦€佺煭淇encent","description":"鍙戦€佺煭淇encent","operationId":"sendTencent","parameters":[{"name":"phones","in":"query","description":"鐢佃瘽鍙?,"required":true,"schema":{"type":"string"}},{"name":"templateId","in":"query","description":"妯℃澘ID","required":true,"schema":{"type":"string"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RObject"}}}}}}},"/demo/sms/sendAliyun":{"get":{"tags":["鐭俊婕旂ず妗堜緥"],"summary":"鍙戦€佺煭淇liyun","description":"鍙戦€佺煭淇liyun","operationId":"sendAliyun","parameters":[{"name":"phones","in":"query","description":"鐢佃瘽鍙?,"required":true,"schema":{"type":"string"}},{"name":"templateId","in":"query","description":"妯℃澘ID","required":true,"schema":{"type":"string"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RObject"}}}}}}},"/demo/sms/removeBlacklist":{"get":{"tags":["鐭俊婕旂ず妗堜緥"],"summary":"绉婚櫎榛戝悕鍗?,"description":"绉婚櫎榛戝悕鍗?,"operationId":"removeBlacklist","parameters":[{"name":"phone","in":"query","description":"鎵嬫満鍙?,"required":true,"schema":{"type":"string"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RObject"}}}}}}},"/demo/sms/addBlacklist":{"get":{"tags":["鐭俊婕旂ず妗堜緥"],"summary":"娣诲姞榛戝悕鍗?,"description":"娣诲姞榛戝悕鍗?,"operationId":"addBlacklist","parameters":[{"name":"phone","in":"query","description":"鎵嬫満鍙?,"required":true,"schema":{"type":"string"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RObject"}}}}}}},"/demo/sensitive/test":{"get":{"tags":["娴嬭瘯鏁版嵁鑴辨晱鎺у埗鍣?],"summary":"娴嬭瘯鏁版嵁鑴辨晱","description":"娴嬭瘯鏁版嵁鑴辨晱","operationId":"test","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RTestSensitive"}}}}}}},"/demo/saTokenDoc/special/tempPermission":{"get":{"tags":["SaToken 鏉冮檺娴嬭瘯 鎺ュ彛鏂囨。杈撳嚭娴嬭瘯"],"summary":"鍦烘櫙15锛氫复鏃舵潈闄愭牎楠岋紙SaCheckPermission閫昏緫锛氫复鏃舵潈闄?姘镐箙鏉冮檺锛塡n 娉細涓存椂鏉冮檺闇€閫氳繃SaToken API鎵嬪姩璁剧疆锛屽 SaHolder.getStpLogic().setTempPermission(\"system:temp:test\")","description":"鍦烘櫙15锛氫复鏃舵潈闄愭牎楠岋紙SaCheckPermission閫昏緫锛氫复鏃舵潈闄?姘镐箙鏉冮檺锛塡n 娉細涓存椂鏉冮檺闇€閫氳繃SaToken API鎵嬪姩璁剧疆锛屽 SaHolder.getStpLogic().setTempPermission(\"system:temp:test\")

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:temp:test`

","operationId":"tempPermission","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/demo/saTokenDoc/special/loginTypeSpecify":{"get":{"tags":["SaToken 鏉冮檺娴嬭瘯 鎺ュ彛鏂囨。杈撳嚭娴嬭瘯"],"summary":"鍦烘櫙16锛氱櫥褰曠被鍨嬫寚瀹氾紙澶氱鐧诲綍鍦烘櫙锛屽PC/APP/灏忕▼搴忥級\n 娉細闇€閰嶅悎SaToken澶氳处鍙蜂綋绯婚厤缃?,"description":"鍦烘櫙16锛氱櫥褰曠被鍨嬫寚瀹氾紙澶氱鐧诲綍鍦烘櫙锛屽PC/APP/灏忕▼搴忥級\n 娉細闇€閰嶅悎SaToken澶氳处鍙蜂綋绯婚厤缃?,"operationId":"loginTypeSpecify","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/demo/saTokenDoc/special/ignoreOverride":{"get":{"tags":["SaToken 鏉冮檺娴嬭瘯 鎺ュ彛鏂囨。杈撳嚭娴嬭瘯"],"summary":"鍦烘櫙14锛歋aIgnore灞€閮ㄨ鐩栵紙鏂规硶娉ㄨВ瑕嗙洊绫绘敞瑙o紝鑻ユ湁锛塡n 鍋囪绫讳笂鏈堾SaCheckLogin锛屾柟娉曚笂@SaIgnore浼氳鐩?,"description":"鍦烘櫙14锛歋aIgnore灞€閮ㄨ鐩栵紙鏂规硶娉ㄨВ瑕嗙洊绫绘敞瑙o紝鑻ユ湁锛塡n 鍋囪绫讳笂鏈堾SaCheckLogin锛屾柟娉曚笂@SaIgnore浼氳鐩?br>

璁块棶鏉冮檺


> **鏉冮檺绛栫暐**锛氬拷鐣ユ潈闄愭鏌?br>","operationId":"ignoreOverride","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/demo/saTokenDoc/basic/singleRole":{"get":{"tags":["SaToken 鏉冮檺娴嬭瘯 鎺ュ彛鏂囨。杈撳嚭娴嬭瘯"],"summary":"鍦烘櫙2锛氬崟涓€瑙掕壊鏍¢獙锛圓ND妯″紡锛岄粯璁わ級","description":"鍦烘櫙2锛氬崟涓€瑙掕壊鏍¢獙锛圓ND妯″紡锛岄粯璁わ級

璁块棶鏉冮檺


**瑙掕壊鏍¢獙锛?*

- `admin`
","operationId":"singleRole","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/demo/saTokenDoc/basic/singlePermission":{"get":{"tags":["SaToken 鏉冮檺娴嬭瘯 鎺ュ彛鏂囨。杈撳嚭娴嬭瘯"],"summary":"鍦烘櫙3锛氬崟涓€鏉冮檺鏍¢獙锛圓ND妯″紡锛岄粯璁わ級","description":"鍦烘櫙3锛氬崟涓€鏉冮檺鏍¢獙锛圓ND妯″紡锛岄粯璁わ級

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:user:view`

","operationId":"singlePermission","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/demo/saTokenDoc/basic/loginOnly":{"get":{"tags":["SaToken 鏉冮檺娴嬭瘯 鎺ュ彛鏂囨。杈撳嚭娴嬭瘯"],"summary":"鍦烘櫙1锛氫粎鐧诲綍鏍¢獙锛堟棤瑙掕壊/鏉冮檺闄愬埗锛屽彧闇€鐧诲綍鎬侊級","description":"鍦烘櫙1锛氫粎鐧诲綍鏍¢獙锛堟棤瑙掕壊/鏉冮檺闄愬埗锛屽彧闇€鐧诲綍鎬侊級","operationId":"loginOnly","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/demo/saTokenDoc/basic/ignoreAll":{"get":{"tags":["SaToken 鏉冮檺娴嬭瘯 鎺ュ彛鏂囨。杈撳嚭娴嬭瘯"],"summary":"鍦烘櫙4锛氬拷鐣ユ墍鏈夋潈闄愭牎楠岋紙SaIgnore浼樺厛绾ф渶楂橈級","description":"鍦烘櫙4锛氬拷鐣ユ墍鏈夋潈闄愭牎楠岋紙SaIgnore浼樺厛绾ф渶楂橈級

璁块棶鏉冮檺


> **鏉冮檺绛栫暐**锛氬拷鐣ユ潈闄愭鏌?br>","operationId":"ignoreAll","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/demo/saTokenDoc/advanced/roleWildcardPrefix":{"get":{"tags":["SaToken 鏉冮檺娴嬭瘯 鎺ュ彛鏂囨。杈撳嚭娴嬭瘯"],"summary":"鍦烘櫙10锛氳鑹查€氶厤绗﹀尮閰嶏紙鍓嶇紑鍖归厤锛塡n 鎷ユ湁admin_* 鍗冲彲鍖归厤鎵€鏈塧dmin寮€澶寸殑瑙掕壊","description":"鍦烘櫙10锛氳鑹查€氶厤绗﹀尮閰嶏紙鍓嶇紑鍖归厤锛塡n 鎷ユ湁admin_* 鍗冲彲鍖归厤鎵€鏈塧dmin寮€澶寸殑瑙掕壊

璁块棶鏉冮檺


**瑙掕壊鏍¢獙锛?*

- `admin_*`
","operationId":"roleWildcardPrefix","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/demo/saTokenDoc/advanced/permWithOrRole":{"get":{"tags":["SaToken 鏉冮檺娴嬭瘯 鎺ュ彛鏂囨。杈撳嚭娴嬭瘯"],"summary":"鍦烘櫙13锛歰rRole鍙傛暟锛堟潈闄愭牎楠屽け璐ユ椂锛屽厹搴曡鑹叉牎楠岋級\n 鏍稿績閫昏緫锛氭棤system:user:export鏉冮檺鏃讹紝妫€鏌ユ槸鍚︽湁admin/operator瑙掕壊","description":"鍦烘櫙13锛歰rRole鍙傛暟锛堟潈闄愭牎楠屽け璐ユ椂锛屽厹搴曡鑹叉牎楠岋級\n 鏍稿績閫昏緫锛氭棤system:user:export鏉冮檺鏃讹紝妫€鏌ユ槸鍚︽湁admin/operator瑙掕壊

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:user:export`
- 鎴栬鑹诧細`admin` & `operator`

","operationId":"permWithOrRole","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/demo/saTokenDoc/advanced/permWildcardPrefix":{"get":{"tags":["SaToken 鏉冮檺娴嬭瘯 鎺ュ彛鏂囨。杈撳嚭娴嬭瘯"],"summary":"鍦烘櫙9锛氭潈闄愰€氶厤绗﹀尮閰嶏紙鍓嶇紑鍖归厤锛塡n 鎷ユ湁system:user:* 鍗冲彲鍖归厤鎵€鏈夌敤鎴锋ā鍧楁潈闄?,"description":"鍦烘櫙9锛氭潈闄愰€氶厤绗﹀尮閰嶏紙鍓嶇紑鍖归厤锛塡n 鎷ユ湁system:user:* 鍗冲彲鍖归厤鎵€鏈夌敤鎴锋ā鍧楁潈闄?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:user:*`

","operationId":"permWildcardPrefix","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/demo/saTokenDoc/advanced/mixRolePermOr":{"get":{"tags":["SaToken 鏉冮檺娴嬭瘯 鎺ュ彛鏂囨。杈撳嚭娴嬭瘯"],"summary":"鍦烘櫙12锛氭潈闄?瑙掕壊娣峰悎OR妯″紡锛堜换涓€鏉′欢婊¤冻鍗冲彲锛塡n 婊¤冻浠讳竴锛氭嫢鏈塻uper_admin瑙掕壊 | 鎷ユ湁system:manage鏉冮檺","description":"鍦烘櫙12锛氭潈闄?瑙掕壊娣峰悎OR妯″紡锛堜换涓€鏉′欢婊¤冻鍗冲彲锛塡n 婊¤冻浠讳竴锛氭嫢鏈塻uper_admin瑙掕壊 | 鎷ユ湁system:manage鏉冮檺

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:manage`

**瑙掕壊鏍¢獙锛?*

- `super_admin`
","operationId":"mixRolePermOr","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/demo/saTokenDoc/advanced/mixRolePermAnd":{"get":{"tags":["SaToken 鏉冮檺娴嬭瘯 鎺ュ彛鏂囨。杈撳嚭娴嬭瘯"],"summary":"鍦烘櫙11锛氭潈闄?瑙掕壊娣峰悎AND妯″紡锛堟墍鏈夋潯浠跺繀椤绘弧瓒筹級\n 闇€鍚屾椂婊¤冻锛氭嫢鏈塧dmin瑙掕壊 + 鎷ユ湁system:user:all鏉冮檺","description":"鍦烘櫙11锛氭潈闄?瑙掕壊娣峰悎AND妯″紡锛堟墍鏈夋潯浠跺繀椤绘弧瓒筹級\n 闇€鍚屾椂婊¤冻锛氭嫢鏈塧dmin瑙掕壊 + 鎷ユ湁system:user:all鏉冮檺

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:user:all`

**瑙掕壊鏍¢獙锛?*

- `admin`
","operationId":"mixRolePermAnd","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/demo/saTokenDoc/advance/multiRoleOr":{"get":{"tags":["SaToken 鏉冮檺娴嬭瘯 鎺ュ彛鏂囨。杈撳嚭娴嬭瘯"],"summary":"鍦烘櫙6锛氬瑙掕壊OR妯″紡锛堟嫢鏈変换涓€瑙掕壊鍗冲彲锛?,"description":"鍦烘櫙6锛氬瑙掕壊OR妯″紡锛堟嫢鏈変换涓€瑙掕壊鍗冲彲锛?br>

璁块棶鏉冮檺


**瑙掕壊鏍¢獙锛?*

- `admin` | `test`
","operationId":"multiRoleOr","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/demo/saTokenDoc/advance/multiRoleAnd":{"get":{"tags":["SaToken 鏉冮檺娴嬭瘯 鎺ュ彛鏂囨。杈撳嚭娴嬭瘯"],"summary":"鍦烘櫙5锛氬瑙掕壊AND妯″紡锛堝繀椤诲悓鏃舵嫢鏈夋墍鏈夎鑹诧級","description":"鍦烘櫙5锛氬瑙掕壊AND妯″紡锛堝繀椤诲悓鏃舵嫢鏈夋墍鏈夎鑹诧級

璁块棶鏉冮檺


**瑙掕壊鏍¢獙锛?*

- `admin` & `operator`
","operationId":"multiRoleAnd","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/demo/saTokenDoc/advance/multiPermOr":{"get":{"tags":["SaToken 鏉冮檺娴嬭瘯 鎺ュ彛鏂囨。杈撳嚭娴嬭瘯"],"summary":"鍦烘櫙8锛氬鏉冮檺OR妯″紡锛堟嫢鏈変换涓€鏉冮檺鍗冲彲锛?,"description":"鍦烘櫙8锛氬鏉冮檺OR妯″紡锛堟嫢鏈変换涓€鏉冮檺鍗冲彲锛?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:user:add` | `system:user:delete`

","operationId":"multiPermOr","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/demo/saTokenDoc/advance/multiPermAnd":{"get":{"tags":["SaToken 鏉冮檺娴嬭瘯 鎺ュ彛鏂囨。杈撳嚭娴嬭瘯"],"summary":"鍦烘櫙7锛氬鏉冮檺AND妯″紡锛堝繀椤诲悓鏃舵嫢鏈夋墍鏈夋潈闄愶級","description":"鍦烘櫙7锛氬鏉冮檺AND妯″紡锛堝繀椤诲悓鏃舵嫢鏈夋墍鏈夋潈闄愶級

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:user:edit` & `system:log:view`

","operationId":"multiPermAnd","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/demo/redisLock/testLock4j":{"get":{"tags":["娴嬭瘯鍒嗗竷寮忛攣鐨勬牱渚?],"summary":"娴嬭瘯lock4j 娉ㄨВ","description":"娴嬭瘯lock4j 娉ㄨВ","operationId":"testLock4j","parameters":[{"name":"key","in":"query","required":true,"schema":{"type":"string"}},{"name":"value","in":"query","required":true,"schema":{"type":"string"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RString"}}}}}}},"/demo/redisLock/testLock4jLockTemplate":{"get":{"tags":["娴嬭瘯鍒嗗竷寮忛攣鐨勬牱渚?],"summary":"娴嬭瘯lock4j 宸ュ叿","description":"娴嬭瘯lock4j 宸ュ叿","operationId":"testLock4jLockTemplate","parameters":[{"name":"key","in":"query","required":true,"schema":{"type":"string"}},{"name":"value","in":"query","required":true,"schema":{"type":"string"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RString"}}}}}}},"/demo/redis/pubsub/sub":{"get":{"tags":["Redis 鍙戝竷璁㈤槄 婕旂ず妗堜緥"],"summary":"璁㈤槄娑堟伅","description":"璁㈤槄娑堟伅","operationId":"sub","parameters":[{"name":"key","in":"query","description":"閫氶亾Key","required":true,"schema":{"type":"string"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/demo/redis/pubsub/pub":{"get":{"tags":["Redis 鍙戝竷璁㈤槄 婕旂ず妗堜緥"],"summary":"鍙戝竷娑堟伅","description":"鍙戝竷娑堟伅","operationId":"pub","parameters":[{"name":"key","in":"query","description":"閫氶亾Key","required":true,"schema":{"type":"string"}},{"name":"value","in":"query","description":"鍙戦€佸唴瀹?,"required":true,"schema":{"type":"string"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/demo/rateLimiter/testip":{"get":{"tags":["娴嬭瘯鍒嗗竷寮忛檺娴佹牱渚?],"summary":"娴嬭瘯璇锋眰IP闄愭祦\n 鍚屼竴IP璇锋眰鍙楀奖鍝?,"description":"娴嬭瘯璇锋眰IP闄愭祦\n 鍚屼竴IP璇锋眰鍙楀奖鍝?,"operationId":"testip","parameters":[{"name":"value","in":"query","required":true,"schema":{"type":"string"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RString"}}}}}}},"/demo/rateLimiter/testcluster":{"get":{"tags":["娴嬭瘯鍒嗗竷寮忛檺娴佹牱渚?],"summary":"娴嬭瘯闆嗙兢瀹炰緥闄愭祦\n 鍚姩涓や釜鍚庣鏈嶅姟浜掍笉褰卞搷","description":"娴嬭瘯闆嗙兢瀹炰緥闄愭祦\n 鍚姩涓や釜鍚庣鏈嶅姟浜掍笉褰卞搷","operationId":"testcluster","parameters":[{"name":"value","in":"query","required":true,"schema":{"type":"string"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RString"}}}}}}},"/demo/rateLimiter/test":{"get":{"tags":["娴嬭瘯鍒嗗竷寮忛檺娴佹牱渚?],"summary":"娴嬭瘯鍏ㄥ眬闄愭祦\n 鍏ㄥ眬褰卞搷","description":"娴嬭瘯鍏ㄥ眬闄愭祦\n 鍏ㄥ眬褰卞搷","operationId":"test_1","parameters":[{"name":"value","in":"query","required":true,"schema":{"type":"string"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RString"}}}}}}},"/demo/rateLimiter/testObj":{"get":{"tags":["娴嬭瘯鍒嗗竷寮忛檺娴佹牱渚?],"summary":"娴嬭瘯璇锋眰IP闄愭祦(key鍩轰簬鍙傛暟鑾峰彇)\n 鍚屼竴IP璇锋眰鍙楀奖鍝峔n ","description":"娴嬭瘯璇锋眰IP闄愭祦(key鍩轰簬鍙傛暟鑾峰彇)\n 鍚屼竴IP璇锋眰鍙楀奖鍝峔n

\n 绠€鍗曞彉閲忚幏鍙?#鍙橀噺 澶嶆潅琛ㄨ揪寮?#{#鍙橀噺 != 1 ? 1 : 0}","operationId":"testObj","parameters":[{"name":"value","in":"query","required":true,"schema":{"type":"string"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RString"}}}}}}},"/demo/queue/priority/remove":{"get":{"tags":["浼樺厛闃熷垪 婕旂ず妗堜緥"],"summary":"鍒犻櫎闃熷垪鏁版嵁","description":"鍒犻櫎闃熷垪鏁版嵁","operationId":"remove_3","parameters":[{"name":"queueName","in":"query","description":"闃熷垪鍚?,"required":true,"schema":{"type":"string"}},{"name":"name","in":"query","description":"瀵硅薄鍚?,"required":true,"schema":{"type":"string"}},{"name":"orderNum","in":"query","description":"鎺掑簭鍙?,"required":true,"schema":{"type":"integer","format":"int32"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/demo/queue/priority/get":{"get":{"tags":["浼樺厛闃熷垪 婕旂ず妗堜緥"],"summary":"鑾峰彇闃熷垪鏁版嵁","description":"鑾峰彇闃熷垪鏁版嵁","operationId":"get","parameters":[{"name":"queueName","in":"query","description":"闃熷垪鍚?,"required":true,"schema":{"type":"string"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/demo/queue/priority/add":{"get":{"tags":["浼樺厛闃熷垪 婕旂ず妗堜緥"],"summary":"娣诲姞闃熷垪鏁版嵁","description":"娣诲姞闃熷垪鏁版嵁","operationId":"add_19","parameters":[{"name":"queueName","in":"query","description":"闃熷垪鍚?,"required":true,"schema":{"type":"string"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/demo/mqtt/send":{"get":{"tags":["mqtt 婕旂ず妗堜緥"],"summary":"鍙戝竷涓€鏉?MQTT 娴嬭瘯娑堟伅銆?,"description":"鍙戝竷涓€鏉?MQTT 娴嬭瘯娑堟伅銆?,"operationId":"send_1","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鏄惁鍙戦€佹垚鍔?,"content":{"*/*":{"schema":{"type":"boolean","description":"鏄惁鏇存柊宸插瓨鍦ㄦ暟鎹?}}}}}}},"/demo/mcp/tools":{"get":{"tags":["MCP Client 婕旂ず妗堜緥銆?],"summary":"鏌ヨ澶栭儴 MCP Server 宸ュ叿鍒楄〃銆?,"description":"鏌ヨ澶栭儴 MCP Server 宸ュ叿鍒楄〃銆?,"operationId":"tools","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RMapStringListString"}}}}}}},"/demo/mcp/resource":{"get":{"tags":["MCP Client 婕旂ず妗堜緥銆?],"summary":"璇诲彇澶栭儴 MCP 璧勬簮銆?,"description":"璇诲彇澶栭儴 MCP 璧勬簮銆?,"operationId":"resource","parameters":[{"name":"uri","in":"query","required":false,"schema":{"type":"string","default":"demo://summary"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RMapStringMcpResourceReadResult"}}}}}}},"/demo/mcp/receive":{"get":{"tags":["MCP Client 婕旂ず妗堜緥銆?],"summary":"璋冪敤澶栭儴 MCP 宸ュ叿骞舵ā鎷熶笟鍔″鐞嗐€?,"description":"璋冪敤澶栭儴 MCP 宸ュ叿骞舵ā鎷熶笟鍔″鐞嗐€?,"operationId":"receive","parameters":[{"name":"toolName","in":"query","required":false,"schema":{"type":"string","default":"demo_get_data"}},{"name":"id","in":"query","required":false,"schema":{"type":"string","default":"1"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RMcpDemoHandleResult"}}}}}}},"/demo/mail/sendSimpleMessage":{"get":{"tags":["閭欢鍙戦€佹渚?],"summary":"鍙戦€侀偖浠?,"description":"鍙戦€侀偖浠?,"operationId":"sendSimpleMessage","parameters":[{"name":"to","in":"query","description":"鎺ユ敹浜?,"required":true,"schema":{"type":"string"}},{"name":"subject","in":"query","description":"鏍囬","required":true,"schema":{"type":"string"}},{"name":"text","in":"query","description":"鍐呭","required":true,"schema":{"type":"string"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/demo/mail/sendMessageWithAttachments":{"get":{"tags":["閭欢鍙戦€佹渚?],"summary":"鍙戦€侀偖浠讹紙澶氶檮浠讹級","description":"鍙戦€侀偖浠讹紙澶氶檮浠讹級","operationId":"sendMessageWithAttachments","parameters":[{"name":"to","in":"query","description":"鎺ユ敹浜?,"required":true,"schema":{"type":"string"}},{"name":"subject","in":"query","description":"鏍囬","required":true,"schema":{"type":"string"}},{"name":"text","in":"query","description":"鍐呭","required":true,"schema":{"type":"string"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/demo/mail/sendMessageWithAttachment":{"get":{"tags":["閭欢鍙戦€佹渚?],"summary":"鍙戦€侀偖浠讹紙甯﹂檮浠讹級","description":"鍙戦€侀偖浠讹紙甯﹂檮浠讹級","operationId":"sendMessageWithAttachment","parameters":[{"name":"to","in":"query","description":"鎺ユ敹浜?,"required":true,"schema":{"type":"string"}},{"name":"subject","in":"query","description":"鏍囬","required":true,"schema":{"type":"string"}},{"name":"text","in":"query","description":"鍐呭","required":true,"schema":{"type":"string"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/demo/i18n":{"get":{"tags":["娴嬭瘯鍥介檯鍖?],"summary":"閫氳繃code鑾峰彇鍥介檯鍖栧唴瀹筡n code涓?messages","description":"閫氳繃code鑾峰彇鍥介檯鍖栧唴瀹筡n code涓?messages.properties 涓殑 key\n

\n 娴嬭瘯浣跨敤 user.register.success","operationId":"get_1","parameters":[{"name":"code","in":"query","description":"鍥介檯鍖朿ode","required":true,"schema":{"type":"string"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/demo/i18n/test2":{"get":{"tags":["娴嬭瘯鍥介檯鍖?],"summary":"Bean 鏍¢獙鍥介檯鍖朶n 涓嶄紶鍊?鍒嗗埆鏌ョ湅寮傚父杩斿洖\n ","description":"Bean 鏍¢獙鍥介檯鍖朶n 涓嶄紶鍊?鍒嗗埆鏌ョ湅寮傚父杩斿洖\n

\n 娴嬭瘯浣跨敤 not.null","operationId":"test2","parameters":[{"name":"bo","in":"query","required":true,"schema":{"$ref":"#/components/schemas/TestI18nBo"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RTestI18nBo"}}}}}}},"/demo/i18n/test1":{"get":{"tags":["娴嬭瘯鍥介檯鍖?],"summary":"Validator 鏍¢獙鍥介檯鍖朶n 涓嶄紶鍊?鍒嗗埆鏌ョ湅寮傚父杩斿洖\n ","description":"Validator 鏍¢獙鍥介檯鍖朶n 涓嶄紶鍊?鍒嗗埆鏌ョ湅寮傚父杩斿洖\n

\n 娴嬭瘯浣跨敤 not.null","operationId":"test1","parameters":[{"name":"str","in":"query","required":true,"schema":{"type":"string","minLength":1}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/demo/excel/exportWithOptions":{"get":{"tags":["娴嬭瘯Excel鍔熻兘"],"summary":"瀵煎嚭涓嬫媺妗?,"description":"瀵煎嚭涓嬫媺妗?,"operationId":"exportWithOptions","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK"}}}},"/demo/excel/exportTemplateOne":{"get":{"tags":["娴嬭瘯Excel鍔熻兘"],"summary":"鍗曞垪琛ㄥ鏁版嵁","description":"鍗曞垪琛ㄥ鏁版嵁","operationId":"exportTemplateOne","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK"}}}},"/demo/excel/exportTemplateMultiSheet":{"get":{"tags":["娴嬭瘯Excel鍔熻兘"],"summary":"澶氫釜sheet瀵煎嚭","description":"澶氫釜sheet瀵煎嚭","operationId":"exportTemplateMultiSheet","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK"}}}},"/demo/excel/exportTemplateMuliti":{"get":{"tags":["娴嬭瘯Excel鍔熻兘"],"summary":"澶氬垪琛ㄥ鏁版嵁","description":"澶氬垪琛ㄥ鏁版嵁","operationId":"exportTemplateMuliti","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK"}}}},"/demo/excel/customExport":{"get":{"tags":["娴嬭瘯Excel鍔熻兘"],"summary":"鑷畾涔夊鍑?,"description":"鑷畾涔夊鍑?,"operationId":"customExport","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK"}}}},"/demo/encrypt":{"get":{"tags":["娴嬭瘯鏁版嵁搴撳姞瑙e瘑鍔熻兘"],"summary":"娴嬭瘯鏁版嵁搴撳姞瑙e瘑","description":"娴嬭瘯鏁版嵁搴撳姞瑙e瘑","operationId":"test_2","parameters":[{"name":"key","in":"query","description":"娴嬭瘯key","required":true,"schema":{"type":"string"}},{"name":"value","in":"query","description":"娴嬭瘯value","required":true,"schema":{"type":"string"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RMapStringTestDemoEncrypt"}}}}}}},"/demo/demo/{id}":{"get":{"tags":["娴嬭瘯鍗曡〃Controller"],"summary":"鑾峰彇娴嬭瘯鍗曡〃璇︾粏淇℃伅","description":"鑾峰彇娴嬭瘯鍗曡〃璇︾粏淇℃伅

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `demo:demo:query`

","operationId":"getInfo_22","parameters":[{"name":"id","in":"path","description":"娴嬭瘯ID","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RTestDemoVo"}}}}}}},"/demo/demo/page":{"get":{"tags":["娴嬭瘯鍗曡〃Controller"],"summary":"鑷畾涔夊垎椤垫煡璇?,"description":"鑷畾涔夊垎椤垫煡璇?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `demo:demo:list`

","operationId":"page","parameters":[{"name":"bo","in":"query","required":true,"schema":{"$ref":"#/components/schemas/TestDemoBo"}},{"name":"pageQuery","in":"query","required":true,"schema":{"$ref":"#/components/schemas/PageQuery"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RPageResultTestDemoVo"}}}}}}},"/demo/demo/list":{"get":{"tags":["娴嬭瘯鍗曡〃Controller"],"summary":"鏌ヨ娴嬭瘯鍗曡〃鍒楄〃","description":"鏌ヨ娴嬭瘯鍗曡〃鍒楄〃

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `demo:demo:list`

","operationId":"list_22","parameters":[{"name":"bo","in":"query","required":true,"schema":{"$ref":"#/components/schemas/TestDemoBo"}},{"name":"pageQuery","in":"query","required":true,"schema":{"$ref":"#/components/schemas/PageQuery"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RPageResultTestDemoVo"}}}}}}},"/demo/cache/test6":{"get":{"tags":["spring-cache 婕旂ず妗堜緥"],"summary":"娴嬭瘯璁剧疆杩囨湡鏃堕棿\n 鎵嬪姩璁剧疆杩囨湡鏃堕棿10绉抃n 11绉掑悗鑾峰彇 鍒ゆ柇鏄惁鐩哥瓑","description":"娴嬭瘯璁剧疆杩囨湡鏃堕棿\n 鎵嬪姩璁剧疆杩囨湡鏃堕棿10绉抃n 11绉掑悗鑾峰彇 鍒ゆ柇鏄惁鐩哥瓑","operationId":"test6","parameters":[{"name":"key","in":"query","required":true,"schema":{"type":"string"}},{"name":"value","in":"query","required":true,"schema":{"type":"string"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RBoolean"}}}}}}},"/demo/cache/test3":{"get":{"tags":["spring-cache 婕旂ず妗堜緥"],"summary":"娴嬭瘯 @CacheEvict\n ","description":"娴嬭瘯 @CacheEvict\n

\n 浣跨敤浜咰acheEvict娉ㄨВ鐨勬柟娉?浼氭竻绌烘寚瀹氱紦瀛榎n 銆屼竴鑸敤鍦ㄥ垹闄ょ殑鏂规硶涓娿€峔n

\n cacheNames 鍛藉悕瑙勫垯 鏌ョ湅 {@link CacheNames CacheNames} 娉ㄩ噴 鏀寔澶氬弬鏁?,"operationId":"test3","parameters":[{"name":"key","in":"query","required":true,"schema":{"type":"string"}},{"name":"value","in":"query","required":true,"schema":{"type":"string"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RString"}}}}}}},"/demo/cache/test2":{"get":{"tags":["spring-cache 婕旂ず妗堜緥"],"summary":"娴嬭瘯 @CachePut\n ","description":"娴嬭瘯 @CachePut\n

\n 鍔犱簡@CachePut娉ㄨВ鐨勬柟娉?浼氭妸鏂规硶鐨勮繑鍥炲€紁ut鍒扮紦瀛橀噷闈㈢紦瀛樿捣鏉?渚涘叾瀹冨湴鏂逛娇鐢╘n 瀹冦€岄€氬父鐢ㄥ湪鏂板鎴栬€呭疄鏃舵洿鏂版柟娉曚笂銆峔n

\n cacheNames 鍛藉悕瑙勫垯 鏌ョ湅 {@link CacheNames CacheNames} 娉ㄩ噴 鏀寔澶氬弬鏁?,"operationId":"test2_1","parameters":[{"name":"key","in":"query","required":true,"schema":{"type":"string"}},{"name":"value","in":"query","required":true,"schema":{"type":"string"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RString"}}}}}}},"/demo/cache/test1":{"get":{"tags":["spring-cache 婕旂ず妗堜緥"],"summary":"娴嬭瘯 @Cacheable\n ","description":"娴嬭瘯 @Cacheable\n

\n 琛ㄧず杩欎釜鏂规硶鏈変簡缂撳瓨鐨勫姛鑳?鏂规硶鐨勮繑鍥炲€间細琚紦瀛樹笅鏉n 涓嬩竴娆¤皟鐢ㄨ鏂规硶鍓?浼氬幓妫€鏌ユ槸鍚︾紦瀛樹腑宸茬粡鏈夊€糪n 濡傛灉鏈夊氨鐩存帴杩斿洖,涓嶈皟鐢ㄦ柟娉昞n 濡傛灉娌℃湁,灏辫皟鐢ㄦ柟娉?鐒跺悗鎶婄粨鏋滅紦瀛樿捣鏉n 杩欎釜娉ㄨВ銆屼竴鑸敤鍦ㄦ煡璇㈡柟娉曚笂銆峔n

\n 閲嶇偣璇存槑: 缂撳瓨娉ㄨВ涓ヨ皑涓庡叾浠栫瓫閫夋暟鎹姛鑳戒竴璧蜂娇鐢╘n 渚嬪: 鏁版嵁鏉冮檺娉ㄨВ 浼氶€犳垚 缂撳瓨鍑荤┛ 涓?鏁版嵁涓嶄竴鑷撮棶棰榎n

\n cacheNames 鍛藉悕瑙勫垯 鏌ョ湅 {@link CacheNames CacheNames} 娉ㄩ噴 鏀寔澶氬弬鏁?,"operationId":"test1_1","parameters":[{"name":"key","in":"query","required":true,"schema":{"type":"string"}},{"name":"value","in":"query","required":true,"schema":{"type":"string"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RString"}}}}}}},"/auth/code":{"get":{"tags":["楠岃瘉鐮佹搷浣滃鐞?],"summary":"鑾峰彇鍥剧墖楠岃瘉鐮併€?,"description":"鑾峰彇鍥剧墖楠岃瘉鐮併€?br>

璁块棶鏉冮檺


> **鏉冮檺绛栫暐**锛氬拷鐣ユ潈闄愭鏌?br>","operationId":"getCode","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"楠岃瘉鐮佷俊鎭?,"content":{"*/*":{"schema":{"$ref":"#/components/schemas/RCaptchaVo"}}}}}}},"/auth/binding/{source}":{"get":{"tags":["璁よ瘉鎺у埗鍣紝鎻愪緵鐧诲綍銆佹敞鍐屻€佺ぞ浜ょ粦瀹氬拰閫€鍑鸿兘鍔涖€?],"summary":"鑾峰彇绗笁鏂圭粦瀹氳烦杞湴鍧€銆?,"description":"鑾峰彇绗笁鏂圭粦瀹氳烦杞湴鍧€銆?br>

璁块棶鏉冮檺


> **鏉冮檺绛栫暐**锛氬拷鐣ユ潈闄愭鏌?br>","operationId":"authBinding","parameters":[{"name":"source","in":"path","description":"鐧诲綍鏉ユ簮","required":true,"schema":{"type":"string"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"璺宠浆鍦板潃","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RString"}}}}}}},"/app/profile":{"get":{"tags":["App 鐢ㄦ埛璧勬枡鎺у埗鍣?],"summary":"鑾峰彇褰撳墠鐢ㄦ埛璧勬枡","description":"鑾峰彇褰撳墠鐢ㄦ埛璧勬枡","operationId":"getProfile","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RAppUserProfileVo"}}}}}}},"/app/location/list/{homeId}":{"get":{"tags":["App 鎴块棿浣嶇疆绠$悊鎺у埗鍣?],"summary":"鏌ヨ鎸囧畾瀹跺涵鐨勬墍鏈夋埧闂翠綅缃垪琛?,"description":"鏌ヨ鎸囧畾瀹跺涵鐨勬墍鏈夋埧闂翠綅缃垪琛?,"operationId":"listLocations","parameters":[{"name":"homeId","in":"path","description":"瀹跺涵ID","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"浣嶇疆鍒楄〃锛堟寜鎺掑簭鍊煎崌搴忋€佸垱寤烘椂闂村崌搴忔帓鍒楋級","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RListAppLocationVo"}}}}}}},"/app/home/list":{"get":{"tags":["App 瀹跺涵绠$悊鎺у埗鍣?],"summary":"鏌ヨ褰撳墠鐢ㄦ埛鐨勬墍鏈夊搴垪琛?,"description":"鏌ヨ褰撳墠鐢ㄦ埛鐨勬墍鏈夊搴垪琛?,"operationId":"listHomes","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"瀹跺涵鍒楄〃锛堟寜鏄惁榛樿闄嶅簭銆佸垱寤烘椂闂村崌搴忔帓鍒楋紝鍖呭惈浣嶇疆鏁伴噺缁熻锛?,"content":{"*/*":{"schema":{"$ref":"#/components/schemas/RListAppHomeVo"}}}}}}},"/api/snail/chat/my-agents":{"get":{"tags":["snail-ai-chat-gateway-controller"],"operationId":"myAgents","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResultListOpenApiAgentVO"}}}}}}},"/api/snail/chat/conversations/messages":{"get":{"tags":["snail-ai-chat-gateway-controller"],"operationId":"getMessages","parameters":[{"name":"agentId","in":"query","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"conversationId","in":"query","required":true,"schema":{"type":"string"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResultListOpenApiMessageVO"}}}}}}},"/api/snail/chat/messages":{"get":{"tags":["snail-ai-chat-gateway-controller"],"operationId":"getMessages_1","parameters":[{"name":"agentId","in":"query","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"conversationId","in":"query","required":true,"schema":{"type":"string"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResultListOpenApiMessageVO"}}}}}}},"/api/snail/chat/config":{"get":{"tags":["snail-ai-chat-gateway-controller"],"operationId":"config_1","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResultMapStringObject"}}}}}}},"/api/snail/chat/agents":{"get":{"tags":["snail-ai-chat-gateway-controller"],"operationId":"listAgents","parameters":[{"name":"arg0","in":"query","required":true,"schema":{"$ref":"#/components/schemas/OpenApiAgentQueryRequest"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/PageResultListOpenApiAgentVO"}}}}}}},"/api/snail/chat/agent":{"get":{"tags":["snail-ai-chat-gateway-controller"],"operationId":"getAgent","parameters":[{"name":"arg0","in":"query","required":true,"schema":{"$ref":"#/components/schemas/OpenApiAgentIdentityRequest"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResultOpenApiAgentVO"}}}}}}},"/":{"get":{"tags":["棣栭〉"],"summary":"璁块棶棣栭〉鏃惰繑鍥炲紩瀵兼彁绀恒€?,"description":"璁块棶棣栭〉鏃惰繑鍥炲紩瀵兼彁绀恒€?br>

璁块棶鏉冮檺


> **鏉冮檺绛栫暐**锛氬拷鐣ユ潈闄愭鏌?br>","operationId":"index","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"棣栭〉鎻愮ず璇?,"content":{"*/*":{"schema":{"type":"string"}}}}}}},"/workflow/spel/{ids}":{"delete":{"tags":["娴佺▼ SpEL 琛ㄨ揪寮忓畾涔夋帶鍒跺櫒锛岃礋璐h〃杈惧紡瑙勫垯鐨勫鍒犳敼鏌ャ€?],"summary":"鎵归噺鍒犻櫎娴佺▼ SpEL 琛ㄨ揪寮忓畾涔夈€?,"description":"鎵归噺鍒犻櫎娴佺▼ SpEL 琛ㄨ揪寮忓畾涔夈€?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `workflow:spel:remove`

","operationId":"remove_4","parameters":[{"name":"ids","in":"path","description":"涓婚敭涓?,"required":true,"schema":{"type":"array","items":{"type":"integer","format":"int64"}}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鎿嶄綔缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/workflow/leave/{ids}":{"delete":{"tags":["璇峰亣绀轰緥鎺у埗鍣紝婕旂ず涓氬姟鍗曟嵁涓庢祦绋嬪紩鎿庤仈鍔ㄧ殑鍏稿瀷鐢ㄦ硶銆?],"summary":"鎵归噺鍒犻櫎璇峰亣鍗曘€?,"description":"鎵归噺鍒犻櫎璇峰亣鍗曘€?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `workflow:leave:remove`

","operationId":"remove_5","parameters":[{"name":"ids","in":"path","description":"涓婚敭涓?,"required":true,"schema":{"type":"array","items":{"type":"integer","format":"int64"}}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鎿嶄綔缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/workflow/instance/deleteHisByInstanceIds/{instanceIds}":{"delete":{"tags":["娴佺▼瀹炰緥绠$悊 鎺у埗灞?],"summary":"鎸夊疄渚?id 鎵归噺鍒犻櫎宸插畬鎴愮殑娴佺▼瀹炰緥銆?,"description":"鎸夊疄渚?id 鎵归噺鍒犻櫎宸插畬鎴愮殑娴佺▼瀹炰緥銆?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `workflow:instance:remove`

","operationId":"deleteHisByInstanceIds","parameters":[{"name":"instanceIds","in":"path","description":"瀹炰緥id","required":true,"schema":{"type":"array","items":{"type":"integer","format":"int64"}}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鎿嶄綔缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/workflow/instance/deleteByInstanceIds/{instanceIds}":{"delete":{"tags":["娴佺▼瀹炰緥绠$悊 鎺у埗灞?],"summary":"鎸夊疄渚?id 鎵归噺鍒犻櫎娴佺▼瀹炰緥銆?,"description":"鎸夊疄渚?id 鎵归噺鍒犻櫎娴佺▼瀹炰緥銆?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `workflow:instance:remove`

","operationId":"deleteByInstanceIds","parameters":[{"name":"instanceIds","in":"path","description":"瀹炰緥id","required":true,"schema":{"type":"array","items":{"type":"integer","format":"int64"}}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鎿嶄綔缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/workflow/instance/deleteByBusinessIds/{businessIds}":{"delete":{"tags":["娴佺▼瀹炰緥绠$悊 鎺у埗灞?],"summary":"鎸変笟鍔?id 鎵归噺鍒犻櫎娴佺▼瀹炰緥銆?,"description":"鎸変笟鍔?id 鎵归噺鍒犻櫎娴佺▼瀹炰緥銆?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `workflow:instance:remove`

","operationId":"deleteByBusinessIds","parameters":[{"name":"businessIds","in":"path","description":"涓氬姟id","required":true,"schema":{"type":"array","items":{"type":"integer","format":"int64"}}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鎿嶄綔缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/workflow/definition/{ids}":{"delete":{"tags":["娴佺▼瀹氫箟绠$悊 鎺у埗灞?],"summary":"鎵归噺鍒犻櫎娴佺▼瀹氫箟銆?,"description":"鎵归噺鍒犻櫎娴佺▼瀹氫箟銆?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `workflow:definition:remove`

","operationId":"remove_6","parameters":[{"name":"ids","in":"path","description":"娴佺▼瀹氫箟ID闆嗗悎","required":true,"schema":{"type":"array","items":{"type":"integer","format":"int64"}}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鎿嶄綔缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/system/user/{userIds}":{"delete":{"tags":["鐢ㄦ埛淇℃伅"],"summary":"鍒犻櫎鐢ㄦ埛","description":"鍒犻櫎鐢ㄦ埛

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:user:remove`

","operationId":"remove_7","parameters":[{"name":"userIds","in":"path","description":"鐢ㄦ埛ID鏁扮粍","required":true,"schema":{"type":"array","items":{"type":"integer","format":"int64"}}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鎿嶄綔缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/system/role/{roleIds}":{"delete":{"tags":["瑙掕壊淇℃伅"],"summary":"鍒犻櫎瑙掕壊","description":"鍒犻櫎瑙掕壊

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:role:remove`

","operationId":"remove_8","parameters":[{"name":"roleIds","in":"path","description":"瑙掕壊ID涓?,"required":true,"schema":{"type":"array","items":{"type":"integer","format":"int64"}}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鎿嶄綔缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/system/post/{postIds}":{"delete":{"tags":["宀椾綅淇℃伅鎿嶄綔澶勭悊"],"summary":"鍒犻櫎宀椾綅","description":"鍒犻櫎宀椾綅

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:post:remove`

","operationId":"remove_9","parameters":[{"name":"postIds","in":"path","description":"宀椾綅ID涓?,"required":true,"schema":{"type":"array","items":{"type":"integer","format":"int64"}}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鎿嶄綔缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/system/notice/{noticeIds}":{"delete":{"tags":["鍏憡 淇℃伅鎿嶄綔澶勭悊"],"summary":"鍒犻櫎閫氱煡鍏憡","description":"鍒犻櫎閫氱煡鍏憡

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:notice:remove`

","operationId":"remove_10","parameters":[{"name":"noticeIds","in":"path","description":"鍏憡ID涓?,"required":true,"schema":{"type":"array","items":{"type":"integer","format":"int64"}}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鎿嶄綔缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/system/menu/cascade/{menuIds}":{"delete":{"tags":["鑿滃崟淇℃伅"],"summary":"鎵归噺绾ц仈鍒犻櫎鑿滃崟","description":"鎵归噺绾ц仈鍒犻櫎鑿滃崟

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:menu:remove`

**瑙掕壊鏍¢獙锛?*

- `superadmin`
","operationId":"remove_11","parameters":[{"name":"menuIds","in":"path","description":"鑿滃崟ID涓?,"required":true,"schema":{"type":"array","items":{"type":"integer","format":"int64"}}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鎿嶄綔缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/system/dict/type/{dictIds}":{"delete":{"tags":["鏁版嵁瀛楀吀淇℃伅"],"summary":"鍒犻櫎瀛楀吀绫诲瀷","description":"鍒犻櫎瀛楀吀绫诲瀷

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:dict:remove`

","operationId":"remove_12","parameters":[{"name":"dictIds","in":"path","description":"瀛楀吀ID涓?,"required":true,"schema":{"type":"array","items":{"type":"integer","format":"int64"}}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鎿嶄綔缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/system/dict/type/refreshCache":{"delete":{"tags":["鏁版嵁瀛楀吀淇℃伅"],"summary":"鍒锋柊瀛楀吀缂撳瓨銆?,"description":"鍒锋柊瀛楀吀缂撳瓨銆?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:dict:remove`

","operationId":"refreshCache","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鎿嶄綔缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/system/dict/data/{dictCodes}":{"delete":{"tags":["鏁版嵁瀛楀吀淇℃伅"],"summary":"鍒犻櫎瀛楀吀鏁版嵁","description":"鍒犻櫎瀛楀吀鏁版嵁

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:dict:remove`

","operationId":"remove_13","parameters":[{"name":"dictCodes","in":"path","description":"瀛楀吀code涓?,"required":true,"schema":{"type":"array","items":{"type":"integer","format":"int64"}}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鎿嶄綔缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/system/config/{configIds}":{"delete":{"tags":["鍙傛暟閰嶇疆 淇℃伅鎿嶄綔澶勭悊"],"summary":"鍒犻櫎鍙傛暟閰嶇疆","description":"鍒犻櫎鍙傛暟閰嶇疆

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:config:remove`

","operationId":"remove_14","parameters":[{"name":"configIds","in":"path","description":"鍙傛暟ID涓?,"required":true,"schema":{"type":"array","items":{"type":"integer","format":"int64"}}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鎿嶄綔缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/system/config/refreshCache":{"delete":{"tags":["鍙傛暟閰嶇疆 淇℃伅鎿嶄綔澶勭悊"],"summary":"鍒锋柊鍙傛暟缂撳瓨銆?,"description":"鍒锋柊鍙傛暟缂撳瓨銆?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:config:remove`

","operationId":"refreshCache_1","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鎿嶄綔缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/system/client/{ids}":{"delete":{"tags":["瀹㈡埛绔鐞?],"summary":"鎵归噺鍒犻櫎瀹㈡埛绔厤缃€?,"description":"鎵归噺鍒犻櫎瀹㈡埛绔厤缃€?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:client:remove`

","operationId":"remove_15","parameters":[{"name":"ids","in":"path","description":"涓婚敭涓?,"required":true,"schema":{"type":"array","items":{"type":"integer","format":"int64"}}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鎿嶄綔缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/resource/oss/{ossIds}":{"delete":{"tags":["鏂囦欢涓婁紶 鎺у埗灞?],"summary":"鍒犻櫎OSS瀵硅薄瀛樺偍","description":"鍒犻櫎OSS瀵硅薄瀛樺偍

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:oss:remove`

","operationId":"remove_16","parameters":[{"name":"ossIds","in":"path","description":"OSS瀵硅薄ID涓?,"required":true,"schema":{"type":"array","items":{"type":"integer","format":"int64"}}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鎿嶄綔缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/resource/oss/config/{ossConfigIds}":{"delete":{"tags":["瀵硅薄瀛樺偍閰嶇疆"],"summary":"鎵归噺鍒犻櫎瀵硅薄瀛樺偍閰嶇疆銆?,"description":"鎵归噺鍒犻櫎瀵硅薄瀛樺偍閰嶇疆銆?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `system:ossConfig:remove`

","operationId":"remove_17","parameters":[{"name":"ossConfigIds","in":"path","description":"OSS閰嶇疆ID涓?,"required":true,"schema":{"type":"array","items":{"type":"integer","format":"int64"}}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鎿嶄綔缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/monitor/operlog/{operIds}":{"delete":{"tags":["鎿嶄綔鏃ュ織璁板綍"],"summary":"鎵归噺鍒犻櫎鎿嶄綔鏃ュ織璁板綍","description":"鎵归噺鍒犻櫎鎿嶄綔鏃ュ織璁板綍

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `monitor:operlog:remove`

","operationId":"remove_18","parameters":[{"name":"operIds","in":"path","description":"鏃ュ織ids","required":true,"schema":{"type":"array","items":{"type":"integer","format":"int64"}}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鎿嶄綔缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/monitor/operlog/clean":{"delete":{"tags":["鎿嶄綔鏃ュ織璁板綍"],"summary":"娓呯┖鎿嶄綔鏃ュ織璁板綍銆?,"description":"娓呯┖鎿嶄綔鏃ュ織璁板綍銆?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `monitor:operlog:remove`

","operationId":"clean","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鎿嶄綔缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/monitor/online/{tokenId}":{"delete":{"tags":["鍦ㄧ嚎鐢ㄦ埛鐩戞帶"],"summary":"鎸?token 寮哄埗鐢ㄦ埛涓嬬嚎锛岄€傜敤浜庣鐞嗗憳韪㈤櫎寮傚父浼氳瘽銆?,"description":"鎸?token 寮哄埗鐢ㄦ埛涓嬬嚎锛岄€傜敤浜庣鐞嗗憳韪㈤櫎寮傚父浼氳瘽銆?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `monitor:online:forceLogout`

","operationId":"forceLogout","parameters":[{"name":"tokenId","in":"path","description":"token鍊?,"required":true,"schema":{"type":"string"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鎿嶄綔缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/monitor/online/myself/{tokenId}":{"delete":{"tags":["鍦ㄧ嚎鐢ㄦ埛鐩戞帶"],"summary":"寮洪€€褰撳墠璐﹀彿涓嬫寚瀹氬湪绾胯澶囷紝閬垮厤璇涪鍏朵粬璐﹀彿鐨勪細璇濄€?,"description":"寮洪€€褰撳墠璐﹀彿涓嬫寚瀹氬湪绾胯澶囷紝閬垮厤璇涪鍏朵粬璐﹀彿鐨勪細璇濄€?,"operationId":"remove_19","parameters":[{"name":"tokenId","in":"path","description":"token鍊?,"required":true,"schema":{"type":"string"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鎿嶄綔缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/monitor/loginInfo/{infoIds}":{"delete":{"tags":["绯荤粺璁块棶璁板綍"],"summary":"鎵归噺鍒犻櫎鐧诲綍鏃ュ織","description":"鎵归噺鍒犻櫎鐧诲綍鏃ュ織

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `monitor:logininfo:remove`

","operationId":"remove_20","parameters":[{"name":"infoIds","in":"path","description":"鏃ュ織ids","required":true,"schema":{"type":"array","items":{"type":"integer","format":"int64"}}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鎿嶄綔缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/monitor/loginInfo/clean":{"delete":{"tags":["绯荤粺璁块棶璁板綍"],"summary":"娓呯┖绯荤粺璁块棶璁板綍銆?,"description":"娓呯┖绯荤粺璁块棶璁板綍銆?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `monitor:logininfo:remove`

","operationId":"clean_1","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鎿嶄綔缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/device/device/{deviceIds}":{"delete":{"tags":["鍚庡彴璁惧绠$悊銆?],"summary":"鍒犻櫎璁惧銆?,"description":"鍒犻櫎璁惧銆?br>

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `device:device:remove`

","operationId":"remove_21","parameters":[{"name":"deviceIds","in":"path","description":"璁惧涓婚敭","required":true,"schema":{"type":"array","items":{"type":"integer","format":"int64"}}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鎿嶄綔缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/demo/tree/{ids}":{"delete":{"tags":["娴嬭瘯鏍戣〃Controller"],"summary":"鍒犻櫎娴嬭瘯鏍戣〃","description":"鍒犻櫎娴嬭瘯鏍戣〃

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `demo:tree:remove`

","operationId":"remove_22","parameters":[{"name":"ids","in":"path","description":"娴嬭瘯鏍慖D涓?,"required":true,"schema":{"type":"array","items":{"type":"integer","format":"int64"}}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/demo/demo/{ids}":{"delete":{"tags":["娴嬭瘯鍗曡〃Controller"],"summary":"鍒犻櫎娴嬭瘯鍗曡〃","description":"鍒犻櫎娴嬭瘯鍗曡〃

璁块棶鏉冮檺


**鏉冮檺鏍¢獙锛?*

- `demo:demo:remove`

","operationId":"remove_23","parameters":[{"name":"ids","in":"path","description":"娴嬭瘯ID涓?,"required":true,"schema":{"type":"array","items":{"type":"integer","format":"int64"}}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/demo/batch":{"delete":{"tags":["娴嬭瘯鎵归噺鏂规硶"],"summary":"鍒犻櫎鎵归噺鏂规硶","description":"鍒犻櫎鎵归噺鏂规硶","operationId":"remove_24","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/auth/unlock/{socialId}":{"delete":{"tags":["璁よ瘉鎺у埗鍣紝鎻愪緵鐧诲綍銆佹敞鍐屻€佺ぞ浜ょ粦瀹氬拰閫€鍑鸿兘鍔涖€?],"summary":"鍙栨秷褰撳墠鐢ㄦ埛鐨勭ぞ浜よ处鍙锋巿鏉冦€?,"description":"鍙栨秷褰撳墠鐢ㄦ埛鐨勭ぞ浜よ处鍙锋巿鏉冦€?br>

璁块棶鏉冮檺


> **鏉冮檺绛栫暐**锛氬拷鐣ユ潈闄愭鏌?br>","operationId":"unlockSocial","parameters":[{"name":"socialId","in":"path","description":"socialId","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鎿嶄綔缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/app/location/{locationId}":{"delete":{"tags":["App 鎴块棿浣嶇疆绠$悊鎺у埗鍣?],"summary":"鍒犻櫎鎴块棿浣嶇疆锛堣蒋鍒犻櫎锛?,"description":"鍒犻櫎鎴块棿浣嶇疆锛堣蒋鍒犻櫎锛?,"operationId":"deleteLocation","parameters":[{"name":"locationId","in":"path","description":"瑕佸垹闄ょ殑浣嶇疆ID","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鎿嶄綔缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/app/home/{homeId}":{"delete":{"tags":["App 瀹跺涵绠$悊鎺у埗鍣?],"summary":"鍒犻櫎瀹跺涵\n ","description":"鍒犻櫎瀹跺涵\n

\n 杞垹闄ゆ寚瀹氬搴強鍏朵笅鎵€鏈変綅缃紝榛樿瀹跺涵涓嶅厑璁稿垹闄ゃ€?,"operationId":"deleteHome","parameters":[{"name":"homeId","in":"path","description":"瑕佸垹闄ょ殑瀹跺涵ID","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"鎿嶄綔缁撴灉","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}}},"components":{"schemas":{"RVoid":{"type":"object","description":"鍝嶅簲淇℃伅涓讳綋","properties":{"code":{"type":"integer","format":"int32","description":"鍝嶅簲鐘舵€佺爜"},"msg":{"type":"string","description":"鍝嶅簲鎻愮ず淇℃伅"},"data":{"description":"鍝嶅簲涓氬姟鏁版嵁"}}},"FlowSpelBo":{"type":"object","description":"娴佺▼spel琛ㄨ揪寮忓畾涔変笟鍔″璞?flow_spel","properties":{"id":{"type":"integer","format":"int64","description":"涓婚敭id"},"componentName":{"type":"string","description":"缁勪欢鍚嶇О"},"methodName":{"type":"string","description":"鏂规硶鍚?},"methodParams":{"type":"string","description":"鍙傛暟"},"viewSpel":{"type":"string","description":"棰勮spel鍊?,"minLength":1},"status":{"type":"string","description":"鐘舵€侊紙0姝e父 1鍋滅敤锛?,"minLength":1},"remark":{"type":"string","description":"澶囨敞"},"params":{"type":"object","additionalProperties":{},"description":"璇锋眰鍙傛暟"}},"required":["status","viewSpel"]},"TestLeaveBo":{"type":"object","description":"璇峰亣涓氬姟瀵硅薄 test_leave","properties":{"id":{"type":"integer","format":"int64","description":"涓婚敭"},"flowCode":{"type":"string","description":"娴佺▼code"},"applyCode":{"type":"string","description":"鐢宠缂栧彿"},"leaveType":{"type":"string","description":"璇峰亣绫诲瀷","minLength":1},"startDate":{"type":"string","format":"date-time","description":"寮€濮嬫椂闂?},"endDate":{"type":"string","format":"date-time","description":"缁撴潫鏃堕棿"},"leaveDays":{"type":"integer","format":"int32","description":"璇峰亣澶╂暟"},"startLeaveDays":{"type":"integer","format":"int32","description":"寮€濮嬫椂闂?},"endLeaveDays":{"type":"integer","format":"int32","description":"缁撴潫鏃堕棿"},"remark":{"type":"string","description":"璇峰亣鍘熷洜"},"status":{"type":"string","description":"鐘舵€?},"params":{"type":"object","additionalProperties":{},"description":"璇锋眰鍙傛暟"}},"required":["endDate","id","leaveType","startDate"]},"RTestLeaveVo":{"type":"object","description":"鍝嶅簲淇℃伅涓讳綋","properties":{"code":{"type":"integer","format":"int32","description":"鍝嶅簲鐘舵€佺爜"},"msg":{"type":"string","description":"鍝嶅簲鎻愮ず淇℃伅"},"data":{"$ref":"#/components/schemas/TestLeaveVo","description":"鍝嶅簲涓氬姟鏁版嵁"}}},"TestLeaveVo":{"type":"object","description":"璇峰亣瑙嗗浘瀵硅薄 test_leave","properties":{"id":{"type":"integer","format":"int64","description":"涓婚敭"},"applyCode":{"type":"string","description":"鐢宠缂栧彿"},"leaveType":{"type":"string","description":"璇峰亣绫诲瀷"},"startDate":{"type":"string","format":"date-time","description":"寮€濮嬫椂闂?},"endDate":{"type":"string","format":"date-time","description":"缁撴潫鏃堕棿"},"leaveDays":{"type":"integer","format":"int32","description":"璇峰亣澶╂暟"},"remark":{"type":"string","description":"澶囨敞"},"status":{"type":"string","description":"鐘舵€?}}},"FlowVariableBo":{"type":"object","description":"娴佺▼鍙橀噺鍙傛暟","properties":{"instanceId":{"type":"integer","format":"int64","description":"娴佺▼瀹炰緥 ID"},"key":{"type":"string","description":"鍙橀噺閿?},"value":{"type":"string","description":"鍙橀噺鍊?}}},"FlowCancelBo":{"type":"object","description":"鎾ら攢娴佺▼璇锋眰瀵硅薄銆?,"properties":{"businessId":{"type":"string","description":"涓氬姟 ID"},"message":{"type":"string","description":"鎾ら攢璇存槑"}}},"RBoolean":{"type":"object","description":"鍝嶅簲淇℃伅涓讳綋","properties":{"code":{"type":"integer","format":"int32","description":"鍝嶅簲鐘舵€佺爜"},"msg":{"type":"string","description":"鍝嶅簲鎻愮ず淇℃伅"},"data":{"type":"boolean","description":"鍝嶅簲涓氬姟鏁版嵁"}}},"FlowDefinition":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"createTime":{"type":"string","format":"date-time"},"updateTime":{"type":"string","format":"date-time"},"createBy":{"type":"string"},"updateBy":{"type":"string"},"tenantId":{"type":"string"},"delFlag":{"type":"string"},"flowCode":{"type":"string"},"flowName":{"type":"string"},"modelValue":{"type":"string"},"category":{"type":"string"},"version":{"type":"string"},"isPublish":{"type":"integer","format":"int32"},"formCustom":{"type":"string"},"formPath":{"type":"string"},"activityStatus":{"type":"integer","format":"int32"},"listenerType":{"type":"string"},"listenerPath":{"type":"string"},"ext":{"type":"string"},"nodeList":{"type":"array","items":{"$ref":"#/components/schemas/Node"}},"userList":{"type":"array","items":{"$ref":"#/components/schemas/User"}}}},"Node":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"version":{"type":"string","deprecated":true},"tenantId":{"type":"string"},"listenerPath":{"type":"string"},"definitionId":{"type":"integer","format":"int64"},"anyNodeSkip":{"type":"string"},"coordinate":{"type":"string"},"skipList":{"type":"array","items":{"$ref":"#/components/schemas/Skip"}},"listenerType":{"type":"string"},"updateBy":{"type":"string"},"nodeType":{"type":"integer","format":"int32"},"ext":{"type":"string"},"delFlag":{"type":"string"},"createTime":{"type":"string","format":"date-time"},"createBy":{"type":"string"},"nodeName":{"type":"string"},"nodeCode":{"type":"string"},"nodeRatio":{"type":"string"},"updateTime":{"type":"string","format":"date-time"},"formCustom":{"type":"string"},"formPath":{"type":"string"},"permissionFlag":{"type":"string"}}},"Skip":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"nextNodeType":{"type":"integer","format":"int32"},"nowNodeType":{"type":"integer","format":"int32"},"tenantId":{"type":"string"},"definitionId":{"type":"integer","format":"int64"},"coordinate":{"type":"string"},"skipCondition":{"type":"string"},"nowNodeCode":{"type":"string"},"skipName":{"type":"string"},"nextNodeCode":{"type":"string"},"skipType":{"type":"string"},"nodeId":{"type":"integer","format":"int64"},"updateBy":{"type":"string"},"delFlag":{"type":"string"},"createTime":{"type":"string","format":"date-time"},"createBy":{"type":"string"},"updateTime":{"type":"string","format":"date-time"}}},"User":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"type":{"type":"string"},"tenantId":{"type":"string"},"updateBy":{"type":"string"},"delFlag":{"type":"string"},"createTime":{"type":"string","format":"date-time"},"createBy":{"type":"string"},"processedBy":{"type":"string"},"associated":{"type":"integer","format":"int64"},"updateTime":{"type":"string","format":"date-time"}}},"FlowCategoryBo":{"type":"object","description":"娴佺▼鍒嗙被涓氬姟瀵硅薄 wf_category","properties":{"categoryId":{"type":"integer","format":"int64","description":"娴佺▼鍒嗙被ID"},"parentId":{"type":"integer","format":"int64","description":"鐖舵祦绋嬪垎绫籭d"},"categoryName":{"type":"string","description":"娴佺▼鍒嗙被鍚嶇О","minLength":1},"orderNum":{"type":"integer","format":"int64","description":"鏄剧ず椤哄簭"}},"required":["categoryId","categoryName","parentId"]},"SysUserBo":{"type":"object","description":"鐢ㄦ埛淇℃伅涓氬姟瀵硅薄 sys_user","properties":{"userId":{"type":"integer","format":"int64","description":"鐢ㄦ埛ID"},"deptId":{"type":"integer","format":"int64","description":"閮ㄩ棬ID"},"userName":{"type":"string","description":"鐢ㄦ埛璐﹀彿","maxLength":30,"minLength":2},"nickName":{"type":"string","description":"鐢ㄦ埛鏄电О","maxLength":30,"minLength":0},"userType":{"type":"string","description":"鐢ㄦ埛绫诲瀷锛坰ys_user绯荤粺鐢ㄦ埛锛?},"email":{"type":"string","format":"email","description":"鐢ㄦ埛閭","maxLength":50,"minLength":0},"phoneNumber":{"type":"string","description":"鎵嬫満鍙风爜"},"gender":{"type":"string","description":"鐢ㄦ埛鎬у埆锛?鐢?1濂?2鏈煡锛?},"avatar":{"type":"integer","format":"int64","description":"澶村儚 OSS ID"},"password":{"type":"string","description":"瀵嗙爜"},"status":{"type":"string","description":"璐﹀彿鐘舵€侊紙0姝e父 1鍋滅敤锛?},"remark":{"type":"string","description":"澶囨敞"},"roleIds":{"type":"array","description":"瑙掕壊缁?,"items":{"type":"integer","format":"int64"},"maxItems":2147483647,"minItems":1},"postIds":{"type":"array","description":"宀椾綅缁?,"items":{"type":"integer","format":"int64"}},"roleId":{"type":"integer","format":"int64","description":"鏁版嵁鏉冮檺 褰撳墠瑙掕壊ID"},"userIds":{"type":"string","description":"鐢ㄦ埛ID"},"excludeUserIds":{"type":"string","description":"鎺掗櫎涓嶆煡璇㈢殑鐢ㄦ埛(宸ヤ綔娴佺敤)"},"createBy":{"type":"integer","format":"int64","description":"鍒涘缓鑰?},"updateBy":{"type":"integer","format":"int64","description":"鏇存柊鑰?},"params":{"type":"object","additionalProperties":{},"description":"璇锋眰鍙傛暟"},"superAdmin":{"type":"boolean","description":"鍒ゆ柇褰撳墠鐢ㄦ埛鏄惁涓鸿秴绾х鐞嗗憳銆?}},"required":["nickName","userName"]},"SysUserProfileBo":{"type":"object","description":"涓汉淇℃伅涓氬姟澶勭悊","properties":{"nickName":{"type":"string","description":"鐢ㄦ埛鏄电О","maxLength":30,"minLength":0},"email":{"type":"string","format":"email","description":"鐢ㄦ埛閭","maxLength":50,"minLength":0},"phoneNumber":{"type":"string","description":"鎵嬫満鍙风爜","pattern":"(?:0|86|\\+86)?1[3-9]\\d{9}"},"gender":{"type":"string","description":"鐢ㄦ埛鎬у埆锛?鐢?1濂?2鏈煡锛?},"avatar":{"type":"integer","format":"int64","description":"澶村儚 OSS ID"}}},"SysUserPasswordBo":{"type":"object","description":"鐢ㄦ埛瀵嗙爜淇敼","properties":{"oldPassword":{"type":"string","description":"鏃у瘑鐮?,"minLength":1},"newPassword":{"type":"string","description":"鏂板瘑鐮?,"minLength":1}},"required":["newPassword","oldPassword"]},"SysRoleBo":{"type":"object","description":"瑙掕壊淇℃伅涓氬姟瀵硅薄 sys_role","properties":{"roleId":{"type":"integer","format":"int64","description":"瑙掕壊ID"},"roleName":{"type":"string","description":"瑙掕壊鍚嶇О","maxLength":30,"minLength":0},"roleKey":{"type":"string","description":"瑙掕壊鏉冮檺瀛楃涓?,"maxLength":100,"minLength":0},"roleSort":{"type":"integer","format":"int32","description":"鏄剧ず椤哄簭"},"dataScope":{"type":"string","description":"鏁版嵁鑼冨洿锛?锛氬叏閮ㄦ暟鎹潈闄?2锛氳嚜瀹氭暟鎹潈闄?3锛氭湰閮ㄩ棬鏁版嵁鏉冮檺 4锛氭湰閮ㄩ棬鍙婁互涓嬫暟鎹潈闄?5锛氫粎鏈汉鏁版嵁鏉冮檺 6锛氶儴闂ㄥ強浠ヤ笅鎴栨湰浜烘暟鎹潈闄愶級"},"menuCheckStrictly":{"type":"boolean","description":"鑿滃崟鏍戦€夋嫨椤规槸鍚﹀叧鑱旀樉绀?},"deptCheckStrictly":{"type":"boolean","description":"閮ㄩ棬鏍戦€夋嫨椤规槸鍚﹀叧鑱旀樉绀?},"status":{"type":"string","description":"瑙掕壊鐘舵€侊紙0姝e父 1鍋滅敤锛?},"remark":{"type":"string","description":"澶囨敞"},"menuIds":{"type":"array","description":"鑿滃崟缁?,"items":{"type":"integer","format":"int64"}},"deptIds":{"type":"array","description":"閮ㄩ棬缁勶紙鏁版嵁鏉冮檺锛?,"items":{"type":"integer","format":"int64"}},"params":{"type":"object","additionalProperties":{},"description":"璇锋眰鍙傛暟"},"superAdmin":{"type":"boolean","description":"鍒ゆ柇褰撳墠瑙掕壊鏄惁涓鸿秴绾х鐞嗗憳瑙掕壊銆?}},"required":["roleKey","roleName","roleSort"]},"SysUserRole":{"type":"object","description":"鐢ㄦ埛鍜岃鑹插叧鑱?sys_user_role","properties":{"userId":{"type":"integer","format":"int64","description":"鐢ㄦ埛ID"},"roleId":{"type":"integer","format":"int64","description":"瑙掕壊ID"}}},"SysPostBo":{"type":"object","description":"宀椾綅淇℃伅涓氬姟瀵硅薄 sys_post","properties":{"postId":{"type":"integer","format":"int64","description":"宀椾綅ID"},"deptId":{"type":"integer","format":"int64","description":"閮ㄩ棬id锛堝崟閮ㄩ棬锛?},"belongDeptId":{"type":"integer","format":"int64","description":"褰掑睘閮ㄩ棬id锛堥儴闂ㄦ爲锛?},"postCode":{"type":"string","description":"宀椾綅缂栫爜","maxLength":64,"minLength":0},"postName":{"type":"string","description":"宀椾綅鍚嶇О","maxLength":50,"minLength":0},"postCategory":{"type":"string","description":"宀椾綅绫诲埆缂栫爜","maxLength":100,"minLength":0},"postSort":{"type":"integer","format":"int32","description":"鏄剧ず椤哄簭"},"status":{"type":"string","description":"鐘舵€侊紙0姝e父 1鍋滅敤锛?},"remark":{"type":"string","description":"澶囨敞"},"params":{"type":"object","additionalProperties":{},"description":"璇锋眰鍙傛暟"}},"required":["deptId","postCode","postName","postSort"]},"SysNoticeBo":{"type":"object","description":"閫氱煡鍏憡涓氬姟瀵硅薄 sys_notice","properties":{"noticeId":{"type":"integer","format":"int64","description":"鍏憡ID"},"noticeTitle":{"type":"string","description":"鍏憡鏍囬","maxLength":50,"minLength":0},"noticeType":{"type":"string","description":"鍏憡绫诲瀷锛?閫氱煡 2鍏憡锛?},"noticeContent":{"type":"string","description":"鍏憡鍐呭"},"status":{"type":"string","description":"鍏憡鐘舵€侊紙0姝e父 1鍏抽棴锛?},"remark":{"type":"string","description":"澶囨敞"},"createByName":{"type":"string","description":"鍒涘缓浜哄悕绉?}},"required":["noticeTitle"]},"SysMenuBo":{"type":"object","description":"鑿滃崟鏉冮檺涓氬姟瀵硅薄 sys_menu","properties":{"menuId":{"type":"integer","format":"int64","description":"鑿滃崟ID"},"parentId":{"type":"integer","format":"int64","description":"鐖惰彍鍗旾D"},"menuName":{"type":"string","description":"鑿滃崟鍚嶇О","maxLength":50,"minLength":0},"orderNum":{"type":"integer","format":"int32","description":"鏄剧ず椤哄簭"},"path":{"type":"string","description":"璺敱鍦板潃","maxLength":200,"minLength":0},"component":{"type":"string","description":"缁勪欢璺緞","maxLength":200,"minLength":0},"queryParam":{"type":"string","description":"璺敱鍙傛暟"},"isFrame":{"type":"string","description":"鏄惁涓哄閾撅紙Y鏄?N鍚︼級"},"isCache":{"type":"string","description":"鏄惁缂撳瓨锛圷缂撳瓨 N涓嶇紦瀛橈級"},"menuType":{"type":"string","description":"鑿滃崟绫诲瀷锛圡鐩綍 C鑿滃崟 F鎸夐挳锛?,"minLength":1},"visible":{"type":"string","description":"鏄剧ず鐘舵€侊紙0鏄剧ず 1闅愯棌锛?},"status":{"type":"string","description":"鑿滃崟鐘舵€侊紙0姝e父 1鍋滅敤锛?},"perms":{"type":"string","description":"鏉冮檺鏍囪瘑","maxLength":100,"minLength":0,"pattern":"^$|^[a-zA-Z0-9_]+:[a-zA-Z0-9_*]+:[a-zA-Z0-9_*]+$"},"icon":{"type":"string","description":"鑿滃崟鍥炬爣"},"activeMenu":{"type":"string","description":"婵€娲昏彍鍗曡矾寰?,"maxLength":255,"minLength":0},"ext":{"type":"string","description":"鎵╁睍瀛楁","maxLength":2000,"minLength":0},"remark":{"type":"string","description":"澶囨敞"}},"required":["menuName","menuType","orderNum"]},"SysDictTypeBo":{"type":"object","description":"瀛楀吀绫诲瀷涓氬姟瀵硅薄 sys_dict_type","properties":{"dictId":{"type":"integer","format":"int64","description":"瀛楀吀涓婚敭"},"dictName":{"type":"string","description":"瀛楀吀鍚嶇О","maxLength":100,"minLength":0},"dictType":{"type":"string","description":"瀛楀吀绫诲瀷","maxLength":100,"minLength":0,"pattern":"^[a-z][a-z0-9_]*$"},"remark":{"type":"string","description":"澶囨敞"}},"required":["dictName","dictType"]},"SysDictDataBo":{"type":"object","description":"瀛楀吀鏁版嵁涓氬姟瀵硅薄 sys_dict_data","properties":{"dictCode":{"type":"integer","format":"int64","description":"瀛楀吀缂栫爜"},"dictSort":{"type":"integer","format":"int32","description":"瀛楀吀鎺掑簭"},"dictLabel":{"type":"string","description":"瀛楀吀鏍囩","maxLength":100,"minLength":0},"dictValue":{"type":"string","description":"瀛楀吀閿€?,"maxLength":100,"minLength":0},"dictType":{"type":"string","description":"瀛楀吀绫诲瀷","maxLength":100,"minLength":0},"cssClass":{"type":"string","description":"鏍峰紡灞炴€э紙鍏朵粬鏍峰紡鎵╁睍锛?,"maxLength":100,"minLength":0},"listClass":{"type":"string","description":"琛ㄦ牸鍥炴樉鏍峰紡"},"isDefault":{"type":"string","description":"鏄惁榛樿锛圷鏄?N鍚︼級"},"createDept":{"type":"integer","format":"int64","description":"鍒涘缓閮ㄩ棬"},"remark":{"type":"string","description":"澶囨敞"}},"required":["dictLabel","dictType","dictValue"]},"SysDeptBo":{"type":"object","description":"閮ㄩ棬涓氬姟瀵硅薄 sys_dept","properties":{"deptId":{"type":"integer","format":"int64","description":"閮ㄩ棬id"},"parentId":{"type":"integer","format":"int64","description":"鐖堕儴闂↖D"},"deptName":{"type":"string","description":"閮ㄩ棬鍚嶇О","maxLength":30,"minLength":0},"deptCategory":{"type":"string","description":"閮ㄩ棬绫诲埆缂栫爜","maxLength":100,"minLength":0},"orderNum":{"type":"integer","format":"int32","description":"鏄剧ず椤哄簭"},"leader":{"type":"integer","format":"int64","description":"璐熻矗浜?},"phone":{"type":"string","description":"鑱旂郴鐢佃瘽","maxLength":11,"minLength":0},"email":{"type":"string","format":"email","description":"閭","maxLength":50,"minLength":0},"status":{"type":"string","description":"閮ㄩ棬鐘舵€侊紙0姝e父 1鍋滅敤锛?},"belongDeptId":{"type":"integer","format":"int64","description":"褰掑睘閮ㄩ棬id锛堥儴闂ㄦ爲锛?},"params":{"type":"object","additionalProperties":{},"description":"璇锋眰鍙傛暟"}},"required":["deptName","orderNum"]},"SysConfigBo":{"type":"object","description":"鍙傛暟閰嶇疆涓氬姟瀵硅薄 sys_config","properties":{"configId":{"type":"integer","format":"int64","description":"鍙傛暟涓婚敭"},"configName":{"type":"string","description":"鍙傛暟鍚嶇О","maxLength":100,"minLength":0},"configKey":{"type":"string","description":"鍙傛暟閿悕","maxLength":100,"minLength":0},"configValue":{"type":"string","description":"鍙傛暟閿€?,"maxLength":500,"minLength":0},"configType":{"type":"string","description":"绯荤粺鍐呯疆锛圷鏄?N鍚︼級"},"remark":{"type":"string","description":"澶囨敞"},"params":{"type":"object","additionalProperties":{},"description":"璇锋眰鍙傛暟"}},"required":["configKey","configName","configValue"]},"SysClientBo":{"type":"object","description":"鎺堟潈绠$悊涓氬姟瀵硅薄 sys_client","properties":{"id":{"type":"integer","format":"int64","description":"id"},"clientId":{"type":"string","description":"瀹㈡埛绔痠d"},"clientKey":{"type":"string","description":"瀹㈡埛绔痥ey","minLength":1},"clientSecret":{"type":"string","description":"瀹㈡埛绔閽?,"minLength":1},"grantTypeList":{"type":"array","description":"鎺堟潈绫诲瀷","items":{"type":"string"}},"grantType":{"type":"string","description":"鎺堟潈绫诲瀷"},"deviceType":{"type":"string","description":"璁惧绫诲瀷"},"accessPath":{"type":"string","description":"鍏佽璁块棶璺緞"},"accessPathList":{"type":"array","description":"鍏佽璁块棶璺緞鍒楄〃","items":{"type":"string"}},"ipWhitelist":{"type":"string","description":"IP鐧藉悕鍗?},"ipWhitelistList":{"type":"array","description":"IP鐧藉悕鍗曞垪琛?,"items":{"type":"string"}},"activeTimeout":{"type":"integer","format":"int64","description":"token娲昏穬瓒呮椂鏃堕棿"},"timeout":{"type":"integer","format":"int64","description":"token鍥哄畾瓒呮椂鏃堕棿"},"status":{"type":"string","description":"鐘舵€侊紙0姝e父 1鍋滅敤锛?}},"required":["clientKey","clientSecret","grantTypeList","id"]},"SysOssConfigBo":{"type":"object","description":"瀵硅薄瀛樺偍閰嶇疆涓氬姟瀵硅薄 sys_oss_config","properties":{"ossConfigId":{"type":"integer","format":"int64","description":"涓婚敭"},"configKey":{"type":"string","description":"閰嶇疆key","maxLength":100,"minLength":2},"accessKey":{"type":"string","description":"accessKey","maxLength":100,"minLength":2},"secretKey":{"type":"string","description":"绉橀挜","maxLength":100,"minLength":2},"bucketName":{"type":"string","description":"妗跺悕绉?,"maxLength":100,"minLength":2},"prefix":{"type":"string","description":"鍓嶇紑"},"endpoint":{"type":"string","description":"璁块棶绔欑偣","maxLength":100,"minLength":2},"domainUrl":{"type":"string","description":"鑷畾涔夊煙鍚?},"isHttps":{"type":"string","description":"鏄惁https锛圷=鏄?N=鍚︼級"},"status":{"type":"string","description":"鏄惁榛樿锛圷=鏄?N=鍚︼級"},"region":{"type":"string","description":"鍩?},"ext1":{"type":"string","description":"鎵╁睍瀛楁"},"remark":{"type":"string","description":"澶囨敞"},"accessPolicy":{"type":"string","description":"妗舵潈闄愮被鍨?0private 1public 2custom)","minLength":1}},"required":["accessKey","accessPolicy","bucketName","configKey","endpoint","ossConfigId","secretKey"]},"CzDeviceBo":{"type":"object","description":"鍚庡彴璁惧绠$悊涓氬姟瀵硅薄銆?,"properties":{"deviceId":{"type":"integer","format":"int64","description":"璁惧涓婚敭"},"name":{"type":"string","description":"璁惧鍚嶇О","maxLength":20,"minLength":0},"productId":{"type":"integer","format":"int64","description":"浜у搧妯℃澘"},"mac":{"type":"string","description":"MAC"},"locationId":{"type":"integer","format":"int64","description":"鎵€鍦ㄦ埧闂?},"filterTotalDays":{"type":"integer","format":"int32","description":"鍒濆婊よ姱鎬诲鍛藉ぉ鏁帮紝浠呮护鑺被浜у搧浣跨敤"},"remark":{"type":"string","description":"澶囨敞","maxLength":500,"minLength":0},"model":{"type":"string","description":"鍨嬪彿"},"sn":{"type":"string","description":"搴忓垪鍙?},"status":{"type":"string","description":"鐘舵€侊紙0鏈縺娲?1鍦ㄧ嚎 2绂荤嚎锛?},"homeId":{"type":"integer","format":"int64","description":"瀹跺涵"},"keyword":{"type":"string","description":"鍚嶇О銆佸瀷鍙枫€丮AC銆佸簭鍒楀彿鎴栬澶囩紪鍙?}},"required":["deviceId","locationId","name"]},"TestTreeBo":{"type":"object","description":"娴嬭瘯鏍戣〃涓氬姟瀵硅薄 test_tree","properties":{"id":{"type":"integer","format":"int64","description":"涓婚敭"},"parentId":{"type":"integer","format":"int64","description":"鐖禝D"},"deptId":{"type":"integer","format":"int64","description":"閮ㄩ棬id"},"userId":{"type":"integer","format":"int64","description":"鐢ㄦ埛id"},"treeName":{"type":"string","description":"鏍戣妭鐐瑰悕","minLength":1}},"required":["deptId","id","treeName","userId"]},"TestDemoBo":{"type":"object","description":"娴嬭瘯鍗曡〃涓氬姟瀵硅薄 test_demo","properties":{"id":{"type":"integer","format":"int64","description":"涓婚敭"},"deptId":{"type":"integer","format":"int64","description":"閮ㄩ棬id"},"userId":{"type":"integer","format":"int64","description":"鐢ㄦ埛id"},"orderNum":{"type":"integer","format":"int32","description":"鎺掑簭鍙?},"testKey":{"type":"string","description":"key閿?,"minLength":1},"value":{"type":"string","description":"鍊?,"minLength":1},"version":{"type":"integer","format":"int64","description":"鐗堟湰"}},"required":["deptId","id","orderNum","testKey","userId","value"]},"OpenApiConversationUpdateTitleRequest":{"type":"object","properties":{"agentId":{"type":"integer","format":"int64"},"conversationId":{"type":"string","minLength":1},"openId":{"type":"string","minLength":1},"title":{"type":"string","minLength":1}},"required":["agentId","conversationId","openId","title"]},"ResultVoid":{"type":"object","properties":{"status":{"type":"integer","format":"int32"},"message":{"type":"string"},"data":{}}},"FlowUrgeTaskBo":{"type":"object","description":"娴佺▼鍙橀噺鍙傛暟","properties":{"taskIdList":{"type":"array","description":"浠诲姟id","items":{"type":"integer","format":"int64"}},"messageType":{"type":"array","description":"娑堟伅绫诲瀷","items":{"type":"string"}},"message":{"type":"string","description":"鍌姙鍐呭"}}},"FlowTerminationBo":{"type":"object","description":"缁堟浠诲姟璇锋眰瀵硅薄","properties":{"taskId":{"type":"integer","format":"int64","description":"浠诲姟 ID"},"comment":{"type":"string","description":"缁堟鎰忚"}}},"TaskOperationBo":{"type":"object","description":"浠诲姟鎿嶄綔涓氬姟瀵硅薄锛岀敤浜庢弿杩颁换鍔″娲俱€佽浆鍔炪€佸姞绛剧瓑鎿嶄綔鐨勫繀瑕佸弬鏁癨n 鍖呭惈浜嗙敤鎴稩D銆佷换鍔D銆佷换鍔$浉鍏崇殑娑堟伅銆佷互鍙婂姞绛?鍑忕鐨勭敤鎴稩D","properties":{"userId":{"type":"string","description":"濮旀淳/杞姙浜虹殑鐢ㄦ埛ID锛堝繀濉紝鍑嗗濮旀淳/杞姙浜烘搷浣滐級"},"userIds":{"type":"array","description":"鍔犵/鍑忕浜虹殑鐢ㄦ埛ID鍒楄〃锛堝繀濉紝閽堝鍔犵/鍑忕鎿嶄綔锛?,"items":{"type":"string"}},"taskId":{"type":"integer","format":"int64","description":"浠诲姟ID锛堝繀濉級"},"messageType":{"type":"array","description":"娑堟伅绫诲瀷","items":{"type":"string"}},"message":{"type":"string","description":"鎰忚鎴栧娉ㄤ俊鎭紙鍙€夛級"}},"required":["taskId"]},"FlowInstanceBizExt":{"type":"object","description":"娴佺▼瀹炰緥涓氬姟鎵╁睍瀵硅薄 flow_instance_biz_ext","properties":{"createBy":{"type":"integer","format":"int64","description":"鍒涘缓鑰?},"createTime":{"type":"string","format":"date-time","description":"鍒涘缓鏃堕棿"},"updateBy":{"type":"integer","format":"int64","description":"鏇存柊鑰?},"updateTime":{"type":"string","format":"date-time","description":"鏇存柊鏃堕棿"},"id":{"type":"integer","format":"int64","description":"涓婚敭"},"instanceId":{"type":"integer","format":"int64","description":"娴佺▼瀹炰緥ID"},"businessId":{"type":"string","description":"涓氬姟ID"},"businessCode":{"type":"string","description":"涓氬姟缂栫爜"},"businessTitle":{"type":"string","description":"涓氬姟鏍囬"},"delFlag":{"type":"string","description":"鍒犻櫎鏍囧織锛?浠h〃瀛樺湪 1浠h〃鍒犻櫎锛?}}},"StartProcessBo":{"type":"object","description":"鍚姩娴佺▼瀵硅薄","properties":{"businessId":{"type":"string","description":"涓氬姟鍞竴鍊糹d","minLength":1},"flowCode":{"type":"string","description":"娴佺▼瀹氫箟缂栫爜","minLength":1},"handler":{"type":"string","description":"鍔炵悊浜?鍙笉濉?鐢ㄤ簬瑕嗙洊褰撳墠鑺傜偣鍔炵悊浜?"},"variables":{"type":"object","additionalProperties":{},"description":"娴佺▼鍙橀噺锛屽墠绔細鎻愪氦涓€涓厓绱爗'entity': {涓氬姟璇︽儏鏁版嵁瀵硅薄}}"},"bizExt":{"$ref":"#/components/schemas/FlowInstanceBizExt","description":"娴佺▼涓氬姟鎵╁睍淇℃伅"}},"required":["businessId","flowCode"]},"RStartProcessReturnDTO":{"type":"object","description":"鍝嶅簲淇℃伅涓讳綋","properties":{"code":{"type":"integer","format":"int32","description":"鍝嶅簲鐘舵€佺爜"},"msg":{"type":"string","description":"鍝嶅簲鎻愮ず淇℃伅"},"data":{"$ref":"#/components/schemas/StartProcessReturnDTO","description":"鍝嶅簲涓氬姟鏁版嵁"}}},"StartProcessReturnDTO":{"type":"object","description":"鍚姩娴佺▼鍚庣殑杩斿洖缁撴灉瀵硅薄銆?,"properties":{"processInstanceId":{"type":"integer","format":"int64","description":"娴佺▼瀹炰緥 ID"},"taskId":{"type":"integer","format":"int64","description":"棣栦釜浠诲姟 ID"}}},"FlowNextNodeBo":{"type":"object","description":"鏌ヨ涓嬩竴鑺傜偣淇℃伅鐨勮姹傚璞°€?,"properties":{"taskId":{"type":"integer","format":"int64","description":"浠诲姟id"},"variables":{"type":"object","additionalProperties":{},"description":"娴佺▼鍙橀噺"}}},"FlowNode":{"type":"object","properties":{"skipList":{"type":"array","items":{"$ref":"#/components/schemas/Skip"}},"id":{"type":"integer","format":"int64"},"createTime":{"type":"string","format":"date-time"},"updateTime":{"type":"string","format":"date-time"},"createBy":{"type":"string"},"updateBy":{"type":"string"},"tenantId":{"type":"string"},"delFlag":{"type":"string"},"nodeType":{"type":"integer","format":"int32"},"definitionId":{"type":"integer","format":"int64"},"nodeCode":{"type":"string"},"nodeName":{"type":"string"},"permissionFlag":{"type":"string"},"nodeRatio":{"type":"string"},"coordinate":{"type":"string"},"version":{"type":"string","deprecated":true},"anyNodeSkip":{"type":"string"},"listenerType":{"type":"string"},"listenerPath":{"type":"string"},"formCustom":{"type":"string"},"formPath":{"type":"string"},"ext":{"type":"string"}}},"RListFlowNode":{"type":"object","description":"鍝嶅簲淇℃伅涓讳綋","properties":{"code":{"type":"integer","format":"int32","description":"鍝嶅簲鐘舵€佺爜"},"msg":{"type":"string","description":"鍝嶅簲鎻愮ず淇℃伅"},"data":{"type":"array","description":"鍝嶅簲涓氬姟鏁版嵁","items":{"$ref":"#/components/schemas/FlowNode"}}}},"CompleteTaskBo":{"type":"object","description":"鍔炵悊浠诲姟璇锋眰瀵硅薄","properties":{"taskId":{"type":"integer","format":"int64","description":"浠诲姟id"},"fileId":{"type":"string","description":"闄勪欢id"},"flowCopyList":{"type":"array","description":"鎶勯€佷汉鍛?,"items":{"$ref":"#/components/schemas/FlowCopyBo"}},"messageType":{"type":"array","description":"娑堟伅绫诲瀷","items":{"type":"string"}},"message":{"type":"string","description":"鍔炵悊鎰忚"},"notice":{"type":"string","description":"娑堟伅閫氱煡"},"handler":{"type":"string","description":"鍔炵悊浜?鍙笉濉?鐢ㄤ簬瑕嗙洊褰撳墠鑺傜偣鍔炵悊浜?"},"variables":{"type":"object","additionalProperties":{},"description":"娴佺▼鍙橀噺"},"assigneeMap":{"type":"object","additionalProperties":{},"description":"寮圭獥閫夋嫨鐨勫姙鐞嗕汉"},"ext":{"type":"string","description":"鎵╁睍鍙橀噺(姝ゅ涓洪€楀彿鍒嗛殧鐨刼ssId)"}},"required":["taskId"]},"FlowCopyBo":{"type":"object","description":"娴佺▼鎶勯€佽姹傚璞°€?,"properties":{"userId":{"type":"integer","format":"int64","description":"鐢ㄦ埛id"},"nickName":{"type":"string","description":"鐢ㄦ埛鏄电О"}}},"BackProcessBo":{"type":"object","description":"椹冲洖鍙傛暟璇锋眰","properties":{"taskId":{"type":"integer","format":"int64","description":"浠诲姟ID"},"fileId":{"type":"string","description":"闄勪欢id"},"messageType":{"type":"array","description":"娑堟伅绫诲瀷","items":{"type":"string"}},"nodeCode":{"type":"string","description":"椹冲洖鐨勮妭鐐筰d(鐩墠鏈娇鐢紝鐩存帴椹冲洖鍒扮敵璇蜂汉)"},"message":{"type":"string","description":"鍔炵悊鎰忚"},"notice":{"type":"string","description":"閫氱煡"},"variables":{"type":"object","additionalProperties":{},"description":"娴佺▼鍙橀噺"}},"required":["taskId"]},"FlowInvalidBo":{"type":"object","description":"浣滃簾娴佺▼璇锋眰瀵硅薄銆?,"properties":{"id":{"type":"integer","format":"int64","description":"娴佺▼瀹炰緥 ID"},"comment":{"type":"string","description":"浣滃簾鎰忚"}}},"DefJson":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"flowCode":{"type":"string"},"flowName":{"type":"string"},"modelValue":{"type":"string"},"category":{"type":"string"},"version":{"type":"string"},"isPublish":{"type":"integer","format":"int32"},"formCustom":{"type":"string"},"formPath":{"type":"string"},"listenerType":{"type":"string"},"listenerPath":{"type":"string"},"instance":{"$ref":"#/components/schemas/Instance"},"ext":{"type":"string"},"extMap":{"type":"object","additionalProperties":{}},"nodeList":{"type":"array","items":{"$ref":"#/components/schemas/NodeJson"}},"chartStatusColor":{"type":"array","items":{"type":"string"}},"topText":{"type":"string"},"topTextShow":{"type":"boolean"},"createBy":{"type":"string"},"updateBy":{"type":"string"},"categoryList":{"type":"array","items":{"$ref":"#/components/schemas/Tree"}},"formPathList":{"type":"array","items":{"$ref":"#/components/schemas/Tree"}}}},"InfoItem":{"type":"object","properties":{"prefix":{"type":"string"},"prefixStyle":{"type":"object","additionalProperties":{}},"content":{"type":"string"},"contentStyle":{"type":"object","additionalProperties":{}},"rowStyle":{"type":"object","additionalProperties":{}}}},"Instance":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"tenantId":{"type":"string"},"activityStatus":{"type":"integer","format":"int32"},"defJson":{"type":"string"},"definitionId":{"type":"integer","format":"int64"},"variable":{"type":"string"},"updateBy":{"type":"string"},"nodeType":{"type":"integer","format":"int32"},"ext":{"type":"string"},"delFlag":{"type":"string"},"createTime":{"type":"string","format":"date-time"},"createBy":{"type":"string"},"nodeName":{"type":"string"},"flowStatus":{"type":"string"},"businessId":{"type":"string"},"nodeCode":{"type":"string"},"flowName":{"type":"string"},"variableMap":{"type":"object","additionalProperties":{}},"updateTime":{"type":"string","format":"date-time"},"formCustom":{"type":"string"},"formPath":{"type":"string"}}},"NodeJson":{"type":"object","properties":{"nodeType":{"type":"integer","format":"int32"},"nodeCode":{"type":"string"},"nodeName":{"type":"string"},"version":{"type":"string"},"permissionFlag":{"type":"string"},"nodeRatio":{"type":"string"},"coordinate":{"type":"string"},"anyNodeSkip":{"type":"string"},"listenerType":{"type":"string"},"listenerPath":{"type":"string"},"formCustom":{"type":"string"},"formPath":{"type":"string"},"ext":{"type":"string"},"status":{"type":"integer","format":"int32"},"extMap":{"type":"object","additionalProperties":{}},"promptContent":{"$ref":"#/components/schemas/PromptContent"},"skipList":{"type":"array","items":{"$ref":"#/components/schemas/SkipJson"}},"createBy":{"type":"string"},"updateBy":{"type":"string"}}},"PromptContent":{"type":"object","properties":{"dialogStyle":{"type":"object","additionalProperties":{}},"info":{"type":"array","items":{"$ref":"#/components/schemas/InfoItem"}}}},"SkipJson":{"type":"object","properties":{"nowNodeCode":{"type":"string"},"nextNodeCode":{"type":"string"},"skipName":{"type":"string"},"skipType":{"type":"string"},"skipCondition":{"type":"string"},"coordinate":{"type":"string"},"status":{"type":"integer","format":"int32"},"extMap":{"type":"object","additionalProperties":{}},"promptContent":{"type":"array","items":{"type":"string"}},"createBy":{"type":"string"},"updateBy":{"type":"string"}}},"Tree":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"parentId":{"type":"string"},"children":{"type":"array","items":{"$ref":"#/components/schemas/Tree"}}}},"ApiResultVoid":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"msg":{"type":"string"},"data":{}}},"FlowDto":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"formContent":{"type":"string"},"form":{"$ref":"#/components/schemas/Form"},"data":{}}},"Form":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"version":{"type":"string"},"tenantId":{"type":"string"},"isPublish":{"type":"integer","format":"int32"},"formContent":{"type":"string"},"formCode":{"type":"string"},"formType":{"type":"integer","format":"int32"},"formName":{"type":"string"},"updateBy":{"type":"string"},"ext":{"type":"string"},"delFlag":{"type":"string"},"createTime":{"type":"string","format":"date-time"},"createBy":{"type":"string"},"updateTime":{"type":"string","format":"date-time"},"formPath":{"type":"string"}}},"ApiResultInstance":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"msg":{"type":"string"},"data":{"$ref":"#/components/schemas/Instance"}}},"RString":{"type":"object","description":"鍝嶅簲淇℃伅涓讳綋","properties":{"code":{"type":"integer","format":"int32","description":"鍝嶅簲鐘舵€佺爜"},"msg":{"type":"string","description":"鍝嶅簲鎻愮ず淇℃伅"},"data":{"type":"string","description":"鍝嶅簲涓氬姟鏁版嵁"}}},"OpenApiUserVO":{"type":"object","properties":{"openId":{"type":"string"},"externalId":{"type":"string"},"nickname":{"type":"string"},"avatarUrl":{"type":"string"},"created":{"type":"boolean"}}},"ROpenApiUserVO":{"type":"object","description":"鍝嶅簲淇℃伅涓讳綋","properties":{"code":{"type":"integer","format":"int32","description":"鍝嶅簲鐘舵€佺爜"},"msg":{"type":"string","description":"鍝嶅簲鎻愮ず淇℃伅"},"data":{"$ref":"#/components/schemas/OpenApiUserVO","description":"鍝嶅簲涓氬姟鏁版嵁"}}},"RSysOssUploadVo":{"type":"object","description":"鍝嶅簲淇℃伅涓讳綋","properties":{"code":{"type":"integer","format":"int32","description":"鍝嶅簲鐘舵€佺爜"},"msg":{"type":"string","description":"鍝嶅簲鎻愮ず淇℃伅"},"data":{"$ref":"#/components/schemas/SysOssUploadVo","description":"鍝嶅簲涓氬姟鏁版嵁"}}},"SysOssUploadVo":{"type":"object","description":"OSS 涓婁紶鍝嶅簲瀵硅薄銆?,"properties":{"url":{"type":"string","description":"鏂囦欢璁块棶鍦板潃"},"fileName":{"type":"string","description":"鍘熷鏂囦欢鍚?},"ossId":{"type":"string","description":"OSS 瀵硅薄 ID"}}},"SysOperLogBo":{"type":"object","description":"鎿嶄綔鏃ュ織璁板綍涓氬姟瀵硅薄 sys_oper_log","properties":{"operId":{"type":"integer","format":"int64","description":"鏃ュ織涓婚敭"},"title":{"type":"string","description":"妯″潡鏍囬"},"businessType":{"type":"integer","format":"int32","description":"涓氬姟绫诲瀷锛?鍏跺畠 1鏂板 2淇敼 3鍒犻櫎锛?},"businessTypes":{"type":"array","description":"涓氬姟绫诲瀷鏁扮粍","items":{"type":"integer","format":"int32"}},"method":{"type":"string","description":"鏂规硶鍚嶇О"},"requestMethod":{"type":"string","description":"璇锋眰鏂瑰紡"},"operatorType":{"type":"integer","format":"int32","description":"鎿嶄綔绫诲埆锛?鍏跺畠 1鍚庡彴鐢ㄦ埛 2鎵嬫満绔敤鎴凤級"},"operName":{"type":"string","description":"鎿嶄綔浜哄憳"},"userId":{"type":"integer","format":"int64","description":"鎿嶄綔鐢ㄦ埛ID"},"deptId":{"type":"integer","format":"int64","description":"鎿嶄綔閮ㄩ棬ID"},"deptName":{"type":"string","description":"閮ㄩ棬鍚嶇О"},"clientKey":{"type":"string","description":"瀹㈡埛绔?},"deviceType":{"type":"string","description":"璁惧绫诲瀷"},"browser":{"type":"string","description":"娴忚鍣ㄧ被鍨?},"os":{"type":"string","description":"鎿嶄綔绯荤粺"},"operUrl":{"type":"string","description":"璇锋眰URL"},"operIp":{"type":"string","description":"涓绘満鍦板潃"},"operLocation":{"type":"string","description":"鎿嶄綔鍦扮偣"},"operParam":{"type":"string","description":"璇锋眰鍙傛暟"},"jsonResult":{"type":"string","description":"杩斿洖鍙傛暟"},"status":{"type":"integer","format":"int32","description":"鎿嶄綔鐘舵€侊紙0姝e父 1寮傚父锛?},"errorMsg":{"type":"string","description":"閿欒娑堟伅"},"operTime":{"type":"string","format":"date-time","description":"鎿嶄綔鏃堕棿"},"costTime":{"type":"integer","format":"int64","description":"娑堣€楁椂闂?},"params":{"type":"object","additionalProperties":{},"description":"璇锋眰鍙傛暟"}}},"SysLoginInfoBo":{"type":"object","description":"绯荤粺璁块棶璁板綍涓氬姟瀵硅薄 sys_login_info","properties":{"infoId":{"type":"integer","format":"int64","description":"璁块棶ID"},"userName":{"type":"string","description":"鐢ㄦ埛璐﹀彿"},"clientKey":{"type":"string","description":"瀹㈡埛绔?},"deviceType":{"type":"string","description":"璁惧绫诲瀷"},"ipaddr":{"type":"string","description":"鐧诲綍IP鍦板潃"},"loginLocation":{"type":"string","description":"鐧诲綍鍦扮偣"},"browser":{"type":"string","description":"娴忚鍣ㄧ被鍨?},"os":{"type":"string","description":"鎿嶄綔绯荤粺"},"status":{"type":"string","description":"鐧诲綍鐘舵€侊紙0鎴愬姛 1澶辫触锛?},"msg":{"type":"string","description":"鎻愮ず娑堟伅"},"loginTime":{"type":"string","format":"date-time","description":"璁块棶鏃堕棿"},"params":{"type":"object","additionalProperties":{},"description":"璇锋眰鍙傛暟"}}},"ExportDemoVo":{"type":"object","description":"甯︽湁涓嬫媺閫夌殑Excel瀵煎嚭","properties":{"nickName":{"type":"string","description":"鐢ㄦ埛鏄电О"},"userStatus":{"type":"string","description":"鐢ㄦ埛绫诲瀷\n

\n 浣跨敤ExcelEnumFormat娉ㄨВ闇€瑕佽繘琛屼笅鎷夐€夌殑閮ㄥ垎"},"gender":{"type":"string","description":"鎬у埆\n

\n 浣跨敤ExcelDictFormat娉ㄨВ闇€瑕佽繘琛屼笅鎷夐€夌殑閮ㄥ垎"},"phoneNumber":{"type":"string","description":"鎵嬫満鍙?},"email":{"type":"string","description":"Email"},"province":{"type":"string","description":"鐪乗n

\n 绾ц仈涓嬫媺锛屼粎鍒ゆ柇鏄惁閫変簡"},"provinceId":{"type":"integer","format":"int32","description":"鏁版嵁搴撲腑鐨勭渷ID\n

\n 澶勭悊瀹屾瘯鍚庡啀鍒ゆ柇鏄惁甯傛纭殑鍊?},"city":{"type":"string","description":"甯俓n

\n 绾ц仈涓嬫媺"},"cityId":{"type":"integer","format":"int32","description":"鏁版嵁搴撲腑鐨勫競ID"},"area":{"type":"string","description":"鍘縗n

\n 绾ц仈涓嬫媺"},"areaId":{"type":"integer","format":"int32","description":"鏁版嵁搴撲腑鐨勫幙ID"}}},"SocialLoginBody":{"type":"object","description":"绗笁鏂瑰钩鍙扮櫥褰曠粦瀹氳姹傚璞°€?,"properties":{"clientId":{"type":"string","description":"瀹㈡埛绔痠d","minLength":1},"grantType":{"type":"string","description":"鎺堟潈绫诲瀷","minLength":1},"code":{"type":"string","description":"楠岃瘉鐮?},"uuid":{"type":"string","description":"楠岃瘉鐮佸敮涓€鏍囪瘑銆?},"source":{"type":"string","description":"绗笁鏂圭櫥褰曞钩鍙?,"minLength":1},"socialCode":{"type":"string","description":"绗笁鏂圭櫥褰昪ode","minLength":1},"socialState":{"type":"string","description":"绗笁鏂圭櫥褰晄ocialState","minLength":1}},"required":["clientId","grantType","socialCode","socialState","source"]},"RegisterBody":{"type":"object","description":"鐢ㄦ埛娉ㄥ唽瀵硅薄","properties":{"clientId":{"type":"string","description":"瀹㈡埛绔痠d","minLength":1},"grantType":{"type":"string","description":"鎺堟潈绫诲瀷","minLength":1},"code":{"type":"string","description":"楠岃瘉鐮?},"uuid":{"type":"string","description":"楠岃瘉鐮佸敮涓€鏍囪瘑銆?},"username":{"type":"string","description":"鐢ㄦ埛鍚?,"minLength":1},"password":{"type":"string","description":"鐢ㄦ埛瀵嗙爜","minLength":1},"userType":{"type":"string","description":"鐢ㄦ埛绫诲瀷"}},"required":["clientId","grantType","password","username"]},"LoginVo":{"type":"object","description":"鐧诲綍鎴愬姛鍚庣殑浠ょ墝淇℃伅杩斿洖瀵硅薄銆?,"properties":{"scope":{"type":"string","description":"浠ょ墝鏉冮檺"},"openid":{"type":"string","description":"鐢ㄦ埛 openid"},"access_token":{"type":"string","description":"鎺堟潈浠ょ墝"},"refresh_token":{"type":"string","description":"鍒锋柊浠ょ墝"},"expire_in":{"type":"integer","format":"int64","description":"鎺堟潈浠ょ墝 access_token 鐨勬湁鏁堟湡"},"refresh_expire_in":{"type":"integer","format":"int64","description":"鍒锋柊浠ょ墝 refresh_token 鐨勬湁鏁堟湡"},"client_id":{"type":"string","description":"搴旂敤id"}}},"RLoginVo":{"type":"object","description":"鍝嶅簲淇℃伅涓讳綋","properties":{"code":{"type":"integer","format":"int32","description":"鍝嶅簲鐘舵€佺爜"},"msg":{"type":"string","description":"鍝嶅簲鎻愮ず淇℃伅"},"data":{"$ref":"#/components/schemas/LoginVo","description":"鍝嶅簲涓氬姟鏁版嵁"}}},"UpdateProfileBo":{"type":"object","description":"淇敼鐢ㄦ埛璧勬枡璇锋眰浣?,"properties":{"nickName":{"type":"string","description":"鐢ㄦ埛鏄电О","maxLength":10,"minLength":1},"avatarOssId":{"type":"integer","format":"int64","description":"澶村儚 OSS ID"},"avatarUrl":{"type":"string","description":"澶村儚 URL"},"gender":{"type":"string","description":"鎬у埆锛?鏈煡 1鐢?2濂筹級"},"birthday":{"type":"string","description":"鐢熸棩"},"province":{"type":"string","description":"鐪佷唤","maxLength":10,"minLength":0},"city":{"type":"string","description":"鍩庡競","maxLength":10,"minLength":0},"district":{"type":"string","description":"鍖哄幙","maxLength":10,"minLength":0}}},"AvatarUploadVo":{"type":"object","description":"澶村儚涓婁紶鍝嶅簲瀵硅薄","properties":{"url":{"type":"string"},"fileName":{"type":"string"},"ossId":{"type":"string"}}},"RAvatarUploadVo":{"type":"object","description":"鍝嶅簲淇℃伅涓讳綋","properties":{"code":{"type":"integer","format":"int32","description":"鍝嶅簲鐘舵€佺爜"},"msg":{"type":"string","description":"鍝嶅簲鎻愮ず淇℃伅"},"data":{"$ref":"#/components/schemas/AvatarUploadVo","description":"鍝嶅簲涓氬姟鏁版嵁"}}},"UpdateLocationBo":{"type":"object","properties":{"locationId":{"type":"integer","format":"int64"},"locationName":{"type":"string","maxLength":10,"minLength":1},"icon":{"type":"string"},"sortOrder":{"type":"integer","format":"int32"}},"required":["locationId","locationName"]},"CreateLocationBo":{"type":"object","properties":{"homeId":{"type":"integer","format":"int64"},"locationName":{"type":"string","maxLength":10,"minLength":1},"icon":{"type":"string"},"sortOrder":{"type":"integer","format":"int32"}},"required":["homeId","locationName"]},"CreateHomeBo":{"type":"object","properties":{"homeName":{"type":"string","maxLength":10,"minLength":2}},"required":["homeName"]},"UpdateDeviceRuntimeBo":{"type":"object","description":"璁惧杩愯鏁版嵁鏇存柊鍙傛暟\n

\n 鍓嶇閫氳繃钃濈墮鍚屾璁惧杩愯鐘舵€佹椂鎻愪氦銆?,"properties":{"deviceId":{"type":"integer","format":"int64","description":"璁惧ID"},"status":{"type":"string","description":"鐘舵€侊紙0鏈縺娲?1鍦ㄧ嚎 2绂荤嚎锛?},"bluetoothConnected":{"type":"string","description":"钃濈墮杩炴帴鐘舵€侊紙0鏈繛鎺?1宸茶繛鎺ワ級"},"signalLevel":{"type":"string","description":"淇″彿寮哄害锛?绂荤嚎 1寮?2涓€鑸?3寮猴級"},"charging":{"type":"string","description":"鍏呯數鐘舵€侊紙0鏈厖鐢?1鍏呯數涓級"},"runMode":{"type":"string","description":"杩愯妯″紡锛?鑷姩 1杞﹁浇 2妗岄潰锛?},"fanLevel":{"type":"string","description":"椋庨€熸尅浣嶏紙0鏍囧噯 1寮哄姏 2浣庢。锛?},"tvoc":{"type":"number","description":"TVOC 鍘熷鍊?},"powerMode":{"type":"string","description":"渚涚數妯″紡锛?USB 1鐢垫睜锛?},"filterTotalDays":{"type":"string","description":"婊よ姱鎬诲鍛藉ぉ鏁?},"filterRemainDays":{"type":"string","description":"婊よ姱鍓╀綑澶╂暟"},"parkingShutdown":{"type":"string","description":"鍋滄満妯″紡锛?鍏虫満 1寮€鏈猴級"}},"required":["deviceId"]},"DeviceRuntimeQueryBo":{"type":"object","description":"璁惧杩愯鏁版嵁鏌ヨ鍙傛暟","properties":{"deviceId":{"type":"integer","format":"int64","description":"璁惧ID"}},"required":["deviceId"]},"AppDeviceRuntimeVo":{"type":"object","description":"璁惧杩愯鏁版嵁瑙嗗浘瀵硅薄\n

\n 鍖呭惈鍑€鍖栧櫒杩愯鐘舵€佷俊鎭€?,"properties":{"deviceId":{"type":"integer","format":"int64","description":"璁惧ID"},"deviceNo":{"type":"string","description":"璁惧缂栧彿"},"name":{"type":"string","description":"璁惧鍚嶇О"},"status":{"type":"string","description":"鐘舵€侊紙0鏈縺娲?1鍦ㄧ嚎 2绂荤嚎锛?},"runMode":{"type":"string","description":"杩愯妯″紡锛?鑷姩 1杞﹁浇 2妗岄潰锛?},"fanLevel":{"type":"string","description":"椋庨€熸尅浣嶏紙0鏍囧噯 1寮哄姏 2浣庢。锛?},"tvoc":{"type":"number","description":"TVOC 鍘熷鍊?},"powerMode":{"type":"string","description":"渚涚數妯″紡锛?USB 1鐢垫睜锛?},"filterTotalDays":{"type":"string","description":"婊よ姱鎬诲鍛藉ぉ鏁?},"filterRemainDays":{"type":"string","description":"婊よ姱鍓╀綑澶╂暟"},"filterLife":{"type":"integer","format":"int32","description":"婊よ姱瀵垮懡锛?-100锛?},"filterReplaceTime":{"type":"string","format":"date-time","description":"鏈€杩戜竴娆$‘璁ゆ洿鎹㈡护鑺椂闂?},"parkingShutdown":{"type":"string","description":"鍋滄満妯″紡锛?鍏虫満 1寮€鏈猴級"}}},"RAppDeviceRuntimeVo":{"type":"object","description":"鍝嶅簲淇℃伅涓讳綋","properties":{"code":{"type":"integer","format":"int32","description":"鍝嶅簲鐘舵€佺爜"},"msg":{"type":"string","description":"鍝嶅簲鎻愮ず淇℃伅"},"data":{"$ref":"#/components/schemas/AppDeviceRuntimeVo","description":"鍝嶅簲涓氬姟鏁版嵁"}}},"DeviceQueryBo":{"type":"object","description":"璁惧鍒楄〃鏌ヨ鍙傛暟","properties":{"homeId":{"type":"integer","format":"int64","description":"瀹跺涵ID"},"locationId":{"type":"integer","format":"int64","description":"浣嶇疆ID"}}},"AppDeviceVo":{"type":"object","description":"璁惧瑙嗗浘瀵硅薄","properties":{"deviceId":{"type":"integer","format":"int64","description":"璁惧ID"},"deviceNo":{"type":"string","description":"璁惧缂栧彿"},"name":{"type":"string","description":"璁惧鍚嶇О"},"imei":{"type":"string","description":"璁惧IMEI"},"mac":{"type":"string","description":"璁惧MAC"},"homeId":{"type":"integer","format":"int64","description":"瀹跺涵ID"},"locationId":{"type":"integer","format":"int64","description":"浣嶇疆ID"},"status":{"type":"string","description":"鐘舵€侊紙0鏈縺娲?1鍦ㄧ嚎 2绂荤嚎锛?},"bluetoothConnected":{"type":"string","description":"钃濈墮杩炴帴鐘舵€侊紙0鏈繛鎺?1宸茶繛鎺ワ級"},"signalLevel":{"type":"string","description":"淇″彿寮哄害锛?绂荤嚎 1寮?2涓€鑸?3寮猴級"},"charging":{"type":"string","description":"鍏呯數鐘舵€侊紙0鏈厖鐢?1鍏呯數涓級"},"bindTime":{"type":"string","format":"date-time","description":"缁戝畾鏃堕棿"}}},"RListAppDeviceVo":{"type":"object","description":"鍝嶅簲淇℃伅涓讳綋","properties":{"code":{"type":"integer","format":"int32","description":"鍝嶅簲鐘舵€佺爜"},"msg":{"type":"string","description":"鍝嶅簲鎻愮ず淇℃伅"},"data":{"type":"array","description":"鍝嶅簲涓氬姟鏁版嵁","items":{"$ref":"#/components/schemas/AppDeviceVo"}}}},"DeviceBindBo":{"type":"object","description":"璁惧缁戝畾璇锋眰鍙傛暟\n

\n 鍓嶇閫氳繃钃濈墮閰嶅璁惧鍚庯紝灏嗛厤瀵硅幏鍙栧埌鐨勮澶囦俊鎭彁浜ょ粦瀹氥€?,"properties":{"deviceNo":{"type":"string","description":"璁惧缂栧彿","minLength":1},"imei":{"type":"string","description":"璁惧IMEI"},"mac":{"type":"string","description":"璁惧MAC"},"name":{"type":"string","description":"璁惧鍚嶇О"},"homeId":{"type":"integer","format":"int64","description":"瀹跺涵ID"},"locationId":{"type":"integer","format":"int64","description":"浣嶇疆ID"}},"required":["deviceNo"]},"SendSmsCodeBo":{"type":"object","description":"鍙戦€佺煭淇¢獙璇佺爜璇锋眰","properties":{"phonenumber":{"type":"string","description":"鎵嬫満鍙风爜","minLength":1,"pattern":"^1[3-9]\\d{9}$"},"scene":{"type":"string","description":"涓氬姟鍦烘櫙锛歳egister / login / reset / change_phone_old / change_phone_new","minLength":1}},"required":["phonenumber","scene"]},"RegisterBo":{"type":"object","description":"App 鐢ㄦ埛娉ㄥ唽璇锋眰锛堟墜鏈哄彿銆侀獙璇佺爜銆佸瘑鐮併€佺‘璁ゅ瘑鐮佸洓涓瓧娈碉級","properties":{"phonenumber":{"type":"string","description":"鎵嬫満鍙风爜","minLength":1,"pattern":"^1[3-9]\\d{9}$"},"smsCode":{"type":"string","description":"鐭俊楠岃瘉鐮?,"minLength":1},"password":{"type":"string","description":"瀵嗙爜","maxLength":20,"minLength":6},"confirmPassword":{"type":"string","description":"纭瀵嗙爜","minLength":1}},"required":["confirmPassword","password","phonenumber","smsCode"]},"AppLoginVo":{"type":"object","description":"App 鐧诲綍鍝嶅簲锛堝寘鍚闂护鐗屼笌鍩虹鐢ㄦ埛淇℃伅锛?,"properties":{"accessToken":{"type":"string","description":"璁块棶浠ょ墝"},"expireIn":{"type":"integer","format":"int64","description":"浠ょ墝鏈夋晥鏈燂紙绉掞級"},"userId":{"type":"integer","format":"int64","description":"鐢ㄦ埛ID"},"userName":{"type":"string","description":"鐢ㄦ埛鍚?},"nickName":{"type":"string","description":"鏄电О"}}},"RAppLoginVo":{"type":"object","description":"鍝嶅簲淇℃伅涓讳綋","properties":{"code":{"type":"integer","format":"int32","description":"鍝嶅簲鐘舵€佺爜"},"msg":{"type":"string","description":"鍝嶅簲鎻愮ず淇℃伅"},"data":{"$ref":"#/components/schemas/AppLoginVo","description":"鍝嶅簲涓氬姟鏁版嵁"}}},"LoginSmsBo":{"type":"object","description":"鐭俊楠岃瘉鐮佺櫥褰曡姹?,"properties":{"phonenumber":{"type":"string","description":"鎵嬫満鍙风爜","minLength":1,"pattern":"^1[3-9]\\d{9}$"},"smsCode":{"type":"string","description":"鐭俊楠岃瘉鐮?,"minLength":1}},"required":["phonenumber","smsCode"]},"LoginPasswordBo":{"type":"object","description":"璐﹀彿瀵嗙爜鐧诲綍璇锋眰锛坅ccount 鏀寔鐢ㄦ埛鍚嶆垨鎵嬫満鍙凤級","properties":{"account":{"type":"string","description":"鐧诲綍璐﹀彿锛堢敤鎴峰悕鎴栨墜鏈哄彿锛?,"minLength":1},"password":{"type":"string","description":"瀵嗙爜","minLength":1}},"required":["account","password"]},"VerifyResetSmsCodeBo":{"type":"object","properties":{"phonenumber":{"type":"string","minLength":1,"pattern":"^1[3-9]\\d{9}$"},"smsCode":{"type":"string","minLength":1}},"required":["phonenumber","smsCode"]},"DoResetPasswordBo":{"type":"object","properties":{"resetToken":{"type":"string","minLength":1},"newPassword":{"type":"string","maxLength":20,"minLength":6},"confirmPassword":{"type":"string","minLength":1}},"required":["confirmPassword","newPassword","resetToken"]},"VerifyOldPhoneBo":{"type":"object","description":"鎹㈢粦鎵嬫満鍙风涓€姝ワ細鏍¢獙鍘熸墜鏈哄彿楠岃瘉鐮佽姹傚璞?,"properties":{"oldPhonenumber":{"type":"string","description":"鍘熸墜鏈哄彿鐮?,"minLength":1,"pattern":"^1[3-9]\\d{9}$"},"oldSmsCode":{"type":"string","description":"鍘熸墜鏈哄彿鐭俊楠岃瘉鐮?,"minLength":1}},"required":["oldPhonenumber","oldSmsCode"]},"VerifyNewPhoneBo":{"type":"object","description":"鎹㈢粦鎵嬫満鍙风浜屾锛氭牎楠屾柊鎵嬫満鍙烽獙璇佺爜骞舵洿鏂拌姹傚璞?,"properties":{"changeToken":{"type":"string","description":"绗竴姝ユ牎楠岄€氳繃鍚庤繑鍥炵殑涓存椂浠ょ墝","minLength":1},"newPhonenumber":{"type":"string","description":"鏂版墜鏈哄彿鐮?,"minLength":1,"pattern":"^1[3-9]\\d{9}$"},"newSmsCode":{"type":"string","description":"鏂版墜鏈哄彿鐭俊楠岃瘉鐮?,"minLength":1}},"required":["changeToken","newPhonenumber","newSmsCode"]},"AgreementVo":{"type":"object","description":"鍗忚閰嶇疆瑙嗗浘瀵硅薄","properties":{"agreementId":{"type":"integer","format":"int64","description":"鍗忚ID"},"agreementType":{"type":"string","description":"鍗忚绫诲瀷锛坲ser/privacy/service锛?},"agreementNo":{"type":"string","description":"鍗忚缂栧彿"},"versionName":{"type":"string","description":"鐗堟湰鍙?},"name":{"type":"string","description":"鍗忚鍚嶇О"}}},"RListAgreementVo":{"type":"object","description":"鍝嶅簲淇℃伅涓讳綋","properties":{"code":{"type":"integer","format":"int32","description":"鍝嶅簲鐘舵€佺爜"},"msg":{"type":"string","description":"鍝嶅簲鎻愮ず淇℃伅"},"data":{"type":"array","description":"鍝嶅簲涓氬姟鏁版嵁","items":{"$ref":"#/components/schemas/AgreementVo"}}}},"AgreementIdBo":{"type":"object","description":"鍗忚璇︽儏鏌ヨ鍙傛暟","properties":{"agreementId":{"type":"integer","format":"int64","description":"鍗忚ID"}},"required":["agreementId"]},"AgreementDetailVo":{"type":"object","description":"鍗忚璇︽儏瑙嗗浘瀵硅薄","properties":{"agreementNo":{"type":"string","description":"鍗忚缂栧彿"},"name":{"type":"string","description":"鍗忚鍚嶇О"},"versionName":{"type":"string","description":"鐗堟湰鍙?},"content":{"type":"string","description":"鍗忚姝f枃"},"publishTime":{"type":"string","format":"date-time","description":"鐢熸晥鏃堕棿"}}},"RAgreementDetailVo":{"type":"object","description":"鍝嶅簲淇℃伅涓讳綋","properties":{"code":{"type":"integer","format":"int32","description":"鍝嶅簲鐘舵€佺爜"},"msg":{"type":"string","description":"鍝嶅簲鎻愮ず淇℃伅"},"data":{"$ref":"#/components/schemas/AgreementDetailVo","description":"鍝嶅簲涓氬姟鏁版嵁"}}},"OpenApiEmbedTokenRequest":{"type":"object","properties":{"openId":{"type":"string","minLength":1},"trustedCredential":{"type":"string"},"ttlSeconds":{"type":"integer","format":"int32","maximum":86400,"minimum":60}},"required":["openId"]},"OpenApiEmbedTokenResponse":{"type":"object","properties":{"token":{"type":"string"},"tokenType":{"type":"string"},"authHeader":{"type":"string"},"expiresAt":{"type":"string","format":"date-time"},"ttlSeconds":{"type":"integer","format":"int32"},"openId":{"type":"string"},"nickname":{"type":"string"},"avatarUrl":{"type":"string"}}},"ResultOpenApiEmbedTokenResponse":{"type":"object","properties":{"status":{"type":"integer","format":"int32"},"message":{"type":"string"},"data":{"$ref":"#/components/schemas/OpenApiEmbedTokenResponse"}}},"OpenApiResourceResponse":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"storageKey":{"type":"string"},"originalName":{"type":"string"},"fileSize":{"type":"integer","format":"int64"},"mimeType":{"type":"string"},"storageType":{"type":"string"},"accessUrl":{"type":"string"},"bizType":{"type":"string"},"bizId":{"type":"integer","format":"int64"},"creatorId":{"type":"integer","format":"int64"},"createDt":{"type":"string","format":"date-time"}}},"ResultOpenApiResourceResponse":{"type":"object","properties":{"status":{"type":"integer","format":"int32"},"message":{"type":"string"},"data":{"$ref":"#/components/schemas/OpenApiResourceResponse"}}},"OpenApiCreateConversationRequest":{"type":"object","properties":{"agentId":{"type":"integer","format":"int64"},"openId":{"type":"string","minLength":1},"title":{"type":"string","minLength":1}},"required":["agentId","openId","title"]},"OpenApiConversationVO":{"type":"object","properties":{"conversationId":{"type":"string"},"agentId":{"type":"integer","format":"int64"},"title":{"type":"string"},"createDt":{"type":"string"},"updateDt":{"type":"string"}}},"ResultOpenApiConversationVO":{"type":"object","properties":{"status":{"type":"integer","format":"int32"},"message":{"type":"string"},"data":{"$ref":"#/components/schemas/OpenApiConversationVO"}}},"OpenApiChatAttachmentRequest":{"type":"object","properties":{"resourceId":{"type":"integer","format":"int64"},"type":{"type":"string","minLength":1}},"required":["resourceId","type"]},"OpenApiChatRequest":{"type":"object","properties":{"agentId":{"type":"integer","format":"int64"},"openId":{"type":"string","minLength":1},"conversationId":{"type":"string","minLength":1},"content":{"type":"string","minLength":1},"attachments":{"type":"array","items":{"$ref":"#/components/schemas/OpenApiChatAttachmentRequest"}},"disabledMcpServerIds":{"type":"array","items":{"type":"integer","format":"int64"}},"disabledSkillIds":{"type":"array","items":{"type":"integer","format":"int64"}},"deepPlanEnabled":{"type":"boolean"},"webSearchEnabled":{"type":"boolean"},"sid":{"type":"string"},"timeout":{"type":"integer","format":"int64"}},"required":["agentId","content","conversationId","openId"]},"ServerSentEventString":{},"FlowTaskBo":{"type":"object","description":"浠诲姟璇锋眰瀵硅薄","properties":{"nodeName":{"type":"string","description":"浠诲姟鍚嶇О"},"flowName":{"type":"string","description":"娴佺▼瀹氫箟鍚嶇О"},"flowCode":{"type":"string","description":"娴佺▼瀹氫箟缂栫爜"},"category":{"type":"string","description":"娴佺▼鍒嗙被id"},"instanceId":{"type":"integer","format":"int64","description":"娴佺▼瀹炰緥id"},"flowStatus":{"type":"string","description":"娴佺▼鐘舵€?},"permissionList":{"type":"array","description":"鏉冮檺鍒楄〃","items":{"type":"string"}},"createByIds":{"type":"array","description":"鐢宠浜篒ds","items":{"type":"integer","format":"int64"}},"params":{"type":"object","additionalProperties":{},"description":"璇锋眰鍙傛暟"}}},"PageQuery":{"type":"object","description":"鍒嗛〉鏌ヨ瀹炰綋绫?,"properties":{"pageSize":{"type":"integer","format":"int32","description":"鍒嗛〉澶у皬"},"pageNum":{"type":"integer","format":"int32","description":"褰撳墠椤垫暟"},"orderByColumn":{"type":"string","description":"鎺掑簭鍒?},"isAsc":{"type":"string","description":"鎺掑簭鐨勬柟鍚慸esc鎴栬€卆sc"}}},"ButtonPermissionVo":{"type":"object","description":"鎸夐挳鏉冮檺瑙嗗浘瀵硅薄銆?,"properties":{"code":{"type":"string","description":"鍞竴缂栫爜"},"value":{"type":"string","description":"閫夐」鍊?},"show":{"type":"boolean","description":"鏄惁鏄剧ず"}}},"FlowCopyVo":{"type":"object","description":"娴佺▼鎶勯€佽鍥惧璞°€?,"properties":{"userId":{"type":"integer","format":"int64","description":"鐢ㄦ埛id"},"nickName":{"type":"string","description":"鐢ㄦ埛鏄电О"}}},"FlowTaskVo":{"type":"object","description":"娴佺▼浠诲姟瑙嗗浘瀵硅薄銆?,"properties":{"id":{"type":"integer","format":"int64","description":"浠诲姟ID銆?},"createTime":{"type":"string","format":"date-time","description":"鍒涘缓鏃堕棿"},"updateTime":{"type":"string","format":"date-time","description":"鏇存柊鏃堕棿"},"delFlag":{"type":"string","description":"鍒犻櫎鏍囪"},"definitionId":{"type":"integer","format":"int64","description":"瀵瑰簲flow_definition琛ㄧ殑id"},"instanceId":{"type":"integer","format":"int64","description":"娴佺▼瀹炰緥琛╥d"},"flowName":{"type":"string","description":"娴佺▼瀹氫箟鍚嶇О"},"businessId":{"type":"string","description":"涓氬姟id"},"nodeCode":{"type":"string","description":"鑺傜偣缂栫爜"},"nodeName":{"type":"string","description":"鑺傜偣鍚嶇О"},"nodeType":{"type":"integer","format":"int32","description":"鑺傜偣绫诲瀷锛?寮€濮嬭妭鐐?1涓棿鑺傜偣 2缁撴潫鑺傜偣 3浜掓枼缃戝叧 4骞惰缃戝叧锛?},"permissionList":{"type":"array","description":"鏉冮檺鏍囪瘑 permissionFlag鐨刲ist褰㈠紡","items":{"type":"string"}},"userList":{"type":"array","description":"娴佺▼鐢ㄦ埛鍒楄〃","items":{"$ref":"#/components/schemas/User"}},"formCustom":{"type":"string","description":"瀹℃壒琛ㄥ崟鏄惁鑷畾涔夛紙Y鏄?N鍚︼級"},"formPath":{"type":"string","description":"瀹℃壒琛ㄥ崟"},"flowCode":{"type":"string","description":"娴佺▼瀹氫箟缂栫爜"},"version":{"type":"string","description":"娴佺▼鐗堟湰鍙?},"flowStatus":{"type":"string","description":"娴佺▼鐘舵€?},"category":{"type":"string","description":"娴佺▼鍒嗙被id"},"categoryName":{"type":"string","description":"娴佺▼鍒嗙被鍚嶇О"},"flowStatusName":{"type":"string","description":"娴佺▼鐘舵€?},"type":{"type":"string","description":"鍔炵悊浜虹被鍨?},"assigneeIds":{"type":"string","description":"鍔炵悊浜篿ds"},"assigneeNames":{"type":"string","description":"鍔炵悊浜哄悕绉?},"processedBy":{"type":"string","description":"鎶勯€佷汉id"},"processedByName":{"type":"string","description":"鎶勯€佷汉鍚嶇О"},"nodeRatio":{"type":"string","description":"娴佺▼绛剧讲姣斾緥鍊?澶т簬0涓虹エ绛撅紝浼氱"},"createBy":{"type":"string","description":"鐢宠浜篿d"},"createByName":{"type":"string","description":"鐢宠浜哄悕绉?},"applyNode":{"type":"boolean","description":"鏄惁涓虹敵璇蜂汉鑺傜偣"},"buttonList":{"type":"array","description":"鎸夐挳鏉冮檺","items":{"$ref":"#/components/schemas/ButtonPermissionVo"}},"copyList":{"type":"array","description":"鎶勯€佸璞?ID 闆嗗悎\n

\n 鏍规嵁鎵╁睍灞炴€т腑 CopySettingEnum 绫诲瀷鐨勬暟鎹敓鎴愶紝瀛樺偍闇€瑕佹妱閫佺殑瀵硅薄 ID","items":{"$ref":"#/components/schemas/FlowCopyVo"}},"varList":{"type":"object","additionalProperties":{"type":"string"},"description":"鑷畾涔夊弬鏁?Map\n

\n 鏍规嵁鎵╁睍灞炴€т腑 VariablesEnum 绫诲瀷鐨勬暟鎹敓鎴愶紝瀛樺偍 key=value 鏍煎紡鐨勮嚜瀹氫箟鍙傛暟"},"businessCode":{"type":"string","description":"涓氬姟缂栫爜"},"businessTitle":{"type":"string","description":"涓氬姟鏍囬"}}},"PageResultFlowTaskVo":{"type":"object","description":"琛ㄦ牸鍒嗛〉鏁版嵁瀵硅薄","properties":{"total":{"type":"integer","format":"int64","description":"鎬昏褰曟暟"},"rows":{"type":"array","description":"鍒楄〃鏁版嵁","items":{"$ref":"#/components/schemas/FlowTaskVo"}}}},"RPageResultFlowTaskVo":{"type":"object","description":"鍝嶅簲淇℃伅涓讳綋","properties":{"code":{"type":"integer","format":"int32","description":"鍝嶅簲鐘舵€佺爜"},"msg":{"type":"string","description":"鍝嶅簲鎻愮ず淇℃伅"},"data":{"$ref":"#/components/schemas/PageResultFlowTaskVo","description":"鍝嶅簲涓氬姟鏁版嵁"}}},"FlowHisTaskVo":{"type":"object","description":"鍘嗗彶浠诲姟瑙嗗浘","properties":{"id":{"type":"integer","format":"int64","description":"鍘嗗彶浠诲姟涓婚敭"},"createTime":{"type":"string","format":"date-time","description":"鍒涘缓鏃堕棿"},"updateTime":{"type":"string","format":"date-time","description":"鏇存柊鏃堕棿"},"delFlag":{"type":"string","description":"鍒犻櫎鏍囪"},"definitionId":{"type":"integer","format":"int64","description":"瀵瑰簲flow_definition琛ㄧ殑id"},"flowName":{"type":"string","description":"娴佺▼瀹氫箟鍚嶇О"},"instanceId":{"type":"integer","format":"int64","description":"娴佺▼瀹炰緥琛╥d"},"taskId":{"type":"integer","format":"int64","description":"浠诲姟琛╥d"},"cooperateType":{"type":"integer","format":"int32","description":"鍗忎綔鏂瑰紡(1瀹℃壒 2杞姙 3濮旀淳 4浼氱 5绁ㄧ 6鍔犵 7鍑忕)"},"cooperateTypeName":{"type":"string","description":"鍗忎綔鏂瑰紡(1瀹℃壒 2杞姙 3濮旀淳 4浼氱 5绁ㄧ 6鍔犵 7鍑忕)"},"businessId":{"type":"string","description":"涓氬姟id"},"nodeCode":{"type":"string","description":"寮€濮嬭妭鐐圭紪鐮?},"nodeName":{"type":"string","description":"寮€濮嬭妭鐐瑰悕绉?},"nodeType":{"type":"integer","format":"int32","description":"寮€濮嬭妭鐐圭被鍨嬶紙0寮€濮嬭妭鐐?1涓棿鑺傜偣 2缁撴潫鑺傜偣 3浜掓枼缃戝叧 4骞惰缃戝叧锛?},"targetNodeCode":{"type":"string","description":"鐩爣鑺傜偣缂栫爜"},"targetNodeName":{"type":"string","description":"缁撴潫鑺傜偣鍚嶇О"},"approver":{"type":"string","description":"瀹℃壒鑰?},"approverName":{"type":"string","description":"瀹℃壒鑰?},"collaborator":{"type":"string","description":"鍗忎綔浜?鍙湁杞姙銆佷細绛俱€佺エ绛俱€佸娲?"},"permissionList":{"type":"array","description":"鏉冮檺鏍囪瘑 permissionFlag鐨刲ist褰㈠紡","items":{"type":"string"}},"skipType":{"type":"string","description":"璺宠浆绫诲瀷锛圥ASS閫氳繃 REJECT閫€鍥?NONE鏃犲姩浣滐級"},"flowStatus":{"type":"string","description":"娴佺▼鐘舵€?},"flowTaskStatus":{"type":"string","description":"浠诲姟鐘舵€?},"flowStatusName":{"type":"string","description":"娴佺▼鐘舵€?},"message":{"type":"string","description":"瀹℃壒鎰忚"},"ext":{"type":"string","description":"涓氬姟璇︽儏 瀛樹笟鍔$被鐨刯son"},"createBy":{"type":"string","description":"鍒涘缓鑰?},"createByName":{"type":"string","description":"鐢宠浜?},"category":{"type":"string","description":"娴佺▼鍒嗙被id"},"categoryName":{"type":"string","description":"娴佺▼鍒嗙被鍚嶇О"},"formCustom":{"type":"string","description":"瀹℃壒琛ㄥ崟鏄惁鑷畾涔夛紙Y鏄?N鍚︼級"},"formPath":{"type":"string","description":"瀹℃壒琛ㄥ崟璺緞"},"flowCode":{"type":"string","description":"娴佺▼瀹氫箟缂栫爜"},"version":{"type":"string","description":"娴佺▼鐗堟湰鍙?},"runDuration":{"type":"string","description":"杩愯鏃堕暱"},"businessCode":{"type":"string","description":"涓氬姟缂栫爜"},"businessTitle":{"type":"string","description":"涓氬姟鏍囬"}}},"PageResultFlowHisTaskVo":{"type":"object","description":"琛ㄦ牸鍒嗛〉鏁版嵁瀵硅薄","properties":{"total":{"type":"integer","format":"int64","description":"鎬昏褰曟暟"},"rows":{"type":"array","description":"鍒楄〃鏁版嵁","items":{"$ref":"#/components/schemas/FlowHisTaskVo"}}}},"RPageResultFlowHisTaskVo":{"type":"object","description":"鍝嶅簲淇℃伅涓讳綋","properties":{"code":{"type":"integer","format":"int32","description":"鍝嶅簲鐘舵€佺爜"},"msg":{"type":"string","description":"鍝嶅簲鎻愮ず淇℃伅"},"data":{"$ref":"#/components/schemas/PageResultFlowHisTaskVo","description":"鍝嶅簲涓氬姟鏁版嵁"}}},"RFlowTaskVo":{"type":"object","description":"鍝嶅簲淇℃伅涓讳綋","properties":{"code":{"type":"integer","format":"int32","description":"鍝嶅簲鐘舵€佺爜"},"msg":{"type":"string","description":"鍝嶅簲鎻愮ず淇℃伅"},"data":{"$ref":"#/components/schemas/FlowTaskVo","description":"鍝嶅簲涓氬姟鏁版嵁"}}},"RListNode":{"type":"object","description":"鍝嶅簲淇℃伅涓讳綋","properties":{"code":{"type":"integer","format":"int32","description":"鍝嶅簲鐘舵€佺爜"},"msg":{"type":"string","description":"鍝嶅簲鎻愮ず淇℃伅"},"data":{"type":"array","description":"鍝嶅簲涓氬姟鏁版嵁","items":{"$ref":"#/components/schemas/Node"}}}},"RListUserDTO":{"type":"object","description":"鍝嶅簲淇℃伅涓讳綋","properties":{"code":{"type":"integer","format":"int32","description":"鍝嶅簲鐘舵€佺爜"},"msg":{"type":"string","description":"鍝嶅簲鎻愮ず淇℃伅"},"data":{"type":"array","description":"鍝嶅簲涓氬姟鏁版嵁","items":{"$ref":"#/components/schemas/UserDTO"}}}},"UserDTO":{"type":"object","description":"鐢ㄦ埛","properties":{"userId":{"type":"integer","format":"int64","description":"鐢ㄦ埛ID"},"deptId":{"type":"integer","format":"int64","description":"閮ㄩ棬ID"},"userName":{"type":"string","description":"鐢ㄦ埛璐﹀彿"},"nickName":{"type":"string","description":"鐢ㄦ埛鏄电О"},"userType":{"type":"string","description":"鐢ㄦ埛绫诲瀷锛坰ys_user绯荤粺鐢ㄦ埛锛?},"email":{"type":"string","description":"鐢ㄦ埛閭"},"phoneNumber":{"type":"string","description":"鎵嬫満鍙风爜"},"gender":{"type":"string","description":"鐢ㄦ埛鎬у埆锛?鐢?1濂?2鏈煡锛?},"status":{"type":"string","description":"璐﹀彿鐘舵€侊紙0姝e父 1鍋滅敤锛?},"createTime":{"type":"string","format":"date-time","description":"鍒涘缓鏃堕棿"}}},"FlowSpelVo":{"type":"object","description":"娴佺▼spel琛ㄨ揪寮忓畾涔夎鍥惧璞?flow_spel","properties":{"id":{"type":"integer","format":"int64","description":"涓婚敭id"},"componentName":{"type":"string","description":"缁勪欢鍚嶇О"},"methodName":{"type":"string","description":"鏂规硶鍚?},"methodParams":{"type":"string","description":"鍙傛暟"},"viewSpel":{"type":"string","description":"棰勮spel鍊?},"status":{"type":"string","description":"鐘舵€侊紙0姝e父 1鍋滅敤锛?},"remark":{"type":"string","description":"澶囨敞"},"createTime":{"type":"string","format":"date-time","description":"鍒涘缓鏃堕棿"}}},"RFlowSpelVo":{"type":"object","description":"鍝嶅簲淇℃伅涓讳綋","properties":{"code":{"type":"integer","format":"int32","description":"鍝嶅簲鐘舵€佺爜"},"msg":{"type":"string","description":"鍝嶅簲鎻愮ず淇℃伅"},"data":{"$ref":"#/components/schemas/FlowSpelVo","description":"鍝嶅簲涓氬姟鏁版嵁"}}},"PageResultFlowSpelVo":{"type":"object","description":"琛ㄦ牸鍒嗛〉鏁版嵁瀵硅薄","properties":{"total":{"type":"integer","format":"int64","description":"鎬昏褰曟暟"},"rows":{"type":"array","description":"鍒楄〃鏁版嵁","items":{"$ref":"#/components/schemas/FlowSpelVo"}}}},"RPageResultFlowSpelVo":{"type":"object","description":"鍝嶅簲淇℃伅涓讳綋","properties":{"code":{"type":"integer","format":"int32","description":"鍝嶅簲鐘舵€佺爜"},"msg":{"type":"string","description":"鍝嶅簲鎻愮ず淇℃伅"},"data":{"$ref":"#/components/schemas/PageResultFlowSpelVo","description":"鍝嶅簲涓氬姟鏁版嵁"}}},"PageResultTestLeaveVo":{"type":"object","description":"琛ㄦ牸鍒嗛〉鏁版嵁瀵硅薄","properties":{"total":{"type":"integer","format":"int64","description":"鎬昏褰曟暟"},"rows":{"type":"array","description":"鍒楄〃鏁版嵁","items":{"$ref":"#/components/schemas/TestLeaveVo"}}}},"RPageResultTestLeaveVo":{"type":"object","description":"鍝嶅簲淇℃伅涓讳綋","properties":{"code":{"type":"integer","format":"int32","description":"鍝嶅簲鐘舵€佺爜"},"msg":{"type":"string","description":"鍝嶅簲鎻愮ず淇℃伅"},"data":{"$ref":"#/components/schemas/PageResultTestLeaveVo","description":"鍝嶅簲涓氬姟鏁版嵁"}}},"FlowInstanceBo":{"type":"object","description":"娴佺▼瀹炰緥鏌ヨ鏉′欢瀵硅薄銆?,"properties":{"flowName":{"type":"string","description":"娴佺▼瀹氫箟鍚嶇О"},"flowCode":{"type":"string","description":"娴佺▼瀹氫箟缂栫爜"},"startUserId":{"type":"string","description":"浠诲姟鍙戣捣浜?},"businessId":{"type":"string","description":"涓氬姟id"},"category":{"type":"string","description":"娴佺▼鍒嗙被id"},"nodeName":{"type":"string","description":"浠诲姟鍚嶇О"},"createByIds":{"type":"array","description":"鐢宠浜篒ds","items":{"type":"string"}}}},"FlowInstanceVo":{"type":"object","description":"娴佺▼瀹炰緥瑙嗗浘瀵硅薄銆?,"properties":{"id":{"type":"integer","format":"int64","description":"娴佺▼瀹炰緥ID銆?},"createTime":{"type":"string","format":"date-time","description":"鍒涘缓鏃堕棿"},"updateTime":{"type":"string","format":"date-time","description":"鏇存柊鏃堕棿"},"delFlag":{"type":"string","description":"鍒犻櫎鏍囪"},"definitionId":{"type":"integer","format":"int64","description":"瀵瑰簲flow_definition琛ㄧ殑id"},"flowName":{"type":"string","description":"娴佺▼瀹氫箟鍚嶇О"},"flowCode":{"type":"string","description":"娴佺▼瀹氫箟缂栫爜"},"businessId":{"type":"string","description":"涓氬姟id"},"nodeType":{"type":"integer","format":"int32","description":"鑺傜偣绫诲瀷锛?寮€濮嬭妭鐐?1涓棿鑺傜偣 2缁撴潫鑺傜偣 3浜掓枼缃戝叧 4骞惰缃戝叧锛?},"nodeCode":{"type":"string","description":"娴佺▼鑺傜偣缂栫爜 姣忎釜娴佺▼鐨刵odeCode鏄敮涓€鐨?鍗砫efinitionId+nodeCode鍞竴,鍦ㄦ暟鎹簱灞傞潰鍋氫簡鎺у埗"},"nodeName":{"type":"string","description":"娴佺▼鑺傜偣鍚嶇О"},"variable":{"type":"string","description":"娴佺▼鍙橀噺"},"flowStatus":{"type":"string","description":"娴佺▼鐘舵€?},"flowStatusName":{"type":"string","description":"娴佺▼鐘舵€?},"activityStatus":{"type":"integer","format":"int32","description":"娴佺▼婵€娲荤姸鎬侊紙0鎸傝捣 1婵€娲伙級"},"formCustom":{"type":"string","description":"瀹℃壒琛ㄥ崟鏄惁鑷畾涔夛紙Y鏄?N鍚︼級"},"formPath":{"type":"string","description":"瀹℃壒琛ㄥ崟璺緞"},"ext":{"type":"string","description":"鎵╁睍瀛楁锛岄鐣欑粰涓氬姟绯荤粺浣跨敤"},"version":{"type":"string","description":"娴佺▼瀹氫箟鐗堟湰"},"createBy":{"type":"string","description":"鍒涘缓鑰?},"createByName":{"type":"string","description":"鐢宠浜?},"category":{"type":"string","description":"娴佺▼鍒嗙被id"},"categoryName":{"type":"string","description":"娴佺▼鍒嗙被鍚嶇О"},"businessCode":{"type":"string","description":"涓氬姟缂栫爜"},"businessTitle":{"type":"string","description":"涓氬姟鏍囬"}}},"PageResultFlowInstanceVo":{"type":"object","description":"琛ㄦ牸鍒嗛〉鏁版嵁瀵硅薄","properties":{"total":{"type":"integer","format":"int64","description":"鎬昏褰曟暟"},"rows":{"type":"array","description":"鍒楄〃鏁版嵁","items":{"$ref":"#/components/schemas/FlowInstanceVo"}}}},"RPageResultFlowInstanceVo":{"type":"object","description":"鍝嶅簲淇℃伅涓讳綋","properties":{"code":{"type":"integer","format":"int32","description":"鍝嶅簲鐘舵€佺爜"},"msg":{"type":"string","description":"鍝嶅簲鎻愮ず淇℃伅"},"data":{"$ref":"#/components/schemas/PageResultFlowInstanceVo","description":"鍝嶅簲涓氬姟鏁版嵁"}}},"RMapStringObject":{"type":"object","description":"鍝嶅簲淇℃伅涓讳綋","properties":{"code":{"type":"integer","format":"int32","description":"鍝嶅簲鐘舵€佺爜"},"msg":{"type":"string","description":"鍝嶅簲鎻愮ず淇℃伅"},"data":{"type":"object","additionalProperties":{},"description":"鍝嶅簲涓氬姟鏁版嵁"}}},"RFlowInstanceVo":{"type":"object","description":"鍝嶅簲淇℃伅涓讳綋","properties":{"code":{"type":"integer","format":"int32","description":"鍝嶅簲鐘舵€佺爜"},"msg":{"type":"string","description":"鍝嶅簲鎻愮ず淇℃伅"},"data":{"$ref":"#/components/schemas/FlowInstanceVo","description":"鍝嶅簲涓氬姟鏁版嵁"}}},"Definition":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"version":{"type":"string"},"tenantId":{"type":"string"},"isPublish":{"type":"integer","format":"int32"},"modelValue":{"type":"string"},"userList":{"type":"array","items":{"$ref":"#/components/schemas/User"}},"nodeList":{"type":"array","items":{"$ref":"#/components/schemas/Node"}},"listenerPath":{"type":"string"},"activityStatus":{"type":"integer","format":"int32"},"listenerType":{"type":"string"},"updateBy":{"type":"string"},"ext":{"type":"string"},"delFlag":{"type":"string"},"createTime":{"type":"string","format":"date-time"},"createBy":{"type":"string"},"category":{"type":"string"},"flowName":{"type":"string"},"flowCode":{"type":"string"},"updateTime":{"type":"string","format":"date-time"},"formCustom":{"type":"string"},"formPath":{"type":"string"}}},"RDefinition":{"type":"object","description":"鍝嶅簲淇℃伅涓讳綋","properties":{"code":{"type":"integer","format":"int32","description":"鍝嶅簲鐘舵€佺爜"},"msg":{"type":"string","description":"鍝嶅簲鎻愮ず淇℃伅"},"data":{"$ref":"#/components/schemas/Definition","description":"鍝嶅簲涓氬姟鏁版嵁"}}},"FlowDefinitionVo":{"type":"object","description":"娴佺▼瀹氫箟瑙嗗浘","properties":{"id":{"type":"integer","format":"int64","description":"娴佺▼瀹氫箟涓婚敭"},"createTime":{"type":"string","format":"date-time","description":"鍒涘缓鏃堕棿"},"updateTime":{"type":"string","format":"date-time","description":"鏇存柊鏃堕棿"},"delFlag":{"type":"string","description":"鍒犻櫎鏍囪"},"flowCode":{"type":"string","description":"娴佺▼瀹氫箟缂栫爜"},"flowName":{"type":"string","description":"娴佺▼瀹氫箟鍚嶇О"},"category":{"type":"string","description":"娴佺▼鍒嗙被id"},"categoryName":{"type":"string","description":"娴佺▼鍒嗙被鍚嶇О"},"version":{"type":"string","description":"娴佺▼鐗堟湰"},"isPublish":{"type":"integer","format":"int32","description":"鏄惁鍙戝竷锛?鏈彂甯?1宸插彂甯?9澶辨晥锛?},"formCustom":{"type":"string","description":"瀹℃壒琛ㄥ崟鏄惁鑷畾涔夛紙Y鏄?N鍚︼級"},"formPath":{"type":"string","description":"瀹℃壒琛ㄥ崟璺緞"},"activityStatus":{"type":"integer","format":"int32","description":"娴佺▼婵€娲荤姸鎬侊紙0鎸傝捣 1婵€娲伙級"},"listenerType":{"type":"string","description":"鐩戝惉鍣ㄧ被鍨?},"listenerPath":{"type":"string","description":"鐩戝惉鍣ㄨ矾寰?},"ext":{"type":"string","description":"鎵╁睍瀛楁锛岄鐣欑粰涓氬姟绯荤粺浣跨敤"}}},"PageResultFlowDefinitionVo":{"type":"object","description":"琛ㄦ牸鍒嗛〉鏁版嵁瀵硅薄","properties":{"total":{"type":"integer","format":"int64","description":"鎬昏褰曟暟"},"rows":{"type":"array","description":"鍒楄〃鏁版嵁","items":{"$ref":"#/components/schemas/FlowDefinitionVo"}}}},"RPageResultFlowDefinitionVo":{"type":"object","description":"鍝嶅簲淇℃伅涓讳綋","properties":{"code":{"type":"integer","format":"int32","description":"鍝嶅簲鐘舵€佺爜"},"msg":{"type":"string","description":"鍝嶅簲鎻愮ず淇℃伅"},"data":{"$ref":"#/components/schemas/PageResultFlowDefinitionVo","description":"鍝嶅簲涓氬姟鏁版嵁"}}},"FlowCategoryVo":{"type":"object","description":"娴佺▼鍒嗙被瑙嗗浘瀵硅薄 wf_category","properties":{"categoryId":{"type":"integer","format":"int64","description":"娴佺▼鍒嗙被ID"},"parentId":{"type":"integer","format":"int64","description":"鐖剁骇鍒嗙被id"},"parentName":{"type":"string","description":"鐖剁骇鍒嗙被鍚嶇О"},"ancestors":{"type":"string","description":"绁栫骇鍒楄〃"},"categoryName":{"type":"string","description":"娴佺▼鍒嗙被鍚嶇О"},"orderNum":{"type":"integer","format":"int64","description":"鏄剧ず椤哄簭"},"createTime":{"type":"string","format":"date-time","description":"鍒涘缓鏃堕棿"}}},"RFlowCategoryVo":{"type":"object","description":"鍝嶅簲淇℃伅涓讳綋","properties":{"code":{"type":"integer","format":"int32","description":"鍝嶅簲鐘舵€佺爜"},"msg":{"type":"string","description":"鍝嶅簲鎻愮ず淇℃伅"},"data":{"$ref":"#/components/schemas/FlowCategoryVo","description":"鍝嶅簲涓氬姟鏁版嵁"}}},"RListFlowCategoryVo":{"type":"object","description":"鍝嶅簲淇℃伅涓讳綋","properties":{"code":{"type":"integer","format":"int32","description":"鍝嶅簲鐘舵€佺爜"},"msg":{"type":"string","description":"鍝嶅簲鎻愮ず淇℃伅"},"data":{"type":"array","description":"鍝嶅簲涓氬姟鏁版嵁","items":{"$ref":"#/components/schemas/FlowCategoryVo"}}}},"RListTreeString":{"type":"object","description":"鍝嶅簲淇℃伅涓讳綋","properties":{"code":{"type":"integer","format":"int32","description":"鍝嶅簲鐘舵€佺爜"},"msg":{"type":"string","description":"鍝嶅簲鎻愮ず淇℃伅"},"data":{"type":"array","description":"鍝嶅簲涓氬姟鏁版嵁","items":{"$ref":"#/components/schemas/TreeString"}}}},"TreeNodeConfig":{"type":"object","properties":{"idKey":{"type":"string"},"parentIdKey":{"type":"string"},"weightKey":{"type":"string"},"nameKey":{"type":"string"},"childrenKey":{"type":"string"},"deep":{"type":"integer","format":"int32"}}},"TreeString":{"type":"object","additionalProperties":{},"properties":{"name":{"type":"object","properties":{"empty":{"type":"boolean"}}},"id":{"type":"string"},"weight":{},"parentId":{"type":"string"},"config":{"$ref":"#/components/schemas/TreeNodeConfig"},"empty":{"type":"boolean"}}},"ApiResultDefJson":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"msg":{"type":"string"},"data":{"$ref":"#/components/schemas/DefJson"}}},"ApiResultListForm":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"msg":{"type":"string"},"data":{"type":"array","items":{"$ref":"#/components/schemas/Form"}}}},"ApiResultListNodeExt":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"msg":{"type":"string"},"data":{"type":"array","items":{"$ref":"#/components/schemas/NodeExt"}}}},"ChildNode":{"type":"object","properties":{"code":{"type":"string"},"desc":{"type":"string"},"label":{"type":"string"},"type":{"type":"integer","format":"int32"},"must":{"type":"boolean"},"multiple":{"type":"boolean"},"precision":{"type":"integer","format":"int32"},"step":{"type":"string"},"min":{"type":"string"},"dateType":{"type":"string"},"dateFormat":{"type":"string"},"dict":{"type":"array","items":{"$ref":"#/components/schemas/DictItem"}}}},"DictItem":{"type":"object","properties":{"label":{"type":"string"},"value":{"type":"string"},"selected":{"type":"boolean"}}},"NodeExt":{"type":"object","properties":{"code":{"type":"string"},"name":{"type":"string"},"desc":{"type":"string"},"type":{"type":"integer","format":"int32"},"childs":{"type":"array","items":{"$ref":"#/components/schemas/ChildNode"}}}},"ApiResultListListenerVo":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"msg":{"type":"string"},"data":{"type":"array","items":{"$ref":"#/components/schemas/ListenerVo"}}}},"ListenerVo":{"type":"object","properties":{"type":{"type":"string"},"path":{"type":"string"},"description":{"type":"string"}}},"ApiResultListString":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"msg":{"type":"string"},"data":{"type":"array","items":{"type":"string"}}}},"HandlerQuery":{"type":"object","properties":{"handlerCode":{"type":"string"},"handlerName":{"type":"string"},"handlerType":{"type":"string"},"groupId":{"type":"string"},"pageNum":{"type":"integer","format":"int32"},"pageSize":{"type":"integer","format":"int32"},"beginTime":{"type":"string"},"endTime":{"type":"string"}}},"ApiResultHandlerSelectVo":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"msg":{"type":"string"},"data":{"$ref":"#/components/schemas/HandlerSelectVo"}}},"FlowPageHandlerAuth":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"rows":{"type":"array","items":{"$ref":"#/components/schemas/HandlerAuth"}},"code":{"type":"integer","format":"int32"},"msg":{"type":"string"}}},"HandlerAuth":{"type":"object","properties":{"storageId":{"type":"string"},"handlerCode":{"type":"string"},"handlerName":{"type":"string"},"groupName":{"type":"string"},"createTime":{"type":"string"}}},"HandlerSelectVo":{"type":"object","properties":{"handlerAuths":{"$ref":"#/components/schemas/FlowPageHandlerAuth"},"treeSelections":{"type":"array","items":{"$ref":"#/components/schemas/Tree"}}}},"HandlerFeedBackDto":{"type":"object","properties":{"storageIds":{"type":"array","items":{"type":"string"}}}},"ApiResultListHandlerFeedBackVo":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"msg":{"type":"string"},"data":{"type":"array","items":{"$ref":"#/components/schemas/HandlerFeedBackVo"}}}},"HandlerFeedBackVo":{"type":"object","properties":{"storageId":{"type":"string"},"handlerName":{"type":"string"}}},"ApiResultListDict":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"msg":{"type":"string"},"data":{"type":"array","items":{"$ref":"#/components/schemas/Dict"}}}},"Dict":{"type":"object","properties":{"label":{"type":"string"},"value":{"type":"string"},"childList":{"type":"array","items":{"$ref":"#/components/schemas/Dict"}}}},"ApiResultString":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"msg":{"type":"string"},"data":{"type":"string"}}},"ApiResultFlowDto":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"msg":{"type":"string"},"data":{"$ref":"#/components/schemas/FlowDto"}}},"ApiResultWarmFlowVo":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"msg":{"type":"string"},"data":{"$ref":"#/components/schemas/WarmFlowVo"}}},"WarmFlowVo":{"type":"object","properties":{"tokenNameList":{"type":"array","items":{"type":"string"}},"framework":{"type":"string"}}},"ProfileUserVo":{"type":"object","description":"鐢ㄦ埛淇℃伅瑙嗗浘瀵硅薄 sys_user","properties":{"userId":{"type":"integer","format":"int64","description":"鐢ㄦ埛ID"},"deptId":{"type":"integer","format":"int64","description":"閮ㄩ棬ID"},"userName":{"type":"string","description":"鐢ㄦ埛璐﹀彿"},"nickName":{"type":"string","description":"鐢ㄦ埛鏄电О"},"userType":{"type":"string","description":"鐢ㄦ埛绫诲瀷锛坰ys_user绯荤粺鐢ㄦ埛锛?},"email":{"type":"string","description":"鐢ㄦ埛閭"},"phoneNumber":{"type":"string","description":"鎵嬫満鍙风爜"},"gender":{"type":"string","description":"鐢ㄦ埛鎬у埆锛?鐢?1濂?2鏈煡锛?},"avatar":{"type":"integer","format":"int64","description":"澶村儚 OSS ID"},"avatarUrl":{"type":"string","description":"澶村儚鍦板潃"},"loginIp":{"type":"string","description":"鏈€鍚庣櫥褰旾P"},"loginDate":{"type":"string","format":"date-time","description":"鏈€鍚庣櫥褰曟椂闂?},"deptName":{"type":"string","description":"閮ㄩ棬鍚?}}},"ProfileVo":{"type":"object","description":"鐢ㄦ埛涓汉淇℃伅","properties":{"user":{"$ref":"#/components/schemas/ProfileUserVo","description":"鐢ㄦ埛淇℃伅"},"roleGroup":{"type":"string","description":"鐢ㄦ埛鎵€灞炶鑹茬粍"},"postGroup":{"type":"string","description":"鐢ㄦ埛鎵€灞炲矖浣嶇粍"}}},"RProfileVo":{"type":"object","description":"鍝嶅簲淇℃伅涓讳綋","properties":{"code":{"type":"integer","format":"int32","description":"鍝嶅簲鐘舵€佺爜"},"msg":{"type":"string","description":"鍝嶅簲鎻愮ず淇℃伅"},"data":{"$ref":"#/components/schemas/ProfileVo","description":"鍝嶅簲涓氬姟鏁版嵁"}}},"RListSysUserVo":{"type":"object","description":"鍝嶅簲淇℃伅涓讳綋","properties":{"code":{"type":"integer","format":"int32","description":"鍝嶅簲鐘舵€佺爜"},"msg":{"type":"string","description":"鍝嶅簲鎻愮ず淇℃伅"},"data":{"type":"array","description":"鍝嶅簲涓氬姟鏁版嵁","items":{"$ref":"#/components/schemas/SysUserVo"}}}},"SysRoleVo":{"type":"object","description":"瑙掕壊淇℃伅瑙嗗浘瀵硅薄 sys_role","properties":{"roleId":{"type":"integer","format":"int64","description":"瑙掕壊ID"},"roleName":{"type":"string","description":"瑙掕壊鍚嶇О"},"roleKey":{"type":"string","description":"瑙掕壊鏉冮檺瀛楃涓?},"roleSort":{"type":"integer","format":"int32","description":"鏄剧ず椤哄簭"},"dataScope":{"type":"string","description":"鏁版嵁鑼冨洿锛?锛氬叏閮ㄦ暟鎹潈闄?2锛氳嚜瀹氭暟鎹潈闄?3锛氭湰閮ㄩ棬鏁版嵁鏉冮檺 4锛氭湰閮ㄩ棬鍙婁互涓嬫暟鎹潈闄?5锛氫粎鏈汉鏁版嵁鏉冮檺 6锛氶儴闂ㄥ強浠ヤ笅鎴栨湰浜烘暟鎹潈闄愶級"},"menuCheckStrictly":{"type":"boolean","description":"鑿滃崟鏍戦€夋嫨椤规槸鍚﹀叧鑱旀樉绀?},"deptCheckStrictly":{"type":"boolean","description":"閮ㄩ棬鏍戦€夋嫨椤规槸鍚﹀叧鑱旀樉绀?},"status":{"type":"string","description":"瑙掕壊鐘舵€侊紙0姝e父 1鍋滅敤锛?},"remark":{"type":"string","description":"澶囨敞"},"createTime":{"type":"string","format":"date-time","description":"鍒涘缓鏃堕棿"},"flag":{"type":"boolean","description":"鐢ㄦ埛鏄惁瀛樺湪姝よ鑹叉爣璇?榛樿涓嶅瓨鍦?},"superAdmin":{"type":"boolean","description":"鍒ゆ柇褰撳墠瑙掕壊鏄惁涓鸿秴绾х鐞嗗憳瑙掕壊銆?}}},"SysUserVo":{"type":"object","description":"鐢ㄦ埛淇℃伅瑙嗗浘瀵硅薄 sys_user","properties":{"userId":{"type":"integer","format":"int64","description":"鐢ㄦ埛ID"},"deptId":{"type":"integer","format":"int64","description":"閮ㄩ棬ID"},"userName":{"type":"string","description":"鐢ㄦ埛璐﹀彿"},"nickName":{"type":"string","description":"鐢ㄦ埛鏄电О"},"userType":{"type":"string","description":"鐢ㄦ埛绫诲瀷锛坰ys_user绯荤粺鐢ㄦ埛锛?},"email":{"type":"string","description":"鐢ㄦ埛閭"},"phoneNumber":{"type":"string","description":"鎵嬫満鍙风爜"},"gender":{"type":"string","description":"鐢ㄦ埛鎬у埆锛?鐢?1濂?2鏈煡锛?},"avatar":{"type":"integer","format":"int64","description":"澶村儚 OSS ID"},"avatarUrl":{"type":"string","description":"澶村儚鍦板潃"},"status":{"type":"string","description":"璐﹀彿鐘舵€侊紙0姝e父 1鍋滅敤锛?},"loginIp":{"type":"string","description":"鏈€鍚庣櫥褰旾P"},"loginDate":{"type":"string","format":"date-time","description":"鏈€鍚庣櫥褰曟椂闂?},"remark":{"type":"string","description":"澶囨敞"},"createTime":{"type":"string","format":"date-time","description":"鍒涘缓鏃堕棿"},"updateTime":{"type":"string","format":"date-time","description":"鏇存柊鏃堕棿"},"deptName":{"type":"string","description":"閮ㄩ棬鍚?},"roles":{"type":"array","description":"瑙掕壊瀵硅薄","items":{"$ref":"#/components/schemas/SysRoleVo"}},"roleIds":{"type":"array","description":"瑙掕壊缁?,"items":{"type":"integer","format":"int64"}},"postIds":{"type":"array","description":"宀椾綅缁?,"items":{"type":"integer","format":"int64"}},"roleId":{"type":"integer","format":"int64","description":"鏁版嵁鏉冮檺 褰撳墠瑙掕壊ID"}}},"PageResultSysUserVo":{"type":"object","description":"琛ㄦ牸鍒嗛〉鏁版嵁瀵硅薄","properties":{"total":{"type":"integer","format":"int64","description":"鎬昏褰曟暟"},"rows":{"type":"array","description":"鍒楄〃鏁版嵁","items":{"$ref":"#/components/schemas/SysUserVo"}}}},"RPageResultSysUserVo":{"type":"object","description":"鍝嶅簲淇℃伅涓讳綋","properties":{"code":{"type":"integer","format":"int32","description":"鍝嶅簲鐘舵€佺爜"},"msg":{"type":"string","description":"鍝嶅簲鎻愮ず淇℃伅"},"data":{"$ref":"#/components/schemas/PageResultSysUserVo","description":"鍝嶅簲涓氬姟鏁版嵁"}}},"RUserInfoVo":{"type":"object","description":"鍝嶅簲淇℃伅涓讳綋","properties":{"code":{"type":"integer","format":"int32","description":"鍝嶅簲鐘舵€佺爜"},"msg":{"type":"string","description":"鍝嶅簲鎻愮ず淇℃伅"},"data":{"$ref":"#/components/schemas/UserInfoVo","description":"鍝嶅簲涓氬姟鏁版嵁"}}},"UserInfoVo":{"type":"object","description":"鐧诲綍鐢ㄦ埛淇℃伅","properties":{"user":{"$ref":"#/components/schemas/SysUserVo","description":"鐢ㄦ埛鍩烘湰淇℃伅"},"permissions":{"type":"array","description":"鑿滃崟鏉冮檺","items":{"type":"string"},"uniqueItems":true},"roles":{"type":"array","description":"瑙掕壊鏉冮檺","items":{"type":"string"},"uniqueItems":true}}},"RSysUserInfoVo":{"type":"object","description":"鍝嶅簲淇℃伅涓讳綋","properties":{"code":{"type":"integer","format":"int32","description":"鍝嶅簲鐘舵€佺爜"},"msg":{"type":"string","description":"鍝嶅簲鎻愮ず淇℃伅"},"data":{"$ref":"#/components/schemas/SysUserInfoVo","description":"鍝嶅簲涓氬姟鏁版嵁"}}},"SysPostVo":{"type":"object","description":"宀椾綅淇℃伅瑙嗗浘瀵硅薄 sys_post","properties":{"postId":{"type":"integer","format":"int64","description":"宀椾綅ID"},"deptId":{"type":"integer","format":"int64","description":"閮ㄩ棬id"},"postCode":{"type":"string","description":"宀椾綅缂栫爜"},"postName":{"type":"string","description":"宀椾綅鍚嶇О"},"postCategory":{"type":"string","description":"宀椾綅绫诲埆缂栫爜"},"postSort":{"type":"integer","format":"int32","description":"鏄剧ず椤哄簭"},"status":{"type":"string","description":"鐘舵€侊紙0姝e父 1鍋滅敤锛?},"remark":{"type":"string","description":"澶囨敞"},"createTime":{"type":"string","format":"date-time","description":"鍒涘缓鏃堕棿"},"deptName":{"type":"string","description":"閮ㄩ棬鍚?}}},"SysUserInfoVo":{"type":"object","description":"鐢ㄦ埛淇℃伅","properties":{"user":{"$ref":"#/components/schemas/SysUserVo","description":"鐢ㄦ埛淇℃伅"},"roleIds":{"type":"array","description":"瑙掕壊ID鍒楄〃","items":{"type":"integer","format":"int64"}},"roles":{"type":"array","description":"瑙掕壊鍒楄〃","items":{"$ref":"#/components/schemas/SysRoleVo"}},"postIds":{"type":"array","description":"宀椾綅ID鍒楄〃","items":{"type":"integer","format":"int64"}},"posts":{"type":"array","description":"宀椾綅鍒楄〃","items":{"$ref":"#/components/schemas/SysPostVo"}}}},"RListSysSocialVo":{"type":"object","description":"鍝嶅簲淇℃伅涓讳綋","properties":{"code":{"type":"integer","format":"int32","description":"鍝嶅簲鐘舵€佺爜"},"msg":{"type":"string","description":"鍝嶅簲鎻愮ず淇℃伅"},"data":{"type":"array","description":"鍝嶅簲涓氬姟鏁版嵁","items":{"$ref":"#/components/schemas/SysSocialVo"}}}},"SysSocialVo":{"type":"object","description":"绀句細鍖栧叧绯昏鍥惧璞?sys_social","properties":{"id":{"type":"integer","format":"int64","description":"涓婚敭"},"userId":{"type":"integer","format":"int64","description":"鐢ㄦ埛ID"},"authId":{"type":"string","description":"鐨勫敮涓€ID"},"source":{"type":"string","description":"鐢ㄦ埛鏉ユ簮"},"accessToken":{"type":"string","description":"鐢ㄦ埛鐨勬巿鏉冧护鐗?},"expireIn":{"type":"integer","format":"int32","description":"鐢ㄦ埛鐨勬巿鏉冧护鐗岀殑鏈夋晥鏈燂紝閮ㄥ垎骞冲彴鍙兘娌℃湁"},"refreshToken":{"type":"string","description":"鍒锋柊浠ょ墝锛岄儴鍒嗗钩鍙板彲鑳芥病鏈?},"openId":{"type":"string","description":"鐢ㄦ埛鐨?open id"},"userName":{"type":"string","description":"鎺堟潈鐨勭涓夋柟璐﹀彿"},"nickName":{"type":"string","description":"鎺堟潈鐨勭涓夋柟鏄电О"},"email":{"type":"string","description":"鎺堟潈鐨勭涓夋柟閭"},"avatar":{"type":"string","description":"鎺堟潈鐨勭涓夋柟澶村儚鍦板潃"},"accessCode":{"type":"string","description":"骞冲彴鐨勬巿鏉冧俊鎭紝閮ㄥ垎骞冲彴鍙兘娌℃湁"},"unionId":{"type":"string","description":"鐢ㄦ埛鐨?unionid"},"scope":{"type":"string","description":"鎺堜簣鐨勬潈闄愶紝閮ㄥ垎骞冲彴鍙兘娌℃湁"},"tokenType":{"type":"string","description":"涓埆骞冲彴鐨勬巿鏉冧俊鎭紝閮ㄥ垎骞冲彴鍙兘娌℃湁"},"idToken":{"type":"string","description":"id token锛岄儴鍒嗗钩鍙板彲鑳芥病鏈?},"macAlgorithm":{"type":"string","description":"灏忕背骞冲彴鐢ㄦ埛鐨勯檮甯﹀睘鎬э紝閮ㄥ垎骞冲彴鍙兘娌℃湁"},"macKey":{"type":"string","description":"灏忕背骞冲彴鐢ㄦ埛鐨勯檮甯﹀睘鎬э紝閮ㄥ垎骞冲彴鍙兘娌℃湁"},"code":{"type":"string","description":"鐢ㄦ埛鐨勬巿鏉僣ode锛岄儴鍒嗗钩鍙板彲鑳芥病鏈?},"oauthToken":{"type":"string","description":"Twitter骞冲彴鐢ㄦ埛鐨勯檮甯﹀睘鎬э紝閮ㄥ垎骞冲彴鍙兘娌℃湁"},"oauthTokenSecret":{"type":"string","description":"Twitter骞冲彴鐢ㄦ埛鐨勯檮甯﹀睘鎬э紝閮ㄥ垎骞冲彴鍙兘娌℃湁"},"createTime":{"type":"string","format":"date-time","description":"鍒涘缓鏃堕棿"}}},"RSysRoleVo":{"type":"object","description":"鍝嶅簲淇℃伅涓讳綋","properties":{"code":{"type":"integer","format":"int32","description":"鍝嶅簲鐘舵€佺爜"},"msg":{"type":"string","description":"鍝嶅簲鎻愮ず淇℃伅"},"data":{"$ref":"#/components/schemas/SysRoleVo","description":"鍝嶅簲涓氬姟鏁版嵁"}}},"RListSysRoleVo":{"type":"object","description":"鍝嶅簲淇℃伅涓讳綋","properties":{"code":{"type":"integer","format":"int32","description":"鍝嶅簲鐘舵€佺爜"},"msg":{"type":"string","description":"鍝嶅簲鎻愮ず淇℃伅"},"data":{"type":"array","description":"鍝嶅簲涓氬姟鏁版嵁","items":{"$ref":"#/components/schemas/SysRoleVo"}}}},"PageResultSysRoleVo":{"type":"object","description":"琛ㄦ牸鍒嗛〉鏁版嵁瀵硅薄","properties":{"total":{"type":"integer","format":"int64","description":"鎬昏褰曟暟"},"rows":{"type":"array","description":"鍒楄〃鏁版嵁","items":{"$ref":"#/components/schemas/SysRoleVo"}}}},"RPageResultSysRoleVo":{"type":"object","description":"鍝嶅簲淇℃伅涓讳綋","properties":{"code":{"type":"integer","format":"int32","description":"鍝嶅簲鐘舵€佺爜"},"msg":{"type":"string","description":"鍝嶅簲鎻愮ず淇℃伅"},"data":{"$ref":"#/components/schemas/PageResultSysRoleVo","description":"鍝嶅簲涓氬姟鏁版嵁"}}},"DeptTreeSelectVo":{"type":"object","description":"瑙掕壊閮ㄩ棬鍒楄〃鏍戜俊鎭?,"properties":{"checkedKeys":{"type":"array","description":"閫変腑閮ㄩ棬鍒楄〃","items":{"type":"integer","format":"int64"}},"depts":{"type":"array","description":"涓嬫媺鏍戠粨鏋勫垪琛?,"items":{"$ref":"#/components/schemas/TreeString"}}}},"RDeptTreeSelectVo":{"type":"object","description":"鍝嶅簲淇℃伅涓讳綋","properties":{"code":{"type":"integer","format":"int32","description":"鍝嶅簲鐘舵€佺爜"},"msg":{"type":"string","description":"鍝嶅簲鎻愮ず淇℃伅"},"data":{"$ref":"#/components/schemas/DeptTreeSelectVo","description":"鍝嶅簲涓氬姟鏁版嵁"}}},"RSysPostVo":{"type":"object","description":"鍝嶅簲淇℃伅涓讳綋","properties":{"code":{"type":"integer","format":"int32","description":"鍝嶅簲鐘舵€佺爜"},"msg":{"type":"string","description":"鍝嶅簲鎻愮ず淇℃伅"},"data":{"$ref":"#/components/schemas/SysPostVo","description":"鍝嶅簲涓氬姟鏁版嵁"}}},"RListSysPostVo":{"type":"object","description":"鍝嶅簲淇℃伅涓讳綋","properties":{"code":{"type":"integer","format":"int32","description":"鍝嶅簲鐘舵€佺爜"},"msg":{"type":"string","description":"鍝嶅簲鎻愮ず淇℃伅"},"data":{"type":"array","description":"鍝嶅簲涓氬姟鏁版嵁","items":{"$ref":"#/components/schemas/SysPostVo"}}}},"PageResultSysPostVo":{"type":"object","description":"琛ㄦ牸鍒嗛〉鏁版嵁瀵硅薄","properties":{"total":{"type":"integer","format":"int64","description":"鎬昏褰曟暟"},"rows":{"type":"array","description":"鍒楄〃鏁版嵁","items":{"$ref":"#/components/schemas/SysPostVo"}}}},"RPageResultSysPostVo":{"type":"object","description":"鍝嶅簲淇℃伅涓讳綋","properties":{"code":{"type":"integer","format":"int32","description":"鍝嶅簲鐘舵€佺爜"},"msg":{"type":"string","description":"鍝嶅簲鎻愮ず淇℃伅"},"data":{"$ref":"#/components/schemas/PageResultSysPostVo","description":"鍝嶅簲涓氬姟鏁版嵁"}}},"RSysNoticeVo":{"type":"object","description":"鍝嶅簲淇℃伅涓讳綋","properties":{"code":{"type":"integer","format":"int32","description":"鍝嶅簲鐘舵€佺爜"},"msg":{"type":"string","description":"鍝嶅簲鎻愮ず淇℃伅"},"data":{"$ref":"#/components/schemas/SysNoticeVo","description":"鍝嶅簲涓氬姟鏁版嵁"}}},"SysNoticeVo":{"type":"object","description":"閫氱煡鍏憡瑙嗗浘瀵硅薄 sys_notice","properties":{"noticeId":{"type":"integer","format":"int64","description":"鍏憡ID"},"noticeTitle":{"type":"string","description":"鍏憡鏍囬"},"noticeType":{"type":"string","description":"鍏憡绫诲瀷锛?閫氱煡 2鍏憡锛?},"noticeContent":{"type":"string","description":"鍏憡鍐呭"},"status":{"type":"string","description":"鍏憡鐘舵€侊紙0姝e父 1鍏抽棴锛?},"remark":{"type":"string","description":"澶囨敞"},"createBy":{"type":"integer","format":"int64","description":"鍒涘缓鑰?},"createByName":{"type":"string","description":"鍒涘缓浜哄悕绉?},"createTime":{"type":"string","format":"date-time","description":"鍒涘缓鏃堕棿"}}},"PageResultSysNoticeVo":{"type":"object","description":"琛ㄦ牸鍒嗛〉鏁版嵁瀵硅薄","properties":{"total":{"type":"integer","format":"int64","description":"鎬昏褰曟暟"},"rows":{"type":"array","description":"鍒楄〃鏁版嵁","items":{"$ref":"#/components/schemas/SysNoticeVo"}}}},"RPageResultSysNoticeVo":{"type":"object","description":"鍝嶅簲淇℃伅涓讳綋","properties":{"code":{"type":"integer","format":"int32","description":"鍝嶅簲鐘舵€佺爜"},"msg":{"type":"string","description":"鍝嶅簲鎻愮ず淇℃伅"},"data":{"$ref":"#/components/schemas/PageResultSysNoticeVo","description":"鍝嶅簲涓氬姟鏁版嵁"}}},"RSysMenuVo":{"type":"object","description":"鍝嶅簲淇℃伅涓讳綋","properties":{"code":{"type":"integer","format":"int32","description":"鍝嶅簲鐘舵€佺爜"},"msg":{"type":"string","description":"鍝嶅簲鎻愮ず淇℃伅"},"data":{"$ref":"#/components/schemas/SysMenuVo","description":"鍝嶅簲涓氬姟鏁版嵁"}}},"SysMenuVo":{"type":"object","description":"鑿滃崟鏉冮檺瑙嗗浘瀵硅薄 sys_menu","properties":{"menuId":{"type":"integer","format":"int64","description":"鑿滃崟ID"},"menuName":{"type":"string","description":"鑿滃崟鍚嶇О"},"parentId":{"type":"integer","format":"int64","description":"鐖惰彍鍗旾D"},"orderNum":{"type":"integer","format":"int32","description":"鏄剧ず椤哄簭"},"path":{"type":"string","description":"璺敱鍦板潃"},"component":{"type":"string","description":"缁勪欢璺緞"},"queryParam":{"type":"string","description":"璺敱鍙傛暟"},"isFrame":{"type":"string","description":"鏄惁涓哄閾撅紙Y鏄?N鍚︼級"},"isCache":{"type":"string","description":"鏄惁缂撳瓨锛圷缂撳瓨 N涓嶇紦瀛橈級"},"menuType":{"type":"string","description":"鑿滃崟绫诲瀷锛圡鐩綍 C鑿滃崟 F鎸夐挳锛?},"visible":{"type":"string","description":"鏄剧ず鐘舵€侊紙0鏄剧ず 1闅愯棌锛?},"status":{"type":"string","description":"鑿滃崟鐘舵€侊紙0姝e父 1鍋滅敤锛?},"perms":{"type":"string","description":"鏉冮檺鏍囪瘑"},"icon":{"type":"string","description":"鑿滃崟鍥炬爣"},"activeMenu":{"type":"string","description":"婵€娲昏彍鍗曡矾寰?},"ext":{"type":"string","description":"鎵╁睍瀛楁"},"createDept":{"type":"integer","format":"int64","description":"鍒涘缓閮ㄩ棬"},"remark":{"type":"string","description":"澶囨敞"},"createTime":{"type":"string","format":"date-time","description":"鍒涘缓鏃堕棿"},"children":{"type":"array","description":"瀛愯彍鍗?,"items":{"$ref":"#/components/schemas/SysMenuVo"}}}},"MenuTreeSelectVo":{"type":"object","description":"瑙掕壊鑿滃崟鍒楄〃鏍戜俊鎭?,"properties":{"checkedKeys":{"type":"array","description":"閫変腑鑿滃崟鍒楄〃","items":{"type":"integer","format":"int64"}},"menus":{"type":"array","description":"鑿滃崟涓嬫媺鏍戠粨鏋勫垪琛?,"items":{"$ref":"#/components/schemas/TreeString"}}}},"RMenuTreeSelectVo":{"type":"object","description":"鍝嶅簲淇℃伅涓讳綋","properties":{"code":{"type":"integer","format":"int32","description":"鍝嶅簲鐘舵€佺爜"},"msg":{"type":"string","description":"鍝嶅簲鎻愮ず淇℃伅"},"data":{"$ref":"#/components/schemas/MenuTreeSelectVo","description":"鍝嶅簲涓氬姟鏁版嵁"}}},"RListSysMenuVo":{"type":"object","description":"鍝嶅簲淇℃伅涓讳綋","properties":{"code":{"type":"integer","format":"int32","description":"鍝嶅簲鐘舵€佺爜"},"msg":{"type":"string","description":"鍝嶅簲鎻愮ず淇℃伅"},"data":{"type":"array","description":"鍝嶅簲涓氬姟鏁版嵁","items":{"$ref":"#/components/schemas/SysMenuVo"}}}},"MetaVo":{"type":"object","description":"璺敱鏄剧ず淇℃伅","properties":{"title":{"type":"string","description":"璁剧疆璇ヨ矾鐢卞湪渚ц竟鏍忓拰闈㈠寘灞戜腑灞曠ず鐨勫悕瀛?},"icon":{"type":"string","description":"璁剧疆璇ヨ矾鐢辩殑鍥炬爣锛屽搴旇矾寰剆rc/assets/icons/svg"},"noCache":{"type":"boolean","description":"璁剧疆涓簍rue锛屽垯涓嶄細琚?缂撳瓨"},"link":{"type":"string","description":"鍐呴摼鍦板潃锛坔ttp(s)://寮€澶达級"},"activeMenu":{"type":"string","description":"婵€娲昏彍鍗?}}},"RListRouterVo":{"type":"object","description":"鍝嶅簲淇℃伅涓讳綋","properties":{"code":{"type":"integer","format":"int32","description":"鍝嶅簲鐘舵€佺爜"},"msg":{"type":"string","description":"鍝嶅簲鎻愮ず淇℃伅"},"data":{"type":"array","description":"鍝嶅簲涓氬姟鏁版嵁","items":{"$ref":"#/components/schemas/RouterVo"}}}},"RouterVo":{"type":"object","description":"璺敱閰嶇疆淇℃伅","properties":{"name":{"type":"string","description":"璺敱鍚嶅瓧"},"path":{"type":"string","description":"璺敱鍦板潃"},"hidden":{"type":"boolean","description":"鏄惁闅愯棌璺敱锛屽綋璁剧疆 true 鐨勬椂鍊欒璺敱涓嶄細鍐嶄晶杈规爮鍑虹幇"},"redirect":{"type":"string","description":"閲嶅畾鍚戝湴鍧€锛屽綋璁剧疆 noRedirect 鐨勬椂鍊欒璺敱鍦ㄩ潰鍖呭睉瀵艰埅涓笉鍙鐐瑰嚮"},"component":{"type":"string","description":"缁勪欢鍦板潃"},"query":{"type":"string","description":"璺敱鍙傛暟锛氬 {\"id\": 1, \"name\": \"ry\"}"},"ext":{"type":"string","description":"鎵╁睍瀛楁"},"alwaysShow":{"type":"boolean","description":"褰撲綘涓€涓矾鐢变笅闈㈢殑 children 澹版槑鐨勮矾鐢卞ぇ浜?涓椂锛岃嚜鍔ㄤ細鍙樻垚宓屽鐨勬ā寮?-濡傜粍浠堕〉闈?},"meta":{"$ref":"#/components/schemas/MetaVo","description":"鍏朵粬鍏冪礌"},"children":{"type":"array","description":"瀛愯矾鐢?,"items":{"$ref":"#/components/schemas/RouterVo"}}}},"RSysDictTypeVo":{"type":"object","description":"鍝嶅簲淇℃伅涓讳綋","properties":{"code":{"type":"integer","format":"int32","description":"鍝嶅簲鐘舵€佺爜"},"msg":{"type":"string","description":"鍝嶅簲鎻愮ず淇℃伅"},"data":{"$ref":"#/components/schemas/SysDictTypeVo","description":"鍝嶅簲涓氬姟鏁版嵁"}}},"SysDictTypeVo":{"type":"object","description":"瀛楀吀绫诲瀷瑙嗗浘瀵硅薄 sys_dict_type","properties":{"dictId":{"type":"integer","format":"int64","description":"瀛楀吀涓婚敭"},"dictName":{"type":"string","description":"瀛楀吀鍚嶇О"},"dictType":{"type":"string","description":"瀛楀吀绫诲瀷"},"remark":{"type":"string","description":"澶囨敞"},"createTime":{"type":"string","format":"date-time","description":"鍒涘缓鏃堕棿"}}},"RListSysDictTypeVo":{"type":"object","description":"鍝嶅簲淇℃伅涓讳綋","properties":{"code":{"type":"integer","format":"int32","description":"鍝嶅簲鐘舵€佺爜"},"msg":{"type":"string","description":"鍝嶅簲鎻愮ず淇℃伅"},"data":{"type":"array","description":"鍝嶅簲涓氬姟鏁版嵁","items":{"$ref":"#/components/schemas/SysDictTypeVo"}}}},"PageResultSysDictTypeVo":{"type":"object","description":"琛ㄦ牸鍒嗛〉鏁版嵁瀵硅薄","properties":{"total":{"type":"integer","format":"int64","description":"鎬昏褰曟暟"},"rows":{"type":"array","description":"鍒楄〃鏁版嵁","items":{"$ref":"#/components/schemas/SysDictTypeVo"}}}},"RPageResultSysDictTypeVo":{"type":"object","description":"鍝嶅簲淇℃伅涓讳綋","properties":{"code":{"type":"integer","format":"int32","description":"鍝嶅簲鐘舵€佺爜"},"msg":{"type":"string","description":"鍝嶅簲鎻愮ず淇℃伅"},"data":{"$ref":"#/components/schemas/PageResultSysDictTypeVo","description":"鍝嶅簲涓氬姟鏁版嵁"}}},"RSysDictDataVo":{"type":"object","description":"鍝嶅簲淇℃伅涓讳綋","properties":{"code":{"type":"integer","format":"int32","description":"鍝嶅簲鐘舵€佺爜"},"msg":{"type":"string","description":"鍝嶅簲鎻愮ず淇℃伅"},"data":{"$ref":"#/components/schemas/SysDictDataVo","description":"鍝嶅簲涓氬姟鏁版嵁"}}},"SysDictDataVo":{"type":"object","description":"瀛楀吀鏁版嵁瑙嗗浘瀵硅薄 sys_dict_data","properties":{"dictCode":{"type":"integer","format":"int64","description":"瀛楀吀缂栫爜"},"dictSort":{"type":"integer","format":"int32","description":"瀛楀吀鎺掑簭"},"dictLabel":{"type":"string","description":"瀛楀吀鏍囩"},"dictValue":{"type":"string","description":"瀛楀吀閿€?},"dictType":{"type":"string","description":"瀛楀吀绫诲瀷"},"cssClass":{"type":"string","description":"鏍峰紡灞炴€э紙鍏朵粬鏍峰紡鎵╁睍锛?},"listClass":{"type":"string","description":"琛ㄦ牸鍥炴樉鏍峰紡"},"isDefault":{"type":"string","description":"鏄惁榛樿锛圷鏄?N鍚︼級"},"remark":{"type":"string","description":"澶囨敞"},"createTime":{"type":"string","format":"date-time","description":"鍒涘缓鏃堕棿"}}},"RListSysDictDataVo":{"type":"object","description":"鍝嶅簲淇℃伅涓讳綋","properties":{"code":{"type":"integer","format":"int32","description":"鍝嶅簲鐘舵€佺爜"},"msg":{"type":"string","description":"鍝嶅簲鎻愮ず淇℃伅"},"data":{"type":"array","description":"鍝嶅簲涓氬姟鏁版嵁","items":{"$ref":"#/components/schemas/SysDictDataVo"}}}},"PageResultSysDictDataVo":{"type":"object","description":"琛ㄦ牸鍒嗛〉鏁版嵁瀵硅薄","properties":{"total":{"type":"integer","format":"int64","description":"鎬昏褰曟暟"},"rows":{"type":"array","description":"鍒楄〃鏁版嵁","items":{"$ref":"#/components/schemas/SysDictDataVo"}}}},"RPageResultSysDictDataVo":{"type":"object","description":"鍝嶅簲淇℃伅涓讳綋","properties":{"code":{"type":"integer","format":"int32","description":"鍝嶅簲鐘舵€佺爜"},"msg":{"type":"string","description":"鍝嶅簲鎻愮ず淇℃伅"},"data":{"$ref":"#/components/schemas/PageResultSysDictDataVo","description":"鍝嶅簲涓氬姟鏁版嵁"}}},"RSysDeptVo":{"type":"object","description":"鍝嶅簲淇℃伅涓讳綋","properties":{"code":{"type":"integer","format":"int32","description":"鍝嶅簲鐘舵€佺爜"},"msg":{"type":"string","description":"鍝嶅簲鎻愮ず淇℃伅"},"data":{"$ref":"#/components/schemas/SysDeptVo","description":"鍝嶅簲涓氬姟鏁版嵁"}}},"SysDeptVo":{"type":"object","description":"閮ㄩ棬瑙嗗浘瀵硅薄 sys_dept","properties":{"deptId":{"type":"integer","format":"int64","description":"閮ㄩ棬id"},"parentId":{"type":"integer","format":"int64","description":"鐖堕儴闂╥d"},"parentName":{"type":"string","description":"鐖堕儴闂ㄥ悕绉?},"ancestors":{"type":"string","description":"绁栫骇鍒楄〃"},"deptName":{"type":"string","description":"閮ㄩ棬鍚嶇О"},"deptCategory":{"type":"string","description":"閮ㄩ棬绫诲埆缂栫爜"},"orderNum":{"type":"integer","format":"int32","description":"鏄剧ず椤哄簭"},"leader":{"type":"integer","format":"int64","description":"璐熻矗浜篒D"},"leaderName":{"type":"string","description":"璐熻矗浜?},"phone":{"type":"string","description":"鑱旂郴鐢佃瘽"},"email":{"type":"string","description":"閭"},"status":{"type":"string","description":"閮ㄩ棬鐘舵€侊紙0姝e父 1鍋滅敤锛?},"createTime":{"type":"string","format":"date-time","description":"鍒涘缓鏃堕棿"},"children":{"type":"array","description":"瀛愰儴闂?,"items":{"$ref":"#/components/schemas/SysDeptVo"}}}},"RListSysDeptVo":{"type":"object","description":"鍝嶅簲淇℃伅涓讳綋","properties":{"code":{"type":"integer","format":"int32","description":"鍝嶅簲鐘舵€佺爜"},"msg":{"type":"string","description":"鍝嶅簲鎻愮ず淇℃伅"},"data":{"type":"array","description":"鍝嶅簲涓氬姟鏁版嵁","items":{"$ref":"#/components/schemas/SysDeptVo"}}}},"RSysConfigVo":{"type":"object","description":"鍝嶅簲淇℃伅涓讳綋","properties":{"code":{"type":"integer","format":"int32","description":"鍝嶅簲鐘舵€佺爜"},"msg":{"type":"string","description":"鍝嶅簲鎻愮ず淇℃伅"},"data":{"$ref":"#/components/schemas/SysConfigVo","description":"鍝嶅簲涓氬姟鏁版嵁"}}},"SysConfigVo":{"type":"object","description":"鍙傛暟閰嶇疆瑙嗗浘瀵硅薄 sys_config","properties":{"configId":{"type":"integer","format":"int64","description":"鍙傛暟涓婚敭"},"configName":{"type":"string","description":"鍙傛暟鍚嶇О"},"configKey":{"type":"string","description":"鍙傛暟閿悕"},"configValue":{"type":"string","description":"鍙傛暟閿€?},"configType":{"type":"string","description":"绯荤粺鍐呯疆锛圷鏄?N鍚︼級"},"remark":{"type":"string","description":"澶囨敞"},"createTime":{"type":"string","format":"date-time","description":"鍒涘缓鏃堕棿"}}},"PageResultSysConfigVo":{"type":"object","description":"琛ㄦ牸鍒嗛〉鏁版嵁瀵硅薄","properties":{"total":{"type":"integer","format":"int64","description":"鎬昏褰曟暟"},"rows":{"type":"array","description":"鍒楄〃鏁版嵁","items":{"$ref":"#/components/schemas/SysConfigVo"}}}},"RPageResultSysConfigVo":{"type":"object","description":"鍝嶅簲淇℃伅涓讳綋","properties":{"code":{"type":"integer","format":"int32","description":"鍝嶅簲鐘舵€佺爜"},"msg":{"type":"string","description":"鍝嶅簲鎻愮ず淇℃伅"},"data":{"$ref":"#/components/schemas/PageResultSysConfigVo","description":"鍝嶅簲涓氬姟鏁版嵁"}}},"RSysClientVo":{"type":"object","description":"鍝嶅簲淇℃伅涓讳綋","properties":{"code":{"type":"integer","format":"int32","description":"鍝嶅簲鐘舵€佺爜"},"msg":{"type":"string","description":"鍝嶅簲鎻愮ず淇℃伅"},"data":{"$ref":"#/components/schemas/SysClientVo","description":"鍝嶅簲涓氬姟鏁版嵁"}}},"SysClientVo":{"type":"object","description":"鎺堟潈绠$悊瑙嗗浘瀵硅薄 sys_client","properties":{"id":{"type":"integer","format":"int64","description":"id"},"clientId":{"type":"string","description":"瀹㈡埛绔痠d"},"clientKey":{"type":"string","description":"瀹㈡埛绔痥ey"},"clientSecret":{"type":"string","description":"瀹㈡埛绔閽?},"grantTypeList":{"type":"array","description":"鎺堟潈绫诲瀷","items":{"type":"string"}},"grantType":{"type":"string","description":"鎺堟潈绫诲瀷"},"deviceType":{"type":"string","description":"璁惧绫诲瀷"},"accessPath":{"type":"string","description":"鍏佽璁块棶璺緞"},"accessPathList":{"type":"array","description":"鍏佽璁块棶璺緞鍒楄〃","items":{"type":"string"}},"ipWhitelist":{"type":"string","description":"IP鐧藉悕鍗?},"ipWhitelistList":{"type":"array","description":"IP鐧藉悕鍗曞垪琛?,"items":{"type":"string"}},"activeTimeout":{"type":"integer","format":"int64","description":"token娲昏穬瓒呮椂鏃堕棿"},"timeout":{"type":"integer","format":"int64","description":"token鍥哄畾瓒呮椂鏃堕棿"},"status":{"type":"string","description":"鐘舵€侊紙0姝e父 1鍋滅敤锛?}}},"PageResultSysClientVo":{"type":"object","description":"琛ㄦ牸鍒嗛〉鏁版嵁瀵硅薄","properties":{"total":{"type":"integer","format":"int64","description":"鎬昏褰曟暟"},"rows":{"type":"array","description":"鍒楄〃鏁版嵁","items":{"$ref":"#/components/schemas/SysClientVo"}}}},"RPageResultSysClientVo":{"type":"object","description":"鍝嶅簲淇℃伅涓讳綋","properties":{"code":{"type":"integer","format":"int32","description":"鍝嶅簲鐘舵€佺爜"},"msg":{"type":"string","description":"鍝嶅簲鎻愮ず淇℃伅"},"data":{"$ref":"#/components/schemas/PageResultSysClientVo","description":"鍝嶅簲涓氬姟鏁版嵁"}}},"SysOssBo":{"type":"object","description":"OSS瀵硅薄瀛樺偍鍒嗛〉鏌ヨ瀵硅薄 sys_oss","properties":{"ossId":{"type":"integer","format":"int64","description":"ossId"},"fileName":{"type":"string","description":"鏂囦欢鍚?},"originalName":{"type":"string","description":"鍘熷悕"},"fileSuffix":{"type":"string","description":"鏂囦欢鍚庣紑鍚?},"url":{"type":"string","description":"URL鍦板潃"},"ext1":{"type":"string","description":"鎵╁睍瀛楁"},"service":{"type":"string","description":"鏈嶅姟鍟?},"createBy":{"type":"integer","format":"int64","description":"鍒涘缓鑰?},"params":{"type":"object","additionalProperties":{},"description":"璇锋眰鍙傛暟"}}},"PageResultSysOssVo":{"type":"object","description":"琛ㄦ牸鍒嗛〉鏁版嵁瀵硅薄","properties":{"total":{"type":"integer","format":"int64","description":"鎬昏褰曟暟"},"rows":{"type":"array","description":"鍒楄〃鏁版嵁","items":{"$ref":"#/components/schemas/SysOssVo"}}}},"RPageResultSysOssVo":{"type":"object","description":"鍝嶅簲淇℃伅涓讳綋","properties":{"code":{"type":"integer","format":"int32","description":"鍝嶅簲鐘舵€佺爜"},"msg":{"type":"string","description":"鍝嶅簲鎻愮ず淇℃伅"},"data":{"$ref":"#/components/schemas/PageResultSysOssVo","description":"鍝嶅簲涓氬姟鏁版嵁"}}},"SysOssVo":{"type":"object","description":"OSS瀵硅薄瀛樺偍瑙嗗浘瀵硅薄 sys_oss","properties":{"ossId":{"type":"integer","format":"int64","description":"瀵硅薄瀛樺偍涓婚敭"},"fileName":{"type":"string","description":"鏂囦欢鍚?},"originalName":{"type":"string","description":"鍘熷悕"},"fileSuffix":{"type":"string","description":"鏂囦欢鍚庣紑鍚?},"url":{"type":"string","description":"URL鍦板潃"},"ext1":{"type":"string","description":"鎵╁睍瀛楁"},"createTime":{"type":"string","format":"date-time","description":"鍒涘缓鏃堕棿"},"createBy":{"type":"integer","format":"int64","description":"涓婁紶浜?},"createByName":{"type":"string","description":"涓婁紶浜哄悕绉?},"service":{"type":"string","description":"鏈嶅姟鍟?}}},"RListSysOssVo":{"type":"object","description":"鍝嶅簲淇℃伅涓讳綋","properties":{"code":{"type":"integer","format":"int32","description":"鍝嶅簲鐘舵€佺爜"},"msg":{"type":"string","description":"鍝嶅簲鎻愮ず淇℃伅"},"data":{"type":"array","description":"鍝嶅簲涓氬姟鏁版嵁","items":{"$ref":"#/components/schemas/SysOssVo"}}}},"RSysOssConfigVo":{"type":"object","description":"鍝嶅簲淇℃伅涓讳綋","properties":{"code":{"type":"integer","format":"int32","description":"鍝嶅簲鐘舵€佺爜"},"msg":{"type":"string","description":"鍝嶅簲鎻愮ず淇℃伅"},"data":{"$ref":"#/components/schemas/SysOssConfigVo","description":"鍝嶅簲涓氬姟鏁版嵁"}}},"SysOssConfigVo":{"type":"object","description":"瀵硅薄瀛樺偍閰嶇疆瑙嗗浘瀵硅薄 sys_oss_config","properties":{"ossConfigId":{"type":"integer","format":"int64","description":"涓婚敭"},"configKey":{"type":"string","description":"閰嶇疆key"},"accessKey":{"type":"string","description":"accessKey"},"secretKey":{"type":"string","description":"绉橀挜"},"bucketName":{"type":"string","description":"妗跺悕绉?},"prefix":{"type":"string","description":"鍓嶇紑"},"endpoint":{"type":"string","description":"璁块棶绔欑偣"},"domainUrl":{"type":"string","description":"鑷畾涔夊煙鍚?},"isHttps":{"type":"string","description":"鏄惁https锛圷=鏄?N=鍚︼級"},"region":{"type":"string","description":"鍩?},"status":{"type":"string","description":"鏄惁榛樿锛圷=鏄?N=鍚︼級"},"ext1":{"type":"string","description":"鎵╁睍瀛楁"},"remark":{"type":"string","description":"澶囨敞"},"accessPolicy":{"type":"string","description":"妗舵潈闄愮被鍨?0private 1public 2custom)"}}},"PageResultSysOssConfigVo":{"type":"object","description":"琛ㄦ牸鍒嗛〉鏁版嵁瀵硅薄","properties":{"total":{"type":"integer","format":"int64","description":"鎬昏褰曟暟"},"rows":{"type":"array","description":"鍒楄〃鏁版嵁","items":{"$ref":"#/components/schemas/SysOssConfigVo"}}}},"RPageResultSysOssConfigVo":{"type":"object","description":"鍝嶅簲淇℃伅涓讳綋","properties":{"code":{"type":"integer","format":"int32","description":"鍝嶅簲鐘舵€佺爜"},"msg":{"type":"string","description":"鍝嶅簲鎻愮ず淇℃伅"},"data":{"$ref":"#/components/schemas/PageResultSysOssConfigVo","description":"鍝嶅簲涓氬姟鏁版嵁"}}},"SseEmitter":{"type":"object","properties":{"timeout":{"type":"integer","format":"int64"}}},"RSysMessageBoxVo":{"type":"object","description":"鍝嶅簲淇℃伅涓讳綋","properties":{"code":{"type":"integer","format":"int32","description":"鍝嶅簲鐘舵€佺爜"},"msg":{"type":"string","description":"鍝嶅簲鎻愮ず淇℃伅"},"data":{"$ref":"#/components/schemas/SysMessageBoxVo","description":"鍝嶅簲涓氬姟鏁版嵁"}}},"SysMessageBoxVo":{"type":"object","description":"娑堟伅鐩掑瓙瑙嗗浘瀵硅薄","properties":{"systemList":{"type":"array","description":"绯荤粺娑堟伅","items":{"$ref":"#/components/schemas/SysMessageVo"}},"noticeList":{"type":"array","description":"閫氱煡鍏憡娑堟伅","items":{"$ref":"#/components/schemas/SysMessageVo"}},"workflowList":{"type":"array","description":"宸ヤ綔娴佹秷鎭?,"items":{"$ref":"#/components/schemas/SysMessageVo"}}}},"SysMessageVo":{"type":"object","description":"娑堟伅璁板綍瑙嗗浘瀵硅薄 sys_message","properties":{"messageId":{"type":"integer","format":"int64","description":"娑堟伅ID"},"category":{"type":"string","description":"娑堟伅鍒嗙粍"},"type":{"type":"string","description":"娑堟伅绫诲瀷"},"source":{"type":"string","description":"娑堟伅鏉ユ簮"},"title":{"type":"string","description":"鏍囬"},"message":{"type":"string","description":"鎽樿娑堟伅"},"content":{"type":"string","description":"璇︾粏鍐呭"},"data":{"description":"鎵╁睍鏁版嵁"},"path":{"type":"string","description":"鍓嶇璺宠浆璺緞"},"createTime":{"type":"string","format":"date-time","description":"鍒涘缓鏃堕棿"}}},"PageResultSysOperLogVo":{"type":"object","description":"琛ㄦ牸鍒嗛〉鏁版嵁瀵硅薄","properties":{"total":{"type":"integer","format":"int64","description":"鎬昏褰曟暟"},"rows":{"type":"array","description":"鍒楄〃鏁版嵁","items":{"$ref":"#/components/schemas/SysOperLogVo"}}}},"RPageResultSysOperLogVo":{"type":"object","description":"鍝嶅簲淇℃伅涓讳綋","properties":{"code":{"type":"integer","format":"int32","description":"鍝嶅簲鐘舵€佺爜"},"msg":{"type":"string","description":"鍝嶅簲鎻愮ず淇℃伅"},"data":{"$ref":"#/components/schemas/PageResultSysOperLogVo","description":"鍝嶅簲涓氬姟鏁版嵁"}}},"SysOperLogVo":{"type":"object","description":"鎿嶄綔鏃ュ織璁板綍瑙嗗浘瀵硅薄 sys_oper_log","properties":{"operId":{"type":"integer","format":"int64","description":"鏃ュ織涓婚敭"},"title":{"type":"string","description":"妯″潡鏍囬"},"businessType":{"type":"integer","format":"int32","description":"涓氬姟绫诲瀷锛?鍏跺畠 1鏂板 2淇敼 3鍒犻櫎锛?},"businessTypes":{"type":"array","description":"涓氬姟绫诲瀷鏁扮粍","items":{"type":"integer","format":"int32"}},"method":{"type":"string","description":"鏂规硶鍚嶇О"},"requestMethod":{"type":"string","description":"璇锋眰鏂瑰紡"},"operatorType":{"type":"integer","format":"int32","description":"鎿嶄綔绫诲埆锛?鍏跺畠 1鍚庡彴鐢ㄦ埛 2鎵嬫満绔敤鎴凤級"},"operName":{"type":"string","description":"鎿嶄綔浜哄憳"},"userId":{"type":"integer","format":"int64","description":"鎿嶄綔鐢ㄦ埛ID"},"deptId":{"type":"integer","format":"int64","description":"鎿嶄綔閮ㄩ棬ID"},"deptName":{"type":"string","description":"閮ㄩ棬鍚嶇О"},"clientKey":{"type":"string","description":"瀹㈡埛绔?},"deviceType":{"type":"string","description":"璁惧绫诲瀷"},"browser":{"type":"string","description":"娴忚鍣ㄧ被鍨?},"os":{"type":"string","description":"鎿嶄綔绯荤粺"},"operUrl":{"type":"string","description":"璇锋眰URL"},"operIp":{"type":"string","description":"涓绘満鍦板潃"},"operLocation":{"type":"string","description":"鎿嶄綔鍦扮偣"},"operParam":{"type":"string","description":"璇锋眰鍙傛暟"},"jsonResult":{"type":"string","description":"杩斿洖鍙傛暟"},"status":{"type":"integer","format":"int32","description":"鎿嶄綔鐘舵€侊紙0姝e父 1寮傚父锛?},"errorMsg":{"type":"string","description":"閿欒娑堟伅"},"operTime":{"type":"string","format":"date-time","description":"鎿嶄綔鏃堕棿"},"costTime":{"type":"integer","format":"int64","description":"娑堣€楁椂闂?}}},"PageResultSysUserOnline":{"type":"object","description":"琛ㄦ牸鍒嗛〉鏁版嵁瀵硅薄","properties":{"total":{"type":"integer","format":"int64","description":"鎬昏褰曟暟"},"rows":{"type":"array","description":"鍒楄〃鏁版嵁","items":{"$ref":"#/components/schemas/SysUserOnline"}}}},"RPageResultSysUserOnline":{"type":"object","description":"鍝嶅簲淇℃伅涓讳綋","properties":{"code":{"type":"integer","format":"int32","description":"鍝嶅簲鐘舵€佺爜"},"msg":{"type":"string","description":"鍝嶅簲鎻愮ず淇℃伅"},"data":{"$ref":"#/components/schemas/PageResultSysUserOnline","description":"鍝嶅簲涓氬姟鏁版嵁"}}},"SysUserOnline":{"type":"object","description":"褰撳墠鍦ㄧ嚎浼氳瘽","properties":{"tokenId":{"type":"string","description":"浼氳瘽缂栧彿"},"deptName":{"type":"string","description":"閮ㄩ棬鍚嶇О"},"userName":{"type":"string","description":"鐢ㄦ埛璐﹀彿"},"clientKey":{"type":"string","description":"瀹㈡埛绔?},"deviceType":{"type":"string","description":"璁惧绫诲瀷"},"ipaddr":{"type":"string","description":"鐧诲綍IP鍦板潃"},"loginLocation":{"type":"string","description":"鐧诲綍鍦板潃"},"browser":{"type":"string","description":"娴忚鍣ㄧ被鍨?},"os":{"type":"string","description":"鎿嶄綔绯荤粺"},"loginTime":{"type":"integer","format":"int64","description":"鐧诲綍鏃堕棿"}}},"PageResultSysLoginInfoVo":{"type":"object","description":"琛ㄦ牸鍒嗛〉鏁版嵁瀵硅薄","properties":{"total":{"type":"integer","format":"int64","description":"鎬昏褰曟暟"},"rows":{"type":"array","description":"鍒楄〃鏁版嵁","items":{"$ref":"#/components/schemas/SysLoginInfoVo"}}}},"RPageResultSysLoginInfoVo":{"type":"object","description":"鍝嶅簲淇℃伅涓讳綋","properties":{"code":{"type":"integer","format":"int32","description":"鍝嶅簲鐘舵€佺爜"},"msg":{"type":"string","description":"鍝嶅簲鎻愮ず淇℃伅"},"data":{"$ref":"#/components/schemas/PageResultSysLoginInfoVo","description":"鍝嶅簲涓氬姟鏁版嵁"}}},"SysLoginInfoVo":{"type":"object","description":"绯荤粺璁块棶璁板綍瑙嗗浘瀵硅薄 sys_login_info","properties":{"infoId":{"type":"integer","format":"int64","description":"璁块棶ID"},"userName":{"type":"string","description":"鐢ㄦ埛璐﹀彿"},"clientKey":{"type":"string","description":"瀹㈡埛绔?},"deviceType":{"type":"string","description":"璁惧绫诲瀷"},"status":{"type":"string","description":"鐧诲綍鐘舵€侊紙0鎴愬姛 1澶辫触锛?},"ipaddr":{"type":"string","description":"鐧诲綍IP鍦板潃"},"loginLocation":{"type":"string","description":"鐧诲綍鍦扮偣"},"browser":{"type":"string","description":"娴忚鍣ㄧ被鍨?},"os":{"type":"string","description":"鎿嶄綔绯荤粺"},"msg":{"type":"string","description":"鎻愮ず娑堟伅"},"loginTime":{"type":"string","format":"date-time","description":"璁块棶鏃堕棿"}}},"CacheListInfoVo":{"type":"object","description":"缂撳瓨鐩戞帶鍒楄〃淇℃伅","properties":{"info":{"type":"object","additionalProperties":{"type":"string"},"description":"淇℃伅"},"dbSize":{"type":"integer","format":"int64","description":"鏁版嵁搴?},"commandStats":{"type":"array","description":"鍛戒护缁熻","items":{"type":"object","additionalProperties":{"type":"string"}}}}},"RCacheListInfoVo":{"type":"object","description":"鍝嶅簲淇℃伅涓讳綋","properties":{"code":{"type":"integer","format":"int32","description":"鍝嶅簲鐘舵€佺爜"},"msg":{"type":"string","description":"鍝嶅簲鎻愮ず淇℃伅"},"data":{"$ref":"#/components/schemas/CacheListInfoVo","description":"鍝嶅簲涓氬姟鏁版嵁"}}},"CzDeviceVo":{"type":"object","description":"鍚庡彴璁惧绠$悊瑙嗗浘瀵硅薄銆?,"properties":{"deviceId":{"type":"integer","format":"int64","description":"璁惧涓婚敭"},"deviceNo":{"type":"string","description":"璁惧缂栧彿"},"name":{"type":"string","description":"璁惧鍚嶇О"},"productId":{"type":"integer","format":"int64","description":"浜у搧妯℃澘"},"productName":{"type":"string","description":"浜у搧鍚嶇О"},"category":{"type":"string","description":"鍝佺被"},"model":{"type":"string","description":"鍨嬪彿"},"mac":{"type":"string","description":"MAC"},"sn":{"type":"string","description":"搴忓垪鍙?},"homeId":{"type":"integer","format":"int64","description":"瀹跺涵"},"homeName":{"type":"string","description":"瀹跺涵鍚嶇О"},"locationId":{"type":"integer","format":"int64","description":"鎴块棿"},"locationName":{"type":"string","description":"鎴块棿鍚嶇О"},"status":{"type":"string","description":"鐘舵€侊紙0鏈縺娲?1鍦ㄧ嚎 2绂荤嚎锛?},"statusName":{"type":"string","description":"鐘舵€佸悕绉?},"bindUserId":{"type":"integer","format":"int64","description":"缁戝畾鐢ㄦ埛"},"bindUserName":{"type":"string","description":"缁戝畾鐢ㄦ埛鏄电О"},"bindUserPhone":{"type":"string","description":"缁戝畾鐢ㄦ埛鎵嬫満鍙?},"bindTime":{"type":"string","format":"date-time","description":"缁戝畾鏃堕棿"},"purifier":{"type":"boolean","description":"鏄惁鏈夊噣鍖栧櫒杩愯鎬?},"runMode":{"type":"string","description":"杩愯妯″紡锛?鑷姩 1杞﹁浇 2妗岄潰锛?},"fanLevel":{"type":"string","description":"椋庨€熸。浣嶏紙0鏍囧噯 1寮哄姏 2浣庢。锛?},"airLevel":{"type":"string","description":"绌烘皵璐ㄩ噺锛?浼?1鑹?2宸?3姹℃煋锛?},"tvoc":{"type":"number","description":"TVOC 鍘熷鍊?},"powerMode":{"type":"string","description":"渚涚數妯″紡锛?USB 1鐢垫睜锛?},"charging":{"type":"string","description":"鍏呯數锛?鍚?1鍏呯數涓級"},"deviceBattery":{"type":"integer","format":"int32","description":"璁惧鐢甸噺"},"filterTotalDays":{"type":"integer","format":"int32","description":"婊よ姱鎬诲鍛藉ぉ鏁?},"filterRemainDays":{"type":"integer","format":"int32","description":"婊よ姱鍓╀綑澶╂暟"},"filterLife":{"type":"integer","format":"int32","description":"婊よ姱瀵垮懡"},"filterReplaceTime":{"type":"string","format":"date-time","description":"鏈€杩戜竴娆$‘璁ゆ洿鎹㈡护鑺椂闂?},"parkingShutdown":{"type":"string","description":"鍋滆溅鍏虫満妯″紡锛?鍏?1寮€锛?},"bluetoothConnected":{"type":"string","description":"钃濈墮杩炴帴锛?鏈繛鎺?1宸茶繛鎺ワ級"},"lastReportTime":{"type":"string","format":"date-time","description":"鏈€杩戜笂鎶ユ椂闂?},"lastOnlineTime":{"type":"string","format":"date-time","description":"鏈€鍚庡湪绾挎椂闂?},"remark":{"type":"string","description":"澶囨敞"},"createTime":{"type":"string","format":"date-time","description":"鍒涘缓鏃堕棿"},"updateTime":{"type":"string","format":"date-time","description":"鏇存柊鏃堕棿"}}},"RCzDeviceVo":{"type":"object","description":"鍝嶅簲淇℃伅涓讳綋","properties":{"code":{"type":"integer","format":"int32","description":"鍝嶅簲鐘舵€佺爜"},"msg":{"type":"string","description":"鍝嶅簲鎻愮ず淇℃伅"},"data":{"$ref":"#/components/schemas/CzDeviceVo","description":"鍝嶅簲涓氬姟鏁版嵁"}}},"CzProductOptionVo":{"type":"object","description":"鏂板璁惧鏃跺彲閫夌殑浜у搧妯℃澘銆?,"properties":{"productId":{"type":"integer","format":"int64","description":"浜у搧涓婚敭"},"model":{"type":"string","description":"鍨嬪彿"},"name":{"type":"string","description":"浜у搧鍚嶇О"},"category":{"type":"string","description":"鍝佺被"},"connectTypes":{"type":"string","description":"鍙坊鍔犳柟寮?},"filterEnabled":{"type":"boolean","description":"鏄惁闇€瑕佸~鍐欐护鑺ぉ鏁?},"filterTotalDays":{"type":"integer","format":"int32","description":"婊よ姱榛樿澶╂暟"},"capabilities":{"type":"array","description":"鑳藉姏缂栫爜","items":{"type":"string"}}}},"RListCzProductOptionVo":{"type":"object","description":"鍝嶅簲淇℃伅涓讳綋","properties":{"code":{"type":"integer","format":"int32","description":"鍝嶅簲鐘舵€佺爜"},"msg":{"type":"string","description":"鍝嶅簲鎻愮ず淇℃伅"},"data":{"type":"array","description":"鍝嶅簲涓氬姟鏁版嵁","items":{"$ref":"#/components/schemas/CzProductOptionVo"}}}},"CzLocationOptionVo":{"type":"object","description":"鏂板璁惧鏃跺彲閫夌殑鎴块棿銆?,"properties":{"locationId":{"type":"integer","format":"int64","description":"鎴块棿涓婚敭"},"locationName":{"type":"string","description":"鎴块棿鍚嶇О"},"homeId":{"type":"integer","format":"int64","description":"瀹跺涵涓婚敭"},"homeName":{"type":"string","description":"瀹跺涵鍚嶇О"}}},"RListCzLocationOptionVo":{"type":"object","description":"鍝嶅簲淇℃伅涓讳綋","properties":{"code":{"type":"integer","format":"int32","description":"鍝嶅簲鐘舵€佺爜"},"msg":{"type":"string","description":"鍝嶅簲鎻愮ず淇℃伅"},"data":{"type":"array","description":"鍝嶅簲涓氬姟鏁版嵁","items":{"$ref":"#/components/schemas/CzLocationOptionVo"}}}},"PageResultCzDeviceVo":{"type":"object","description":"琛ㄦ牸鍒嗛〉鏁版嵁瀵硅薄","properties":{"total":{"type":"integer","format":"int64","description":"鎬昏褰曟暟"},"rows":{"type":"array","description":"鍒楄〃鏁版嵁","items":{"$ref":"#/components/schemas/CzDeviceVo"}}}},"RPageResultCzDeviceVo":{"type":"object","description":"鍝嶅簲淇℃伅涓讳綋","properties":{"code":{"type":"integer","format":"int32","description":"鍝嶅簲鐘舵€佺爜"},"msg":{"type":"string","description":"鍝嶅簲鎻愮ず淇℃伅"},"data":{"$ref":"#/components/schemas/PageResultCzDeviceVo","description":"鍝嶅簲涓氬姟鏁版嵁"}}},"RTestTreeVo":{"type":"object","description":"鍝嶅簲淇℃伅涓讳綋","properties":{"code":{"type":"integer","format":"int32","description":"鍝嶅簲鐘舵€佺爜"},"msg":{"type":"string","description":"鍝嶅簲鎻愮ず淇℃伅"},"data":{"$ref":"#/components/schemas/TestTreeVo","description":"鍝嶅簲涓氬姟鏁版嵁"}}},"TestTreeVo":{"type":"object","description":"娴嬭瘯鏍戣〃瑙嗗浘瀵硅薄 test_tree","properties":{"id":{"type":"integer","format":"int64","description":"涓婚敭"},"parentId":{"type":"integer","format":"int64","description":"鐖秈d"},"deptId":{"type":"integer","format":"int64","description":"閮ㄩ棬id"},"userId":{"type":"integer","format":"int64","description":"鐢ㄦ埛id"},"treeName":{"type":"string","description":"鏍戣妭鐐瑰悕"},"createTime":{"type":"string","format":"date-time","description":"鍒涘缓鏃堕棿"}}},"RListTestTreeVo":{"type":"object","description":"鍝嶅簲淇℃伅涓讳綋","properties":{"code":{"type":"integer","format":"int32","description":"鍝嶅簲鐘舵€佺爜"},"msg":{"type":"string","description":"鍝嶅簲鎻愮ず淇℃伅"},"data":{"type":"array","description":"鍝嶅簲涓氬姟鏁版嵁","items":{"$ref":"#/components/schemas/TestTreeVo"}}}},"RObject":{"type":"object","description":"鍝嶅簲淇℃伅涓讳綋","properties":{"code":{"type":"integer","format":"int32","description":"鍝嶅簲鐘舵€佺爜"},"msg":{"type":"string","description":"鍝嶅簲鎻愮ず淇℃伅"},"data":{"description":"鍝嶅簲涓氬姟鏁版嵁"}}},"RTestSensitive":{"type":"object","description":"鍝嶅簲淇℃伅涓讳綋","properties":{"code":{"type":"integer","format":"int32","description":"鍝嶅簲鐘舵€佺爜"},"msg":{"type":"string","description":"鍝嶅簲鎻愮ず淇℃伅"},"data":{"$ref":"#/components/schemas/TestSensitive","description":"鍝嶅簲涓氬姟鏁版嵁"}}},"TestSensitive":{"type":"object","description":"鑴辨晱娴嬭瘯瀵硅薄銆?,"properties":{"idCard":{"type":"string","description":"韬唤璇?},"phone":{"type":"string","description":"鐢佃瘽"},"address":{"type":"string","description":"鍦板潃"},"email":{"type":"string","description":"閭"},"bankCard":{"type":"string","description":"閾惰鍗?}}},"RMapStringListString":{"type":"object","description":"鍝嶅簲淇℃伅涓讳綋","properties":{"code":{"type":"integer","format":"int32","description":"鍝嶅簲鐘舵€佺爜"},"msg":{"type":"string","description":"鍝嶅簲鎻愮ず淇℃伅"},"data":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"description":"鍝嶅簲涓氬姟鏁版嵁"}}},"BlobResourceContents":{"allOf":[{"$ref":"#/components/schemas/ResourceContents"},{"type":"object","properties":{"uri":{"type":"string"},"mimeType":{"type":"string"},"blob":{"type":"string"},"_meta":{"type":"object","additionalProperties":{}}}}]},"McpResourceReadResult":{"type":"object","description":"MCP 璧勬簮璇诲彇缁撴灉銆?,"properties":{"serverName":{"type":"string"},"contents":{"type":"array","items":{"oneOf":[{"$ref":"#/components/schemas/BlobResourceContents"},{"$ref":"#/components/schemas/TextResourceContents"}]}}}},"RMapStringMcpResourceReadResult":{"type":"object","description":"鍝嶅簲淇℃伅涓讳綋","properties":{"code":{"type":"integer","format":"int32","description":"鍝嶅簲鐘舵€佺爜"},"msg":{"type":"string","description":"鍝嶅簲鎻愮ず淇℃伅"},"data":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/McpResourceReadResult"},"description":"鍝嶅簲涓氬姟鏁版嵁"}}},"ResourceContents":{},"TextResourceContents":{"allOf":[{"$ref":"#/components/schemas/ResourceContents"},{"type":"object","properties":{"uri":{"type":"string"},"mimeType":{"type":"string"},"text":{"type":"string"},"_meta":{"type":"object","additionalProperties":{}}}}]},"Annotations":{"type":"object","properties":{"audience":{"type":"array","items":{"type":"string","enum":["user","assistant"]}},"priority":{"type":"number","format":"double"},"lastModified":{"type":"string"}}},"AudioContent":{"allOf":[{"$ref":"#/components/schemas/Content"},{"type":"object","properties":{"annotations":{"$ref":"#/components/schemas/Annotations"},"data":{"type":"string"},"mimeType":{"type":"string"},"_meta":{"type":"object","additionalProperties":{}}}}]},"Content":{"discriminator":{"propertyName":"type"},"properties":{"type":{"type":"string"}},"required":["type"]},"EmbeddedResource":{"allOf":[{"$ref":"#/components/schemas/Content"},{"type":"object","properties":{"annotations":{"$ref":"#/components/schemas/Annotations"},"resource":{"oneOf":[{"$ref":"#/components/schemas/BlobResourceContents"},{"$ref":"#/components/schemas/TextResourceContents"}]},"_meta":{"type":"object","additionalProperties":{}}}}]},"ImageContent":{"allOf":[{"$ref":"#/components/schemas/Content"},{"type":"object","properties":{"annotations":{"$ref":"#/components/schemas/Annotations"},"data":{"type":"string"},"mimeType":{"type":"string"},"_meta":{"type":"object","additionalProperties":{}}}}]},"McpDemoHandleResult":{"type":"object","description":"MCP 鏁版嵁澶勭悊缁撴灉銆?,"properties":{"sourceType":{"type":"string","description":"鏁版嵁鏉ユ簮绫诲瀷"},"handled":{"type":"boolean","description":"鏄惁宸插鐞?},"data":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/McpToolCallResult"},"description":"MCP 鍘熷杩斿洖鏁版嵁"}}},"McpToolCallResult":{"type":"object","description":"MCP 宸ュ叿璋冪敤缁撴灉銆?,"properties":{"serverName":{"type":"string"},"error":{"type":"boolean"},"content":{"type":"array","items":{"oneOf":[{"$ref":"#/components/schemas/AudioContent"},{"$ref":"#/components/schemas/EmbeddedResource"},{"$ref":"#/components/schemas/ImageContent"},{"$ref":"#/components/schemas/ResourceLink"},{"$ref":"#/components/schemas/TextContent"}]}},"structuredContent":{}}},"RMcpDemoHandleResult":{"type":"object","description":"鍝嶅簲淇℃伅涓讳綋","properties":{"code":{"type":"integer","format":"int32","description":"鍝嶅簲鐘舵€佺爜"},"msg":{"type":"string","description":"鍝嶅簲鎻愮ず淇℃伅"},"data":{"$ref":"#/components/schemas/McpDemoHandleResult","description":"鍝嶅簲涓氬姟鏁版嵁"}}},"ResourceLink":{"allOf":[{"$ref":"#/components/schemas/Content"},{"type":"object","properties":{"name":{"type":"string"},"title":{"type":"string"},"uri":{"type":"string"},"description":{"type":"string"},"mimeType":{"type":"string"},"size":{"type":"integer","format":"int64"},"annotations":{"$ref":"#/components/schemas/Annotations"},"_meta":{"type":"object","additionalProperties":{}}}}]},"TextContent":{"allOf":[{"$ref":"#/components/schemas/Content"},{"type":"object","properties":{"annotations":{"$ref":"#/components/schemas/Annotations"},"text":{"type":"string"},"_meta":{"type":"object","additionalProperties":{}}}}]},"TestI18nBo":{"type":"object","description":"鍥介檯鍖?Bean 鏍¢獙娴嬭瘯瀵硅薄銆?,"properties":{"name":{"type":"string","description":"鍚嶇О銆?,"minLength":1},"age":{"type":"integer","format":"int32","description":"骞撮緞銆?}},"required":["age","name"]},"RTestI18nBo":{"type":"object","description":"鍝嶅簲淇℃伅涓讳綋","properties":{"code":{"type":"integer","format":"int32","description":"鍝嶅簲鐘舵€佺爜"},"msg":{"type":"string","description":"鍝嶅簲鎻愮ず淇℃伅"},"data":{"$ref":"#/components/schemas/TestI18nBo","description":"鍝嶅簲涓氬姟鏁版嵁"}}},"RMapStringTestDemoEncrypt":{"type":"object","description":"鍝嶅簲淇℃伅涓讳綋","properties":{"code":{"type":"integer","format":"int32","description":"鍝嶅簲鐘舵€佺爜"},"msg":{"type":"string","description":"鍝嶅簲鎻愮ず淇℃伅"},"data":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/TestDemoEncrypt"},"description":"鍝嶅簲涓氬姟鏁版嵁"}}},"TestDemoEncrypt":{"type":"object","description":"娴嬭瘯鍔犲瘑瀛楁瀹炰綋銆?,"properties":{"createBy":{"type":"integer","format":"int64","description":"鍒涘缓鑰?},"createTime":{"type":"string","format":"date-time","description":"鍒涘缓鏃堕棿"},"updateBy":{"type":"integer","format":"int64","description":"鏇存柊鑰?},"updateTime":{"type":"string","format":"date-time","description":"鏇存柊鏃堕棿"},"id":{"type":"integer","format":"int64","description":"涓婚敭"},"deptId":{"type":"integer","format":"int64","description":"閮ㄩ棬id"},"userId":{"type":"integer","format":"int64","description":"鐢ㄦ埛id"},"orderNum":{"type":"integer","format":"int32","description":"鎺掑簭鍙?},"testKey":{"type":"string","description":"key閿?},"value":{"type":"string","description":"鍊?},"version":{"type":"integer","format":"int64","description":"鐗堟湰"},"delFlag":{"type":"integer","format":"int64","description":"鍒犻櫎鏍囧織"}}},"RTestDemoVo":{"type":"object","description":"鍝嶅簲淇℃伅涓讳綋","properties":{"code":{"type":"integer","format":"int32","description":"鍝嶅簲鐘舵€佺爜"},"msg":{"type":"string","description":"鍝嶅簲鎻愮ず淇℃伅"},"data":{"$ref":"#/components/schemas/TestDemoVo","description":"鍝嶅簲涓氬姟鏁版嵁"}}},"TestDemoVo":{"type":"object","description":"娴嬭瘯鍗曡〃瑙嗗浘瀵硅薄 test_demo","properties":{"id":{"type":"integer","format":"int64","description":"涓婚敭"},"deptId":{"type":"integer","format":"int64","description":"閮ㄩ棬id"},"userId":{"type":"integer","format":"int64","description":"鐢ㄦ埛id"},"orderNum":{"type":"integer","format":"int32","description":"鎺掑簭鍙?},"testKey":{"type":"string","description":"key閿?},"value":{"type":"string","description":"鍊?},"createTime":{"type":"string","format":"date-time","description":"鍒涘缓鏃堕棿"},"createBy":{"type":"integer","format":"int64","description":"鍒涘缓浜?},"createByName":{"type":"string","description":"鍒涘缓浜鸿处鍙?},"updateTime":{"type":"string","format":"date-time","description":"鏇存柊鏃堕棿"},"updateBy":{"type":"integer","format":"int64","description":"鏇存柊浜?},"updateByName":{"type":"string","description":"鏇存柊浜鸿处鍙?},"version":{"type":"integer","format":"int64","description":"鐗堟湰"}}},"PageResultTestDemoVo":{"type":"object","description":"琛ㄦ牸鍒嗛〉鏁版嵁瀵硅薄","properties":{"total":{"type":"integer","format":"int64","description":"鎬昏褰曟暟"},"rows":{"type":"array","description":"鍒楄〃鏁版嵁","items":{"$ref":"#/components/schemas/TestDemoVo"}}}},"RPageResultTestDemoVo":{"type":"object","description":"鍝嶅簲淇℃伅涓讳綋","properties":{"code":{"type":"integer","format":"int32","description":"鍝嶅簲鐘舵€佺爜"},"msg":{"type":"string","description":"鍝嶅簲鎻愮ず淇℃伅"},"data":{"$ref":"#/components/schemas/PageResultTestDemoVo","description":"鍝嶅簲涓氬姟鏁版嵁"}}},"CaptchaVo":{"type":"object","description":"鍥剧墖楠岃瘉鐮佸搷搴斿璞°€?,"properties":{"captchaEnabled":{"type":"boolean","description":"鏄惁鍚敤楠岃瘉鐮?},"uuid":{"type":"string","description":"楠岃瘉鐮佹爣璇?},"img":{"type":"string","description":"Base64 鍥剧墖鏁版嵁"}}},"RCaptchaVo":{"type":"object","description":"鍝嶅簲淇℃伅涓讳綋","properties":{"code":{"type":"integer","format":"int32","description":"鍝嶅簲鐘舵€佺爜"},"msg":{"type":"string","description":"鍝嶅簲鎻愮ず淇℃伅"},"data":{"$ref":"#/components/schemas/CaptchaVo","description":"鍝嶅簲涓氬姟鏁版嵁"}}},"AppUserProfileVo":{"type":"object","description":"App 鐢ㄦ埛璧勬枡杩斿洖瀵硅薄","properties":{"userId":{"type":"integer","format":"int64","description":"鐢ㄦ埛ID"},"userName":{"type":"string","description":"鐢ㄦ埛璐﹀彿锛堥粯璁や娇鐢ㄦ墜鏈哄彿锛?},"userNo":{"type":"string","description":"鐢ㄦ埛灞曠ず缂栧彿"},"phonenumber":{"type":"string","description":"鎵嬫満鍙风爜"},"nickName":{"type":"string","description":"鐢ㄦ埛鏄电О"},"avatarOssId":{"type":"integer","format":"int64","description":"澶村儚 OSS ID"},"avatarUrl":{"type":"string","description":"澶村儚 URL"},"gender":{"type":"string","description":"鎬у埆锛?鏈煡 1鐢?2濂筹級"},"birthday":{"type":"string","description":"鐢熸棩"},"province":{"type":"string","description":"鐪佷唤"},"city":{"type":"string","description":"鍩庡競"},"district":{"type":"string","description":"鍖哄幙"},"remark":{"type":"string","description":"澶囨敞"},"createTime":{"type":"string","format":"date-time","description":"鍒涘缓鏃堕棿"}}},"RAppUserProfileVo":{"type":"object","description":"鍝嶅簲淇℃伅涓讳綋","properties":{"code":{"type":"integer","format":"int32","description":"鍝嶅簲鐘舵€佺爜"},"msg":{"type":"string","description":"鍝嶅簲鎻愮ず淇℃伅"},"data":{"$ref":"#/components/schemas/AppUserProfileVo","description":"鍝嶅簲涓氬姟鏁版嵁"}}},"AppLocationVo":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"homeId":{"type":"integer","format":"int64"},"locationName":{"type":"string"},"sortOrder":{"type":"integer","format":"int32"},"icon":{"type":"string"},"status":{"type":"string"},"createTime":{"type":"string","format":"date-time"}}},"RListAppLocationVo":{"type":"object","description":"鍝嶅簲淇℃伅涓讳綋","properties":{"code":{"type":"integer","format":"int32","description":"鍝嶅簲鐘舵€佺爜"},"msg":{"type":"string","description":"鍝嶅簲鎻愮ず淇℃伅"},"data":{"type":"array","description":"鍝嶅簲涓氬姟鏁版嵁","items":{"$ref":"#/components/schemas/AppLocationVo"}}}},"AppHomeVo":{"type":"object","description":"App 瀹跺涵瑙嗗浘瀵硅薄\n

\n 鐢ㄤ簬鍓嶇灞曠ず瀹跺涵鍒楄〃淇℃伅锛屽寘鍚搴熀鏈俊鎭強浣嶇疆鏁伴噺缁熻銆?,"properties":{"id":{"type":"integer","format":"int64","description":"瀹跺涵ID"},"homeName":{"type":"string","description":"瀹跺涵鍚嶇О锛堝锛氭垜鐨勫銆佺埗姣嶅锛?},"isDefault":{"type":"string","description":"鏄惁榛樿瀹跺涵锛?鏄?0鍚︼級"},"locationCount":{"type":"integer","format":"int32","description":"浣嶇疆鏁伴噺锛堣瀹跺涵涓嬬殑鎴块棿/浣嶇疆鎬绘暟锛?},"createTime":{"type":"string","format":"date-time","description":"鍒涘缓鏃堕棿"}}},"RListAppHomeVo":{"type":"object","description":"鍝嶅簲淇℃伅涓讳綋","properties":{"code":{"type":"integer","format":"int32","description":"鍝嶅簲鐘舵€佺爜"},"msg":{"type":"string","description":"鍝嶅簲鎻愮ず淇℃伅"},"data":{"type":"array","description":"鍝嶅簲涓氬姟鏁版嵁","items":{"$ref":"#/components/schemas/AppHomeVo"}}}},"OpenApiAgentToolVO":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"name":{"type":"string"},"description":{"type":"string"}}},"OpenApiAgentVO":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"name":{"type":"string"},"description":{"type":"string"},"avatar":{"type":"string"},"greeting":{"type":"string"},"presetQuestions":{"type":"array","items":{"type":"string"}},"capabilities":{"type":"array","items":{"type":"string"}},"mcpEnabled":{"type":"boolean"},"mcpServers":{"type":"array","items":{"$ref":"#/components/schemas/OpenApiAgentToolVO"}},"skillEnabled":{"type":"boolean"},"skills":{"type":"array","items":{"$ref":"#/components/schemas/OpenApiAgentToolVO"}},"webSearchEnabled":{"type":"boolean"},"viewCount":{"type":"integer","format":"int32"},"isFeatured":{"type":"boolean"},"status":{"type":"integer","format":"int32"},"createDt":{"type":"string","format":"date-time"},"updateDt":{"type":"string","format":"date-time"},"subscribed":{"type":"boolean"}}},"ResultListOpenApiAgentVO":{"type":"object","properties":{"status":{"type":"integer","format":"int32"},"message":{"type":"string"},"data":{"type":"array","items":{"$ref":"#/components/schemas/OpenApiAgentVO"}}}},"PageResultListOpenApiConversationVO":{"type":"object","properties":{"status":{"type":"integer","format":"int32"},"message":{"type":"string"},"data":{"type":"array","items":{"$ref":"#/components/schemas/OpenApiConversationVO"}},"page":{"type":"integer","format":"int64"},"size":{"type":"integer","format":"int64"},"total":{"type":"integer","format":"int64"}}},"OpenApiMessageVO":{"type":"object","properties":{"role":{"type":"string"},"content":{"type":"string"},"thinking":{"type":"string"},"status":{"type":"integer","format":"int32"},"createDt":{"type":"string"}}},"ResultListOpenApiMessageVO":{"type":"object","properties":{"status":{"type":"integer","format":"int32"},"message":{"type":"string"},"data":{"type":"array","items":{"$ref":"#/components/schemas/OpenApiMessageVO"}}}},"ResultMapStringObject":{"type":"object","properties":{"status":{"type":"integer","format":"int32"},"message":{"type":"string"},"data":{"type":"object","additionalProperties":{}}}},"OpenApiAgentQueryRequest":{"type":"object","properties":{"page":{"type":"integer","format":"int32","minimum":1},"size":{"type":"integer","format":"int32","minimum":1},"appId":{"type":"string"}}},"PageResultListOpenApiAgentVO":{"type":"object","properties":{"status":{"type":"integer","format":"int32"},"message":{"type":"string"},"data":{"type":"array","items":{"$ref":"#/components/schemas/OpenApiAgentVO"}},"page":{"type":"integer","format":"int64"},"size":{"type":"integer","format":"int64"},"total":{"type":"integer","format":"int64"}}},"OpenApiAgentIdentityRequest":{"type":"object","properties":{"agentId":{"type":"integer","format":"int64"}},"required":["agentId"]},"ResultOpenApiAgentVO":{"type":"object","properties":{"status":{"type":"integer","format":"int32"},"message":{"type":"string"},"data":{"$ref":"#/components/schemas/OpenApiAgentVO"}}}}}}{"code":404,"data":null,"msg":"璇锋眰鍦板潃涓嶅瓨锟?} diff --git a/.tmp-openapi-out.txt b/.tmp-openapi-out.txt new file mode 100644 index 0000000..e69de29 diff --git a/package-lock.json b/package-lock.json index 15c4913..ed5eb19 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4618,9 +4618,6 @@ "cpu": [ "x64" ], - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -4787,9 +4784,6 @@ "cpu": [ "arm" ], - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -4810,9 +4804,6 @@ "cpu": [ "arm" ], - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -4833,9 +4824,6 @@ "cpu": [ "arm64" ], - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -4856,9 +4844,6 @@ "cpu": [ "arm64" ], - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -4879,9 +4864,6 @@ "cpu": [ "x64" ], - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -4902,9 +4884,6 @@ "cpu": [ "x64" ], - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -5078,9 +5057,6 @@ "cpu": [ "arm" ], - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -5094,9 +5070,6 @@ "cpu": [ "arm" ], - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -5110,9 +5083,6 @@ "cpu": [ "arm64" ], - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -5126,9 +5096,6 @@ "cpu": [ "arm64" ], - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -5142,9 +5109,6 @@ "cpu": [ "loong64" ], - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -5158,9 +5122,6 @@ "cpu": [ "loong64" ], - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -5174,9 +5135,6 @@ "cpu": [ "ppc64" ], - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -5190,9 +5148,6 @@ "cpu": [ "ppc64" ], - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -5206,9 +5161,6 @@ "cpu": [ "riscv64" ], - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -5222,9 +5174,6 @@ "cpu": [ "riscv64" ], - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -5238,9 +5187,6 @@ "cpu": [ "s390x" ], - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -5254,9 +5200,6 @@ "cpu": [ "x64" ], - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -5270,9 +5213,6 @@ "cpu": [ "x64" ], - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ diff --git a/project.config.json b/project.config.json new file mode 100644 index 0000000..db2f056 --- /dev/null +++ b/project.config.json @@ -0,0 +1,24 @@ +{ + "setting": { + "es6": true, + "postcss": true, + "minified": true, + "uglifyFileName": false, + "enhance": true, + "packNpmRelationList": [], + "babelSetting": { + "ignore": [], + "disablePlugins": [], + "outputPath": "" + }, + "useCompilerPlugins": false + }, + "compileType": "miniprogram", + "simulatorPluginLibVersion": {}, + "packOptions": { + "ignore": [], + "include": [] + }, + "appid": "wxde0794b85ed16144", + "editorSetting": {} +} \ No newline at end of file diff --git a/project.private.config.json b/project.private.config.json new file mode 100644 index 0000000..4575f16 --- /dev/null +++ b/project.private.config.json @@ -0,0 +1,15 @@ +{ + "libVersion": "3.17.4", + "projectname": "czzj-app", + "setting": { + "urlCheck": true, + "coverView": true, + "lazyloadPlaceholderEnable": false, + "skylineRenderEnable": false, + "preloadBackgroundData": false, + "autoAudits": false, + "showShadowRootInWxmlPanel": true, + "compileHotReLoad": true, + "useGlassEaselForWxml": false + } +} \ No newline at end of file diff --git a/src/api/auth.ts b/src/api/auth.ts index ad573a7..909150d 100644 --- a/src/api/auth.ts +++ b/src/api/auth.ts @@ -1,6 +1,7 @@ import { request } from './request' import type { AuthTokenResult, SendSmsCodeBody, SmsCodeScene } from '@/types/api' import { ApiError } from '@/utils/api-error' +import { extractAuthToken, saveStoredToken } from '@/utils/auth-token' /** POST /app/auth/sendSmsCode */ export function sendSmsCode(phone: string, scene: SmsCodeScene) { @@ -15,11 +16,10 @@ export function sendSmsCode(phone: string, scene: SmsCodeScene) { }) } -export function saveAuthToken(data: AuthTokenResult) { - const token = data?.token ?? data?.accessToken +export function saveAuthToken(data: AuthTokenResult | unknown) { + const token = extractAuthToken(data) if (!token) { throw new ApiError('登录失败,未获取到令牌') } - uni.setStorageSync('token', token) - return token + return saveStoredToken(token) } diff --git a/src/api/request.ts b/src/api/request.ts index d80c520..d6ea0d8 100644 --- a/src/api/request.ts +++ b/src/api/request.ts @@ -1,46 +1,79 @@ import type { ApiResponse } from '@/types/api' +import { extractAuthToken, getStoredToken, saveStoredToken } from '@/utils/auth-token' import { ApiError, isApiSuccess, unwrapApiData } from '@/utils/api-error' const BASE_URL = import.meta.env.VITE_API_BASE_URL ?? '' +/** RuoYi-Vue-Plus App 端 clientId(请求头 clientid,与 Postman 一致) */ +export const API_CLIENT_ID = import.meta.env.VITE_API_CLIENT_ID || 'app' export interface RequestOptions extends Omit { url: string } -export function request(options: RequestOptions): Promise { - const token = uni.getStorageSync('token') as string +/** 构建鉴权请求头:clientid + Authorization */ +export function buildAuthHeaders(extra?: Record): Record { + const token = getStoredToken() + return { + 'Content-Type': 'application/json;charset=UTF-8', + clientId: API_CLIENT_ID, + ...(token ? { Authorization: `Bearer ${token}` } : {}), + ...(extra as Record | undefined), + } +} +function handleSuccess( + res: UniApp.RequestSuccessCallbackResult, + resolve: (value: T) => void, + reject: (reason: ApiError) => void, + saveTokenFromBody = false, +) { + if (res.statusCode < 200 || res.statusCode >= 300) { + const body = res.data as ApiResponse | undefined + reject( + new ApiError( + body?.msg || body?.message || `请求失败(${res.statusCode})`, + body?.code ?? res.statusCode, + ), + ) + return + } + + const body = (res.data ?? {}) as ApiResponse & Record + if (!isApiSuccess(body)) { + reject(new ApiError(body.msg || body.message || '请求失败', body.code)) + return + } + + if (saveTokenFromBody) { + const token = extractAuthToken(body) + if (token) saveStoredToken(token) + } + + resolve(unwrapApiData(body)) +} + +export function request(options: RequestOptions): Promise { return new Promise((resolve, reject) => { uni.request({ ...options, url: `${BASE_URL}${options.url}`, - header: { - 'Content-Type': 'application/json', - ...(token ? { Authorization: `Bearer ${token}` } : {}), - ...options.header, - }, - success: (res) => { - if (res.statusCode < 200 || res.statusCode >= 300) { - const body = res.data as ApiResponse | undefined - reject( - new ApiError( - body?.msg || body?.message || `请求失败(${res.statusCode})`, - body?.code ?? res.statusCode, - ), - ) - return - } - - const body = (res.data ?? {}) as ApiResponse & Record - if (!isApiSuccess(body)) { - reject( - new ApiError(body.msg || body.message || '请求失败', body.code), - ) - return - } - - resolve(unwrapApiData(body)) - }, + header: buildAuthHeaders(options.header), + success: (res) => handleSuccess(res, resolve, reject), + fail: (err) => { + reject(new ApiError(err.errMsg || '网络异常')) + }, + }) + }) +} + +/** 登录类接口:从完整响应体提取并保存 token */ +export function requestLogin(options: RequestOptions): Promise { + return new Promise((resolve, reject) => { + uni.request({ + ...options, + url: `${BASE_URL}${options.url}`, + header: buildAuthHeaders(options.header), + success: (res) => handleSuccess(res, resolve, reject, true), fail: (err) => { reject(new ApiError(err.errMsg || '网络异常')) }, diff --git a/src/components/app-tab-bar/index.vue b/src/components/app-tab-bar/index.vue index 6401b3b..814d03c 100644 --- a/src/components/app-tab-bar/index.vue +++ b/src/components/app-tab-bar/index.vue @@ -49,7 +49,8 @@ const routes: Record = { } function resolveTabFromRoute(): TabKey { - const route = getCurrentPages().at(-1)?.route ?? '' + const pages = getCurrentPages() + const route = pages.length > 0 ? pages[pages.length - 1].route ?? '' : '' return route.includes('mine') ? 'mine' : 'device' } diff --git a/src/manifest.json b/src/manifest.json index 309b9ec..fd83415 100644 --- a/src/manifest.json +++ b/src/manifest.json @@ -23,6 +23,12 @@ /* android打包配置 */ "android" : { "permissions" : [ + "", + "", + "", + "", + "", + "", "", "", "", @@ -54,7 +60,17 @@ "setting" : { "urlCheck" : false }, - "usingComponents" : true + "usingComponents" : true, + "permission" : { + "scope.bluetooth" : { + "desc" : "你的蓝牙将用于发现和连接智能设备" + } + }, + "requiredPrivateInfos" : [ + "getBluetoothDevices", + "onBluetoothDeviceFound", + "startBluetoothDevicesDiscovery" + ] }, "mp-alipay" : { "usingComponents" : true diff --git a/src/pages.json b/src/pages.json index ab1ff0e..0eb73f8 100644 --- a/src/pages.json +++ b/src/pages.json @@ -20,6 +20,13 @@ "navigationBarTitleText": "设备" } }, + { + "path": "pages/device/detail/index", + "style": { + "navigationStyle": "custom", + "navigationBarTitleText": "设备详情" + } + }, { "path": "pages/add-device/index", "style": { diff --git a/src/pages/add-device/add-device.api.ts b/src/pages/add-device/add-device.api.ts new file mode 100644 index 0000000..9dd5891 --- /dev/null +++ b/src/pages/add-device/add-device.api.ts @@ -0,0 +1,11 @@ +import { request } from '@/api/request' +import type { BindDeviceBody } from './add-device.types' + +/** POST /app/device/bind — 绑定设备(设备编号及蓝牙配对信息) */ +export function bindDevice(data: BindDeviceBody) { + return request({ + url: '/app/device/bind', + method: 'POST', + data, + }) +} diff --git a/src/pages/add-device/add-device.scss b/src/pages/add-device/add-device.scss index 4d638c0..bf96f21 100644 --- a/src/pages/add-device/add-device.scss +++ b/src/pages/add-device/add-device.scss @@ -51,6 +51,11 @@ background: linear-gradient(98deg, #45d685 0%, #21c25e 100%); box-shadow: 0 8rpx 28rpx rgba(33, 194, 94, 0.28); margin-bottom: 28rpx; + + &--disabled { + opacity: 0.65; + pointer-events: none; + } } .add-device-page__btn-text { diff --git a/src/pages/add-device/add-device.types.ts b/src/pages/add-device/add-device.types.ts index f967504..6495e79 100644 --- a/src/pages/add-device/add-device.types.ts +++ b/src/pages/add-device/add-device.types.ts @@ -9,3 +9,60 @@ export interface BindFeatureItem { desc: string icon: string } + +/** POST /app/device/bind 请求体 */ +export interface BindDeviceBody { + deviceNo: string + productId?: number + model?: string + imei?: string + mac?: string + name?: string + homeId?: number + locationId?: number +} + +/** 绑定流程页间传递的设备信息 */ +export interface BindDeviceContext { + deviceNo: string + name: string + serialMasked: string + productId?: number + model?: string + imei?: string + mac?: string +} + +export function buildBindDeviceQuery(ctx: BindDeviceContext): string { + const parts = [ + `deviceNo=${encodeURIComponent(ctx.deviceNo)}`, + `name=${encodeURIComponent(ctx.name)}`, + `serial=${encodeURIComponent(ctx.serialMasked)}`, + ] + if (ctx.productId != null) parts.push(`productId=${ctx.productId}`) + if (ctx.model) parts.push(`model=${encodeURIComponent(ctx.model)}`) + if (ctx.imei) parts.push(`imei=${encodeURIComponent(ctx.imei)}`) + if (ctx.mac) parts.push(`mac=${encodeURIComponent(ctx.mac)}`) + return parts.join('&') +} + +function parseQueryNumber(raw: unknown): number | undefined { + if (raw === undefined || raw === null || raw === '') return undefined + const n = Number(raw) + return Number.isFinite(n) ? n : undefined +} + +export function readBindDeviceContext( + query: Record, +): Partial { + const ctx: Partial = {} + if (query.deviceNo) ctx.deviceNo = decodeURIComponent(String(query.deviceNo)) + if (query.name) ctx.name = decodeURIComponent(String(query.name)) + if (query.serial) ctx.serialMasked = decodeURIComponent(String(query.serial)) + const productId = parseQueryNumber(query.productId) + if (productId != null) ctx.productId = productId + if (query.model) ctx.model = decodeURIComponent(String(query.model)) + if (query.imei) ctx.imei = decodeURIComponent(String(query.imei)) + if (query.mac) ctx.mac = decodeURIComponent(String(query.mac)) + return ctx +} diff --git a/src/pages/add-device/complete/complete.scss b/src/pages/add-device/complete/complete.scss index 45837e1..b82f332 100644 --- a/src/pages/add-device/complete/complete.scss +++ b/src/pages/add-device/complete/complete.scss @@ -210,6 +210,11 @@ display: flex; align-items: center; justify-content: center; + + &--disabled { + opacity: 0.65; + pointer-events: none; + } } .complete-page__submit-text { diff --git a/src/pages/add-device/complete/index.vue b/src/pages/add-device/complete/index.vue index 7b1a961..508e3b0 100644 --- a/src/pages/add-device/complete/index.vue +++ b/src/pages/add-device/complete/index.vue @@ -73,8 +73,14 @@ - - 完成添加 + + + {{ loading ? '提交中...' : '完成添加' }} + @@ -93,17 +99,14 @@ const { deviceName, serialMasked, roomName, + loading, + applyQuery, onPickRoom, onFinishAdd, } = useCompleteDevice() onLoad((query) => { - if (query?.name) { - deviceName.value = decodeURIComponent(String(query.name)) - } - if (query?.serial) { - serialMasked.value = decodeURIComponent(String(query.serial)) - } + applyQuery(query ?? {}) }) diff --git a/src/pages/add-device/complete/use-complete-device.ts b/src/pages/add-device/complete/use-complete-device.ts index 83929ac..43d1deb 100644 --- a/src/pages/add-device/complete/use-complete-device.ts +++ b/src/pages/add-device/complete/use-complete-device.ts @@ -1,34 +1,85 @@ import { ref } from 'vue' +import { getErrorMessage } from '@/utils/api-error' +import { bindDevice } from '../add-device.api' +import { readBindDeviceContext } from '../add-device.types' -const ROOM_OPTIONS = ['客厅', '主卧', '卧室', '厨房', '卫生间'] +const ROOM_OPTIONS = [ + { name: '客厅', locationId: 1 }, + { name: '主卧', locationId: 2 }, + { name: '卧室', locationId: 3 }, + { name: '厨房', locationId: 4 }, + { name: '卫生间', locationId: 5 }, +] as const export function useCompleteDevice() { const currentStep = 4 + const deviceNo = ref('') const deviceName = ref('Z2 空气净化器') const serialMasked = ref('****A3B2') - const roomName = ref('客厅') - const roomOptions = ROOM_OPTIONS + const productId = ref() + const model = ref() + const imei = ref() + const mac = ref() + const roomName = ref(ROOM_OPTIONS[0].name) + const locationId = ref(ROOM_OPTIONS[0].locationId) + const loading = ref(false) + + function applyQuery(query: Record) { + const ctx = readBindDeviceContext(query) + if (ctx.deviceNo) deviceNo.value = ctx.deviceNo + if (ctx.name) deviceName.value = ctx.name + if (ctx.serialMasked) serialMasked.value = ctx.serialMasked + if (ctx.productId != null) productId.value = ctx.productId + if (ctx.model) model.value = ctx.model + if (ctx.imei) imei.value = ctx.imei + if (ctx.mac) mac.value = ctx.mac + } function onPickRoom() { uni.showActionSheet({ - itemList: roomOptions, + itemList: ROOM_OPTIONS.map((item) => item.name), success: (res) => { - const picked = roomOptions[res.tapIndex] - if (picked) roomName.value = picked + const picked = ROOM_OPTIONS[res.tapIndex] + if (picked) { + roomName.value = picked.name + locationId.value = picked.locationId + } }, }) } - function onFinishAdd() { + async function onFinishAdd() { const name = deviceName.value.trim() if (!name) { uni.showToast({ title: '请输入设备名称', icon: 'none' }) return } - uni.showToast({ title: '添加成功', icon: 'success' }) - setTimeout(() => { - uni.reLaunch({ url: '/pages/device/index' }) - }, 400) + if (!deviceNo.value.trim()) { + uni.showToast({ title: '缺少设备编号', icon: 'none' }) + return + } + if (loading.value) return + + loading.value = true + try { + await bindDevice({ + deviceNo: deviceNo.value.trim(), + name, + ...(productId.value != null ? { productId: productId.value } : {}), + ...(model.value ? { model: model.value } : {}), + ...(imei.value ? { imei: imei.value } : {}), + ...(mac.value ? { mac: mac.value } : {}), + ...(locationId.value != null ? { locationId: locationId.value } : {}), + }) + uni.showToast({ title: '添加成功', icon: 'success' }) + setTimeout(() => { + uni.reLaunch({ url: '/pages/device/index' }) + }, 400) + } catch (err) { + uni.showToast({ title: getErrorMessage(err, '绑定失败,请重试'), icon: 'none' }) + } finally { + loading.value = false + } } return { @@ -36,6 +87,8 @@ export function useCompleteDevice() { deviceName, serialMasked, roomName, + loading, + applyQuery, onPickRoom, onFinishAdd, } diff --git a/src/pages/add-device/index.vue b/src/pages/add-device/index.vue index 490080d..35ffb3f 100644 --- a/src/pages/add-device/index.vue +++ b/src/pages/add-device/index.vue @@ -11,8 +11,14 @@ - - 去开启蓝牙 + + + {{ opening ? '正在开启...' : '去开启蓝牙' }} + 稍后绑定 @@ -29,7 +35,7 @@ import BindFeatureList from './components/bind-feature-list/index.vue' import BindSteps from './components/bind-steps/index.vue' import { BIND_FEATURES, BIND_STEPS, useAddDevice } from './use-add-device' -const { currentStep, onOpenBluetooth, onBindLater } = useAddDevice() +const { currentStep, opening, onOpenBluetooth, onBindLater } = useAddDevice() diff --git a/src/pages/device/components/device-header/index.vue b/src/pages/device/components/device-header/index.vue index 88991e3..5fc6c9c 100644 --- a/src/pages/device/components/device-header/index.vue +++ b/src/pages/device/components/device-header/index.vue @@ -1,49 +1,136 @@ diff --git a/src/pages/device/components/device-list/index.vue b/src/pages/device/components/device-list/index.vue new file mode 100644 index 0000000..9a12df4 --- /dev/null +++ b/src/pages/device/components/device-list/index.vue @@ -0,0 +1,85 @@ + + + + + diff --git a/src/pages/device/components/operation-success-toast/index.vue b/src/pages/device/components/operation-success-toast/index.vue new file mode 100644 index 0000000..ff417b6 --- /dev/null +++ b/src/pages/device/components/operation-success-toast/index.vue @@ -0,0 +1,91 @@ + + + + + diff --git a/src/pages/device/components/room-location-dialog/index.vue b/src/pages/device/components/room-location-dialog/index.vue new file mode 100644 index 0000000..45270c4 --- /dev/null +++ b/src/pages/device/components/room-location-dialog/index.vue @@ -0,0 +1,154 @@ + + + + + diff --git a/src/pages/device/detail/components/filter-replace-dialog/index.vue b/src/pages/device/detail/components/filter-replace-dialog/index.vue new file mode 100644 index 0000000..a4f6c8a --- /dev/null +++ b/src/pages/device/detail/components/filter-replace-dialog/index.vue @@ -0,0 +1,115 @@ + + + + + diff --git a/src/pages/device/detail/components/run-mode-explain-dialog/index.vue b/src/pages/device/detail/components/run-mode-explain-dialog/index.vue new file mode 100644 index 0000000..149a785 --- /dev/null +++ b/src/pages/device/detail/components/run-mode-explain-dialog/index.vue @@ -0,0 +1,210 @@ + + + + + diff --git a/src/pages/device/detail/device-bluetooth-read.ts b/src/pages/device/detail/device-bluetooth-read.ts new file mode 100644 index 0000000..56b48b4 --- /dev/null +++ b/src/pages/device/detail/device-bluetooth-read.ts @@ -0,0 +1,92 @@ +import type { UpdateDeviceRuntimeBody } from './device-detail.types' + +const SERVICE_UUID = (import.meta.env.VITE_BLE_SERVICE_UUID as string | undefined)?.trim() +const RUNTIME_CHAR_UUID = (import.meta.env.VITE_BLE_RUNTIME_CHARACTERISTIC_UUID as string | undefined)?.trim() + +function normalizeUuid(value: string): string { + return value.replace(/-/g, '').toUpperCase() +} + +function readBleCharacteristic( + deviceId: string, + serviceId: string, + characteristicId: string, +): Promise { + return new Promise((resolve, reject) => { + const targetService = normalizeUuid(serviceId) + const targetChar = normalizeUuid(characteristicId) + + const timeout = setTimeout(() => { + cleanup() + reject(new Error('读取特征值超时')) + }, 5000) + + const onValue = (res: UniApp.OnBLECharacteristicValueChangeCallbackResult) => { + if (res.deviceId !== deviceId) return + if (normalizeUuid(res.serviceId) !== targetService) return + if (normalizeUuid(res.characteristicId) !== targetChar) return + cleanup() + resolve(res.value as ArrayBuffer) + } + + function cleanup() { + clearTimeout(timeout) + if (typeof uni.offBLECharacteristicValueChange === 'function') { + uni.offBLECharacteristicValueChange(onValue) + } + } + + if (typeof uni.onBLECharacteristicValueChange !== 'function') { + reject(new Error('当前环境不支持读取蓝牙特征值')) + return + } + + uni.onBLECharacteristicValueChange(onValue) + uni.readBLECharacteristicValue({ + deviceId, + serviceId, + characteristicId, + success: () => {}, + fail: (err) => { + cleanup() + reject(err) + }, + }) + }) +} + +function parseRuntimePayload(buffer: ArrayBuffer): Partial { + try { + const bytes = new Uint8Array(buffer) + const text = String.fromCharCode(...bytes).trim() + if (!text) return {} + const data = JSON.parse(text) as Record + const patch: Partial = {} + if (data.runMode != null) patch.runMode = String(data.runMode) + if (data.fanLevel != null) patch.fanLevel = String(data.fanLevel) + if (data.tvoc != null) patch.tvoc = Number(data.tvoc) + if (data.powerMode != null) patch.powerMode = String(data.powerMode) + if (data.charging != null) patch.charging = String(data.charging) + if (data.filterTotalDays != null) patch.filterTotalDays = String(data.filterTotalDays) + if (data.filterRemainDays != null) patch.filterRemainDays = String(data.filterRemainDays) + if (data.parkingShutdown != null) patch.parkingShutdown = String(data.parkingShutdown) + return patch + } catch { + return {} + } +} + +/** 若配置了 BLE 特征值 UUID,则尝试读取设备运行数据 */ +export async function readRuntimeFromBle( + bleDeviceId: string, +): Promise> { + if (!SERVICE_UUID || !RUNTIME_CHAR_UUID) return {} + if (typeof uni.readBLECharacteristicValue !== 'function') return {} + + try { + const buffer = await readBleCharacteristic(bleDeviceId, SERVICE_UUID, RUNTIME_CHAR_UUID) + return parseRuntimePayload(buffer) + } catch { + return {} + } +} diff --git a/src/pages/device/detail/device-detail.api.ts b/src/pages/device/detail/device-detail.api.ts new file mode 100644 index 0000000..775dbd8 --- /dev/null +++ b/src/pages/device/detail/device-detail.api.ts @@ -0,0 +1,24 @@ +import { request } from '@/api/request' +import type { + AppDeviceRuntimeVo, + DeviceRuntimeQueryBody, + UpdateDeviceRuntimeBody, +} from './device-detail.types' + +/** POST /app/device/runtime — 查询设备运行数据 */ +export function fetchDeviceRuntime(data: DeviceRuntimeQueryBody) { + return request({ + url: '/app/device/runtime', + method: 'POST', + data, + }) +} + +/** POST /app/device/updateRuntime — 更新设备运行数据 */ +export function updateDeviceRuntime(data: UpdateDeviceRuntimeBody) { + return request({ + url: '/app/device/updateRuntime', + method: 'POST', + data, + }) +} diff --git a/src/pages/device/detail/device-detail.scss b/src/pages/device/detail/device-detail.scss new file mode 100644 index 0000000..998d894 --- /dev/null +++ b/src/pages/device/detail/device-detail.scss @@ -0,0 +1,400 @@ +.device-detail-page { + min-height: 100vh; + background: #f5f6f8; + display: flex; + flex-direction: column; +} + +.device-detail-hero { + position: relative; + z-index: 1; + flex-shrink: 0; + padding: 0 32rpx 56rpx; + overflow: hidden; + pointer-events: none; +} + +.device-detail-hero__bar, +.device-detail-hero__status, +.device-detail-hero__metric-row, +.device-detail-hero__sync, +.device-detail-hero__settings, +.device-detail-hero__back { + pointer-events: auto; +} + +.device-detail-hero__bg { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 0; +} + +.device-detail-hero__bar { + position: relative; + z-index: 1; + height: 88rpx; + display: flex; + align-items: center; +} + +.device-detail-hero__back { + width: 72rpx; + height: 88rpx; + display: flex; + align-items: center; +} + +.device-detail-hero__back-icon { + font-size: 56rpx; + line-height: 1; + color: #fff; + font-weight: 300; +} + +.device-detail-hero__title { + flex: 1; + text-align: center; + font-size: 34rpx; + font-weight: 600; + color: #fff; +} + +.device-detail-hero__settings { + width: 72rpx; + height: 88rpx; + display: flex; + align-items: center; + justify-content: flex-end; +} + +.device-detail-hero__settings-icon { + width: 40rpx; + height: 40rpx; +} + +.device-detail-hero__status { + position: relative; + z-index: 1; + display: flex; + align-items: center; + justify-content: flex-start; + gap: 10rpx; + margin-top: 4rpx; + padding-left: 8rpx; +} + +.device-detail-hero__status-dot { + width: 10rpx; + height: 10rpx; + border-radius: 50%; + background: #fff; + + &--offline { + background: rgba(255, 255, 255, 0.55); + } +} + +.device-detail-hero__status-text { + font-size: 24rpx; + color: rgba(255, 255, 255, 0.92); +} + +.device-detail-hero__metric-row { + position: relative; + z-index: 1; + margin-top: 40rpx; + padding: 0 8rpx; + display: flex; + align-items: center; + justify-content: space-between; +} + +.device-detail-hero__metric { + display: flex; + align-items: baseline; + gap: 10rpx; +} + +.device-detail-hero__metric-value { + font-size: 96rpx; + font-weight: 700; + color: #fff; + line-height: 1; + letter-spacing: -2rpx; +} + +.device-detail-hero__metric-unit { + font-size: 26rpx; + color: rgba(255, 255, 255, 0.92); + padding-bottom: 8rpx; +} + +.device-detail-hero__quality { + width: 80rpx; + height: 80rpx; + border-radius: 50%; + background: rgba(255, 255, 255, 0.2); + display: flex; + align-items: center; + justify-content: center; + flex-shrink: 0; +} + +.device-detail-hero__quality-text { + font-size: 36rpx; + font-weight: 700; + color: #fff; +} + +.device-detail-hero__sync { + position: relative; + z-index: 1; + display: block; + margin-top: 24rpx; + padding-left: 8rpx; + text-align: left; + font-size: 22rpx; + color: rgba(255, 255, 255, 0.75); +} + +.device-detail-page__scroll { + position: relative; + z-index: 2; + flex: 1; + height: 0; + margin-top: -40rpx; +} + +.device-detail-panel { + padding: 0 24rpx calc(40rpx + env(safe-area-inset-bottom)); +} + +.device-detail-panel__dash { + height: 2rpx; + margin: 0 8rpx 24rpx; + border-top: 2rpx dashed rgba(255, 255, 255, 0.55); +} + +.device-detail-card { + background: #fff; + border-radius: 32rpx; + padding: 36rpx 28rpx 32rpx; + box-shadow: 0 4rpx 24rpx rgba(0, 0, 0, 0.04); + margin-bottom: 24rpx; +} + +.device-detail-card__section { + margin-bottom: 32rpx; +} + +.device-detail-card__head { + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 20rpx; +} + +.device-detail-card__head-left { + display: flex; + align-items: center; + gap: 10rpx; +} + +.device-detail-card__label { + font-size: 30rpx; + font-weight: 600; + color: $color-text; +} + +.device-detail-card__head-icon-wrap { + width: 40rpx; + height: 40rpx; + display: flex; + align-items: center; + justify-content: center; + flex-shrink: 0; +} + +.device-detail-card__head-icon { + width: 28rpx; + height: 28rpx; +} + +.device-detail-mode-list { + display: flex; + gap: 16rpx; +} + +.device-detail-mode-item { + flex: 1; + height: 80rpx; + border-radius: 16rpx; + background: #f3f4f6; + display: flex; + align-items: center; + justify-content: center; + box-sizing: border-box; +} + +.device-detail-mode-item--active { + background: linear-gradient(135deg, #3fd47f 0%, #21c25e 100%); + box-shadow: 0 6rpx 20rpx rgba(33, 194, 94, 0.28); +} + +.device-detail-mode-item__text { + font-size: 26rpx; + color: #333; +} + +.device-detail-mode-item--active .device-detail-mode-item__text { + color: #fff; + font-weight: 500; +} + +.device-detail-fan-list { + display: flex; + gap: 16rpx; +} + +.device-detail-fan-item { + flex: 1; + height: 80rpx; + border-radius: 16rpx; + background: #f3f4f6; + display: flex; + align-items: center; + justify-content: center; +} + +.device-detail-fan-item--active { + background: linear-gradient(135deg, #3fd47f 0%, #21c25e 100%); + box-shadow: 0 6rpx 20rpx rgba(33, 194, 94, 0.28); +} + +.device-detail-fan-item__text { + font-size: 28rpx; + color: #333; + font-weight: 500; +} + +.device-detail-fan-item--active .device-detail-fan-item__text { + color: #fff; +} + +.device-detail-card__power { + display: flex; + align-items: center; + justify-content: space-between; + padding-top: 4rpx; +} + +.device-detail-card__power-label { + font-size: 28rpx; + color: $color-text; +} + +.device-detail-card__power-value { + font-size: 28rpx; + font-weight: 600; + color: $color-primary; +} + +.device-detail-stats { + display: grid; + grid-template-columns: repeat(2, minmax(0, 1fr)); + gap: 20rpx; +} + +.device-detail-stat-card { + background: #fff; + border-radius: 28rpx; + padding: 28rpx 24rpx 24rpx; + box-shadow: 0 4rpx 24rpx rgba(0, 0, 0, 0.04); + min-height: 300rpx; + display: flex; + flex-direction: column; +} + +.device-detail-stat-card__head { + margin-bottom: 12rpx; +} + +.device-detail-stat-card__title { + font-size: 28rpx; + font-weight: 600; + color: $color-text; +} + +.device-detail-stat-card__value { + font-size: 52rpx; + font-weight: 700; + color: $color-text; + line-height: 1.1; + margin-bottom: 14rpx; +} + +.device-detail-stat-card__track { + height: 10rpx; + border-radius: 5rpx; + background: #eef0f3; + overflow: hidden; + margin-bottom: 14rpx; +} + +.device-detail-stat-card__fill { + height: 100%; + border-radius: 5rpx; + background: linear-gradient(90deg, #45d685 0%, #21c25e 100%); +} + +.device-detail-stat-card__desc { + font-size: 22rpx; + color: $color-text-secondary; + line-height: 1.4; + margin-bottom: 16rpx; +} + +.device-detail-stat-card__btn { + margin-top: auto; + height: 68rpx; + border-radius: 34rpx; + border: 2rpx solid #e8eaed; + display: flex; + align-items: center; + justify-content: center; + background: #fff; +} + +.device-detail-stat-card__btn--hover { + opacity: 0.85; +} + +.device-detail-stat-card__btn--done { + border-color: #e8eaed; + background: #fff; +} + +.device-detail-stat-card__btn-text { + font-size: 24rpx; + color: $color-text-secondary; +} + +.device-detail-stat-card__btn--done .device-detail-stat-card__btn-text { + color: $color-text-secondary; +} + +.device-detail-stat-card__tag { + margin-top: auto; + align-self: flex-start; + padding: 6rpx 18rpx; + border-radius: 20rpx; + background: #edf9f1; +} + +.device-detail-stat-card__tag-text { + font-size: 22rpx; + color: $color-primary; +} diff --git a/src/pages/device/detail/device-detail.types.ts b/src/pages/device/detail/device-detail.types.ts new file mode 100644 index 0000000..80137bf --- /dev/null +++ b/src/pages/device/detail/device-detail.types.ts @@ -0,0 +1,57 @@ +/** POST /app/device/runtime 查询参数 */ +export interface DeviceRuntimeQueryBody { + deviceId: number +} + +/** + * POST /app/device/runtime 返回 data + * status: 0未激活 1在线 2离线 + * runMode: 0自动 1车载 2桌面 + * fanLevel: 0标准 1强力 2低档 + * powerMode: 0USB 1电池 + * parkingShutdown: 0关机 1开机 + */ +export interface AppDeviceRuntimeVo { + deviceId?: number + deviceNo?: string + name?: string + status?: string + runMode?: string + fanLevel?: string + tvoc?: number + powerMode?: string + filterTotalDays?: string + filterRemainDays?: string + filterLife?: number + filterReplaceTime?: string + parkingShutdown?: string +} + +/** POST /app/device/updateRuntime */ +export interface UpdateDeviceRuntimeBody { + deviceId: number + runMode?: string + fanLevel?: string + status?: string + bluetoothConnected?: string + signalLevel?: string + charging?: string + tvoc?: number + powerMode?: string + filterTotalDays?: string + filterRemainDays?: string + parkingShutdown?: string +} + +export interface DeviceDetailRouteQuery { + deviceId?: string + name?: string + locationName?: string + status?: string + bluetoothConnected?: string + charging?: string + mac?: string +} + +export type RunMode = '0' | '1' | '2' +export type FanLevel = '0' | '1' | '2' diff --git a/src/pages/device/detail/device-detail.utils.ts b/src/pages/device/detail/device-detail.utils.ts new file mode 100644 index 0000000..d5ce388 --- /dev/null +++ b/src/pages/device/detail/device-detail.utils.ts @@ -0,0 +1,113 @@ +import type { AppDeviceRuntimeVo, FanLevel, RunMode } from './device-detail.types' + +export const RUN_MODE_OPTIONS = [ + { value: '0' as RunMode, label: '自动模式' }, + { value: '1' as RunMode, label: '车载模式' }, + { value: '2' as RunMode, label: '桌面模式' }, +] as const + +/** 自动模式下可选:标准 / 强力(对应 API fanLevel 0 / 1) */ +export const AUTO_FAN_LEVEL_OPTIONS = [ + { value: '0' as FanLevel, label: '标准' }, + { value: '1' as FanLevel, label: '强力' }, +] as const + +export function isAutoRunMode(runMode?: string): boolean { + return runMode === '0' +} + +/** 自动模式下 UI 仅展示标准/强力 */ +export function normalizeAutoFanLevel(runMode?: string, fanLevel?: string): FanLevel { + const level = (fanLevel as FanLevel) || '0' + if (!isAutoRunMode(runMode)) return level + return level === '1' ? '1' : '0' +} + +/** 状态:0未激活 1在线 2离线 */ +export function isDeviceOnline(status?: string): boolean { + return status === '1' +} + +/** 蓝牙连接状态:0未连接 1已连接 */ +export function isBluetoothConnected(value?: string): boolean { + return value === '1' +} + +export function formatConnectionText(options: { + status?: string + bluetoothConnected?: string + locationName: string +}): string { + const { status, bluetoothConnected, locationName } = options + if (status === '0') return `未激活 · ${locationName}` + if (status === '2' || !isDeviceOnline(status)) { + return `设备离线 · ${locationName}` + } + const btText = isBluetoothConnected(bluetoothConnected) ? '蓝牙已连接' : '蓝牙未连接' + return `${btText} · ${locationName}` +} + +/** 供电模式:0USB 1电池 */ +export function formatPowerMode(mode?: string): string { + if (mode === '1') return '电池供电模式' + return 'USB供电模式' +} + +export function formatTvocValue(tvoc?: number): string { + if (tvoc == null) return '--' + return Number(tvoc).toFixed(1) +} + +export function formatTvocLevel(tvoc?: number): string { + const value = tvoc ?? 0 + if (value <= 0.3) return '优' + if (value <= 0.6) return '良' + return '差' +} + +export function formatFilterRemainDays(runtime: AppDeviceRuntimeVo): string { + if (runtime.filterRemainDays) { + return `预计还可使用 ${runtime.filterRemainDays} 天` + } + const total = Number(runtime.filterTotalDays) + const life = runtime.filterLife ?? 0 + if (total > 0 && life > 0) { + const remain = Math.round(total * life / 100) + return `预计还可使用 ${remain} 天` + } + return '预计还可使用 -- 天' +} + +export function hasFilterReplaced(runtime: AppDeviceRuntimeVo): boolean { + return !!runtime.filterReplaceTime +} + +export interface RuntimeViewState { + deviceName: string + runMode: RunMode + fanLevel: FanLevel + tvoc: number | null + powerMode: string + filterLife: number + filterRemainText: string + filterReplaced: boolean + isOnline: boolean +} + +/** 将 /app/device/runtime 响应映射为详情页展示状态 */ +export function mapRuntimeToView( + data: AppDeviceRuntimeVo, + fallbackName = '未命名设备', +): RuntimeViewState { + return { + deviceName: data.name || fallbackName, + runMode: (data.runMode as RunMode) || '0', + fanLevel: normalizeAutoFanLevel(data.runMode, data.fanLevel), + tvoc: data.tvoc ?? null, + powerMode: data.powerMode || '0', + filterLife: data.filterLife ?? 0, + filterRemainText: formatFilterRemainDays(data), + filterReplaced: hasFilterReplaced(data), + isOnline: isDeviceOnline(data.status), + } +} diff --git a/src/pages/device/detail/index.vue b/src/pages/device/detail/index.vue new file mode 100644 index 0000000..4112c8d --- /dev/null +++ b/src/pages/device/detail/index.vue @@ -0,0 +1,206 @@ + + + + + diff --git a/src/pages/device/detail/use-device-bluetooth-sync.ts b/src/pages/device/detail/use-device-bluetooth-sync.ts new file mode 100644 index 0000000..eebb8f0 --- /dev/null +++ b/src/pages/device/detail/use-device-bluetooth-sync.ts @@ -0,0 +1,185 @@ +import { onUnload } from '@dcloudio/uni-app' +import { ref } from 'vue' +import { + BluetoothError, + closeBleConnection, + createBleConnection, + ensureBluetoothReady, + getBluetoothErrorMessage, + getDiscoveredBluetoothDevices, + isBluetoothApiSupported, + rssiToSignalLevel, + scanForBleDeviceByMac, + subscribeBleConnectionStateChange, +} from '@/utils/bluetooth' +import { updateDeviceRuntime } from './device-detail.api' +import { readRuntimeFromBle } from './device-bluetooth-read' +import type { UpdateDeviceRuntimeBody } from './device-detail.types' + +const SYNC_INTERVAL_MS = 15000 +const SCAN_TIMEOUT_MS = 15000 + +export interface DeviceBluetoothSyncContext { + getDeviceId: () => number + getMac: () => string | undefined + getRuntimePatch: () => Partial + onBluetoothConnectedChange: (connected: boolean) => void + onSyncTextChange: (text: string) => void + onSynced?: () => void | Promise +} + +export function useDeviceBluetoothSync(context: DeviceBluetoothSyncContext) { + const syncing = ref(false) + const bleDeviceId = ref() + let syncTimer: ReturnType | undefined + let unsubscribeConnection: (() => void) | undefined + let active = false + + function setSyncText(text: string) { + context.onSyncTextChange(text) + } + + async function reportDisconnected() { + const deviceId = context.getDeviceId() + if (!deviceId) return + context.onBluetoothConnectedChange(false) + try { + await updateDeviceRuntime({ + deviceId, + bluetoothConnected: '0', + signalLevel: '0', + }) + } catch { + // 上报失败时保留本地状态 + } + } + + async function connectAndSync(): Promise { + const deviceId = context.getDeviceId() + const mac = context.getMac() + if (!deviceId) return false + + if (!isBluetoothApiSupported()) { + setSyncText('当前环境不支持蓝牙同步') + return false + } + + if (!mac) { + setSyncText('缺少设备 MAC,无法蓝牙同步') + return false + } + + if (syncing.value) return false + syncing.value = true + + try { + setSyncText('正在连接蓝牙…') + await ensureBluetoothReady() + + let targetBleId = bleDeviceId.value + let foundDevice: UniApp.BluetoothDeviceInfo | null = null + + if (!targetBleId) { + foundDevice = await scanForBleDeviceByMac(mac, { timeoutMs: SCAN_TIMEOUT_MS }) + if (!foundDevice) { + setSyncText('未找到设备,请确认已开机并靠近手机') + await reportDisconnected() + return false + } + targetBleId = foundDevice.deviceId + bleDeviceId.value = targetBleId + } else { + const discovered = await getDiscoveredBluetoothDevices() + foundDevice = discovered.find((item) => item.deviceId === targetBleId) ?? null + } + + try { + await createBleConnection(targetBleId) + } catch (err) { + const btErr = err as BluetoothError + if (btErr.errCode !== 10010) throw err + } + + if (!targetBleId) { + setSyncText('蓝牙连接异常,请重试') + await reportDisconnected() + return false + } + + context.onBluetoothConnectedChange(true) + + const blePayload = await readRuntimeFromBle(targetBleId) + const runtimePatch = context.getRuntimePatch() + const signalLevel = rssiToSignalLevel(foundDevice?.RSSI) + + await updateDeviceRuntime({ + deviceId, + ...runtimePatch, + ...blePayload, + status: '1', + bluetoothConnected: '1', + signalLevel, + }) + + setSyncText('刚刚更新 · 数据实时同步中') + await context.onSynced?.() + return true + } catch (err) { + setSyncText(getBluetoothErrorMessage(err)) + bleDeviceId.value = undefined + await reportDisconnected() + return false + } finally { + syncing.value = false + } + } + + function startSyncLoop() { + if (active) return + active = true + + unsubscribeConnection = subscribeBleConnectionStateChange((res) => { + if (!bleDeviceId.value || res.deviceId !== bleDeviceId.value) return + if (!res.connected) { + bleDeviceId.value = undefined + void reportDisconnected() + setSyncText('蓝牙已断开,正在尝试重连…') + } + }) + + void connectAndSync() + + syncTimer = setInterval(() => { + void connectAndSync() + }, SYNC_INTERVAL_MS) + } + + async function stopSync() { + active = false + if (syncTimer) { + clearInterval(syncTimer) + syncTimer = undefined + } + unsubscribeConnection?.() + unsubscribeConnection = undefined + + const currentBleId = bleDeviceId.value + bleDeviceId.value = undefined + + if (currentBleId) { + await closeBleConnection(currentBleId).catch(() => {}) + await reportDisconnected() + } + } + + onUnload(() => { + void stopSync() + }) + + return { + syncing, + startSyncLoop, + stopSync, + connectAndSync, + } +} diff --git a/src/pages/device/detail/use-device-detail.ts b/src/pages/device/detail/use-device-detail.ts new file mode 100644 index 0000000..75a8845 --- /dev/null +++ b/src/pages/device/detail/use-device-detail.ts @@ -0,0 +1,223 @@ +import { onLoad } from '@dcloudio/uni-app' +import { computed, ref } from 'vue' +import { getErrorMessage } from '@/utils/api-error' +import { fetchDeviceList } from '../device.api' +import { fetchDeviceRuntime, updateDeviceRuntime } from './device-detail.api' +import type { AppDeviceRuntimeVo, DeviceDetailRouteQuery, FanLevel, RunMode } from './device-detail.types' +import { + AUTO_FAN_LEVEL_OPTIONS, + formatConnectionText, + formatPowerMode, + formatTvocLevel, + formatTvocValue, + isAutoRunMode, + isBluetoothConnected, + mapRuntimeToView, + RUN_MODE_OPTIONS, +} from './device-detail.utils' +import { useDeviceBluetoothSync } from './use-device-bluetooth-sync' + +export function useDeviceDetail() { + const deviceId = ref(0) + const deviceMac = ref() + const deviceName = ref('') + const locationName = ref('客厅') + const deviceStatus = ref() + const bluetoothConnected = ref(false) + const charging = ref(false) + const isOnline = ref(false) + const loading = ref(false) + const updating = ref(false) + + const runMode = ref('0') + const fanLevel = ref('0') + const tvoc = ref(null) + const powerMode = ref('0') + const filterLife = ref(0) + const filterRemainText = ref('预计还可使用 -- 天') + const filterReplaced = ref(false) + const filterReplaceDialogVisible = ref(false) + const batteryLevel = ref(null) + const syncText = ref('数据实时同步中') + + const tvocDisplay = computed(() => formatTvocValue(tvoc.value ?? undefined)) + const tvocLevel = computed(() => formatTvocLevel(tvoc.value ?? undefined)) + const powerModeText = computed(() => formatPowerMode(powerMode.value)) + const batteryDisplay = computed(() => + batteryLevel.value != null ? `${batteryLevel.value}%` : '--', + ) + const connectionText = computed(() => + formatConnectionText({ + status: deviceStatus.value, + bluetoothConnected: bluetoothConnected.value ? '1' : '0', + locationName: locationName.value, + }), + ) + const showFanLevelControl = computed(() => isAutoRunMode(runMode.value)) + const fanLevelOptions = computed(() => + showFanLevelControl.value ? AUTO_FAN_LEVEL_OPTIONS : [], + ) + + function applyRuntime(data: AppDeviceRuntimeVo) { + const view = mapRuntimeToView(data, deviceName.value) + deviceName.value = view.deviceName + runMode.value = view.runMode + fanLevel.value = view.fanLevel + tvoc.value = view.tvoc + powerMode.value = view.powerMode + filterLife.value = view.filterLife + filterRemainText.value = view.filterRemainText + filterReplaced.value = view.filterReplaced + isOnline.value = view.isOnline + if (data.status !== undefined) deviceStatus.value = data.status + syncText.value = '刚刚更新 · 数据实时同步中' + } + + async function refreshDeviceMeta() { + if (!deviceId.value) return + try { + const list = await fetchDeviceList() + const device = list?.find((item) => item.deviceId === deviceId.value) + if (!device) return + if (device.mac) deviceMac.value = device.mac + bluetoothConnected.value = isBluetoothConnected(device.bluetoothConnected) + charging.value = device.charging === '1' + if (device.status !== undefined) deviceStatus.value = device.status + isOnline.value = device.status === '1' + } catch { + // 列表刷新失败时保留路由参数状态 + } + } + + async function loadRuntime() { + if (!deviceId.value) return + loading.value = true + try { + const [runtime] = await Promise.all([ + fetchDeviceRuntime({ deviceId: deviceId.value }), + refreshDeviceMeta(), + ]) + applyRuntime(runtime) + } catch (err) { + uni.showToast({ title: getErrorMessage(err, '加载设备数据失败'), icon: 'none' }) + } finally { + loading.value = false + } + } + + async function patchRuntime(patch: { runMode?: RunMode; fanLevel?: FanLevel }) { + if (!deviceId.value || updating.value) return + updating.value = true + try { + await updateDeviceRuntime({ + deviceId: deviceId.value, + ...patch, + }) + const data = await fetchDeviceRuntime({ deviceId: deviceId.value }) + applyRuntime(data) + await refreshDeviceMeta() + } catch (err) { + uni.showToast({ title: getErrorMessage(err, '设置失败'), icon: 'none' }) + } finally { + updating.value = false + } + } + + function onSelectRunMode(mode: RunMode) { + if (runMode.value === mode) return + void patchRuntime({ runMode: mode }) + } + + function onSelectFanLevel(level: FanLevel) { + if (!isAutoRunMode(runMode.value)) return + if (fanLevel.value === level) return + void patchRuntime({ fanLevel: level }) + } + + function onSettings() { + uni.showToast({ title: '设备设置功能开发中', icon: 'none' }) + } + + function onFilterReplace() { + if (filterReplaced.value) return + filterReplaceDialogVisible.value = true + } + + function onConfirmFilterReplace() { + filterReplaced.value = true + uni.showToast({ title: '操作成功', icon: 'success' }) + } + + const { startSyncLoop } = useDeviceBluetoothSync({ + getDeviceId: () => deviceId.value, + getMac: () => deviceMac.value, + getRuntimePatch: () => ({ + runMode: runMode.value, + fanLevel: fanLevel.value, + tvoc: tvoc.value ?? undefined, + powerMode: powerMode.value, + charging: charging.value ? '1' : '0', + }), + onBluetoothConnectedChange: (connected) => { + bluetoothConnected.value = connected + if (connected) { + isOnline.value = true + deviceStatus.value = '1' + } + }, + onSyncTextChange: (text) => { + syncText.value = text + }, + onSynced: async () => { + await refreshDeviceMeta() + const data = await fetchDeviceRuntime({ deviceId: deviceId.value }) + applyRuntime(data) + }, + }) + + onLoad((query?: DeviceDetailRouteQuery) => { + deviceId.value = Number(query?.deviceId) || 0 + if (query?.name) deviceName.value = decodeURIComponent(String(query.name)) + if (query?.locationName) { + locationName.value = decodeURIComponent(String(query.locationName)) + } + if (query?.status) { + deviceStatus.value = String(query.status) + isOnline.value = query.status === '1' + } + if (query?.mac) deviceMac.value = decodeURIComponent(String(query.mac)) + bluetoothConnected.value = isBluetoothConnected(query?.bluetoothConnected) + charging.value = query?.charging === '1' + void loadRuntime().then(() => { + startSyncLoop() + }) + }) + + return { + deviceName, + connectionText, + isOnline, + tvocDisplay, + tvocLevel, + syncText, + runMode, + fanLevel, + powerModeText, + filterLife, + filterRemainText, + filterReplaced, + filterReplaceDialogVisible, + batteryDisplay, + batteryLevel, + charging, + loading, + showFanLevelControl, + runModeOptions: RUN_MODE_OPTIONS, + fanLevelOptions, + onSelectRunMode, + onSelectFanLevel, + onSettings, + onFilterReplace, + onConfirmFilterReplace, + } +} diff --git a/src/pages/device/device.api.ts b/src/pages/device/device.api.ts new file mode 100644 index 0000000..914ac03 --- /dev/null +++ b/src/pages/device/device.api.ts @@ -0,0 +1,11 @@ +import { request } from '@/api/request' +import type { AppDeviceVo, DeviceQueryBody } from './device.types' + +/** POST /app/device/list — 查询当前用户的设备列表 */ +export function fetchDeviceList(query: DeviceQueryBody = {}) { + return request({ + url: '/app/device/list', + method: 'POST', + data: query, + }) +} diff --git a/src/pages/device/device.types.ts b/src/pages/device/device.types.ts index ee5b96d..06df613 100644 --- a/src/pages/device/device.types.ts +++ b/src/pages/device/device.types.ts @@ -1,6 +1,7 @@ export interface RoomTab { id: string name: string + locationId?: number } export interface HotDeviceItem { @@ -8,3 +9,34 @@ export interface HotDeviceItem { name: string desc: string } + +/** POST /app/device/list 查询参数 */ +export interface DeviceQueryBody { + homeId?: number + locationId?: number +} + +/** 设备状态:0未激活 1在线 2离线 */ +export type DeviceStatus = '0' | '1' | '2' + +/** POST /app/device/list 返回项 */ +export interface AppDeviceVo { + deviceId?: number + deviceNo?: string + name?: string + imei?: string + mac?: string + homeId?: number + locationId?: number + status?: DeviceStatus | string + bluetoothConnected?: string + signalLevel?: string + charging?: string + bindTime?: string +} + +export interface DeviceListItem extends AppDeviceVo { + locationName: string + isOnline: boolean + isCharging: boolean +} diff --git a/src/pages/device/device.utils.ts b/src/pages/device/device.utils.ts new file mode 100644 index 0000000..53ab39a --- /dev/null +++ b/src/pages/device/device.utils.ts @@ -0,0 +1,67 @@ +import type { AppDeviceVo, DeviceListItem, RoomTab } from './device.types' + +/** 位置 ID → 房间名(后端暂无 locationName 时的本地映射) */ +const LOCATION_NAME_MAP: Record = { + 1: '客厅', + 2: '主卧', + 3: '卧室', + 4: '厨房', + 5: '卫生间', + 6: '书房', +} + +export function resolveLocationName(locationId?: number): string { + if (locationId == null) return '未分配' + return LOCATION_NAME_MAP[locationId] ?? `位置${locationId}` +} + +export function mapDeviceItem(device: AppDeviceVo): DeviceListItem { + return { + ...device, + locationName: resolveLocationName(device.locationId), + isOnline: device.status === '1', + isCharging: device.charging === '1', + } +} + +export function buildRoomTabs( + devices: DeviceListItem[], + customRooms: RoomTab[] = [], +): RoomTab[] { + const tabs: RoomTab[] = [{ id: 'all', name: '全部' }] + const seen = new Set() + + for (const device of devices) { + if (device.locationId == null) continue + const id = String(device.locationId) + if (seen.has(id)) continue + seen.add(id) + tabs.push({ + id, + name: device.locationName, + locationId: device.locationId, + }) + } + + for (const room of customRooms) { + if (seen.has(room.id)) continue + seen.add(room.id) + tabs.push(room) + } + + return tabs +} + +export function filterDevicesByRoom( + devices: DeviceListItem[], + activeRoomId: string, +): DeviceListItem[] { + if (activeRoomId === 'all') return devices + const locationId = Number(activeRoomId) + if (Number.isNaN(locationId)) return devices + return devices.filter((item) => item.locationId === locationId) +} + +export function countOnlineDevices(devices: DeviceListItem[]): number { + return devices.filter((item) => item.isOnline).length +} diff --git a/src/pages/device/index.vue b/src/pages/device/index.vue index c169a3b..eee39f6 100644 --- a/src/pages/device/index.vue +++ b/src/pages/device/index.vue @@ -2,8 +2,10 @@ - - + + + + + + + @@ -21,7 +40,10 @@ import { useTabPage } from '@/hooks/use-tab-page' import DeviceEmpty from './components/device-empty/index.vue' import DeviceHeader from './components/device-header/index.vue' +import DeviceList from './components/device-list/index.vue' import HotDevices from './components/hot-devices/index.vue' +import OperationSuccessToast from './components/operation-success-toast/index.vue' +import RoomLocationDialog from './components/room-location-dialog/index.vue' import RoomTabs from './components/room-tabs/index.vue' import { useDevice } from './use-device' @@ -31,14 +53,24 @@ const { homeName, rooms, activeRoomId, + devices, + onlineCount, + hasDevices, + loading, hotDevices, bindStepHint, + roomDialogVisible, + successToastVisible, selectRoom, onAddRoom, + onConfirmAddRoom, onStartBind, + onScan, onGoMall, onNotify, - onHomePicker, + onHomeManage, + onManageDevices, + onSelectDevice, } = useDevice() diff --git a/src/pages/device/use-device.ts b/src/pages/device/use-device.ts index 38e9e03..00c222f 100644 --- a/src/pages/device/use-device.ts +++ b/src/pages/device/use-device.ts @@ -1,10 +1,16 @@ -import { ref } from 'vue' -import type { HotDeviceItem, RoomTab } from './device.types' +import { onShow } from '@dcloudio/uni-app' +import { computed, ref } from 'vue' +import { getErrorMessage } from '@/utils/api-error' +import { fetchDeviceList } from './device.api' +import type { DeviceListItem, HotDeviceItem, RoomTab } from './device.types' +import { + buildRoomTabs, + countOnlineDevices, + filterDevicesByRoom, + mapDeviceItem, +} from './device.utils' -const DEFAULT_ROOMS: RoomTab[] = [ - { id: 'all', name: '全部' }, - { id: 'living', name: '客厅' }, -] +const CUSTOM_ROOMS_KEY = 'device_custom_rooms' const DEFAULT_HOT_DEVICES: HotDeviceItem[] = [ { @@ -19,25 +25,98 @@ const DEFAULT_HOT_DEVICES: HotDeviceItem[] = [ }, ] +function loadCustomRooms(): RoomTab[] { + try { + const raw = uni.getStorageSync(CUSTOM_ROOMS_KEY) as RoomTab[] | string + if (Array.isArray(raw)) return raw + if (typeof raw === 'string' && raw) return JSON.parse(raw) as RoomTab[] + } catch { + // ignore + } + return [] +} + +function saveCustomRooms(rooms: RoomTab[]) { + uni.setStorageSync(CUSTOM_ROOMS_KEY, rooms) +} + export function useDevice() { const homeName = ref('我的家') - const rooms = ref(DEFAULT_ROOMS) + const customRooms = ref(loadCustomRooms()) + const rooms = ref([{ id: 'all', name: '全部' }]) const activeRoomId = ref('all') + const devices = ref([]) + const loading = ref(false) const hotDevices = ref(DEFAULT_HOT_DEVICES) const bindStepHint = ref(3) + const roomDialogVisible = ref(false) + const successToastVisible = ref(false) + + const hasDevices = computed(() => devices.value.length > 0) + + const filteredDevices = computed(() => + filterDevicesByRoom(devices.value, activeRoomId.value), + ) + + const onlineCount = computed(() => countOnlineDevices(filteredDevices.value)) + + function refreshRoomTabs() { + rooms.value = buildRoomTabs(devices.value, customRooms.value) + if (!rooms.value.some((room) => room.id === activeRoomId.value)) { + activeRoomId.value = 'all' + } + } + + async function loadDevices() { + if (loading.value) return + loading.value = true + try { + const list = await fetchDeviceList() + devices.value = (list ?? []).map(mapDeviceItem) + refreshRoomTabs() + } catch (err) { + uni.showToast({ title: getErrorMessage(err, '加载设备失败'), icon: 'none' }) + } finally { + loading.value = false + } + } + + onShow(() => { + void loadDevices() + }) + + function showOperationSuccess() { + successToastVisible.value = true + } function selectRoom(id: string) { activeRoomId.value = id } function onAddRoom() { - uni.showToast({ title: '添加房间功能开发中', icon: 'none' }) + roomDialogVisible.value = true + } + + function onConfirmAddRoom(name: string) { + const room: RoomTab = { + id: `custom-${Date.now()}`, + name, + } + customRooms.value = [...customRooms.value, room] + saveCustomRooms(customRooms.value) + refreshRoomTabs() + activeRoomId.value = room.id + showOperationSuccess() } function onStartBind() { uni.navigateTo({ url: '/pages/add-device/index' }) } + function onScan() { + uni.showToast({ title: '扫一扫功能开发中', icon: 'none' }) + } + function onGoMall() { uni.showToast({ title: '商城功能开发中', icon: 'none' }) } @@ -46,21 +125,53 @@ export function useDevice() { uni.showToast({ title: '消息功能开发中', icon: 'none' }) } - function onHomePicker() { - uni.showToast({ title: '切换家庭功能开发中', icon: 'none' }) + function onHomeManage() { + uni.showToast({ title: '家庭管理功能开发中', icon: 'none' }) + } + + function onManageDevices() { + uni.showToast({ title: '设备管理功能开发中', icon: 'none' }) + } + + function onSelectDevice(device: DeviceListItem) { + if (!device.deviceId) { + uni.showToast({ title: '设备信息不完整', icon: 'none' }) + return + } + const q = [ + `deviceId=${device.deviceId}`, + `name=${encodeURIComponent(device.name || '')}`, + `locationName=${encodeURIComponent(device.locationName || '')}`, + `status=${device.status ?? ''}`, + `bluetoothConnected=${device.bluetoothConnected ?? '0'}`, + `charging=${device.charging ?? '0'}`, + ...(device.mac ? [`mac=${encodeURIComponent(device.mac)}`] : []), + ].join('&') + uni.navigateTo({ url: `/pages/device/detail/index?${q}` }) } return { homeName, rooms, activeRoomId, + devices: filteredDevices, + onlineCount, + hasDevices, + loading, hotDevices, bindStepHint, + roomDialogVisible, + successToastVisible, selectRoom, onAddRoom, + onConfirmAddRoom, onStartBind, + onScan, onGoMall, onNotify, - onHomePicker, + onHomeManage, + onManageDevices, + onSelectDevice, + loadDevices, } } diff --git a/src/pages/login/login.api.ts b/src/pages/login/login.api.ts index 664a852..7567811 100644 --- a/src/pages/login/login.api.ts +++ b/src/pages/login/login.api.ts @@ -1,4 +1,4 @@ -import { request } from '@/api/request' +import { requestLogin } from '@/api/request' import type { AuthTokenResult, LoginPasswordBody, LoginSmsBody } from '@/types/api' import type { LoginCodeForm, LoginPasswordForm } from './login.types' @@ -8,7 +8,7 @@ export function loginBySms(data: LoginCodeForm) { phonenumber: data.phone.trim(), smsCode: data.code.trim(), } - return request({ + return requestLogin({ url: '/app/auth/login/sms', method: 'POST', data: body, @@ -21,7 +21,7 @@ export function loginByPassword(data: LoginPasswordForm) { account: data.account.trim(), password: data.password, } - return request({ + return requestLogin({ url: '/app/auth/login/password', method: 'POST', data: body, diff --git a/src/pages/login/use-login.ts b/src/pages/login/use-login.ts index 94e0f9e..8b111d4 100644 --- a/src/pages/login/use-login.ts +++ b/src/pages/login/use-login.ts @@ -1,8 +1,8 @@ import { ref } from 'vue' import { useSmsCode } from '@/hooks/use-sms-code' import { isValidPassword, isValidPhone, isValidSmsCode } from '@/utils/validate' -import { saveAuthToken } from '@/api/auth' import { getErrorMessage } from '@/utils/api-error' +import { getStoredToken } from '@/utils/auth-token' import { SMS_CODE_SCENE } from '@/types/api' import { loginByPassword, loginBySms } from './login.api' import type { LoginMode } from './login.types' @@ -44,8 +44,7 @@ export function useLogin() { uni.showToast({ title: '请输入验证码', icon: 'none' }) return } - const smsRes = await loginBySms({ phone: phone.value, code: code.value }) - saveAuthToken(smsRes) + await loginBySms({ phone: phone.value, code: code.value }) } else { if (!account.value.trim()) { uni.showToast({ title: '请输入账号', icon: 'none' }) @@ -55,11 +54,14 @@ export function useLogin() { uni.showToast({ title: '密码至少 6 位', icon: 'none' }) return } - const pwdRes = await loginByPassword({ + await loginByPassword({ account: account.value, password: password.value, }) - saveAuthToken(pwdRes) + } + if (!getStoredToken()) { + uni.showToast({ title: '登录失败,未获取到令牌', icon: 'none' }) + return } uni.showToast({ title: '登录成功', icon: 'success' }) uni.reLaunch({ url: '/pages/device/index' }) diff --git a/src/static/完成@2x.png b/src/static/完成@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..90db3e2d3c4674665a1067ad1376640e528f9ff2 GIT binary patch literal 538 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 literal 0 HcmV?d00001 diff --git a/src/static/组 15227@2x.png b/src/static/组 15227@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..f046c7045dedfee996fc8b318c251a7821361530 GIT binary patch literal 1016 zcmVPx#1am@3R0s$N2z&@+hyVZsqDe$SR7i=nmQ83}RTRg6=f3I0&IE1ZB4Awz78|V5 zLPc7|O0>iekQR}_q*_E~a%TvP=uT9cu3Q9Xk;UY_HwnR@MF(y1W2HhC+N7xhnPZ1xhs;Nak`O-)VvRrL`ONdk9-AtoKi=}sn-b9I59=XC<7fE~cBs=gy4 zW7gW$TB#L_#b~KidKq{FxC^+Ts)y6*^yG#>&-1!~&w(f~+|tt0mq;X5s)M_(`xJ0B zolbvMZ5tgOy=7%(Wd!H}uBhsv_0a!;`F#F<$8pX8%|O4k_QXcnc%F9&2&}a`YWU=U z*HrbQsy>*>WPSlK;c+;TNaQ5YEFvSdV4?mFpABWLeI58jL~a+6vC6suSX^9uMOF6z zvr9`$uhxO#I8H}28trJnuNRmXkw-nxI|3lZV$ms;N^`(YV@y{nmAdA;+=x8S>j6Fh zez4Z=HKkJN31BBM-6+iW{ZZfd{YHG}=jV&SAHV~{!^8I(RXrTq-fwi*s@kKf#~ShN z@9!@IMb>VnXN`zF9KLM!C~MwQRr)$)95BG$0IRF3KW!4&u!11?5kN$C86Xb)lg(!T z-6~*vd;4#I0(Tmq3`DjH2GH5rSq?c-1N;Rv4Gav#w+iTa-fh4(;G$90S%7#vUbm2M zK$X}(8(wj<#OAB0oH2pIG_fgwY7B&m$>lX$kDLuj#f5!y%FOJV4JGC zB9g5)%Tz0u%WZFNZXQw9Zs3aJI9W+9&8j=C={NF z$K&Ti*acNRv>tX%h85-W`Q47=dGY=?IW*MM3WdVsK@dErs{6t*zb*U; m7DQwr2!cuARP_vcJ^crT%W?iL<{IY!0000Px#1am@3R0s$N2z&@+hyVZrXh}ptR7i=Hl}kv~K@`Tnxhi6h8+j{~x*7>Vg#;lj zgH}OLTJ(T65wvL$7~x8K5Y?g=L4*WtglN+PB0>zxP0)i1D}2-@EGh}jRMM_jel0o| z#%ccE+u58y=li}hbLM|$j+9_P18@hJ0@{H}4=V#M0uw+7uqG)_EO8n*2mI!*4Vv!* zb^%*~R~GwbehRn*q)S=gp^5r|9Y7^;8OSr!+JX7NCZNY+9brBfS)gCi5=o1lb9pb` zC~3E(3Q2dJbI&}iT+)!F0q0y}u?pI3H?<|6s(?DvTnVvMgkNQTs?-G}O`4xmY$sV@ z9C-I1$qU+kU^H4eP!H?_-dm|V1AG~90eB5O2TlQ*fV0=My}%xzt^l-noiPa<4unm> z53gm1?0W#H54bHr&db*<>**2T2(Ua-U7v{#0x6&ZXtf0QBm4&7DDV?_A=_P7!nv+X z>JFgO?nd--0Z)Lzl%%wzkr>JDgCxC)U{58LNy;W@hb2{~B#lX$mq7YxzA1vOmz0>s=gyJ#9X5eQZQUkxAkx}*oF z4!CE7_o}%7)B@YRd$2zc7Vg1g;1O^VSQu~)d5`3_*)H4!@FC$`qXsyuauirvjC|8} zl9`n_QS=#^9>X_0eo+KX?Hw8fI#a?W*oSYaM~cFxT{ zKD~+d7T5@6fZP0Q*MM?hvpsMC4~o_ZEC@#Ack^vPjkRs3#lD!&0q0Aa$=*V1fiB<| ka6E!vwb%C^urevnAMtHHKjkYdTmS$707*qoM6N<$f;*Nas{jB1 literal 0 HcmV?d00001 diff --git a/src/types/api.ts b/src/types/api.ts index 7284570..128cbd6 100644 --- a/src/types/api.ts +++ b/src/types/api.ts @@ -42,6 +42,10 @@ export interface RegisterBody { export interface AuthTokenResult { token?: string accessToken?: string + /** RuoYi-Vue-Plus 登录响应 */ + access_token?: string + expire_in?: number + client_id?: string } /** POST /app/auth/forgetPassword/verifyCode */ diff --git a/src/utils/auth-token.ts b/src/utils/auth-token.ts new file mode 100644 index 0000000..8f99af6 --- /dev/null +++ b/src/utils/auth-token.ts @@ -0,0 +1,44 @@ +const TOKEN_KEY = 'token' + +/** 从登录响应中提取 access_token(兼容 RuoYi-Vue-Plus) */ +export function extractAuthToken(payload: unknown): string { + if (payload == null) return '' + + if (typeof payload === 'string') { + return payload.replace(/^Bearer\s+/i, '').trim() + } + + if (typeof payload === 'object') { + const record = payload as Record + for (const key of ['access_token', 'accessToken', 'token']) { + const value = record[key] + if (typeof value === 'string' && value.trim()) { + return value.replace(/^Bearer\s+/i, '').trim() + } + } + if (record.data != null) { + const nested = extractAuthToken(record.data) + if (nested) return nested + } + } + + return '' +} + +export function getStoredToken(): string { + const raw = (uni.getStorageSync(TOKEN_KEY) as string) || '' + return raw.replace(/^Bearer\s+/i, '').trim() +} + +export function saveStoredToken(token: string): string { + const normalized = token.replace(/^Bearer\s+/i, '').trim() + if (!normalized) { + throw new Error('empty token') + } + uni.setStorageSync(TOKEN_KEY, normalized) + return normalized +} + +export function clearStoredToken(): void { + uni.removeStorageSync(TOKEN_KEY) +} diff --git a/src/utils/bluetooth.ts b/src/utils/bluetooth.ts new file mode 100644 index 0000000..b90d1ad --- /dev/null +++ b/src/utils/bluetooth.ts @@ -0,0 +1,292 @@ +export class BluetoothError extends Error { + errCode?: number + + constructor(message: string, errCode?: number) { + super(message) + this.name = 'BluetoothError' + this.errCode = errCode + } +} + +type UniFail = UniApp.GeneralCallbackResult + +function toBluetoothError(err: UniFail, fallback: string): BluetoothError { + const msg = err.errMsg || fallback + return new BluetoothError(getBluetoothErrorMessage({ errCode: err.errCode, errMsg: msg }), err.errCode) +} + +export function isBluetoothApiSupported(): boolean { + return ( + typeof uni.openBluetoothAdapter === 'function' + && typeof uni.startBluetoothDevicesDiscovery === 'function' + && typeof uni.onBluetoothDeviceFound === 'function' + ) +} + +function openAdapter(): Promise { + return new Promise((resolve, reject) => { + uni.openBluetoothAdapter({ + success: () => resolve(), + fail: (err) => reject(toBluetoothError(err, '蓝牙初始化失败')), + }) + }) +} + +function getAdapterState(): Promise { + return new Promise((resolve, reject) => { + uni.getBluetoothAdapterState({ + success: (res) => resolve(res), + fail: (err) => reject(toBluetoothError(err, '获取蓝牙状态失败')), + }) + }) +} + +/** 初始化蓝牙适配器并确认可用 */ +export async function ensureBluetoothReady(): Promise { + if (!isBluetoothApiSupported()) { + throw new BluetoothError('当前环境不支持蓝牙,请使用 App 或微信小程序') + } + + try { + await openAdapter() + } catch (err) { + const btErr = err as BluetoothError + if (btErr.errCode !== 10001) { + try { + const state = await getAdapterState() + if (state.available) return + } catch { + // fall through + } + } + throw err + } + + const state = await getAdapterState() + if (!state.available) { + throw new BluetoothError('本机不支持蓝牙', 10009) + } +} + +export function startBluetoothDiscovery(): Promise { + if (typeof uni.startBluetoothDevicesDiscovery !== 'function') { + return Promise.reject(new BluetoothError('当前环境不支持蓝牙扫描')) + } + return new Promise((resolve, reject) => { + uni.startBluetoothDevicesDiscovery({ + allowDuplicatesKey: false, + success: () => resolve(), + fail: (err) => reject(toBluetoothError(err, '开始扫描失败')), + }) + }) +} + +export function stopBluetoothDiscovery(): Promise { + if (typeof uni.stopBluetoothDevicesDiscovery !== 'function') { + return Promise.resolve() + } + return new Promise((resolve, reject) => { + uni.stopBluetoothDevicesDiscovery({ + success: () => resolve(), + fail: (err) => reject(toBluetoothError(err, '停止扫描失败')), + }) + }) +} + +export function getDiscoveredBluetoothDevices(): Promise { + if (typeof uni.getBluetoothDevices !== 'function') { + return Promise.resolve([]) + } + return new Promise((resolve, reject) => { + uni.getBluetoothDevices({ + success: (res) => resolve(res.devices ?? []), + fail: (err) => reject(toBluetoothError(err, '获取已发现设备失败')), + }) + }) +} + +export function subscribeBluetoothDevicesFound( + onFound: (devices: UniApp.BluetoothDeviceInfo[]) => void, +): () => void { + if (typeof uni.onBluetoothDeviceFound !== 'function') { + return () => {} + } + + const handler = (res: UniApp.OnBluetoothDeviceFoundCallbackResult) => { + if (res.devices?.length) onFound(res.devices) + } + uni.onBluetoothDeviceFound(handler) + + return () => { + if (typeof uni.offBluetoothDeviceFound !== 'function') return + uni.offBluetoothDeviceFound(handler) + } +} + +const MAC_PATTERN = /^([0-9A-Fa-f]{2}:){5}[0-9A-Fa-f]{2}$/ + +/** 规范化为大写 MAC(AA:BB:CC:DD:EE:FF) */ +export function normalizeMacAddress(value: string): string | undefined { + const trimmed = value.trim() + if (MAC_PATTERN.test(trimmed)) return trimmed.toUpperCase() + const compact = trimmed.replace(/[^0-9A-Fa-f]/g, '').toUpperCase() + if (compact.length !== 12) return undefined + return compact.replace(/(.{2})(?=.)/g, '$1:') +} + +/** 去掉分隔符的大写 MAC */ +export function compactMacAddress(value: string): string { + return value.replace(/[^0-9A-Fa-f]/g, '').toUpperCase() +} + +export function deviceMatchesMac( + device: UniApp.BluetoothDeviceInfo, + mac: string, +): boolean { + const target = compactMacAddress(mac) + if (!target) return false + + const deviceMac = normalizeMacAddress(device.deviceId) + if (deviceMac && compactMacAddress(deviceMac) === target) return true + + const compactId = compactMacAddress(device.deviceId) + return compactId === target +} + +/** RSSI → signalLevel:0离线 1弱 2一般 3强 */ +export function rssiToSignalLevel(rssi?: number): string { + if (rssi == null) return '0' + if (rssi >= -55) return '3' + if (rssi >= -70) return '2' + if (rssi >= -85) return '1' + return '0' +} + +export function createBleConnection(bleDeviceId: string): Promise { + if (typeof uni.createBLEConnection !== 'function') { + return Promise.reject(new BluetoothError('当前环境不支持蓝牙连接')) + } + return new Promise((resolve, reject) => { + uni.createBLEConnection({ + deviceId: bleDeviceId, + timeout: 10000, + success: () => resolve(), + fail: (err) => reject(toBluetoothError(err, '连接设备失败')), + }) + }) +} + +export function closeBleConnection(bleDeviceId: string): Promise { + if (typeof uni.closeBLEConnection !== 'function') { + return Promise.resolve() + } + return new Promise((resolve, reject) => { + uni.closeBLEConnection({ + deviceId: bleDeviceId, + success: () => resolve(), + fail: (err) => reject(toBluetoothError(err, '断开连接失败')), + }) + }) +} + +export function subscribeBleConnectionStateChange( + onChange: (res: { deviceId: string; connected: boolean }) => void, +): () => void { + if (typeof uni.onBLEConnectionStateChange !== 'function') { + return () => {} + } + uni.onBLEConnectionStateChange(onChange) + return () => { + if (typeof uni.offBLEConnectionStateChange !== 'function') return + uni.offBLEConnectionStateChange(onChange) + } +} + +/** 扫描并匹配指定 MAC 的 BLE 设备 */ +export async function scanForBleDeviceByMac( + mac: string, + options: { timeoutMs?: number } = {}, +): Promise { + const timeoutMs = options.timeoutMs ?? 15000 + const normalizedMac = normalizeMacAddress(mac) + if (!normalizedMac) return null + + await ensureBluetoothReady() + + let matched: UniApp.BluetoothDeviceInfo | null = null + + const pickMatch = (devices: UniApp.BluetoothDeviceInfo[]) => { + for (const device of devices) { + if (deviceMatchesMac(device, normalizedMac)) { + matched = device + return true + } + } + return false + } + + const existing = await getDiscoveredBluetoothDevices() + if (pickMatch(existing)) { + return matched + } + + const unsubscribe = subscribeBluetoothDevicesFound((devices) => { + pickMatch(devices) + }) + + try { + await startBluetoothDiscovery() + } catch (err) { + unsubscribe() + throw err + } + + const startedAt = Date.now() + while (!matched && Date.now() - startedAt < timeoutMs) { + await new Promise((resolve) => setTimeout(resolve, 300)) + const cached = await getDiscoveredBluetoothDevices() + if (pickMatch(cached)) break + } + + unsubscribe() + await stopBluetoothDiscovery().catch(() => {}) + return matched +} + +export function getBluetoothErrorMessage(err: unknown): string { + if (err instanceof BluetoothError) return err.message + + const code = (err as UniFail)?.errCode + const msg = (err as UniFail)?.errMsg + + switch (code) { + case 10001: + return '请先打开手机蓝牙后再试' + case 10002: + return '没有找到指定设备' + case 10003: + return '连接失败,请靠近设备后重试' + case 10004: + return '没有找到指定服务' + case 10005: + return '没有找到指定特征值' + case 10006: + return '当前连接已断开' + case 10007: + return '当前特征值不支持此操作' + case 10008: + return '蓝牙操作失败,请重试' + case 10009: + return '本机不支持低功耗蓝牙' + case 10010: + return '设备已连接' + case 10011: + return '配对设备需要配对码' + case 10012: + return '连接超时,请重试' + case 10013: + return '设备标识无效' + default: + return msg || '蓝牙不可用,请检查权限与系统设置' + } +} diff --git a/src/utils/static-assets.ts b/src/utils/static-assets.ts index 2d60f56..a8f1bda 100644 --- a/src/utils/static-assets.ts +++ b/src/utils/static-assets.ts @@ -4,8 +4,12 @@ import iconPhone from '@/static/icon-phone@2x.png' import iconCode from '@/static/icon-code@2x.png' import iconChecked from '@/static/icon-checked@2x.png' import iconPassword from '@/static/路径.png' +import iconDeviceDetailSettings from '@/static/路径1.png' +import deviceDetailHeroBg from '@/static/组 15226@2x.png' +import iconRunModeInfo from '@/static/组 15227@2x.png' import iconHomeSelector from '@/static/图标 4.png' import iconHomeArrow from '@/static/组 9.png' +import iconHomeSelected from '@/static/完成@2x.png' import iconNotify from '@/static/组 27.png' import iconDeviceEmpty from '@/static/图标 8.png' import iconDeviceNameEdit from '@/static/图标 9.png' @@ -33,10 +37,18 @@ export const staticAssets = { iconChecked, /** 路径.png — 密码框 */ iconPassword, + /** 路径1.png — 设备详情右上角设置 */ + iconDeviceDetailSettings, + /** 组 15226@2x.png — 设备详情页上半部分背景 */ + deviceDetailHeroBg, + /** 组 15227@2x.png — 设备详情「运行模式」旁提示图标 */ + iconRunModeInfo, /** 图标 4.png — 首页「我的家」 */ iconHomeSelector, /** 组 9.png — 「我的家」下拉箭头 */ iconHomeArrow, + /** 完成@2x.png — 「我的家」下拉选中图标 */ + iconHomeSelected, /** 组 27.png — 设备页右上角通知 */ iconNotify, /** 图标 8.png — 设备空状态中心图标 */ diff --git a/tmp-openapi.json b/tmp-openapi.json new file mode 100644 index 0000000..50acfa9 --- /dev/null +++ b/tmp-openapi.json @@ -0,0 +1 @@ +{"openapi":"3.1.0","info":{"title":"标题:RuoYi-Vue-Plus后台管理系统_接口文档","description":"描述:用于管理集团旗下公司的人员信息,具体包括XXX,XXX模块...","contact":{"name":"Lion Li","url":"https://gitee.com/dromara/RuoYi-Vue-Plus","email":"crazylionli@163.com"},"version":"版本号: 6.0.0"},"servers":[{"url":"http://192.168.0.222:8082","description":"Generated server url"}],"tags":[{"name":"优先队列 演示案例","description":"优先队列 演示案例\n

\n 轻量级队列 重量级数据量 请使用 MQ\n

\n 集群测试通过 同一个消息只会被消费一次 做好事务补偿\n 集群测试流程 在其中一台发送数据 两端分别调用获取接口 一次获取一条"},{"name":"mqtt 演示案例","description":"mqtt 演示案例\n

\n 用法文档 ...\n 测试server搭建:\n 可执行下载其他mqtt服务端搭建\n 也可使用 mica自带的server搭建 ..."},{"name":"测试国际化","description":"测试国际化"},{"name":"岗位信息操作处理","description":"岗位信息操作处理"},{"name":"首页","description":"首页"},{"name":"任务管理 控制层","description":"任务管理 控制层"},{"name":"Redis 发布订阅 演示案例","description":"Redis 发布订阅 演示案例"},{"name":"MCP Client 演示案例。","description":"MCP Client 演示案例。\n

\n 这些接口不是 MCP 协议接口,只是为了在后台系统中手动触发 MCP Client 调用。\n 真实 MCP Server 入口由 Spring AI 挂载到 `/mcp`。\n

\n 调用示例:\n

\n 当 `spring.ai.mcp.client.enabled=false` 时,接口会返回提示,不影响应用启动。"},{"name":"App 家庭管理控制器","description":"App 家庭管理控制器\n

\n 提供家庭的增删查及默认家庭切换功能,所有接口均需登录态。"},{"name":"角色信息","description":"角色信息"},{"name":"数据字典信息","description":"数据字典信息"},{"name":"文件上传 控制层","description":"文件上传 控制层"},{"name":"App 房间位置管理控制器","description":"App 房间位置管理控制器\n

\n 提供房间内房间位置的增删查改功能,所有接口均需登录态。\n 位置归属于家庭,操作时会自动校验当前用户对该家庭的所有权。"},{"name":"邮件发送案例","description":"邮件发送案例"},{"name":"spring-cache 演示案例","description":"spring-cache 演示案例"},{"name":"WebSocket 演示案例","description":"WebSocket 演示案例"},{"name":"测试数据库加解密功能","description":"测试数据库加解密功能"},{"name":"请假示例控制器,演示业务单据与流程引擎联动的典型用法。","description":"请假示例控制器,演示业务单据与流程引擎联动的典型用法。"},{"name":"流程定义管理 控制层","description":"流程定义管理 控制层"},{"name":"测试单表Controller","description":"测试单表Controller"},{"name":"部门信息","description":"部门信息"},{"name":"参数配置 信息操作处理","description":"参数配置 信息操作处理"},{"name":"App 设备控制器","description":"App 设备控制器\n

\n 提供设备绑定等接口,所有接口均需登录态。"},{"name":"测试分布式限流样例","description":"测试分布式限流样例"},{"name":"测试批量方法","description":"测试批量方法"},{"name":"SSE 控制器","description":"SSE 控制器"},{"name":"App 用户认证控制器","description":"App 用户认证控制器\n

\n 公开接口使用 {@link SaIgnore SaIgnore} 放行;退出接口需要登录态。"},{"name":"验证码操作处理","description":"验证码操作处理"},{"name":"用户信息","description":"用户信息"},{"name":"对象存储配置","description":"对象存储配置"},{"name":"测试数据脱敏控制器","description":"测试数据脱敏控制器\n

\n 默认管理员不过滤\n 需自行根据业务重写实现"},{"name":"个人信息 业务处理","description":"个人信息 业务处理"},{"name":"后台设备管理。","description":"后台设备管理。"},{"name":"流程 SpEL 表达式定义控制器,负责表达式规则的增删改查。","description":"流程 SpEL 表达式定义控制器,负责表达式规则的增删改查。"},{"name":"Snail AI OpenAPI 控制器","description":"Snail AI OpenAPI 控制器"},{"name":"菜单信息","description":"菜单信息"},{"name":"测试树表Controller","description":"测试树表Controller"},{"name":"流程实例管理 控制层","description":"流程实例管理 控制层"},{"name":"认证控制器,提供登录、注册、社交绑定和退出能力。","description":"认证控制器,提供登录、注册、社交绑定和退出能力。"},{"name":"社会化关系","description":"社会化关系"},{"name":"流程分类","description":"流程分类"},{"name":"系统访问记录","description":"系统访问记录"},{"name":"swagger3 用法示例","description":"swagger3 用法示例"},{"name":"App 用户资料控制器","description":"App 用户资料控制器"},{"name":"在线用户监控","description":"在线用户监控"},{"name":"短信演示案例","description":"短信演示案例\n 请先阅读文档 否则无法使用"},{"name":"SaToken 权限测试 接口文档输出测试","description":"SaToken 权限测试 接口文档输出测试"},{"name":"测试Excel功能","description":"测试Excel功能"},{"name":"操作日志记录","description":"操作日志记录"},{"name":"缓存监控","description":"缓存监控"},{"name":"公告 信息操作处理","description":"公告 信息操作处理"},{"name":"消息记录控制器","description":"消息记录控制器"},{"name":"客户端管理","description":"客户端管理"},{"name":"测试分布式锁的样例","description":"测试分布式锁的样例"}],"paths":{"/workflow/task/updateAssignee/{userId}":{"put":{"tags":["任务管理 控制层"],"summary":"批量修改任务办理人。","description":"批量修改任务办理人。

访问权限


**权限校验:**

- `workflow:task:edit`

","operationId":"updateAssignee","parameters":[{"name":"userId","in":"path","description":"办理人id","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"任务id","content":{"application/json":{"schema":{"type":"array","items":{"type":"integer","format":"int64"}}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"操作结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/workflow/spel":{"put":{"tags":["流程 SpEL 表达式定义控制器,负责表达式规则的增删改查。"],"summary":"修改流程 SpEL 表达式定义。","description":"修改流程 SpEL 表达式定义。

访问权限


**权限校验:**

- `workflow:spel:edit`

","operationId":"edit","requestBody":{"description":"表达式信息","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FlowSpelBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"操作结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}},"post":{"tags":["流程 SpEL 表达式定义控制器,负责表达式规则的增删改查。"],"summary":"新增流程 SpEL 表达式定义。","description":"新增流程 SpEL 表达式定义。

访问权限


**权限校验:**

- `workflow:spel:add`

","operationId":"add","requestBody":{"description":"表达式信息","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FlowSpelBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"操作结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/workflow/leave":{"put":{"tags":["请假示例控制器,演示业务单据与流程引擎联动的典型用法。"],"summary":"修改请假单。","description":"修改请假单。

访问权限


**权限校验:**

- `workflow:leave:edit`

","operationId":"edit_1","requestBody":{"description":"请假信息","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestLeaveBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"修改后的请假单","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RTestLeaveVo"}}}}}},"post":{"tags":["请假示例控制器,演示业务单据与流程引擎联动的典型用法。"],"summary":"新增请假单。","description":"新增请假单。

访问权限


**权限校验:**

- `workflow:leave:add`

","operationId":"add_1","requestBody":{"description":"请假信息","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestLeaveBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"新增后的请假单","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RTestLeaveVo"}}}}}}},"/workflow/instance/updateVariable":{"put":{"tags":["流程实例管理 控制层"],"summary":"修改流程变量。","description":"修改流程变量。

访问权限


**权限校验:**

- `workflow:instance:variable`

","operationId":"updateVariable","requestBody":{"description":"参数","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FlowVariableBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"操作结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/workflow/instance/cancelProcessApply":{"put":{"tags":["流程实例管理 控制层"],"summary":"撤销当前申请人发起的流程。","description":"撤销当前申请人发起的流程。

访问权限


**权限校验:**

- `workflow:instance:cancel`

","operationId":"cancelProcessApply","requestBody":{"description":"参数","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FlowCancelBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"操作结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/workflow/instance/active/{id}":{"put":{"tags":["流程实例管理 控制层"],"summary":"激活或挂起流程实例。","description":"激活或挂起流程实例。

访问权限


**权限校验:**

- `workflow:instance:active`

","operationId":"active","parameters":[{"name":"id","in":"path","description":"流程实例id","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"active","in":"query","description":"激活/挂起","required":true,"schema":{"type":"boolean"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"处理结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RBoolean"}}}}}}},"/workflow/definition":{"put":{"tags":["流程定义管理 控制层"],"summary":"修改流程定义。","description":"修改流程定义。

访问权限


**权限校验:**

- `workflow:definition:edit`

","operationId":"edit_2","requestBody":{"description":"流程定义信息","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FlowDefinition"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"操作结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RBoolean"}}}}}},"post":{"tags":["流程定义管理 控制层"],"summary":"新增流程定义并执行格式校验。","description":"新增流程定义并执行格式校验。

访问权限


**权限校验:**

- `workflow:definition:add`

","operationId":"add_2","requestBody":{"description":"流程定义信息","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FlowDefinition"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"操作结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RBoolean"}}}}}}},"/workflow/definition/unPublish/{id}":{"put":{"tags":["流程定义管理 控制层"],"summary":"取消发布流程定义。","description":"取消发布流程定义。

访问权限


**权限校验:**

- `workflow:definition:publish`

","operationId":"unPublish","parameters":[{"name":"id","in":"path","description":"流程定义id","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"操作结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RBoolean"}}}}}}},"/workflow/definition/publish/{id}":{"put":{"tags":["流程定义管理 控制层"],"summary":"发布流程定义,使其进入可用状态。","description":"发布流程定义,使其进入可用状态。

访问权限


**权限校验:**

- `workflow:definition:publish`

","operationId":"publish","parameters":[{"name":"id","in":"path","description":"流程定义id","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"发布结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RBoolean"}}}}}}},"/workflow/definition/active/{id}":{"put":{"tags":["流程定义管理 控制层"],"summary":"激活或挂起流程定义。","description":"激活或挂起流程定义。

访问权限


**权限校验:**

- `workflow:definition:active`

","operationId":"active_1","parameters":[{"name":"id","in":"path","description":"流程定义id","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"active","in":"query","description":"激活/挂起","required":true,"schema":{"type":"boolean"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"处理结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RBoolean"}}}}}}},"/workflow/category":{"put":{"tags":["流程分类"],"summary":"修改流程分类,并校验名称唯一及父子关系合法性。","description":"修改流程分类,并校验名称唯一及父子关系合法性。

访问权限


**权限校验:**

- `workflow:category:edit`

","operationId":"edit_3","requestBody":{"description":"分类信息","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FlowCategoryBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"操作结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}},"post":{"tags":["流程分类"],"summary":"新增流程分类,并校验分类名称唯一性。","description":"新增流程分类,并校验分类名称唯一性。

访问权限


**权限校验:**

- `workflow:category:add`

","operationId":"add_3","requestBody":{"description":"分类信息","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FlowCategoryBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"操作结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/system/user":{"put":{"tags":["用户信息"],"summary":"修改用户。","description":"修改用户。

访问权限


**权限校验:**

- `system:user:edit`

","operationId":"edit_4","requestBody":{"description":"用户编辑参数","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SysUserBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"操作结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}},"post":{"tags":["用户信息"],"summary":"新增用户。","description":"新增用户。

访问权限


**权限校验:**

- `system:user:add`

","operationId":"add_4","requestBody":{"description":"用户新增参数","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SysUserBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"操作结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/system/user/resetPwd":{"put":{"tags":["用户信息"],"summary":"重置指定用户密码。","description":"重置指定用户密码。

访问权限


**权限校验:**

- `system:user:resetPwd`

","operationId":"resetPwd","requestBody":{"description":"用户参数","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SysUserBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"操作结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/system/user/profile":{"get":{"tags":["个人信息 业务处理"],"summary":"获取当前登录用户的个人中心信息。","description":"获取当前登录用户的个人中心信息。","operationId":"profile","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"用户信息、角色组和岗位组","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RProfileVo"}}}}}},"put":{"tags":["个人信息 业务处理"],"summary":"修改当前登录用户的个人资料。","description":"修改当前登录用户的个人资料。","operationId":"updateProfile","requestBody":{"description":"个人资料参数","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SysUserProfileBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"操作结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/system/user/profile/updatePwd":{"put":{"tags":["个人信息 业务处理"],"summary":"重置密码","description":"重置密码","operationId":"updatePwd","requestBody":{"description":"新旧密码","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SysUserPasswordBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"操作结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/system/user/changeStatus":{"put":{"tags":["用户信息"],"summary":"修改用户状态。","description":"修改用户状态。

访问权限


**权限校验:**

- `system:user:edit`

","operationId":"changeStatus","requestBody":{"description":"用户参数","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SysUserBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"操作结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/system/user/authRole":{"put":{"tags":["用户信息"],"summary":"用户授权角色","description":"用户授权角色

访问权限


**权限校验:**

- `system:user:edit`

","operationId":"insertAuthRole","parameters":[{"name":"userId","in":"query","description":"用户Id","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"roleIds","in":"query","description":"角色ID串","required":true,"schema":{"type":"array","items":{"type":"integer","format":"int64"}}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"操作结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/system/role":{"put":{"tags":["角色信息"],"summary":"修改角色基础信息(不包含菜单权限、数据权限)。","description":"修改角色基础信息(不包含菜单权限、数据权限)。

访问权限


**权限校验:**

- `system:role:edit`

","operationId":"edit_5","requestBody":{"description":"角色参数","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SysRoleBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"操作结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}},"post":{"tags":["角色信息"],"summary":"新增角色。","description":"新增角色。

访问权限


**权限校验:**

- `system:role:add`

","operationId":"add_5","requestBody":{"description":"角色参数","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SysRoleBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"操作结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/system/role/permission":{"put":{"tags":["角色信息"],"summary":"修改角色权限信息(菜单权限 + 数据权限)。","description":"修改角色权限信息(菜单权限 + 数据权限)。

访问权限


**权限校验:**

- `system:role:edit`

","operationId":"editPermission","requestBody":{"description":"角色参数","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SysRoleBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"操作结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/system/role/changeStatus":{"put":{"tags":["角色信息"],"summary":"修改角色状态。","description":"修改角色状态。

访问权限


**权限校验:**

- `system:role:edit`

","operationId":"changeStatus_1","requestBody":{"description":"角色参数","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SysRoleBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"操作结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/system/role/authUser/selectAll":{"put":{"tags":["角色信息"],"summary":"批量选择用户授权","description":"批量选择用户授权

访问权限


**权限校验:**

- `system:role:edit`

","operationId":"selectAuthUserAll","parameters":[{"name":"roleId","in":"query","description":"角色ID","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"userIds","in":"query","description":"用户ID串","required":true,"schema":{"type":"array","items":{"type":"integer","format":"int64"}}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"操作结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/system/role/authUser/cancel":{"put":{"tags":["角色信息"],"summary":"取消授权用户。","description":"取消授权用户。

访问权限


**权限校验:**

- `system:role:edit`

","operationId":"cancelAuthUser","requestBody":{"description":"用户角色关系","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SysUserRole"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"操作结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/system/role/authUser/cancelAll":{"put":{"tags":["角色信息"],"summary":"批量取消授权用户","description":"批量取消授权用户

访问权限


**权限校验:**

- `system:role:edit`

","operationId":"cancelAuthUserAll","parameters":[{"name":"roleId","in":"query","description":"角色ID","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"userIds","in":"query","description":"用户ID串","required":true,"schema":{"type":"array","items":{"type":"integer","format":"int64"}}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"操作结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/system/post":{"put":{"tags":["岗位信息操作处理"],"summary":"修改岗位。","description":"修改岗位。

访问权限


**权限校验:**

- `system:post:edit`

","operationId":"edit_6","requestBody":{"description":"岗位参数","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SysPostBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"操作结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}},"post":{"tags":["岗位信息操作处理"],"summary":"新增岗位。","description":"新增岗位。

访问权限


**权限校验:**

- `system:post:add`

","operationId":"add_6","requestBody":{"description":"岗位参数","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SysPostBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"操作结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/system/notice":{"put":{"tags":["公告 信息操作处理"],"summary":"修改通知公告。","description":"修改通知公告。

访问权限


**权限校验:**

- `system:notice:edit`

","operationId":"edit_7","requestBody":{"description":"公告参数","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SysNoticeBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"操作结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}},"post":{"tags":["公告 信息操作处理"],"summary":"新增通知公告,并向在线用户广播公告摘要。","description":"新增通知公告,并向在线用户广播公告摘要。

访问权限


**权限校验:**

- `system:notice:add`

","operationId":"add_7","requestBody":{"description":"公告参数","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SysNoticeBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"操作结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/system/menu":{"put":{"tags":["菜单信息"],"summary":"修改菜单。","description":"修改菜单。

访问权限


**权限校验:**

- `system:menu:edit`

**角色校验:**

- `superadmin`
","operationId":"edit_8","requestBody":{"description":"菜单参数","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SysMenuBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"操作结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}},"post":{"tags":["菜单信息"],"summary":"新增菜单。","description":"新增菜单。

访问权限


**权限校验:**

- `system:menu:add`

**角色校验:**

- `superadmin`
","operationId":"add_8","requestBody":{"description":"菜单参数","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SysMenuBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"操作结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/system/dict/type":{"put":{"tags":["数据字典信息"],"summary":"修改字典类型。","description":"修改字典类型。

访问权限


**权限校验:**

- `system:dict:edit`

","operationId":"edit_9","requestBody":{"description":"字典类型参数","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SysDictTypeBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"操作结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}},"post":{"tags":["数据字典信息"],"summary":"新增字典类型。","description":"新增字典类型。

访问权限


**权限校验:**

- `system:dict:add`

","operationId":"add_9","requestBody":{"description":"字典类型参数","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SysDictTypeBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"操作结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/system/dict/data":{"put":{"tags":["数据字典信息"],"summary":"修改字典数据。","description":"修改字典数据。

访问权限


**权限校验:**

- `system:dict:edit`

","operationId":"edit_10","requestBody":{"description":"字典数据参数","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SysDictDataBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"操作结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}},"post":{"tags":["数据字典信息"],"summary":"新增字典数据。","description":"新增字典数据。

访问权限


**权限校验:**

- `system:dict:add`

","operationId":"add_10","requestBody":{"description":"字典数据参数","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SysDictDataBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"操作结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/system/dept":{"put":{"tags":["部门信息"],"summary":"修改部门。","description":"修改部门。

访问权限


**权限校验:**

- `system:dept:edit`

","operationId":"edit_11","requestBody":{"description":"部门参数","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SysDeptBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"操作结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}},"post":{"tags":["部门信息"],"summary":"新增部门。","description":"新增部门。

访问权限


**权限校验:**

- `system:dept:add`

","operationId":"add_11","requestBody":{"description":"部门参数","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SysDeptBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"操作结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/system/config":{"put":{"tags":["参数配置 信息操作处理"],"summary":"修改参数配置。","description":"修改参数配置。

访问权限


**权限校验:**

- `system:config:edit`

","operationId":"edit_12","requestBody":{"description":"参数配置","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SysConfigBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"操作结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}},"post":{"tags":["参数配置 信息操作处理"],"summary":"新增参数配置。","description":"新增参数配置。

访问权限


**权限校验:**

- `system:config:add`

","operationId":"add_12","requestBody":{"description":"参数配置","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SysConfigBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"操作结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/system/config/updateByKey":{"put":{"tags":["参数配置 信息操作处理"],"summary":"根据参数键名修改参数配置。","description":"根据参数键名修改参数配置。

访问权限


**权限校验:**

- `system:config:edit`

","operationId":"updateByKey","requestBody":{"description":"参数配置","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SysConfigBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"操作结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/system/client":{"put":{"tags":["客户端管理"],"summary":"修改客户端配置,避免重复占用同一个客户端 key。","description":"修改客户端配置,避免重复占用同一个客户端 key。

访问权限


**权限校验:**

- `system:client:edit`

","operationId":"edit_13","requestBody":{"description":"客户端信息","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SysClientBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"操作结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}},"post":{"tags":["客户端管理"],"summary":"新增客户端配置,入库前先校验客户端 key 是否唯一。","description":"新增客户端配置,入库前先校验客户端 key 是否唯一。

访问权限


**权限校验:**

- `system:client:add`

","operationId":"add_13","requestBody":{"description":"客户端信息","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SysClientBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"操作结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/system/client/changeStatus":{"put":{"tags":["客户端管理"],"summary":"修改客户端启停状态。","description":"修改客户端启停状态。

访问权限


**权限校验:**

- `system:client:edit`

","operationId":"changeStatus_2","requestBody":{"description":"客户端状态信息","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SysClientBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"操作结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/resource/oss/config":{"put":{"tags":["对象存储配置"],"summary":"修改对象存储配置。","description":"修改对象存储配置。

访问权限


**权限校验:**

- `system:ossConfig:edit`

","operationId":"edit_14","requestBody":{"description":"配置信息","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SysOssConfigBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"操作结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}},"post":{"tags":["对象存储配置"],"summary":"新增对象存储配置。","description":"新增对象存储配置。

访问权限


**权限校验:**

- `system:ossConfig:add`

","operationId":"add_14","requestBody":{"description":"配置信息","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SysOssConfigBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"操作结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/resource/oss/config/changeStatus":{"put":{"tags":["对象存储配置"],"summary":"切换对象存储配置启用状态,并同步更新当前生效配置。","description":"切换对象存储配置启用状态,并同步更新当前生效配置。

访问权限


**权限校验:**

- `system:ossConfig:edit`

","operationId":"changeStatus_3","requestBody":{"description":"状态变更信息","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SysOssConfigBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"操作结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/device/device":{"put":{"tags":["后台设备管理。"],"summary":"修改设备名称、房间和备注。","description":"修改设备名称、房间和备注。

访问权限


**权限校验:**

- `device:device:edit`

","operationId":"edit_15","requestBody":{"description":"设备档案","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CzDeviceBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"操作结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}},"post":{"tags":["后台设备管理。"],"summary":"新增设备档案。","description":"新增设备档案。

访问权限


**权限校验:**

- `device:device:add`

","operationId":"add_15","requestBody":{"description":"设备档案","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CzDeviceBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"操作结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/demo/tree":{"put":{"tags":["测试树表Controller"],"summary":"修改测试树表","description":"修改测试树表

访问权限


**权限校验:**

- `demo:tree:edit`

","operationId":"edit_16","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestTreeBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}},"post":{"tags":["测试树表Controller"],"summary":"新增测试树表","description":"新增测试树表

访问权限


**权限校验:**

- `demo:tree:add`

","operationId":"add_16","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestTreeBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/demo/demo":{"put":{"tags":["测试单表Controller"],"summary":"修改测试单表","description":"修改测试单表

访问权限


**权限校验:**

- `demo:demo:edit`

","operationId":"edit_17","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestDemoBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}},"post":{"tags":["测试单表Controller"],"summary":"新增测试单表","description":"新增测试单表

访问权限


**权限校验:**

- `demo:demo:add`

","operationId":"add_17","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestDemoBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/app/home/setDefault/{homeId}":{"put":{"tags":["App 家庭管理控制器"],"summary":"切换默认家庭\n ","description":"切换默认家庭\n

\n 将指定家庭设为默认,同时取消其他家庭的默认标识。","operationId":"setDefaultHome","parameters":[{"name":"homeId","in":"path","description":"要设为默认的家庭ID","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"操作结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/api/snail/chat/conversations":{"get":{"tags":["snail-ai-chat-gateway-controller"],"operationId":"listConversations","parameters":[{"name":"agentId","in":"query","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","format":"int32","default":1}},{"name":"size","in":"query","required":false,"schema":{"type":"integer","format":"int32","default":50}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/PageResultListOpenApiConversationVO"}}}}}},"put":{"tags":["snail-ai-chat-gateway-controller"],"operationId":"updateConversationTitle","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OpenApiConversationUpdateTitleRequest"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResultVoid"}}}}}},"post":{"tags":["snail-ai-chat-gateway-controller"],"operationId":"createConversation","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OpenApiCreateConversationRequest"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResultOpenApiConversationVO"}}}}}},"delete":{"tags":["snail-ai-chat-gateway-controller"],"operationId":"deleteConversation","parameters":[{"name":"agentId","in":"query","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"conversationId","in":"query","required":true,"schema":{"type":"string"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResultVoid"}}}}}}},"/workflow/task/urgeTask":{"post":{"tags":["任务管理 控制层"],"summary":"催办任务。","description":"催办任务。

访问权限


**权限校验:**

- `workflow:task:edit`

","operationId":"urgeTask","requestBody":{"description":"参数","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FlowUrgeTaskBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/workflow/task/terminationTask":{"post":{"tags":["任务管理 控制层"],"summary":"终止流程任务。","description":"终止流程任务。","operationId":"terminationTask","requestBody":{"description":"参数","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FlowTerminationBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"处理结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RBoolean"}}}}}}},"/workflow/task/taskOperation/{taskOperation}":{"post":{"tags":["任务管理 控制层"],"summary":"执行任务操作,例如委派、转办、加签或减签。","description":"执行任务操作,例如委派、转办、加签或减签。","operationId":"taskOperation","parameters":[{"name":"taskOperation","in":"path","description":"操作类型,委派 delegateTask、转办 transferTask、加签 addSignature、减签 reductionSignature","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"参数","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaskOperationBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"操作结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/workflow/task/startWorkFlow":{"post":{"tags":["任务管理 控制层"],"summary":"启动流程任务。","description":"启动流程任务。","operationId":"startWorkFlow","requestBody":{"description":"启动流程参数","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StartProcessBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"启动结果及后续流程信息","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RStartProcessReturnDTO"}}}}}}},"/workflow/task/getNextNodeList":{"post":{"tags":["任务管理 控制层"],"summary":"获取流程下一节点信息。","description":"获取流程下一节点信息。","operationId":"getNextNodeList","requestBody":{"description":"参数","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FlowNextNodeBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"下一节点列表","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RListFlowNode"}}}}}}},"/workflow/task/completeTask":{"post":{"tags":["任务管理 控制层"],"summary":"办理当前任务节点。","description":"办理当前任务节点。","operationId":"completeTask","requestBody":{"description":"办理任务参数","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompleteTaskBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"操作结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/workflow/task/backProcess":{"post":{"tags":["任务管理 控制层"],"summary":"驳回审批到前置节点。","description":"驳回审批到前置节点。","operationId":"backProcess","requestBody":{"description":"参数","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BackProcessBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"操作结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/workflow/leave/submitAndFlowStart":{"post":{"tags":["请假示例控制器,演示业务单据与流程引擎联动的典型用法。"],"summary":"提交请假单并同步发起流程。","description":"提交请假单并同步发起流程。

访问权限


**权限校验:**

- `workflow:leave:add`

","operationId":"submitAndFlowStart","requestBody":{"description":"请假信息","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestLeaveBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"提交后的请假单","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RTestLeaveVo"}}}}}}},"/workflow/leave/export":{"post":{"tags":["请假示例控制器,演示业务单据与流程引擎联动的典型用法。"],"summary":"导出请假列表。","description":"导出请假列表。

访问权限


**权限校验:**

- `workflow:leave:export`

","operationId":"export","parameters":[{"name":"bo","in":"query","description":"查询条件","required":true,"schema":{"$ref":"#/components/schemas/TestLeaveBo"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK"}}}},"/workflow/instance/invalid":{"post":{"tags":["流程实例管理 控制层"],"summary":"作废流程实例。","description":"作废流程实例。

访问权限


**权限校验:**

- `workflow:instance:invalid`

","operationId":"invalid","requestBody":{"description":"参数","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FlowInvalidBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"处理结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RBoolean"}}}}}}},"/workflow/definition/importDef":{"post":{"tags":["流程定义管理 控制层"],"summary":"通过文件导入流程定义。","description":"通过文件导入流程定义。

访问权限


**权限校验:**

- `workflow:definition:import`

","operationId":"importDef","parameters":[{"name":"file","in":"query","description":"文件","required":true,"schema":{"type":"string","format":"binary"}},{"name":"category","in":"query","description":"分类","required":true,"schema":{"type":"string"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"导入结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RBoolean"}}}}}}},"/workflow/definition/exportDef/{id}":{"post":{"tags":["流程定义管理 控制层"],"summary":"导出流程定义文件。","description":"导出流程定义文件。

访问权限


**权限校验:**

- `workflow:definition:export`

","operationId":"exportDef","parameters":[{"name":"id","in":"path","description":"流程定义id","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"500":{"description":"Internal Server Error"},"200":{"description":"OK"}}}},"/workflow/definition/copy/{id}":{"post":{"tags":["流程定义管理 控制层"],"summary":"复制一份流程定义,便于快速创建相似流程。","description":"复制一份流程定义,便于快速创建相似流程。

访问权限


**权限校验:**

- `workflow:definition:copy`

","operationId":"copy","parameters":[{"name":"id","in":"path","description":"流程定义id","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"复制结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RBoolean"}}}}}}},"/workflow/category/export":{"post":{"tags":["流程分类"],"summary":"导出流程分类列表。","description":"导出流程分类列表。

访问权限


**权限校验:**

- `workflow:category:export`

","operationId":"export_1","parameters":[{"name":"bo","in":"query","description":"查询条件","required":true,"schema":{"$ref":"#/components/schemas/FlowCategoryBo"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK"}}}},"/warm-flow/save-json":{"post":{"tags":["warm-flow-controller"],"operationId":"saveJson","parameters":[{"name":"onlyNodeSkip","in":"header","required":true,"schema":{"type":"boolean"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DefJson"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"500":{"description":"Internal Server Error"},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiResultVoid"}}}}}}},"/warm-flow/form-content":{"post":{"tags":["warm-flow-controller"],"operationId":"saveFormContent","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FlowDto"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiResultVoid"}}}}}}},"/warm-flow/execute/handle":{"post":{"tags":["warm-flow-controller"],"operationId":"handle","parameters":[{"name":"taskId","in":"query","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"skipType","in":"query","required":true,"schema":{"type":"string"}},{"name":"message","in":"query","required":true,"schema":{"type":"string"}},{"name":"nodeCode","in":"query","required":false,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","additionalProperties":{}}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiResultInstance"}}}}}}},"/system/user/importTemplate":{"post":{"tags":["用户信息"],"summary":"导出用户导入模板。","description":"导出用户导入模板。","operationId":"importTemplate","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK"}}}},"/system/user/importData":{"post":{"tags":["用户信息"],"summary":"导入数据","description":"导入数据

访问权限


**权限校验:**

- `system:user:import`

","operationId":"importData","requestBody":{"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary","description":"导入文件"},"updateSupport":{"type":"boolean","description":"是否更新已存在数据"}},"required":["file"]}}}},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"500":{"description":"Internal Server Error"},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/system/user/export":{"post":{"tags":["用户信息"],"summary":"导出符合条件的用户列表。","description":"导出符合条件的用户列表。

访问权限


**权限校验:**

- `system:user:export`

","operationId":"export_2","parameters":[{"name":"user","in":"query","description":"用户查询条件","required":true,"schema":{"$ref":"#/components/schemas/SysUserBo"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK"}}}},"/system/role/export":{"post":{"tags":["角色信息"],"summary":"导出角色信息列表。","description":"导出角色信息列表。

访问权限


**权限校验:**

- `system:role:export`

","operationId":"export_3","parameters":[{"name":"role","in":"query","description":"查询条件","required":true,"schema":{"$ref":"#/components/schemas/SysRoleBo"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK"}}}},"/system/post/export":{"post":{"tags":["岗位信息操作处理"],"summary":"导出岗位列表。","description":"导出岗位列表。

访问权限


**权限校验:**

- `system:post:export`

","operationId":"export_4","parameters":[{"name":"post","in":"query","description":"查询条件","required":true,"schema":{"$ref":"#/components/schemas/SysPostBo"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK"}}}},"/system/dict/type/export":{"post":{"tags":["数据字典信息"],"summary":"导出字典类型列表。","description":"导出字典类型列表。

访问权限


**权限校验:**

- `system:dict:export`

","operationId":"export_5","parameters":[{"name":"dictType","in":"query","description":"查询条件","required":true,"schema":{"$ref":"#/components/schemas/SysDictTypeBo"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK"}}}},"/system/dict/data/export":{"post":{"tags":["数据字典信息"],"summary":"导出字典数据列表。","description":"导出字典数据列表。

访问权限


**权限校验:**

- `system:dict:export`

","operationId":"export_6","parameters":[{"name":"dictData","in":"query","description":"查询条件","required":true,"schema":{"$ref":"#/components/schemas/SysDictDataBo"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK"}}}},"/system/config/export":{"post":{"tags":["参数配置 信息操作处理"],"summary":"导出参数配置列表。","description":"导出参数配置列表。

访问权限


**权限校验:**

- `system:config:export`

","operationId":"export_7","parameters":[{"name":"config","in":"query","description":"查询条件","required":true,"schema":{"$ref":"#/components/schemas/SysConfigBo"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK"}}}},"/system/client/export":{"post":{"tags":["客户端管理"],"summary":"导出客户端管理列表,便于离线审计与配置核查。","description":"导出客户端管理列表,便于离线审计与配置核查。

访问权限


**权限校验:**

- `system:client:export`

","operationId":"export_8","parameters":[{"name":"bo","in":"query","description":"查询条件","required":true,"schema":{"$ref":"#/components/schemas/SysClientBo"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK"}}}},"/swagger/demo/upload":{"post":{"tags":["swagger3 用法示例"],"summary":"上传请求\n 必须使用 @RequestPart 注解标注为文件","description":"上传请求\n 必须使用 @RequestPart 注解标注为文件","operationId":"upload","requestBody":{"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary","description":"导入文件"}},"required":["file"]}}}},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RString"}}}}}}},"/snail-ai/user/register":{"post":{"tags":["Snail AI OpenAPI 控制器"],"summary":"注册当前登录用户并返回 OpenAPI 用户信息。","description":"注册当前登录用户并返回 OpenAPI 用户信息。","operationId":"registerCurrentUser","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ROpenApiUserVO"}}}}}}},"/resource/oss/upload":{"post":{"tags":["文件上传 控制层"],"summary":"上传OSS对象存储","description":"上传OSS对象存储

访问权限


**权限校验:**

- `system:oss:upload`

","operationId":"upload_1","parameters":[{"name":"ossExt","in":"query","required":false,"schema":{"type":"string"}}],"requestBody":{"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary","description":"导入文件"}},"required":["file"]}}}},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"上传结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RSysOssUploadVo"}}}}}}},"/monitor/operlog/export":{"post":{"tags":["操作日志记录"],"summary":"导出操作日志记录列表。","description":"导出操作日志记录列表。

访问权限


**权限校验:**

- `monitor:operlog:export`

","operationId":"export_9","parameters":[{"name":"operLog","in":"query","description":"查询条件","required":true,"schema":{"$ref":"#/components/schemas/SysOperLogBo"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK"}}}},"/monitor/loginInfo/export":{"post":{"tags":["系统访问记录"],"summary":"导出系统访问记录列表。","description":"导出系统访问记录列表。

访问权限


**权限校验:**

- `monitor:logininfo:export`

","operationId":"export_10","parameters":[{"name":"loginInfo","in":"query","description":"查询条件","required":true,"schema":{"$ref":"#/components/schemas/SysLoginInfoBo"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK"}}}},"/device/device/export":{"post":{"tags":["后台设备管理。"],"summary":"导出设备。","description":"导出设备。

访问权限


**权限校验:**

- `device:device:export`

","operationId":"export_11","parameters":[{"name":"bo","in":"query","description":"查询条件","required":true,"schema":{"$ref":"#/components/schemas/CzDeviceBo"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK"}}}},"/demo/excel/importWithOptions":{"post":{"tags":["测试Excel功能"],"summary":"导入表格","description":"导入表格","operationId":"importWithOptions","requestBody":{"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary","description":"导入文件"}},"required":["file"]}}}},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"500":{"description":"Internal Server Error"},"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ExportDemoVo"}}}}}}}},"/demo/demo/importData":{"post":{"tags":["测试单表Controller"],"summary":"导入数据","description":"导入数据

访问权限


**权限校验:**

- `demo:demo:import`

","operationId":"importData_1","requestBody":{"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary","description":"导入文件"}},"required":["file"]}}}},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"500":{"description":"Internal Server Error"},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/demo/demo/export":{"post":{"tags":["测试单表Controller"],"summary":"导出测试单表列表","description":"导出测试单表列表

访问权限


**权限校验:**

- `demo:demo:export`

","operationId":"export_12","parameters":[{"name":"bo","in":"query","required":true,"schema":{"$ref":"#/components/schemas/TestDemoBo"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK"}}}},"/demo/batch/add":{"post":{"tags":["测试批量方法"],"summary":"新增批量方法 可完美替代 saveBatch 秒级插入上万数据 (对mysql负荷较大)\n ","description":"新增批量方法 可完美替代 saveBatch 秒级插入上万数据 (对mysql负荷较大)\n

\n 3.5.0 版本 增加 rewriteBatchedStatements=true 批处理参数 使 MP 原生批处理可以达到同样的速度","operationId":"add_18","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/demo/batch/addOrUpdate":{"post":{"tags":["测试批量方法"],"summary":"新增或更新 可完美替代 saveOrUpdateBatch 高性能\n ","description":"新增或更新 可完美替代 saveOrUpdateBatch 高性能\n

\n 3.5.0 版本 增加 rewriteBatchedStatements=true 批处理参数 使 MP 原生批处理可以达到同样的速度","operationId":"addOrUpdate","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/auth/social/callback":{"post":{"tags":["认证控制器,提供登录、注册、社交绑定和退出能力。"],"summary":"处理前端回调后的社交账号绑定。","description":"处理前端回调后的社交账号绑定。

访问权限


> **权限策略**:忽略权限检查
","operationId":"socialCallback","requestBody":{"description":"请求体","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SocialLoginBody"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"操作结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/auth/register":{"post":{"tags":["认证控制器,提供登录、注册、社交绑定和退出能力。"],"summary":"用户注册。","description":"用户注册。

访问权限


> **权限策略**:忽略权限检查
","operationId":"register","requestBody":{"description":"注册信息","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegisterBody"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"操作结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/auth/logout":{"post":{"tags":["认证控制器,提供登录、注册、社交绑定和退出能力。"],"summary":"退出登录","description":"退出登录

访问权限


> **权限策略**:忽略权限检查
","operationId":"logout","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/auth/login":{"post":{"tags":["认证控制器,提供登录、注册、社交绑定和退出能力。"],"summary":"登录方法","description":"登录方法

访问权限


> **权限策略**:忽略权限检查
","operationId":"login","requestBody":{"description":"登录信息","content":{"application/json":{"schema":{"type":"string"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RLoginVo"}}}}}}},"/app/profile/update":{"post":{"tags":["App 用户资料控制器"],"summary":"修改用户资料","description":"修改用户资料","operationId":"updateProfile_1","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateProfileBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/app/profile/avatar":{"post":{"tags":["App 用户资料控制器"],"summary":"上传用户头像到 OSS","description":"上传用户头像到 OSS","operationId":"uploadAvatar","requestBody":{"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary","description":"导入文件"}},"required":["file"]}}}},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RAvatarUploadVo"}}}}}}},"/app/location/update":{"post":{"tags":["App 房间位置管理控制器"],"summary":"修改房间位置名称\n ","description":"修改房间位置名称\n

\n 支持修改位置名称、图标和排序值,同一家庭下位置名称不可重复。","operationId":"updateLocation","requestBody":{"description":"修改位置请求参数(位置ID、位置名称 1-10 个字符、可选图标与排序)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateLocationBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"操作结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/app/location/create":{"post":{"tags":["App 房间位置管理控制器"],"summary":"创建新的房间位置\n ","description":"创建新的房间位置\n

\n 在同一家庭下位置名称不可重复。","operationId":"createLocation","requestBody":{"description":"创建位置请求参数(家庭ID、位置名称 1-10 个字符、可选图标与排序)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateLocationBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"操作结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/app/home/create":{"post":{"tags":["App 家庭管理控制器"],"summary":"创建新家庭\n ","description":"创建新家庭\n

\n 创建后自动初始化一个\"客厅\"位置,家庭名称在同一用户下不可重复。","operationId":"createHome","requestBody":{"description":"创建家庭请求参数(家庭名称,2-10个字符)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateHomeBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"操作结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/app/device/updateRuntime":{"post":{"tags":["App 设备控制器"],"summary":"更新设备运行数据\n ","description":"更新设备运行数据\n

\n 前端通过蓝牙同步设备运行状态,更新设备基础状态和净化器运行数据。","operationId":"updateDeviceRuntime","requestBody":{"description":"更新参数(设备ID必填,其余字段按需传入)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateDeviceRuntimeBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"操作结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/app/device/runtime":{"post":{"tags":["App 设备控制器"],"summary":"查询设备运行数据\n ","description":"查询设备运行数据\n

\n 根据设备ID查询设备运行状态及净化器数据。","operationId":"getDeviceRuntime","requestBody":{"description":"查询参数(设备ID)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeviceRuntimeQueryBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"设备运行数据","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RAppDeviceRuntimeVo"}}}}}}},"/app/device/list":{"post":{"tags":["App 设备控制器"],"summary":"查询当前用户的设备列表\n ","description":"查询当前用户的设备列表\n

\n 支持按家庭ID和位置ID过滤,返回设备信息及净化器运行数据。","operationId":"listDevices","requestBody":{"description":"查询参数(家庭ID、位置ID,均可选)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeviceQueryBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"设备列表","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RListAppDeviceVo"}}}}}}},"/app/device/bind":{"post":{"tags":["App 设备控制器"],"summary":"绑定设备\n ","description":"绑定设备\n

\n 前端通过蓝牙配对设备后,根据设备编号绑定当前用户。\n 若设备已存在则直接绑定,不存在则先新增设备再绑定。","operationId":"bindDevice","requestBody":{"description":"绑定请求参数(设备编号及蓝牙配对信息)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeviceBindBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"操作结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/app/auth/sendSmsCode":{"post":{"tags":["App 用户认证控制器"],"summary":"发送短信验证码","description":"发送短信验证码

访问权限


> **权限策略**:忽略权限检查
","operationId":"sendSmsCode","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SendSmsCodeBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/app/auth/register":{"post":{"tags":["App 用户认证控制器"],"summary":"注册(手机号、验证码、密码、确认密码)","description":"注册(手机号、验证码、密码、确认密码)

访问权限


> **权限策略**:忽略权限检查
","operationId":"register_1","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegisterBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RAppLoginVo"}}}}}}},"/app/auth/logout":{"post":{"tags":["App 用户认证控制器"],"summary":"退出登录","description":"退出登录","operationId":"logout_1","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/app/auth/login/sms":{"post":{"tags":["App 用户认证控制器"],"summary":"短信验证码登录","description":"短信验证码登录

访问权限


> **权限策略**:忽略权限检查
","operationId":"loginBySms","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginSmsBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RAppLoginVo"}}}}}}},"/app/auth/login/password":{"post":{"tags":["App 用户认证控制器"],"summary":"账号密码登录(账号支持用户名或手机号)","description":"账号密码登录(账号支持用户名或手机号)

访问权限


> **权限策略**:忽略权限检查
","operationId":"loginByPassword","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginPasswordBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RAppLoginVo"}}}}}}},"/app/auth/forgetPassword/verifyCode":{"post":{"tags":["App 用户认证控制器"],"summary":"忘记密码第一步:校验手机号和短信验证码,返回重置令牌","description":"忘记密码第一步:校验手机号和短信验证码,返回重置令牌

访问权限


> **权限策略**:忽略权限检查
","operationId":"verifyResetCode","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifyResetSmsCodeBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RString"}}}}}}},"/app/auth/forgetPassword/doReset":{"post":{"tags":["App 用户认证控制器"],"summary":"忘记密码第二步:凭重置令牌和两次新密码完成重置","description":"忘记密码第二步:凭重置令牌和两次新密码完成重置

访问权限


> **权限策略**:忽略权限检查
","operationId":"doResetPassword","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DoResetPasswordBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/app/auth/changePhone/verifyOld":{"post":{"tags":["App 用户认证控制器"],"summary":"换绑手机号第一步:校验原手机号验证码","description":"换绑手机号第一步:校验原手机号验证码","operationId":"verifyOldPhoneNumber","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifyOldPhoneBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RString"}}}}}}},"/app/auth/changePhone/verifyNew":{"post":{"tags":["App 用户认证控制器"],"summary":"换绑手机号第二步:校验新手机号验证码并更新","description":"换绑手机号第二步:校验新手机号验证码并更新","operationId":"verifyNewPhoneNumberAndUpdate","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifyNewPhoneBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/app/auth/cancelAccount":{"post":{"tags":["App 用户认证控制器"],"summary":"注销账号","description":"注销账号","operationId":"cancelAccount","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/app/auth/agreements":{"post":{"tags":["App 用户认证控制器"],"summary":"获取生效的协议配置列表\n ","description":"获取生效的协议配置列表\n

\n 无需登录,返回所有已生效协议的基本信息(ID、类型、编号、版本号、名称)。

访问权限


> **权限策略**:忽略权限检查
","operationId":"listActiveAgreements","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"生效的协议列表","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RListAgreementVo"}}}}}}},"/app/auth/agreement/detail":{"post":{"tags":["App 用户认证控制器"],"summary":"获取协议详情\n ","description":"获取协议详情\n

\n 无需登录,根据协议ID返回协议编号、名称、版本号、协议正文及生效时间。

访问权限


> **权限策略**:忽略权限检查
","operationId":"getAgreementDetail","requestBody":{"description":"协议ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgreementIdBo"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"协议详情","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RAgreementDetailVo"}}}}}}},"/api/snail/chat/session":{"post":{"tags":["snail-ai-chat-gateway-controller"],"operationId":"session","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OpenApiEmbedTokenRequest"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResultOpenApiEmbedTokenResponse"}}}}}}},"/api/snail/chat/resource/upload":{"post":{"tags":["snail-ai-chat-gateway-controller"],"operationId":"uploadResource","parameters":[{"name":"bizType","in":"query","required":false,"schema":{"type":"string"}},{"name":"bizId","in":"query","required":false,"schema":{"type":"integer","format":"int64"}}],"requestBody":{"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary"}},"required":["file"]}}}},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResultOpenApiResourceResponse"}}}}}}},"/api/snail/chat/completions":{"post":{"tags":["snail-ai-chat-gateway-controller"],"operationId":"completions","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OpenApiChatRequest"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"text/event-stream":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ServerSentEventString"}}}}}}}},"/api/snail/chat/agent/subscribe":{"post":{"tags":["snail-ai-chat-gateway-controller"],"operationId":"subscribeAgent","parameters":[{"name":"agentId","in":"query","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResultVoid"}}}}}},"delete":{"tags":["snail-ai-chat-gateway-controller"],"operationId":"unsubscribeAgent","parameters":[{"name":"agentId","in":"query","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResultVoid"}}}}}}},"/workflow/task/pageByTaskWait":{"get":{"tags":["任务管理 控制层"],"summary":"查询当前用户的待办任务。","description":"查询当前用户的待办任务。","operationId":"pageByTaskWait","parameters":[{"name":"flowTaskBo","in":"query","description":"参数","required":true,"schema":{"$ref":"#/components/schemas/FlowTaskBo"}},{"name":"pageQuery","in":"query","description":"分页","required":true,"schema":{"$ref":"#/components/schemas/PageQuery"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"待办任务分页数据","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RPageResultFlowTaskVo"}}}}}}},"/workflow/task/pageByTaskFinish":{"get":{"tags":["任务管理 控制层"],"summary":"查询当前用户的已办任务。","description":"查询当前用户的已办任务。","operationId":"pageByTaskFinish","parameters":[{"name":"flowTaskBo","in":"query","description":"参数","required":true,"schema":{"$ref":"#/components/schemas/FlowTaskBo"}},{"name":"pageQuery","in":"query","description":"分页","required":true,"schema":{"$ref":"#/components/schemas/PageQuery"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"已办任务分页数据","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RPageResultFlowHisTaskVo"}}}}}}},"/workflow/task/pageByTaskCopy":{"get":{"tags":["任务管理 控制层"],"summary":"查询当前用户收到的抄送任务。","description":"查询当前用户收到的抄送任务。","operationId":"pageByTaskCopy","parameters":[{"name":"flowTaskBo","in":"query","description":"参数","required":true,"schema":{"$ref":"#/components/schemas/FlowTaskBo"}},{"name":"pageQuery","in":"query","description":"分页","required":true,"schema":{"$ref":"#/components/schemas/PageQuery"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"抄送任务分页数据","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RPageResultFlowTaskVo"}}}}}}},"/workflow/task/pageByAllTaskWait":{"get":{"tags":["任务管理 控制层"],"summary":"查询全部待办任务。","description":"查询全部待办任务。

访问权限


**权限校验:**

- `workflow:task:list`

","operationId":"pageByAllTaskWait","parameters":[{"name":"flowTaskBo","in":"query","description":"参数","required":true,"schema":{"$ref":"#/components/schemas/FlowTaskBo"}},{"name":"pageQuery","in":"query","description":"分页","required":true,"schema":{"$ref":"#/components/schemas/PageQuery"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"待办任务分页数据","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RPageResultFlowTaskVo"}}}}}}},"/workflow/task/pageByAllTaskFinish":{"get":{"tags":["任务管理 控制层"],"summary":"查询全部已办任务。","description":"查询全部已办任务。

访问权限


**权限校验:**

- `workflow:task:list`

","operationId":"pageByAllTaskFinish","parameters":[{"name":"flowTaskBo","in":"query","description":"参数","required":true,"schema":{"$ref":"#/components/schemas/FlowTaskBo"}},{"name":"pageQuery","in":"query","description":"分页","required":true,"schema":{"$ref":"#/components/schemas/PageQuery"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"已办任务分页数据","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RPageResultFlowHisTaskVo"}}}}}}},"/workflow/task/getTask/{taskId}":{"get":{"tags":["任务管理 控制层"],"summary":"根据任务 id 查询任务详情。","description":"根据任务 id 查询任务详情。","operationId":"getTask","parameters":[{"name":"taskId","in":"path","description":"任务id","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"任务详情","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RFlowTaskVo"}}}}}}},"/workflow/task/getBackTaskNode/{taskId}/{nowNodeCode}":{"get":{"tags":["任务管理 控制层"],"summary":"获取当前任务可驳回的前置节点。","description":"获取当前任务可驳回的前置节点。","operationId":"getBackTaskNode","parameters":[{"name":"taskId","in":"path","description":"任务id","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"nowNodeCode","in":"path","description":"当前节点","required":true,"schema":{"type":"string"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"可驳回节点列表","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RListNode"}}}}}}},"/workflow/task/currentTaskAllUser/{taskId}":{"get":{"tags":["任务管理 控制层"],"summary":"获取当前任务的所有办理人。","description":"获取当前任务的所有办理人。","operationId":"currentTaskAllUser","parameters":[{"name":"taskId","in":"path","description":"任务id","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"办理人列表","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RListUserDTO"}}}}}}},"/workflow/spel/{id}":{"get":{"tags":["流程 SpEL 表达式定义控制器,负责表达式规则的增删改查。"],"summary":"获取流程 SpEL 表达式定义详情。","description":"获取流程 SpEL 表达式定义详情。

访问权限


**权限校验:**

- `workflow:spel:query`

","operationId":"getInfo","parameters":[{"name":"id","in":"path","description":"主键","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"表达式详情","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RFlowSpelVo"}}}}}}},"/workflow/spel/list":{"get":{"tags":["流程 SpEL 表达式定义控制器,负责表达式规则的增删改查。"],"summary":"分页查询流程 SpEL 表达式定义列表。","description":"分页查询流程 SpEL 表达式定义列表。

访问权限


**权限校验:**

- `workflow:spel:list`

","operationId":"list","parameters":[{"name":"bo","in":"query","description":"查询条件","required":true,"schema":{"$ref":"#/components/schemas/FlowSpelBo"}},{"name":"pageQuery","in":"query","description":"分页参数","required":true,"schema":{"$ref":"#/components/schemas/PageQuery"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"表达式分页数据","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RPageResultFlowSpelVo"}}}}}}},"/workflow/leave/{id}":{"get":{"tags":["请假示例控制器,演示业务单据与流程引擎联动的典型用法。"],"summary":"获取请假单详情。","description":"获取请假单详情。

访问权限


**权限校验:**

- `workflow:leave:query`

","operationId":"getInfo_1","parameters":[{"name":"id","in":"path","description":"主键","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"请假详情","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RTestLeaveVo"}}}}}}},"/workflow/leave/list":{"get":{"tags":["请假示例控制器,演示业务单据与流程引擎联动的典型用法。"],"summary":"分页查询请假列表。","description":"分页查询请假列表。

访问权限


**权限校验:**

- `workflow:leave:list`

","operationId":"list_1","parameters":[{"name":"bo","in":"query","description":"查询条件","required":true,"schema":{"$ref":"#/components/schemas/TestLeaveBo"}},{"name":"pageQuery","in":"query","description":"分页参数","required":true,"schema":{"$ref":"#/components/schemas/PageQuery"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"请假分页数据","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RPageResultTestLeaveVo"}}}}}}},"/workflow/instance/pageByRunning":{"get":{"tags":["流程实例管理 控制层"],"summary":"分页查询正在运行的流程实例。","description":"分页查询正在运行的流程实例。

访问权限


**权限校验:**

- `workflow:instance:list`

","operationId":"selectRunningInstanceList","parameters":[{"name":"flowInstanceBo","in":"query","description":"流程实例","required":true,"schema":{"$ref":"#/components/schemas/FlowInstanceBo"}},{"name":"pageQuery","in":"query","description":"分页","required":true,"schema":{"$ref":"#/components/schemas/PageQuery"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"正在运行的流程实例分页数据","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RPageResultFlowInstanceVo"}}}}}}},"/workflow/instance/pageByFinish":{"get":{"tags":["流程实例管理 控制层"],"summary":"分页查询已结束的流程实例。","description":"分页查询已结束的流程实例。

访问权限


**权限校验:**

- `workflow:instance:list`

","operationId":"selectFinishInstanceList","parameters":[{"name":"flowInstanceBo","in":"query","description":"流程实例","required":true,"schema":{"$ref":"#/components/schemas/FlowInstanceBo"}},{"name":"pageQuery","in":"query","description":"分页","required":true,"schema":{"$ref":"#/components/schemas/PageQuery"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"已结束的流程实例分页数据","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RPageResultFlowInstanceVo"}}}}}}},"/workflow/instance/pageByCurrent":{"get":{"tags":["流程实例管理 控制层"],"summary":"获取当前登录人发起的流程实例列表。","description":"获取当前登录人发起的流程实例列表。

访问权限


**权限校验:**

- `workflow:instance:currentList`

","operationId":"selectCurrentInstanceList","parameters":[{"name":"flowInstanceBo","in":"query","description":"参数","required":true,"schema":{"$ref":"#/components/schemas/FlowInstanceBo"}},{"name":"pageQuery","in":"query","description":"分页","required":true,"schema":{"$ref":"#/components/schemas/PageQuery"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"当前用户发起的流程实例分页数据","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RPageResultFlowInstanceVo"}}}}}}},"/workflow/instance/instanceVariable/{instanceId}":{"get":{"tags":["流程实例管理 控制层"],"summary":"获取流程变量。","description":"获取流程变量。

访问权限


**权限校验:**

- `workflow:instance:variableQuery`

","operationId":"instanceVariable","parameters":[{"name":"instanceId","in":"path","description":"流程实例id","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"流程变量","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RMapStringObject"}}}}}}},"/workflow/instance/getInfo/{businessId}":{"get":{"tags":["流程实例管理 控制层"],"summary":"根据业务 id 查询流程实例详细信息。","description":"根据业务 id 查询流程实例详细信息。

访问权限


**权限校验:**

- `workflow:instance:query`

","operationId":"getInfo_2","parameters":[{"name":"businessId","in":"path","description":"业务id","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"流程实例详情","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RFlowInstanceVo"}}}}}}},"/workflow/instance/flowHisTaskList/{businessId}":{"get":{"tags":["流程实例管理 控制层"],"summary":"获取流程图和流程记录,用于展示实例流转轨迹。","description":"获取流程图和流程记录,用于展示实例流转轨迹。

访问权限


**权限校验:**

- `workflow:instance:query`

","operationId":"flowHisTaskList","parameters":[{"name":"businessId","in":"path","description":"业务id","required":true,"schema":{"type":"string"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"流程图与历史节点信息","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RMapStringObject"}}}}}}},"/workflow/definition/{id}":{"get":{"tags":["流程定义管理 控制层"],"summary":"获取流程定义详细信息。","description":"获取流程定义详细信息。

访问权限


**权限校验:**

- `workflow:definition:query`

","operationId":"getInfo_3","parameters":[{"name":"id","in":"path","description":"流程定义id","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"流程定义详情","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RDefinition"}}}}}}},"/workflow/definition/xmlString/{id}":{"get":{"tags":["流程定义管理 控制层"],"summary":"获取流程定义 JSON 字符串。","description":"获取流程定义 JSON 字符串。

访问权限


**权限校验:**

- `workflow:definition:query`

","operationId":"xmlString","parameters":[{"name":"id","in":"path","description":"流程定义id","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"流程定义 JSON","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RString"}}}}}}},"/workflow/definition/unPublishList":{"get":{"tags":["流程定义管理 控制层"],"summary":"分页查询未发布的流程定义列表。","description":"分页查询未发布的流程定义列表。

访问权限


**权限校验:**

- `workflow:definition:list`

","operationId":"unPublishList","parameters":[{"name":"flowDefinition","in":"query","description":"查询条件","required":true,"schema":{"$ref":"#/components/schemas/FlowDefinition"}},{"name":"pageQuery","in":"query","description":"分页参数","required":true,"schema":{"$ref":"#/components/schemas/PageQuery"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"未发布流程定义分页数据","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RPageResultFlowDefinitionVo"}}}}}}},"/workflow/definition/list":{"get":{"tags":["流程定义管理 控制层"],"summary":"分页查询流程定义列表。","description":"分页查询流程定义列表。

访问权限


**权限校验:**

- `workflow:definition:list`

","operationId":"list_2","parameters":[{"name":"flowDefinition","in":"query","description":"查询条件","required":true,"schema":{"$ref":"#/components/schemas/FlowDefinition"}},{"name":"pageQuery","in":"query","description":"分页参数","required":true,"schema":{"$ref":"#/components/schemas/PageQuery"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"流程定义分页数据","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RPageResultFlowDefinitionVo"}}}}}}},"/workflow/category/{categoryId}":{"get":{"tags":["流程分类"],"summary":"获取单个流程分类详情。","description":"获取单个流程分类详情。

访问权限


**权限校验:**

- `workflow:category:query`

","operationId":"getInfo_4","parameters":[{"name":"categoryId","in":"path","description":"主键","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"流程分类详情","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RFlowCategoryVo"}}}}}},"delete":{"tags":["流程分类"],"summary":"删除流程分类,删除前校验默认分类、子节点和绑定流程定义。","description":"删除流程分类,删除前校验默认分类、子节点和绑定流程定义。

访问权限


**权限校验:**

- `workflow:category:remove`

","operationId":"remove","parameters":[{"name":"categoryId","in":"path","description":"主键","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"操作结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/workflow/category/list":{"get":{"tags":["流程分类"],"summary":"查询流程分类列表。","description":"查询流程分类列表。

访问权限


**权限校验:**

- `workflow:category:list`

","operationId":"list_3","parameters":[{"name":"bo","in":"query","description":"查询条件","required":true,"schema":{"$ref":"#/components/schemas/FlowCategoryBo"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"流程分类列表","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RListFlowCategoryVo"}}}}}}},"/workflow/category/categoryTree":{"get":{"tags":["流程分类"],"summary":"获取流程分类树列表,用于流程定义选择分类节点。","description":"获取流程分类树列表,用于流程定义选择分类节点。","operationId":"categoryTree","parameters":[{"name":"categoryBo","in":"query","description":"流程分类","required":true,"schema":{"$ref":"#/components/schemas/FlowCategoryBo"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"流程分类树","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RListTreeString"}}}}}}},"/warm-flow/query-flow-chart/{id}":{"get":{"tags":["warm-flow-controller"],"operationId":"queryFlowChart","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiResultDefJson"}}}}}}},"/warm-flow/query-def/{id}":{"get":{"tags":["warm-flow-controller"],"operationId":"queryDef","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiResultDefJson"}}}}}}},"/warm-flow/query-def":{"get":{"tags":["warm-flow-controller"],"operationId":"queryDef_1","parameters":[],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiResultDefJson"}}}}}}},"/warm-flow/published-form":{"get":{"tags":["warm-flow-controller"],"operationId":"publishedForm","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiResultListForm"}}}}}}},"/warm-flow/node-ext":{"get":{"tags":["warm-flow-controller"],"operationId":"nodeExt","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiResultListNodeExt"}}}}}}},"/warm-flow/listener-list":{"get":{"tags":["warm-flow-controller"],"operationId":"listenerList","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiResultListListenerVo"}}}}}}},"/warm-flow/handler-type":{"get":{"tags":["warm-flow-controller"],"operationId":"handlerType","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiResultListString"}}}}}}},"/warm-flow/handler-result":{"get":{"tags":["warm-flow-controller"],"operationId":"handlerResult","parameters":[{"name":"arg0","in":"query","required":true,"schema":{"$ref":"#/components/schemas/HandlerQuery"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiResultHandlerSelectVo"}}}}}}},"/warm-flow/handler-feedback":{"get":{"tags":["warm-flow-controller"],"operationId":"handlerFeedback","parameters":[{"name":"arg0","in":"query","required":true,"schema":{"$ref":"#/components/schemas/HandlerFeedBackDto"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiResultListHandlerFeedBackVo"}}}}}}},"/warm-flow/handler-dict":{"get":{"tags":["warm-flow-controller"],"operationId":"handlerDict","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiResultListDict"}}}}}}},"/warm-flow/form-content/{id}":{"get":{"tags":["warm-flow-controller"],"operationId":"getFormContent","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiResultString"}}}}}}},"/warm-flow/execute/load/{taskId}":{"get":{"tags":["warm-flow-controller"],"operationId":"load","parameters":[{"name":"taskId","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiResultFlowDto"}}}}}}},"/warm-flow/execute/hisLoad/{taskId}":{"get":{"tags":["warm-flow-controller"],"operationId":"hisLoad","parameters":[{"name":"taskId","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiResultFlowDto"}}}}}}},"/warm-flow-ui/config":{"get":{"tags":["warm-flow-ui-controller"],"operationId":"config","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiResultWarmFlowVo"}}}}}}},"/system/user/unlock/{userId}":{"get":{"tags":["用户信息"],"summary":"解锁用户","description":"解锁用户

访问权限


**权限校验:**

- `system:user:edit`

","operationId":"unlock","parameters":[{"name":"userId","in":"path","description":"用户ID","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"操作结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/system/user/optionselect":{"get":{"tags":["用户信息"],"summary":"根据用户ID串批量获取用户基础信息","description":"根据用户ID串批量获取用户基础信息

访问权限


**权限校验:**

- `system:user:query`

","operationId":"optionselect","parameters":[{"name":"userIds","in":"query","description":"用户ID串","required":false,"schema":{"type":"array","items":{"type":"integer","format":"int64"}}},{"name":"deptId","in":"query","description":"部门ID","required":false,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"用户基础信息列表","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RListSysUserVo"}}}}}}},"/system/user/list":{"get":{"tags":["用户信息"],"summary":"分页查询用户列表。","description":"分页查询用户列表。

访问权限


**权限校验:**

- `system:user:list`

","operationId":"list_4","parameters":[{"name":"user","in":"query","description":"用户查询条件","required":true,"schema":{"$ref":"#/components/schemas/SysUserBo"}},{"name":"pageQuery","in":"query","description":"分页参数","required":true,"schema":{"$ref":"#/components/schemas/PageQuery"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"用户分页列表","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RPageResultSysUserVo"}}}}}}},"/system/user/list/dept/{deptId}":{"get":{"tags":["用户信息"],"summary":"获取指定部门下的全部用户信息。","description":"获取指定部门下的全部用户信息。

访问权限


**权限校验:**

- `system:user:list`

","operationId":"listByDept","parameters":[{"name":"deptId","in":"path","description":"部门ID","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"用户列表","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RListSysUserVo"}}}}}}},"/system/user/getInfo":{"get":{"tags":["用户信息"],"summary":"获取用户信息","description":"获取用户信息","operationId":"getInfo_5","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"当前登录用户信息、角色与权限集合","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RUserInfoVo"}}}}}}},"/system/user/deptTree":{"get":{"tags":["用户信息"],"summary":"获取用户筛选用的部门树。","description":"获取用户筛选用的部门树。

访问权限


**权限校验:**

- `system:user:list`

","operationId":"deptTree","parameters":[{"name":"dept","in":"query","description":"部门查询条件","required":true,"schema":{"$ref":"#/components/schemas/SysDeptBo"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"部门树列表","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RListTreeString"}}}}}}},"/system/user/authRole/{userId}":{"get":{"tags":["用户信息"],"summary":"根据用户编号获取授权角色","description":"根据用户编号获取授权角色

访问权限


**权限校验:**

- `system:user:query`

","operationId":"authRole","parameters":[{"name":"userId","in":"path","description":"用户ID","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"用户及其可授权角色信息","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RSysUserInfoVo"}}}}}}},"/system/user/{userId}":{"get":{"tags":["用户信息"],"summary":"根据用户编号获取详细信息","description":"根据用户编号获取详细信息

访问权限


**权限校验:**

- `system:user:query`

","operationId":"getInfo_6","parameters":[{"name":"userId","in":"path","description":"用户ID","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"用户详情、角色与岗位信息","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RSysUserInfoVo"}}}}}}},"/system/user/":{"get":{"tags":["用户信息"],"summary":"根据用户编号获取详细信息","description":"根据用户编号获取详细信息

访问权限


**权限校验:**

- `system:user:query`

","operationId":"getInfo_7","parameters":[],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"用户详情、角色与岗位信息","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RSysUserInfoVo"}}}}}}},"/system/social/list":{"get":{"tags":["社会化关系"],"summary":"查询当前登录用户的社会化账号绑定列表。","description":"查询当前登录用户的社会化账号绑定列表。","operationId":"list_5","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"绑定关系列表","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RListSysSocialVo"}}}}}}},"/system/role/{roleId}":{"get":{"tags":["角色信息"],"summary":"根据角色编号获取详细信息","description":"根据角色编号获取详细信息

访问权限


**权限校验:**

- `system:role:query`

","operationId":"getInfo_8","parameters":[{"name":"roleId","in":"path","description":"角色ID","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"角色详情","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RSysRoleVo"}}}}}}},"/system/role/optionselect":{"get":{"tags":["角色信息"],"summary":"获取角色选择框列表","description":"获取角色选择框列表

访问权限


**权限校验:**

- `system:role:query`

","operationId":"optionselect_1","parameters":[{"name":"roleIds","in":"query","description":"角色ID串","required":false,"schema":{"type":"array","items":{"type":"integer","format":"int64"}}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"角色列表","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RListSysRoleVo"}}}}}}},"/system/role/list":{"get":{"tags":["角色信息"],"summary":"分页查询角色列表。","description":"分页查询角色列表。

访问权限


**权限校验:**

- `system:role:list`

","operationId":"list_6","parameters":[{"name":"role","in":"query","description":"查询条件","required":true,"schema":{"$ref":"#/components/schemas/SysRoleBo"}},{"name":"pageQuery","in":"query","description":"分页参数","required":true,"schema":{"$ref":"#/components/schemas/PageQuery"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"角色分页结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RPageResultSysRoleVo"}}}}}}},"/system/role/deptTree/{roleId}":{"get":{"tags":["角色信息"],"summary":"获取对应角色部门树列表","description":"获取对应角色部门树列表

访问权限


**权限校验:**

- `system:role:list`

","operationId":"roleDeptTreeselect","parameters":[{"name":"roleId","in":"path","description":"角色ID","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"角色部门树信息","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RDeptTreeSelectVo"}}}}}}},"/system/role/authUser/unallocatedList":{"get":{"tags":["角色信息"],"summary":"查询未分配用户角色列表。","description":"查询未分配用户角色列表。

访问权限


**权限校验:**

- `system:role:list`

","operationId":"unallocatedList","parameters":[{"name":"user","in":"query","description":"查询条件","required":true,"schema":{"$ref":"#/components/schemas/SysUserBo"}},{"name":"pageQuery","in":"query","description":"分页参数","required":true,"schema":{"$ref":"#/components/schemas/PageQuery"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"用户分页结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RPageResultSysUserVo"}}}}}}},"/system/role/authUser/allocatedList":{"get":{"tags":["角色信息"],"summary":"查询已分配用户角色列表。","description":"查询已分配用户角色列表。

访问权限


**权限校验:**

- `system:role:list`

","operationId":"allocatedList","parameters":[{"name":"user","in":"query","description":"查询条件","required":true,"schema":{"$ref":"#/components/schemas/SysUserBo"}},{"name":"pageQuery","in":"query","description":"分页参数","required":true,"schema":{"$ref":"#/components/schemas/PageQuery"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"用户分页结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RPageResultSysUserVo"}}}}}}},"/system/post/{postId}":{"get":{"tags":["岗位信息操作处理"],"summary":"根据岗位编号获取详细信息","description":"根据岗位编号获取详细信息

访问权限


**权限校验:**

- `system:post:query`

","operationId":"getInfo_9","parameters":[{"name":"postId","in":"path","description":"岗位ID","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"岗位详情","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RSysPostVo"}}}}}}},"/system/post/optionselect":{"get":{"tags":["岗位信息操作处理"],"summary":"获取岗位选择框列表","description":"获取岗位选择框列表

访问权限


**权限校验:**

- `system:post:query`

","operationId":"optionselect_2","parameters":[{"name":"postIds","in":"query","description":"岗位ID串","required":false,"schema":{"type":"array","items":{"type":"integer","format":"int64"}}},{"name":"deptId","in":"query","description":"部门id","required":false,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"岗位列表","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RListSysPostVo"}}}}}}},"/system/post/list":{"get":{"tags":["岗位信息操作处理"],"summary":"分页查询岗位列表。","description":"分页查询岗位列表。

访问权限


**权限校验:**

- `system:post:list`

","operationId":"list_7","parameters":[{"name":"post","in":"query","description":"查询条件","required":true,"schema":{"$ref":"#/components/schemas/SysPostBo"}},{"name":"pageQuery","in":"query","description":"分页参数","required":true,"schema":{"$ref":"#/components/schemas/PageQuery"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"岗位分页结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RPageResultSysPostVo"}}}}}}},"/system/post/deptTree":{"get":{"tags":["岗位信息操作处理"],"summary":"获取岗位筛选用的部门树。","description":"获取岗位筛选用的部门树。

访问权限


**权限校验:**

- `system:post:list`

","operationId":"deptTree_1","parameters":[{"name":"dept","in":"query","description":"部门查询条件","required":true,"schema":{"$ref":"#/components/schemas/SysDeptBo"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"部门树列表","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RListTreeString"}}}}}}},"/system/notice/{noticeId}":{"get":{"tags":["公告 信息操作处理"],"summary":"根据通知公告编号获取详细信息","description":"根据通知公告编号获取详细信息

访问权限


**权限校验:**

- `system:notice:query`

","operationId":"getInfo_10","parameters":[{"name":"noticeId","in":"path","description":"公告ID","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"公告详情","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RSysNoticeVo"}}}}}}},"/system/notice/list":{"get":{"tags":["公告 信息操作处理"],"summary":"分页查询通知公告列表。","description":"分页查询通知公告列表。

访问权限


**权限校验:**

- `system:notice:list`

","operationId":"list_8","parameters":[{"name":"notice","in":"query","description":"查询条件","required":true,"schema":{"$ref":"#/components/schemas/SysNoticeBo"}},{"name":"pageQuery","in":"query","description":"分页参数","required":true,"schema":{"$ref":"#/components/schemas/PageQuery"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"公告分页结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RPageResultSysNoticeVo"}}}}}}},"/system/menu/{menuId}":{"get":{"tags":["菜单信息"],"summary":"根据菜单编号获取详细信息","description":"根据菜单编号获取详细信息

访问权限


**权限校验:**

- `system:menu:query`

**角色校验:**

- `superadmin`
","operationId":"getInfo_11","parameters":[{"name":"menuId","in":"path","description":"菜单ID","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"菜单详情","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RSysMenuVo"}}}}}},"delete":{"tags":["菜单信息"],"summary":"删除菜单","description":"删除菜单

访问权限


**权限校验:**

- `system:menu:remove`

**角色校验:**

- `superadmin`
","operationId":"remove_1","parameters":[{"name":"menuId","in":"path","description":"菜单ID","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"操作结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/system/menu/treeselect":{"get":{"tags":["菜单信息"],"summary":"获取菜单下拉树列表。","description":"获取菜单下拉树列表。

访问权限


**权限校验:**

- `system:menu:query`

","operationId":"treeselect","parameters":[{"name":"menu","in":"query","description":"查询条件","required":true,"schema":{"$ref":"#/components/schemas/SysMenuBo"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"菜单树","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RListTreeString"}}}}}}},"/system/menu/roleMenuTreeselect/{roleId}":{"get":{"tags":["菜单信息"],"summary":"加载对应角色菜单列表树","description":"加载对应角色菜单列表树

访问权限


**权限校验:**

- `system:menu:query`

","operationId":"roleMenuTreeselect","parameters":[{"name":"roleId","in":"path","description":"角色ID","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"角色菜单树及选中节点","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RMenuTreeSelectVo"}}}}}}},"/system/menu/list":{"get":{"tags":["菜单信息"],"summary":"查询菜单列表。","description":"查询菜单列表。

访问权限


**权限校验:**

- `system:menu:list`

**角色校验:**

- `superadmin`
","operationId":"list_9","parameters":[{"name":"menu","in":"query","description":"查询条件","required":true,"schema":{"$ref":"#/components/schemas/SysMenuBo"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"菜单列表","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RListSysMenuVo"}}}}}}},"/system/menu/getRouters":{"get":{"tags":["菜单信息"],"summary":"获取路由信息","description":"获取路由信息","operationId":"getRouters","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"当前用户可访问的路由信息","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RListRouterVo"}}}}}}},"/system/dict/type/{dictId}":{"get":{"tags":["数据字典信息"],"summary":"查询字典类型详细","description":"查询字典类型详细

访问权限


**权限校验:**

- `system:dict:query`

","operationId":"getInfo_12","parameters":[{"name":"dictId","in":"path","description":"字典ID","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"字典类型详情","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RSysDictTypeVo"}}}}}}},"/system/dict/type/optionselect":{"get":{"tags":["数据字典信息"],"summary":"获取字典类型下拉选择列表。","description":"获取字典类型下拉选择列表。","operationId":"optionselect_3","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"字典类型列表","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RListSysDictTypeVo"}}}}}}},"/system/dict/type/list":{"get":{"tags":["数据字典信息"],"summary":"分页查询字典类型列表。","description":"分页查询字典类型列表。

访问权限


**权限校验:**

- `system:dict:list`

","operationId":"list_10","parameters":[{"name":"dictType","in":"query","description":"查询条件","required":true,"schema":{"$ref":"#/components/schemas/SysDictTypeBo"}},{"name":"pageQuery","in":"query","description":"分页参数","required":true,"schema":{"$ref":"#/components/schemas/PageQuery"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"字典类型分页结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RPageResultSysDictTypeVo"}}}}}}},"/system/dict/data/{dictCode}":{"get":{"tags":["数据字典信息"],"summary":"查询字典数据详细","description":"查询字典数据详细

访问权限


**权限校验:**

- `system:dict:query`

","operationId":"getInfo_13","parameters":[{"name":"dictCode","in":"path","description":"字典code","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"字典数据详情","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RSysDictDataVo"}}}}}}},"/system/dict/data/type/{dictType}":{"get":{"tags":["数据字典信息"],"summary":"根据字典类型查询字典数据信息","description":"根据字典类型查询字典数据信息","operationId":"dictType","parameters":[{"name":"dictType","in":"path","description":"字典类型","required":true,"schema":{"type":"string"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"字典数据列表","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RListSysDictDataVo"}}}}}}},"/system/dict/data/list":{"get":{"tags":["数据字典信息"],"summary":"分页查询字典数据列表。","description":"分页查询字典数据列表。

访问权限


**权限校验:**

- `system:dict:list`

","operationId":"list_11","parameters":[{"name":"dictData","in":"query","description":"查询条件","required":true,"schema":{"$ref":"#/components/schemas/SysDictDataBo"}},{"name":"pageQuery","in":"query","description":"分页参数","required":true,"schema":{"$ref":"#/components/schemas/PageQuery"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"字典数据分页结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RPageResultSysDictDataVo"}}}}}}},"/system/dept/{deptId}":{"get":{"tags":["部门信息"],"summary":"根据部门编号获取详细信息","description":"根据部门编号获取详细信息

访问权限


**权限校验:**

- `system:dept:query`

","operationId":"getInfo_14","parameters":[{"name":"deptId","in":"path","description":"部门ID","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"部门详情","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RSysDeptVo"}}}}}},"delete":{"tags":["部门信息"],"summary":"删除部门","description":"删除部门

访问权限


**权限校验:**

- `system:dept:remove`

","operationId":"remove_2","parameters":[{"name":"deptId","in":"path","description":"部门ID","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"操作结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/system/dept/optionselect":{"get":{"tags":["部门信息"],"summary":"获取部门选择框列表","description":"获取部门选择框列表

访问权限


**权限校验:**

- `system:dept:query`

","operationId":"optionselect_4","parameters":[{"name":"deptIds","in":"query","description":"部门ID串","required":false,"schema":{"type":"array","items":{"type":"integer","format":"int64"}}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"部门列表","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RListSysDeptVo"}}}}}}},"/system/dept/list":{"get":{"tags":["部门信息"],"summary":"查询部门列表。","description":"查询部门列表。

访问权限


**权限校验:**

- `system:dept:list`

","operationId":"list_12","parameters":[{"name":"dept","in":"query","description":"查询条件","required":true,"schema":{"$ref":"#/components/schemas/SysDeptBo"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"部门列表","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RListSysDeptVo"}}}}}}},"/system/dept/list/exclude/{deptId}":{"get":{"tags":["部门信息"],"summary":"查询部门列表(排除节点)","description":"查询部门列表(排除节点)

访问权限


**权限校验:**

- `system:dept:list`

","operationId":"excludeChild","parameters":[{"name":"deptId","in":"path","description":"部门ID","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"过滤后的部门列表","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RListSysDeptVo"}}}}}}},"/system/config/{configId}":{"get":{"tags":["参数配置 信息操作处理"],"summary":"根据参数编号获取详细信息","description":"根据参数编号获取详细信息

访问权限


**权限校验:**

- `system:config:query`

","operationId":"getInfo_15","parameters":[{"name":"configId","in":"path","description":"参数ID","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"参数配置详情","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RSysConfigVo"}}}}}}},"/system/config/list":{"get":{"tags":["参数配置 信息操作处理"],"summary":"分页查询参数配置列表。","description":"分页查询参数配置列表。

访问权限


**权限校验:**

- `system:config:list`

","operationId":"list_13","parameters":[{"name":"config","in":"query","description":"查询条件","required":true,"schema":{"$ref":"#/components/schemas/SysConfigBo"}},{"name":"pageQuery","in":"query","description":"分页参数","required":true,"schema":{"$ref":"#/components/schemas/PageQuery"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"参数配置分页结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RPageResultSysConfigVo"}}}}}}},"/system/config/configKey/{configKey}":{"get":{"tags":["参数配置 信息操作处理"],"summary":"根据参数键名查询参数值","description":"根据参数键名查询参数值","operationId":"getConfigKey","parameters":[{"name":"configKey","in":"path","description":"参数Key","required":true,"schema":{"type":"string"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"参数值","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RString"}}}}}}},"/system/client/{id}":{"get":{"tags":["客户端管理"],"summary":"获取单个客户端的详细配置信息。","description":"获取单个客户端的详细配置信息。

访问权限


**权限校验:**

- `system:client:query`

","operationId":"getInfo_16","parameters":[{"name":"id","in":"path","description":"主键","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"客户端详情","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RSysClientVo"}}}}}}},"/system/client/list":{"get":{"tags":["客户端管理"],"summary":"分页查询客户端管理列表。","description":"分页查询客户端管理列表。

访问权限


**权限校验:**

- `system:client:list`

","operationId":"list_14","parameters":[{"name":"bo","in":"query","description":"查询条件","required":true,"schema":{"$ref":"#/components/schemas/SysClientBo"}},{"name":"pageQuery","in":"query","description":"分页参数","required":true,"schema":{"$ref":"#/components/schemas/PageQuery"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"客户端分页数据","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RPageResultSysClientVo"}}}}}}},"/resource/sms/code":{"get":{"tags":["验证码操作处理"],"summary":"发送短信验证码。","description":"发送短信验证码。

访问权限


> **权限策略**:忽略权限检查
","operationId":"smsCode","parameters":[{"name":"phoneNumber","in":"query","description":"用户手机号","required":true,"schema":{"type":"string","minLength":1}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"操作结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/resource/oss/list":{"get":{"tags":["文件上传 控制层"],"summary":"分页查询 OSS 对象存储列表。","description":"分页查询 OSS 对象存储列表。

访问权限


**权限校验:**

- `system:oss:list`

","operationId":"list_15","parameters":[{"name":"bo","in":"query","description":"查询条件","required":true,"schema":{"$ref":"#/components/schemas/SysOssBo"}},{"name":"pageQuery","in":"query","description":"分页参数","required":true,"schema":{"$ref":"#/components/schemas/PageQuery"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OSS 分页结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RPageResultSysOssVo"}}}}}}},"/resource/oss/listByIds/{ossIds}":{"get":{"tags":["文件上传 控制层"],"summary":"查询OSS对象基于id串","description":"查询OSS对象基于id串

访问权限


**权限校验:**

- `system:oss:query`

","operationId":"listByIds","parameters":[{"name":"ossIds","in":"path","description":"OSS对象ID串","required":true,"schema":{"type":"array","items":{"type":"integer","format":"int64"}}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OSS 对象列表","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RListSysOssVo"}}}}}}},"/resource/oss/download/{ossId}":{"get":{"tags":["文件上传 控制层"],"summary":"下载OSS对象","description":"下载OSS对象

访问权限


**权限校验:**

- `system:oss:download`

","operationId":"download","parameters":[{"name":"ossId","in":"path","description":"OSS对象ID","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"500":{"description":"Internal Server Error"},"200":{"description":"OK","content":{"*/*":{"schema":{"type":"string","format":"byte"}}}}}}},"/resource/oss/config/{ossConfigId}":{"get":{"tags":["对象存储配置"],"summary":"获取单个对象存储配置详情。","description":"获取单个对象存储配置详情。

访问权限


**权限校验:**

- `system:ossConfig:list`

","operationId":"getInfo_17","parameters":[{"name":"ossConfigId","in":"path","description":"OSS配置ID","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"配置详情","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RSysOssConfigVo"}}}}}}},"/resource/oss/config/list":{"get":{"tags":["对象存储配置"],"summary":"分页查询对象存储配置列表。","description":"分页查询对象存储配置列表。

访问权限


**权限校验:**

- `system:ossConfig:list`

","operationId":"list_16","parameters":[{"name":"bo","in":"query","description":"查询条件","required":true,"schema":{"$ref":"#/components/schemas/SysOssConfigBo"}},{"name":"pageQuery","in":"query","description":"分页参数","required":true,"schema":{"$ref":"#/components/schemas/PageQuery"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"配置分页数据","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RPageResultSysOssConfigVo"}}}}}}},"/resource/message":{"get":{"tags":["SSE 控制器"],"summary":"建立当前登录用户的 SSE 连接。","description":"建立当前登录用户的 SSE 连接。","operationId":"connect","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"SSE 发射器","content":{"text/event-stream":{"schema":{"$ref":"#/components/schemas/SseEmitter"}}}}}}},"/resource/message/close":{"get":{"tags":["SSE 控制器"],"summary":"关闭当前登录用户的 SSE 连接。","description":"关闭当前登录用户的 SSE 连接。

访问权限


> **权限策略**:忽略权限检查
","operationId":"close","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"操作结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/resource/message/box":{"get":{"tags":["消息记录控制器"],"summary":"查询当前用户消息盒子数据","description":"查询当前用户消息盒子数据","operationId":"getBox","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"消息盒子数据","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RSysMessageBoxVo"}}}}}}},"/resource/email/code":{"get":{"tags":["验证码操作处理"],"summary":"发送邮箱验证码","description":"发送邮箱验证码

访问权限


> **权限策略**:忽略权限检查
","operationId":"emailCode","parameters":[{"name":"email","in":"query","description":"邮箱","required":true,"schema":{"type":"string","minLength":1}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"操作结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/monitor/operlog/list":{"get":{"tags":["操作日志记录"],"summary":"分页查询操作日志记录。","description":"分页查询操作日志记录。

访问权限


**权限校验:**

- `monitor:operlog:list`

","operationId":"list_17","parameters":[{"name":"operLog","in":"query","description":"查询条件","required":true,"schema":{"$ref":"#/components/schemas/SysOperLogBo"}},{"name":"pageQuery","in":"query","description":"分页参数","required":true,"schema":{"$ref":"#/components/schemas/PageQuery"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"操作日志分页结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RPageResultSysOperLogVo"}}}}}}},"/monitor/online":{"get":{"tags":["在线用户监控"],"summary":"获取当前登录用户的在线设备列表,仅返回当前账号仍有效的 token 会话。","description":"获取当前登录用户的在线设备列表,仅返回当前账号仍有效的 token 会话。","operationId":"getInfo_18","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"当前用户在线设备列表","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RPageResultSysUserOnline"}}}}}}},"/monitor/online/list":{"get":{"tags":["在线用户监控"],"summary":"获取在线用户监控列表,并按 IP 或用户名条件过滤当前有效会话。","description":"获取在线用户监控列表,并按 IP 或用户名条件过滤当前有效会话。

访问权限


**权限校验:**

- `monitor:online:list`

","operationId":"list_18","parameters":[{"name":"ipaddr","in":"query","description":"IP地址","required":true,"schema":{"type":"string"}},{"name":"userName","in":"query","description":"用户名","required":true,"schema":{"type":"string"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"在线用户分页数据","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RPageResultSysUserOnline"}}}}}}},"/monitor/loginInfo/unlock/{userName}":{"get":{"tags":["系统访问记录"],"summary":"清除指定用户的登录失败锁定状态。","description":"清除指定用户的登录失败锁定状态。

访问权限


**权限校验:**

- `monitor:logininfo:unlock`

","operationId":"unlock_1","parameters":[{"name":"userName","in":"path","description":"用户名","required":true,"schema":{"type":"string"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"操作结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/monitor/loginInfo/list":{"get":{"tags":["系统访问记录"],"summary":"分页查询系统访问记录。","description":"分页查询系统访问记录。

访问权限


**权限校验:**

- `monitor:logininfo:list`

","operationId":"list_19","parameters":[{"name":"loginInfo","in":"query","description":"查询条件","required":true,"schema":{"$ref":"#/components/schemas/SysLoginInfoBo"}},{"name":"pageQuery","in":"query","description":"分页参数","required":true,"schema":{"$ref":"#/components/schemas/PageQuery"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"登录日志分页结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RPageResultSysLoginInfoVo"}}}}}}},"/monitor/cache":{"get":{"tags":["缓存监控"],"summary":"获取 Redis 缓存监控信息。","description":"获取 Redis 缓存监控信息。

访问权限


**权限校验:**

- `monitor:cache:list`

","operationId":"getInfo_19","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"500":{"description":"Internal Server Error"},"200":{"description":"Redis 信息、库大小与命令统计","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RCacheListInfoVo"}}}}}}},"/device/device/{deviceId}":{"get":{"tags":["后台设备管理。"],"summary":"查询设备详情。运行数据只读。","description":"查询设备详情。运行数据只读。

访问权限


**权限校验:**

- `device:device:query`

","operationId":"getInfo_20","parameters":[{"name":"deviceId","in":"path","description":"设备主键","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"设备详情","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RCzDeviceVo"}}}}}}},"/device/device/productOptions":{"get":{"tags":["后台设备管理。"],"summary":"查询可添加的产品模板。","description":"查询可添加的产品模板。

访问权限


**权限校验:**

- `device:device:query` | `device:device:add`

","operationId":"productOptions","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"产品模板","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RListCzProductOptionVo"}}}}}}},"/device/device/locationOptions":{"get":{"tags":["后台设备管理。"],"summary":"查询可选择的房间。","description":"查询可选择的房间。

访问权限


**权限校验:**

- `device:device:query` | `device:device:add` | `device:device:edit`

","operationId":"locationOptions","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"房间","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RListCzLocationOptionVo"}}}}}}},"/device/device/list":{"get":{"tags":["后台设备管理。"],"summary":"分页查询设备。","description":"分页查询设备。

访问权限


**权限校验:**

- `device:device:list`

","operationId":"list_20","parameters":[{"name":"bo","in":"query","description":"查询条件","required":true,"schema":{"$ref":"#/components/schemas/CzDeviceBo"}},{"name":"pageQuery","in":"query","description":"分页参数","required":true,"schema":{"$ref":"#/components/schemas/PageQuery"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"设备分页","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RPageResultCzDeviceVo"}}}}}}},"/demo/websocket/send":{"get":{"tags":["WebSocket 演示案例"],"summary":"发布消息","description":"发布消息","operationId":"send","parameters":[{"name":"userId","in":"query","description":"目标用户","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"message","in":"query","description":"发送内容","required":true,"schema":{"type":"string"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/demo/tree/{id}":{"get":{"tags":["测试树表Controller"],"summary":"获取测试树表详细信息","description":"获取测试树表详细信息

访问权限


**权限校验:**

- `demo:tree:query`

","operationId":"getInfo_21","parameters":[{"name":"id","in":"path","description":"测试树ID","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RTestTreeVo"}}}}}}},"/demo/tree/list":{"get":{"tags":["测试树表Controller"],"summary":"查询测试树表列表","description":"查询测试树表列表

访问权限


**权限校验:**

- `demo:tree:list`

","operationId":"list_21","parameters":[{"name":"bo","in":"query","required":true,"schema":{"$ref":"#/components/schemas/TestTreeBo"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RListTestTreeVo"}}}}}}},"/demo/tree/export":{"get":{"tags":["测试树表Controller"],"summary":"导出测试树表列表","description":"导出测试树表列表

访问权限


**权限校验:**

- `demo:tree:export`

","operationId":"export_13","parameters":[{"name":"bo","in":"query","required":true,"schema":{"$ref":"#/components/schemas/TestTreeBo"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK"}}}},"/demo/sms/sendTencent":{"get":{"tags":["短信演示案例"],"summary":"发送短信Tencent","description":"发送短信Tencent","operationId":"sendTencent","parameters":[{"name":"phones","in":"query","description":"电话号","required":true,"schema":{"type":"string"}},{"name":"templateId","in":"query","description":"模板ID","required":true,"schema":{"type":"string"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RObject"}}}}}}},"/demo/sms/sendAliyun":{"get":{"tags":["短信演示案例"],"summary":"发送短信Aliyun","description":"发送短信Aliyun","operationId":"sendAliyun","parameters":[{"name":"phones","in":"query","description":"电话号","required":true,"schema":{"type":"string"}},{"name":"templateId","in":"query","description":"模板ID","required":true,"schema":{"type":"string"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RObject"}}}}}}},"/demo/sms/removeBlacklist":{"get":{"tags":["短信演示案例"],"summary":"移除黑名单","description":"移除黑名单","operationId":"removeBlacklist","parameters":[{"name":"phone","in":"query","description":"手机号","required":true,"schema":{"type":"string"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RObject"}}}}}}},"/demo/sms/addBlacklist":{"get":{"tags":["短信演示案例"],"summary":"添加黑名单","description":"添加黑名单","operationId":"addBlacklist","parameters":[{"name":"phone","in":"query","description":"手机号","required":true,"schema":{"type":"string"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RObject"}}}}}}},"/demo/sensitive/test":{"get":{"tags":["测试数据脱敏控制器"],"summary":"测试数据脱敏","description":"测试数据脱敏","operationId":"test","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RTestSensitive"}}}}}}},"/demo/saTokenDoc/special/tempPermission":{"get":{"tags":["SaToken 权限测试 接口文档输出测试"],"summary":"场景15:临时权限校验(SaCheckPermission逻辑:临时权限>永久权限)\n 注:临时权限需通过SaToken API手动设置,如 SaHolder.getStpLogic().setTempPermission(\"system:temp:test\")","description":"场景15:临时权限校验(SaCheckPermission逻辑:临时权限>永久权限)\n 注:临时权限需通过SaToken API手动设置,如 SaHolder.getStpLogic().setTempPermission(\"system:temp:test\")

访问权限


**权限校验:**

- `system:temp:test`

","operationId":"tempPermission","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/demo/saTokenDoc/special/loginTypeSpecify":{"get":{"tags":["SaToken 权限测试 接口文档输出测试"],"summary":"场景16:登录类型指定(多端登录场景,如PC/APP/小程序)\n 注:需配合SaToken多账号体系配置","description":"场景16:登录类型指定(多端登录场景,如PC/APP/小程序)\n 注:需配合SaToken多账号体系配置","operationId":"loginTypeSpecify","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/demo/saTokenDoc/special/ignoreOverride":{"get":{"tags":["SaToken 权限测试 接口文档输出测试"],"summary":"场景14:SaIgnore局部覆盖(方法注解覆盖类注解,若有)\n 假设类上有@SaCheckLogin,方法上@SaIgnore会覆盖","description":"场景14:SaIgnore局部覆盖(方法注解覆盖类注解,若有)\n 假设类上有@SaCheckLogin,方法上@SaIgnore会覆盖

访问权限


> **权限策略**:忽略权限检查
","operationId":"ignoreOverride","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/demo/saTokenDoc/basic/singleRole":{"get":{"tags":["SaToken 权限测试 接口文档输出测试"],"summary":"场景2:单一角色校验(AND模式,默认)","description":"场景2:单一角色校验(AND模式,默认)

访问权限


**角色校验:**

- `admin`
","operationId":"singleRole","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/demo/saTokenDoc/basic/singlePermission":{"get":{"tags":["SaToken 权限测试 接口文档输出测试"],"summary":"场景3:单一权限校验(AND模式,默认)","description":"场景3:单一权限校验(AND模式,默认)

访问权限


**权限校验:**

- `system:user:view`

","operationId":"singlePermission","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/demo/saTokenDoc/basic/loginOnly":{"get":{"tags":["SaToken 权限测试 接口文档输出测试"],"summary":"场景1:仅登录校验(无角色/权限限制,只需登录态)","description":"场景1:仅登录校验(无角色/权限限制,只需登录态)","operationId":"loginOnly","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/demo/saTokenDoc/basic/ignoreAll":{"get":{"tags":["SaToken 权限测试 接口文档输出测试"],"summary":"场景4:忽略所有权限校验(SaIgnore优先级最高)","description":"场景4:忽略所有权限校验(SaIgnore优先级最高)

访问权限


> **权限策略**:忽略权限检查
","operationId":"ignoreAll","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/demo/saTokenDoc/advanced/roleWildcardPrefix":{"get":{"tags":["SaToken 权限测试 接口文档输出测试"],"summary":"场景10:角色通配符匹配(前缀匹配)\n 拥有admin_* 即可匹配所有admin开头的角色","description":"场景10:角色通配符匹配(前缀匹配)\n 拥有admin_* 即可匹配所有admin开头的角色

访问权限


**角色校验:**

- `admin_*`
","operationId":"roleWildcardPrefix","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/demo/saTokenDoc/advanced/permWithOrRole":{"get":{"tags":["SaToken 权限测试 接口文档输出测试"],"summary":"场景13:orRole参数(权限校验失败时,兜底角色校验)\n 核心逻辑:无system:user:export权限时,检查是否有admin/operator角色","description":"场景13:orRole参数(权限校验失败时,兜底角色校验)\n 核心逻辑:无system:user:export权限时,检查是否有admin/operator角色

访问权限


**权限校验:**

- `system:user:export`
- 或角色:`admin` & `operator`

","operationId":"permWithOrRole","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/demo/saTokenDoc/advanced/permWildcardPrefix":{"get":{"tags":["SaToken 权限测试 接口文档输出测试"],"summary":"场景9:权限通配符匹配(前缀匹配)\n 拥有system:user:* 即可匹配所有用户模块权限","description":"场景9:权限通配符匹配(前缀匹配)\n 拥有system:user:* 即可匹配所有用户模块权限

访问权限


**权限校验:**

- `system:user:*`

","operationId":"permWildcardPrefix","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/demo/saTokenDoc/advanced/mixRolePermOr":{"get":{"tags":["SaToken 权限测试 接口文档输出测试"],"summary":"场景12:权限+角色混合OR模式(任一条件满足即可)\n 满足任一:拥有super_admin角色 | 拥有system:manage权限","description":"场景12:权限+角色混合OR模式(任一条件满足即可)\n 满足任一:拥有super_admin角色 | 拥有system:manage权限

访问权限


**权限校验:**

- `system:manage`

**角色校验:**

- `super_admin`
","operationId":"mixRolePermOr","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/demo/saTokenDoc/advanced/mixRolePermAnd":{"get":{"tags":["SaToken 权限测试 接口文档输出测试"],"summary":"场景11:权限+角色混合AND模式(所有条件必须满足)\n 需同时满足:拥有admin角色 + 拥有system:user:all权限","description":"场景11:权限+角色混合AND模式(所有条件必须满足)\n 需同时满足:拥有admin角色 + 拥有system:user:all权限

访问权限


**权限校验:**

- `system:user:all`

**角色校验:**

- `admin`
","operationId":"mixRolePermAnd","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/demo/saTokenDoc/advance/multiRoleOr":{"get":{"tags":["SaToken 权限测试 接口文档输出测试"],"summary":"场景6:多角色OR模式(拥有任一角色即可)","description":"场景6:多角色OR模式(拥有任一角色即可)

访问权限


**角色校验:**

- `admin` | `test`
","operationId":"multiRoleOr","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/demo/saTokenDoc/advance/multiRoleAnd":{"get":{"tags":["SaToken 权限测试 接口文档输出测试"],"summary":"场景5:多角色AND模式(必须同时拥有所有角色)","description":"场景5:多角色AND模式(必须同时拥有所有角色)

访问权限


**角色校验:**

- `admin` & `operator`
","operationId":"multiRoleAnd","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/demo/saTokenDoc/advance/multiPermOr":{"get":{"tags":["SaToken 权限测试 接口文档输出测试"],"summary":"场景8:多权限OR模式(拥有任一权限即可)","description":"场景8:多权限OR模式(拥有任一权限即可)

访问权限


**权限校验:**

- `system:user:add` | `system:user:delete`

","operationId":"multiPermOr","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/demo/saTokenDoc/advance/multiPermAnd":{"get":{"tags":["SaToken 权限测试 接口文档输出测试"],"summary":"场景7:多权限AND模式(必须同时拥有所有权限)","description":"场景7:多权限AND模式(必须同时拥有所有权限)

访问权限


**权限校验:**

- `system:user:edit` & `system:log:view`

","operationId":"multiPermAnd","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/demo/redisLock/testLock4j":{"get":{"tags":["测试分布式锁的样例"],"summary":"测试lock4j 注解","description":"测试lock4j 注解","operationId":"testLock4j","parameters":[{"name":"key","in":"query","required":true,"schema":{"type":"string"}},{"name":"value","in":"query","required":true,"schema":{"type":"string"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RString"}}}}}}},"/demo/redisLock/testLock4jLockTemplate":{"get":{"tags":["测试分布式锁的样例"],"summary":"测试lock4j 工具","description":"测试lock4j 工具","operationId":"testLock4jLockTemplate","parameters":[{"name":"key","in":"query","required":true,"schema":{"type":"string"}},{"name":"value","in":"query","required":true,"schema":{"type":"string"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RString"}}}}}}},"/demo/redis/pubsub/sub":{"get":{"tags":["Redis 发布订阅 演示案例"],"summary":"订阅消息","description":"订阅消息","operationId":"sub","parameters":[{"name":"key","in":"query","description":"通道Key","required":true,"schema":{"type":"string"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/demo/redis/pubsub/pub":{"get":{"tags":["Redis 发布订阅 演示案例"],"summary":"发布消息","description":"发布消息","operationId":"pub","parameters":[{"name":"key","in":"query","description":"通道Key","required":true,"schema":{"type":"string"}},{"name":"value","in":"query","description":"发送内容","required":true,"schema":{"type":"string"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/demo/rateLimiter/testip":{"get":{"tags":["测试分布式限流样例"],"summary":"测试请求IP限流\n 同一IP请求受影响","description":"测试请求IP限流\n 同一IP请求受影响","operationId":"testip","parameters":[{"name":"value","in":"query","required":true,"schema":{"type":"string"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RString"}}}}}}},"/demo/rateLimiter/testcluster":{"get":{"tags":["测试分布式限流样例"],"summary":"测试集群实例限流\n 启动两个后端服务互不影响","description":"测试集群实例限流\n 启动两个后端服务互不影响","operationId":"testcluster","parameters":[{"name":"value","in":"query","required":true,"schema":{"type":"string"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RString"}}}}}}},"/demo/rateLimiter/test":{"get":{"tags":["测试分布式限流样例"],"summary":"测试全局限流\n 全局影响","description":"测试全局限流\n 全局影响","operationId":"test_1","parameters":[{"name":"value","in":"query","required":true,"schema":{"type":"string"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RString"}}}}}}},"/demo/rateLimiter/testObj":{"get":{"tags":["测试分布式限流样例"],"summary":"测试请求IP限流(key基于参数获取)\n 同一IP请求受影响\n ","description":"测试请求IP限流(key基于参数获取)\n 同一IP请求受影响\n

\n 简单变量获取 #变量 复杂表达式 #{#变量 != 1 ? 1 : 0}","operationId":"testObj","parameters":[{"name":"value","in":"query","required":true,"schema":{"type":"string"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RString"}}}}}}},"/demo/queue/priority/remove":{"get":{"tags":["优先队列 演示案例"],"summary":"删除队列数据","description":"删除队列数据","operationId":"remove_3","parameters":[{"name":"queueName","in":"query","description":"队列名","required":true,"schema":{"type":"string"}},{"name":"name","in":"query","description":"对象名","required":true,"schema":{"type":"string"}},{"name":"orderNum","in":"query","description":"排序号","required":true,"schema":{"type":"integer","format":"int32"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/demo/queue/priority/get":{"get":{"tags":["优先队列 演示案例"],"summary":"获取队列数据","description":"获取队列数据","operationId":"get","parameters":[{"name":"queueName","in":"query","description":"队列名","required":true,"schema":{"type":"string"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/demo/queue/priority/add":{"get":{"tags":["优先队列 演示案例"],"summary":"添加队列数据","description":"添加队列数据","operationId":"add_19","parameters":[{"name":"queueName","in":"query","description":"队列名","required":true,"schema":{"type":"string"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/demo/mqtt/send":{"get":{"tags":["mqtt 演示案例"],"summary":"发布一条 MQTT 测试消息。","description":"发布一条 MQTT 测试消息。","operationId":"send_1","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"是否发送成功","content":{"*/*":{"schema":{"type":"boolean","description":"是否更新已存在数据"}}}}}}},"/demo/mcp/tools":{"get":{"tags":["MCP Client 演示案例。"],"summary":"查询外部 MCP Server 工具列表。","description":"查询外部 MCP Server 工具列表。","operationId":"tools","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RMapStringListString"}}}}}}},"/demo/mcp/resource":{"get":{"tags":["MCP Client 演示案例。"],"summary":"读取外部 MCP 资源。","description":"读取外部 MCP 资源。","operationId":"resource","parameters":[{"name":"uri","in":"query","required":false,"schema":{"type":"string","default":"demo://summary"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RMapStringMcpResourceReadResult"}}}}}}},"/demo/mcp/receive":{"get":{"tags":["MCP Client 演示案例。"],"summary":"调用外部 MCP 工具并模拟业务处理。","description":"调用外部 MCP 工具并模拟业务处理。","operationId":"receive","parameters":[{"name":"toolName","in":"query","required":false,"schema":{"type":"string","default":"demo_get_data"}},{"name":"id","in":"query","required":false,"schema":{"type":"string","default":"1"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RMcpDemoHandleResult"}}}}}}},"/demo/mail/sendSimpleMessage":{"get":{"tags":["邮件发送案例"],"summary":"发送邮件","description":"发送邮件","operationId":"sendSimpleMessage","parameters":[{"name":"to","in":"query","description":"接收人","required":true,"schema":{"type":"string"}},{"name":"subject","in":"query","description":"标题","required":true,"schema":{"type":"string"}},{"name":"text","in":"query","description":"内容","required":true,"schema":{"type":"string"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/demo/mail/sendMessageWithAttachments":{"get":{"tags":["邮件发送案例"],"summary":"发送邮件(多附件)","description":"发送邮件(多附件)","operationId":"sendMessageWithAttachments","parameters":[{"name":"to","in":"query","description":"接收人","required":true,"schema":{"type":"string"}},{"name":"subject","in":"query","description":"标题","required":true,"schema":{"type":"string"}},{"name":"text","in":"query","description":"内容","required":true,"schema":{"type":"string"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/demo/mail/sendMessageWithAttachment":{"get":{"tags":["邮件发送案例"],"summary":"发送邮件(带附件)","description":"发送邮件(带附件)","operationId":"sendMessageWithAttachment","parameters":[{"name":"to","in":"query","description":"接收人","required":true,"schema":{"type":"string"}},{"name":"subject","in":"query","description":"标题","required":true,"schema":{"type":"string"}},{"name":"text","in":"query","description":"内容","required":true,"schema":{"type":"string"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/demo/i18n":{"get":{"tags":["测试国际化"],"summary":"通过code获取国际化内容\n code为 messages","description":"通过code获取国际化内容\n code为 messages.properties 中的 key\n

\n 测试使用 user.register.success","operationId":"get_1","parameters":[{"name":"code","in":"query","description":"国际化code","required":true,"schema":{"type":"string"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/demo/i18n/test2":{"get":{"tags":["测试国际化"],"summary":"Bean 校验国际化\n 不传值 分别查看异常返回\n ","description":"Bean 校验国际化\n 不传值 分别查看异常返回\n

\n 测试使用 not.null","operationId":"test2","parameters":[{"name":"bo","in":"query","required":true,"schema":{"$ref":"#/components/schemas/TestI18nBo"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RTestI18nBo"}}}}}}},"/demo/i18n/test1":{"get":{"tags":["测试国际化"],"summary":"Validator 校验国际化\n 不传值 分别查看异常返回\n ","description":"Validator 校验国际化\n 不传值 分别查看异常返回\n

\n 测试使用 not.null","operationId":"test1","parameters":[{"name":"str","in":"query","required":true,"schema":{"type":"string","minLength":1}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/demo/excel/exportWithOptions":{"get":{"tags":["测试Excel功能"],"summary":"导出下拉框","description":"导出下拉框","operationId":"exportWithOptions","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK"}}}},"/demo/excel/exportTemplateOne":{"get":{"tags":["测试Excel功能"],"summary":"单列表多数据","description":"单列表多数据","operationId":"exportTemplateOne","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK"}}}},"/demo/excel/exportTemplateMultiSheet":{"get":{"tags":["测试Excel功能"],"summary":"多个sheet导出","description":"多个sheet导出","operationId":"exportTemplateMultiSheet","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK"}}}},"/demo/excel/exportTemplateMuliti":{"get":{"tags":["测试Excel功能"],"summary":"多列表多数据","description":"多列表多数据","operationId":"exportTemplateMuliti","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK"}}}},"/demo/excel/customExport":{"get":{"tags":["测试Excel功能"],"summary":"自定义导出","description":"自定义导出","operationId":"customExport","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK"}}}},"/demo/encrypt":{"get":{"tags":["测试数据库加解密功能"],"summary":"测试数据库加解密","description":"测试数据库加解密","operationId":"test_2","parameters":[{"name":"key","in":"query","description":"测试key","required":true,"schema":{"type":"string"}},{"name":"value","in":"query","description":"测试value","required":true,"schema":{"type":"string"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RMapStringTestDemoEncrypt"}}}}}}},"/demo/demo/{id}":{"get":{"tags":["测试单表Controller"],"summary":"获取测试单表详细信息","description":"获取测试单表详细信息

访问权限


**权限校验:**

- `demo:demo:query`

","operationId":"getInfo_22","parameters":[{"name":"id","in":"path","description":"测试ID","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RTestDemoVo"}}}}}}},"/demo/demo/page":{"get":{"tags":["测试单表Controller"],"summary":"自定义分页查询","description":"自定义分页查询

访问权限


**权限校验:**

- `demo:demo:list`

","operationId":"page","parameters":[{"name":"bo","in":"query","required":true,"schema":{"$ref":"#/components/schemas/TestDemoBo"}},{"name":"pageQuery","in":"query","required":true,"schema":{"$ref":"#/components/schemas/PageQuery"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RPageResultTestDemoVo"}}}}}}},"/demo/demo/list":{"get":{"tags":["测试单表Controller"],"summary":"查询测试单表列表","description":"查询测试单表列表

访问权限


**权限校验:**

- `demo:demo:list`

","operationId":"list_22","parameters":[{"name":"bo","in":"query","required":true,"schema":{"$ref":"#/components/schemas/TestDemoBo"}},{"name":"pageQuery","in":"query","required":true,"schema":{"$ref":"#/components/schemas/PageQuery"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RPageResultTestDemoVo"}}}}}}},"/demo/cache/test6":{"get":{"tags":["spring-cache 演示案例"],"summary":"测试设置过期时间\n 手动设置过期时间10秒\n 11秒后获取 判断是否相等","description":"测试设置过期时间\n 手动设置过期时间10秒\n 11秒后获取 判断是否相等","operationId":"test6","parameters":[{"name":"key","in":"query","required":true,"schema":{"type":"string"}},{"name":"value","in":"query","required":true,"schema":{"type":"string"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RBoolean"}}}}}}},"/demo/cache/test3":{"get":{"tags":["spring-cache 演示案例"],"summary":"测试 @CacheEvict\n ","description":"测试 @CacheEvict\n

\n 使用了CacheEvict注解的方法,会清空指定缓存\n 「一般用在删除的方法上」\n

\n cacheNames 命名规则 查看 {@link CacheNames CacheNames} 注释 支持多参数","operationId":"test3","parameters":[{"name":"key","in":"query","required":true,"schema":{"type":"string"}},{"name":"value","in":"query","required":true,"schema":{"type":"string"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RString"}}}}}}},"/demo/cache/test2":{"get":{"tags":["spring-cache 演示案例"],"summary":"测试 @CachePut\n ","description":"测试 @CachePut\n

\n 加了@CachePut注解的方法,会把方法的返回值put到缓存里面缓存起来,供其它地方使用\n 它「通常用在新增或者实时更新方法上」\n

\n cacheNames 命名规则 查看 {@link CacheNames CacheNames} 注释 支持多参数","operationId":"test2_1","parameters":[{"name":"key","in":"query","required":true,"schema":{"type":"string"}},{"name":"value","in":"query","required":true,"schema":{"type":"string"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RString"}}}}}}},"/demo/cache/test1":{"get":{"tags":["spring-cache 演示案例"],"summary":"测试 @Cacheable\n ","description":"测试 @Cacheable\n

\n 表示这个方法有了缓存的功能,方法的返回值会被缓存下来\n 下一次调用该方法前,会去检查是否缓存中已经有值\n 如果有就直接返回,不调用方法\n 如果没有,就调用方法,然后把结果缓存起来\n 这个注解「一般用在查询方法上」\n

\n 重点说明: 缓存注解严谨与其他筛选数据功能一起使用\n 例如: 数据权限注解 会造成 缓存击穿 与 数据不一致问题\n

\n cacheNames 命名规则 查看 {@link CacheNames CacheNames} 注释 支持多参数","operationId":"test1_1","parameters":[{"name":"key","in":"query","required":true,"schema":{"type":"string"}},{"name":"value","in":"query","required":true,"schema":{"type":"string"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RString"}}}}}}},"/auth/code":{"get":{"tags":["验证码操作处理"],"summary":"获取图片验证码。","description":"获取图片验证码。

访问权限


> **权限策略**:忽略权限检查
","operationId":"getCode","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"验证码信息","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RCaptchaVo"}}}}}}},"/auth/binding/{source}":{"get":{"tags":["认证控制器,提供登录、注册、社交绑定和退出能力。"],"summary":"获取第三方绑定跳转地址。","description":"获取第三方绑定跳转地址。

访问权限


> **权限策略**:忽略权限检查
","operationId":"authBinding","parameters":[{"name":"source","in":"path","description":"登录来源","required":true,"schema":{"type":"string"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"跳转地址","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RString"}}}}}}},"/app/profile":{"get":{"tags":["App 用户资料控制器"],"summary":"获取当前用户资料","description":"获取当前用户资料","operationId":"getProfile","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RAppUserProfileVo"}}}}}}},"/app/location/list/{homeId}":{"get":{"tags":["App 房间位置管理控制器"],"summary":"查询指定家庭的所有房间位置列表","description":"查询指定家庭的所有房间位置列表","operationId":"listLocations","parameters":[{"name":"homeId","in":"path","description":"家庭ID","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"位置列表(按排序值升序、创建时间升序排列)","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RListAppLocationVo"}}}}}}},"/app/home/list":{"get":{"tags":["App 家庭管理控制器"],"summary":"查询当前用户的所有家庭列表","description":"查询当前用户的所有家庭列表","operationId":"listHomes","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"家庭列表(按是否默认降序、创建时间升序排列,包含位置数量统计)","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RListAppHomeVo"}}}}}}},"/api/snail/chat/my-agents":{"get":{"tags":["snail-ai-chat-gateway-controller"],"operationId":"myAgents","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResultListOpenApiAgentVO"}}}}}}},"/api/snail/chat/conversations/messages":{"get":{"tags":["snail-ai-chat-gateway-controller"],"operationId":"getMessages","parameters":[{"name":"agentId","in":"query","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"conversationId","in":"query","required":true,"schema":{"type":"string"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResultListOpenApiMessageVO"}}}}}}},"/api/snail/chat/messages":{"get":{"tags":["snail-ai-chat-gateway-controller"],"operationId":"getMessages_1","parameters":[{"name":"agentId","in":"query","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"conversationId","in":"query","required":true,"schema":{"type":"string"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResultListOpenApiMessageVO"}}}}}}},"/api/snail/chat/config":{"get":{"tags":["snail-ai-chat-gateway-controller"],"operationId":"config_1","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResultMapStringObject"}}}}}}},"/api/snail/chat/agents":{"get":{"tags":["snail-ai-chat-gateway-controller"],"operationId":"listAgents","parameters":[{"name":"arg0","in":"query","required":true,"schema":{"$ref":"#/components/schemas/OpenApiAgentQueryRequest"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/PageResultListOpenApiAgentVO"}}}}}}},"/api/snail/chat/agent":{"get":{"tags":["snail-ai-chat-gateway-controller"],"operationId":"getAgent","parameters":[{"name":"arg0","in":"query","required":true,"schema":{"$ref":"#/components/schemas/OpenApiAgentIdentityRequest"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResultOpenApiAgentVO"}}}}}}},"/":{"get":{"tags":["首页"],"summary":"访问首页时返回引导提示。","description":"访问首页时返回引导提示。

访问权限


> **权限策略**:忽略权限检查
","operationId":"index","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"首页提示语","content":{"*/*":{"schema":{"type":"string"}}}}}}},"/workflow/spel/{ids}":{"delete":{"tags":["流程 SpEL 表达式定义控制器,负责表达式规则的增删改查。"],"summary":"批量删除流程 SpEL 表达式定义。","description":"批量删除流程 SpEL 表达式定义。

访问权限


**权限校验:**

- `workflow:spel:remove`

","operationId":"remove_4","parameters":[{"name":"ids","in":"path","description":"主键串","required":true,"schema":{"type":"array","items":{"type":"integer","format":"int64"}}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"操作结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/workflow/leave/{ids}":{"delete":{"tags":["请假示例控制器,演示业务单据与流程引擎联动的典型用法。"],"summary":"批量删除请假单。","description":"批量删除请假单。

访问权限


**权限校验:**

- `workflow:leave:remove`

","operationId":"remove_5","parameters":[{"name":"ids","in":"path","description":"主键串","required":true,"schema":{"type":"array","items":{"type":"integer","format":"int64"}}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"操作结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/workflow/instance/deleteHisByInstanceIds/{instanceIds}":{"delete":{"tags":["流程实例管理 控制层"],"summary":"按实例 id 批量删除已完成的流程实例。","description":"按实例 id 批量删除已完成的流程实例。

访问权限


**权限校验:**

- `workflow:instance:remove`

","operationId":"deleteHisByInstanceIds","parameters":[{"name":"instanceIds","in":"path","description":"实例id","required":true,"schema":{"type":"array","items":{"type":"integer","format":"int64"}}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"操作结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/workflow/instance/deleteByInstanceIds/{instanceIds}":{"delete":{"tags":["流程实例管理 控制层"],"summary":"按实例 id 批量删除流程实例。","description":"按实例 id 批量删除流程实例。

访问权限


**权限校验:**

- `workflow:instance:remove`

","operationId":"deleteByInstanceIds","parameters":[{"name":"instanceIds","in":"path","description":"实例id","required":true,"schema":{"type":"array","items":{"type":"integer","format":"int64"}}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"操作结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/workflow/instance/deleteByBusinessIds/{businessIds}":{"delete":{"tags":["流程实例管理 控制层"],"summary":"按业务 id 批量删除流程实例。","description":"按业务 id 批量删除流程实例。

访问权限


**权限校验:**

- `workflow:instance:remove`

","operationId":"deleteByBusinessIds","parameters":[{"name":"businessIds","in":"path","description":"业务id","required":true,"schema":{"type":"array","items":{"type":"integer","format":"int64"}}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"操作结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/workflow/definition/{ids}":{"delete":{"tags":["流程定义管理 控制层"],"summary":"批量删除流程定义。","description":"批量删除流程定义。

访问权限


**权限校验:**

- `workflow:definition:remove`

","operationId":"remove_6","parameters":[{"name":"ids","in":"path","description":"流程定义ID集合","required":true,"schema":{"type":"array","items":{"type":"integer","format":"int64"}}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"操作结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/system/user/{userIds}":{"delete":{"tags":["用户信息"],"summary":"删除用户","description":"删除用户

访问权限


**权限校验:**

- `system:user:remove`

","operationId":"remove_7","parameters":[{"name":"userIds","in":"path","description":"用户ID数组","required":true,"schema":{"type":"array","items":{"type":"integer","format":"int64"}}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"操作结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/system/role/{roleIds}":{"delete":{"tags":["角色信息"],"summary":"删除角色","description":"删除角色

访问权限


**权限校验:**

- `system:role:remove`

","operationId":"remove_8","parameters":[{"name":"roleIds","in":"path","description":"角色ID串","required":true,"schema":{"type":"array","items":{"type":"integer","format":"int64"}}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"操作结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/system/post/{postIds}":{"delete":{"tags":["岗位信息操作处理"],"summary":"删除岗位","description":"删除岗位

访问权限


**权限校验:**

- `system:post:remove`

","operationId":"remove_9","parameters":[{"name":"postIds","in":"path","description":"岗位ID串","required":true,"schema":{"type":"array","items":{"type":"integer","format":"int64"}}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"操作结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/system/notice/{noticeIds}":{"delete":{"tags":["公告 信息操作处理"],"summary":"删除通知公告","description":"删除通知公告

访问权限


**权限校验:**

- `system:notice:remove`

","operationId":"remove_10","parameters":[{"name":"noticeIds","in":"path","description":"公告ID串","required":true,"schema":{"type":"array","items":{"type":"integer","format":"int64"}}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"操作结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/system/menu/cascade/{menuIds}":{"delete":{"tags":["菜单信息"],"summary":"批量级联删除菜单","description":"批量级联删除菜单

访问权限


**权限校验:**

- `system:menu:remove`

**角色校验:**

- `superadmin`
","operationId":"remove_11","parameters":[{"name":"menuIds","in":"path","description":"菜单ID串","required":true,"schema":{"type":"array","items":{"type":"integer","format":"int64"}}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"操作结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/system/dict/type/{dictIds}":{"delete":{"tags":["数据字典信息"],"summary":"删除字典类型","description":"删除字典类型

访问权限


**权限校验:**

- `system:dict:remove`

","operationId":"remove_12","parameters":[{"name":"dictIds","in":"path","description":"字典ID串","required":true,"schema":{"type":"array","items":{"type":"integer","format":"int64"}}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"操作结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/system/dict/type/refreshCache":{"delete":{"tags":["数据字典信息"],"summary":"刷新字典缓存。","description":"刷新字典缓存。

访问权限


**权限校验:**

- `system:dict:remove`

","operationId":"refreshCache","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"操作结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/system/dict/data/{dictCodes}":{"delete":{"tags":["数据字典信息"],"summary":"删除字典数据","description":"删除字典数据

访问权限


**权限校验:**

- `system:dict:remove`

","operationId":"remove_13","parameters":[{"name":"dictCodes","in":"path","description":"字典code串","required":true,"schema":{"type":"array","items":{"type":"integer","format":"int64"}}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"操作结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/system/config/{configIds}":{"delete":{"tags":["参数配置 信息操作处理"],"summary":"删除参数配置","description":"删除参数配置

访问权限


**权限校验:**

- `system:config:remove`

","operationId":"remove_14","parameters":[{"name":"configIds","in":"path","description":"参数ID串","required":true,"schema":{"type":"array","items":{"type":"integer","format":"int64"}}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"操作结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/system/config/refreshCache":{"delete":{"tags":["参数配置 信息操作处理"],"summary":"刷新参数缓存。","description":"刷新参数缓存。

访问权限


**权限校验:**

- `system:config:remove`

","operationId":"refreshCache_1","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"操作结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/system/client/{ids}":{"delete":{"tags":["客户端管理"],"summary":"批量删除客户端配置。","description":"批量删除客户端配置。

访问权限


**权限校验:**

- `system:client:remove`

","operationId":"remove_15","parameters":[{"name":"ids","in":"path","description":"主键串","required":true,"schema":{"type":"array","items":{"type":"integer","format":"int64"}}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"操作结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/resource/oss/{ossIds}":{"delete":{"tags":["文件上传 控制层"],"summary":"删除OSS对象存储","description":"删除OSS对象存储

访问权限


**权限校验:**

- `system:oss:remove`

","operationId":"remove_16","parameters":[{"name":"ossIds","in":"path","description":"OSS对象ID串","required":true,"schema":{"type":"array","items":{"type":"integer","format":"int64"}}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"操作结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/resource/oss/config/{ossConfigIds}":{"delete":{"tags":["对象存储配置"],"summary":"批量删除对象存储配置。","description":"批量删除对象存储配置。

访问权限


**权限校验:**

- `system:ossConfig:remove`

","operationId":"remove_17","parameters":[{"name":"ossConfigIds","in":"path","description":"OSS配置ID串","required":true,"schema":{"type":"array","items":{"type":"integer","format":"int64"}}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"操作结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/monitor/operlog/{operIds}":{"delete":{"tags":["操作日志记录"],"summary":"批量删除操作日志记录","description":"批量删除操作日志记录

访问权限


**权限校验:**

- `monitor:operlog:remove`

","operationId":"remove_18","parameters":[{"name":"operIds","in":"path","description":"日志ids","required":true,"schema":{"type":"array","items":{"type":"integer","format":"int64"}}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"操作结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/monitor/operlog/clean":{"delete":{"tags":["操作日志记录"],"summary":"清空操作日志记录。","description":"清空操作日志记录。

访问权限


**权限校验:**

- `monitor:operlog:remove`

","operationId":"clean","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"操作结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/monitor/online/{tokenId}":{"delete":{"tags":["在线用户监控"],"summary":"按 token 强制用户下线,适用于管理员踢除异常会话。","description":"按 token 强制用户下线,适用于管理员踢除异常会话。

访问权限


**权限校验:**

- `monitor:online:forceLogout`

","operationId":"forceLogout","parameters":[{"name":"tokenId","in":"path","description":"token值","required":true,"schema":{"type":"string"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"操作结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/monitor/online/myself/{tokenId}":{"delete":{"tags":["在线用户监控"],"summary":"强退当前账号下指定在线设备,避免误踢其他账号的会话。","description":"强退当前账号下指定在线设备,避免误踢其他账号的会话。","operationId":"remove_19","parameters":[{"name":"tokenId","in":"path","description":"token值","required":true,"schema":{"type":"string"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"操作结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/monitor/loginInfo/{infoIds}":{"delete":{"tags":["系统访问记录"],"summary":"批量删除登录日志","description":"批量删除登录日志

访问权限


**权限校验:**

- `monitor:logininfo:remove`

","operationId":"remove_20","parameters":[{"name":"infoIds","in":"path","description":"日志ids","required":true,"schema":{"type":"array","items":{"type":"integer","format":"int64"}}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"操作结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/monitor/loginInfo/clean":{"delete":{"tags":["系统访问记录"],"summary":"清空系统访问记录。","description":"清空系统访问记录。

访问权限


**权限校验:**

- `monitor:logininfo:remove`

","operationId":"clean_1","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"操作结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/device/device/{deviceIds}":{"delete":{"tags":["后台设备管理。"],"summary":"删除设备。","description":"删除设备。

访问权限


**权限校验:**

- `device:device:remove`

","operationId":"remove_21","parameters":[{"name":"deviceIds","in":"path","description":"设备主键","required":true,"schema":{"type":"array","items":{"type":"integer","format":"int64"}}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"操作结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/demo/tree/{ids}":{"delete":{"tags":["测试树表Controller"],"summary":"删除测试树表","description":"删除测试树表

访问权限


**权限校验:**

- `demo:tree:remove`

","operationId":"remove_22","parameters":[{"name":"ids","in":"path","description":"测试树ID串","required":true,"schema":{"type":"array","items":{"type":"integer","format":"int64"}}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/demo/demo/{ids}":{"delete":{"tags":["测试单表Controller"],"summary":"删除测试单表","description":"删除测试单表

访问权限


**权限校验:**

- `demo:demo:remove`

","operationId":"remove_23","parameters":[{"name":"ids","in":"path","description":"测试ID串","required":true,"schema":{"type":"array","items":{"type":"integer","format":"int64"}}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/demo/batch":{"delete":{"tags":["测试批量方法"],"summary":"删除批量方法","description":"删除批量方法","operationId":"remove_24","responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/auth/unlock/{socialId}":{"delete":{"tags":["认证控制器,提供登录、注册、社交绑定和退出能力。"],"summary":"取消当前用户的社交账号授权。","description":"取消当前用户的社交账号授权。

访问权限


> **权限策略**:忽略权限检查
","operationId":"unlockSocial","parameters":[{"name":"socialId","in":"path","description":"socialId","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"操作结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/app/location/{locationId}":{"delete":{"tags":["App 房间位置管理控制器"],"summary":"删除房间位置(软删除)","description":"删除房间位置(软删除)","operationId":"deleteLocation","parameters":[{"name":"locationId","in":"path","description":"要删除的位置ID","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"操作结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}},"/app/home/{homeId}":{"delete":{"tags":["App 家庭管理控制器"],"summary":"删除家庭\n ","description":"删除家庭\n

\n 软删除指定家庭及其下所有位置,默认家庭不允许删除。","operationId":"deleteHome","parameters":[{"name":"homeId","in":"path","description":"要删除的家庭ID","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"string"}}}},"200":{"description":"操作结果","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RVoid"}}}}}}}},"components":{"schemas":{"RVoid":{"type":"object","description":"响应信息主体","properties":{"code":{"type":"integer","format":"int32","description":"响应状态码"},"msg":{"type":"string","description":"响应提示信息"},"data":{"description":"响应业务数据"}}},"FlowSpelBo":{"type":"object","description":"流程spel表达式定义业务对象 flow_spel","properties":{"id":{"type":"integer","format":"int64","description":"主键id"},"componentName":{"type":"string","description":"组件名称"},"methodName":{"type":"string","description":"方法名"},"methodParams":{"type":"string","description":"参数"},"viewSpel":{"type":"string","description":"预览spel值","minLength":1},"status":{"type":"string","description":"状态(0正常 1停用)","minLength":1},"remark":{"type":"string","description":"备注"},"params":{"type":"object","additionalProperties":{},"description":"请求参数"}},"required":["status","viewSpel"]},"TestLeaveBo":{"type":"object","description":"请假业务对象 test_leave","properties":{"id":{"type":"integer","format":"int64","description":"主键"},"flowCode":{"type":"string","description":"流程code"},"applyCode":{"type":"string","description":"申请编号"},"leaveType":{"type":"string","description":"请假类型","minLength":1},"startDate":{"type":"string","format":"date-time","description":"开始时间"},"endDate":{"type":"string","format":"date-time","description":"结束时间"},"leaveDays":{"type":"integer","format":"int32","description":"请假天数"},"startLeaveDays":{"type":"integer","format":"int32","description":"开始时间"},"endLeaveDays":{"type":"integer","format":"int32","description":"结束时间"},"remark":{"type":"string","description":"请假原因"},"status":{"type":"string","description":"状态"},"params":{"type":"object","additionalProperties":{},"description":"请求参数"}},"required":["endDate","id","leaveType","startDate"]},"RTestLeaveVo":{"type":"object","description":"响应信息主体","properties":{"code":{"type":"integer","format":"int32","description":"响应状态码"},"msg":{"type":"string","description":"响应提示信息"},"data":{"$ref":"#/components/schemas/TestLeaveVo","description":"响应业务数据"}}},"TestLeaveVo":{"type":"object","description":"请假视图对象 test_leave","properties":{"id":{"type":"integer","format":"int64","description":"主键"},"applyCode":{"type":"string","description":"申请编号"},"leaveType":{"type":"string","description":"请假类型"},"startDate":{"type":"string","format":"date-time","description":"开始时间"},"endDate":{"type":"string","format":"date-time","description":"结束时间"},"leaveDays":{"type":"integer","format":"int32","description":"请假天数"},"remark":{"type":"string","description":"备注"},"status":{"type":"string","description":"状态"}}},"FlowVariableBo":{"type":"object","description":"流程变量参数","properties":{"instanceId":{"type":"integer","format":"int64","description":"流程实例 ID"},"key":{"type":"string","description":"变量键"},"value":{"type":"string","description":"变量值"}}},"FlowCancelBo":{"type":"object","description":"撤销流程请求对象。","properties":{"businessId":{"type":"string","description":"业务 ID"},"message":{"type":"string","description":"撤销说明"}}},"RBoolean":{"type":"object","description":"响应信息主体","properties":{"code":{"type":"integer","format":"int32","description":"响应状态码"},"msg":{"type":"string","description":"响应提示信息"},"data":{"type":"boolean","description":"响应业务数据"}}},"FlowDefinition":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"createTime":{"type":"string","format":"date-time"},"updateTime":{"type":"string","format":"date-time"},"createBy":{"type":"string"},"updateBy":{"type":"string"},"tenantId":{"type":"string"},"delFlag":{"type":"string"},"flowCode":{"type":"string"},"flowName":{"type":"string"},"modelValue":{"type":"string"},"category":{"type":"string"},"version":{"type":"string"},"isPublish":{"type":"integer","format":"int32"},"formCustom":{"type":"string"},"formPath":{"type":"string"},"activityStatus":{"type":"integer","format":"int32"},"listenerType":{"type":"string"},"listenerPath":{"type":"string"},"ext":{"type":"string"},"nodeList":{"type":"array","items":{"$ref":"#/components/schemas/Node"}},"userList":{"type":"array","items":{"$ref":"#/components/schemas/User"}}}},"Node":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"version":{"type":"string","deprecated":true},"tenantId":{"type":"string"},"listenerPath":{"type":"string"},"definitionId":{"type":"integer","format":"int64"},"anyNodeSkip":{"type":"string"},"coordinate":{"type":"string"},"skipList":{"type":"array","items":{"$ref":"#/components/schemas/Skip"}},"listenerType":{"type":"string"},"updateBy":{"type":"string"},"nodeType":{"type":"integer","format":"int32"},"ext":{"type":"string"},"delFlag":{"type":"string"},"createTime":{"type":"string","format":"date-time"},"createBy":{"type":"string"},"nodeName":{"type":"string"},"nodeCode":{"type":"string"},"nodeRatio":{"type":"string"},"updateTime":{"type":"string","format":"date-time"},"formCustom":{"type":"string"},"formPath":{"type":"string"},"permissionFlag":{"type":"string"}}},"Skip":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"nextNodeType":{"type":"integer","format":"int32"},"nowNodeType":{"type":"integer","format":"int32"},"tenantId":{"type":"string"},"definitionId":{"type":"integer","format":"int64"},"coordinate":{"type":"string"},"skipCondition":{"type":"string"},"nowNodeCode":{"type":"string"},"skipName":{"type":"string"},"nextNodeCode":{"type":"string"},"skipType":{"type":"string"},"nodeId":{"type":"integer","format":"int64"},"updateBy":{"type":"string"},"delFlag":{"type":"string"},"createTime":{"type":"string","format":"date-time"},"createBy":{"type":"string"},"updateTime":{"type":"string","format":"date-time"}}},"User":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"type":{"type":"string"},"tenantId":{"type":"string"},"updateBy":{"type":"string"},"delFlag":{"type":"string"},"createTime":{"type":"string","format":"date-time"},"createBy":{"type":"string"},"processedBy":{"type":"string"},"associated":{"type":"integer","format":"int64"},"updateTime":{"type":"string","format":"date-time"}}},"FlowCategoryBo":{"type":"object","description":"流程分类业务对象 wf_category","properties":{"categoryId":{"type":"integer","format":"int64","description":"流程分类ID"},"parentId":{"type":"integer","format":"int64","description":"父流程分类id"},"categoryName":{"type":"string","description":"流程分类名称","minLength":1},"orderNum":{"type":"integer","format":"int64","description":"显示顺序"}},"required":["categoryId","categoryName","parentId"]},"SysUserBo":{"type":"object","description":"用户信息业务对象 sys_user","properties":{"userId":{"type":"integer","format":"int64","description":"用户ID"},"deptId":{"type":"integer","format":"int64","description":"部门ID"},"userName":{"type":"string","description":"用户账号","maxLength":30,"minLength":2},"nickName":{"type":"string","description":"用户昵称","maxLength":30,"minLength":0},"userType":{"type":"string","description":"用户类型(sys_user系统用户)"},"email":{"type":"string","format":"email","description":"用户邮箱","maxLength":50,"minLength":0},"phoneNumber":{"type":"string","description":"手机号码"},"gender":{"type":"string","description":"用户性别(0男 1女 2未知)"},"avatar":{"type":"integer","format":"int64","description":"头像 OSS ID"},"password":{"type":"string","description":"密码"},"status":{"type":"string","description":"账号状态(0正常 1停用)"},"remark":{"type":"string","description":"备注"},"roleIds":{"type":"array","description":"角色组","items":{"type":"integer","format":"int64"},"maxItems":2147483647,"minItems":1},"postIds":{"type":"array","description":"岗位组","items":{"type":"integer","format":"int64"}},"roleId":{"type":"integer","format":"int64","description":"数据权限 当前角色ID"},"userIds":{"type":"string","description":"用户ID"},"excludeUserIds":{"type":"string","description":"排除不查询的用户(工作流用)"},"createBy":{"type":"integer","format":"int64","description":"创建者"},"updateBy":{"type":"integer","format":"int64","description":"更新者"},"params":{"type":"object","additionalProperties":{},"description":"请求参数"},"superAdmin":{"type":"boolean","description":"判断当前用户是否为超级管理员。"}},"required":["nickName","userName"]},"SysUserProfileBo":{"type":"object","description":"个人信息业务处理","properties":{"nickName":{"type":"string","description":"用户昵称","maxLength":30,"minLength":0},"email":{"type":"string","format":"email","description":"用户邮箱","maxLength":50,"minLength":0},"phoneNumber":{"type":"string","description":"手机号码","pattern":"(?:0|86|\\+86)?1[3-9]\\d{9}"},"gender":{"type":"string","description":"用户性别(0男 1女 2未知)"},"avatar":{"type":"integer","format":"int64","description":"头像 OSS ID"}}},"SysUserPasswordBo":{"type":"object","description":"用户密码修改","properties":{"oldPassword":{"type":"string","description":"旧密码","minLength":1},"newPassword":{"type":"string","description":"新密码","minLength":1}},"required":["newPassword","oldPassword"]},"SysRoleBo":{"type":"object","description":"角色信息业务对象 sys_role","properties":{"roleId":{"type":"integer","format":"int64","description":"角色ID"},"roleName":{"type":"string","description":"角色名称","maxLength":30,"minLength":0},"roleKey":{"type":"string","description":"角色权限字符串","maxLength":100,"minLength":0},"roleSort":{"type":"integer","format":"int32","description":"显示顺序"},"dataScope":{"type":"string","description":"数据范围(1:全部数据权限 2:自定数据权限 3:本部门数据权限 4:本部门及以下数据权限 5:仅本人数据权限 6:部门及以下或本人数据权限)"},"menuCheckStrictly":{"type":"boolean","description":"菜单树选择项是否关联显示"},"deptCheckStrictly":{"type":"boolean","description":"部门树选择项是否关联显示"},"status":{"type":"string","description":"角色状态(0正常 1停用)"},"remark":{"type":"string","description":"备注"},"menuIds":{"type":"array","description":"菜单组","items":{"type":"integer","format":"int64"}},"deptIds":{"type":"array","description":"部门组(数据权限)","items":{"type":"integer","format":"int64"}},"params":{"type":"object","additionalProperties":{},"description":"请求参数"},"superAdmin":{"type":"boolean","description":"判断当前角色是否为超级管理员角色。"}},"required":["roleKey","roleName","roleSort"]},"SysUserRole":{"type":"object","description":"用户和角色关联 sys_user_role","properties":{"userId":{"type":"integer","format":"int64","description":"用户ID"},"roleId":{"type":"integer","format":"int64","description":"角色ID"}}},"SysPostBo":{"type":"object","description":"岗位信息业务对象 sys_post","properties":{"postId":{"type":"integer","format":"int64","description":"岗位ID"},"deptId":{"type":"integer","format":"int64","description":"部门id(单部门)"},"belongDeptId":{"type":"integer","format":"int64","description":"归属部门id(部门树)"},"postCode":{"type":"string","description":"岗位编码","maxLength":64,"minLength":0},"postName":{"type":"string","description":"岗位名称","maxLength":50,"minLength":0},"postCategory":{"type":"string","description":"岗位类别编码","maxLength":100,"minLength":0},"postSort":{"type":"integer","format":"int32","description":"显示顺序"},"status":{"type":"string","description":"状态(0正常 1停用)"},"remark":{"type":"string","description":"备注"},"params":{"type":"object","additionalProperties":{},"description":"请求参数"}},"required":["deptId","postCode","postName","postSort"]},"SysNoticeBo":{"type":"object","description":"通知公告业务对象 sys_notice","properties":{"noticeId":{"type":"integer","format":"int64","description":"公告ID"},"noticeTitle":{"type":"string","description":"公告标题","maxLength":50,"minLength":0},"noticeType":{"type":"string","description":"公告类型(1通知 2公告)"},"noticeContent":{"type":"string","description":"公告内容"},"status":{"type":"string","description":"公告状态(0正常 1关闭)"},"remark":{"type":"string","description":"备注"},"createByName":{"type":"string","description":"创建人名称"}},"required":["noticeTitle"]},"SysMenuBo":{"type":"object","description":"菜单权限业务对象 sys_menu","properties":{"menuId":{"type":"integer","format":"int64","description":"菜单ID"},"parentId":{"type":"integer","format":"int64","description":"父菜单ID"},"menuName":{"type":"string","description":"菜单名称","maxLength":50,"minLength":0},"orderNum":{"type":"integer","format":"int32","description":"显示顺序"},"path":{"type":"string","description":"路由地址","maxLength":200,"minLength":0},"component":{"type":"string","description":"组件路径","maxLength":200,"minLength":0},"queryParam":{"type":"string","description":"路由参数"},"isFrame":{"type":"string","description":"是否为外链(Y是 N否)"},"isCache":{"type":"string","description":"是否缓存(Y缓存 N不缓存)"},"menuType":{"type":"string","description":"菜单类型(M目录 C菜单 F按钮)","minLength":1},"visible":{"type":"string","description":"显示状态(0显示 1隐藏)"},"status":{"type":"string","description":"菜单状态(0正常 1停用)"},"perms":{"type":"string","description":"权限标识","maxLength":100,"minLength":0,"pattern":"^$|^[a-zA-Z0-9_]+:[a-zA-Z0-9_*]+:[a-zA-Z0-9_*]+$"},"icon":{"type":"string","description":"菜单图标"},"activeMenu":{"type":"string","description":"激活菜单路径","maxLength":255,"minLength":0},"ext":{"type":"string","description":"扩展字段","maxLength":2000,"minLength":0},"remark":{"type":"string","description":"备注"}},"required":["menuName","menuType","orderNum"]},"SysDictTypeBo":{"type":"object","description":"字典类型业务对象 sys_dict_type","properties":{"dictId":{"type":"integer","format":"int64","description":"字典主键"},"dictName":{"type":"string","description":"字典名称","maxLength":100,"minLength":0},"dictType":{"type":"string","description":"字典类型","maxLength":100,"minLength":0,"pattern":"^[a-z][a-z0-9_]*$"},"remark":{"type":"string","description":"备注"}},"required":["dictName","dictType"]},"SysDictDataBo":{"type":"object","description":"字典数据业务对象 sys_dict_data","properties":{"dictCode":{"type":"integer","format":"int64","description":"字典编码"},"dictSort":{"type":"integer","format":"int32","description":"字典排序"},"dictLabel":{"type":"string","description":"字典标签","maxLength":100,"minLength":0},"dictValue":{"type":"string","description":"字典键值","maxLength":100,"minLength":0},"dictType":{"type":"string","description":"字典类型","maxLength":100,"minLength":0},"cssClass":{"type":"string","description":"样式属性(其他样式扩展)","maxLength":100,"minLength":0},"listClass":{"type":"string","description":"表格回显样式"},"isDefault":{"type":"string","description":"是否默认(Y是 N否)"},"createDept":{"type":"integer","format":"int64","description":"创建部门"},"remark":{"type":"string","description":"备注"}},"required":["dictLabel","dictType","dictValue"]},"SysDeptBo":{"type":"object","description":"部门业务对象 sys_dept","properties":{"deptId":{"type":"integer","format":"int64","description":"部门id"},"parentId":{"type":"integer","format":"int64","description":"父部门ID"},"deptName":{"type":"string","description":"部门名称","maxLength":30,"minLength":0},"deptCategory":{"type":"string","description":"部门类别编码","maxLength":100,"minLength":0},"orderNum":{"type":"integer","format":"int32","description":"显示顺序"},"leader":{"type":"integer","format":"int64","description":"负责人"},"phone":{"type":"string","description":"联系电话","maxLength":11,"minLength":0},"email":{"type":"string","format":"email","description":"邮箱","maxLength":50,"minLength":0},"status":{"type":"string","description":"部门状态(0正常 1停用)"},"belongDeptId":{"type":"integer","format":"int64","description":"归属部门id(部门树)"},"params":{"type":"object","additionalProperties":{},"description":"请求参数"}},"required":["deptName","orderNum"]},"SysConfigBo":{"type":"object","description":"参数配置业务对象 sys_config","properties":{"configId":{"type":"integer","format":"int64","description":"参数主键"},"configName":{"type":"string","description":"参数名称","maxLength":100,"minLength":0},"configKey":{"type":"string","description":"参数键名","maxLength":100,"minLength":0},"configValue":{"type":"string","description":"参数键值","maxLength":500,"minLength":0},"configType":{"type":"string","description":"系统内置(Y是 N否)"},"remark":{"type":"string","description":"备注"},"params":{"type":"object","additionalProperties":{},"description":"请求参数"}},"required":["configKey","configName","configValue"]},"SysClientBo":{"type":"object","description":"授权管理业务对象 sys_client","properties":{"id":{"type":"integer","format":"int64","description":"id"},"clientId":{"type":"string","description":"客户端id"},"clientKey":{"type":"string","description":"客户端key","minLength":1},"clientSecret":{"type":"string","description":"客户端秘钥","minLength":1},"grantTypeList":{"type":"array","description":"授权类型","items":{"type":"string"}},"grantType":{"type":"string","description":"授权类型"},"deviceType":{"type":"string","description":"设备类型"},"accessPath":{"type":"string","description":"允许访问路径"},"accessPathList":{"type":"array","description":"允许访问路径列表","items":{"type":"string"}},"ipWhitelist":{"type":"string","description":"IP白名单"},"ipWhitelistList":{"type":"array","description":"IP白名单列表","items":{"type":"string"}},"activeTimeout":{"type":"integer","format":"int64","description":"token活跃超时时间"},"timeout":{"type":"integer","format":"int64","description":"token固定超时时间"},"status":{"type":"string","description":"状态(0正常 1停用)"}},"required":["clientKey","clientSecret","grantTypeList","id"]},"SysOssConfigBo":{"type":"object","description":"对象存储配置业务对象 sys_oss_config","properties":{"ossConfigId":{"type":"integer","format":"int64","description":"主键"},"configKey":{"type":"string","description":"配置key","maxLength":100,"minLength":2},"accessKey":{"type":"string","description":"accessKey","maxLength":100,"minLength":2},"secretKey":{"type":"string","description":"秘钥","maxLength":100,"minLength":2},"bucketName":{"type":"string","description":"桶名称","maxLength":100,"minLength":2},"prefix":{"type":"string","description":"前缀"},"endpoint":{"type":"string","description":"访问站点","maxLength":100,"minLength":2},"domainUrl":{"type":"string","description":"自定义域名"},"isHttps":{"type":"string","description":"是否https(Y=是,N=否)"},"status":{"type":"string","description":"是否默认(Y=是,N=否)"},"region":{"type":"string","description":"域"},"ext1":{"type":"string","description":"扩展字段"},"remark":{"type":"string","description":"备注"},"accessPolicy":{"type":"string","description":"桶权限类型(0private 1public 2custom)","minLength":1}},"required":["accessKey","accessPolicy","bucketName","configKey","endpoint","ossConfigId","secretKey"]},"CzDeviceBo":{"type":"object","description":"后台设备管理业务对象。","properties":{"deviceId":{"type":"integer","format":"int64","description":"设备主键"},"name":{"type":"string","description":"设备名称","maxLength":20,"minLength":0},"productId":{"type":"integer","format":"int64","description":"产品模板"},"mac":{"type":"string","description":"MAC"},"locationId":{"type":"integer","format":"int64","description":"所在房间"},"filterTotalDays":{"type":"integer","format":"int32","description":"初始滤芯总寿命天数,仅滤芯类产品使用"},"remark":{"type":"string","description":"备注","maxLength":500,"minLength":0},"model":{"type":"string","description":"型号"},"sn":{"type":"string","description":"序列号"},"status":{"type":"string","description":"状态(0未激活 1在线 2离线)"},"homeId":{"type":"integer","format":"int64","description":"家庭"},"keyword":{"type":"string","description":"名称、型号、MAC、序列号或设备编号"}},"required":["deviceId","locationId","name"]},"TestTreeBo":{"type":"object","description":"测试树表业务对象 test_tree","properties":{"id":{"type":"integer","format":"int64","description":"主键"},"parentId":{"type":"integer","format":"int64","description":"父ID"},"deptId":{"type":"integer","format":"int64","description":"部门id"},"userId":{"type":"integer","format":"int64","description":"用户id"},"treeName":{"type":"string","description":"树节点名","minLength":1}},"required":["deptId","id","treeName","userId"]},"TestDemoBo":{"type":"object","description":"测试单表业务对象 test_demo","properties":{"id":{"type":"integer","format":"int64","description":"主键"},"deptId":{"type":"integer","format":"int64","description":"部门id"},"userId":{"type":"integer","format":"int64","description":"用户id"},"orderNum":{"type":"integer","format":"int32","description":"排序号"},"testKey":{"type":"string","description":"key键","minLength":1},"value":{"type":"string","description":"值","minLength":1},"version":{"type":"integer","format":"int64","description":"版本"}},"required":["deptId","id","orderNum","testKey","userId","value"]},"OpenApiConversationUpdateTitleRequest":{"type":"object","properties":{"agentId":{"type":"integer","format":"int64"},"conversationId":{"type":"string","minLength":1},"openId":{"type":"string","minLength":1},"title":{"type":"string","minLength":1}},"required":["agentId","conversationId","openId","title"]},"ResultVoid":{"type":"object","properties":{"status":{"type":"integer","format":"int32"},"message":{"type":"string"},"data":{}}},"FlowUrgeTaskBo":{"type":"object","description":"流程变量参数","properties":{"taskIdList":{"type":"array","description":"任务id","items":{"type":"integer","format":"int64"}},"messageType":{"type":"array","description":"消息类型","items":{"type":"string"}},"message":{"type":"string","description":"催办内容"}}},"FlowTerminationBo":{"type":"object","description":"终止任务请求对象","properties":{"taskId":{"type":"integer","format":"int64","description":"任务 ID"},"comment":{"type":"string","description":"终止意见"}}},"TaskOperationBo":{"type":"object","description":"任务操作业务对象,用于描述任务委派、转办、加签等操作的必要参数\n 包含了用户ID、任务ID、任务相关的消息、以及加签/减签的用户ID","properties":{"userId":{"type":"string","description":"委派/转办人的用户ID(必填,准对委派/转办人操作)"},"userIds":{"type":"array","description":"加签/减签人的用户ID列表(必填,针对加签/减签操作)","items":{"type":"string"}},"taskId":{"type":"integer","format":"int64","description":"任务ID(必填)"},"messageType":{"type":"array","description":"消息类型","items":{"type":"string"}},"message":{"type":"string","description":"意见或备注信息(可选)"}},"required":["taskId"]},"FlowInstanceBizExt":{"type":"object","description":"流程实例业务扩展对象 flow_instance_biz_ext","properties":{"createBy":{"type":"integer","format":"int64","description":"创建者"},"createTime":{"type":"string","format":"date-time","description":"创建时间"},"updateBy":{"type":"integer","format":"int64","description":"更新者"},"updateTime":{"type":"string","format":"date-time","description":"更新时间"},"id":{"type":"integer","format":"int64","description":"主键"},"instanceId":{"type":"integer","format":"int64","description":"流程实例ID"},"businessId":{"type":"string","description":"业务ID"},"businessCode":{"type":"string","description":"业务编码"},"businessTitle":{"type":"string","description":"业务标题"},"delFlag":{"type":"string","description":"删除标志(0代表存在 1代表删除)"}}},"StartProcessBo":{"type":"object","description":"启动流程对象","properties":{"businessId":{"type":"string","description":"业务唯一值id","minLength":1},"flowCode":{"type":"string","description":"流程定义编码","minLength":1},"handler":{"type":"string","description":"办理人(可不填 用于覆盖当前节点办理人)"},"variables":{"type":"object","additionalProperties":{},"description":"流程变量,前端会提交一个元素{'entity': {业务详情数据对象}}"},"bizExt":{"$ref":"#/components/schemas/FlowInstanceBizExt","description":"流程业务扩展信息"}},"required":["businessId","flowCode"]},"RStartProcessReturnDTO":{"type":"object","description":"响应信息主体","properties":{"code":{"type":"integer","format":"int32","description":"响应状态码"},"msg":{"type":"string","description":"响应提示信息"},"data":{"$ref":"#/components/schemas/StartProcessReturnDTO","description":"响应业务数据"}}},"StartProcessReturnDTO":{"type":"object","description":"启动流程后的返回结果对象。","properties":{"processInstanceId":{"type":"integer","format":"int64","description":"流程实例 ID"},"taskId":{"type":"integer","format":"int64","description":"首个任务 ID"}}},"FlowNextNodeBo":{"type":"object","description":"查询下一节点信息的请求对象。","properties":{"taskId":{"type":"integer","format":"int64","description":"任务id"},"variables":{"type":"object","additionalProperties":{},"description":"流程变量"}}},"FlowNode":{"type":"object","properties":{"skipList":{"type":"array","items":{"$ref":"#/components/schemas/Skip"}},"id":{"type":"integer","format":"int64"},"createTime":{"type":"string","format":"date-time"},"updateTime":{"type":"string","format":"date-time"},"createBy":{"type":"string"},"updateBy":{"type":"string"},"tenantId":{"type":"string"},"delFlag":{"type":"string"},"nodeType":{"type":"integer","format":"int32"},"definitionId":{"type":"integer","format":"int64"},"nodeCode":{"type":"string"},"nodeName":{"type":"string"},"permissionFlag":{"type":"string"},"nodeRatio":{"type":"string"},"coordinate":{"type":"string"},"version":{"type":"string","deprecated":true},"anyNodeSkip":{"type":"string"},"listenerType":{"type":"string"},"listenerPath":{"type":"string"},"formCustom":{"type":"string"},"formPath":{"type":"string"},"ext":{"type":"string"}}},"RListFlowNode":{"type":"object","description":"响应信息主体","properties":{"code":{"type":"integer","format":"int32","description":"响应状态码"},"msg":{"type":"string","description":"响应提示信息"},"data":{"type":"array","description":"响应业务数据","items":{"$ref":"#/components/schemas/FlowNode"}}}},"CompleteTaskBo":{"type":"object","description":"办理任务请求对象","properties":{"taskId":{"type":"integer","format":"int64","description":"任务id"},"fileId":{"type":"string","description":"附件id"},"flowCopyList":{"type":"array","description":"抄送人员","items":{"$ref":"#/components/schemas/FlowCopyBo"}},"messageType":{"type":"array","description":"消息类型","items":{"type":"string"}},"message":{"type":"string","description":"办理意见"},"notice":{"type":"string","description":"消息通知"},"handler":{"type":"string","description":"办理人(可不填 用于覆盖当前节点办理人)"},"variables":{"type":"object","additionalProperties":{},"description":"流程变量"},"assigneeMap":{"type":"object","additionalProperties":{},"description":"弹窗选择的办理人"},"ext":{"type":"string","description":"扩展变量(此处为逗号分隔的ossId)"}},"required":["taskId"]},"FlowCopyBo":{"type":"object","description":"流程抄送请求对象。","properties":{"userId":{"type":"integer","format":"int64","description":"用户id"},"nickName":{"type":"string","description":"用户昵称"}}},"BackProcessBo":{"type":"object","description":"驳回参数请求","properties":{"taskId":{"type":"integer","format":"int64","description":"任务ID"},"fileId":{"type":"string","description":"附件id"},"messageType":{"type":"array","description":"消息类型","items":{"type":"string"}},"nodeCode":{"type":"string","description":"驳回的节点id(目前未使用,直接驳回到申请人)"},"message":{"type":"string","description":"办理意见"},"notice":{"type":"string","description":"通知"},"variables":{"type":"object","additionalProperties":{},"description":"流程变量"}},"required":["taskId"]},"FlowInvalidBo":{"type":"object","description":"作废流程请求对象。","properties":{"id":{"type":"integer","format":"int64","description":"流程实例 ID"},"comment":{"type":"string","description":"作废意见"}}},"DefJson":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"flowCode":{"type":"string"},"flowName":{"type":"string"},"modelValue":{"type":"string"},"category":{"type":"string"},"version":{"type":"string"},"isPublish":{"type":"integer","format":"int32"},"formCustom":{"type":"string"},"formPath":{"type":"string"},"listenerType":{"type":"string"},"listenerPath":{"type":"string"},"instance":{"$ref":"#/components/schemas/Instance"},"ext":{"type":"string"},"extMap":{"type":"object","additionalProperties":{}},"nodeList":{"type":"array","items":{"$ref":"#/components/schemas/NodeJson"}},"chartStatusColor":{"type":"array","items":{"type":"string"}},"topText":{"type":"string"},"topTextShow":{"type":"boolean"},"createBy":{"type":"string"},"updateBy":{"type":"string"},"categoryList":{"type":"array","items":{"$ref":"#/components/schemas/Tree"}},"formPathList":{"type":"array","items":{"$ref":"#/components/schemas/Tree"}}}},"InfoItem":{"type":"object","properties":{"prefix":{"type":"string"},"prefixStyle":{"type":"object","additionalProperties":{}},"content":{"type":"string"},"contentStyle":{"type":"object","additionalProperties":{}},"rowStyle":{"type":"object","additionalProperties":{}}}},"Instance":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"tenantId":{"type":"string"},"activityStatus":{"type":"integer","format":"int32"},"defJson":{"type":"string"},"definitionId":{"type":"integer","format":"int64"},"variable":{"type":"string"},"updateBy":{"type":"string"},"nodeType":{"type":"integer","format":"int32"},"ext":{"type":"string"},"delFlag":{"type":"string"},"createTime":{"type":"string","format":"date-time"},"createBy":{"type":"string"},"nodeName":{"type":"string"},"flowStatus":{"type":"string"},"businessId":{"type":"string"},"nodeCode":{"type":"string"},"flowName":{"type":"string"},"variableMap":{"type":"object","additionalProperties":{}},"updateTime":{"type":"string","format":"date-time"},"formCustom":{"type":"string"},"formPath":{"type":"string"}}},"NodeJson":{"type":"object","properties":{"nodeType":{"type":"integer","format":"int32"},"nodeCode":{"type":"string"},"nodeName":{"type":"string"},"version":{"type":"string"},"permissionFlag":{"type":"string"},"nodeRatio":{"type":"string"},"coordinate":{"type":"string"},"anyNodeSkip":{"type":"string"},"listenerType":{"type":"string"},"listenerPath":{"type":"string"},"formCustom":{"type":"string"},"formPath":{"type":"string"},"ext":{"type":"string"},"status":{"type":"integer","format":"int32"},"extMap":{"type":"object","additionalProperties":{}},"promptContent":{"$ref":"#/components/schemas/PromptContent"},"skipList":{"type":"array","items":{"$ref":"#/components/schemas/SkipJson"}},"createBy":{"type":"string"},"updateBy":{"type":"string"}}},"PromptContent":{"type":"object","properties":{"dialogStyle":{"type":"object","additionalProperties":{}},"info":{"type":"array","items":{"$ref":"#/components/schemas/InfoItem"}}}},"SkipJson":{"type":"object","properties":{"nowNodeCode":{"type":"string"},"nextNodeCode":{"type":"string"},"skipName":{"type":"string"},"skipType":{"type":"string"},"skipCondition":{"type":"string"},"coordinate":{"type":"string"},"status":{"type":"integer","format":"int32"},"extMap":{"type":"object","additionalProperties":{}},"promptContent":{"type":"array","items":{"type":"string"}},"createBy":{"type":"string"},"updateBy":{"type":"string"}}},"Tree":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"parentId":{"type":"string"},"children":{"type":"array","items":{"$ref":"#/components/schemas/Tree"}}}},"ApiResultVoid":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"msg":{"type":"string"},"data":{}}},"FlowDto":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"formContent":{"type":"string"},"form":{"$ref":"#/components/schemas/Form"},"data":{}}},"Form":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"version":{"type":"string"},"tenantId":{"type":"string"},"isPublish":{"type":"integer","format":"int32"},"formContent":{"type":"string"},"formCode":{"type":"string"},"formType":{"type":"integer","format":"int32"},"formName":{"type":"string"},"updateBy":{"type":"string"},"ext":{"type":"string"},"delFlag":{"type":"string"},"createTime":{"type":"string","format":"date-time"},"createBy":{"type":"string"},"updateTime":{"type":"string","format":"date-time"},"formPath":{"type":"string"}}},"ApiResultInstance":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"msg":{"type":"string"},"data":{"$ref":"#/components/schemas/Instance"}}},"RString":{"type":"object","description":"响应信息主体","properties":{"code":{"type":"integer","format":"int32","description":"响应状态码"},"msg":{"type":"string","description":"响应提示信息"},"data":{"type":"string","description":"响应业务数据"}}},"OpenApiUserVO":{"type":"object","properties":{"openId":{"type":"string"},"externalId":{"type":"string"},"nickname":{"type":"string"},"avatarUrl":{"type":"string"},"created":{"type":"boolean"}}},"ROpenApiUserVO":{"type":"object","description":"响应信息主体","properties":{"code":{"type":"integer","format":"int32","description":"响应状态码"},"msg":{"type":"string","description":"响应提示信息"},"data":{"$ref":"#/components/schemas/OpenApiUserVO","description":"响应业务数据"}}},"RSysOssUploadVo":{"type":"object","description":"响应信息主体","properties":{"code":{"type":"integer","format":"int32","description":"响应状态码"},"msg":{"type":"string","description":"响应提示信息"},"data":{"$ref":"#/components/schemas/SysOssUploadVo","description":"响应业务数据"}}},"SysOssUploadVo":{"type":"object","description":"OSS 上传响应对象。","properties":{"url":{"type":"string","description":"文件访问地址"},"fileName":{"type":"string","description":"原始文件名"},"ossId":{"type":"string","description":"OSS 对象 ID"}}},"SysOperLogBo":{"type":"object","description":"操作日志记录业务对象 sys_oper_log","properties":{"operId":{"type":"integer","format":"int64","description":"日志主键"},"title":{"type":"string","description":"模块标题"},"businessType":{"type":"integer","format":"int32","description":"业务类型(0其它 1新增 2修改 3删除)"},"businessTypes":{"type":"array","description":"业务类型数组","items":{"type":"integer","format":"int32"}},"method":{"type":"string","description":"方法名称"},"requestMethod":{"type":"string","description":"请求方式"},"operatorType":{"type":"integer","format":"int32","description":"操作类别(0其它 1后台用户 2手机端用户)"},"operName":{"type":"string","description":"操作人员"},"userId":{"type":"integer","format":"int64","description":"操作用户ID"},"deptId":{"type":"integer","format":"int64","description":"操作部门ID"},"deptName":{"type":"string","description":"部门名称"},"clientKey":{"type":"string","description":"客户端"},"deviceType":{"type":"string","description":"设备类型"},"browser":{"type":"string","description":"浏览器类型"},"os":{"type":"string","description":"操作系统"},"operUrl":{"type":"string","description":"请求URL"},"operIp":{"type":"string","description":"主机地址"},"operLocation":{"type":"string","description":"操作地点"},"operParam":{"type":"string","description":"请求参数"},"jsonResult":{"type":"string","description":"返回参数"},"status":{"type":"integer","format":"int32","description":"操作状态(0正常 1异常)"},"errorMsg":{"type":"string","description":"错误消息"},"operTime":{"type":"string","format":"date-time","description":"操作时间"},"costTime":{"type":"integer","format":"int64","description":"消耗时间"},"params":{"type":"object","additionalProperties":{},"description":"请求参数"}}},"SysLoginInfoBo":{"type":"object","description":"系统访问记录业务对象 sys_login_info","properties":{"infoId":{"type":"integer","format":"int64","description":"访问ID"},"userName":{"type":"string","description":"用户账号"},"clientKey":{"type":"string","description":"客户端"},"deviceType":{"type":"string","description":"设备类型"},"ipaddr":{"type":"string","description":"登录IP地址"},"loginLocation":{"type":"string","description":"登录地点"},"browser":{"type":"string","description":"浏览器类型"},"os":{"type":"string","description":"操作系统"},"status":{"type":"string","description":"登录状态(0成功 1失败)"},"msg":{"type":"string","description":"提示消息"},"loginTime":{"type":"string","format":"date-time","description":"访问时间"},"params":{"type":"object","additionalProperties":{},"description":"请求参数"}}},"ExportDemoVo":{"type":"object","description":"带有下拉选的Excel导出","properties":{"nickName":{"type":"string","description":"用户昵称"},"userStatus":{"type":"string","description":"用户类型\n

\n 使用ExcelEnumFormat注解需要进行下拉选的部分"},"gender":{"type":"string","description":"性别\n

\n 使用ExcelDictFormat注解需要进行下拉选的部分"},"phoneNumber":{"type":"string","description":"手机号"},"email":{"type":"string","description":"Email"},"province":{"type":"string","description":"省\n

\n 级联下拉,仅判断是否选了"},"provinceId":{"type":"integer","format":"int32","description":"数据库中的省ID\n

\n 处理完毕后再判断是否市正确的值"},"city":{"type":"string","description":"市\n

\n 级联下拉"},"cityId":{"type":"integer","format":"int32","description":"数据库中的市ID"},"area":{"type":"string","description":"县\n

\n 级联下拉"},"areaId":{"type":"integer","format":"int32","description":"数据库中的县ID"}}},"SocialLoginBody":{"type":"object","description":"第三方平台登录绑定请求对象。","properties":{"clientId":{"type":"string","description":"客户端id","minLength":1},"grantType":{"type":"string","description":"授权类型","minLength":1},"code":{"type":"string","description":"验证码"},"uuid":{"type":"string","description":"验证码唯一标识。"},"source":{"type":"string","description":"第三方登录平台","minLength":1},"socialCode":{"type":"string","description":"第三方登录code","minLength":1},"socialState":{"type":"string","description":"第三方登录socialState","minLength":1}},"required":["clientId","grantType","socialCode","socialState","source"]},"RegisterBody":{"type":"object","description":"用户注册对象","properties":{"clientId":{"type":"string","description":"客户端id","minLength":1},"grantType":{"type":"string","description":"授权类型","minLength":1},"code":{"type":"string","description":"验证码"},"uuid":{"type":"string","description":"验证码唯一标识。"},"username":{"type":"string","description":"用户名","minLength":1},"password":{"type":"string","description":"用户密码","minLength":1},"userType":{"type":"string","description":"用户类型"}},"required":["clientId","grantType","password","username"]},"LoginVo":{"type":"object","description":"登录成功后的令牌信息返回对象。","properties":{"scope":{"type":"string","description":"令牌权限"},"openid":{"type":"string","description":"用户 openid"},"access_token":{"type":"string","description":"授权令牌"},"refresh_token":{"type":"string","description":"刷新令牌"},"expire_in":{"type":"integer","format":"int64","description":"授权令牌 access_token 的有效期"},"refresh_expire_in":{"type":"integer","format":"int64","description":"刷新令牌 refresh_token 的有效期"},"client_id":{"type":"string","description":"应用id"}}},"RLoginVo":{"type":"object","description":"响应信息主体","properties":{"code":{"type":"integer","format":"int32","description":"响应状态码"},"msg":{"type":"string","description":"响应提示信息"},"data":{"$ref":"#/components/schemas/LoginVo","description":"响应业务数据"}}},"UpdateProfileBo":{"type":"object","description":"修改用户资料请求体","properties":{"nickName":{"type":"string","description":"用户昵称","maxLength":10,"minLength":1},"avatarOssId":{"type":"integer","format":"int64","description":"头像 OSS ID"},"avatarUrl":{"type":"string","description":"头像 URL"},"gender":{"type":"string","description":"性别(0未知 1男 2女)"},"birthday":{"type":"string","description":"生日"},"province":{"type":"string","description":"省份","maxLength":10,"minLength":0},"city":{"type":"string","description":"城市","maxLength":10,"minLength":0},"district":{"type":"string","description":"区县","maxLength":10,"minLength":0}}},"AvatarUploadVo":{"type":"object","description":"头像上传响应对象","properties":{"url":{"type":"string"},"fileName":{"type":"string"},"ossId":{"type":"string"}}},"RAvatarUploadVo":{"type":"object","description":"响应信息主体","properties":{"code":{"type":"integer","format":"int32","description":"响应状态码"},"msg":{"type":"string","description":"响应提示信息"},"data":{"$ref":"#/components/schemas/AvatarUploadVo","description":"响应业务数据"}}},"UpdateLocationBo":{"type":"object","properties":{"locationId":{"type":"integer","format":"int64"},"locationName":{"type":"string","maxLength":10,"minLength":1},"icon":{"type":"string"},"sortOrder":{"type":"integer","format":"int32"}},"required":["locationId","locationName"]},"CreateLocationBo":{"type":"object","properties":{"homeId":{"type":"integer","format":"int64"},"locationName":{"type":"string","maxLength":10,"minLength":1},"icon":{"type":"string"},"sortOrder":{"type":"integer","format":"int32"}},"required":["homeId","locationName"]},"CreateHomeBo":{"type":"object","properties":{"homeName":{"type":"string","maxLength":10,"minLength":2}},"required":["homeName"]},"UpdateDeviceRuntimeBo":{"type":"object","description":"设备运行数据更新参数\n

\n 前端通过蓝牙同步设备运行状态时提交。","properties":{"deviceId":{"type":"integer","format":"int64","description":"设备ID"},"status":{"type":"string","description":"状态(0未激活 1在线 2离线)"},"bluetoothConnected":{"type":"string","description":"蓝牙连接状态(0未连接 1已连接)"},"signalLevel":{"type":"string","description":"信号强度(0离线 1弱 2一般 3强)"},"charging":{"type":"string","description":"充电状态(0未充电 1充电中)"},"runMode":{"type":"string","description":"运行模式(0自动 1车载 2桌面)"},"fanLevel":{"type":"string","description":"风速挡位(0标准 1强力 2低档)"},"tvoc":{"type":"number","description":"TVOC 原始值"},"powerMode":{"type":"string","description":"供电模式(0USB 1电池)"},"filterTotalDays":{"type":"string","description":"滤芯总寿命天数"},"filterRemainDays":{"type":"string","description":"滤芯剩余天数"},"parkingShutdown":{"type":"string","description":"停机模式(0关机 1开机)"}},"required":["deviceId"]},"DeviceRuntimeQueryBo":{"type":"object","description":"设备运行数据查询参数","properties":{"deviceId":{"type":"integer","format":"int64","description":"设备ID"}},"required":["deviceId"]},"AppDeviceRuntimeVo":{"type":"object","description":"设备运行数据视图对象\n

\n 包含净化器运行状态信息。","properties":{"deviceId":{"type":"integer","format":"int64","description":"设备ID"},"deviceNo":{"type":"string","description":"设备编号"},"name":{"type":"string","description":"设备名称"},"status":{"type":"string","description":"状态(0未激活 1在线 2离线)"},"runMode":{"type":"string","description":"运行模式(0自动 1车载 2桌面)"},"fanLevel":{"type":"string","description":"风速挡位(0标准 1强力 2低档)"},"tvoc":{"type":"number","description":"TVOC 原始值"},"powerMode":{"type":"string","description":"供电模式(0USB 1电池)"},"filterTotalDays":{"type":"string","description":"滤芯总寿命天数"},"filterRemainDays":{"type":"string","description":"滤芯剩余天数"},"filterLife":{"type":"integer","format":"int32","description":"滤芯寿命(0-100)"},"filterReplaceTime":{"type":"string","format":"date-time","description":"最近一次确认更换滤芯时间"},"parkingShutdown":{"type":"string","description":"停机模式(0关机 1开机)"}}},"RAppDeviceRuntimeVo":{"type":"object","description":"响应信息主体","properties":{"code":{"type":"integer","format":"int32","description":"响应状态码"},"msg":{"type":"string","description":"响应提示信息"},"data":{"$ref":"#/components/schemas/AppDeviceRuntimeVo","description":"响应业务数据"}}},"DeviceQueryBo":{"type":"object","description":"设备列表查询参数","properties":{"homeId":{"type":"integer","format":"int64","description":"家庭ID"},"locationId":{"type":"integer","format":"int64","description":"位置ID"}}},"AppDeviceVo":{"type":"object","description":"设备视图对象","properties":{"deviceId":{"type":"integer","format":"int64","description":"设备ID"},"deviceNo":{"type":"string","description":"设备编号"},"name":{"type":"string","description":"设备名称"},"imei":{"type":"string","description":"设备IMEI"},"mac":{"type":"string","description":"设备MAC"},"homeId":{"type":"integer","format":"int64","description":"家庭ID"},"locationId":{"type":"integer","format":"int64","description":"位置ID"},"status":{"type":"string","description":"状态(0未激活 1在线 2离线)"},"bluetoothConnected":{"type":"string","description":"蓝牙连接状态(0未连接 1已连接)"},"signalLevel":{"type":"string","description":"信号强度(0离线 1弱 2一般 3强)"},"charging":{"type":"string","description":"充电状态(0未充电 1充电中)"},"bindTime":{"type":"string","format":"date-time","description":"绑定时间"}}},"RListAppDeviceVo":{"type":"object","description":"响应信息主体","properties":{"code":{"type":"integer","format":"int32","description":"响应状态码"},"msg":{"type":"string","description":"响应提示信息"},"data":{"type":"array","description":"响应业务数据","items":{"$ref":"#/components/schemas/AppDeviceVo"}}}},"DeviceBindBo":{"type":"object","description":"设备绑定请求参数\n

\n 前端通过蓝牙配对设备后,将配对获取到的设备信息提交绑定。","properties":{"deviceNo":{"type":"string","description":"设备编号","minLength":1},"imei":{"type":"string","description":"设备IMEI"},"mac":{"type":"string","description":"设备MAC"},"name":{"type":"string","description":"设备名称"},"homeId":{"type":"integer","format":"int64","description":"家庭ID"},"locationId":{"type":"integer","format":"int64","description":"位置ID"}},"required":["deviceNo"]},"SendSmsCodeBo":{"type":"object","description":"发送短信验证码请求","properties":{"phonenumber":{"type":"string","description":"手机号码","minLength":1,"pattern":"^1[3-9]\\d{9}$"},"scene":{"type":"string","description":"业务场景:register / login / reset / change_phone_old / change_phone_new","minLength":1}},"required":["phonenumber","scene"]},"RegisterBo":{"type":"object","description":"App 用户注册请求(手机号、验证码、密码、确认密码四个字段)","properties":{"phonenumber":{"type":"string","description":"手机号码","minLength":1,"pattern":"^1[3-9]\\d{9}$"},"smsCode":{"type":"string","description":"短信验证码","minLength":1},"password":{"type":"string","description":"密码","maxLength":20,"minLength":6},"confirmPassword":{"type":"string","description":"确认密码","minLength":1}},"required":["confirmPassword","password","phonenumber","smsCode"]},"AppLoginVo":{"type":"object","description":"App 登录响应(包含访问令牌与基础用户信息)","properties":{"accessToken":{"type":"string","description":"访问令牌"},"expireIn":{"type":"integer","format":"int64","description":"令牌有效期(秒)"},"userId":{"type":"integer","format":"int64","description":"用户ID"},"userName":{"type":"string","description":"用户名"},"nickName":{"type":"string","description":"昵称"}}},"RAppLoginVo":{"type":"object","description":"响应信息主体","properties":{"code":{"type":"integer","format":"int32","description":"响应状态码"},"msg":{"type":"string","description":"响应提示信息"},"data":{"$ref":"#/components/schemas/AppLoginVo","description":"响应业务数据"}}},"LoginSmsBo":{"type":"object","description":"短信验证码登录请求","properties":{"phonenumber":{"type":"string","description":"手机号码","minLength":1,"pattern":"^1[3-9]\\d{9}$"},"smsCode":{"type":"string","description":"短信验证码","minLength":1}},"required":["phonenumber","smsCode"]},"LoginPasswordBo":{"type":"object","description":"账号密码登录请求(account 支持用户名或手机号)","properties":{"account":{"type":"string","description":"登录账号(用户名或手机号)","minLength":1},"password":{"type":"string","description":"密码","minLength":1}},"required":["account","password"]},"VerifyResetSmsCodeBo":{"type":"object","properties":{"phonenumber":{"type":"string","minLength":1,"pattern":"^1[3-9]\\d{9}$"},"smsCode":{"type":"string","minLength":1}},"required":["phonenumber","smsCode"]},"DoResetPasswordBo":{"type":"object","properties":{"resetToken":{"type":"string","minLength":1},"newPassword":{"type":"string","maxLength":20,"minLength":6},"confirmPassword":{"type":"string","minLength":1}},"required":["confirmPassword","newPassword","resetToken"]},"VerifyOldPhoneBo":{"type":"object","description":"换绑手机号第一步:校验原手机号验证码请求对象","properties":{"oldPhonenumber":{"type":"string","description":"原手机号码","minLength":1,"pattern":"^1[3-9]\\d{9}$"},"oldSmsCode":{"type":"string","description":"原手机号短信验证码","minLength":1}},"required":["oldPhonenumber","oldSmsCode"]},"VerifyNewPhoneBo":{"type":"object","description":"换绑手机号第二步:校验新手机号验证码并更新请求对象","properties":{"changeToken":{"type":"string","description":"第一步校验通过后返回的临时令牌","minLength":1},"newPhonenumber":{"type":"string","description":"新手机号码","minLength":1,"pattern":"^1[3-9]\\d{9}$"},"newSmsCode":{"type":"string","description":"新手机号短信验证码","minLength":1}},"required":["changeToken","newPhonenumber","newSmsCode"]},"AgreementVo":{"type":"object","description":"协议配置视图对象","properties":{"agreementId":{"type":"integer","format":"int64","description":"协议ID"},"agreementType":{"type":"string","description":"协议类型(user/privacy/service)"},"agreementNo":{"type":"string","description":"协议编号"},"versionName":{"type":"string","description":"版本号"},"name":{"type":"string","description":"协议名称"}}},"RListAgreementVo":{"type":"object","description":"响应信息主体","properties":{"code":{"type":"integer","format":"int32","description":"响应状态码"},"msg":{"type":"string","description":"响应提示信息"},"data":{"type":"array","description":"响应业务数据","items":{"$ref":"#/components/schemas/AgreementVo"}}}},"AgreementIdBo":{"type":"object","description":"协议详情查询参数","properties":{"agreementId":{"type":"integer","format":"int64","description":"协议ID"}},"required":["agreementId"]},"AgreementDetailVo":{"type":"object","description":"协议详情视图对象","properties":{"agreementNo":{"type":"string","description":"协议编号"},"name":{"type":"string","description":"协议名称"},"versionName":{"type":"string","description":"版本号"},"content":{"type":"string","description":"协议正文"},"publishTime":{"type":"string","format":"date-time","description":"生效时间"}}},"RAgreementDetailVo":{"type":"object","description":"响应信息主体","properties":{"code":{"type":"integer","format":"int32","description":"响应状态码"},"msg":{"type":"string","description":"响应提示信息"},"data":{"$ref":"#/components/schemas/AgreementDetailVo","description":"响应业务数据"}}},"OpenApiEmbedTokenRequest":{"type":"object","properties":{"openId":{"type":"string","minLength":1},"trustedCredential":{"type":"string"},"ttlSeconds":{"type":"integer","format":"int32","maximum":86400,"minimum":60}},"required":["openId"]},"OpenApiEmbedTokenResponse":{"type":"object","properties":{"token":{"type":"string"},"tokenType":{"type":"string"},"authHeader":{"type":"string"},"expiresAt":{"type":"string","format":"date-time"},"ttlSeconds":{"type":"integer","format":"int32"},"openId":{"type":"string"},"nickname":{"type":"string"},"avatarUrl":{"type":"string"}}},"ResultOpenApiEmbedTokenResponse":{"type":"object","properties":{"status":{"type":"integer","format":"int32"},"message":{"type":"string"},"data":{"$ref":"#/components/schemas/OpenApiEmbedTokenResponse"}}},"OpenApiResourceResponse":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"storageKey":{"type":"string"},"originalName":{"type":"string"},"fileSize":{"type":"integer","format":"int64"},"mimeType":{"type":"string"},"storageType":{"type":"string"},"accessUrl":{"type":"string"},"bizType":{"type":"string"},"bizId":{"type":"integer","format":"int64"},"creatorId":{"type":"integer","format":"int64"},"createDt":{"type":"string","format":"date-time"}}},"ResultOpenApiResourceResponse":{"type":"object","properties":{"status":{"type":"integer","format":"int32"},"message":{"type":"string"},"data":{"$ref":"#/components/schemas/OpenApiResourceResponse"}}},"OpenApiCreateConversationRequest":{"type":"object","properties":{"agentId":{"type":"integer","format":"int64"},"openId":{"type":"string","minLength":1},"title":{"type":"string","minLength":1}},"required":["agentId","openId","title"]},"OpenApiConversationVO":{"type":"object","properties":{"conversationId":{"type":"string"},"agentId":{"type":"integer","format":"int64"},"title":{"type":"string"},"createDt":{"type":"string"},"updateDt":{"type":"string"}}},"ResultOpenApiConversationVO":{"type":"object","properties":{"status":{"type":"integer","format":"int32"},"message":{"type":"string"},"data":{"$ref":"#/components/schemas/OpenApiConversationVO"}}},"OpenApiChatAttachmentRequest":{"type":"object","properties":{"resourceId":{"type":"integer","format":"int64"},"type":{"type":"string","minLength":1}},"required":["resourceId","type"]},"OpenApiChatRequest":{"type":"object","properties":{"agentId":{"type":"integer","format":"int64"},"openId":{"type":"string","minLength":1},"conversationId":{"type":"string","minLength":1},"content":{"type":"string","minLength":1},"attachments":{"type":"array","items":{"$ref":"#/components/schemas/OpenApiChatAttachmentRequest"}},"disabledMcpServerIds":{"type":"array","items":{"type":"integer","format":"int64"}},"disabledSkillIds":{"type":"array","items":{"type":"integer","format":"int64"}},"deepPlanEnabled":{"type":"boolean"},"webSearchEnabled":{"type":"boolean"},"sid":{"type":"string"},"timeout":{"type":"integer","format":"int64"}},"required":["agentId","content","conversationId","openId"]},"ServerSentEventString":{},"FlowTaskBo":{"type":"object","description":"任务请求对象","properties":{"nodeName":{"type":"string","description":"任务名称"},"flowName":{"type":"string","description":"流程定义名称"},"flowCode":{"type":"string","description":"流程定义编码"},"category":{"type":"string","description":"流程分类id"},"instanceId":{"type":"integer","format":"int64","description":"流程实例id"},"flowStatus":{"type":"string","description":"流程状态"},"permissionList":{"type":"array","description":"权限列表","items":{"type":"string"}},"createByIds":{"type":"array","description":"申请人Ids","items":{"type":"integer","format":"int64"}},"params":{"type":"object","additionalProperties":{},"description":"请求参数"}}},"PageQuery":{"type":"object","description":"分页查询实体类","properties":{"pageSize":{"type":"integer","format":"int32","description":"分页大小"},"pageNum":{"type":"integer","format":"int32","description":"当前页数"},"orderByColumn":{"type":"string","description":"排序列"},"isAsc":{"type":"string","description":"排序的方向desc或者asc"}}},"ButtonPermissionVo":{"type":"object","description":"按钮权限视图对象。","properties":{"code":{"type":"string","description":"唯一编码"},"value":{"type":"string","description":"选项值"},"show":{"type":"boolean","description":"是否显示"}}},"FlowCopyVo":{"type":"object","description":"流程抄送视图对象。","properties":{"userId":{"type":"integer","format":"int64","description":"用户id"},"nickName":{"type":"string","description":"用户昵称"}}},"FlowTaskVo":{"type":"object","description":"流程任务视图对象。","properties":{"id":{"type":"integer","format":"int64","description":"任务ID。"},"createTime":{"type":"string","format":"date-time","description":"创建时间"},"updateTime":{"type":"string","format":"date-time","description":"更新时间"},"delFlag":{"type":"string","description":"删除标记"},"definitionId":{"type":"integer","format":"int64","description":"对应flow_definition表的id"},"instanceId":{"type":"integer","format":"int64","description":"流程实例表id"},"flowName":{"type":"string","description":"流程定义名称"},"businessId":{"type":"string","description":"业务id"},"nodeCode":{"type":"string","description":"节点编码"},"nodeName":{"type":"string","description":"节点名称"},"nodeType":{"type":"integer","format":"int32","description":"节点类型(0开始节点 1中间节点 2结束节点 3互斥网关 4并行网关)"},"permissionList":{"type":"array","description":"权限标识 permissionFlag的list形式","items":{"type":"string"}},"userList":{"type":"array","description":"流程用户列表","items":{"$ref":"#/components/schemas/User"}},"formCustom":{"type":"string","description":"审批表单是否自定义(Y是 N否)"},"formPath":{"type":"string","description":"审批表单"},"flowCode":{"type":"string","description":"流程定义编码"},"version":{"type":"string","description":"流程版本号"},"flowStatus":{"type":"string","description":"流程状态"},"category":{"type":"string","description":"流程分类id"},"categoryName":{"type":"string","description":"流程分类名称"},"flowStatusName":{"type":"string","description":"流程状态"},"type":{"type":"string","description":"办理人类型"},"assigneeIds":{"type":"string","description":"办理人ids"},"assigneeNames":{"type":"string","description":"办理人名称"},"processedBy":{"type":"string","description":"抄送人id"},"processedByName":{"type":"string","description":"抄送人名称"},"nodeRatio":{"type":"string","description":"流程签署比例值 大于0为票签,会签"},"createBy":{"type":"string","description":"申请人id"},"createByName":{"type":"string","description":"申请人名称"},"applyNode":{"type":"boolean","description":"是否为申请人节点"},"buttonList":{"type":"array","description":"按钮权限","items":{"$ref":"#/components/schemas/ButtonPermissionVo"}},"copyList":{"type":"array","description":"抄送对象 ID 集合\n

\n 根据扩展属性中 CopySettingEnum 类型的数据生成,存储需要抄送的对象 ID","items":{"$ref":"#/components/schemas/FlowCopyVo"}},"varList":{"type":"object","additionalProperties":{"type":"string"},"description":"自定义参数 Map\n

\n 根据扩展属性中 VariablesEnum 类型的数据生成,存储 key=value 格式的自定义参数"},"businessCode":{"type":"string","description":"业务编码"},"businessTitle":{"type":"string","description":"业务标题"}}},"PageResultFlowTaskVo":{"type":"object","description":"表格分页数据对象","properties":{"total":{"type":"integer","format":"int64","description":"总记录数"},"rows":{"type":"array","description":"列表数据","items":{"$ref":"#/components/schemas/FlowTaskVo"}}}},"RPageResultFlowTaskVo":{"type":"object","description":"响应信息主体","properties":{"code":{"type":"integer","format":"int32","description":"响应状态码"},"msg":{"type":"string","description":"响应提示信息"},"data":{"$ref":"#/components/schemas/PageResultFlowTaskVo","description":"响应业务数据"}}},"FlowHisTaskVo":{"type":"object","description":"历史任务视图","properties":{"id":{"type":"integer","format":"int64","description":"历史任务主键"},"createTime":{"type":"string","format":"date-time","description":"创建时间"},"updateTime":{"type":"string","format":"date-time","description":"更新时间"},"delFlag":{"type":"string","description":"删除标记"},"definitionId":{"type":"integer","format":"int64","description":"对应flow_definition表的id"},"flowName":{"type":"string","description":"流程定义名称"},"instanceId":{"type":"integer","format":"int64","description":"流程实例表id"},"taskId":{"type":"integer","format":"int64","description":"任务表id"},"cooperateType":{"type":"integer","format":"int32","description":"协作方式(1审批 2转办 3委派 4会签 5票签 6加签 7减签)"},"cooperateTypeName":{"type":"string","description":"协作方式(1审批 2转办 3委派 4会签 5票签 6加签 7减签)"},"businessId":{"type":"string","description":"业务id"},"nodeCode":{"type":"string","description":"开始节点编码"},"nodeName":{"type":"string","description":"开始节点名称"},"nodeType":{"type":"integer","format":"int32","description":"开始节点类型(0开始节点 1中间节点 2结束节点 3互斥网关 4并行网关)"},"targetNodeCode":{"type":"string","description":"目标节点编码"},"targetNodeName":{"type":"string","description":"结束节点名称"},"approver":{"type":"string","description":"审批者"},"approverName":{"type":"string","description":"审批者"},"collaborator":{"type":"string","description":"协作人(只有转办、会签、票签、委派)"},"permissionList":{"type":"array","description":"权限标识 permissionFlag的list形式","items":{"type":"string"}},"skipType":{"type":"string","description":"跳转类型(PASS通过 REJECT退回 NONE无动作)"},"flowStatus":{"type":"string","description":"流程状态"},"flowTaskStatus":{"type":"string","description":"任务状态"},"flowStatusName":{"type":"string","description":"流程状态"},"message":{"type":"string","description":"审批意见"},"ext":{"type":"string","description":"业务详情 存业务类的json"},"createBy":{"type":"string","description":"创建者"},"createByName":{"type":"string","description":"申请人"},"category":{"type":"string","description":"流程分类id"},"categoryName":{"type":"string","description":"流程分类名称"},"formCustom":{"type":"string","description":"审批表单是否自定义(Y是 N否)"},"formPath":{"type":"string","description":"审批表单路径"},"flowCode":{"type":"string","description":"流程定义编码"},"version":{"type":"string","description":"流程版本号"},"runDuration":{"type":"string","description":"运行时长"},"businessCode":{"type":"string","description":"业务编码"},"businessTitle":{"type":"string","description":"业务标题"}}},"PageResultFlowHisTaskVo":{"type":"object","description":"表格分页数据对象","properties":{"total":{"type":"integer","format":"int64","description":"总记录数"},"rows":{"type":"array","description":"列表数据","items":{"$ref":"#/components/schemas/FlowHisTaskVo"}}}},"RPageResultFlowHisTaskVo":{"type":"object","description":"响应信息主体","properties":{"code":{"type":"integer","format":"int32","description":"响应状态码"},"msg":{"type":"string","description":"响应提示信息"},"data":{"$ref":"#/components/schemas/PageResultFlowHisTaskVo","description":"响应业务数据"}}},"RFlowTaskVo":{"type":"object","description":"响应信息主体","properties":{"code":{"type":"integer","format":"int32","description":"响应状态码"},"msg":{"type":"string","description":"响应提示信息"},"data":{"$ref":"#/components/schemas/FlowTaskVo","description":"响应业务数据"}}},"RListNode":{"type":"object","description":"响应信息主体","properties":{"code":{"type":"integer","format":"int32","description":"响应状态码"},"msg":{"type":"string","description":"响应提示信息"},"data":{"type":"array","description":"响应业务数据","items":{"$ref":"#/components/schemas/Node"}}}},"RListUserDTO":{"type":"object","description":"响应信息主体","properties":{"code":{"type":"integer","format":"int32","description":"响应状态码"},"msg":{"type":"string","description":"响应提示信息"},"data":{"type":"array","description":"响应业务数据","items":{"$ref":"#/components/schemas/UserDTO"}}}},"UserDTO":{"type":"object","description":"用户","properties":{"userId":{"type":"integer","format":"int64","description":"用户ID"},"deptId":{"type":"integer","format":"int64","description":"部门ID"},"userName":{"type":"string","description":"用户账号"},"nickName":{"type":"string","description":"用户昵称"},"userType":{"type":"string","description":"用户类型(sys_user系统用户)"},"email":{"type":"string","description":"用户邮箱"},"phoneNumber":{"type":"string","description":"手机号码"},"gender":{"type":"string","description":"用户性别(0男 1女 2未知)"},"status":{"type":"string","description":"账号状态(0正常 1停用)"},"createTime":{"type":"string","format":"date-time","description":"创建时间"}}},"FlowSpelVo":{"type":"object","description":"流程spel表达式定义视图对象 flow_spel","properties":{"id":{"type":"integer","format":"int64","description":"主键id"},"componentName":{"type":"string","description":"组件名称"},"methodName":{"type":"string","description":"方法名"},"methodParams":{"type":"string","description":"参数"},"viewSpel":{"type":"string","description":"预览spel值"},"status":{"type":"string","description":"状态(0正常 1停用)"},"remark":{"type":"string","description":"备注"},"createTime":{"type":"string","format":"date-time","description":"创建时间"}}},"RFlowSpelVo":{"type":"object","description":"响应信息主体","properties":{"code":{"type":"integer","format":"int32","description":"响应状态码"},"msg":{"type":"string","description":"响应提示信息"},"data":{"$ref":"#/components/schemas/FlowSpelVo","description":"响应业务数据"}}},"PageResultFlowSpelVo":{"type":"object","description":"表格分页数据对象","properties":{"total":{"type":"integer","format":"int64","description":"总记录数"},"rows":{"type":"array","description":"列表数据","items":{"$ref":"#/components/schemas/FlowSpelVo"}}}},"RPageResultFlowSpelVo":{"type":"object","description":"响应信息主体","properties":{"code":{"type":"integer","format":"int32","description":"响应状态码"},"msg":{"type":"string","description":"响应提示信息"},"data":{"$ref":"#/components/schemas/PageResultFlowSpelVo","description":"响应业务数据"}}},"PageResultTestLeaveVo":{"type":"object","description":"表格分页数据对象","properties":{"total":{"type":"integer","format":"int64","description":"总记录数"},"rows":{"type":"array","description":"列表数据","items":{"$ref":"#/components/schemas/TestLeaveVo"}}}},"RPageResultTestLeaveVo":{"type":"object","description":"响应信息主体","properties":{"code":{"type":"integer","format":"int32","description":"响应状态码"},"msg":{"type":"string","description":"响应提示信息"},"data":{"$ref":"#/components/schemas/PageResultTestLeaveVo","description":"响应业务数据"}}},"FlowInstanceBo":{"type":"object","description":"流程实例查询条件对象。","properties":{"flowName":{"type":"string","description":"流程定义名称"},"flowCode":{"type":"string","description":"流程定义编码"},"startUserId":{"type":"string","description":"任务发起人"},"businessId":{"type":"string","description":"业务id"},"category":{"type":"string","description":"流程分类id"},"nodeName":{"type":"string","description":"任务名称"},"createByIds":{"type":"array","description":"申请人Ids","items":{"type":"string"}}}},"FlowInstanceVo":{"type":"object","description":"流程实例视图对象。","properties":{"id":{"type":"integer","format":"int64","description":"流程实例ID。"},"createTime":{"type":"string","format":"date-time","description":"创建时间"},"updateTime":{"type":"string","format":"date-time","description":"更新时间"},"delFlag":{"type":"string","description":"删除标记"},"definitionId":{"type":"integer","format":"int64","description":"对应flow_definition表的id"},"flowName":{"type":"string","description":"流程定义名称"},"flowCode":{"type":"string","description":"流程定义编码"},"businessId":{"type":"string","description":"业务id"},"nodeType":{"type":"integer","format":"int32","description":"节点类型(0开始节点 1中间节点 2结束节点 3互斥网关 4并行网关)"},"nodeCode":{"type":"string","description":"流程节点编码 每个流程的nodeCode是唯一的,即definitionId+nodeCode唯一,在数据库层面做了控制"},"nodeName":{"type":"string","description":"流程节点名称"},"variable":{"type":"string","description":"流程变量"},"flowStatus":{"type":"string","description":"流程状态"},"flowStatusName":{"type":"string","description":"流程状态"},"activityStatus":{"type":"integer","format":"int32","description":"流程激活状态(0挂起 1激活)"},"formCustom":{"type":"string","description":"审批表单是否自定义(Y是 N否)"},"formPath":{"type":"string","description":"审批表单路径"},"ext":{"type":"string","description":"扩展字段,预留给业务系统使用"},"version":{"type":"string","description":"流程定义版本"},"createBy":{"type":"string","description":"创建者"},"createByName":{"type":"string","description":"申请人"},"category":{"type":"string","description":"流程分类id"},"categoryName":{"type":"string","description":"流程分类名称"},"businessCode":{"type":"string","description":"业务编码"},"businessTitle":{"type":"string","description":"业务标题"}}},"PageResultFlowInstanceVo":{"type":"object","description":"表格分页数据对象","properties":{"total":{"type":"integer","format":"int64","description":"总记录数"},"rows":{"type":"array","description":"列表数据","items":{"$ref":"#/components/schemas/FlowInstanceVo"}}}},"RPageResultFlowInstanceVo":{"type":"object","description":"响应信息主体","properties":{"code":{"type":"integer","format":"int32","description":"响应状态码"},"msg":{"type":"string","description":"响应提示信息"},"data":{"$ref":"#/components/schemas/PageResultFlowInstanceVo","description":"响应业务数据"}}},"RMapStringObject":{"type":"object","description":"响应信息主体","properties":{"code":{"type":"integer","format":"int32","description":"响应状态码"},"msg":{"type":"string","description":"响应提示信息"},"data":{"type":"object","additionalProperties":{},"description":"响应业务数据"}}},"RFlowInstanceVo":{"type":"object","description":"响应信息主体","properties":{"code":{"type":"integer","format":"int32","description":"响应状态码"},"msg":{"type":"string","description":"响应提示信息"},"data":{"$ref":"#/components/schemas/FlowInstanceVo","description":"响应业务数据"}}},"Definition":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"version":{"type":"string"},"tenantId":{"type":"string"},"isPublish":{"type":"integer","format":"int32"},"modelValue":{"type":"string"},"userList":{"type":"array","items":{"$ref":"#/components/schemas/User"}},"nodeList":{"type":"array","items":{"$ref":"#/components/schemas/Node"}},"listenerPath":{"type":"string"},"activityStatus":{"type":"integer","format":"int32"},"listenerType":{"type":"string"},"updateBy":{"type":"string"},"ext":{"type":"string"},"delFlag":{"type":"string"},"createTime":{"type":"string","format":"date-time"},"createBy":{"type":"string"},"category":{"type":"string"},"flowName":{"type":"string"},"flowCode":{"type":"string"},"updateTime":{"type":"string","format":"date-time"},"formCustom":{"type":"string"},"formPath":{"type":"string"}}},"RDefinition":{"type":"object","description":"响应信息主体","properties":{"code":{"type":"integer","format":"int32","description":"响应状态码"},"msg":{"type":"string","description":"响应提示信息"},"data":{"$ref":"#/components/schemas/Definition","description":"响应业务数据"}}},"FlowDefinitionVo":{"type":"object","description":"流程定义视图","properties":{"id":{"type":"integer","format":"int64","description":"流程定义主键"},"createTime":{"type":"string","format":"date-time","description":"创建时间"},"updateTime":{"type":"string","format":"date-time","description":"更新时间"},"delFlag":{"type":"string","description":"删除标记"},"flowCode":{"type":"string","description":"流程定义编码"},"flowName":{"type":"string","description":"流程定义名称"},"category":{"type":"string","description":"流程分类id"},"categoryName":{"type":"string","description":"流程分类名称"},"version":{"type":"string","description":"流程版本"},"isPublish":{"type":"integer","format":"int32","description":"是否发布(0未发布 1已发布 9失效)"},"formCustom":{"type":"string","description":"审批表单是否自定义(Y是 N否)"},"formPath":{"type":"string","description":"审批表单路径"},"activityStatus":{"type":"integer","format":"int32","description":"流程激活状态(0挂起 1激活)"},"listenerType":{"type":"string","description":"监听器类型"},"listenerPath":{"type":"string","description":"监听器路径"},"ext":{"type":"string","description":"扩展字段,预留给业务系统使用"}}},"PageResultFlowDefinitionVo":{"type":"object","description":"表格分页数据对象","properties":{"total":{"type":"integer","format":"int64","description":"总记录数"},"rows":{"type":"array","description":"列表数据","items":{"$ref":"#/components/schemas/FlowDefinitionVo"}}}},"RPageResultFlowDefinitionVo":{"type":"object","description":"响应信息主体","properties":{"code":{"type":"integer","format":"int32","description":"响应状态码"},"msg":{"type":"string","description":"响应提示信息"},"data":{"$ref":"#/components/schemas/PageResultFlowDefinitionVo","description":"响应业务数据"}}},"FlowCategoryVo":{"type":"object","description":"流程分类视图对象 wf_category","properties":{"categoryId":{"type":"integer","format":"int64","description":"流程分类ID"},"parentId":{"type":"integer","format":"int64","description":"父级分类id"},"parentName":{"type":"string","description":"父级分类名称"},"ancestors":{"type":"string","description":"祖级列表"},"categoryName":{"type":"string","description":"流程分类名称"},"orderNum":{"type":"integer","format":"int64","description":"显示顺序"},"createTime":{"type":"string","format":"date-time","description":"创建时间"}}},"RFlowCategoryVo":{"type":"object","description":"响应信息主体","properties":{"code":{"type":"integer","format":"int32","description":"响应状态码"},"msg":{"type":"string","description":"响应提示信息"},"data":{"$ref":"#/components/schemas/FlowCategoryVo","description":"响应业务数据"}}},"RListFlowCategoryVo":{"type":"object","description":"响应信息主体","properties":{"code":{"type":"integer","format":"int32","description":"响应状态码"},"msg":{"type":"string","description":"响应提示信息"},"data":{"type":"array","description":"响应业务数据","items":{"$ref":"#/components/schemas/FlowCategoryVo"}}}},"RListTreeString":{"type":"object","description":"响应信息主体","properties":{"code":{"type":"integer","format":"int32","description":"响应状态码"},"msg":{"type":"string","description":"响应提示信息"},"data":{"type":"array","description":"响应业务数据","items":{"$ref":"#/components/schemas/TreeString"}}}},"TreeNodeConfig":{"type":"object","properties":{"idKey":{"type":"string"},"parentIdKey":{"type":"string"},"weightKey":{"type":"string"},"nameKey":{"type":"string"},"childrenKey":{"type":"string"},"deep":{"type":"integer","format":"int32"}}},"TreeString":{"type":"object","additionalProperties":{},"properties":{"name":{"type":"object","properties":{"empty":{"type":"boolean"}}},"id":{"type":"string"},"weight":{},"parentId":{"type":"string"},"config":{"$ref":"#/components/schemas/TreeNodeConfig"},"empty":{"type":"boolean"}}},"ApiResultDefJson":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"msg":{"type":"string"},"data":{"$ref":"#/components/schemas/DefJson"}}},"ApiResultListForm":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"msg":{"type":"string"},"data":{"type":"array","items":{"$ref":"#/components/schemas/Form"}}}},"ApiResultListNodeExt":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"msg":{"type":"string"},"data":{"type":"array","items":{"$ref":"#/components/schemas/NodeExt"}}}},"ChildNode":{"type":"object","properties":{"code":{"type":"string"},"desc":{"type":"string"},"label":{"type":"string"},"type":{"type":"integer","format":"int32"},"must":{"type":"boolean"},"multiple":{"type":"boolean"},"precision":{"type":"integer","format":"int32"},"step":{"type":"string"},"min":{"type":"string"},"dateType":{"type":"string"},"dateFormat":{"type":"string"},"dict":{"type":"array","items":{"$ref":"#/components/schemas/DictItem"}}}},"DictItem":{"type":"object","properties":{"label":{"type":"string"},"value":{"type":"string"},"selected":{"type":"boolean"}}},"NodeExt":{"type":"object","properties":{"code":{"type":"string"},"name":{"type":"string"},"desc":{"type":"string"},"type":{"type":"integer","format":"int32"},"childs":{"type":"array","items":{"$ref":"#/components/schemas/ChildNode"}}}},"ApiResultListListenerVo":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"msg":{"type":"string"},"data":{"type":"array","items":{"$ref":"#/components/schemas/ListenerVo"}}}},"ListenerVo":{"type":"object","properties":{"type":{"type":"string"},"path":{"type":"string"},"description":{"type":"string"}}},"ApiResultListString":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"msg":{"type":"string"},"data":{"type":"array","items":{"type":"string"}}}},"HandlerQuery":{"type":"object","properties":{"handlerCode":{"type":"string"},"handlerName":{"type":"string"},"handlerType":{"type":"string"},"groupId":{"type":"string"},"pageNum":{"type":"integer","format":"int32"},"pageSize":{"type":"integer","format":"int32"},"beginTime":{"type":"string"},"endTime":{"type":"string"}}},"ApiResultHandlerSelectVo":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"msg":{"type":"string"},"data":{"$ref":"#/components/schemas/HandlerSelectVo"}}},"FlowPageHandlerAuth":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"rows":{"type":"array","items":{"$ref":"#/components/schemas/HandlerAuth"}},"code":{"type":"integer","format":"int32"},"msg":{"type":"string"}}},"HandlerAuth":{"type":"object","properties":{"storageId":{"type":"string"},"handlerCode":{"type":"string"},"handlerName":{"type":"string"},"groupName":{"type":"string"},"createTime":{"type":"string"}}},"HandlerSelectVo":{"type":"object","properties":{"handlerAuths":{"$ref":"#/components/schemas/FlowPageHandlerAuth"},"treeSelections":{"type":"array","items":{"$ref":"#/components/schemas/Tree"}}}},"HandlerFeedBackDto":{"type":"object","properties":{"storageIds":{"type":"array","items":{"type":"string"}}}},"ApiResultListHandlerFeedBackVo":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"msg":{"type":"string"},"data":{"type":"array","items":{"$ref":"#/components/schemas/HandlerFeedBackVo"}}}},"HandlerFeedBackVo":{"type":"object","properties":{"storageId":{"type":"string"},"handlerName":{"type":"string"}}},"ApiResultListDict":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"msg":{"type":"string"},"data":{"type":"array","items":{"$ref":"#/components/schemas/Dict"}}}},"Dict":{"type":"object","properties":{"label":{"type":"string"},"value":{"type":"string"},"childList":{"type":"array","items":{"$ref":"#/components/schemas/Dict"}}}},"ApiResultString":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"msg":{"type":"string"},"data":{"type":"string"}}},"ApiResultFlowDto":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"msg":{"type":"string"},"data":{"$ref":"#/components/schemas/FlowDto"}}},"ApiResultWarmFlowVo":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"msg":{"type":"string"},"data":{"$ref":"#/components/schemas/WarmFlowVo"}}},"WarmFlowVo":{"type":"object","properties":{"tokenNameList":{"type":"array","items":{"type":"string"}},"framework":{"type":"string"}}},"ProfileUserVo":{"type":"object","description":"用户信息视图对象 sys_user","properties":{"userId":{"type":"integer","format":"int64","description":"用户ID"},"deptId":{"type":"integer","format":"int64","description":"部门ID"},"userName":{"type":"string","description":"用户账号"},"nickName":{"type":"string","description":"用户昵称"},"userType":{"type":"string","description":"用户类型(sys_user系统用户)"},"email":{"type":"string","description":"用户邮箱"},"phoneNumber":{"type":"string","description":"手机号码"},"gender":{"type":"string","description":"用户性别(0男 1女 2未知)"},"avatar":{"type":"integer","format":"int64","description":"头像 OSS ID"},"avatarUrl":{"type":"string","description":"头像地址"},"loginIp":{"type":"string","description":"最后登录IP"},"loginDate":{"type":"string","format":"date-time","description":"最后登录时间"},"deptName":{"type":"string","description":"部门名"}}},"ProfileVo":{"type":"object","description":"用户个人信息","properties":{"user":{"$ref":"#/components/schemas/ProfileUserVo","description":"用户信息"},"roleGroup":{"type":"string","description":"用户所属角色组"},"postGroup":{"type":"string","description":"用户所属岗位组"}}},"RProfileVo":{"type":"object","description":"响应信息主体","properties":{"code":{"type":"integer","format":"int32","description":"响应状态码"},"msg":{"type":"string","description":"响应提示信息"},"data":{"$ref":"#/components/schemas/ProfileVo","description":"响应业务数据"}}},"RListSysUserVo":{"type":"object","description":"响应信息主体","properties":{"code":{"type":"integer","format":"int32","description":"响应状态码"},"msg":{"type":"string","description":"响应提示信息"},"data":{"type":"array","description":"响应业务数据","items":{"$ref":"#/components/schemas/SysUserVo"}}}},"SysRoleVo":{"type":"object","description":"角色信息视图对象 sys_role","properties":{"roleId":{"type":"integer","format":"int64","description":"角色ID"},"roleName":{"type":"string","description":"角色名称"},"roleKey":{"type":"string","description":"角色权限字符串"},"roleSort":{"type":"integer","format":"int32","description":"显示顺序"},"dataScope":{"type":"string","description":"数据范围(1:全部数据权限 2:自定数据权限 3:本部门数据权限 4:本部门及以下数据权限 5:仅本人数据权限 6:部门及以下或本人数据权限)"},"menuCheckStrictly":{"type":"boolean","description":"菜单树选择项是否关联显示"},"deptCheckStrictly":{"type":"boolean","description":"部门树选择项是否关联显示"},"status":{"type":"string","description":"角色状态(0正常 1停用)"},"remark":{"type":"string","description":"备注"},"createTime":{"type":"string","format":"date-time","description":"创建时间"},"flag":{"type":"boolean","description":"用户是否存在此角色标识 默认不存在"},"superAdmin":{"type":"boolean","description":"判断当前角色是否为超级管理员角色。"}}},"SysUserVo":{"type":"object","description":"用户信息视图对象 sys_user","properties":{"userId":{"type":"integer","format":"int64","description":"用户ID"},"deptId":{"type":"integer","format":"int64","description":"部门ID"},"userName":{"type":"string","description":"用户账号"},"nickName":{"type":"string","description":"用户昵称"},"userType":{"type":"string","description":"用户类型(sys_user系统用户)"},"email":{"type":"string","description":"用户邮箱"},"phoneNumber":{"type":"string","description":"手机号码"},"gender":{"type":"string","description":"用户性别(0男 1女 2未知)"},"avatar":{"type":"integer","format":"int64","description":"头像 OSS ID"},"avatarUrl":{"type":"string","description":"头像地址"},"status":{"type":"string","description":"账号状态(0正常 1停用)"},"loginIp":{"type":"string","description":"最后登录IP"},"loginDate":{"type":"string","format":"date-time","description":"最后登录时间"},"remark":{"type":"string","description":"备注"},"createTime":{"type":"string","format":"date-time","description":"创建时间"},"updateTime":{"type":"string","format":"date-time","description":"更新时间"},"deptName":{"type":"string","description":"部门名"},"roles":{"type":"array","description":"角色对象","items":{"$ref":"#/components/schemas/SysRoleVo"}},"roleIds":{"type":"array","description":"角色组","items":{"type":"integer","format":"int64"}},"postIds":{"type":"array","description":"岗位组","items":{"type":"integer","format":"int64"}},"roleId":{"type":"integer","format":"int64","description":"数据权限 当前角色ID"}}},"PageResultSysUserVo":{"type":"object","description":"表格分页数据对象","properties":{"total":{"type":"integer","format":"int64","description":"总记录数"},"rows":{"type":"array","description":"列表数据","items":{"$ref":"#/components/schemas/SysUserVo"}}}},"RPageResultSysUserVo":{"type":"object","description":"响应信息主体","properties":{"code":{"type":"integer","format":"int32","description":"响应状态码"},"msg":{"type":"string","description":"响应提示信息"},"data":{"$ref":"#/components/schemas/PageResultSysUserVo","description":"响应业务数据"}}},"RUserInfoVo":{"type":"object","description":"响应信息主体","properties":{"code":{"type":"integer","format":"int32","description":"响应状态码"},"msg":{"type":"string","description":"响应提示信息"},"data":{"$ref":"#/components/schemas/UserInfoVo","description":"响应业务数据"}}},"UserInfoVo":{"type":"object","description":"登录用户信息","properties":{"user":{"$ref":"#/components/schemas/SysUserVo","description":"用户基本信息"},"permissions":{"type":"array","description":"菜单权限","items":{"type":"string"},"uniqueItems":true},"roles":{"type":"array","description":"角色权限","items":{"type":"string"},"uniqueItems":true}}},"RSysUserInfoVo":{"type":"object","description":"响应信息主体","properties":{"code":{"type":"integer","format":"int32","description":"响应状态码"},"msg":{"type":"string","description":"响应提示信息"},"data":{"$ref":"#/components/schemas/SysUserInfoVo","description":"响应业务数据"}}},"SysPostVo":{"type":"object","description":"岗位信息视图对象 sys_post","properties":{"postId":{"type":"integer","format":"int64","description":"岗位ID"},"deptId":{"type":"integer","format":"int64","description":"部门id"},"postCode":{"type":"string","description":"岗位编码"},"postName":{"type":"string","description":"岗位名称"},"postCategory":{"type":"string","description":"岗位类别编码"},"postSort":{"type":"integer","format":"int32","description":"显示顺序"},"status":{"type":"string","description":"状态(0正常 1停用)"},"remark":{"type":"string","description":"备注"},"createTime":{"type":"string","format":"date-time","description":"创建时间"},"deptName":{"type":"string","description":"部门名"}}},"SysUserInfoVo":{"type":"object","description":"用户信息","properties":{"user":{"$ref":"#/components/schemas/SysUserVo","description":"用户信息"},"roleIds":{"type":"array","description":"角色ID列表","items":{"type":"integer","format":"int64"}},"roles":{"type":"array","description":"角色列表","items":{"$ref":"#/components/schemas/SysRoleVo"}},"postIds":{"type":"array","description":"岗位ID列表","items":{"type":"integer","format":"int64"}},"posts":{"type":"array","description":"岗位列表","items":{"$ref":"#/components/schemas/SysPostVo"}}}},"RListSysSocialVo":{"type":"object","description":"响应信息主体","properties":{"code":{"type":"integer","format":"int32","description":"响应状态码"},"msg":{"type":"string","description":"响应提示信息"},"data":{"type":"array","description":"响应业务数据","items":{"$ref":"#/components/schemas/SysSocialVo"}}}},"SysSocialVo":{"type":"object","description":"社会化关系视图对象 sys_social","properties":{"id":{"type":"integer","format":"int64","description":"主键"},"userId":{"type":"integer","format":"int64","description":"用户ID"},"authId":{"type":"string","description":"的唯一ID"},"source":{"type":"string","description":"用户来源"},"accessToken":{"type":"string","description":"用户的授权令牌"},"expireIn":{"type":"integer","format":"int32","description":"用户的授权令牌的有效期,部分平台可能没有"},"refreshToken":{"type":"string","description":"刷新令牌,部分平台可能没有"},"openId":{"type":"string","description":"用户的 open id"},"userName":{"type":"string","description":"授权的第三方账号"},"nickName":{"type":"string","description":"授权的第三方昵称"},"email":{"type":"string","description":"授权的第三方邮箱"},"avatar":{"type":"string","description":"授权的第三方头像地址"},"accessCode":{"type":"string","description":"平台的授权信息,部分平台可能没有"},"unionId":{"type":"string","description":"用户的 unionid"},"scope":{"type":"string","description":"授予的权限,部分平台可能没有"},"tokenType":{"type":"string","description":"个别平台的授权信息,部分平台可能没有"},"idToken":{"type":"string","description":"id token,部分平台可能没有"},"macAlgorithm":{"type":"string","description":"小米平台用户的附带属性,部分平台可能没有"},"macKey":{"type":"string","description":"小米平台用户的附带属性,部分平台可能没有"},"code":{"type":"string","description":"用户的授权code,部分平台可能没有"},"oauthToken":{"type":"string","description":"Twitter平台用户的附带属性,部分平台可能没有"},"oauthTokenSecret":{"type":"string","description":"Twitter平台用户的附带属性,部分平台可能没有"},"createTime":{"type":"string","format":"date-time","description":"创建时间"}}},"RSysRoleVo":{"type":"object","description":"响应信息主体","properties":{"code":{"type":"integer","format":"int32","description":"响应状态码"},"msg":{"type":"string","description":"响应提示信息"},"data":{"$ref":"#/components/schemas/SysRoleVo","description":"响应业务数据"}}},"RListSysRoleVo":{"type":"object","description":"响应信息主体","properties":{"code":{"type":"integer","format":"int32","description":"响应状态码"},"msg":{"type":"string","description":"响应提示信息"},"data":{"type":"array","description":"响应业务数据","items":{"$ref":"#/components/schemas/SysRoleVo"}}}},"PageResultSysRoleVo":{"type":"object","description":"表格分页数据对象","properties":{"total":{"type":"integer","format":"int64","description":"总记录数"},"rows":{"type":"array","description":"列表数据","items":{"$ref":"#/components/schemas/SysRoleVo"}}}},"RPageResultSysRoleVo":{"type":"object","description":"响应信息主体","properties":{"code":{"type":"integer","format":"int32","description":"响应状态码"},"msg":{"type":"string","description":"响应提示信息"},"data":{"$ref":"#/components/schemas/PageResultSysRoleVo","description":"响应业务数据"}}},"DeptTreeSelectVo":{"type":"object","description":"角色部门列表树信息","properties":{"checkedKeys":{"type":"array","description":"选中部门列表","items":{"type":"integer","format":"int64"}},"depts":{"type":"array","description":"下拉树结构列表","items":{"$ref":"#/components/schemas/TreeString"}}}},"RDeptTreeSelectVo":{"type":"object","description":"响应信息主体","properties":{"code":{"type":"integer","format":"int32","description":"响应状态码"},"msg":{"type":"string","description":"响应提示信息"},"data":{"$ref":"#/components/schemas/DeptTreeSelectVo","description":"响应业务数据"}}},"RSysPostVo":{"type":"object","description":"响应信息主体","properties":{"code":{"type":"integer","format":"int32","description":"响应状态码"},"msg":{"type":"string","description":"响应提示信息"},"data":{"$ref":"#/components/schemas/SysPostVo","description":"响应业务数据"}}},"RListSysPostVo":{"type":"object","description":"响应信息主体","properties":{"code":{"type":"integer","format":"int32","description":"响应状态码"},"msg":{"type":"string","description":"响应提示信息"},"data":{"type":"array","description":"响应业务数据","items":{"$ref":"#/components/schemas/SysPostVo"}}}},"PageResultSysPostVo":{"type":"object","description":"表格分页数据对象","properties":{"total":{"type":"integer","format":"int64","description":"总记录数"},"rows":{"type":"array","description":"列表数据","items":{"$ref":"#/components/schemas/SysPostVo"}}}},"RPageResultSysPostVo":{"type":"object","description":"响应信息主体","properties":{"code":{"type":"integer","format":"int32","description":"响应状态码"},"msg":{"type":"string","description":"响应提示信息"},"data":{"$ref":"#/components/schemas/PageResultSysPostVo","description":"响应业务数据"}}},"RSysNoticeVo":{"type":"object","description":"响应信息主体","properties":{"code":{"type":"integer","format":"int32","description":"响应状态码"},"msg":{"type":"string","description":"响应提示信息"},"data":{"$ref":"#/components/schemas/SysNoticeVo","description":"响应业务数据"}}},"SysNoticeVo":{"type":"object","description":"通知公告视图对象 sys_notice","properties":{"noticeId":{"type":"integer","format":"int64","description":"公告ID"},"noticeTitle":{"type":"string","description":"公告标题"},"noticeType":{"type":"string","description":"公告类型(1通知 2公告)"},"noticeContent":{"type":"string","description":"公告内容"},"status":{"type":"string","description":"公告状态(0正常 1关闭)"},"remark":{"type":"string","description":"备注"},"createBy":{"type":"integer","format":"int64","description":"创建者"},"createByName":{"type":"string","description":"创建人名称"},"createTime":{"type":"string","format":"date-time","description":"创建时间"}}},"PageResultSysNoticeVo":{"type":"object","description":"表格分页数据对象","properties":{"total":{"type":"integer","format":"int64","description":"总记录数"},"rows":{"type":"array","description":"列表数据","items":{"$ref":"#/components/schemas/SysNoticeVo"}}}},"RPageResultSysNoticeVo":{"type":"object","description":"响应信息主体","properties":{"code":{"type":"integer","format":"int32","description":"响应状态码"},"msg":{"type":"string","description":"响应提示信息"},"data":{"$ref":"#/components/schemas/PageResultSysNoticeVo","description":"响应业务数据"}}},"RSysMenuVo":{"type":"object","description":"响应信息主体","properties":{"code":{"type":"integer","format":"int32","description":"响应状态码"},"msg":{"type":"string","description":"响应提示信息"},"data":{"$ref":"#/components/schemas/SysMenuVo","description":"响应业务数据"}}},"SysMenuVo":{"type":"object","description":"菜单权限视图对象 sys_menu","properties":{"menuId":{"type":"integer","format":"int64","description":"菜单ID"},"menuName":{"type":"string","description":"菜单名称"},"parentId":{"type":"integer","format":"int64","description":"父菜单ID"},"orderNum":{"type":"integer","format":"int32","description":"显示顺序"},"path":{"type":"string","description":"路由地址"},"component":{"type":"string","description":"组件路径"},"queryParam":{"type":"string","description":"路由参数"},"isFrame":{"type":"string","description":"是否为外链(Y是 N否)"},"isCache":{"type":"string","description":"是否缓存(Y缓存 N不缓存)"},"menuType":{"type":"string","description":"菜单类型(M目录 C菜单 F按钮)"},"visible":{"type":"string","description":"显示状态(0显示 1隐藏)"},"status":{"type":"string","description":"菜单状态(0正常 1停用)"},"perms":{"type":"string","description":"权限标识"},"icon":{"type":"string","description":"菜单图标"},"activeMenu":{"type":"string","description":"激活菜单路径"},"ext":{"type":"string","description":"扩展字段"},"createDept":{"type":"integer","format":"int64","description":"创建部门"},"remark":{"type":"string","description":"备注"},"createTime":{"type":"string","format":"date-time","description":"创建时间"},"children":{"type":"array","description":"子菜单","items":{"$ref":"#/components/schemas/SysMenuVo"}}}},"MenuTreeSelectVo":{"type":"object","description":"角色菜单列表树信息","properties":{"checkedKeys":{"type":"array","description":"选中菜单列表","items":{"type":"integer","format":"int64"}},"menus":{"type":"array","description":"菜单下拉树结构列表","items":{"$ref":"#/components/schemas/TreeString"}}}},"RMenuTreeSelectVo":{"type":"object","description":"响应信息主体","properties":{"code":{"type":"integer","format":"int32","description":"响应状态码"},"msg":{"type":"string","description":"响应提示信息"},"data":{"$ref":"#/components/schemas/MenuTreeSelectVo","description":"响应业务数据"}}},"RListSysMenuVo":{"type":"object","description":"响应信息主体","properties":{"code":{"type":"integer","format":"int32","description":"响应状态码"},"msg":{"type":"string","description":"响应提示信息"},"data":{"type":"array","description":"响应业务数据","items":{"$ref":"#/components/schemas/SysMenuVo"}}}},"MetaVo":{"type":"object","description":"路由显示信息","properties":{"title":{"type":"string","description":"设置该路由在侧边栏和面包屑中展示的名字"},"icon":{"type":"string","description":"设置该路由的图标,对应路径src/assets/icons/svg"},"noCache":{"type":"boolean","description":"设置为true,则不会被 缓存"},"link":{"type":"string","description":"内链地址(http(s)://开头)"},"activeMenu":{"type":"string","description":"激活菜单"}}},"RListRouterVo":{"type":"object","description":"响应信息主体","properties":{"code":{"type":"integer","format":"int32","description":"响应状态码"},"msg":{"type":"string","description":"响应提示信息"},"data":{"type":"array","description":"响应业务数据","items":{"$ref":"#/components/schemas/RouterVo"}}}},"RouterVo":{"type":"object","description":"路由配置信息","properties":{"name":{"type":"string","description":"路由名字"},"path":{"type":"string","description":"路由地址"},"hidden":{"type":"boolean","description":"是否隐藏路由,当设置 true 的时候该路由不会再侧边栏出现"},"redirect":{"type":"string","description":"重定向地址,当设置 noRedirect 的时候该路由在面包屑导航中不可被点击"},"component":{"type":"string","description":"组件地址"},"query":{"type":"string","description":"路由参数:如 {\"id\": 1, \"name\": \"ry\"}"},"ext":{"type":"string","description":"扩展字段"},"alwaysShow":{"type":"boolean","description":"当你一个路由下面的 children 声明的路由大于1个时,自动会变成嵌套的模式--如组件页面"},"meta":{"$ref":"#/components/schemas/MetaVo","description":"其他元素"},"children":{"type":"array","description":"子路由","items":{"$ref":"#/components/schemas/RouterVo"}}}},"RSysDictTypeVo":{"type":"object","description":"响应信息主体","properties":{"code":{"type":"integer","format":"int32","description":"响应状态码"},"msg":{"type":"string","description":"响应提示信息"},"data":{"$ref":"#/components/schemas/SysDictTypeVo","description":"响应业务数据"}}},"SysDictTypeVo":{"type":"object","description":"字典类型视图对象 sys_dict_type","properties":{"dictId":{"type":"integer","format":"int64","description":"字典主键"},"dictName":{"type":"string","description":"字典名称"},"dictType":{"type":"string","description":"字典类型"},"remark":{"type":"string","description":"备注"},"createTime":{"type":"string","format":"date-time","description":"创建时间"}}},"RListSysDictTypeVo":{"type":"object","description":"响应信息主体","properties":{"code":{"type":"integer","format":"int32","description":"响应状态码"},"msg":{"type":"string","description":"响应提示信息"},"data":{"type":"array","description":"响应业务数据","items":{"$ref":"#/components/schemas/SysDictTypeVo"}}}},"PageResultSysDictTypeVo":{"type":"object","description":"表格分页数据对象","properties":{"total":{"type":"integer","format":"int64","description":"总记录数"},"rows":{"type":"array","description":"列表数据","items":{"$ref":"#/components/schemas/SysDictTypeVo"}}}},"RPageResultSysDictTypeVo":{"type":"object","description":"响应信息主体","properties":{"code":{"type":"integer","format":"int32","description":"响应状态码"},"msg":{"type":"string","description":"响应提示信息"},"data":{"$ref":"#/components/schemas/PageResultSysDictTypeVo","description":"响应业务数据"}}},"RSysDictDataVo":{"type":"object","description":"响应信息主体","properties":{"code":{"type":"integer","format":"int32","description":"响应状态码"},"msg":{"type":"string","description":"响应提示信息"},"data":{"$ref":"#/components/schemas/SysDictDataVo","description":"响应业务数据"}}},"SysDictDataVo":{"type":"object","description":"字典数据视图对象 sys_dict_data","properties":{"dictCode":{"type":"integer","format":"int64","description":"字典编码"},"dictSort":{"type":"integer","format":"int32","description":"字典排序"},"dictLabel":{"type":"string","description":"字典标签"},"dictValue":{"type":"string","description":"字典键值"},"dictType":{"type":"string","description":"字典类型"},"cssClass":{"type":"string","description":"样式属性(其他样式扩展)"},"listClass":{"type":"string","description":"表格回显样式"},"isDefault":{"type":"string","description":"是否默认(Y是 N否)"},"remark":{"type":"string","description":"备注"},"createTime":{"type":"string","format":"date-time","description":"创建时间"}}},"RListSysDictDataVo":{"type":"object","description":"响应信息主体","properties":{"code":{"type":"integer","format":"int32","description":"响应状态码"},"msg":{"type":"string","description":"响应提示信息"},"data":{"type":"array","description":"响应业务数据","items":{"$ref":"#/components/schemas/SysDictDataVo"}}}},"PageResultSysDictDataVo":{"type":"object","description":"表格分页数据对象","properties":{"total":{"type":"integer","format":"int64","description":"总记录数"},"rows":{"type":"array","description":"列表数据","items":{"$ref":"#/components/schemas/SysDictDataVo"}}}},"RPageResultSysDictDataVo":{"type":"object","description":"响应信息主体","properties":{"code":{"type":"integer","format":"int32","description":"响应状态码"},"msg":{"type":"string","description":"响应提示信息"},"data":{"$ref":"#/components/schemas/PageResultSysDictDataVo","description":"响应业务数据"}}},"RSysDeptVo":{"type":"object","description":"响应信息主体","properties":{"code":{"type":"integer","format":"int32","description":"响应状态码"},"msg":{"type":"string","description":"响应提示信息"},"data":{"$ref":"#/components/schemas/SysDeptVo","description":"响应业务数据"}}},"SysDeptVo":{"type":"object","description":"部门视图对象 sys_dept","properties":{"deptId":{"type":"integer","format":"int64","description":"部门id"},"parentId":{"type":"integer","format":"int64","description":"父部门id"},"parentName":{"type":"string","description":"父部门名称"},"ancestors":{"type":"string","description":"祖级列表"},"deptName":{"type":"string","description":"部门名称"},"deptCategory":{"type":"string","description":"部门类别编码"},"orderNum":{"type":"integer","format":"int32","description":"显示顺序"},"leader":{"type":"integer","format":"int64","description":"负责人ID"},"leaderName":{"type":"string","description":"负责人"},"phone":{"type":"string","description":"联系电话"},"email":{"type":"string","description":"邮箱"},"status":{"type":"string","description":"部门状态(0正常 1停用)"},"createTime":{"type":"string","format":"date-time","description":"创建时间"},"children":{"type":"array","description":"子部门","items":{"$ref":"#/components/schemas/SysDeptVo"}}}},"RListSysDeptVo":{"type":"object","description":"响应信息主体","properties":{"code":{"type":"integer","format":"int32","description":"响应状态码"},"msg":{"type":"string","description":"响应提示信息"},"data":{"type":"array","description":"响应业务数据","items":{"$ref":"#/components/schemas/SysDeptVo"}}}},"RSysConfigVo":{"type":"object","description":"响应信息主体","properties":{"code":{"type":"integer","format":"int32","description":"响应状态码"},"msg":{"type":"string","description":"响应提示信息"},"data":{"$ref":"#/components/schemas/SysConfigVo","description":"响应业务数据"}}},"SysConfigVo":{"type":"object","description":"参数配置视图对象 sys_config","properties":{"configId":{"type":"integer","format":"int64","description":"参数主键"},"configName":{"type":"string","description":"参数名称"},"configKey":{"type":"string","description":"参数键名"},"configValue":{"type":"string","description":"参数键值"},"configType":{"type":"string","description":"系统内置(Y是 N否)"},"remark":{"type":"string","description":"备注"},"createTime":{"type":"string","format":"date-time","description":"创建时间"}}},"PageResultSysConfigVo":{"type":"object","description":"表格分页数据对象","properties":{"total":{"type":"integer","format":"int64","description":"总记录数"},"rows":{"type":"array","description":"列表数据","items":{"$ref":"#/components/schemas/SysConfigVo"}}}},"RPageResultSysConfigVo":{"type":"object","description":"响应信息主体","properties":{"code":{"type":"integer","format":"int32","description":"响应状态码"},"msg":{"type":"string","description":"响应提示信息"},"data":{"$ref":"#/components/schemas/PageResultSysConfigVo","description":"响应业务数据"}}},"RSysClientVo":{"type":"object","description":"响应信息主体","properties":{"code":{"type":"integer","format":"int32","description":"响应状态码"},"msg":{"type":"string","description":"响应提示信息"},"data":{"$ref":"#/components/schemas/SysClientVo","description":"响应业务数据"}}},"SysClientVo":{"type":"object","description":"授权管理视图对象 sys_client","properties":{"id":{"type":"integer","format":"int64","description":"id"},"clientId":{"type":"string","description":"客户端id"},"clientKey":{"type":"string","description":"客户端key"},"clientSecret":{"type":"string","description":"客户端秘钥"},"grantTypeList":{"type":"array","description":"授权类型","items":{"type":"string"}},"grantType":{"type":"string","description":"授权类型"},"deviceType":{"type":"string","description":"设备类型"},"accessPath":{"type":"string","description":"允许访问路径"},"accessPathList":{"type":"array","description":"允许访问路径列表","items":{"type":"string"}},"ipWhitelist":{"type":"string","description":"IP白名单"},"ipWhitelistList":{"type":"array","description":"IP白名单列表","items":{"type":"string"}},"activeTimeout":{"type":"integer","format":"int64","description":"token活跃超时时间"},"timeout":{"type":"integer","format":"int64","description":"token固定超时时间"},"status":{"type":"string","description":"状态(0正常 1停用)"}}},"PageResultSysClientVo":{"type":"object","description":"表格分页数据对象","properties":{"total":{"type":"integer","format":"int64","description":"总记录数"},"rows":{"type":"array","description":"列表数据","items":{"$ref":"#/components/schemas/SysClientVo"}}}},"RPageResultSysClientVo":{"type":"object","description":"响应信息主体","properties":{"code":{"type":"integer","format":"int32","description":"响应状态码"},"msg":{"type":"string","description":"响应提示信息"},"data":{"$ref":"#/components/schemas/PageResultSysClientVo","description":"响应业务数据"}}},"SysOssBo":{"type":"object","description":"OSS对象存储分页查询对象 sys_oss","properties":{"ossId":{"type":"integer","format":"int64","description":"ossId"},"fileName":{"type":"string","description":"文件名"},"originalName":{"type":"string","description":"原名"},"fileSuffix":{"type":"string","description":"文件后缀名"},"url":{"type":"string","description":"URL地址"},"ext1":{"type":"string","description":"扩展字段"},"service":{"type":"string","description":"服务商"},"createBy":{"type":"integer","format":"int64","description":"创建者"},"params":{"type":"object","additionalProperties":{},"description":"请求参数"}}},"PageResultSysOssVo":{"type":"object","description":"表格分页数据对象","properties":{"total":{"type":"integer","format":"int64","description":"总记录数"},"rows":{"type":"array","description":"列表数据","items":{"$ref":"#/components/schemas/SysOssVo"}}}},"RPageResultSysOssVo":{"type":"object","description":"响应信息主体","properties":{"code":{"type":"integer","format":"int32","description":"响应状态码"},"msg":{"type":"string","description":"响应提示信息"},"data":{"$ref":"#/components/schemas/PageResultSysOssVo","description":"响应业务数据"}}},"SysOssVo":{"type":"object","description":"OSS对象存储视图对象 sys_oss","properties":{"ossId":{"type":"integer","format":"int64","description":"对象存储主键"},"fileName":{"type":"string","description":"文件名"},"originalName":{"type":"string","description":"原名"},"fileSuffix":{"type":"string","description":"文件后缀名"},"url":{"type":"string","description":"URL地址"},"ext1":{"type":"string","description":"扩展字段"},"createTime":{"type":"string","format":"date-time","description":"创建时间"},"createBy":{"type":"integer","format":"int64","description":"上传人"},"createByName":{"type":"string","description":"上传人名称"},"service":{"type":"string","description":"服务商"}}},"RListSysOssVo":{"type":"object","description":"响应信息主体","properties":{"code":{"type":"integer","format":"int32","description":"响应状态码"},"msg":{"type":"string","description":"响应提示信息"},"data":{"type":"array","description":"响应业务数据","items":{"$ref":"#/components/schemas/SysOssVo"}}}},"RSysOssConfigVo":{"type":"object","description":"响应信息主体","properties":{"code":{"type":"integer","format":"int32","description":"响应状态码"},"msg":{"type":"string","description":"响应提示信息"},"data":{"$ref":"#/components/schemas/SysOssConfigVo","description":"响应业务数据"}}},"SysOssConfigVo":{"type":"object","description":"对象存储配置视图对象 sys_oss_config","properties":{"ossConfigId":{"type":"integer","format":"int64","description":"主键"},"configKey":{"type":"string","description":"配置key"},"accessKey":{"type":"string","description":"accessKey"},"secretKey":{"type":"string","description":"秘钥"},"bucketName":{"type":"string","description":"桶名称"},"prefix":{"type":"string","description":"前缀"},"endpoint":{"type":"string","description":"访问站点"},"domainUrl":{"type":"string","description":"自定义域名"},"isHttps":{"type":"string","description":"是否https(Y=是,N=否)"},"region":{"type":"string","description":"域"},"status":{"type":"string","description":"是否默认(Y=是,N=否)"},"ext1":{"type":"string","description":"扩展字段"},"remark":{"type":"string","description":"备注"},"accessPolicy":{"type":"string","description":"桶权限类型(0private 1public 2custom)"}}},"PageResultSysOssConfigVo":{"type":"object","description":"表格分页数据对象","properties":{"total":{"type":"integer","format":"int64","description":"总记录数"},"rows":{"type":"array","description":"列表数据","items":{"$ref":"#/components/schemas/SysOssConfigVo"}}}},"RPageResultSysOssConfigVo":{"type":"object","description":"响应信息主体","properties":{"code":{"type":"integer","format":"int32","description":"响应状态码"},"msg":{"type":"string","description":"响应提示信息"},"data":{"$ref":"#/components/schemas/PageResultSysOssConfigVo","description":"响应业务数据"}}},"SseEmitter":{"type":"object","properties":{"timeout":{"type":"integer","format":"int64"}}},"RSysMessageBoxVo":{"type":"object","description":"响应信息主体","properties":{"code":{"type":"integer","format":"int32","description":"响应状态码"},"msg":{"type":"string","description":"响应提示信息"},"data":{"$ref":"#/components/schemas/SysMessageBoxVo","description":"响应业务数据"}}},"SysMessageBoxVo":{"type":"object","description":"消息盒子视图对象","properties":{"systemList":{"type":"array","description":"系统消息","items":{"$ref":"#/components/schemas/SysMessageVo"}},"noticeList":{"type":"array","description":"通知公告消息","items":{"$ref":"#/components/schemas/SysMessageVo"}},"workflowList":{"type":"array","description":"工作流消息","items":{"$ref":"#/components/schemas/SysMessageVo"}}}},"SysMessageVo":{"type":"object","description":"消息记录视图对象 sys_message","properties":{"messageId":{"type":"integer","format":"int64","description":"消息ID"},"category":{"type":"string","description":"消息分组"},"type":{"type":"string","description":"消息类型"},"source":{"type":"string","description":"消息来源"},"title":{"type":"string","description":"标题"},"message":{"type":"string","description":"摘要消息"},"content":{"type":"string","description":"详细内容"},"data":{"description":"扩展数据"},"path":{"type":"string","description":"前端跳转路径"},"createTime":{"type":"string","format":"date-time","description":"创建时间"}}},"PageResultSysOperLogVo":{"type":"object","description":"表格分页数据对象","properties":{"total":{"type":"integer","format":"int64","description":"总记录数"},"rows":{"type":"array","description":"列表数据","items":{"$ref":"#/components/schemas/SysOperLogVo"}}}},"RPageResultSysOperLogVo":{"type":"object","description":"响应信息主体","properties":{"code":{"type":"integer","format":"int32","description":"响应状态码"},"msg":{"type":"string","description":"响应提示信息"},"data":{"$ref":"#/components/schemas/PageResultSysOperLogVo","description":"响应业务数据"}}},"SysOperLogVo":{"type":"object","description":"操作日志记录视图对象 sys_oper_log","properties":{"operId":{"type":"integer","format":"int64","description":"日志主键"},"title":{"type":"string","description":"模块标题"},"businessType":{"type":"integer","format":"int32","description":"业务类型(0其它 1新增 2修改 3删除)"},"businessTypes":{"type":"array","description":"业务类型数组","items":{"type":"integer","format":"int32"}},"method":{"type":"string","description":"方法名称"},"requestMethod":{"type":"string","description":"请求方式"},"operatorType":{"type":"integer","format":"int32","description":"操作类别(0其它 1后台用户 2手机端用户)"},"operName":{"type":"string","description":"操作人员"},"userId":{"type":"integer","format":"int64","description":"操作用户ID"},"deptId":{"type":"integer","format":"int64","description":"操作部门ID"},"deptName":{"type":"string","description":"部门名称"},"clientKey":{"type":"string","description":"客户端"},"deviceType":{"type":"string","description":"设备类型"},"browser":{"type":"string","description":"浏览器类型"},"os":{"type":"string","description":"操作系统"},"operUrl":{"type":"string","description":"请求URL"},"operIp":{"type":"string","description":"主机地址"},"operLocation":{"type":"string","description":"操作地点"},"operParam":{"type":"string","description":"请求参数"},"jsonResult":{"type":"string","description":"返回参数"},"status":{"type":"integer","format":"int32","description":"操作状态(0正常 1异常)"},"errorMsg":{"type":"string","description":"错误消息"},"operTime":{"type":"string","format":"date-time","description":"操作时间"},"costTime":{"type":"integer","format":"int64","description":"消耗时间"}}},"PageResultSysUserOnline":{"type":"object","description":"表格分页数据对象","properties":{"total":{"type":"integer","format":"int64","description":"总记录数"},"rows":{"type":"array","description":"列表数据","items":{"$ref":"#/components/schemas/SysUserOnline"}}}},"RPageResultSysUserOnline":{"type":"object","description":"响应信息主体","properties":{"code":{"type":"integer","format":"int32","description":"响应状态码"},"msg":{"type":"string","description":"响应提示信息"},"data":{"$ref":"#/components/schemas/PageResultSysUserOnline","description":"响应业务数据"}}},"SysUserOnline":{"type":"object","description":"当前在线会话","properties":{"tokenId":{"type":"string","description":"会话编号"},"deptName":{"type":"string","description":"部门名称"},"userName":{"type":"string","description":"用户账号"},"clientKey":{"type":"string","description":"客户端"},"deviceType":{"type":"string","description":"设备类型"},"ipaddr":{"type":"string","description":"登录IP地址"},"loginLocation":{"type":"string","description":"登录地址"},"browser":{"type":"string","description":"浏览器类型"},"os":{"type":"string","description":"操作系统"},"loginTime":{"type":"integer","format":"int64","description":"登录时间"}}},"PageResultSysLoginInfoVo":{"type":"object","description":"表格分页数据对象","properties":{"total":{"type":"integer","format":"int64","description":"总记录数"},"rows":{"type":"array","description":"列表数据","items":{"$ref":"#/components/schemas/SysLoginInfoVo"}}}},"RPageResultSysLoginInfoVo":{"type":"object","description":"响应信息主体","properties":{"code":{"type":"integer","format":"int32","description":"响应状态码"},"msg":{"type":"string","description":"响应提示信息"},"data":{"$ref":"#/components/schemas/PageResultSysLoginInfoVo","description":"响应业务数据"}}},"SysLoginInfoVo":{"type":"object","description":"系统访问记录视图对象 sys_login_info","properties":{"infoId":{"type":"integer","format":"int64","description":"访问ID"},"userName":{"type":"string","description":"用户账号"},"clientKey":{"type":"string","description":"客户端"},"deviceType":{"type":"string","description":"设备类型"},"status":{"type":"string","description":"登录状态(0成功 1失败)"},"ipaddr":{"type":"string","description":"登录IP地址"},"loginLocation":{"type":"string","description":"登录地点"},"browser":{"type":"string","description":"浏览器类型"},"os":{"type":"string","description":"操作系统"},"msg":{"type":"string","description":"提示消息"},"loginTime":{"type":"string","format":"date-time","description":"访问时间"}}},"CacheListInfoVo":{"type":"object","description":"缓存监控列表信息","properties":{"info":{"type":"object","additionalProperties":{"type":"string"},"description":"信息"},"dbSize":{"type":"integer","format":"int64","description":"数据库"},"commandStats":{"type":"array","description":"命令统计","items":{"type":"object","additionalProperties":{"type":"string"}}}}},"RCacheListInfoVo":{"type":"object","description":"响应信息主体","properties":{"code":{"type":"integer","format":"int32","description":"响应状态码"},"msg":{"type":"string","description":"响应提示信息"},"data":{"$ref":"#/components/schemas/CacheListInfoVo","description":"响应业务数据"}}},"CzDeviceVo":{"type":"object","description":"后台设备管理视图对象。","properties":{"deviceId":{"type":"integer","format":"int64","description":"设备主键"},"deviceNo":{"type":"string","description":"设备编号"},"name":{"type":"string","description":"设备名称"},"productId":{"type":"integer","format":"int64","description":"产品模板"},"productName":{"type":"string","description":"产品名称"},"category":{"type":"string","description":"品类"},"model":{"type":"string","description":"型号"},"mac":{"type":"string","description":"MAC"},"sn":{"type":"string","description":"序列号"},"homeId":{"type":"integer","format":"int64","description":"家庭"},"homeName":{"type":"string","description":"家庭名称"},"locationId":{"type":"integer","format":"int64","description":"房间"},"locationName":{"type":"string","description":"房间名称"},"status":{"type":"string","description":"状态(0未激活 1在线 2离线)"},"statusName":{"type":"string","description":"状态名称"},"bindUserId":{"type":"integer","format":"int64","description":"绑定用户"},"bindUserName":{"type":"string","description":"绑定用户昵称"},"bindUserPhone":{"type":"string","description":"绑定用户手机号"},"bindTime":{"type":"string","format":"date-time","description":"绑定时间"},"purifier":{"type":"boolean","description":"是否有净化器运行态"},"runMode":{"type":"string","description":"运行模式(0自动 1车载 2桌面)"},"fanLevel":{"type":"string","description":"风速档位(0标准 1强力 2低档)"},"airLevel":{"type":"string","description":"空气质量(0优 1良 2差 3污染)"},"tvoc":{"type":"number","description":"TVOC 原始值"},"powerMode":{"type":"string","description":"供电模式(0USB 1电池)"},"charging":{"type":"string","description":"充电(0否 1充电中)"},"deviceBattery":{"type":"integer","format":"int32","description":"设备电量"},"filterTotalDays":{"type":"integer","format":"int32","description":"滤芯总寿命天数"},"filterRemainDays":{"type":"integer","format":"int32","description":"滤芯剩余天数"},"filterLife":{"type":"integer","format":"int32","description":"滤芯寿命"},"filterReplaceTime":{"type":"string","format":"date-time","description":"最近一次确认更换滤芯时间"},"parkingShutdown":{"type":"string","description":"停车关机模式(0关 1开)"},"bluetoothConnected":{"type":"string","description":"蓝牙连接(0未连接 1已连接)"},"lastReportTime":{"type":"string","format":"date-time","description":"最近上报时间"},"lastOnlineTime":{"type":"string","format":"date-time","description":"最后在线时间"},"remark":{"type":"string","description":"备注"},"createTime":{"type":"string","format":"date-time","description":"创建时间"},"updateTime":{"type":"string","format":"date-time","description":"更新时间"}}},"RCzDeviceVo":{"type":"object","description":"响应信息主体","properties":{"code":{"type":"integer","format":"int32","description":"响应状态码"},"msg":{"type":"string","description":"响应提示信息"},"data":{"$ref":"#/components/schemas/CzDeviceVo","description":"响应业务数据"}}},"CzProductOptionVo":{"type":"object","description":"新增设备时可选的产品模板。","properties":{"productId":{"type":"integer","format":"int64","description":"产品主键"},"model":{"type":"string","description":"型号"},"name":{"type":"string","description":"产品名称"},"category":{"type":"string","description":"品类"},"connectTypes":{"type":"string","description":"可添加方式"},"filterEnabled":{"type":"boolean","description":"是否需要填写滤芯天数"},"filterTotalDays":{"type":"integer","format":"int32","description":"滤芯默认天数"},"capabilities":{"type":"array","description":"能力编码","items":{"type":"string"}}}},"RListCzProductOptionVo":{"type":"object","description":"响应信息主体","properties":{"code":{"type":"integer","format":"int32","description":"响应状态码"},"msg":{"type":"string","description":"响应提示信息"},"data":{"type":"array","description":"响应业务数据","items":{"$ref":"#/components/schemas/CzProductOptionVo"}}}},"CzLocationOptionVo":{"type":"object","description":"新增设备时可选的房间。","properties":{"locationId":{"type":"integer","format":"int64","description":"房间主键"},"locationName":{"type":"string","description":"房间名称"},"homeId":{"type":"integer","format":"int64","description":"家庭主键"},"homeName":{"type":"string","description":"家庭名称"}}},"RListCzLocationOptionVo":{"type":"object","description":"响应信息主体","properties":{"code":{"type":"integer","format":"int32","description":"响应状态码"},"msg":{"type":"string","description":"响应提示信息"},"data":{"type":"array","description":"响应业务数据","items":{"$ref":"#/components/schemas/CzLocationOptionVo"}}}},"PageResultCzDeviceVo":{"type":"object","description":"表格分页数据对象","properties":{"total":{"type":"integer","format":"int64","description":"总记录数"},"rows":{"type":"array","description":"列表数据","items":{"$ref":"#/components/schemas/CzDeviceVo"}}}},"RPageResultCzDeviceVo":{"type":"object","description":"响应信息主体","properties":{"code":{"type":"integer","format":"int32","description":"响应状态码"},"msg":{"type":"string","description":"响应提示信息"},"data":{"$ref":"#/components/schemas/PageResultCzDeviceVo","description":"响应业务数据"}}},"RTestTreeVo":{"type":"object","description":"响应信息主体","properties":{"code":{"type":"integer","format":"int32","description":"响应状态码"},"msg":{"type":"string","description":"响应提示信息"},"data":{"$ref":"#/components/schemas/TestTreeVo","description":"响应业务数据"}}},"TestTreeVo":{"type":"object","description":"测试树表视图对象 test_tree","properties":{"id":{"type":"integer","format":"int64","description":"主键"},"parentId":{"type":"integer","format":"int64","description":"父id"},"deptId":{"type":"integer","format":"int64","description":"部门id"},"userId":{"type":"integer","format":"int64","description":"用户id"},"treeName":{"type":"string","description":"树节点名"},"createTime":{"type":"string","format":"date-time","description":"创建时间"}}},"RListTestTreeVo":{"type":"object","description":"响应信息主体","properties":{"code":{"type":"integer","format":"int32","description":"响应状态码"},"msg":{"type":"string","description":"响应提示信息"},"data":{"type":"array","description":"响应业务数据","items":{"$ref":"#/components/schemas/TestTreeVo"}}}},"RObject":{"type":"object","description":"响应信息主体","properties":{"code":{"type":"integer","format":"int32","description":"响应状态码"},"msg":{"type":"string","description":"响应提示信息"},"data":{"description":"响应业务数据"}}},"RTestSensitive":{"type":"object","description":"响应信息主体","properties":{"code":{"type":"integer","format":"int32","description":"响应状态码"},"msg":{"type":"string","description":"响应提示信息"},"data":{"$ref":"#/components/schemas/TestSensitive","description":"响应业务数据"}}},"TestSensitive":{"type":"object","description":"脱敏测试对象。","properties":{"idCard":{"type":"string","description":"身份证"},"phone":{"type":"string","description":"电话"},"address":{"type":"string","description":"地址"},"email":{"type":"string","description":"邮箱"},"bankCard":{"type":"string","description":"银行卡"}}},"RMapStringListString":{"type":"object","description":"响应信息主体","properties":{"code":{"type":"integer","format":"int32","description":"响应状态码"},"msg":{"type":"string","description":"响应提示信息"},"data":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"description":"响应业务数据"}}},"BlobResourceContents":{"allOf":[{"$ref":"#/components/schemas/ResourceContents"},{"type":"object","properties":{"uri":{"type":"string"},"mimeType":{"type":"string"},"blob":{"type":"string"},"_meta":{"type":"object","additionalProperties":{}}}}]},"McpResourceReadResult":{"type":"object","description":"MCP 资源读取结果。","properties":{"serverName":{"type":"string"},"contents":{"type":"array","items":{"oneOf":[{"$ref":"#/components/schemas/BlobResourceContents"},{"$ref":"#/components/schemas/TextResourceContents"}]}}}},"RMapStringMcpResourceReadResult":{"type":"object","description":"响应信息主体","properties":{"code":{"type":"integer","format":"int32","description":"响应状态码"},"msg":{"type":"string","description":"响应提示信息"},"data":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/McpResourceReadResult"},"description":"响应业务数据"}}},"ResourceContents":{},"TextResourceContents":{"allOf":[{"$ref":"#/components/schemas/ResourceContents"},{"type":"object","properties":{"uri":{"type":"string"},"mimeType":{"type":"string"},"text":{"type":"string"},"_meta":{"type":"object","additionalProperties":{}}}}]},"Annotations":{"type":"object","properties":{"audience":{"type":"array","items":{"type":"string","enum":["user","assistant"]}},"priority":{"type":"number","format":"double"},"lastModified":{"type":"string"}}},"AudioContent":{"allOf":[{"$ref":"#/components/schemas/Content"},{"type":"object","properties":{"annotations":{"$ref":"#/components/schemas/Annotations"},"data":{"type":"string"},"mimeType":{"type":"string"},"_meta":{"type":"object","additionalProperties":{}}}}]},"Content":{"discriminator":{"propertyName":"type"},"properties":{"type":{"type":"string"}},"required":["type"]},"EmbeddedResource":{"allOf":[{"$ref":"#/components/schemas/Content"},{"type":"object","properties":{"annotations":{"$ref":"#/components/schemas/Annotations"},"resource":{"oneOf":[{"$ref":"#/components/schemas/BlobResourceContents"},{"$ref":"#/components/schemas/TextResourceContents"}]},"_meta":{"type":"object","additionalProperties":{}}}}]},"ImageContent":{"allOf":[{"$ref":"#/components/schemas/Content"},{"type":"object","properties":{"annotations":{"$ref":"#/components/schemas/Annotations"},"data":{"type":"string"},"mimeType":{"type":"string"},"_meta":{"type":"object","additionalProperties":{}}}}]},"McpDemoHandleResult":{"type":"object","description":"MCP 数据处理结果。","properties":{"sourceType":{"type":"string","description":"数据来源类型"},"handled":{"type":"boolean","description":"是否已处理"},"data":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/McpToolCallResult"},"description":"MCP 原始返回数据"}}},"McpToolCallResult":{"type":"object","description":"MCP 工具调用结果。","properties":{"serverName":{"type":"string"},"error":{"type":"boolean"},"content":{"type":"array","items":{"oneOf":[{"$ref":"#/components/schemas/AudioContent"},{"$ref":"#/components/schemas/EmbeddedResource"},{"$ref":"#/components/schemas/ImageContent"},{"$ref":"#/components/schemas/ResourceLink"},{"$ref":"#/components/schemas/TextContent"}]}},"structuredContent":{}}},"RMcpDemoHandleResult":{"type":"object","description":"响应信息主体","properties":{"code":{"type":"integer","format":"int32","description":"响应状态码"},"msg":{"type":"string","description":"响应提示信息"},"data":{"$ref":"#/components/schemas/McpDemoHandleResult","description":"响应业务数据"}}},"ResourceLink":{"allOf":[{"$ref":"#/components/schemas/Content"},{"type":"object","properties":{"name":{"type":"string"},"title":{"type":"string"},"uri":{"type":"string"},"description":{"type":"string"},"mimeType":{"type":"string"},"size":{"type":"integer","format":"int64"},"annotations":{"$ref":"#/components/schemas/Annotations"},"_meta":{"type":"object","additionalProperties":{}}}}]},"TextContent":{"allOf":[{"$ref":"#/components/schemas/Content"},{"type":"object","properties":{"annotations":{"$ref":"#/components/schemas/Annotations"},"text":{"type":"string"},"_meta":{"type":"object","additionalProperties":{}}}}]},"TestI18nBo":{"type":"object","description":"国际化 Bean 校验测试对象。","properties":{"name":{"type":"string","description":"名称。","minLength":1},"age":{"type":"integer","format":"int32","description":"年龄。"}},"required":["age","name"]},"RTestI18nBo":{"type":"object","description":"响应信息主体","properties":{"code":{"type":"integer","format":"int32","description":"响应状态码"},"msg":{"type":"string","description":"响应提示信息"},"data":{"$ref":"#/components/schemas/TestI18nBo","description":"响应业务数据"}}},"RMapStringTestDemoEncrypt":{"type":"object","description":"响应信息主体","properties":{"code":{"type":"integer","format":"int32","description":"响应状态码"},"msg":{"type":"string","description":"响应提示信息"},"data":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/TestDemoEncrypt"},"description":"响应业务数据"}}},"TestDemoEncrypt":{"type":"object","description":"测试加密字段实体。","properties":{"createBy":{"type":"integer","format":"int64","description":"创建者"},"createTime":{"type":"string","format":"date-time","description":"创建时间"},"updateBy":{"type":"integer","format":"int64","description":"更新者"},"updateTime":{"type":"string","format":"date-time","description":"更新时间"},"id":{"type":"integer","format":"int64","description":"主键"},"deptId":{"type":"integer","format":"int64","description":"部门id"},"userId":{"type":"integer","format":"int64","description":"用户id"},"orderNum":{"type":"integer","format":"int32","description":"排序号"},"testKey":{"type":"string","description":"key键"},"value":{"type":"string","description":"值"},"version":{"type":"integer","format":"int64","description":"版本"},"delFlag":{"type":"integer","format":"int64","description":"删除标志"}}},"RTestDemoVo":{"type":"object","description":"响应信息主体","properties":{"code":{"type":"integer","format":"int32","description":"响应状态码"},"msg":{"type":"string","description":"响应提示信息"},"data":{"$ref":"#/components/schemas/TestDemoVo","description":"响应业务数据"}}},"TestDemoVo":{"type":"object","description":"测试单表视图对象 test_demo","properties":{"id":{"type":"integer","format":"int64","description":"主键"},"deptId":{"type":"integer","format":"int64","description":"部门id"},"userId":{"type":"integer","format":"int64","description":"用户id"},"orderNum":{"type":"integer","format":"int32","description":"排序号"},"testKey":{"type":"string","description":"key键"},"value":{"type":"string","description":"值"},"createTime":{"type":"string","format":"date-time","description":"创建时间"},"createBy":{"type":"integer","format":"int64","description":"创建人"},"createByName":{"type":"string","description":"创建人账号"},"updateTime":{"type":"string","format":"date-time","description":"更新时间"},"updateBy":{"type":"integer","format":"int64","description":"更新人"},"updateByName":{"type":"string","description":"更新人账号"},"version":{"type":"integer","format":"int64","description":"版本"}}},"PageResultTestDemoVo":{"type":"object","description":"表格分页数据对象","properties":{"total":{"type":"integer","format":"int64","description":"总记录数"},"rows":{"type":"array","description":"列表数据","items":{"$ref":"#/components/schemas/TestDemoVo"}}}},"RPageResultTestDemoVo":{"type":"object","description":"响应信息主体","properties":{"code":{"type":"integer","format":"int32","description":"响应状态码"},"msg":{"type":"string","description":"响应提示信息"},"data":{"$ref":"#/components/schemas/PageResultTestDemoVo","description":"响应业务数据"}}},"CaptchaVo":{"type":"object","description":"图片验证码响应对象。","properties":{"captchaEnabled":{"type":"boolean","description":"是否启用验证码"},"uuid":{"type":"string","description":"验证码标识"},"img":{"type":"string","description":"Base64 图片数据"}}},"RCaptchaVo":{"type":"object","description":"响应信息主体","properties":{"code":{"type":"integer","format":"int32","description":"响应状态码"},"msg":{"type":"string","description":"响应提示信息"},"data":{"$ref":"#/components/schemas/CaptchaVo","description":"响应业务数据"}}},"AppUserProfileVo":{"type":"object","description":"App 用户资料返回对象","properties":{"userId":{"type":"integer","format":"int64","description":"用户ID"},"userName":{"type":"string","description":"用户账号(默认使用手机号)"},"userNo":{"type":"string","description":"用户展示编号"},"phonenumber":{"type":"string","description":"手机号码"},"nickName":{"type":"string","description":"用户昵称"},"avatarOssId":{"type":"integer","format":"int64","description":"头像 OSS ID"},"avatarUrl":{"type":"string","description":"头像 URL"},"gender":{"type":"string","description":"性别(0未知 1男 2女)"},"birthday":{"type":"string","description":"生日"},"province":{"type":"string","description":"省份"},"city":{"type":"string","description":"城市"},"district":{"type":"string","description":"区县"},"remark":{"type":"string","description":"备注"},"createTime":{"type":"string","format":"date-time","description":"创建时间"}}},"RAppUserProfileVo":{"type":"object","description":"响应信息主体","properties":{"code":{"type":"integer","format":"int32","description":"响应状态码"},"msg":{"type":"string","description":"响应提示信息"},"data":{"$ref":"#/components/schemas/AppUserProfileVo","description":"响应业务数据"}}},"AppLocationVo":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"homeId":{"type":"integer","format":"int64"},"locationName":{"type":"string"},"sortOrder":{"type":"integer","format":"int32"},"icon":{"type":"string"},"status":{"type":"string"},"createTime":{"type":"string","format":"date-time"}}},"RListAppLocationVo":{"type":"object","description":"响应信息主体","properties":{"code":{"type":"integer","format":"int32","description":"响应状态码"},"msg":{"type":"string","description":"响应提示信息"},"data":{"type":"array","description":"响应业务数据","items":{"$ref":"#/components/schemas/AppLocationVo"}}}},"AppHomeVo":{"type":"object","description":"App 家庭视图对象\n

\n 用于前端展示家庭列表信息,包含家庭基本信息及位置数量统计。","properties":{"id":{"type":"integer","format":"int64","description":"家庭ID"},"homeName":{"type":"string","description":"家庭名称(如:我的家、父母家)"},"isDefault":{"type":"string","description":"是否默认家庭(1是 0否)"},"locationCount":{"type":"integer","format":"int32","description":"位置数量(该家庭下的房间/位置总数)"},"createTime":{"type":"string","format":"date-time","description":"创建时间"}}},"RListAppHomeVo":{"type":"object","description":"响应信息主体","properties":{"code":{"type":"integer","format":"int32","description":"响应状态码"},"msg":{"type":"string","description":"响应提示信息"},"data":{"type":"array","description":"响应业务数据","items":{"$ref":"#/components/schemas/AppHomeVo"}}}},"OpenApiAgentToolVO":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"name":{"type":"string"},"description":{"type":"string"}}},"OpenApiAgentVO":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"name":{"type":"string"},"description":{"type":"string"},"avatar":{"type":"string"},"greeting":{"type":"string"},"presetQuestions":{"type":"array","items":{"type":"string"}},"capabilities":{"type":"array","items":{"type":"string"}},"mcpEnabled":{"type":"boolean"},"mcpServers":{"type":"array","items":{"$ref":"#/components/schemas/OpenApiAgentToolVO"}},"skillEnabled":{"type":"boolean"},"skills":{"type":"array","items":{"$ref":"#/components/schemas/OpenApiAgentToolVO"}},"webSearchEnabled":{"type":"boolean"},"viewCount":{"type":"integer","format":"int32"},"isFeatured":{"type":"boolean"},"status":{"type":"integer","format":"int32"},"createDt":{"type":"string","format":"date-time"},"updateDt":{"type":"string","format":"date-time"},"subscribed":{"type":"boolean"}}},"ResultListOpenApiAgentVO":{"type":"object","properties":{"status":{"type":"integer","format":"int32"},"message":{"type":"string"},"data":{"type":"array","items":{"$ref":"#/components/schemas/OpenApiAgentVO"}}}},"PageResultListOpenApiConversationVO":{"type":"object","properties":{"status":{"type":"integer","format":"int32"},"message":{"type":"string"},"data":{"type":"array","items":{"$ref":"#/components/schemas/OpenApiConversationVO"}},"page":{"type":"integer","format":"int64"},"size":{"type":"integer","format":"int64"},"total":{"type":"integer","format":"int64"}}},"OpenApiMessageVO":{"type":"object","properties":{"role":{"type":"string"},"content":{"type":"string"},"thinking":{"type":"string"},"status":{"type":"integer","format":"int32"},"createDt":{"type":"string"}}},"ResultListOpenApiMessageVO":{"type":"object","properties":{"status":{"type":"integer","format":"int32"},"message":{"type":"string"},"data":{"type":"array","items":{"$ref":"#/components/schemas/OpenApiMessageVO"}}}},"ResultMapStringObject":{"type":"object","properties":{"status":{"type":"integer","format":"int32"},"message":{"type":"string"},"data":{"type":"object","additionalProperties":{}}}},"OpenApiAgentQueryRequest":{"type":"object","properties":{"page":{"type":"integer","format":"int32","minimum":1},"size":{"type":"integer","format":"int32","minimum":1},"appId":{"type":"string"}}},"PageResultListOpenApiAgentVO":{"type":"object","properties":{"status":{"type":"integer","format":"int32"},"message":{"type":"string"},"data":{"type":"array","items":{"$ref":"#/components/schemas/OpenApiAgentVO"}},"page":{"type":"integer","format":"int64"},"size":{"type":"integer","format":"int64"},"total":{"type":"integer","format":"int64"}}},"OpenApiAgentIdentityRequest":{"type":"object","properties":{"agentId":{"type":"integer","format":"int64"}},"required":["agentId"]},"ResultOpenApiAgentVO":{"type":"object","properties":{"status":{"type":"integer","format":"int32"},"message":{"type":"string"},"data":{"$ref":"#/components/schemas/OpenApiAgentVO"}}}}}} \ No newline at end of file