- 修复弹出粘贴板导致键盘不可输入的问题
- 修复首次打开页面白屏的问题 - 修复资产授权时用户名称不正确的问题
This commit is contained in:
parent
11c6394358
commit
1b87c4d7d7
30
web/src/components/Redirect.js
Normal file
30
web/src/components/Redirect.js
Normal file
@ -0,0 +1,30 @@
|
||||
import React from 'react';
|
||||
import {useQuery} from "react-query";
|
||||
import accountApi from "../api/account";
|
||||
import {setCurrentUser} from "../service/permission";
|
||||
import {useNavigate} from "react-router-dom";
|
||||
import Landing from "./Landing";
|
||||
|
||||
const Redirect = () => {
|
||||
|
||||
let navigate = useNavigate();
|
||||
|
||||
let infoQuery = useQuery('infoQuery', accountApi.getUserInfo, {
|
||||
onSuccess: data => {
|
||||
setCurrentUser(data);
|
||||
if (data.type === 'user') {
|
||||
navigate('/my-asset');
|
||||
} else {
|
||||
navigate('/dashboard');
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
return (
|
||||
<div>
|
||||
<Landing/>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export default Redirect;
|
@ -115,13 +115,36 @@ const Guacd = () => {
|
||||
))
|
||||
}
|
||||
|
||||
const sink = new Guacamole.InputSink();
|
||||
displayEle.appendChild(sink.getElement());
|
||||
sink.focus();
|
||||
|
||||
const keyboard = new Guacamole.Keyboard(sink.getElement());
|
||||
|
||||
keyboard.onkeydown = (keysym) => {
|
||||
console.log('aaa')
|
||||
client.sendKeyEvent(1, keysym);
|
||||
if (keysym === 65288) {
|
||||
return false;
|
||||
}
|
||||
};
|
||||
keyboard.onkeyup = (keysym) => {
|
||||
client.sendKeyEvent(0, keysym);
|
||||
};
|
||||
|
||||
const sinkFocus = debounce(() => {
|
||||
sink.focus();
|
||||
});
|
||||
|
||||
const mouse = new Guacamole.Mouse(element);
|
||||
|
||||
mouse.onmousedown = mouse.onmouseup = function (mouseState) {
|
||||
sinkFocus();
|
||||
client.sendMouseState(mouseState);
|
||||
}
|
||||
|
||||
mouse.onmousemove = function (mouseState) {
|
||||
sinkFocus();
|
||||
client.getDisplay().showCursor(false);
|
||||
mouseState.x = mouseState.x / display.getScale();
|
||||
mouseState.y = mouseState.y / display.getScale();
|
||||
@ -134,21 +157,7 @@ const Guacd = () => {
|
||||
client.sendMouseState(state);
|
||||
};
|
||||
|
||||
const sink = new Guacamole.InputSink();
|
||||
displayEle.appendChild(sink.getElement());
|
||||
sink.focus();
|
||||
|
||||
const keyboard = new Guacamole.Keyboard(sink.getElement());
|
||||
|
||||
keyboard.onkeydown = (keysym) => {
|
||||
client.sendKeyEvent(1, keysym);
|
||||
if (keysym === 65288) {
|
||||
return false;
|
||||
}
|
||||
};
|
||||
keyboard.onkeyup = (keysym) => {
|
||||
client.sendKeyEvent(0, keysym);
|
||||
};
|
||||
|
||||
setGuacd({
|
||||
client,
|
||||
@ -193,6 +202,7 @@ const Guacd = () => {
|
||||
}
|
||||
|
||||
const focus = () => {
|
||||
console.log(guacd.sink)
|
||||
if (guacd.sink) {
|
||||
guacd.sink.focus();
|
||||
}
|
||||
|
@ -2,7 +2,6 @@ import React, {useEffect, useState} from 'react';
|
||||
import {Form, Modal, Select} from "antd";
|
||||
import authorisedApi from "../../api/authorised";
|
||||
import strategyApi from "../../api/strategy";
|
||||
import commandFilterApi from "../../api/command-filter";
|
||||
import userApi from "../../api/user";
|
||||
|
||||
const formItemLayout = {
|
||||
@ -15,7 +14,6 @@ const AssetUserBind = ({id, visible, handleOk, handleCancel, confirmLoading}) =>
|
||||
|
||||
let [selectedUserIds, setSelectedUserIds] = useState([]);
|
||||
let [users, setUsers] = useState([]);
|
||||
let [commandFilters, setCommandFilters] = useState([]);
|
||||
let [strategies, setStrategies] = useState([]);
|
||||
|
||||
useEffect(() => {
|
||||
@ -31,9 +29,6 @@ const AssetUserBind = ({id, visible, handleOk, handleCancel, confirmLoading}) =>
|
||||
|
||||
let strategies = await strategyApi.getAll();
|
||||
setStrategies(strategies);
|
||||
|
||||
let commandFilters = await commandFilterApi.getAll();
|
||||
setCommandFilters(commandFilters);
|
||||
}
|
||||
|
||||
if (visible) {
|
||||
@ -50,18 +45,10 @@ const AssetUserBind = ({id, visible, handleOk, handleCancel, confirmLoading}) =>
|
||||
}
|
||||
});
|
||||
|
||||
let commandFilterOptions = commandFilters.map(item => {
|
||||
return {
|
||||
value: item.id,
|
||||
label: item.name
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
let userOptions = users.map(item => {
|
||||
return {
|
||||
value: item.id,
|
||||
label: item.name,
|
||||
label: item.nickname,
|
||||
disabled: selectedUserIds.includes(item.id)
|
||||
}
|
||||
});
|
||||
@ -109,21 +96,6 @@ const AssetUserBind = ({id, visible, handleOk, handleCancel, confirmLoading}) =>
|
||||
</Select>
|
||||
</Form.Item>
|
||||
|
||||
<Form.Item label="命令过滤器" name='commandFilterId' extra={'可控制授权用户允许或不允许执行某些指令'}>
|
||||
<Select
|
||||
allowClear
|
||||
style={{width: '100%'}}
|
||||
placeholder="此字段不是必填的"
|
||||
showSearch
|
||||
filterOption={(input, option) =>
|
||||
(option?.label ?? '').toLowerCase().includes(input.toLowerCase())
|
||||
}
|
||||
options={commandFilterOptions}
|
||||
>
|
||||
|
||||
</Select>
|
||||
</Form.Item>
|
||||
|
||||
<Form.Item label="授权策略" name='strategyId' extra={'可控制授权用户上传下载文件等功能'}>
|
||||
<Select
|
||||
allowClear
|
||||
|
@ -3,7 +3,6 @@ import {Form, Modal, Select} from "antd";
|
||||
import authorisedApi from "../../api/authorised";
|
||||
import userGroupApi from "../../api/user-group";
|
||||
import strategyApi from "../../api/strategy";
|
||||
import commandFilterApi from "../../api/command-filter";
|
||||
|
||||
const formItemLayout = {
|
||||
labelCol: {span: 6},
|
||||
@ -16,7 +15,6 @@ const AssetUserGroupBind = ({id, visible, handleOk, handleCancel, confirmLoading
|
||||
|
||||
let [selectedUserGroupIds, setSelectedUserGroupIds] = useState([]);
|
||||
let [userGroups, setUserGroups] = useState([]);
|
||||
let [commandFilters, setCommandFilters] = useState([]);
|
||||
let [strategies, setStrategies] = useState([]);
|
||||
|
||||
useEffect(() => {
|
||||
@ -32,9 +30,6 @@ const AssetUserGroupBind = ({id, visible, handleOk, handleCancel, confirmLoading
|
||||
|
||||
let strategies = await strategyApi.getAll();
|
||||
setStrategies(strategies);
|
||||
|
||||
let commandFilters = await commandFilterApi.getAll();
|
||||
setCommandFilters(commandFilters);
|
||||
}
|
||||
|
||||
if (visible) {
|
||||
@ -44,6 +39,21 @@ const AssetUserGroupBind = ({id, visible, handleOk, handleCancel, confirmLoading
|
||||
}
|
||||
}, [visible])
|
||||
|
||||
let strategyOptions = strategies.map(item => {
|
||||
return {
|
||||
value: item.id,
|
||||
label: item.name
|
||||
}
|
||||
});
|
||||
|
||||
let userGroupOptions = userGroups.map(item => {
|
||||
return {
|
||||
value: item.id,
|
||||
label: item.name,
|
||||
disabled: selectedUserGroupIds.includes(item.id)
|
||||
}
|
||||
});
|
||||
|
||||
return (
|
||||
<Modal
|
||||
title={'用户授权'}
|
||||
@ -77,11 +87,13 @@ const AssetUserGroupBind = ({id, visible, handleOk, handleCancel, confirmLoading
|
||||
allowClear
|
||||
style={{width: '100%'}}
|
||||
placeholder="请选择用户组"
|
||||
showSearch
|
||||
filterOption={(input, option) =>
|
||||
(option?.label ?? '').toLowerCase().includes(input.toLowerCase())
|
||||
}
|
||||
options={userGroupOptions}
|
||||
>
|
||||
{userGroups.map(item => {
|
||||
return <Select.Option key={item.id}
|
||||
disabled={selectedUserGroupIds.includes(item.id)}>{item.name}</Select.Option>
|
||||
})}
|
||||
|
||||
</Select>
|
||||
</Form.Item>
|
||||
|
||||
@ -90,10 +102,13 @@ const AssetUserGroupBind = ({id, visible, handleOk, handleCancel, confirmLoading
|
||||
allowClear
|
||||
style={{width: '100%'}}
|
||||
placeholder="此字段不是必填的"
|
||||
showSearch
|
||||
filterOption={(input, option) =>
|
||||
(option?.label ?? '').toLowerCase().includes(input.toLowerCase())
|
||||
}
|
||||
options={strategyOptions}
|
||||
>
|
||||
{strategies.map(item => {
|
||||
return <Select.Option key={item.id}>{item.name}</Select.Option>
|
||||
})}
|
||||
|
||||
</Select>
|
||||
</Form.Item>
|
||||
|
||||
|
@ -2,7 +2,6 @@ import React, {useEffect, useState} from 'react';
|
||||
import {Form, Modal, Select} from "antd";
|
||||
import assetApi from "../../../api/asset";
|
||||
import strategyApi from "../../../api/strategy";
|
||||
import commandFilterApi from "../../../api/command-filter";
|
||||
import authorisedApi from "../../../api/authorised";
|
||||
|
||||
const formItemLayout = {
|
||||
@ -15,7 +14,6 @@ const UserAuthorised = ({type, id, visible, handleOk, handleCancel, confirmLoadi
|
||||
|
||||
let [selectedAssetIds, setSelectedAssetIds] = useState([]);
|
||||
let [assets, setAssets] = useState([]);
|
||||
let [commandFilters, setCommandFilters] = useState([]);
|
||||
let [strategies, setStrategies] = useState([]);
|
||||
|
||||
useEffect(() => {
|
||||
@ -37,9 +35,6 @@ const UserAuthorised = ({type, id, visible, handleOk, handleCancel, confirmLoadi
|
||||
|
||||
let strategies = await strategyApi.GetAll();
|
||||
setStrategies(strategies);
|
||||
|
||||
let commandFilters = await commandFilterApi.GetAll();
|
||||
setCommandFilters(commandFilters);
|
||||
}
|
||||
|
||||
if (visible) {
|
||||
@ -56,14 +51,6 @@ const UserAuthorised = ({type, id, visible, handleOk, handleCancel, confirmLoadi
|
||||
}
|
||||
});
|
||||
|
||||
let commandFilterOptions = commandFilters.map(item=>{
|
||||
return {
|
||||
value: item.id,
|
||||
label: item.name
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
let assetOptions = assets.map(item=>{
|
||||
return {
|
||||
value: item.id,
|
||||
@ -115,20 +102,6 @@ const UserAuthorised = ({type, id, visible, handleOk, handleCancel, confirmLoadi
|
||||
</Select>
|
||||
</Form.Item>
|
||||
|
||||
<Form.Item label="命令过滤器" name='commandFilterId' extra={'可控制授权用户允许或不允许执行某些指令'}>
|
||||
<Select
|
||||
allowClear
|
||||
style={{width: '100%'}}
|
||||
placeholder="此字段不是必填的"
|
||||
showSearch
|
||||
filterOption={(input, option) =>
|
||||
(option?.label ?? '').toLowerCase().includes(input.toLowerCase())
|
||||
}
|
||||
options={commandFilterOptions}
|
||||
>
|
||||
</Select>
|
||||
</Form.Item>
|
||||
|
||||
<Form.Item label="授权策略" name='strategyId' extra={'可控制授权用户上传下载文件等功能'}>
|
||||
<Select
|
||||
allowClear
|
||||
|
@ -2,7 +2,7 @@ import React, {Suspense, useEffect, useState} from 'react';
|
||||
import {Breadcrumb, Dropdown, Layout, Menu, Popconfirm} from "antd";
|
||||
import {BugTwoTone, DesktopOutlined, DownOutlined, LogoutOutlined} from "@ant-design/icons";
|
||||
import {Link, Outlet, useLocation, useNavigate} from "react-router-dom";
|
||||
import {getCurrentUser, isAdmin} from "../service/permission";
|
||||
import {getCurrentUser} from "../service/permission";
|
||||
import LogoWithName from "../images/logo-with-name.png";
|
||||
import Logo from "../images/logo.png";
|
||||
import FooterComponent from "./FooterComponent";
|
||||
@ -135,11 +135,6 @@ const ManagerLayout = () => {
|
||||
</Menu>
|
||||
);
|
||||
|
||||
if (!isAdmin()) {
|
||||
window.location.href = "#/my-asset";
|
||||
return;
|
||||
}
|
||||
|
||||
return (
|
||||
<Layout className="layout" style={{minHeight: '100vh'}}>
|
||||
<Sider
|
||||
|
Loading…
Reference in New Issue
Block a user