Commit 97e4c4b3 by zhaochengxiang

权限转移

parent 36fc1774
...@@ -135,7 +135,7 @@ const ModelNameColumn = (props) => { ...@@ -135,7 +135,7 @@ const ModelNameColumn = (props) => {
} }
const ModelTable = (props) => { const ModelTable = (props) => {
const { data, onChange, onItemAction, onSelect, onHistory, catalogId, keyword, onAutoCreateTable, offset = null, view, modelState, user, selectModelerIds, visibleColNames, tagSelectOptions, batchAddTagChange, onMerge } = props; const { data, onChange, onItemAction, onSelect, onHistory, catalogId, keyword, onAutoCreateTable, offset = null, view, modelState, user, selectModelerIds, visibleColNames, tagSelectOptions, batchAddTagChange, onMerge, onAuthTransfer } = props;
const [ selectedRowKeys, setSelectedRowKeys ] = useState([]); const [ selectedRowKeys, setSelectedRowKeys ] = useState([]);
const [ expandedSelectedRowKeys, setExpandedSelectedRowKeys ] = useState([]); const [ expandedSelectedRowKeys, setExpandedSelectedRowKeys ] = useState([]);
...@@ -585,6 +585,10 @@ const ModelTable = (props) => { ...@@ -585,6 +585,10 @@ const ModelTable = (props) => {
stateAction(currentItem, action); stateAction(currentItem, action);
} else if (key === 'join') { } else if (key === 'join') {
onMerge(currentItem); onMerge(currentItem);
} else if (key === 'auth-transfer') {
onAuthTransfer(currentItem)
} else if (key === 'auth-share') {
} }
} }
...@@ -697,6 +701,24 @@ const ModelTable = (props) => { ...@@ -697,6 +701,24 @@ const ModelTable = (props) => {
复制模型 复制模型
</PermissionRcItem> </PermissionRcItem>
{ {
view !== 'branch' && <PermissionRcItem
id='auth-transfer'
onClick={handleItemClick}
defaultPermission={currentItem?.supportChangeOwner?true:false}
>
权限转移
</PermissionRcItem>
}
{
view !== 'branch' && <PermissionRcItem
id='auth-share'
onClick={handleItemClick}
defaultPermission={currentItem?.supportCoediting?true:false}
>
权限共享
</PermissionRcItem>
}
{
view === 'branch' && <PermissionRcItem view === 'branch' && <PermissionRcItem
id="join" id="join"
onClick={handleItemClick} onClick={handleItemClick}
......
import React from "react"
import { Modal, Button, Spin, Form, Select } from "antd"
import produce from "immer"
import { useDebounceEffect } from "ahooks"
import { dispatch } from '../../../../model'
const FC = (props) => {
const { item, visible, onCancel } = props
const [loading, setLoading] = React.useState(false)
const [waiting, setWaiting] = React.useState(false)
const [owner, setOwner] = React.useState()
const basicRef = React.useRef()
React.useEffect(() => {
if (visible && item?.id) {
getOwner()
}
}, [visible, item])
const getOwner = () => {
setLoading(true)
dispatch({
type: 'datamodel.getOwner',
payload: {
id: item?.id
},
callback: (data) => {
setLoading(false)
setOwner(data)
},
error: () => {
setLoading(false)
}
})
}
const close = (refresh = false) => {
setLoading(false)
setWaiting(false)
setOwner()
onCancel?.(refresh)
}
const save = async () => {
try {
const rows = await basicRef.current.validate()
setWaiting(true)
dispatch({
type: 'datamodel.setOwner',
payload: {
params: {
id: item?.id,
},
data: rows.owner,
},
callback: (data) => {
setWaiting(false)
close(true)
},
error: () => {
setWaiting(false)
}
})
} catch (errInfo) {
console.log('Validate Failed:', errInfo);
}
}
const footer = React.useMemo(() => {
return [
<Button key={'cancel'}
onClick={() => close()}
>取消</Button>,
<Button key={'save'} type='primary'
disabled={waiting}
onClick={() => save()}
>确定</Button>
]
}, [close, save, waiting])
return (
<Modal
visible={visible}
footer={footer}
width='800px'
bodyStyle={{ padding: '15px', overflowX: 'auto', maxHeight: '80vh' }}
title='权限转移'
centered destroyOnClose
onCancel={() => { close() }}
>
<Spin spinning={waiting}>
<Basic ref={basicRef} owner={owner} />
</Spin>
</Modal>
)
}
export default FC
export const Basic = React.forwardRef(function ({ owner }, ref) {
const [loading, setLoading] = React.useState(false)
const [users, setUsers] = React.useState()
const [form] = Form.useForm()
React.useImperativeHandle(ref, () => ({
validate: async () => {
return await form.validateFields()
},
}), [form])
React.useEffect(() => {
getUsers()
}, [])
React.useEffect(() => {
if (owner) {
form.setFieldsValue({ owner })
}
}, [owner])
const getUsers = () => {
setLoading(true)
dispatch({
type: 'datamodel.getCooperationUsers',
callback: data => {
setLoading(false)
//id int转string
const newData = produce(data??[], (draft) => {
draft.forEach(item => {
item.id = `${item.id}`
})
})
setUsers(newData)
},
error: () => {
setLoading(false)
}
})
}
return (
<Form
form={form}
labelCol={{ span: 3 }}
wrapperCol={{ span: 21 }}
autoComplete="off"
>
<Form.Item
name='owner'
label='选择用户'
extra="权限转移后,您将无法编辑该模型"
rules={[{ required: true, message: '请选择用户'}]}
>
<UsersItem loading={loading} users={users} />
</Form.Item>
</Form>
)
})
const UsersItem = ({ loading, users, value, onChange }) => {
const [searchValue, setSearchValue] = React.useState()
const [options, setOptions] = React.useState()
useDebounceEffect(() => {
setOptions(
(users??[])
.filter(item => !searchValue || (item.name??'').indexOf(searchValue)!==-1)
.map(item => ({
label: item.name,
value: item.id,
}))
)
}, [searchValue, users], { wait: 300 })
return (
<Select loading={loading} searchValue allowClear
value={value?.id}
searchValue={searchValue}
onSearch={(val) => {
setSearchValue(val)
}}
onClear={() => {
setSearchValue()
}}
filterOption={false}
options={options}
onChange={(val) => {
if (val) {
const index = (users??[]).findIndex(item => item.id === val)
if (index !== -1) {
onChange?.(users[index])
} else {
onChange?.()
}
} else {
onChange?.()
}
}}
/>
)
}
\ No newline at end of file
...@@ -25,6 +25,7 @@ import { TagSelect, TagSelectPopup } from './Component/tag-help'; ...@@ -25,6 +25,7 @@ import { TagSelect, TagSelectPopup } from './Component/tag-help';
import BranchAddModel from './Component/branch-add-model' import BranchAddModel from './Component/branch-add-model'
import StartFlow from './Component/start-flow' import StartFlow from './Component/start-flow'
import MergeToMaster from './Component/merge-to-master'; import MergeToMaster from './Component/merge-to-master';
import AuthTransfer from './Component/auth-transfer';
import './index.less'; import './index.less';
...@@ -90,6 +91,10 @@ class Model extends React.Component { ...@@ -90,6 +91,10 @@ class Model extends React.Component {
visible: false, visible: false,
items: undefined, items: undefined,
}, },
authTransferParams: {
visible: false,
item: undefined,
},
} }
} }
...@@ -350,6 +355,17 @@ class Model extends React.Component { ...@@ -350,6 +355,17 @@ class Model extends React.Component {
} }
} }
onAuthTransfer = (item) => {
if (item) {
this.setState({
authTransferParams: {
visible: true,
item,
}
})
}
}
onSearchInputChange = (value) => { onSearchInputChange = (value) => {
const { currentView } = this.state; const { currentView } = this.state;
if (currentView === 'branch') { if (currentView === 'branch') {
...@@ -810,6 +826,7 @@ class Model extends React.Component { ...@@ -810,6 +826,7 @@ class Model extends React.Component {
onAutoCreateTable={this.onAutoCreateTable} onAutoCreateTable={this.onAutoCreateTable}
onHistory={this.onHistory} onHistory={this.onHistory}
onMerge={this.onMerge} onMerge={this.onMerge}
onAuthTransfer={this.onAuthTransfer}
{...this.props} /> {...this.props} />
</Spin> </Spin>
</div> </div>
...@@ -907,6 +924,22 @@ class Model extends React.Component { ...@@ -907,6 +924,22 @@ class Model extends React.Component {
}} }}
/> />
<AuthTransfer
{...this.state.authTransferParams}
onCancel={(refresh) => {
this.setState({
authTransferParams: {
visible: false,
item: undefined
}
})
if (refresh) {
this.onTableChange()
}
}}
/>
<MergeToMaster <MergeToMaster
{...this.state.mergeToMasterParams} {...this.state.mergeToMasterParams}
branchId={this.state.catalogId} branchId={this.state.catalogId}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment