From d29bd9a2c9420ea31c8750b929863e955c4b5029 Mon Sep 17 00:00:00 2001 From: luchenqun Date: Mon, 14 Nov 2016 23:10:55 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BC=80=E5=A7=8B=E5=86=99=E6=90=9C=E7=B4=A2?= =?UTF-8?q?=E7=95=8C=E9=9D=A2=EF=BC=8C=E5=B0=86=E6=90=9C=E7=B4=A2=E6=9D=A1?= =?UTF-8?q?=E4=BB=B6=E4=BB=8E=E4=B9=A6=E7=AD=BE=E9=A1=B5=E9=9D=A2=E7=A7=BB?= =?UTF-8?q?=E5=88=B0=E4=BA=86=E6=90=9C=E7=B4=A2=E7=95=8C=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/images/add.png | Bin 0 -> 662 bytes public/images/logout.png | Bin 0 -> 522 bytes public/index.html | 1 + public/scripts/app-angular.js | 12 +- .../scripts/controllers/menus-controller.js | 23 +--- .../scripts/controllers/search-controller.js | 79 +++++++++++++ public/scripts/services/bookmark-service.js | 14 +++ public/views/bookmarks.html | 46 -------- public/views/menus.html | 16 +-- public/views/search.html | 109 ++++++++++++++++++ routes/api.js | 41 +++++++ 11 files changed, 257 insertions(+), 84 deletions(-) create mode 100644 public/images/add.png create mode 100644 public/images/logout.png create mode 100644 public/scripts/controllers/search-controller.js create mode 100644 public/views/search.html diff --git a/public/images/add.png b/public/images/add.png new file mode 100644 index 0000000000000000000000000000000000000000..0ced766e11a6bbeb4ea2e7e18339d80bd1173d72 GIT binary patch literal 662 zcmV;H0%`q;P)*efCy|N03t9MfF%b2cO=^p*hBz&t1hY3><&BI zjZ8@^Elf|>|G$1!_bvfXyls2}ZfB)fdQSjE+A|J-ePC_{RHJ8{0w@0iz%K9^*aAKP z55Q003b?BoW)HL~umfBGYXdTB#^Vg67Xa&Razm!yDz<_PPy7Q8fom7{01(Ol0LuSD z=A?+vFH7fX&bw9sE5NTpM3yekTzA|E8?nYy}WbS5lef80rGo+M9B*&4Q)b)OX(>||{V0A>GMOlBt-w%^C{ zU4W~=Jz(nv>!S>|1%Ufl0;SwspagycIw;-n3aT&5SVv&Vi#I05qeFG@P4z*o5ga08RO|jBAZKF>4P1?js1>N?A>A zN%VxkOytM98y;46!USY50KwFDwDzh|hpc@zIRzue0+6Yn+VOQVkE57T%Xk#4ZwLW>p0szIt4Ry$BP+| z)rd={y+7)AfiKGXvB)c%F=0a0a2Oe}-`u~9d`Z^U`n5ivr~P8hTmWRP-1WtBi~@PB wYN(*MqgMeqrDQ$r09h13yeBC;W2TRu0eC35Zk?jrVgLXD07*qoM6N<$g05W^O8@`> literal 0 HcmV?d00001 diff --git a/public/images/logout.png b/public/images/logout.png new file mode 100644 index 0000000000000000000000000000000000000000..492c9890adaf9f17a9f738c289e2dfee8d009214 GIT binary patch literal 522 zcmV+l0`>igP)Udt_9M@A!1M;&0sN$}2j0`SnilIul#ys1JpbFp&$&B0u7C4W&kNApWW@#i>I^&EmQ+AwXuq0O6-OMHJ|Ze;aBDn{)s%y7YJKC_dVcA4SdO;jzOpRA5gsIdYsC+emT{Z|RP`hqn*+H( zed`8SjDIqjdz7kVODTPlm4dJ#`5Ee***9TnpyqwK3^X5H>bL;#4W-&@A=e%P!~g&Q M07*qoM6N<$f(u6ErT_o{ literal 0 HcmV?d00001 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);