From 7e7424b2662e5b27dcc1c0d37f43e909e0b15ee1 Mon Sep 17 00:00:00 2001
From: songshankun <songshankun@foxmail.com>
Date: 星期四, 02 十一月 2023 16:47:38 +0800
Subject: [PATCH] feat: 轮询plc/设备/调整集群状态组件/title组件加图标

---
 src/views/dashboard/index.vue |  182 +++++++++++++++++++++++++++++++++------------
 1 files changed, 132 insertions(+), 50 deletions(-)

diff --git a/src/views/dashboard/index.vue b/src/views/dashboard/index.vue
index 30a0e7c..c733a51 100644
--- a/src/views/dashboard/index.vue
+++ b/src/views/dashboard/index.vue
@@ -1,92 +1,144 @@
 <template>
   <DashboardLayout>
     <template #leftBlock1>
-      <TaskTabs v-model="activeTaskTab" style="margin-top: 20px" :list="taskTabsTitle"></TaskTabs>
+      <TaskTabs v-model="activeTaskTab" style="margin-top: 20px" :list="taskTabsList" @change="changeTab"></TaskTabs>
     </template>
     <template #leftBlock2>
       <ChannelCollapse :channels="channels"></ChannelCollapse>
     </template>
-    <template #middleBlock1>鏍囬</template>
-    <template #middleBlock2
-      >涓荤湅鏉�
-      <ProcessInfo :process="process"></ProcessInfo>
-      <div v-if="activeTask">
-        浠诲姟璇︽儏
-        {{ activeTask.Order.workOrderId }}
-      </div>
+    <template #middleBlock1>
+      <DashboardTitle></DashboardTitle>
     </template>
-    <template #middleBlock3> 浠诲姟璇︽儏 </template>
-    <template #middleBlock4
-      >浜哄憳淇℃伅
-      <PersonInfo :person="person"></PersonInfo>
+    <template #middleBlock2>
+      <el-tabs v-model="activeMainTabName" class="main-info-tabs">
+        <el-tab-pane label="鍔犲伐淇℃伅" name="鍔犲伐淇℃伅">
+          <ProcessingInfo style="margin-top: 6px" :task="activeTask"></ProcessingInfo>
+        </el-tab-pane>
+        <el-tab-pane label="宸ヨ壓淇℃伅" name="宸ヨ壓淇℃伅">
+          <ProcessInfo :process="process"></ProcessInfo>
+        </el-tab-pane>
+        <el-tab-pane label="鐗╂枡娓呭崟" name="鐗╂枡娓呭崟">Role</el-tab-pane>
+      </el-tabs>
+    </template>
+    <template #middleBlock3>
+      <SubTitle>浠诲姟璇︽儏</SubTitle>
+      <div class="task-detail">
+        <TaskControl :task="activeTask" @should-reload="reloadAllData"></TaskControl>
+      </div>
+      <ColorInfo :order="order" :type="1"></ColorInfo>
+      <ColorInfo :order="order" :type="2"></ColorInfo>
+    </template>
+    <template #middleBlock4>
+      <SubTitle>浜哄憳淇℃伅</SubTitle>
+      <PersonInfo v-for="worker in workers" :key="worker.workerId" :person="worker"></PersonInfo>
     </template>
     <template #rightBlock1>
       <div class="date-time">
         <CurrentDateTime></CurrentDateTime>
       </div>
     </template>
-    <template #rightBlock2>鐘舵�侀潰鏉�</template>
-    <template #rightBlock3>鐭ヨ瘑搴�</template>
+    <template #rightBlock2>
+      <DeviceStatusInfo :plc="plcStore.plcInfo" :type="1"></DeviceStatusInfo>
+      <DeviceStatusInfo :device="deviceStore.deviceInfo" :type="2"></DeviceStatusInfo>
+      <DeviceNumberInfo></DeviceNumberInfo>
+    </template>
+    <template #rightBlock3>
+      <SubTitle>鐭ヨ瘑搴�</SubTitle>
+      <KnowledgeInfo></KnowledgeInfo>
+      <BigButton class="btn" bg-color="red">绾㈢伅鍛煎彨</BigButton>
+    </template>
   </DashboardLayout>
 </template>
 <script setup lang="ts">
-import { getTaskList } from '@/api'
-import { computed, ref, watchEffect } from 'vue'
+import { computed, ref, watch, onUnmounted } from 'vue'
 import ChannelCollapse from '@/views/dashboard/components/ChannelCollapse.vue'
-import type { Task, Worker } from '@/api/task'
-import { chain } from 'lodash-es'
-import ProcessInfo from '@/views/dashboard/components/ProcessInfo.vue'
+import type { Worker, Order, Task } from '@/api/task'
+import type { PLCResponse } from '@/api/plc'
 import PersonInfo from '@/views/dashboard/components/PersonInfo.vue'
