xuigaiquanxian2
This commit is contained in:
commit
80dd24a14c
|
@ -38,6 +38,7 @@ INSTALLED_APPS = [
|
|||
'django.contrib.messages',
|
||||
'django.contrib.staticfiles',
|
||||
'safesite',
|
||||
'safesite.templatetags',
|
||||
'groups',
|
||||
'captcha',
|
||||
]
|
||||
|
@ -148,6 +149,7 @@ CELERY_ENABLE_UTC=True
|
|||
SESSION_EXPIRE_AT_BROWSER_CLOSE = True
|
||||
#SESSION_COOKIE_AGE = 2400
|
||||
SESSION_SAVE_EVERY_REQUEST = True
|
||||
# PERMISSIONS_SESSION_KEY = {} #权限字典
|
||||
|
||||
#日志配置
|
||||
# 创建日志的路径
|
||||
|
|
|
@ -6,3 +6,12 @@ admin.site.register(models.Trouble)
|
|||
admin.site.register(models.Dicclass)
|
||||
admin.site.register(models.Dickey)
|
||||
admin.site.register(models.Partment)
|
||||
|
||||
@admin.register(models.Menu)
|
||||
class Menuadmin(admin.ModelAdmin):
|
||||
list_display = ('menuname','menucode','type','url')
|
||||
list_display_links = ('menuname',)
|
||||
def formfield_for_foreignkey(self, db_field, request, **kwargs):
|
||||
if db_field.name == "parentid":
|
||||
kwargs["queryset"] = models.Menu.objects.filter(type=1)
|
||||
return super().formfield_for_foreignkey(db_field, request, **kwargs)
|
|
@ -10,6 +10,7 @@ import qrcode
|
|||
import os
|
||||
from django.contrib.auth.hashers import make_password
|
||||
from django.db.models import Q
|
||||
from .tasks import send_wechatmsg
|
||||
|
||||
def makeqr(data):
|
||||
upload_folder = 'media/qr_equipment'
|
||||
|
@ -109,7 +110,7 @@ def drquestions(companyid,path,userid):
|
|||
obj.level = leveldict[level]
|
||||
else:
|
||||
obj.level = 1
|
||||
obj.usecoms = ','+companyid+','
|
||||
obj.usecomps = ','+companyid+','
|
||||
obj.createuser = user
|
||||
obj.save()
|
||||
elif type == '多选':
|
||||
|
@ -131,7 +132,7 @@ def drquestions(companyid,path,userid):
|
|||
obj.level = leveldict[level]
|
||||
else:
|
||||
obj.level = 1
|
||||
obj.usecoms = ','+companyid+','
|
||||
obj.usecomps = ','+companyid+','
|
||||
obj.createuser = user
|
||||
obj.save()
|
||||
elif type == '判断':
|
||||
|
@ -153,14 +154,169 @@ def drquestions(companyid,path,userid):
|
|||
obj.level = leveldict[level]
|
||||
else:
|
||||
obj.level = 1
|
||||
obj.usecoms = ','+companyid+','
|
||||
obj.usecomps = ','+companyid+','
|
||||
obj.createuser = user
|
||||
obj.save()
|
||||
i = i +1
|
||||
print(notinlist)
|
||||
return notinlist
|
||||
|
||||
def drtodotroubles(companyid,path,userid):
|
||||
wb = load_workbook(path)
|
||||
sheet = wb.worksheets[0]
|
||||
# 验证文件内容
|
||||
if sheet['a2'].value != '检查类型':
|
||||
return {'code':0,'msg':'excel格式错误!'}
|
||||
if sheet['b2'].value != '隐患等级':
|
||||
return {'code':0,'msg':'excel格式错误!'}
|
||||
if sheet['h2'].value != '隐患地点':
|
||||
return {'code':0,'msg':'excel格式错误!'}
|
||||
partdict = {}
|
||||
jclxdict = {}
|
||||
yhdjdict = {}
|
||||
yhlxdicto = {}
|
||||
yhlbdict = {}
|
||||
yhpgdict = {}
|
||||
yhqydict = {}
|
||||
parts = Partment.objects.filter(partlink__contains=',' + companyid + ',')|Partment.objects.filter(partid=companyid) #获取所有部门
|
||||
for i in parts:
|
||||
partdict[i.partname] = i
|
||||
for i in Dickey.objects.filter(dicparent__dicid=14):
|
||||
jclxdict[i.dickeyname] = i
|
||||
for i in Dickey.objects.filter(dicparent__dicid=18):
|
||||
yhdjdict[i.dickeyname] = i
|
||||
for i in Dickey.objects.filter(dicparent__dicid=15):
|
||||
yhlxdicto[i.dickeyname] = i
|
||||
for i in Dickey.objects.filter(Q(dicparent__dicid=16)|Q(dicparent__dicid=17)):
|
||||
yhlbdict[i.dickeyname] = i
|
||||
for i in Dickey.objects.filter(dicparent__dicid=19):
|
||||
yhpgdict[i.dickeyname] = i
|
||||
for i in Area.objects.filter(usecomp__partid=companyid):
|
||||
yhqydict[i.name]=i
|
||||
i = 3
|
||||
sheetimages = sheet._images #获取图片列表
|
||||
username = User.objects.get(userid=userid).username
|
||||
while sheet['B'+str(i)].value:
|
||||
try:
|
||||
jclx = sheet['A'+str(i)].value
|
||||
yhdj = sheet['B'+str(i)].value
|
||||
yhlxo = sheet['C'+str(i)].value
|
||||
yhlb = sheet['D'+str(i)].value
|
||||
yhpg = sheet['E'+str(i)].value
|
||||
fxsj = sheet['F'+str(i)].value
|
||||
yhqy = sheet['g'+str(i)].value
|
||||
yhdd = sheet['h'+str(i)].value
|
||||
fxbm = sheet['i'+str(i)].value
|
||||
fxr = sheet['j'+str(i)].value
|
||||
yhms = sheet['k'+str(i)].value
|
||||
zgbm = sheet['l'+str(i)].value
|
||||
zgr= sheet['m'+str(i)].value
|
||||
zgqx = sheet['n'+str(i)].value
|
||||
yyfx = sheet['o'+str(i)].value
|
||||
zgcs = sheet['p'+str(i)].value
|
||||
fcbm = sheet['q'+str(i)].value
|
||||
fcr = sheet['r'+str(i)].value
|
||||
obj = Trouble()
|
||||
if jclx in jclxdict:
|
||||
obj.jclx = jclxdict[jclx]
|
||||
if yhdj in yhdjdict:
|
||||
obj.yhdj = yhdjdict[yhdj]
|
||||
if yhlxo in yhlxdicto:
|
||||
obj.yhlxo = yhlxdicto[yhlxo]
|
||||
for key in yhlbdict:
|
||||
if key in yhlb:
|
||||
obj.yhlb = yhlbdict[key]
|
||||
obj.yhlx = obj.yhlb.dicparent
|
||||
if yhpg in yhpgdict:
|
||||
obj.yhpg = yhpgdict[yhpg]
|
||||
if fxsj:
|
||||
if isinstance(fxsj,datetime):
|
||||
obj.fxsj = fxsj
|
||||
else:
|
||||
fxsj = fxsj.replace(' ','')
|
||||
if '-' in fxsj:
|
||||
obj.fxsj = datetime.strptime(fxsj,'%Y-%m-%d').date()
|
||||
elif '.' in fdate:
|
||||
obj.fxsj = datetime.strptime(fxsj,'%Y.%m.%d').date()
|
||||
elif '/' in fdate:
|
||||
obj.fxsj = datetime.strptime(fxsj,'%Y/%m/%d').date()
|
||||
if yhqy in yhqydict:
|
||||
obj.yhqy = yhqydict[yhqy]
|
||||
if yhdd:
|
||||
obj.yhdd = yhdd
|
||||
if fxbm in partdict:
|
||||
obj.fxbm = partdict[fxbm]
|
||||
if fxr:
|
||||
obj.fxr = User.objects.filter(name=fxr,ubelongpart=obj.fxbm)[0]
|
||||
if yhms:
|
||||
obj.yhms = yhms
|
||||
if zgbm in partdict:
|
||||
obj.zgbm = partdict[zgbm]
|
||||
if zgr:
|
||||
obj.zgr = User.objects.filter(name=zgr,ubelongpart=obj.zgbm)[0]
|
||||
obj.todouser = obj.zgr
|
||||
if zgqx:
|
||||
if isinstance(zgqx,datetime):
|
||||
obj.zgqx = zgqx
|
||||
else:
|
||||
zgqx = zgqx.replace(' ','')
|
||||
if '-' in zgqx:
|
||||
obj.zgqx = datetime.strptime(zgqx,'%Y-%m-%d').date()
|
||||
elif '.' in fdate:
|
||||
obj.zgqx = datetime.strptime(zgqx,'%Y.%m.%d').date()
|
||||
elif '/' in fdate:
|
||||
obj.zgqx = datetime.strptime(zgqx,'%Y/%m/%d').date()
|
||||
if yyfx:
|
||||
obj.yyfx = yyfx
|
||||
if zgcs:
|
||||
obj.zgcs = zgcs
|
||||
if fcbm in partdict:
|
||||
user = User.objects.filter(name=fcr,ubelongpart=partdict[fcbm])[0]
|
||||
obj.fcr = user
|
||||
for image in sheetimages:
|
||||
if image.anchor._from.row == i-1 and image.anchor._from.col == 18:
|
||||
imagedata = image._data()#图片二进制数据
|
||||
file_name = datetime.now().strftime('%Y%m%d%H%M%S') + '_yh'+str(i)+'.jpg'
|
||||
user_upload_folder = os.path.join('media', username)
|
||||
if not os.path.exists(user_upload_folder):
|
||||
os.mkdir(user_upload_folder)
|
||||
filepath = os.path.join(user_upload_folder, file_name)
|
||||
filepath = filepath.replace('\\', '/')
|
||||
with open(filepath,'wb') as f:
|
||||
f.write(imagedata)
|
||||
obj.yhtp = filepath
|
||||
obj.yhzt = 3 #待整改
|
||||
obj.yhnum = 'YH'+datetime.now().strftime('%Y%m%d%H%M%S')+str(i)
|
||||
obj.usecomp = Partment.objects.get(partid=companyid)
|
||||
obj.save()
|
||||
postdict = {
|
||||
'touser': 'oPGqkweX75QtLmgehUN-ipR4hcyc',
|
||||
'template_id': 'lOuwSE67vZC3ZVFYPZvz2eb7JdFxqx7ysMFkXrYmYh0',
|
||||
"miniprogram": {"appid": "wx5c39b569f01c27db"},
|
||||
'data': {
|
||||
|
||||
'first': {
|
||||
'value': yhdj + '待整改:'
|
||||
},
|
||||
'keyword1': {
|
||||
'value': yhms
|
||||
},
|
||||
'keyword2': {
|
||||
'value': fxsj
|
||||
},
|
||||
'keyword3': {
|
||||
'value': yhdd
|
||||
},
|
||||
'remark': {
|
||||
'value': '请您及时完成整改。'
|
||||
}
|
||||
}
|
||||
}
|
||||
postdict['touser'] = obj.todouser.openid
|
||||
send_wechatmsg.delay(postdict)
|
||||
i = i + 1
|
||||
except:
|
||||
return '第'+str(i)+'行数据错误,导入终止!'
|
||||
|
||||
|
||||
def drequipments(companyid,path):
|
||||
|
@ -298,12 +454,6 @@ def drequipments(companyid,path):
|
|||
return {'code':2,'msg':'部分未导入成功!','info':numsdict}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
def drusers(companyid,path):
|
||||
wb = load_workbook(path)
|
||||
sheet = wb.worksheets[0]
|
||||
|
@ -373,6 +523,7 @@ def drusers(companyid,path):
|
|||
else:
|
||||
return {'code':1,'msg':'导入全部成功!'}
|
||||
|
||||
|
||||
def drrisks(companyid,path):
|
||||
wb = load_workbook(path)
|
||||
sheet = wb.worksheets[0]
|
||||
|
@ -530,6 +681,7 @@ def drrisks(companyid,path):
|
|||
i = i+1
|
||||
return errorlist
|
||||
|
||||
|
||||
def cal_riskact_level(riskact):
|
||||
levellist = []
|
||||
for i in Risk.objects.filter(riskact=riskact):
|
||||
|
@ -548,6 +700,7 @@ def cal_riskact_level(riskact):
|
|||
riskact.save()
|
||||
cal_area_risk_level(riskact.area)
|
||||
|
||||
|
||||
def cal_area_risk_level(area):
|
||||
levellist = []
|
||||
objs = RiskAct.objects.filter(area=area,type__dickeyid=396)
|
||||
|
@ -570,6 +723,7 @@ def cal_area_risk_level(area):
|
|||
area.risklevel = None
|
||||
area.save()
|
||||
|
||||
|
||||
def is_float(str):
|
||||
if str.count('.') == 1: #小数有且仅有一个小数点
|
||||
left = str.split('.')[0] #小数点左边(整数位,可为正或负)
|
||||
|
|
|
@ -0,0 +1,14 @@
|
|||
# Generated by Django 2.2.8 on 2019-12-17 12:00
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('safesite', '0296_auto_20191209_1029'),
|
||||
('safesite', '0296_auto_20191206_1559'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
]
|
|
@ -0,0 +1,22 @@
|
|||
# Generated by Django 2.2.8 on 2019-12-17 12:00
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('safesite', '0297_merge_20191217_1200'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RemoveField(
|
||||
model_name='companyinfo',
|
||||
name='liaison_fax',
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='menu',
|
||||
name='type',
|
||||
field=models.IntegerField(default=1),
|
||||
),
|
||||
]
|
|
@ -0,0 +1,17 @@
|
|||
# Generated by Django 2.2.8 on 2019-12-17 12:01
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('safesite', '0298_auto_20191217_1200'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RemoveField(
|
||||
model_name='menu',
|
||||
name='type',
|
||||
),
|
||||
]
|
|
@ -0,0 +1,18 @@
|
|||
# Generated by Django 2.2.8 on 2019-12-17 12:01
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('safesite', '0299_remove_menu_type'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='menu',
|
||||
name='type',
|
||||
field=models.IntegerField(default=1),
|
||||
),
|
||||
]
|
|
@ -0,0 +1,28 @@
|
|||
# Generated by Django 2.2.8 on 2019-12-17 14:14
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('safesite', '0300_menu_type'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='menu',
|
||||
name='deletemark',
|
||||
field=models.IntegerField(default=1),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='menu',
|
||||
name='icon',
|
||||
field=models.CharField(blank=True, max_length=100, null=True),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='menu',
|
||||
name='sortnum',
|
||||
field=models.IntegerField(default=1),
|
||||
),
|
||||
]
|
|
@ -0,0 +1,19 @@
|
|||
# Generated by Django 2.2.8 on 2019-12-17 15:06
|
||||
|
||||
import django.contrib.postgres.fields
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('safesite', '0301_auto_20191217_1414'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='group',
|
||||
name='menulist',
|
||||
field=django.contrib.postgres.fields.ArrayField(base_field=models.IntegerField(), blank=True, null=True, size=None),
|
||||
),
|
||||
]
|
|
@ -0,0 +1,19 @@
|
|||
# Generated by Django 2.2.8 on 2019-12-18 09:18
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('safesite', '0302_group_menulist'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='trouble',
|
||||
name='yhlxo',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='yhlxo', to='safesite.Dickey'),
|
||||
),
|
||||
]
|
|
@ -0,0 +1,19 @@
|
|||
# Generated by Django 2.2.8 on 2019-12-19 16:00
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('safesite', '0303_trouble_yhlxo'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='trouble',
|
||||
name='submituser',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='submituser', to='safesite.User'),
|
||||
),
|
||||
]
|
|
@ -162,6 +162,8 @@ class Trouble(models.Model): # 隐患排查
|
|||
yhdd = models.CharField(max_length=200, default='test')
|
||||
yhdj = models.ForeignKey(Dickey, related_name='yhdj',
|
||||
on_delete=models.CASCADE, null=True, blank=True)
|
||||
yhlxo = models.ForeignKey(Dickey, related_name='yhlxo',
|
||||
on_delete=models.CASCADE, null=True, blank=True)
|
||||
yhlx = models.ForeignKey(
|
||||
Dicclass, related_name='yhlx', on_delete=models.CASCADE, null=True, blank=True)
|
||||
yhlb = models.ForeignKey(Dickey, related_name='yhlb',
|
||||
|
@ -208,6 +210,8 @@ class Trouble(models.Model): # 隐患排查
|
|||
pgyj = models.TextField(null=True, blank=True) # 评估退回意见
|
||||
yhqy = models.ForeignKey(
|
||||
Area, on_delete=models.CASCADE, null=True, blank=True) # 隐患区域
|
||||
submituser = models.ForeignKey(User, related_name='submituser',
|
||||
on_delete=models.CASCADE, null=True, blank=True) # 记录人
|
||||
|
||||
|
||||
class TroubleAccess(models.Model): # 隐患流程表
|
||||
|
@ -357,6 +361,7 @@ class Group(models.Model): # 用户组,岗位
|
|||
usecomp = models.ForeignKey(
|
||||
Partment, on_delete=models.CASCADE, related_name='usecompg', default=1)
|
||||
menulink = models.CharField(max_length=200, default='11')
|
||||
menulist = ArrayField(models.IntegerField(), blank=True, null=True)
|
||||
|
||||
|
||||
class Groupuser2(models.Model): # 比较好的方式
|
||||
|
@ -367,16 +372,26 @@ class Groupuser2(models.Model): # 比较好的方式
|
|||
|
||||
|
||||
class Menu(models.Model): # 菜单
|
||||
menuid = models.AutoField(primary_key=True)
|
||||
menuname = models.CharField(max_length=30, blank=True, null=True)
|
||||
menucode = models.CharField(max_length=30, blank=True, null=True)
|
||||
url = models.CharField(max_length=30, blank=True, null=True)
|
||||
detail = models.CharField(max_length=100, blank=True, null=True)
|
||||
type_choices = (
|
||||
(1, '菜单'),
|
||||
(2, '按钮'),
|
||||
)
|
||||
menuid = models.AutoField(primary_key=True,verbose_name='ID')
|
||||
menuname = models.CharField(max_length=30, blank=True, null=True,verbose_name='名称')
|
||||
menucode = models.CharField(max_length=30, blank=True, null=True,verbose_name='菜单标识')
|
||||
url = models.CharField(max_length=30, blank=True, null=True,verbose_name='操作地址')
|
||||
detail = models.CharField(max_length=100, blank=True, null=True,verbose_name='描述')
|
||||
parentid = models.ForeignKey(
|
||||
'self', blank=True, null=True, on_delete=models.CASCADE)
|
||||
icon = models.CharField(max_length=100, default='')
|
||||
sortnum = models.IntegerField(default='1')
|
||||
deletemark = models.IntegerField(default='1')
|
||||
'self', blank=True, null=True, on_delete=models.CASCADE,verbose_name='上级')
|
||||
icon = models.CharField(max_length=100, blank=True, null=True,verbose_name='图标')
|
||||
sortnum = models.IntegerField(default=1,verbose_name='排序号')
|
||||
deletemark = models.IntegerField(default=1,verbose_name='删除标记')
|
||||
type = models.IntegerField(default=1,choices=type_choices,verbose_name='类型')#1是菜单,2是按钮
|
||||
class Meta:
|
||||
verbose_name = '菜单&按钮'
|
||||
verbose_name_plural = "菜单&按钮"
|
||||
def __str__(self):
|
||||
return self.menuname+self.menucode
|
||||
|
||||
|
||||
class Yjyc(models.Model): # 预警预测表
|
||||
|
|
|
@ -164,6 +164,9 @@ function convertmenu(rows) {
|
|||
var row = rows[i];
|
||||
if (row.parentid == node.id) {
|
||||
var child = { id: row.menuid, text: row.menuname, attributes: row.url, iconCls: row.icon, checked: row.checked };
|
||||
if (row.type!=1){
|
||||
node.state = 'closed'
|
||||
}
|
||||
if (node.children) {
|
||||
node.children.push(child);
|
||||
} else {
|
||||
|
@ -598,4 +601,54 @@ $.get('api/check_session',function(res){
|
|||
})
|
||||
}
|
||||
var t1 = window.setInterval(update, 1000 * 60)
|
||||
var t2 = window.setInterval(checksession,1000*60*41)
|
||||
var t2 = window.setInterval(checksession,1000*60*41)
|
||||
|
||||
//扩展easyui表单的验证
|
||||
$.extend($.fn.validatebox.defaults.rules, {
|
||||
//验证汉字
|
||||
CHS: {
|
||||
validator: function (value) {
|
||||
return /^[\u0391-\uFFE5]+$/.test(value);
|
||||
},
|
||||
message: '请输入汉字'
|
||||
},
|
||||
//移动手机号码验证
|
||||
Mobile: {//value值为文本框中的值
|
||||
validator: function (value) {
|
||||
var reg = /^1[3|4|5|8|9]\d{9}$/;
|
||||
return reg.test(value);
|
||||
},
|
||||
message: '请输入正确号码'
|
||||
},
|
||||
//国内邮编验证
|
||||
ZipCode: {
|
||||
validator: function (value) {
|
||||
var reg = /^[0-9]\d{5}$/;
|
||||
return reg.test(value);
|
||||
},
|
||||
message: '6位数字'
|
||||
},
|
||||
//数字
|
||||
Number: {
|
||||
validator: function (value) {
|
||||
var reg =/^[0-9]*$/;
|
||||
return reg.test(value);
|
||||
},
|
||||
message: '请输入数字'
|
||||
},
|
||||
//非负整数
|
||||
Integer: {
|
||||
validator: function (value) {
|
||||
var reg = /^[1-9]\d*|0$/;
|
||||
return reg.test(value);
|
||||
},
|
||||
message: '请输入非负整数'
|
||||
},
|
||||
Password:{
|
||||
validator:function(value){
|
||||
var reg = /(?=.*[0-9])(?=.*[a-zA-Z]).{8,30}/;
|
||||
return reg.test(value);
|
||||
},
|
||||
message:'至少8位包含数字,大小写字母'
|
||||
}
|
||||
})
|
||||
|
|
|
@ -18,15 +18,15 @@
|
|||
</form>
|
||||
</div>
|
||||
<script>
|
||||
$('#parentid').combotree({
|
||||
url: 'parthandle?a=tree',
|
||||
var a = GetQueryString('a');
|
||||
if (a == 'editparth') {
|
||||
partid = GetQueryString('partid');
|
||||
$('#parentid').combotree({
|
||||
url: 'parthandle?a=tree4&expart='+ partid,
|
||||
loadFilter: function (rows) {
|
||||
return convert(rows);
|
||||
},
|
||||
});
|
||||
var a = GetQueryString('a');
|
||||
if (a == 'editparth') {
|
||||
partid = GetQueryString('partid');
|
||||
$.ajax({
|
||||
type: "GET",
|
||||
url: 'parthandle?a=detail&partid=' + partid,
|
||||
|
@ -44,6 +44,13 @@
|
|||
|
||||
}
|
||||
});
|
||||
}else{
|
||||
$('#parentid').combotree({
|
||||
url: 'parthandle?a=tree',
|
||||
loadFilter: function (rows) {
|
||||
return convert(rows);
|
||||
},
|
||||
});
|
||||
}
|
||||
function submitFormp() {
|
||||
var form = new FormData(document.getElementById("partff"));
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
<div style="margin-bottom:5px">
|
||||
<input id="username" class="easyui-textbox" name="username" style="width:90%" data-options="label:'账户',required:true"></input></div>
|
||||
<div style="margin-bottom:5px">
|
||||
<input id="password" class="easyui-textbox" name="password" style="width:90%" data-options="label:'密码',required:true"></input></div>
|
||||
<input id="password" class="easyui-passwordbox validatebox" name="password" style="width:90%" data-options="label:'密码',required:true,validType:'Password'"></input></div>
|
||||
<div style="margin-bottom:5px">
|
||||
<input id="ubelongpart" class="easyui-combotree" name="ubelongpart" style="width:90%"
|
||||
data-options="
|
||||
|
|
|
@ -13,6 +13,15 @@
|
|||
textField:'text',
|
||||
" />
|
||||
</div>
|
||||
<div style="margin-bottom:5px">
|
||||
<input class="easyui-combobox" editable="false" required=true name="yhlxo" id="yhlxo" style="width:480px;" data-options="
|
||||
url:'getdickey?dicclass=56&a=combobox',
|
||||
label:'隐患类型',
|
||||
method: 'get',
|
||||
valueField:'value',
|
||||
textField:'text',
|
||||
" />
|
||||
</div>
|
||||
<div style="margin-bottom:5px">
|
||||
<input editable="false" required=true name="jclx" id="jclx" style="width:480px" data-options="
|
||||
label:'检查类型',
|
||||
|
|
|
@ -57,7 +57,7 @@
|
|||
<div class="center_top">
|
||||
<div class="title"><img src="/static/safesite/mystatic/images/bigdata/icon03.png" /> 平台数据分布</div>
|
||||
<div class="center_top_con" id="distribution_map">
|
||||
<div id="map" class="map" style="width:100%;height:auto;outline: #4A74A8 solid 0.15em;">
|
||||
<div id="map" class="map" style="width:100%;height:100%;outline: #4A74A8 solid 0.15em;">
|
||||
</div>
|
||||
<input type='hidden' id='mapshowinput'></input>
|
||||
<div id="popup" class="ol-popup">
|
||||
|
@ -67,25 +67,19 @@
|
|||
</div>
|
||||
</div>
|
||||
<div class="center_bot">
|
||||
<table name="" id="zgrpmtable" class='panel-table' title="隐患整改人排名" data-options="
|
||||
rownumbers:true,
|
||||
singleSelect:true,
|
||||
striped: true,
|
||||
method:'get',
|
||||
url: 'fxhandle?a=yhzgpm',
|
||||
toolbar:'#zgrpmbar'" bordercolor="#0d48e0" border="1">
|
||||
<table class='panel-table' bordercolor="#0d48e0" border="1">
|
||||
<thead bgcolor="#0e4ae0" align="center" >
|
||||
<tr height="40">
|
||||
<th colspan="7"> 隐患排查</th>
|
||||
<th colspan="7" bgcolor="#FF0000"> 隐患排查</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<th data-options="field:'zgr__userid',hidden:true">编号</th>
|
||||
<th data-options="field:'zgr__name',align:'right'">流程状态</th>
|
||||
<th data-options="field:'number',align:'right'>整改隐患数">隐患等级</th>
|
||||
<th data-options="field:'number',align:'right'>整改隐患数">隐患类别</th>
|
||||
<th data-options="field:'number',align:'right'>整改隐患数">隐患评估</th>
|
||||
<th data-options="field:'number',align:'right'>整改隐患数">发现人</th>
|
||||
<th data-options="field:'zgbm__partname',align:'right'">下一步处理人</th>
|
||||
<th>编号</th>
|
||||
<th>流程状态</th>
|
||||
<th>隐患等级</th>
|
||||
<th>隐患类别</th>
|
||||
<th>隐患评估</th>
|
||||
<th>发现人</th>
|
||||
<th>下一步处理人</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
|
@ -337,7 +331,7 @@
|
|||
.ol-popup-closer:after {
|
||||
content: "✖";
|
||||
}
|
||||
</style>
|
||||
</style>
|
||||
<script>
|
||||
var map, source, vector;// global so we can remove it later
|
||||
var container = document.getElementById("popup");
|
||||
|
@ -351,7 +345,6 @@
|
|||
});
|
||||
$.get('../api/map?a=default', function (res) {
|
||||
$('#map').empty()
|
||||
|
||||
map = initMap(res.pic)
|
||||
update()
|
||||
})
|
||||
|
@ -398,18 +391,18 @@
|
|||
if (feature) {
|
||||
var data = feature.getProperties()
|
||||
//设置弹出框内容,可以HTML自定义
|
||||
var html = "<p style='color:blue'>" + data.name + "</span></p>"
|
||||
var html = "<p style='color:blue'>" + data.name + "</p>"
|
||||
if (data.type == 'yh') {
|
||||
html = html + "<p>事故隐患数量:" + data.num.toString() + "</p>" + "<p><a href='#' onclick='opendetail(" + data.id.toString() + ")'>查看详情</a></p>"
|
||||
html = html + "<p style='color:blue'>事故隐患数量:" + data.num.toString() + "</p>"
|
||||
}
|
||||
else if (data.type == 'ws') {
|
||||
html = html + "<p>未遂事件数量:" + data.num.toString() + "</p>" + "<p><a href='#' onclick='opendetail(" + data.id.toString() + ")'>查看详情</a></p>"
|
||||
}
|
||||
else if (data.type == 'fx') {
|
||||
html = html + "<p>风险等级:" + data.risklevel + "</p>" + "<p><a href='#' onclick='opendetail(" + data.id.toString() + ")'>查看详情</a></p>"
|
||||
html = html + "<p style='color:blue'>未遂事件数量:" + data.num.toString() + "</p>"
|
||||
}
|
||||
else if (data.type == 'zy') {
|
||||
html = html + "<p>危险作业数量:" + data.num.toString() + "</p>" + "<p><a href='#' onclick='opendetail(" + data.id.toString() + ")'>查看详情</a></p>"
|
||||
html = html + "<p style='color:blue'>危险作业数量:" + data.num.toString() + "</p>"
|
||||
}
|
||||
else if (data.type == 'fx') {
|
||||
html = html + "<p style='color:blue'>风险等级:" + data.risklevel + "</p>"
|
||||
}
|
||||
content.innerHTML = html;
|
||||
//设置overlay的显示位置
|
||||
|
|
|
@ -69,7 +69,8 @@
|
|||
function adddict() {
|
||||
var row = $('#dicclasstree').tree('getSelected');
|
||||
var x = 0;
|
||||
if (row && ($('#dicclasstree').tree('isLeaf', row.target)) ) {
|
||||
|
||||
if (row&&($('#dicclasstree').tree('isLeaf', row.target))) {
|
||||
x = row.id;
|
||||
$("#dd").dialog({
|
||||
maximizable: true,
|
||||
|
@ -85,7 +86,7 @@
|
|||
});
|
||||
$("#dd").window('center');
|
||||
}else{
|
||||
$.messager.alert('提示', '请先选择左侧子目录!');
|
||||
$.messager.alert('提示', '请先选择左侧根节点!');
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -125,7 +125,7 @@
|
|||
var row = $('#kstable').datagrid('getSelected');
|
||||
if (row) {
|
||||
var url = 'html/examtest/detail/' + row.id
|
||||
opendg('查看详情',url)
|
||||
opendg('查看详情',url,1000)
|
||||
}
|
||||
else { $.messager.alert('提示', '请选择一行数据!'); }
|
||||
}
|
||||
|
|
|
@ -75,6 +75,9 @@
|
|||
<th style="width:10%">
|
||||
得分
|
||||
</th>
|
||||
<th style="width:15%">
|
||||
参考时间
|
||||
</th>
|
||||
<th style="width:10%">
|
||||
用时
|
||||
</th>
|
||||
|
@ -98,6 +101,7 @@
|
|||
<td><font color="green">已参加</font></td>
|
||||
{{/if}}
|
||||
<td>{{$value.score}}</td>
|
||||
<td>{{$value.starttime}}</td>
|
||||
<td>{{$value.took}}</td>
|
||||
|
||||
<td><a target="_blank" href="/html/examhistory/{{$value.id}}">点击查看</a></td>
|
||||
|
|
|
@ -27,6 +27,7 @@
|
|||
<script src="https://cdn.bootcss.com/jquery.form/4.2.1/jquery.form.min.js"></script>
|
||||
<script src="https://cdn.bootcss.com/jquery-cookie/1.4.1/jquery.cookie.js"></script>
|
||||
<script type="text/javascript" src="/static/safesite/mystatic/js/util.js"></script>
|
||||
<script type="text/javascript" src="/static/safesite/easyui/datagrid-scrollview.js"></script>
|
||||
<style type="text/css">
|
||||
.easyui-linkbutton:hover {
|
||||
background: #1148a0;
|
||||
|
@ -84,7 +85,7 @@
|
|||
<div style="width:30%;float:right">
|
||||
<div style="margin-top: 10px;text-align: center;position: fixed;width: 500px;height: 70px;right: 20px;">
|
||||
<span style=" padding-right:20px;font-size: 18px;color:#F5EBEB" class="head">
|
||||
{{ username }} 欢迎您!
|
||||
{{ user.username }} 欢迎您!
|
||||
</span>
|
||||
</div>
|
||||
<div style="text-align: center;position: fixed;width: 500px;height: 70px;top: 40px;right: 60px;">
|
||||
|
@ -145,16 +146,16 @@
|
|||
</ul>
|
||||
</div>
|
||||
<div id='pwdg' title='修改密码' style="width:500px;height:250px;display:none" data-options="modal:true">
|
||||
<form method="post" style="margin-top:10px">
|
||||
<form method="post" style="margin:10px;">
|
||||
<div style="margin-bottom:5px;">
|
||||
<input id="oldpwd" class="easyui-textbox" name="oldpwd" type="password" style="width:100%;"
|
||||
data-options="label:'旧密码'" /></div>
|
||||
<input id="oldpwd" class="easyui-passwordbox" name="oldpwd" type="password"
|
||||
data-options="label:'旧密码',required:true" style="width:90%"/></div>
|
||||
<div style="margin-bottom:5px;">
|
||||
<input id="newpwd" class="easyui-textbox" name="newpwd" type="password" style="width:100%;"
|
||||
data-options="label:'新密码'" /></div>
|
||||
<input id="newpwd" class="easyui-passwordbox validatebox" name="newpwd"
|
||||
data-options="label:'新密码',validType:'Password',required:true" style="width:90%"/></div>
|
||||
<div style="margin-bottom:5px;">
|
||||
<input id="newpwd2" class="easyui-textbox" name="newpwd2" type="password" style="width:100%;"
|
||||
data-options="label:'确认新密码'" /></div>
|
||||
<input id="newpwd2" class="easyui-passwordbox validatebox" name="newpwd2"
|
||||
data-options="label:'确认新密码',validType:'Password',required:true" style="width:90%"/></div>
|
||||
</form>
|
||||
<div style="text-align: center">
|
||||
<a id="btnpwc" class="easyui-linkbutton" iconCls="icon-ok" onclick="btnpwc()">保存</a>
|
||||
|
@ -183,6 +184,12 @@
|
|||
}
|
||||
});
|
||||
}
|
||||
var pwstr = {{pwstr}};
|
||||
if(pwstr==0){
|
||||
$.messager.alert('','您的密码复杂度太低,请修改!','warning',function(){
|
||||
$('#pwdg').dialog()
|
||||
});}
|
||||
|
||||
function bindwx() {
|
||||
if (openid == 0 ||openid == 'None') {
|
||||
$('#wxdg').dialog('open');
|
||||
|
|
|
@ -379,7 +379,7 @@ float: left;">
|
|||
<script>
|
||||
var data=JSON.parse(localStorage.getItem("data"));
|
||||
bindmap9('gzbqst')
|
||||
if(data.rights.indexOf('30')!=-1){ //有无地图功能
|
||||
if(data.rights.indexOf(30)!=-1){ //有无地图功能
|
||||
$('#panelxdiv').show()
|
||||
$('#panelx').panel({
|
||||
href:'html/mapshow',
|
||||
|
|
|
@ -30,7 +30,10 @@
|
|||
return s;
|
||||
}," />
|
||||
<a id="BindZt" onclick="BindZt();">查询</a>
|
||||
{% load myfilter %}
|
||||
{% if request|has_permission:'b_report_export' %}
|
||||
<a id="Export" onclick="Export()">导出</a>
|
||||
{% endif %}
|
||||
</form>
|
||||
<div id="depinfo">
|
||||
<form id="form1" method="post">
|
||||
|
|
|
@ -14,6 +14,7 @@
|
|||
animate: true,
|
||||
checkbox: true,
|
||||
lines: true,
|
||||
cascadeCheck :true,
|
||||
loadFilter: function (rows) {
|
||||
var rows = convertmenu(rows)
|
||||
return rows;
|
||||
|
|
|
@ -1,16 +1,5 @@
|
|||
<div id="yhtablebar" style="padding:4px;height:40px">
|
||||
<div style="width: 600px;float: right;padding: 5px;">
|
||||
|
||||
<a id="addyh" onclick="javascript:opendg('新增隐患','addtrouble?a=addyh')">新增</a>
|
||||
<a id="doyh" onclick="doyh()">处理</a>
|
||||
<a id="delyh" onclick="delyh()">删除</a>
|
||||
<a id="duibiao" class='easyui-linkbutton' onclick="duibiao()" data-options="iconCls: 'fa-thumb-tack',plain:true">对标</a>
|
||||
|
||||
<a id="detailyh2" onclick="detailyh()">查看详情</a>
|
||||
<a id="exportword" onclick="exportyhword()">导出Word</a>
|
||||
<a id="exportexcel" onclick="exportyhexcel()">导出Excel</a>
|
||||
</div>
|
||||
<div style="padding: 5px;float: left;width: 400px;">
|
||||
<div id="yhtablebar" style="padding:4px;">
|
||||
<div>
|
||||
<label>快捷查询</label>
|
||||
<select id='kjcxyh' style='width:150px;'>
|
||||
<option value="">请选择</option>
|
||||
|
@ -20,6 +9,29 @@
|
|||
</select>
|
||||
<a onclick="javascript:$('#sdg_yh').dialog('open')" class="easyui-linkbutton" data-options="iconCls: 'fa-search',plain:true">详细筛选</a>
|
||||
</div>
|
||||
<div>
|
||||
{% load myfilter %}
|
||||
{% if request|has_permission:'b_trouble_add' %}
|
||||
<a id="addyh" onclick="javascript:opendg('新增隐患','addtrouble?a=addyh')">新增</a>
|
||||
{% endif %}
|
||||
<a id="doyh" onclick="doyh()">处理</a>
|
||||
<a id="delyh" onclick="delyh()">删除</a>
|
||||
<a id="duibiao" class='easyui-linkbutton' onclick="duibiao()" data-options="iconCls: 'fa-thumb-tack',plain:true">对标</a>
|
||||
|
||||
<a id="detailyh2" onclick="detailyh()">查看详情</a>
|
||||
|
||||
{% if request|has_permission:'b_trouble_import' %}
|
||||
<a onclick="javascript:$('#drtroubledg').dialog('open').window('center');" class="easyui-linkbutton"
|
||||
data-options="iconCls:'fa-upload',plain:true">导入待整改隐患</a>
|
||||
{% endif %}
|
||||
{% if request|has_permission:'b_trouble_exportdoc' %}
|
||||
<a id="exportword" onclick="exportyhword()">导出Word</a>
|
||||
{% endif %}
|
||||
|
||||
{% if request|has_permission:'b_trouble_exportxls' %}
|
||||
<a id="exportexcel" onclick="exportyhexcel()">导出Excel</a>
|
||||
{% endif %}
|
||||
</div>
|
||||
<div id="sdg_yh" class="easyui-dialog" title="筛选条件" style="width:400px;height:420px;"
|
||||
data-options="iconCls:'fa-search',resizable:true,modal:true,closed:true,border:false">
|
||||
<div class="easyui-layout" style="width:100%;height:100%;">
|
||||
|
@ -56,7 +68,13 @@
|
|||
</div>
|
||||
</div>
|
||||
<table id="yhtable" style="width:100%;height:100%;"></table>
|
||||
|
||||
<div id="drtroubledg" class="easyui-dialog" title="导入隐患" style="width:400px;height:200px;"
|
||||
data-options="iconCls:'fa-upload',resizable:true,modal:true,closed:true,border:false">
|
||||
<p style="color:red;margin-left: 10px">请按模板录入后导入</p>
|
||||
<p style="margin-left: 10px"><a href="/static/safesite/muban/trouble.xlsx" target="_blank">点击下载模板</a></p>
|
||||
<p style="margin-left: 10px">录入完成后点击下方按钮上传文件</p>
|
||||
<input type="file" id="drfile" name="" accept=".xls,.xlsx" style="margin-left: 10px" />
|
||||
</div>
|
||||
<!-- <a id="downa" href="" target="_blank" style="display:none"></a> -->
|
||||
<script>
|
||||
$(function () {
|
||||
|
@ -72,7 +90,7 @@
|
|||
method: 'get',
|
||||
url: '',
|
||||
fitColumns: true,
|
||||
pagination: 'true',
|
||||
pagination:true,
|
||||
pageSize: 20,
|
||||
toolbar: '#yhtablebar',
|
||||
border:false,
|
||||
|
@ -221,27 +239,26 @@
|
|||
url: 'getdickey?dicclass=19&a=combobox',
|
||||
editable: false,
|
||||
});
|
||||
$("#sfxbm,#szgbm").combotree({
|
||||
// $.get('parthandle?a=tree',function(res){
|
||||
// var data = convert(res);
|
||||
// $('#sfxbm,#szgbm').combotree();
|
||||
// $("#sfxbm").combotree('loadData',data);
|
||||
// $("#szgbm").combotree('loadData',data);
|
||||
// })
|
||||
$("#sfxbm").combotree({
|
||||
url: 'parthandle?a=tree',
|
||||
editable: false,
|
||||
loadFilter: function (rows) {
|
||||
return convert(rows);
|
||||
},
|
||||
});
|
||||
$("#szgbm").combotree({
|
||||
url: 'parthandle?a=tree',
|
||||
editable: false,
|
||||
loadFilter: function (rows) {
|
||||
return convert(rows);
|
||||
},
|
||||
// formatter: function (node) {
|
||||
// var s = node.text;
|
||||
// if (node.children) {
|
||||
// s += ' <span style=\'color:blue\'>(' + node.children.length + ')</span>';
|
||||
// }
|
||||
// return s;
|
||||
// },
|
||||
// onSelect: function (node) {
|
||||
// $('#sfxr').combobox({
|
||||
// url: 'getuser?partid=' + node.id + '&a=combobox',
|
||||
// editable: false,
|
||||
// });
|
||||
// }
|
||||
});
|
||||
|
||||
function detailyh() {
|
||||
var row = $('#yhtable').datagrid('getSelected');
|
||||
if (row) {
|
||||
|
@ -368,7 +385,39 @@
|
|||
}
|
||||
else { $.messager.alert('提示', '请选择一行数据!'); }
|
||||
}
|
||||
document.getElementById('drfile').onchange = function () {
|
||||
var fileObj = this.files[0];
|
||||
var url = 'drapi?a=todotrouble'
|
||||
var form = new FormData();
|
||||
form.append("upfile", fileObj); // 文件对象
|
||||
xhr = new XMLHttpRequest(); // XMLHttpRequest 对象
|
||||
xhr.open("post", url, true); //post方式,url为服务器请求地址,true 该参数规定请求是否异步处理。
|
||||
xhr.send(form)
|
||||
$('#drtroubledg').dialog('close')
|
||||
loading('导入中。。');
|
||||
xhr.onload = function (evt) { //服务断接收完文件返回的结果
|
||||
var data = JSON.parse(evt.target.responseText);
|
||||
removeLoading();
|
||||
if (data.code == 1) {
|
||||
$.messager.alert('提示', '上传成功!', 'info', function () {
|
||||
$("#yhtable").datagrid('reload');
|
||||
});
|
||||
}
|
||||
else if (data.code == 2) {
|
||||
$.messager.alert('警告', data.msg, 'info', function () {
|
||||
$("#yhtable").datagrid('reload');
|
||||
});
|
||||
}
|
||||
else {
|
||||
$.messager.alert('提示', '失败!文件内容有误');
|
||||
}
|
||||
document.getElementById('drfile').value = '';
|
||||
|
||||
}; //请求完成
|
||||
xhr.onerror = function (evt) { $.messager.alert('提示', '失败!文件内容有误'); document.getElementById('drfile').value = ''; }; //请求失败
|
||||
}
|
||||
</script>
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
|
@ -0,0 +1,8 @@
|
|||
from django import template # 导入模板模块
|
||||
register = template.Library() # 获取模板库对象
|
||||
|
||||
#@register.filter(name='tostr') # 通过模板库对象中的装饰器装饰自定义过滤器,参数name是过滤器的名称。
|
||||
@register.filter
|
||||
def has_permission(req,menucode):
|
||||
if menucode in req.session.get('permissions'):
|
||||
return True
|
|
@ -7,6 +7,7 @@ from .models import User, Trouble, Dickey, Partment, Dicclass, Train, Drill, Tro
|
|||
from django.template import RequestContext
|
||||
from django.views.decorators.csrf import csrf_exempt
|
||||
from django.core import serializers
|
||||
from django.conf import settings
|
||||
from .forms import UserForm
|
||||
import json
|
||||
from uuid import UUID
|
||||
|
@ -17,7 +18,7 @@ from django.db.models import F, Count, Sum
|
|||
import requests
|
||||
from .tasks import send_wechatmsgs, send_wechatmsg, yjjs, gettime, yjjs_px, yjjs_yl, updateTzzs, updateAqzs, yjjs_gc, yjjs_ws
|
||||
from .export import exportdoc, exportxlsx, exportyjdoc, exportsimplexlsx, exportdoc2
|
||||
from .daoru import drusers, drequipments, drrisks, drquestions, cal_riskact_level, cal_area_risk_level, makeqr, makeqr_train, makeqr_riskact, makeqr_examtest, makeqr_area
|
||||
from .daoru import drusers, drequipments, drrisks, drquestions, cal_riskact_level, cal_area_risk_level, makeqr, makeqr_train, makeqr_riskact, makeqr_examtest, makeqr_area,drtodotroubles
|
||||
from django.forms.models import model_to_dict
|
||||
from .safespider import getTzzs, getAqzs
|
||||
from duibiao import calsim
|
||||
|
@ -33,6 +34,7 @@ from django.contrib.sessions.models import Session
|
|||
from groups import models as g_models
|
||||
import logging
|
||||
from django.contrib.auth.hashers import make_password, check_password
|
||||
import re
|
||||
logger = logging.getLogger('log')
|
||||
|
||||
# 分页功能
|
||||
|
@ -511,6 +513,28 @@ def mainhtml(req):
|
|||
first_day, first_day_of_next_month)).count()
|
||||
return render(req, 'main.html', {'yhnum': yhnum, 'totalyh': totalyh, 'monthyh': monthyh, 'pxnum': pxnum, 'totalpx': totalpx, 'monthpx': monthpx, 'ylnum': ylnum, 'totalyl': totalyl, 'monthyl': monthyl})
|
||||
|
||||
def checkpw(data): #密码复杂度校验
|
||||
reg = re.compile('(?=.*[0-9])(?=.*[a-zA-Z]).{8,30}')
|
||||
return re.match(reg,data)
|
||||
|
||||
def init_permission(user,req):
|
||||
permission_dict = {}
|
||||
bgroups = user.userg.all() #所属用户组
|
||||
x = []
|
||||
for i in bgroups:
|
||||
x.extend(i.menulist)
|
||||
menus = Menu.objects.exclude(menuid__in=[11, 9]).filter(menuid__in=list(set(x)), deletemark=1)
|
||||
for item in menus:
|
||||
permission_dict[item.menucode] = ({
|
||||
'url':item.url,
|
||||
'parentid':item.parentid.menuid,
|
||||
'id': item.menuid,
|
||||
'name': item.menuname,
|
||||
})
|
||||
print(permission_dict)
|
||||
req.session['permissions'] = permission_dict
|
||||
|
||||
|
||||
|
||||
def login(req):
|
||||
if req.session.get('userid', None):
|
||||
|
@ -525,6 +549,7 @@ def login(req):
|
|||
if check_password(password, user[0].epassword):
|
||||
req.session['userid'] = user[0].userid
|
||||
req.session.set_expiry(60*40)
|
||||
init_permission(user[0],req)
|
||||
return redirect('index')
|
||||
else:
|
||||
msg = '密码错误'
|
||||
|
@ -545,13 +570,17 @@ def index(req):
|
|||
return redirect('login')
|
||||
userid = req.session['userid']
|
||||
user = User.objects.get(userid=userid)
|
||||
pwstr = 0
|
||||
if checkpw(user.password):
|
||||
pwstr = 1
|
||||
companyname = user.usecomp.partname
|
||||
name = user.name
|
||||
openid = user.openid
|
||||
headimgurl = user.headimgurl
|
||||
nickname = user.nickname
|
||||
issuper = user.issuper
|
||||
return render(req, 'index.html', {'username': name, 'userid': userid, 'openid': openid, 'headimgurl': headimgurl, 'nickname': nickname, 'companyname': companyname, 'issuper': issuper, 'token': user.token})
|
||||
token = user.token
|
||||
return render(req, 'index.html', locals())
|
||||
|
||||
|
||||
def logout(req):
|
||||
|
@ -781,16 +810,13 @@ def menutree(req):
|
|||
userid = req.session['userid']
|
||||
if User.objects.get(userid=userid).issuper == 1: # 如果是超管
|
||||
companyid = getcompany(userid)
|
||||
x = Group.objects.get(usecomp__partid=companyid, grouptype=0).menulink
|
||||
list1 = x.split(',')
|
||||
x = Group.objects.get(usecomp__partid=companyid, grouptype=0).menulist
|
||||
else:
|
||||
bgroups = User.objects.get(userid=userid).userg.all()
|
||||
x = ''
|
||||
x = []
|
||||
for i in bgroups:
|
||||
x = x + ',' + i.menulink
|
||||
list1 = x.split(',')
|
||||
# del list1[0]#删除首空字符
|
||||
menus = Menu.objects.exclude(menuid__in=[11, 9]).filter(menuid__in=list(filter(None, list(set(list1)))), deletemark=1).order_by(
|
||||
x.extend(i.menulist)
|
||||
menus = Menu.objects.exclude(menuid__in=[11, 9]).filter(menuid__in=list(set(x)), deletemark=1,type=1).order_by(
|
||||
'sortnum').values('menuid', 'menucode', 'parentid', 'url', 'menuname', 'icon').distinct()
|
||||
return HttpResponse(json.dumps(list(menus)), content_type="application/json")
|
||||
|
||||
|
@ -799,15 +825,15 @@ def apirights(req):
|
|||
a = req.GET.get('a')
|
||||
if a == 'detail':
|
||||
groupid = req.GET.get('groupid')
|
||||
haverights = Group.objects.get(groupid=groupid).menulink.split(',')
|
||||
haverights = Group.objects.get(groupid=groupid).menulist
|
||||
userid = req.session['userid']
|
||||
companyid = getcompany(userid)
|
||||
allrights = Group.objects.get(
|
||||
usecomp__partid=companyid, grouptype=0).menulink.split(',')
|
||||
usecomp__partid=companyid, grouptype=0).menulist
|
||||
menus = Menu.objects.exclude(menuid__in=[11, 9]).filter(menuid__in=allrights, deletemark=1).order_by(
|
||||
'menuid').values('menuid', 'menucode', 'parentid', 'url', 'menuname', 'icon').distinct()
|
||||
'menuid').values('menuid', 'menucode', 'parentid', 'url', 'menuname', 'icon','type').distinct()
|
||||
for i in menus:
|
||||
if str(i['menuid']) in haverights and i['url'] != None:
|
||||
if i['menuid'] in haverights:
|
||||
i['checked'] = True
|
||||
else:
|
||||
i['checked'] = False
|
||||
|
@ -816,21 +842,17 @@ def apirights(req):
|
|||
groupid = req.GET.get('groupid')
|
||||
data = req.POST.get('data')
|
||||
data = json.loads(data)
|
||||
rlist = ['11', '9']
|
||||
rlist = [11, 9]
|
||||
for i in data:
|
||||
rlist.append(str(i['id']))
|
||||
# x = i['id']
|
||||
# while Menu.objects.get(menuid=x).parentid != None:
|
||||
# x = Menu.objects.get(menuid=x).parentid.menuid
|
||||
# rlist.append(str(x))
|
||||
rlist.append(i['id'])
|
||||
Group.objects.filter(groupid=groupid).update(
|
||||
menulink=','.join(list(set(rlist))))
|
||||
menulist=rlist)
|
||||
return JsonResponse({"code": 1})
|
||||
elif a == 'have':
|
||||
userid = req.session['userid']
|
||||
companyid = getcompany(userid)
|
||||
allrights = Group.objects.get(
|
||||
usecomp__partid=companyid, grouptype=0).menulink.split(',')
|
||||
usecomp__partid=companyid, grouptype=0).menulist
|
||||
return JsonResponse({'code': 1, 'rights': allrights})
|
||||
|
||||
|
||||
|
@ -848,6 +870,7 @@ def addyh(req):
|
|||
yhpg = yhdata['yhpg'] if 'yhpg' in yhdata else ''
|
||||
jclx = yhdata['jclx']
|
||||
yhlx = yhdata['yhlx'] if 'yhlx' in yhdata else ''
|
||||
yhlxo = yhdata['yhlxo'] if 'yhlxo' in yhdata else ''
|
||||
yhlb = yhdata['yhlb'] if 'yhlb' in yhdata else ''
|
||||
yyfx = yhdata['yyfx'] if 'yyfx' in yhdata else ''
|
||||
zgcs = yhdata['zgcs'] if 'zgcs' in yhdata else ''
|
||||
|
@ -881,6 +904,8 @@ def addyh(req):
|
|||
a.yhpg = Dickey.objects.get(dickeyid=yhpg)
|
||||
if jclx != '':
|
||||
a.jclx = Dickey.objects.get(dickeyid=jclx)
|
||||
if yhlxo:
|
||||
a.yhlxo = Dickey.objects.get(dickeyid=yhlxo)
|
||||
if yhlx != '':
|
||||
a.yhlx = Dicclass.objects.get(dicid=yhlx)
|
||||
if yhlb != '':
|
||||
|
@ -1751,7 +1776,7 @@ def grouphandle(req):
|
|||
userid = req.session['userid']
|
||||
companyid = getcompany(userid)
|
||||
a = Group.objects.filter(usecomp__partid=companyid).exclude(
|
||||
grouptype=0).values('groupid', 'groupname', 'grouptype')
|
||||
grouptype=0).order_by('groupid').values('groupid', 'groupname', 'grouptype')
|
||||
total = a.count()
|
||||
return HttpResponse(transjson(total, a), content_type="application/json")
|
||||
elif req.GET.get('a') == 'list2': # 排除全体用户组
|
||||
|
@ -2633,13 +2658,17 @@ def parthandle(req):
|
|||
partname = req.POST.get('partname')
|
||||
parentid = req.POST.get('parentid')
|
||||
partobj = Partment.objects.get(partid=partid)
|
||||
oldpartlink = partobj.partlink + partid + ','
|
||||
partlink = Partment.objects.get(
|
||||
partid=parentid).partlink + parentid + ','
|
||||
Partment.objects.filter(partid=partid).update(
|
||||
partname=partname, parentid=parentid, partlink=partlink)
|
||||
Partment.objects.filter(partlink__contains=oldpartlink).update(
|
||||
partlink=partlink + partid + ',')
|
||||
if partobj.iscompany==1:
|
||||
partobj.partname = partname
|
||||
partobj.save()
|
||||
else:
|
||||
oldpartlink = partobj.partlink + partid + ','
|
||||
partlink = Partment.objects.get(
|
||||
partid=parentid).partlink + parentid + ','
|
||||
Partment.objects.filter(partid=partid).update(
|
||||
partname=partname, parentid=parentid, partlink=partlink)
|
||||
Partment.objects.filter(partlink__contains=oldpartlink).update(
|
||||
partlink=partlink + partid + ',')
|
||||
return JsonResponse({"code": 1})
|
||||
else:
|
||||
try:
|
||||
|
@ -2656,13 +2685,19 @@ def parthandle(req):
|
|||
elif req.GET.get('a') == 'tree':
|
||||
userid = req.session['userid']
|
||||
companyid = getcompany(userid)
|
||||
list_items = (Partment.objects.filter(partlink__contains=','+companyid+',') | Partment.objects.filter(partid=companyid)
|
||||
list_items = (Partment.objects.filter(Q(partlink__contains=','+companyid+',') | Q(partid=companyid),Q(deletemark=1))
|
||||
).annotate(id=F('partid'), parentId=F('parentid'), name=F('partname')).values('id', 'parentId', 'name')
|
||||
return HttpResponse(json.dumps(list(list_items)), content_type="application/json")
|
||||
elif req.GET.get('a') == 'tree4':#不能选自己部门及以下
|
||||
userid = req.session['userid']
|
||||
companyid = getcompany(userid)
|
||||
expart = req.GET.get('expart')
|
||||
list_items = (Partment.objects.filter(Q(partlink__contains=','+companyid+',') | Q(partid=companyid),Q(deletemark=1)).exclude(Q(partid=expart)|Q(partlink__contains=','+expart+','))).annotate(id=F('partid'), parentId=F('parentid'), name=F('partname')).values('id', 'parentId', 'name')
|
||||
return HttpResponse(json.dumps(list(list_items)), content_type="application/json")
|
||||
elif req.GET.get('a') == 'tree2':
|
||||
userid = req.session['userid']
|
||||
companyid = getcompany(userid)
|
||||
list_items = (Partment.objects.filter(partlink__contains=','+companyid+',')).annotate(id=F('partid'),
|
||||
list_items = (Partment.objects.filter(partlink__contains=','+companyid+',',deletemark=1)).annotate(id=F('partid'),
|
||||
parentId=F('parentid'), name=F('partname')).values('id', 'parentId', 'name', 'iscompany')
|
||||
return HttpResponse(json.dumps(list(list_items)), content_type="application/json")
|
||||
elif req.GET.get('a') == 'tree3': # 能够指派的部门,包括自己所在的部门
|
||||
|
@ -3596,7 +3631,7 @@ def importusers(req):
|
|||
def apicompany(req):
|
||||
if int(req.session.get('userid')) == 8:
|
||||
a = req.GET.get('a')
|
||||
menurights = '11,1,2,3,4,5,6,7,8,9,10,12,13,15,16,17,18,19,20,21,22,23,24,28,29,32,36,46,47,48,50' # 菜单编码
|
||||
menurights = [11,1,2,3,4,5,6,7,8,9,10,12,13,15,16,17,18,19,20,21,22,23,24,28,29,32,36,46,47,48,50] # 初始化菜单编码
|
||||
if a == 'add':
|
||||
admin = req.GET.get('admin')
|
||||
company = req.GET.get('company')
|
||||
|
@ -3621,13 +3656,13 @@ def apicompany(req):
|
|||
y.save()
|
||||
part = Partment.objects.get(partid=y.partid)
|
||||
Group.objects.create(
|
||||
groupname='超管', grouptype=0, usecomp=part, menulink=menurights)
|
||||
groupname='超管', grouptype=0, usecomp=part, menulist=menurights)
|
||||
Group.objects.create(
|
||||
groupname='安全员', grouptype=1, usecomp=part, menulink=menurights)
|
||||
groupname='安全员', grouptype=1, usecomp=part, menulist=menurights)
|
||||
Group.objects.create(
|
||||
groupname='全体用户', grouptype=3, usecomp=part, menulink=menurights)
|
||||
groupname='全体用户', grouptype=3, usecomp=part, menulist=menurights)
|
||||
z = Group(groupname='主管', grouptype=2,
|
||||
usecomp=part, menulink=menurights)
|
||||
usecomp=part, menulist=menurights)
|
||||
z.save()
|
||||
z.users.add(x)
|
||||
Yjsetup.objects.create(monthyhavg=100, safev=50, warnv=75, alertv=100, maxv=200, yhpgqz=4,
|
||||
|
@ -3705,7 +3740,22 @@ def drapi(req):
|
|||
return JsonResponse({"code": 2, "msg": msg})
|
||||
else:
|
||||
return JsonResponse({"code": 1})
|
||||
|
||||
elif a == 'todotrouble':
|
||||
userid = req.session['userid']
|
||||
companyid = getcompany(userid)
|
||||
file_name = 'c'+str(companyid)+'_'+req.FILES['upfile'].name
|
||||
upload_folder = 'media/temp'
|
||||
if not os.path.exists(upload_folder):
|
||||
os.mkdir(upload_folder)
|
||||
filepath = os.path.join(upload_folder, file_name)
|
||||
filepath = filepath.replace('\\', '/')
|
||||
with open(filepath, 'wb') as f:
|
||||
f.write(req.FILES['upfile'].read())
|
||||
msg = drtodotroubles(companyid, filepath, userid)
|
||||
if msg:
|
||||
return JsonResponse({"code": 2, "msg": msg})
|
||||
else:
|
||||
return JsonResponse({"code": 1})
|
||||
|
||||
def apimiss(req):
|
||||
a = req.GET.get('a')
|
||||
|
@ -4514,9 +4564,9 @@ def apitool(req):
|
|||
if req.GET.get('company'):
|
||||
objs = objs.filter(usecomp__partid=req.GET.get('company'))
|
||||
for i in objs:
|
||||
menulist = i.menulink.split(',')
|
||||
menulist = i.menulist
|
||||
menulist.append(menu)
|
||||
if menu == '30':
|
||||
if menu == 30:
|
||||
company = Partment.objects.get(partid=req.GET.get('company'))
|
||||
objs = Map.objects.filter(usecomp=company)
|
||||
if objs.exists():
|
||||
|
@ -4524,8 +4574,7 @@ def apitool(req):
|
|||
else:
|
||||
Map.objects.create(
|
||||
name='默认地图', pic='/static/safesite/mystatic/images/snc.jpg', usecomp=company, default=1)
|
||||
newlist = list(set(menulist))
|
||||
i.menulink = ','.join(newlist)
|
||||
i.menulist = list(set(menulist))
|
||||
i.save()
|
||||
return JsonResponse({"code": 1})
|
||||
elif a == 'correction':
|
||||
|
@ -4658,6 +4707,27 @@ def apitool(req):
|
|||
i.aqy = i.aqy.replace(',,', ',')
|
||||
i.save()
|
||||
return JsonResponse({"code": 1})
|
||||
elif a == 'correct_question':
|
||||
for i in Question.objects.exclude(questioncat__usecomp__partid=1):
|
||||
i.usecomps = ','+str(i.questioncat.usecomp.partid)+','
|
||||
i.save()
|
||||
return JsonResponse({"code": 1})
|
||||
elif a == 'correct_menulist':
|
||||
for i in Group.objects.all():
|
||||
if i.menulink:
|
||||
i.menulist = list(set(list(filter(None, i.menulink.split(',')))))
|
||||
i.save()
|
||||
return JsonResponse({"code": 1})
|
||||
elif a == 'correct_menuhas':
|
||||
buttons = Menu.objects.filter(type=2)
|
||||
for group in Group.objects.filter(grouptype=0):
|
||||
menulist = group.menulist
|
||||
for button in buttons:
|
||||
if button.parentid.menuid in menulist: #如果菜单在所拥有权限内
|
||||
menulist.append(button.menuid)
|
||||
group.menulist = list(set(menulist))
|
||||
group.save()
|
||||
return JsonResponse({"code": 1})
|
||||
|
||||
|
||||
def apinotice(req):
|
||||
|
@ -5399,15 +5469,14 @@ def apiquestion(req):
|
|||
companyid = getcompany(userid)
|
||||
if a == 'listall':
|
||||
x = Question.objects.filter(deletemark=1)
|
||||
a = (x.filter(usecomps__contains=',1,') | x.filter(
|
||||
usecomps__contains=','+companyid+',')).exclude(nousecomps__contains=','+companyid+',')
|
||||
a = x.exclude(nousecomps__contains=','+companyid+',').filter(Q(usecomps__contains=',1,') | Q(usecomps__contains=','+companyid+','))
|
||||
if req.GET.get('tmlx'):
|
||||
tmlx = req.GET.get('tmlx')
|
||||
a = x.filter(questioncat__link__contains=',' +
|
||||
str(tmlx)+',') | x.filter(questioncat__id=tmlx)
|
||||
a = a.filter(Q(questioncat__link__contains=',' +
|
||||
str(tmlx)+',') | Q(questioncat__id=tmlx))
|
||||
elif req.GET.get('gwlx'):
|
||||
gwlx = req.GET.get('gwlx')
|
||||
a = x.filter(station=Group.objects.get(groupid=gwlx))
|
||||
a = a.filter(station=Group.objects.get(groupid=gwlx))
|
||||
total = a.count()
|
||||
startnum, endnum = fenye(req)
|
||||
a = a.order_by('-id')[startnum:endnum].values('id', 'title', 'type', 'level', 'questioncat__id',
|
||||
|
@ -5470,7 +5539,7 @@ def apiquestion(req):
|
|||
if user.issuper == 1 or a.createuser == user:
|
||||
nl = a.nousecomps.split(',')
|
||||
nl.append(companyid)
|
||||
nl = ','+','.join(list(filter(None, nl)))+','
|
||||
nl = ','+','.join(list(set(list(filter(None, nl)))))+','
|
||||
a.nousecomps = nl
|
||||
a.save()
|
||||
return JsonResponse({"code": 1})
|
||||
|
@ -5815,8 +5884,12 @@ def apiexamtest(req):
|
|||
a = ExamTest.objects.filter(id=id).values('id', 'num', 'name', 'starttime', 'endtime', 'duration', 'totalscore',
|
||||
'passscore', 'exampaper__total', 'createtime', 'state', 'exampaper__name', 'createuser__name', 'type', 'qrcode')[0]
|
||||
objs = ExamTestDetail.objects.filter(examtest__id=id).order_by('-score').values(
|
||||
'id', 'user__name', 'user__ubelongpart__partname', 'took', 'score', 'ison', 'passcode')
|
||||
'id', 'user__name', 'user__ubelongpart__partname', 'took', 'score', 'ison', 'passcode','starttime')
|
||||
a['cjrydetail'] = list(objs)
|
||||
a['ison'] = 1
|
||||
tests = ExamTestDetail.objects.filter(examtest__id=id,user__userid=userid)#考试记录
|
||||
if tests.exists():
|
||||
a['ison'] = tests[0].ison
|
||||
return HttpResponse(json.dumps(a, cls=MyEncoder), content_type="application/json")
|
||||
elif a == 'detailtm':
|
||||
id = req.GET.get('id')
|
||||
|
|
Loading…
Reference in New Issue