From 27cd720550eab6cedb7689c64d82c84b00ea33ed Mon Sep 17 00:00:00 2001 From: luchenqun Date: Sun, 20 Nov 2016 22:31:42 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=E8=A1=A8=E6=A0=BC=E9=A1=B5?= =?UTF-8?q?=E9=9D=A2=E7=9A=84=E9=A1=B5=E9=9D=A2=E8=B7=B3=E8=BD=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- database/db.js | 34 ++++++++++++--- .../controllers/bookmarks-controller.js | 33 +++++++-------- .../scripts/controllers/menus-controller.js | 41 ++----------------- .../scripts/controllers/search-controller.js | 8 ++-- .../scripts/directives/js-init-directive.js | 38 +++++++++++++++++ public/views/menus.html | 2 +- routes/api.js | 35 ++++++++++------ 7 files changed, 111 insertions(+), 80 deletions(-) diff --git a/database/db.js b/database/db.js index b73cfc5..46891bc 100644 --- a/database/db.js +++ b/database/db.js @@ -255,20 +255,42 @@ db.getBookmarksNavigate = function(user_id) { }); }; -db.getBookmarksTable = function(user_id) { - var sql = "SELECT id, user_id, title, description, url, public, click_count, DATE_FORMAT(created_at, '%Y-%m-%d') as created_at, DATE_FORMAT(last_click, '%Y-%m-%d') as last_click FROM `bookmarks` WHERE user_id='" + user_id + "' ORDER BY click_count DESC, created_at DESC LIMIT 0, 50"; +db.getBookmarksTable = function(params) { + var user_id = params.user_id; + params.currentPage = params.currentPage || 1; + params.perPageItems = params.perPageItems || 20; + + var sql = "SELECT id, user_id, title, description, url, public, click_count, DATE_FORMAT(created_at, '%Y-%m-%d') as created_at, DATE_FORMAT(last_click, '%Y-%m-%d') as last_click FROM `bookmarks` WHERE 1=1"; + if (user_id) { + sql += " AND `user_id` = '" + user_id + "'" + } + return new Promise(function(resolve, reject) { client.query(sql, (err, result) => { if (err) { reject(err); } else { - resolve(result); + sql += " LIMIT " + (params.currentPage - 1) * params.perPageItems + ", " + params.perPageItems; + var totalItems = result.length; + client.query(sql, (err, result) => { + if (err) { + reject(err); + } else { + var bookmarksData = { + totalItems: totalItems, + bookmarks: result, + } + resolve(bookmarksData); + } + }); } }); - }); + }) } db.getBookmarksSearch = function(params) { + params.currentPage = params.currentPage || 1; + params.perPageItems = params.perPageItems || 20; var sql = "SELECT id, user_id, title, description, url, public, click_count, DATE_FORMAT(created_at, '%Y-%m-%d') as created_at, DATE_FORMAT(last_click, '%Y-%m-%d') as last_click FROM `bookmarks` WHERE 1=1"; if (params.dateCreate) { @@ -305,7 +327,7 @@ db.getBookmarksSearch = function(params) { } params.currentPage = params.currentPage || 1; - params.currentPageItems = params.currentPageItems || 20; + params.perPageItems = params.perPageItems || 20; sql += " ORDER BY click_count DESC, created_at DESC"; console.log(sql); return new Promise(function(resolve, reject) { @@ -314,7 +336,7 @@ db.getBookmarksSearch = function(params) { reject(err); } else { - sql += " LIMIT " + (params.currentPage - 1) * params.currentPageItems + ", " + params.currentPageItems; + sql += " LIMIT " + (params.currentPage - 1) * params.perPageItems + ", " + params.perPageItems; var totalItems = result.length; client.query(sql, (err, result) => { if (err) { diff --git a/public/scripts/controllers/bookmarks-controller.js b/public/scripts/controllers/bookmarks-controller.js index 3f65fa5..3033973 100644 --- a/public/scripts/controllers/bookmarks-controller.js +++ b/public/scripts/controllers/bookmarks-controller.js @@ -4,8 +4,10 @@ app.controller('bookmarksCtr', ['$scope', '$state', '$stateParams', '$filter', ' $scope.showSearch = false; // 搜索对话框 $scope.bookmarkNormalHover = false; $scope.bookmarkEditHover = false; - $scope.showStyle = 'navigate'; // 显示风格'navigate', 'card', 'table' + $scope.showStyle = ($stateParams && $stateParams.showStyle) || 'navigate'; // 显示风格'navigate', 'card', 'table' + $('.js-radio-' + $scope.showStyle).checkbox('set checked'); $scope.edit = false; + const perPageItems = 20; $scope.totalPages = 0; $scope.currentPage = 1; $scope.inputPage = ''; @@ -15,6 +17,7 @@ app.controller('bookmarksCtr', ['$scope', '$state', '$stateParams', '$filter', ' if (currentPage <= $scope.totalPages && currentPage >= 1) { $scope.currentPage = currentPage; $scope.inputPage = ''; + getBookmarks(params); } } @@ -55,20 +58,6 @@ app.controller('bookmarksCtr', ['$scope', '$state', '$stateParams', '$filter', ' } - pubSubService.subscribe('MenuCtr.searchDetail', $scope, function(event, params) { - $scope.showSearch = (params && params.showSearch) - }); - pubSubService.subscribe('MenuCtr.updateShowStyle', $scope, function(event, params) { - $scope.showStyle = (params && params.showStyle); - getBookmarks(params); - }); - - - pubSubService.subscribe('MenuCtr.searchBookmarks', $scope, function(event, params) { - console.log('subscribe MenuCtr.searchBookmarks', params); - getBookmarks(params); - }); - pubSubService.subscribe('EditCtr.inserBookmarsSuccess', $scope, function(event, params) { params.showStyle = $scope.showStyle; console.log('subscribe EditCtr.inserBookmarsSuccess', params); @@ -76,11 +65,18 @@ app.controller('bookmarksCtr', ['$scope', '$state', '$stateParams', '$filter', ' }); function getBookmarks(params) { + if (params.showStyle != 'navigate') { + params.currentPage = $scope.currentPage; + params.perPageItems = perPageItems; + } bookmarkService.getBookmarks(params) .then((data) => { - $scope.bookmarks = data; - $scope.totalPages = parseInt(Math.random() * 1000); - $scope.currentPage = (parseInt(Math.random() * 1000) % $scope.totalPages) + 1; + if (params.showStyle != 'navigate') { + $scope.bookmarks = data.bookmarks; + $scope.totalPages = Math.ceil(data.totalItems / perPageItems); + } else { + $scope.bookmarks = data; + } pubSubService.publish('Common.menuActive', { login: true, index: 0 @@ -92,5 +88,4 @@ app.controller('bookmarksCtr', ['$scope', '$state', '$stateParams', '$filter', ' $scope.$on('viewContentLoaded', function(elementRenderFinishedEvent) { $('.ui.dropdown').dropdown(); }); - }]); diff --git a/public/scripts/controllers/menus-controller.js b/public/scripts/controllers/menus-controller.js index 4ef1135..25717d7 100644 --- a/public/scripts/controllers/menus-controller.js +++ b/public/scripts/controllers/menus-controller.js @@ -50,9 +50,9 @@ app.controller('menuCtr', ['$scope', '$stateParams', '$state', 'pubSubService', $scope.updateShowStyle = function(showStyle) { console.log('updateShowStyle', showStyle) $('.js-radio-' + showStyle).checkbox('set checked'); - pubSubService.publish('MenuCtr.updateShowStyle', { - 'showStyle': showStyle, - }); + $state.go('bookmarks', { + showStyle: showStyle, + }) } $scope.showAddBookmarkMoadl = function() { @@ -76,41 +76,6 @@ app.controller('menuCtr', ['$scope', '$stateParams', '$state', 'pubSubService', .catch((err) => console.log('logout err', err)); } - // 元素构造完成之后,开始使用jquery初始化 - - $scope.$on('viewContentLoaded', function(elementRenderFinishedEvent) { - console.log('menus viewContentLoaded') - $('.js-bookmark-dropdown').dropdown({ - action: 'hide', - }); - $('.ui.dropdown').dropdown({ - on: 'hover', - }); - - $('.ui.checkbox').checkbox(); - $('.ui.checkbox.js-radio-navigate').checkbox('check'); - $('.ui.menu a.item').on('click', function() { - $(this).addClass('selected').siblings().removeClass('selected'); - }); - - $(".ui.menu a.item:first").hover( - function() { - $('.js-bookmark-dropdown').dropdown('show'); - }, - function() { - setTimeout(() => { - if ($('.js-menu-option:hover').length === 0) { - $('.js-bookmark-dropdown').dropdown('hide'); - } - }, 100) - } - ); - - $('.ui.menu a.item').on('click', function() { - $(this).addClass('selected').siblings().removeClass('selected'); - }); - }); - function updateMenuActive(index) { $('.ui.menu a.item').removeClass('selected'); $('.ui.menu a.item:eq(' + index + ')').addClass('selected'); diff --git a/public/scripts/controllers/search-controller.js b/public/scripts/controllers/search-controller.js index de237e7..78fd3f2 100644 --- a/public/scripts/controllers/search-controller.js +++ b/public/scripts/controllers/search-controller.js @@ -1,6 +1,6 @@ app.controller('searchCtr', ['$scope', '$state', '$stateParams', '$filter', '$window', '$timeout', 'bookmarkService', 'pubSubService', function($scope, $state, $stateParams, $filter, $window, $timeout, bookmarkService, pubSubService) { console.log("Hello searchCtr...", $stateParams); - const currentPageItems = 20; + const perPageItems = 20; $scope.bookmarks = []; // 书签数据 $scope.showSearch = false; // $scope.showTags = false; // @@ -38,7 +38,7 @@ app.controller('searchCtr', ['$scope', '$state', '$stateParams', '$filter', '$wi var searchParams = { searchWord: $scope.searchWord, currentPage: 1, - currentPageItems: currentPageItems, + perPageItems: perPageItems, } if ($scope.searchWord) { searchBookmarks(searchParams); @@ -102,7 +102,7 @@ app.controller('searchCtr', ['$scope', '$state', '$stateParams', '$filter', '$wi params.dateClickEnd = $scope.dateClickEnd; } params.currentPage = $scope.currentPage; - params.currentPageItems = currentPageItems; + params.perPageItems = perPageItems; searchBookmarks(params) console.log('search..', params) } @@ -135,7 +135,7 @@ app.controller('searchCtr', ['$scope', '$state', '$stateParams', '$filter', '$wi .then((data) => { $scope.bookmarks = data.bookmarks; $scope.bookmarkCount = data.totalItems; - $scope.totalPages = Math.ceil($scope.bookmarkCount / currentPageItems); + $scope.totalPages = Math.ceil($scope.bookmarkCount / perPageItems); pubSubService.publish('Common.menuActive', { login: true, diff --git a/public/scripts/directives/js-init-directive.js b/public/scripts/directives/js-init-directive.js index d01daf8..14f5696 100644 --- a/public/scripts/directives/js-init-directive.js +++ b/public/scripts/directives/js-init-directive.js @@ -124,3 +124,41 @@ app.directive('jsEditTagsInit', function($compile) { }, }; }); + +app.directive('jsMenuInit', function($compile) { + return { + restrict: 'A', + link: function($scope, $element, $attrs) { + if ($scope.$last === true) { + console.log('jsMenuInit......') + $('.js-bookmark-dropdown').dropdown({ + action: 'hide', + on: 'hover', + }); + + $('.js-bookmark-dropdown .ui.checkbox').checkbox(); + $('.ui.checkbox.js-radio-navigate').checkbox('check'); + $('.ui.menu a.item').on('click', function() { + $(this).addClass('selected').siblings().removeClass('selected'); + }); + + $(".ui.menu a.item:first").hover( + function() { + $('.js-bookmark-dropdown').dropdown('show'); + }, + function() { + setTimeout(() => { + if ($('.js-menu-option:hover').length === 0) { + $('.js-bookmark-dropdown').dropdown('hide'); + } + }, 100) + } + ); + + $('.ui.menu a.item').on('click', function() { + $(this).addClass('selected').siblings().removeClass('selected'); + }); + } + }, + }; +}); diff --git a/public/views/menus.html b/public/views/menus.html index 8406343..6268c96 100644 --- a/public/views/menus.html +++ b/public/views/menus.html @@ -1,6 +1,6 @@