@@ -126,6 +126,7 @@ export default {
126126 tableStatus: ' ' ,
127127 cdcDelayTime: ' ' ,
128128 lastDataChangeTime: ' ' ,
129+ upstreamTableStatus: [],
129130 statusMap: {
130131 error: i18n .t (' packages_business_table_status_error' ), // 异常
131132 draft: i18n .t (' packages_business_table_status_draft' ), // 草稿
@@ -461,10 +462,20 @@ export default {
461462 ? calcTimeUnit (res .cdcDelayTime , 2 , {
462463 autoHideMs: true ,
463464 })
464- : ' - '
465+ : ' '
465466 this .lastDataChangeTime = res? .lastDataChangeTime
466467 ? dayjs (res? .lastDataChangeTime ).format (' YYYY-MM-DD HH:mm:ss' )
467468 : ' -'
469+ this .upstreamTableStatus = res? .upstreamTableStatus ? .map ((item ) => {
470+ item .cdcDelayTime =
471+ isNum (item .cdcDelayTime ) && item .cdcDelayTime >= 0
472+ ? calcTimeUnit (item .cdcDelayTime , 2 , {
473+ autoHideMs: true ,
474+ })
475+ : ' -'
476+
477+ return item
478+ })
468479 })
469480 },
470481 getApisData () {
@@ -736,6 +747,15 @@ export default {
736747 handleCreateAPI () {
737748 this .$emit (' createApi' , this .connection , this .selected )
738749 },
750+
751+ handleOpenTask (item ) {
752+ this .openRoute ({
753+ name: item .syncType === ' migrate' ? ' MigrationMonitor' : ' TaskMonitor' ,
754+ params: {
755+ id: item .taskId ,
756+ },
757+ })
758+ },
739759 },
740760}
741761< / script>
@@ -816,12 +836,100 @@ export default {
816836 lastDataChangeTime || ' -'
817837 }}< / span>< / span
818838 >
819- < span
820- >< span class = " table-dec-label"
821- > {{ $t (' packages_business_cdc_delay_time' ) }}: < / span
822- >< span class = " table-dec-txt text-nowrap" > {{
823- cdcDelayTime || ' -'
824- }}< / span>< / span
839+
840+ < span class = " inline-flex align-center gap-1" >
841+ < span class = " table-dec-label"
842+ > {{ $t (' packages_business_cdc_delay_time' ) }}:
843+ < / span>
844+ < el- popover
845+ placement= " bottom"
846+ trigger= " hover"
847+ popper- style= " min-width: 300px;max-width: 380px;width: auto;"
848+ : disabled= " !upstreamTableStatus.length || !cdcDelayTime"
849+ >
850+ < template #reference
851+ >< span
852+ class = " table-dec-txt text-nowrap inline-flex align-center gap-0.5"
853+ : class = " {
854+ 'color-primary cursor-pointer':
855+ cdcDelayTime && upstreamTableStatus.length,
856+ }"
857+ >
858+ < el- icon v- if = " cdcDelayTime" >< i- lucide- clock / >< / el- icon
859+ > {{ cdcDelayTime || ' -' }}< / span
860+ >< / template
861+ >
862+ < div>
863+ < div class = " flex align-center gap-1" >
864+ < div class = " lh-base" >
865+ < div class = " fw-sub font-color-dark" >
866+ {{ $t (' packages_ldp_task_delay_detail' ) }}
867+ < / div>
868+ < div class = " font-color-sslight text-xs" >
869+ {{ $t (' packages_ldp_task_delay_detail_tip' ) }}
870+ < / div>
871+ < / div>
872+ < el- tooltip : hide- after= " 0" : teleported= " false" >
873+ < template #content>
874+ < div class = " fw-sub fs-7" >
875+ {{ $t (' packages_ldp_task_delay_detail_logic' ) }}
876+ < / div>
877+ < ul
878+ class = " ml-4 list-disc flex flex-column gap-0.5 text-xs"
879+ >
880+ < li class = " list-disc" >
881+ {{
882+ $t (' packages_ldp_task_delay_detail_logic_tip1' )
883+ }}
884+ < / li>
885+ < li class = " list-disc" >
886+ {{
887+ $t (' packages_ldp_task_delay_detail_logic_tip2' )
888+ }}
889+ < / li>
890+ < / ul>
891+ < / template>
892+ < div
893+ class = " ml-auto flex align-center justify-center p-2 bg-gray-100 dark:bg-white/15 rounded-pill"
894+ >
895+ < el- icon : size= " 16" >
896+ < i- lucide- info / >
897+ < / el- icon>
898+ < / div>
899+ < / el- tooltip>
900+ < / div>
901+ < el- divider class = " my-3" / >
902+ < div class = " mx-n3" >
903+ < el- scrollbar : max- height= " 280" class = " px-3" >
904+ < div class = " flex flex-column gap-2" >
905+ < div
906+ v- for = " item in upstreamTableStatus"
907+ : key= " item"
908+ class = " flex align-center gap-2 hover:bg-fill-color-light rounded-lg p-2 cursor-pointer task-item border"
909+ @click= " handleOpenTask(item)"
910+ >
911+ {{ item .taskName }}
912+ < el- icon
913+ class = " external-link-icon text-muted-foreground"
914+ >
915+ < i- lucide- external- link / >
916+ < / el- icon>
917+ < el- tag
918+ size= " small"
919+ class = " px-1 ml-auto"
920+ : type= " item.onDelayPath ? 'primary' : 'info'"
921+ >
922+ < span class = " flex align-center gap-0.5" >
923+ < el- icon>< i- lucide- clock / >< / el- icon>
924+ {{ item .cdcDelayTime }}
925+ < / span>
926+ < / el- tag>
927+ < / div>
928+ < / div>
929+ < / el- scrollbar>
930+ < / div>
931+ < / div>
932+ < / el- popover>< / span
825933 >
826934 < / template>
827935 < / div>
@@ -1483,4 +1591,14 @@ export default {
14831591 grid- gap: 16px ;
14841592 }
14851593}
1594+
1595+ .task - item {
1596+ .external - link- icon {
1597+ opacity: 0 ;
1598+ transition: opacity 0 .15s cubic- bezier (0.4 , 0 , 0.2 , 1 );
1599+ }
1600+ & : hover .external - link- icon {
1601+ opacity: 1 ;
1602+ }
1603+ }
14861604< / style>
0 commit comments