李林
2023-08-22 c4345710b23e8a00b3869e4926ce72786690e0a4
修改检验计划功能
已修改3个文件
305 ■■■■■ 文件已修改
src/api/url.js 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/util/requestUtil.js 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/experiment/planAssignments/plan.vue 290 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/url.js
@@ -1,4 +1,10 @@
const url = {
    "selectAllPlan": "/plan/selectAllPlan",//查询所有检验计划
    "choosecheck": "/plan/choosecheck",//分配--选择检验人
    "chooseinstum": "/plan/chooseinstum",//分配--选择设备
    "reported": "/plan/reported",//上报
    "distribution": "/plan/distribution",//分配
    "check": "/plan/check",//检验
}
export default function(Vue) {
src/api/util/requestUtil.js
@@ -15,6 +15,15 @@
        data
    })
}
export function wpost(path, params) {
    return request({
        url: path,
        method: 'post',
        params
    })
}
export function postFile(path, data) {
    return request({
        url: path,
src/views/experiment/planAssignments/plan.vue
@@ -17,11 +17,11 @@
        margin: 10px;
        padding: 15px;
        background-color: white;
        height: calc(100vh - 15vh);
        height: calc(100vh - 18vh);
        overflow-y: auto;
    }
    .order_num{
    .order_num {
        border-radius: 1rem;
        width: 35px;
        height: 25px;
@@ -56,41 +56,77 @@
            <el-button size="small">重置</el-button>
        </div>
        <div class="thing">
            <el-table :data="tableData" style="width: 100%;" row-key="id" default-expand-all
            <el-table :data="tableData" style="width: 100%;" row-key="code" default-expand-all
                :tree-props="{children: 'children', hasChildren: 'hasChildren'}" :key="upIndex">
                <el-table-column type="index" width="50" label="序号">
                </el-table-column>
                <el-table-column prop="date" label="申请单号">
                <el-table-column prop="code" label="申请单号" width="200px">
                    <template slot-scope="scope">
                        <div style="display: flex;">
                            <div v-if="scope.row.code=='01'" style="color: #3caaff;background-color: #eff5ff;" class="order_num">01</div>
                            <div v-else-if="scope.row.code=='02'" style="color: #57c981;background-color: #f1fbf4;" class="order_num">02</div>
                            <div v-else-if="scope.row.code=='03'" style="color: #dfa8fb;background-color: #faf2ff;" class="order_num">03</div>
                            <div>{{scope.row.date}}</div>
                            <div v-if="scope.row.orderNum=='01'" style="color: #3caaff;background-color: #eff5ff;" class="order_num">
                                01
                            </div>
                            <div v-else-if="scope.row.orderNum=='02'" style="color: #57c981;background-color: #f1fbf4;"
                                class="order_num">
                                02</div>
                            <div v-else-if="scope.row.orderNum=='03'" style="color: #dfa8fb;background-color: #faf2ff;"
                                class="order_num">
                                03</div>
                            <div>{{scope.row.code}}</div>
                        </div>
                    </template>
                </el-table-column>
                <el-table-column prop="name" label="检验结果">
                <el-table-column prop="name" label="名称">
                </el-table-column>
                <el-table-column prop="address" label="地址">
                <el-table-column prop="unit" label="单位">
                </el-table-column>
                <el-table-column label="操作" width="80">
                <el-table-column prop="required" label="要求值">
                </el-table-column>
                <el-table-column prop="internal" label="内控值">
                </el-table-column>
                <el-table-column prop="testValue" label="检验值">
                </el-table-column>
                <el-table-column prop="checker" label="执行人">
                </el-table-column>
                <el-table-column prop="instrumentname" label="检验日期">
                </el-table-column>
                <el-table-column prop="testState" label="检验状态">
                    <template slot-scope="scope">
                        <el-button size="mini" type="primary" v-if="isIfReport(scope.row)">上报</el-button>
                        <el-button size="mini" type="warning" @click="openUpDia(scope.row)"
                            v-else-if="scope.row.code=='03'&&scope.row.insId==undefined&&scope.row.address==null">分配</el-button>
                        <el-button size="mini" type="success" @click="openUpInsDia(scope.row)"
                            v-else-if="scope.row.code=='03'&&scope.row.insId==undefined&&scope.row.name==null">检验</el-button>
                        <el-tag type="success" v-if="scope.row.testState==1">合格</el-tag>
                        <el-tag type="danger" v-else-if="scope.row.testState==0">不合格</el-tag>
                    </template>
                </el-table-column>
                <el-table-column prop="startTime" label="检验开始" width="100px">
                </el-table-column>
                <el-table-column prop="endTime" label="检验结束" width="100px">
                </el-table-column>
                <el-table-column label="操作" width="150">
                    <template slot-scope="scope">
                        <el-button size="mini" type="primary" v-if="isIfReport(scope.row)"
                            @click="addReported(scope.row.id)">上报</el-button>
                        <el-button size="mini" type="text" @click="openUpDia(scope.row)"
                            v-if="scope.row.orderNum=='02'">分配</el-button>
                        <el-button size="mini" type="text" @click="openUpInsDia(scope.row)"
                            v-if="scope.row.orderNum=='02'">检验</el-button>
                    </template>
                </el-table-column>
            </el-table>
        </div>
        <el-dialog title="分配设备和人员" :visible.sync="upDia" width="500px" top="30vh">
            <div class="body">
                <el-row style="line-height: 46px;">
                <el-row style="line-height: 50px;">
                    <el-col :span="4" style="font-size: 14px;text-align: right;">人员:</el-col>
                    <el-col :span="16" :offset="1">
                        <el-input v-model="upData.address" size="small" clearable></el-input>
                        <el-select v-model="upData.checker" size="medium" clearable style="width: 100%;">
                            <el-option v-for="(a, ai) in users" :key="ai" :label="a.name" :value="a.id"></el-option>
                        </el-select>
                    </el-col>
                </el-row>
                <el-row style="line-height: 50px;">
                    <el-col :span="4" style="font-size: 14px;text-align: right;">设备:</el-col>
                    <el-col :span="16" :offset="1">
                        <el-cascader v-model="upData.device" :options="devices" size="medium" style="width: 100%;" clearable
                            :props="{label: 'name',value: 'id',emitPath: false}" :show-all-levels="false"></el-cascader>
                    </el-col>
                </el-row>
            </div>
@@ -102,29 +138,37 @@
        <el-dialog title="检验" :visible.sync="upInsDia" width="500px">
            <div class="body" style="max-height: 50vh;overflow-y: auto;">
                <el-row style="line-height: 46px;">
                    <el-col :span="4" style="font-size: 14px;text-align: right;">样品编码:</el-col>
                    <el-col :span="8">{{upData.date}}</el-col>
                    <el-col :span="4" style="font-size: 14px;text-align: right;">样品名称:</el-col>
                    <el-col :span="8">{{upData.date}}</el-col>
                    <el-col :span="5" style="font-size: 14px;text-align: right;">申请单编码:</el-col>
                    <el-col :span="7">{{upData.insId}}</el-col>
                    <el-col :span="5" style="font-size: 14px;text-align: right;">样品名称:</el-col>
                    <el-col :span="7">{{upData.productName}}</el-col>
                </el-row>
                <el-row style="line-height: 46px;">
                    <el-col :span="4" style="font-size: 14px;text-align: right;">检验项目:</el-col>
                    <el-col :span="8">{{upData.date}}</el-col>
                    <el-col :span="4" style="font-size: 14px;text-align: right;">单位:</el-col>
                    <el-col :span="8">{{upData.date}}</el-col>
                    <el-col :span="5" style="font-size: 14px;text-align: right;">检验项目:</el-col>
                    <el-col :span="7">{{upData.name}}</el-col>
                    <el-col :span="5" style="font-size: 14px;text-align: right;">单位:</el-col>
                    <el-col :span="7">{{upData.unit}}</el-col>
                </el-row>
                <el-row style="line-height: 46px;">
                    <el-col :span="4" style="font-size: 14px;text-align: right;">标准值:</el-col>
                    <el-col :span="8">{{upData.date}}</el-col>
                    <el-col :span="4" style="font-size: 14px;text-align: right;">内控值:</el-col>
                    <el-col :span="8">{{upData.date}}</el-col>
                    <el-col :span="5" style="font-size: 14px;text-align: right;">标准值:</el-col>
                    <el-col :span="7">{{upData.required}}</el-col>
                    <el-col :span="5" style="font-size: 14px;text-align: right;">内控值:</el-col>
                    <el-col :span="7">{{upData.internal}}</el-col>
                </el-row>
                <el-row style="line-height: 46px;">
                    <el-col :span="5" style="font-size: 14px;text-align: right;">检验状态:</el-col>
                    <el-col :span="7">
                        <el-tag type="success" v-if="upData.testState==1">合格</el-tag>
                        <el-tag type="danger" v-else-if="upData.testState==0">不合格</el-tag>
                        <el-tag type="info" v-else>无结果</el-tag>
                    </el-col>
                </el-row>
                <el-row style="line-height: 46px;">
                    <el-col style="text-align: right;"><el-button size="mini" @click="addRes">添加检验值</el-button></el-col>
                </el-row>
                <el-row>
                    <el-col>
                        <el-table :data="upData.res" border style="width: 99.9%;" :key="upIndex2">
                        <el-table :data="upData.testValue" border style="width: 99.9%;" :key="upIndex2">
                            <el-table-column type="index" width="100" label="序号">
                            </el-table-column>
                            <el-table-column label="检验值">
@@ -137,7 +181,7 @@
                            <el-table-column label="操作" width="60">
                                <template slot-scope="scope">
                                    <el-button size="mini" type="text"
                                        @click.native.prevent="deleteRow(scope.$index, upData.res)">删除</el-button>
                                        @click.native.prevent="deleteRow(scope.$index, upData.testValue)">删除</el-button>
                                </template>
                            </el-table-column>
                        </el-table>
@@ -145,7 +189,7 @@
                </el-row>
            </div>
            <span slot="footer" class="dialog-footer">
                <el-button type="primary" @click="submitUpData">提 交</el-button>
                <el-button type="primary" @click="submitUpData2">提 交</el-button>
                <el-button @click="upInsDia = false">取 消</el-button>
            </span>
        </el-dialog>
@@ -153,6 +197,12 @@
</template>
<script>
    import {
        get,
        post,
        wpost,
        postFile
    } from "@/api/util/requestUtil.js"
    export default {
        data() {
            return {
@@ -161,125 +211,137 @@
                    date: [],
                    userName: null,
                },
                tableData: [{
                    id: 1,
                    insId: 123,
                    date: '2016-05-02',
                    name: null,
                    address: '上海市普陀区金沙江路 1518 弄',
                    children: [{
                        id: 33,
                        date: '2016-05-01',
                        name: null,
                        res: '[{"number": 1},{"number": 2}]',
                        address: '上海市普陀区金沙江路 1519 弄'
                    }, {
                        id: 34,
                        date: '2016-05-01',
                        name: null,
                        res: '[{"number": 1,"res": "不合格"},{"number": 3,"res": "不合格"}]',
                        address: '上海市普陀区金沙江路 1519 弄',
                        children: [{
                            id: 35,
                            date: 'hhh',
                            name: null,
                            res: '[{"number": 1},{"number": 2}]',
                            address: '上海市普陀区金沙江路 1519 弄'
                        }]
                    }]
                }, {
                    id: 2,
                    insId: 123,
                    date: '2016-05-04',
                    name: null,
                    address: '上海市普陀区金沙江路 1517 弄',
                    children: []
                }, {
                    id: 3,
                    insId: 123,
                    date: '2016-05-01',
                    children: [{
                        id: 31,
                        date: '2016-05-01',
                        name: null,
                        res: '[{"number": 1},{"number": 2}]',
                        address: '上海市普陀区金沙江路 1519 弄'
                    }, {
                        id: 32,
                        date: '2016-05-01',
                        name: null,
                        res: '[]',
                        address: null
                    }]
                }],
                tableData: [],
                upDia: false,
                upData: {},
                upIndex: 0,
                upInsDia: false,
                upIndex2: 0
                upIndex2: 0,
                users: [],
                devices: []
            }
        },
        mounted() {
            this.selectDataList()
            this.getUsers()
            this.getDevices()
        },
        methods: {
            selectDataList() {
                this.tableData.forEach(a => {
                    a.code = '01'
                    if (a.children != undefined) {
                        a.children.forEach(b => {
                            b.code = '02'
                            if (b.children != undefined) {
                                b.children.forEach(c => {
                                    c.code = '03'
                                    c.res = JSON.parse(c.res)
                                })
                            }
                        })
                    }
                get(this.$url.selectAllPlan).then(res => {
                    this.tableData = JSON.parse(JSON.stringify(res.data).replaceAll('pid', 'code').replaceAll('samplename',
                        'name').replaceAll('inspectionStatus', 'testState'))
                    this.tableData.forEach(a => {
                        a.orderNum = '01'
                        if (a.children != undefined) {
                            a.children.forEach(b => {
                                b.orderNum = '02'
                                if (b.testValue == undefined) {
                                    b.testValue = []
                                }
                            })
                        }
                    })
                    this.upIndex++
                })
                this.upIndex++
            },
            isIfReport(row) {
                var count = 0
                if (row.children == undefined) return false
                row.children.forEach(a => {
                    if (a.name != null && a.name != undefined) count++
                    if (a.testState != null && a.testState != undefined) count++
                })
                return row.insId != undefined && count == row.children.length
                return row.testState == undefined && row.orderNum == '01' && count == row
                    .children.length
            },
            openUpDia(row) {
                this.upDia = true
                this.upData = {
                    id: row.id,
                    address: row.address
                    id: row.code,
                    checker: null,
                    device: null
                }
            },
            submitUpData() {
                this.tableData.forEach(a => {
                    a.children.forEach(b => {
                        if (b.id == this.upData.id) {
                            b.address = this.upData.address
                        }
                    })
                if (this.upData.checker == null || this.upData.checker == '') {
                    this.$message.error('人员未分配')
                    return
                } else if (this.upData.device == null || this.upData.device == '') {
                    this.$message.error('设备未分配')
                    return
                }
                wpost(this.$url.distribution, {
                    id: this.upData.id,
                    userId: this.upData.checker,
                    instrumentId: this.upData.device
                }).then(res => {
                    this.$message.success('分配成功')
                    this.upDia = false
                    this.selectDataList()
                })
                this.$message.success('修改成功')
                this.upIndex++
                this.upDia = false
            },
            openUpInsDia(row) {
                this.upInsDia = true
                this.upData = this.HaveJson(row)
                var str = []
                JSON.parse('[' + this.upData.testValue + ']').forEach(a => {
                    str.push({
                        number: a
                    })
                })
                this.upData.testValue = this.HaveJson(str)
                this.tableData.forEach(a => {
                    a.children.forEach(b => {
                        if (b.code == this.upData.code) {
                            this.upData.insId = a.code
                            this.upData.productName = a.name
                        }
                    })
                })
            },
            deleteRow(index, rows) {
                rows.splice(index, 1);
            },
            addRes() {
                this.upData.res.push({
                this.upData.testValue.push({
                    "number": null
                })
                this.upIndex2++
            },
            getUsers() {
                get(this.$url.choosecheck).then(res => {
                    this.users = res.data
                })
            },
            getDevices() {
                get(this.$url.chooseinstum).then(res => {
                    this.devices = res.data
                })
            },
            addReported(id) {
                wpost(this.$url.reported, {
                    id: id
                }).then(res => {
                    this.$message.success('上报成功')
                    this.selectDataList()
                }).catch(e => {
                    this.$message.error('上报失败')
                })
            },
            submitUpData2() {
                var data = []
                this.upData.testValue.forEach(a => {
                    data.push(a.number)
                })
                wpost(this.$url.check, {
                    id: this.upData.code,
                    value: data.toString()
                }).then(res => {
                    this.$message.success('提交成功')
                    this.upInsDia = false
                    this.selectDataList()
                })
            }
        }
    }
</script>
</script>