um lines-num-old"> 117
+
118
+    return response(200, 'Operator Update Success', u'操作员更新成功')
119
+
120
+
121
+@logit
122
+def operator_list(request):
123
+    page = request.POST.get('page', 1)
124
+    num = request.POST.get('num', 20)
125
+
126
+    admin_id = request.session.get('admin_id')
127
+
128
+    try:
129
+        administrator = AdministratorInfo.objects.get(admin_id=admin_id, user_status=AdministratorInfo.ACTIVATED, status=True)
130
+    except AdministratorInfo.DoesNotExist:
131
+        return response(AdministratorStatusCode.ADMINISTRATOR_NOT_FOUND)
132
+
133
+    optors = OperatorInfo.objects.filter(brand_id=administrator.brand_id, user_status=OperatorInfo.ACTIVATED, status=True)
134
+    optors, left = pagination(optors, page, num)
135
+    optors = [optor.data for optor in optors]
136
+
137
+    return response(200, 'Get Operator List Success', u'获取操作员列表成功', {
138
+        'optors': optors,
139
+        'left': left,
140
+    })

+ 9 - 1
api/urls.py

@@ -5,7 +5,7 @@ from django_file_upload import views as file_views
5 5
 
6 6
 from account import tourguide_views
7 7
 from account import views as account_views
8
-from api import encrypt_views, mch_views
8
+from api import encrypt_views, mch_views, operator_views
9 9
 from box import views as box_views
10 10
 from geo import views as geo_views
