Files
kunshan-bzfm-mes-vue/src/views/touchScreen/report/index.vue
2024-12-16 14:48:16 +08:00

345 lines
13 KiB
Vue

<template>
<v-container fluid class="bg-indigo-darken-4">
<v-row>
<v-col cols="8">
<v-card color="blue-darken-4" class="left-content">
<v-tabs v-model="tab" bg-color="primary">
<v-tab value="报工">报工</v-tab>
<v-tab value="历史报工记录">历史报工记录</v-tab>
</v-tabs>
<v-card-text>
<v-fade-transition>
<v-tabs-window v-model="tab">
<v-tabs-window-item value="报工">
<el-card v-if="formData.workorder" class="mt-4">
<v-text-field type="number" :label="processId === 10 ? '报工数' : '完成数'"
v-model="formData.finishNum"></v-text-field>
<v-text-field type="number" label="不良数"
v-model="formData.badNum"></v-text-field>
<v-text-field v-if="processId === 10" label="炉号"
v-model="formData.stoveCode"></v-text-field>
<v-text-field v-if="processId === 10" label="进料单"
v-model="formData.feedOrder"></v-text-field>
<v-text-field v-if="processId === 90" label="客户定单"
v-model="formData.customerOrder"></v-text-field>
<v-text-field label="作业员" v-model="formData.worker"></v-text-field>
<div class="d-flex justify-end">
<v-btn class="bg-blue-darken-1" @click="submit">{{ getButtonName()
}}</v-btn>
</div>
</el-card>
</v-tabs-window-item>
<v-tabs-window-item value="历史报工记录">
<el-card v-if="formData.workorder" class="mt-4">
<v-list lines="two" class="bg-transparent">
<v-list-item v-for="(item, index) in reportWorkerOrderList" :key="index"
:title="item.processName">
<v-list-item-subtitle class="d-flex justify-space-between">
<span class="text-subtitle-1">
{{
`完成数:${item.finishNum ?? 0} 不良数:${item.badNum ?? 0}`
}}
</span>
<span>{{ `作业员:${item.worker} 提交时间:${item.jobDate}` }}</span>
</v-list-item-subtitle>
</v-list-item>
</v-list>
</el-card>
</v-tabs-window-item>
</v-tabs-window>
</v-fade-transition>
</v-card-text>
</v-card>
</v-col>
<v-col cols="4">
<v-card color="blue-darken-4" class="right-content">
<v-select variant="solo-filled" v-model="processId" label="工序选择" :items="processOptions">
</v-select>
<scanInput @scanInput="handleScanInput"></scanInput>
<v-fade-transition>
<el-card v-if="formData.workorder" class="mt-4">
<el-form :model="formData" label-width="auto" label-suffix=":">
<el-form-item label="工单号">
<el-text class="formItem text-big">{{ formData.workorder }}</el-text>
</el-form-item>
<el-form-item v-if="processId !== 10" label="炉号">
<el-text class="formItem">{{ formData.stoveCode }}</el-text>
</el-form-item>
<el-form-item label="主体型号">
<el-text class="formItem">{{ formData.productionCode }}</el-text>
</el-form-item>
<el-form-item label="主体品名">
<el-text class="formItem">{{ formData.productionName }}</el-text>
</el-form-item>
<el-form-item label="计划数量">
<el-text class="formItem">{{ formData.planNum }}</el-text>
</el-form-item>
<el-form-item label="主体图号">
<el-text class="formItem">{{ formData.drawingCode }}</el-text>
</el-form-item>
<el-form-item label="版本号">
<el-text class="formItem">{{ formData.version }}</el-text>
</el-form-item>
<el-form-item label="材料编号">
<el-text class="formItem">{{ formData.materialCode }}</el-text>
</el-form-item>
<el-form-item label="材料型号">
<el-text class="formItem">{{ formData.materialName }}</el-text>
</el-form-item>
<el-form-item label="材质">
<el-text class="formItem">{{ formData.materialtextureCode }}</el-text>
</el-form-item>
<el-form-item label="工单日期">
<el-text class="formItem">{{ formData.workorderDate }}</el-text>
</el-form-item>
<el-form-item label="指示日期">
<el-text class="formItem">{{ formData.instructionDate }}</el-text>
</el-form-item>
</el-form>
</el-card>
</v-fade-transition>
</v-card>
</v-col>
</v-row>
<!-- 反馈框 -->
<v-dialog v-model="dialog.show" width="auto">
<v-card :class="dialog.class" min-width="400" :prepend-icon="dialog.icon" :text="dialog.text"
:title="dialog.title">
<template v-slot:actions>
<v-btn class="ms-auto" text="确认" @click="dialog.show = false"></v-btn>
</template>
</v-card>
</v-dialog>
</v-container>
</template>
<script setup>
const { proxy } = getCurrentInstance()
import * as ReportApi from '@/api/reportFlow/index'
import scanInput from '../components/scanInput.vue'
const processOptions = [
{
value: 10,
title: '物料领用',
},
{
value: 20,
title: '机械加工',
},
{
value: 30,
title: '中间检查',
},
{
value: 40,
title: '手工研磨',
},
{
value: 50,
title: '机研磨',
},
{
value: 60,
title: '精研磨',
},
{
value: 70,
title: '入库检查',
},
// {
// value: 80,
// title: '出厂',
// },
{
value: 90,
title: '出货',
},
]
const tab = ref('报工')
const processId = ref(10)
function getButtonName() {
if (processId.value === 10) {
return '确认领用'
} else if (processId.value === 90) {
return '确认出货'
} else {
return '确认报工'
}
}
const dialog = reactive({
show: false,
icon: 'mdi-alert',
class: 'bg-amber',
title: '提示',
text: '这是一段反馈'
})
const formData = ref({
id: null,
workorder: '',
instructionDate: '',
workorderDate: '',
planNum: 0,
finishNum: 0,
// productionName: '产品名称',
// productionCode: '产品编码',
// unit: '单位',
// planNum: '计划数量',
// sort: '排序',
// workorderDate: '工单日期',
// priority: '优先级',
// beat: '节拍',
// status: '状态',
// instructionDate: '指导日期',
// materialName: '材料名称',
// materialtextureCode: '材质编码',
// materialCode: '材料编码',
// drawingCode: '图纸编码',
// version: '版本',
// stoveCode: '炉子编码',
// workshopCode: '车间编码',
// routeCode: '路线编码',
// groupCode: '组编码'
})
const reportWorkerOrderList = ref([])
function handleScanInput(val) {
getFormData(val)
}
function getFormData(workorder) {
const params = { workorder, processId: processId.value }
ReportApi.GetWorkOrderDetail(params).then(res => {
if (res.code == 200) {
if (res.data) {
formData.value = res.data
ReportApi.GetProcessReportWorkDetail(params).then(res2 => {
if (!res2.data) {
formData.value.finishNum = 0;
formData.value.badNum = 0;
formData.value.worker = '';
}
else {
formData.value.finishNum = res2.data.finishNum ?? 0;
formData.value.badNum = res2.data.badNum ?? 0;
formData.value.worker = res2.data.worker;
if (formData.value.finishNum > 0) {
dialog.show = true
dialog.class = 'bg-yellow'
dialog.title = '提示'
dialog.text = '工单此工序已报工过'
}
}
})
ReportApi.GetWorkOrderReportWorkList(params).then(res => {
if (res.code == 200) {
reportWorkerOrderList.value = res.data
}
})
} else {
dialog.show = true
dialog.class = 'bg-amber'
dialog.title = '工单提示'
dialog.text = '工单号不正确,没有找到该工单'
}
}
})
}
function submit() {
proxy.$confirm('确定提交数据吗?').then(() => {
let params = {
workorder: formData.value.workorder,
processId: processId.value,
// 参数填写
bad_num: formData.value.badNum,
finish_num: formData.value.finishNum,
feed_order: formData.value.feedOrder,
stove_code: formData.value.stoveCode,
customer_order: formData.value.customerOrder,
process_operator: formData.value.worker
};
// 领料
if (processId.value === 10) {
ReportApi.FeedProcessReportwork(params).then(res => {
if (res.code == 200) {
dialog.show = true
dialog.class = 'bg-green'
dialog.title = '成功提示'
dialog.text = '领料成功'
}
})
}
// 出货
else if (processId.value === 90) {
ReportApi.ShipmentProcessReportwork(params).then(res => {
if (res.code == 200) {
dialog.show = true
dialog.class = 'bg-green'
dialog.title = '成功提示'
dialog.text = '出货成功'
}
}
)
}
// 报工
else {
ReportApi.ProcessReportWork(params).then(res => {
if (res.code == 200) {
dialog.show = true
dialog.class = 'bg-green'
dialog.title = '成功提示'
dialog.text = '报工成功'
}
}
)
}
}).catch(err => {
})
}
</script>
<style scoped>
.label {
color: #E6F4F1;
margin-right: 10px;
}
.text-big {
font-size: 24px;
font-weight: bold;
}
.flex {
display: flex;
}
.justify-end {
justify-content: flex-end;
}
:deep(.el-form-item__label) {
color: #000000;
}
.formItem {
color: #000000;
}
.form-input {
width: 100%;
}
.left-content {
min-height: 88vh;
padding: 20px;
}
.right-content {
min-height: 88vh;
padding: 20px;
}
</style>