72 lines
2.3 KiB
JavaScript
72 lines
2.3 KiB
JavaScript
|
|
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()
|