fixes #34 「动态指令」多行指令会被当作一行执行

fixes #32 会话无法维持,1分钟左右自动断开
fixes #31 更新"资产"会清空"标签"
fixes #13 建议添加用户权限功能、隐藏授权账户信息
This commit is contained in:
dushixiang
2021-01-18 18:28:33 +08:00
parent c93e03e951
commit c98b3adbe6
26 changed files with 642 additions and 378 deletions

View File

@ -247,6 +247,14 @@ class Asset extends Component {
tags = r2['data'];
}
if (asset['tags'] && typeof (asset['tags']) === 'string') {
if (asset['tags'] === '-') {
asset['tags'] = [];
} else {
asset['tags'] = asset['tags'].split(',');
}
}
this.setState({
modalTitle: title,
modalVisible: true,
@ -269,8 +277,9 @@ class Asset extends Component {
modalConfirmLoading: true
});
if (formData['tagArr']) {
formData.tags = formData['tagArr'].join(',');
console.log(formData)
if (formData['tags']) {
formData.tags = formData['tags'].join(',');
}
if (formData.id) {
@ -368,7 +377,7 @@ class Asset extends Component {
handleShowSharer = async (record) => {
let r1 = this.handleSearchByNickname('');
let r2 = request.get(`/resources/${record['id']}/assign`);
let r2 = request.get(`/resource-sharers/sharers?resourceId=${record['id']}`);
await r1;
let result = await r2;
@ -380,10 +389,20 @@ class Asset extends Component {
selectedSharers = result['data'];
}
let users = this.state.users;
users = users.map(item => {
let disabled = false;
if (record['owner'] === item['id']) {
disabled = true;
}
return {...item, 'disabled': disabled}
});
this.setState({
selectedSharers: selectedSharers,
selected: record,
changeSharerModalVisible: true
changeSharerModalVisible: true,
users: users
})
}
@ -687,9 +706,8 @@ class Asset extends Component {
: null
}
<Modal title={<text>更换资源<strong style={{color: '#1890ff'}}>{this.state.selected['name']}</strong>
</text>}
<Modal title={<Text>更换资源<strong style={{color: '#1890ff'}}>{this.state.selected['name']}</strong>
</Text>}
visible={this.state.changeOwnerModalVisible}
confirmLoading={this.state.changeOwnerConfirmLoading}
onOk={() => {
@ -746,54 +764,64 @@ class Asset extends Component {
</Form>
</Modal>
<Modal title={<text>更新资源<strong style={{color: '#1890ff'}}>{this.state.selected['name']}</strong>
</text>}
visible={this.state.changeSharerModalVisible}
confirmLoading={this.state.changeSharerConfirmLoading}
onOk={async () => {
this.setState({
changeSharerConfirmLoading: true
});
let changeSharerModalVisible = false;
{
this.state.changeSharerModalVisible ?
<Modal title={<Text>更新资源<strong
style={{color: '#1890ff'}}>{this.state.selected['name']}</strong>
</Text>}
visible={this.state.changeSharerModalVisible}
confirmLoading={this.state.changeSharerConfirmLoading}
onOk={async () => {
this.setState({
changeSharerConfirmLoading: true
});
let result = await request.post(`/resources/${this.state.selected['id']}/assign?type=asset&userIds=${this.state.selectedSharers.join(',')}`);
if (result['code'] === 1) {
message.success('操作成功');
this.loadTableData();
} else {
message.error(result['message'], 10);
changeSharerModalVisible = true;
}
let changeSharerModalVisible = false;
this.setState({
changeSharerConfirmLoading: false,
changeSharerModalVisible: changeSharerModalVisible
})
}}
onCancel={() => {
this.setState({
changeSharerModalVisible: false
})
}}
okButtonProps={{disabled: !hasPermission(this.state.selected['owner'])}}
>
let result = await request.post(`/resource-sharers/overwrite-sharers`, {
resourceId: this.state.selected['id'],
resourceType: 'asset',
userIds: this.state.selectedSharers
});
if (result['code'] === 1) {
message.success('操作成功');
this.loadTableData();
} else {
message.error(result['message'], 10);
changeSharerModalVisible = true;
}
this.setState({
changeSharerConfirmLoading: false,
changeSharerModalVisible: changeSharerModalVisible
})
}}
onCancel={() => {
this.setState({
changeSharerModalVisible: false
})
}}
okButtonProps={{disabled: !hasPermission(this.state.selected['owner'])}}
>
<Transfer
dataSource={this.state.users}
disabled={!hasPermission(this.state.selected['owner'])}
showSearch
titles={['未授权', '已授权']}
operations={['授权', '移除']}
listStyle={{
width: 250,
height: 300,
}}
targetKeys={this.state.selectedSharers}
onChange={this.handleSharersChange}
render={item => `${item.nickname}`}
/>
</Modal> : undefined
}
<Transfer
dataSource={this.state.users}
disabled={!hasPermission(this.state.selected['owner'])}
showSearch
titles={['未授权', '已授权']}
operations={['授权', '移除']}
listStyle={{
width: 250,
height: 300,
}}
targetKeys={this.state.selectedSharers}
onChange={this.handleSharersChange}
render={item => `${item.nickname}`}
/>
</Modal>
</Content>
</>
);

View File

@ -39,13 +39,6 @@ const AssetModal = function ({title, visible, handleOk, handleCancel, confirmLoa
}
}
let initAssetTags = [];
if (!isEmpty(model['tags'])) {
initAssetTags = model['tags'].split(',');
}
let [assetTags, setAssetTags] = useState(initAssetTags);
const formItemLayout = {
labelCol: {span: 6},
wrapperCol: {span: 14},
@ -100,10 +93,6 @@ const AssetModal = function ({title, visible, handleOk, handleCancel, confirmLoa
model.accountType = v;
}
const handleTagsChange = v => {
setAssetTags(v);
}
return (
<Modal
@ -209,8 +198,8 @@ const AssetModal = function ({title, visible, handleOk, handleCancel, confirmLoa
: null
}
<Form.Item label="标签" name='tagArr'>
<Select mode="tags" placeholder="请选择标签" defaultValue={assetTags} onChange={handleTagsChange}>
<Form.Item label="标签" name='tags'>
<Select mode="tags" placeholder="请选择标签">
{tags.map(tag => {
if (tag === '-') {
return undefined;

View File

@ -311,7 +311,7 @@ class DynamicCommand extends Component {
handleShowSharer = async (record) => {
let r1 = this.handleSearchByNickname('');
let r2 = request.get(`/resources/${record['id']}/assign`);
let r2 = request.get(`/resource-sharers/sharers?resourceId=${record['id']}`);
await r1;
let result = await r2;
@ -323,10 +323,20 @@ class DynamicCommand extends Component {
selectedSharers = result['data'];
}
let users = this.state.users;
users = users.map(item => {
let disabled = false;
if (record['owner'] === item['id']) {
disabled = true;
}
return {...item, 'disabled': disabled}
});
this.setState({
selectedSharers: selectedSharers,
selected: record,
changeSharerModalVisible: true
changeSharerModalVisible: true,
users: users
})
}
@ -657,8 +667,8 @@ class DynamicCommand extends Component {
</Modal>
<Modal title={<text>更换资源<strong style={{color: '#1890ff'}}>{this.state.selected['name']}</strong>
</text>}
<Modal title={<Text>更换资源<strong style={{color: '#1890ff'}}>{this.state.selected['name']}</strong>
</Text>}
visible={this.state.changeOwnerModalVisible}
confirmLoading={this.state.changeOwnerConfirmLoading}
onOk={() => {
@ -715,54 +725,63 @@ class DynamicCommand extends Component {
</Form>
</Modal>
<Modal title={<text>更新资源<strong style={{color: '#1890ff'}}>{this.state.selected['name']}</strong>
</text>}
visible={this.state.changeSharerModalVisible}
confirmLoading={this.state.changeSharerConfirmLoading}
onOk={async () => {
this.setState({
changeSharerConfirmLoading: true
});
{
this.state.changeSharerModalVisible ?
<Modal title={<Text>更新资源<strong
style={{color: '#1890ff'}}>{this.state.selected['name']}</strong>
</Text>}
visible={this.state.changeSharerModalVisible}
confirmLoading={this.state.changeSharerConfirmLoading}
onOk={async () => {
this.setState({
changeSharerConfirmLoading: true
});
let changeSharerModalVisible = false;
let changeSharerModalVisible = false;
let result = await request.post(`/resources/${this.state.selected['id']}/assign?type=command&userIds=${this.state.selectedSharers.join(',')}`);
if (result['code'] === 1) {
message.success('操作成功');
this.loadTableData();
} else {
message.error(result['message'], 10);
changeSharerModalVisible = true;
}
let result = await request.post(`/resource-sharers/overwrite-sharers`, {
resourceId: this.state.selected['id'],
resourceType: 'command',
userIds: this.state.selectedSharers
});
if (result['code'] === 1) {
message.success('操作成功');
this.loadTableData();
} else {
message.error(result['message'], 10);
changeSharerModalVisible = true;
}
this.setState({
changeSharerConfirmLoading: false,
changeSharerModalVisible: changeSharerModalVisible
})
}}
onCancel={() => {
this.setState({
changeSharerModalVisible: false
})
}}
okButtonProps={{disabled: !hasPermission(this.state.selected['owner'])}}
>
this.setState({
changeSharerConfirmLoading: false,
changeSharerModalVisible: changeSharerModalVisible
})
}}
onCancel={() => {
this.setState({
changeSharerModalVisible: false
})
}}
okButtonProps={{disabled: !hasPermission(this.state.selected['owner'])}}
>
<Transfer
dataSource={this.state.users}
disabled={!hasPermission(this.state.selected['owner'])}
showSearch
titles={['未授权', '已授权']}
operations={['授权', '移除']}
listStyle={{
width: 250,
height: 300,
}}
targetKeys={this.state.selectedSharers}
onChange={this.handleSharersChange}
render={item => `${item.nickname}`}
/>
</Modal> : undefined
}
<Transfer
dataSource={this.state.users}
disabled={!hasPermission(this.state.selected['owner'])}
showSearch
titles={['未授权', '已授权']}
operations={['授权', '移除']}
listStyle={{
width: 250,
height: 300,
}}
targetKeys={this.state.selectedSharers}
onChange={this.handleSharersChange}
render={item => `${item.nickname}`}
/>
</Modal>
</Content>
</>

View File

@ -44,11 +44,11 @@ const DynamicCommandModal = ({title, visible, handleOk, handleCancel, confirmLoa
</Form.Item>
<Form.Item label="指令名称" name='name' rules={[{required: true, message: '请输入指令名称'}]}>
<Input placeholder="请输入指令内容"/>
<Input placeholder="请输入指令名称"/>
</Form.Item>
<Form.Item label="指令内容" name='content' rules={[{required: true, message: '请输入指令内容'}]}>
<TextArea autoSize={{ minRows: 5, maxRows: 10 }} placeholder="一行一个命令"/>
<TextArea autoSize={{minRows: 5, maxRows: 10}} placeholder="多行指令也会当做一行执行,请使用 && 或 其他方式进行连接"/>
</Form.Item>
</Form>

View File

@ -278,7 +278,7 @@ class Credential extends Component {
}
const items = result['data']['items'].map(item => {
return {'key': item['id'], ...item}
return {'key': item['id'], 'disabled': false, ...item}
})
this.setState({
@ -294,7 +294,7 @@ class Credential extends Component {
handleShowSharer = async (record) => {
let r1 = this.handleSearchByNickname('');
let r2 = request.get(`/resources/${record['id']}/assign`);
let r2 = request.get(`/resource-sharers/sharers?resourceId=${record['id']}`);
await r1;
let result = await r2;
@ -306,10 +306,20 @@ class Credential extends Component {
selectedSharers = result['data'];
}
let users = this.state.users;
users = users.map(item => {
let disabled = false;
if (record['owner'] === item['id']) {
disabled = true;
}
return {...item, 'disabled': disabled}
});
this.setState({
selectedSharers: selectedSharers,
selected: record,
changeSharerModalVisible: true
changeSharerModalVisible: true,
users: users
})
}
@ -573,7 +583,8 @@ class Credential extends Component {
: null
}
<Modal title={<text>更换资源<strong style={{color: '#1890ff'}}>{this.state.selected['name']}</strong></text>}
<Modal title={<Text>更换资源<strong style={{color: '#1890ff'}}>{this.state.selected['name']}</strong>
</Text>}
visible={this.state.changeOwnerModalVisible}
confirmLoading={this.state.changeOwnerConfirmLoading}
onOk={() => {
@ -627,53 +638,63 @@ class Credential extends Component {
</Form>
</Modal>
<Modal title={<text>更新资源<strong style={{color: '#1890ff'}}>{this.state.selected['name']}</strong></text>}
visible={this.state.changeSharerModalVisible}
confirmLoading={this.state.changeSharerConfirmLoading}
onOk={async () => {
this.setState({
changeSharerConfirmLoading: true
});
{
this.state.changeSharerModalVisible ?
<Modal title={<Text>更新资源<strong
style={{color: '#1890ff'}}>{this.state.selected['name']}</strong>
</Text>}
visible={this.state.changeSharerModalVisible}
confirmLoading={this.state.changeSharerConfirmLoading}
onOk={async () => {
this.setState({
changeSharerConfirmLoading: true
});
let changeSharerModalVisible = false;
let changeSharerModalVisible = false;
let result = await request.post(`/resources/${this.state.selected['id']}/assign?type=credential&userIds=${this.state.selectedSharers.join(',')}`);
if (result['code'] === 1) {
message.success('操作成功');
this.loadTableData();
} else {
message.error(result['message'], 10);
changeSharerModalVisible = true;
}
let result = await request.post(`/resource-sharers/overwrite-sharers`, {
resourceId: this.state.selected['id'],
resourceType: 'credential',
userIds: this.state.selectedSharers
});
if (result['code'] === 1) {
message.success('操作成功');
this.loadTableData();
} else {
message.error(result['message'], 10);
changeSharerModalVisible = true;
}
this.setState({
changeSharerConfirmLoading: false,
changeSharerModalVisible: changeSharerModalVisible
})
}}
onCancel={() => {
this.setState({
changeSharerModalVisible: false
})
}}
okButtonProps={{disabled: !hasPermission(this.state.selected['owner'])}}
>
this.setState({
changeSharerConfirmLoading: false,
changeSharerModalVisible: changeSharerModalVisible
})
}}
onCancel={() => {
this.setState({
changeSharerModalVisible: false
})
}}
okButtonProps={{disabled: !hasPermission(this.state.selected['owner'])}}
>
<Transfer
dataSource={this.state.users}
disabled={!hasPermission(this.state.selected['owner'])}
showSearch
titles={['未授权', '已授权']}
operations={['授权', '移除']}
listStyle={{
width: 250,
height: 300,
}}
targetKeys={this.state.selectedSharers}
onChange={this.handleSharersChange}
render={item => `${item.nickname}`}
/>
</Modal> : undefined
}
<Transfer
dataSource={this.state.users}
disabled={!hasPermission(this.state.selected['owner'])}
showSearch
titles={['未授权', '已授权']}
operations={['授权', '移除']}
listStyle={{
width: 250,
height: 300,
}}
targetKeys={this.state.selectedSharers}
onChange={this.handleSharersChange}
render={item => `${item.nickname}`}
/>
</Modal>
</Content>
</>
);

View File

@ -22,14 +22,7 @@ import request from "../../common/request";
import {differTime, formatDate, itemRender} from "../../utils/utils";
import Playback from "./Playback";
import {message} from "antd/es";
import {
DeleteOutlined,
DeleteTwoTone,
ExclamationCircleOutlined,
PlaySquareTwoTone,
SyncOutlined,
UndoOutlined
} from "@ant-design/icons";
import {DeleteOutlined, ExclamationCircleOutlined, SyncOutlined, UndoOutlined} from "@ant-design/icons";
import {PROTOCOL_COLORS} from "../../common/constants";
import Logout from "../user/Logout";

View File

@ -22,14 +22,7 @@ import request from "../../common/request";
import {differTime, formatDate, itemRender} from "../../utils/utils";
import {message} from "antd/es";
import {PROTOCOL_COLORS} from "../../common/constants";
import {
ApiTwoTone,
DisconnectOutlined,
ExclamationCircleOutlined,
EyeTwoTone,
SyncOutlined,
UndoOutlined
} from "@ant-design/icons";
import {DisconnectOutlined, ExclamationCircleOutlined, SyncOutlined, UndoOutlined} from "@ant-design/icons";
import Monitor from "../access/Monitor";
import Logout from "../user/Logout";
@ -287,10 +280,10 @@ class OnlineSession extends Component {
return (
<div>
<Button type="link" size='small' icon={<EyeTwoTone/>} onClick={() => {
<Button type="link" size='small' onClick={() => {
this.showMonitor(record)
}}>监控</Button>
<Button type="link" size='small' icon={<ApiTwoTone/>} onClick={async () => {
<Button type="link" size='small' onClick={async () => {
confirm({
title: '您确定要断开此会话吗?',

View File

@ -6,8 +6,11 @@ import {
Button,
Col,
Divider,
Dropdown,
Form,
Input,
Layout,
Menu,
Modal,
PageHeader,
Row,
@ -21,9 +24,18 @@ import qs from "qs";
import UserModal from "./UserModal";
import request from "../../common/request";
import {message} from "antd/es";
import {DeleteOutlined, ExclamationCircleOutlined, PlusOutlined, SyncOutlined, UndoOutlined} from '@ant-design/icons';
import {
DeleteOutlined,
DownOutlined,
ExclamationCircleOutlined,
LockOutlined,
PlusOutlined,
SyncOutlined,
UndoOutlined
} from '@ant-design/icons';
import Logout from "./Logout";
import UserShareAsset from "./UserShareAsset";
import {hasPermission} from "../../service/permission";
const confirm = Modal.confirm;
const {Search} = Input;
@ -45,6 +57,7 @@ class User extends Component {
inputRefOfNickname = React.createRef();
inputRefOfUsername = React.createRef();
changePasswordFormRef = React.createRef()
state = {
items: [],
@ -60,7 +73,10 @@ class User extends Component {
model: null,
selectedRowKeys: [],
delBtnLoading: false,
assetVisible: false
assetVisible: false,
changePasswordVisible: false,
changePasswordConfirmLoading: false,
selectedRow: {}
};
componentDidMount() {
@ -246,6 +262,24 @@ class User extends Component {
})
}
handleChangePassword = async (values) => {
this.setState({
changePasswordConfirmLoading: true
})
let result = await request.post(`/users/${this.state.selectedRow['id']}/change-password?password=${values['password']}`);
if (result['code'] === 1) {
message.success('操作成功', 3);
} else {
message.error(result['message'], 10);
}
this.setState({
changePasswordConfirmLoading: false,
changePasswordVisible: false
})
}
render() {
const columns = [{
@ -294,7 +328,7 @@ class User extends Component {
}
}
}, {
title: '共享资产',
title: '授权资产',
dataIndex: 'sharerAssetCount',
key: 'sharerAssetCount',
render: (text, record, index) => {
@ -315,13 +349,56 @@ class User extends Component {
key: 'action',
render: (text, record) => {
const menu = (
<Menu>
<Menu.Item key="1">
<Button type="text" size='small'
onClick={() => {
this.setState({
changePasswordVisible: true,
selectedRow: record
})
}}>修改密码</Button>
</Menu.Item>
<Menu.Item key="2">
<Button type="text" size='small'
onClick={() => {
confirm({
title: '您确定要重置此用户的双因素认证吗?',
content: record['name'],
okText: '确定',
cancelText: '取消',
onOk: async () => {
let result = await request.post(`/users/${record['id']}/reset-totp`);
if (result['code'] === 1) {
message.success('操作成功', 3);
} else {
message.error(result['message'], 10);
}
}
});
}}>重置双因素认证</Button>
</Menu.Item>
<Menu.Divider/>
<Menu.Item key="5">
<Button type="text" size='small' danger
disabled={!hasPermission(record['owner'])}
onClick={() => this.showDeleteConfirm(record.id, record.name)}>删除</Button>
</Menu.Item>
</Menu>
);
return (
<div>
<Button type="link" size='small'
onClick={() => this.showModal('更新用户', record)}>编辑</Button>
<Button type="link" size='small'
onClick={() => this.showDeleteConfirm(record.id, record.name)}>删除</Button>
<Dropdown overlay={menu}>
<Button type="link" size='small'>
更多 <DownOutlined/>
</Button>
</Dropdown>
</div>
)
},
@ -511,7 +588,7 @@ class User extends Component {
<Modal
width={window.innerWidth * 0.8}
title='已共享资产'
title='已授权资产'
visible={this.state.assetVisible}
maskClosable={false}
destroyOnClose={true}
@ -528,6 +605,37 @@ class User extends Component {
owner={this.state.owner}
/>
</Modal>
{
this.state.changePasswordVisible ?
<Modal title="修改密码" visible={this.state.changePasswordVisible}
confirmLoading={this.state.changePasswordConfirmLoading}
onOk={() => {
this.changePasswordFormRef.current
.validateFields()
.then(values => {
this.changePasswordFormRef.current.resetFields();
this.handleChangePassword(values);
})
.catch(info => {
});
}}
onCancel={() => {
this.setState({
changePasswordVisible: false
})
}}>
<Form ref={this.changePasswordFormRef}>
<Form.Item name='password' rules={[{required: true, message: '请输入新密码'}]}>
<Input prefix={<LockOutlined/>} placeholder="请输入新密码"/>
</Form.Item>
</Form>
</Modal> : undefined
}
</Content>
</>
);

View File

@ -233,7 +233,7 @@ class UserShareAsset extends Component {
<div style={{marginBottom: 20}}>
<Row justify="space-around" align="middle" gutter={24}>
<Col span={8} key={1}>
<Title level={3}>共享资产列表</Title>
<Title level={3}>授权资产列表</Title>
</Col>
<Col span={16} key={2} style={{textAlign: 'right'}}>
<Space>
@ -284,7 +284,7 @@ class UserShareAsset extends Component {
<Divider type="vertical"/>
<Tooltip title="新增">
<Tooltip title="添加授权资产">
<Button type="dashed" icon={<PlusOutlined/>}
onClick={() => {
this.setState({
@ -303,20 +303,20 @@ class UserShareAsset extends Component {
</Button>
</Tooltip>
<Tooltip title="移除共享">
<Tooltip title="移除授权资产">
<Button type="dashed" danger disabled={!hasSelected} icon={<DeleteOutlined/>}
loading={this.state.delBtnLoading}
onClick={() => {
const content = <div>
您确定要移除选中的<Text style={{color: '#1890FF'}}
strong>{this.state.selectedRowKeys.length}</Text>
strong>{this.state.selectedRowKeys.length}</Text>
</div>;
confirm({
icon: <ExclamationCircleOutlined/>,
content: content,
onOk: async () => {
let userId = this.state.queryParams.sharer;
let result = await request.post(`/resources/remove`, {
let result = await request.post(`/resource-sharers/remove-resources`, {
userId: userId,
resourceType: 'asset',
resourceIds: this.state.selectedRowKeys
@ -363,7 +363,7 @@ class UserShareAsset extends Component {
{this.state.chooseAssetVisible ?
<Drawer
title="添加资产"
title="添加授权资产"
placement="right"
closable={true}
onClose={() => {

View File

@ -1,21 +1,6 @@
import React, {Component} from 'react';
import {
Badge,
Button,
Col,
Divider,
Input,
Layout,
Modal,
Row,
Select,
Space,
Table,
Tag,
Tooltip,
Typography
} from "antd";
import {Badge, Button, Col, Divider, Input, Layout, Row, Select, Space, Table, Tag, Tooltip, Typography} from "antd";
import qs from "qs";
import request from "../../common/request";
import {message} from "antd/es";
@ -24,10 +9,9 @@ import {message} from "antd/es";
import {PlusOutlined, SyncOutlined, UndoOutlined} from '@ant-design/icons';
import {PROTOCOL_COLORS} from "../../common/constants";
const confirm = Modal.confirm;
const {Search} = Input;
const {Content} = Layout;
const {Title, Text} = Typography;
const {Title} = Typography;
class UserShareAsset extends Component {
@ -63,23 +47,30 @@ class UserShareAsset extends Component {
this.setState({
sharer: this.props.sharer
})
let r2 = await request.get('/assets/paging?pageIndex=1&pageSize=1000&sharer=' + this.props.sharer);
if (r2['code'] === 1) {
let items = r2['data']['items'];
this.setState({
totalSelectedRows: items
})
}
this.loadTableData();
this.init(this.props.sharer)
}
let result = await request.get('/tags');
if (result['code'] === 1) {
async init(sharer) {
let q1 = request.get('/tags');
let q2 = request.get('/assets/paging?pageIndex=1&pageSize=1000&sharer=' + sharer);
let r1 = await q1;
let r2 = await q2;
if (r1['code'] === 1) {
this.setState({
tags: result['data']
tags: r1['data']
})
}
if (r2['code'] === 1) {
this.setState({
totalSelectedRows: r2['data']['items']
})
}
}
async loadTableData(queryParams) {
@ -107,8 +98,13 @@ class UserShareAsset extends Component {
} catch (e) {
} finally {
let sharer = this.state.sharer;
const items = data.items.map(item => {
return {'key': item['id'], ...item}
let disabled = false;
if (sharer === item['owner']) {
disabled = true;
}
return {...item, 'key': item['id'], 'disabled': disabled}
})
let totalSelectedRows = this.state.totalSelectedRows;
let selectedRowKeys = totalSelectedRows.map(item => item['id']);
@ -172,7 +168,7 @@ class UserShareAsset extends Component {
unSelectRow = async (assetId) => {
let userId = this.state.sharer;
let result = await request.post(`/resources/remove`, {
let result = await request.post(`/resource-sharers/remove-resources`, {
userId: userId,
resourceType: 'asset',
resourceIds: [assetId]
@ -259,6 +255,9 @@ class UserShareAsset extends Component {
onChange: (selectedRowKeys, selectedRows) => {
this.setState({selectedRowKeys, selectedRows});
},
getCheckboxProps: (record) => ({
disabled: record['disabled'],
}),
};
let hasSelected = false;
if (selectedRowKeys.length > 0) {
@ -275,7 +274,7 @@ class UserShareAsset extends Component {
return (
<>
<Title level={3}>共享资产列表</Title>
<Title level={3}>授权资产列表</Title>
<div>
{
this.state.totalSelectedRows.map(item => {
@ -350,7 +349,7 @@ class UserShareAsset extends Component {
</Button>
</Tooltip>
<Tooltip title="添加共享">
<Tooltip title="添加授权">
<Button type="primary" disabled={!hasSelected} icon={<PlusOutlined/>}
onClick={async () => {
console.log(this.state.selectedRows)
@ -369,7 +368,7 @@ class UserShareAsset extends Component {
}
let userId = this.state.sharer;
let result = await request.post(`/resources/add`, {
let result = await request.post(`/resource-sharers/add-resources`, {
userId: userId,
resourceType: 'asset',
resourceIds: newRowKeys