From c7f3fd5215399b37d0511b3bd555150ff1b13507 Mon Sep 17 00:00:00 2001
From: charles <981744753@qq.com>
Date: 星期一, 29 四月 2024 10:39:30 +0800
Subject: [PATCH] fix:回退原先版本

---
 src/views/dashboard/index.vue |  348 +++++++++++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 308 insertions(+), 40 deletions(-)

diff --git a/src/views/dashboard/index.vue b/src/views/dashboard/index.vue
index c2f2e8a..c301129 100644
--- a/src/views/dashboard/index.vue
+++ b/src/views/dashboard/index.vue
@@ -1,64 +1,332 @@
 <template>
   <DashboardLayout>
-    <template #leftBlock1>浠诲姟绛涢�塼abs</template>
+    <template #leftBlock1>
+      <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>
+    <template #middleBlock1>
+      <DashboardTitle @should-reload="reloadAllData"></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="宸ヨ壓淇℃伅">
+          <div style="height: 300px">
+            <el-scrollbar always class="scroller" style="height: 100%">
+              <div
+                v-infinite-scroll="craftModelStore.loadMore"
+                infinite-scroll-delay="500"
+                infinite-scroll-distance="40"
+                style="display: flex; align-items: center; flex-wrap: wrap"
+              >
+                <ProcessInfo
+                  v-for="item in craftModelStore.craftModelList"
+                  :key="item.ID"
+                  :task="activeTask"
+                  :active-arr="activeArr"
+                  :craft-model="item"
+                  @detail="openCraftModelDetailModal"
+                  @update="updateCraft"
+                ></ProcessInfo>
+              </div>
+              <div class="craft-loaded-tip">
+                <el-icon v-if="craftModelStore.loading" class="is-loading" size="30">
+                  <Loading />
+                </el-icon>
+
+                <div v-if="!craftModelStore.hasMore && craftModelStore.craftModelList.length > 6">鍔犺浇瀹屾垚</div>
+              </div>
+            </el-scrollbar>
+          </div>
+        </el-tab-pane>
+        <el-tab-pane label="鐗╂枡娓呭崟" name="鐗╂枡娓呭崟">
+          <InputMaterialsList
+            :material-list="activeTask?.Procedure?.procedure?.inputMaterials"
+            @detail-click="showMaterialDetailModal"
+          ></InputMaterialsList>
+          <OutputMaterialsList
+            :material-list="activeTask?.Procedure?.procedure?.outputMaterials"
+            @detail-click="showMaterialDetailModal"
+          ></OutputMaterialsList>
+        </el-tab-pane>
+      </el-tabs>
     </template>
-    <template #rightBlock1>鏃堕棿</template>
-    <template #rightBlock2>鐘舵�侀潰鏉�</template>
-    <template #rightBlock3>鐭ヨ瘑搴�</template>
+    <template #middleBlock3>
+      <SubTitle>浠诲姟璇︽儏</SubTitle>
+      <div class="task-detail">
+        <el-scrollbar always class="scroller">
+          <TaskControl :task="activeTask" :workers="currentWorkers" @should-reload="reloadChannel"></TaskControl>
+          <ColorInfo :type="1"></ColorInfo>
+          <ColorInfo :type="2"></ColorInfo>
+        </el-scrollbar>
+      </div>
+    </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>
+      <DeviceStatusInfo :type="1"></DeviceStatusInfo>
+      <DeviceStatusInfo :device="deviceStore.deviceInfo" :type="2"></DeviceStatusInfo>
+      <DeviceNumberInfo></DeviceNumberInfo> </template
+    >褰撳墠浠诲姟:
+    <template #rightBlock3>
+      <SubTitle>鐭ヨ瘑搴�</SubTitle>
+      <div class="task-detail-right-3">
+        <el-scrollbar always class="scroller">
+          <KnowledgeInfo></KnowledgeInfo>
+        </el-scrollbar>
+      </div>
+      <BigButton class="btn" bg-color="red">绾㈢伅鍛煎彨</BigButton>
+    </template>
   </DashboardLayout>
+  <CraftDetailModal
+    v-model="showCraftModelDetail"
+    :active-arr="activeArr"
+    :craft-model="currentCraftModelInfo"
+    @renew="updateCraft"
+    @close="showCraftModelDetail = false"
+  ></CraftDetailModal>
+  <MaterialDetails v-model="showMaterialDetail" :material="currentMaterialInfo"></MaterialDetails>
 </template>
 <script setup lang="ts">
-import { getTaskList } from '@/api'
 import { computed, ref } from 'vue'
 import ChannelCollapse from '@/views/dashboard/components/ChannelCollapse.vue'
-import type { Task } from '@/api/task'
-import { chain } from 'lodash-es'
-import ProcessInfo from '@/views/dashboard/components/ProcessInfo.vue'
+
+import type { Task, Material } from '@/api/task'
+import type { CraftModel } from '@/api/craftModel'
 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 InputMaterialsList from '@/views/dashboard/components/InputMaterialsList.vue'
+import OutputMaterialsList from '@/views/dashboard/components/OutputMaterialsList.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'
+import { useCraftModelStore } from '@/stores/craftModel'
+import CraftDetailModal from '@/views/dashboard/components/CraftDetailModal.vue'
+import MaterialDetails from '@/views/dashboard/components/MaterialDetails.vue'
+
+import { updateCraftParams } from '@/api'
+import { Loading } from '@element-plus/icons-vue'
+import { isNumber } from 'lodash-es'
+import { getToken } from '@/common/utils/index'
+const token = getToken()
+
 defineOptions({
   name: 'DashboardView'
 })
 
