kuaifan 5 rokov pred
rodič
commit
76bd0a813d

+ 11 - 6
app/Http/Controllers/Api/ProjectController.php

@@ -971,9 +971,9 @@ class ProjectController extends Controller
      * 项目任务-列表
      *
      * @apiParam {Number} [projectid]           项目ID
-     * @apiParam {String} [username]            负责人用户名(如果项目ID为空时此参数无效只获取自己的任务)
+     * @apiParam {Number} [taskid]              任务ID (1、填写此参数时projectid强制为此任务的projectid;2、赋值返回详细数据,不返回列表数据)
      * @apiParam {Number} [labelid]             项目子分类ID
-     * @apiParam {Number} [taskid]              任务ID (赋值返回详细数据,不返回列表数据)
+     * @apiParam {String} [username]            负责人用户名(如果项目ID为空时此参数无效只获取自己的任务)
      * @apiParam {Number} [level]               任务等级(1~4)
      * @apiParam {String} [archived]            任务是否归档
      * - 未归档 (默认)
@@ -1006,7 +1006,13 @@ class ProjectController extends Controller
             $user = $user['data'];
         }
         //
-        $projectid = intval(Request::input('projectid'));
+        $taskid = intval(Request::input('taskid'));
+        if ($taskid > 0) {
+            $projectid = intval(DB::table('project_task')->where('id', $taskid)->value('projectid'));
+        } else {
+            $projectid = intval(Request::input('projectid'));
+        }
+        //
         if ($projectid > 0) {
             $inRes = Project::inThe($projectid, $user['username']);
             if (Base::isError($inRes)) {
@@ -1034,7 +1040,6 @@ class ProjectController extends Controller
             }
         }
         //
-        $taskid = intval(Request::input('taskid'));
         $whereRaw = null;
         $whereFunc = null;
         $whereArray = [];
@@ -1134,10 +1139,10 @@ class ProjectController extends Controller
      * 项目任务-添加任务
      *
      * @apiParam {String} title                 任务标题
-     * @apiParam {Number} [level]               任务紧急级别(1~4,默认:2)
-     * @apiParam {String} [username]            任务负责人用户名(如果项目ID为空时此参数无效复制人为自己)
      * @apiParam {Number} [projectid]           项目ID
      * @apiParam {Number} [labelid]             项目子分类ID
+     * @apiParam {Number} [level]               任务紧急级别(1~4,默认:2)
+     * @apiParam {String} [username]            任务负责人用户名(如果项目ID为空时此参数无效,负责人为自己)
      *
      * @throws \Throwable
      */

+ 59 - 38
resources/assets/js/main/pages/project-panel.vue

@@ -8,10 +8,10 @@
         <div class="w-nav">
             <div class="nav-row">
                 <div class="w-nav-left">
-                    <div class="project-title">
-                        <div v-if="loadIng > 0" class="project-title-loading"><w-loading></w-loading></div>
-                        <h1>{{projectDetail.title}}</h1>
-                        <div class="project-title-refresh" @click="getDetail(true)">刷新</div>
+                    <div class="page-nav-left">
+                        <span class="bold">{{projectDetail.title}}</span>
+                        <div v-if="loadIng > 0" class="page-nav-loading"><w-loading></w-loading></div>
+                        <div v-else class="page-nav-refresh"><em @click="getDetail(true)">刷新</em></div>
                     </div>
                 </div>
                 <div class="w-nav-flex"></div>
@@ -64,7 +64,7 @@
                                         task.complete ? 'complete' : '',
                                         task.overdue ? 'overdue' : '',
                                         task.isNewtask === true ? 'newtask' : ''
-                                    ]">
+                                    ]" @click="openTaskModal(task)">
                                     <div class="task-title">{{task.title}}</div>
                                     <div class="task-more">
                                         <div v-if="task.overdue" class="task-status">已超期</div>
@@ -107,12 +107,12 @@
                 <TabPane :label="$L('已归档任务')" name="archived">
                     <project-archived :canload="projectSettingDrawerShow && projectSettingDrawerTab == 'archived'" :projectid="projectid"></project-archived>
                 </TabPane>
