|
@@ -775,24 +775,72 @@ const ClickParams = (val: any) => {
|
|
|
})
|
|
})
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
+import kpiChartTip from './guideImage/kpi-chart-tip.png'
|
|
|
|
|
+import pendingChartTip from './guideImage/pending-chart-tip.png'
|
|
|
|
|
+import etdToEtaChartsTip from './guideImage/etd-to-eta-chart-tip.png'
|
|
|
|
|
+import containerChartTip from './guideImage/container-count-chart-tip.png'
|
|
|
|
|
+import top10ChartTip from './guideImage/top-10-chart-tip.png'
|
|
|
|
|
+import co2eChartTip from './guideImage/co2e-chart-tip.png'
|
|
|
|
|
+import revenueSpentChartTip from './guideImage/revenue-spent-chart-tip.png'
|
|
|
|
|
+import recentStatusChartTip from './guideImage/recent-status-chart-tip.png'
|
|
|
|
|
+
|
|
|
|
|
+import DashboardGuide from '../src/components/DashboardGuide.vue'
|
|
|
|
|
+import { useGuideStore } from '@/stores/modules/guide'
|
|
|
|
|
+import { useThemeStore } from '@/stores/modules/theme'
|
|
|
|
|
+
|
|
|
|
|
+import viewManagementLight from './guideImage/view-management.png'
|
|
|
|
|
+import viewManagementDark from './guideImage/dark-view-management.png'
|
|
|
|
|
+import saveConfigLight from './guideImage/save-config-guide.png'
|
|
|
|
|
+import saveConfigDark from './guideImage/dark-save-config-guide.png'
|
|
|
|
|
+import kpiChartLight from './guideImage/kpi-chart-guide.png'
|
|
|
|
|
+import kpiChartDark from './guideImage/dark-kpi-chart-guide.png'
|
|
|
|
|
+
|
|
|
|
|
+const themeStore = useThemeStore()
|
|
|
|
|
+
|
|
|
|
|
+const viewManagementImg = computed(() => {
|
|
|
|
|
+ return themeStore.theme === 'dark' ? viewManagementDark : viewManagementLight
|
|
|
|
|
+})
|
|
|
|
|
+const saveConfigImg = computed(() => {
|
|
|
|
|
+ return themeStore.theme === 'dark' ? saveConfigDark : saveConfigLight
|
|
|
|
|
+})
|
|
|
|
|
+const kpiChartImg = computed(() => {
|
|
|
|
|
+ return themeStore.theme === 'dark' ? kpiChartDark : kpiChartLight
|
|
|
|
|
+})
|
|
|
|
|
+const guideStore = useGuideStore()
|
|
|
|
|
+const handleGuide = () => {
|
|
|
|
|
+ dashboardGuideRef.value?.startGuide()
|
|
|
|
|
+}
|
|
|
|
|
+const dashboardGuideRef = ref(null)
|
|
|
</script>
|
|
</script>
|
|
|
<template>
|
|
<template>
|
|
|
<div class="dashboard">
|
|
<div class="dashboard">
|
|
|
<!-- 评分 -->
|
|
<!-- 评分 -->
|
|
|
<ScoringSystem></ScoringSystem>
|
|
<ScoringSystem></ScoringSystem>
|
|
|
|
|
+ <DashboardGuide ref="dashboardGuideRef"></DashboardGuide>
|
|
|
<!-- Title -->
|
|
<!-- Title -->
|
|
|
<div class="Title">
|
|
<div class="Title">
|
|
|
- <div>Dashboard</div>
|
|
|
|
|
|
|
+ <div>
|
|
|
|
|
+ <span>Dashboard</span>
|
|
|
|
|
+ <VDriverGuide style="margin-top: -1px" @click="handleGuide"></VDriverGuide>
|
|
|
|
|
+ </div>
|
|
|
|
|
+
|
|
|
<div>
|
|
<div>
|
|
|
<el-popover trigger="click" width="400" popper-style="border-radius: 12px">
|
|
<el-popover trigger="click" width="400" popper-style="border-radius: 12px">
|
|
|
<template #reference>
|
|
<template #reference>
|
|
|
- <el-button class="el-button--default">
|
|
|
|
|
|
|
+ <el-button class="el-button--default" style="position: relative">
|
|
|
<span class="iconfont_icon">
|
|
<span class="iconfont_icon">
|
|
|
<svg class="iconfont" aria-hidden="true">
|
|
<svg class="iconfont" aria-hidden="true">
|
|
|
<use xlink:href="#icon-icon_view__management_b"></use>
|
|
<use xlink:href="#icon-icon_view__management_b"></use>
|
|
|
</svg>
|
|
</svg>
|
|
|
</span>
|
|
</span>
|
|
|
View Management
|
|
View Management
|
|
|
|
|
+ <img
|
|
|
|
|
+ id="view-management-guide"
|
|
|
|
|
+ v-if="guideStore.dashboard.isShowViewManagementGuidePhoto"
|
|
|
|
|
+ class="view-management-guide-class"
|
|
|
|
|
+ :src="viewManagementImg"
|
|
|
|
|
+ alt=""
|
|
|
|
|
+ />
|
|
|
</el-button>
|
|
</el-button>
|
|
|
</template>
|
|
</template>
|
|
|
<div class="Management">
|
|
<div class="Management">
|
|
@@ -831,6 +879,7 @@ const ClickParams = (val: any) => {
|
|
|
<template #reference>
|
|
<template #reference>
|
|
|
<el-button
|
|
<el-button
|
|
|
class="el-button--default"
|
|
class="el-button--default"
|
|
|
|
|
+ style="position: relative"
|
|
|
@blur="SaveVisible = false"
|
|
@blur="SaveVisible = false"
|
|
|
@click="SaveVisible = !SaveVisible"
|
|
@click="SaveVisible = !SaveVisible"
|
|
|
>
|
|
>
|
|
@@ -840,6 +889,15 @@ const ClickParams = (val: any) => {
|
|
|
</svg>
|
|
</svg>
|
|
|
</span>
|
|
</span>
|
|
|
Save
|
|
Save
|
|
|
|
|
+
|
|
|
|
|
+ <!-- v-if="guideStore.dashboard.isShowSaveConfigGuidePhoto" -->
|
|
|
|
|
+ <img
|
|
|
|
|
+ id="save-config-guide"
|
|
|
|
|
+ v-if="guideStore.dashboard.isShowSaveConfigGuidePhoto"
|
|
|
|
|
+ class="save-config-guide-class"
|
|
|
|
|
+ :src="saveConfigImg"
|
|
|
|
|
+ alt=""
|
|
|
|
|
+ />
|
|
|
<span class="iconfont_icon">
|
|
<span class="iconfont_icon">
|
|
|
<svg class="iconfont" aria-hidden="true">
|
|
<svg class="iconfont" aria-hidden="true">
|
|
|
<use xlink:href="#icon-icon_dropdown_b"></use>
|
|
<use xlink:href="#icon-icon_dropdown_b"></use>
|
|
@@ -886,15 +944,32 @@ const ClickParams = (val: any) => {
|
|
|
<template v-for="item in Management" :key="item">
|
|
<template v-for="item in Management" :key="item">
|
|
|
<div v-if="item.title === 'KPI' && item.switchValue" class="filters_left">
|
|
<div v-if="item.title === 'KPI' && item.switchValue" class="filters_left">
|
|
|
<!-- KPI -->
|
|
<!-- KPI -->
|
|
|
- <VBox_Dashboard @changeCancel="changeCancel(item.id)">
|
|
|
|
|
|
|
+ <VBox_Dashboard
|
|
|
|
|
+ style="overflow: visible"
|
|
|
|
|
+ @changeCancel="changeCancel(item.id)"
|
|
|
|
|
+ :isShowDragIconGudie="true"
|
|
|
|
|
+ >
|
|
|
<template #header>
|
|
<template #header>
|
|
|
- <div class="Title_flex">
|
|
|
|
|
- <span>
|
|
|
|
|
|
|
+ <div class="Title_flex" style="position: relative">
|
|
|
|
|
+ <img
|
|
|
|
|
+ v-if="guideStore.dashboard.isShowKpiChartGuidePhoto"
|
|
|
|
|
+ id="kpi-chart-guide"
|
|
|
|
|
+ class="kpi-chart-guide-class"
|
|
|
|
|
+ :src="kpiChartImg"
|
|
|
|
|
+ alt=""
|
|
|
|
|
+ />
|
|
|
|
|
+ <div>
|
|
|
{{ item.title }}
|
|
{{ item.title }}
|
|
|
- <!-- <VTipTooltip></VTipTooltip> -->
|
|
|
|
|
- </span>
|
|
|
|
|
|
|
+ <VTipTooltip
|
|
|
|
|
+ :img="kpiChartTip"
|
|
|
|
|
+ :width="410"
|
|
|
|
|
+ :label="'KPI Report:Day difference between actual and estimate.'"
|
|
|
|
|
+ placement="bottom-start"
|
|
|
|
|
+ ></VTipTooltip>
|
|
|
|
|
+ </div>
|
|
|
<DashFilters
|
|
<DashFilters
|
|
|
:defaultData="KPIDefaulteData"
|
|
:defaultData="KPIDefaulteData"
|
|
|
|
|
+ :isShowTransportModeGuide="true"
|
|
|
@FilterSearch="GetKpiData"
|
|
@FilterSearch="GetKpiData"
|
|
|
></DashFilters>
|
|
></DashFilters>
|
|
|
<!-- <el-tooltip
|
|
<!-- <el-tooltip
|
|
@@ -940,7 +1015,14 @@ const ClickParams = (val: any) => {
|
|
|
<VBox_Dashboard @changeCancel="changeCancel(item.id)">
|
|
<VBox_Dashboard @changeCancel="changeCancel(item.id)">
|
|
|
<template #header>
|
|
<template #header>
|
|
|
<div class="Title_flex">
|
|
<div class="Title_flex">
|
|
|
- {{ item.title }}
|
|
|
|
|
|
|
+ <div>
|
|
|
|
|
+ {{ item.title }}
|
|
|
|
|
+ <VTipTooltip
|
|
|
|
|
+ :img="pendingChartTip"
|
|
|
|
|
+ :width="420"
|
|
|
|
|
+ :label="'Pending Report:Showing shipments which are soon to depart/arrive.'"
|
|
|
|
|
+ ></VTipTooltip>
|
|
|
|
|
+ </div>
|
|
|
<DashFilters
|
|
<DashFilters
|
|
|
:defaultData="PendingDefaulteData"
|
|
:defaultData="PendingDefaulteData"
|
|
|
:radioisDisabled="true"
|
|
:radioisDisabled="true"
|
|
@@ -981,7 +1063,14 @@ const ClickParams = (val: any) => {
|
|
|
<VBox_Dashboard @changeCancel="changeCancel(item.id)">
|
|
<VBox_Dashboard @changeCancel="changeCancel(item.id)">
|
|
|
<template #header>
|
|
<template #header>
|
|
|
<div class="Title_flex">
|
|
<div class="Title_flex">
|
|
|
- {{ item.title }}
|
|
|
|
|
|
|
+ <div>
|
|
|
|
|
+ {{ item.title }}
|
|
|
|
|
+ <VTipTooltip
|
|
|
|
|
+ :img="etdToEtaChartsTip"
|
|
|
|
|
+ :width="430"
|
|
|
|
|
+ :label="'ETD to ETA (Days):Distribution of Transit Time (ETA-ETD) for All Shipments in Last 12 Months.'"
|
|
|
|
|
+ ></VTipTooltip>
|
|
|
|
|
+ </div>
|
|
|
<DashFilters
|
|
<DashFilters
|
|
|
:defaultData="ETDDefaulteData"
|
|
:defaultData="ETDDefaulteData"
|
|
|
@FilterSearch="GetETDEcharts"
|
|
@FilterSearch="GetETDEcharts"
|
|
@@ -1009,7 +1098,13 @@ const ClickParams = (val: any) => {
|
|
|
<VBox_Dashboard @changeCancel="changeCancel(item.id)">
|
|
<VBox_Dashboard @changeCancel="changeCancel(item.id)">
|
|
|
<template #header>
|
|
<template #header>
|
|
|
<div class="Title_flex">
|
|
<div class="Title_flex">
|
|
|
- {{ item.title }}
|
|
|
|
|
|
|
+ <div>
|
|
|
|
|
+ {{ item.title }}
|
|
|
|
|
+ <VTipTooltip
|
|
|
|
|
+ :img="containerChartTip"
|
|
|
|
|
+ :label="'Container Count:Total Container Volume by Month (Last 12 Months)'"
|
|
|
|
|
+ ></VTipTooltip>
|
|
|
|
|
+ </div>
|
|
|
<DashFilters
|
|
<DashFilters
|
|
|
:defaultData="ContainerefaultData"
|
|
:defaultData="ContainerefaultData"
|
|
|
@FilterSearch="GetContainerCountEcharts"
|
|
@FilterSearch="GetContainerCountEcharts"
|
|
@@ -1037,15 +1132,23 @@ const ClickParams = (val: any) => {
|
|
|
<VBox_Dashboard @changeCancel="changeCancel(item.id)" style="width: 100%">
|
|
<VBox_Dashboard @changeCancel="changeCancel(item.id)" style="width: 100%">
|
|
|
<template #header>
|
|
<template #header>
|
|
|
<div class="Title_flex" style="height: 48px">
|
|
<div class="Title_flex" style="height: 48px">
|
|
|
- <el-tabs
|
|
|
|
|
- v-model="activeName"
|
|
|
|
|
- class="demo-tabs"
|
|
|
|
|
- style="height: 48px"
|
|
|
|
|
- @tab-click="handleTabClick"
|
|
|
|
|
- >
|
|
|
|
|
- <el-tab-pane :label="item.title1" name="first"></el-tab-pane>
|
|
|
|
|
- <el-tab-pane :label="item.title2" name="second"></el-tab-pane>
|
|
|
|
|
- </el-tabs>
|
|
|
|
|
|
|
+ <div style="display: flex">
|
|
|
|
|
+ <el-tabs
|
|
|
|
|
+ v-model="activeName"
|
|
|
|
|
+ class="demo-tabs"
|
|
|
|
|
+ style="height: 48px"
|
|
|
|
|
+ @tab-click="handleTabClick"
|
|
|
|
|
+ >
|
|
|
|
|
+ <el-tab-pane :label="item.title1" name="first"></el-tab-pane>
|
|
|
|
|
+ <el-tab-pane :label="item.title2" name="second"></el-tab-pane>
|
|
|
|
|
+ </el-tabs>
|
|
|
|
|
+ <VTipTooltip
|
|
|
|
|
+ style="margin-left: 4px"
|
|
|
|
|
+ :img="top10ChartTip"
|
|
|
|
|
+ :label="'Top 10 Origin & Destination: Last 12 Months Shipment Volume Rankings: Top 10 Origin Cities and Top 10 Destination Cities'"
|
|
|
|
|
+ :width="700"
|
|
|
|
|
+ ></VTipTooltip>
|
|
|
|
|
+ </div>
|
|
|
<DashFilters
|
|
<DashFilters
|
|
|
:defaultData="Top10DefaultData"
|
|
:defaultData="Top10DefaultData"
|
|
|
@FilterSearch="GetTop10ODEcharts"
|
|
@FilterSearch="GetTop10ODEcharts"
|
|
@@ -1097,7 +1200,14 @@ const ClickParams = (val: any) => {
|
|
|
<VBox_Dashboard @changeCancel="changeCancel(item.id)">
|
|
<VBox_Dashboard @changeCancel="changeCancel(item.id)">
|
|
|
<template #header>
|
|
<template #header>
|
|
|
<div class="Title_flex">
|
|
<div class="Title_flex">
|
|
|
- {{ item.title }}
|
|
|
|
|
|
|
+ <div>
|
|
|
|
|
+ {{ item.title }}
|
|
|
|
|
+ <VTipTooltip
|
|
|
|
|
+ :img="co2eChartTip"
|
|
|
|
|
+ :label="'CO2e Emission by Origin or Destination: Last 12 Months CO2e Emission Rankings: Top 10 Origin Cities and Top 10 Destination Cities'"
|
|
|
|
|
+ :width="700"
|
|
|
|
|
+ ></VTipTooltip>
|
|
|
|
|
+ </div>
|
|
|
<DashFilters
|
|
<DashFilters
|
|
|
:defaultData="Co2OriginDefaultData"
|
|
:defaultData="Co2OriginDefaultData"
|
|
|
@FilterSearch="GetCo2EmissionEcharts"
|
|
@FilterSearch="GetCo2EmissionEcharts"
|
|
@@ -1125,7 +1235,10 @@ const ClickParams = (val: any) => {
|
|
|
<VBox_Dashboard @changeCancel="changeCancel(item.id)">
|
|
<VBox_Dashboard @changeCancel="changeCancel(item.id)">
|
|
|
<template #header>
|
|
<template #header>
|
|
|
<div class="Title_flex">
|
|
<div class="Title_flex">
|
|
|
- {{ item.title }}
|
|
|
|
|
|
|
+ <div>
|
|
|
|
|
+ {{ item.title }}
|
|
|
|
|
+ <!-- <VTipTooltip :img="co2eChartTip"></VTipTooltip> -->
|
|
|
|
|
+ </div>
|
|
|
<DashFilters
|
|
<DashFilters
|
|
|
:defaultData="Co2DestinationDefaultData"
|
|
:defaultData="Co2DestinationDefaultData"
|
|
|
@FilterSearch="GetCo2DestinationEcharts"
|
|
@FilterSearch="GetCo2DestinationEcharts"
|
|
@@ -1159,7 +1272,14 @@ const ClickParams = (val: any) => {
|
|
|
<VBox_Dashboard @changeCancel="changeCancel(item.id)" style="width: 100%">
|
|
<VBox_Dashboard @changeCancel="changeCancel(item.id)" style="width: 100%">
|
|
|
<template #header>
|
|
<template #header>
|
|
|
<div class="Title_flex">
|
|
<div class="Title_flex">
|
|
|
- {{ item.title }}
|
|
|
|
|
|
|
+ <div>
|
|
|
|
|
+ {{ item.title }}
|
|
|
|
|
+ <VTipTooltip
|
|
|
|
|
+ :img="recentStatusChartTip"
|
|
|
|
|
+ :label="'Recent Status: Active shipment list with ETD within the past three months and the next month.'"
|
|
|
|
|
+ :width="700"
|
|
|
|
|
+ ></VTipTooltip>
|
|
|
|
|
+ </div>
|
|
|
<DashFilters
|
|
<DashFilters
|
|
|
:defaultData="RecentDefaulteData"
|
|
:defaultData="RecentDefaulteData"
|
|
|
@FilterSearch="getTableData"
|
|
@FilterSearch="getTableData"
|
|
@@ -1190,7 +1310,15 @@ const ClickParams = (val: any) => {
|
|
|
<VBox_Dashboard @changeCancel="changeCancel(item.id)" style="width: 100%">
|
|
<VBox_Dashboard @changeCancel="changeCancel(item.id)" style="width: 100%">
|
|
|
<template #header>
|
|
<template #header>
|
|
|
<div class="Title_flex">
|
|
<div class="Title_flex">
|
|
|
- Revenue Spent
|
|
|
|
|
|
|
+ <div>
|
|
|
|
|
+ Revenue Spent
|
|
|
|
|
+ <VTipTooltip
|
|
|
|
|
+ :img="revenueSpentChartTip"
|
|
|
|
|
+ :label="'Revenue Spent: Based on the billto object, display the corresponding revenue data. '"
|
|
|
|
|
+ :width="700"
|
|
|
|
|
+ ></VTipTooltip>
|
|
|
|
|
+ </div>
|
|
|
|
|
+
|
|
|
<DashFilters
|
|
<DashFilters
|
|
|
:defaultData="RevenueDefaultData"
|
|
:defaultData="RevenueDefaultData"
|
|
|
@FilterSearch="GetRevenueEcharts"
|
|
@FilterSearch="GetRevenueEcharts"
|
|
@@ -1230,6 +1358,32 @@ const ClickParams = (val: any) => {
|
|
|
.iconfont {
|
|
.iconfont {
|
|
|
vertical-align: -2px;
|
|
vertical-align: -2px;
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+.view-management-guide-class {
|
|
|
|
|
+ position: absolute;
|
|
|
|
|
+ top: -1px;
|
|
|
|
|
+ right: -17px;
|
|
|
|
|
+ width: 343px;
|
|
|
|
|
+ height: 478px;
|
|
|
|
|
+ z-index: 1500;
|
|
|
|
|
+}
|
|
|
|
|
+.save-config-guide-class {
|
|
|
|
|
+ position: absolute;
|
|
|
|
|
+ top: -1px;
|
|
|
|
|
+ right: -1px;
|
|
|
|
|
+ width: 117px;
|
|
|
|
|
+ height: 115px;
|
|
|
|
|
+ z-index: 1500;
|
|
|
|
|
+}
|
|
|
|
|
+.kpi-chart-guide-class {
|
|
|
|
|
+ position: absolute;
|
|
|
|
|
+ top: -1px;
|
|
|
|
|
+ right: -1px;
|
|
|
|
|
+ width: 589px;
|
|
|
|
|
+ height: 478px;
|
|
|
|
|
+ z-index: 3500;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
.Management {
|
|
.Management {
|
|
|
max-height: 640px;
|
|
max-height: 640px;
|
|
|
overflow-y: hidden;
|
|
overflow-y: hidden;
|
|
@@ -1423,3 +1577,8 @@ const ClickParams = (val: any) => {
|
|
|
margin-bottom: 0;
|
|
margin-bottom: 0;
|
|
|
}
|
|
}
|
|
|
</style>
|
|
</style>
|
|
|
|
|
+<style lang="scss">
|
|
|
|
|
+:not(body):has(> img.driver-active-element) {
|
|
|
|
|
+ overflow: visible !important;
|
|
|
|
|
+}
|
|
|
|
|
+</style>
|