XiaoRuby
2023-09-24 2573c1c123a8464c312d27e380ac16d7e0ac2f11
Merge remote-tracking branch 'origin/master'

# Conflicts:
# src/assets/api/controller.js
# src/components/view/processInspection.vue
# src/main.js
# src/view/index.vue
已修改13个文件
6742 ■■■■ 文件已修改
src/assets/api/controller.js 59 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/view/Technicalindex.vue 943 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/view/finishedProductInspectionUp.vue 1039 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/view/mbom.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/view/processInspection.vue 1626 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/view/processInspectionUpdate.vue 956 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/view/rawInsDetail.vue 787 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/view/sale.vue 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/view/self-inspection.vue 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/view/standard.vue 44 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/view/technology.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main.js 131 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/view/index.vue 1060 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/api/controller.js
@@ -41,13 +41,14 @@
}
// 原材料检验
const raw = {
    selectRawInspectsList: "/rawInspect/selectRawInspectsList", //查询原材料检验单列表
    selectRawInspectsListById: "/rawInspect/selectRawInspectsListById/", //根据检验单id获取检验单详情
    updaterawInsProduct: '/rawInsProduct/updaterawInsProduct', //修改项目的检验值
    updateRawInspectsById: "/rawInspect/updateRawInspectsById/", //上报,
    rawSelectDevice: "/rawInsProduct/selectDevice", //查询设备信息
    addRawInspects: "/rawInspect/addRawInspects", // 添加
    updateDevByRpId: "/rawInsProduct/updateDevByRpId", // 更改设备
    selectRawInspectsList: "/rawInspect/selectRawInspectsList", //查询原材料检验单列表
    selectRawInspectsListById: "/rawInspect/selectRawInspectsListById/", //根据检验单id获取检验单详情
    updaterawInsProduct: '/rawInsProduct/updaterawInsProduct', //修改项目的检验值
    updateRawInspectsById: "/rawInspect/updateRawInspectsById/", //上报,
    rawSelectDevice: "/rawInsProduct/selectDevice", //查询设备信息
    addRawInspects: "/rawInspect/addRawInspects", // 添加
    updateDevByRpId: "/rawInsProduct/updateDevByRpId", // 更改设备
    rawInspectChooseIFS: "/rawInspect/chooseIFS",//通过设备编码得到信息
}
// 查询成品不合格品管理
@@ -164,26 +165,28 @@
}
const url = {
    enter: "user/enter", //登录
    ...standard,
    ...raw,
    ...laboratory,
    ...measure,
    ...finishedIns,
    ...dispose,
    ...Basicdata,
    ...unRawInspects,
    ...processInspection,
    // ...gettable,
    selectSaleList: "sale/selectSaleList", //查询销售单列表
    selectSaleDatilById: "sale/selectSaleDatilById", //根据销售单id查看详情,
    addSale: "sale/addSale", //新增销售单
    saleCheck: "sale/check", //审核销售单
    synchronization: "sale/synchronization", //同步
    updateSaleById: "sale/updateSaleById", //根据销售单id修改详情信息
    delSale: "sale/delSale", //根据销售单id删除
    delAllSale: "sale/delAllSale", //批量删除销售单,
    chooseType: "technologyTemplate/chooseType", //查询类型
    enter: "user/enter", //登录
    ...standard,
    ...raw,
    ...laboratory,
    ...measure,
    ...finishedIns,
    ...dispose,
    ...Basicdata,
    ...unRawInspects,
    ...processInspection,
    // ...gettable,
    selectSaleList: "sale/selectSaleList", //查询销售单列表
    selectSaleDatilById: "sale/selectSaleDatilById", //根据销售单id查看详情,
    addSale: "sale/addSale", //新增销售单
    saleCheck: "sale/check", //审核销售单
    exportSale: "sale/exportSale",//导出销售订单
    saleDownload: "sale/download",//下载附件
    synchronization: "sale/synchronization", //同步
    updateSaleById: "sale/updateSaleById", //根据销售单id修改详情信息
    delSale: "sale/delSale", //根据销售单id删除
    delAllSale: "sale/delAllSale", //批量删除销售单,
    chooseType: "technologyTemplate/chooseType", //查询类型
}
@@ -192,4 +195,4 @@
    Vue.prototype.$api = {
        url
    }
}
}
src/components/view/Technicalindex.vue
@@ -7,6 +7,8 @@
                    <el-button type="primary" icon="el-icon-plus" style="background: #004EA2;" @click="event">新增</el-button>
                    <!-- <el-button icon="el-icon-edit-outline" @click="modify">修改</el-button> -->
                    <el-button icon="el-icon-delete" @click="dels">删除</el-button>
                    <el-button icon="el-icon-download" @click="clickDownload">导出</el-button>
                    <el-button icon="el-icon-upload2">导入</el-button>
                </el-col>
            </el-row>
        </div>
@@ -18,7 +20,8 @@
                        <el-form-item label="类型">
                            <template>
                                <el-select v-model="value" placeholder="请选择" style="width: 560px;">
                                    <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value">
                                    <el-option v-for="item in options" :key="item.value" :label="item.label"
                                        :value="item.value">
                                    </el-option>
                                </el-select>
                            </template>
@@ -69,11 +72,12 @@
                <div class="left">
                    <el-input v-model="search.technology" suffix-icon="el-icon-search" placeholder="请输入搜索内容" size="small"
                        clearable @input="query"></el-input>
                    <el-tree :data="list" ref="tree" :props="{children: 'children',label: 'father'}" node-key="name"
                    <el-tree :data="list" ref="tree" :props="{ children: 'children', label: 'father' }" node-key="name"
                        default-expand-all @node-click="handleNodeClick" highlight-current>
                        <div class="custom-tree-node" slot-scope="{ node, data }">
                            <span><i :class="`node_i ${data.code != '[2]'?'el-icon-folder-opened':'el-icon-tickets'}`"></i>
                                {{data.code}} {{ data.name }}</span>
                            <span><i
                                    :class="`node_i ${data.code != '[2]' ? 'el-icon-folder-opened' : 'el-icon-tickets'}`"></i>
                                {{ data.code }} {{ data.name }}</span>
                        </div>
                    </el-tree>
                </div>
@@ -82,7 +86,7 @@
                    <el-table :data="tableData" style="width: 100%;overflow-y: auto;min-height: 100%" max-height="100%"
                        row-key="name" border @select-all="selectAll" @select="selectTr" ref="multipleTable"
                        @selection-change="handleSelectionChange" default-expand-all
                        :tree-props="{children: 'children', hasChildren: 'hasChildren'}">
                        :tree-props="{ children: 'children', hasChildren: 'hasChildren' }">
                        <el-table-column type="selection" width="55">
                        </el-table-column>
                        <el-table-column type="index" width="50">
@@ -90,7 +94,7 @@
                        <el-table-column prop="name" label="项目" sortable width="400px">
                            <template slot-scope="scope">
                                <el-tag>
                                    <div class="firstDiv" :style="`color: ${scope.row.children? '#16a7ff' : '#58c173'}`">
                                    <div class="firstDiv" :style="`color: ${scope.row.children ? '#16a7ff' : '#58c173'}`">
                                        {{ scope.row.children ? "01" : "02" }}
                                    </div>
                                </el-tag>
@@ -103,7 +107,8 @@
                            <template slot-scope="scope" style="text-align: center;">
                                <div v-if="!scope.row.children">
                                    <el-button type="text" size="mini" @click="childrenClick(scope.row)">编辑</el-button>
                                    <el-button type="text" size="mini" @click="deleteRow(scope.$index, scope.row)">删除</el-button>
                                    <el-button type="text" size="mini"
                                        @click="deleteRow(scope.$index, scope.row)">删除</el-button>
                                </div>
                            </template>
                        </el-table-column>
@@ -127,9 +132,10 @@
                                <el-col :span="4" style="font-size: 14px;text-align: right;">工序:</el-col>
                                <el-col :span="16" :offset="1">
                                    <template>
                                        <el-select v-model="edit.techFather" placeholder="请选择" allow-create disabled style="width: 306px;"
                                            filterable @change="workevent">
                                            <el-option v-for="(item,index) in process" :key="item.name" :label="item.name" :value="item.name">
                                        <el-select v-model="edit.techFather" placeholder="请选择" allow-create disabled
                                            style="width: 306px;" filterable @change="workevent">
                                            <el-option v-for="(item, index) in process" :key="item.name" :label="item.name"
                                                :value="item.name">
                                            </el-option>
                                        </el-select>
                                    </template>
@@ -139,9 +145,10 @@
                                <el-col :span="4" style="font-size: 14px;text-align: right;">工艺:</el-col>
                                <el-col :span="16" :offset="1">
                                    <template>
                                        <el-select v-model="edit.techName" placeholder="请选择" disabled style="width: 306px;" allow-create
                                            filterable>
                                            <el-option v-for="item in craftapi" :key="item.id" :label="item.name" :value="item.id">
                                        <el-select v-model="edit.techName" placeholder="请选择" disabled style="width: 306px;"
                                            allow-create filterable>
                                            <el-option v-for="item in craftapi" :key="item.id" :label="item.name"
                                                :value="item.id">
                                            </el-option>
                                        </el-select>
                                    </template>
@@ -189,8 +196,8 @@
                                    <el-form-item label="工序">
                                        <template>
                                            <el-select v-model="form.work" placeholder="请选择" @change="workevent">
                                                <el-option v-for="(item,index) in process" :key="item.name" :label="item.name"
                                                    :value="item.name">
                                                <el-option v-for="(item, index) in process" :key="item.name"
                                                    :label="item.name" :value="item.name">
                                                </el-option>
                                            </el-select>
                                        </template>
@@ -199,8 +206,10 @@
                                <el-col :span="11" :offset="2">
                                    <el-form-item label="工艺">
                                        <template>
                                            <el-select v-model="form.name" style="width: 95%;" placeholder="请选择" @change="craftrow">
                                                <el-option v-for="item in craftapi" :key="item.id" :label="item.name" :value="item.id">
                                            <el-select v-model="form.name" style="width: 95%;" placeholder="请选择"
                                                @change="craftrow">
                                                <el-option v-for="item in craftapi" :key="item.id" :label="item.name"
                                                    :value="item.id">
                                                </el-option>
                                            </el-select>
                                        </template>
@@ -211,8 +220,10 @@
                                <el-col :span="11">
                                    <el-form-item label="项目组">
                                        <template>
                                            <el-select v-model="form.father" placeholder="请选择" allow-create filterable @create="electadd">
                                                <el-option v-for="item in higherlevel" :key="item" :label="item" :value="item">
                                            <el-select v-model="form.father" placeholder="请选择" allow-create filterable
                                                @create="electadd">
                                                <el-option v-for="item in higherlevel" :key="item" :label="item"
                                                    :value="item">
                                                </el-option>
                                            </el-select>
                                        </template>
@@ -234,457 +245,469 @@
                        </span>
                    </el-dialog>
                </div>
                <div>
                    <el-dialog title="导出类型选择" :visible.sync="isDownload" width="30%">
                        <el-col>
                            请选择类型:
                        </el-col>
                        <el-select v-model="downloadTypeSelect" style="width: 100%;margin-top: 10px;" placeholder="请选择">
                            <el-option v-for="(a, ai) in typeTable" :key="ai" :value="a"></el-option>
                        </el-select>
                        <span slot="footer" class="dialog-footer">
                            <el-button @click="isDownload = false">取 消</el-button>
                            <el-button type="primary" @click="downloadSelect">确 定</el-button>
                        </span>
                    </el-dialog>
                </div>
            </div>
        </div>
    </div>
