ソースを参照

项目面板支持快速筛选我负责的、我关注的任务

kuaifan 5 年 前
コミット
4f30a52fbb

+ 1 - 1
package.json

@@ -1,6 +1,6 @@
 {
     "name": "wookteam",
-    "version": "1.5.7",
+    "version": "1.5.8",
     "description": "WookTeam是一款轻量级的开源在线团队协作工具,提供各类文档工具、在线思维导图、在线流程图、项目管理、任务分发、即时IM,知识库管理等工具。",
     "scripts": {
         "ide-helper": "php artisan ide-helper:generate",

+ 5 - 8
resources/assets/js/main/components/project/gantt/index.vue

@@ -5,16 +5,16 @@
             <Icon class="project-gstc-dropdown-icon" type="md-eye" />
             <DropdownMenu slot="list">
                 <DropdownItem name="now">{{$L('现在')}}</DropdownItem>
-                <DropdownItem name="day" :class="{'project-gstc-dropdown-period':period=='day'}">{{$L('天视图')}}</DropdownItem>
-                <DropdownItem name="week" :class="{'project-gstc-dropdown-period':period=='week'}">{{$L('周视图')}}</DropdownItem>
-                <DropdownItem name="month" :class="{'project-gstc-dropdown-period':period=='month'}">{{$L('月视图')}}</DropdownItem>
+                <DropdownItem name="day" :class="{'dropdown-active':period=='day'}">{{$L('天视图')}}</DropdownItem>
+                <DropdownItem name="week" :class="{'dropdown-active':period=='week'}">{{$L('周视图')}}</DropdownItem>
+                <DropdownItem name="month" :class="{'dropdown-active':period=='month'}">{{$L('月视图')}}</DropdownItem>
             </DropdownMenu>
         </Dropdown>
         <Dropdown class="project-gstc-dropdown-filtr" @on-click="tapProject">
             <Icon class="project-gstc-dropdown-icon" :class="{filtr:filtrProjectId>0}" type="md-funnel" />
             <DropdownMenu slot="list">
-                <DropdownItem :name="0" :class="{'project-gstc-dropdown-period':filtrProjectId==0}">{{$L('全部')}}</DropdownItem>
-                <DropdownItem v-for="(item, index) in projectLabel" :key="index" :name="item.id" :class="{'project-gstc-dropdown-period':filtrProjectId==item.id}">{{item.title}} ({{item.taskLists.length}})</DropdownItem>
+                <DropdownItem :name="0" :class="{'dropdown-active':filtrProjectId==0}">{{$L('全部')}}</DropdownItem>
+                <DropdownItem v-for="(item, index) in projectLabel" :key="index" :name="item.id" :class="{'dropdown-active':filtrProjectId==item.id}">{{item.title}} ({{item.taskLists.length}})</DropdownItem>
             </DropdownMenu>
         </Dropdown>
         <div class="project-gstc-close" @click="$emit('on-close')"><Icon type="md-close" /></div>
@@ -71,9 +71,6 @@
                     color: #058ce4;
                 }
             }
