docs: 更新测试数据生成器功能设计文档
主要更新: - 添加字段必填/选填设置和空值率配置 - 移除标签管理系统(20条规则无需标签) - 添加组合策略保证唯一性生成 - 添加价格生成器(真实分布/心理定价) - 添加场景化生成器(年龄/数量/评分/折扣/库存) - 更新所有文档移除emoji,使用纯文字 - 更新类型定义和生成逻辑
This commit is contained in:
@@ -7,7 +7,6 @@
|
||||
| 保存规则 | 将当前配置保存为模板 | P0 |
|
||||
| 规则列表 | 查看所有已保存的规则 | P0 |
|
||||
| 规则搜索 | 按关键词搜索规则 | P1 |
|
||||
| 标签筛选 | 按标签分类筛选规则 | P1 |
|
||||
| 规则编辑 | 修改已保存的规则 | P0 |
|
||||
| 规则删除 | 删除不需要的规则 | P0 |
|
||||
| 规则加载 | 一键加载规则配置 | P0 |
|
||||
@@ -15,6 +14,12 @@
|
||||
| 规则导出 | 导出为 JSON 文件 | P1 |
|
||||
| 规则导入 | 从 JSON 文件导入 | P1 |
|
||||
|
||||
## 规则数量限制
|
||||
|
||||
- **最大规则数量**: 20 条
|
||||
- **超出限制**: 当规则数量达到 20 条时,保存按钮置灰,提示"已达到最大规则数量"
|
||||
- **解决方式**: 用户需要删除已有规则后才能保存新规则
|
||||
|
||||
---
|
||||
|
||||
## 数据结构
|
||||
@@ -26,11 +31,11 @@ interface RuleTemplate {
|
||||
id: string; // 唯一标识
|
||||
name: string; // 规则名称
|
||||
description?: string; // 规则描述
|
||||
tags: string[]; // 标签列表
|
||||
fields: FieldConfig[]; // 字段配置
|
||||
options: {
|
||||
total: number; // 生成数量
|
||||
format: 'json' | 'csv' | 'sql' | 'typescript';
|
||||
defaultEmptyRate: number; // 默认空值率(0-100)
|
||||
};
|
||||
metadata: {
|
||||
createdAt: number; // 创建时间
|
||||
@@ -50,6 +55,8 @@ interface FieldConfig {
|
||||
generator: string; // 生成器名称
|
||||
params: Record<string, any>; // 生成器参数
|
||||
unique: boolean; // 唯一性约束
|
||||
required: boolean; // 是否必填
|
||||
emptyRate?: number; // 选填字段的空值概率(0-100)
|
||||
}
|
||||
```
|
||||
|
||||
@@ -65,10 +72,10 @@ interface FieldConfig {
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────────────┐
|
||||
│ 💾 保存规则 │
|
||||
│ 保存规则 │
|
||||
├─────────────────────────────────────────────────────────────────────┤
|
||||
│ │
|
||||
│ 📝 规则信息 │
|
||||
│ 规则信息 │
|
||||
│ ┌───────────────────────────────────────────────────────────────┐ │
|
||||
│ │ 规则名称: │ │
|
||||
│ │ ┌─────────────────────────────────────────────────────────┐ │ │
|
||||
@@ -80,14 +87,9 @@ interface FieldConfig {
|
||||
│ │ │ [用于测试用户注册功能,包含姓名、邮箱、手机号 ]│ │ │
|
||||
│ │ └─────────────────────────────────────────────────────────┘ │ │
|
||||
│ │ │ │
|
||||
│ │ 标签 (可选): │ │
|
||||
│ │ ┌─────────────────────────────────────────────────────────┐ │ │
|
||||
│ │ │ [电商] [用户] [测试数据] [+ 添加标签] │ │ │
|
||||
│ │ └─────────────────────────────────────────────────────────┘ │ │
|
||||
│ │ │ │
|
||||
│ └───────────────────────────────────────────────────────────────┘ │
|
||||
│ │
|
||||
│ 📊 规则预览 │
|
||||
│ 规则预览 │
|
||||
│ ┌───────────────────────────────────────────────────────────────┐ │
|
||||
│ │ 字段数量: 4 个 │ │
|
||||
│ │ • name (中文姓名) │ │
|
||||
@@ -99,7 +101,7 @@ interface FieldConfig {
|
||||
│ │ 数据格式: JSON │ │
|
||||
│ └───────────────────────────────────────────────────────────────┘ │
|
||||
│ │
|
||||
│ [💾 保存] [❌ 取消] │
|
||||
│ [保存] [取消] │
|
||||
│ │
|
||||
└─────────────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
@@ -107,10 +109,12 @@ interface FieldConfig {
|
||||
**保存逻辑**:
|
||||
|
||||
1. 验证规则名称不为空
|
||||
2. 生成唯一 ID
|
||||
3. 设置创建时间和更新时间
|
||||
4. 初始化使用次数为 0
|
||||
5. 保存到 localStorage
|
||||
2. 检查规则数量是否达到上限(20 条)
|
||||
3. 如果达到上限,显示提示"已达到最大规则数量"
|
||||
4. 生成唯一 ID
|
||||
5. 设置创建时间和更新时间
|
||||
6. 初始化使用次数为 0
|
||||
7. 保存到 localStorage
|
||||
|
||||
---
|
||||
|
||||
@@ -120,33 +124,27 @@ interface FieldConfig {
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────────────┐
|
||||
│ 📚 规则管理 │
|
||||
│ 规则管理 │
|
||||
├─────────────────────────────────────────────────────────────────────┤
|
||||
│ │
|
||||
│ 🔍 搜索: [搜索规则名称或标签... ] │
|
||||
│ 搜索: [搜索规则名称... ] │
|
||||
│ │
|
||||
│ 📁 标签筛选 │
|
||||
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
|
||||
│ │ 全部 │ │ 电商 │ │ 用户 │ │ 测试数据 │ │ 最近使用 │ │
|
||||
│ └─────────┘ └─────────┘ └─────────┘ └─────────┘ └─────────┘ │
|
||||
│ │
|
||||
│ 📋 规则列表 │
|
||||
│ 规则列表 (已保存 15/20 条) │
|
||||
│ ┌───────────────────────────────────────────────────────────────┐ │
|
||||
│ │ │ │
|
||||
│ │ ┌─────────────────────────────────────────────────────────┐ │ │
|
||||
│ │ │ 📦 电商用户数据 - 测试用 │ │ │
|
||||
│ │ │ 电商用户数据 - 测试用 │ │ │
|
||||
│ │ │ ─────────────────────────────────────────────────────── │ │ │
|
||||
│ │ │ 📝 用于测试用户注册功能,包含姓名、邮箱、手机号 │ │ │
|
||||
│ │ │ 🏷️ 电商 用户 测试数据 │ │ │
|
||||
│ │ │ 📊 4 个字段 | 100 条 | JSON │ │ │
|
||||
│ │ │ 📅 2024-01-15 14:30 创建 | 2024-01-20 10:15 最后使用 │ │ │
|
||||
│ │ │ 用于测试用户注册功能,包含姓名、邮箱、手机号 │ │ │
|
||||
│ │ │ 4 个字段 | 100 条 | JSON │ │ │
|
||||
│ │ │ 2024-01-15 14:30 创建 | 2024-01-20 10:15 最后使用 │ │ │
|
||||
│ │ │ │ │ │
|
||||
│ │ │ [📥 加载] [📋 复制] [📤 导出] [✏️ 编辑] [🗑️ 删除] │ │ │
|
||||
│ │ │ [加载] [复制] [导出] [编辑] [删除] │ │ │
|
||||
│ │ └─────────────────────────────────────────────────────────┘ │ │
|
||||
│ │ │ │
|
||||
│ └───────────────────────────────────────────────────────────────┘ │
|
||||
│ │
|
||||
│ [📥 导入规则] [📤 导出全部] [🗑️ 清空全部] │
|
||||
│ [导入规则] [导出全部] [清空全部] │
|
||||
│ │
|
||||
└─────────────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
@@ -155,7 +153,6 @@ interface FieldConfig {
|
||||
|
||||
- 规则名称
|
||||
- 规则描述
|
||||
- 标签
|
||||
- 字段数量、生成数量、数据格式
|
||||
- 创建时间、最后使用时间
|
||||
- 操作按钮
|
||||
@@ -168,7 +165,6 @@ interface FieldConfig {
|
||||
|
||||
- 支持按规则名称搜索
|
||||
- 支持按规则描述搜索
|
||||
- 支持按标签搜索
|
||||
- 搜索为模糊匹配,不区分大小写
|
||||
|
||||
**实现方式**:
|
||||
@@ -180,64 +176,46 @@ search(keyword: string): RuleTemplate[] {
|
||||
|
||||
return rules.filter(r =>
|
||||
r.name.toLowerCase().includes(lowerKeyword) ||
|
||||
r.description?.toLowerCase().includes(lowerKeyword) ||
|
||||
r.tags.some(t => t.toLowerCase().includes(lowerKeyword))
|
||||
r.description?.toLowerCase().includes(lowerKeyword)
|
||||
);
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 4. 标签筛选
|
||||
|
||||
**标签来源**:
|
||||
|
||||
- 从所有已保存的规则中提取
|
||||
- 自动去重
|
||||
- 按使用频率排序
|
||||
|
||||
**筛选逻辑**:
|
||||
|
||||
- 点击标签,筛选包含该标签的规则
|
||||
- 支持多标签筛选(交集)
|
||||
- "全部"标签显示所有规则
|
||||
|
||||
---
|
||||
|
||||
### 5. 规则编辑
|
||||
### 4. 规则编辑
|
||||
|
||||
**界面设计**:
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────────────┐
|
||||
│ ✏️ 编辑规则 - 电商用户数据 │
|
||||
│ 编辑规则 - 电商用户数据 │
|
||||
├─────────────────────────────────────────────────────────────────────┤
|
||||
│ │
|
||||
│ 📝 基本信息 │
|
||||
│ 基本信息 │
|
||||
│ ┌───────────────────────────────────────────────────────────────┐ │
|
||||
│ │ 规则名称: [电商用户数据 - 测试用 ]│ │
|
||||
│ │ 规则描述: [用于测试用户注册功能,包含姓名、邮箱、手机号 ]│ │
|
||||
│ │ 标签: [电商] [用户] [测试数据] [+ 添加标签] │ │
|
||||
│ └───────────────────────────────────────────────────────────────┘ │
|
||||
│ │
|
||||
│ 📋 字段配置 (可直接编辑) │
|
||||
│ 字段配置 (可直接编辑) │
|
||||
│ ┌───────────────────────────────────────────────────────────────┐ │
|
||||
│ │ │ │
|
||||
│ │ 1. name [中文姓名 ▼] [⚙️] [❌] [⬆️][⬇️] │ │
|
||||
│ │ 2. email [邮箱地址 ▼] [⚙️] [❌] [⬆️][⬇️] │ │
|
||||
│ │ 3. phone [手机号 ▼] [⚙️] [❌] [⬆️][⬇️] │ │
|
||||
│ │ 4. age [年龄 ▼] [⚙️] [❌] [⬆️][⬇️] │ │
|
||||
│ │ 1. name [中文姓名 ▼] [配置] [删除] [上移][下移] │ │
|
||||
│ │ 2. email [邮箱地址 ▼] [配置] [删除] [上移][下移] │ │
|
||||
│ │ 3. phone [手机号 ▼] [配置] [删除] [上移][下移] │ │
|
||||
│ │ 4. age [年龄 ▼] [配置] [删除] [上移][下移] │ │
|
||||
│ │ │ │
|
||||
│ │ [+ 添加字段] │ │
|
||||
│ │ │ │
|
||||
│ └───────────────────────────────────────────────────────────────┘ │
|
||||
│ │
|
||||
│ ⚙️ 生成选项 │
|
||||
│ 生成选项 │
|
||||
│ ┌───────────────────────────────────────────────────────────────┐ │
|
||||
│ │ 数量: [100] 格式: [JSON ▼] │ │
|
||||
│ └───────────────────────────────────────────────────────────────┘ │
|
||||
│ │
|
||||
│ [💾 保存修改] [❌ 取消] │
|
||||
│ [保存修改] [取消] │
|
||||
│ │
|
||||
└─────────────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
@@ -252,7 +230,7 @@ search(keyword: string): RuleTemplate[] {
|
||||
|
||||
---
|
||||
|
||||
### 6. 规则删除
|
||||
### 5. 规则删除
|
||||
|
||||
**删除流程**:
|
||||
|
||||
@@ -265,21 +243,21 @@ search(keyword: string): RuleTemplate[] {
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────┐
|
||||
│ ⚠️ 确认删除 │
|
||||
│ 确认删除 │
|
||||
├─────────────────────────────────────────┤
|
||||
│ │
|
||||
│ 确定要删除规则 "电商用户数据" 吗? │
|
||||
│ │
|
||||
│ 此操作不可撤销。 │
|
||||
│ │
|
||||
│ [❌ 取消] [🗑️ 删除] │
|
||||
│ [取消] [删除] │
|
||||
│ │
|
||||
└─────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 7. 规则加载
|
||||
### 6. 规则加载
|
||||
|
||||
**加载流程**:
|
||||
|
||||
@@ -308,7 +286,7 @@ loadRule(ruleId: string): void {
|
||||
|
||||
---
|
||||
|
||||
### 8. 规则复制
|
||||
### 7. 规则复制
|
||||
|
||||
**复制逻辑**:
|
||||
|
||||
@@ -320,31 +298,31 @@ loadRule(ruleId: string): void {
|
||||
|
||||
---
|
||||
|
||||
### 9. 规则导出
|
||||
### 8. 规则导出
|
||||
|
||||
**导出界面**:
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────────────┐
|
||||
│ 📤 导出规则 │
|
||||
│ 导出规则 │
|
||||
├─────────────────────────────────────────────────────────────────────┤
|
||||
│ │
|
||||
│ 📋 选择要导出的规则: │
|
||||
│ 选择要导出的规则: │
|
||||
│ ┌───────────────────────────────────────────────────────────────┐ │
|
||||
│ │ ☑️ 电商用户数据 - 测试用 (4个字段, 100条) │ │
|
||||
│ │ ☑️ 电商订单数据 - 测试用 (6个字段, 500条) │ │
|
||||
│ │ ☑ 电商用户数据 - 测试用 (4个字段, 100条) │ │
|
||||
│ │ ☑ 电商订单数据 - 测试用 (6个字段, 500条) │ │
|
||||
│ │ ☐ 用户登录数据 - 测试用 (3个字段, 50条) │ │
|
||||
│ │ │ │
|
||||
│ │ [全选] [全不选] │ │
|
||||
│ └───────────────────────────────────────────────────────────────┘ │
|
||||
│ │
|
||||
│ 📤 导出格式: │
|
||||
│ 导出格式: │
|
||||
│ ┌───────────────────────────────────────────────────────────────┐ │
|
||||
│ │ ○ 导出为单个 JSON 文件 (所有规则合并) │ │
|
||||
│ │ ● 导出为多个 JSON 文件 (每个规则一个文件) │ │
|
||||
│ └───────────────────────────────────────────────────────────────┘ │
|
||||
│ │
|
||||
│ [📤 导出] [❌ 取消] │
|
||||
│ [导出] [取消] │
|
||||
│ │
|
||||
└─────────────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
@@ -360,7 +338,6 @@ loadRule(ruleId: string): void {
|
||||
"id": "rule_123456",
|
||||
"name": "电商用户数据 - 测试用",
|
||||
"description": "用于测试用户注册功能",
|
||||
"tags": ["电商", "用户", "测试数据"],
|
||||
"fields": [...],
|
||||
"options": {...},
|
||||
"metadata": {...}
|
||||
@@ -371,21 +348,21 @@ loadRule(ruleId: string): void {
|
||||
|
||||
---
|
||||
|
||||
### 10. 规则导入
|
||||
### 9. 规则导入
|
||||
|
||||
**导入界面**:
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────────────┐
|
||||
│ 📥 导入规则 │
|
||||
│ 导入规则 │
|
||||
├─────────────────────────────────────────────────────────────────────┤
|
||||
│ │
|
||||
│ 📤 选择导入方式: │
|
||||
│ 选择导入方式: │
|
||||
│ ┌───────────────────────────────────────────────────────────────┐ │
|
||||
│ │ │ │
|
||||
│ │ ○ 从文件导入 │ │
|
||||
│ │ ┌─────────────────────────────────────────────────────┐ │ │
|
||||
│ │ │ 📁 拖拽文件到这里,或 [点击选择文件] │ │ │
|
||||
│ │ │ 拖拽文件到这里,或 [点击选择文件] │ │ │
|
||||
│ │ │ 支持格式: .json │ │ │
|
||||
│ │ └─────────────────────────────────────────────────────┘ │ │
|
||||
│ │ │ │
|
||||
@@ -396,15 +373,15 @@ loadRule(ruleId: string): void {
|
||||
│ │ │ │
|
||||
│ └───────────────────────────────────────────────────────────────┘ │
|
||||
│ │
|
||||
│ 📊 预览导入内容: │
|
||||
│ 预览导入内容: │
|
||||
│ ┌───────────────────────────────────────────────────────────────┐ │
|
||||
│ │ ✅ 格式验证通过 │ │
|
||||
│ │ 格式验证通过 │ │
|
||||
│ │ 规则数量: 2 个 │ │
|
||||
│ │ • 电商用户数据 (4个字段) │ │
|
||||
│ │ • 电商订单数据 (6个字段) │ │
|
||||
│ └───────────────────────────────────────────────────────────────┘ │
|
||||
│ │
|
||||
│ [📥 导入] [❌ 取消] │
|
||||
│ [导入] [取消] │
|
||||
│ │
|
||||
└─────────────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
@@ -437,10 +414,21 @@ class RuleStorage {
|
||||
}
|
||||
|
||||
// 保存规则
|
||||
save(rule: RuleTemplate): void {
|
||||
save(rule: RuleTemplate): { success: boolean; message?: string } {
|
||||
const rules = this.getAll();
|
||||
|
||||
// 规则数量限制:最多 20 条
|
||||
const MAX_RULES = 20;
|
||||
if (rules.length >= MAX_RULES) {
|
||||
return {
|
||||
success: false,
|
||||
message: `已达到最大规则数量(${MAX_RULES}条),请删除一些规则后再保存`,
|
||||
};
|
||||
}
|
||||
|
||||
rules.push(rule);
|
||||
localStorage.setItem(this.STORAGE_KEY, JSON.stringify(rules));
|
||||
return { success: true };
|
||||
}
|
||||
|
||||
// 更新规则
|
||||
@@ -475,9 +463,10 @@ class RuleStorage {
|
||||
|
||||
### 存储限制
|
||||
|
||||
- **规则数量限制**: 最多 20 条
|
||||
- localStorage 容量: 5-10MB(浏览器限制)
|
||||
- 单个规则约 1-5KB
|
||||
- 预计可存储 1000-5000 个规则
|
||||
- 预计可存储 1000-5000 个规则(但受数量限制,最多 20 条)
|
||||
|
||||
---
|
||||
|
||||
@@ -487,7 +476,6 @@ class RuleStorage {
|
||||
| -------- | ------------------------------ |
|
||||
| 本地存储 | 数据保存在浏览器本地,无需后端 |
|
||||
| 快速复用 | 一键加载已保存的规则 |
|
||||
| 标签管理 | 按标签分类管理规则 |
|
||||
| 导入导出 | 支持 JSON 文件导入导出 |
|
||||
| 使用统计 | 记录使用次数和时间 |
|
||||
| 搜索筛选 | 支持关键词搜索和标签筛选 |
|
||||
| 搜索筛选 | 支持关键词搜索 |
|
||||
|
||||
Reference in New Issue
Block a user