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