| 方法 | 路径 | 说明 |
|---|---|---|
| POST | /mock/generate | AI 生成模拟数据(含前置基础数据检测) |
请求参数:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| modules | List<String> | 是 | 要生成数据的模块:sales(销售)、purchase(采购)、quality(质量)、production(生产)、stock(库存) |
| industries | List<String> | 是 | 行业,如:["机械制造", "食品加工", "电子装配"] |
| countMin | int | 否 | 每个实体生成条数最小值,默认 3 |
| countMax | int | 否 | 每个实体生成条数最大值,默认 10 |
| dateStart | String | 否 | 时间范围开始(yyyy-MM-dd) |
| dateEnd | String | 否 | 时间范围结束(yyyy-MM-dd) |
| additionalInfo | String | 否 | 其他补充描述,如"产品以金属零部件为主" |
请求体示例:json { "modules": ["sales", "purchase", "quality"], "industries": ["机械制造", "电子装配"], "countMin": 3, "countMax": 8, "dateStart": "2026-01-01", "dateEnd": "2026-06-01", "additionalInfo": "产品以金属零部件和电子元器件为主" }
响应(成功):json { "code": 200, "msg": "操作成功", "data": { "status": "SUCCESS", "totalGenerated": 24, "moduleSummaries": [ { "module": "sales", "entityName": "客户", "generatedCount": 5, "successCount": 5, "failCount": 0 }, { "module": "sales", "entityName": "销售台账", "generatedCount": 5, "successCount": 5, "failCount": 0 }, { "module": "purchase", "entityName": "供应商", "generatedCount": 4, "successCount": 4, "failCount": 0 }, { "module": "purchase", "entityName": "采购台账", "generatedCount": 4, "successCount": 4, "failCount": 0 }, { "module": "quality", "entityName": "检测标准", "generatedCount": 3, "successCount": 3, "failCount": 0 }, { "module": "quality", "entityName": "指标绑定", "generatedCount": 3, "successCount": 3, "failCount": 0 } ], "errors": [], "checkResult": null } }
响应(基础数据不足,前置检测未通过):json { "code": 500, "msg": "基础数据不足,请先补充后再生成", "data": { "status": "CHECK_FAILED", "checkResult": { "totalItems": 6, "passedItems": 3, "items": [ { "module": "common", "itemName": "产品数据", "passed": true, "message": "通过" }, { "module": "sales", "itemName": "客户数据", "passed": false, "message": "缺少客户数据,请先..." } ] } } }
POST /mock/generatePOST /mock/dataCheck 检测基础数据是否就绪<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"
/>
</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>
data() {
return {
generateForm: {
modules: [],
industries: [],
countRange: [3, 10],
dateRange: [],
additionalInfo: '',
},
generating: false,
generateResult: null,
}
}
methods: {
// 直接生成(内部自动检测)
async handleGenerate() {
if (this.generateForm.modules.length === 0) {
this.$message.warning('请至少选择一个模块')
return
}
this.generating = true
try {
const res = await request.post('/mock/generate', {
modules: this.generateForm.modules,
industries: this.generateForm.industries,
countMin: this.generateForm.countRange[0],
countMax: this.generateForm.countRange[1],
dateStart: this.generateForm.dateRange[0] || null,
dateEnd: this.generateForm.dateRange[1] || null,
additionalInfo: this.generateForm.additionalInfo,
})
if (res.code === 200) {
this.generateResult = res.data
this.$message.success(`成功生成 ${res.data.totalGenerated} 条数据`)
} else {
// 基础数据不足
this.generateResult = res.data
this.checkResult = res.data.checkResult
this.$message.warning(res.msg)
}
} finally {
this.generating = false
}
},
// 先检测再生成
async handleCheckFirst() {
await this.handleCheck()
if (this.checkResult && this.checkResult.passedItems === this.checkResult.totalItems) {
await this.handleGenerate()
} else {
this.$message.warning('请先补齐基础数据后再生成')
}
},
}
POST /mock/generate 内部会自动调用数据检测,不需要手动分两步走