diff --git a/src/router/modules/remaining.ts b/src/router/modules/remaining.ts
index fdb8c006..383bfe5c 100644
--- a/src/router/modules/remaining.ts
+++ b/src/router/modules/remaining.ts
@@ -599,6 +599,18 @@ const remainingRouter: AppRouteRecordRaw[] = [
]
},
+ {
+ path: '/iot/report/dashboardPage/Dashboard8',
+ component: () => import('@/views/report/dashboardPage/dashboard8/Dashboard8.vue'),
+ name: 'IotReportDashboard8',
+ meta: {
+ title: '智能制造产线任务总览',
+ hidden: true,
+ noTagsView: true,
+ canTo: true
+ }
+ },
+
{
path: '/:pathMatch(.*)*',
component: () => import('@/views/Error/404.vue'),
diff --git a/src/views/report/dashboardList/index.vue b/src/views/report/dashboardList/index.vue
new file mode 100644
index 00000000..b97115e6
--- /dev/null
+++ b/src/views/report/dashboardList/index.vue
@@ -0,0 +1,338 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 新增
+
+
+ 搜索
+
+
+ 重置
+
+
+
+
+
+
+
+
+
+
+
+
+
![封面图]()
+
+
+
+
+
+
+
+ {{ item.name || '-' }}
+
+
+
+
+
+ 预览
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 取 消
+
+ 确 定
+
+
+
+
+
+
+
+
diff --git a/src/views/report/dashboardPage/dashboard8/Dashboard8.vue b/src/views/report/dashboardPage/dashboard8/Dashboard8.vue
new file mode 100644
index 00000000..5c1e3c66
--- /dev/null
+++ b/src/views/report/dashboardPage/dashboard8/Dashboard8.vue
@@ -0,0 +1,194 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/report/dashboardPage/dashboard8/components/DashboardHeader.vue b/src/views/report/dashboardPage/dashboard8/components/DashboardHeader.vue
new file mode 100644
index 00000000..7bde15b7
--- /dev/null
+++ b/src/views/report/dashboardPage/dashboard8/components/DashboardHeader.vue
@@ -0,0 +1,158 @@
+
+
+
+
+
+
+
diff --git a/src/views/report/dashboardPage/dashboard8/components/DayCapacity.vue b/src/views/report/dashboardPage/dashboard8/components/DayCapacity.vue
new file mode 100644
index 00000000..f8a0d240
--- /dev/null
+++ b/src/views/report/dashboardPage/dashboard8/components/DayCapacity.vue
@@ -0,0 +1,243 @@
+
+
+
+
+
+
+
diff --git a/src/views/report/dashboardPage/dashboard8/components/EnergyTrend.vue b/src/views/report/dashboardPage/dashboard8/components/EnergyTrend.vue
new file mode 100644
index 00000000..156e192a
--- /dev/null
+++ b/src/views/report/dashboardPage/dashboard8/components/EnergyTrend.vue
@@ -0,0 +1,156 @@
+
+
+
+
+
+
+
diff --git a/src/views/report/dashboardPage/dashboard8/components/MonthCapacity.vue b/src/views/report/dashboardPage/dashboard8/components/MonthCapacity.vue
new file mode 100644
index 00000000..82c10cb8
--- /dev/null
+++ b/src/views/report/dashboardPage/dashboard8/components/MonthCapacity.vue
@@ -0,0 +1,243 @@
+
+
+
+
+
+
+
diff --git a/src/views/report/dashboardPage/dashboard8/components/OpsTrend.vue b/src/views/report/dashboardPage/dashboard8/components/OpsTrend.vue
new file mode 100644
index 00000000..277c305b
--- /dev/null
+++ b/src/views/report/dashboardPage/dashboard8/components/OpsTrend.vue
@@ -0,0 +1,272 @@
+
+
+
+
+
+
+
diff --git a/src/views/report/dashboardPage/dashboard8/components/QualityTrend.vue b/src/views/report/dashboardPage/dashboard8/components/QualityTrend.vue
new file mode 100644
index 00000000..8f732241
--- /dev/null
+++ b/src/views/report/dashboardPage/dashboard8/components/QualityTrend.vue
@@ -0,0 +1,156 @@
+
+
+
+
+
+
+
diff --git a/src/views/report/dashboardPage/dashboard8/components/RealAlarm.vue b/src/views/report/dashboardPage/dashboard8/components/RealAlarm.vue
new file mode 100644
index 00000000..c41113eb
--- /dev/null
+++ b/src/views/report/dashboardPage/dashboard8/components/RealAlarm.vue
@@ -0,0 +1,205 @@
+
+
+
+
+
+ -
+ [{{ a.time }}]
+ {{ a.msg }}
+ {{ a.level }}
+
+
+
+
+
+
+
+
+
diff --git a/src/views/report/dashboardPage/dashboard8/components/TaskBoard.vue b/src/views/report/dashboardPage/dashboard8/components/TaskBoard.vue
new file mode 100644
index 00000000..d8048d39
--- /dev/null
+++ b/src/views/report/dashboardPage/dashboard8/components/TaskBoard.vue
@@ -0,0 +1,296 @@
+
+
+
+
+
+
+
+
+ | 产线名称 |
+ 排产单 |
+ 产品名称 |
+ 计划数量 |
+ 完工数量 |
+ 完工率 |
+
+
+
+
+ | {{ r.line }} |
+ {{ r.order }} |
+ {{ r.product }} |
+ {{ r.plan }} |
+ {{ r.done }} |
+
+
+ |
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/report/dashboardPage/dashboard8/components/TodayOps.vue b/src/views/report/dashboardPage/dashboard8/components/TodayOps.vue
new file mode 100644
index 00000000..b8e098ab
--- /dev/null
+++ b/src/views/report/dashboardPage/dashboard8/components/TodayOps.vue
@@ -0,0 +1,202 @@
+
+
+
+
+
+
+
diff --git a/src/views/report/dashboardPage/dashboard8/components/WeekTrend.vue b/src/views/report/dashboardPage/dashboard8/components/WeekTrend.vue
new file mode 100644
index 00000000..7bcd1f72
--- /dev/null
+++ b/src/views/report/dashboardPage/dashboard8/components/WeekTrend.vue
@@ -0,0 +1,182 @@
+
+
+
+
+
+
+
diff --git a/src/views/report/dashboardPage/dashboard8/dashboard8.html b/src/views/report/dashboardPage/dashboard8/dashboard8.html
new file mode 100644
index 00000000..b5fd6196
--- /dev/null
+++ b/src/views/report/dashboardPage/dashboard8/dashboard8.html
@@ -0,0 +1,1243 @@
+
+
+
+
+
+ 智能制造产线可视化看板
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ | 产线名称 |
+ 排产单 |
+ 产品名称 |
+ 计划数量 |
+ 完工数量 |
+ 完工率 |
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/report/dashboardPage/dashboard8/utils.ts b/src/views/report/dashboardPage/dashboard8/utils.ts
new file mode 100644
index 00000000..2ba468b1
--- /dev/null
+++ b/src/views/report/dashboardPage/dashboard8/utils.ts
@@ -0,0 +1,57 @@
+import { onUnmounted } from 'vue'
+import * as echarts from 'echarts'
+
+export const colors = {
+ blue: '#1e90ff',
+ cyan: '#22d3ee',
+ green: '#22c55e',
+ purple: '#8b5cf6',
+ warn: '#f59e0b',
+ danger: '#ef4444'
+}
+
+export const style = {
+ axisLine: { lineStyle: { color: 'rgba(148,163,184,0.45)' } },
+ axisLabel: { color: '#a8b7d8', fontSize: 12 },
+ splitLine: { lineStyle: { color: 'rgba(30,64,175,0.55)', type: 'dashed' } },
+ legendText: { color: '#e5f0ff', fontSize: 12 }
+}
+
+export function animateCount(el: HTMLElement | null, target: number, suffix: string, duration: number) {
+ if (!el) return
+ const start = 0
+ const t0 = performance.now()
+ const step = (t: number) => {
+ const p = Math.min(1, (t - t0) / duration)
+ const v = start + (target - start) * p
+ const out = Number.isInteger(target) ? Math.round(v) : Math.round(v * 10) / 10
+ el.textContent = suffix ? `${out}${suffix}` : `${out}`
+ if (p < 1) requestAnimationFrame(step)
+ }
+ requestAnimationFrame(step)
+}
+
+export function useChart(domId: string) {
+ let chart: echarts.ECharts | null = null
+
+ const init = () => {
+ const el = document.getElementById(domId)
+ if (!el) return null
+ chart = echarts.init(el, 'dark', { renderer: 'canvas' })
+ return chart
+ }
+
+ const resize = () => {
+ chart?.resize()
+ }
+
+ onUnmounted(() => {
+ chart?.dispose()
+ })
+
+ return {
+ init,
+ resize,
+ instance: () => chart
+ }
+}