- 修复弹出粘贴板导致键盘不可输入的问题

- 修复首次打开页面白屏的问题
- 修复资产授权时用户名称不正确的问题
This commit is contained in:
dushixiang 2022-11-22 22:53:01 +08:00
parent 11c6394358
commit 1b87c4d7d7
6 changed files with 83 additions and 88 deletions

View 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;

View File

@ -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();
} }

View File

@ -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

View File

@ -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>

View File

@ -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

View File

@ -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