Browse Source

撤回进度

wushaodong 4 năm trước cách đây
mục cha
commit
6d65d75ca0

+ 32 - 13
apps/order/views.py

@@ -25,6 +25,7 @@ class GetProcessView(APIView):
 
 
     def get(self, request):
     def get(self, request):
         customer_id = request.query_params.get('customer_id')
         customer_id = request.query_params.get('customer_id')
+        back = request.query_params.get('back') == '1' # 是否撤回进度
         dispatch = request.query_params.get('dispatch')  # 分配服务人员,
         dispatch = request.query_params.get('dispatch')  # 分配服务人员,
 
 
         instance = NewCustomer.objects.filter(id=customer_id).first()
         instance = NewCustomer.objects.filter(id=customer_id).first()
@@ -43,8 +44,14 @@ class GetProcessView(APIView):
             }
             }
             return response_ok(data)
             return response_ok(data)
 
 
-        option = Option.objects.filter(type=instance.stage_progress.type, sort__gt=instance.stage_progress.sort,
-                                       enable=True).order_by('sort').first()
+        option = Option.objects.filter(type=instance.stage_progress.type,
+                                       enable=True)
+        if back:
+            # 非撤回,查询下一个进度。
+            option = option.filter(sort__lt=instance.stage_progress.sort,).order_by('-sort')
+        else:
+            option = option.filter(sort__gt=instance.stage_progress.sort,).order_by('sort')
+        option = option.first()
         if option:
         if option:
             data = {
             data = {
                 'now_process_text': instance.stage_progress.name,
                 'now_process_text': instance.stage_progress.name,
@@ -118,18 +125,30 @@ class OrderViewSet(CustomModelViewSet):
     @action(methods=['post'], detail=True)
     @action(methods=['post'], detail=True)
     def uncheck(self, request, pk):
     def uncheck(self, request, pk):
         # 撤销进度审核
         # 撤销进度审核
+        stage_progress = request.POST.get('stage_progress')
+        reason = request.POST.get('reason')
         try:
         try:
-            instance = Order.objects.filter(id=pk).first()
-            if not instance:
-                raise CustomError('订单不存在')
-            instance.status = Order.NORMAL
-            instance.save()
-            stage_progress = Option.objects.filter(type=instance.stage_progress.type,
-                                                   sort__gt=instance.stage_progress.sort,
-                                                   enable=True).order_by('sort').first()
-            user = request.user
-            operation = u'撤销【{0}】进度审核。'.format(stage_progress.name)
-            ProgressDetails.objects.create(order=instance, user=user, operation=operation)
+            with transaction.atomic():
+                stage_progress = Option.objects.filter(id=stage_progress, enable=True).first()
+                if not stage_progress:
+                    raise CustomError('撤回进度不存在,请刷新重试!')
+                if stage_progress.sort == 1:
+                    # 撤回的进度排序为1,把订单删除
+                    instance = Order.objects.filter(id=pk).first()
+                    # TODO 删除数据库钱,先删除图片文件
+                    Upload.objects.filter(progress_details__order=instance).delete()
+                    ProgressDetails.objects.filter(order=instance).delete()
+                    instance.delete()
+                    return response_ok()
+
+                instance = Order.objects.filter(id=pk).first()
+                if not instance:
+                    raise CustomError('订单不存在')
+                instance.status = Order.NORMAL
+                instance.save()
+
+                operation = u'撤回进度为:{}。'.format(stage_progress.name)
+                ProgressDetails.objects.create(order=instance, user=request.user, operation=operation,notes=reason )
         except CustomError as e:
         except CustomError as e:
             return response_error(e.get_error_msg())
             return response_error(e.get_error_msg())
         except Exception as e:
         except Exception as e:

+ 1 - 6
uis/views/customer/index.html

@@ -316,9 +316,7 @@
                             btn: ['保存', '取消'],
                             btn: ['保存', '取消'],
                             yes: function (index, dom) {
                             yes: function (index, dom) {
                                 layui.onSubmitChild = function (res) {
                                 layui.onSubmitChild = function (res) {
-                                    if (res.code === 0) {
-                                        layer.msg('更新成功!', {icon: 1})
-                                    }
+                                    parent.layui.getData();
                                     layer.close(index);
                                     layer.close(index);
                                     table.reload('customer_datagrid', {});
                                     table.reload('customer_datagrid', {});
                                 };
                                 };
@@ -347,9 +345,6 @@
                     btn: ['保存', '取消'],
                     btn: ['保存', '取消'],
                     yes: function (index, dom) {
                     yes: function (index, dom) {
                         layui.onSubmitChild = function (res) {
                         layui.onSubmitChild = function (res) {
-                            if (res.code === 0) {
-                                layer.msg('内部跟踪成功!', {icon: 1})
-                            }
                             layer.close(index);
                             layer.close(index);
                             //刷新表格
                             //刷新表格
                             table.reload('customer_log', {});
                             table.reload('customer_log', {});

+ 161 - 0
uis/views/order/dispatch_process_back.html

@@ -0,0 +1,161 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <meta charset="utf-8">
+    <title>进度分配</title>
+    <meta name="renderer" content="webkit">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport"
+          content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
+    <link rel="stylesheet" href="../../layuiadmin/layui/css/layui.css" media="all">
+    <link rel="stylesheet" href="../../layuiadmin/style/admin.css" media="all">
+    <style>
+        .input {
+            border-radius: 2px;
+            height: 38px;
+            border-width: 1px;
+            border-color: lightgray;
+            border-style: solid;
+            background-color: white;
+            padding-left: 3px;
+        }
+
+        .processText {
+            margin-top: 6px;
+        }
+
+        .layui-upload-drag {
+            padding: 10px;
+            margin-right: 15px;
+        }
+
+        .imgsContent {
+            display: flex;
+            justify-content: flex-start;
+            flex-direction: row;
+            flex-wrap: wrap;
+        }
+
+        .image {
+            width: 150px;
+            height: auto;
+        }
+
+        .imgItem {
+            margin: 0 10px;
+        }
+
+        .option {
+            display: flex;
+            justify-content: space-between;
+            flex-direction: row;
+        }
+
+        .optionItem {
+            padding: 0 13px;
+            margin: 10px;
+            border: 1px solid rgba(0, 0, 0, 0.1);
+            background: #009688;
+            color: #ffffff;
+        }
+
+    </style>
+</head>
+<body>
+
+<div class="layui-fluid">
+    <div class="layui-row layui-col-space15">
+        <div class="layui-card">
+
+            <div class="layui-card-body" pad15>
+                <form class="layui-form" action="" lay-filter="component-form-element">
+                    <div class="layui-row layui-col-space10 layui-form-item">
+                        <div>
+                            <label class="layui-form-label">撤回进度:</label>
+                            <div class="layui-input-block processText" id="current_process"></div>
+                        </div>
+                         <div>
+                            <label class="layui-form-label"><font color='red' size="4">*</font>撤回原因:</label>
+                            <div class="layui-input-block">
+                                <input type="text" name="reason" placeholder="请输入撤回原因"
+                                       autocomplete="off" class="layui-input" lay-verify="required">
+                            </div>
+                        </div>
+
+                        <button id="id_save" class="layui-btn" lay-submit lay-filter="component-form-element"
+                                style="display: none">保存
+                        </button>
+                    </div>
+                </form>
+            </div>
+        </div>
+    </div>
+</div>
+<script src="../../layuiadmin/layui/layui.js"></script>
+<script>
+    layui.link('../../../layuiadmin/style/autocomplete.css');
+    layui.config({
+        base: '../../../layuiadmin/' //静态资源所在路径
+        , autocomplete: 'autocomplete'
+    }).extend({
+        index: 'lib/index',
+    }).use(['index', 'form', 'autocomplete', 'upload'], function () {
+        var $ = layui.$
+            , admin = layui.admin
+            , form = layui.form;
+
+        var customer_id = layui.view.getParameterByName('customer_id');
+        var order_id = layui.view.getParameterByName('order_id');
+        var back_process_id = '';
+        admin.req({
+            url: '/order/get_process/?customer_id=' + customer_id + '&back=1&dispatch=1'
+            , type: 'get'
+            , done: function (res) {
+                if (res.data.error) {
+                    layer.open({
+                        type: 1
+                        , offset: 'auto' //具体配置参考:http://www.layui.com/doc/modules/layer.html#offset
+                        , id: 'layerDemo' + customer_id //防止重复弹出
+                        , content: '<div style="padding: 20px 100px;">' + res.data.error_message + '</div>'
+                        , btn: '关闭'
+                        , btnAlign: 'c' //按钮居中
+                        , shade: 0 //不显示遮罩
+                        , yes: function () {
+                            parent.layer.closeAll();
+                        }
+                    });
+                }
+
+                //撤回进度
+                $('#current_process').append(res.data.now_process_text)
+                back_process_id = res.data.next_process_id;
+            }
+        });
+
+        form.on('submit(component-form-element)', function (data) {
+            var submitData = data.field;
+            if (!back_process_id) {
+                layer.msg("撤回进度有误,请刷新重试!", {icon: 2});
+                return false
+            }
+            submitData['stage_progress'] = back_process_id
+            var url = '/order/' + order_id + '/uncheck/';
+            admin.req({
+                url: url
+                , data: submitData
+                , type: 'post'
+                , done: function (res) {
+                    parent.layui.onSubmitChild(res);
+                }
+            });
+
+            return false;
+        });
+
+        parent.layui.submitChild = function () {
+            $("#id_save").click();
+        };
+    });
+</script>
+</body>
+</html>

+ 23 - 2
uis/views/order/dispatch_process_index.html

@@ -128,14 +128,14 @@
                 , {field: 'project_text', title: '项目', width: 120}
                 , {field: 'project_text', title: '项目', width: 120}
                 , {field: 'stage_progress_text', title: "申请进度", width: 150}
                 , {field: 'stage_progress_text', title: "申请进度", width: 150}
                 , {field: 'service_user_text', title: '当前服务人', width: 150}
                 , {field: 'service_user_text', title: '当前服务人', width: 150}
-                , {width: 150, align: 'center', fixed: 'right', toolbar: '#order-operate-bar'}
+                , {width: 200, align: 'center', fixed: 'right', toolbar: '#order-operate-bar'}
             ]]
             ]]
             , page: true
             , page: true
             , height: 'full-108'
             , height: 'full-108'
         });
         });
         //导出列表
         //导出列表
         form.on('submit(query-form-element)', function (data) {
         form.on('submit(query-form-element)', function (data) {
-            table.reload('order_datagrid', {
+            table.reload('dispatch_process_datagrid', {
                 where: data.field
                 where: data.field
                 , page: {curr: 1}
                 , page: {curr: 1}
             });
             });
@@ -178,6 +178,27 @@
                     },
                     },
                     content: 'dispatch_process_edit.html?customer_id=' + data.customer +'&order_id=' + data.id
                     content: 'dispatch_process_edit.html?customer_id=' + data.customer +'&order_id=' + data.id
                 });
                 });
