This commit is contained in:
2
.env
2
.env
@@ -9,7 +9,7 @@ VITE_PORT = 3006
|
||||
VITE_BASE_URL =
|
||||
|
||||
# API 地址前缀
|
||||
VITE_API_URL = https://cmp-api.boss160.cn
|
||||
VITE_API_URL = https://cmp-api.xm-iot.cn
|
||||
|
||||
# 权限模式( frontend | backend )
|
||||
VITE_ACCESS_MODE = backend
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
VITE_BASE_URL = /
|
||||
|
||||
# API 地址前缀
|
||||
VITE_API_URL = https://cmp-api.boss160.cn
|
||||
VITE_API_URL = https://cmp-api.xm-iot.cn
|
||||
|
||||
# Delete console
|
||||
VITE_DROP_CONSOLE = false
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
# 【生产】环境变量
|
||||
|
||||
# 网站地址前缀
|
||||
VITE_BASE_URL =
|
||||
VITE_BASE_URL=
|
||||
|
||||
# API 地址前缀
|
||||
VITE_API_URL = https://cmp-api.boss160.cn
|
||||
VITE_API_URL=https://cmp-api.xm-iot.cn
|
||||
|
||||
# Delete console
|
||||
VITE_DROP_CONSOLE = true
|
||||
VITE_DROP_CONSOLE=true
|
||||
|
||||
698
PROJECT_TASKS.md
698
PROJECT_TASKS.md
@@ -1,698 +0,0 @@
|
||||
# 物联网管理后台 - 功能开发任务清单
|
||||
|
||||
## 项目概述
|
||||
|
||||
基于 Vue 3 + TypeScript + Element Plus 的物联网管理后台系统,管理代理商、网卡、套餐、设备等核心业务。
|
||||
|
||||
---
|
||||
|
||||
## 📦 模块划分
|
||||
|
||||
### 一、基础架构优化(必须先完成)
|
||||
|
||||
#### 1.1 API 层重构
|
||||
|
||||
**优先级:P0(最高)**
|
||||
|
||||
- [ ] 创建统一的 API 服务基类
|
||||
- [ ] 创建类型定义文件
|
||||
- [ ] `src/types/api/auth.ts` - 认证相关类型
|
||||
- [ ] `src/types/api/role.ts` - 角色相关类型
|
||||
- [ ] `src/types/api/account.ts` - 账号相关类型
|
||||
- [ ] `src/types/api/card.ts` - 网卡相关类型
|
||||
- [ ] `src/types/api/package.ts` - 套餐相关类型
|
||||
- [ ] `src/types/api/device.ts` - 设备相关类型
|
||||
- [ ] `src/types/api/commission.ts` - 佣金相关类型
|
||||
- [ ] 创建 API 服务类
|
||||
- [ ] `src/api/modules/auth.ts` - AuthService
|
||||
- [ ] `src/api/modules/role.ts` - RoleService
|
||||
- [ ] `src/api/modules/account.ts` - AccountService
|
||||
- [ ] `src/api/modules/agent.ts` - AgentService (代理商)
|
||||
- [ ] `src/api/modules/card.ts` - CardService
|
||||
- [ ] `src/api/modules/package.ts` - PackageService
|
||||
- [ ] `src/api/modules/device.ts` - DeviceService
|
||||
- [ ] `src/api/modules/commission.ts` - CommissionService
|
||||
- [ ] `src/api/modules/setting.ts` - SettingService
|
||||
|
||||
#### 1.2 公共配置和常量提取
|
||||
|
||||
**优先级:P0**
|
||||
|
||||
- [ ] 创建 `src/config/constants/` 目录
|
||||
- [ ] `operators.ts` - 运营商配置
|
||||
- [ ] `cardStatus.ts` - 网卡状态配置
|
||||
- [ ] `userRoles.ts` - 用户角色配置
|
||||
- [ ] `packageTypes.ts` - 套餐类型配置
|
||||
- [ ] `deviceStatus.ts` - 设备状态配置
|
||||
- [ ] `commissionStatus.ts` - 佣金状态配置
|
||||
- [ ] 创建 `src/utils/business/` 目录
|
||||
- [ ] `card.ts` - 网卡相关工具函数
|
||||
- [ ] `package.ts` - 套餐相关工具函数
|
||||
- [ ] `commission.ts` - 佣金计算工具函数
|
||||
- [ ] `format.ts` - 格式化工具函数
|
||||
|
||||
#### 1.3 业务 Composables
|
||||
|
||||
**优先级:P0**
|
||||
|
||||
- [ ] `src/composables/useCardManagement.ts` - 网卡管理
|
||||
- [ ] `src/composables/usePackageManagement.ts` - 套餐管理
|
||||
- [ ] `src/composables/useDeviceManagement.ts` - 设备管理
|
||||
- [ ] `src/composables/useAgentManagement.ts` - 代理商管理
|
||||
- [ ] `src/composables/useCommission.ts` - 佣金管理
|
||||
- [ ] `src/composables/usePagination.ts` - 分页管理
|
||||
- [ ] `src/composables/useTableSelection.ts` - 表格选择
|
||||
|
||||
#### 1.4 公共业务组件
|
||||
|
||||
**优先级:P1**
|
||||
|
||||
- [ ] `src/components/business/CardStatusTag.vue` - 网卡状态标签
|
||||
- [ ] `src/components/business/OperatorSelect.vue` - 运营商选择器
|
||||
- [ ] `src/components/business/PackageSelector.vue` - 套餐选择器
|
||||
- [ ] `src/components/business/AgentSelector.vue` - 代理商选择器
|
||||
- [ ] `src/components/business/CommissionDisplay.vue` - 佣金展示组件
|
||||
- [ ] `src/components/business/BatchOperationDialog.vue` - 批量操作对话框
|
||||
- [ ] `src/components/business/ImportDialog.vue` - 导入对话框组件
|
||||
|
||||
---
|
||||
|
||||
## 🎯 功能模块开发
|
||||
|
||||
### 二、认证与权限模块
|
||||
|
||||
#### 2.1 登录模块
|
||||
|
||||
**优先级:P0** **依赖:1.1 API 层重构**
|
||||
|
||||
- [ ] 后端接口对接
|
||||
- [ ] 登录接口
|
||||
- [ ] 退出登录接口
|
||||
- [ ] 获取用户信息接口
|
||||
- [ ] 刷新 Token 接口
|
||||
- [ ] 前端页面
|
||||
- [ ] 完善登录页面(`src/views/auth/login/index.vue`)
|
||||
- [ ] 添加多角色登录支持(平台账号、代理商、企业客户)
|
||||
- [ ] 添加验证码功能
|
||||
- [ ] 添加记住密码功能
|
||||
- [ ] 权限守卫
|
||||
- [ ] 完善路由守卫逻辑
|
||||
- [ ] 实现基于角色的路由过滤
|
||||
- [ ] 实现按钮级权限控制
|
||||
- [ ] Store 状态管理
|
||||
- [ ] 完善用户 Store(用户信息、权限列表)
|
||||
- [ ] 添加 Token 自动刷新逻辑
|
||||
|
||||
**Mock 数据:**
|
||||
|
||||
- 模拟不同角色的登录响应
|
||||
- 模拟权限列表
|
||||
|
||||
---
|
||||
|
||||
### 三、账号管理模块
|
||||
|
||||
#### 3.1 平台角色管理
|
||||
|
||||
**优先级:P1** **依赖:1.1, 1.2, 1.3**
|
||||
|
||||
**子任务:**
|
||||
|
||||
- [ ] 类型定义
|
||||
- [ ] 角色实体类型
|
||||
- [ ] 角色查询参数类型
|
||||
- [ ] 角色权限类型
|
||||
- [ ] API 服务
|
||||
- [ ] 获取角色列表
|
||||
- [ ] 创建角色
|
||||
- [ ] 编辑角色
|
||||
- [ ] 删除角色
|
||||
- [ ] 分配权限
|
||||
- [ ] 页面开发
|
||||
- [ ] `src/views/account-management/platform-role/index.vue`
|
||||
- [ ] 角色列表(表格)
|
||||
- [ ] 新增/编辑角色对话框
|
||||
- [ ] 权限分配对话框(树形结构)
|
||||
- [ ] 组件开发
|
||||
- [ ] `PermissionTreeSelect.vue` - 权限树选择组件
|
||||
- [ ] Mock 数据
|
||||
- [ ] 模拟角色列表
|
||||
- [ ] 模拟权限树
|
||||
|
||||
#### 3.2 平台账号管理
|
||||
|
||||
**优先级:P1**
|
||||
|
||||
**子任务:**
|
||||
|
||||
- [ ] 类型定义
|
||||
- [ ] API 服务
|
||||
- [ ] 获取平台账号列表
|
||||
- [ ] 创建平台账号
|
||||
- [ ] 编辑平台账号
|
||||
- [ ] 删除/禁用平台账号
|
||||
- [ ] 重置密码
|
||||
- [ ] 页面开发
|
||||
- [ ] 账号列表(支持搜索、筛选)
|
||||
- [ ] 新增/编辑账号对话框
|
||||
- [ ] 角色分配
|
||||
- [ ] Mock 数据
|
||||
|
||||
#### 3.3 客户角色管理
|
||||
|
||||
**优先级:P1**
|
||||
|
||||
**子任务:**
|
||||
|
||||
- [ ] 类型定义
|
||||
- [ ] API 服务
|
||||
- [ ] 获取客户角色列表
|
||||
- [ ] 创建客户角色
|
||||
- [ ] 编辑客户角色
|
||||
- [ ] 删除客户角色
|
||||
- [ ] 设置能力边界
|
||||
- [ ] 页面开发
|
||||
- [ ] 角色列表
|
||||
- [ ] 能力边界配置(功能权限、资源限制)
|
||||
- [ ] 组件开发
|
||||
- [ ] `AbilityBoundaryConfig.vue` - 能力边界配置组件
|
||||
- [ ] Mock 数据
|
||||
|
||||
#### 3.4 代理商管理
|
||||
|
||||
**优先级:P1**
|
||||
|
||||
**子任务:**
|
||||
|
||||
- [ ] 类型定义
|
||||
- [ ] 代理商实体类型
|
||||
- [ ] 代理商层级关系类型
|
||||
- [ ] API 服务
|
||||
- [ ] 获取代理商列表(树形结构)
|
||||
- [ ] 创建代理商
|
||||
- [ ] 编辑代理商信息
|
||||
- [ ] 禁用/启用代理商
|
||||
- [ ] 查看代理商详情
|
||||
- [ ] 获取代理商下级列表
|
||||
- [ ] 页面开发
|
||||
- [ ] 代理商树形列表
|
||||
- [ ] 新增/编辑代理商对话框
|
||||
- [ ] 代理商详情页面
|
||||
- [ ] 组件开发
|
||||
- [ ] `AgentTreeTable.vue` - 代理商树形表格组件
|
||||
- [ ] Mock 数据
|
||||
- [ ] 模拟代理商层级数据
|
||||
|
||||
#### 3.5 企业客户管理
|
||||
|
||||
**优先级:P1**
|
||||
|
||||
**子任务:**
|
||||
|
||||
- [ ] 类型定义
|
||||
- [ ] API 服务
|
||||
- [ ] 获取企业客户列表
|
||||
- [ ] 创建企业客户
|
||||
- [ ] 编辑企业客户
|
||||
- [ ] 禁用/启用企业客户
|
||||
- [ ] 分配客户角色
|
||||
- [ ] 页面开发
|
||||
- [ ] `src/views/account-management/enterprise-customer/index.vue`
|
||||
- [ ] 企业客户列表
|
||||
- [ ] 新增/编辑企业客户对话框
|
||||
- [ ] Mock 数据
|
||||
|
||||
#### 3.6 客户账号管理
|
||||
|
||||
**优先级:P1**
|
||||
|
||||
**子任务:**
|
||||
|
||||
- [ ] 类型定义
|
||||
- [ ] API 服务
|
||||
- [ ] 获取客户账号列表(代理商+企业客户)
|
||||
- [ ] 解绑手机
|
||||
- [ ] 重置密码
|
||||
- [ ] 禁用/启用账号
|
||||
- [ ] 页面开发
|
||||
- [ ] 账号列表(支持筛选)
|
||||
- [ ] 账号操作(解绑、重置密码等)
|
||||
- [ ] Mock 数据
|
||||
|
||||
---
|
||||
|
||||
### 四、账户管理模块
|
||||
|
||||
#### 4.1 客户账户(佣金查看)
|
||||
|
||||
**优先级:P2**
|
||||
|
||||
**子任务:**
|
||||
|
||||
- [ ] 类型定义
|
||||
- [ ] API 服务
|
||||
- [ ] 获取客户账户列表
|
||||
- [ ] 查看佣金详情
|
||||
- [ ] 查看提现记录
|
||||
- [ ] 页面开发
|
||||
- [ ] 客户账户列表
|
||||
- [ ] 佣金详情展示
|
||||
- [ ] 提现记录列表
|
||||
- [ ] 组件开发
|
||||
- [ ] `CommissionDetailCard.vue` - 佣金详情卡片
|
||||
- [ ] Mock 数据
|
||||
|
||||
#### 4.2 佣金提现管理
|
||||
|
||||
**优先级:P2**
|
||||
|
||||
**子任务:**
|
||||
|
||||
- [ ] 类型定义
|
||||
- [ ] API 服务
|
||||
- [ ] 获取提现申请列表
|
||||
- [ ] 审核提现申请(通过/拒绝)
|
||||
- [ ] 查看提现详情
|
||||
- [ ] 批量审核
|
||||
- [ ] 页面开发
|
||||
- [ ] `src/views/finance-management/commission-withdrawal/index.vue`
|
||||
- [ ] 提现申请列表
|
||||
- [ ] 审核对话框
|
||||
- [ ] 批量审核功能
|
||||
- [ ] Mock 数据
|
||||
|
||||
#### 4.3 佣金提现设置
|
||||
|
||||
**优先级:P2**
|
||||
|
||||
**子任务:**
|
||||
|
||||
- [ ] 类型定义
|
||||
- [ ] API 服务
|
||||
- [ ] 获取提现设置
|
||||
- [ ] 保存提现设置
|
||||
- [ ] 查看历史设置
|
||||
- [ ] 页面开发
|
||||
- [ ] `src/views/finance-management/withdrawal-setting/index.vue`
|
||||
- [ ] 提现参数配置表单
|
||||
- [ ] 历史设置列表
|
||||
- [ ] Mock 数据
|
||||
|
||||
#### 4.4 我的账户(佣金)
|
||||
|
||||
**优先级:P2**
|
||||
|
||||
**子任务:**
|
||||
|
||||
- [ ] 类型定义
|
||||
- [ ] API 服务
|
||||
- [ ] 获取当前账号佣金数据
|
||||
- [ ] 获取佣金明细
|
||||
- [ ] 申请提现
|
||||
- [ ] 页面开发
|
||||
- [ ] 佣金概览(卡片展示,非列表)
|
||||
- [ ] 佣金明细列表
|
||||
- [ ] 提现申请对话框
|
||||
- [ ] 组件开发
|
||||
- [ ] `CommissionOverviewCard.vue` - 佣金概览卡片
|
||||
- [ ] Mock 数据
|
||||
|
||||
---
|
||||
|
||||
### 五、我的设置模块
|
||||
|
||||
#### 5.1 收款商户设置
|
||||
|
||||
**优先级:P2**
|
||||
|
||||
**子任务:**
|
||||
|
||||
- [ ] 类型定义
|
||||
- [ ] API 服务
|
||||
- [ ] 获取支付配置
|
||||
- [ ] 保存支付配置
|
||||
- [ ] 页面开发
|
||||
- [ ] `src/views/my-settings/payment-merchant/index.vue`
|
||||
- [ ] 支付参数配置表单
|
||||
- [ ] Mock 数据
|
||||
|
||||
#### 5.2 开发能力管理
|
||||
|
||||
**优先级:P2**
|
||||
|
||||
**子任务:**
|
||||
|
||||
- [ ] 类型定义
|
||||
- [ ] API 服务
|
||||
- [ ] 获取开发能力参数
|
||||
- [ ] 生成 API Key
|
||||
- [ ] 刷新 Secret
|
||||
- [ ] 页面开发
|
||||
- [ ] `src/views/my-settings/dev-capability/index.vue`
|
||||
- [ ] API Key 展示和管理
|
||||
- [ ] 接口文档链接
|
||||
- [ ] Mock 数据
|
||||
|
||||
#### 5.3 分佣模板管理
|
||||
|
||||
**优先级:P2**
|
||||
|
||||
**子任务:**
|
||||
|
||||
- [ ] 类型定义
|
||||
- [ ] API 服务
|
||||
- [ ] 获取分佣模板列表
|
||||
- [ ] 创建分佣模板
|
||||
- [ ] 编辑分佣模板
|
||||
- [ ] 删除分佣模板
|
||||
- [ ] 页面开发
|
||||
- [ ] `src/views/my-settings/commission-template/index.vue`
|
||||
- [ ] 模板列表
|
||||
- [ ] 新增/编辑模板对话框
|
||||
- [ ] 分佣规则配置
|
||||
- [ ] 组件开发
|
||||
- [ ] `CommissionRuleConfig.vue` - 分佣规则配置组件
|
||||
- [ ] Mock 数据
|
||||
|
||||
---
|
||||
|
||||
### 六、商品管理模块
|
||||
|
||||
#### 6.1 号卡管理
|
||||
|
||||
**优先级:P1**
|
||||
|
||||
**子任务:**
|
||||
|
||||
- [ ] 类型定义
|
||||
- [ ] API 服务
|
||||
- [ ] 获取号卡商品列表
|
||||
- [ ] 新增号卡商品
|
||||
- [ ] 编辑号卡商品
|
||||
- [ ] 删除号卡商品
|
||||
- [ ] 页面开发
|
||||
- [ ] `src/views/product-management/simcard/index.vue`
|
||||
- [ ] 号卡列表
|
||||
- [ ] 新增/编辑号卡对话框
|
||||
- [ ] Mock 数据
|
||||
|
||||
#### 6.2 号卡分配
|
||||
|
||||
**优先级:P1**
|
||||
|
||||
**子任务:**
|
||||
|
||||
- [ ] 类型定义
|
||||
- [ ] API 服务
|
||||
- [ ] 获取可分配号卡列表
|
||||
- [ ] 分配号卡给代理
|
||||
- [ ] 设置佣金模式
|
||||
- [ ] 页面开发
|
||||
- [ ] `src/views/product-management/simcard-assign/index.vue`
|
||||
- [ ] 号卡选择
|
||||
- [ ] 代理商选择
|
||||
- [ ] 佣金模式配置
|
||||
- [ ] 组件开发
|
||||
- [ ] `CommissionModeSelector.vue` - 佣金模式选择组件
|
||||
- [ ] Mock 数据
|
||||
|
||||
#### 6.3 套餐系列管理
|
||||
|
||||
**优先级:P1**
|
||||
|
||||
**子任务:**
|
||||
|
||||
- [ ] 类型定义
|
||||
- [ ] API 服务
|
||||
- [ ] 获取套餐系列列表
|
||||
- [ ] 新增套餐系列
|
||||
- [ ] 编辑套餐系列
|
||||
- [ ] 删除套餐系列
|
||||
- [ ] 页面开发
|
||||
- [ ] `src/views/product-management/package-series/index.vue` (重命名 package-series)
|
||||
- [ ] 系列列表
|
||||
- [ ] 新增/编辑系列对话框
|
||||
- [ ] Mock 数据
|
||||
|
||||
#### 6.4 套餐管理
|
||||
|
||||
**优先级:P1**
|
||||
|
||||
**子任务:**
|
||||
|
||||
- [ ] 类型定义
|
||||
- [ ] API 服务
|
||||
- [ ] 获取套餐列表(根据角色过滤)
|
||||
- [ ] 创建套餐
|
||||
- [ ] 编辑套餐
|
||||
- [ ] 删除套餐
|
||||
- [ ] 页面开发
|
||||
- [ ] 套餐列表(支持角色过滤)
|
||||
- [ ] 新增/编辑套餐对话框
|
||||
- [ ] Mock 数据
|
||||
|
||||
#### 6.5 套餐分配
|
||||
|
||||
**优先级:P1**
|
||||
|
||||
**子任务:**
|
||||
|
||||
- [ ] 类型定义
|
||||
- [ ] API 服务
|
||||
- [ ] 获取可分配套餐列表
|
||||
- [ ] 分配套餐给直级代理
|
||||
- [ ] 设置佣金模式
|
||||
- [ ] 页面开发
|
||||
- [ ] 重构 `src/views/package-management/package-assign/index.vue`
|
||||
- [ ] 套餐选择
|
||||
- [ ] 直级代理选择
|
||||
- [ ] 佣金模式配置
|
||||
- [ ] Mock 数据
|
||||
|
||||
---
|
||||
|
||||
### 七、资产管理模块
|
||||
|
||||
#### 7.1 单卡信息查询
|
||||
|
||||
**优先级:P1**
|
||||
|
||||
**子任务:**
|
||||
|
||||
- [ ] 类型定义
|
||||
- [ ] API 服务
|
||||
- [ ] 根据 ICCID 查询单卡信息
|
||||
- [ ] 套餐充值
|
||||
- [ ] 停复机操作
|
||||
- [ ] 流量详情查询
|
||||
- [ ] 更改过期时间
|
||||
- [ ] 转新卡
|
||||
- [ ] 停复机记录
|
||||
- [ ] 往期订单
|
||||
- [ ] 增减流量
|
||||
- [ ] 变更钱包余额
|
||||
- [ ] 充值支付密码
|
||||
- [ ] 续充
|
||||
- [ ] 设备操作
|
||||
- [ ] 页面开发
|
||||
- [ ] 单卡信息展示(描述列表)
|
||||
- [ ] 操作按钮组
|
||||
- [ ] 各类操作对话框
|
||||
- [ ] 组件开发
|
||||
- [ ] 复用 `CardOperationDialog.vue` 并扩展功能
|
||||
- [ ] Mock 数据
|
||||
|
||||
#### 7.2 网卡管理
|
||||
|
||||
**优先级:P1**
|
||||
|
||||
**子任务:**
|
||||
|
||||
- [ ] 类型定义
|
||||
- [ ] API 服务
|
||||
- [ ] 获取网卡列表
|
||||
- [ ] 批量操作入口
|
||||
- [ ] 页面开发
|
||||
- [ ] 网卡列表
|
||||
- [ ] 批量操作按钮
|
||||
- [ ] Mock 数据
|
||||
|
||||
#### 7.3 设备管理
|
||||
|
||||
**优先级:P1**
|
||||
|
||||
**子任务:**
|
||||
|
||||
- [ ] 类型定义
|
||||
- [ ] API 服务
|
||||
- [ ] 获取设备列表
|
||||
- [ ] 查看设备卡信息
|
||||
- [ ] 修改设备卡信息
|
||||
- [ ] 设备相关操作
|
||||
- [ ] 页面开发
|
||||
- [ ] 拆分 `src/views/device-management/devices/index.vue` (2022行,需拆分)
|
||||
- [ ] 主页面 `index.vue`
|
||||
- [ ] 设备详情组件 `DeviceDetail.vue`
|
||||
- [ ] 设备操作组件 `DeviceOperation.vue`
|
||||
- [ ] 设备列表
|
||||
- [ ] 设备详情对话框
|
||||
- [ ] 设备操作对话框
|
||||
- [ ] Composables
|
||||
- [ ] `useDeviceManagement.ts` - 设备管理逻辑
|
||||
- [ ] Mock 数据
|
||||
|
||||
#### 7.4 资产分配
|
||||
|
||||
**优先级:P1**
|
||||
|
||||
**子任务:**
|
||||
|
||||
- [ ] 类型定义
|
||||
- [ ] API 服务
|
||||
- [ ] 设备批量分配
|
||||
- [ ] 网卡批量分配
|
||||
- [ ] 页面开发
|
||||
- [ ] `src/views/asset-management/asset-assign/index.vue`
|
||||
- [ ] 分配方式选择(设备/网卡)
|
||||
- [ ] 批量导入 ICCID
|
||||
- [ ] 目标代理选择
|
||||
- [ ] 组件开发
|
||||
- [ ] 复用 `ImportDialog.vue`
|
||||
- [ ] Mock 数据
|
||||
|
||||
#### 7.5 换卡申请
|
||||
|
||||
**优先级:P1**
|
||||
|
||||
**子任务:**
|
||||
|
||||
- [ ] 类型定义
|
||||
- [ ] API 服务
|
||||
- [ ] 获取换卡申请列表
|
||||
- [ ] 处理换卡申请
|
||||
- [ ] 填充新 ICCID
|
||||
- [ ] 页面开发
|
||||
- [ ] 申请列表
|
||||
- [ ] 处理对话框
|
||||
- [ ] Mock 数据
|
||||
|
||||
---
|
||||
|
||||
### 八、批量操作模块
|
||||
|
||||
#### 8.1 网卡导入
|
||||
|
||||
**优先级:P1**
|
||||
|
||||
**子任务:**
|
||||
|
||||
- [ ] 类型定义
|
||||
- [ ] API 服务
|
||||
- [ ] 批量导入 ICCID
|
||||
- [ ] 查看导入任务状态
|
||||
- [ ] 查看导入失败记录
|
||||
- [ ] 页面开发
|
||||
- [ ] `src/views/batch-operation/card-import/index.vue`
|
||||
- [ ] Excel 导入
|
||||
- [ ] 任务列表
|
||||
- [ ] 失败记录查看
|
||||
- [ ] 组件开发
|
||||
- [ ] 复用 `ImportDialog.vue`
|
||||
- [ ] Mock 数据
|
||||
|
||||
#### 8.2 设备导入
|
||||
|
||||
**优先级:P1**
|
||||
|
||||
**子任务:**
|
||||
|
||||
- [ ] 类型定义
|
||||
- [ ] API 服务
|
||||
- [ ] 批量导入设备及 ICCID 关系
|
||||
- [ ] 查看导入任务状态
|
||||
- [ ] 页面开发
|
||||
- [ ] `src/views/batch-operation/device-import/index.vue`
|
||||
- [ ] Excel 导入
|
||||
- [ ] 任务列表
|
||||
- [ ] Mock 数据
|
||||
|
||||
#### 8.3 线下批量充值
|
||||
|
||||
**优先级:P1**
|
||||
|
||||
**子任务:**
|
||||
|
||||
- [ ] 类型定义
|
||||
- [ ] API 服务
|
||||
- [ ] 查看批量充值记录
|
||||
- [ ] Excel 批量充值导入
|
||||
- [ ] 页面开发
|
||||
- [ ] 充值记录列表
|
||||
- [ ] 批量充值 Excel 导入
|
||||
- [ ] Mock 数据
|
||||
|
||||
#### 8.4 换卡通知
|
||||
|
||||
**优先级:P2**
|
||||
|
||||
**子任务:**
|
||||
|
||||
- [ ] 类型定义
|
||||
- [ ] API 服务
|
||||
- [ ] 单独新建换卡通知
|
||||
- [ ] 批量新建换卡通知
|
||||
- [ ] 查看换卡通知记录
|
||||
- [ ] 页面开发
|
||||
- [ ] `src/views/batch-operation/card-change-notice/index.vue`
|
||||
- [ ] 通知记录列表
|
||||
- [ ] 新建通知对话框(单个/批量)
|
||||
- [ ] Mock 数据
|
||||
|
||||
---
|
||||
|
||||
## 📅 开发计划建议
|
||||
|
||||
### 第一阶段(1-2 周):基础架构
|
||||
|
||||
- 完成所有 1.x 任务(API 层、配置、Composables、公共组件)
|
||||
- 完成登录模块(2.1)
|
||||
|
||||
### 第二阶段(2-3 周):账号管理
|
||||
|
||||
- 完成账号管理模块所有功能(3.1-3.6)
|
||||
|
||||
### 第三阶段(2 周):商品管理
|
||||
|
||||
- 完成商品管理模块(6.1-6.5)
|
||||
|
||||
### 第四阶段(2-3 周):资产管理
|
||||
|
||||
- 完成资产管理模块(7.1-7.5)
|
||||
|
||||
### 第五阶段(1-2 周):账户管理 + 我的设置
|
||||
|
||||
- 完成账户管理模块(4.1-4.4)
|
||||
- 完成我的设置模块(5.1-5.3)
|
||||
|
||||
### 第六阶段(1-2 周):批量操作 + 优化
|
||||
|
||||
- 完成批量操作模块(8.1-8.4)
|
||||
- 性能优化、测试、Bug 修复
|
||||
|
||||
---
|
||||
|
||||
## 📌 注意事项
|
||||
|
||||
1. **所有模块先用 Mock 数据开发,便于前后端并行开发**
|
||||
2. **严格遵循组件化原则,提高代码复用率**
|
||||
3. **使用 TypeScript 严格类型,减少运行时错误**
|
||||
4. **每个模块完成后进行代码审查**
|
||||
5. **关键功能需要编写单元测试**
|
||||
|
||||
---
|
||||
|
||||
## 🔗 相关文档
|
||||
|
||||
- [项目架构文档](./openspec/project.md)
|
||||
- [API 规范文档](待创建)
|
||||
- [组件使用文档](待创建)
|
||||
@@ -3,7 +3,7 @@ git init
|
||||
git checkout -b main
|
||||
git add README.md
|
||||
git commit -m "first commit"
|
||||
git remote add origin https://git.boss160.cn/luo/one-pipe-system.git
|
||||
git remote add origin https://git.boss160.cn/luo/admin-xm-iot.git
|
||||
git push -u origin main
|
||||
|
||||
你需要注意下.gitignore 是否需要加一些文件进去
|
||||
|
||||
@@ -225,7 +225,7 @@ components:
|
||||
scheme: bearer
|
||||
type: jwt
|
||||
servers:
|
||||
- url: https://cmp-api.boss160.cn
|
||||
- url: https://cmp-api.xm-iot.cn
|
||||
description: 测试环境
|
||||
security: []
|
||||
|
||||
@@ -419,7 +419,7 @@ components:
|
||||
scheme: bearer
|
||||
type: jwt
|
||||
servers:
|
||||
- url: https://cmp-api.boss160.cn
|
||||
- url: https://cmp-api.xm-iot.cn
|
||||
description: 测试环境
|
||||
security: []
|
||||
|
||||
@@ -602,7 +602,7 @@ components:
|
||||
scheme: bearer
|
||||
type: jwt
|
||||
servers:
|
||||
- url: https://cmp-api.boss160.cn
|
||||
- url: https://cmp-api.xm-iot.cn
|
||||
description: 测试环境
|
||||
security: []
|
||||
|
||||
@@ -733,7 +733,7 @@ components:
|
||||
scheme: bearer
|
||||
type: jwt
|
||||
servers:
|
||||
- url: https://cmp-api.boss160.cn
|
||||
- url: https://cmp-api.xm-iot.cn
|
||||
description: 测试环境
|
||||
security: []
|
||||
|
||||
@@ -863,7 +863,7 @@ components:
|
||||
scheme: bearer
|
||||
type: jwt
|
||||
servers:
|
||||
- url: https://cmp-api.boss160.cn
|
||||
- url: https://cmp-api.xm-iot.cn
|
||||
description: 测试环境
|
||||
security: []
|
||||
|
||||
|
||||
@@ -255,7 +255,7 @@ components:
|
||||
scheme: bearer
|
||||
type: jwt
|
||||
servers:
|
||||
- url: https://cmp-api.boss160.cn
|
||||
- url: https://cmp-api.xm-iot.cn
|
||||
description: 测试环境
|
||||
security: []
|
||||
|
||||
@@ -516,7 +516,7 @@ components:
|
||||
scheme: bearer
|
||||
type: jwt
|
||||
servers:
|
||||
- url: https://cmp-api.boss160.cn
|
||||
- url: https://cmp-api.xm-iot.cn
|
||||
description: 测试环境
|
||||
security: []
|
||||
|
||||
@@ -628,7 +628,7 @@ components:
|
||||
scheme: bearer
|
||||
type: jwt
|
||||
servers:
|
||||
- url: https://cmp-api.boss160.cn
|
||||
- url: https://cmp-api.xm-iot.cn
|
||||
description: 测试环境
|
||||
security: []
|
||||
|
||||
@@ -868,7 +868,7 @@ components:
|
||||
scheme: bearer
|
||||
type: jwt
|
||||
servers:
|
||||
- url: https://cmp-api.boss160.cn
|
||||
- url: https://cmp-api.xm-iot.cn
|
||||
description: 测试环境
|
||||
security: []
|
||||
|
||||
|
||||
@@ -242,7 +242,7 @@ components:
|
||||
scheme: bearer
|
||||
type: jwt
|
||||
servers:
|
||||
- url: https://cmp-api.boss160.cn
|
||||
- url: https://cmp-api.xm-iot.cn
|
||||
description: 测试环境
|
||||
security: []
|
||||
|
||||
@@ -463,7 +463,7 @@ components:
|
||||
scheme: bearer
|
||||
type: jwt
|
||||
servers:
|
||||
- url: https://cmp-api.boss160.cn
|
||||
- url: https://cmp-api.xm-iot.cn
|
||||
description: 测试环境
|
||||
security: []
|
||||
|
||||
@@ -585,7 +585,7 @@ components:
|
||||
scheme: bearer
|
||||
type: jwt
|
||||
servers:
|
||||
- url: https://cmp-api.boss160.cn
|
||||
- url: https://cmp-api.xm-iot.cn
|
||||
description: 测试环境
|
||||
security: []
|
||||
|
||||
@@ -698,7 +698,7 @@ components:
|
||||
scheme: bearer
|
||||
type: jwt
|
||||
servers:
|
||||
- url: https://cmp-api.boss160.cn
|
||||
- url: https://cmp-api.xm-iot.cn
|
||||
description: 测试环境
|
||||
security: []
|
||||
|
||||
@@ -876,7 +876,7 @@ components:
|
||||
scheme: bearer
|
||||
type: jwt
|
||||
servers:
|
||||
- url: https://cmp-api.boss160.cn
|
||||
- url: https://cmp-api.xm-iot.cn
|
||||
description: 测试环境
|
||||
security: []
|
||||
|
||||
@@ -1093,7 +1093,7 @@ components:
|
||||
scheme: bearer
|
||||
type: jwt
|
||||
servers:
|
||||
- url: https://cmp-api.boss160.cn
|
||||
- url: https://cmp-api.xm-iot.cn
|
||||
description: 测试环境
|
||||
security: []
|
||||
|
||||
@@ -1242,7 +1242,7 @@ components:
|
||||
scheme: bearer
|
||||
type: jwt
|
||||
servers:
|
||||
- url: https://cmp-api.boss160.cn
|
||||
- url: https://cmp-api.xm-iot.cn
|
||||
description: 测试环境
|
||||
security: []
|
||||
|
||||
@@ -1348,7 +1348,7 @@ components:
|
||||
scheme: bearer
|
||||
type: jwt
|
||||
servers:
|
||||
- url: https://cmp-api.boss160.cn
|
||||
- url: https://cmp-api.xm-iot.cn
|
||||
description: 测试环境
|
||||
security: []
|
||||
|
||||
@@ -1631,7 +1631,7 @@ components:
|
||||
scheme: bearer
|
||||
type: jwt
|
||||
servers:
|
||||
- url: https://cmp-api.boss160.cn
|
||||
- url: https://cmp-api.xm-iot.cn
|
||||
description: 测试环境
|
||||
security: []
|
||||
|
||||
@@ -1863,7 +1863,7 @@ components:
|
||||
scheme: bearer
|
||||
type: jwt
|
||||
servers:
|
||||
- url: https://cmp-api.boss160.cn
|
||||
- url: https://cmp-api.xm-iot.cn
|
||||
description: 测试环境
|
||||
security: []
|
||||
|
||||
@@ -1976,7 +1976,7 @@ components:
|
||||
scheme: bearer
|
||||
type: jwt
|
||||
servers:
|
||||
- url: https://cmp-api.boss160.cn
|
||||
- url: https://cmp-api.xm-iot.cn
|
||||
description: 测试环境
|
||||
security: []
|
||||
|
||||
@@ -2164,7 +2164,7 @@ components:
|
||||
scheme: bearer
|
||||
type: jwt
|
||||
servers:
|
||||
- url: https://cmp-api.boss160.cn
|
||||
- url: https://cmp-api.xm-iot.cn
|
||||
description: 测试环境
|
||||
security: []
|
||||
|
||||
@@ -2407,7 +2407,7 @@ components:
|
||||
scheme: bearer
|
||||
type: jwt
|
||||
servers:
|
||||
- url: https://cmp-api.boss160.cn
|
||||
- url: https://cmp-api.xm-iot.cn
|
||||
description: 测试环境
|
||||
security: []
|
||||
|
||||
@@ -2565,7 +2565,7 @@ components:
|
||||
scheme: bearer
|
||||
type: jwt
|
||||
servers:
|
||||
- url: https://cmp-api.boss160.cn
|
||||
- url: https://cmp-api.xm-iot.cn
|
||||
description: 测试环境
|
||||
security: []
|
||||
|
||||
@@ -2802,7 +2802,7 @@ components:
|
||||
scheme: bearer
|
||||
type: jwt
|
||||
servers:
|
||||
- url: https://cmp-api.boss160.cn
|
||||
- url: https://cmp-api.xm-iot.cn
|
||||
description: 测试环境
|
||||
security: []
|
||||
|
||||
@@ -3023,7 +3023,7 @@ components:
|
||||
scheme: bearer
|
||||
type: jwt
|
||||
servers:
|
||||
- url: https://cmp-api.boss160.cn
|
||||
- url: https://cmp-api.xm-iot.cn
|
||||
description: 测试环境
|
||||
security: []
|
||||
|
||||
@@ -3145,7 +3145,7 @@ components:
|
||||
scheme: bearer
|
||||
type: jwt
|
||||
servers:
|
||||
- url: https://cmp-api.boss160.cn
|
||||
- url: https://cmp-api.xm-iot.cn
|
||||
description: 测试环境
|
||||
security: []
|
||||
|
||||
@@ -3258,7 +3258,7 @@ components:
|
||||
scheme: bearer
|
||||
type: jwt
|
||||
servers:
|
||||
- url: https://cmp-api.boss160.cn
|
||||
- url: https://cmp-api.xm-iot.cn
|
||||
description: 测试环境
|
||||
security: []
|
||||
|
||||
@@ -3436,7 +3436,7 @@ components:
|
||||
scheme: bearer
|
||||
type: jwt
|
||||
servers:
|
||||
- url: https://cmp-api.boss160.cn
|
||||
- url: https://cmp-api.xm-iot.cn
|
||||
description: 测试环境
|
||||
security: []
|
||||
|
||||
@@ -3653,7 +3653,7 @@ components:
|
||||
scheme: bearer
|
||||
type: jwt
|
||||
servers:
|
||||
- url: https://cmp-api.boss160.cn
|
||||
- url: https://cmp-api.xm-iot.cn
|
||||
description: 测试环境
|
||||
security: []
|
||||
|
||||
@@ -3785,7 +3785,7 @@ components:
|
||||
scheme: bearer
|
||||
type: jwt
|
||||
servers:
|
||||
- url: https://cmp-api.boss160.cn
|
||||
- url: https://cmp-api.xm-iot.cn
|
||||
description: 测试环境
|
||||
security: []
|
||||
|
||||
@@ -3934,7 +3934,7 @@ components:
|
||||
scheme: bearer
|
||||
type: jwt
|
||||
servers:
|
||||
- url: https://cmp-api.boss160.cn
|
||||
- url: https://cmp-api.xm-iot.cn
|
||||
description: 测试环境
|
||||
security: []
|
||||
|
||||
@@ -4066,7 +4066,7 @@ components:
|
||||
scheme: bearer
|
||||
type: jwt
|
||||
servers:
|
||||
- url: https://cmp-api.boss160.cn
|
||||
- url: https://cmp-api.xm-iot.cn
|
||||
description: 测试环境
|
||||
security: []
|
||||
|
||||
@@ -4198,7 +4198,7 @@ components:
|
||||
scheme: bearer
|
||||
type: jwt
|
||||
servers:
|
||||
- url: https://cmp-api.boss160.cn
|
||||
- url: https://cmp-api.xm-iot.cn
|
||||
description: 测试环境
|
||||
security: []
|
||||
|
||||
@@ -4425,7 +4425,7 @@ components:
|
||||
scheme: bearer
|
||||
type: jwt
|
||||
servers:
|
||||
- url: https://cmp-api.boss160.cn
|
||||
- url: https://cmp-api.xm-iot.cn
|
||||
description: 测试环境
|
||||
security: []
|
||||
|
||||
@@ -4613,7 +4613,7 @@ components:
|
||||
scheme: bearer
|
||||
type: jwt
|
||||
servers:
|
||||
- url: https://cmp-api.boss160.cn
|
||||
- url: https://cmp-api.xm-iot.cn
|
||||
description: 测试环境
|
||||
security: []
|
||||
|
||||
@@ -4726,7 +4726,7 @@ components:
|
||||
scheme: bearer
|
||||
type: jwt
|
||||
servers:
|
||||
- url: https://cmp-api.boss160.cn
|
||||
- url: https://cmp-api.xm-iot.cn
|
||||
description: 测试环境
|
||||
security: []
|
||||
|
||||
@@ -4892,7 +4892,7 @@ components:
|
||||
scheme: bearer
|
||||
type: jwt
|
||||
servers:
|
||||
- url: https://cmp-api.boss160.cn
|
||||
- url: https://cmp-api.xm-iot.cn
|
||||
description: 测试环境
|
||||
security: []
|
||||
|
||||
@@ -5089,7 +5089,7 @@ components:
|
||||
scheme: bearer
|
||||
type: jwt
|
||||
servers:
|
||||
- url: https://cmp-api.boss160.cn
|
||||
- url: https://cmp-api.xm-iot.cn
|
||||
description: 测试环境
|
||||
security: []
|
||||
|
||||
@@ -5255,7 +5255,7 @@ components:
|
||||
scheme: bearer
|
||||
type: jwt
|
||||
servers:
|
||||
- url: https://cmp-api.boss160.cn
|
||||
- url: https://cmp-api.xm-iot.cn
|
||||
description: 测试环境
|
||||
security: []
|
||||
|
||||
@@ -5390,7 +5390,7 @@ components:
|
||||
scheme: bearer
|
||||
type: jwt
|
||||
servers:
|
||||
- url: https://cmp-api.boss160.cn
|
||||
- url: https://cmp-api.xm-iot.cn
|
||||
description: 测试环境
|
||||
security: []
|
||||
|
||||
@@ -5522,7 +5522,7 @@ components:
|
||||
scheme: bearer
|
||||
type: jwt
|
||||
servers:
|
||||
- url: https://cmp-api.boss160.cn
|
||||
- url: https://cmp-api.xm-iot.cn
|
||||
description: 测试环境
|
||||
security: []
|
||||
|
||||
@@ -5644,7 +5644,7 @@ components:
|
||||
scheme: bearer
|
||||
type: jwt
|
||||
servers:
|
||||
- url: https://cmp-api.boss160.cn
|
||||
- url: https://cmp-api.xm-iot.cn
|
||||
description: 测试环境
|
||||
security: []
|
||||
|
||||
@@ -5748,7 +5748,7 @@ components:
|
||||
scheme: bearer
|
||||
type: jwt
|
||||
servers:
|
||||
- url: https://cmp-api.boss160.cn
|
||||
- url: https://cmp-api.xm-iot.cn
|
||||
description: 测试环境
|
||||
security: []
|
||||
|
||||
@@ -5905,7 +5905,7 @@ components:
|
||||
scheme: bearer
|
||||
type: jwt
|
||||
servers:
|
||||
- url: https://cmp-api.boss160.cn
|
||||
- url: https://cmp-api.xm-iot.cn
|
||||
description: 测试环境
|
||||
security: []
|
||||
|
||||
@@ -6026,7 +6026,7 @@ components:
|
||||
scheme: bearer
|
||||
type: jwt
|
||||
servers:
|
||||
- url: https://cmp-api.boss160.cn
|
||||
- url: https://cmp-api.xm-iot.cn
|
||||
description: 测试环境
|
||||
security: []
|
||||
|
||||
@@ -6138,7 +6138,7 @@ components:
|
||||
scheme: bearer
|
||||
type: jwt
|
||||
servers:
|
||||
- url: https://cmp-api.boss160.cn
|
||||
- url: https://cmp-api.xm-iot.cn
|
||||
description: 测试环境
|
||||
security: []
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"name": "internet-of-things-admin",
|
||||
"name": "admin-xm-iot",
|
||||
"version": "0.0.0",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
|
||||
BIN
src/assets/img/cover.png
Normal file
BIN
src/assets/img/cover.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 2.3 MiB |
6
src/types/components.d.ts
vendored
6
src/types/components.d.ts
vendored
@@ -91,7 +91,6 @@ declare module 'vue' {
|
||||
ElCard: typeof import('element-plus/es')['ElCard']
|
||||
ElCascader: typeof import('element-plus/es')['ElCascader']
|
||||
ElCheckbox: typeof import('element-plus/es')['ElCheckbox']
|
||||
ElCheckboxGroup: typeof import('element-plus/es')['ElCheckboxGroup']
|
||||
ElCol: typeof import('element-plus/es')['ElCol']
|
||||
ElConfigProvider: typeof import('element-plus/es')['ElConfigProvider']
|
||||
ElDatePicker: typeof import('element-plus/es')['ElDatePicker']
|
||||
@@ -107,7 +106,6 @@ declare module 'vue' {
|
||||
ElForm: typeof import('element-plus/es')['ElForm']
|
||||
ElFormItem: typeof import('element-plus/es')['ElFormItem']
|
||||
ElIcon: typeof import('element-plus/es')['ElIcon']
|
||||
ElImage: typeof import('element-plus/es')['ElImage']
|
||||
ElInput: typeof import('element-plus/es')['ElInput']
|
||||
ElInputNumber: typeof import('element-plus/es')['ElInputNumber']
|
||||
ElMenu: typeof import('element-plus/es')['ElMenu']
|
||||
@@ -117,6 +115,7 @@ declare module 'vue' {
|
||||
ElPopover: typeof import('element-plus/es')['ElPopover']
|
||||
ElProgress: typeof import('element-plus/es')['ElProgress']
|
||||
ElRadio: typeof import('element-plus/es')['ElRadio']
|
||||
ElRadioButton: typeof import('element-plus/es')['ElRadioButton']
|
||||
ElRadioGroup: typeof import('element-plus/es')['ElRadioGroup']
|
||||
ElRow: typeof import('element-plus/es')['ElRow']
|
||||
ElScrollbar: typeof import('element-plus/es')['ElScrollbar']
|
||||
@@ -128,6 +127,8 @@ declare module 'vue' {
|
||||
ElTabPane: typeof import('element-plus/es')['ElTabPane']
|
||||
ElTabs: typeof import('element-plus/es')['ElTabs']
|
||||
ElTag: typeof import('element-plus/es')['ElTag']
|
||||
ElTimeline: typeof import('element-plus/es')['ElTimeline']
|
||||
ElTimelineItem: typeof import('element-plus/es')['ElTimelineItem']
|
||||
ElTooltip: typeof import('element-plus/es')['ElTooltip']
|
||||
ElTreeSelect: typeof import('element-plus/es')['ElTreeSelect']
|
||||
ElUpload: typeof import('element-plus/es')['ElUpload']
|
||||
@@ -148,7 +149,6 @@ declare module 'vue' {
|
||||
SettingDrawer: typeof import('./../components/core/layouts/art-settings-panel/widget/SettingDrawer.vue')['default']
|
||||
SettingHeader: typeof import('./../components/core/layouts/art-settings-panel/widget/SettingHeader.vue')['default']
|
||||
SettingItem: typeof import('./../components/core/layouts/art-settings-panel/widget/SettingItem.vue')['default']
|
||||
SetWiFiDialog: typeof import('./../components/device/SetWiFiDialog.vue')['default']
|
||||
SidebarSubmenu: typeof import('./../components/core/layouts/art-menus/art-sidebar-menu/widget/SidebarSubmenu.vue')['default']
|
||||
SpeedLimitDialog: typeof import('./../components/device/SpeedLimitDialog.vue')['default']
|
||||
SwitchCardDialog: typeof import('./../components/device/SwitchCardDialog.vue')['default']
|
||||
|
||||
@@ -7,7 +7,7 @@ import type { RequestOptions, ErrorMessageMode } from '@/types/api'
|
||||
const axiosInstance = axios.create({
|
||||
timeout: 15000, // 请求超时时间(毫秒)
|
||||
baseURL: import.meta.env.MODE === 'development' ? '' : import.meta.env.VITE_API_URL, // API地址:开发环境使用代理,生产环境使用完整URL
|
||||
withCredentials: true, // 异步请求携带cookie
|
||||
withCredentials: false, // 异步请求携带cookie
|
||||
transformRequest: [
|
||||
(data, headers) => {
|
||||
// 如果是 FormData,不进行转换
|
||||
|
||||
Reference in New Issue
Block a user