-                <TabPane :label="$L('成员管理')" name="member">
-                    <project-users :canload="projectSettingDrawerShow && projectSettingDrawerTab == 'member'" :projectid="projectid"></project-users>
-                </TabPane>
                 <TabPane :label="$L('项目统计')" name="statistics">
                     <project-statistics :canload="projectSettingDrawerShow && projectSettingDrawerTab == 'statistics'" :projectid="projectid"></project-statistics>
                 </TabPane>
+                <TabPane :label="$L('成员管理')" name="member">
+                    <project-users :canload="projectSettingDrawerShow && projectSettingDrawerTab == 'member'" :projectid="projectid"></project-users>
+                </TabPane>
             </Tabs>
         </Drawer>
     </div>
@@ -138,36 +138,6 @@
 </style>
 <style lang="scss" scoped>
     .project-panel {
-        .project-title {
-            display: flex;
-            flex-direction: row;
-            align-items: center;
-            &:hover {
-                .project-title-refresh {
-                    display: block;
-                }
-            }
-            .project-title-loading {
-                width: 18px;
-                height: 18px;
-                margin-right: 6px;
-                display: flex;
-            }
-            h1 {
-                font-size: 14px;
-                font-weight: 500;
-            }
-            .project-title-refresh {
-                display: none;
-                padding-left: 12px;
-                padding-right: 12px;
-                color: #048be0;
-                cursor: pointer;
-                &:hover {
-                    text-decoration: underline;
-                }
-            }
-        }
         .label-box {
             display: flex;
             flex-direction: row;
@@ -377,7 +347,54 @@
             }
         },
         mounted() {
+            $A.setOnTaskInfoListener('pages/project-panel',(act, detail) => {
+                switch (act) {
+                    case 'deleteproject':   // 删除项目
+                    case 'deletelabel':     // 删除分类
+                        return;
+                    case 'tasklevel':       // 调整级别
+                        this.getDetail(true);
+                        return;
+                }
+                //
+                this.projectLabel.forEach((label) => {
+                    label.taskLists.some((task, i) => {
+                        if (task.id == detail.id) {
+                            label.taskLists.splice(i, 1, detail);
+                            return true;
+                        }
+                    });
+                });
+                //
+                switch (act) {
+                    case "delete":          // 删除任务
+                    case "archived":        // 归档
+                        this.projectLabel.forEach((label) => {
+                            label.taskLists.some((task, i) => {
+                                if (task.id == detail.id) {
+                                    label.taskLists.splice(i, 1,);
+                                    return true;
+                                }
+                            });
+                        });
+                        this.projectSortData = this.getProjectSort();
+                        break;
 
+                    case "unarchived":      // 取消归档
+                        this.projectLabel.forEach((label) => {
+                            if (label.id == detail.labelid) {
+                                label.taskLists.some((task, i) => {
+                                    if (detail.inorder > task.inorder || (detail.inorder == task.inorder && detail.id > task.id)) {
+                                        label.taskLists.splice(i, 0, detail);
+                                        return true;
+                                    }
+                                });
+                            }
+                        });
+                        this.projectSortData = this.getProjectSort();
+                        break;
+                }
+            }, true);
         },
         activated() {
             this.projectid = this.$route.params.projectid;
@@ -704,6 +721,10 @@
                     }
                 });
             },
+
+            openTaskModal(taskDetail) {
+                this.taskDetail(taskDetail);
+            },
         },
     }
 </script>

+ 9 - 35
resources/assets/js/main/pages/project.vue

@@ -9,9 +9,9 @@
             <div class="nav-row">
                 <div class="w-nav-left">
                     <div class="page-nav-left">
+                        <span class="hover" @click="addShow=true"><i class="ft icon">&#xE740;</i> {{$L('新建项目')}}</span>
                         <div v-if="loadIng > 0" class="page-nav-loading"><w-loading></w-loading></div>
-                        <span class="ft hover" @click="addShow=true"><i class="ft icon">&#xE740;</i> {{$L('新建项目')}}</span>
-                        <div class="page-nav-refresh" @click="getLists(true)">刷新</div>
+                        <div v-else class="page-nav-refresh"><em @click="getLists(true)">刷新</em></div>
                     </div>
                 </div>
                 <div class="w-nav-flex"></div>
