From 19378c283f19ee0b023b3cd73fbdd331eed2fe17 Mon Sep 17 00:00:00 2001
From: songshankun <songshankun@foxmail.com>
Date: 星期四, 02 十一月 2023 18:45:25 +0800
Subject: [PATCH] feat: 添加工艺列表接口,工艺详情弹窗未完成

---
 src/stores/craftModel.ts                            |   24 ++++++
 src/views/dashboard/components/ProcessInfo.vue      |   31 +++++--
 src/api/craftModel.ts                               |   19 ++++
 src/views/dashboard/index.vue                       |   41 +++++++---
 src/api/task.ts                                     |    2 
 src/stores/tasks.ts                                 |   19 ----
 src/api/index.ts                                    |   36 +++++++++
 src/views/dashboard/components/CraftDetailModal.vue |   35 ++++++++
 src/views/dashboard/components/TaskControlModal.vue |    2 
 9 files changed, 167 insertions(+), 42 deletions(-)

diff --git a/src/api/craftModel.ts b/src/api/craftModel.ts
new file mode 100644
index 0000000..d4dd8a4
--- /dev/null
+++ b/src/api/craftModel.ts
@@ -0,0 +1,19 @@
+export interface ParamsMap {
+  [keyProp: string]: string
+}
+
+export interface CraftModel {
+  ID: number
+  CreatedAt: string
+  UpdatedAt: string
+  DeletedAt: string
+  number: string
+  product: string
+  procedure: string
+  Params: string
+  paramsMap: ParamsMap
+  deviceId: string
+  isUpdate: boolean
+  newParamsMap: string
+  newNumber: string
+}
diff --git a/src/api/index.ts b/src/api/index.ts
index c8e30e9..afab391 100644
--- a/src/api/index.ts
+++ b/src/api/index.ts
@@ -2,6 +2,7 @@
 import type { CraftParamsResponse, TasksGroupByChannel } from './task'
 import type { PLCResponse } from './plc'
 import type { Devices } from './device'
+import type { CraftModel } from './craftModel'
 
 export interface BaseResponse<T = any> {
   code: number
@@ -105,3 +106,38 @@
     method: 'get'
   })
 }
+
+export interface CraftModelListParams {
+  procedureId: number
+  page: number
+  pageSize: number
+  number: string
+}
+
+/**
+ * 鑾峰彇宸ヨ壓妯″瀷鍒楄〃
+ * @param params
+ */
+export function apiGetCraftModelList(params: CraftModelListParams) {
+  return request<BaseResponse<CraftModel[]>>({
+    url: '/v1/processModel/list',
+    method: 'get',
+    params
+  })
+}
+
+export interface UpdateCraftPrams {
+  procedureId: number
+}
+
+/**
+ * 鏇存柊宸ヨ壓妯″瀷
+ * @param params
+ */
+export function updateCraftParams(params: UpdateCraftPrams) {
+  return request<BaseResponse>({
+    url: '/v1/task/updateProcessParams',
+    method: 'post',
+    data: params
+  })
+}
diff --git a/src/api/task.ts b/src/api/task.ts
index bb0f969..125883a 100644
--- a/src/api/task.ts
+++ b/src/api/task.ts
@@ -105,6 +105,6 @@
 }
 
 export interface CraftParamsResponse {
-  number: string
+  Number: string
   Params: CraftParam[]
 }
diff --git a/src/stores/craftModel.ts b/src/stores/craftModel.ts
new file mode 100644
index 0000000..7f7c5f3
--- /dev/null
+++ b/src/stores/craftModel.ts
@@ -0,0 +1,24 @@
+import { ref, computed } from 'vue'
+import { defineStore } from 'pinia'
+import type { CraftModel } from '@/api/craftModel'
+import { apiGetCraftModelList } from '@/api'
+import { useTasksStore } from '@/stores/tasks'
+
+export const useCraftModelStore = defineStore('craftModel', () => {
+  const craftModelList = ref<CraftModel[]>()
+  const taskStore = useTasksStore()
+  function getCraftModelList() {
+    if (taskStore.activeTask?.Procedure.ID) {
+      apiGetCraftModelList({
+        procedureId: taskStore.activeTask?.Procedure.ID,
+        page: 1,
+        pageSize: 999,
+        number: taskStore.activeTask?.Procedure?.processModelNumber
+      }).then((res) => {
+        craftModelList.value = res.data ?? []
+      })
+    }
+  }
+
+  return { craftModelList, getCraftModelList }
+})
diff --git a/src/stores/tasks.ts b/src/stores/tasks.ts
index 92035a0..3a97ead 100644
--- a/src/stores/tasks.ts
+++ b/src/stores/tasks.ts
@@ -123,22 +123,6 @@
     activeTask.value = task
   }
 