</template>
<script>
    export default {
        data() {
            return {
                search: {
                    type: 0,
                    technology: null,
                },
                checkTreeNode: {
                    id: '',
                },
                higherlevel: [],
                value: {},
                options: [],
                process: [],
                filterNode: [],
                list: [],
                form: {
                    father: '',
                    work: '',
                    name: '',
                    unit: '',
                    project: '',
                },
                children: [],
                modifyevent: false,
                dialogVisible: false,
                tableData: [],
                crafval: '',
                typeselect: 0,
                upData: {},
                upDia: false,
                craftapi: [],
                edit: {
                    techFather: '',
                    techName: '',
                    father: '',
                    name: '',
                    unit: '',
                    id: '',
                },
                isAllSelect: false,
                bigType: []
export default {
    data() {
        return {
            search: {
                type: 0,
                technology: null,
            },
            checkTreeNode: {
                id: '',
            },
            higherlevel: [],
            value: {},
            options: [],
            process: [],
            filterNode: [],
            list: [],
            form: {
                father: '',
                work: '',
                name: '',
                unit: '',
                project: '',
            },
            children: [],
            modifyevent: false,
            dialogVisible: false,
            isDownload: false,//导出按钮
            downloadTypeSelect: null,
            typeTable: [],
            tableData: [],
            crafval: '',
            typeselect: 0,
            upData: {},
            upDia: false,
            craftapi: [],
            edit: {
                techFather: '',
                techName: '',
                father: '',
                name: '',
                unit: '',
                id: '',
            },
            isAllSelect: false,
            bigType: []
        }
    },
    mounted() {
        this.chooseType()
    },
    methods: {
        clickDownload() {
            this.isDownload = true
            this.typeTable = []
            let data=JSON.parse(JSON.stringify(this.bigType))
            data.unshift("全部")
            this.typeTable=data
        },
        downloadSelect() {
            console.log(this.downloadTypeSelect);
        },
        handleSelectionChange() {
        },
        chooseType() {
            this.$axios.get(this.$api.url.chooseType).then(res => {
                this.bigType = res.data
                this.typeselect = res.data[0]
                this.search.type = res.data[0]
                this.selectAllleft()
                this.selectAllright()
            })
        },
        handleSelectionChange(val) {
            this.selects = val;
            this.deleteList = [];
            val.forEach((v) => {
                if (v.id !== undefined) {
                    this.deleteList.push(v.id);
                }
            });
        },
        // 全选/取消选操作
        selectAll(val) {
            this.isAllSelect = !this.isAllSelect;
            let data = this.tableData;
            this.toggleSelect(data, this.isAllSelect, "all");
        },
        //选择某行
        selectTr(selection, row) {
            this.$set(row, "isChecked", !row.isChecked);
            this.$nextTick(() => {
                this.isAllSelect = row.isChecked;
                this.toggleSelect(row, row.isChecked, "tr");
            });
        },
        toggleSelection(row, flag) {
            this.$set(row, "isChecked", flag);
            this.$nextTick(() => {
                if (flag) {
                    this.$refs.multipleTable.toggleRowSelection(row, flag);
                } else {
                    this.$refs.multipleTable.clearSelection();
                }
            });
        },
        //递归子级
        toggleSelect(data, flag, type) {
            if (type === "all") {
                if (data.length > 0) {
                    data.forEach((item) => {
                        this.toggleSelection(item, flag);
                        if (item.children && item.children.length > 0) {
                            this.toggleSelect(item.children, flag, type);
                        }
                    });
                }
            } else {
                if (data.children && data.children.length > 0) {
                    data.children.forEach((item) => {
                        item.isChecked = !item.isChecked;
                        this.$refs.multipleTable.toggleRowSelection(item, flag);
                        this.toggleSelect(item, flag, type);
                    });
                }
            }
        },
        mounted() {
            this.chooseType()
        },
        methods: {
            chooseType() {
                this.$axios.get(this.$api.url.chooseType).then(res => {
                    this.bigType = res.data
                    this.typeselect = res.data[0]
                    this.search.type = res.data[0]
                    this.selectAllleft()
                    this.selectAllright()
                })
            },
            handleSelectionChange(val) {
                this.selects = val;
                this.deleteList = [];
                val.forEach((v) => {
                    if (v.id !== undefined) {
                        this.deleteList.push(v.id);
                    }
                });
            },
            // 全选/取消选操作
            selectAll(val) {
                this.isAllSelect = !this.isAllSelect;
                let data = this.tableData;
                this.toggleSelect(data, this.isAllSelect, "all");
            },
            //选择某行
            selectTr(selection, row) {
                this.$set(row, "isChecked", !row.isChecked);
                this.$nextTick(() => {
                    this.isAllSelect = row.isChecked;
                    this.toggleSelect(row, row.isChecked, "tr");
                });
            },
            toggleSelection(row, flag) {
                this.$set(row, "isChecked", flag);
                this.$nextTick(() => {
                    if (flag) {
                        this.$refs.multipleTable.toggleRowSelection(row, flag);
                    } else {
                        this.$refs.multipleTable.clearSelection();
                    }
                });
            },
            //递归子级
            toggleSelect(data, flag, type) {
                // console.log('222');
                if (type === "all") {
                    if (data.length > 0) {
                        data.forEach((item) => {
                            this.toggleSelection(item, flag);
                            if (item.children && item.children.length > 0) {
                                this.toggleSelect(item.children, flag, type);
                            }
                        });
                    }
                } else {
                    if (data.children && data.children.length > 0) {
                        data.children.forEach((item) => {
                            item.isChecked = !item.isChecked;
                            this.$refs.multipleTable.toggleRowSelection(item, flag);
                            this.toggleSelect(item, flag, type);
                        });
                    }
                }
            },
            //---------------------------------------------------------------------------------------------------------------------------------------
            handleClose() {},
            selectDataList() {
                this.list.forEach(a => {
                    a.code = '[1]'
                    if (a.children != undefined) {
                        a.children.forEach(b => {
                            b.code = '[2]'
                            if (b.children != undefined) {
                                b.children.forEach(c => {
                                    c.code = '[3]'
                                })
                            }
                        })
                    }
                })
                this.upIndex++
            },
            //编辑
            selecTech() {
                this.$axios.get(this.$api.url.selecTech, {
                    params: {
                        id: this.upData.id
                    }
                }).then(res => {
                    this.edit = res.data[0]
                    console.log(this.edit);
                })
            },
            childrenClick(val) {
                this.upData = val
                this.selecTech()
                this.upDia = true
            },
            writeTechByIdskill() {
                // console.log(this.upData.id);
                this.$axios.post(this.$api.url.writeTechByIdskill + '?id=' + this.upData.id, {
                    name: this.edit.name,
                    father: this.edit.father,
                    techTemId: this.edit.id,
                    unit: this.edit.unit
                }, {
                    headers: {
                        "Content-Type": "application/json"
                    }
                }).then(res => {
                    /* this.selectAllright() */
                    this.$parent.removeAllTab()
                })
            },
            submitUpData() { //确定
                this.writeTechByIdskill()
                this.upDia = false
            },
            //删除
            delTechBy() {
                console.log(this.$api.url.delTechBy, this.upData.id);
                this.$axios.post(this.$api.url.delTechBy, {
                    id: this.upData.id
                }).then(res => {
                    /* this.selectAllright() */
                    this.$message.success('删除完成')
                    this.$parent.removeAllTab()
                })
            },
            deleteRow(index, rows) {
                this.tableData.splice(index, 1)
                this.upData = rows
                this.upData.id = rows.id
                this.delTechBy()
            },
            //批量删除
            delAllTechskill() {
                this.$axios.post(this.$api.url.delAllTechskill, {
                    ids: this.delete
                }).then(res => {
                    /* this.selectAllright() */
                    this.$parent.removeAllTab()
                })
            },
            dels() {
                let ee = []
                console.log(this.selects);
                this.selects.forEach(el => {
                    if (el.children) {
                        el.children.forEach(ele => {
                            ee.push(ele.id)
                        })
                    }
                })
                // cc.splice(0,1)
                this.delete = ee.join(',')
                console.log(this.delete);
                this.delAllTechskill()
                this.$message.success('删除完成')
            },
            add() {
                this.dialogVisible = false
                this.addTechMode()
                this.form = {};
            },
            electadd(value) {
                console.log(value);
                this.higherlevel.push({});
                this.form.father = value;
            },
            addTechMode() {
                this.$axios.post(this.$api.url.addTechMode, {
                    father: this.form.father,
                    name: this.form.project,
                    techTemId: this.form.name,
                    unit: this.form.unit,
                }, {
                    headers: {
                        "Content-Type": "application/json"
                    }
                }).then(res => {
                    this.$message.success('新增完成')
                    this.selectAllright()
                })
            },
            TYpe(val) {
                this.typeselect = val
                console.log(this.typeselect);
                this.selectAllleft()
            },
            edittype(val) {
                this.typeselect = val
                this.chooseTechFath()
            },
            //主体左
            selectAllleft() {
                this.$axios.get(this.$api.url.selectAllleft, {
                    params: {
                        type: this.typeselect,
                        message: this.search.technology
                    }
                }).then(res => {
                    this.list = res.data;
                    console.log(this.list);
                    this.selectDataList()
                    this.$nextTick(() => {
                        this.$refs.tree.setCurrentKey(this.list[0].children[0].name) // 默认选中节点第一个
        //---------------------------------------------------------------------------------------------------------------------------------------
        handleClose() { },
        selectDataList() {
            this.list.forEach(a => {
                a.code = '[1]'
                if (a.children != undefined) {
                    a.children.forEach(b => {
                        b.code = '[2]'
                        if (b.children != undefined) {
                            b.children.forEach(c => {
                                c.code = '[3]'
                            })
                        }
                    })
                    let one = this.list.filter(item => {
                        return item.children.length > 0
                    })[0]
                    console.log(one);
                    let name = one.children[0].id
                    this.checkTreeNode.id = name
                    console.log(name);
                    this.selectAllrightStart(name)
                    this.selectDataList();
                });
            },
            selectAllrightStart(name) {
                this.$axios.get(this.$api.url.selectAllright, {
                    params: {
                        id: name
                    }
                }).then(res => {
                    this.tableData = res.data;
                    console.log(this.tableData);
                });
            },
            //
            //查询
            query(val) {
                this.selectAllleft()
            },
            //右
            selectAllright() {
                this.$axios.get(this.$api.url.selectAllright, {
                    params: {
                        id: this.checkTreeNode.id
                    }
                }).then(res => {
                    this.tableData = res.data;
                    console.log(this.tableData);
                });
            },
            craftrow(val) {
                this.crafval = val
                this.chooseProFath()
            },
            //上级
            chooseProFath() {
                console.log(this.checkTreeNode.id);
                this.$axios.get(this.$api.url.chooseProFath, {
                    params: {
                        techTemId: this.crafval
                    }
                }).then(res => {
                    this.higherlevel = res.data;
                    console.log(this.higherlevel);
                }, {
                    headers: {
                        "Content-Type": "application/json"
                    }
                })
            },
            //工序工艺
            chooseTechFath() {
                this.$axios.get(this.$api.url.chooseTechFath, {
                    params: {
                        type: this.typeselect
                    }
                }).then(res => {
                    this.process = res.data;
                    console.log(this.process);
                }, {
                    headers: {
                        "Content-Type": "application/json"
                    }
                })
            },
            workevent(val) {
                console.log(val);
                let idx = this.process.findIndex(el => el.name === val)
                this.craftapi = this.process[idx].children
            },
            handleNodeClick(data) {
                this.checkTreeNode = data
                console.log(this.checkTreeNode.id);
                }
            })
            this.upIndex++
        },
        //编辑
        selecTech() {
            this.$axios.get(this.$api.url.selecTech, {
                params: {
                    id: this.upData.id
                }
            }).then(res => {
                this.edit = res.data[0]
            })
        },
        childrenClick(val) {
            this.upData = val
            this.selecTech()
            this.upDia = true
        },
        writeTechByIdskill() {
            this.$axios.post(this.$api.url.writeTechByIdskill + '?id=' + this.upData.id, {
                name: this.edit.name,
                father: this.edit.father,
                techTemId: this.edit.id,
                unit: this.edit.unit
            }, {
                headers: {
                    "Content-Type": "application/json"
                }
            }).then(res => {
                /* this.selectAllright() */
                this.$parent.removeAllTab()
            })
        },
        submitUpData() { //确定
            this.writeTechByIdskill()
            this.upDia = false
        },
        //删除
        delTechBy() {
            this.$axios.post(this.$api.url.delTechBy, {
                id: this.upData.id
            }).then(res => {
                /* this.selectAllright() */
                this.$message.success('删除完成')
                this.$parent.removeAllTab()
            })
        },
        deleteRow(index, rows) {
            this.tableData.splice(index, 1)
            this.upData = rows
            this.upData.id = rows.id
            this.delTechBy()
        },
        //批量删除
        delAllTechskill() {
            this.$axios.post(this.$api.url.delAllTechskill, {
                ids: this.delete
            }).then(res => {
                /* this.selectAllright() */
                this.$parent.removeAllTab()
            })
        },
        dels() {
            let ee = []
            this.selects.forEach(el => {
                if (el.children) {
                    el.children.forEach(ele => {
                        ee.push(ele.id)
                    })
                }
            })
            // cc.splice(0,1)
            this.delete = ee.join(',')
            this.delAllTechskill()
            this.$message.success('删除完成')
        },
        add() {
            this.dialogVisible = false
            this.addTechMode()
            this.form = {};
        },
        electadd(value) {
            this.higherlevel.push({});
            this.form.father = value;
        },
        addTechMode() {
            this.$axios.post(this.$api.url.addTechMode, {
                father: this.form.father,
                name: this.form.project,
                techTemId: this.form.name,
                unit: this.form.unit,
            }, {
                headers: {
                    "Content-Type": "application/json"
                }
            }).then(res => {
                this.$message.success('新增完成')
                this.selectAllright()
            },
            event() {
                this.dialogVisible = true
                this.chooseProFath()
                this.chooseTechFath()
            },
            modify() {
                this.modifyevent = true
            },
            //编辑
        }
            })
        },
        TYpe(val) {
            this.typeselect = val
            this.selectAllleft()
        },
        edittype(val) {
            this.typeselect = val
            this.chooseTechFath()
        },
        //主体左
        selectAllleft() {
            this.$axios.get(this.$api.url.selectAllleft, {
                params: {
                    type: this.typeselect,
                    message: this.search.technology
                }
            }).then(res => {
                this.list = res.data;
                this.selectDataList()
                this.$nextTick(() => {
                    this.$refs.tree.setCurrentKey(this.list[0].children[0].name) // 默认选中节点第一个
                })
                let one = this.list.filter(item => {
                    return item.children.length > 0
                })[0]
                let name = one.children[0].id
                this.checkTreeNode.id = name
                this.selectAllrightStart(name)
                this.selectDataList();
            });
        },
        selectAllrightStart(name) {
            this.$axios.get(this.$api.url.selectAllright, {
                params: {
                    id: name
                }
            }).then(res => {
                this.tableData = res.data;
            });
        },
        //
        //查询
        query(val) {
            this.selectAllleft()
        },
        //右
        selectAllright() {
            this.$axios.get(this.$api.url.selectAllright, {
                params: {
                    id: this.checkTreeNode.id
                }
            }).then(res => {
                this.tableData = res.data;
            });
        },
        craftrow(val) {
            this.crafval = val
            this.chooseProFath()
        },
        //上级
        chooseProFath() {
            this.$axios.get(this.$api.url.chooseProFath, {
                params: {
                    techTemId: this.crafval
                }
            }).then(res => {
                this.higherlevel = res.data;
            }, {
                headers: {
                    "Content-Type": "application/json"
                }
            })
        },
        //工序工艺
        chooseTechFath() {
            this.$axios.get(this.$api.url.chooseTechFath, {
                params: {
                    type: this.typeselect
                }
            }).then(res => {
                this.process = res.data;
            }, {
                headers: {
                    "Content-Type": "application/json"
                }
            })
        },
        workevent(val) {
            let idx = this.process.findIndex(el => el.name === val)
            this.craftapi = this.process[idx].children
        },
        handleNodeClick(data) {
            this.checkTreeNode = data
            this.selectAllright()
        },
        event() {
            this.dialogVisible = true
            this.chooseProFath()
            this.chooseTechFath()
        },
        modify() {
            this.modifyevent = true
        },
        //编辑
    }
}
</script>
<style scoped>
    .title .el-button {
        height: 32px;
        border: 1px solid rgba(190, 190, 190, 0.44);
        box-shadow: 0px 2px 4px rgba(220, 220, 220, 0.41);
        padding: 0 12px;
    }
.title .el-button {
    height: 32px;
    border: 1px solid rgba(190, 190, 190, 0.44);
    box-shadow: 0px 2px 4px rgba(220, 220, 220, 0.41);
    padding: 0 12px;
}
    .title {
        margin-bottom: 10px;
        padding: 0 20px;
    }
.title {
    margin-bottom: 10px;
    padding: 0 20px;
}
    .title * {
        font-size: 16px;
    }
.title * {
    font-size: 16px;
}
    .choose {
        padding: 21px 24px;
        display: flex;
        align-items: center;
        background-color: #fff;
        border-bottom: 3px solid rgb(245, 247, 251);
    }
.choose {
    padding: 21px 24px;
    display: flex;
    align-items: center;
    background-color: #fff;
    border-bottom: 3px solid rgb(245, 247, 251);
}
    .choose * {
        font-size: 14px;
    }
.choose * {
    font-size: 14px;
}
    .choose .el-button {
        height: 32px;
        border: 1px solid rgba(190, 190, 190, 0.44);
        box-shadow: 0px 2px 4px rgba(220, 220, 220, 0.41);
        padding: 0 12px;
    }
.choose .el-button {
    height: 32px;
    border: 1px solid rgba(190, 190, 190, 0.44);
    box-shadow: 0px 2px 4px rgba(220, 220, 220, 0.41);
    padding: 0 12px;
}
    .thing {
        width: 100%;
        height: calc(100% - 78px);
        background-color: #fff;
        display: flex;
    }
.thing {
    width: 100%;
    height: calc(100% - 78px);
    background-color: #fff;
    display: flex;
}
    .thing .left {
        width: 295px;
        height: calc(100% - 20px);
        border-right: 3px solid rgb(245, 247, 251);
        padding: 16px;
        overflow-y: auto;
    }
.thing .left {
    width: 295px;
    height: calc(100% - 20px);
    border-right: 3px solid rgb(245, 247, 251);
    padding: 16px;
    overflow-y: auto;
}
    .thing .left .custom-tree-node span {
        font-size: 14px;
    }
.thing .left .custom-tree-node span {
    font-size: 14px;
}
    .thing .left .custom-tree-node {
        flex: 1;
        display: flex;
        align-items: center;
        justify-content: space-between;
        font-size: 14px;
        padding-right: 8px;
    }
.thing .left .custom-tree-node {
    flex: 1;
    display: flex;
    align-items: center;
    justify-content: space-between;
    font-size: 14px;
    padding-right: 8px;
}
    .node_i {
        color: orange;
    }
.node_i {
    color: orange;
}
    .el-icon-delete {
        display: none;
        color: #004EA2;
    }
.el-icon-delete {
    display: none;
    color: #004EA2;
}
    .custom-tree-node:hover .el-icon-delete {
        display: inline;
    }
.custom-tree-node:hover .el-icon-delete {
    display: inline;
}
    .thing .right {
        width: calc(100% - 305px);
        height: calc(100% - 25px);
        overflow: hidden;
        padding: 10px;
    }
.thing .right {
    width: calc(100% - 305px);
    height: calc(100% - 25px);
    overflow: hidden;
    padding: 10px;
}
    .table_do {
        color: #004ea0;
        cursor: pointer;
    }
.table_do {
    color: #004ea0;
    cursor: pointer;
}
    .firstDiv {
        /* float: left;
.firstDiv {
    /* float: left;
  width: 20px;
  height: 20px;
  border-radius: 60px;
@@ -694,29 +717,29 @@
  display: flex;
  align-items: center;
  margin-right: 8px; */
        /* border-radius: 60px; */
    }
    /* border-radius: 60px; */
}
    .el-tag {
        border-radius: 50%;
    }
.el-tag {
    border-radius: 50%;
}
</style>
<style>
    .record_content .title .el-button * {
        font-size: 14px;
    }
.record_content .title .el-button * {
    font-size: 14px;
}
    .record_content .title .el-button--default {
        color: #004EA2;
    }
.record_content .title .el-button--default {
    color: #004EA2;
}
    .record_content .thing .left .el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content {
        background: rgba(58, 124, 253, 0.2);
        color: #004EA2;
    }
.record_content .thing .left .el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content {
    background: rgba(58, 124, 253, 0.2);
    color: #004EA2;
}
    .record_content .el-tree-node__content {
        height: 30px;
        border-radius: 2px;
    }
.record_content .el-tree-node__content {
    height: 30px;
    border-radius: 2px;
}
</style>
src/components/view/finishedProductInspectionUp.vue
@@ -24,14 +24,14 @@
                        </el-col>
                        <el-col :span="7">
                            <el-form-item label="客户名称:">
                                <el-input disabled style="width: 180px;" v-model="processInspectVo.prname" placeholder="请输入客户名称"
                                    autocomplete="off" />
                                <el-input disabled style="width: 180px;" v-model="processInspectVo.prname"
                                    placeholder="请输入客户名称" autocomplete="off" />
                            </el-form-item>
                        </el-col>
                        <el-col :span="7">
                            <el-form-item label="工程名称:">
                                <el-input disabled style="width: 180px;" v-model="processInspectVo.sname" placeholder="请输入工程名称"
                                    autocomplete="off" />
                                <el-input disabled style="width: 180px;" v-model="processInspectVo.sname"
                                    placeholder="请输入工程名称" autocomplete="off" />
                            </el-form-item>
                        </el-col>
                    </el-row>
@@ -54,8 +54,8 @@
                        </el-col>
                        <el-col :span="7">
                            <el-form-item label="产品编码:">
                                <el-input disabled style="width: 180px;" v-model="processInspectVo.mcode" placeholder="请输入产品编码"
                                    autocomplete="off" />
                                <el-input disabled style="width: 180px;" v-model="processInspectVo.mcode"
                                    placeholder="请输入产品编码" autocomplete="off" />
                            </el-form-item>
                        </el-col>
                    </el-row>
@@ -68,14 +68,14 @@
                        </el-col>
                        <el-col :span="7">
                            <el-form-item label="单位:">
                                <el-input disabled style="width: 180px;" v-model="processInspectVo.unit" placeholder="请输入产品编码"
                                    autocomplete="off" />
                                <el-input disabled style="width: 180px;" v-model="processInspectVo.unit"
                                    placeholder="请输入产品编码" autocomplete="off" />
                            </el-form-item>
                        </el-col>
                        <el-col :span="7">
                            <el-form-item label="数量:">
                                <el-input disabled style="width: 180px;" v-model="processInspectVo.quantity" placeholder="请输入数量"
                                    autocomplete="off" />
                                <el-input disabled style="width: 180px;" v-model="processInspectVo.quantity"
                                    placeholder="请输入数量" autocomplete="off" />
                            </el-form-item>
                        </el-col>
                        <el-col :span="3" style="display: flex;justify-content: end;">
@@ -88,9 +88,11 @@
        <div class="inspectionProject">
            <el-row>
                <el-col :span="12" class="inspectionProject_span">检验项目</el-col>
                <el-col v-if="!isUpBtn" :span="12" class="inspectionProject_span" style="display: flex;justify-content: end;">
                <el-col v-if="!isUpBtn" :span="12" class="inspectionProject_span"
                    style="display: flex;justify-content: end;">
                    <el-button size="mini" @click="clickDeleteInspectionColumn()">删除检验值列</el-button>
                    <el-button style="margin-right: 30px;" size="mini" @click="clickAddInspectionColumn()">添加检验值列</el-button>
                    <el-button style="margin-right: 30px;" size="mini"
                        @click="clickAddInspectionColumn()">添加检验值列</el-button>
                    <!-- <el-button
              size="mini"
              style="margin-right: 30px;"
@@ -120,8 +122,8 @@
                <el-table-column prop="dname" label="试验设备" min-width="100">
                    <template slot-scope="scope">
                        <el-button type="text" @click="clickTableSelect(scope)">{{
                            scope.row.dname == null ? "请选择" : scope.row.dname
                        }}</el-button>
                            scope.row.dname == null ? "请选择" : scope.row.dname
                        }}</el-button>
                    </template>
                </el-table-column>
                <el-table-column label="结论">
@@ -164,11 +166,11 @@
            <div class="div_device_dialog">
                <el-input placeholder="输入关键字进行过滤" v-model="filterText" style="margin-bottom: 6px;">
                </el-input>
                <el-tree class="filter-tree" :data="materialOptions" :props="defaultProps" default-expand-all highlight-current
                    @node-click="nodeClick" :filter-node-method="filterNode" ref="tree">
                <el-tree class="filter-tree" :data="materialOptions" :props="defaultProps" default-expand-all
                    highlight-current @node-click="nodeClick" :filter-node-method="filterNode" ref="tree">
                    <div class="custom-tree-node" slot-scope="{ data }">
                        <span><i
                                :class="`node_i ${data.children ? 'el-icon-folder-opened' : 'el-icon-tickets'}`"></i>{{ data.name }}</span>
                        <span><i :class="`node_i ${data.children ? 'el-icon-folder-opened' : 'el-icon-tickets'}`"></i>{{
                            data.name }}</span>
                    </div>
                </el-tree>
            </div>
@@ -181,146 +183,181 @@
</template>
<script>
    export default {
        props: ['rowInfo'],
        data() {
            return {
                isUpBtn: false,
                showUp: false,
                isAddProject: false,
                showLook: false,
                detailId: 0,
                rowInfp: {},
                search: {
                    countSize: 10,
                    pageSize: 1,
                    result: "", // 检测状态
                    name: "", // 产品名称
                    techfather: "" // 工序
                },
                optionsSamplename: [],
                inspectionTable: [],
                tableColumn: [],
                optionSoptionSprocesses: [],
                optionTechnology: [],
                inspectionTableTotal: 0,
                pageSize: 10,
                currentPage: 1,
                treeProject: [],
                // 添加列
                empiricalValueAdd: 1,
                // 编辑时存储最长的列数字,做删除判断
                empiricalValueAddMaxNumber: 0,
                showAddPage: false,
                processInspectVo: {
                    id: null,
                    material: null,
                    mcode: null,
                    prname: null,
                    sname: null,
                    orderNumber: "D-001",
                    qualityTraceability: null,
                    quantity: null,
                    specificationsModel: null,
                    unit: null,
                    technologyId: null
                },
                InspectioniD: null,
                addInspectionform: [{
                    number: "",
                    username: "",
                    projectname: "",
                    tracenumber: "",
                    code: "",
                    class: "",
                    specificationmodel: "",
                    unit: "",
                    quantity: "",
                    group: "",
                    worker: "",
                    machine: ""
                }],
                inspectionItems: [], // 新增检验项目表格
                inspectionResultForm: [{
                    id: "",
                    name: "",
                    inspecter: "",
                    conclusion: "",
                    operation: ""
                }],
                options: [],
                value: "",
                rowList: [],
                spanArr: [],
                position: 0,
                // 设备选择树显示
                centerDialogVisible: false,
                filterText: "",
                materialOptions: [],
                defaultProps: {
                    // 设备树数据设置
                    children: "children",
                    label: "name"
                },
                nodeData: {
                    id: 0,
                    name: null
                }, // node点击保存当前点击数据
                clickSelectDevice: {
                    index: null, // 点击选择存储当前行索引
                    rpId: null // 点击选择存储当前行项目Id
                }
            };
        },
        watch: {
            // filterText(val) {
            //     this.$refs.tree.filter(val);
            // }
        },
        mounted() {
            if (this.rowInfo.result != null && this.rowInfo.result != '') {
                this.isUpBtn = true
export default {
    props: ['rowInfo'],
    data() {
        return {
            isUpBtn: false,
            showUp: false,
            isAddProject: false,
            showLook: false,
            detailId: 0,
            rowInfp: {},
            search: {
                countSize: 10,
                pageSize: 1,
                result: "", // 检测状态
                name: "", // 产品名称
                techfather: "" // 工序
            },
            optionsSamplename: [],
            inspectionTable: [],
            tableColumn: [],
            optionSoptionSprocesses: [],
            optionTechnology: [],
            inspectionTableTotal: 0,
            pageSize: 10,
            currentPage: 1,
            treeProject: [],
            // 添加列
            empiricalValueAdd: 1,
            // 编辑时存储最长的列数字,做删除判断
            empiricalValueAddMaxNumber: 0,
            showAddPage: false,
            processInspectVo: {
                id: null,
                material: null,
                mcode: null,
                prname: null,
                sname: null,
                orderNumber: "D-001",
                qualityTraceability: null,
                quantity: null,
                specificationsModel: null,
                unit: null,
                technologyId: null
            },
            InspectioniD: null,
            addInspectionform: [{
                number: "",
                username: "",
                projectname: "",
                tracenumber: "",
                code: "",
                class: "",
                specificationmodel: "",
                unit: "",
                quantity: "",
                group: "",
                worker: "",
                machine: ""
            }],
            inspectionItems: [], // 新增检验项目表格
            inspectionResultForm: [{
                id: "",
                name: "",
                inspecter: "",
                conclusion: "",
                operation: ""
            }],
            options: [],
            value: "",
            rowList: [],
            spanArr: [],
            position: 0,
            // 设备选择树显示
            centerDialogVisible: false,
            filterText: "",
            materialOptions: [],
            defaultProps: {
                // 设备树数据设置
                children: "children",
                label: "name"
            },
            nodeData: {
                id: 0,
                name: null
            }, // node点击保存当前点击数据
            clickSelectDevice: {
                index: null, // 点击选择存储当前行索引
                rpId: null // 点击选择存储当前行项目Id
            }
            this.processInspectVo.material = this.rowInfo.material
            this.processInspectVo.mcode = this.rowInfo.material_code
            this.processInspectVo.orderNumber = this.rowInfo.order_number
            this.processInspectVo.qualityTraceability = this.rowInfo.quality_traceability
            this.processInspectVo.specificationsModel = this.rowInfo.specifications_model
            this.processInspectVo.unit = this.rowInfo.unit
            this.processInspectVo.quantity = this.rowInfo.quantity
            this.processInspectVo.prname = this.rowInfo.customer_name
            this.processInspectVo.sname = this.rowInfo.project_name
            this.inspectionResultForm[0].id = this.rowInfo.material_code
            this.inspectionResultForm[0].name = this.rowInfo.material
            this.inspectionResultForm[0].conclusion = this.rowInfo.result
            this.detailId = this.rowInfo.id
            this.getTableData()
            // this.getOptions();
        },
        methods: {
            // blurNode(row){
            //     console.log(11);
            //     row.isSelectDevice=false
            // },
            escalation() {
                let arr = this.inspectionItems
                let bl = false
                for (let index = 0; index < arr.length; index++) {
                    const element = arr[index];
                    if (element.dname != null && element.empiricalValueAddss[0] != '') {
                        bl = true
                        break
                    } else {
                        bl = false
                    }
        };
    },
    watch: {
        // filterText(val) {
        //     this.$refs.tree.filter(val);
        // }
    },
    mounted() {
        if (this.rowInfo.result != null && this.rowInfo.result != '') {
            this.isUpBtn = true
        }
        this.processInspectVo.material = this.rowInfo.material
        this.processInspectVo.mcode = this.rowInfo.material_code
        this.processInspectVo.orderNumber = this.rowInfo.order_number
        this.processInspectVo.qualityTraceability = this.rowInfo.quality_traceability
        this.processInspectVo.specificationsModel = this.rowInfo.specifications_model
        this.processInspectVo.unit = this.rowInfo.unit
        this.processInspectVo.quantity = this.rowInfo.quantity
        this.processInspectVo.prname = this.rowInfo.customer_name
        this.processInspectVo.sname = this.rowInfo.project_name
        this.inspectionResultForm[0].id = this.rowInfo.material_code
        this.inspectionResultForm[0].name = this.rowInfo.material
        this.inspectionResultForm[0].conclusion = this.rowInfo.result
        this.detailId = this.rowInfo.id
        this.getTableData()
        // this.getOptions();
    },
    methods: {
        // blurNode(row){
        //     console.log(11);
        //     row.isSelectDevice=false
        // },
        escalation() {
            let arr = this.inspectionItems
            let bl = false
            for (let index = 0; index < arr.length; index++) {
                const element = arr[index];
                if (element.dname != null && element.empiricalValueAddss[0] != '') {
                    bl = true
                    break
                } else {
                    bl = false
                }
                if (bl != true) {
            }
            if (bl != true) {
                this.$message({
                    message: '请先检测一项项目!',
                    type: 'warning'
                });
                return
            }
            let pro = this.inspectionItems.filter(item => {
                return item.result === 0;
            })
            if (pro.length > 0) {
                this.$prompt('请输入不合格数量', '不合格数量', {
                    confirmButtonText: '确定',
                    cancelButtonText: '取消',
                    inputPattern: /^\d+$/,
                    inputErrorMessage: '请输入正确数字格式'
                }).then(({ value }) => {
                    this.$axios.post(this.$api.url.finishedInspectUpdateFinishInspectsById, {
                        id: this.detailId,
                        number: value
                    }).then(res => {
                        if (res.code == 200) {
                            this.$message({
                                message: '上报成功',
                                type: 'success'
                            });
                            this.$parent.comBackMain(true)
                        } else {
                            this.$message({
                                message: res.message,
                                type: 'warning'
                            });
                        }
                    })
                }).catch(() => {
                    this.$message({
                        message: '请先检测一项项目!',
                        type: 'warning'
                        type: 'info',
                        message: '取消输入'
                    });
                    return
                }
                });
            } else {
                this.$axios.post(this.$api.url.finishedInspectUpdateFinishInspectsById, {
                    id: this.detailId
                }).then(res => {
@@ -332,10 +369,10 @@
                            });
                            return
                        }
                        this.$message({
                            message: '上报成功',
                            type: 'success'
                        });
                        // this.$message({
                        //     message: '上报成功',
                        //     type: 'success'
                        // });
                        this.$parent.comBackMain(true)
                    } else {
                        this.$message({
@@ -344,365 +381,365 @@
                        });
                    }
                })
            },
            changeOptionsSamplename() {
                let id = this.processInspectVo.material.split("-")[0]
                let sample = this.optionsSamplename.filter(o => {
                    return o.id == id
                })[0]
                this.processInspectVo.qualityTraceability = sample.qualityTraceability
                this.processInspectVo.mcode = sample.mcode
                this.processInspectVo.specificationsModel = sample.specifications
                this.processInspectVo.unit = sample.unit
            },
            comBack() {
                this.$parent.comBackMain()
            },
            handleClick(row) {
                this.rowInfp = row
                this.showLook = true
            },
            updateInsInfo(row) {
                this.rowInfp = row
                this.showUp = true
            },
            combackMain() {
                this.showUp = false
                this.showLook = false
            },
            searchPro() {
                this.search.countSize = this.pageSize
                this.search.pageSize = this.currentPage
                this.defaultInitializationTable()
            },
            // 点击设备树保存点击记录
            nodeClick(data) {
                if (data.id != undefined) this.nodeData = data;
            },
            // 设备树过滤搜索
            filterNode(value, data) {
                if (!value) return true;
                return data.name.indexOf(value) !== -1;
            },
            // 获取设备树内容
            getOptions(row) {
                this.$axios.get(this.$api.url.inspectionItemChooseDev, {
                    params: {
                        father: row.father,
                        name: row.name,
                        technologyId: this.processInspectVo.technologyId
                    }
                }).then(res => {
                    this.materialOptions = res.data;
                    if (this.materialOptions.length === 1 && row.did != null) {
                        this.$message({
                            message: '该项目下只有一个试验设备,无需选择!',
                            type: 'warning'
                        });
                        return
                    }
                    row.isSelectDevice = true
                });
            },
            // 点击表格选择触发
            clickTableSelect(scope) {
                this.centerDialogVisible = true;
                this.clickSelectDevice.index = scope.$index;
                this.clickSelectDevice.rpId = scope.row.id;
                this.getOptions(scope.row);
            },
            // 点击树里面的确定
            clickNodeSure(row) {
                if (this.detailId == null) {
                    this.projectTable[this.clickSelectDevice.index].deviceId = this.nodeData.id;
                    this.projectTable[this.clickSelectDevice.index].deviceName = this.nodeData.name;
                    this.centerDialogVisible = false;
                } else {
                    this.$axios.post(this.$api.url.inspectionItemUpdateDevByInsId, {
                        id: this.clickSelectDevice.rpId,
                        devId: this.nodeData.id,
                        type: 2
                    }).then(res => {
                        this.centerDialogVisible = false;
                        this.inspectionItems.forEach(a=>{
                            if(a.id == this.clickSelectDevice.rpId){
                                a.dname = this.nodeData.name
                            }
                        })
                    });
            }
        },
        changeOptionsSamplename() {
            let id = this.processInspectVo.material.split("-")[0]
            let sample = this.optionsSamplename.filter(o => {
                return o.id == id
            })[0]
            this.processInspectVo.qualityTraceability = sample.qualityTraceability
            this.processInspectVo.mcode = sample.mcode
            this.processInspectVo.specificationsModel = sample.specifications
            this.processInspectVo.unit = sample.unit
        },
        comBack() {
            this.$parent.comBackMain()
        },
        handleClick(row) {
            this.rowInfp = row
            this.showLook = true
        },
        updateInsInfo(row) {
            this.rowInfp = row
            this.showUp = true
        },
        combackMain() {
            this.showUp = false
            this.showLook = false
        },
        searchPro() {
            this.search.countSize = this.pageSize
            this.search.pageSize = this.currentPage
            this.defaultInitializationTable()
        },
        // 点击设备树保存点击记录
        nodeClick(data) {
            if (data.id != undefined) this.nodeData = data;
        },
        // 设备树过滤搜索
        filterNode(value, data) {
            if (!value) return true;
            return data.name.indexOf(value) !== -1;
        },
        // 获取设备树内容
        getOptions(row) {
            this.$axios.get(this.$api.url.inspectionItemChooseDev, {
                params: {
                    father: row.father,
                    name: row.name,
                    technologyId: this.processInspectVo.technologyId
                }
            },
            changeState(row, index) {
                if (row.did != null && row.did != '') {
                    // let val = row.empiricalValueAddss.filter(item => {
                    //     return item != '' && item != null
                    // })
                    // let eq = val.filter(item => {
                    //     return /^[^><=]/.test(item)
                    // })
                    // if (eq.length > 0) {
                    //     this.$message({
                    //         message: "检测值[" + eq + "]格式首位应包含>,<或者=",
                    //         type: 'warning'
                    //     });
                    //     return
                    // }
                    let str = ""
                    row.empiricalValueAddss.forEach(e => {
                        str += e + ","
                    })
                    if (str.slice(0, -1) === '' || str.slice(0, -1) === null || str.slice(0, -1) === undefined) {
                        return
                    }
                    this.$axios.post(this.$api.url.inspectionItemlose_focus_update, {
                        deviceId: row.did,
                        inspectionItemId: row.id,
                        inspectionValue: str.slice(0, -1)
                    }, {
                        headers: {
                            "Content-Type": "application/json"
                        }
                    }).then(res => {
                        row.result = res.data.result
                        row.username = res.data.username
                    })
                } else {
            }).then(res => {
                this.materialOptions = res.data;
                if (this.materialOptions.length === 1 && row.did != null) {
                    this.$message({
                        message: '请选择择设备!',
                        message: '该项目下只有一个试验设备,无需选择!',
                        type: 'warning'
                    });
                    return
                }
            },
            // 每页条数改变时触发 选择一页显示多少行
            handleSizeChange(val) {
                this.search.countSize = val;
                this.defaultInitializationTable();
            },
            handleSpanMethod({
                row,
                column,
                rowIndex,
                columnIndex
            }) {
                if (columnIndex === 0) {
                    const _row = this.spanArr[rowIndex];
                    const _col = _row > 0 ? 1 : 0;
                    return {
                        rowspan: _row,
                        colspan: _col
                    }
                }
                if (columnIndex === 1) {
                    const _row = this.spanArr[rowIndex];
                    const _col = _row > 0 ? 1 : 0;
                    return {
                        rowspan: _row,
                        colspan: _col
                    }
                }
            },
            // 合并表格
            mergeTable() {
                this.rowList = []
                this.spanArr = []
                this.position = 0
                this.inspectionItems.forEach((item, index) => {
                    if (index === 0) {
                        this.spanArr.push(1);
                        this.position = 0;
                    } else {
                        if (this.inspectionItems[index].father === this.inspectionItems[index - 1].father) {
                            this.spanArr[this.position] += 1;
                            this.spanArr.push(0);
                        } else {
                            this.spanArr.push(1);
                            this.position = index;
                row.isSelectDevice = true
            });
        },
        // 点击表格选择触发
        clickTableSelect(scope) {
            this.centerDialogVisible = true;
            this.clickSelectDevice.index = scope.$index;
            this.clickSelectDevice.rpId = scope.row.id;
            this.getOptions(scope.row);
        },
        // 点击树里面的确定
        clickNodeSure(row) {
            if (this.detailId == null) {
                this.projectTable[this.clickSelectDevice.index].deviceId = this.nodeData.id;
                this.projectTable[this.clickSelectDevice.index].deviceName = this.nodeData.name;
                this.centerDialogVisible = false;
            } else {
                this.$axios.post(this.$api.url.inspectionItemUpdateDevByInsId, {
                    id: this.clickSelectDevice.rpId,
                    devId: this.nodeData.id,
                    type: 2
                }).then(res => {
                    this.centerDialogVisible = false;
                    this.inspectionItems.forEach(a => {
                        if (a.id == this.clickSelectDevice.rpId) {
                            a.dname = this.nodeData.name
                        }
                    }
                    })
                });
            }
        },
        changeState(row, index) {
            if (row.did != null && row.did != '') {
                // let val = row.empiricalValueAddss.filter(item => {
                //     return item != '' && item != null
                // })
                // let eq = val.filter(item => {
                //     return /^[^><=]/.test(item)
                // })
                // if (eq.length > 0) {
                //     this.$message({
                //         message: "检测值[" + eq + "]格式首位应包含>,<或者=",
                //         type: 'warning'
                //     });
                //     return
                // }
                let str = ""
                row.empiricalValueAddss.forEach(e => {
                    str += e + ","
                })
            },
            changeOptionSoptionSprocesses() {
                this.optionTechnology = []
                let working = this.optionSoptionSprocesses.filter(item => {
                    return item.name === this.processInspectVo.techfather
                })[0]
                this.optionTechnology = working.children
            },
            addTestProjevt() {
                // this.isAddProject = true
                let val = JSON.parse(JSON.stringify(this.processInspectVo))
                val.material = this.processInspectVo.material.split("-")[1]
                val.id = this.processInspectVo.material.split("-")[0]
                this.$axios.post(this.$api.url.finishedInspectAddFinish, val, {
                if (str.slice(0, -1) === '' || str.slice(0, -1) === null || str.slice(0, -1) === undefined) {
                    return
                }
                this.$axios.post(this.$api.url.inspectionItemlose_focus_update, {
                    deviceId: row.did,
                    inspectionItemId: row.id,
                    inspectionValue: str.slice(0, -1)
                }, {
                    headers: {
                        "Content-Type": "application/json"
                    }
                }).then(res => {
                    if (res.code == 201) {
                        this.$message({
                            message: res.message,
                            type: 'warning'
                        });
                        return
                    }
                    this.detailId = res.data
                    this.inspectionResultForm[0].id = val.mcode
                    this.inspectionResultForm[0].name = val.material
                    this.getTableData()
                    row.result = res.data.result
                    row.username = res.data.username
                })
            },
            getTableData() {
                console.log(this.rowInfo);
                this.$axios.get(this.$api.url.finishedInspectSelectFinishInspectsListById, {
                    params: {
                        id: this.rowInfo.id
                    }
                }).then(res => {
                    this.processInspectVo.technologyId = res.data[0].techId
                })
                this.$axios.get(this.$api.url.inspectionItemListUser, {
                    params: {
                        id: this.detailId,
                        type: 2
                    }
                }).then(res => {
                    if (res.data.length < 1) {
                        return
                    }
                    this.inspectionItems = res.data
                    let arr = []
                    let val = JSON.parse(JSON.stringify(this.inspectionItems))
                    const uName = []
                    //转成一维数组
                    val.forEach(l => {
                        let father = l.father
                        l.children.forEach(c => {
                            c.father = father
                            c.empiricalValueAddss = []
                            if (c.inspectionValue != '' && c.inspectionValue != null) {
                                c.empiricalValueAddss = c.inspectionValue.split(",");
                            } else {
                                c.empiricalValueAddss.push("")
                            }
                            uName.push(c['username'])
                            c.isSelectDevice = false
                            arr.push(c)
                        })
                    })
                    this.inspectionItems = arr
                    let arrSort = JSON.parse(JSON.stringify(arr))
                    //根据集合对象数组长度排序
                    arrSort.sort((a, b) => {
                        if (a.empiricalValueAddss.length < b.empiricalValueAddss.length) {
                            return -1; // a排在b前面
                        } else if (a.empiricalValueAddss.length > b.empiricalValueAddss.length) {
                            return 1; // a排在b后面
                        } else {
                            return 0; // 保持相对顺序不变
                        }
                    });
                    // console.log(arrSort);
                    console.log(uName);
                    let name = [...new Set(uName)].filter(item => item !== null);
                    let rname = ''
                    name.forEach(m => {
                        rname += m + ","
                    })
                    this.inspectionResultForm[0].inspecter = rname.slice(0, -1)
                    this.empiricalValueAdd = arrSort[arrSort.length - 1].empiricalValueAddss.length
                    this.mergeTable(arr)
                })
            },
            selectSample() {
                let sample = this.optionsSamplename.filter(item => {
                    return item.name === this.processInspectVo.material
                })[0]
                this.processInspectVo.techfather = null
                this.processInspectVo.techname = null
                this.processInspectVo.materialCode = sample.code
                this.processInspectVo.specificationsModel = sample.specifications
                this.processInspectVo.unit = sample.unit
                this.optionSoptionSprocesses = []
                this.optionSoptionSprocesses = sample.children
            },
            selectInfoByOrderId() {
                this.$axios.get(this.$api.url.finishedInspectChooseMater, {
                    params: {
                        orderNumber: this.processInspectVo.orderNumber
                    }
                }).then(res => {
                    if (res.data.length > 0) {
                        console.log(res.data);
                        this.processInspectVo.sname = res.data[0].sname
                        this.processInspectVo.prname = res.data[0].prname
                        this.optionsSamplename = res.data[0].children
                    } else {
                        this.$message({
                            message: '没有该订单号!',
                            type: 'warning'
                        });
                    }
                })
            },
            // 当前页改变时触发 跳转其他页
            handleCurrentChange(val) {
                this.search.pageSize = val;
                this.defaultInitializationTable();
            },
            // 显示新增页面
            handleAddNew() {
                this.showAddPage = true;
                // this.getTableData()
            },
            // 表格初始化接口
            defaultInitializationTable() {
                this.$axios
                    .post(this.$api.url.selectProcessInspectsList, this.search)
                    .then(res => {
                        this.inspectionTableTotal = res.data.total;
                        this.inspectionTable = res.data.row;
                    });
            },
            // 添加行
            clickAddLine() {
                let obj = {
                    material: "",
                    materialCode: "",
                    orderNumber: "",
                    quantity: 0,
                    specificationsModel: "",
                    techfather: "",
                    techname: "",
                    technologyId: 0,
                    unit: ""
                };
                this.inspectionItems.push(obj);
            },
            // 删除行
            clickDeleteline(scope) {
                this.inspectionItems.splice(scope.$index, 1);
            },
            // 删除检验值列
            clickDeleteInspectionColumn() {
                if (this.empiricalValueAdd - 1 === 0) {} else {
                    if (this.empiricalValueAddMaxNumber != this.empiricalValueAdd - 1) {
                        this.empiricalValueAdd = this.empiricalValueAdd - 1;
                        this.inspectionItems.forEach(i => {
                            i.testValueList.splice(this.empiricalValueAdd, 1);
                        });
                    }
                }
            },
            // 添加检验值列
            clickAddInspectionColumn() {
                this.empiricalValueAdd = this.empiricalValueAdd + 1;
            } else {
                this.$message({
                    message: '请选择择设备!',
                    type: 'warning'
                });
            }
        },
        created() {
            this.defaultInitializationTable(); // 初始化表格数据
        // 每页条数改变时触发 选择一页显示多少行
        handleSizeChange(val) {
            this.search.countSize = val;
            this.defaultInitializationTable();
        },
        handleSpanMethod({
            row,
            column,
            rowIndex,
            columnIndex
        }) {
            if (columnIndex === 0) {
                const _row = this.spanArr[rowIndex];
                const _col = _row > 0 ? 1 : 0;
                return {
                    rowspan: _row,
                    colspan: _col
                }
            }
            if (columnIndex === 1) {
                const _row = this.spanArr[rowIndex];
                const _col = _row > 0 ? 1 : 0;
                return {
                    rowspan: _row,
                    colspan: _col
                }
            }
        },
        // 合并表格
        mergeTable() {
            this.rowList = []
            this.spanArr = []
            this.position = 0
            this.inspectionItems.forEach((item, index) => {
                if (index === 0) {
                    this.spanArr.push(1);
                    this.position = 0;
                } else {
                    if (this.inspectionItems[index].father === this.inspectionItems[index - 1].father) {
                        this.spanArr[this.position] += 1;
                        this.spanArr.push(0);
                    } else {
                        this.spanArr.push(1);
                        this.position = index;
                    }
                }
            })
        },
        changeOptionSoptionSprocesses() {
            this.optionTechnology = []
            let working = this.optionSoptionSprocesses.filter(item => {
                return item.name === this.processInspectVo.techfather
            })[0]
            this.optionTechnology = working.children
        },
        addTestProjevt() {
            // this.isAddProject = true
            let val = JSON.parse(JSON.stringify(this.processInspectVo))
            val.material = this.processInspectVo.material.split("-")[1]
            val.id = this.processInspectVo.material.split("-")[0]
            this.$axios.post(this.$api.url.finishedInspectAddFinish, val, {
                headers: {
                    "Content-Type": "application/json"
                }
            }).then(res => {
                if (res.code == 201) {
                    this.$message({
                        message: res.message,
                        type: 'warning'
                    });
                    return
                }
                this.detailId = res.data
                this.inspectionResultForm[0].id = val.mcode
                this.inspectionResultForm[0].name = val.material
                this.getTableData()
            })
        },
        getTableData() {
            console.log(this.rowInfo);
            this.$axios.get(this.$api.url.finishedInspectSelectFinishInspectsListById, {
                params: {
                    id: this.rowInfo.id
                }
            }).then(res => {
                this.processInspectVo.technologyId = res.data[0].techId
            })
            this.$axios.get(this.$api.url.inspectionItemListUser, {
                params: {
                    id: this.detailId,
                    type: 2
                }
            }).then(res => {
                if (res.data.length < 1) {
                    return
                }
                this.inspectionItems = res.data
                let arr = []
                let val = JSON.parse(JSON.stringify(this.inspectionItems))
                const uName = []
                //转成一维数组
                val.forEach(l => {
                    let father = l.father
                    l.children.forEach(c => {
                        c.father = father
                        c.empiricalValueAddss = []
                        if (c.inspectionValue != '' && c.inspectionValue != null) {
                            c.empiricalValueAddss = c.inspectionValue.split(",");
                        } else {
                            c.empiricalValueAddss.push("")
                        }
                        uName.push(c['username'])
                        c.isSelectDevice = false
                        arr.push(c)
                    })
                })
                this.inspectionItems = arr
                let arrSort = JSON.parse(JSON.stringify(arr))
                //根据集合对象数组长度排序
                arrSort.sort((a, b) => {
                    if (a.empiricalValueAddss.length < b.empiricalValueAddss.length) {
                        return -1; // a排在b前面
                    } else if (a.empiricalValueAddss.length > b.empiricalValueAddss.length) {
                        return 1; // a排在b后面
                    } else {
                        return 0; // 保持相对顺序不变
                    }
                });
                // console.log(arrSort);
                console.log(uName);
                let name = [...new Set(uName)].filter(item => item !== null);
                let rname = ''
                name.forEach(m => {
                    rname += m + ","
                })
                this.inspectionResultForm[0].inspecter = rname.slice(0, -1)
                this.empiricalValueAdd = arrSort[arrSort.length - 1].empiricalValueAddss.length
                this.mergeTable(arr)
            })
        },
        selectSample() {
            let sample = this.optionsSamplename.filter(item => {
                return item.name === this.processInspectVo.material
            })[0]
            this.processInspectVo.techfather = null
            this.processInspectVo.techname = null
            this.processInspectVo.materialCode = sample.code
            this.processInspectVo.specificationsModel = sample.specifications
            this.processInspectVo.unit = sample.unit
            this.optionSoptionSprocesses = []
            this.optionSoptionSprocesses = sample.children
        },
        selectInfoByOrderId() {
            this.$axios.get(this.$api.url.finishedInspectChooseMater, {
                params: {
                    orderNumber: this.processInspectVo.orderNumber
                }
            }).then(res => {
                if (res.data.length > 0) {
                    console.log(res.data);
                    this.processInspectVo.sname = res.data[0].sname
                    this.processInspectVo.prname = res.data[0].prname
                    this.optionsSamplename = res.data[0].children
                } else {
                    this.$message({
                        message: '没有该订单号!',
                        type: 'warning'
                    });
                }
            })
        },
        // 当前页改变时触发 跳转其他页
        handleCurrentChange(val) {
            this.search.pageSize = val;
            this.defaultInitializationTable();
        },
        // 显示新增页面
        handleAddNew() {
            this.showAddPage = true;
            // this.getTableData()
        },
        // 表格初始化接口
        defaultInitializationTable() {
            this.$axios
                .post(this.$api.url.selectProcessInspectsList, this.search)
                .then(res => {
                    this.inspectionTableTotal = res.data.total;
                    this.inspectionTable = res.data.row;
                });
        },
        // 添加行
        clickAddLine() {
            let obj = {
                material: "",
                materialCode: "",
                orderNumber: "",
                quantity: 0,
                specificationsModel: "",
                techfather: "",
                techname: "",
                technologyId: 0,
                unit: ""
            };
            this.inspectionItems.push(obj);
        },
        // 删除行
        clickDeleteline(scope) {
            this.inspectionItems.splice(scope.$index, 1);
        },
        // 删除检验值列
        clickDeleteInspectionColumn() {
            if (this.empiricalValueAdd - 1 === 0) { } else {
                if (this.empiricalValueAddMaxNumber != this.empiricalValueAdd - 1) {
                    this.empiricalValueAdd = this.empiricalValueAdd - 1;
                    this.inspectionItems.forEach(i => {
                        i.testValueList.splice(this.empiricalValueAdd, 1);
                    });
                }
            }
        },
        // 添加检验值列
        clickAddInspectionColumn() {
            this.empiricalValueAdd = this.empiricalValueAdd + 1;
        }
    },
    created() {
        this.defaultInitializationTable(); // 初始化表格数据
    }
}
</script>
<style></style>
src/components/view/mbom.vue
@@ -471,4 +471,4 @@
        height: 30px;
        border-radius: 2px;
    }
</style>
</style>
src/components/view/processInspection.vue
@@ -1,823 +1,969 @@
<template>
    <div class="content-main">
        <div v-if="!showAddPage && !showUp && !showLook" class="rawPage">
            <div class="title">
                <el-row>
                    <el-col :span="12">过程检验</el-col>
                    <el-col :span="12" style="text-align: right;">
                        <el-button @click="handleAddNew" type="primary" size="mini" icon="el-icon-plus" style="background: #004EA2; ">新增</el-button>
                        <el-button icon="el-icon-download" size="mini">导出</el-button>
                    </el-col>
                </el-row>
            </div>
            <div class="nav">
                <span>检验状态:</span>
                <el-select size="small" v-model="search.result" placeholder="请选择检测状态" style="width: 224px;margin-right: 52px;">
                    <el-option :value="''" label="全部"></el-option>
                    <el-option :value="1" label="合格"></el-option>
                    <el-option :value="0" label="不合格"></el-option>
                </el-select>
                <span>产品名称:</span>
                <el-input size="small" style="width: 224px;margin-right: 30px;" v-model="search.name" placeholder="请输入产品名称"></el-input>
                <span>工序:</span>
                <el-input size="small" style="width: 224px;margin-right: 30px;" v-model="search.techfather" placeholder="请输入工序"></el-input>
                <el-button size="mini"><span>重 置</span></el-button>
                <el-button size="mini" @click="searchPro" type="primary" style="background: #004EA2;"><span>查 询</span></el-button>
            </div>
            <div class="content-body">
                <div class="inspectionTable">
                    <el-table ref="inspectionTable" height="calc(100vh - 290px)" :cell-style="{ textAlign: 'center' }" :header-cell-style="{
                        border: '0px',
                        background: '#f5f7fa',
                        color: '#606266',
                        boxShadow: 'inset 0 1px 0 #ebeef5',
                        textAlign: 'center'
                        }" border :data="inspectionTable" style="width: 100%">
                        <el-table-column type="selection" width="50"> </el-table-column>
                        <el-table-column label="序号" type="index" width="60"></el-table-column>
                        <el-table-column prop="order_number" label="订单编号" min-width="100" />
                        <el-table-column prop="material" label="产品名称" min-width="100" />
                        <el-table-column prop="specifications_model" label="规格型号" min-width="100" />
                        <el-table-column prop="techfather" label="工序" min-width="60" />
                        <el-table-column prop="techname" label="工艺名称" min-width="100" />
                        <el-table-column prop="unit" label="单位" min-width="60" />
                        <el-table-column prop="quantity" label="数量" min-width="60" />
                        <el-table-column prop="createTime" label="报检日期" min-width="110" />
                        <el-table-column prop="name" label="报检人" min-width="80" />
                        <el-table-column prop="updateTime" label="检测日期" min-width="110" />
                        <el-table-column prop="result" label="合格状态" min-width="100">
                            <template slot-scope="scope">
                                <span style="color: #34BD66;" v-if="scope.row.result == 1">合格</span>
                                <span style="color: #E84738;" v-else-if="scope.row.result == 0">不合格</span>
                            </template>
                        </el-table-column>
                        <el-table-column label="操作" min-width="150" fixed="right">
                            <template slot-scope="scope">
                                <el-button type="text" size="small" @click="handleClick(scope.row)" style="margin-left: 0;">详情</el-button>
                                <el-button type="text" size="small">查看</el-button>
                                <el-button v-if="scope.row.result == null" type="text" size="small" style="margin-left: 0;" @click="updateInsInfo(scope.row)">编辑</el-button>
                            </template>
                        </el-table-column>
                    </el-table>
                </div>
                <!-- 分页器 -->
                <div class="pagination">
                    <el-pagination :current-page="currentPage" :page-sizes="[10, 20, 30, 40]" :page-size="pageSize" layout="total, sizes, prev, pager, next, jumper" :total="inspectionTableTotal" @size-change="handleSizeChange" @current-change="handleCurrentChange" />
                </div>
            </div>
  <div class="content-main">
    <div v-if="!showAddPage && !showUp && !showLook" class="rawPage">
      <div class="title">
        <el-row>
          <el-col :span="12">过程检验</el-col>
          <el-col :span="12" style="text-align: right;">
            <el-button @click="handleAddNew" type="primary" size="mini" icon="el-icon-plus"
              style="background: #004EA2; ">新增</el-button>
            <el-button icon="el-icon-download" size="mini">导出</el-button>
            <el-button @click="report" icon="el-icon-download" size="mini">生成报告</el-button>
          </el-col>
        </el-row>
      </div>
      <div class="nav">
        <span>检验状态:</span>
        <el-select size="small" v-model="search.result" placeholder="请选择检测状态" style="width: 224px;margin-right: 52px;">
          <el-option :value="''" label="全部"></el-option>
          <el-option :value="1" label="合格"></el-option>
          <el-option :value="0" label="不合格"></el-option>
        </el-select>
        <span>产品名称:</span>
        <el-input size="small" style="width: 224px;margin-right: 30px;" v-model="search.name"
          placeholder="请输入产品名称"></el-input>
        <span>工序:</span>
        <el-input size="small" style="width: 224px;margin-right: 30px;" v-model="search.techfather"
          placeholder="请输入工序"></el-input>
        <el-button size="mini"><span>重 置</span></el-button>
        <el-button size="mini" @click="searchPro" type="primary" style="background: #004EA2;"><span>查 询</span></el-button>
      </div>
      <div class="content-body">
        <div class="inspectionTable">
          <el-table ref="inspectionTable" height="calc(100vh - 320px)" :cell-style="{ textAlign: 'center' }"
            :header-cell-style="{
              border: '0px',
              background: '#f5f7fa',
              color: '#606266',
              boxShadow: 'inset 0 1px 0 #ebeef5',
              textAlign: 'center'
            }" border :data="inspectionTable" style="width: 100%">
            <el-table-column type="selection" width="50"> </el-table-column>
            <el-table-column label="序号" type="index" width="60"></el-table-column>
            <el-table-column prop="order_number" label="订单编号" min-width="90" />
            <el-table-column prop="material" label="产品名称" min-width="80" />
            <el-table-column prop="specifications_model" label="规格型号" min-width="60" />
            <el-table-column prop="techfather" label="工序" min-width="70" />
            <el-table-column prop="techname" label="工艺名称" min-width="70" />
            <el-table-column prop="unit" label="单位" min-width="50" />
            <el-table-column prop="quantity" label="数量" min-width="50" />
            <el-table-column prop="createTime" label="报检日期" min-width="60" />
            <el-table-column prop="name" label="报检人" min-width="50" />
            <el-table-column prop="updateTime" label="检测日期" min-width="60" />
            <el-table-column prop="result" label="合格状态" min-width="80">
              <template slot-scope="scope">
                <span style="color: #34BD66;" v-if="scope.row.result == 1">合格</span>
                <span style="color: #E84738;" v-else-if="scope.row.result == 0">不合格</span>
              </template>
            </el-table-column>
            <el-table-column label="操作" min-width="80">
              <template slot-scope="scope">
                <el-button type="text" size="small" @click="handleClick(scope.row)" style="margin-left: 0;">详情</el-button>
                <el-button type="text" size="small">查看</el-button>
                <el-button v-if="scope.row.result == null" type="text" size="small" style="margin-left: 0;"
                  @click="updateInsInfo(scope.row)">编辑</el-button>
              </template>
            </el-table-column>
          </el-table>
        </div>
        <div class="newPage" v-if="showAddPage">
            <!-- 新增页面 -->
            <div class="addInspection">
                <el-row class="header">
                    <el-col :span="12">新增过程检验单</el-col>
                    <el-col :span="12" style="text-align: right;">
                        <!-- 点击返回,当前页面值为false -->
                        <!-- <el-button type="primary" size="mini" style="background: #004EA2; "
        <!-- 分页器 -->
        <div class="pagination">
          <el-pagination :current-page="currentPage" :page-sizes="[10, 20, 30, 40]" :page-size="pageSize"
            layout="total, sizes, prev, pager, next, jumper" :total="inspectionTableTotal" @size-change="handleSizeChange"
            @current-change="handleCurrentChange" />
        </div>
      </div>
    </div>
    <div class="newPage" v-if="showAddPage">
      <!-- 新增页面 -->
      <div class="addInspection">
        <el-row class="header">
          <el-col :span="12">新增过程检验单</el-col>
          <el-col :span="12" style="text-align: right;">
            <!-- 点击返回,当前页面值为false -->
            <!-- <el-button type="primary" size="mini" style="background: #004EA2; "
              icon="el-icon-circle-plus-outline">新增</el-button> -->
                        <el-button @click="combackIndex" type="primary" size="mini" icon="el-icon-back" style="background: #004EA2; ">返回</el-button>
                    </el-col>
                </el-row>
                <el-form :model="processInspectVo" ref="addInspectionform" class="addInspectionform" label-position="right" label-width="120px" size="small">
                    <div class="formwrapper">
                        <el-row :gutter="230">
                            <el-col :span="7">
                                <el-form-item label="订单号:">
                                    <el-input @blur="selectInfoByOrderId" style="width: 210px;" size="small" v-model="processInspectVo.orderNumber" placeholder="请输入订单号" />
                                </el-form-item>
                            </el-col>
                            <el-col :span="7">
                                <el-form-item label="产品名称:">
                                    <el-select style="width: 210px;" size="small" @change="selectSample" v-model="processInspectVo.material" placeholder="请选择产品">
                                        <el-option v-for="item in optionsSamplename" :key="item.value" :label="item.name" :value="item.name">
                                        </el-option>
                                    </el-select>
                                </el-form-item>
                            </el-col>
                            <el-col :span="7">
                                <el-form-item label="产品编码:">
                                    <el-input style="width: 210px;" size="small" disabled v-model="processInspectVo.materialCode" placeholder="请输入产品编码" />
                                </el-form-item>
                            </el-col>
                        </el-row>
                        <el-row :gutter="230">
                            <el-col :span="7">
                                <el-form-item label="规格型号:">
                                    <el-input style="width: 210px;" size="small" disabled v-model="processInspectVo.specificationsModel" placeholder="请输入规格型号" />
                                </el-form-item>
                            </el-col>
                            <el-col :span="7">
                                <el-form-item label="工序名称:">
                                    <el-select @change="changeOptionSoptionSprocesses" v-model="processInspectVo.techfather" placeholder="请选择" style="width: 210px;" size="small">
                                        <el-option v-for="item in optionSoptionSprocesses" :key="item.name" :label="item.name" :value="item.name">
                                        </el-option>
                                    </el-select>
                                </el-form-item>
                            </el-col>
                            <el-col :span="7">
                                <el-form-item label="工艺名称:">
                                    <el-select v-model="processInspectVo.techname" placeholder="请选择" style="width: 210px;" size="small">
                                        <el-option v-for="item in optionTechnology" :key="item.id" :label="item.name" :value="item.id + '-' + item.name">
                                        </el-option>
                                    </el-select>
                                </el-form-item>
                            </el-col>
                        </el-row>
                        <el-row :gutter="230">
                            <el-col :span="7">
                                <el-form-item label="单位:">
                                    <el-input style="width: 210px;" size="small" disabled v-model="processInspectVo.unit" placeholder="请输入单位" />
                                </el-form-item>
                            </el-col>
                            <el-col :span="7">
                                <el-form-item label="数量:">
                                    <el-input style="width: 210px;" size="small" v-model="processInspectVo.quantity" placeholder="请输入数量" />
                                </el-form-item>
                            </el-col>
                            <el-col :span="10" style="display: flex;justify-content: end;">
                                <el-button type="primary" :disabled="isAddProject" @click="addTestProjevt">生成检验项目</el-button>
                            </el-col>
                        </el-row>
                    </div>
                </el-form>
            </div>
            <div class="inspectionProject">
                <el-row>
                    <el-col :span="12" class="inspectionProject_span">检验项目</el-col>
                    <el-col :span="12" class="inspectionProject_span">
                        <el-button size="mini" @click="clickDeleteInspectionColumn()">删除检验值列</el-button>
                        <el-button style="margin-right: 30px;" size="mini" @click="clickAddInspectionColumn()">添加检验值列</el-button>
                        <!-- <el-button
            <el-button @click="combackIndex" type="primary" size="mini" icon="el-icon-back"
              style="background: #004EA2; ">返回</el-button>
          </el-col>
        </el-row>
        <el-form :model="processInspectVo" ref="addInspectionform" class="addInspectionform" label-position="right"
          label-width="120px" size="small">
          <div class="formwrapper">
            <el-row :gutter="230">
              <el-col :span="7">
                <el-form-item label="订单号:">
                  <el-input @blur="selectInfoByOrderId" style="width: 210px;" size="small"
                    v-model="processInspectVo.orderNumber" placeholder="请输入订单号" />
                </el-form-item>
              </el-col>
              <el-col :span="7">
                <el-form-item label="产品名称:">
                  <el-select style="width: 210px;" size="small" @change="selectSample" v-model="processInspectVo.material"
                    placeholder="请选择产品">
                    <el-option v-for="item in optionsSamplename" :key="item.value" :label="item.name" :value="item.name">
                    </el-option>
                  </el-select>
                </el-form-item>
              </el-col>
              <el-col :span="7">
                <el-form-item label="产品编码:">
                  <el-input style="width: 210px;" size="small" disabled v-model="processInspectVo.materialCode"
                    placeholder="请输入产品编码" />
                </el-form-item>
              </el-col>
            </el-row>
            <el-row :gutter="230">
              <el-col :span="7">
                <el-form-item label="规格型号:">
                  <el-input style="width: 210px;" size="small" disabled v-model="processInspectVo.specificationsModel"
                    placeholder="请输入规格型号" />
                </el-form-item>
              </el-col>
              <el-col :span="7">
                <el-form-item label="工序名称:">
                  <el-select @change="changeOptionSoptionSprocesses" v-model="processInspectVo.techfather"
                    placeholder="请选择" style="width: 210px;" size="small">
                    <el-option v-for="item in optionSoptionSprocesses" :key="item.name" :label="item.name"
                      :value="item.name">
                    </el-option>
                  </el-select>
                </el-form-item>
              </el-col>
              <el-col :span="7">
                <el-form-item label="工艺名称:">
                  <el-select v-model="processInspectVo.techname" placeholder="请选择" style="width: 210px;" size="small">
                    <el-option v-for="item in optionTechnology" :key="item.id" :label="item.name"
                      :value="item.id + '-' + item.name">
                    </el-option>
                  </el-select>
                </el-form-item>
              </el-col>
            </el-row>
            <el-row :gutter="230">
              <el-col :span="7">
                <el-form-item label="单位:">
                  <el-input style="width: 210px;" size="small" disabled v-model="processInspectVo.unit"
                    placeholder="请输入单位" />
                </el-form-item>
              </el-col>
              <el-col :span="7">
                <el-form-item label="数量:">
                  <el-input style="width: 210px;" size="small" v-model="processInspectVo.quantity" placeholder="请输入数量" />
                </el-form-item>
              </el-col>
              <el-col :span="10" style="display: flex;justify-content: end;">
                <el-button type="primary" :disabled="isAddProject" @click="addTestProjevt">生成检验项目</el-button>
              </el-col>
            </el-row>
          </div>
        </el-form>
      </div>
      <div class="inspectionProject">
        <el-row>
          <el-col :span="12" class="inspectionProject_span">检验项目</el-col>
          <el-col :span="12" class="inspectionProject_span">
            <el-button size="mini" @click="clickDeleteInspectionColumn()">删除检验值列</el-button>
            <el-button style="margin-right: 30px;" size="mini" @click="clickAddInspectionColumn()">添加检验值列</el-button>
            <!-- <el-button
              size="mini"
              style="margin-right: 30px;"
              @click="clickAddLine()"
              >添加检验行</el-button
            > -->
                    </el-col>
                </el-row>
                <el-table border :data="inspectionItems" max-height="420" :span-method="handleSpanMethod" height="calc(100vh - 550px)" style="width: 100%">
                    <el-table-column type="index" label="序号" width="60"></el-table-column>
                    <el-table-column label="项目" prop="father"></el-table-column>
                    <el-table-column prop="name" label="指标"></el-table-column>
                    <el-table-column prop="unit" label="单位"></el-table-column>
                    <el-table-column prop="required" label="标准值"></el-table-column>
                    <el-table-column prop="internal" label="内测值"></el-table-column>
                    <el-table-column prop="inspectionValue" v-for="(item, index) in empiricalValueAdd" :key="index" label="检测值" min-width="100" style="text-align: center;">
                        <template slot-scope="scope">
                            <el-tooltip :disabled="scope.row.dname != null" class="item" effect="dark" content="请先选择设备!" placement="top-start">
                                <el-input :disabled="scope.row.dname === null" v-model="scope.row.empiricalValueAddss[index]" @blur="changeState(scope.row, index)" placeholder="请输入检测值"></el-input>
                            </el-tooltip>
                        </template>
                    </el-table-column>
                    <el-table-column prop="dname" label="试验设备" min-width="100">
                        <template slot-scope="scope">
                            <el-button v-if="!scope.row.isSelectDevice" type="text" @click="clickTableSelect(scope)">{{
          </el-col>
        </el-row>
        <el-table border :data="inspectionItems" max-height="420" :span-method="handleSpanMethod"
          height="calc(100vh - 550px)" style="width: 100%">
          <el-table-column type="index" label="序号" width="60"></el-table-column>
          <el-table-column label="项目" prop="father"></el-table-column>
          <el-table-column prop="name" label="指标"></el-table-column>
          <el-table-column prop="unit" label="单位"></el-table-column>
          <el-table-column prop="required" label="标准值"></el-table-column>
          <el-table-column prop="internal" label="内测值"></el-table-column>
          <el-table-column prop="inspectionValue" v-for="(item, index) in empiricalValueAdd" :key="index" label="检测值"
            min-width="100" style="text-align: center;">
            <template slot-scope="scope">
              <el-tooltip :disabled="scope.row.dname != null" class="item" effect="dark" content="请先选择设备!"
                placement="top-start">
                <el-input :disabled="scope.row.dname === null" v-model="scope.row.empiricalValueAddss[index]"
                  @blur="changeState(scope.row, index)" placeholder="请输入检测值"></el-input>
              </el-tooltip>
            </template>
          </el-table-column>
          <el-table-column prop="dname" label="试验设备" min-width="100">
            <template slot-scope="scope">
              <el-button v-if="!scope.row.isSelectDevice" type="text" @click="clickTableSelect(scope)">{{
                scope.row.dname == null ? "请选择" : scope.row.dname
              }}</el-button>
                            <el-select v-if="scope.row.isSelectDevice" style="width: 100%;" @change="clickNodeSure(scope.row)" v-model="filterText" placeholder="请选择">
                                <el-option v-for="item in materialOptions" :key="item.id" :label="item.device" :value="item.id">
                                </el-option>
                            </el-select>
                        </template>
                    </el-table-column>
                    <el-table-column label="结论">
                        <template slot-scope="scope">
                            <span style="color: #34BD66;" v-if="scope.row.result === 1">合格</span>
                            <span style="color: #E84738;" v-else-if="scope.row.result === 0">不合格</span>
                            <span v-show="scope.row.result === null">暂未结论</span>
                        </template>
                    </el-table-column>
                    <!-- <el-table-column v-if="detailId == null" label="操作" width="100">
              <el-select v-if="scope.row.isSelectDevice" style="width: 100%;" @change="clickNodeSure(scope.row)"
                v-model="filterText" placeholder="请选择">
                <el-option v-for="item in materialOptions" :key="item.id" :label="item.device" :value="item.id">
                </el-option>
              </el-select>
            </template>
          </el-table-column>
          <el-table-column label="结论">
            <template slot-scope="scope">
              <span style="color: #34BD66;" v-if="scope.row.result === 1">合格</span>
              <span style="color: #E84738;" v-else-if="scope.row.result === 0">不合格</span>
              <span v-show="scope.row.result === null">暂未结论</span>
            </template>
          </el-table-column>
          <!-- <el-table-column v-if="detailId == null" label="操作" width="100">
            <template slot-scope="scope">
              <el-button type="text" @click="clickDeleteline(scope)">删除</el-button>
            </template>
          </el-table-column> -->
                </el-table>
            </div>
            <div class="inspectionResult">
                <span>检测结果</span>
                <el-table :data="inspectionResultForm">
                    <el-table-column prop="id" label="物料编号"></el-table-column>
                    <el-table-column prop="name" label="物料名称"></el-table-column>
                    <el-table-column prop="inspecter" label="检验员"></el-table-column>
                    <el-table-column prop="conclusion" label="检验结论"></el-table-column>
                    <el-table-column prop="operation" label="上报"></el-table-column>
                </el-table>
            </div>
            <el-dialog title="请选择设备" :visible.sync="centerDialogVisible" width="20%">
                <div class="div_device_dialog">
                    <el-select style="width: 100%;" @change="clickNodeSure()" v-model="filterText" placeholder="请选择">
                        <el-option v-for="item in materialOptions" :key="item.id" :label="item.device" :value="item.id">
                        </el-option>
                    </el-select>
                </div>
            </el-dialog>
        </el-table>
      </div>
      <div class="inspectionResult">
        <span>检测结果</span>
        <el-table :data="inspectionResultForm">
          <el-table-column prop="id" label="物料编号"></el-table-column>
          <el-table-column prop="name" label="物料名称"></el-table-column>
          <el-table-column prop="inspecter" label="检验员"></el-table-column>
          <el-table-column prop="conclusion" label="检验结论"></el-table-column>
          <el-table-column prop="operation" label="上报"></el-table-column>
        </el-table>
      </div>
      <el-dialog title="请选择设备" :visible.sync="centerDialogVisible" width="20%">
        <div class="div_device_dialog">
          <el-select style="width: 100%;" @change="clickNodeSure()" v-model="filterText" placeholder="请选择">
            <el-option v-for="item in materialOptions" :key="item.id" :label="item.device" :value="item.id">
            </el-option>
          </el-select>
        </div>
        <div class="newPage" v-if="showUp">
            <processInspectionUpdate :rowInfo="rowInfp" />
        </div>
        <div class="newPage" v-if="showLook">
            <processInspectionLook :rowInfo="rowInfp" />
        </div>
      </el-dialog>
    </div>
    <div class="newPage" v-if="showUp">
      <processInspectionUpdate :rowInfo="rowInfp" />
    </div>
    <div class="newPage" v-if="showLook">
      <processInspectionLook :rowInfo="rowInfp" />
    </div>
    <!-- <div class="newPage" v-if="reportlook">
      <index />
    </div> -->
    <el-dialog
     title="过程检验报告" :visible.sync="reportlook"  width="40%">
     <template>
    <div ref="print">
      <div style="margin:0 auto;">
          <!-- <div style="text-align:center;margin-top:10px;">过程检验报告</div> -->
    <table class="table table-striped table-bordered" align="center" border style="width: 100%;height: 700px;" valign="center">
      <tr>
        <td class="column" colspan="2" rowspan="2" > </td>
        <td class="column" colspan="2" ><p>记录名称:检验记录表</p>Table: Inspection Record</td>
        <td class="column" colspan="2"><p>保存期限:25年</p> Storage Life: 25 years</td>
      </tr>
      <tr>
          <td  class="column" colspan="2" > 记录编号</td>
          <td  class="column" colspan="2" > 归档部门</td>
      </tr>
      <tr>
        <td class="column"><p>零件名称</p> Part Description</td>
        <td  class="value"></td>
        <td class="column"><p>型号</p> Model</td>
        <td class="value"></td>
        <td class="column"><p>加工单号</p> Order No</td>
        <td class="value"></td>
      </tr>
      <tr>
        <td class="column"><p>检验仪器</p> Inspection instrument</td>
        <td class="value"></td>
        <td class="column"><p>检验数量</p> Quantity to check</td>
        <td class="value"></td>
        <td class="column"><p>供货单位</p> Supplier</td>
        <td class="value"></td>
      </tr>
      <tr>
        <td class="column"><p>检验项目</p> Inspection Item</td>
        <td class="column" colspan="3"><p><p>检验结果(实测值)</p> Test result (Measured value)</p></td>
        <td class="column" rowspan="2" colspan="2"><p>判定</p> Conclusion</td>
      </tr>
      <tr>
        <td class="column"><p>技术要求</p> Technical Requirement</td>
        <td class="column"><p>公差</p> TOL</td>
        <!-- <td class="daughter" >01</td> -->
      </tr>
      <tr>
        <td class="column"  rowspan="9" colspan="0.5">尺寸</td>
        <td class="value" ></td>
        <td class="column"></td>
        <td class="value" ></td>
      </tr>
      <tr>
        <td class="column"></td>
        <td class="value" colspan="3"></td>
        <td class="column"></td>
      </tr>
      <tr>
        <td class="value" colspan="2"></td>
        <td class="value" colspan="2"></td>
        <td class="value" colspan="2"></td>
      </tr>
      <tr>
        <td class="value" colspan="2"></td>
        <td class="value" colspan="2"></td>
        <td class="value" colspan="2"></td>
      </tr>
      <tr>
        <td class="column" colspan="6"></td>
      </tr>
      <tr>
        <td class="value" colspan="2"></td>
        <td class="value" colspan="2"></td>
        <td class="value" colspan="2"></td>
      </tr>
      <tr>
        <td class="value" colspan="2"></td>
        <td class="value" colspan="2"></td>
        <td class="value" colspan="2"></td>
      </tr>
      <tr>
        <td class="value" colspan="2"></td>
        <td class="value" colspan="2"></td>
        <td class="value" colspan="2"></td>
      </tr>
       <tr>
        <td class="value" colspan="2"></td>
        <td class="value" colspan="2"></td>
        <td class="value" colspan="2"></td>
      </tr>
      <tr>
        <td class="column">材质</td>
        <td class="value" colspan="5"></td>
      </tr>
      <tr >
        <td class="column" >外观性能</td>
        <td class="value" colspan="5" style="text-align:left;">
          <br>
          <br>
          <br>
          <br>
        </td>
      </tr>
      <tr>
        <td class="column">备注</td>
        <td class="value" colspan="5">
          <br>
          <br>
          <br>
          <br>
        </td>
      </tr>
    </table>
      </div>
    </div>
  </template>
    </el-dialog>`
  </div>
</template>
<script>
import processInspectionUpdate from "../view/processInspectionUpdate.vue";
import processInspectionLook from "../view/processInspectionLook.vue";
import processInspectionUpdate from '../view/processInspectionUpdate.vue'
import processInspectionLook from '../view/processInspectionLook.vue'
// import index from '../view/report/index.vue'
export default {
    components: {
        processInspectionUpdate,
        processInspectionLook,
  components: {
    processInspectionUpdate,
    processInspectionLook,
    // index
  },
  data() {
    return {
      showUp: false,
      isAddProject: false,
      showLook: false,
      reportlook: false,
      detailId: 28,
      rowInfp: {},
      search: {
        countSize: 10,
        pageSize: 1,
        result: "", // 检测状态
        name: "", // 产品名称
        techfather: "" // 工序
      },
      optionsSamplename: [],
      inspectionTable: [],
      tableColumn: [],
      optionSoptionSprocesses: [],
      optionTechnology: [],
      inspectionTableTotal: 0,
      pageSize: 10,
      currentPage: 1,
      treeProject: [],
      // 添加列
      empiricalValueAdd: 1,
      // 编辑时存储最长的列数字,做删除判断
      empiricalValueAddMaxNumber: 0,
      showAddPage: false,
      processInspectVo: {
        material: null,
        materialCode: null,
        orderNumber: "",
        quantity: null,
        specificationsModel: null,
        techfather: null,
        techname: null,
        technologyId: null,
        unit: null
      },
      InspectioniD: null,
      addInspectionform: [
        {
          number: "",
          username: "",
          projectname: "",
          tracenumber: "",
          code: "",
          class: "",
          specificationmodel: "",
          unit: "",
          quantity: "",
          group: "",
          worker: "",
          machine: ""
        }]
      ,
      inspectionItems: [], // 新增检验项目表格
      inspectionResultForm: [
        {
          id: "",
          name: "",
          inspecter: "",
          conclusion: "",
          operation: ""
        }
      ],
      options: [],
      value: "",
      rowList: [],
      spanArr: [],
      position: 0,
      // 设备选择树显示
      centerDialogVisible: false,
      filterText: "",
      materialOptions: [],
      defaultProps: {
        // 设备树数据设置
        children: "children",
        label: "name"
      },
      nodeData: {
        id: 0,
        name: null
      }, // node点击保存当前点击数据
      clickSelectDevice: {
        index: null, // 点击选择存储当前行索引
        rpId: null // 点击选择存储当前行项目Id
      }
    };
  },
  watch: {
    // filterText(val) {
    //   this.$refs.tree.filter(val);
    // }
  },
  mounted() {
    // this.getTableData()
    // this.getOptions();
  },
  methods: {
    report() {
      this.reportlook = true
      // this.$nextTick(() => {
      //          this.$print(this.$refs.print);
      //      })
    },
    data() {
        return {
            showUp: false,
            isAddProject: false,
            showLook: false,
            detailId: 28,
            rowInfp: {},
            search: {
                countSize: 10,
                pageSize: 1,
                result: "", // 检测状态
                name: "", // 产品名称
                techfather: "", // 工序
            },
            optionsSamplename: [],
            inspectionTable: [],
            tableColumn: [],
            optionSoptionSprocesses: [],
            optionTechnology: [],
            inspectionTableTotal: 0,
            pageSize: 10,
            currentPage: 1,
            treeProject: [],
            // 添加列
            empiricalValueAdd: 1,
            // 编辑时存储最长的列数字,做删除判断
            empiricalValueAddMaxNumber: 0,
            showAddPage: false,
            processInspectVo: {
                material: null,
                materialCode: null,
                orderNumber: "",
                quantity: null,
                specificationsModel: null,
                techfather: null,
                techname: null,
                technologyId: null,
                unit: null,
            },
            InspectioniD: null,
            addInspectionform: [
                {
                    number: "",
                    username: "",
                    projectname: "",
                    tracenumber: "",
                    code: "",
                    class: "",
                    specificationmodel: "",
                    unit: "",
                    quantity: "",
                    group: "",
                    worker: "",
                    machine: "",
                },
            ],
            inspectionItems: [], // 新增检验项目表格
            inspectionResultForm: [
                {
                    id: "",
                    name: "",
                    inspecter: "",
                    conclusion: "",
                    operation: "",
                },
            ],
            options: [],
            value: "",
            rowList: [],
            spanArr: [],
            position: 0,
            // 设备选择树显示
            centerDialogVisible: false,
            filterText: "",
            materialOptions: [],
            defaultProps: {
                // 设备树数据设置
                children: "children",
                label: "name",
            },
            nodeData: {
                id: 0,
                name: null,
            }, // node点击保存当前点击数据
            clickSelectDevice: {
                index: null, // 点击选择存储当前行索引
                rpId: null, // 点击选择存储当前行项目Id
            },
        };
    handleClick(row) {
      this.rowInfp = row
      this.showLook = true
    },
    watch: {
        // filterText(val) {
        //   this.$refs.tree.filter(val);
    combackIndex() {
      this.showAddPage = false
      this.defaultInitializationTable()
    },
    updateInsInfo(row) {
      this.rowInfp = row
      this.showUp = true
    },
    combackMain(val) {
      this.showUp = false
      this.showLook = false
      this.defaultInitializationTable(); // 初始化表格数据
      if (val) {
        this.$parent.removeAllTab()
      }
    },
    searchPro() {
      this.search.countSize = this.pageSize
      this.search.pageSize = this.currentPage
      this.defaultInitializationTable()
    },
    // 点击设备树保存点击记录
    nodeClick(data) {
      if (data.id != undefined) this.nodeData = data;
    },
    // 设备树过滤搜索
    filterNode(value, data) {
      if (!value) return true;
      return data.name.indexOf(value) !== -1;
    },
    // 获取设备树内容
    getOptions(row) {
      this.$axios.get(this.$api.url.inspectionItemChooseDev, {
        params: {
          father: row.father,
          name: row.name,
          technologyId: this.processInspectVo.technologyId
        }
      }).then(res => {
        this.materialOptions = res.data;
        if (this.materialOptions.length === 1) {
          this.$message({
            message: '该项目下只有一个试验设备,无需选择!',
            type: 'warning'
          });
          return
        }
        row.isSelectDevice = true
        this.filterText = row.did
      });
    },
    // 点击表格选择触发
    clickTableSelect(scope) {
      // this.centerDialogVisible = true;
      if (this.clickSelectDevice.index != null) {
        this.$set(this.inspectionItems[this.clickSelectDevice.index], 'isSelectDevice', false)
      }
      this.clickSelectDevice.index = scope.$index;
      this.clickSelectDevice.rpId = scope.row.id;
      this.getOptions(scope.row)
    },
    // 点击树里面的确定
    clickNodeSure() {
      let select = this.materialOptions.filter(item => {
        return item.id === this.filterText
      })[0]
      this.nodeData.id = select.id
      this.nodeData.name = select.device
      if (this.detailId == null) {
        this.inspectionItems[
          this.clickSelectDevice.index
        ].did = this.nodeData.id;
        this.inspectionItems[
          this.clickSelectDevice.index
        ].dname = this.nodeData.name;
        this.centerDialogVisible = false;
      } else {
        this.$axios
          .post(this.$api.url.inspectionItemUpdateDevByInsId, {
            id: this.clickSelectDevice.rpId,
            type: 1,
            devId: this.nodeData.id
          })
          .then(res => {
            this.getTableData()
            this.centerDialogVisible = false;
          });
      }
    },
    changeState(row, index) {
      if (row.did != null && row.did != '') {
        // let val = row.empiricalValueAddss.filter(item => {
        //   return item != '' && item != null
        // })
        // let eq = val.filter(item => {
        //   return /^[^><=]/.test(item)
        // })
        // if (eq.length > 0) {
        //   this.$message({
        //     message: "检测值[" + eq + "]格式首位应包含>,<或者=",
        //     type: 'warning'
        //   });
        //   return
        // }
    },
    mounted() {
        // this.getTableData()
        // this.getOptions();
    },
    methods: {
        handleClick(row) {
            this.rowInfp = row;
            this.showLook = true;
        },
        combackIndex() {
            this.showAddPage = false;
            this.defaultInitializationTable();
        },
        updateInsInfo(row) {
            this.rowInfp = row;
            this.showUp = true;
        },
        combackMain(val) {
            this.showUp = false;
            this.showLook = false;
            this.defaultInitializationTable(); // 初始化表格数据
            if (val) {
                this.$parent.removeAllTab();
            }
        },
        searchPro() {
            this.search.countSize = this.pageSize;
            this.search.pageSize = this.currentPage;
            this.defaultInitializationTable();
        },
        // 点击设备树保存点击记录
        nodeClick(data) {
            if (data.id != undefined) this.nodeData = data;
        },
        // 设备树过滤搜索
        filterNode(value, data) {
            if (!value) return true;
            return data.name.indexOf(value) !== -1;
        },
        // 获取设备树内容
        getOptions(row) {
            this.$axios
                .get(this.$api.url.inspectionItemChooseDev, {
                    params: {
                        father: row.father,
                        name: row.name,
                        technologyId: this.processInspectVo.technologyId,
                    },
                })
                .then((res) => {
                    this.materialOptions = res.data;
                    if (this.materialOptions.length === 1) {
                        this.$message({
                            message: "该项目下只有一个试验设备,无需选择!",
                            type: "warning",
                        });
                        return;
                    }
                    row.isSelectDevice = true;
                    this.filterText = row.did;
                });
        },
        // 点击表格选择触发
        clickTableSelect(scope) {
            // this.centerDialogVisible = true;
            if (this.clickSelectDevice.index != null) {
                this.$set(
                    this.inspectionItems[this.clickSelectDevice.index],
                    "isSelectDevice",
                    false
                );
            }
            this.clickSelectDevice.index = scope.$index;
            this.clickSelectDevice.rpId = scope.row.id;
            this.getOptions(scope.row);
        },
        // 点击树里面的确定
        clickNodeSure() {
            let select = this.materialOptions.filter((item) => {
                return item.id === this.filterText;
            })[0];
            this.nodeData.id = select.id;
            this.nodeData.name = select.device;
            if (this.detailId == null) {
                this.inspectionItems[this.clickSelectDevice.index].did =
                    this.nodeData.id;
                this.inspectionItems[this.clickSelectDevice.index].dname =
                    this.nodeData.name;
                this.centerDialogVisible = false;
            } else {
                this.$axios
                    .post(this.$api.url.inspectionItemUpdateDevByInsId, {
                        id: this.clickSelectDevice.rpId,
                        type: 1,
                        devId: this.nodeData.id,
                    })
                    .then((res) => {
                        this.getTableData();
                        this.centerDialogVisible = false;
                    });
            }
        },
        changeState(row, index) {
            if (row.did != null && row.did != "") {
                // let val = row.empiricalValueAddss.filter(item => {
                //   return item != '' && item != null
                // })
                // let eq = val.filter(item => {
                //   return /^[^><=]/.test(item)
                // })
                // if (eq.length > 0) {
                //   this.$message({
                //     message: "检测值[" + eq + "]格式首位应包含>,<或者=",
                //     type: 'warning'
                //   });
                //   return
                // }
                let str = "";
                row.empiricalValueAddss.forEach((e) => {
                    str += e + ",";
                });
                if (
                    str.slice(0, -1) === "" ||
                    str.slice(0, -1) === null ||
                    str.slice(0, -1) === undefined
                ) {
                    return;
                }
                this.$axios
                    .post(
                        this.$api.url.inspectionItemlose_focus_update,
                        {
                            deviceId: row.did,
                            inspectionItemId: row.id,
                            inspectionValue: str.slice(0, -1),
                        },
                        {
                            headers: { "Content-Type": "application/json" },
                        }
                    )
                    .then((res) => {
                        if (res.message === "内控值输入格式有问题!") {
                            this.$message({
                                message: res.message,
                                type: "warning",
                            });
                            return;
                        }
                        row.result = res.data.result;
                        row.username = res.data.username;
                    });
            } else {
                this.$message({
                    message: "请选择择设备!",
                    type: "warning",
                });
            }
        },
        // 每页条数改变时触发 选择一页显示多少行
        handleSizeChange(val) {
            this.search.countSize = val;
            this.defaultInitializationTable();
        },
        handleSpanMethod({ row, column, rowIndex, columnIndex }) {
            if (columnIndex === 0) {
                const _row = this.spanArr[rowIndex];
                const _col = _row > 0 ? 1 : 0;
                return {
                    rowspan: _row,
                    colspan: _col,
                };
            }
            if (columnIndex === 1) {
                const _row = this.spanArr[rowIndex];
                const _col = _row > 0 ? 1 : 0;
                return {
                    rowspan: _row,
                    colspan: _col,
                };
            }
        },
        // 合并表格
        mergeTable() {
            this.rowList = [];
            this.spanArr = [];
            this.position = 0;
            this.inspectionItems.forEach((item, index) => {
                if (index === 0) {
                    this.spanArr.push(1);
                    this.position = 0;
                } else {
                    if (
                        this.inspectionItems[index].father ===
                        this.inspectionItems[index - 1].father
                    ) {
                        this.spanArr[this.position] += 1;
                        this.spanArr.push(0);
                    } else {
                        this.spanArr.push(1);
                        this.position = index;
                    }
                }
        let str = ""
        row.empiricalValueAddss.forEach(e => {
          str += e + ","
        })
        if (str.slice(0, -1) === '' || str.slice(0, -1) === null || str.slice(0, -1) === undefined) {
          return
        }
        this.$axios.post(this.$api.url.inspectionItemlose_focus_update, {
          deviceId: row.did,
          inspectionItemId: row.id,
          inspectionValue: str.slice(0, -1)
        }, {
          headers: { "Content-Type": "application/json" }
        }).then(res => {
          if (res.message === '内控值输入格式有问题!') {
            this.$message({
              message: res.message,
              type: 'warning'
            });
        },
        changeOptionSoptionSprocesses() {
            this.optionTechnology = [];
            let working = this.optionSoptionSprocesses.filter((item) => {
                return item.name === this.processInspectVo.techfather;
            })[0];
            this.optionTechnology = working.children;
        },
        addTestProjevt() {
            let val = JSON.parse(JSON.stringify(this.processInspectVo));
            val.techname = this.processInspectVo.techname.split("-")[1];
            val.technologyId = this.processInspectVo.techname.split("-")[0];
            this.processInspectVo.technologyId = val.technologyId;
            this.$axios
                .post(
                    this.$api.url.processInspectAddProcess,
                    {
                        material: val.material,
                        materialCode: val.materialCode,
                        orderNumber: val.orderNumber,
                        quantity: val.quantity,
                        specificationsModel: val.specificationsModel,
                        techfather: val.techfather,
                        techname: val.techname,
                        techId: Number(val.technologyId),
                        mtId: Number(val.technologyId),
                        unit: val.unit,
                    },
                    {
                        headers: { "Content-Type": "application/json" },
                    }
                )
                .then((res) => {
                    if (res.code === 201) {
                        this.$message({
                            message: res.message,
                            type: "warning",
                        });
                        return;
                    }
                    this.isAddProject = true;
                    this.detailId = res.data;
                    this.inspectionResultForm[0].id = val.materialCode;
                    this.inspectionResultForm[0].name = val.material;
                    this.getTableData();
                });
        },
        getTableData() {
            this.$axios
                .get(this.$api.url.inspectionItemListUser, {
                    params: {
                        id: this.detailId,
                        type: 1,
                    },
                })
                .then((res) => {
                    this.inspectionItems = res.data;
                    let arr = [];
                    let val = JSON.parse(JSON.stringify(this.inspectionItems));
                    const uName = [];
                    //转成一维数组
                    val.forEach((l) => {
                        let father = l.father;
                        l.children.forEach((c) => {
                            c.father = father;
                            c.empiricalValueAddss = [];
                            if (
                                c.inspectionValue != "" &&
                                c.inspectionValue != null
                            ) {
                                c.empiricalValueAddss =
                                    c.inspectionValue.split(",");
                            } else {
                                c.empiricalValueAddss.push("");
                            }
                            uName.push(c["username"]);
                            c.isSelectDevice = false;
                            arr.push(c);
                        });
                    });
                    this.inspectionItems = arr;
                    let arrSort = JSON.parse(JSON.stringify(arr));
                    //根据集合对象数组长度排序
                    arrSort.sort((a, b) => {
                        if (
                            a.empiricalValueAddss.length <
                            b.empiricalValueAddss.length
                        ) {
                            return -1; // a排在b前面
                        } else if (
                            a.empiricalValueAddss.length >
                            b.empiricalValueAddss.length
                        ) {
                            return 1; // a排在b后面
                        } else {
                            return 0; // 保持相对顺序不变
                        }
                    });
                    // console.log(arrSort);
                    console.log(uName);
                    let name = [...new Set(uName)].filter(
                        (item) => item !== null
                    );
                    let rname = "";
                    name.forEach((m) => {
                        rname += m + ",";
                    });
                    this.inspectionResultForm[0].inspecter = rname.slice(0, -1);
                    this.empiricalValueAdd =
                        arrSort[arrSort.length - 1].empiricalValueAddss.length;
                    this.mergeTable(arr);
                });
        },
        selectSample() {
            let sample = this.optionsSamplename.filter((item) => {
                return item.name === this.processInspectVo.material;
            })[0];
            this.processInspectVo.techfather = null;
            this.processInspectVo.techname = null;
            this.processInspectVo.materialCode = sample.code;
            this.processInspectVo.specificationsModel = sample.specifications;
            this.processInspectVo.unit = sample.unit;
            this.optionSoptionSprocesses = [];
            this.optionSoptionSprocesses = sample.children;
        },
        selectInfoByOrderId() {
            this.$axios
                .get(this.$api.url.chooseMaterProcessInspect, {
                    params: {
                        orderNumber: this.processInspectVo.orderNumber,
                    },
                })
                .then((res) => {
                    if (res.data.length > 0) {
                        console.log(res.data);
                        this.optionsSamplename = res.data;
                    } else {
                        this.$message({
                            message: "没有该订单号!",
                            type: "warning",
                        });
                    }
                });
        },
        // 当前页改变时触发 跳转其他页
        handleCurrentChange(val) {
            this.search.pageSize = val;
            this.defaultInitializationTable();
        },
        // 显示新增页面
        handleAddNew() {
            this.showAddPage = true;
            // this.getTableData()
        },
        // 表格初始化接口
        defaultInitializationTable() {
            this.$axios
                .post(this.$api.url.selectProcessInspectsList, this.search)
                .then((res) => {
                    this.inspectionTableTotal = res.data.total;
                    this.inspectionTable = res.data.row;
                });
        },
        // 添加行
        clickAddLine() {
            let obj = {
                material: "",
                materialCode: "",
                orderNumber: "",
                quantity: 0,
                specificationsModel: "",
                techfather: "",
                techname: "",
                technologyId: 0,
                unit: "",
            };
            this.inspectionItems.push(obj);
        },
        // 删除行
        clickDeleteline(scope) {
            this.inspectionItems.splice(scope.$index, 1);
        },
        // 删除检验值列
        clickDeleteInspectionColumn() {
            if (this.empiricalValueAdd - 1 === 0) {
            return
          }
          row.result = res.data.result
          row.username = res.data.username
        })
      } else {
        this.$message({
          message: '请选择择设备!',
          type: 'warning'
        });
      }
    },
    // 每页条数改变时触发 选择一页显示多少行
    handleSizeChange(val) {
      this.search.countSize = val;
      this.defaultInitializationTable();
    },
    handleSpanMethod({ row, column, rowIndex, columnIndex }) {
      if (columnIndex === 0) {
        const _row = this.spanArr[rowIndex];
        const _col = _row > 0 ? 1 : 0;
        return {
          rowspan: _row,
          colspan: _col
        }
      }
      if (columnIndex === 1) {
        const _row = this.spanArr[rowIndex];
        const _col = _row > 0 ? 1 : 0;
        return {
          rowspan: _row,
          colspan: _col
        }
      }
    },
    // 合并表格
    mergeTable() {
      this.rowList = []
      this.spanArr = []
      this.position = 0
      this.inspectionItems.forEach((item, index) => {
        if (index === 0) {
          this.spanArr.push(1);
          this.position = 0;
        } else {
          if (this.inspectionItems[index].father === this.inspectionItems[index - 1].father) {
            this.spanArr[this.position] += 1;
            this.spanArr.push(0);
          } else {
            this.spanArr.push(1);
            this.position = index;
          }
        }
      })
    },
    changeOptionSoptionSprocesses() {
      this.optionTechnology = []
      let working = this.optionSoptionSprocesses.filter(item => {
        return item.name === this.processInspectVo.techfather
      })[0]
      this.optionTechnology = working.children
    },
    addTestProjevt() {
      let val = JSON.parse(JSON.stringify(this.processInspectVo))
      val.techname = this.processInspectVo.techname.split("-")[1]
      val.technologyId = this.processInspectVo.techname.split("-")[0]
      this.processInspectVo.technologyId = val.technologyId
      this.$axios.post(this.$api.url.processInspectAddProcess, {
        material: val.material,
        materialCode: val.materialCode,
        orderNumber: val.orderNumber,
        quantity: val.quantity,
        specificationsModel: val.specificationsModel,
        techfather: val.techfather,
        techname: val.techname,
        techId: Number(val.technologyId),
        mtId: Number(val.technologyId),
        unit: val.unit
      }, {
        headers: { "Content-Type": "application/json" }
      }).then(res => {
        if (res.code === 201) {
          this.$message({
            message: res.message,
            type: 'warning'
          });
          return
        }
        this.isAddProject = true
        this.detailId = res.data
        this.inspectionResultForm[0].id = val.materialCode
        this.inspectionResultForm[0].name = val.material
        this.getTableData()
      })
    },
    getTableData() {
      this.$axios.get(this.$api.url.inspectionItemListUser, {
        params: {
          id: this.detailId,
          type: 1
        }
      }).then(res => {
        this.inspectionItems = res.data
        let arr = []
        let val = JSON.parse(JSON.stringify(this.inspectionItems))
        const uName = []
        //转成一维数组
        val.forEach(l => {
          let father = l.father
          l.children.forEach(c => {
            c.father = father
            c.empiricalValueAddss = []
            if (c.inspectionValue != '' && c.inspectionValue != null) {
              c.empiricalValueAddss = c.inspectionValue.split(",");
            } else {
                if (
                    this.empiricalValueAddMaxNumber !=
                    this.empiricalValueAdd - 1
                ) {
                    this.empiricalValueAdd = this.empiricalValueAdd - 1;
                    this.inspectionItems.forEach((i) => {
                        i.testValueList.splice(this.empiricalValueAdd, 1);
                    });
                }
              c.empiricalValueAddss.push("")
            }
        },
        // 添加检验值列
        clickAddInspectionColumn() {
            this.empiricalValueAdd = this.empiricalValueAdd + 1;
        },
            uName.push(c['username'])
            c.isSelectDevice = false
            arr.push(c)
          })
        })
        this.inspectionItems = arr
        let arrSort = JSON.parse(JSON.stringify(arr))
        //根据集合对象数组长度排序
        arrSort.sort((a, b) => {
          if (a.empiricalValueAddss.length < b.empiricalValueAddss.length) {
            return -1; // a排在b前面
          } else if (a.empiricalValueAddss.length > b.empiricalValueAddss.length) {
            return 1; // a排在b后面
          } else {
            return 0; // 保持相对顺序不变
          }
        });
        // console.log(arrSort);
        console.log(uName);
        let name = [...new Set(uName)].filter(item => item !== null);
        let rname = ''
        name.forEach(m => {
          rname += m + ","
        })
        this.inspectionResultForm[0].inspecter = rname.slice(0, -1)
        this.empiricalValueAdd = arrSort[arrSort.length - 1].empiricalValueAddss.length
        this.mergeTable(arr)
      })
    },
    created() {
        this.defaultInitializationTable(); // 初始化表格数据
    selectSample() {
      let sample = this.optionsSamplename.filter(item => {
        return item.name === this.processInspectVo.material
      })[0]
      this.processInspectVo.techfather = null
      this.processInspectVo.techname = null
      this.processInspectVo.materialCode = sample.code
      this.processInspectVo.specificationsModel = sample.specifications
      this.processInspectVo.unit = sample.unit
      this.optionSoptionSprocesses = []
      this.optionSoptionSprocesses = sample.children
    },
    selectInfoByOrderId() {
      this.$axios.get(this.$api.url.chooseMaterProcessInspect, {
        params: {
          orderNumber: this.processInspectVo.orderNumber
        }
      }).then(res => {
        if (res.data.length > 0) {
          console.log(res.data);
          this.optionsSamplename = res.data
        } else {
          this.$message({
            message: '没有该订单号!',
            type: 'warning'
          });
        }
      })
    },
    // 当前页改变时触发 跳转其他页
    handleCurrentChange(val) {
      this.search.pageSize = val;
      this.defaultInitializationTable();
    },
    // 显示新增页面
    handleAddNew() {
      this.showAddPage = true;
      // this.getTableData()
    },
    // 表格初始化接口
    defaultInitializationTable() {
      this.$axios
        .post(this.$api.url.selectProcessInspectsList, this.search)
        .then(res => {
          this.inspectionTableTotal = res.data.total;
          this.inspectionTable = res.data.row;
        });
    },
    // 添加行
    clickAddLine() {
      let obj = {
        material: "",
        materialCode: "",
        orderNumber: "",
        quantity: 0,
        specificationsModel: "",
        techfather: "",
        techname: "",
        technologyId: 0,
        unit: ""
      };
      this.inspectionItems.push(obj);
    },
    // 删除行
    clickDeleteline(scope) {
      this.inspectionItems.splice(scope.$index, 1);
    },
    // 删除检验值列
    clickDeleteInspectionColumn() {
      if (this.empiricalValueAdd - 1 === 0) {
      } else {
        if (this.empiricalValueAddMaxNumber != this.empiricalValueAdd - 1) {
          this.empiricalValueAdd = this.empiricalValueAdd - 1;
          this.inspectionItems.forEach(i => {
            i.testValueList.splice(this.empiricalValueAdd, 1);
          });
        }
      }
    },
    // 添加检验值列
    clickAddInspectionColumn() {
      this.empiricalValueAdd = this.empiricalValueAdd + 1;
    }
  },
  created() {
    this.defaultInitializationTable(); // 初始化表格数据
  }
};
</script>
<style>
.node_i {
    color: orange;
  color: orange;
}
.div_device_dialog {
    min-height: 400px;
    overflow: auto;
  min-height: 400px;
  overflow: auto;
}
.nav {
    display: flex;
    padding: 20px 20px;
    align-items: center;
    background-color: #fff;
  display: flex;
  padding: 20px 20px;
  align-items: center;
  background-color: #fff;
}
.table_header {
    height: calc(100vh - 550px);
  height: calc(100vh - 550px);
}
.nav * {
    font-size: 14px;
  font-size: 14px;
}
.content-body .rawPage {
    background-color: #fff;
    overflow: hidden;
}
.rawPage span {
    white-space: nowrap;
  background-color: #fff;
  overflow: hidden;
}
.inspectionTable {
    padding: 20px 20px;
  padding: 20px 20px;
}
.pagination {
    float: right;
    margin-right: 20px;
  float: right;
  margin-right: 20px;
}
.newPage {
    overflow: hidden;
  overflow: hidden;
}
.header {
    padding: 12px;
  padding: 12px;
}
.addInspectionform {
    background-color: #fff;
  background-color: #fff;
}
.addInspectionform .formwrapper {
    padding: 20px 0px;
    margin-left: 100px;
  padding: 20px 0px;
  margin-left: 100px;
}
.inspectionProject .el-table {
    background-color: #fff;
    padding: 10px 12px;
  background-color: #fff;
  padding: 10px 12px;
}
.inspectionResult span {
    display: block;
    padding: 5px 0px;
  display: block;
  padding: 5px 0px;
}
.inspectionResult .el-table {
    background-color: #fff;
    padding: 10px 12px;
  background-color: #fff;
  padding: 10px 12px;
}
.inspectionProject_span {
    line-height: 32px;
    padding: 10px 20px;
  line-height: 32px;
  padding: 10px 20px;
}
.inspectionProject_span .el-button {
    float: right;
    font-size: 13px !important;
  float: right;
  font-size: 13px !important;
}
/* .table{
  border-collapse: collapse;
  border-spacing: 0;
  background-color: transparent;
  display: table;
  width: 100%;
  max-width: 100%;
  width: 800px;
  margin:0 auto;
} */
/* .table td{
  text-align:center;
  vertical-align:middle;
  font-size: 14px;
  font-family: 'Arial Normal', 'Arial';
  color: #333333;
  padding: 8px 12px;
} */
/* .table-bordered {
  border: 1px solid #ddd;
}  */
.column{
  width:auto;
  height:30px;
  font-size: 12px;
  text-align:center
  /* border:1px solid #333;
  background: #f1f1f1; */
}
.value{
  width:70px;
  height:30px;
  border:1px solid #333;
}
</style>
src/components/view/processInspectionUpdate.vue
@@ -24,29 +24,31 @@
                            <el-form-item label="产品名称:">
                                <el-select style="width: 210px;" size="small" disabled @change="selectSample"
                                    v-model="processInspectVo.material" placeholder="请选择产品">
                                    <el-option v-for="item in optionsSamplename" :key="item.value" :label="item.name" :value="item.name">
                                    <el-option v-for="item in optionsSamplename" :key="item.value" :label="item.name"
                                        :value="item.name">
                                    </el-option>
                                </el-select>
                            </el-form-item>
                        </el-col>
                        <el-col :span="7">
                            <el-form-item label="产品编码:">
                                <el-input style="width: 210px;" size="small" disabled v-model="processInspectVo.materialCode"
                                    placeholder="请输入产品编码" />
                                <el-input style="width: 210px;" size="small" disabled
                                    v-model="processInspectVo.materialCode" placeholder="请输入产品编码" />
                            </el-form-item>
                        </el-col>
                    </el-row>
                    <el-row :gutter="230">
                        <el-col :span="7">
                            <el-form-item label="规格型号:">
                                <el-input style="width: 210px;" size="small" disabled v-model="processInspectVo.specificationsModel"
                                    placeholder="请输入规格型号" />
                                <el-input style="width: 210px;" size="small" disabled
                                    v-model="processInspectVo.specificationsModel" placeholder="请输入规格型号" />
                            </el-form-item>
                        </el-col>
                        <el-col :span="7">
                            <el-form-item label="工序名称:">
                                <el-select @change="changeOptionSoptionSprocesses" disabled v-model="processInspectVo.techfather"
                                    placeholder="请选择" style="width: 210px;" size="small">
                                <el-select @change="changeOptionSoptionSprocesses" disabled
                                    v-model="processInspectVo.techfather" placeholder="请选择" style="width: 210px;"
                                    size="small">
                                    <el-option v-for="item in optionSoptionSprocesses" :key="item.name" :label="item.name"
                                        :value="item.name">
                                    </el-option>
@@ -55,8 +57,8 @@
                        </el-col>
                        <el-col :span="7">
                            <el-form-item label="工艺名称:">
                                <el-select v-model="processInspectVo.techname" disabled placeholder="请选择" style="width: 210px;"
                                    size="small">
                                <el-select v-model="processInspectVo.techname" disabled placeholder="请选择"
                                    style="width: 210px;" size="small">
                                    <el-option v-for="item in optionTechnology" :key="item.id" :label="item.name"
                                        :value="item.id + '-' + item.name">
                                    </el-option>
@@ -89,7 +91,8 @@
                <el-col :span="12" class="inspectionProject_span">检验项目</el-col>
                <el-col v-if="!isUpBtn" :span="12" class="inspectionProject_span">
                    <el-button size="mini" @click="clickDeleteInspectionColumn()">删除检验值列</el-button>
                    <el-button style="margin-right: 30px;" size="mini" @click="clickAddInspectionColumn()">添加检验值列</el-button>
                    <el-button style="margin-right: 30px;" size="mini"
                        @click="clickAddInspectionColumn()">添加检验值列</el-button>
                    <!-- <el-button
              size="mini"
              style="margin-right: 30px;"
@@ -120,7 +123,7 @@
                    <template slot-scope="scope">
                        <el-col>
                            <el-button type="text" @click="clickTableSelect(scope)">
                                {{scope.row.dname == null ? "请选择" : scope.row.dname}}
                                {{ scope.row.dname == null ? "请选择" : scope.row.dname }}
                            </el-button>
                        </el-col>
                    </template>
@@ -129,7 +132,7 @@
                    <template slot-scope="scope">
                        <span style="color: #34BD66;" v-if="scope.row.result === 1">合格</span>
                        <span style="color: #E84738;" v-else-if="scope.row.result === 0">不合格</span>
                        <span v-show="scope.row.result === null">{{null}}</span>
                        <span v-show="scope.row.result === null">{{ null }}</span>
                    </template>
                </el-table-column>
                <!-- <el-table-column v-if="detailId == null" label="操作" width="100">
@@ -165,10 +168,11 @@
            <div class="div_device_dialog">
                <el-input placeholder="输入关键字进行过滤" v-model="filterText" style="margin-bottom: 6px;">
                </el-input>
                <el-tree class="filter-tree" :data="materialOptions" :props="defaultProps" default-expand-all highlight-current
                    @node-click="nodeClick" :filter-node-method="filterNode" ref="tree">
                <el-tree class="filter-tree" :data="materialOptions" :props="defaultProps" default-expand-all
                    highlight-current @node-click="nodeClick" :filter-node-method="filterNode" ref="tree">
                    <div class="custom-tree-node" slot-scope="{ data }">
                        <span><i :class="`node_i ${data.children ? 'el-icon-folder-opened' : 'el-icon-tickets'}`"></i>{{ data.name }}</span>
                        <span><i :class="`node_i ${data.children ? 'el-icon-folder-opened' : 'el-icon-tickets'}`"></i>{{
                            data.name }}</span>
                    </div>
                </el-tree>
            </div>
@@ -181,142 +185,177 @@
</template>
<script>
    export default {
        props: ['rowInfo'],
        data() {
            return {
                isUpBtn: false,
                showUp: false,
                isAddProject: false,
                detailId: 0,
                row: {},
                search: {
                    countSize: 10,
                    pageSize: 1,
                    result: "", // 检测状态
                    name: "", // 产品名称
                    techfather: "" // 工序
                },
                optionsSamplename: [],
                inspectionTable: [],
                tableColumn: [],
                optionSoptionSprocesses: [],
                optionTechnology: [],
                inspectionTableTotal: "",
                treeProject: [],
                // 添加列
                empiricalValueAdd: 1,
                // 编辑时存储最长的列数字,做删除判断
                empiricalValueAddMaxNumber: 0,
                showAddPage: false,
                processInspectVo: {
                    material: null,
                    materialCode: null,
                    orderNumber: "",
                    quantity: null,
                    specificationsModel: null,
                    techfather: null,
                    techname: null,
                    technologyId: null,
                    unit: null
                },
                InspectioniD: null,
                addInspectionform: [{
                    number: "",
                    username: "",
                    projectname: "",
                    tracenumber: "",
                    code: "",
                    class: "",
                    specificationmodel: "",
                    unit: "",
                    quantity: "",
                    group: "",
                    worker: "",
                    machine: ""
                }],
                inspectionItems: [], // 新增检验项目表格
                inspectionResultForm: [{
                    id: "",
                    name: "",
                    inspecter: "",
                    conclusion: "",
                    operation: ""
                }],
                options: [],
                value: "",
                rowList: [],
                spanArr: [],
                position: 0,
                // 设备选择树显示
                centerDialogVisible: false,
                filterText: "",
                materialOptions: [],
                defaultProps: {
                    // 设备树数据设置
                    children: "children",
                    label: "name"
                },
                nodeData: {
                    id: 0,
                    name: null
                }, // node点击保存当前点击数据
                clickSelectDevice: {
                    index: null, // 点击选择存储当前行索引
                    rpId: null // 点击选择存储当前行项目Id
                }
            };
        },
        watch: {
            // filterText(val) {
            //     this.$refs.tree.filter(val);
            // }
        },
        created() {
            if (this.rowInfo.result != null && this.rowInfo.result != '') {
                this.isUpBtn = true
            }
            this.processInspectVo.orderNumber = this.rowInfo.order_number
            this.processInspectVo.material = this.rowInfo.material
            this.processInspectVo.materialCode = this.rowInfo.material_code
            this.processInspectVo.specificationsModel = this.rowInfo.specifications_model
            this.processInspectVo.techfather = this.rowInfo.techfather
            this.processInspectVo.techname = this.rowInfo.techname
            this.processInspectVo.unit = this.rowInfo.unit
            this.processInspectVo.quantity = this.rowInfo.quantity
            this.detailId = this.rowInfo.id
            this.inspectionResultForm[0].id = this.rowInfo.material_code
            this.inspectionResultForm[0].name = this.rowInfo.material
            this.inspectionResultForm[0].conclusion = this.rowInfo.result
            // console.log(this.detailId);
        },
        mounted() {
            this.getTableData()
        },
        methods: {
            blurNode(scope) {
                // console.log(11);
                // this.$set(this.inspectionItems[scope.$index],'isSelectDevice',false)
export default {
    props: ['rowInfo'],
    data() {
        return {
            isUpBtn: false,
            showUp: false,
            isAddProject: false,
            detailId: 0,
            row: {},
            search: {
                countSize: 10,
                pageSize: 1,
                result: "", // 检测状态
                name: "", // 产品名称
                techfather: "" // 工序
            },
            escalation() {
                let arr = this.inspectionItems
                let bl = false
                for (let index = 0; index < arr.length; index++) {
                    const element = arr[index];
                    if (element.dname != null && element.empiricalValueAddss[0] != '') {
                        bl = true
                        break
                    } else {
                        bl = false
                    }
            optionsSamplename: [],
            inspectionTable: [],
            tableColumn: [],
            optionSoptionSprocesses: [],
            optionTechnology: [],
            inspectionTableTotal: "",
            treeProject: [],
            // 添加列
            empiricalValueAdd: 1,
            // 编辑时存储最长的列数字,做删除判断
            empiricalValueAddMaxNumber: 0,
            showAddPage: false,
            processInspectVo: {
                material: null,
                materialCode: null,
                orderNumber: "",
                quantity: null,
                specificationsModel: null,
                techfather: null,
                techname: null,
                technologyId: null,
                unit: null
            },
            InspectioniD: null,
            addInspectionform: [{
                number: "",
                username: "",
                projectname: "",
                tracenumber: "",
                code: "",
                class: "",
                specificationmodel: "",
                unit: "",
                quantity: "",
                group: "",
                worker: "",
                machine: ""
            }],
            inspectionItems: [], // 新增检验项目表格
            inspectionResultForm: [{
                id: "",
                name: "",
                inspecter: "",
                conclusion: "",
                operation: ""
            }],
            options: [],
            value: "",
            rowList: [],
            spanArr: [],
            position: 0,
            // 设备选择树显示
            centerDialogVisible: false,
            filterText: "",
            materialOptions: [],
            defaultProps: {
                // 设备树数据设置
                children: "children",
                label: "name"
            },
            nodeData: {
                id: 0,
                name: null
            }, // node点击保存当前点击数据
            clickSelectDevice: {
                index: null, // 点击选择存储当前行索引
                rpId: null // 点击选择存储当前行项目Id
            }
        };
    },
    watch: {
        // filterText(val) {
        //     this.$refs.tree.filter(val);
        // }
    },
    created() {
        if (this.rowInfo.result != null && this.rowInfo.result != '') {
            this.isUpBtn = true
        }
        this.processInspectVo.orderNumber = this.rowInfo.order_number
        this.processInspectVo.material = this.rowInfo.material
        this.processInspectVo.materialCode = this.rowInfo.material_code
        this.processInspectVo.specificationsModel = this.rowInfo.specifications_model
        this.processInspectVo.techfather = this.rowInfo.techfather
        this.processInspectVo.techname = this.rowInfo.techname
        this.processInspectVo.unit = this.rowInfo.unit
        this.processInspectVo.quantity = this.rowInfo.quantity
        this.detailId = this.rowInfo.id
        this.inspectionResultForm[0].id = this.rowInfo.material_code
        this.inspectionResultForm[0].name = this.rowInfo.material
        this.inspectionResultForm[0].conclusion = this.rowInfo.result
        // console.log(this.detailId);
    },
    mounted() {
        this.getTableData()
    },
    methods: {
        blurNode(scope) {
            // console.log(11);
            // this.$set(this.inspectionItems[scope.$index],'isSelectDevice',false)
        },
        escalation() {
            let arr = this.inspectionItems
            let bl = false
            for (let index = 0; index < arr.length; index++) {
                const element = arr[index];
                if (element.dname != null && element.empiricalValueAddss[0] != '') {
                    bl = true
                    break
                } else {
                    bl = false
                }
                if (bl != true) {
            }
            if (bl != true) {
                this.$message({
                    message: '请先检测一项项目!',
                    type: 'warning'
                });
                return
            }
            let pro = this.inspectionItems.filter(item => {
                return item.result === 0;
            })
            if (pro.length > 0) {
                this.$prompt('请输入不合格数量', '不合格数量', {
                    confirmButtonText: '确定',
                    cancelButtonText: '取消',
                    inputPattern: /^\d+$/,
                    inputErrorMessage: '请输入正确数字格式'
                }).then(({ value }) => {
                    this.$axios.post(this.$api.url.processInspectUpdateProcessInspectsById, {
                        id: this.detailId,
                        number: value
                    }).then(res => {
                        if (res.code == 200) {
                            // this.$message({
                            //     message: '上报成功',
                            //     type: 'success'
                            // });
                            this.$parent.combackMain(true)
                        } else {
                            this.$message({
                                message: res.message,
                                type: 'warning'
                            });
                        }
                    })
                }).catch(() => {
                    this.$message({
                        message: '请先检测一项项目!',
                        type: 'warning'
                        type: 'info',
                        message: '取消输入'
                    });
                    return
                }
                });
            } else {
                this.$axios.post(this.$api.url.processInspectUpdateProcessInspectsById, {
                    id: this.detailId
                }).then(res => {
@@ -341,336 +380,337 @@
                    }
                })
            },
            handleClick() {},
            updateInsInfo(row) {
                this.row = row
                this.showUp = true
            },
            // 点击设备树保存点击记录
            nodeClick(data) {
                if (data.id != undefined) this.nodeData = data;
            },
            // 设备树过滤搜索
            filterNode(value, data) {
                if (!value) return true;
                return data.name.indexOf(value) !== -1;
            },
            // 获取设备树内容
            getOptions(row) {
                this.$axios.get(this.$api.url.inspectionItemChooseDev, {
                    params: {
                        father: row.father,
                        name: row.name,
                        technologyId: this.processInspectVo.technologyId
                    }
                }).then(res => {
                    this.materialOptions = res.data;
                    if (this.materialOptions.length === 1 && row.did != null) {
                        this.$message({
                            message: '该项目下只有一个试验设备,无需选择!',
                            type: 'warning'
                        });
                        return
                    }
                    row.isSelectDevice = true
                });
            },
            //返回
            combackFather() {
                this.$parent.combackMain()
            },
            // 点击表格选择触发
            clickTableSelect(scope) {
                this.centerDialogVisible = true;
                this.clickSelectDevice.index = scope.$index;
                this.clickSelectDevice.rpId = scope.row.id;
                this.getOptions(scope.row);
            },
            // 点击树里面的确定
            clickNodeSure() {
                if (this.detailId == null) {
                    this.projectTable[this.clickSelectDevice.index].deviceId = this.nodeData.id;
                    this.projectTable[this.clickSelectDevice.index].deviceName = this.nodeData.name;
                    this.centerDialogVisible = false;
                } else {
                    this.$axios.post(this.$api.url.inspectionItemUpdateDevByInsId, {
                        id: this.clickSelectDevice.rpId,
                        devId: this.nodeData.id,
                        type: 1
                    }).then(res => {
                        this.centerDialogVisible = false;
                        this.inspectionItems.forEach(a=>{
                            if(a.id == this.clickSelectDevice.rpId){
                                a.dname = this.nodeData.name
                            }
                        })
                    });
            }
        },
        handleClick() { },
        updateInsInfo(row) {
            this.row = row
            this.showUp = true
        },
        // 点击设备树保存点击记录
        nodeClick(data) {
            if (data.id != undefined) this.nodeData = data;
        },
        // 设备树过滤搜索
        filterNode(value, data) {
            if (!value) return true;
            return data.name.indexOf(value) !== -1;
        },
        // 获取设备树内容
        getOptions(row) {
            this.$axios.get(this.$api.url.inspectionItemChooseDev, {
                params: {
                    father: row.father,
                    name: row.name,
                    technologyId: this.processInspectVo.technologyId
                }
            },
            changeState(row, index) {
                if (row.did != null && row.did != '') {
                    let str = ""
                    row.empiricalValueAddss.forEach(e => {
                        str += e + ","
                    })
                    if (str.slice(0, -1) === '' || str.slice(0, -1) === null || str.slice(0, -1) === undefined) {
                        return
                    }
                    this.$axios.post(this.$api.url.inspectionItemlose_focus_update, {
                        deviceId: row.did,
                        inspectionItemId: row.id,
                        inspectionValue: str.slice(0, -1)
                    }, {
                        headers: {
                            "Content-Type": "application/json"
                        }
                    }).then(res => {
                        row.result = res.data.result
                        row.username = res.data.username
                    })
                } else {
            }).then(res => {
                this.materialOptions = res.data;
                if (this.materialOptions.length === 1 && row.did != null) {
                    this.$message({
                        message: '请选择择设备!',
                        message: '该项目下只有一个试验设备,无需选择!',
                        type: 'warning'
                    });
                    return
                }
            },
            // 每页条数改变时触发 选择一页显示多少行
            handleSizeChange(val) {
                this.search.countSize = val;
                this.defaultInitializationTable();
            },
            handleSpanMethod({
                row,
                column,
                rowIndex,
                columnIndex
            }) {
                if (columnIndex === 0) {
                    const _row = this.spanArr[rowIndex];
                    const _col = _row > 0 ? 1 : 0;
                    return {
                        rowspan: _row,
                        colspan: _col
                    }
                }
                if (columnIndex === 1) {
                    const _row = this.spanArr[rowIndex];
                    const _col = _row > 0 ? 1 : 0;
                    return {
                        rowspan: _row,
                        colspan: _col
                    }
                }
            },
            // 合并表格
            mergeTable() {
                this.rowList = []
                this.spanArr = []
                this.position = 0
                this.inspectionItems.forEach((item, index) => {
                    if (index === 0) {
                        this.spanArr.push(1);
                        this.position = 0;
                    } else {
                        if (this.inspectionItems[index].father === this.inspectionItems[index - 1].father) {
                            this.spanArr[this.position] += 1;
                            this.spanArr.push(0);
                        } else {
                            this.spanArr.push(1);
                            this.position = index;
                row.isSelectDevice = true
            });
        },
        //返回
        combackFather() {
            this.$parent.combackMain()
        },
        // 点击表格选择触发
        clickTableSelect(scope) {
            this.centerDialogVisible = true;
            this.clickSelectDevice.index = scope.$index;
            this.clickSelectDevice.rpId = scope.row.id;
            this.getOptions(scope.row);
        },
        // 点击树里面的确定
        clickNodeSure() {
            if (this.detailId == null) {
                this.projectTable[this.clickSelectDevice.index].deviceId = this.nodeData.id;
                this.projectTable[this.clickSelectDevice.index].deviceName = this.nodeData.name;
                this.centerDialogVisible = false;
            } else {
                this.$axios.post(this.$api.url.inspectionItemUpdateDevByInsId, {
                    id: this.clickSelectDevice.rpId,
                    devId: this.nodeData.id,
                    type: 1
                }).then(res => {
                    this.centerDialogVisible = false;
                    this.inspectionItems.forEach(a => {
                        if (a.id == this.clickSelectDevice.rpId) {
                            a.dname = this.nodeData.name
                        }
                    }
                    })
                });
            }
        },
        changeState(row, index) {
            if (row.did != null && row.did != '') {
                let str = ""
                row.empiricalValueAddss.forEach(e => {
                    str += e + ","
                })
            },
            changeOptionSoptionSprocesses() {
                this.optionTechnology = []
                let working = this.optionSoptionSprocesses.filter(item => {
                    return item.name === this.processInspectVo.techfather
                })[0]
                this.optionTechnology = working.children
            },
            addTestProjevt() {
                this.isAddProject = true
                let val = JSON.parse(JSON.stringify(this.processInspectVo))
                val.techname = this.processInspectVo.techname.split("-")[1]
                val.technologyId = this.processInspectVo.techname.split("-")[0]
                this.$axios.post(this.$api.url.processInspectAddProcess, {
                    material: val.material,
                    materialCode: val.materialCode,
                    orderNumber: val.orderNumber,
                    quantity: val.quantity,
                    specificationsModel: val.specificationsModel,
                    techfather: val.techfather,
                    techname: val.techname,
                    technologyId: val.technologyId,
                    unit: val.unit
                if (str.slice(0, -1) === '' || str.slice(0, -1) === null || str.slice(0, -1) === undefined) {
                    return
                }
                this.$axios.post(this.$api.url.inspectionItemlose_focus_update, {
                    deviceId: row.did,
                    inspectionItemId: row.id,
                    inspectionValue: str.slice(0, -1)
                }, {
                    headers: {
                        "Content-Type": "application/json"
                    }
                }).then(res => {
                    if (res.code === 201) {
                        this.$message({
                            message: res.message,
                            type: 'warning'
                        });
                        return
                    }
                    this.detailId = res.data
                    this.inspectionResultForm[0].id = res.data
                    this.inspectionResultForm[0].name = val.material
                    this.getTableData()
                    row.result = res.data.result
                    row.username = res.data.username
                })
            },
            getTableData() {
                this.$axios.get(this.$api.url.processInspectSelectProcessInspectsListById, {
                    params: {
                        id: this.rowInfo.id
                    }
                }).then(res => {
                    // console.log(res.data);
                    this.processInspectVo.technologyId = res.data[0].techId
                    // console.log(this.processInspectVo);
                })
                this.$axios.get(this.$api.url.inspectionItemListUser, {
                    params: {
                        id: this.detailId,
                        type: 1
                    }
                }).then(res => {
                    if (res.data.length < 1) {
                        return
                    }
                    this.inspectionItems = res.data
                    let arr = []
                    let val = JSON.parse(JSON.stringify(this.inspectionItems))
                    const uName = []
                    //转成一维数组
                    val.forEach(l => {
                        let father = l.father
                        l.children.forEach(c => {
                            c.father = father
                            c.empiricalValueAddss = []
                            if (c.inspectionValue != '' && c.inspectionValue != null) {
                                c.empiricalValueAddss = c.inspectionValue.split(",");
                            } else {
                                c.empiricalValueAddss.push("")
                            }
                            uName.push(c['username'])
                            c.isSelectDevice = false
                            arr.push(c)
                        })
                    })
                    this.inspectionItems = arr
                    let arrSort = JSON.parse(JSON.stringify(arr))
                    //根据集合对象数组长度排序
                    arrSort.sort((a, b) => {
                        if (a.empiricalValueAddss.length < b.empiricalValueAddss.length) {
                            return -1; // a排在b前面
                        } else if (a.empiricalValueAddss.length > b.empiricalValueAddss.length) {
                            return 1; // a排在b后面
                        } else {
                            return 0; // 保持相对顺序不变
                        }
                    });
                    // console.log(arrSort);
                    console.log(uName);
                    let name = [...new Set(uName)].filter(item => item !== null);
                    let rname = ''
                    name.forEach(m => {
                        rname += m + ","
                    })
                    this.inspectionResultForm[0].inspecter = rname.slice(0, -1)
                    this.empiricalValueAdd = arrSort[arrSort.length - 1].empiricalValueAddss.length
                    this.mergeTable(arr)
                })
            },
            selectSample() {
                let sample = this.optionsSamplename.filter(item => {
                    return item.name === this.processInspectVo.material
                })[0]
                this.processInspectVo.techfather = null
                this.processInspectVo.techname = null
                this.processInspectVo.materialCode = sample.code
                this.processInspectVo.specificationsModel = sample.specifications
                this.processInspectVo.unit = sample.unit
                this.optionSoptionSprocesses = []
                this.optionSoptionSprocesses = sample.children
            },
            selectInfoByOrderId() {
                this.$axios.get(this.$api.url.chooseMaterProcessInspect, {
                    params: {
                        orderNumber: this.processInspectVo.orderNumber
                    }
                }).then(res => {
                    if (res.data.length > 0) {
                        console.log(res.data);
                        this.optionsSamplename = res.data
            } else {
                this.$message({
                    message: '请选择择设备!',
                    type: 'warning'
                });
            }
        },
        // 每页条数改变时触发 选择一页显示多少行
        handleSizeChange(val) {
            this.search.countSize = val;
            this.defaultInitializationTable();
        },
        handleSpanMethod({
            row,
            column,
            rowIndex,
            columnIndex
        }) {
            if (columnIndex === 0) {
                const _row = this.spanArr[rowIndex];
                const _col = _row > 0 ? 1 : 0;
                return {
                    rowspan: _row,
                    colspan: _col
                }
            }
            if (columnIndex === 1) {
                const _row = this.spanArr[rowIndex];
                const _col = _row > 0 ? 1 : 0;
                return {
                    rowspan: _row,
                    colspan: _col
                }
            }
        },
        // 合并表格
        mergeTable() {
            this.rowList = []
            this.spanArr = []
            this.position = 0
            this.inspectionItems.forEach((item, index) => {
                if (index === 0) {
                    this.spanArr.push(1);
                    this.position = 0;
                } else {
                    if (this.inspectionItems[index].father === this.inspectionItems[index - 1].father) {
                        this.spanArr[this.position] += 1;
                        this.spanArr.push(0);
                    } else {
                        this.$message({
                            message: '没有该订单号!',
                            type: 'warning'
                        });
                    }
                })
            },
            // 当前页改变时触发 跳转其他页
            handleCurrentChange(val) {
                this.search.pageSize = val;
                this.defaultInitializationTable();
            },
            // 显示新增页面
            handleAddNew() {
                this.showAddPage = true;
                // this.getTableData()
            },
            // 表格初始化接口
            defaultInitializationTable() {
                this.$axios
                    .post(this.$api.url.selectProcessInspectsList, this.search)
                    .then(res => {
                        this.inspectionTableTotal = res.data.total;
                        this.inspectionTable = res.data.row;
                    });
            },
            // 添加行
            clickAddLine() {
                let obj = {
                    material: "",
                    materialCode: "",
                    orderNumber: "",
                    quantity: 0,
                    specificationsModel: "",
                    techfather: "",
                    techname: "",
                    technologyId: 0,
                    unit: ""
                };
                this.inspectionItems.push(obj);
            },
            // 删除行
            clickDeleteline(scope) {
                this.inspectionItems.splice(scope.$index, 1);
            },
            // 删除检验值列
            clickDeleteInspectionColumn() {
                if (this.empiricalValueAdd - 1 === 0) {} else {
                    if (this.empiricalValueAddMaxNumber != this.empiricalValueAdd - 1) {
                        this.empiricalValueAdd = this.empiricalValueAdd - 1;
                        this.inspectionItems.forEach(i => {
                            i.testValueList.splice(this.empiricalValueAdd, 1);
                        });
                        this.spanArr.push(1);
                        this.position = index;
                    }
                }
            },
            // 添加检验值列
            clickAddInspectionColumn() {
                this.empiricalValueAdd = this.empiricalValueAdd + 1;
            })
        },
        changeOptionSoptionSprocesses() {
            this.optionTechnology = []
            let working = this.optionSoptionSprocesses.filter(item => {
                return item.name === this.processInspectVo.techfather
            })[0]
            this.optionTechnology = working.children
        },
        addTestProjevt() {
            this.isAddProject = true
            let val = JSON.parse(JSON.stringify(this.processInspectVo))
            val.techname = this.processInspectVo.techname.split("-")[1]
            val.technologyId = this.processInspectVo.techname.split("-")[0]
            this.$axios.post(this.$api.url.processInspectAddProcess, {
                material: val.material,
                materialCode: val.materialCode,
                orderNumber: val.orderNumber,
                quantity: val.quantity,
                specificationsModel: val.specificationsModel,
                techfather: val.techfather,
                techname: val.techname,
                technologyId: val.technologyId,
                unit: val.unit
            }, {
                headers: {
                    "Content-Type": "application/json"
                }
            }).then(res => {
                if (res.code === 201) {
                    this.$message({
                        message: res.message,
                        type: 'warning'
                    });
                    return
                }
                this.detailId = res.data
                this.inspectionResultForm[0].id = res.data
                this.inspectionResultForm[0].name = val.material
                this.getTableData()
            })
        },
        getTableData() {
            this.$axios.get(this.$api.url.processInspectSelectProcessInspectsListById, {
                params: {
                    id: this.rowInfo.id
                }
            }).then(res => {
                // console.log(res.data);
                this.processInspectVo.technologyId = res.data[0].techId
                // console.log(this.processInspectVo);
            })
            this.$axios.get(this.$api.url.inspectionItemListUser, {
                params: {
                    id: this.detailId,
                    type: 1
                }
            }).then(res => {
                if (res.data.length < 1) {
                    return
                }
                this.inspectionItems = res.data
                let arr = []
                let val = JSON.parse(JSON.stringify(this.inspectionItems))
                const uName = []
                //转成一维数组
                val.forEach(l => {
                    let father = l.father
                    l.children.forEach(c => {
                        c.father = father
                        c.empiricalValueAddss = []
                        if (c.inspectionValue != '' && c.inspectionValue != null) {
                            c.empiricalValueAddss = c.inspectionValue.split(",");
                        } else {
                            c.empiricalValueAddss.push("")
                        }
                        uName.push(c['username'])
                        c.isSelectDevice = false
                        arr.push(c)
                    })
                })
                this.inspectionItems = arr
                let arrSort = JSON.parse(JSON.stringify(arr))
                //根据集合对象数组长度排序
                arrSort.sort((a, b) => {
                    if (a.empiricalValueAddss.length < b.empiricalValueAddss.length) {
                        return -1; // a排在b前面
                    } else if (a.empiricalValueAddss.length > b.empiricalValueAddss.length) {
                        return 1; // a排在b后面
                    } else {
                        return 0; // 保持相对顺序不变
                    }
                });
                // console.log(arrSort);
                console.log(uName);
                let name = [...new Set(uName)].filter(item => item !== null);
                let rname = ''
                name.forEach(m => {
                    rname += m + ","
                })
                this.inspectionResultForm[0].inspecter = rname.slice(0, -1)
                this.empiricalValueAdd = arrSort[arrSort.length - 1].empiricalValueAddss.length
                this.mergeTable(arr)
            })
        },
        selectSample() {
            let sample = this.optionsSamplename.filter(item => {
                return item.name === this.processInspectVo.material
            })[0]
            this.processInspectVo.techfather = null
            this.processInspectVo.techname = null
            this.processInspectVo.materialCode = sample.code
            this.processInspectVo.specificationsModel = sample.specifications
            this.processInspectVo.unit = sample.unit
            this.optionSoptionSprocesses = []
            this.optionSoptionSprocesses = sample.children
        },
        selectInfoByOrderId() {
            this.$axios.get(this.$api.url.chooseMaterProcessInspect, {
                params: {
                    orderNumber: this.processInspectVo.orderNumber
                }
            }).then(res => {
                if (res.data.length > 0) {
                    console.log(res.data);
                    this.optionsSamplename = res.data
                } else {
                    this.$message({
                        message: '没有该订单号!',
                        type: 'warning'
                    });
                }
            })
        },
        // 当前页改变时触发 跳转其他页
        handleCurrentChange(val) {
            this.search.pageSize = val;
            this.defaultInitializationTable();
        },
        // 显示新增页面
        handleAddNew() {
            this.showAddPage = true;
            // this.getTableData()
        },
        // 表格初始化接口
        defaultInitializationTable() {
            this.$axios
                .post(this.$api.url.selectProcessInspectsList, this.search)
                .then(res => {
                    this.inspectionTableTotal = res.data.total;
                    this.inspectionTable = res.data.row;
                });
        },
        // 添加行
        clickAddLine() {
            let obj = {
                material: "",
                materialCode: "",
                orderNumber: "",
                quantity: 0,
                specificationsModel: "",
                techfather: "",
                techname: "",
                technologyId: 0,
                unit: ""
            };
            this.inspectionItems.push(obj);
        },
        // 删除行
        clickDeleteline(scope) {
            this.inspectionItems.splice(scope.$index, 1);
        },
        // 删除检验值列
        clickDeleteInspectionColumn() {
            if (this.empiricalValueAdd - 1 === 0) { } else {
                if (this.empiricalValueAddMaxNumber != this.empiricalValueAdd - 1) {
                    this.empiricalValueAdd = this.empiricalValueAdd - 1;
                    this.inspectionItems.forEach(i => {
                        i.testValueList.splice(this.empiricalValueAdd, 1);
                    });
                }
            }
        },
        // 添加检验值列
        clickAddInspectionColumn() {
            this.empiricalValueAdd = this.empiricalValueAdd + 1;
        }
    }
}
</script>
<style></style>
src/components/view/rawInsDetail.vue
@@ -6,11 +6,10 @@
                <el-col :span="12" style="text-align: right;">
                    <el-button icon="el-icon-circle-plus-outline" v-show="detailId === null" @click="addNewRawInspect"
                        style="background-color: #004ea2; color: #ffffff;">提 交</el-button>
                    <el-button icon="el-icon-back" @click="
              () => {
                goBack();
              }
            ">返 回</el-button>
                    <el-button icon="el-icon-back" @click="() => {
                        goBack();
                    }
                        ">返 回</el-button>
                </el-col>
            </el-row>
        </div>
@@ -19,7 +18,8 @@
                <el-row>
                    <el-col :span="7">
                        <el-form-item label="来料日期:">
                            <el-input v-if="detailId !== null" :disabled="detailId !== null" v-model="detailInfo.formTime"></el-input>
                            <el-input v-if="detailId !== null" :disabled="detailId !== null"
                                v-model="detailInfo.formTime"></el-input>
                            <el-date-picker v-else type="date" value-format="yyyy-MM-dd" v-model="detailInfo.formTime"
                                placeholder="选择日期">
                            </el-date-picker>
@@ -27,12 +27,15 @@
                    </el-col>
                    <el-col :span="7">
                        <el-form-item label="原材料名称:">
                            <el-input v-if="detailId !== null" :disabled="detailId !== null" v-model="detailInfo.name"></el-input>
                            <el-input v-else v-model="detailInfo.name" placeholder="请输入原材料名称"></el-input> </el-form-item></el-col>
                            <el-input v-if="detailId !== null" :disabled="detailId !== null"
                                v-model="detailInfo.name"></el-input>
                            <el-input v-else v-model="detailInfo.name" placeholder="请输入原材料名称"></el-input>
                        </el-form-item></el-col>
                    <el-col :span="7">
                        <el-form-item label="原材料编码:">
                            <el-input v-if="detailId !== null" :disabled="detailId !== null" v-model="detailInfo.code"></el-input>
                            <el-input v-else v-model="detailInfo.code" placeholder="请输入原材料编码"></el-input>
                            <el-input v-if="detailId !== null" :disabled="detailId !== null"
                                v-model="detailInfo.code"></el-input>
                            <el-input @blur="blurCode" v-else v-model="detailInfo.code" placeholder="请输入原材料编码"></el-input>
                        </el-form-item>
                    </el-col>
                </el-row>
@@ -46,8 +49,10 @@
                    </el-col>
                    <el-col :span="7">
                        <el-form-item label="单位:">
                            <el-input v-if="detailId !== null" :disabled="detailId !== null" v-model="detailInfo.runit"></el-input>
                            <el-input v-else placeholder="请输入检验单位" :disabled="detailId !== null" v-model="detailInfo.unit"></el-input>
                            <el-input v-if="detailId !== null" :disabled="detailId !== null"
                                v-model="detailInfo.runit"></el-input>
                            <el-input v-else placeholder="请输入检验单位" :disabled="detailId !== null"
                                v-model="detailInfo.unit"></el-input>
                        </el-form-item>
                    </el-col>
                    <el-col :span="7">
@@ -82,7 +87,8 @@
                <el-col :span="12" style="line-height: 32px;">检验项目</el-col>
                <el-col :span="12" style="line-height: 32px; padding-top: 6px;">
                    <el-button style="float: right;" @click="clickDeleteInspectionColumn()">删除检验值列</el-button>
                    <el-button style="float: right;margin-right: 30px;" @click="clickAddInspectionColumn()">添加检验值列</el-button>
                    <el-button style="float: right;margin-right: 30px;"
                        @click="clickAddInspectionColumn()">添加检验值列</el-button>
                    <el-button v-if="detailId == null" style="float: right;margin-right: 30px;"
                        @click="clickAddLine()">添加检验行</el-button>
                </el-col>
@@ -94,7 +100,10 @@
                </el-table-column>
                <el-table-column prop="rpName" label="项目" width="212">
                    <template slot-scope="scope">
                        <el-input v-if="detailId == null" v-model="scope.row.name" placeholder="请输入项目名称"></el-input>
                        <!-- <el-input v-if="detailId == null" v-model="scope.row.name" placeholder="请输入项目名称"></el-input> -->
                        <el-autocomplete v-if="detailId == null" class="inline-input" v-model="scope.row.name"
                            :fetch-suggestions="querySearch" placeholder="请输入项目名称" @select="handleSelect(scope.row)"
                            @blur="handleSelect(scope.row)"></el-autocomplete>
                        <el-input v-else v-model="scope.row.rpName" disabled></el-input>
                    </template>
                </el-table-column>
@@ -129,15 +138,15 @@
                <el-table-column prop="deviceName" label="试验设备" min-width="100">
                    <template slot-scope="scope">
                        <el-button type="text" @click="clickTableSelect(scope)">{{
              scope.row.deviceId == null ? "请选择" : scope.row.deviceName
            }}</el-button>
                            scope.row.deviceId == null ? "请选择" : scope.row.deviceName
                        }}</el-button>
                    </template>
                </el-table-column>
                <el-table-column v-if="detailId !== null" prop="testState" label="结论" min-width="100">
                    <template slot-scope="scope">
                        <span v-show="scope.row.testState != null" :style="{
                color: scope.row.testState === 1 ? '#67C23A' : '#F56C6C'
              }">{{ scope.row.testState === 1 ? "合格" : "不合格" }}</span>
                            color: scope.row.testState === 1 ? '#67C23A' : '#F56C6C'
                        }">{{ scope.row.testState === 1 ? "合格" : "不合格" }}</span>
                        <span v-show="scope.row.testState == null">暂未结论</span>
                    </template>
                </el-table-column>
@@ -159,21 +168,21 @@
                <el-table-column prop="name" label="物料名称"> </el-table-column>
                <el-table-column v-if="detailId != null" prop="uName" label="检验员">
                    <template slot-scope="scope">
                        <span v-for="item in scope.row.uName" :key="item && item.uName"
                            :style="{ marginRight: '8px' }">{{ item }}</span>
                        <span v-for="item in scope.row.uName" :key="item && item.uName" :style="{ marginRight: '8px' }">{{
                            item }}</span>
                    </template>
                </el-table-column>
                <el-table-column prop="testState" label="检验结论">
                    <template slot-scope="scope">
                        <span v-show="scope.row.testState != null" :style="{
                color: scope.row.testState === 1 ? '#67C23A' : '#F56C6C'
              }">{{ scope.row.testState === 1 ? "合格" : "不合格" }}</span>
                        <span v-show="scope.row.testState != null">{{null}}</span>
                            color: scope.row.testState === 1 ? '#67C23A' : '#F56C6C'
                        }">{{ scope.row.testState === 1 ? "合格" : "不合格" }}</span>
                        <span v-show="scope.row.testState != null">{{ null }}</span>
                    </template>
                </el-table-column>
                <el-table-column v-if="detailId !== null" label="操作" width="120">
                    <template>
                        <el-button type="text" size="small" @click.once="submitSave">上报</el-button>
                        <el-button type="text" size="small" @click="submitSave">上报</el-button>
                    </template>
                </el-table-column>
            </el-table>
@@ -182,14 +191,12 @@
            <div class="div_device_dialog">
                <el-input placeholder="输入关键字进行过滤" v-model="filterText" style="margin-bottom: 6px;">
                </el-input>
                <el-tree class="filter-tree" :data="materialOptions" :props="defaultProps" default-expand-all highlight-current
                    @node-click="nodeClick" :filter-node-method="filterNode" ref="tree">
                <el-tree class="filter-tree" :data="materialOptions" :props="defaultProps" default-expand-all
                    highlight-current @node-click="nodeClick" :filter-node-method="filterNode" ref="tree">
                    <div class="custom-tree-node" slot-scope="{ data }">
                        <span><i :class="
                  `node_i ${
                    data.children ? 'el-icon-folder-opened' : 'el-icon-tickets'
                  }`
                "></i>
                        <span><i :class="`node_i ${data.children ? 'el-icon-folder-opened' : 'el-icon-tickets'
                            }`
                            "></i>
                            {{ data.name }}</span>
                    </div>
                </el-tree>
@@ -203,355 +210,433 @@
</template>
<script>
    import {
        triggerRef
    } from "vue";
    import RawIns from "./raw-ins.vue";
    export default {
        components: {
            RawIns
        },
        props: ["goBack", "detailId"],
        created() {
            // 清空
            this.detailInfo = {};
            if (this.detailId) {
                this.getDetailInfo();
            }
            this.getOptions();
        },
        mounted() {
import {
    triggerRef
} from "vue";
import RawIns from "./raw-ins.vue";
export default {
    components: {
        RawIns
    },
    props: ["goBack", "detailId"],
    created() {
        // 清空
        this.detailInfo = {};
        if (this.detailId) {
            this.getDetailInfo();
        }
        this.getOptions();
    },
    mounted() {
        },
        computed: {
            conclusionTable() {
                const conclusion = {};
                conclusion.name = this.detailInfo.name;
                conclusion.code = this.detailInfo.code;
                conclusion.uName = [
                    ...new Set(this.projectTable.map(item => item.uName))
                ];
                return [conclusion];
    },
    computed: {
        conclusionTable() {
            const conclusion = {};
            conclusion.name = this.detailInfo.name;
            conclusion.code = this.detailInfo.code;
            conclusion.uName = [
                ...new Set(this.projectTable.map(item => item.uName))
            ];
            return [conclusion];
        }
    },
    data() {
        return {
            // 添加列
            empiricalValueAdd: 1,
            // 编辑时存储最长的列数字,做删除判断
            empiricalValueAddMaxNumber: 0,
            // 设备选择树显示
            centerDialogVisible: false,
            // 详情页就是详情信息
            detailInfo: {},
            //产品信息
            ifsInfo: {},
            // 表格
            projectTable: [],
            // 新建检验单参数对象
            rawInsParams: {},
            // 项目名称options
            specificationOptions: [],
            filterText: "",
            materialOptions: [], // 树数据
            defaultProps: {
                // 设备树数据设置
                children: "children",
                label: "name"
            },
            nodeData: "", // node点击保存当前点击数据
            clickSelectDevice: {
                index: "", // 点击选择存储当前行索引
                rpId: "" // 点击选择存储当前行项目Id
            },
            restaurants: []
        };
    },
    watch: {
        filterText(val) {
            this.$refs.tree.filter(val);
        }
    },
    methods: {
        blurCode() {
            // this.detailId=10
            let data = {
                code: this.detailInfo.code
            }
            console.log(data);
            this.$axios.post(
                this.$api.url.rawInspectChooseIFS, {
                code: this.detailInfo.code
            }
            ).then(res => {
                this.ifsInfo = res.data
                console.log("ifs", this.ifsInfo);
                this.$set(this.detailInfo, "formTime", this.ifsInfo.formTime)
                this.detailInfo.formTime = this.ifsInfo.formTime
                this.detailInfo.name = this.ifsInfo.name
                this.detailInfo.supplier = this.ifsInfo.supplier
                this.detailInfo.unit = this.ifsInfo.unit
                this.detailInfo.userName = this.ifsInfo.userName
                this.detailInfo.number = this.ifsInfo.number
                this.detailInfo.specifications = this.ifsInfo.specifications
                this.restaurants = JSON.parse(JSON.stringify(this.ifsInfo.rawInsProducts))
                this.restaurants.forEach(item => {
                    this.$set(item, "value", item.name)
                })
                console.log("restaurants", this.restaurants);
            })
        },
        data() {
            return {
                // 添加列
                empiricalValueAdd: 1,
                // 编辑时存储最长的列数字,做删除判断
                empiricalValueAddMaxNumber: 0,
                // 设备选择树显示
                centerDialogVisible: false,
                // 详情页就是详情信息
                detailInfo: {},
                // 表格
                projectTable: [],
                // 新建检验单参数对象
                rawInsParams: {},
                // 项目名称options
                specificationOptions: [],
                filterText: "",
                materialOptions: [], // 树数据
                defaultProps: {
                    // 设备树数据设置
                    children: "children",
                    label: "name"
                },
                nodeData: "", // node点击保存当前点击数据
                clickSelectDevice: {
                    index: "", // 点击选择存储当前行索引
                    rpId: "" // 点击选择存储当前行项目Id
                }
        querySearch(queryString, cb) {
            var restaurants = this.restaurants;
            var results = queryString ? restaurants.filter(this.createFilter(queryString)) : restaurants;
            // 调用 callback 返回建议列表的数据
            cb(results);
        },
        createFilter(queryString) {
            return (restaurant) => {
                return (restaurant.value.toLowerCase().indexOf(queryString.toLowerCase()) === 0);
            };
        },
        watch: {
            filterText(val) {
                this.$refs.tree.filter(val);
        handleSelect(row) {
            let select = this.restaurants.filter(item => {
                return item.name === row.name
            })[0]
            if (select != undefined) {
                this.$set(row, "internal", select.internal)
                this.$set(row, "required", select.required)
                this.$set(row, "unit", select.unit)
                //检验值
            }
        },
        methods: {
            assertTest(row) {
                // let fuArr=['>', '<', '=']
                // if(!fuArr.includes(row.required[0])){
                //   this.$message({
                //               message: "标准值["+row.required+"]格式首位应包含>,<或者=",
                //               type: 'warning'
                //           });
                //           return
                // }
                // if(!fuArr.includes(row.internal[0])){
                //   this.$message({
                //               message: "内控值["+row.internal+"]格式首位应包含>,<或者=",
                //               type: 'warning'
                //           });
                //           return
                // }
            },
            // 设备树过滤搜索
            filterNode(value, data) {
                if (!value) return true;
                return data.name.indexOf(value) !== -1;
            },
        assertTest(row) {
            // let fuArr=['>', '<', '=']
            // if(!fuArr.includes(row.required[0])){
            //   this.$message({
            //               message: "标准值["+row.required+"]格式首位应包含>,<或者=",
            //               type: 'warning'
            //           });
            //           return
            // }
            // if(!fuArr.includes(row.internal[0])){
            //   this.$message({
            //               message: "内控值["+row.internal+"]格式首位应包含>,<或者=",
            //               type: 'warning'
            //           });
            //           return
            // }
        },
        // 设备树过滤搜索
        filterNode(value, data) {
            if (!value) return true;
            return data.name.indexOf(value) !== -1;
        },
            // 获取报检单详情信息
            async getDetailInfo() {
                await this.$axios
                    .get(this.$api.url.selectRawInspectsListById + `${this.detailId}`, {
                        params: {
                            id: this.detailId
        // 获取报检单详情信息
        async getDetailInfo() {
            await this.$axios
                .get(this.$api.url.selectRawInspectsListById + `${this.detailId}`, {
                    params: {
                        id: this.detailId
                    }
                })
                .then(res => {
                    console.log(res);
                    this.detailInfo = res.data;
                    this.projectTable = res.data.children;
                    this.projectTable.forEach(i => {
                        // 解决重新赋值无法编辑操作
                        if (i.testValue == null) {
                            this.$set(i, "testValueList", []);
                        } else {
                            this.$set(i, "testValueList", i.testValue.split(","));
                        }
                        // 取最长的列表数
                        if (i.testValueList.length > this.empiricalValueAdd) {
                            this.empiricalValueAdd = i.testValueList.length;
                            this.empiricalValueAddMaxNumber = i.testValueList.length - 1;
                        }
                    });
                });
        },
        // 新增检验单
        async addNewRawInspect() {
            //TODO:
            console.log(this.projectTable);
            if (this.projectTable.length > 0) {
                let filterTable = this.projectTable.filter(item => {
                    return item.required === '' || item.internal === '' ||
                        item.required === null || item.internal === null || item.name === ''
                })
                if (filterTable.length > 0) {
                    this.$message({
                        message: "项目名称,标准值和内控值不能为空!",
                        type: 'warning'
                    });
                    return
                }
            }
            this.projectTable.forEach(i => {
                // 将列表转换为字符串
                i.testValue = i.testValueList.join(",");
            });
            this.detailInfo.rawInsProducts = this.projectTable;
            this.$axios.post(
                this.$api.url.addRawInspects, {
                ...this.detailInfo
            }, {
                headers: {
                    "Content-Type": "application/json"
                }
            }
            ).then(res => {
                console.log(res);
                if (res.code == "201") {
                    this.$message({
                        message: res.message,
                        type: 'warning'
                    });
                    return
                } else {
                    // this.detailId = res.data;
                    // this.getDetailInfo();
                    // // this.$message.success(res.message);
                    // this.goBack();
                }
            });
        },
        // 修改项目的检测值改变结论
        async changeState(row, index) {
            if (this.detailId !== null) {
                const res = await this.$axios.post(this.$api.url.updaterawInsProduct, {
                    DevId: row.deviceId,
                    rpId: row.rpId,
                    testValue: row.testValueList.join(",")
                });
                this.$message.success("提交成功");
                this.getDetailInfo(); //重新刷新信息数据
            }
        },
         submitSave() {
            let pro = this.projectTable.filter(item => {
                return item.testState === 0;
            })
            if (pro.length > 0) {
                this.$prompt('请输入不合格数量', '不合格数量', {
                    confirmButtonText: '确定',
                    cancelButtonText: '取消',
                    inputPattern: /^\d+$/,
                    inputErrorMessage: '请输入正确数字格式'
                }).then(({ value }) => {
                    this.$axios.post(
                        this.$api.url.updateRawInspectsById+`${this.detailId}`, {"number": value }
                    ).then(res => {
                        this.$message.success("提交成功");
                        this.getDetailInfo();
                        this.goBack()
                    });
                }).catch(() => {
                    this.$message({
                        type: 'info',
                        message: '取消输入'
                    });
                });
            }else{
             this.$axios.post(
                this.$api.url.updateRawInspectsById + `${this.detailId}`
            ).then(res => {
                this.$message.success("提交成功");
                this.getDetailInfo();
                this.goBack()
            });
            }
        },
        // 获取设备树内容
        getOptions() {
            this.$axios.get(this.$api.url.rawSelectDevice).then(res => {
                this.materialOptions = res.data;
            });
        },
        // 添加行
        clickAddLine() {
            let obj = {
                deviceId: null,
                deviceName: "",
                internal: "",
                name: "",
                required: "",
                textValue: "",
                testState: null,
                testValueList: [],
                unit: ""
            };
            this.projectTable.push(obj);
        },
        // 删除行
        clickDeleteline(scope) {
            this.projectTable.splice(scope.$index, 1);
        },
        // 点击设备树保存点击记录
        nodeClick(data) {
            if (data.id != undefined) this.nodeData = data;
        },
        // 点击表格选择触发
        clickTableSelect(scope) {
            this.centerDialogVisible = true;
            this.clickSelectDevice.index = scope.$index;
            this.clickSelectDevice.rpId = scope.row.rpId;
        },
        // 点击树里面的确定
        clickNodeSure() {
            if (this.detailId == null) {
                this.projectTable[
                    this.clickSelectDevice.index
                ].deviceId = this.nodeData.id;
                this.projectTable[
                    this.clickSelectDevice.index
                ].deviceName = this.nodeData.name;
                this.centerDialogVisible = false;
            } else {
                this.$axios
                    .post(this.$api.url.updateDevByRpId, {
                        rpId: this.clickSelectDevice.rpId,
                        devId: this.nodeData.id
                    })
                    .then(res => {
                        console.log(res);
                        this.detailInfo = res.data;
                        this.projectTable = res.data.children;
                        this.projectTable.forEach(i => {
                            // 解决重新赋值无法编辑操作
                            if (i.testValue == null) {
                                this.$set(i, "testValueList", []);
                            } else {
                                this.$set(i, "testValueList", i.testValue.split(","));
                            }
                            // 取最长的列表数
                            if (i.testValueList.length > this.empiricalValueAdd) {
                                this.empiricalValueAdd = i.testValueList.length;
                                this.empiricalValueAddMaxNumber = i.testValueList.length - 1;
                            }
                        });
                        this.getDetailInfo();
                        this.centerDialogVisible = false;
                    });
            },
            // 新增检验单
            async addNewRawInspect() {
                //TODO:
                console.log(this.projectTable);
                if (this.projectTable.length > 0) {
                    let filterTable = this.projectTable.filter(item => {
                        return item.required === '' || item.internal === '' ||
                            item.required === null || item.internal === null || item.name === ''
                    })
                    if (filterTable.length > 0) {
                        this.$message({
                            message: "项目名称,标准值和内控值不能为空!",
                            type: 'warning'
                        });
                        return
                    }
                }
                this.projectTable.forEach(i => {
                    // 将列表转换为字符串
                    i.testValue = i.testValueList.join(",");
                });
                this.detailInfo.rawInsProducts = this.projectTable;
                this.$axios.post(
                    this.$api.url.addRawInspects, {
                        ...this.detailInfo
                    }, {
                        headers: {
                            "Content-Type": "application/json"
                        }
                    }
                ).then(res => {
                    console.log(res);
                    if (res.code == "201") {
                        this.$message({
                            message: res.message,
                            type: 'warning'
                        });
                        return
                    } else {
                        // this.detailId = res.data;
                        // this.getDetailInfo();
                        // // this.$message.success(res.message);
                        // this.goBack();
                    }
                });
            },
            // 修改项目的检测值改变结论
            async changeState(row, index) {
                if (this.detailId !== null) {
                    const res = await this.$axios.post(this.$api.url.updaterawInsProduct, {
                        DevId: row.deviceId,
                        rpId: row.rpId,
                        testValue: row.testValueList.join(",")
                    });
                    this.$message.success("提交成功");
                    this.getDetailInfo(); //重新刷新信息数据
                }
            },
            async submitSave() {
                const res = await this.$axios.post(
                    this.$api.url.updateRawInspectsById + `${this.detailId}`
                ).then(res => {
                    this.$message.success("提交成功");
                    this.getDetailInfo();
                    this.goBack()
                });
            },
            // 获取设备树内容
            getOptions() {
                this.$axios.get(this.$api.url.rawSelectDevice).then(res => {
                    this.materialOptions = res.data;
                });
            },
            // 添加行
            clickAddLine() {
                let obj = {
                    deviceId: null,
                    deviceName: "",
                    internal: "",
                    name: "",
                    required: "",
                    textValue: "",
                    testState: null,
                    testValueList: [],
                    unit: ""
                };
                this.projectTable.push(obj);
            },
            // 删除行
            clickDeleteline(scope) {
                this.projectTable.splice(scope.$index, 1);
            },
            // 点击设备树保存点击记录
            nodeClick(data) {
                if (data.id != undefined) this.nodeData = data;
            },
            // 点击表格选择触发
            clickTableSelect(scope) {
                this.centerDialogVisible = true;
                this.clickSelectDevice.index = scope.$index;
                this.clickSelectDevice.rpId = scope.row.rpId;
            },
            // 点击树里面的确定
            clickNodeSure() {
                if (this.detailId == null) {
                    this.projectTable[
                        this.clickSelectDevice.index
                    ].deviceId = this.nodeData.id;
                    this.projectTable[
                        this.clickSelectDevice.index
                    ].deviceName = this.nodeData.name;
                    this.centerDialogVisible = false;
                } else {
                    this.$axios
                        .post(this.$api.url.updateDevByRpId, {
                            rpId: this.clickSelectDevice.rpId,
                            devId: this.nodeData.id
                        })
                        .then(res => {
                            this.getDetailInfo();
                            this.centerDialogVisible = false;
                        });
                }
            },
            // 删除检验值列
            clickDeleteInspectionColumn() {
                if (this.empiricalValueAdd - 1 === 0) {} else {
                    if (this.empiricalValueAddMaxNumber != this.empiricalValueAdd - 1) {
                        this.empiricalValueAdd = this.empiricalValueAdd - 1;
                        this.projectTable.forEach(i => {
                            i.testValueList.splice(this.empiricalValueAdd, 1);
                        });
                    }
                }
            },
            // 添加检验值列
            clickAddInspectionColumn() {
                this.empiricalValueAdd = this.empiricalValueAdd + 1;
            }
        },
        // 删除检验值列
        clickDeleteInspectionColumn() {
            if (this.empiricalValueAdd - 1 === 0) { } else {
                if (this.empiricalValueAddMaxNumber != this.empiricalValueAdd - 1) {
                    this.empiricalValueAdd = this.empiricalValueAdd - 1;
                    this.projectTable.forEach(i => {
                        i.testValueList.splice(this.empiricalValueAdd, 1);
                    });
                }
            }
        },
        // 添加检验值列
        clickAddInspectionColumn() {
            this.empiricalValueAdd = this.empiricalValueAdd + 1;
        }
    };
    }
};
</script>
<style scoped>
    .node_i {
        color: orange;
    }
.node_i {
    color: orange;
}
    .div_device_dialog {
        min-height: 400px;
        overflow: auto;
    }
.div_device_dialog {
    min-height: 400px;
    overflow: auto;
}
    .rawInsBox {
        height: 100%;
        width: 100%;
        overflow-y: scroll;
        display: flex;
        flex-direction: column;
    }
.rawInsBox {
    height: 100%;
    width: 100%;
    overflow-y: scroll;
    display: flex;
    flex-direction: column;
}
    .el-table__fixed-body-wrapper {
        top: 48px;
    }
.el-table__fixed-body-wrapper {
    top: 48px;
}
    .rawInsBox .title .el-button {
        height: 32px;
        border: 1px solid rgba(190, 190, 190, 0.44);
        box-shadow: 0px 2px 4px rgba(220, 220, 220, 0.41);
        padding: 0 12px;
    }
.rawInsBox .title .el-button {
    height: 32px;
    border: 1px solid rgba(190, 190, 190, 0.44);
    box-shadow: 0px 2px 4px rgba(220, 220, 220, 0.41);
    padding: 0 12px;
}
    .rawInsBox .title {
        margin-bottom: 10px;
        padding: 0 20px;
    }
.rawInsBox .title {
    margin-bottom: 10px;
    padding: 0 20px;
}
    /* 检验详情 */
    .raw-detail-info {
        background: #fff;
        padding: 26px 0px 11px 80px;
    }
/* 检验详情 */
.raw-detail-info {
    background: #fff;
    padding: 26px 0px 11px 80px;
}
    .raw-detail-info>>>.el-form-item__label {
        color: rgb(51, 51, 51);
        font-family: 微软雅黑;
        font-size: 16px;
        font-weight: 400;
        letter-spacing: 0px;
    }
.raw-detail-info>>>.el-form-item__label {
    color: rgb(51, 51, 51);
    font-family: 微软雅黑;
    font-size: 16px;
    font-weight: 400;
    letter-spacing: 0px;
}
    .raw-detail-info .el-input {
        width: auto;
    }
.raw-detail-info .el-input {
    width: auto;
}
    .raw-detail-info.raw-detail-info-edit>>>.el-input__inner {
        background: #fff;
    }
.raw-detail-info.raw-detail-info-edit>>>.el-input__inner {
    background: #fff;
}
    .raw-detail-info>>>.el-input__inner {
        width: 224px;
        height: 32px;
        box-sizing: border-box;
        background: rgb(238, 238, 238);
        border: 1px solid rgb(221, 221, 221);
        border-radius: 4px;
    }
.raw-detail-info>>>.el-input__inner {
    width: 224px;
    height: 32px;
    box-sizing: border-box;
    background: rgb(238, 238, 238);
    border: 1px solid rgb(221, 221, 221);
    border-radius: 4px;
}
    .raw-detail-info .el-form-item {
        margin-bottom: 24px;
    }
.raw-detail-info .el-form-item {
    margin-bottom: 24px;
}
    .raw-detail-info .el-form-item .el-button {
        height: 32px;
        border: 1px solid rgba(190, 190, 190, 0.44);
        box-shadow: 0px 2px 4px rgba(220, 220, 220, 0.41);
        padding: 0 12px;
    }
.raw-detail-info .el-form-item .el-button {
    height: 32px;
    border: 1px solid rgba(190, 190, 190, 0.44);
    box-shadow: 0px 2px 4px rgba(220, 220, 220, 0.41);
    padding: 0 12px;
}
    /* 检验项目 */
    .raw-project-table {
        padding: 24px 14px;
        background: #fff;
        flex: 1;
        /* max-height: 360px; */
        /* overflow-y: hidden; */
    }
/* 检验项目 */
.raw-project-table {
    padding: 24px 14px;
    background: #fff;
    flex: 1;
    /* max-height: 360px; */
    /* overflow-y: hidden; */
}
    /* 检验结论 */
    .raw-conclusion-table {
        padding: 9px 14px;
        background: #fff;
    }
/* 检验结论 */
.raw-conclusion-table {
    padding: 9px 14px;
    background: #fff;
}
</style>
src/components/view/sale.vue
@@ -119,7 +119,7 @@
                        :icon="isSync ? 'el-icon-loading' : 'el-icon-refresh'">同步</el-button>
                    <el-button type="primary" icon="el-icon-plus" @click="openAddDia">新增</el-button>
                    <el-button icon="el-icon-delete" @click="delSales">删除</el-button>
                    <el-button icon="el-icon-download">导出</el-button>
                    <el-button icon="el-icon-download" @click="exportSale">导出</el-button>
                </el-col>
            </el-row>
        </div>
@@ -157,10 +157,10 @@
                </el-table-column>
                <el-table-column label="订单类型" width="100">
                    <template slot-scope="scope">
                        <el-tag effect="dark" size="mini" style="font-size: 8px;">{{scope.row.order_type}}</el-tag>
                        <el-tag effect="dark" size="mini" style="font-size: 8px;">{{ scope.row.order_type }}</el-tag>
                    </template>
                </el-table-column>
                <el-table-column prop="code" label="合同编号" width="220">
                <el-table-column prop="code" label="合同编号" >
                </el-table-column>
                <el-table-column prop="name" label="工程名称" width="120">
                </el-table-column>
@@ -174,12 +174,13 @@
                    <template slot-scope="scope">
                        <span style="color: #34BD66;" v-if="scope.row.type == 1">通过</span>
                        <span style="color: #E84738;" v-else-if="scope.row.type == 0">不通过</span>
                        <span v-else>{{null}}</span>
                        <span style="color: #ff9900;" v-else>未审核</span>
                    </template>
                </el-table-column>
                <el-table-column label="操作" width="220">
                    <template slot-scope="scope">
                        <span class="table_do" @click="changeShowDetail(scope.row)">&nbsp;查看详情&nbsp;</span>
                        <span class="table_do" @click="downloadFile(scope.row)">&nbsp;下载附件&nbsp;</span>
                        <span class="table_do" v-if="scope.row.type == 2" @click="saleCheck(scope)">&nbsp;审核&nbsp;</span>
                        <span class="table_do" v-else>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
                        <span class="table_do" v-if="scope.row.type == 2"
@@ -450,6 +451,56 @@
        this.selectRawInspectsList()
    },
    methods: {
        downloadFile(row) {
            let baseIp = "http://192.168.18.16:9999"
            this.axios.post(this.$api.url.saleDownload, {
                id: row.id
            }).then(res => {
                const fileUrls = []; // 文件的urls
                res.data.forEach(item=>{
                    let url=baseIp+item
                    fileUrls.push(url)
                })
                const downloadFile = (url, fileName) => {
                        const link = document.createElement('a');
                        link.href = url;
                        link.download = fileName;
                        // link.style.display = 'none';
                        document.body.appendChild(link);
                        link.click();
                        document.body.removeChild(link);
                    };
                    console.log(fileUrls);
                    fileUrls.forEach((url, index) => {
                        let s=url.split(".")
                        const fileName = row.name+`附件(${index + 1}).`+s[s.length-1];
                        downloadFile(url, fileName);
                    });
            })
        },
        //销售订单导出
        exportSale(){
            this.$axios.post(this.$api.url.exportSale,{
                    delTime: this.search.delTime,
                    name: this.search.name,
                    type: this.search.type,
                    orderNumber: this.search.code
                },{responseType:'blob',headers:{"Content-Type":"application/json"}}).then((res)=>{
                const result = res;
                var nameList = result.headers['content-disposition'];
                nameList = decodeURI(nameList);
                var fileName = nameList.split('=')[1];
                const blob = new Blob([result.data,{type: 'application/vnd.ms-excel'}]);
                const link = document.createElement('a');
                link.download = fileName;
                const URL = window.URL || window.webkitURL;
                link.href= URL.createObjectURL(blob);
                document.body.appendChild(link);
                link.click();
                document.body.removeChild(link);
            }).catch()
        },
        closeDialog() {
            this.addData = {
                orderNumber: null,
@@ -485,7 +536,7 @@
                    message: '同步假成功(◕ᴗ◕)!',
                    type: 'success'
                });
                this.isSync=false
                this.isSync = false
            }, 2000);
            return
            //调用同步接口
src/components/view/self-inspection.vue
@@ -113,7 +113,6 @@
                <el-col :span="12" style="line-height: 32px;">自检项目维护</el-col>
                <el-col :span="12" style="text-align: right;">
                    <el-button type="primary" icon="el-icon-plus" style="background: #004EA2;"  @click="addend">新增</el-button>
                    <!-- <el-button icon="el-icon-edit-outline"  @click="modify">修改</el-button> -->
                    <el-button icon="el-icon-delete" @click="dels">删除</el-button>
                </el-col>
            </el-row>
@@ -121,22 +120,9 @@
        <div class="choose">
            <span>类型:</span>
            <el-select v-model="search.type" size="small" @change="TYpe" placeholder="请选择" style="width: 224px;margin-right: 30px;">
                <el-option label="橡胶连接器" :value="0"></el-option>
                <el-option label="金属连接器" :value="1"></el-option>
                <el-option label="湿插拔电连接器" :value="2"></el-option>
                <el-option label="分支组件" :value="3"></el-option>
                <el-option v-for="(a, ai) in bigType" :key="ai" :value="a">
                </el-option>
            </el-select>
            <!-- <span>工序:</span> -->
            <!-- <el-select v-model="search.name" size="small" placeholder="请选择" style="width: 224px;margin-right: 30px;">
                <el-option v-for="(a, ai) in process" key="ai" :label="a.name" :value="a.id"></el-option>
            </el-select>
            <span>项目:</span>
            <el-select v-model="search.name" size="small" placeholder="请选择" style="width: 224px;margin-right: 30px;">
                <el-option v-for="(a, ai) in product" key="ai" :label="a.name" :value="a.id"></el-option>
            </el-select>
            <el-button size="mini" @click="clean()"><span>重 置</span></el-button>
            <el-button size="mini" type="primary" style="background: #004EA2;"><span>查
                    询</span></el-button> -->
        </div>
        <div class="thing">
            <div class="left">
@@ -147,9 +133,6 @@
                    <div class="custom-tree-node" slot-scope="{ node, data }">
                        <span><i :class="`node_i ${data.code != '[2]'?'el-icon-folder-opened':'el-icon-tickets'}`"></i>
                            {{data.code}} {{ data.name }}</span>
                        <!-- <el-button type="text" size="mini" @click.stop="remove(node, data)">
                            <i class="el-icon-delete"></i>
                        </el-button> -->
                    </div>
                </el-tree>
            </div>
@@ -384,6 +367,7 @@
                checkTreeNode: {
                    id:'',
                },
                bigType: [],
                tableData: [],
                upIndex: 0,
                selects: [],
@@ -402,10 +386,20 @@
            }
        },
        mounted() {
            this.chooseType()
            this.selectAllleft()
            this.selectAllSelf()
        },
        methods: {
            chooseType() {
                this.$axios.get(this.$api.url.chooseType).then(res => {
                    this.bigType = res.data
                    this.typeselect = res.data[0]
                    this.search.type = res.data[0]
                    this.selectAllTechTem();
                    this.selectAllTechNam();
                })
            },
             selectDataList() {
                this.list.forEach(a => {
                    a.code = '[1]'
src/components/view/standard.vue
@@ -48,7 +48,7 @@
            <el-option :value="0" label="工艺路线"></el-option>
            <el-option :value="1" label="技术指标"></el-option>
            <el-option :value="2" label="物料清单"></el-option>
            <!-- <el-option :value="3" label="生产工艺"></el-option> -->
            <el-option :value="3" label="生产工艺"></el-option>
          </el-select>
          <span>版本:</span>
          <el-select v-model="versionVal" @change="verevent" size="small" style="width: 13vw;margin-right: 15px;" placeholder="请选择">
@@ -89,7 +89,7 @@
           <el-row>
            <el-col :span="12">
              <el-form-item label="工序:" prop="tefather"  style="display: flex;">
                <el-select size="small"
                <el-select size="small"
                filterable allow-create default-first-option style="width: 100%;"
                v-model="technologyForm.tefather" placeholder="请输入或选择工序">
                  <el-option :value="item.father" :label="item.father" v-for="(item,index) in fatherList" :key="index"></el-option>
@@ -98,7 +98,7 @@
            </el-col>
            <el-col :span="12">
              <el-form-item label="工艺名称:" prop="tename" style="display: flex;">
                <el-input  style="width: 100%;" size="small" placeholder="请输入工艺名称"
                <el-input  style="width: 100%;" size="small" placeholder="请输入工艺名称"
                clearable v-model="technologyForm.tename"></el-input>
              </el-form-item>
            </el-col>
@@ -108,7 +108,7 @@
              <el-form-item label="设备组:" prop="deviceGroup" style="display: flex;">
                <el-select placeholder="请选择设备组" size="small" style="width: 100%;"
                v-model="technologyForm.deviceGroup">
                <el-option :value="item.father"
                <el-option :value="item.father"
                v-for="(item,index) in deviceList" :key="index" :label="item.father"></el-option>
                </el-select>
              </el-form-item>
@@ -132,7 +132,7 @@
          <el-row>
            <el-col :span="12">
              <el-form-item label="工序:" prop="pfather">
                <el-select v-model="targetForm.pfather"
                <el-select v-model="targetForm.pfather"
                @change="changeFather" size="small" placeholder="请选择工序">
                  <el-option :value="item.name" :label="item.name" v-for="(item,index) in targetFormList" :key="index"></el-option>
                </el-select>
@@ -151,7 +151,7 @@
            <el-col :span="12">
              <el-form-item label="项目:" prop="father">
                <el-select v-model="targetForm.father"
                filterable allow-create default-first-option
                filterable allow-create default-first-option
                size="small" placeholder="请输入或选择项目">
                  <el-option :value="item.father" :label="item.father" v-for="(item,index) in projectList" :key="index"></el-option>
                </el-select>
@@ -200,16 +200,16 @@
                  style="width:100%;" v-model="materialForm.mfather" size="small">
                  <el-option v-for="(item,index) in materialFormList" :key="index"
                  :label="item.name" :value="item.name" ></el-option>
                  </el-select>
                  </el-select>
                </el-form-item>
              </el-col>
              <el-col :span="12">
              <el-form-item label="工艺名称:" prop="mtechnologyId">
                <el-select placeholder="请选择工艺名称" style="width:100%;"
                <el-select placeholder="请选择工艺名称" style="width:100%;"
                v-model="materialForm.mtechnologyId" size="small">
                <el-option v-for="(item,index) in mIdList" :key="index"
                <el-option v-for="(item,index) in mIdList" :key="index"
                :value="item.id" :label="item.name"></el-option>
                </el-select>
                </el-select>
              </el-form-item>
            </el-col>
          </el-row>
@@ -283,7 +283,7 @@
            <el-row>
              <el-col :span="12">
                <el-form-item label="工序:" prop="profather">
                  <el-select v-model="productForm.profather"
                  <el-select v-model="productForm.profather"
                   @change="changeProduct" placeholder="请选择工序" size="small">
                    <el-option v-for="(item,index) in productFormList" :key="index"
                    :value="item.name" :label="item.name"></el-option>
@@ -559,8 +559,8 @@
                      this.leftAdd.name=null
                      this.leftAdd.specifications=null
                      this.selectMaterialTree()
                      this.bomLeftAdd=false
                      this.selectVersion()
                      this.bomLeftAdd=false
                      this.selectVersion()
                  })
                  return
            }
@@ -587,8 +587,8 @@
                      this.leftAdd.name=null
                      this.leftAdd.specifications=null
                      this.selectMaterialTree()
                      this.bomLeftAdd=false
                      this.selectVersion()
                      this.bomLeftAdd=false
                      this.selectVersion()
                  })
              }else{
                let three=two.children.filter(item=>{
@@ -610,7 +610,7 @@
                      this.leftAdd.name=null
                      this.leftAdd.specifications=null
                      this.selectMaterialTree()
                      this.bomLeftAdd=false
                      this.bomLeftAdd=false
                      this.selectVersion()
                  })
                }else{
@@ -637,8 +637,8 @@
                      this.leftAdd.name=null
                      this.leftAdd.specifications=null
                      this.selectMaterialTree()
                      this.bomLeftAdd=false
                      this.selectVersion()
                      this.bomLeftAdd=false
                      this.selectVersion()
                   })
                  }else{
                     let specificationsDto={
@@ -658,7 +658,7 @@
                      this.leftAdd.name=null
                      this.leftAdd.specifications=null
                      this.selectMaterialTree()
                      this.bomLeftAdd=false
                      this.bomLeftAdd=false
                      this.selectVersion()
                   })
                  }
@@ -676,7 +676,7 @@
        this.$refs[formName].resetFields();
      },
    leftAddBom(){
    },
    //获取子组件数据
    getChildData(data){
@@ -975,7 +975,7 @@
      }
    },
    startLeftAdd(){
    },
    getType(typeName){
      return typeName==="成品"?1:2
@@ -1312,7 +1312,7 @@
  height: calc(100% - 48px);
  background-color: #fff;
  display: flex;
}
.thing .left {
src/components/view/technology.vue
@@ -559,4 +559,4 @@
            }
        },
    };
</script>
</script>
src/main.js
@@ -13,7 +13,7 @@
Vue.prototype.LOCATIONVUE = "http://127.0.0.1:80/"; //前端本地端口
Vue.prototype.HaveJson = (val) => {
    return JSON.parse(JSON.stringify(val))
    return JSON.parse(JSON.stringify(val))
}
Vue.use(VueAxios, axios)
@@ -23,9 +23,9 @@
Vue.use(qs);
Vue.use(api);
// const javaApi = 'http://192.168.14.249:8001'
const javaApi = 'http://localhost:8001'
const javaApi = 'http://127.0.0.1:8001/'
// const javaApi = 'http://127.0.0.1:8001/'
@@ -37,71 +37,74 @@
Vue.prototype.$axios = axios
import {
    Message
    Message
} from 'element-ui';
axios.interceptors.request.use(function (config) {
    let tk = sessionStorage.getItem("token")
    let token;
    if (tk != undefined && tk != '') {
        token = tk
    }
    if (token) {
        config.headers['token'] = "" + token
        // config.headers['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8'
        // config.headers['Content-Type'] = 'application/json'
    }
    // console.log(config)
    if (config.method === 'post' || config.method === 'put') {
axios.interceptors.request.use(function(config) {
    let tk = sessionStorage.getItem("token")
    let token;
    if (tk != undefined && tk != '') {
        token = tk
    }
    if (token) {
        config.headers['token'] = "" + token
        // config.headers['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8'
        // config.headers['Content-Type'] = 'application/json'
    }
    // console.log(config)
    if (config.method === 'post' || config.method === 'put') {
        config.data = qs.stringify(config.data)
    }
    if (config.headers['Content-Type'] == 'application/json') {
        config.data = qs.parse(config.data)
        // console.log(config.data)
    }
        config.data = qs.stringify(config.data)
    }
    if (config.headers['Content-Type'] == 'application/json') {
        config.data = qs.parse(config.data)
        // console.log(config.data)
    }
    return config
}, function (error) {
    return Promise.reject(error)
    return config
}, function(error) {
    return Promise.reject(error)
})
axios.interceptors.response.use(res => {
    return res.data
}, async function (err) {
    if (JSON.stringify(err).indexOf('timeout of') > -1) {
        Message.error('请求超时,请检查网络设置')
    } else if (JSON.stringify(err).indexOf('ERR_CONNECTION_RESET') > -1 || JSON.stringify(err).indexOf(
        'Network Error') > -1) {
        Message.error('网络连接错误')
    } else if (err.response.status == "503") {
        Message.error('服务未响应')
    } else if (err.response.status == "404") {
        Message.error('请求失败,链接地址不存在')
    } else if (err.response.status == "403") {
        Message.error('token不存在')
    } else if (err.response.status == "402") {
        Message.error('无效签名,请重新登录')
        localStorage.removeItem('autoenter')
        window.location.href = '/enter'
    } else if (err.response.status == "401") {
        await axios.post(javaApi + "user/refresh", {
            reToken: sessionStorage.getItem('reToken')
        }).then(res => {
            if (res.data.code == 201) {
                Message.error('认证失败,需要重新登录')
                localStorage.removeItem('autoenter')
                window.location.href = '/enter'
                return Promise.reject(err)
            }
            sessionStorage.setItem('token', res.data.token)
            sessionStorage.setItem('reToken', res.data.reToken)
        })
        return axios(err.config)
    } else if (err.response.status == "500") {
        Message.error('服务端出现错误')
    }
    return Promise.reject(err)
    if(res.config.responseType === 'blob'){
        return res;
    }
    return res.data
}, async function(err) {
    if (JSON.stringify(err).indexOf('timeout of') > -1) {
        Message.error('请求超时,请检查网络设置')
    } else if (JSON.stringify(err).indexOf('ERR_CONNECTION_RESET') > -1 || JSON.stringify(err).indexOf(
            'Network Error') > -1) {
        Message.error('网络连接错误')
    } else if (err.response.status == "503") {
        Message.error('服务未响应')
    } else if (err.response.status == "404") {
        Message.error('请求失败,链接地址不存在')
    } else if (err.response.status == "403") {
        Message.error('token不存在')
    } else if (err.response.status == "402") {
        Message.error('无效签名,请重新登录')
        localStorage.removeItem('autoenter')
        window.location.href = '/enter'
    } else if (err.response.status == "401") {
        await axios.post(javaApi + "user/refresh", {
            reToken: sessionStorage.getItem('reToken')
        }).then(res => {
            if (res.data.code == 201) {
                Message.error('认证失败,需要重新登录')
                localStorage.removeItem('autoenter')
                window.location.href = '/enter'
                return Promise.reject(err)
            }
            sessionStorage.setItem('token', res.data.token)
            sessionStorage.setItem('reToken', res.data.reToken)
        })
        return axios(err.config)
    } else if (err.response.status == "500") {
        Message.error('服务端出现错误')
    }
    return Promise.reject(err)
})
// 路由拦截器
@@ -119,7 +122,7 @@
// });
new Vue({
    el: '#app',
    router,
    render: h => h(App)
    el: '#app',
    router,
    render: h => h(App)
});
src/view/index.vue
@@ -1,556 +1,586 @@
<style scoped>
.all {
    width: 100vw;
    height: 100vh;
    background-size: 100% 100%;
    display: flex;
    flex-wrap: wrap;
}
    .all {
        width: 100vw;
        height: 100vh;
        background-size: 100% 100%;
        display: flex;
        flex-wrap: wrap;
    }
.title {
    width: 100%;
    height: 58px;
    display: flex;
    align-items: center;
    padding: 0 30px;
}
    .title {
        width: 100%;
        height: 58px;
        display: flex;
        align-items: center;
        padding: 0 30px;
    }
.logo {
    width: 130px;
}
    .logo {
        width: 130px;
    }
.logo img {
    width: 100%;
    height: 100%;
}
    .logo img {
        width: 100%;
        height: 100%;
    }
.title .label {
    font-size: 18px;
    text-align: center;
    width: calc(100% - 130px - 200px);
}
    .title .label {
        font-size: 18px;
        text-align: center;
        width: calc(100% - 130px - 200px);
    }
.user {
    width: 200px;
    height: 100%;
    display: flex;
    align-items: center;
    justify-content: right;
    color: #000;
}
    .user {
        width: 200px;
        height: 100%;
        display: flex;
        align-items: center;
        justify-content: right;
        color: #000;
    }
.user * {
    margin: 0 5px;
}
    .user * {
        margin: 0 5px;
    }
.user img {
    margin-left: 20px;
    cursor: pointer;
    width: 14px;
}
    .user img {
        margin-left: 20px;
        cursor: pointer;
        width: 14px;
    }
.user span {
    font-size: 14px;
}
    .user span {
        font-size: 14px;
    }
.left {
    height: calc(100vh - 58px - 40px);
    background-color: #004ea2;
    display: flex;
    align-items: center;
    flex-direction: column;
    padding: 20px 0;
    transition: 0.3s;
    overflow-y: auto;
}
    .left {
        height: calc(100vh - 58px - 40px);
        background-color: #004ea2;
        display: flex;
        align-items: center;
        flex-direction: column;
        padding: 20px 0;
        transition: 0.3s;
        overflow-y: auto;
    }
.left::-webkit-scrollbar {
    width: 0;
}
    .left::-webkit-scrollbar {
        width: 0;
    }
.left .box {
    color: #fff;
    width: 68px;
    height: 68px;
    margin: 8px 0;
    cursor: pointer;
    display: flex;
    align-items: center;
    justify-content: center;
    flex-direction: column;
    border-radius: 8px;
}
    .left .box {
        color: #fff;
        width: 68px;
        height: 68px;
        margin: 8px 0;
        cursor: pointer;
        display: flex;
        align-items: center;
        justify-content: center;
        flex-direction: column;
        border-radius: 8px;
    }
.left .box:active {
    opacity: 0.8;
}
    .left .box:active {
        opacity: 0.8;
    }
.left .active_box {
    background-color: #fff;
    color: #004ea2;
}
    .left .active_box {
        background-color: #fff;
        color: #004ea2;
    }
.left .box i {
    font-size: 24px;
    margin-bottom: 8px;
}
    .left .box i {
        font-size: 24px;
        margin-bottom: 8px;
    }
.left .box div {
    font-size: 14px;
}
    .left .box div {
        font-size: 14px;
    }
.small_menu {
    color: #666;
}
    .small_menu {
        color: #666;
    }
.small_menu .active_p {
    color: #004ea2;
}
    .small_menu .active_p {
        color: #004ea2;
    }
.small_menu p {
    padding: 12px 15px;
    cursor: pointer;
}
    .small_menu p {
        padding: 12px 15px;
        cursor: pointer;
    }
.small_menu p:hover {
    background-color: rgba(0, 0, 0, 0.05);
}
    .small_menu p:hover {
        background-color: rgba(0, 0, 0, 0.05);
    }
.small_menu i {
    font-size: 16px;
}
    .small_menu i {
        font-size: 16px;
    }
.small_menu span {
    font-size: 14px;
}
    .small_menu span {
        font-size: 14px;
    }
.right {
    height: calc(100vh - 58px);
    transition: 0.3s;
}
    .right {
        height: calc(100vh - 58px);
        transition: 0.3s;
    }
.tag {
    width: 100%;
    height: 36px;
    background: rgb(255, 255, 255);
    opacity: 0.8;
    box-shadow: 0px 4px 16px rgba(0, 0, 0, 0.1);
    display: flex;
    align-items: center;
    color: #999;
    font-size: 14px;
}
    .tag {
        width: 100%;
        height: 36px;
        background: rgb(255, 255, 255);
        opacity: 0.8;
        box-shadow: 0px 4px 16px rgba(0, 0, 0, 0.1);
        display: flex;
        align-items: center;
        color: #999;
        font-size: 14px;
    }
.tag .el-icon-delete {
    display: none;
}
    .tag .el-icon-delete {
        display: none;
    }
.tag .el-icon-delete:hover {
    color: #F56C6C;
}
    .tag .el-icon-delete:hover {
        color: #F56C6C;
    }
.tag:hover .el-icon-delete {
    display: block;
}
    .tag:hover .el-icon-delete {
        display: block;
    }
.tag>.el-icon-s-unfold,
.el-icon-s-fold,
.el-icon-delete {
    font-size: 18px;
    cursor: pointer;
    margin: 0 8px;
}
    .tag>.el-icon-s-unfold,
    .el-icon-s-fold,
    .el-icon-delete {
        font-size: 18px;
        cursor: pointer;
        margin: 0 8px;
    }
.tabs {
    min-width: calc(100% - 68px);
    height: 100%;
    align-items: center;
    display: flex;
    overflow-x: auto;
}
    .tabs {
        min-width: calc(100% - 68px);
        height: 100%;
        align-items: center;
        display: flex;
        overflow-x: auto;
    }
.tab {
    cursor: pointer;
    font-size: 14px;
    margin: 0 8px;
    line-height: 32px;
    transition: 0.3s;
    border-top: 2px solid transparent;
    border-bottom: 2px solid transparent;
    user-select: none;
    flex-shrink: 0;
}
    .tab {
        cursor: pointer;
        font-size: 14px;
        margin: 0 8px;
        line-height: 32px;
        transition: 0.3s;
        border-top: 2px solid transparent;
        border-bottom: 2px solid transparent;
        user-select: none;
        flex-shrink: 0;
    }
.tab i {
    font-size: 12px;
    display: none;
}
    .tab i {
        font-size: 12px;
        display: none;
    }
.active_tab {
    border-bottom: 2px solid #004ea2;
    color: #004ea2;
}
    .active_tab {
        border-bottom: 2px solid #004ea2;
        color: #004ea2;
    }
.active_tab i {
    display: inline;
    color: #004ea2;
}
    .active_tab i {
        display: inline;
        color: #004ea2;
    }
.component_view {
    height: calc(100vh - 94px - 22px);
    width: calc(100% - 48px);
    padding: 11px 24px;
    background: rgb(245, 247, 251);
    overflow-y: auto;
}
    .component_view {
        height: calc(100vh - 94px - 22px);
        width: calc(100% - 48px);
        padding: 11px 24px;
        background: rgb(245, 247, 251);
        overflow-y: auto;
    }
.com_index {
    width: 100%;
    height: 100%;
}
    .com_index {
        width: 100%;
        height: 100%;
    }
</style>
<template>
    <div class="all">
        <div class="title">
            <div class="logo">
                <img src="../../static/img/logo 1.png" />
            </div>
            <div class="label">中天海洋新一代mom系统</div>
            <div class="user">
                <el-avatar :size="24">{{ userName.substring(0, 1) }}</el-avatar>
                <span>{{ userName }}</span>
                <img src="../../static/img/退出.png" @click="out" />
            </div>
        </div>
        <div class="left" :style="`width: ${leftOpen ? '92' : '0'}px;`">
            <div :class="`box ${activeBox == 0 ? 'active_box' : ''}`" @click="addTab(menu[0].c[0])">
                <i class="font icon-shouye"></i>
                <div>首页</div>
            </div>
            <div :class="`box ${activeBox == 3 ? 'active_box' : ''}`" @click="addTab(menu[1].c[0])">
                <i class="font icon-jine"></i>
                <div>销售管理</div>
            </div>
            <el-popover placement="right-start" width="90" trigger="click" v-for="(a, ai) in menu" :key="ai"
                v-if="a.k != '0' && a.k != '3'">
                <div :class="`box ${activeBox == a.k ? 'active_box' : ''}`" @click="activeBox = a.k" slot="reference">
                    <i :class="a.i"></i>
                    <div>{{ a.v }}</div>
                </div>
                <div class="small_menu">
                    <p v-for="(b, bi) in a.c" :key="bi" :class="activeP == b.k ? 'active_p' : ''" @click="addTab(b)">
                        <i :class="b.i"></i>
                        <span>{{ b.v }}</span>
                    </p>
                </div>
            </el-popover>
        </div>
        <div class="right" :style="`width: calc(100% - ${leftOpen ? '92' : '0'}px);`">
            <div class="tag">
                <i :class="`${leftOpen ? 'el-icon-s-unfold' : 'el-icon-s-fold'}`" @click="leftOpen = !leftOpen"></i>
                <div class="tabs">
                    <div :class="`tab ${tabActive == a.k ? 'active_tab' : ''}`" v-for="(a, ai) in tabs" :key="ai"
                        @click="upTabActive(a.k)">
                        {{ a.v }}
                        <i class="el-icon-close" @click="removeTab(ai)" v-if="tabActive != 0"></i>
                    </div>
                </div>
                <i class="el-icon-delete" @click="allDel" title="删除所有标签页"></i>
            </div>
            <div class="component_view">
                <component class="com_index" v-for="(com, index) in tabs" :is="com.u" :key="upIndex + '|' + index"
                    v-show="com.k == tabActive" @removeAllTab="removeAllTab">
                </component>
            </div>
        </div>
    </div>
    <div class="all">
        <div class="title">
            <div class="logo">
                <img src="../../static/img/logo 1.png" />
            </div>
            <div class="label">中天海洋新一代mom系统</div>
            <div class="user">
                <el-avatar :size="24">{{ userName.substring(0, 1) }}</el-avatar>
                <span>{{ userName }}</span>
                <img src="../../static/img/退出.png" @click="out" />
            </div>
        </div>
        <div class="left" :style="`width: ${leftOpen ? '92' : '0'}px;`">
            <div :class="`box ${activeBox == 0 ? 'active_box' : ''}`" @click="addTab(menu[0].c[0])">
                <i class="font icon-shouye"></i>
                <div>首页</div>
            </div>
            <div :class="`box ${activeBox == 3 ? 'active_box' : ''}`" @click="addTab(menu[1].c[0])">
                <i class="font icon-jine"></i>
                <div>销售管理</div>
            </div>
            <el-popover placement="right-start" width="90" trigger="click" v-for="(a, ai) in menu" :key="ai"
                v-if="a.k != '0' && a.k != '3'">
                <div :class="`box ${activeBox == a.k ? 'active_box' : ''}`" @click="activeBox = a.k" slot="reference">
                    <i :class="a.i"></i>
                    <div>{{ a.v }}</div>
                </div>
                <div class="small_menu">
                    <p v-for="(b, bi) in a.c" :key="bi" :class="activeP == b.k ? 'active_p' : ''" @click="addTab(b)">
                        <i :class="b.i"></i>
                        <span>{{ b.v }}</span>
                    </p>
                </div>
            </el-popover>
        </div>
        <div class="right" :style="`width: calc(100% - ${leftOpen ? '92' : '0'}px);`">
            <div class="tag">
                <i :class="`${leftOpen ? 'el-icon-s-unfold' : 'el-icon-s-fold'}`" @click="leftOpen = !leftOpen"></i>
                <div class="tabs">
                    <div :class="`tab ${tabActive == a.k ? 'active_tab' : ''}`" v-for="(a, ai) in tabs" :key="ai"
                        @click="upTabActive(a.k)">
                        {{ a.v }}
                        <i class="el-icon-close" @click="removeTab(ai)" v-if="tabActive != 0"></i>
                    </div>
                </div>
                <i class="el-icon-delete" @click="allDel" title="删除所有标签页"></i>
            </div>
            <div class="component_view">
                <component class="com_index" v-for="(com, index) in tabs" :is="com.u" :key="upIndex + '|' + index"
                    v-show="com.k == tabActive" @removeAllTab="removeAllTab">
                </component>
            </div>
        </div>
    </div>
</template>
<script>
const requireComponent = require.context("../components/view", false, /\.vue/);
var comObj = {};
requireComponent.keys().forEach(fileName => {
    var names = fileName
        .split("/")
        .pop()
        .replace(".vue", "");
    const componentConfig = requireComponent(fileName);
    comObj[names] = componentConfig.default || componentConfig;
});
export default {
    components: comObj,
    data() {
        return {
            userName: "value",
            leftOpen: true,
            menu: [{
                k: 0,
                v: "首页",
                i: "font icon-shouye",
                c: [{
                    k: 0,
                    v: "首页",
                    i: "font icon-shouye",
                    u: "index-index"
                }]
            },
            {
                k: 3,
                v: "销售管理",
                i: "font icon-jine",
                c: [{
                    k: 11,
                    v: "销售管理",
                    i: "font icon-jine",
                    u: "sale"
                }]
            },
            {
                k: 1,
                v: "技术管理",
                i: "font icon-ic_form_set24px",
                c: [{
                    k: 1,
                    v: "标准BOM",
                    i: "font icon-shouye",
                    u: "standard"
                },
                {
                    k: 2,
                    v: "订单BOM",
                    i: "font icon-shouye",
                    u: "technical"
                }
                ]
            },
            {
                k: 4,
                v: "生产管理",
                i: "font icon-shengchanguanli",
                c: [{
                    k: 12,
                    v: "生产订单",
                    i: "font icon-shouye",
                    u: ""
                },
                {
                    k: 13,
                    v: "生产计划",
                    i: "font icon-shouye",
                    u: ""
                },
                {
                    k: 14,
                    v: "生产报工",
                    i: "font icon-shouye",
                    u: ""
                }
                ]
            },
            {
                k: 5,
                v: "WMS管理",
                i: "font icon-a-Inventorydumprequest",
                c: [{
                    k: 17,
                    v: "半成品库存",
                    i: "font icon-shouye",
                    u: ""
                },
                {
                    k: 18,
                    v: "成品库存",
                    i: "font icon-shouye",
                    u: ""
                },
                {
                    k: 19,
                    v: "成品发货",
                    i: "font icon-shouye",
                    u: ""
                },
                {
                    k: 20,
                    v: "成品入库",
                    i: "font icon-shouye",
                    u: ""
                }
                ]
            },
            {
                k: 2,
                v: "QMS管理",
                i: "font icon-xunhuan",
                c: [{
                    k: 3,
                    v: "原材料检验",
                    i: "font icon-shouye",
                    u: "rawInsBox"
                },
                {
                    k: 5,
                    v: "过程检验",
                    i: "font icon-shouye",
                    u: "processInspection"
                },
                {
                    k: 6,
                    v: "产品检验",
                    i: "font icon-shouye",
                    u: "finishedProductInspection"
                },
                {
                    k: 7,
                    v: "不合格品管理",
                    i: "font icon-shouye",
                    u: "unqualifiedManagement"
                },
                {
                    k: 9,
                    v: "质量统计",
                    i: "font icon-shouye",
                    u: ""
                },
                {
                    k: 10,
                    v: "计量管理",
                    i: "font icon-shouye",
                    u: "measurementManagement"
                },
                {
                    k: 10.1,
                    v: "不合格品处置",
                    i: "font icon-shouye",
                    u: "Processingproducts"
                }
                ]
            },
            {
                k: 6,
                v: "核算管理",
                i: "font icon-caiwuhesuanxitong",
                c: [{
                    k: 21,
                    v: "产量工资",
                    i: "font icon-shouye",
                    u: ""
                },
                {
                    k: 22,
                    v: "员工出勤",
                    i: "font icon-shouye",
                    u: ""
                }
                ]
            },
            {
                k: 7,
                v: "基础数据",
                i: "font icon-a-ziyuan20",
                c: [{
                    k: 23,
                    v: "生产记录维护",
                    i: "font icon-shouye",
                    u: "record-content"
                },
                {
                    k: 25,
                    v: "技术指标维护",
                    i: "font icon-shouye",
                    u: "Technicalindex"
                },
                {
                    k: 26,
                    v: "工艺路线维护",
                    i: "font icon-shouye",
                    u: "technology"
                },
                {
                    k: 27,
                    v: "设备维护",
                    i: "font icon-shouye",
                    u: "laboratoryManagement"
                },
                {
                    k: 28,
                    v: "物料清单维护",
                    i: "font icon-shouye",
                    u: "mbom"
                }
                ]
            }
            ],
            activeBox: 0,
            activeP: 0,
            tabActive: 0,
            tabs: [{
                k: 0,
                v: "首页",
                i: "font icon-shouye",
                u: "index-index"
            }],
            upIndex: 0
        };
    },
    created() { },
    mounted() {
        this.userName = JSON.parse(localStorage.getItem("user")).name;
    },
    methods: {
        addTab(ob) {
            if (ob.k == 0) this.activeBox = 0;
            if (ob.k == 11) this.activeBox = 3;
            this.activeP = ob.k; //0
            this.tabActive = ob.k; //0
            let num = -1;
            this.tabs.forEach((a, ai) => {
                if (ob.k == a.k) {
                    num = a.k;
                }
            });
            // 如果没有遍历到tabs里没有该ob对应的table,往tabs里面加入该ob
            if (num == -1) {
                this.tabs.push(ob);
            }
        },
        removeTab(index) {
            this.tabs.splice(index, 1);
            this.activeP = this.tabs[this.tabs.length - 1].k;
            this.tabActive = this.tabs[this.tabs.length - 1].k;
        },
        allDel() {
            this.activeBox = 0
            this.activeP = 0
            this.tabActive = 0
            this.tabs = [{
                k: 0,
                v: " 首页",
                i: "font icon-shouye",
                u: "index-index"
            }]
        },
        upTabActive(num) {
            this.tabActive = num;
            this.activeP = num;
            for (var i = 0; i < this.menu.length; i++) {
                this.menu[i].c.forEach(b => {
                    if (b.k == num) {
                        this.activeBox = this.menu[i].k;
                        return
    const requireComponent = require.context("../components/view", false, /\.vue/);
    var comObj = {};
    requireComponent.keys().forEach(fileName => {
        var names = fileName
            .split("/")
            .pop()
            .replace(".vue", "");
        const componentConfig = requireComponent(fileName);
        comObj[names] = componentConfig.default || componentConfig;
    });
    export default {
        components: comObj,
        data() {
            return {
                userName: "value",
                leftOpen: true,
                menu: [{
                        k: 0,
                        v: "首页",
                        i: "font icon-shouye",
                        c: [{
                            k: 0,
                            v: "首页",
                            i: "font icon-shouye",
                            u: "index-index"
                        }]
                    },
                    {
                        k: 3,
                        v: "销售管理",
                        i: "font icon-jine",
                        c: [{
                            k: 11,
                            v: "销售管理",
                            i: "font icon-jine",
                            u: "sale"
                        }]
                    },
                    {
                        k: 1,
                        v: "技术管理",
                        i: "font icon-ic_form_set24px",
                        c: [{
                                k: 1,
                                v: "标准BOM",
                                i: "font icon-shouye",
                                u: "standard"
                            },
                            {
                                k: 2,
                                v: "订单BOM",
                                i: "font icon-shouye",
                                u: "technical"
                            }
                        ]
                    },
                    {
                        k: 4,
                        v: "生产管理",
                        i: "font icon-shengchanguanli",
                        c: [{
                                k: 12,
                                v: "生产订单",
                                i: "font icon-shouye",
                                u: ""
                            },
                            {
                                k: 13,
                                v: "生产计划",
                                i: "font icon-shouye",
                                u: ""
                            },
                            {
                                k: 14,
                                v: "生产报工",
                                i: "font icon-shouye",
                                u: ""
                            }
                        ]
                    },
                    {
                        k: 5,
                        v: "WMS管理",
                        i: "font icon-a-Inventorydumprequest",
                        c: [{
                                k: 15,
                                v: "原材料库存",
                                i: "font icon-shouye",
                                u: ""
                            },
                            {
                                k: 16,
                                v: "回单管理",
                                i: "font icon-shouye",
                                u: ""
                            },
                            {
                                k: 17,
                                v: "半成品库存",
                                i: "font icon-shouye",
                                u: ""
                            },
                            {
                                k: 18,
                                v: "成品库存",
                                i: "font icon-shouye",
                                u: ""
                            },
                            {
                                k: 19,
                                v: "成品发货",
                                i: "font icon-shouye",
                                u: ""
                            },
                            {
                                k: 20,
                                v: "成品入库",
                                i: "font icon-shouye",
                                u: ""
                            }
                        ]
                    },
                    {
                        k: 2,
                        v: "QMS管理",
                        i: "font icon-xunhuan",
                        c: [{
                                k: 3,
                                v: "原材料检验",
                                i: "font icon-shouye",
                                u: "rawInsBox"
                            },
                            {
                                k: 4,
                                v: "原材料不合格品",
                                i: "font icon-shouye",
                                u: "rawUnqualifiedBox"
                            },
                            {
                                k: 5,
                                v: "过程检验",
                                i: "font icon-shouye",
                                u: "processInspection"
                            },
                            {
                                k: 6,
                                v: "成品检验",
                                i: "font icon-shouye",
                                u: "finishedProductInspection"
                            },
                            {
                                k: 7,
                                v: "不合格品管理",
                                i: "font icon-shouye",
                                u: "unqualifiedManagement"
                            },
                            {
                                k: 9,
                                v: "质量统计",
                                i: "font icon-shouye",
                                u: ""
                            },
                            {
                                k: 10,
                                v: "计量管理",
                                i: "font icon-shouye",
                                u: "measurementManagement"
                            },
                            {
                                k: 10.1,
                                v: "不合格品处置",
                                i: "font icon-shouye",
                                u: "Processingproducts"
                            }
                        ]
                    },
                    {
                        k: 6,
                        v: "核算管理",
                        i: "font icon-caiwuhesuanxitong",
                        c: [{
                                k: 21,
                                v: "产量工资",
                                i: "font icon-shouye",
                                u: ""
                            },
                            {
                                k: 22,
                                v: "员工出勤",
                                i: "font icon-shouye",
                                u: ""
                            }
                        ]
                    },
                    {
                        k: 7,
                        v: "基础数据",
                        i: "font icon-a-ziyuan20",
                        c: [{
                                k: 23,
                                v: "生产记录维护",
                                i: "font icon-shouye",
                                u: "record-content"
                            },
                            {
                                k: 24,
                                v: "自检项目维护",
                                i: "font icon-shouye",
                                u: "self-inspection"
                            },
                            {
                                k: 25,
                                v: "技术指标维护",
                                i: "font icon-shouye",
                                u: "Technicalindex"
                            },
                            {
                                k: 26,
                                v: "工艺路线维护",
                                i: "font icon-shouye",
                                u: "technology"
                            },
                            {
                                k: 27,
                                v: "设备维护",
                                i: "font icon-shouye",
                                u: "laboratoryManagement"
                            },
                            {
                                k: 28,
                                v: "物料清单维护",
                                i: "font icon-shouye",
                                u: "mbom"
                            },
                            {
                                k: 30,
                                v: "生产工艺维护",
                                i: "font icon-shouye",
                                u: "equipmentmaintain"
                            }
                        ]
                    }
                })
            }
        },
        out() {
            sessionStorage.clear();
            localStorage.removeItem("autoenter");
            this.$router.push("/enter");
        },
        removeAllTab() {
            this.upIndex++
            this.$message.warning('数据变动较大,页面自动更新!')
        }
    }
};
</script>
                ],
                activeBox: 0,
                activeP: 0,
                tabActive: 0,
                tabs: [{
                    k: 0,
                    v: "首页",
                    i: "font icon-shouye",
                    u: "index-index"
                }],
                upIndex: 0
            };
        },
        created() {},
        mounted() {
            this.userName = JSON.parse(localStorage.getItem("user")).name;
        },
        methods: {
            addTab(ob) {
                if (ob.k == 0) this.activeBox = 0;
                if (ob.k == 11) this.activeBox = 3;
                this.activeP = ob.k; //0
                this.tabActive = ob.k; //0
                let num = -1;
                this.tabs.forEach((a, ai) => {
                    if (ob.k == a.k) {
                        num = a.k;
                    }
                });
                // 如果没有遍历到tabs里没有该ob对应的table,往tabs里面加入该ob
                if (num == -1) {
                    this.tabs.push(ob);
                }
            },
            removeTab(index) {
                this.tabs.splice(index, 1);
                this.activeP = this.tabs[this.tabs.length - 1].k;
                this.tabActive = this.tabs[this.tabs.length - 1].k;
            },
            allDel() {
                this.activeBox = 0
                this.activeP = 0
                this.tabActive = 0
                this.tabs = [{
                    k: 0,
                    v: " 首页",
                    i: "font icon-shouye",
                    u: "index-index"
                }]
            },
            upTabActive(num) {
                this.tabActive = num;
                this.activeP = num;
                for (var i = 0; i < this.menu.length; i++) {
                    this.menu[i].c.forEach(b => {
                        if (b.k == num) {
                            this.activeBox = this.menu[i].k;
                            return
                        }
                    })
                }
            },
            out() {
                sessionStorage.clear();
                localStorage.removeItem("autoenter");
                this.$router.push("/enter");
            },
            removeAllTab() {
                this.upIndex++
                this.$message.warning('数据变动较大,页面自动更新!')
            }
        }
    };
</script>