diff --git a/public/js/app/api.js b/public/js/app/api.js index 082dfa58..ba06e48d 100644 --- a/public/js/app/api.js +++ b/public/js/app/api.js @@ -6,6 +6,7 @@ var Api = { loading: Loading, gui: gui, onClose: onClose, + switchToLoginWhenNoUser: switchToLoginWhenNoUser, reloadApp: reloadApp, isMac: isMac(), nodeFs: NodeFs, diff --git a/public/js/common.js b/public/js/common.js index 7996c55c..9274f4f3 100644 --- a/public/js/common.js +++ b/public/js/common.js @@ -1503,9 +1503,7 @@ function goToMainPage() { win.loadUrl('file://' + __dirname + '/note.html?from=login'); } -function switchAccount() { - SyncService.stop(); - // location.href = 'login.html'; +function _switchAccount() { var BrowserWindow = gui.remote.require('browser-window'); if(isMac()) { var win = new BrowserWindow({ width: 278, height: 326, show: true, frame: false, resizable: false }); @@ -1516,6 +1514,19 @@ function switchAccount() { } gui.getCurrentWindow().close(); } +// 添加用户 +function switchAccount() { + onClose(function () { + _switchAccount(); + }); +} + +// 当没有用户时, 切换之 +function switchToLoginWhenNoUser() { + Server.close(function () { + _switchAccount(); + }); +} // 没有一处调用 function commonCmd(e) { @@ -1602,29 +1613,60 @@ var Loading = { $msg: $('#loadingDialogBodyMsg'), // option {hasProgress: true, onClose: function} inited: false, - setMsg: function (msg) { + setMsg: function (msg, showLoading) { + var me = this; this.$msg.html(msg); + if (showLoading === undefined) { + showLoading = true; + } + if (showLoading) { + me.$loadingDialog.removeClass('hide-loading'); + } + else { + me.$loadingDialog.addClass('hide-loading'); + } }, setProgressRate: function (msg) { this.$progressRate.html(msg); }, + + /** + * [show description] + * @param {[type]} msg [description] + * @param {[type]} option { + * 'hasProgress': false, 是否有进度 + * 'hideClose': false, // 默认为false, 是否隐藏close + * } + * @return {[type]} [description] + */ show: function(msg, option) { option = option || {}; msg || (msg = getMsg("loading...")); this.$msg.html(msg); + if (option.isLarge) { this.$loadingDialog.find('.modal-dialog').addClass('modal-large'); } else { this.$loadingDialog.find('.modal-dialog').addClass('modal-large'); } + this.$loadingDialog.modal({backdrop: 'static', keyboard: true}); + if (option.hasProgress) { this.$loadingDialog.addClass('has-progress'); } else { this.$loadingDialog.removeClass('has-progress'); } + + if (option.hideClose) { + this.$loadingDialog.addClass('hide-close'); + } + else { + this.$loadingDialog.removeClass('hide-close'); + } + this.onClose = option.onClose; if (!this.inited) { this.init(); diff --git a/public/plugins/accounts/plugin.js b/public/plugins/accounts/plugin.js index 9963b94a..c003011b 100644 --- a/public/plugins/accounts/plugin.js +++ b/public/plugins/accounts/plugin.js @@ -1,7 +1,9 @@ /** * * 帐户管理 - * + * + * @author life life@leante.com + * @date 2015/11/21 */ var async; @@ -18,20 +20,40 @@ define(function() { "Yes": "是", "No": "否", "DB Optimization": "数据库优化", - "Open DB Dir": "打开数据库目录", - "Open Images/Attachs Dir": "打开图片附件目录", - "Delete": "删除", + "Open Dir": "打开目录", + "Data": "数据", "Options": "操作", "Current": "当前", + "Delete": "删除", + "Close": "关闭", + + "Optimizing": "正在优化", + "Completed": "优化完成", - "Data": "数据", - "Open Dir": "打开目录", "Error": "错误", "No such account": "无该帐户", - + "Are you sure, it can't be recovered after it has been deleted": "确定要删除该帐户? 本地的数据将彻底删除", }, 'zh-hk': { - 'Accounts': '帐户管理', + 'Accounts': '帳戶管理', + "Username": "用戶名", + "Is Local": "本地帳戶", + "Yes": "是", + "No": "否", + "DB Optimization": "數據庫優化", + "Open Dir": "打開目錄", + "Data": "數據", + "Options": "操作", + "Current": "當前", + "Delete": "刪除", + "Close": "關閉", + + "Optimizing": "正在優化", + "Completed": "優化完成", + + "Error": "錯誤", + "No such account": "無該帳戶", + "Are you sure, it can't be recovered after it has been deleted": "確定要刪除該帳戶? 本地的數據將徹底刪除", } }, @@ -88,7 +110,7 @@ define(function() { @@ -137,14 +159,16 @@ define(function() { Api.gui.Shell.showItemInFolder(Api.userService.getUserImagesPath(userId)); }, 'delete': function (userId, $targetBtn) { - me.deleteUser(userId); - - $targetBtn.closest('tr').remove(); + me.deleteUser(userId, function (ok) { + if (ok) { + $targetBtn.closest('tr').remove(); + } + }); } }; // 事件 - me.tbody.on('click', 'a', function () { + me.tbody.on('click', '.op', function () { var $this = $(this); var userId = $this.closest('tr').data('id'); var option = $this.data('op'); @@ -165,7 +189,10 @@ define(function() { return size.toFixed(2) + unit; }, - renderUser: function(user) { + userLength: 0, + curUser: null, + + renderUser: function(user, renderToExists) { var me = this; var username = user.Username; if (user.IsActive) { @@ -174,10 +201,17 @@ define(function() { if (user.Email) { username += '
' + user.Email + ''; } - var tr = '' + username + ''; + + var tr = '' + username + ''; + tr += '' + (user.IsLocal ? me.getMsg('Yes') : me.getMsg('No')) + ''; - var disabled = user.IsActive ? 'disabled="disabled"' : ''; + // 当用户只有一个时, 也可以删除自己 + var disabled = user.IsActive && me.userLength > 1 ? 'disabled="disabled"' : ''; + + if (user.IsActive) { + me.curUser = user; + } // 得到用户的数据统计 var userStats = Api.userService.getUserDataStats(user); @@ -185,26 +219,35 @@ define(function() { var dataTd = ''; tr += '' + dataTd + ''; var options = '
' - + '' + + '' + '
'; - tr += '' + options + ''; - return tr; + tr += '' + options + ''; + + if (renderToExists) { + me.tbody.find('[data-id="' + user.UserId + '"]').html(tr); + return; + } + + var trContainer = '' + + tr + + ''; + return trContainer; }, renderUsers: function (users) { @@ -222,6 +265,7 @@ define(function() { me.dialog.modal('show'); Api.userService.getAllUsers(function (users) { + me.userLength = users.length; me.renderUsers(users); }); }, @@ -255,7 +299,7 @@ define(function() { // 2. 将数据库读写合并 dbOptimization: function (userId) { var me = this; - Api.loading.show(); + Api.loading.show('', {hideClose: true}); Api.userService.getUser(userId, function (user) { if (!user) { Api.gui.dialog.showErrorBox(me.getMsg("Error"), me.getMsg("No such account")); @@ -267,7 +311,9 @@ define(function() { if (user.HasDB) { me.compactDatafile(); Api.loading.hide(2000); - Api.loading.setMsg('优化完成'); + Api.loading.setMsg(me.getMsg('Completed'), false); + + me.renderUser(user, true); return; } @@ -278,13 +324,14 @@ define(function() { me.migrateAllDBs(userId, function (ok) { // 迁移成功后, 更新HasDB Api.userService.setUserHasDB(userId, function () { - Api.loading.setMsg('优化完成'); + Api.loading.setMsg(me.getMsg('Completed'), false); Api.loading.hide(2000); + + me.renderUser(user, true); }); }, function (msg) { - Api.loading.setMsg(msg); + Api.loading.setMsg(msg, false); }); - }); }, @@ -388,8 +435,8 @@ define(function() { // OK, 为每个表进行迁移 async.eachSeries(names, function(name, cb) { - msgCallbac('正在优化 ' + name); - console.log('正在优化 ' + name); + msgCallbac(me.getMsg('Optimizing') + ' ' + name); + // console.log('正在优化 ' + name); if (name === 'noteHistories') { cb(); @@ -398,11 +445,11 @@ define(function() { me.migrateEach(userId, sourceDb, distDb, name, function(ok) { if (ok) { - console.log(name + ' Over'); - msgCallbac(name + ' 优化完成'); + // console.log(name + ' Over'); + msgCallbac(name + ' ' + me.getMsg('Completed')); } else { - console.log(name + ' 迁移失败'); + // console.log(name + ' 迁移失败'); } cb(); }); @@ -514,20 +561,38 @@ define(function() { }, // 删除用户 - // TODO 删除用户后, 要发事件, 通过menu更新切换账户的列表 - deleteUser: function(userId) { + deleteUser: function(userId, callback) { var me = this; if (confirm(me.getMsg("Are you sure, it can't be recovered after it has been deleted"))) { - Api.loading.show(); + + Api.loading.show('', {hideClose: true}); + Api.userService.getUser(userId, function (user) { me._deleteUser(user, function() { Api.trigger('deleteUser'); - Api.loading.setMsg(me.getMsg('Deleted')); + Api.loading.setMsg(me.getMsg('Deleted'), false); Api.loading.hide(2000); + + callback(true); + + // 当前是活跃用户删除的, 回到登录页 + if (user.IsActive) { + Api.switchToLoginWhenNoUser(); + return; + } + + me.userLength--; + // 当只有一个用户时, 重新renderActive行, 可以删除 + if (me.userLength == 1) { + me.renderUser(me.curUser, true); + } }); }); } + else { + callback(false); + } } }; diff --git a/public/plugins/accounts/plugin.json b/public/plugins/accounts/plugin.json index 79cc45b5..9518aad1 100644 --- a/public/plugins/accounts/plugin.json +++ b/public/plugins/accounts/plugin.json @@ -1,15 +1,15 @@ { - "name": "langs", + "name": "accounts", "author": "life", "authorUrl": "http://life.leanote.com", - "desc": "语言", + "desc": "帐户管理", "langs": { "en-us": { - "pluginName": "Langs", + "pluginName": "Accounts", "pluginDesc": "" }, "zh-cn": { - "pluginName": "设置语言", + "pluginName": "帐户管理", "pluginDesc": "" } } diff --git a/public/themes/basic.less b/public/themes/basic.less index 0d6a22b6..c8ad709b 100644 --- a/public/themes/basic.less +++ b/public/themes/basic.less @@ -1878,6 +1878,18 @@ img::selection { } } + &.hide-loading { + img { + display: none; + } + } + + &.hide-close { + .close { + display: none; + } + } + button { margin: 5px; font-size: 14px; diff --git a/public/themes/default.css b/public/themes/default.css index f709961c..c1171644 100644 --- a/public/themes/default.css +++ b/public/themes/default.css @@ -1852,6 +1852,12 @@ img::selection { #loadingDialog.has-progress .progress { display: block; } +#loadingDialog.hide-loading img { + display: none; +} +#loadingDialog.hide-close .close { + display: none; +} #loadingDialog button { margin: 5px; font-size: 14px;