merge
@@ -45,19 +45,18 @@ body:
|
||||
label: Steps to Reproduce
|
||||
description: Share the steps you took so that we can reproduce the issue. Reports without proper steps details will likely be closed.
|
||||
placeholder: |
|
||||
1. Run apinto via the Docker image.
|
||||
2. Create a Route with the Admin API.
|
||||
3. Try configuring ...
|
||||
4. ...
|
||||
1. Run APIPark via the Docker image.
|
||||
2. Try configuring ...
|
||||
3. ...
|
||||
validations:
|
||||
required: true
|
||||
required: false
|
||||
- type: textarea
|
||||
id: environment
|
||||
attributes:
|
||||
label: Environment
|
||||
description: Share your environment details. Reports without proper environment details will likely be closed.
|
||||
value: |
|
||||
- APINTO Dashboard version (run `apinto dashboard version`):
|
||||
- APINTO Dashboard version:
|
||||
- Operating system (run `uname -a`):
|
||||
validations:
|
||||
required: true
|
||||
@@ -1,5 +1,5 @@
|
||||
name: "Feature Request"
|
||||
description: Suggest an enhancement to APINTO.
|
||||
description: Suggest an enhancement to APIPark.
|
||||
title: "feat: As a user, I want to ..., so that ..."
|
||||
body:
|
||||
- type: markdown
|
||||
@@ -20,4 +20,4 @@ body:
|
||||
placeholder: |
|
||||
As a user, I want to ..., so that...
|
||||
validations:
|
||||
required: true
|
||||
required: true
|
||||
|
||||
@@ -25,7 +25,7 @@ body:
|
||||
label: Environment
|
||||
description: Share your environment details. Reports without proper environment details will likely be closed.
|
||||
value: |
|
||||
- APIPark version (run `apinto dashboard version`):
|
||||
- APIPark version:
|
||||
- Operating system (run `uname -a`):
|
||||
validations:
|
||||
required: true
|
||||
@@ -25,7 +25,7 @@ jobs:
|
||||
echo "Build frontend..."
|
||||
cd ./frontend && pnpm run build
|
||||
- name: upload frontend release
|
||||
uses: actions/upload-artifact@v2
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: frontend-package
|
||||
path: frontend/dist
|
||||
@@ -41,7 +41,7 @@ jobs:
|
||||
- name: Checkout #Checkout代码
|
||||
uses: actions/checkout@v3
|
||||
- name: download frontend release
|
||||
uses: actions/download-artifact@v2
|
||||
uses: actions/download-artifact@v3
|
||||
with:
|
||||
name: frontend-package
|
||||
path: frontend/dist
|
||||
@@ -71,7 +71,7 @@ jobs:
|
||||
- uses: actions/checkout@v3
|
||||
|
||||
- name: download frontend release
|
||||
uses: actions/download-artifact@v2
|
||||
uses: actions/download-artifact@v3
|
||||
with:
|
||||
name: frontend-package
|
||||
path: frontend/dist
|
||||
|
||||
@@ -3,4 +3,3 @@
|
||||
/config.yml
|
||||
/build/
|
||||
/apipark
|
||||
/aoplatform
|
||||
|
||||
@@ -0,0 +1,98 @@
|
||||
variables:
|
||||
PATH: /opt/go-1.21/go/bin/:/opt/node/node/bin/:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
|
||||
GOROOT: /opt/go-1.21/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
|
||||
- prefix
|
||||
- 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"
|
||||
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代码\"}}" \
|
||||
https://open.feishu.cn/open-apis/bot/v2/hook/1c334752-2874-41a1-8f1b-3060f2d46b6c
|
||||
|
||||
prebuild:
|
||||
stage: prefix
|
||||
rules:
|
||||
- if: $CI_COMMIT_BRANCH == "main"
|
||||
script:
|
||||
- echo "prebuild"
|
||||
- chmod +x ./scripts/prefix.sh
|
||||
- ./scripts/prefix.sh
|
||||
|
||||
builder:
|
||||
stage: build
|
||||
rules:
|
||||
- if: $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"
|
||||
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"
|
||||
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}\"}}" \
|
||||
https://open.feishu.cn/open-apis/bot/v2/hook/c3672932-4dfa-4989-8023-0128bae59338
|
||||
when: on_success
|
||||
failure:
|
||||
stage: webhook
|
||||
rules:
|
||||
- if: $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}\"}}" \
|
||||
https://open.feishu.cn/open-apis/bot/v2/hook/c3672932-4dfa-4989-8023-0128bae59338
|
||||
when: on_failure
|
||||
@@ -1,7 +1,7 @@
|
||||

|
||||

