wushaodong 4 жил өмнө
parent
commit
7dd2a2a631

+ 1 - 0
apps/account/models.py

@@ -77,6 +77,7 @@ class User(AbstractBaseUser, PermissionsMixin):
             ('browse_user', u'查看'),
             ('add_user', u'添加'),
             ('delete_user', u'删除'),
+            ('check_user', u'入职审核'),
         ]
 
     def __unicode__(self):

+ 5 - 1
apps/account/serializers.py

@@ -27,9 +27,11 @@ class JWTSerializer(JSONWebTokenSerializer):
 
             if user:
                 if not user.is_active:
-                    msg = u'禁用帐户,禁止登录'
+                    msg = u'禁用帐户,禁止登录'
                     BizLog.objects.addnew(user,  BizLog.INSERT,u'禁用帐户[%s]尝试登录系统,IP[%s]' % (user.username, get_remote_addr(self.request)))
                     raise serializers.ValidationError(msg)
+                if user.status != User.INSERVICE:
+                    raise serializers.ValidationError('当前账号非在职状态,禁止登录!')
 
                 payload = jwt_payload_handler(user)
                 BizLog.objects.addnew(user, BizLog.INSERT,
@@ -54,6 +56,8 @@ class EmployeeSerializer(serializers.ModelSerializer):
     agent_text = serializers.CharField(source='agent.name', read_only=True)
     store_text = serializers.CharField(source='store.name', read_only=True)
     gender_text = serializers.CharField(source='get_gender_display', read_only=True)
+    status_text = serializers.CharField(source='get_status_display', read_only=True)
+    check_user_text = serializers.CharField(source='check_user.name', read_only=True)
     groups = serializers.SerializerMethodField()
     group_ids = serializers.PrimaryKeyRelatedField(source='groups', many=True, read_only=True)
     manager_barnchs = serializers.SerializerMethodField()

+ 19 - 1
apps/account/views.py

@@ -83,14 +83,32 @@ class EmployeeViewSet(CustomModelViewSet):
                               u'删除账号[%s],id=%d' % (instance.username, instance.id))
         super(EmployeeViewSet, self).perform_destroy(instance)
 
+    @action(methods=['post'], detail=True)
+    def join(self, request, pk):
+        try:
+            with transaction.atomic():
+                instance = self.get_object()
+                instance.check_user = request.user
+                instance.status = User.INSERVICE
+                instance.save()
+                BizLog.objects.addnew(self.request.user, BizLog.INSERT,
+                                      u'员工[%s]入职,id=%d' % (instance.name, instance.id))
+            return response_ok()
+        except Exception as e:
+            traceback.print_exc()
+            return response_error(u'入职失败')
+
     @action(methods=['post'], detail=True)
     def branch(self, request, pk):
         data = json.loads(request.POST.get('sotres'))
         try:
             with transaction.atomic():
+                instance = self.get_object()
                 ManageStoreUser.objects.filter(manage_user_id=pk).delete()
                 for row in data:
                     ManageStoreUser.objects.create(store_id=row, manage_user_id=pk)
+                BizLog.objects.addnew(self.request.user, BizLog.INSERT,
+                                      u'设置账号[%s]管理门店,id=%d' % (instance.username, instance.id),data)
             return response_ok()
         except Exception as e:
             traceback.print_exc()
@@ -194,7 +212,7 @@ class StoreTreeView(APIView):
             stores = Store.objects.filter(agent_id=agent['id'], enable=True).values('id','name')
             for store in stores:
                 manage_store = ManageStoreUser.objects.filter(manage_user_id=id, store_id=store['id']).first()
-                checked = True and manage_store or False
+                checked = manage_store and True or False
                 store_item = {
                     'title': store['name'],
                     'id': store['id'],

+ 17 - 8
uis/views/employee/edit.html

@@ -68,6 +68,15 @@
                                     </select>
                                 </div>
                             </div>
+                            <div class="layui-col-lg6">
+                                <label class="layui-form-label">在职状态:</label>
+                                <div class="layui-input-block">
+                                    <select name="status" style="width: 40px;">
+                                        <option value="2" selected>在职</option>
+                                        <option value="3">离职</option>
+                                    </select>
+                                </div>
+                            </div>
                             <div class="layui-col-lg6">
                                 <div class="layui-col-lg6">
                                     <label class="layui-form-label"><font color='red' size="4">*</font>代理商:</label>
@@ -147,7 +156,7 @@
             }
         }
         form.render(null, 'component-form-element');
