From c38f9b55931c3e59960a648e93b1328a40ab690d Mon Sep 17 00:00:00 2001 From: luchenqun Date: Wed, 14 Jun 2017 11:09:42 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=86=E7=B1=BB=E9=87=8C=E9=9D=A2=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E5=88=86=E7=B1=BB=E5=AE=9A=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- database/db.js | 56 +++++++++++++++++-- public/scripts/controllers/tags-controller.js | 13 ++++- public/views/tags.html | 6 ++ routes/api.js | 9 ++- 4 files changed, 74 insertions(+), 10 deletions(-) diff --git a/database/db.js b/database/db.js index ba6b30d..77844f2 100644 --- a/database/db.js +++ b/database/db.js @@ -565,11 +565,12 @@ db.getBookmarksNavigate = function(tags) { }); }; -db.getBookmarksCostomTag = function(user_id) { - console.log('getBookmarksCostomTag'); - var sql1 = "(SELECT id, user_id, title, description, url, public, click_count, DATE_FORMAT(created_at, '%Y-%m-%d %H:%i:%s') as created_at, DATE_FORMAT(last_click, '%Y-%m-%d %H:%i:%s') as last_click FROM `bookmarks` WHERE `user_id` = '" + user_id + "' ORDER BY `click_count` DESC LIMIT 0, 79)"; - var sql2 = "(SELECT id, user_id, title, description, url, public, click_count, DATE_FORMAT(created_at, '%Y-%m-%d %H:%i:%s') as created_at, DATE_FORMAT(last_click, '%Y-%m-%d %H:%i:%s') as last_click FROM `bookmarks` WHERE `user_id` = '" + user_id + "' ORDER BY `created_at` DESC LIMIT 0, 79)"; - var sql3 = "(SELECT id, user_id, title, description, url, public, click_count, DATE_FORMAT(created_at, '%Y-%m-%d %H:%i:%s') as created_at, DATE_FORMAT(last_click, '%Y-%m-%d %H:%i:%s') as last_click FROM `bookmarks` WHERE `user_id` = '" + user_id + "' ORDER BY `last_click` DESC LIMIT 0, 79)"; +db.getBookmarksCostomTag = function(user_id, perPageItems) { + console.log('getBookmarksCostomTag', user_id, perPageItems); + perPageItems = perPageItems || 50; + var sql1 = "(SELECT id, user_id, title, description, url, public, click_count, DATE_FORMAT(created_at, '%Y-%m-%d %H:%i:%s') as created_at, DATE_FORMAT(last_click, '%Y-%m-%d %H:%i:%s') as last_click FROM `bookmarks` WHERE `user_id` = '" + user_id + "' ORDER BY `click_count` DESC LIMIT 0, "+ perPageItems +")"; + var sql2 = "(SELECT id, user_id, title, description, url, public, click_count, DATE_FORMAT(created_at, '%Y-%m-%d %H:%i:%s') as created_at, DATE_FORMAT(last_click, '%Y-%m-%d %H:%i:%s') as last_click FROM `bookmarks` WHERE `user_id` = '" + user_id + "' ORDER BY `created_at` DESC LIMIT 0, "+ perPageItems +")"; + var sql3 = "(SELECT id, user_id, title, description, url, public, click_count, DATE_FORMAT(created_at, '%Y-%m-%d %H:%i:%s') as created_at, DATE_FORMAT(last_click, '%Y-%m-%d %H:%i:%s') as last_click FROM `bookmarks` WHERE `user_id` = '" + user_id + "' ORDER BY `last_click` DESC LIMIT 0, "+ perPageItems +")"; var sql = sql1 + " UNION " + sql2 + " UNION " + sql3; return new Promise(function(resolve, reject) { @@ -577,7 +578,50 @@ db.getBookmarksCostomTag = function(user_id) { if (err) { reject(err); } else { - resolve(result); + var bookmarks = []; + var begin = 0; + var end = perPageItems; + + result.sort((a, b) => { + var click1 = parseInt(a.click_count); + var click2 = parseInt(b.click_count); + if (click1 > click2) { + return -1; + } else if (click1 == click2) { + return a.created_at >= b.created_at ? -1 : 1; + } else { + return 1; + } + }) + .slice(begin, end) + .forEach((b) => { + var bookmark = JSON.parse(JSON.stringify(b)); // 执行深度复制 + bookmark.type = 1; + bookmarks.push(bookmark); + }) + + result.sort((a, b) => a.created_at >= b.created_at ? -1 : 1) + .slice(begin, end) + .forEach((b) => { + var bookmark = JSON.parse(JSON.stringify(b)); // 执行深度复制 + bookmark.type = 2; + bookmarks.push(bookmark); + }) + + result.sort((a, b) => a.last_click >= b.last_click ? -1 : 1) + .slice(begin, end) + .forEach((b) => { + var bookmark = JSON.parse(JSON.stringify(b)); // 执行深度复制 + bookmark.type = 3; + bookmarks.push(bookmark); + }) + + + var bookmarksData = { + totalItems: result.length, + bookmarks: bookmarks, + } + resolve(bookmarksData); } }); }); diff --git a/public/scripts/controllers/tags-controller.js b/public/scripts/controllers/tags-controller.js index e006fef..225eccf 100644 --- a/public/scripts/controllers/tags-controller.js +++ b/public/scripts/controllers/tags-controller.js @@ -25,6 +25,12 @@ app.controller('tagsCtr', ['$scope', '$filter', '$window', '$stateParams', '$tim $scope.waitDelBookmark = {}; $scope.bookmarkData = {}; $scope.bookmarkNormalHover = false; + $scope.costomTag = { + id: -1, + cnt: 50, + bookmarkClicked: false, + name: '分类定制', + } var timeagoInstance = timeago(); @@ -74,6 +80,7 @@ app.controller('tagsCtr', ['$scope', '$filter', '$window', '$stateParams', '$tim $scope.currentTagId = tagId; $scope.currentPage = currentPage; $scope.loadBookmarks = true; + $scope.costomTag.bookmarkClicked = false; perPageItems = ($scope.showMode == 'item') ? 50 : 20; @@ -84,6 +91,10 @@ app.controller('tagsCtr', ['$scope', '$filter', '$window', '$stateParams', '$tim } }); + if (tagId == -1) { + $scope.costomTag.bookmarkClicked = true; + } + var params = { tagId: tagId, currentPage: currentPage, @@ -96,7 +107,7 @@ app.controller('tagsCtr', ['$scope', '$filter', '$window', '$stateParams', '$tim $scope.bookmarkData = data; $scope.changeOrder($scope.order.indexOf(true)); $scope.bookmarkCount = $scope.bookmarkData.totalItems; - $scope.totalPages = Math.ceil($scope.bookmarkCount / perPageItems); + $scope.totalPages = tagId == -1 ? 1 : Math.ceil($scope.bookmarkCount / perPageItems); $scope.inputPage = ''; $scope.loadBookmarks = false; diff --git a/public/views/tags.html b/public/views/tags.html index 73afaf3..70bb5eb 100644 --- a/public/views/tags.html +++ b/public/views/tags.html @@ -7,6 +7,12 @@ ({{ tag.cnt || 0 }}) +
+
+ {{ costomTag.name }} + ({{ costomTag.cnt || 0 }}) +
+
diff --git a/routes/api.js b/routes/api.js index a5fada2..18b4000 100644 --- a/routes/api.js +++ b/routes/api.js @@ -417,8 +417,8 @@ api.get('/bookmarks', function(req, res) { } else if (params.showStyle === 'costomTag') { var bookmarks = [] db.getBookmarksCostomTag(userId) - .then((_bookmarks) => { - bookmarks = _bookmarks; + .then((bookmarksData) => { + bookmarks = bookmarksData.bookmarks; var bookmarkIds = bookmarks.map((bookmark) => bookmark.id) return db.getTagsBookmarks(bookmarkIds); }) @@ -511,7 +511,10 @@ api.get('/bookmarksByTag', function(req, res) { totalItems: 0, bookmarks: [], } - db.getBookmarksByTag(params) + + var fun = (params.tagId == -1) ? (db.getBookmarksCostomTag) : (db.getBookmarksByTag); + + fun((params.tagId == -1) ? (userId) : (params), params.perPageItems) .then((bookmarksData) => { sendData = bookmarksData; var bookmarkIds = sendData.bookmarks.map((bookmark) => bookmark.id)