release (#150)
* 修改首页卡片间距 * 修改普通用户分享资产时只能查看到普通用户 close #133 * 修复普通用户访问非自己创建的资产无法打开原生ssh的bug * release v0.4.1 * 修复使用命令修改加密key失败的问题 * 修改初始化RDP属性「禁用字形缓存」为打开 * 增加kubernetes协议的筛选 * 修改安装文档&修复首页链接限制无效的问题 * 修改guacd版本为1.3.0 * 支持导入资产时带标签的数据 * - 修改原生安装文档中guacamole版本为1.3.0 - 修改点击名称为编辑 * release 0.5.0
This commit is contained in:
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "next-terminal",
|
||||
"version": "0.4.1",
|
||||
"version": "0.5.0",
|
||||
"private": true,
|
||||
"dependencies": {
|
||||
"@ant-design/icons": "^4.3.0",
|
||||
|
@ -470,11 +470,22 @@ class Asset extends Component {
|
||||
if (short && short.length > 20) {
|
||||
short = short.substring(0, 20) + " ...";
|
||||
}
|
||||
return (
|
||||
<Tooltip placement="topLeft" title={name}>
|
||||
{short}
|
||||
</Tooltip>
|
||||
);
|
||||
|
||||
if (hasPermission(record['owner'])) {
|
||||
return (
|
||||
<Button type="link" size='small' onClick={() => this.update(record.id)}>
|
||||
<Tooltip placement="topLeft" title={name}>
|
||||
{short}
|
||||
</Tooltip>
|
||||
</Button>
|
||||
);
|
||||
} else {
|
||||
return (
|
||||
<Tooltip placement="topLeft" title={name}>
|
||||
{short}
|
||||
</Tooltip>
|
||||
);
|
||||
}
|
||||
},
|
||||
sorter: true,
|
||||
}, {
|
||||
@ -688,6 +699,7 @@ class Asset extends Component {
|
||||
<Select.Option value="ssh">ssh</Select.Option>
|
||||
<Select.Option value="vnc">vnc</Select.Option>
|
||||
<Select.Option value="telnet">telnet</Select.Option>
|
||||
<Select.Option value="kubernetes">kubernetes</Select.Option>
|
||||
</Select>
|
||||
|
||||
<Tooltip title='重置查询'>
|
||||
@ -876,7 +888,7 @@ class Asset extends Component {
|
||||
|
||||
<Button type="primary" onClick={() => {
|
||||
|
||||
let csvString = 'name,ssh,127.0.0.1,22,username,password,privateKey,passphrase,description';
|
||||
let csvString = 'name,ssh,127.0.0.1,22,username,password,privateKey,passphrase,description,tag1|tag2|tag3';
|
||||
//前置的"\uFEFF"为“零宽不换行空格”,可处理中文乱码问题
|
||||
const blob = new Blob(["\uFEFF" + csvString], {type: 'text/csv;charset=gb2312;'});
|
||||
let a = document.createElement('a');
|
||||
|
@ -370,11 +370,21 @@ class DynamicCommand extends Component {
|
||||
if (short && short.length > 20) {
|
||||
short = short.substring(0, 20) + " ...";
|
||||
}
|
||||
return (
|
||||
<Tooltip placement="topLeft" title={name}>
|
||||
{short}
|
||||
</Tooltip>
|
||||
);
|
||||
if (hasPermission(record['owner'])) {
|
||||
return (
|
||||
<Button type="link" size='small' onClick={() => this.showModal('更新指令', record)}>
|
||||
<Tooltip placement="topLeft" title={name}>
|
||||
{short}
|
||||
</Tooltip>
|
||||
</Button>
|
||||
);
|
||||
} else {
|
||||
return (
|
||||
<Tooltip placement="topLeft" title={name}>
|
||||
{short}
|
||||
</Tooltip>
|
||||
);
|
||||
}
|
||||
},
|
||||
sorter: true,
|
||||
}, {
|
||||
|
@ -335,16 +335,27 @@ class Credential extends Component {
|
||||
title: '凭证名称',
|
||||
dataIndex: 'name',
|
||||
key: 'name',
|
||||
render: (name, record) => {
|
||||
render: (name, record, index) => {
|
||||
let short = name;
|
||||
if (short && short.length > 20) {
|
||||
short = short.substring(0, 20) + " ...";
|
||||
}
|
||||
return (
|
||||
<Tooltip placement="topLeft" title={name}>
|
||||
{short}
|
||||
</Tooltip>
|
||||
);
|
||||
if (hasPermission(record['owner'])) {
|
||||
return (
|
||||
<Button type="link" size='small' loading={this.state.items[index].updateBtnLoading}
|
||||
onClick={() => this.showModal('更新凭证', record.id, index)}>
|
||||
<Tooltip placement="topLeft" title={name}>
|
||||
{short}
|
||||
</Tooltip>
|
||||
</Button>
|
||||
);
|
||||
} else {
|
||||
return (
|
||||
<Tooltip placement="topLeft" title={name}>
|
||||
{short}
|
||||
</Tooltip>
|
||||
);
|
||||
}
|
||||
},
|
||||
sorter: true,
|
||||
}, {
|
||||
|
@ -1,4 +1,7 @@
|
||||
.text-center{
|
||||
width: 100px;
|
||||
text-align: center;
|
||||
}
|
||||
.disable-link {
|
||||
pointer-events: none;
|
||||
}
|
@ -5,7 +5,6 @@ import request from "../../common/request";
|
||||
import './Dashboard.css'
|
||||
import {Link} from "react-router-dom";
|
||||
import {Area} from '@ant-design/charts';
|
||||
|
||||
import {isAdmin} from "../../service/permission";
|
||||
|
||||
class Dashboard extends Component {
|
||||
@ -50,6 +49,12 @@ class Dashboard extends Component {
|
||||
}, () => this.getD())
|
||||
}
|
||||
|
||||
handleLinkClick = (e) => {
|
||||
if (!isAdmin()) {
|
||||
e.preventDefault();
|
||||
}
|
||||
}
|
||||
|
||||
render() {
|
||||
|
||||
const config = {
|
||||
@ -71,7 +76,7 @@ class Dashboard extends Component {
|
||||
<Row gutter={16}>
|
||||
<Col span={6}>
|
||||
<Card bordered={true}>
|
||||
<Link to={'/user'} disabled={!isAdmin()}>
|
||||
<Link to={'/user'} onClick={this.handleLinkClick}>
|
||||
<Statistic title="在线用户" value={this.state.counter['user']}
|
||||
prefix={<UserOutlined/>}/>
|
||||
</Link>
|
||||
@ -96,7 +101,7 @@ class Dashboard extends Component {
|
||||
</Col>
|
||||
<Col span={6}>
|
||||
<Card bordered={true}>
|
||||
<Link to={'/online-session'} disabled={!isAdmin()}>
|
||||
<Link to={'/online-session'} onClick={this.handleLinkClick}>
|
||||
<Statistic title="在线会话" value={this.state.counter['onlineSession']}
|
||||
prefix={<LinkOutlined/>}/>
|
||||
</Link>
|
||||
|
@ -403,6 +403,7 @@ class OfflineSession extends Component {
|
||||
<Select.Option value="ssh">ssh</Select.Option>
|
||||
<Select.Option value="vnc">vnc</Select.Option>
|
||||
<Select.Option value="telnet">telnet</Select.Option>
|
||||
<Select.Option value="kubernetes">kubernetes</Select.Option>
|
||||
</Select>
|
||||
|
||||
<Tooltip title='重置查询'>
|
||||
|
@ -374,6 +374,7 @@ class OnlineSession extends Component {
|
||||
<Select.Option value="ssh">ssh</Select.Option>
|
||||
<Select.Option value="vnc">vnc</Select.Option>
|
||||
<Select.Option value="telnet">telnet</Select.Option>
|
||||
<Select.Option value="kubernetes">kubernetes</Select.Option>
|
||||
</Select>
|
||||
|
||||
<Tooltip title='重置查询'>
|
||||
|
@ -304,6 +304,19 @@ class User extends Component {
|
||||
dataIndex: 'username',
|
||||
key: 'username',
|
||||
sorter: true,
|
||||
render: (username, record, index) => {
|
||||
return (
|
||||
<Button type="link" size='small'
|
||||
onClick={async () => {
|
||||
let result = await request.get(`/users/${record['id']}`);
|
||||
if (result['code'] !== 1) {
|
||||
message.error(result['message']);
|
||||
return;
|
||||
}
|
||||
this.showModal('更新用户', result['data']);
|
||||
}}>{username}</Button>
|
||||
);
|
||||
}
|
||||
}, {
|
||||
title: '用户昵称',
|
||||
dataIndex: 'nickname',
|
||||
|
@ -269,6 +269,13 @@ class UserGroup extends Component {
|
||||
title: '名称',
|
||||
dataIndex: 'name',
|
||||
sorter: true,
|
||||
render: (name, record, index) => {
|
||||
return (
|
||||
<Button type="link" size='small'
|
||||
loading={this.state.items[index].updateBtnLoading}
|
||||
onClick={() => this.showModal('更新用户组', record['id'], index)}>{name}</Button>
|
||||
);
|
||||
}
|
||||
}, {
|
||||
title: '授权资产',
|
||||
dataIndex: 'assetCount',
|
||||
|
Reference in New Issue
Block a user