From 8df7024a454475d6ec30ede3081920df783db02c Mon Sep 17 00:00:00 2001 From: sexygoat <1538832180@qq.com> Date: Thu, 2 Apr 2026 13:42:57 +0800 Subject: [PATCH] modify --- .../add-button-permissions/proposal.md | 43 +- .../changes/add-button-permissions/tasks.md | 15 + .../add-iot-device-operations/proposal.md | 6 + .../specs/shop-management/spec.md | 5 + .../changes/add-shop-default-roles/tasks.md | 3 + .../proposal.md | 1 + .../specs/device-api/spec.md | 6 +- .../specs/iot-card-api/spec.md | 6 +- .../tasks.md | 3 + .../update-package-management-api/proposal.md | 4 + .../specs/package-series-management/spec.md | 8 +- .../specs/shop-package-allocation/spec.md | 2 + .../specs/shop-series-allocation/spec.md | 3 + src/api/modules/agentRecharge.ts | 5 +- src/api/modules/card.ts | 44 +- src/api/modules/device.ts | 10 +- src/api/modules/exchange.ts | 9 +- src/api/modules/manualTrigger.ts | 8 +- src/api/modules/order.ts | 9 +- src/api/modules/pollingConcurrency.ts | 5 +- src/api/modules/shopSeriesGrant.ts | 9 +- src/api/modules/wechatConfig.ts | 4 +- .../business/BatchOperationDialog.vue | 2 +- .../business/CustomerAccountDialog.vue | 4 +- src/components/common/DetailPage.vue | 204 ++-- src/components/core/others/ArtMenuRight.vue | 4 +- .../core/others/TableContextMenuHint.vue | 16 +- src/components/device/SetWiFiDialog.vue | 37 +- src/components/device/SpeedLimitDialog.vue | 37 +- src/components/device/SwitchCardDialog.vue | 19 +- src/composables/useAuth.ts | 8 +- src/composables/useCheckedColumns.ts | 5 +- src/composables/useTableContextMenu.ts | 7 +- src/types/auto-imports.d.ts | 14 +- .../account-management/account/index.vue | 32 +- .../enterprise-cards/index.vue | 2 +- .../platform-account/index.vue | 59 +- .../account-management/shop-account/index.vue | 4 +- .../asset-management/asset-assign/detail.vue | 5 +- .../asset-management/asset-assign/index.vue | 6 +- .../authorization-records/detail.vue | 6 +- .../authorization-records/index.vue | 2 - .../asset-management/device-list/index.vue | 54 +- .../asset-management/device-search/index.vue | 2 +- .../asset-management/device-task/index.vue | 3 - .../enterprise-devices/index.vue | 5 +- .../exchange-management/detail.vue | 10 +- .../exchange-management/index.vue | 46 +- .../iot-card-management/index.vue | 42 +- .../asset-management/iot-card-query/index.vue | 1 - .../asset-management/iot-card-task/index.vue | 8 +- .../asset-management/task-detail/index.vue | 4 +- src/views/auth/login/index.vue | 10 +- src/views/card-management/my-cards/index.vue | 6 +- src/views/common/account-list.vue | 40 +- .../analysis/widget/ActiveWechatConfig.vue | 6 +- .../analysis/widget/CommissionSummary.vue | 14 +- .../analysis/widget/WithdrawalSettings.vue | 6 +- src/views/finance/agent-recharge/detail.vue | 13 +- .../commission/agent-commission/index.vue | 18 +- .../commission/my-commission/index.vue | 7 +- .../commission/withdrawal-settings/index.vue | 4 +- src/views/finance/refund/detail.vue | 19 +- src/views/finance/refund/index.vue | 27 +- src/views/my-simcard/single-card/index.vue | 548 ++++++----- .../order-management/order-list/detail.vue | 14 +- .../order-management/order-list/index.vue | 6 +- .../package-list/detail.vue | 4 +- .../package-management/package-list/index.vue | 63 +- .../package-series/detail.vue | 4 +- .../series-grants/detail.vue | 6 +- .../series-grants/index.vue | 12 +- .../alert-history/index.vue | 2 +- .../polling-management/alert-rules/index.vue | 582 ++++++------ .../polling-management/concurrency/index.vue | 338 ++++--- src/views/polling-management/config/index.vue | 2 +- .../polling-management/data-cleanup/index.vue | 4 +- .../manual-trigger/index.vue | 894 +++++++++--------- .../polling-management/monitor/index.vue | 20 +- src/views/product/shop/index.vue | 18 +- src/views/settings/wechat-config/detail.vue | 4 +- src/views/settings/wechat-config/index.vue | 97 +- src/views/system/role/index.vue | 51 +- 83 files changed, 1830 insertions(+), 1865 deletions(-) diff --git a/openspec/changes/add-button-permissions/proposal.md b/openspec/changes/add-button-permissions/proposal.md index 0d4fbab..354269b 100644 --- a/openspec/changes/add-button-permissions/proposal.md +++ b/openspec/changes/add-button-permissions/proposal.md @@ -35,20 +35,24 @@ 根据提供的权限JSON,需要添加权限控制的模块包括: 1. **套餐管理** (`/package-management`) + - 套餐系列 (`package-series`) - 套餐列表 (`package-list`) - 单套餐分配 (`package-assign`) - 套餐系列分配 (`series-assign`) 2. **店铺管理** (`/shop-management`) + - 店铺列表 (`list`) 3. **账号管理** (`/account-management`) + - 账号列表 (`account`) - 平台账号 (`platform-account`) - 代理账号 (`shop-account`) 4. **资产管理** (`/asset-management`) + - IoT卡管理 (`iot-card-management`) - IoT卡任务 (`iot-card-task`) - 设备任务 (`device-task`) @@ -67,9 +71,9 @@ ```vue - + ``` diff --git a/openspec/changes/add-button-permissions/tasks.md b/openspec/changes/add-button-permissions/tasks.md index 81996da..cb9a7c7 100644 --- a/openspec/changes/add-button-permissions/tasks.md +++ b/openspec/changes/add-button-permissions/tasks.md @@ -9,12 +9,14 @@ ### 1. 套餐管理模块 (Package Management) ✅ - [x] **套餐系列页面** (`/package-management/package-series`) + - ✅ 引入 `useAuth` composable - ✅ 为"新增套餐系列"按钮添加 `v-permission="'package_series:add'"` - ✅ 为状态切换添加 `disabled: !hasAuth('package_series:update_status')` - ✅ 在操作列中使用 `hasAuth()` 判断编辑权限 (`package_series:edit`)和删除权限 (`package_series:delete`) - [x] **套餐列表页面** (`/package-management/package-list`) + - ✅ 引入 `useAuth` composable - ✅ 为"新增套餐"按钮添加 `v-permission="'package:add'"` - ✅ 为上/下架切换添加 `disabled: !hasAuth('package:update_away')` @@ -22,6 +24,7 @@ - ✅ 在操作列中使用 `hasAuth()` 判断编辑 (`package:edit`) 和删除 (`package:delete`) 权限 - [x] **单套餐分配页面** (`/package-management/package-assign`) + - ✅ 引入 `useAuth` composable - ✅ 为"新增分配"按钮添加 `v-permission="'package_assign:add'"` - ✅ 为状态切换添加 `disabled: !hasAuth('package_assign:update_status')` @@ -50,6 +53,7 @@ ### 3. 账号管理模块 (Account Management) ✅ - [x] **账号列表页面** (`/account-management/account`) + - ✅ 引入 `useAuth` composable - ✅ 为"新增账号"按钮添加 `v-permission="'account:add'"` - ✅ 在操作列中使用 `hasAuth()` 判断以下权限: @@ -58,6 +62,7 @@ - 删除: `account:delete` - [x] **平台账号页面** (`/account-management/platform-account`) + - ✅ 引入 `useAuth` composable - ✅ 为"新增平台账号"按钮添加 `v-permission="'platform_account:add'"` - ✅ 在操作列中使用 `hasAuth()` 判断以下权限: @@ -76,6 +81,7 @@ ### 4. 资产管理模块 (Asset Management) ✅ - [x] **IoT卡管理页面** (`/asset-management/iot-card-management`) + - ✅ 引入 `useAuth` composable - ✅ 为表格头部操作按钮添加权限控制: - 批量分配: `v-permission="'iot_card:batch_allocation'"` @@ -89,16 +95,19 @@ - ✅ 验证权限控制正确工作 - [x] **IoT卡任务页面** (`/asset-management/iot-card-task`) + - ✅ 引入 `useAuth` composable - ✅ 为"批量导入IoT卡"按钮添加 `v-permission="''"` - ✅ 验证权限控制正确工作 - [x] **设备任务页面** (`/asset-management/device-task`) + - ✅ 引入 `useAuth` composable - ✅ 为"批量导入设备"按钮添加 `v-permission="'device_task:bulk_import'"` - ✅ 验证权限控制正确工作 - [x] **设备管理页面** (`/asset-management/device-list`) + - ✅ 引入 `useAuth` composable - ✅ 为表格头部操作按钮添加权限控制: - 批量分配: `v-permission="'devices:batch_allocation'"` @@ -117,6 +126,7 @@ ### 5. 账户管理模块 (Account Module) ✅ - [x] **企业客户页面** (`/account/enterprise-customer`) + - ✅ 引入 `useAuth` composable - ✅ 为"新增企业客户"按钮添加 `v-permission="'enterprise_customer:add'"` - ✅ 在操作列中使用 `hasAuth()` 判断以下权限: @@ -127,6 +137,7 @@ - ✅ 验证权限控制正确工作 - [x] **运营商管理页面** (`/account/carrier-management`) + - ✅ 引入 `useAuth` composable - ✅ 为"新增运营商"按钮添加 `v-permission="'carrier:add'"` - ✅ 为状态切换添加 `disabled: !hasAuth('carrier:update_status')` @@ -134,16 +145,19 @@ - ✅ 验证权限控制正确工作 - [x] **订单管理页面** (`/account/orders`) + - ✅ 引入 `useAuth` composable - ✅ 为"创建订单"按钮添加 `v-permission="'orders:add'"` - ✅ 验证权限控制正确工作 - [x] **提现配置页面** (`/account/commission/withdrawal-settings`) + - ✅ 引入 `useAuth` composable - ✅ 为"新增配置"按钮添加 `v-permission="'withdrawal_settings:add'"` - ✅ 验证权限控制正确工作 - [x] **我的佣金页面** (`/account/commission/my-commission`) + - ✅ 引入 `useAuth` composable - ✅ 为"发起提现"按钮添加 `v-permission="'my_commission:add'"` - ✅ 验证权限控制正确工作 @@ -164,6 +178,7 @@ ### 7. 测试与文档 - [ ] **权限控制测试** + - 创建不同权限组合的测试用户 - 验证每个页面的按钮显示/隐藏符合预期 - 验证状态切换的启用/禁用符合预期 diff --git a/openspec/changes/add-iot-device-operations/proposal.md b/openspec/changes/add-iot-device-operations/proposal.md index 65263c0..31a6edf 100644 --- a/openspec/changes/add-iot-device-operations/proposal.md +++ b/openspec/changes/add-iot-device-operations/proposal.md @@ -7,6 +7,7 @@ ## What Changes ### IoT Card Operations (6 new APIs) + - 查询流量使用情况 (GET /api/admin/iot-cards/{iccid}/gateway-flow) - 查询实名认证状态 (GET /api/admin/iot-cards/{iccid}/gateway-realname) - 查询卡片状态 (GET /api/admin/iot-cards/{iccid}/gateway-status) @@ -15,6 +16,7 @@ - 停用物联网卡 (POST /api/admin/iot-cards/{iccid}/stop) ### Device Operations (6 new APIs) + - 重启设备 (POST /api/admin/devices/by-imei/{imei}/reboot) - 重置设备 (POST /api/admin/devices/by-imei/{imei}/reset) - 设置限速 (PUT /api/admin/devices/by-imei/{imei}/speed-limit) @@ -22,6 +24,7 @@ - 设置WiFi (PUT /api/admin/devices/by-imei/{imei}/wifi) ### UI Changes + - 在 `/asset-management/iot-card-management` 页面添加操作按钮: - "查询流量"按钮(主要操作) - "更多操作"下拉菜单(包含其他5个操作) @@ -32,10 +35,12 @@ ## Impact ### Affected Specs + - **NEW**: `specs/iot-card-operations/spec.md` - IoT卡操作相关的所有需求 - **NEW**: `specs/device-operations/spec.md` - 设备操作相关的所有需求 ### Affected Code + - **API层**: - 新增 `src/api/modules/iotCard.ts` - IoT卡操作API方法 - 新增 `src/api/modules/device.ts` - 设备操作API方法 @@ -47,6 +52,7 @@ - 修改 `src/views/asset-management/devices/index.vue` - 添加操作按钮和对话框 ### Breaking Changes + 无破坏性变更。所有变更都是增量式的新功能添加。 ## Dependencies diff --git a/openspec/changes/add-shop-default-roles/specs/shop-management/spec.md b/openspec/changes/add-shop-default-roles/specs/shop-management/spec.md index e89125c..f1a353d 100644 --- a/openspec/changes/add-shop-default-roles/specs/shop-management/spec.md +++ b/openspec/changes/add-shop-default-roles/specs/shop-management/spec.md @@ -9,9 +9,11 @@ **API端点**: `GET /api/admin/shops/{shop_id}/roles` **路径参数**: + - `shop_id` (integer, required): 店铺ID **响应数据**: + ```typescript { shop_id: number // 店铺ID @@ -54,9 +56,11 @@ interface ShopRole { **API端点**: `POST /api/admin/shops/{shop_id}/roles` **路径参数**: + - `shop_id` (integer, required): 店铺ID **请求体**: + ```typescript { role_ids: number[] | null // 角色ID列表 @@ -106,6 +110,7 @@ interface ShopRole { **API端点**: `DELETE /api/admin/shops/{shop_id}/roles/{role_id}` **路径参数**: + - `shop_id` (integer, required): 店铺ID - `role_id` (integer, required): 角色ID diff --git a/openspec/changes/add-shop-default-roles/tasks.md b/openspec/changes/add-shop-default-roles/tasks.md index c61e084..641c72e 100644 --- a/openspec/changes/add-shop-default-roles/tasks.md +++ b/openspec/changes/add-shop-default-roles/tasks.md @@ -36,11 +36,13 @@ ### 完成的功能 1. **类型定义** - 已在 `src/types/api/shop.ts` 添加了三个接口: + - `ShopRoleResponse`: 店铺角色响应实体 - `ShopRolesResponse`: 店铺角色列表响应 - `AssignShopRolesRequest`: 分配角色请求 2. **API 服务层** - 已在 `src/api/modules/shop.ts` 的 `ShopService` 类中添加: + - `getShopRoles(shopId)`: 获取店铺默认角色列表 - `assignShopRoles(shopId, data)`: 分配店铺默认角色 - `deleteShopRole(shopId, roleId)`: 删除店铺默认角色 @@ -56,6 +58,7 @@ ### 待测试项 所有开发任务已完成,现在需要进行功能测试以确保: + - API 调用正常工作 - UI 交互符合预期 - 边界情况处理正确 diff --git a/openspec/changes/rename-series-allocation-id-to-series-id/proposal.md b/openspec/changes/rename-series-allocation-id-to-series-id/proposal.md index 748d6f1..a4777bf 100644 --- a/openspec/changes/rename-series-allocation-id-to-series-id/proposal.md +++ b/openspec/changes/rename-series-allocation-id-to-series-id/proposal.md @@ -7,6 +7,7 @@ ## What Changes - **BREAKING**: 重命名 4 个 API 端点的请求/响应字段 + - `PATCH /api/admin/iot-cards/series-binding` - 请求参数 `series_allocation_id` → `series_id` - `PATCH /api/admin/devices/series-binding` - 请求参数 `series_allocation_id` → `series_id` - `GET /api/admin/iot-cards/standalone` - 查询参数和响应字段 `series_allocation_id` → `series_id` diff --git a/openspec/changes/rename-series-allocation-id-to-series-id/specs/device-api/spec.md b/openspec/changes/rename-series-allocation-id-to-series-id/specs/device-api/spec.md index accc2f3..e1506be 100644 --- a/openspec/changes/rename-series-allocation-id-to-series-id/specs/device-api/spec.md +++ b/openspec/changes/rename-series-allocation-id-to-series-id/specs/device-api/spec.md @@ -25,6 +25,7 @@ The system SHALL support filtering devices by package series ID in query paramet The system SHALL include package series ID in device response data. **Response Field**: `series_id` (number | null) + - Value is package series ID if device is bound to a series - Value is null if device has no series binding @@ -58,18 +59,21 @@ The system SHALL provide an endpoint to batch set package series binding for dev **Endpoint**: `PATCH /api/admin/devices/series-binding` **Request Body**: + ```json { "device_ids": [1, 2, 3], - "series_id": 123 // Changed from series_allocation_id + "series_id": 123 // Changed from series_allocation_id } ``` **Field Definitions**: + - `device_ids`: Array of device IDs (max 500 items) - `series_id`: Package series ID (tb_package_series.id), 0 means clear association **Response**: + ```json { "code": 0, diff --git a/openspec/changes/rename-series-allocation-id-to-series-id/specs/iot-card-api/spec.md b/openspec/changes/rename-series-allocation-id-to-series-id/specs/iot-card-api/spec.md index ebe381a..6376d3b 100644 --- a/openspec/changes/rename-series-allocation-id-to-series-id/specs/iot-card-api/spec.md +++ b/openspec/changes/rename-series-allocation-id-to-series-id/specs/iot-card-api/spec.md @@ -25,6 +25,7 @@ The system SHALL support filtering standalone IoT cards by package series ID in The system SHALL include package series ID in standalone IoT card response data. **Response Field**: `series_id` (number | null) + - Value is package series ID if card is bound to a series - Value is null if card has no series binding @@ -58,18 +59,21 @@ The system SHALL provide an endpoint to batch set package series binding for IoT **Endpoint**: `PATCH /api/admin/iot-cards/series-binding` **Request Body**: + ```json { "iccids": ["898600..."], - "series_id": 123 // Changed from series_allocation_id + "series_id": 123 // Changed from series_allocation_id } ``` **Field Definitions**: + - `iccids`: Array of ICCIDs (max 500 items) - `series_id`: Package series ID (tb_package_series.id), 0 means clear association **Response**: + ```json { "code": 0, diff --git a/openspec/changes/rename-series-allocation-id-to-series-id/tasks.md b/openspec/changes/rename-series-allocation-id-to-series-id/tasks.md index 94f47f4..027a914 100644 --- a/openspec/changes/rename-series-allocation-id-to-series-id/tasks.md +++ b/openspec/changes/rename-series-allocation-id-to-series-id/tasks.md @@ -3,14 +3,17 @@ ## 1. 类型定义更新 ### 1.1 批量设置接口参数重命名 + - [x] 1.1.1 更新 `src/types/api/device.ts` 中 BatchSetDeviceSeriesBindingRequest 接口,将 `series_allocation_id` 改为 `series_id` - [x] 1.1.2 更新 `src/types/api/card.ts` 中 BatchSetCardSeriesBindingRequest 接口,将 `series_allocation_id` 改为 `series_id` ### 1.2 查询参数新增字段 + - [x] 1.2.1 在 `src/types/api/device.ts` 的 DeviceQueryParams 接口中添加 `series_id?: number` 查询参数 - [x] 1.2.2 在 `src/types/api/card.ts` 的 StandaloneCardQueryParams 接口中添加 `series_id?: number` 查询参数 ### 1.3 响应类型新增字段 + - [x] 1.3.1 在 `src/types/api/device.ts` 的 Device 接口中添加 `series_id?: number | null` 响应字段(在 updated_at 后面) - [x] 1.3.2 在 `src/types/api/card.ts` 的 StandaloneIotCard 接口中添加 `series_id?: number | null` 响应字段(在 updated_at 后面) diff --git a/openspec/changes/update-package-management-api/proposal.md b/openspec/changes/update-package-management-api/proposal.md index 634c271..a881bb1 100644 --- a/openspec/changes/update-package-management-api/proposal.md +++ b/openspec/changes/update-package-management-api/proposal.md @@ -17,6 +17,7 @@ **修改**: `src/types/api/packageManagement.ts` **套餐系列相关类型**: + - `PackageSeriesResponse` - 新增 `enable_one_time_commission` 和 `one_time_commission_config` - `CreatePackageSeriesRequest` - 新增一次性佣金配置字段 - `UpdatePackageSeriesRequest` - 新增一次性佣金配置字段 @@ -24,6 +25,7 @@ - 新增 `OneTimeCommissionTier` - 梯度佣金档位配置 **系列分配相关类型**: + - **BREAKING**: `ShopSeriesAllocationResponse` - 完全重构字段结构 - 移除: `base_commission` (BaseCommissionConfig) - 新增: `series_code`, `enable_force_recharge`, `enable_one_time_commission`, `force_recharge_amount`, `force_recharge_trigger_type`, `one_time_commission_amount`, `one_time_commission_threshold`, `one_time_commission_trigger` @@ -32,6 +34,7 @@ - 移除不再使用的类型: `BaseCommissionConfig`, `TierEntry`, `TierCommissionConfig`, `OneTimeCommissionTierEntry`, `OneTimeCommissionConfig`(旧版) **单套餐分配相关类型**: + - `ShopPackageAllocationResponse` - 字段调整 - 新增: `series_id`, `series_name`, `series_allocation_id`, `allocator_shop_id`, `allocator_shop_name` - 移除: `allocation_id` (重命名为 `series_allocation_id`), `calculated_cost_price` @@ -44,6 +47,7 @@ ### 3. 页面/组件适配(实施阶段处理) 以下文件需要适配新的数据结构(本提案阶段不编写代码): + - 套餐系列管理页面 - 需支持一次性佣金配置表单 - 系列分配页面 - 需重构佣金配置表单UI - 单套餐分配页面 - 需展示新增的关联字段 diff --git a/openspec/changes/update-package-management-api/specs/package-series-management/spec.md b/openspec/changes/update-package-management-api/specs/package-series-management/spec.md index f6199bc..04c622c 100644 --- a/openspec/changes/update-package-management-api/specs/package-series-management/spec.md +++ b/openspec/changes/update-package-management-api/specs/package-series-management/spec.md @@ -7,6 +7,7 @@ 套餐系列的数据模型SHALL支持一次性佣金配置,包括固定佣金、梯度佣金、强制充值、时效类型等高级功能。 **字段定义**: + - `id` (number) - 系列ID - `series_code` (string) - 系列编码,唯一标识 - `series_name` (string) - 系列名称 @@ -18,6 +19,7 @@ - `updated_at` (string) - 更新时间 **一次性佣金配置结构** (`SeriesOneTimeCommissionConfig`): + - `enable` (boolean) - 是否启用一次性佣金 - `commission_type` (string) - 佣金类型: "fixed"(固定) | "tiered"(梯度) - `commission_amount` (number, optional) - 固定佣金金额(分),commission_type=fixed时使用 @@ -31,6 +33,7 @@ - `validity_value` (string, optional) - 时效值(日期字符串或月数) **梯度档位结构** (`OneTimeCommissionTier`): + - `threshold` (number) - 达标阈值 - `dimension` (string) - 统计维度: "sales_count"(销量) | "sales_amount"(销售额) - `amount` (number) - 佣金金额(分) @@ -64,10 +67,7 @@ - `commission_type`: "tiered" - `threshold`: 5000 - `trigger_type`: "accumulated_recharge" - - `tiers`: [ - { threshold: 10, dimension: "sales_count", amount: 3000 }, - { threshold: 50, dimension: "sales_count", amount: 8000 } - ] + - `tiers`: [ { threshold: 10, dimension: "sales_count", amount: 3000 }, { threshold: 50, dimension: "sales_count", amount: 8000 } ] - `validity_type`: "relative" - `validity_value`: "12" (12个月) - **THEN** 系统SHALL创建套餐系列,并保存梯度佣金配置 diff --git a/openspec/changes/update-package-management-api/specs/shop-package-allocation/spec.md b/openspec/changes/update-package-management-api/specs/shop-package-allocation/spec.md index 7e251b8..71fcf37 100644 --- a/openspec/changes/update-package-management-api/specs/shop-package-allocation/spec.md +++ b/openspec/changes/update-package-management-api/specs/shop-package-allocation/spec.md @@ -7,6 +7,7 @@ 单套餐分配的数据模型SHALL新增系列关联字段和分配者信息字段,以支持更完整的分配关系追溯。 **字段定义**: + - `id` (number) - 分配ID - `package_id` (number) - 套餐ID - `package_code` (string) - 套餐编码 @@ -24,6 +25,7 @@ - `updated_at` (string) - 更新时间 **查询参数** (`ShopPackageAllocationQueryParams`): + - `page` (number, optional) - 页码 - `page_size` (number, optional) - 每页数量 - `shop_id` (number, optional) - 被分配的店铺ID diff --git a/openspec/changes/update-package-management-api/specs/shop-series-allocation/spec.md b/openspec/changes/update-package-management-api/specs/shop-series-allocation/spec.md index 4cb2d3f..8db98ae 100644 --- a/openspec/changes/update-package-management-api/specs/shop-series-allocation/spec.md +++ b/openspec/changes/update-package-management-api/specs/shop-series-allocation/spec.md @@ -7,6 +7,7 @@ 套餐系列分配的数据模型SHALL重构为更细粒度的佣金配置结构,移除旧的 `base_commission` 模式,采用独立的一次性佣金和强制充值配置字段。 **字段定义**: + - `id` (number) - 分配ID - `series_id` (number) - 套餐系列ID - `series_name` (string) - 套餐系列名称 @@ -27,6 +28,7 @@ - `updated_at` (string) - 更新时间 **创建请求字段** (`CreateShopSeriesAllocationRequest`): + - `series_id` (number, required) - 套餐系列ID - `shop_id` (number, required) - 被分配的店铺ID - `one_time_commission_amount` (number, required) - 一次性佣金金额上限(分) @@ -38,6 +40,7 @@ - `force_recharge_trigger_type` (number, optional) - 强充触发类型 **更新请求字段** (`UpdateShopSeriesAllocationRequest`): + - 所有字段均为可选,允许部分更新 - `enable_one_time_commission` (boolean, optional) - `one_time_commission_amount` (number, optional) diff --git a/src/api/modules/agentRecharge.ts b/src/api/modules/agentRecharge.ts index b033f40..91c86cf 100644 --- a/src/api/modules/agentRecharge.ts +++ b/src/api/modules/agentRecharge.ts @@ -20,10 +20,7 @@ export class AgentRechargeService extends BaseService { static getAgentRecharges( params?: AgentRechargeQueryParams ): Promise> { - return this.get>( - '/api/admin/agent-recharges', - params - ) + return this.get>('/api/admin/agent-recharges', params) } /** diff --git a/src/api/modules/card.ts b/src/api/modules/card.ts index 06a40f3..a274863 100644 --- a/src/api/modules/card.ts +++ b/src/api/modules/card.ts @@ -383,19 +383,19 @@ export class CardService extends BaseService { } /** - * 启用 IoT 卡 - * @param id IoT卡ID + * 启用 IoT 卡 单卡复机 + * @param iccid */ - static enableIotCard(id: number): Promise { - return this.post(`/api/admin/iot-cards/${id}/enable`, {}) + static enableIotCard(iccid: string): Promise { + return this.post(`/api/admin/assets/card/${iccid}/start`, {}) } /** - * 停用 IoT 卡 - * @param id IoT卡ID + * 停用 IoT 卡 单卡停机 + * @param iccid */ - static disableIotCard(id: number): Promise { - return this.post(`/api/admin/iot-cards/${id}/disable`, {}) + static disableIotCard(iccid: string): Promise { + return this.post(`/api/admin/assets/card/${iccid}/stop`, {}) } /** @@ -410,17 +410,8 @@ export class CardService extends BaseService { * 获取套餐流量详单(每日流量记录) * @param packageUsageId 套餐使用记录ID */ - static getPackageDailyRecords(packageUsageId: number): Promise - }>> { - return this.get - }>>(`/api/admin/package-usage/${packageUsageId}/daily-records`) + }> + > { + return this.get< + BaseResponse<{ + package_name: string + package_usage_id: number + total_usage_mb: number + records: Array<{ + date: string + daily_usage_mb: number + cumulative_usage_mb: number + }> + }> + >(`/api/admin/package-usage/${packageUsageId}/daily-records`) } } diff --git a/src/api/modules/device.ts b/src/api/modules/device.ts index f17be3e..5d0f2da 100644 --- a/src/api/modules/device.ts +++ b/src/api/modules/device.ts @@ -170,7 +170,7 @@ export class DeviceService extends BaseService { */ static rebootDevice(imei: string): Promise> { return this.post>( - `/api/admin/devices/by-imei/${imei}/reboot`, + `/api/admin/devices/by-identifier/${imei}/reboot`, {} ) } @@ -181,7 +181,7 @@ export class DeviceService extends BaseService { */ static resetDevice(imei: string): Promise> { return this.post>( - `/api/admin/devices/by-imei/${imei}/reset`, + `/api/admin/devices/by-identifier/${imei}/reset`, {} ) } @@ -196,7 +196,7 @@ export class DeviceService extends BaseService { data: SetSpeedLimitRequest ): Promise> { return this.put>( - `/api/admin/devices/by-imei/${imei}/speed-limit`, + `/api/admin/devices/by-identifier/${imei}/speed-limit`, data ) } @@ -211,7 +211,7 @@ export class DeviceService extends BaseService { data: SwitchCardRequest ): Promise> { return this.post>( - `/api/admin/devices/by-imei/${imei}/switch-card`, + `/api/admin/devices/by-identifier/${imei}/switch-card`, data ) } @@ -226,7 +226,7 @@ export class DeviceService extends BaseService { data: SetWiFiRequest ): Promise> { return this.put>( - `/api/admin/devices/by-imei/${imei}/wifi`, + `/api/admin/devices/by-identifier/${imei}/wifi`, data ) } diff --git a/src/api/modules/exchange.ts b/src/api/modules/exchange.ts index 2b60814..15f7c79 100644 --- a/src/api/modules/exchange.ts +++ b/src/api/modules/exchange.ts @@ -65,7 +65,9 @@ export class ExchangeService extends BaseService { */ static getExchanges( params?: ExchangeQueryParams - ): Promise> { + ): Promise< + BaseResponse<{ list: ExchangeResponse[]; page: number; page_size: number; total: number }> + > { return this.get< BaseResponse<{ list: ExchangeResponse[]; page: number; page_size: number; total: number }> >('/api/admin/exchanges', params) @@ -123,7 +125,10 @@ export class ExchangeService extends BaseService { * @param id 换货单ID * @param data 发货参数 */ - static shipExchange(id: number, data: ShipExchangeRequest): Promise> { + static shipExchange( + id: number, + data: ShipExchangeRequest + ): Promise> { return this.post>(`/api/admin/exchanges/${id}/ship`, data) } } diff --git a/src/api/modules/manualTrigger.ts b/src/api/modules/manualTrigger.ts index 0710f97..af46503 100644 --- a/src/api/modules/manualTrigger.ts +++ b/src/api/modules/manualTrigger.ts @@ -20,9 +20,7 @@ export class ManualTriggerService extends BaseService { * 批量手动触发 * POST /api/admin/polling-manual-trigger/batch */ - static batchTrigger( - data: BatchManualTriggerRequest - ): Promise> { + static batchTrigger(data: BatchManualTriggerRequest): Promise> { return this.post>( '/api/admin/polling-manual-trigger/batch', data @@ -46,9 +44,7 @@ export class ManualTriggerService extends BaseService { * 单卡手动触发 * POST /api/admin/polling-manual-trigger/single */ - static singleTrigger( - data: SingleManualTriggerRequest - ): Promise> { + static singleTrigger(data: SingleManualTriggerRequest): Promise> { return this.post>( '/api/admin/polling-manual-trigger/single', data diff --git a/src/api/modules/order.ts b/src/api/modules/order.ts index 21c62b6..5dc5ebc 100644 --- a/src/api/modules/order.ts +++ b/src/api/modules/order.ts @@ -51,12 +51,7 @@ export class OrderService extends BaseService { * 套餐购买预检 * @param data 预检请求参数 */ - static purchaseCheck( - data: PurchaseCheckRequest - ): Promise> { - return this.post>( - '/api/admin/orders/purchase-check', - data - ) + static purchaseCheck(data: PurchaseCheckRequest): Promise> { + return this.post>('/api/admin/orders/purchase-check', data) } } diff --git a/src/api/modules/pollingConcurrency.ts b/src/api/modules/pollingConcurrency.ts index 479a394..7386cc9 100644 --- a/src/api/modules/pollingConcurrency.ts +++ b/src/api/modules/pollingConcurrency.ts @@ -36,7 +36,10 @@ export class PollingConcurrencyService extends BaseService { * @param taskType 任务类型 * @param params 更新参数 */ - static updateConcurrency(taskType: string, params: UpdateConcurrencyParams): Promise> { + static updateConcurrency( + taskType: string, + params: UpdateConcurrencyParams + ): Promise> { return this.put>(`/api/admin/polling-concurrency/${taskType}`, params) } diff --git a/src/api/modules/shopSeriesGrant.ts b/src/api/modules/shopSeriesGrant.ts index eec2d56..3f1d1f5 100644 --- a/src/api/modules/shopSeriesGrant.ts +++ b/src/api/modules/shopSeriesGrant.ts @@ -41,9 +41,7 @@ export class ShopSeriesGrantService extends BaseService { * GET /api/admin/shop-series-grants/{id} * @param id 授权ID */ - static getShopSeriesGrantDetail( - id: number - ): Promise> { + static getShopSeriesGrantDetail(id: number): Promise> { return this.getOne(`/api/admin/shop-series-grants/${id}`) } @@ -57,10 +55,7 @@ export class ShopSeriesGrantService extends BaseService { id: number, data: UpdateShopSeriesGrantRequest ): Promise> { - return this.update( - `/api/admin/shop-series-grants/${id}`, - data - ) + return this.update(`/api/admin/shop-series-grants/${id}`, data) } /** diff --git a/src/api/modules/wechatConfig.ts b/src/api/modules/wechatConfig.ts index eae8e50..c0549b7 100644 --- a/src/api/modules/wechatConfig.ts +++ b/src/api/modules/wechatConfig.ts @@ -32,9 +32,7 @@ export class WechatConfigService extends BaseService { /** * 创建支付配置 */ - static createWechatConfig( - data: CreateWechatConfigRequest - ): Promise> { + static createWechatConfig(data: CreateWechatConfigRequest): Promise> { return this.post>('/api/admin/wechat-configs', data) } diff --git a/src/components/business/BatchOperationDialog.vue b/src/components/business/BatchOperationDialog.vue index 42b48aa..530eb12 100644 --- a/src/components/business/BatchOperationDialog.vue +++ b/src/components/business/BatchOperationDialog.vue @@ -99,7 +99,7 @@ ElMessage.success('操作成功') } catch (error) { console.error('批量操作失败:', error) - ElMessage.error('操作失败') + console.log('操作失败') } finally { loading.value = false } diff --git a/src/components/business/CustomerAccountDialog.vue b/src/components/business/CustomerAccountDialog.vue index cf1e539..00dde8c 100644 --- a/src/components/business/CustomerAccountDialog.vue +++ b/src/components/business/CustomerAccountDialog.vue @@ -166,7 +166,9 @@ label: '用户类型', width: 110, formatter: (row: PlatformAccount) => { - return h(ElTag, { type: getUserTypeTag(row.user_type) }, () => getUserTypeName(row.user_type)) + return h(ElTag, { type: getUserTypeTag(row.user_type) }, () => + getUserTypeName(row.user_type) + ) } }, { diff --git a/src/components/common/DetailPage.vue b/src/components/common/DetailPage.vue index 48007db..b0acc37 100644 --- a/src/components/common/DetailPage.vue +++ b/src/components/common/DetailPage.vue @@ -30,130 +30,130 @@ diff --git a/src/components/core/others/ArtMenuRight.vue b/src/components/core/others/ArtMenuRight.vue index e5f7b9b..48cd3ef 100644 --- a/src/components/core/others/ArtMenuRight.vue +++ b/src/components/core/others/ArtMenuRight.vue @@ -255,7 +255,7 @@ user-select: none; transition: background-color 0.15s ease; - &:hover:not(.is-disabled):not(.no-permission) { + &:hover:not(.is-disabled, .no-permission) { background-color: rgba(var(--art-gray-200-rgb), 0.7); } @@ -267,8 +267,8 @@ .menu-label { color: var(--el-text-color-secondary); text-align: center; - white-space: normal; word-break: break-all; + white-space: normal; } } diff --git a/src/components/core/others/TableContextMenuHint.vue b/src/components/core/others/TableContextMenuHint.vue index c0d9fc3..6247851 100644 --- a/src/components/core/others/TableContextMenuHint.vue +++ b/src/components/core/others/TableContextMenuHint.vue @@ -24,15 +24,15 @@ diff --git a/src/components/device/SetWiFiDialog.vue b/src/components/device/SetWiFiDialog.vue index f9ff027..1de2ee4 100644 --- a/src/components/device/SetWiFiDialog.vue +++ b/src/components/device/SetWiFiDialog.vue @@ -1,11 +1,6 @@