diff --git a/polls/templates/polls/media_statistics.html b/polls/templates/polls/media_statistics.html index 13809de..ac5ac5e 100644 --- a/polls/templates/polls/media_statistics.html +++ b/polls/templates/polls/media_statistics.html @@ -6,6 +6,10 @@
+
+
+
+ {% endblock%} @@ -99,7 +103,7 @@ }; var option = { title: { - text: '逐月累计发文量', + text: '全省政务新媒体更新次数(逐月)', subtextStyle: { fontSize: 16, }, @@ -163,5 +167,158 @@ ] }; myChart.setOption(option); + + + var myChart2 = echarts.init(document.getElementById('chart2')); + var posList = [ + 'left', 'right', 'top', 'bottom', + 'inside', + 'insideTop', 'insideLeft', 'insideRight', 'insideBottom', + 'insideTopLeft', 'insideTopRight', 'insideBottomLeft', 'insideBottomRight' + ]; + + myChart2.configParameters = { + rotate: { + min: -90, + max: 90 + }, + align: { + options: { + left: 'left', + center: 'center', + right: 'right' + } + }, + verticalAlign: { + options: { + top: 'top', + middle: 'middle', + bottom: 'bottom' + } + }, + position: { + options: echarts.util.reduce(posList, function (map, pos) { + map[pos] = pos; + return map; + }, {}) + }, + distance: { + min: 0, + max: 100 + } + }; + + myChart2.config = { + rotate: 90, + align: 'left', + verticalAlign: 'middle', + position: 'insideBottom', + distance: 15, + onChange: function () { + var labelOption = { + normal: { + rotate: myChart2.config.rotate, + align: myChart2.config.align, + verticalAlign: myChart2.config.verticalAlign, + position: myChart2.config.position, + distance: myChart2.config.distance + } + }; + myChart2.setOption({ + series: [{ + label: labelOption + }, { + label: labelOption + }, { + label: labelOption + }, { + label: labelOption + }] + }); + } + }; + + + var labelOption = { + show: true, + position: myChart.config.position, + distance: myChart.config.distance, + align: myChart.config.align, + verticalAlign: myChart.config.verticalAlign, + rotate: myChart.config.rotate, + formatter: '{c} {name|{a}}', + fontSize: 8, + rich: { + name: { + textBorderColor: '#fff' + } + } + }; + var option = { + title: { + text: '全省政务新媒体开设数量(逐月)', + subtextStyle: { + fontSize: 16, + }, + left: 'center' + }, + color: ['#003366', '#006699', '#4cabce', '#e5323e', '#ccc'], + tooltip: { + trigger: 'axis', + axisPointer: { + type: 'shadow' + } + }, + legend: { + top: '10%', + data: ['微信', '微博', '头条', '抖音', '其它'] + }, + xAxis: [ + { + type: 'category', + axisTick: {show: false}, + data: ['6月','7月', '8月', '9月', '10月'] + } + ], + yAxis: [ + { + type: 'value' + } + ], + series: [ + { + name: '微信', + type: 'bar', + barGap: 0, + label: labelOption, + data: [40, 80, 44, 36, 78] + }, + { + name: '微博', + type: 'bar', + label: labelOption, + data: [25, 14, 41, 10, 18] + }, + { + name: '头条', + type: 'bar', + label: labelOption, + data: [21, 32, 21, 14, 19] + }, + { + name: '抖音', + type: 'bar', + label: labelOption, + data: [98, 77, 101, 99, 40] + }, + { + name: '其他', + type: 'bar', + label: labelOption, + data: [25, 32, 46, 20, 8] + } + ] + }; + myChart2.setOption(option); {% endblock %} \ No newline at end of file diff --git a/polls/views/__pycache__/message.cpython-38.pyc b/polls/views/__pycache__/message.cpython-38.pyc index 18b0370..3b3ae63 100644 Binary files a/polls/views/__pycache__/message.cpython-38.pyc and b/polls/views/__pycache__/message.cpython-38.pyc differ diff --git a/polls/views/__pycache__/notice.cpython-38.pyc b/polls/views/__pycache__/notice.cpython-38.pyc index f7346d5..1778a7f 100644 Binary files a/polls/views/__pycache__/notice.cpython-38.pyc and b/polls/views/__pycache__/notice.cpython-38.pyc differ diff --git a/polls/views/__pycache__/task.cpython-38.pyc b/polls/views/__pycache__/task.cpython-38.pyc index 977792f..d9b1afd 100644 Binary files a/polls/views/__pycache__/task.cpython-38.pyc and b/polls/views/__pycache__/task.cpython-38.pyc differ diff --git a/polls/views/__pycache__/user.cpython-38.pyc b/polls/views/__pycache__/user.cpython-38.pyc index 96b34c1..e3201d2 100644 Binary files a/polls/views/__pycache__/user.cpython-38.pyc and b/polls/views/__pycache__/user.cpython-38.pyc differ diff --git a/polls/views/message.py b/polls/views/message.py index 921689c..17c607b 100644 --- a/polls/views/message.py +++ b/polls/views/message.py @@ -16,7 +16,7 @@ def last_messages(request): return HttpResponse(status=405) id = request.user.id group_id = request.GET.get('group_id') - messages = Message.objects.filter(send_to_id=group_id) + messages = Message.objects.filter(send_to_id=group_id)[:100] results = [] for o in messages: result = dict() diff --git a/polls/views/notice.py b/polls/views/notice.py index 4749b35..4375358 100644 --- a/polls/views/notice.py +++ b/polls/views/notice.py @@ -71,6 +71,7 @@ def read_notice(request): def detail_notice(request, notice_id): if request.method == 'POST': return HttpResponse(status=405) + print(notice_id, (not notice_id)) if not notice_id: return JsonResponse({'status': 'error', 'message': '通知ID错误'}) try: @@ -79,23 +80,24 @@ def detail_notice(request, notice_id): results['id'] = notice.id results['category'] = notice.type results['content'] = notice.content - ReplyModel = apps.get_model(notice.app, notice.model) - m = ReplyModel.objects.get(pk=notice.record_id) - detail = dict() - detail['id'] = m.id - detail['code'] = m.code - if notice.model == 'Weixin': - detail['type'] = 'weixin' - elif notice.model == 'Weibo': - detail['type'] = 'weibo' - elif notice.model == 'Toutiao': - detail['type'] = 'Toutiao' - elif notice.model == 'Douyin': - detail['type'] = 'douyin' - else: - detail['type'] = 'qita' - detail['status'] = m.status - results['media'] = detail + if notice.type == 1: + ReplyModel = apps.get_model(notice.app, notice.model) + m = ReplyModel.objects.get(pk=notice.record_id) + detail = dict() + detail['id'] = m.id + detail['code'] = m.code + if notice.model == 'Weixin': + detail['type'] = 'weixin' + elif notice.model == 'Weibo': + detail['type'] = 'weibo' + elif notice.model == 'Toutiao': + detail['type'] = 'Toutiao' + elif notice.model == 'Douyin': + detail['type'] = 'douyin' + else: + detail['type'] = 'qita' + results['media'] = detail + detail['status'] = m.status results['added'] = notice.added.strftime("%Y-%m-%d %H:%M:%S") results['updated'] = notice.updated.strftime("%Y-%m-%d %H:%M:%S") return JsonResponse({'status': 'success', 'message': results}) diff --git a/polls/views/task.py b/polls/views/task.py index 4f7b0de..a4b1876 100644 --- a/polls/views/task.py +++ b/polls/views/task.py @@ -10,6 +10,7 @@ from polls.models import Message, Notice, Task, TaskAddition from polls.tasks import process_task from django.core.exceptions import ObjectDoesNotExist from polls.utils import model_to_dict, queryset_to_list, parse +from dashboard.models import Group, Group_user, Userprofile @csrf_exempt @@ -65,6 +66,13 @@ def create_task(request): if picture: pictureAddtion = TaskAddition.objects.create( task=task, category=2, image=picture) + + for group in groups: + users = Group_user.objects.filter(group=group) + for u in users: + g = Group.objects.get(id=group) + content = '用户%s在群组“%s”发布了任务,请查收消息' % (profile.name, g.name) + Notice.create_normal_notice(u.user_id, content) return JsonResponse({'status': 'success'}) @@ -88,12 +96,19 @@ def get_task(request): result['content'] = task.content result['total'] = task.total() result['record'] = task.record() - # records = task.records() - # n = [] - # for r in records: - # p = dict() - # profile = r.user.profile - # print(profile) + result['isOwner'] = task.created_by_id == id + records = task.records() + n = [] + for r in records: + p = dict() + p['id'] = r.id + p['added'] = task.added.strftime("%Y-%m-%d %H:%M:%S") + p['status'] = r.status + profile = Userprofile.objects.filter(user_id=r.user_id).first() + p['name'] = profile.name + p['organization'] = profile.organization.name + n.append(p) + result['records'] = n result['added'] = task.added.strftime("%Y-%m-%d %H:%M:%S") return JsonResponse({'status': 'success', 'message': result}) diff --git a/polls/views/user.py b/polls/views/user.py index cd4f7d4..7ad27dd 100644 --- a/polls/views/user.py +++ b/polls/views/user.py @@ -156,6 +156,7 @@ def password_recover_step_one(request): if not phone: return JsonResponse({'status': 'error', 'message': '手机号不正确'}) code = request.POST.get('code') + print(code) if not code: return JsonResponse({'status': 'error', 'message': '验证码不正确'}) verify_code = VerifyCode.objects.filter(