| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div class="app-container"> |
| | | <el-card header="åºç¡æ°æ®æ£æµ"> |
| | | <el-checkbox-group v-model="selectedModules"> |
| | | <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"> |
| | | å¼å§æ£æµ |
| | | </el-button> |
| | | </div> |
| | | </el-card> |
| | | |
| | | <el-card v-if="checkResult" header="æ£æµç»æ" style="margin-top: 16px"> |
| | | <el-alert |
| | | :title="`éè¿ ${checkResult.passedItems} / ${checkResult.totalItems} 项`" |
| | | :type="checkResult.passedItems === checkResult.totalItems ? 'success' : 'warning'" |
| | | :closable="false" |
| | | show-icon |
| | | /> |
| | | <el-table :data="checkResult.items" style="margin-top: 12px" border> |
| | | <el-table-column prop="module" label="模å" width="100" /> |
| | | <el-table-column prop="itemName" label="æ£æµé¡¹" width="160" /> |
| | | <el-table-column prop="minRequired" label="æä½è¦æ±" width="80" align="center" /> |
| | | <el-table-column prop="currentCount" label="å½åæ°é" width="80" align="center" /> |
| | | <el-table-column label="ç¶æ" width="80" align="center"> |
| | | <template #default="{ row }"> |
| | | <el-tag :type="row.passed ? 'success' : 'danger'"> |
| | | {{ row.passed ? "éè¿" : "æªéè¿" }} |
| | | </el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | <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, 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", "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) { |
| | | ElMessage.warning("请è³å°éæ©ä¸ä¸ªæ¨¡å"); |
| | | return; |
| | | } |
| | | checking.value = true; |
| | | try { |
| | | const res = await dataCheck(selectedModules.value); |
| | | checkResult.value = res.data; |
| | | } finally { |
| | | 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> |