From b265f78311f5bb0769f32a31f7006cc787bd2f53 Mon Sep 17 00:00:00 2001
From: yangfeng <wanwan926_4@163.com>
Date: 星期三, 27 三月 2024 19:00:09 +0800
Subject: [PATCH] 质检相关报工页面新增、接口联调

---
 src/views/dashboard/components/ReportProductionModal.vue  |   14 ++
 src/views/dashboard/components/TaskControl.vue            |  112 ++++++++++++++++++
 vite.config.ts                                            |    2 
 src/api/task.ts                                           |    1 
 src/views/dashboard/components/ReportProductionModal1.vue |  126 +++++++++++++++++++++
 src/api/index.ts                                          |   50 ++++++++
 6 files changed, 299 insertions(+), 6 deletions(-)

diff --git a/src/api/index.ts b/src/api/index.ts
index 03bbe0e..97242ac 100644
--- a/src/api/index.ts
+++ b/src/api/index.ts
@@ -290,3 +290,53 @@
     data: params
   })
 }
+
+export interface qualityParams {
+  reportAmount: number
+  workOrderProcedureID: number
+  workerID: string
+  workerName: string
+}
+/**
+ * 鐪嬫澘璐ㄦ
+ */
+export function bulletinQualityInspection(params: qualityParams) {
+  return request({
+    url: '/api-s/v1/reportWork/bulletinQualityInspection',
+    method: 'post',
+    data: params
+  })
+}
+
+export interface getQualityParams {
+  workerId: string
+  procedureId: string
+}
+/**
+ * 鐪嬫澘鑾峰彇璐ㄦ淇℃伅
+ */
+export function getQualityInspection(params: getQualityParams) {
+  return request({
+    url: '/api-s/v1/reportWork/bulletinGetQualityInspection',
+    method: 'post',
+    data: params
+  })
+}
+
+export interface bulletinReportParams {
+  reportAmount: number
+  workOrderProcedureID: number
+  workerID: string
+  workerName: string
+  ids: number[]
+}
+/**
+ * 鐪嬫澘鎶ュ伐
+ */
+export function bulletinReport(params: bulletinReportParams) {
+  return request({
+    url: '/api-s/v1/reportWork/bulletinReport',
+    method: 'post',
+    data: params
+  })
+}
diff --git a/src/api/task.ts b/src/api/task.ts
index ca0ee32..a475293 100644
--- a/src/api/task.ts
+++ b/src/api/task.ts
@@ -73,6 +73,7 @@
   CurrentProcedureIndex: number
   CanStarted: boolean
   ProcedureModel: ProcedureModel