-  const requestParamsMap = ref<{
-    [channel: number]: TaskListParams
-  }>({})
-  function getParamsByChannel(channel: number) {
-    return (
-      requestParamsMap.value[channel] ?? {
-        type: 1,
-        offset: 0,
-        limit: 3
-      }
-    )
-  }
-
-  function setParamsByChannel(channel: number, params: TaskListParams) {
-    requestParamsMap.value[channel] = params
-  }
   return {
     channels,
     getChannels,
@@ -146,9 +130,6 @@
     activeTask,
     reload,
     setActiveTask,
-    requestParamsMap,
-    getParamsByChannel,
-    setParamsByChannel,
     moreChannelTasksBtn,
     foldChannelTasksBtn
   }
diff --git a/src/views/dashboard/components/CraftDetailModal.vue b/src/views/dashboard/components/CraftDetailModal.vue
new file mode 100644
index 0000000..e116a60
--- /dev/null
+++ b/src/views/dashboard/components/CraftDetailModal.vue
@@ -0,0 +1,35 @@
+<template>
+  <div class="craft-detail-modal">
+    <BaseModal v-model="modelData" :wider="true" @close="closeModal">
+      <template #title>宸ヨ壓璇︽儏 </template>
+      <div class="modal-content">
+        <el-scrollbar always class="scroller">
+          <div class="trouble"></div>
+        </el-scrollbar>
+      </div>
+    </BaseModal>
+  </div>
+</template>
+<script setup lang="ts">
+import { useVModel } from '@vueuse/core'
+
+export interface CraftDetailModalProps {
+  modelValue: boolean
+}
+const props = withDefaults(defineProps<CraftDetailModalProps>(), {
+  modelValue: false
+})
+const emit = defineEmits<{
+  'update:modelValue': [show: boolean]
+  close: []
+}>()
+const modelData = useVModel(props, 'modelValue', emit)
+
+function closeModal() {
+  emit('close')
+}
+
+//TODO: 宸ヨ壓璇︽儏寮圭獥
+</script>
+
+<style scoped lang="scss"></style>
diff --git a/src/views/dashboard/components/ProcessInfo.vue b/src/views/dashboard/components/ProcessInfo.vue
index 39bc74d..65ab682 100644
--- a/src/views/dashboard/components/ProcessInfo.vue
+++ b/src/views/dashboard/components/ProcessInfo.vue
@@ -3,26 +3,39 @@
     <div class="item-l-bng">
       <img src="~@/assets/images/process-model.png" />
     </div>
-    <div class="item-r">
-      <div class="item-r-t font_weight">{{ process.number }}</div>
-      <div class="item-r-b">{{ process.product }}</div>
-      <div class="item-r-b">{{ process.procedure }}</div>
+    <div class="item-r" @click="onDetailClick">
+      <div class="item-r-t font_weight">{{ craftModel.number }}</div>
+      <div class="item-r-b">浜у搧: {{ craftModel.product }}</div>
+      <div class="item-r-b">宸ヨ壓: {{ craftModel.procedure }}</div>
     </div>
-    <div v-if="process.isUpdate" class="tip-r">
+    <div v-if="craftModel.isUpdate" class="tip-r">
       <img src="~@/assets/images/process-tip.png" />
     </div>
-    <div v-if="process.isUpdate" class="tip-current">褰撳墠浣跨敤</div>
+    <div v-if="craftModel.isUpdate" class="tip-current">褰撳墠浣跨敤</div>
     <div class="btn">
-      <el-button type="primary" class="color_organge"> 鏇存柊宸ヨ壓 </el-button>
+      <el-button type="primary" class="color_organge" @click="onUpdateClick"> 鏇存柊宸ヨ壓 </el-button>
     </div>
   </div>
 </template>
 <script setup lang="ts">
 import { toRefs } from 'vue'