-        var stores= []
+        var stores = []
         admin.req({
             url: '/agent/dict/',
             done: function (res) {
@@ -168,14 +177,14 @@
         });
         var onAgentChange = function (value) {
             var store_node = $('#id_stores');
-                for (var i in stores) {
-                    var pid = stores[i].id;
-                    var stores_value = stores[i].name;
-                    if(pid == value) {
-                        store_node.append("<option value='" + pid + "'>" + stores_value + "</option>");
-                    }
+            for (var i in stores) {
+                var pid = stores[i].id;
+                var stores_value = stores[i].name;
+                if (pid == value) {
+                    store_node.append("<option value='" + pid + "'>" + stores_value + "</option>");
                 }
-                form.render();
+            }
+            form.render();
         }
         formSelects.config('selectGroup', {
             beforeSuccess: function (eid, url, searchVal, result) {

+ 32 - 4
uis/views/employee/index.html

@@ -57,17 +57,21 @@
                     <table class="layui-hide" id="datagrid" lay-filter="datagrid-operate"></table>
 
                     <script type="text/html" id="datagrid-operate-bar">
+                        <div class="layui-btn-group">
+                            <a class="layui-btn layui-btn-xs" lay-event="join"
+                               data-permission="account.check_user">入职</a>
+                        </div>
                         <div class="layui-btn-group">
                             <a class="layui-btn layui-btn-xs" lay-event="edit"
-                               data-permission="employee.add_employee">修改</a>
+                               data-permission="account.add_employee">修改</a>
                         </div>
                         <div class="layui-btn-group">
                             <a class="layui-btn layui-btn-xs layui-btn-danger" lay-event="delete"
-                               data-permission="employee.delete_employee">删除</a>
+                               data-permission="account.delete_employee">删除</a>
                         </div>
                         <div class="layui-btn-group">
                             <a class="layui-btn layui-btn-xs layui-btn-warm"
-                               data-permission="employee.add_employee"
+                               data-permission="account.add_employee"
                                lay-event="manage_range">管理门店</a>
                         </div>
                     </script>
@@ -101,7 +105,10 @@
                 , {field: 'enable_text', title: '是否在用', width: 100}
                 , {field: 'groups', title: '权限组', width: 200}
                 , {field: 'manager_barnchs', title: '管理门店', width: 200}
-                , {width: 200, align: 'center', fixed: 'right', toolbar: '#datagrid-operate-bar'}
+                , {field: 'status_text', title: '状态', width: 80}
+                , {field: 'check_user_text', title: '入职审核人', width: 120}
+                , {field: 'date_joined', title: '入职时间', width: 180}
+                , {width: 250, align: 'center', fixed: 'right', toolbar: '#datagrid-operate-bar'}
             ]]
             , page: true
             , height: 'full-108'
@@ -137,6 +144,10 @@
                     content: 'edit.html?id=' + data.id
                 });
             } else if (obj.event === 'delete') {
+                if (data.status > 1) {
+                    layer.msg('当前状态禁止删除!')
+                    return false
+                }
                 layer.confirm('确定要删除吗?', function (index) {
                     layer.close(index);
                     layui.admin.req({
@@ -149,6 +160,23 @@
                     });
                 });
             }
+            else if (obj.event === 'join') {
+                if (data.status > 1) {
+                    layer.msg('该员工已入职!')
+                    return false
+                }
+                layer.confirm('确定要入职该员工吗?', function (index) {
+                    layer.close(index);
+                    layui.admin.req({
+                        notice: true
+                        , url: '/account/employee/' + data.id + '/join/'
+                        , type: 'post'
+                        , done: function (res) {
+                            table.reload('datagrid', {});
+                        }
+                    });
+                });
+            }
             else if (obj.event === 'manage_range') {
                 layer.open({
                     type: 2,