Commit 9b40465f by zhaochengxiang

关联资产

parent 78dec2cf
......@@ -412,4 +412,8 @@ export function* importDraftLogs(payload) {
export function* draftAssetImport(payload) {
return yield call(service.draftAssetImport, payload);
}
export function* fillRelationDisplayInfo(payload) {
return yield call(service.fillRelationDisplayInfo, payload);
}
\ No newline at end of file
......@@ -393,10 +393,6 @@ export function startProcess(payload) {
return PostJSON("/dataassetmanagertest/flowApi/startProcess", payload)
}
export function getRelatedAssets(payload) {
return PostJSON("/dataassetmanagertest/postApi/getRelatedAssets", payload)
}
export function getRelatedServices(payload) {
return PostJSON("/dataassetmanagertest/postApi/getRelatedServices", payload)
}
......@@ -419,4 +415,12 @@ export function importDraftLogs(payload) {
export function draftAssetImport(payload) {
return PostFile("/dataassetmanagertest/draftApi/batchUpdateByImport", payload);
}
export function getRelatedAssets(payload) {
return GetJSON("/dataassetmanagertest/dataAssetRelatedApi/listRelations", payload)
}
export function fillRelationDisplayInfo(payload) {
return GetJSON("/dataassetmanagertest/dataAssetRelatedApi/fillRelationDisplayInfo", payload)
}
\ No newline at end of file
import React from 'react'
import { Tabs, Space, Button, Input, Pagination, Tooltip, Modal } from 'antd'
import { paginate } from '../../../../util'
import Table from '../../ResizeableTable'
import SelectResource from './select-resource'
import { dispatch } from '../../../../model';
import { AssetDraftReference } from '../../../../util/constant'
import AssetDetailDrawer from "./AssetDetailDrawer";
import { AppContext } from '../../../../App'
const FC = React.forwardRef(function ({ item, reference, action, onChange }, ref) {
const [keyword, setKeyword] = React.useState()
const [pagination, setPagination] = React.useState({
pageNum: 1,
pageSize: 20,
})
const [loadingAssets, setLoadingAssets] = React.useState(false)
const [assets, setAssets] = React.useState()
const [selectedRows, setSelectedRows] = React.useState()
const [selectResourceParams, setSelectResourceParams] = React.useState({
visible: false,
item: undefined,
type: undefined,
})
const [detailParams, setDetailParams] = React.useState({
visible: false,
id: undefined,
dirId: undefined,
})
const app = React.useContext(AppContext)
const [modal, contextHolder] = Modal.useModal()
React.useImperativeHandle(ref, () => ({
assets
}), [assets])
React.useEffect(() => {
onChange?.(assets)
}, [assets])
React.useEffect(() => {
if (item?.id) {
getRelatedAssets()
}
}, [item])
const [tableData, total] = React.useMemo(() => {
let newTableData = [...assets??[]]
if (keyword) {
newTableData = (newTableData??[]).filter(item => (item.name??'').indexOf(keyword) !== -1)
}
return [paginate(newTableData, pagination.pageNum, pagination.pageSize), (newTableData??[]).length]
}, [assets, keyword, pagination])
const assetCols = [
{
title: '序号',
dataIndex: 'index',
width:60,
render:(_, __, index)=> ((pagination.pageNum-1)*pagination.pageSize+index+1)
},
{
title: '路径',
dataIndex: 'relatedDataAssetPath',
},
{
title: '资产编码',
dataIndex: 'relatedDataAssetCode',
},
{
title: '名称',
dataIndex: 'relatedDataAssetEnName',
},
{
title: '操作',
dataIndex: 'action',
width: 80,
render: (_, record) => {
return (
<Space>
<a onClick={(e) => {
e.stopPropagation();
setDetailParams({
visible: true,
id: record?.relatedDataAssetId,
})
}}>
详情
</a>
</Space>
)
}
}
]
const getRelatedAssets = () => {
setLoadingAssets(true)
let url = (reference===AssetDraftReference)?'assetmanage.getDraftRelatedAssets':'assetmanage.getRelatedAssets'
let params = (reference===AssetDraftReference)?{
draftId: item?.id
}:{
dataAssetId: item?.id
}
dispatch({
type: url,
payload: params,
callback: (data) => {
setLoadingAssets(false)
setAssets(data)
},
error: () => {
setLoadingAssets(false)
}
})
}
const onEditClick = () => {
setSelectResourceParams({
visible: true,
item,
type: 'asset',
})
}
const onDeleteClick = () => {
setAssets(prevAssets => {
const filterData = (prevAssets??[]).filter(item => (selectedRows??[]).map(_item => _item.relatedAssetId).indexOf(item.relatedAssetId)===-1)
return filterData
})
setSelectedRows(prevSelectedRows => {
return []
})
}
const onSelectResourceCancel = (data) => {
setSelectResourceParams({
visible: false,
item: undefined,
type: undefined
})
if (data) {
setAssets(prevAssets => {
const filterData = (data??[]).filter(item => (prevAssets??[]).map(_item => _item.relatedDataAssetId).indexOf(item.relatedDataAssetId)===-1)
return [...prevAssets??[], ...filterData]
})
}
}
return (
<div>
<div style={{ display: 'flex', justifyContent: 'space-between' }}>
{
action !== 'detail' ? <Space>
<Button onClick={onEditClick}>编辑</Button>
<Tooltip title={(selectedRows??[]).length===0?'请先选择资产':''}>
<Button disabled={(selectedRows??[]).length===0} onClick={onDeleteClick}>删除</Button>
</Tooltip>
</Space> : <div />
}
<Input size="middle"
placeholder='搜索资产名称'
value={keyword}
bordered={true} allowClear
style={{ width: 200 }}
onChange={(e) => {
setPagination({...pagination, pageNum: 1})
setKeyword(e.target.value)
}} />
</div>
<div className='mt-3'>
<Table
extraColWidth={32}
rowKey='relatedDataAssetId'
loading={loadingAssets}
columns={assetCols}
dataSource={tableData??[]}
pagination={false}
rowSelection={{
selectedRowKeys: (selectedRows??[]).map(item => item.relatedDataAssetId),
onChange: (selectedRowKeys, selectedRows) => {
setSelectedRows(selectedRows)
},
}}
/>
{
(total!==0) && <Pagination
className="text-center my-3"
showSizeChanger
onChange={(page,size) => {
setPagination({ pageNum: page, pageSize: size })
}}
current={pagination.pageNum}
pageSize={pagination.pageSize}
defaultCurrent={1}
total={total}
showTotal={() => `共${total??0}项`}
/>
}
</div>
<SelectResource
{...selectResourceParams}
onCancel={onSelectResourceCancel}
/>
<AssetDetailDrawer
{...detailParams}
readonly={true}
onCancel={() => {
setDetailParams({
visible: false,
id: undefined,
dirId: undefined,
})
}}
/>
{contextHolder}
</div>
)
})
export default FC
\ No newline at end of file
......@@ -238,7 +238,7 @@ const FC = (props) => {
type: 'assetmanage.listFilterElementsGroupByType',
payload: {
templateType: currentTemplate?.type,
isAdmin: false
isAdmin: true
},
callback: data => {
setLoadingElements(false)
......@@ -261,7 +261,6 @@ const FC = (props) => {
keyword: args.keyword??'',
recursive: true,
templateType: currentTemplate?.type,
checkPermission: true,
},
callback: data => {
setLoading(false)
......
......@@ -34,11 +34,9 @@ const FC = ({ visible, item, type, onCancel }) => {
if (type === 'asset') {
setWaiting(true)
dispatch({
type: 'assetmanage.fillRelatedAssetsInfo',
type: 'assetmanage.fillRelationDisplayInfo',
payload: {
params: {
dataAssetIds: (selectedRows??[]).map(item => item.id).toString()
}
relatedDataAssetIds: (selectedRows??[]).map(item => item.id).toString()
},
callback: (data) => {
setWaiting(false)
......
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