add feature
This commit is contained in:
parent
ed2b213592
commit
1d4417d438
|
@ -33,10 +33,23 @@ class VerifyCode(models.Model):
|
||||||
return self.phone + ':' + self.code
|
return self.phone + ':' + self.code
|
||||||
|
|
||||||
|
|
||||||
|
NOTICE_TYPE_CHOICES = (
|
||||||
|
(0, 'normal'),
|
||||||
|
(1, 'reply'),
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class Notice(models.Model):
|
class Notice(models.Model):
|
||||||
id = models.UUIDField('id', primary_key=True, default=uuid.uuid4)
|
id = models.UUIDField('id', primary_key=True, default=uuid.uuid4)
|
||||||
user = models.ForeignKey(User, on_delete=models.CASCADE)
|
user = models.ForeignKey(User, on_delete=models.CASCADE)
|
||||||
|
type = models.IntegerField(
|
||||||
|
'category', choices=NOTICE_TYPE_CHOICES, default=0)
|
||||||
content = models.CharField('内容', max_length=256, null=False)
|
content = models.CharField('内容', max_length=256, null=False)
|
||||||
|
app = models.CharField('app', max_length=256, null=True, blank=True)
|
||||||
|
model = models.CharField('model', max_length=256, null=True, blank=True)
|
||||||
|
field = models.CharField('field', max_length=256, null=True, blank=True)
|
||||||
|
record_id = models.CharField('record_id', max_length=256, null=True, blank=True)
|
||||||
|
record_value = models.CharField('record_value', max_length=256, null=True, blank=True)
|
||||||
is_read = models.BooleanField('是否阅读', default=False)
|
is_read = models.BooleanField('是否阅读', default=False)
|
||||||
added = models.DateTimeField(auto_now_add=True)
|
added = models.DateTimeField(auto_now_add=True)
|
||||||
updated = models.DateTimeField(auto_now=True)
|
updated = models.DateTimeField(auto_now=True)
|
||||||
|
@ -48,6 +61,14 @@ class Notice(models.Model):
|
||||||
now = datetime.datetime.now()
|
now = datetime.datetime.now()
|
||||||
return now <= self.timeouted
|
return now <= self.timeouted
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def create_normal_notice(cls, user_id, content):
|
||||||
|
return Notice.objects.create(user_id=user_id, content=content)
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def create_reply_notice(cls, user_id, content, app, model, field, record_id, record_value):
|
||||||
|
return Notice.objects.create(user_id=user_id, content=content, app=app, model=model, record_id=record_id, record_value=record_value)
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.content + ':' + self.user.username
|
return self.content + ':' + self.user.username
|
||||||
|
|
||||||
|
|
|
@ -55,7 +55,7 @@
|
||||||
var option2 = {
|
var option2 = {
|
||||||
title: {
|
title: {
|
||||||
text: '政务新媒体区域分布',
|
text: '政务新媒体区域分布',
|
||||||
subtext: '省直总数{{total1}},市州总数{{total2}},县区总数{{total3}}',
|
subtext: '省直部门:{{total1}},市直部门:{{total2}},县区政府:{{total3}}',
|
||||||
subtextStyle: {
|
subtextStyle: {
|
||||||
fontSize: 16,
|
fontSize: 16,
|
||||||
},
|
},
|
||||||
|
|
|
@ -13,7 +13,9 @@ urlpatterns = [
|
||||||
path('password/recovery/', views.password_recover_step_one, name='polls_password_recovery'),
|
path('password/recovery/', views.password_recover_step_one, name='polls_password_recovery'),
|
||||||
path('password/recovery/save/', views.password_recover_step_two, name='polls_password_recovery_save'),
|
path('password/recovery/save/', views.password_recover_step_two, name='polls_password_recovery_save'),
|
||||||
path('notices/list/', views.notices, name='polls_notices'),
|
path('notices/list/', views.notices, name='polls_notices'),
|
||||||
|
path('notices/top/', views.notice_top, name='polls_notice_top'),
|
||||||
path('notices/read/', views.read_notice, name='polls_read_notice'),
|
path('notices/read/', views.read_notice, name='polls_read_notice'),
|
||||||
|
path('notices/reply', views.reply_notice, name='polls_reply_notice'),
|
||||||
path('medias/create/', views.create_media, name='polls_add_media'),
|
path('medias/create/', views.create_media, name='polls_add_media'),
|
||||||
path('medias/update/', views.update_media, name='polls_update_media'),
|
path('medias/update/', views.update_media, name='polls_update_media'),
|
||||||
path('medias/list/', views.medias, name='polls_medias'),
|
path('medias/list/', views.medias, name='polls_medias'),
|
||||||
|
@ -27,7 +29,7 @@ urlpatterns = [
|
||||||
path('tasks/create/', views.create_task, name='polls_tasks_create'),
|
path('tasks/create/', views.create_task, name='polls_tasks_create'),
|
||||||
path('tasks/create_test/', views.create_test_task, name='polls_tasks_create_test'),
|
path('tasks/create_test/', views.create_test_task, name='polls_tasks_create_test'),
|
||||||
path('groups/list/', views.groups, name='polls_groups_list'),
|
path('groups/list/', views.groups, name='polls_groups_list'),
|
||||||
path('group/test-room/', views.room, name='polls_group_test_room'),
|
path('groups/test-room/', views.room, name='polls_group_test_room'),
|
||||||
path('compartments/list/', views.compartments, name='polls_compartments_list'),
|
path('compartments/list/', views.compartments, name='polls_compartments_list'),
|
||||||
path('organizations/list/', views.organizations, name='polls_organizations_list'),
|
path('organizations/list/', views.organizations, name='polls_organizations_list'),
|
||||||
]
|
]
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
from .user import index, status_500, status_401, polls_login, send_code, register_step_one, register_step_two, password_recover_step_one, password_recover_step_two
|
from .user import index, status_500, status_401, polls_login, send_code, register_step_one, register_step_two, password_recover_step_one, password_recover_step_two
|
||||||
from .notice import notices, read_notice
|
from .notice import notices, notice_top, read_notice, reply_notice
|
||||||
from .media import medias, my_medias, create_media, update_media, media_detail
|
from .media import medias, my_medias, create_media, update_media, media_detail
|
||||||
from .news import news_list, news_top, news_detail
|
from .news import news_list, news_top, news_detail
|
||||||
from .monitor import monitor_statistics
|
from .monitor import monitor_statistics
|
||||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -1,6 +1,7 @@
|
||||||
from django.shortcuts import render
|
from django.shortcuts import render
|
||||||
from django.http import HttpResponse, JsonResponse
|
from django.http import HttpResponse, JsonResponse
|
||||||
from django.views.decorators.csrf import csrf_exempt
|
from django.views.decorators.csrf import csrf_exempt
|
||||||
|
from django.apps import apps
|
||||||
import datetime
|
import datetime
|
||||||
|
|
||||||
from polls.decorators import polls_login_required
|
from polls.decorators import polls_login_required
|
||||||
|
@ -10,6 +11,24 @@ from django.core.exceptions import ObjectDoesNotExist
|
||||||
@csrf_exempt
|
@csrf_exempt
|
||||||
@polls_login_required
|
@polls_login_required
|
||||||
def notices(request):
|
def notices(request):
|
||||||
|
if request.method == 'POST':
|
||||||
|
return HttpResponse(status=405)
|
||||||
|
id = request.user.id
|
||||||
|
notices = Notice.objects.filter(user__id=id,is_read=False)
|
||||||
|
results = []
|
||||||
|
for o in notices:
|
||||||
|
result = dict()
|
||||||
|
result['id'] = o.id
|
||||||
|
result['type'] = o.type
|
||||||
|
result['content'] = o.content
|
||||||
|
result['added'] = o.added.strftime("%Y-%m-%d %H:%M:%S")
|
||||||
|
results.append(result)
|
||||||
|
return JsonResponse({'status': 'success', 'message':results}, safe=False)
|
||||||
|
|
||||||
|
|
||||||
|
@csrf_exempt
|
||||||
|
@polls_login_required
|
||||||
|
def notice_top(request):
|
||||||
if request.method == 'POST':
|
if request.method == 'POST':
|
||||||
return HttpResponse(status=405)
|
return HttpResponse(status=405)
|
||||||
id = request.user.id
|
id = request.user.id
|
||||||
|
@ -18,10 +37,11 @@ def notices(request):
|
||||||
for o in notices:
|
for o in notices:
|
||||||
result = dict()
|
result = dict()
|
||||||
result['id'] = o.id
|
result['id'] = o.id
|
||||||
|
result['type'] = o.type
|
||||||
result['content'] = o.content
|
result['content'] = o.content
|
||||||
result['added'] = o.added.strftime("%Y-%m-%d %H:%M:%S")
|
result['added'] = o.added.strftime("%Y-%m-%d %H:%M:%S")
|
||||||
results.append(result)
|
results.append(result)
|
||||||
return JsonResponse(results, safe=False)
|
return JsonResponse({'status': 'success', 'message':results}, safe=False)
|
||||||
|
|
||||||
|
|
||||||
@csrf_exempt
|
@csrf_exempt
|
||||||
|
@ -38,5 +58,25 @@ def read_notice(request):
|
||||||
notice.is_read = True
|
notice.is_read = True
|
||||||
notice.save()
|
notice.save()
|
||||||
return JsonResponse({'status': 'success'})
|
return JsonResponse({'status': 'success'})
|
||||||
|
except ObjectDoesNotExist:
|
||||||
|
return JsonResponse({'status': 'error', 'message': '通知ID错误'})
|
||||||
|
|
||||||
|
|
||||||
|
@csrf_exempt
|
||||||
|
@polls_login_required
|
||||||
|
def reply_notice(request):
|
||||||
|
if request.method == 'GET':
|
||||||
|
return HttpResponse(status=405)
|
||||||
|
id = request.user.id
|
||||||
|
notice_id = request.POST.get('notice_id')
|
||||||
|
if not notice_id:
|
||||||
|
return JsonResponse({'status': 'error', 'message': '通知ID错误'})
|
||||||
|
try:
|
||||||
|
notice = Notice.objects.get(id=notice_id)
|
||||||
|
ReplyModel = apps.get_model(notice.app, notice.model)
|
||||||
|
m = ReplyModel.objects.get(pk=notice.record_id)
|
||||||
|
setattr(m, notice.field, notice.value)
|
||||||
|
m.save([notice.field])
|
||||||
|
return JsonResponse({'status': 'success'})
|
||||||
except ObjectDoesNotExist:
|
except ObjectDoesNotExist:
|
||||||
return JsonResponse({'status': 'error', 'message': '通知ID错误'})
|
return JsonResponse({'status': 'error', 'message': '通知ID错误'})
|
|
@ -5,7 +5,7 @@ from django.views.decorators.csrf import csrf_exempt
|
||||||
from django_token.models import Token
|
from django_token.models import Token
|
||||||
import datetime
|
import datetime
|
||||||
|
|
||||||
from polls.models import VerifyCode
|
from polls.models import Notice, VerifyCode
|
||||||
from polls.utils import generate_code, sent_sms_code
|
from polls.utils import generate_code, sent_sms_code
|
||||||
from dashboard.models import Organization, Userprofile
|
from dashboard.models import Organization, Userprofile
|
||||||
|
|
||||||
|
@ -141,6 +141,10 @@ def register_step_two(request):
|
||||||
|
|
||||||
u = UserModel.objects.create_user(username=phone, password=password)
|
u = UserModel.objects.create_user(username=phone, password=password)
|
||||||
profile = Userprofile.objects.create(name=name, user=u, status=0, unit=unit, department=department, post=post)
|
profile = Userprofile.objects.create(name=name, user=u, status=0, unit=unit, department=department, post=post)
|
||||||
|
admins = Userprofile.objects.filter(organization__level__level=1)
|
||||||
|
for a in admins:
|
||||||
|
content = '用户%s注册了账号,请审核' % (name,)
|
||||||
|
Notice.create_reply_notice(a.user.id, content, 'dashboard', 'Userprofile', 'status', profile.id, '1')
|
||||||
return JsonResponse({'status': 'success', 'message': '注册成功'})
|
return JsonResponse({'status': 'success', 'message': '注册成功'})
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue