From 3653db5756ad6ae89eb573409a3b0fa9926175a5 Mon Sep 17 00:00:00 2001
From: riku <risaku@163.com>
Date: 星期三, 05 六月 2024 17:37:58 +0800
Subject: [PATCH] 原型制作,新增现场巡查和区县巡查统计
---
src/views/HomeView.vue | 6
src/views/inspection/TaskTrack.vue | 69 +++++
src/views/management/ManagementView.vue | 11
src/assets/styles/index.scss | 16 +
src/assets/styles/element/index.scss | 7
src/views/inspection/ProblemTrack.vue | 39 +++
src/assets/styles/base.scss | 117 +++++++++
src/views/management/TaskStats.vue | 59 ++++
src/components.d.ts | 11
src/components/inspection/TaskNode.vue | 35 ++
src/components/inspection/SubtaskItem.vue | 59 ++++
src/assets/fonts/SOURCEHANSANSCN-MEDIUM.OTF | 0
src/assets/styles/text.scss | 0
src/views/inspection/InspectionView.vue | 20 +
src/assets/styles/layout.scss | 14 +
src/assets/fonts/SIMHEI.TTF | 0
src/components/inspection/TaskItem.vue | 108 +++++++++
src/views/main/MonitorView.vue | 33 ++
src/components/core/CoreHeader.vue | 14 +
src/views/visualization/VisualizationView.vue | 12
src/App.vue | 8
src/components/inspection/SubtaskExamineItem.vue | 59 ++++
22 files changed, 667 insertions(+), 30 deletions(-)
diff --git a/src/App.vue b/src/App.vue
index 8f6d93e..afb2f2e 100644
--- a/src/App.vue
+++ b/src/App.vue
@@ -11,4 +11,10 @@
</el-config-provider>
</template>
-<style scoped></style>
+<style>
+html,
+body {
+ margin: 0;
+ font-family: '鎬濇簮榛戜綋';
+}
+</style>
diff --git a/src/assets/fonts/SIMHEI.TTF b/src/assets/fonts/SIMHEI.TTF
new file mode 100644
index 0000000..5bd4687
--- /dev/null
+++ b/src/assets/fonts/SIMHEI.TTF
Binary files differ
diff --git a/src/assets/fonts/SOURCEHANSANSCN-MEDIUM.OTF b/src/assets/fonts/SOURCEHANSANSCN-MEDIUM.OTF
new file mode 100644
index 0000000..53e03e0
--- /dev/null
+++ b/src/assets/fonts/SOURCEHANSANSCN-MEDIUM.OTF
Binary files differ
diff --git a/src/assets/styles/base.scss b/src/assets/styles/base.scss
new file mode 100644
index 0000000..8f27fcf
--- /dev/null
+++ b/src/assets/styles/base.scss
@@ -0,0 +1,117 @@
+/************************************** font size **************************************/
+$fontsize: (
+ s: var(--el-font-size-small),
+ b: var(--el-font-size-base),
+ m: var(--el-font-size-medium),
+ l: var(--el-font-size-large)
+);
+
+@each $dName, $dValue in $fontsize {
+ .f-#{$dName} {
+ font-size: #{$dValue};
+ }
+}
+
+/************************************** color **************************************/
+$colors: (
+ p: var(--el-color-primary),
+ s: var(--el-color-success),
+ w: var(--el-color-warning),
+ d: var(--el-color-danger),
+ e: var(--el-color-error),
+ i: var(--el-color-info)
+);
+
+@each $dName, $dValue in $colors {
+ .color-#{$dName} {
+ color: #{$dValue};
+ }
+ .b-color-#{$dName} {
+ background-color: #{$dValue};
+ }
+}
+
+/************************************** 鍐呭杈硅窛 **************************************/
+$direction: (
+ l: 'left',
+ t: 'top',
+ r: 'right',
+ b: 'bottom'
+);
+$size: (2, 4, 8, 10, 16);
+@each $dName, $dValue in $direction {
+ @each $i in $size {
+ .p-#{$dName}-#{$i} {
+ padding-#{$dValue}: #{$i}px;
+ }
+ .m-#{$dName}-#{$i} {
+ margin-#{$dValue}: #{$i}px;
+ }
+ }
+}
+
+@each $i in $size {
+ .p-v-#{$i} {
+ padding: #{$i}px 0;
+ }
+ .p-h-#{$i} {
+ padding: 0 #{$i}px;
+ }
+ .p-#{$i} {
+ padding: #{$i}px;
+ }
+ .m-v-#{$i} {
+ margin: #{$i}px 0;
+ }
+ .m-h-#{$i} {
+ margin: 0 #{$i}px;
+ }
+ .m-#{$i} {
+ margin: #{$i}px;
+ }
+}
+
+/************************************** 瀹介珮 **************************************/
+$csize: (
+ small: var(--el-component-size-small),
+ default: var(--el-component-size-default),
+ large: var(--el-component-size-large)
+);
+$ws: (20, 40, 50, 60, 80, 100, 120, 150, 200, 250, 300);
+@each $name, $value in $csize {
+ .w-#{$name} {
+ width: #{$value};
+ }
+ .h-#{$name} {
+ height: #{$value};
+ }
+}
+@each $i in $ws {
+ .w-#{$i} {
+ width: #{$i}px;
+ }
+ .h-#{$i} {
+ height: #{$i}px;
+ }
+}
+
+/************************************** 杈规 **************************************/
+$bsize: (
+ small: var(--el-border-radius-small),
+ base: var(--el-border-radius-base),
+ round: var(--el-border-radius-round),
+ circle: var(--el-border-radius-circle)
+);
+@each $name, $value in $bsize {
+ .border-r-#{$name} {
+ border: var(--el-border);
+ border-radius: $value;
+ }
+}
+
+/************************************** 瀵归綈 **************************************/
+.v-center {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+}
diff --git a/src/assets/styles/element/index.scss b/src/assets/styles/element/index.scss
new file mode 100644
index 0000000..063bc6d
--- /dev/null
+++ b/src/assets/styles/element/index.scss
@@ -0,0 +1,7 @@
+// @forward 'element-plus/theme-chalk/src/common/var.scss' with (
+// $colors: (
+// 'primary': (
+// 'base': green
+// )
+// )
+// );
diff --git a/src/assets/styles/index.scss b/src/assets/styles/index.scss
index e69de29..6d14fb6 100644
--- a/src/assets/styles/index.scss
+++ b/src/assets/styles/index.scss
@@ -0,0 +1,16 @@
+@use './base.scss';
+@use './text.scss';
+@use './layout.scss';
+@use './element/index.scss' as *;
+
+@font-face {
+ font-family: 'SIMHEI';
+ src: url(../fonts/SIMHEI.TTF);
+}
+
+@font-face {
+ font-family: '鎬濇簮榛戜綋';
+ src: url(../fonts/SOURCEHANSANSCN-MEDIUM.OTF);
+ font-weight: normal;
+ font-style: normal;
+}
diff --git a/src/assets/styles/layout.scss b/src/assets/styles/layout.scss
new file mode 100644
index 0000000..91e786b
--- /dev/null
+++ b/src/assets/styles/layout.scss
@@ -0,0 +1,14 @@
+:root {
+ --fy-header-height: 40px;
+ --fy-body-height: calc(100vh - var(--fy-header-height));
+}
+
+.fy-header {
+ height: var(--fy-header-height);
+ // background-color: antiquewhite;
+}
+
+.fy-body {
+ height: var(--fy-body-height);
+ // background-color: azure;
+}
diff --git a/src/assets/styles/text.scss b/src/assets/styles/text.scss
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/src/assets/styles/text.scss
diff --git a/src/components.d.ts b/src/components.d.ts
index 0c63b5f..fb94fc6 100644
--- a/src/components.d.ts
+++ b/src/components.d.ts
@@ -7,10 +7,21 @@
/* prettier-ignore */
declare module 'vue' {
export interface GlobalComponents {
+ CoreHeader: typeof import('./components/core/CoreHeader.vue')['default']
+ ElButton: typeof import('element-plus/es')['ElButton']
+ ElCard: typeof import('element-plus/es')['ElCard']
ElCol: typeof import('element-plus/es')['ElCol']
ElConfigProvider: typeof import('element-plus/es')['ElConfigProvider']
+ ElProgress: typeof import('element-plus/es')['ElProgress']
ElRow: typeof import('element-plus/es')['ElRow']
+ ElScrollbar: typeof import('element-plus/es')['ElScrollbar']
+ ElTag: typeof import('element-plus/es')['ElTag']
+ ElText: typeof import('element-plus/es')['ElText']
RouterLink: typeof import('vue-router')['RouterLink']
RouterView: typeof import('vue-router')['RouterView']
+ SubtaskExamineItem: typeof import('./components/inspection/SubtaskExamineItem.vue')['default']
+ SubtaskItem: typeof import('./components/inspection/SubtaskItem.vue')['default']
+ TaskItem: typeof import('./components/inspection/TaskItem.vue')['default']
+ TaskNode: typeof import('./components/inspection/TaskNode.vue')['default']
}
}
diff --git a/src/components/core/CoreHeader.vue b/src/components/core/CoreHeader.vue
new file mode 100644
index 0000000..dd8137e
--- /dev/null
+++ b/src/components/core/CoreHeader.vue
@@ -0,0 +1,14 @@
+<template>
+ <el-row class="fy-header"> 绯荤粺鏍囬銆佹椂闂淬�佸ぉ姘旂瓑淇℃伅 </el-row>
+</template>
+
+<script>
+export default {
+ props: {},
+ data() {
+ return {}
+ },
+ methods: {}
+}
+</script>
+<style scoped></style>
diff --git a/src/components/inspection/SubtaskExamineItem.vue b/src/components/inspection/SubtaskExamineItem.vue
new file mode 100644
index 0000000..52c6b41
--- /dev/null
+++ b/src/components/inspection/SubtaskExamineItem.vue
@@ -0,0 +1,59 @@
+<template>
+ <div :class="itemClass + ' p-v-4 f-s'">
+ <div>
+ <el-text class="w-200" size="default" truncated>
+ {{ name }}
+ </el-text>
+ </div>
+ <el-row justify="space-between">
+ <div>{{ type }}</div>
+ <!-- <el-text size="small"> {{ type }} </el-text> -->
+ <el-progress
+ class="w-150"
+ :percentage="(checked / total) * 100"
+ status="warning"
+ striped
+ striped-flow
+ >
+ <span>{{ checked + '/' + total }}</span>
+ </el-progress>
+ </el-row>
+ </div>
+</template>
+
+<script>
+/**
+ * 宸℃煡瀛愪换鍔¢棶棰樺鏍哥姸鎬佷俊鎭�
+ */
+export default {
+ props: {
+ index: Number,
+ name: String,
+ district: String,
+ planTime: String,
+ type: String,
+ total: Number,
+ checked: Number
+ },
+ data() {
+ return {}
+ },
+ watch: {},
+ computed: {
+ itemClass() {
+ return this.index % 2 == 0 ? 'wrapper-even' : 'wrapper-odd'
+ }
+ },
+ methods: {}
+}
+</script>
+
+<style scoped>
+.wrapper-odd {
+ background-color: aliceblue;
+}
+
+.wrapper-even {
+ /* background-color: aliceblue; */
+}
+</style>
diff --git a/src/components/inspection/SubtaskItem.vue b/src/components/inspection/SubtaskItem.vue
new file mode 100644
index 0000000..f7f0e75
--- /dev/null
+++ b/src/components/inspection/SubtaskItem.vue
@@ -0,0 +1,59 @@
+<template>
+ <div :class="itemClass + ' p-v-4 f-s'">
+ <div>
+ <!-- <el-row justify="center"> -->
+ <el-text class="w-200" size="default" truncated>
+ {{ name }}
+ </el-text>
+ <!-- </el-row> -->
+ </div>
+ <el-row justify="space-between">
+ <el-tag type="primary" size="small" effect="plain">
+ {{ district }}
+ </el-tag>
+ <div>{{ planTime }}</div>
+ <!-- <div>| {{ startTime }} | {{ endTime }}</div> -->
+ <div>{{ userName }}</div>
+ <!-- <div>{{ status }}</div> -->
+ <!-- <el-button type="primary">queding</el-button> -->
+ </el-row>
+ </div>
+</template>
+
+<script>
+/**
+ * 宸℃煡瀛愪换鍔℃墽琛岀姸鎬佷俊鎭�
+ */
+export default {
+ props: {
+ index: Number,
+ name: String,
+ district: String,
+ planTime: String,
+ startTime: String,
+ endTime: String,
+ userName: String,
+ status: String
+ },
+ data() {
+ return {}
+ },
+ watch: {},
+ computed: {
+ itemClass() {
+ return this.index % 2 == 0 ? 'wrapper-even' : 'wrapper-odd'
+ }
+ },
+ methods: {}
+}
+</script>
+
+<style scoped>
+.wrapper-odd {
+ background-color: aliceblue;
+}
+
+.wrapper-even {
+ /* background-color: aliceblue; */
+}
+</style>
diff --git a/src/components/inspection/TaskItem.vue b/src/components/inspection/TaskItem.vue
new file mode 100644
index 0000000..be50b89
--- /dev/null
+++ b/src/components/inspection/TaskItem.vue
@@ -0,0 +1,108 @@
+<template>
+ <div class="demo-progress border-r-small f-b">
+ <el-row>
+ <el-col span="8">
+ <el-progress :width="100" type="dashboard" :percentage="(finish / total) * 100">
+ <template #default="{ percentage }">
+ <span class="percentage-value">{{ percentage }}%</span>
+ <span class="percentage-label">{{ finish + '/' + total }}</span>
+ </template>
+ </el-progress>
+ </el-col>
+ <el-col span="16">
+ <div>{{ name }}</div>
+ <!-- <div>{{ planTime }}</div> -->
+ <div>{{ userName }}</div>
+ <el-row style="gap: 10px">
+ <div class="v-center" v-for="item in count" :key="item.sceneType">
+ <el-progress
+ :width="50"
+ :stroke-width="3"
+ type="dashboard"
+ :percentage="(item.finish / item.total) * 100"
+ >
+ <template #default="{ percentage }">
+ <span class="percentage-value-small">{{ percentage }}%</span>
+ </template>
+ </el-progress>
+ <div>
+ <el-text size="small">{{ item.sceneType }}</el-text>
+ <el-text size="small">{{ item.finish + '/' + item.total }}</el-text>
+ </div>
+ <div></div>
+ <!-- <div class="percentage-label-small">{{ item.sceneType }}</div> -->
+ <!-- <span class="percentage-label-small">{{ item.finish + '/' + item.total }} </span> -->
+ </div>
+ </el-row>
+ </el-col>
+ </el-row>
+ </div>
+</template>
+
+<script>
+/**
+ * 宸℃煡浠诲姟鍖哄煙缁熻淇℃伅
+ */
+export default {
+ props: {
+ name: String,
+ district: String,
+ planTime: String,
+ startTime: String,
+ endTime: String,
+ userName: String,
+ status: String,
+
+ count: Array
+ },
+ data() {
+ return {}
+ },
+ watch: {},
+ computed: {
+ total() {
+ let t = 0
+ this.count.forEach((c) => {
+ t += c.total
+ })
+ return t
+ },
+ finish() {
+ let t = 0
+ this.count.forEach((c) => {
+ t += c.finish
+ })
+ return t
+ }
+ },
+ methods: {}
+}
+</script>
+
+<style scoped>
+.wrapper {
+ border: var(--el-border);
+ border-radius: var(--el-border-radius-base);
+}
+
+.percentage-value {
+ display: block;
+ margin-top: 10px;
+ font-size: var(--el-font-size-base);
+}
+.percentage-value-small {
+ display: block;
+ /* margin-top: 10px; */
+ font-size: var(--el-font-size-small);
+}
+.percentage-label {
+ display: block;
+ margin-top: 10px;
+ font-size: var(--el-font-size-base);
+}
+.percentage-label-small {
+ display: block;
+ /* margin-top: 10px; */
+ font-size: var(--el-font-size-small);
+}
+</style>
diff --git a/src/components/inspection/TaskNode.vue b/src/components/inspection/TaskNode.vue
new file mode 100644
index 0000000..4d5b161
--- /dev/null
+++ b/src/components/inspection/TaskNode.vue
@@ -0,0 +1,35 @@
+<template>
+ <div>
+ <el-row justify="center">{{ title }}</el-row>
+ <div class="border-r-small f-b">
+ <div v-for="(item, i) in items" :key="title + i">
+ <slot :item="item" :index="i"></slot>
+ </div>
+ </div>
+ </div>
+</template>
+
+<script>
+/**
+ * 宸℃煡瀛愪换鍔¤妭鐐�
+ */
+export default {
+ props: {
+ title: String,
+ count: Number,
+ items: Array
+ },
+ data() {
+ return {}
+ },
+ watch: {},
+ methods: {}
+}
+</script>
+
+<style scoped>
+.wrapper {
+ border: var(--el-border);
+ border-radius: var(--el-border-radius-base);
+}
+</style>
diff --git a/src/views/HomeView.vue b/src/views/HomeView.vue
index 8384c7d..ed6c588 100644
--- a/src/views/HomeView.vue
+++ b/src/views/HomeView.vue
@@ -1,6 +1,8 @@
<template>
- <el-row> 绯荤粺鏍囬銆佹椂闂淬�佸ぉ姘旂瓑淇℃伅 </el-row>
- <router-view></router-view>
+ <core-header></core-header>
+ <div class="fy-body">
+ <router-view></router-view>
+ </div>
</template>
<script setup></script>
diff --git a/src/views/inspection/InspectionView.vue b/src/views/inspection/InspectionView.vue
index a9d296b..d6f44b8 100644
--- a/src/views/inspection/InspectionView.vue
+++ b/src/views/inspection/InspectionView.vue
@@ -1,11 +1,17 @@
<template>
- <el-row>
- <el-col :span="8">1</el-col>
- <el-col :span="8">2</el-col>
- <el-col :span="8">3</el-col>
- </el-row>
+ <div class="wrapper">
+ <div>鐜板満宸℃煡</div>
+ <TaskTrack></TaskTrack>
+ </div>
</template>
-<script setup></script>
+<script setup>
+import TaskTrack from '@/views/inspection/TaskTrack.vue'
+</script>
-<style scoped></style>
+<style scoped>
+.wrapper {
+ /* height: calc(var(--fy-body-height) / 2);
+ background-color: burlywood; */
+}
+</style>
diff --git a/src/views/inspection/ProblemTrack.vue b/src/views/inspection/ProblemTrack.vue
new file mode 100644
index 0000000..2faea00
--- /dev/null
+++ b/src/views/inspection/ProblemTrack.vue
@@ -0,0 +1,39 @@
+<template>
+ <el-card shadow="hover">
+ <div class="f-l">宸℃煡闂璺熻釜</div>
+ </el-card>
+</template>
+
+<script>
+export default {
+ data() {
+ return {
+ subtaskList: []
+ }
+ },
+ watch: {},
+ methods: {},
+ mounted() {
+ let i = 0
+ while (i < 3) {
+ this.subtaskList.push({
+ guid: 'SMuheEkjswioSn7A',
+ name: '涓鐢熸�佹暟瀛楁腐椤圭洰宸℃煡',
+ district: '閲戝北鍖�',
+ planTime: '2024-06-04',
+ startTime: '2024-06-04 13:31:26',
+ endTime: '2024-06-04 13:33:37',
+ userName: '鏈辨寮�',
+ status: '宸茬粨鏉�'
+ })
+ i++
+ }
+ }
+}
+</script>
+
+<style scoped>
+.text {
+ background-color: aliceblue;
+}
+</style>
diff --git a/src/views/inspection/TaskTrack.vue b/src/views/inspection/TaskTrack.vue
new file mode 100644
index 0000000..97097a3
--- /dev/null
+++ b/src/views/inspection/TaskTrack.vue
@@ -0,0 +1,69 @@
+<template>
+ <div>
+ <el-row justify="space-evenly">
+ <!-- <div class="f-l">鐜板満宸℃煡璺熻釜锛堢幇鍦轰汉鍛樺贰鏌ユ儏鍐靛疄鏃舵帉鎻★級</div> -->
+ <!-- <SubtaskItem v-for="item in subtaskList" :key="item.guid" v-bind="item"> </SubtaskItem> -->
+ <el-col :span="4">
+ <TaskNode title="鏂颁换鍔�" :items="subtaskList" v-slot="{ item, index }">
+ <SubtaskItem v-bind="item" :index="index"> </SubtaskItem>
+ </TaskNode>
+ </el-col>
+ <el-col :span="4">
+ <TaskNode title="姝e湪鎵ц" :items="subtaskList" v-slot="{ item, index }">
+ <SubtaskItem v-bind="item" :index="index"> </SubtaskItem>
+ </TaskNode>
+ </el-col>
+ <el-col :span="4">
+ <TaskNode title="寰呭鏍�" :items="subtaskList" v-slot="{ item, index }">
+ <SubtaskExamineItem v-bind="item" :index="index" type="闂瀹℃牳"> </SubtaskExamineItem>
+ </TaskNode>
+ </el-col>
+ <el-col :span="4">
+ <TaskNode title="寰呮暣鏀�" :items="subtaskList" v-slot="{ item, index }">
+ <SubtaskExamineItem v-bind="item" :index="index" type="寰呮暣鏀�"> </SubtaskExamineItem>
+ </TaskNode>
+ </el-col>
+ <el-col :span="4">
+ <TaskNode title="寰呯‘璁�" :items="subtaskList" v-slot="{ item, index }">
+ <SubtaskExamineItem v-bind="item" :index="index" type="鏁存敼瀹℃牳"> </SubtaskExamineItem>
+ </TaskNode>
+ </el-col>
+ </el-row>
+ </div>
+</template>
+
+<script>
+export default {
+ data() {
+ return {
+ subtaskList: []
+ }
+ },
+ watch: {},
+ methods: {},
+ mounted() {
+ let i = 0
+ while (i < 5) {
+ this.subtaskList.push({
+ guid: 'SMuheEkjswioSn7A',
+ name: '涓鐢熸�佹暟瀛楁腐椤圭洰宸℃煡涓鐢熸�佹暟瀛楁腐椤圭洰宸℃煡',
+ district: '閲戝北鍖�',
+ planTime: '2024-06-04',
+ startTime: '2024-06-04 13:31:26',
+ endTime: '2024-06-04 13:33:37',
+ userName: '鏈辨寮�',
+ status: '宸茬粨鏉�',
+ total: 4,
+ checked: 2
+ })
+ i++
+ }
+ }
+}
+</script>
+
+<style scoped>
+.text {
+ background-color: aliceblue;
+}
+</style>
diff --git a/src/views/main/MonitorView.vue b/src/views/main/MonitorView.vue
index e1fb6b2..5f35cd8 100644
--- a/src/views/main/MonitorView.vue
+++ b/src/views/main/MonitorView.vue
@@ -1,13 +1,17 @@
<template>
<el-row>
- <el-col :span="8">
- <InspectionView></InspectionView>
+ <el-col :span="16">
+ <el-scrollbar class="page-left-top">
+ <VisualizationView></VisualizationView>
+ </el-scrollbar>
+ <el-scrollbar class="page-left-bottom">
+ <InspectionView></InspectionView>
+ </el-scrollbar>
</el-col>
- <el-col :span="8">
- <ManagementView></ManagementView>
- </el-col>
- <el-col :span="8">
- <VisualizationView></VisualizationView>
+ <el-col :span="8" class="page-right">
+ <el-scrollbar height="var(--fy-body-height)">
+ <ManagementView></ManagementView>
+ </el-scrollbar>
</el-col>
</el-row>
</template>
@@ -18,4 +22,17 @@
import VisualizationView from '@/views/visualization/VisualizationView.vue'
</script>
-<style scoped></style>
+<style scoped>
+.page-left-top {
+ height: calc(var(--fy-body-height) / 2);
+ background-color: aquamarine;
+}
+.page-left-bottom {
+ height: calc(var(--fy-body-height) / 2);
+ background-color: bisque;
+}
+
+.page-right {
+ /* background-color: aliceblue; */
+}
+</style>
diff --git a/src/views/management/ManagementView.vue b/src/views/management/ManagementView.vue
index a9d296b..681eeb0 100644
--- a/src/views/management/ManagementView.vue
+++ b/src/views/management/ManagementView.vue
@@ -1,11 +1,10 @@
<template>
- <el-row>
- <el-col :span="8">1</el-col>
- <el-col :span="8">2</el-col>
- <el-col :span="8">3</el-col>
- </el-row>
+ <el-row> 缁熻绠$悊 </el-row>
+ <TaskStats></TaskStats>
</template>
-<script setup></script>
+<script setup>
+import TaskStats from '@/views/management/TaskStats.vue'
+</script>
<style scoped></style>
diff --git a/src/views/management/TaskStats.vue b/src/views/management/TaskStats.vue
new file mode 100644
index 0000000..509ba31
--- /dev/null
+++ b/src/views/management/TaskStats.vue
@@ -0,0 +1,59 @@
+<template>
+ <div class="border-r-small">
+ <div class="f-l">鍚勭洃绠″尯鍘跨殑宸℃煡瀹屾垚鎯呭喌</div>
+ <el-row>
+ <TaskItem v-for="item in tasks" :key="item.guid" v-bind="item"></TaskItem>
+ </el-row>
+ </div>
+</template>
+
+<script>
+export default {
+ data() {
+ return {
+ tasks: []
+ }
+ },
+ watch: {},
+ methods: {},
+ mounted() {
+ let i = 0
+ while (i < 3) {
+ this.tasks.push({
+ guid: 'SMuheEkjswioSn7A',
+ name: '2024骞�6鏈堜笂娴峰競闈欏畨鍖哄贰鏌ヤ换鍔�',
+ district: '闈欏畨鍖�',
+ planTime: '2024-06',
+ startTime: '2024-06-01 00:00:00',
+ endTime: '2024-06-30 23:59:59',
+ userName: '鏈辨寮�#閭㈠瓙鐞�',
+ status: '姝e湪鎵ц',
+ count: [
+ {
+ sceneType: '宸ュ湴',
+ total: 90,
+ finish: 45
+ },
+ {
+ sceneType: '椁愰ギ',
+ total: 90,
+ finish: 45
+ },
+ {
+ sceneType: '姹戒慨',
+ total: 90,
+ finish: 45
+ }
+ ]
+ })
+ i++
+ }
+ }
+}
+</script>
+
+<style scoped>
+.text {
+ background-color: aliceblue;
+}
+</style>
diff --git a/src/views/visualization/VisualizationView.vue b/src/views/visualization/VisualizationView.vue
index a9d296b..920b0aa 100644
--- a/src/views/visualization/VisualizationView.vue
+++ b/src/views/visualization/VisualizationView.vue
@@ -1,11 +1,11 @@
<template>
- <el-row>
- <el-col :span="8">1</el-col>
- <el-col :span="8">2</el-col>
- <el-col :span="8">3</el-col>
- </el-row>
+ <el-row class="wrapper"> 鍙鍖� </el-row>
</template>
<script setup></script>
-<style scoped></style>
+<style scoped>
+.wrapper {
+ /* background-color: aquamarine; */
+}
+</style>
--
Gitblit v1.9.3