From 031b4d9a2a6a757571015b1903bb125d414ecb2a Mon Sep 17 00:00:00 2001
From: haoxuan <haoxuan>
Date: 星期四, 02 十一月 2023 13:59:30 +0800
Subject: [PATCH] Merge branch 'dev' of http://192.168.5.5:10010/r/web/bulletin-board-style1 into wn
---
public/header-bg.png | 0
src/views/dashboard/components/TroubleTrackerModal.vue | 95 +++++++++++++++++++++++++++++++
src/components/BaseModal.vue | 4 +
src/views/dashboard/index.vue | 12 ++--
src/common/constants/index.ts | 5 +
src/components/DashboardLayout.vue | 3 +
src/views/dashboard/components/DashboardTitle.vue | 13 +++-
7 files changed, 122 insertions(+), 10 deletions(-)
diff --git a/public/header-bg.png b/public/header-bg.png
new file mode 100644
index 0000000..1d6254a
--- /dev/null
+++ b/public/header-bg.png
Binary files differ
diff --git a/src/common/constants/index.ts b/src/common/constants/index.ts
index 217acf4..995f28e 100644
--- a/src/common/constants/index.ts
+++ b/src/common/constants/index.ts
@@ -16,3 +16,8 @@
6: 'F',
7: 'G'
}
+
+export const DEVICE_STATUS_NAME_MAP = {
+ 1: '姝e父',
+ 2: '寮傚父'
+}
diff --git a/src/components/BaseModal.vue b/src/components/BaseModal.vue
index 34a552a..76e1411 100644
--- a/src/components/BaseModal.vue
+++ b/src/components/BaseModal.vue
@@ -36,11 +36,12 @@
})
const emit = defineEmits<{
'update:modelValue': [show: boolean]
+ close: []
}>()
const modelData = useVModel(props, 'modelValue', emit)
function closeModal() {
- modelData.value = false
+ emit('close')
}
</script>
<style scoped lang="scss">
@@ -74,6 +75,7 @@
font-weight: 600;
}
&-close {
+ cursor: pointer;
height: 36px;
width: 36px;
border-radius: 50%;
diff --git a/src/components/DashboardLayout.vue b/src/components/DashboardLayout.vue
index 8bebf18..3e48567 100644
--- a/src/components/DashboardLayout.vue
+++ b/src/components/DashboardLayout.vue
@@ -72,6 +72,9 @@
// 涓嬭竟楂樺害
$bottomBlockHeight: calc(100vh - 2 * $layoutPadding - $headerBlockHeight - $topBlocHeight);
.dashboard-layout {
+ background-image: url('/header-bg.png');
+ background-position-x: center;
+ background-repeat: no-repeat;
display: flex;
align-items: center;
justify-content: space-between;
diff --git a/src/views/dashboard/components/DashboardTitle.vue b/src/views/dashboard/components/DashboardTitle.vue
index ed14226..d52b218 100644
--- a/src/views/dashboard/components/DashboardTitle.vue
+++ b/src/views/dashboard/components/DashboardTitle.vue
@@ -1,6 +1,6 @@
<template>
<div class="dashboard-title">
- <div class="title-text">鏅鸿兘宸ヤ綔鍙� 鈥� {{ props?.deviceInfo?.currentDeviceID ?? '' }}</div>
+ <div class="title-text">鏅鸿兘宸ヤ綔鍙� 鈥� {{ deviceStore?.devices?.currentDeviceID ?? '' }}</div>
<div class="title-status">
<div class="connection-info" @click="openSelectDeviceModal">
<el-icon size="30" color="red">
@@ -10,14 +10,17 @@
<div class="connection-status"></div>
</div>
</div>
+
+ <TroubleTrackerModal v-model="showModal"></TroubleTrackerModal>
</template>
<script setup lang="ts">
-import type { Devices } from '@/api/device'
import AlertLightIcon from '@/components/icons/AlertLightIcon.vue'
import { ref } from 'vue'
+import { useDevicesStore } from '@/stores/devices'
+import TroubleTrackerModal from '@/views/dashboard/components/TroubleTrackerModal.vue'
export interface DashBoardTitleProps {
- deviceInfo: Devices
+ // deviceInfo: Devices
}
const props = defineProps<DashBoardTitleProps>()
@@ -27,6 +30,10 @@
function openSelectDeviceModal() {
showModal.value = true
}
+
+const deviceStore = useDevicesStore()
+
+deviceStore.getDevicesInfo()
</script>
<style scoped lang="scss">
diff --git a/src/views/dashboard/components/TroubleTrackerModal.vue b/src/views/dashboard/components/TroubleTrackerModal.vue
new file mode 100644
index 0000000..7a9393f
--- /dev/null
+++ b/src/views/dashboard/components/TroubleTrackerModal.vue
@@ -0,0 +1,95 @@
+<template>
+ <div class="trouble-tracker-modal">
+ <BaseModal v-model="modelData" :wider="true" @close="closeModal">
+ <template #title>闂璇婃柇 </template>
+ <div class="modal-content">
+ <el-scrollbar always class="scroller">
+ <div v-if="fakeTroubles?.length" class="trouble">
+ <div v-for="(item, index) in fakeTroubles" :key="index" class="trouble-item">
+ <div class="trouble-content">
+ <div class="trouble-icon">
+ <el-icon v-if="item.status === 2" size="30" color="#ff0000"><WarnTriangleFilled /></el-icon>
+ <el-icon v-if="item.status === 1" size="30" color="#00ff00"><CircleCheckFilled /></el-icon>
+ </div>
+ <div class="trouble-text">{{ item.content }}</div>
+ </div>
+ <div class="trouble-status" :class="{ green: item.status === 1, red: item.status === 2 }">
+ {{ DEVICE_STATUS_NAME_MAP[item.status] }}
+ </div>
+ </div>
+ </div>
+ </el-scrollbar>
+ </div>
+ </BaseModal>
+ </div>
+</template>
+<script setup lang="ts">
+import { useVModel } from '@vueuse/core/index'
+import { ref } from 'vue'
+import { CircleCheckFilled, WarnTriangleFilled } from '@element-plus/icons-vue'
+import { DEVICE_STATUS_NAME_MAP } from '@/common/constants'
+export interface TroubleTrackerModalProps {
+ modelValue: false
+}
+const props = withDefaults(defineProps<TroubleTrackerModalProps>(), {
+ modelValue: false
+})
+const emit = defineEmits<{
+ 'update:modelValue': [show: boolean]
+}>()
+const modelData = useVModel(props, 'modelValue', emit)
+
+function closeModal() {
+ modelData.value = false
+}
+
+const fakeTroubles = ref<{ content: string; status: 1 | 2 }[]>([{ content: '浜戠缃戠粶杩炴帴', status: 1 }])
+// TODO: 绛夋帴鍙�
+fakeTroubles.value.push(
+ ...Array(100)
+ .fill(0)
+ .map(() => {
+ return {
+ content: '浜戠缃戠粶杩炴帴',
+ status: Math.ceil(Math.random() + 1)
+ } as { content: string; status: 1 | 2 }
+ })
+)
+</script>
+<style scoped lang="scss">
+.modal-content {
+ height: 600px;
+}
+.trouble {
+ color: #fff;
+ font-size: 18px;
+ padding: 6px 40px 6px 20px;
+
+ &-item {
+ min-height: 40px;
+ padding: 10px 0;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ }
+ &-icon {
+ height: 30px;
+ margin-right: 14px;
+ }
+ &-content {
+ display: flex;
+ align-items: center;
+ }
+ &-status {
+ &.green {
+ color: #00ff00;
+ }
+ &.red {
+ color: #ff0000;
+ }
+ }
+}
+.scroller {
+ padding: 4px 16px;
+}
+</style>
diff --git a/src/views/dashboard/index.vue b/src/views/dashboard/index.vue
index fbbaf4b..fd0f348 100644
--- a/src/views/dashboard/index.vue
+++ b/src/views/dashboard/index.vue
@@ -30,7 +30,7 @@
</template>
<template #middleBlock4>
<SubTitle>浜哄憳淇℃伅</SubTitle>
- <PersonInfo :person="person"></PersonInfo>
+ <PersonInfo v-for="worker in workers" :key="worker.workerId" :person="worker"></PersonInfo>
</template>
<template #rightBlock1>
<div class="date-time">
@@ -75,12 +75,12 @@
name: 'DashboardView'
})
-const person = computed(() => {
- return {
- workerName: '濮撳悕',
- phone: '111'
- } as unknown as Worker
+// 鑾峰彇褰撳墠楂樹寒浠诲姟鐨勫�肩彮浜轰俊鎭�
+const taskStore = useTasksStore()
+const workers = computed(() => {
+ return taskStore.activeTask?.Procedure?.procedure?.workers ?? []
})
+
const process = computed(() => {
return { product: '浜у搧鍚嶇О', number: '111', procedure: '宸ヨ壓鍚嶇О', isUpdate: true } as any
})
--
Gitblit v1.8.0