|
||||
|
||||
<p align="center">
|
||||
English
|
||||
<a href="/README.md">English</a>
|
||||
|
|
||||
<a href="/readme/readme-jp.md">日本語</a>
|
||||
|
|
||||
@@ -61,104 +61,94 @@ curl -sSO https://download.apipark.com/install/quick-start.sh ; bash quick-sta
|
||||
<table>
|
||||
<tr>
|
||||
<th>
|
||||
Connect to 100+ major models from all mainstream AI Companies
|
||||
Connect to 100+ AI models
|
||||
</th>
|
||||
<th>
|
||||
Standardize all AI API call formats, with no additional adaptation work required
|
||||
Unified API to use all AI
|
||||
</th>
|
||||
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td width="50%">
|
||||
<img src="https://apipark.com/wp-content/uploads/2024/08/%E9%A1%B5%E9%9D%A2-1.png" />
|
||||
The API Service Plaza is one of APIPark’s core features, aiming to solve the problem of fragmented and chaotic internal API management in enterprises. Through the API Service Plaza, enterprises can showcase all API services on a unified platform, allowing different departments and teams to easily find and use the required API services.
|
||||
<img src="https://apipark.com/wp-content/uploads/2024/10/AI-Gateway.png" />
|
||||
</td>
|
||||
<td width="50%">
|
||||
<img src="https://apipark.com/wp-content/uploads/2024/10/Unified-API.png" />
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<th>
|
||||
Transform AI & Prompt to REST API
|
||||
</th>
|
||||
<th>
|
||||
API Developer Portal
|
||||
</th>
|
||||
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td width="50%">
|
||||
<img src="https://apipark.com/wp-content/uploads/2024/10/Prompt-template.png" />
|
||||
</td>
|
||||
<td width="50%">
|
||||
<img src="https://apipark.com/wp-content/uploads/2024/10/developer-portal.png" />
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<th>
|
||||
High Performance
|
||||
</th>
|
||||
<th>
|
||||
Manage API lifecycle
|
||||
</th>
|
||||
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td width="50%">
|
||||
<img src="https://apipark.com/wp-content/uploads/2024/10/hyper-performance.png" />
|
||||
</td>
|
||||
<td width="50%">
|
||||
<img src="https://apipark.com/wp-content/uploads/2024/08/Life-Cycle.png" />
|
||||
The full API lifecycle management feature helps enterprises standardize the API management process, manage API traffic forwarding and load balancing, and oversee all API versions published externally. This improves API quality and maintainability, enabling efficient development and stable operation to support rapid business growth and innovation.
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<th>
|
||||
Combine AI models and prompt templates to form new AI APIs
|
||||
</th>
|
||||
<th>
|
||||
Switching AI models or modifying prompts won’t affect your APP or microservices
|
||||
</th>
|
||||
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td width="50%">
|
||||
<img src="https://apipark.com/wp-content/uploads/2024/08/%E9%A1%B5%E9%9D%A2-1.png" />
|
||||
The API Service Plaza is one of APIPark’s core features, aiming to solve the problem of fragmented and chaotic internal API management in enterprises. Through the API Service Plaza, enterprises can showcase all API services on a unified platform, allowing different departments and teams to easily find and use the required API services.
|
||||
</td>
|
||||
<td width="50%">
|
||||
<img src="https://apipark.com/wp-content/uploads/2024/08/Life-Cycle.png" />
|
||||
The full API lifecycle management feature helps enterprises standardize the API management process, manage API traffic forwarding and load balancing, and oversee all API versions published externally. This improves API quality and maintainability, enabling efficient development and stable operation to support rapid business growth and innovation.
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<th>
|
||||
Centrally manage and display all AI / REST APIs
|
||||
</th>
|
||||
<th>
|
||||
Cover the entire API lifecycle from design, release, operation, to deprecation
|
||||
</th>
|
||||
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td width="50%">
|
||||
<img src="https://apipark.com/wp-content/uploads/2024/08/%E9%A1%B5%E9%9D%A2-1.png" />
|
||||
The API Service Plaza is one of APIPark’s core features, aiming to solve the problem of fragmented and chaotic internal API management in enterprises. Through the API Service Plaza, enterprises can showcase all API services on a unified platform, allowing different departments and teams to easily find and use the required API services.
|
||||
</td>
|
||||
<td width="50%">
|
||||
<img src="https://apipark.com/wp-content/uploads/2024/08/Life-Cycle.png" />
|
||||
The full API lifecycle management feature helps enterprises standardize the API management process, manage API traffic forwarding and load balancing, and oversee all API versions published externally. This improves API quality and maintainability, enabling efficient development and stable operation to support rapid business growth and innovation.
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<th>
|
||||
Manage multiple tenants, ensuring data isolation and security
|
||||
Review subscription before allowing API requests
|
||||
</th>
|
||||
<th>
|
||||
API resources require approval before usage
|
||||
Manage subscriber
|
||||
</th>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td width="50%">
|
||||
<img src="https://apipark.com/wp-content/uploads/2024/08/Multi-tenant.png" />
|
||||
The multi-tenant management feature allows enterprises to manage multiple tenants on the same platform. Each tenant can have independent resources, users, and permission settings, ensuring data and operation isolation, improving resource utilization efficiency, and simplifying management.
|
||||
</td>
|
||||
<td width="50%">
|
||||
<img src="https://apipark.com/wp-content/uploads/2024/08/Application.png" />
|
||||
APIPark provides a process approval feature for all API resources, preventing violations or unauthorized API usage. Callers must apply for API resources and wait for the service provider's approval before officially using the API.
|
||||
</td>
|
||||
<td width="50%">
|
||||
<img src="https://apipark.com/wp-content/uploads/2024/08/Multi-tenant.png" />
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<th>
|
||||
Use detailed call logs to trace API access at any time
|
||||
Logging
|
||||
</th>
|
||||
<th>
|
||||
Comprehensive statistical reports*
|
||||
Analysis
|
||||
</th>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td width="50%">
|
||||
<img src="https://apipark.com/wp-content/uploads/2024/08/Chart-1.png" />
|
||||
The API call log feature provides enterprises with comprehensive logging capabilities, recording all relevant information for each API call. These logs allow enterprises to quickly trace and troubleshoot API call issues, ensuring system stability and data security.
|
||||
</td>
|
||||
<td width="50%">
|
||||
<img src="https://apipark.com/wp-content/uploads/2024/08/Chart.png" />
|
||||
Through historical call data analysis, APIPark can display long-term API call trends and performance changes, helping enterprises perform preventative maintenance before problems arise.
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
|
||||
@@ -21,8 +21,10 @@ type Provider struct {
|
||||
Help Help `json:"help" yaml:"help"`
|
||||
SupportedModelTypes []string `json:"supported_model_types" yaml:"supported_model_types"`
|
||||
ProviderCredentialSchema ProviderCredentialSchema `json:"provider_credential_schema" yaml:"provider_credential_schema"`
|
||||
Default map[string]string `json:"default"`
|
||||
Address string `json:"address"`
|
||||
Default map[string]string `json:"default" yaml:"default"`
|
||||
Address string `json:"address" yaml:"address"`
|
||||
Recommend bool `json:"recommend" yaml:"recommend"`
|
||||
Sort int `json:"sort" yaml:"sort"`
|
||||
}
|
||||
|
||||
type ProviderCredentialSchema struct {
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
package model_runtime
|
||||
|
||||
import "github.com/eolinker/eosc"
|
||||
import (
|
||||
"github.com/eolinker/eosc"
|
||||
)
|
||||
|
||||
var (
|
||||
defaultManager = NewManager()
|
||||
@@ -27,6 +29,13 @@ func (m *Manager) Del(name string) {
|
||||
}
|
||||
|
||||
func (m *Manager) List() []IProvider {
|
||||
//list := m.providers.List()
|
||||
//sort.Slice(list, func(i, j int) bool {
|
||||
// if list[i].Sort() == list[j].Sort() {
|
||||
// return list[i].ID() < list[j].ID()
|
||||
// }
|
||||
// return list[i].Sort() < list[j].Sort()
|
||||
//})
|
||||
return m.providers.List()
|
||||
}
|
||||
|
||||
|
||||
@@ -38,3 +38,5 @@ provider_credential_schema:
|
||||
zh_Hans: 在此输入您的 API URL
|
||||
en_US: Enter your API URL
|
||||
address: https://api.anthropic.com
|
||||
recommend: true
|
||||
sort: 2
|
||||
@@ -1,6 +1,6 @@
|
||||
provider: bedrock
|
||||
label:
|
||||
en_US: AWS
|
||||
en_US: AWS Bedrock
|
||||
description:
|
||||
en_US: AWS Bedrock's models.
|
||||
icon_small:
|
||||
@@ -87,4 +87,6 @@ provider_credential_schema:
|
||||
placeholder:
|
||||
en_US: A model you have access to (e.g. amazon.titan-text-lite-v1) for validation.
|
||||
zh_Hans: 为了进行验证,请输入一个您可用的模型名称 (例如:amazon.titan-text-lite-v1)
|
||||
address: https://bedrock-runtime.amazonaws.com
|
||||
address: https://bedrock-runtime.amazonaws.com
|
||||
sort: 4
|
||||
recommend: true
|
||||
@@ -1,3 +1,3 @@
|
||||
<svg width="60" height="50" viewBox="0 0 60 50" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;">
|
||||
<svg width="50" height="50" viewBox="0 0 50 50" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;">
|
||||
<path id="path" d="M55.613,3.471C55.018,3.179 54.761,3.735 54.413,4.018C54.294,4.109 54.193,4.227 54.092,4.337C53.222,5.266 52.206,5.876 50.878,5.803C48.936,5.694 47.278,6.305 45.813,7.79C45.501,5.959 44.466,4.865 42.891,4.164C42.067,3.799 41.233,3.435 40.656,2.642C40.253,2.077 40.143,1.448 39.942,0.829C39.814,0.455 39.685,0.073 39.255,0.009C38.788,-0.064 38.605,0.328 38.421,0.656C37.689,1.995 37.405,3.471 37.432,4.965C37.496,8.327 38.916,11.006 41.737,12.91C42.058,13.129 42.14,13.347 42.039,13.666C41.847,14.323 41.618,14.96 41.416,15.616C41.288,16.035 41.096,16.127 40.647,15.944C39.099,15.297 37.762,14.341 36.58,13.184C34.575,11.243 32.761,9.102 30.499,7.425C29.968,7.033 29.436,6.669 28.887,6.323C26.579,4.082 29.189,2.241 29.794,2.022C30.425,1.795 30.013,1.011 27.971,1.02C25.928,1.029 24.06,1.713 21.679,2.624C21.331,2.761 20.964,2.861 20.589,2.943C18.427,2.533 16.183,2.441 13.838,2.706C9.424,3.198 5.898,5.284 3.306,8.847C0.191,13.129 -0.541,17.994 0.356,23.069C1.3,28.417 4.029,32.845 8.224,36.308C12.575,39.897 17.584,41.656 23.3,41.319C26.771,41.118 30.636,40.654 34.996,36.964C36.095,37.51 37.249,37.729 39.163,37.893C40.638,38.03 42.058,37.82 43.157,37.592C44.878,37.228 44.759,35.633 44.137,35.342C39.09,32.991 40.198,33.948 39.191,33.173C41.755,30.139 45.62,26.987 47.132,16.773C47.251,15.962 47.15,15.452 47.132,14.796C47.122,14.395 47.214,14.241 47.672,14.195C48.936,14.049 50.163,13.703 51.29,13.083C54.56,11.298 55.878,8.364 56.19,4.847C56.236,4.309 56.181,3.753 55.613,3.471ZM27.119,35.123C22.228,31.278 19.856,30.012 18.876,30.066C17.96,30.121 18.125,31.169 18.326,31.852C18.537,32.526 18.812,32.991 19.196,33.583C19.462,33.975 19.645,34.558 18.931,34.996C17.356,35.971 14.617,34.667 14.489,34.604C11.301,32.727 8.636,30.249 6.758,26.859C4.945,23.597 3.892,20.099 3.718,16.363C3.672,15.461 3.938,15.142 4.835,14.979C6.017,14.76 7.235,14.714 8.416,14.887C13.408,15.616 17.658,17.848 21.221,21.384C23.254,23.397 24.793,25.802 26.377,28.153C28.062,30.649 29.876,33.028 32.184,34.977C32.999,35.661 33.649,36.18 34.272,36.563C32.395,36.772 29.262,36.818 27.119,35.123ZM29.464,20.044C29.464,19.643 29.784,19.325 30.187,19.325C30.279,19.325 30.361,19.343 30.435,19.37C30.535,19.407 30.627,19.461 30.7,19.543C30.828,19.671 30.902,19.853 30.902,20.044C30.902,20.445 30.581,20.764 30.178,20.764C29.775,20.764 29.464,20.445 29.464,20.044ZM36.745,23.78C36.278,23.971 35.811,24.135 35.362,24.153C34.666,24.19 33.906,23.907 33.494,23.561C32.853,23.023 32.395,22.723 32.202,21.784C32.12,21.384 32.166,20.764 32.239,20.409C32.404,19.643 32.221,19.151 31.68,18.705C31.241,18.34 30.682,18.24 30.068,18.24C29.839,18.24 29.629,18.14 29.473,18.058C29.216,17.93 29.006,17.612 29.207,17.22C29.271,17.092 29.583,16.783 29.656,16.728C30.49,16.254 31.451,16.409 32.34,16.764C33.164,17.101 33.787,17.721 34.684,18.596C35.6,19.652 35.765,19.944 36.287,20.737C36.7,21.356 37.075,21.994 37.331,22.723C37.487,23.179 37.286,23.552 36.745,23.78Z" style="fill:rgb(77,107,254);fill-rule:nonzero;"/>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 3.2 KiB After Width: | Height: | Size: 3.2 KiB |
@@ -0,0 +1,23 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
|
||||
<svg version="1.1" id="_x32_" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
width="800px" height="800px" viewBox="0 0 512 512" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
<![CDATA[
|
||||
.st0{fill:#000000;}
|
||||
]]>
|
||||
</style>
|
||||
<g>
|
||||
<path class="st0" d="M485.016,220.691c12.422-8.422,22.188-57.266,7.797-87.016c-26.859,28.125-80.109,49.859-142,72.922
|
||||
c-64.656,24.078-71.531,41.859-94.813,42.172c-23.297-0.313-30.156-18.094-94.813-42.172c-61.891-23.063-115.141-44.797-142-72.922
|
||||
c-14.406,29.75-4.625,78.594,7.781,87.016C13.484,214.332,0,210.051,0,210.051s3.813,68.172,33.25,106.563
|
||||
c24.953,32.547,86.984,72.906,145.828,58.828c62.219-14.875,62.344-41.406,76.922-41.266c14.563-0.141,14.688,26.391,76.906,41.266
|
||||
c58.844,14.078,120.875-26.281,145.844-58.828C508.156,278.223,512,210.051,512,210.051S498.5,214.332,485.016,220.691z
|
||||
M131.438,318.848c-25.109-11.641-46.063-37.422-43.188-73.891c12.813,5.078,48.844,9.406,69.094,17.281
|
||||
c23,8.953,46.031,23.984,48.922,41.25C205.313,317.879,170.75,337.066,131.438,318.848z M380.563,318.848
|
||||
c-39.344,18.219-73.875-0.969-74.828-15.359c2.891-17.266,25.891-32.297,48.922-41.25c20.25-7.875,56.281-12.203,69.094-17.281
|
||||
C426.625,281.426,405.656,307.207,380.563,318.848z"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.4 KiB |
@@ -0,0 +1,23 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
|
||||
<svg version="1.1" id="_x32_" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
width="800px" height="800px" viewBox="0 0 512 512" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
<![CDATA[
|
||||
.st0{fill:#000000;}
|
||||
]]>
|
||||
</style>
|
||||
<g>
|
||||
<path class="st0" d="M485.016,220.691c12.422-8.422,22.188-57.266,7.797-87.016c-26.859,28.125-80.109,49.859-142,72.922
|
||||
c-64.656,24.078-71.531,41.859-94.813,42.172c-23.297-0.313-30.156-18.094-94.813-42.172c-61.891-23.063-115.141-44.797-142-72.922
|
||||
c-14.406,29.75-4.625,78.594,7.781,87.016C13.484,214.332,0,210.051,0,210.051s3.813,68.172,33.25,106.563
|
||||
c24.953,32.547,86.984,72.906,145.828,58.828c62.219-14.875,62.344-41.406,76.922-41.266c14.563-0.141,14.688,26.391,76.906,41.266
|
||||
c58.844,14.078,120.875-26.281,145.844-58.828C508.156,278.223,512,210.051,512,210.051S498.5,214.332,485.016,220.691z
|
||||
M131.438,318.848c-25.109-11.641-46.063-37.422-43.188-73.891c12.813,5.078,48.844,9.406,69.094,17.281
|
||||
c23,8.953,46.031,23.984,48.922,41.25C205.313,317.879,170.75,337.066,131.438,318.848z M380.563,318.848
|
||||
c-39.344,18.219-73.875-0.969-74.828-15.359c2.891-17.266,25.891-32.297,48.922-41.25c20.25-7.875,56.281-12.203,69.094-17.281
|
||||
C426.625,281.426,405.656,307.207,380.563,318.848z"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.4 KiB |
@@ -0,0 +1,30 @@
|
||||
provider: fakegpt
|
||||
label:
|
||||
en_US: FakeGPT
|
||||
description:
|
||||
en_US: FakeGPT is a fake model provider that does not actually connect to any model service. It is useful for testing and development purposes.
|
||||
icon_small:
|
||||
en_US: icon_s_en.svg
|
||||
icon_large:
|
||||
en_US: icon_l_en.svg
|
||||
background: "#FCFDFF"
|
||||
help:
|
||||
title:
|
||||
en_US: Get your Access Details from Google
|
||||
url:
|
||||
en_US: https://apipark.com
|
||||
supported_model_types:
|
||||
- llm
|
||||
- text-embedding
|
||||
configurate_methods:
|
||||
- predefined-model
|
||||
provider_credential_schema:
|
||||
credential_form_schemas:
|
||||
- variable: apikey
|
||||
label:
|
||||
en_US: API Key
|
||||
type: secret-input
|
||||
required: true
|
||||
placeholder:
|
||||
en_US: Enter your API key
|
||||
address: https://apipark.com
|
||||
@@ -0,0 +1,51 @@
|
||||
model: fakegpt-1.0
|
||||
label:
|
||||
en_US: FakeGPT 1.0
|
||||
model_type: llm
|
||||
features:
|
||||
- agent-thought
|
||||
- vision
|
||||
model_properties:
|
||||
mode: chat
|
||||
context_size: 200000
|
||||
parameter_rules:
|
||||
- name: max_tokens
|
||||
use_template: max_tokens
|
||||
required: true
|
||||
type: int
|
||||
default: 4096
|
||||
min: 1
|
||||
max: 4096
|
||||
help:
|
||||
zh_Hans: 停止前生成的最大令牌数。
|
||||
en_US: The maximum number of tokens to generate before stopping.
|
||||
- name: temperature
|
||||
use_template: temperature
|
||||
required: false
|
||||
type: float
|
||||
default: 1
|
||||
min: 0.0
|
||||
max: 1.0
|
||||
help:
|
||||
zh_Hans: 生成内容的随机性。
|
||||
en_US: The amount of randomness injected into the response.
|
||||
- name: top_p
|
||||
required: false
|
||||
type: float
|
||||
default: 0.999
|
||||
min: 0.000
|
||||
max: 1.000
|
||||
help:
|
||||
zh_Hans: 在核采样中,按概率递减顺序计算每个后续标记的所有选项的累积分布,并在达到 top_p 指定的特定概率时将其切断。您应该更改温度或top_p,但不能同时更改两者。
|
||||
en_US: In nucleus sampling, computes the cumulative distribution over all the options for each subsequent token in decreasing probability order and cuts it off once it reaches a particular probability specified by top_p. You should alter either temperature or top_p, but not both.
|
||||
- name: top_k
|
||||
required: false
|
||||
type: int
|
||||
default: 0
|
||||
min: 0
|
||||
# tip docs from aws has error, max value is 500
|
||||
max: 500
|
||||
help:
|
||||
zh_Hans: 对于每个后续标记,仅从前 K 个选项中进行采样。使用 top_k 删除长尾低概率响应。
|
||||
en_US: Only sample from the top K options for each subsequent token. Use top_k to remove long tail low probability responses.
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<svg width="638" height="315" viewBox="0 0 638 315" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<svg width="315" height="315" viewBox="0 0 638 315" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M318.563 221.755C300.863 221.755 284.979 211.247 278.206 194.978L196.549 0H244.342L318.842 178.361L393.273 0H441.066L358.92 195.048C352.112 211.247 336.263 221.755 318.563 221.755Z" fill="#6720FF"/>
|
||||
<path d="M425.111 314.933C407.481 314.933 391.667 304.494 384.824 288.366C377.947 272.097 381.507 253.524 393.936 240.921L542.657 90.2803L561.229 134.094L425.076 271.748L619.147 270.666L637.72 314.479L425.146 315.003L425.076 314.933H425.111Z" fill="#6720FF"/>
|
||||
<path d="M0 314.408L18.5727 270.595L212.643 271.677L76.525 133.988L95.0977 90.1748L243.819 240.816C256.247 253.384 259.843 272.026 252.93 288.26C246.088 304.424 230.203 314.827 212.643 314.827L0.0698221 314.339L0 314.408Z" fill="#6720FF"/>
|
||||
|
||||
|
Before Width: | Height: | Size: 815 B After Width: | Height: | Size: 815 B |
@@ -1,6 +1,6 @@
|
||||
provider: google
|
||||
label:
|
||||
en_US: Google
|
||||
en_US: Google Gemini
|
||||
description:
|
||||
en_US: Google's Gemini model.
|
||||
zh_Hans: 谷歌提供的 Gemini 模型.
|
||||
@@ -38,4 +38,6 @@ provider_credential_schema:
|
||||
placeholder:
|
||||
zh_Hans: 在此输入您的 API Base, 如:https://api.google.com
|
||||
en_US: Enter your API Base, e.g. https://api.google.com
|
||||
address: https://generativelanguage.googleapis.com
|
||||
address: https://generativelanguage.googleapis.com
|
||||
recommend: true
|
||||
sort: 3
|
||||
@@ -30,4 +30,4 @@ provider_credential_schema:
|
||||
placeholder:
|
||||
zh_Hans: 在此输入您的 API Key
|
||||
en_US: Enter your API Key
|
||||
address: https://api.openai.com
|
||||
address: https://api.groq.com
|
||||
@@ -27,4 +27,6 @@ provider_credential_schema:
|
||||
placeholder:
|
||||
zh_Hans: 在此输入您的 API Key
|
||||
en_US: Enter your API Key
|
||||
address: https://api.minimax.chat
|
||||
address: https://api.minimax.chat
|
||||
recommend: true
|
||||
sort: 5
|
||||
@@ -1,6 +1,6 @@
|
||||
<?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="90px" height="82px" viewBox="0 0 90 82" enable-background="new 0 0 90 82" xml:space="preserve"> <image id="image0" width="90" height="82" x="0" y="0"
|
||||
<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="82px" height="82px" viewBox="0 0 82 82" enable-background="new 0 0 90 82" xml:space="preserve"> <image id="image0" width="90" height="82" x="0" y="0"
|
||||
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFoAAABSCAYAAADU+8NvAAAAIGNIUk0AAHomAACAhAAA+gAAAIDo
|
||||
AAB1MAAA6mAAADqYAAAXcJy6UTwAAAAGYktHRAD/AP8A/6C9p5MAAAFqelRYdFJhdyBwcm9maWxl
|
||||
IHR5cGUgeG1wAAA4jZ1TW26EMAz89yl6hGA7NhyHkuSvUj97/I4DXV7brlQidsGxZ8YTQ18fn/QW
|
||||
|
||||
|
Before Width: | Height: | Size: 9.1 KiB After Width: | Height: | Size: 9.1 KiB |
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 10 KiB |
@@ -31,4 +31,6 @@ provider_credential_schema:
|
||||
placeholder:
|
||||
zh_Hans: 在此输入您的 API Key
|
||||
en_US: Enter your API Key
|
||||
address: https://api.moonshot.cn
|
||||
address: https://api.moonshot.cn
|
||||
recommend: true
|
||||
sort: 6
|
||||
@@ -1,4 +1,4 @@
|
||||
<svg width="32" height="36" viewBox="0 0 32 36" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<svg width="36" height="36" viewBox="0 0 32 36" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M2 0C0.895431 0 0 0.895432 0 2V29.1891C0 30.2937 0.895433 31.1891 2 31.1891H5.51171L16.0608 35.1377C16.7145 35.3824 17.4114 34.8991 17.4114 34.2012V11.3669C17.4114 10.533 16.894 9.78665 16.1131 9.49405L5.51171 5.52152H25.58V31.1891H29.0917C30.1963 31.1891 31.0917 30.2937 31.0917 29.1891V2C31.0917 0.895431 30.1963 0 29.0917 0H2ZM14.6022 23.7351C15.0558 23.956 15.4239 23.6812 15.4239 23.1185C15.4239 22.5557 15.0558 21.9204 14.6022 21.6995C14.1486 21.4775 13.7804 21.7545 13.7804 22.3161C13.7804 22.8777 14.1486 23.513 14.6022 23.7351Z" fill="white"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M2 0C0.895431 0 0 0.895432 0 2V29.1891C0 30.2937 0.895433 31.1891 2 31.1891H5.51171L16.0608 35.1377C16.7145 35.3824 17.4114 34.8991 17.4114 34.2012V11.3669C17.4114 10.533 16.894 9.78665 16.1131 9.49405L5.51171 5.52152H25.58V31.1891H29.0917C30.1963 31.1891 31.0917 30.2937 31.0917 29.1891V2C31.0917 0.895431 30.1963 0 29.0917 0H2ZM14.6022 23.7351C15.0558 23.956 15.4239 23.6812 15.4239 23.1185C15.4239 22.5557 15.0558 21.9204 14.6022 21.6995C14.1486 21.4775 13.7804 21.7545 13.7804 22.3161C13.7804 22.8777 14.1486 23.513 14.6022 23.7351Z" fill="url(#paint0_linear_1473_97)"/>
|
||||
<defs>
|
||||
|
||||
|
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB |
@@ -1,3 +1,3 @@
|
||||
<svg width="100" height="22" viewBox="0 0 567 376" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<svg width="22" height="22" viewBox="0 0 567 376" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M58.0366 161.868C58.0366 161.868 109.261 86.2912 211.538 78.4724V51.053C98.2528 60.1511 0.152344 156.098 0.152344 156.098C0.152344 156.098 55.7148 316.717 211.538 331.426V302.282C97.1876 287.896 58.0366 161.868 58.0366 161.868ZM211.538 244.32V271.013C125.114 255.603 101.125 165.768 101.125 165.768C101.125 165.768 142.621 119.799 211.538 112.345V141.633C211.486 141.633 211.449 141.617 211.406 141.617C175.235 137.276 146.978 171.067 146.978 171.067C146.978 171.067 162.816 227.949 211.538 244.32ZM211.538 0.47998V51.053C214.864 50.7981 218.189 50.5818 221.533 50.468C350.326 46.1273 434.243 156.098 434.243 156.098C434.243 156.098 337.861 273.296 237.448 273.296C228.245 273.296 219.63 272.443 211.538 271.009V302.282C218.695 303.201 225.903 303.667 233.119 303.675C326.56 303.675 394.134 255.954 459.566 199.474C470.415 208.162 514.828 229.299 523.958 238.55C461.745 290.639 316.752 332.626 234.551 332.626C226.627 332.626 219.018 332.148 211.538 331.426V375.369H566.701V0.47998H211.538ZM211.538 112.345V78.4724C214.829 78.2425 218.146 78.0672 221.533 77.9602C314.148 75.0512 374.909 157.548 374.909 157.548C374.909 157.548 309.281 248.693 238.914 248.693C228.787 248.693 219.707 247.065 211.536 244.318V141.631C247.591 145.987 254.848 161.914 276.524 198.049L324.737 157.398C324.737 157.398 289.544 111.243 230.219 111.243C223.768 111.241 217.597 111.696 211.538 112.345Z" fill="#77B900"/>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB |
@@ -1,6 +1,6 @@
|
||||
provider: nvidia
|
||||
label:
|
||||
en_US: API Catalog
|
||||
en_US: Nvidia
|
||||
description:
|
||||
en_US: API Catalog
|
||||
zh_Hans: API Catalog
|
||||
|
||||
@@ -69,15 +69,6 @@ provider_credential_schema:
|
||||
placeholder:
|
||||
zh_Hans: 在此输入您的 API Key
|
||||
en_US: Enter your API Key
|
||||
- variable: openai_organization
|
||||
label:
|
||||
zh_Hans: 组织 ID
|
||||
en_US: Organization
|
||||
type: text-input
|
||||
required: false
|
||||
placeholder:
|
||||
zh_Hans: 在此输入您的组织 ID
|
||||
en_US: Enter your Organization ID
|
||||
- variable: openai_api_base
|
||||
label:
|
||||
zh_Hans: API Base
|
||||
@@ -88,3 +79,5 @@ provider_credential_schema:
|
||||
zh_Hans: 在此输入您的 API Base, 如:https://api.openai.com
|
||||
en_US: Enter your API Base, e.g. https://api.openai.com
|
||||
address: https://api.openai.com
|
||||
recommend: true
|
||||
sort: 1
|
||||
|
Before Width: | Height: | Size: 48 KiB After Width: | Height: | Size: 21 KiB |
@@ -24,7 +24,7 @@ parameter_rules:
|
||||
use_template: presence_penalty
|
||||
- name: frequency_penalty
|
||||
use_template: frequency_penalty
|
||||
- name: max_output_tokens
|
||||
- name: max_tokens
|
||||
use_template: max_tokens
|
||||
required: true
|
||||
default: 2048
|
||||
|
||||
@@ -23,7 +23,7 @@ parameter_rules:
|
||||
use_template: presence_penalty
|
||||
- name: frequency_penalty
|
||||
use_template: frequency_penalty
|
||||
- name: max_output_tokens
|
||||
- name: max_tokens
|
||||
use_template: max_tokens
|
||||
required: true
|
||||
default: 8192
|
||||
|
||||
@@ -24,7 +24,7 @@ parameter_rules:
|
||||
use_template: presence_penalty
|
||||
- name: frequency_penalty
|
||||
use_template: frequency_penalty
|
||||
- name: max_output_tokens
|
||||
- name: max_tokens
|
||||
use_template: max_tokens
|
||||
required: true
|
||||
default: 8192
|
||||
|
||||
@@ -24,7 +24,7 @@ parameter_rules:
|
||||
use_template: presence_penalty
|
||||
- name: frequency_penalty
|
||||
use_template: frequency_penalty
|
||||
- name: max_output_tokens
|
||||
- name: max_tokens
|
||||
use_template: max_tokens
|
||||
required: true
|
||||
default: 8192
|
||||
|
||||
@@ -24,7 +24,7 @@ parameter_rules:
|
||||
use_template: presence_penalty
|
||||
- name: frequency_penalty
|
||||
use_template: frequency_penalty
|
||||
- name: max_output_tokens
|
||||
- name: max_tokens
|
||||
use_template: max_tokens
|
||||
required: true
|
||||
default: 8192
|
||||
|
||||
@@ -24,7 +24,7 @@ parameter_rules:
|
||||
use_template: presence_penalty
|
||||
- name: frequency_penalty
|
||||
use_template: frequency_penalty
|
||||
- name: max_output_tokens
|
||||
- name: max_tokens
|
||||
use_template: max_tokens
|
||||
required: true
|
||||
default: 8192
|
||||
|
||||
@@ -24,7 +24,7 @@ parameter_rules:
|
||||
use_template: presence_penalty
|
||||
- name: frequency_penalty
|
||||
use_template: frequency_penalty
|
||||
- name: max_output_tokens
|
||||
- name: max_tokens
|
||||
use_template: max_tokens
|
||||
required: true
|
||||
default: 8192
|
||||
|
||||
@@ -24,7 +24,7 @@ parameter_rules:
|
||||
use_template: presence_penalty
|
||||
- name: frequency_penalty
|
||||
use_template: frequency_penalty
|
||||
- name: max_output_tokens
|
||||
- name: max_tokens
|
||||
use_template: max_tokens
|
||||
required: true
|
||||
default: 8192
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
provider: wenxin
|
||||
label:
|
||||
en_US: WenXin
|
||||
en_US: Wenxin YiYan
|
||||
zh_Hans: 文心一言
|
||||
icon_small:
|
||||
en_US: icon_s_en.svg
|
||||
@@ -38,4 +38,6 @@ provider_credential_schema:
|
||||
placeholder:
|
||||
zh_Hans: 在此输入您的 Secret Key
|
||||
en_US: Enter your Secret Key
|
||||
address: https://aip.baidubce.com
|
||||
address: https://aip.baidubce.com
|
||||
recommend: true
|
||||
sort: 7
|
||||
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 21 KiB After Width: | Height: | Size: 21 KiB |
@@ -30,4 +30,4 @@ provider_credential_schema:
|
||||
placeholder:
|
||||
zh_Hans: 在此输入您的 API Key
|
||||
en_US: Enter your API Key
|
||||
address: https://api.openai.com
|
||||
address: https://api.360.cn
|
||||
@@ -22,6 +22,8 @@ type IProvider interface {
|
||||
ModelsByType(modelType string) ([]IModel, bool)
|
||||
IConfig
|
||||
MaskConfig(cfg string) string
|
||||
Sort() int
|
||||
Recommend() bool
|
||||
}
|
||||
|
||||
type IProviderURI interface {
|
||||
@@ -55,10 +57,10 @@ func NewProvider(providerData string, modelContents map[string]eosc.Untyped[stri
|
||||
}
|
||||
|
||||
delete(modelContents, DirAssets)
|
||||
providerLogo, ok := assetsFiles.Get(providerCfg.IconLarge[entity.LanguageEnglish])
|
||||
if !ok {
|
||||
return nil, fmt.Errorf("provider logo not found:%s", providerCfg.Provider)
|
||||
}
|
||||
//providerLogo, ok := assetsFiles.Get(providerCfg.IconLarge[entity.LanguageEnglish])
|
||||
//if !ok {
|
||||
// return nil, fmt.Errorf("provider logo not found:%s", providerCfg.Provider)
|
||||
//}
|
||||
modelLogo, ok := assetsFiles.Get(providerCfg.IconSmall[entity.LanguageEnglish])
|
||||
if !ok {
|
||||
return nil, fmt.Errorf("model logo not found:%s", providerCfg.Provider)
|
||||
@@ -66,12 +68,14 @@ func NewProvider(providerData string, modelContents map[string]eosc.Untyped[stri
|
||||
provider := &Provider{
|
||||
id: providerCfg.Provider,
|
||||
name: providerCfg.Label[entity.LanguageEnglish],
|
||||
logo: providerLogo,
|
||||
logo: modelLogo,
|
||||
helpUrl: providerCfg.Help.URL[entity.LanguageEnglish],
|
||||
models: eosc.BuildUntyped[string, IModel](),
|
||||
defaultModels: eosc.BuildUntyped[string, IModel](),
|
||||
modelsByType: eosc.BuildUntyped[string, []IModel](),
|
||||
maskKeys: make([]string, 0),
|
||||
recommend: providerCfg.Recommend,
|
||||
sort: providerCfg.Sort,
|
||||
uri: uri,
|
||||
}
|
||||
defaultCfg := make(map[string]string)
|
||||
@@ -126,9 +130,19 @@ type Provider struct {
|
||||
modelsByType eosc.Untyped[string, []IModel]
|
||||
maskKeys []string
|
||||
uri IProviderURI
|
||||
sort int
|
||||
recommend bool
|
||||
IConfig
|
||||
}
|
||||
|
||||
func (p *Provider) Sort() int {
|
||||
return p.sort
|
||||
}
|
||||
|
||||
func (p *Provider) Recommend() bool {
|
||||
return p.recommend
|
||||
}
|
||||
|
||||
func (p *Provider) URI() IProviderURI {
|
||||
return p.uri
|
||||
}
|
||||
|
||||
@@ -4,7 +4,7 @@ import (
|
||||
"bytes"
|
||||
"fmt"
|
||||
|
||||
"github.com/urfave/cli/v2"
|
||||
"github.com/urfave/cli"
|
||||
)
|
||||
|
||||
// These should be set via go build -ldflags -X 'xxxx'.
|
||||
@@ -20,7 +20,7 @@ var profileInfo []byte
|
||||
|
||||
func init() {
|
||||
buffer := &bytes.Buffer{}
|
||||
fmt.Fprintf(buffer, "Apinto version: %s\n", Version)
|
||||
fmt.Fprintf(buffer, "APIPark version: %s\n", Version)
|
||||
fmt.Fprintf(buffer, "Golang version: %s\n", goVersion)
|
||||
fmt.Fprintf(buffer, "Git commit hash: %s\n", gitCommit)
|
||||
fmt.Fprintf(buffer, "Built on: %s\n", BuildTime)
|
||||
|
||||
@@ -151,8 +151,9 @@ func (i *imlServiceController) createAIService(ctx *gin.Context, teamID string,
|
||||
Prompt: "You need to translate {{source_lang}} into {{target_lang}}, and the following is the content that needs to be translated.\n---\n{{text}}",
|
||||
}
|
||||
aiModel := &ai_api_dto.AiModel{
|
||||
Id: m.ID(),
|
||||
Config: m.DefaultConfig(),
|
||||
Id: m.ID(),
|
||||
Config: m.DefaultConfig(),
|
||||
Provider: *input.Provider,
|
||||
}
|
||||
name := "Demo Translation API"
|
||||
description := "A demo that shows you how to use a prompt to create a Translation API."
|
||||
|
||||
@@ -319,12 +319,12 @@ func (i *imlInitController) OnInit() {
|
||||
}
|
||||
func (i *imlInitController) createAIService(ctx context.Context, teamID string, input *service_dto.CreateService) error {
|
||||
|
||||
providerId := "openai"
|
||||
err := i.providerModule.UpdateProviderConfig(ctx, "openai", &ai_dto.UpdateConfig{
|
||||
Config: "{\n \"openai_api_base\": \"API Base\",\n \"openai_api_key\": \"API Key\",\n \"openai_organization\": \"Organization\"\n}",
|
||||
providerId := "fakegpt"
|
||||
err := i.providerModule.UpdateProviderConfig(ctx, providerId, &ai_dto.UpdateConfig{
|
||||
Config: "{\n \"apikey\": \"xxx\" \n}",
|
||||
})
|
||||
if err != nil {
|
||||
return fmt.Errorf("update openai config error: %v", err)
|
||||
return fmt.Errorf("update %s config error: %v", providerId, err)
|
||||
}
|
||||
input.Provider = &providerId
|
||||
if input.Id == "" {
|
||||
@@ -381,8 +381,9 @@ func (i *imlInitController) createAIService(ctx context.Context, teamID string,
|
||||
Prompt: "You need to translate {{source_lang}} into {{target_lang}}, and the following is the content that needs to be translated.\n---\n{{text}}",
|
||||
}
|
||||
aiModel := &ai_api_dto.AiModel{
|
||||
Id: m.ID(),
|
||||
Config: m.DefaultConfig(),
|
||||
Id: m.ID(),
|
||||
Config: m.DefaultConfig(),
|
||||
Provider: providerId,
|
||||
}
|
||||
name := "Demo Translation API"
|
||||
description := "A demo that shows you how to use a prompt to create a Translation API."
|
||||
|
||||
@@ -27,4 +27,5 @@ packages/core/public/tinymce/
|
||||
*.sln
|
||||
*.sw?
|
||||
|
||||
|
||||
/pnpm-lock.yaml
|
||||
|
||||
@@ -1,10 +1,17 @@
|
||||
# 部署
|
||||
|
||||
## 安装依赖
|
||||
建议使用pnpm
|
||||
`npm install -g pnpm`
|
||||
使用pnpm安装依赖
|
||||
`pnpm install`
|
||||
建议使用 pnpm
|
||||
```
|
||||
npm install -g pnpm
|
||||
```
|
||||
|
||||
使用pnpm安装依赖
|
||||
```
|
||||
pnpm install
|
||||
```
|
||||
|
||||
## 编译
|
||||
`pnpm run build`
|
||||
```
|
||||
pnpm run build
|
||||
```
|
||||
|
||||
@@ -29,7 +29,7 @@ var (
|
||||
indexHtml []byte
|
||||
)
|
||||
var (
|
||||
expires = time.Hour * 24 * 7
|
||||
expires = time.Hour * 24 * 3
|
||||
cacheControl = fmt.Sprintf("public, max-age=%d", 3600*24*7)
|
||||
)
|
||||
|
||||
|
||||
@@ -1,10 +1,3 @@
|
||||
/*
|
||||
* @Date: 2024-05-10 14:19:56
|
||||
* @LastEditors: maggieyyy
|
||||
* @LastEditTime: 2024-05-10 15:55:29
|
||||
* @FilePath: \frontend\jest.config.js
|
||||
*/
|
||||
|
||||
module.exports = {
|
||||
roots: ['<rootDir>/packages'],
|
||||
testMatch: ['**/__tests__/**/*.+(ts|tsx|js)', '**/?(*.)+(spec|test).+(ts|tsx|js)'],
|
||||
@@ -15,4 +8,4 @@ module.exports = {
|
||||
moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json'],
|
||||
testPathIgnorePatterns: ['/node_modules/', '/dist/'],
|
||||
setupFilesAfterEnv: ['<rootDir>/jest.setup.js'],
|
||||
};
|
||||
};
|
||||
|
||||
@@ -1,7 +1 @@
|
||||
/*
|
||||
* @Date: 2024-05-10 14:22:41
|
||||
* @LastEditors: maggieyyy
|
||||
* @LastEditTime: 2024-05-10 15:49:31
|
||||
* @FilePath: \frontend\jest.setup.js
|
||||
*/
|
||||
// import '@testing-library/jest-dom/extend-expect';
|
||||
// import '@testing-library/jest-dom/extend-expect';
|
||||
|
||||
@@ -3,4 +3,5 @@
|
||||
"packages/*"
|
||||
],
|
||||
"version": "independent"
|
||||
|
||||
}
|
||||
@@ -6,7 +6,6 @@ yarn-debug.log*
|
||||
yarn-error.log*
|
||||
pnpm-debug.log*
|
||||
lerna-debug.log*
|
||||
|
||||
node_modules
|
||||
dist
|
||||
dist-ssr
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<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>
|
||||
<title>2APIPark</title>
|
||||
</head>
|
||||
<body>
|
||||
<div id="root"></div>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
"version": "0.0.0",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"dev": " vite --port 5000 --strictPort",
|
||||
"dev": " vite --port 5000 --strictPort",
|
||||
"build": "vite build ",
|
||||
"lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0",
|
||||
"preview": "vite preview --port 5000 --strictPort",
|
||||
|
||||
@@ -1,9 +1,3 @@
|
||||
/*
|
||||
* @Date: 2023-11-27 17:31:54
|
||||
* @LastEditors: maggieyyy
|
||||
* @LastEditTime: 2024-06-05 10:42:18
|
||||
* @FilePath: \frontend\packages\core\postcss.config.js
|
||||
*/
|
||||
export default {
|
||||
plugins: {
|
||||
'postcss-import': {},
|
||||
|
||||
@@ -361,7 +361,7 @@ const PUBLIC_ROUTES:RouteConfig[] = [
|
||||
key:uuidv4(),
|
||||
},
|
||||
{
|
||||
path:'tenantManagement',
|
||||
path:'consumer',
|
||||
component:<Outlet />,
|
||||
provider:TenantManagementProvider,
|
||||
key:'tenantManagement',
|
||||
|
||||
@@ -1,9 +1,4 @@
|
||||
/*
|
||||
* @Date: 2024-06-05 09:35:25
|
||||
* @LastEditors: maggieyyy
|
||||
* @LastEditTime: 2024-06-05 10:50:12
|
||||
* @FilePath: \frontend\packages\core\start-vite.js
|
||||
*/
|
||||
|
||||
// start-vite.js// start-vite.js
|
||||
import { exec } from 'child_process';
|
||||
|
||||
|
||||
@@ -1,9 +1,4 @@
|
||||
/*
|
||||
* @Date: 2023-11-27 17:31:54
|
||||
* @LastEditors: maggieyyy
|
||||
* @LastEditTime: 2023-11-29 15:49:05
|
||||
* @FilePath: \applatform\frontend\packages\core\postcss.config.js
|
||||
*/
|
||||
|
||||
export default {
|
||||
plugins: {
|
||||
'postcss-import': {},
|
||||
|
||||
@@ -1,19 +1,15 @@
|
||||
import {
|
||||
ConfigProvider,
|
||||
Dropdown,
|
||||
MenuProps,
|
||||
App,
|
||||
Button} from 'antd';
|
||||
Button,
|
||||
ConfigProvider,
|
||||
Dropdown} from 'antd';
|
||||
import { Outlet, useLocation, useNavigate} from "react-router-dom";
|
||||
import Logo from '@common/assets/layout-logo.png';
|
||||
import AvatarPic from '@common/assets/default-avatar.png'
|
||||
import {Outlet, useLocation, useNavigate} from "react-router-dom";
|
||||
import { useEffect, useMemo, useState} from "react";
|
||||
import { useEffect, useMemo, useState} from "react";
|
||||
import { useGlobalContext } from '@common/contexts/GlobalStateContext.tsx';
|
||||
import { PERMISSION_DEFINITION } from '@common/const/permissions.ts';
|
||||
import {
|
||||
ProConfigProvider,
|
||||
ProLayout,
|
||||
} from '@ant-design/pro-components';
|
||||
import { BasicResponse, RESPONSE_TIPS, routerKeyMap, STATUS_CODE } from '@common/const/const.tsx';
|
||||
import { UserInfoType } from '@common/const/type.ts';
|
||||
import { useFetch } from '@common/hooks/http.ts';
|
||||
@@ -21,6 +17,7 @@ import { ProjectFilled } from '@ant-design/icons';
|
||||
import { getNavItem } from '@common/utils/navigation';
|
||||
import { Icon } from '@iconify/react';
|
||||
import { $t } from '@common/locales';
|
||||
import { ProConfigProvider, ProLayout } from '@ant-design/pro-components';
|
||||
import LanguageSetting from './LanguageSetting';
|
||||
|
||||
const APP_MODE = import.meta.env.VITE_APP_MODE;
|
||||
@@ -41,38 +38,37 @@ const themeToken = {
|
||||
const navigator = useNavigate()
|
||||
const location = useLocation()
|
||||
const currentUrl = location.pathname
|
||||
const { state,accessData,checkPermission,accessInit} = useGlobalContext()
|
||||
const [pathname, setPathname] = useState(currentUrl);
|
||||
const mainPage = project === 'core' ?'/service/list':'/serviceHub/list'
|
||||
const { state,accessData,checkPermission,accessInit,dispatch,resetAccess,getGlobalAccessData} = useGlobalContext()
|
||||
const [pathname, setPathname] = useState(currentUrl); const mainPage = project === 'core' ?'/service/list':'/serviceHub/list'
|
||||
|
||||
const TOTAL_MENU_ITEMS:MenuProps['items'] = useMemo(() => [
|
||||
getNavItem($t('工作空间'), 'workspace','/guide/page',<Icon icon="ic:baseline-space-dashboard" width="18" height="18"/>, [
|
||||
getNavItem(<a>{$t('首页')}</a>, 'guide','/guide/page',<Icon icon="ic:baseline-home" width="18" height="18"/>,undefined,undefined,'all'),
|
||||
getNavItem(<a>{$t('应用')}</a>, 'tenantManagement','/tenantManagement',<Icon icon="ic:baseline-apps" width="18" height="18"/>,undefined,undefined,'all'),
|
||||
getNavItem(<a>{$t('服务')}</a>, 'service','/service',<Icon icon="ic:baseline-blinds-closed" width="18" height="18"/>,undefined,undefined,'all'),
|
||||
getNavItem(<a>{$t('消费者')}</a>, 'consumer','/consumer',<Icon icon="ic:baseline-apps" width="18" height="18"/>,undefined,undefined,'all'),
|
||||
getNavItem(<a>{$t('团队')}</a>, 'team','/team',<Icon icon="ic:baseline-people-alt" width="18" height="18"/>,undefined,undefined,'all'),
|
||||
]),
|
||||
getNavItem($t('API 市场'), 'serviceHub','/serviceHub',<Icon icon="ic:baseline-hub" width="18" height="18"/>,undefined,undefined,'system.workspace.api_market.view'),
|
||||
getNavItem($t('API 市场'), 'serviceHub','/serviceHub',<Icon icon="ic:baseline-hub" width="18" height="18"/>,undefined,undefined,'system.api_portal.api_portal.view'),
|
||||
|
||||
getNavItem($t('仪表盘'), 'mainPage', APP_MODE === 'pro' ? '/analytics' : '/analytics/total',<Icon icon="ic:baseline-bar-chart" width="18" height="18"/>,[
|
||||
getNavItem(<a >{$t('运行视图')}</a>, 'analytics',APP_MODE === 'pro' ? '/analytics' : '/analytics/total' ,<ProjectFilled />,undefined,undefined,'system.dashboard.run_view.view'),
|
||||
getNavItem(<a >{$t('运行视图')}</a>, 'analytics',APP_MODE === 'pro' ? '/analytics' : '/analytics/total' ,<ProjectFilled />,undefined,undefined,'system.analysis.run_view.view'),
|
||||
APP_MODE === 'pro' ? getNavItem(<a >{$t('系统拓扑图')}</a>, 'systemrunning','/systemrunning',<ProjectFilled />,undefined,undefined,'system.dashboard.systemrunning.view') : null,
|
||||
],undefined,'system.dashboard.run_view.view'),
|
||||
],undefined,'system.analysis.run_view.view'),
|
||||
|
||||
getNavItem($t('系统设置'), 'operationCenter','/commonsetting',<Icon icon="ic:baseline-settings" width="18" height="18"/>, [
|
||||
getNavItem($t('系统'), 'serviceHubSetting','/commonsetting',null,[
|
||||
getNavItem(<a>{$t('常规')}</a>, 'commonsetting','/commonsetting',<Icon icon="ic:baseline-hub" width="18" height="18"/>,undefined,undefined,'system.api_market.service_classification.view'),
|
||||
getNavItem(<a>{$t('API 网关')}</a>, 'cluster','/cluster',<Icon icon="ic:baseline-device-hub" width="18" height="18"/>,undefined,undefined,'system.devops.cluster.view'),
|
||||
getNavItem(<a>{$t('AI 模型')}</a>, 'aisetting','/aisetting',<Icon icon="hugeicons:ai-network" width="18" height="18"/>,undefined,undefined,'system.devops.cluster.view'),
|
||||
getNavItem(<a>{$t('API 网关')}</a>, 'cluster','/cluster',<Icon icon="ic:baseline-device-hub" width="18" height="18"/>,undefined,undefined,'system.settings.api_gateway.view'),
|
||||
getNavItem(<a>{$t('AI 模型')}</a>, 'aisetting','/aisetting',<Icon icon="hugeicons:ai-network" width="18" height="18"/>,undefined,undefined,'system.settings.api_gateway.view'),
|
||||
],undefined,'system.api_market.service_classification.view'),
|
||||
getNavItem($t('用户'), 'organization','/member',null,[
|
||||
getNavItem(<a>{$t('账号')}</a>, 'member','/member',<Icon icon="ic:baseline-people-alt" width="18" height="18"/>,undefined,undefined,'system.organization.member.view'),
|
||||
getNavItem(<a>{$t('账号')}</a>, 'member','/member',<Icon icon="ic:baseline-people-alt" width="18" height="18"/>,undefined,undefined,'system.settings.account.view'),
|
||||
getNavItem(<a>{$t('角色')}</a>, 'role','/role',<Icon icon="ic:baseline-verified-user" width="18" height="18"/>,undefined,undefined,'system.organization.role.view'),
|
||||
],undefined,''),
|
||||
getNavItem($t('集成'), 'maintenanceCenter','/datasourcing', null, [
|
||||
getNavItem(<a>{$t('数据源')}</a>, 'datasourcing','/datasourcing',<Icon icon="ic:baseline-monitor-heart" width="18" height="18"/>,undefined,undefined,'system.devops.data_source.view'),
|
||||
getNavItem(<a>{$t('证书')}</a>, 'cert','/cert',<Icon icon="ic:baseline-security" width="18" height="18"/>,undefined,undefined,'system.devops.ssl_certificate.view'),
|
||||
getNavItem(<a>{$t('日志')}</a>, 'logsettings','/logsettings',<Icon icon="ic:baseline-sticky-note-2" width="18" height="18"/>,undefined,undefined,'system.devops.log_configuration.view'),
|
||||
getNavItem(<a>{$t('数据源')}</a>, 'datasourcing','/datasourcing',<Icon icon="ic:baseline-monitor-heart" width="18" height="18"/>,undefined,undefined,'system.settings.data_source.view'),
|
||||
getNavItem(<a>{$t('证书')}</a>, 'cert','/cert',<Icon icon="ic:baseline-security" width="18" height="18"/>,undefined,undefined,'system.settings.ssl_certificate.view'),
|
||||
getNavItem(<a>{$t('日志')}</a>, 'logsettings','/logsettings',<Icon icon="ic:baseline-sticky-note-2" width="18" height="18"/>,undefined,undefined,'system.settings.log_configuration.view'),
|
||||
APP_MODE === 'pro' ? getNavItem(<a>{$t('资源')}</a>, 'resourcesettings','/resourcesettings',null,undefined,undefined,'system.partition.self.view'):null,
|
||||
APP_MODE === 'pro' ? getNavItem(<a>{$t('Open API')}</a>, 'openapi','/openapi',null,undefined,undefined,'system.openapi.self.view'):null,
|
||||
]),
|
||||
@@ -126,7 +122,6 @@ const themeToken = {
|
||||
|
||||
|
||||
const { message } = App.useApp()
|
||||
const { dispatch,resetAccess,getGlobalAccessData} = useGlobalContext()
|
||||
const [userInfo,setUserInfo] = useState<UserInfoType>()
|
||||
const {fetchData} = useFetch()
|
||||
const navigate = useNavigate();
|
||||
@@ -163,8 +158,8 @@ const themeToken = {
|
||||
})
|
||||
}
|
||||
|
||||
const items: MenuProps['items'] = [
|
||||
{
|
||||
const items: MenuProps['items'] = useMemo(() => [
|
||||
userInfo?.type !== 'guest' && {
|
||||
key: '2',
|
||||
label: (
|
||||
<Button key="changePsw" type="text" className="flex items-center p-0 bg-transparent border-none " onClick={()=>navigator('/userProfile/changepsw')}>
|
||||
@@ -178,7 +173,7 @@ const themeToken = {
|
||||
{$t('退出登录')}
|
||||
</Button>)
|
||||
},
|
||||
];
|
||||
].filter(Boolean), [userInfo]);
|
||||
|
||||
|
||||
|
||||
@@ -248,7 +243,7 @@ const themeToken = {
|
||||
</div>
|
||||
)}
|
||||
logo={Logo}
|
||||
pageTitleRender={()=>$t('APIPark - 企业API数据开放平台')}
|
||||
pageTitleRender={()=>$t('APIPark')}
|
||||
menuFooterRender={(props) => {
|
||||
if (props?.collapsed) return undefined;
|
||||
}}
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
import { Dropdown, Row, Col, Button } from 'antd';
|
||||
import i18n from '@common/locales';
|
||||
import { $t } from '@common/locales';
|
||||
import { memo, useEffect, useMemo } from 'react';
|
||||
import { useGlobalContext } from '@common/contexts/GlobalStateContext';
|
||||
import { Icon } from '@iconify/react/dist/iconify.js';
|
||||
|
||||
@@ -1,27 +1,23 @@
|
||||
|
||||
import { GetProp, TransferProps, TreeDataNode, theme, Transfer, Tree, Spin } from "antd";
|
||||
import { DataNode, TreeProps } from "antd/es/tree";
|
||||
import { TransferProps, TreeDataNode, Tree, Spin, Input } from "antd";
|
||||
import { DataNode } from "antd/es/tree";
|
||||
import { Ref, forwardRef, useEffect, useImperativeHandle, useMemo, useRef, useState } from "react";
|
||||
import { ApartmentOutlined, LoadingOutlined, UserOutlined } from "@ant-design/icons";
|
||||
import { cloneDeep, debounce } from "lodash-es";
|
||||
import { ColumnsType } from "antd/es/table";
|
||||
import { $t } from "@common/locales";
|
||||
import { useGlobalContext } from "@common/contexts/GlobalStateContext";
|
||||
|
||||
type TransferItem = GetProp<TransferProps, 'dataSource'>[number];
|
||||
|
||||
export type TransferTableProps<T> = {
|
||||
request?:(k?:string)=>Promise<{data:T[],success:boolean}>
|
||||
columns: ColumnsType<T>
|
||||
primaryKey:string
|
||||
onSelect:(selectedData:T[])=>void
|
||||
onSelect:(selectedData:string[])=>void
|
||||
tableType?:'member'|'api'
|
||||
disabledData:string[]
|
||||
searchPlaceholder?:string
|
||||
}
|
||||
|
||||
export type TransferTableHandle<T> = {
|
||||
selectedData: () => T[];
|
||||
selectedRowKeys: () => React.Key[];
|
||||
}
|
||||
|
||||
@@ -31,10 +27,6 @@ interface TreeTransferProps {
|
||||
onChange: TransferProps['onChange'];
|
||||
}
|
||||
|
||||
// Customize Table Transfer
|
||||
const isChecked = (selectedKeys: React.Key[], eventKey: React.Key) =>
|
||||
selectedKeys.includes(eventKey);
|
||||
|
||||
const generateTree = (
|
||||
treeNodes: TreeDataNode[] = [],
|
||||
checkedKeys: TreeTransferProps['targetKeys'] = [],
|
||||
@@ -73,200 +65,106 @@ const generateTree = (
|
||||
)
|
||||
};
|
||||
|
||||
const TransferTree = (props)=>{
|
||||
const { direction, token, tableHeight, dataSource, targetKeys, onItemSelect, onItemSelectAll,checkedKey,selectedKeys, filteredItems ,disabledData} = props;
|
||||
const [expandedKeys, setExpandedKeys] = useState<string[]>([]);
|
||||
|
||||
const getExpandedKeys = (newData:TreeDataNode[], expandedSet:Set<string> = new Set())=>{
|
||||
newData.forEach((item)=>{
|
||||
if(item.children && item.children.length > 0){
|
||||
expandedSet.add(item.key)
|
||||
getExpandedKeys(item.children,expandedSet)
|
||||
}
|
||||
})
|
||||
return expandedSet
|
||||
}
|
||||
|
||||
const treeData:TreeDataNode[] = useMemo(()=>{
|
||||
const filteredSet = filteredItems && filteredItems.length > 0 ? new Set(filteredItems.map((x)=>x.id)) : new Set()
|
||||
const res = dataSource && dataSource.length > 0 ? generateTree(dataSource, targetKeys,direction === 'right',disabledData,filteredSet) : []
|
||||
setExpandedKeys(Array.from(getExpandedKeys(res)))
|
||||
return res
|
||||
},[
|
||||
dataSource, targetKeys,direction ,disabledData,filteredItems
|
||||
])
|
||||
|
||||
const onExpand: TreeProps['onExpand'] = (expandedKeysValue) => {
|
||||
setExpandedKeys(expandedKeysValue as string[]);
|
||||
};
|
||||
|
||||
return (
|
||||
|
||||
<div style={{ padding: token.paddingXS }}>
|
||||
<Tree
|
||||
className="icon-tree"
|
||||
blockNode
|
||||
checkable
|
||||
showIcon
|
||||
checkedKeys={direction === 'left' ? Array.from(new Set([...checkedKey,...disabledData])) : selectedKeys }
|
||||
defaultExpandAll
|
||||
expandedKeys={expandedKeys}
|
||||
onExpand={onExpand}
|
||||
height={tableHeight}
|
||||
icon={(props)=> { return (props.type === 'member' ? <UserOutlined /> :<ApartmentOutlined /> )} }
|
||||
treeData={treeData}
|
||||
onCheck={(_checkedKeys, e:{checked: boolean, checkedNodes, node, event, halfCheckedKeys}) => {
|
||||
if(e.checked){
|
||||
onItemSelectAll( _checkedKeys, e.checked);
|
||||
}else{
|
||||
const checkedKeyArrFromTree = e.checkedNodes.map(node => node.key)
|
||||
onItemSelectAll((checkedKey as string[]).filter(key => checkedKeyArrFromTree.indexOf(key) === -1),e.checked)
|
||||
}
|
||||
}}
|
||||
onSelect={(_, { node: { key } }) => {
|
||||
onItemSelect(key as string, !isChecked(checkedKey, key));
|
||||
}}
|
||||
/>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
const MemberTransfer= forwardRef<TransferTableHandle<{[k:string]:unknown}>, TransferTableProps<{[k:string]:unknown}>>(
|
||||
<T extends {[k:string]:unknown}>(props: TransferTableProps<T>, ref:Ref<TransferTableHandle<T>>) => {
|
||||
const {request,columns,primaryKey,onSelect,tableType,disabledData = [],searchPlaceholder} = props
|
||||
const [tableHeight, setTableHeight] = useState(window.innerHeight * 80 / 100 - 64 - 72 - 56 - 16 -3);
|
||||
const [targetKeys, setTargetKeys] = useState<TreeTransferProps['targetKeys']>([]);
|
||||
const [dataSource, setDataSource] = useState<DataNode[] >([])
|
||||
const parentRef = useRef<HTMLDivElement>(null);
|
||||
const [loading, setLoading] = useState<boolean>(false)
|
||||
const {state} = useGlobalContext()
|
||||
|
||||
const [expandedKeys, setExpandedKeys] = useState<string[]>([]);
|
||||
const [searchWord, setSearchWord] = useState<string>('')
|
||||
useEffect(()=>{
|
||||
setTargetKeys(disabledData)
|
||||
},[disabledData])
|
||||
|
||||
useImperativeHandle(ref, () =>({
|
||||
selectedData: () => dataSource,
|
||||
selectedRowKeys: () => targetKeys,}))
|
||||
|
||||
const onChange: TreeTransferProps['onChange'] = (keys) => {
|
||||
onSelect?.(new Set(keys))
|
||||
setTargetKeys(Array.from(new Set(keys)));
|
||||
};
|
||||
const translatedDataSource = useMemo(()=>{
|
||||
|
||||
const loop = (data: DataNode[]): DataNode[] =>
|
||||
data?.map((item) => {
|
||||
const strTitle:string = item.name === '所有成员' ? $t(item.name) as string : item.name as string;
|
||||
const index = strTitle.indexOf(searchWord);
|
||||
const beforeStr = strTitle.substring(0, index);
|
||||
const afterStr = strTitle.slice(index + searchWord.length);
|
||||
const title =
|
||||
index > -1 ? (
|
||||
<span className='w-[calc(100%-16px)] truncate' title={strTitle}>
|
||||
{beforeStr}
|
||||
<span className="text-theme">{searchWord}</span>
|
||||
{afterStr}
|
||||
</span>
|
||||
) : (
|
||||
<span className='w-[calc(100%-16px)] truncate' title={`${strTitle}`}>{strTitle}</span>
|
||||
)
|
||||
if (item.children) {
|
||||
return {
|
||||
...item,
|
||||
title,
|
||||
disableCheckbox:disabledData.indexOf(item.key as string) !== -1,
|
||||
icon:<ApartmentOutlined />,
|
||||
children: loop(item.children as T[]) };
|
||||
}
|
||||
|
||||
const { token } = theme.useToken();
|
||||
|
||||
const transferDataSource: TransferItem[] = useMemo(()=>{
|
||||
function flatten(list: TreeDataNode[] = [], res:TransferItem[]) {
|
||||
list.forEach((item) => {
|
||||
res.push({...item, title:item.title === '所有成员' ? $t((item as unknown as {title:string}).title):item.title }as TransferItem);
|
||||
flatten(item.children,res);
|
||||
});
|
||||
}
|
||||
const res:TransferItem[] =[]
|
||||
flatten(dataSource,res);
|
||||
return res
|
||||
},[
|
||||
dataSource, state.language
|
||||
])
|
||||
|
||||
|
||||
const translatedDataSource = useMemo(()=>dataSource.map((item)=>({
|
||||
...item,
|
||||
name:item.name === '所有成员' ? $t((item as unknown as {name:string}).name):item.name,
|
||||
})),[dataSource, state.language])
|
||||
|
||||
|
||||
|
||||
let memo: Record<string, boolean> = {};
|
||||
|
||||
const handlerFilterOption = (inputValue: string, item: any, parentResult: boolean = false, childrenSet: Set<string> = new Set()): boolean => {
|
||||
const cacheKey = `${inputValue}_${item.key}`;
|
||||
if (memo[cacheKey]) {
|
||||
return memo[cacheKey];
|
||||
}
|
||||
|
||||
childrenSet.add(item.key);
|
||||
let result = item.title.includes(inputValue) || parentResult
|
||||
if (item.children) {
|
||||
for (const child of item.children) {
|
||||
if (handlerFilterOption(inputValue, child, result,childrenSet)) {
|
||||
result = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (result) {
|
||||
memo[cacheKey] = result;
|
||||
childrenSet.forEach((key) => {
|
||||
memo[`${inputValue}_${key}`] = result;
|
||||
return {
|
||||
...item,
|
||||
title,
|
||||
icon:<UserOutlined />,
|
||||
isLeaf:true,
|
||||
disableCheckbox:disabledData.indexOf(item.key as string) !== -1
|
||||
};
|
||||
});
|
||||
}
|
||||
return result;
|
||||
};
|
||||
return loop(dataSource);
|
||||
},[dataSource, state.language, searchWord])
|
||||
|
||||
console.log(dataSource)
|
||||
|
||||
const getInitExpandKeys = (data:T[], expandKeys:string[] = [])=>{
|
||||
data.forEach((item)=>{
|
||||
if(item.children?.length){
|
||||
expandKeys.push(item.key as string)
|
||||
getInitExpandKeys(item.children,expandKeys)
|
||||
}
|
||||
})
|
||||
return expandKeys
|
||||
}
|
||||
|
||||
const getDataSource = ()=>{
|
||||
setLoading(true)
|
||||
request && request().then((res)=>{
|
||||
const {data,success} = res
|
||||
setDataSource(success? data : [])
|
||||
setExpandedKeys(getInitExpandKeys(success? data:[]))
|
||||
}).finally(()=>{setLoading(false)})
|
||||
}
|
||||
}
|
||||
|
||||
useEffect(() => {
|
||||
getDataSource()
|
||||
const handleResize = () => {
|
||||
setTableHeight(window.innerHeight * 80 / 100 - 64 - 72 - 56 - 16 -3)
|
||||
};
|
||||
|
||||
const debouncedHandleResize = debounce(handleResize, 200);
|
||||
|
||||
// 监听窗口大小变化
|
||||
window.addEventListener('resize', debouncedHandleResize);
|
||||
handleResize();
|
||||
return () => {
|
||||
window.removeEventListener('resize', debouncedHandleResize);
|
||||
};
|
||||
}, []);
|
||||
useEffect(() => {
|
||||
getDataSource()
|
||||
}, []);
|
||||
|
||||
return (
|
||||
<div ref={parentRef}>
|
||||
<Spin indicator={<LoadingOutlined style={{ fontSize: 24 }} spin />} spinning={loading} className=''>
|
||||
<Transfer
|
||||
showSearch
|
||||
onSearch={(dir)=>{
|
||||
memo = {};
|
||||
}}
|
||||
listStyle={{width:'408px'}}
|
||||
disabledData={disabledData}
|
||||
filterOption={(inputValue: string, item: any) => handlerFilterOption(inputValue, item)}
|
||||
targetKeys={targetKeys}
|
||||
dataSource={transferDataSource}
|
||||
className="tree-transfer"
|
||||
render={(item) => item.title!}
|
||||
showSelectAll={false}
|
||||
onChange={onChange}
|
||||
titles={['','']}
|
||||
>
|
||||
{({ direction, onItemSelect, selectedKeys,onItemSelectAll ,filteredItems}) => {
|
||||
const treeProps = {
|
||||
dataSource:translatedDataSource, direction, onItemSelect, selectedKeys,onItemSelectAll ,filteredItems,token,tableHeight,targetKeys,disabledData
|
||||
}
|
||||
if (direction === 'left') {
|
||||
const checkedKey = [...selectedKeys, ...targetKeys as string[]];
|
||||
return (
|
||||
<TransferTree {...treeProps} checkedKey={checkedKey} />
|
||||
);
|
||||
}
|
||||
if(direction === 'right'){
|
||||
const checkedKey = [...selectedKeys,...targetKeys as string[]];
|
||||
return (
|
||||
<TransferTree {...treeProps} checkedKey={checkedKey} />
|
||||
);
|
||||
}
|
||||
}}
|
||||
</Transfer>
|
||||
<Input placeholder={searchPlaceholder} onChange={(e)=>setSearchWord(e.target.value)} value={searchWord} />
|
||||
<Tree
|
||||
checkable
|
||||
className="mt-[10px]"
|
||||
expandedKeys={expandedKeys}
|
||||
checkedKeys={targetKeys}
|
||||
selectable={false}
|
||||
onCheck={(e)=>{setTargetKeys(e);
|
||||
onSelect(((e as string[])?.filter(x=>disabledData.indexOf(x as string) === -1))||[])}}
|
||||
onExpand={setExpandedKeys}
|
||||
treeData={translatedDataSource}
|
||||
blockNode
|
||||
showIcon
|
||||
/>
|
||||
|
||||
</Spin>
|
||||
</div>
|
||||
);
|
||||
|
||||
@@ -219,12 +219,12 @@ export const PublishApprovalModalContent = forwardRef<PublishApprovalModalHandle
|
||||
/></Row>
|
||||
</>
|
||||
}
|
||||
<Form.Item
|
||||
{/* <Form.Item
|
||||
label={$t("备注")}
|
||||
name="remark"
|
||||
>
|
||||
<Input.TextArea className="w-INPUT_NORMAL" disabled={type !== 'add' && type !== 'publish'} placeholder={$t(PLACEHOLDER.input)} />
|
||||
</Form.Item>
|
||||
</Form.Item> */}
|
||||
{/*
|
||||
{type !== 'add' && type !== 'publish' && <Form.Item
|
||||
label={$t("审核意见"
|
||||
|
||||
@@ -17,8 +17,8 @@ export const TranslateWord = ()=>{
|
||||
{$t('只读成员')}
|
||||
{$t('服务管理员')}
|
||||
{$t('服务开发者')}
|
||||
{$t('应用开发者')}
|
||||
{$t('应用管理员')}
|
||||
{$t('消费者开发者')}
|
||||
{$t('消费者管理员')}
|
||||
{$t('驱动名称')}
|
||||
{$t('请求失败数')}
|
||||
{$t('转发失败数')}
|
||||
@@ -53,8 +53,8 @@ export const TranslateWord = ()=>{
|
||||
{$t('上传 OpenAPI 文档 (.json/.yaml)')}
|
||||
{$t('替换 OpenAPI 文档 (.json/.yaml)')}
|
||||
{$t('打开 OpenAPI YAML 编辑器')}
|
||||
{$t('无需审核:允许任何应用调用该服务')}
|
||||
{$t('人工审核:仅允许通过人工审核的应用调用该服务')}
|
||||
{$t('无需审核:允许任何消费者调用该服务')}
|
||||
{$t('人工审核:仅允许通过人工审核的消费者调用该服务')}
|
||||
{$t('永久')}
|
||||
{$t('否')}
|
||||
{$t('是')}
|
||||
@@ -72,7 +72,7 @@ export const TranslateWord = ()=>{
|
||||
{$t('版本状态')}
|
||||
{$t('创建人')}
|
||||
{$t('审核时间')}
|
||||
{$t('申请方-应用')}
|
||||
{$t('申请方-消费者')}
|
||||
{$t('审核状态')}
|
||||
{$t('申请人')}
|
||||
{$t('审核人')}
|
||||
@@ -132,6 +132,33 @@ export const TranslateWord = ()=>{
|
||||
{$t('每小时')}
|
||||
{$t('每天')}
|
||||
{$t('每周')}
|
||||
{$t('上线结果')}
|
||||
{$t('订阅服务数量')}
|
||||
{$t('鉴权数量')}
|
||||
{$t('列表')}
|
||||
{$t('块')}
|
||||
{$t('HTTP 请求头')}
|
||||
{$t('全等匹配')}
|
||||
{$t('前缀匹配')}
|
||||
{$t('后缀匹配')}
|
||||
{$t('子串匹配')}
|
||||
{$t('非等匹配')}
|
||||
{$t('空值匹配')}
|
||||
{$t('存在匹配')}
|
||||
{$t('不存在匹配')}
|
||||
{$t('区分大小写的正则匹配')}
|
||||
{$t('不区分大小写的正则匹配')}
|
||||
{$t('任意匹配')}
|
||||
{$t('驳回')}
|
||||
{$t('已订阅')}
|
||||
{$t('取消申请')}
|
||||
{$t('透传客户端请求 Host')}
|
||||
{$t('使用上游服务 Host')}
|
||||
{$t('重写 Host')}
|
||||
{$t('动态服务发现')}
|
||||
{$t('地址')}
|
||||
{$t('新增')}
|
||||
{$t('申请方消费者')}
|
||||
|
||||
</>
|
||||
)
|
||||
|
||||
@@ -15,7 +15,7 @@ export const SUBSCRIBE_APPROVAL_TABLE_COLUMN : PageProColumns<ApprovalTableListI
|
||||
},
|
||||
},
|
||||
{
|
||||
title:('申请方-应用'),
|
||||
title:('申请方-消费者'),
|
||||
dataIndex: ['application','name'],
|
||||
ellipsis:true
|
||||
},
|
||||
@@ -76,7 +76,7 @@ export const SUBSCRIBE_APPROVAL_INNER_TODO_TABLE_COLUMN : PageProColumns<Subscri
|
||||
},
|
||||
},
|
||||
{
|
||||
title:('申请方-应用'),
|
||||
title:('申请方-消费者'),
|
||||
dataIndex: ['application','name'],
|
||||
ellipsis:true
|
||||
},
|
||||
@@ -111,7 +111,7 @@ export const SUBSCRIBE_APPROVAL_INNER_DONE_TABLE_COLUMN : PageProColumns<Subscri
|
||||
},
|
||||
},
|
||||
{
|
||||
title:('申请方-应用'),
|
||||
title:('申请方-消费者'),
|
||||
dataIndex: ['application','name'],
|
||||
ellipsis:true
|
||||
},
|
||||
@@ -343,11 +343,6 @@ export const PUBLISH_APPROVAL_RECORD_INNER_TABLE_COLUMN : PageProColumns<Publish
|
||||
dataIndex: 'status',
|
||||
ellipsis:true,
|
||||
},
|
||||
{
|
||||
title:('备注'),
|
||||
dataIndex: 'comments',
|
||||
ellipsis:true
|
||||
},
|
||||
{
|
||||
title:('申请人'),
|
||||
dataIndex: ['applicant','name'],
|
||||
@@ -445,7 +440,7 @@ export const ChangeTypeEnum = {
|
||||
|
||||
export const SubscribeApprovalList = [
|
||||
{
|
||||
title:('申请方应用'),key:'application'
|
||||
title:('申请方消费者'),key:'application'
|
||||
},
|
||||
{
|
||||
title:('申请方所属团队'),key:'applyTeam'
|
||||
|
||||
@@ -18,8 +18,8 @@ export const STATUS_COLOR = {
|
||||
|
||||
// avoid changing route within ths same category
|
||||
export const routerKeyMap = new Map<string, string[]|string>([
|
||||
['workspace',['tenantManagement','service','team','guide']],
|
||||
['my',['tenantManagement','service','team']],
|
||||
['workspace',['consumer','service','team','guide']],
|
||||
['my',['consumer','service','team']],
|
||||
['mainPage',['dashboard','systemrunning']],
|
||||
['operationCenter',['member','user','role','common']],
|
||||
['organization',['member','user','role']],
|
||||
@@ -67,4 +67,9 @@ export const routerKeyMap = new Map<string, string[]|string>([
|
||||
|
||||
export const DELETE_TIPS = {
|
||||
default:('该数据删除后将无法找回,请确认是否删除?')
|
||||
}
|
||||
}
|
||||
|
||||
export const DATA_SHOW_TYPE_OPTIONS = [
|
||||
{label:'列表', value:'list'},
|
||||
{label:'块', value:'block'},
|
||||
]
|
||||
@@ -4,84 +4,84 @@
|
||||
|
||||
export const PERMISSION_DEFINITION = [
|
||||
{
|
||||
"system.organization.member.view": {
|
||||
"system.settings.account.view": {
|
||||
"granted": {
|
||||
"anyOf": [{ "backend": ["system.organization.member.view"] }]
|
||||
"anyOf": [{ "backend": ["system.settings.account.view"] }]
|
||||
}
|
||||
},
|
||||
"system.organization.member.add": {
|
||||
"granted": {
|
||||
"anyOf": [{ "backend": ["system.organization.member.manager"] }]
|
||||
"anyOf": [{ "backend": ["system.settings.account.manager"] }]
|
||||
}
|
||||
},
|
||||
"system.organization.member.edit": {
|
||||
"granted": {
|
||||
"anyOf": [{ "backend": ["system.organization.member.manager"] }]
|
||||
"anyOf": [{ "backend": ["system.settings.account.manager"] }]
|
||||
}
|
||||
},
|
||||
"system.organization.member.remove": {
|
||||
"granted": {
|
||||
"anyOf": [{ "backend": ["system.organization.member.manager"] }]
|
||||
"anyOf": [{ "backend": ["system.settings.account.manager"] }]
|
||||
}
|
||||
},
|
||||
"system.organization.member.delete": {
|
||||
"granted": {
|
||||
"anyOf": [{ "backend": ["system.organization.member.manager"] }]
|
||||
"anyOf": [{ "backend": ["system.settings.account.manager"] }]
|
||||
}
|
||||
},
|
||||
"system.organization.member.block": {
|
||||
"granted": {
|
||||
"anyOf": [{ "backend": ["system.organization.member.manager"] }]
|
||||
"anyOf": [{ "backend": ["system.settings.account.manager"] }]
|
||||
}
|
||||
},
|
||||
"system.organization.member.department.add": {
|
||||
"granted": {
|
||||
"anyOf": [{ "backend": ["system.organization.member.manager"] }]
|
||||
"anyOf": [{ "backend": ["system.settings.account.manager"] }]
|
||||
}
|
||||
},
|
||||
"system.organization.member.department.edit": {
|
||||
"granted": {
|
||||
"anyOf": [{ "backend": ["system.organization.member.manager"] }]
|
||||
"anyOf": [{ "backend": ["system.settings.account.manager"] }]
|
||||
}
|
||||
},
|
||||
"system.organization.member.department.delete": {
|
||||
"granted": {
|
||||
"anyOf": [{ "backend": ["system.organization.member.manager"] }]
|
||||
"anyOf": [{ "backend": ["system.settings.account.manager"] }]
|
||||
}
|
||||
},
|
||||
"system.organization.team.view": {
|
||||
"system.workspace.team.view_all": {
|
||||
"granted": {
|
||||
"anyOf": [{ "backend": ["system.organization.team.view"] }]
|
||||
"anyOf": [{ "backend": ["system.workspace.team.view_all"] }]
|
||||
}
|
||||
},
|
||||
"system.organization.team.add": {
|
||||
"granted": {
|
||||
"anyOf": [{ "backend": ["system.organization.team.manager"] }]
|
||||
"anyOf": [{ "backend": ["system.workspace.team.create"] }]
|
||||
}
|
||||
},
|
||||
"system.organization.team.edit": {
|
||||
"granted": {
|
||||
"anyOf": [{ "backend": ["system.organization.team.manager"] }]
|
||||
"anyOf": [{ "backend": ["system.workspace.team.manager"] }]
|
||||
}
|
||||
},
|
||||
"system.organization.team.delete": {
|
||||
"granted": {
|
||||
"anyOf": [{ "backend": ["system.organization.team.manager"] }]
|
||||
"anyOf": [{ "backend": ["system.workspace.team.manager"] }]
|
||||
}
|
||||
},
|
||||
"system.organization.team.running": {
|
||||
"granted": {
|
||||
"anyOf": [{ "backend": ["system.organization.team.manager"] }]
|
||||
"anyOf": [{ "backend": ["system.workspace.team.manager"] }]
|
||||
}
|
||||
},
|
||||
"system.organization.role.view": {
|
||||
"granted": {
|
||||
"anyOf": [{ "backend": ["system.organization.role.view_system_role","system.organization.role.view_team_role"] }]
|
||||
"anyOf": [{ "backend": ["system.settings.role.view"] }]
|
||||
}
|
||||
},
|
||||
"system.organization.role.system.view": {
|
||||
"granted": {
|
||||
"anyOf": [{ "backend": ["system.organization.role.view_system_role"] }]
|
||||
"anyOf": [{ "backend": ["system.settings.role.view"] }]
|
||||
}
|
||||
},
|
||||
"system.organization.role.system.add": {
|
||||
@@ -101,7 +101,7 @@ export const PERMISSION_DEFINITION = [
|
||||
},
|
||||
"system.organization.role.team.view": {
|
||||
"granted": {
|
||||
"anyOf": [{ "backend": ["system.organization.role.view_team_role"] }]
|
||||
"anyOf": [{ "backend": ["system.settings.role.view"] }]
|
||||
}
|
||||
},
|
||||
"system.organization.role.team.add": {
|
||||
@@ -121,22 +121,22 @@ export const PERMISSION_DEFINITION = [
|
||||
},
|
||||
"system.api_market.service_classification.view": {
|
||||
"granted": {
|
||||
"anyOf": [{ "backend": ["system.settings.service_classification.view"] }]
|
||||
"anyOf": [{ "backend": ["system.settings.general.view"] }]
|
||||
}
|
||||
},
|
||||
"system.api_market.service_classification.add": {
|
||||
"granted": {
|
||||
"anyOf": [{ "backend": ["system.settings.service_classification.manager"] }]
|
||||
"anyOf": [{ "backend": ["system.settings.general.manager"] }]
|
||||
}
|
||||
},
|
||||
"system.api_market.service_classification.edit": {
|
||||
"granted": {
|
||||
"anyOf": [{ "backend": ["system.settings.service_classification.manager"] }]
|
||||
"anyOf": [{ "backend": ["system.settings.general.manager"] }]
|
||||
}
|
||||
},
|
||||
"system.api_market.service_classification.delete": {
|
||||
"granted": {
|
||||
"anyOf": [{ "backend": ["system.settings.service_classification.manager"] }]
|
||||
"anyOf": [{ "backend": ["system.settings.general.manager"] }]
|
||||
}
|
||||
},
|
||||
"system.devops.system_setting.view": {
|
||||
@@ -149,94 +149,94 @@ export const PERMISSION_DEFINITION = [
|
||||
"anyOf": [{ "backend": ["system.settings.general.manager"] }]
|
||||
}
|
||||
},
|
||||
"system.dashboard.run_view.view":{
|
||||
"system.analysis.run_view.view":{
|
||||
"granted": {
|
||||
"anyOf": [{ "backend": ['system.dashboard.run_view.view'] }]
|
||||
"anyOf": [{ "backend": ['system.analysis.run_view.view'] }]
|
||||
}
|
||||
},
|
||||
"system.devops.data_source.view":{
|
||||
"system.settings.data_source.view":{
|
||||
"granted":{
|
||||
"anyOf":[{"backend":['system.devops.data_source.view']}]
|
||||
"anyOf":[{"backend":['system.settings.data_source.view']}]
|
||||
}
|
||||
},
|
||||
"system.devops.data_source.edit":{
|
||||
"granted":{
|
||||
"anyOf":[{"backend":['system.devops.data_source.manager']}]
|
||||
"anyOf":[{"backend":['system.settings.data_source.manager']}]
|
||||
}
|
||||
},
|
||||
"system.devops.cluster.view": {
|
||||
"system.settings.api_gateway.view": {
|
||||
"granted": {
|
||||
"anyOf": [{ "backend": ["system.devops.cluster.view"] }]
|
||||
"anyOf": [{ "backend": ["system.settings.api_gateway.view"] }]
|
||||
}
|
||||
},
|
||||
"system.devops.cluster.add": {
|
||||
"granted": {
|
||||
"anyOf": [{ "backend": ["system.devops.cluster.manager"] }]
|
||||
"anyOf": [{ "backend": ["system.settings.api_gateway.manager"] }]
|
||||
}
|
||||
},
|
||||
"system.devops.cluster.edit": {
|
||||
"granted": {
|
||||
"anyOf": [{ "backend": ["system.devops.cluster.manager"] }]
|
||||
"anyOf": [{ "backend": ["system.settings.api_gateway.manager"] }]
|
||||
}
|
||||
},
|
||||
"system.devops.cluster.delete": {
|
||||
"granted": {
|
||||
"anyOf": [{ "backend": ["system.devops.cluster.manager"] }]
|
||||
"anyOf": [{ "backend": ["system.settings.api_gateway.manager"] }]
|
||||
}
|
||||
},
|
||||
"system.devops.ai_provider.view": {
|
||||
"system.settings.ai_provider.view": {
|
||||
"granted": {
|
||||
"anyOf": [{ "backend": ["system.devops.ai_provider.view"] }]
|
||||
"anyOf": [{ "backend": ["system.settings.ai_provider.view"] }]
|
||||
}
|
||||
},
|
||||
"system.devops.ai_provider.edit": {
|
||||
"granted": {
|
||||
"anyOf": [{ "backend": ["system.devops.ai_provider.manager"] }]
|
||||
"anyOf": [{ "backend": ["system.settings.ai_provider.manager"] }]
|
||||
}
|
||||
},
|
||||
"system.devops.ssl_certificate.view": {
|
||||
"system.settings.ssl_certificate.view": {
|
||||
"granted": {
|
||||
"anyOf": [{ "backend": ["system.devops.ssl_certificate.view"] }]
|
||||
"anyOf": [{ "backend": ["system.settings.ssl_certificate.view"] }]
|
||||
}
|
||||
},
|
||||
"system.devops.ssl_certificate.add": {
|
||||
"granted": {
|
||||
"anyOf": [{ "backend": ["system.devops.ssl_certificate.manager"] }]
|
||||
"anyOf": [{ "backend": ["system.settings.ssl_certificate.manager"] }]
|
||||
}
|
||||
},
|
||||
"system.devops.ssl_certificate.edit": {
|
||||
"granted": {
|
||||
"anyOf": [{ "backend": ["system.devops.ssl_certificate.manager"] }]
|
||||
"anyOf": [{ "backend": ["system.settings.ssl_certificate.manager"] }]
|
||||
}
|
||||
},
|
||||
"system.devops.ssl_certificate.delete": {
|
||||
"granted": {
|
||||
"anyOf": [{ "backend": ["system.devops.ssl_certificate.manager"] }]
|
||||
"anyOf": [{ "backend": ["system.settings.ssl_certificate.manager"] }]
|
||||
}
|
||||
},
|
||||
"system.devops.log_configuration.view": {
|
||||
"system.settings.log_configuration.view": {
|
||||
"granted": {
|
||||
"anyOf": [{ "backend": ["system.devops.log_configuration.view"] }]
|
||||
"anyOf": [{ "backend": ["system.settings.log_configuration.view"] }]
|
||||
}
|
||||
},
|
||||
"system.devops.log_configuration.add": {
|
||||
"granted": {
|
||||
"anyOf": [{ "backend": ["system.devops.log_configuration.manager"] }]
|
||||
"anyOf": [{ "backend": ["system.settings.log_configuration.manager"] }]
|
||||
}
|
||||
},
|
||||
"system.devops.log_configuration.edit": {
|
||||
"granted": {
|
||||
"anyOf": [{ "backend": ["system.devops.log_configuration.manager"] }]
|
||||
"anyOf": [{ "backend": ["system.settings.log_configuration.manager"] }]
|
||||
}
|
||||
},
|
||||
"system.devops.log_configuration.publish": {
|
||||
"granted": {
|
||||
"anyOf": [{ "backend": ["system.devops.log_configuration.manager"] }]
|
||||
"anyOf": [{ "backend": ["system.settings.log_configuration.manager"] }]
|
||||
}
|
||||
},
|
||||
"system.devops.log_configuration.delete": {
|
||||
"granted": {
|
||||
"anyOf": [{ "backend": ["system.devops.log_configuration.manager"] }]
|
||||
"anyOf": [{ "backend": ["system.settings.log_configuration.manager"] }]
|
||||
}
|
||||
},
|
||||
"system.workspace.application.view_all": {
|
||||
@@ -244,19 +244,24 @@ export const PERMISSION_DEFINITION = [
|
||||
"anyOf": [{ "backend": ["system.workspace.application.view_all"] }]
|
||||
}
|
||||
},
|
||||
"system.workspace.application.edit": {
|
||||
"granted": {
|
||||
"anyOf": [{ "backend": ["system.workspace.application.manager_all"] }]
|
||||
}
|
||||
},
|
||||
"system.workspace.service.view_all": {
|
||||
"granted": {
|
||||
"anyOf": [{ "backend": ["system.workspace.service.view_all"] }]
|
||||
}
|
||||
},
|
||||
"system.workspace.team.view_all": {
|
||||
"system.workspace.service.edit": {
|
||||
"granted": {
|
||||
"anyOf": [{ "backend": ["system.workspace.team.view_all"] }]
|
||||
"anyOf": [{ "backend": ["system.workspace.service.manager_all"] }]
|
||||
}
|
||||
},
|
||||
"system.workspace.api_market.view": {
|
||||
"system.api_portal.api_portal.view": {
|
||||
"granted": {
|
||||
"anyOf": [{ "backend": ["system.workspace.api_market.view"] }]
|
||||
"anyOf": [{ "backend": ["system.api_portal.api_portal.view"] }]
|
||||
}
|
||||
},
|
||||
"system.dashboard.dashboard.view": {
|
||||
@@ -284,6 +289,21 @@ export const PERMISSION_DEFINITION = [
|
||||
"anyOf": [{ "backend": ["team.service.api_doc.manager"] }]
|
||||
}
|
||||
},
|
||||
"team.service.service_intro.view": {
|
||||
"granted": {
|
||||
"anyOf": [{ "backend": ["team.service.service_intro.view"] }]
|
||||
}
|
||||
},
|
||||
"team.service.service_intro.add": {
|
||||
"granted": {
|
||||
"anyOf": [{ "backend": ["team.service.service_intro.manager"] }]
|
||||
}
|
||||
},
|
||||
"team.service.service_intro.edit": {
|
||||
"granted": {
|
||||
"anyOf": [{ "backend": ["team.service.service_intro.manager"] }]
|
||||
}
|
||||
},
|
||||
"team.service.api_doc.import": {
|
||||
"granted": {
|
||||
"anyOf": [{ "backend": ["team.service.api_doc.manager"] }]
|
||||
@@ -291,22 +311,22 @@ export const PERMISSION_DEFINITION = [
|
||||
},
|
||||
"team.service.router.view": {
|
||||
"granted": {
|
||||
"anyOf": [{ "backend": ["team.service.router.view"] }]
|
||||
"anyOf": [{ "backend": ["team.service.api.view"] }]
|
||||
}
|
||||
},
|
||||
"team.service.router.add": {
|
||||
"granted": {
|
||||
"anyOf": [{ "backend": ["team.service.router.manager"] }]
|
||||
"anyOf": [{ "backend": ["team.service.api.manager"] }]
|
||||
}
|
||||
},
|
||||
"team.service.router.edit": {
|
||||
"granted": {
|
||||
"anyOf": [{ "backend": ["team.service.router.manager"] }]
|
||||
"anyOf": [{ "backend": ["team.service.api.manager"] }]
|
||||
}
|
||||
},
|
||||
"team.service.router.delete": {
|
||||
"granted": {
|
||||
"anyOf": [{ "backend": ["team.service.router.manager"] }]
|
||||
"anyOf": [{ "backend": ["team.service.api.manager"] }]
|
||||
}
|
||||
},
|
||||
"team.service.upstream.view": {
|
||||
@@ -391,92 +411,92 @@ export const PERMISSION_DEFINITION = [
|
||||
},
|
||||
"team.service.service.view": {
|
||||
"granted": {
|
||||
"anyOf": [{ "backend": [""] }]
|
||||
"anyOf": [{ "backend": ["team.team.service.view"] }]
|
||||
}
|
||||
},
|
||||
"team.service.service.add": {
|
||||
"granted": {
|
||||
"anyOf": [{ "backend": ["team.service.service.manager"] }]
|
||||
"anyOf": [{ "backend": ["team.team.service.manager","team.service.service.manager"] }]
|
||||
}
|
||||
},
|
||||
"team.service.service.edit": {
|
||||
"granted": {
|
||||
"anyOf": [{ "backend": ["team.service.service.manager"] }]
|
||||
"anyOf": [{ "backend": ["team.team.service.manager","team.service.service.manager"] }]
|
||||
}
|
||||
},
|
||||
"team.service.service.delete": {
|
||||
"granted": {
|
||||
"anyOf": [{ "backend": ["team.service.service.manager"] }]
|
||||
"anyOf": [{ "backend": ["team.team.service.manager","team.service.service.manager"] }]
|
||||
}
|
||||
},
|
||||
"team.application.subscription.view": {
|
||||
"granted": {
|
||||
"anyOf": [{ "backend": ["team.application.subscription.view"] }]
|
||||
"anyOf": [{ "backend": ["team.consumer.subscription.view_subscribed_service"] }]
|
||||
}
|
||||
},
|
||||
"team.application.subscription.add": {
|
||||
"granted": {
|
||||
"anyOf": [{ "backend": ["team.application.subscription.manager"] }]
|
||||
"anyOf": [{ "backend": ["team.consumer.subscription.subscribe"] }]
|
||||
}
|
||||
},
|
||||
"team.application.subscription.edit": {
|
||||
"granted": {
|
||||
"anyOf": [{ "backend": ["team.application.subscription.manager"] }]
|
||||
"anyOf": [{ "backend": ["team.consumer.subscription.manager_subscribed_services"] }]
|
||||
}
|
||||
},
|
||||
"team.application.subscription.delete": {
|
||||
"granted": {
|
||||
"anyOf": [{ "backend": ["team.application.subscription.manager"] }]
|
||||
"anyOf": [{ "backend": ["team.team.consumer.subscription.manager_subscribed_services"] }]
|
||||
}
|
||||
},
|
||||
"team.application.application.view": {
|
||||
"granted": {
|
||||
"anyOf": [{ "backend": ["team.application.application.view"] }]
|
||||
"anyOf": [{ "backend": ["team.team.consumer.view"] }]
|
||||
}
|
||||
},
|
||||
"team.application.application.add": {
|
||||
"granted": {
|
||||
"anyOf": [{ "backend": ["team.application.application.manager"] }]
|
||||
"anyOf": [{ "backend": ['team.team.consumer.manager',"team.consumer.application.manager"] }]
|
||||
}
|
||||
},
|
||||
"team.application.application.edit": {
|
||||
"granted": {
|
||||
"anyOf": [{ "backend": ["team.application.application.manager"] }]
|
||||
"anyOf": [{ "backend": ['team.team.consumer.manager',"team.consumer.application.manager"] }]
|
||||
}
|
||||
},
|
||||
"team.application.application.delete": {
|
||||
"granted": {
|
||||
"anyOf": [{ "backend": ["team.application.application.manager"] }]
|
||||
"anyOf": [{ "backend": ['team.team.consumer.manager',"team.consumer.application.manager"] }]
|
||||
}
|
||||
},
|
||||
"team.application.authorization.view": {
|
||||
"team.consumer.authorization.view": {
|
||||
"granted": {
|
||||
"anyOf": [{ "backend": ["team.application.authorization.view"] }]
|
||||
"anyOf": [{ "backend": ["team.consumer.authorization.view"] }]
|
||||
}
|
||||
},
|
||||
"team.application.authorization.add": {
|
||||
"granted": {
|
||||
"anyOf": [{ "backend": ["team.application.authorization.manager"] }]
|
||||
"anyOf": [{ "backend": ["team.consumer.authorization.manager"] }]
|
||||
}
|
||||
},
|
||||
"team.application.authorization.edit": {
|
||||
"granted": {
|
||||
"anyOf": [{ "backend": ["team.application.authorization.manager"] }]
|
||||
"anyOf": [{ "backend": ["team.consumer.authorization.manager"] }]
|
||||
}
|
||||
},
|
||||
"team.application.authorization.delete": {
|
||||
"granted": {
|
||||
"anyOf": [{ "backend": ["team.application.authorization.manager"] }]
|
||||
"anyOf": [{ "backend": ["team.consumer.authorization.manager"] }]
|
||||
}
|
||||
},
|
||||
"team.application.authorization.cancelSubApply": {
|
||||
"granted": {
|
||||
"anyOf": [{ "backend": ["team.application.authorization.manager"] }]
|
||||
"anyOf": [{ "backend": ["team.consumer.authorization.manager"] }]
|
||||
}
|
||||
},
|
||||
"team.application.authorization.cancelSub": {
|
||||
"granted": {
|
||||
"anyOf": [{ "backend": ["team.application.authorization.manager"] }]
|
||||
"anyOf": [{ "backend": ["team.consumer.authorization.manager"] }]
|
||||
}
|
||||
},
|
||||
"team.team.team.view": {
|
||||
|
||||
@@ -7,7 +7,7 @@ system:
|
||||
cname: '成员'
|
||||
value: 'member'
|
||||
access:
|
||||
- system.organization.member.view
|
||||
- system.settings.account.view
|
||||
- system.organization.member.add
|
||||
- system.organization.member.edit
|
||||
- system.organization.member.delete
|
||||
@@ -18,7 +18,7 @@ system:
|
||||
- name: team_manager
|
||||
cname: '团队管理'
|
||||
desc: '团队管理'
|
||||
- system.organization.team.view
|
||||
- system.workspace.team.view_all
|
||||
- system.organization.team.add
|
||||
- system.organization.team.edit
|
||||
- system.organization.team.delete
|
||||
@@ -55,7 +55,7 @@ system:
|
||||
cname: 集群
|
||||
value: 'cluster'
|
||||
children:
|
||||
- system.devops.cluster.view
|
||||
- system.settings.api_gateway.view
|
||||
- system.devops.cluster.add
|
||||
- system.devops.cluster.edit
|
||||
- system.devops.cluster.delete
|
||||
@@ -63,7 +63,7 @@ system:
|
||||
cname: 证书
|
||||
value: 'ssl_certificate'
|
||||
children:
|
||||
- system.devops.ssl_certificate.view
|
||||
- system.settings.ssl_certificate.view
|
||||
- system.devops.ssl_certificate.add
|
||||
- system.devops.ssl_certificate.edit
|
||||
- system.devops.ssl_certificate.delete
|
||||
@@ -71,7 +71,7 @@ system:
|
||||
cname: 日志
|
||||
value: 'log_configuration'
|
||||
children:
|
||||
- system.devops.log_configuration.view
|
||||
- system.settings.log_configuration.view
|
||||
- system.devops.log_configuration.add
|
||||
- system.devops.log_configuration.edit
|
||||
- system.devops.log_configuration.publish
|
||||
@@ -99,7 +99,7 @@ system:
|
||||
cname: API市场
|
||||
value: 'api_market'
|
||||
children:
|
||||
- system.workspace.api_market.view
|
||||
- system.api_portal.api_portal.view
|
||||
team:
|
||||
- name: service
|
||||
cname: 服务
|
||||
@@ -172,8 +172,8 @@ team:
|
||||
cname: 访问授权
|
||||
value: 'authorization'
|
||||
children:
|
||||
- team.application.authorization.view
|
||||
- team.application.authorization.manager
|
||||
- team.consumer.authorization.view
|
||||
- team.consumer.authorization.manager
|
||||
- team.application.authorization.add
|
||||
- team.application.authorization.edit
|
||||
- team.application.authorization.delete
|
||||
|
||||
@@ -7,6 +7,8 @@ export type UserInfoType = {
|
||||
email: string
|
||||
phone: string
|
||||
avatar: string
|
||||
type:string
|
||||
|
||||
}
|
||||
|
||||
export type UserProfileProps = {
|
||||
|
||||
@@ -1,26 +0,0 @@
|
||||
/*
|
||||
* @Date: 2024-01-31 15:00:11
|
||||
* @LastEditors: maggieyyy
|
||||
* @LastEditTime: 2024-05-10 17:03:03
|
||||
* @FilePath: \frontend\packages\core\src\hooks\crypto.ts
|
||||
*/
|
||||
// import CryptoJS from 'crypto-js';
|
||||
|
||||
// export const useCrypto = () => {
|
||||
// const key = '1e42=7838a1vfc6n';
|
||||
|
||||
// const encryptByEnAES = (secretKey: string, data: string, initializationVector?: string): string => {
|
||||
// const iv = CryptoJS.enc.Latin1.parse(initializationVector || key);
|
||||
// const keyForEncryption = CryptoJS.enc.Latin1.parse(CryptoJS.MD5(secretKey).toString());
|
||||
|
||||
// const cipher = CryptoJS.AES.encrypt(data, keyForEncryption, {
|
||||
// iv,
|
||||
// mode: CryptoJS.mode.CBC,
|
||||
// padding: CryptoJS.pad.Pkcs7,
|
||||
// });
|
||||
|
||||
// return CryptoJS.enc.Base64.stringify(cipher.ciphertext);
|
||||
// };
|
||||
|
||||
// return { encryptByEnAES };
|
||||
// };
|
||||
@@ -1,9 +1,4 @@
|
||||
/*
|
||||
* @Date: 2024-06-04 14:58:33
|
||||
* @LastEditors: maggieyyy
|
||||
* @LastEditTime: 2024-06-04 15:39:24
|
||||
* @FilePath: \frontend\packages\common\src\index.css
|
||||
*/
|
||||
|
||||
@tailwind base;
|
||||
@tailwind components;
|
||||
@tailwind utilities;
|
||||
@@ -15,7 +15,7 @@ import localJa_JP from './scan/ja-JP.json'; // 本地翻译英文文件
|
||||
// import config from '../../../../i18next-scanner.config.js';
|
||||
|
||||
const resources = {
|
||||
'zh-CH': {
|
||||
'zh-CN': {
|
||||
translation: localZh_CN,
|
||||
...zhCN
|
||||
},
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
{
|
||||
"工作空间": "Kc0e5ef9f",
|
||||
"首页": "K4de11e23",
|
||||
"应用": "Kfe93ef35",
|
||||
"服务": "Kb58e0c3f",
|
||||
"消费者": "K7acfcfad",
|
||||
"团队": "Kc9e489f5",
|
||||
"API 市场": "K61c89f5f",
|
||||
"仪表盘": "K16d71239",
|
||||
@@ -95,8 +95,8 @@
|
||||
"只读成员": "Ke41d7451",
|
||||
"服务管理员": "Kf99e8b66",
|
||||
"服务开发者": "Kda8db57a",
|
||||
"应用开发者": "K216a1ac7",
|
||||
"应用管理员": "K27924db",
|
||||
"消费者开发者": "Kc8054dba",
|
||||
"消费者管理员": "Keb1673a6",
|
||||
"驱动名称": "K8dc5c723",
|
||||
"请求失败数": "Kda249fe8",
|
||||
"转发失败数": "Kcf2df651",
|
||||
@@ -131,8 +131,8 @@
|
||||
"上传 OpenAPI 文档 (.json/.yaml)": "K6206e4ad",
|
||||
"替换 OpenAPI 文档 (.json/.yaml)": "Kfba46e6d",
|
||||
"打开 OpenAPI YAML 编辑器": "Kdac8ce7e",
|
||||
"无需审核:允许任何应用调用该服务": "Kffd7e274",
|
||||
"人工审核:仅允许通过人工审核的应用调用该服务": "K8a8b13e4",
|
||||
"无需审核:允许任何消费者调用该服务": "K1fc2cc28",
|
||||
"人工审核:仅允许通过人工审核的消费者调用该服务": "K8dabb98e",
|
||||
"永久": "Kbfe02d7f",
|
||||
"否": "K1e9c479e",
|
||||
"是": "Kaddfcb6b",
|
||||
@@ -150,7 +150,7 @@
|
||||
"版本状态": "Kcbf39b82",
|
||||
"创建人": "K339d15b5",
|
||||
"审核时间": "K7194cea2",
|
||||
"申请方-应用": "K831aa6c0",
|
||||
"申请方-消费者": "K7c1fb123",
|
||||
"审核状态": "K7ad449bc",
|
||||
"审核人": "K3b3a98ce",
|
||||
"来源": "K61b62ace",
|
||||
@@ -207,6 +207,33 @@
|
||||
"每小时": "Kf00f01ca",
|
||||
"每天": "Kfcda87fc",
|
||||
"每周": "K29ec75dc",
|
||||
"上线结果": "K93c2696e",
|
||||
"订阅服务数量": "K6e32a344",
|
||||
"鉴权数量": "Ka701316",
|
||||
"列表": "K9eaa2eb6",
|
||||
"块": "Kfaec39e9",
|
||||
"HTTP 请求头": "K76036e25",
|
||||
"全等匹配": "K44607e3f",
|
||||
"前缀匹配": "Kc287500a",
|
||||
"后缀匹配": "Kfc0b1147",
|
||||
"子串匹配": "Ka4a92043",
|
||||
"非等匹配": "K30b2e44f",
|
||||
"空值匹配": "Kb1587991",
|
||||
"存在匹配": "K1e97dbd8",
|
||||
"不存在匹配": "Kc8ee3e62",
|
||||
"区分大小写的正则匹配": "K87c5a801",
|
||||
"不区分大小写的正则匹配": "K95f062f1",
|
||||
"任意匹配": "Kfbd230a5",
|
||||
"驳回": "Kd85208a3",
|
||||
"已订阅": "Kad6aa439",
|
||||
"取消申请": "K9a68443b",
|
||||
"透传客户端请求 Host": "Kaeba0229",
|
||||
"使用上游服务 Host": "K6d7e2fd0",
|
||||
"重写 Host": "K31332633",
|
||||
"动态服务发现": "K2c2bc64f",
|
||||
"地址": "K78b1ca25",
|
||||
"新增": "K1644b775",
|
||||
"申请方消费者": "Kec91f0db",
|
||||
"暂无操作权限,请联系管理员分配。": "K23fda291",
|
||||
"微信小程序": "K4618cb0a",
|
||||
"获取文件,需填路径": "Ka854f511",
|
||||
@@ -369,7 +396,7 @@
|
||||
"创建 AI 服务和 API": "Kc057704a",
|
||||
"创建 AI 类型的服务,并且你可以将 Prompt 提示词设置为一个 API,简化使用 AI 的流程。": "K76bb4a09",
|
||||
"创建调用 Token": "K71b2c70f",
|
||||
"为了安全地调用 API,你需要创建一个应用以及Token。": "K9bdd8403",
|
||||
"为了安全地调用 API,你需要创建一个消费者以及Token。": "Kdea9a418",
|
||||
"调用": "Kc5738b6c",
|
||||
"现在你可以通过 Token 来调用这些 API。": "Kd6d7ca1f",
|
||||
"快速接入 REST API": "K86cf95f",
|
||||
@@ -379,13 +406,13 @@
|
||||
"核心功能": "K2cdbb773",
|
||||
"账号与角色": "K3378c50d",
|
||||
"邀请你的团队成员加入 APIPark,共同管理和调用 API。": "Kda5bb930",
|
||||
"团队中包含了人员、应用和服务,不同团队之间的应用和服务数据是隔离的,可用于管理企业内部不同的部门/项目组/团队。": "Kc8239422",
|
||||
"团队中包含了人员、消费者和服务,不同团队之间的消费者和服务数据是隔离的,可用于管理企业内部不同的部门/项目组/团队。": "Keee27105",
|
||||
"服务内包含一组 API,并且可以发布到 API 市场被其他团队使用。": "Kd5be0cd7",
|
||||
"权限管理": "K62e89ee7",
|
||||
"订阅服务": "K8f7808e6",
|
||||
"如果需要调用某个服务的 API,需要先订阅该服务,并且等待提供服务的团队审核后才可发起 API 请求。": "Kf2410413",
|
||||
"审核订阅申请": "K6c2e44b8",
|
||||
"提供服务的团队可以审核来自其他团队的订阅申请,审核通过后的应用才可发起 API 请求。": "Ka0a8840a",
|
||||
"提供服务的团队可以审核来自其他团队的订阅申请,审核通过后的消费者才可发起 API 请求。": "Kaa717866",
|
||||
"APIPark 提供详尽的 API 调用日志,帮助企业监控、分析和审计 API 的运行状况。": "K3453272",
|
||||
"Hello!欢迎使用 APIPark": "Kd518ba3e",
|
||||
"你能通过 APIPark 快速在企业内部构建 API 开放门户/市场,享受极致的转发性能、API 可观测、服务治理、多租户管理、订阅审核流程等诸多好处。": "K7e04ea16",
|
||||
@@ -396,10 +423,10 @@
|
||||
"了解 APIPark 如何更好地管理 API 和 AI": "K1afaf20e",
|
||||
"了解更多功能": "K48f7e21f",
|
||||
"隐藏该教程": "K698296e2",
|
||||
"登录": "Kd2c1a316",
|
||||
"请输入账号": "Kf076f63c",
|
||||
"请输入密码": "K25c895d5",
|
||||
"密码": "K551b0348",
|
||||
"登录": "Kd2c1a316",
|
||||
"访客模式": "K192b3e38",
|
||||
"您可通过访客模式查看所有页面和功能,但是无法编辑数据。访客模式仅用于了解产品功能,您可以在正式产品中关闭该功能。": "K91aa4801",
|
||||
"Version (0)-(1)": "K480045ce",
|
||||
@@ -480,6 +507,8 @@
|
||||
"只允许上传PNG、JPG或SVG格式的图片": "Ka9c08390",
|
||||
"服务名称": "K413b9869",
|
||||
"服务类型": "K9919285b",
|
||||
"AI 服务": "Kd2c34e2c",
|
||||
"REST 服务": "K62840d62",
|
||||
"默认 AI 供应商": "Kcef64f4d",
|
||||
"创建 API 时会默认选择该供应商,修改默认供应商不会影响现有 API": "K300c89d4",
|
||||
"未配置任何 AI 模型供应商,": "Kcab588a9",
|
||||
@@ -517,8 +546,8 @@
|
||||
"移除成员": "K395acc14",
|
||||
"添加成员": "Kec46a57f",
|
||||
"输入姓名查找": "K48724410",
|
||||
"搜索用户名、邮箱": "Kb9052305",
|
||||
"设置团队和成员,然后你可以在团队内创建服务和应用、订阅API,成员只能看到所属团队内的服务和应用。": "K5ece3bac",
|
||||
"输入名称查找用户": "Kf5fd27ed",
|
||||
"设置团队和成员,然后你可以在团队内创建服务和消费者、订阅API,成员只能看到所属团队内的服务和消费者。": "K4c72fb6f",
|
||||
"添加团队": "K510cdd27",
|
||||
"输入名称、ID、负责人查找团队": "K9244ae14",
|
||||
"配置团队": "Kc7b24b4b",
|
||||
@@ -538,8 +567,8 @@
|
||||
"导出": "Ka2c794a2",
|
||||
"退出全屏": "Kaf70c3b",
|
||||
"(0)调用详情": "Kd22841a4",
|
||||
"应用调用统计": "K1512e983",
|
||||
"请选择应用": "Kb4d2007f",
|
||||
"消费者调用统计": "K61cca533",
|
||||
"请选择消费者": "Kdfff59d4",
|
||||
"调用趋势": "K8c7f2d2e",
|
||||
"(0)-(1)调用趋势": "K657c3452",
|
||||
"调用量统计": "Kc04efb87",
|
||||
@@ -562,7 +591,7 @@
|
||||
"请选择服务": "Kffcfe375",
|
||||
"调用详情": "Ka65f739c",
|
||||
"API 请求量 Top10": "K89b7ac79",
|
||||
"应用调用量 Top10": "Kc0915603",
|
||||
"消费者调用量 Top10": "K386857bd",
|
||||
"服务被调用量 Top10": "Kf90b54",
|
||||
"暂无请求统计数据": "Kfb26388",
|
||||
"请求统计": "Kc8cbd8f8",
|
||||
@@ -585,9 +614,9 @@
|
||||
"万": "Ke6a935d",
|
||||
"搜索分类或标签": "Kd59290a2",
|
||||
"暂无API数据": "K6b75bdbc",
|
||||
"搜索或选择应用": "Kd8a7a689",
|
||||
"搜索或选择消费者": "Kb684c806",
|
||||
"申请理由": "K4b15d6f5",
|
||||
"应用管理": "Kb7e869a4",
|
||||
"消费者管理": "Ke0fbd1c8",
|
||||
"鉴权类型": "Kb71b5a13",
|
||||
"Iss": "K4d1465ee",
|
||||
"签名算法": "K5dcd7ed8",
|
||||
@@ -600,9 +629,9 @@
|
||||
"SK": "K31418470",
|
||||
"Apikey": "Kbfeb5297",
|
||||
"隐藏鉴权信息": "Ke64e43a",
|
||||
"应用名称": "K5168eb63",
|
||||
"应用 ID": "K546e46f",
|
||||
"删除应用": "K95764d1d",
|
||||
"消费者名称": "K67b530f",
|
||||
"消费者 ID": "K11f34de",
|
||||
"删除消费者": "Kc01002",
|
||||
"鉴权详情": "K217cb125",
|
||||
"添加鉴权": "K2bb63eca",
|
||||
"编辑鉴权": "Kd74d69b7",
|
||||
@@ -619,9 +648,11 @@
|
||||
"请确认是否取消订阅申请?": "K1856c229",
|
||||
"搜索服务": "K66ea2f0",
|
||||
"审核中": "K8adf7f8b",
|
||||
"添加应用": "K667bbbe7",
|
||||
"暂无服务描述": "Ka4b45550",
|
||||
"添加消费者": "K84c4dc71",
|
||||
"暂无消费者描述": "Kc3b7bfa8",
|
||||
"创建并管理自己的消费者实体,每个消费者可以订阅多个API服务,确保在调用之前已获得相应权限。你可以为消费者生成 API 密钥等鉴权方式,用于安全地调用 API 服务": "K5c4e2865",
|
||||
"订阅的服务数量:已通过 (0) 个,申请中 (1) 个": "K3c7b175f",
|
||||
"输入名称、ID 查找消费者": "K3a6f905d",
|
||||
"退出测试": "Kbe3e9335",
|
||||
"服务市场": "K370a3eb2",
|
||||
"服务详情": "Kf7ec36d",
|
||||
@@ -630,14 +661,15 @@
|
||||
"Base URL": "Kc29dabf2",
|
||||
"申请": "K4aa9ed2c",
|
||||
"服务信息": "K6c060779",
|
||||
"接入应用": "K8723422e",
|
||||
"接入消费者": "Kba74f26d",
|
||||
"供应方": "Kb97544cb",
|
||||
"分类": "Kb32f0afe",
|
||||
"版本": "K81634069",
|
||||
"更新时间": "Keefda53d",
|
||||
"无标签": "K96a2f1c8",
|
||||
"暂无服务描述": "Ka4b45550",
|
||||
"API 数量": "K72b0c0b3",
|
||||
"接入应用数量": "K93d5a66e",
|
||||
"接入消费者数量": "K70b79760",
|
||||
"关联标签": "K96059c69",
|
||||
"更新者": "K8b7c2592",
|
||||
"添加 Open Api": "K32263abd",
|
||||
|
||||
@@ -1,11 +1,10 @@
|
||||
{
|
||||
"Kc0e5ef9f": "Workspace",
|
||||
"K4de11e23": "Home",
|
||||
"Kfe93ef35": "Application",
|
||||
"Kb58e0c3f": "Service",
|
||||
"Kc9e489f5": "Team",
|
||||
"K61c89f5f": "API Marketplace",
|
||||
"K16d71239": "Dashboard",
|
||||
"K61c89f5f": "API Portal",
|
||||
"K16d71239": "Analysis",
|
||||
"K714c192d": "Call Statistics",
|
||||
"Kd57dfe97": "Topology",
|
||||
"K3fe97dcc": "System Settings",
|
||||
@@ -24,7 +23,7 @@
|
||||
"K631d646f": "Open API",
|
||||
"K6535ff9c": "Account Settings",
|
||||
"Kf15499b4": "Log Out",
|
||||
"Kabbd6e6": "Documentation",
|
||||
"Kabbd6e6": "Docs",
|
||||
"K1196b104": "APIPark",
|
||||
"K1f42de3": "HTTP Status Code",
|
||||
"K4770dff4": "System Status Code",
|
||||
@@ -59,7 +58,7 @@
|
||||
"Kdeed8399": "Static Upstream Server",
|
||||
"K4ee62e8": "This API lacks (0)(1)(2), please provide.",
|
||||
"K385591f3": "Forwarding Info,",
|
||||
"K68415c14": "Documentation Info,",
|
||||
"K68415c14": "Docs Info,",
|
||||
"K133b75e9": "Upstream Info,",
|
||||
"K43fcaf94": "Success",
|
||||
"Kc71c6a9": "Online Failed",
|
||||
@@ -88,11 +87,9 @@
|
||||
"K597435c5": "Monitor",
|
||||
"Ke66a17dd": "Required",
|
||||
"K28b68036": "Illegal Character, Only English Supported",
|
||||
"K6206e4ad": "Upload OpenAPI Document (.json/.yaml)",
|
||||
"Kfba46e6d": "Replace OpenAPI Document (.json/.yaml)",
|
||||
"K6206e4ad": "Upload OpenAPI File (.json/.yaml)",
|
||||
"Kfba46e6d": "Replace OpenAPI File (.json/.yaml)",
|
||||
"Kdac8ce7e": "Open OpenAPI YAML Editor",
|
||||
"Kffd7e274": "No Review: All applications are allowed to subscribe to this service",
|
||||
"K8a8b13e4": "Manual Review: Only reviewed and approved applications can subscribe to this service",
|
||||
"Kbfe02d7f": "Permanent",
|
||||
"K1e9c479e": "No",
|
||||
"Kaddfcb6b": "Yes",
|
||||
@@ -190,7 +187,7 @@
|
||||
"K6ebca204": "Update Time",
|
||||
"Kabfe9512": "Save",
|
||||
"K51d1eb5d": "API",
|
||||
"Ka2b6d281": "API Documentation",
|
||||
"Ka2b6d281": "API Docs",
|
||||
"Kdefa9caa": "Usage Instructions",
|
||||
"K36856e71": "Publish",
|
||||
"K6382bbfd": "Subscription",
|
||||
@@ -259,7 +256,6 @@
|
||||
"Kc057704a": "Create AI Services and APIs",
|
||||
"K76bb4a09": "Create AI-based services, and you can set the prompt as an API to simplify the process of using AI.",
|
||||
"K71b2c70f": "Create Call Token",
|
||||
"K9bdd8403": "To securely call APIs, you need to create an application and a token.",
|
||||
"Kc5738b6c": "Call",
|
||||
"Kd6d7ca1f": "You can now call these APIs with the token.",
|
||||
"K86cf95f": "Quickly Integrate REST API",
|
||||
@@ -269,13 +265,11 @@
|
||||
"K2cdbb773": "Core Features",
|
||||
"K3378c50d": "Account and Role",
|
||||
"Kda5bb930": "Invite your team members to APIPark to collaboratively manage and call APIs.",
|
||||
"Kc8239422": "Teams include personnel, applications, and services. Data between different teams is isolated, and can be used to manage different departments/project teams/teams within the enterprise.",
|
||||
"Kd5be0cd7": "Services include a set of APIs and can be published to the API Marketplace for use by other teams.",
|
||||
"K62e89ee7": "Permission Management",
|
||||
"K8f7808e6": "Subscribe to Services",
|
||||
"Kf2410413": "To call an API from a service, you need to subscribe to that service and wait for approval from the providing team before initiating the API request.",
|
||||
"K6c2e44b8": "Review Subscription",
|
||||
"Ka0a8840a": "Review subscription requests from other applications. Only approved requests can initiate API calls.",
|
||||
"K3453272": "APIPark provides detailed API call logs, helping enterprises monitor, analyze, and audit API operations.",
|
||||
"Kd518ba3e": "Hello! Welcome to APIPark",
|
||||
"K7e04ea16": "🦄 APIPark is an open-source, all-in-one AI gateway and API developer portal, enabling enterprises and developers to quickly integrate over 100 AI models, combine AI models and prompts into new APIs, and standardize all AI request data formats, ensuring that switching AI models or adjusting prompts does not affect your APP or microservice. Additionally, APIPark’s developer portal allows you to share APIs within your team, manage applications that call your APIs, and ensure API security, while monitoring your AI API usage with clear charts.",
|
||||
@@ -325,7 +319,7 @@
|
||||
"Ka46b9b24": "Data Source Type",
|
||||
"Kbb0cdcd0": "Data Source Address",
|
||||
"Kd9dfb884": "Organization",
|
||||
"K3e770a75": "Authentication Token",
|
||||
"K3e770a75": "Credentials Token",
|
||||
"K8ef69ee2": "Key",
|
||||
"Kba3507d6": "Upload Key",
|
||||
"K93ac0f23": "Key file suffix is usually .key",
|
||||
@@ -371,7 +365,7 @@
|
||||
"Kcef64f4d": "Default AI Provider",
|
||||
"Kcab588a9": "No AI model provider set,",
|
||||
"Kb9b56111": "Set Now",
|
||||
"Kcf756b7a": "API Call Prefix",
|
||||
"Kcf756b7a": "API Request Prefix",
|
||||
"K13edc043": "As a prefix for all APIs in the service, e.g., host/{service_name}/{api_path}, cannot be modified once saved.",
|
||||
"Kf52a584d": "Service Category",
|
||||
"K72b21be5": "Set the category in which the service will be displayed in the service marketplace",
|
||||
@@ -397,15 +391,14 @@
|
||||
"K813e1c0a": "Team Name",
|
||||
"K692f5aa6": "Team ID",
|
||||
"K5de0bc2": "Team ID can be used to retrieve the team, cannot be modified once saved.",
|
||||
"Ka63dd985": "Team Leader",
|
||||
"Ka6bcd272": "The leader has management authority over the team, services, and members within the team",
|
||||
"Ka63dd985": "Team Administrator",
|
||||
"Ka6bcd272": "The Administrator has management authority over the team, services, and members within the team",
|
||||
"Ka2012bdd": "Delete Team",
|
||||
"Kbde1f3d": "Service data must be cleared before deletion",
|
||||
"K395acc14": "Remove",
|
||||
"Kec46a57f": "Add Member",
|
||||
"K48724410": "Enter Name to Search",
|
||||
"Kb9052305": "Search Username, Email",
|
||||
"K5ece3bac": "Set up teams and members. You can then create services and applications, subscribe to APIs within the team. Members can only see services and applications within their team.",
|
||||
"K510cdd27": "Add Team",
|
||||
"K9244ae14": "Enter Name, ID, Person in Charge to Search Teams",
|
||||
"Kc7b24b4b": "Configure Team",
|
||||
@@ -425,8 +418,6 @@
|
||||
"Ka2c794a2": "Export",
|
||||
"Kaf70c3b": "Exit Fullscreen",
|
||||
"Kd22841a4": "(0) Call Details",
|
||||
"K1512e983": "Application Call Statistics",
|
||||
"Kb4d2007f": "Please Select Application",
|
||||
"K8c7f2d2e": "Call Trend",
|
||||
"K657c3452": "(0)-(1) Call Trend",
|
||||
"Kc04efb87": "Call Volume Statistics",
|
||||
@@ -449,7 +440,6 @@
|
||||
"Kffcfe375": "Please Select Service",
|
||||
"Ka65f739c": "Call Details",
|
||||
"K89b7ac79": "API Top 10",
|
||||
"Kc0915603": "Application Top 10",
|
||||
"Kf90b54": "Service Top 10",
|
||||
"Kfb26388": "No Request Data",
|
||||
"Kc8cbd8f8": "Request Statistics",
|
||||
@@ -472,10 +462,8 @@
|
||||
"Ke6a935d": "Ten Thousand",
|
||||
"Kd59290a2": "Search Category or Tag",
|
||||
"K6b75bdbc": "No API Data",
|
||||
"Kd8a7a689": "Search or Select Application",
|
||||
"K4b15d6f5": "Application Reason",
|
||||
"Kb7e869a4": "Application Settings",
|
||||
"Kb71b5a13": "Authentication Type",
|
||||
"Kb71b5a13": "Credentials Type",
|
||||
"K4d1465ee": "ISS",
|
||||
"K5dcd7ed8": "Signature Algorithm",
|
||||
"K5b0eedd3": "Secret",
|
||||
@@ -487,13 +475,10 @@
|
||||
"K31418470": "SK",
|
||||
"Kbfeb5297": "API Key",
|
||||
"K1a78e6f0": "Expiration Time",
|
||||
"Ke64e43a": "Hide Authentication Info",
|
||||
"K5168eb63": "Application Name",
|
||||
"K546e46f": "Application ID",
|
||||
"K95764d1d": "Delete Application",
|
||||
"K217cb125": "Authentication Details",
|
||||
"K2bb63eca": "Add Authentication",
|
||||
"Kd74d69b7": "Edit Authentication",
|
||||
"Ke64e43a": "Hide Credentials Info",
|
||||
"K217cb125": "Credentials Details",
|
||||
"K2bb63eca": "Add Credentials",
|
||||
"Kd74d69b7": "Edit Credentials",
|
||||
"K9cbe1e0": "Modify",
|
||||
"Kb6e9328f": "Authorization",
|
||||
"Kd23d1716": "Add Authorization",
|
||||
@@ -507,7 +492,6 @@
|
||||
"K1856c229": "Are you sure you want to cancel the subscription request?",
|
||||
"K66ea2f0": "Search Services",
|
||||
"K8adf7f8b": "Under Review",
|
||||
"K667bbbe7": "Add Application",
|
||||
"Ka4b45550": "No Service Description",
|
||||
"K3c7b175f": "Number of Subscribed Services: (0) Approved, (1) Pending",
|
||||
"Kbe3e9335": "Exit Test",
|
||||
@@ -517,7 +501,6 @@
|
||||
"K59cdbec3": "Intro",
|
||||
"K4aa9ed2c": "Subscribe",
|
||||
"K6c060779": "Service Information",
|
||||
"K8723422e": "Access Application",
|
||||
"Kb97544cb": "Provider",
|
||||
"Kb32f0afe": "Category",
|
||||
"K81634069": "Version",
|
||||
@@ -525,7 +508,6 @@
|
||||
"Keefda53d": "Update Time",
|
||||
"K96a2f1c8": "No Tags",
|
||||
"K72b0c0b3": "Number of APIs",
|
||||
"K93d5a66e": "Number of Access Applications",
|
||||
"K96059c69": "Associated Tags",
|
||||
"K32263abd": "Add Open API",
|
||||
"K7829bb78": "Configure Open API",
|
||||
@@ -546,8 +528,6 @@
|
||||
"Ke41d7451": "Read-Only Member",
|
||||
"Kf99e8b66": "Service Administrator",
|
||||
"Kda8db57a": "Service Developer",
|
||||
"K216a1ac7": "Application Developer",
|
||||
"K27924db": "Application Administrator",
|
||||
"K8dc5c723": "Driver Name",
|
||||
"Kda249fe8": "Failure",
|
||||
"Kcf2df651": "Failure",
|
||||
@@ -575,7 +555,6 @@
|
||||
"K593e0c7e": "No Review Required",
|
||||
"Ke2d747d9": "Review Required",
|
||||
"Kc29dabf2": "Base URL",
|
||||
"Kd55c6887": "Review",
|
||||
"K300c89d4": "When creating an API, this provider is selected by default. Changing the default provider will not affect existing APIs.",
|
||||
"Kefaf9956": "Create Time",
|
||||
"Kad1c674c": "Protocol",
|
||||
@@ -589,7 +568,6 @@
|
||||
"Kcbf39b82": "Status",
|
||||
"K339d15b5": "Creator",
|
||||
"K7194cea2": "Review Time",
|
||||
"K831aa6c0": "Applicant - Application",
|
||||
"K7ad449bc": "Status",
|
||||
"K3b3a98ce": "Reviewer",
|
||||
"K61b62ace": "Source",
|
||||
@@ -602,8 +580,8 @@
|
||||
"Kd7d84192": "Name",
|
||||
"Kc88e03b6": "Team Roles",
|
||||
"Ke08ff808": "Addition Date",
|
||||
"K19a3ebe0": "Successful Requests",
|
||||
"Kcaa8259": "Successful Forwards",
|
||||
"K19a3ebe0": "Success",
|
||||
"Kcaa8259": "Success",
|
||||
"K17f93984": "API",
|
||||
"K888f038f": "Failed Status Code Count",
|
||||
"Ke792d01c": "Service Association",
|
||||
@@ -629,7 +607,7 @@
|
||||
"Ke108c369": "Success",
|
||||
"K9168d3e": "Redirecting to Login Page",
|
||||
"K2f8a7ab7": "Review Comments Not Provided",
|
||||
"Kb858d78a": "Copy Successful",
|
||||
"Kb858d78a": "Copied",
|
||||
"K26e85d15": "Copy Failed, Please Copy Manually",
|
||||
"Kd60d204": "Service Team",
|
||||
"K823bfe63": "Online",
|
||||
@@ -646,5 +624,60 @@
|
||||
"K29ec75dc": "Per Week",
|
||||
"Kac172626": "Please provide a reason when rejecting the request.",
|
||||
"Ke1b1865": "Private",
|
||||
"K4786c57c": "Public"
|
||||
"K4786c57c": "Public",
|
||||
"K7acfcfad": "Consumer",
|
||||
"Kc8054dba": "Consumer Developer",
|
||||
"Keb1673a6": "Consumer Administrator",
|
||||
"K1fc2cc28": "No Review: All consumers are allowed to subscribe to this service",
|
||||
"K8dabb98e": "Manual Review: Only reviewed and approved consumers can subscribe to this service",
|
||||
"K7c1fb123": "Applicant - Application",
|
||||
"Kdea9a418": "To securely call APIs, you need to create an consumer and a token.",
|
||||
"Keee27105": "Teams include personnel, consumers, and services. Data between different teams is isolated, and can be used to manage different departments/project teams/teams within the enterprise.",
|
||||
"Kaa717866": "Review subscription requests from other consumers. Only approved requests can initiate API calls.",
|
||||
"Kd2c34e2c": "AI Service",
|
||||
"K62840d62": "REST Service",
|
||||
"K4c72fb6f": "Set up teams and members. You can then create services and consumers, subscribe to APIs within the team. Members can only see services and applications within their team.",
|
||||
"K61cca533": "Consumer Call Statistics",
|
||||
"Kdfff59d4": "Please Select Consumer",
|
||||
"K386857bd": "Consumer Top 10",
|
||||
"Kb684c806": "Search or Select Consumer",
|
||||
"Ke0fbd1c8": "Consumer Settings",
|
||||
"K67b530f": "Consumer Name",
|
||||
"K11f34de": "Consumer ID",
|
||||
"Kc01002": "Delete Consumer",
|
||||
"K84c4dc71": "Add Consumer",
|
||||
"K5c4e2865": "Create and manage your own consumer entities, with each consumer able to subscribe to multiple API services, ensuring the necessary permissions are obtained before making any calls. You can generate API keys or other credentials for consumers to securely call API services.",
|
||||
"K40a89bd8": "Enter Name, ID to Search Member",
|
||||
"Kba74f26d": "Access Consumer",
|
||||
"K70b79760": "Number of Access Consumers",
|
||||
"K93c2696e": "Online Result",
|
||||
"K6e32a344": "Number of Services",
|
||||
"Ka701316": "Number of Auths",
|
||||
"K9eaa2eb6": "List",
|
||||
"Kfaec39e9": "Block",
|
||||
"Kc3b7bfa8": "No Consumer Description",
|
||||
"K3a6f905d": "Enter Name, ID to Search Consumer",
|
||||
"K76036e25": "HTTP Request Header",
|
||||
"K44607e3f": "Exact Match",
|
||||
"Kc287500a": "Prefix Match",
|
||||
"Kfc0b1147": "Suffix Match",
|
||||
"Ka4a92043": "Substring Match",
|
||||
"K30b2e44f": "Non-Exact Match",
|
||||
"Kb1587991": "Null Match",
|
||||
"K87c5a801": "Case-Sensitive Regex Match",
|
||||
"K95f062f1": "Case-Insensitive Regex Match",
|
||||
"Kfbd230a5": "Any Match",
|
||||
"Kd85208a3": "Reject",
|
||||
"Kad6aa439": "Subscribed",
|
||||
"K9a68443b": "Cancel Request",
|
||||
"Kaeba0229": "Pass-through Client Request Host",
|
||||
"K6d7e2fd0": "Use Upstream Service Host",
|
||||
"K31332633": "Rewrite Host",
|
||||
"K2c2bc64f": "Dynamic Service Discovery",
|
||||
"K78b1ca25": "Address",
|
||||
"K1644b775": "Add",
|
||||
"Kc8ee3e62": "Non-Existence",
|
||||
"K1e97dbd8": "Existence",
|
||||
"Kec91f0db": "Applicant Consumer",
|
||||
"Kf5fd27ed": "Enter Name to Search User"
|
||||
}
|
||||
|
||||
@@ -4,11 +4,11 @@
|
||||
"Kfe93ef35": "Application",
|
||||
"Kb58e0c3f": "Service",
|
||||
"Kc9e489f5": "Team",
|
||||
"K61c89f5f": "API マーケット",
|
||||
"K16d71239": "ダッシュボード",
|
||||
"K61c89f5f": "API Portal",
|
||||
"K16d71239": "解析",
|
||||
"K714c192d": "呼び出し統計",
|
||||
"Kd57dfe97": "トポロジー図",
|
||||
"K3fe97dcc": "システム設定",
|
||||
"K3fe97dcc": "設定",
|
||||
"Kecbb0e45": "システム",
|
||||
"Ka358e23d": "一般",
|
||||
"K449058e9": "API ゲートウェイ",
|
||||
@@ -646,5 +646,60 @@
|
||||
"Kfcda87fc": "毎日",
|
||||
"K29ec75dc": "毎週",
|
||||
"Ke1b1865": "プライベート",
|
||||
"K4786c57c": "パブリック"
|
||||
"K4786c57c": "パブリック",
|
||||
"K7acfcfad": "コンシューマー",
|
||||
"Kc8054dba": "コンシューマー開発者",
|
||||
"Keb1673a6": "コンシューマー管理者",
|
||||
"K1fc2cc28": "審査不要:どのコンシューマーでもこのサービスを呼び出せます",
|
||||
"K8dabb98e": "手動審査:手動審査に合格したコンシューマーのみ、このサービスを呼び出せます",
|
||||
"K7c1fb123": "申請元-コンシューマー",
|
||||
"K93c2696e": "オンライン結果",
|
||||
"K6e32a344": "サブスクライブサービス数",
|
||||
"Ka701316": "認証数",
|
||||
"K9eaa2eb6": "リスト",
|
||||
"Kfaec39e9": "ブロック",
|
||||
"Kdea9a418": "API を安全に呼び出すためには、コンシューマーとトークンを作成する必要があります。",
|
||||
"Keee27105": "チームにはメンバー、コンシューマー、サービスが含まれ、異なるチームのコンシューマーとサービスデータは分離されています。企業内の部門やプロジェクトチームの管理に役立ちます。",
|
||||
"Kaa717866": "サービスを提供するチームは、他のチームからのサブスクリプション申請を審査できます。審査に合格したコンシューマーのみ API リクエストを行うことができます。",
|
||||
"Kd2c34e2c": "AI サービス",
|
||||
"K62840d62": "REST サービス",
|
||||
"K4c72fb6f": "チームとメンバーを設定してから、チーム内でサービスとコンシューマーを作成し、API をサブスクライブできます。メンバーは所属チーム内のサービスとコンシューマーのみを表示できます。",
|
||||
"K61cca533": "コンシューマー呼び出し統計",
|
||||
"Kdfff59d4": "コンシューマーを選択してください",
|
||||
"K386857bd": "コンシューマー呼び出し量トップ10",
|
||||
"Kb684c806": "コンシューマーを検索または選択",
|
||||
"Ke0fbd1c8": "コンシューマー管理",
|
||||
"K67b530f": "コンシューマー名",
|
||||
"K11f34de": "コンシューマー ID",
|
||||
"Kc01002": "コンシューマーを削除",
|
||||
"K40a89bd8": "名前または ID を入力してサービスを検索",
|
||||
"Kba74f26d": "コンシューマーを接続",
|
||||
"K70b79760": "接続コンシューマー数",
|
||||
"K5c4e2865": "コンシューマーエンティティを作成および管理し、各コンシューマーは複数の API サービスにサブスクライブできます。呼び出し前に適切な権限が付与されていることを確認してください。コンシューマー用に API キーなどの認証方法を生成して、安全に API サービスを呼び出せます。",
|
||||
"K84c4dc71": "コンシューマーを追加",
|
||||
"Kc3b7bfa8": "コンシューマーの説明がありません",
|
||||
"K3a6f905d": "名前、IDを入力してコンシューマーを検索",
|
||||
"K76036e25": "HTTPリクエストヘッダー",
|
||||
"K44607e3f": "完全一致",
|
||||
"Kc287500a": "プレフィックス一致",
|
||||
"Kfc0b1147": "サフィックス一致",
|
||||
"Ka4a92043": "部分一致",
|
||||
"K30b2e44f": "非完全一致",
|
||||
"Kb1587991": "ヌル一致",
|
||||
"K87c5a801": "大文字小文字を区別する正規表現一致",
|
||||
"K95f062f1": "大文字小文字を区別しない正規表現一致",
|
||||
"Kfbd230a5": "任意一致",
|
||||
"Kd85208a3": "拒否",
|
||||
"Kad6aa439": "申し込み済み",
|
||||
"K9a68443b": "申し込み取消",
|
||||
"Kaeba0229": "クライアントリクエストホストのパススルー",
|
||||
"K6d7e2fd0": "上位サービスホストの使用",
|
||||
"K31332633": "ホストの書き換え",
|
||||
"K2c2bc64f": "動的サービス発見",
|
||||
"K78b1ca25": "アドレス",
|
||||
"K1644b775": "追加",
|
||||
"Kc8ee3e62": "存在しない",
|
||||
"K1e97dbd8": "存在する",
|
||||
"Kec91f0db": "申請側コンシューマー",
|
||||
"Kf5fd27ed": "名前を入力してユーザーを検索"
|
||||
}
|
||||
|
||||
@@ -1,5 +1,3 @@
|
||||
{
|
||||
"Kac172626": "拒绝申请时,请填写拒绝理由",
|
||||
"Ke1b1865": "私有",
|
||||
"K4786c57c": "公共"
|
||||
"Kf5fd27ed": "输入名称查找用户"
|
||||
}
|
||||
@@ -1,72 +1,3 @@
|
||||
{
|
||||
"Kefaf9956": "创建时间",
|
||||
"Kad1c674c": "协议",
|
||||
"Kad01bc3e": "方法",
|
||||
"Ka29b346f": "地址(IP 端口或域名)",
|
||||
"K63b1e0dc": "权重(0-999)",
|
||||
"Ka7f8266f": "带权轮询",
|
||||
"K9d7e880a": "发布版本",
|
||||
"Kea996156": "发布申请记录",
|
||||
"K855135f": "创建版本时间",
|
||||
"Kcbf39b82": "版本状态",
|
||||
"K339d15b5": "创建人",
|
||||
"K7194cea2": "审核时间",
|
||||
"K831aa6c0": "申请方-应用",
|
||||
"K7ad449bc": "审核状态",
|
||||
"K3b3a98ce": "审核人",
|
||||
"K61b62ace": "来源",
|
||||
"K442937c4": "订阅时间",
|
||||
"K442cfba1": "请输入",
|
||||
"K3bb646e4": "请选择",
|
||||
"Ka9481f95": "创建者",
|
||||
"K2472615e": "服务数量",
|
||||
"Kf7200cd9": "负责人",
|
||||
"Kd7d84192": "姓名",
|
||||
"Kc88e03b6": "团队角色",
|
||||
"Ke08ff808": "添加日期",
|
||||
"K19a3ebe0": "请求成功数",
|
||||
"Kcaa8259": "转发成功数",
|
||||
"K17f93984": "API 名称",
|
||||
"K888f038f": "失败状态码数",
|
||||
"Ke792d01c": "所属服务",
|
||||
"K42d2bef2": "平均响应时间(ms)",
|
||||
"K9197c994": "最大响应时间(ms)",
|
||||
"K7c2f3fee": "最小响应时间(ms)",
|
||||
"K3d85ea54": "平均请求流量(KB)",
|
||||
"Keec09d32": "最大请求流量(KB)",
|
||||
"K3786b48": "最小请求流量(KB)",
|
||||
"Kdf35c48c": "所有成员",
|
||||
"K759fb403": "状态",
|
||||
"K5c123bad": "角色名称",
|
||||
"K2c5882be": "绑定域名",
|
||||
"K1cc07937": "过期日期",
|
||||
"K39686a7f": "支持字母开头、英文数字中横线下划线组合",
|
||||
"Ka4ecfa40": "英文数字下划线任意一种,首字母必须为英文",
|
||||
"K37318b68": "无法连接集群,请检查集群地址是否正确或防火墙配置",
|
||||
"Kac172626": "选择拒绝时,审核意见为必填",
|
||||
"K7f0c746d": "操作成功",
|
||||
"K6a365d01": "操作失败",
|
||||
"K978062b6": "正在操作",
|
||||
"Kca7bd6d4": "正在加载数据",
|
||||
"K3c93b77e": "获取数据失败",
|
||||
"Ke108c369": "登录成功",
|
||||
"K9168d3e": "退出成功,将跳转至登录页",
|
||||
"K2f8a7ab7": "未填写审核意见",
|
||||
"Kb858d78a": "复制成功",
|
||||
"K26e85d15": "复制失败,请手动复制",
|
||||
"Kd60d204": "服务所属团队",
|
||||
"K823bfe63": "在线",
|
||||
"Kc9315fa1": "已拒绝",
|
||||
"K3fbe7511": "发布异常",
|
||||
"Ke64e695c": "发布中",
|
||||
"K1f89176d": "申请方所属团队",
|
||||
"K69827c60": "发布状态",
|
||||
"K8f7abcab": " 次",
|
||||
"K28cf9613": "每分钟",
|
||||
"K18f25019": "每5分钟",
|
||||
"Kf00f01ca": "每小时",
|
||||
"Kfcda87fc": "每天",
|
||||
"K29ec75dc": "每周",
|
||||
"Ke1b1865": "私有网络",
|
||||
"K4786c57c": "公共网络"
|
||||
"Kf5fd27ed": "输入名称查找用户"
|
||||
}
|
||||
@@ -1,72 +1,27 @@
|
||||
{
|
||||
"Kefaf9956": "创建时间",
|
||||
"Kad1c674c": "协议",
|
||||
"Kad01bc3e": "方法",
|
||||
"Ka29b346f": "地址(IP 端口或域名)",
|
||||
"K63b1e0dc": "权重(0-999)",
|
||||
"Ka7f8266f": "带权轮询",
|
||||
"K9d7e880a": "发布版本",
|
||||
"Kea996156": "发布申请记录",
|
||||
"K855135f": "创建版本时间",
|
||||
"Kcbf39b82": "版本状态",
|
||||
"K339d15b5": "创建人",
|
||||
"K7194cea2": "审核时间",
|
||||
"K831aa6c0": "申请方-应用",
|
||||
"K7ad449bc": "审核状态",
|
||||
"K3b3a98ce": "审核人",
|
||||
"K61b62ace": "来源",
|
||||
"K442937c4": "订阅时间",
|
||||
"K442cfba1": "请输入",
|
||||
"K3bb646e4": "请选择",
|
||||
"Ka9481f95": "创建者",
|
||||
"K2472615e": "服务数量",
|
||||
"Kf7200cd9": "负责人",
|
||||
"Kd7d84192": "姓名",
|
||||
"Kc88e03b6": "团队角色",
|
||||
"Ke08ff808": "添加日期",
|
||||
"K19a3ebe0": "请求成功",
|
||||
"Kcaa8259": "转发成功",
|
||||
"K17f93984": "API 名称",
|
||||
"K888f038f": "失败状态码",
|
||||
"Ke792d01c": "所属服务",
|
||||
"K42d2bef2": "平均响应时间(ms)",
|
||||
"K9197c994": "最大响应时间(ms)",
|
||||
"K7c2f3fee": "最小响应时间(ms)",
|
||||
"K3d85ea54": "平均请求流量(KB)",
|
||||
"Keec09d32": "最大请求流量(KB)",
|
||||
"K3786b48": "最小请求流量(KB)",
|
||||
"Kdf35c48c": "所有成员",
|
||||
"K759fb403": "状态",
|
||||
"K5c123bad": "角色名称",
|
||||
"K2c5882be": "绑定域名",
|
||||
"K1cc07937": "过期日期",
|
||||
"K39686a7f": "支持字母开头、英文数字中横线下划线组合",
|
||||
"Ka4ecfa40": "英文数字下划线任意一种,首字母必须为英文",
|
||||
"K37318b68": "无法连接集群,请检查集群地址是否正确或防火墙配置",
|
||||
"Kac172626": "拒绝申请时,请填写拒绝理由",
|
||||
"K7f0c746d": "成功",
|
||||
"K6a365d01": "失败",
|
||||
"K978062b6": "正在操作",
|
||||
"Kca7bd6d4": "正在加载数据",
|
||||
"K3c93b77e": "获取数据失败",
|
||||
"Ke108c369": "登录成功",
|
||||
"K9168d3e": "退出成功,将跳转至登录页",
|
||||
"K2f8a7ab7": "未填写审核意见",
|
||||
"Kb858d78a": "复制成功",
|
||||
"K26e85d15": "复制失败,请手动复制",
|
||||
"Kd60d204": "服务所属团队",
|
||||
"K823bfe63": "在线",
|
||||
"Kc9315fa1": "已拒绝",
|
||||
"K3fbe7511": "发布异常",
|
||||
"Ke64e695c": "发布中",
|
||||
"K1f89176d": "申请方所属团队",
|
||||
"K69827c60": "发布状态",
|
||||
"K8f7abcab": "次",
|
||||
"K28cf9613": "每分钟",
|
||||
"K18f25019": "每5分钟",
|
||||
"Kf00f01ca": "每小时",
|
||||
"Kfcda87fc": "每天",
|
||||
"K29ec75dc": "每周",
|
||||
"Ke1b1865": "私有",
|
||||
"K4786c57c": "公共"
|
||||
"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": "申请方消费者",
|
||||
"Kf5fd27ed": "输入名称查找用户",
|
||||
"Kc3b7bfa8": "暂无消费者描述",
|
||||
"K3a6f905d": "输入名称、ID 查找消费者"
|
||||
}
|
||||
@@ -1,72 +1,3 @@
|
||||
{
|
||||
"Kefaf9956": "创建时间",
|
||||
"Kad1c674c": "协议",
|
||||
"Kad01bc3e": "方法",
|
||||
"Ka29b346f": "地址(IP 端口或域名)",
|
||||
"K63b1e0dc": "权重(0-999)",
|
||||
"Ka7f8266f": "带权轮询",
|
||||
"K9d7e880a": "发布版本",
|
||||
"Kea996156": "发布申请记录",
|
||||
"K855135f": "创建版本时间",
|
||||
"Kcbf39b82": "版本状态",
|
||||
"K339d15b5": "创建人",
|
||||
"K7194cea2": "审核时间",
|
||||
"K831aa6c0": "申请方-应用",
|
||||
"K7ad449bc": "审核状态",
|
||||
"K3b3a98ce": "审核人",
|
||||
"K61b62ace": "来源",
|
||||
"K442937c4": "订阅时间",
|
||||
"K442cfba1": "请输入",
|
||||
"K3bb646e4": "请选择",
|
||||
"Ka9481f95": "创建者",
|
||||
"K2472615e": "服务数量",
|
||||
"Kf7200cd9": "负责人",
|
||||
"Kd7d84192": "姓名",
|
||||
"Kc88e03b6": "团队角色",
|
||||
"Ke08ff808": "添加日期",
|
||||
"K19a3ebe0": "请求成功数",
|
||||
"Kcaa8259": "转发成功数",
|
||||
"K17f93984": "API 名称",
|
||||
"K888f038f": "失败状态码数",
|
||||
"Ke792d01c": "所属服务",
|
||||
"K42d2bef2": "平均响应时间(ms)",
|
||||
"K9197c994": "最大响应时间(ms)",
|
||||
"K7c2f3fee": "最小响应时间(ms)",
|
||||
"K3d85ea54": "平均请求流量(KB)",
|
||||
"Keec09d32": "最大请求流量(KB)",
|
||||
"K3786b48": "最小请求流量(KB)",
|
||||
"Kdf35c48c": "所有成员",
|
||||
"K759fb403": "状态",
|
||||
"K5c123bad": "角色名称",
|
||||
"K2c5882be": "绑定域名",
|
||||
"K1cc07937": "过期日期",
|
||||
"K39686a7f": "支持字母开头、英文数字中横线下划线组合",
|
||||
"Ka4ecfa40": "英文数字下划线任意一种,首字母必须为英文",
|
||||
"K37318b68": "无法连接集群,请检查集群地址是否正确或防火墙配置",
|
||||
"Kac172626": "选择拒绝时,审核意见为必填",
|
||||
"K7f0c746d": "操作成功",
|
||||
"K6a365d01": "操作失败",
|
||||
"K978062b6": "正在操作",
|
||||
"Kca7bd6d4": "正在加载数据",
|
||||
"K3c93b77e": "获取数据失败",
|
||||
"Ke108c369": "登录成功",
|
||||
"K9168d3e": "退出成功,将跳转至登录页",
|
||||
"K2f8a7ab7": "未填写审核意见",
|
||||
"Kb858d78a": "复制成功",
|
||||
"K26e85d15": "复制失败,请手动复制",
|
||||
"Kd60d204": "服务所属团队",
|
||||
"K823bfe63": "在线",
|
||||
"Kc9315fa1": "已拒绝",
|
||||
"K3fbe7511": "发布异常",
|
||||
"Ke64e695c": "发布中",
|
||||
"K1f89176d": "申请方所属团队",
|
||||
"K69827c60": "发布状态",
|
||||
"K8f7abcab": " 次",
|
||||
"K28cf9613": "每分钟",
|
||||
"K18f25019": "每5分钟",
|
||||
"Kf00f01ca": "每小时",
|
||||
"Kfcda87fc": "每天",
|
||||
"K29ec75dc": "每周",
|
||||
"Ke1b1865": "私有网络",
|
||||
"K4786c57c": "公共网络"
|
||||
"Kf5fd27ed": "输入名称查找用户"
|
||||
}
|
||||
@@ -1,3 +1,4 @@
|
||||
{
|
||||
"Kd55c6887": "Review"
|
||||
"Kb9052305": "Search Username, Email",
|
||||
"K40a89bd8": "Enter Name, ID to Search Member"
|
||||
}
|
||||
@@ -1,3 +1,26 @@
|
||||
{
|
||||
"Kd55c6887": "レビュー"
|
||||
"Kfe93ef35": "Application",
|
||||
"Kffd7e274": "無審査:すべてのアプリケーションがこのサービスにサブスクライブできます",
|
||||
"K8a8b13e4": "手動審査:承認されたアプリケーションのみがこのサービスにサブスクライブできます",
|
||||
"K9bdd8403": "API を安全に呼び出すためには、アプリケーションとトークンを作成する必要があります。",
|
||||
"Kc8239422": "チームにはユーザー、アプリケーション、サービスが含まれ、異なるチームのアプリケーションとサービスのデータは分離されています。企業内の部門/プロジェクトグループ/チームの管理に使用できます。",
|
||||
"Ka0a8840a": "他のアプリケーションのサブスクリプション申請をレビューし、承認後に API リクエストが発行できます。",
|
||||
"Kb9052305": "ユーザー名またはメールを検索",
|
||||
"K5ece3bac": "チームとメンバーを設定してから、チーム内でサービスとアプリケーションを作成し、API をサブスクライブできます。メンバーは所属チーム内のサービスとアプリケーションのみを表示できます。",
|
||||
"K1512e983": "アプリケーション呼び出し統計",
|
||||
"Kb4d2007f": "Application を選択",
|
||||
"Kc0915603": "Application トップ10",
|
||||
"Kd8a7a689": "アプリケーションを検索または選択",
|
||||
"Kb7e869a4": "アプリケーション管理",
|
||||
"K5168eb63": "Application 名",
|
||||
"K546e46f": "Application ID",
|
||||
"K95764d1d": "Application を削除",
|
||||
"K667bbbe7": "Application を追加",
|
||||
"K8723422e": "アプリケーションを接続",
|
||||
"K93d5a66e": "接続アプリケーション数",
|
||||
"K216a1ac7": "アプリケーション開発者",
|
||||
"K27924db": "アプリケーション管理者",
|
||||
"Kd55c6887": "レビュー",
|
||||
"K831aa6c0": "申請元-アプリケーション",
|
||||
"K40a89bd8": "名前または ID を入力してサービスを検索"
|
||||
}
|
||||
@@ -1,3 +1,26 @@
|
||||
{
|
||||
"Kd55c6887": "审核"
|
||||
"Kfe93ef35": "消费者",
|
||||
"Kffd7e274": "无审核:允许所有消费者订阅该服务",
|
||||
"K8a8b13e4": "人工审核:仅允许审核通过的消费者订阅该服务",
|
||||
"K9bdd8403": "为了安全地调用 API,你需要创建一个消费者以及Token。",
|
||||
"Kc8239422": "团队中包含了人员、消费者和服务,不同团队之间的消费者和服务数据是隔离的,可用于管理企业内部不同的部门/项目组/团队。",
|
||||
"Ka0a8840a": "审核其他消费者的订阅申请,审核通过后的才可发起 API 请求。",
|
||||
"Kb9052305": "搜索用户名、邮箱",
|
||||
"K5ece3bac": "设置团队和成员,然后你可以在团队内创建服务和消费者、订阅API,成员只能看到所属团队内的服务和消费者。",
|
||||
"K1512e983": "消费者调用统计",
|
||||
"Kb4d2007f": "请选择消费者",
|
||||
"Kc0915603": "消费者 Top10",
|
||||
"Kd8a7a689": "搜索或选择消费者",
|
||||
"Kb7e869a4": "消费者管理",
|
||||
"K5168eb63": "消费者名称",
|
||||
"K546e46f": "消费者 ID",
|
||||
"K95764d1d": "删除消费者",
|
||||
"K667bbbe7": "添加消费者",
|
||||
"K8723422e": "接入消费者",
|
||||
"K93d5a66e": "接入消费者数量",
|
||||
"K216a1ac7": "消费者开发者",
|
||||
"K27924db": "消费者管理员",
|
||||
"Kd55c6887": "审核",
|
||||
"K831aa6c0": "申请方-消费者",
|
||||
"K40a89bd8": "输入名称、ID 查找服务"
|
||||
}
|
||||
@@ -1,3 +1,26 @@
|
||||
{
|
||||
"Kd55c6887": "審核"
|
||||
"Kfe93ef35": "應用程式",
|
||||
"Kffd7e274": "無審核:允許所有應用程式訂閱該服務",
|
||||
"K8a8b13e4": "人工審核:僅允許審核通過的應用程式訂閱該服務",
|
||||
"K9bdd8403": "為了安全地調用 API,你需要創建一個應用以及Token。",
|
||||
"Kc8239422": "團隊中包含了人員、應用程式和服務,不同團隊之間的應用程式和服務數據是隔離的,可用於管理企業內部不同的部門/項目組/團隊。",
|
||||
"Ka0a8840a": "審核其他應用程式的訂閱申請,審核通過後的才可發起 API 請求。",
|
||||
"Kb9052305": "搜索用戶名、電郵",
|
||||
"K5ece3bac": "設置團隊和成員,然後你可以在團隊內創建服務和應用程式、訂閱API,成員只能看到所屬團隊內的服務和應用程式。",
|
||||
"K1512e983": "應用程式調用統計",
|
||||
"Kb4d2007f": "請選擇應用程式",
|
||||
"Kc0915603": "應用程式 Top10",
|
||||
"Kd8a7a689": "搜索或選擇應用程式",
|
||||
"Kb7e869a4": "應用程式管理",
|
||||
"K5168eb63": "應用程式名稱",
|
||||
"K546e46f": "應用程式 ID",
|
||||
"K95764d1d": "刪除應用程式",
|
||||
"K667bbbe7": "添加應用程式",
|
||||
"K8723422e": "接入應用程式",
|
||||
"K93d5a66e": "接入應用程式數量",
|
||||
"K216a1ac7": "應用程式開發者",
|
||||
"K27924db": "應用程式管理員",
|
||||
"Kd55c6887": "審核",
|
||||
"K831aa6c0": "申請方-應用程式",
|
||||
"K40a89bd8": "輸入名稱、ID 查找服務"
|
||||
}
|
||||
@@ -1,11 +1,11 @@
|
||||
{
|
||||
"Kc0e5ef9f": "工作空间",
|
||||
"K4de11e23": "首页",
|
||||
"Kfe93ef35": "应用",
|
||||
"Kfe93ef35": "消费者",
|
||||
"Kb58e0c3f": "服务",
|
||||
"Kc9e489f5": "团队",
|
||||
"K61c89f5f": "API 市场",
|
||||
"K16d71239": "仪表盘",
|
||||
"K61c89f5f": "API 门户",
|
||||
"K16d71239": "分析报告",
|
||||
"K714c192d": "调用统计",
|
||||
"Kd57dfe97": "拓扑图",
|
||||
"K3fe97dcc": "系统设置",
|
||||
@@ -29,7 +29,7 @@
|
||||
"K1f42de3": "HTTP 状态码",
|
||||
"K4770dff4": "系统状态码",
|
||||
"Kf89e58f1": "描述",
|
||||
"K9e53c664": "提交",
|
||||
"K9e53c664": "保存",
|
||||
"Kf8e7294c": "上一步",
|
||||
"Ka0451c97": "取消",
|
||||
"Kb1dedda3": "关闭",
|
||||
@@ -91,8 +91,8 @@
|
||||
"K6206e4ad": "上传 OpenAPI 文档 (.json/.yaml)",
|
||||
"Kfba46e6d": "替换 OpenAPI 文档 (.json/.yaml)",
|
||||
"Kdac8ce7e": "打开 OpenAPI YAML 编辑器",
|
||||
"Kffd7e274": "无审核:允许所有应用订阅该服务",
|
||||
"K8a8b13e4": "人工审核:仅允许审核通过的应用订阅该服务",
|
||||
"Kffd7e274": "无审核:允许所有消费者订阅该服务",
|
||||
"K8a8b13e4": "人工审核:仅允许审核通过的消费者订阅该服务",
|
||||
"Kbfe02d7f": "永久",
|
||||
"K1e9c479e": "否",
|
||||
"Kaddfcb6b": "是",
|
||||
@@ -155,7 +155,7 @@
|
||||
"Ke54a14a3": "格式化",
|
||||
"K43934f6d": "搜索",
|
||||
"K741decac": "替代",
|
||||
"Kd507abff": "确定",
|
||||
"Kd507abff": "确认",
|
||||
"Kca2d1624": "(0) 不能为负数.",
|
||||
"K792b255a": "(0) 必须大于或等于 (1).",
|
||||
"Kf0bed26d": "枚举值",
|
||||
@@ -259,7 +259,7 @@
|
||||
"Kc057704a": "创建 AI 服务和 API",
|
||||
"K76bb4a09": "创建 AI 类型的服务,并且你可以将 Prompt 提示词设置为一个 API,简化使用 AI 的流程。",
|
||||
"K71b2c70f": "创建调用 Token",
|
||||
"K9bdd8403": "为了安全地调用 API,你需要创建一个应用以及Token。",
|
||||
"K9bdd8403": "为了安全地调用 API,你需要创建一个消费者以及Token。",
|
||||
"Kc5738b6c": "调用",
|
||||
"Kd6d7ca1f": "现在你可以通过 Token 来调用这些 API。",
|
||||
"K86cf95f": "快速接入 REST API",
|
||||
@@ -269,16 +269,16 @@
|
||||
"K2cdbb773": "核心功能",
|
||||
"K3378c50d": "账号与角色",
|
||||
"Kda5bb930": "邀请你的团队成员加入 APIPark,共同管理和调用 API。",
|
||||
"Kc8239422": "团队中包含了人员、应用和服务,不同团队之间的应用和服务数据是隔离的,可用于管理企业内部不同的部门/项目组/团队。",
|
||||
"Kc8239422": "团队中包含了人员、消费者和服务,不同团队之间的消费者和服务数据是隔离的,可用于管理企业内部不同的部门/项目组/团队。",
|
||||
"Kd5be0cd7": "服务内包含一组 API,并且可以发布到 API 市场被其他团队使用。",
|
||||
"K62e89ee7": "权限管理",
|
||||
"K8f7808e6": "订阅服务",
|
||||
"Kf2410413": "如果需要调用某个服务的 API,需要先订阅该服务,并且等待提供服务的团队审核后才可发起 API 请求。",
|
||||
"K6c2e44b8": "审核订阅",
|
||||
"Ka0a8840a": "审核其他应用的订阅申请,审核通过后的才可发起 API 请求。",
|
||||
"Ka0a8840a": "审核其他消费者的订阅申请,审核通过后的才可发起 API 请求。",
|
||||
"K3453272": "APIPark 提供详尽的 API 调用日志,帮助企业监控、分析和审计 API 的运行状况。",
|
||||
"Kd518ba3e": "Hello!欢迎使用 APIPark",
|
||||
"K7e04ea16": "🦄 APIPark 是开源的一站式 AI 网关和 API 开发者门户,帮助企业和开发者快速接入 100+ AI 模型,将 AI 模型和 Prompt 提示词组合成新的 API,并且统一所有 AI 的请求数据格式,避免切换 AI 模型或调整提示词时影响你的 APP 应用或者微服务。你还可以通过 APIPark 的开发者门户在团队内共享 API,管理调用的应用并保障你的 API 安全,通过清晰的图表来监控你的 AI API 使用情况。",
|
||||
"K7e04ea16": "🦄 APIPark 是开源的一站式 AI 网关和 API 开发者门户,帮助企业和开发者快速接入 100+ AI 模型,将 AI 模型和 Prompt 提示词组合成新的 API,并且统一所有 AI 的请求数据格式,避免切换 AI 模型或调整提示词时影响你的 APP 消费者或者微服务。你还可以通过 APIPark 的开发者门户在团队内共享 API,管理调用的消费者并保障你的 API 安全,通过清晰的图表来监控你的 AI API 使用情况。",
|
||||
"Kedd41c18": "✨ 如果你喜欢 APIPark,欢迎在 Github 为我们 Star 或提供产品反馈意见。",
|
||||
"Kef02fd87": "快速入门",
|
||||
"K43a3b38d": "我们提供了一些任务来帮你快速了解 APIPark",
|
||||
@@ -306,7 +306,7 @@
|
||||
"K184d3473": "添加账号",
|
||||
"K1ecb35f2": "编辑成员信息",
|
||||
"Ke6f00b44": "加入部门",
|
||||
"K501cb1e7": "此操作无法恢复,确定删除成员?",
|
||||
"K501cb1e7": "此操作无法恢复,确认删除成员?",
|
||||
"Kf20863b5": "成员与部门",
|
||||
"K52c8a730": "启用",
|
||||
"K718c9310": "禁用",
|
||||
@@ -405,7 +405,7 @@
|
||||
"Kec46a57f": "添加成员",
|
||||
"K48724410": "输入姓名查找",
|
||||
"Kb9052305": "搜索用户名、邮箱",
|
||||
"K5ece3bac": "设置团队和成员,然后你可以在团队内创建服务和应用、订阅API,成员只能看到所属团队内的服务和应用。",
|
||||
"K5ece3bac": "设置团队和成员,然后你可以在团队内创建服务和消费者、订阅API,成员只能看到所属团队内的服务和消费者。",
|
||||
"K510cdd27": "添加团队",
|
||||
"K9244ae14": "输入名称、ID、负责人查找团队",
|
||||
"Kc7b24b4b": "设置团队",
|
||||
@@ -425,8 +425,8 @@
|
||||
"Ka2c794a2": "导出",
|
||||
"Kaf70c3b": "退出全屏",
|
||||
"Kd22841a4": "(0)调用详情",
|
||||
"K1512e983": "应用调用统计",
|
||||
"Kb4d2007f": "请选择应用",
|
||||
"K1512e983": "消费者调用统计",
|
||||
"Kb4d2007f": "请选择消费者",
|
||||
"K8c7f2d2e": "调用趋势",
|
||||
"K657c3452": "(0)-(1)调用趋势",
|
||||
"Kc04efb87": "调用量统计",
|
||||
@@ -449,7 +449,7 @@
|
||||
"Kffcfe375": "请选择服务",
|
||||
"Ka65f739c": "调用详情",
|
||||
"K89b7ac79": "API Top10",
|
||||
"Kc0915603": "应用 Top10",
|
||||
"Kc0915603": "消费者 Top10",
|
||||
"Kf90b54": "服务 Top10",
|
||||
"Kfb26388": "无请求数据",
|
||||
"Kc8cbd8f8": "请求统计",
|
||||
@@ -472,9 +472,9 @@
|
||||
"Ke6a935d": "万",
|
||||
"Kd59290a2": "搜索分类或标签",
|
||||
"K6b75bdbc": "无API数据",
|
||||
"Kd8a7a689": "搜索或选择应用",
|
||||
"Kd8a7a689": "搜索或选择消费者",
|
||||
"K4b15d6f5": "申请理由",
|
||||
"Kb7e869a4": "应用管理",
|
||||
"Kb7e869a4": "消费者管理",
|
||||
"Kb71b5a13": "鉴权类型",
|
||||
"K4d1465ee": "ISS",
|
||||
"K5dcd7ed8": "签名算法",
|
||||
@@ -488,9 +488,9 @@
|
||||
"Kbfeb5297": "API Key",
|
||||
"K1a78e6f0": "过期时间",
|
||||
"Ke64e43a": "隐藏认证信息",
|
||||
"K5168eb63": "应用名称",
|
||||
"K546e46f": "应用 ID",
|
||||
"K95764d1d": "删除应用",
|
||||
"K5168eb63": "消费者名称",
|
||||
"K546e46f": "消费者 ID",
|
||||
"K95764d1d": "删除消费者",
|
||||
"K217cb125": "鉴权详情",
|
||||
"K2bb63eca": "添加鉴权",
|
||||
"Kd74d69b7": "编辑鉴权",
|
||||
@@ -507,7 +507,7 @@
|
||||
"K1856c229": "是否取消订阅申请?",
|
||||
"K66ea2f0": "搜索服务",
|
||||
"K8adf7f8b": "审核中",
|
||||
"K667bbbe7": "添加应用",
|
||||
"K667bbbe7": "添加消费者",
|
||||
"Ka4b45550": "无服务描述",
|
||||
"K3c7b175f": "订阅服务:已通过 (0) ,审核中 (1)",
|
||||
"Kbe3e9335": "退出测试",
|
||||
@@ -517,14 +517,14 @@
|
||||
"K59cdbec3": "服务介绍",
|
||||
"K4aa9ed2c": "申请订阅",
|
||||
"K6c060779": "服务信息",
|
||||
"K8723422e": "接入应用",
|
||||
"K8723422e": "接入消费者",
|
||||
"Kb97544cb": "供应方",
|
||||
"Kb32f0afe": "分类",
|
||||
"K81634069": "版本",
|
||||
"Keefda53d": "更新时间",
|
||||
"K96a2f1c8": "无标签",
|
||||
"K72b0c0b3": "API 数量",
|
||||
"K93d5a66e": "接入应用数量",
|
||||
"K93d5a66e": "接入消费者数量",
|
||||
"K96059c69": "关联标签",
|
||||
"K8b7c2592": "更新者",
|
||||
"K32263abd": "添加 Open Api",
|
||||
@@ -546,8 +546,8 @@
|
||||
"Ke41d7451": "只读成员",
|
||||
"Kf99e8b66": "服务管理员",
|
||||
"Kda8db57a": "服务开发者",
|
||||
"K216a1ac7": "应用开发者",
|
||||
"K27924db": "应用管理员",
|
||||
"K216a1ac7": "消费者开发者",
|
||||
"K27924db": "消费者管理员",
|
||||
"K8dc5c723": "驱动名称",
|
||||
"Kda249fe8": "失败",
|
||||
"Kcf2df651": "失败",
|
||||
@@ -589,7 +589,7 @@
|
||||
"Kcbf39b82": "版本状态",
|
||||
"K339d15b5": "创建人",
|
||||
"K7194cea2": "审核时间",
|
||||
"K831aa6c0": "申请方-应用",
|
||||
"K831aa6c0": "申请方-消费者",
|
||||
"K7ad449bc": "审核状态",
|
||||
"K3b3a98ce": "审核人",
|
||||
"K61b62ace": "来源",
|
||||
@@ -646,5 +646,37 @@
|
||||
"Kfcda87fc": "每天",
|
||||
"K29ec75dc": "每周",
|
||||
"Ke1b1865": "私有",
|
||||
"K4786c57c": "公共"
|
||||
"K4786c57c": "公共",
|
||||
"K7acfcfad": "消费者",
|
||||
"Kc8054dba": "消费者开发者",
|
||||
"Keb1673a6": "消费者管理员",
|
||||
"K1fc2cc28": "无需审核:允许任何消费者调用该服务",
|
||||
"K8dabb98e": "人工审核:仅允许通过人工审核的消费者调用该服务",
|
||||
"K7c1fb123": "申请方-消费者",
|
||||
"Kdea9a418": "为了安全地调用 API,你需要创建一个消费者以及Token。",
|
||||
"Keee27105": "团队中包含了人员、消费者和服务,不同团队之间的消费者和服务数据是隔离的,可用于管理企业内部不同的部门/项目组/团队。",
|
||||
"Kaa717866": "提供服务的团队可以审核来自其他团队的订阅申请,审核通过后的消费者才可发起 API 请求。",
|
||||
"Kd2c34e2c": "AI 服务",
|
||||
"K62840d62": "REST 服务",
|
||||
"K4c72fb6f": "设置团队和成员,然后你可以在团队内创建服务和消费者、订阅API,成员只能看到所属团队内的服务和消费者。",
|
||||
"K61cca533": "消费者调用统计",
|
||||
"Kdfff59d4": "请选择消费者",
|
||||
"K386857bd": "消费者调用量 Top10",
|
||||
"Kb684c806": "搜索或选择消费者",
|
||||
"Ke0fbd1c8": "消费者管理",
|
||||
"K67b530f": "消费者名称",
|
||||
"K11f34de": "消费者 ID",
|
||||
"Kc01002": "删除消费者",
|
||||
"K84c4dc71": "添加消费者",
|
||||
"K5c4e2865": "创建并管理自己的消费者实体,每个消费者可以订阅多个API服务,确保在调用之前已获得相应权限。你可以为消费者生成 API 密钥等鉴权方式,用于安全地调用 API 服务",
|
||||
"K40a89bd8": "输入名称、ID 查找服务",
|
||||
"Kba74f26d": "接入消费者",
|
||||
"K70b79760": "接入消费者数量",
|
||||
"K93c2696e": "上线结果",
|
||||
"K6e32a344": "订阅服务数量",
|
||||
"Ka701316": "鉴权数量",
|
||||
"K9eaa2eb6": "列表",
|
||||
"Kfaec39e9": "块",
|
||||
"Kc3b7bfa8": "暂无消费者描述",
|
||||
"K3a6f905d": "输入名称、ID 查找消费者"
|
||||
}
|
||||
@@ -4,8 +4,8 @@
|
||||
"Kfe93ef35": "應用程式",
|
||||
"Kb58e0c3f": "服務",
|
||||
"Kc9e489f5": "團隊",
|
||||
"K61c89f5f": "API 市場",
|
||||
"K16d71239": "儀表板",
|
||||
"K61c89f5f": "API 門戶",
|
||||
"K16d71239": "分析報告",
|
||||
"K714c192d": "調用統計",
|
||||
"Kd57dfe97": "拓撲圖",
|
||||
"K3fe97dcc": "系統設置",
|
||||
@@ -646,5 +646,60 @@
|
||||
"Kfcda87fc": "每天",
|
||||
"K29ec75dc": "每週",
|
||||
"Ke1b1865": "私有",
|
||||
"K4786c57c": "公共"
|
||||
"K4786c57c": "公共",
|
||||
"K7acfcfad": "消費者",
|
||||
"Kc8054dba": "消費者開發者",
|
||||
"Keb1673a6": "消費者管理員",
|
||||
"K1fc2cc28": "無需審核:允許任何消費者調用該服務",
|
||||
"K8dabb98e": "人工審核:僅允許通過人工審核的消費者調用該服務",
|
||||
"K7c1fb123": "申請方-消費者",
|
||||
"K93c2696e": "上線結果",
|
||||
"K6e32a344": "訂閱服務數量",
|
||||
"Ka701316": "鑒權數量",
|
||||
"K9eaa2eb6": "列表",
|
||||
"Kfaec39e9": "塊",
|
||||
"Kdea9a418": "為了安全地調用 API,你需要創建一個消費者以及Token。",
|
||||
"Keee27105": "團隊中包含了人員、消費者和服務,不同團隊之間的消費者和服務數據是隔離的,可用於管理企業內部不同的部門/項目組/團隊。",
|
||||
"Kaa717866": "提供服務的團隊可以審核來自其他團隊的訂閱申請,審核通過後的消費者才可發起 API 請求。",
|
||||
"Kd2c34e2c": "AI 服務",
|
||||
"K62840d62": "REST 服務",
|
||||
"K4c72fb6f": "設置團隊和成員,然後你可以在團隊內創建服務和消費者、訂閱API,成員只能看到所屬團隊內的服務和消費者。",
|
||||
"K61cca533": "消費者調用統計",
|
||||
"Kdfff59d4": "請選擇消費者",
|
||||
"K386857bd": "消費者調用量 Top10",
|
||||
"Kb684c806": "搜索或選擇消費者",
|
||||
"Ke0fbd1c8": "消費者管理",
|
||||
"K67b530f": "消費者名稱",
|
||||
"K11f34de": "消費者 ID",
|
||||
"Kc01002": "刪除消費者",
|
||||
"K84c4dc71": "添加消費者",
|
||||
"K5c4e2865": "創建並管理自己的消費者實體,每個消費者可以訂閱多個API服務,確保在調用之前已獲得相應權限。你可以為消費者生成 API 密鑰等鑒權方式,用於安全地調用 API 服務",
|
||||
"K40a89bd8": "輸入名稱、ID 查找服務",
|
||||
"Kba74f26d": "接入消費者",
|
||||
"K70b79760": "接入消費者數量",
|
||||
"Kc3b7bfa8": "暫無消費者描述",
|
||||
"K3a6f905d": "輸入名稱、ID 查找消費者",
|
||||
"K76036e25": "HTTP請求頭",
|
||||
"K44607e3f": "全等匹配",
|
||||
"Kc287500a": "前綴匹配",
|
||||
"Kfc0b1147": "後綴匹配",
|
||||
"Ka4a92043": "子串匹配",
|
||||
"K30b2e44f": "非等匹配",
|
||||
"Kb1587991": "空值匹配",
|
||||
"K87c5a801": "區分大小寫的正則匹配",
|
||||
"K95f062f1": "不區分大小寫的正則匹配",
|
||||
"Kfbd230a5": "任意匹配",
|
||||
"Kd85208a3": "駁回",
|
||||
"Kad6aa439": "已訂閱",
|
||||
"K9a68443b": "取消申請",
|
||||
"Kaeba0229": "透傳客戶端請求Host",
|
||||
"K6d7e2fd0": "使用上游服務Host",
|
||||
"K31332633": "重寫Host",
|
||||
"K2c2bc64f": "動態服務發現",
|
||||
"K78b1ca25": "位址",
|
||||
"K1644b775": "新增",
|
||||
"Kc8ee3e62": "不存在匹配",
|
||||
"K1e97dbd8": "存在匹配",
|
||||
"Kec91f0db": "申請方消費者",
|
||||
"Kf5fd27ed": "輸入名稱查找使用者"
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
|
||||
/**
|
||||
* @description 获取全局应用关系视图(即空间下所有项目组的 api 关联关系)
|
||||
* @description 获取全局消费者关系视图(即空间下所有项目组的 api 关联关系)
|
||||
* @param request
|
||||
* @returns
|
||||
*/
|
||||
@@ -22,7 +22,7 @@ import { NodeData } from "@core/const/system-running/type"
|
||||
import { TopologyProjectItem, TopologyServiceItem } from "@core/pages/systemRunning/SystemRunning"
|
||||
|
||||
/**
|
||||
* @description 获取全局应用关系视图(即空间下所有项目组的 api 关联关系)
|
||||
* @description 获取全局消费者关系视图(即空间下所有项目组的 api 关联关系)
|
||||
* @param request
|
||||
* @returns
|
||||
*/
|
||||
|
||||
@@ -1,9 +1,4 @@
|
||||
/*
|
||||
* @Date: 2024-06-04 15:05:05
|
||||
* @LastEditors: maggieyyy
|
||||
* @LastEditTime: 2024-08-01 17:59:56
|
||||
* @FilePath: \frontend\packages\common\tailwind.config.js
|
||||
*/
|
||||
|
||||
/** @type {import('tailwindcss').Config} */
|
||||
module.exports = {
|
||||
important:true,
|
||||
|
||||
@@ -1,16 +1,36 @@
|
||||
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<head id="head">
|
||||
<meta charset="UTF-8" />
|
||||
<link rel="icon" type="image/svg+xml" href="/frontend/favicon.ico" />
|
||||
<link id="favicon" 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>
|
||||
<body id="eo-body">
|
||||
<div id="root"></div>
|
||||
<script type="module" src="/src/main.tsx"></script>
|
||||
<script async src="/frontend/iconpark_eolink.js"></script>
|
||||
<script async src="/frontend/iconpark_apinto.js"></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>
|
||||
|
||||
@@ -1,9 +1,4 @@
|
||||
/*
|
||||
* @Date: 2023-11-27 17:31:54
|
||||
* @LastEditors: maggieyyy
|
||||
* @LastEditTime: 2024-06-05 10:42:18
|
||||
* @FilePath: \frontend\packages\core\postcss.config.js
|
||||
*/
|
||||
|
||||
export default {
|
||||
plugins: {
|
||||
'postcss-import': {},
|
||||
|
||||
@@ -248,4 +248,50 @@ a{
|
||||
}
|
||||
.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;
|
||||
}
|
||||
@@ -362,7 +362,7 @@ const PUBLIC_ROUTES:RouteConfig[] = [
|
||||
key:uuidv4(),
|
||||
},
|
||||
{
|
||||
path:'tenantManagement',
|
||||
path:'consumer',
|
||||
component:<Outlet />,
|
||||
provider:TenantManagementProvider,
|
||||
key:'tenantManagement',
|
||||
|
||||
@@ -35,6 +35,7 @@ export type MemberDropdownModalFieldType = {
|
||||
parent?:string
|
||||
email?:string
|
||||
departmentIds?:string[]
|
||||
password:string
|
||||
};
|
||||
|
||||
export type MemberDropdownModalProps = {
|
||||
|
||||
@@ -67,7 +67,7 @@ export type PartitionClusterNodeTableListItem = {
|
||||
name: string;
|
||||
managerAddress:string[];
|
||||
serviceAddress:string[];
|
||||
peerAddress:string;
|
||||
peerAddress:string[];
|
||||
status:0|1;
|
||||
};
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
export const BASE_GROUP_ORDER = JSON.stringify({})
|
||||
|
||||
/**
|
||||
* 应用关系图节点字体大小
|
||||
* 消费者关系图节点字体大小
|
||||
*/
|
||||
export const RELATIVE_PICTURE_NODE_FONTSIZE = 14
|
||||
|
||||
|
||||
@@ -49,14 +49,14 @@ export interface GetProjectGroupRelativeRequest {
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取空间应用(项目组)关联关系请求体
|
||||
* 获取空间消费者(项目组)关联关系请求体
|
||||
*/
|
||||
export interface GetSpaceProjectGroupRelativeRequest {
|
||||
spaceId: string
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取空间应用(项目组)关联关系返回体
|
||||
* 获取空间消费者(项目组)关联关系返回体
|
||||
*/
|
||||
export interface GetSpaceProjectGroupRelativeResponse {
|
||||
success: boolean
|
||||
|
||||
@@ -69,6 +69,11 @@ export const API_PROTOCOL = [
|
||||
{label:'HTTPS',value:'HTTPS'}
|
||||
]
|
||||
|
||||
export const API_PATH_MATCH_RULES = [
|
||||
{label:'前缀匹配',value:'prefix'},
|
||||
{label:'全等匹配',value:'full'}
|
||||
]
|
||||
|
||||
|
||||
export const ALGORITHM_ITEM = [
|
||||
{label:'HS256',value:'HS256'},
|
||||
@@ -350,12 +355,12 @@ export const PROXY_HEADER_CONFIG:ConfigField<ProxyHeaderItem>[] = [
|
||||
|
||||
export const SERVICE_VISUALIZATION_OPTIONS = [
|
||||
{label:('内部服务:可通过网关访问,但不展示在服务广场'),value:'inner'},
|
||||
{label:('公开服务:可通过网关访问,展示在服务广场,可被其他应用订阅'),value:'public'}];
|
||||
{label:('公开服务:可通过网关访问,展示在服务广场,可被其他消费者订阅'),value:'public'}];
|
||||
|
||||
|
||||
export const SERVICE_APPROVAL_OPTIONS = [
|
||||
{label:('无需审核:允许任何应用调用该服务'),value:'auto'},
|
||||
{label:('人工审核:仅允许通过人工审核的应用调用该服务'),value:'manual'}];
|
||||
{label:('无需审核:允许任何消费者调用该服务'),value:'auto'},
|
||||
{label:('人工审核:仅允许通过人工审核的消费者调用该服务'),value:'manual'}];
|
||||
export const SERVICE_KIND_OPTIONS = [
|
||||
{label:('REST'),value:'rest'},
|
||||
{label:('AI'),value:'ai'}];
|
||||
|
||||
@@ -10,7 +10,7 @@ async function initializeApp() {
|
||||
// 初始化行为
|
||||
// await fetchInitialConfig(); // 示例:获取初始配置
|
||||
|
||||
// 异步操作完成后,渲染React应用
|
||||
// 异步操作完成后,渲染React消费者
|
||||
ReactDOM.createRoot(document.getElementById('root')!).render(
|
||||
<StrictMode>
|
||||
<GlobalProvider>
|
||||
|
||||
@@ -2,10 +2,10 @@ import {FC, useCallback, useEffect, useRef, useState} from "react";
|
||||
import {App, Button, Divider, Form, FormInstance, Input, Tooltip} from "antd";
|
||||
import {useGlobalContext} from "@common/contexts/GlobalStateContext.tsx";
|
||||
import {useFetch} from "@common/hooks/http.ts";
|
||||
import {BasicResponse, RESPONSE_TIPS, STATUS_CODE} from "@common/const/const.tsx";
|
||||
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/logo.png'
|
||||
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";
|
||||
@@ -100,9 +100,46 @@ const Login:FC = ()=> {
|
||||
}, []);
|
||||
|
||||
return (
|
||||
<div className="h-full w-full flex flex-col bg-[#f5f7fa] items-center overflow-auto min-h-[490px]">
|
||||
<div className="w-full text-right pr-[40px]"><LanguageSetting mode="dark"/></div>
|
||||
<div className="w-[410px] mx-auto flex-1 flex flex-col items-center justify-center" >
|
||||
<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
|
||||
@@ -112,14 +149,10 @@ const Login:FC = ()=> {
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<section className="block w-[410px] mx-auto mt-[46px] bg-MAIN_BG p-[30px] box-border rounded-[10px] shadow-[0_5px_20px_0_rgba(0,0,0,5%)]">
|
||||
<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>
|
||||
<div className="flex justify-center items-center">
|
||||
<span className="text-[24px] text-[#101010]">{$t('登录')}</span>
|
||||
</div>
|
||||
|
||||
<Form onFinish={login} className="w-[350px] pt-[28px]"
|
||||
<div className="">
|
||||
<Form onFinish={login} className="w-[350px]"
|
||||
ref={formRef}>
|
||||
<Form.Item
|
||||
className="p-0 bg-transparent rounded border-none"
|
||||
@@ -127,7 +160,7 @@ const Login:FC = ()=> {
|
||||
rules={[{ required: true, message: $t('请输入账号') ,whitespace:true }]}
|
||||
>
|
||||
<Input
|
||||
className="w-[350px] h-[40px]"
|
||||
className="w-[350px] h-[40px] login-input"
|
||||
placeholder={$t("账号")}
|
||||
autoComplete="on"
|
||||
autoFocus
|
||||
@@ -135,12 +168,12 @@ const Login:FC = ()=> {
|
||||
</Form.Item>
|
||||
|
||||
<Form.Item
|
||||
className="p-0 bg-transparent rounded border-none"
|
||||
className="p-0 bg-transparent rounded border-none "
|
||||
name="password"
|
||||
rules={[{ required: true, message: $t('请输入密码') }]}
|
||||
>
|
||||
<Input.Password
|
||||
className="w-[350px] h-[40px]"
|
||||
className="w-[350px] h-[40px] login-input"
|
||||
placeholder={$t("密码")}
|
||||
autoComplete="off"
|
||||
/>
|
||||
@@ -172,8 +205,10 @@ const Login:FC = ()=> {
|
||||
</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])}</p>
|
||||
<p className="leading-[28px]">{$t(state.powered)}</p>
|
||||
<p className="leading-[28px]">
|
||||
{$t('Version (0)-(1)',[state.version,state.updateDate])}, {$t(state.powered)}
|
||||
</p>
|
||||
<LanguageSetting mode="light"/>
|
||||
</section>
|
||||
</div>
|
||||
</div>
|
||||
|
||||