From 3838266e5b352349ed0ddfc7d1e01ea634c3d4eb Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期三, 17 六月 2026 15:16:21 +0800
Subject: [PATCH] ai自动生成数据

---
 src/views/mock/dataCheck/index.vue |  182 ++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 179 insertions(+), 3 deletions(-)

diff --git a/src/views/mock/dataCheck/index.vue b/src/views/mock/dataCheck/index.vue
index f16727b..5782e7d 100644
--- a/src/views/mock/dataCheck/index.vue
+++ b/src/views/mock/dataCheck/index.vue
@@ -5,6 +5,7 @@
         <el-checkbox label="sales">閿�鍞ā鍧�</el-checkbox>
         <el-checkbox label="purchase">閲囪喘妯″潡</el-checkbox>
         <el-checkbox label="quality">璐ㄩ噺妯″潡</el-checkbox>
+        <el-checkbox label="production">鐢熶骇妯″潡</el-checkbox>
       </el-checkbox-group>
       <div style="margin-top: 16px">
         <el-button type="primary" @click="handleCheck" :loading="checking">
@@ -35,17 +36,144 @@
         <el-table-column prop="message" label="鎻愮ず" min-width="200" />
       </el-table>
     </el-card>
+
+    <!-- AI 鏁版嵁鐢熸垚 -->
+    <el-card header="AI 鏁版嵁鐢熸垚" style="margin-top: 16px">
+      <el-form :model="generateForm" label-width="100px">
+        <el-form-item label="閫夋嫨妯″潡">
+          <el-checkbox-group v-model="generateForm.modules">
+            <el-checkbox label="sales">閿�鍞�</el-checkbox>
+            <el-checkbox label="purchase">閲囪喘</el-checkbox>
+            <el-checkbox label="quality">璐ㄩ噺</el-checkbox>
+            <el-checkbox label="production">鐢熶骇</el-checkbox>
+            <el-checkbox label="stock">搴撳瓨</el-checkbox>
+          </el-checkbox-group>
+        </el-form-item>
+
+        <el-form-item label="琛屼笟">
+          <el-select
+            v-model="generateForm.industries"
+            multiple
+            filterable
+            allow-create
+            placeholder="杈撳叆鎴栭�夋嫨琛屼笟"
+          >
+            <el-option label="鏈烘鍒堕��" value="鏈烘鍒堕��" />
+            <el-option label="椋熷搧鍔犲伐" value="椋熷搧鍔犲伐" />
+            <el-option label="鐢靛瓙瑁呴厤" value="鐢靛瓙瑁呴厤" />
+            <el-option label="姹借溅闆堕儴浠�" value="姹借溅闆堕儴浠�" />
+            <el-option label="鍖荤枟鍣ㄦ" value="鍖荤枟鍣ㄦ" />
+            <el-option label="鍖栧伐鏉愭枡" value="鍖栧伐鏉愭枡" />
+            <el-option label="绾虹粐鏈嶈" value="绾虹粐鏈嶈" />
+            <el-option label="瀹跺叿鍒堕��" value="瀹跺叿鍒堕��" />
+          </el-select>
+        </el-form-item>
+
+        <el-row :gutter="16">
+          <el-col :span="12">
+            <el-form-item label="鐢熸垚鏉℃暟">
+              <el-slider
+                v-model="generateForm.countRange"
+                range
+                :min="1"
+                :max="50"
+                :marks="{ 1: '1', 10: '10', 20: '20', 50: '50' }"
+              />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="鏃堕棿鑼冨洿">
+              <el-date-picker
+                v-model="generateForm.dateRange"
+                type="daterange"
+                range-separator="鑷�"
+                start-placeholder="寮�濮嬫棩鏈�"
+                end-placeholder="缁撴潫鏃ユ湡"
+                value-format="YYYY-MM-DD"
+                unlink-panels
+              />
+            </el-form-item>
+          </el-col>
+        </el-row>
+
+        <el-form-item label="琛ュ厖淇℃伅">
+          <el-input
+            v-model="generateForm.additionalInfo"
+            type="textarea"
+            :rows="2"
+            placeholder="濡傦細浜у搧浠ラ噾灞為浂閮ㄤ欢涓轰富锛屽鎴烽泦涓湪鍗庝笢鍦板尯"
+          />
+        </el-form-item>
+
+        <el-form-item>
+          <el-button type="primary" @click="handleGenerate" :loading="generating">
+            寮�濮嬬敓鎴�
+          </el-button>
+          <el-button @click="handleCheckFirst" :loading="checking">
+            鍏堟娴嬪啀鐢熸垚
+          </el-button>
+        </el-form-item>
+      </el-form>
+    </el-card>
+
+    <!-- 鐢熸垚缁撴灉 -->
+    <el-card v-if="generateResult" header="鐢熸垚缁撴灉" style="margin-top: 16px">
+      <el-alert
+        :title="`鍏辩敓鎴� ${generateResult.totalGenerated} 鏉℃暟鎹甡"
+        type="success"
+        :closable="false"
+        show-icon
+      />
+      <el-table :data="generateResult.moduleSummaries" style="margin-top: 12px" border>
+        <el-table-column prop="module" label="妯″潡" width="100" />
+        <el-table-column prop="entityName" label="瀹炰綋鍚嶇О" width="160" />
+        <el-table-column prop="generatedCount" label="鐢熸垚鏉℃暟" width="80" align="center" />
+        <el-table-column prop="successCount" label="鎴愬姛" width="80" align="center">
+          <template #default="{ row }">
+            <el-tag type="success">{{ row.successCount }}</el-tag>
+          </template>
+        </el-table-column>
+        <el-table-column prop="failCount" label="澶辫触" width="80" align="center">
+          <template #default="{ row }">
+            <el-tag v-if="row.failCount > 0" type="danger">{{ row.failCount }}</el-tag>
+            <span v-else>0</span>
+          </template>
+        </el-table-column>
+      </el-table>
+      <div v-if="generateResult.errors && generateResult.errors.length > 0" style="margin-top: 12px">
+        <el-alert
+          v-for="(err, i) in generateResult.errors"
+          :key="i"
+          :title="err"
+          type="error"
+          :closable="false"
+          style="margin-bottom: 4px"
+        />
+      </div>
+    </el-card>
   </div>
 </template>
 
 <script setup>
