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
669f1983
authored
2025-03-03 14:43:48 +0800
by
lihua
Browse Files
Options
Browse Files
Tag
Download
Email Patches
Plain Diff
添加主平台审核状态
1 parent
556255c9
Show whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
224 additions
and
71 deletions
components.d.ts
src/api/modules/workFlowService.ts
src/components/ApprovalProcess/dialog_approval.vue
src/components/Table/index.vue
src/types/components.d.ts
src/utils/common.ts
src/views/data_asset/qualityEvaluate.vue
src/views/data_asset/registerDetail.vue
src/views/data_asset/registerManagemant.vue
src/views/data_asset/valueEvaluate.vue
src/views/data_product/productListing.vue
components.d.ts
View file @
669f198
...
...
@@ -17,6 +17,7 @@ declare module '@vue/runtime-core' {
Copyright
:
typeof
import
(
'./src/components/Copyright/index.vue'
)[
'default'
]
Day
:
typeof
import
(
'./src/components/Schedule/component/day.vue'
)[
'default'
]
Dialog
:
typeof
import
(
'./src/components/Dialog/index.vue'
)[
'default'
]
Dialog_approval
:
typeof
import
(
'./src/components/ApprovalProcess/dialog_approval.vue'
)[
'default'
]
Dialog_form
:
typeof
import
(
'./src/components/Dialog/dialog_form.vue'
)[
'default'
]
Dialog_grid
:
typeof
import
(
'./src/components/Dialog/dialog_grid.vue'
)[
'default'
]
Dialog_pane
:
typeof
import
(
'./src/components/Dialog/dialog_pane.vue'
)[
'default'
]
...
...
src/api/modules/workFlowService.ts
View file @
669f198
...
...
@@ -64,3 +64,10 @@ export const isMyFirstNode = (params) => request({
method
:
'post'
,
data
:
params
})
/** 获取跨平台审批数据节点详情 */
export
const
getCrossDetailList
=
(
params
)
=>
request
({
url
:
`
${
import
.
meta
.
env
.
VITE_APP_WORK_FLOW_URL
}
/approve-detail-cross/list`
,
method
:
'post'
,
data
:
params
})
...
...
src/components/ApprovalProcess/dialog_approval.vue
0 → 100644
View file @
669f198
<
script
lang=
"ts"
setup
name=
"DialogApproval"
>
import
{
TableColumnWidth
}
from
'@/utils/enum'
;
import
{
getCrossDetailList
}
from
'@/api/modules/workFlowService'
;
const
{
proxy
}
=
getCurrentInstance
()
as
any
;
const
emits
=
defineEmits
([
"dialogCancel"
]);
const
props
=
defineProps
({
visible
:
{
type
:
Boolean
,
default
:
false
},
currentRowInfo
:
{
type
:
Object
,
default
:
{
}
}
})
const
dialogInfo
=
ref
({
visible
:
false
,
size
:
700
,
direction
:
"column"
,
header
:
{
title
:
"主平台审批节点"
,
},
footer
:
{
visible
:
false
}
});
watch
(()
=>
props
.
visible
,
()
=>
{
dialogInfo
.
value
.
visible
=
props
.
visible
;
if
(
props
.
visible
)
{
tableInfo
.
value
.
data
=
[];
gettableList
();
}
},
{
immediate
:
true
})
/** 获取版本信息数据 */
const
gettableList
=
()
=>
{
tableInfo
.
value
.
loading
=
true
;
getCrossDetailList
({
pageIndex
:
1
,
pageSize
:
-
1
,
bizGuid
:
props
.
currentRowInfo
.
guid
}).
then
((
res
:
any
)
=>
{
tableInfo
.
value
.
loading
=
false
;
if
(
res
.
code
==
proxy
.
$passCode
)
{
const
data
=
res
.
data
||
[];
tableInfo
.
value
.
data
=
data
?.
map
(
d
=>
{
d
.
approveState
=
d
.
approveState
==
null
?
undefined
:
d
.
approveState
;
return
d
;
});
}
else
{
proxy
.
$ElMessage
.
error
(
res
.
msg
);
}
})
}
const
tableInfo
=
ref
({
id
:
'approval-table'
,
loading
:
false
,
minPanelHeight
:
"60px"
,
minHeight
:
"60px"
,
fields
:
[
{
label
:
"序号"
,
type
:
"index"
,
width
:
TableColumnWidth
.
INDEX
,
align
:
"center"
,
fixed
:
"left"
},
{
label
:
"节点"
,
field
:
"processName"
,
width
:
100
},
{
label
:
"处理对象"
,
field
:
"operator"
,
width
:
TableColumnWidth
.
USERNAME
},
{
label
:
"操作时间"
,
field
:
"operatingTime"
,
width
:
TableColumnWidth
.
DATETIME
,
},
{
label
:
"审批状态"
,
field
:
"approveState"
,
width
:
120
,
type
:
'tag'
},
{
label
:
"审批原因"
,
field
:
"approveSuggest"
,
width
:
TableColumnWidth
.
DESCRIPTION
},
],
data
:
[],
showPage
:
false
,
actionInfo
:
{
show
:
false
}
});
const
handleDialogCancel
=
()
=>
{
dialogInfo
.
value
.
visible
=
false
;
emits
(
"dialogCancel"
);
}
</
script
>
<
template
>
<!-- 版本信息 -->
<el-dialog
v-model=
"dialogInfo.visible"
:title=
"dialogInfo.header.title"
:width=
"dialogInfo.size"
:modal=
"true"
:close-on-click-modal=
"true"
destroy-on-close
align-center
@
close=
"handleDialogCancel"
>
<Table
ref=
"tableRef"
:tableInfo=
"tableInfo"
class=
"approval-table"
/>
</el-dialog>
</
template
>
<
style
lang=
"scss"
scoped
>
.approval-table
{
height
:
180px
!important
;
}
:deep
(
.cusror-inherit
)
{
cursor
:
inherit
;
}
</
style
>
\ No newline at end of file
src/components/Table/index.vue
View file @
669f198
...
...
@@ -291,6 +291,17 @@ onMounted(() => {
}}
</el-tag>
<span
v-else
>
{{
'--'
}}
</span>
</
template
>
<
template
#
default=
"scope"
v-else-if=
"item.type == 'approveTagBtn'"
>
<div
v-if=
"scope.row[item.field] !== undefined"
style=
"position: relative;"
>
<el-tag
:type=
"tagType(scope.row, item.field)"
>
{{
tagMethod
(
scope
.
row
,
item
.
field
)
}}
</el-tag>
<span
v-if=
"item.btn?.visible?.(scope) !== false && item.btn.visible !== false"
class=
"text_btn"
style=
"position: absolute;right: 0;"
@
click=
"(item.btn.click && !item.btn.disabled && !scope.row.disabled) ? item.btn.click(scope, item.btn) : handleClick(scope, item.btn)"
v-preReClick
>
{{
item
.
btn
.
label
}}
</span>
</div>
<span
v-else
>
{{
'--'
}}
</span>
</
template
>
<
template
#
default=
"scope"
v-else-if=
"item.type == 'popover'"
>
<el-popover
v-if=
"scope.row[item.field] !== undefined && (item.checkName ? item.checkName(scope) : true)"
placement=
"left-start"
:title=
"props.tableInfo.popoverTitle || '变化'"
:width=
"476"
trigger=
"hover"
...
...
src/types/components.d.ts
View file @
669f198
...
...
@@ -17,6 +17,7 @@ declare module '@vue/runtime-core' {
Copyright
:
typeof
import
(
'./../components/Copyright/index.vue'
)[
'default'
]
Day
:
typeof
import
(
'./../components/Schedule/component/day.vue'
)[
'default'
]
Dialog
:
typeof
import
(
'./../components/Dialog/index.vue'
)[
'default'
]
Dialog_approval
:
typeof
import
(
'./../components/ApprovalProcess/dialog_approval.vue'
)[
'default'
]
Dialog_form
:
typeof
import
(
'./../components/Dialog/dialog_form.vue'
)[
'default'
]
Dialog_grid
:
typeof
import
(
'./../components/Dialog/dialog_grid.vue'
)[
'default'
]
Dialog_pane
:
typeof
import
(
'./../components/Dialog/dialog_pane.vue'
)[
'default'
]
...
...
src/utils/common.ts
View file @
669f198
...
...
@@ -379,7 +379,7 @@ export const chunk = (arr, size) => {
}
// 设置tag样式
export
const
tagType
=
(
row
,
type
)
=>
{
export
const
tagType
=
(
row
,
type
)
:
any
=>
{
let
state
=
'info'
if
(
type
==
'connectStatus'
)
{
switch
(
row
[
type
])
{
...
...
@@ -441,7 +441,7 @@ export const tagType = (row, type) => {
state
=
'warning'
;
break
;
}
}
else
if
(
type
==
'approveState'
)
{
}
else
if
(
type
==
'approveState'
||
type
==
'crossPlatformApproveState'
)
{
switch
(
row
[
type
])
{
case
"N"
:
state
=
'info'
;
...
...
@@ -705,7 +705,7 @@ export const tagMethod = (row, type) => {
tag
=
'待受理'
break
;
}
}
else
if
(
type
==
'approveState'
)
{
}
else
if
(
type
==
'approveState'
||
type
==
'crossPlatformApproveState'
)
{
switch
(
row
[
type
])
{
case
"N"
:
tag
=
'草稿中'
...
...
@@ -723,7 +723,7 @@ export const tagMethod = (row, type) => {
tag
=
'已撤销'
break
;
default
:
tag
=
'--'
tag
=
type
==
'crossPlatformApproveState'
?
'未发起'
:
'--'
break
;
}
}
else
if
(
type
==
'standardType'
)
{
...
...
src/views/data_asset/qualityEvaluate.vue
View file @
669f198
...
...
@@ -6,6 +6,7 @@
import
{
ref
}
from
'vue'
;
import
TableTools
from
"@/components/Tools/table_tools.vue"
;
import
DialogApproval
from
'@/components/ApprovalProcess/dialog_approval.vue'
;
import
{
ElMessage
,
ElMessageBox
}
from
'element-plus'
;
import
{
getQualityEvaList
,
...
...
@@ -30,6 +31,14 @@ const { proxy } = getCurrentInstance() as any;
const
userStore
=
useUserStore
();
const
userData
=
JSON
.
parse
(
userStore
.
userData
)
const
systemApproveCurrentRowInfo
:
any
=
ref
({})
const
approvalDialogVisible
=
ref
(
false
);
const
handleApprovalDialogCancel
=
()
=>
{
approvalDialogVisible
.
value
=
false
;
}
/** 数据来源于该企业申请登记的数据资产已通过且剔除数据质量评价中已通过、审批中的资产。 */
const
assetListData
:
any
=
ref
([]);
...
...
@@ -40,6 +49,16 @@ const tableFields = ref([
// { label: "企业名称", field: "tenantName", width: 240, align: "left" },
{
label
:
"评估机构"
,
field
:
"evaluationAgencyName"
,
width
:
250
,
align
:
"left"
},
{
label
:
"审批状态"
,
field
:
"approveVO"
,
type
:
"approveTag"
,
width
:
96
,
align
:
'center'
},
{
label
:
"主平台审批状态"
,
field
:
"crossPlatformApproveState"
,
type
:
"approveTagBtn"
,
width
:
150
,
align
:
'center'
,
btn
:
{
label
:
'查看'
,
visible
:
(
scope
)
=>
{
return
scope
.
row
.
crossPlatformApproveState
!=
null
;
},
click
:
(
scope
)
=>
{
systemApproveCurrentRowInfo
.
value
=
scope
.
row
;
approvalDialogVisible
.
value
=
true
;
}
}
},
]);
const
deploymentId
=
ref
(
''
);
...
...
@@ -845,6 +864,8 @@ const passCommonDialogBtnClick = (btn, info) => {
<Dialog
:dialogInfo=
"passDialogInfo"
@
btnClick=
"passDialogBtnClick"
@
inputChange=
passDialogInputChange
/>
<Dialog
:dialogInfo=
"rejectDialogInfo"
@
btnClick=
"rejectDialogBtnClick"
/>
<Dialog
:dialogInfo=
"passCommonDialogInfo"
@
btnClick=
"passCommonDialogBtnClick"
/>
<DialogApproval
:visible=
"approvalDialogVisible"
:currentRowInfo=
"systemApproveCurrentRowInfo"
@
dialog-cancel=
"handleApprovalDialogCancel"
></DialogApproval>
</div>
</
template
>
...
...
src/views/data_asset/registerDetail.vue
View file @
669f198
...
...
@@ -25,7 +25,7 @@ import {
}
from
"@/api/modules/queryService"
;
import
{
passFlowData
,
rejectFlowData
,
revokeFlowData
,
isMyFirstNode
}
from
"@/api/modules/workFlowService"
;
import
useDataAssetStore
from
"@/store/modules/dataAsset"
;
import
{
changeNum
,
getDownloadUrl
,
download
}
from
'@/utils/common'
;
import
{
changeNum
}
from
'@/utils/common'
;
import
{
onUploadFilePreview
,
onUploadFileDownload
}
from
'@/api/modules/common'
;
const
assetStore
=
useDataAssetStore
();
...
...
src/views/data_asset/registerManagemant.vue
View file @
669f198
...
...
@@ -7,6 +7,7 @@ import { ref } from 'vue';
import
TableTools
from
"@/components/Tools/table_tools.vue"
;
import
{
ElMessage
,
ElMessageBox
}
from
'element-plus'
;
import
{
CarouselPanel
}
from
'@/components/CarouselPanel'
;
import
DialogApproval
from
'@/components/ApprovalProcess/dialog_approval.vue'
;
import
{
useRouter
,
useRoute
}
from
"vue-router"
;
import
{
MoreFilled
}
from
"@element-plus/icons-vue"
;
import
{
changeNum
}
from
"@/utils/common"
;
...
...
@@ -95,13 +96,21 @@ const pageInfo = ref({
tenantGuid
:
''
,
});
const
systemApproveCurrentRowInfo
:
any
=
ref
({})
const
approvalDialogVisible
=
ref
(
false
);
const
handleApprovalDialogCancel
=
()
=>
{
approvalDialogVisible
.
value
=
false
;
}
const
tableFields
=
ref
([{
label
:
"序号"
,
type
:
"index"
,
width
:
56
,
align
:
"center"
},
{
label
:
"资产名称"
,
field
:
"daName"
,
width
:
160
,
align
:
"left"
},
{
label
:
"数据分类"
,
field
:
"dataCategoryName"
,
width
:
120
,
align
:
"left"
},
{
label
:
"存储方式"
,
field
:
"storageFormName"
,
width
:
120
,
align
:
"left"
},
{
label
:
"数交所名称"
,
field
:
"exchangeName"
,
width
:
160
,
align
:
"left"
},
{
label
:
"状态"
,
field
:
"approveState"
,
type
:
"tag"
,
width
:
96
,
align
:
'center'
,
getName
:
(
scope
)
=>
{
label
:
"
审批
状态"
,
field
:
"approveState"
,
type
:
"tag"
,
width
:
96
,
align
:
'center'
,
getName
:
(
scope
)
=>
{
const
approveVO
=
scope
.
row
.
approveVO
||
{}
switch
(
approveVO
.
approveState
)
{
case
'N'
:
...
...
@@ -133,6 +142,16 @@ const tableFields = ref([{ label: "序号", type: "index", width: 56, align: "ce
}
}
},
{
label
:
"主平台审批状态"
,
field
:
"crossPlatformApproveState"
,
type
:
"approveTagBtn"
,
width
:
150
,
align
:
'center'
,
btn
:
{
label
:
'查看'
,
visible
:
(
scope
)
=>
{
return
scope
.
row
.
crossPlatformApproveState
!=
null
;
},
click
:
(
scope
)
=>
{
systemApproveCurrentRowInfo
.
value
=
scope
.
row
;
approvalDialogVisible
.
value
=
true
;
}
}
},
{
label
:
"修改人"
,
field
:
"updateUserName"
,
width
:
140
},
{
label
:
"修改时间"
,
field
:
"updateTime"
,
width
:
180
}]);
...
...
@@ -562,6 +581,8 @@ const rejectDialogBtnClick = (btn, info) => {
</div>
<Dialog
:dialogInfo=
"passDialogInfo"
@
btnClick=
"passDialogBtnClick"
/>
<Dialog
:dialogInfo=
"rejectDialogInfo"
@
btnClick=
"rejectDialogBtnClick"
/>
<DialogApproval
:visible=
"approvalDialogVisible"
:currentRowInfo=
"systemApproveCurrentRowInfo"
@
dialog-cancel=
"handleApprovalDialogCancel"
></DialogApproval>
</div>
</template>
...
...
src/views/data_asset/valueEvaluate.vue
View file @
669f198
...
...
@@ -12,10 +12,9 @@ import {
saveCostAssess
,
updateCostAssess
,
deleteCostAssess
,
registerApproveCancel
,
registerApproveBackup
,
costAssessAllow
}
from
"@/api/modules/dataAsset"
;
import
DialogApproval
from
'@/components/ApprovalProcess/dialog_approval.vue'
;
import
{
getStaffDetailInfo
}
from
"@/api/modules/queryService"
;
...
...
@@ -36,8 +35,14 @@ const isCompanyPlatform = ref(userData.tenantType == 1);
/** 数据来源于该企业申请登记的数据资产已通过且剔除数据价值评估中已通过、审批中的资产。 */
const
assetListData
:
any
=
ref
([]);
/** 会员附件模板 */
const
attachDataInfo
:
any
=
ref
({});
const
systemApproveCurrentRowInfo
:
any
=
ref
({})
const
approvalDialogVisible
=
ref
(
false
);
const
handleApprovalDialogCancel
=
()
=>
{
approvalDialogVisible
.
value
=
false
;
}
const
tableFields
=
ref
([
{
label
:
"序号"
,
type
:
"index"
,
width
:
56
,
align
:
"center"
},
...
...
@@ -46,35 +51,15 @@ const tableFields = ref([
// { label: "企业名称", field: "tenantName", width: 240, align: "left" },
{
label
:
"评估机构"
,
field
:
"evaluationAgencyName"
,
width
:
250
,
align
:
"left"
},
{
label
:
"审批状态"
,
field
:
"approveState"
,
type
:
"tag"
,
width
:
96
,
align
:
'center'
,
getName
:
(
scope
)
=>
{
const
approveVO
=
scope
.
row
.
approveVO
||
{}
switch
(
approveVO
.
approveState
)
{
case
'N'
:
return
'草稿中'
;
case
'A'
:
return
'审批中'
;
case
'Y'
:
return
'已通过'
;
case
'R'
:
return
'已驳回'
;
case
'C'
:
return
'已撤销'
;
case
'I'
:
return
'--'
;
default
:
return
'草稿中'
;
}
},
tagType
:
(
scope
)
=>
{
const
approveVO
=
scope
.
row
.
approveVO
||
{}
switch
(
approveVO
.
approveState
)
{
case
'A'
:
return
'warning'
;
case
'Y'
:
return
'success'
;
case
'R'
:
return
'danger'
;
default
:
return
'info'
;
label
:
"审批状态"
,
field
:
"approveVO"
,
type
:
"approveTag"
,
width
:
96
,
align
:
'center'
},
{
label
:
"主平台审批状态"
,
field
:
"crossPlatformApproveState"
,
type
:
"approveTagBtn"
,
width
:
150
,
align
:
'center'
,
btn
:
{
label
:
'查看'
,
visible
:
(
scope
)
=>
{
return
scope
.
row
.
crossPlatformApproveState
!=
null
;
},
click
:
(
scope
)
=>
{
systemApproveCurrentRowInfo
.
value
=
scope
.
row
;
approvalDialogVisible
.
value
=
true
;
}
}
},
...
...
@@ -1180,6 +1165,7 @@ const passCommonDialogBtnClick = (btn, info) => {
<Dialog
:dialogInfo=
"passDialogInfo"
@
btnClick=
"passDialogBtnClick"
@
inputChange=
"passDialogInputChange"
/>
<Dialog
:dialogInfo=
"rejectDialogInfo"
@
btnClick=
"rejectDialogBtnClick"
/>
<Dialog
:dialogInfo=
"passCommonDialogInfo"
@
btnClick=
"passCommonDialogBtnClick"
/>
<DialogApproval
:visible=
"approvalDialogVisible"
:currentRowInfo=
"systemApproveCurrentRowInfo"
@
dialog-cancel=
"handleApprovalDialogCancel"
></DialogApproval>
</div>
</
template
>
...
...
src/views/data_product/productListing.vue
View file @
669f198
...
...
@@ -11,7 +11,7 @@ import { ElMessage, ElMessageBox } from "element-plus";
import
useDataAssetStore
from
"@/store/modules/dataAsset"
;
import
{
getListingList
,
listingDelete
,
listingUpdateStatus
,
getListingCount
,
productRejectFlowData
}
from
"@/api/modules/dataProduct"
;
import
{
TableColumnWidth
}
from
'@/utils/enum'
;
import
DialogApproval
from
'@/components/ApprovalProcess/dialog_approval.vue'
;
import
TableTools
from
"@/components/Tools/table_tools.vue"
;
import
Table
from
"@/components/Table/index.vue"
;
import
{
CarouselPanel
}
from
'@/components/CarouselPanel'
;
...
...
@@ -76,6 +76,15 @@ const page = ref({
});
const
searchItemValue
:
any
=
ref
({});
const
currTableData
:
any
=
ref
({});
const
systemApproveCurrentRowInfo
:
any
=
ref
({})
const
approvalDialogVisible
=
ref
(
false
);
const
handleApprovalDialogCancel
=
()
=>
{
approvalDialogVisible
.
value
=
false
;
}
const
tableInfo
=
ref
({
id
:
"mapping-table"
,
fields
:
[
...
...
@@ -92,43 +101,23 @@ const tableInfo = ref({
},
{
label
:
"上架分类"
,
field
:
"exchangeName"
,
width
:
140
},
{
label
:
"审核状态"
,
field
:
"approveState"
,
width
:
TableColumnWidth
.
STATE
,
align
:
'center'
,
type
:
"tag"
,
getName
:
(
scope
)
=>
{
const
approveVO
=
scope
.
row
.
approveVO
||
{}
switch
(
approveVO
.
approveState
)
{
case
'N'
:
return
'草稿中'
;
case
'A'
:
return
'审批中'
;
case
'Y'
:
return
'已通过'
;
case
'R'
:
return
'已驳回'
;
case
'C'
:
return
'已撤销'
;
case
'I'
:
return
'--'
;
default
:
return
'草稿中'
;
}
},
tagType
:
(
scope
)
=>
{
const
approveVO
=
scope
.
row
.
approveVO
||
{}
switch
(
approveVO
.
approveState
)
{
case
'A'
:
return
'warning'
;
case
'Y'
:
return
'success'
;
case
'R'
:
return
'danger'
;
default
:
return
'info'
;
}
}
label
:
"审批状态"
,
field
:
"approveVO"
,
type
:
"approveTag"
,
width
:
TableColumnWidth
.
STATE
,
align
:
'center'
},
{
label
:
'上架状态'
,
field
:
'listingStatus'
,
width
:
100
,
getName
:
(
scope
)
=>
{
return
scope
.
row
.
listingStatus
==
'Y'
?
'已上架'
:
'未上架'
;
}
},
{
label
:
"主平台审批状态"
,
field
:
"crossPlatformApproveState"
,
type
:
"approveTagBtn"
,
width
:
150
,
align
:
'center'
,
btn
:
{
label
:
'查看'
,
visible
:
(
scope
)
=>
{
return
scope
.
row
.
crossPlatformApproveState
!=
null
;
},
click
:
(
scope
)
=>
{
systemApproveCurrentRowInfo
.
value
=
scope
.
row
;
approvalDialogVisible
.
value
=
true
;
}
}
},
{
label
:
"修改时间"
,
field
:
"updateTime"
,
width
:
TableColumnWidth
.
DATETIME
},
],
loading
:
false
,
...
...
@@ -995,6 +984,7 @@ const rejectDialogBtnClick = (btn, info) => {
</el-dialog>
<Dialog
:dialogInfo=
"passCommonDialogInfo"
@
btnClick=
"passCommonDialogBtnClick"
/>
<Dialog
:dialogInfo=
"rejectDialogInfo"
@
btnClick=
"rejectDialogBtnClick"
/>
<DialogApproval
:visible=
"approvalDialogVisible"
:currentRowInfo=
"systemApproveCurrentRowInfo"
@
dialog-cancel=
"handleApprovalDialogCancel"
></DialogApproval>
</div>
</template>
...
...
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