+  ShowCheck: boolean
 }
 export interface Material {
   materialId: string
diff --git a/src/views/dashboard/components/ReportProductionModal.vue b/src/views/dashboard/components/ReportProductionModal.vue
index ec61c1b..254cea5 100644
--- a/src/views/dashboard/components/ReportProductionModal.vue
+++ b/src/views/dashboard/components/ReportProductionModal.vue
@@ -1,8 +1,9 @@
 <template>
   <div class="report-production-modal">
     <BaseModal v-model="modelData" :wider="true" @close="closeModal">
-      <template #title> 鐢熶骇鎶ュ伐 </template>
+      <template #title> {{ modelTitle }} </template>
       <div class="report-content">
+        <div v-if="modelTitle == '鎻愪氦璐ㄦ'" class="r-c-title">鏁伴噺锛�</div>
         <div class="numbers">{{ inputNumber }}</div>
         <div class="buttons">
           <BigButton
@@ -24,8 +25,9 @@
 import { useVModel } from '@vueuse/core'
 import BigButton from './BigButton.vue'
 import { ref, watch } from 'vue'
-const props = withDefaults(defineProps<{ modelValue: boolean; amount?: number }>(), {
+const props = withDefaults(defineProps<{ modelValue: boolean; modelTitle: string; amount?: number }>(), {
   modelValue: false,
+  modelTitle: '',
   amount: 0
 })
 const emit = defineEmits<{
@@ -82,6 +84,14 @@
 .report-content {
   padding: 60px 0 0 230px;
   height: 520px;
+  position: relative;
+  .r-c-title {
+    position: absolute;
+    top: 70px;
+    left: 110px;
+    font-size: 26px;
+    color: #fff;
+  }
 }
 .numbers {
   height: 80px;
diff --git a/src/views/dashboard/components/ReportProductionModal1.vue b/src/views/dashboard/components/ReportProductionModal1.vue
new file mode 100644
index 0000000..114ed05
--- /dev/null
+++ b/src/views/dashboard/components/ReportProductionModal1.vue
@@ -0,0 +1,126 @@
+<template>
+  <div class="report-production-modal">
+    <BaseModal v-model="modelData" :wider="true" @close="closeModal">
+      <template #title> {{ modelTitle }} </template>
+      <div class="report-content">
+        <div class="r-c-top">
+          <div class="t-common">
+            鍚堟牸锛�<span style="color: #00ff00">{{ passAmount }}</span>
+          </div>
+          <div class="t-common">
+            杩斿伐锛�<span style="color: #ff9900">{{ reworkAmount }}</span>
+          </div>
+          <div class="t-common">
+            鎶ュ簾锛�<span style="color: #ff0000">{{ scrappedAmount }}</span>
+          </div>
+        </div>
+        <div class="r-c-middle">
+          <div>褰撳墠鍙姤宸ユ暟閲�</div>
+          <div>{{ passAmount }}</div>
+        </div>
+        <div class="r-c-bottom">
+          <BigButton class="btn" :bg-color="'#f44336'" :color="'#ffffff'" @click="closeModal">{{ '鍙栨秷' }}</BigButton>
+          <BigButton class="btn" :bg-color="'#2196F3'" :color="'#ffffff'" @click="clickBtn">{{ '鎶ュ伐' }}</BigButton>
+        </div>
+      </div>
+    </BaseModal>
+  </div>
+</template>
+
+<script setup lang="ts">
+import { useVModel } from '@vueuse/core'
+import BigButton from './BigButton.vue'
+import { ref, watch } from 'vue'
+const props = withDefaults(
+  defineProps<{
+    modelValue: boolean
+    modelTitle: string
+    amount?: number
+    passAmount: number
+    reworkAmount: number
+    scrappedAmount: number
+  }>(),
+  {
+    modelValue: false,
+    modelTitle: '',
+    amount: 0,
+    passAmount: 0, // 鍚堟牸
+    reworkAmount: 0, // 杩斿伐
+    scrappedAmount: 0 // 鎶ュ簾
+  }
+)
+const emit = defineEmits<{
+  'update:modelValue': [show: boolean]
+  submit: [inputNumber: number]
+  close: []
+}>()
+const modelData = useVModel(props, 'modelValue', emit)
+function closeModal() {
+  emit('close')
+}
+
+const inputNumber = ref('')
+function clickBtn() {
+  emit('submit', +inputNumber.value)
+}
+watch(modelData, () => {
+  if (modelData.value) {
+    inputNumber.value = (props.amount ?? '').toString()
+  }
+})
+</script>
+
+<style scoped lang="scss">
+.report-content {
+  padding: 60px 80px 0;
+  height: 520px;
+  position: relative;
+  .r-c-top {
+    display: flex;
+    font-size: 24px;
+    .t-common {
+      width: 33%;
+      color: #fff;
+      margin-left: 30px;
+    }
+  }
+  .r-c-middle {
+    font-size: 30px;
+    font-weight: 700;
+    color: #fff;
+    text-align: center;
+    margin-top: 120px;
+  }
+  .r-c-bottom {
+    position: absolute;
+    bottom: -20px;
+    right: 60px;
+    .btn {
+      margin-right: 20px;
+      // margin-bottom: 20px;
+      width: 120px;
+      height: 60px;
+    }
+  }
+}
+.numbers {
+  height: 80px;
+  border: 1px solid #fff;
+  padding: 0 6px;
+  width: 400px;
+  margin-bottom: 20px;
+  line-height: 80px;
+  text-align: right;
+  font-size: 40px;
+  color: #fff;
+}
+.buttons {
+  width: 420px;
+}
+.btn {
+  margin-right: 20px;
+  margin-bottom: 20px;
+  width: 120px;
+  height: 70px;
+}
+</style>
diff --git a/src/views/dashboard/components/TaskControl.vue b/src/views/dashboard/components/TaskControl.vue
index ea82cb1..c9f5cb5 100644
--- a/src/views/dashboard/components/TaskControl.vue
+++ b/src/views/dashboard/components/TaskControl.vue
@@ -22,7 +22,20 @@
       </BigButton>
       <template v-if="task?.Procedure.Status === 2 || task?.Procedure.Status === 3">
         <BigButton class="btn" bg-color="#ff9933" :disabled="task?.Procedure.Status === 3">鎵撳嵃</BigButton>
-        <BigButton class="btn" bg-color="#00cc33" :disabled="task?.Procedure.Status === 3" @click="openReportModal">
+        <BigButton
+          v-if="task?.ShowCheck"
+          class="btn"
+          bg-color="#00cc33"
+          :disabled="task?.Procedure.Status === 3"
+          @click="openQualityModal"
+          >璐ㄦ</BigButton
+        >
+        <BigButton
+          class="btn"
+          :bg-color="task?.ShowCheck ? '#0066ff' : '#00cc33'"
+          :disabled="task?.Procedure.Status === 3"
+          @click="openReportModal"
+        >
           鎶ュ伐
         </BigButton>
         <el-popconfirm
@@ -47,10 +60,21 @@
   <TaskControlModal v-model="showTaskControlModal" :task="task" @produce-start="onProduceStart"></TaskControlModal>
   <ReportProductionModal
     v-model="showReportModal"
+    :model-title="modelTitle"
     :amount="plcInfo?.finishNumber ?? 0"
     @close="showReportModal = false"
     @submit="onReportProduction"
   ></ReportProductionModal>
+  <ReportProductionModal1
+    v-model="showReportModal1"
+    :model-title="modelTitle"
+    :amount="plcInfo?.finishNumber ?? 0"
+    :pass-amount="passAmount"
+    :rework-amount="reworkAmount"
+    :scrapped-amount="scrappedAmount"
+    @close="showReportModal1 = false"
+    @submit="onReportCheck"
+  ></ReportProductionModal1>
 </template>
 <script setup lang="ts">
 import type { Task, Worker } from '@/api/task'
@@ -59,11 +83,14 @@
 import { useDateFormat } from '@vueuse/core'
 import TaskControlModal from '@/views/dashboard/components/TaskControlModal.vue'
 import { CircleCloseFilled } from '@element-plus/icons-vue'
-import { apiReportWork, procedureUpdate } from '@/api'
+import { apiReportWork, procedureUpdate, bulletinReport, bulletinQualityInspection, getQualityInspection } from '@/api'
 import { ElMessage } from 'element-plus'
 import ReportProductionModal from '@/views/dashboard/components/ReportProductionModal.vue'
+import ReportProductionModal1 from '@/views/dashboard/components/ReportProductionModal1.vue'
 import { usePLCStore } from '@/stores/plc'
 import { storeToRefs } from 'pinia'
+import { log } from 'console'
+import { isDoStatement } from 'typescript'
 
 const props = defineProps<{
   task?: Task
@@ -76,6 +103,10 @@
 }>()
 
 const showTaskControlModal = ref(false)
+const modelTitle = ref('')
+const passAmount = ref(0)
+const reworkAmount = ref(0)
+const scrappedAmount = ref(0)
 
 /**
  * 寮�濮嬬敓浜�
@@ -151,6 +182,9 @@
 const { plcInfo } = storeToRefs(plcStore)
 // 鎶ュ伐
 const showReportModal = ref(false)
+// 鎶ュ伐
+const showReportModal1 = ref(false)
+const reprotIds = ref([])
 function openReportModal() {
   // 鏈変汉鍛樻墠鍙互鎶ュ伐
   if (!workers.value || workers.value.length == 0) {
@@ -179,6 +213,38 @@
   }
 
   if (workers.value[0].workerId) {
+    modelTitle.value = '鐢熶骇鎶ュ伐'
+    if (task?.value?.ShowCheck) {
+      getQualityInspection({
+        procedureId: task.value?.Procedure.ID,
+        workerId: workers.value[0].workerId
+      }).then((res) => {
+        console.log(res, '999999')
+        passAmount.value = res.data.passAmount
+        reworkAmount.value = res.data.reworkAmount
+        scrappedAmount.value = res.data.scrappedAmount
+        reprotIds.value = res.data.ids
+        showReportModal1.value = true
+      })
+    } else {
+      showReportModal.value = true
+    }
+  }
+}
+
+// 璐ㄦ
+function openQualityModal() {
+  // 鏈変汉鍛樻墠鍙互鎶ュ伐
+  if (!workers.value || workers.value.length == 0) {
+    ElMessage({
+      message: '娌℃湁浜哄憳淇℃伅涓嶅厑璁歌川妫�锛�',
+      type: 'error',
+      duration: 3000
+    })
+    return true
+  }
+  if (workers.value[0].workerId) {
+    modelTitle.value = '鎻愪氦璐ㄦ'
     showReportModal.value = true
   }
 }
@@ -193,7 +259,9 @@
   }
   // 鏈変汉鍛樻墠鍙互鎶ュ伐
   if (workers.value[0].workerId) {
-    apiReportWork({
+    let requestUrl = task?.value.ShowCheck ? bulletinQualityInspection : apiReportWork
+    let tipStr = task?.value.ShowCheck ? '璐ㄦ' : '鎶ュ伐'
+    requestUrl({
       workOrderProcedureID: Number(task.value?.Procedure.ID),
       reportAmount: amount,
       workerID: workers.value[0].workerId,
@@ -202,6 +270,44 @@
       .then((res) => {
         if (res.code === 200) {
           ElMessage({
+            message: `${tipStr}鎴愬姛`,
+            type: 'success',
+            duration: 2000
+          })
+          showReportModal.value = false
+        } else {
+          ElMessage({
+            message: `${tipStr}澶辫触`,
+            type: 'error',
+            duration: 3000
+          })
+        }
+      })
+      .catch((err) => {
+        console.error(err)
+      })
+  }
+}
+/**
+ * 璐ㄦ鍚庣殑涓婃姤鍔犲伐鏁�
+ * @param amount 鍔犲伐鏁�
+ */
+function onReportCheck(amount: number) {
+  if (!task?.value) {
+    return
+  }
+  // 鏈変汉鍛樻墠鍙互鎶ュ伐
+  if (workers.value[0].workerId) {
+    bulletinReport({
+      workOrderProcedureID: Number(task.value?.Procedure.ID),
+      reportAmount: amount,
+      workerID: workers.value[0].workerId,
+      workerName: workers.value[0].workerName,
+      ids: reprotIds
+    })
+      .then((res) => {
+        if (res.code === 200) {
+          ElMessage({
             message: '鎶ュ伐鎴愬姛',
             type: 'success',
             duration: 2000
diff --git a/vite.config.ts b/vite.config.ts
index d1c84cd..8bfc515 100644
--- a/vite.config.ts
+++ b/vite.config.ts
@@ -18,7 +18,7 @@
     proxy: {
       '/api-s/': {
         // http://192.168.20.119:8003 http://192.168.20.25:7010
-        target: 'http://192.168.20.120:9081',
+        target: 'http://192.168.20.119:9081',
         ws: true,
         changeOrigin: true
       },

--
Gitblit v1.8.0