-import { ref } from "vue";
+import { ref, reactive } from "vue";
 import { ElMessage } from "element-plus";
 import { dataCheck } from "@/api/mock/dataCheck.js";
+import { mockGenerate } from "@/api/mock/generate.js";
 
-const selectedModules = ref(["sales", "purchase", "quality"]);
+const selectedModules = ref(["sales", "purchase", "quality", "production"]);
 const checking = ref(false);
 const checkResult = ref(null);
+
+const generateForm = reactive({
+  modules: [],
+  industries: [],
+  countRange: [3, 10],
+  dateRange: [],
+  additionalInfo: "",
+});
+
+const generating = ref(false);
+const generateResult = ref(null);
 
 const handleCheck = async () => {
   if (selectedModules.value.length === 0) {
@@ -60,6 +188,54 @@
     checking.value = false;
   }
 };
+
+// 鐩存帴鐢熸垚锛堝唴閮ㄨ嚜鍔ㄦ娴嬶級
+const handleGenerate = async () => {
+  if (generateForm.modules.length === 0) {
+    ElMessage.warning("璇疯嚦灏戦�夋嫨涓�涓ā鍧�");
+    return;
+  }
+  generating.value = true;
+  try {
+    const res = await mockGenerate({
+      modules: generateForm.modules,
+      industries: generateForm.industries,
+      countMin: generateForm.countRange[0],
+      countMax: generateForm.countRange[1],
+      dateStart: generateForm.dateRange[0] || null,
+      dateEnd: generateForm.dateRange[1] || null,
+      additionalInfo: generateForm.additionalInfo,
+    });
+    generateResult.value = res.data;
+    ElMessage.success(`鎴愬姛鐢熸垚 ${res.data.totalGenerated} 鏉℃暟鎹甡);
+  } catch (err) {
+    // code 500 鏃跺搷搴旀嫤鎴櫒浼氬脊閿欒鎻愮ず锛屾澶勪笉鍐嶉噸澶嶆彁绀�
+    // 鑻ラ渶瑕佸睍绀烘娴嬬粨鏋滐紝闇�瑕佸悗绔湪闈�200鏃朵篃杩斿洖鏁版嵁锛屾澶勬殏涓嶅鐞�
+  } finally {
+    generating.value = false;
+  }
+};
+
+// 鍏堟娴嬪啀鐢熸垚
+const handleCheckFirst = async () => {
+  if (generateForm.modules.length === 0) {
+    ElMessage.warning("璇疯嚦灏戦�夋嫨涓�涓ā鍧�");
+    return;
+  }
+  checking.value = true;
+  try {
+    const res = await dataCheck(generateForm.modules);
+    const result = res.data;
+    if (result.passedItems === result.totalItems) {
+      await handleGenerate();
+    } else {
+      checkResult.value = result;
+      ElMessage.warning("璇峰厛琛ラ綈鍩虹鏁版嵁鍚庡啀鐢熸垚");
+    }
+  } finally {
+    checking.value = false;
+  }
+};
 </script>
 
-<style scoped></style>
+<style scoped></style>
\ No newline at end of file

--
Gitblit v1.9.3