独角鲸同步合作方公司数据项目
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

130 lines
6.8 KiB

10 months ago
from django.db import models
from django.contrib.auth.models import AbstractUser
class Menu(models.Model):
"""
菜单
"""
name = models.CharField(max_length=30, unique=True, verbose_name="菜单名")
route_name = models.CharField(max_length=30, null=True, blank=True, verbose_name="组件名称")
icon = models.CharField(max_length=50, null=True, blank=True, verbose_name="图标")
path = models.CharField(max_length=158, null=True, blank=True, verbose_name="链接地址")
is_frame = models.BooleanField(default=False, verbose_name="外部菜单")
is_show = models.BooleanField(default=True, verbose_name="显示标记")
sort = models.IntegerField(blank=True, null=True, verbose_name="排序标记")
component = models.CharField(max_length=200, null=True, blank=True, verbose_name="组件")
pid = models.ForeignKey("self", null=True, blank=True, on_delete=models.SET_NULL, verbose_name="父菜单")
label = models.IntegerField(default=1, verbose_name="是否前台菜单 # 1:是 2:不是")
def __str__(self):
return self.name
class Meta:
verbose_name = "菜单"
verbose_name_plural = verbose_name
ordering = ["id"]
class Permission(models.Model):
"""
权限
"""
name = models.CharField(max_length=30, unique=True, verbose_name="权限名")
method = models.CharField(max_length=50, null=True, blank=True, verbose_name="方法")
pid = models.ForeignKey("self", null=True, blank=True, on_delete=models.SET_NULL, verbose_name="父权限")
label = models.IntegerField(default=1, verbose_name="是否前台权限 # 1:是 2:不是")
def __str__(self):
return self.name
class Meta:
verbose_name = "权限"
verbose_name_plural = verbose_name
ordering = ["id"]
class Role(models.Model):
"""
角色
"""
name = models.CharField(max_length=32, verbose_name="角色")
permissions = models.ManyToManyField("Permission", blank=True, verbose_name="权限")
menus = models.ManyToManyField("Menu", blank=True, verbose_name="菜单")
desc = models.CharField(max_length=50, blank=True, null=True, verbose_name="描述")
label = models.IntegerField(default=1, verbose_name="是否前台角色 # 1:是 2:不是")
companyMid = models.CharField(null=True, blank=True, max_length=36, verbose_name="公司全局id") # 用于绑定公司
# class Meta:
# unique_together = ('name', 'companymid') # name companymid 两个字段共同形成唯一约束
class UserProfile(AbstractUser):
"""
用户
"""
name = models.CharField(max_length=20, null=True, blank=True, verbose_name="姓名")
MainId = models.CharField(max_length=36, null=True, blank=True, verbose_name="guid全局id")
mobile = models.CharField(max_length=50, null=False, blank=True, verbose_name="手机号码")
gender = models.CharField(max_length=10, null=True, blank=True, verbose_name="性别")
email = models.EmailField(max_length=50, null=True, blank=True, verbose_name="邮箱")
image = models.CharField(max_length=100, default="/image/default.png", verbose_name="头像")
area_code = models.CharField(max_length=1000, null=True, blank=True, verbose_name="地区代码") # 地区代码
area_name = models.CharField(max_length=15, null=True, blank=True, verbose_name="地区名") # 地区名
is_sub = models.IntegerField(default=2, verbose_name="是否子账号") # 1:是;2:否。
wx_phone_info = models.CharField(null=True, blank=True, max_length=500, verbose_name="微信手机信息")
wx_openid = models.CharField(null=True, blank=True, max_length=255, verbose_name="微信小程序唯一标识")
parent_id = models.IntegerField(null=True, blank=True, verbose_name="父账号id")
companyMid = models.CharField(null=True, blank=True, max_length=36, verbose_name="公司全局id") # 用于绑定公司
is_active = models.BooleanField(null=True, blank=True, default=True, verbose_name="用户是否可用") # 用户锁定与激活用户
label = models.IntegerField(default=1, verbose_name="是否前台用户 # 1:是 2:不是")
roles = models.ManyToManyField("Role", verbose_name="角色", blank=True)
company = models.ManyToManyField("Company", verbose_name="公司", blank=True)
class Meta:
verbose_name = "用户信息"
verbose_name_plural = verbose_name
ordering = ["id"]
def __str__(self):
return self.username
def get_companies(self):
return self.company.all()
# 重写方法,校验密码时,不区分大小写
def check_password(self, raw_password):
return super().check_password(raw_password.lower())
class Company(models.Model):
"""
公司
"""
name = models.CharField(max_length=100, verbose_name="企业名称", help_text="企业名称")
MainId = models.CharField(max_length=36, null=True, blank=True, verbose_name="guid全局id", help_text="guid全局id")
userMid = models.CharField(max_length=36, null=True, blank=True, verbose_name="企业所属人的全局id", help_text="企业所属人的全局id")
EUCC = models.CharField(max_length=50, null=True, blank=True, verbose_name="企业统一信用代码", help_text="企业统一信用代码")
employeesCount = models.IntegerField(null=True, blank=True, verbose_name="企业员工总数", help_text="企业员工总数")
hightechCode = models.CharField(max_length=36, blank=True, verbose_name="高企编码", help_text="高企编码")
hightechDate = models.DateField(null=True, blank=True, verbose_name="获取高企时间", help_text="获取高企时间")
AmStart = models.CharField(max_length=10, default='8:00', null=True, blank=True, verbose_name="早班起始时间", help_text="早班起始时间")
AmEnd = models.CharField(max_length=10, default='12:00', null=True, blank=True, verbose_name="早班结束时间", help_text="早班结束时间")
PmStart = models.CharField(max_length=10, default='14:00', null=True, blank=True, verbose_name="午班起始时间", help_text="午班起始时间")
PmEnd = models.CharField(max_length=10, default='18:00', null=True, blank=True, verbose_name="午班结束时间", help_text="午班结束时间")
tech = models.CharField(max_length=200, null=True, blank=True, verbose_name='技术领域id', help_text="技术领域id")
tolerance = models.IntegerField(default=900, verbose_name="打卡容错时间,单位s, 默认900s=15min", help_text="打卡容错时间,单位s, 默认900s=15min")
checkIn = models.IntegerField(default=0, verbose_name="打卡方案,0-原方案, 1-新方案(细颗粒度)", help_text="打卡方案,0-原方案, 1-新方案(细颗粒度)")
class Meta:
verbose_name = "公司信息"
verbose_name_plural = verbose_name
ordering = ["id"]
def __str__(self):
return self.name