Compare commits

..

1533 Commits

Author SHA1 Message Date
lcx 1942344373 feat: 三端合一 2026-05-06 13:53:14 +08:00
lcx 96ad58fe28 feat: 三端合一 2026-04-29 15:39:28 +08:00
lcx abb4963bac fix: issue#395 2025-10-21 18:29:31 +08:00
Dot.L a4642ec6e6 Merge pull request #389 from APIParkLab/feature/liujian-1.9
Fix the issue of ineffective authentication for JWT, Oauth2, AK/SK
2025-08-29 18:28:15 +08:00
Liujian 6ee1996e6f Fix the issue of ineffective authentication for JWT, Oauth2, AK/SK 2025-08-29 18:27:13 +08:00
Dot.L 9ba746ba7f add azure openai
Feature/liujian 1.9
2025-08-26 17:28:36 +08:00
Liujian fdac169bda update azure open config 2025-08-26 17:26:45 +08:00
Liujian 3026e24bab add azure openai 2025-08-21 19:01:02 +08:00
Dot.L e010f00a19 Merge pull request #383 from APIParkLab/feature/liujian-1.9
fix bug: fail to get ai logs
2025-08-15 16:27:51 +08:00
Liujian 1a9b916bab fix bug: fail to get ai logs 2025-08-15 16:25:49 +08:00
JackLiu 3e4f4e1cff Update README.md 2025-08-15 09:33:53 +08:00
ningyv 3217ad2bba Merge pull request #380 from APIParkLab/feature/1.9-OAuth
fix: Fix department selection issue
2025-08-12 10:44:59 +08:00
lcx 1485b31226 fix: Fix department selection issue 2025-08-12 10:43:17 +08:00
ningyv 8968e1f961 Merge pull request #379 from APIParkLab/feature/1.9-OAuth
fix: Fix department selection issue.
2025-08-12 10:23:42 +08:00
lcx 4b8fa43c36 fix: Fix department selection issue. 2025-08-12 10:23:14 +08:00
ningyv c21d783c52 Merge pull request #378 from APIParkLab/feature/1.9-OAuth
fix: issue with adding user permissions
2025-08-11 19:00:31 +08:00
lcx e928cd84d7 fix: issue with adding user permissions 2025-08-11 18:59:39 +08:00
FreyLoong 412cb75bf0 Update readme-zh-cn.md 2025-08-08 18:42:46 +08:00
FreyLoong a13b2a8afe Update README.md 2025-08-08 18:40:14 +08:00
Dot.L c0472c8539 Merge pull request #375 from APIParkLab/feature/liujian-1.9
Feature/liujian 1.9
2025-08-08 12:06:44 +08:00
Liujian 5f40d5092c update qiniu rput param 2025-08-08 12:05:46 +08:00
Liujian b949939816 Fix: The issue where the upstream forwarding header is not effective 2025-08-08 12:04:40 +08:00
Dot.L 55f09f7542 Merge pull request #374 from APIParkLab/feature/liujian-1.9
fix: fail to delete model
2025-08-08 11:31:25 +08:00
Liujian ef1ccb81a9 fix: fail to delete model 2025-08-08 11:29:26 +08:00
Dot.L 7aad2174aa Merge pull request #368 from APIParkLab/feature/liujian-1.9
update service publish config
2025-07-23 20:06:32 +08:00
Liujian 8fba1911ad update service publish config 2025-07-23 20:05:41 +08:00
ningyv 2a951c2854 Merge pull request #366 from APIParkLab/feature/1.9-OAuth
feat: Add Feishu OAuth login & consumer-grade MCP
2025-07-23 15:40:50 +08:00
lcx e91a9e7726 feat: Add Feishu OAuth login & consumer-grade MCP 2025-07-23 15:40:13 +08:00
ningyv e0d97186b1 Merge pull request #363 from APIParkLab/feature/1.9-OAuth
feat: Add Feishu OAuth login & consumer-grade MCP
2025-07-22 10:45:53 +08:00
lcx dff6e722c0 feat: Add Feishu OAuth login & consumer-grade MCP 2025-07-22 10:45:16 +08:00
ningyv b8c92961c1 Merge pull request #362 from APIParkLab/feature/1.9-OAuth
feat: Add Feishu OAuth login & consumer-grade MCP
2025-07-22 10:30:18 +08:00
lcx 025bd4c6cc feat: Add Feishu OAuth login & consumer-grade MCP 2025-07-22 10:28:59 +08:00
ningyv 3d2ec67fc1 Merge pull request #361 from APIParkLab/feature/1.9-OAuth
feat: Add Feishu OAuth login & consumer-grade MCP
2025-07-22 09:55:00 +08:00
lcx b2a8c8d901 feat: Add Feishu OAuth login & consumer-grade MCP 2025-07-22 09:53:41 +08:00
ningyv 90226ac6af Merge pull request #360 from APIParkLab/feature/1.9-OAuth
feat: Add Feishu OAuth login & consumer-grade MCP
2025-07-22 09:41:09 +08:00
lcx 0e1efc9656 feat: Add Feishu OAuth login & consumer-grade MCP 2025-07-22 09:40:30 +08:00
Dot.L 061027aa36 Merge pull request #359 from APIParkLab/feature/liujian-1.9
update ap-account version
2025-07-21 18:51:07 +08:00
Liujian 96e2e6ad51 update ap-account version 2025-07-21 18:49:36 +08:00
ningyv a083f994f4 Merge pull request #358 from APIParkLab/feature/1.9-OAuth
feat: Add Feishu OAuth login & consumer-grade MCP
2025-07-21 18:31:44 +08:00
lcx 5898337481 feat: Add Feishu OAuth login & consumer-grade MCP 2025-07-21 18:30:50 +08:00
ningyv 0f1496137d Merge pull request #357 from APIParkLab/feature/1.9-OAuth
feat: Add Feishu OAuth login & consumer-grade MCP
2025-07-21 18:14:47 +08:00
lcx aff2d1ce01 feat: Add Feishu OAuth login & consumer-grade MCP 2025-07-21 18:14:12 +08:00
Dot.L 78d10318ad Merge pull request #356 from APIParkLab/feature/liujian-1.9
Feature/liujian 1.9
2025-07-21 16:44:55 +08:00
Liujian 0525c51a8f Consumer MCP completed 2025-07-21 16:44:11 +08:00
Liujian 47950d9a2b Merge remote-tracking branch 'origin/main-github-pro' into feature/liujian-1.9 2025-07-21 15:55:52 +08:00
ningyv 4caa19586e Merge pull request #355 from APIParkLab/feature/1.9-OAuth
feat: Add Feishu OAuth login & consumer-grade MCP
2025-07-21 15:01:52 +08:00
lcx a574ed8dae feat: Add Feishu OAuth login & consumer-grade MCP 2025-07-21 14:59:27 +08:00
Liujian 8eba1ea898 Merge remote-tracking branch 'origin/main-github-pro' into feature/liujian-1.9 2025-07-21 10:43:28 +08:00
ningyv 17bd63b27e Merge pull request #353 from APIParkLab/feature/1.9-OAuth
feat: Add Feishu OAuth login & consumer-grade MCP
2025-07-17 18:05:28 +08:00
Dot.L 88d890107e Merge pull request #352 from APIParkLab/feature/liujian-1.9
Feature/liujian 1.9
2025-07-17 18:05:05 +08:00
lcx 6b90770a92 feat: Add Feishu OAuth login & consumer-grade MCP 2025-07-17 18:04:41 +08:00
Liujian c1c5eaa84e finish feishu login bug 2025-07-17 18:04:20 +08:00
Liujian 388cd7660d Merge remote-tracking branch 'github-pro/main' into feature/liujian-1.9 2025-07-17 17:33:30 +08:00
ningyv 3df303abc3 Merge pull request #351 from APIParkLab/feature/1.9-OAuth
feat: Add Feishu OAuth login & consumer-grade MCP
2025-07-17 17:30:17 +08:00
lcx 217e31787c feat: Add Feishu OAuth login & consumer-grade MCP 2025-07-17 17:29:43 +08:00
ningyv 96d92e2323 Merge pull request #350 from APIParkLab/feature/1.9-OAuth
Feature/1.9 o auth
2025-07-17 16:35:23 +08:00
lcx 6ced12af75 feat: Add Feishu OAuth login & consumer-grade MCP 2025-07-17 16:34:51 +08:00
lcx 9e7feff093 feat: Add Feishu OAuth login & consumer-grade MCP 2025-07-17 16:32:29 +08:00
Liujian ba6342d207 Merge remote-tracking branch 'github-pro/main' into feature/liujian-1.9 2025-07-17 15:19:26 +08:00
ningyv 5b38b2f78a Merge pull request #349 from APIParkLab/feature/1.9-OAuth
feat: Add Feishu OAuth login & consumer-grade MCP
2025-07-17 15:18:30 +08:00
lcx 707d98ba34 feat: Add Feishu OAuth login & consumer-grade MCP 2025-07-17 15:17:17 +08:00
Liujian d5f2578a3f Merge remote-tracking branch 'origin/main-github-pro' into feature/liujian-1.9 2025-07-17 14:46:09 +08:00
ningyv a8d39b021c Merge pull request #348 from APIParkLab/feature/1.9-OAuth
feat: Add Feishu OAuth login & consumer-grade MCP
2025-07-17 14:33:07 +08:00
lcx 78dc382e82 feat: Add Feishu OAuth login & consumer-grade MCP 2025-07-17 14:32:06 +08:00
Liujian 4b58534cb6 Merge remote-tracking branch 'origin/main-github-pro' into feature/liujian-1.9 2025-07-17 14:30:15 +08:00
ningyv 63f5a552c8 Merge pull request #347 from APIParkLab/feature/1.9-OAuth
feat: Add Feishu OAuth login & consumer-grade MCP
2025-07-17 14:16:56 +08:00
lcx a03e310418 feat: Add Feishu OAuth login & consumer-grade MCP 2025-07-17 14:16:08 +08:00
ningyv 28ad364352 Merge pull request #346 from APIParkLab/feature/1.9-OAuth
feat: Add Feishu OAuth login & consumer-grade MCP
2025-07-17 13:47:02 +08:00
lcx e485ae2511 feat: Add Feishu OAuth login & consumer-grade MCP 2025-07-17 13:45:25 +08:00
ningyv 853c04337d Merge pull request #345 from APIParkLab/feature/1.9-OAuth
feat: Add Feishu OAuth login & consumer-grade MCP
2025-07-17 13:40:13 +08:00
lcx 526dddb579 feat: Add Feishu OAuth login & consumer-grade MCP 2025-07-17 13:39:44 +08:00
Dot.L 902c64903c Merge pull request #344 from APIParkLab/feature/liujian-1.9
Feature/liujian 1.9
2025-07-17 12:14:04 +08:00
Liujian 2f314e0e64 support feishu login 2025-07-17 12:12:27 +08:00
Liujian 9879506c30 Merge remote-tracking branch 'github-pro/main' into feature/liujian-1.9 2025-07-17 11:52:47 +08:00
ningyv 6dabd5d31b Merge pull request #343 from APIParkLab/feature/1.9-OAuth
Feature/1.9 o auth
2025-07-17 11:52:14 +08:00
lcx 16e5a37087 feat: Add Feishu OAuth login & consumer-grade MCP 2025-07-17 11:51:36 +08:00
lcx 12c5ac85d3 feat: Add Feishu OAuth login & consumer-grade MCP 2025-07-17 11:50:13 +08:00
Liujian 997e9292a2 Merge branch 'feature/liujian-1.8' into feature/liujian-1.9 2025-07-17 11:42:03 +08:00
Liujian 76ae5287eb 新增飞书登录驱动 2025-07-17 11:40:08 +08:00
ningyv c9c88116a8 Merge pull request #342 from APIParkLab/feature/1.9-OAuth
feat: Add Feishu OAuth login & consumer-grade MCP
2025-07-17 11:30:03 +08:00
lcx 393271d72a feat: Add Feishu OAuth login & consumer-grade MCP 2025-07-17 11:29:20 +08:00
Dot.L 1bddef2bda Merge pull request #334 from APIParkLab/feature/liujian-1.8
Optimizing the parameter tiling of MCP Tool to facilitate AI understanding
2025-07-09 18:49:29 +08:00
Liujian 58d02bcf08 Optimizing the parameter tiling of MCP Tool to facilitate AI understanding 2025-07-09 18:48:35 +08:00
Dot.L b1b9f49b06 Merge pull request #329 from APIParkLab/feature/liujian-1.8
Fix the issue of failed compilation of ARM images
2025-06-26 20:05:03 +08:00
Liujian 8f2857cf55 Fix the issue of failed compilation of ARM images 2025-06-26 20:03:48 +08:00
Dot.L f149fede71 Merge pull request #328 from APIParkLab/feature/liujian-1.8
Fix the issue of failed compilation of ARM images
2025-06-26 18:27:45 +08:00
Liujian 972f072346 Fix the issue of failed compilation of ARM images 2025-06-26 18:24:06 +08:00
Dot.L 3cab3c1828 Merge pull request #326 from APIParkLab/feature/liujian-1.8
Fix a series of bug
2025-06-26 17:07:59 +08:00
Liujian 88bf7d0244 1. Fix the issue of ineffective interception of routing settings
2. The problem of long loading times for optimizing service lists and API portals
2025-06-26 17:06:03 +08:00
Dot.L a7523c7b54 Merge pull request #322 from APIParkLab/feature/liujian-1.8
fix: The problem of slow retrieval of service lists and API portal se…
2025-06-19 17:02:14 +08:00
Liujian 590f328e07 fix: The problem of slow retrieval of service lists and API portal service lists 2025-06-19 17:00:51 +08:00
Dot.L ca2682fb22 Merge pull request #311 from APIParkLab/feature/liujian-1.8
update docker run.sh
2025-05-26 19:33:51 +08:00
Liujian 2bd1d4a423 update docker run.sh 2025-05-26 19:32:10 +08:00
Dot.L b2baa711c2 Merge pull request #309 from APIParkLab/feature/1.8-cx
chore: Add annotations
2025-05-23 18:31:33 +08:00
ningyv 3d51f96dda chore: Add annotations 2025-05-23 18:29:58 +08:00
Dot.L b55675e5a5 Merge pull request #308 from APIParkLab/feature/liujian-1.8
Feature/liujian 1.8
2025-05-23 18:24:32 +08:00
Liujian 9a33992a0b Merge remote-tracking branch 'github-pro/main' into feature/liujian-1.8
# Conflicts:
#	.gitlab-ci.yml
2025-05-23 18:23:52 +08:00
Liujian 07ae37eb5f update gitlab-ci.yml 2025-05-23 18:21:50 +08:00
Liujian c36726f25f update gitlab-ci.yml 2025-05-23 17:45:57 +08:00
Liujian e2e9abeb4c update gitlab-ci.yml 2025-05-23 16:19:28 +08:00
Liujian 0fcc2215f7 Merge remote-tracking branch 'origin/main' into main-github-pro 2025-05-23 15:42:51 +08:00
刘健 ce559c4643 Update .gitlab-ci.yml file 2025-05-23 15:30:54 +08:00
刘健 8d4b13f633 Update .gitlab-ci.yml file 2025-05-23 15:30:13 +08:00
Liujian 19a3378fa3 Merge branch 'main' into main-github-pro 2025-05-23 15:16:29 +08:00
Liujian cef1250199 Merge tag 'v1.8.0-beta' 2025-05-23 15:16:02 +08:00
刘健 3c85658931 Update .gitlab-ci.yml file 2025-05-23 15:05:39 +08:00
刘健 ba7022bc2d Update .gitlab-ci.yml file 2025-05-23 15:02:52 +08:00
刘健 fb24abc111 Update .gitlab-ci.yml file 2025-05-23 15:02:23 +08:00
刘健 0e3fb84e7c Update .gitlab-ci.yml file 2025-05-23 15:01:47 +08:00
刘健 5d6d949ca4 Update .gitlab-ci.yml file 2025-05-23 15:00:44 +08:00
刘健 3578182343 Update .gitlab-ci.yml file 2025-05-23 14:32:11 +08:00
刘健 28bad2d963 Update .gitlab-ci.yml file 2025-05-23 14:31:31 +08:00
刘健 384bd239fa Update .gitlab-ci.yml file 2025-05-23 14:21:58 +08:00
刘健 98710ad296 Update .gitlab-ci.yml file 2025-05-23 14:12:49 +08:00
刘健 4806e12907 Update .gitlab-ci.yml file 2025-05-23 14:12:09 +08:00
刘健 9097760a0f Update .gitlab-ci.yml file 2025-05-23 14:10:08 +08:00
刘健 a5639bff60 Update .gitlab-ci.yml file 2025-05-23 14:01:10 +08:00
刘健 1d66ed84f3 Update .gitlab-ci.yml file 2025-05-23 13:55:45 +08:00
刘健 249ac3ea1c Update .gitlab-ci.yml file 2025-05-23 13:55:22 +08:00
刘健 b02db8020d Update .gitlab-ci.yml file 2025-05-23 13:55:03 +08:00
刘健 4105540686 Update .gitlab-ci.yml file 2025-05-23 13:54:37 +08:00
刘健 36d10c5cfd Update .gitlab-ci.yml file 2025-05-23 13:54:17 +08:00
Dot.L f77bd76a14 Merge pull request #301 from APIParkLab/feature/liujian-1.8
Feature/liujian 1.8
2025-05-06 18:53:11 +08:00
ningyv cef548ce7d Merge pull request #299 from APIParkLab/feature/1.8-cx
Feature/1.8 cx
2025-05-06 18:52:12 +08:00
lichunxian 5efd19ef7c Merge branch 'feature/1.8-cx' into 'main'
feat: feature/1.8-Improve system observability

See merge request apipark/APIPark!377
2025-05-06 17:58:28 +08:00
ningyv a0f4ef4e19 feat: feature/1.8-Improve system observability 2025-05-06 17:57:56 +08:00
lichunxian 28cd4fd91c Merge branch 'feature/1.8-cx' into 'main'
feature/1.8-Improve system observability

See merge request apipark/APIPark!376
2025-05-06 16:06:16 +08:00
ningyv 304239edd0 feature/1.8-Improve system observability 2025-05-06 16:06:00 +08:00
刘健 82f4089f42 Merge branch 'feature/liujian-1.8' into 'main'
update build.sh

See merge request apipark/APIPark!375
2025-05-06 16:02:17 +08:00
Liujian 00ef4d2cfc update build.sh 2025-05-06 16:01:51 +08:00
刘健 cd33448446 Merge branch 'feature/liujian-1.8' into 'main'
fix bug

See merge request apipark/APIPark!373
2025-05-06 15:31:23 +08:00
Liujian ddd70b0ff5 fix: log detail bug 2025-05-06 15:31:07 +08:00
lichunxian e5b50a7073 Merge branch 'feature/1.8-cx' into 'main'
feature/1.8-Improve system observability

See merge request apipark/APIPark!374
2025-05-06 14:41:00 +08:00
ningyv 83da8df554 feature/1.8-Improve system observability 2025-05-06 14:40:32 +08:00
Liujian 5a1baadf3b fix bug 2025-05-06 14:38:54 +08:00
刘健 10bd352bf4 Merge branch 'feature/liujian-1.8' into 'main'
update data

See merge request apipark/APIPark!372
2025-05-06 14:12:01 +08:00
Liujian cbea45e6e0 update data 2025-05-06 14:11:36 +08:00
刘健 e5c6e4fa82 Merge branch 'feature/liujian-1.8' into 'main'
Feature/liujian 1.8

See merge request apipark/APIPark!371
2025-05-06 12:04:47 +08:00
Liujian f05457fd2c update data 2025-05-06 12:04:11 +08:00
Liujian bc6875fe9f Merge remote-tracking branch 'origin/feature/1.8-cx' into feature/liujian-1.8 2025-05-06 11:18:15 +08:00
lichunxian 1572e03dd1 Merge branch 'feature/1.8-cx' into 'main'
feature/1.8-Improve system observability

See merge request apipark/APIPark!370
2025-05-06 11:09:42 +08:00
ningyv 131a1fae59 feature/1.8-Improve system observability 2025-05-06 11:09:18 +08:00
刘健 61025763ed Merge branch 'feature/liujian-1.8' into 'main'
Feature/liujian 1.8

See merge request apipark/APIPark!369
2025-05-06 10:49:33 +08:00
Liujian ef1c48e395 Modify the monitoring table to return field types 2025-05-06 10:43:09 +08:00
lichunxian 00905e4167 Merge branch 'feature/1.8-cx' into 'main'
feature/1.8-Improve system observability

See merge request apipark/APIPark!368
2025-04-30 19:09:44 +08:00
ningyv b91830b089 feature/1.8-Improve system observability 2025-04-30 19:09:14 +08:00
Liujian 9572c4157e Merge remote-tracking branch 'github-pro/feature/1.8-cx' into feature/liujian-1.8 2025-04-30 18:55:09 +08:00
Liujian fef49eb32c tmp commit 2025-04-30 18:55:01 +08:00
lichunxian a5a895e42d Merge branch 'feature/1.8-cx' into 'main'
feature/1.8-Improve system observability

See merge request apipark/APIPark!367
2025-04-30 17:18:00 +08:00
ningyv c0dc5bcdb5 feature/1.8-Improve system observability 2025-04-30 17:17:00 +08:00
lichunxian ed1d19532b Merge branch 'feature/1.8-cx' into 'main'
feature/1.8-Improve system observability

See merge request apipark/APIPark!366
2025-04-30 16:33:49 +08:00
ningyv d50fbcdf4f feature/1.8-Improve system observability 2025-04-30 16:33:22 +08:00
Liujian 9c1b19a1c7 Merge remote-tracking branch 'github-pro/feature/1.8-cx' into feature/liujian-1.8 2025-04-30 15:57:59 +08:00
刘健 bf990517dc Merge branch 'feature/liujian-1.8' into 'main'
update service logs

See merge request apipark/APIPark!365
2025-04-30 15:53:11 +08:00
Liujian 0cf7f952e2 update service logs 2025-04-30 15:52:48 +08:00
lichunxian 83873c8c92 Merge branch 'feature/1.8-cx' into 'main'
feature/1.8-Improve system observability

See merge request apipark/APIPark!364
2025-04-30 15:49:50 +08:00
ningyv 18a3516e04 feature/1.8-Improve system observability 2025-04-30 15:48:52 +08:00
刘健 a61e6ba67f Merge branch 'feature/liujian-1.8' into 'main'
Optimize chart data

See merge request apipark/APIPark!363
2025-04-30 15:06:24 +08:00
Liujian 94d881cc18 Optimize chart data 2025-04-30 15:05:47 +08:00
刘健 e081580786 Merge branch 'feature/liujian-1.8' into 'main'
fix:ai token monitor bug

See merge request apipark/APIPark!362
2025-04-30 14:00:22 +08:00
Liujian 8927211ea2 fix:ai token monitor bug 2025-04-30 13:59:50 +08:00
lichunxian 813905ca40 Merge branch 'feature/1.8-cx' into 'main'
feature/1.8-Improve system observability

See merge request apipark/APIPark!361
2025-04-30 10:25:41 +08:00
ningyv 12a8317dd8 feature/1.8-Improve system observability 2025-04-30 10:25:06 +08:00
lichunxian 66be761d18 Merge branch 'feature/1.8-cx' into 'main'
feature/1.8-Improve system observability

See merge request apipark/APIPark!360
2025-04-30 09:46:26 +08:00
ningyv f1e5b29908 feature/1.8-Improve system observability 2025-04-30 09:46:01 +08:00
lichunxian 6b6fa5bd40 Merge branch 'feature/1.8-cx' into 'main'
feature/1.8-Improve system observability

See merge request apipark/APIPark!359
2025-04-30 09:30:12 +08:00
ningyv 119e03fda8 feature/1.8-Improve system observability 2025-04-30 09:29:46 +08:00
lichunxian 943ef4f9b0 Merge branch 'feature/1.8-cx' into 'main'
feature/1.8-Improve system observability

See merge request apipark/APIPark!358
2025-04-30 09:20:32 +08:00
ningyv e98908a63a feature/1.8-Improve system observability 2025-04-30 09:20:04 +08:00
lichunxian 78d9a1c23c Merge branch 'feature/1.8-cx' into 'main'
feature/1.8-Improve system observability

See merge request apipark/APIPark!357
2025-04-30 09:09:26 +08:00
ningyv 32bc7354ba feature/1.8-Improve system observability 2025-04-30 09:08:52 +08:00
刘健 342d022c43 Merge branch 'feature/liujian-1.8' into 'main'
Feature/liujian 1.8

See merge request apipark/APIPark!356
2025-04-30 00:24:33 +08:00
Liujian 1d36f4b821 fix monitor bug 2025-04-30 00:24:02 +08:00
Liujian 4e459168df Merge remote-tracking branch 'origin/feature/1.8-cx' into feature/liujian-1.8 2025-04-29 22:56:28 +08:00
lichunxian a8c14ee839 Merge branch 'feature/1.8-cx' into 'main'
feature/1.8-Improve system observability

See merge request apipark/APIPark!355
2025-04-29 19:40:30 +08:00
ningyv 5384807b85 feature/1.8-Improve system observability 2025-04-29 19:40:12 +08:00
lichunxian 23c40efe0d Merge branch 'feature/1.8-cx' into 'main'
feature/1.8-Improve system observability

See merge request apipark/APIPark!354
2025-04-29 19:33:43 +08:00
ningyv 71e1ff778e feature/1.8-Improve system observability 2025-04-29 19:33:24 +08:00
lichunxian a76941ea17 Merge branch 'feature/1.8-cx' into 'main'
feature/1.8-Improve system observability

See merge request apipark/APIPark!353
2025-04-29 19:28:59 +08:00
ningyv 5e05b2117e feature/1.8-Improve system observability 2025-04-29 19:28:35 +08:00
刘健 0c392d2092 Merge branch 'feature/liujian-1.8' into 'main'
Log information returns the newly added Body

See merge request apipark/APIPark!352
2025-04-29 19:28:04 +08:00
Liujian e5f0423a90 Log information returns the newly added Body 2025-04-29 19:23:35 +08:00
刘健 46caf49f18 Merge branch 'feature/liujian-1.8' into 'main'
fix bug

See merge request apipark/APIPark!351
2025-04-29 19:16:54 +08:00
Liujian 7dc8d65235 fix bug 2025-04-29 19:16:21 +08:00
刘健 74c87ec308 Merge branch 'feature/liujian-1.8' into 'main'
finish service log module

See merge request apipark/APIPark!350
2025-04-29 19:08:43 +08:00
Liujian 604a8312ef finish service log module 2025-04-29 19:08:02 +08:00
lichunxian 8b318caa0b Merge branch 'feature/1.8-cx' into 'main'
feature/1.8-Improve system observability

See merge request apipark/APIPark!349
2025-04-29 19:06:52 +08:00
ningyv 159bcc7aa6 feature/1.8-Improve system observability 2025-04-29 19:06:28 +08:00
lichunxian 6bad1c3c7c Merge branch 'feature/1.8-cx' into 'main'
feature/1.8-Improve system observability

See merge request apipark/APIPark!348
2025-04-29 18:24:17 +08:00
ningyv c45cf6aaff feature/1.8-Improve system observability 2025-04-29 18:23:51 +08:00
刘健 1333d4ed02 Merge branch 'feature/liujian-1.8' into 'main'
finish log list

See merge request apipark/APIPark!347
2025-04-29 17:49:59 +08:00
Liujian a3bebde83c finish log list 2025-04-29 17:44:53 +08:00
lichunxian d3e91b04a2 Merge branch 'feature/1.8-cx' into 'main'
feature/1.8-Improve system observability

See merge request apipark/APIPark!346
2025-04-29 17:33:16 +08:00
ningyv 48f46ec4c3 feature/1.8-Improve system observability 2025-04-29 17:32:49 +08:00
lichunxian f4400c0130 Merge branch 'feature/1.8-cx' into 'main'
feature/1.8-Improve system observability

See merge request apipark/APIPark!345
2025-04-29 17:27:37 +08:00
ningyv d596f1af5a feature/1.8-Improve system observability 2025-04-29 17:27:06 +08:00
lichunxian cc5d677d67 Merge branch 'feature/1.8-cx' into 'main'
feature/1.8-Improve system observability

See merge request apipark/APIPark!344
2025-04-29 11:52:46 +08:00
ningyv 2f37be430b feature/1.8-Improve system observability 2025-04-29 11:52:24 +08:00
刘健 e4c3cbc99b Merge branch 'feature/liujian-1.8' into 'main'
update service overview

See merge request apipark/APIPark!343
2025-04-29 10:20:17 +08:00
Liujian 771c86229d update service overview 2025-04-29 10:18:02 +08:00
刘健 5c1db00d7e Merge branch 'feature/liujian-1.8' into 'main'
Feature/liujian 1.8

See merge request apipark/APIPark!342
2025-04-29 00:35:41 +08:00
Liujian cff536710e finish: monitor overview 2025-04-29 00:34:58 +08:00
lichunxian cd91f4bdb9 Merge branch 'feature/1.8-cx' into 'main'
feature/1.8-Improve system observability

See merge request apipark/APIPark!341
2025-04-27 17:44:31 +08:00
ningyv acfe5b988b feature/1.8-Improve system observability 2025-04-27 17:43:51 +08:00
lichunxian 79860bc665 Merge branch 'feature/1.8-cx' into 'main'
feature/1.8-Improve system observability

See merge request apipark/APIPark!340
2025-04-27 14:55:12 +08:00
ningyv 7d255f4be7 feature/1.8-Improve system observability 2025-04-27 14:54:51 +08:00
lichunxian 4623ba6fba Merge branch 'feature/1.8-cx' into 'main'
feature/1.8-Improve system observability

See merge request apipark/APIPark!339
2025-04-27 14:50:59 +08:00
ningyv be658a1b31 feature/1.8-Improve system observability 2025-04-27 14:50:33 +08:00
lichunxian 1f4acdc99e Merge branch 'feature/1.8-cx' into 'main'
feature/1.8-Improve system observability

See merge request apipark/APIPark!338
2025-04-27 14:31:19 +08:00
ningyv 2fe31055c8 feature/1.8-Improve system observability 2025-04-27 14:30:24 +08:00
lichunxian 0307282dbd Merge branch 'feature/1.8-cx' into 'main'
feature/1.8-Improve system observability

See merge request apipark/APIPark!337
2025-04-27 14:15:29 +08:00
ningyv 85130ad882 feature/1.8-Improve system observability 2025-04-27 14:14:52 +08:00
lichunxian 7dbc2a1a78 Merge branch 'feature/1.8-cx' into 'main'
feature/1.8-Improve system observability

See merge request apipark/APIPark!336
2025-04-27 10:53:53 +08:00
ningyv 2e18e1f8a4 feature/1.8-Improve system observability 2025-04-27 10:53:27 +08:00
lichunxian 12d42c4247 Merge branch 'feature/1.8-cx' into 'main'
Feature/1.8 cx

See merge request apipark/APIPark!335
2025-04-27 10:45:08 +08:00
ningyv 3215912d0c feature/1.8-Improve system observability 2025-04-27 10:43:06 +08:00
ningyv 65ad7657ef feature/1.8-Improve system observability 2025-04-25 18:42:59 +08:00
Dot.L a22759136e Merge pull request #298 from APIParkLab/feature/1.7-liujian
update docker build script
2025-04-24 16:03:14 +08:00
Liujian b8ebbac2b8 update docker build script 2025-04-24 16:02:32 +08:00
Dot.L 9c4590db07 Merge pull request #297 from APIParkLab/feature/1.7-liujian
Fix: Apikey getting md5 when calling MCP Server at service level
2025-04-22 18:08:51 +08:00
Liujian 7ba8a57793 Fix: Apikey getting md5 when calling MCP Server at service level 2025-04-22 18:08:24 +08:00
Dot.L 2dc16f4bb8 Merge pull request #295 from APIParkLab/feature/1.7-liujian
Fix: Issue where API portal's service list fails to retrieve when Influxdb is not initialized
2025-04-17 16:20:42 +08:00
Liujian b68496a82a Fix: Issue where API portal's service list fails to retrieve when Influxdb is not initialized 2025-04-17 16:20:17 +08:00
ningyv 6892fa34d8 Merge pull request #294 from APIParkLab/feature/1.7-cxx
feature/1.7-MCP-analytics-table-optimize
2025-04-16 15:47:45 +08:00
lichunxian 4eb3368875 Merge branch 'feature/1.7-cxx' into 'main'
feature/1.7-MCP-analytics-table-optimize

See merge request apipark/APIPark!334
2025-04-16 15:47:13 +08:00
ningyv cdbfd3400c feature/1.7-MCP-analytics-table-optimize 2025-04-16 15:46:48 +08:00
Liujian c7c3e8033b Merge remote-tracking branch 'github-pro/main' into feature/1.7-liujian 2025-04-16 15:38:08 +08:00
Dot.L cc524810e8 Merge pull request #293 from APIParkLab/feature/1.7-liujian
Fix: Dragging to modify the order of service categories will fail whe…
2025-04-16 15:22:26 +08:00
刘健 4478e6823a Merge branch 'feature/1.7-liujian' into 'main'
Fix: Dragging to modify the order of service categories will fail when there...

See merge request apipark/APIPark!333
2025-04-16 15:21:28 +08:00
Liujian b6f593c8d0 Fix: Dragging to modify the order of service categories will fail when there are subcategories in the service category. 2025-04-16 15:20:57 +08:00
ningyv ca54fc581c Merge pull request #292 from APIParkLab/feature/1.7-cxx
Feature/1.7
2025-04-16 14:42:33 +08:00
lichunxian ab5bffea87 Merge branch 'feature/1.7-cxx' into 'main'
Feature/1.7 cxx

See merge request apipark/APIPark!332
2025-04-16 14:36:37 +08:00
ningyv 596f6f5668 feature/1.7-MCP 2025-04-16 14:36:17 +08:00
Dot.L e7372cb7f2 Merge pull request #291 from APIParkLab/feature/1.7-liujian
Feature/1.7 liujian
2025-04-16 14:35:50 +08:00
刘健 8a48828a76 Merge branch 'feature/1.7-liujian' into 'main'
Fix: Issue of API duplicate publishing when publishing services

See merge request apipark/APIPark!331
2025-04-16 14:34:39 +08:00
Liujian feac0428ef Fix: Issue of API duplicate publishing when publishing services 2025-04-16 14:34:18 +08:00
ningyv 7f83f9e37f feature/1.7-MCP 2025-04-16 14:26:17 +08:00
刘健 c2b70e23e4 Merge branch 'feature/1.7-liujian' into 'main'
update

See merge request apipark/APIPark!330
2025-04-16 14:12:52 +08:00
Liujian c8e5b7541d update 2025-04-16 14:12:20 +08:00
lichunxian eb46a4365c Merge branch 'feature/1.7-cxx' into 'main'
feature/1.7-MCP

See merge request apipark/APIPark!329
2025-04-16 14:07:50 +08:00
ningyv 638b87950d feature/1.7-MCP 2025-04-16 14:07:10 +08:00
lichunxian 058a8f7974 Merge branch 'feature/1.7-cxx' into 'main'
feature/1.7-MCP

See merge request apipark/APIPark!328
2025-04-16 13:48:41 +08:00
ningyv 62b6476420 feature/1.7-MCP 2025-04-16 13:47:54 +08:00
lichunxian b5585f548a Merge branch 'feature/1.7-cxx' into 'main'
feature/1.7-MCP

See merge request apipark/APIPark!327
2025-04-16 13:45:08 +08:00
ningyv 16b16bae32 feature/1.7-MCP 2025-04-16 13:44:40 +08:00
lichunxian e4a3e1a1a2 Merge branch 'feature/1.7-cxx' into 'main'
feature/1.7-MCP

See merge request apipark/APIPark!326
2025-04-16 11:54:13 +08:00
ningyv b872e695b0 feature/1.7-MCP 2025-04-16 11:52:32 +08:00
刘健 674a15ef32 Merge branch 'feature/1.7-liujian' into 'main'
update api portal interface

See merge request apipark/APIPark!325
2025-04-16 11:11:14 +08:00
Liujian 8365f77c67 update api portal interface 2025-04-16 11:10:45 +08:00
lichunxian d82d665280 Merge branch 'feature/1.7-cxx' into 'main'
feature/1.7-MCP

See merge request apipark/APIPark!324
2025-04-16 10:19:11 +08:00
ningyv 54c88e189e feature/1.7-MCP 2025-04-16 10:18:51 +08:00
lichunxian 752db42b3b Merge branch 'feature/1.7-cxx' into 'main'
feature/1.7-MCP

See merge request apipark/APIPark!323
2025-04-16 09:53:24 +08:00
ningyv 41dae0daf4 feature/1.7-MCP 2025-04-16 09:53:03 +08:00
lichunxian 10aaf85a26 Merge branch 'feature/1.7-cxx' into 'main'
feature/1.7-MCP

See merge request apipark/APIPark!322
2025-04-16 09:47:57 +08:00
ningyv 596be2cf7f feature/1.7-MCP 2025-04-16 09:47:33 +08:00
lichunxian 5c97ef9416 Merge branch 'feature/1.7-cxx' into 'main'
feature/1.7-MCP

See merge request apipark/APIPark!321
2025-04-16 09:18:16 +08:00
ningyv ddba01e3bd feature/1.7-MCP 2025-04-16 09:17:35 +08:00
刘健 5fc84299f1 Merge branch 'feature/1.7-liujian' into 'main'
update path

See merge request apipark/APIPark!320
2025-04-16 00:01:29 +08:00
Liujian 96f675ae9c update path 2025-04-16 00:00:58 +08:00
刘健 2eeeebf7c2 Merge branch 'feature/1.7-liujian' into 'main'
MCP Server supports multiple languages.

See merge request apipark/APIPark!319
2025-04-15 22:42:51 +08:00
Liujian ae3c189089 MCP Server supports multiple languages. 2025-04-15 22:42:22 +08:00
lichunxian 155ad537a9 Merge branch 'feature/1.7-cxx' into 'main'
feature/1.7-MCP

See merge request apipark/APIPark!318
2025-04-15 18:58:14 +08:00
ningyv 0ff5bcd8fa feature/1.7-MCP 2025-04-15 18:56:50 +08:00
ningyv 37d421ad8a Merge pull request #290 from APIParkLab/feature/1.7-cxx
Feature/1.7 cxx
2025-04-14 17:46:20 +08:00
lichunxian 4a1430c62a Merge branch 'feature/1.7-cxx' into 'main'
feature/1.7-MCP-Breadcrumb

See merge request apipark/APIPark!317
2025-04-14 17:45:58 +08:00
ningyv 52a4ed8193 feature/1.7-MCP-Breadcrumb 2025-04-14 17:45:25 +08:00
lichunxian 8cc0d038bd Merge branch 'feature/1.7-cxx' into 'main'
feature/1.7-MCP-Breadcrumb

See merge request apipark/APIPark!316
2025-04-14 17:33:06 +08:00
ningyv 211f11b363 feature/1.7-MCP-Breadcrumb 2025-04-14 17:32:18 +08:00
ningyv 6c637bf78c Merge pull request #289 from APIParkLab/feature/1.7-cxx
feature/1.7-MCP
2025-04-14 14:10:37 +08:00
lichunxian 165759398e Merge branch 'feature/1.7-cxx' into 'main'
feature/1.7-MCP

See merge request apipark/APIPark!315
2025-04-14 14:09:47 +08:00
ningyv f846836d5d feature/1.7-MCP 2025-04-14 14:09:09 +08:00
ningyv 43690156e3 Merge pull request #288 from APIParkLab/feature/1.7-cxx
Feature/1.7 cxx
2025-04-14 13:38:08 +08:00
lichunxian 1091d4e086 Merge branch 'feature/1.7-cxx' into 'main'
Feature/1.7 cxx

See merge request apipark/APIPark!314
2025-04-14 13:37:01 +08:00
ningyv 71cc0b8916 feature/1.7-MCP 2025-04-14 13:36:08 +08:00
刘健 0523f13dfb Merge branch 'feature/1.7-liujian' into 'main'
Feature/1.7 liujian

See merge request apipark/APIPark!313
2025-04-14 11:57:40 +08:00
Liujian b703ddaae8 Fix: Issue with invalid apikey parameter in service MCP path 2025-04-14 11:57:06 +08:00
ningyv 5ae9d5d3f1 feature/1.7-MCP 2025-04-14 11:38:13 +08:00
ningyv 061ea05935 Merge pull request #287 from APIParkLab/feature/1.7-cxx
Feature/1.7 cxx
2025-04-14 11:34:19 +08:00
lichunxian 256c04f5bb Merge branch 'feature/1.7-cxx' into 'main'
feature/1.7-MCP

See merge request apipark/APIPark!312
2025-04-14 11:33:52 +08:00
ningyv ca6fdccdb2 feature/1.7-MCP 2025-04-14 11:33:10 +08:00
Liujian fb31ecc012 Merge remote-tracking branch 'github-pro/main' into feature/1.7-liujian 2025-04-14 11:30:13 +08:00
lichunxian a9dcc78db6 Merge branch 'feature/1.7-cxx' into 'main'
feature/1.7-MCP

See merge request apipark/APIPark!311
2025-04-14 11:12:24 +08:00
ningyv c2d7d96f9f feature/1.7-MCP 2025-04-14 11:11:48 +08:00
刘健 1f6c173e18 Merge branch 'feature/1.7-liujian' into 'main'
Fix: API forwarding header setting failure issue

See merge request apipark/APIPark!310
2025-04-14 10:20:17 +08:00
Liujian 741bdd682c Fix: API forwarding header setting failure issue 2025-04-14 10:19:49 +08:00
ningyv 70a8da7682 Merge pull request #286 from APIParkLab/feature/1.7-cxx
feature/1.7-MCP
2025-04-14 09:54:55 +08:00
lichunxian b593e8b57b Merge branch 'feature/1.7-cxx' into 'main'
feature/1.7-MCP

See merge request apipark/APIPark!309
2025-04-14 09:54:30 +08:00
ningyv 7ccfb69e8d feature/1.7-MCP 2025-04-14 09:53:45 +08:00
ningyv 18615bad33 Merge pull request #285 from APIParkLab/feature/1.7-cxx
feature/1.7-MCP
2025-04-11 18:42:29 +08:00
lichunxian 1ec00de03c Merge branch 'feature/1.7-cxx' into 'main'
feature/1.7-MCP

See merge request apipark/APIPark!308
2025-04-11 18:41:00 +08:00
ningyv d9af85ce86 feature/1.7-MCP 2025-04-11 18:39:27 +08:00
ningyv 8f82436421 Merge pull request #284 from APIParkLab/feature/1.7-cxx
Feature/1.7 cxx
2025-04-11 18:31:52 +08:00
lichunxian bad7fbadda Merge branch 'feature/1.7-cxx' into 'main'
Feature/1.7 cxx

See merge request apipark/APIPark!307
2025-04-11 18:31:30 +08:00
ningyv f42a80e56c feature/1.7-MCP 2025-04-11 18:30:36 +08:00
ningyv c2651d2e5f feature/1.7-MCP 2025-04-11 18:06:38 +08:00
lichunxian 7a506fc15e Merge branch 'feature/1.7-cxx' into 'main'
feature/1.7-MCP

See merge request apipark/APIPark!306
2025-04-11 17:28:46 +08:00
ningyv 44bb977d1a feature/1.7-MCP 2025-04-11 17:28:09 +08:00
lichunxian dec2c3a23e Merge branch 'feature/1.7-cxx' into 'main'
feature/1.7-MCP

See merge request apipark/APIPark!305
2025-04-11 16:49:06 +08:00
ningyv 71bbd9ac8f feature/1.7-MCP 2025-04-11 16:48:34 +08:00
刘健 2093541c37 Merge branch 'feature/1.7-liujian' into 'main'
Add the openapiaddress field to the API portal to obtain detailed service information

See merge request apipark/APIPark!304
2025-04-11 14:43:07 +08:00
Liujian 4beb497032 Add the openapiaddress field to the API portal to obtain detailed service information 2025-04-11 14:42:26 +08:00
lichunxian 40c7ba4305 Merge branch 'feature/1.7-cxx' into 'main'
feature/1.7-MCP

See merge request apipark/APIPark!303
2025-04-11 14:18:13 +08:00
ningyv 56d4a9b69d feature/1.7-MCP 2025-04-11 14:17:50 +08:00
刘健 a95bca31e2 Merge branch 'feature/1.7-liujian' into 'main'
service detail add invoke_count

See merge request apipark/APIPark!302
2025-04-11 11:58:33 +08:00
Dot.L b6115faf7c Merge pull request #283 from APIParkLab/feature/1.7-liujian
Feature/1.7 liujian
2025-04-11 11:53:40 +08:00
Liujian 4fdb677103 service detail add invoke_count 2025-04-11 11:52:27 +08:00
刘健 a541e45a53 Merge branch 'feature/1.7-liujian' into 'main'
Feature/1.7 liujian

See merge request apipark/APIPark!301
2025-04-11 11:04:56 +08:00
Liujian 34cf8e2b26 update global mcp tool's description 2025-04-11 11:03:20 +08:00
ningyv 93f686af14 Merge pull request #282 from APIParkLab/feature/1.7-cxx
feature/1.7-MCP
2025-04-11 10:06:43 +08:00
lichunxian b20c66b311 Merge branch 'feature/1.7-cxx' into 'main'
feature/1.7-MCP

See merge request apipark/APIPark!300
2025-04-11 10:06:06 +08:00
ningyv 1332770df4 feature/1.7-MCP 2025-04-11 10:05:28 +08:00
Liujian 48ab6d7c7e Merge remote-tracking branch 'github-pro/main' into feature/1.7-liujian 2025-04-10 18:26:12 +08:00
lichunxian 729e1f105c Merge branch 'feature/1.7-cxx' into 'main'
feature/1.7-MCP

See merge request apipark/APIPark!299
2025-04-10 17:48:12 +08:00
ningyv 08cecd8a0e Merge pull request #281 from APIParkLab/feature/1.7-cxx
feature/1.7-MCP
2025-04-10 17:47:52 +08:00
ningyv 42678fce89 feature/1.7-MCP 2025-04-10 17:47:10 +08:00
lichunxian 6aa96a2ae9 Merge branch 'feature/1.7-cxx' into 'main'
feature/1.7-MCP

See merge request apipark/APIPark!298
2025-04-10 16:29:48 +08:00
ningyv 79f29254ca Merge pull request #280 from APIParkLab/feature/1.7-cxx
feature/1.7-MCP
2025-04-10 16:29:34 +08:00
ningyv 30f9d310e5 feature/1.7-MCP 2025-04-10 16:28:20 +08:00
Liujian cc34ca510c Merge remote-tracking branch 'github-pro/main' into feature/1.7-liujian 2025-04-10 16:23:40 +08:00
ningyv a285c54be2 Merge pull request #279 from APIParkLab/feature/1.7-cxx
Feature/1.7 cxx
2025-04-10 16:23:15 +08:00
lichunxian 5093c98656 Merge branch 'feature/1.7-cxx' into 'main'
feature/1.7-MCP

See merge request apipark/APIPark!297
2025-04-10 16:22:52 +08:00
ningyv b7119fe248 feature/1.7-MCP 2025-04-10 16:22:26 +08:00
lichunxian f4b70d4e71 Merge branch 'feature/1.7-cxx' into 'main'
feature/1.7-MCP

See merge request apipark/APIPark!296
2025-04-10 16:11:01 +08:00
ningyv 7b9f7d5acd feature/1.7-MCP 2025-04-10 16:10:24 +08:00
刘健 eeb36f43a4 Update .gitlab-ci.yml file 2025-04-10 15:52:44 +08:00
lichunxian 5a59a6d378 Merge branch 'feature/1.7-cxx' into 'main'
feature/1.7-MCP

See merge request apipark/APIPark!295
2025-04-10 15:27:13 +08:00
ningyv b0d642f5e3 feature/1.7-MCP 2025-04-10 15:26:28 +08:00
ningyv 4397784749 Merge pull request #278 from APIParkLab/feature/1.7-cxx
Feature/1.7 cx
2025-04-10 10:48:30 +08:00
lichunxian c0045d17e2 Merge branch 'feature/1.7-cxx' into 'main'
Feature/1.7 cxx

See merge request apipark/APIPark!294
2025-04-10 10:47:54 +08:00
ningyv 1eeba2d648 feature/1.7-MCP 2025-04-10 10:47:01 +08:00
ningyv 8cff5b3d40 feature/1.7-MCP 2025-04-10 10:46:54 +08:00
ningyv 2302f39d73 feature/1.7-MCP 2025-04-10 10:46:46 +08:00
Dot.L 114af0c6d2 Merge pull request #277 from APIParkLab/feature/1.7-liujian
Feature/1.7 liujian
2025-04-10 10:15:33 +08:00
刘健 42963d3ee5 Merge branch 'feature/1.7-liujian' into 'main'
Revert "Auxiliary commit to revert individual files from da05525cbbf2510a2cbc37d7eed6bfb8248e448b"

See merge request apipark/APIPark!291
2025-04-10 10:00:30 +08:00
Liujian 9069287cd8 update permission 2025-04-09 18:40:22 +08:00
Liujian ca9b127b8b add my apikeys 2025-04-09 18:32:33 +08:00
Liujian 2106836b2c Automatically update MCP server after service release 2025-04-09 15:15:25 +08:00
Liujian cf5cf5b574 fix: mcp response writer stack overflow 2025-04-09 11:40:46 +08:00
Liujian 34240a2609 Adjust the MCP service return result 2025-04-08 19:03:20 +08:00
Liujian eed1f41b29 update go-common version 2025-04-07 11:58:47 +08:00
Liujian 99c6aa19b3 Revert "Auxiliary commit to revert individual files from da05525cbbf2510a2cbc37d7eed6bfb8248e448b"
This reverts commit 202c65529646aa85697d1cce939224d48c67724f.
2025-04-07 11:52:59 +08:00
Liujian 9598254d18 Revert "Auxiliary commit to revert individual files from da05525cbbf2510a2cbc37d7eed6bfb8248e448b"
This reverts commit 1564022cae5da71efc060e576672d51b96051758.
2025-04-07 11:51:50 +08:00
Liujian da05525cbb finsh mcp api 2025-04-07 11:50:14 +08:00
Dot.L 0bc89cda8c Merge pull request #271 from APIParkLab/feature/1.6-liujian
update tongyi,bedrock define
2025-03-27 17:26:35 +08:00
Liujian 11a9b0200e update tongyi,bedrock define 2025-03-27 17:15:03 +08:00
Dot.L a38b244a68 Merge pull request #268 from APIParkLab/feature/1.6-liujian
update issue template: APINTO Dashboard -> ApiPark
2025-03-19 16:24:35 +08:00
Liujian 636fe2b27c update issue template: APINTO Dashboard -> ApiPark 2025-03-19 16:23:23 +08:00
ningyv 29603388a2 Merge pull request #267 from APIParkLab/feature/1.6-cx
fix: Display only file logs on the log page.
2025-03-19 16:19:03 +08:00
ningyv b9d3486f5b fix: Display only file logs on the log page. 2025-03-19 16:13:03 +08:00
Dot.L 09cc099dcd Merge pull request #266 from APIParkLab/feature/1.6-liujian
update tongyi define
2025-03-19 15:36:50 +08:00
Liujian 4f2c02704f update tongyi define 2025-03-19 15:32:36 +08:00
ningyv 93e0d51872 Merge pull request #264 from APIParkLab/feature/1.6-cx
fix: Header navigation click range issue
2025-03-19 14:18:19 +08:00
ningyv 776a410312 fix: Header navigation click range issue 2025-03-19 14:17:13 +08:00
Dot.L 2028f8167f Merge pull request #259 from APIParkLab/feature/1.6-liujian
Feature/1.6 liujian
2025-03-14 19:17:25 +08:00
Liujian 03269e703a update ai api schema 2025-03-14 19:16:31 +08:00
Liujian 9772b8123c Fix the issue of duplicate custom suppliers and built-in suppliers 2025-03-14 19:13:58 +08:00
ningyv 31dfe7e295 Merge pull request #258 from APIParkLab/feature/1.6-cx
feat: feature/1.6-Integrate custom model
2025-03-14 18:48:35 +08:00
ningyv 7c3985fea4 feat: feature/1.6-Integrate custom model 2025-03-14 18:47:04 +08:00
Liujian 9c18aa7f3b Add supplier differentiation, custom or built-in 2025-03-14 18:02:28 +08:00
Liujian bc85e59352 fix bug 2025-03-14 15:51:33 +08:00
Dot.L 68a294eb71 Merge pull request #257 from APIParkLab/feature/1.6-liujian
Feature/1.6 liujian
2025-03-13 22:17:32 +08:00
Liujian 33c61f6131 Fix the issue of local model data synchronization errors 2025-03-13 22:14:58 +08:00
Liujian 5dd055a43f fix bug 2025-03-13 17:51:27 +08:00
Liujian 937877fa7a fix bug 2025-03-13 14:47:36 +08:00
Liujian 8f994bbea7 Merge remote-tracking branch 'origin/main' into feature/1.6-liujian
# Conflicts:
#	.gitlab-ci.yml
2025-03-13 14:19:57 +08:00
Dot.L 6aca6600d7 Merge pull request #256 from APIParkLab/feature/1.6-liujian
Feature/1.6 liujian
2025-03-13 14:17:39 +08:00
Liujian e7aba90808 Merge remote-tracking branch 'github-pro/main' into feature/1.6-liujian 2025-03-13 14:16:37 +08:00
Liujian b2fa67c189 fix local model bug 2025-03-13 14:16:03 +08:00
ningyv 271bb32115 Merge pull request #255 from APIParkLab/feature/1.6-cx
feat: feature/1.6-Integrate custom model
2025-03-13 13:54:59 +08:00
lichunxian 7bb0771768 Merge branch 'feature/1.6-cx' into 'main'
feat: feature/1.6-Integrate custom model

See merge request apipark/APIPark!270
2025-03-13 13:54:52 +08:00
ningyv 76309c28d2 feat: feature/1.6-Integrate custom model 2025-03-13 13:46:32 +08:00
ningyv 1b55c5534f Merge pull request #254 from APIParkLab/feature/1.6-cx
Feature/1.6 cx
2025-03-13 12:01:10 +08:00
lichunxian 98de71c086 Merge branch 'feature/1.6-cx' into 'main'
feat: feature/1.6-Integrate custom model

See merge request apipark/APIPark!269
2025-03-13 12:00:17 +08:00
ningyv 9556fcdf5a feat: feature/1.6-Integrate custom model 2025-03-13 11:58:28 +08:00
Dot.L 68764a4403 Delete .gitlab-ci.yml 2025-03-13 09:18:50 +08:00
孙安智 0084ff260f Merge branch 'feature/sunanzhi/1.6' into 'main'
Feature/sunanzhi/1.6

See merge request apipark/APIPark!268
2025-03-12 20:25:24 +08:00
sunanzhi 0c729944b0 Merge pull request #252 from APIParkLab/feature/sunanzhi/1.6
refactor: adjust field requirements in Vertex AI config file
2025-03-12 20:25:13 +08:00
sunanzhi 22ccd3d59e refactor: adjust field requirements in Vertex AI config file 2025-03-12 20:23:41 +08:00
刘健 4c87b5a032 Merge branch 'feature/1.6-liujian' into 'main'
Feature/1.6 liujian

See merge request apipark/APIPark!267
2025-03-12 18:34:34 +08:00
Dot.L 7a5d4c6e9f Merge pull request #251 from APIParkLab/feature/1.6-liujian
Feature/1.6 liujian
2025-03-12 18:34:04 +08:00
Liujian 9c530ec470 Synchronize to gateway when custom model updates 2025-03-12 18:33:10 +08:00
Liujian 358459f37a Merge remote-tracking branch 'github-pro/main' into feature/1.6-liujian 2025-03-12 17:32:31 +08:00
孙安智 563b029801 Merge branch 'feature/sunanzhi/1.6' into 'main'
refactor: adjust vertex model ID

See merge request apipark/APIPark!266
2025-03-12 17:28:56 +08:00
sunanzhi 7005cb1e76 Merge pull request #250 from APIParkLab/feature/sunanzhi/1.6
refactor: adjust vertex model ID
2025-03-12 17:28:35 +08:00
sunanzhi c79216fd14 refactor: adjust vertex model ID 2025-03-12 17:28:01 +08:00
lichunxian 2fda023607 Merge branch 'feature/1.6-cx' into 'main'
feat: feature/1.6-Integrate custom model

See merge request apipark/APIPark!265
2025-03-12 15:43:30 +08:00
ningyv a52d8f1c1f feat: feature/1.6-Integrate custom model 2025-03-12 15:42:07 +08:00
Liujian a7fee633b0 Merge remote-tracking branch 'github-pro/main' into feature/1.6-liujian 2025-03-12 15:08:23 +08:00
Liujian 4d64be29ac Merge remote-tracking branch 'origin/feature/sunanzhi/1.6' into feature/1.6-liujian 2025-03-12 15:08:15 +08:00
sunanzhi 7dedf04e26 Merge pull request #249 from APIParkLab/feature/sunanzhi/1.6
Feature/sunanzhi/1.6
2025-03-12 14:55:04 +08:00
孙安智 9a9b4fc521 Merge branch 'feature/sunanzhi/1.6' into 'main'
Feature/sunanzhi/1.6

See merge request apipark/APIPark!264
2025-03-12 14:54:37 +08:00
sunanzhi debf9c820c fix: prevent duplicate model names 2025-03-12 14:53:06 +08:00
sunanzhi 51ea7e52b8 fix: resolve missing access config in model 2025-03-12 14:39:37 +08:00
sunanzhi aa1f34f157 Merge branch 'main' of https://github.com/APIParkLab/APIPark into feature/sunanzhi/1.6 2025-03-12 14:20:29 +08:00
sunanzhi 670b2d845f fix: resolve bug preventing re-adding vendor after deletion 2025-03-12 14:20:04 +08:00
ningyv d8da36d05d Merge pull request #248 from APIParkLab/feature/1.6-cx
feat: feature/1.6-Integrate custom model
2025-03-12 14:11:47 +08:00
lichunxian 0c2d47333f Merge branch 'feature/1.6-cx' into 'main'
feat: feature/1.6-Integrate custom model

See merge request apipark/APIPark!263
2025-03-12 14:09:50 +08:00
ningyv 210cd2f93f feat: feature/1.6-Integrate custom model 2025-03-12 14:08:55 +08:00
sunanzhi 2c997398b9 Merge pull request #247 from APIParkLab/feature/sunanzhi/1.6
fix: resolve inaccurate display of model content
2025-03-12 14:04:20 +08:00
孙安智 57a3936a6d Merge branch 'feature/sunanzhi/1.6' into 'main'
Feature/sunanzhi/1.6

See merge request apipark/APIPark!262
2025-03-12 14:04:08 +08:00
sunanzhi fa09e991f4 fix: resolve inaccurate display of model content 2025-03-12 14:03:30 +08:00
刘健 680f814e6b Merge branch 'feature/1.6-liujian' into 'main'
Feature/1.6 liujian

See merge request apipark/APIPark!261
2025-03-12 10:56:45 +08:00
Dot.L afec1e681c Merge pull request #246 from APIParkLab/feature/1.6-liujian
update spark define
2025-03-12 10:09:20 +08:00
Liujian cf07a106b5 update spark define 2025-03-12 10:03:00 +08:00
孙安智 a79b7ec812 Merge branch 'feature/sunanzhi/1.6' into 'main'
Feature/sunanzhi/1.6

See merge request apipark/APIPark!260
2025-03-11 20:36:38 +08:00
sunanzhi d8d1cb5665 Merge pull request #245 from APIParkLab/feature/sunanzhi/1.6
refactor: adjust regex validation rules for model name
2025-03-11 20:36:08 +08:00
sunanzhi ac4b29d13c refactor: adjust regex validation rules for model name 2025-03-11 20:35:16 +08:00
Dot.L 5ae7749554 Merge pull request #244 from APIParkLab/feature/1.6-liujian
Local model compatibility testing completed
2025-03-11 19:45:33 +08:00
Liujian a9d5585ef9 Local model compatibility testing completed 2025-03-11 19:44:55 +08:00
Dot.L 224b28bc2c Merge pull request #243 from APIParkLab/feature/1.6-liujian
fix: fail to get ai api model name
2025-03-11 17:18:00 +08:00
Liujian 9fc48341f7 fix: fail to get ai api model name 2025-03-11 17:16:42 +08:00
Dot.L 8b83b2f7e0 Merge pull request #242 from APIParkLab/feature/1.6-liujian
Feature/1.6 liujian
2025-03-11 16:50:30 +08:00
Liujian 6bb818b9a1 update provider define 2025-03-11 16:49:17 +08:00
ningyv 1e8a75e8f7 Merge pull request #241 from APIParkLab/feature/1.6-cx
feat: feature/1.6-Integrate custom model
2025-03-11 16:43:18 +08:00
Liujian 6392272a2e Merge remote-tracking branch 'origin/feature/1.6-cx' into feature/1.6-liujian 2025-03-11 16:03:43 +08:00
lichunxian 51191c3eb6 Merge branch 'feature/1.6-cx' into 'main'
feat: feature/1.6-Integrate custom model

See merge request apipark/APIPark!259
2025-03-11 16:02:40 +08:00
ningyv 2aa021f74b feat: feature/1.6-Integrate custom model 2025-03-11 16:02:02 +08:00
Liujian 4ed8f01981 Merge remote-tracking branch 'origin/feature/sunanzhi/1.6' into feature/1.6-liujian 2025-03-11 16:01:58 +08:00
Dot.L 9f2eadbfad Merge pull request #240 from APIParkLab/feature/1.6-liujian
Feature/1.6 liujian
2025-03-11 15:27:47 +08:00
Liujian 084d2f6c09 update config of publishing provider 2025-03-11 15:27:01 +08:00
孙安智 737bf822d1 Merge branch 'feature/sunanzhi/1.6' into 'main'
refactor: remove validation for checking provider existence in model addition

See merge request apipark/APIPark!258
2025-03-11 15:23:28 +08:00
sunanzhi 00c7c4e205 Merge pull request #239 from APIParkLab/feature/sunanzhi/1.6
refactor: adjust character limit for custom provider/model name
2025-03-11 15:23:12 +08:00
sunanzhi c4670e1cb1 refactor: remove validation for checking provider existence in model addition 2025-03-11 15:22:06 +08:00
Liujian 4cfaf64de3 Merge remote-tracking branch 'origin/feature/1.6-cx' into feature/1.6-liujian 2025-03-11 15:16:59 +08:00
Liujian 2eb5d30e91 Merge remote-tracking branch 'origin/feature/sunanzhi/1.6' into feature/1.6-liujian 2025-03-11 14:28:09 +08:00
孙安智 0c6238e380 Merge branch 'feature/sunanzhi/1.6' into 'main'
Feature/sunanzhi/1.6

See merge request apipark/APIPark!257
2025-03-11 12:02:23 +08:00
sunanzhi 299ee0fd25 refactor: adjust character limit for custom provider/model name 2025-03-11 12:01:20 +08:00
Dot.L 4b610eceba Merge pull request #238 from APIParkLab/feature/1.6-liujian
Feature/1.6 liujian
2025-03-11 11:51:35 +08:00
lichunxian 84cf398cc5 Merge branch 'feature/1.6-cx' into 'main'
feat: feature/1.6-Integrate custom model

See merge request apipark/APIPark!256
2025-03-11 10:24:02 +08:00
ningyv 470a945bad feat: feature/1.6-Integrate custom model 2025-03-11 10:23:26 +08:00
刘健 ea28f6024f Merge branch 'feature/1.6-liujian' into 'main'
Feature/1.6 liujian

See merge request apipark/APIPark!255
2025-03-11 10:04:59 +08:00
Liujian c1ddfbf21c update ai provider define file 2025-03-11 10:04:14 +08:00
Liujian 490f9191ff Merge remote-tracking branch 'origin/feature/sunanzhi/1.6' into feature/1.6-liujian 2025-03-10 19:48:02 +08:00
Liujian dbdd0ac4bf Merge remote-tracking branch 'origin/feature/1.6-cx' into feature/1.6-liujian 2025-03-10 19:47:56 +08:00
Liujian a3b740a390 support service mapping 2025-03-10 19:47:45 +08:00
lichunxian cbcd693086 Merge branch 'feature/1.6-cx' into 'main'
feat: feature/1.6-Integrate custom model

See merge request apipark/APIPark!254
2025-03-10 18:03:46 +08:00
ningyv 428cfb144e feat: feature/1.6-Integrate custom model 2025-03-10 18:03:09 +08:00
孙安智 e352ddeb99 Merge branch 'feature/sunanzhi/1.6' into 'main'
Feature/sunanzhi/1.6

See merge request apipark/APIPark!253
2025-03-10 17:47:52 +08:00
sunanzhi 1e4ae7b4c7 fix: resolve null pointer caused by URI error 2025-03-10 17:41:04 +08:00
Dot.L cf48d2f3f1 Merge pull request #235 from APIParkLab/feature/1.6-liujian
Cancel publishing related comments
2025-03-10 14:54:54 +08:00
刘健 d462fda694 Merge branch 'feature/1.6-liujian' into 'main'
Feature/1.6 liujian

See merge request apipark/APIPark!252
2025-03-10 14:54:42 +08:00
Liujian 5089901491 Cancel publishing related comments 2025-03-10 14:53:17 +08:00
lichunxian 71d9dfc724 Merge branch 'feature/1.6-cx' into 'main'
feat: feature/1.6-Integrate custom model

See merge request apipark/APIPark!251
2025-03-10 11:41:45 +08:00
ningyv 92523eaf30 feat: feature/1.6-Integrate custom model 2025-03-10 11:40:18 +08:00
sunanzhi 2be3aecf39 Merge pull request #234 from APIParkLab/feature/sunanzhi/1.6
Feature/sunanzhi/1.6
2025-03-10 10:45:04 +08:00
孙安智 d206eafd77 Merge branch 'feature/sunanzhi/1.6' into 'main'
feat: add provider type field

See merge request apipark/APIPark!250
2025-03-10 10:44:42 +08:00
sunanzhi e9f259bf6f Merge branch 'main' of https://github.com/APIParkLab/APIPark into feature/sunanzhi/1.6 2025-03-10 10:43:45 +08:00
sunanzhi 897f2b5bd2 feat: add provider type field 2025-03-10 10:42:33 +08:00
lichunxian 7b414ce5b5 Merge branch 'feature/1.6-cx' into 'main'
feat: feature/1.6-Integrate custom model

See merge request apipark/APIPark!249
2025-03-10 10:35:10 +08:00
ningyv 35714779f9 feat: feature/1.6-Integrate custom model 2025-03-10 10:34:35 +08:00
lichunxian 1d926c2411 Merge branch 'feature/1.6-cx' into 'main'
feat: feature/1.6-Integrate custom model

See merge request apipark/APIPark!248
2025-03-10 10:10:30 +08:00
ningyv 753b81d3dd feat: feature/1.6-Integrate custom model 2025-03-10 10:09:42 +08:00
lichunxian 6078322db5 Merge branch 'feature/1.6-cx' into 'main'
feat: feature/1.6-Integrate custom model

See merge request apipark/APIPark!247
2025-03-10 09:45:58 +08:00
ningyv 4577aca730 feat: feature/1.6-Integrate custom model 2025-03-10 09:45:15 +08:00
sunanzhi a53a527d80 Merge pull request #233 from APIParkLab/feature/sunanzhi/1.6
fix: resolve duplicate linked list data in model caused by updating v…
2025-03-07 20:09:45 +08:00
孙安智 67a6501ee0 Merge branch 'feature/sunanzhi/1.6' into 'main'
fix: resolve duplicate linked list data in model caused by updating vendor

See merge request apipark/APIPark!246
2025-03-07 20:09:21 +08:00
sunanzhi fce631cc87 fix: resolve duplicate linked list data in model caused by updating vendor 2025-03-07 20:08:56 +08:00
孙安智 2e4287d585 Merge branch 'feature/sunanzhi/1.6' into 'main'
Feature/sunanzhi/1.6

See merge request apipark/APIPark!245
2025-03-07 19:54:11 +08:00
sunanzhi 8624576bf8 Merge pull request #232 from APIParkLab/feature/sunanzhi/1.6
fix: resolve issue with adding vendor not loading
2025-03-07 19:54:09 +08:00
sunanzhi 4d72446c64 fix: resolve issue with adding vendor not loading 2025-03-07 19:52:47 +08:00
sunanzhi faf621b646 Merge pull request #231 from APIParkLab/feature/sunanzhi/1.6
Feature/sunanzhi/1.6
2025-03-07 18:54:06 +08:00
sunanzhi f2acea30e2 Merge branch 'main' of https://github.com/APIParkLab/APIPark into feature/sunanzhi/1.6 2025-03-07 18:50:34 +08:00
孙安智 c6dbe334e9 Merge branch 'feature/sunanzhi/1.6' into 'main'
refactor: adjust model_runtime structure of provider model

See merge request apipark/APIPark!244
2025-03-07 18:43:45 +08:00
sunanzhi a8c842b8d0 refactor: adjust model_runtime structure of provider model 2025-03-07 18:32:20 +08:00
孙安智 95e34f0b73 Merge branch 'feature/sunanzhi/1.6' into 'main'
fix: resolve build failure due to unused model variable

See merge request apipark/APIPark!243
2025-03-07 15:09:25 +08:00
sunanzhi 69fd1b915b fix: resolve build failure due to unused model variable 2025-03-07 15:08:50 +08:00
孙安智 7483455bb8 Merge branch 'feature/sunanzhi/1.6' into 'main'
fix: resolve null pointer due to empty validator and comment out release model code

See merge request apipark/APIPark!242
2025-03-07 14:58:33 +08:00
sunanzhi 77e6f100b7 fix: resolve null pointer due to empty validator and comment out release model code 2025-03-07 14:56:54 +08:00
sunanzhi 69a3a7d5ba Merge pull request #229 from APIParkLab/feature/sunanzhi/1.6
Feature/sunanzhi/1.6
2025-03-07 14:34:19 +08:00
孙安智 6dae2e7068 Merge branch 'feature/sunanzhi/1.6' into 'main'
fix: resolve error caused by fetching empty vendor config model

See merge request apipark/APIPark!241
2025-03-07 14:33:49 +08:00
sunanzhi d3bd782165 fix: resolve error caused by fetching empty vendor config model 2025-03-07 14:33:23 +08:00
lichunxian b49782c7b4 Merge branch 'feature/1.6-cx' into 'main'
feat: feature/1.6-Integrate custom model

See merge request apipark/APIPark!240
2025-03-07 14:24:57 +08:00
ningyv 8ca8d51025 feat: feature/1.6-Integrate custom model 2025-03-07 14:24:14 +08:00
孙安智 f8affd2f29 Merge branch 'feature/sunanzhi/1.6' into 'main'
fix: resolve package error when LLMs list is empty

See merge request apipark/APIPark!239
2025-03-07 14:14:53 +08:00
sunanzhi 3d4e2c3165 fix: resolve package error when LLMs list is empty 2025-03-07 14:07:53 +08:00
孙安智 7cca06377c Merge branch 'feature/sunanzhi/1.6' into 'main'
fix: fix null pointer in unconfigured provider fetch, add model name to list

See merge request apipark/APIPark!238
2025-03-07 11:41:31 +08:00
sunanzhi 22f15f5cbf fix: fix null pointer in unconfigured provider fetch, add model name to list 2025-03-07 11:38:14 +08:00
sunanzhi b8c73b7730 Merge pull request #228 from APIParkLab/feature/sunanzhi/1.6
feat: add API endpoint to retrieve model configuration template
2025-03-07 11:17:02 +08:00
孙安智 fb71498e6a Merge branch 'feature/sunanzhi/1.6' into 'main'
feat: add API endpoint to retrieve model configuration template

See merge request apipark/APIPark!237
2025-03-07 11:16:33 +08:00
sunanzhi bc16d7f5ce feat: add API endpoint to retrieve model configuration template
Introduce a new interface for fetching model configuration templates to enhance model management flexibility.
2025-03-07 11:15:49 +08:00
lichunxian 62bc87e251 Merge branch 'feature/1.6-cx' into 'main'
feat: feature/1.6-Integrate custom model

See merge request apipark/APIPark!236
2025-03-07 11:06:38 +08:00
ningyv b1f010ad60 feat: feature/1.6-Integrate custom model 2025-03-07 11:05:53 +08:00
sunanzhi 8e4a3fc42b Merge pull request #226 from APIParkLab/feature/sunanzhi/1.6
Feature/sunanzhi/1.6
2025-03-07 09:27:39 +08:00
孙安智 bf08952fe0 Merge branch 'feature/sunanzhi/1.6' into 'main'
Add support for creating online models and integrating custom model providers

See merge request apipark/APIPark!235
2025-03-07 09:26:32 +08:00
sunanzhi 51792a8eda Merge branch 'main' of https://github.com/APIParkLab/APIPark into feature/sunanzhi/1.6
# Conflicts:
#	.gitignore
2025-03-06 18:33:21 +08:00
dashenbibi dd4fdd8de3 Merge pull request #225 from APIParkLab/feature/dashen/model_mapping
Feature/dashen/model mapping
2025-03-06 18:27:32 +08:00
sunanzhi b9f6abc9b3 Add support for creating online models and integrating custom model providers 2025-03-06 17:42:17 +08:00
lichunxian 4ca4d9fd82 Merge branch 'feature/1.6-cx' into 'main'
feat: feature/1.6-Integrate custom model

See merge request apipark/APIPark!234
2025-03-06 16:17:17 +08:00
ningyv 1ed05b96b4 feat: feature/1.6-Integrate custom model 2025-03-06 16:16:20 +08:00
lichunxian e9b7cb505d Merge branch 'feature/1.6-cx' into 'main'
feat: feature/1.6-Integrate custom model

See merge request apipark/APIPark!233
2025-03-06 11:34:50 +08:00
ningyv a7f1da85b1 Merge remote-tracking branch 'origin/main' into feature/1.6-cx 2025-03-06 11:31:29 +08:00
ningyv 59c0bfe3f5 feat: feature/1.6-Integrate custom model 2025-03-06 11:07:58 +08:00
李业昌 f893819f32 Merge branch 'feature/dashen/model_mapping' into 'main'
Feature/dashen/model mapping

See merge request apipark/APIPark!231
2025-03-05 10:50:06 +08:00
2944321442@qq.com 8c40e1cf05 .gitignore 2025-03-05 10:49:22 +08:00
2944321442@qq.com afb9cc2e44 feat:update .gitignore 2025-03-05 10:44:19 +08:00
2944321442@qq.com 8e854adaa3 feat:update .gitignore 2025-03-05 10:43:20 +08:00
2944321442@qq.com 860874ef5c feat:添加服务模型映射功能 2025-03-05 10:15:05 +08:00
2944321442@qq.com 4b263c1e7a Merge branch 'main' into feature/dashen/model_mapping 2025-03-05 10:15:00 +08:00
2944321442@qq.com eaeae88f04 feat: add service model mapping configuration 2025-03-04 15:19:27 +08:00
ningyv 7a84c5aec3 Merge pull request #222 from APIParkLab/feature/1.5-cx
fix: homepage Permission Configuration
2025-03-03 14:21:16 +08:00
lichunxian 1d91f9e78c Merge branch 'feature/1.5-cx' into 'main'
Feature/1.5 cx

See merge request apipark/APIPark!230
2025-03-03 14:20:46 +08:00
ningyv 1a8538b617 fix: homepage Permission Configuration 2025-03-03 14:20:20 +08:00
ningyv ddd1d662b1 Merge pull request #221 from APIParkLab/feature/1.5-cx
fix: homepage Permission Configuration
2025-03-03 14:15:27 +08:00
ningyv c56319d1c2 fix: homepage Permission Configuration 2025-03-03 14:14:20 +08:00
ningyv d489912705 Merge pull request #220 from APIParkLab/feature/1.6
fix: service configuration LLM API error
2025-03-03 09:51:49 +08:00
ningyv f95437ad1a fix: service configuration LLM API error 2025-03-03 09:51:14 +08:00
ningyv 04bbac1252 Merge pull request #212 from APIParkLab/feature/1.5-cx
feat: feature/1.5-Data Integration
2025-02-20 18:36:42 +08:00
lichunxian f058f2bc71 Merge branch 'feature/1.5-cx' into 'main'
feat: feature/1.5-Data Integration

See merge request apipark/APIPark!229
2025-02-20 18:36:14 +08:00
ningyv aa873f75f2 feat: feature/1.5-Data Integration 2025-02-20 18:35:26 +08:00
Dot.L 70de481b52 Merge pull request #211 from APIParkLab/feature/1.5-local-model
This pull request includes several changes aimed at improving error handling, adding new functionalities, and refactoring existing code. The changes primarily focus on the AI provider and controller modules.

Error Handling Improvements:
Added checks to ensure the client is initialized before performing operations in multiple functions (PullModel, StopPull, CancelPipeline, RemoveModel, ModelsInstalled) in ai-provider/local/executor.go. [1] [2] [3] [4]
New Functionalities:
Introduced OllamaConfig and OllamaConfigUpdate methods to the ILocalModelController interface and implemented them in controller/ai-local/iml.go. These methods allow for getting and updating the Ollama configuration. [1] [2]
Added functionality to automatically subscribe all applications to new services in the Create method of controller/service/iml.go.
Refactoring:
Refactored the initialization of the Ollama client by replacing the static address with a ResetOllamaAddress function in ai-provider/local/local.go.
Removed unused code and imports, such as the newAIUpstream function and upstream_dto import in controller/service/iml.go. [1] [2]
Codebase Simplification:
Simplified the OnInit method in controller/system/iml.go by consolidating the creation of default entities and adding subscription logic. [1] [2] [3]
Additional Changes:
Added new imports and modules to support the new functionalities and refactoring efforts. [1] [2] [3]
2025-02-20 14:31:31 +08:00
刘健 b41e8bbb8c Merge branch 'feature/1.5-local-model' into 'main'
Feature/1.5 local model

See merge request apipark/APIPark!228
2025-02-20 14:25:08 +08:00
Liujian 17f700c77d Fix: Failure to update local model configuration to gateway 2025-02-20 14:24:39 +08:00
ningyv 89b4a51774 Merge pull request #210 from APIParkLab/feature/1.5-cx
feat: feature/1.5-Data Integration
2025-02-20 14:20:59 +08:00
lichunxian 92627b0a69 Merge branch 'feature/1.5-cx' into 'main'
feat: feature/1.5-Data Integration

See merge request apipark/APIPark!227
2025-02-20 14:20:14 +08:00
ningyv 8e974a4fe3 feat: feature/1.5-Data Integration 2025-02-20 14:19:34 +08:00
ningyv 60a151f798 Merge pull request #209 from APIParkLab/feature/1.5-cx
feat: feature/1.5-Data Integration
2025-02-20 13:52:50 +08:00
lichunxian 6839539321 Merge branch 'feature/1.5-cx' into 'main'
feat: feature/1.5-Data Integration

See merge request apipark/APIPark!226
2025-02-20 13:52:30 +08:00
ningyv 0dc5685aa9 feat: feature/1.5-Data Integration 2025-02-20 13:51:53 +08:00
ningyv 35f8a1e539 Merge pull request #208 from APIParkLab/feature/1.5-cx
feat: feature/1.5-Data Integration
2025-02-20 11:37:47 +08:00
lichunxian 3adbe4b74f Merge branch 'feature/1.5-cx' into 'main'
feat: feature/1.5-Data Integration

See merge request apipark/APIPark!225
2025-02-20 11:37:17 +08:00
ningyv 179b9e16d6 feat: feature/1.5-Data Integration 2025-02-20 11:36:34 +08:00
Liujian b573b380ab Merge remote-tracking branch 'github-pro/main' into feature/1.5-local-model 2025-02-19 19:51:32 +08:00
Liujian fb9c92e941 fix: ai balance bug 2025-02-19 19:18:17 +08:00
ningyv 2ae6af46ef Merge pull request #207 from APIParkLab/feature/1.5-cx
Feature/1.5 cx
2025-02-19 18:41:45 +08:00
lichunxian 224411b593 Merge branch 'feature/1.5-cx' into 'main'
feat: feature/1.5-Data Integration

See merge request apipark/APIPark!224
2025-02-19 18:19:58 +08:00
ningyv e366f3545f feat: feature/1.5-Data Integration 2025-02-19 18:19:17 +08:00
刘健 3721eea772 Merge branch 'feature/1.5-local-model' into 'main'
Fix: Issue of failed update service

See merge request apipark/APIPark!223
2025-02-19 18:00:04 +08:00
Liujian e16e06d8b6 Fix: Issue of failed update service 2025-02-19 17:58:20 +08:00
lichunxian a60bd5eba7 Merge branch 'feature/1.5-cx' into 'main'
feat: feature/1.5-Data Integration

See merge request apipark/APIPark!222
2025-02-19 17:57:28 +08:00
ningyv 8dca13f4e5 feat: feature/1.5-Data Integration 2025-02-19 17:56:46 +08:00
刘健 d0464b988a Merge branch 'feature/1.5-local-model' into 'main'
Add model information field to service information

See merge request apipark/APIPark!221
2025-02-19 17:24:27 +08:00
Liujian 60662c443d Add model information field to service information 2025-02-19 17:24:12 +08:00
lichunxian 2420cfdd9a Merge branch 'feature/1.5-cx' into 'main'
feat: feature/1.5-Data Integration

See merge request apipark/APIPark!220
2025-02-19 16:06:00 +08:00
ningyv 2aad0959c4 feat: feature/1.5-Data Integration 2025-02-19 16:05:19 +08:00
刘健 9a145cb0b0 Merge branch 'feature/1.5-local-model' into 'main'
Feature/1.5 local model

See merge request apipark/APIPark!219
2025-02-19 10:58:00 +08:00
Liujian 690c2fe2f7 Fix: Issue where the service status is not updated after the local model download is completed 2025-02-19 10:57:39 +08:00
Liujian 9a833023ce Merge remote-tracking branch 'origin/feature/1.5-cx' into feature/1.5-local-model 2025-02-19 10:27:11 +08:00
lichunxian 62456f632e Merge branch 'feature/1.5-cx' into 'main'
feat: feature/1.5-Data Integration

See merge request apipark/APIPark!218
2025-02-19 10:23:47 +08:00
ningyv 4128de90fd feat: feature/1.5-Data Integration 2025-02-19 10:23:16 +08:00
Liujian 0eb24ef7b1 Merge remote-tracking branch 'origin/feature/1.5-cx' into feature/1.5-local-model 2025-02-19 10:13:55 +08:00
lichunxian 1c96e82629 Merge branch 'feature/1.5-cx' into 'main'
feat: feature/1.5-Data Integration

See merge request apipark/APIPark!217
2025-02-19 09:35:31 +08:00
ningyv 7af43de521 feat: feature/1.5-Data Integration 2025-02-19 09:34:09 +08:00
lichunxian 502af9c782 Merge branch 'feature/1.5-cx' into 'main'
feat: feature/1.5-Data Integration

See merge request apipark/APIPark!216
2025-02-19 09:28:04 +08:00
ningyv 1897fe9467 feat: feature/1.5-Data Integration 2025-02-19 09:27:10 +08:00
lichunxian 1da4c35cdc Merge branch 'feature/1.5-cx' into 'main'
feat: feature/1.5-Data Integration

See merge request apipark/APIPark!215
2025-02-18 22:18:03 +08:00
ningyv 9de48bf400 feat: feature/1.5-Data Integration 2025-02-18 21:55:58 +08:00
lichunxian ffb3f51fb6 Merge branch 'feature/1.5-cx' into 'main'
feat: feature/1.5-Data Integration

See merge request apipark/APIPark!214
2025-02-18 19:52:13 +08:00
ningyv 7e2852b7e6 feat: feature/1.5-Data Integration 2025-02-18 19:51:28 +08:00
Liujian 184db4c933 Merge remote-tracking branch 'origin/feature/1.5-cx' into feature/1.5-local-model 2025-02-18 18:06:32 +08:00
lichunxian 6beb2576ce Merge branch 'feature/1.5-cx' into 'main'
feat: feature/1.5-Data Integration

See merge request apipark/APIPark!212
2025-02-18 16:00:41 +08:00
ningyv 7f3e43d929 fix: route handling does not work on page reload 2025-02-18 16:00:12 +08:00
刘健 4dcb71042c Merge branch 'feature/1.5-local-model' into 'main'
Feature/1.5 local model

See merge request apipark/APIPark!213
2025-02-18 15:43:45 +08:00
Liujian 30c09006b0 add api: get/set ollama api address 2025-02-18 15:42:57 +08:00
Dot.L fbd9e1d979 Merge pull request #205 from APIParkLab/feature/1.5-local-model
Feature/1.5 local model
2025-02-18 10:24:34 +08:00
Liujian d143aee8c3 fix: cancel deploy error 2025-02-18 10:20:33 +08:00
ningyv aaadc5e450 Merge pull request #204 from APIParkLab/feature/1.5-cx
feat: feature/1.5-Data Integration
2025-02-18 10:18:17 +08:00
ningyv 861c389277 feat: feature/1.5-Data Integration 2025-02-18 10:08:20 +08:00
Liujian c3b41b047d Merge remote-tracking branch 'origin/feature/1.5-cx' into feature/1.5-local-model 2025-02-17 21:24:33 +08:00
lichunxian 1499036792 Merge branch 'feature/1.5-cx' into 'main'
feat: feature/1.5-Data Integration

See merge request apipark/APIPark!211
2025-02-17 20:15:54 +08:00
刘健 903f9a08a2 Update .gitlab-ci.yml file 2025-02-17 20:14:06 +08:00
ningyv 1228bdd756 feat: feature/1.5-Data Integration 2025-02-17 20:13:20 +08:00
刘健 9e35325600 Update .gitlab-ci.yml file 2025-02-17 19:37:30 +08:00
刘健 0ec9492838 Merge branch 'feature/1.5-local-model' into 'main'
update service list sort

See merge request apipark/APIPark!210
2025-02-17 18:32:34 +08:00
Liujian fc7fe48920 update service list sort 2025-02-17 18:31:05 +08:00
刘健 e3d272404d Merge branch 'feature/1.5-local-model' into 'main'
init service consumer

See merge request apipark/APIPark!209
2025-02-17 18:14:37 +08:00
Liujian 9e4efae3a5 init service consumer 2025-02-17 18:12:47 +08:00
刘健 df16946d37 Merge branch 'feature/1.5-local-model' into 'main'
init service consumer

See merge request apipark/APIPark!208
2025-02-17 18:12:32 +08:00
Liujian 61f4742d19 init service consumer 2025-02-17 18:08:29 +08:00
刘健 cad081f1bc Merge branch 'feature/1.5-local-model' into 'main'
Feature/1.5 local model

See merge request apipark/APIPark!207
2025-02-17 17:42:16 +08:00
Liujian bc8870a735 fix: bug 2025-02-17 17:21:48 +08:00
Liujian 713227f0fe Merge remote-tracking branch 'origin/feature/1.5-cx' into feature/1.5-local-model 2025-02-17 16:38:07 +08:00
ningyv 661aa92732 Merge pull request #203 from APIParkLab/feature/1.5-cx
feat: feature/1.5-Data Integration
2025-02-17 16:35:19 +08:00
lichunxian f8f15c51b1 Merge branch 'feature/1.5-cx' into 'main'
feat: feature/1.5-Data Integration

See merge request apipark/APIPark!206
2025-02-17 16:34:45 +08:00
ningyv 32805d9bf8 feat: feature/1.5-Data Integration 2025-02-17 16:33:49 +08:00
刘健 7767284c98 Merge branch 'feature/1.5-local-model' into 'main'
Fix: Service List AI Entry Error

See merge request apipark/APIPark!205
2025-02-17 16:12:38 +08:00
Liujian 9efb9600c9 Fix: Service List AI Entry Error 2025-02-17 16:12:21 +08:00
刘健 dcb3f2879a Merge branch 'feature/1.5-local-model' into 'main'
fix: ai deploy bug

See merge request apipark/APIPark!204
2025-02-17 15:24:28 +08:00
Liujian 6d12f251a1 fix: ai deploy bug 2025-02-17 15:23:57 +08:00
ningyv 8ae66e9a22 Merge pull request #202 from APIParkLab/feature/1.5-cx
feat: feature/1.5-Data Integration
2025-02-17 15:17:42 +08:00
lichunxian db74c102f9 Merge branch 'feature/1.5-cx' into 'main'
feat: feature/1.5-Data Integration

See merge request apipark/APIPark!203
2025-02-17 15:17:11 +08:00
ningyv d1eea10fe6 feat: feature/1.5-Data Integration 2025-02-17 15:16:45 +08:00
ningyv 1b4009e4a1 Merge pull request #201 from APIParkLab/feature/1.5
Feature/1.5
2025-02-17 13:42:36 +08:00
ningyv 983a5423c9 Merge pull request #190 from APIParkLab/feature/1.5-cx
feat:Feature/1.5
2025-02-17 13:38:22 +08:00
Dot.L 99934ec16c Merge pull request #200 from APIParkLab/feature/1.5-local-model
Feature/1.5 local model
2025-02-17 13:36:28 +08:00
刘健 7d59a6074f Merge branch 'feature/1.5-local-model' into 'main'
add:init ai balance

See merge request apipark/APIPark!202
2025-02-17 11:42:07 +08:00
Liujian 70972cc92e add:init ai balance 2025-02-17 11:41:07 +08:00
lichunxian c81f6d659d Merge branch 'feature/1.5-cx' into 'main'
feat: feature/1.5-Data Integration

See merge request apipark/APIPark!201
2025-02-17 11:32:25 +08:00
ningyv 6097b0e946 feat: feature/1.5-Data Integration 2025-02-17 11:30:52 +08:00
lichunxian 7c1865f36f Merge branch 'feature/1.5-cx' into 'main'
feat: feature/1.5-Data Integration

See merge request apipark/APIPark!200
2025-02-17 11:07:23 +08:00
ningyv 3a0c165cec feat: feature/1.5-Data Integration 2025-02-17 11:06:23 +08:00
刘健 e8a8d4ec19 Merge branch 'feature/1.5-local-model' into 'main'
Feature/1.5 local model

See merge request apipark/APIPark!199
2025-02-17 10:45:56 +08:00
Liujian cd0982ce20 update api: simple local models 2025-02-17 10:45:34 +08:00
Liujian b4aeb435c6 update provider model define 2025-02-17 10:25:12 +08:00
刘健 c51f9f1dcb Merge branch 'feature/1.5-local-model' into 'main'
fix: ai deploy bug

See merge request apipark/APIPark!198
2025-02-17 00:37:59 +08:00
Liujian 94d5ed0773 fix: ai deploy bug 2025-02-17 00:37:25 +08:00
刘健 baf1369f58 Merge branch 'feature/1.5-local-model' into 'main'
Feature/1.5 local model

See merge request apipark/APIPark!197
2025-02-16 21:51:20 +08:00
Liujian 35b25289bd fix: ai balance bug 2025-02-16 21:50:56 +08:00
Liujian e336b8324a Merge remote-tracking branch 'origin/feature/1.5-cx' into feature/1.5-local-model 2025-02-16 21:38:41 +08:00
刘健 d0e6162386 Merge branch 'feature/1.5-local-model' into 'main'
fix:bug

See merge request apipark/APIPark!196
2025-02-16 00:57:43 +08:00
Liujian c5e4316e37 fix:bug 2025-02-16 00:57:18 +08:00
lichunxian b52c12a922 Merge branch 'feature/1.5-cx' into 'main'
feat: feature/1.5-Data Integration

See merge request apipark/APIPark!195
2025-02-15 18:51:16 +08:00
ningyv 1127df66f7 feat: feature/1.5-Data Integration 2025-02-15 18:50:38 +08:00
lichunxian 4b98ceb2d4 Merge branch 'feature/1.5-cx' into 'main'
feat: feature/1.5-Data Integration

See merge request apipark/APIPark!194
2025-02-15 18:31:38 +08:00
ningyv 5286b90b27 feat: feature/1.5-Data Integration 2025-02-15 18:30:21 +08:00
lichunxian 9ffa194d6d Merge branch 'feature/1.5-cx' into 'main'
feat: feature/1.5-Data Integration

See merge request apipark/APIPark!193
2025-02-15 18:12:31 +08:00
ningyv b9c6bac15b feat: feature/1.5-Data Integration 2025-02-15 18:11:36 +08:00
刘健 1aa18177c9 Merge branch 'feature/1.5-local-model' into 'main'
本地模型列表新增provider

See merge request apipark/APIPark!192
2025-02-15 17:59:48 +08:00
Liujian 068d852c20 本地模型列表新增provider 2025-02-15 17:59:03 +08:00
lichunxian 5caf9560cb Merge branch 'feature/1.5-cx' into 'main'
feat: feature/1.5-Data Integration

See merge request apipark/APIPark!191
2025-02-15 17:45:01 +08:00
ningyv e1194ff391 feat: feature/1.5-Data Integration 2025-02-15 17:44:23 +08:00
lichunxian 6fb3bece43 Merge branch 'feature/1.5-cx' into 'main'
feat: feature/1.5-Data Integration

See merge request apipark/APIPark!190
2025-02-15 17:27:35 +08:00
ningyv 90ae7b0741 feat: feature/1.5-Data Integration 2025-02-15 17:26:58 +08:00
lichunxian 8a13c7b312 Merge branch 'feature/1.5-cx' into 'main'
feat: feature/1.5-Data Integration

See merge request apipark/APIPark!189
2025-02-15 17:16:20 +08:00
ningyv 519673ec01 feat: feature/1.5-Data Integration 2025-02-15 17:15:36 +08:00
刘健 b4a22b29f3 Merge branch 'feature/1.5-local-model' into 'main'
update api doc

See merge request apipark/APIPark!188
2025-02-15 10:58:52 +08:00
Liujian 2bbddc81b1 update api doc 2025-02-15 10:58:13 +08:00
刘健 e0171c45e1 Merge branch 'feature/1.5-local-model' into 'main'
fix:bug

See merge request apipark/APIPark!187
2025-02-15 10:57:04 +08:00
Liujian 3427d8fd07 fix:bug 2025-02-15 10:56:38 +08:00
lichunxian 2b3bfdec99 Merge branch 'feature/1.5-cx' into 'main'
feat: feature/1.5-Data Integration

See merge request apipark/APIPark!186
2025-02-15 10:14:02 +08:00
ningyv 2cca6d4bba feat: feature/1.5-Data Integration 2025-02-15 10:13:10 +08:00
刘健 c776dc2206 Merge branch 'feature/1.5-local-model' into 'main'
Fix: AI model list keyword query failure issue

See merge request apipark/APIPark!185
2025-02-14 23:47:05 +08:00
Liujian 34c971ad77 Fix: AI model list keyword query failure issue 2025-02-14 23:46:29 +08:00
刘健 91b2932d62 Merge branch 'feature/1.5-local-model' into 'main'
Feature/1.5 local model

See merge request apipark/APIPark!184
2025-02-14 23:27:54 +08:00
Liujian 3127cc6780 finish:quick create service 2025-02-14 23:27:24 +08:00
Liujian 0dc5439726 Merge remote-tracking branch 'origin/feature/1.5-cx' into feature/1.5-local-model 2025-02-14 23:08:26 +08:00
lichunxian f7e3db9043 Merge branch 'feature/1.5-cx' into 'main'
feat: feature/1.5-Data Integration

See merge request apipark/APIPark!183
2025-02-14 22:24:15 +08:00
ningyv 7a635430f1 feat: feature/1.5-Data Integration 2025-02-14 22:23:21 +08:00
lichunxian 0bb11bcca5 Merge branch 'feature/1.5-cx' into 'main'
feat: feature/1.5-Data Integration

See merge request apipark/APIPark!182
2025-02-14 21:52:42 +08:00
ningyv 412d15a9b4 feat: feature/1.5-Data Integration 2025-02-14 21:51:46 +08:00
刘健 10eda384e6 Merge branch 'feature/1.5-local-model' into 'main'
update model colomn length

See merge request apipark/APIPark!181
2025-02-14 21:20:15 +08:00
Liujian 7866572191 update model colomn length 2025-02-14 21:19:55 +08:00
刘健 4b5cbb3fcc Merge branch 'feature/1.5-local-model' into 'main'
add ollama logo

See merge request apipark/APIPark!180
2025-02-14 21:10:43 +08:00
Liujian 614b46e6fc add ollama logo 2025-02-14 21:10:04 +08:00
lichunxian f7ad32c1cc Merge branch 'feature/1.5-cx' into 'main'
feat: feature/1.5-Data Integration

See merge request apipark/APIPark!179
2025-02-14 20:57:39 +08:00
ningyv 2afb106ba9 feat: feature/1.5-Data Integration 2025-02-14 20:56:35 +08:00
lichunxian fce2cc8636 Merge branch 'feature/1.5-cx' into 'main'
feat: feature/1.5-Data Integration

See merge request apipark/APIPark!178
2025-02-14 20:45:18 +08:00
ningyv ba4362ae64 feat: feature/1.5-Data Integration 2025-02-14 20:44:40 +08:00
刘健 8545938654 Merge branch 'feature/1.5-local-model' into 'main'
Feature/1.5 local model

See merge request apipark/APIPark!177
2025-02-14 20:25:11 +08:00
Liujian 4d87b3aafb Improve deployment logic 2025-02-14 20:22:49 +08:00
Liujian 5784d3f5d1 Merge remote-tracking branch 'origin/feature/1.5-cx' into feature/1.5-local-model 2025-02-14 19:15:31 +08:00
lichunxian fb1b5280fe Merge branch 'feature/1.5-cx' into 'main'
feat: feature/1.5-Data Integration

See merge request apipark/APIPark!176
2025-02-14 18:51:23 +08:00
ningyv 253e655b31 feat: feature/1.5-Data Integration 2025-02-14 18:50:30 +08:00
刘健 13eb5bb1e8 Merge branch 'feature/1.5-local-model' into 'main'
update role permission

See merge request apipark/APIPark!175
2025-02-14 18:41:50 +08:00
Liujian 72dcd0a073 update role permission 2025-02-14 18:41:09 +08:00
刘健 1971db2405 Merge branch 'feature/1.5-local-model' into 'main'
Feature/1.5 local model

See merge request apipark/APIPark!174
2025-02-14 18:36:43 +08:00
Liujian 3093471063 Gin responds to cancel gzip compression 2025-02-14 18:36:25 +08:00
lichunxian 14874d7869 Merge branch 'feature/1.5-cx' into 'main'
feat: feature/1.5-Data Integration

See merge request apipark/APIPark!173
2025-02-14 18:05:18 +08:00
ningyv bfdec9e08b feat: feature/1.5-Data Integration 2025-02-14 18:04:38 +08:00
lichunxian cbec924300 Merge branch 'feature/1.5-cx' into 'main'
feat: feature/1.5-Data Integration

See merge request apipark/APIPark!172
2025-02-14 17:44:15 +08:00
ningyv a03f87b907 feat: feature/1.5-Data Integration 2025-02-14 17:43:41 +08:00
Liujian e100f475ae Merge remote-tracking branch 'origin/feature/1.5-cx' into feature/1.5-local-model 2025-02-14 17:37:28 +08:00
刘健 76e66bcf6f Merge branch 'feature/1.5-local-model' into 'main'
Fix: Local model deployment status error

See merge request apipark/APIPark!171
2025-02-14 17:24:58 +08:00
Liujian 26a50b9a79 Fix: Local model deployment status error 2025-02-14 17:24:41 +08:00
刘健 4e38760b44 Merge branch 'feature/1.5-local-model' into 'main'
update deploy status

See merge request apipark/APIPark!170
2025-02-14 17:07:21 +08:00
Liujian aef9805bdf update deploy status 2025-02-14 17:06:34 +08:00
lichunxian bb7ccde958 Merge branch 'feature/1.5-cx' into 'main'
feat: Local deployment popup optimization

See merge request apipark/APIPark!169
2025-02-14 16:46:31 +08:00
ningyv 55aef95304 feat: Local deployment popup optimization 2025-02-14 16:45:39 +08:00
刘健 aa338f7aa7 Merge branch 'feature/1.5-local-model' into 'main'
Feature/1.5 local model

See merge request apipark/APIPark!168
2025-02-14 16:36:02 +08:00
Liujian ee06368a4e finish ai balance 2025-02-14 16:29:56 +08:00
Liujian edfb2006b2 Merge remote-tracking branch 'origin/feature/1.5-cx' into feature/1.5/local-model 2025-02-14 15:43:38 +08:00
lichunxian 015ecfd182 Merge branch 'feature/1.5-cx' into 'main'
feat: Local deployment popup optimization

See merge request apipark/APIPark!167
2025-02-14 15:40:35 +08:00
ningyv 99b65bead6 feat: Local deployment popup optimization 2025-02-14 15:39:01 +08:00
Liujian 98efa0f804 Merge remote-tracking branch 'github-pro/feature/1.5-cx' into feature/1.5/local-model 2025-02-14 15:36:54 +08:00
Liujian 2ff7458c4e local model first commit 2025-02-14 15:34:41 +08:00
lichunxian 60fa35376b Merge branch 'feature/1.5-cx' into 'main'
feat: feature/1.5-Model Deployment Process Popup Optimization

See merge request apipark/APIPark!166
2025-02-13 18:24:20 +08:00
ningyv 2fbaba710d feat: feature/1.5-Model Deployment Process Popup Optimization 2025-02-13 18:22:58 +08:00
lichunxian 222eafe86d Merge branch 'feature/1.5-cx' into 'main'
feat: feature/1.5

See merge request apipark/APIPark!165
2025-02-13 17:03:58 +08:00
ningyv 86bb513db6 feat: Style and Prompt Optimization 2025-02-13 17:02:40 +08:00
Liujian 88d4c5101e async excutor first commit 2025-02-13 11:53:52 +08:00
lichunxian df4126514f Merge branch 'feature/1.5-cx' into 'main'
feat:Feature/1.5 cx

See merge request apipark/APIPark!164
2025-02-13 10:09:18 +08:00
ningyv 471643d4ea feat: Multilingual Translation 2025-02-13 09:51:43 +08:00
ningyv 444a48c8f2 feat: progress log 2025-02-12 18:20:35 +08:00
ningyv ec951dd87f feat: local model list page 2025-02-12 16:45:57 +08:00
ningyv 7ac385b317 feat: local model list page 2025-02-12 15:28:17 +08:00
ningyv 2f435d561e feat: merge api model page 2025-02-12 11:27:47 +08:00
scarqin 3a718d2cd8 feat: delete model 2025-02-12 00:33:16 +08:00
scarqin d87a420752 feat: api list 2025-02-11 19:15:11 +08:00
scarqin 6491de3064 feat: online model settings 2025-02-11 19:01:15 +08:00
ningyv 5cc01d7aab feat: load banancing list 2025-02-11 18:27:14 +08:00
ningyv 628cd98fd0 feat: feature/1.5 Extract home page navigation component 2025-02-11 10:36:47 +08:00
ningyv 8ce65cbe3d feat: Deployment Progress Popup Development 2025-02-10 17:03:28 +08:00
ningyv 0b2928eb3c feat: Home Page AI Service Deployment 2025-02-08 18:47:08 +08:00
Dot.L 45ce43ab15 Merge pull request #189 from APIParkLab/feature/openapi
update workflows actions/download-artifact to v4
2025-02-08 16:15:32 +08:00
Liujian 637044e99d update workflows actions/download-artifact to v4 2025-02-08 16:14:01 +08:00
Dot.L 3a96e02fc7 Merge pull request #188 from APIParkLab/feature/openapi
update workflows actions/upload-artifact to v4
2025-02-08 15:59:53 +08:00
Liujian 18a3283cb4 update workflows actions/upload-artifact to v4 2025-02-08 15:57:36 +08:00
Dot.L c3b8ba4d04 Merge pull request #187 from APIParkLab/feature/openapi
Feature/openapi
2025-02-08 15:02:06 +08:00
Liujian a51ccf6d67 Merge remote-tracking branch 'github-pro/main' into feature/openapi 2025-02-08 15:01:27 +08:00
Liujian 6b1224f9f8 Fix: AI provider's default key synchronization to Apinto failed issue 2025-02-08 14:58:36 +08:00
Liujian 907f9c00fb Merge remote-tracking branch 'origin/main' into feature/openapi 2025-01-23 16:54:58 +08:00
ningyv ed72062d33 Merge pull request #183 from APIParkLab/feature/1.4
chroe: optimize AI model node graphics
2025-01-23 14:01:10 +08:00
ningyv af9f5cef2f Merge remote-tracking branch 'origin/main' into feature/1.4 2025-01-23 13:57:01 +08:00
lichunxian 2c205921d6 Merge branch 'feature/1.4' into 'main'
chroe: optimize AI model node graphics

See merge request apipark/APIPark!161
2025-01-21 11:52:02 +08:00
ningyv 4e2b424eeb chroe: optimize AI model node graphics 2025-01-21 11:50:58 +08:00
刘健 22e738a164 Merge branch 'feature/openapi' into 'main'
Feature/openapi

See merge request apipark/APIPark!160
2025-01-20 17:36:53 +08:00
Dot.L 6824cdd4a1 Merge pull request #181 from APIParkLab/feature/openapi
fix:ai init bug
2025-01-20 14:08:37 +08:00
Liujian d44dd05462 fix:ai init bug 2025-01-20 14:03:03 +08:00
Dot.L 7d6666c0b6 Merge pull request #180 from APIParkLab/feature/openapi
Feature/openapi
2025-01-20 13:55:59 +08:00
Liujian 070882655d update ai bug 2025-01-20 13:54:58 +08:00
刘健 cdb0831174 Merge branch 'feature/openapi' into 'main'
fix: Nsq returns no error directly after parsing JSON exceptionNsq returns no...

See merge request apipark/APIPark!159
2025-01-17 16:03:51 +08:00
Liujian 0a864aea41 add openapi 2025-01-17 16:03:09 +08:00
Dot.L a4464610eb Merge pull request #174 from jeak01/patch-2
Update readme-zh-cn.md
2025-01-17 15:55:09 +08:00
Dot.L 18a03d57b4 Merge pull request #175 from jeak01/patch-3
Update readme-zh-tw.md
2025-01-17 15:54:50 +08:00
Dot.L 49bbc0754a Merge pull request #176 from jeak01/patch-4
Update readme-jp.md
2025-01-17 15:54:37 +08:00
Dot.L f21b061443 Merge pull request #177 from jeak01/patch-1
Update README.md
2025-01-17 15:54:20 +08:00
jeak 34446fae37 Update readme-jp.md 2025-01-17 14:59:10 +08:00
jeak d1aeb621d4 Update readme-zh-tw.md 2025-01-17 14:58:46 +08:00
jeak 2f81e087e7 Update readme-zh-cn.md 2025-01-17 14:58:19 +08:00
jeak fe96afc8c3 Update README.md 2025-01-17 14:57:31 +08:00
Dot.L 9236993c22 Merge pull request #173 from APIParkLab/feature/ai-balance
fix: Nsq returns no error directly after parsing JSON exceptionNsq re…
2025-01-17 11:35:43 +08:00
Liujian ad2d62d13b fix: Nsq returns no error directly after parsing JSON exceptionNsq returns no error directly after parsing JSON exception 2025-01-17 11:34:34 +08:00
Dot.L 8f5833ca15 Merge pull request #172 from APIParkLab/feature/ai-balance
fix: ai event handler read event error
2025-01-17 10:42:14 +08:00
Liujian 1adf8c890f fix: ai event handler read event error 2025-01-17 10:38:35 +08:00
Dot.L 416c2a56fb Merge pull request #170 from APIParkLab/feature/ai-balance
update init plugin config
2025-01-16 18:58:36 +08:00
Liujian 1140e43d67 update init plugin config 2025-01-16 18:53:58 +08:00
Dot.L ab4faa36da Merge pull request #167 from APIParkLab/feature/ai-balance
Feature/ai balance
2025-01-16 16:37:41 +08:00
Liujian 38ca9815ba update provider status default value 2025-01-16 16:36:25 +08:00
Liujian 125965dabd update build script 2025-01-16 16:36:06 +08:00
刘健 ce4369976c Merge branch 'feature/merge' into 'main'
fix: login page redirect multiple times (#166)

See merge request apipark/APIPark!158
2025-01-16 14:57:39 +08:00
刘健 dc340fc766 Merge branch 'feature/ai-balance' into 'main'
Feature/1.4 (#154)

See merge request apipark/APIPark!157
2025-01-15 16:04:24 +08:00
ScarChin c28e3ec5c2 fix: 1.3-beta版本,超级管理员(admin)账户无法修改分类和添加子分类,页面显示无权限操作 (#164) 2025-01-14 17:52:07 +08:00
ScarChin 6fe7cf18bd fix: login page redirect multiple times (#166)
* fix: System Settings - General After changing the interface language, the internal pages do not automatically follow the language switch

* fix: login page language error
2025-01-13 18:33:55 +08:00
Dot.L 5af9577d31 Merge pull request #165 from APIParkLab/feature/ai-balance
update docker run script
2025-01-13 11:25:50 +08:00
Liujian c03c37420d update docker run script 2025-01-13 11:24:29 +08:00
Dot.L b818c0feac Merge pull request #162 from APIParkLab/feature/ai-balance
Feature/ai balance
2025-01-08 11:26:18 +08:00
Liujian bcb3003784 Merge branch 'main-github-pro' into feature/ai-balance
# Conflicts:
#	frontend/packages/core/src/pages/aiApis/aiApisLayout.tsx
#	frontend/packages/core/src/pages/aiSetting/AIFlowChart.tsx
#	frontend/packages/core/src/pages/aiSetting/components/ModelCardNode.tsx
2025-01-08 11:25:55 +08:00
Liujian ecd033ffd9 Merge remote-tracking branch 'github-pro/main' into main-github-pro
# Conflicts:
#	frontend/packages/common/src/components/aoplatform/LanguageSetting.tsx
#	frontend/packages/common/src/components/aoplatform/TableBtnWithPermission.tsx
#	frontend/packages/common/src/components/aoplatform/intelligent-plugin/IntelligentPluginList.tsx
#	frontend/packages/common/src/components/aoplatform/prompt-editor/PromptEditorResizable.tsx
#	frontend/packages/common/src/const/permissions.ts
#	frontend/packages/common/src/contexts/GlobalStateContext.tsx
#	frontend/packages/common/src/hooks/pluginLoader.ts
#	frontend/packages/common/src/utils/systemRunning.ts
#	frontend/packages/core/src/components/AIProviderSelect/index.tsx
#	frontend/packages/core/src/const/const.tsx
#	frontend/packages/core/src/const/system/const.tsx
#	frontend/packages/core/src/pages/aiApis/index.tsx
#	frontend/packages/core/src/pages/aiSetting/AIFlowChart.tsx
#	frontend/packages/core/src/pages/aiSetting/AiSettingList.tsx
#	frontend/packages/core/src/pages/aiSetting/AiSettingModal.tsx
#	frontend/packages/core/src/pages/aiSetting/components/CustomEdge.tsx
#	frontend/packages/core/src/pages/aiSetting/components/KeyStatusNode.tsx
#	frontend/packages/core/src/pages/aiSetting/components/ModelCardNode.tsx
#	frontend/packages/core/src/pages/aiSetting/components/ServiceCardNode.tsx
#	frontend/packages/core/src/pages/aiSetting/constants.ts
#	frontend/packages/core/src/pages/aiSetting/styles.css
#	frontend/packages/core/src/pages/aiSetting/types.ts
#	frontend/packages/core/src/pages/keySettings/components/ApiKeyContent.tsx
#	frontend/packages/core/src/pages/keySettings/components/StatusFilter.tsx
#	frontend/packages/core/src/pages/keySettings/index.tsx
#	frontend/packages/dashboard/src/component/MonitorApiPage.tsx
2025-01-08 11:20:57 +08:00
Liujian abadeef7d2 ignore config.yaml 2025-01-08 11:14:47 +08:00
Liujian 427212ed13 update package script 2025-01-08 11:11:41 +08:00
ScarChin 73435497a2 Feature/1.4 (#154)
- Load balancing (can connect to multiple accounts, automatically switch accounts when there is no quota)
- AI call log
- Model rate configuration
2025-01-07 18:47:08 +08:00
秦圆圆 067cb0f21d Merge branch 'feature/1.4' into 'main'
fix: In the supplier load chart, the mouse should not show a hand shape except...

See merge request apipark/APIPark!156
2025-01-07 18:41:58 +08:00
scarqin a087a535d2 fix: When the current supplier is abnormal, there should be a line on the model pointing to the next model, which means that the APIs on this link are associated with the next valid supplier. 2025-01-07 18:40:43 +08:00
scarqin 28745e81f8 fix: The language option is wrong. The current language is Chinese, but the option is displayed as English. 2025-01-07 18:14:25 +08:00
scarqin 29c74bbbe1 fix: jump link error 2025-01-07 17:56:16 +08:00
scarqin 35a7b13cde fix: When the current supplier is abnormal, there should be a line on the model pointing to the next model, which means that the APIs on this link are associated with the next valid supplier. 2025-01-07 17:54:53 +08:00
scarqin 62b77cc9fa fix: error line 2025-01-07 17:21:21 +08:00
Liujian 782314d5bd Merge remote-tracking branch 'github-pro/feature/1.4' into feature/ai-balance 2025-01-07 16:53:41 +08:00
刘健 33b5e02f23 Merge branch 'feature/ai-balance' into 'main'
fix: ai provider status error

See merge request apipark/APIPark!155
2025-01-07 16:50:27 +08:00
Liujian ec518c2ece fix: ai provider status error 2025-01-07 16:49:47 +08:00
scarqin b7b2dff26b fix: In the supplier load chart, the mouse should not show a hand shape except for the cards that can be dragged and sorted. 2025-01-07 16:17:50 +08:00
刘健 456ffb8586 Merge branch 'feature/ai-balance' into 'main'
AI API token quantity docking completed

See merge request apipark/APIPark!154
2025-01-07 12:49:51 +08:00
Liujian 1d09965d9a AI API token quantity docking completed 2025-01-07 12:49:23 +08:00
秦圆圆 82cff8f66e Merge branch 'feature/1.4' into 'main'
fix: After the release log configuration is successful, there is no success...

See merge request apipark/APIPark!153
2025-01-07 11:33:54 +08:00
scarqin b97acc7862 fix: Details has two slashes 2025-01-07 11:32:29 +08:00
scarqin 0adc963129 fix: After the release log configuration is successful, there is no success prompt and the list is not refreshed 2025-01-07 10:45:42 +08:00
scarqin 4be1387c62 fix: system logs lack of edit permission 2025-01-07 10:32:03 +08:00
scarqin f4e17f0de7 fix: i18n error 2025-01-07 10:04:18 +08:00
刘健 a03e1aa1f8 Merge branch 'feature/ai-balance' into 'main'
fix: ai key config error

See merge request apipark/APIPark!152
2025-01-07 09:23:34 +08:00
Liujian 7fcfbb2a54 fix: ai key config error 2025-01-07 01:42:36 +08:00
秦圆圆 59a4761424 Merge branch 'feature/1.4' into 'main'
Feature/1.4

See merge request apipark/APIPark!151
2025-01-06 19:45:37 +08:00
scarqin 6ceae331ce fix: AI API should remove prefix matching drop-down selection 2025-01-06 19:29:15 +08:00
scarqin 2a1f0175a9 fix: There is no slide rail, so the bottom part cannot be displayed. 2025-01-06 19:14:09 +08:00
scarqin e5fca5f545 fix: No refetching of lists after deleting keyword search 2025-01-06 17:53:30 +08:00
刘健 3f8ebc4a19 Merge branch 'feature/ai-balance' into 'main'
update ai key status to gateway

See merge request apipark/APIPark!150
2025-01-06 10:57:54 +08:00
Liujian ff99f55b0a update ai key status to gateway 2025-01-06 10:57:23 +08:00
刘健 d049658cdc Merge branch 'feature/ai-balance' into 'main'
fix: ai key sort

See merge request apipark/APIPark!149
2025-01-06 10:26:39 +08:00
Liujian e8103b0dbe fix: ai key sort 2025-01-06 10:22:01 +08:00
刘健 537ea1fd83 Merge branch 'feature/ai-balance' into 'main'
Feature/ai balance

See merge request apipark/APIPark!148
2025-01-06 10:02:19 +08:00
Liujian fd66b2b351 ai balance finish 2025-01-06 09:47:23 +08:00
Liujian ab6ffb74b7 Merge remote-tracking branch 'origin/main' into feature/ai-balance 2025-01-05 23:25:08 +08:00
Liujian 20fb2b3083 update ai key iml 2025-01-05 23:25:00 +08:00
lichunxian e9877bb52b Merge branch 'feature/1.4' into 'main'
feat: aiApi detail page

See merge request apipark/APIPark!147
2025-01-03 17:47:21 +08:00
ningyv 7debf34fb0 feat: aiApi detail page 2025-01-03 17:46:23 +08:00
ningyv 41afaf4f66 Merge branch 'feature/1.4' of http://gitlab.eolink.com/apipark/APIPark into feature/1.4 2025-01-03 17:33:17 +08:00
ningyv ee19c214e7 feat: aiApi detail page 2025-01-03 17:33:06 +08:00
秦圆圆 534ca2b042 Merge branch 'feature/1.4' into 'main'
fix: The load diagram moves as a whole to the left so that the main content is...

See merge request apipark/APIPark!146
2025-01-03 17:14:05 +08:00
scarqin ac5cbd2d22 fix: KEY pool adjustment order will fail 2025-01-03 17:13:40 +08:00
scarqin 17372cd0a4 fix: The bottom margin of the banner should be sufficient 2025-01-03 16:37:36 +08:00
scarqin 0bbeb481f4 fix: The load diagram moves as a whole to the left so that the main content is in the middle and the AI ​​Services icon is aligned to the left 2025-01-03 16:29:27 +08:00
秦圆圆 61c9709974 Merge branch 'feature/1.4' into 'main'
Feature/1.4

See merge request apipark/APIPark!144
2025-01-03 16:12:34 +08:00
Liujian d0364e3734 Merge remote-tracking branch 'origin/feature/1.4' into feature/ai-balance 2025-01-03 11:25:59 +08:00
刘健 5b5852e336 Merge branch 'feature/ai-balance' into 'main'
update ai api list

See merge request apipark/APIPark!145
2025-01-03 10:47:10 +08:00
Liujian 883aeebc8f update ai api list 2025-01-03 10:46:25 +08:00
scarqin c16e0edaf0 i18n 2025-01-03 09:42:17 +08:00
刘健 98bb6eaf2a Merge branch 'feature/ai-balance' into 'main'
update ai api list

See merge request apipark/APIPark!143
2025-01-03 09:33:46 +08:00
Liujian 36d8b96b61 update ai api list 2025-01-03 09:33:12 +08:00
scarqin 3bb3d6a6cd feat: navigate 2025-01-03 09:24:32 +08:00
scarqin 9971a86d5c chore: apis 2025-01-03 09:09:40 +08:00
scarqin 71ab2c8dea fix: api key timestamp error 2025-01-03 09:06:36 +08:00
秦圆圆 80561c8784 Merge branch 'feature/1.4' into 'main'
Feature/1.4

See merge request apipark/APIPark!138
2025-01-03 08:20:23 +08:00
scarqin 4be0b1b3b6 feat: api url 2025-01-02 10:07:54 +08:00
scarqin 48a32e8f6d fix: padding error 2025-01-02 09:45:32 +08:00
scarqin 9e6fe50aed fix: provider tips 2025-01-02 09:32:19 +08:00
scarqin fa4edcba93 fix: alert api list tips 2025-01-02 09:29:03 +08:00
scarqin b863e3892e feat: add banner 2025-01-02 08:21:33 +08:00
scarqin 0a57a7b7ee feat: apilist 2024-12-31 17:21:56 +08:00
scarqin e249b62d13 chore: change disable to disabled 2024-12-31 16:17:53 +08:00
刘健 5c015f275b Merge branch 'feature/ai-balance' into 'main'
update api disable to disabled

See merge request apipark/APIPark!142
2024-12-31 15:24:55 +08:00
Liujian 6faddc15e9 update api disable to disabled 2024-12-31 15:24:36 +08:00
scarqin 894cd21032 feat: ai column add disable 2024-12-31 15:17:36 +08:00
scarqin 7a1b56e202 feat: apikey 2024-12-31 15:07:43 +08:00
刘健 19911eb8c8 Merge branch 'feature/ai-balance' into 'main'
fix: provider status incorrect

See merge request apipark/APIPark!141
2024-12-31 14:50:41 +08:00
Liujian a307917b66 fix: provider status incorrect 2024-12-31 14:48:19 +08:00
scarqin cb5f45acc7 feat: stopaable tips 2024-12-31 14:24:15 +08:00
scarqin 0dbf9c907d feat: add llm status manage 2024-12-31 12:01:42 +08:00
scarqin 9fc8234eaf feat: add priority 2024-12-31 10:27:50 +08:00
刘健 61840de99f Merge branch 'feature/ai-balance' into 'main'
update go-common version

See merge request apipark/APIPark!140
2024-12-31 10:17:36 +08:00
Liujian 30da6e10a1 update go-common version 2024-12-31 10:16:44 +08:00
scarqin 4650edbd17 refacor: delete useless code 2024-12-30 17:03:36 +08:00
scarqin 7646e3d9a1 feat: update list after edit modal 2024-12-30 17:00:09 +08:00
scarqin c5198b198a feat: ai model 2024-12-30 15:59:43 +08:00
scarqin 87b70a3faf feat: ai model detail 2024-12-30 14:59:22 +08:00
刘健 1ef0c7bd14 Merge branch 'feature/ai-balance' into 'main'
update ai provider list key

See merge request apipark/APIPark!139
2024-12-30 13:50:18 +08:00
Liujian 02ee5b8c7e update ai provider list key 2024-12-30 13:49:59 +08:00
scarqin 5a2b509d68 feat: ai apis 2024-12-27 21:28:35 +08:00
刘健 11cbcd45bb Merge branch 'feature/ai-balance' into 'main'
Feature/ai balance

See merge request apipark/APIPark!137
2024-12-27 16:56:28 +08:00
Liujian e82d5be71d update simple/providers/configured api 2024-12-27 16:55:54 +08:00
scarqin 065d5ade3f feat: api tab 2024-12-27 09:56:15 +08:00
Liujian 464015bed6 Merge branch 'main-github-pro' into feature/ai-balance 2024-12-26 18:22:30 +08:00
Liujian 190323cf05 Merge remote-tracking branch 'origin/main' into main-github-pro 2024-12-26 18:21:30 +08:00
刘健 94654c753b Merge branch 'feature/ai-balance' into 'main'
Add filtering options to the list

See merge request apipark/APIPark!136
2024-12-26 18:07:17 +08:00
Liujian 8a589982d1 Add filtering options to the list 2024-12-26 18:06:54 +08:00
刘健 bd9325c66d Merge branch 'feature/ai-balance' into 'main'
Feature/ai balance

See merge request apipark/APIPark!135
2024-12-26 17:26:01 +08:00
Liujian 1bdd4720bb ai api list add filter condition 2024-12-26 17:25:36 +08:00
Liujian 55aec4cc8b Merge branch 'main-github-pro' into feature/ai-balance 2024-12-26 16:48:03 +08:00
Liujian 5ec294207d update service list api 2024-12-26 16:46:11 +08:00
scarqin 3b45a339d3 feat: ai model config 2024-12-26 16:05:56 +08:00
秦圆圆 0742c2be33 Merge branch 'feature/1.4' into 'main'
Feature/1.4

See merge request apipark/APIPark!134
2024-12-26 15:54:20 +08:00
scarqin e8730d6d18 feat: apikey 2024-12-26 15:52:43 +08:00
刘健 2bc3b72e15 Merge branch 'feature/ai-balance' into 'main'
update simple configured providers

See merge request apipark/APIPark!133
2024-12-26 15:41:24 +08:00
Liujian 56124fd90d update simple configured providers 2024-12-26 15:41:07 +08:00
scarqin 81ccba83c3 feat: add api key 2024-12-26 15:39:52 +08:00
刘健 5f64a3ae33 Merge branch 'feature/ai-balance' into 'main'
Feature/ai balance

See merge request apipark/APIPark!132
2024-12-26 15:10:24 +08:00
Liujian a80b1aed08 finish ai provider api 2024-12-26 15:09:44 +08:00
scarqin 3724045e37 feat: add key 2024-12-26 14:36:24 +08:00
scarqin a368af0598 feat: add modal 2024-12-26 14:20:06 +08:00
scarqin 8128a7acac feat: add api keys 2024-12-25 20:23:47 +08:00
scarqin 51910e6740 feat: support sort table 2024-12-25 17:53:15 +08:00
scarqin 8a2be8195a feat: delete apikey 2024-12-25 17:36:26 +08:00
scarqin ec2c418c4d fix: provider change 2024-12-25 17:15:42 +08:00
scarqin b89b9e4ebd feat: sort api 2024-12-25 17:08:26 +08:00
scarqin de008edc68 feat: pagination and search api 2024-12-25 16:51:41 +08:00
scarqin 129c7a15c7 feat: ai provider component 2024-12-25 15:41:20 +08:00
scarqin 29325aa341 style: apikey layout 2024-12-25 15:05:19 +08:00
scarqin a864e67a6c feat: encapsulation select options 2024-12-25 14:43:29 +08:00
scarqin 190aff51b6 style: remove keys card border 2024-12-25 14:12:43 +08:00
scarqin ab398032df fix: some type error 2024-12-25 14:08:22 +08:00
scarqin 8f1d127e96 feat: remove attribute 2024-12-25 13:52:00 +08:00
scarqin 01ea108ab9 feat: add token 2024-12-25 12:01:19 +08:00
Dot.L 2b10162d5e Merge pull request #159 from APIParkLab/feature/ai-balance
add get simple ai provider api
2024-12-25 12:01:03 +08:00
Liujian 4b1e1a22db add get simple ai provider api 2024-12-25 11:59:34 +08:00
scarqin f500adb158 feat: apikey get 2024-12-25 10:38:28 +08:00
scarqin 5ec7e680e6 feat: template modal 2024-12-25 10:14:07 +08:00
Dot.L 7277389c9a Merge pull request #158 from APIParkLab/feature/ai-balance
Feature/ai balance
2024-12-24 18:23:14 +08:00
刘健 4c7a2737d0 Merge branch 'feature/ai-balance' into 'main'
update go.mod

See merge request apipark/APIPark!131
2024-12-24 18:20:44 +08:00
Liujian cd4594f3ae update go.mod 2024-12-24 18:20:09 +08:00
scarqin 4733b3c919 feat: apikeys 2024-12-24 18:14:50 +08:00
刘健 aa78945ed8 Merge branch 'feature/ai-balance' into 'main'
finish ai apis

See merge request apipark/APIPark!130
2024-12-24 18:01:41 +08:00
Liujian 7ac8beb161 finish ai apis 2024-12-24 18:00:46 +08:00
scarqin 0f30d85ae8 feat: add route apikey and ai api 2024-12-24 17:29:31 +08:00
scarqin f8a976290c feat: flow chart 2024-12-24 16:36:23 +08:00
scarqin cd73e76712 feat: use translateExtent to limit scroll area 2024-12-24 15:41:14 +08:00
scarqin 4616470493 disable dragger 2024-12-24 15:36:55 +08:00
scarqin ac6afad280 feat: flow chart 2024-12-24 15:31:02 +08:00
scarqin dde76789a1 feat: remove fit view 2024-12-24 15:14:52 +08:00
scarqin b8c4482dad feat: custom edge 2024-12-24 15:06:48 +08:00
scarqin fb90189f3c feat: keycard change place 2024-12-24 14:37:45 +08:00
scarqin ac56f9f7a6 fet 2024-12-24 14:34:16 +08:00
scarqin 9fd9979ce3 feat: model 2024-12-24 14:28:10 +08:00
scarqin a1ae7ca119 feat: fetch data from api 2024-12-24 13:51:08 +08:00
scarqin 08f29b7067 feat: change component place 2024-12-24 11:58:51 +08:00
scarqin 503367b8e2 feat: dmo 2024-12-24 11:35:31 +08:00
scarqin 36aac1d8c8 refactor: encapsulation constant 2024-12-24 10:37:10 +08:00
scarqin 42229fe6bc feat: draggable button 2024-12-23 18:36:12 +08:00
scarqin 0ae824ec35 feat: draggable 2024-12-23 18:17:51 +08:00
scarqin 0a1d8245ee feat: draggable 2024-12-23 18:16:17 +08:00
scarqin 95c2288890 feat: add multiple data 2024-12-23 17:56:22 +08:00
scarqin 7ac97ca739 chore: 文件拆分 2024-12-23 17:45:50 +08:00
scarqin 14548e4bc5 feat: change type status 2024-12-23 17:42:55 +08:00
scarqin 72c5e7c35a feat: change group title 2024-12-23 17:31:58 +08:00
scarqin 4fbc4fccdc chore: card status 2024-12-23 17:14:23 +08:00
scarqin a4de291155 feat: add handler 2024-12-23 16:11:12 +08:00
Dot.L 67ea0a5c24 Merge pull request #156 from APIParkLab/feature/ai-balance
update go-common dependence in go.mod
2024-12-23 16:05:41 +08:00
刘健 d5eeab16b6 Merge branch 'feature/ai-balance' into 'main'
update go-common dependence in go.mod

See merge request apipark/APIPark!129
2024-12-23 15:58:43 +08:00
Liujian 0be2248f41 update go-common dependence in go.mod 2024-12-23 15:58:24 +08:00
刘健 7b7f968ae2 Merge branch 'feature/ai-balance' into 'main'
Feature/ai balance

See merge request apipark/APIPark!128
2024-12-23 15:51:09 +08:00
Dot.L ca1e1abeb8 Merge pull request #155 from APIParkLab/feature/ai-balance
finish ai key api
2024-12-23 15:49:27 +08:00
Liujian 00451ae78f finish ai key api 2024-12-23 15:48:19 +08:00
scarqin 04e9fc7315 feat: block 2024-12-23 14:09:53 +08:00
scarqin 6dbef3f743 feat: basic card component 2024-12-23 14:00:24 +08:00
scarqin 42cc086bd0 chore: add global rule 2024-12-23 11:36:25 +08:00
scarqin 4c40b04c8e chore: add global_rules.md 2024-12-23 10:16:59 +08:00
scarqin 6126ba8678 feat: chart 2024-12-20 20:26:18 +08:00
scarqin 51cc7692cb chore: refactor format eslint and prettier code 2024-12-19 16:17:50 +08:00
scarqin 414f8c64c0 chore: add remove unused 2024-12-19 15:49:20 +08:00
scarqin 60a735b726 change 2024-12-18 17:37:20 +08:00
scarqin d6f6642271 test 2024-12-18 17:33:39 +08:00
scarqin be3880a05d test 2024-12-18 17:33:08 +08:00
scarqin f40f1a4304 test 2024-12-18 17:32:23 +08:00
scarqin d8bb1d649c test 2024-12-18 17:31:03 +08:00
scarqin 1bf43cf137 test 2024-12-18 17:30:16 +08:00
scarqin 86fa87bb7a test 2024-12-18 17:28:17 +08:00
scarqin 5c89b5a7a2 test 2024-12-18 17:27:49 +08:00
scarqin 9a8b4cacff test 2024-12-18 17:25:54 +08:00
scarqin da6a54aa74 test 2024-12-18 17:24:02 +08:00
scarqin 478d65a649 test 2024-12-18 17:20:47 +08:00
scarqin abd391266a test 2024-12-18 17:19:10 +08:00
scarqin f282e0e69b test 2024-12-18 17:13:29 +08:00
scarqin f283cbbcca feat: push 2024-12-18 17:11:43 +08:00
scarqin 89a392b749 fix: login page refresh multiple times 2024-12-18 15:48:51 +08:00
Dot.L 2a3e016dc2 Merge pull request #149 from APIParkLab/feature/aibug-fix
add default router when create new rest service
2024-12-16 14:43:26 +08:00
刘健 5d56177bc7 Update .gitlab-ci.yml file 2024-12-16 14:34:33 +08:00
刘健 c043dbf8e5 Merge branch 'feature/aibug-fix' into 'main'
add default router when create new rest service

See merge request apipark/APIPark!127
2024-12-16 14:33:14 +08:00
Liujian af0ec4e3da add default router when create new rest service 2024-12-16 14:31:52 +08:00
刘健 618bc05a8b Merge branch 'feature/aibug-fix' into 'main'
chore: update index.tsx

See merge request apipark/APIPark!126
2024-12-13 20:06:43 +08:00
ningyv b86f0a874f Merge pull request #147 from APIParkLab/fix/fixbug-cx
fix: consumer permission
2024-12-13 20:02:45 +08:00
lichunxian c473c72b84 Merge branch 'fix/fixbug-cx' into 'main'
fix: consumer permission

See merge request apipark/APIPark!125
2024-12-13 20:01:59 +08:00
ningyv 87405dc9ea fix: consumer permission 2024-12-13 20:00:38 +08:00
Dot.L b01993fe28 Merge pull request #146 from APIParkLab/feature/aibug-fix
fix aksk bug
2024-12-13 19:41:10 +08:00
Liujian 24c7cd0c8d fix aksk bug 2024-12-13 18:52:21 +08:00
Dot.L 2739f84fea Merge pull request #145 from APIParkLab/feature/aibug-fix
fix ai provider upstream bug
2024-12-10 17:26:47 +08:00
Liujian 98304b8816 fix ai provider upstream bug 2024-12-10 17:24:51 +08:00
ningyv 9a29cef69a Merge branch 'main' of github.com:APIParkLab/APIPark 2024-12-10 15:34:44 +08:00
lichunxian ff9738f5cc Merge branch 'fix/certificatePermission' into 'main'
fix: table-permission

See merge request apipark/APIPark!124
2024-12-10 15:17:11 +08:00
ningyv a657908c20 fix: table-permission 2024-12-10 15:16:19 +08:00
Dot.L f59128f25d Merge pull request #143 from eltociear/patch-1
chore: update index.tsx
2024-12-09 21:48:14 +08:00
Liujian c08a617c65 Merge remote-tracking branch 'origin/main' into main-github-pro 2024-12-09 21:42:09 +08:00
Liujian 5017fce70c update init log 2024-12-09 21:32:57 +08:00
lichunxian 304cd9ddfc Merge branch 'fix/certificatePermission' into 'main'
fix: implement certificate popup permission handling

See merge request apipark/APIPark!123
2024-12-09 15:22:29 +08:00
ningyv e7eec6e160 fix: implement certificate popup permission handling 2024-12-09 15:18:59 +08:00
Liujian 3dd44c97e9 Automatically publish policies and logs during cluster initialization 2024-12-09 00:43:05 +08:00
Liujian bc00f2d577 update loki publish 2024-12-09 00:17:50 +08:00
Liujian d80bfe61df update .gitignore 2024-12-06 18:48:00 +08:00
lichunxian de3ac01b98 Merge branch 'feature/dataLogPage' into 'main'
fix: improve column width adjustment and optimize date picker performance

See merge request apipark/APIPark!122
2024-12-06 18:03:16 +08:00
ningyv 5c488fe4ea fix: improve column width adjustment and optimize date picker performance 2024-12-06 18:02:44 +08:00
刘健 1d7874fad6 Merge branch 'feature/data-mask' into 'main'
update publish problem

See merge request apipark/APIPark!121
2024-12-06 16:13:23 +08:00
Liujian c4f337f2ae update publish problem 2024-12-06 16:12:49 +08:00
lichunxian 09d70866e3 Merge branch 'feature/dataLogPage' into 'main'
Feature/data log page

See merge request apipark/APIPark!120
2024-12-06 15:25:51 +08:00
ningyv 5052720efb fix: refine time range calculation with second-level precision 2024-12-06 15:24:06 +08:00
ningyv 73f53a913c fix: resolve subscriber permissions 2024-12-06 14:22:59 +08:00
lichunxian 13ce234ac8 Merge branch 'feature/dataLogPage' into 'main'
feat: integrate global policy API and implement data log page

See merge request apipark/APIPark!119
2024-12-06 11:51:13 +08:00
ningyv a38ee5e16c feat: integrate global policy API and implement data log page 2024-12-06 11:50:32 +08:00
刘健 0a30ea157b Merge branch 'feature/data-mask' into 'main'
update service publish

See merge request apipark/APIPark!118
2024-12-06 11:32:15 +08:00
Liujian 658f0cbea5 update service publishing difference comparison field 2024-12-06 11:31:58 +08:00
Liujian 51378e922f update service publish 2024-12-06 11:02:40 +08:00
刘健 295aee494e Merge branch 'feature/data-mask' into 'main'
add service strategy log

See merge request apipark/APIPark!117
2024-12-06 10:49:21 +08:00
Liujian 72350f2fae add service strategy log 2024-12-06 10:47:47 +08:00
刘健 49bbadd721 Merge branch 'feature/data-mask' into 'main'
update service publish

See merge request apipark/APIPark!116
2024-12-06 10:40:20 +08:00
Liujian 220e062d1e update service publish 2024-12-06 10:39:59 +08:00
lichunxian b0ac98a5a9 Merge branch 'feature/dataLogPage' into 'main'
feat: integrate global policy API and implement data log page

See merge request apipark/APIPark!115
2024-12-05 18:53:51 +08:00
ningyv 84decf1310 feat: integrate global policy API and implement data log page 2024-12-05 18:53:11 +08:00
刘健 7d66f2628a Merge branch 'feature/data-mask' into 'main'
fix log bug:Keyword query failed

See merge request apipark/APIPark!114
2024-12-05 18:17:49 +08:00
Liujian 285e0c7a81 fix log bug:Keyword query failed 2024-12-05 18:17:29 +08:00
刘健 e0153d6c11 Merge branch 'feature/data-mask' into 'main'
fix logs bug

See merge request apipark/APIPark!113
2024-12-05 17:21:46 +08:00
Liujian c241a0ba8f fix logs bug 2024-12-05 17:20:11 +08:00
刘健 ca7c7efc9c Merge branch 'feature/data-mask' into 'main'
fix log bug

See merge request apipark/APIPark!112
2024-12-05 17:15:04 +08:00
Liujian 6a29b9492c fix log bug 2024-12-05 17:14:26 +08:00
刘健 599040d64a Merge branch 'feature/data-mask' into 'main'
update strategy publish bug

See merge request apipark/APIPark!111
2024-12-05 15:44:22 +08:00
Liujian ec6c2303be update strategy publish bug 2024-12-05 15:43:42 +08:00
刘健 f4419d2357 Merge branch 'feature/data-mask' into 'main'
update log label

See merge request apipark/APIPark!109
2024-12-05 15:06:28 +08:00
Liujian c75df95cce update log label 2024-12-05 15:04:43 +08:00
刘健 b2e8c75572 Merge branch 'feature/data-mask' into 'main'
Feature/data mask

See merge request apipark/APIPark!108
2024-12-05 14:50:19 +08:00
Liujian 6bf3737c24 Merge remote-tracking branch 'origin/main' into feature/data-mask
# Conflicts:
#	frontend/packages/core/src/pages/policy/dataMasking/DataMasking.tsx
2024-12-05 14:50:00 +08:00
Liujian 075c1f234a update eosc version 2024-12-05 14:43:24 +08:00
Liujian fd21273251 data mask log commit 2024-12-05 14:39:57 +08:00
Ikko Eltociear Ashimine bb822801fb chore: update index.tsx
protocal -> protocol
2024-12-04 15:54:09 +09:00
Liujian 8d1fc7faa5 Merge remote-tracking branch 'github-pro/feature/v1.3/mj' into feature/data-mask 2024-12-03 16:07:13 +08:00
ningyv 94728e7b6a Merge branch 'feature/v1.3/mj' of github.com:APIParkLab/APIPark into feature/v1.3/mj 2024-11-29 18:39:20 +08:00
ningyv e031f80b2e feature: dataMask logs dialog 2024-11-29 18:39:13 +08:00
lichunxian 6111dc69ad Merge branch 'fix/copyIssue' into 'main'
Fix/copy issue

See merge request apipark/APIPark!107
2024-11-29 10:39:28 +08:00
杨梦洁 49188b291b Merge branch 'feature/v1.3/mj' into 'main'
fix: Dashboard Table Height

See merge request apipark/APIPark!106
2024-11-29 10:36:45 +08:00
杨梦洁 ba8632aa22 fix: Dashboard Table Height 2024-11-29 10:35:32 +08:00
ningyv 726bbe4f6f fix: Fix the issue where copying the URL doesn't work 2024-11-29 10:22:40 +08:00
ningyv f1e1d94380 fix: Fixed side navigation disappearing 2024-11-29 10:08:06 +08:00
lichunxian 607970a1ed Merge branch 'fix/fix-table' into 'main'
Fix/fix table

See merge request apipark/APIPark!105
2024-11-29 09:55:26 +08:00
ningyv aef65d9d05 Merge branch 'main' of http://gitlab.eolink.com/apipark/APIPark 2024-11-29 09:45:55 +08:00
ningyv 4d26fe1edd Fix Set the header width 2024-11-29 09:41:50 +08:00
ningyv e0bc987c25 Fix icon issues 2024-11-28 19:15:02 +08:00
刘健 a07c5c8d9d Merge branch 'feature/data-mask' into 'main'
update transaction

See merge request apipark/APIPark!104
2024-11-28 18:41:56 +08:00
Liujian 777256bf30 update transaction 2024-11-28 18:40:00 +08:00
Maggie 60de3b3250 Merge pull request #141 from APIParkLab/feature/v1.3/mj
fix: get service remote option
2024-11-28 18:39:17 +08:00
杨梦洁 074919b70c Merge branch 'feature/v1.3/mj' into 'main'
fix: get service remote option

See merge request apipark/APIPark!103
2024-11-28 18:38:51 +08:00
杨梦洁 f90e9b4eba fix: get service remote option 2024-11-28 18:38:12 +08:00
刘健 6789b1c327 Merge branch 'feature/data-mask' into 'main'
fix strategy bug

See merge request apipark/APIPark!102
2024-11-28 18:35:20 +08:00
Liujian f46fe0ec4c fix strategy bug 2024-11-28 18:34:15 +08:00
Maggie f88aea2d32 Merge pull request #140 from APIParkLab/feature/v1.3/mj
fix: service data-masking layout
2024-11-28 18:24:44 +08:00
杨梦洁 29f534501c Merge branch 'feature/v1.3/mj' into 'main'
fix: service data-masking layout

See merge request apipark/APIPark!101
2024-11-28 18:22:44 +08:00
刘健 7b18e06006 Merge branch 'feature/data-mask' into 'main'
Feature/data mask

See merge request apipark/APIPark!100
2024-11-28 18:19:38 +08:00
Liujian 50567665ab openapi取消登录校验 2024-11-28 18:19:08 +08:00
杨梦洁 2135205f40 fix: service data-masking layout 2024-11-28 18:14:02 +08:00
Liujian 51241108fa Merge remote-tracking branch 'github-pro/main' into feature/data-mask 2024-11-28 17:35:53 +08:00
Maggie 05c5b2968d Merge pull request #139 from APIParkLab/feature/v1.3/mj
Feature/v1.3/mj
2024-11-28 17:01:32 +08:00
杨梦洁 00e6d1aa7a Merge branch 'feature/v1.3/mj' into 'main'
fix: Modify Context Arct

See merge request apipark/APIPark!99
2024-11-28 17:01:11 +08:00
杨梦洁 eb4fb872a3 fix: Modify Context Arct 2024-11-28 16:59:51 +08:00
杨梦洁 9e7825aee8 Merge branch 'feature/v1.3/mj' into 'main'
fix: add translation

See merge request apipark/APIPark!98
2024-11-28 13:49:43 +08:00
杨梦洁 f8b75c7237 fix: add translation 2024-11-28 13:47:31 +08:00
刘健 843b2f32e0 Merge branch 'feature/data-mask' into 'main'
add publish tip

See merge request apipark/APIPark!97
2024-11-28 11:17:36 +08:00
Liujian 4db7154130 add publish tip 2024-11-28 11:17:02 +08:00
刘健 c7190a0d07 Merge branch 'feature/data-mask' into 'main'
fix rest service publish

See merge request apipark/APIPark!95
2024-11-28 10:49:16 +08:00
Maggie 8bd273c48a Merge pull request #137 from APIParkLab/feature/v1.3/mj
fix: role list scroll bug and add translation
2024-11-28 10:47:44 +08:00
杨梦洁 9f0e9a5525 Merge branch 'feature/v1.3/mj' into 'main'
fix: role list scroll bug and add translation

See merge request apipark/APIPark!96
2024-11-28 10:41:45 +08:00
杨梦洁 1486c56249 fix: role list scroll bug and add translation 2024-11-28 10:40:43 +08:00
Liujian 53d895f046 fix rest service publish 2024-11-27 20:18:23 +08:00
刘健 d6e0ea049a Merge branch 'feature/data-mask' into 'main'
finish service publish

See merge request apipark/APIPark!94
2024-11-27 19:47:16 +08:00
Liujian 58f192b6e9 finish service publish 2024-11-27 19:46:52 +08:00
Maggie dba4bae830 Merge pull request #136 from APIParkLab/feature/v1.3/mj
Feature/v1.3/mj
2024-11-27 19:22:06 +08:00
杨梦洁 8df6362ac0 Merge branch 'feature/v1.3/mj' into 'main'
fix: data-masking and integration bugs

See merge request apipark/APIPark!93
2024-11-27 19:21:58 +08:00
杨梦洁 2a84bdcf9f fix: data-masking and integration bugs 2024-11-27 19:20:47 +08:00
刘健 158f94f069 Merge branch 'feature/data-mask' into 'main'
Feature/data mask

See merge request apipark/APIPark!92
2024-11-27 19:05:28 +08:00
Liujian 3fde0fa7a3 update service publish rule 2024-11-27 19:05:11 +08:00
Liujian 1ac9a0e154 Merge remote-tracking branch 'origin/main' into feature/data-mask 2024-11-27 18:30:46 +08:00
杨梦洁 8c816edab4 Merge branch 'feature/v1.3/mj' into 'main'
fix: data-masking bugs

See merge request apipark/APIPark!91
2024-11-27 18:22:41 +08:00
杨梦洁 858b8a25bb fix: data-masking bugs 2024-11-27 18:21:43 +08:00
刘健 9dfac9c5f5 Merge branch 'feature/data-mask' into 'main'
add open api swagger

See merge request apipark/APIPark!90
2024-11-27 13:52:15 +08:00
Liujian 0a828e843d add open api swagger 2024-11-27 13:51:55 +08:00
刘健 16414f6a4a Merge branch 'feature/data-mask' into 'main'
add strategy permit

See merge request apipark/APIPark!89
2024-11-27 11:47:22 +08:00
Liujian 4e902e891e add strategy permit 2024-11-27 11:46:56 +08:00
刘健 5cff8b3bed Merge branch 'feature/data-mask' into 'main'
add api: /simple/service/apis

See merge request apipark/APIPark!88
2024-11-27 00:35:11 +08:00
Liujian b5671d14a4 add api: /simple/service/apis 2024-11-27 00:34:24 +08:00
刘健 be202fd53b Merge branch 'feature/data-mask' into 'main'
Feature/data mask

See merge request apipark/APIPark!87
2024-11-26 23:50:14 +08:00
Liujian 601663b658 system setting add site_prefix 2024-11-26 23:49:44 +08:00
Liujian cb63931f30 finish data mask strategy 2024-11-26 23:44:00 +08:00
Liujian 651a1de601 Merge remote-tracking branch 'github-pro/main' into feature/data-mask 2024-11-25 10:35:21 +08:00
杨梦洁 841adc05cd Merge branch 'feature/v1.3/mj' into 'main'
fix: Change Dashboard Fields

See merge request apipark/APIPark!86
2024-11-21 18:38:13 +08:00
杨梦洁 e78f1b804f fix: Change Dashboard Fields 2024-11-21 18:37:39 +08:00
Liujian 8d94a7e872 Merge remote-tracking branch 'origin/feature/v1.3/mj' into feature/data-mask 2024-11-21 17:36:57 +08:00
Liujian ce53bb2d47 Initial submission of data desensitization strategy backend 2024-11-21 17:36:13 +08:00
Maggie 09a74768d5 Merge pull request #135 from APIParkLab/feature/v1.3/mj
Feature/v1.3/mj
2024-11-21 17:05:48 +08:00
杨梦洁 e4f89f7084 Merge branch 'feature/v1.3/mj' into 'main'
fix: Change Vite Config

See merge request apipark/APIPark!85
2024-11-21 16:43:53 +08:00
杨梦洁 a6df9e1f04 fix: Change Vite Config 2024-11-21 16:42:32 +08:00
杨梦洁 0e885d21f9 Merge branch 'feature/v1.3/mj' into 'main'
fix: Change File Name

See merge request apipark/APIPark!84
2024-11-21 16:34:31 +08:00
杨梦洁 387eccb44a fix: Change File Name 2024-11-21 16:32:07 +08:00
杨梦洁 7086073227 Merge branch 'feature/v1.3/mj' into 'main'
Feature/v1.3/mj

See merge request apipark/APIPark!83
2024-11-21 16:26:59 +08:00
杨梦洁 9006a9719e fix: Change File Name 2024-11-21 16:25:18 +08:00
杨梦洁 9e554ca0af fix: Change file name 2024-11-21 16:20:52 +08:00
杨梦洁 6899084f06 Merge branch 'main' into feature/v1.3/mj 2024-11-21 16:12:16 +08:00
杨梦洁 4396902982 Merge branch 'feature/v1.3/mj' into 'main'
Feature/v1.3/mj

See merge request apipark/APIPark!82
2024-11-21 16:11:42 +08:00
杨梦洁 73dc9c3439 feat: Complete static pages for Phase 1 of V1.3 2024-11-21 16:08:08 +08:00
Liujian 3c59985734 add gitlab-ci 2024-11-15 14:35:27 +08:00
Liujian 13a23a9753 Merge remote-tracking branch 'github-pro/main' 2024-11-15 14:21:23 +08:00
Dot.L 3c543d686a Merge pull request #134 from PeterDaveHelloKitchen/zh-TW
Improve zh-TW Traditional Chinese locale
2024-11-15 14:19:39 +08:00
杨梦洁 2bd0bb68a1 feat: Merge MF with data-masking list 2024-11-15 13:42:30 +08:00
lcx 9d9dbd0048 feat: Global/Service Policy Development, Add Service Details Integration Tab 2024-11-15 10:44:16 +08:00
杨梦洁 a1dcdd49fb feat: plugin system 2024-11-14 19:09:46 +08:00
Peter Dave Hello 880e97a922 Improve zh-TW Traditional Chinese locale 2024-11-14 05:49:34 +08:00
maggieyyy 9ba1537f18 fix: Move plugin code to common 2024-11-06 14:26:38 +08:00
maggieyyy c0d167a2b0 Merge branch 'main' into feature/mf 2024-11-06 11:33:21 +08:00
maggieyyy 3931f9c679 feat: plugin system 2024-11-05 16:20:40 +08:00
Dot.L 3e4d2b069a Merge pull request #130 from APIParkLab/feature/permit
Feature/permit
2024-11-04 11:06:03 +08:00
Liujian d679f69386 Merge branch 'main-github' into feature/permit
# Conflicts:
#	go.mod
2024-11-04 11:05:30 +08:00
Liujian 193276a0b2 update go.mod 2024-11-04 11:03:40 +08:00
Liujian 1e308eea98 Merge remote-tracking branch 'origin/main' into main-github 2024-11-04 11:00:05 +08:00
Liujian cc9ffdd182 fix service info no prefix 2024-11-04 10:59:13 +08:00
Liujian 1e4a8afc11 Merge remote-tracking branch 'origin/main' into main-github 2024-11-04 10:49:05 +08:00
杨梦洁 b6dee4671a Merge branch 'feature/v1.2' into 'main'
fix: Modify service inside access

See merge request apipark/APIPark!81
2024-11-04 10:46:21 +08:00
maggieyyy 98756d4c7f fix: Modify service inside access 2024-11-04 10:44:30 +08:00
Liujian 16c6535baf Merge remote-tracking branch 'github-pro/main' into main-github 2024-11-01 19:03:17 +08:00
Liujian fe2c6dafcd update .gitignore 2024-11-01 19:01:50 +08:00
刘健 1c531fb659 Merge branch 'feature/permit' into 'main'
Feature/permit

See merge request apipark/APIPark!80
2024-11-01 18:53:22 +08:00
Liujian 2ece064216 update ai permit 2024-11-01 18:52:50 +08:00
杨梦洁 fe74e18ea3 Merge branch 'feature/v1.2' into 'main'
fix: Modify link access

See merge request apipark/APIPark!79
2024-11-01 18:42:40 +08:00
Maggie fa714f7176 Merge pull request #129 from APIParkLab/feature/v1.2
fix: Modify link access
2024-11-01 18:42:26 +08:00
maggieyyy 7a057bda13 fix: Modify link access 2024-11-01 18:41:16 +08:00
maggieyyy 7348828cc3 fix: Modify execute list 2024-11-01 18:17:16 +08:00
Liujian 74ef7b58fb Merge remote-tracking branch 'github-pro/main' into feature/permit 2024-11-01 18:05:14 +08:00
Liujian 3fc784ec9d Merge remote-tracking branch 'origin/main' into feature/permit 2024-11-01 17:59:30 +08:00
Maggie 52292aefed Merge pull request #128 from APIParkLab/feature/v1.2
Feature/v1.2
2024-11-01 16:45:24 +08:00
杨梦洁 ba0088ed73 Merge branch 'feature/v1.2' into 'main'
fix: Modify consumer list reload and subscriber option

See merge request apipark/APIPark!78
2024-11-01 16:44:48 +08:00
maggieyyy 452e64c919 fix: Modify consumer list reload and subscriber option 2024-11-01 16:42:34 +08:00
Liujian ad7df9a6ef Merge remote-tracking branch 'origin/main' into feature/permit 2024-11-01 16:19:35 +08:00
Liujian abb55346f9 update subscribe permit 2024-11-01 16:19:25 +08:00
杨梦洁 b16ed52378 Merge branch 'feature/v1.2' into 'main'
fix: Add team selector to consumer

See merge request apipark/APIPark!77
2024-11-01 15:49:53 +08:00
maggieyyy be8d347b0c fix: Add team selector to consumer 2024-11-01 15:48:51 +08:00
Dot.L 0146794b74 Update readme-zh-tw.md 2024-11-01 15:26:33 +08:00
Dot.L 996319a9cb Update readme-zh-cn.md 2024-11-01 15:26:15 +08:00
Dot.L a68b978044 Update readme-jp.md 2024-11-01 15:25:55 +08:00
Dot.L 556f8f1db0 Update README.md 2024-11-01 15:25:15 +08:00
Liujian bbee4b42ae Merge remote-tracking branch 'github-pro/main' into feature/permit 2024-11-01 14:59:54 +08:00
杨梦洁 935227f104 Merge branch 'feature/v1.2' into 'main'
Feature/v1.2

See merge request apipark/APIPark!76
2024-11-01 14:51:56 +08:00
Maggie 9e540a2128 Merge pull request #127 from APIParkLab/feature/v1.2
Feature/v1.2
2024-11-01 14:49:21 +08:00
maggieyyy 3c7dbd6b0b fix: consumer menu access bug 2024-11-01 14:48:18 +08:00
maggieyyy 4809299f86 fix: consumer menu access bug 2024-11-01 14:48:10 +08:00
杨梦洁 41ad5f5109 Merge branch 'feature/v1.2' into 'main'
fix: consumer menu access bug

See merge request apipark/APIPark!75
2024-11-01 14:46:49 +08:00
maggieyyy 104bd61576 fix: consumer menu access bug 2024-11-01 14:45:32 +08:00
Liujian e833233982 Merge remote-tracking branch 'github-pro/main' into feature/permit 2024-11-01 14:26:37 +08:00
Maggie 8f83dc5fd4 Merge pull request #126 from APIParkLab/feature/v1.2
Feature/v1.2
2024-11-01 14:24:51 +08:00
杨梦洁 9f9d45e59c Merge branch 'feature/v1.2' into 'main'
Feature/v1.2

See merge request apipark/APIPark!74
2024-11-01 14:24:14 +08:00
maggieyyy bb27293aba fix: Modify department children type 2024-11-01 14:23:05 +08:00
maggieyyy 445b1277e9 fix: Modify department children type 2024-11-01 14:21:04 +08:00
刘健 3016f563bf Merge branch 'feature/permit' into 'main'
Feature/permit

See merge request apipark/APIPark!73
2024-11-01 14:19:48 +08:00
Liujian d1b9c29f0f update permit bug 2024-11-01 14:19:17 +08:00
maggieyyy 255c03a4a3 fix: Add empty to member transfer 2024-11-01 13:54:33 +08:00
maggieyyy b49c377b5f fix: plugin config 2024-11-01 13:39:52 +08:00
Liujian 45fcda443c Merge remote-tracking branch 'origin/main' into feature/permit 2024-11-01 11:03:21 +08:00
Liujian 73daecf9b7 update permit 2024-11-01 11:01:45 +08:00
杨梦洁 e6f5e06ca5 Merge branch 'feature/v1.2' into 'main'
fix: Modify subscribe options

See merge request apipark/APIPark!72
2024-10-31 14:16:30 +08:00
maggieyyy 9677d1dba9 fix: Modify subscribe options 2024-10-31 14:14:44 +08:00
maggieyyy 134004e787 fix: Modify config 2024-10-31 13:59:06 +08:00
maggieyyy 6ea6d5e220 Merge branch 'main' into feature/mf 2024-10-31 09:27:08 +08:00
杨梦洁 003758e8cc Merge branch 'feature/v1.2' into 'main'
fix: delete log

See merge request apipark/APIPark!71
2024-10-31 09:25:28 +08:00
Maggie 3054a4ee49 Merge pull request #124 from APIParkLab/feature/v1.2
fix: delete log
2024-10-31 09:25:15 +08:00
maggieyyy 21aeadcc56 fix: delete log 2024-10-31 09:14:24 +08:00
Maggie d5b4374c0d Merge pull request #123 from APIParkLab/feature/v1.2
fix: Modify access
2024-10-30 18:40:10 +08:00
杨梦洁 39f6e449ed Merge branch 'feature/v1.2' into 'main'
fix: Modify access

See merge request apipark/APIPark!70
2024-10-30 18:39:59 +08:00
maggieyyy a87cbedd52 fix: Modify access 2024-10-30 18:38:39 +08:00
maggieyyy 90649ce00b fix: Modify mock plugin config 2024-10-30 17:52:41 +08:00
maggieyyy de3eb7f259 fix: Modify mock plugin config 2024-10-30 17:51:10 +08:00
maggieyyy 5298475de2 merge 2024-10-30 14:24:16 +08:00
Maggie 5f4c573282 Merge pull request #122 from APIParkLab/feature/v1.2
fix: Modify local path
2024-10-30 10:59:54 +08:00
Liujian 16084dabfe update ap-account version 2024-10-30 10:45:58 +08:00
杨梦洁 7c46243641 Merge branch 'feature/v1.2' into 'main'
fix: Modify local path

See merge request apipark/APIPark!69
2024-10-30 09:08:35 +08:00
maggieyyy 96f1913592 fix: Modify local path 2024-10-29 18:32:45 +08:00
杨梦洁 b92cad8d91 Merge branch 'feature/v1.2' into 'main'
Feature/v1.2

See merge request apipark/APIPark!68
2024-10-29 17:46:36 +08:00
JackLiu f968dbe926 Merge pull request #121 from rolealiu/main
Update v1.2 translation
2024-10-29 17:29:21 +08:00
JackLiu c693a78cc1 Merge branch 'APIParkLab:main' into main 2024-10-29 17:28:51 +08:00
HaoZhen Liu 4aa1b6070b update v1.2 translation 2024-10-29 17:28:41 +08:00
Maggie 08724b1d53 Merge pull request #120 from APIParkLab/feature/v1.2
Feature/v1.2
2024-10-29 17:05:29 +08:00
杨梦洁 6c39c8c73b Merge branch 'feature/v1.2' into 'main'
fix: Add psw to account

See merge request apipark/APIPark!67
2024-10-29 16:47:44 +08:00
maggieyyy c3d35ac282 fix: Add psw to account 2024-10-29 16:44:31 +08:00
杨梦洁 37c6a562cd Merge branch 'feature/v1.2' into 'main'
fix: Modify member transfer icon and department

See merge request apipark/APIPark!66
2024-10-29 15:13:44 +08:00
maggieyyy 98ab569665 fix: Modify member transfer icon and department 2024-10-29 15:12:43 +08:00
Dot.L 318d4194c3 Merge pull request #119 from APIParkLab/feature/permission
update i18n
2024-10-29 14:20:19 +08:00
Liujian 4b50b27e14 update i18n 2024-10-29 14:19:36 +08:00
杨梦洁 af02d1727c Merge branch 'feature/v1.2' into 'main'
fix: update translation

See merge request apipark/APIPark!65
2024-10-29 13:54:49 +08:00
Maggie d2a39999be Merge pull request #118 from APIParkLab/feature/v1.2
fix: update translation
2024-10-29 13:54:42 +08:00
maggieyyy 3207a06e3f fix: update translation 2024-10-29 13:52:48 +08:00
Maggie 98457883cc Merge pull request #117 from APIParkLab/feature/v1.2
Feature/v1.2
2024-10-29 13:39:34 +08:00
杨梦洁 8e4ce11053 Merge branch 'feature/v1.2' into 'main'
Feature/v1.2

See merge request apipark/APIPark!64
2024-10-29 13:39:06 +08:00
maggieyyy 6ae5b4992f fix: Modify guide link 2024-10-29 13:37:38 +08:00
maggieyyy 3c624d5039 fix: Modify member transfer 2024-10-29 11:58:09 +08:00
Maggie ddd2efe441 Merge pull request #116 from APIParkLab/feature/v1.2
fix: account translation
2024-10-29 09:21:36 +08:00
杨梦洁 7e419cb2de Merge branch 'feature/v1.2' into 'main'
fix: account translation

See merge request apipark/APIPark!62
2024-10-29 09:21:19 +08:00
maggieyyy 0093c7cfb7 fix: account translation 2024-10-29 09:19:35 +08:00
Dot.L 65c45d4c28 Merge pull request #114 from APIParkLab/feature/permission
update remark
2024-10-28 18:41:17 +08:00
Maggie 98fc9ea703 Merge pull request #113 from APIParkLab/feature/v1.2
fix: table fields
2024-10-28 18:40:48 +08:00
杨梦洁 dbeb08e5e1 Merge branch 'feature/v1.2' into 'main'
fix: table fields

See merge request apipark/APIPark!61
2024-10-28 18:40:09 +08:00
Liujian a48523c94b update remark 2024-10-28 18:39:55 +08:00
Dot.L 1335fffdaa Merge pull request #112 from APIParkLab/feature/permission
Feature/permission
2024-10-28 18:34:19 +08:00
Liujian 78f96dbcf9 Merge remote-tracking branch 'github-pro/main' into feature/permission
# Conflicts:
#	resources/access/access.yaml
2024-10-28 18:33:42 +08:00
maggieyyy 86afeea532 fix: table fields 2024-10-28 18:32:20 +08:00
Liujian 66559785ea update permission 2024-10-28 18:27:37 +08:00
Liujian f016fc4d06 update access 2024-10-28 16:48:18 +08:00
Maggie e0bddbc84a Merge pull request #111 from APIParkLab/feature/v1.2
Feature/v1.2
2024-10-28 16:22:58 +08:00
杨梦洁 3639dc93ef Merge branch 'feature/v1.2' into 'main'
fix: Modify access fields

See merge request apipark/APIPark!59
2024-10-28 16:17:09 +08:00
maggieyyy e1da4bd1f0 fix: Modify access fields 2024-10-28 16:15:38 +08:00
杨梦洁 99ef9118ee Merge branch 'feature/v1.2' into 'main'
fix: cosumer list bug

See merge request apipark/APIPark!58
2024-10-28 16:01:48 +08:00
maggieyyy 68b1c0eabb fix: cosumer list bug 2024-10-28 16:00:15 +08:00
杨梦洁 d73ca273e0 Merge branch 'feature/v1.2' into 'main'
fix: Consumer list bugs

See merge request apipark/APIPark!57
2024-10-28 15:45:11 +08:00
maggieyyy 9badf0e3e3 fix: Consumer list bugs 2024-10-28 15:44:10 +08:00
刘健 c720edcf41 Merge branch 'feature/translate' into 'main'
Feature/translate

See merge request apipark/APIPark!56
2024-10-28 15:15:00 +08:00
Dot.L 483c6a2758 Merge pull request #110 from APIParkLab/feature/translate
Feature/translate
2024-10-28 15:07:35 +08:00
Liujian 6168f4d758 Merge remote-tracking branch 'github-pro/main' into feature/translate
# Conflicts:
#	.github/ISSUE_TEMPLATE/bug_report.yml
#	.github/ISSUE_TEMPLATE/request_help.yml
2024-10-28 15:06:24 +08:00
Dot.L 687730be7b Merge pull request #96 from sunanzhi/main
fix:issue template content
2024-10-28 15:03:56 +08:00
Liujian cddb2bc2cf update access 2024-10-28 15:03:04 +08:00
Maggie fa7c9b4c47 Merge pull request #108 from APIParkLab/feature/v1.2
Feature/v1.2
2024-10-28 15:02:37 +08:00
杨梦洁 1fd429f582 Merge branch 'feature/v1.2' into 'main'
Feature/v1.2

See merge request apipark/APIPark!55
2024-10-28 15:02:10 +08:00
maggieyyy 6d61c036f9 fix: Modify access 2024-10-28 15:00:59 +08:00
maggieyyy f82f4b0d7b fix: update message 2024-10-28 13:39:47 +08:00
maggieyyy fff39caa71 fix: Delete operation from team & Delete comments from publish 2024-10-28 11:52:51 +08:00
Liujian 5968d64e3d update action 2024-10-28 10:53:28 +08:00
Liujian 202c53375b update action 2024-10-28 10:46:17 +08:00
Liujian 9eea853724 Merge remote-tracking branch 'origin/main' into feature/translate 2024-10-28 10:43:23 +08:00
Dot.L 9526fa294a Merge pull request #1 from Dot-Liu/feature/translate
Feature/translate
2024-10-28 10:01:46 +08:00
Liujian e025fa2995 update go.mod 2024-10-28 10:00:34 +08:00
杨梦洁 5c15af2b9c Merge branch 'feature/v1.2' into 'main'
fix: Modify publish and title & add debug

See merge request apipark/APIPark!54
2024-10-28 09:59:00 +08:00
maggieyyy 3e094c7bf4 fix: Modify publish and title & add debug 2024-10-28 09:58:04 +08:00
Liujian 45a4b2b97d Merge remote-tracking branch 'origin/main' into feature/translate 2024-10-27 00:48:03 +08:00
Liujian 1d62a6613d role update 2024-10-27 00:47:48 +08:00
刘健 28f182a291 Merge branch 'feature/translate' into 'main'
create ai service add provider

See merge request apipark/APIPark!53
2024-10-26 21:25:40 +08:00
Liujian f78ba3ad1e create ai service add provider 2024-10-26 21:25:13 +08:00
刘健 e2ff036965 Merge branch 'feature/translate' into 'main'
update translate

See merge request apipark/APIPark!52
2024-10-25 18:47:48 +08:00
Liujian 7c7071a3a9 update translate 2024-10-25 18:45:38 +08:00
杨梦洁 e90809c010 Merge branch 'feature/v1.2' into 'main'
fix: update translation

See merge request apipark/APIPark!51
2024-10-25 16:35:30 +08:00
Maggie 2426fcd7d6 Merge pull request #101 from APIParkLab/feature/v1.2
fix: update translation
2024-10-25 16:35:27 +08:00
maggieyyy f433c28e75 fix: update translation 2024-10-25 16:34:06 +08:00
Maggie cac8755305 Merge pull request #100 from APIParkLab/feature/v1.2
fix: update translation
2024-10-25 16:20:02 +08:00
杨梦洁 a283dc0c62 Merge branch 'feature/v1.2' into 'main'
Feature/v1.2

See merge request apipark/APIPark!50
2024-10-25 16:18:59 +08:00
maggieyyy 99002fa1cf fix: update translation 2024-10-25 16:16:15 +08:00
Maggie 9060c87d60 Merge pull request #99 from APIParkLab/docs-update-frontend-README
docs: Update README.md
2024-10-25 15:48:21 +08:00
Scarqin 1d275e3313 Update README.md 2024-10-25 15:44:42 +08:00
Maggie 77da2a7fd2 Merge pull request #95 from APIParkLab/feature/v1.2
fix: Remove guest's account setting & update translation
2024-10-25 15:24:37 +08:00
杨梦洁 b9cc53b694 Merge branch 'feature/v1.2' into 'main'
Feature/v1.2

See merge request apipark/APIPark!49
2024-10-25 15:23:51 +08:00
maggieyyy 62d47077b1 fix: Remove guest's account setting & update translation 2024-10-25 15:22:06 +08:00
sunanzhi 3269e79ff3 fix:issue template content 2024-10-25 15:16:47 +08:00
刘健 307faed57b Merge branch 'feature/issue-templete' into 'main'
update ao-account dependent version

See merge request apipark/APIPark!48
2024-10-25 14:32:33 +08:00
Liujian dc6a9a53f0 update ao-account dependent version 2024-10-25 14:32:11 +08:00
JackLiu 285119852b Merge pull request #86 from rolealiu/main
update translation
2024-10-25 14:31:56 +08:00
JackLiu 65fa6517d3 Merge branch 'APIParkLab:main' into main 2024-10-25 14:31:26 +08:00
刘健 2c27074b04 Merge branch 'feature/issue-templete' into 'main'
update ao-account dependent version

See merge request apipark/APIPark!47
2024-10-25 14:31:21 +08:00
Liujian 66e4be0b57 update ao-account dependent version 2024-10-25 14:30:58 +08:00
HaoZhen Liu 14d94e33bb update translation 2024-10-25 14:30:57 +08:00
刘健 541f50aecc Merge branch 'feature/issue-templete' into 'main'
Feature/issue templete

See merge request apipark/APIPark!46
2024-10-25 14:22:21 +08:00
Liujian 95d87f7183 tmp commit 2024-10-25 14:21:50 +08:00
Maggie 6738960e46 Merge pull request #83 from APIParkLab/feature/v1.2
fix: AI Model config bug
2024-10-25 14:07:39 +08:00
杨梦洁 ab60eaac95 Merge branch 'feature/v1.2' into 'main'
fix: AI Model config bug

See merge request apipark/APIPark!45
2024-10-25 14:04:00 +08:00
maggieyyy 76f009c546 fix: AI Model config bug 2024-10-25 14:02:23 +08:00
Liujian b9c61f8b94 update issue templete 2024-10-25 09:32:12 +08:00
Maggie 125be3f2bf Merge pull request #70 from APIParkLab/feature/v1.2
fix: update translation
2024-10-25 09:28:32 +08:00
杨梦洁 9df44eeb87 Merge branch 'feature/v1.2' into 'main'
Feature/v1.2

See merge request apipark/APIPark!44
2024-10-25 09:28:13 +08:00
maggieyyy 97aa6ee0d6 fix: update translation 2024-10-25 09:27:00 +08:00
刘健 80c9bca75b Merge branch 'feature/ai-service' into 'main'
Feature/ai service

See merge request apipark/APIPark!43
2024-10-24 23:43:36 +08:00
Liujian 9e253086ef fix get llm error 2024-10-24 23:42:55 +08:00
Dot.L 6aeb5299dc Merge pull request #68 from APIParkLab/feature/ai-service
Feature/ai service
2024-10-24 23:31:32 +08:00
Liujian 888eabe154 finish fake ai 2024-10-24 23:30:25 +08:00
杨梦洁 29d5c1bdd7 Merge branch 'feature/v1.2' into 'main'
Feature/v1.2

See merge request apipark/APIPark!42
2024-10-24 18:28:36 +08:00
JackLiu eee33cda04 Merge pull request #67 from rolealiu/main
update translation
2024-10-24 18:25:40 +08:00
HaoZhen Liu df4f65d36d update translation 2024-10-24 18:24:51 +08:00
李冬杰 8e9335454e Merge branch 'feature/zhinao' into 'main'
Feature/zhinao

See merge request apipark/APIPark!41
2024-10-24 15:50:09 +08:00
lidongjie 4e4b0f2f51 add:ai provider 360-zhinao 2024-10-24 15:47:43 +08:00
杨梦洁 c28d6c85af Merge branch 'feature/v1.2' into 'main'
fix: Update translation

See merge request apipark/APIPark!40
2024-10-24 14:43:41 +08:00
Maggie 3cdbac76a5 Merge pull request #66 from APIParkLab/feature/v1.2
Feature/v1.2
2024-10-24 14:41:41 +08:00
maggieyyy 20bcc662c8 fix: Update translation 2024-10-24 14:39:49 +08:00
杨梦洁 908accd290 Merge branch 'feature/v1.2' into 'main'
Feature/v1.2

See merge request apipark/APIPark!39
2024-10-24 13:52:16 +08:00
maggieyyy a621c5fc72 fix: Modify translation 2024-10-24 13:51:22 +08:00
maggieyyy 92f0ac1578 fix: Modify Ai setting 2024-10-24 11:40:14 +08:00
Liujian 8b3667ec9b Merge remote-tracking branch 'origin/main' into feature/ai-service 2024-10-23 18:41:14 +08:00
杨梦洁 875fa0936b Merge branch 'feature/v1.2' into 'main'
Feature/v1.2

See merge request apipark/APIPark!38
2024-10-23 18:23:12 +08:00
maggieyyy 669844f055 feat: Modify sevice type selector 2024-10-23 18:22:04 +08:00
maggieyyy 9785b930da fix: Password css 2024-10-23 17:41:40 +08:00
杨梦洁 f3195d257e Merge branch 'feature/v1.2' into 'main'
Feature/v1.2

See merge request apipark/APIPark!37
2024-10-23 16:59:51 +08:00
maggieyyy 349162852d fix: Add translation to api path match rule options 2024-10-23 16:52:36 +08:00
maggieyyy 69f330737f feat: Rename 'application' to 'consumer' and optimize consumer module display 2024-10-23 16:49:09 +08:00
刘健 7d10fbaa25 Merge branch 'feature/ai-service' into 'main'
upadte app list api

See merge request apipark/APIPark!36
2024-10-23 16:43:11 +08:00
Liujian 9d964b572b upadte app list api 2024-10-23 16:42:56 +08:00
刘健 a0978269f8 Merge branch 'feature/ai-service' into 'main'
update ai provider api

See merge request apipark/APIPark!35
2024-10-23 16:30:03 +08:00
Liujian 9a6196bbd7 update ai provider api 2024-10-23 16:29:18 +08:00
刘健 812f589762 Merge branch 'feature/ai-service' into 'main'
update provider logo

See merge request apipark/APIPark!34
2024-10-23 14:25:55 +08:00
Liujian b9e676d926 update provider logo 2024-10-23 14:22:44 +08:00
刘健 49e6e54c31 Merge branch 'feature/ai-service' into 'main'
update providers logo

See merge request apipark/APIPark!33
2024-10-23 13:39:04 +08:00
Liujian 4d398fd4d5 update providers logo 2024-10-23 13:38:16 +08:00
maggieyyy b74f4adfd8 feat: Add path match type before api path & Modify Login Page 2024-10-23 11:58:53 +08:00
JackLiu be5abccd81 Merge pull request #65 from rolealiu/main
update translation
2024-10-22 17:53:45 +08:00
JackLiu 1792489cd0 Merge branch 'APIParkLab:main' into main 2024-10-22 17:53:20 +08:00
HaoZhen Liu 4284fd8fc6 update translation 2024-10-22 17:53:48 +08:00
杨梦洁 036106db82 Merge branch 'feature/v1.2' into 'main'
Feature/v1.2

See merge request apipark/APIPark!32
2024-10-22 17:33:51 +08:00
Maggie c6ed032659 Merge pull request #64 from APIParkLab/feature/v1.2
Feature/v1.2
2024-10-22 17:33:21 +08:00
maggieyyy b521204c99 fix: Simplified Chinese not working 2024-10-22 17:32:25 +08:00
maggieyyy b38502e0bd Merge branch 'main' into feature/v1.2 2024-10-22 17:06:40 +08:00
maggieyyy 2fe03bd4b3 fix: Modify Login Page styles and Api document path 2024-10-22 17:05:40 +08:00
JackLiu 68a0f616dc Update readme-jp.md 2024-10-22 15:53:56 +08:00
JackLiu 1edce4295e Update readme-zh-tw.md 2024-10-22 15:53:42 +08:00
JackLiu ca386c343e Update README.md 2024-10-22 15:53:27 +08:00
JackLiu efb0b6526a Update readme-zh-cn.md 2024-10-22 15:53:10 +08:00
JackLiu 4a406ad261 Update readme-zh-tw.md 2024-10-22 15:51:30 +08:00
JackLiu fb701cc20d Update readme-jp.md 2024-10-22 15:49:41 +08:00
JackLiu 0b0478c9ba Update readme-zh-cn.md 2024-10-22 15:45:20 +08:00
JackLiu 79ff630c41 Update README.md 2024-10-22 15:40:14 +08:00
JackLiu 4679440520 Update feature_request.yml 2024-10-22 14:13:35 +08:00
maggieyyy b38f77acea fix: route config 2024-10-22 14:05:12 +08:00
HaoZhen Liu 896330d0ec update translation 2024-10-22 12:31:51 +08:00
JackLiu 205803a800 Merge pull request #60 from rolealiu/main
update translation
2024-10-22 12:31:22 +08:00
Maggie e6187f099a Merge pull request #59 from APIParkLab/feature/v1.2
fix: Modify peer address to use array format
2024-10-22 10:30:34 +08:00
杨梦洁 c148a5c797 Merge branch 'feature/v1.2' into 'main'
fix: Modify peer address to use array format

See merge request apipark/APIPark!31
2024-10-22 10:29:47 +08:00
maggieyyy 3d730547af fix: Modify peer address to use array format 2024-10-22 10:28:14 +08:00
maggieyyy c3f1b12b7e fix: aiservice router 2024-10-22 10:20:34 +08:00
Dot.L 9f9a347272 Merge pull request #58 from APIParkLab/feature/ai-service
Feature/ai service
2024-10-21 19:02:50 +08:00
Liujian d63869ca15 Merge remote-tracking branch 'origin/main' into feature/ai-service 2024-10-21 19:01:07 +08:00
刘健 d33a243020 Merge branch 'feature/auto-publish-to-gitlab' into 'main'
test frontend change

See merge request apipark/APIPark!30
2024-10-21 19:00:04 +08:00
Liujian 558e8fad61 test frontend change 2024-10-21 18:59:24 +08:00
刘健 b0f094a9d9 Merge branch 'feature/auto-publish-to-gitlab' into 'main'
copy frontend/dist to artifacts/dist

See merge request apipark/APIPark!29
2024-10-21 18:53:48 +08:00
Liujian 84e1528a1d copy frontend/dist to artifacts/dist 2024-10-21 18:53:28 +08:00
刘健 2a1372926f Merge branch 'feature/auto-publish-to-gitlab' into 'main'
print frontend dir

See merge request apipark/APIPark!28
2024-10-21 18:48:40 +08:00
Liujian 73b2fea954 print frontend dir 2024-10-21 18:47:54 +08:00
刘健 8263f1ec85 Merge branch 'feature/auto-publish-to-gitlab' into 'main'
print frontend dir

See merge request apipark/APIPark!27
2024-10-21 18:43:22 +08:00
Liujian 436ab32937 print frontend dir 2024-10-21 18:43:06 +08:00
刘健 cb904e5386 Merge branch 'feature/auto-publish-to-gitlab' into 'main'
update builder script

See merge request apipark/APIPark!26
2024-10-21 18:36:37 +08:00
Liujian 486bf0edcd update builder script 2024-10-21 18:36:19 +08:00
刘健 06e5f2878f Merge branch 'feature/auto-publish-to-gitlab' into 'main'
update builder script

See merge request apipark/APIPark!25
2024-10-21 18:31:57 +08:00
Liujian 5d1a7a7ca4 update builder script 2024-10-21 18:28:26 +08:00
刘健 197fe3c15b Merge branch 'feature/auto-publish-to-gitlab' into 'main'
update feishu informer rule

See merge request apipark/APIPark!24
2024-10-21 18:19:46 +08:00
Liujian 09ac4cf970 update feishu informer rule 2024-10-21 18:19:30 +08:00
Liujian f64a20fbac update feishu informer rule 2024-10-21 18:17:11 +08:00
Liujian 86b566a8cd update feishu informer rule 2024-10-21 18:12:44 +08:00
Maggie 2e7ecc93c8 Merge pull request #57 from maggieyyy/feature/v1.2
Feature/v1.2
2024-10-21 18:12:36 +08:00
Maggie c7f79d4b7b Merge branch 'APIParkLab:main' into feature/v1.2 2024-10-21 18:11:15 +08:00
杨梦洁 c452f092cc Merge branch 'feature/v1.2' into 'main'
frontend: delete comment

See merge request apipark/APIPark!23
2024-10-21 18:07:49 +08:00
maggieyyy 0764b4bfd4 frontend: delete comment 2024-10-21 18:07:10 +08:00
刘健 cd9552c9e0 Merge branch 'feature/auto-publish-to-gitlab' into 'main'
Gitlab automatically compiles and submits

See merge request apipark/APIPark!21
2024-10-21 18:05:46 +08:00
Liujian 508bfb7891 update gitlab runner exec rule 2024-10-21 18:01:47 +08:00
Liujian 998b5af4ae update deploy exec script 2024-10-21 18:00:20 +08:00
Liujian 5b1eac58e4 fix builder exec script 2024-10-21 17:56:50 +08:00
Maggie 9e0d25b77e Merge pull request #56 from maggieyyy/feature/v1.2
Feature/v1.2
2024-10-21 17:49:02 +08:00
杨梦洁 62488211f7 Merge branch 'feature/v1.2' into 'main'
frontend: update

See merge request apipark/APIPark!22
2024-10-21 17:47:06 +08:00
Liujian 0b4b183ba7 新建prefix.sh文件 2024-10-21 17:46:26 +08:00
maggieyyy f3532f6128 fix: service type field changes 2024-10-21 17:45:31 +08:00
maggieyyy a5e792d3ba fix: router config 2024-10-21 17:41:30 +08:00
Liujian 19fc1b6958 update run auto deploy condition 2024-10-21 17:06:52 +08:00
Liujian 2702b71cc6 update stage 2024-10-21 17:04:57 +08:00
刘健 97b3ef0f03 Merge branch 'feature/groq' into 'main'
add:添加GroqCloud供应商

See merge request apipark/APIPark!16
2024-10-21 17:02:46 +08:00
Liujian 3431805088 Gitlab automatically compiles and submits 2024-10-21 16:58:17 +08:00
Liujian 306da2fcc5 test frontend dir change 2024-10-21 16:16:46 +08:00
Liujian a7f2a91e6a Fix code errors caused by rebase 2024-10-21 15:51:15 +08:00
Liujian dcd85d0e9a Update ao-account dependency version 2024-10-21 15:48:01 +08:00
Liujian 82a3476f62 API Market Service Interface add service_kind Field 2024-10-21 15:07:13 +08:00
maggieyyy cf32ae9a00 fix: Add MF 2024-10-21 14:41:49 +08:00
maggieyyy 561c001b08 merge 2024-10-21 14:20:25 +08:00
JackLiu 26ff021887 Merge pull request #55 from rolealiu/main
update translation
2024-10-21 12:17:09 +08:00
HaoZhen Liu eb461b5bfa update translation 2024-10-21 12:17:34 +08:00
Maggie 42114a7f0d Merge pull request #54 from maggieyyy/main
fix: Add new fields for translation in Service Hub
2024-10-21 11:24:05 +08:00
maggieyyy 10b08ce42c fix: Add new fields for translation in Service Hub 2024-10-21 11:22:14 +08:00
Maggie c0934136d0 Merge pull request #53 from maggieyyy/main
fix: Add new fields for translation
2024-10-21 10:29:30 +08:00
maggieyyy fb77d33cb7 fix: Add new fields for translation 2024-10-21 10:27:37 +08:00
JackLiu 7ebbd8c0bf Merge pull request #52 from rolealiu/main
add chinese-tr and japanese lang readme
2024-10-19 00:55:00 +08:00
HaoZhen Liu 6c16251876 add chinese-tr and japanese lang readme 2024-10-19 00:55:13 +08:00
JackLiu dc18ce41f5 Update readme-zh-cn.md 2024-10-19 00:41:00 +08:00
JackLiu 2669e381b1 Update README.md 2024-10-19 00:40:24 +08:00
JackLiu 3deb9cbb35 Update readme-zh-cn.md 2024-10-19 00:27:31 +08:00
JackLiu eeaef841c8 Merge pull request #51 from rolealiu/main
improve translation
2024-10-19 00:08:18 +08:00
HaoZhen Liu 7f52cc95ec improve translation 2024-10-19 00:08:44 +08:00
JackLiu 71e9c464b9 Merge pull request #50 from rolealiu/main
improve translation
2024-10-19 00:05:41 +08:00
JackLiu 84fd74de4a Merge branch 'APIParkLab:main' into main 2024-10-19 00:04:08 +08:00
HaoZhen Liu f0661e6d19 improve translation 2024-10-19 00:04:26 +08:00
HaoZhen Liu 6f03c8f969 improve translation 2024-10-18 23:58:27 +08:00
JackLiu d38cff4def Merge pull request #49 from rolealiu/main
improve translation
2024-10-18 23:16:44 +08:00
HaoZhen Liu e45468cf3c improve translation 2024-10-18 23:15:29 +08:00
HaoZhen Liu ed843b7285 improve translation 2024-10-18 23:14:30 +08:00
Liujian 117dd82617 Initial installation of initialization data for simplified use. 2024-10-18 22:15:55 +08:00
Liujian b043db8237 注释ap-account本地依赖 2024-10-18 19:51:42 +08:00
Liujian ee703df2f3 新增i18n操作 2024-10-18 19:50:20 +08:00
Maggie 8b7cf85f23 Merge pull request #48 from maggieyyy/main
fix:  delete files & width of pic in editor & timing bug & remove roles i18n & update i18n scanner & update i18n files
2024-10-18 19:19:15 +08:00
maggieyyy c44bd22108 fix: update i18n files 2024-10-18 19:13:37 +08:00
maggieyyy 5c245c70f7 merge 2024-10-18 18:49:32 +08:00
maggieyyy debdd18a58 fix: remove roles i18n & update i18n scanner 2024-10-18 18:47:17 +08:00
JackLiu 29504e8d62 Merge pull request #47 from rolealiu/main
re-translate i18n language file
2024-10-18 18:34:31 +08:00
JackLiu a0edee3c45 Merge branch 'APIParkLab:main' into main 2024-10-18 18:33:36 +08:00
HaoZhen Liu 7f457d9ae8 modify i18n language file 2024-10-18 18:33:40 +08:00
maggieyyy dd5ac2d87b fix: delete files & width of pic in editor & timing bug 2024-10-18 18:05:47 +08:00
Liujian 76172d49c3 Initialize deployment with built-in data optimization 2024-10-18 15:38:39 +08:00
Liujian 7b6fc8e03e finish ai router 2024-10-18 12:10:27 +08:00
JackLiu 0be7620209 Merge pull request #46 from rolealiu/main
add zh-tw and japaness lang
2024-10-18 01:42:17 +08:00
HaoZhen Liu 3b6a38dd90 add zh-tw and japaness lang 2024-10-18 01:42:14 +08:00
Dot.L 0b001913de Merge pull request #45 from Dot-Liu/main
AI service experience optimization
2024-10-17 23:50:59 +08:00
Liujian b293b5b30e Merge remote-tracking branch 'origin/main' into main-github
# Conflicts:
#	gateway/apinto/entity/router.go
#	module/publish/iml.go
#	service/api/service.go
2024-10-17 23:49:41 +08:00
Liujian 9f7f6ab157 Experience optimization 2024-10-17 23:47:26 +08:00
Maggie b5c88a59bf Merge pull request #44 from maggieyyy/main
fix: delete useless file
2024-10-17 18:49:02 +08:00
Maggie 040c10596e Merge branch 'APIParkLab:main' into main 2024-10-17 18:48:06 +08:00
maggieyyy 1f1c7c0668 feat: delete en-GB file 2024-10-17 18:47:33 +08:00
Maggie ad1561f090 Merge pull request #43 from maggieyyy/main
frontend: update service & support more language
2024-10-17 18:44:25 +08:00
maggieyyy 83306364ce frontend: update service & support more language 2024-10-17 18:42:52 +08:00
Liujian 8ba0d49fb3 系统常规设置完成 2024-10-17 12:00:19 +08:00
Liujian e1c7c16d91 服务列表接口合并 2024-10-16 19:26:33 +08:00
lidongjie 01cca463bb modify:删除oci和lepton 2024-10-16 16:30:43 +08:00
Liujian 44aa842f20 finish nvidia 2024-10-16 16:17:32 +08:00
李冬杰 2d94bbaef7 Merge branch 'feature/chatglm' into 'main'
fix:添加chatglm address

See merge request apipark/APIPark!20
2024-10-16 15:01:34 +08:00
lidongjie b2bc656e15 fix:添加chatglm address 2024-10-16 15:00:06 +08:00
Liujian 21b2f554df 修改讯飞星火定义 2024-10-16 14:52:56 +08:00
JackLiu cd4795d50a Update README.md 2024-10-15 22:27:33 +08:00
JackLiu 583141a374 Update readme-zh-cn.md 2024-10-15 22:23:50 +08:00
JackLiu 816cc11a19 Update README.md 2024-10-15 22:19:07 +08:00
李冬杰 d27729d110 Merge branch 'feature/chatglm' into 'main'
add:添加chatglm供应商

See merge request apipark/APIPark!19
2024-10-15 16:34:41 +08:00
lidongjie f4a37539a0 add:添加chatglm供应商 2024-10-15 16:33:30 +08:00
李冬杰 cec2100915 Merge branch 'feature/minimax' into 'main'
add:添加minimax供应商

See merge request apipark/APIPark!18
2024-10-15 16:20:38 +08:00
lidongjie cab4629c4b add:添加minimax供应商 2024-10-15 16:03:04 +08:00
李冬杰 6f3c389e22 Merge branch 'feature/upstage' into 'main'
add:添加upstage供应商

See merge request apipark/APIPark!17
2024-10-14 18:05:56 +08:00
lidongjie 729e2882b5 add:添加upstage供应商 2024-10-14 18:02:43 +08:00
lidongjie b786ee4a36 add:添加GroqCloud供应商 2024-10-14 17:51:28 +08:00
李冬杰 7569ca1fd4 Merge branch 'feature/openrouter' into 'main'
add:添加openrouter供应商

See merge request apipark/APIPark!15
2024-10-14 17:31:10 +08:00
lidongjie 93925c1bfb add:添加openrouter供应商 2024-10-14 17:30:02 +08:00
李冬杰 658179d9c3 Merge branch 'feature/deepseek' into 'main'
add:添加deepseek供应商

See merge request apipark/APIPark!14
2024-10-14 17:01:24 +08:00
lidongjie bc74168e36 add:添加deepseek供应商 2024-10-14 17:01:01 +08:00
李冬杰 22afea72f5 Merge branch 'feature/cohere' into 'main'
add:添加cohere供应商

See merge request apipark/APIPark!13
2024-10-14 16:36:09 +08:00
lidongjie a2d42af747 add:添加cohere供应商 2024-10-14 16:34:57 +08:00
Liujian b04d06da4c 修复供应商修改配置失败的问题 2024-10-14 16:29:32 +08:00
李冬杰 f1052ae2f3 Merge branch 'feature/perfxcloud' into 'main'
add:添加perfxcloud供应商

See merge request apipark/APIPark!12
2024-10-14 15:08:17 +08:00
lidongjie c660aadf90 add:添加perfxcloud供应商 2024-10-14 15:06:04 +08:00
李冬杰 0fd8abe0ff Merge branch 'feature/yi' into 'main'
add:添加零一万物供应商

See merge request apipark/APIPark!11
2024-10-14 14:40:03 +08:00
lidongjie fcb3183e71 add:添加零一万物供应商 2024-10-14 14:37:03 +08:00
Liujian 3f2ed774ad Finish anthropic 2024-10-14 10:05:37 +08:00
李冬杰 6c90612fd2 Merge branch 'feature/stepfun' into 'main'
add:添加阶跃星辰供应商

See merge request apipark/APIPark!10
2024-10-12 18:34:02 +08:00
lidongjie ffb10a588e add:添加阶跃星辰供应商 2024-10-12 18:32:50 +08:00
李冬杰 43069c396d Merge branch 'feature/baichuan' into 'main'
add:添加baichuan供应商

See merge request apipark/APIPark!9
2024-10-12 18:05:04 +08:00
lidongjie 974c5cf8a2 add:添加baichuan供应商 2024-10-12 18:03:19 +08:00
Liujian c434d7c954 后端优化完成 2024-10-12 10:42:52 +08:00
Liujian 518846a281 Merge remote-tracking branch 'origin/main' 2024-10-11 18:41:13 +08:00
Liujian ec316f589b 修改model字段长度为255 2024-10-11 18:40:54 +08:00
李冬杰 92ea8e4308 Merge branch 'feature/mistralai' into 'main'
add:添加mistralai供应商

See merge request apipark/APIPark!8
2024-10-11 18:04:23 +08:00
lidongjie 0a6fc1e020 add:添加mistralai供应商 2024-10-11 18:02:23 +08:00
李冬杰 d06cf41581 Merge branch 'feature/novita' into 'main'
add:添加novita供应商

See merge request apipark/APIPark!7
2024-10-11 17:41:45 +08:00
lidongjie c94c746120 add:添加novita供应商 2024-10-11 17:41:02 +08:00
李冬杰 324c8a2b98 Merge branch 'feature/fireworks' into 'main'
add:添加fireworks

See merge request apipark/APIPark!6
2024-10-11 17:16:47 +08:00
lidongjie 0a2b191711 add:添加fireworks 2024-10-11 17:16:16 +08:00
李冬杰 334db692b2 Merge branch 'feature/zhipuai' into 'main'
add:智谱ai

See merge request apipark/APIPark!5
2024-10-11 17:00:57 +08:00
lidongjie 458176a0af add:智谱ai 2024-10-11 17:00:11 +08:00
李冬杰 954cf5af1f Merge branch 'feature/zhipuai' into 'main'
add:智谱ai

See merge request apipark/APIPark!4
2024-10-11 16:28:56 +08:00
lidongjie d46158b381 add:智谱ai 2024-10-11 16:28:29 +08:00
李冬杰 f883525c27 Merge branch 'feature/tongyi' into 'main'
Feature/tongyi

See merge request apipark/APIPark!3
2024-10-11 16:04:04 +08:00
lidongjie 453412ad4d modify:tongyi host 2024-10-11 16:02:15 +08:00
lidongjie 5f80f8e3af fix:通义千问 2024-10-11 14:42:58 +08:00
Liujian 61c308a0e3 优化schema 2024-10-11 14:29:38 +08:00
lidongjie 96a7394aaf add:添加通义千问 2024-10-11 14:13:25 +08:00
lidongjie 429e153cd4 add:添加通义千问 2024-10-11 14:04:49 +08:00
Liujian d856554aa4 Merge remote-tracking branch 'origin/main' 2024-10-10 21:50:12 +08:00
Liujian 227552f54b 发布流程优化 2024-10-10 21:48:42 +08:00
刘健 32ed7faff2 Merge branch 'feature/moonshot' into 'main'
Feature/moonshot

See merge request apipark/APIPark!2
2024-10-10 19:15:30 +08:00
lidongjie 35481c1f59 合并代码,月之暗面 2024-10-10 19:09:45 +08:00
Liujian f6510bd667 模型列表接入 2024-10-10 18:28:27 +08:00
lidongjie b51eb92256 add:Moonshot ai provider 2024-10-10 18:18:59 +08:00
Liujian 2b48c779ef apinto对接完成 2024-10-08 12:09:33 +08:00
Liujian 9783f77110 修复bug 2024-09-29 14:46:58 +08:00
Liujian e764fd07b9 多模型对接完成 2024-09-27 19:14:52 +08:00
Maggie 5aa8e88381 Merge pull request #41 from maggieyyy/main
feat: ai-service ui
2024-09-26 21:04:28 +08:00
Maggie 2775aa023b Merge branch 'APIParkLab:main' into main 2024-09-26 21:02:54 +08:00
maggieyyy 096adebb48 feat: ai-service ui 2024-09-26 21:01:51 +08:00
Liujian 1ba08ec630 修改权限名称 2024-09-26 18:08:29 +08:00
Liujian d72337b770 权限更新 2024-09-26 17:59:31 +08:00
Liujian c053aa6299 ai路由完成 2024-09-25 20:28:01 +08:00
Liujian 5d70b98cd4 AI服务接口完成 2024-09-25 11:56:51 +08:00
Liujian ea0812da97 AI供应商接口修复bug 2024-09-25 11:39:22 +08:00
Dot.L a771eda369 Modify Chinese Readme incorrect link
Modify Chinese Readme incorrect link
2024-09-25 09:46:44 +08:00
Liujian be40015526 新增AI服务接口 2024-09-25 09:35:58 +08:00
Liujian c56f6ff1fb 修改获取模型列表接口 2024-09-24 15:06:44 +08:00
Liujian 6dab6c327c AI供应商相关接口完成 2024-09-24 14:15:52 +08:00
maggieyyy 4f4e4e7b1d Merge pull request #39 from maggieyyy/main
fix: english version & tags id bugs
2024-09-14 14:38:08 +08:00
maggieyyy 259a1b9566 fix:tags id 2024-09-14 14:36:31 +08:00
maggieyyy 43533b5f3a fix:team member tranlated 2024-09-09 14:09:15 +08:00
maggieyyy 51f7628564 fix:english style 2024-09-09 13:48:39 +08:00
Dot.L 2aa2591f0f Merge pull request #37 from Dot-Liu/main
修复_commit表和_latest表初始化失败的问题
2024-09-06 10:37:04 +08:00
Liujian 6301b8f2fe 修复_commit表和_latest表初始化失败的问题 2024-09-06 10:32:54 +08:00
maggieyyy dbc29b86d8 Merge pull request #35 from maggieyyy/main
frontend: fix router list view
2024-09-03 10:07:27 +08:00
maggieyyy 5e1e088edd frontend: fix router list view 2024-09-03 10:06:19 +08:00
Dot.L 1c74f3d2ce Merge pull request #34 from Dot-Liu/main
修复服务获取API列表是获取到别的服务的API
2024-09-02 21:20:31 +08:00
Liujian 583918d617 修复服务获取API列表是获取到别的服务的API 2024-09-02 21:14:30 +08:00
Dot.L a15e1fbca0 Merge pull request #33 from Dot-Liu/main
初始化时当角色存在时,更新角色权限信息
2024-09-02 19:57:03 +08:00
Liujian 8699a7e97c 初始化时当角色存在时,更新角色权限信息 2024-09-02 19:56:04 +08:00
Dot.L a3869c3be0 Merge pull request #32 from Dot-Liu/main
修复报错:undefined: pm3.CreateRouterSimple
2024-09-02 19:32:46 +08:00
Liujian f777103030 修复报错:undefined: pm3.CreateRouterSimple 2024-09-02 19:32:02 +08:00
Dot.L 09eabbf773 Merge pull request #31 from Dot-Liu/main
修复openapiv2保存失败的问题
2024-09-02 19:09:11 +08:00
Liujian 64932c97a4 修复openapiv2保存失败的问题 2024-09-02 19:07:57 +08:00
Liujian 00e3710d66 Merge remote-tracking branch 'github-pro/main' into main-github 2024-09-02 19:03:23 +08:00
Dot.L bd99164416 Merge pull request #30 from Dot-Liu/main
1.1.0-beta后端代码提交
2024-09-02 18:28:45 +08:00
Liujian e37cee3be7 修复更新集群时配置不重新初始化的问题 2024-09-02 18:27:27 +08:00
Liujian 7c33abdbe6 Merge branch 'main' into main-github 2024-09-02 18:00:18 +08:00
maggieyyy e6bb9a972b Merge pull request #29 from maggieyyy/main
fix:change route & permission btn & datasource access
2024-09-02 17:53:56 +08:00
maggieyyy e40773e436 fix:change route & permission btn & datasource access 2024-09-02 17:09:44 +08:00
rolea liu 3c4c8b8fe6 Merge pull request #28 from rolealiu/main
update translate
2024-09-02 14:25:55 +08:00
HaoZhen Liu 5aaa32b788 add english readme 2024-09-02 14:25:39 +08:00
HaoZhen Liu e6f53ce2e7 add english readme 2024-09-02 14:21:56 +08:00
rolea liu f18d7c484b Merge pull request #27 from rolealiu/main
update translate
2024-09-02 14:21:47 +08:00
rolea liu fefc0fec76 Merge pull request #26 from rolealiu/main
update translation
2024-09-02 14:18:15 +08:00
rolea liu 2949c65c79 Merge branch 'APIParkLab:main' into main 2024-09-02 14:17:43 +08:00
HaoZhen Liu 19dcc1a914 add english readme 2024-09-02 14:18:19 +08:00
maggieyyy 64cdbb37f5 Merge pull request #25 from maggieyyy/main
fix: router match bugs
2024-09-02 13:43:54 +08:00
maggieyyy c31f8865c5 Merge branch 'main' of github.com:maggieyyy/APIPark into mainGithub 2024-09-02 13:42:44 +08:00
maggieyyy 9698ba0f5d fix: match type is empty 2024-09-02 13:40:50 +08:00
Liujian 836f15f5d7 修复路由详情没有返回协议的问题 2024-09-02 11:24:46 +08:00
Liujian 0d863b781f 修复上游保存失败问题 2024-09-02 10:20:06 +08:00
Liujian c016524079 修复发布报错 2024-09-02 10:02:33 +08:00
Liujian d85773c2da 发布自测完毕 2024-09-01 23:55:45 +08:00
maggieyyy 00c123fd1e fix:publish status & api doc 2024-08-30 19:38:59 +08:00
Liujian 48a8811026 发布功能完成 2024-08-30 19:35:18 +08:00
maggieyyy ab01f59eae Merge pull request #24 from maggieyyy/main
feat:openapi ui
2024-08-30 19:23:17 +08:00
maggieyyy 2bdd24180c feat:openapi ui 2024-08-30 19:22:38 +08:00
Liujian 126d1e4c58 发布初始提交 2024-08-30 18:33:35 +08:00
Liujian 582072e174 路由、权限相关接口完成 2024-08-30 16:48:43 +08:00
Liujian fbbea88502 api文档完成 2024-08-30 09:55:56 +08:00
maggieyyy 100841d6f7 Merge pull request #23 from maggieyyy/main
fix: change build config
2024-08-28 18:01:49 +08:00
maggieyyy cc096a548f Merge branch 'APIParkLab:main' into main 2024-08-28 18:01:19 +08:00
maggieyyy f6c9680551 Merge branch 'main' of github.com:maggieyyy/APIPark into mainGithub 2024-08-28 18:00:50 +08:00
maggieyyy 1f7951bf9f fix:change vite build config 2024-08-28 18:00:30 +08:00
maggieyyy a96e465b13 Merge pull request #22 from maggieyyy/main
fix:intelligent plugin & browser lang & check monitor config
2024-08-28 14:09:32 +08:00
maggieyyy bf6c955cd0 Merge branch 'APIParkLab:main' into main 2024-08-28 14:08:29 +08:00
maggieyyy 854578d300 fix:intelligent plugin & browser lang & check monitor config 2024-08-28 14:07:55 +08:00
maggieyyy beb0a2007e Merge pull request #21 from maggieyyy/main
fix:intelligent i18next
2024-08-27 10:47:15 +08:00
maggieyyy e0ab35920e fix:intelligent i18next 2024-08-27 10:45:27 +08:00
rolea liu 75cff407bf Merge pull request #20 from rolealiu/main
add english readme
2024-08-26 17:48:37 +08:00
HaoZhen Liu 297b20857c add english readme 2024-08-26 17:48:45 +08:00
rolea liu 04ccc272e1 Merge pull request #19 from rolealiu/main
add english readme
2024-08-26 17:46:17 +08:00
HaoZhen Liu 22f6267a50 Merge remote-tracking branch 'upstream/main' 2024-08-26 17:46:12 +08:00
HaoZhen Liu 8fed0c2b1f add english readme 2024-08-26 17:40:48 +08:00
HaoZhen Liu 154527947d add english readme 2024-08-26 17:33:30 +08:00
HaoZhen Liu a8b29b388b add english readme 2024-08-26 17:29:18 +08:00
HaoZhen Liu df845a0db4 add english readme 2024-08-26 17:27:43 +08:00
rolea liu 43b769e3e8 Merge pull request #18 from rolealiu/main
Improve translation
2024-08-26 17:18:10 +08:00
rolea liu ea58b708f8 Merge branch 'APIParkLab:main' into main 2024-08-26 17:16:00 +08:00
HaoZhen Liu 917786f8b8 Improve translation 2024-08-26 17:05:26 +08:00
HaoZhen Liu 8402209afd Improve translation 2024-08-26 16:17:57 +08:00
HaoZhen Liu 5c0b661189 Improve translation 2024-08-26 16:14:11 +08:00
HaoZhen Liu 47f7d78258 Improve translation 2024-08-26 16:12:40 +08:00
HaoZhen Liu c50becc085 Improve translation 2024-08-26 16:07:07 +08:00
rolea liu 0771b831e7 Merge pull request #17 from rolealiu/main
Improve translation
2024-08-26 15:39:38 +08:00
HaoZhen Liu b47e1c22c5 Merge remote-tracking branch 'upstream/main' 2024-08-26 15:37:26 +08:00
HaoZhen Liu 166d223577 Improve translation 2024-08-26 15:19:45 +08:00
rolea liu 310f983075 Merge pull request #16 from rolealiu/main
Improve translation
2024-08-26 15:09:43 +08:00
HaoZhen Liu ac0f472ac6 Improve translation 2024-08-26 15:09:03 +08:00
maggieyyy 977163588f Merge pull request #15 from maggieyyy/main
fix:i18next
2024-08-26 14:44:21 +08:00
maggieyyy da0b6e557e fix:i18next 2024-08-26 14:42:34 +08:00
Liujian 411a74b2aa 新增检测是否开启监控接口 2024-08-26 11:13:11 +08:00
Dot.L 0380353ff4 Merge pull request #13 from Dot-Liu/main
监控后端完成
2024-08-23 19:51:38 +08:00
Liujian c0590ddc0f Merge remote-tracking branch 'github-pro/main' into main-github 2024-08-23 19:49:28 +08:00
maggieyyy 020aba1c90 Merge pull request #12 from maggieyyy/main
fix:login with language setting
2024-08-23 19:45:53 +08:00
maggieyyy d46c5a10fc fix:login with language setting 2024-08-23 19:44:14 +08:00
maggieyyy 1e24758b21 Merge pull request #11 from maggieyyy/main
fix:i18next
2024-08-23 19:19:30 +08:00
maggieyyy 308b41a1ec Merge branch 'main' of github.com:maggieyyy/APIPark 2024-08-23 19:17:38 +08:00
maggieyyy e07e6b0f0f fix:i18next 2024-08-23 19:16:21 +08:00
Liujian 35ec6677ba Merge branch 'main' into main-github 2024-08-23 19:14:37 +08:00
Liujian 2110788f43 Merge remote-tracking branch 'github-pro/main' into main-github 2024-08-23 18:59:49 +08:00
Liujian d61e250e0b 修改依赖 2024-08-23 18:58:13 +08:00
maggieyyy 3d3c0377ff Merge pull request #10 from maggieyyy/main
fix:i18next
2024-08-23 18:51:48 +08:00
maggieyyy 1c8135388f merge 2024-08-23 18:18:45 +08:00
maggieyyy e47ccfc58d fix: i18n bugs 2024-08-23 18:16:48 +08:00
rolea liu 768cc5e10b Merge pull request #9 from rolealiu/main
Translate chinese to english
2024-08-23 16:36:51 +08:00
HaoZhen Liu 2be5cf5ee8 translate chinese to english 2024-08-23 16:33:26 +08:00
HaoZhen Liu 0ac1e42658 translate chinese to english 2024-08-23 16:32:42 +08:00
Dot.L 131851e650 Merge pull request #8 from maggieyyy/main
feat: guide
2024-08-23 15:43:23 +08:00
maggieyyy 56bb0b26ca Merge branch 'main' of github.com:maggieyyy/APIPark 2024-08-23 15:41:41 +08:00
maggieyyy 3d8a1eb8ae feat:guide 2024-08-23 15:41:26 +08:00
Dot.L a930dda037 Merge pull request #7 from maggieyyy/main
fix:access &  monitor style
2024-08-23 10:41:48 +08:00
maggieyyy 97154f97f1 fix:access & monitor style 2024-08-22 18:30:20 +08:00
Liujian 626077d625 修复监控获取数据失败问题 2024-08-22 18:08:18 +08:00
Liujian f45b83e947 监控接口完成 2024-08-22 11:24:41 +08:00
Liujian a2ea577fd8 修改go-common和ap-account依赖 2024-08-22 09:37:30 +08:00
Liujian 3a69a179bc 监控部分迁移 2024-08-21 23:42:15 +08:00
Dot.L 703d33b69c Merge pull request #6 from maggieyyy/main
dashboard && tour && guest_login
2024-08-21 18:39:45 +08:00
maggieyyy ef5b68cb9b Merge branch 'APIParkLab:main' into main 2024-08-21 18:11:26 +08:00
maggieyyy bf6017c60c feat:dashboard && tour && guest_login 2024-08-21 18:09:11 +08:00
Dot.L 097a588fc1 Merge pull request #5 from maggieyyy/main
feat:多语言
2024-08-20 18:51:06 +08:00
maggieyyy cac2cb2bac feat:多语言 2024-08-20 18:49:14 +08:00
Liujian ef571ba096 Merge remote-tracking branch 'github/main' 2024-08-20 14:32:59 +08:00
Liujian 419702a1ee 七牛云登录 2024-08-20 11:38:01 +08:00
Liujian 2c249f5167 新增登录操作 2024-08-20 11:23:17 +08:00
Liujian b90660f46c github action新增变量QINIU_BUCKET 2024-08-20 11:02:45 +08:00
Liujian 578999e705 修改qshell版本号为2.9.0 2024-08-20 10:55:18 +08:00
Liujian e2d6e9d812 修改七牛云脚本命令 2024-08-20 10:33:24 +08:00
Liujian 250937bd51 修改七牛云上传依赖 2024-08-20 10:23:11 +08:00
Liujian d85532ca85 修改github action脚本 2024-08-20 10:05:54 +08:00
Liujian 862c762eaa 新增上传到七牛云操作 2024-08-20 10:01:51 +08:00
Dot.L 8e6c4ec683 Merge pull request #1 from Dot-Liu/main
APIPark-1.0-beta完成
2024-08-16 20:56:44 +08:00
Liujian d82fe39a17 APIPark访客模式完成 2024-08-16 20:55:16 +08:00
rolea liu ca43a5ff43 Update README.md 2024-08-16 18:24:20 +08:00
rolea liu 449254581f Update README.md 2024-08-16 18:15:31 +08:00
Liujian 7a8557590c 修改依赖版本号 2024-08-16 18:06:32 +08:00
Liujian be6ecaa380 frontend:服务详情宽度 2024-08-16 18:01:09 +08:00
Liujian 54a29b39bf 修复可删除唯一团队管理员的问题 2024-08-16 17:59:04 +08:00
rolea liu a000ce2ec5 Update README.md 2024-08-16 17:39:14 +08:00
Liujian 44436ab29d Merge remote-tracking branch 'github/main' 2024-08-16 16:35:48 +08:00
Liujian 4863b8c9a3 修复新增订阅方失败的问题 2024-08-16 16:35:34 +08:00
Liujian 1662faafd2 新增访客模式 2024-08-16 11:27:41 +08:00
Liujian 693b76ee18 前端代码更新 2024-08-15 18:28:46 +08:00
Liujian 7da4235fc8 Merge branch 'main' into main-github 2024-08-15 11:34:48 +08:00
Liujian 66b5315a13 新增自动打包脚本 2024-08-15 11:34:33 +08:00
Liujian 5dd04479c2 修复动态模块上下线失败的问题 2024-08-15 09:53:01 +08:00
Liujian 469a612e41 首次提交APIPark代码,面向开源 2024-08-12 21:38:09 +08:00
rolea liu 7c8d175c9c Initial commit 2024-08-12 10:26:35 +08:00
705 changed files with 84020 additions and 67286 deletions
+5
View File
@@ -75,6 +75,11 @@ jobs:
with:
name: frontend-package
path: frontend/dist
# 设置 QEMU 以支持多架构构建
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login Docker #登录docker
uses: docker/login-action@v1
with:
+2 -1
View File
@@ -7,4 +7,5 @@
/.vscode/
.air.toml
/tmp/
/work
/work
/cmd/
+88
View File
@@ -0,0 +1,88 @@
variables:
PATH: /opt/go-1.23/go/bin/:/opt/node-1.22/bin/:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
GOROOT: /opt/go-1.23/go
GOPROXY: https://goproxy.cn
VERSION: $CI_COMMIT_SHORT_SHA
APP: apipark
APP_PRE: ${APP}_${VERSION}
BUILD_DIR: ${APP}-build
DEPLOY_DESC: "DEV 环境"
VIEW_ADDR: http://172.18.166.219:8288
SAVE_DIR: /opt/${APP}
NODE_OPTIONS: --max_old_space_size=8192
stages:
# - notice
- build
- deploy
- webhook
#
#feishu-informer: # 飞书回调
# stage: notice
# variables:
# DIFF_URL: "$CI_MERGE_REQUEST_PROJECT_URL/-/merge_requests/$CI_MERGE_REQUEST_IID/diffs"
# rules:
# - if: $CI_PIPELINE_SOURCE=="merge_request_event" && $CI_COMMIT_BRANCH =~ "main-github-pro"
# script:
# - echo "merge request"
# - |
# curl -X POST -H "Content-Type: application/json" \
# -d "{\"msg_type\":\"text\",\"content\":{\"text\":\"项目:${CI_PROJECT_NAME}\\n提交人:${GITLAB_USER_NAME}\\n提交信息:${CI_MERGE_REQUEST_TITLE}\\n合并分支信息:${CI_MERGE_REQUEST_SOURCE_BRANCH_NAME} -> ${CI_MERGE_REQUEST_TARGET_BRANCH_NAME}\\n差异性地址:${DIFF_URL}\\n请及时review代码\"}}" \
# ${FEISHU_WEBHOOK}
builder:
stage: build
rules:
- if: $CI_COMMIT_BRANCH == "main-github-pro" || $CI_COMMIT_BRANCH == "main"
script:
- set -e
- |
if [ ! -d "../artifacts" ]; then
mkdir -p ../artifacts
fi
if [ -d "../artifacts/dist" ]; then
cp -r ../artifacts/dist frontend/dist
fi
- |
if [ -n "$(git diff --name-status HEAD~1 HEAD -- frontend)" ]; then
./scripts/build.sh $BUILD_DIR ${VERSION} all ""
else
./scripts/build.sh $BUILD_DIR ${VERSION}
fi
if [ -d "frontend/dist" ]; then
echo "copy frontend/dist to artifacts/dist"
rm -fr ../artifacts/dist
cp -r frontend/dist ../artifacts/dist
fi
cp $BUILD_DIR/${APP_PRE}_linux_amd64.tar.gz ${SAVE_DIR}
deployer:
stage: deploy
rules:
- if: $CI_COMMIT_BRANCH == "main-github-pro" || $CI_COMMIT_BRANCH == "main"
variables:
APIPARK_GUEST_MODE: allow
APIPARK_GUEST_ID: dklejrfbhjqwdh
script:
- cd ${SAVE_DIR};mkdir -p ${APP_PRE};tar -zxvf ${APP_PRE}_linux_amd64.tar.gz -C ${APP_PRE};cd ${APP_PRE};./install.sh ${SAVE_DIR};./run.sh restart;cd ${SAVE_DIR} && ./clean.sh ${APP_PRE}
when: on_success
success:
stage: webhook
rules:
- if: $CI_COMMIT_BRANCH == "main-github-pro" || $CI_COMMIT_BRANCH == "main"
script:
- |
curl -X POST -H "Content-Type: application/json" \
-d "{\"msg_type\":\"text\",\"content\":{\"text\":\"最近一次提交:${CI_COMMIT_TITLE}\\n提交人:${GITLAB_USER_NAME}\\n项目:${CI_PROJECT_NAME}\\n环境:${DEPLOY_DESC}\\n更新部署完成.\\n访问地址:${VIEW_ADDR}\\n工作流地址:${CI_PIPELINE_URL}\"}}" \
${FEISHU_WEBHOOK}
when: on_success
failure:
stage: webhook
rules:
- if: $CI_COMMIT_BRANCH == "main-github-pro" || $CI_COMMIT_BRANCH == "main"
script:
- |
curl -X POST -H "Content-Type: application/json" \
-d "{\"msg_type\":\"text\",\"content\":{\"text\":\"最近一次提交:${CI_COMMIT_TITLE}\\n提交人:${GITLAB_USER_NAME}\\n项目:${CI_PROJECT_NAME}\\n环境:${DEPLOY_DESC}\\n更新部署失败,请及时到gitlab上查看\\n工作流地址:${CI_PIPELINE_URL}\"}}" \
${FEISHU_WEBHOOK}
when: on_failure
+54 -1
View File
@@ -156,6 +156,10 @@ curl -sSO https://download.apipark.com/install/quick-start.sh ; bash quick-sta
<br>
<br>
# 🚀 Use Cases
## Simplify AI Integration Costs
- Connect to 100+ major models from all mainstream AI vendors, with standardized API calls requiring no additional adaptation work.
@@ -199,11 +203,20 @@ To achieve this goal, we plan to add new features to APIPark, including:
# 📕 Documentation
Visit [APIPark Documentation](https://docs.apipark.com/docs/deploy) for detailed installation guides, API references, and usage instructions.
# 🧑‍🤝‍🧑Friendly Links
<a href="https://xroute.ai/">
<img width="1248" height="158" alt="新建 PPTX 演示文稿 (2)_03" src="https://github.com/user-attachments/assets/0ebd694c-410a-4e3f-a793-90f1140d15df" />
</a>
<br>
<br>
# 🧾 License
APIPark uses the Apache 2.0 License. For more details, please refer to the LICENSE file.
<br>
# 💌 Contact Us
@@ -212,6 +225,46 @@ For enterprise-level features and professional technical support, contact our pr
- Website: https://apipark.com
- Email: contact@apipark.com
🙏 A big thanks to everyone who helped shape APIPark. We are thrilled to hear the communitys thoughts! Lets make the world of APIs and AI stronger and more fun together. 🎉
<br>
🙏 A big thanks to everyone who helped shape APIPark. We are thrilled to hear the communitys thoughts! Lets make the world of APIs and AI stronger and more fun together. 🎉
# 🤝 Partner
- [Cursor](https://www.cursor.com/): Cursor is an AI-powered code editor that integrates artificial intelligence directly into the coding workflow, offering features like intelligent next edit suggestions, deep codebase understanding for relevant answers, and natural language editing to streamline development tasks and boost developer productivity.
- [Dify](https://dify.ai/): Dify is a leading Agentic AI Development Platform that provides a comprehensive suite of tools for building and extending AI applications, offering everything needed for agentic workflows, RAG pipelines, integrations, and observability, while allowing users to amplify their applications with various global Large Language Models (LLMs) and versatile plugins.
- [Trae](https://www.trae.ai/): Trae is an AI-native Integrated Development Environment (IDE) product that aims to embody the concept of “The Real AI Engineer” through intelligent productivity, seamlessly integrating into the development process to enhance quality and efficiency, featuring a chat-based interaction interface and supporting code generation and assistance.
- [Windsurf](https://windsurf.com/): Windsurf is an AI code editor designed to provide a seamless and limitless flow for developers, introducing a new purpose-built IDE that leverages AI to enhance coding with features like "Cascade" for deep codebase understanding, "Windsurf Tab" for intelligent autocompletion, and "Memories" for remembering important aspects of the codebase.
- [Coze](https://www.coze.com/): Coze is a next-generation AI application and chatbot development platform by ByteDance, empowering users to easily create and deploy powerful AI chatbots across various platforms with a no-code bot builder, integrated workflow logic, access to proprietary data, and simplified creation through pre-built plugins, knowledge bases, and workflows.
- [Claude Code](https://www.anthropic.com/claude-code): Claude Code is a command-line AI tool by Anthropic that embeds the Claude Opus 4 model directly into the users terminal, providing deep codebase awareness, the ability to edit files and execute commands, and making coordinated changes across multiple files, all while integrating seamlessly with popular IDEs and leveraging existing test suites.
- [Flowith](https://flowith.io/): Flowith is an AI creation workspace designed to revolutionize productivity and deep work by transforming knowledge and streamlining tasks through a multi-thread interface powered by advanced AI agents, offering an intuitive canvas-based user experience unlike traditional chat-based AI tools, and including a 24/7 operational version for complex tasks.
- [OpenManus](https://github.com/FoundationAgents/OpenManus): OpenManus is an open-source framework dedicated to building general AI agents, aiming to provide a platform where users can create and deploy their own agents without an invite code, supporting multi-agent capabilities, and requiring configuration for Large Language Model (LLM) APIs while integrating with browser automation tools.
- [Fellou](https://fellou.ai/): Fellou is an innovative Agentic Browser designed to transcend traditional web browsing by actively performing actions on behalf of the user, automating the entire process of information gathering and insight delivery, and excelling in in-depth research with seamless integrations with popular tools like Notion and LinkedIn.
- [Genspark](https://www.genspark.ai/): Genspark is an ultimate all-in-one AI companion offering a comprehensive suite of tools like AI Slides, AI Sheets, and AI Chat, designed to enhance various aspects of productivity and content creation, with personalized tools and AI Pods for generating content from diverse sources.
- [TEN](https://github.com/TEN-framework/ten-framework): TEN (The Embodied Narrator) is an open-source framework for building real-time, multimodal conversational voice AI agents, including components like TEN Framework, TEN Turn Detection, TEN Agent, TMAN Designer, and TEN Portal, offering features like Real-time Avatar, seamless MCP integration, real-time hardware communication, and vision/screenshare detection.
- [ChatGPT](https://chatgpt.com/): ChatGPT is an AI chatbot developed by OpenAI, built upon large language models like GPT-3.5 and GPT-4, designed to generate human-like conversational dialogue, understand context, answer follow-up questions, and integrate with various platforms for enhanced productivity through advanced language understanding, generation, and multilingual capabilities.
- [LangChain](https://www.langchain.com/): LangChain is a robust platform engineered for the development of reliable agents and Large Language Model (LLM) applications, offering a comprehensive product suite that seamlessly integrates various tools across the entire application development lifecycle, including LangGraph, LangSmith, and the LangGraph Platform, with functionalities for code generation, automation, and AI Search.
- [LEMON AI](https://lemonai.cc/): Lemon AI is the first Full-stack, Open-source, Agentic AI framework, offering a fully local alternative to platforms like Manus & Genspark AI. It features an integrated Code Interpreter VM sandbox for safe execution.
- [LobeChat](https://lobehub.com/): LobeHub offers LobeChat, a personal LLM productivity tool designed to elevate the user experience beyond traditional chatbots by empowering individuals to build personal AI agents and professional teams, supporting a wide array of LLMs, offering a simple chat interface, visual recognition, voice interaction, a rich plugin ecosystem, and knowledge base functionalities.
- [VS Code](https://code.visualstudio.com/): Visual Studio Code (VS Code) is a widely popular, free, and open-source code editor by Microsoft, renowned for its extensibility and customization, supporting vast programming languages, and integrating AI capabilities like intelligent next edit suggestions and an advanced “agent mode” for complex tasks, with broad compatibility with various AI models.
- [XRoute](https://xroute.ai): The Unified Interface For LLMs, provides better prices, better throughput, and no subscription.
- [XPack MCP Marketplace](https://github.com/xpack-ai/XPack-MCP-Marketplace): The world's first open-source MCP monetization platform, transform any OpenAPI into a monetizable MCP server and build your own API marketplace in just 10 minutes. Everything is open-source and ready for commercial use.
- [MemU](https://github.com/NevaMind-AI/memU): MemU is an open-source memory framework for AI companions
+62748 -60558
View File
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,50 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="356px" height="48px" viewBox="0 0 356 48" enable-background="new 0 0 356 48" xml:space="preserve"> <image id="image0" width="356" height="48" x="0" y="0"
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAWQAAAAwCAMAAAARrfBHAAAAIGNIUk0AAHomAACAhAAA+gAAAIDo
AAB1MAAA6mAAADqYAAAXcJy6UTwAAAEmUExURQAAACBAQCAwQCoqQEBAQICAgCQ3SSoqVTMzTBwo
OB0mOR0pORsoOBAgQBwoOB0qOhwpOR4oOxgoOBsqNR4pORwoOh0pOR0pOR4qOh0qOSAoOB0pOR0p
OR0xOx4qOh0pOR4pNxspOR0pOR0pOBwoOhslNR0qORwpOhwpOR0oOBwoOCAqNRslOh4qOCAwQB0p
OB4qOR0oOhwqOR4pOR0pOB0oOiYzQB0oOB0qOiAqQBwpOR4pOSoqOR0oOBgoOBwoOBwpOSAwQBwp
OiAgQCAoOB0pORwqOSMuOh0qOB0pOSArNSQuQB0pOCAlOiIqOx0oOBwqORslOhsoOB0pOREhQB0q
OR4nOR4nOSAwQBwoOCAlOiArNe9PIX65Ax0pOQOk7vu2BP///6G4x94AAABcdFJOUwAAAAAAAAAA
AEBQUGAQgJ+QXyAwb4De73/vIN+vAc/+cHC/oH8w7s/PYL8wMIAQv++fz3CwngGgTwGvjwFhIUGP
Ec4QIb4BAWDuMQG+MAHAzjFhURGvcXABvjEw0iVpWQAAAAFiS0dEYbKwTIYAAAAJcEhZcwAAFiUA
ABYlAUlSJPAAAAAHdElNRQfpCBUKLDZRNHdnAAAHQ0lEQVR42u2Z+X/TNhTABW1hSm3HMV7b2FlT
nIY27QhJuccOWLuDneweY9P2//8V03t6uhyXuUkIsI/fDxDL0tPTV++QXMYaaaSRRurKnxXC2F8V
8rotfYulgbwCaSCvQBrIK5AG8gqkgbwCaSCvQBrIK5AG8gqkgTyfXOKt+p0XgrwZBMEF5qopIY/a
7biTLK5Jmhdw83RNPoV+B57KmdI5Zrr8rhBbYd3ei0BOhJTt2lPVlJ2uUNJeFDNH+8xjJJ8y930r
p5l6F57pvV0h+rxu70Ug76GF15eKOCyEkXzBKBmgFoOiDHnfzrQ9vKDqy1LZjaxu70UgK0colgr5
AFR2e73DudZeZV98DuQRvDyKowF0yy8aj2uj6Lh25wUgv09usMx8Ad7V7cCvrJhn7a5sgi4nn5Ug
y4AXI/w1WHo8Lg8y2DZy7Eu4FUhyQ87JE92GMIgQIgtbadQqJUPI8l0NAijftMN5mrpJUOqxw3WP
qBX69u05+cKHPJZPt+jnRIgpNQ+DyEwTSrUhaE3AdN2KP9cT07ARyh5OfZUHjzTyTF0EsgyzEzax
+SKyOU5E6r1aRWYbpon8J4dGqm+FhznSXHHYRJUtGB4kGPt5R+9G4RVHp8dtl+Kdcck+Cxm0arIS
mIp9rtTmO+oJdghiK2A9Mxb84C67d18WPny+TAvZItOupP7zYpA5OnFsLa8FGROgdJKDyppTeBxg
ZUM1/LY+CCiGiX4UeUKQb+omXS0hyDqgUeeLUrqALSwFUsfY39YrnAqEzE3EytjoP7CQH5pC3UfT
4GxHzztLgDxAm7n1vVGhZEIhWgVZ7vJh8QFjj6DopMFg4p8BbQiDBLg+HJ5DiUKMCQWRmAbBQNdd
+f+BOJr2aAvNhoWo43olZKTTdsMak1UUpLu0mXgEFN2ieMBsxMphW8xA/hAW0o1TsASOdGsfgQVp
kObuEW9+yJgtcPbca9/X2KsgizzTy8E+kBJMfvBCmKnKGqlW1Smmw8JI16wR7afukeXK+WmKOyrf
FpWQs5wYmstIoc2L1dZzYT0opgqvsoWGvP4xJAY55tIn8sdjtvFEKv30VL44kz8+Y4vKJkajmt11
h2twuNe7MAs501GQm5XbPdId/cfMuOeYsnRu9qJQ1E2PPeX8TGcL7dAVkFk20JGtCkNCI9Q8AaUL
6qzzxUh5KEH+PNYO+0UPPBwcuY9zAPX+wueuAZnM3aOoypbKHSohn6heMiCLDOVL9wyY+bocT55a
f8qwpN1WwwdKpenBDWQN1+aLMmTZe6ATeYfcZqjU7qIdVhkz+QJZGsiQkZ86CgH6llLxFeZuJX9X
CGP/VIjP2J6AJu7V1fHWSsiUcYUnQ1epky64hUxpNcCw4d7ovBJyoptsvpiFDLaNeqiF+4UbB3Ph
3xdlChljVjCQv5ZL+sbR9rBwVfT1Ds0LeeRZZEx5ZIHUh2yzjZ/gIfYf0BHuopD3vD7ZuZAZpY3i
vyB/iw+blA4I8neTVwrZ02ZifN+N95dAlrZ9HxjxD23cmyPzMrW6W0Aaic3oViXk3LPv5ssgY/ba
Vu+tUbwEWaV/uR/PmO/Jz0qQ89mFzQk58X2RjmFQ9PJTB/KJWbkPeRcr/6xsmqpJwXKL9qiwmzDE
mPWvwWXIV3/w7TuZhXzfKQawmypMvE3wIUO+gCV0HMiYk1GLugJCTn7KZmROyLp2g5jzhVP0iKQ6
1Q5mIMdmX44D7txGxuCAdIjHC0eHIG+b+p8rzUR91OJhCTIE6b2BLTsYwnwG8p4wx7Nkgtswti0p
qvUhw+sdrYIgw8e4fkfP8oyt/ahPG+tJahc2J2T3asa1px045An+QcJCyNMlyFy9on0pOY+8IYRh
hrdVJIfnZOiN18Qp4drR3acOZDw4BSqMtUe98xPB8yEDM7EDNvCchsPtEO+L+2ohPmTKkGoFBHnj
idyfp0O66N1Vz1tS6cbPv+jD3NyQE+Fezeja9siJz1saGMjhDGTcgLwdtbv+vpSqj0o96sbXLXrQ
WUUKBEkeR4UuarhCCxmvBndJIy58ewYyzZTn+KkB1cLNSBRRXFDAlCCrWtpxIbMrv0Jb0Ybth+/L
eOMTvSgGrY8X8+Q9j02kcmRRgowkBXxWm4Ws3wn3wofym1VypNI7DiflXfUhJzN17Qbc/H4vQXaz
hQKij2huzrUmiFypPZ6YBn0FcCCP8W3oQcaEQZa0/Gfx3FSn+SDvevZSvpiBzPBrw1HGKiCz0aEC
OfM3nIxuCOYNQh7j9exIfygfqw8Z3edoRRmymy3oyhtXnC643rno1MztNpQg4wKnduPUV7g1Wshz
Un31D/qS55TmeY9wNeX4+PTcd5msx9Vvjzl3xlEgnPq9r77g/MX5ymsKfPvOyi21/6ykZD3zLdk4
Let4xZCXIaUvGm+hNJBXIA3kFcibD3n9rIH8ymX9rCiK0evmtJC8+ZD/B9JAXoE0kFcgDeQVSAO5
kUYaaeQNkX8BdcAtjNRFbWoAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjUtMDgtMjFUMTA6NDQ6NTMr
MDA6MDBp1auWAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDI1LTA4LTIxVDEwOjQ0OjUzKzAwOjAwGIgT
KgAAACh0RVh0ZGF0ZTp0aW1lc3RhbXAAMjAyNS0wOC0yMVQxMDo0NDo1NCswMDowMIo6DHsAAAAA
SUVORK5CYII=" />
</svg>

After

Width:  |  Height:  |  Size: 4.1 KiB

@@ -0,0 +1,8 @@
<svg width="21" height="22" viewBox="0 0 21 22" fill="none" xmlns="http://www.w3.org/2000/svg">
<g id="Microsoft">
<rect id="Rectangle 1010" y="0.5" width="10" height="10" fill="#EF4F21"/>
<rect id="Rectangle 1012" y="11.5" width="10" height="10" fill="#03A4EE"/>
<rect id="Rectangle 1011" x="11" y="0.5" width="10" height="10" fill="#7EB903"/>
<rect id="Rectangle 1013" x="11" y="11.5" width="10" height="10" fill="#FBB604"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 439 B

@@ -0,0 +1,40 @@
provider: azure_openai
label:
en_US: Azure OpenAI
icon_small:
en_US: icon_s_en.svg
icon_large:
en_US: icon_l_en.svg
background: "#E3F0FF"
help:
title:
en_US: Get your API key from Azure
zh_Hans: 从 Azure 获取 API Key
url:
en_US: https://azure.microsoft.com/en-us/products/ai-services/openai-service
supported_model_types:
- llm
configurate_methods:
- customizable-model
provider_credential_schema:
credential_form_schemas:
- variable: api_key
label:
en_US: API Key
type: secret-input
required: true
placeholder:
zh_Hans: 在此输入您的 API Key
en_US: Enter your API Key
- variable: base_url
type: text-input
required: true
placeholder:
zh_Hans: 在此输入您的 Base URL
en_US: Enter your Base URL
- variable: api_version
label:
en_US: '2024-02-01'
type: text-input
required: true
address: https://docs-test-001.openai.azure.com/
+77
View File
@@ -0,0 +1,77 @@
package common
import (
"fmt"
"strconv"
)
func FormatCountInt64(count int64) string {
switch {
case count < 1000:
return strconv.FormatInt(count, 10)
case count < 1000000:
return fmt.Sprintf("%.1fK", float64(count)/1000)
case count < 1000000000:
return fmt.Sprintf("%.1fM", float64(count)/1000000)
case count < 1000000000000:
return fmt.Sprintf("%.1fB", float64(count)/1000000000)
default:
return fmt.Sprintf("%.1fT", float64(count)/1000000000000)
}
}
func FormatCountFloat64(count float64) string {
switch {
case count < 1000:
return fmt.Sprintf("%.1f", count)
case count < 1000000:
return fmt.Sprintf("%.1fK", count/1000)
case count < 1000000000:
return fmt.Sprintf("%.1fM", count/1000000)
case count < 1000000000000:
return fmt.Sprintf("%.1fB", count/1000000000)
default:
return fmt.Sprintf("%.1fT", count/1000000000000)
}
}
func FormatTime(t int64) string {
if t < 1000 {
return strconv.FormatInt(t, 10) + "ms"
}
if t < 1000000 {
return fmt.Sprintf("%.1fs", float64(t)/1000)
}
if t < 1000000000 {
return fmt.Sprintf("%.1fmin", float64(t)/1000000)
}
if t < 1000000000000 {
return fmt.Sprintf("%.1fhour", float64(t)/1000000000)
}
return fmt.Sprintf("%.1D", float64(t)/1000000000000)
}
func FormatByte(b int64) string {
const (
KB = 1000
MB = KB * 1000
GB = MB * 1000
TB = GB * 1000
PB = TB * 1000
)
switch {
case b < KB:
return fmt.Sprintf("%dB", b)
case b < MB:
return fmt.Sprintf("%.1fKB", float64(b)/KB)
case b < GB:
return fmt.Sprintf("%.1fMB", float64(b)/MB)
case b < TB:
return fmt.Sprintf("%.1fGB", float64(b)/GB)
case b < PB:
return fmt.Sprintf("%.1fTB", float64(b)/TB)
default:
return fmt.Sprintf("%.1fPB", float64(b)/PB)
}
}
+2
View File
@@ -29,6 +29,8 @@ func FmtIntFromInterface(val interface{}) int64 {
return int64(ret)
case int:
return int64(ret)
case float64:
return int64(ret)
default:
return 0
}
+13 -1
View File
@@ -3,6 +3,7 @@ package catalogue
import (
"github.com/APIParkLab/APIPark/module/catalogue"
catalogue_dto "github.com/APIParkLab/APIPark/module/catalogue/dto"
"github.com/APIParkLab/APIPark/module/service"
"github.com/APIParkLab/APIPark/module/tag"
tag_dto "github.com/APIParkLab/APIPark/module/tag/dto"
"github.com/gin-gonic/gin"
@@ -14,6 +15,7 @@ var (
type imlCatalogueController struct {
catalogueModule catalogue.ICatalogueModule `autowired:""`
appModule service.IAppModule `autowired:""`
tagModule tag.ITagModule `autowired:""`
}
@@ -26,7 +28,17 @@ func (i *imlCatalogueController) Subscribe(ctx *gin.Context, subscribeInfo *cata
}
func (i *imlCatalogueController) ServiceDetail(ctx *gin.Context, sid string) (*catalogue_dto.ServiceDetail, error) {
return i.catalogueModule.ServiceDetail(ctx, sid)
detail, err := i.catalogueModule.ServiceDetail(ctx, sid)
if err != nil {
return nil, err
}
_, canSubscribe, err := i.appModule.SearchCanSubscribe(ctx, sid)
if err != nil {
return nil, err
}
detail.CanSubscribe = canSubscribe
return detail, nil
}
func (i *imlCatalogueController) Search(ctx *gin.Context, keyword string) ([]*catalogue_dto.Item, []*tag_dto.Item, error) {
+246
View File
@@ -0,0 +1,246 @@
package mcp
import (
"fmt"
"net/http"
"strings"
"sync"
"github.com/APIParkLab/APIPark/module/service"
application_authorization "github.com/APIParkLab/APIPark/module/application-authorization"
mcp_server "github.com/APIParkLab/APIPark/mcp-server"
"github.com/APIParkLab/APIPark/module/mcp"
"github.com/APIParkLab/APIPark/module/system"
"github.com/eolinker/go-common/utils"
"github.com/gin-gonic/gin"
"github.com/mark3labs/mcp-go/server"
)
var _ IMcpController = (*imlMcpController)(nil)
type imlMcpController struct {
settingModule system.ISettingModule `autowired:""`
authorizationModule application_authorization.IAuthorizationModule `autowired:""`
appModule service.IAppModule `autowired:""`
mcpModule mcp.IMcpModule `autowired:""`
sessionKeys sync.Map
server map[string]http.Handler
openServer http.Handler
}
func (i *imlMcpController) AppMCPHandle(ctx *gin.Context) {
appId := ctx.Param("app")
if appId == "" {
ctx.AbortWithStatusJSON(403, gin.H{"code": -1, "msg": "invalid app id", "success": "fail"})
return
}
cfg := i.settingModule.Get(ctx)
req := ctx.Request.WithContext(utils.SetGatewayInvoke(ctx.Request.Context(), cfg.InvokeAddress))
req = req.WithContext(utils.SetLabel(req.Context(), "app", appId))
paths := strings.Split(req.URL.Path, "/")
req.URL.Path = fmt.Sprintf("/api/v1/%s/%s", mcp_server.GlobalBasePath, paths[len(paths)-1])
locale := utils.I18n(ctx)
if v, ok := i.server[locale]; ok {
v.ServeHTTP(ctx.Writer, req)
return
}
i.server[languageEnUs].ServeHTTP(ctx.Writer, req)
}
func (i *imlMcpController) AppHandleSSE(ctx *gin.Context) {
apikey := ctx.Request.URL.Query().Get("apikey")
appId := ctx.Param("app")
if appId == "" {
ctx.AbortWithStatusJSON(403, gin.H{"code": -1, "msg": "invalid app id", "success": "fail"})
return
}
ok, err := i.authorizationModule.CheckAPIKeyAuthorizationByApp(ctx, appId, apikey)
if err != nil {
ctx.AbortWithStatusJSON(403, gin.H{"code": -1, "msg": err.Error(), "success": "fail"})
return
}
if !ok {
ctx.AbortWithStatusJSON(403, gin.H{"code": -1, "msg": "invalid apikey", "success": "fail"})
return
}
ctx.Request.URL.Path = fmt.Sprintf("/openapi/v1/%s/sse", mcp_server.GlobalBasePath)
i.handleSSE(ctx, i.openServer, SessionInfo{
Apikey: apikey,
App: appId,
})
}
func (i *imlMcpController) AppHandleMessage(ctx *gin.Context) {
appId := ctx.Param("app")
if appId == "" {
ctx.AbortWithStatusJSON(403, gin.H{"code": -1, "msg": "invalid app id", "success": "fail"})
return
}
ctx.Request.URL.Path = fmt.Sprintf("/openapi/v1/%s/message", mcp_server.GlobalBasePath)
ctx.Request = ctx.Request.WithContext(utils.SetLabel(ctx.Request.Context(), "app", appId))
i.handleMessage(ctx, i.openServer)
}
func (i *imlMcpController) AppMCPConfig(ctx *gin.Context, appId string) (string, error) {
cfg := i.settingModule.Get(ctx)
if cfg.SitePrefix == "" {
return "", fmt.Errorf("site prefix is empty")
}
appInfo, err := i.appModule.GetApp(ctx, appId)
if err != nil {
return "", fmt.Errorf("get app info error: %v", err)
}
return fmt.Sprintf(mcpDefaultConfig, appInfo.Name, fmt.Sprintf("%s/openapi/v1/mcp/app/%s/sse?apikey={your_api_key}", strings.TrimSuffix(cfg.SitePrefix, "/"), appId)), nil
}
var mcpDefaultConfig = `{
"mcpServers": {
"%s": {
"url": "%s"
}
}
}
`
func (i *imlMcpController) GlobalMCPConfig(ctx *gin.Context) (string, error) {
cfg := i.settingModule.Get(ctx)
if cfg.SitePrefix == "" {
return "", fmt.Errorf("site prefix is empty")
}
return fmt.Sprintf(mcpDefaultConfig, "APIPark-MCP-Server", fmt.Sprintf("%s/openapi/v1/%s/sse?apikey={your_api_key}", strings.TrimSuffix(cfg.SitePrefix, "/"), mcp_server.GlobalBasePath)), nil
}
func (i *imlMcpController) OnComplete() {
i.server = make(map[string]http.Handler)
for language, tools := range mcpToolsByLanguage {
s := server.NewMCPServer("APIPark MCP Server", "1.0.0", server.WithLogging())
s.AddTool(tools[ToolServiceList], i.mcpModule.Services)
s.AddTool(tools[ToolOpenAPIDocument], i.mcpModule.APIs)
s.AddTool(tools[ToolInvokeAPI], i.mcpModule.Invoke)
i.server[language] = server.NewSSEServer(s, server.WithStaticBasePath(fmt.Sprintf("/api/v1/%s", mcp_server.GlobalBasePath)))
if language == languageEnUs {
i.openServer = server.NewSSEServer(s, server.WithStaticBasePath(fmt.Sprintf("/openapi/v1/%s", strings.Trim(mcp_server.GlobalBasePath, "/"))))
}
}
}
func (i *imlMcpController) GlobalMCPHandle(ctx *gin.Context) {
cfg := i.settingModule.Get(ctx)
req := ctx.Request.WithContext(utils.SetGatewayInvoke(ctx.Request.Context(), cfg.InvokeAddress))
locale := utils.I18n(ctx)
if v, ok := i.server[locale]; ok {
v.ServeHTTP(ctx.Writer, req)
return
}
i.server[languageEnUs].ServeHTTP(ctx.Writer, req)
}
func (i *imlMcpController) GlobalHandleSSE(ctx *gin.Context) {
apikey := ctx.Request.URL.Query().Get("apikey")
i.handleSSE(ctx, i.openServer, SessionInfo{
Apikey: apikey,
})
}
func (i *imlMcpController) handleSSE(ctx *gin.Context, server http.Handler, sIn SessionInfo) {
writer := &ResponseWriter{
Writer: ctx.Writer,
sessionId: make(chan string),
}
defer close(writer.sessionId)
sessionId := ""
go func() {
var ok bool
sessionId, ok = <-writer.sessionId
if !ok {
return
}
i.sessionKeys.Store(sessionId, sIn)
}()
server.ServeHTTP(writer, ctx.Request)
i.sessionKeys.Delete(sessionId)
}
func (i *imlMcpController) GlobalHandleMessage(ctx *gin.Context) {
i.handleMessage(ctx, i.openServer)
}
func (i *imlMcpController) MCPHandle(ctx *gin.Context) {
cfg := i.settingModule.Get(ctx)
req := ctx.Request.WithContext(utils.SetGatewayInvoke(ctx.Request.Context(), cfg.InvokeAddress))
mcp_server.ServeHTTP(ctx.Writer, req)
}
func (i *imlMcpController) ServiceHandleSSE(ctx *gin.Context) {
apikey := ctx.Request.URL.Query().Get("apikey")
serviceId := ctx.Param("serviceId")
if serviceId == "" {
ctx.AbortWithStatusJSON(403, gin.H{"code": -1, "msg": "invalid service id", "success": "fail"})
return
}
ok, err := i.authorizationModule.CheckAPIKeyAuthorizationByService(ctx, serviceId, apikey)
if err != nil {
ctx.AbortWithStatusJSON(403, gin.H{"code": -1, "msg": err.Error(), "success": "fail"})
return
}
if !ok {
ctx.AbortWithStatusJSON(403, gin.H{"code": -1, "msg": "invalid apikey", "success": "fail"})
return
}
i.handleSSE(ctx, mcp_server.DefaultMCPServer(), SessionInfo{
Apikey: apikey,
})
}
func (i *imlMcpController) ServiceHandleMessage(ctx *gin.Context) {
i.handleMessage(ctx, mcp_server.DefaultMCPServer())
}
func (i *imlMcpController) ServiceHandleStreamHTTP(ctx *gin.Context) {
apikey := ctx.Request.URL.Query().Get("apikey")
serviceId := ctx.Param("serviceId")
if serviceId == "" {
ctx.AbortWithStatusJSON(403, gin.H{"code": -1, "msg": "invalid service id", "success": "fail"})
return
}
ok, err := i.authorizationModule.CheckAPIKeyAuthorizationByService(ctx, serviceId, apikey)
if err != nil {
ctx.AbortWithStatusJSON(403, gin.H{"code": -1, "msg": err.Error(), "success": "fail"})
return
}
if !ok {
ctx.AbortWithStatusJSON(403, gin.H{"code": -1, "msg": "invalid apikey", "success": "fail"})
return
}
cfg := i.settingModule.Get(ctx)
req := ctx.Request.WithContext(utils.SetGatewayInvoke(ctx.Request.Context(), cfg.InvokeAddress))
req = req.WithContext(utils.SetLabel(req.Context(), "apikey", apikey))
mcp_server.DefaultMCPServer().ServeHTTP(ctx.Writer, req)
}
func (i *imlMcpController) handleMessage(ctx *gin.Context, server http.Handler) {
sessionId := ctx.Request.URL.Query().Get("sessionId")
params, ok := i.sessionKeys.Load(sessionId)
if !ok {
ctx.String(403, "sessionId not found")
return
}
ps, ok := params.(SessionInfo)
cfg := i.settingModule.Get(ctx)
req := ctx.Request.WithContext(utils.SetGatewayInvoke(ctx.Request.Context(), cfg.InvokeAddress))
req = req.WithContext(utils.SetLabel(req.Context(), "apikey", ps.Apikey))
req = req.WithContext(utils.SetLabel(req.Context(), "app", ps.App))
server.ServeHTTP(ctx.Writer, req)
}
type SessionInfo struct {
Apikey string
App string
}
+33
View File
@@ -0,0 +1,33 @@
package mcp
import (
"reflect"
"github.com/eolinker/go-common/autowire"
"github.com/gin-gonic/gin"
)
type IMcpController interface {
MCPHandle(ctx *gin.Context)
GlobalMCPHandle(ctx *gin.Context)
GlobalHandleSSE(ctx *gin.Context)
GlobalHandleMessage(ctx *gin.Context)
GlobalMCPConfig(ctx *gin.Context) (string, error)
AppMCPHandle(ctx *gin.Context)
AppHandleSSE(ctx *gin.Context)
AppHandleMessage(ctx *gin.Context)
AppMCPConfig(ctx *gin.Context, appId string) (string, error)
ServiceHandleSSE(ctx *gin.Context)
ServiceHandleMessage(ctx *gin.Context)
ServiceHandleStreamHTTP(ctx *gin.Context)
}
func init() {
autowire.Auto[IMcpController](func() reflect.Value {
return reflect.ValueOf(new(imlMcpController))
})
}
+104
View File
@@ -0,0 +1,104 @@
package mcp
import "github.com/mark3labs/mcp-go/mcp"
const (
ToolServiceList = "service_list"
ToolOpenAPIDocument = "openapi_document"
ToolInvokeAPI = "invoke_api"
languageZhCN = "zh-CN"
languageZhTW = "zh-TW"
languageEnUs = "en-US"
languageJaJp = "ja-JP"
)
var mcpToolsByLanguage = map[string]map[string]mcp.Tool{
languageZhCN: toolsZhCN,
languageZhTW: toolsZhTW,
languageEnUs: toolsEnUs,
languageJaJp: toolsJaJp,
}
var toolsZhTW = map[string]mcp.Tool{
ToolServiceList: mcp.NewTool(
ToolServiceList,
mcp.WithDescription("此工具用於獲取 APIPark 中已註冊服務的列表。每個服務包含其唯一標識(service ID)、名稱、描述及包含的 API 列表等關鍵信息。支持通過關鍵詞進行模糊搜索,以便快速縮小查找範圍。在獲得某個服務的 ID 後,可以調用 openapi_document 工具來獲取該服務的 OpenAPI 文檔,以便後續調用其提供的 API 接口。"),
mcp.WithString("keyword", mcp.Description("關鍵詞,用於模糊搜索服務"))),
ToolOpenAPIDocument: mcp.NewTool(
ToolOpenAPIDocument,
mcp.WithDescription("此工具用於獲取 APIPark 中服務的 OpenAPI 文檔。"),
mcp.WithString("service_id", mcp.Description("服務 ID"))),
ToolInvokeAPI: mcp.NewTool(
ToolInvokeAPI,
mcp.WithDescription("此工具可直接發送 API 請求。在調用此工具之前,需要根據該 API 的 OpenAPI 文檔構造所需的請求參數,如請求路徑、方法、查詢參數、頭部信息、主體內容等。使用此工具時不需要傳遞任何認證信息,例如 Authorization 頭部可以省略。"),
mcp.WithString("path", mcp.Description("API 的請求路徑"), mcp.Required()),
mcp.WithString("method", mcp.Description("API 的請求方法,例如 GET、POST、PUT"), mcp.Required()),
mcp.WithString("content-type", mcp.Description("請求的 Content-Type。若方法為 POST、PUT 或 PATCH,則必須指定")),
mcp.WithObject("query", mcp.Description("請求的查詢參數,類型為 map[string]string")),
mcp.WithObject("header", mcp.Description("請求的頭部,類型為 map[string]string")),
mcp.WithString("body", mcp.Description("請求主體內容,通常為 JSON 字符串")),
),
}
var toolsZhCN = map[string]mcp.Tool{
ToolServiceList: mcp.NewTool(
ToolServiceList,
mcp.WithDescription("此工具用于获取 APIPark 中已注册服务的列表。每个服务包含其唯一标识(service ID)、名称、描述及包含的 API 列表等关键信息。支持通过关键词进行模糊搜索,以便快速缩小查找范围。在获得某个服务的 ID 后,可以调用 openapi_document 工具来获取该服务的 OpenAPI 文档,以便后续调用其提供的 API 接口。"),
mcp.WithString("keyword", mcp.Description("关键词,用于模糊搜索服务"))),
ToolOpenAPIDocument: mcp.NewTool(
ToolOpenAPIDocument, mcp.WithDescription("此工具用于查询指定服务的 OpenAPI 文档。返回的格式支持 OpenAPI v3 和 v2 标准。通过输入服务 ID,可以查看该服务所有 API 的定义、参数结构、请求方式等详细信息,为后续构造 API 调用请求做准备。"),
mcp.WithString("service", mcp.Description("欲查询的服务唯一标识")),
),
ToolInvokeAPI: mcp.NewTool(ToolInvokeAPI,
mcp.WithDescription("此工具可直接发送 API 请求。在调用此工具之前,需要根据该 API 的 OpenAPI 文档构造所需的请求参数,如请求路径、方法、查询参数、头部信息、主体内容等。使用此工具时不需要传递任何认证信息,例如 Authorization 头部可以省略。"),
mcp.WithString("path", mcp.Description("API 的请求路径"), mcp.Required()),
mcp.WithString("method", mcp.Description("API 的请求方法,例如 GET、POST、PUT"), mcp.Required()),
mcp.WithString("content-type", mcp.Description("请求的 Content-Type。若方法为 POST、PUT 或 PATCH,则必须指定")),
mcp.WithObject("query", mcp.Description("请求的查询参数,类型为 map[string]string")),
mcp.WithObject("header", mcp.Description("请求的头部,类型为 map[string]string")),
mcp.WithString("body", mcp.Description("请求主体内容,通常为 JSON 字符串")),
),
}
var toolsEnUs = map[string]mcp.Tool{
ToolServiceList: mcp.NewTool(
ToolServiceList,
mcp.WithDescription("This tool is used to retrieve a list of registered services in APIPark. Each service includes its unique identifier (service ID), name, description, and a list of APIs it contains. It supports fuzzy searching by keyword for quick narrowing down of results. After obtaining a service ID, you can use the openapi_document tool to get the OpenAPI documentation for that service, which is necessary for invoking its APIs."),
mcp.WithString("keyword", mcp.Description("Keyword for fuzzy search of services"))),
ToolOpenAPIDocument: mcp.NewTool(
ToolOpenAPIDocument,
mcp.WithDescription("This tool is used to query the OpenAPI documentation of a specified service. The returned format supports both OpenAPI v3 and v2 standards. By entering the service ID, you can view detailed information about all APIs of that service, including definitions, parameter structures, request methods, etc., which prepares you for subsequent API calls."),
mcp.WithString("service", mcp.Description("Unique identifier of the service to query"))),
ToolInvokeAPI: mcp.NewTool(
ToolInvokeAPI,
mcp.WithDescription("This tool can directly send API requests. Before using this tool, you need to construct the required request parameters based on the OpenAPI documentation of the API, such as request path, method, query parameters, header information, body content, etc. No authentication information like Authorization header is required when using this tool."),
mcp.WithString("path", mcp.Description("API request path"), mcp.Required()),
mcp.WithString("method", mcp.Description("API request method, e.g., GET, POST, PUT"), mcp.Required()),
mcp.WithString("content-type", mcp.Description("Content-Type of the request. Must be specified if method is POST, PUT, or PATCH")),
mcp.WithObject("query", mcp.Description("Query parameters of the request, type map[string]string")),
mcp.WithObject("header", mcp.Description("Header information of the request, type map[string]string")),
mcp.WithString("body", mcp.Description("Body content of the request, usually in JSON string")),
),
}
var toolsJaJp = map[string]mcp.Tool{
ToolServiceList: mcp.NewTool(
ToolServiceList,
mcp.WithDescription("このツールは、APIParkに登録されているサービスのリストを取得するために使用されます。各サービスには、ユニークな識別子(サービスID)、名前、説明、および含まれるAPIのリストが含まれています。キーワードによるあいまい検索をサポートしており、結果を迅速に絞り込むことができます。サービスIDを取得した後は、openapi_documentツールを使用してそのサービスのOpenAPIドキュメントを取得し、そのAPIを呼び出す準備をします。"),
mcp.WithString("keyword", mcp.Description("サービスをあいまい検索するためのキーワード"))),
ToolOpenAPIDocument: mcp.NewTool(
ToolOpenAPIDocument,
mcp.WithDescription("このツールは、指定されたサービスのOpenAPIドキュメントを照会するために使用されます。返される形式は、OpenAPI v3およびv2標準の両方をサポートしています。サービスIDを入力することで、そのサービスのすべてのAPIに関する詳細情報(定義、パラメータ構造、リクエスト方法など)を表示し、後続のAPI呼び出しの準備をします。"),
mcp.WithString("service", mcp.Description("照会するサービスのユニークな識別子"))),
ToolInvokeAPI: mcp.NewTool(
ToolInvokeAPI,
mcp.WithDescription("このツールは、APIリクエストを直接送信できます。このツールを使用する前に、APIのOpenAPIドキュメントに基づいて、必要なリクエストパラメータ(リクエストパス、メソッド、クエリパラメータ、ヘッダー情報、ボディコンテンツなど)を構築する必要があります。このツールを使用する際には、Authorizationヘッダーなどの認証情報は必要ありません。"),
mcp.WithString("path", mcp.Description("APIのリクエストパス"), mcp.Required()),
mcp.WithString("method", mcp.Description("APIのリクエストメソッド(例:GET、POST、PUT"), mcp.Required()),
mcp.WithString("content-type", mcp.Description("リクエストのContent-Type。メソッドがPOST、PUT、またはPATCHの場合は必須です")),
mcp.WithObject("query", mcp.Description("リクエストのクエリパラメータ、タイプはmap[string]string")),
mcp.WithObject("header", mcp.Description("リクエストのヘッダー、タイプはmap[string]string")),
mcp.WithString("body", mcp.Description("リクエストのボディコンテンツ、通常はJSON文字列")),
),
}
+35
View File
@@ -0,0 +1,35 @@
package mcp
import (
"net/http"
"regexp"
)
type ResponseWriter struct {
Writer http.ResponseWriter
sessionId chan string
}
func (r *ResponseWriter) Flush() {
fluster, ok := r.Writer.(http.Flusher)
if ok {
fluster.Flush()
}
}
func (r *ResponseWriter) Header() http.Header {
return r.Writer.Header()
}
func (r *ResponseWriter) Write(bytes []byte) (int, error) {
re := regexp.MustCompile(`sessionId=([^&?\s]+)`)
match := re.FindStringSubmatch(string(bytes))
if len(match) > 1 {
r.sessionId <- match[1]
}
return r.Writer.Write(bytes)
}
func (r *ResponseWriter) WriteHeader(statusCode int) {
r.Writer.WriteHeader(statusCode)
}
+61
View File
@@ -2,6 +2,7 @@ package monitor
import (
"fmt"
"strconv"
"time"
"github.com/APIParkLab/APIPark/module/monitor"
@@ -17,6 +18,66 @@ type imlMonitorStatisticController struct {
module monitor.IMonitorStatisticModule `autowired:""`
}
func (i *imlMonitorStatisticController) ChartRestOverview(ctx *gin.Context, start string, end string) (*monitor_dto.ChartRestOverview, error) {
s, e, err := formatTime(start, end)
if err != nil {
return nil, err
}
return i.module.RestChartOverview(ctx, "", s, e)
}
func (i *imlMonitorStatisticController) ChartAIOverview(ctx *gin.Context, start string, end string) (*monitor_dto.ChartAIOverview, error) {
s, e, err := formatTime(start, end)
if err != nil {
return nil, err
}
return i.module.AIChartOverview(ctx, "", s, e)
}
func (i *imlMonitorStatisticController) AITopN(ctx *gin.Context, start string, end string, limit string) ([]*monitor_dto.TopN, []*monitor_dto.TopN, error) {
s, e, err := formatTime(start, end)
if err != nil {
return nil, nil, err
}
l, err := strconv.Atoi(limit)
if err != nil {
if limit == "" {
l = 10
} else {
return nil, nil, fmt.Errorf("parse limit %s error: %w", limit, err)
}
}
return i.module.Top(ctx, "", s, e, l, "ai")
}
func formatTime(start string, end string) (int64, int64, error) {
s, err := strconv.ParseInt(start, 10, 64)
if err != nil {
return 0, 0, fmt.Errorf("parse start time %s error: %w", start, err)
}
e, err := strconv.ParseInt(end, 10, 64)
if err != nil {
return 0, 0, fmt.Errorf("parse end time %s error: %w", end, err)
}
return s, e, nil
}
func (i *imlMonitorStatisticController) RestTopN(ctx *gin.Context, start string, end string, limit string) ([]*monitor_dto.TopN, []*monitor_dto.TopN, error) {
s, e, err := formatTime(start, end)
if err != nil {
return nil, nil, err
}
l, err := strconv.Atoi(limit)
if err != nil {
if limit == "" {
l = 10
} else {
return nil, nil, fmt.Errorf("parse limit %s error: %w", limit, err)
}
}
return i.module.Top(ctx, "", s, e, l, "rest")
}
func (i *imlMonitorStatisticController) Statistics(ctx *gin.Context, dataType string, input *monitor_dto.StatisticInput) (interface{}, error) {
switch dataType {
case monitor_dto.DataTypeApi:
+5
View File
@@ -22,6 +22,11 @@ type IMonitorStatisticController interface {
InvokeTrendInner(ctx *gin.Context, dataType string, typ string, api string, provider string, subscriber string, input *monitor_dto.CommonInput) (*monitor_dto.MonInvokeCountTrend, string, error)
StatisticsInner(ctx *gin.Context, dataType string, typ string, id string, input *monitor_dto.StatisticInput) (interface{}, error)
ChartRestOverview(ctx *gin.Context, start string, end string) (*monitor_dto.ChartRestOverview, error)
ChartAIOverview(ctx *gin.Context, start string, end string) (*monitor_dto.ChartAIOverview, error)
AITopN(ctx *gin.Context, start string, end string, limit string) ([]*monitor_dto.TopN, []*monitor_dto.TopN, error)
RestTopN(ctx *gin.Context, start string, end string, limit string) ([]*monitor_dto.TopN, []*monitor_dto.TopN, error)
}
type IMonitorConfigController interface {
+211 -20
View File
@@ -5,9 +5,13 @@ import (
"fmt"
"io"
"net/http"
"strconv"
"strings"
"time"
"github.com/APIParkLab/APIPark/module/monitor"
monitor_dto "github.com/APIParkLab/APIPark/module/monitor/dto"
ai_provider_local "github.com/APIParkLab/APIPark/ai-provider/local"
subscribe_dto "github.com/APIParkLab/APIPark/module/subscribe/dto"
@@ -55,10 +59,6 @@ import (
"github.com/google/uuid"
)
//var (
// ollamaConfig = "{\n \"mirostat\": 0,\n \"mirostat_eta\": 0.1,\n \"mirostat_tau\": 5.0,\n \"num_ctx\": 4096,\n \"repeat_last_n\":64,\n \"repeat_penalty\": 1.1,\n \"temperature\": 0.7,\n \"seed\": 42,\n \"num_predict\": 42,\n \"top_k\": 40,\n \"top_p\": 0.9,\n \"min_p\": 0.5\n}\n"
//)
var (
_ IServiceController = (*imlServiceController)(nil)
@@ -66,20 +66,210 @@ var (
)
type imlServiceController struct {
module service.IServiceModule `autowired:""`
docModule service.IServiceDocModule `autowired:""`
subscribeModule subscribe.ISubscribeModule `autowired:""`
aiAPIModule ai_api.IAPIModule `autowired:""`
routerModule router.IRouterModule `autowired:""`
apiDocModule api_doc.IAPIDocModule `autowired:""`
providerModule ai.IProviderModule `autowired:""`
aiLocalModel ai_local.ILocalModelModule `autowired:""`
appModule service.IAppModule `autowired:""`
upstreamModule upstream.IUpstreamModule `autowired:""`
settingModule system.ISettingModule `autowired:""`
teamModule team.ITeamModule `autowired:""`
catalogueModule catalogue.ICatalogueModule `autowired:""`
transaction store.ITransaction `autowired:""`
module service.IServiceModule `autowired:""`
docModule service.IServiceDocModule `autowired:""`
subscribeModule subscribe.ISubscribeModule `autowired:""`
aiAPIModule ai_api.IAPIModule `autowired:""`
routerModule router.IRouterModule `autowired:""`
apiDocModule api_doc.IAPIDocModule `autowired:""`
providerModule ai.IProviderModule `autowired:""`
aiLocalModel ai_local.ILocalModelModule `autowired:""`
appModule service.IAppModule `autowired:""`
upstreamModule upstream.IUpstreamModule `autowired:""`
settingModule system.ISettingModule `autowired:""`
teamModule team.ITeamModule `autowired:""`
catalogueModule catalogue.ICatalogueModule `autowired:""`
monitorModule monitor.IMonitorStatisticModule `autowired:""`
monitorConfigModule monitor.IMonitorConfigModule `autowired:""`
transaction store.ITransaction `autowired:""`
}
func (i *imlServiceController) RestLogInfo(ctx *gin.Context, serviceId string, logId string) (*service_dto.RestLogInfo, error) {
return i.module.RestLogInfo(ctx, serviceId, logId)
}
func (i *imlServiceController) AILogInfo(ctx *gin.Context, serviceId string, logId string) (*service_dto.AILogInfo, error) {
return i.module.AILogInfo(ctx, serviceId, logId)
}
func (i *imlServiceController) AILogs(ctx *gin.Context, serviceId string, start string, end string, page string, size string) ([]*service_dto.AILogItem, int64, error) {
s, e, err := formatTime(start, end)
if err != nil {
return nil, 0, err
}
if serviceId == "" {
return nil, 0, fmt.Errorf("service id is empty")
}
if page == "" {
page = "1"
}
if size == "" {
size = "20"
}
p, err := strconv.Atoi(page)
if err != nil {
return nil, 0, err
}
ps, err := strconv.Atoi(size)
if err != nil {
return nil, 0, err
}
return i.module.AILogs(ctx, serviceId, s, e, p, ps)
}
func (i *imlServiceController) RestLogs(ctx *gin.Context, serviceId string, start string, end string, page string, size string) ([]*service_dto.RestLogItem, int64, error) {
s, e, err := formatTime(start, end)
if err != nil {
return nil, 0, err
}
if serviceId == "" {
return nil, 0, fmt.Errorf("service id is empty")
}
if page == "" {
page = "1"
}
if size == "" {
size = "20"
}
p, err := strconv.Atoi(page)
if err != nil {
return nil, 0, err
}
ps, err := strconv.Atoi(size)
if err != nil {
return nil, 0, err
}
return i.module.RestLogs(ctx, serviceId, s, e, p, ps)
}
func (i *imlServiceController) ServiceOverview(ctx *gin.Context, serviceId string) (*service_dto.Overview, error) {
o, err := i.module.ServiceOverview(ctx, serviceId)
if err != nil {
return nil, err
}
cfg, err := i.monitorConfigModule.GetMonitorConfig(ctx)
if err != nil {
return nil, err
}
if len(cfg.Config) < 1 {
return o, nil
}
statistics, err := i.monitorModule.ProviderStatistics(ctx, &monitor_dto.StatisticInput{
Services: []string{serviceId},
CommonInput: &monitor_dto.CommonInput{
Start: time.Now().Add(-24 * 30 * time.Hour).Unix(),
End: time.Now().Unix(),
},
})
if err != nil {
return nil, err
}
if len(statistics) < 1 {
return o, nil
}
o.InvokeNum = statistics[0].RequestTotal
return o, nil
}
func (i *imlServiceController) AIChartOverview(ctx *gin.Context, serviceId string, start string, end string) (*monitor_dto.ServiceChartAIOverview, error) {
s, e, err := formatTime(start, end)
if err != nil {
return nil, err
}
if serviceId == "" {
return nil, fmt.Errorf("service is required")
}
so, err := i.module.ServiceOverview(ctx, serviceId)
if err != nil {
return nil, err
}
result := &monitor_dto.ServiceChartAIOverview{
EnableMCP: so.EnableMCP,
SubscriberNum: so.SubscriberNum,
APINum: so.APINum,
ServiceKind: so.ServiceKind,
}
cfg, err := i.monitorConfigModule.GetMonitorConfig(ctx)
if err != nil {
return nil, err
}
if len(cfg.Config) < 1 {
return result, nil
}
o, err := i.monitorModule.AIChartOverview(ctx, serviceId, s, e)
if err != nil {
return nil, err
}
result.AvailableMonitor = true
result.ChartAIOverview = o
return result, nil
}
func (i *imlServiceController) RestChartOverview(ctx *gin.Context, serviceId string, start string, end string) (*monitor_dto.ServiceChartRestOverview, error) {
s, e, err := formatTime(start, end)
if err != nil {
return nil, err
}
if serviceId == "" {
return nil, fmt.Errorf("service is required")
}
so, err := i.module.ServiceOverview(ctx, serviceId)
if err != nil {
return nil, err
}
result := &monitor_dto.ServiceChartRestOverview{
EnableMCP: so.EnableMCP,
SubscriberNum: so.SubscriberNum,
APINum: so.APINum,
ServiceKind: so.ServiceKind,
}
cfg, err := i.monitorConfigModule.GetMonitorConfig(ctx)
if err != nil {
return nil, err
}
if len(cfg.Config) < 1 {
return result, nil
}
o, err := i.monitorModule.RestChartOverview(ctx, serviceId, s, e)
if err != nil {
return nil, err
}
result.AvailableMonitor = true
result.ChartRestOverview = o
return result, nil
}
func formatTime(start string, end string) (int64, int64, error) {
s, err := strconv.ParseInt(start, 10, 64)
if err != nil {
return 0, 0, fmt.Errorf("parse start time %s error: %w", start, err)
}
e, err := strconv.ParseInt(end, 10, 64)
if err != nil {
return 0, 0, fmt.Errorf("parse end time %s error: %w", end, err)
}
return s, e, nil
}
func (i *imlServiceController) Top10(ctx *gin.Context, serviceId string, start string, end string) ([]*monitor_dto.TopN, []*monitor_dto.TopN, error) {
if serviceId == "" {
return nil, nil, fmt.Errorf("serviceId is required")
}
info, err := i.module.Get(ctx, serviceId)
if err != nil {
return nil, nil, err
}
s, e, err := formatTime(start, end)
if err != nil {
return nil, nil, err
}
return i.monitorModule.Top(ctx, serviceId, s, e, 10, info.ServiceKind)
}
func (i *imlServiceController) QuickCreateAIService(ctx *gin.Context, input *service_dto.QuickCreateAIService) error {
@@ -542,8 +732,9 @@ type imlAppController struct {
authModule application_authorization.IAuthorizationModule `autowired:""`
}
func (i *imlAppController) SearchCanSubscribe(ctx *gin.Context, serviceId string) ([]*service_dto.SimpleAppItem, error) {
return i.module.SearchCanSubscribe(ctx, serviceId)
func (i *imlAppController) SearchCanSubscribe(ctx *gin.Context, serviceId string) ([]*service_dto.SubscribeAppItem, error) {
items, _, err := i.module.SearchCanSubscribe(ctx, serviceId)
return items, err
}
func (i *imlAppController) Search(ctx *gin.Context, teamId string, keyword string) ([]*service_dto.AppItem, error) {
+16 -1
View File
@@ -3,6 +3,8 @@ package service
import (
"reflect"
monitor_dto "github.com/APIParkLab/APIPark/module/monitor/dto"
service_dto "github.com/APIParkLab/APIPark/module/service/dto"
"github.com/gin-gonic/gin"
@@ -32,6 +34,19 @@ type IServiceController interface {
Swagger(ctx *gin.Context)
ExportSwagger(ctx *gin.Context)
Top10(ctx *gin.Context, serviceId string, start string, end string) ([]*monitor_dto.TopN, []*monitor_dto.TopN, error)
AIChartOverview(ctx *gin.Context, serviceId string, start string, end string) (*monitor_dto.ServiceChartAIOverview, error)
RestChartOverview(ctx *gin.Context, serviceId string, start string, end string) (*monitor_dto.ServiceChartRestOverview, error)
ServiceOverview(ctx *gin.Context, serviceId string) (*service_dto.Overview, error)
AILogs(ctx *gin.Context, serviceId string, start string, end string, page string, size string) ([]*service_dto.AILogItem, int64, error)
RestLogs(ctx *gin.Context, serviceId string, start string, end string, page string, size string) ([]*service_dto.RestLogItem, int64, error)
RestLogInfo(ctx *gin.Context, serviceId string, logId string) (*service_dto.RestLogInfo, error)
AILogInfo(ctx *gin.Context, serviceId string, logId string) (*service_dto.AILogInfo, error)
}
type IAppController interface {
@@ -44,7 +59,7 @@ type IAppController interface {
// SimpleApps 获取简易项目列表
SimpleApps(ctx *gin.Context, keyword string) ([]*service_dto.SimpleAppItem, error)
MySimpleApps(ctx *gin.Context, keyword string) ([]*service_dto.SimpleAppItem, error)
SearchCanSubscribe(ctx *gin.Context, keyword string) ([]*service_dto.SimpleAppItem, error)
SearchCanSubscribe(ctx *gin.Context, serviceId string) ([]*service_dto.SubscribeAppItem, error)
GetApp(ctx *gin.Context, appId string) (*service_dto.App, error)
DeleteApp(ctx *gin.Context, appId string) error
}
+26
View File
@@ -0,0 +1,26 @@
package system_apikey
import (
"reflect"
system_apikey_dto "github.com/APIParkLab/APIPark/module/system-apikey/dto"
"github.com/eolinker/go-common/autowire"
"github.com/gin-gonic/gin"
)
type IAPIKeyController interface {
Create(ctx *gin.Context, input *system_apikey_dto.Create) error
Update(ctx *gin.Context, id string, input *system_apikey_dto.Update) error
Delete(ctx *gin.Context, id string) error
Get(ctx *gin.Context, id string) (*system_apikey_dto.APIKey, error)
Search(ctx *gin.Context, keyword string) ([]*system_apikey_dto.Item, error)
SimpleList(ctx *gin.Context) ([]*system_apikey_dto.SimpleItem, error)
MyAPIKeys(ctx *gin.Context) ([]*system_apikey_dto.SimpleItem, error)
MyAPIKeysByService(ctx *gin.Context, serviceId string, appId string) ([]*system_apikey_dto.AuthorizationItem, error)
}
func init() {
autowire.Auto[IAPIKeyController](func() reflect.Value {
return reflect.ValueOf(new(imlAPIKeyController))
})
}
+51
View File
@@ -0,0 +1,51 @@
package system_apikey
import (
system_apikey "github.com/APIParkLab/APIPark/module/system-apikey"
system_apikey_dto "github.com/APIParkLab/APIPark/module/system-apikey/dto"
"github.com/gin-gonic/gin"
)
var _ IAPIKeyController = new(imlAPIKeyController)
type imlAPIKeyController struct {
apikeyModule system_apikey.IAPIKeyModule `autowired:""`
}
func (i *imlAPIKeyController) MyAPIKeysByService(ctx *gin.Context, serviceId string, appId string) ([]*system_apikey_dto.AuthorizationItem, error) {
if serviceId != "" {
return i.apikeyModule.MyAPIKeysByService(ctx, serviceId)
}
if appId != "" {
return i.apikeyModule.MyAPIKeysByApp(ctx, appId)
}
return nil, nil
}
func (i *imlAPIKeyController) MyAPIKeys(ctx *gin.Context) ([]*system_apikey_dto.SimpleItem, error) {
return i.apikeyModule.MyAPIKeys(ctx)
}
func (i *imlAPIKeyController) Create(ctx *gin.Context, input *system_apikey_dto.Create) error {
return i.apikeyModule.Create(ctx, input)
}
func (i *imlAPIKeyController) Update(ctx *gin.Context, id string, input *system_apikey_dto.Update) error {
return i.apikeyModule.Update(ctx, id, input)
}
func (i *imlAPIKeyController) Delete(ctx *gin.Context, id string) error {
return i.apikeyModule.Delete(ctx, id)
}
func (i *imlAPIKeyController) Get(ctx *gin.Context, id string) (*system_apikey_dto.APIKey, error) {
return i.apikeyModule.Get(ctx, id)
}
func (i *imlAPIKeyController) Search(ctx *gin.Context, keyword string) ([]*system_apikey_dto.Item, error) {
return i.apikeyModule.Search(ctx, keyword)
}
func (i *imlAPIKeyController) SimpleList(ctx *gin.Context) ([]*system_apikey_dto.SimpleItem, error) {
return i.apikeyModule.SimpleList(ctx)
}
+1 -1
View File
@@ -21,7 +21,7 @@
"plugins": ["react", "@typescript-eslint", "prettier", "unused-imports"],
"rules": {
"react/react-in-jsx-scope": "off",
"prettier/prettier": "error",
"prettier/prettier": "off",
"@typescript-eslint/no-explicit-any": "warn",
"no-unused-vars": "off",
"@typescript-eslint/no-unused-vars": "off",
+1 -1
View File
@@ -6,7 +6,7 @@ yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*
.next/
node_modules
dist
market_dist
+42
View File
@@ -0,0 +1,42 @@
const fs = require('fs');
const path = require('path');
const srcDir = path.join(__dirname, 'src');
const filesToDelete = [
'package.json',
'tsconfig.json',
'tsconfig.node.json',
'vite.config.ts',
'postcss.config.js',
'tailwind.config.js',
'.eslintrc.cjs',
'index.html',
'start-vite.js'
];
function walkDirAndClean(dir) {
if (!fs.existsSync(dir)) return;
fs.readdirSync(dir).forEach(f => {
let dirPath = path.join(dir, f);
try {
let stat = fs.statSync(dirPath);
if (stat.isDirectory() && f !== 'node_modules') {
// If it's a top-level module directory like src/core, src/common
if (dir === srcDir) {
filesToDelete.forEach(file => {
const fileToDelete = path.join(dirPath, file);
if (fs.existsSync(fileToDelete)) {
fs.unlinkSync(fileToDelete);
console.log(`Deleted: ${fileToDelete}`);
}
});
}
}
} catch(e) {}
});
}
walkDirAndClean(srcDir);
console.log('Cleanup completed!');
+50
View File
@@ -0,0 +1,50 @@
const fs = require('fs');
const path = require('path');
const srcDir = path.join(__dirname, 'src');
function walkDir(dir, callback) {
if (dir.includes('node_modules')) return;
fs.readdirSync(dir).forEach(f => {
let dirPath = path.join(dir, f);
try {
let isDirectory = fs.statSync(dirPath).isDirectory();
isDirectory ? walkDir(dirPath, callback) : callback(path.join(dir, f));
} catch(e) {}
});
}
const filesToRename = [];
const filesToUpdate = [];
walkDir(srcDir, (filePath) => {
if (filePath.endsWith('.module.css')) {
filesToRename.push(filePath);
} else if (filePath.endsWith('.tsx') || filePath.endsWith('.ts')) {
filesToUpdate.push(filePath);
}
});
filesToRename.forEach(oldPath => {
const newPath = oldPath.replace(/\.module\.css$/, '.css');
// Read and remove :global wrappers entirely
let content = fs.readFileSync(oldPath, 'utf8');
content = content.replace(/:global\(([^)]+)\)/g, '$1'); // replace :global(.foo) with .foo
content = content.replace(/:global\s+/g, ''); // replace :global .foo with .foo
fs.writeFileSync(oldPath, content);
fs.renameSync(oldPath, newPath);
console.log(`Renamed and cleaned: ${path.basename(oldPath)} -> ${path.basename(newPath)}`);
});
filesToUpdate.forEach(filePath => {
let content = fs.readFileSync(filePath, 'utf8');
if (content.includes('.module.css')) {
content = content.replace(/\.module\.css/g, '.css');
fs.writeFileSync(filePath, content);
console.log(`Updated imports in: ${path.basename(filePath)}`);
}
});
console.log('Done!');
-7
View File
@@ -1,7 +0,0 @@
{
"packages": [
"packages/*"
],
"version": "independent"
}
+144
View File
@@ -0,0 +1,144 @@
const fs = require('fs');
const path = require('path');
const rootDir = __dirname;
const packagesDir = path.join(rootDir, 'packages');
const srcDir = path.join(rootDir, 'src');
const appDir = path.join(srcDir, 'app');
console.log('🚀 开始拆除 Lerna 并迁移至 Next.js...');
// 1. 创建基础目录
if (!fs.existsSync(srcDir)) fs.mkdirSync(srcDir);
if (!fs.existsSync(appDir)) fs.mkdirSync(appDir);
// 2. 读取并合并 package.json
const rootPkgPath = path.join(rootDir, 'package.json');
const rootPkg = JSON.parse(fs.readFileSync(rootPkgPath, 'utf8'));
const mergedDeps = { ...rootPkg.dependencies };
const mergedDevDeps = { ...rootPkg.devDependencies };
if (fs.existsSync(packagesDir)) {
const packages = fs.readdirSync(packagesDir);
for (const pkg of packages) {
const pkgPath = path.join(packagesDir, pkg);
if (fs.statSync(pkgPath).isDirectory()) {
// 合并依赖
const childPkgPath = path.join(pkgPath, 'package.json');
if (fs.existsSync(childPkgPath)) {
const childPkg = JSON.parse(fs.readFileSync(childPkgPath, 'utf8'));
Object.assign(mergedDeps, childPkg.dependencies || {});
Object.assign(mergedDevDeps, childPkg.devDependencies || {});
}
// 移动目录到 src 下
const destPath = path.join(srcDir, pkg);
if (!fs.existsSync(destPath)) {
fs.renameSync(pkgPath, destPath);
console.log(`📦 已迁移模块: packages/${pkg} -> src/${pkg}`);
}
}
}
// 删除空的 packages 文件夹
try { fs.rmdirSync(packagesDir); } catch (e) { console.error('Failed to remove packages dir, skipping', e) }
}
// 3. 清理并更新根 package.json
delete rootPkg.workspaces; // 移除 lerna workspaces
rootPkg.scripts = {
"dev": "next dev",
"build": "next build",
"start": "next start",
"lint": "next lint"
};
// 移除 Vite 和 Lerna 相关依赖
const removeDeps = ['lerna', 'vite', '@originjs/vite-plugin-federation', '@vitejs/plugin-react', 'vite-tsconfig-paths'];
removeDeps.forEach(dep => {
delete mergedDeps[dep];
delete mergedDevDeps[dep];
});
// 添加 Next.js 和 React 最新核心依赖 (与 xroute-ui 对齐)
mergedDeps['next'] = "15.4.5";
mergedDeps['react'] = "19.1.0";
mergedDeps['react-dom'] = "19.1.0";
mergedDevDeps['@types/react'] = "^19";
mergedDevDeps['@types/react-dom'] = "^19";
rootPkg.dependencies = mergedDeps;
rootPkg.devDependencies = mergedDevDeps;
fs.writeFileSync(rootPkgPath, JSON.stringify(rootPkg, null, 2));
console.log('✅ package.json 依赖已合并并重写');
// 4. 生成 tsconfig.json (配置路径别名)
const tsconfigPath = path.join(rootDir, 'tsconfig.json');
const tsconfig = {
compilerOptions: {
target: "es5",
lib: ["dom", "dom.iterable", "esnext"],
allowJs: true,
skipLibCheck: true,
strict: false,
noEmit: true,
esModuleInterop: true,
module: "esnext",
moduleResolution: "bundler",
resolveJsonModule: true,
isolatedModules: true,
jsx: "preserve",
incremental: true,
plugins: [{ name: "next" }],
baseUrl: ".",
paths: {
"@/*": ["src/*"],
// 欺骗原有代码,使其能找到拍平后的新路径
"@apipark/common/*": ["src/common/src/*"],
"@apipark/core/*": ["src/core/src/*"],
"@apipark/dashboard/*": ["src/dashboard/src/*"],
"@apipark/market/*": ["src/market/src/*"],
"@apipark/openApi/*": ["src/openApi/src/*"],
"@apipark/systemRunning/*": ["src/systemRunning/src/*"]
}
},
include: ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
exclude: ["node_modules"]
};
fs.writeFileSync(tsconfigPath, JSON.stringify(tsconfig, null, 2));
console.log('✅ tsconfig.json 别名映射已配置');
// 5. 创建 Next.js App Router 挂载点
const layoutCode = `export default function RootLayout({ children }: { children: React.ReactNode }) {
return (
<html lang="en">
<body>{children}</body>
</html>
);
}`;
fs.writeFileSync(path.join(appDir, 'layout.tsx'), layoutCode);
const slugDir = path.join(appDir, '[[...slug]]');
if (!fs.existsSync(slugDir)) fs.mkdirSync(slugDir, { recursive: true });
const pageCode = `"use client";
import dynamic from 'next/dynamic';
import { useEffect, useState } from 'react';
// 动态导入原有的 Vite SPA 根组件,禁用 SSR 避免 window 报错
const ApiParkApp = dynamic(() => import('@/core/src/App'), {
ssr: false,
loading: () => <div style={{ padding: 50 }}>Loading APIPark...</div>
});
export default function Page() {
const [mounted, setMounted] = useState(false);
useEffect(() => setMounted(true), []);
if (!mounted) return null;
return <ApiParkApp />;
}`;
fs.writeFileSync(path.join(slugDir, 'page.tsx'), pageCode);
console.log('✅ Next.js 路由挂载点创建完毕!');
console.log('🎉 迁移完成!请执行 pnpm install 重新安装依赖。');
+4
View File
@@ -0,0 +1,4 @@
/// <reference types="next" />
// NOTE: This file should not be edited
// see https://nextjs.org/docs/app/api-reference/config/typescript for more information.
+42
View File
@@ -0,0 +1,42 @@
/** @type {import('next').NextConfig} */
const nextConfig = {
images: {
disableStaticImages: true,
},
experimental: {
optimizePackageImports: ["@heroui/react"],
},
transpilePackages: ['@heroui/react', '@heroui/theme', '@ant-design', 'antd', 'rc-util', 'rc-pagination', 'rc-picker', 'rc-tree', 'rc-table'],
async rewrites() {
return [
{
source: '/api/v1/:path*',
destination: 'http://172.18.166.219:8288/api/v1/:path*', // Proxy to backend
},
{
source: '/api2/v1/:path*',
destination: 'http://172.18.166.219:8288/api2/v1/:path*', // Proxy to backend 2
}
];
},
webpack: (config) => {
config.module.rules.push({
test: /\.(svg|png|jpe?g|gif|webp)$/i,
type: 'asset/resource',
generator: {
filename: 'static/media/[name].[hash][ext]'
}
});
// 解决一些 Node.js polyfill 在浏览器端缺失的问题
config.resolve.fallback = {
...config.resolve.fallback,
fs: false,
path: false,
os: false,
};
return config;
},
};
module.exports = nextConfig;
+59 -29
View File
@@ -2,20 +2,12 @@
"name": "frontend",
"version": "1.0.0",
"private": true,
"workspaces": [
"packages/*"
],
"description": "",
"scripts": {
"test": "jest",
"build": "set NODE_OPTIONS=--max-old-space-size=4096 && lerna run build --scope=core --stream --verbose ",
"serve": "lerna run preview --parallel",
"serve:remotes": "lerna run serve --scope=remote --parallel",
"dev": "lerna run dev --scope=core --stream",
"stop": "kill-port --port 5000",
"scan": "i18next-scanner --config i18next-scanner.config.js",
"lint": "eslint . --ext .js,.jsx,.ts,.tsx --fix",
"lint:fix": "eslint . --ext .js,.jsx,.ts,.tsx --fix && prettier --write ."
"dev": "next dev -p 5000",
"build": "next build",
"start": "next start -p 5000",
"lint": "next lint"
},
"keywords": [],
"author": "",
@@ -23,50 +15,88 @@
"dependencies": {
"@ant-design/icons": "^5.2.6",
"@ant-design/pro-components": "2.7.19",
"@originjs/vite-plugin-federation": "^1.3.3",
"@emotion/react": "^11.14.0",
"@floating-ui/react": "^0.26.24",
"@formkit/auto-animate": "^0.8.1",
"@heroui/react": "^3.0.3",
"@heroui/styles": "^3.0.3",
"@heroui/theme": "^2.4.20",
"@lexical/code": "^0.17.1",
"@lexical/react": "^0.17.1",
"@lexical/selection": "^0.17.1",
"@lexical/text": "^0.17.1",
"@lexical/utils": "^0.17.1",
"@modelcontextprotocol/sdk": "^1.9.0",
"@mui/icons-material": "^5.15.6",
"@mui/lab": "5.0.0-alpha.150",
"@mui/material": "5.14.14",
"@mui/x-data-grid-pro": "6.18.1",
"@rollup/plugin-dynamic-import-vars": "^2.1.2",
"@tinymce/tinymce-react": "^4.3.2",
"@types/dompurify": "^3.0.5",
"@types/lodash-es": "^4.17.12",
"@types/uuid": "^9.0.7",
"@vitejs/plugin-react": "^4.2.0",
"@xyflow/react": "^12.3.6",
"ahooks": "^3.8.1",
"allotment": "^1.20.0",
"autoprefixer": "^10.4.16",
"copy-to-clipboard": "^3.3.3",
"crc": "^4.3.2",
"dayjs": "^1.11.10",
"dompurify": "^3.1.6",
"echarts": "^5.5.0",
"echarts-for-react": "^3.0.2",
"framer-motion": "^10.16.4",
"fs-extra": "^11.2.0",
"highlight.js": "^11.9.0",
"i18next": "^23.12.2",
"i18next-browser-languagedetector": "^8.0.0",
"js-base64": "^3.7.5",
"lexical": "^0.17.1",
"mockjs": "^1.1.0",
"next": "15.4.5",
"postcss": "^8.4.31",
"postcss-import": "^16.1.0",
"postcss-nesting": "^12.1.5",
"react": "^18.2.0",
"rc-picker": "^4.1.1",
"react": "19.1.0",
"react-ace": "^10.1.0",
"react-dom": "^18.2.0",
"react-dom": "19.1.0",
"react-dropzone": "^14.2.3",
"react-hook-form": "^7.49.3",
"react-i18next": "^15.0.1",
"react-joyride": "^2.8.2",
"react-router-dom": "6.20.0",
"swagger-ui-react": "^5.17.14",
"tailwindcss": "^3.3.5",
"uuid": "^9.0.1",
"vite-tsconfig-paths": "^4.3.2",
"react-json-view": "^1.21.3",
"zod": "^3.23.8",
"@modelcontextprotocol/sdk": "^1.9.0"
"react-router-dom": "6.20.0",
"react-virtuoso": "^4.7.11",
"swagger-ui-react": "^5.17.14",
"tailwindcss": "^4.2.1",
"tinymce": "^6.8.1",
"use-context-selector": "^2.0.0",
"uuid": "^9.0.1",
"zod": "^3.23.8"
},
"devDependencies": {
"@ant-design/cssinjs": "^1.18.2",
"@antv/g6": "^4.8.24",
"@formily/antd-v5": "^1.2.1",
"@formily/core": "^2.2.13",
"@formily/react": "^2.2.13",
"@formily/reactive": "^2.2.13",
"@iconify/react": "^5.0.2",
"@monaco-editor/react": "^4.6.0",
"@tailwindcss/postcss": "^4.2.1",
"lightningcss": "^1.32.0",
"@testing-library/jest-dom": "^6.4.5",
"@testing-library/react": "^15.0.7",
"@testing-library/react-hooks": "^8.0.1",
"@types/file-saver": "^2.0.7",
"@types/jest": "^29.5.12",
"@types/node": "^20.10.5",
"@types/react": "^18.2.37",
"@types/react-dom": "^18.2.15",
"@types/react": "^19",
"@types/react-dom": "^19",
"@typescript-eslint/eslint-plugin": "^6.10.0",
"@typescript-eslint/parser": "^6.10.0",
"@vitejs/plugin-react": "^4.2.0",
"antd": "^5.19.4",
"babel-jest": "^29.7.0",
"eslint": "^8.53.0",
@@ -76,22 +106,22 @@
"eslint-plugin-react-hooks": "^4.6.0",
"eslint-plugin-react-refresh": "^0.4.4",
"eslint-plugin-unused-imports": "^4.1.4",
"exceljs": "^4.4.0",
"file-saver": "^2.0.5",
"i18next-scanner": "^4.5.0",
"jest": "^29.7.0",
"jest-environment-jsdom": "^29.7.0",
"jest-fetch-mock": "^3.0.3",
"jsdom": "^24.0.0",
"lerna": "^8.1.3",
"less": "^4.2.0",
"lodash": "^4.17.21",
"lodash-es": "^4.17.21",
"monaco-editor": "^0.45.0",
"postcss-nested": "^6.0.1",
"prettier": "^3.1.1",
"react-test-renderer": "^18.3.1",
"ts-jest": "^29.1.2",
"typescript": "^5.2.2",
"vite": "^5.0.0",
"vite-jest": "^0.1.4"
}
}
}
-41
View File
@@ -1,41 +0,0 @@
{
"name": "common",
"version": "1.0.0",
"description": "Common library for AO Platform",
"scripts": {
"dev": "vite",
"build": "vite build",
"test": "node ./__tests__/common.test.js"
},
"dependencies": {
"@floating-ui/react": "^0.26.24",
"@formkit/auto-animate": "^0.8.1",
"@lexical/code": "^0.17.1",
"@lexical/react": "^0.17.1",
"@lexical/selection": "^0.17.1",
"@lexical/text": "^0.17.1",
"@lexical/utils": "^0.17.1",
"@mui/icons-material": "^5.15.6",
"@mui/lab": "5.0.0-alpha.150",
"@mui/material": "5.14.14",
"@mui/x-data-grid-pro": "6.18.1",
"ahooks": "^3.8.1",
"allotment": "^1.20.0",
"echarts": "^5.5.0",
"lexical": "^0.17.1",
"mockjs": "^1.1.0",
"rc-picker": "^4.1.1",
"react-dropzone": "^14.2.3",
"react-hook-form": "^7.49.3",
"use-context-selector": "^2.0.0"
},
"devDependencies": {
"@formily/antd-v5": "^1.2.1",
"@formily/core": "^2.2.13",
"@formily/react": "^2.2.13",
"@formily/reactive": "^2.2.13",
"@monaco-editor/react": "^4.6.0",
"exceljs": "^4.4.0",
"monaco-editor": "^0.45.0"
}
}
@@ -1,10 +0,0 @@
export default {
plugins: {
'postcss-import': {},
'tailwindcss/nesting': {},
tailwindcss: {},
autoprefixer: {}
},
}
@@ -1,11 +0,0 @@
import { Breadcrumb } from 'antd'
import { useBreadcrumb } from '@common/contexts/BreadcrumbContext.tsx'
import { FC, useEffect } from 'react'
const TopBreadcrumb: FC = () => {
const { breadcrumb } = useBreadcrumb()
useEffect(() => {}, [breadcrumb])
return <Breadcrumb items={breadcrumb} />
}
export default TopBreadcrumb
-4
View File
@@ -1,4 +0,0 @@
@tailwind base;
@tailwind components;
@tailwind utilities;
@@ -1,70 +0,0 @@
{
"K630c9e6d": "APIPark",
"Ka3e9f580": "发布名称",
"Kb2480682": "策略列表",
"K76036e25": "HTTP 请求头",
"K44607e3f": "全等匹配",
"Kc287500a": "前缀匹配",
"Kfc0b1147": "后缀匹配",
"Ka4a92043": "子串匹配",
"K30b2e44f": "非等匹配",
"Kb1587991": "空值匹配",
"K1e97dbd8": "存在匹配",
"Kc8ee3e62": "不存在匹配",
"K87c5a801": "区分大小写的正则匹配",
"K95f062f1": "不区分大小写的正则匹配",
"Kfbd230a5": "任意匹配",
"Kd85208a3": "驳回",
"Kad6aa439": "已订阅",
"K9a68443b": "取消申请",
"Kaeba0229": "透传客户端请求 Host",
"K6d7e2fd0": "使用上游服务 Host",
"K31332633": "重写 Host",
"K2c2bc64f": "动态服务发现",
"K78b1ca25": "地址",
"K1644b775": "新增",
"Kec91f0db": "申请方消费者",
"K118d8d74": "数据格式",
"Kfe7c7d2d": "关键字",
"K2f57a694": "正则表达式",
"K8953e0a6": "手机号",
"K6f86a038": "身份证号",
"K7954e7c8": "银行卡号",
"K320fdb17": "金额",
"K7867acda": "日期",
"K7d327ae8": "局部显示",
"Kfbf38e3c": "局部遮蔽",
"Kd8c1fbb0": "截取",
"K89829921": "替换",
"K480a7165": "乱序",
"Kea0d69df": "随机字符串",
"Ke7c84d1d": "自定义字符串",
"K49731763": "请输入IP地址或CIDR范围,每条以换行分割",
"K3a34d49b": "待更新",
"Kd2850420": "待删除",
"K83237c89": "输入的IP或CIDR不符合格式",
"K5ae2c87a": "请正确输入路径,如/usr/*或*/usr/*",
"K508d8bf4": "集成地址",
"K67f4e9bb": "与外部平台集成时,获取 API 市场中文档信息的域名",
"Kc82b8374": "编辑策略",
"K4b34a5e5": "策略类型",
"K57f0fee8": "匹配条件",
"K10650c58": "数据脱敏规则",
"K1b34a9ab": "配置脱敏规则",
"K26d22405": "匹配值",
"K1546e1fe": "脱敏类型",
"K9b9b0629": "起始位置",
"K52c84fe1": "长度",
"Kde84409c": "替换类型",
"K338653b4": "替换值",
"Kbaeed3b7": "JSON Path",
"K4cd91d61": "脱敏规则",
"K8dcad979": "自定义字符串; 值:",
"K82e3f7b7": "起始位置:(0)位;长度:(1)位",
"K49dfc123": "已选择(0)项(1)数据",
"K8457ea34": "所有(0)",
"K7ca9a795": "属性名称",
"Kc4391744": "属性值",
"K678e13fc": "配置(0)",
"Kf5fd27ed": "输入名称查找用户"
}
@@ -1,26 +0,0 @@
import * as monaco from 'monaco-editor'
import editorWorker from 'monaco-editor/esm/vs/editor/editor.worker?worker'
import jsonWorker from 'monaco-editor/esm/vs/language/json/json.worker?worker'
import cssWorker from 'monaco-editor/esm/vs/language/css/css.worker?worker'
import htmlWorker from 'monaco-editor/esm/vs/language/html/html.worker?worker'
import tsWorker from 'monaco-editor/esm/vs/language/typescript/ts.worker?worker'
self.MonacoEnvironment = {
getWorker(_, label) {
if (label === 'json') {
return new jsonWorker()
}
if (label === 'css' || label === 'scss' || label === 'less') {
return new cssWorker()
}
if (label === 'html' || label === 'handlebars' || label === 'razor') {
return new htmlWorker()
}
if (label === 'typescript' || label === 'javascript') {
return new tsWorker()
}
return new editorWorker()
}
}
export { monaco }
@@ -1,98 +0,0 @@
/** @type {import('tailwindcss').Config} */
module.exports = {
important:true,
content: [
`../*/src/**/*.{js,ts,jsx,tsx}`,
]
,
theme: {
extend: {
width: {
INPUT_NORMAL: '100%',
// INPUT_NORMAL: '346px',
INPUT_LARGE: '508px',
GROUP: '240px',
SEARCH: '276px',
LOG: '254px'
},
minHeight:{
TEXTAREA:'68px'
},
borderRadius: {
DEFAULT: 'var(--border-radius)',
SEARCH_RADIUS: '50px'
},
boxShadow:{
SCROLL: '0 2px 2px #0000000d',
SCROLL_TOP:' 0 -2px 2px -2px var(--border-color)'
},
colors: {
DISABLE_BG: 'var(--disabled-background-color)',
MAIN_TEXT: 'var(--text-color)',
MAIN_HOVER_TEXT: 'var(--text-hover-color)',
SECOND_TEXT:'var(--disabled-text-color)',
MAIN_BG: 'var(--background-color)',
MENU_BG:'var(--MENU-BG-COLOR)',
'bar-theme': 'var(--bar-background-color)',
BORDER: 'var(--border-color)',
NAVBAR_BTN_BG: 'var(--item-active-background-color)',
MAIN_DISABLED_BG: 'var(--disabled-background-color)',
theme: 'var(--primary-color)',
DESC_TEXT: 'var(--TITLE_TEXT)',
HOVER_BG: 'var(--item-hover-background-color)',
guide_cluster: '#ee6760',
guide_upstream: '#f9a429',
guide_api: '#71d24d',
guide_publishApi: '#5884ff',
guide_final: '#915bf9',
table_text: 'var(--table-text-color)',
status_success:'#138913',
status_fail:"#ff3b30",
status_update:"#03a9f4",
status_pending:"#ffa500",
status_offline:"#8f8e93",
A_HOVER:'var(--button-primary-hover-background-color)'
},
backgroundImage:{
LAYOUT_BG:'linear-gradient(107.97deg, rgba(32,41,117,1) 4.41%,rgba(16,13,27,1) 86.11%)',
LAYOUT_BG_DARK:'#fff',
},
spacing: {
mbase: 'var(--FORM_SPAN)',
label: '12px', // 选择器和label之间的间距,待删
btnbase: 'var(--LAYOUT_MARGIN)', // x方向的间距
btnybase: 'var(--LAYOUT_MARGIN)', // y轴方向的间距
btnrbase: '20px', // 页面最右侧边距20px
formtop: 'var(--FORM_SPAN)',
icon: '5px',
blockbase: '40px',
DEFAULT_BORDER_RADIUS: 'var(--border-radius)',
TREE_TITLE:'var(--small-padding) var(--LAYOUT_PADDING);',
'navbar-height': 'var(--layout-header-height)',
TAG_LEFT:'10px',
PAGE_INSIDE_X:'40px',
PAGE_INSIDE_T:'30px',
PAGE_INSIDE_B:'20px',
},
borderColor: {
'color-base': 'var(--border-color)'
}
}
},
plugins: [
function({ addUtilities }) {
addUtilities({
'.h-calc-100vh-minus-navbar': {
height: 'calc(100vh - var(--layout-header-height))',
},
'.w-calc-100vw-minus-padding-r': {
width: 'calc(100% - 40px)',
},
}, ['responsive', 'hover']);
}
],
corePlugins: {
preflight: false,
},
}
-28
View File
@@ -1,28 +0,0 @@
{
"compilerOptions": {
"target": "ES2020",
"useDefineForClassFields": true,
"lib": ["ES2020", "DOM", "DOM.Iterable"],
"module": "ESNext",
"skipLibCheck": true,
/* Bundler mode */
"moduleResolution": "bundler",
"allowImportingTsExtensions": true,
"resolveJsonModule": true,
"isolatedModules": true,
"noEmit": true,
"jsx": "react-jsx",
/* Linting */
"strict": true,
"noUnusedLocals": false,
"noUnusedParameters": false,
"noFallthroughCasesInSwitch": true,
"paths": {
"@common/*": ["./src/*"],
"@core/*": ["../core/src/*"],
"@market/*": ["../market/src/*"]
},
},
"references": [{ "path": "./tsconfig.node.json" }]
}
@@ -1,10 +0,0 @@
{
"compilerOptions": {
"composite": true,
"skipLibCheck": true,
"module": "ESNext",
"moduleResolution": "bundler",
"allowSyntheticDefaultImports": true
},
"include": ["vite.config.ts"]
}
-49
View File
@@ -1,49 +0,0 @@
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
import path from 'path'
import dynamicImportVars from '@rollup/plugin-dynamic-import-vars'
export default defineConfig({
css: {
preprocessorOptions: {
less: {
javascriptEnabled: true
}
},
modules: {
localsConvention: 'camelCase',
generateScopedName: '[local]_[hash:base64:2]'
}
},
plugins: [
react(),
dynamicImportVars({
include: ['src'],
exclude: [],
warnOnError: false
})
],
resolve: {
alias: [
{ find: /^~/, replacement: '' },
{ find: '@common', replacement: path.resolve(__dirname, './src') },
{ find: '@market', replacement: path.resolve(__dirname, '/./market/src') },
{ find: '@core', replacement: path.resolve(__dirname, '../core/src') }
]
},
server: {
proxy: {
'/api/v1': {
// target: 'http://uat.apikit.com:11204/mockApi/aoplatform/',
target: 'http://172.18.166.219:8288/',
changeOrigin: true
},
'/api2/v1': {
// target: 'http://uat.apikit.com:11204/mockApi/aoplatform/',
target: 'http://172.18.166.219:8288/',
changeOrigin: true
}
}
},
logLevel: 'info'
})
-1
View File
@@ -1 +0,0 @@
VITE_APP_MODE=openSource
-18
View File
@@ -1,18 +0,0 @@
module.exports = {
root: true,
env: { browser: true, es2020: true },
extends: [
'eslint:recommended',
'plugin:@typescript-eslint/recommended',
'plugin:react-hooks/recommended',
],
ignorePatterns: ['dist', '.eslintrc.cjs','public','code-snippet','ace-editor'],
parser: '@typescript-eslint/parser',
plugins: ['react-refresh'],
rules: {
'react-refresh/only-export-components': [
'warn',
{ allowConstantExport: true },
],
},
}
-36
View File
@@ -1,36 +0,0 @@
<!doctype html>
<html lang="en">
<head id="head">
<meta charset="UTF-8" />
<link id="favicon" rel="icon" type="image/svg+xml" href="/frontend/favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
</head>
<body id="eo-body">
<div id="root"></div>
<script type="module" src="/src/main.tsx"></script>
<script>
document.addEventListener('DOMContentLoaded', () => {
const eoBody = document.getElementById('eo-body');
const favicon = document.getElementById('favicon');
const createScript = (id, src) => {
const script = document.createElement('script');
script.id = id;
script.async = true;
script.src = src;
return script;
};
const iconparkApintoSrc = window.location.hostname === 'localhost' ? '/iconpark_apinto.js' : '/frontend/iconpark_apinto.js';
const iconparkEolinkSrc = window.location.hostname === 'localhost' ? '/iconpark_eolink.js' : '/frontend/iconpark_eolink.js';
const faviconSrc = window.location.hostname === 'localhost' ? '/favicon.ico' : '/frontend/favicon.ico';
favicon.href = faviconSrc;
eoBody.appendChild(createScript('iconpark_apinto', iconparkApintoSrc));
eoBody.appendChild(createScript('iconpark_eolink', iconparkEolinkSrc));
});
</script>
</body>
</html>
-23
View File
@@ -1,23 +0,0 @@
{
"name": "core",
"private": true,
"version": "0.0.0",
"type": "module",
"scripts": {
"dev": " vite --mode open --port 5000 --strictPort",
"dev:pro": " vite --config ./vite.pro.config.ts --mode pro --port 5000 --strictPort ",
"build": "vite build --mode open",
"build:pro": "vite --config ./vite.pro.config.ts build --mode pro",
"postinstall": "node scripts/moveTinymce.js",
"lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0",
"preview": "vite preview --port 5000 --strictPort",
"serve": "vite preview --port 5000 --strictPort"
},
"dependencies": {
"@tinymce/tinymce-react": "^4.3.2",
"@xyflow/react": "^12.3.6",
"fs-extra": "^11.2.0",
"highlight.js": "^11.9.0",
"tinymce": "^6.8.1"
}
}
-10
View File
@@ -1,10 +0,0 @@
export default {
plugins: {
'postcss-import': {},
'tailwindcss/nesting': {},
tailwindcss: {},
autoprefixer: {}
},
}
-309
View File
@@ -1,309 +0,0 @@
@tailwind base;
@tailwind components;
@layer components {
.button-bottom-default {
@apply border-[0px] border-b-[1px] border-solid border-BORDER;
}
}
@tailwind utilities;
#root {
width: 100vw;
height:100vh;
}
:global.ant-tree-node-content-wrapper{
overflow: hidden;
}
.tree-title-hover{
display: flex;
justify-content: space-between;
align-items:center;
.tree-title-span{
text-overflow: ellipsis;
}
.tree-title-more{
display: none;
}
&:hover .tree-title-more{
display: flex;
height:22px;
width:22px;
}
}
.ant-layout-content.apipark-layout-layout-content{
border-radius:10px 0 0 0 ;
overflow:hidden;
background-color:'transparent'
}
.apipark-layout-global-header-collapsed-button{
color:hsl(0, 0%, 100%);
}
.apipark-layout-top-nav-header-main{
display: flex;
align-items: center;
}
.apipark-layout-top-nav-header-menu {
height:50px;
line-height:50px;
.ant-menu-item.apipark-layout-base-menu-horizontal-menu-item.ant-menu-item-selected::after{
border-bottom:2px solid #fff !important;
}
.ant-menu-item.apipark-layout-base-menu-horizontal-menu-item.ant-menu-item-active:not(.ant-menu-item-selected)::after{
border-bottom:2px solid transparent !important;
}
}
.apipark-layout-base-menu-inline-group .ant-menu-item-group-title{
color:rgb(255 255 255 / 70%) !important;
}
.avatar-dom > div{
display: flex;
flex-direction: row-reverse;
align-items: center;
gap:8px;
}
.apipark-layout-layout{
.apipark-layout-layout-bg-list{
background-image: radial-gradient(circle farthest-corner at 450px 350px, #050eb7, #17163e 500px);
}
.ant-layout-header.apipark-layout-layout-header{
backdrop-filter: unset !important;
height:var(--layout-header-height);
line-height: var(--layout-header-height);
background-color: transparent;
li.apipark-layout-base-menu-horizontal-menu-item{
color:rgb(255 255 255 / 70%) !important;
&.ant-menu-item-selected{
color:#fff !important;
}
&.ant-menu-item-active{
color:#fff !important;
}
}
li.ant-menu-submenu-horizontal.ant-menu-overflow-item-rest .ant-menu-submenu-title{
color:#fff !important;
}
}
.ant-layout-sider.apipark-layout-sider{
height:calc(100vh - var(--layout-header-height)) !important;
inset-block-start: var(--layout-header-height);
.ant-menu {
.ant-menu-item-group-title{
font-size:12px;
padding:12px 16px;
}
.ant-menu-item{
margin-block:0 !important;
}
.ant-menu-light:not(.ant-menu-horizontal) .ant-menu-item:not(.ant-menu-item-selected):active{
background-color: unset;
}
}
.apipark-layout-sider-collapsed-button{
display: none;
}
ul.ant-menu.ant-menu-root.ant-menu-inline,
ul.ant-menu.ant-menu-root.ant-menu-vertical{
> li {
color:rgb(255 255 255 / 70%) !important;
/* border-radius: 10px;
background-color: rgba(255,255,255,0.1) !important;
border: 1px solid rgba(255,255,255,0.15); */
}
> li.ant-menu-item-active {
color:#fff !important;
}
> li.ant-menu-item-selected {
background-color: #fff !important;
border: 1px solid #fff !important;
color:#333 !important;
}
}
ul.apipark-layout-sider-menu .ant-menu-item-group-list{
> li {
color:rgb(255 255 255 / 70%) !important;
}
> li:active{
background-color: transparent;
}
> li.ant-menu-item-active {
color:#fff !important;
}
> li.ant-menu-item-selected {
background-color: #fff !important;
border: 1px solid #fff !important;
color:#333 !important;
}
}
.ant-menu-item {
height:40px;
margin-block:10px;
}
}
.apipark-layout-drawer-sider{
background:#17163E;
padding-top:20px;
.ant-layout-sider.apipark-layout-sider{
height: 100% !important;
inset-block: 20px;
}
}
.apipark-layout-layout-container{
>.ant-layout-header{
height:var(--layout-header-height) !important;
line-height:var(--layout-header-height) !important;
}
>.apipark-layout-layout-content.apipark-layout-layout-has-header{
padding-block:0px;
padding-inline:0px;
background-color: #fff !important;
}
}
.ant-pro-global-header-header-actions-avatar > div{
color:#fff !important;
}
.ant-menu-item-divider.apipark-layout-base-menu-inline-divider{
border-color: rgb(255 255 255 / 15%) !important;
}
}
.tox-tinymce{
border:none !important;
}
a{
transition:none !important;
}
.ant-result ant-result-error{
background-color: #fff !important;
}
.ant-tabs-tab-btn{
display: flex;
align-items:center;
.ant-tabs-tab-icon{
display: inline-flex;
align-items:center;
}
}
.eo_page_list .ant-pro-table{
overflow: hidden;
border-radius: 10px;
border:1px solid var(--table-border-color) !important;
}
.swagger-ui{
width: 100%;
.model-box-control:focus,.models-control:focus, .opblock-summary-control:focus{
outline:unset !important;
}
.information-container{
.info{
display: none;
}
}
}
.ant-pro-table .ant-popover .ant-popover-inner-content{
.ant-form-item{
background-color: transparent;
border:none;
}
}
.ant-menu .ant-menu-title-content{
display:unset !important;
}
.ai-setting-svg-container svg{
width: 100%;
height:100%;
display:block;
}
.ai-service-api-preview .swagger-ui h3.opblock-tag{
display: none;
}
/* 整个背景容器设置 */
.background-container {
background: radial-gradient(ellipse 80% 900px at top, rgb(255 255 255 / 10%) 0%, rgb(4 0 71) 30%, rgb(13 17 23) 100%);
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100vh;
overflow: hidden;
z-index: 1;
isolate: isolate;
}
/* SVG背景图案 */
.background-pattern {
position: absolute;
inset: 0;
width: 100%;
height: 100%;
stroke: rgba(255, 255, 255, 0.1);
mask-image: radial-gradient(100% 100% at top right, white, transparent);
}
.login-block{
background: rgba(255, 255, 255, 0.1) !important;
.login-input{
color:#fff !important;
background: rgba(255, 255, 255, 0.1) !important;
border: 1px solid rgba(255, 255, 255, 0.1) !important;
&:hover, &:focus, &.ant-input-status-error, &.ant-input-status-error:hover, &.ant-input-status-error:focus-within{
background: rgba(255, 255, 255, 0.2) !important;
border: 1px solid rgba(255, 255, 255, 0.2) !important;
}
}
input:-webkit-autofill,
input:-webkit-autofill:focus {
transition: background-color 0s 600000s, color 0s 600000s !important;
}
}
.ant-select-selection-overflow-item:first-child {
max-width: calc(100% - 60px);
margin-right: 4px;
}
a[disabled]:hover {
color: #BBB;
cursor: not-allowed;
}
.ant-input-group-addon{
height:32px !important;
.ant-btn.ant-btn-default{
height:32px !important;
}
}
-221
View File
@@ -1,221 +0,0 @@
import {FC, useCallback, useEffect, useRef, useState} from "react";
import {App, Button, Divider, Form, FormInstance, Input, Spin, Tooltip} from "antd";
import {useGlobalContext} from "@common/contexts/GlobalStateContext.tsx";
import {useFetch} from "@common/hooks/http.ts";
import {BasicResponse, STATUS_CODE} from "@common/const/const.tsx";
import {useNavigate} from "react-router-dom";
// import {useCrypto} from "../hooks/crypto.ts";
import Logo from '@common/assets/layout-logo.png'
import { $t } from "@common/locales";
import { Icon } from "@iconify/react/dist/iconify.js";
import LanguageSetting from "@common/components/aoplatform/LanguageSetting";
import { LoadingOutlined } from "@ant-design/icons";
const Login:FC = ()=> {
const {state, dispatch} = useGlobalContext()
const {fetchData} = useFetch()
const { message } = App.useApp()
const navigate = useNavigate();
const formRef = useRef<FormInstance>(null);
const [loading,setLoading] = useState<boolean>()
const [allowGuest, setAllowGuest] = useState<boolean>(false)
const [spinning,setSpinning] = useState<boolean>(false)
const check = useCallback(()=>{
state.isAuthenticated &&setSpinning(true)
fetchData<BasicResponse<{channel:Array<{name:string}>, status:string}>>('account/login',{method:'GET'}).then(response=>{
const {code,data} = response
if(code === STATUS_CODE.SUCCESS && data.status !== 'anonymous'){
dispatch({type:'LOGIN'})
navigate(state.mainPage,{replace:true})
}else{
dispatch({type:'LOGOUT'})
setAllowGuest(data.channel.filter(x=>x.name === 'guest_access').length > 0)
setSpinning(false)
}
})
},[])
const getSystemInfo = useCallback(()=>{
fetchData<BasicResponse<{version:string, buildTime:string}>>('common/version',{method:'GET', eoTransformKeys:['build_time']}).then(response=>{
const {code,data} = response
if(code === STATUS_CODE.SUCCESS){
dispatch({type:'UPDATE_VERSION',version:data.version})
dispatch({type:'UPDATE_DATE',updateDate:data.buildTime})
}
})
},[])
const fetchLogin = async (values:any)=>{
try {
setLoading(true);
const { username, password } = values;
// const encryptedPassword = encryptByEnAES(username, password);
const body = {
name:username,
password: password
// client: 1,
// type: 1,
// app_type: 4,
};
const {code,msg } = await fetchData<BasicResponse<null>>('account/login/username',{method:'POST',eoBody:(body)})
if (code === STATUS_CODE.SUCCESS) {
dispatch({type:'LOGIN'})
// message.success($t(RESPONSE_TIPS.loginSuccess));
const callbackUrl = new URLSearchParams(window.location.search).get('callbackUrl');
if (callbackUrl && callbackUrl !== 'null') {
navigate(callbackUrl);
} else {
navigate(state.mainPage);
}
}else{
dispatch({type:'LOGOUT'})
message.error(msg)
}
} catch (err) {
console.warn(err);
} finally {
setLoading(false)
}
}
const login = async () => {
if (formRef.current) {
const values = await formRef.current.validateFields();
fetchLogin(values);
}
};
const loginAsGuest = ()=>{
fetchLogin({username:'guest',password:'12345678'})
}
useEffect(() => {
check()
getSystemInfo()
}, []);
return (
spinning?
<Spin indicator={<LoadingOutlined style={{ fontSize: 24 }} spin />} spinning={spinning} className='w-full h-full flex items-center justify-center'></Spin> :
<div className="h-full w-full flex flex-col items-center overflow-auto min-h-[490px] bg-[#0d1117]">
<div id="glow-background" className="background-container">
<svg className="background-pattern" aria-hidden="true">
<defs>
<pattern id="pattern-bg" width="200" height="200" patternUnits="userSpaceOnUse">
<path d="M.5 200V.5H200" fill="none"></path>
</pattern>
</defs>
<rect width="100%" height="100%" fill="url(#pattern-bg)"></rect>
</svg>
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svgjs="http://svgjs.dev/svgjs" viewBox="0 0 800 450" opacity="1">
<defs>
<filter id="bbblurry-filter" x="-100%" y="-100%" width="400%" height="400%" filterUnits="objectBoundingBox" primitiveUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feGaussianBlur stdDeviation="99" x="0%" y="0%" width="100%" height="100%" in="SourceGraphic" edgeMode="none" result="blur"></feGaussianBlur>
</filter>
</defs>
<g filter="url(#bbblurry-filter)">
<ellipse rx="80.5" ry="66.5" cx="623.0285107902043" cy="25.708028895006635" fill="hsla(187, 67%, 50%, 1.00)">
<animate attributeName="fill" values="hsla(187, 67%, 50%, 1.00); hsla(340, 85%, 60%, 1.00); hsla(60, 90%, 55%, 1.00); hsla(187, 67%, 50%, 1.00)" dur="6s" repeatCount="indefinite"></animate>
</ellipse>
<ellipse rx="80.5" ry="66.5" cx="446.471435546875" cy="-11.694503784179688" fill="hsla(234, 78%, 61%, 1.00)">
<animate attributeName="fill" values="hsla(234, 78%, 61%, 1.00); hsla(100, 75%, 60%, 1.00); hsla(290, 80%, 70%, 1.00); hsla(234, 78%, 61%, 1.00)" dur="8s" repeatCount="indefinite"></animate>
</ellipse>
<ellipse rx="80.5" ry="66.5" cx="200.54574247724838" cy="-19.02454901710908" fill="hsla(167, 87%, 56%, 1.00)">
<animate attributeName="fill" values="hsla(167, 87%, 56%, 1.00); hsla(10, 90%, 65%, 1.00); hsla(300, 85%, 50%, 1.00); hsla(167, 87%, 56%, 1.00)" dur="10s" repeatCount="indefinite"></animate>
</ellipse>
<ellipse rx="80.5" ry="66.5" cx="340.05827594708103" cy="-9.424536458161867" fill="hsl(25, 100%, 64%)">
<animate attributeName="fill" values="hsl(25, 100%, 64%); hsl(200, 100%, 70%); hsl(50, 95%, 55%); hsl(25, 100%, 64%)" dur="8s" repeatCount="indefinite"></animate>
</ellipse>
</g>
</svg>
</div>
{/* <div className="w-full border-box text-right pr-[40px]"></div> */}
<div className="mx-auto flex-1 flex flex-col items-center justify-center z-[3]" >
<div className="mx-auto">
<span className="flex items-center justify-center">
<img
className="h-[40px] mr-[8px]"
src={Logo}
/>
</span>
</div>
<section className="block w-[410px] mx-auto mt-[46px] p-[30px] box-border rounded-[10px] shadow-[0_5px_20px_0_rgba(0,0,0,5%)] login-block">
<div className="h-full">
<div className="">
<Form onFinish={login} className="w-[350px]"
ref={formRef}>
<Form.Item
className="p-0 bg-transparent rounded border-none"
name="username"
rules={[{ required: true, message: $t('请输入账号') ,whitespace:true }]}
>
<Input
className="w-[350px] h-[40px] login-input"
placeholder={$t("账号")}
autoComplete="on"
autoFocus
/>
</Form.Item>
<Form.Item
className="p-0 bg-transparent rounded border-none "
name="password"
rules={[{ required: true, message: $t('请输入密码') }]}
>
<Input.Password
className="w-[350px] h-[40px] login-input"
placeholder={$t("密码")}
autoComplete="off"
/>
</Form.Item>
<Form.Item
className="p-0 bg-transparent rounded border-none "
>
<Button loading={loading} className="h-[40px] mt-mbase w-full inline-flex justify-center items-center" type="primary" htmlType="submit">
{$t('登录')}
</Button>
</Form.Item>
{
allowGuest && <>
<Divider />
<Form.Item
className="p-0 bg-transparent rounded border-none mb-0"
>
<Button loading={loading} className="h-[40px] w-full inline-flex justify-center items-center" type="default" onClick={loginAsGuest}>
{$t('访客模式')} <Tooltip title={$t('您可通过访客模式查看所有页面和功能,但是无法编辑数据。访客模式仅用于了解产品功能,您可以在正式产品中关闭该功能。')}><Icon icon="ic:baseline-help" height={18} width={18} /></Tooltip>
</Button>
</Form.Item>
</>
}
</Form>
</div>
</div>
</section>
<section className="flex flex-col items-center mt-[46px] text-SECOND_TEXT">
<p className="leading-[28px]">
{$t('Version (0)-(1)',[state?.version,state?.updateDate])}, {$t(state?.powered || '-')}
</p>
<LanguageSetting mode="light"/>
</section>
</div>
</div>
);
}
export default Login;
@@ -1,145 +0,0 @@
import { Editor } from '@tinymce/tinymce-react';
import hljs from 'highlight.js';
import 'highlight.js/styles/default.css';
import {useEffect, useState} from "react";
import {BasicResponse, RESPONSE_TIPS, STATUS_CODE} from "@common/const/const.tsx";
import {useFetch} from "@common/hooks/http.ts";
import {App, Button} from "antd";
import { EntityItem } from '@common/const/type.ts';
import WithPermission from '@common/components/aoplatform/WithPermission.tsx';
import { RouterParams } from '@core/components/aoplatform/RenderRoutes';
import { useParams } from 'react-router-dom';
import { $t } from '@common/locales';
const ServiceInsideDocument = ()=>{
const { message } = App.useApp()
const [updater,setUpdater] = useState<string>()
const [updateTime,setUpdateTime]=useState<string>()
const [initDoc, setInitDoc] = useState<string>()
const [doc, setDoc] = useState<string>()
const {fetchData} = useFetch()
const { serviceId, teamId} = useParams<RouterParams>();
const save = ()=>{
fetchData<BasicResponse<{service:{ id:string,name:string,updater:string,updateTime:string, doc:string} }>>('service/doc',{method:'PUT',eoBody:({doc:doc}) ,eoParams:{service:serviceId,team:teamId},eoTransformKeys:['update_time']}).then(response=>{
const {code,msg} = response
if(code === STATUS_CODE.SUCCESS){
message.success(msg || $t(RESPONSE_TIPS.success))
getServiceDoc()
}else{
message.error(msg || $t(RESPONSE_TIPS.error))
}
})
}
const handleEditorChange = (content:string, editor:unknown) => {
setDoc(content)
};
const setupEditor = (editor:unknown) => {
editor.on('init', () => {
editor.contentDocument.querySelectorAll('pre code').forEach((block:HTMLElement) => {
hljs.highlightBlock(block);
});
});
editor.on('SetContent', () => {
editor.contentDocument.querySelectorAll('pre code').forEach((block:HTMLElement) => {
hljs.highlightBlock(block);
});
});
};
const getServiceDoc = ()=>{
fetchData<BasicResponse<{doc:{ id:string,name:string,updater:EntityItem,updateTime:string,creater:EntityItem, doc:string} }>>('service/doc',{method:'GET',eoParams:{service:serviceId,team:teamId},eoTransformKeys:['update_time']}).then(response=>{
const {code,data,msg} = response
if(code === STATUS_CODE.SUCCESS){
setUpdater(data.doc.updater.id === '' ? '-' : data.doc.updater.name)
setUpdateTime(data.doc.updater.id === '' ? '-' : data.doc.updateTime)
setInitDoc(data.doc.doc)
}else{
message.error(msg || $t(RESPONSE_TIPS.error))
}
})
}
useEffect(() => {
getServiceDoc()
}, []);
return (
<div className="flex flex-col h-full border-[1px] rounded-[10px] border-BORDER border-solid mr-PAGE_INSIDE_X">
<Editor
tinymceScriptSrc={'/tinymce/tinymce.min.js'}
initialValue={initDoc}
init={{
height: '100%',
menubar: false,
plugins: [
'advlist', 'autolink', 'link', 'image', 'lists', 'charmap', 'preview', 'anchor', 'pagebreak',
'searchreplace', 'wordcount', 'visualblocks', 'visualchars', 'codesample', 'fullscreen', 'insertdatetime',
'media', 'table', 'emoticons', 'help'
], toolbar: 'undo redo | styles | bold italic | alignleft aligncenter alignright alignjustify | codesample |table|' +
'bullist numlist outdent indent | link image | print preview media fullscreen | ' +
'forecolor backcolor emoticons | help',
content_style: 'body { font-family:Helvetica,Arial,sans-serif; font-size:14px; } img { max-width: 100%; }',
setup: setupEditor,
codesample_languages:[
{
text: 'HTML/XML',
value: 'markup'
},
{
text: 'JavaScript',
value: 'javascript'
},
{
text: 'CSS',
value: 'css'
},
{
text: 'PHP',
value: 'php'
},
{
text: 'Ruby',
value: 'ruby'
},
{
text:'GO',
value:'go'
},
{
text: 'Python',
value: 'python'
},
{
text: 'Java',
value: 'java'
},
{
text: 'C',
value: 'c'
},
{
text: 'C#',
value: 'csharp'
},
{
text: 'C++',
value: 'cpp'
},
{ text: 'Bash/Shell', value: 'bash' },
{ text: 'SQL', value: 'sql' }
]
}}
onEditorChange={handleEditorChange}
/>
<div className=" pl-[8px] py-btnbase ">
<div className="flex justify-between items-center">
<p className="text-[14px] leading-[20px] text-[#999999]"><span className="mr-[20px]">{$t('最近一次更新者')}{updater || '-'}</span><span>{$t('最近一次更新时间')}{updateTime || '-'}</span></p>
<WithPermission access="team.service.service_intro.edit"><Button type="primary" className="mr-btnbase" onClick={save}>{$t('保存')}</Button></WithPermission>
</div>
</div>
</div>)
}
export default ServiceInsideDocument
@@ -1,58 +0,0 @@
import {forwardRef, useEffect, useState} from "react";
import { Empty, Spin, message} from "antd";
import {BasicResponse, RESPONSE_TIPS, STATUS_CODE} from "@common/const/const.tsx";
import {useFetch} from "@common/hooks/http.ts";
import { LoadingOutlined } from "@ant-design/icons";
import EmptySVG from '@common/assets/empty.svg'
import { $t } from "@common/locales/index.ts";
import ApiDocument from '@common/components/aoplatform/ApiDocument.tsx'
import { useParams } from "react-router-dom";
import { RouterParams } from "@core/components/aoplatform/RenderRoutes.tsx";
import { AiServiceInsideApiDocumentHandle, AiServiceInsideApiDocumentProps, AiServiceApiDetail } from "@core/const/ai-service/type.ts";
const AiServiceInsideApiDocument = forwardRef<AiServiceInsideApiDocumentHandle,AiServiceInsideApiDocumentProps>(() => {
const {serviceId, teamId} = useParams<RouterParams>()
const {fetchData} = useFetch()
const [apiDetail, setApiDetail] = useState<AiServiceApiDetail>()
const [loading, setLoading] = useState<boolean>(false)
useEffect(() => {
getApiDetail()
}, []);
const getApiDetail = ()=>{
setLoading(true)
fetchData<BasicResponse<{doc:AiServiceApiDetail}>>('service/api_doc',{method:'GET',eoParams:{service:serviceId,team:teamId },eoTransformKeys:['update_time']}).then(response=>{
const {code,data,msg} = response
if(code === STATUS_CODE.SUCCESS){
setApiDetail(data.doc?.content)
}else{
message.error(msg || $t(RESPONSE_TIPS.error))
}
}).finally(()=>{setLoading(false)})
}
const ApiPreview = ({spec}:{spec?:string | object})=>{
return (
<div className="h-full overflow-hidden">
<div className="flex-1 h-full overflow-auto pr-PAGE_INSIDE_X">
<ApiDocument spec={spec}/>
</div>
</div>
)
}
return (<>
<Spin indicator={<LoadingOutlined style={{ fontSize: 24 }} spin />} spinning={loading} wrapperClassName=' h-full overflow-hidden '>
<div className=" h-full ai-service-api-preview">
{ apiDetail ? <ApiPreview spec={apiDetail} />
: <Empty image={EmptySVG} >
</Empty>}
</div>
</Spin>
</>)
})
export default AiServiceInsideApiDocument
@@ -1,316 +0,0 @@
import { App, Card, Select } from 'antd'
import { $t } from '@common/locales/index.ts'
import { Icon } from '@iconify/react/dist/iconify.js'
import { useEffect, useState } from 'react'
import ReactJson from 'react-json-view'
import { IconButton } from '@common/components/postcat/api/IconButton'
import { BasicResponse, RESPONSE_TIPS, STATUS_CODE } from '@common/const/const'
import { useFetch } from '@common/hooks/http'
import { useConnection } from './hook/useConnection'
type ConfigList = {
openApi?: {
title: string
configContent: string
apiKeys: string[]
}
mcp: {
title: string
configContent: string
apiKeys: string[]
}
}
type ApiKeyItem = {
expired: number
id: string
name: string
value: string
}
const IntegrationAIContainer = ({ type, handleApiKeyChange }: { type: 'global' | 'service'; handleApiKeyChange: (value: string) => void }) => {
const [activeTab, setActiveTab] = useState('mcp')
const { message } = App.useApp()
const [configContent, setConfigContent] = useState<string>('')
const [apiKey, setApiKey] = useState<string>('')
const [apiKeyList, setApiKeyList] = useState<{ value: string; label: string }[]>([])
const [mcpServerUrl, setMcpServerUrl] = useState<string>('')
const [tabContent, setTabContent] = useState<ConfigList>({
mcp: {
title: $t('MCP 配置'),
configContent: '',
apiKeys: []
}
})
const { fetchData } = useFetch()
const initTabsData = () => {
const params: ConfigList = {
mcp: {
title: $t('MCP 配置'),
configContent: '',
apiKeys: []
}
}
if (type === 'global') {
params.openApi = {
title: $t('Open API 文档'),
configContent: '',
apiKeys: []
}
}
setTabContent(params)
}
/**
* 复制
* @param value
* @returns
*/
const handleCopy = async (value: string): Promise<void> => {
if (value) {
await navigator.clipboard.writeText(value)
message.success($t(RESPONSE_TIPS.copySuccess))
}
}
const handleChange = (value: string) => {
setApiKey(value)
handleApiKeyChange(value)
}
/**
* 获取全局 MCP 配置
* @returns
*/
const getGlobalMcpConfig = () => {
fetchData<BasicResponse<null>>('global/mcp/config', {
method: 'GET'
})
.then((response) => {
const { code, msg, data } = response
if (code === STATUS_CODE.SUCCESS) {
setTabContent((prevTabContent) => ({
...prevTabContent,
mcp: {
...prevTabContent.mcp,
configContent: data.config || ''
}
}))
} else {
message.error(msg || $t(RESPONSE_TIPS.error))
}
})
.catch((errorInfo) => {
message.error(errorInfo || $t(RESPONSE_TIPS.error))
})
}
/**
* 获取 API Key 列表
*/
const getKeysList = () => {
fetchData<BasicResponse<null>>(type === 'global' ? 'simple/system/apikeys' : '', {
method: 'GET'
})
.then((response) => {
const { code, msg, data } = response
if (code === STATUS_CODE.SUCCESS) {
if (data.apikeys && data.apikeys.length > 0) {
setApiKeyList(
data.apikeys.map((item: ApiKeyItem) => {
return {
label: item.name,
value: item.value
}
})
)
setApiKey(data.apikeys[0].value)
}
} else {
message.error(msg || $t(RESPONSE_TIPS.error))
}
})
.catch((errorInfo) => {
message.error(errorInfo || $t(RESPONSE_TIPS.error))
})
}
const {
connectionStatus,
serverCapabilities,
mcpClient,
requestHistory,
makeRequest: makeConnectionRequest,
sendNotification,
handleCompletion,
completionsSupported,
connect: connectMcpServer,
disconnect: disconnectMcpServer,
} = useConnection({
transportType: 'sse',
sseUrl: mcpServerUrl,
proxyServerUrl: 'mcp/global/sse',
requestTimeout: 1000,
});
console.log('connectionStatus==================', connectionStatus);
// console.log('serverCapabilities==================', serverCapabilities);
// console.log('mcpClient==================', mcpClient);
// console.log('requestHistory==================', requestHistory);
// console.log('makeConnectionRequest==================', makeConnectionRequest);
// console.log('sendNotification==================', sendNotification);
// console.log('handleCompletion==================', handleCompletion);
// console.log('completionsSupported==================', completionsSupported);
// console.log('connectMcpServer==================', connectMcpServer);
// console.log('disconnectMcpServer==================', disconnectMcpServer);
// const useConnectAIagent = () => {
// connectMcpServer()
// }
useEffect(() => {
type === 'global' && getGlobalMcpConfig()
initTabsData()
getKeysList()
}, [])
useEffect(() => {
if (activeTab === 'openApi') {
setConfigContent(tabContent.openApi?.configContent || '')
} else if (activeTab === 'mcp') {
setConfigContent(tabContent.mcp.configContent || '')
}
}, [tabContent, activeTab])
useEffect(() => {
if (configContent && apiKey) {
const parsedConfig = JSON.parse(configContent)
console.log('啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊parsedConfig', parsedConfig, apiKey)
let baseUrl = ''
if (parsedConfig?.mcpServers) {
// 获取 mcpServers 对象中的第一个键
const serverKey = Object.keys(parsedConfig.mcpServers)[0]
baseUrl = parsedConfig.mcpServers[serverKey]?.url
}
baseUrl = baseUrl.replace('{your_api_key}', apiKey)
if (mcpServerUrl === baseUrl) {
return
}
setMcpServerUrl(baseUrl)
console.log('啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊', mcpServerUrl)
if (connectionStatus === 'connected') {
disconnectMcpServer()
}
connectMcpServer()
}
}, [apiKey, configContent, connectMcpServer])
return (
<>
<Card
style={{ borderRadius: '10px' }}
className="w-[400px]"
classNames={{
body: 'p-[10px]'
}}
>
<p>
<Icon
icon="icon-park-solid:connection-point-two"
className="align-text-bottom mr-[5px]"
width="16"
height="16"
/>
{$t('AI 代理集成')}
</p>
<div className="tab-container mt-3">
{type === 'service' && (
<div className="tab-nav flex rounded-md overflow-hidden border border-solid border-[#3D46F2] w-fit">
<div
className={`tab-item px-5 py-1.5 cursor-pointer text-sm transition-colors ${activeTab === 'openApi' ? 'bg-[#3D46F2] text-white' : 'bg-white text-[#3D46F2]'}`}
onClick={() => setActiveTab('openApi')}
>
Open API
</div>
<div
className={`tab-item px-5 py-1.5 cursor-pointer text-sm transition-colors ${activeTab === 'mcp' ? 'bg-[#3D46F2] text-white' : 'bg-white text-[#3D46F2]'}`}
onClick={() => setActiveTab('mcp')}
>
MCP
</div>
</div>
)}
<div className="tab-content font-semibold mt-[10px]">
{activeTab === 'openApi' ? tabContent.openApi?.title : tabContent.mcp.title}
</div>
{/* 标签页内容区域 */}
<div className="bg-[#0a0b21] text-white p-4 rounded-md my-2 font-mono text-sm overflow-auto relative">
<ReactJson
src={configContent ? JSON.parse(configContent) : {}}
theme="monokai"
indentWidth={2}
displayDataTypes={false}
displayObjectSize={false}
name={false}
collapsed={false}
enableClipboard={false}
style={{
backgroundColor: 'transparent',
wordBreak: 'break-word',
whiteSpace: 'normal'
}}
/>
<IconButton
name="copy"
onClick={() => handleCopy(configContent)}
sx={{
position: 'absolute',
top: '5px',
right: '5px',
color: '#999',
transition: 'none',
'&.MuiButtonBase-root:hover': {
background: 'transparent',
color: '#3D46F2',
transition: 'none'
}
}}
></IconButton>
</div>
</div>
{activeTab === 'mcp' && (
<>
<div className="tab-content font-semibold my-[10px]">API Key</div>
<Select value={apiKey} className="w-full" onChange={handleChange} options={apiKeyList} />
<Card
style={{ borderRadius: '5px' }}
className="w-full mt-[5px] "
classNames={{
body: 'p-[5px]'
}}
>
<div className="relative h-[25px]">
{apiKey}
<IconButton
name="copy"
onClick={() => handleCopy(configContent)}
sx={{
position: 'absolute',
top: '0px',
right: '5px',
color: '#999',
transition: 'none',
'&.MuiButtonBase-root:hover': {
background: 'transparent',
color: '#3D46F2',
transition: 'none'
}
}}
></IconButton>
</div>
</Card>
</>
)}
</Card>
</>
)
}
export default IntegrationAIContainer
@@ -1,29 +0,0 @@
import InsidePage from "@common/components/aoplatform/InsidePage"
import { $t } from '@common/locales/index.ts'
import { Card } from "antd"
import IntegrationAIContainer from "./IntegrationAIContainer"
const McpServiceContainer = () => {
const handleApiKeyChange = (value: string) => {
console.log(value)
}
return (
<>
<InsidePage
pageTitle={$t('MCP 服务')}
description={$t('MCP Service 充当 AI 模型与 API 之间的桥梁,允许智能助手(如 Claude)动态发现和调用 Gateway 上的 API,无需繁琐的手动配置或自定义集成。')}
showBorder={false}
scrollPage={false}
>
<div className="flex mt-[10px] pr-[40px]">
<Card style={{ borderRadius: '10px' }} className="flex-1 w-[400px] mr-[10px]">
444
</Card>
<IntegrationAIContainer type={'global'} handleApiKeyChange={handleApiKeyChange}></IntegrationAIContainer>
</div>
</InsidePage>
</>
)
}
export default McpServiceContainer
@@ -1,15 +0,0 @@
import { useEffect } from "react";
import { Outlet, useLocation, useNavigate } from "react-router-dom";
export default function ServicePolicyLayout(){
const location = useLocation()
const pathName = location.pathname
const navigator = useNavigate()
useEffect(()=>{
const tmpPath = pathName.split('/')
if(tmpPath[tmpPath.length -1 ] === 'servicepolicy'){
navigator('datamasking/list')
}
},[pathName])
return (<Outlet></Outlet>)
}
@@ -1,251 +0,0 @@
import { useEffect, useMemo, useState} from "react";
import {App, Button, Checkbox, Collapse, Form, GetProp, Input} from "antd";
import {useFetch} from "@common/hooks/http.ts";
import {BasicResponse, PLACEHOLDER, RESPONSE_TIPS, STATUS_CODE, VALIDATE_MESSAGE} from "@common/const/const.tsx";
import WithPermission from "@common/components/aoplatform/WithPermission.tsx";
import { useNavigate, useParams } from "react-router-dom";
import { RouterParams } from "@core/components/aoplatform/RenderRoutes.tsx";
import { ArrowLeftOutlined } from "@ant-design/icons";
import { $t } from "@common/locales";
import { useGlobalContext } from "@common/contexts/GlobalStateContext";
type PermissionItem = {
name:string
value:string
}
type PermissionClassify = PermissionItem & {children : ( PermissionItem & {dependents:string[]})[]}
type RolePermissionItem = PermissionItem & {
children:PermissionClassify[]}
type DependenciesMapType = Map<string, {dependents:string[], control:string[]}>
type PermissionCollapseProps = {
id?: string;
value?: string[];
onChange?: (value:string[]) => void;
permissionTemplate:RolePermissionItem[]
dependenciesMap?: DependenciesMapType
}
type PermissionInfo = {
permit: string[]
description: string
update_time: string
create_time: string
name: string
}
const PermissionContent = ({permits,onChange,value=[],id,dependenciesMap}:{permits:PermissionClassify[],dependenciesMap:DependenciesMapType,value:string[],id:string, onChange?: (value:string[]) => void;})=>{
const onSingleCheckboxChange: GetProp<typeof Checkbox, 'onChange'> = (e) => {
if(e.target.checked){
onChange?.(Array.from(new Set([...value, e.target.id, ...(dependenciesMap?.get(e.target.id!)?.dependents || [])] as string[])))
}else{
const cancelValue = [...dependenciesMap?.get(e.target.id!)?.control || [], e.target.id]
onChange?.(value.filter(x=>!cancelValue.includes(x)))
}
};
return (
<div id={id} className="flex flex-col gap-btnbase p-btnbase">
{
permits.map((item:PermissionClassify)=>(
<>
<div className="flex flex-col gap-btnbase" key={`group-${item.name}`}>
{item.name !== '' && <p className="">{(item.name)}</p>}
<div className=" pl-[20px]">
{item.children.map(x=><Checkbox id={x.value} key={x.value} checked={value && value.length > 0 && value.indexOf(x.value)>-1} onChange={onSingleCheckboxChange}>{(x.name)}</Checkbox>)}
</div>
</div>
</>
))
}</div>
)
}
// 自定义表单控件
const PermissionCollapse:React.FC<PermissionCollapseProps> = (props)=>{
const { id, value = [], onChange,permissionTemplate ,dependenciesMap} = props;
const [openCollapses, setOpenCollapses] = useState<string[]>([])
const {state} = useGlobalContext()
const items = useMemo(()=>{
const generatePermissionItem = (permissionItem:RolePermissionItem[])=> permissionItem.map((item:RolePermissionItem)=>({
key:item.name,
label:(item.name),
children:<PermissionContent value={value} permits={item.children} onChange={(e)=>onChange?.(e)} id={id!} dependenciesMap={dependenciesMap!}/>
}))
return permissionTemplate && permissionTemplate.length > 0 ? generatePermissionItem(permissionTemplate) : []
},[permissionTemplate,value,state.language])
useEffect(()=>{
permissionTemplate && setOpenCollapses(permissionTemplate?.map(x=>x.name))
},[permissionTemplate])
const onCollapseChange = (keys: string | string[]) => {
setOpenCollapses(keys as string[])
};
return <Collapse items={items} activeKey={openCollapses} onChange={onCollapseChange} />
}
const RoleConfig = ()=>{
const { message } = App.useApp()
const [form] = Form.useForm();
const {fetchData} = useFetch()
const navigateTo = useNavigate()
const { roleType, roleId} = useParams<RouterParams>()
const [permissionTemplate, setPermissionTemplate] = useState<RolePermissionItem[]>()
const [dependenciesMap, setDependenciesMap] = useState<DependenciesMapType>()
const APP_MODE = import.meta.env.VITE_APP_MODE;
const [permissionInfo, setPermissionInfo] = useState<PermissionInfo>()
const { state } = useGlobalContext()
const generateDependenciesMap = (data:RolePermissionItem[])=>{
const map = new Map<string, {dependents:string[], control:string[]}>()
data.forEach((item:RolePermissionItem)=>{
item.children.forEach((child:PermissionClassify)=>{
child.children.forEach((permission:PermissionItem & {dependents:string[]})=>{
if (permission.dependents && permission.dependents.length > 0) {
// 获取当前权限的依赖
const currentDependents = map.get(permission.value);
if (currentDependents) {
currentDependents.dependents.push(...permission.dependents);
} else {
map.set(permission.value, { dependents: [...permission.dependents], control: [] });
}
// 更新依赖项的控制项
permission.dependents.forEach((dependent: string) => {
const dependentEntry = map.get(dependent);
if (dependentEntry) {
dependentEntry.control.push(permission.value);
} else {
map.set(dependent, { dependents: [], control: [permission.value] });
}
});
}
})
})
})
setDependenciesMap(map)
}
const generateNewPermit:(data:RolePermissionItem[])=>RolePermissionItem[] = (data:RolePermissionItem[]) =>{
return data.map((item:RolePermissionItem)=>({
...item,children:item.children.map((child:PermissionClassify)=>({
...child,
children:child.children.map((permission:PermissionItem & {dependents:string[]})=>({
...permission, value:`${roleType}.${item.value}.${child.value}.${permission.value}`
}))
}))
}))
}
const getPermissionTemplate = ()=>{
return fetchData<BasicResponse<{permits:RolePermissionItem[]}>>(`${roleType}/role/template`,{method:'GET'}).then(response=>{
const {code,data,msg} = response
if(code === STATUS_CODE.SUCCESS){
const newPermits = generateNewPermit(data.permits)
generateDependenciesMap(newPermits)
setPermissionTemplate(newPermits)
}else{
message.error(msg || $t(RESPONSE_TIPS.dataError))
}
})
}
const getPermissionInfo = ()=>{
fetchData<BasicResponse<{role:PermissionInfo}>>(`${roleType}/role`,{method:'GET',eoParams:{role:roleId}}).then(response=>{
const {code,data,msg} = response
if(code === STATUS_CODE.SUCCESS){
setPermissionInfo(data.role)
}else{
message.error(msg || $t(RESPONSE_TIPS.error))
}
}).catch((errInfo)=>console.error(errInfo))
}
useEffect(()=>{
form.setFieldsValue({name:$t(permissionInfo?.name || ''),permits:permissionInfo?.permit})
},[permissionInfo, state.language])
useEffect(() => {
form.setFieldsValue({name:'',permits:[]})
if(roleId){
getPermissionInfo()
}
}, []);
useEffect(()=>{
getPermissionTemplate()
},[state.language])
const onFinish =async() => {
const body = await form.validateFields()
return fetchData<BasicResponse<null>>(`${roleType}/role`,{method:roleId === undefined? 'POST' : 'PUT',eoBody:({...body}),...(roleId !== undefined?{eoParams:{role:roleId}}:{})}).then(response=>{
const {code,msg} = response
if(code === STATUS_CODE.SUCCESS){
message.success(msg || $t(RESPONSE_TIPS.success))
return Promise.resolve(true)
}else{
message.error(msg || $t(RESPONSE_TIPS.error))
return Promise.reject(msg || $t(RESPONSE_TIPS.error))
}
}).catch((errInfo)=>Promise.reject(errInfo))
};
return (<div className="h-full flex flex-col overflow-hidden ">
<div className="text-[18px] leading-[25px] pb-[12px]">
<Button className="flex items-center" type="text" onClick={()=>navigateTo(-1)}><ArrowLeftOutlined className="max-h-[14px]" /><span>{$t('返回')}</span></Button>
</div>
<WithPermission access={roleId !== undefined ? `system.organization.role.${roleType}.edit`: `system.organization.role.${roleType}.add`}>
<Form
id="permission"
layout='vertical'
labelAlign='left'
scrollToFirstError
form={form}
className="mx-auto w-full flex-1 no-bg-form overflow-hidden "
name="rolePermissionConfig"
onFinish={onFinish}
autoComplete="off"
>
<div className="flex flex-col h-full">
<Form.Item
className=" m-btnbase mr-PAGE_INSIDE_X"
name="name"
rules={[{ required: true,whitespace:true }]}
>
<Input className="w-INPUT_NORMAL" placeholder={$t(PLACEHOLDER.input)}/>
</Form.Item>
<Form.Item
name="permits"
className="m-btnbase mr-0 flex-1 overflow-auto pr-PAGE_INSIDE_X"
>
<PermissionCollapse permissionTemplate={permissionTemplate!} dependenciesMap={dependenciesMap} />
</Form.Item>
{APP_MODE === 'pro' && <div className="p-btnbase">
<WithPermission access={roleId === undefined ?`system.organization.role.${roleType}.edit`:`system.organization.role.${roleType}.add`}>
<Button type="primary" htmlType="submit">
{$t('保存')}
</Button>
</WithPermission>
<Button className="ml-btnrbase" type="default" onClick={() => navigateTo(-1)}>
{$t('取消')}
</Button>
</div>}
</div>
</Form>
</WithPermission>
</div>)
}
export default RoleConfig
@@ -1,215 +0,0 @@
import { forwardRef, useEffect, useImperativeHandle, useMemo, useState} from "react";
import {App, Button, Form, Input, Row, Select} from "antd";
import {Link, useLocation, useNavigate, useParams} from "react-router-dom";
import {RouterParams} from "@core/components/aoplatform/RenderRoutes.tsx";
import { v4 as uuidv4 } from 'uuid'
import {BasicResponse, PLACEHOLDER, RESPONSE_TIPS, STATUS_CODE} from "@common/const/const.tsx";
import {MemberItem} from "@common/const/type.ts";
import {useFetch} from "@common/hooks/http.ts";
import {DefaultOptionType} from "antd/es/cascader";
import { TeamConfigFieldType } from "../../const/team/type.ts";
import WithPermission from "@common/components/aoplatform/WithPermission.tsx";
import { useBreadcrumb } from "@common/contexts/BreadcrumbContext.tsx";
import { useTeamContext } from "../../contexts/TeamContext.tsx";
import { useGlobalContext } from "@common/contexts/GlobalStateContext.tsx";
import { $t } from "@common/locales/index.ts";
export type TeamConfigHandle = {
save:()=>Promise<string|boolean>|undefined
}
type TeamConfigProps = {
entity?:TeamConfigFieldType
}
const TeamConfig= forwardRef<TeamConfigHandle,TeamConfigProps>((props,ref) => {
const {entity} = props
const { message } = App.useApp()
const { teamId } = useParams<RouterParams>();
const [onEdit, setOnEdit] = useState<boolean>(!!teamId)
const [form] = Form.useForm();
const location = useLocation()
const currentUrl = location.pathname
const {fetchData} = useFetch()
const [managerOption, setManagerOption] = useState<DefaultOptionType[]>([])
const { setBreadcrumb} = useBreadcrumb()
const { setTeamInfo } =useTeamContext()
const {checkPermission,accessInit,state} = useGlobalContext()
const pageType= useMemo(()=>{
if(!accessInit) return 'myteam'
return checkPermission('system.workspace.team.view_all') ? 'manage' : 'myteam'
},[checkPermission,accessInit])
const [canDelete, setCanDelete] = useState<boolean>(false)
const navigateTo = useNavigate()
useImperativeHandle(ref, () => ({
save:onFinish
}));
const onFinish = () => {
return form.validateFields().then((value)=>{
let params:{[k:string]:string} = {}
if(pageType === 'manage'){
params = {id:teamId!}
}else{
params = {team:teamId!}
}
return fetchData<BasicResponse<{team:TeamConfigFieldType}>>(pageType === 'manage'?'manager/team' : 'team',{method:onEdit ? 'PUT' : 'POST', eoParams:params,eoBody:(value),eoTransformKeys:['teamId']}).then(response=>{
const {code,data,msg} = response
if(code === STATUS_CODE.SUCCESS){
message.success(msg || $t(RESPONSE_TIPS.success))
setTeamInfo?.(data.team)
return Promise.resolve(true)
}else{
message.error(msg || $t(RESPONSE_TIPS.error))
return Promise.reject(msg || $t(RESPONSE_TIPS.error))
}
}).catch((errorInfo)=>{
return Promise.reject(errorInfo)
})
})
};
// 获取表单默认值
const getTeamInfo = () => {
fetchData<BasicResponse<{ team: TeamConfigFieldType }>>(pageType === 'manage'?'manager/team' : 'team',{method:'GET',eoParams:(pageType === 'manage'? {id:teamId}:{team:teamId}),eoTransformKeys:['can_delete']}).then(response=>{
const {code,data,msg} = response
if(code === STATUS_CODE.SUCCESS){
setCanDelete(data.team.canDelete)
setTimeout(()=>{form.setFieldsValue({...data.team})},0)
}else{
message.error(msg || $t(RESPONSE_TIPS.error))
}
})
};
const getManagerList = ()=>{
setManagerOption([])
fetchData<BasicResponse<{ members: MemberItem[] }>>('simple/member',{method:'GET'}).then(response=>{
const {code,data,msg} = response
if(code === STATUS_CODE.SUCCESS){
setManagerOption(data.members?.map((x:MemberItem)=>{return {
label:x.name, value:x.id
}}) || [])
}else{
message.error(msg || $t(RESPONSE_TIPS.error))
}
})
}
const deleteTeam = ()=>{
return new Promise((resolve, reject)=>{
fetchData<BasicResponse<null>>(`manager/team`,{method:'DELETE',eoParams:{id:form.getFieldValue('id')}}).then(response=>{
const {code,msg} = response
if(code === STATUS_CODE.SUCCESS){
message.success(msg || $t(RESPONSE_TIPS.success))
navigateTo('/team/list')
resolve(true)
}else{
message.error(msg || $t(RESPONSE_TIPS.error))
reject(msg || $t(RESPONSE_TIPS.error))
}
}).catch((errorInfo)=> reject(errorInfo))
})
}
useEffect(() => {
getManagerList()
if(entity){
setOnEdit(true);
form.setFieldsValue(entity)
}else if (teamId !== undefined) {
setBreadcrumb([
{title:<Link to="/team/list">{$t('团队')}</Link>},
{title:$t('设置')}
])
setOnEdit(true);
getTeamInfo();
} else {
setOnEdit(false);
form.setFieldsValue(
{id:uuidv4(),
master:state?.userData?.uid
}); // 清空 initialValues
}
return (form.setFieldsValue({}))
}, [teamId]);
return (
<>
<div className='overflow-auto h-full w-full pr-PAGE_INSIDE_X'>
<WithPermission access={onEdit ?(currentUrl.split('/')[1] === 'myteam'? 'team.team.team.edit':'system.organization.team.edit') : 'system.organization.team.add'}>
<Form
layout='vertical'
labelAlign='left'
scrollToFirstError
form={form}
className={`mx-auto`}
name="teamConfig"
onFinish={onFinish}
autoComplete="off"
>
<Form.Item<TeamConfigFieldType>
label={$t("团队名称")}
name="name"
rules={[{ required: true,whitespace:true }]}
>
<Input className="w-INPUT_NORMAL" placeholder={$t(PLACEHOLDER.input)}/>
</Form.Item>
<Form.Item<TeamConfigFieldType>
label={$t("团队 ID")}
name="id"
extra={$t("团队 ID(team_id)可用于检索团队,一旦保存无法修改。")}
rules={[{ required: true,whitespace:true }]}
>
<Input className="w-INPUT_NORMAL" disabled={onEdit} placeholder={$t(PLACEHOLDER.input)}/>
</Form.Item>
{!onEdit &&
<Form.Item<TeamConfigFieldType>
label={$t("团队负责人")}
name="master"
extra={$t("负责人对团队内的团队、服务、成员有管理权限")}
rules={[{required: true}]}
>
<Select className="w-INPUT_NORMAL" placeholder={$t(PLACEHOLDER.select)} options={managerOption}>
</Select>
</Form.Item>}
<Form.Item<TeamConfigFieldType>
label={$t("描述")}
name="description"
>
<Input.TextArea className="w-INPUT_NORMAL" placeholder={$t(PLACEHOLDER.input)}/>
</Form.Item>
{ onEdit &&
<Row className="mb-[10px]"
>
<WithPermission access={['system.organization.team.edit','team.team.team.edit']}><Button type="primary" htmlType="submit">
{$t('保存')}
</Button></WithPermission>
</Row>
}
{onEdit &&
<WithPermission access="system.organization.team.delete" showDisabled={false}>
<div className="bg-[rgb(255_120_117_/_5%)] rounded-[10px] mt-[50px] p-btnrbase pb-0">
<p className="text-left"><span className="font-bold">{$t('删除团队')}</span>{$t('删除操作不可恢复,请谨慎操作!')}</p>
<div className="text-left">
<WithPermission access="system.organization.team.delete" disabled={!canDelete} tooltip={canDelete ? '':$t('服务数据清除后,方可删除')}>
<Button className="m-auto mt-[16px] mb-[20px]" type="default" danger onClick={()=>deleteTeam()}>{$t('删除')}</Button>
</WithPermission>
</div>
</div>
</WithPermission>
}
</Form>
</WithPermission>
</div>
</>
)
})
export default TeamConfig
@@ -1,347 +0,0 @@
import PageList, { PageProColumns } from "@common/components/aoplatform/PageList.tsx"
import {ActionType} from "@ant-design/pro-components";
import {FC, useEffect, useMemo, useRef, useState} from "react";
import {Link, useParams} from "react-router-dom";
import {useBreadcrumb} from "@common/contexts/BreadcrumbContext.tsx";
import {App, Button, Modal, Select} from "antd";
import {BasicResponse, COLUMNS_TITLE, RESPONSE_TIPS, STATUS_CODE} from "@common/const/const.tsx";
import {useFetch} from "@common/hooks/http.ts";
import {RouterParams} from "@core/components/aoplatform/RenderRoutes.tsx";
import {EntityItem, MemberItem} from "@common/const/type.ts";
import { TeamMemberTableListItem } from "../../const/team/type.ts";
import { TEAM_MEMBER_TABLE_COLUMNS } from "../../const/team/const.tsx";
import TableBtnWithPermission from "@common/components/aoplatform/TableBtnWithPermission.tsx";
import { checkAccess } from "@common/utils/permission.ts";
import { useGlobalContext } from "@common/contexts/GlobalStateContext.tsx";
import MemberTransfer, { TransferTableHandle } from "@common/components/aoplatform/MemberTransfer.tsx";
import { DepartmentListItem } from "../../const/member/type.ts";
import {v4 as uuidv4} from 'uuid'
import WithPermission from "@common/components/aoplatform/WithPermission.tsx";
import { $t } from "@common/locales/index.ts";
export const getDepartmentWithMember = (department:(DepartmentListItem & {type?:'department'|'member'})[],departmentMap:Map<string, (MemberItem & {type:'department'|'member'})[]>) : (DepartmentWithMemberItem | undefined)[] =>{
return department?.map((x:DepartmentListItem & {type?:'department'|'member'})=>{
const res = ({
...x,
key:x.id,
title:x.name,
type: x.type || 'department',
children:((x.type === 'member' || (!x.children||x.children.length === 0 )&& (!departmentMap.get(x.id) || departmentMap.get(x.id)!.length === 0))? undefined : [...(x.children && x.children.length > 0 ? getDepartmentWithMember(x.children,departmentMap) : []),...departmentMap.get(x.id) || []])
});
return res})?.filter(node=>node.type === 'member' ||( node.children && node.children.length > 0)) || []
}
export const addMemberToDepartment = (departmentMap: Map<string, (MemberItem & {type:'department'|'member'})[]>, departmentId: string, member: MemberItem) => {
const members = departmentMap.get(departmentId) || [];
members.push({...member, type: 'member'});
departmentMap.set(departmentId, members);
}
const TeamInsideMember:FC = ()=>{
const [searchWord, setSearchWord] = useState<string>('')
const { setBreadcrumb} = useBreadcrumb()
const { modal,message } = App.useApp()
const {fetchData} = useFetch()
const {teamId} = useParams<RouterParams>();
const addRef = useRef<TransferTableHandle<TeamMemberTableListItem>>(null)
const pageListRef = useRef<ActionType>(null);
const [allMemberIds, setAllMemberIds] = useState<string[]>([])
const {accessData,state} = useGlobalContext()
const [selectableMemberIds,setSelectableMemberIds] = useState<Set<string>>(new Set())
const [addMemberBtnLoading, setAddMemberBtnLoading] = useState<boolean>(false)
const [modalVisible, setModalVisible] = useState<boolean>(false)
const [addMemberBtnDisabled, setAddMemberBtnDisabled] = useState<boolean>(true)
const [allMemberSelectedDepartIds, setAllMemberSelectedDepartIds] = useState<string[]>([])
const [roleList, setRoleList] = useState<EntityItem[]>([])
const operation:PageProColumns<TeamMemberTableListItem>[] =[
{
title: COLUMNS_TITLE.operate,
key: 'option',
btnNums:1,
fixed:'right',
valueType: 'option',
render: (_: React.ReactNode, entity: TeamMemberTableListItem) => [
<TableBtnWithPermission disabled={!entity.isDelete} tooltip="暂无权限" access="team.team.member.edit" key="delete" btnType="delete" onClick={()=>{openModal('remove',entity)}} btnTitle="移出团队"/>]
}
]
const getDepartmentMemberList = () => {
const topDepartmentId:string = uuidv4()
return Promise.all([
fetchData<BasicResponse<{department:DepartmentListItem}>>('simple/departments', {method:'GET'}),
fetchData<BasicResponse<{members:MemberItem}>>('simple/member', {method:'GET', eoParams:{}, eoTransformKeys:[]})
]).then(([departmentResponse, memberResponse])=>{
const departmentMap = new Map<string, (MemberItem & {type:'department'|'member'})[]>();
memberResponse.data.members.forEach((member: MemberItem) => {
setSelectableMemberIds((pre)=>{pre.add(member.id);return pre})
member = {...member, title:member.name, key:member.id}
if (member.department) {
member.department.forEach((department: EntityItem) => {
addMemberToDepartment(departmentMap, department.id, member);
});
} else {
addMemberToDepartment(departmentMap, '_withoutDepartment', member);
}
});
const finalData = departmentResponse.data.department
? [
{
id: topDepartmentId,
key:topDepartmentId,
name: departmentResponse.data.department.name,
title:departmentResponse.data.department.name,
children: [
...getDepartmentWithMember(departmentResponse.data.department?.children || [], departmentMap),
...departmentMap.get('_withoutDepartment') || []
]
}
]
: [...departmentMap.get('_withoutDepartment') || []];
let allMemberSelectedFlag:boolean = true
for(const [k,v] of departmentMap){
if(k !== '_withoutDepartment' && allMemberIds.length > 0 ){
// 筛选出部门内没被勾选的用户,如果不存在没勾选用户,需要将部门id放入ids中
if(v.filter(m => allMemberIds.indexOf(m.id) === -1).length === 0){
setAllMemberSelectedDepartIds((pre)=>[...pre, k])
}else if(['unknown','disable'].indexOf(k) === -1){
allMemberSelectedFlag = false
}
}
}
if(departmentMap.get('_withoutDepartment')?.filter(x=>allMemberIds.indexOf(x)!==-1).length === 0 && allMemberSelectedFlag){
setAllMemberSelectedDepartIds((pre)=>[...pre, topDepartmentId])
}
return {data:finalData, success: true}
}).catch(()=>({data:[], success:false}))
}
const getMemberList = ()=>{
return fetchData<BasicResponse<{members:TeamMemberTableListItem}>>('team/members',{method:'GET',eoParams:{keyword:searchWord, team:teamId},eoTransformKeys:['attach_time','is_delete']}).then(response=>{
const {code,data,msg} = response
if(code === STATUS_CODE.SUCCESS){
if(!searchWord){
setAllMemberIds(data.members?.map((x:TeamMemberTableListItem)=>x.user.id) || [])
}
return {data:data.members, success: true}
}else{
message.error(msg || $t(RESPONSE_TIPS.error))
return {data:[], success:false}
}
}).catch(() => {
return {data:[], success:false}
})
}
const addMember = (selectableMemberIds:Set<string>)=>{
setAddMemberBtnLoading(true)
const keyFromModal = addRef.current?.selectedRowKeys()
const memberKeyFromModal = keyFromModal?.filter(x => allMemberIds.indexOf(x as string) === -1 && selectableMemberIds.has(x)) || [];
return new Promise((resolve, reject)=>{
fetchData<BasicResponse<null>>('team/member',{method:'POST' ,eoBody:({users:memberKeyFromModal}),eoParams:{team:teamId}}).then(response=>{
const {code,msg} = response
if(code === STATUS_CODE.SUCCESS){
message.success(msg || $t(RESPONSE_TIPS.success))
manualReloadTable()
cleanModalData()
resolve(true)
}else{
message.error(msg || $t(RESPONSE_TIPS.error))
reject(msg || $t(RESPONSE_TIPS.error))
}
}).catch((errorInfo)=> reject(errorInfo)).finally(()=>setAddMemberBtnLoading(false))
})
}
const removeMember = (entity:TeamMemberTableListItem) =>{
return new Promise((resolve, reject)=>{
fetchData<BasicResponse<null>>(`team/member`,{method:'DELETE',eoParams:{team:teamId,user:entity.user.id}}).then(response=>{
const {code,msg} = response
if(code === STATUS_CODE.SUCCESS){
message.success(msg || $t(RESPONSE_TIPS.success))
resolve(true)
}else{
message.error(msg || $t(RESPONSE_TIPS.error))
reject(msg || $t(RESPONSE_TIPS.error))
}
}).catch((errorInfo)=> reject(errorInfo))
})
}
const cleanModalData = ()=>{
setModalVisible(false);setAddMemberBtnDisabled(true);setAddMemberBtnLoading(false)
}
const openModal = async (type:'add'|'remove',entity?:TeamMemberTableListItem)=>{
let title:string = ''
let content:string|React.ReactNode = ''
switch(type){
case 'add':
setModalVisible(true)
setAddMemberBtnDisabled(true)
setAddMemberBtnLoading(false)
return
case 'remove':
title=$t('移除成员')
content=<span>{$t('确定删除成员?此操作无法恢复,确认操作?')}</span>
break
}
modal.confirm({
title,
content,
onOk:()=>{
return removeMember(entity!).then((res)=>{if(res === true) manualReloadTable()})
},
width:600,
okText:$t('确认'),
okButtonProps:{
disabled: !checkAccess(`team.team.member.edit`,accessData)
},
cancelText:$t('取消'),
closable:true,
icon:<></>
})
}
const manualReloadTable = () => {
pageListRef.current?.reload()
};
const changeMemberInfo = (value:string[],entity:TeamMemberTableListItem )=>{
return new Promise((resolve, reject) => {
fetchData<BasicResponse<null>>(`team/member/role`, {method: 'PUT',eoBody:({roles:value, users:[entity.user.id]}), eoParams: {team:teamId}}).then(response => {
const {code, msg} = response
if (code === STATUS_CODE.SUCCESS) {
message.success(msg || $t(RESPONSE_TIPS.success))
resolve(true)
} else {
message.error(msg || $t(RESPONSE_TIPS.error))
reject(msg || $t(RESPONSE_TIPS.error))
}
}).catch((errorInfo)=> reject(errorInfo))
})
}
const getRoleList = ()=>{
fetchData<BasicResponse<{roles:EntityItem[]}>>('simple/roles', {method: 'GET', eoParams: {group:'team'}}).then(response => {
const {code, data,msg} = response
if (code === STATUS_CODE.SUCCESS) {
setRoleList(data.roles)
return
} else {
message.error(msg || $t(RESPONSE_TIPS.error))
}
})
}
const translatedCol = useMemo(()=>{
const res = TEAM_MEMBER_TABLE_COLUMNS?.map(x=>{
if(x.dataIndex === 'roles'){
return {
...x,
title: typeof x.title === 'string' ? $t(x.title as string) : x.title,
render: (_,entity)=>(
<WithPermission access="team.team.member.edit">
<Select
className="w-full"
mode="multiple"
maxTagCount="responsive"
value={entity.roles?.map((x:EntityItem)=>x.id)}
options={roleList?.map((x:{id:string,name:string})=>({label:(x.name), value:x.id}))}
onChange={(value)=>{
changeMemberInfo(value,entity ).then((res)=>{
if(res) manualReloadTable()
})
}}
/>
</WithPermission>
),
filters:roleList?.map((x:{id:string,name:string})=>({text:x.name, value:x.id})),
onFilter:(value: unknown, record:TeamMemberTableListItem) =>{
return record.roles ? record.roles?.map((x)=>x.id).indexOf(value as string) !== -1 : false;}
}
}
return({...x, title: typeof x.title === 'string' ? $t(x.title as string) : x.title}) })
return res
},[ state.language,roleList])
useEffect(() => {
setBreadcrumb([
{title:<Link to="/team/list">{$t('团队')}</Link>},
{title:$t('成员')}
])
manualReloadTable()
}, [teamId]);
useEffect(()=>{
getRoleList()
},[state.language])
const treeDisabledData = useMemo(()=>{ return [...allMemberIds,...allMemberSelectedDepartIds]},[allMemberIds,allMemberSelectedDepartIds])
return (
<>
<PageList
id="global_team_member"
ref={pageListRef}
columns = {[...translatedCol,...operation]}
request={()=>getMemberList()}
primaryKey="user.id"
addNewBtnTitle={$t('添加成员')}
className="ml-[20px] mt-[20px] "
searchPlaceholder={$t("输入姓名查找")}
onAddNewBtnClick={()=>{openModal('add')}}
addNewBtnAccess="team.team.member.add"
tableClickAccess="team.team.member.edit"
onSearchWordChange={(e)=>{setSearchWord(e.target.value)}}
/>
<Modal
title={$t("添加成员")}
open={modalVisible}
destroyOnClose={true}
width={600}
onCancel={() => cleanModalData()}
maskClosable={false}
footer={[
<Button key="back" onClick={() => cleanModalData()}>
{$t('取消')}
</Button>,
<WithPermission access="team.team.member.add"><Button
key="submit"
type="primary"
disabled={addMemberBtnDisabled}
loading={addMemberBtnLoading}
onClick={()=>addMember(selectableMemberIds as Set<string>)}
>
{$t('确认')}
</Button></WithPermission>,
]}
>
<MemberTransfer
ref={addRef}
primaryKey="id"
disabledData={treeDisabledData}
request={()=>getDepartmentMemberList()}
onSelect={(selectedData: Set<string>) => {
const memberKeyFromModal = Array.from(selectedData)?.filter(x => allMemberIds.indexOf(x) === -1 &&selectableMemberIds.has(x)) || [];
setAddMemberBtnDisabled((memberKeyFromModal.length === 0));
}}
searchPlaceholder={$t("输入名称查找用户")}
/>
</Modal>
</>
)
}
export default TeamInsideMember
@@ -1,199 +0,0 @@
import PageList from "@common/components/aoplatform/PageList.tsx"
import {ActionType} from "@ant-design/pro-components";
import {FC, useEffect, useMemo, useRef, useState} from "react";
import {useLocation, useNavigate} from "react-router-dom";
import {useBreadcrumb} from "@common/contexts/BreadcrumbContext.tsx";
import {App, Modal} from "antd";
import {BasicResponse, DELETE_TIPS, RESPONSE_TIPS, STATUS_CODE} from "@common/const/const.tsx";
import { SimpleMemberItem } from "@common/const/type.ts";
import {useFetch} from "@common/hooks/http.ts";
import { TEAM_TABLE_COLUMNS } from "../../const/team/const.tsx";
import { TeamConfigFieldType, TeamConfigHandle, TeamTableListItem } from "../../const/team/type.ts";
import { useGlobalContext } from "@common/contexts/GlobalStateContext.tsx";
import { checkAccess } from "@common/utils/permission.ts";
import TeamConfig from "./TeamConfig.tsx";
import InsidePage from "@common/components/aoplatform/InsidePage.tsx";
import { $t } from "@common/locales/index.ts";
const TeamList:FC = ()=>{
const [searchWord, setSearchWord] = useState<string>('')
const navigate = useNavigate();
const location = useLocation()
const currentUrl = location.pathname
const { setBreadcrumb } = useBreadcrumb()
const { modal,message } = App.useApp()
const pageListRef = useRef<ActionType>(null);
const {fetchData} = useFetch()
const [memberValueEnum, setMemberValueEnum] = useState<{[k:string]:{text:string}}>({})
const teamConfigRef = useRef<TeamConfigHandle>(null)
const {accessData,checkPermission,accessInit, getGlobalAccessData,state} = useGlobalContext()
const [curTeam, setCurTeam] = useState<TeamConfigFieldType>({} as TeamConfigFieldType)
const [modalVisible, setModalVisible] = useState<boolean>(false)
const [modalType, setModalType] = useState<'add'|'edit'>('add')
const getTeamList = ()=>{
if(!accessInit){
getGlobalAccessData()?.then?.(()=>{getTeamList()})
return
}
return fetchData<BasicResponse<{teams:TeamTableListItem}>>(!checkPermission('system.workspace.team.view_all') ? 'teams':'manager/teams',{method:'GET',eoParams:{keyword:searchWord},eoTransformKeys:['create_time','service_num','can_delete']}).then(response=>{
const {code,data,msg} = response
if(code === STATUS_CODE.SUCCESS){
return {data:data.teams, success: true}
}else{
message.error(msg || $t(RESPONSE_TIPS.error))
return {data:[], success:false}
}
}).catch(() => {
return {data:[], success:false}
})
}
const deleteTeam = (entity:TeamTableListItem)=>{
return new Promise((resolve, reject)=>{
fetchData<BasicResponse<null>>(`manager/team`,{method:'DELETE',eoParams:{id:entity.id}}).then(response=>{
const {code,msg} = response
if(code === STATUS_CODE.SUCCESS){
message.success(msg || $t(RESPONSE_TIPS.success))
resolve(true)
}else{
message.error(msg || $t(RESPONSE_TIPS.error))
reject(msg || $t(RESPONSE_TIPS.error))
}
}).catch((errorInfo)=> reject(errorInfo))
})
}
const getMemberList = async ()=>{
setMemberValueEnum({})
const {code,data,msg} = await fetchData<BasicResponse<{ members: SimpleMemberItem[] }>>('simple/member',{method:'GET'})
if(code === STATUS_CODE.SUCCESS){
const tmpValueEnum:{[k:string]:{text:string}} = {}
data.members?.forEach((x:SimpleMemberItem)=>{
tmpValueEnum[x.name] = {text:x.name}
})
setMemberValueEnum(tmpValueEnum)
}else{
message.error(msg || $t(RESPONSE_TIPS.error))
}
}
const manualReloadTable = () => {
pageListRef.current?.reload()
};
const openModal = async (type:'add'|'edit'|'delete',entity?:TeamTableListItem)=>{
let title:string = ''
let content:string | React.ReactNode= ''
switch (type){
case 'add':{
setModalType('add')
setModalVisible(true)
return;}
case 'edit':{
message.loading($t(RESPONSE_TIPS.loading))
const {code,data,msg} = await fetchData<BasicResponse<{team:TeamConfigFieldType}>>(`manager/team`,{method:'GET',eoParams:{id:entity!.id}})
message.destroy()
if(code === STATUS_CODE.SUCCESS){
setCurTeam({...data.team,master:data.team.master.id})
setModalVisible(true)
}else{
message.error(msg || $t(RESPONSE_TIPS.error))
return
}
setModalType('edit')
return;}
case 'delete':
title=$t('删除')
content=$t(DELETE_TIPS.default)
break;
}
modal.confirm({
title,
content,
onOk:()=>{
switch (type){
case 'delete':
return deleteTeam(entity!).then((res)=>{if(res === true) manualReloadTable()})
}
},
width:600,
okText:$t('确认'),
okButtonProps:{
disabled : !checkAccess( `system.organization.team.${type}`, accessData)
},
cancelText:$t('取消'),
closable:true,
icon:<></>,
})
}
useEffect(() => {
setBreadcrumb([
{title: $t('团队')}
])
manualReloadTable()
}, [currentUrl]);
useEffect(()=>{
getMemberList()
},[])
const columns = useMemo(()=>{
return TEAM_TABLE_COLUMNS.map(x=>{if(x.filters &&((x.dataIndex as string[])?.indexOf('master') !== -1 ) ){x.valueEnum = memberValueEnum} return {...x, title:typeof x.title === 'string' ? $t(x.title as string) : x.title}})
},[memberValueEnum,state.language])
return (
<InsidePage
pageTitle={$t('团队')}
description={$t("设置团队和成员,然后你可以在团队内创建服务和消费者、订阅API,成员只能看到所属团队内的服务和消费者。")}
showBorder={false}
contentClassName=" pr-PAGE_INSIDE_X pb-PAGE_INSIDE_B"
>
<PageList
id="global_team"
className="pl-btnbase"
ref={pageListRef}
columns = {[...columns]}
request = {()=>getTeamList()}
showPagination={false}
addNewBtnTitle={$t('添加团队')}
addNewBtnAccess = "system.organization.team.add"
searchPlaceholder={$t("输入名称、ID、负责人查找团队")}
onAddNewBtnClick={()=>{openModal('add')}}
onSearchWordChange={(e)=>{setSearchWord(e.target.value)}}
onRowClick={(row:TeamTableListItem)=>(navigate(`../inside/${row.id}/setting`))}
/>
<Modal
title={modalType === 'add' ? $t("添加团队") : $t("配置团队")}
open={modalVisible}
width={600}
destroyOnClose={true}
maskClosable={false}
afterOpenChange={(open:boolean)=>{
if(!open){
setModalVisible(false)
setCurTeam({} as unknown as TeamConfigFieldType)
}
}}
onCancel={() => {setModalVisible(false)}}
okText={$t("确认")}
okButtonProps={{disabled : !checkAccess( `system.organization.team.edit`, accessData)}}
cancelText={$t('取消')}
closable={true}
onOk={()=>teamConfigRef.current?.save().then((res)=>{
if(res){
setModalVisible(false)
manualReloadTable()
}
return res})}
>
<TeamConfig ref={teamConfigRef} entity={modalType === 'add' ? undefined : curTeam} />
</Modal>
</InsidePage>
)
}
export default TeamList
-17
View File
@@ -1,17 +0,0 @@
// start-vite.js// start-vite.js
import { exec } from 'child_process';
const viteProcess = exec('pnpm run build');
viteProcess.stdout.on('data', (data) => {
console.log(data.toString());
});
viteProcess.stderr.on('data', (data) => {
console.error(data.toString());
});
viteProcess.on('close', (code) => {
console.log(`Vite process exited with code ${code}`);
});
-82
View File
@@ -1,82 +0,0 @@
/** @type {import('tailwindcss').Config} */
export default {
important:true,
content: [
`./index.html`,
`../*/src/**/*.{js,ts,jsx,tsx}`,
],
theme: {
extend: {
width: {
INPUT_NORMAL: '100%',
// INPUT_NORMAL: '346px',
INPUT_LARGE: '508px',
GROUP: '240px',
SEARCH: '276px',
LOG: '254px'
},
minHeight:{
TEXTAREA:'68px'
},
borderRadius: {
DEFAULT: 'var(--border-radius)',
SEARCH_RADIUS: '50px'
},
boxShadow:{
SCROLL: '0 2px 2px #0000000d',
SCROLL_TOP:' 0 -2px 2px -2px var(--border-color)'
},
colors: {
DISABLE_BG: 'var(--disabled-background-color)',
MAIN_TEXT: 'var(--text-color)',
MAIN_HOVER_TEXT: 'var(--text-hover-color)',
SECOND_TEXT:'var(--disabled-text-color)',
MAIN_BG: 'var(--background-color)',
MENU_BG:'var(--MENU-BG-COLOR)',
'bar-theme': 'var(--bar-background-color)',
BORDER: 'var(--border-color)',
NAVBAR_BTN_BG: 'var(--item-active-background-color)',
MAIN_DISABLED_BG: 'var(--disabled-background-color)',
theme: 'var(--primary-color)',
DESC_TEXT: 'var(--TITLE_TEXT)',
HOVER_BG: 'var(--item-hover-background-color)',
guide_cluster: '#ee6760',
guide_upstream: '#f9a429',
guide_api: '#71d24d',
guide_publishApi: '#5884ff',
guide_final: '#915bf9',
table_text: 'var(--table-text-color)',
status_success:'#138913',
status_fail:"#ff3b30",
status_update:"#03a9f4",
status_pending:"#ffa500",
status_offline:"#8f8e93",
A_HOVER:'var(--button-primary-hover-background-color)'
},
spacing: {
mbase: 'var(--FORM_SPAN)',
label: '12px', // 选择器和label之间的间距,待删
btnbase: 'var(--LAYOUT_MARGIN)', // x方向的间距
btnybase: 'var(--LAYOUT_MARGIN)', // y轴方向的间距
btnrbase: '20px', // 页面最右侧边距20px
formtop: 'var(--FORM_SPAN)',
icon: '5px',
blockbase: '40px',
DEFAULT_BORDER_RADIUS: 'var(--border-radius)',
TREE_TITLE:'var(--small-padding) var(--LAYOUT_PADDING);',
},
borderColor: {
'color-base': 'var(--border-color)'
}
}
},
plugins: [],
corePlugins: {
preflight: false,
},
}
-31
View File
@@ -1,31 +0,0 @@
{
"compilerOptions": {
"target": "ES2020",
"useDefineForClassFields": true,
"lib": ["ES2020", "DOM", "DOM.Iterable"],
"module": "ESNext",
"skipLibCheck": true,
"typeRoots": ["./node_modules/@types", "../common/src/types"],
/* Bundler mode */
"moduleResolution": "bundler",
"allowImportingTsExtensions": true,
"resolveJsonModule": true,
"isolatedModules": true,
"noEmit": true,
"jsx": "react-jsx",
/* Linting */
"strict": true,
"noUnusedLocals": false,
"noUnusedParameters": false,
"noFallthroughCasesInSwitch": true,
"paths": {
"@core/*": ["./src/*"],
"@common/*": ["../common/src/*"],
"@market/*": ["../market/src/*"],
"@dashboard/*": ["../dashboard/src/*"],
},
},
"include": ["src", "public/iconpark_eolink.js", "public/iconpark_apinto.js", "../common/src/component/aoplatform/EditableTableWithModal.tsx", "../common/src/components/aoplatform/TreeWithMore.tsx", "../common/src/components/aoplatform/DatePicker.tsx", "../common/src/components/aoplatform/TimeRangeSelector.tsx", "../common/src/components/aoplatform/TimePicker.tsx", "../common/src/components/aoplatform/MemberTransfer.tsx", "../common/src/components/aoplatform/PageList.tsx", "../common/src/components/aoplatform/ErrorBoundary.tsx", "../common/src/components/aoplatform/ScrollableSection.tsx", "../common/src/utils/postcat.tsx", "../common/src/utils/curl.ts", "../common/src/components/aoplatform/ResetPsw.tsx", "../common/src/components/aoplatform/SubscribeApprovalModalContent.tsx", "../common/src/components/aoplatform/InsidePageForHub.tsx", "src/components/aoplatform/RenderRoutes.tsx", "../common/src/components/aoplatform/PublishApprovalModalContent.tsx", "../common/src/components/aoplatform/InsidePage.tsx", "../common/src/const/type.ts", "../common/src/components/aoplatform/intelligent-plugin", "../common/src/const/domain"],
"references": [{ "path": "./tsconfig.node.json" }]
}
-10
View File
@@ -1,10 +0,0 @@
{
"compilerOptions": {
"composite": true,
"skipLibCheck": true,
"module": "ESNext",
"moduleResolution": "bundler",
"allowSyntheticDefaultImports": true
},
"include": ["vite.config.ts"]
}
-84
View File
@@ -1,84 +0,0 @@
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
import path from 'path'
import dynamicImportVars from '@rollup/plugin-dynamic-import-vars';
import tailwindcss from 'tailwindcss';
import autoprefixer from 'autoprefixer';
import federation from "@originjs/vite-plugin-federation";
export default defineConfig({
cacheDir: './node_modules/.vite',
build:{
target: 'esnext',
outDir:'../../dist',
sourcemap: false,
chunkSizeWarningLimit: 50,
cacheDir: './node_modules/.vite',
rollupOptions: {
output: {
chunkFileNames: 'assets/eo-[name]-[hash].js',
},
},
},
css: {
postcss: {
plugins: [
tailwindcss(path.resolve(__dirname, '../common/tailwind.config.js')),
autoprefixer
],
},
preprocessorOptions: {
less: {
javascriptEnabled: true,
},
},
modules:{
localsConvention:"camelCase",
generateScopedName:"[local]_[hash:base64:2]"
}
},
plugins: [react(),
dynamicImportVars({
include:["src"],
exclude:[],
warnOnError:false
}),
federation({
name:"container",
remotes:{
remoteApp: 'http://localhost:5001/assets/remoteEntry.js' // 远程项目的URL
},
shared:[
"react",
"react-dom",
]
})
],
resolve: {
alias: [
{ find: /^~/, replacement: '' },
{ find: '@common', replacement: path.resolve(__dirname, '../common/src') },
{ find: '@market', replacement: path.resolve(__dirname, '../market/src') },
{ find: '@core', replacement: path.resolve(__dirname, './src') },
{ find: '@dashboard', replacement: path.resolve(__dirname, '../dashboard/src') },
]
},
server: {
proxy: {
'/api/v1': {
// target: 'http://uat.apikit.com:11204/mockApi/aoplatform/',
target: 'http://172.18.166.219:8288/',
changeOrigin: true,
},
'/api2/v1': {
// target: 'http://uat.apikit.com:11204/mockApi/aoplatform/',
target: 'http://172.18.166.219:8288/',
changeOrigin: true,
}
},
open: true
},
logLevel:'info'
})
-11
View File
@@ -1,11 +0,0 @@
{
"name": "dashboard",
"version": "0.0.0",
"description": "dashboard for AO Platform",
"author": "maggieyyy ",
"homepage": "",
"license": "ISC",
"dependencies": {
"echarts-for-react": "^3.0.2"
}
}
@@ -1,10 +0,0 @@
export default {
plugins: {
'postcss-import': {},
'tailwindcss/nesting': {},
tailwindcss: {},
autoprefixer: {}
},
}
@@ -1,55 +0,0 @@
import { Tabs, TabsProps } from 'antd'
import DashboardTotal from './DashboardTotal'
import { Outlet, useNavigate, useParams } from 'react-router-dom'
import { useEffect, useState } from 'react'
import { $t } from '@common/locales'
import { RouterParams } from '@common/const/type'
export default function DashboardTabPage() {
const { dashboardType } = useParams<RouterParams>()
const [activeKey, setActiveKey] = useState<string>('total')
const navigateTo = useNavigate()
useEffect(() => {
setActiveKey(dashboardType || 'total')
}, [dashboardType])
const monitorTabItems: TabsProps['items'] = [
{
label: $t('监控总览'),
key: 'total',
children: <DashboardTotal />
},
{
label: $t('服务被调用统计'),
key: 'subscriber',
children: <Outlet />
},
{
label: $t('消费者调用统计'),
key: 'provider',
children: <Outlet />
},
{
label: $t('API 调用统计'),
key: 'api',
children: <Outlet />
}
]
return (
<>
<Tabs
activeKey={activeKey}
onChange={(val) => {
setActiveKey(val)
navigateTo(`/analytics/${val === 'total' ? val : `${val}/list`}`)
}}
items={monitorTabItems}
className="h-full overflow-hidden mt-[6px] [&>.ant-tabs-content-holder]:overflow-auto [&>.ant-tabs-content-holder]:pr-PAGE_INSIDE_X [&>.ant-tabs-content-holder>.ant-tabs-content]:h-full [&>.ant-tabs-content-holder>.ant-tabs-content>.ant-tabs-tabpane]:h-full"
size="small"
tabBarStyle={{ paddingLeft: '10px', marginTop: '0px', marginBottom: '0px' }}
/>
</>
)
}
@@ -1,89 +0,0 @@
import { useNavigate } from 'react-router-dom'
import MonitorTotalPage from '@dashboard/component/MonitorTotalPage'
import { BasicResponse } from '@common/const/const'
import {
InvokeData,
MessageData,
MonitorApiData,
MonitorSubscriberData,
PieData,
SearchBody
} from '@dashboard/const/type'
import { useFetch } from '@common/hooks/http'
import { objectToSearchParameters } from '@common/utils/router'
export default function DashboardTotal() {
const { fetchData } = useFetch()
const navigateTo = useNavigate()
const fetchPieData: (body: SearchBody) => Promise<BasicResponse<PieData>> = (body: SearchBody) =>
fetchData<BasicResponse<PieData>>('monitor/overview/summary', {
method: 'POST',
eoBody: body,
eoTransformKeys: ['request_summary', 'proxy_summary']
})
const fetchInvokeData: (body: SearchBody) => Promise<BasicResponse<InvokeData>> = (body: SearchBody) =>
fetchData<BasicResponse<InvokeData>>('monitor/overview/invoke', {
method: 'POST',
eoBody: body,
eoTransformKeys: ['request_total', 'request_rate', 'proxy_total', 'proxy_rate', 'time_interval']
})
const fetchMessageData: (body: SearchBody) => Promise<BasicResponse<MessageData>> = (body: SearchBody) =>
fetchData<BasicResponse<MessageData>>('monitor/overview/message', {
method: 'POST',
eoBody: body,
eoTransformKeys: ['time_interval', 'request_message', 'response_message']
})
const fetchTableData: (
body: SearchBody,
type: 'api' | 'subscribers' | 'providers'
) => Promise<BasicResponse<{ top10: MonitorApiData[] | MonitorSubscriberData[] }>> = (
body: SearchBody,
type: 'api' | 'subscribers' | 'providers'
) =>
fetchData<BasicResponse<{ api: MonitorApiData[]; subscribers: MonitorSubscriberData }>>('monitor/overview/top10', {
method: 'POST',
eoBody: { ...body, dataType: type },
eoTransformKeys: [
'dataType',
'request_total',
'request_success',
'request_rate',
'proxy_total',
'proxy_success',
'proxy_rate',
'status_fail',
'avg_resp',
'max_resp',
'min_resp',
'avg_traffic',
'max_traffic',
'min_traffic',
'min_traffic',
'is_red'
]
})
const goToDetail: (body: SearchBody, val: MonitorApiData | MonitorSubscriberData, type: string) => void = (
body: SearchBody,
val: MonitorApiData | MonitorSubscriberData,
type: string
) => {
// ...跳转到详情页...
const { start: startTime, end: endTime, clusters } = body
navigateTo(
`/analytics/${type}/list?${objectToSearchParameters({ id: val.id, clusters: clusters || undefined, start: startTime?.toString(), end: endTime?.toString(), name: val.name }).toString()}`
)
}
return (
<MonitorTotalPage
fetchPieData={fetchPieData}
fetchInvokeData={fetchInvokeData}
fetchMessageData={fetchMessageData}
fetchTableData={fetchTableData}
goToDetail={goToDetail}
/>
)
}
@@ -1,91 +0,0 @@
import { RangeValue } from '@common/components/aoplatform/TimeRangeSelector'
import { $t } from '@common/locales'
export function getTime(
timeButton: string,
datePickerValue: RangeValue | [],
init?: boolean
): { startTime: number; endTime: number } {
const currentSecond = new Date().getTime() // 当前毫秒数时间戳
let currentMin = currentSecond - (currentSecond % (60 * 1000)) // 当前分钟数时间戳
let startMin = currentMin - 60 * 60 * 1000
if (!init && timeButton) {
switch (timeButton) {
case 'hour': {
startMin = currentMin - 60 * 60 * 1000
break
}
case 'day': {
startMin = currentMin - 24 * 60 * 60 * 1000
break
}
case 'threeDays': {
startMin = new Date(new Date().setHours(0, 0, 0, 0)).getTime() - 2 * 24 * 60 * 60 * 1000
break
}
case 'sevenDays': {
startMin = new Date(new Date().setHours(0, 0, 0, 0)).getTime() - 6 * 24 * 60 * 60 * 1000
break
}
}
} else if (datePickerValue?.length === 2) {
startMin = datePickerValue[0]!.startOf('day').unix()
currentMin = datePickerValue[1]!.endOf('day').unix()
}
return { startTime: startMin / 1000, endTime: currentMin / 1000 }
}
export function getTimeUnit(timeInterval: string): string {
let timeUnit = ''
// 相差秒数
switch (timeInterval) {
case '1m': {
timeUnit = '每分钟'
break
}
case '5m': {
timeUnit = '每5分钟'
break
}
case '1h': {
timeUnit = '每小时'
break
}
case '1d': {
timeUnit = '每天'
break
}
case '1w': {
timeUnit = '每周'
break
}
}
return timeUnit
}
// 当数据超过10万时,保留两个小数点,单位为万,如123212,显示12.32万;
export function changeNumberUnit(value?: number): { value: string; unit: string } {
if (value && value > 1000000000) {
return { value: (value && value / 100000000).toFixed(2), unit: '亿' }
} else if (value && value > 1000000) {
return { value: (value && value / 10000).toFixed(0), unit: '万' }
} else if (value && value > 10000) {
return { value: (value && value / 10000).toFixed(2), unit: '万' }
}
return { value: (value ?? '-') + '', unit: ' 次' }
}
export function yUnitFormatter(value: number): string {
let res: string = ''
if (value > 100000000) {
res = (value / 100000000).toFixed(2) + $t('亿')
} else if (value > 1000000) {
res = (value / 10000).toFixed(0) + $t('万')
} else if (value > 100000) {
res = (value / 10000).toFixed(2) + $t('万')
} else {
res = value.toFixed(0)
}
return res
}
@@ -1,81 +0,0 @@
/** @type {import('tailwindcss').Config} */
export default {
important:true,
content: [
`./index.html`,
`../*/src/**/*.{js,ts,jsx,tsx}`,
],
theme: {
extend: {
width: {
INPUT_NORMAL: '100%',
// INPUT_NORMAL: '346px',
INPUT_LARGE: '508px',
GROUP: '240px',
SEARCH: '276px',
LOG: '254px'
},
minHeight:{
TEXTAREA:'68px'
},
borderRadius: {
DEFAULT: 'var(--border-radius)',
SEARCH_RADIUS: '50px'
},
boxShadow:{
SCROLL: '0 2px 2px #0000000d',
SCROLL_TOP:' 0 -2px 2px -2px var(--border-color)'
},
colors: {
DISABLE_BG: 'var(--disabled-background-color)',
MAIN_TEXT: 'var(--text-color)',
MAIN_HOVER_TEXT: 'var(--text-hover-color)',
SECOND_TEXT:'var(--disabled-text-color)',
MAIN_BG: 'var(--background-color)',
MENU_BG:'var(--MENU-BG-COLOR)',
'bar-theme': 'var(--bar-background-color)',
BORDER: 'var(--border-color)',
NAVBAR_BTN_BG: 'var(--item-active-background-color)',
MAIN_DISABLED_BG: 'var(--disabled-background-color)',
theme: 'var(--primary-color)',
DESC_TEXT: 'var(--TITLE_TEXT)',
HOVER_BG: 'var(--item-hover-background-color)',
guide_cluster: '#ee6760',
guide_upstream: '#f9a429',
guide_api: '#71d24d',
guide_publishApi: '#5884ff',
guide_final: '#915bf9',
table_text: 'var(--table-text-color)',
status_success:'#138913',
status_fail:"#ff3b30",
status_update:"#03a9f4",
status_pending:"#ffa500",
status_offline:"#8f8e93",
A_HOVER:'var(--button-primary-hover-background-color)'
},
spacing: {
mbase: 'var(--FORM_SPAN)',
label: '12px', // 选择器和label之间的间距,待删
btnbase: 'var(--LAYOUT_MARGIN)', // x方向的间距
btnybase: 'var(--LAYOUT_MARGIN)', // y轴方向的间距
btnrbase: '20px', // 页面最右侧边距20px
formtop: 'var(--FORM_SPAN)',
icon: '5px',
blockbase: '40px',
DEFAULT_BORDER_RADIUS: 'var(--border-radius)',
TREE_TITLE:'var(--small-padding) var(--LAYOUT_PADDING);'
},
borderColor: {
'color-base': 'var(--border-color)'
}
}
},
plugins: [],
corePlugins: {
preflight: false,
},
}
-29
View File
@@ -1,29 +0,0 @@
{
"compilerOptions": {
"target": "ES2020",
"useDefineForClassFields": true,
"lib": ["ES2020", "DOM", "DOM.Iterable"],
"module": "ESNext",
"skipLibCheck": true,
/* Bundler mode */
"moduleResolution": "bundler",
"allowImportingTsExtensions": true,
"resolveJsonModule": true,
"isolatedModules": true,
"noEmit": true,
"jsx": "react-jsx",
/* Linting */
"strict": true,
"noUnusedLocals": false,
"noUnusedParameters": false,
"noFallthroughCasesInSwitch": true,
"paths": {
"@common/*": ["../common/src/*"],
"@core/*": ["../core/src/*"],
"@dashboard/*": ["./src/*"]
},
},
"include": ["src", "public/iconpark_eolink.js", "public/iconpark_apinto.js", "../common/src/component/aoplatform/EditableTableWithModal.tsx", "../common/src/components/aoplatform/TreeWithMore.tsx", "../common/src/components/aoplatform/DatePicker.tsx", "../common/src/components/aoplatform/TimeRangeSelector.tsx", "../common/src/components/aoplatform/TimePicker.tsx", "../common/src/components/aoplatform/MemberTransfer.tsx", "../common/src/components/aoplatform/PageList.tsx", "../common/src/components/aoplatform/ErrorBoundary.tsx", "../core/src/pages/serviceCategory/ServiceHubCategoryConfig.tsx"],
"references": [{ "path": "./tsconfig.node.json" }]
}
@@ -1,10 +0,0 @@
{
"compilerOptions": {
"composite": true,
"skipLibCheck": true,
"module": "ESNext",
"moduleResolution": "bundler",
"allowSyntheticDefaultImports": true
},
"include": ["vite.config.ts"]
}
-16
View File
@@ -1,16 +0,0 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/frontend/favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>APIPark - 企业API数据开放平台</title>
</head>
<body>
<div id="root"></div>
<script type="module" src="/src/main.tsx"></script>
<script src="/frontend/iconpark_eolink.js"></script>
<script src="/frontend/iconpark_apinto.js"></script>
</body>
</html>
-17
View File
@@ -1,17 +0,0 @@
{
"name": "market",
"version": "0.0.0",
"private": true,
"type": "module",
"description": "service market project",
"scripts": {
"dev": " vite --port 5000 --strictPort",
"build": "vite build",
"test": "node ./__tests__/market.test.js"
},
"dependencies": {
"@types/dompurify": "^3.0.5",
"dompurify": "^3.1.6",
"react-virtuoso": "^4.7.11"
}
}
@@ -1,10 +0,0 @@
export default {
plugins: {
'postcss-import': {},
'tailwindcss/nesting': {},
tailwindcss: {},
autoprefixer: {}
},
}
-30
View File
@@ -1,30 +0,0 @@
@tailwind base;
@tailwind components;
@tailwind utilities;
#root {
width: 100vw;
height:100vh;
}
:global.ant-tree-node-content-wrapper{
overflow: hidden;
}
.tree-title-hover{
display: flex;
justify-content: space-between;
align-items:center;
.tree-title-span{
text-overflow: ellipsis;
}
.tree-title-more{
display: none;
}
&:hover .tree-title-more{
display: flex;
height:22px;
width:22px;
}
}
@@ -1,254 +0,0 @@
import { ApiFilled, ArrowLeftOutlined } from '@ant-design/icons'
import { BasicResponse, RESPONSE_TIPS, STATUS_CODE } from '@common/const/const.tsx'
import { EntityItem, RouterParams } from '@common/const/type.ts'
import { useBreadcrumb } from '@common/contexts/BreadcrumbContext.tsx'
import { useFetch } from '@common/hooks/http.ts'
import { $t } from '@common/locales/index.ts'
import { Icon } from '@iconify/react/dist/iconify.js'
import { approvalTypeTranslate } from '@market/const/serviceHub/const.tsx'
import { App, Avatar, Button, Descriptions, Divider, Tabs } from 'antd'
import { DefaultOptionType } from 'antd/es/cascader'
import DOMPurify from 'dompurify'
import { useEffect, useRef, useState } from 'react'
import { Link, useNavigate, useParams } from 'react-router-dom'
import { ApplyServiceHandle, ServiceBasicInfoType, ServiceDetailType } from '../../const/serviceHub/type.ts'
import { ApplyServiceModal } from './ApplyServiceModal.tsx'
import ServiceHubApiDocument from './ServiceHubApiDocument.tsx'
import Integrate from './integrate.tsx'
const ServiceHubDetail = () => {
const { serviceId } = useParams<RouterParams>()
const { setBreadcrumb } = useBreadcrumb()
const [serviceBasicInfo, setServiceBasicInfo] = useState<ServiceBasicInfoType>()
const [serviceName, setServiceName] = useState<string>()
const [serviceDesc, setServiceDesc] = useState<string>()
const [serviceDoc, setServiceDoc] = useState<string>()
const { fetchData } = useFetch()
const applyRef = useRef<ApplyServiceHandle>(null)
const { modal, message } = App.useApp()
const [mySystemOptionList, setMySystemOptionList] = useState<DefaultOptionType[]>()
const [service, setService] = useState<ServiceDetailType>()
const navigate = useNavigate()
const modifyApiDoc = (apiDoc: string, apiPrefix: string) => {
if (!apiDoc) return ''
if (!apiPrefix) return apiDoc
try {
const openApiSpec = JSON.parse(apiDoc)
// 遍历并修改 paths,给每个路径添加前缀
const modifiedPaths: Record<string, unknown> = {}
for (const [path, pathItem] of Object.entries(openApiSpec.paths)) {
modifiedPaths[apiPrefix + path] = pathItem
}
openApiSpec.paths = modifiedPaths
return JSON.stringify(openApiSpec)
} catch (err) {
console.warn('拼接api前缀失败', err)
}
return apiDoc
}
const getServiceBasicInfo = () => {
fetchData<BasicResponse<{ service: ServiceDetailType }>>('catalogue/service', {
method: 'GET',
eoParams: { service: serviceId },
eoTransformKeys: [
'app_num',
'api_num',
'update_time',
'api_doc',
'invoke_address',
'approval_type',
'service_kind',
'site_prefix'
]
}).then((response) => {
const { code, data, msg } = response
if (code === STATUS_CODE.SUCCESS) {
setService({
...data.service,
apiDoc: modifyApiDoc(data.service.apiDoc, data.service.basic?.invokeAddress)
})
setServiceBasicInfo(data.service.basic)
setServiceName(data.service.name)
setServiceDesc(data.service.description)
setServiceDoc(DOMPurify.sanitize(data.service.document))
} else {
message.error(msg || $t(RESPONSE_TIPS.error))
}
})
}
useEffect(() => {
if (!serviceId) {
console.warn('缺少serviceId')
return
}
serviceId && getServiceBasicInfo()
}, [serviceId])
useEffect(() => {
getMySelectList()
setBreadcrumb([{ title: <Link to={`/serviceHub/list`}>{$t('服务市场')}</Link> }, { title: $t('服务详情') }])
}, [])
const getMySelectList = () => {
setMySystemOptionList([])
fetchData<BasicResponse<{ app: EntityItem[] }>>('apps/can_subscribe', { method: 'GET' }).then((response) => {
const { code, data, msg } = response
if (code === STATUS_CODE.SUCCESS) {
setMySystemOptionList(
data.app?.map((x: EntityItem) => {
return {
label: x.name,
value: x.id
}
})
)
} else {
message.error(msg || $t(RESPONSE_TIPS.error))
}
})
}
const openModal = (type: 'apply') => {
modal.confirm({
title: $t('申请服务'),
content: (
<ApplyServiceModal
ref={applyRef}
entity={{ ...serviceBasicInfo!, name: serviceName!, id: serviceId! }}
mySystemOptionList={mySystemOptionList!}
/>
),
onOk: () => {
return applyRef.current?.apply().then((res) => {
// if(res === true) setApplied(true)
})
},
okText: $t('确认'),
cancelText: $t('取消'),
closable: true,
icon: <></>,
width: 600
})
}
const items = [
{
key: 'introduction',
label: $t('介绍'),
children: (
<>
<div
className="p-btnbase preview-document mb-PAGE_INSIDE_B"
dangerouslySetInnerHTML={{ __html: serviceDoc || '' }}
></div>
</>
),
icon: <Icon icon="ic:baseline-space-dashboard" width="14" height="14" />
},
{
key: 'api-document',
label: $t('API 文档'),
children: (
<div
className={`p-btnbase ${serviceBasicInfo?.serviceKind?.toLocaleLowerCase() === 'ai' ? 'ai-service-api-preview' : ''}`}
>
<ServiceHubApiDocument service={service!} />
</div>
),
icon: <ApiFilled />
},
{
key: 'api-integrate',
label: $t('集成'),
children: (
<div
className={`p-btnbase ${serviceBasicInfo?.serviceKind?.toLocaleLowerCase() === 'ai' ? 'ai-service-api-preview' : ''}`}
>
<Integrate service={service!} />
</div>
),
icon: <Icon icon="icon-park-solid:whole-site-accelerator" width="15" height="15" />
}
]
return (
<section className="grid grid-cols-5 h-full mr-PAGE_INSIDE_X">
<section className="col-span-4 border-0 border-r-[1px] border-solid border-BORDER flex flex-col overflow-hidden">
<section className="flex flex-col gap-btnbase p-btnbase">
<div className="text-[18px] leading-[25px] pb-[12px]">
<Button type="text" onClick={() => navigate(`/serviceHub/list`)}>
<ArrowLeftOutlined className="max-h-[14px]" />
{$t('返回')}
</Button>
</div>
<div className="flex">
{/* <Avatar shape="square" size={50} className=" bg-[linear-gradient(135deg,white,#f0f0f0)] text-[#333] rounded-[12px]" > {service?.name?.substring(0,1)}</Avatar> */}
<Avatar
shape="square"
size={50}
className={`rounded-[12px] border-none rounded-[12px] ${serviceBasicInfo?.logo ? 'bg-[linear-gradient(135deg,white,#f0f0f0)]' : 'bg-theme'}`}
src={
serviceBasicInfo?.logo ? (
<img
src={serviceBasicInfo?.logo}
alt="Logo"
style={{ maxWidth: '200px', width: '45px', height: '45px', objectFit: 'unset' }}
/>
) : undefined
}
icon={serviceBasicInfo?.logo ? '' : <iconpark-icon name="auto-generate-api"></iconpark-icon>}
>
{' '}
</Avatar>
<div className="pl-[20px] w-[calc(100%-50px)]">
<p className="text-[14px] h-[20px] leading-[20px] truncate font-bold flex items-center gap-[4px]">
{serviceName}
</p>
<div className="mt-[10px] flex flex-col gap-btnrbase font-normal">
<p>{serviceDesc || '-'}</p>
<p className="flex items-center gap-[4px]">
<Icon icon="ic:baseline-link" width="18" height="18" />
<span className="font-bold">{$t('Base URL')}</span>: {serviceBasicInfo?.invokeAddress || '-'}
</p>
<div>
<Button type="primary" onClick={() => openModal('apply')}>
{$t('申请')}
</Button>
</div>
</div>
</div>
</div>
</section>
<Tabs className="p-btnbase pr-0 overflow-hidden [&>.ant-tabs-content-holder]:overflow-auto" items={items} />
</section>
<section className="col-span-1 p-btnbase px-btnrbase">
<Descriptions title={$t('服务信息')} column={1} size={'small'}>
<Descriptions.Item label={$t('接入消费者')}>{serviceBasicInfo?.appNum ?? '-'}</Descriptions.Item>
<Descriptions.Item label={$t('供应方')}>{serviceBasicInfo?.team?.name || '-'}</Descriptions.Item>
<Descriptions.Item label={$t('审核')}>
{serviceBasicInfo?.approvalType ? $t(approvalTypeTranslate[serviceBasicInfo?.approvalType] || '-') : '-'}
</Descriptions.Item>
<Descriptions.Item label={$t('分类')}>{serviceBasicInfo?.catalogue?.name || '-'}</Descriptions.Item>
<Descriptions.Item label={$t('标签')}>
{serviceBasicInfo?.tags?.map((x) => x.name)?.join(',') || '-'}
</Descriptions.Item>
</Descriptions>
<Divider />
<Descriptions column={1}>
<Descriptions.Item label={$t('版本')}>{serviceBasicInfo?.version || '-'}</Descriptions.Item>
<Descriptions.Item label={$t('更新时间')}>
<span className="truncate" title={serviceBasicInfo?.updateTime}>
{serviceBasicInfo?.updateTime || '-'}
</span>
</Descriptions.Item>
</Descriptions>
</section>
</section>
)
}
export default ServiceHubDetail
-29
View File
@@ -1,29 +0,0 @@
{
"compilerOptions": {
"target": "ES2020",
"useDefineForClassFields": true,
"lib": ["ES2020", "DOM", "DOM.Iterable"],
"module": "ESNext",
"skipLibCheck": true,
/* Bundler mode */
"moduleResolution": "bundler",
"allowImportingTsExtensions": true,
"resolveJsonModule": true,
"isolatedModules": true,
"noEmit": true,
"jsx": "react-jsx",
/* Linting */
"strict": true,
"noUnusedLocals": false,
"noUnusedParameters": false,
"noFallthroughCasesInSwitch": true,
"paths": {
"@common/*": ["../common/src/*"],
"@core/*": ["../core/src/*"],
"@market/*": ["./src/*"]
},
},
"include": ["src", "public/iconpark_eolink.js", "public/iconpark_apinto.js", "../common/src/component/aoplatform/EditableTableWithModal.tsx", "../common/src/components/aoplatform/TreeWithMore.tsx", "../common/src/components/aoplatform/DatePicker.tsx", "../common/src/components/aoplatform/TimeRangeSelector.tsx", "../common/src/components/aoplatform/TimePicker.tsx", "../common/src/components/aoplatform/MemberTransfer.tsx", "../common/src/components/aoplatform/PageList.tsx", "../common/src/components/aoplatform/ErrorBoundary.tsx", "../core/src/pages/serviceCategory/ServiceHubCategoryConfig.tsx"],
"references": [{ "path": "./tsconfig.node.json" }]
}
@@ -1,10 +0,0 @@
{
"compilerOptions": {
"composite": true,
"skipLibCheck": true,
"module": "ESNext",
"moduleResolution": "bundler",
"allowSyntheticDefaultImports": true
},
"include": ["vite.config.ts"]
}
-52
View File
@@ -1,52 +0,0 @@
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
import path from 'path'
import dynamicImportVars from '@rollup/plugin-dynamic-import-vars'
export default defineConfig({
build: {
outDir: '../../tenant_dist',
sourcemap: false,
chunkSizeWarningLimit: 50000,
rollupOptions: {
output: {
manualChunks(id) {
if (id.includes('node_modules')) {
return id.toString().split('node_modules/')[1].split('/')[0].toString()
}
}
}
}
},
plugins: [
react(),
dynamicImportVars({
include: ['src'],
exclude: [],
warnOnError: false
})
],
resolve: {
alias: [
{ find: /^~/, replacement: '' },
{ find: '@market', replacement: path.resolve(__dirname, './src') },
{ find: '@common', replacement: path.resolve(__dirname, '../common/src') },
{ find: '@core', replacement: path.resolve(__dirname, '../core/src') }
]
},
server: {
proxy: {
'/api/v1': {
// target: 'http://uat.apikit.com:11204/mockApi/aoplatform/',
target: 'http://172.18.166.219:8488/',
changeOrigin: true
},
'/api2/v1': {
// target: 'http://uat.apikit.com:11204/mockApi/aoplatform/',
target: 'http://172.18.166.219:8488/',
changeOrigin: true
}
}
},
logLevel: 'info'
})
-15
View File
@@ -1,15 +0,0 @@
{
"name": "open-api",
"version": "0.0.0",
"description": "openApi module",
"scripts": {
"dev": "vite",
"build": "vite build",
"test": "node ./__tests__/common.test.js"
},
"dependencies": {
"copy-to-clipboard": "^3.3.3"
},
"devDependencies": {
}
}
@@ -1,10 +0,0 @@
export default {
plugins: {
'postcss-import': {},
'tailwindcss/nesting': {},
tailwindcss: {},
autoprefixer: {}
},
}
@@ -1,81 +0,0 @@
/** @type {import('tailwindcss').Config} */
export default {
important:true,
content: [
`./index.html`,
`../*/src/**/*.{js,ts,jsx,tsx}`,
],
theme: {
extend: {
width: {
INPUT_NORMAL: '100%',
// INPUT_NORMAL: '346px',
INPUT_LARGE: '508px',
GROUP: '240px',
SEARCH: '276px',
LOG: '254px'
},
minHeight:{
TEXTAREA:'68px'
},
borderRadius: {
DEFAULT: 'var(--border-radius)',
SEARCH_RADIUS: '50px'
},
boxShadow:{
SCROLL: '0 2px 2px #0000000d',
SCROLL_TOP:' 0 -2px 2px -2px var(--border-color)'
},
colors: {
DISABLE_BG: 'var(--disabled-background-color)',
MAIN_TEXT: 'var(--text-color)',
MAIN_HOVER_TEXT: 'var(--text-hover-color)',
SECOND_TEXT:'var(--disabled-text-color)',
MAIN_BG: 'var(--background-color)',
MENU_BG:'var(--MENU-BG-COLOR)',
'bar-theme': 'var(--bar-background-color)',
BORDER: 'var(--border-color)',
NAVBAR_BTN_BG: 'var(--item-active-background-color)',
MAIN_DISABLED_BG: 'var(--disabled-background-color)',
theme: 'var(--primary-color)',
DESC_TEXT: 'var(--TITLE_TEXT)',
HOVER_BG: 'var(--item-hover-background-color)',
guide_cluster: '#ee6760',
guide_upstream: '#f9a429',
guide_api: '#71d24d',
guide_publishApi: '#5884ff',
guide_final: '#915bf9',
table_text: 'var(--table-text-color)',
status_success:'#138913',
status_fail:"#ff3b30",
status_update:"#03a9f4",
status_pending:"#ffa500",
status_offline:"#8f8e93",
A_HOVER:'var(--button-primary-hover-background-color)'
},
spacing: {
mbase: 'var(--FORM_SPAN)',
label: '12px', // 选择器和label之间的间距,待删
btnbase: 'var(--LAYOUT_MARGIN)', // x方向的间距
btnybase: 'var(--LAYOUT_MARGIN)', // y轴方向的间距
btnrbase: '20px', // 页面最右侧边距20px
formtop: 'var(--FORM_SPAN)',
icon: '5px',
blockbase: '40px',
DEFAULT_BORDER_RADIUS: 'var(--border-radius)',
TREE_TITLE:'var(--small-padding) var(--LAYOUT_PADDING);'
},
borderColor: {
'color-base': 'var(--border-color)'
}
}
},
plugins: [],
corePlugins: {
preflight: false,
},
}
-29
View File
@@ -1,29 +0,0 @@
{
"compilerOptions": {
"target": "ES2020",
"useDefineForClassFields": true,
"lib": ["ES2020", "DOM", "DOM.Iterable"],
"module": "ESNext",
"skipLibCheck": true,
/* Bundler mode */
"moduleResolution": "bundler",
"allowImportingTsExtensions": true,
"resolveJsonModule": true,
"isolatedModules": true,
"noEmit": true,
"jsx": "react-jsx",
/* Linting */
"strict": true,
"noUnusedLocals": false,
"noUnusedParameters": false,
"noFallthroughCasesInSwitch": true,
"paths": {
"@common/*": ["../common/src/*"],
"@core/*": ["../core/src/*"],
"@openApi/*": ["./src/*"]
},
},
"include": ["src", "public/iconpark_eolink.js", "public/iconpark_apinto.js", "../common/src/component/aoplatform/EditableTableWithModal.tsx", "../common/src/components/aoplatform/TreeWithMore.tsx", "../common/src/components/aoplatform/DatePicker.tsx", "../common/src/components/aoplatform/TimeRangeSelector.tsx", "../common/src/components/aoplatform/TimePicker.tsx", "../common/src/components/aoplatform/MemberTransfer.tsx", "../common/src/components/aoplatform/PageList.tsx", "../common/src/components/aoplatform/ErrorBoundary.tsx", "../core/src/pages/serviceCategory/ServiceHubCategoryConfig.tsx"],
"references": [{ "path": "./tsconfig.node.json" }]
}
@@ -1,10 +0,0 @@
{
"compilerOptions": {
"composite": true,
"skipLibCheck": true,
"module": "ESNext",
"moduleResolution": "bundler",
"allowSyntheticDefaultImports": true
},
"include": ["vite.config.ts"]
}
@@ -1,8 +0,0 @@
{
"name": "systemrunning",
"version": "1.0.0",
"description": "> TODO: description",
"author": "maggieyyy <61950669+maggieyyy@users.noreply.github.com>",
"homepage": "",
"license": "ISC"
}
@@ -1,10 +0,0 @@
export default {
plugins: {
'postcss-import': {},
'tailwindcss/nesting': {},
tailwindcss: {},
autoprefixer: {}
},
}
@@ -1,81 +0,0 @@
/** @type {import('tailwindcss').Config} */
export default {
important:true,
content: [
`./index.html`,
`../*/src/**/*.{js,ts,jsx,tsx}`,
],
theme: {
extend: {
width: {
INPUT_NORMAL: '100%',
// INPUT_NORMAL: '346px',
INPUT_LARGE: '508px',
GROUP: '240px',
SEARCH: '276px',
LOG: '254px'
},
minHeight:{
TEXTAREA:'68px'
},
borderRadius: {
DEFAULT: 'var(--border-radius)',
SEARCH_RADIUS: '50px'
},
boxShadow:{
SCROLL: '0 2px 2px #0000000d',
SCROLL_TOP:' 0 -2px 2px -2px var(--border-color)'
},
colors: {
DISABLE_BG: 'var(--disabled-background-color)',
MAIN_TEXT: 'var(--text-color)',
MAIN_HOVER_TEXT: 'var(--text-hover-color)',
SECOND_TEXT:'var(--disabled-text-color)',
MAIN_BG: 'var(--background-color)',
MENU_BG:'var(--MENU-BG-COLOR)',
'bar-theme': 'var(--bar-background-color)',
BORDER: 'var(--border-color)',
NAVBAR_BTN_BG: 'var(--item-active-background-color)',
MAIN_DISABLED_BG: 'var(--disabled-background-color)',
theme: 'var(--primary-color)',
DESC_TEXT: 'var(--TITLE_TEXT)',
HOVER_BG: 'var(--item-hover-background-color)',
guide_cluster: '#ee6760',
guide_upstream: '#f9a429',
guide_api: '#71d24d',
guide_publishApi: '#5884ff',
guide_final: '#915bf9',
table_text: 'var(--table-text-color)',
status_success:'#138913',
status_fail:"#ff3b30",
status_update:"#03a9f4",
status_pending:"#ffa500",
status_offline:"#8f8e93",
A_HOVER:'var(--button-primary-hover-background-color)'
},
spacing: {
mbase: 'var(--FORM_SPAN)',
label: '12px', // 选择器和label之间的间距,待删
btnbase: 'var(--LAYOUT_MARGIN)', // x方向的间距
btnybase: 'var(--LAYOUT_MARGIN)', // y轴方向的间距
btnrbase: '20px', // 页面最右侧边距20px
formtop: 'var(--FORM_SPAN)',
icon: '5px',
blockbase: '40px',
DEFAULT_BORDER_RADIUS: 'var(--border-radius)',
TREE_TITLE:'var(--small-padding) var(--LAYOUT_PADDING);'
},
borderColor: {
'color-base': 'var(--border-color)'
}
}
},
plugins: [],
corePlugins: {
preflight: false,
},
}
@@ -1,28 +0,0 @@
{
"compilerOptions": {
"target": "ES2020",
"useDefineForClassFields": true,
"lib": ["ES2020", "DOM", "DOM.Iterable"],
"module": "ESNext",
"skipLibCheck": true,
/* Bundler mode */
"moduleResolution": "bundler",
"allowImportingTsExtensions": true,
"resolveJsonModule": true,
"isolatedModules": true,
"noEmit": true,
"jsx": "react-jsx",
/* Linting */
"strict": true,
"noUnusedLocals": false,
"noUnusedParameters": false,
"noFallthroughCasesInSwitch": true,
"paths": {
"@common/*": ["../common/src/*"],
"@core/*": ["../core/src/*"],
},
},
"include": ["src", "public/iconpark_eolink.js", "public/iconpark_apinto.js", "../common/src/component/aoplatform/EditableTableWithModal.tsx", "../common/src/components/aoplatform/TreeWithMore.tsx", "../common/src/components/aoplatform/DatePicker.tsx", "../common/src/components/aoplatform/TimeRangeSelector.tsx", "../common/src/components/aoplatform/TimePicker.tsx", "../common/src/components/aoplatform/MemberTransfer.tsx", "../common/src/components/aoplatform/PageList.tsx", "../common/src/components/aoplatform/ErrorBoundary.tsx", "../core/src/pages/serviceCategory/ServiceHubCategoryConfig.tsx"],
"references": [{ "path": "./tsconfig.node.json" }]
}
@@ -1,10 +0,0 @@
{
"compilerOptions": {
"composite": true,
"skipLibCheck": true,
"module": "ESNext",
"moduleResolution": "bundler",
"allowSyntheticDefaultImports": true
},
"include": ["vite.config.ts"]
}
+5
View File
@@ -0,0 +1,5 @@
module.exports = {
plugins: {
'@tailwindcss/postcss': {},
},
}
@@ -0,0 +1 @@
export { default } from "@/app/_legacy/LegacyAppPage";
@@ -0,0 +1 @@
export { default } from "@/app/_legacy/LegacyAppPage";
@@ -0,0 +1 @@
export { default } from "@/app/_legacy/LegacyAppPage";
@@ -0,0 +1 @@
export { default } from "@/app/_legacy/LegacyAppPage";
@@ -0,0 +1 @@
export { default } from "@/app/_legacy/LegacyAppPage";
@@ -0,0 +1 @@
export { default } from "@/app/_legacy/LegacyAppPage";
@@ -0,0 +1 @@
export { default } from "@/app/_legacy/LegacyAppPage";
@@ -0,0 +1 @@
export { default } from "@/app/_legacy/LegacyAppPage";
@@ -0,0 +1 @@
export { default } from "@/app/_legacy/LegacyAppPage";
@@ -0,0 +1 @@
export { default } from "@/app/_legacy/LegacyAppPage";
@@ -0,0 +1 @@
export { default } from "@/app/_legacy/LegacyAppPage";
@@ -0,0 +1,546 @@
'use client'
import { BasicResponse, RESPONSE_TIPS, STATUS_CODE } from '@common/const/const'
import { useGlobalContext } from '@common/contexts/GlobalStateContext'
import { useFetch } from '@common/hooks/http'
import { $t } from '@common/locales'
import localAIPic from '@common/assets/localAI.svg'
import onlineAIPic from '@common/assets/onlineAI.svg'
import restAPIPic from '@common/assets/restAPI.svg'
import { Icon } from '@iconify/react/dist/iconify.js'
import { checkAccess } from '@common/utils/permission'
import AiSettingModalContent, { AiSettingModalContentHandle } from '@core/pages/aiSetting/AiSettingModal'
import LocalAiDeploy, { LocalAiDeployHandle } from '@core/pages/guide/LocalAiDeploy'
import RestAIDeploy, { RestAIDeployHandle } from '@core/pages/guide/RestAIDeploy'
import useDeployLocalModel from '@core/pages/guide/deployModelUtil'
import { App as AppAntd, Button, Card, Collapse } from 'antd'
import { usePathname, useRouter } from 'next/navigation'
import { Dispatch, SetStateAction, useEffect, useMemo, useRef, useState } from 'react'
function AIModelGuide() {
const { message, modal } = AppAntd.useApp()
const entityData = useRef<any>(null)
const router = useRouter()
const { accessData } = useGlobalContext()
const modalRef = useRef<AiSettingModalContentHandle>()
const localAiDeployRef = useRef<LocalAiDeployHandle>()
const restAiDeployRef = useRef<RestAIDeployHandle>()
const { deployLocalModel } = useDeployLocalModel()
const { fetchData } = useFetch()
const [ollamaAddress, setOllamaAddress] = useState<string>('')
const dumpServerPage = () => {
router.push('/service/list')
}
const restCardClick = async () => {
const permission = checkAccess('system.workspace.service.edit', accessData)
if (!permission) {
return message.warning($t('暂无权限'))
}
modal.confirm({
title: $t('添加 Rest 服务'),
content: <RestAIDeploy ref={restAiDeployRef}></RestAIDeploy>,
onOk: () => {
return restAiDeployRef.current?.deployRestAIServer().then((res) => {
if (res === true) {
dumpServerPage()
}
})
},
width: 600,
okText: $t('确认'),
cancelText: $t('取消'),
closable: true,
icon: <></>
})
}
const aiCardClick = () => {
const permission = checkAccess('system.devops.ai_provider.edit', accessData)
if (!permission) {
return message.warning($t('暂无权限'))
}
const updateEntityData = (data: any) => {
entityData.current = data
modalInstance.update({})
}
const modalInstance = modal.confirm({
title: $t('模型配置'),
content: (
<AiSettingModalContent
ref={modalRef}
modelMode="manual"
updateEntityData={updateEntityData}
source="guide"
readOnly={!checkAccess('system.devops.ai_provider.edit', accessData)}
/>
),
onOk: () => {
return modalRef.current?.deployAIServer().then((res) => {
if (res === true) {
dumpServerPage()
}
})
},
width: 600,
okText: $t('确认'),
footer: (_, { OkBtn, CancelBtn }) => (
<div className="flex justify-between items-center">
<a
target="_blank"
rel="noopener noreferrer"
href={entityData.current?.getApikeyUrl}
className="flex items-center gap-[8px]"
>
<span>{$t('从 (0) 获取 API KEY', [entityData.current?.name])}</span>
<Icon icon="ic:baseline-open-in-new" width={16} height={16} />
</a>
<div>
<CancelBtn />
{checkAccess('system.devops.ai_provider.edit', accessData) ? <OkBtn /> : null}
</div>
</div>
),
cancelText: $t('取消'),
closable: true,
icon: <></>
})
}
useEffect(() => {
fetchData<BasicResponse<{ data: any[] }>>('model/local/source/ollama', {
method: 'GET'
}).then((response) => {
if (response.code === STATUS_CODE.SUCCESS) {
setOllamaAddress(response.data?.config?.address || '')
} else {
message.error(response.msg || $t(RESPONSE_TIPS.error))
}
})
}, [])
const localModelCardClick = async () => {
const permission = checkAccess('system.devops.ai_provider.edit', accessData)
if (!permission) {
return message.warning($t('暂无权限'))
}
if (!ollamaAddress) {
router.push('/aisetting?status=unconfigure')
return
}
const modalInstance = modal.confirm({
title: $t('部署本地模型'),
content: (
<LocalAiDeploy
ref={localAiDeployRef}
onClose={() => {
modalInstance.destroy()
dumpServerPage()
}}
></LocalAiDeploy>
),
onOk: () => {
return localAiDeployRef.current?.deployLocalAIServer().then((res) => {
if (res === true) {
dumpServerPage()
}
})
},
width: 600,
okText: $t('确认'),
cancelText: $t('取消'),
closable: true,
icon: <></>
})
}
const deployDeepSeek = async (e: any) => {
e.stopPropagation()
const permission = checkAccess('system.devops.ai_provider.edit', accessData)
if (!permission) {
return message.warning($t('暂无权限'))
}
if (!ollamaAddress) {
router.push('/aisetting?status=unconfigure')
return
}
await deployLocalModel({ modelID: 'deepseek-r1' })
dumpServerPage()
}
const cardList = [
{
imgSrc: restAPIPic,
title: $t('添加 Rest 服务'),
description: $t('导入OpenAPI文档,将现有系统的API发布到APIPark。'),
click: restCardClick
},
{
imgSrc: onlineAIPic,
title: $t('添加在线 AI API'),
description: $t('添加公有云AI模型的 API Key,通过APIPark 统一调用公有云的AI模型。'),
click: aiCardClick
},
{
imgSrc: localAIPic,
title: $t('本地部署 AI 并生成 API'),
description: $t('快速在本地部署开源模型并自动生成 API。'),
click: localModelCardClick,
bottomRender: (
<span className="text-[#2196f3] text-[13px] hover:text-[#1976d2]" onClick={deployDeepSeek}>
<Icon className="align-sub mr-[5px]" icon="lsicon:lightning-filled" width="15" height="15" />
{$t('部署')} Deepseek-R1
</span>
)
}
]
return (
<>
<p>{$t('⚡您可快速通过以下方式开放API供大家使用:')}</p>
<div className="mb-[30px] pt-[25px] flex justify-between space-x-4">
{cardList.map((item, itemIndex) => (
<Card
key={itemIndex}
className="shadow-[0_5px_10px_0_rgba(0,0,0,0.05)] bg-[linear-gradient(153.41deg,rgba(244,245,255,1)_0.23%,rgba(255,255,255,1)_83.32%)] rounded-[10px] overflow-visible cursor-pointer flex-1 transition duration-500 hover:shadow-[0_5px_20px_0_rgba(0,0,0,0.15)] hover:scale-[1.05]"
classNames={{
header: 'border-b-[0px] p-[20px] pb-[10px] text-[14px] font-normal',
body: 'p-[20px] pt-[50px] pb-[50px] text-[12px] text-[#666] text-center'
}}
onClick={item.click}
>
<img src={item.imgSrc} alt="" width={60} height={60} />
<p className="text-[13px] font-bold text-black mt-[10px] mb-[10px]">{item.title}</p>
<p className="break-words mb-[10px]">{item.description}</p>
{item.bottomRender ? item.bottomRender : null}
</Card>
))}
</div>
</>
)
}
function QuickGuideContent({
changeGuideShow,
guideSections
}: {
changeGuideShow: Dispatch<SetStateAction<boolean>>
guideSections: {
title: string
items: {
title: string
description: string
link: string
}[]
}[]
}) {
return (
<div className="">
{guideSections.map((section, index) => (
<div key={index}>
<p className="flex gap-[8px] items-center text-[14px] font-bold">
<Icon icon="ic:baseline-info" width="18" height="18" className="text-theme" />
{section.title}
</p>
<div className="ml-[9px] border-[0px] border-l-[1px] my-[10px] border-dashed border-BORDER">
<div
className="grid gap-[20px] px-[20px] py-[10px] justify-start content-start"
style={{
gridTemplateColumns: 'repeat(auto-fill, minmax(300px, 0fr))',
gridAutoRows: '1fr'
}}
>
{section.items.map((item, itemIndex) => (
<Card
key={itemIndex}
title={item.title}
className="shadow-[0_5px_10px_0_rgba(0,0,0,0.05)] rounded-[10px] overflow-visible cursor-pointer w-[300px] transition duration-500 hover:shadow-[0_5px_20px_0_rgba(0,0,0,0.15)] hover:scale-[1.05]"
classNames={{
header: 'border-b-[0px] p-[20px] pb-[10px] text-[14px] font-normal',
body: 'p-[20px] pt-0 text-[12px] text-[#666]'
}}
onClick={() => window.open(item.link, '_blank')}
>
<span>{item.description}</span>
</Card>
))}
</div>
</div>
</div>
))}
<div className="flex gap-[8px] items-center">
<Icon icon="ic:baseline-info" width="18" height="18" className="text-theme" />
<div className="flex items-center w-full gap-4">
<Button
type="link"
icon={<Icon icon="ic:baseline-open-in-new" width="18" height="18" />}
iconPosition="end"
classNames={{ icon: 'h-[22px] flex items-center' }}
href="https://docs.apipark.com"
target="_blank"
className="text-[14px] font-bold px-0"
>
{$t('了解更多功能')}
</Button>
<Button
type="text"
icon={<Icon icon="ic:baseline-visibility-off" width="18" height="18" />}
onClick={() => changeGuideShow((prev) => !prev)}
classNames={{ icon: 'h-[22px] flex items-center' }}
className="text-[14px] font-bold"
>
{$t('隐藏该教程')}
</Button>
</div>
</div>
</div>
)
}
export default function GuidePage() {
const [showGuide, setShowGuide] = useState(localStorage.getItem('showGuide') !== 'false')
const [showAdvancedGuide, setShowAdvancedGuide] = useState(localStorage.getItem('showAdvancedGuide') !== 'false')
const [, forceUpdate] = useState<unknown>(null)
const { state } = useGlobalContext()
const pathname = usePathname()
const router = useRouter()
useEffect(() => {
setShowGuide(window.localStorage.getItem('showGuide') !== 'false')
setShowAdvancedGuide(window.localStorage.getItem('showAdvancedGuide') !== 'false')
}, [])
const guideSections = useMemo(
() => [
{
title: $t('快速接入 AI'),
items: [
{
title: $t('配置你的 AI 模型'),
description: $t('通过 APIPark 快速接入各种 AI 模型,使用统一的格式来调用API,并且可以随意切换模型。'),
link: 'https://docs.apipark.com/docs/system_setting/ai_model_providers'
},
{
title: $t('创建 AI 服务和 API'),
description: $t('创建 AI 类型的服务,并且你可以将 Prompt 提示词设置为一个 API,简化使用 AI 的流程。'),
link: 'https://docs.apipark.com/docs/services/ai_services'
},
{
title: $t('创建调用 Token'),
description: $t('为了安全地调用 API,你需要创建一个消费者以及Token。'),
link: 'https://docs.apipark.com/docs/consumers'
},
{
title: $t('调用'),
description: $t('现在你可以通过 Token 来调用这些 API。'),
link: 'https://docs.apipark.com/docs/call_api'
}
]
},
{
title: $t('快速接入 REST API'),
items: [
{
title: $t('创建 REST 服务和 API'),
description: $t('创建 AI 类型的服务,并且你可以将 Prompt 提示词设置为一个 API,简化使用 AI 的流程。'),
link: 'https://docs.apipark.com/docs/services/rest_services'
},
{
title: $t('创建调用 Token'),
description: $t('为了安全地调用 API,你需要创建一个消费者以及Token。'),
link: 'https://docs.apipark.com/docs/consumers'
},
{
title: $t('调用'),
description: $t('现在你可以通过 Token 来调用这些 API。'),
link: 'https://docs.apipark.com/docs/call_api'
}
]
},
{
title: $t('仪表盘'),
items: [
{
title: $t('统计 API 调用情况'),
description: $t('仪表盘中提供了多种统计图表,帮助我们了解 API 的运行情况。'),
link: 'https://docs.apipark.com/docs/analysis'
}
]
}
],
[state.language]
)
const advanceGuideSections = useMemo(
() => [
{
title: $t('核心功能'),
items: [
{
title: $t('账号与角色'),
description: $t('邀请你的团队成员加入 APIPark,共同管理和调用 API。'),
link: 'https://docs.apipark.com/docs/system_setting/account_role'
},
{
title: $t('团队'),
description: $t(
'团队中包含了人员、消费者和服务,不同团队之间的消费者和服务数据是隔离的,可用于管理企业内部不同的部门/项目组/团队。'
),
link: 'https://docs.apipark.com/docs/teams'
},
{
title: $t('服务'),
description: $t('服务内包含一组 API,并且可以发布到 API 市场被其他团队使用。'),
link: 'https://docs.apipark.com/docs/category/-%E6%9C%8D%E5%8A%A1'
}
]
},
{
title: $t('权限管理'),
items: [
{
title: $t('订阅服务'),
description: $t(
'如果需要调用某个服务的 API,需要先订阅该服务,并且等待提供服务的团队审核后才可发起 API 请求。'
),
link: 'https://docs.apipark.com/docs/developer_portal'
},
{
title: $t('审核订阅申请'),
description: $t('提供服务的团队可以审核来自其他团队的订阅申请,审核通过后的消费者才可发起 API 请求。'),
link: 'https://docs.apipark.com/docs/services/review_consumers'
}
]
},
{
title: $t('集成'),
items: [
{
title: $t('日志'),
description: $t('APIPark 提供详尽的 API 调用日志,帮助企业监控、分析和审计 API 的运行状况。'),
link: 'https://docs.apipark.com/docs/system_setting/log/'
}
]
}
],
[state.language]
)
useEffect(() => {
window.localStorage.setItem('showGuide', showGuide.toString())
}, [showGuide])
useEffect(() => {
window.localStorage.setItem('showAdvancedGuide', showAdvancedGuide.toString())
}, [showAdvancedGuide])
useEffect(() => {
if (pathname === '/guide') {
router.replace('/guide/page')
}
}, [pathname, router])
useEffect(() => {
forceUpdate({})
}, [state.language])
return (
<div className="flex flex-col flex-1 h-full overflow-auto">
<div className="border-[0px] mr-PAGE_INSIDE_X pt-[30px] pl-[40px]">
<div className="mb-[30px]">
<div className="flex justify-between mb-[20px] items-center">
<div className="flex items-center gap-[8px] text-theme text-[26px]">
<span>👋</span>
<span>{$t('Hello!欢迎使用 APIPark')}</span>
</div>
</div>
<div className="flex flex-col gap-[8px]">
<p>
<span className="font-bold">🦄 APIPark </span>
{$t(
'是开源的一站式 AI 网关与 API 门户,可快速接入 OpenAI/DeepSeek 等各类 AI 模型,通过统一请求格式避免模型切换对业务造成影响,提供企业级 API 安全防护(鉴权/限流/敏感词过滤)与实时用量监控,支持团队内 API 共享协作,管理接口订阅授权并保证您的API安全。'
)}
</p>
<p>
{$t('✨ 欢迎在 Github 为我们 Star 或提供产品反馈意见。')}
<span className="font-bold">
{$t('点击这里')}
<span className="align-middle leading-[16px]">
&nbsp;
<Icon icon="pajamas:arrow-right" width="16" height="16" />
&nbsp;
</span>
<a className="align-text-top" href="https://github.com/APIParkLab/APIPark" target="_blank">
<img src="https://img.shields.io/github/stars/APIParkLab/APIPark?style=social" alt="" />
</a>
<span className="align-middle leading-[16px]">
&nbsp;
<Icon icon="pajamas:arrow-right" width="16" height="16" />
&nbsp;
</span>
{$t('点击')}
&nbsp;
<span className="align-middle leading-[16px]">
<Icon icon="emojione:star" width="16" height="16" />
</span>
Star
</span>
</p>
</div>
</div>
</div>
<div className="w-full pr-PAGE_INSIDE_X pb-PAGE_INSIDE_B pl-[40px]">
<AIModelGuide />
<div className="flex flex-col gap-[15px] pb-PAGE_INSIDE_B">
{showGuide && (
<Collapse
size="large"
expandIconPosition="end"
defaultActiveKey={['1']}
className="bg-[linear-gradient(153.41deg,rgba(244,245,255,1)_0.23%,rgba(255,255,255,1)_83.32%)] rounded-[10px] [&>.ant-collapse-item>.ant-collapse-content]:bg-transparent"
items={[
{
key: '1',
label: (
<div className="">
<p className="text-[14px] mb-[10px] flex gap-[8px] items-center font-bold">
<span>🚀</span>
<span>{`${$t('快速入门')}`}</span>{' '}
</p>
<p className="text-[12px]">{$t('我们提供了一些任务来帮你快速了解 APIPark')}</p>
</div>
),
children: <QuickGuideContent changeGuideShow={setShowGuide} guideSections={guideSections} />
}
]}
/>
)}
{showAdvancedGuide && (
<Collapse
size="large"
expandIconPosition="end"
defaultActiveKey={['1']}
className="bg-[linear-gradient(153.41deg,rgba(244,245,255,1)_0.23%,rgba(255,255,255,1)_83.32%)] rounded-[10px] [&>.ant-collapse-item>.ant-collapse-content]:bg-transparent"
items={[
{
key: '1',
label: (
<div className="">
<p className="text-[14px] mb-[10px] flex gap-[8px] items-center font-bold">
<span>🏍</span>
<span>{`${$t('进阶教程')}`}</span>{' '}
</p>
<p className="text-[12px]">{$t('了解 APIPark 如何更好地管理 API 和 AI')}</p>
</div>
),
children: <QuickGuideContent changeGuideShow={setShowAdvancedGuide} guideSections={advanceGuideSections} />
}
]}
/>
)}
</div>
</div>
</div>
)
}

Some files were not shown because too many files have changed in this diff Show More