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;