Commit 65871cda authored by 周小侠's avatar 周小侠

disconnect + 修正显示连接资产信息

parent 359dfc2a
No preview for this file type
This source diff could not be displayed because it is too large. You can view the blob instead.
This diff is collapsed.
......@@ -47,13 +47,15 @@ var UserList = (function () {
this.DataStore = service_1.DataStore;
this._logger.log('LeftbarComponent.ts:UserList');
}
UserList.prototype.ngOnInit = function () {
};
UserList.prototype.ngOnInit = function () { };
UserList.prototype.selectUser = function (serverInfo, index) {
this.selectedUser = serverInfo.system_users[index];
var param = {
'assetId': serverInfo.id,
'sysUserId': this.selectedUser['id'],
'nickName': serverInfo.title,
'ip': serverInfo.ip,
'port': serverInfo.port,
};
service_1.DataStore.termlist.push(param);
service_1.DataStore.loguserlist = [];
......@@ -104,7 +106,9 @@ var LeftbarComponent = (function () {
folderOpen: "fa fa-folder-open-o"
}
},
source: { url: service_1.DataStore.leftbar },
source: {
url: service_1.DataStore.leftbar
},
activeVisible: true,
aria: true,
autoActivate: true,
......@@ -136,70 +140,67 @@ var LeftbarComponent = (function () {
if (!data.node.folder) {
if (data.node.data.system_users && data.node.data.system_users.length > 1) {
service_1.DataStore.loguserlist = data.node.data.system_users;
service_1.DataStore.loguserInfo = data.node.data;
service_1.DataStore.loguserInfo = jQuery.extent({}, data.node.data, {
'nickName': data.node.title
});
}
else {
if (data.node.data.system_users && data.node.data.system_users.length > 0) {
var param = {
'assetId': data.node.data.id,
'sysUserId': data.node.data.system_users[0].id,
'nickName': data.node.title,
'ip': data.node.data.ip,
'port': data.node.data.port,
};
service_1.DataStore.termlist.push(param);
}
}
}
},
}
});
jQuery("#left-bar").contextmenu({
delegate: "span.fancytree-title",
hide: { effect: "basic", duration: "slow" },
menu: [
{
hide: {
effect: "basic",
duration: "slow"
},
menu: [{
"title": "Cut",
"cmd": "cut",
"uiIcon": "fa fa-cut fa-size-1p3em"
},
{
}, {
"title": "Copy",
"cmd": "copy",
"uiIcon": "fa fa-copy fa-size-1p3em"
},
{
}, {
"title": "Paste",
"cmd": "paste",
"uiIcon": "fa fa-paste fa-size-1p3em",
"disabled": false
},
{
}, {
"title": "----"
},
{
}, {
"title": "Edit",
"cmd": "edit",
"uiIcon": "fa fa-edit fa-size-1p3em",
"disabled": true
},
{
}, {
"title": "Delete",
"cmd": "delete",
"uiIcon": "fa fa-trash fa-size-1p3em",
"disabled": true
},
{
}, {
"title": "More",
"uiIcon": "fa fa-caret-right fa-size-1p3em",
"children": [
{
"children": [{
"title": "Sub 1",
"cmd": "sub1"
},
{
}, {
"title": "Sub 2",
"cmd": "sub1"
}
]
}
],
}]
}],
beforeOpen: function (event, ui) {
var node = jQuery.ui.fancytree.getNode(ui.target[0]);
// Modify menu entries depending on node status
......@@ -223,8 +224,8 @@ var LeftbarComponent = (function () {
LeftbarComponent = __decorate([
core_1.Component({
selector: 'div',
template: "<div style=\"height:30px;width:100%;background-color: #00b3ee\">\n <search-bar></search-bar><select-user-panel></select-user-panel></div>",
directives: [SearchBar, UserList],
template: "<div style=\"height:30px;width:100%;background-color: #00b3ee\">\n <search-bar></search-bar></div>",
directives: [SearchBar],
}),
__metadata('design:paramtypes', [service_1.AppService, core_2.Logger])
], LeftbarComponent);
......
This diff is collapsed.
......@@ -2,15 +2,29 @@
* Created by liuzheng on 7/12/16.
*/
import {Component, OnChanges, OnInit, Input} from '@angular/core';
import {NgClass} from '@angular/common';
import {ROUTER_DIRECTIVES} from '@angular/router-deprecated';
import {Logger} from "angular2-logger/core";
import 'rxjs/Rx';
declare var jQuery:any;
import {AppService, DataStore} from './service'
import {
Component,
OnChanges,
OnInit,
Input
} from '@angular/core';
import {
NgClass
} from '@angular/common';
import {
ROUTER_DIRECTIVES
} from '@angular/router-deprecated';
import {
Logger
} from "angular2-logger/core";
import 'rxjs/Rx';
declare var jQuery: any;
import {
AppService,
DataStore
} from './service'
@Component({
selector: 'search-bar',
......@@ -20,10 +34,10 @@ import {AppService, DataStore} from './service'
})
class SearchBar implements OnChanges {
@Input() input;
q:string;
q: string;
constructor(private _appService:AppService,
private _logger:Logger) {
constructor(private _appService: AppService,
private _logger: Logger) {
this._logger.log('LeftbarComponent.ts:SearchBar');
}
......@@ -35,6 +49,7 @@ class SearchBar implements OnChanges {
this._appService.Search(this.q)
}
}
@Component({
selector: 'select-user-panel',
template: `<div class="select-user-panel" *ngIf="DataStore.loguserlist.length"><h2>选择要登录的账户</h2>
......@@ -44,45 +59,42 @@ class SearchBar implements OnChanges {
})
class UserList implements OnInit {
DataStore = DataStore;
users: Object[];
selectedUser: Object;
constructor(private _appService:AppService,
private _logger:Logger) {
DataStore = DataStore;
users: Object[];
selectedUser: Object;
constructor(private _appService: AppService,
private _logger: Logger) {
this._logger.log('LeftbarComponent.ts:UserList');
}
ngOnInit() {
}
selectUser(serverInfo, index) {
this.selectedUser = serverInfo.system_users[index];
let param = {
'assetId': serverInfo.id,
'sysUserId': this.selectedUser['id'],
};
DataStore.termlist.push(param);
DataStore.loguserlist = [];
DataStore.loguserInfo = {};
}
}
}
ngOnInit() {}
selectUser(serverInfo, index) {
this.selectedUser = serverInfo.system_users[index];
let param = {
'assetId': serverInfo.id,
'sysUserId': this.selectedUser['id'],
'nickName': serverInfo.title,
'ip': serverInfo.ip,
'port': serverInfo.port,
};
DataStore.termlist.push(param);
DataStore.loguserlist = [];
DataStore.loguserInfo = {};
}
}
@Component({
selector: 'div',
template: `<div style="height:30px;width:100%;background-color: #00b3ee">
<search-bar></search-bar><select-user-panel></select-user-panel></div>`,
directives: [SearchBar, UserList],
<search-bar></search-bar></div>`,
directives: [SearchBar],
})
export class LeftbarComponent {
DataStore = DataStore;
constructor(private _appService:AppService,
private _logger:Logger) {
constructor(private _appService: AppService,
private _logger: Logger) {
this._logger.log('LeftbarComponent.ts:LeftbarComponent');
this._logger.debug("check DataStroe.leftbar", DataStore.leftbar);
}
......@@ -117,7 +129,9 @@ export class LeftbarComponent {
folderOpen: "fa fa-folder-open-o"
}
},
source: {url: DataStore.leftbar},
source: {
url: DataStore.leftbar
},
activeVisible: true, // Make sure, active nodes are visible (expanded).
aria: true, // Enable WAI-ARIA support.
autoActivate: true, // Automatically activate a node when it is focused (using keys).
......@@ -145,83 +159,75 @@ export class LeftbarComponent {
selectMode: 3, // 1:single, 2:multi, 3:multi-hier
tabindex: "0", // Whole tree behaves as one single control
titlesTabbable: false, // Node titles can receive keyboard focus
dblclick: function (event, data) {
dblclick: function(event, data) {
console.log('leftbar dbclick', event, data);
if (!data.node.folder) {
if (data.node.data.system_users && data.node.data.system_users.length > 1) {
DataStore.loguserlist = data.node.data.system_users;
DataStore.loguserInfo = data.node.data;
DataStore.loguserInfo = jQuery.extent({}, data.node.data, {
'nickName': data.node.title
});
} else {
if (data.node.data.system_users && data.node.data.system_users.length > 0) {
let param = {
'assetId': data.node.data.id,
'sysUserId': data.node.data.system_users[0].id,
'nickName': data.node.title,
'ip': data.node.data.ip,
'port': data.node.data.port,
};
DataStore.termlist.push(param);
}
}
// DataStore.termActive = DataStore.term.push({
// "machine": data.node.data.machine,
// "nick": data.node.title
// }) - 1;
}
},
}
}
});
jQuery("#left-bar").contextmenu({
delegate: "span.fancytree-title",
hide: {effect: "basic", duration: "slow"},
menu: [
{
"title": "Cut",
"cmd": "cut",
"uiIcon": "fa fa-cut fa-size-1p3em"
},
{
"title": "Copy",
"cmd": "copy",
"uiIcon": "fa fa-copy fa-size-1p3em"
},
{
"title": "Paste",
"cmd": "paste",
"uiIcon": "fa fa-paste fa-size-1p3em",
"disabled": false
},
{
"title": "----"
},
{
"title": "Edit",
"cmd": "edit",
"uiIcon": "fa fa-edit fa-size-1p3em",
"disabled": true
},
{
"title": "Delete",
"cmd": "delete",
"uiIcon": "fa fa-trash fa-size-1p3em",
"disabled": true
},
{
"title": "More",
"uiIcon": "fa fa-caret-right fa-size-1p3em",
"children": [
{
"title": "Sub 1",
"cmd": "sub1"
},
{
"title": "Sub 2",
"cmd": "sub1"
}
]
}
],
beforeOpen: function (event, ui) {
hide: {
effect: "basic",
duration: "slow"
},
menu: [{
"title": "Cut",
"cmd": "cut",
"uiIcon": "fa fa-cut fa-size-1p3em"
}, {
"title": "Copy",
"cmd": "copy",
"uiIcon": "fa fa-copy fa-size-1p3em"
}, {
"title": "Paste",
"cmd": "paste",
"uiIcon": "fa fa-paste fa-size-1p3em",
"disabled": false
}, {
"title": "----"
}, {
"title": "Edit",
"cmd": "edit",
"uiIcon": "fa fa-edit fa-size-1p3em",
"disabled": true
}, {
"title": "Delete",
"cmd": "delete",
"uiIcon": "fa fa-trash fa-size-1p3em",
"disabled": true
}, {
"title": "More",
"uiIcon": "fa fa-caret-right fa-size-1p3em",
"children": [{
"title": "Sub 1",
"cmd": "sub1"
}, {
"title": "Sub 2",
"cmd": "sub1"
}]
}],
beforeOpen: function(event, ui) {
var node = jQuery.ui.fancytree.getNode(ui.target[0]);
// Modify menu entries depending on node status
jQuery("#left-bar").contextmenu("enableEntry", "paste", node.isFolder());
......@@ -230,7 +236,7 @@ export class LeftbarComponent {
// Activate node on right-click
node.setActive();
},
select: function (event, ui) {
select: function(event, ui) {
var node = jQuery.ui.fancytree.getNode(ui.target[0]);
alert("select " + ui.cmd + " on " + node);
}
......@@ -246,4 +252,4 @@ export class LeftbarComponent {
}
}
}
\ No newline at end of file
......@@ -102,6 +102,7 @@ var AppService = (function () {
exports.DataStore.Nav = JSON.parse(data);
});
exports.DataStore.socket.on('leftbar', function (data) {
console.log('leftbar', data);
if (data == 'changed')
vm.ReloadLeftbar();
});
......@@ -314,7 +315,12 @@ var AppService = (function () {
//
// }
AppService.prototype.TerminalConnect = function (assetData) {
console.log('--------------------', assetData);
// assetId 资产
// sysUserId 用户
// nickName 资产昵称
// ip 资产IP
// port 资产端口
console.log('assetData', assetData);
var socket = io.connect();
var vm = this;
if (ng2_cookies_1.Cookie.get("cols")) {
......@@ -331,10 +337,17 @@ var AppService = (function () {
var rows = "24";
ng2_cookies_1.Cookie.set('rows', rows, 99, '/', document.domain);
}
// var id = DataStore.term.push({
// "machine": "localhost",
// "nick": "localhost",
// "connected": true,
// "socket": socket
// }) - 1;
var id = exports.DataStore.term.push({
"machine": "localhost",
"nick": "localhost",
"machine": '' + assetData.assetId,
"nick": assetData.nickName,
"connected": true,
"closed": false,
"socket": socket
}) - 1;
exports.DataStore.termActive = id;
......@@ -347,8 +360,10 @@ var AppService = (function () {
exports.DataStore.term[id]["term"].on('title', function (title) {
document.title = title;
});
exports.DataStore.term[id]["term"].open(document.getElementById('term-' + id));
exports.DataStore.term[id]["term"].write('\x1b[31mWelcome to Jumpserver!\x1b[m\r\n');
setTimeout(function () {
exports.DataStore.term[id]["term"].open(document.getElementById('term-' + id));
exports.DataStore.term[id]["term"].write('\x1b[31mWelcome to Jumpserver!\x1b[m\r\n');
}, 0);
socket.on('connect', function () {
socket.emit('machine', assetData);
exports.DataStore.term[id]["term"].on('data', function (data) {
......@@ -396,6 +411,7 @@ var AppService = (function () {
};
AppService.prototype.TerminalDisconnect = function (i) {
exports.DataStore.term[i]["connected"] = false;
exports.DataStore.term[i]["closed"] = true;
exports.DataStore.term[i]["socket"].destroy();
exports.DataStore.term[i]["term"].write('\r\n\x1b[31mBye Bye!\x1b[m\r\n');
};
......
This diff is collapsed.
......@@ -130,6 +130,7 @@ export class AppService {
DataStore.Nav = JSON.parse(data)
});
DataStore.socket.on('leftbar', function (data) {
console.log('leftbar', data)
if (data == 'changed')
vm.ReloadLeftbar()
});
......@@ -378,7 +379,12 @@ export class AppService {
//
// }
TerminalConnect(assetData) {
console.log('--------------------', assetData);
// assetId 资产
// sysUserId 用户
// nickName 资产昵称
// ip 资产IP
// port 资产端口
console.log('assetData', assetData);
var socket = io.connect();
var vm = this;
......@@ -394,12 +400,21 @@ export class AppService {
var rows = "24";
Cookie.set('rows', rows, 99, '/', document.domain);
}
// var id = DataStore.term.push({
// "machine": "localhost",
// "nick": "localhost",
// "connected": true,
// "socket": socket
// }) - 1;
var id = DataStore.term.push({
"machine": "localhost",
"nick": "localhost",
"machine": '' + assetData.assetId,
"nick": assetData.nickName,
"connected": true,
"closed": false,
"socket": socket
}) - 1;
DataStore.termActive = id;
DataStore.term[id]["term"] = new Terminal({
cols: cols,
......@@ -411,10 +426,11 @@ export class AppService {
DataStore.term[id]["term"].on('title', function (title) {
document.title = title;
});
DataStore.term[id]["term"].open(document.getElementById('term-' + id));
DataStore.term[id]["term"].write('\x1b[31mWelcome to Jumpserver!\x1b[m\r\n');
setTimeout(function() {
DataStore.term[id]["term"].open(document.getElementById('term-' + id));
DataStore.term[id]["term"].write('\x1b[31mWelcome to Jumpserver!\x1b[m\r\n');
}, 0);
socket.on('connect', function () {
socket.emit('machine', assetData);
......@@ -465,6 +481,7 @@ export class AppService {
TerminalDisconnect(i) {
DataStore.term[i]["connected"] = false;
DataStore.term[i]["closed"] = true;
DataStore.term[i]["socket"].destroy();
DataStore.term[i]["term"].write('\r\n\x1b[31mBye Bye!\x1b[m\r\n');
}
......
......@@ -35,9 +35,9 @@ var TermComponent = (function () {
TermComponent.prototype.timer = function () {
var _this = this;
if (service_1.DataStore.termlist.length > 0) {
for (var i in service_1.DataStore.termlist)
console.log('-----------------------', service_1.DataStore.termlist[i]);
this._appService.TerminalConnect(service_1.DataStore.termlist[i]);
for (var i in service_1.DataStore.termlist) {
this._appService.TerminalConnect(service_1.DataStore.termlist[i]);
}
service_1.DataStore.termlist = [];
}
jQuery(window).trigger('resize');
......@@ -48,8 +48,28 @@ var TermComponent = (function () {
TermComponent.prototype.close = function (i) {
this._logger.debug(i);
this._appService.TerminalDisconnect(i);
service_1.DataStore.term[i]["term"].destroy();
// delete DataStore.term.splice(i, 1)
// DataStore.term[i]["term"].destroy();
service_1.DataStore.term.splice(i, 1);
this.checkActive(i);
};
TermComponent.prototype.checkActive = function (index) {
var len = service_1.DataStore.term.length;
if (len == 1) {
// 唯一一个
service_1.DataStore.termActive = 0;
}
else {
if (len == index) {
// 删了最后一个
service_1.DataStore.termActive = index - 1;
}
else if (len > index) {
service_1.DataStore.termActive = index;
}
}
};
TermComponent.prototype.setActive = function (index) {
service_1.DataStore.termActive = index;
};
TermComponent.prototype.dblclick = function () {
console.log(service_1.DataStore.term);
......@@ -57,7 +77,7 @@ var TermComponent = (function () {
TermComponent = __decorate([
core_1.Component({
selector: 'term',
template: "<div id=\"tabs\" style=\"height: 30px;width: 100%\">\n <ul>\n <li *ngFor=\"let m of DataStore.term;let i = index\"\n [ngClass]=\"{'active':i==DataStore.termActive,'disconnected':!m.connected}\"\n id=\"termnav-{{i}}\">\n <span *ngIf=\"!m.$edit\" (click)=\"DataStore.termActive=i\" (dblclick)=\"m.$edit=true;DataStore.termActive=i\">{{m.nick}}</span>\n <input *ngIf=\"m.$edit\" [(ngModel)]=\"m.nick\" autofocus (blur)=\"m.$edit=false\" (keyup.enter)=\"m.$edit=false\"/>\n <a class=\"close\" (click)=\"close(i)\" onclick=\"this.parentElement.style.display='none';\">x</a></li>\n </ul>\n</div>\n<div id=\"term\" style=\"width: 100%;height: 100%;\">\n <div id=\"term-0\" [ngClass]=\"{'hidden':DataStore.termActive!=0}\"></div>\n <div *ngFor=\"let m of DataStore.term; let i = index\" [ngClass]=\"{'hidden':i+1!=DataStore.termActive}\"\n id=\"term-{{i+1}}\"></div>\n</div>",
template: "<div id=\"tabs\" style=\"height: 30px;width: 100%\">\n <ul>\n <li *ngFor=\"let m of DataStore.term;let i = index\"\n [ngClass]=\"{'active':i==DataStore.termActive,'disconnected':!m.connected, 'hidden': m.closed}\"\n id=\"termnav-{{i}}\" (click)=\"setActive(i)\">\n <span *ngIf=\"!m.$edit\" (dblclick)=\"m.$edit=true;setActive(i)\">{{m.nick}}</span>\n <input *ngIf=\"m.$edit\" [(ngModel)]=\"m.nick\" autofocus (blur)=\"m.$edit=false\" (keyup.enter)=\"m.$edit=false\"/>\n <a class=\"close\" (click)=\"close(i)\">&times;</a></li>\n </ul>\n</div>\n<div id=\"term\" style=\"width: 100%;height: 100%;\">\n <div *ngFor=\"let m of DataStore.term;let i = index\" [ngClass]=\"{'disconnected':!m.connected, 'hidden': i!=DataStore.termActive || m.closed}\" id=\"term-{{i}}\"></div>\n</div>",
directives: [common_1.NgClass, common_1.FORM_DIRECTIVES]
}),
__metadata('design:paramtypes', [service_1.AppService, core_2.Logger])
......
{"version":3,"file":"terminal.js","sourceRoot":"","sources":["terminal.ts"],"names":[],"mappings":"AAAA;;GAEG;;;;;;;;;;;AAEH,qBAAwB,eAAe,CAAC,CAAA;AACxC,uBAA0C,iBAAiB,CAAC,CAAA;AAE5D,qBAAqB,sBAAsB,CAAC,CAAA;AAI5C,QAAQ,SAAS,CAAC,CAAA;AAGlB,wBAAoC,WAGpC,CAAC,CAH8C;AAwB/C;IAKI,uBAAoB,WAAsB,EACtB,OAAc;QADd,gBAAW,GAAX,WAAW,CAAW;QACtB,YAAO,GAAP,OAAO,CAAO;QALlC,cAAS,GAAG,mBAAS,CAAC;QAMlB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;IACvD,CAAC;IAED,gCAAQ,GAAR;QACI,mEAAmE;QACnE,IAAI,CAAC,KAAK,EAAE,CAAC;IACjB,CAAC;IAED,uCAAe,GAAf;QACI,wCAAwC;QACxC,6DAA6D;QAC7D,8DAA8D;IAClE,CAAC;IAED,6BAAK,GAAL;QAAA,iBAWC;QAVG,EAAE,CAAC,CAAC,mBAAS,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;YAChC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,mBAAS,CAAC,QAAQ,CAAC;gBAC7B,OAAO,CAAC,GAAG,CAAC,yBAAyB,EAAE,mBAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9D,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,mBAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5D,mBAAS,CAAC,QAAQ,GAAG,EAAE,CAAA;QAC3B,CAAC;QACD,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACjC,UAAU,CAAC;YACP,KAAI,CAAC,KAAK,EAAE,CAAA;QAChB,CAAC,EAAE,CAAC,CAAC,CAAA;IACT,CAAC;IAED,6BAAK,GAAL,UAAM,CAAC;QACH,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;QACvC,mBAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC;QAEpC,qCAAqC;IACzC,CAAC;IAED,gCAAQ,GAAR;QACI,OAAO,CAAC,GAAG,CAAC,mBAAS,CAAC,IAAI,CAAC,CAAA;IAC/B,CAAC;IAjEL;QAAC,gBAAS,CAAC;YACP,QAAQ,EAAE,MAAM;YAChB,QAAQ,EAAE,s7BAcP;YACH,UAAU,EAAE,CAAC,gBAAO,EAAE,wBAAe,CAAC;SACzC,CAAC;;qBAAA;IAgDF,oBAAC;AAAD,CAAC,AA7CD,IA6CC;AA7CY,qBAAa,gBA6CzB,CAAA"}
\ No newline at end of file
{"version":3,"file":"terminal.js","sourceRoot":"","sources":["terminal.ts"],"names":[],"mappings":"AAAA;;GAEG;;;;;;;;;;;AAEH,qBAAwB,eAAe,CAAC,CAAA;AACxC,uBAA0C,iBAAiB,CAAC,CAAA;AAE5D,qBAAqB,sBAAsB,CAAC,CAAA;AAI5C,QAAQ,SAAS,CAAC,CAAA;AAGlB,wBAAoC,WAGpC,CAAC,CAH8C;AAsB/C;IAKI,uBAAoB,WAAsB,EACtB,OAAc;QADd,gBAAW,GAAX,WAAW,CAAW;QACtB,YAAO,GAAP,OAAO,CAAO;QALlC,cAAS,GAAG,mBAAS,CAAC;QAMlB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;IACvD,CAAC;IAED,gCAAQ,GAAR;QACI,mEAAmE;QACnE,IAAI,CAAC,KAAK,EAAE,CAAC;IACjB,CAAC;IAED,uCAAe,GAAf;QACI,wCAAwC;QACxC,6DAA6D;QAC7D,8DAA8D;IAClE,CAAC;IAED,6BAAK,GAAL;QAAA,iBAWC;QAVG,EAAE,CAAC,CAAC,mBAAS,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;YAChC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,mBAAS,CAAC,QAAQ,CAAC,CAAA,CAAC;gBAC9B,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,mBAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5D,CAAC;YACD,mBAAS,CAAC,QAAQ,GAAG,EAAE,CAAA;QAC3B,CAAC;QACD,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACjC,UAAU,CAAC;YACP,KAAI,CAAC,KAAK,EAAE,CAAA;QAChB,CAAC,EAAE,CAAC,CAAC,CAAA;IACT,CAAC;IAED,6BAAK,GAAL,UAAM,CAAC;QACH,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;QACvC,uCAAuC;QACvC,mBAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5B,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IACxB,CAAC;IACD,mCAAW,GAAX,UAAY,KAAK;QACb,IAAI,GAAG,GAAG,mBAAS,CAAC,IAAI,CAAC,MAAM,CAAC;QAChC,EAAE,CAAA,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YACV,OAAO;YACP,mBAAS,CAAC,UAAU,GAAG,CAAC,CAAC;QAC7B,CAAC;QAAC,IAAI,CAAC,CAAC;YACJ,EAAE,CAAC,CAAC,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC;gBACf,SAAS;gBACT,mBAAS,CAAC,UAAU,GAAG,KAAK,GAAG,CAAC,CAAC;YACrC,CAAC;YAAC,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC;gBACrB,mBAAS,CAAC,UAAU,GAAG,KAAK,CAAC;YACjC,CAAC;QACL,CAAC;IACL,CAAC;IACD,iCAAS,GAAT,UAAU,KAAK;QACX,mBAAS,CAAC,UAAU,GAAG,KAAK,CAAC;IACjC,CAAC;IACD,gCAAQ,GAAR;QACI,OAAO,CAAC,GAAG,CAAC,mBAAS,CAAC,IAAI,CAAC,CAAA;IAC/B,CAAC;IA/EL;QAAC,gBAAS,CAAC;YACP,QAAQ,EAAE,MAAM;YAChB,QAAQ,EAAE,k1BAYP;YACH,UAAU,EAAE,CAAC,gBAAO,EAAE,wBAAe,CAAC;SACzC,CAAC;;qBAAA;IAgEF,oBAAC;AAAD,CAAC,AA7DD,IA6DC;AA7DY,qBAAa,gBA6DzB,CAAA"}
\ No newline at end of file
......@@ -20,17 +20,15 @@ import {AppService, DataStore} from './service'
template: `<div id="tabs" style="height: 30px;width: 100%">
<ul>
<li *ngFor="let m of DataStore.term;let i = index"
[ngClass]="{'active':i==DataStore.termActive,'disconnected':!m.connected}"
id="termnav-{{i}}">
<span *ngIf="!m.$edit" (click)="DataStore.termActive=i" (dblclick)="m.$edit=true;DataStore.termActive=i">{{m.nick}}</span>
[ngClass]="{'active':i==DataStore.termActive,'disconnected':!m.connected, 'hidden': m.closed}"
id="termnav-{{i}}" (click)="setActive(i)">
<span *ngIf="!m.$edit" (dblclick)="m.$edit=true;setActive(i)">{{m.nick}}</span>
<input *ngIf="m.$edit" [(ngModel)]="m.nick" autofocus (blur)="m.$edit=false" (keyup.enter)="m.$edit=false"/>
<a class="close" (click)="close(i)" onclick="this.parentElement.style.display='none';">x</a></li>
<a class="close" (click)="close(i)">&times;</a></li>
</ul>
</div>
<div id="term" style="width: 100%;height: 100%;">
<div id="term-0" [ngClass]="{'hidden':DataStore.termActive!=0}"></div>
<div *ngFor="let m of DataStore.term; let i = index" [ngClass]="{'hidden':i+1!=DataStore.termActive}"
id="term-{{i+1}}"></div>
<div *ngFor="let m of DataStore.term;let i = index" [ngClass]="{'disconnected':!m.connected, 'hidden': i!=DataStore.termActive || m.closed}" id="term-{{i}}"></div>
</div>`,
directives: [NgClass, FORM_DIRECTIVES]
})
......@@ -59,9 +57,9 @@ export class TermComponent {
timer() {
if (DataStore.termlist.length > 0) {
for (var i in DataStore.termlist)
console.log('-----------------------', DataStore.termlist[i]);
for (var i in DataStore.termlist){
this._appService.TerminalConnect(DataStore.termlist[i]);
}
DataStore.termlist = []
}
jQuery(window).trigger('resize');
......@@ -73,11 +71,27 @@ export class TermComponent {
close(i) {
this._logger.debug(i);
this._appService.TerminalDisconnect(i);
DataStore.term[i]["term"].destroy();
// delete DataStore.term.splice(i, 1)
// DataStore.term[i]["term"].destroy();
DataStore.term.splice(i, 1);
this.checkActive(i);
}
checkActive(index) {
var len = DataStore.term.length;
if(len == 1) {
// 唯一一个
DataStore.termActive = 0;
} else {
if (len == index) {
// 删了最后一个
DataStore.termActive = index - 1;
} else if (len > index) {
DataStore.termActive = index;
}
}
}
setActive(index) {
DataStore.termActive = index;
}
dblclick() {
console.log(DataStore.term)
}
......
0 info it worked if it ends with ok
1 verbose cli [ '/usr/local/bin/node', '/usr/local/bin/npm', 'start' ]
2 info using npm@4.0.1
3 info using node@v4.3.1
4 verbose run-script [ 'prestart', 'start', 'poststart' ]
5 info lifecycle Luna@0.0.1~prestart: Luna@0.0.1
6 silly lifecycle Luna@0.0.1~prestart: no script for prestart, continuing
7 info lifecycle Luna@0.0.1~start: Luna@0.0.1
8 verbose lifecycle Luna@0.0.1~start: unsafe-perm in lifecycle true
9 verbose lifecycle Luna@0.0.1~start: PATH: /usr/local/lib/node_modules/npm/bin/node-gyp-bin:/Users/zhouxiaoxia/workspace/sofia/luna/node_modules/.bin:/Library/Frameworks/Python.framework/Versions/3.6/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/zhouxiaoxia/Library/Python/2.7/bin/
10 verbose lifecycle Luna@0.0.1~start: CWD: /Users/zhouxiaoxia/workspace/sofia/luna
11 silly lifecycle Luna@0.0.1~start: Args: [ '-c', 'grunt && tsc && concurrently "npm run tsc:w" ' ]
12 silly lifecycle Luna@0.0.1~start: Returned: code: 2 signal: null
13 info lifecycle Luna@0.0.1~start: Failed to exec start script
14 verbose stack Error: Luna@0.0.1 start: `grunt && tsc && concurrently "npm run tsc:w" `
14 verbose stack Exit status 2
14 verbose stack at EventEmitter.<anonymous> (/usr/local/lib/node_modules/npm/lib/utils/lifecycle.js:279:16)
14 verbose stack at emitTwo (events.js:87:13)
14 verbose stack at EventEmitter.emit (events.js:172:7)
14 verbose stack at ChildProcess.<anonymous> (/usr/local/lib/node_modules/npm/lib/utils/spawn.js:40:14)
14 verbose stack at emitTwo (events.js:87:13)
14 verbose stack at ChildProcess.emit (events.js:172:7)
14 verbose stack at maybeClose (internal/child_process.js:821:16)
14 verbose stack at Process.ChildProcess._handle.onexit (internal/child_process.js:211:5)
15 verbose pkgid Luna@0.0.1
16 verbose cwd /Users/zhouxiaoxia/workspace/sofia/luna/luna
17 error Darwin 16.6.0
18 error argv "/usr/local/bin/node" "/usr/local/bin/npm" "start"
19 error node v4.3.1
20 error npm v4.0.1
21 error code ELIFECYCLE
22 error Luna@0.0.1 start: `grunt && tsc && concurrently "npm run tsc:w" `
22 error Exit status 2
23 error Failed at the Luna@0.0.1 start script 'grunt && tsc && concurrently "npm run tsc:w" '.
23 error Make sure you have the latest version of node.js and npm installed.
23 error If you do, this is most likely a problem with the Luna package,
23 error not with npm itself.
23 error Tell the author that this fails on your system:
23 error grunt && tsc && concurrently "npm run tsc:w"
23 error You can get information on how to open an issue for this project with:
23 error npm bugs Luna
23 error Or if that isn't available, you can get their info via:
23 error npm owner ls Luna
23 error There is likely additional logging output above.
24 verbose exit [ 1, true ]
......@@ -257,7 +257,30 @@ nav .nav .dropdown-content li a span {
#left-bar.hideleftbar {
left: -198px;
}
#left-bar .select-user-panel {
position: fixed;
top: 200px;
left: 50%;
width: 300px;
padding: 20px;
border: 1px solid #ddd;
border-radius: 6px;
margin-left: -150px;
line-height: 32px;
font-size: 14px;
background:#2f2a2a;
color: #efefef;;
z-index: 8000;
}
#left-bar .select-user-panel h2 {
border-bottom: 1px solid #999;
line-height: 1;
padding-bottom: 20px;
font-size: 18px;
}
#left-bar .select-user-panel .log-user {
cursor: pointer;
}
#ngdiv.hideleftbar {
left: 2px !important;
}
......@@ -329,7 +352,7 @@ span.fancytree-selected span {
.fancytree-treefocus span.fancytree-active span.fancytree-title,
.fancytree-treefocus span.fancytree-selected span.fancytree-title {
color: #fff;
background: rgb(47, 42, 42);
background: #a9a9a9;
}
span.fancytree-treefocus span.fancytree-title,
span.fancytree-active span.fancytree-title,
......@@ -496,6 +519,9 @@ span.fancytree-icon {
#tabs ul li.disconnected {
background-color: darkgray;
}
#tabs ul li.hidden {
display: none;
}
.layui-layer.layui-layer-dialog.layui-layer-prompt.layer-anim textarea {
height: 160px;
......
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This diff is collapsed.
......@@ -40,6 +40,36 @@ var SearchBar = (function () {
], SearchBar);
return SearchBar;
}());
var UserList = (function () {
function UserList(_appService, _logger) {
this._appService = _appService;
this._logger = _logger;
this.DataStore = service_1.DataStore;
this._logger.log('LeftbarComponent.ts:UserList');
}
UserList.prototype.ngOnInit = function () { };
UserList.prototype.selectUser = function (serverInfo, index) {
this.selectedUser = serverInfo.system_users[index];
var param = {
'assetId': serverInfo.id,
'sysUserId': this.selectedUser['id'],
'nickName': serverInfo.title,
'ip': serverInfo.ip,
'port': serverInfo.port,
};
service_1.DataStore.termlist.push(param);
service_1.DataStore.loguserlist = [];
service_1.DataStore.loguserInfo = {};
};
UserList = __decorate([
core_1.Component({
selector: 'select-user-panel',
template: "<div class=\"select-user-panel\" *ngIf=\"DataStore.loguserlist.length\"><h2>\u9009\u62E9\u8981\u767B\u5F55\u7684\u8D26\u6237</h2>\n <div class=\"log-user\" *ngFor=\"let user of DataStore.loguserlist; let i = index\" (click)=\"selectUser(DataStore.loguserInfo, i)\">\n {{i+1}}: {{user.name}}\n </div></div>"
}),
__metadata('design:paramtypes', [service_1.AppService, core_2.Logger])
], UserList);
return UserList;
}());
var LeftbarComponent = (function () {
function LeftbarComponent(_appService, _logger) {
this._appService = _appService;
......@@ -76,7 +106,9 @@ var LeftbarComponent = (function () {
folderOpen: "fa fa-folder-open-o"
}
},
source: { url: service_1.DataStore.leftbar },
source: {
url: service_1.DataStore.leftbar
},
activeVisible: true,
aria: true,
autoActivate: true,
......@@ -106,64 +138,69 @@ var LeftbarComponent = (function () {
dblclick: function (event, data) {
console.log('leftbar dbclick', event, data);
if (!data.node.folder) {
var param = {
'assetId': data.node.data.id,
'sysUserId': data.node.data.system_users[0].id,
};
service_1.DataStore.termlist.push(param);
if (data.node.data.system_users && data.node.data.system_users.length > 1) {
service_1.DataStore.loguserlist = data.node.data.system_users;
service_1.DataStore.loguserInfo = jQuery.extent({}, data.node.data, {
'nickName': data.node.title
});
}
else {
if (data.node.data.system_users && data.node.data.system_users.length > 0) {
var param = {
'assetId': data.node.data.id,
'sysUserId': data.node.data.system_users[0].id,
'nickName': data.node.title,
'ip': data.node.data.ip,
'port': data.node.data.port,
};
service_1.DataStore.termlist.push(param);
}
}
}
},
}
});
jQuery("#left-bar").contextmenu({
delegate: "span.fancytree-title",
hide: { effect: "basic", duration: "slow" },
menu: [
{
hide: {
effect: "basic",
duration: "slow"
},
menu: [{
"title": "Cut",
"cmd": "cut",
"uiIcon": "fa fa-cut fa-size-1p3em"
},
{
}, {
"title": "Copy",
"cmd": "copy",
"uiIcon": "fa fa-copy fa-size-1p3em"
},
{
}, {
"title": "Paste",
"cmd": "paste",
"uiIcon": "fa fa-paste fa-size-1p3em",
"disabled": false
},
{
}, {
"title": "----"
},
{
}, {
"title": "Edit",
"cmd": "edit",
"uiIcon": "fa fa-edit fa-size-1p3em",
"disabled": true
},
{
}, {
"title": "Delete",
"cmd": "delete",
"uiIcon": "fa fa-trash fa-size-1p3em",
"disabled": true
},
{
}, {
"title": "More",
"uiIcon": "fa fa-caret-right fa-size-1p3em",
"children": [
{
"children": [{
"title": "Sub 1",
"cmd": "sub1"
},
{
}, {
"title": "Sub 2",
"cmd": "sub1"
}
]
}
],
}]
}],
beforeOpen: function (event, ui) {
var node = jQuery.ui.fancytree.getNode(ui.target[0]);
// Modify menu entries depending on node status
......
{"version":3,"file":"leftbar.js","sourceRoot":"","sources":["leftbar.ts"],"names":[],"mappings":"AAAA;;GAEG;;;;;;;;;;;AAEH,qBAA0C,eAAe,CAAC,CAAA;AAG1D,qBAAqB,sBAAsB,CAAC,CAAA;AAE5C,QAAQ,SAAS,CAAC,CAAA;AAGlB,wBAAoC,WAEpC,CAAC,CAF8C;AAQ/C;IAII,mBAAoB,WAAsB,EACtB,OAAc;QADd,gBAAW,GAAX,WAAW,CAAW;QACtB,YAAO,GAAP,OAAO,CAAO;QAC9B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;IACtD,CAAC;IAED,+BAAW,GAAX,UAAY,OAAO;QACf,IAAI,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC;IACxC,CAAC;IAED,+BAAW,GAAX,UAAY,MAAM;QACd,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACnC,CAAC;IAdD;QAAC,YAAK,EAAE;;4CAAA;IAPZ;QAAC,gBAAS,CAAC;YACP,QAAQ,EAAE,YAAY;YACtB,QAAQ,EAAE,gSAEgC;SAC7C,CAAC;;iBAAA;IAiBF,gBAAC;AAAD,CAAC,AAhBD,IAgBC;AAUD;IAGI,0BAAoB,WAAsB,EACtB,OAAc;QADd,gBAAW,GAAX,WAAW,CAAW;QACtB,YAAO,GAAP,OAAO,CAAO;QAHlC,cAAS,GAAG,mBAAS,CAAC;QAIlB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;QACzD,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,mBAAS,CAAC,OAAO,CAAC,CAAC;IACrE,CAAC;IAED,mCAAQ,GAAR;QACI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;IAEtE,CAAC;IAED,0CAAe,GAAf;QACI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,sDAAsD,CAAC,CAAC;QACzE,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC;YAC1B,UAAU,EAAE,CAAC,OAAO,CAAC;YACrB,KAAK,EAAE;gBACH,GAAG,EAAE;oBACD,QAAQ,EAAE,gBAAgB;oBAC1B,gBAAgB,EAAE,sBAAsB;oBACxC,eAAe,EAAE,cAAc;oBAC/B,UAAU,EAAE,mBAAmB;oBAC/B,UAAU,EAAE,wBAAwB;oBACpC,KAAK,EAAE,eAAe;oBACtB,cAAc,EAAE,mBAAmB;oBACnC,YAAY,EAAE,mBAAmB;oBACjC,YAAY,EAAE,kBAAkB;oBAChC,MAAM,EAAE,aAAa;oBACrB,OAAO,EAAE,wBAAwB;oBACjC,sBAAsB;oBACtB,6EAA6E;oBAC7E,GAAG,EAAE,YAAY;oBACjB,OAAO,EAAE,cAAc;oBACvB,MAAM,EAAE,cAAc;oBACtB,UAAU,EAAE,qBAAqB;iBACpC;aACJ;YACD,MAAM,EAAE,EAAC,GAAG,EAAE,mBAAS,CAAC,OAAO,EAAC;YAChC,aAAa,EAAE,IAAI;YACnB,IAAI,EAAE,IAAI;YACV,YAAY,EAAE,IAAI;YAClB,YAAY,EAAE,IAAI;YAClB,UAAU,EAAE,IAAI;YAChB,eAAe,EAAE,CAAC;YAClB,QAAQ,EAAE,KAAK;YACf,UAAU,EAAE,CAAC;YACb,QAAQ,EAAE,KAAK;YACf,aAAa,EAAE,IAAI;YACnB,YAAY,EAAE,KAAK;YACnB,WAAW,EAAE,IAAI;YACjB,QAAQ,EAAE,KAAK;YACf,IAAI,EAAE,IAAI;YAEV,iCAAiC;YACjC,kCAAkC;YAClC,6CAA6C;YAC7C,QAAQ;YACR,KAAK;YACL,QAAQ,EAAE,KAAK;YACf,gBAAgB,EAAE,GAAG;YACrB,cAAc,EAAE,CAAC;YACjB,WAAW,EAAE,IAAI;YACjB,UAAU,EAAE,CAAC;YACb,QAAQ,EAAE,GAAG;YACb,cAAc,EAAE,KAAK;YACrB,QAAQ,EAAE,UAAU,KAAK,EAAE,IAAI;gBAC3B,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;gBAC5C,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;oBACpB,IAAI,KAAK,GAAG;wBACR,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;wBAC5B,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE;qBACjD,CAAC;oBACF,mBAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAKnC,CAAC;YAEL,CAAC;SACJ,CAAC,CAAC;QAEH,MAAM,CAAC,WAAW,CAAC,CAAC,WAAW,CAAC;YAC5B,QAAQ,EAAE,sBAAsB;YAChC,IAAI,EAAE,EAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAC;YACzC,IAAI,EAAE;gBACF;oBACI,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,KAAK;oBACZ,QAAQ,EAAE,yBAAyB;iBACtC;gBACD;oBACI,OAAO,EAAE,MAAM;oBACf,KAAK,EAAE,MAAM;oBACb,QAAQ,EAAE,0BAA0B;iBACvC;gBACD;oBACI,OAAO,EAAE,OAAO;oBAChB,KAAK,EAAE,OAAO;oBACd,QAAQ,EAAE,2BAA2B;oBACrC,UAAU,EAAE,KAAK;iBACpB;gBACD;oBACI,OAAO,EAAE,MAAM;iBAClB;gBACD;oBACI,OAAO,EAAE,MAAM;oBACf,KAAK,EAAE,MAAM;oBACb,QAAQ,EAAE,0BAA0B;oBACpC,UAAU,EAAE,IAAI;iBACnB;gBACD;oBACI,OAAO,EAAE,QAAQ;oBACjB,KAAK,EAAE,QAAQ;oBACf,QAAQ,EAAE,2BAA2B;oBACrC,UAAU,EAAE,IAAI;iBACnB;gBACD;oBACI,OAAO,EAAE,MAAM;oBACf,QAAQ,EAAE,iCAAiC;oBAC3C,UAAU,EAAE;wBACR;4BACI,OAAO,EAAE,OAAO;4BAChB,KAAK,EAAE,MAAM;yBAChB;wBACD;4BACI,OAAO,EAAE,OAAO;4BAChB,KAAK,EAAE,MAAM;yBAChB;qBACJ;iBACJ;aACJ;YACD,UAAU,EAAE,UAAU,KAAK,EAAE,EAAE;gBAC3B,IAAI,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;gBACrD,+CAA+C;gBAC/C,MAAM,CAAC,WAAW,CAAC,CAAC,WAAW,CAAC,aAAa,EAAE,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;gBACzE,2BAA2B;gBAE3B,+BAA+B;gBAC/B,IAAI,CAAC,SAAS,EAAE,CAAC;YACrB,CAAC;YACD,MAAM,EAAE,UAAU,KAAK,EAAE,EAAE;gBACvB,IAAI,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;gBACrD,KAAK,CAAC,SAAS,GAAG,EAAE,CAAC,GAAG,GAAG,MAAM,GAAG,IAAI,CAAC,CAAC;YAC9C,CAAC;SACJ,CAAC,CAAC;IACP,CAAC;IAED,oCAAS,GAAT;QACI,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,gBAAgB,EAAE,CAAC;IAChE,CAAC;IAED,+BAAI,GAAJ;QACI,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAA;IAC/B,CAAC;IApKL;QAAC,gBAAS,CAAC;YACP,QAAQ,EAAE,KAAK;YACf,QAAQ,EAAE,uGACsB;YAChC,UAAU,EAAE,CAAC,SAAS,CAAC;SAC1B,CAAC;;wBAAA;IAkKF,uBAAC;AAAD,CAAC,AA/JD,IA+JC;AA/JY,wBAAgB,mBA+J5B,CAAA"}
\ No newline at end of file
{"version":3,"file":"leftbar.js","sourceRoot":"","sources":["leftbar.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
......@@ -2,15 +2,29 @@
* Created by liuzheng on 7/12/16.
*/
import {Component, OnChanges, Input} from '@angular/core';
import {NgClass} from '@angular/common';
import {ROUTER_DIRECTIVES} from '@angular/router-deprecated';
import {Logger} from "angular2-logger/core";
import 'rxjs/Rx';
declare var jQuery:any;
import {AppService, DataStore} from './service'
import {
Component,
OnChanges,
OnInit,
Input
} from '@angular/core';
import {
NgClass
} from '@angular/common';
import {
ROUTER_DIRECTIVES
} from '@angular/router-deprecated';
import {
Logger
} from "angular2-logger/core";
import 'rxjs/Rx';
declare var jQuery: any;
import {
AppService,
DataStore
} from './service'
@Component({
selector: 'search-bar',
......@@ -20,10 +34,10 @@ import {AppService, DataStore} from './service'
})
class SearchBar implements OnChanges {
@Input() input;
q:string;
q: string;
constructor(private _appService:AppService,
private _logger:Logger) {
constructor(private _appService: AppService,
private _logger: Logger) {
this._logger.log('LeftbarComponent.ts:SearchBar');
}
......@@ -36,6 +50,39 @@ class SearchBar implements OnChanges {
}
}
@Component({
selector: 'select-user-panel',
template: `<div class="select-user-panel" *ngIf="DataStore.loguserlist.length"><h2>选择要登录的账户</h2>
<div class="log-user" *ngFor="let user of DataStore.loguserlist; let i = index" (click)="selectUser(DataStore.loguserInfo, i)">
{{i+1}}: {{user.name}}
</div></div>`
})
class UserList implements OnInit {
DataStore = DataStore;
users: Object[];
selectedUser: Object;
constructor(private _appService: AppService,
private _logger: Logger) {
this._logger.log('LeftbarComponent.ts:UserList');
}
ngOnInit() {}
selectUser(serverInfo, index) {
this.selectedUser = serverInfo.system_users[index];
let param = {
'assetId': serverInfo.id,
'sysUserId': this.selectedUser['id'],
'nickName': serverInfo.title,
'ip': serverInfo.ip,
'port': serverInfo.port,
};
DataStore.termlist.push(param);
DataStore.loguserlist = [];
DataStore.loguserInfo = {};
}
}
@Component({
selector: 'div',
template: `<div style="height:30px;width:100%;background-color: #00b3ee">
......@@ -46,9 +93,8 @@ class SearchBar implements OnChanges {
export class LeftbarComponent {
DataStore = DataStore;
constructor(private _appService:AppService,
private _logger:Logger) {
constructor(private _appService: AppService,
private _logger: Logger) {
this._logger.log('LeftbarComponent.ts:LeftbarComponent');
this._logger.debug("check DataStroe.leftbar", DataStore.leftbar);
}
......@@ -83,7 +129,9 @@ export class LeftbarComponent {
folderOpen: "fa fa-folder-open-o"
}
},
source: {url: DataStore.leftbar},
source: {
url: DataStore.leftbar
},
activeVisible: true, // Make sure, active nodes are visible (expanded).
aria: true, // Enable WAI-ARIA support.
autoActivate: true, // Automatically activate a node when it is focused (using keys).
......@@ -111,74 +159,75 @@ export class LeftbarComponent {
selectMode: 3, // 1:single, 2:multi, 3:multi-hier
tabindex: "0", // Whole tree behaves as one single control
titlesTabbable: false, // Node titles can receive keyboard focus
dblclick: function (event, data) {
dblclick: function(event, data) {
console.log('leftbar dbclick', event, data);
if (!data.node.folder) {
let param = {
'assetId': data.node.data.id,
'sysUserId': data.node.data.system_users[0].id,
};
DataStore.termlist.push(param);
// DataStore.termActive = DataStore.term.push({
// "machine": data.node.data.machine,
// "nick": data.node.title
// }) - 1;
}
if (data.node.data.system_users && data.node.data.system_users.length > 1) {
DataStore.loguserlist = data.node.data.system_users;
DataStore.loguserInfo = jQuery.extent({}, data.node.data, {
'nickName': data.node.title
});
} else {
if (data.node.data.system_users && data.node.data.system_users.length > 0) {
let param = {
'assetId': data.node.data.id,
'sysUserId': data.node.data.system_users[0].id,
'nickName': data.node.title,
'ip': data.node.data.ip,
'port': data.node.data.port,
};
DataStore.termlist.push(param);
}
},
}
}
}
});
jQuery("#left-bar").contextmenu({
delegate: "span.fancytree-title",
hide: {effect: "basic", duration: "slow"},
menu: [
{
"title": "Cut",
"cmd": "cut",
"uiIcon": "fa fa-cut fa-size-1p3em"
},
{
"title": "Copy",
"cmd": "copy",
"uiIcon": "fa fa-copy fa-size-1p3em"
},
{
"title": "Paste",
"cmd": "paste",
"uiIcon": "fa fa-paste fa-size-1p3em",
"disabled": false
},
{
"title": "----"
},
{
"title": "Edit",
"cmd": "edit",
"uiIcon": "fa fa-edit fa-size-1p3em",
"disabled": true
},
{
"title": "Delete",
"cmd": "delete",
"uiIcon": "fa fa-trash fa-size-1p3em",
"disabled": true
},
{
"title": "More",
"uiIcon": "fa fa-caret-right fa-size-1p3em",
"children": [
{
"title": "Sub 1",
"cmd": "sub1"
},
{
"title": "Sub 2",
"cmd": "sub1"
}
]
}
],
beforeOpen: function (event, ui) {
hide: {
effect: "basic",
duration: "slow"
},
menu: [{
"title": "Cut",
"cmd": "cut",
"uiIcon": "fa fa-cut fa-size-1p3em"
}, {
"title": "Copy",
"cmd": "copy",
"uiIcon": "fa fa-copy fa-size-1p3em"
}, {
"title": "Paste",
"cmd": "paste",
"uiIcon": "fa fa-paste fa-size-1p3em",
"disabled": false
}, {
"title": "----"
}, {
"title": "Edit",
"cmd": "edit",
"uiIcon": "fa fa-edit fa-size-1p3em",
"disabled": true
}, {
"title": "Delete",
"cmd": "delete",
"uiIcon": "fa fa-trash fa-size-1p3em",
"disabled": true
}, {
"title": "More",
"uiIcon": "fa fa-caret-right fa-size-1p3em",
"children": [{
"title": "Sub 1",
"cmd": "sub1"
}, {
"title": "Sub 2",
"cmd": "sub1"
}]
}],
beforeOpen: function(event, ui) {
var node = jQuery.ui.fancytree.getNode(ui.target[0]);
// Modify menu entries depending on node status
jQuery("#left-bar").contextmenu("enableEntry", "paste", node.isFolder());
......@@ -187,7 +236,7 @@ export class LeftbarComponent {
// Activate node on right-click
node.setActive();
},
select: function (event, ui) {
select: function(event, ui) {
var node = jQuery.ui.fancytree.getNode(ui.target[0]);
alert("select " + ui.cmd + " on " + node);
}
......@@ -203,4 +252,4 @@ export class LeftbarComponent {
}
}
}
\ No newline at end of file
......@@ -73,6 +73,8 @@ exports.DataStore = {
leftbarhide: false,
termlist: [],
windowsize: [],
loguserInfo: {},
loguserlist: [],
};
var AppService = (function () {
function AppService(http, _router, _logger) {
......@@ -100,6 +102,7 @@ var AppService = (function () {
exports.DataStore.Nav = JSON.parse(data);
});
exports.DataStore.socket.on('leftbar', function (data) {
console.log('leftbar', data);
if (data == 'changed')
vm.ReloadLeftbar();
});
......@@ -312,6 +315,12 @@ var AppService = (function () {
//
// }
AppService.prototype.TerminalConnect = function (assetData) {
// assetId 资产
// sysUserId 用户
// nickName 资产昵称
// ip 资产IP
// port 资产端口
console.log('assetData', assetData);
var socket = io.connect();
var vm = this;
if (ng2_cookies_1.Cookie.get("cols")) {
......@@ -328,10 +337,17 @@ var AppService = (function () {
var rows = "24";
ng2_cookies_1.Cookie.set('rows', rows, 99, '/', document.domain);
}
// var id = DataStore.term.push({
// "machine": "localhost",
// "nick": "localhost",
// "connected": true,
// "socket": socket
// }) - 1;
var id = exports.DataStore.term.push({
"machine": "localhost",
"nick": "localhost",
"machine": '' + assetData.assetId,
"nick": assetData.nickName,
"connected": true,
"closed": false,
"socket": socket
}) - 1;
exports.DataStore.termActive = id;
......@@ -344,8 +360,10 @@ var AppService = (function () {
exports.DataStore.term[id]["term"].on('title', function (title) {
document.title = title;
});
exports.DataStore.term[id]["term"].open(document.getElementById('term-' + id));
exports.DataStore.term[id]["term"].write('\x1b[31mWelcome to Jumpserver!\x1b[m\r\n');
setTimeout(function () {
exports.DataStore.term[id]["term"].open(document.getElementById('term-' + id));
exports.DataStore.term[id]["term"].write('\x1b[31mWelcome to Jumpserver!\x1b[m\r\n');
}, 0);
socket.on('connect', function () {
socket.emit('machine', assetData);
exports.DataStore.term[id]["term"].on('data', function (data) {
......@@ -393,6 +411,7 @@ var AppService = (function () {
};
AppService.prototype.TerminalDisconnect = function (i) {
exports.DataStore.term[i]["connected"] = false;
exports.DataStore.term[i]["closed"] = true;
exports.DataStore.term[i]["socket"].destroy();
exports.DataStore.term[i]["term"].write('\r\n\x1b[31mBye Bye!\x1b[m\r\n');
};
......
This diff is collapsed.
......@@ -69,6 +69,9 @@ export var DataStore:{
leftbarhide:boolean,
termlist:Array<{}>,
windowsize:Array<number>,
loguserInfo: {}, // 当前已选服务器信息
loguserlist:Array<{}>, // 可用用户列表
} = {
socket: io.connect(),
user: new User,
......@@ -88,6 +91,9 @@ export var DataStore:{
leftbarhide: false,
termlist: [],
windowsize: [],
loguserInfo: {}, // 当前已选服务器信息
loguserlist:[], // 可用用户列表
};
@Injectable()
......@@ -124,6 +130,7 @@ export class AppService {
DataStore.Nav = JSON.parse(data)
});
DataStore.socket.on('leftbar', function (data) {
console.log('leftbar', data)
if (data == 'changed')
vm.ReloadLeftbar()
});
......@@ -372,6 +379,12 @@ export class AppService {
//
// }
TerminalConnect(assetData) {
// assetId 资产
// sysUserId 用户
// nickName 资产昵称
// ip 资产IP
// port 资产端口
console.log('assetData', assetData);
var socket = io.connect();
var vm = this;
......@@ -387,12 +400,21 @@ export class AppService {
var rows = "24";
Cookie.set('rows', rows, 99, '/', document.domain);
}
// var id = DataStore.term.push({
// "machine": "localhost",
// "nick": "localhost",
// "connected": true,
// "socket": socket
// }) - 1;
var id = DataStore.term.push({
"machine": "localhost",
"nick": "localhost",
"machine": '' + assetData.assetId,
"nick": assetData.nickName,
"connected": true,
"closed": false,
"socket": socket
}) - 1;
DataStore.termActive = id;
DataStore.term[id]["term"] = new Terminal({
cols: cols,
......@@ -404,10 +426,11 @@ export class AppService {
DataStore.term[id]["term"].on('title', function (title) {
document.title = title;
});
DataStore.term[id]["term"].open(document.getElementById('term-' + id));
DataStore.term[id]["term"].write('\x1b[31mWelcome to Jumpserver!\x1b[m\r\n');
setTimeout(function() {
DataStore.term[id]["term"].open(document.getElementById('term-' + id));
DataStore.term[id]["term"].write('\x1b[31mWelcome to Jumpserver!\x1b[m\r\n');
}, 0);
socket.on('connect', function () {
socket.emit('machine', assetData);
......@@ -458,6 +481,7 @@ export class AppService {
TerminalDisconnect(i) {
DataStore.term[i]["connected"] = false;
DataStore.term[i]["closed"] = true;
DataStore.term[i]["socket"].destroy();
DataStore.term[i]["term"].write('\r\n\x1b[31mBye Bye!\x1b[m\r\n');
}
......
......@@ -28,15 +28,16 @@ var TermComponent = (function () {
this.timer();
};
TermComponent.prototype.ngAfterViewInit = function () {
this._appService.TerminalConnect({});
// this._appService.TerminalConnect({});
//this._logger.debug("term width ", jQuery("#term").width());
//this._logger.debug("term height", jQuery("#term").height());
};
TermComponent.prototype.timer = function () {
var _this = this;
if (service_1.DataStore.termlist.length > 0) {
for (var i in service_1.DataStore.termlist)
for (var i in service_1.DataStore.termlist) {
this._appService.TerminalConnect(service_1.DataStore.termlist[i]);
}
service_1.DataStore.termlist = [];
}
jQuery(window).trigger('resize');
......@@ -47,8 +48,28 @@ var TermComponent = (function () {
TermComponent.prototype.close = function (i) {
this._logger.debug(i);
this._appService.TerminalDisconnect(i);
service_1.DataStore.term[i]["term"].destroy();
// delete DataStore.term.splice(i, 1)
// DataStore.term[i]["term"].destroy();
service_1.DataStore.term.splice(i, 1);
this.checkActive(i);
};
TermComponent.prototype.checkActive = function (index) {
var len = service_1.DataStore.term.length;
if (len == 1) {
// 唯一一个
service_1.DataStore.termActive = 0;
}
else {
if (len == index) {
// 删了最后一个
service_1.DataStore.termActive = index - 1;
}
else if (len > index) {
service_1.DataStore.termActive = index;
}
}
};
TermComponent.prototype.setActive = function (index) {
service_1.DataStore.termActive = index;
};
TermComponent.prototype.dblclick = function () {
console.log(service_1.DataStore.term);
......@@ -56,7 +77,7 @@ var TermComponent = (function () {
TermComponent = __decorate([
core_1.Component({
selector: 'term',
template: "<div id=\"tabs\" style=\"height: 30px;width: 100%\">\n <ul>\n <li *ngFor=\"let m of DataStore.term;let i = index\"\n [ngClass]=\"{'active':i==DataStore.termActive,'disconnected':!m.connected}\"\n id=\"termnav-{{i}}\">\n <span *ngIf=\"!m.$edit\" (click)=\"DataStore.termActive=i\" (dblclick)=\"m.$edit=true;DataStore.termActive=i\">{{m.nick}}</span>\n <input *ngIf=\"m.$edit\" [(ngModel)]=\"m.nick\" autofocus (blur)=\"m.$edit=false\" (keyup.enter)=\"m.$edit=false\"/>\n <a class=\"close\" (click)=\"close(i)\" onclick=\"this.parentElement.style.display='none';\">x</a></li>\n </ul>\n</div>\n<div id=\"term\" style=\"width: 100%;height: 100%;\">\n <div id=\"term-0\" [ngClass]=\"{'hidden':DataStore.termActive!=0}\"></div>\n <div *ngFor=\"let m of DataStore.term; let i = index\" [ngClass]=\"{'hidden':i+1!=DataStore.termActive}\"\n id=\"term-{{i+1}}\"></div>\n</div>",
template: "<div id=\"tabs\" style=\"height: 30px;width: 100%\">\n <ul>\n <li *ngFor=\"let m of DataStore.term;let i = index\"\n [ngClass]=\"{'active':i==DataStore.termActive,'disconnected':!m.connected, 'hidden': m.closed}\"\n id=\"termnav-{{i}}\" (click)=\"setActive(i)\">\n <span *ngIf=\"!m.$edit\" (dblclick)=\"m.$edit=true;setActive(i)\">{{m.nick}}</span>\n <input *ngIf=\"m.$edit\" [(ngModel)]=\"m.nick\" autofocus (blur)=\"m.$edit=false\" (keyup.enter)=\"m.$edit=false\"/>\n <a class=\"close\" (click)=\"close(i)\">&times;</a></li>\n </ul>\n</div>\n<div id=\"term\" style=\"width: 100%;height: 100%;\">\n <div *ngFor=\"let m of DataStore.term;let i = index\" [ngClass]=\"{'disconnected':!m.connected, 'hidden': i!=DataStore.termActive || m.closed}\" id=\"term-{{i}}\"></div>\n</div>",
directives: [common_1.NgClass, common_1.FORM_DIRECTIVES]
}),
__metadata('design:paramtypes', [service_1.AppService, core_2.Logger])
......
{"version":3,"file":"terminal.js","sourceRoot":"","sources":["terminal.ts"],"names":[],"mappings":"AAAA;;GAEG;;;;;;;;;;;AAEH,qBAAwB,eAAe,CAAC,CAAA;AACxC,uBAA0C,iBAAiB,CAAC,CAAA;AAE5D,qBAAqB,sBAAsB,CAAC,CAAA;AAI5C,QAAQ,SAAS,CAAC,CAAA;AAGlB,wBAAoC,WAGpC,CAAC,CAH8C;AAwB/C;IAKI,uBAAoB,WAAsB,EACtB,OAAc;QADd,gBAAW,GAAX,WAAW,CAAW;QACtB,YAAO,GAAP,OAAO,CAAO;QALlC,cAAS,GAAG,mBAAS,CAAC;QAMlB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;IACvD,CAAC;IAED,gCAAQ,GAAR;QACI,mEAAmE;QACnE,IAAI,CAAC,KAAK,EAAE,CAAC;IACjB,CAAC;IAED,uCAAe,GAAf;QACI,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;QACrC,6DAA6D;QAC7D,8DAA8D;IAClE,CAAC;IAED,6BAAK,GAAL;QAAA,iBAUC;QATG,EAAE,CAAC,CAAC,mBAAS,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;YAChC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,mBAAS,CAAC,QAAQ,CAAC;gBAC7B,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,mBAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5D,mBAAS,CAAC,QAAQ,GAAG,EAAE,CAAA;QAC3B,CAAC;QACD,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACjC,UAAU,CAAC;YACP,KAAI,CAAC,KAAK,EAAE,CAAA;QAChB,CAAC,EAAE,CAAC,CAAC,CAAA;IACT,CAAC;IAED,6BAAK,GAAL,UAAM,CAAC;QACH,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;QACvC,mBAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC;QAEpC,qCAAqC;IACzC,CAAC;IAED,gCAAQ,GAAR;QACI,OAAO,CAAC,GAAG,CAAC,mBAAS,CAAC,IAAI,CAAC,CAAA;IAC/B,CAAC;IAhEL;QAAC,gBAAS,CAAC;YACP,QAAQ,EAAE,MAAM;YAChB,QAAQ,EAAE,s7BAcP;YACH,UAAU,EAAE,CAAC,gBAAO,EAAE,wBAAe,CAAC;SACzC,CAAC;;qBAAA;IA+CF,oBAAC;AAAD,CAAC,AA5CD,IA4CC;AA5CY,qBAAa,gBA4CzB,CAAA"}
\ No newline at end of file
{"version":3,"file":"terminal.js","sourceRoot":"","sources":["terminal.ts"],"names":[],"mappings":"AAAA;;GAEG;;;;;;;;;;;AAEH,qBAAwB,eAAe,CAAC,CAAA;AACxC,uBAA0C,iBAAiB,CAAC,CAAA;AAE5D,qBAAqB,sBAAsB,CAAC,CAAA;AAI5C,QAAQ,SAAS,CAAC,CAAA;AAGlB,wBAAoC,WAGpC,CAAC,CAH8C;AAsB/C;IAKI,uBAAoB,WAAsB,EACtB,OAAc;QADd,gBAAW,GAAX,WAAW,CAAW;QACtB,YAAO,GAAP,OAAO,CAAO;QALlC,cAAS,GAAG,mBAAS,CAAC;QAMlB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;IACvD,CAAC;IAED,gCAAQ,GAAR;QACI,mEAAmE;QACnE,IAAI,CAAC,KAAK,EAAE,CAAC;IACjB,CAAC;IAED,uCAAe,GAAf;QACI,wCAAwC;QACxC,6DAA6D;QAC7D,8DAA8D;IAClE,CAAC;IAED,6BAAK,GAAL;QAAA,iBAWC;QAVG,EAAE,CAAC,CAAC,mBAAS,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;YAChC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,mBAAS,CAAC,QAAQ,CAAC,CAAA,CAAC;gBAC9B,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,mBAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5D,CAAC;YACD,mBAAS,CAAC,QAAQ,GAAG,EAAE,CAAA;QAC3B,CAAC;QACD,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACjC,UAAU,CAAC;YACP,KAAI,CAAC,KAAK,EAAE,CAAA;QAChB,CAAC,EAAE,CAAC,CAAC,CAAA;IACT,CAAC;IAED,6BAAK,GAAL,UAAM,CAAC;QACH,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;QACvC,uCAAuC;QACvC,mBAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5B,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IACxB,CAAC;IACD,mCAAW,GAAX,UAAY,KAAK;QACb,IAAI,GAAG,GAAG,mBAAS,CAAC,IAAI,CAAC,MAAM,CAAC;QAChC,EAAE,CAAA,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YACV,OAAO;YACP,mBAAS,CAAC,UAAU,GAAG,CAAC,CAAC;QAC7B,CAAC;QAAC,IAAI,CAAC,CAAC;YACJ,EAAE,CAAC,CAAC,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC;gBACf,SAAS;gBACT,mBAAS,CAAC,UAAU,GAAG,KAAK,GAAG,CAAC,CAAC;YACrC,CAAC;YAAC,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC;gBACrB,mBAAS,CAAC,UAAU,GAAG,KAAK,CAAC;YACjC,CAAC;QACL,CAAC;IACL,CAAC;IACD,iCAAS,GAAT,UAAU,KAAK;QACX,mBAAS,CAAC,UAAU,GAAG,KAAK,CAAC;IACjC,CAAC;IACD,gCAAQ,GAAR;QACI,OAAO,CAAC,GAAG,CAAC,mBAAS,CAAC,IAAI,CAAC,CAAA;IAC/B,CAAC;IA/EL;QAAC,gBAAS,CAAC;YACP,QAAQ,EAAE,MAAM;YAChB,QAAQ,EAAE,k1BAYP;YACH,UAAU,EAAE,CAAC,gBAAO,EAAE,wBAAe,CAAC;SACzC,CAAC;;qBAAA;IAgEF,oBAAC;AAAD,CAAC,AA7DD,IA6DC;AA7DY,qBAAa,gBA6DzB,CAAA"}
\ No newline at end of file
......@@ -20,17 +20,15 @@ import {AppService, DataStore} from './service'
template: `<div id="tabs" style="height: 30px;width: 100%">
<ul>
<li *ngFor="let m of DataStore.term;let i = index"
[ngClass]="{'active':i==DataStore.termActive,'disconnected':!m.connected}"
id="termnav-{{i}}">
<span *ngIf="!m.$edit" (click)="DataStore.termActive=i" (dblclick)="m.$edit=true;DataStore.termActive=i">{{m.nick}}</span>
[ngClass]="{'active':i==DataStore.termActive,'disconnected':!m.connected, 'hidden': m.closed}"
id="termnav-{{i}}" (click)="setActive(i)">
<span *ngIf="!m.$edit" (dblclick)="m.$edit=true;setActive(i)">{{m.nick}}</span>
<input *ngIf="m.$edit" [(ngModel)]="m.nick" autofocus (blur)="m.$edit=false" (keyup.enter)="m.$edit=false"/>
<a class="close" (click)="close(i)" onclick="this.parentElement.style.display='none';">x</a></li>
<a class="close" (click)="close(i)">&times;</a></li>
</ul>
</div>
<div id="term" style="width: 100%;height: 100%;">
<div id="term-0" [ngClass]="{'hidden':DataStore.termActive!=0}"></div>
<div *ngFor="let m of DataStore.term; let i = index" [ngClass]="{'hidden':i+1!=DataStore.termActive}"
id="term-{{i+1}}"></div>
<div *ngFor="let m of DataStore.term;let i = index" [ngClass]="{'disconnected':!m.connected, 'hidden': i!=DataStore.termActive || m.closed}" id="term-{{i}}"></div>
</div>`,
directives: [NgClass, FORM_DIRECTIVES]
})
......@@ -52,15 +50,16 @@ export class TermComponent {
}
ngAfterViewInit() {
this._appService.TerminalConnect({});
// this._appService.TerminalConnect({});
//this._logger.debug("term width ", jQuery("#term").width());
//this._logger.debug("term height", jQuery("#term").height());
}
timer() {
if (DataStore.termlist.length > 0) {
for (var i in DataStore.termlist)
for (var i in DataStore.termlist){
this._appService.TerminalConnect(DataStore.termlist[i]);
}
DataStore.termlist = []
}
jQuery(window).trigger('resize');
......@@ -72,11 +71,27 @@ export class TermComponent {
close(i) {
this._logger.debug(i);
this._appService.TerminalDisconnect(i);
DataStore.term[i]["term"].destroy();
// delete DataStore.term.splice(i, 1)
// DataStore.term[i]["term"].destroy();
DataStore.term.splice(i, 1);
this.checkActive(i);
}
checkActive(index) {
var len = DataStore.term.length;
if(len == 1) {
// 唯一一个
DataStore.termActive = 0;
} else {
if (len == index) {
// 删了最后一个
DataStore.termActive = index - 1;
} else if (len > index) {
DataStore.termActive = index;
}
}
}
setActive(index) {
DataStore.termActive = index;
}
dblclick() {
console.log(DataStore.term)
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment