首检完成

This commit is contained in:
qianhao.xu
2024-01-26 16:58:40 +08:00
parent a4942c55c9
commit f5487516cd
7 changed files with 515 additions and 70 deletions

View File

@@ -12,6 +12,15 @@ export function getWorkoderList(query) {
})
}
// 导出函数,获取工单列表
export function getWorkoderList_piliang(query) {
// 发送get请求获取工单列表
return request({
url: '/mes/pro/workorder_v2/getWorkoderList_piliang',
method: 'get',
params: query,
})
}
// 导出函数,发起在线请求
export function startOnline(id) {

View File

@@ -1,7 +1,9 @@
import request from '@/utils/request'
import { downFile } from '@/utils/request'
// 导出函数GetcheckItemTable用于获取检查项表格
export function GetcheckItemTable(query) {
// 返回请求,请求地址为/mes/qc/FQC/getcheckItemTable请求方法为get参数为query
return request({
url: '/mes/qc/FQC/getcheckItemTable',
method: 'get',
@@ -9,3 +11,44 @@ export function GetcheckItemTable(query) {
})
}
// 导出函数getcurrent_workorder用于获取当前工单
export function getcurrent_workorder(query) {
// 返回请求,请求地址为/mes/qc/FQC/getcurrentWorkorder请求方法为get参数为query
return request({
url: '/mes/qc/FQC/getcurrentWorkorder',
method: 'get',
params: query,
})
}
// 导出函数get_next_current_workorder用于获取下一个当前工单
export function get_next_current_workorder(query) {
// 返回请求,请求地址为/mes/qc/FQC/getcurrentWorkorder_next请求方法为get参数为query
return request({
url: '/mes/qc/FQC/getcurrentWorkorder_next',
method: 'get',
params: query,
})
}
export function get_previous_current_workorder(query) {
// 返回请求,请求地址为/mes/qc/FQC/getcurrentWorkorder_next请求方法为get参数为query
return request({
url: '/mes/qc/FQC/getcurrentWorkorder_previous',
method: 'get',
params: query,
})
}

View File

@@ -9,7 +9,7 @@ NProgress.configure({
showSpinner: false
})
const whiteList = ['/login', '/auth-redirect', '/bind', '/register', '/demo',"/firstFQC"] //白名单
const whiteList = ['/login', '/auth-redirect', '/bind', '/register', '/demo',"/firstFQC","/thirtyFQC"] //白名单
router.beforeEach((to, from, next) => {
NProgress.start()

View File

@@ -68,9 +68,7 @@ service.interceptors.response.use(
type: 'error',
})
return Promise.reject(res.data)
} else if (code == 210) {
this.$notify.error('新增失败null,联系技术人员')
} else {
} else {
//返回标准 code/msg/data字段
return res.data
}

View File

@@ -0,0 +1,160 @@
<template>
<div class="app-container">
<div>
<el-form :model="search" inline>
<el-form-item label="年">
<el-input v-model="search.year" placeholder="输入年份"></el-input>
</el-form-item>
<el-form-item label="周">
<el-input-number v-model="search.week" :min="1" :max="100" label="输入周"></el-input-number>
</el-form-item>
<el-form-item label="日">
<el-select v-model="search.date" placeholder="请选择日">
<el-option label="周一" value="1"> </el-option>
<el-option label="周二" value="2"> </el-option>
<el-option label="周三" value="3"> </el-option>
<el-option label="周四" value="4"> </el-option>
<el-option label="周五" value="5"> </el-option>
<el-option label="周六" value="6"> </el-option>
<el-option label="周日" value="7"> </el-option>
</el-select>
</el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleClick">搜索</el-button>
</el-form>
</div>
<vxe-table
border
resizable
show-overflow
ref="xTable"
v-loading="loading_1"
:cell-style="rowClassName"
height="800"
:row-config="{ isHover: true, useKey: true }"
:column-config="{ useKey: true }"
:data="workorder_table_data"
>
<vxe-column type="seq" width="60"></vxe-column>
<vxe-column field="clientWorkorder" title="工单号" width="130" type="html"></vxe-column>
<vxe-column field="blankNumber" title="毛坯号" type="html"></vxe-column>
<vxe-column field="finishedPartNumber" title="成品零件号" type="html"></vxe-column>
<vxe-column field="productDescription" title="产品描述" type="html"></vxe-column>
<vxe-column field="colour" title="颜色" type="html"></vxe-column>
<vxe-column field="specifications" title="规格" type="html"></vxe-column>
<vxe-column field="codeNumber" title="编码号" type="html"></vxe-column>
<vxe-column field="vehicleNumber" title="车数" type="html"></vxe-column>
<vxe-column field="hangNumber" title="挂具摆放数" type="html"></vxe-column>
<vxe-column field="previousNumber" title="上件数" type="html"></vxe-column>
<vxe-column field="cylinderNumber" title="双组号缸号" type="html"></vxe-column>
<vxe-column field="remark1" title="备注1" type="html"></vxe-column>
<vxe-column field="remark2" title="备注2" type="html"></vxe-column>
</vxe-table>
<pagination
v-show="pagination.total > 0"
:total="pagination.total"
:page.sync="pagination.pageNum"
:limit.sync="pagination.pageSize"
@pagination="getList"
/>
</div>
</template>
<script>
import { getWorkoderList_piliang, startOnline, cancelOnline } from '@/api/productManagement/workorder_online.js'
export default {
name: 'workorder_online',
data() {
return {
search: {
year: new Date().getFullYear(),
week: null,
date: null,
},
pagination: {
total: 0,
pageNum: 1,
pageSize: 10,
},
// 新增修改工单模态框
dialog: {
title: '',
open: false,
form: {},
},
loading_1: true,
workorder_table_data: [],
}
},
mounted() {
this.getList()
},
methods: {
handleClick() {
this.getList()
},
//todo 获取生产工单列表
getList() {
const query = { ...this.search, ...this.pagination }
if (query.week == null || query.week == undefined || query.week == '') query.week = -1
if (query.year == null || query.year == undefined || query.year == '') query.year = -1
getWorkoderList_piliang(query).then((res) => {
if (res.code == 200) {
this.loading_1 = false
this.workorder_table_data = res.data.item1
this.pagination.total = res.data.item2
}
})
},
//todo 开始上线
updateitem(row) {
startOnline(row.id).then((res) => {
if (res.code == 200) {
this.$message.success('上线成功')
this.getList()
}
})
},
//todo 取消上线
cancelitem(row) {
this.$modal
.confirm('是否确认取消生产工单名称为' + row.productDescription + '"的数据项?')
.then(function () {
return cancelOnline(row.id)
})
.then((res) => {
if (res.code == 200) {
this.$message.success('取消成功')
this.getList()
}
})
},
//todo 更改单元格格式
rowClassName(item) {
if (item.row.status > 0) {
return {
backgroundColor: '#FFFF00',
}
}
return null
},
},
}
</script>
<style lang="scss" scoped>
.el-dropdown-link {
cursor: pointer;
color: #93ff40;
}
.el-icon-arrow-down {
font-size: 0.5rem;
}
.sortable-ghost {
opacity: 0.4;
background-color: #409eff;
}
</style>

View File

@@ -141,7 +141,7 @@
/>
<!-- 添加或修改生产工单对话框 -->
<el-dialog :title="dialog.title" :visible.sync="dialog.open" width="63%">
<el-form :model="workorderItem" :rules="rules" ref="workorder">
<el-form :model="workorderItem" ref="workorder">
<el-row>
<el-col :span="8"
><el-form-item label="毛坯号" prop="blankNumber">
@@ -176,23 +176,23 @@
></el-col>
<el-col :span="8"
><el-form-item label="挂具摆放数" prop="hangNumber">
<el-input v-model="workorderItem.hangNumber" placeholder="毛坯号"></el-input> </el-form-item
<el-input v-model="workorderItem.hangNumber" placeholder="挂具摆放数"></el-input> </el-form-item
></el-col>
<el-col :span="8"
><el-form-item label="上件数" prop="previousNumber">
<el-input v-model="workorderItem.previousNumber" placeholder="产品描述"></el-input> </el-form-item
<el-input v-model="workorderItem.previousNumber" placeholder="上件数"></el-input> </el-form-item
></el-col>
</el-row>
<el-row>
<el-col :span="8"
><el-form-item label="双组号缸号" prop="cylinderNumber">
<el-input v-model="workorderItem.cylinderNumber" placeholder="毛坯号"></el-input> </el-form-item
<el-input v-model="workorderItem.cylinderNumber" placeholder="双组号缸号"></el-input> </el-form-item
></el-col>
<el-col :span="8"
><el-form-item label="备注1" prop="remark1"> <el-input v-model="workorderItem.remark1" placeholder="毛坯号"></el-input> </el-form-item
><el-form-item label="备注1" prop="remark1"> <el-input v-model="workorderItem.remark1" placeholder="备注1"></el-input> </el-form-item
></el-col>
<el-col :span="8"
><el-form-item label="备注2" prop="remark2"> <el-input v-model="workorderItem.remark2" placeholder="产品描述"></el-input> </el-form-item
><el-form-item label="备注2" prop="remark2"> <el-input v-model="workorderItem.remark2" placeholder="备注2"></el-input> </el-form-item
></el-col>
</el-row>
<el-row>

View File

@@ -8,7 +8,7 @@
<div class="title_Line">打磨</div>
<div class="title_Line">报废</div>
</div>
<div style="height: 250px">
<div style="height: 400px">
<div class="title_Line">抛光</div>
<div class="title_Line">打磨</div>
<div class="title_Line">报废</div>
@@ -83,38 +83,60 @@
</div>
</div>
<div class="f">
<div class="f_item">
<div class="f_name">工单id:{{ ProductSituationForm.workorderid }}</div>
</div>
<div class="f_item">
<div class="f_name">产品名称{{ ProductSituationForm.productName }}</div>
</div>
<div class="f_item">
<div class="f_name">左右:{{ ProductSituationForm.direction }}</div>
</div>
<div class="f_item">
<div class="f_name">颜色:{{ ProductSituationForm.color }}</div>
</div>
<el-card class="box-card dataStatistics">
<div slot="header" class="clearfix">
<span class="title">工单号:{{ CurrentWorkorder.clientWorkorder }}</span>
<el-button-group style="float: right">
<el-button type="primary" size="mini" @click="getNext_current_workorder"
>下一个工单<i class="el-icon-arrow-right el-icon--right"></i
></el-button>
<el-button type="primary" icon="el-icon-arrow-left" size="mini" @click="getPrevious_current_workorder">上一个工单</el-button>
</el-button-group>
</div>
<el-button type="danger" size="medium" @click="getNext_current_workorder">本工单完成</el-button>
<table>
<tr>
<td>产品描述</td>
<td>{{ CurrentWorkorder.productDescription }}</td>
<td>零件号</td>
<td>{{ CurrentWorkorder.finishedPartNumber }}</td>
</tr>
<div class="f_item">
<div class="f_name">班组: {{ ProductSituationForm.team }}</div>
</div>
<tr>
<td>规格</td>
<td>{{ CurrentWorkorder.specifications }}</td>
<td>颜色</td>
<td>{{ CurrentWorkorder.colour }}</td>
</tr>
<div class="f_item">
<div class="f_name">投入数:{{ ProductSituationForm.inputNum }}</div>
</div>
<div class="f_item">
<div class="f_name">一次合格数:{{ ProductSituationForm.inputNum }}</div>
</div>
<div class="f_item">
<div class="f_name">一次合格率:{{ ProductSituationForm.inputNum }}</div>
</div>
<div class="f_item">
<div class="f_name">打磨数:{{ ProductSituationForm.inputNum }}</div>
</div>
<div class="f_item">
<div class="f_name">报废数:{{ ProductSituationForm.inputNum }}</div>
</div>
<tr>
<td>班组</td>
<td>
<el-switch v-model="CurrentWorkorder.team" active-text="B" inactive-text="A"> {{ CurrentWorkorder.team }}</el-switch>
</td>
<td>投入数</td>
<td>{{ CurrentWorkorder.previousNumber }}</td>
</tr>
<tr>
<td>一次合格数</td>
<td>{{ calculate_firstPassNumber }}</td>
<td>一次合格率</td>
<td>{{ calculate_firstPassRate }}%</td>
</tr>
<tr>
<td>打磨数</td>
<td>{{ calculate_polisheNumber }}</td>
<td>报废数</td>
<td>{{ calculate_scrapNumber }}</td>
</tr>
<tr>
<td>抛光数</td>
<td>{{ calculate_defectNumber }}</td>
</tr>
</table>
</el-card>
</div>
</div>
</div>
@@ -132,7 +154,12 @@
</template>
<script>
import { GetcheckItemTable } from '@/api/qualityManagement/firstFQC.js'
import {
GetcheckItemTable,
getcurrent_workorder,
get_next_current_workorder,
get_previous_current_workorder,
} from '@/api/qualityManagement/firstFQC.js'
import { mapGetters } from 'vuex'
export default {
name: 'firstFQC',
@@ -144,13 +171,19 @@ export default {
program: [{ inspectionModule: '' }], // 程序
team: [{ inspectionModule: '' }], //班组
ProductSituationForm: {
workorderid: 'VW123456',
productName: 'VW12309',
direction: '左',
color: 'blue',
team: 'A',
inputNum: 7852,
CurrentWorkorder: {
clientWorkorder: '', // 客户工单
productDescription: '', // 产品描述
finishedPartNumber: 0,
specifications: 0,
colour: '',
team: '',
previousNumber: '',
firstPassNumber: 0,
firstPassRate: 0,
polisheNumber: 0,
scrapNumber: 0,
defectNumber: 0,
},
signal: null,
data: null,
@@ -164,6 +197,7 @@ export default {
}
},
watch: {
// 监听工单号
'$store.getters.counterList_v1': {
immediate: true,
deep: true,
@@ -191,11 +225,143 @@ export default {
},
},
},
computed: {
// 计算合格数
calculate_firstPassNumber() {
// 计算缺陷数
let allCount = 0
this.paint.forEach((it) => {
allCount += it.counter
})
this.device.forEach((it) => {
allCount += it.counter
})
this.blank.forEach((it) => {
allCount += it.counter
})
this.program.forEach((it) => {
allCount += it.counter
})
this.team.forEach((it) => {
allCount += it.counter
})
this.CurrentWorkorder.firstPassNumber = this.CurrentWorkorder.previousNumber - allCount
return this.CurrentWorkorder.firstPassNumber
},
// 计算合格率
calculate_firstPassRate() {
this.CurrentWorkorder.firstPassRate = ((this.CurrentWorkorder.firstPassNumber / this.CurrentWorkorder.previousNumber) * 100).toFixed(3)
return this.CurrentWorkorder.firstPassRate
},
//计算打磨数 CurrentWorkorder.polisheNumber
calculate_polisheNumber() {
let allCount = 0
this.paint.forEach((item) => {
if (parseInt(item.id / 10) % 10 === 2) {
allCount += item.counter
}
})
this.device.forEach((item) => {
if (parseInt(item.id / 10) % 10 === 2) {
allCount += item.counter
}
})
this.blank.forEach((item) => {
if (parseInt(item.id / 10) % 10 === 2) {
allCount += item.counter
}
})
this.program.forEach((item) => {
if (parseInt(item.id / 10) % 10 === 2) {
allCount += item.counter
}
})
this.team.forEach((item) => {
if (parseInt(item.id / 10) % 10 === 2) {
allCount += item.counter
}
})
this.CurrentWorkorder.polisheNumber = allCount
return this.CurrentWorkorder.polisheNumber
},
//计算报废数 CurrentWorkorder.scrapNumber
calculate_scrapNumber() {
let allCount = 0
this.paint.forEach((item) => {
if (parseInt(item.id / 10) % 10 === 3) {
allCount += item.counter
}
})
this.device.forEach((item) => {
if (parseInt(item.id / 10) % 10 === 3) {
allCount += item.counter
}
})
this.blank.forEach((item) => {
if (parseInt(item.id / 10) % 10 === 3) {
allCount += item.counter
}
})
this.program.forEach((item) => {
if (parseInt(item.id / 10) % 10 === 3) {
allCount += item.counter
}
})
this.team.forEach((item) => {
if (parseInt(item.id / 10) % 10 === 3) {
allCount += item.counter
}
})
this.CurrentWorkorder.scrapNumber = allCount
return this.CurrentWorkorder.scrapNumber
},
//计算 抛光数 CurrentWorkorder.defectNumber
calculate_defectNumber() {
let allCount = 0
this.paint.forEach((item) => {
if (parseInt(item.id / 10) % 10 === 1) {
allCount += item.counter
}
})
this.device.forEach((item) => {
if (parseInt(item.id / 10) % 10 === 1) {
allCount += item.counter
}
})
this.blank.forEach((item) => {
if (parseInt(item.id / 10) % 10 === 1) {
allCount += item.counter
}
})
this.program.forEach((item) => {
if (parseInt(item.id / 10) % 10 === 1) {
allCount += item.counter
}
})
this.team.forEach((item) => {
if (parseInt(item.id / 10) % 10 === 1) {
allCount += item.counter
}
})
this.CurrentWorkorder.defectNumber = allCount
return this.CurrentWorkorder.defectNumber
},
},
created() {
this.getCheckItemList()
},
mounted() {},
mounted() {
this.getcurrentWorkorder()
},
methods: {
//todo 获取检测项
getCheckItemList() {
@@ -231,29 +397,29 @@ export default {
switch (item.inspectionModule) {
case '油漆':
// 把数据传递到redis
this.signalr.SR.invoke('SaveCacheInformation_v1', this.ProductSituationForm.workorderid, '油漆', item.id + '').catch((err) => {
this.signalr.SR.invoke('SaveCacheInformation_v1', this.CurrentWorkorder.clientWorkorder, '油漆', item.id + '').catch((err) => {
console.log(err)
})
// redis再将数据返回
break
case '设备':
this.signalr.SR.invoke('SaveCacheInformation_v1', this.ProductSituationForm.workorderid, '设备', item.id + '').catch((err) => {
this.signalr.SR.invoke('SaveCacheInformation_v1', this.CurrentWorkorder.clientWorkorder, '设备', item.id + '').catch((err) => {
console.log(err)
})
break
case '毛坯':
this.signalr.SR.invoke('SaveCacheInformation_v1', this.ProductSituationForm.workorderid, '毛坯', item.id + '').catch((err) => {
this.signalr.SR.invoke('SaveCacheInformation_v1', this.CurrentWorkorder.clientWorkorder, '毛坯', item.id + '').catch((err) => {
console.log(err)
})
break
case '程序':
this.signalr.SR.invoke('SaveCacheInformation_v1', this.ProductSituationForm.workorderid, '程序', item.id + '').catch((err) => {
this.signalr.SR.invoke('SaveCacheInformation_v1', this.CurrentWorkorder.clientWorkorder, '程序', item.id + '').catch((err) => {
console.log(err)
})
break
case '班组操作':
this.signalr.SR.invoke('SaveCacheInformation_v1', this.ProductSituationForm.workorderid, '班组操作', item.id + '').catch((err) => {
this.signalr.SR.invoke('SaveCacheInformation_v1', this.CurrentWorkorder.clientWorkorder, '班组操作', item.id + '').catch((err) => {
console.log(err)
})
break
@@ -329,6 +495,51 @@ export default {
// this.signalr.SR.invoke('SendMessage', 'All', 'root', '123456').catch((err) => console.log('err', err))
},*/
//todo 获取当前工单号
getcurrentWorkorder() {
getcurrent_workorder().then((res) => {
if (res.code == 200) {
if (res.data != undefined) {
this.CurrentWorkorder = res.data
this.$message.success('更新今日工单号成功')
}
} else if (res.code == 210) {
this.$notify.warning('没有工单上线')
}
})
},
//todo 获取下一个工单号
getNext_current_workorder() {
get_next_current_workorder().then((res) => {
if (res.code == 200) {
if (res.data != null) {
this.CurrentWorkorder = res.data
this.$message.success('获取工单号成功')
} else {
this.$notify.warning('已经是最后一个工单,没有工单了')
}
} else if (res.code == 210) {
this.$notify.warning('已经是最后一个工单,没有工单了')
}
})
},
//todo 获取上一个工单号
getPrevious_current_workorder() {
get_previous_current_workorder().then((res) => {
if (res.code == 200) {
if (res.data != null) {
this.CurrentWorkorder = res.data
this.$message.success('获取工单号成功')
} else {
this.$notify.warning('没有生产工单')
}
} else if (res.code == 210) {
this.$notify.warning('没有生产工单')
}
})
},
},
}
</script>
@@ -450,17 +661,9 @@ export default {
font-family: Arial, sans-serif;
font-size: 1rem;
text-align: center;
margin-top: 40px;
}
.f_item {
margin-top: 10px;
margin-left: 20px;
}
.f_name {
color: #409eff;
font-family: Arial, sans-serif;
font-size: 1.2rem;
margin-top: 50px;
}
.context {
margin: 0.5em 1em;
font-size: 0.8rem;
@@ -469,11 +672,43 @@ export default {
width: 100%;
height: 100%;
text-align: center;
position: relative;
.number {
font-size: 2rem;
text-align: center;
color: red;
font-weight: bold;
position: absolute;
bottom: 5px;
width: 100%;
}
}
.number {
font-size: 1.2rem;
text-align: center;
color: red;
font-weight: bold;
.dataStatistics {
.title {
font-size: 1.2rem;
font-weight: bold;
color: #303133;
}
table {
border-collapse: collapse;
width: 100%;
}
th,
td {
border: 1px solid #000;
padding: 8px;
text-align: left;
font-size: 0.7rem;
}
th {
background-color: #409eff;
color: #fff;
}
::v-deep .el-button {
float: right;
}
}
</style>