-const taskList = ref<Task[]>()
+// 鑾峰彇褰撳墠楂樹寒浠诲姟鐨勫�肩彮浜轰俊鎭�
+const taskStore = useTasksStore()
+const workers = computed(() => {
+  return taskStore.activeTask?.Procedure?.procedure?.workers ?? []
+})
 
-function getChannels() {
-  getTaskList(2)
-    .then((res) => {
-      taskList.value = res.data.Tasks
-    })
-    .catch((err) => {
-      console.error(err)
-      taskList.value = []
-    })
+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, true)
+
+function changeTab(tab: LabelValue) {
+  tasksStore.getChannels(tab.value)
 }
 
-const channels = computed(() => {
-  return chain<Task>(taskList.value)
-    .groupBy((ele) => ele.Channel)
-    .value()
-})
-const process = computed(() => {
-  return { name: '宸ヨ壓鍚嶇О', number: '111' }
-})
-const person = computed(() => {
-  return {
-    workerName: '濮撳悕',
-    phone: '111'
+/**
+ * 瀹屾垚浠诲姟鎴栬�呬笅鍙戝弬鏁版垚鍔熷悗瑕佸埛鏂伴�氶亾鏁版嵁
+ * @param task
+ */
+function reloadChannel(task: Task) {
+  if (token !== null || token !== '' || token !== 'undefined') {
+    tasksStore.reloadChannel(task.Channel)
+    location.reload()
+  }
+}
+
+function reloadAllData() {
+  tasksStore.reloadAllData()
+  location.reload()
+}
+// 鍚姩plc 杞
+// const plcStore = usePLCStore()
+// plcStore.startPollingPLC()
+// 鍚姩 璁惧 杞
+const deviceStore = useDevicesStore()
+deviceStore.startPollingDevice()
+// console.log(deviceStore, '1111')
+// localStorage.setItem('currentDeviceID', deviceStore.deviceInfo.currentDeviceID)
+
+// 鍒囨崲浠诲姟鏃惰幏鍙栧搴斾换鍔$殑宸ヨ壓妯″瀷淇℃伅
+const craftModelStore = useCraftModelStore()
+craftModelStore.getCraftModelList()
+
+const showCraftModelDetail = ref(false)
+// 褰撳墠瑕佸睍绀虹殑宸ヨ壓璇︽儏
+const currentCraftModelInfo = ref<CraftModel>()
+const activeArr = ref<string[]>([])
+function openCraftModelDetailModal(craftModel: CraftModel) {
+  currentCraftModelInfo.value = craftModel
+  showCraftModelDetail.value = true
+}
+// 鏇存柊宸ヨ壓
+function updateCraft(craftModel: CraftModel) {
+  if (activeTask?.value?.Procedure?.ID) {
+    activeArr.value.push(craftModel.number)
+    updateCraftParams({ procedureId: activeTask!.value.Procedure.ID }).then(
+      (res) => {
+        if (res.code == 200) {
+          editActive(craftModel)
+          ElMessage({
+            message: '鏇存柊鎴愬姛锛�',
+            type: 'success'
+          })
+          craftModelStore.getCraftModelList()
+        }
+      },
+      (err) => {
+        console.error(err, '----err')
+        setTimeout(() => {
+          editActive(craftModel)
+        }, 300)
+      }
+    )
+  }
+}
+function editActive(craftModel: CraftModel) {
+  for (let i in activeArr.value) {
+    if (activeArr.value[i] == craftModel.number) {
+      activeArr.value.splice(Number(i), 1)
+    }
+  }
+}
+
+// 鏄惁灞曠ず鐗╂枡璇︽儏寮圭獥
+const showMaterialDetail = ref(false)
+// 褰撳墠瑕佸睍绀虹殑鐗╂枡璇︽儏
+const currentMaterialInfo = ref<Material>()
+
+/**
+ * 鏄剧ず鐗╂枡璇︽儏寮圭獥
+ * @param material
+ */
+function showMaterialDetailModal(material: Material) {
+  currentMaterialInfo.value = material
+  showMaterialDetail.value = true
+}
+
+const currentWorkers = computed(() => {
+  const channel = activeTask.value?.Channel
+  if (isNumber(channel)) {
+    console.log(activeTask.value?.Procedure?.procedure?.workers, '99999')
+    // return []
+    return activeTask.value?.Procedure?.procedure?.workers ?? []
+  } else {
+    return []
   }
 })
-getChannels()
 </script>
 
-<style scoped></style>
+<style scoped lang="scss">
+$active-tab-color: #00dfdf;
+.date-time {
+  width: 100%;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  padding-top: 22px;
+}
+:deep(.el-tabs) {
+  height: 100%;
+}
+:deep(.el-tab-pane) {
+  height: 100%;
+}
+:deep(.el-tabs__content) {
+  height: calc(100% - 56px);
+}
+: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;
+}
+.craft-loaded-tip {
+  height: 40px;
+  text-align: center;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+}
+.scroller {
+  padding: 4px 10px;
+}
+.task-detail {
+  width: 100%;
+  height: calc(100% - 32px);
+  padding-right: 5px;
+}
+.task-detail-right-3 {
+  width: 100%;
+  height: calc(100% - 32px - 50px);
+}
+</style>

--
Gitblit v1.8.0