Commit 43e0c992 by zhaochengxiang

凡软报表

parent c17b714a
...@@ -77,6 +77,6 @@ ...@@ -77,6 +77,6 @@
"last 1 safari version" "last 1 safari version"
] ]
}, },
"proxy": "http://139.198.126.96:8089", "proxy": "http://192.168.0.54:8888",
"homepage": "http://myhost/data-govern" "homepage": "http://myhost/data-govern"
} }
...@@ -255,4 +255,24 @@ export function* listSmartBIWorkbooks(payload) { ...@@ -255,4 +255,24 @@ export function* listSmartBIWorkbooks(payload) {
export function* deleteSmartBIWorkbooks(payload) { export function* deleteSmartBIWorkbooks(payload) {
return yield call(service.deleteSmartBIWorkbooks, payload); return yield call(service.deleteSmartBIWorkbooks, payload);
}
export function* listSupportReportTypes() {
return yield call(service.listSupportReportTypes);
}
export function* saveWorkbookByType(payload) {
return yield call(service.saveWorkbookByType, payload)
}
export function* deleteWorkbooks(payload) {
return yield call(service.deleteWorkbooks, payload)
}
export function* listWorkbooksByType(payload) {
return yield call(service.listWorkbooksByType, payload)
}
export function* getViewUrlByWorkbookId(payload) {
return yield call(service.getViewUrlByWorkbookId, payload)
} }
\ No newline at end of file
...@@ -262,4 +262,24 @@ export function listSmartBIWorkbooks(payload) { ...@@ -262,4 +262,24 @@ export function listSmartBIWorkbooks(payload) {
export function deleteSmartBIWorkbooks(payload) { export function deleteSmartBIWorkbooks(payload) {
return Post("/dataassetmanager/smartBIApi/deleteWorkbooks", payload); return Post("/dataassetmanager/smartBIApi/deleteWorkbooks", payload);
} }
\ No newline at end of file
export function listSupportReportTypes() {
return GetJSON("/dataassetmanager/reportApi/listSupportReportTypes")
}
export function saveWorkbookByType(payload) {
return Post("/dataassetmanager/reportApi/saveWorkbook", payload)
}
export function deleteWorkbooks(payload) {
return PostJSON("/dataassetmanager/reportApi/deleteWorkbooks", payload)
}
export function listWorkbooksByType(payload) {
return GetJSON("/dataassetmanager/reportApi/listWorkbooks", payload)
}
export function getViewUrlByWorkbookId(payload) {
return Get("/dataassetmanager/reportApi/getViewUrlByWorkbookId", payload)
}
...@@ -6,7 +6,7 @@ import { IsArr, showMessage, isSzseEnv } from './index'; ...@@ -6,7 +6,7 @@ import { IsArr, showMessage, isSzseEnv } from './index';
const CancelToken = axios.CancelToken; const CancelToken = axios.CancelToken;
const baseURL = '/api/'; const baseURL = '/api/';
// const debugEnv = 475629450; // const debugEnv = 1458134081;
const debugEnv = ''; const debugEnv = '';
const instance = axios.create({ const instance = axios.create({
......
...@@ -153,6 +153,9 @@ const AssetTable = (props) => { ...@@ -153,6 +153,9 @@ const AssetTable = (props) => {
const [ assetDeleteModalVisible, setAssetDeleteModalVisible ] = useState(false); const [ assetDeleteModalVisible, setAssetDeleteModalVisible ] = useState(false);
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 [ 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);
...@@ -181,6 +184,7 @@ const AssetTable = (props) => { ...@@ -181,6 +184,7 @@ const AssetTable = (props) => {
}, [columns, TableWidth]) }, [columns, TableWidth])
useEffect(() => { useEffect(() => {
getReportTypes();
window?.addEventListener("storage", storageChange); window?.addEventListener("storage", storageChange);
return () => { return () => {
...@@ -239,6 +243,15 @@ const AssetTable = (props) => { ...@@ -239,6 +243,15 @@ const AssetTable = (props) => {
} }
} }
const getReportTypes = () => {
dispatch({
type: 'assetmanage.listSupportReportTypes',
callback: data => {
setReportTypes(data)
}
});
}
const getDataAssetLocationByRelation = () => { const getDataAssetLocationByRelation = () => {
setLoading(true); setLoading(true);
dispatch({ dispatch({
...@@ -705,17 +718,19 @@ const AssetTable = (props) => { ...@@ -705,17 +718,19 @@ const AssetTable = (props) => {
onFullScreenChange && onFullScreenChange(!fullScreen); onFullScreenChange && onFullScreenChange(!fullScreen);
} }
const onSmartBIAnalyseClick = () => { const onReportAnalyseClick = (val) => {
if ((checkedKeys||[]).length === 0) { if ((checkedKeys||[]).length === 0) {
showMessage('warn', '请先选择一个资产'); showMessage('warn', '请先选择一个资产');
} else if ((checkedKeys||[]).length > 1) { } else if ((checkedKeys||[]).length > 1) {
showMessage('warn', '只能选择一个资产'); showMessage('warn', '只能选择一个资产');
} else { } else {
setReport(val);
setWorksheetModalVisible(true); setWorksheetModalVisible(true);
} }
} }
const onSmartBIWorkbookClick = () => { const onReportWorkbookClick = (val) => {
setReport(val);
setWorkbookDrawerVisible(true); setWorkbookDrawerVisible(true);
} }
...@@ -835,20 +850,22 @@ const AssetTable = (props) => { ...@@ -835,20 +850,22 @@ 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={onSmartBIAnalyseClick}> <React.Fragment key={item.code}>
smartBI自助分析 <Menu.Item disabled={(checkedKeys||[]).length===0}>
</div> <div className='text-center' onClick={() => { onReportAnalyseClick(item) }}>
</Menu.Item> {`${item.name}自助分析`}
</div>
</Menu.Item>
<Menu.Item>
<div className='text-center' onClick={() => { onReportWorkbookClick(item)}}>
{`${item.name}工作簿`}
</div>
</Menu.Item>
</React.Fragment>
)
} }
{
(reference===AssetManageReference) && <Menu.Item>
<div className='text-center' onClick={onSmartBIWorkbookClick}>
smartBI工作簿
</div>
</Menu.Item>
}
</Menu> </Menu>
); );
...@@ -889,7 +906,7 @@ const AssetTable = (props) => { ...@@ -889,7 +906,7 @@ const AssetTable = (props) => {
(reference===AssetManageReference && nodeLevel!==1 && nodeType!=='custom') && <Button onClick={addAsset}>新增</Button> (reference===AssetManageReference && nodeLevel!==1 && nodeType!=='custom') && <Button onClick={addAsset}>新增</Button>
} }
{ {
(compact && reference===AssetManageReference) ? <Dropdown overlay={moreMenu} placement="bottomCenter"> (reference===AssetManageReference) ? <Dropdown overlay={moreMenu} placement="bottomCenter">
<Button>其他操作</Button> <Button>其他操作</Button>
</Dropdown> : <React.Fragment> </Dropdown> : <React.Fragment>
{ {
...@@ -917,16 +934,6 @@ const AssetTable = (props) => { ...@@ -917,16 +934,6 @@ const AssetTable = (props) => {
</React.Fragment> </React.Fragment>
} }
<Button onClick={onFilterElementClick}>可见列设置</Button> <Button onClick={onFilterElementClick}>可见列设置</Button>
{
(reference===AssetManageReference) && <React.Fragment>
<Tooltip title={(checkedKeys||[]).length===0?'请先选择资产':''}>
<Button onClick={onSmartBIAnalyseClick} disabled={(checkedKeys||[]).length===0} >smartBI自助分析</Button>
</Tooltip>
<Tooltip title={(checkedKeys||[]).length===0?'请先选择资产':''}>
<Button onClick={onSmartBIWorkbookClick} disabled={(checkedKeys||[]).length===0} >smartBI工作簿</Button>
</Tooltip>
</React.Fragment>
}
</React.Fragment> </React.Fragment>
} }
{ {
...@@ -1068,12 +1075,15 @@ const AssetTable = (props) => { ...@@ -1068,12 +1075,15 @@ const AssetTable = (props) => {
onDeleteAll={onAssetDeleteModalDeleteAll} onDeleteAll={onAssetDeleteModalDeleteAll}
/> />
<WorksheetModal <WorksheetModal
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:{} }
onCancel={onWorksheetModalCancel} onCancel={onWorksheetModalCancel}
/> />
<WorkbookDrawer <WorkbookDrawer
report={report}
visible={workbookDrawerVisible} visible={workbookDrawerVisible}
onCancel={onWorkbookDrawerCancel} onCancel={onWorkbookDrawerCancel}
/> />
......
import React, { useState, useEffect } from 'react'; import React, { useState, useEffect } from 'react';
import { Drawer, Pagination, List } from 'antd'; import { Drawer, Pagination, List, Modal } from 'antd';
import { dispatch } from '../../../../model'; import { dispatch } from '../../../../model';
import { showMessage } from '../../../../util';
const WorkbookDrawer = (props) => { const WorkbookDrawer = (props) => {
const { onCancel, visible } = props; const { onCancel, visible, report } = props;
const [ loading, setLoading ] = useState(false); const [ loading, setLoading ] = useState(false);
const [ workbooks, setWorkbooks ] = useState([]); const [ workbooks, setWorkbooks ] = useState([]);
const [ pagination, setPagination ] = useState( { pageNum: 1, pageSize: 20 } ); const [ pagination, setPagination ] = useState( { pageNum: 1, pageSize: 20 } );
const { pageNum, pageSize } = pagination; const { pageNum, pageSize } = pagination;
const [ total, setTotal ] = useState(0); const [ total, setTotal ] = useState(0);
const [ modal, contextHolder ] = Modal.useModal();
useEffect(() => { useEffect(() => {
...@@ -24,11 +26,14 @@ const WorkbookDrawer = (props) => { ...@@ -24,11 +26,14 @@ const WorkbookDrawer = (props) => {
const getWorkbooks = (p = 1, s = 20) => { const getWorkbooks = (p = 1, s = 20) => {
setLoading(true); setLoading(true);
dispatch({ dispatch({
type: 'assetmanage.listSmartBIWorkbooks', type: 'assetmanage.listWorkbooksByType' ,
payload: { payload: {
pageNum: p, pageNum: p,
pageSize: s pageSize: s,
type: report?.code,
}, },
callback: data => { callback: data => {
setLoading(false); setLoading(false);
...@@ -41,21 +46,21 @@ const WorkbookDrawer = (props) => { ...@@ -41,21 +46,21 @@ const WorkbookDrawer = (props) => {
}) })
} }
const onDeleteClick = (id) => { // const onDeleteClick = (id) => {
dispatch({ // dispatch({
type: 'assetmanage.deleteSmartBIWorkbooks', // type: 'assetmanage.deleteWorkbooks',
payload: { // payload: {
data: [id] // data: [id]
}, // },
callback: () => { // callback: () => {
getWorkbooks(); // getWorkbooks();
} // }
}) // })
} // }
const onDevelopClick = (id) => { const onDevelopClick = (id) => {
dispatch({ dispatch({
type: 'assetmanage.getSmartBIWorkbookUrl', type: 'assetmanage.getViewUrlByWorkbookId',
payload: { payload: {
workbookId: id, workbookId: id,
}, },
...@@ -69,7 +74,7 @@ const WorkbookDrawer = (props) => { ...@@ -69,7 +74,7 @@ const WorkbookDrawer = (props) => {
<Drawer <Drawer
forceRender forceRender
visible={ visible } visible={ visible }
title='smartBI工作簿' title={`${report?.name}工作簿`}
width={900} width={900}
placement="right" placement="right"
closable={ true } closable={ true }
...@@ -85,10 +90,26 @@ const WorkbookDrawer = (props) => { ...@@ -85,10 +90,26 @@ const WorkbookDrawer = (props) => {
renderItem={item => ( renderItem={item => (
<List.Item <List.Item
key={item.id} key={item.id}
actions={[ actions={[<a key="develop" onClick={() => { onDevelopClick(item.id); }}>报表开发</a>,
<a key="develop" onClick={() => { onDevelopClick(item.id); }}>报表开发</a>, <a key="delete" onClick={() => {
// <a key="delete" onClick={() => { onDeleteClick(item.id); }}>删除</a>, modal.confirm({
]} title: '提示',
content: '确定删除该报表吗?',
onOk: () => {
dispatch({
type: 'assetmanage.deleteWorkbooks',
payload: {
data: [item.id]
},
callback: data => {
showMessage('success', '删除成功');
getWorkbooks()
}
})
}
})
}}>删除</a>
]}
> >
<List.Item.Meta <List.Item.Meta
title={item.name} title={item.name}
...@@ -115,6 +136,7 @@ const WorkbookDrawer = (props) => { ...@@ -115,6 +136,7 @@ const WorkbookDrawer = (props) => {
pageSizeOptions={[10,20]} pageSizeOptions={[10,20]}
showTotal={total => `共 ${total} 条`} showTotal={total => `共 ${total} 条`}
/> />
{contextHolder}
</Drawer> </Drawer>
) )
} }
......
...@@ -6,35 +6,38 @@ import { showMessage } from '../../../../util'; ...@@ -6,35 +6,38 @@ import { showMessage } from '../../../../util';
const WorksheetModal = (props) => { const WorksheetModal = (props) => {
const { onCancel, visible, id, 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, columns: metadata?.columnItems?.map(item => {
return {
cnName: item.metadataColumnCnName,
metadataColumnId: item.metadataColumnId,
name: item.metadataColumnName
}
}) });
} }
}, [visible]) }, [visible, report, metadata])
const onOk = async() => { const onOk = async() => {
try { try {
const row = await form?.validateFields(); const row = await form?.validateFields();
let metadataTableId = '';
metadata?.columnItems?.forEach(item => {
if (!metadataTableId) {
metadataTableId = item.metadataTableId;
}
})
setConfirmLoading(true); setConfirmLoading(true);
dispatch({ dispatch({
type: 'assetmanage.saveSmartBIWorkbook', 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,
} }
}, },
...@@ -77,7 +80,7 @@ const WorksheetModal = (props) => { ...@@ -77,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={() => {
...@@ -104,24 +107,9 @@ const WorksheetModal = (props) => { ...@@ -104,24 +107,9 @@ const WorksheetModal = (props) => {
</Form.Item> </Form.Item>
<Form.Item <Form.Item
label="字段" label="字段"
name="columnNames" name="columns"
> >
<Checkbox.Group> <ColumnsItem data={metadata?.columnItems} />
<Row>
{
metadata?.columnItems?.map((item, index) => <Col key={index} span={8}>
<Checkbox
value={item.metadataColumnName}
style={{
lineHeight: '32px',
}}
>
<Typography.Text style={{ width: 120 }} ellipsis>{item.metadataColumnName}</Typography.Text>
</Checkbox>
</Col>)
}
</Row>
</Checkbox.Group>
</Form.Item> </Form.Item>
<Form.Item <Form.Item
label="元数据" label="元数据"
...@@ -135,4 +123,42 @@ const WorksheetModal = (props) => { ...@@ -135,4 +123,42 @@ const WorksheetModal = (props) => {
); );
} }
export default WorksheetModal; export default WorksheetModal;
\ No newline at end of file
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>
{
data?.map((item, index) => <Col key={index} span={8}>
<Checkbox
value={item.metadataColumnName}
style={{
lineHeight: '32px',
}}
>
<Typography.Text style={{ width: 120 }} ellipsis>{item.metadataColumnName}</Typography.Text>
</Checkbox>
</Col>)
}
</Row>
</Checkbox.Group>
)
}
\ 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