dy-dashboard/init_db.py
2026-10-28 11:14:17 +08:00

124 lines
5.8 KiB
Python

"""
初始化仪表盘的内部表(用户管理、操作日志等)
运行方式: python3 init_db.py
"""
import pymysql
import config
from services.passwords import hash_password
def init():
conn = pymysql.connect(
unix_socket=config.DB_CONFIG["unix_socket"],
user="root",
database=config.DB_CONFIG["database"],
charset="utf8mb4"
)
cursor = conn.cursor()
# 系统用户表
cursor.execute("""
CREATE TABLE IF NOT EXISTS dashboard_users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL,
real_name VARCHAR(50) DEFAULT '',
role VARCHAR(20) DEFAULT 'viewer',
phone VARCHAR(20) DEFAULT '',
email VARCHAR(100) DEFAULT '',
department VARCHAR(50) DEFAULT '' COMMENT '部门',
avatar VARCHAR(255) DEFAULT '',
status TINYINT DEFAULT 1 COMMENT '1=启用 0=禁用',
must_change_password TINYINT DEFAULT 1 COMMENT '1=下次登录必须修改密码',
last_login DATETIME DEFAULT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
""")
# 操作日志表
cursor.execute("""
CREATE TABLE IF NOT EXISTS dashboard_logs (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
user_id INT DEFAULT NULL,
action VARCHAR(100) NOT NULL,
detail TEXT,
ip_address VARCHAR(50) DEFAULT '',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
""")
# 用户订单列宽配置表(同一账号跨设备同步)
cursor.execute("""
CREATE TABLE IF NOT EXISTS user_column_widths (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
page VARCHAR(50) NOT NULL COMMENT '页面标识',
field_name VARCHAR(100) NOT NULL COMMENT '稳定字段名',
width INT NOT NULL COMMENT '列宽(px)',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
UNIQUE KEY uk_user_page_field (user_id, page, field_name),
KEY idx_user_page (user_id, page)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
""")
# 新品管理表
cursor.execute("""
CREATE TABLE IF NOT EXISTS new_products (
id INT AUTO_INCREMENT PRIMARY KEY,
category1 VARCHAR(100) NOT NULL DEFAULT '' COMMENT '第一级分类',
category2 VARCHAR(100) NOT NULL DEFAULT '' COMMENT '第二级分类',
category3 VARCHAR(100) NOT NULL DEFAULT '' COMMENT '第三级分类',
product_type VARCHAR(50) NOT NULL DEFAULT '' COMMENT '类别:成品/赠品/现货',
brand VARCHAR(100) NOT NULL DEFAULT '' COMMENT '品牌',
product_code VARCHAR(100) NOT NULL DEFAULT '' COMMENT '产品编码',
product_name VARCHAR(200) NOT NULL DEFAULT '' COMMENT '产品名称',
barcode VARCHAR(100) NOT NULL DEFAULT '' COMMENT '条形码',
capacity VARCHAR(100) NOT NULL DEFAULT '' COMMENT '容量',
effect_img VARCHAR(500) NOT NULL DEFAULT '' COMMENT '产品效果图(内外包)',
remark VARCHAR(500) NOT NULL DEFAULT '' COMMENT '成品备注',
total_cost VARCHAR(100) NOT NULL DEFAULT '' COMMENT '产品总成本',
total_payment VARCHAR(100) NOT NULL DEFAULT '' COMMENT '产品总货款',
product_dev VARCHAR(100) NOT NULL DEFAULT '' COMMENT '产品开发',
package_dev VARCHAR(100) NOT NULL DEFAULT '' COMMENT '包材开发',
designer VARCHAR(100) NOT NULL DEFAULT '' COMMENT '设计师',
operator VARCHAR(100) NOT NULL DEFAULT '' COMMENT '负责运营',
upgrade_img VARCHAR(500) NOT NULL DEFAULT '' COMMENT '升级前的(内料升级前图片)',
confirm_img VARCHAR(500) NOT NULL DEFAULT '' COMMENT '确版内料图凭证',
quote_inner_img VARCHAR(500) NOT NULL DEFAULT '' COMMENT '内料报价单',
quote_pack_img VARCHAR(500) NOT NULL DEFAULT '' COMMENT '包材报价单',
created_at TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='新品管理表'
""")
# 成品基础信息附件(报价单、供应商选择原因等图片)
cursor.execute("""
CREATE TABLE IF NOT EXISTS product_attachments (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
product_id INT NOT NULL,
stored_name VARCHAR(80) NOT NULL,
original_name VARCHAR(255) NOT NULL DEFAULT '',
uploaded_by INT DEFAULT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
KEY idx_product_attachments_product (product_id),
UNIQUE KEY uk_product_attachments_stored_name (stored_name)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='成品基础信息附件'
""")
# 插入默认管理员
cursor.execute("SELECT COUNT(*) FROM dashboard_users WHERE username='admin'")
if cursor.fetchone()[0] == 0:
cursor.execute("""
INSERT INTO dashboard_users (username, password, real_name, role, phone, email, must_change_password)
VALUES (%s, %s, %s, %s, %s, %s, 1)
""", ('admin', hash_password('Admin123!@#'), '系统管理员', 'admin', '', 'admin@dy.com'))
conn.commit()
cursor.close()
conn.close()
print("✅ 数据库初始化完成")
print(" 默认账号: admin / Admin123!@#(首次登录必须修改)")
if __name__ == "__main__":
init()