sandm 2 лет назад
Родитель
Сommit
8db7cc1b4e

+ 211 - 14
app/Http/Controllers/Api/ProjectController.php

@@ -294,7 +294,7 @@ class ProjectController extends Controller
                 if ($temp['id'] == $info['labelid']) {
                     $info['persons'] = Project::taskPersons($info);
                     $info['overdue'] = Project::taskIsOverdue($info);
-                    $subtask = Base::DBC2A(DB::table('project_sub_task')->where(['taskid'=>$info['id'], 'delete' => 0])->orderByDesc('userorder')->get());
+                    $subtask = Base::DBC2A(DB::table('project_sub_task')->where(['taskid'=>$info['id'], 'delete' => 0])->orderByDesc('id')->get());
                     $info['subtask'] = $subtask;
                     $info['follower'] = Base::string2array($info['follower']);
                     $info['plantime'] = ($info['startdate'] > 0 ? date("Y-m-d",$info['startdate']) : "未设置") . "-" . ($info['enddate'] > 0 ? date("Y-m-d",$info['enddate']) : "未设置");
@@ -813,6 +813,198 @@ class ProjectController extends Controller
         return Base::retSuccess('保存成功!');
     }
 
+    public function labelsort()
+    {
+        $user = Users::authE();
+        if (Base::isError($user)) {
+            return $user;
+        } else {
+            $user = $user['data'];
+        }
+        $projectid = trim(Request::input('projectid'));
+        if(!in_array('admin',$user['identity'])){
+            $inRes = Project::inThe($projectid, $user['username']);
+            if (Base::isError($inRes)) {
+                return $inRes;
+            }
+        }
+
+        if($id = intval(Request::input('id'))){
+            $newIndex = intval(Request::input('newIndex'));
+            $oldIndex = intval(Request::input('oldIndex'));
+            //移动前,先把移动前后中间的item对应的order+1
+            DB::table('project_label')->where("projectid","=",$projectid)->where("inorder",">=",$newIndex)->where("inorder","<",$oldIndex)->increment('inorder');
+            //进行移动操作更改
+            DB::table('project_label')->where([
+                'id' => $id,
+                'projectid' => $projectid
+            ])->update([
+                'inorder' => $newIndex
+            ]);
+
+        }
+
+        $row = Base::DBC2A(DB::table('project_log')->where([ 'type' => '日志', 'projectid' => $projectid ])->orderByDesc('id')->first());
+        $continue = 1;
+        if ($row && $row['username'] == $user['username'] && $row['indate'] + 300 > Base::time()) {
+            $other = Base::string2array($row['other']);
+            if ($other['sortType'] == "label") {
+                $continue = intval($other['continue']) + 1;
+                if ($continue <= 100) {
+                    DB::table('project_log')->where('id', $row['id'])->update([
+                        'detail' => '调整任务列表排序(' . $continue . '次)',
+                        'other' => Base::array2string([
+                            'sortType' => "label",
+                            'continue' => $continue,
+                            'times' => $other['times'] . '|' . Base::time(),
+                        ])
+                    ]);
+                }
+            }
+        }
+        if ($continue == 1) {
+            DB::table('project_log')->insert([
+                'type' => '日志',
+                'projectid' => $projectid,
+                'username' => $user['username'],
+                'detail' => "调整任务列表排序",
+                'indate' => Base::time(),
+                'other' => Base::array2string([
+                    'sortType' => "label",
+                    'continue' => $continue,
+                    'times' => Base::time(),
+                ])
+            ]);
+        }
+        return Base::retSuccess('保存成功!');
+    }
+
+    public function tasksort()
+    {
+        $user = Users::authE();
+        if (Base::isError($user)) {
+            return $user;
+        } else {
+            $user = $user['data'];
+        }
+        $projectid = trim(Request::input('projectid'));
+        if(!in_array('admin',$user['identity'])){
+            $inRes = Project::inThe($projectid, $user['username']);
+            if (Base::isError($inRes)) {
+                return $inRes;
+            }
+        }
+        $fromid = intval(Request::input('fromid'));
+        $toid = intval(Request::input('toid'));
+        $id = intval(Request::input("id"));
+        if($fromid == $toid){
+            //同一个label下移动
+            $newIndex = intval(Request::input('newIndex'));
+            $oldIndex = intval(Request::input('oldIndex'));
+            $list = DB::table('project_task')->where("projectid","=",$projectid)->where("labelid","=",$fromid)->orderBy('inorder','desc')->get()->toArray();
+            if($newIndex > $oldIndex){
+                //移动前,先把移动前后中间的item对应的order+1
+                DB::table('project_task')->where("projectid","=",$projectid)->where("labelid","=",$fromid)->where("inorder","<",$list[$oldIndex]->inorder)->where("inorder",">=",$list[$newIndex]->inorder)->increment('inorder');
+                $inorder = $list[$newIndex]->inorder;
+            }else{
+                //移动前,先把移动前后中间的item对应的order+1
+                DB::table('project_task')->where("projectid","=",$projectid)->where("labelid","=",$fromid)->where("inorder","<=",$list[$newIndex]->inorder)->where("inorder",">",$list[$oldIndex]->inorder)->decrement('inorder');
+                $inorder = $list[$newIndex]->inorder;
+            }
+
+            //进行移动操作更改
+            DB::table('project_task')->where([
+                'id' => $id,
+                'projectid' => $projectid,
+                'labelid' => $fromid
+            ])->update([
+                'inorder' => $inorder
+            ]);
+        }else{
+            //移动到其他label
+            $newIndex = intval(Request::input('newIndex'));
+            $oldIndex = intval(Request::input('oldIndex'));
+            $fromlist = DB::table('project_task')->where("projectid","=",$projectid)->where("labelid","=",$fromid)->get()->toArray();
+            if(count($fromlist) == 0 || !array_key_exists($oldIndex,$fromlist)){
+                return Base::retSuccess('移出的任务组数据出错!');
+            }
+            $tolist = DB::table('project_task')->where("projectid","=",$projectid)->where("labelid","=",$toid)->get()->toArray();
+            //对历史遗留项的inorder为null进行处理
+            DB::table('project_task')->where("projectid","=",$projectid)->where("labelid","=",$fromid)->whereNull('inorder')->update(['inorder' => 0]);
+            DB::table('project_task')->where("projectid","=",$projectid)->where("labelid","=",$toid)->whereNull('inorder')->update(['inorder' => 0]);
+
+            //先操作from label
+            //分两种情况,一个是移出后这个fromlist是空表,一种是移出后是非空表,只处理非空表
+            //如果移出项不是最后一个,才处理,否则不处理
+            if(($oldIndex < count($fromlist)) && (count($fromlist) > 1)){
+                //先把当前移动项之后的排序-1
+                DB::table('project_task')->where("projectid","=",$projectid)->where("labelid","=",$fromid)->where("inorder",">",$fromlist[$oldIndex]->inorder)->decrement('inorder');
+            }
+            //再操作to label
+            //分两种情况,一种是目标表是空表,一种是目标表非空表
+            //只处理非空表,如果移入的下标大于目标界,即移入项排在最后一个,则不处理,否则处理
+            if(count($tolist) > 0){
+                if($newIndex < count($tolist)){
+                    //把小于平移后的index(包含)都+1
+                    DB::table('project_task')->where("projectid","=",$projectid)->where("labelid","=",$toid)->where("inorder",">=",$tolist[$newIndex]->inorder)->increment('inorder');
+                    $inorder = $tolist[$newIndex]->inorder;
+                }else{
+                    $end = array_pop($tolist);
+                    $inorder = $end->inorder+1;
+                }
+            }else{
+                $inorder = 1;
+            }
+
+            //最后进行移动操作更改
+            DB::table('project_task')->where([
+                'id' => $id,
+                'projectid' => $projectid,
+                'labelid' => $fromid
+            ])->update([
+                'labelid' => $toid,
+                'inorder' => $inorder
+            ]);
+        }
+
+        $row = Base::DBC2A(DB::table('project_log')->where([ 'type' => '日志', 'projectid' => $projectid ])->orderByDesc('id')->first());
+        $continue = 1;
+        if ($row && $row['username'] == $user['username'] && $row['indate'] + 300 > Base::time()) {
+            $other = Base::string2array($row['other']);
+            if ($other['sortType'] == "task") {
+                $continue = intval($other['continue']) + 1;
+                if ($continue <= 100) {
+                    DB::table('project_log')->where('id', $row['id'])->update([
+                        'detail' => '调整任务排序(' . $continue . '次)',
+                        'other' => Base::array2string([
+                            'sortType' => "task",
+                            'continue' => $continue,
+                            'times' => $other['times'] . '|' . Base::time(),
+                        ])
+                    ]);
+                }
+            }
+        }
+        if ($continue == 1) {
+            DB::table('project_log')->insert([
+                'type' => '日志',
+                'projectid' => $projectid,
+                'username' => $user['username'],
+                'detail' => "调整任务排序",
+                'indate' => Base::time(),
+                'other' => Base::array2string([
+                    'sortType' => "task",
+                    'continue' => $continue,
+                    'times' => Base::time(),
+                ])
+            ]);
+        }
+        $from_res = DB::table('project_task')->where("projectid","=",$projectid)->where("labelid","=",$fromid)->pluck("inorder","id");
+        $to_res = DB::table('project_task')->where("projectid","=",$projectid)->where("labelid","=",$toid)->pluck("inorder","id");
+        return Base::retSuccess('保存成功!',["fromid" => $fromid,"from_res" => $from_res,"toid" => $toid,"to_res" => $to_res]);
+
+    }
+
     /**
      * 排序任务(todo待办)
      *
@@ -1498,7 +1690,7 @@ class ProjectController extends Controller
                     $overdue ? '是' : '-',
                     date("Y-m-d H:i:s", $info['indate'])
                 ];
-                $subtask = Base::DBC2A(DB::table('project_sub_task')->where(['taskid'=>$info['id'], 'delete' => 0])->orderByDesc('userorder')->get());
+                $subtask = Base::DBC2A(DB::table('project_sub_task')->where(['taskid'=>$info['id'], 'delete' => 0])->orderByDesc('id')->get());
                 if ($subtask) {
                     foreach ($subtask AS $subInfo) {
                         $data[] = [
@@ -1561,7 +1753,7 @@ class ProjectController extends Controller
         foreach ($lists['lists'] AS $key => $info) {
             $info['persons'] = Project::taskPersons($info);
             $info['overdue'] = Project::taskIsOverdue($info);
-            $info['subtask'] = Base::DBC2A(DB::table('project_sub_task')->where(['taskid'=>$info['id'], 'delete' => 0])->orderByDesc('userorder')->get());
+            $info['subtask'] = Base::DBC2A(DB::table('project_sub_task')->where(['taskid'=>$info['id'], 'delete' => 0])->orderByDesc('id')->get());
             $info['follower'] = Base::string2array($info['follower']);
             $info['plantime'] = ($info['startdate'] > 0 ? date("Y-m-d",$info['startdate']) : "未设置") . "-" . ($info['enddate'] > 0 ? date("Y-m-d H:i:s",$info['enddate']) : "未设置");
             $update = DB::table('project_log')->where('taskid', $info['id'])->limit(1)->orderBy('indate','DESC')->first();
@@ -1619,7 +1811,7 @@ class ProjectController extends Controller
         }
         //
         $task = Base::DBC2A(DB::table('project_task')->where('id', $taskid)->first());
-        $task['subtask'] = Base::DBC2A(DB::table('project_sub_task')->where(['taskid'=>$taskid, 'delete' => 0])->orderByDesc('userorder')->get());
+        $task['subtask'] = Base::DBC2A(DB::table('project_sub_task')->where(['taskid'=>$taskid, 'delete' => 0])->orderByDesc('id')->get());
         $task['persons'] = Project::taskPersons($task);
         $task['overdue'] = Project::taskIsOverdue($task);
         $task['follower'] = Base::string2array($task['follower']);
@@ -1766,7 +1958,7 @@ class ProjectController extends Controller
         if (empty($projectid)) {
             $inorder = 0;
         } else {
-            $inorder = intval(DB::table('project_task')->where('projectid', $projectid)->orderBy('inorder', $insertbottom ? 'asc' : 'desc')->value('inorder')) + ($insertbottom ? -1 : 1);
+            $inorder = intval(DB::table('project_task')->where('projectid', $projectid)->where("labelid",$labelid)->orderBy('inorder', $insertbottom ? 'asc' : 'desc')->value('inorder')) + ($insertbottom ? -1 : 1);
         }
         $userorder = intval(DB::table('project_task')->where('username', $user['username'])->where('level', $level)->orderByDesc('userorder')->value('userorder')) + 1;
         //
@@ -1806,7 +1998,7 @@ class ProjectController extends Controller
             $task = Base::DBC2A(DB::table('project_task')->where('id', $taskid)->first());
             $task['persons'] = Project::taskPersons($task);
             $task['overdue'] = Project::taskIsOverdue($task);
-            $task['subtask'] = Base::DBC2A(DB::table('project_sub_task')->where(['taskid'=>$taskid, 'delete' => 0])->orderByDesc('userorder')->get());
+            $task['subtask'] = Base::DBC2A(DB::table('project_sub_task')->where(['taskid'=>$taskid, 'delete' => 0])->orderByDesc('id')->get());
             $task['follower'] = Base::string2array($task['follower']);
             $task = array_merge($task, Users::username2basic($task['username']));
             return Base::retSuccess('添加成功!', $task);
@@ -1900,7 +2092,7 @@ class ProjectController extends Controller
         }
         //
         $content = Base::newTrim(Base::getPostValue('content'));
-        $task['subtask'] = Base::DBC2A(DB::table('project_sub_task')->where(['taskid'=>$taskid, 'delete' => 0])->orderByDesc('userorder')->get());
+        $task['subtask'] = Base::DBC2A(DB::table('project_sub_task')->where(['taskid'=>$taskid, 'delete' => 0])->orderByDesc('id')->get());
         $message = "";
         $upArray = [];
         $logArray = [];
@@ -2537,7 +2729,7 @@ class ProjectController extends Controller
                         break;
                 }
 
-                $task['subtask'] = Base::DBC2A(DB::table('project_sub_task')->where(['taskid'=>$task['id'], 'delete' => 0])->orderByDesc('userorder')->get());
+                $task['subtask'] = Base::DBC2A(DB::table('project_sub_task')->where(['taskid'=>$task['id'], 'delete' => 0])->orderByDesc('id')->get());
 
                 $logArray[] = [
                     'type' => '日志',
@@ -2641,14 +2833,15 @@ class ProjectController extends Controller
                 $pushlid = $item['id'];
                 if($item['detail'] == '修改负责人'){
                     $ding_followers = $task['follower'];
-                    $ding_followers[] = $item['old_username'];
+                    $ding_followers[] = $item['other']['old_username'];
+                    $ding_followers[] = $item['username'];
                     $users = DB::table('users')->whereIn("username",$ding_followers)->pluck("userid")->toArray();
                     $json = [
                         'userid_list' => implode(',',$users),
                         'msg' => [
                             'msgtype' => 'oa',
                             'oa' => [
-                                'message_url' => 'http://project.jinjianghc.com/ding?corpId=$CORPID$',
+                                'message_url' => 'https://project.jinjianghc.com/ding?corpId=$CORPID$',
                                 'head' => [
                                     'bgcolor' => 'FFBBBBBB',
                                     'text' => '头部标题'
@@ -2665,10 +2858,14 @@ class ProjectController extends Controller
                     Notification::send($json);
                 }
                 if($item['detail'] == '修改子任务负责人'){
-                    $ding_followers = $task['follower'];
-                    if(!empty($item['other']['old_subtask']['uname'])){
-                        $ding_followers[] = $item['other']['old_subtask']['uname'];
+                    if(is_array($task['follower'])){
+                        $ding_followers = $task['follower'];
+                    }else{
+                        $ding_followers = [];
                     }
+
+                    $ding_followers[] = $item['other']['subtask'][0]['uname'];
+                    $ding_followers[] = $item['username'];
                     $sub_own = array_merge($item, Users::username2basic($item['other']['subtask'][0]['uname']));
                     $users = DB::table('users')->whereIn("username",$ding_followers)->pluck("userid")->toArray();
                     $json = [
@@ -2676,7 +2873,7 @@ class ProjectController extends Controller
                         'msg' => [
                             'msgtype' => 'oa',
                             'oa' => [
-                                'message_url' => 'http://project.jinjianghc.com/ding?corpId=$CORPID$',
+                                'message_url' => 'https://project.jinjianghc.com/ding?corpId=$CORPID$',
                                 'head' => [
                                     'bgcolor' => 'FFBBBBBB',
                                     'text' => '头部标题'

+ 1 - 0
composer.json

@@ -14,6 +14,7 @@
         "ext-json": "*",
         "ext-libxml": "*",
         "ext-simplexml": "*",
+        "ext-zip": "*",
         "alibabacloud/dingtalk": "^1.3",
         "fideloper/proxy": "^4.4.1",
         "fruitcake/laravel-cors": "^2.0.4",

+ 20 - 68
resources/assets/js/main/components/project/task/detail/detail.vue

@@ -83,7 +83,6 @@
                         <draggable
                             v-model="detail.subtask"
                             draggable=".detail-subtask-item"
-                            @sort="taskSortUpdate(false)"
                             :animation="150">
                             <div v-for="(subitem, subindex) in detail.subtask" :key="subindex" class="detail-subtask-item">
                                 <Checkbox v-model="subitem.status"
@@ -108,8 +107,9 @@
                                        :placeholder="$L('子任务描述...')"
                                        @on-keydown="subtaskKeydown(subindex, $event)"
                                        @on-blur="handleTask('subtaskBlur', subindex, 'detail')"/>
+                                <div>{{ php_time(subitem.indate) }}</div>
                                 <div class="detail-subtask-right" :style="subitem.stip==='show'?{opacity:1}:{}">
-<!--                                    <Icon type="md-menu" class="detail-subtask-ricon detail-subtask-rmenu"/>-->
+                                    <!--                                    <Icon type="md-menu" class="detail-subtask-ricon detail-subtask-rmenu"/>-->
                                     <Poptip
                                         class="detail-subtask-ricon"
                                         transfer
@@ -132,13 +132,13 @@
                                         <Icon type="md-trash" @click="handleTask('subtaskDelete', subindex, 'delete')"/>
                                     </div>
                                     <Poptip v-else
-                                        class="detail-subtask-ricon"
-                                        transfer
-                                        confirm
-                                        :title="$L('你确定你要删除这个子任务吗?')"
-                                        @on-ok="handleTask('subtaskDelete', subindex, 'delete')"
-                                        @on-popper-show="$set(subitem, 'stip', 'show')"
-                                        @on-popper-hide="$set(subitem, 'stip', '')"><Icon type="md-trash" /></Poptip>
+                                            class="detail-subtask-ricon"
+                                            transfer
+                                            confirm
+                                            :title="$L('你确定你要删除这个子任务吗?')"
+                                            @on-ok="handleTask('subtaskDelete', subindex, 'delete')"
+                                            @on-popper-show="$set(subitem, 'stip', 'show')"
+                                            @on-popper-hide="$set(subitem, 'stip', '')"><Icon type="md-trash" /></Poptip>
                                 </div>
                             </div>
                         </draggable>
@@ -315,6 +315,17 @@
             }
         },
         methods: {
+            php_time(time){
+                var    now     = new Date(time*1000);
+                var    year     =now.getFullYear();
+                var   month  =now.getMonth()+1;
+                var   date      =now.getDate();
+                var   hour     =now.getHours();
+                var   minute =now.getMinutes();
+                var   second =now.getSeconds();
+
+                return   year+"-"+month+"-"+date+"   "+hour+":"+minute+":"+second;
+            },
             initLanguage() {
                 let lastSecond = (e) => {
                     return new Date($A.formatDate("Y-m-d 23:59:29", Math.round(e / 1000)))
@@ -550,65 +561,6 @@
                     },
                 });
             },
-            getTaskSort() {
-                let sortData = "",
-                    taskData = "";
-                this.projectLabel.forEach((label) => {
-                    taskData = "";
-                    label.taskLists.forEach((task) => {
-                        if (taskData) taskData+= "-";
-                        taskData+= task.id;
-                    });
-                    if (sortData) sortData+= ";";
-                    sortData+= label.id + ":" + taskData;
-                });
-                return sortData;
-            },
-            taskSortUpdate(isLabel) {
-                let oldSort = this.projectSortData;
-                let newSort = this.getTaskSort();
-                if (oldSort == newSort) {
-                    return;
-                }
-                this.projectSortData = newSort;
-                this.projectSortDisabled = true;
-                this.loadIng++;
-                console.log(oldSort,newSort)
-                // $A.apiAjax({
-                //     url: 'project/sort',
-                //     data: {
-                //         projectid: this.projectid,
-                //         oldsort: oldSort,
-                //         newsort: newSort,
-                //         label: isLabel === true ? 1 : 0
-                //     },
-                //     complete: () => {
-                //         this.projectSortDisabled = false;
-                //         this.loadIng--;
-                //     },
-                //     error: () => {
-                //         this.getDetail();
-                //         alert(this.$L('网络繁忙,请稍后再试!'));
-                //     },
-                //     success: (res) => {
-                //         if (res.ret === 1) {
-                //             this.projectLabel.forEach((label) => {
-                //                 let length = label.taskLists.length;
-                //                 label.taskLists.forEach((task, index) => {
-                //                     task.inorder = length - index;
-                //                 });
-                //             });
-                //             this.taskNewSort();
-                //             //
-                //             this.$Message.success(res.msg);
-                //             $A.triggerTaskInfoListener(isLabel ? 'labelsort' : 'tasksort', { projectid: this.projectid, nickname: $A.getNickName(), time: Math.round(new Date().getTime()/1000) });
-                //         } else {
-                //             this.getDetail();
-                //             this.$Modal.error({title: this.$L('温馨提示'), content: res.msg});
-                //         }
-                //     }
-                // });
-            },
 
             handleUsernameShow() {
                 this.$set(this.detail, 'newusername', '')

+ 103 - 3
resources/assets/js/main/pages/project/panel.vue

@@ -56,11 +56,12 @@
                 :style="{visibility: projectGanttShow ? 'hidden' : 'visible'}"
                 :animation="150"
                 :disabled="projectSortDisabled || windowMax768"
-                @sort="projectSortUpdate(true)">
+                @sort="projectSort">
                 <div
                     v-if="projectLabel.length > 0"
                     v-for="label in projectLabel"
                     :key="label.id"
+                    :data-id="label.id"
                     class="label-item label-draggable"
                     :class="{'label-scroll': label.hasScroll === true && label.endScroll !== true}"
                     @mouseenter="projectMouse(label)">
@@ -91,10 +92,11 @@
                                 draggable=".task-draggable"
                                 :animation="150"
                                 :disabled="projectSortDisabled || windowMax768"
-                                @sort="projectSortUpdate(false)"
-                                @remove="projectSortUpdate(false)">
+                                :data-id="label.id"
+                                @sort="taskSort">
                                 <div v-for="task in label.taskLists"
                                      :key="task.id"
+                                     :data-id="task.id"
                                      class="task-item task-draggable"
                                      :class="{'persons-item':isPersonsTask(task), 'follower-item': isFollowerTask(task), 'create-item': isCreateTask(task)}">
                                 <div class="task-shadow" :class="[
@@ -723,6 +725,9 @@
                     sortData+= label.id + ":" + taskData;
                 });
                 return sortData;
+            },
+            getLabelSort() {
+
             },
             handleLabel(event, labelDetail) {
                 switch (event) {
@@ -966,6 +971,7 @@
             projectSortUpdate(isLabel) {
                 let oldSort = this.projectSortData;
                 let newSort = this.getProjectSort();
+                console.log(oldSort,newSort);
                 if (oldSort == newSort) {
                     return;
                 }
@@ -1008,6 +1014,100 @@
                 });
             },
 
+            projectSort(e) {
+                let newIndex = e.newIndex;
+                let oldIndex = e.oldIndex;
+                let id = e.item.dataset.id;
+
+                this.projectSortDisabled = true;
+                this.loadIng++;
+                $A.apiAjax({
+                    url: 'project/labelsort',
+                    data: {
+                        projectid: this.projectid,
+                        newIndex: newIndex,
+                        oldIndex: oldIndex,
+                        id: id
+                    },
+                    complete: () => {
+                        this.projectSortDisabled = false;
+                        this.loadIng--;
+                    },
+                    error: () => {
+                        this.getDetail();
+                        alert(this.$L('网络繁忙,请稍后再试!'));
+                    },
+                    success: (res) => {
+                        if (res.ret === 1) {
+                            this.$Message.success(res.msg);
+                            $A.triggerTaskInfoListener('labelsort', { projectid: this.projectid, nickname: $A.getNickName(), time: Math.round(new Date().getTime()/1000) });
+                        } else {
+                            this.getDetail();
+                            this.$Modal.error({title: this.$L('温馨提示'), content: res.msg});
+                        }
+                    }
+                });
+            },
+
+            taskSort(e){
+                console.log(e)
+                let oldSort = this.projectSortData;
+                let newSort = this.getProjectSort();
+                let newIndex = e.newIndex;
+                let oldIndex = e.oldIndex;
+                let fromid = e.from.dataset.id;
+                let toid = e.to.dataset.id;
+                let id = e.item.dataset.id;
+                if (oldSort == newSort) {
+                    return;
+                }
+                this.projectSortData = newSort;
+                this.projectSortDisabled = true;
+                this.loadIng++;
+                $A.apiAjax({
+                    url: 'project/tasksort',
+                    data: {
+                        projectid: this.projectid,
+                        newIndex: newIndex,
+                        oldIndex: oldIndex,
+                        fromid: fromid,
+                        toid: toid,
+                        id: id
+                    },
+                    complete: () => {
+                        this.projectSortDisabled = false;
+                        this.loadIng--;
+                    },
+                    error: () => {
+                        this.getDetail();
+                        alert(this.$L('网络繁忙,请稍后再试!'));
+                    },
+                    success: (res) => {
+                        if (res.ret === 1) {
+                            this.projectLabel.forEach((label) => {
+                                if(label.id == res.data.fromid){
+                                    label.taskLists.forEach((task, index) => {
+                                        task.inorder = res.data.from_res[task.id].inorder;
+                                    });
+                                }
+                                if(label.id == res.data.toid){
+                                    label.taskLists.forEach((task, index) => {
+                                        task.inorder = res.data.to_res[task.id].inorder;
+                                    });
+                                }
+                            });
+                            this.taskNewSort();
+
+                            this.$Message.success(res.msg);
+                            $A.triggerTaskInfoListener('tasksort', { projectid: this.projectid, nickname: $A.getNickName(), time: Math.round(new Date().getTime()/1000) });
+                        } else {
+                            this.getDetail();
+                            this.$Modal.error({title: this.$L('温馨提示'), content: res.msg});
+                        }
+                    }
+                });
+            },
+
             projectMouse(label) {
                 let hasScroll = false;
                 let el = this.$refs['box_' + label.id]