2026-03-10 15:51:03 +08:00

165 lines
5.5 KiB
Plaintext

// This is your Prisma schema file,
// learn more about it in the docs: https://pris.ly/d/prisma-schema
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "mysql"
url = env("DATABASE_URL")
}
model Equipment {
id Int @id @default(autoincrement())
equipment_code String @unique @db.VarChar(50)
equipment_name String @db.VarChar(100)
equipment_model String? @db.VarChar(100)
equipment_type String @db.VarChar(50)
code_generation_mode String @default("auto") @db.VarChar(20)
status String @default("可用") @db.VarChar(20)
total_quantity Int @default(0)
remaining_quantity Int @default(0)
unit_price Decimal @default(0.00) @db.Decimal(10, 2)
total_value Decimal @default(0.00) @db.Decimal(12, 2)
borrowed_value Decimal @default(0.00) @db.Decimal(12, 2)
available_value Decimal @default(0.00) @db.Decimal(12, 2)
description String? @db.Text
purchase_date DateTime? @db.Date
supplier String? @db.VarChar(100)
storage_location_id Int?
created_at DateTime @default(now())
updated_at DateTime @updatedAt
borrow_records BorrowRecord[]
storageLocation StorageLocation? @relation(fields: [storage_location_id], references: [id])
@@index([equipment_code])
@@index([equipment_type])
@@index([status])
@@index([code_generation_mode])
@@index([unit_price])
@@index([storage_location_id])
@@map("equipment")
}
model BorrowRecord {
id Int @id @default(autoincrement())
equipment_id Int
equipment_code String @db.VarChar(50)
person_id Int
person_name String @db.VarChar(50)
person_nickname String @db.VarChar(50)
person_identifier String? @db.VarChar(50)
borrow_time DateTime @default(now())
expected_return_time DateTime?
is_long_term Boolean @default(false)
return_time DateTime?
status String @default("已借出") @db.VarChar(20)
return_condition String @default("正常") @db.VarChar(20)
notes String? @db.Text
created_at DateTime @default(now())
updated_at DateTime @updatedAt
equipment Equipment @relation(fields: [equipment_id], references: [id])
person Person @relation(fields: [person_id], references: [id])
@@index([equipment_id])
@@index([person_id])
@@index([status])
@@index([borrow_time])
@@map("borrow_record")
}
model User {
id Int @id @default(autoincrement())
username String @unique @db.VarChar(50)
password String @db.VarChar(255)
name String @db.VarChar(50)
email String? @db.VarChar(100)
phone String? @db.VarChar(20)
role String @default("user") @db.VarChar(20)
status String @default("active") @db.VarChar(20)
last_login_at DateTime? @db.DateTime
created_at DateTime @default(now())
updated_at DateTime @updatedAt
operation_logs OperationLog[]
site_configs SiteConfig[] @relation("SiteConfigUpdatedBy")
@@index([role])
@@index([status])
@@map("user")
}
model SiteConfig {
id Int @id @default(autoincrement())
site_name String @db.VarChar(100)
logo_url String? @db.VarChar(255)
favicon_url String? @db.VarChar(255)
theme_color String? @db.VarChar(20)
updated_by Int?
created_at DateTime @default(now())
updated_at DateTime @default(now())
updatedBy User? @relation("SiteConfigUpdatedBy", fields: [updated_by], references: [id])
@@map("site_config")
}
model Person {
id Int @id @default(autoincrement())
nickname String @db.VarChar(50)
real_name String @db.VarChar(50)
id_number String? @unique @db.VarChar(50)
department String? @db.VarChar(100)
position String? @db.VarChar(100)
phone String? @db.VarChar(20)
email String? @db.VarChar(100)
status String @default("active") @db.VarChar(20)
remarks String? @db.Text
created_at DateTime @default(now())
updated_at DateTime @updatedAt
borrow_records BorrowRecord[]
@@index([nickname])
@@index([real_name])
@@index([status])
@@map("person")
}
model StorageLocation {
id Int @id @default(autoincrement())
name String @db.VarChar(100)
code String? @db.VarChar(50)
status String @default("active") @db.VarChar(20)
description String? @db.Text
created_at DateTime @default(now())
updated_at DateTime @updatedAt
equipments Equipment[]
@@index([status])
@@map("storage_location")
}
model OperationLog {
id Int @id @default(autoincrement())
user_id Int?
username String? @db.VarChar(50)
operation_type String @db.VarChar(50)
equipment_id Int?
equipment_code String? @db.VarChar(50)
operation_details String? @db.Text
ip_address String? @db.VarChar(50)
created_at DateTime @default(now())
user User? @relation(fields: [user_id], references: [id])
@@index([user_id])
@@index([operation_type])
@@index([created_at])
@@map("operation_log")
}