165 lines
5.5 KiB
Plaintext
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")
|
|
}
|