-            .project-gstc-dropdown-period {
-                color: #058ce4;
-            }
         }
         .project-gstc-dropdown-eye {
             left: 238px;

+ 47 - 5
resources/assets/js/main/pages/project/panel.vue

@@ -14,10 +14,20 @@
                 </div>
                 <div class="w-nav-flex"></div>
                 <div class="w-nav-right">
-                    <span class="ft hover" @click="openProjectDrawer('lists')"><i class="ft icon">&#xE89E;</i> {{$L('任务列表')}}</span>
+                    <span class="ft hover" :class="{active:filtrTask!=''}">
+                        <Dropdown @on-click="(res)=>{filtrTask=res}" transfer>
+                            <Icon type="md-funnel" class="icon"/> {{$L('筛选')}}
+                            <DropdownMenu slot="list">
+                                <DropdownItem name="" :class="{'dropdown-active':filtrTask==''}">全部任务</DropdownItem>
+                                <DropdownItem name="persons" :class="{'dropdown-active':filtrTask=='persons'}">我负责的任务</DropdownItem>
+                                <DropdownItem name="follower" :class="{'dropdown-active':filtrTask=='follower'}">我关注的任务</DropdownItem>
+                            </DropdownMenu>
+                        </Dropdown>
+                    </span>
+                    <span class="ft hover" @click="openProjectDrawer('lists')"><i class="ft icon">&#xE89E;</i> {{$L('列表')}}</span>
                     <span class="ft hover" :class="{active:projectGanttShow}" @click="projectGanttShow=!projectGanttShow"><i class="ft icon">&#59141;</i> {{$L('甘特图')}}</span>
-                    <span class="ft hover" @click="openProjectDrawer('files')"><i class="ft icon">&#xE701;</i> {{$L('文件列表')}}</span>
-                    <span class="ft hover" @click="openProjectDrawer('logs')"><i class="ft icon">&#xE753;</i> {{$L('项目动态')}}</span>
+                    <span class="ft hover" @click="openProjectDrawer('files')"><i class="ft icon">&#xE701;</i> {{$L('文件')}}</span>
+                    <span class="ft hover" @click="openProjectDrawer('logs')"><i class="ft icon">&#xE753;</i> {{$L('动态')}}</span>
                     <span class="ft hover" @click="openProjectSettingDrawer('setting')"><i class="ft icon">&#xE7A7;</i> {{$L('设置')}}</span>
                 </div>
             </div>
@@ -61,6 +71,7 @@
                             <draggable
                                 v-model="label.taskLists"
                                 class="task-main"
+                                :class="[filtrTask ? 'filtr-' + filtrTask : '']"
                                 group="task"
                                 draggable=".task-draggable"
                                 :animation="150"
@@ -69,8 +80,9 @@
                                 @remove="projectSortUpdate(false)">
                                 <div v-for="task in label.taskLists"
                                      :key="task.id"
-                                     class="task-item task-draggable">
-                                    <div class="task-shadow" :class="[
+                                     class="task-item task-draggable"
+                                     :class="{'persons-item':isPersonsTask(task), 'follower-item': isFollowerTask(task)}">
+                                <div class="task-shadow" :class="[
                                         'p'+task.level,
                                         task.complete ? 'complete' : '',
                                         task.overdue ? 'overdue' : '',
@@ -258,6 +270,22 @@
                         .task-main {
                             display: flex;
                             flex-direction: column;
+                            &.filtr-persons {
+                                .task-item {
+                                    display: none;
+                                    &.persons-item {
+                                        display: block;
+                                    }
+                                }
+                            }
+                            &.filtr-follower {
+                                .task-item {
+                                    display: none;
+                                    &.follower-item {
+                                        display: block;
+                                    }
+                                }
+                            }
                         }
                         .task-item {
                             width: 100%;
@@ -471,11 +499,17 @@
 
                 projectGanttShow: false,
 
+                userInfo: {},
+
+                filtrTask: '',
                 routeName: '',
             }
         },
         mounted() {
             this.routeName = this.$route.name;
+            this.userInfo = $A.getUserInfo((res) => {
+                this.userInfo = res;
+            }, false);
             $A.setOnTaskInfoListener('pages/project-panel',(act, detail) => {
                 if (detail.projectid != this.projectid) {
                     return;
@@ -989,6 +1023,14 @@
                 array.unshift(...tmpLists.filter(({complete}) => complete ));
                 array.unshift(...tmpLists.filter(({complete}) => !complete ));
                 return array;
+            },
+
+            isPersonsTask(task) {
+                return task.persons && !!task.persons.find(({username}) => username == this.userInfo.username);
+            },
+
+            isFollowerTask(task) {
+                return task.follower && task.follower.indexOf(this.userInfo.username) !== -1;
             }
         },
     }

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

@@ -300,3 +300,9 @@
         }
     }
 }
+
+.ivu-dropdown-item {
+    &.dropdown-active {
+        color: #058ce4;
+    }
+}