Commit bc422663 by zhaochengxiang

报表动态

parent 628bb300
...@@ -276,3 +276,19 @@ export function* getDirectoryChild(payload) { ...@@ -276,3 +276,19 @@ export function* getDirectoryChild(payload) {
export function* queryCustomTypeRootDirectory() { export function* queryCustomTypeRootDirectory() {
return yield call(service.queryCustomTypeRootDirectory); return yield call(service.queryCustomTypeRootDirectory);
} }
export function* listSupportReportTypes() {
return yield call(service.listSupportReportTypes)
}
export function* listWorkbooksByType(payload) {
return yield call(service.listWorkbooksByType, payload)
}
export function* getViewUrlByWorkbookId(payload) {
return yield call(service.getViewUrlByWorkbookId, payload)
}
export function* saveWorkbookByType(payload) {
return yield call(service.saveWorkbookByType, payload)
}
\ No newline at end of file
...@@ -283,3 +283,19 @@ export function getDirectoryChild(payload) { ...@@ -283,3 +283,19 @@ export function getDirectoryChild(payload) {
export function queryCustomTypeRootDirectory() { export function queryCustomTypeRootDirectory() {
return GetJSON("/dataassetmanager/directoryApi/queryCustomTypeRootDirectory"); return GetJSON("/dataassetmanager/directoryApi/queryCustomTypeRootDirectory");
} }
export function listSupportReportTypes() {
return GetJSON("/dataassetmanager/reportApi/listSupportReportTypes")
}
export function listWorkbooksByType(payload) {
return GetJSON("/dataassetmanager/reportApi/listWorkbooks", payload)
}
export function getViewUrlByWorkbookId(payload) {
return GetJSON("/dataassetmanager/reportApi/getViewUrlByWorkbookId", payload)
}
export function saveWorkbookByType(payload) {
return PostJSON("/dataassetmanager/reportApi/saveWorkbook", payload)
}
\ No newline at end of file
...@@ -151,6 +151,8 @@ const AssetTable = (props) => { ...@@ -151,6 +151,8 @@ const AssetTable = (props) => {
const [ worksheetModalVisible, setWorksheetModalVisible ] = useState(false); const [ worksheetModalVisible, setWorksheetModalVisible ] = useState(false);
const [ workbookDrawerVisible, setWorkbookDrawerVisible ] = useState(false); const [ workbookDrawerVisible, setWorkbookDrawerVisible ] = useState(false);
const [ biType, setBiType ] = useState(''); const [ biType, setBiType ] = useState('');
const [ reportTypes, setReportTypes ] = useState();
const [ report, setReport ] = useState();
const [ modal, contextHolder ] = Modal.useModal(); const [ modal, contextHolder ] = Modal.useModal();
const anchorId = getQueryParam(AnchorId, props.location.search); const anchorId = getQueryParam(AnchorId, props.location.search);
...@@ -202,6 +204,8 @@ const AssetTable = (props) => { ...@@ -202,6 +204,8 @@ const AssetTable = (props) => {
if (reference===AssetRecycleReference) { if (reference===AssetRecycleReference) {
getFilterElementsGroupThenGetDataAssets(); getFilterElementsGroupThenGetDataAssets();
} }
getReportTypes()
//eslint-disable-next-line react-hooks/exhaustive-deps //eslint-disable-next-line react-hooks/exhaustive-deps
}, [ env ]) }, [ env ])
...@@ -219,6 +223,15 @@ const AssetTable = (props) => { ...@@ -219,6 +223,15 @@ const AssetTable = (props) => {
} }
}) })
const getReportTypes = () => {
dispatch({
type: 'assetmanage.listSupportReportTypes',
callback: data => {
setReportTypes(data)
}
});
}
const getDataAssetLocation = () => { const getDataAssetLocation = () => {
setLoading(true); setLoading(true);
dispatch({ dispatch({
...@@ -538,6 +551,22 @@ const AssetTable = (props) => { ...@@ -538,6 +551,22 @@ const AssetTable = (props) => {
setFilterElementVisible(true); setFilterElementVisible(true);
} }
const onReportAnalyseClick = (val) => {
if ((checkedKeys||[]).length === 0) {
showMessage('warn', '请先选择一个资产');
} else if ((checkedKeys||[]).length > 1) {
showMessage('warn', '只能选择一个资产');
} else {
setReport(val);
setWorksheetModalVisible(true);
}
}
const onReportWorkbookClick = (val) => {
setReport(val);
setWorkbookDrawerVisible(true);
}
const onTableauAnalyseClick = () => { const onTableauAnalyseClick = () => {
if ((checkedKeys||[]).length === 0) { if ((checkedKeys||[]).length === 0) {
showMessage('warn', '请先选择一个资产'); showMessage('warn', '请先选择一个资产');
...@@ -828,35 +857,20 @@ const AssetTable = (props) => { ...@@ -828,35 +857,20 @@ const AssetTable = (props) => {
</Menu.Item> </Menu.Item>
{ {
(reference===AssetManageReference) && <Menu.Item disabled={(checkedKeys||[]).length===0}> reference===AssetManageReference && reportTypes?.map(item =>
<div className='text-center' onClick={onTableauAnalyseClick}> <React.Fragment key={item.code}>
tableau自助分析 <Menu.Item disabled={(checkedKeys||[]).length===0}>
</div> <div className='text-center' onClick={() => { onReportAnalyseClick(item) }}>
</Menu.Item> {`${item.name}自助分析`}
}
{
(reference===AssetManageReference) && <Menu.Item>
<div className='text-center' onClick={onTableauWorkbookClick}>
tableau工作簿
</div>
</Menu.Item>
}
{
(reference===AssetManageReference) && <Menu.Item disabled={(checkedKeys||[]).length===0}>
<div className='text-center' onClick={onSmartBIAnalyseClick}>
smartBI自助分析
</div> </div>
</Menu.Item> </Menu.Item>
} <Menu.Item>
<div className='text-center' onClick={() => { onReportWorkbookClick(item)}}>
{ {`${item.name}工作簿`}
(reference===AssetManageReference) && <Menu.Item>
<div className='text-center' onClick={onSmartBIWorkbookClick}>
smartBI工作簿
</div> </div>
</Menu.Item> </Menu.Item>
</React.Fragment>
)
} }
</Menu> </Menu>
); );
...@@ -875,26 +889,22 @@ const AssetTable = (props) => { ...@@ -875,26 +889,22 @@ const AssetTable = (props) => {
可见列设置 可见列设置
</div> </div>
</Menu.Item> </Menu.Item>
{
reportTypes?.map(item =>
<React.Fragment key={item.code}>
<Menu.Item disabled={(checkedKeys||[]).length===0}> <Menu.Item disabled={(checkedKeys||[]).length===0}>
<div className='text-center' onClick={onTableauAnalyseClick}> <div className='text-center' onClick={() => { onReportAnalyseClick(item) }}>
tableau自助分析 {`${item.name}自助分析`}
</div>
</Menu.Item>
<Menu.Item>
<div className='text-center' onClick={onTableauWorkbookClick}>
tableau工作簿
</div>
</Menu.Item>
<Menu.Item disabled={(checkedKeys||[]).length===0}>
<div className='text-center' onClick={onSmartBIAnalyseClick}>
smartBI自助分析
</div> </div>
</Menu.Item> </Menu.Item>
<Menu.Item> <Menu.Item>
<div className='text-center' onClick={onSmartBIWorkbookClick}> <div className='text-center' onClick={() => { onReportWorkbookClick(item)}}>
smartBI工作簿 {`${item.name}工作簿`}
</div> </div>
</Menu.Item> </Menu.Item>
</React.Fragment>
)
}
</Menu> </Menu>
); );
...@@ -1089,7 +1099,7 @@ const AssetTable = (props) => { ...@@ -1089,7 +1099,7 @@ const AssetTable = (props) => {
onCancel={onAssetDetailDrawerCancel} onCancel={onAssetDetailDrawerCancel}
/> />
<WorksheetModal <WorksheetModal
type={biType} report={report}
visible={ worksheetModalVisible } visible={ worksheetModalVisible }
id={ (checkedKeys||[]).length>0?checkedKeys[0]:'' } id={ (checkedKeys||[]).length>0?checkedKeys[0]:'' }
metadata={ (checkedItems||[]).length>0?checkedItems[0].metadata:{} } metadata={ (checkedItems||[]).length>0?checkedItems[0].metadata:{} }
...@@ -1097,7 +1107,7 @@ const AssetTable = (props) => { ...@@ -1097,7 +1107,7 @@ const AssetTable = (props) => {
/> />
<WorkbookDrawer <WorkbookDrawer
type={biType} report={report}
visible={workbookDrawerVisible} visible={workbookDrawerVisible}
onCancel={onWorkbookDrawerCancel} onCancel={onWorkbookDrawerCancel}
/> />
......
...@@ -4,7 +4,7 @@ import { Drawer, Pagination, List } from 'antd'; ...@@ -4,7 +4,7 @@ import { Drawer, Pagination, List } from 'antd';
import { dispatch } from '../../../../model'; import { dispatch } from '../../../../model';
const WorkbookDrawer = (props) => { const WorkbookDrawer = (props) => {
const { onCancel, visible, type = 'tableau' } = props; const { onCancel, visible, report } = props;
const [ loading, setLoading ] = useState(false); const [ loading, setLoading ] = useState(false);
const [ workbooks, setWorkbooks ] = useState([]); const [ workbooks, setWorkbooks ] = useState([]);
...@@ -25,13 +25,13 @@ const WorkbookDrawer = (props) => { ...@@ -25,13 +25,13 @@ const WorkbookDrawer = (props) => {
const getWorkbooks = (p = 1, s = 20) => { const getWorkbooks = (p = 1, s = 20) => {
setLoading(true); setLoading(true);
const url = (type==='tableau') ? 'assetmanage.listWorkbooks' : 'assetmanage.listSmartBIWorkbooks';
dispatch({ dispatch({
type: url, type: 'assetmanage.listWorkbooksByType' ,
payload: { payload: {
pageNum: p, pageNum: p,
pageSize: s pageSize: s,
type: report?.code,
}, },
callback: data => { callback: data => {
setLoading(false); setLoading(false);
...@@ -57,10 +57,8 @@ const WorkbookDrawer = (props) => { ...@@ -57,10 +57,8 @@ const WorkbookDrawer = (props) => {
// } // }
const onDevelopClick = (id) => { const onDevelopClick = (id) => {
const url = (type==='tableau') ? 'assetmanage.getWorkbookUrl' : 'assetmanage.getSmartBIWorkbookUrl';
dispatch({ dispatch({
type: url, type: 'assetmanage.getViewUrlByWorkbookId',
payload: { payload: {
workbookId: id, workbookId: id,
}, },
...@@ -74,7 +72,7 @@ const WorkbookDrawer = (props) => { ...@@ -74,7 +72,7 @@ const WorkbookDrawer = (props) => {
<Drawer <Drawer
forceRender forceRender
visible={ visible } visible={ visible }
title={`${type}工作簿`} title={`${report?.name}工作簿`}
width={900} width={900}
placement="right" placement="right"
closable={ true } closable={ true }
......
...@@ -6,16 +6,22 @@ import { showMessage } from '../../../../util'; ...@@ -6,16 +6,22 @@ import { showMessage } from '../../../../util';
const WorksheetModal = (props) => { const WorksheetModal = (props) => {
const { onCancel, visible, id, type = 'tableau', metadata = {} } = props; const { onCancel, visible, id, report, metadata = {} } = props;
const [ confirmLoading, setConfirmLoading ] = useState(false); const [ confirmLoading, setConfirmLoading ] = useState(false);
const [ form ] = Form.useForm(); const [ form ] = Form.useForm();
useEffect(() => { useEffect(() => {
if (visible) { if (visible) {
form?.setFieldsValue({ tableName: metadata?.tableName, columnNames: metadata?.columnItems?.map(item => item.metadataColumnName) }); form?.setFieldsValue({ tableName: metadata?.tableName, columnNames: metadata?.columnItems?.map(item => {
return {
cnName: item.metadataColumnCnName,
metadataColumnId: item.metadataColumnId,
name: item.metadataColumnName
} }
}, [visible, type]) }) });
}
}, [visible, report, metadata])
const onOk = async() => { const onOk = async() => {
try { try {
...@@ -23,21 +29,15 @@ const WorksheetModal = (props) => { ...@@ -23,21 +29,15 @@ const WorksheetModal = (props) => {
setConfirmLoading(true); setConfirmLoading(true);
const url = (type === 'tableau') ? 'assetmanage.saveWorkbook': 'assetmanage.saveSmartBIWorkbook';
let metadataTableId = '';
metadata?.columnItems?.forEach(item => {
if (!metadataTableId) {
metadataTableId = item.metadataTableId;
}
})
dispatch({ dispatch({
type: url, type: 'assetmanage.saveWorkbookByType',
payload: { payload: {
data: { data: {
dataAssetId:id, dataAssetId:id,
metadataTableId, metadataTableId: metadata?.metadataTableId,
tableName: metadata?.tableName,
tableCnName: metadata?.tableCnName,
type: report?.code,
...row, ...row,
} }
}, },
...@@ -80,7 +80,7 @@ const WorksheetModal = (props) => { ...@@ -80,7 +80,7 @@ const WorksheetModal = (props) => {
return ( return (
<Modal <Modal
forceRender forceRender
title='工作簿信息' title={`${report?.name}工作簿信息`}
visible={ visible } visible={ visible }
width={ 600 } width={ 600 }
onCancel={() => { onCancel={() => {
...@@ -109,10 +109,45 @@ const WorksheetModal = (props) => { ...@@ -109,10 +109,45 @@ const WorksheetModal = (props) => {
label="字段" label="字段"
name="columnNames" name="columnNames"
> >
<Checkbox.Group> <ColumnsItem data={metadata?.columnItems} />
</Form.Item>
<Form.Item
label="元数据"
name="tableName"
hidden={true}
>
<Input />
</Form.Item>
</Form>
</Modal>
);
}
export default WorksheetModal;
const ColumnsItem = ({ value, onChange, data }) => {
return (
<Checkbox.Group
onChange={(checkedValue) => {
if ((checkedValue??[]).length === 0) {
onChange([])
} else {
const filterData = (data??[]).filter(item => checkedValue.includes(item.metadataColumnName))
onChange(filterData.map(item => {
return {
cnName: item.metadataColumnCnName,
metadataColumnId: item.metadataColumnId,
name: item.metadataColumnName
}
}))
}
}}
value={(value??[]).map(item => item.name)}
>
<Row> <Row>
{ {
metadata?.columnItems?.map((item, index) => <Col key={index} span={8}> data?.map((item, index) => <Col key={index} span={8}>
<Checkbox <Checkbox
value={item.metadataColumnName} value={item.metadataColumnName}
style={{ style={{
...@@ -125,17 +160,5 @@ const WorksheetModal = (props) => { ...@@ -125,17 +160,5 @@ const WorksheetModal = (props) => {
} }
</Row> </Row>
</Checkbox.Group> </Checkbox.Group>
</Form.Item> )
<Form.Item
label="元数据"
name="tableName"
hidden={true}
>
<Input />
</Form.Item>
</Form>
</Modal>
);
} }
\ No newline at end of file
export default WorksheetModal;
\ No newline at end of file
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