Skip to content
Toggle navigation
Toggle navigation
This project
Loading...
Sign in
csbr-daop
/
fe-data-trusted-space
Go to a project
Toggle navigation
Toggle navigation pinning
Projects
Groups
Snippets
Help
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Network
Create a new issue
Builds
Commits
Issue Boards
Files
Commits
Network
Compare
Branches
Tags
469a81b6
authored
2025-12-10 17:05:24 +0800
by
lihua
Browse Files
Options
Browse Files
Tag
Download
Email Patches
Plain Diff
产品上架支持点击查看产品详情
1 parent
66545a4d
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
43 additions
and
375 deletions
src/router/modules/dataAsset.ts
src/store/modules/dataFacilitator.ts
src/store/modules/dataProductListing.ts
src/views/data_facilitator/certificationAudit.vue
src/views/data_facilitator/certificationAuditDetail.vue
src/views/data_product/productListingCheck.vue
src/views/data_product/productListingDetail.vue
src/views/data_smart_contract/actionLogManage.vue
src/router/modules/dataAsset.ts
View file @
469a81b
...
...
@@ -302,10 +302,10 @@ const routes: RouteRecordRaw[] = [
beforeEnter
:
(
to
,
from
)
=>
{
if
(
to
.
query
.
type
){
if
(
to
.
query
.
type
==
'detail'
)
{
to
.
meta
.
title
=
`详情-
${
to
.
query
.
name
}
`
;
to
.
meta
.
title
=
`
上架
详情-
${
to
.
query
.
name
}
`
;
}
else
{
to
.
meta
.
editPage
=
true
;
to
.
meta
.
title
=
to
.
query
.
type
==
'add'
?
'新增产品上架'
:
to
.
query
.
type
==
'edit'
?
`编辑-
${
to
.
query
.
name
}
`
:
`详情-
${
to
.
query
.
name
}
`
;
to
.
meta
.
title
=
to
.
query
.
type
==
'add'
?
'新增产品上架'
:
to
.
query
.
type
==
'edit'
?
`编辑-
${
to
.
query
.
name
}
`
:
`
上架
详情-
${
to
.
query
.
name
}
`
;
}
}
}
...
...
src/store/modules/dataFacilitator.ts
0 → 100644
View file @
469a81b
const
useDataFacilitatorStore
=
defineStore
(
/** 产品上架 */
'isRefresh'
,
()
=>
{
const
isRefresh
=
ref
<
boolean
>
(
false
)
function
set
(
v
:
boolean
)
{
isRefresh
.
value
=
v
;
}
return
{
isRefresh
,
set
,
}
},
)
export
default
useDataFacilitatorStore
\ No newline at end of file
src/store/modules/dataProductListing.ts
View file @
469a81b
...
...
@@ -3,20 +3,13 @@ const useDataProductStore = defineStore(
'isRefresh'
,
()
=>
{
const
isRefresh
=
ref
<
boolean
>
(
false
)
const
isRefreshDamCatalog
=
ref
<
boolean
>
(
false
)
function
set
(
v
:
boolean
)
{
isRefresh
.
value
=
v
;
}
function
setDamCatalogRefresh
(
v
:
boolean
)
{
isRefreshDamCatalog
.
value
=
v
;
}
return
{
isRefreshDamCatalog
,
isRefresh
,
set
,
setDamCatalogRefresh
,
}
},
)
...
...
src/views/data_facilitator/certificationAudit.vue
View file @
469a81b
...
...
@@ -9,12 +9,12 @@ import { ElMessage, ElMessageBox } from 'element-plus';
import
{
getParamsList
}
from
"@/api/modules/queryService"
;
import
{
getTaskGressList
,
getTaskRestart
,
getTaskExecutionLog
,
getEnterpriseList
,
enterpriseDelete
,
enterpriseChangeDelete
}
from
"@/api/modules/dataRequire"
;
import
{
passFlowData
,
rejectFlowData
,
myLastNode
}
from
"@/api/modules/workFlowService"
;
import
useData
AssetStore
from
"@/store/modules/dataAsset
"
;
import
useData
FacilitatorStore
from
"@/store/modules/dataFacilitator
"
;
import
Moment
from
"moment"
;
import
{
TableColumnWidth
}
from
'@/utils/enum'
;
import
DialogApproval
from
'@/components/ApprovalProcess/dialog_approval.vue'
;
const
assetStore
=
useDataAsset
Store
();
const
certStore
=
useDataFacilitator
Store
();
const
router
=
useRouter
();
const
{
proxy
}
=
getCurrentInstance
()
as
any
;
...
...
@@ -688,10 +688,10 @@ onBeforeMount(() => {
});
onActivated
(()
=>
{
if
(
asse
tStore
.
isRefresh
)
{
//如果是首次加载,则不需要调用
if
(
cer
tStore
.
isRefresh
)
{
//如果是首次加载,则不需要调用
page
.
value
.
curr
=
1
;
getTableData
();
asse
tStore
.
set
(
false
);
cer
tStore
.
set
(
false
);
}
})
...
...
src/views/data_facilitator/certificationAuditDetail.vue
View file @
469a81b
...
...
@@ -8,7 +8,7 @@ import { useRouter, useRoute } from "vue-router";
import
{
ElMessage
,
ElMessageBox
}
from
"element-plus"
;
import
{
CircleCloseFilled
}
from
'@element-plus/icons-vue'
import
useUserStore
from
"@/store/modules/user"
;
import
useData
AssetStore
from
"@/store/modules/dataAsset
"
;
import
useData
FacilitatorStore
from
"@/store/modules/dataFacilitator
"
;
import
{
getEnterpriseDetail
,
enterpriseApprove
}
from
"@/api/modules/dataRequire"
;
import
{
getAreaData
,
getParamsList
}
from
"@/api/modules/queryService"
;
import
{
getLastChange
,
passFlowData
,
rejectFlowData
,
myLastNode
,
crossPlatformApprove
}
from
"@/api/modules/workFlowService"
;
...
...
@@ -21,7 +21,7 @@ const route = useRoute();
const
userStore
=
useUserStore
();
const
userData
=
JSON
.
parse
(
localStorage
.
userData
)
const
fullPath
=
route
.
fullPath
;
const
assetStore
=
useDataAsset
Store
();
const
certStore
=
useDataFacilitator
Store
();
const
guid
=
route
.
query
.
guid
;
const
detailType
=
route
.
query
.
type
;
const
tName
=
route
.
query
.
tName
;
...
...
@@ -965,7 +965,7 @@ const tableSpanMethod = ({ row, column, rowIndex, columnIndex }) => {
const
toPath
=
()
=>
{
userStore
.
setTabbar
(
userStore
.
tabbar
.
filter
((
tab
:
any
)
=>
tab
.
fullPath
!==
fullPath
));
asse
tStore
.
set
(
true
);
cer
tStore
.
set
(
true
);
router
.
push
({
name
:
'certificationAudit'
})
}
...
...
src/views/data_product/productListingCheck.vue
deleted
100644 → 0
View file @
66545a4
<route
lang=
"yaml"
>
name: productListingCheck
</route>
<
script
lang=
"ts"
setup
name=
"productListingCheck"
>
import
{
ref
,
onMounted
}
from
"vue"
;
import
{
useRouter
,
useRoute
}
from
"vue-router"
;
import
useUserStore
from
"@/store/modules/user"
;
import
useDataAssetStore
from
"@/store/modules/dataAsset"
;
import
{
ElMessage
,
ElMessageBox
}
from
"element-plus"
;
import
{
getListingList
,
filterVal
,
getParamsDataList
}
from
"@/api/modules/dataProduct"
;
import
{
registerApproveAllow
,
registerApproveBackup
,
}
from
"@/api/modules/dataAsset"
;
import
{
TableColumnWidth
}
from
'@/utils/enum'
;
import
TableTools
from
"@/components/Tools/table_tools.vue"
;
import
Table
from
"@/components/Table/index.vue"
;
import
Dialog
from
"@/components/Dialog/index.vue"
;
const
{
proxy
}
=
getCurrentInstance
()
as
any
;
const
router
=
useRouter
();
const
userStore
=
useUserStore
();
const
assetStore
=
useDataAssetStore
();
const
userData
=
JSON
.
parse
(
userStore
.
userData
);
const
damTypes
=
ref
([]);
const
searchItemList
:
any
=
ref
([
{
type
:
"input"
,
label
:
""
,
field
:
"damName"
,
default
:
""
,
placeholder
:
"产品名称"
,
clearable
:
true
},
{
type
:
"select"
,
label
:
""
,
field
:
"damType"
,
default
:
""
,
props
:
{
value
:
'paramValue'
,
label
:
'paramName'
},
placeholder
:
"产品类型"
,
options
:
damTypes
.
value
,
clearable
:
true
,
},
]);
const
page
=
ref
({
limit
:
50
,
curr
:
1
,
sizes
:
[
{
label
:
"10"
,
value
:
10
},
{
label
:
"50"
,
value
:
50
},
{
label
:
"100"
,
value
:
100
},
{
label
:
"150"
,
value
:
150
},
{
label
:
"200"
,
value
:
200
},
],
});
const
searchItemValue
:
any
=
ref
({});
const
tableInfo
=
ref
({
id
:
"mapping-table"
,
fields
:
[
{
label
:
"序号"
,
type
:
"index"
,
width
:
56
,
align
:
"center"
,
fixed
:
"left"
},
{
label
:
"数据产品编号"
,
field
:
"productCode"
,
width
:
160
},
{
label
:
"数据证书编号"
,
field
:
"damCode"
,
width
:
160
},
{
label
:
"数据产品名称"
,
field
:
"damName"
,
width
:
140
},
{
label
:
"产品类型"
,
field
:
"damTypeName"
,
width
:
100
},
{
label
:
"权利主体"
,
field
:
"tenantName"
,
width
:
200
,
// getName: (scope) => {
// return userData.tenantName;
// }
},
{
label
:
"是否公共数据"
,
field
:
"isPublicData"
,
width
:
120
,
getName
:
(
scope
)
=>
{
return
scope
.
row
.
isPublicData
==
'Y'
?
'是'
:
'否'
;
}
},
{
label
:
"审核状态"
,
field
:
"approveState"
,
width
:
TableColumnWidth
.
STATE
,
align
:
'center'
,
type
:
"tag"
,
getName
:
(
scope
)
=>
{
return
filterVal
(
scope
.
row
.
approveState
,
'approveState'
);
}
},
{
label
:
"申请时间"
,
field
:
"applicationTime"
,
width
:
TableColumnWidth
.
DATETIME
},
{
label
:
"操作时间"
,
field
:
"updateTime"
,
width
:
TableColumnWidth
.
DATETIME
},
],
loading
:
false
,
data
:
[],
page
:
{
type
:
"normal"
,
rows
:
0
,
...
page
.
value
,
},
actionInfo
:
{
label
:
"操作"
,
type
:
"btn"
,
width
:
140
,
btns
:
(
scope
)
=>
{
let
row
=
scope
.
row
,
btnsArr
=
[];
if
(
row
.
approveState
==
'A'
)
{
if
(
row
.
approveTenantGuids
?.
includes
(
userData
.
tenantGuid
))
{
btnsArr
.
splice
(
0
,
0
,
{
label
:
"通过"
,
value
:
"pass"
,
type
:
'primary'
},
{
label
:
"驳回"
,
value
:
"reject"
,
type
:
'danger'
,
plain
:
true
});
}
btnsArr
.
splice
(
0
,
0
,
{
label
:
"详情"
,
value
:
"check"
});
}
else
{
btnsArr
.
splice
(
0
,
0
,
{
label
:
"详情"
,
value
:
"check"
});
}
return
btnsArr
;
},
},
});
const
contents
=
ref
({
pass
:
[
{
type
:
'form'
,
title
:
''
,
formInfo
:
{
id
:
'batch-pass-form'
,
items
:
[
{
label
:
''
,
type
:
"textarea"
,
placeholder
:
"请填写通过备注(选填)"
,
field
:
"approveSuggest"
,
clearable
:
true
,
maxlength
:
400
,
block
:
true
,
col
:
'margin_b_0'
,
}
]
}
}
],
reject
:
[
{
type
:
'form'
,
title
:
''
,
formInfo
:
{
id
:
'batch-reject-form'
,
items
:
[
{
label
:
''
,
type
:
"textarea"
,
placeholder
:
"请填写驳回理由(必填)"
,
field
:
"approveSuggest"
,
clearable
:
true
,
maxlength
:
400
,
block
:
true
,
col
:
'margin_b_0'
,
}
]
}
}
],
});
const
listingDialogRef
=
ref
();
const
dialogInfo
=
ref
({
visible
:
false
,
size
:
460
,
direction
:
"column"
,
header
:
{
title
:
""
,
},
type
:
''
,
contents
:
[],
footer
:
{
btns
:
[
{
type
:
"default"
,
label
:
"取消"
,
value
:
"cancel"
},
{
type
:
"primary"
,
label
:
"确定"
,
value
:
"submit"
},
],
},
});
const
getTableData
=
()
=>
{
tableInfo
.
value
.
loading
=
true
;
getListingList
(
Object
.
assign
({},
searchItemValue
.
value
,
{
isGrounding
:
1
,
pageIndex
:
page
.
value
.
curr
,
pageSize
:
page
.
value
.
limit
,
currentStaffGuid
:
userData
.
staffGuid
})
)
.
then
((
res
:
any
)
=>
{
tableInfo
.
value
.
loading
=
false
;
tableInfo
.
value
.
data
=
res
.
data
.
records
||
[];
tableInfo
.
value
.
page
.
curr
=
res
.
data
.
pageIndex
;
tableInfo
.
value
.
page
.
limit
=
res
.
data
.
pageSize
;
tableInfo
.
value
.
page
.
rows
=
res
.
data
.
totalRows
;
})
.
catch
((
res
)
=>
{
tableInfo
.
value
.
loading
=
false
;
});
};
/** 搜索同步任务列表 */
const
toSearch
=
(
val
:
any
,
clear
:
boolean
=
false
)
=>
{
if
(
clear
)
{
searchItemList
.
value
.
map
((
item
)
=>
(
item
.
default
=
""
));
searchItemValue
.
value
=
{};
}
else
{
searchItemValue
.
value
=
Object
.
keys
(
val
).
length
?
{
...
val
}
:
{};
}
page
.
value
.
curr
=
1
;
tableInfo
.
value
.
page
.
curr
=
1
;
getTableData
();
};
const
currTableData
:
any
=
ref
({});
const
tableBtnClick
=
(
scope
,
btn
)
=>
{
const
type
=
btn
.
value
;
const
row
=
scope
.
row
;
currTableData
.
value
=
row
;
if
(
type
==
"check"
)
{
toPatn
(
type
);
}
else
{
dialogInfo
.
value
.
type
=
type
dialogInfo
.
value
.
header
.
title
=
type
==
'pass'
?
'通过'
:
'驳回'
dialogInfo
.
value
.
contents
=
contents
.
value
[
type
]
dialogInfo
.
value
.
visible
=
true
}
};
const
toPatn
=
(
type
)
=>
{
router
.
push
({
name
:
"productListingCheckDetail"
,
query
:
{
guid
:
currTableData
.
value
.
guid
,
name
:
currTableData
.
value
.
damName
,
type
},
});
}
const
tablePageChange
=
(
info
)
=>
{
page
.
value
.
curr
=
Number
(
info
.
curr
);
page
.
value
.
limit
=
Number
(
info
.
limit
);
tableInfo
.
value
.
page
.
limit
=
page
.
value
.
limit
;
tableInfo
.
value
.
page
.
curr
=
page
.
value
.
curr
;
getTableData
();
};
const
getFirstPageData
=
()
=>
{
page
.
value
.
curr
=
1
getTableData
();
}
const
dialogBtnClick
=
(
btn
,
info
)
=>
{
if
(
btn
.
value
==
'submit'
)
{
let
params
=
{
...
info
}
params
.
bizGuid
=
currTableData
.
value
.
guid
params
.
funcCode
=
currTableData
.
value
.
funcCode
if
(
dialogInfo
.
value
.
type
==
'pass'
)
{
dialogInfo
.
value
.
visible
=
false
;
registerApproveAllow
(
params
).
then
((
res
:
any
)
=>
{
if
(
res
.
code
==
proxy
.
$passCode
)
{
getFirstPageData
();
ElMessage
({
type
:
'success'
,
message
:
'审批成功'
})
}
else
{
ElMessage
({
type
:
'error'
,
message
:
res
.
msg
,
})
}
}).
catch
(()
=>
{
})
}
else
if
(
dialogInfo
.
value
.
type
==
'reject'
)
{
if
(
info
.
approveSuggest
==
''
)
{
ElMessage
.
error
(
'请填写驳回原因'
)
return
}
dialogInfo
.
value
.
visible
=
false
;
registerApproveBackup
(
params
).
then
((
res
:
any
)
=>
{
if
(
res
.
code
==
proxy
.
$passCode
)
{
getFirstPageData
();
ElMessage
({
type
:
'success'
,
message
:
'驳回成功'
})
}
else
{
ElMessage
({
type
:
'error'
,
message
:
res
.
msg
,
})
}
}).
catch
(()
=>
{
})
}
}
else
if
(
btn
.
value
==
'cancel'
)
{
nextTick
(()
=>
{
dialogInfo
.
value
.
visible
=
false
;
})
}
};
onActivated
(()
=>
{
if
(
assetStore
.
isRefresh
)
{
//如果是首次加载,则不需要调用
getFirstPageData
();
assetStore
.
set
(
false
);
}
})
onBeforeMount
(()
=>
{
getParamsDataList
({
paramCode
:
'DAM-TYPE'
}).
then
((
res
:
any
)
=>
{
if
(
res
.
code
==
proxy
.
$passCode
)
{
damTypes
.
value
=
res
.
data
||
[];
let
item
=
searchItemList
.
value
.
find
(
item
=>
item
.
field
==
'damType'
);
item
&&
(
item
.
options
=
damTypes
.
value
);
}
else
{
proxy
.
$ElMessage
.
error
(
res
.
msg
);
}
})
})
</
script
>
<
template
>
<div
class=
"container_wrap"
>
<div
class=
"table_tool_wrap"
>
<TableTools
:searchItems=
"searchItemList"
:searchId=
"'data-source-search'"
@
search=
"toSearch"
/>
</div>
<div
class=
"table_panel_wrap"
>
<Table
:tableInfo=
"tableInfo"
@
tableBtnClick=
"tableBtnClick"
@
tablePageChange=
"tablePageChange"
/>
</div>
<!-- 审核对话框 -->
<Dialog
ref=
"listingDialogRef"
:dialogInfo=
"dialogInfo"
@
btnClick=
"dialogBtnClick"
/>
</div>
</
template
>
<
style
scoped
lang=
"scss"
>
.table_tool_wrap
{
width
:
100%
;
height
:
auto
;
padding
:
0
8px
;
min-height
:
44px
;
.tools_btns
{
padding
:
0px
0
0
;
}
}
.table_panel_wrap
{
width
:
100%
;
height
:
calc
(
100%
-
44px
);
padding
:
0px
8px
0
;
}
</
style
>
src/views/data_product/productListingDetail.vue
View file @
469a81b
...
...
@@ -1196,10 +1196,10 @@ onActivated(() => {
tab
.
meta
.
title
=
`编辑-
${
damName
}
`
;
break
;
case
'check'
:
tab
.
meta
.
title
=
`详情-
${
damName
}
`
;
tab
.
meta
.
title
=
`
上架
详情-
${
damName
}
`
;
break
;
case
'detail'
:
tab
.
meta
.
title
=
`详情-
${
damName
}
`
;
tab
.
meta
.
title
=
`
上架
详情-
${
damName
}
`
;
break
;
}
};
...
...
@@ -1761,6 +1761,13 @@ const rejectDialogBtnClick = (btn, info) => {
}
};
const viewProductDetail = () => {
router.push({
path: '/data-asset/register-catalog/register-catalog-detail',
query: { guid: flowDetail.value.damGuid, type: "asset", dataSources: 2, foundMode: flowDetail.value.foundMode, name: flowDetail.value.damName },
});
}
</
script
>
<
template
>
...
...
@@ -1836,7 +1843,7 @@ const rejectDialogBtnClick = (btn, info) => {
<div
class=
"list_panel"
v-else
>
<div
class=
"list_item"
>
<span
class=
"item_label"
>
数据产品名称:
</span>
<span
class=
"item_value"
>
{{
flowDetail
.
damName
||
'--'
}}
</span>
<span
class=
"item_value
link"
@
click=
"viewProductDetail
"
>
{{
flowDetail
.
damName
||
'--'
}}
</span>
</div>
<div
class=
"list_item"
>
<span
class=
"item_label"
>
资产类型:
</span>
...
...
@@ -2186,6 +2193,11 @@ const rejectDialogBtnClick = (btn, info) => {
text-align
:
justify
;
min-width
:
100px
;
&.link
{
color
:
var
(
--el-color-primary
);
cursor
:
pointer
;
}
.file-operate
{
display
:
flex
;
align-items
:
center
;
...
...
src/views/data_smart_contract/actionLogManage.vue
View file @
469a81b
...
...
@@ -63,6 +63,7 @@ const processTableInfo = ref({
{
label
:
"业务Guid"
,
field
:
"bizGuid"
,
width
:
262
},
{
label
:
"业务名称"
,
field
:
"bizName"
,
width
:
220
},
{
label
:
"节点名称"
,
field
:
"nodeName"
,
width
:
220
},
{
label
:
"功能名称"
,
field
:
"operatingLoc"
,
width
:
160
},
{
label
:
"操作时间"
,
field
:
"operatingTime"
,
width
:
170
},
{
label
:
"操作类型"
,
field
:
"operatingType"
,
width
:
110
,
getName
:
(
scope
)
=>
{
let
typeMap
=
{
...
...
Write
Preview
Styling with
Markdown
is supported
Attach a file
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 post a comment