kuaifan 5 years atrás
parent
commit
5005162fa4

+ 67 - 21
app/Http/Controllers/Api/ProjectController.php

@@ -361,7 +361,7 @@ class ProjectController extends Controller
                 'type' => '日志',
                 'projectid' => $projectDetail['id'],
                 'username' => $username,
-                'detail' => '移交项目,自动加入项目',
+                'detail' => '自动加入项目',
                 'indate' => Base::time()
             ]);
         }
@@ -746,8 +746,13 @@ class ProjectController extends Controller
                     'projectid' => $projectid,
                     'taskid' => $task['id'],
                     'username' => $user['username'],
-                    'detail' => '删除列表任务【' . $task['title'] . '】',
-                    'indate' => Base::time()
+                    'detail' => '删除列表任务',
+                    'indate' => Base::time(),
+                    'other' => Base::array2string([
+                        'type' => 'task',
+                        'id' => $task['id'],
+                        'title' => $task['title'],
+                    ])
                 ];
             }
             $logArray[] = [
@@ -963,8 +968,13 @@ class ProjectController extends Controller
                 'projectid' => $inArray['projectid'],
                 'taskid' => $taskid,
                 'username' => $inArray['createuser'],
-                'detail' => '添加任务【' . $inArray['title'] . '】',
-                'indate' => Base::time()
+                'detail' => '添加任务',
+                'indate' => Base::time(),
+                'other' => Base::array2string([
+                    'type' => 'task',
+                    'id' => $taskid,
+                    'title' => $inArray['title'],
+                ])
             ]);
             Project::updateNum($inArray['projectid']);
             //
@@ -1024,8 +1034,13 @@ class ProjectController extends Controller
                     'projectid' => $task['projectid'],
                     'taskid' => $taskid,
                     'username' => $user['username'],
-                    'detail' => '取消归档【' . $task['title'] . '】',
-                    'indate' => Base::time()
+                    'detail' => '取消归档',
+                    'indate' => Base::time(),
+                    'other' => Base::array2string([
+                        'type' => 'task',
+                        'id' => $taskid,
+                        'title' => $task['title'],
+                    ])
                 ]);
                 return Base::retSuccess('取消归档成功');
             }
@@ -1041,8 +1056,13 @@ class ProjectController extends Controller
                     'projectid' => $task['projectid'],
                     'taskid' => $taskid,
                     'username' => $user['username'],
-                    'detail' => '归档【' . $task['title'] . '】',
-                    'indate' => Base::time()
+                    'detail' => '加入归档',
+                    'indate' => Base::time(),
+                    'other' => Base::array2string([
+                        'type' => 'task',
+                        'id' => $taskid,
+                        'title' => $task['title'],
+                    ])
                 ]);
                 return Base::retSuccess('加入归档成功');
             }
@@ -1192,7 +1212,21 @@ class ProjectController extends Controller
             $array['id'] = $id;
             $array['path'] = Base::fillUrl($array['path']);
             $array['thumb'] = Base::fillUrl($array['thumb']);
+            $array['download'] = 0;
             $array['yetdown'] = 0;
+            DB::table('project_log')->insert([
+                'type' => '日志',
+                'projectid' => $projectid,
+                'taskid' => $taskid,
+                'username' => $user['username'],
+                'detail' => '上传文件',
+                'indate' => Base::time(),
+                'other' => Base::array2string([
+                    'type' => 'file',
+                    'id' => $id,
+                    'name' => $fileData['name'],
+                ])
+            ]);
             return Base::retSuccess('success', $array);
         }
     }
@@ -1204,19 +1238,19 @@ class ProjectController extends Controller
      */
     public function files__download()
     {
-        $row = Base::DBC2A(DB::table('project_files')->where('id', intval(Request::input('fileid')))->where('delete', 0)->first());
-        if (empty($row)) {
+        $fileDetail = Base::DBC2A(DB::table('project_files')->where('id', intval(Request::input('fileid')))->where('delete', 0)->first());
+        if (empty($fileDetail)) {
             return abort(404, '文件不存在或已被删除!');
         }
-        $filePath = public_path($row['path']);
+        $filePath = public_path($fileDetail['path']);
         if (!file_exists($filePath)) {
             return abort(404, '文件不存在或已被删除。');
         }
-        if (intval(Session::get('filesDownload:' . $row['id'])) !== 1) {
-            Session::put('filesDownload:' . $row['id'], 1);
-            DB::table('project_files')->where('id', $row['id'])->increment('download');
+        if (intval(Session::get('filesDownload:' . $fileDetail['id'])) !== 1) {
+            Session::put('filesDownload:' . $fileDetail['id'], 1);
+            DB::table('project_files')->where('id', $fileDetail['id'])->increment('download');
         }
-        return response()->download($filePath, $row['name']);
+        return response()->download($filePath, $fileDetail['name']);
     }
 
     /**
@@ -1259,8 +1293,13 @@ class ProjectController extends Controller
                 'projectid' => $fileDetail['projectid'],
                 'taskid' => $fileDetail['taskid'],
                 'username' => $user['username'],
-                'detail' => '文件【' . $fileDetail['name'] . '(' . $fileDetail['id'] . ')】重命名【' . $name . '】',
-                'indate' => Base::time()
+                'detail' => '文件【' . $fileDetail['name'] . '】重命名',
+                'indate' => Base::time(),
+                'other' => Base::array2string([
+                    'type' => 'file',
+                    'id' => $fileDetail['id'],
+                    'name' => $name,
+                ])
             ]);
         }
         //
@@ -1303,8 +1342,13 @@ class ProjectController extends Controller
             'projectid' => $fileDetail['projectid'],
             'taskid' => $fileDetail['taskid'],
             'username' => $user['username'],
-            'detail' => '删除文件【' . $fileDetail['name'] . '(' . $fileDetail['id'] . ')】',
-            'indate' => Base::time()
+            'detail' => '删除文件',
+            'indate' => Base::time(),
+            'other' => Base::array2string([
+                'type' => 'file',
+                'id' => $fileDetail['id'],
+                'name' => $fileDetail['name'],
+            ])
         ]);
         //
         return Base::retSuccess('删除成功');
@@ -1354,9 +1398,11 @@ class ProjectController extends Controller
             $item = array_merge($item, Users::username2basic($item['username']));
             $item['timeData'] = [
                 'ymd' => date(date("Y", $item['indate']) == date("Y", Base::time()) ? "m-d" : "Y-m-d", $item['indate']),
-                'week' => Base::getTimeWeek($item['indate']),
+                'hi' => date("h:i", $item['indate']) ,
+                'week' => "周" . Base::getTimeWeek($item['indate']),
                 'segment' => Base::getTimeDayeSegment($item['indate']),
             ];
+            $item['other'] = Base::string2array($item['other'], ['type' => '']);
             $lists['lists'][$key] = $item;
         }
         return Base::retSuccess('success', $lists);

+ 2 - 5
app/Http/Controllers/Api/UsersController.php

@@ -88,15 +88,13 @@ class UsersController extends Controller
     {
         $keys = Request::input('where');
         $whereArr = [];
-        $whereFunc = null;
         $whereRaw = null;
         if ($keys['usernameequal'])     $whereArr[] = ['username', '=', $keys['usernameequal']];
         if ($keys['identity'])          $whereArr[] = ['identity', 'like', '%,' . $keys['identity'] . ',%'];
         if ($keys['noidentity'])        $whereArr[] = ['identity', 'not like', '%,' . $keys['noidentity'] . ',%'];
         if ($keys['username']) {
-            $whereFunc = function($query) use ($keys) {
-                $query->where('username', 'like', '%' . $keys['username'] . '%')->orWhere('nickname', 'like', '%' . $keys['username'] . '%');
-            };
+            $whereRaw.= $whereRaw ? ' AND ' : '';
+            $whereRaw.= "(`username` LIKE '%" . $keys['username'] . "%' OR `nickname` LIKE '%" . $keys['username'] . "%')";
         }
         if (intval($keys['projectid']) > 0) {
             $whereRaw.= $whereRaw ? ' AND ' : '';
@@ -105,7 +103,6 @@ class UsersController extends Controller
         //
         $lists = DBCache::table('users')->select(['id', 'username', 'nickname', 'userimg', 'profession'])
             ->where($whereArr)
-            ->where($whereFunc)
             ->whereRaw($whereRaw)
             ->orderBy('id')
             ->cacheMinutes(now()->addSeconds(10))

+ 7 - 2
resources/assets/js/main/components/DrawerTabsContainer.vue

@@ -1,6 +1,6 @@
 <template>
-    <div class="dtc-main" :style="myStyle">
-        <div class="dtc-body">
+    <div :class="[idDrawerTabs?'dtc-main':'']" :style="myStyle">
+        <div :class="[idDrawerTabs?'dtc-body':'']">
             <slot/>
         </div>
     </div>
@@ -32,12 +32,17 @@
         name: 'DrawerTabsContainer',
         data() {
             return {
+                idDrawerTabs: false,
                 calculateHeight: 0,
             }
         },
         mounted() {
             let el = $A(this.$el);
             let eb = el.parents(".ivu-drawer-body");
+            if (eb == 0 || eb.parents(".ivu-drawer-wrap").length == 0) {
+                return;
+            }
+            this.idDrawerTabs = true;
             this.calculateHeight = eb.outerHeight() - el.offset().top;
             setInterval(() => {
                 this.calculateHeight = eb.outerHeight() - el.offset().top;

+ 1 - 0
resources/assets/js/main/components/project/task/add.vue

@@ -47,6 +47,7 @@
     .task-input-box {
         position: relative;
         margin-top: 5px;
+        margin-bottom: 12px;
         .input-placeholder,
         .input-enter {
             position: absolute;

+ 70 - 12
resources/assets/js/main/components/project/task/logs.vue

@@ -2,19 +2,25 @@
     <drawer-tabs-container>
         <div class="project-task-logs">
             <ul class="logs-activity">
-                <li v-for="(item, date) in lists">
-                    <div class="logs-date">{{date}}</div>
+                <li v-for="(items, key) in lists">
+                    <div class="logs-date">{{key}}</div>
                     <div class="logs-section">
                         <Timeline>
-                            <TimelineItem color="green">
-                                <span>发布里程碑版本</span>
+                            <TimelineItem v-for="(item, index) in items" :key="index">
+                                <div slot="dot" class="logs-dot">
+                                    <img :src="item.userimg"/>
+                                </div>
+                                <div class="log-summary">
+                                    <span class="log-creator">{{item.username}}</span>
+                                    <span class="log-text-secondary">{{item.detail}}</span>
+                                    <span v-if="item.other.type=='task'" class="log-text-link">{{item.other.title}}</span>
+                                    <a v-if="item.other.type=='file'" class="log-text-link" target="_blank" :href="fileDownUrl(item.other.id)">{{item.other.name}}</a>
+                                    <span class="log-text-info">{{item.timeData.ymd}} {{item.timeData.segment}} {{item.timeData.hi}}</span></div>
                             </TimelineItem>
-                            <TimelineItem>发布1.0版本</TimelineItem>
-                            <TimelineItem>发布2.0版本</TimelineItem>
-                            <TimelineItem>发布3.0版本</TimelineItem>
                         </Timeline>
                     </div>
                 </li>
+                <li v-if="hasMorePages" class="logs-more" @click="getMore">加载更多</li>
             </ul>
         </div>
     </drawer-tabs-container>
@@ -28,6 +34,12 @@
             padding: 12px 12px;
             > li {
                 padding-top: 22px;
+                &.logs-more {
+                    cursor: pointer;
+                    &:hover {
+                        color: #048be0;
+                    }
+                }
                 &:first-child {
                     padding-top: 0;
                 }
@@ -35,6 +47,37 @@
                     color: rgba(0, 0, 0, .36);
                     padding-bottom: 14px;
                 }
+                .logs-dot {
+                    width: 18px;
+                    height: 18px;
+                    margin-left: 10px;
+                    img {
+                        width: 100%;
+                        height: 100%;
+                        border-radius: 50%;
+                        overflow: hidden;
+                    }
+                }
+                .log-summary {
+                    > span,
+                    > a {
+                        padding-right: 6px;
+                        word-wrap: break-word;
+                        word-break: break-word;
+                    }
+                    .log-creator {
+                        color:rgba(0, 0, 0, 0.85)
+                    }
+                    .log-text-secondary {
+                        color: rgba(0,0,0,.54);
+                    }
+                    .log-text-link {
+                        color: #048be0;
+                    }
+                    .log-text-info {
+                        color: rgba(0,0,0,.36);
+                    }
+                }
             }
         }
     }
@@ -65,6 +108,7 @@
                 loadIng: 0,
 
                 lists: {},
+                listPage: 1,
                 hasMorePages: false,
             }
         },
@@ -115,6 +159,7 @@
                     data: {
                         projectid: this.projectid,
                         taskid: this.taskid,
+                        page: Math.max(this.listPage, 1),
                         pagesize: 100,
                     },
                     complete: () => {
@@ -123,14 +168,14 @@
                     success: (res) => {
                         if (res.ret === 1) {
                             let timeData,
-                                ymd;
+                                key;
                             res.data.lists.forEach((item) => {
                                 timeData = item.timeData;
-                                ymd = timeData.ymd;
-                                if (typeof this.lists[ymd] !== "object") {
-                                    this.$set(this.lists, ymd, []);
+                                key = timeData.ymd + " " + timeData.week;
+                                if (typeof this.lists[key] !== "object") {
+                                    this.$set(this.lists, key, []);
                                 }
-                                this.lists[ymd].push(item);
+                                this.lists[key].push(item);
                             });
                             console.log(this.lists);
                             this.hasMorePages = res.data.hasMorePages;
@@ -141,6 +186,19 @@
                     }
                 });
             },
+
+            getMore() {
+                if (!this.hasMorePages) {
+                    return;
+                }
+                this.hasMorePages = false;
+                this.listPage++;
+                this.getLists();
+            },
+
+            fileDownUrl(id) {
+                return $A.aUrl('project/files/download?fileid=' + id);
+            }
         }
     }
 </script>

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

@@ -19,7 +19,7 @@
                     <span class="ft hover" @click="openProjectDrawer('lists')"><i class="ft icon">&#xE89E;</i> 任务列表</span>
                     <span class="ft hover" @click="openProjectDrawer('files')"><i class="ft icon">&#xE701;</i> 文件列表</span>
                     <span class="ft hover" @click="openProjectDrawer('logs')"><i class="ft icon">&#xE753;</i> 项目动态</span>
-                    <span class="ft hover" @click="openProjectDrawer('setting')"><i class="ft icon">&#xE7A7;</i> 设置</span>
+                    <span class="ft hover" @click="openProjectSettingDrawer('complete')"><i class="ft icon">&#xE7A7;</i> 设置</span>
                 </div>
             </div>
         </div>
@@ -55,7 +55,7 @@
                                         <div v-if="task.overdue" class="task-status">已超期</div>
                                         <div v-else-if="task.complete" class="task-status">已完成</div>
                                         <div v-else class="task-status">未完成</div>
-                                        <Tooltip class="task-userimg" :content="task.nickname || task.username"><img :src="task.userimg"/></Tooltip>
+                                        <Tooltip class="task-userimg" :content="task.nickname || task.username" transfer><img :src="task.userimg"/></Tooltip>
                                     </div>
                                 </div>
                             </div>
@@ -84,7 +84,19 @@
                 <TabPane :label="$L('项目动态')" name="logs">
                     <project-task-logs :canload="projectDrawerShow && projectDrawerTab == 'logs'" :projectid="projectid"></project-task-logs>
                 </TabPane>
-                <TabPane :label="$L('项目设置')" name="setting">
+            </Tabs>
+        </Drawer>
+
+        <Drawer v-model="projectSettingDrawerShow" width="75%">
+            <Tabs v-if="projectSettingDrawerShow" v-model="projectSettingDrawerTab">
+                <TabPane :label="$L('已归档任务')" name="complete">
+                    <project-complete :canload="projectSettingDrawerShow && projectSettingDrawerTab == 'complete'" :projectid="projectid"></project-complete>
+                </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>
             </Tabs>
         </Drawer>
@@ -317,9 +329,15 @@
     import ProjectTaskLists from "../components/project/task/lists";
     import ProjectTaskFiles from "../components/project/task/files";
     import ProjectTaskLogs from "../components/project/task/logs";
+    import ProjectComplete from "../components/project/complete";
+    import ProjectUsers from "../components/project/users";
+    import ProjectStatistics from "../components/project/statistics";
 
     export default {
         components: {
+            ProjectStatistics,
+            ProjectUsers,
+            ProjectComplete,
             ProjectTaskLogs,
             ProjectTaskFiles, ProjectTaskLists, ProjectAddTask, draggable, WLoading, WContent, WHeader},
         data () {
@@ -334,6 +352,9 @@
 
                 projectDrawerShow: false,
                 projectDrawerTab: 'lists',
+
+                projectSettingDrawerShow: false,
+                projectSettingDrawerTab: 'complete',
             }
         },
         mounted() {
@@ -601,6 +622,11 @@
             openProjectDrawer(tab) {
                 this.projectDrawerTab = tab;
                 this.projectDrawerShow = true;
+            },
+
+            openProjectSettingDrawer(tab) {
+                this.projectSettingDrawerTab = tab;
+                this.projectSettingDrawerShow = true;
             }
         },
     }

+ 2 - 2
resources/assets/js/main/pages/project.vue

@@ -55,7 +55,7 @@
                         <div class="project-bottom">
                             <div class="project-iconbtn" @click.stop="handleProject('complete', item)">
                                 <Icon class="project-iconbtn-icon1" type="md-checkmark-circle-outline" size="24" />
-                                <div class="project-iconbtn-text">已完成任务</div>
+                                <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" />
@@ -108,7 +108,7 @@
 
         <Drawer v-model="projectDrawerShow" width="75%">
             <Tabs v-if="projectDrawerShow" v-model="projectDrawerTab">
-                <TabPane :label="$L('已完成任务')" name="complete">
+                <TabPane :label="$L('已归档任务')" name="complete">
                     <project-complete :canload="projectDrawerShow && projectDrawerTab == 'complete'" :projectid="handleProjectId"></project-complete>
                 </TabPane>
                 <TabPane :label="$L('成员管理')" name="member">