增加了一下标签功能
This commit is contained in:
parent
24be427ce9
commit
1bb8a0c4a9
2
app.js
2
app.js
|
|
@ -32,7 +32,7 @@ app.use(session({
|
||||||
saveUninitialized: true, //添加这行
|
saveUninitialized: true, //添加这行
|
||||||
secret: 'ILoveYiJia', // 建议使用 128 个字符的随机字符串
|
secret: 'ILoveYiJia', // 建议使用 128 个字符的随机字符串
|
||||||
cookie: {
|
cookie: {
|
||||||
maxAge: 2592000000,
|
maxAge: 1000 * 60,
|
||||||
},
|
},
|
||||||
store: new mongoStore({
|
store: new mongoStore({
|
||||||
url: 'mongodb://localhost/mybookmarks'
|
url: 'mongodb://localhost/mybookmarks'
|
||||||
|
|
|
||||||
|
|
@ -195,7 +195,7 @@ db.getUser = function(username) {
|
||||||
|
|
||||||
db.getTags = function(user_id) {
|
db.getTags = function(user_id) {
|
||||||
console.log('getTags');
|
console.log('getTags');
|
||||||
var sql = "SELECT * FROM `tags` WHERE `user_id` = '" + user_id + "' ORDER BY last_use DESC";
|
var sql = "SELECT t.*, tb.cnt FROM `tags` as t LEFT OUTER JOIN ( SELECT `tag_id`, COUNT(tag_id) as cnt FROM tags_bookmarks GROUP BY tag_id ) tb ON t.id = tb.tag_id WHERE t.user_id = '" + user_id + "' ORDER BY last_use DESC";
|
||||||
return new Promise(function(resolve, reject) {
|
return new Promise(function(resolve, reject) {
|
||||||
client.query(sql, (err, result) => {
|
client.query(sql, (err, result) => {
|
||||||
if (err) {
|
if (err) {
|
||||||
|
|
@ -289,6 +289,37 @@ db.getBookmarksTable = function(params) {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
db.getBookmarksByTag = function(params) {
|
||||||
|
var tag_id = params.tagId;
|
||||||
|
params.currentPage = params.currentPage || 1;
|
||||||
|
params.perPageItems = params.perPageItems || 20;
|
||||||
|
|
||||||
|
var sql = "SELECT bookmarks.id, bookmarks.user_id, bookmarks.title, bookmarks.description, bookmarks.url, bookmarks.public, bookmarks.click_count, DATE_FORMAT(bookmarks.created_at, '%Y-%m-%d') as created_at, DATE_FORMAT(bookmarks.last_click, '%Y-%m-%d') as last_click FROM `tags_bookmarks`, `bookmarks` WHERE tags_bookmarks.tag_id = '"+ tag_id +"' AND tags_bookmarks.bookmark_id = bookmarks.id";
|
||||||
|
|
||||||
|
return new Promise(function(resolve, reject) {
|
||||||
|
client.query(sql, (err, result) => {
|
||||||
|
if (err) {
|
||||||
|
reject(err);
|
||||||
|
} else {
|
||||||
|
sql += " LIMIT " + (params.currentPage - 1) * params.perPageItems + ", " + params.perPageItems;
|
||||||
|
var totalItems = result.length;
|
||||||
|
console.log(totalItems, sql);
|
||||||
|
client.query(sql, (err, result) => {
|
||||||
|
if (err) {
|
||||||
|
reject(err);
|
||||||
|
} else {
|
||||||
|
var bookmarksData = {
|
||||||
|
totalItems: totalItems,
|
||||||
|
bookmarks: result,
|
||||||
|
}
|
||||||
|
resolve(bookmarksData);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
db.getBookmarksSearch = function(params) {
|
db.getBookmarksSearch = function(params) {
|
||||||
params.currentPage = params.currentPage || 1;
|
params.currentPage = params.currentPage || 1;
|
||||||
params.perPageItems = params.perPageItems || 20;
|
params.perPageItems = params.perPageItems || 20;
|
||||||
|
|
|
||||||
|
|
@ -1,14 +1,92 @@
|
||||||
app.controller('tagsCtr', ['$scope', '$filter', 'bookmarkService', 'pubSubService', function($scope, $filter, bookmarkService, pubSubService) {
|
app.controller('tagsCtr', ['$scope', '$filter', '$window', 'bookmarkService', 'pubSubService', function($scope, $filter, $window, bookmarkService, pubSubService) {
|
||||||
console.log("Hello tagsCtr...");
|
console.log("Hello tagsCtr...");
|
||||||
getTags({});
|
getTags({});
|
||||||
|
|
||||||
|
const perPageItems = 10;
|
||||||
$scope.tags = []; // 书签数据
|
$scope.tags = []; // 书签数据
|
||||||
|
$scope.bookmarkClicked = false;
|
||||||
|
$scope.bookmarks = [];
|
||||||
|
$scope.bookmarkCount = 0;
|
||||||
|
$scope.totalPages = 0;
|
||||||
|
$scope.currentPage = 1;
|
||||||
|
$scope.inputPage = '';
|
||||||
|
$scope.currentTagId = "";
|
||||||
|
|
||||||
pubSubService.subscribe('MenuCtr.tags', $scope, function(event, data) {
|
pubSubService.subscribe('MenuCtr.tags', $scope, function(event, data) {
|
||||||
console.log('subscribe MenuCtr.tags', data);
|
console.log('subscribe MenuCtr.tags', data);
|
||||||
getTags({});
|
getTags({});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
$scope.getBookmarks = function(tagId, currentPage) {
|
||||||
|
console.log('tags getBookmarks', tagId);
|
||||||
|
$scope.bookmarkClicked = true;
|
||||||
|
$scope.currentTagId = tagId;
|
||||||
|
|
||||||
|
$scope.tags.forEach(function(tag) {
|
||||||
|
tag.bookmarkClicked = false;
|
||||||
|
if (tag.id == tagId) {
|
||||||
|
tag.bookmarkClicked = true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
var params = {
|
||||||
|
tagId: tagId,
|
||||||
|
currentPage: currentPage,
|
||||||
|
perPageItems: perPageItems,
|
||||||
|
};
|
||||||
|
bookmarkService.getBookmarksByTag(params)
|
||||||
|
.then((data) => {
|
||||||
|
$scope.bookmarks = data.bookmarks;
|
||||||
|
$scope.bookmarkCount = data.totalItems;
|
||||||
|
$scope.totalPages = Math.ceil($scope.bookmarkCount / perPageItems);
|
||||||
|
|
||||||
|
$scope.inputPage = ''
|
||||||
|
})
|
||||||
|
.catch((err) => console.log('getTags err', err));
|
||||||
|
};
|
||||||
|
|
||||||
|
$scope.changeCurrentPage = function(currentPage) {
|
||||||
|
currentPage = parseInt(currentPage) || 0;
|
||||||
|
console.log(currentPage);
|
||||||
|
if (currentPage <= $scope.totalPages && currentPage >= 1) {
|
||||||
|
$scope.getBookmarks($scope.currentTagId, currentPage);
|
||||||
|
$scope.currentPage = currentPage;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$scope.jumpToUrl = function(url, id) {
|
||||||
|
if (!$scope.edit) {
|
||||||
|
$window.open(url, '_blank');
|
||||||
|
bookmarkService.clickBookmark({
|
||||||
|
id: id
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$scope.delBookmark = function(bookmarkId) {
|
||||||
|
toastr.warning('功能暂未实现。。。', "警告");
|
||||||
|
return;
|
||||||
|
var params = {
|
||||||
|
id: bookmarkId
|
||||||
|
}
|
||||||
|
bookmarkService.delBookmark(params)
|
||||||
|
.then((data) => $("#" + bookmarkId).remove())
|
||||||
|
.catch((err) => {
|
||||||
|
console.log('delBookmark err ', err)
|
||||||
|
});
|
||||||
|
}
|
||||||
|
$scope.editBookmark = function(bookmarkId) {
|
||||||
|
toastr.warning('功能暂未实现。。。', "警告");
|
||||||
|
return;
|
||||||
|
pubSubService.publish('bookmarksCtr.editBookmark', {
|
||||||
|
'bookmarkId': bookmarkId
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
$scope.detailBookmark = function(bookmarkId) {
|
||||||
|
toastr.warning('功能暂未实现。。。', "警告");
|
||||||
|
}
|
||||||
|
|
||||||
function getTags(params) {
|
function getTags(params) {
|
||||||
bookmarkService.getTags(params)
|
bookmarkService.getTags(params)
|
||||||
.then((data) => $scope.tags = data)
|
.then((data) => $scope.tags = data)
|
||||||
|
|
|
||||||
|
|
@ -83,6 +83,20 @@ app.factory('bookmarkService', ['$http', '$q', function($http, $q) {
|
||||||
});
|
});
|
||||||
return def.promise;
|
return def.promise;
|
||||||
},
|
},
|
||||||
|
getBookmarksByTag: function(params) {
|
||||||
|
var def = $q.defer();
|
||||||
|
|
||||||
|
$http.get('/api/bookmarksByTag/', {
|
||||||
|
params: params
|
||||||
|
})
|
||||||
|
.success(function(data) {
|
||||||
|
def.resolve(data);
|
||||||
|
})
|
||||||
|
.error(function(data, status) {
|
||||||
|
def.reject('bookmarksByTag error');
|
||||||
|
});
|
||||||
|
return def.promise;
|
||||||
|
},
|
||||||
searchBookmarks: function(params) {
|
searchBookmarks: function(params) {
|
||||||
var def = $q.defer();
|
var def = $q.defer();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1 +1,58 @@
|
||||||
<p ng-repeat="tag in tags"> {{ tag }} </p>
|
<div class="ui segment">
|
||||||
|
<div class="ui container">
|
||||||
|
<div class="ui grid">
|
||||||
|
<div class="two wide column" ng-class="" ng-mouseover="" ng-mouseleave="" ng-repeat="tag in tags">
|
||||||
|
<div class="ui small label" ng-class="{green:tag.bookmarkClicked}" ng-click="getBookmarks(tag.id, 1)">
|
||||||
|
{{ tag.name }} x {{ tag.cnt }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<table class="ui celled table" ng-if="bookmarkCount > 0">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>标题</th>
|
||||||
|
<th>链接</th>
|
||||||
|
<th style="width:90px;">点击次数</th>
|
||||||
|
<th style="width:100px;">创建日期</th>
|
||||||
|
<th style="width:100px;">最后点击</th>
|
||||||
|
<th style="width:150px;">分类</th>
|
||||||
|
<th style="width:105px;">操作</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr ng-repeat="bookmark in bookmarks" id="{{ bookmark.id }}">
|
||||||
|
<td>
|
||||||
|
<img class="ui ui middle aligned tiny image" src=" http://favicon.byi.pw/?url={{bookmark.url}}" style="width:16px;height:16px">
|
||||||
|
<span ng-click="jumpToUrl(bookmark.url, bookmark.id)" title="{{bookmark.title}}">
|
||||||
|
{{ bookmark.title }}
|
||||||
|
</span>
|
||||||
|
</td>
|
||||||
|
<td ng-click="jumpToUrl(bookmark.url, bookmark.id)">
|
||||||
|
<span title="{{bookmark.url}}">{{ bookmark.url }}</span>
|
||||||
|
</td>
|
||||||
|
<td>{{ bookmark.click_count }}</td>
|
||||||
|
<td>{{ bookmark.created_at }}</td>
|
||||||
|
<td>{{ bookmark.last_click }}</td>
|
||||||
|
<td>
|
||||||
|
<div class="ui label" ng-repeat="tag in bookmark.tags" tag-id="{{ tag.id }}">
|
||||||
|
{{ tag.name }}
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<img class="ui mini spaced image" style="width:16px;height:16px;margin:0 5px" ng-src="./images/delete.png" ng-click="delBookmark(bookmark.id)">
|
||||||
|
<img class="ui mini spaced image" style="width:16px;height:16px;margin:0 5px" ng-src="./images/edit-bookmark.png" ng-click="editBookmark(bookmark.id)">
|
||||||
|
<img class="ui mini spaced image" style="width:16px;height:16px;margin:0 5px" ng-src="./images/detail.png" ng-click="detailBookmark(bookmark.id)">
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
<tfoot>
|
||||||
|
<tr>
|
||||||
|
<th colspan="7">
|
||||||
|
<pagination></pagination>
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
</tfoot>
|
||||||
|
</table>
|
||||||
|
|
|
||||||
|
|
@ -217,6 +217,61 @@ api.get('/bookmarks', function(req, res) {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
api.get('/bookmarksByTag', function(req, res) {
|
||||||
|
console.log('hello bookmarksByTag', JSON.stringify(req.query), req.session.username);
|
||||||
|
if (!req.session.user) {
|
||||||
|
res.send(401);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var userId = req.session.user.id;
|
||||||
|
var params = req.query;
|
||||||
|
|
||||||
|
var bookmarks = [];
|
||||||
|
var tagsBookmarks = [];
|
||||||
|
var totalItems = 0;
|
||||||
|
var totalItems = 0;
|
||||||
|
var sendData = {
|
||||||
|
totalItems: totalItems,
|
||||||
|
bookmarks: []
|
||||||
|
}
|
||||||
|
db.getBookmarksByTag(params)
|
||||||
|
.then((bookmarksData) => {
|
||||||
|
bookmarks = bookmarksData.bookmarks;
|
||||||
|
totalItems = bookmarksData.totalItems;
|
||||||
|
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);
|
||||||
|
})
|
||||||
|
sendData.totalItems = totalItems;
|
||||||
|
sendData.bookmarks = data;
|
||||||
|
|
||||||
|
res.json(sendData);
|
||||||
|
})
|
||||||
|
.catch((err) => console.log('bookmarks table or card err', err))
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
api.get('/searchBookmarks', function(req, res) {
|
api.get('/searchBookmarks', function(req, res) {
|
||||||
console.log('hello searchBookmarks', JSON.stringify(req.query), req.session.username);
|
console.log('hello searchBookmarks', JSON.stringify(req.query), req.session.username);
|
||||||
if (!req.session.user) {
|
if (!req.session.user) {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue