262 lines
6.8 KiB
TypeScript
262 lines
6.8 KiB
TypeScript
import { PrismaClient } from '@prisma/client'
|
||
import { hashPassword } from './lib/auth'
|
||
|
||
const prisma = new PrismaClient()
|
||
|
||
async function main() {
|
||
// 创建管理员用户
|
||
const adminPassword = await hashPassword('admin123')
|
||
const admin = await prisma.user.upsert({
|
||
where: { email: 'admin@pcdiy.com' },
|
||
update: {},
|
||
create: {
|
||
email: 'admin@pcdiy.com',
|
||
username: 'admin',
|
||
password: adminPassword,
|
||
name: '系统管理员',
|
||
isAdmin: true,
|
||
},
|
||
})
|
||
|
||
// 创建配件类型
|
||
const componentTypes = [
|
||
{ name: 'CPU', description: '中央处理器' },
|
||
{ name: '内存', description: '内存条' },
|
||
{ name: '硬盘', description: '存储设备' },
|
||
{ name: '主板', description: '主板' },
|
||
{ name: '显卡', description: '显卡' },
|
||
{ name: '机箱', description: '机箱' },
|
||
]
|
||
|
||
for (const type of componentTypes) {
|
||
await prisma.componentType.upsert({
|
||
where: { name: type.name },
|
||
update: {},
|
||
create: type,
|
||
})
|
||
}
|
||
|
||
// 获取已创建的配件类型
|
||
const cpuType = await prisma.componentType.findUnique({ where: { name: 'CPU' } })
|
||
const memoryType = await prisma.componentType.findUnique({ where: { name: '内存' } })
|
||
const storageType = await prisma.componentType.findUnique({ where: { name: '硬盘' } })
|
||
const motherboardType = await prisma.componentType.findUnique({ where: { name: '主板' } })
|
||
const gpuType = await prisma.componentType.findUnique({ where: { name: '显卡' } })
|
||
const caseType = await prisma.componentType.findUnique({ where: { name: '机箱' } })
|
||
|
||
// 创建示例配件
|
||
const components = [
|
||
// CPU
|
||
{
|
||
name: 'Intel Core i5-13400F',
|
||
brand: 'Intel',
|
||
model: 'i5-13400F',
|
||
price: 1299,
|
||
description: '10核16线程,基础频率2.5GHz,最大睿频4.6GHz',
|
||
stock: 50,
|
||
componentTypeId: cpuType!.id,
|
||
specifications: JSON.stringify({
|
||
cores: 10,
|
||
threads: 16,
|
||
baseClock: '2.5GHz',
|
||
boostClock: '4.6GHz',
|
||
socket: 'LGA1700'
|
||
})
|
||
},
|
||
{
|
||
name: 'AMD Ryzen 5 7600X',
|
||
brand: 'AMD',
|
||
model: '7600X',
|
||
price: 1599,
|
||
description: '6核12线程,基础频率4.7GHz,最大睿频5.3GHz',
|
||
stock: 30,
|
||
componentTypeId: cpuType!.id,
|
||
specifications: JSON.stringify({
|
||
cores: 6,
|
||
threads: 12,
|
||
baseClock: '4.7GHz',
|
||
boostClock: '5.3GHz',
|
||
socket: 'AM5'
|
||
})
|
||
},
|
||
// 内存
|
||
{
|
||
name: 'Kingston FURY Beast DDR4 3200MHz 16GB',
|
||
brand: 'Kingston',
|
||
model: 'FURY Beast',
|
||
price: 299,
|
||
description: 'DDR4 3200MHz 16GB套装(8GBx2)',
|
||
stock: 100,
|
||
componentTypeId: memoryType!.id,
|
||
specifications: JSON.stringify({
|
||
type: 'DDR4',
|
||
speed: '3200MHz',
|
||
capacity: '16GB',
|
||
modules: 2
|
||
})
|
||
},
|
||
{
|
||
name: 'Corsair Vengeance LPX DDR4 3600MHz 32GB',
|
||
brand: 'Corsair',
|
||
model: 'Vengeance LPX',
|
||
price: 699,
|
||
description: 'DDR4 3600MHz 32GB套装(16GBx2)',
|
||
stock: 60,
|
||
componentTypeId: memoryType!.id,
|
||
specifications: JSON.stringify({
|
||
type: 'DDR4',
|
||
speed: '3600MHz',
|
||
capacity: '32GB',
|
||
modules: 2
|
||
})
|
||
},
|
||
// 硬盘
|
||
{
|
||
name: 'Samsung 980 PRO 1TB NVMe SSD',
|
||
brand: 'Samsung',
|
||
model: '980 PRO',
|
||
price: 599,
|
||
description: 'PCIe 4.0 NVMe M.2 SSD,读取速度7000MB/s',
|
||
stock: 80,
|
||
componentTypeId: storageType!.id,
|
||
specifications: JSON.stringify({
|
||
type: 'NVMe SSD',
|
||
capacity: '1TB',
|
||
interface: 'PCIe 4.0',
|
||
readSpeed: '7000MB/s'
|
||
})
|
||
},
|
||
{
|
||
name: 'Western Digital Blue 2TB SATA HDD',
|
||
brand: 'Western Digital',
|
||
model: 'Blue',
|
||
price: 399,
|
||
description: '2TB 7200RPM SATA 机械硬盘',
|
||
stock: 120,
|
||
componentTypeId: storageType!.id,
|
||
specifications: JSON.stringify({
|
||
type: 'HDD',
|
||
capacity: '2TB',
|
||
interface: 'SATA',
|
||
speed: '7200RPM'
|
||
})
|
||
},
|
||
// 主板
|
||
{
|
||
name: 'ASUS PRIME B660M-A',
|
||
brand: 'ASUS',
|
||
model: 'PRIME B660M-A',
|
||
price: 699,
|
||
description: 'Intel B660芯片组,支持LGA1700接口',
|
||
stock: 40,
|
||
componentTypeId: motherboardType!.id,
|
||
specifications: JSON.stringify({
|
||
chipset: 'B660',
|
||
socket: 'LGA1700',
|
||
formFactor: 'mATX',
|
||
memorySlots: 4
|
||
})
|
||
},
|
||
{
|
||
name: 'MSI MAG B550M MORTAR',
|
||
brand: 'MSI',
|
||
model: 'MAG B550M MORTAR',
|
||
price: 799,
|
||
description: 'AMD B550芯片组,支持AM4接口',
|
||
stock: 35,
|
||
componentTypeId: motherboardType!.id,
|
||
specifications: JSON.stringify({
|
||
chipset: 'B550',
|
||
socket: 'AM4',
|
||
formFactor: 'mATX',
|
||
memorySlots: 4
|
||
})
|
||
},
|
||
// 显卡
|
||
{
|
||
name: 'NVIDIA GeForce RTX 4060 Ti',
|
||
brand: 'NVIDIA',
|
||
model: 'RTX 4060 Ti',
|
||
price: 3299,
|
||
description: '16GB GDDR6显存,支持光追和DLSS 3',
|
||
stock: 25,
|
||
componentTypeId: gpuType!.id,
|
||
specifications: JSON.stringify({
|
||
gpu: 'RTX 4060 Ti',
|
||
memory: '16GB GDDR6',
|
||
memoryBus: '128-bit',
|
||
baseClock: '2310MHz'
|
||
})
|
||
},
|
||
{
|
||
name: 'AMD Radeon RX 7600 XT',
|
||
brand: 'AMD',
|
||
model: 'RX 7600 XT',
|
||
price: 2799,
|
||
description: '16GB GDDR6显存,RDNA 3架构',
|
||
stock: 20,
|
||
componentTypeId: gpuType!.id,
|
||
specifications: JSON.stringify({
|
||
gpu: 'RX 7600 XT',
|
||
memory: '16GB GDDR6',
|
||
memoryBus: '128-bit',
|
||
baseClock: '2300MHz'
|
||
})
|
||
},
|
||
// 机箱
|
||
{
|
||
name: 'Fractal Design Core 1000',
|
||
brand: 'Fractal Design',
|
||
model: 'Core 1000',
|
||
price: 299,
|
||
description: '紧凑型mATX机箱,静音设计',
|
||
stock: 70,
|
||
componentTypeId: caseType!.id,
|
||
specifications: JSON.stringify({
|
||
formFactor: 'mATX',
|
||
dimensions: '390 x 175 x 350mm',
|
||
material: '钢制',
|
||
fans: '1x120mm'
|
||
})
|
||
},
|
||
{
|
||
name: 'NZXT H510',
|
||
brand: 'NZXT',
|
||
model: 'H510',
|
||
price: 599,
|
||
description: '中塔ATX机箱,钢化玻璃侧板',
|
||
stock: 50,
|
||
componentTypeId: caseType!.id,
|
||
specifications: JSON.stringify({
|
||
formFactor: 'ATX',
|
||
dimensions: '435 x 210 x 460mm',
|
||
material: '钢制+钢化玻璃',
|
||
fans: '2x120mm'
|
||
})
|
||
},
|
||
]
|
||
|
||
for (const component of components) {
|
||
await prisma.component.upsert({
|
||
where: {
|
||
id: 'temp-id-' + component.name.replace(/\s+/g, '-').toLowerCase()
|
||
},
|
||
update: {},
|
||
create: component,
|
||
})
|
||
}
|
||
|
||
console.log('数据初始化完成!')
|
||
console.log('管理员账号:admin@pcdiy.com')
|
||
console.log('管理员密码:admin123')
|
||
}
|
||
|
||
main()
|
||
.catch((e) => {
|
||
console.error(e)
|
||
process.exit(1)
|
||
})
|
||
.finally(async () => {
|
||
await prisma.$disconnect()
|
||
})
|