diff --git a/schema.sql b/schema.sql
index fc7081b..8ffe47a 100644
--- a/schema.sql
+++ b/schema.sql
@@ -68,8 +68,8 @@ CREATE TABLE `hot_bookmarks` (
`description` varchar(4096) DEFAULT NULL, -- 描述(自己添加)
`url` varchar(1024) DEFAULT NULL, -- 链接(url)
`favCount` smallint DEFAULT 1, -- 总共收藏人数(favCount)
- `created_by` varchar(64) DEFAULT NULL, -- 创建者(sourceName)
- `created_at` bigint DEFAULT 0, -- 创建时间(updatetime)
+ `createdBy` varchar(64) DEFAULT NULL, -- 创建者(sourceName)
+ `createdAt` bigint DEFAULT 0, -- 创建时间(updatetime)
`lastClick` bigint DEFAULT 0, -- 最后一次点击时间(createtime)
`snapUrl` varchar(1024) DEFAULT NULL, -- 截图链接(imageList[0])
`faviconUrl` varchar(1024) DEFAULT NULL, -- icon链接(sourceLogo)
diff --git a/src/controller/api.js b/src/controller/api.js
index 1f5e0af..2e3d2f9 100644
--- a/src/controller/api.js
+++ b/src/controller/api.js
@@ -47,26 +47,59 @@ module.exports = class extends Base {
let post = this.post();
post.password = md5(post.password); // 进行密码加密
- let data = await this.model('users').where({ username: post.username, password: post.password }).find();
- if (think.isEmpty(data)) {
+ let user = await this.model('users').where({ username: post.username, password: post.password }).find();
+ if (think.isEmpty(user)) {
this.json({ code: 2, msg: "账号或者密码错误" });
} else {
- delete data.password;
+ delete user.password;
const token = await this.session('user', {
- id: data.id,
- username: data.username
+ id: user.id,
+ username: user.username
});
- data.token = token;
- this.json({ code: 0, data, msg: "登陆成功" });
+ user.token = token;
+ this.json({ code: 0, data: user, msg: "登陆成功" });
}
} catch (error) {
this.json({ code: 1, data: '', msg: error.toString() });
}
}
+ // 登出
+ async logoutAction() {
+ await this.session(null);
+ this.json({ code: 0, data: '', msg: "退出成功" });
+ }
+
+ async updateUserAction() {
+ let user = this.post();
+ try {
+ let data = await this.model('users').where({ id: this.ctx.state.user.id }).update(user);
+ this.json({ code: 0, data });
+ } catch (error) {
+ this.json({ code: 1, msg: error.toString() });
+ }
+ }
+
+ async resetUserPwdAction() {
+ let old = md5(this.post("old"));
+ let password = md5(this.post("password"));
+
+ try {
+ let user = await this.model('users').where({ id: this.ctx.state.user.id, password: old }).find();
+ if (!think.isEmpty(user)) {
+ let data = await this.model('users').where({ id: this.ctx.state.user.id }).update({ password });
+ this.json({ code: 0, data, msg: "密码更新成功!" });
+ } else {
+ this.json({ code: 0, data: 0, msg: "旧密码认证失败!" });
+ }
+ } catch (error) {
+ this.json({ code: 1, msg: error.toString() });
+ }
+ }
+
// 通过session获取自己信息
async ownAction() {
- let full = this.get().full;
+ let full = this.get("full");
if (full) {
let data = await this.model('users').where({ id: this.ctx.state.user.id }).find();
delete data.password;
@@ -105,6 +138,52 @@ module.exports = class extends Base {
}
}
+ // 更新分类
+ async updateTagAction() {
+ let tag = this.post();
+ try {
+ let data = await this.model('tags').where({
+ userId: this.ctx.state.user.id,
+ id: tag.id
+ }).update(tag);
+ this.json({ code: 0, data });
+ } catch (error) {
+ this.json({ code: 1, msg: error.toString() });
+ }
+ }
+
+ // 批量更新排序
+ async updateTagSortAction() {
+ let tags = this.post("tags");
+ try {
+ let data = 0;
+ for (const tag of tags) {
+ let count = await this.model('tags').where({
+ userId: this.ctx.state.user.id,
+ id: tag.id
+ }).update(tag);
+ data += count;
+ }
+ this.json({ code: 0, data, msg: '分类排序更新成功!' });
+ } catch (error) {
+ this.json({ code: 1, msg: error.toString() });
+ }
+ }
+
+ // 删除分类
+ async delTagAction() {
+ let id = this.post("id");
+ let tagId = id;
+ let userId = this.ctx.state.user.id;
+ try {
+ let data = await this.model("tags").where({ id, userId }).delete();
+ data = await this.model("bookmarks").where({ tagId, userId }).delete();
+ this.json({ code: 0, data, msg: `分类删除成功` });
+ } catch (error) {
+ this.json({ code: 1, msg: error.toString() });
+ }
+ }
+
// 获取书签
// @todo 如果是自己的任意获取,如果是别人的必须公开才能获取
async bookmarkAction() {
@@ -122,6 +201,20 @@ module.exports = class extends Base {
let bookmark = this.post();
bookmark.userId = this.ctx.state.user.id;
try {
+ // 没有分类的直接放未分类里面
+ if (!bookmark.tagId) {
+ const name = "未分类";
+ let tag = await this.model("tags").where({ name }).find();
+ if (!think.isEmpty(tag)) {
+ bookmark.tagId = tag.id;
+ } else {
+ let tagId = await this.model("tags").add({
+ userId: this.ctx.state.user.id,
+ name
+ });
+ bookmark.tagId = tagId;
+ }
+ }
let res = await this.model("bookmarks").add(bookmark);
this.json({ code: 0, data: res, msg: `书签 ${bookmark.title} 添加成功` });
} catch (error) {
@@ -129,6 +222,18 @@ module.exports = class extends Base {
}
}
+ // 删除书签
+ async delBookmarkAction() {
+ let bookmark = this.post();
+ bookmark.userId = this.ctx.state.user.id;
+ try {
+ let data = await this.model("bookmarks").where(bookmark).delete();
+ this.json({ code: 0, data, msg: `书签删除成功` });
+ } catch (error) {
+ this.json({ code: 1, msg: error.toString() });
+ }
+ }
+
// 根据书签id获取书签
async getBookmarksByTagAction() {
let tagId = this.get("tagId");
@@ -171,6 +276,32 @@ module.exports = class extends Base {
}
}
+ // 快速跳转到网页
+ async shortcutBookmarkAction() {
+ let url = this.post("url");
+ try {
+ let bookmark = await this.model('bookmarks').where({
+ userId: this.ctx.state.user.id,
+ url
+ }).find();
+
+ if (!think.isEmpty(bookmark)) {
+ await this.model('bookmarks').where({
+ userId: this.ctx.state.user.id,
+ id: bookmark.id
+ }).update({
+ clickCount: ['exp', 'clickCount+1'],
+ lastClick: ['exp', 'NOW()']
+ });
+ this.json({ code: 0, data: true });
+ } else {
+ this.json({ code: 0, data: false });
+ }
+ } catch (error) {
+ this.json({ code: 1, msg: error.toString() });
+ }
+ }
+
// 更新书签
async updateBookmarkAction() {
let bookmark = this.post();
@@ -281,6 +412,10 @@ module.exports = class extends Base {
async notesAction() {
let where = {};
try {
+ let searchWord = this.get('searchWord');
+ if (searchWord) {
+ where.content = ['like', `%${searchWord}%`]
+ }
let data = await this.model('notes').where(where).order("createdAt DESC").page(this.get('page'), this.get('pageSize')).countSelect();
this.json({ code: 0, data });
} catch (error) {
diff --git a/view/index_index.html b/view/index_index.html
index 9815527..a6bb730 100644
--- a/view/index_index.html
+++ b/view/index_index.html
@@ -86,7 +86,6 @@
-
diff --git a/www/scripts/controllers/advice-controller.js b/www/scripts/controllers/advice-controller.js
index e7335c0..dca0608 100644
--- a/www/scripts/controllers/advice-controller.js
+++ b/www/scripts/controllers/advice-controller.js
@@ -1,4 +1,4 @@
-app.controller('adviceCtr', ['$scope', '$state', '$timeout', 'bookmarkService', 'pubSubService', 'dataService', function ($scope, $state, $timeout, bookmarkService, pubSubService, dataService) {
+app.controller('adviceCtr', ['$scope', '$state', '$timeout', 'pubSubService', 'dataService', function ($scope, $state, $timeout, pubSubService, dataService) {
console.log("Hello adviceCtr");
if (dataService.smallDevice()) {
$window.location = "http://m.mybookmark.cn/#/tags";
diff --git a/www/scripts/controllers/bookmark-info-controller.js b/www/scripts/controllers/bookmark-info-controller.js
index 246940e..ff8e68a 100644
--- a/www/scripts/controllers/bookmark-info-controller.js
+++ b/www/scripts/controllers/bookmark-info-controller.js
@@ -1,4 +1,4 @@
-app.controller('bookmarkInfoCtr', ['$scope', '$state', '$timeout', '$sce', '$window', '$filter', '$document', '$timeout', 'bookmarkService', 'pubSubService', 'dataService', function ($scope, $state, $timeout, $sce, $window, $filter, $document, $timeout, bookmarkService, pubSubService, dataService) {
+app.controller('bookmarkInfoCtr', ['$scope', '$state', '$timeout', '$sce', '$window', '$filter', '$document', '$timeout', 'pubSubService', 'dataService', function ($scope, $state, $timeout, $sce, $window, $filter, $document, $timeout, pubSubService, dataService) {
console.log("Hello bookmarkInfoCtr");
$scope.bookmark = {}
$scope.content = '';
diff --git a/www/scripts/controllers/bookmarks-controller.js b/www/scripts/controllers/bookmarks-controller.js
index 3a67b8b..7a9116d 100644
--- a/www/scripts/controllers/bookmarks-controller.js
+++ b/www/scripts/controllers/bookmarks-controller.js
@@ -1,4 +1,4 @@
-app.controller('bookmarksCtr', ['$scope', '$state', '$stateParams', '$filter', '$window', '$timeout', '$document', 'ngDialog', 'bookmarkService', 'pubSubService', 'dataService', function ($scope, $state, $stateParams, $filter, $window, $timeout, $document, ngDialog, bookmarkService, pubSubService, dataService) {
+app.controller('bookmarksCtr', ['$scope', '$state', '$stateParams', '$filter', '$window', '$timeout', '$document', 'ngDialog', 'pubSubService', 'dataService', function ($scope, $state, $stateParams, $filter, $window, $timeout, $document, ngDialog, pubSubService, dataService) {
console.log("Hello bookmarksCtr...", $stateParams);
if (dataService.smallDevice()) {
$window.location = "http://m.mybookmark.cn/#/tags";
diff --git a/www/scripts/controllers/edit-controller.js b/www/scripts/controllers/edit-controller.js
index 8630c53..73ab369 100644
--- a/www/scripts/controllers/edit-controller.js
+++ b/www/scripts/controllers/edit-controller.js
@@ -1,4 +1,4 @@
-app.controller('editCtr', ['$scope', '$state', '$timeout', '$document', 'ngDialog', 'bookmarkService', 'pubSubService', 'dataService', function ($scope, $state, $timeout, $document, ngDialog, bookmarkService, pubSubService, dataService) {
+app.controller('editCtr', ['$scope', '$state', '$timeout', '$document', 'ngDialog', 'pubSubService', 'dataService', function ($scope, $state, $timeout, $document, ngDialog, pubSubService, dataService) {
console.log("Hello editCtr");
var maxSelections = 3;
var dialog = null;
@@ -92,13 +92,14 @@ app.controller('editCtr', ['$scope', '$state', '$timeout', '$document', 'ngDialo
console.log("add bookmark", params);
if ($scope.add) {
- await post('addBookmark', params);
+ let id = await post('addBookmark', params);
$('.ui.modal.js-add-bookmark').modal('hide');
+ params.id = id;
pubSubService.publish('EditCtr.inserBookmarsSuccess', params);
} else {
await post('updateBookmark', params);
$('.ui.modal.js-add-bookmark').modal('hide');
- pubSubService.publish('EditCtr.inserBookmarsSuccess', data);
+ pubSubService.publish('EditCtr.inserBookmarsSuccess', params);
toastr.success('[ ' + params.title + ' ] 更新成功,将自动重新更新书签!', "提示");
}
}
diff --git a/www/scripts/controllers/home-controller.js b/www/scripts/controllers/home-controller.js
index 7627acf..2153da8 100644
--- a/www/scripts/controllers/home-controller.js
+++ b/www/scripts/controllers/home-controller.js
@@ -1,4 +1,4 @@
-app.controller('homeCtr', ['$scope', '$stateParams', '$filter', '$state', '$window', 'bookmarkService', 'pubSubService', 'dataService', function ($scope, $stateParams, $filter, $state, $window, bookmarkService, pubSubService, dataService) {
+app.controller('homeCtr', ['$scope', '$stateParams', '$filter', '$state', '$window', 'pubSubService', 'dataService', function ($scope, $stateParams, $filter, $state, $window, pubSubService, dataService) {
console.log('Hello homeCtr......');
if (dataService.smallDevice()) {
$window.location = "http://m.mybookmark.cn/#/tags";
diff --git a/www/scripts/controllers/login-controller.js b/www/scripts/controllers/login-controller.js
index 2904c31..ad1c0ed 100644
--- a/www/scripts/controllers/login-controller.js
+++ b/www/scripts/controllers/login-controller.js
@@ -1,4 +1,4 @@
-app.controller('loginCtr', ['$scope', '$filter', '$state', '$http', '$cookieStore', '$window', 'bookmarkService', 'pubSubService', 'dataService', function ($scope, $filter, $state, $http, $cookieStore, $window, bookmarkService, pubSubService, dataService) {
+app.controller('loginCtr', ['$scope', '$filter', '$state', '$http', '$cookieStore', '$window', 'pubSubService', 'dataService', function ($scope, $filter, $state, $http, $cookieStore, $window, pubSubService, dataService) {
console.log("Hello loginCtr...", $cookieStore.get("username"));
if (dataService.smallDevice()) {
$window.location = "http://m.mybookmark.cn/#/tags";
diff --git a/www/scripts/controllers/menus-controller.js b/www/scripts/controllers/menus-controller.js
index 962f447..089cbc3 100644
--- a/www/scripts/controllers/menus-controller.js
+++ b/www/scripts/controllers/menus-controller.js
@@ -1,4 +1,4 @@
-app.controller('menuCtr', ['$scope', '$stateParams', '$state', '$window', '$timeout', '$document', 'pubSubService', 'bookmarkService', 'dataService', function ($scope, $stateParams, $state, $window, $timeout, $document, pubSubService, bookmarkService, dataService) {
+app.controller('menuCtr', ['$scope', '$stateParams', '$state', '$window', '$timeout', '$document', 'pubSubService', 'dataService', function ($scope, $stateParams, $state, $window, $timeout, $document, pubSubService, dataService) {
console.log("Hello menuCtr")
$scope.login = false; /**< 是否登陆 */
$scope.selectLoginIndex = 0; /**< 默认登陆之后的选择的菜单索引,下表从 0 开始 */
@@ -26,11 +26,18 @@ app.controller('menuCtr', ['$scope', '$stateParams', '$state', '$window', '$time
$scope.loginMenus = dataService.loginMenus; // 登陆之后显示的菜单数据。uiSerf:内部跳转链接。
$scope.notLoginMenus = dataService.notLoginMenus; // 未登陆显示的菜单数据
- get('own').then(user => {
+ get('own', { full: true }).then(user => {
$scope.user = user;
- if ($scope.user.username === 'lcq') {
- $scope.loginMenus[dataService.LoginIndexHot].show = false;
- }
+ $timeout(() => {
+ $scope.searchHistory = JSON.parse(user.searchHistory || '[]');
+ $scope.quickUrl = JSON.parse(user.quickUrl || '{}');
+ $scope.searchHistory.forEach((item, index) => {
+ $scope.searchIcon(item);
+ })
+ if ($scope.user.username === 'lcq') {
+ $scope.loginMenus[dataService.LoginIndexHot].show = false;
+ }
+ })
});
$scope.toggleReady = function (ready) {
@@ -178,14 +185,12 @@ app.controller('menuCtr', ['$scope', '$stateParams', '$state', '$window', '$time
});
}
- $scope.logout = function () {
- bookmarkService.logout({})
- .then((data) => {
- console.log('logout..........', data)
- $scope.login = false;
- $state.go('login', {})
- })
- .catch((err) => console.log('logout err', err));
+ $scope.logout = async function () {
+ await post('logout');
+ axios.defaults.headers.common['Authorization'] = "";
+ localStorage.setItem("authorization", "");
+ $scope.login = false;
+ $state.go('login', {});
}
$scope.star = function () {
@@ -218,8 +223,8 @@ app.controller('menuCtr', ['$scope', '$stateParams', '$state', '$window', '$time
$('.ui.menu a.item:eq(' + index + ')').addClass('selected');
}
- function saveHistory() {
- var datas = [];
+ async function saveHistory() {
+ let datas = [];
$scope.searchHistory = $scope.searchHistory.slice(0, 15); // 最多保留15个历史记录
$scope.searchHistory.forEach((item, index) => {
datas.push({
@@ -227,41 +232,9 @@ app.controller('menuCtr', ['$scope', '$stateParams', '$state', '$window', '$time
d: item.d,
})
})
-
- var parmes = {
- searchHistory: JSON.stringify(datas),
- };
- bookmarkService.updateSearchHistory(parmes)
- .then((data) => {
- if (data.retCode == 0) {
- // toastr.success('历史搜索更新成功', "提示");
- } else {
- toastr.error('历史搜索更新失败。错误信息:' + data.msg, "错误");
- }
- })
- .catch((err) => {
- toastr.error('历史搜索更新失败。错误信息:' + JSON.stringify(err), "错误");
- });
+ await post("updateUser", { searchHistory: JSON.stringify(datas) });
}
- (async () => {
- let user = await get('own', { full: true });
- $scope.searchHistory = JSON.parse(user.search_history || '[]');
- $scope.quickUrl = JSON.parse(user.quick_url || '{}');
- $scope.searchHistory.forEach((item, index) => {
- $scope.searchIcon(item)
- })
- $timeout(function () {
- var showStyle = (user && user.show_style) || 'navigate';
- if (showStyle) {
- $('.js-bookmark-dropdown' + ' .radio.checkbox').checkbox('set unchecked');
- $('.js-radio-' + showStyle).checkbox('set checked');
- $('.js-bookmark-dropdown' + ' .field.item').removeClass('active selected');
- $('.js-field-' + showStyle).addClass('active selected');
- }
- }, 1000)
- })();
-
$timeout(function () {
$('.suggest')
.popup({
@@ -273,13 +246,12 @@ app.controller('menuCtr', ['$scope', '$stateParams', '$state', '$window', '$time
}, 1000)
// 在输入文字的时候也会触发,所以不要用Ctrl,Shift之类的按键
- $document.bind("keydown", function (event) {
- $scope.$apply(function () {
+ $document.bind("keydown", async function (event) {
+ $scope.$apply(async function () {
var key = event.key.toUpperCase();
if (key == 'CONTROL' || key == 'SHIFT' || key == 'ALT') {
+ // 有时候没有检测到keyup,会一直按无效,干脆过个3秒就认为你抬起来了。反正你按下我还是会给你标记为true的。
$scope.longPress = true;
- // 有时候没有检测到keyup,会一直按无效,干脆过个3秒就认为你抬起来了
- // 反正你按下我还是会给你标记为true的。
$timeout(function () {
$scope.longPress = false;
}, 3000)
@@ -335,22 +307,11 @@ app.controller('menuCtr', ['$scope', '$stateParams', '$state', '$window', '$time
var url = $scope.quickUrl[key];
if (url) {
$window.open(url, '_blank');
- var params = {
- url: url,
+ let data = await post('shortcutBookmark', { url });
+ if (!data) {
+ toastr.info('网址:' + url + "还没添加到你的书签系统,请添加!", "警告");
+ pubSubService.publish('TagCtr.storeBookmark', { url });
}
- bookmarkService.jumpQuickUrl(params)
- .then((data) => {
- if (!data.id) {
- toastr.info('网址:' + url + "还没添加到你的书签系统,请添加!", "警告");
- var bookmark = {
- url: url
- }
- pubSubService.publish('TagCtr.storeBookmark', bookmark);
- }
- })
- .catch((err) => {
-
- });
}
}
}
diff --git a/www/scripts/controllers/note-controller.js b/www/scripts/controllers/note-controller.js
index de38882..11b759e 100644
--- a/www/scripts/controllers/note-controller.js
+++ b/www/scripts/controllers/note-controller.js
@@ -1,4 +1,4 @@
-app.controller('noteCtr', ['$scope', '$state', '$stateParams', '$filter', '$window', '$timeout', '$document', 'ngDialog', 'bookmarkService', 'pubSubService', 'dataService', function ($scope, $state, $stateParams, $filter, $window, $timeout, $document, ngDialog, bookmarkService, pubSubService, dataService) {
+app.controller('noteCtr', ['$scope', '$state', '$stateParams', '$filter', '$window', '$timeout', '$document', 'ngDialog', 'pubSubService', 'dataService', function ($scope, $state, $stateParams, $filter, $window, $timeout, $document, ngDialog, pubSubService, dataService) {
console.log("Hello noteCtr...", $stateParams);
if (dataService.smallDevice()) {
$window.location = "http://m.mybookmark.cn/#/tags";
diff --git a/www/scripts/controllers/search-controller.js b/www/scripts/controllers/search-controller.js
index 2403fad..ccb7dc5 100644
--- a/www/scripts/controllers/search-controller.js
+++ b/www/scripts/controllers/search-controller.js
@@ -22,28 +22,27 @@ app.controller('searchCtr', ['$scope', '$state', '$stateParams', '$filter', '$wi
$scope.bookmarkCount = 0;
$scope.tags = []
$scope.totalPages = 0;
- $scope.currentPage = 1;
+ $scope.page = 1;
$scope.inputPage = '';
$scope.loading = false;
$scope.waitDelBookmark = {};
$scope.searchHotBookmarks = false;
var timeagoInstance = timeago();
- $scope.changeCurrentPage = function (currentPage) {
- currentPage = parseInt(currentPage) || 0;
- console.log(currentPage);
- if (currentPage <= $scope.totalPages && currentPage >= 1) {
- $scope.currentPage = currentPage;
+ $scope.changeCurrentPage = async function (page) {
+ page = parseInt(page) || 0;
+ console.log(page);
+ if (page <= $scope.totalPages && page >= 1) {
+ $scope.page = page;
$scope.inputPage = '';
$scope.search();
}
}
- bookmarkService.getTags({})
- .then((data) => {
- $scope.tags = data;
- })
- .catch((err) => console.log('getTags err', err));
+ get('tags').then((tags) => {
+ $scope.tags = tags;
+ })
+
// 默认登陆
pubSubService.publish('Common.menuActive', {
login: true,
@@ -52,7 +51,7 @@ app.controller('searchCtr', ['$scope', '$state', '$stateParams', '$filter', '$wi
var searchParams = {
searchWord: $scope.searchWord,
- currentPage: 1,
+ page: 1,
perPageItems: perPageItems,
userRange: '1', // 默认搜索自己的书签
}
@@ -80,7 +79,7 @@ app.controller('searchCtr', ['$scope', '$state', '$stateParams', '$filter', '$wi
}
}
- $scope.delBookmark = function (bookmark) {
+ $scope.delBookmark = async function (bookmark) {
$scope.waitDelBookmark = $.extend(true, {}, bookmark); // 利用jQuery执行深度拷贝
dialog = ngDialog.open({
template: './views/dialog-del-bookmark.html',
@@ -89,67 +88,41 @@ app.controller('searchCtr', ['$scope', '$state', '$stateParams', '$filter', '$wi
});
}
- $scope.confirmDelBookmark = function (bookmarkId) {
- var params = {
- id: bookmarkId
- }
- ngDialog.close(dialog);
- bookmarkService.delBookmark(params)
- .then((data) => {
- $("#" + bookmarkId).transition({
- animation: dataService.animation(),
- duration: 500,
- onComplete: function () {
- $("#" + bookmarkId).remove();
- }
- });
- toastr.success($scope.waitDelBookmark.title + ' 书签删除成功!', "提示");
- })
- .catch((err) => {
- toastr.error($scope.waitDelBookmark.title + ' 书签删除失败!错误提示:' + JSON.stringify(err), "提示");
- });
+ $scope.confirmDelBookmark = async function (id) {
+ await post("delBookmark", { id })
+ $("#" + id).transition({
+ animation: dataService.animation(),
+ duration: 500,
+ onComplete: function () {
+ $("#" + id).remove();
+ }
+ });
}
- $scope.editBookmark = function (id) {
+ $scope.editBookmark = async function (id) {
pubSubService.publish('bookmarksCtr.editBookmark', { id });
}
- $scope.detailBookmark = function (bookmark) {
+ $scope.detailBookmark = async function (bookmark) {
pubSubService.publish('TagCtr.showBookmarkInfo', bookmark);
}
- $scope.storeBookmark = function (bookmark) {
+ $scope.storeBookmark = async function (bookmark) {
var b = $.extend(true, {}, bookmark); // 利用jQuery执行深度拷贝
pubSubService.publish('TagCtr.storeBookmark', b);
}
- $scope.favoriteBookmark = function (b) {
- var bookmark = {}
- bookmark.description = '';
- bookmark.title = b.title;
- bookmark.url = b.url;
- bookmark.public = 1;
- bookmark.click_count = 1;
-
- bookmarkService.favoriteBookmark(bookmark)
- .then((data) => {
- pubSubService.publish('EditCtr.inserBookmarsSuccess', data);
- if (data.title) {
- toastr.success('[ ' + data.title + ' ] 收藏成功!', "提示");
- } else {
- toastr.error('[ ' + bookmark.title + ' ] 收藏失败!', "提示");
- }
- })
- .catch((err) => {
- toastr.error('[ ' + bookmark.title + ' ] 收藏失败,' + JSON.stringify(err), "提示");
- });
+ $scope.favoriteBookmark = async function (bookmark) {
+ let id = await post("addBookmark", bookmark);
+ let bookmark = await get("bookmark", { id });
+ pubSubService.publish('EditCtr.inserBookmarsSuccess', bookmark);
}
- $scope.copy = function (url) {
+ $scope.copy = async function (url) {
dataService.clipboard(url);
}
- $scope.search = function (page) {
+ $scope.search = async function (page) {
var params = {}
params.userRange = $('.js-user-range').dropdown('get value');
if (params.userRange == '1') {
@@ -185,14 +158,14 @@ app.controller('searchCtr', ['$scope', '$state', '$stateParams', '$filter', '$wi
params.dateClickBegin = $scope.dateClickBegin;
params.dateClickEnd = $scope.dateClickEnd;
}
- params.currentPage = page ? page : $scope.currentPage;
+ params.page = page ? page : $scope.page;
params.perPageItems = perPageItems;
- $scope.currentPage = params.currentPage;
+ $scope.page = params.page;
searchBookmarks(params)
console.log('search..', page, 'params = ', params)
}
- $scope.updateCreateDate = function () {
+ $scope.updateCreateDate = async function () {
console.log($scope.dateCreateBegin, $scope.dateCreateEnd);
if ($scope.dateCreateBegin && $scope.dateCreateEnd) {
$('.js-create-date').dropdown('hide');
@@ -201,7 +174,7 @@ app.controller('searchCtr', ['$scope', '$state', '$stateParams', '$filter', '$wi
}
}
- $scope.updateClickDate = function () {
+ $scope.updateClickDate = async function () {
console.log($scope.dateClickBegin, $scope.dateClickEnd);
if ($scope.dateClickBegin && $scope.dateClickEnd) {
$('.js-click-date').dropdown('hide');
@@ -210,13 +183,13 @@ app.controller('searchCtr', ['$scope', '$state', '$stateParams', '$filter', '$wi
}
}
- $scope.updateTagsSelect = function () {
+ $scope.updateTagsSelect = async 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);
}
- $scope.setHoverBookmark = function (bookmark) {
+ $scope.setHoverBookmark = async function (bookmark) {
$scope.hoverBookmark = bookmark;
}
diff --git a/www/scripts/controllers/settings-controller.js b/www/scripts/controllers/settings-controller.js
index 0c032ec..d396df4 100644
--- a/www/scripts/controllers/settings-controller.js
+++ b/www/scripts/controllers/settings-controller.js
@@ -1,4 +1,4 @@
-app.controller('settingsCtr', ['$scope', '$stateParams', '$filter', '$state', '$window', '$timeout', 'bookmarkService', 'pubSubService', 'dataService', function ($scope, $stateParams, $filter, $state, $window, $timeout, bookmarkService, pubSubService, dataService) {
+app.controller('settingsCtr', ['$scope', '$stateParams', '$filter', '$state', '$window', '$timeout', 'pubSubService', 'dataService', function ($scope, $stateParams, $filter, $state, $window, $timeout, pubSubService, dataService) {
console.log('Hello settingsCtr......', $stateParams);
if (dataService.smallDevice()) {
$window.location = "http://m.mybookmark.cn/#/tags";
@@ -12,153 +12,56 @@ app.controller('settingsCtr', ['$scope', '$stateParams', '$filter', '$state', '$
$scope.passwordNew2 = "";
$scope.user = {};
$scope.tagCnt = 0;
- $scope.bookmarkCnt = 0;
- $scope.loadShowStyle = false;
+ $scope.bookmarkCount = 0;
$scope.form[($stateParams && $stateParams.formIndex) || 0] = true;
$scope.key = '';
$scope.url = '';
$scope.quickUrl = {};
- $scope.updateLogs = [];
- $scope.logsUrl = 'https://github.com/luchenqun/my-bookmark/commits/master';
- $scope.loadingLogs = false;
- $scope.getUpdateLog = function (url) {
- if ($scope.updateLogs.length > 0 && url == 'https://github.com/luchenqun/my-bookmark/commits/master') {
- toastr.warning('没有更早的日志可供您查看了!', "错误");
- return;
- }
-
- $scope.loadingLogs = true;
- bookmarkService.getUpdateLog({
- url: url
- })
- .then((data) => {
- Array.prototype.push.apply($scope.updateLogs, data.updateLogs);
- $scope.logsUrl = data.oldUrl;
- $scope.loadingLogs = false;
- })
- .catch((err) => {
- toastr.error('获取更新日志失败。错误信息:' + JSON.stringify(err), "错误");
- $scope.loadingLogs = false;
- });
- }
-
- $scope.changeForm = function (index) {
+ $scope.changeForm = async function (index) {
console.log("changeForm = ", index);
$scope.form = $scope.form.map(() => false);
$scope.form[index] = true;
- $scope.updateLogs = [];
-
if (index == 0 || index == 1 || index == 4) {
- $scope.loadShowStyle = true;
- bookmarkService.userInfo({})
- .then((data) => {
- $scope.user = data;
- if (index == 0) {
- updateShowStyle(($scope.user && $scope.user.show_style) || 'navigate');
- $scope.loadShowStyle = false;
- }
- if (index == 4) {
- function objKeySort(obj) {
- var newkey = Object.keys(obj).sort();
- var newObj = {};
- for (var i = 0; i < newkey.length; i++) {
- newObj[newkey[i]] = obj[newkey[i]];
- }
- return newObj;//返回排好序的新对象
- }
-
- $scope.quickUrl = objKeySort(JSON.parse($scope.user.quick_url || '{}'));
-
- }
- })
- .catch((err) => {
- dataService.netErrorHandle(err, $state)
- $scope.loadShowStyle = false;
- });
- }
-
- if (index == 1) {
- bookmarkService.getTags({})
- .then((data) => {
- $scope.tagCnt = data.length;
- $scope.bookmarkCnt = 0;
- data.forEach((tag) => {
- $scope.bookmarkCnt += tag.cnt;
- })
- })
- .catch((err) => {
- dataService.netErrorHandle(err, $state)
- });
- }
-
- if (index == 5) {
- $scope.logsUrl = 'https://github.com/luchenqun/my-bookmark/commits/master'
- $scope.getUpdateLog($scope.logsUrl);
+ let user = await get('own', { full: true });
+ let tags = await get('tags', { bookmarkCount: true, noteCount: true });
+ $timeout(() => {
+ $scope.user = user
+ $scope.quickUrl = objKeySort(JSON.parse($scope.user.quickUrl || '{}'));
+ $scope.bookmarkCount = 0;
+ $scope.tagCnt = tags.length;
+ for (const tag of tags) {
+ $scope.bookmarkCount += tag.bookmarkCount;
+ }
+ })
}
}
$scope.changeForm($scope.form.indexOf(true)); // 马上调用一次
- $scope.resetPassword = function () {
+ $scope.resetPassword = async function () {
if (!$scope.passwordOrgin || !$scope.passwordNew1 || !$scope.passwordNew2) {
toastr.error('原密码跟新密码不能为空', "错误");
return;
}
if ($scope.passwordNew1 == $scope.passwordNew2) {
- var parmes = {
- passwordNew: $scope.passwordNew1,
- passwordOrgin: $scope.passwordOrgin,
- };
+ await post('resetUserPwd', { old: $scope.passwordOrgin, password: $scope.passwordNew1 });
+ await post('logout');
- bookmarkService.resetPassword(parmes)
- .then((data) => {
- if (data.retCode == 0) {
- toastr.success('密码更新成功,请重新登陆!', "提示");
- // 注销登陆
- bookmarkService.logout({})
- .then((data) => {
- console.log('logout..........', data)
- pubSubService.publish('Common.menuActive', {
- login: false,
- index: dataService.NotLoginIndexLogin
- });
- $state.go('login', {})
- })
- .catch((err) => console.log('logout err', err));
- } else {
- toastr.error('密码更新失败。错误信息:' + data.msg, "错误");
- }
- })
- .catch((err) => {
- toastr.error('密码更新失败。错误信息:' + JSON.stringify(err), "错误");
- });
+ axios.defaults.headers.common['Authorization'] = "";
+ localStorage.setItem("authorization", "");
+ pubSubService.publish('Common.menuActive', {
+ login: false,
+ index: dataService.NotLoginIndexLogin
+ });
+ $state.go('login', {})
} else {
toastr.error('新密码两次输入不一致', "错误");
}
}
- $scope.updateDefaultShowStyle = function (showStyle) {
- console.log(showStyle)
- var parmes = {
- showStyle: showStyle,
- };
- bookmarkService.updateShowStyle(parmes)
- .then((data) => {
- if (data.retCode == 0) {
- toastr.success('书签默认显示风格配置更新成功', "提示");
- } else {
- toastr.error('书签默认显示风格配置。错误信息:' + data.msg, "错误");
- }
- })
- .catch((err) => {
- toastr.error('书签默认显示风格配置。错误信息:' + JSON.stringify(err), "错误");
- });
- }
-
-
- $scope.quickKey = function (key) {
+ $scope.quickKey = async function (key) {
key = key.toUpperCase();
console.log('key = ', key);
if (!(key >= 'A' && key <= 'Z')) {
@@ -170,7 +73,7 @@ app.controller('settingsCtr', ['$scope', '$stateParams', '$filter', '$state', '$
});
}
- $scope.addQuickUrl = function () {
+ $scope.addQuickUrl = async function () {
if ($scope.url == '' || $scope.key == '') {
toastr.warning('快捷键或者网站地址为空!', "警告");
}
@@ -208,35 +111,20 @@ app.controller('settingsCtr', ['$scope', '$stateParams', '$filter', '$state', '$
$scope.key = '';
}
- $scope.delUrl = function (key) {
+ $scope.delUrl = async function (key) {
delete $scope.quickUrl[key];
saveQuickUrl();
}
- $scope.jumpCommit = function (url) {
- $window.open(url, '_blank');
- }
-
- $scope.exportBookmark = function () {
+ $scope.exportBookmark = async function () {
var userId = $scope.user && $scope.user.id;
if (userId) {
- // toastr.warning('功能正在开发中,敬请期待......', '提示');
- // return;
$window.open("api/download?userId=" + userId + "&type=exportbookmark");
} else {
toastr.warning('用户信息无法获取到,请尝试按刷新网页再尝试!', '提示');
}
}
- function updateShowStyle(showStyle) {
- setTimeout(function () {
- if (showStyle) {
- $('.js-default-show-style' + ' .radio.checkbox').checkbox('set unchecked');
- $('.js-radio-default-' + showStyle).checkbox('set checked');
- }
- }, 100)
- }
-
setTimeout(function () {
$("#fileuploader").uploadFile({
url: "/api/uploadBookmarkFile",
@@ -265,24 +153,18 @@ app.controller('settingsCtr', ['$scope', '$stateParams', '$filter', '$state', '$
index: dataService.LoginIndexSettings
});
- function saveQuickUrl() {
- var parmes = {
- quickUrl: JSON.stringify($scope.quickUrl),
- };
- bookmarkService.updateQuickUrl(parmes)
- .then((data) => {
- if (data.retCode == 0) {
- toastr.success('全局快捷键更新成功', "提示");
- pubSubService.publish('Settings.quickUrl', {
- quickUrl: $scope.quickUrl
- });
- } else {
- toastr.error('全局快捷键更新失败。错误信息:' + data.msg, "错误");
- }
- })
- .catch((err) => {
- toastr.error('全局快捷键更新失败。错误信息:' + JSON.stringify(err), "错误");
- });
+ async function saveQuickUrl() {
+ await post("updateUser", { quickUrl: JSON.stringify($scope.quickUrl) });
+ toastr.success('全局快捷键更新成功', "提示");
+ }
+
+ function objKeySort(obj) {
+ var newkey = Object.keys(obj).sort();
+ var newObj = {};
+ for (var i = 0; i < newkey.length; i++) {
+ newObj[newkey[i]] = obj[newkey[i]];
+ }
+ return newObj;//返回排好序的新对象
}
dataService.transition('.js-segment-settings');
diff --git a/www/scripts/controllers/tags-controller.js b/www/scripts/controllers/tags-controller.js
index 0348c82..8d40770 100644
--- a/www/scripts/controllers/tags-controller.js
+++ b/www/scripts/controllers/tags-controller.js
@@ -1,4 +1,4 @@
-app.controller('tagsCtr', ['$scope', '$filter', '$state', '$window', '$stateParams', '$timeout', '$document', 'ngDialog', 'bookmarkService', 'pubSubService', 'dataService', function ($scope, $filter, $state, $window, $stateParams, $timeout, $document, ngDialog, bookmarkService, pubSubService, dataService) {
+app.controller('tagsCtr', ['$scope', '$filter', '$state', '$window', '$stateParams', '$timeout', '$document', 'ngDialog', 'pubSubService', 'dataService', function ($scope, $filter, $state, $window, $stateParams, $timeout, $document, ngDialog, pubSubService, dataService) {
console.log("Hello tagsCtr...", $stateParams);
if (dataService.smallDevice()) {
$window.location = "http://m.mybookmark.cn/#/tags";
@@ -119,33 +119,23 @@ app.controller('tagsCtr', ['$scope', '$filter', '$state', '$window', '$statePara
});
}
- $scope.confirmDelBookmark = function (bookmarkId) {
- var params = {
- id: bookmarkId
- }
+ $scope.confirmDelBookmark = async function (id) {
ngDialog.close(dialog);
- bookmarkService.delBookmark(params)
- .then((data) => {
- $("#" + bookmarkId).transition({
- animation: dataService.animation(),
- duration: 500,
- onComplete: function () {
- $("#" + bookmarkId).remove();
- }
- });
- // 更新分类里面含有书签的数量
- $scope.tags.forEach((t1) => {
- $scope.waitDelBookmark.tags.forEach((t2) => {
- if (t1.id == t2.id) {
- t1.bookmarkCount--;
- }
- })
- })
- toastr.success($scope.waitDelBookmark.title + ' 书签删除成功!', "提示");
- })
- .catch((err) => {
- toastr.error($scope.waitDelBookmark.title + ' 书签删除失败!错误提示:' + JSON.stringify(err), "提示");
- });
+ await post("delBookmark", { id })
+ $("#" + id).transition({
+ animation: dataService.animation(),
+ duration: 500,
+ onComplete: function () {
+ $("#" + id).remove();
+ }
+ });
+
+ // 更新分类里面含有书签的数量
+ $scope.tags.forEach((tag) => {
+ if (tag.id == $scope.waitDelBookmark.tagId) {
+ tag.bookmarkCount--;
+ }
+ })
}
$scope.editBookmark = function (id) {
@@ -193,49 +183,31 @@ app.controller('tagsCtr', ['$scope', '$filter', '$state', '$window', '$statePara
tag.edit = true;
}
- $scope.updateTagShow = function (tag, show) {
- var params = {
- id: tag.id,
- show: show,
- }
- bookmarkService.updateTagShow(params)
- .then((data) => {
- if (data.retCode == 0) {
- toastr.success(tag.name + ' 更新成功!', "提示");
- tag.show = show;
- } else {
- toastr.error(tag.name + ' 更新失败!错误提示:' + data.msg, "提示");
- }
- })
- .catch((err) => {
- toastr.error(tag.name + ' 更新失败!错误提示:' + err, "提示");
- });
+ $scope.updateTagShow = async function (tag, show) {
+ await post("updateTag", { id: tag.id, show });
+ toastr.success(tag.name + ' 更新成功!', "提示");
+ $timeout(() => {
+ tag.show = show;
+ });
}
- $scope.updateTag = function (tag) {
+ $scope.updateTag = async function (tag) {
if (tag.name == tag.oldName) {
toastr.warning('您没有编辑分类', "警告");
- return;
- }
- tag.edit = false;
- var params = {
- id: tag.id,
- name: tag.name,
- }
+ } else {
+ tag.edit = false;
+ var params = {
+ id: tag.id,
+ name: tag.name,
+ }
- bookmarkService.updateTagName(params)
- .then((data) => {
- if (data.retCode == 0) {
- toastr.success(tag.name + ' 更新成功!', "提示");
- } else {
- toastr.error(tag.name + ' 更新失败!错误提示:' + data.msg, "提示");
- $scope.backTag(tag);
- }
- })
- .catch((err) => {
- toastr.error(tag.name + ' 更新失败!错误提示:' + err, "提示");
+ try {
+ await post('updateTag', params);
+ toastr.success(tag.name + ' 更新成功!', "提示");
+ } catch (error) {
$scope.backTag(tag);
- });
+ }
+ }
}
$scope.delTag = function (tag) {
@@ -248,43 +220,31 @@ app.controller('tagsCtr', ['$scope', '$filter', '$state', '$window', '$statePara
});
}
- $scope.confirmDelTag = function (tagId, tagName) {
+ $scope.confirmDelTag = async function (id, tagName) {
ngDialog.close(dialog);
- var params = {
- del: (tagName == '未分类' || tagName == "收藏") ? false : true,
- id: tagId,
- }
- bookmarkService.delTag(params)
- .then((data) => {
- if (data.retCode == 0) {
- toastr.success('[ ' + tagName + ' ]分类删除成功!', "提示");
- var index = -1;
- $scope.tags.forEach((tag, i) => {
- if (tag.id == tagId) {
- index = i;
+ if (tagName == '未分类' || tagName == "收藏") {
+ toastr.error('默认分类不允许删除', "提示");
+ } else {
+ await post("delTag", { id });
+
+ let index = 0;
+ for (const tag of $scope.tags) {
+ if (tag.id == id) {
+ $("#tag" + id).transition({
+ animation: dataService.animation(),
+ duration: 500,
+ onComplete: function () {
+ $("#tag" + id).remove();
+ $scope.tags.splice(index, 1);
}
- })
- if (index !== -1 && tagName != '未分类' && tagName != "收藏") {
- $("#tag" + tagId).transition({
- animation: dataService.animation(),
- duration: 500,
- onComplete: function () {
- $("#tag" + tagId).remove();
- $scope.tags.splice(index, 1);
- }
- });
- } else {
- getTags();
- }
- } else {
- toastr.error('[ ' + tagName + ' ]分类删除失败!' + data.msg, "提示");
- getTags();
+ });
+ break;
}
- })
- .catch((err) => {
- toastr.error('分类删除失败!错误提示:' + JSON.stringify(err), "提示");
- getTags();
- });
+ index++;
+ }
+
+ getTags();
+ }
}
$scope.showAddTag = function () {
@@ -301,7 +261,7 @@ app.controller('tagsCtr', ['$scope', '$filter', '$state', '$window', '$statePara
}
}
- $scope.addTag = function (tag) {
+ $scope.addTag = async function (tag) {
console.log(tag);
if ($scope.tags.length >= 30) {
toastr.error('标签个数总数不能超过30个!不允许再添加新分类,如有需求,请联系管理员。', "提示");
@@ -319,17 +279,7 @@ app.controller('tagsCtr', ['$scope', '$filter', '$state', '$window', '$statePara
if (tag) {
ngDialog.close(dialog);
-
- var tags = [];
- tags.push(tag);
- bookmarkService.addTags(tags)
- .then((data) => {
- toastr.success('[ ' + tag + ' ]插入分类成功!将自动更新分类信息
注意:分类页面只有分类下面有书签才显示分类', "提示");
- getTags();
- })
- .catch((err) => {
- toastr.warning('[ ' + tag + ' ]插入分类失败:' + JSON.stringify(err), "提示");
- });
+ await post("addTag", { name: tag })
} else {
toastr.warning('您可能没有输入分类或者输入的分类有误', "提示");
}
@@ -345,41 +295,27 @@ app.controller('tagsCtr', ['$scope', '$filter', '$state', '$window', '$statePara
$scope.tags.forEach((tag, index) => {
$scope.tagsIndex[index] = {
id: tag.id,
- index: index,
+ sort: index,
}
})
- console.log('storeTagIndex');
}
- $scope.updateTagIndex = function () {
+ $scope.updateTagIndex = async function () {
// 要开个timer,因为释放鼠标模型还没更新
- setTimeout(function () {
- var needUpdate = false;
- for (var i = 0; i < $scope.tags.length; i++) {
- if ($scope.tags[i].id != $scope.tagsIndex[i].id) {
+ setTimeout(async () => {
+ let needUpdate = false;
+ for (let index = 0; index < $scope.tags.length; index++) {
+ if ($scope.tags[index].id != $scope.tagsIndex[index].id) {
needUpdate = true;
}
- $scope.tagsIndex[i] = {
- id: $scope.tags[i].id,
- index: i,
+ $scope.tagsIndex[index] = {
+ id: $scope.tags[index].id,
+ sort: index,
}
}
if (needUpdate) {
- bookmarkService.updateTagsIndex($scope.tagsIndex)
- .then((data) => {
- if (data.retCode == 0) {
- toastr.success('分类排序更新成功!', "提示");
- } else {
- toastr.error('分类排序更新失败!', "提示");
- getTags();
- }
- })
- .catch((err) => {
- toastr.error('分类排序更新失败!错误提示:' + JSON.stringify(err), "提示");
- getTags();
- });
+ await post('updateTagSort', { tags: $scope.tagsIndex });
}
- console.log('updateTagIndex needUpdate = ' + needUpdate)
}, 300)
}
@@ -454,18 +390,12 @@ app.controller('tagsCtr', ['$scope', '$filter', '$state', '$window', '$statePara
if (bookmark.id == data.id) {
bookmark.title = data.title;
bookmark.url = data.url;
- bookmark.tags = data.tags;
bookmark.description = data.description;
find = true;
- // if ($scope.order[bookmark.type - 1]) {
- // dataService.transition('#' + bookmark.id, {
- // duration: 1000,
- // });
- // }
}
})
if (!find) {
- if (data.tags.map((tag) => tag.id).indexOf($scope.currentTagId) >= 0) {
+ if ($scope.tags.map((tag) => tag.id).indexOf($scope.currentTagId) >= 0) {
if (!$scope.editMode) {
$scope.getBookmarks(null, null, null);
}
diff --git a/www/views/menus.html b/www/views/menus.html
index d6cdef5..f0acd71 100644
--- a/www/views/menus.html
+++ b/www/views/menus.html
@@ -13,9 +13,6 @@
{{ item.d}}
-
| - 用户活跃度排名 - | -|||
|---|---|---|---|
| 用户名 | -邮箱 | -注册时间 | -最后登陆 | -
| {{ activeUser.username }} | -{{ activeUser.email }} | -{{ activeUser.created_at }} | -{{ activeUser.last_login }} | -