/* eslint-disable @typescript-eslint/no-require-imports */ /** * 创建演示数据脚本 * 用于快速生成测试产品和装配步骤 */ const { PrismaClient } = require('@prisma/client') const prisma = new PrismaClient() async function createDemoData() { console.log('🚀 开始创建演示数据...') try { // 清理现有数据(可选) console.log('🧹 清理现有数据...') await prisma.shareLink.deleteMany() await prisma.assemblyStep.deleteMany() await prisma.panel.deleteMany() await prisma.product.deleteMany() // 创建示例产品 console.log('📦 创建示例产品...') const product = await prisma.product.create({ data: { name: '简约办公椅', sku: 'CHAIR-001', category: '办公家具', modelUrl: 'https://threejs.org/examples/models/gltf/DamagedHelmet/glTF/DamagedHelmet.gltf', thumbnailUrl: 'https://threejs.org/examples/screenshots/misc_controls_orbit.jpg' } }) console.log(`✅ 产品创建成功: ${product.name} (ID: ${product.id})`) // 创建装配步骤 console.log('🔧 创建装配步骤...') const steps = [ { order: 1, title: '第一步:准备椅腿', description: '取出四个椅腿,检查配件是否齐全', partIds: ['leg1', 'leg2', 'leg3', 'leg4'], transform: { position: { x: 0, y: 0, z: 0 }, rotation: { x: 0, y: 0, z: 0 }, scale: { x: 1, y: 1, z: 1 } }, duration: 2000, easing: 'power2.inOut' }, { order: 2, title: '第二步:安装椅腿', description: '将椅腿固定到座椅底部,确保螺丝拧紧', partIds: ['seat', 'leg1', 'leg2', 'leg3', 'leg4'], transform: { position: { x: 0, y: -0.5, z: 0 }, rotation: { x: 0, y: 0, z: 0 }, scale: { x: 1, y: 1, z: 1 } }, duration: 3000, easing: 'power2.inOut' }, { order: 3, title: '第三步:安装靠背', description: '将靠背与座椅连接,调整到合适角度', partIds: ['backrest', 'seat'], transform: { position: { x: 0, y: 0.3, z: -0.2 }, rotation: { x: -0.1, y: 0, z: 0 }, scale: { x: 1, y: 1, z: 1 } }, duration: 2500, easing: 'power2.inOut' }, { order: 4, title: '第四步:最终检查', description: '检查所有连接点,确保椅子稳固', partIds: ['complete'], transform: { position: { x: 0, y: 0, z: 0 }, rotation: { x: 0, y: Math.PI * 2, z: 0 }, scale: { x: 1, y: 1, z: 1 } }, duration: 4000, easing: 'power2.inOut' } ] for (const stepData of steps) { const step = await prisma.assemblyStep.create({ data: { ...stepData, productId: product.id } }) console.log(`✅ 步骤 ${step.order}: ${step.title}`) } // 创建板件信息 console.log('🪵 创建板件信息...') const panels = [ { code: 'A01', name: '座椅面板', gltfNodeName: 'seat', length: 45.0, width: 40.0, thickness: 3.0 }, { code: 'A02', name: '靠背面板', gltfNodeName: 'backrest', length: 40.0, width: 50.0, thickness: 2.5 }, { code: 'B01', name: '椅腿(前左)', gltfNodeName: 'leg1', length: 5.0, width: 5.0, thickness: 45.0 }, { code: 'B02', name: '椅腿(前右)', gltfNodeName: 'leg2', length: 5.0, width: 5.0, thickness: 45.0 }, { code: 'B03', name: '椅腿(后左)', gltfNodeName: 'leg3', length: 5.0, width: 5.0, thickness: 45.0 }, { code: 'B04', name: '椅腿(后右)', gltfNodeName: 'leg4', length: 5.0, width: 5.0, thickness: 45.0 } ] for (const panelData of panels) { const panel = await prisma.panel.create({ data: { ...panelData, productId: product.id } }) console.log(`✅ 板件: ${panel.code} - ${panel.name}`) } // 创建分享链接 console.log('🔗 创建分享链接...') const shareLink = await prisma.shareLink.create({ data: { productId: product.id, token: 'demo123', expiresAt: new Date(Date.now() + 30 * 24 * 60 * 60 * 1000) // 30天后过期 } }) console.log(`✅ 分享链接创建成功: /share/${shareLink.token}`) // 创建管理员用户 console.log('👤 创建管理员用户...') const admin = await prisma.user.create({ data: { email: 'admin@furniture3d.com', name: '系统管理员', password: 'admin123', // 注意:生产环境需要加密 role: 'admin' } }) console.log(`✅ 管理员用户创建成功: ${admin.email}`) console.log('\n🎉 演示数据创建完成!') console.log('\n📋 快速访问链接:') console.log(` 主页: http://localhost:3000`) console.log(` 演示分享: http://localhost:3000/share/demo123`) console.log(` 产品管理: http://localhost:3000/products`) console.log(` 数据库管理: http://localhost:5555`) console.log(` 健康检查: http://localhost:3000/api/health`) console.log('\n📊 创建的数据:') console.log(` 产品: 1个 (${product.name})`) console.log(` 装配步骤: ${steps.length}个`) console.log(` 板件: ${panels.length}个`) console.log(` 分享链接: 1个`) console.log(` 用户: 1个`) } catch (error) { console.error('❌ 创建演示数据失败:', error) throw error } finally { await prisma.$disconnect() } } // 运行脚本 if (require.main === module) { createDemoData() .then(() => { console.log('\n✨ 脚本执行完成,可以开始测试系统了!') process.exit(0) }) .catch((error) => { console.error('脚本执行失败:', error) process.exit(1) }) } module.exports = { createDemoData }