diff --git a/database/db.js b/database/db.js index f43590a..375238a 100644 --- a/database/db.js +++ b/database/db.js @@ -8,6 +8,22 @@ var client = mysql.createConnection({ port: 3306 }); +Date.prototype.format = function(fmt) { //author: meizz + var o = { + "M+": this.getMonth() + 1, //月份 + "d+": this.getDate(), //日 + "h+": this.getHours(), //小时 + "m+": this.getMinutes(), //分 + "s+": this.getSeconds(), //秒 + "q+": Math.floor((this.getMonth() + 3) / 3), //季度 + "S": this.getMilliseconds() //毫秒 + }; + if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length)); + for (var k in o) + if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length))); + return fmt; +} + client.connect(); // select 最多返回一行的话,返回对象,否则返回数组 @@ -256,12 +272,40 @@ db.getBookmarksSearch = function(params) { var search_word = params.searchWord || 'test'; var user_id = '1'; 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) { + var d = new Date(); + d.setDate(d.getDate() - parseInt(params.dateCreate)); + sql += " AND `created_at` > '" + d.format('yyyy-MM-dd') + "'" + } else if (params.dateCreateBegin && params.dateCreateEnd) { + sql += " AND `created_at` > '" + params.dateCreateBegin + "' AND `created_at` < '" + params.dateCreateEnd + "' " + } + if (params.dateClick) { + var d = new Date(); + d.setDate(d.getDate() - parseInt(params.dateClick)); + sql += " AND `last_click` > '" + d.format('yyyy-MM-dd') + "'" + } else if (params.dateClickBegin && params.dateClickEnd) { + sql += " AND `last_click` > '" + params.dateClickBegin + "' AND `last_click` < '" + params.dateClickEnd + "' " + } + + if (params.searchWord) { + sql += " AND (`title` LIKE '%" + params.searchWord + "%' OR `url` LIKE '%" + params.searchWord + "%')" + } + if (params.userRange == '1') { if (params.userId) { - sql += "AND user_id = '"+ params.userId +"'" + sql += " AND `user_id` = '" + params.userId + "'" + } + + if (params.tags) { + sql += " AND `id` IN (SELECT `bookmark_id` FROM `tags_bookmarks` WHERE tag_id IN (" + params.tags + "))" + } + } else { + if (params.username) { + sql += " AND `user_id` IN (SELECT `id` FROM `users` WHERE `username` LIKE '%" + params.username + "%' )" } } - 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 + "' AND (`title` LIKE '%"+ search_word +"%' OR `url` LIKE '%"+ search_word +"%') ORDER BY click_count DESC, created_at DESC LIMIT 0, 50"; + sql += " ORDER BY click_count DESC, created_at DESC LIMIT 0, 50"; console.log(sql); return new Promise(function(resolve, reject) { client.query(sql, (err, result) => { diff --git a/public/scripts/controllers/edit-controller.js b/public/scripts/controllers/edit-controller.js index d05b8b1..3dbfc47 100644 --- a/public/scripts/controllers/edit-controller.js +++ b/public/scripts/controllers/edit-controller.js @@ -148,6 +148,7 @@ app.controller('editCtr', ['$scope', '$state', '$timeout', 'bookmarkService', 'p bookmarkService.getTags(params) .then((data) => { $scope.tags = data; + initJsTags(); $('.ui.modal.js-add-bookmark .ui.dropdown').removeClass('loading'); }) .catch((err) => console.log('getTags err', err)); @@ -157,10 +158,10 @@ app.controller('editCtr', ['$scope', '$state', '$timeout', 'bookmarkService', 'p $scope.$on('viewContentLoaded', function(elementRenderFinishedEvent) { console.log('edit ui dropdown viewContentLoaded') $('.ui.modal.js-add-bookmark .ui.dropdown').removeClass('loading'); - $('.ui.dropdown').dropdown({ + $('.ui.dropdown.js-tags').dropdown({ forceSelection: false, maxSelections: maxSelections, - action: 'hide', + action: 'combo', onChange: function(value, text, $choice) { var selectedTags = $('.ui.modal.js-add-bookmark .ui.dropdown').dropdown('get value'); $timeout(function() { @@ -170,6 +171,23 @@ app.controller('editCtr', ['$scope', '$state', '$timeout', 'bookmarkService', 'p }); }); + function initJsTags() { + setTimeout(function() { + $('.ui.modal.js-add-bookmark .ui.dropdown').removeClass('loading'); + $('.ui.dropdown.js-tags').dropdown({ + forceSelection: false, + maxSelections: maxSelections, + action: 'combo', + onChange: function(value, text, $choice) { + var selectedTags = $('.ui.modal.js-add-bookmark .ui.dropdown').dropdown('get value'); + $timeout(function() { + $scope.tagsError = (selectedTags.length == 0 || selectedTags.length > maxSelections) && ($('.ui.modal.js-add-bookmark').modal('is active')); + }); + } + }); + }, 1000) + } + function init() { $scope.add = true; $scope.id = ''; diff --git a/public/scripts/controllers/search-controller.js b/public/scripts/controllers/search-controller.js index 12750da..73c36d1 100644 --- a/public/scripts/controllers/search-controller.js +++ b/public/scripts/controllers/search-controller.js @@ -69,7 +69,9 @@ app.controller('searchCtr', ['$scope', '$state', '$stateParams', '$filter', '$wi var dateCreate = $('.js-create-date').dropdown('get value') || undefined; if (dateCreate) { - params.dateCreate = dateCreate; + if (dateCreate != 0) { + params.dateCreate = dateCreate; + } } else { params.dateCreateBegin = $scope.dateCreateBegin; params.dateCreateEnd = $scope.dateCreateEnd; @@ -77,7 +79,9 @@ app.controller('searchCtr', ['$scope', '$state', '$stateParams', '$filter', '$wi var dateClick = $('.js-click-date').dropdown('get value') || undefined; if (dateClick) { - params.dateClick = dateClick + if (dateClick != 0) { + params.dateClick = dateClick + } } else { params.dateClickBegin = $scope.dateClickBegin; params.dateClickEnd = $scope.dateClickEnd; @@ -106,7 +110,7 @@ app.controller('searchCtr', ['$scope', '$state', '$stateParams', '$filter', '$wi $scope.updateTagsSelect = function() { $('.ui.dropdown.js-search-tags .text').removeClass('default'); - var text = $('.ui.dropdown.js-search-tags .text').text().replace('selected', '个分类已选'); + var text = $('.ui.dropdown.js-search-tags .text').text().replace('selected', '个已选'); $('.ui.dropdown.js-search-tags .text').text(text); } diff --git a/public/scripts/directives/js-init-directive.js b/public/scripts/directives/js-init-directive.js index 3255741..d01daf8 100644 --- a/public/scripts/directives/js-init-directive.js +++ b/public/scripts/directives/js-init-directive.js @@ -1,7 +1,13 @@ function date(date, settings) { if (!date) return ''; var day = date.getDate(); + if (day <= 9) { + day = '0' + day; + } var month = date.getMonth() + 1; + if (month <= 9) { + month = '0' + month; + } var year = date.getFullYear(); return year + '-' + month + '-' + day; }; @@ -88,10 +94,33 @@ app.directive('jsDropdownTagsInit', function($compile) { restrict: 'A', link: function($scope, $element, $attrs) { $('.ui.dropdown.js-search-tags').dropdown({ - useLabels: false + useLabels: false }); $('.ui.dropdown.js-search-tags .text').removeClass('default'); }, }; }); + +app.directive('jsEditTagsInit', function($compile) { + return { + restrict: 'A', + link: function($scope, $element, $attrs) { + if ($scope.$last === true) { + console.log('jsEditTagsInit.....................') + $('.ui.modal.js-add-bookmark .ui.dropdown').removeClass('loading'); + $('.ui.dropdown.js-tags').dropdown({ + forceSelection: false, + maxSelections: 3, + action: 'combo', + onChange: function(value, text, $choice) { + var selectedTags = $('.ui.modal.js-add-bookmark .ui.dropdown').dropdown('get value'); + $timeout(function() { + $scope.tagsError = (selectedTags.length == 0 || selectedTags.length > 3) && ($('.ui.modal.js-add-bookmark').modal('is active')); + }); + } + }); + } + }, + }; +}); diff --git a/public/views/edit.html b/public/views/edit.html index ffff8f8..6aa1032 100644 --- a/public/views/edit.html +++ b/public/views/edit.html @@ -18,7 +18,7 @@
diff --git a/public/views/search.html b/public/views/search.html index 503df24..7a71609 100644 --- a/public/views/search.html +++ b/public/views/search.html @@ -16,14 +16,14 @@
-
+
-
+
-
+
@@ -96,12 +96,11 @@
-
+
-
@@ -112,7 +111,6 @@ 收起
-
diff --git a/routes/api.js b/routes/api.js index 234483b..e1ea099 100644 --- a/routes/api.js +++ b/routes/api.js @@ -223,8 +223,13 @@ api.get('/searchBookmarks', function(req, res) { db.getBookmarksSearch(params) .then((bms) => { bookmarks = bms; - var bookmarkIds = bookmarks.map((bookmark) => bookmark.id); - return db.getTagsBookmarks(bookmarkIds); + if (bookmarks.length > 0) { + var bookmarkIds = bookmarks.map((bookmark) => bookmark.id); + return db.getTagsBookmarks(bookmarkIds); + } else { + res.json([]); + return Promise.reject('没有搜到到任何书签'); + } }) .then((tbs) => { tagsBookmarks = tbs;