models.py 49 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120
  1. import django
  2. from django.core.exceptions import ValidationError
  3. from django.db import models
  4. from django.utils import timezone
  5. from datetime import timedelta,datetime
  6. from django.utils.translation import gettext_lazy as _
  7. from django.db.models import Q
  8. # Create your models here.
  9. DefaultStatus = [
  10. (5, "使用中"),
  11. (6, "已停用"),
  12. (4, "已删除"),
  13. ]
  14. UseStatus = [
  15. (5, "已用中"),
  16. (6, "未使用"),
  17. ]
  18. ParamsType = [
  19. (1, "变量"),
  20. (2, "常量"),
  21. ]
  22. ParamsValueType = [
  23. (1, "输入框"),
  24. (2, "下拉选择"),
  25. (3, "小数"),
  26. (4, "百分比"),
  27. (5, "分数")
  28. ]
  29. YESOrNO = [
  30. (0, "否"),
  31. (1, "是"),
  32. ]
  33. def eight_hours_from_now():
  34. return timezone.now() + timedelta(hours=8)
  35. # 管理员
  36. class Admin(models.Model):
  37. id = models.AutoField(primary_key=True)
  38. username = models.CharField(max_length=60, verbose_name="登录用户名", unique=True)
  39. password = models.CharField(max_length=255, verbose_name="登录密码")
  40. mobile = models.CharField(max_length=20, verbose_name="手机号码")
  41. email = models.CharField(max_length=60, verbose_name="邮件地址",blank=True,null=True)
  42. real_name = models.CharField(max_length=255, verbose_name="真实姓名", blank=True,null=True)
  43. token = models.CharField(max_length=120, verbose_name="登录授权码", default="")
  44. role_id = models.IntegerField(verbose_name='所属角色', default=0)
  45. create_time = models.DateTimeField(verbose_name="创建日期", default=eight_hours_from_now)
  46. last_login_time = models.DateTimeField(verbose_name="最后登录时间", default=eight_hours_from_now)
  47. status = models.SmallIntegerField(choices=DefaultStatus, verbose_name="状态")
  48. header = models.CharField(max_length=255, verbose_name="头像", blank=True,null=True)
  49. code = models.CharField(max_length=255, verbose_name="工号", blank=True,null=True)
  50. job = models.CharField(max_length=255, verbose_name="职位", blank=True,null=True)
  51. contact = models.CharField(max_length=255, verbose_name="联系方式", blank=True,null=True)
  52. verification_code = models.CharField(max_length=255, verbose_name="验证码", blank=True,null=True)
  53. class Meta:
  54. db_table = 'dc_admin'
  55. verbose_name = "管理员信息"
  56. verbose_name_plural = "管理员信息"
  57. def __int__(self):
  58. return self.id
  59. # 角色
  60. class AdminRole(models.Model):
  61. id = models.AutoField(primary_key=True)
  62. name = models.CharField(max_length=60, verbose_name="角色名称")
  63. intro = models.CharField(max_length=255, verbose_name="角色介绍",blank=True,null=True)
  64. is_admin = models.SmallIntegerField(verbose_name="超管标识", default=2)
  65. create_time = models.DateTimeField(verbose_name="创建日期", default=eight_hours_from_now)
  66. status = models.SmallIntegerField(choices=DefaultStatus, verbose_name="状态")
  67. class Meta:
  68. db_table = 'dc_admin_role'
  69. verbose_name = "管理员角色"
  70. verbose_name_plural = "管理员角色信息"
  71. def clean(self):
  72. print("开始进行校验")
  73. super().clean()
  74. # 检查是否存在同名且状态不为4的记录
  75. if AdminRole.objects.filter(name=self.name).exclude(status=4).exclude(pk=self.pk).exists():
  76. print("校验返回")
  77. raise ValidationError({'name': _("已存在同名,请修改后重试。")})
  78. def save(self, *args, **kwargs):
  79. self.full_clean()
  80. super().save(*args, **kwargs)
  81. def __str__(self):
  82. return self.name
  83. # 客户
  84. class Customer(models.Model):
  85. id = models.AutoField(primary_key=True)
  86. code = models.CharField(max_length=60, verbose_name="客户编码", unique=True)
  87. name = models.CharField(max_length=255, verbose_name="客户名称")
  88. en_name = models.CharField(max_length=255, verbose_name="英文名称")
  89. mobile = models.CharField(max_length=255, verbose_name="手机号码")
  90. contact = models.CharField(max_length=60, verbose_name="联系人")
  91. address = models.CharField(max_length=255, verbose_name="联系地址")
  92. other = models.CharField(max_length=255, verbose_name="其它信息")
  93. create_time = models.DateTimeField(verbose_name="创建日期", default=eight_hours_from_now)
  94. status = models.SmallIntegerField(choices=DefaultStatus, verbose_name="状态")
  95. class Meta:
  96. db_table = 'dc_customer'
  97. verbose_name = "客户信息"
  98. verbose_name_plural = "客户信息"
  99. def clean(self):
  100. super().clean()
  101. # 检查是否存在同名且状态不为4的记录
  102. if Customer.objects.filter(name=self.name).exclude(status=4).exclude(pk=self.pk).exists():
  103. raise ValidationError({'name': _("已存在同名,请修改后重试。")})
  104. def save(self, *args, **kwargs):
  105. self.full_clean()
  106. super().save(*args, **kwargs)
  107. def __str__(self):
  108. return self.name
  109. # 项目分类
  110. class ProjectCategory(models.Model):
  111. id = models.AutoField(primary_key=True)
  112. code = models.CharField(max_length=60, verbose_name="客户编码")
  113. name = models.CharField(max_length=255, verbose_name="客户名称")
  114. create_time = models.DateTimeField(verbose_name="创建日期", default=eight_hours_from_now)
  115. status = models.SmallIntegerField(choices=DefaultStatus, verbose_name="状态")
  116. class Meta:
  117. db_table = 'dc_project_category'
  118. verbose_name = "项目分类"
  119. verbose_name_plural = "项目分类"
  120. def clean(self):
  121. super().clean()
  122. # 检查是否存在同名且状态不为4的记录
  123. if ProjectCategory.objects.filter(name=self.name).exclude(status=4).exclude(pk=self.pk).exists():
  124. raise ValidationError({'name': _("已存在同名,请修改后重试。")})
  125. def save(self, *args, **kwargs):
  126. self.full_clean()
  127. super().save(*args, **kwargs)
  128. def __str__(self):
  129. return self.name
  130. # 项目信息
  131. class Project(models.Model):
  132. id = models.AutoField(primary_key=True)
  133. name = models.CharField(max_length=255, verbose_name="客户名称")
  134. intro = models.TextField(verbose_name="客户编码")
  135. customer_id = models.IntegerField(verbose_name="客户id")
  136. category_id = models.IntegerField(verbose_name="所属分类id")
  137. create_time = models.DateTimeField(verbose_name="创建日期", default=eight_hours_from_now)
  138. status = models.SmallIntegerField(choices=DefaultStatus, verbose_name="状态")
  139. class Meta:
  140. db_table = 'dc_project'
  141. verbose_name = "项目信息"
  142. verbose_name_plural = "项目信息"
  143. def clean(self):
  144. super().clean()
  145. # 检查是否存在同名且状态不为4的记录
  146. if Project.objects.filter(name=self.name).exclude(status=4).exclude(pk=self.pk).exists():
  147. raise ValidationError({'name': _("已存在同名,请修改后重试。")})
  148. def save(self, *args, **kwargs):
  149. self.full_clean()
  150. super().save(*args, **kwargs)
  151. def __str__(self):
  152. return self.name
  153. # 项目相关文档
  154. class ProjectDocument(models.Model):
  155. id = models.AutoField(primary_key=True)
  156. project_id = models.IntegerField(verbose_name="项目id")
  157. doc_id = models.IntegerField(verbose_name="文档id")
  158. create_time = models.DateTimeField(verbose_name="创建日期", default=eight_hours_from_now)
  159. status = models.SmallIntegerField(choices=DefaultStatus, verbose_name="状态")
  160. class Meta:
  161. db_table = 'dc_project_document'
  162. verbose_name = "项目相关文档"
  163. verbose_name_plural = "项目相关文档"
  164. def __int__(self):
  165. return self.id
  166. # 文档
  167. class Document(models.Model):
  168. id = models.AutoField(primary_key=True)
  169. title = models.CharField(max_length=255, verbose_name="文档标题")
  170. data = models.TextField(verbose_name="文档内容")
  171. user_id = models.IntegerField(verbose_name="用户id", default=0)
  172. create_time = models.DateTimeField(verbose_name="创建日期", default=eight_hours_from_now)
  173. update_time = models.DateTimeField(verbose_name="更新时间", default=eight_hours_from_now)
  174. status = models.SmallIntegerField(choices=DefaultStatus, verbose_name="状态")
  175. category_id = models.IntegerField(verbose_name="所属文档分类", default=0, blank=True,null=True)
  176. is_template = models.SmallIntegerField(choices=YESOrNO, verbose_name="是否为模板 0否 1是",default=1)
  177. class Meta:
  178. db_table = 'dc_document'
  179. verbose_name = "文档"
  180. verbose_name_plural = "文档"
  181. def __str__(self):
  182. return self.title
  183. # 文档
  184. class SourceData(models.Model):
  185. id = models.AutoField(primary_key=True)
  186. code = models.CharField(max_length=60, unique=True, verbose_name="数据代码")
  187. name = models.TextField(verbose_name="数据名称")
  188. file_name = models.TextField(verbose_name="文件名称", default="",blank=True, null=True)
  189. source_data = models.TextField(verbose_name="文件内容", default="")
  190. create_time = models.DateTimeField(verbose_name="创建日期", default=django.utils.timezone.now)
  191. status = models.SmallIntegerField(choices=DefaultStatus, verbose_name="状态")
  192. category_id = models.IntegerField(verbose_name="所属文档分类", default=0)
  193. class Meta:
  194. db_table = 'dc_source_data'
  195. verbose_name = "原始数据"
  196. verbose_name_plural = "原始数据"
  197. def clean(self):
  198. super().clean()
  199. # 检查是否存在同名且状态不为4的记录
  200. if SourceData.objects.filter(name=self.name).exclude(status=4).exclude(pk=self.pk).exists():
  201. raise ValidationError({'name': _("已存在同名,请修改后重试。")})
  202. def save(self, *args, **kwargs):
  203. self.full_clean()
  204. super().save(*args, **kwargs)
  205. def __str__(self):
  206. return self.name
  207. class SourceCategory(models.Model):
  208. name = models.CharField(max_length=100, verbose_name="分类名称")
  209. status = models.CharField(max_length=20, choices=[
  210. ('active', '启用'),
  211. ('inactive', '禁用')
  212. ], default='active', verbose_name="分类状态")
  213. created_at = models.DateTimeField(default=eight_hours_from_now, verbose_name="创建时间")
  214. class Meta:
  215. db_table = 'dc_source_data_category'
  216. verbose_name = "原始数据分类"
  217. verbose_name_plural = "原始数据分类"
  218. def clean(self):
  219. super().clean()
  220. # 检查是否存在同名且状态不为4的记录
  221. if SourceCategory.objects.filter(name=self.name).exclude(status=4).exclude(pk=self.pk).exists():
  222. raise ValidationError({'name': _("已存在同名,请修改后重试。")})
  223. def save(self, *args, **kwargs):
  224. self.full_clean()
  225. super().save(*args, **kwargs)
  226. def __str__(self):
  227. return self.name
  228. # 文档分类
  229. class DocumentCategory(models.Model):
  230. id = models.AutoField(primary_key=True)
  231. name = models.CharField(max_length=255, verbose_name="文档分类名称")
  232. intro = models.TextField(verbose_name="文档分类介绍")
  233. create_time = models.DateTimeField(verbose_name="创建日期", default=eight_hours_from_now)
  234. status = models.SmallIntegerField(choices=DefaultStatus, verbose_name="状态")
  235. class Meta:
  236. db_table = 'dc_document_category'
  237. verbose_name = "文档分类"
  238. verbose_name_plural = "文档分类"
  239. def clean(self):
  240. super().clean()
  241. # 检查是否存在同名且状态不为4的记录
  242. if DocumentCategory.objects.filter(name=self.name).exclude(status=4).exclude(pk=self.pk).exists():
  243. raise ValidationError({'name': _("已存在同名,请修改后重试。")})
  244. def save(self, *args, **kwargs):
  245. self.full_clean()
  246. super().save(*args, **kwargs)
  247. def __str__(self):
  248. return self.name
  249. # 品牌信息
  250. class Brand(models.Model):
  251. id = models.AutoField(primary_key=True)
  252. name = models.CharField(max_length=255, verbose_name="品牌名称")
  253. intro = models.TextField(verbose_name="品牌介绍")
  254. create_time = models.DateTimeField(verbose_name="创建日期", default=eight_hours_from_now)
  255. status = models.SmallIntegerField(choices=DefaultStatus, verbose_name="状态")
  256. class Meta:
  257. db_table = 'dc_brand'
  258. verbose_name = "品牌信息"
  259. verbose_name_plural = "品牌信息"
  260. def clean(self):
  261. super().clean()
  262. # 检查是否存在同名且状态不为4的记录
  263. if Brand.objects.filter(name=self.name).exclude(status=4).exclude(pk=self.pk).exists():
  264. raise ValidationError({'name': _("已存在同名,请修改后重试。")})
  265. def save(self, *args, **kwargs):
  266. self.full_clean()
  267. super().save(*args, **kwargs)
  268. def __str__(self):
  269. return self.name
  270. # 供应商
  271. class Supplier(models.Model):
  272. id = models.AutoField(primary_key=True)
  273. code = models.CharField(max_length=255, verbose_name="供应商编码", unique=True)
  274. name = models.CharField(max_length=255, verbose_name="供应商名称")
  275. intro = models.TextField(verbose_name="供应商介绍")
  276. create_time = models.DateTimeField(verbose_name="创建日期", default=eight_hours_from_now)
  277. status = models.SmallIntegerField(choices=DefaultStatus, verbose_name="状态")
  278. class Meta:
  279. db_table = 'dc_supplier'
  280. verbose_name = "供应商信息"
  281. verbose_name_plural = "供应商信息"
  282. def clean(self):
  283. super().clean()
  284. # 检查是否存在同名且状态不为4的记录
  285. if Supplier.objects.filter(name=self.name).exclude(status=4).exclude(pk=self.pk).exists():
  286. raise ValidationError({'name': _("已存在同名,请修改后重试。")})
  287. def save(self, *args, **kwargs):
  288. self.full_clean()
  289. super().save(*args, **kwargs)
  290. def __str__(self):
  291. return self.name
  292. # 模板分类
  293. class TemplateCategory(models.Model):
  294. id = models.AutoField(primary_key=True)
  295. name = models.CharField(max_length=255, verbose_name="文档分类名称")
  296. intro = models.TextField(verbose_name="文档分类介绍",blank=True,null=True)
  297. create_time = models.DateTimeField(verbose_name="创建日期", default=eight_hours_from_now)
  298. status = models.SmallIntegerField(choices=DefaultStatus, verbose_name="状态")
  299. parent_id = models.CharField(max_length=100,default="0", verbose_name="父类id")
  300. class Meta:
  301. db_table = 'dc_template_category'
  302. verbose_name = "模板分类"
  303. verbose_name_plural = "模板分类"
  304. def clean(self):
  305. super().clean()
  306. # 检查是否存在同名、状态不为4、parent_id不为0的记录
  307. if TemplateCategory.objects.filter(
  308. Q(name=self.name),
  309. Q(parent_id="0"), # 确保 parent_id 不等于 "0"
  310. ~Q(status=4),
  311. ~Q(pk=self.pk)
  312. ).exists():
  313. raise ValidationError({'name': _("已存在同名且非顶级的分类,请修改后重试。")})
  314. def save(self, *args, **kwargs):
  315. self.full_clean()
  316. super().save(*args, **kwargs)
  317. def __str__(self):
  318. return self.name
  319. # 模板信息
  320. class Template(models.Model):
  321. id = models.AutoField(primary_key=True)
  322. code = models.CharField(max_length=255, verbose_name="模板编码",blank=True,null=True)
  323. name = models.CharField(max_length=255, verbose_name="模板分类名称")
  324. intro = models.TextField(verbose_name="介绍", default="",blank=True,null=True)
  325. lay_id = models.CharField(max_length=100, default="", verbose_name="图层id",blank=True,null=True)
  326. type = models.CharField(max_length=100, default="", verbose_name="类型",blank=True,null=True)
  327. content = models.TextField(verbose_name="模板内容", default="",blank=True,null=True)
  328. attrs = models.TextField(verbose_name="属性", default="[]",blank=True,null=True)
  329. category_id = models.IntegerField(verbose_name="所属分类")
  330. admin_id = models.IntegerField(verbose_name="管理员id", default=0)
  331. create_time = models.DateTimeField(verbose_name="创建日期", default=eight_hours_from_now)
  332. status = models.SmallIntegerField(choices=DefaultStatus, verbose_name="状态")
  333. class Meta:
  334. db_table = 'dc_template'
  335. verbose_name = "模板信息"
  336. verbose_name_plural = "模板信息"
  337. def clean(self):
  338. super().clean()
  339. # 检查是否存在同名且状态不为4的记录
  340. if Template.objects.filter(name=self.name).exclude(status=4).exclude(pk=self.pk).exists():
  341. raise ValidationError({'name': _("已存在同名,请修改后重试。")})
  342. def save(self, *args, **kwargs):
  343. self.full_clean()
  344. super().save(*args, **kwargs)
  345. def __str__(self):
  346. return self.name
  347. # 模板分类
  348. class ImageCategory(models.Model):
  349. id = models.AutoField(primary_key=True)
  350. name = models.CharField(max_length=255, verbose_name="图片分类名称")
  351. intro = models.TextField(verbose_name="图片分类介绍")
  352. create_time = models.DateTimeField(verbose_name="创建日期", default=eight_hours_from_now)
  353. status = models.SmallIntegerField(choices=DefaultStatus, verbose_name="状态")
  354. class Meta:
  355. db_table = 'dc_image_category'
  356. verbose_name = "图片分类"
  357. verbose_name_plural = "图片分类"
  358. def clean(self):
  359. super().clean()
  360. # 检查是否存在同名且状态不为4的记录
  361. if ImageCategory.objects.filter(name=self.name).exclude(status=4).exclude(pk=self.pk).exists():
  362. raise ValidationError({'name': _("已存在同名,请修改后重试。")})
  363. def save(self, *args, **kwargs):
  364. self.full_clean()
  365. super().save(*args, **kwargs)
  366. def __str__(self):
  367. return self.name
  368. # 模板分类
  369. class Image(models.Model):
  370. id = models.AutoField(primary_key=True)
  371. category_id = models.IntegerField(verbose_name="图片分类")
  372. name = models.CharField(max_length=255, verbose_name="图片信息")
  373. width = models.CharField(max_length=60, verbose_name="图片宽度")
  374. height = models.CharField(max_length=255, verbose_name="图片高度")
  375. path = models.CharField(max_length=255, verbose_name="图片路径")
  376. create_time = models.DateTimeField(verbose_name="创建日期", default=eight_hours_from_now)
  377. status = models.SmallIntegerField(choices=DefaultStatus, verbose_name="状态")
  378. class Meta:
  379. db_table = 'dc_image'
  380. verbose_name = "图片信息"
  381. verbose_name_plural = "图片信息"
  382. def clean(self):
  383. super().clean()
  384. # 检查是否存在同名且状态不为4的记录
  385. if Image.objects.filter(name=self.name).exclude(status=4).exclude(pk=self.pk).exists():
  386. raise ValidationError({'name': _("已存在同名,请修改后重试。")})
  387. def save(self, *args, **kwargs):
  388. self.full_clean()
  389. super().save(*args, **kwargs)
  390. def __str__(self):
  391. return self.name
  392. # 系统参数配置
  393. class Params(models.Model):
  394. id = models.AutoField(primary_key=True)
  395. code = models.CharField(max_length=255, verbose_name="参数代码", unique=True)
  396. name = models.CharField(max_length=255, verbose_name="参数名称")
  397. value = models.CharField(max_length=255, verbose_name="参数值",blank=True,null=True)
  398. value_type = models.SmallIntegerField(verbose_name="变量类型", choices=ParamsValueType, default=1)
  399. value_item = models.CharField(max_length=255, verbose_name="取值范围",blank=True,null=True)
  400. intro = models.CharField(max_length=255, verbose_name="参数介绍",blank=True,null=True)
  401. create_time = models.DateTimeField(verbose_name="创建日期", default=eight_hours_from_now)
  402. type = models.SmallIntegerField(verbose_name="状态", choices=ParamsType, default=1)
  403. status = models.SmallIntegerField(choices=DefaultStatus, verbose_name="状态")
  404. class Meta:
  405. db_table = 'dc_params'
  406. verbose_name = "参数配置"
  407. verbose_name_plural = "参数配置"
  408. def clean(self):
  409. super().clean()
  410. # 检查是否存在同名且状态不为4的记录
  411. if Params.objects.filter(name=self.name).exclude(status=4).exclude(pk=self.pk).exists():
  412. raise ValidationError({'name': _("已存在同名,请修改后重试。")})
  413. def save(self, *args, **kwargs):
  414. self.full_clean()
  415. super().save(*args, **kwargs)
  416. def __str__(self):
  417. return self.name
  418. # 公式管理
  419. class Formula(models.Model):
  420. id = models.AutoField(primary_key=True)
  421. name = models.CharField(max_length=255, verbose_name="公式名称")
  422. formula = models.TextField(max_length=255, verbose_name="公式内容")
  423. intro = models.CharField(max_length=255, verbose_name="公式介绍",null=True, blank=True)
  424. params = models.CharField(max_length=255, verbose_name="公式参数")
  425. create_time = models.DateTimeField(verbose_name="创建日期", default=eight_hours_from_now)
  426. use_status = models.SmallIntegerField(choices=UseStatus, verbose_name="用户状态", default=5)
  427. status = models.SmallIntegerField(choices=DefaultStatus, verbose_name="状态", default=5)
  428. point = models.SmallIntegerField(verbose_name="小数点标识",default=0)
  429. class Meta:
  430. db_table = 'dc_formula'
  431. verbose_name = "公式管理"
  432. verbose_name_plural = "公式管理"
  433. def clean(self):
  434. super().clean()
  435. # 检查是否存在同名且状态不为4的记录
  436. if Formula.objects.filter(name=self.name).exclude(status=4).exclude(pk=self.pk).exists():
  437. raise ValidationError({'name': _("已存在同名,请修改后重试。")})
  438. def save(self, *args, **kwargs):
  439. self.full_clean()
  440. super().save(*args, **kwargs)
  441. def __str__(self):
  442. return self.name
  443. class Product(models.Model):
  444. id = models.AutoField(primary_key=True)
  445. category_id = models.IntegerField(verbose_name="分类信息")
  446. brand_id = models.IntegerField(verbose_name="所属品牌")
  447. supplier_id = models.IntegerField(verbose_name="所属供应商")
  448. name = models.CharField(max_length=255, verbose_name="产品名称")
  449. intro = models.CharField(max_length=255, verbose_name="产品介绍")
  450. price = models.CharField(max_length=255, verbose_name="价格")
  451. product_area = models.CharField(max_length=255, verbose_name="产地")
  452. is_safe = models.CharField(max_length=255, verbose_name="是否质保")
  453. safe_time = models.CharField(max_length=255, verbose_name="质保期限", default="")
  454. is_package = models.CharField(max_length=255, verbose_name="是否为套餐商品")
  455. package_intro = models.CharField(max_length=255, verbose_name="套餐说明", default="")
  456. qualifications = models.CharField(max_length=255, verbose_name="产品资质")
  457. create_time = models.DateTimeField(verbose_name="创建日期", default=eight_hours_from_now)
  458. status = models.SmallIntegerField(choices=DefaultStatus, verbose_name="状态", default=5)
  459. attrs = models.TextField(verbose_name="产品资质", default="")
  460. class Meta:
  461. db_table = 'dc_product'
  462. verbose_name = "产品信息"
  463. verbose_name_plural = "产品信息"
  464. def clean(self):
  465. super().clean()
  466. # 检查是否存在同名且状态不为4的记录
  467. if Product.objects.filter(name=self.name).exclude(status=4).exclude(pk=self.pk).exists():
  468. raise ValidationError({'name': _("已存在同名,请修改后重试。")})
  469. def save(self, *args, **kwargs):
  470. self.full_clean()
  471. super().save(*args, **kwargs)
  472. def __str__(self):
  473. return self.name
  474. # 模板分类
  475. class ProductCategory(models.Model):
  476. id = models.AutoField(primary_key=True)
  477. parent_id = models.IntegerField(verbose_name="所属父级")
  478. name = models.CharField(max_length=255, verbose_name="分类名称")
  479. attrs = models.TextField(verbose_name="属性配置")
  480. create_time = models.DateTimeField(verbose_name="创建日期", default=eight_hours_from_now)
  481. status = models.SmallIntegerField(choices=DefaultStatus, verbose_name="状态")
  482. class Meta:
  483. db_table = 'dc_product_category'
  484. verbose_name = "产品分类"
  485. verbose_name_plural = "产品分类"
  486. def clean(self):
  487. super().clean()
  488. # 检查是否存在同名且状态不为4的记录
  489. if ProductCategory.objects.filter(name=self.name).exclude(status=4).exclude(pk=self.pk).exists():
  490. raise ValidationError({'name': _("已存在同名,请修改后重试。")})
  491. def save(self, *args, **kwargs):
  492. self.full_clean()
  493. super().save(*args, **kwargs)
  494. def __str__(self):
  495. return self.name
  496. # 模板分类
  497. class ProductDocument(models.Model):
  498. id = models.AutoField(primary_key=True)
  499. product_id = models.IntegerField(verbose_name="相关产品")
  500. document_id = models.IntegerField(verbose_name="文档id")
  501. create_time = models.DateTimeField(verbose_name="创建日期", default=django.utils.timezone.now)
  502. status = models.SmallIntegerField(choices=DefaultStatus, verbose_name="状态")
  503. class Meta:
  504. db_table = 'dc_product_document'
  505. verbose_name = "产品相关文档"
  506. verbose_name_plural = "产品相关文档"
  507. def __int__(self):
  508. return self.id
  509. #用户菜单表
  510. class AuthMenu(models.Model):
  511. id = models.AutoField(primary_key=True)
  512. code = models.CharField(max_length=255, verbose_name="菜单code")
  513. name = models.CharField(max_length=255, verbose_name="菜单名称")
  514. parent_id = models.IntegerField(verbose_name="父级id",null=True, blank=True,default=0)
  515. path = models.CharField(max_length=255, verbose_name="权限路径",default='')
  516. type = models.CharField(max_length=255, verbose_name="type",default='')
  517. sort = models.IntegerField(verbose_name="排序",default=0)
  518. status = models.SmallIntegerField(choices=DefaultStatus, verbose_name="状态",default=5)
  519. create_time = models.DateTimeField(verbose_name="创建日期", default=eight_hours_from_now,null=True, blank=True)
  520. class Meta:
  521. db_table = 'auth_menu'
  522. verbose_name = "用户菜单表"
  523. verbose_name_plural = "用户菜单表"
  524. def clean(self):
  525. super().clean()
  526. # 检查是否存在同名且状态不为4的记录
  527. if AuthMenu.objects.filter(name=self.name).exclude(status=4).exclude(pk=self.pk).exists():
  528. raise ValidationError({'name': _("已存在同名,请修改后重试。")})
  529. def save(self, *args, **kwargs):
  530. self.full_clean()
  531. super().save(*args, **kwargs)
  532. def __str__(self):
  533. return self.name
  534. #用户菜单关联表
  535. class AuthUserMenu(models.Model):
  536. id = models.AutoField(primary_key=True)
  537. rola_id = models.IntegerField(verbose_name="角色id",default=0)
  538. menu_id = models.IntegerField(verbose_name="菜单id")
  539. class Meta:
  540. db_table = 'auth_user_menu'
  541. verbose_name = "用户菜单关联表"
  542. verbose_name_plural = "用户菜单关联表"
  543. def __str__(self):
  544. return self.name
  545. # 模块分类用户关联表
  546. class TemplateCateGoryUser(models.Model):
  547. id = models.AutoField(primary_key=True)
  548. rola_id = models.IntegerField(verbose_name="角色id",default=0)
  549. category_id = models.IntegerField(verbose_name="模块分类id")
  550. action = models.CharField(max_length=255, verbose_name="权限类型",default=0)
  551. value = models.CharField(max_length=255, verbose_name="权限code",default=0)
  552. type = models.CharField(max_length=255, verbose_name="归属分类",default=0)
  553. name = models.CharField(max_length=255, verbose_name="权限名称",default=0)
  554. label = models.CharField(max_length=255, verbose_name="权限label",default=0)
  555. isMain = models.CharField(max_length=255, verbose_name="权限label",default=0)
  556. class Meta:
  557. db_table = 'dc_template_category_user'
  558. verbose_name = "模块分类用户关联表"
  559. verbose_name_plural = "模块分类用户关联表"
  560. def __str__(self):
  561. return self.name
  562. # 模块分类用户关联表
  563. class DocumentCategoryUser(models.Model):
  564. id = models.AutoField(primary_key=True)
  565. rola_id = models.IntegerField(verbose_name="角色id",default=0)
  566. category_id = models.IntegerField(verbose_name="文档分类id")
  567. label = models.CharField(max_length=255, verbose_name="权限label", default=0)
  568. name = models.CharField(max_length=255, verbose_name="权限名称", default=0)
  569. action = models.CharField(max_length=255, verbose_name="权限类型", default=0)
  570. type = models.CharField(max_length=255, verbose_name="归属分类", default=0)
  571. value = models.CharField(max_length=255, verbose_name="权限code", default=0)
  572. isMain = models.CharField(max_length=255, verbose_name="是否选择", default=0)
  573. class Meta:
  574. db_table = 'dc_document_category_user'
  575. verbose_name = "文档分类角色关联表"
  576. verbose_name_plural = "文档分类角色关联表"
  577. def __str__(self):
  578. return self.name
  579. # 原始数据分类关联表
  580. class SourceDataCategoryUser(models.Model):
  581. id = models.AutoField(primary_key=True)
  582. rola_id = models.IntegerField(verbose_name="角色id",default=0)
  583. category_id = models.IntegerField(verbose_name="文档分类id")
  584. label = models.CharField(max_length=255, verbose_name="权限label", default=0)
  585. name = models.CharField(max_length=255, verbose_name="权限名称", default=0)
  586. action = models.CharField(max_length=255, verbose_name="权限类型", default=0)
  587. type = models.CharField(max_length=255, verbose_name="归属分类", default=0)
  588. value = models.CharField(max_length=255, verbose_name="权限code", default=0)
  589. isMain = models.CharField(max_length=255, verbose_name="是否选择", default=0)
  590. class Meta:
  591. db_table = 'dc_source_data_category_user'
  592. verbose_name = "原始数据分类关联表"
  593. verbose_name_plural = "原始数据分类关联表"
  594. def __str__(self):
  595. return self.name
  596. class Knowledgebase(models.Model):
  597. id = models.AutoField(primary_key=True)
  598. create_time = models.DateTimeField(verbose_name="创建日期", default=eight_hours_from_now,null=True, blank=True)
  599. update_time = models.DateTimeField(verbose_name="更新时间", default=eight_hours_from_now)
  600. role_id= models.IntegerField(verbose_name="角色id", default=2)
  601. location=models.CharField(max_length=255, verbose_name="buceket内名称",default='')
  602. name = models.CharField(max_length=255, verbose_name="展示名称")
  603. description = models.CharField(max_length=255, verbose_name="描述备注",null=True, blank=True)
  604. language = models.CharField(max_length=255, verbose_name="语言",null=True, blank=True)
  605. embd_id = models.CharField(max_length=255, verbose_name="嵌入模型",null=True, blank=True)
  606. permission = models.CharField(max_length=255, verbose_name="权限:如果权限是“团队”,则所有团队成员都可以操作知识库。",null=True, blank=True)
  607. created_by = models.CharField(max_length=255, verbose_name="创建人id",null=True, blank=True)
  608. doc_num = models.CharField(max_length=255, verbose_name="",null=True, blank=True,default=0)
  609. token_num = models.CharField(max_length=255, verbose_name="块Token数",null=True, blank=True,default=0)
  610. chunk_num = models.CharField(max_length=255, verbose_name="",null=True, blank=True,default=0)
  611. similarity_threshold = models.CharField(max_length=255, verbose_name="相似度阈值",null=True, blank=True)
  612. vector_similarity_weight = models.CharField(max_length=255, verbose_name="关键字相似度权重",null=True, blank=True)
  613. parser_id = models.CharField(max_length=255, verbose_name="",null=True, blank=True)
  614. parser_config = models.CharField(max_length=255, verbose_name="",null=True, blank=True)
  615. status = models.SmallIntegerField(choices=DefaultStatus, verbose_name="状态",default=5)
  616. def clean(self):
  617. super().clean()
  618. # 检查是否存在同名且状态不为4的记录
  619. if Knowledgebase.objects.filter(name=self.name).exclude(status=4).exclude(pk=self.pk).exists():
  620. raise ValidationError({'name': _("已存在同名,请修改后重试。")})
  621. def save(self, *args, **kwargs):
  622. self.update_time = eight_hours_from_now()
  623. self.full_clean()
  624. super().save(*args, **kwargs)
  625. class Meta:
  626. db_table = 'kbm_knowledgebase'
  627. verbose_name = "bucket信息表"
  628. verbose_name_plural = "bucket信息表"
  629. def __str__(self):
  630. return self.name
  631. class File(models.Model):
  632. id = models.AutoField(primary_key=True)
  633. create_time = models.DateTimeField(verbose_name="创建日期", default=eight_hours_from_now,null=True, blank=True)
  634. update_time = models.DateTimeField(verbose_name="更新时间", default=eight_hours_from_now)
  635. parent_id = models.CharField(max_length=255, verbose_name="父级id",null=True, blank=True)
  636. role_id = models.IntegerField(verbose_name="角色id", default=2)
  637. created_by = models.CharField(max_length=255, verbose_name="创建人id", null=True, blank=True)
  638. name = models.CharField(max_length=255, verbose_name="展示文件名称")
  639. location =models.CharField(max_length=255, verbose_name="原文件名称",null=True, blank=True)
  640. size = models.IntegerField(verbose_name="文件大小", default=0)
  641. type = models.CharField(max_length=255, verbose_name="文件类型")
  642. source_type = models.CharField(max_length=255, verbose_name="属于分类",default="knowledgebase",null=True, blank=True)
  643. status = models.SmallIntegerField(choices=DefaultStatus, verbose_name="状态",default=5)
  644. def clean(self):
  645. super().clean()
  646. # 检查是否存在同名且状态不为4的记录
  647. if File.objects.filter(name=self.name,parent_id=self.parent_id).exclude(status=4).exclude(pk=self.pk).exists():
  648. raise ValidationError({'name': _("已存在同名,请修改后重试。")})
  649. def save(self, *args, **kwargs):
  650. self.update_time = eight_hours_from_now()
  651. self.full_clean()
  652. super().save(*args, **kwargs)
  653. class Meta:
  654. db_table = 'kbm_file'
  655. verbose_name = "知识库文件层级表"
  656. verbose_name_plural = "知识库文件层级表"
  657. def __str__(self):
  658. return self.name
  659. class DocumentKbm(models.Model):
  660. id = models.AutoField(primary_key=True)
  661. create_time = models.DateTimeField(verbose_name="创建日期", default=eight_hours_from_now,null=True, blank=True)
  662. update_time = models.DateTimeField(verbose_name="更新时间", default=eight_hours_from_now)
  663. thumbnail = models.TextField(verbose_name="图片解析base64",null=True, blank=True)
  664. kb_id =models.CharField(max_length=255, verbose_name="知识库id")
  665. parser_id =models.CharField(max_length=255, verbose_name="分析器id")
  666. parser_config =models.CharField(max_length=255, verbose_name="分析器配置信息")
  667. source_type = models.CharField(max_length=255, verbose_name="属于分类", default="local", null=True,blank=True)
  668. type = models.CharField(max_length=255, verbose_name="文件类型")
  669. created_by = models.CharField(max_length=255, verbose_name="创建人id", null=True, blank=True)
  670. name = models.CharField(max_length=255, verbose_name="展示文件名称")
  671. location = models.CharField(max_length=255, verbose_name="原文件名称", null=True, blank=True)
  672. size = models.IntegerField(verbose_name="文件大小", default=0)
  673. token_num = models.IntegerField(verbose_name="token数量", default=0)
  674. chunk_num = models.IntegerField(verbose_name="分块数量", default=0)
  675. progress = models.FloatField(verbose_name="解析数", default=0)
  676. progress_msg = models.TextField(verbose_name="解析详情信息",default='',null=True, blank=True)
  677. process_begin_at = models.DateTimeField(verbose_name="解析开始时间",null=True, blank=True)
  678. process_duation = models.FloatField(verbose_name="解析时间记录", default=0)
  679. run = models.CharField(max_length=255, verbose_name="解析标识",default=0)
  680. status = models.SmallIntegerField(choices=DefaultStatus, verbose_name="状态",default=5)
  681. doc_type_id = models.CharField(max_length=255, verbose_name="文件所属分类id", null=True, blank=True,default=0)
  682. def clean(self):
  683. super().clean()
  684. # 检查是否存在同名且状态不为4的记录
  685. if DocumentKbm.objects.filter(name=self.name,kb_id=self.kb_id).exclude(status=4).exclude(pk=self.pk).exists():
  686. raise ValidationError({'name': _("已存在同名,请修改后重试。")})
  687. def save(self, *args, **kwargs):
  688. self.update_time = eight_hours_from_now()
  689. self.full_clean()
  690. super().save(*args, **kwargs)
  691. class Meta:
  692. db_table = 'kbm_document'
  693. verbose_name = "上传文件详情表"
  694. verbose_name_plural = "上传文件详情表"
  695. def __str__(self):
  696. return self.name
  697. class File2document(models.Model):
  698. id = models.AutoField(primary_key=True)
  699. create_time = models.DateTimeField(verbose_name="创建日期", default=eight_hours_from_now,null=True, blank=True)
  700. update_time = models.DateTimeField(verbose_name="更新时间", default=eight_hours_from_now)
  701. file_id =models.CharField(max_length=255, verbose_name="文件fileid")
  702. document_id =models.CharField(max_length=255, verbose_name="文件详情id")
  703. def save(self, *args, **kwargs):
  704. self.update_time = eight_hours_from_now()
  705. self.full_clean()
  706. super().save(*args, **kwargs)
  707. class Meta:
  708. db_table = 'kbm_file2document'
  709. verbose_name = "文件位置关联表"
  710. verbose_name_plural = "文件位置关联表"
  711. def __str__(self):
  712. return self.name
  713. class Task(models.Model):
  714. id = models.AutoField(primary_key=True)
  715. create_time = models.DateTimeField(verbose_name="创建日期", default=eight_hours_from_now,null=True, blank=True)
  716. update_time = models.DateTimeField(verbose_name="更新时间", default=eight_hours_from_now)
  717. doc_id = models.CharField(max_length=255, verbose_name="文件详情id")
  718. from_page = models.IntegerField(verbose_name="开始页数", default=0)
  719. to_page = models.IntegerField(verbose_name="结束页数", default=-1)
  720. begin_at = models.CharField(max_length=255, verbose_name="begin_at",null=True, blank=True)
  721. process_duation = models.FloatField(max_length=255, verbose_name="解析时间",default=0)
  722. progress = models.FloatField(max_length=255, verbose_name="解析进度",default=0)
  723. progress_msg = models.TextField(max_length=255, verbose_name="解析内容",default='',null=True, blank=True)
  724. def save(self, *args, **kwargs):
  725. self.update_time = eight_hours_from_now()
  726. self.full_clean()
  727. super().save(*args, **kwargs)
  728. class Meta:
  729. db_table = 'kbm_task'
  730. verbose_name = "文件解析信息表"
  731. verbose_name_plural = "文件解析信息表"
  732. def __str__(self):
  733. return self.name
  734. class TaskSublist(models.Model):
  735. id = models.AutoField(primary_key=True)
  736. create_time = models.DateTimeField(verbose_name="创建日期", default=eight_hours_from_now, null=True, blank=True)
  737. update_time = models.DateTimeField(verbose_name="更新时间", default=eight_hours_from_now)
  738. doc_id = models.CharField(max_length=255, verbose_name="文件详情id")
  739. name = models.CharField(max_length=255, verbose_name="展示文件名称")
  740. page_number = models.CharField(max_length=255, verbose_name="第几页",default=0)
  741. chunk_number = models.CharField(max_length=255, verbose_name="分片数量",default=0)
  742. content = models.TextField(max_length=255, verbose_name="解析文本",default='',null=True, blank=True)
  743. milvus_id = models.CharField(max_length=255, verbose_name="milvus向量库id", default=0,null=True, blank=True)
  744. def save(self, *args, **kwargs):
  745. self.update_time = eight_hours_from_now()
  746. self.full_clean()
  747. super().save(*args, **kwargs)
  748. class Meta:
  749. db_table = 'kbm_task_sublist'
  750. verbose_name = "文件解析子表"
  751. verbose_name_plural = "文件解析子表"
  752. def __str__(self):
  753. return self.name
  754. class UserOperation(models.Model):
  755. id = models.AutoField(primary_key=True)
  756. role_id = models.IntegerField(verbose_name="角色id")
  757. operation_id = models.IntegerField(verbose_name="操作权限id")
  758. class Meta:
  759. db_table = 'auth_user_operation'
  760. verbose_name = "用户模块权限表"
  761. verbose_name_plural = "用户模块权限表"
  762. def __str__(self):
  763. return self.name
  764. class Operation(models.Model):
  765. id = models.AutoField(primary_key=True)
  766. name = models.CharField(max_length=255, verbose_name="对应模块名称")
  767. content_type_id = models.IntegerField(verbose_name="所属分类id", default=0)
  768. codename = models.CharField(max_length=100, verbose_name="权限code码")
  769. class Meta:
  770. db_table = 'auth_operation'
  771. verbose_name = "菜单操作权限表"
  772. verbose_name_plural = "菜单操作权限表"
  773. def __str__(self):
  774. return self.name
  775. class WechatUser(models.Model):
  776. id = models.AutoField(primary_key=True)
  777. name = models.CharField(max_length=255, verbose_name="姓名",null=True, blank=True)
  778. nikeName = models.CharField(max_length=255, verbose_name="昵称",null=True, blank=True)
  779. phone = models.CharField(max_length=255, verbose_name="手机号",null=True, blank=True)
  780. openid = models.CharField(max_length=255, verbose_name="微信唯一标识",null=True, blank=True)
  781. age = models.CharField(max_length=255, verbose_name="年龄",null=True, blank=True)
  782. level = models.CharField(max_length=255, verbose_name="等级",null=True, blank=True,default=1)
  783. user_id = models.CharField(max_length=255, verbose_name="用户id",null=True, blank=True)
  784. id_card = models.CharField(max_length=255, verbose_name="身份证号",null=True, blank=True)
  785. status = models.SmallIntegerField(choices=DefaultStatus, verbose_name="状态", default=5)
  786. create_time = models.DateTimeField(verbose_name="创建日期", default=eight_hours_from_now, null=True, blank=True)
  787. update_time = models.DateTimeField(verbose_name="更新时间", default=eight_hours_from_now)
  788. mini_url = models.CharField(max_length=255, verbose_name="小程序头像url",null=True, blank=True)
  789. examine = models.CharField(max_length=255, verbose_name="审核状态 0未审核 1审核",null=True, blank=True,default=0)
  790. source = models.CharField(max_length=255, verbose_name="来源标识 pc:pc 小程序:mini", null=True, blank=True)
  791. def save(self, *args, **kwargs):
  792. self.update_time = eight_hours_from_now()
  793. self.full_clean()
  794. super().save(*args, **kwargs)
  795. class Meta:
  796. db_table = 'wechat_user'
  797. verbose_name = "微信用户表"
  798. verbose_name_plural = "微信用户表"
  799. def __str__(self):
  800. return self.name
  801. class WechatComplaint(models.Model):
  802. id = models.AutoField(primary_key=True)
  803. name = models.CharField(max_length=255, verbose_name="姓名",null=True, blank=True)
  804. phone = models.CharField(max_length=255, verbose_name="手机号",null=True, blank=True)
  805. corporate_name = models.CharField(max_length=255, verbose_name="公司名称",null=True, blank=True)
  806. content = models.CharField(max_length=255, verbose_name="内容",null=True, blank=True)
  807. status = models.SmallIntegerField(choices=DefaultStatus, verbose_name="状态", default=5)
  808. create_time = models.DateTimeField(verbose_name="创建日期", default=eight_hours_from_now, null=True, blank=True)
  809. update_time = models.DateTimeField(verbose_name="更新时间", default=eight_hours_from_now)
  810. def save(self, *args, **kwargs):
  811. if self.status is None:
  812. self.status = 5
  813. self.update_time = eight_hours_from_now()
  814. self.full_clean()
  815. super().save(*args, **kwargs)
  816. class Meta:
  817. db_table = 'wechat_complaint'
  818. verbose_name = "微信投诉建议信息表"
  819. verbose_name_plural = "微信投诉建议信息表"
  820. def __str__(self):
  821. return self.name
  822. class KbmDocumentType(models.Model):
  823. id = models.AutoField(primary_key=True)
  824. status = models.SmallIntegerField(choices=DefaultStatus, verbose_name="状态", default=5)
  825. create_time = models.DateTimeField(verbose_name="创建日期", default=eight_hours_from_now, null=True, blank=True)
  826. update_time = models.DateTimeField(verbose_name="更新时间", default=eight_hours_from_now)
  827. name = models.CharField(max_length=255, verbose_name="姓名", null=True, blank=True)
  828. kb_id = models.CharField(max_length=255, verbose_name="所属知识库id", null=True, blank=True)
  829. parent_id = models.CharField(max_length=255, verbose_name="层级id", null=True, blank=True,default=0)
  830. def clean(self):
  831. super().clean()
  832. # 检查是否存在同名且状态不为4的记录
  833. if KbmDocumentType.objects.filter(name=self.name,kb_id=self.kb_id).exclude(status=4).exclude(pk=self.pk).exists():
  834. raise ValidationError({'name': _("已存在同名,请修改后重试。")})
  835. def save(self, *args, **kwargs):
  836. if self.status is None:
  837. self.status = 5
  838. self.update_time = eight_hours_from_now()
  839. self.full_clean()
  840. super().save(*args, **kwargs)
  841. class Meta:
  842. db_table = 'kbm_document_type'
  843. verbose_name = "知识库文件分类表"
  844. verbose_name_plural = "知识库文件分类表"
  845. def __str__(self):
  846. return self.name
  847. # 超级管理员
  848. class SuperAdmin(models.Model):
  849. id = models.AutoField(primary_key=True)
  850. username = models.CharField(max_length=60, verbose_name="登录用户名", unique=True)
  851. password = models.CharField(max_length=255, verbose_name="登录密码")
  852. mobile = models.CharField(max_length=20, verbose_name="手机号码")
  853. email = models.CharField(max_length=60, verbose_name="邮件地址",blank=True,null=True)
  854. real_name = models.CharField(max_length=255, verbose_name="真实姓名", blank=True,null=True)
  855. token = models.CharField(max_length=120, verbose_name="登录授权码", default="", blank=True,null=True)
  856. role_id = models.IntegerField(verbose_name='所属角色', default=0, blank=True,null=True)
  857. create_time = models.DateTimeField(verbose_name="创建日期", default=eight_hours_from_now)
  858. last_login_time = models.DateTimeField(verbose_name="最后登录时间", default=eight_hours_from_now)
  859. status = models.SmallIntegerField(choices=DefaultStatus, verbose_name="状态", blank=True,null=True)
  860. header = models.CharField(max_length=255, verbose_name="头像", blank=True,null=True)
  861. code = models.CharField(max_length=255, verbose_name="工号", blank=True,null=True)
  862. job = models.CharField(max_length=255, verbose_name="职位", blank=True,null=True)
  863. contact = models.CharField(max_length=255, verbose_name="联系方式", blank=True,null=True)
  864. verification_code = models.CharField(max_length=255, verbose_name="验证码", blank=True,null=True)
  865. class Meta:
  866. db_table = 'super_admin'
  867. verbose_name = "超级管理员信息表"
  868. verbose_name_plural = "超级管理员信息表"
  869. def __int__(self):
  870. return self.id
  871. # 超级管理员配置
  872. class SuperSettings(models.Model):
  873. id = models.AutoField(primary_key=True)
  874. create_time = models.DateTimeField(verbose_name="创建日期", default=eight_hours_from_now)
  875. logo = models.CharField(max_length=255, verbose_name="logo", blank=True,null=True)
  876. name = models.CharField(max_length=255, verbose_name="公司名称", blank=True,null=True)
  877. sidebar_color = models.CharField(max_length=255, verbose_name="侧边栏颜色", blank=True,null=True)
  878. internal_color = models.CharField(max_length=255, verbose_name="内部颜色", blank=True,null=True)
  879. button_color = models.CharField(max_length=255, verbose_name="按钮颜色", blank=True,null=True)
  880. head_color = models.CharField(max_length=255, verbose_name="头部颜色", blank=True,null=True)
  881. log_color = models.CharField(max_length=255, verbose_name="登录页背景颜色", blank=True,null=True)
  882. log_color_url = models.CharField(max_length=255, verbose_name="登录页背景URL", blank=True,null=True)
  883. class Meta:
  884. db_table = 'super_settings'
  885. verbose_name = "超级管理员设置表"
  886. verbose_name_plural = "超级管理员设置表"
  887. def __int__(self):
  888. return self.id