Files

72 lines
2.3 KiB
JavaScript
Raw Permalink Normal View History

2026-06-03 14:15:55 +08:00
const crypto = require('crypto')
const readline = require('readline')
const { query } = require('../config/database')
require('dotenv').config()
const DEFAULT_PASSWORD = process.env.DEFAULT_PASSWORD || '123456'
const DEFAULT_PHONE = process.env.ADMIN_PHONE || '13800000000'
const DEFAULT_NAME = process.env.ADMIN_NAME || '系统管理员'
function md5(str) {
return crypto.createHash('md5').update(str).digest('hex')
}
function ask(question) {
const rl = readline.createInterface({ input: process.stdin, output: process.stdout })
return new Promise(resolve => rl.question(question, ans => { rl.close(); resolve(ans) }))
}
async function run() {
try {
const phoneArg = process.argv[2]
const passwordArg = process.argv[3]
let phone = phoneArg
let password = passwordArg
if (!phone) {
phone = (await ask(`管理员手机号 [${DEFAULT_PHONE}]: `)) || DEFAULT_PHONE
}
if (!password) {
password = (await ask(`管理员密码 [${DEFAULT_PASSWORD}]: `)) || DEFAULT_PASSWORD
}
if (!/^1\d{10}$/.test(phone)) {
console.error('手机号格式错误')
process.exit(1)
}
if (password.length < 8) {
console.error('密码至少 8 位')
process.exit(1)
}
const existing = await query('SELECT id, role FROM users WHERE phone = ?', [phone])
if (existing.length > 0) {
if (existing[0].role === 2) {
console.log(`该手机号已是管理员 (id=${existing[0].id})`)
process.exit(0)
}
await query('UPDATE users SET role = 2, password = ? WHERE id = ?', [md5(password), existing[0].id])
console.log(`已将用户 ${phone} 提升为管理员,密码已重置`)
process.exit(0)
}
const result = await query(
'INSERT INTO users (phone, password, name, avatar, points, role, status) VALUES (?, ?, ?, ?, ?, ?, ?)',
[phone, md5(password), DEFAULT_NAME, '', 0, 2, 1]
)
console.log(`\n✅ 管理员创建成功`)
console.log(` id : ${result.insertId}`)
console.log(` phone : ${phone}`)
console.log(` name : ${DEFAULT_NAME}`)
console.log(` role : 2 (管理员)`)
console.log(` password: ${password} (首次登录后请尽快修改)\n`)
process.exit(0)
} catch (error) {
console.error('创建管理员失败:', error)
process.exit(1)
}
}
run()