+import type { CraftModel } from '@/api/craftModel'
 const props = defineProps<{
-  process: { product: '浜у搧鍚嶇О'; number: '111'; procedure: '宸ヨ壓鍚嶇О'; isUpdate: true }
+  craftModel: CraftModel
 }>()
-const { process } = toRefs(props)
+const { craftModel } = toRefs(props)
+
+const emit = defineEmits<{
+  update: [craftModel: CraftModel]
+  detail: [craftModel: CraftModel]
+}>()
+
+function onDetailClick() {
+  emit('detail', craftModel)
+}
+function onUpdateClick() {
+  emit('update', craftModel)
+}
 </script>
 
 <style scoped lang="scss">
diff --git a/src/views/dashboard/components/TaskControlModal.vue b/src/views/dashboard/components/TaskControlModal.vue
index 0677d58..c51b154 100644
--- a/src/views/dashboard/components/TaskControlModal.vue
+++ b/src/views/dashboard/components/TaskControlModal.vue
@@ -335,7 +335,7 @@
   send('寮�濮嬬敓浜�')
 
   sendProcessParams({
-    procedureId: task.value.Procedure.ID
+    procedureId: task!.value!.Procedure.ID
   })
     .then(
       (res) => {
diff --git a/src/views/dashboard/index.vue b/src/views/dashboard/index.vue
index 51c7ff8..815948f 100644
--- a/src/views/dashboard/index.vue
+++ b/src/views/dashboard/index.vue
@@ -15,7 +15,12 @@
           <ProcessingInfo style="margin-top: 6px" :task="activeTask"></ProcessingInfo>
         </el-tab-pane>
         <el-tab-pane label="宸ヨ壓淇℃伅" name="宸ヨ壓淇℃伅">
-          <ProcessInfo :process="process"></ProcessInfo>
+          <ProcessInfo
+            v-for="item in craftModelStore.craftModelList"
+            :key="item.ID"
+            :craft-model="item"
+            @detail="openCraftModelDetailModal"
+          ></ProcessInfo>
         </el-tab-pane>
         <el-tab-pane label="鐗╂枡娓呭崟" name="鐗╂枡娓呭崟">
           <InputMaterialsList></InputMaterialsList>
@@ -51,12 +56,12 @@
       <BigButton class="btn" bg-color="red">绾㈢伅鍛煎彨</BigButton>
     </template>
   </DashboardLayout>
+  <CraftDetailModal v-model="showCraftModelDetail" @close="showCraftModelDetail = false"></CraftDetailModal>
 </template>
 <script setup lang="ts">
-import { computed, ref, watch, onUnmounted } from 'vue'
+import { computed, ref, watch } from 'vue'
 import ChannelCollapse from '@/views/dashboard/components/ChannelCollapse.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'
@@ -77,6 +82,8 @@
 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'
 
 defineOptions({
   name: 'DashboardView'
@@ -99,12 +106,7 @@
     amount: '10'
   } as unknown as Order
 })
-const device = computed(() => {
-  return {
-    plcStatus: 1,
-    plcNotConnected: false
-  } as unknown as PLCResponse
-})
+
 const taskTabsList = [
   {
     label: '鏈畬鎴�',
@@ -130,16 +132,31 @@
   tasksStore.getChannels(tab.value)
 }
 
+/**
+ * 瀹屾垚浠诲姟鎴栬�呬笅鍙戝弬鏁版垚鍔熷悗瑕佸埛鏂伴�氶亾鏁版嵁
+ * @param task
+ */
 function reloadAllData(task: Task) {
   tasksStore.reload(task.Channel)
 }
-
-const plcStore = usePLCStore()
 // 鍚姩plc 杞
+const plcStore = usePLCStore()
 plcStore.startPollingPLC()
-
+// 鍚姩 璁惧 杞
 const deviceStore = useDevicesStore()
 deviceStore.startPollingDevice()
+
+// 鍒囨崲浠诲姟鏃惰幏鍙栧搴斾换鍔$殑宸ヨ壓妯″瀷淇℃伅
+const craftModelStore = useCraftModelStore()
+watch(activeTask, () => {
+  craftModelStore.getCraftModelList()
+})
+
+const showCraftModelDetail = ref(false)
+function openCraftModelDetailModal() {
+  console.log(1)
+  showCraftModelDetail.value = true
+}
 </script>
 
 <style scoped lang="scss">

--
Gitblit v1.8.0