搜索基本可用

This commit is contained in:
luchenqun 2016-11-18 22:36:44 +08:00
parent cfb24b1a44
commit acbd78400a
7 changed files with 117 additions and 19 deletions

View File

@ -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) => {

View File

@ -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 = '';

View File

@ -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);
}

View File

@ -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'));
});
}
});
}
},
};
});

View File

@ -18,7 +18,7 @@
<div class="fields">
<div class="eight wide field" ng-class="{error:tagsError }">
<select class="ui fluid search dropdown js-tags" multiple="">
<option value="">选择已有分类,可以搜索已有标签,最多选择三个</option>
<option value="">选择分类,输入可以搜索,最多选择三个,建议选一</option>
<option value="{{ tag.id }}" ng-repeat="tag in tags">{{ tag.name }}</option>
</select>
</div>

View File

@ -16,14 +16,14 @@
</div>
</div>
</div>
<div class="three wide column" ng-show="showSearch">
<div class="four wide column" ng-show="showSearch">
<div class="ui dropdown item js-create-date" js-data-create-init>
<div class="text">创建时间不限</div>
<i class="dropdown icon"></i>
<div class="menu">
<div class="active item" data-value='0'>创建时间不限</div>
<div class="item" data-value='7'>一周内</div>
<div class="item" data-value='30'>一月内</div>
<div class="item" data-value='31'>一月内</div>
<div class="item" data-value='365'>一年内</div>
<div class="divider"></div>
<div class="header">自定义</div>
@ -49,14 +49,14 @@
</div>
</div>
</div>
<div class="three wide column" ng-show="showSearch">
<div class="four wide column" ng-show="showSearch">
<div class="ui dropdown item js-click-date" js-data-click-init>
<div class="text">点击时间不限</div>
<i class="dropdown icon"></i>
<div class="menu">
<div class="active item" data-value='0'>点击时间不限</div>
<div class="item" data-value='7'>一周内</div>
<div class="item" data-value='30'>一月内</div>
<div class="item" data-value='31'>一月内</div>
<div class="item" data-value='365'>一年内</div>
<div class="divider"></div>
<div class="header">自定义</div>
@ -82,7 +82,7 @@
</div>
</div>
</div>
<div class="three wide column" ng-show="showSearch">
<div class="two wide column" ng-show="showSearch">
<div class="ui transparent icon input" ng-show="!showTags">
<input class="prompt" type="text" placeholder="用户账号" ng-model="username">
</div>
@ -96,12 +96,11 @@
</div>
</div>
</div>
<div class="three wide column" ng-show="showSearch">
<div class="two wide column" ng-show="showSearch">
<div class="ui transparent input">
<input type="text" placeholder="标题,链接..." ng-model="searchWord">
</div>
</div>
<div class="left floated right aligned two wide column" ng-show="showSearch">
<div class="ui grid">
<div class="four wide column">
@ -112,7 +111,6 @@
<span ng-click="showSearch = !showSearch">收起</span>
</div>
</div>
</div>
</div>
<table class="ui celled table">

View File

@ -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;