@@ -57,14 +57,14 @@
                                 <Icon class="project-iconbtn-icon1" type="md-filing" size="24" />
                                 <div class="project-iconbtn-text">已归档任务</div>
                             </div>
-                            <div class="project-iconbtn" @click.stop="handleProject('member', item)">
-                                <Icon class="project-iconbtn-icon2" type="md-people" size="24" />
-                                <div class="project-iconbtn-text">成员管理</div>
-                            </div>
                             <div class="project-iconbtn" @click.stop="handleProject('statistics', item)">
                                 <Icon class="project-iconbtn-icon3" type="md-stats" size="24" />
                                 <div class="project-iconbtn-text">项目统计</div>
                             </div>
+                            <div class="project-iconbtn" @click.stop="handleProject('member', item)">
+                                <Icon class="project-iconbtn-icon2" type="md-people" size="24" />
+                                <div class="project-iconbtn-text">成员管理</div>
+                            </div>
                         </div>
                     </div>
                 </li>
@@ -111,12 +111,12 @@
                 <TabPane :label="$L('已归档任务')" name="archived">
                     <project-archived :canload="projectDrawerShow && projectDrawerTab == 'archived'" :projectid="handleProjectId"></project-archived>
                 </TabPane>
-                <TabPane :label="$L('成员管理')" name="member">
-                    <project-users :canload="projectDrawerShow && projectDrawerTab == 'member'" :projectid="handleProjectId"></project-users>
-                </TabPane>
                 <TabPane :label="$L('项目统计')" name="statistics">
                     <project-statistics :canload="projectDrawerShow && projectDrawerTab == 'statistics'" :projectid="handleProjectId"></project-statistics>
                 </TabPane>
+                <TabPane :label="$L('成员管理')" name="member">
+                    <project-users :canload="projectDrawerShow && projectDrawerTab == 'member'" :projectid="handleProjectId"></project-users>
+                </TabPane>
             </Tabs>
         </Drawer>
 
