Sfoglia il codice sorgente

增加数据mock工具

zxlie 3 mesi fa
parent
commit
d3b9c684bf

+ 2 - 2
apps/background/tools.js

@@ -194,11 +194,11 @@ let toolMap = {
         }]
     },
     'mock-data': {
-        name: 'Mock数据生成',
+        name: '数据Mock工具',
         tips: '快速生成各种测试数据,支持个人信息、商业数据、技术数据等多种类型,可自定义字段和输出格式',
         menuConfig: [{
             icon: '⟡',
-            text: 'Mock数据生成'
+            text: '数据Mock工具'
         }]
     },
     'color-picker': {

+ 1 - 0
apps/json-format/index.html

@@ -16,6 +16,7 @@
                             <img src="../static/img/fe-16.png" alt="fehelper"/> FeHelper</a>:JSON格式化
                         <span class="x-xdemo" ref="demoLink1" @click="setDemo">示例1:JSON片段</span>
                         <a class="x-xdemo" href="http://t.weather.sojson.com/api/weather/city/101030100" target="_blank">示例2:在线JSON</a>
+                        <a class="x-xdemo" href="/options/index.html?query=数据Mock工具" target="_blank" class="fh-tip-link">获取更多Mock数据</a>
 
                         <span id="layoutBar">
                             <button id="btnLeftRight" ref="btnLeftRight" class="selected" @click="changeLayout('left-right')">左右布局</button><button id="btnUpDown" ref="btnUpDown" @click="changeLayout('up-down')">上下布局</button>

+ 431 - 123
apps/mock-data/index.css

@@ -1,4 +1,3 @@
-
 body {
     margin: 0;
     padding: 0;
@@ -264,15 +263,156 @@ body {
     padding: 20px;
 }
 
-/* 数据类型选择区域 */
+/* 主要内容布局 */
+.main-content-layout {
+    display: flex;
+    gap: 20px;
+    height: calc(100vh - 120px);
+    min-height: 600px;
+}
+
+/* 左侧配置区域 */
+.config-section {
+    flex: 0 0 500px;
+    min-width: 480px;
+    overflow-y: auto;
+    padding-right: 10px;
+}
+
+/* 配置区域滚动条样式 */
+.config-section::-webkit-scrollbar {
+    width: 6px;
+}
+
+.config-section::-webkit-scrollbar-track {
+    background: #f1f1f1;
+    border-radius: 3px;
+}
+
+.config-section::-webkit-scrollbar-thumb {
+    background: #c1c1c1;
+    border-radius: 3px;
+}
+
+.config-section::-webkit-scrollbar-thumb:hover {
+    background: #a8a8a8;
+}
+
+/* 右侧结果区域 */
+.result-section {
+    flex: 1;
+    display: flex;
+    flex-direction: column;
+}
+
+.result-panel {
+    background: #f8f9fa;
+    border-radius: 8px;
+    border: 1px solid #e9ecef;
+    height: 100%;
+    display: flex;
+    flex-direction: column;
+    overflow: hidden;
+}
+
+.result-header {
+    background: linear-gradient(135deg, #ddd 0%, #eee 100%);
+    color: #000;
+    padding: 10px 20px;
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    border-bottom: none;
+}
+
+.result-header h4 {
+    margin: 0;
+    color: #000;
+    font-size: 16px;
+    font-weight: 600;
+}
+
+.result-actions {
+    display: flex;
+    align-items: center;
+    gap: 10px;
+}
+
+.data-size {
+    background: rgba(255, 255, 255, 0.2);
+    padding: 4px 8px;
+    border-radius: 12px;
+    font-size: 12px;
+    font-weight: 500;
+}
+
+.btn-sm {
+    padding: 6px 12px;
+    font-size: 12px;
+    border-radius: 4px;
+}
+
+.result-content {
+    flex: 1;
+    overflow: auto;
+    background: white;
+}
+
+.result-content pre {
+    margin: 0;
+    padding: 20px;
+    background: #282c34;
+    color: #abb2bf;
+    font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace;
+    font-size: 13px;
+    line-height: 1.5;
+    overflow-x: auto;
+    white-space: pre-wrap;
+    word-wrap: break-word;
+    height: 100%;
+    box-sizing: border-box;
+}
+
+/* 空结果状态 */
+.empty-result {
+    display: flex;
+    flex-direction: column;
+    align-items: center;
+    justify-content: center;
+    height: 100%;
+    color: #6c757d;
+    text-align: center;
+    padding: 40px 20px;
+}
+
+.empty-icon {
+    font-size: 48px;
+    margin-bottom: 20px;
+    opacity: 0.7;
+}
+
+.empty-text h5 {
+    margin: 0 0 10px 0;
+    color: #495057;
+    font-size: 18px;
+    font-weight: 600;
+}
+
+.empty-text p {
+    margin: 0;
+    color: #6c757d;
+    font-size: 14px;
+}
+
+/* 数据类型选择区域 - 紧凑样式 */
 .data-type-section {
-    margin-bottom: 25px;
+    margin-bottom: 20px;
 }
 
 .data-type-section h4 {
-    margin: 0 0 15px 0;
+    margin: 0 0 10px 0;
     color: #333;
-    font-size: 16px;
+    font-size: 15px;
     font-weight: 600;
 }
 
@@ -281,19 +421,19 @@ body {
     gap: 2px;
     background: #f1f3f4;
     border-radius: 6px;
-    padding: 4px;
+    padding: 3px;
 }
 
 .data-tab {
     flex: 1;
-    padding: 10px 16px;
+    padding: 8px 12px;
     border: none;
     background: transparent;
     color: #666;
     border-radius: 4px;
     cursor: pointer;
     transition: all 0.3s ease;
-    font-size: 14px;
+    font-size: 13px;
     font-weight: 500;
 }
 
@@ -308,34 +448,34 @@ body {
     box-shadow: 0 2px 8px rgba(102, 126, 234, 0.3);
 }
 
-/* 数据内容区域 */
+/* 数据内容区域 - 紧凑样式 */
 .data-content {
-    margin-bottom: 25px;
+    margin-bottom: 20px;
 }
 
 .field-group h5 {
-    margin: 0 0 15px 0;
+    margin: 0 0 10px 0;
     color: #444;
-    font-size: 14px;
+    font-size: 13px;
     font-weight: 600;
-    border-bottom: 2px solid #e9ecef;
-    padding-bottom: 8px;
+    border-bottom: 1px solid #e9ecef;
+    padding-bottom: 6px;
 }
 
 .field-row {
     display: flex;
     flex-wrap: wrap;
-    gap: 20px;
-    margin-bottom: 15px;
+    gap: 12px;
+    margin-bottom: 12px;
 }
 
 .field-row label {
     display: flex;
     align-items: center;
     cursor: pointer;
-    font-size: 14px;
+    font-size: 13px;
     color: #555;
-    min-width: 120px;
+    min-width: 110px;
     transition: color 0.3s ease;
 }
 
@@ -344,23 +484,23 @@ body {
 }
 
 .field-row input[type="checkbox"] {
-    margin-right: 8px;
-    width: 16px;
-    height: 16px;
+    margin-right: 6px;
+    width: 14px;
+    height: 14px;
     cursor: pointer;
 }
 
-/* 自定义数据区域 */
+/* 自定义数据区域 - 紧凑样式 */
 .custom-input {
     display: flex;
     align-items: center;
-    margin-bottom: 15px;
-    gap: 10px;
+    margin-bottom: 10px;
+    gap: 8px;
 }
 
 .custom-input label {
-    min-width: 100px;
-    font-size: 14px;
+    min-width: 80px;
+    font-size: 13px;
     color: #555;
     font-weight: 500;
 }
@@ -368,10 +508,10 @@ body {
 .custom-input input,
 .custom-input select {
     flex: 1;
-    padding: 8px 12px;
+    padding: 6px 10px;
     border: 1px solid #ddd;
     border-radius: 4px;
-    font-size: 14px;
+    font-size: 13px;
     transition: border-color 0.3s ease;
 }
 
@@ -383,8 +523,8 @@ body {
 }
 
 .custom-fields-list {
-    margin-top: 20px;
-    padding: 15px;
+    margin-top: 15px;
+    padding: 12px;
     background: #f8f9fa;
     border-radius: 6px;
 }
@@ -393,8 +533,9 @@ body {
     display: flex;
     justify-content: space-between;
     align-items: center;
-    padding: 8px 0;
+    padding: 6px 0;
     border-bottom: 1px solid #e9ecef;
+    font-size: 13px;
 }
 
 .custom-field-item:last-child {
@@ -416,50 +557,146 @@ body {
     background: #c82333;
 }
 
-/* 生成配置 */
+/* 生成配置 - 紧凑样式 */
 .generate-config {
-    margin-bottom: 25px;
-    padding: 15px;
+    margin-bottom: 20px;
+    padding: 12px;
     background: #f8f9fa;
     border-radius: 6px;
     border-left: 4px solid #667eea;
 }
 
-.config-row {
+.generate-config .config-row {
     display: flex;
     align-items: center;
-    gap: 10px;
+    gap: 8px;
+    margin-bottom: 8px;
+}
+
+.generate-config .config-row:last-child {
+    margin-bottom: 0;
+}
+
+/* 操作按钮 - 紧凑样式 */
+.action-buttons {
+    display: flex;
+    gap: 6px;
+    margin-bottom: 20px;
     flex-wrap: wrap;
 }
 
-.config-row label {
+.action-buttons .btn {
+    flex: 1;
+    min-width: 70px;
+    padding: 4px 14px;
+    font-size: 13px;
+}
+
+/* 快速模板区域 - 顶部样式 */
+.template-section.template-top {
+    margin-top: 0;
+    margin-bottom: 15px;
+    padding-top: 0;
+    border-top: none;
+    padding-bottom: 12px;
+    border-bottom: 1px solid #e9ecef;
+}
+
+.template-section.template-top h4 {
+    margin: 0 0 10px 0;
+    color: #333;
+    font-size: 15px;
+    font-weight: 600;
+}
+
+/* 顶部操作按钮 - 特殊样式 */
+.action-buttons-top {
+    margin-bottom: 15px;
+    padding-bottom: 15px;
+    border-bottom: 2px solid #e9ecef;
+    display: flex;
+    gap: 8px;
+    flex-wrap: wrap;
+}
+
+.action-buttons-top .btn {
+    flex: 1;
+    min-width: 90px;
+    padding: 10px 16px;
     font-size: 14px;
+    font-weight: 600;
+    border-radius: 6px;
+    transition: all 0.3s ease;
+}
+
+.action-buttons-top .btn-success {
+    background: linear-gradient(135deg, #28a745 0%, #20c997 100%);
+    box-shadow: 0 2px 8px rgba(40, 167, 69, 0.3);
+}
+
+.action-buttons-top .btn-success:hover {
+    transform: translateY(-2px);
+    box-shadow: 0 4px 15px rgba(40, 167, 69, 0.4);
+}
+
+.action-buttons-top .btn-info {
+    background: linear-gradient(135deg, #17a2b8 0%, #6f42c1 100%);
+    box-shadow: 0 2px 8px rgba(23, 162, 184, 0.3);
+}
+
+.action-buttons-top .btn-info:hover {
+    transform: translateY(-2px);
+    box-shadow: 0 4px 15px rgba(23, 162, 184, 0.4);
+}
+
+.action-buttons-top .btn-warning {
+    background: linear-gradient(135deg, #ffc107 0%, #fd7e14 100%);
+    box-shadow: 0 2px 8px rgba(255, 193, 7, 0.3);
+}
+
+.action-buttons-top .btn-warning:hover {
+    transform: translateY(-2px);
+    box-shadow: 0 4px 15px rgba(255, 193, 7, 0.4);
+}
+
+.template-buttons {
+    display: grid;
+    grid-template-columns: repeat(auto-fit, minmax(90px, 1fr));
+    gap: 6px;
+}
+
+.template-buttons .btn-template {
+    padding: 6px 10px;
+    font-size: 12px;
+    min-width: 80px;
+    margin-bottom: 0;
+}
+
+/* 基础配置样式 - 紧凑调整 */
+.config-row label {
+    font-size: 13px;
     color: #555;
     font-weight: 500;
+    min-width: 70px;
 }
 
 .config-row input,
 .config-row select {
-    padding: 6px 10px;
+    padding: 5px 8px;
     border: 1px solid #ddd;
     border-radius: 4px;
-    font-size: 14px;
-}
-
-/* 按钮样式 */
-.action-buttons {
-    display: flex;
-    gap: 10px;
-    margin-bottom: 25px;
-    flex-wrap: wrap;
+    font-size: 13px;
+    flex: 1;
+    min-width: 100px;
 }
 
+/* 按钮基础样式调整 */
 .btn {
-    padding: 10px 20px;
+    padding: 8px 16px;
     border: none;
-    border-radius: 5px;
+    border-radius: 4px;
     cursor: pointer;
-    font-size: 14px;
+    font-size: 13px;
     font-weight: 500;
     transition: all 0.3s ease;
     text-decoration: none;
@@ -469,8 +706,12 @@ body {
 }
 
 .btn:disabled {
-    opacity: 0.6;
+    opacity: 0.4;
     cursor: not-allowed;
+    background: #6c757d !important;
+    color: rgba(255, 255, 255, 0.6) !important;
+    transform: none !important;
+    box-shadow: none !important;
 }
 
 .btn-success {
@@ -541,106 +782,112 @@ body {
     transform: translateY(-1px);
 }
 
-/* 结果显示区域 */
-.result-section {
-    margin-top: 25px;
-    border: 1px solid #e9ecef;
-    border-radius: 6px;
-    overflow: hidden;
-}
-
-.result-header {
-    background: #f8f9fa;
-    padding: 12px 16px;
-    border-bottom: 1px solid #e9ecef;
-    display: flex;
-    justify-content: space-between;
-    align-items: center;
-}
-
-.result-header h4 {
-    margin: 0;
-    color: #333;
-    font-size: 16px;
-}
-
-.data-size {
-    color: #666;
-    font-size: 12px;
-    background: #e9ecef;
-    padding: 4px 8px;
-    border-radius: 12px;
-}
-
-.result-content {
-    max-height: 400px;
-    overflow: auto;
-    background: #f8f9fa;
-}
-
-.result-content pre {
-    margin: 0;
-    padding: 16px;
-    background: #282c34;
-    color: #abb2bf;
-    font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace;
-    font-size: 13px;
-    line-height: 1.5;
-    overflow-x: auto;
-    white-space: pre-wrap;
-    word-wrap: break-word;
-}
-
-/* 模板区域 */
-.template-section {
-    margin-top: 30px;
-    padding-top: 20px;
-    border-top: 2px solid #e9ecef;
+/* 移除原有的模板区域样式 */
+.template-section:not(.template-top) {
+    display: none;
 }
 
-.template-section h4 {
-    margin: 0 0 15px 0;
-    color: #333;
-    font-size: 16px;
-    font-weight: 600;
+/* 响应式调整 */
+@media (max-width: 1200px) {
+    .config-section {
+        flex: 0 0 400px;
+        min-width: 360px;
+    }
 }
 
-.template-buttons {
-    display: flex;
-    gap: 10px;
-    flex-wrap: wrap;
+@media (max-width: 1024px) {
+    .main-content-layout {
+        flex-direction: column;
+        height: auto;
+        gap: 15px;
+    }
+    
+    .config-section {
+        flex: none;
+        width: 100%;
+        max-height: none;
+        overflow-y: visible;
+        padding-right: 0;
+    }
+    
+    .result-section {
+        flex: none;
+        min-height: 400px;
+    }
+    
+    .result-panel {
+        height: 400px;
+    }
 }
 
-/* 响应式设计 */
 @media (max-width: 768px) {
-    .wrapper {
-        padding: 10px;
-    }
-    
     .panel-body {
         padding: 15px;
     }
     
+    .main-content-layout {
+        gap: 10px;
+    }
+    
     .data-type-tabs {
         flex-direction: column;
+        gap: 2px;
+    }
+    
+    .data-tab {
+        width: 100%;
     }
     
     .field-row {
         flex-direction: column;
-        gap: 10px;
+        gap: 8px;
     }
     
-    .action-buttons {
+    .field-row label {
+        min-width: auto;
+        width: 100%;
+    }
+    
+    .action-buttons,
+    .action-buttons-top {
         flex-direction: column;
     }
     
-    .btn {
+    .action-buttons .btn,
+    .action-buttons-top .btn {
         width: 100%;
+        flex: none;
+    }
+    
+    .template-buttons {
+        grid-template-columns: 1fr;
+        gap: 4px;
+    }
+    
+    .template-buttons .btn-template {
+        width: 100%;
+    }
+    
+    .result-actions {
+        flex-direction: column;
+        gap: 5px;
+        align-items: flex-end;
     }
     
     .config-row {
         flex-direction: column;
         align-items: flex-start;
+        gap: 5px;
+    }
+    
+    .config-row label {
+        min-width: auto;
+    }
+    
+    .config-row input,
+    .config-row select {
+        width: 100%;
+        min-width: auto;
     }
 }
 
@@ -784,4 +1031,65 @@ body {
         color: white;
         border-color: #667eea;
     }
+    
+    .config-section::-webkit-scrollbar-track {
+        background: #3d3d3d;
+    }
+    
+    .config-section::-webkit-scrollbar-thumb {
+        background: #666;
+    }
+    
+    .config-section::-webkit-scrollbar-thumb:hover {
+        background: #777;
+    }
+    
+    .result-panel {
+        background: #2d2d2d;
+        border-color: #555;
+    }
+    
+    .result-header {
+        background: linear-gradient(135deg, #5a619d 0%, #6f5aab 100%);
+    }
+    
+    .empty-result {
+        color: #ccc;
+    }
+    
+    .empty-text h5 {
+        color: #e0e0e0;
+    }
+    
+    .empty-text p {
+        color: #aaa;
+    }
+    
+    .config-row label {
+        color: #ccc;
+    }
+    
+    .template-section.template-top h4 {
+        color: #e0e0e0;
+    }
+    
+    .template-section.template-top {
+        border-bottom-color: #555;
+    }
+    
+    .action-buttons-top {
+        border-bottom-color: #555;
+    }
+    
+    .action-buttons-top .btn-success {
+        background: linear-gradient(135deg, #1e7e34 0%, #17a2b8 100%);
+    }
+    
+    .action-buttons-top .btn-info {
+        background: linear-gradient(135deg, #138496 0%, #5a6fd8 100%);
+    }
+    
+    .action-buttons-top .btn-warning {
+        background: linear-gradient(135deg, #e0a800 0%, #dc3545 100%);
+    }
 } 

+ 178 - 159
apps/mock-data/index.html

@@ -2,7 +2,7 @@
 <html lang="zh-CN">
 <head>
     <meta charset="utf-8"/>
-    <title>Mock数据生成器</title>
+    <title>数据Mock工具 - FeHelper</title>
     <link rel="stylesheet" href="index.css"/>
     <script type="text/javascript" src="../static/vendor/evalCore.min.js"></script>
     <script type="text/javascript" src="../static/vendor/vue/vue.js"></script>
@@ -16,7 +16,7 @@
                 <a href="https://www.baidufe.com/fehelper/index/index.html" target="_blank" class="brand-link">
                     <img src="../static/img/fe-16.png" alt="fehelper"/> 
                     <span class="brand-text">FeHelper</span>
-                    <span class="brand-subtitle">Mock数据生成器</span>
+                    <span class="brand-subtitle">数据Mock工具</span>
                 </a>
             </div>
             <div class="navbar-actions">
@@ -33,177 +33,196 @@
         </div>
 
         <div class="panel panel-default">
-            <!-- 主要内容 -->
+            <!-- 主要内容 - 左右布局 -->
             <div class="panel-body" v-cloak>
-                <!-- 数据类型选择区域 -->
-                <div class="data-type-section">
-                    <h4>选择数据类型</h4>
-                    <div class="data-type-tabs">
-                        <button class="data-tab" 
-                                :class="{ active: activeTab === 'personal' }"
-                                @click="activeTab = 'personal'">
-                            个人信息
-                        </button>
-                        <button class="data-tab" 
-                                :class="{ active: activeTab === 'business' }"
-                                @click="activeTab = 'business'">
-                            商业数据
-                        </button>
-                        <button class="data-tab" 
-                                :class="{ active: activeTab === 'technical' }"
-                                @click="activeTab = 'technical'">
-                            技术数据
-                        </button>
-                        <button class="data-tab" 
-                                :class="{ active: activeTab === 'custom' }"
-                                @click="activeTab = 'custom'">
-                            自定义数据
-                        </button>
-                    </div>
-                </div>
-
-                <!-- 个人信息数据 -->
-                <div v-show="activeTab === 'personal'" class="data-content">
-                    <div class="field-group">
-                        <h5>基本信息</h5>
-                        <div class="field-row">
-                            <label><input type="checkbox" v-model="selectedFields.name"> 姓名</label>
-                            <label><input type="checkbox" v-model="selectedFields.email"> 邮箱</label>
-                            <label><input type="checkbox" v-model="selectedFields.phone"> 手机号</label>
-                            <label><input type="checkbox" v-model="selectedFields.idCard"> 身份证号</label>
-                        </div>
-                        <div class="field-row">
-                            <label><input type="checkbox" v-model="selectedFields.gender"> 性别</label>
-                            <label><input type="checkbox" v-model="selectedFields.age"> 年龄</label>
-                            <label><input type="checkbox" v-model="selectedFields.birthday"> 生日</label>
-                            <label><input type="checkbox" v-model="selectedFields.address"> 地址</label>
+                <div class="main-content-layout">
+                    <!-- 左侧配置操作区 -->
+                    <div class="config-section">
+                        <!-- 快速模板 -->
+                        <div class="template-section template-top">
+                            <h4>快速模板</h4>
+                            <div class="template-buttons">
+                                <button @click="loadTemplate('user')" class="btn btn-template">用户信息</button>
+                                <button @click="loadTemplate('employee')" class="btn btn-template">员工信息</button>
+                                <button @click="loadTemplate('product')" class="btn btn-template">商品信息</button>
+                                <button @click="loadTemplate('order')" class="btn btn-template">订单信息</button>
+                                <button @click="loadTemplate('api')" class="btn btn-template">API测试数据</button>
+                            </div>
                         </div>
-                    </div>
-                </div>
 
-                <!-- 商业数据 -->
-                <div v-show="activeTab === 'business'" class="data-content">
-                    <div class="field-group">
-                        <h5>商业信息</h5>
-                        <div class="field-row">
-                            <label><input type="checkbox" v-model="selectedFields.company"> 公司名称</label>
-                            <label><input type="checkbox" v-model="selectedFields.department"> 部门</label>
-                            <label><input type="checkbox" v-model="selectedFields.position"> 职位</label>
-                            <label><input type="checkbox" v-model="selectedFields.salary"> 薪资</label>
-                        </div>
-                        <div class="field-row">
-                            <label><input type="checkbox" v-model="selectedFields.bankCard"> 银行卡号</label>
-                            <label><input type="checkbox" v-model="selectedFields.creditCard"> 信用卡号</label>
-                            <label><input type="checkbox" v-model="selectedFields.price"> 价格</label>
-                            <label><input type="checkbox" v-model="selectedFields.currency"> 货币</label>
+                        <!-- 操作按钮 -->
+                        <div class="action-buttons action-buttons-top">
+                            <button @click="generateData" class="btn btn-success">生成数据</button>
+                            <button @click="selectAll" class="btn btn-info">全选</button>
+                            <button @click="clearAll" class="btn btn-warning">清空</button>
                         </div>
-                    </div>
-                </div>
 
-                <!-- 技术数据 -->
-                <div v-show="activeTab === 'technical'" class="data-content">
-                    <div class="field-group">
-                        <h5>技术信息</h5>
-                        <div class="field-row">
-                            <label><input type="checkbox" v-model="selectedFields.uuid"> UUID</label>
-                            <label><input type="checkbox" v-model="selectedFields.ip"> IP地址</label>
-                            <label><input type="checkbox" v-model="selectedFields.mac"> MAC地址</label>
-                            <label><input type="checkbox" v-model="selectedFields.userAgent"> User Agent</label>
-                        </div>
-                        <div class="field-row">
-                            <label><input type="checkbox" v-model="selectedFields.url"> URL</label>
-                            <label><input type="checkbox" v-model="selectedFields.domain"> 域名</label>
-                            <label><input type="checkbox" v-model="selectedFields.password"> 密码</label>
-                            <label><input type="checkbox" v-model="selectedFields.token"> Token</label>
-                        </div>
-                        <div class="field-row">
-                            <label><input type="checkbox" v-model="selectedFields.color"> 颜色值</label>
-                            <label><input type="checkbox" v-model="selectedFields.timestamp"> 时间戳</label>
-                            <label><input type="checkbox" v-model="selectedFields.filename"> 文件名</label>
-                            <label><input type="checkbox" v-model="selectedFields.mimeType"> MIME类型</label>
+                        <!-- 数据类型选择区域 -->
+                        <div class="data-type-section">
+                            <h4>选择数据类型</h4>
+                            <div class="data-type-tabs">
+                                <button class="data-tab" 
+                                        :class="{ active: activeTab === 'personal' }"
+                                        @click="activeTab = 'personal'">
+                                    个人信息
+                                </button>
+                                <button class="data-tab" 
+                                        :class="{ active: activeTab === 'business' }"
+                                        @click="activeTab = 'business'">
+                                    商业数据
+                                </button>
+                                <button class="data-tab" 
+                                        :class="{ active: activeTab === 'technical' }"
+                                        @click="activeTab = 'technical'">
+                                    技术数据
+                                </button>
+                                <button class="data-tab" 
+                                        :class="{ active: activeTab === 'custom' }"
+                                        @click="activeTab = 'custom'">
+                                    自定义数据
+                                </button>
+                            </div>
                         </div>
-                    </div>
-                </div>
 
-                <!-- 自定义数据 -->
-                <div v-show="activeTab === 'custom'" class="data-content">
-                    <div class="field-group">
-                        <h5>自定义规则</h5>
-                        <div class="custom-input">
-                            <label>字段名称:</label>
-                            <input type="text" v-model="customField.name" placeholder="请输入字段名">
-                        </div>
-                        <div class="custom-input">
-                            <label>数据类型:</label>
-                            <select v-model="customField.type">
-                                <option value="string">字符串</option>
-                                <option value="number">数字</option>
-                                <option value="boolean">布尔值</option>
-                                <option value="date">日期</option>
-                                <option value="array">数组</option>
-                            </select>
+                        <!-- 个人信息数据 -->
+                        <div v-show="activeTab === 'personal'" class="data-content">
+                            <div class="field-group">
+                                <h5>基本信息</h5>
+                                <div class="field-row">
+                                    <label><input type="checkbox" v-model="selectedFields.name"> 姓名</label>
+                                    <label><input type="checkbox" v-model="selectedFields.email"> 邮箱</label>
+                                    <label><input type="checkbox" v-model="selectedFields.phone"> 手机号</label>
+                                    <label><input type="checkbox" v-model="selectedFields.idCard"> 身份证号</label>
+                                </div>
+                                <div class="field-row">
+                                    <label><input type="checkbox" v-model="selectedFields.gender"> 性别</label>
+                                    <label><input type="checkbox" v-model="selectedFields.age"> 年龄</label>
+                                    <label><input type="checkbox" v-model="selectedFields.birthday"> 生日</label>
+                                    <label><input type="checkbox" v-model="selectedFields.address"> 地址</label>
+                                </div>
+                            </div>
                         </div>
-                        <div class="custom-input">
-                            <label>生成规则:</label>
-                            <input type="text" v-model="customField.rule" placeholder="如:长度10-20的随机字符串">
-                        </div>
-                        <button @click="addCustomField" class="btn btn-primary">添加字段</button>
-                    </div>
-                    
-                    <div v-if="customFields.length > 0" class="custom-fields-list">
-                        <h5>已添加字段</h5>
-                        <div v-for="(field, index) in customFields" :key="index" class="custom-field-item">
-                            <span>{{ field.name }} ({{ field.type }})</span>
-                            <button @click="removeCustomField(index)" class="btn-remove">删除</button>
+
+                        <!-- 商业数据 -->
+                        <div v-show="activeTab === 'business'" class="data-content">
+                            <div class="field-group">
+                                <h5>商业信息</h5>
+                                <div class="field-row">
+                                    <label><input type="checkbox" v-model="selectedFields.company"> 公司名称</label>
+                                    <label><input type="checkbox" v-model="selectedFields.department"> 部门</label>
+                                    <label><input type="checkbox" v-model="selectedFields.position"> 职位</label>
+                                    <label><input type="checkbox" v-model="selectedFields.salary"> 薪资</label>
+                                </div>
+                                <div class="field-row">
+                                    <label><input type="checkbox" v-model="selectedFields.bankCard"> 银行卡号</label>
+                                    <label><input type="checkbox" v-model="selectedFields.creditCard"> 信用卡号</label>
+                                    <label><input type="checkbox" v-model="selectedFields.price"> 价格</label>
+                                    <label><input type="checkbox" v-model="selectedFields.currency"> 货币</label>
+                                </div>
+                            </div>
                         </div>
-                    </div>
-                </div>
 
-                <!-- 生成配置 -->
-                <div class="generate-config">
-                    <div class="config-row">
-                        <label>生成数量:</label>
-                        <input type="number" v-model="generateCount" min="1" max="1000" value="10">
-                        
-                        <label style="margin-left: 20px;">输出格式:</label>
-                        <select v-model="outputFormat">
-                            <option value="json">JSON</option>
-                            <option value="csv">CSV</option>
-                            <option value="sql">SQL INSERT</option>
-                            <option value="xml">XML</option>
-                        </select>
-                    </div>
-                </div>
+                        <!-- 技术数据 -->
+                        <div v-show="activeTab === 'technical'" class="data-content">
+                            <div class="field-group">
+                                <h5>技术信息</h5>
+                                <div class="field-row">
+                                    <label><input type="checkbox" v-model="selectedFields.uuid"> UUID</label>
+                                    <label><input type="checkbox" v-model="selectedFields.ip"> IP地址</label>
+                                    <label><input type="checkbox" v-model="selectedFields.mac"> MAC地址</label>
+                                    <label><input type="checkbox" v-model="selectedFields.userAgent"> User Agent</label>
+                                </div>
+                                <div class="field-row">
+                                    <label><input type="checkbox" v-model="selectedFields.url"> URL</label>
+                                    <label><input type="checkbox" v-model="selectedFields.domain"> 域名</label>
+                                    <label><input type="checkbox" v-model="selectedFields.password"> 密码</label>
+                                    <label><input type="checkbox" v-model="selectedFields.token"> Token</label>
+                                </div>
+                                <div class="field-row">
+                                    <label><input type="checkbox" v-model="selectedFields.color"> 颜色值</label>
+                                    <label><input type="checkbox" v-model="selectedFields.timestamp"> 时间戳</label>
+                                    <label><input type="checkbox" v-model="selectedFields.filename"> 文件名</label>
+                                    <label><input type="checkbox" v-model="selectedFields.mimeType"> MIME类型</label>
+                                </div>
+                            </div>
+                        </div>
 
-                <!-- 操作按钮 -->
-                <div class="action-buttons">
-                    <button @click="generateData" class="btn btn-success">生成数据</button>
-                    <button @click="selectAll" class="btn btn-info">全选</button>
-                    <button @click="clearAll" class="btn btn-warning">清空</button>
-                    <button @click="copyResult" class="btn btn-primary" :disabled="!generatedData">复制结果</button>
-                    <button @click="downloadData" class="btn btn-secondary" :disabled="!generatedData">下载文件</button>
-                </div>
+                        <!-- 自定义数据 -->
+                        <div v-show="activeTab === 'custom'" class="data-content">
+                            <div class="field-group">
+                                <h5>自定义规则</h5>
+                                <div class="custom-input">
+                                    <label>字段名称:</label>
+                                    <input type="text" v-model="customField.name" placeholder="请输入字段名">
+                                </div>
+                                <div class="custom-input">
+                                    <label>数据类型:</label>
+                                    <select v-model="customField.type">
+                                        <option value="string">字符串</option>
+                                        <option value="number">数字</option>
+                                        <option value="boolean">布尔值</option>
+                                        <option value="date">日期</option>
+                                        <option value="array">数组</option>
+                                    </select>
+                                </div>
+                                <div class="custom-input">
+                                    <label>生成规则:</label>
+                                    <input type="text" v-model="customField.rule" placeholder="如:长度10-20的随机字符串">
+                                </div>
+                                <button @click="addCustomField" class="btn btn-primary">添加字段</button>
+                            </div>
+                            
+                            <div v-if="customFields.length > 0" class="custom-fields-list">
+                                <h5>已添加字段</h5>
+                                <div v-for="(field, index) in customFields" :key="index" class="custom-field-item">
+                                    <span>{{ field.name }} ({{ field.type }})</span>
+                                    <button @click="removeCustomField(index)" class="btn-remove">删除</button>
+                                </div>
+                            </div>
+                        </div>
 
-                <!-- 结果显示区域 -->
-                <div v-if="generatedData" class="result-section">
-                    <div class="result-header">
-                        <h4>生成结果 ({{ generateCount }} 条)</h4>
-                        <span class="data-size">数据大小: {{ dataSize }}</span>
-                    </div>
-                    <div class="result-content">
-                        <pre>{{ generatedData }}</pre>
+                        <!-- 生成配置 -->
+                        <div class="generate-config">
+                            <div class="config-row">
+                                <label>生成数量:</label>
+                                <input type="number" v-model="generateCount" min="1" max="1000" value="10">
+                            </div>
+                            <div class="config-row">
+                                <label>输出格式:</label>
+                                <select v-model="outputFormat">
+                                    <option value="json">JSON</option>
+                                    <option value="csv">CSV</option>
+                                    <option value="sql">SQL INSERT</option>
+                                    <option value="xml">XML</option>
+                                </select>
+                            </div>
+                        </div>
                     </div>
-                </div>
 
-                <!-- 预设模板 -->
-                <div class="template-section">
-                    <h4>快速模板</h4>
-                    <div class="template-buttons">
-                        <button @click="loadTemplate('user')" class="btn btn-template">用户信息</button>
-                        <button @click="loadTemplate('employee')" class="btn btn-template">员工信息</button>
-                        <button @click="loadTemplate('product')" class="btn btn-template">商品信息</button>
-                        <button @click="loadTemplate('order')" class="btn btn-template">订单信息</button>
-                        <button @click="loadTemplate('api')" class="btn btn-template">API测试数据</button>
+                    <!-- 右侧结果展示区 -->
+                    <div class="result-section">
+                        <div class="result-panel">
+                            <div class="result-header">
+                                <h4 v-if="generatedData">生成结果 ({{ generateCount }} 条)</h4>
+                                <h4 v-else>数据结果</h4>
+                                <div class="result-actions">
+                                    <span class="data-size" v-if="generatedData">{{ dataSize }}</span>
+                                    <span class="data-size" v-else>等待生成</span>
+                                    <button @click="copyResult" class="btn btn-primary btn-sm" :disabled="!generatedData">复制结果</button>
+                                    <button @click="downloadData" class="btn btn-secondary btn-sm" :disabled="!generatedData">下载文件</button>
+                                </div>
+                            </div>
+                            <div class="result-content">
+                                <div v-if="!generatedData" class="empty-result">
+                                    <div class="empty-icon">📊</div>
+                                    <div class="empty-text">
+                                        <h5>暂无生成结果</h5>
+                                        <p>请选择数据字段并点击"生成数据"按钮</p>
+                                    </div>
+                                </div>
+                                <pre v-else>{{ generatedData }}</pre>
+                            </div>
+                        </div>
                     </div>
                 </div>
             </div>

+ 6 - 1
apps/mock-data/index.js

@@ -463,7 +463,12 @@ new Vue({
                 this.activeTab = 'technical';
             }
             
-            this.showMessage(`已加载 ${template.name}`, 'success');
+            // 自动生成数据
+            this.$nextTick(() => {
+                this.generateData();
+            });
+            
+            this.showMessage(`已加载 ${template.name} 并生成数据`, 'success');
         },
         
 

+ 4 - 4
apps/options/index.js

@@ -89,10 +89,10 @@ new Vue({
                 isAd: false
             },
             {
-                toolKey: 'poster-maker',
-                icon: '🖼️',
-                title: '海报快速生成',
-                desc: '快速生成和识别二维码,支持自定义样式',
+                toolKey: 'mock-data',
+                icon: '🎲',
+                title: '数据Mock工具',
+                desc: '快速生成各种测试数据,支持快速模板一键生成',
                 tag: '推荐',
                 tagClass: 'recommend-tag',
                 isAd: false

+ 3 - 2
website/docs/index.md

@@ -29,6 +29,7 @@ FeHelper 是一款强大的浏览器开发者工具集,为Web开发者提供
 |---------|---------|
 | [JSON美化工具](?tool=json-format) | 页面自动检测并格式化、手动格式化、乱码解码、排序、BigInt、编辑、下载、皮肤定制等 |
 | [JSON比对工具](?tool=json-diff) | 支持两个JSON内容的自动键值比较,并高亮显示差异点,同时也能判断JSON是否合法 |
+| [Mock数据生成器](?tool=mock-data) | 快速生成各种测试数据,支持个人信息、商业数据、技术数据等多种类型,提供快速模板一键生成,支持JSON/CSV/SQL/XML格式输出 |
 | [代码美化工具](?tool=code-beautify) | 支持多语言的代码美化,包括Javascript、CSS、HTML、XML、SQL等格式 |
 | [代码压缩工具](?tool=code-compress) | Web开发用,提供简单的代码压缩功能,支持HTML、Javascript、CSS代码压缩 |
 | [简易Postman](?tool=postman) | 开发过程中的接口调试工具,支持GET/POST/HEAD请求方式,且支持JSON内容自动格式化 |
@@ -96,7 +97,7 @@ FeHelper提供了完整的插件市场和配置管理功能,让用户可以根
 
 #### 工具分类浏览
 - **全部分类**:查看所有可用工具的完整列表
-- **开发工具类**:JSON处理、代码美化、接口调试等核心开发工具
+- **开发工具类**:JSON处理、Mock数据生成、代码美化、接口调试等核心开发工具
 - **编解码转换类**:各种格式的数据转换和编解码工具
 - **图像处理类**:二维码、图片转换、截图等图像相关工具
 - **效率工具类**:AI助手、便签、Markdown等提升效率的工具
@@ -287,7 +288,7 @@ FeHelper提供了完整的插件市场和配置管理功能,让用户可以根
 #### 前端开发者配置
 **推荐安装工具**:
 - JSON美化工具、JSON比对工具
-- 代码美化工具、代码压缩工具
+- Mock数据生成器、代码美化工具、代码压缩工具
 - 简易Postman、Websocket工具
 - 时间戳转换、信息编码转换
 

+ 143 - 54
website/docs/mock-data.md

@@ -1,15 +1,38 @@
 # Mock数据生成器
 
-> 快速生成各种测试数据,支持个人信息、商业数据、技术数据等多种类型,可自定义字段和输出格式
+> 快速生成各种测试数据,支持个人信息、商业数据、技术数据等多种类型,可自定义字段和输出格式。采用现代化左右分栏布局,左侧配置操作,右侧实时预览结果。
 
 ## 功能特点
 
-- **多种数据类型**:支持个人信息、商业数据、技术数据等多个分类
-- **自定义字段**:支持添加自定义字段类型和生成规则
+- **现代化界面**:采用左右分栏布局设计,左侧为配置操作区,右侧为结果展示区
+- **一键快速模板**:提供5种预设模板,点击即可自动选择字段并生成数据
+- **多种数据类型**:支持个人信息、商业数据、技术数据、自定义数据等4大分类
+- **智能操作区**:快速模板和主要操作按钮置顶,提升操作效率
 - **多种输出格式**:支持JSON、CSV、SQL、XML等多种格式输出
-- **预设模板**:提供用户信息、员工信息、商品信息等常用模板
+- **实时结果预览**:右侧实时显示生成结果,支持一键复制和下载
 - **批量生成**:支持一次生成1-1000条数据
-- **中文数据**:专门优化了中文姓名、地址、公司等本土化数据
+- **中文数据优化**:专门优化了中文姓名、地址、公司等本土化数据
+- **响应式设计**:支持不同屏幕尺寸的自适应布局
+
+## 界面布局
+
+### 现代化顶部导航栏
+- **品牌标识**:FeHelper Logo + 工具名称
+- **工具市场**:一键访问更多实用工具
+- **打赏支持**:支持开发者继续优化工具
+
+### 左侧配置操作区(固定宽度500px)
+1. **快速模板区**:5个预设模板按钮,一键生成常用数据
+2. **主要操作区**:生成数据、全选、清空三个主要操作按钮
+3. **数据类型选择**:个人信息、商业数据、技术数据、自定义数据四个标签页
+4. **字段选择区**:根据选中标签页显示相应的可选字段
+5. **生成配置区**:设置生成数量和输出格式
+
+### 右侧结果展示区(自适应宽度)
+1. **结果标题栏**:显示生成结果统计、数据大小
+2. **操作按钮区**:复制结果、下载文件(无数据时自动禁用)
+3. **结果展示区**:代码高亮显示生成的数据,支持滚动查看
+4. **空状态提示**:无数据时显示友好的空状态界面
 
 ## 数据类型
 
@@ -47,77 +70,98 @@
 - **文件名**:随机文件名和扩展名
 - **MIME类型**:常见文件MIME类型
 
-## 使用方法
-
-### 1. 选择数据类型
-在顶部选择要生成的数据类型标签页:
-- **个人信息**:姓名、邮箱、电话等个人数据
-- **商业数据**:公司、职位、金融等商业数据
-- **技术数据**:UUID、IP、Token等技术数据
-- **自定义数据**:自己定义字段类型和规则
+### 自定义数据
+- **字符串类型**:自定义长度的随机字符串
+- **数字类型**:1-1000范围内的随机数字
+- **布尔类型**:随机true/false值
+- **日期类型**:随机日期时间
+- **数组类型**:包含1-5个随机字符串的数组
 
-### 2. 选择字段
-在每个标签页中勾选需要生成的字段。可以选择多个字段组合生成。
+## 使用方法
 
-### 3. 配置生成选项
-- **生成数量**:设置要生成的数据条数(1-1000)
-- **输出格式**:选择JSON、CSV、SQL或XML格式
+### 方法一:快速模板(推荐)
+1. **选择模板**:在左侧顶部点击任意快速模板按钮
+2. **自动生成**:系统自动选择字段、切换标签页并生成数据
+3. **查看结果**:右侧立即显示生成的数据结果
+4. **复制下载**:点击右侧按钮一键复制或下载数据
 
-### 4. 生成数据
-点击"生成数据"按钮,系统会根据选择的字段和配置生成相应的假数据。
+### 方法二:手动配置
+1. **选择数据类型**:点击数据类型标签页(个人信息/商业数据/技术数据/自定义数据)
+2. **选择字段**:勾选需要生成的字段复选框
+3. **配置参数**:设置生成数量(1-1000)和输出格式
+4. **生成数据**:点击"生成数据"按钮
+5. **查看结果**:在右侧查看生成的数据
+6. **操作结果**:使用复制或下载功能保存数据
 
-### 5. 结果操作
-生成的数据可以:
-- **复制到剪贴板**:一键复制到系统剪贴板
-- **下载文件**:保存为相应格式的文件
-- **预览结果**:在页面中直接查看生成的数据
+### 快捷操作
+- **全选**:快速选择当前标签页的所有字段
+- **清空**:清空所有选择和生成结果
+- **实时预览**:右侧实时显示数据大小和条数
 
-## 快速模板
+## 快速模板详解
 
-提供5个预设模板,可以快速生成常用数据
+系统提供5个精心设计的预设模板,点击即可自动生成
 
 ### 用户信息模板
-包含:姓名、邮箱、电话、性别、年龄、地址
+**字段组合**:姓名、邮箱、手机号、性别、年龄、地址
+**适用场景**:用户管理系统、会员信息、个人资料测试
 
 ### 员工信息模板  
-包含:姓名、邮箱、电话、公司、部门、职位、薪资
+**字段组合**:姓名、邮箱、手机号、公司、部门、职位、薪资
+**适用场景**:人力资源系统、员工管理、组织架构测试
 
 ### 商品信息模板
-包含:名称、价格、货币、UUID、时间戳
+**字段组合**:名称、价格、货币、UUID、时间戳
+**适用场景**:电商系统、商品管理、库存系统测试
 
 ### 订单信息模板
-包含:UUID、姓名、邮箱、电话、地址、价格、时间戳
+**字段组合**:UUID、姓名、邮箱、手机号、地址、价格、时间戳
+**适用场景**:订单管理系统、交易记录、物流系统测试
 
 ### API测试数据模板
-包含:UUID、Token、IP、User Agent、时间戳、布尔值
+**字段组合**:UUID、Token、IP地址、User Agent、时间戳、布尔值
+**适用场景**:接口测试、日志分析、系统集成测试
 
 ## 自定义字段
 
-支持添加自定义字段:
+支持添加完全自定义的字段:
+
+### 配置步骤
+1. **切换到自定义数据标签页**
+2. **输入字段名称**:定义字段的名称
+3. **选择数据类型**:字符串、数字、布尔值、日期、数组
+4. **设置生成规则**:可选,描述字段的生成规则
+5. **添加字段**:点击"添加字段"按钮
+6. **管理字段**:在已添加字段列表中查看和删除
 
-1. **字段名称**:输入字段的名称
-2. **数据类型**:选择字符串、数字、布尔值、日期或数组
-3. **生成规则**:描述字段的生成规则(可选)
-4. **添加字段**:将自定义字段加入生成列表
+### 支持的数据类型
+- **字符串**:5-20位随机字符串
+- **数字**:1-1000范围内的随机整数
+- **布尔值**:随机true/false
+- **日期**:随机日期时间字符串
+- **数组**:包含1-5个随机字符串的数组
 
 ## 输出格式
 
-### JSON格式
+### JSON格式(默认)
 ```json
 [
   {
     "name": "王伟",
-    "email": "[email protected]",
-    "phone": "13812345678"
+    "email": "[email protected]",
+    "phone": "13812345678",
+    "gender": "男",
+    "age": 28,
+    "address": "北京市朝阳区建国路123号"
   }
 ]
 ```
 
 ### CSV格式
 ```csv
-name,email,phone
-王伟,[email protected],13812345678
-李娜,[email protected],13987654321
+name,email,phone,gender,age,address
+王伟,[email protected],13812345678,男,28,北京市朝阳区建国路123号
+李娜,[email protected],13987654321,女,32,上海市浦东新区世纪大道456号
 ```
 
 ### SQL INSERT格式
@@ -125,10 +169,15 @@ name,email,phone
 CREATE TABLE fake_data (
   name VARCHAR(255),
   email VARCHAR(255),
-  phone VARCHAR(255)
+  phone VARCHAR(255),
+  gender VARCHAR(255),
+  age INT,
+  address VARCHAR(255)
 );
 
-INSERT INTO fake_data (name, email, phone) VALUES ('王伟', '[email protected]', '13812345678');
+INSERT INTO fake_data (name, email, phone, gender, age, address) VALUES 
+('王伟', '[email protected]', '13812345678', '男', 28, '北京市朝阳区建国路123号'),
+('李娜', '[email protected]', '13987654321', '女', 32, '上海市浦东新区世纪大道456号');
 ```
 
 ### XML格式
@@ -137,8 +186,11 @@ INSERT INTO fake_data (name, email, phone) VALUES ('王伟', '[email protected]',
 <data>
   <item id="1">
     <name>王伟</name>
-    <email>abc123@gmail.com</email>
+    <email>wangwei@example.com</email>
     <phone>13812345678</phone>
+    <gender>男</gender>
+    <age>28</age>
+    <address>北京市朝阳区建国路123号</address>
   </item>
 </data>
 ```
@@ -146,18 +198,45 @@ INSERT INTO fake_data (name, email, phone) VALUES ('王伟', '[email protected]',
 ## 使用场景
 
 ### 开发测试
-- **数据库填充**:为开发环境生成测试数据
-- **接口测试**:为API测试生成请求数据
-- **表单测试**:为前端表单填充测试数据
+- **数据库填充**:为开发环境快速生成大量测试数据
+- **接口测试**:为API测试生成符合格式的请求数据
+- **表单测试**:为前端表单填充各种类型的测试数据
+- **单元测试**:为自动化测试提供mock数据
 
 ### 演示数据
 - **产品演示**:为产品演示准备真实感的数据
 - **用户培训**:为培训环境准备安全的虚拟数据
 - **原型设计**:为设计原型提供数据支撑
+- **系统展示**:为系统展示生成美观的样例数据
 
 ### 压力测试
 - **性能测试**:生成大量数据进行系统压力测试
 - **并发测试**:模拟多用户环境进行并发测试
+- **容量测试**:测试系统在大数据量下的表现
+
+### 数据分析
+- **算法测试**:为数据分析算法提供测试数据集
+- **图表展示**:为数据可视化组件提供展示数据
+- **统计分析**:为统计功能提供样本数据
+
+## 界面特色
+
+### 响应式设计
+- **大屏设备**(>1024px):完整的左右分栏布局
+- **平板设备**(768px-1024px):上下布局,保持功能完整
+- **手机设备**(<768px):垂直布局,按钮和字段适配移动端
+
+### 用户体验优化
+- **空状态设计**:友好的空数据提示界面
+- **智能按钮状态**:无数据时自动禁用复制下载按钮
+- **实时数据统计**:动态显示生成条数和数据大小
+- **一键操作**:快速模板支持一键生成,无需多步操作
+- **视觉反馈**:按钮悬停效果、渐变背景、阴影效果
+
+### 色彩设计
+- **品牌色调**:紫蓝渐变主色调,体现专业感
+- **层次清晰**:通过色彩深浅区分功能区域
+- **暗色模式**:自动适配系统暗色模式偏好
 
 ## 注意事项
 
@@ -166,9 +245,13 @@ INSERT INTO fake_data (name, email, phone) VALUES ('王伟', '[email protected]',
 3. **格式规范**:生成的数据遵循常见格式规范,但不保证100%真实有效
 4. **数量限制**:单次最多生成1000条数据,避免浏览器性能问题
 5. **中文优化**:针对中文环境进行了优化,特别是姓名、地址等字段
+6. **浏览器兼容**:建议使用现代浏览器以获得最佳体验
 
 ## 常见问题
 
+**Q: 快速模板和手动配置有什么区别?**
+A: 快速模板一键生成常用数据组合,手动配置可以自由选择任意字段组合。快速模板更适合快速原型和常见场景,手动配置更灵活。
+
 **Q: 生成的身份证号是真实的吗?**
 A: 不是,生成的身份证号仅符合格式规范,为虚拟数据,不对应真实人员信息。
 
@@ -176,10 +259,16 @@ A: 不是,生成的身份证号仅符合格式规范,为虚拟数据,不
 A: 单次最多可生成1000条数据,如需更多数据可分批生成。
 
 **Q: 支持哪些输出格式?**
-A: 目前支持JSON、CSV、SQL INSERT和XML四种格式。
+A: 目前支持JSON、CSV、SQL INSERT和XML四种格式,满足不同系统的数据导入需求。
+
+**Q: 如何添加自定义字段?**
+A: 切换到"自定义数据"标签页,填写字段名称、选择数据类型,可选填写生成规则,然后点击"添加字段"。
+
+**Q: 右侧的复制和下载按钮为什么是灰色的?**
+A: 当没有生成数据时,这些按钮会自动禁用显示为灰色。生成数据后按钮会自动激活。
 
-**Q: 可以自定义数据生成规则吗?**
-A: 可以通过自定义字段功能添加自己的字段类型,支持字符串、数字、布尔值、日期和数组类型。
+**Q: 数据生成失败怎么办?**
+A: 请确保至少选择了一个字段或添加了自定义字段,然后重新点击"生成数据"按钮
 
-**Q: 生成的数据可以保存吗?**
-A: 可以,支持复制到剪贴板或下载为文件保存到本地。 
+**Q: 支持移动端使用吗?**
+A: 支持,界面采用响应式设计,在手机和平板上会自动调整为适合的布局