diff --git a/apps/web-antd/src/layouts/basic.vue b/apps/web-antd/src/layouts/basic.vue index d6a52c63e..1dc10ee8a 100644 --- a/apps/web-antd/src/layouts/basic.vue +++ b/apps/web-antd/src/layouts/basic.vue @@ -7,14 +7,8 @@ import { computed, onMounted, onUnmounted, ref, watch } from 'vue'; import { useAccess } from '@vben/access'; import { AuthenticationLoginExpiredModal, useVbenModal } from '@vben/common-ui'; -import { VBEN_DOC_URL, VBEN_GITHUB_URL } from '@vben/constants'; import { isTenantEnable, useTabs, useWatermark } from '@vben/hooks'; -import { - AntdProfileOutlined, - BookOpenText, - CircleHelp, - SvgGithubIcon, -} from '@vben/icons'; +import { AntdProfileOutlined, CircleHelp } from '@vben/icons'; import { BasicLayout, Help, @@ -25,7 +19,7 @@ import { } from '@vben/layouts'; import { preferences } from '@vben/preferences'; import { useAccessStore, useUserStore } from '@vben/stores'; -import { formatDateTime, openWindow } from '@vben/utils'; +import { formatDateTime } from '@vben/utils'; import { message } from 'ant-design-vue'; diff --git a/apps/web-antd/src/views/dashboard/workspace/index.vue b/apps/web-antd/src/views/dashboard/workspace/index.vue index 08dbe79ee..64ace2ba0 100644 --- a/apps/web-antd/src/views/dashboard/workspace/index.vue +++ b/apps/web-antd/src/views/dashboard/workspace/index.vue @@ -13,10 +13,7 @@ import { IconifyIcon } from '@vben/icons'; import { Button, message, Modal, Tag } from 'ant-design-vue'; -import { - getTrafficRealtime, - getWorkspaceStats, -} from '#/api/ops/order-center'; +import { getTrafficRealtime, getWorkspaceStats } from '#/api/ops/order-center'; import { BackgroundChart } from '../../../components/background-chart'; import { createBackgroundChartOptions } from './utils/chart-options'; @@ -325,12 +322,24 @@ onUnmounted(stopPolling);

实时客流监测

- {{ formatNumber(trafficTotalIn) }} - +12% + {{ + formatNumber(trafficTotalIn) + }} + + +12% +

预计高峰时间: 14:00

- @@ -433,18 +465,33 @@ onUnmounted(stopPolling); -
+

工单趋势分析

- {{ todayOrderCount }} - +{{ newOrderCount }} 新增 + {{ + todayOrderCount + }} + + +{{ newOrderCount }} 新增 +
-
@@ -484,7 +531,14 @@ onUnmounted(stopPolling);
- + @@ -502,20 +556,34 @@ onUnmounted(stopPolling);
- + AI Agent

需要我帮你做什么吗?

-
- AI Robot + AI Robot
@@ -539,7 +607,10 @@ onUnmounted(stopPolling);
优先级
- + {{ selectedTask.priority }}
diff --git a/apps/web-antd/src/views/ops/cleaning/work-order/dashboard/index.vue b/apps/web-antd/src/views/ops/cleaning/work-order/dashboard/index.vue index f23a53ec9..da549f856 100644 --- a/apps/web-antd/src/views/ops/cleaning/work-order/dashboard/index.vue +++ b/apps/web-antd/src/views/ops/cleaning/work-order/dashboard/index.vue @@ -20,9 +20,10 @@ import { getDashboardStats } from '#/api/ops/order-center'; defineOptions({ name: 'CleaningWorkOrderDashboard' }); // ========== 保洁类型映射 ========== -const CLEANING_TYPE_MAP: Record< +// eslint-disable-next-line no-unused-vars +const _CLEANING_TYPE_MAP: Record< string, - { type: string; icon: string; color: string } + { color: string; icon: string; type: string } > = { ROUTINE: { type: '日常保洁', icon: 'solar:broom-bold', color: '#1677ff' }, DEEP: { type: '深度保洁', icon: 'solar:multiply-bold', color: '#52c41a' }, @@ -74,9 +75,9 @@ interface DashboardStats { // 功能类型工单排行 functionTypeRanking: Array<{ - functionType: string; completed: number; count: number; + functionType: string; rate: number; }>; } @@ -98,8 +99,9 @@ const { renderEcharts: renderHourlyChart } = useEcharts(hourlyChartRef); const { renderEcharts: renderTimeTrendChart } = useEcharts(timeTrendChartRef); const { renderEcharts: renderFunnelChart } = useEcharts(funnelChartRef); const { renderEcharts: renderHeatmapChart } = useEcharts(heatmapChartRef); -const { renderEcharts: renderFunctionTypeRankingChart } = - useEcharts(functionTypeRankingChartRef); +const { renderEcharts: renderFunctionTypeRankingChart } = useEcharts( + functionTypeRankingChartRef, +); const statsData = ref({ pendingCount: 0, diff --git a/apps/web-antd/src/views/ops/cleaning/work-order/detail/index.vue b/apps/web-antd/src/views/ops/cleaning/work-order/detail/index.vue index 0789c4c19..70a71ad56 100644 --- a/apps/web-antd/src/views/ops/cleaning/work-order/detail/index.vue +++ b/apps/web-antd/src/views/ops/cleaning/work-order/detail/index.vue @@ -346,18 +346,24 @@ const showLeaveWarning = computed(() => { /** 动态生成应该显示的状态步骤(根据 timeline 过滤) */ const visibleSteps = computed(() => { // 必须显示的节点(主流程) - const requiredSteps = ['PENDING', 'DISPATCHED', 'CONFIRMED', 'ARRIVED', 'COMPLETED']; + const requiredSteps = new Set([ + 'ARRIVED', + 'COMPLETED', + 'CONFIRMED', + 'DISPATCHED', + 'PENDING', + ]); // timeline 中存在的状态 - const timelineStatuses = new Set(timeline.value.map(t => t.status)); + const timelineStatuses = new Set(timeline.value.map((t) => t.status)); // 当前状态 const currentStatus = order.value.status; // 过滤出要显示的节点 - return STATUS_STEPS.filter(step => { + return STATUS_STEPS.filter((step) => { // 必须显示的节点 - if (requiredSteps.includes(step.key)) return true; + if (requiredSteps.has(step.key)) return true; // QUEUED 节点:只有在 timeline 中明确存在时才显示 if (step.key === 'QUEUED') { @@ -376,7 +382,9 @@ const currentStepIndex = computed(() => { // 暂停状态显示在到岗后 return visibleSteps.value.findIndex((s) => s.key === 'ARRIVED'); } - const index = visibleSteps.value.findIndex((s) => s.key === order.value.status); + const index = visibleSteps.value.findIndex( + (s) => s.key === order.value.status, + ); return Math.max(index, 0); }); diff --git a/apps/web-antd/src/views/ops/cleaning/work-order/modules/stats-bar.vue b/apps/web-antd/src/views/ops/cleaning/work-order/modules/stats-bar.vue index ee8580ca2..d93399478 100644 --- a/apps/web-antd/src/views/ops/cleaning/work-order/modules/stats-bar.vue +++ b/apps/web-antd/src/views/ops/cleaning/work-order/modules/stats-bar.vue @@ -153,9 +153,7 @@ defineExpose({ refresh: loadStats });
@@ -177,9 +175,7 @@ defineExpose({ refresh: loadStats });
@@ -201,9 +197,7 @@ defineExpose({ refresh: loadStats });
@@ -223,9 +217,7 @@ defineExpose({ refresh: loadStats });