From a0285cf34051d8caa052de11c958db9ee4cc7162 Mon Sep 17 00:00:00 2001 From: luchenqun Date: Fri, 17 Mar 2017 23:45:59 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=E7=83=AD=E9=97=A8=E4=B9=A6?= =?UTF-8?q?=E7=AD=BE=E7=9A=84=E6=90=9C=E7=B4=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- database/db.js | 64 ++++++++++- public/scripts/controllers/hot-controller.js | 4 +- .../scripts/controllers/search-controller.js | 50 ++++++--- .../scripts/directives/js-init-directive.js | 3 + public/scripts/services/bookmark-service.js | 14 +++ public/views/bookmark-info.html | 101 +++++++++--------- public/views/search.html | 39 +++++-- routes/api.js | 16 ++- 8 files changed, 213 insertions(+), 78 deletions(-) diff --git a/database/db.js b/database/db.js index a5b6ec4..bb98eb8 100644 --- a/database/db.js +++ b/database/db.js @@ -609,8 +609,6 @@ db.getBookmarksByTag = function(params) { } 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) { @@ -671,6 +669,66 @@ db.getBookmarksSearch = function(params) { }) } +// CREATE TABLE `hot_bookmarks` ( +// `id` int(11) NOT NULL AUTO_INCREMENT, -- id(articleId) +// `date` int(11) NOT NULL DEFAULT 0, -- 日期(自己添加) +// `title` varchar(255) DEFAULT NULL, -- 标题(title) +// `description` varchar(4096) DEFAULT NULL, -- 描述(自己添加) +// `url` varchar(1024) DEFAULT NULL, -- 链接(url) +// `fav_count` smallint DEFAULT 1, -- 总共收藏人数(favCount) +// `created_by` varchar(64) DEFAULT NULL, -- 创建者(sourceName) +// `created_at` bigint DEFAULT 0, -- 创建时间(updatetime) +// `last_click` bigint DEFAULT 0, -- 最后一次点击时间(createtime) +// `snap_url` varchar(1024) DEFAULT NULL, -- 截图链接(imageList[0]) +// `favicon_url` varchar(1024) DEFAULT NULL, -- icon链接(sourceLogo) +// `status` tinyint(4) DEFAULT '0', -- 状态 +// PRIMARY KEY (`id`) +// ); + +db.getHotBookmarksSearch = function(params) { + var sql = "SELECT id, title, description, url, fav_count, created_by, created_at, last_click, snap_url, favicon_url FROM `hot_bookmarks` WHERE status=0"; + + if (params.dateCreate) { + var d = new Date(); + d.setDate(d.getDate() - parseInt(params.dateCreate)); + sql += " AND `created_at` >= '" + d.getTime() + "'" + } else if (params.dateCreateBegin && params.dateCreateEnd) { + var dateCreateBegin = new Date(params.dateCreateBegin + "T00:00:00"); + var dateCreateEnd = new Date(params.dateCreateEnd + "T23:59:59"); + sql += " AND `created_at` >= '" + dateCreateBegin.getTime() + "' AND `created_at` <= '" + dateCreateEnd.getTime() + "' " + } + if (params.dateClick) { + var d = new Date(); + d.setDate(d.getDate() - parseInt(params.dateClick)); + sql += " AND `last_click` >= '" + d.getTime() + "'" + } else if (params.dateClickBegin && params.dateClickEnd) { + var dateClickBegin = new Date(params.dateClickBegin + "T00:00:00"); + var dateClickEnd = new Date(params.dateClickEnd + "T23:59:59"); + sql += " AND `last_click` >= '" + dateClickBegin.getTime() + "' AND `last_click` <= '" + dateClickEnd.getTime() + "' " + } + + if (params.searchWord) { + sql += " AND (`title` LIKE '%" + params.searchWord + "%')" + } + sql += " ORDER BY fav_count DESC"; + console.log(sql); + return new Promise(function(resolve, reject) { + client.query(sql, (err, result) => { + if (err) { + reject(err); + } else { + params.currentPage = params.currentPage || 1; + params.perPageItems = params.perPageItems || 20; + var searchData = { + totalItems: result.length, + bookmarks: result.splice((params.currentPage - 1) * params.perPageItems, params.currentPage * params.perPageItems), + } + resolve(searchData); + } + }); + }) +} + db.getBookmarksCard = function(user_id) { return db.getBookmarksTable(user_id); } @@ -790,7 +848,7 @@ db.addHotBookmark = function(bookmark) { }; db.hotBookmarks = function(date) { - var sql = "SELECT * FROM `hot_bookmarks` WHERE `date` = "+ date +" AND `status` = 0" + var sql = "SELECT * FROM `hot_bookmarks` WHERE `date` = " + date + " AND `status` = 0" return new Promise(function(resolve, reject) { client.query(sql, (err, result) => { if (err) { diff --git a/public/scripts/controllers/hot-controller.js b/public/scripts/controllers/hot-controller.js index 12f6b8b..7cacdeb 100644 --- a/public/scripts/controllers/hot-controller.js +++ b/public/scripts/controllers/hot-controller.js @@ -122,10 +122,10 @@ app.controller('hotCtr', ['$scope', '$state', '$stateParams', '$filter', '$windo var login = (menusScope && menusScope.login) || false; if (login) { $scope.random = true; - var beginDay = new Date(2016, 7, 15); // 注意日期是从0 ~ 11 + var beginDay = new Date(2016, 7, 15); // 注意日期是从0 ~ 11 var now = new Date(); var dayGap = parseInt(Math.abs(now - beginDay) / (1000 * 60 * 60 * 24)) + 1; - $scope.curDay = -(parseInt(Math.random() * 1000000) % dayGap); + $scope.curDay = -(parseInt(Math.random() * 1000000) % dayGap); $scope.bookmarks = []; getHotBookmarks(); } else { diff --git a/public/scripts/controllers/search-controller.js b/public/scripts/controllers/search-controller.js index 6e1157f..d130066 100644 --- a/public/scripts/controllers/search-controller.js +++ b/public/scripts/controllers/search-controller.js @@ -20,6 +20,7 @@ app.controller('searchCtr', ['$scope', '$state', '$stateParams', '$filter', '$wi $scope.inputPage = ''; $scope.loading = false; $scope.waitDelBookmark = {}; + $scope.searchHotBookmarks = false; $scope.changeCurrentPage = function(currentPage) { currentPage = parseInt(currentPage) || 0; @@ -222,18 +223,43 @@ app.controller('searchCtr', ['$scope', '$state', '$stateParams', '$filter', '$wi function searchBookmarks(params) { $scope.loading = true; $('.js-table-search').transition('hide'); - bookmarkService.searchBookmarks(params) - .then((data) => { - $scope.bookmarks = data.bookmarks; - $scope.bookmarkCount = data.totalItems; - $scope.totalPages = Math.ceil($scope.bookmarkCount / perPageItems); - $scope.loading = false; - transition(); - }) - .catch((err) => { - console.log('getBookmarks err', err); - $scope.loading = false; - }); + if ($scope.searchHotBookmarks) { + console.log(params); + bookmarkService.searchHotBookmarks(params) + .then((data) => { + $scope.bookmarks = []; + data.bookmarks.forEach((bookmark) => { + bookmark.tags = [{ + id: -1, + name: bookmark.created_by, // 给转存用 + }] + bookmark.created_at = $filter('date')(new Date(bookmark.created_at), "yyyy-MM-dd HH:mm:ss"); + bookmark.last_click = $filter('date')(new Date(bookmark.last_click), "yyyy-MM-dd HH:mm:ss"); + $scope.bookmarks.push(bookmark); + }) + $scope.bookmarkCount = data.totalItems; + $scope.totalPages = Math.ceil($scope.bookmarkCount / perPageItems); + $scope.loading = false; + transition(); + }) + .catch((err) => { + console.log('searchHotBookmarks err', err); + $scope.loading = false; + }); + } else { + bookmarkService.searchBookmarks(params) + .then((data) => { + $scope.bookmarks = data.bookmarks; + $scope.bookmarkCount = data.totalItems; + $scope.totalPages = Math.ceil($scope.bookmarkCount / perPageItems); + $scope.loading = false; + transition(); + }) + .catch((err) => { + console.log('getBookmarks err', err); + $scope.loading = false; + }); + } } function animation() { diff --git a/public/scripts/directives/js-init-directive.js b/public/scripts/directives/js-init-directive.js index d359528..5dadca1 100644 --- a/public/scripts/directives/js-init-directive.js +++ b/public/scripts/directives/js-init-directive.js @@ -81,6 +81,9 @@ app.directive('jsDropdownUserRangeInit', function($compile, $timeout) { onChange: function(value, text, $choice) { $timeout(function() { $scope.showTags = (value == '1'); + $scope.searchHotBookmarks = (value == '3'); + $scope.bookmarks = []; + $scope.totalPages = 0 }) }, }); diff --git a/public/scripts/services/bookmark-service.js b/public/scripts/services/bookmark-service.js index 953b1e0..3714775 100644 --- a/public/scripts/services/bookmark-service.js +++ b/public/scripts/services/bookmark-service.js @@ -150,6 +150,20 @@ app.factory('bookmarkService', ['$http', '$q', function($http, $q) { }); return def.promise; }, + searchHotBookmarks: function(params) { + var def = $q.defer(); + + $http.get('/api/searchHotBookmarks/', { + params: params + }) + .success(function(data) { + def.resolve(data); + }) + .error(function(data, status) { + def.reject('searchHotBookmarks error'); + }); + return def.promise; + }, getBookmark: function(params) { var def = $q.defer(); diff --git a/public/views/bookmark-info.html b/public/views/bookmark-info.html index 9bae623..ab30088 100644 --- a/public/views/bookmark-info.html +++ b/public/views/bookmark-info.html @@ -13,63 +13,60 @@
- - 网页地址{{bookmark.url}} -
-
-
-
- 创建日期:{{bookmark.created_at}} -
-
- 最后点击:{{bookmark.last_click}} -
-
-
-
- 点击次数:{{bookmark.click_count}} -
-
- 收藏人数:{{bookmark.fav_count}} -
-
- 书签分类: -
- {{ tag.name }} + + 网页地址{{bookmark.url}} +
+
+
+
+ 创建日期:{{bookmark.created_at}} +
+
+ 最后点击:{{bookmark.last_click}} +
+
+
+
+ 点击次数:{{bookmark.click_count}} +
+
+ 收藏人数:{{bookmark.fav_count}} +
+
+ 书签分类: +
+ {{ tag.name }} +
+
+
+ 来源信息:{{bookmark.created_by}} +
- - -
-
-
-
- 描述信息 +
+
+
+
+ 描述信息 +
+