@@ -138,32 +138,6 @@
 
 <style lang="scss" scoped>
     .project {
-        .page-nav-left {
-            display: flex;
-            flex-direction: row;
-            align-items: center;
-            min-width: 138px;
-            &:hover {
-                .page-nav-refresh {
-                    display: block;
-                }
-            }
-            .page-nav-loading {
-                width: 18px;
-                height: 18px;
-                margin-right: 6px;
-                display: flex;
-            }
-            .page-nav-refresh {
-                display: none;
-                padding-right: 12px;
-                color: #048be0;
-                cursor: pointer;
-                &:hover {
-                    text-decoration: underline;
-                }
-            }
-        }
         ul.project-list {
             padding: 5px;
             max-width: 2000px;

+ 5 - 1
resources/assets/js/main/pages/team.vue

@@ -8,7 +8,11 @@
         <div class="w-nav">
             <div class="nav-row">
                 <div class="w-nav-left">
-                    <i class="ft icon">&#xE90D;</i> {{$L('团队成员')}}
+                    <div class="page-nav-left">
+                        <span><i class="ft icon">&#xE90D;</i> {{$L('团队成员')}}</span>
+                        <div v-if="loadIng > 0" class="page-nav-loading"><w-loading></w-loading></div>
+                        <div v-else class="page-nav-refresh"><em @click="getLists(true)">刷新</em></div>
+                    </div>
                 </div>
                 <div class="w-nav-flex"></div>
                 <div class="w-nav-right">

+ 15 - 41
resources/assets/js/main/pages/todo.vue

@@ -9,9 +9,9 @@
             <div class="nav-row">
                 <div class="w-nav-left">
                     <div class="page-nav-left">
-                        <div v-if="loadIng > 0" class="page-nav-loading"><w-loading></w-loading></div>
                         <span><i class="ft icon">&#xE787;</i> {{$L('我的待办')}}</span>
-                        <div class="page-nav-refresh" @click="refreshTask">刷新</div>
+                        <div v-if="loadIng > 0" class="page-nav-loading"><w-loading></w-loading></div>
+                        <div v-else class="page-nav-refresh"><em @click="refreshTask">刷新</em></div>
                     </div>
                 </div>
                 <div class="w-nav-flex"></div>
@@ -98,32 +98,6 @@
 </style>
 <style lang="scss" scoped>
     .todo {
-        .page-nav-left {
-            display: flex;
-            flex-direction: row;
-            align-items: center;
-            min-width: 138px;
-            &:hover {
-                .page-nav-refresh {
-                    display: block;
-                }
-            }
-            .page-nav-loading {
-                width: 18px;
-                height: 18px;
-                margin-right: 6px;
-                display: flex;
-            }
-            .page-nav-refresh {
-                display: none;
-                padding-right: 12px;
-                color: #048be0;
-                cursor: pointer;
-                &:hover {
-                    text-decoration: underline;
-                }
-            }
-        }
         .todo-main {
             display: flex;
             flex-direction: column;
@@ -378,7 +352,7 @@
                     case 'deletelabel':     // 删除分类
                         this.refreshTask();
                         return;
-                    case 'tasklevel':
+                    case 'tasklevel':       // 调整级别
                         return;
                 }
                 //
@@ -392,17 +366,17 @@
                 }
                 //
                 switch (act) {
-                    case "title": // 标题
-                    case "desc": // 描述
-                    case "plannedtime": // 设置计划时间
-                    case "unplannedtime": // 取消计划时间
-                    case "complete": // 标记完成
-                    case "unfinished": // 标记未完成
-                    case "comment": // 评论
+                    case "title":           // 标题
+                    case "desc":            // 描述
+                    case "plannedtime":     // 设置计划时间
+                    case "unplannedtime":   // 取消计划时间
+                    case "complete":        // 标记完成
+                    case "unfinished":      // 标记未完成
+                    case "comment":         // 评论
                         // 这些都不用处理
                         break;
 
-                    case "level":       // 优先级
+                    case "level":           // 优先级
                         for (let level in this.taskDatas) {
                             this.taskDatas[level].lists.some((task, i) => {
                                 if (task.id == detail.id) {
@@ -422,9 +396,9 @@
                         this.taskSortData = this.getTaskSort();
                         break;
 
-                    case "username":    // 负责人
-                    case "delete":      // 删除任务
-                    case "archived":    // 归档
+                    case "username":        // 负责人
+                    case "delete":          // 删除任务
+                    case "archived":        // 归档
                         for (let level in this.taskDatas) {
                             this.taskDatas[level].lists.some((task, i) => {
                                 if (task.id == detail.id) {
@@ -436,7 +410,7 @@
                         this.taskSortData = this.getTaskSort();
                         break;
 
-                    case "unarchived":  // 取消归档
+                    case "unarchived":      // 取消归档
                         for (let level in this.taskDatas) {
                             if (level == detail.level) {
                                 this.taskDatas[level].lists.some((task, i) => {

+ 41 - 0
resources/assets/sass/main.scss

@@ -136,6 +136,47 @@
                 -webkit-backface-visibility: hidden;
                 -webkit-overflow-scrolling: touch;
             }
+            .page-nav-left {
+                display: flex;
+                flex-direction: row;
+                align-items: center;
+                min-width: 138px;
+                &:hover {
+                    .page-nav-refresh {
+                        em {
+                            display: block;
+                        }
+                    }
+                }
+                > span {
+                    margin-right: 8px;
+                    &.bold {
+                        font-weight: bold;
+                    }
+                }
+                .page-nav-loading {
+                    width: 18px;
+                    height: 18px;
+                    display: flex;
+                }
+                .page-nav-refresh {
+                    min-width: 36px;
+                    height: 100%;
+                    display: flex;
+                    flex-direction: row;
+                    align-items: center;
+                    em {
+                        display: none;
+                        padding-left: 4px;
+                        padding-right: 4px;
+                        color: #048be0;
+                        cursor: pointer;
+                        &:hover {
+                            text-decoration: underline;
+                        }
+                    }
+                }
+            }
         }
     }
 }