+            }else if(obj.event === "uncheck"){
+                // 更新进度
+                layer.open({
+                    type: 2,
+                    title: '撤回进度',
+                    area: ['40%', '55%'],
+                    btn: ['保存','取消'],
+                    yes: function (index, dom) {
+                        layui.onSubmitChild = function (res) {
+                            // 刷新父级页面的菜单数量
+                            parent.layui.getData();
+                            layer.close(index);
+                            table.reload('dispatch_process_datagrid', {});
+                        };
+                        layui.submitChild();
+                    },
+                    btn2: function (index, layero) {
+                        layer.close(index);//关闭当前按钮
+                    },
+                    content: 'dispatch_process_back.html?customer_id=' + data.customer +'&order_id=' + data.id
+                });
             }
             }
         });
         });
     });
     });

+ 1 - 3
uis/views/order/index.html

@@ -190,9 +190,7 @@
                     btn: ['保存','取消'],
                     btn: ['保存','取消'],
                     yes: function (index, dom) {
                     yes: function (index, dom) {
                         layui.onSubmitChild = function (res) {
                         layui.onSubmitChild = function (res) {
-                            if (res.code === 0) {
-                                layer.msg('更新成功!', {icon: 1})
-                            }
+                            parent.layui.getData();
                             layer.close(index);
                             layer.close(index);
                             table.reload('order_datagrid', {});
                             table.reload('order_datagrid', {});
                         };
                         };