搜索基本可用
This commit is contained in:
parent
cfb24b1a44
commit
acbd78400a
|
|
@ -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) => {
|
||||
|
|
|
|||
|
|
@ -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 = '';
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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'));
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
},
|
||||
};
|
||||
});
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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">
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Reference in New Issue