+import ProcessInfo from '@/views/dashboard/components/ProcessInfo.vue'
+import ColorInfo from '@/views/dashboard/components/ColorInfo.vue'
+import DeviceStatusInfo from '@/views/dashboard/components/DeviceStatusInfo.vue'
+import DeviceNumberInfo from '@/views/dashboard/components/DeviceNumberInfo.vue'
+import KnowledgeInfo from '@/views/dashboard/components/KnowledgeInfo.vue'
+import BigButton from '@/views/dashboard/components/BigButton.vue'
+import type { LabelValue } from '@/views/dashboard/components/TaskTabs.vue'
 import TaskTabs from '@/views/dashboard/components/TaskTabs.vue'
 import CurrentDateTime from '@/views/dashboard/components/CurrentDateTime.vue'
 import { useTasksStore } from '@/stores/tasks'
 import { storeToRefs } from 'pinia'
+import ProcessingInfo from '@/views/dashboard/components/ProcessingInfo.vue'
+import TaskControl from '@/views/dashboard/components/TaskControl.vue'
+import SubTitle from '@/views/dashboard/components/SubTitle.vue'
+import DashboardTitle from '@/views/dashboard/components/DashboardTitle.vue'
+import { usePLCStore } from '@/stores/plc'
+import { useDevicesStore } from '@/stores/devices'
 
 defineOptions({
   name: 'DashboardView'
 })
 
-const taskList = ref<Task[]>()
-
-function getChannels() {
-  getTaskList(2)
-    .then((res) => {
-      taskList.value = res.data.Tasks
-    })
-    .catch((err) => {
-      console.error(err)
-      taskList.value = []
-    })
-}
-
-const channels = computed(() => {
-  return chain<Task>(taskList.value)
-    .groupBy((ele) => ele.Channel)
-    .value()
+// 鑾峰彇褰撳墠楂樹寒浠诲姟鐨勫�肩彮浜轰俊鎭�
+const taskStore = useTasksStore()
+const workers = computed(() => {
+  return taskStore.activeTask?.Procedure?.procedure?.workers ?? []
 })
+
 const process = computed(() => {
-  return { name: '宸ヨ壓鍚嶇О', number: '111' }
+  return { product: '浜у搧鍚嶇О', number: '111', procedure: '宸ヨ壓鍚嶇О', isUpdate: true } as any
 })
-const person = computed(() => {
+
+const order = computed(() => {
   return {
-    workerName: '濮撳悕',
-    phone: '111'
-  } as unknown as Worker
+    finishNumber: 0,
+    unit: '涓�',
+    amount: '10'
+  } as unknown as Order
 })
-getChannels()
-const taskTabsTitle = ['鏈畬鎴�', '浠婃棩浠诲姟', '宸插畬鎴�']
-const activeTaskTab = ref('鏈畬鎴�')
+const device = computed(() => {
+  return {
+    plcStatus: 1,
+    plcNotConnected: false
+  } as unknown as PLCResponse
+})
+const taskTabsList = [
+  {
+    label: '鏈畬鎴�',
+    value: 1
+  },
+  {
+    label: '浠婃棩浠诲姟',
+    value: 2
+  },
+  {
+    label: '宸插畬鎴�',
+    value: 3
+  }
+]
+const activeTaskTab = ref(1)
+const activeMainTabName = ref<string>('鍔犲伐淇℃伅')
 
 const tasksStore = useTasksStore()
+const { activeTask, channels } = storeToRefs(tasksStore)
+tasksStore.getChannels(1)
 
-const { activeTask } = storeToRefs(tasksStore)
+function changeTab(tab: LabelValue) {
+  tasksStore.getChannels(tab.value)
+}
 
-watchEffect(() => {
-  // console.log(activeTaskTab?.value, 111111)
-})
+function reloadAllData(task: Task) {
+  tasksStore.reload(task.Channel)
+}
+
+const plcStore = usePLCStore()
+// 鍚姩plc 杞
+plcStore.startPollingPLC()
+
+const deviceStore = useDevicesStore()
+deviceStore.startPollingDevice()
 </script>
 
-<style scoped>
+<style scoped lang="scss">
+$active-tab-color: #00dfdf;
 .date-time {
   width: 100%;
   display: flex;
@@ -94,4 +146,34 @@
   justify-content: center;
   padding-top: 12px;
 }
+
+:deep(.el-tabs__item) {
+  color: #fff;
+  font-size: 20px;
+}
+:deep(.el-tabs__nav-scroll) {
+  height: 46px;
+}
+:deep(.el-tabs__nav) {
+  height: 46px;
+}
+:deep(.el-step__title.is-process) {
+  color: #fff;
+}
+
+:deep(.el-tabs__item.is-active) {
+  color: $active-tab-color;
+  font-weight: 600;
+}
+:deep(.el-tabs__active-bar) {
+  background-color: $active-tab-color;
+  height: 4px;
+}
+:deep(.el-tabs__nav-wrap::after) {
+  height: 1px;
+}
+.btn {
+  width: 100%;
+  font-size: 20px;
+}
 </style>

--
Gitblit v1.8.0