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