王震
2023-11-02 d2618a0663e823504742448cf25fe8e2eec48cdf
Merge remote-tracking branch 'origin/master'
已重命名1个文件
已修改4个文件
已添加3个文件
1194 ■■■■ 文件已修改
src/api/quality/processInspect.js 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/router/views/index.js 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/quality/finishedProductInspection/finishedProduct-form.vue 84 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/quality/finishedProductInspection/index.vue 112 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/quality/processInspect/index.vue 298 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/quality/processInspect/processInspect-form.vue 510 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/quality/rawMaterial/index.vue 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/quality/rawMaterial/rawMaterial-form.vue 86 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/quality/processInspect.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,80 @@
/*
 *    Copyright (c) 2018-2025, ztt All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 * Redistributions of source code must retain the above copyright notice,
 * this list of conditions and the following disclaimer.
 * Redistributions in binary form must reproduce the above copyright
 * notice, this list of conditions and the following disclaimer in the
 * documentation and/or other materials provided with the distribution.
 * Neither the name of the pig4cloud.com developer nor the names of its
 * contributors may be used to endorse or promote products derived from
 * this software without specific prior written permission.
 * Author: ztt
 */
import request from '@/router/axios'
export function page(query) {
  return request({
    url: '/mes/qualityProcessInspect/page',
    method: 'get',
    params: query
  })
}
export function updateProcessInspectsById(query) {
  return request({
    url: '/mes/qualityProcessInspect/updateProcessInspectsById',
    method: 'post',
    params: query
  })
}
export function chooseMater(query) {
    return request({
      url: '/mes/qualityProcessInspect/chooseMater',
      method: 'get',
      params: query
    })
  }
