diff --git a/database/db.js b/database/db.js index 67a8c28..27a359c 100644 --- a/database/db.js +++ b/database/db.js @@ -52,15 +52,15 @@ Date.prototype.format = function(fmt) { //author: meizz // update delete 返回影响的行数 var db = { - } - // var sql = "SELECT * FROM `users` WHERE `username` = 'luchenqun1'"; - // client.query(sql, (err, result) => { - // if (err) { - // console.log(err); - // } else { - // console.log(result); - // } - // }); +} +// var sql = "SELECT * FROM `users` WHERE `username` = 'luchenqun1'"; +// client.query(sql, (err, result) => { +// if (err) { +// console.log(err); +// } else { +// console.log(result); +// } +// }); db.addBookmark = function(user_id, bookmark) { var insertSql = "INSERT INTO `bookmarks` (`user_id`, `title`, `description`, `url`, `public`, `click_count`) VALUES ('" + user_id + "', '" + bookmark.title + "', " + client.escape(bookmark.description) + ", '" + bookmark.url + "', '" + bookmark.public + "', '1')"; @@ -499,13 +499,13 @@ db.getBookmarksNavigate = function(tags) { // var sql = "SELECT t.id as tag_id, t.name as tag_name, b.* FROM `tags` as t LEFT OUTER JOIN tags_bookmarks as tb ON t.id = tb.tag_id LEFT OUTER JOIN bookmarks as b ON tb.bookmark_id = b.id WHERE t.user_id='" + user_id + "' ORDER BY t.id ASC, b.click_count DESC"; var sql = ""; tags.forEach((tag, index) => { - var t = 't' + tag.id; - if (index >= 1) { - sql += " UNION " - } - sql += "(SELECT * FROM ((SELECT t.id AS tag_id, t.`name` as tag_name, t.sort, b.* FROM `tags` as t, `bookmarks`as b, `tags_bookmarks` as tb WHERE t.id = tb.tag_id AND b.id = tb.bookmark_id AND t.id = " + tag.id + " ORDER BY b.click_count DESC LIMIT 0, 16) UNION (SELECT t.id AS tag_id, t.`name` as tag_name, t.sort, b.* FROM `tags` as t, `bookmarks`as b, `tags_bookmarks` as tb WHERE t.id = tb.tag_id AND b.id = tb.bookmark_id AND t.id = " + tag.id + " ORDER BY b.created_at DESC LIMIT 0, 16)) as " + t + " ORDER BY " + t + ".click_count DESC, " + t + ".created_at DESC)"; - }) - // console.log('getBookmarksNavigate ', sql); + var t = 't' + tag.id; + if (index >= 1) { + sql += " UNION " + } + sql += "(SELECT * FROM ((SELECT t.id AS tag_id, t.`name` as tag_name, t.sort, b.* FROM `tags` as t, `bookmarks`as b, `tags_bookmarks` as tb WHERE t.id = tb.tag_id AND b.id = tb.bookmark_id AND t.id = " + tag.id + " ORDER BY b.click_count DESC LIMIT 0, 16) UNION (SELECT t.id AS tag_id, t.`name` as tag_name, t.sort, b.* FROM `tags` as t, `bookmarks`as b, `tags_bookmarks` as tb WHERE t.id = tb.tag_id AND b.id = tb.bookmark_id AND t.id = " + tag.id + " ORDER BY b.created_at DESC LIMIT 0, 16)) as " + t + " ORDER BY " + t + ".click_count DESC, " + t + ".created_at DESC)"; + }) + // console.log('getBookmarksNavigate ', sql); return new Promise(function(resolve, reject) { client.query(sql, (err, result) => { @@ -523,40 +523,42 @@ db.getBookmarksTable = 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, "; - if (params.showStyle == 'card') { - sql += "'%Y-%m-%d %H:%i:%s'"; - } else { - sql += "'%Y-%m-%d'"; - } - sql += ") as created_at, DATE_FORMAT(last_click, '%Y-%m-%d') as last_click FROM `bookmarks` WHERE 1=1"; + var sql = "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 1=1"; if (user_id) { sql += " AND `user_id` = '" + user_id + "'"; - if (params.showStyle == 'card') { - sql += " ORDER BY bookmarks.created_at DESC, bookmarks.click_count DESC"; - } else { - sql += " ORDER BY bookmarks.click_count DESC, bookmarks.created_at DESC"; - } } return new Promise(function(resolve, reject) { client.query(sql, (err, result) => { if (err) { reject(err); } else { - sql += " LIMIT " + (params.currentPage - 1) * params.perPageItems + ", " + params.perPageItems; - var totalItems = result.length; - console.log(totalItems, sql); - client.query(sql, (err, result) => { - if (err) { - reject(err); + var bookmarksClickCount, bookmarksCreatedAt, bookmarksLatestClick; + 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 { - var bookmarksData = { - totalItems: totalItems, - bookmarks: result, - } - resolve(bookmarksData); + return 1; } - }); + }) + bookmarksClickCount = result.slice((params.currentPage - 1) * params.perPageItems, params.currentPage * params.perPageItems); + + result.sort((a, b) => a.created_at >= b.created_at ? -1 : 1); + bookmarksCreatedAt = result.slice((params.currentPage - 1) * params.perPageItems, params.currentPage * params.perPageItems); + + result.sort((a, b) => a.last_click >= b.last_click ? -1 : 1); + bookmarksLatestClick = result.slice((params.currentPage - 1) * params.perPageItems, params.currentPage * params.perPageItems); + + var bookmarksData = { + totalItems: result.length, + bookmarksClickCount: bookmarksClickCount, + bookmarksCreatedAt: bookmarksCreatedAt, + bookmarksLatestClick: bookmarksLatestClick, + } + resolve(bookmarksData); } }); }) diff --git a/public/scripts/controllers/bookmarks-controller.js b/public/scripts/controllers/bookmarks-controller.js index 0cb8554..de43b6c 100644 --- a/public/scripts/controllers/bookmarks-controller.js +++ b/public/scripts/controllers/bookmarks-controller.js @@ -14,6 +14,9 @@ app.controller('bookmarksCtr', ['$scope', '$state', '$stateParams', '$filter', ' $scope.inputPage = ''; $scope.loadBusy = false; $scope.waitDelBookmark = {}; + $scope.order = [false, false, false]; + $scope.order[($stateParams && $stateParams.orderIndex) || 0] = true; + $scope.bookmarkData = {}; $scope.changeCurrentPage = function(currentPage) { currentPage = parseInt(currentPage) || 0; @@ -163,6 +166,21 @@ app.controller('bookmarksCtr', ['$scope', '$state', '$stateParams', '$filter', ' } } + $scope.changeOrder = function(index) { + if (index < 0 || index >= $scope.order.length) { + return; + } + $scope.order = $scope.order.map(() => false); + $scope.order[index] = true; + if ($scope.order[0]) { + $scope.bookmarks = $scope.bookmarkData.bookmarksClickCount; + } else if ($scope.order[1]) { + $scope.bookmarks = $scope.bookmarkData.bookmarksCreatedAt; + } else { + $scope.bookmarks = $scope.bookmarkData.bookmarksLatestClick; + } + } + pubSubService.subscribe('EditCtr.inserBookmarsSuccess', $scope, function(event, data) { console.log('subscribe EditCtr.inserBookmarsSuccess', params); @@ -183,20 +201,29 @@ app.controller('bookmarksCtr', ['$scope', '$state', '$stateParams', '$filter', ' params.currentPage = $scope.currentPage; params.perPageItems = perPageItems; } + + var sendData = { + totalItems: 0, + bookmarksClickCount: [], + bookmarksCreatedAt: [], + bookmarksLatestClick: [], + } + bookmarkService.getBookmarks(params) .then((data) => { if (params.showStyle != 'navigate') { + $scope.bookmarkData = data; $scope.totalPages = Math.ceil(data.totalItems / perPageItems); if (data.totalItems == 0) { toastr.info('您还没有书签,请点击菜单栏的添加按钮进行添加', "提示"); } if (params.showStyle == 'card') { - data.bookmarks.forEach(bookmark => { + data.bookmarksCreatedAt.forEach(bookmark => { $scope.bookmarks.push(bookmark); }) $scope.loadBusy = false; } else { - $scope.bookmarks = data.bookmarks; + $scope.changeOrder($scope.order.indexOf(true)); } } else { $scope.bookmarks = data; @@ -243,7 +270,6 @@ app.controller('bookmarksCtr', ['$scope', '$state', '$stateParams', '$filter', ' } function animation() { - var data = ['scale', 'fade', 'fade up', 'fade down', 'fade left', 'fade right', 'horizontal flip', 'vertical flip', 'drop', 'fly left', 'fly right', 'fly up', 'fly down', 'swing left', 'swing right', 'swing up', 'swing down', 'browse', 'browse right', 'slide down', 'slide up', 'slide left', 'slide right' diff --git a/public/scripts/controllers/tags-controller.js b/public/scripts/controllers/tags-controller.js index 66cd7b0..8c35cd4 100644 --- a/public/scripts/controllers/tags-controller.js +++ b/public/scripts/controllers/tags-controller.js @@ -29,6 +29,9 @@ app.controller('tagsCtr', ['$scope', '$filter', '$window', '$stateParams', '$tim }); $scope.changeOrder = function(index) { + if (index < 0 || index >= $scope.order.length) { + return; + } $scope.order = $scope.order.map(() => false); $scope.order[index] = true; if ($scope.order[0]) { @@ -63,13 +66,7 @@ app.controller('tagsCtr', ['$scope', '$filter', '$window', '$stateParams', '$tim bookmarkService.getBookmarksByTag(params) .then((data) => { $scope.bookmarkData = data; - if ($scope.order[0]) { - $scope.bookmarks = $scope.bookmarkData.bookmarksClickCount; - } else if ($scope.order[1]) { - $scope.bookmarks = $scope.bookmarkData.bookmarksCreatedAt; - } else { - $scope.bookmarks = $scope.bookmarkData.bookmarksLatestClick; - } + $scope.changeOrder($scope.order.indexOf(true)); $scope.bookmarkCount = $scope.bookmarkData.totalItems; $scope.totalPages = Math.ceil($scope.bookmarkCount / perPageItems); diff --git a/public/views/bookmarks.html b/public/views/bookmarks.html index 6e82a7d..d0db863 100644 --- a/public/views/bookmarks.html +++ b/public/views/bookmarks.html @@ -50,13 +50,13 @@
| 标题 | -链接 | -点击次数 | -创建日期 | -最后点击 | -分类 | -操作 | +标题 | +链接 | +点击次数 | +创建日期 | +最后点击 | +分类 | +操作 | {{ bookmark.click_count }} | -{{ bookmark.created_at }} | -{{ bookmark.last_click }} | ++ {{ bookmark.created_at.substr(0, 10) }} + + | ++ {{ bookmark.last_click.substr(0, 10) }} + + |
{{ tag.name }}
diff --git a/public/views/tags.html b/public/views/tags.html
index e438531..115315e 100644
--- a/public/views/tags.html
+++ b/public/views/tags.html
@@ -53,7 +53,7 @@
标题 |
链接 |
- 点击次数 |
+ 点击次数 |
创建日期 |
最后点击 |
分类 |
@@ -72,8 +72,14 @@
{{ bookmark.url }}
{{ bookmark.click_count }} |
- {{ bookmark.created_at.substr(0, 10) }} |
- {{ bookmark.last_click.substr(0, 10) }} |
+
+ {{ bookmark.created_at.substr(0, 10) }}
+
+ |
+
+ {{ bookmark.last_click.substr(0, 10) }}
+
+ |
|
{{ tag.name }}
diff --git a/routes/api.js b/routes/api.js
index 55e5c2f..fca7c2f 100644
--- a/routes/api.js
+++ b/routes/api.js
@@ -298,20 +298,22 @@ api.get('/bookmarks', function(req, res) {
})
.catch((err) => console.log('bookmarks navigate err', err));
} else {
- var bookmarks = [];
var tagsBookmarks = [];
- var totalItems = 0;
- var totalItems = 0;
var sendData = {
- totalItems: totalItems,
- bookmarks: []
+ totalItems: 0,
+ bookmarksClickCount: [],
+ bookmarksCreatedAt: [],
+ bookmarksLatestClick: [],
}
+
params.userId = userId;
db.getBookmarksTable(params)
.then((bookmarksData) => {
- bookmarks = bookmarksData.bookmarks;
- totalItems = bookmarksData.totalItems;
- var bookmarkIds = bookmarks.map((bookmark) => bookmark.id);
+ sendData = bookmarksData;
+ var bookmarkIds = []
+ .concat(sendData.bookmarksClickCount.map((bookmark) => bookmark.id))
+ .concat(sendData.bookmarksCreatedAt.map((bookmark) => bookmark.id))
+ .concat(sendData.bookmarksLatestClick.map((bookmark) => bookmark.id))
return db.getTagsBookmarks(bookmarkIds);
})
.then((tbs) => {
@@ -319,24 +321,22 @@ api.get('/bookmarks', function(req, res) {
return db.getTags(userId);
})
.then((tags) => {
- var data = [];
- // 获取每个书签的所有分类标签
- bookmarks.forEach(function(bookmark) {
- var bookmarkTags = [];
- tagsBookmarks.forEach(function(tb) {
- if (tb.bookmark_id == bookmark.id) {
- tags.forEach(function(tag) {
- if (tb.tag_id == tag.id) {
- bookmarkTags.push(tag)
- }
- })
- }
- });
- bookmark.tags = bookmarkTags;
- data.push(bookmark);
+ var objectName = ['bookmarksClickCount', 'bookmarksCreatedAt', 'bookmarksLatestClick'];
+ objectName.forEach((name) => {
+ sendData[name].forEach(function(bookmark, index) {
+ var bookmarkTags = [];
+ tagsBookmarks.forEach(function(tb) {
+ if (tb.bookmark_id == bookmark.id) {
+ tags.forEach(function(tag) {
+ if (tb.tag_id == tag.id) {
+ bookmarkTags.push(tag)
+ }
+ })
+ }
+ });
+ sendData[name][index].tags = bookmarkTags;
+ })
})
- sendData.totalItems = totalItems;
- sendData.bookmarks = data;
res.json(sendData);
})
.catch((err) => console.log('bookmarks table or card err', err))
|
|---|