+
-

-
-
-
-
-
-
- 内容摘抄 +
+
+
+
+ 内容摘抄 +
+

+ +
+
+
+
跳转到原页面
+
-

-
-
-
-
跳转到原页面
- -
-
diff --git a/public/views/search.html b/public/views/search.html index 5a18a59..21b38b1 100644 --- a/public/views/search.html +++ b/public/views/search.html @@ -15,6 +15,7 @@
@@ -85,7 +86,7 @@
-
+
@@ -120,17 +121,30 @@ 标题 链接 - 点击次数 + {{ searchHotBookmarks ? '收藏人数' : '点击次数'}} 创建日期 最后点击 - 分类 + {{ searchHotBookmarks ? '来源信息' : '分类'}} 操作 - + + {{ bookmark.title }} @@ -138,13 +152,22 @@ {{ bookmark.url }} - {{ bookmark.click_count }} - {{ bookmark.created_at }} - {{ bookmark.last_click }} + {{ bookmark.click_count || bookmark.fav_count }} -
+ {{ bookmark.created_at.substr(0, 10) }} + + + + {{ bookmark.last_click.substr(0, 10) }} + + + +
{{ tag.name }}
+ + {{ bookmark.created_by }} + diff --git a/routes/api.js b/routes/api.js index be11b3e..be0ac51 100644 --- a/routes/api.js +++ b/routes/api.js @@ -484,6 +484,20 @@ api.get('/searchBookmarks', function(req, res) { .catch((err) => console.log('bookmarks table or card err', err)) }); +api.get('/searchHotBookmarks', function(req, res) { + console.log('hello searchHotBookmarks', JSON.stringify(req.query), req.session.username); + if (!req.session.user) { + res.send(401); + return; + } + var params = req.query; + db.getHotBookmarksSearch(params) + .then((searchData) => { + res.json(searchData); + }) + .catch((err) => console.log('getHotBookmarksSearch err', err)) +}); + api.get('/tags', function(req, res) { if (!req.session.user) { res.send(401); @@ -1024,7 +1038,7 @@ api.getFaviconByTimer = function() { api.getHotBookmarksByTimer = function() { console.log('getHotBookmarks...........'); - var timeout = 1000 * 60 * 10; // 10分钟更新一遍 + var timeout = 1000 * 60 * 10; // 10分钟更新一遍 var busy = false; setInterval(function() { if (busy) {