11 11
 from group import (groupuser_views, lensman_views, tourguidegroup_views, tourguidegroupadmin_views,
@@ -189,6 +189,7 @@ urlpatterns += [
189 189
 # Kodo
190 190
 urlpatterns += [
191 191
     url(r'^login$', mch_views.login_api, name='login_api'),
192
+    url(r'^admin/login$', mch_views.admin_login_api, name='admin_login_api'),
192 193
 ]
193 194
 
194 195
 urlpatterns += [
@@ -232,3 +233,10 @@ urlpatterns += [
232 233
     url(r'^tj/consumer$', tj_views.tj_consumer, name='tj_consumer'),  # 统计数据(消费者维度)
233 234
     url(r'^tj/generate$', tj_views.tj_generate, name='tj_generate'),  # 统计数据生成
234 235
 ]
236
+
237
+urlpatterns += [
238
+    url(r'^operator/add$', operator_views.operator_add, name='operator_add'),
239
+    url(r'^operator/delete$', operator_views.operator_delete, name='operator_delete'),
240
+    url(r'^operator/update$', operator_views.operator_update, name='operator_update'),
241
+    url(r'^operator/list$', operator_views.operator_list, name='operator_list'),
242
+]

+ 25 - 0
mch/migrations/0018_auto_20180514_1519.py

@@ -0,0 +1,25 @@
1
+# -*- coding: utf-8 -*-
2
+# Generated by Django 1.11.11 on 2018-05-14 07:19
3
+from __future__ import unicode_literals
4
+
5
+from django.db import migrations, models
6
+
7
+
8
+class Migration(migrations.Migration):
9
+
10
+    dependencies = [
11
+        ('mch', '0017_auto_20180508_1830'),
12
+    ]
13
+
14
+    operations = [
15
+        migrations.AlterField(
16
+            model_name='administratorinfo',
17
+            name='user_status',
18
+            field=models.IntegerField(choices=[(1, '\u5df2\u6fc0\u6d3b'), (2, '\u5df2\u7981\u7528'), (3, '\u5df2\u5220\u9664')], db_index=True, default=1, help_text='\u7ba1\u7406\u5458\u72b6\u6001', verbose_name='user_status'),
19
+        ),
20
+        migrations.AlterField(
21
+            model_name='operatorinfo',
22
+            name='user_status',
23
+            field=models.IntegerField(choices=[(1, '\u5df2\u6fc0\u6d3b'), (2, '\u5df2\u7981\u7528'), (3, '\u5df2\u5220\u9664')], db_index=True, default=1, help_text='\u64cd\u4f5c\u5458\u72b6\u6001', verbose_name='user_status'),
24
+        ),
25
+    ]

+ 12 - 0
mch/models.py

@@ -9,10 +9,12 @@ from shortuuidfield import ShortUUIDField
9 9
 class AdministratorInfo(BaseModelMixin):
10 10
     ACTIVATED = 1
11 11
     DISABLED = 2
12
+    DELETED = 3
12 13
 
13 14
     USER_STATUS_TUPLE = (
14 15
         (ACTIVATED, u'已激活'),
15 16
         (DISABLED, u'已禁用'),
17
+        (DELETED, u'已删除'),
16 18
     )
17 19
 
18 20
     admin_id = ShortUUIDField(_(u'admin_id'), max_length=32, blank=True, null=True, help_text=u'管理员唯一标识', db_index=True, unique=True)
@@ -39,10 +41,12 @@ class AdministratorInfo(BaseModelMixin):
39 41
 class OperatorInfo(BaseModelMixin):
40 42
     ACTIVATED = 1
41 43
     DISABLED = 2
44
+    DELETED = 3
42 45
 
43 46
     USER_STATUS_TUPLE = (
44 47
         (ACTIVATED, u'已激活'),
45 48
         (DISABLED, u'已禁用'),
49
+        (DELETED, u'已删除'),
46 50
     )
47 51
 
48 52
     operator_id = ShortUUIDField(_(u'operator_id'), max_length=32, blank=True, null=True, help_text=u'操作员唯一标识', db_index=True, unique=True)
@@ -65,6 +69,14 @@ class OperatorInfo(BaseModelMixin):
65 69
     def __unicode__(self):
66 70
         return u'{}-{}'.format(self.name, self.phone)
67 71
 
72
+    @property
73
+    def data(self):
74
+        return {
75
+            'operator_id': self.operator_id,
76
+            'phone': self.phone,
77
+            'name': self.name,
78
+        }
79
+
68 80
 
69 81
 class BrandInfo(BaseModelMixin):
70 82
     brand_id = ShortUUIDField(_(u'brand_id'), max_length=32, help_text=u'品牌唯一标识', db_index=True, unique=True)

+ 21 - 4
utils/error/errno_utils.py

@@ -69,13 +69,30 @@ class TourGuideStatusCode(BaseStatusCode):
69 69
     TOURGUIDE_NOT_ACTIVATED = StatusCodeField(400115, 'Tour Guide Not Activated', description=u'导游帐号未激活')
70 70
 
71 71
 
72
-class OperatorStatusCode(BaseStatusCode):
72
+class AdministratorStatusCode(BaseStatusCode):
73 73
     """ 操作员相关错误码 4002xx """
74
-    OPERATOR_NOT_FOUND = StatusCodeField(400201, 'Operator Not Found', description=u'操作员不存在')
74
+    ADMINISTRATOR_NOT_FOUND = StatusCodeField(400201, 'Administrator Not Found', description=u'管理员不存在')
75
+    # 密码
76
+    ADMINISTRATOR_PASSWORD_ERROR = StatusCodeField(400202, 'Administrator Password Error', description=u'管理员密码错误')
77
+    # 手机号
78
+    ADMINISTRATOR_PHONE_ALREADY_EXISTS = StatusCodeField(400205, 'Administrator Phone Already Exists', description=u'管理员手机号已经存在')
79
+    # 状态
80
+    ADMINISTRATOR_NOT_ACTIVATED = StatusCodeField(400215, 'Administrator Not Activated', description=u'管理员未激活')
81
+    ADMINISTRATOR_HAS_DISABLED = StatusCodeField(400216, 'Administrator Has Disabled', description=u'管理员已禁用')
82
+    ADMINISTRATOR_HAS_DELETED = StatusCodeField(400217, 'Administrator Has Deleted', description=u'管理员已删除')
83
+
84
+
85
+class OperatorStatusCode(BaseStatusCode):
86
+    """ 操作员相关错误码 4003xx """
87
+    OPERATOR_NOT_FOUND = StatusCodeField(400301, 'Operator Not Found', description=u'操作员不存在')
75 88
     # 密码
76
-    OPERATOR_PASSWORD_ERROR = StatusCodeField(400202, 'Operator Password Error', description=u'操作员密码错误')
89
+    OPERATOR_PASSWORD_ERROR = StatusCodeField(400302, 'Operator Password Error', description=u'操作员密码错误')
90
+    # 手机号
91
+    OPERATOR_PHONE_ALREADY_EXISTS = StatusCodeField(400305, 'Operator Phone Already Exists', description=u'操作员手机号已经存在')
77 92
     # 状态
78
-    OPERATOR_NOT_ACTIVATED = StatusCodeField(400215, 'Operator Not Activated', description=u'操作员未激活')
93
+    OPERATOR_NOT_ACTIVATED = StatusCodeField(400315, 'Operator Not Activated', description=u'操作员未激活')
94
+    OPERATOR_HAS_DISABLED = StatusCodeField(400316, 'Operator Has Disabled', description=u'操作员已禁用')
95
+    OPERATOR_HAS_DELETED = StatusCodeField(400317, 'Operator Has Deleted', description=u'操作员已删除')
79 96
 
80 97
 
81 98
 class UserStatusCode(BaseStatusCode):

Fix Bug: created_at format error · a02504cc21 - Gogs: Go Git Service

Fix Bug: created_at format error

Brightcells 9 年之前
父节点
当前提交
a02504cc21
共有 1 个文件被更改,包括 3 次插入2 次删除
  1. 3 2
      group/views.py

+ 3 - 2
group/views.py

@@ -892,7 +892,7 @@ def pai2_home_api(request):
892 892
     #     offset=0,
893 893
     #     rows=settings.PAI2_HOME_MAX_ROWS,
894 894
     # ))
895
-    # rows = cursor.fetchall
895
+    # rows = cursor.fetchall()
896 896
 
897 897
     # 使用 records 执行原生 SQL 语句,获取首页照片列表
898 898
     rows = db.query(PAI2_HOME_API.format(
@@ -943,7 +943,8 @@ def pai2_home_api(request):
943 943
         'photo_thumbnail2_url': img_url(row['photo_thumbnail2_path']),
944 944
         'photo_share_url': share_url(row['photo_id']),
945 945
         'thumbup': get_group_photo_thumbup_flag(row['photo_id'], user_id),
946
-        'porder': get_lensman_order_record(row['photo_id'], user_id) if row['photo_from'] == GroupPhotoInfo.SESSION_GROUP else {}
946
+        'porder': get_lensman_order_record(row['photo_id'], user_id) if row['photo_from'] == GroupPhotoInfo.SESSION_GROUP else {},
947
+        'created_at': '{}Z'.format(row['created_at']),
947 948
     }) for row in rows]
948 949
 
949 950
     return JsonResponse({