搜索做了一部分

This commit is contained in:
luchenqun 2016-11-18 17:53:54 +08:00
parent 20b06fce23
commit cfb24b1a44
7 changed files with 97 additions and 35 deletions

View File

@ -253,9 +253,15 @@ db.getBookmarksTable = function(user_id) {
} }
db.getBookmarksSearch = function(params) { db.getBookmarksSearch = function(params) {
var search_word = params.searchWord; var search_word = params.searchWord || 'test';
var user_id = '1'; 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 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"; 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.userRange == '1') {
if (params.userId) {
sql += "AND user_id = '"+ params.userId +"'"
}
}
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";
console.log(sql); console.log(sql);
return new Promise(function(resolve, reject) { return new Promise(function(resolve, reject) {
client.query(sql, (err, result) => { client.query(sql, (err, result) => {

View File

@ -41,7 +41,6 @@ app.controller('menuCtr', ['$scope', '$stateParams', '$state', 'pubSubService',
* @desc 点击搜索按钮搜索书签 * @desc 点击搜索按钮搜索书签
*/ */
$scope.searchBookmarks = function(searchWord) { $scope.searchBookmarks = function(searchWord) {
console.log(searchWord);
$state.go('search', { $state.go('search', {
searchWord: searchWord, searchWord: searchWord,
}) })

View File

@ -12,12 +12,24 @@ app.controller('searchCtr', ['$scope', '$state', '$stateParams', '$filter', '$wi
$scope.username = ''; $scope.username = '';
$scope.userRange = ''; $scope.userRange = '';
$scope.bookmarkCount = 0; $scope.bookmarkCount = 0;
$scope.tags = []
bookmarkService.getTags({
user_id: '1',
})
.then((data) => {
$scope.tags = data;
})
.catch((err) => console.log('getTags err', err));
var searchParams = { var searchParams = {
searchWord: $scope.searchWord, searchWord: $scope.searchWord,
} }
if ($scope.searchWord) {
searchBookmarks(searchParams);
} else {
searchBookmarks(searchParams); }
$scope.delBookmark = function(bookmarkId) { $scope.delBookmark = function(bookmarkId) {
var params = { var params = {
@ -40,11 +52,39 @@ app.controller('searchCtr', ['$scope', '$state', '$stateParams', '$filter', '$wi
} }
$scope.search = function() { $scope.search = function() {
var params = { var params = {}
searchWord: $scope.searchWord, params.userRange = $('.js-user-range').dropdown('get value');
if (params.userRange == '1') {
var tags = $('.js-search-tags').dropdown('get value')
if (tags) {
params.tags = tags;
}
} else if ($scope.username) {
params.username = $scope.username
} }
if ($scope.searchWord) {
params.searchWord = $scope.searchWord;
}
var dateCreate = $('.js-create-date').dropdown('get value') || undefined;
if (dateCreate) {
params.dateCreate = dateCreate;
} else {
params.dateCreateBegin = $scope.dateCreateBegin;
params.dateCreateEnd = $scope.dateCreateEnd;
}
var dateClick = $('.js-click-date').dropdown('get value') || undefined;
if (dateClick) {
params.dateClick = dateClick
} else {
params.dateClickBegin = $scope.dateClickBegin;
params.dateClickEnd = $scope.dateClickEnd;
}
searchBookmarks(params) searchBookmarks(params)
console.log('search..', $scope.searchWord, $scope.dateBegin, $scope.clickCount, $scope.username, $scope.userRange) console.log('search..', params)
} }
$scope.updateCreateDate = function() { $scope.updateCreateDate = function() {
console.log($scope.dateCreateBegin, $scope.dateCreateEnd); console.log($scope.dateCreateBegin, $scope.dateCreateEnd);
@ -64,6 +104,12 @@ 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', '个分类已选');
$('.ui.dropdown.js-search-tags .text').text(text);
}
function searchBookmarks(params) { function searchBookmarks(params) {
bookmarkService.searchBookmarks(params) bookmarkService.searchBookmarks(params)
.then((data) => { .then((data) => {

View File

@ -3,7 +3,7 @@ function date(date, settings) {
var day = date.getDate(); var day = date.getDate();
var month = date.getMonth() + 1; var month = date.getMonth() + 1;
var year = date.getFullYear(); var year = date.getFullYear();
return year + '/' + month + '/' + day; return year + '-' + month + '-' + day;
}; };
app.directive('jsDataCreateInit', function($compile) { app.directive('jsDataCreateInit', function($compile) {
@ -67,26 +67,31 @@ app.directive('jsDataClickInit', function($compile) {
}; };
}); });
app.directive('jsDropdownUserRangeInit', function($compile) { app.directive('jsDropdownUserRangeInit', function($compile, $timeout) {
return { return {
restrict: 'A', restrict: 'A',
link: function($scope, $element, $attrs) { link: function($scope, $element, $attrs) {
$('.ui.dropdown.js-user-range').dropdown({ $('.ui.dropdown.js-user-range').dropdown({
onChange: function(value, text, $choice) { onChange: function(value, text, $choice) {
$scope.showTags = (value === '1'); $timeout(function() {
console.log(value, text, $choice, $scope.showTags, $scope.username); $scope.showTags = (value == '1');
$scope.$apply(); })
}, },
}); });
$('.js-user-range').dropdown('set value', '1');
}, },
}; };
}); });
app.directive('jsDropdownInit', function($compile) { app.directive('jsDropdownTagsInit', function($compile) {
return { return {
restrict: 'A', restrict: 'A',
link: function($scope, $element, $attrs) { link: function($scope, $element, $attrs) {
$('.ui.dropdown').dropdown(); $('.ui.dropdown.js-search-tags').dropdown({
useLabels: false
});
$('.ui.dropdown.js-search-tags .text').removeClass('default');
}, },
}; };
}); });

View File

@ -200,7 +200,7 @@ app.factory('httpInterceptor', ['$q', '$injector', function($q, $injector) {
}, },
responseError: function(err) { responseError: function(err) {
if (401 === err.status) { if (401 === err.status) {
toastr.warning("您需要先登录才能使用该功能", "警告"); // toastr.warning("您需要先登录才能使用该功能", "警告");
$injector.get('$state').go('login', {}) $injector.get('$state').go('login', {})
} else { } else {
toastr.error(JSON.stringify(err), "错误"); toastr.error(JSON.stringify(err), "错误");

View File

@ -8,7 +8,7 @@
</div> </div>
<div class="two wide column" ng-show="showSearch"> <div class="two wide column" ng-show="showSearch">
<div class="ui dropdown js-user-range" js-dropdown-user-range-init> <div class="ui dropdown js-user-range" js-dropdown-user-range-init>
<div class="text" data-value="1">搜索范围</div> <div class="text">搜索范围</div>
<i class="dropdown icon"></i> <i class="dropdown icon"></i>
<div class="menu"> <div class="menu">
<div class="active item" data-value="1">自己书签</div> <div class="active item" data-value="1">自己书签</div>
@ -21,7 +21,7 @@
<div class="text">创建时间不限</div> <div class="text">创建时间不限</div>
<i class="dropdown icon"></i> <i class="dropdown icon"></i>
<div class="menu"> <div class="menu">
<div class="active item" data-value='0'>时间不限</div> <div class="active item" data-value='0'>创建时间不限</div>
<div class="item" data-value='7'>一周内</div> <div class="item" data-value='7'>一周内</div>
<div class="item" data-value='30'>一月内</div> <div class="item" data-value='30'>一月内</div>
<div class="item" data-value='365'>一年内</div> <div class="item" data-value='365'>一年内</div>
@ -54,7 +54,7 @@
<div class="text">点击时间不限</div> <div class="text">点击时间不限</div>
<i class="dropdown icon"></i> <i class="dropdown icon"></i>
<div class="menu"> <div class="menu">
<div class="active item" data-value='0'>时间不限</div> <div class="active item" data-value='0'>点击时间不限</div>
<div class="item" data-value='7'>一周内</div> <div class="item" data-value='7'>一周内</div>
<div class="item" data-value='30'>一月内</div> <div class="item" data-value='30'>一月内</div>
<div class="item" data-value='365'>一年内</div> <div class="item" data-value='365'>一年内</div>
@ -86,28 +86,33 @@
<div class="ui transparent icon input" ng-show="!showTags"> <div class="ui transparent icon input" ng-show="!showTags">
<input class="prompt" type="text" placeholder="用户账号" ng-model="username"> <input class="prompt" type="text" placeholder="用户账号" ng-model="username">
</div> </div>
<select class="ui fluid search dropdown" multiple="" ng-show="showTags"> <div class="ui grid container" style="padding-top: 8px;">
<option value="">State</option> <div class="ui multiple dropdown js-search-tags" style="padding:0;" ng-show="showTags" js-dropdown-tags-init>
<option value="AL">Alabama</option> <div class="default text">分类选择</div>
<option value="AK">Alaska</option> <i class="dropdown icon"></i>
<option value="AZ">Arizona</option> <div class="menu" ng-click="updateTagsSelect()">
<option value="AR">Arkansas</option> <div class="item" data-value='{{tag.id}}' ng-repeat="tag in tags">{{tag.name}}</div>
<option value="CA">California</option> </div>
<option value="CO">Colorado</option> </div>
<option value="CT">Connecticut</option> </div>
</select>
</div> </div>
<div class="two wide column" ng-show="showSearch"> <div class="three wide column" ng-show="showSearch">
<div class="ui transparent input"> <div class="ui transparent input">
<input type="text" placeholder="标题,链接..." ng-model="searchWord"> <input type="text" placeholder="标题,链接..." ng-model="searchWord">
</div> </div>
</div> </div>
<div class="left floated right aligned one wide column" ng-show="showSearch">
<i class="search icon" title="搜索" ng-click="search()"></i>
</div>
<div class="left floated right aligned two wide column" ng-show="showSearch"> <div class="left floated right aligned two wide column" ng-show="showSearch">
<img class="ui ui middle aligned tiny image" ng-src="./images/hide.png" style="width:16px;height:16px" ng-click="showSearch = !showSearch"> <div class="ui grid">
<span ng-click="showSearch = !showSearch">收起</span> <div class="four wide column">
<i class="search icon" title="搜索" ng-click="search()"></i>
</div>
<div class="twelve wide column">
<img class="ui ui middle aligned tiny image" ng-src="./images/hide.png" style="width:16px;height:16px" ng-click="showSearch = !showSearch">
<span ng-click="showSearch = !showSearch">收起</span>
</div>
</div>
</div> </div>
</div> </div>
<table class="ui celled table"> <table class="ui celled table">

View File

@ -210,12 +210,13 @@ api.get('/bookmarks', function(req, res) {
}); });
api.get('/searchBookmarks', function(req, res) { api.get('/searchBookmarks', function(req, res) {
console.log('hello bookmarks', JSON.stringify(req.query), req.session.username); console.log('hello searchBookmarks', JSON.stringify(req.query), req.session.username);
if (!req.session.username) { if (!req.session.username) {
res.send(401); res.send(401);
return; return;
} }
var params = req.query; var params = req.query;
params.userId = req.session.userId;
var bookmarks = []; var bookmarks = [];
var tagsBookmarks = []; var tagsBookmarks = [];
var userId = '1'; var userId = '1';