Explorar o código

feat: 实现Booking Detail弹窗部分样式

zhouyuhao hai 6 meses
pai
achega
5eb4bcdfc6

+ 131 - 49
src/styles/Antdui.scss

@@ -7,7 +7,8 @@
   background-color: var(--management-bg-color);
   border: 1px solid var(--color-select-border);
 }
-.ant-picker:hover, .ant-picker-focused {
+.ant-picker:hover,
+.ant-picker-focused {
   border-color: var(--color-theme);
   box-shadow: none;
 }
@@ -15,71 +16,152 @@
   display: none;
 }
 .ant-picker-dropdown-range {
-  z-index: 9999 ;
+  z-index: 9999;
 }
 .ant-picker-dropdown .ant-picker-cell-in-view.ant-picker-cell-today .ant-picker-cell-inner::before {
   border: none;
 }
-.ant-picker-dropdown .ant-picker-cell-in-view.ant-picker-cell-selected .ant-picker-cell-inner, .ant-picker-dropdown .ant-picker-cell-in-view.ant-picker-cell-range-start .ant-picker-cell-inner, .ant-picker-dropdown .ant-picker-cell-in-view.ant-picker-cell-range-end .ant-picker-cell-inner {
+.ant-picker-dropdown .ant-picker-cell-in-view.ant-picker-cell-selected .ant-picker-cell-inner,
+.ant-picker-dropdown .ant-picker-cell-in-view.ant-picker-cell-range-start .ant-picker-cell-inner,
+.ant-picker-dropdown .ant-picker-cell-in-view.ant-picker-cell-range-end .ant-picker-cell-inner {
   background-color: var(--color-theme);
-  color: #FFFFFF;
+  color: #ffffff;
 }
 .ant-picker-dropdown .ant-picker-cell-in-view.ant-picker-cell-in-range::before {
   background-color: var(--color-orange-6);
 }
-.ant-picker-dropdown .ant-picker-cell-in-view.ant-picker-cell-range-start:not(.ant-picker-cell-range-start-single)::before, .ant-picker-dropdown .ant-picker-cell-in-view.ant-picker-cell-range-end:not(.ant-picker-cell-range-end-single)::before {
+.ant-picker-dropdown
+  .ant-picker-cell-in-view.ant-picker-cell-range-start:not(
+    .ant-picker-cell-range-start-single
+  )::before,
+.ant-picker-dropdown
+  .ant-picker-cell-in-view.ant-picker-cell-range-end:not(
+    .ant-picker-cell-range-end-single
+  )::before {
   background-color: var(--color-orange-6);
 }
 .ant-picker-dropdown .ant-picker-cell-in-view.ant-picker-cell-in-range {
   color: var(--color-theme);
 }
 .ant-picker-cell:hover:not(.ant-picker-cell-in-view).ant-picker-cell-inner,
-
-  .ant-picker-cell:hover:not(.ant-picker-cell-selected):not(.ant-picker-cell-range-start)
-
-    :not(.ant-picker-cell-range-end):not(.ant-picker-cell-range-hover-start):not(.ant-picker-cell-range-hover-end) {
-      background-color: var(--color-orange-6) !important;
-      color: var(--color-theme);
-  }
-  .ant-picker-dropdown .ant-picker-date-panel .ant-picker-cell-in-view.ant-picker-cell-in-range.ant-picker-cell-range-hover-start .ant-picker-cell-inner::after, .ant-picker-dropdown .ant-picker-date-panel .ant-picker-cell-in-view.ant-picker-cell-in-range.ant-picker-cell-range-hover-end .ant-picker-cell-inner::after {
-    background-color: var(--color-orange-6);
-  }
-  .ant-picker-dropdown .ant-picker-cell-in-view.ant-picker-cell-in-range.ant-picker-cell-range-hover::before, .ant-picker-dropdown .ant-picker-cell-in-view.ant-picker-cell-range-start.ant-picker-cell-range-hover::before, .ant-picker-dropdown .ant-picker-cell-in-view.ant-picker-cell-range-end.ant-picker-cell-range-hover::before, .ant-picker-dropdown .ant-picker-cell-in-view.ant-picker-cell-range-start:not(.ant-picker-cell-range-start-single).ant-picker-cell-range-hover-start::before, .ant-picker-dropdown .ant-picker-cell-in-view.ant-picker-cell-range-end:not(.ant-picker-cell-range-end-single).ant-picker-cell-range-hover-end::before, .ant-picker-panel>:not(.ant-picker-date-panel) .ant-picker-dropdown .ant-picker-cell-in-view.ant-picker-cell-in-range.ant-picker-cell-range-hover-start::before, .ant-picker-panel>:not(.ant-picker-date-panel) .ant-picker-dropdown .ant-picker-cell-in-view.ant-picker-cell-in-range.ant-picker-cell-range-hover-end::before {
-    background-color: var(--color-orange-6);
-  }
-  .ant-picker-dropdown .ant-picker-cell-in-view.ant-picker-cell-range-hover-start:not(.ant-picker-cell-in-range):not(.ant-picker-cell-range-start):not(.ant-picker-cell-range-end)::after, .ant-picker-dropdown .ant-picker-cell-in-view.ant-picker-cell-range-hover-end:not(.ant-picker-cell-in-range):not(.ant-picker-cell-range-start):not(.ant-picker-cell-range-end)::after, .ant-picker-dropdown .ant-picker-cell-in-view.ant-picker-cell-range-hover-start.ant-picker-cell-range-start-single::after, .ant-picker-dropdown .ant-picker-cell-in-view.ant-picker-cell-range-hover-start.ant-picker-cell-range-start.ant-picker-cell-range-end.ant-picker-cell-range-end-near-hover::after, .ant-picker-dropdown .ant-picker-cell-in-view.ant-picker-cell-range-hover-end.ant-picker-cell-range-start.ant-picker-cell-range-end.ant-picker-cell-range-start-near-hover::after, .ant-picker-dropdown .ant-picker-cell-in-view.ant-picker-cell-range-hover-end.ant-picker-cell-range-end-single::after, .ant-picker-dropdown .ant-picker-cell-in-view.ant-picker-cell-range-hover:not(.ant-picker-cell-in-range)::after {
-    border-top: none;
-    border-bottom: none;
-  }
-  tr>.ant-picker-dropdown .ant-picker-cell-in-view.ant-picker-cell-range-hover:first-child::after, tr>.ant-picker-dropdown .ant-picker-cell-in-view.ant-picker-cell-range-hover-end:first-child::after, .ant-picker-dropdown .ant-picker-cell-in-view.ant-picker-cell-start.ant-picker-cell-range-hover-edge-start.ant-picker-cell-range-hover-edge-start-near-range::after, .ant-picker-dropdown .ant-picker-cell-in-view.ant-picker-cell-range-hover-edge-start:not(.ant-picker-cell-range-hover-edge-start-near-range)::after, .ant-picker-dropdown .ant-picker-cell-in-view.ant-picker-cell-range-hover-start::after {
-    border-inline-start: none;
-  }
-  tr>.ant-picker-dropdown .ant-picker-cell-in-view.ant-picker-cell-range-hover:last-child::after, tr>.ant-picker-dropdown .ant-picker-cell-in-view.ant-picker-cell-range-hover-start:last-child::after, .ant-picker-dropdown .ant-picker-cell-in-view.ant-picker-cell-end.ant-picker-cell-range-hover-edge-end.ant-picker-cell-range-hover-edge-end-near-range::after, .ant-picker-dropdown .ant-picker-cell-in-view.ant-picker-cell-range-hover-edge-end:not(.ant-picker-cell-range-hover-edge-end-near-range)::after, .ant-picker-dropdown .ant-picker-cell-in-view.ant-picker-cell-range-hover-end::after {
-    border-inline-end: none;
-  }
-  .ant-picker-dropdown .ant-picker-header-view button:hover {
-    color: var(--color-theme);
-  }
-  .ant-picker-dropdown .ant-picker-panel-container {
-    background-color: var(--management-bg-color);
-    border: 1px solid var(--border-color-2);
-  }
-  .ant-picker-footer {
-    border-top: 1px solid var(--border-color-2);
-  }
-  .ant-picker-dropdown .ant-picker-panel {
-    border: none;
-  }
-  .ant-picker-dropdown .ant-picker-panel-container .ant-picker-presets ul li:hover {
-    background: var(--color-orange-6);
-  }
- .ant-picker-dropdown .ant-picker-date-panel .ant-picker-content th {
+.ant-picker-cell:hover:not(.ant-picker-cell-selected):not(.ant-picker-cell-range-start)
+  :not(.ant-picker-cell-range-end):not(.ant-picker-cell-range-hover-start):not(
+    .ant-picker-cell-range-hover-end
+  ) {
+  background-color: var(--color-orange-6) !important;
+  color: var(--color-theme);
+}
+.ant-picker-dropdown
+  .ant-picker-date-panel
+  .ant-picker-cell-in-view.ant-picker-cell-in-range.ant-picker-cell-range-hover-start
+  .ant-picker-cell-inner::after,
+.ant-picker-dropdown
+  .ant-picker-date-panel
+  .ant-picker-cell-in-view.ant-picker-cell-in-range.ant-picker-cell-range-hover-end
+  .ant-picker-cell-inner::after {
+  background-color: var(--color-orange-6);
+}
+.ant-picker-dropdown
+  .ant-picker-cell-in-view.ant-picker-cell-in-range.ant-picker-cell-range-hover::before,
+.ant-picker-dropdown
+  .ant-picker-cell-in-view.ant-picker-cell-range-start.ant-picker-cell-range-hover::before,
+.ant-picker-dropdown
+  .ant-picker-cell-in-view.ant-picker-cell-range-end.ant-picker-cell-range-hover::before,
+.ant-picker-dropdown
+  .ant-picker-cell-in-view.ant-picker-cell-range-start:not(
+    .ant-picker-cell-range-start-single
+  ).ant-picker-cell-range-hover-start::before,
+.ant-picker-dropdown
+  .ant-picker-cell-in-view.ant-picker-cell-range-end:not(
+    .ant-picker-cell-range-end-single
+  ).ant-picker-cell-range-hover-end::before,
+.ant-picker-panel
+  > :not(.ant-picker-date-panel)
+  .ant-picker-dropdown
+  .ant-picker-cell-in-view.ant-picker-cell-in-range.ant-picker-cell-range-hover-start::before,
+.ant-picker-panel
+  > :not(.ant-picker-date-panel)
+  .ant-picker-dropdown
+  .ant-picker-cell-in-view.ant-picker-cell-in-range.ant-picker-cell-range-hover-end::before {
+  background-color: var(--color-orange-6);
+}
+.ant-picker-dropdown
+  .ant-picker-cell-in-view.ant-picker-cell-range-hover-start:not(.ant-picker-cell-in-range):not(
+    .ant-picker-cell-range-start
+  ):not(.ant-picker-cell-range-end)::after,
+.ant-picker-dropdown
+  .ant-picker-cell-in-view.ant-picker-cell-range-hover-end:not(.ant-picker-cell-in-range):not(
+    .ant-picker-cell-range-start
+  ):not(.ant-picker-cell-range-end)::after,
+.ant-picker-dropdown
+  .ant-picker-cell-in-view.ant-picker-cell-range-hover-start.ant-picker-cell-range-start-single::after,
+.ant-picker-dropdown
+  .ant-picker-cell-in-view.ant-picker-cell-range-hover-start.ant-picker-cell-range-start.ant-picker-cell-range-end.ant-picker-cell-range-end-near-hover::after,
+.ant-picker-dropdown
+  .ant-picker-cell-in-view.ant-picker-cell-range-hover-end.ant-picker-cell-range-start.ant-picker-cell-range-end.ant-picker-cell-range-start-near-hover::after,
+.ant-picker-dropdown
+  .ant-picker-cell-in-view.ant-picker-cell-range-hover-end.ant-picker-cell-range-end-single::after,
+.ant-picker-dropdown
+  .ant-picker-cell-in-view.ant-picker-cell-range-hover:not(.ant-picker-cell-in-range)::after {
+  border-top: none;
+  border-bottom: none;
+}
+tr > .ant-picker-dropdown .ant-picker-cell-in-view.ant-picker-cell-range-hover:first-child::after,
+tr
+  > .ant-picker-dropdown
+  .ant-picker-cell-in-view.ant-picker-cell-range-hover-end:first-child::after,
+.ant-picker-dropdown
+  .ant-picker-cell-in-view.ant-picker-cell-start.ant-picker-cell-range-hover-edge-start.ant-picker-cell-range-hover-edge-start-near-range::after,
+.ant-picker-dropdown
+  .ant-picker-cell-in-view.ant-picker-cell-range-hover-edge-start:not(
+    .ant-picker-cell-range-hover-edge-start-near-range
+  )::after,
+.ant-picker-dropdown .ant-picker-cell-in-view.ant-picker-cell-range-hover-start::after {
+  border-inline-start: none;
+}
+tr > .ant-picker-dropdown .ant-picker-cell-in-view.ant-picker-cell-range-hover:last-child::after,
+tr
+  > .ant-picker-dropdown
+  .ant-picker-cell-in-view.ant-picker-cell-range-hover-start:last-child::after,
+.ant-picker-dropdown
+  .ant-picker-cell-in-view.ant-picker-cell-end.ant-picker-cell-range-hover-edge-end.ant-picker-cell-range-hover-edge-end-near-range::after,
+.ant-picker-dropdown
+  .ant-picker-cell-in-view.ant-picker-cell-range-hover-edge-end:not(
+    .ant-picker-cell-range-hover-edge-end-near-range
+  )::after,
+.ant-picker-dropdown .ant-picker-cell-in-view.ant-picker-cell-range-hover-end::after {
+  border-inline-end: none;
+}
+.ant-picker-dropdown .ant-picker-header-view button:hover {
+  color: var(--color-theme);
+}
+.ant-picker-dropdown .ant-picker-panel-container {
+  background-color: var(--management-bg-color);
+  border: 1px solid var(--border-color-2);
+}
+.ant-picker-footer {
+  border-top: 1px solid var(--border-color-2);
+}
+.ant-picker-dropdown .ant-picker-panel {
+  border: none;
+}
+.ant-picker-dropdown .ant-picker-panel-container .ant-picker-presets ul li:hover {
+  background: var(--color-orange-6);
+}
+.ant-picker-dropdown .ant-picker-date-panel .ant-picker-content th {
   color: var(--color-neutral-2);
- }
-.ant-picker-dropdown .ant-picker-decade-panel,.ant-picker-dropdown .ant-picker-year-panel,.ant-picker-dropdown .ant-picker-quarter-panel,.ant-picker-dropdown .ant-picker-month-panel,.ant-picker-dropdown .ant-picker-week-panel,.ant-picker-dropdown .ant-picker-date-panel,.ant-picker-dropdown .ant-picker-time-panel {
+}
+.ant-picker-dropdown .ant-picker-decade-panel,
+.ant-picker-dropdown .ant-picker-year-panel,
+.ant-picker-dropdown .ant-picker-quarter-panel,
+.ant-picker-dropdown .ant-picker-month-panel,
+.ant-picker-dropdown .ant-picker-week-panel,
+.ant-picker-dropdown .ant-picker-date-panel,
+.ant-picker-dropdown .ant-picker-time-panel {
   border-left: 1px solid var(--border-color-2);
 }
-.ant-picker .ant-picker-input >input, .ant-picker .ant-picker-input >input::placeholder {
+.ant-picker .ant-picker-input > input,
+.ant-picker .ant-picker-input > input::placeholder {
   color: var(--color-neutral-1);
 }
 .ant-picker-dropdown .ant-picker-cell .ant-picker-cell-inner {
@@ -100,4 +182,4 @@
 }
 .ant-picker-dropdown.ant-picker-dropdown-placement-bottomLeft .ant-picker-range-arrow {
   display: none;
-}
+}

+ 4 - 11
src/views/DestinationDelivery/src/DestinationDelivery.vue

@@ -1,6 +1,7 @@
 <script lang="ts" setup>
 import { useCalculatingHeight } from '@/hooks/calculatingHeight'
 import TableView from './components/TableView'
+import DeliveryDate from './components/DeliveryDate.vue'
 
 const OperationSearch = ref()
 const filterRef: Ref<HTMLElement | null> = ref(null)
@@ -84,9 +85,9 @@ const handleConfigurations = () => {
 }
 const handleCreate = () => {
   // Handle create new booking logic here
-  console.log('Create New Booking clicked')
 }
 
+const DateStart = ref([])
 const tableRef = ref()
 </script>
 <template>
@@ -123,16 +124,8 @@ const tableRef = ref()
             />
           </el-select>
         </div>
-        <div class="tips_filter">
-          <el-select v-model="searchData.questionType" placeholder="Customer">
-            <el-option
-              v-for="item in questionTypeList"
-              :key="item.value"
-              :label="item.label"
-              :value="item.value"
-            >
-            </el-option>
-          </el-select>
+        <div class="date-tips_filter">
+          <DeliveryDate :Date="DateStart" />
         </div>
         <div class="input-tips_filter">
           <el-input

+ 234 - 0
src/views/DestinationDelivery/src/components/DeliveryDate.vue

@@ -0,0 +1,234 @@
+<script lang="ts" setup>
+import dayjs, { Dayjs } from 'dayjs'
+import { ref, watch } from 'vue'
+import { useUserStore } from '@/stores/modules/user'
+
+const userStore = useUserStore()
+const valueFormatDate = 'MM/DD/YYYY'
+// type RangeValue = [Dayjs, Dayjs]
+// const ETDDate = ref<RangeValue>()
+const props = defineProps({
+  CalendarWidth: {
+    type: String,
+    default: '368px'
+  },
+  CalendarTitle: {
+    type: String
+  },
+  Date: {
+    type: Array
+  },
+  isType: {
+    type: Boolean,
+    default: false
+  }
+})
+const ETDDate = ref([])
+watch(
+  () => props.Date,
+  (current: any) => {
+    if (current?.length == 2) {
+      ETDDate.value = [
+        current[0] ? dayjs(current[0]).format(valueFormatDate) : '',
+        current[1] ? dayjs(current[1]).format(valueFormatDate) : ''
+      ]
+    }
+  },
+  { immediate: true, deep: true }
+)
+
+const emit = defineEmits(['DateRangeChange', 'DateChange'])
+const open = ref(false)
+const Disabled = ref([false, false])
+const isShowExtra = ref(true)
+
+const DateList = ref()
+DateList.value = []
+const daterange = (val: any) => {
+  if (DateList.value.length == 2 && val != undefined) {
+    const rangedata = {
+      title: props.CalendarTitle,
+      data: DateList.value
+    }
+    emit('DateRangeChange', rangedata)
+  }
+}
+const ChangeToday = (val: any) => {
+  if (val == 'Earliest') {
+    // ETDDate.value = [dayjs(), dayjs()]
+    ETDDate.value[0] = dayjs()
+    const date1 = dayjs(String(ETDDate.value[0])).format(valueFormatDate)
+    DateList.value[0] = date1
+    daterange(DateList.value[1])
+  } else {
+    ETDDate.value[1] = dayjs()
+    const date1 = dayjs(String(ETDDate.value[1])).format(valueFormatDate)
+    DateList.value[1] = date1
+    daterange(DateList.value[0])
+  }
+}
+const handleCalendarOpen = (date: any) => {
+  open.value = !open.value
+  if (open.value == false) {
+    if (date.length != 2) {
+      DateList.value = []
+      ETDDate.value = []
+    }
+  }
+}
+const Earliest = () => {
+  ETDDate.value[0] = dayjs('Oct-05-2009')
+  const date1 = dayjs(String(ETDDate.value[0])).format(valueFormatDate)
+  DateList.value[0] = date1
+  daterange(DateList.value[1])
+}
+const Latest = () => {
+  ETDDate.value[1] = dayjs()
+  const date1 = dayjs(String(ETDDate.value[1])).format(valueFormatDate)
+  DateList.value[1] = date1
+  daterange(DateList.value[0])
+}
+const changeRangeData = (value: any) => {
+  DateList.value = value
+  if (value != '') {
+    const rangedata = {
+      title: props.CalendarTitle,
+      data: value
+    }
+    emit('DateRangeChange', rangedata)
+    emit('DateChange', value)
+  }
+}
+const handlePanelChange = (value: any, mode: any) => {
+  if (mode[0] == 'year' || mode[0] == 'month') {
+    isShowExtra.value = false
+  } else {
+    isShowExtra.value = true
+  }
+}
+// 判断失焦时是否两个都有值
+const isTwoDate = (date: any) => {
+  console.log(date)
+}
+</script>
+<template>
+  <div class="delivery-date">
+    <div class="ETD_title">{{ props.CalendarTitle }}</div>
+    <a-range-picker
+      separator="To"
+      :showToday="false"
+      dropdownClassName="delivery-date-range-picker"
+      :style="{
+        backgroundColor: props.isType ? 'var(--more-type-bg-color)' : 'var(--management-bg-color)'
+      }"
+      :presetsWidth="500"
+      :open="open"
+      :disabled="Disabled"
+      @change="changeRangeData"
+      :placeholder="['Start Time', 'End Time']"
+      :format="userStore.dateFormat"
+      valueFormat="MM/DD/YYYY"
+      @openChange="handleCalendarOpen(ETDDate)"
+      @panelChange="handlePanelChange"
+      v-model:value="ETDDate"
+    >
+      <template #suffixIcon>
+        <span class="iconfont_icon">
+          <svg class="iconfont icon_suffix" aria-hidden="true">
+            <use xlink:href="#icon-icon_date_b"></use>
+          </svg>
+        </span>
+      </template>
+      <template #renderExtraFooter v-if="isShowExtra">
+        <div class="calender_flex">
+          <div class="footer_left">
+            <el-button class="el-button--noborder" @click="Earliest">Earliest Time</el-button>
+            <el-button class="el-button--noborder" @click="ChangeToday('Earliest')"
+              >Today</el-button
+            >
+          </div>
+          <div class="footer_left footer_right">
+            <el-button @click="Latest" class="el-button--noborder">Latest Time</el-button>
+            <el-button class="el-button--noborder" @click="ChangeToday('Latest')">Today</el-button>
+          </div>
+        </div>
+      </template>
+    </a-range-picker>
+  </div>
+</template>
+
+<style lang="scss" scoped>
+.calender_flex {
+  display: flex;
+  justify-content: space-between;
+}
+.footer_left {
+  display: flex;
+  flex: 50%;
+  padding: 0 0 0 5px;
+  height: 48px;
+  display: flex;
+  align-items: center;
+}
+.footer_right {
+  border-left: 1px solid var(--border-color-2);
+  padding-left: 8px;
+}
+.el-button--noborder {
+  color: var(--color-theme);
+}
+.ETD_title {
+  font-size: var(--font-size-2);
+  margin-bottom: 4px;
+  color: var(--color-neutral-2);
+}
+.iconfont_icon {
+  margin-right: 0;
+}
+.iconfont {
+  width: 14px;
+  height: 14px;
+}
+.icon_suffix {
+  fill: var(--color-neutral-1);
+}
+</style>
+ant-picker-cell ant-picker-cell-in-view ant-picker-cell-range-start
+ant-picker-cell-range-start-single ant-picker-cell-selected ant-picker-cell ant-picker-cell-in-view
+ant-picker-cell-range-end
+<style lang="scss">
+.delivery-date-range-picker {
+  .ant-picker-panel,
+  .ant-picker-date-panel {
+    width: 500px !important;
+  }
+  .ant-picker-content {
+    width: 476px !important;
+  }
+  .ant-picker-cell {
+    width: 64px;
+    height: 64px;
+    &:not(.ant-picker-cell-in-view) {
+      div {
+        font-size: 12px;
+        color: var(--color-neutral-5);
+      }
+    }
+    &:hover {
+      background-color: var(--border-hover-color);
+      border-radius: 12px;
+    }
+    &.ant-picker-cell-selected {
+      background: var(--color-theme);
+      border-radius: 12px;
+    }
+    &.ant-picker-cell-range-end {
+      background: var(--color-theme);
+      border-radius: 12px;
+    }
+  }
+  :where(.css-dev-only-do-not-override-1p3hq3p).ant-picker-dropdown .ant-picker-cell::before {
+    height: 64px !important;
+  }
+}
+</style>

+ 37 - 5
src/views/DestinationDelivery/src/components/TableView/src/TableView.vue

@@ -63,15 +63,14 @@ const getTableColumns = async () => {
     if (res.code === 200) {
       tableData.value.columns = [
         { type: 'checkbox', width: 50, fixed: 'left' },
-        ...handleColumns(res.data.OperationTableColumns),
-        {}
+        ...handleColumns(res.data.OperationTableColumns)
       ]
       const index = tableData.value.columns.findIndex((item: any) => item.title === 'Action')
       if (index !== -1) {
         tableData.value.columns.push({
           title: 'Action',
           fixed: 'right',
-          width: 120,
+          width: 130,
           slots: { default: 'action' }
         })
       }
@@ -99,7 +98,7 @@ const assignTableData = (data: any) => {
       tableData.value.columns.push({
         title: 'Action',
         fixed: 'right',
-        width: 120,
+        width: 130,
         slots: { default: 'action' }
       })
     }
@@ -272,6 +271,11 @@ const emailDialogRef = ref()
 const clickEmailBtn = (row: any) => {
   emailDialogRef.value.openDialog(row)
 }
+
+const handleCreate = () => {
+  // Handle create new booking logic here
+  console.log('Create new booking')
+}
 defineExpose({
   SearchOperationLog
 })
@@ -303,7 +307,20 @@ defineExpose({
     >
       <!-- 空数据时的插槽 -->
       <template #empty v-if="!tableLoadingTableData && tableData.data.length === 0">
-        <VEmpty> </VEmpty>
+        <div class="empty-box">
+          <img class="empty-img" src="./img/table-empty-img.png" alt="" />
+          <p>You haven't created any destination delivery bookings yet.</p>
+          <p>Book truck or rail delivery for your shipments to save time and</p>
+          <p>ensure smooth last-mile delivery.</p>
+          <el-button
+            style="height: 40px"
+            class="el-button--main el-button--pain-theme"
+            @click="handleCreate"
+          >
+            <span style="margin-right: 4px" class="font_family icon-icon_add_b"></span>
+            <span style="font-weight: 400">Create New Booking</span>
+          </el-button>
+        </div>
       </template>
       <!-- action操作的插槽 -->
       <template #action="{ row }">
@@ -376,6 +393,21 @@ defineExpose({
   }
 }
 
+.empty-box {
+  .empty-img {
+    width: 100px;
+    height: 100px;
+    margin-bottom: 8px;
+  }
+  p {
+    color: var(--color-neutral-2);
+    line-height: 21px;
+  }
+  .el-button {
+    margin-top: 8px;
+  }
+}
+
 .bottom-pagination {
   display: flex;
   justify-content: space-between;

+ 2 - 2
src/views/DestinationDelivery/src/components/TableView/src/components/EmailDialog.vue

@@ -6,7 +6,7 @@ import { formatTimezone } from '@/utils/tools'
 
 i18nChangeLanguage('en')
 
-const visible = ref(true)
+const visible = ref(false)
 const openDialog = (row) => {
   visible.value = true
 }
@@ -179,7 +179,7 @@ defineExpose({
     v-model="visible"
     :close-on-click-modal="false"
     width="1000px"
-    top="10vh"
+    top="15vh"
   >
     <div class="email-view">
       <div class="email-path">

BIN=BIN
src/views/DestinationDelivery/src/components/TableView/src/img/table-empty-img.png