- 修复弹出粘贴板导致键盘不可输入的问题
- 修复首次打开页面白屏的问题 - 修复资产授权时用户名称不正确的问题
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);
|
const mouse = new Guacamole.Mouse(element);
|
||||||
|
|
||||||
mouse.onmousedown = mouse.onmouseup = function (mouseState) {
|
mouse.onmousedown = mouse.onmouseup = function (mouseState) {
|
||||||
|
sinkFocus();
|
||||||
client.sendMouseState(mouseState);
|
client.sendMouseState(mouseState);
|
||||||
}
|
}
|
||||||
|
|
||||||
mouse.onmousemove = function (mouseState) {
|
mouse.onmousemove = function (mouseState) {
|
||||||
|
sinkFocus();
|
||||||
client.getDisplay().showCursor(false);
|
client.getDisplay().showCursor(false);
|
||||||
mouseState.x = mouseState.x / display.getScale();
|
mouseState.x = mouseState.x / display.getScale();
|
||||||
mouseState.y = mouseState.y / display.getScale();
|
mouseState.y = mouseState.y / display.getScale();
|
||||||
@ -134,21 +157,7 @@ const Guacd = () => {
|
|||||||
client.sendMouseState(state);
|
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({
|
setGuacd({
|
||||||
client,
|
client,
|
||||||
@ -193,6 +202,7 @@ const Guacd = () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const focus = () => {
|
const focus = () => {
|
||||||
|
console.log(guacd.sink)
|
||||||
if (guacd.sink) {
|
if (guacd.sink) {
|
||||||
guacd.sink.focus();
|
guacd.sink.focus();
|
||||||
}
|
}
|
||||||
|
@ -2,7 +2,6 @@ import React, {useEffect, useState} from 'react';
|
|||||||
import {Form, Modal, Select} from "antd";
|
import {Form, Modal, Select} from "antd";
|
||||||
import authorisedApi from "../../api/authorised";
|
import authorisedApi from "../../api/authorised";
|
||||||
import strategyApi from "../../api/strategy";
|
import strategyApi from "../../api/strategy";
|
||||||
import commandFilterApi from "../../api/command-filter";
|
|
||||||
import userApi from "../../api/user";
|
import userApi from "../../api/user";
|
||||||
|
|
||||||
const formItemLayout = {
|
const formItemLayout = {
|
||||||
@ -15,7 +14,6 @@ const AssetUserBind = ({id, visible, handleOk, handleCancel, confirmLoading}) =>
|
|||||||
|
|
||||||
let [selectedUserIds, setSelectedUserIds] = useState([]);
|
let [selectedUserIds, setSelectedUserIds] = useState([]);
|
||||||
let [users, setUsers] = useState([]);
|
let [users, setUsers] = useState([]);
|
||||||
let [commandFilters, setCommandFilters] = useState([]);
|
|
||||||
let [strategies, setStrategies] = useState([]);
|
let [strategies, setStrategies] = useState([]);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
@ -31,9 +29,6 @@ const AssetUserBind = ({id, visible, handleOk, handleCancel, confirmLoading}) =>
|
|||||||
|
|
||||||
let strategies = await strategyApi.getAll();
|
let strategies = await strategyApi.getAll();
|
||||||
setStrategies(strategies);
|
setStrategies(strategies);
|
||||||
|
|
||||||
let commandFilters = await commandFilterApi.getAll();
|
|
||||||
setCommandFilters(commandFilters);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (visible) {
|
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 => {
|
let userOptions = users.map(item => {
|
||||||
return {
|
return {
|
||||||
value: item.id,
|
value: item.id,
|
||||||
label: item.name,
|
label: item.nickname,
|
||||||
disabled: selectedUserIds.includes(item.id)
|
disabled: selectedUserIds.includes(item.id)
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -109,21 +96,6 @@ const AssetUserBind = ({id, visible, handleOk, handleCancel, confirmLoading}) =>
|
|||||||
</Select>
|
</Select>
|
||||||
</Form.Item>
|
</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={'可控制授权用户上传下载文件等功能'}>
|
<Form.Item label="授权策略" name='strategyId' extra={'可控制授权用户上传下载文件等功能'}>
|
||||||
<Select
|
<Select
|
||||||
allowClear
|
allowClear
|
||||||
|
@ -3,7 +3,6 @@ import {Form, Modal, Select} from "antd";
|
|||||||
import authorisedApi from "../../api/authorised";
|
import authorisedApi from "../../api/authorised";
|
||||||
import userGroupApi from "../../api/user-group";
|
import userGroupApi from "../../api/user-group";
|
||||||
import strategyApi from "../../api/strategy";
|
import strategyApi from "../../api/strategy";
|
||||||
import commandFilterApi from "../../api/command-filter";
|
|
||||||
|
|
||||||
const formItemLayout = {
|
const formItemLayout = {
|
||||||
labelCol: {span: 6},
|
labelCol: {span: 6},
|
||||||
@ -16,7 +15,6 @@ const AssetUserGroupBind = ({id, visible, handleOk, handleCancel, confirmLoading
|
|||||||
|
|
||||||
let [selectedUserGroupIds, setSelectedUserGroupIds] = useState([]);
|
let [selectedUserGroupIds, setSelectedUserGroupIds] = useState([]);
|
||||||
let [userGroups, setUserGroups] = useState([]);
|
let [userGroups, setUserGroups] = useState([]);
|
||||||
let [commandFilters, setCommandFilters] = useState([]);
|
|
||||||
let [strategies, setStrategies] = useState([]);
|
let [strategies, setStrategies] = useState([]);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
@ -32,9 +30,6 @@ const AssetUserGroupBind = ({id, visible, handleOk, handleCancel, confirmLoading
|
|||||||
|
|
||||||
let strategies = await strategyApi.getAll();
|
let strategies = await strategyApi.getAll();
|
||||||
setStrategies(strategies);
|
setStrategies(strategies);
|
||||||
|
|
||||||
let commandFilters = await commandFilterApi.getAll();
|
|
||||||
setCommandFilters(commandFilters);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (visible) {
|
if (visible) {
|
||||||
@ -44,6 +39,21 @@ const AssetUserGroupBind = ({id, visible, handleOk, handleCancel, confirmLoading
|
|||||||
}
|
}
|
||||||
}, [visible])
|
}, [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 (
|
return (
|
||||||
<Modal
|
<Modal
|
||||||
title={'用户授权'}
|
title={'用户授权'}
|
||||||
@ -77,11 +87,13 @@ const AssetUserGroupBind = ({id, visible, handleOk, handleCancel, confirmLoading
|
|||||||
allowClear
|
allowClear
|
||||||
style={{width: '100%'}}
|
style={{width: '100%'}}
|
||||||
placeholder="请选择用户组"
|
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>
|
</Select>
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
|
|
||||||
@ -90,10 +102,13 @@ const AssetUserGroupBind = ({id, visible, handleOk, handleCancel, confirmLoading
|
|||||||
allowClear
|
allowClear
|
||||||
style={{width: '100%'}}
|
style={{width: '100%'}}
|
||||||
placeholder="此字段不是必填的"
|
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>
|
</Select>
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
|
|
||||||
|
@ -2,7 +2,6 @@ import React, {useEffect, useState} from 'react';
|
|||||||
import {Form, Modal, Select} from "antd";
|
import {Form, Modal, Select} from "antd";
|
||||||
import assetApi from "../../../api/asset";
|
import assetApi from "../../../api/asset";
|
||||||
import strategyApi from "../../../api/strategy";
|
import strategyApi from "../../../api/strategy";
|
||||||
import commandFilterApi from "../../../api/command-filter";
|
|
||||||
import authorisedApi from "../../../api/authorised";
|
import authorisedApi from "../../../api/authorised";
|
||||||
|
|
||||||
const formItemLayout = {
|
const formItemLayout = {
|
||||||
@ -15,7 +14,6 @@ const UserAuthorised = ({type, id, visible, handleOk, handleCancel, confirmLoadi
|
|||||||
|
|
||||||
let [selectedAssetIds, setSelectedAssetIds] = useState([]);
|
let [selectedAssetIds, setSelectedAssetIds] = useState([]);
|
||||||
let [assets, setAssets] = useState([]);
|
let [assets, setAssets] = useState([]);
|
||||||
let [commandFilters, setCommandFilters] = useState([]);
|
|
||||||
let [strategies, setStrategies] = useState([]);
|
let [strategies, setStrategies] = useState([]);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
@ -37,9 +35,6 @@ const UserAuthorised = ({type, id, visible, handleOk, handleCancel, confirmLoadi
|
|||||||
|
|
||||||
let strategies = await strategyApi.GetAll();
|
let strategies = await strategyApi.GetAll();
|
||||||
setStrategies(strategies);
|
setStrategies(strategies);
|
||||||
|
|
||||||
let commandFilters = await commandFilterApi.GetAll();
|
|
||||||
setCommandFilters(commandFilters);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (visible) {
|
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=>{
|
let assetOptions = assets.map(item=>{
|
||||||
return {
|
return {
|
||||||
value: item.id,
|
value: item.id,
|
||||||
@ -115,20 +102,6 @@ const UserAuthorised = ({type, id, visible, handleOk, handleCancel, confirmLoadi
|
|||||||
</Select>
|
</Select>
|
||||||
</Form.Item>
|
</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={'可控制授权用户上传下载文件等功能'}>
|
<Form.Item label="授权策略" name='strategyId' extra={'可控制授权用户上传下载文件等功能'}>
|
||||||
<Select
|
<Select
|
||||||
allowClear
|
allowClear
|
||||||
|
@ -2,7 +2,7 @@ import React, {Suspense, useEffect, useState} from 'react';
|
|||||||
import {Breadcrumb, Dropdown, Layout, Menu, Popconfirm} from "antd";
|
import {Breadcrumb, Dropdown, Layout, Menu, Popconfirm} from "antd";
|
||||||
import {BugTwoTone, DesktopOutlined, DownOutlined, LogoutOutlined} from "@ant-design/icons";
|
import {BugTwoTone, DesktopOutlined, DownOutlined, LogoutOutlined} from "@ant-design/icons";
|
||||||
import {Link, Outlet, useLocation, useNavigate} from "react-router-dom";
|
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 LogoWithName from "../images/logo-with-name.png";
|
||||||
import Logo from "../images/logo.png";
|
import Logo from "../images/logo.png";
|
||||||
import FooterComponent from "./FooterComponent";
|
import FooterComponent from "./FooterComponent";
|
||||||
@ -135,11 +135,6 @@ const ManagerLayout = () => {
|
|||||||
</Menu>
|
</Menu>
|
||||||
);
|
);
|
||||||
|
|
||||||
if (!isAdmin()) {
|
|
||||||
window.location.href = "#/my-asset";
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Layout className="layout" style={{minHeight: '100vh'}}>
|
<Layout className="layout" style={{minHeight: '100vh'}}>
|
||||||
<Sider
|
<Sider
|
||||||
|
Loading…
Reference in New Issue
Block a user