diff --git a/public/images/add.png b/public/images/add.png new file mode 100644 index 0000000..0ced766 Binary files /dev/null and b/public/images/add.png differ diff --git a/public/images/logout.png b/public/images/logout.png new file mode 100644 index 0000000..492c989 Binary files /dev/null and b/public/images/logout.png differ diff --git a/public/index.html b/public/index.html index 3ad8e2c..f73a264 100644 --- a/public/index.html +++ b/public/index.html @@ -41,6 +41,7 @@ + diff --git a/public/scripts/app-angular.js b/public/scripts/app-angular.js index f63b5e2..1f2d11e 100644 --- a/public/scripts/app-angular.js +++ b/public/scripts/app-angular.js @@ -10,15 +10,17 @@ app.config(function($stateProvider, $urlRouterProvider, $httpProvider) { url: '/bookmarks', templateUrl: '/views/bookmarks.html', params: { - foo: null, - bar: null, showStyle: 'navigate', }, controller: 'bookmarksCtr' }) - .state('addBookmark', { - url: '/addBookmark', - templateUrl: '/views/addBookmark.html', + .state('search', { + url: '/search', + templateUrl: '/views/search.html', + params: { + searchWord: null, + }, + controller: 'searchCtr' }) .state('tags', { url: '/tags', diff --git a/public/scripts/controllers/menus-controller.js b/public/scripts/controllers/menus-controller.js index 48d86d2..9bbaded 100644 --- a/public/scripts/controllers/menus-controller.js +++ b/public/scripts/controllers/menus-controller.js @@ -3,8 +3,7 @@ app.controller('menuCtr', ['$scope', '$stateParams', '$state', 'pubSubService', $scope.login = false; /**< 是否登陆 */ $scope.selectLoginIndex = 0; /**< 默认登陆之后的选择的菜单索引,下表从 0 开始 */ $scope.selectNotLoginIndex = 0; /**< 默认未登陆之后的选择的菜单索引,下表从 0 开始 */ - $scope.keyword = ''; /**< 搜索关键字 */ - $scope.showSearch = false; + $scope.searchWord = ''; /**< 搜索关键字 */ // 防止在登陆的情况下,在浏览器里面直接输入url,这时候要更新菜单选项 pubSubService.subscribe('Common.menuActive', $scope, function(event, params) { console.log("subscribe Common.menuActive", params) @@ -42,24 +41,7 @@ app.controller('menuCtr', ['$scope', '$stateParams', '$state', 'pubSubService', * @desc 点击搜索按钮搜索书签 */ $scope.searchBookmarks = function() { - console.log('searchBookmarks clicked...'); - pubSubService.publish('MenuCtr.searchBookmarks', { - 'keyword': $scope.keyword - }); - $scope.selectLoginIndex = 0; - } - - /** - * @func - * @desc 点击下拉列表详情搜索 - * @warn 不要使用$('js-checkbox-search').checkbox('is checked')去取,因为dom元素还没更新的。。。 - */ - $scope.searchDetail = function() { - $scope.showSearch = !$scope.showSearch; - console.log('searchDetail ', $scope.showSearch) - pubSubService.publish('MenuCtr.searchDetail', { - 'showSearch': $scope.showSearch, - }); + updateMenuActive($scope.selectLoginIndex = 0); } $scope.updateShowStyle = function(showStyle) { @@ -94,7 +76,6 @@ app.controller('menuCtr', ['$scope', '$stateParams', '$state', 'pubSubService', // 元素构造完成之后,开始使用jquery初始化 $scope.$on('elementRenderFinished', function(elementRenderFinishedEvent) { console.log('menus elementRenderFinished') - $scope.showSearch = $('.js-checkbox-search').checkbox('is checked'); $('.js-bookmark-dropdown').dropdown({ action: 'hide', }); diff --git a/public/scripts/controllers/search-controller.js b/public/scripts/controllers/search-controller.js new file mode 100644 index 0000000..1148d8d --- /dev/null +++ b/public/scripts/controllers/search-controller.js @@ -0,0 +1,79 @@ +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); + $scope.bookmarks = []; // 书签数据 + $scope.showSearch = true; // 搜索对话框 + $scope.searchWord = ($stateParams && $stateParams.searchWord) || '' + $scope.dateBegin = ''; + $scope.dateEnd = ''; + $scope.clickCount = ''; + $scope.username = ''; + $scope.userRange = ''; + + searchBookmarks($stateParams); + + $scope.delBookmark = function(bookmarkId) { + var params = { + id: bookmarkId + } + bookmarkService.delBookmark(params) + .then((data) => $("#" + bookmarkId).remove()) + .catch((err) => { + console.log('delBookmark err ', err) + }); + } + $scope.editBookmark = function(bookmarkId) { + pubSubService.publish('bookmarksCtr.editBookmark', { + 'bookmarkId': bookmarkId + }); + } + + $scope.detailBookmark = function(bookmarkId) { + + } + + $scope.search = function() { + console.log('search..', $scope.searchWord, $scope.dateBegin, $scope.clickCount, $scope.username, $scope.userRange) + } + + function searchBookmarks(params) { + bookmarkService.searchBookmarks(params) + .then((data) => { + $scope.bookmarks = data; + pubSubService.publish('Common.menuActive', { + login: true, + index: 0 + }); + }) + .catch((err) => console.log('getBookmarks err', err)); + } + + $scope.$on('elementRenderFinished', function(elementRenderFinishedEvent) { + $('.ui.dropdown').dropdown(); + $('.ui.calendar.js-date-begin').calendar({ + type: 'date', + formatter: { + date: function(date, settings) { + if (!date) return ''; + var day = date.getDate(); + var month = date.getMonth() + 1; + var year = date.getFullYear(); + return year + '/' + month + '/' + day; + } + }, + endCalendar: $('.ui.calendar.js-date-end') + }); + $('.ui.calendar.js-date-end').calendar({ + type: 'date', + formatter: { + date: function(date, settings) { + if (!date) return ''; + var day = date.getDate(); + var month = date.getMonth() + 1; + var year = date.getFullYear(); + return year + '/' + month + '/' + day; + } + }, + startCalendar: $('.ui.calendar.js-date-begin') + }); + }); +}]); diff --git a/public/scripts/services/bookmark-service.js b/public/scripts/services/bookmark-service.js index 8b540c6..154ee6c 100644 --- a/public/scripts/services/bookmark-service.js +++ b/public/scripts/services/bookmark-service.js @@ -83,6 +83,20 @@ app.factory('bookmarkService', ['$http', '$q', function($http, $q) { }); return def.promise; }, + searchBookmarks: function(params) { + var def = $q.defer(); + + $http.get('/api/searchBookmarks/', { + params: params + }) + .success(function(data) { + def.resolve(data); + }) + .error(function(data, status) { + def.reject('searchBookmarks error'); + }); + return def.promise; + }, getBookmark: function(params) { var def = $q.defer(); diff --git a/public/views/bookmarks.html b/public/views/bookmarks.html index 8cfea5d..17c70fd 100644 --- a/public/views/bookmarks.html +++ b/public/views/bookmarks.html @@ -1,49 +1,3 @@ -
diff --git a/public/views/menus.html b/public/views/menus.html index 2598de7..8a62f46 100644 --- a/public/views/menus.html +++ b/public/views/menus.html @@ -25,30 +25,22 @@
-
-
搜索选项
-
- -
diff --git a/public/views/search.html b/public/views/search.html new file mode 100644 index 0000000..01b1eb7 --- /dev/null +++ b/public/views/search.html @@ -0,0 +1,109 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
标题链接点击次数创建日期最后点击分类操作
+ + + {{ bookmark.title }} + + + {{ bookmark.url }} + {{ bookmark.click_count }}{{ bookmark.created_at }}{{ bookmark.last_click }} +
+ {{ tag.name }} +
+
+ + + +
+ +
+

这是搜索页面

diff --git a/routes/api.js b/routes/api.js index 37da939..7944eb7 100644 --- a/routes/api.js +++ b/routes/api.js @@ -209,6 +209,47 @@ api.get('/bookmarks', function(req, res) { } }); +api.get('/searchBookmarks', function(req, res) { + console.log('hello bookmarks', JSON.stringify(req.query), req.session.username); + if (!req.session.username) { + res.send(401); + return; + } + var bookmarks = []; + var tagsBookmarks = []; + var userId = '1'; + db.getBookmarksTable(userId) + .then((bms) => { + bookmarks = bms; + var bookmarkIds = bookmarks.map((bookmark) => bookmark.id); + return db.getTagsBookmarks(bookmarkIds); + }) + .then((tbs) => { + tagsBookmarks = tbs; + 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); + }) + res.json(data); + }) + .catch((err) => console.log('bookmarks table or card err', err)) +}); + api.get('/tags', function(req, res) { if (!req.session.username) { res.send(401);