um lines-num-old">
+
+ return response(200, 'Operator Update Success', u'操作员更新成功')
+
+
+@logit
+def operator_list(request):
+ page = request.POST.get('page', 1)
+ num = request.POST.get('num', 20)
+
+ admin_id = request.session.get('admin_id')
+
+ try:
+ administrator = AdministratorInfo.objects.get(admin_id=admin_id, user_status=AdministratorInfo.ACTIVATED, status=True)
+ except AdministratorInfo.DoesNotExist:
+ return response(AdministratorStatusCode.ADMINISTRATOR_NOT_FOUND)
+
+ optors = OperatorInfo.objects.filter(brand_id=administrator.brand_id, user_status=OperatorInfo.ACTIVATED, status=True)
+ optors, left = pagination(optors, page, num)
+ optors = [optor.data for optor in optors]
+
+ return response(200, 'Get Operator List Success', u'获取操作员列表成功', {
+ 'optors': optors,
+ 'left': left,
+ })
@@ -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 |
+] |
@@ -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 |
+ ] |
@@ -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) |
@@ -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): |