Commit 92905c60 by zhaochengxiang

资产调整

parent fc7c399f
...@@ -9,6 +9,18 @@ export function* getLogs(payload) { ...@@ -9,6 +9,18 @@ export function* getLogs(payload) {
return yield call(service.getLogs, payload); return yield call(service.getLogs, payload);
} }
export function* listElements() {
return yield call(service.listElements);
}
export function* listFilterElementIds() {
return yield call(service.listFilterElementIds);
}
export function* setupFilterElementIds(payload) {
return yield call(service.setupFilterElementIds, payload);
}
export function* addOrUpdateDataAsset(payload) { export function* addOrUpdateDataAsset(payload) {
return yield call(service.addOrUpdateDataAsset, payload); return yield call(service.addOrUpdateDataAsset, payload);
} }
...@@ -21,9 +33,6 @@ export function* getDataAssetDetail(payload) { ...@@ -21,9 +33,6 @@ export function* getDataAssetDetail(payload) {
return yield call(service.getDataAssetDetail, payload); return yield call(service.getDataAssetDetail, payload);
} }
export function* listBasicAttrs(payload) {
return yield call(service.listBasicAttrs, payload);
}
export function* listDataAssetsByPage(payload) { export function* listDataAssetsByPage(payload) {
return yield call(service.listDataAssetsByPage, payload); return yield call(service.listDataAssetsByPage, payload);
} }
......
...@@ -8,6 +8,18 @@ export function getLogs(payload) { ...@@ -8,6 +8,18 @@ export function getLogs(payload) {
return GetJSON("/dataassetmanager/elementApi/listOperationLogsByPage", payload); return GetJSON("/dataassetmanager/elementApi/listOperationLogsByPage", payload);
} }
export function listElements() {
return PostJSON("/dataassetmanager/elementApi/listElements");
}
export function listFilterElementIds() {
return GetJSON("/dataassetmanager/elementApi/listFilterElementIds");
}
export function setupFilterElementIds(payload) {
return PostJSON2("/dataassetmanager/elementApi/setupFilterElementIds", payload);
}
export function addOrUpdateDataAsset(payload) { export function addOrUpdateDataAsset(payload) {
return PostJSON("/dataassetmanager/dataAssetApi/addOrUpdateDataAsset", payload); return PostJSON("/dataassetmanager/dataAssetApi/addOrUpdateDataAsset", payload);
} }
...@@ -20,10 +32,6 @@ export function getDataAssetDetail(payload) { ...@@ -20,10 +32,6 @@ export function getDataAssetDetail(payload) {
return GetJSON("/dataassetmanager/dataAssetApi/getDataAssetDetail", payload); return GetJSON("/dataassetmanager/dataAssetApi/getDataAssetDetail", payload);
} }
export function listBasicAttrs(payload) {
return GetJSON("/dataassetmanager/dataAssetApi/listBasicAttrs", payload);
}
export function listDataAssetsByPage(payload) { export function listDataAssetsByPage(payload) {
return GetJSON("/dataassetmanager/dataAssetApi/listDataAssetsByPage", payload); return GetJSON("/dataassetmanager/dataAssetApi/listDataAssetsByPage", payload);
} }
......
import React, { useEffect, useState } from "react" import React, { useEffect, useState } from "react";
import { Modal, Typography } from "antd" import { Modal, Typography } from "antd";
import AssetItem from './AssetItem'; import AssetItem from './AssetItem';
import { dispatch } from '../../../../model';
const AssetDetail = (props)=>{ const AssetDetail = (props)=>{
const { onCancel,visible, item } = props const { onCancel, visible, id } = props;
const [ asset, setAsset ] = useState('');
const [ assetName, setAssetName ] = useState(''); const [ assetName, setAssetName ] = useState('');
useEffect(() => { useEffect(() => {
if (item) { if ((id||'') !== '') {
const index = (item.elements||[]).findIndex(element => element.name==='中文名称'); getAssetThenGetAssetName();
}
//eslint-disable-next-line react-hooks/exhaustive-deps
}, [ id ])
const getAssetThenGetAssetName = () => {
dispatch({
type: 'assetmanage.getDataAssetDetail',
payload: {
dataAssetId: id
},
callback: data => {
setAsset(data);
getAssetName(data);
}
})
}
const getAssetName = (data) => {
if (data) {
const index = (data.elements||[]).findIndex(element => element.name==='中文名称');
if (index !== -1) { if (index !== -1) {
setAssetName(item.elements[index].value||''); setAssetName(data.elements[index].value||'');
}
} }
} }
//eslint-disable-next-line react-hooks/exhaustive-deps
}, [ item ])
return( return(
<Modal <Modal
...@@ -34,7 +55,7 @@ const AssetDetail = (props)=>{ ...@@ -34,7 +55,7 @@ const AssetDetail = (props)=>{
onCancel={()=>{ onCancel && onCancel()}} onCancel={()=>{ onCancel && onCancel()}}
footer={null} footer={null}
> >
<AssetItem data={item} /> <AssetItem data={asset} />
</Modal> </Modal>
) )
} }
......
import React, { useEffect, useState } from 'react';
import { Modal, Form, Input, Space, Button } from 'antd';
import { showMessage } from '../../../../util';
import { dispatch } from '../../../../model';
const AssetEdit = (props) => {
const { onCancel, visible, action, id, nodeId } = props;
const [ form ] = Form.useForm();
const [ confirmLoading, setConfirmLoading ] = useState(false);
const [ elements, setElements ] = useState([]);
const [ asset, setAsset ] = useState('');
useEffect(() => {
if (visible) {
if (action === 'add') {
getAllElements();
} else if (id) {
getAllElements(() => {
getAsset();
});
}
}
//eslint-disable-next-line react-hooks/exhaustive-deps
}, [ visible, action, id ])
const getAllElements = ( cb = null ) => {
dispatch({
type: 'assetmanage.listElements',
callback: data => {
setElements(data||[]);
if (action === 'add') {
let _fieldsValue = {};
(data||[]).forEach(element => {
if (element.manualMaintain === '是') {
_fieldsValue[element.name] = '';
}
})
form.setFieldsValue(_fieldsValue);
}
cb && cb();
}
})
}
const getAsset = () => {
dispatch({
type: 'assetmanage.getDataAssetDetail',
payload: {
dataAssetId: id
},
callback: data => {
setAsset(data);
let _fieldsValue = {};
(data.elements||[]).forEach(element => {
if (element.manualMaintain === '是') {
_fieldsValue[element.name] = element.value;
}
})
form.setFieldsValue(_fieldsValue);
}
})
}
const onOk = async() => {
try {
const row = await form.validateFields();
const newElements = [...elements];
(newElements||[]).forEach(element => {
if (row.hasOwnProperty(element.name)) {
element.value = row[element.name];
}
});
dispatch({
type: 'assetmanage.addOrUpdateDataAsset',
payload: {
params: {
dirId: nodeId
},
data: action==='add' ? { elements: newElements } : { ...asset, elements: newElements }
},
callback: () => {
setConfirmLoading(false);
onCancel && onCancel(true);
showMessage("success",(action==='add')?"新增成功":"修改成功");
},
error: () => {
setConfirmLoading(false);
}
})
} catch (errInfo) {
console.log('Validate Failed:', errInfo);
setConfirmLoading(false);
}
}
const formItemLayout = {
labelCol: {
xs: { span: 24 },
sm: { span: 5 },
},
wrapperCol: {
xs: { span: 24 },
sm: { span: 17 },
},
};
return (
<Modal
forceRender
title='资产信息'
visible={ visible }
width={ 600 }
onCancel={() => { onCancel && onCancel(); } }
footer={
<Space>
<Button type="primary" onClick={ onOk } loading={ confirmLoading }>提交</Button>
<Button onClick={() => onCancel && onCancel() }>返回</Button>
</Space>
}
>
<Form {...formItemLayout} form={form}>
{ (elements||[]).map((element, index) => {
return (
element.manualMaintain === '是' ? (
<Form.Item
label={element.name}
name={element.name}
key={index}
>
<Input />
</Form.Item>
) : null
)
})}
</Form>
</Modal>
);
}
export default AssetEdit;
\ No newline at end of file
import React,{useState, useEffect,} from "react"
import {Modal,Form,Input,Space,Button} from "antd"
import { dispatch } from '../../../../model';
import { showMessage } from '../../../../util';
const AssetModal = (props)=>{
const {handleCancle,visible,editBox,addType,nodeId,attrBox,setPageNumber,pageNumber} = props
const [form] = Form.useForm()
const [saveLoad,setSaveLod] = useState(false)
useEffect(()=>{
if(visible){
reset()
}
//eslint-disable-next-line react-hooks/exhaustive-deps
},[visible])
// useEffect(()=>{
// if(attrBox){
// reset()
// }
// //eslint-disable-next-line react-hooks/exhaustive-deps
// },[attrBox])
const handleOk =async()=>{
setSaveLod(true)
form.validateFields().then((value)=>{
if(addType){
let elements = [...attrBox];
(elements||[]).forEach((element) => {
for (let key in value) {
if (key === element.name) {
element.value = value[key];
}
}
});
dispatch({
type: 'assetmanage.addOrUpdateDataAsset',
payload: { params:{dirId: nodeId},data: { elements } },
callback: data => {
setSaveLod(false)
handleCancle()
setPageNumber({...pageNumber,rebuild:new Date().getTime()})
showMessage("success","新增成功")
},
error: () => {
}
})
}else{
let elements = [...attrBox];
(elements||[]).forEach((element) => {
for (let key in value) {
if (key === element.name) {
element.value = value[key];
}
}
});
dispatch({
type: 'assetmanage.addOrUpdateDataAsset',
payload: { params:{dirId: nodeId},data: { ...editBox, elements } },
callback: data => {
setSaveLod(false)
setPageNumber({...pageNumber,rebuild:new Date().getTime()})
handleCancle()
showMessage("success","修改成功")
},
error: () => {
}
})
}
}).catch(()=>{
setSaveLod(false)
})
}
const reset = () =>{
form.resetFields()
}
const formItemLayout = {
labelCol: {
xs: { span: 24 },
sm: { span: 5 },
},
wrapperCol: {
xs: { span: 24 },
sm: { span: 17 },
},
};
return(
<Modal
forceRender
title={`资产信息`}
visible={visible}
width={600}
onCancel={()=>{handleCancle()}}
// style={{ top: 30}}
footer={
<Space>
<Button type="primary" onClick={handleOk} loading={saveLoad}>提交</Button>
<Button onClick={()=>reset()} >重置</Button>
<Button onClick={()=>handleCancle()}>返回</Button>
</Space>
}
>
<Form {...formItemLayout} form={form}>
{attrBox.map((item,i)=>{
return (
item.manualMaintain === '是' ?(
<Form.Item
label={item.name}
name={item.name}
key={`form${i}`}
initialValue={item.value||''}
>
<Input />
</Form.Item>
) : null
)
})}
</Form>
</Modal>
)
}
export default AssetModal;
\ No newline at end of file
...@@ -5,7 +5,7 @@ import { EditOutlined, ReconciliationOutlined, DeleteOutlined } from '@ant-desi ...@@ -5,7 +5,7 @@ import { EditOutlined, ReconciliationOutlined, DeleteOutlined } from '@ant-desi
import ImportElement from './ImportElement'; import ImportElement from './ImportElement';
import FilterElement from './FilterElement'; import FilterElement from './FilterElement';
import ImportAsset from './ImportAsset'; import ImportAsset from './ImportAsset';
import AssetModal from "./AssetModal" import AssetEdit from './AssetEdit';
import AssetDetail from "./AssetDetail" import AssetDetail from "./AssetDetail"
import AssetItem from './AssetItem'; import AssetItem from './AssetItem';
import { dispatch } from '../../../../model'; import { dispatch } from '../../../../model';
...@@ -14,73 +14,61 @@ import { showMessage, showNotifaction } from '../../../../util'; ...@@ -14,73 +14,61 @@ import { showMessage, showNotifaction } from '../../../../util';
import "./AssetTable.less"; import "./AssetTable.less";
const AssetTable = (props) =>{ const AssetTable = (props) =>{
const {nodeId, node} = props
const [tableLoad,setTableLoad] = useState(false) const { nodeId, node } = props
const [attrBox,setAttrBox] = useState([]) const [ loading, setLoading ] = useState(false);
const [editBox,setEditBox] = useState({})
const [tableBox,setTableBox] = useState({dataList:[],total:0,})
const [pageNumber,setPageNumber] = useState({page:1,size:20,rebuild:0})
const {dataList,total} = tableBox
const {page,size,rebuild} = pageNumber
const [modal, contextHolder] = Modal.useModal();
const [visible,setVisible] = useState({visible:false,addtype:true})
const [visible2,setVisible2] = useState({visible:false,box:{}})
const [selectBox,setSelectBox] = useState([])
const [checkValue,setCheckValue] = useState(false)
const [ assetNames, setAssetNames ] = useState([]); const [ assetNames, setAssetNames ] = useState([]);
const [ assets, setAssets ] = useState([]);
const [ total, setTotal ] = useState(0);
const [ selectedKeys, setSelectedKeys ] = useState([]);
const [ checkAllValue, setCheckAllValue ] = useState(false);
const [ importAssetVisible, setImportAssetVisible ] = useState(false); const [ importAssetVisible, setImportAssetVisible ] = useState(false);
const [ importElementVisible, setImportElementVisible ] = useState(false); const [ importElementVisible, setImportElementVisible ] = useState(false);
const [ filterElementVisible, setFilterElementVisible ] = useState(false); const [ filterElementVisible, setFilterElementVisible ] = useState(false);
const [ assetEditVisible, setAssetEditVisible ] = useState(false);
const [ assetDetailVisible, setAssetDetailVisible ] = useState(false);
const [ currentAssetId, setCurrentAssetId ] = useState('');
const [ assetEditAction, setAssetEditAction ] = useState('');
const [ pagination, setPagination ] = useState( { pageNum: 1, pageSize: 20 } );
const { pageNum, pageSize } = pagination;
useEffect(()=>{ const [ modal, contextHolder ] = Modal.useModal();
getListBasicAttrs();
//eslint-disable-next-line react-hooks/exhaustive-deps
},[])
useEffect(()=>{ useEffect(()=>{
if(nodeId) { if ((nodeId||'') !== '' ) {
setPageNumber({...pageNumber,page:1,rebuild:new Date().getTime()}); setPagination({ ...pagination, pageNum: 1 });
setSelectedKeys([]);
setCheckAllValue(false);
} }
//eslint-disable-next-line react-hooks/exhaustive-deps //eslint-disable-next-line react-hooks/exhaustive-deps
},[nodeId]) }, [ nodeId ])
useEffect(()=>{ useEffect(()=>{
if(nodeId&&rebuild!==0) { if ((nodeId||'') !== '' ) {
getTable(); getTable();
} }
//eslint-disable-next-line react-hooks/exhaustive-deps //eslint-disable-next-line react-hooks/exhaustive-deps
},[rebuild]) }, [ pagination ])
const changeCurrent=(page,size)=>{ const changeCurrent=(page,size)=>{
setPageNumber({page,size,rebuild:new Date().getTime()}); setPagination({ pageNum: page, pageSize: size });
}
const getListBasicAttrs=()=>{
dispatch({
type: 'assetmanage.listBasicAttrs',
payload: null,
callback: dataBox => {
setAttrBox(dataBox);
}
})
} }
const getTable=()=>{ const getTable=()=>{
setTableLoad(true) setLoading(true);
dispatch({ dispatch({
type: 'assetmanage.listDataAssetsByPage', type: 'assetmanage.listDataAssetsByPage',
payload: { payload: {
dirId: nodeId, dirId: nodeId,
pageNum: page, pageNum,
pageSize: size, pageSize,
keyword: '' keyword: ''
}, },
callback: dataBox => { callback: data => {
const _assetNames = []; const _assetNames = [];
(dataBox.data||[]).forEach((table) => { (data.data||[]).forEach((asset) => {
(table.elements||[]).forEach((element) => { (asset.elements||[]).forEach((element) => {
if (element.name === '中文名称') { if (element.name === '中文名称') {
_assetNames.push(element.value||''); _assetNames.push(element.value||'');
} }
...@@ -88,49 +76,48 @@ const AssetTable = (props) =>{ ...@@ -88,49 +76,48 @@ const AssetTable = (props) =>{
}) })
setAssetNames(_assetNames); setAssetNames(_assetNames);
setTableBox({dataList:dataBox.data,total:dataBox.total}) setAssets(data.data||[]);
setSelectBox([]) setTotal(data.total||0);
setCheckValue(false) setLoading(false);
setTableLoad(false)
}, },
error: () => { error: () => {
setTableLoad(false) setLoading(false)
} }
}) })
} }
const add =()=>{ const addAsset =()=>{
setVisible({addtype:true,visible:true}) setAssetEditAction('add');
setAssetEditVisible(true);
} }
const handleCancle=()=>{ const onAssetEditCancel=(refresh = false) => {
let box = [ ...attrBox]; setAssetEditVisible(false);
for (let element of box){ refresh && getTable();
element.value = ''
}
setAttrBox(box);
setVisible({...visible,visible:false})
} }
const edit = (data) =>{ const editAsset = (item) =>{
setAttrBox(data.elements||[]) setCurrentAssetId(item.id);
setEditBox(data) setAssetEditAction('edit');
setVisible({addtype:false,visible:true}) setAssetEditVisible(true);
} }
const deleteAsset = (item) =>{
const del = (data) =>{
modal.confirm({ modal.confirm({
title: '提示', title: '提示',
content: '该资产在所有目录上唯一存在,移除后,你可以前往“资产回收站”重新挂载。', content: '该资产在所有目录上唯一存在,移除后,你可以前往“资产回收站”重新挂载。',
onOk: () => { onOk: () => {
dispatch({ dispatch({
type: 'assetmanage.unloadDataAssets', type: 'assetmanage.unloadDataAssets',
payload: {params:{dirId:nodeId},data:[`${data.id}`]}, payload: {
callback: dataBox => { params: {
setPageNumber({...pageNumber,rebuild:new Date().getTime()}) dirId: nodeId
},
data:[ item.id ]
},
callback: () => {
showMessage("success","删除成功") showMessage("success","删除成功")
getTable();
}, },
error: () => { error: () => {
} }
...@@ -143,56 +130,57 @@ const AssetTable = (props) =>{ ...@@ -143,56 +130,57 @@ const AssetTable = (props) =>{
window.open(`/api/dataassetmanager/dataAssetApi/export?parentPath=${node.path||''}`); window.open(`/api/dataassetmanager/dataAssetApi/export?parentPath=${node.path||''}`);
} }
const more=(data)=>{ const detailAsset = (item)=>{
setVisible2({box:data,visible:true}) setCurrentAssetId(item.id);
setAssetDetailVisible(true);
} }
const handleCancle2=()=>{ const onAssetDetailCancel = () => {
setVisible2({...visible2,visible:false}) setAssetDetailVisible(false);
} }
const onCheck =(checked)=>{ const onCheckAll =(checked)=>{
if(checked){ setCheckAllValue(checked);
let box = []
if(dataList&&dataList[0]!==undefined){
for (let data of dataList){
box.push(String(data.id))
}
}
setSelectBox(box)
}else{
setSelectBox([])
}
setCheckValue(checked)
}
if (checked) {
const ids = [];
(assets||[]).forEach(asset => {
ids.push(asset.id||'');
})
const onChange=(checkedValue)=>{ setSelectedKeys(ids);
if(checkedValue.length===dataList.length){ } else {
setCheckValue(true) setSelectedKeys([]);
}else{ }
setCheckValue(false)
} }
setSelectBox(checkedValue)
const onAssetCheckboxChange = (value) => {
setSelectedKeys(value||[]);
setCheckAllValue((value||[]).length === (assets||[]).length);
} }
const dels=()=>{ const deleteAssets = () => {
if(selectBox&&selectBox[0]!==undefined){ if ((selectedKeys||[]).length > 0) {
modal.confirm({ modal.confirm({
title: '提示', title: '提示',
content: `你已选择了${selectBox.length}个资产,确定把它们都从挂载目录上移除吗?`, content: `你已选择了${selectedKeys.length}个资产,确定把它们都从挂载目录上移除吗?`,
onOk: () => { onOk: () => {
dispatch({ dispatch({
type: 'assetmanage.unloadDataAssets', type: 'assetmanage.unloadDataAssets',
payload: {params:{dirId:nodeId},data:selectBox}, payload: {
callback: dataBox => { params:
setPageNumber({...pageNumber,page:1,rebuild:new Date().getTime()}) {
showMessage("success","删除成功") dirId: nodeId
},
data: selectedKeys
},
callback: () => {
showMessage("success","删除成功");
getTable();
}, },
error: () => { error: () => {
} }
}) })
} }
}) })
}else{ }else{
...@@ -226,8 +214,8 @@ const AssetTable = (props) =>{ ...@@ -226,8 +214,8 @@ const AssetTable = (props) =>{
<Card <Card
bordered={false} bordered={false}
className="asset-list" className="asset-list"
bodyStyle={{padding:'0 10px'}} bodyStyle={{ padding: '0 10px' }}
headStyle={{padding:10}} headStyle={{ padding: 10 }}
title={ title={
<div className='d-flex'> <div className='d-flex'>
<Button style={{ marginLeft: 'auto' }} type="primary" >资产回收站</Button> <Button style={{ marginLeft: 'auto' }} type="primary" >资产回收站</Button>
...@@ -243,7 +231,12 @@ const AssetTable = (props) =>{ ...@@ -243,7 +231,12 @@ const AssetTable = (props) =>{
padding: '10px 0', padding: '10px 0',
borderBottom:'1px solid #f0f0f0' borderBottom:'1px solid #f0f0f0'
}} > }} >
<Switch checkedChildren="全不选" unCheckedChildren="全选" checked={checkValue} onChange={onCheck} defaultChecked={false} style={{marginTop:4}}/> <Switch
checkedChildren="全不选"
unCheckedChildren="全选"
checked={ checkAllValue }
onChange={ onCheckAll }
/>
<div> <div>
<Space> <Space>
<span>资产要素:</span> <span>资产要素:</span>
...@@ -259,7 +252,7 @@ const AssetTable = (props) =>{ ...@@ -259,7 +252,7 @@ const AssetTable = (props) =>{
<Button type="primary" onClick={onExportElementBtnClick}>导出</Button> <Button type="primary" onClick={onExportElementBtnClick}>导出</Button>
<Popover <Popover
placement="bottom" placement="bottom"
content={<FilterElement elements={attrBox} onCancel={onFilterElementVisibleChange} />} content={<FilterElement onCancel={onFilterElementVisibleChange} />}
title='资产要素过滤' title='资产要素过滤'
visible={filterElementVisible} visible={filterElementVisible}
onVisibleChange={onFilterElementVisibleChange} onVisibleChange={onFilterElementVisibleChange}
...@@ -269,11 +262,11 @@ const AssetTable = (props) =>{ ...@@ -269,11 +262,11 @@ const AssetTable = (props) =>{
</Space> </Space>
<Space className='ml-5'> <Space className='ml-5'>
<span>资产:</span> <span>资产:</span>
<Button type="primary" onClick={add}>新增</Button> <Button type="primary" onClick={ addAsset }>新增</Button>
<Button type="primary" danger onClick={dels} >删除</Button> <Button type="primary" danger onClick={ deleteAssets } >删除</Button>
<Popover <Popover
placement="bottomRight" placement="bottomRight"
content={<ImportAsset node={node} onCancel={onImportAssetVisibleChange} />} content={ <ImportAsset node={node} onCancel={onImportAssetVisibleChange} /> }
title='资产导入' title='资产导入'
visible={importAssetVisible} visible={importAssetVisible}
onVisibleChange={onImportAssetVisibleChange} onVisibleChange={onImportAssetVisibleChange}
...@@ -286,15 +279,19 @@ const AssetTable = (props) =>{ ...@@ -286,15 +279,19 @@ const AssetTable = (props) =>{
</Space> </Space>
</div> </div>
</div> </div>
<Checkbox.Group style={{width:'100%'}} onChange={onChange} value={selectBox}> <Checkbox.Group
style={{ width: '100%' }}
onChange={ onAssetCheckboxChange }
value={ selectedKeys }
>
<List <List
loading={tableLoad} loading={loading}
itemLayout="vertical" itemLayout="vertical"
dataSource={dataList || []} dataSource={ assets||[] }
footer={null} footer={null}
renderItem={(item, index) => ( renderItem={(item, index) => (
<List.Item> <List.Item>
<Skeleton title={false} loading={tableLoad} active> <Skeleton title={false} loading={loading} active>
<List.Item.Meta <List.Item.Meta
title={ title={
<> <>
...@@ -305,13 +302,13 @@ const AssetTable = (props) =>{ ...@@ -305,13 +302,13 @@ const AssetTable = (props) =>{
</div> </div>
<Space className='m-3' style={{ marginLeft: 'auto' }} size='small'> <Space className='m-3' style={{ marginLeft: 'auto' }} size='small'>
<Tooltip placement='bottom' title={'修改'}> <Tooltip placement='bottom' title={'修改'}>
<Button icon={<EditOutlined />} size='small' onClick={() => { edit(item); }} /> <Button icon={<EditOutlined />} size='small' onClick={() => { editAsset(item); }} />
</Tooltip> </Tooltip>
<Tooltip placement='bottom' title={'详情'}> <Tooltip placement='bottom' title={'详情'}>
<Button icon={<ReconciliationOutlined />} size='small' onClick={() => { more(item); }} /> <Button icon={<ReconciliationOutlined />} size='small' onClick={() => { detailAsset(item); }} />
</Tooltip> </Tooltip>
<Tooltip placement='bottom' title={'删除'}> <Tooltip placement='bottom' title={'删除'}>
<Button icon={<DeleteOutlined />} size='small' onClick={() => { del(item); }} /> <Button icon={<DeleteOutlined />} size='small' onClick={() => { deleteAsset(item); }} />
</Tooltip> </Tooltip>
</Space> </Space>
</div> </div>
...@@ -331,18 +328,25 @@ const AssetTable = (props) =>{ ...@@ -331,18 +328,25 @@ const AssetTable = (props) =>{
showQuickJumper showQuickJumper
onChange={changeCurrent} onChange={changeCurrent}
onShowSizeChange={changeCurrent} onShowSizeChange={changeCurrent}
current={page} current={pageNum}
pageSize={size} pageSize={pageSize}
defaultCurrent={1} defaultCurrent={1}
total={total} total={total}
showTotal={total => `共 ${total} 条`} showTotal={total => `共 ${total} 条`}
/> />
</Checkbox.Group> </Checkbox.Group>
<AssetModal visible={visible.visible} attrBox={attrBox} editBox={editBox} addType={visible.addtype} handleCancle={handleCancle} nodeId={nodeId} setPageNumber={setPageNumber} pageNumber={pageNumber}/> {/* <AssetModal visible={visible.visible} attrBox={attrBox} editBox={editBox} addType={visible.addtype} handleCancle={handleCancle} nodeId={nodeId} setPageNumber={setPageNumber} pageNumber={pageNumber}/> */}
<AssetEdit
visible={assetEditVisible}
action={assetEditAction}
id={currentAssetId}
nodeId={nodeId}
onCancel={onAssetEditCancel}
/>
<AssetDetail <AssetDetail
visible={visible2.visible} visible={assetDetailVisible}
item={visible2.box} id={currentAssetId}
onCancel={handleCancle2} onCancel={onAssetDetailCancel}
/> />
{contextHolder} {contextHolder}
</Card> </Card>
......
import React, { useEffect, useState } from 'react'; import React, { useEffect, useState } from 'react';
import { Avatar, Row, Col, Divider, Checkbox, Typography, Space, Button, Switch } from 'antd'; import { Avatar, Row, Col, Divider, Checkbox, Typography, Space, Button, Switch } from 'antd';
import { dispatch } from '../../../../model';
import './FilterElement.less'; import './FilterElement.less';
const colors = [ const colors = [
...@@ -17,19 +18,38 @@ const colors = [ ...@@ -17,19 +18,38 @@ const colors = [
const FilterElement = (props) => { const FilterElement = (props) => {
const { elements, onCancel } = props; const { onCancel } = props;
const [ elements, setElements ] = useState([]);
const [ typesOfElements, setTypesOfElements ] = useState([]); const [ typesOfElements, setTypesOfElements ] = useState([]);
const [ selectedKeys, setSelectedKeys ] = useState([]); const [ selectedKeys, setSelectedKeys ] = useState([]);
useEffect(() => { useEffect(() => {
if (elements) { getAllFilterElementIdsThenGetAllElements();
convertData();
}
//eslint-disable-next-line react-hooks/exhaustive-deps //eslint-disable-next-line react-hooks/exhaustive-deps
}, [ elements ]); }, []);
const getAllFilterElementIdsThenGetAllElements = () => {
dispatch({
type: 'assetmanage.listFilterElementIds',
callback: data => {
setSelectedKeys(data||[]);
getAllElements();
}
})
}
const getAllElements = () => {
dispatch({
type: 'assetmanage.listElements',
callback: data => {
setElements(data||[]);
convertElements(data||[]);
}
})
}
const convertData = () => { const convertElements = (elements) => {
const _typesOfElements = []; const _typesOfElements = [];
const _types = []; const _types = [];
...@@ -72,7 +92,16 @@ const FilterElement = (props) => { ...@@ -72,7 +92,16 @@ const FilterElement = (props) => {
} }
const onOk = () => { const onOk = () => {
onCancel && onCancel();
dispatch({
type: 'assetmanage.setupFilterElementIds',
payload: {
data: selectedKeys
},
callback: () => {
onCancel && onCancel(false, true);
}
})
} }
return ( return (
......
...@@ -9,7 +9,7 @@ import './LeftTree.less'; ...@@ -9,7 +9,7 @@ import './LeftTree.less';
const {TreeNode} = Tree const {TreeNode} = Tree
const LeftTree = (props)=>{ const LeftTree = (props)=>{
const {setNodeId,nodeId, setNode} = props const {setNodeId,nodeId, setNode, readOnly=false} = props
const [treeBox,setTreeBox] = useState([]) const [treeBox,setTreeBox] = useState([])
const [dataList,setDataList] = useState([]) const [dataList,setDataList] = useState([])
...@@ -35,10 +35,10 @@ const LeftTree = (props)=>{ ...@@ -35,10 +35,10 @@ const LeftTree = (props)=>{
}//展开树 }//展开树
const selectNode=(selectedKeys,e)=>{ const selectNode=(selectedKeys,e)=>{
// console.log('selectedKeys',selectedKeys) console.log('selectedKeys',selectedKeys)
// console.log('e',e) console.log('e',e)
if(e.selectedNodes[0]){ if(e.selectedNodes[0]){
setNodeId(selectedKeys[0]) setNodeId && setNodeId(selectedKeys[0])
getNodeDetail(selectedKeys[0]) getNodeDetail(selectedKeys[0])
setNodeBox({...nodeBox,selectKey:selectedKeys,dataBox:e.selectedNodes[0].dataRef}) setNodeBox({...nodeBox,selectKey:selectedKeys,dataBox:e.selectedNodes[0].dataRef})
}else{ }else{
...@@ -54,7 +54,7 @@ const LeftTree = (props)=>{ ...@@ -54,7 +54,7 @@ const LeftTree = (props)=>{
payload: {dirId:nodeId}, payload: {dirId:nodeId},
callback: dataBox => { callback: dataBox => {
setDetailBox(dataBox) setDetailBox(dataBox)
setNode(dataBox) setNode && setNode(dataBox)
}, },
error: () => { error: () => {
} }
...@@ -307,7 +307,7 @@ const LeftTree = (props)=>{ ...@@ -307,7 +307,7 @@ const LeftTree = (props)=>{
<Card <Card
className={"asset-tree"} className={"asset-tree"}
title={<Space> title={readOnly ? null : <Space>
<Tooltip title="新增目录"> <Tooltip title="新增目录">
<Button <Button
shape="circle" shape="circle"
......
import React from "react";
import { Modal } from "antd";
import LeftTree from '../AssetManage/components/LeftTree';
const AssetMount = (props)=>{
const { onCancel,visible, item } = props
return(
<Modal
title='挂载详情'
visible={visible}
width={800}
onCancel={()=>{ onCancel && onCancel()}}
>
<LeftTree readOnly={true} />
</Modal>
)
}
export default AssetMount;
\ No newline at end of file
...@@ -4,6 +4,7 @@ import { ReconciliationOutlined, DeleteOutlined, UndoOutlined } from '@ant-desi ...@@ -4,6 +4,7 @@ import { ReconciliationOutlined, DeleteOutlined, UndoOutlined } from '@ant-desi
import { dispatchLatest } from '../../../model'; import { dispatchLatest } from '../../../model';
import AssetDetail from '../AssetManage/components/AssetDetail'; import AssetDetail from '../AssetManage/components/AssetDetail';
import AssetMount from './AssetMount';
import './index.less'; import './index.less';
...@@ -15,6 +16,7 @@ const AssetRecycle = (props) => { ...@@ -15,6 +16,7 @@ const AssetRecycle = (props) => {
const [ pagination, setPagination ] = useState( { pageNum: 1, pageSize: 20 } ); const [ pagination, setPagination ] = useState( { pageNum: 1, pageSize: 20 } );
const [ currentAsset, setCurrentAsset ] = useState(null); const [ currentAsset, setCurrentAsset ] = useState(null);
const [ assetDetailVisible, setAssetDetailVisible ] = useState(false); const [ assetDetailVisible, setAssetDetailVisible ] = useState(false);
const [ assetMountVisible, setAssetMountVisible ] = useState(false);
const { pageNum, pageSize } = pagination; const { pageNum, pageSize } = pagination;
...@@ -55,7 +57,7 @@ const AssetRecycle = (props) => { ...@@ -55,7 +57,7 @@ const AssetRecycle = (props) => {
<Button icon={<ReconciliationOutlined />} size='small' onClick={() => { detailItem(record); }} /> <Button icon={<ReconciliationOutlined />} size='small' onClick={() => { detailItem(record); }} />
</Tooltip> </Tooltip>
<Tooltip placement='bottom' title='挂载'> <Tooltip placement='bottom' title='挂载'>
<Button icon={<UndoOutlined />} size='small' onClick={() => { recycleItem(record); }} /> <Button icon={<UndoOutlined />} size='small' onClick={() => { mountItem(record); }} />
</Tooltip> </Tooltip>
<Tooltip placement='bottom' title='删除'> <Tooltip placement='bottom' title='删除'>
<Button icon={<DeleteOutlined />} size='small' onClick={() => { deleteItem(record); }} /> <Button icon={<DeleteOutlined />} size='small' onClick={() => { deleteItem(record); }} />
...@@ -90,8 +92,9 @@ const AssetRecycle = (props) => { ...@@ -90,8 +92,9 @@ const AssetRecycle = (props) => {
setAssetDetailVisible(true); setAssetDetailVisible(true);
} }
const recycleItem = (record) => { const mountItem = (record) => {
setCurrentAsset(record);
setAssetMountVisible(true);
} }
const deleteItem = (record) => { const deleteItem = (record) => {
...@@ -102,6 +105,10 @@ const AssetRecycle = (props) => { ...@@ -102,6 +105,10 @@ const AssetRecycle = (props) => {
setAssetDetailVisible(false); setAssetDetailVisible(false);
} }
const onAssetMountCancel = () => {
setAssetMountVisible(false);
}
return ( return (
<div className='asset-recycle p-3' style={{ backgroundColor: '#fff' }}> <div className='asset-recycle p-3' style={{ backgroundColor: '#fff' }}>
<Table <Table
...@@ -130,8 +137,13 @@ const AssetRecycle = (props) => { ...@@ -130,8 +137,13 @@ const AssetRecycle = (props) => {
/> />
<AssetDetail <AssetDetail
visible={ assetDetailVisible } visible={ assetDetailVisible }
item = { currentAsset } item={ currentAsset }
onCancel = { onAssetDetailCancel } onCancel={ onAssetDetailCancel }
/>
<AssetMount
visible={ assetMountVisible }
item={ currentAsset }
onCancel={ onAssetMountCancel }
/> />
</div> </div>
); );
......
...@@ -338,8 +338,13 @@ const ImportActionTable = (props) => { ...@@ -338,8 +338,13 @@ const ImportActionTable = (props) => {
const newData = [...data]; const newData = [...data];
const index = newData.findIndex((item) => editingKey === item.iid); const index = newData.findIndex((item) => editingKey === item.iid);
if (index === -1) {
newData.splice(0, 0, {iid: editingKey, ...allValues});
} else if (index !== -1) {
const item = newData[index]; const item = newData[index];
newData.splice(index, 1, { ...item, ...allValues }); newData.splice(index, 1, { ...item, ...allValues });
}
dispatchLatest({ dispatchLatest({
type: 'datamodel.suggest', type: 'datamodel.suggest',
......
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