This commit is contained in:
Kyaru
2026-06-30 23:11:19 +08:00
parent ccb4c32614
commit 11cb335507
8 changed files with 295 additions and 92 deletions

54
db.js
View File

@@ -42,6 +42,7 @@ async function initDB() {
is_active TINYINT(1) NOT NULL DEFAULT 1 COMMENT '账号状态: 0-禁用, 1-启用',
department_id INT DEFAULT NULL COMMENT '部门ID (关联departments表)',
employee_id INT DEFAULT NULL COMMENT '员工ID (关联employees表)',
role_level TINYINT NOT NULL DEFAULT 4 COMMENT '角色级别: 1-总经理, 2-部门经理, 3-部门副经理, 4-一般专员',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (id),
@@ -176,6 +177,14 @@ async function initDB() {
// 列已删除则忽略
}
// users 表添加 role_level角色级别
try {
await pool.query(`ALTER TABLE users ADD COLUMN role_level TINYINT NOT NULL DEFAULT 4 COMMENT '角色级别: 1-总经理, 2-部门经理, 3-部门副经理, 4-一般专员' AFTER employee_id`)
console.log('[init] users 表已添加 role_level 字段')
} catch (e) {
// 字段已存在则忽略
}
console.log('[init] 数据表初始化完成')
// ============ 2.3 部门与权限相关表 ============
@@ -314,8 +323,7 @@ async function seedDepartmentsAndPermissions() {
const deptPermMap = {
admin: [
'user:manage',
'customer:read', 'contract:read', 'after_sale:read',
'product:read', 'supplier:read', 'employee:read',
'employee:read',
],
general_manager: [
'customer:read', 'contract:read', 'after_sale:read',
@@ -330,7 +338,6 @@ async function seedDepartmentsAndPermissions() {
],
operations_manager: [
'customer:read',
'contract:read',
'after_sale:read', 'after_sale:create', 'after_sale:update', 'after_sale:delete',
'employee:read',
],
@@ -348,7 +355,6 @@ async function seedDepartmentsAndPermissions() {
hr: [
'employee:read', 'employee:create', 'employee:update', 'employee:delete',
'user:manage',
'customer:read',
],
}
@@ -386,13 +392,13 @@ async function seedDefaultUsers() {
]
const seedUsers = [
{ username: 'zhangchao', deptName: 'general_manager' },
{ username: 'liming', deptName: 'franchise_manager' },
{ username: 'wangli', deptName: 'operations_manager' },
{ username: 'zhaoqiang', deptName: 'procurement_manager' },
{ username: 'chenfang', deptName: 'finance' },
{ username: 'admin', deptName: 'admin' },
{ username: 'yangfan', deptName: 'hr' },
{ username: 'zhangchao', deptName: 'general_manager', role_level: 1 },
{ username: 'liming', deptName: 'franchise_manager', role_level: 2 },
{ username: 'wangli', deptName: 'operations_manager', role_level: 2 },
{ username: 'zhaoqiang', deptName: 'procurement_manager',role_level: 2 },
{ username: 'chenfang', deptName: 'finance', role_level: 2 },
{ username: 'admin', deptName: 'admin', role_level: 2 },
{ username: 'yangfan', deptName: 'hr', role_level: 2 },
]
for (let i = 0; i < seedUsers.length; i++) {
@@ -413,9 +419,9 @@ async function seedDefaultUsers() {
// 再插入 users关联 employee 和 department
await pool.query(
`INSERT INTO users (username, password, is_active, department_id, employee_id)
VALUES (?, ?, 1, ?, ?)`,
[usr.username, hash, deptIdMap[usr.deptName], empId]
`INSERT INTO users (username, password, is_active, department_id, employee_id, role_level)
VALUES (?, ?, 1, ?, ?, ?)`,
[usr.username, hash, deptIdMap[usr.deptName], empId, usr.role_level]
)
console.log(`[init] 已创建用户 ${usr.username} (${emp.name} - ${emp.department})`)
}
@@ -452,14 +458,14 @@ async function seedBusinessData() {
const deptIdMap2 = Object.fromEntries(deptRows.map(d => [d.name, d.id]))
const extraUsers = [
{ empName: '刘洋', username: 'liuyang', deptName: 'franchise_manager' },
{ empName: '孙婷', username: 'sunting', deptName: 'franchise_manager' },
{ empName: '周杰', username: 'zhoujie', deptName: 'operations_manager' },
{ empName: '吴敏', username: 'wumin', deptName: 'operations_manager' },
{ empName: '郑伟', username: 'zhengwei', deptName: 'operations_manager' },
{ empName: '黄磊', username: 'huanglei', deptName: 'procurement_manager' },
{ empName: '马丽', username: 'mali', deptName: 'finance' },
{ empName: '林峰', username: 'linfeng', deptName: 'general_manager' },
{ empName: '刘洋', username: 'liuyang', deptName: 'franchise_manager', role_level: 4 },
{ empName: '孙婷', username: 'sunting', deptName: 'franchise_manager', role_level: 4 },
{ empName: '周杰', username: 'zhoujie', deptName: 'operations_manager', role_level: 4 },
{ empName: '吴敏', username: 'wumin', deptName: 'operations_manager', role_level: 4 },
{ empName: '郑伟', username: 'zhengwei', deptName: 'operations_manager', role_level: 4 },
{ empName: '黄磊', username: 'huanglei', deptName: 'procurement_manager',role_level: 4 },
{ empName: '马丽', username: 'mali', deptName: 'finance', role_level: 4 },
{ empName: '林峰', username: 'linfeng', deptName: 'general_manager', role_level: 2 },
]
const [newEmps] = await pool.query("SELECT id, name, department FROM employees WHERE name IN ('刘洋','孙婷','周杰','吴敏','郑伟','黄磊','马丽','林峰')")
@@ -471,8 +477,8 @@ async function seedBusinessData() {
const [userCheck] = await pool.query('SELECT id FROM users WHERE username = ?', [u.username])
if (userCheck.length > 0) continue
await pool.query(
'INSERT INTO users (username, password, is_active, department_id, employee_id) VALUES (?, ?, 1, ?, ?)',
[u.username, hash, deptIdMap2[u.deptName], emp.id]
'INSERT INTO users (username, password, is_active, department_id, employee_id, role_level) VALUES (?, ?, 1, ?, ?, ?)',
[u.username, hash, deptIdMap2[u.deptName], emp.id, u.role_level]
)
console.log(`[init] 已创建用户 ${u.username} (${u.empName} - ${emp.department})`)
}