From 4ed00f29e22b232781a78e8eb8e66494165a34d2 Mon Sep 17 00:00:00 2001 From: admin Date: Fri, 1 May 2026 08:08:11 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E7=A7=BB=E9=99=A4=E4=BD=A3?= =?UTF-8?q?=E9=87=91=E6=AF=94=E4=BE=8B=E5=AD=97=E6=AE=B5=EF=BC=8C=E5=B0=86?= =?UTF-8?q?developer=E7=BB=9F=E4=B8=80=E4=B8=BAadmin?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/internal/model/models.go | 2 - backend/internal/router/agent/agent.go | 3 - .../internal/router/developer/agent_apps.go | 9 - backend/internal/router/developer/agents.go | 11 - backend/scripts/translate_docs_i18n.go | 2 +- backend/scripts/update_doc_translations.go | 2 +- .../data-table/date-range-filter.vue | 16 +- .../components/data-table/faceted-filter.vue | 2 +- .../components/developer-sidebar/index.vue | 34 +- .../developer-sidebar/nav-footer.vue | 4 +- .../marketing-layout/the-header.vue | 38 +- frontend/src/layouts/developer.vue | 8 +- .../admin/agent-apps/[id]/card-types.vue | 8 +- .../src/pages/admin/agent-apps/[id]/edit.vue | 41 +- .../pages/admin/agent-apps/[id]/recharge.vue | 8 +- .../admin/agent-apps/components/columns.ts | 23 +- .../components/data-table-toolbar.vue | 4 +- .../agent-apps/components/data-table.vue | 12 +- .../src/pages/admin/agent-apps/data/schema.ts | 2 - frontend/src/pages/admin/agent-apps/index.vue | 70 +- .../src/pages/admin/agent-apps/invite.vue | 4 +- .../src/pages/admin/agent-apps/request.vue | 16 +- frontend/src/pages/admin/agents/[id].vue | 622 ++++++++--------- .../pages/admin/agents/components/columns.ts | 32 +- .../admin/agents/components/data-table.vue | 29 +- frontend/src/pages/admin/agents/create.vue | 105 +-- .../src/pages/admin/agents/data/schema.ts | 1 - frontend/src/pages/admin/agents/index.vue | 50 +- .../src/pages/admin/announcements/[id].vue | 527 +++++++------- .../admin/announcements/components/columns.ts | 26 +- .../components/data-table-toolbar.vue | 4 +- .../announcements/components/data-table.vue | 20 +- .../src/pages/admin/announcements/create.vue | 4 +- .../src/pages/admin/announcements/index.vue | 50 +- frontend/src/pages/admin/applications.vue | 34 +- .../pages/admin/applications/[id]/email.vue | 2 +- .../admin/applications/[id]/security.vue | 2 +- .../admin/applications/[id]/settings.vue | 2 +- .../admin/applications/components/columns.ts | 2 +- .../applications/components/data-table.vue | 18 +- .../src/pages/admin/applications/create.vue | 152 ++-- frontend/src/pages/admin/card-types/[id].vue | 601 +++++++++------- .../admin/card-types/components/columns.ts | 30 +- .../components/data-table-toolbar.vue | 6 +- .../card-types/components/data-table.vue | 26 +- .../src/pages/admin/card-types/create.vue | 66 +- .../src/pages/admin/card-types/data/data.ts | 4 +- frontend/src/pages/admin/card-types/index.vue | 70 +- .../pages/admin/cards/components/columns.ts | 42 +- .../cards/components/data-table-toolbar.vue | 6 +- .../admin/cards/components/data-table.vue | 32 +- frontend/src/pages/admin/cards/create.vue | 56 +- frontend/src/pages/admin/cards/data/data.ts | 6 +- frontend/src/pages/admin/cards/index.vue | 64 +- .../src/pages/admin/cloud-constants/[id].vue | 472 +++++++------ .../cloud-constants/components/columns.ts | 34 +- .../components/data-table-toolbar.vue | 4 +- .../cloud-constants/components/data-table.vue | 22 +- .../pages/admin/cloud-constants/create.vue | 74 +- .../src/pages/admin/cloud-constants/index.vue | 46 +- .../src/pages/admin/cloud-variables/[id].vue | 631 ++++++++--------- .../admin/cloud-variables/[id]/records.vue | 2 +- .../cloud-variables/components/columns.ts | 46 +- .../components/data-table-row-actions.vue | 2 +- .../components/data-table-toolbar.vue | 2 +- .../cloud-variables/components/data-table.vue | 26 +- .../pages/admin/cloud-variables/create.vue | 104 +-- .../src/pages/admin/cloud-variables/index.vue | 54 +- .../pages/admin/devices/components/columns.ts | 4 +- .../devices/components/data-table-toolbar.vue | 12 +- .../admin/devices/components/data-table.vue | 26 +- frontend/src/pages/admin/devices/index.vue | 54 +- .../src/pages/admin/dynamic-code/[id].vue | 513 ++++++++------ .../admin/dynamic-code/components/columns.ts | 24 +- .../components/data-table-toolbar.vue | 6 +- .../dynamic-code/components/data-table.vue | 22 +- .../src/pages/admin/dynamic-code/create.vue | 62 +- .../src/pages/admin/dynamic-code/index.vue | 66 +- .../pages/admin/extension/api-keys/create.vue | 88 +-- .../extension/components/apikey-columns.ts | 24 +- .../components/apikey-data-table-toolbar.vue | 4 +- .../components/apikey-data-table.vue | 22 +- .../extension/components/webhook-columns.ts | 26 +- .../components/webhook-data-table-toolbar.vue | 4 +- .../components/webhook-data-table.vue | 24 +- frontend/src/pages/admin/extension/index.vue | 106 +-- .../pages/admin/extension/webhooks/create.vue | 86 +-- frontend/src/pages/admin/finance/index.vue | 96 +-- frontend/src/pages/admin/index.vue | 96 +-- frontend/src/pages/admin/logs.vue | 28 +- .../pages/admin/logs/components/columns.ts | 118 ++-- .../logs/components/data-table-toolbar.vue | 2 +- .../admin/logs/components/data-table.vue | 18 +- frontend/src/pages/admin/logs/index.vue | 34 +- .../src/pages/admin/risk-control/[id].vue | 511 +++++++------- .../admin/risk-control/components/columns.ts | 2 +- .../components/data-table-toolbar.vue | 2 +- .../risk-control/components/data-table.vue | 6 +- .../src/pages/admin/risk-control/create.vue | 4 +- .../src/pages/admin/risk-control/index.vue | 8 +- .../admin/sessions/components/columns.ts | 2 +- .../admin/sessions/components/data-table.vue | 6 +- frontend/src/pages/admin/sessions/index.vue | 4 +- frontend/src/pages/admin/tickets.vue | 72 +- frontend/src/pages/admin/tickets/[id].vue | 565 ++++++++------- .../pages/admin/tickets/components/columns.ts | 48 +- .../tickets/components/data-table-toolbar.vue | 4 +- .../admin/tickets/components/data-table.vue | 20 +- frontend/src/pages/admin/tickets/create.vue | 80 +-- frontend/src/pages/admin/users/[id].vue | 660 +++++++++--------- .../pages/admin/users/components/columns.ts | 30 +- .../users/components/data-table-toolbar.vue | 6 +- .../admin/users/components/data-table.vue | 24 +- frontend/src/pages/admin/users/create.vue | 50 +- frontend/src/pages/admin/users/index.vue | 70 +- frontend/src/pages/admin/versions/[id].vue | 626 ++++++++--------- .../admin/versions/components/columns.ts | 26 +- .../components/data-table-toolbar.vue | 6 +- .../admin/versions/components/data-table.vue | 22 +- frontend/src/pages/admin/versions/create.vue | 4 +- frontend/src/pages/admin/versions/index.vue | 44 +- frontend/src/pages/auth/login.vue | 6 +- frontend/src/pages/auth/register.vue | 4 +- .../developer/agent-apps/[id]/card-types.vue | 8 +- .../pages/developer/agent-apps/[id]/edit.vue | 41 +- .../developer/agent-apps/[id]/recharge.vue | 8 +- .../agent-apps/components/columns.ts | 23 +- .../components/data-table-toolbar.vue | 4 +- .../agent-apps/components/data-table.vue | 18 +- .../pages/developer/agent-apps/data/schema.ts | 2 - .../src/pages/developer/agent-apps/index.vue | 70 +- .../src/pages/developer/agent-apps/invite.vue | 4 +- .../pages/developer/agent-apps/request.vue | 16 +- frontend/src/pages/developer/agents/[id].vue | 577 +++++++-------- .../developer/agents/components/columns.ts | 32 +- .../agents/components/data-table.vue | 23 +- .../src/pages/developer/agents/create.vue | 105 +-- .../src/pages/developer/agents/data/schema.ts | 1 - frontend/src/pages/developer/agents/index.vue | 38 +- .../pages/developer/announcements/[id].vue | 527 +++++++------- .../announcements/components/columns.ts | 28 +- .../components/data-table-toolbar.vue | 6 +- .../announcements/components/data-table.vue | 26 +- .../pages/developer/announcements/create.vue | 4 +- .../pages/developer/announcements/index.vue | 54 +- frontend/src/pages/developer/applications.vue | 40 +- .../developer/applications/[id]/email.vue | 2 +- .../developer/applications/[id]/security.vue | 2 +- .../developer/applications/[id]/settings.vue | 2 +- .../applications/components/columns.ts | 2 +- .../applications/components/data-table.vue | 22 +- .../pages/developer/applications/create.vue | 152 ++-- .../src/pages/developer/card-types/[id].vue | 601 +++++++++------- .../card-types/components/columns.ts | 30 +- .../components/data-table-toolbar.vue | 6 +- .../card-types/components/data-table.vue | 32 +- .../src/pages/developer/card-types/create.vue | 66 +- .../pages/developer/card-types/data/data.ts | 4 +- .../src/pages/developer/card-types/index.vue | 70 +- .../developer/cards/components/columns.ts | 42 +- .../cards/components/data-table-toolbar.vue | 6 +- .../developer/cards/components/data-table.vue | 38 +- frontend/src/pages/developer/cards/create.vue | 56 +- .../src/pages/developer/cards/data/data.ts | 6 +- frontend/src/pages/developer/cards/index.vue | 64 +- .../pages/developer/cloud-constants/[id].vue | 472 +++++++------ .../cloud-constants/components/columns.ts | 34 +- .../components/data-table-toolbar.vue | 4 +- .../cloud-constants/components/data-table.vue | 28 +- .../developer/cloud-constants/create.vue | 74 +- .../pages/developer/cloud-constants/index.vue | 46 +- .../pages/developer/cloud-variables/[id].vue | 585 ++++++++-------- .../cloud-variables/[id]/records.vue | 2 +- .../cloud-variables/components/columns.ts | 46 +- .../components/data-table-row-actions.vue | 2 +- .../components/data-table-toolbar.vue | 4 +- .../cloud-variables/components/data-table.vue | 32 +- .../developer/cloud-variables/create.vue | 104 +-- .../pages/developer/cloud-variables/index.vue | 54 +- .../developer/devices/components/columns.ts | 4 +- .../devices/components/data-table-toolbar.vue | 14 +- .../devices/components/data-table.vue | 32 +- .../src/pages/developer/devices/index.vue | 54 +- .../src/pages/developer/dynamic-code/[id].vue | 513 ++++++++------ .../dynamic-code/components/columns.ts | 24 +- .../components/data-table-toolbar.vue | 6 +- .../dynamic-code/components/data-table.vue | 28 +- .../pages/developer/dynamic-code/create.vue | 62 +- .../pages/developer/dynamic-code/index.vue | 66 +- .../developer/extension/api-keys/create.vue | 88 +-- .../extension/components/apikey-columns.ts | 24 +- .../components/apikey-data-table-toolbar.vue | 6 +- .../components/apikey-data-table.vue | 28 +- .../extension/components/webhook-columns.ts | 28 +- .../components/webhook-data-table-toolbar.vue | 6 +- .../components/webhook-data-table.vue | 30 +- .../src/pages/developer/extension/index.vue | 106 +-- .../developer/extension/webhooks/create.vue | 86 +-- .../src/pages/developer/finance/index.vue | 96 +-- frontend/src/pages/developer/index.vue | 96 +-- frontend/src/pages/developer/logs.vue | 32 +- .../developer/logs/components/data-table.vue | 24 +- .../src/pages/developer/risk-control/[id].vue | 511 +++++++------- .../risk-control/components/columns.ts | 2 +- .../components/data-table-toolbar.vue | 2 +- .../risk-control/components/data-table.vue | 6 +- .../pages/developer/risk-control/create.vue | 4 +- .../pages/developer/risk-control/index.vue | 8 +- .../developer/sessions/components/columns.ts | 2 +- .../components/data-table-toolbar.vue | 2 +- .../sessions/components/data-table.vue | 6 +- .../src/pages/developer/sessions/index.vue | 4 +- frontend/src/pages/developer/tickets.vue | 72 +- frontend/src/pages/developer/tickets/[id].vue | 565 ++++++++------- .../developer/tickets/components/columns.ts | 48 +- .../tickets/components/data-table-toolbar.vue | 4 +- .../tickets/components/data-table.vue | 26 +- .../src/pages/developer/tickets/create.vue | 80 +-- frontend/src/pages/developer/users/[id].vue | 660 +++++++++--------- .../developer/users/components/columns.ts | 28 +- .../users/components/data-table-toolbar.vue | 6 +- .../developer/users/components/data-table.vue | 30 +- frontend/src/pages/developer/users/create.vue | 50 +- frontend/src/pages/developer/users/index.vue | 70 +- .../src/pages/developer/versions/[id].vue | 626 ++++++++--------- .../developer/versions/components/columns.ts | 26 +- .../components/data-table-toolbar.vue | 6 +- .../versions/components/data-table.vue | 28 +- .../src/pages/developer/versions/create.vue | 4 +- .../src/pages/developer/versions/index.vue | 48 +- frontend/src/pages/profile/index.vue | 2 +- frontend/src/plugins/i18n/en.json | 22 +- frontend/src/plugins/i18n/zh.json | 32 +- frontend/src/router/guard/index.ts | 4 +- frontend/src/router/routes.ts | 246 +++---- 235 files changed, 9082 insertions(+), 8952 deletions(-) diff --git a/backend/internal/model/models.go b/backend/internal/model/models.go index 130a83e..89aa970 100644 --- a/backend/internal/model/models.go +++ b/backend/internal/model/models.go @@ -28,7 +28,6 @@ type User struct { ApiToken string `gorm:"size:64" json:"api_token"` ParentAgentID *uint `gorm:"index" json:"parent_agent_id"` - Commission float64 `gorm:"default:0" json:"commission"` CanCreateAgent bool `gorm:"default:false" json:"can_create_agent"` Balance float64 `gorm:"default:0" json:"balance"` @@ -557,7 +556,6 @@ type AgentApplication struct { AgentID uint `json:"agent_id"` ApplicationID uint `json:"application_id"` DeveloperID uint `json:"developer_id"` - Commission float64 `gorm:"default:0.1" json:"commission"` Discount float64 `gorm:"default:1.0" json:"discount"` Status string `gorm:"size:20;default:active" json:"status"` IsReceived bool `gorm:"default:false" json:"is_received"` diff --git a/backend/internal/router/agent/agent.go b/backend/internal/router/agent/agent.go index ec31a68..393423f 100644 --- a/backend/internal/router/agent/agent.go +++ b/backend/internal/router/agent/agent.go @@ -80,7 +80,6 @@ func handleGetApps(c *gin.Context) { "description": aa.Application.Description, "status": aa.Application.Status, "authorized_at": aa.CreatedAt, - "commission": aa.Commission, }) } } @@ -224,7 +223,6 @@ func handleGetFinance(c *gin.Context) { response.Success(c, gin.H{ "balance": user.Balance, - "commission": user.Commission, "records": records, }) } @@ -244,7 +242,6 @@ func handleGetProfile(c *gin.Context) { "email": user.Email, "avatar": user.Avatar, "balance": user.Balance, - "commission": user.Commission, "can_create_agent": user.CanCreateAgent, }) } diff --git a/backend/internal/router/developer/agent_apps.go b/backend/internal/router/developer/agent_apps.go index 88180b3..2e4890d 100644 --- a/backend/internal/router/developer/agent_apps.go +++ b/backend/internal/router/developer/agent_apps.go @@ -137,7 +137,6 @@ func handleGetAgentApps(c *gin.Context) { AgentEmail string `json:"agent_email"` ApplicationID uint `json:"application_id"` AppName string `json:"app_name"` - Commission float64 `json:"commission"` Discount float64 `json:"discount"` Status string `json:"status"` CardTypes []CardTypeResponse `json:"card_types"` @@ -181,7 +180,6 @@ func handleGetAgentApps(c *gin.Context) { AgentEmail: agentEmail, ApplicationID: aa.ApplicationID, AppName: appName, - Commission: aa.Commission, Discount: aa.Discount, Status: aa.Status, CardTypes: cardTypes, @@ -496,7 +494,6 @@ func handleApproveRequest(c *gin.Context) { AgentID: req.AgentID, ApplicationID: req.ApplicationID, DeveloperID: userID, - Commission: 0.1, Discount: 1.0, Status: "active", IsReceived: true, @@ -606,7 +603,6 @@ func handleGetAgentAppDetail(c *gin.Context) { AgentEmail string `json:"agent_email"` ApplicationID uint `json:"application_id"` AppName string `json:"app_name"` - Commission float64 `json:"commission"` Discount float64 `json:"discount"` Status string `json:"status"` CardTypes []CardTypeResponse `json:"card_types"` @@ -629,7 +625,6 @@ func handleGetAgentAppDetail(c *gin.Context) { AgentName: agent.Username, ApplicationID: agentApp.ApplicationID, AppName: application.Name, - Commission: agentApp.Commission, Discount: agentApp.Discount, Status: agentApp.Status, CardTypes: cardTypes, @@ -648,7 +643,6 @@ func handleUpdateAgentApp(c *gin.Context) { agentAppID := c.Param("id") var reqBody struct { - Commission *float64 `json:"commission"` Discount *float64 `json:"discount"` Status *string `json:"status"` } @@ -664,9 +658,6 @@ func handleUpdateAgentApp(c *gin.Context) { } updates := make(map[string]interface{}) - if reqBody.Commission != nil { - updates["commission"] = *reqBody.Commission - } if reqBody.Discount != nil { updates["discount"] = *reqBody.Discount } diff --git a/backend/internal/router/developer/agents.go b/backend/internal/router/developer/agents.go index 39980e0..d031324 100644 --- a/backend/internal/router/developer/agents.go +++ b/backend/internal/router/developer/agents.go @@ -40,7 +40,6 @@ type AgentTreeNode struct { CreatedAt string `json:"created_at"` LastLoginAt string `json:"last_login_at"` Balance float64 `json:"balance"` - Commission float64 `json:"commission"` CanCreateAgent bool `json:"can_create_agent"` CardsCount int `json:"cards_count"` ChildAgentsCount int `json:"child_agents_count"` @@ -69,7 +68,6 @@ func handleGetAgents(c *gin.Context) { CreatedAt string `json:"created_at"` LastLoginAt string `json:"last_login_at"` Balance float64 `json:"balance"` - Commission float64 `json:"commission"` CanCreateAgent bool `json:"can_create_agent"` CardsCount int `json:"cards_count"` ChildAgentsCount int `json:"child_agents_count"` @@ -110,7 +108,6 @@ func handleGetAgents(c *gin.Context) { CreatedAt: user.CreatedAt.Format("2006-01-02 15:04:05"), LastLoginAt: lastLoginAt, Balance: user.Balance, - Commission: user.Commission, CanCreateAgent: user.CanCreateAgent, CardsCount: int(cardsCount), ChildAgentsCount: int(childAgentsCount), @@ -185,7 +182,6 @@ func handleGetAgentsTree(c *gin.Context) { CreatedAt: user.CreatedAt.Format("2006-01-02 15:04:05"), LastLoginAt: lastLoginAt, Balance: user.Balance, - Commission: user.Commission, CanCreateAgent: user.CanCreateAgent, CardsCount: int(cardsCount), ChildAgentsCount: int(childAgentsCount), @@ -217,7 +213,6 @@ func handleCreateAgent(c *gin.Context) { Email string `json:"email"` Password string `json:"password" binding:"required"` ParentAgentID *uint `json:"parent_agent_id"` - Commission float64 `json:"commission"` CanCreateAgent bool `json:"can_create_agent"` Balance float64 `json:"balance"` } @@ -259,7 +254,6 @@ func handleCreateAgent(c *gin.Context) { Role: "agent", Status: "active", ParentAgentID: req.ParentAgentID, - Commission: req.Commission, CanCreateAgent: req.CanCreateAgent, Balance: req.Balance, } @@ -365,7 +359,6 @@ func handleGetAgentDetail(c *gin.Context) { "role": user.Role, "parent_agent_id": user.ParentAgentID, "parent_agent_name": parentAgentName, - "commission": user.Commission, "can_create_agent": user.CanCreateAgent, "balance": user.Balance, "created_at": user.CreatedAt.Format("2006-01-02 15:04:05"), @@ -387,7 +380,6 @@ func handleUpdateAgent(c *gin.Context) { var req struct { ParentAgentID *uint `json:"parent_agent_id"` - Commission *float64 `json:"commission"` Email *string `json:"email"` Password *string `json:"password"` CanCreateAgent *bool `json:"can_create_agent"` @@ -414,9 +406,6 @@ func handleUpdateAgent(c *gin.Context) { if req.Email != nil { user.Email = req.Email } - if req.Commission != nil { - user.Commission = *req.Commission - } if req.Password != nil && *req.Password != "" { hashedPassword, err := bcrypt.GenerateFromPassword([]byte(*req.Password), bcrypt.DefaultCost) if err != nil { diff --git a/backend/scripts/translate_docs_i18n.go b/backend/scripts/translate_docs_i18n.go index 184c88c..a4bf4a9 100644 --- a/backend/scripts/translate_docs_i18n.go +++ b/backend/scripts/translate_docs_i18n.go @@ -153,7 +153,7 @@ func main() { }, "如何实现代理授权?": { TitleEn: "How to Implement Agent Authorization?", - ContentEn: "# How to Implement Agent Authorization?\n\n## Overview\nAgent authorization allows you to delegate application management to agents.\n\n## Setup Steps\n\n### 1. Create Agent Application\n1. Go to Console > Agent Applications\n2. Click \"Create Agent Application\"\n3. Select the application to authorize\n4. Set commission rate\n\n### 2. Generate Agent Link\nAfter creation, you'll get an agent link:\n```\nhttps://platform.com/agent/AGENT_CODE\n```\n\n### 3. Agent Dashboard\nAgents can access their dashboard to:\n- View sales statistics\n- Generate card keys\n- Manage users", + ContentEn: "# How to Implement Agent Authorization?\n\n## Overview\nAgent authorization allows you to delegate application management to agents.\n\n## Setup Steps\n\n### 1. Create Agent Application\n1. Go to Console > Agent Applications\n2. Click \"Create Agent Application\"\n3. Select the application to authorize\n4. Set discount rate\n\n### 2. Generate Agent Link\nAfter creation, you'll get an agent link:\n```\nhttps://platform.com/agent/AGENT_CODE\n```\n\n### 3. Agent Dashboard\nAgents can access their dashboard to:\n- View sales statistics\n- Generate card keys\n- Manage users", }, } diff --git a/backend/scripts/update_doc_translations.go b/backend/scripts/update_doc_translations.go index d6f0c4e..8b0c525 100644 --- a/backend/scripts/update_doc_translations.go +++ b/backend/scripts/update_doc_translations.go @@ -141,7 +141,7 @@ func main() { }, "faq-agent": { TitleEn: "How to Implement Agent Authorization?", - ContentEn: "# How to Implement Agent Authorization?\n\n## What is Agent Authorization?\n\nAgent authorization allows developers to authorize their applications to other developers, who can then generate card keys and sell them.\n\n## Authorization Process\n\n1. **Apply for Authorization**\n - Authorized party submits application to authorizer\n - Enter application ID\n - Wait for authorizer approval\n\n2. **Approve Authorization**\n - Authorizer views application\n - Set card key type permissions after approval\n - Set agent commission and discount\n\n3. **Generate Card Keys**\n - Authorized party selects authorized application\n - Select card key types with permission\n - Generate and sell card keys\n\n4. **Settle Commission**\n - Sales revenue is settled proportionally\n - Authorized party receives commission income\n\n## Permission Management\n\n- Authorizer can modify card key type permissions at any time\n- Can pause or terminate authorization\n- Can view agent's sales data", + ContentEn: "# How to Implement Agent Authorization?\n\n## What is Agent Authorization?\n\nAgent authorization allows developers to authorize their applications to other developers, who can then generate card keys and sell them.\n\n## Authorization Process\n\n1. **Apply for Authorization**\n - Authorized party submits application to authorizer\n - Enter application ID\n - Wait for authorizer approval\n\n2. **Approve Authorization**\n - Authorizer views application\n - Set card key type permissions after approval\n - Set agent discount\n\n3. **Generate Card Keys**\n - Authorized party selects authorized application\n - Select card key types with permission\n - Generate and sell card keys\n\n4. **Settle Revenue**\n - Sales revenue is settled proportionally\n - Authorized party receives income\n\n## Permission Management\n\n- Authorizer can modify card key type permissions at any time\n- Can pause or terminate authorization\n- Can view agent's sales data", SummaryEn: "Implementation process and permission management for agent authorization", }, } diff --git a/frontend/src/components/data-table/date-range-filter.vue b/frontend/src/components/data-table/date-range-filter.vue index 1439a7c..7ff2f59 100644 --- a/frontend/src/components/data-table/date-range-filter.vue +++ b/frontend/src/components/data-table/date-range-filter.vue @@ -35,7 +35,7 @@ const displayValue = computed(() => { return '' }) -const buttonTitle = computed(() => props.title || t('developer.cards.timeRange')) +const buttonTitle = computed(() => props.title || t('admin.cards.timeRange')) function setQuickRange(range: 'today' | 'week' | 'month') { const now = new Date() @@ -83,19 +83,19 @@ function clearFilter() {
- {{ t('developer.cards.selectTimeRange') }} + {{ t('admin.cards.selectTimeRange') }}
~ @@ -103,17 +103,17 @@ function clearFilter() {
- {{ t('developer.cards.today') }} + {{ t('admin.cards.today') }} - {{ t('developer.cards.last7Days') }} + {{ t('admin.cards.last7Days') }} - {{ t('developer.cards.thisMonth') }} + {{ t('admin.cards.thisMonth') }}
- {{ t('developer.cards.reset') }} + {{ t('admin.cards.reset') }}
diff --git a/frontend/src/components/data-table/faceted-filter.vue b/frontend/src/components/data-table/faceted-filter.vue index 2da80c6..b1b226f 100644 --- a/frontend/src/components/data-table/faceted-filter.vue +++ b/frontend/src/components/data-table/faceted-filter.vue @@ -70,7 +70,7 @@ const filterFunction = (list: DataTableFacetedFilter['options'], term: string) = v-for="option in options" :key="option.value" :value="option" - @select="(_e) => { + @select="(_e: any) => { const isSelected = selectedValues.has(option.value) if (isSelected) { selectedValues.delete(option.value) diff --git a/frontend/src/components/developer-sidebar/index.vue b/frontend/src/components/developer-sidebar/index.vue index a0fbc2d..74d3173 100644 --- a/frontend/src/components/developer-sidebar/index.vue +++ b/frontend/src/components/developer-sidebar/index.vue @@ -31,7 +31,7 @@ onMounted(() => { const teams = [ { - name: '开发者后台', + name: '管理后台', logo: Code, plan: 'Developer', }, @@ -43,42 +43,42 @@ const navMain = [ items: [ { title: '控制台', - url: '/developer', + url: '/admin', icon: Gauge, }, { title: '应用管理', - url: '/developer/applications', + url: '/admin/applications', icon: Boxes, }, { title: '卡类管理', - url: '/developer/card-types', + url: '/admin/card-types', icon: Hash, }, { title: '卡密管理', - url: '/developer/cards', + url: '/admin/cards', icon: Key, }, { title: '公告管理', - url: '/developer/announcements', + url: '/admin/announcements', icon: Megaphone, }, { title: '版本管理', - url: '/developer/versions', + url: '/admin/versions', icon: GitBranch, }, { title: '用户管理', - url: '/developer/users', + url: '/admin/users', icon: Users, }, { title: '代理管理', - url: '/developer/agents', + url: '/admin/agents', icon: Network, }, ], @@ -88,17 +88,17 @@ const navMain = [ items: [ { title: '财务管理', - url: '/developer/finance', + url: '/admin/finance', icon: DollarSign, }, { title: '日志记录', - url: '/developer/logs', + url: '/admin/logs', icon: ScrollText, }, { title: '工单系统', - url: '/developer/tickets', + url: '/admin/tickets', icon: MessageSquare, }, ], @@ -108,27 +108,27 @@ const navMain = [ items: [ { title: '云端常量', - url: '/developer/cloud-constants', + url: '/admin/cloud-constants', icon: FileLock, }, { title: '云端变量', - url: '/developer/cloud-variables', + url: '/admin/cloud-variables', icon: Variable, }, { title: '云端函数', - url: '/developer/cloud-function', + url: '/admin/cloud-function', icon: Code, }, { title: '风控管理', - url: '/developer/risk-control', + url: '/admin/risk-control', icon: Shield, }, { title: '扩展配置', - url: '/developer/extension', + url: '/admin/extension', icon: Plug, }, ], diff --git a/frontend/src/components/developer-sidebar/nav-footer.vue b/frontend/src/components/developer-sidebar/nav-footer.vue index f8fa421..53e0c78 100644 --- a/frontend/src/components/developer-sidebar/nav-footer.vue +++ b/frontend/src/components/developer-sidebar/nav-footer.vue @@ -139,11 +139,11 @@ function handleLogout() { - + 个人中心 - + 工单系统 diff --git a/frontend/src/components/marketing-layout/the-header.vue b/frontend/src/components/marketing-layout/the-header.vue index 831e90a..a911b0f 100644 --- a/frontend/src/components/marketing-layout/the-header.vue +++ b/frontend/src/components/marketing-layout/the-header.vue @@ -66,34 +66,34 @@ const developerMenus = computed(() => ({ main: { title: t('nav.mainFeatures'), items: [ - { title: t('nav.console'), url: '/developer', icon: 'lucide:gauge' }, - { title: t('nav.applications'), url: '/developer/applications', icon: 'lucide:boxes' }, - { title: t('nav.cardTypes'), url: '/developer/card-types', icon: 'lucide:hash' }, - { title: t('nav.cards'), url: '/developer/cards', icon: 'lucide:key' }, - { title: t('nav.announcements'), url: '/developer/announcements', icon: 'lucide:megaphone' }, - { title: t('nav.versions'), url: '/developer/versions', icon: 'lucide:git-branch' }, - { title: t('nav.users'), url: '/developer/users', icon: 'lucide:users' }, - { title: t('nav.devices'), url: '/developer/devices', icon: 'lucide:monitor' }, - { title: t('nav.sessions'), url: '/developer/sessions', icon: 'lucide:wifi' }, - { title: t('nav.agentApps'), url: '/developer/agent-apps', icon: 'lucide:share-2' }, + { title: t('nav.console'), url: '/admin', icon: 'lucide:gauge' }, + { title: t('nav.applications'), url: '/admin/applications', icon: 'lucide:boxes' }, + { title: t('nav.cardTypes'), url: '/admin/card-types', icon: 'lucide:hash' }, + { title: t('nav.cards'), url: '/admin/cards', icon: 'lucide:key' }, + { title: t('nav.announcements'), url: '/admin/announcements', icon: 'lucide:megaphone' }, + { title: t('nav.versions'), url: '/admin/versions', icon: 'lucide:git-branch' }, + { title: t('nav.users'), url: '/admin/users', icon: 'lucide:users' }, + { title: t('nav.devices'), url: '/admin/devices', icon: 'lucide:monitor' }, + { title: t('nav.sessions'), url: '/admin/sessions', icon: 'lucide:wifi' }, + { title: t('nav.agentApps'), url: '/admin/agent-apps', icon: 'lucide:share-2' }, ], }, business: { title: t('nav.businessManagement'), items: [ - { title: t('nav.finance'), url: '/developer/finance', icon: 'lucide:dollar-sign' }, - { title: t('nav.logs'), url: '/developer/logs', icon: 'lucide:scroll-text' }, - { title: t('nav.tickets'), url: '/developer/tickets', icon: 'lucide:message-square' }, + { title: t('nav.finance'), url: '/admin/finance', icon: 'lucide:dollar-sign' }, + { title: t('nav.logs'), url: '/admin/logs', icon: 'lucide:scroll-text' }, + { title: t('nav.tickets'), url: '/admin/tickets', icon: 'lucide:message-square' }, ], }, advanced: { title: t('nav.advancedFeatures'), items: [ - { title: t('nav.cloudConstants'), url: '/developer/cloud-constants', icon: 'lucide:file-lock' }, - { title: t('nav.cloudVariables'), url: '/developer/cloud-variables', icon: 'lucide:variable' }, - { title: t('nav.cloudFunction'), url: '/developer/cloud-function', icon: 'lucide:code' }, - { title: t('nav.riskControl'), url: '/developer/risk-control', icon: 'lucide:shield' }, - { title: t('nav.extension'), url: '/developer/extension', icon: 'lucide:plug' }, + { title: t('nav.cloudConstants'), url: '/admin/cloud-constants', icon: 'lucide:file-lock' }, + { title: t('nav.cloudVariables'), url: '/admin/cloud-variables', icon: 'lucide:variable' }, + { title: t('nav.cloudFunction'), url: '/admin/cloud-function', icon: 'lucide:code' }, + { title: t('nav.riskControl'), url: '/admin/risk-control', icon: 'lucide:shield' }, + { title: t('nav.extension'), url: '/admin/extension', icon: 'lucide:plug' }, ], }, })) @@ -334,7 +334,7 @@ watch(route, () => { {{ t('nav.profile') }} - + {{ t('nav.developerDashboard') }} diff --git a/frontend/src/layouts/developer.vue b/frontend/src/layouts/developer.vue index f511e33..2ae69f4 100644 --- a/frontend/src/layouts/developer.vue +++ b/frontend/src/layouts/developer.vue @@ -2,7 +2,7 @@ import { computed } from 'vue' import { useRouter } from 'vue-router' -import DeveloperSidebar from '@/components/developer-sidebar/index.vue' +import AdminSidebar from '@/components/developer-sidebar/index.vue' import LanguageChange from '@/components/language-change.vue' import ThemePopover from '@/components/custom-theme/theme-popover.vue' import ToggleTheme from '@/components/toggle-theme.vue' @@ -12,7 +12,7 @@ const router = useRouter() const breadcrumbs = computed(() => { const path = router.currentRoute.value.path const parts = path.split('/').filter(Boolean) - const crumbs = [{ title: '控制台', path: '/developer' }] + const crumbs = [{ title: '控制台', path: '/admin' }] const titleMap: Record = { applications: '应用管理', @@ -44,7 +44,7 @@ const breadcrumbs = computed(() => { invite: '邀请授权', } - let currentPath = '/developer' + let currentPath = '/admin' for (let i = 1; i < parts.length; i++) { const part = parts[i] currentPath += `/${part}` @@ -69,7 +69,7 @@ const breadcrumbs = computed(() => {