export function addProcess(obj) {
    return request({
        url: '/mes/qualityProcessInspect/addProcess',
        method: 'post',
        data: obj
    })
}
export function queryById(obj) {
    return request({
        url: '/mes/qualityProcessInspect/'+obj,
        method: 'get',
    })
}
export function deleteById(obj) {
    return request({
        url: '/mes/qualityProcessInspect/'+obj,
        method: 'delete',
    })
}
export function updateDeviceBypppId(obj) {
    return request({
        url: '/mes/qualityProcessInsProduct/updateDevBypppId',
        method: 'post',
        params: obj
    })
}
export function updateProcessInsProduct(obj) {
    return request({
        url: '/mes/qualityProcessInsProduct/updateprocessInsProduct',
        method: 'post',
        params: obj
    })
}
src/router/views/index.js
@@ -169,7 +169,24 @@
        path: 'finishedProduct-form',
        name: 'finishedProductForm',
        component: () =>
          import(/* webpackChunkName: "views" */ '@/views/quality/finishedProductInspection/finishedProductInspectionAdd'),
          import(/* webpackChunkName: "views" */ '@/views/quality/finishedProductInspection/finishedProduct-form'),
        meta: {
          keepAlive: false,
          isTab: false,
          isAuth: false
        }
      }
    ]
  },
  {
    path: '/quality/processInspect',
    component: Layout,
    children: [
      {
        path: 'processInspect-form',
        name: 'processInspectForm',
        component: () =>
          import(/* webpackChunkName: "views" */ '@/views/quality/processInspect/processInspect-form'),
        meta: {
          keepAlive: false,
          isTab: false,
src/views/quality/finishedProductInspection/finishedProduct-form.vue
ÎļþÃû´Ó src/views/quality/finishedProductInspection/finishedProductInspectionAdd.vue ÐÞ¸Ä
@@ -4,7 +4,8 @@
    <div class="page-header">
        <div class="header-left">
            <a @click="$router.go(-1)"><i class="icon-btn-back"></i></a>
            <h2>编辑-产品检验单</h2>
            <h2 v-if="resultVal!=null && processInspectVo.id!=null">查看-产品检验单</h2>
            <h2 v-else>编辑-产品检验单</h2>
        </div>
        <div class="btn-group header-right">
            <el-button @click="addTestProject" v-if="processInspectVo.id==null">生成检验项目</el-button>
@@ -35,14 +36,6 @@
                            </el-form-item>
                        </el-col>
                        <el-col :span="6">
                            <el-form-item label="质量追溯号:">
                                <el-input disabled v-model="processInspectVo.qualityTraceability"
                                    placeholder="请输入质量追溯号" autocomplete="off" />
                            </el-form-item>
                        </el-col>
                    </el-row>
                    <el-row>
                        <el-col :span="6">
                            <el-form-item label="产品名称:">
                                <el-select style="width: 100%" @change="changeOptionsSamplename" :disabled="processInspectVo.id != null"
                                    v-model="processInspectVo.material" size="small" placeholder="请选择产品名称">
@@ -52,6 +45,8 @@
                                </el-select>
                            </el-form-item>
                        </el-col>
                    </el-row>
                    <el-row>
                        <el-col :span="6">
                            <el-form-item label="产品编码:">
                                <el-input disabled v-model="processInspectVo.mcode"
@@ -70,8 +65,6 @@
                                    placeholder="请输入单位" autocomplete="off" />
                            </el-form-item>
                        </el-col>
                    </el-row>
                    <el-row>
                        <el-col :span="6">
                            <el-form-item label="数量:">
                                <el-input v-model="processInspectVo.quantity" placeholder="请输入数量"
@@ -85,7 +78,7 @@
        <div class="finishedProduct-detail">
            <el-row style="width:100%;z-index: 10;height:30px;">
                <el-col :span="12" class="inspectionProject_span">检验项目</el-col>
                <el-col :span="12" class="inspectionProject_span" style="text-align: right;">
                <el-col v-if="resultVal==null" :span="12" class="inspectionProject_span" style="text-align: right;">
                    <el-button size="mini" @click="clickAddInspectionColumn()">添加检测值列</el-button>
                    <el-button size="mini" @click="clickDeleteInspectionColumn()">删除检测值列</el-button>
                </el-col>
@@ -109,16 +102,20 @@
                                    placement="top-start">
                                    <el-input :disabled="scope.row.eId == null" v-model="scope.row.empiricalValueAddss[index]"
                                        @blur="changeState(scope.row, index)" placeholder="请输入检测值"></el-input>
                                </el-tooltip>
                                    <span v-if="resultVal != null" v-text="scope.row.empiricalValueAddss[index]"></span>
                                    </el-tooltip>
                            </template>
                        </el-table-column>
                        <el-table-column prop="deviceName" label="试验设备" min-width="250">
                            <template slot-scope="scope">
                                <el-select style="width:100%" v-model="scope.row.eId"
                                v-if="scope.row.iname != null" filterable @change="updateDevice(scope.row)">
                                    <el-option v-for="(item,index) in deviceList"
                                    :key="index" :value="item.id" :label="item.number +'-'+ item.name"></el-option>
                                </el-select>
                                <span v-if="resultVal!=null && processInspectVo.id!=null" v-text="scope.row.ename"></span>
                                <div v-else>
                                    <el-select style="width:100%" v-model="scope.row.eId"
                                    v-if="scope.row.iname != null" filterable @change="updateDevice(scope.row)">
                                        <el-option v-for="(item,index) in deviceList"
                                        :key="index" :value="item.id" :label="item.number +'-'+ item.name"></el-option>
                                    </el-select>
                                </div>
                            </template>
                        </el-table-column>
                        <el-table-column label="结论" fixed="right" min-width="100">
@@ -148,13 +145,13 @@
                        <el-table-column prop="userName" label="检验员"></el-table-column>
                        <el-table-column prop="result" label="检验结论">
                            <template slot-scope="scope">
                                <el-tag type="success" v-if="scope.row.result == 1">合格</el-tag>
                                <el-tag type="danger" v-else-if="scope.row.result == 0">不合格</el-tag>
                                <el-tag type="success" v-if="scope.row.result == '1'">合格</el-tag>
                                <el-tag type="danger" v-else-if="scope.row.result == '0'">不合格</el-tag>
                            </template>
                        </el-table-column>
                        <el-table-column  label="操作">
                            <template>
                                <el-button type="text"  @click="submitSave()" size="small">上报</el-button>
                                <el-button type="text" :disabled="resultVal!=null && processInspectVo.id!=null"  @click="submitSave()" size="small">上报</el-button>
                            </template>
                        </el-table-column>
                    </el-table>
@@ -178,6 +175,7 @@
export default {
    data() {
        return {
            resultVal: null,
            deviceList: [],
            hasChildren: true,
            optionsSamplename: [],
@@ -214,6 +212,11 @@
    mounted() {
        this.getDeviceList()
        this.processInspectVo.id = this.$route.query.id
        this.resultVal = this.$route.query.resultVal
        if(this.resultVal == null){
            let val = sessionStorage.getItem("finished-resultVal");
            val == undefined ? this.resultVal=null : this.resultVal = val
        }
        this.init()
    },
    methods: {
@@ -240,15 +243,40 @@
                    number: value
                    }
                    updateFinishedInspectById(data).then(res => {
                        this.$message.success("上报成功");
                        if(res.data.data.indexOf("成功") > 0){
                            this.$message.success("上报成功");
                            this.checkTestState()
                        }else{
                            this.$message.warning(res.data.data)
                        }
                    });
                }).catch(() => {});
            }else{
                updateFinishedInspectById({id:this.processInspectVo.id,number:0}).then(res => {
                    this.$message.success("上报成功");
                    if(res.data.data.indexOf("成功") > 0){
                            this.$message.success("上报成功");
                            this.checkTestState()
                        }else{
                            this.$message.warning(res.data.data)
                        }
                });
            }
            this.init()
        },
        checkTestState(){
            let resultVal = '1'
            this.inspectionItems.forEach(item=>{
                if(item.children){
                    item.children.forEach(obj=>{
                        if(obj.iresult == 0){
                            resultVal = '0'
                        }
                    })
                }
            })
            this.resultVal = resultVal
            this.inspectionResultForm[0].result = resultVal
            sessionStorage.setItem("finished-resultVal",resultVal)
        },
        init(){
            let id = this.processInspectVo.id
@@ -263,7 +291,6 @@
                    this.processInspectVo.specificationsModel = result.specs
                    this.processInspectVo.unit = result.punit
                    this.processInspectVo.quantity = result.quantity
                    let resultVal = 1
                    let userList = []
                    result.children.forEach(item=>{
                        item.iid = Math.random()
@@ -275,9 +302,6 @@
                                }
                                if(obj.inspectionValue){
                                    arr = obj.inspectionValue.split(",")
                                }
                                if(obj.iresult && obj.iresult == 0){
                                    resultVal = 0
                                }
                                obj.empiricalValueAddss = arr
                                if(arr.length > this.empiricalValueAdd){
@@ -291,7 +315,7 @@
                        materialCode: result.materialCode,
                        material: result.material,
                        userName: Array.from(new Set(userList)).join(","),
                        result: resultVal,
                        result: this.resultVal==null ? '' : this.resultVal,
                    }]
                }).catch(error=>{
                    console.log(error)
@@ -425,7 +449,7 @@
<style scoped>
.finishedProduct-detail {
  width: 100%;
  height: 470px;
  height: 500px;
  padding: 10px 20px;
  display: flex;
  border: 1px solid #ddd;
@@ -449,7 +473,7 @@
.finishedProduct-basic {
  background-color: #fff;
  height: 155px;
  height: 120px;
  display: flex;
  flex-wrap: wrap;
  padding: 10px 20px;
src/views/quality/finishedProductInspection/index.vue
@@ -16,11 +16,10 @@
    </div>
</template>
<script>
    import ttable from '@/views/common/ztt-table.vue'
    import * as fecha from 'element-ui/lib/utils/date'
    import finishedProductInspectionAdd from './finishedProductInspectionAdd'
    import finishedProductInspectionAdd from './finishedProduct-form'
    import { page,deletePro } from '@/api/quality/finishedProduct'
    export default {
        components: {
@@ -151,9 +150,6 @@
                        fun: this.addOrUpdateHandle
                    },
                    {
                        text: '删除',
                    },
                    {
                        text: '导出',
                    }
                    ],
@@ -174,67 +170,9 @@
                    minWidth: 100
                    },
                },
                searchData: {
                    result: '',
                    material: '',
                },
                // ä¸»æœºå·¥ä¸‹æ‹‰æ¡†
                usernameOptions: [],
                inspectionTable: [],
                rowInfo: {},
                pageParams: {
                    countSize: 10, //每页数量
                    pageSize: 1, // å½“前页码
                    total: 0
                },
                showAddPage: false,
                showAdd: false,
                showLook: false,
                showUp: false,
                showDetail: false,
                addInspectionform: [{
                    number: '',
                    username: '',
                    projectname: '',
                    tracenumber: '',
                    code: '',
                    class: '',
                    specificationmodel: '',
                    unit: '',
                    quantity: '',
                    group: '',
                    worker: '',
                    machine: ''
                }],
                inspectionItems: [{
                    project: '布隆迪',
                    unit: '吨',
                    standardVal: '8219384314',
                    controlVal: '9823401',
                    detectionVal: '11111',
                    device: '',
                    conclusion: '合格'
                }],
                inspectionResultForm: [{
                    id: '274024',
                    name: '111',
                    inspecter: '111',
                    conclusion: '',
                    operation: ''
                }],
                finishedInsInfo: {}
            }
        },
        created() {
            this.init()
            // this.getInspectionTableData()
        },
        created() { },
        methods: {
            deleteHandle(row){
                console.log(row.id)
@@ -257,7 +195,10 @@
            addOrUpdateHandle(row) {
                this.$router.push({
                    name: 'finishedProductForm',
                    query: { id: row == null ? null : row.id }
                    query: {
                        id: row == null ? null : row.id,
                        resultVal: row == null ? null : row.result
                    }
                })
            },
            formatResult(row, column, cellValue){
@@ -272,49 +213,10 @@
            formatDateTime(row, column, cellValue) {
                return cellValue ? fecha.format(new Date(cellValue), 'yyyy-MM-dd') : ''
            },
            handleSelectionChange(){
            },
            // æ¯é¡µæ¡æ•°æ”¹å˜æ—¶è§¦å‘ é€‰æ‹©ä¸€é¡µæ˜¾ç¤ºå¤šå°‘行
            handleSizeChange(val) {
                console.log(`每页 ${val} æ¡`)
                this.currentPage = 1
                this.pageSize = val
            },
            // å½“前页改变时触发 è·³è½¬å…¶ä»–页
            handleCurrentChange(val) {
                console.log(`当前页: ${val}`)
                this.currentPage = val
            },
            handleAddNew() {
                this.showAdd = true
            },
            handleSelectionChange(){ },
            getData() {
                this.$refs.finishedProduct.getDataList()
            },
            goToDetail(row) {
                this.rowInfo = row
                this.showLook = true
            },
            goUp(row) {
                this.rowInfo = row
                this.showUp = true
            },
            async init() {
                // const {data} = await this.$axios.get(this.$api.url.finishedInspectUser)
                // this.usernameOptions = data
            },
            comBackMain(val) {
                this.showAdd = false
                this.showLook = false
                this.showUp = false
                this.init()
                // this.getInspectionTableData()
                if (val) {
                    this.$parent.removeAllTab()
                }
            }
        }
    }
src/views/quality/processInspect/index.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,298 @@
<template>
    <div class="content-main">
        <div class="rawPage">
            <basic-container>
                <ttable
                :table="table"
                @handleSelectionChange="handleSelectionChange"
                :prelang="prelang"
                :options="options"
                :ajaxFun="ajaxFun"
                ref="processInspect">
                <template #toolbar></template>
                </ttable>
            </basic-container>
        </div>
    </div>
</template>
<script>
    import ttable from '@/views/common/ztt-table.vue'
    import * as fecha from 'element-ui/lib/utils/date'
    import processInspectForm from './processInspect-form'
    import { page,deleteById } from '@/api/quality/processInspect'
    export default {
        components: {
            processInspectForm,
            ttable
        },
        data() {
            return {
                result:[{label:'全部',value: ''},{label:'合格',value: '1'},{label:'不合格',value: '0'}],
                type: [1],
                prelang: 'processInspect',
                ajaxFun: page,
                options: {
                    height: 300, // é»˜è®¤é«˜åº¦-为了表头固定
                    stripe: true, // æ˜¯å¦ä¸ºæ–‘马纹 table
                    highlightCurrentRow: false, // æ˜¯å¦è¦é«˜äº®å½“前行
                    border: true, // æ˜¯å¦æœ‰çºµå‘边框
                    lazy: false, // æ˜¯å¦éœ€è¦æ‡’加载
                    fit: true, // åˆ—的宽度是否自撑开
                    multiSelect: true, //
                    seqNo: true,
                    isRefresh: true, // æ˜¯å¦æ˜¾ç¤ºåˆ·æ–°æŒ‰é’®
                    isShowHide: true, // æ˜¯å¦æ˜¾ç¤ºæ˜¾å½±æŒ‰é’®H
                    isSearch: true, // é«˜çº§æŸ¥è¯¢æŒ‰é’®
                    defaultOrderBy: { column: 'createTime', direction: 'desc' },
                },
                table: {
                    total: 0,
                    currentPage: 1,
                    pageSize: 20,
                    data: [],
                    // æ ‡é¢˜
                    column: [
                        {
                            minWidth: '120',
                            prop: 'orderNumber',
                            label: '订单编号',
                            isTrue: true,
                            isSearch: true,
                            searchInfoType: 'text',
                            render: { fun: this.addOrUpdateHandle }
                        },
                        {
                            minWidth: '120',
                            prop: 'material',
                            label: '产品名称',
                            isTrue: true,
                            isSearch: true,
                            searchInfoType: 'text'
                        },
                        {
                            minWidth: '130',
                            width: '150',
                            prop: 'specs',
                            label: '规格型号',
                            sort: true,
                            isTrue: true,
                            isSearch: true,
                            searchInfoType: 'text',
                        },
                        {
                            minWidth: '120',
                            prop: 'operaName',
                            label: '工序',
                            isTrue: true,
                            isSearch: true,
                            searchInfoType: 'text'
                        },
                        {
                            minWidth: '120',
                            prop: 'unit',
                            label: '单位',
                            isTrue: true,
                            isSearch: true,
                            searchInfoType: 'text'
                        },
                        {
                            minWidth: '120',
                            prop: 'quantity',
                            label: '数量',
                            isTrue: true,
                            isSearch: true,
                            searchInfoType: 'text'
                        },
                        {
                            minWidth: '120',
                            prop: 'createTime',
                            label: '报检日期',
                            sort: true,
                            isTrue: true,
                            isSearch: true,
                            searchInfoType: 'datetimerange',
                            formatter: this.formatDateTime,
                        },
                        {
                            minWidth: '120',
                            prop: 'createUser',
                            label: '报检人',
                            isTrue: true,
                            isSearch: true,
                            searchInfoType: 'text'
                        },
                        {
                            minWidth: '120',
                            prop: 'updateTime',
                            label: '检测日期',
                            sort: true,
                            isTrue: true,
                            isSearch: true,
                            searchInfoType: 'datetimerange',
                            formatter: this.formatDateTime,
                        },
                        {
                            minWidth: '120',
                            prop: 'result',
                            label: '合格状态',
                            isTrue: true,
                            isSearch: true,
                            searchInfoType: 'select',
                            formatter: this.formatResult,
                            optList: () => {
                                return this.result
                            }
                        },
                    ],
                    toolbar: [
                    {
                        text: '新增',
                        type: 'primary',
                        fun: this.addOrUpdateHandle
                    },
                    {
                        text: '导出',
                    }
                    ],
                    operator: [{
                        text: '作废',
                        type: 'text',
                        size: 'small',
                        fun: this.deleteHandle
                    }],
                    operatorConfig: {
                    fixed: 'right',
                    label: '操作',
                    width: 100,
                    minWidth: 100
                    },
                },
            }
        },
        created() { },
        methods: {
            deleteHandle(row){
                this.$confirm('确认删除该数据吗?', '提示', {
                confirmButtonText: '确定',
                cancelButtonText: '取消',
                type: 'warning',
                }).then(()=>{
                    deleteById(row.id).then(res=>{
                        if(res.data.code == 0){
                            this.$message.success("删除成功")
                        }else{
                            this.$message.error("删除失败")
                        }
                        this.getData()
                    })
                })
            },
            // æ–°å¢ž / ä¿®æ”¹
            addOrUpdateHandle(row) {
                this.$router.push({
                    name: 'processInspectForm',
                    query: { id: row == null ? null : row.id,resultVal : row == null ? null : row.result },
                })
            },
            formatResult(row, column, cellValue){
                if(cellValue != undefined || cellValue != null){
                    if(cellValue == 0){
                        return "<span style='color:#E84738;'>不合格</span>"
                    }else if(cellValue == 1){
                        return "<span style='color:#34BD66;'>合格</span>"
                    }
                }
            },
            formatDateTime(row, column, cellValue) {
                return cellValue ? fecha.format(new Date(cellValue), 'yyyy-MM-dd') : ''
            },
            handleSelectionChange(){ },
            getData() {
                this.$refs.processInspect.getDataList()
            },
        }
    }
</script>
<style scope="scope">
    .title {
        padding: 12px;
    }
    .nav {
        display: flex;
        padding: 20px 20px;
        align-items: center;
        background-color: #fff;
    }
    .nav * {
        font-size: 14px;
    }
    .content-body {
        background-color: #fff;
        overflow: hidden;
        margin-top: 12px;
    }
    .inspectionTable {
        padding: 20px 20px;
    }
    .pagination {
        float: right;
        margin-right: 20px;
    }
    .newPage {
        overflow: hidden;
    }
    .header {
        padding: 12px;
    }
    .addInspectionform {
        background-color: #fff;
    }
    .addInspectionform .formwrapper {
        padding: 20px 0px;
        margin-left: 100px;
    }
    .inspectionProject span {
        display: block;
        padding: 5px 0px;
    }
    .inspectionProject .el-table {
        background-color: #fff;
        padding: 10px 12px;
    }
    .inspectionResult span {
        display: block;
        padding: 5px 0px;
    }
    .inspectionResult .el-table {
        background-color: #fff;
        padding: 10px 12px;
    }
    .rawPage {
        height: 100%;
        display: flex;
        flex-direction: column;
        overflow-y: scroll;
    }
    .rawPage .content-body {
        flex: 1;
    }
</style>
src/views/quality/processInspect/processInspect-form.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,510 @@
<template>
    <!-- æ–°å¢žé¡µé¢ -->
    <div class="addInspection">
        <div class="page-header">
            <div class="header-left">
                <a @click="$router.go(-1)"><i class="icon-btn-back"></i></a>
                <h2 v-if="resultVal != null && processInspectVo.id!=null">查看-过程检验单</h2>
                <h2 v-else>编辑-过程检验单</h2>
            </div>
            <div class="btn-group header-right">
                <el-button @click="addTestProject" v-if="processInspectVo.id==null">生成检验项目</el-button>
            </div>
        </div>
        <div class="page-main">
            <div class="finishedProduct-basic">
                <el-form :model="processInspectVo" ref="addInspectionform" class="l-mes"
                label-position="right" label-width="120px" style="width: 100%" size="small">
                    <div class="formwrapper">
                        <el-row>
                            <el-col :span="6">
                                <el-form-item label="订单号:">
                                    <el-input @blur="selectInfoByOrderId" :disabled="processInspectVo.id != null"
                                    v-model="processInspectVo.orderNumber" placeholder="请输入订单号" autocomplete="off" />
                                </el-form-item>
                            </el-col>
                            <el-col :span="6">
                                <el-form-item label="产品名称:">
                                    <el-select style="width: 100%" @change="changeOptionsSamplename" :disabled="processInspectVo.id != null"
                                        v-model="processInspectVo.material" size="small" placeholder="请选择产品名称">
                                        <el-option v-for="(item,index) in optionsSamplename" :key="index" :label="item.material"
                                            :value="item.materialCode">
                                        </el-option>
                                    </el-select>
                                </el-form-item>
                            </el-col>
                            <el-col :span="6">
                                <el-form-item label="产品编码:">
                                    <el-input disabled v-model="processInspectVo.materialCode"
                                        placeholder="请输入产品编码" autocomplete="off" />
                                </el-form-item>
                            </el-col>
                            <el-col :span="6">
                                <el-form-item label="规格型号:">
                                    <el-input disabled v-model="processInspectVo.specs"
                                        placeholder="请输入规格型号" autocomplete="off" />
                                </el-form-item>
                            </el-col>
                        </el-row>
                        <el-row>
                            <el-col :span="6">
                                <el-form-item label="工序名称">
                                    <el-select style="width: 100%" :disabled="processInspectVo.id != null"
                                        v-model="processInspectVo.technologyOperationId" size="small" placeholder="请选择工序">
                                        <el-option v-for="(item,index) in technologyList" :key="index" :label="item.name"
                                            :value="item.technologyOperationId">
                                        </el-option>
                                    </el-select>
                                </el-form-item>
                            </el-col>
                            <el-col :span="6">
                                <el-form-item label="单位:">
                                    <el-input disabled v-model="processInspectVo.unit"
                                        placeholder="请输入单位" autocomplete="off" />
                                </el-form-item>
                            </el-col>
                        </el-row>
                        <el-row>
                            <el-col :span="6">
                                <el-form-item label="数量:">
                                    <el-input v-model="processInspectVo.quantity" placeholder="请输入数量"
                                        autocomplete="off" :disabled="processInspectVo.id != null" />
                                </el-form-item>
                            </el-col>
                        </el-row>
                    </div>
                </el-form>
            </div>
            <div class="finishedProduct-detail">
                <el-row style="width:100%;z-index: 10;height:30px;">
                    <el-col :span="12" class="inspectionProject_span">检验项目</el-col>
                    <el-col v-if="resultVal == null" :span="12" class="inspectionProject_span" style="text-align: right;">
                        <el-button size="mini" @click="clickAddInspectionColumn()">添加检测值列</el-button>
                        <el-button size="mini" @click="clickDeleteInspectionColumn()">删除检测值列</el-button>
                    </el-col>
                </el-row>
                <el-row style="width:100%;">
                    <el-col :span="24">
                        <el-table border :data="inspectionItems" height="400"
                            :header-cell-style="{textAlign:'center',color:'black',backgroundColor:'#fafafa'}"
                            :cell-style="{textAlign:'center'}" row-key="iid" default-expand-all
                            style="width: 100%" ref="table" :tree-props="{children: 'children', hasChildren: 'hasChildren'}">
                            <el-table-column type="index" label="序号" width="60"></el-table-column>
                            <el-table-column label="项目" prop="father" width="240" ></el-table-column>
                            <el-table-column prop="iname" label="指标" width="240" ></el-table-column>
                            <el-table-column prop="iunit" label="单位" width="240" ></el-table-column>
                            <el-table-column prop="required" label="标准值" width="240" ></el-table-column>
                            <el-table-column prop="inspectionValue" v-for="(item, index) in empiricalValueAdd" :key="index" label="检测值"
                                width="240" style="text-align: center;">
                                <template slot-scope="scope">
                                        <el-tooltip v-if="scope.row.iname!=null" :disabled="scope.row.eId != null"
                                        class="item" effect="dark" content="请先选择设备!"
                                            placement="top-start">
                                            <el-input :disabled="scope.row.eId == null" v-model="scope.row.empiricalValueAddss[index]"
                                                @blur="changeState(scope.row, index)" placeholder="请输入检测值"></el-input>
                                            <span v-if="resultVal != null && processInspectVo.id!=null" v-text="scope.row.empiricalValueAddss[index]"></span>
                                        </el-tooltip>
                                </template>
                            </el-table-column>
                            <el-table-column prop="deviceName" label="试验设备" min-width="250">
                                <template slot-scope="scope">
                                    <span v-if="resultVal != null && scope.row.iname != null" v-text="scope.row.ename"></span>
                                    <div v-else>
                                        <el-select style="width:100%" v-model="scope.row.eId"
                                        v-if="scope.row.iname != null" filterable @change="updateDevice(scope.row)">
                                            <el-option v-for="(item,index) in deviceList"
                                            :key="index" :value="item.id" :label="item.number +'-'+ item.name"></el-option>
                                        </el-select>
                                    </div>
                                </template>
                            </el-table-column>
                            <el-table-column label="结论" fixed="right" min-width="100">
                                <template slot-scope="scope">
                                    <div v-if="scope.row.iname!=null">
                                        <span style="color: #34BD66;" v-if="scope.row.iresult == 1">合格</span>
                                        <span style="color: #E84738;" v-else-if="scope.row.iresult == 0">不合格</span>
                                        <span v-else>暂无结论</span>
                                    </div>
                                </template>
                            </el-table-column>
                        </el-table>
                    </el-col>
                </el-row>
            </div>
            <div class="finishedProduct-result">
                <el-row style="width:100%">
                    <el-col :span="24">检测结果</el-col>
                </el-row>
                <el-row style="width:100%;">
                    <el-col :span="24">
                        <el-table border height="90" :data="inspectionResultForm"
                        :header-cell-style="{textAlign:'center',color:'black',backgroundColor:'#fafafa'}"
                        :cell-style="{textAlign:'center'}">
                            <el-table-column prop="materialCode" label="物料编号"></el-table-column>
                            <el-table-column prop="material" label="物料名称"></el-table-column>
                            <el-table-column prop="userName" label="检验员"></el-table-column>
                            <el-table-column prop="result" label="检验结论">
                                <template slot-scope="scope">
                                    <el-tag type="success" v-if="scope.row.result == '1'">合格</el-tag>
                                    <el-tag type="danger" v-if="scope.row.result == '0'">不合格</el-tag>
                                </template>
                            </el-table-column>
                            <el-table-column  label="操作">
                                <template>
                                    <el-button type="text" :disabled="resultVal != null && processInspectVo.id!=null"  @click="submitSave()" size="small">上报</el-button>
                                </template>
                            </el-table-column>
                        </el-table>
                    </el-col>
                </el-row>
            </div>
        </div>
    </div>
    </template>
    <script>
    import {
        chooseMater,
        addProcess,
        queryById,
        updateDeviceBypppId,
        updateProcessInsProduct,
        updateProcessInspectsById,
     } from '@/api/quality/processInspect'
    import { selectDevice } from '@/api/quality/rawMaterial'
    export default {
        data() {
            return {
                resultVal: null,
                technologyList: [],
                deviceList: [],
                hasChildren: true,
                optionsSamplename: [],
                // æ·»åŠ åˆ—
                empiricalValueAdd: 1,
                // ç¼–辑时存储最长的列数字,做删除判断
                empiricalValueAddMaxNumber: 0,
                processInspectVo: {
                    id: null,
                    material: null,
                    materialCode: null,
                    orderNumber: "ZTTIC20230001",
                    quantity: null,
                    specs: null,
                    unit: null,
                    technologyOperationId: null
                },
                inspectionItems: [], // æ–°å¢žæ£€éªŒé¡¹ç›®è¡¨æ ¼
                inspectionResultForm: [],
            }
        },
        watch: {
        },
        beforeUpdate(){
          this.$nextTick(()=>{
            this.$refs.table.doLayout();
          })
        },
        created() {
        },
        mounted() {
            this.getDeviceList()
            this.processInspectVo.id = this.$route.query.id
            this.resultVal = this.$route.query.resultVal
            if(this.resultVal == null){
                let val = sessionStorage.getItem("process-resultVal");
                val == undefined ? this.resultVal=null : this.resultVal = val
            }
            this.init()
        },
        methods: {
            submitSave(){
                let pro = 0
                console.log(this.inspectionItems);
                this.inspectionItems.forEach(item => {
                    if(item.children){
                        let arr = item.children.filter(obj=>{
                                return obj.iresult == 0;
                        })
                        pro+=arr.length
                    }
                })
                if (pro > 0) {
                    this.$prompt('请输入不合格数量', '不合格数量', {
                        confirmButtonText: '确定',
                        cancelButtonText: '取消',
                        inputPattern: /^\d+$/,
                        inputErrorMessage: '请输入正确数字格式'
                    }).then(({ value }) => {
                        let data = {
                            id: this.processInspectVo.id,
                            number: value
                        }
                        updateProcessInspectsById(data).then(res => {
                            let data = res.data.data
                            if(data){
                                if(data.indexOf("成功")>0){
                                    this.$message.success(data);
                                    this.checkTestState()
                                }else{
                                    this.$message.warning(data);
                                }
                                return
                            }
                        });
                    }).catch(() => {});
                }else{
                    updateProcessInspectsById({id:this.processInspectVo.id,number:0}).then(res => {
                        let data = res.data.data
                        if(data){
                            if(data.indexOf("成功") > 0){
                                this.$message.success(data);
                                this.checkTestState()
                            }else{
                                this.$message.warning(data);
                            }
                            return
                        }
                    });
                }
                this.init()
            },
            checkTestState(){
                let resultVal = '1'
                this.inspectionItems.forEach(item=>{
                    if(item.children){
                        item.children.forEach(obj=>{
                            if(obj.iresult == 0){
                                resultVal = '0'
                            }
                        })
                    }
                })
                this.resultVal = resultVal
                this.inspectionResultForm[0].result = resultVal
                sessionStorage.setItem("process-resultVal",resultVal)
            },
            init(){
                let id = this.processInspectVo.id
                if(id != null){
                    queryById(id).then(res=>{
                        let result = res.data.data
                        this.processInspectVo.orderNumber = result.orderNumber
                        this.processInspectVo.materialCode = result.materialCode
                        this.processInspectVo.material = result.material
                        this.processInspectVo.technologyOperationId = result.technologyOperationName
                        this.processInspectVo.specs = result.specs
                        this.processInspectVo.unit = result.punit
                        this.processInspectVo.quantity = result.quantity
                        let userList = []
                        result.children.forEach(item=>{
                            item.iid = Math.random()
                            if(item.children != undefined){
                                item.children.forEach(obj=>{
                                    let arr = []
                                    if(obj.userName){
                                        userList.push(obj.userName)
                                    }
                                    if(obj.inspectionValue){
                                        arr = obj.inspectionValue.split(",")
                                    }
                                    obj.empiricalValueAddss = arr
                                    if(arr.length > this.empiricalValueAdd){
                                        this.empiricalValueAdd = arr.length
                                    }
                                })
                            }
                        })
                        this.inspectionItems = result.children
                        this.inspectionResultForm = [{
                            materialCode: result.materialCode,
                            material: result.material,
                            userName: Array.from(new Set(userList)).join(","),
                            result: this.resultVal == null ? '' : this.resultVal,
                        }]
                    }).catch(error=>{
                        console.log(error)
                    })
                }
            },
            getDeviceList(){
                selectDevice(null).then(res=>{
                    this.deviceList = res.data.data
                })
            },
            updateDevice(row){
                updateDeviceBypppId({equiomentId:row.eId,ppid:row.iId}).then(res=>{
                }).catch(error=>{
                    console.log(error)
                })
            },
            //产品名称,选择
            changeOptionsSamplename(val) {
                let sample = this.optionsSamplename.filter(o=>{
                    return o.materialCode == val
                })[0]
                this.processInspectVo.materialCode = sample.materialCode
                this.processInspectVo.specs = sample.specs
                this.processInspectVo.unit = sample.unit
                this.processInspectVo.material = sample.material
                this.technologyList = sample.children
            },
            changeState(row, index) {
                if (row.iid != null && row.iid != '') {
                    let str = ""
                    row.empiricalValueAddss.forEach(e => {
                        str += e + ","
                    })
                    str = str.slice(0,-1);
                    if (str === undefined || str === '' || str === null ) {
                        return
                    }
                    let obj = {
                        equiomentId: row.eId,
                        ppid: row.iid,
                        inspectionValue: str
                    }
                    updateProcessInsProduct(obj).then(res=>{
                        if(res.data.code == 0){
                            this.$message.success("更新成功")
                        }else{
                            this.$message.error("更新失败")
                        }
                        this.init()
                    })
                }
            },
            addTestProject() {
                let val = this.processInspectVo
                addProcess(val).then(res=>{
                    let id = res.data.data
                    if(id != null){
                        queryById(id).then(response=>{
                            console.log(response.data.data.children)
                            let proList = response.data.data.children
                            proList.forEach(item=>{
                                item.iid = Math.random();
                                if(item.children != undefined){
                                    item.children.forEach(obj=>{
                                        obj.empiricalValueAddss = []
                                    })
                                }
                            })
                            this.inspectionItems = proList
                        }).catch(error=>{
                            console.log(error);
                        })
                    }
                }).catch(error=>{
                    console.log(error)
                })
            },
            selectInfoByOrderId() {
                chooseMater({
                        orderNumber: this.processInspectVo.orderNumber
                    }).then(res => {
                    if (res.data.data != null) {
                        this.optionsSamplename = res.data.data.children
                    } else {
                        this.$message({
                            message: '没有该订单号!',
                            type: 'warning'
                        });
                        this.optionsSamplename = []
                        this.processInspectVo.materialCode = null
                        this.processInspectVo.material = null
                        this.processInspectVo.specs = null
                        this.processInspectVo.unit = null
                    }
                })
            },
            // åˆ é™¤æ£€éªŒå€¼åˆ—
            clickDeleteInspectionColumn() {
                if (this.empiricalValueAdd - 1 === 0) {
                } else {
                    if (this.empiricalValueAddMaxNumber != this.empiricalValueAdd - 1) {
                        this.empiricalValueAdd = this.empiricalValueAdd - 1;
                        this.inspectionItems.forEach(i => {
                            i.empiricalValueAddss.splice(this.empiricalValueAdd, 1);
                        });
                    }
                }
            },
            // æ·»åŠ æ£€éªŒå€¼åˆ—
            clickAddInspectionColumn() {
                this.empiricalValueAdd = this.empiricalValueAdd + 1;
            }
        },
    }
    </script>
    <style scoped>
    .finishedProduct-detail {
      width: 100%;
      height: 470px;
      padding: 10px 20px;
      display: flex;
      border: 1px solid #ddd;
      background-color: #fff;
      margin-top: 10px;
      box-sizing: border-box;
      flex-wrap: wrap;
    }
    .finishedProduct-result {
      width: 100%;
      height: 150px;
      padding: 10px 20px;
      display: flex;
      border: 1px solid #ddd;
      background-color: #fff;
      margin-top: 10px;
      box-sizing: border-box;
      flex-wrap: wrap;
    }
    .finishedProduct-basic {
      background-color: #fff;
      height: 155px;
      display: flex;
      flex-wrap: wrap;
      padding: 10px 20px;
      border: 1px solid #ddd;
      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;
    }
    </style>
src/views/quality/rawMaterial/index.vue
@@ -233,7 +233,10 @@
        addOrUpdateHandle(row) {
            this.$router.push({
                name: 'rawMaterialForm',
                query: { id: row == null ? null : row.id }
                query: {
                    id: row == null ? null : row.id,
                    resultVal: row == null ? null : row.judgeState
                 }
            })
        },
        formatInsState(row, column, cellValue){
src/views/quality/rawMaterial/rawMaterial-form.vue
@@ -3,7 +3,8 @@
    <div class="page-header">
      <div class="header-left">
        <a @click="$router.go(-1)"><i class="icon-btn-back"></i></a>
        <h2>编辑-原材料检验</h2>
        <h2 v-if="resultVal!=null && dataForm.id!=null">查看-原材料检验</h2>
        <h2 v-else>编辑-原材料检验</h2>
      </div>
      <div class="btn-group header-right">
        <el-button @click="save()" v-if="this.dataForm.id==null">保存</el-button>
@@ -21,10 +22,11 @@
            <el-row>
              <el-col :span="6">
                <el-form-item label="零件号" prop="code">
                <el-input v-model="dataForm.code">
                <el-input v-model="dataForm.code" :disabled="resultVal!=null && dataForm.id!=null">
                  <el-button
                    slot="append"
                    icon="el-icon-search"
                    :disabled="resultVal!=null && dataForm.id!=null"
                    @click="queryCode()"></el-button>
                </el-input>
                </el-form-item>
@@ -74,14 +76,14 @@
                </el-col>
                <el-col :span="6">
                  <el-form-item label="报检日期" prop="createTime" v-if="dataForm.id!=null">
                      <el-input v-model="dataForm.createTime" />
                      <el-input v-model="dataForm.createTime" disabled />
                  </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-input v-model="dataForm.createUser" disabled />
                </el-form-item>
              </el-col>
            </el-row>
@@ -92,9 +94,9 @@
            <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>
                    <el-button v-if="dataForm.id==null" size="small" @click="clickAddLine">添加检验行</el-button>
                    <el-button v-if="resultVal==null || dataForm.id==null" size="small" @click="addTeatValueColumn()">添加检测值列</el-button>
                    <el-button v-if="resultVal==null || dataForm.id==null" size="small" @click="delTeatValueColumn()">删除检测值列</el-button>
                </div>
            </el-col>
        </el-row>
@@ -131,17 +133,17 @@
                    <template 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.testValueList[index]"
                        <el-input :disabled="scope.row.equipmentId == null ||  dataForm.id!=null" v-model="scope.row.testValueList[index]"
                          @blur="updateTestValue(scope.row)" placeholder="请输入检测值"></el-input>
                      </el-tooltip>
                    </template>
                  </el-table-column>
                  <el-table-column prop="deviceName" label="试验设备" min-width="260">
                    <template slot-scope="scope">
                      <el-select style="width:100%" v-model="scope.row.equipmentId" filterable @change="updateDevice(scope.row)">
                          <el-option v-for="(item,index) in deviceList"
                          :key="index" :value="item.id" :label="item.number +'-'+ item.name"></el-option>
                      </el-select>
                        <el-select :disabled="resultVal!=null && dataForm.id!=null" style="width:100%" v-model="scope.row.equipmentId" filterable @change="updateDevice(scope.row)">
                            <el-option v-for="(item,index) in deviceList"
                            :key="index" :value="item.id" :label="item.number +'-'+ item.name"></el-option>
                        </el-select>
                    </template>
                  </el-table-column>
                  <el-table-column fixed="right" v-if="dataForm.id != null" prop="testState" label="结论" min-width="150">
@@ -180,7 +182,7 @@
                </el-table-column>
                <el-table-column  label="操作">
                    <template>
                        <el-button type="text" @click="submitSave()" size="small">上报</el-button>
                        <el-button type="text" :disabled="resultVal!=null && dataForm.id!=null" @click="showDialog()" size="small">上报</el-button>
                    </template>
                </el-table-column>
            </el-table>
@@ -189,6 +191,25 @@
      </div>
    </div>
    <rawMaterialPartDialog :paramObj="paramObj" :currshowlist.sync="showPart"  @listenToPartEvent="selectPart" />
    <el-dialog
      title="上报"
      :visible.sync="dialogVisible"
      width="30%">
      <el-row>
        <el-col>
          <span>不合格数量:</span>
          <el-input type="number" v-model="unqualifiedNum" placeholder="请输入不合格数量"/>
        </el-col>
        <el-col>
          <span>实检数量:</span>
          <el-input type="number" placeholder="请输入实检数量" v-model="fiedNum"/>
        </el-col>
      </el-row>
      <span slot="footer" class="dialog-footer">
        <el-button @click="dialogVisible = false">取 æ¶ˆ</el-button>
        <el-button type="primary" @click="submitSave()">ç¡® å®š</el-button>
      </span>
    </el-dialog>
  </div>
</template>
@@ -199,8 +220,6 @@
  getObj,
  updateRawInsProduct,
  updateRawInspectsById,
  chooseIFS,
  selectHisByCode,
  updateDeviceById, } from '@/api/quality/rawMaterial'
  import rawMaterialPartDialog from '@/views/common/rawMaterial-part'
export default {
@@ -210,6 +229,10 @@
    },
    data(){
        return{
            fiedNum: null,
            unqualifiedNum: null,
            dialogVisible:false,
            resultVal: null,
            projectList: [],
            paramObj: {},
            IFSData: [],
@@ -259,6 +282,11 @@
    },
    mounted(){
      this.dataForm.id = this.$route.query.id
      this.resultVal = this.$route.query.resultVal
      if(this.resultVal == null){
        let val = sessionStorage.getItem("raw-resultVal")
        val == undefined ? null : this.resultVal=val
      }
      this.init()
      this.getDeviceList()
    },
@@ -285,7 +313,7 @@
          this.dataForm.supplier = param.supplier
          this.dataForm.number = param.number
          this.dataForm.message = param.message
          this.projectList = param.rawInsProducts
          this.projectList = param.rawInsProducts == null ? [] : param.rawInsProducts
        }
      },
      queryCode(){
@@ -302,28 +330,31 @@
          })
        }
      },
      showDialog(){
        this.dialogVisible = true
      },
      submitSave(){
        let pro = this.list.filter(item => {
          return item.testState == 0;
        })
        if (pro.length > 0) {
          this.$prompt('请输入不合格数量', '不合格数量', {
            confirmButtonText: '确定',
            cancelButtonText: '取消',
            inputPattern: /^\d+$/,
            inputErrorMessage: '请输入正确数字格式'
          }).then(({ value }) => {
            let data = {
          let data = {
              id: this.dataForm.id,
              number: value
              number: this.unqualifiedNum,
              toLocationNo: this.fiedNum
            }
            updateRawInspectsById(data).then(res => {
              this.$message.success("上报成功");
              if(res.data.code == 0){
                sessionStorage.setItem("raw-resultVal",data.judgeState)
                this.$message.success("上报成功");
              }
            });
          }).catch(() => {});
        }else{
          updateRawInspectsById({id:this.dataForm.id,number:0}).then(res => {
          this.$message.success("上报成功");
            if(res.data.code == 0){
              sessionStorage.setItem("raw-resultVal",res)
              this.$message.success("上报成功");
            }
        });
        }
        this.init()
@@ -405,6 +436,7 @@
              }
              this.list.push({
                equipmentId: item.equiomentId,
                deviceName: item.deviceName,
                name: item.rpName,
                required: item.required,
                testValue: item.testValue,