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