<template>
|
<div style="height: 100%">
|
<div class="page-header">
|
<div class="header-left">
|
<a @click="$router.go(-1)"><i class="icon-btn-back"></i></a>
|
<h2>编辑-原材料检验</h2>
|
</div>
|
<div class="btn-group header-right">
|
<el-button @click="save()">保存</el-button>
|
</div>
|
</div>
|
<div class="page-main">
|
<div class="rawMaterial-basic">
|
<el-row style="width:100%;height:20px;margin-bottom:20px;" v-show="dataForm.id==null">
|
<el-col :span="20">
|
<span style="color:red;font-size:18px;padding: 0;margin: 0;">请扫描二维码获取数据</span>
|
</el-col>
|
<el-col :span="4" style="text-align: right;">
|
<el-button>扫描二维码</el-button>
|
</el-col>
|
</el-row>
|
<el-form
|
:model="dataForm"
|
:rules="dataRule"
|
ref="dataForm"
|
style="width: 100%"
|
class="l-mes"
|
label-width="110px">
|
<el-row>
|
<el-col :span="6">
|
<el-form-item prop="formTime" label="来料日期">
|
<el-date-picker
|
v-model="dataForm.formTime"
|
type="datetime"
|
value-format="yyyy-MM-dd HH:mm:ss"
|
disabled>
|
|
</el-date-picker>
|
</el-form-item>
|
</el-col>
|
<el-col :span="6">
|
<el-form-item prop="name" label="原材料名称">
|
<el-input v-model="dataForm.name" disabled >
|
</el-input>
|
</el-form-item>
|
</el-col>
|
<el-col :span="6">
|
<el-form-item label="原材料编码" prop="code">
|
<el-input v-model="dataForm.code" disabled></el-input>
|
</el-form-item>
|
</el-col>
|
<el-col :span="6">
|
<el-form-item label="规格型号" prop="specs">
|
<el-input v-model="dataForm.specs" disabled></el-input>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
<el-row>
|
<el-col :span="6">
|
<el-form-item prop="unit" label="单位">
|
<el-input
|
v-model="dataForm.unit"
|
disabled
|
></el-input>
|
</el-form-item>
|
</el-col>
|
<el-col :span="6">
|
<el-form-item label="供应商名称" prop="supplier">
|
<el-input v-model="dataForm.supplier" disabled />
|
</el-form-item>
|
</el-col>
|
<el-col :span="6">
|
<el-form-item label="数量" prop="number">
|
<el-input v-model="dataForm.number" />
|
</el-form-item>
|
</el-col>
|
<el-col :span="6">
|
<el-form-item label="报检日期" prop="createTime" v-if="dataForm.id!=null">
|
<el-input v-model="dataForm.createTime" />
|
</el-form-item>
|
</el-col>
|
</el-row>
|
<el-row>
|
<el-col :span="6">
|
<el-form-item label="报检人" prop="createUser" v-if="dataForm.id!=null">
|
<el-input v-model="dataForm.createUser" />
|
</el-form-item>
|
</el-col>
|
</el-row>
|
</el-form>
|
</div>
|
<div class="rawMaterial-detail">
|
<el-row style="width:100%;z-index: 10;height:50px;">
|
<el-col :span="19">检验项目</el-col>
|
<el-col :span="5">
|
<div style="width:100%;text-align: right;">
|
<el-button v-show="dataForm.id==null" size="small" @click="clickAddLine">添加检验行</el-button>
|
<el-button size="small" @click="addTeatValueColumn()">添加检验值列</el-button>
|
<el-button size="small" @click="delTeatValueColumn()">删除检验值列</el-button>
|
</div>
|
</el-col>
|
</el-row>
|
<el-row style="width:100%;margin-top:-30px">
|
<el-col :span="24">
|
<avue-crud
|
ref="crud"
|
:option="tableOption"
|
@current-row-change="changeEquipment"
|
:data="list"
|
v-model="form">
|
<template slot="testValue" slot-scope="scope">
|
<el-tooltip :disabled="scope.row.equipmentId != null" class="item" effect="dark" content="请先选择设备!"
|
placement="top-start">
|
<el-input :disabled="scope.row.equipmentId == null" v-model="scope.row.testValue"
|
@blur="updateTestValue(scope.row)" placeholder="请输入检测值"></el-input>
|
</el-tooltip>
|
</template>
|
<template slot="deviceName" slot-scope="scope">
|
<el-select v-model="scope.row.equipmentId" filterable>
|
<el-option v-for="(item,index) in deviceList"
|
:key="index" :value="item.id" :label="item.number +'-'+ item.name"></el-option>
|
</el-select>
|
</template>
|
<template slot="testState" slot-scope="scope">
|
<span v-if="scope.row.testState == 0" style="color:#F56C6C">不合格</span>
|
<span v-else-if="scope.row.testState == 1" style="color:#67C23A">合格</span>
|
<span v-else>暂无结论</span>
|
</template>
|
</avue-crud>
|
</el-col>
|
</el-row>
|
</div>
|
<div class="rawMaterial-detail">
|
<el-row>
|
<el-col :span="24">检验结论</el-col>
|
</el-row>
|
<el-row style="width:100%">
|
<el-col :span="24">
|
<avue-crud
|
ref="conclusion"
|
:option="option"
|
:data="conclusionTable"
|
v-model="conclusion">
|
<template #menu>
|
<el-button type="text" size="small">上报</el-button>
|
</template>
|
</avue-crud>
|
</el-col>
|
</el-row>
|
</div>
|
|
</div>
|
</div>
|
</template>
|
|
<script>
|
import { object,conclusion } from '@/const/crud/quality/rawMaterial'
|
import { selectDevice,addRawInspects,getObj,updateRawInsProduct } from '@/api/quality/rawMaterial'
|
export default {
|
data(){
|
return{
|
columnIndex: 2,
|
columnList: [],
|
dataForm:{
|
id: null,
|
formTime: '2023-10-28 00:00:00',
|
name: 'name',
|
code: 'code4',
|
specs: 'specs',
|
unit: 'mm',
|
number: '111',
|
supplier: 'supplier',
|
rawInsProducts: null,
|
},
|
form: null,
|
list:[],
|
conclusion: null,
|
conclusionTable: [{
|
code: '',
|
name: '',
|
userName: '',
|
testState: ''
|
}],
|
tableOption: object,
|
option: conclusion,
|
dataRule: {},
|
deviceList: [],
|
}
|
},
|
mounted(){
|
this.dataForm.id = this.$route.query.id
|
this.init()
|
let isShow = this.dataForm.id == null ? true : false
|
this.tableOption.menu = isShow
|
let len = this.tableOption.column.length
|
this.tableOption.column[len-1].hide = isShow
|
this.getDeviceList()
|
},
|
watch:{
|
'columnList.length':function(newVal){
|
const column = [{
|
label: '项目',
|
width: 260,
|
prop: 'name',
|
span: 24,
|
type: 'text',
|
cell: true,
|
}, {
|
width: 260,
|
label: '单位',
|
prop: 'unit',
|
span: 24,
|
type: 'text',
|
cell: true,
|
}, {
|
width: 260,
|
label: '标准值',
|
prop: 'required',
|
type: 'text',
|
span: 24,
|
cell: true,
|
}, {
|
label: '检测值',
|
prop: 'testValue',
|
type: 'text',
|
width: 260,
|
slot: true,
|
formSlot: true,
|
cell: true,
|
}, {
|
label: '试验设备',
|
prop: 'deviceName',
|
type: 'select',
|
cell: true,
|
slot: true,
|
formSlot: true,
|
width: 260
|
},{
|
label: '结论',
|
prop: 'testState',
|
type: 'text',
|
slot: true,
|
formSlot: true,
|
hide: true,
|
fixed: 'right'
|
}]
|
if(newVal > 0){
|
if(this.columnList.length > 0){
|
this.tableOption.column = column
|
this.columnList.forEach(item=>{
|
this.tableOption.column.splice(4,0,item)
|
})
|
}
|
}else{
|
this.tableOption.column = column
|
}
|
},
|
},
|
methods:{
|
changeEquipment(current,old){
|
console.log(current,old)
|
},
|
addTeatValueColumn(){
|
let propName = 'testValue' + this.columnIndex
|
this.columnList.push({
|
label: '检测值',
|
prop: propName,
|
type: 'text',
|
width: 260,
|
$cellEdit: true,
|
disabled: this.list[0].equiomentId == null
|
})
|
this.columnIndex+=1
|
},
|
delTeatValueColumn(){
|
this.columnList.pop()
|
},
|
updateTestValue(row){
|
if(row.rpId == null){
|
return
|
}
|
let obj = {
|
equiomentId: row.equipmentId,
|
rpId: row.rpId,
|
testValue: row.testValue
|
}
|
updateRawInsProduct(obj).then(res=>{
|
if(res.data.code === 0){
|
this.$message.success("更新成功")
|
this.init()
|
}else{
|
this.$message.success("更新失败")
|
}
|
}).catch(error=>{
|
this.$message.error(error)
|
})
|
},
|
init(){
|
if(this.dataForm.id){
|
getObj(this.dataForm.id).then(res=>{
|
let data = res.data.data
|
this.dataForm.name = data.name
|
this.dataForm.formTime = data.formTime
|
this.dataForm.code = data.code
|
this.dataForm.specs = data.specs
|
this.dataForm.unit = data.runit
|
this.dataForm.supplier = data.supplier
|
this.dataForm.number = data.number
|
this.dataForm.createTime = data.creatTime
|
this.dataForm.createUser = data.createUser
|
let userNameList = []
|
this.list = []
|
data.children.forEach(item=>{
|
userNameList.push(item.userName)
|
this.list.push({
|
equipmentId: item.equiomentId,
|
name: item.rpName,
|
required: item.required,
|
testValue: item.testValue,
|
unit: item.rpUnit,
|
testState: item.testState,
|
rpId: item.rpId
|
})
|
})
|
this.conclusionTable = [{
|
code: data.code,
|
name: data.name,
|
userName: Array.from(new Set(userNameList)).join(','),
|
testState: ''
|
}]
|
}).catch(error=>{
|
this.$message.error("获取失败",error)
|
})
|
}else{
|
this.conclusionTable = []
|
this.tableOption.column = object.column
|
}
|
},
|
save(){
|
let data = this.dataForm
|
data.rawInsProducts = this.list
|
console.log(this.list)
|
return
|
addRawInspects(data).then(res=>{
|
this.$message.success("保存成功")
|
}).catch(error=>{
|
this.$message.error(error)
|
})
|
},
|
// 添加行
|
clickAddLine() {
|
let obj = {
|
$cellEdit: true,
|
equipmentId: null,
|
name: "",
|
required: "",
|
testValue: "",
|
unit: ""
|
};
|
this.list.push(obj);
|
},
|
getDeviceList(){
|
selectDevice(null).then(res=>{
|
this.deviceList = res.data.data
|
})
|
},
|
},
|
computed:{},
|
components:{}
|
}
|
</script>
|
|
<style>
|
.rawMaterial-detail {
|
width: 100%;
|
height: 400px;
|
padding: 10px 20px;
|
display: flex;
|
border: 1px solid #ddd;
|
background-color: #fff;
|
margin-top: 10px;
|
box-sizing: border-box;
|
flex-wrap: wrap;
|
}
|
|
.rawMaterial-basic {
|
background-color: #fff;
|
height: 150px;
|
display: flex;
|
flex-wrap: wrap;
|
padding: 10px 20px;
|
border: 1px solid #ddd;
|
box-sizing: border-box;
|
}
|
|
.rawMaterial-related-stock-part {
|
background-color: #fff;
|
width: 100%;
|
height: 220px;
|
border: 1px solid #ddd;
|
padding: 10px 20px 0px 20px;
|
box-sizing: border-box;
|
}
|
|
.rawMaterial-bom {
|
background-color: #fff;
|
width: 100%;
|
height: 499px;
|
border: 1px solid #ddd;
|
padding: 10px 20px;
|
box-sizing: border-box;
|
}
|
|
.rawMaterial-bom .el-card__header {
|
padding: 1px 20px;
|
border-bottom: 0px solid #ebeef5;
|
}
|
|
.rawMaterial-bom .el-card__body {
|
height: calc(100% - 22px);
|
}
|
|
.rawMaterial-bom .el-card__body .el-collapse {
|
height: 100%;
|
overflow: auto;
|
}
|
|
.rawMaterial-technology-params {
|
background-color: #fff;
|
width: calc(52% - 20px);
|
float: left;
|
height: 719px;
|
border: 1px solid #ddd;
|
padding: 10px 20px;
|
margin-left: 20px;
|
}
|
|
.rawMaterial-structure {
|
background-color: #fff;
|
width: 35%;
|
float: left;
|
height: 719px;
|
border: 1px solid #ddd;
|
padding: 10px 20px;
|
box-sizing: border-box;
|
}
|
|
.rawMaterial-flow {
|
background-color: #fff;
|
width: calc(65% - 20px);
|
float: left;
|
height: 719px;
|
border: 1px solid #ddd;
|
padding: 10px 20px;
|
margin-left: 20px;
|
box-sizing: border-box;
|
}
|
|
/*自定义disabled状态下checkbox的样式*/
|
.completeproductstructure-checkout
|
.el-checkbox__input.is-disabled.is-checked
|
.el-checkbox__inner {
|
background-color: #006eff;
|
border-color: #006eff;
|
}
|
|
.completeproductstructure-checkout
|
.el-checkbox__input.is-disabled.is-checked
|
+ span.el-checkbox__label {
|
color: #006eff;
|
border-color: #006eff;
|
}
|
|
.completeproductstructure-checkout
|
.el-checkbox__input.is-disabled
|
.el-checkbox__inner {
|
background-color: #ffffff;
|
cursor: pointer;
|
}
|
|
.completeproductstructure-checkout
|
.el-checkbox__input.is-disabled
|
+ span.el-checkbox__label {
|
color: #606266;
|
cursor: pointer;
|
}
|
|
.completeproductstructure-checkout .el-checkbox__inner::after {
|
border: 1px solid #fff !important;
|
border-left: 0 !important;
|
border-top: 0 !important;
|
cursor: pointer !important;
|
}
|
|
.rawMaterial-bom-div {
|
width: 100%;
|
margin-bottom: 5px;
|
}
|
|
.rawMaterial-technology-div {
|
width: 100%;
|
margin-bottom: 5px;
|
margin-right: 10px;
|
}
|
|
.rawMaterial-technology-div .el-collapse {
|
border-top: 0px;
|
border-bottom: 0px;
|
}
|
|
.structure-detail-table th.gutter {
|
display: table-cell !important;
|
width: 10px !important;
|
}
|
|
.structure-detail-table colgroup.gutter {
|
display: table-cell !important;
|
width: 10px !important;
|
}
|
|
.final-product-checkout .el-card__header {
|
padding: 0px 20px;
|
border-bottom: 0px;
|
}
|
|
.final-product-checkout .el-card__body {
|
padding: 0px 20px 20px;
|
}
|
|
.orimaterial-quantity .el-card__header {
|
padding: 0px 20px;
|
border-bottom: 0px;
|
}
|
|
.orimaterial-quantity .el-card__body {
|
padding: 0px 20px 20px;
|
}
|
|
.rawMaterial-materialcost-table th.gutter {
|
display: table-cell !important;
|
width: 10px !important;
|
}
|
|
.rawMaterial-materialcost-table colgroup.gutter {
|
display: table-cell !important;
|
width: 10px !important;
|
}
|
|
.GooFlow .ico .ico_start:before {
|
color: red;
|
}
|
.highlight-tab-class {
|
color: #006eff;
|
background: #e4e7ed;
|
border-top: 1px solid #006eff;
|
}
|
.unhighlight-tab-class {
|
border: 1px solid #e4e7ed;
|
border-bottom: none;
|
}
|
</style>
|