From 13f102240d9c0c9d5a133fb093551f2e08d7c55c Mon Sep 17 00:00:00 2001
From: haoxuan <haoxuan>
Date: 星期五, 19 一月 2024 16:47:41 +0800
Subject: [PATCH] ie不支持es6的问题,安装插件,配置
---
src/views/dashboard/index.vue | 309 +++++++++++++++++++++++++++++++++++++++++++++-----
1 files changed, 274 insertions(+), 35 deletions(-)
diff --git a/src/views/dashboard/index.vue b/src/views/dashboard/index.vue
index bea368b..3f1a9c3 100644
--- a/src/views/dashboard/index.vue
+++ b/src/views/dashboard/index.vue
@@ -1,71 +1,310 @@
<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>涓荤湅鏉�</template>
- <template #middleBlock3>浠诲姟璇︽儏</template>
- <template #middleBlock4>浜哄憳淇℃伅</template>
+ <template #middleBlock1>
+ <DashboardTitle @should-reload="reloadAllData"></DashboardTitle>
+ </template>
+ <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 #middleBlock3>
+ <SubTitle>浠诲姟璇︽儏</SubTitle>
+ <div class="task-detail">
+ <TaskControl :task="activeTask" :workers="currentWorkers" @should-reload="reloadChannel"></TaskControl>
+ </div>
+ <ColorInfo :type="1"></ColorInfo>
+ <ColorInfo :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>
+ <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, watchEffect } from 'vue'
+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 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'
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 ?? []
})
-getChannels()
-const taskTabsTitle = ['鏈畬鎴�', '浠婃棩浠诲姟', '宸插畬鎴�']
-const activeTaskTab = ref('鏈畬鎴�')
+const taskTabsList = [
+ {
+ label: '鏈畬鎴�',
+ value: 1
+ },
+ {
+ label: '浠婃棩浠诲姟',
+ value: 2
+ },
+ {
+ label: '宸插畬鎴�',
+ value: 3
+ }
+]
+const activeTaskTab = ref(1)
+const activeMainTabName = ref<string>('鍔犲伐淇℃伅')
-watchEffect(() => {
- // console.log(activeTaskTab?.value, 111111)
+const tasksStore = useTasksStore()
+const { activeTask, channels } = storeToRefs(tasksStore)
+tasksStore.getChannels(1, true)
+
+function changeTab(tab: LabelValue) {
+ tasksStore.getChannels(tab.value)
+}
+
+/**
+ * 瀹屾垚浠诲姟鎴栬�呬笅鍙戝弬鏁版垚鍔熷悗瑕佸埛鏂伴�氶亾鏁版嵁
+ * @param task
+ */
+function reloadChannel(task: Task) {
+ tasksStore.reloadChannel(task.Channel).then(() => {
+ plcStore.startPollingPLC()
+ })
+}
+
+function reloadAllData() {
+ tasksStore.reloadAllData()
+ location.reload()
+}
+// 鍚姩plc 杞
+const plcStore = usePLCStore()
+plcStore.startPollingPLC()
+// 鍚姩 璁惧 杞
+const deviceStore = useDevicesStore()
+deviceStore.startPollingDevice()
+
+// 鍒囨崲浠诲姟鏃惰幏鍙栧搴斾换鍔$殑宸ヨ壓妯″瀷淇℃伅
+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)) {
+ return channels.value[channel].workers ?? []
+ } else {
+ return []
+ }
})
</script>
-<style scoped>
+<style scoped lang="scss">
+$active-tab-color: #00dfdf;
.date-time {
width: 100%;
display: flex;
align-items: center;
justify-content: center;
- padding-top: 12px;
+ 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 16px;
}
</style>
--
Gitblit v1.8.0