mirror of
https://github.com/leanote/desktop-app.git
synced 2025-10-19 01:54:02 +00:00
帐户管理, 国际化语言
This commit is contained in:
@@ -6,6 +6,7 @@ var Api = {
|
|||||||
loading: Loading,
|
loading: Loading,
|
||||||
gui: gui,
|
gui: gui,
|
||||||
onClose: onClose,
|
onClose: onClose,
|
||||||
|
switchToLoginWhenNoUser: switchToLoginWhenNoUser,
|
||||||
reloadApp: reloadApp,
|
reloadApp: reloadApp,
|
||||||
isMac: isMac(),
|
isMac: isMac(),
|
||||||
nodeFs: NodeFs,
|
nodeFs: NodeFs,
|
||||||
|
@@ -1503,9 +1503,7 @@ function goToMainPage() {
|
|||||||
win.loadUrl('file://' + __dirname + '/note.html?from=login');
|
win.loadUrl('file://' + __dirname + '/note.html?from=login');
|
||||||
}
|
}
|
||||||
|
|
||||||
function switchAccount() {
|
function _switchAccount() {
|
||||||
SyncService.stop();
|
|
||||||
// location.href = 'login.html';
|
|
||||||
var BrowserWindow = gui.remote.require('browser-window');
|
var BrowserWindow = gui.remote.require('browser-window');
|
||||||
if(isMac()) {
|
if(isMac()) {
|
||||||
var win = new BrowserWindow({ width: 278, height: 326, show: true, frame: false, resizable: false });
|
var win = new BrowserWindow({ width: 278, height: 326, show: true, frame: false, resizable: false });
|
||||||
@@ -1516,6 +1514,19 @@ function switchAccount() {
|
|||||||
}
|
}
|
||||||
gui.getCurrentWindow().close();
|
gui.getCurrentWindow().close();
|
||||||
}
|
}
|
||||||
|
// 添加用户
|
||||||
|
function switchAccount() {
|
||||||
|
onClose(function () {
|
||||||
|
_switchAccount();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// 当没有用户时, 切换之
|
||||||
|
function switchToLoginWhenNoUser() {
|
||||||
|
Server.close(function () {
|
||||||
|
_switchAccount();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
// 没有一处调用
|
// 没有一处调用
|
||||||
function commonCmd(e) {
|
function commonCmd(e) {
|
||||||
@@ -1602,29 +1613,60 @@ var Loading = {
|
|||||||
$msg: $('#loadingDialogBodyMsg'),
|
$msg: $('#loadingDialogBodyMsg'),
|
||||||
// option {hasProgress: true, onClose: function}
|
// option {hasProgress: true, onClose: function}
|
||||||
inited: false,
|
inited: false,
|
||||||
setMsg: function (msg) {
|
setMsg: function (msg, showLoading) {
|
||||||
|
var me = this;
|
||||||
this.$msg.html(msg);
|
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) {
|
setProgressRate: function (msg) {
|
||||||
this.$progressRate.html(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) {
|
show: function(msg, option) {
|
||||||
option = option || {};
|
option = option || {};
|
||||||
msg || (msg = getMsg("loading..."));
|
msg || (msg = getMsg("loading..."));
|
||||||
this.$msg.html(msg);
|
this.$msg.html(msg);
|
||||||
|
|
||||||
if (option.isLarge) {
|
if (option.isLarge) {
|
||||||
this.$loadingDialog.find('.modal-dialog').addClass('modal-large');
|
this.$loadingDialog.find('.modal-dialog').addClass('modal-large');
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
this.$loadingDialog.find('.modal-dialog').addClass('modal-large');
|
this.$loadingDialog.find('.modal-dialog').addClass('modal-large');
|
||||||
}
|
}
|
||||||
|
|
||||||
this.$loadingDialog.modal({backdrop: 'static', keyboard: true});
|
this.$loadingDialog.modal({backdrop: 'static', keyboard: true});
|
||||||
|
|
||||||
if (option.hasProgress) {
|
if (option.hasProgress) {
|
||||||
this.$loadingDialog.addClass('has-progress');
|
this.$loadingDialog.addClass('has-progress');
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
this.$loadingDialog.removeClass('has-progress');
|
this.$loadingDialog.removeClass('has-progress');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (option.hideClose) {
|
||||||
|
this.$loadingDialog.addClass('hide-close');
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
this.$loadingDialog.removeClass('hide-close');
|
||||||
|
}
|
||||||
|
|
||||||
this.onClose = option.onClose;
|
this.onClose = option.onClose;
|
||||||
if (!this.inited) {
|
if (!this.inited) {
|
||||||
this.init();
|
this.init();
|
||||||
|
@@ -2,6 +2,8 @@
|
|||||||
*
|
*
|
||||||
* 帐户管理
|
* 帐户管理
|
||||||
*
|
*
|
||||||
|
* @author life life@leante.com
|
||||||
|
* @date 2015/11/21
|
||||||
*/
|
*/
|
||||||
var async;
|
var async;
|
||||||
|
|
||||||
@@ -18,20 +20,40 @@ define(function() {
|
|||||||
"Yes": "是",
|
"Yes": "是",
|
||||||
"No": "否",
|
"No": "否",
|
||||||
"DB Optimization": "数据库优化",
|
"DB Optimization": "数据库优化",
|
||||||
"Open DB Dir": "打开数据库目录",
|
"Open Dir": "打开目录",
|
||||||
"Open Images/Attachs Dir": "打开图片附件目录",
|
"Data": "数据",
|
||||||
"Delete": "删除",
|
|
||||||
"Options": "操作",
|
"Options": "操作",
|
||||||
"Current": "当前",
|
"Current": "当前",
|
||||||
|
"Delete": "删除",
|
||||||
|
"Close": "关闭",
|
||||||
|
|
||||||
|
"Optimizing": "正在优化",
|
||||||
|
"Completed": "优化完成",
|
||||||
|
|
||||||
"Data": "数据",
|
|
||||||
"Open Dir": "打开目录",
|
|
||||||
"Error": "错误",
|
"Error": "错误",
|
||||||
"No such account": "无该帐户",
|
"No such account": "无该帐户",
|
||||||
|
"Are you sure, it can't be recovered after it has been deleted": "确定要删除该帐户? 本地的数据将彻底删除",
|
||||||
},
|
},
|
||||||
'zh-hk': {
|
'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() {
|
|||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer ">
|
<div class="modal-footer ">
|
||||||
<button type="button" class="btn btn-default upgrade-cancel-btn lang" data-dismiss="modal">Close</button>
|
<button type="button" class="btn btn-default upgrade-cancel-btn lang" data-dismiss="modal" class="lang">Close</button>
|
||||||
</div>
|
</div>
|
||||||
</div><!-- /.modal-content -->
|
</div><!-- /.modal-content -->
|
||||||
</div><!-- /.modal-dialog -->
|
</div><!-- /.modal-dialog -->
|
||||||
@@ -137,14 +159,16 @@ define(function() {
|
|||||||
Api.gui.Shell.showItemInFolder(Api.userService.getUserImagesPath(userId));
|
Api.gui.Shell.showItemInFolder(Api.userService.getUserImagesPath(userId));
|
||||||
},
|
},
|
||||||
'delete': function (userId, $targetBtn) {
|
'delete': function (userId, $targetBtn) {
|
||||||
me.deleteUser(userId);
|
me.deleteUser(userId, function (ok) {
|
||||||
|
if (ok) {
|
||||||
$targetBtn.closest('tr').remove();
|
$targetBtn.closest('tr').remove();
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// 事件
|
// 事件
|
||||||
me.tbody.on('click', 'a', function () {
|
me.tbody.on('click', '.op', function () {
|
||||||
var $this = $(this);
|
var $this = $(this);
|
||||||
var userId = $this.closest('tr').data('id');
|
var userId = $this.closest('tr').data('id');
|
||||||
var option = $this.data('op');
|
var option = $this.data('op');
|
||||||
@@ -165,7 +189,10 @@ define(function() {
|
|||||||
return size.toFixed(2) + unit;
|
return size.toFixed(2) + unit;
|
||||||
},
|
},
|
||||||
|
|
||||||
renderUser: function(user) {
|
userLength: 0,
|
||||||
|
curUser: null,
|
||||||
|
|
||||||
|
renderUser: function(user, renderToExists) {
|
||||||
var me = this;
|
var me = this;
|
||||||
var username = user.Username;
|
var username = user.Username;
|
||||||
if (user.IsActive) {
|
if (user.IsActive) {
|
||||||
@@ -174,10 +201,17 @@ define(function() {
|
|||||||
if (user.Email) {
|
if (user.Email) {
|
||||||
username += '<br /><i>' + user.Email + '</i>';
|
username += '<br /><i>' + user.Email + '</i>';
|
||||||
}
|
}
|
||||||
var tr = '<tr data-id="' + user.UserId + '"><td>' + username + '</td>';
|
|
||||||
|
var tr = '<td>' + username + '</td>';
|
||||||
|
|
||||||
tr += '<td>' + (user.IsLocal ? me.getMsg('Yes') : me.getMsg('No')) + '</td>';
|
tr += '<td>' + (user.IsLocal ? me.getMsg('Yes') : me.getMsg('No')) + '</td>';
|
||||||
|
|
||||||
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);
|
var userStats = Api.userService.getUserDataStats(user);
|
||||||
@@ -185,26 +219,35 @@ define(function() {
|
|||||||
var dataTd = '<ul class="user-data">';
|
var dataTd = '<ul class="user-data">';
|
||||||
dataTd += '<li>数据库 '
|
dataTd += '<li>数据库 '
|
||||||
+ me.fixSize(userStats.db)
|
+ me.fixSize(userStats.db)
|
||||||
+ '<a data-op="open-db-dir">' + me.getMsg('Open Dir') + '</a>'
|
+ '<a data-op="open-db-dir" class="op">' + me.getMsg('Open Dir') + '</a>'
|
||||||
+ '<a data-op="db">' + me.getMsg('DB Optimization') + '</a>'
|
+ '<a data-op="db" class="op">' + me.getMsg('DB Optimization') + '</a>'
|
||||||
+ ' </li>'
|
+ ' </li>'
|
||||||
dataTd += '<li>图片 '
|
dataTd += '<li>图片 '
|
||||||
+ me.fixSize(userStats.image)
|
+ me.fixSize(userStats.image)
|
||||||
+ '<a data-op="open-image-dir">' + me.getMsg('Open Dir') + '</a>'
|
+ '<a data-op="open-image-dir" class="op">' + me.getMsg('Open Dir') + '</a>'
|
||||||
+ ' </li>'
|
+ ' </li>'
|
||||||
dataTd += '<li>附件 '
|
dataTd += '<li>附件 '
|
||||||
+ me.fixSize(userStats.attach)
|
+ me.fixSize(userStats.attach)
|
||||||
+ '<a data-op="open-attach-dir">' + me.getMsg('Open Dir') + '</a>'
|
+ '<a data-op="open-attach-dir" class="op">' + me.getMsg('Open Dir') + '</a>'
|
||||||
+ ' </li>'
|
+ ' </li>'
|
||||||
dataTd += '</ul>';
|
dataTd += '</ul>';
|
||||||
|
|
||||||
tr += '<td>' + dataTd + '</td>';
|
tr += '<td>' + dataTd + '</td>';
|
||||||
|
|
||||||
var options = '<div class="btn-group" role="group">'
|
var options = '<div class="btn-group" role="group">'
|
||||||
+ '<button class="btn btn-danger" ' + disabled + ' data-op="delete">' + me.getMsg('Delete') + '</button>'
|
+ '<button class="op btn btn-danger" ' + disabled + ' data-op="delete">' + me.getMsg('Delete') + '</button>'
|
||||||
+ '</div>';
|
+ '</div>';
|
||||||
tr += '<td>' + options + '</td></tr>';
|
tr += '<td>' + options + '</td>';
|
||||||
return tr;
|
|
||||||
|
if (renderToExists) {
|
||||||
|
me.tbody.find('[data-id="' + user.UserId + '"]').html(tr);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var trContainer = '<tr data-id="' + user.UserId + '">'
|
||||||
|
+ tr
|
||||||
|
+ '</tr>';
|
||||||
|
return trContainer;
|
||||||
},
|
},
|
||||||
|
|
||||||
renderUsers: function (users) {
|
renderUsers: function (users) {
|
||||||
@@ -222,6 +265,7 @@ define(function() {
|
|||||||
me.dialog.modal('show');
|
me.dialog.modal('show');
|
||||||
|
|
||||||
Api.userService.getAllUsers(function (users) {
|
Api.userService.getAllUsers(function (users) {
|
||||||
|
me.userLength = users.length;
|
||||||
me.renderUsers(users);
|
me.renderUsers(users);
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
@@ -255,7 +299,7 @@ define(function() {
|
|||||||
// 2. 将数据库读写合并
|
// 2. 将数据库读写合并
|
||||||
dbOptimization: function (userId) {
|
dbOptimization: function (userId) {
|
||||||
var me = this;
|
var me = this;
|
||||||
Api.loading.show();
|
Api.loading.show('', {hideClose: true});
|
||||||
Api.userService.getUser(userId, function (user) {
|
Api.userService.getUser(userId, function (user) {
|
||||||
if (!user) {
|
if (!user) {
|
||||||
Api.gui.dialog.showErrorBox(me.getMsg("Error"), me.getMsg("No such account"));
|
Api.gui.dialog.showErrorBox(me.getMsg("Error"), me.getMsg("No such account"));
|
||||||
@@ -267,7 +311,9 @@ define(function() {
|
|||||||
if (user.HasDB) {
|
if (user.HasDB) {
|
||||||
me.compactDatafile();
|
me.compactDatafile();
|
||||||
Api.loading.hide(2000);
|
Api.loading.hide(2000);
|
||||||
Api.loading.setMsg('优化完成');
|
Api.loading.setMsg(me.getMsg('Completed'), false);
|
||||||
|
|
||||||
|
me.renderUser(user, true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -278,13 +324,14 @@ define(function() {
|
|||||||
me.migrateAllDBs(userId, function (ok) {
|
me.migrateAllDBs(userId, function (ok) {
|
||||||
// 迁移成功后, 更新HasDB
|
// 迁移成功后, 更新HasDB
|
||||||
Api.userService.setUserHasDB(userId, function () {
|
Api.userService.setUserHasDB(userId, function () {
|
||||||
Api.loading.setMsg('优化完成');
|
Api.loading.setMsg(me.getMsg('Completed'), false);
|
||||||
Api.loading.hide(2000);
|
Api.loading.hide(2000);
|
||||||
|
|
||||||
|
me.renderUser(user, true);
|
||||||
});
|
});
|
||||||
}, function (msg) {
|
}, function (msg) {
|
||||||
Api.loading.setMsg(msg);
|
Api.loading.setMsg(msg, false);
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -388,8 +435,8 @@ define(function() {
|
|||||||
|
|
||||||
// OK, 为每个表进行迁移
|
// OK, 为每个表进行迁移
|
||||||
async.eachSeries(names, function(name, cb) {
|
async.eachSeries(names, function(name, cb) {
|
||||||
msgCallbac('正在优化 ' + name);
|
msgCallbac(me.getMsg('Optimizing') + ' ' + name);
|
||||||
console.log('正在优化 ' + name);
|
// console.log('正在优化 ' + name);
|
||||||
|
|
||||||
if (name === 'noteHistories') {
|
if (name === 'noteHistories') {
|
||||||
cb();
|
cb();
|
||||||
@@ -398,11 +445,11 @@ define(function() {
|
|||||||
|
|
||||||
me.migrateEach(userId, sourceDb, distDb, name, function(ok) {
|
me.migrateEach(userId, sourceDb, distDb, name, function(ok) {
|
||||||
if (ok) {
|
if (ok) {
|
||||||
console.log(name + ' Over');
|
// console.log(name + ' Over');
|
||||||
msgCallbac(name + ' 优化完成');
|
msgCallbac(name + ' ' + me.getMsg('Completed'));
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
console.log(name + ' 迁移失败');
|
// console.log(name + ' 迁移失败');
|
||||||
}
|
}
|
||||||
cb();
|
cb();
|
||||||
});
|
});
|
||||||
@@ -514,20 +561,38 @@ define(function() {
|
|||||||
},
|
},
|
||||||
|
|
||||||
// 删除用户
|
// 删除用户
|
||||||
// TODO 删除用户后, 要发事件, 通过menu更新切换账户的列表
|
deleteUser: function(userId, callback) {
|
||||||
deleteUser: function(userId) {
|
|
||||||
var me = this;
|
var me = this;
|
||||||
if (confirm(me.getMsg("Are you sure, it can't be recovered after it has been deleted"))) {
|
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) {
|
Api.userService.getUser(userId, function (user) {
|
||||||
me._deleteUser(user, function() {
|
me._deleteUser(user, function() {
|
||||||
Api.trigger('deleteUser');
|
Api.trigger('deleteUser');
|
||||||
|
|
||||||
Api.loading.setMsg(me.getMsg('Deleted'));
|
Api.loading.setMsg(me.getMsg('Deleted'), false);
|
||||||
Api.loading.hide(2000);
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -1,15 +1,15 @@
|
|||||||
{
|
{
|
||||||
"name": "langs",
|
"name": "accounts",
|
||||||
"author": "life",
|
"author": "life",
|
||||||
"authorUrl": "http://life.leanote.com",
|
"authorUrl": "http://life.leanote.com",
|
||||||
"desc": "语言",
|
"desc": "帐户管理",
|
||||||
"langs": {
|
"langs": {
|
||||||
"en-us": {
|
"en-us": {
|
||||||
"pluginName": "Langs",
|
"pluginName": "Accounts",
|
||||||
"pluginDesc": ""
|
"pluginDesc": ""
|
||||||
},
|
},
|
||||||
"zh-cn": {
|
"zh-cn": {
|
||||||
"pluginName": "设置语言",
|
"pluginName": "帐户管理",
|
||||||
"pluginDesc": ""
|
"pluginDesc": ""
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1878,6 +1878,18 @@ img::selection {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
&.hide-loading {
|
||||||
|
img {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&.hide-close {
|
||||||
|
.close {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
button {
|
button {
|
||||||
margin: 5px;
|
margin: 5px;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
|
@@ -1852,6 +1852,12 @@ img::selection {
|
|||||||
#loadingDialog.has-progress .progress {
|
#loadingDialog.has-progress .progress {
|
||||||
display: block;
|
display: block;
|
||||||
}
|
}
|
||||||
|
#loadingDialog.hide-loading img {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
#loadingDialog.hide-close .close {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
#loadingDialog button {
|
#loadingDialog button {
|
||||||
margin: 5px;
|
margin: 5px;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
|
Reference in New Issue
Block a user