diff --git a/common/model.py b/common/model.py index 827adf7..5cec05e 100644 --- a/common/model.py +++ b/common/model.py @@ -1,6 +1,10 @@ import datetime from entrance.extensions import db +from sqlalchemy.orm import relationship +from sqlalchemy import Table +from sqlalchemy import ForeignKey +from sqlalchemy.orm import backref class BaseModel(db.Model): @@ -33,6 +37,10 @@ class CurdModel(BaseModel): Column = db.Column +Table = Table +relationship = relationship +ForeignKey = ForeignKey +backref = backref TypeDecorator = db.TypeDecorator INT = db.INT @@ -76,4 +84,4 @@ PickleType = db.PickleType Interval = db.Interval Enum = db.Enum ARRAY = db.ARRAY -JSON = db.JSON \ No newline at end of file +JSON = db.JSON diff --git a/modules/sys/models/__init__.py b/modules/sys/models/__init__.py new file mode 100644 index 0000000..2d3fd14 --- /dev/null +++ b/modules/sys/models/__init__.py @@ -0,0 +1,9 @@ +from .admin_dept import Dept +from .admin_dict import DictType, DictData +from .admin_log import AdminLog +from .admin_photo import Photo +from .admin_power import Power +from .admin_role import Role +from .admin_role_power import role_power +from .admin_user import User +from .admin_user_role import user_role diff --git a/modules/sys/models/admin_dept.py b/modules/sys/models/admin_dept.py new file mode 100644 index 0000000..09007cb --- /dev/null +++ b/modules/sys/models/admin_dept.py @@ -0,0 +1,19 @@ +import datetime + +from common.model import BaseModel, Column, Integer, String, Text, DateTime + + +class Dept(BaseModel): + __tablename__ = 'admin_dept' + id = Column(Integer, primary_key=True, comment="部门ID") + parent_id = Column(Integer, comment="父级编号") + dept_name = Column(String(50), comment="部门名称") + sort = Column(Integer, comment="排序") + leader = Column(String(50), comment="负责人") + phone = Column(String(20), comment="联系方式") + email = Column(String(50), comment="邮箱") + status = Column(Integer, comment='状态(1开启,0关闭)') + remark = Column(Text, comment="备注") + address = Column(String(255), comment="详细地址") + create_at = Column(DateTime, default=datetime.datetime.now, comment='创建时间') + update_at = Column(DateTime, default=datetime.datetime.now, onupdate=datetime.datetime.now, comment='创建时间') \ No newline at end of file diff --git a/modules/sys/models/admin_dict.py b/modules/sys/models/admin_dict.py new file mode 100644 index 0000000..5b38af1 --- /dev/null +++ b/modules/sys/models/admin_dict.py @@ -0,0 +1,27 @@ +import datetime + +from common.model import BaseModel, Column, Integer, String, DateTime + + +class DictType(BaseModel): + __tablename__ = 'admin_dict_type' + id = Column(Integer, primary_key=True) + type_name = Column(String(255), comment='字典类型名称') + type_code = Column(String(255), comment='字典类型标识') + description = Column(String(255), comment='字典类型描述') + enable = Column(Integer, comment='是否开启') + create_time = Column(DateTime, default=datetime.datetime.now, comment='创建时间') + update_time = Column(DateTime, default=datetime.datetime.now, onupdate=datetime.datetime.now, comment='更新时间') + + +class DictData(BaseModel): + __tablename__ = 'admin_dict_data' + id = Column(Integer, primary_key=True) + data_label = Column(String(255), comment='字典类型名称') + data_value = Column(String(255), comment='字典类型标识') + type_code = Column(String(255), comment='字典类型描述') + is_default = Column(Integer, comment='是否默认') + enable = Column(Integer, comment='是否开启') + remark = Column(String(255), comment='备注') + create_time = Column(DateTime, default=datetime.datetime.now, comment='创建时间') + update_time = Column(DateTime, default=datetime.datetime.now, onupdate=datetime.datetime.now, comment='更新时间') \ No newline at end of file diff --git a/modules/sys/models/admin_log.py b/modules/sys/models/admin_log.py new file mode 100644 index 0000000..264a7d2 --- /dev/null +++ b/modules/sys/models/admin_log.py @@ -0,0 +1,16 @@ +import datetime + +from common.model import BaseModel, Column, Integer, String, Text, DateTime + + +class AdminLog(BaseModel): + __tablename__ = 'admin_admin_log' + id = Column(Integer, primary_key=True) + method = Column(String(10)) + uid = Column(Integer) + url = Column(String(255)) + desc = Column(Text) + ip = Column(String(255)) + success = Column(Integer) + user_agent = Column(Text) + create_time = Column(DateTime, default=datetime.datetime.now) \ No newline at end of file diff --git a/modules/sys/models/admin_photo.py b/modules/sys/models/admin_photo.py new file mode 100644 index 0000000..a8c9ba9 --- /dev/null +++ b/modules/sys/models/admin_photo.py @@ -0,0 +1,13 @@ +import datetime + +from common.model import BaseModel, Integer, Column, String, CHAR, DateTime + + +class Photo(BaseModel): + __tablename__ = 'admin_photo' + id = Column(Integer, primary_key=True) + name = Column(String(255), nullable=False) + href = Column(String(255)) + mime = Column(CHAR(50), nullable=False) + size = Column(CHAR(30), nullable=False) + create_time = Column(DateTime, default=datetime.datetime.now) \ No newline at end of file diff --git a/modules/sys/models/admin_power.py b/modules/sys/models/admin_power.py new file mode 100644 index 0000000..d0c0009 --- /dev/null +++ b/modules/sys/models/admin_power.py @@ -0,0 +1,19 @@ +import datetime + +from common.model import BaseModel, Column, Integer, String, DateTime + + +class Power(BaseModel): + __tablename__ = 'admin_power' + id = Column(Integer, primary_key=True, comment='权限编号') + name = Column(String(255), comment='权限名称') + type = Column(String(1), comment='权限类型') + code = Column(String(30), comment='权限标识') + url = Column(String(255), comment='权限路径') + open_type = Column(String(10), comment='打开方式') + parent_id = Column(Integer, comment='父类编号') + icon = Column(String(128), comment='图标') + sort = Column(Integer, comment='排序') + create_time = Column(DateTime, default=datetime.datetime.now, comment='创建时间') + update_time = Column(DateTime, default=datetime.datetime.now, onupdate=datetime.datetime.now, comment='更新时间') + enable = Column(Integer, comment='是否开启') diff --git a/modules/sys/models/admin_role.py b/modules/sys/models/admin_role.py new file mode 100644 index 0000000..efc4d29 --- /dev/null +++ b/modules/sys/models/admin_role.py @@ -0,0 +1,16 @@ +import datetime +from common.model import BaseModel, Column, String, Integer, DateTime,relationship + + +class Role(BaseModel): + __tablename__ = 'admin_role' + id = Column(Integer, primary_key=True, comment='角色ID') + name = Column(String(255), comment='角色名称') + code = Column(String(255), comment='角色标识') + enable = Column(Integer, comment='是否启用') + remark = Column(String(255), comment='备注') + details = Column(String(255), comment='详情') + sort = Column(Integer, comment='排序') + create_time = Column(DateTime, default=datetime.datetime.now, comment='创建时间') + update_time = Column(DateTime, default=datetime.datetime.now, onupdate=datetime.datetime.now, comment='更新时间') + power = relationship('Power', secondary="admin_role_power", backref=backref('role')) diff --git a/modules/sys/models/admin_role_power.py b/modules/sys/models/admin_role_power.py new file mode 100644 index 0000000..8d49bc7 --- /dev/null +++ b/modules/sys/models/admin_role_power.py @@ -0,0 +1,8 @@ +from common.model import Column, Table, Integer, ForeignKey + +role_power = Table( + "admin_role_power", + Column("id", Integer, primary_key=True, autoincrement=True, comment='标识'), + Column("power_id", Integer, ForeignKey("admin_power.id"), comment='用户编号'), + Column("role_id", Integer, ForeignKey("admin_role.id"), comment='角色编号'), +) diff --git a/modules/sys/models/admin_user.py b/modules/sys/models/admin_user.py new file mode 100644 index 0000000..4ad8761 --- /dev/null +++ b/modules/sys/models/admin_user.py @@ -0,0 +1,26 @@ +import datetime +from flask_login import UserMixin +from werkzeug.security import generate_password_hash, check_password_hash + +from common.model import BaseModel, Column, Integer, String, DateTime, relationship + + +class User(BaseModel, UserMixin): + __tablename__ = 'admin_user' + id = Column(Integer, primary_key=True, autoincrement=True, comment='用户ID') + username = Column(String(20), comment='用户名') + realname = Column(String(20), comment='真实名字') + avatar = Column(String(255), comment='头像', default="/static/admin/admin/images/avatar.jpg") + remark = Column(String(255), comment='备注') + password_hash = Column(String(128), comment='哈希密码') + enable = Column(Integer, default=0, comment='启用') + dept_id = Column(Integer, comment='部门id') + create_at = Column(DateTime, default=datetime.datetime.now, comment='创建时间') + update_at = Column(DateTime, default=datetime.datetime.now, onupdate=datetime.datetime.now, comment='创建时间') + role = relationship('Role', secondary="admin_user_role", backref=backref('user'), lazy='dynamic') + + def set_password(self, password): + self.password_hash = generate_password_hash(password) + + def validate_password(self, password): + return check_password_hash(self.password_hash, password) diff --git a/modules/sys/models/admin_user_role.py b/modules/sys/models/admin_user_role.py new file mode 100644 index 0000000..90fff9c --- /dev/null +++ b/modules/sys/models/admin_user_role.py @@ -0,0 +1,8 @@ +from common.model import Table, Column, Integer, ForeignKey + +user_role = Table( + "admin_user_role", + Column("id", Integer, primary_key=True, autoincrement=True, comment='标识'), + Column("user_id", Integer, ForeignKey("admin_user.id"), comment='用户编号'), + Column("role_id", Integer, ForeignKey("admin_role.id"), comment='角色编号'), +) diff --git a/modules/sys/models/user.py b/modules/sys/models/user.py index 4d4caf4..cbf7239 100644 --- a/modules/sys/models/user.py +++ b/modules/sys/models/user.py @@ -1,20 +1,20 @@ -from common.model import BaseModel, Column, String, Integer -from pydantic import BaseModel as PModel +from common.BaseModel import BaseBaseModel, Column, String, Integer +from pydantic import BaseBaseModel as PBaseModel -class User(BaseModel): +class User(BaseBaseModel): __tablename__ = 'admin_user' id = Column(Integer, primary_key=True, autoincrement=True, comment='用户ID') username = Column(String(20), comment='用户名') -class Test(BaseModel): +class Test(BaseBaseModel): __tablename__ = 'admin_test' id = Column(Integer, primary_key=True, autoincrement=True, comment='ID') name = Column(String(20), comment='名') -class Userschema(PModel): +class Userschema(PBaseModel): id: int username: str diff --git a/require/min.txt b/require/min.txt index 17664ac..2958f6f 100644 --- a/require/min.txt +++ b/require/min.txt @@ -2,4 +2,7 @@ Flask==2.0.2 flask-restx==0.5.1 pymysql==1.0.2 -Flask-Migrate==3.1.0 \ No newline at end of file +Flask-Migrate==3.1.0 +flask-marshmallow==0.14.0 +marshmallow-sqlalchemy==0.27.0 +Flask-Login==0.5.0 \ No newline at end of file