Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
S
szse
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
zhaochengxiang
szse
Commits
87d08137
Commit
87d08137
authored
Jun 04, 2024
by
zhaochengxiang
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
报表
parent
7453443d
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
403 additions
and
84 deletions
+403
-84
assetmanage.js
src/model/assetmanage.js
+17
-0
dataassetmanager.js
src/service/dataassetmanager.js
+17
-0
AssetTable.jsx
src/view/Manage/AssetManage/Component/AssetTable.jsx
+84
-84
WorkbookDrawer.jsx
src/view/Manage/AssetManage/Component/WorkbookDrawer.jsx
+123
-0
WorksheetModal.jsx
src/view/Manage/AssetManage/Component/WorksheetModal.jsx
+162
-0
No files found.
src/model/assetmanage.js
View file @
87d08137
...
...
@@ -452,4 +452,20 @@ export function* getBusinessColumns(payload) {
export
function
*
saveBusinessColumns
(
payload
)
{
return
yield
call
(
service
.
saveBusinessColumns
,
payload
);
}
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
src/service/dataassetmanager.js
View file @
87d08137
...
...
@@ -459,4 +459,20 @@ export function getBusinessColumns(payload) {
export
function
saveBusinessColumns
(
payload
)
{
return
PostJSON
(
"/dataassetmanagertest/dataAssetColumnApi/saveBusinessColumnsByDataAssetId"
,
payload
)
}
export
function
listSupportReportTypes
()
{
return
GetJSON
(
"/dataassetmanagertest/reportApi/listSupportReportTypes"
)
}
export
function
listWorkbooksByType
(
payload
)
{
return
GetJSON
(
"/dataassetmanagertest/reportApi/listWorkbooks"
,
payload
)
}
export
function
getViewUrlByWorkbookId
(
payload
)
{
return
Get
(
"/dataassetmanagertest/reportApi/getViewUrlByWorkbookId"
,
payload
)
}
export
function
saveWorkbookByType
(
payload
)
{
return
Post
(
"/dataassetmanagertest/reportApi/saveWorkbook"
,
payload
)
}
\ No newline at end of file
src/view/Manage/AssetManage/Component/AssetTable.jsx
View file @
87d08137
...
...
@@ -21,6 +21,8 @@ import AssetDeleteModal from './AssetDeleteModal';
import
{
AppContext
,
appId
}
from
"../../../../App"
;
import
StartFlowModal
from
"./StartFlow"
;
import
Table
from
'../../ResizeableTable'
;
import
WorksheetModal
from
"./WorksheetModal"
;
import
WorkbookDrawer
from
"./WorkbookDrawer"
;
import
"./AssetTable.less"
;
import
'react-contexify/dist/ReactContexify.css'
;
...
...
@@ -138,8 +140,12 @@ const AssetTable = (props) => {
const
[
loadingElements
,
setLoadingElements
]
=
useState
(
false
)
const
[
elements
,
setElements
]
=
useState
()
const
[
currentElementId
,
setCurrentElementId
]
=
useState
()
const
[
isAdmin
,
setAdmin
]
=
React
.
useState
()
const
[
isDataKeyUser
,
setDataKeyUser
]
=
React
.
useState
()
const
[
isAdmin
,
setAdmin
]
=
useState
()
const
[
isDataKeyUser
,
setDataKeyUser
]
=
useState
()
const
[
reportTypes
,
setReportTypes
]
=
useState
()
const
[
currentReport
,
setReport
]
=
useState
()
const
[
worksheetModalVisible
,
setWorksheetModalVisible
]
=
useState
(
false
)
const
[
workbookDrawerVisible
,
setWorkbookDrawerVisible
]
=
useState
(
false
)
const
[
modal
,
contextHolder
]
=
Modal
.
useModal
();
const
anchorId
=
getQueryParam
(
AnchorId
,
props
?.
location
?.
search
);
...
...
@@ -197,6 +203,7 @@ const AssetTable = (props) => {
getAdmin
();
judgeDataKeyUser
();
getUsers
();
getReportTypes
();
const
$list
=
listSubject
.
subscribe
((
val
)
=>
{
if
(
val
.
msg
===
'templateChange'
)
{
...
...
@@ -327,6 +334,15 @@ const AssetTable = (props) => {
})
}
const
getReportTypes
=
()
=>
{
dispatch
({
type
:
'assetmanage.listSupportReportTypes'
,
callback
:
data
=>
{
setReportTypes
(
data
)
}
});
}
const
getElements
=
()
=>
{
setLoadingElements
(
true
);
dispatch
({
...
...
@@ -930,48 +946,42 @@ const AssetTable = (props) => {
}
}
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 moreMenu = (
<Menu>
{
// (reference===AssetManageReference) &&
// <Menu.Item disabled={(checkedKeys||[]).length===0}>
// <div className='text-center' onClick={onStartFlowClick}>
// 申请
// </div>
// </Menu.Item>
}
{
(reference===AssetManageReference || reference===AssetRecycleReference) && <React.Fragment>
{
reportTypes?.map(item =>
<React.Fragment key={item.code}>
<Menu.Item disabled={(checkedKeys||[]).length===0}>
<div className='text-center' onClick={onBatchCatalogChangeBtnClick}>
{(reference===AssetRecycleReference)?'挂载':'变更目录'}
<div className='text-center' onClick={() => { onReportAnalyseClick(item) }}>
{`
$
{
item
.
name
}
自助分析
`}
</div>
</Menu.Item>
<Menu.Item>
<div className='text-center' onClick={() => { onReportWorkbookClick(item)}}>
{`
$
{
item
.
name
}
工作簿
`}
</div>
</Menu.Item>
{
isAdmin && <Menu.Item disabled={(checkedKeys||[]).length===0}>
<div className='text-center' onClick={deleteAssets}>
删除
</div>
</Menu.Item>
}
{
isAdmin && <Menu.Item disabled={(checkedKeys||[]).length===0}>
<div className='text-center' onClick={offlineAssets}>
停用
</div>
</Menu.Item>
}
</React.Fragment>
}
<Menu.Item>
<div className='text-center' onClick={onFilterElementClick}>
可见列设置
</div>
</Menu.Item>
)
}
</Menu>
)
;
)
const rowSelection = {
selectedRowKeys: checkedKeys,
...
...
@@ -1005,7 +1015,7 @@ const AssetTable = (props) => {
borderBottom: '1px solid rgb(239, 239, 239)',
}}
>
<Space
size={15}
>
<Space>
{
((reference===AssetManageReference||isDataKeyUser) && template && !template?.structured) && nodeId && <Button onClick={addAsset}>新增</Button>
}
...
...
@@ -1016,58 +1026,31 @@ const AssetTable = (props) => {
(reference===AssetManageReference && nodeType!=='custom' && template && !template?.structured) && <Button onClick={importBusinessColumn}>导入字段</Button>
}
{
(reference===AssetManageReference || reference===AssetRecycleReference) &&
<Tooltip>
<Button onClick={exportAsset} >导出</Button>
</Tooltip>
(reference===AssetManageReference) && <Tooltip>
<Button onClick={exportAsset} >导出</Button>
</Tooltip>
}
{
// (reference===AssetBrowseReference||reference===ResourceBrowseReference) &&
// <Tooltip title={(checkedKeys||[]).length===0?'请先选择资产目录':''}>
// <Button onClick={onStartFlowClick} disabled={(checkedKeys||[]).length===0} >申请</Button>
// </Tooltip>
reference===AssetManageReference && <Tooltip title={(checkedKeys||[]).length===0?'请先选择资产目录':''}>
<Button onClick={onBatchCatalogChangeBtnClick} disabled={(checkedKeys||[]).length===0} >变更目录</Button>
</Tooltip>
}
{
(compact && reference!==AssetRecycleReference) ? <Dropdown overlay={moreMenu} placement="bottomCenter">
reference===AssetManageReference && isAdmin && <Tooltip title={(checkedKeys||[]).length===0?'请先选择资产目录':''}>
<Button onClick={deleteAssets} disabled={(checkedKeys||[]).length===0} >删除</Button>
</Tooltip>
}
{
reference===AssetManageReference && isAdmin && <Tooltip title={(checkedKeys||[]).length===0?'请先选择资产目录':''}>
<Button onClick={offlineAssets} disabled={(checkedKeys||[]).length===0} >停用</Button>
</Tooltip>
}
<Button onClick={onFilterElementClick}>可见列设置</Button>
{
reference===AssetManageReference && (reportTypes??[]).length > 0 && <Dropdown overlay={moreMenu} placement="bottomCenter">
<Button>其他操作</Button>
</Dropdown> : <React.Fragment>
{
// (reference===AssetManageReference) &&
// <Tooltip title={(checkedKeys||[]).length===0?'请先选择资产目录':''}>
// <Button onClick={onStartFlowClick} disabled={(checkedKeys||[]).length===0} >申请</Button>
// </Tooltip>
}
{
(reference===AssetManageReference || reference===AssetRecycleReference) && <React.Fragment>
<Tooltip title={(checkedKeys||[]).length===0?'请先选择资产目录':''}>
<Button onClick={onBatchCatalogChangeBtnClick} disabled={(checkedKeys||[]).length===0} >{(reference===AssetRecycleReference)?'挂载':'变更目录'}</Button>
</Tooltip>
{
(reference===AssetRecycleReference) && <Tooltip title={(checkedKeys||[]).length===0?'请先选择资产目录':''}>
<Button onClick={recoveryAssets} disabled={(checkedKeys||[]).length===0} >恢复</Button>
</Tooltip>
}
{
isAdmin && <Tooltip title={(checkedKeys||[]).length===0?'请先选择资产目录':''}>
<Button onClick={deleteAssets} disabled={(checkedKeys||[]).length===0} >删除</Button>
</Tooltip>
}
{
isAdmin && <Tooltip title={(checkedKeys||[]).length===0?'请先选择资产目录':''}>
<Button onClick={offlineAssets} disabled={(checkedKeys||[]).length===0} >停用</Button>
</Tooltip>
}
</React.Fragment>
}
<Button onClick={onFilterElementClick}>可见列设置</Button>
</React.Fragment>
</Dropdown>
}
{/* {
(reference!==AssetRecycleReference && isSzseEnv) && <Checkbox onChange={onRecursiveChange} checked={!recursive}>仅显示当前目录</Checkbox>
} */}
</Space>
<Space>
{/* {
...
...
@@ -1239,6 +1222,23 @@ const AssetTable = (props) => {
ids={checkedKeys||[]}
onCancel={onStartFlowModalCancel}
/>
<WorksheetModal
report={currentReport}
visible={worksheetModalVisible}
id={(checkedKeys||[]).length>0?checkedKeys[0]:''}
onCancel={() => {
setWorksheetModalVisible(false);
}}
/>
<WorkbookDrawer
report={currentReport}
visible={workbookDrawerVisible}
onCancel={() => {
setWorkbookDrawerVisible(false);
}}
/>
<RcMenu id={MENU_ID}>
{/* {
(contextMenuItem.resourceState==='notRelatedAsset') && <RcItem id="uncombed" onClick={handleItemClick}>
...
...
src/view/Manage/AssetManage/Component/WorkbookDrawer.jsx
0 → 100644
View file @
87d08137
import
React
,
{
useState
,
useEffect
}
from
'react'
;
import
{
Drawer
,
Pagination
,
List
}
from
'antd'
;
import
{
dispatch
}
from
'../../../../model'
;
const
WorkbookDrawer
=
(
props
)
=>
{
const
{
onCancel
,
visible
,
report
}
=
props
;
const
[
loading
,
setLoading
]
=
useState
(
false
);
const
[
workbooks
,
setWorkbooks
]
=
useState
([]);
const
[
pagination
,
setPagination
]
=
useState
(
{
pageNum
:
1
,
pageSize
:
20
}
);
const
{
pageNum
,
pageSize
}
=
pagination
;
const
[
total
,
setTotal
]
=
useState
(
0
);
useEffect
(()
=>
{
if
(
visible
)
{
setPagination
({
pageNum
:
1
,
pageSize
:
20
});
getWorkbooks
();
}
//eslint-disable-next-line react-hooks/exhaustive-deps
},
[
visible
])
const
getWorkbooks
=
(
p
=
1
,
s
=
20
)
=>
{
setLoading
(
true
);
dispatch
({
type
:
'assetmanage.listWorkbooksByType'
,
payload
:
{
pageNum
:
p
,
pageSize
:
s
,
type
:
report
?.
code
,
},
callback
:
data
=>
{
setLoading
(
false
);
setTotal
(
data
.
total
);
setWorkbooks
(
data
.
data
||
[]);
},
error
:
()
=>
{
setLoading
(
false
);
}
})
}
// const onDeleteClick = (id) => {
// dispatch({
// type: 'assetmanage.deleteWorkbooks',
// payload: {
// data: [id]
// },
// callback: () => {
// getWorkbooks();
// }
// })
// }
const
onDevelopClick
=
(
id
)
=>
{
dispatch
({
type
:
'assetmanage.getViewUrlByWorkbookId'
,
payload
:
{
workbookId
:
id
,
},
callback
:
data
=>
{
window
.
open
(
data
||
''
);
}
})
}
return
(
<
Drawer
forceRender
visible=
{
visible
}
title=
{
`${report?.name}工作簿`
}
width=
{
900
}
placement=
"right"
closable=
{
true
}
onClose=
{
()
=>
{
onCancel
&&
onCancel
();
}
}
>
<
List
itemLayout=
"horizontal"
size=
"small"
loading=
{
loading
}
dataSource=
{
workbooks
}
renderItem=
{
item
=>
(
<
List
.
Item
key=
{
item
.
id
}
actions=
{
[<
a
key=
"develop"
onClick=
{
()
=>
{
onDevelopClick
(
item
.
id
);
}
}
>
报表开发
</
a
>]
}
>
<
List
.
Item
.
Meta
title=
{
item
.
name
}
/>
</
List
.
Item
>
)
}
/>
<
Pagination
className=
"text-center mt-3"
showSizeChanger
showQuickJumper
onChange=
{
(
_pageNum
,
_pageSize
)
=>
{
setPagination
({
pageNum
:
_pageNum
||
1
,
pageSize
:
_pageSize
||
20
});
getWorkbooks
(
_pageNum
||
1
,
_pageSize
||
20
);
}
}
onShowSizeChange=
{
(
_pageNum
,
_pageSize
)
=>
{
setPagination
({
pageNum
:
_pageNum
||
1
,
pageSize
:
_pageSize
||
20
});
getWorkbooks
(
_pageNum
||
1
,
_pageSize
||
20
);
}
}
current=
{
pageNum
}
pageSize=
{
pageSize
}
defaultCurrent=
{
1
}
total=
{
total
}
pageSizeOptions=
{
[
10
,
20
]
}
showTotal=
{
total
=>
`共 ${total} 条`
}
/>
</
Drawer
>
)
}
export
default
WorkbookDrawer
;
\ No newline at end of file
src/view/Manage/AssetManage/Component/WorksheetModal.jsx
0 → 100644
View file @
87d08137
import
React
,
{
useEffect
,
useState
}
from
'react'
;
import
{
Modal
,
Form
,
Button
,
Space
,
Input
,
Checkbox
,
Row
,
Col
,
Typography
}
from
'antd'
;
import
{
dispatch
}
from
'../../../../model'
;
import
{
showMessage
}
from
'../../../../util'
;
const
WorksheetModal
=
(
props
)
=>
{
const
{
onCancel
,
visible
,
id
,
report
}
=
props
;
const
[
loading
,
setLoading
]
=
useState
(
false
);
const
[
asset
,
setAsset
]
=
useState
();
const
[
form
]
=
Form
.
useForm
();
useEffect
(()
=>
{
if
(
visible
&&
id
)
{
getAsset
()
}
},
[
visible
,
id
])
const
getAsset
=
()
=>
{
setLoading
(
true
)
dispatch
({
type
:
'assetmanage.getDataAssetDetail'
,
payload
:
{
dataAssetId
:
id
,
},
callback
:
data
=>
{
setLoading
(
false
)
setAsset
(
data
)
form
?.
setFieldsValue
(
data
)
},
error
:
()
=>
{
setLoading
(
false
)
}
})
}
const
onOk
=
async
()
=>
{
try
{
const
row
=
await
form
?.
validateFields
();
setLoading
(
true
);
dispatch
({
type
:
'assetmanage.saveWorkbookByType'
,
payload
:
{
data
:
{
dataAssetId
:
id
,
metadataTableId
:
asset
?.
metadataId
,
type
:
report
?.
code
,
...
row
,
}
},
callback
:
data
=>
{
setLoading
(
false
);
window
.
open
(
data
);
reset
();
showMessage
(
"success"
,
"新增成功"
);
onCancel
&&
onCancel
(
true
);
},
error
:
()
=>
{
setLoading
(
false
);
}
})
}
catch
(
errInfo
)
{
console
.
log
(
'Validate Failed:'
,
errInfo
);
}
}
const
reset
=
()
=>
{
setLoading
(
false
);
form
?.
resetFields
();
}
const
formItemLayout
=
{
labelCol
:
{
xs
:
{
span
:
24
},
sm
:
{
span
:
3
},
},
wrapperCol
:
{
xs
:
{
span
:
24
},
sm
:
{
span
:
21
},
},
};
return
(
<
Modal
forceRender
title=
{
`${report?.name}工作簿信息`
}
visible=
{
visible
}
width=
{
600
}
onCancel=
{
()
=>
{
reset
();
onCancel
&&
onCancel
();
}
}
footer=
{
<
Space
>
<
Button
onClick=
{
()
=>
{
reset
();
onCancel
&&
onCancel
();
}
}
>
取消
</
Button
>
<
Button
type=
"primary"
onClick=
{
onOk
}
>
确定
</
Button
>
</
Space
>
}
>
<
Form
form=
{
form
}
style=
{
{
maxHeight
:
600
,
overflow
:
'auto'
}
}
{
...
formItemLayout
}
>
<
Form
.
Item
label=
"名称"
name=
"name"
rules=
{
[{
required
:
true
,
message
:
'请填写工作簿名称!'
}]
}
>
<
Input
/>
</
Form
.
Item
>
<
Form
.
Item
label=
"字段"
name=
"columns"
>
<
ColumnsItem
data=
{
asset
?.
columns
}
/>
</
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
{
onChange
((
data
??[]).
filter
(
item
=>
checkedValue
.
includes
(
item
.
metadataColumnId
)))
}
}
}
value=
{
(
value
??[]).
map
(
item
=>
item
.
metadataColumnId
)
}
>
<
Row
>
{
data
?.
map
((
item
,
index
)
=>
<
Col
key=
{
index
}
span=
{
8
}
>
<
Checkbox
value=
{
item
.
metadataColumnId
}
style=
{
{
lineHeight
:
'32px'
,
}
}
>
<
Typography
.
Text
style=
{
{
width
:
120
}
}
ellipsis
>
{
item
.
name
}
</
Typography
.
Text
>
</
Checkbox
>
</
Col
>)
}
</
Row
>
</
Checkbox
.
Group
>
)
}
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment