<template>
|
<div class="bg-1">
|
<div style="margin: 5px 15px">
|
<el-row class="title">
|
<el-col :span="12" style="text-align: left">检验下单</el-col>
|
<el-col :span="12" style="text-align: right">
|
<el-button size="medium" type="primary" @click="dialogVisible1 = true"
|
:loading="exportCheckedLoading">导出检验结果</el-button>
|
<el-button size="medium" type="primary" @click="print">标签打印</el-button>
|
<el-button size="medium" type="primary" @click="playOrder(1)"
|
v-hasPermi="['business:order:add']">下单</el-button>
|
</el-col>
|
</el-row>
|
</div>
|
<basic-container>
|
<div class="search" :style="`height: ${more ? 100 : 50}px;`">
|
<el-row :gutter="10" style="width: 100%">
|
<el-col :span="20" style="display: flex; flex-wrap: wrap">
|
<div class="search_thing" style="width: 20%">
|
<div class="search_label">委托编号:</div>
|
<div class="search_input">
|
<el-input size="small" placeholder="请输入" clearable v-model="queryParams.entrustCode"
|
@keyup.enter.native="refreshTable()"></el-input>
|
</div>
|
</div>
|
<div class="search_thing" style="width: 20%">
|
<div class="search_label" style="width: 120px">
|
外部委托编号:
|
</div>
|
<div class="search_input">
|
<el-input size="small" placeholder="请输入" clearable v-model="queryParams.outEntrustCode"
|
@keyup.enter.native="refreshTable()"></el-input>
|
</div>
|
</div>
|
<div class="search_thing" style="width: 20%">
|
<div class="search_label">样品名称:</div>
|
<div class="search_input">
|
<el-input size="small" placeholder="请输入" clearable v-model="queryParams.sampleName"
|
@keyup.enter.native="refreshTable()"></el-input>
|
</div>
|
</div>
|
<div class="search_thing" style="width: 20%">
|
<div class="search_label">样品型号:</div>
|
<div class="search_input">
|
<el-input size="small" placeholder="请输入" clearable v-model="queryParams.sampleModel"
|
@keyup.enter.native="refreshTable()"></el-input>
|
</div>
|
</div>
|
<div class="search_thing" style="width: 20%">
|
<div class="search_label">样品编号:</div>
|
<div class="search_input">
|
<el-input size="small" placeholder="请输入" clearable v-model="queryParams.sampleCode"
|
@keyup.enter.native="refreshTable()"></el-input>
|
</div>
|
</div>
|
<div class="search_thing" style="width: 40%" v-if="more">
|
<div class="search_label">下单时间:</div>
|
<div class="search_input">
|
<el-date-picker style="width: 100%" v-model="queryParams.startAndEndTime" type="daterange" size="small"
|
range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期" value-format="yyyy-MM-dd"
|
clearable placeholder="选择日期">
|
</el-date-picker>
|
</div>
|
</div>
|
<div class="search_thing" style="width: 20%" v-if="more">
|
<div class="search_label">下单人:</div>
|
<div class="search_input">
|
<el-input size="small" placeholder="请输入" clearable v-model="queryParams.name"
|
@keyup.enter.native="refreshTable()"></el-input>
|
</div>
|
</div>
|
<div class="search_thing" style="width: 20%" v-if="more">
|
<div class="search_label">工程名称:</div>
|
<div class="search_input">
|
<el-input size="small" placeholder="请输入" clearable v-model="queryParams.engineering"
|
@keyup.enter.native="refreshTable()"></el-input>
|
</div>
|
</div>
|
<div class="search_thing" style="width: 20%" v-if="more">
|
<div class="search_label">生产单位:</div>
|
<div class="search_input">
|
<el-input size="small" placeholder="请输入" clearable v-model="queryParams.production"
|
@keyup.enter.native="refreshTable()"></el-input>
|
</div>
|
</div>
|
</el-col>
|
<el-col :span="4">
|
<div class="search_thing">
|
<el-button type="text" :icon="!more ? 'el-icon-arrow-down' : 'el-icon-arrow-up'" style="color: #3a7bfa"
|
@click="more = !more">{{ !more ? "更多" : "收起" }}</el-button>
|
<el-button size="small" @click="refresh()">重 置</el-button>
|
<el-button size="small" type="primary" @click="refreshTable()">查 询</el-button>
|
</div>
|
</el-col>
|
</el-row>
|
</div>
|
</basic-container>
|
<basic-container>
|
<div v-show="active == 0">
|
<div class="table">
|
<ul class="tab">
|
<li v-for="(m, i) in tabList" :key="i + 'afgh'" :class="{ active: i == tabIndex }" @click="handleTab(m, i)">
|
{{ m.label }}
|
</li>
|
</ul>
|
<lims-table :tableData="tableData" :height="tableHeight + ''" @pagination="pagination" :column="column"
|
:page="page" :tableLoading="tableLoading"></lims-table>
|
</div>
|
<!-- 审核 -->
|
<el-dialog title="下单审核" :visible.sync="verifyDialogVisible" width="30%" :before-close="handleClose">
|
<p style="font-size: 16px; color: #333333" v-if="!isPass">
|
委托编号<span style="color: #34bd66">ZTMS2023071001</span>的信息是否通过
|
</p>
|
<el-form :label-position="labelPosition" :model="formData" label-width="150px" ref="ruleForm" v-else>
|
<el-form-item label="请输入样品库位号:">
|
<el-input v-model="formData.specificationModel" size="small" style="width: 60%"></el-input>
|
</el-form-item>
|
</el-form>
|
<span slot="footer" class="dialog-footer">
|
<el-row v-if="!isPass">
|
<el-button @click="handleClose">退 回</el-button>
|
<el-button type="primary" @click="submitForm" :loading="upLoad">通 过</el-button>
|
</el-row>
|
<el-row v-else>
|
<el-button @click="handleClose">返 回</el-button>
|
<el-button type="primary" @click="submitForm" :loading="upLoad">确 定</el-button>
|
</el-row>
|
</span>
|
</el-dialog>
|
<!-- 撤销 -->
|
<el-dialog title="下单撤销" :visible.sync="quashDialogVisible" width="30%" :before-close="handleClose">
|
<p style="font-size: 16px; color: #333333" v-if="!isQuash">
|
委托编号<span style="color: #34bd66">{{
|
this.insOrderRow.entrustCode
|
}}</span>的信息是否撤销
|
</p>
|
<el-form :label-position="labelPosition" :model="formData" label-width="150px" ref="ruleForm" v-else>
|
<el-form-item label="请输入撤销原因:">
|
<el-input v-model="formData.specificationModel" size="small" style="width: 60%"></el-input>
|
</el-form-item>
|
</el-form>
|
<span slot="footer" class="dialog-footer">
|
<el-row v-if="!isQuash">
|
<el-button @click="handleClose">取 消</el-button>
|
<el-button type="primary" @click="submitForm" :loading="upLoad">确 定</el-button>
|
</el-row>
|
<el-row v-else>
|
<el-button @click="handleClose">返 回</el-button>
|
<el-button type="primary" @click="submitForm" :loading="upLoad">确 定</el-button>
|
</el-row>
|
</span>
|
</el-dialog>
|
<!-- 下发 -->
|
<el-dialog title="检验分配" :visible.sync="issuedDialogVisible" width="400px" :before-close="handleClose">
|
<div class="body" style="max-height: 60vh">
|
<el-row>
|
<el-col class="search_thing" style="width: 95%">
|
<div class="search_label">
|
<span class="required-span">* </span>约定时间:
|
</div>
|
<div class="search_input">
|
<el-date-picker size="small" v-model="distributeData.appointed" type="date" placeholder="选择日期"
|
value-format="yyyy-MM-dd" style="width: 100%" format="yyyy-MM-dd">
|
</el-date-picker>
|
</div>
|
</el-col>
|
<el-col class="search_thing" style="width: 95%">
|
<div class="search_label">
|
<span class="required-span" v-show="distributeData.type == 2">* </span>指派人员:
|
</div>
|
<div class="search_input">
|
<el-select v-model="distributeData.userId" placeholder="请选择" size="small" style="width: 100%"
|
clearable filterable @change="changeUser">
|
<el-option-group v-for="(item, index) in Object.keys(personList)" :key="index" :label="item">
|
<el-option v-for="op in personList[item]" :key="op.id" :label="op.name" :value="op.id">
|
</el-option>
|
</el-option-group>
|
</el-select>
|
</div>
|
</el-col>
|
<el-col class="search_thing" style="width: 95%" v-if="distributeData.userId">
|
<div class="search_label">
|
<span class="required-span">* </span>试验室:
|
</div>
|
<div class="search_input">
|
<el-select v-model="distributeData.sonLaboratory" placeholder="请选择11" size="small" style="width: 100%"
|
clearable filterable>
|
<el-option v-for="(item, i) in sonLaboratoryList" :key="i + 'oooo'" :label="item.label"
|
:value="item.value">
|
</el-option>
|
</el-select>
|
</div>
|
</el-col>
|
</el-row>
|
</div>
|
<span slot="footer" class="dialog-footer">
|
<el-row>
|
<el-button @click="handleClose2">取 消</el-button>
|
<el-button type="primary" @click="submitForm2" :loading="upLoad">确 定</el-button>
|
</el-row>
|
</span>
|
</el-dialog>
|
<el-dialog title="数据查看" :visible.sync="dataDialogVisible" width="100%" fullscreen>
|
<div style="height: 80vh; overflow-y: auto" v-if="dataDialogVisible">
|
<ValueTable ref="ValueTableDataLook" :rowKey="'insProductId'"
|
:url="$api.insOrder.selectSampleAndProductByOrderId" :componentData="componentDataDataLook" />
|
</div>
|
</el-dialog>
|
<el-dialog top="5vh" :title="deleteTilte" :visible.sync="deleteDialogVisible" :before-close="handleCloseDelete"
|
width="80%">
|
<div class="table-container" v-if="deleteDialogVisible">
|
<!-- <ValueTable
|
ref="ValueTableDataDelete"
|
:url="
|
$api.insOrder.selectNoProducts +
|
'?orderId=' +
|
orderId +
|
'&ids=' +
|
this.revocationInsProductIds
|
"
|
:componentData="componentDataDelete"
|
:isColumnWidth="true"
|
/> -->
|
<el-table height="500px" ref="revokeTable" @select="handleSelectionChange" @select-all="handleSelectionAll"
|
:data="treeTableData" style="width: 100%" row-key="id" border lazy :load="load"
|
:tree-props="{ children: 'children', hasChildren: 'hasChildren' }">
|
<el-table-column v-if="deleteTilte == '撤销'" type="selection" width="55"></el-table-column>
|
<el-table-column prop="sampleCode" label="样品编号" show-overflow-tooltip>
|
</el-table-column>
|
<el-table-column prop="inspectionItem" label="检验项" show-overflow-tooltip>
|
</el-table-column>
|
<el-table-column prop="inspectionItemSubclass" label="检验子项" show-overflow-tooltip>
|
</el-table-column>
|
<el-table-column prop="sampleType" label="样品分类" show-overflow-tooltip>
|
</el-table-column>
|
<el-table-column prop="sample" label="样品" show-overflow-tooltip>
|
</el-table-column>
|
<el-table-column prop="model" label="型号" show-overflow-tooltip>
|
</el-table-column>
|
<el-table-column prop="sonLaboratory" label="试验室" show-overflow-tooltip>
|
</el-table-column>
|
<el-table-column prop="tell" label="要求值" show-overflow-tooltip>
|
</el-table-column>
|
</el-table>
|
</div>
|
<span slot="footer" class="dialog-footer">
|
<el-row>
|
<el-button @click="handleNo">{{
|
deleteTilte == "撤销" ? "取 消" : "不通过"
|
}}</el-button>
|
<el-button type="primary" @click="submitDelete" :loading="printLoading">{{ deleteTilte == "撤销" ? "确 定" :
|
"通 过" }}</el-button>
|
</el-row>
|
</span>
|
</el-dialog>
|
<!-- 数据查看详情 -->
|
<el-dialog title="查看详情" :visible.sync="dialogVisible" width="70%" :before-close="handleClose3">
|
<el-table v-if="type == '单根垂直燃烧' || type == '松套管'" :data="viewDetailsList" height="400px" border
|
style="width: 100%">
|
<el-table-column type="index" label="序号" width="80px"></el-table-column>
|
<el-table-column prop="entrustCode" label="委托单号"></el-table-column>
|
<el-table-column prop="sampleCode" label="样品编号"></el-table-column>
|
<el-table-column prop="color" label="套管"></el-table-column>
|
<!-- <el-table-column prop="inspectionItem" label="检验项"></el-table-column> -->
|
<el-table-column prop="insValue" label="检验结果"></el-table-column>
|
</el-table>
|
|
<el-table v-if="type == '抗拉强度'" :data="viewDetailsList" height="400px" border style="width: 100%">
|
<el-table-column type="index" label="序号" width="80px"></el-table-column>
|
<el-table-column prop="inspectionItem" label="检验项"></el-table-column>
|
<el-table-column prop="inspectionItemSubclass" label="检验子项"></el-table-column>
|
<el-table-column prop="width" label="宽度"></el-table-column>
|
<el-table-column prop="thickness" label="厚度"></el-table-column>
|
<el-table-column prop="testValue" label="检验值"></el-table-column>
|
</el-table>
|
|
<el-table v-if="type == '断裂伸长率'" :data="viewDetailsList" height="400px" border style="width: 100%">
|
<el-table-column type="index" label="序号" width="80px"></el-table-column>
|
<el-table-column prop="inspectionItem" label="检验项"></el-table-column>
|
<el-table-column prop="inspectionItemSubclass" label="检验子项"></el-table-column>
|
<el-table-column v-for="(v, i) in tableHeader" :key="i" :prop="`testValue${i}`"
|
:label="`检验值${i + 1}`"></el-table-column>
|
</el-table>
|
</el-dialog>
|
|
<!-- 导出已检数据 -->
|
<el-dialog title="选择日期" :visible.sync="dialogVisible1" width="30%" :before-close="handleClose4">
|
<span>下单日期: </span>
|
<el-date-picker v-model="exportCheckedDate" type="daterange" size="small" value-format="yyyy-MM-dd"
|
range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期">
|
</el-date-picker>
|
<span slot="footer" class="dialog-footer">
|
<el-button @click="handleClose4">取 消</el-button>
|
<el-button type="primary" @click="exportChecked()">确 定</el-button>
|
</span>
|
</el-dialog>
|
</div>
|
<div style="width: 100%; height: 100%" v-if="active > 0">
|
<Add :active="active" :currentId="currentId" v-if="active < 4" :examine="examine" />
|
</div>
|
<el-dialog title="标签打印" :visible.sync="printDialogVisible" width="40%" top="5vh">
|
<div style="width: 100%; height: 400px; overflow-y: auto" v-loading="loadPint">
|
<div class="dia_body">
|
<el-checkbox style="margin: 10px 5px" :indeterminate="isIndeterminate" v-model="checkAll"
|
@change="handleCheckAllChange">全选</el-checkbox>
|
<el-checkbox-group @change="changePrintCode()" v-model="checkIndexList">
|
<el-card class="box-card" v-for="(item, i) in qrData" :key="i + 'wwwww'"
|
style="margin-bottom: 15px; font-size: 16px !important">
|
<el-checkbox :label="i" :key="i" style="position: relative; top: -20px; left: 5px"><br /></el-checkbox>
|
<div>
|
<el-row style="font-size: 14px; padding-left: 20px">
|
<el-col style="font-weight: bold">{{ item.pName }}</el-col>
|
</el-row>
|
<div style="display: flex">
|
<div>
|
<el-col :span="8" :offset="4">
|
<vueQr :text="'https://zttx-lims.ztt.cn:8021/lims/qr/qrScan?code=' +
|
item.id +
|
'&type=sample'
|
" :size="140" :margin="2"></vueQr>
|
</el-col>
|
</div>
|
<div style="margin-left: 50px; width: 100%">
|
<el-row>
|
<el-col style="
|
font-weight: bold;
|
text-align: left;
|
font-size: 14px;
|
"><span>样品编号: </span>{{ item.sampleCode }}</el-col>
|
</el-row>
|
<el-row style="margin-top: 1px; font-size: 14px">
|
<el-col style="font-weight: bold; text-align: left"><span>委托单号: </span>{{ item.code
|
}}</el-col>
|
</el-row>
|
<el-row style="margin-top: 1px; font-size: 14px">
|
<el-col style="font-weight: bold; text-align: left"><span>规格型号: </span>{{ item.model
|
}}</el-col>
|
</el-row>
|
<el-row style="margin-top: 1px; font-size: 14px">
|
<el-col style="font-weight: bold; text-align: left"><span>样品名称: </span>{{ item.sample
|
}}</el-col>
|
</el-row>
|
<el-row style="margin-top: 1px; font-size: 14px" class="ellipsis-multiline">
|
<el-col style="font-weight: bold; text-align: left"><span>检测项目: </span>{{ item.item
|
}}</el-col>
|
</el-row>
|
<el-row style="margin-top: 2px; font-size: 14px">
|
<el-col style="
|
font-weight: bold;
|
display: flex;
|
align-items: center;
|
"><span>样品状态: </span><el-radio-group :value="item.insState"
|
style="margin-top: 7px; margin-left: 4px" disabled>
|
<el-radio :label="0" style="font-weight: bold; margin-right: 7px">待检</el-radio>
|
<el-radio :label="1" style="font-weight: bold; margin-right: 7px">在检</el-radio>
|
<el-radio :label="2" style="font-weight: bold; margin-right: 7px">已检</el-radio>
|
</el-radio-group><el-radio :label="1" style="font-weight: bold; margin-top: 7px"
|
v-model="item.isLeave" disabled>留样</el-radio></el-col>
|
</el-row>
|
</div>
|
</div>
|
</div>
|
</el-card>
|
</el-checkbox-group>
|
</div>
|
</div>
|
<span slot="footer" class="dialog-footer">
|
<el-row>
|
<el-button @click="printDialogVisible = false">取 消</el-button>
|
<el-button type="primary" @click="submitPrint" :loading="printLoading">打 印</el-button>
|
</el-row>
|
</span>
|
</el-dialog>
|
<div class="el-dialog__body" style="
|
overflow-y: auto;
|
margin-top: 0;
|
position: fixed;
|
top: 999px;
|
z-index: 99999;
|
display: none;
|
">
|
<div id="printMOrder" class="printMOrder" ref="printMOrder">
|
<el-card class="box-card" v-for="(item, i) in checkDataList" :key="i + 'uuuuu'" style="
|
font-size: 0.2cm !important;
|
page-break-after: always;
|
color: #000;
|
box-shadow: none;
|
margin: 0 !important;
|
padding: 0 !important;
|
">
|
<div style="display: flex">
|
<div>
|
<el-col :span="10" :offset="2">
|
<vueQr :text="'https://zttx-lims.ztt.cn:8021/lims/qr/qrScan?code=' +
|
item.id +
|
'&type=sample'
|
" :size="60" :margin="2"></vueQr>
|
</el-col>
|
</div>
|
<div style="margin-left: 0.32cm; line-height: 0.22cm">
|
<el-row>
|
<el-col style="font-size: 0.2cm; width: 4cm" class="single-line-ellipsis"><span>样品编号: </span>{{
|
item.sampleCode }}</el-col>
|
</el-row>
|
<el-row style="font-size: 0.2cm">
|
<el-col><span>委托单号: </span>{{ item.code }}</el-col>
|
</el-row>
|
<el-row style="font-size: 0.2cm">
|
<el-col><span>规格型号: </span>{{ item.model }}</el-col>
|
</el-row>
|
<el-row style="font-size: 0.2cm">
|
<el-col><span>样品名称: </span>{{ item.sample }}</el-col>
|
</el-row>
|
<el-row style="font-size: 0.2cm; width: 4cm">
|
<el-col class="ellipsis-multiline"><span>检测项目: </span>{{ item.item }}</el-col>
|
</el-row>
|
<el-row style="margin-top: 0.01cm; font-size: 0.2cm">
|
<el-col style="display: flex; align-items: center"><span>样品状态: </span>
|
<span style="white-space: nowrap"><span v-if="item.insState == 0">√</span><span class="scor"
|
v-if="item.insState != 0"></span>待检
|
<span v-if="item.insState == 1">√</span><span class="scor" v-if="item.insState != 1"></span>在检
|
<span v-if="item.insState == 2">√</span><span class="scor" v-if="item.insState != 2"></span>已检
|
<span v-if="item.isLeave == 1">√</span><span class="scor"
|
v-if="item.isLeave != 1"></span>留样</span>
|
</el-col>
|
</el-row>
|
</div>
|
</div>
|
</el-card>
|
</div>
|
</div>
|
</basic-container>
|
</div>
|
</template>
|
|
<script>
|
import limsTable from "@/components/Table/lims-table.vue";
|
import {
|
selectInsOrderParameter,
|
hasSendUrgentOrder,
|
delCustomById,
|
upCustom,
|
} from "@/api/business/inspectionOrder";
|
import { getDicts } from "@/api/system/dict/data";
|
import vueQr from "vue-qr";
|
import getLodop from "@/utils/lodop";
|
import Add from "./add.vue";
|
import { mapGetters } from "vuex";
|
export default {
|
components: {
|
limsTable,
|
Add,
|
vueQr,
|
},
|
computed: {
|
...mapGetters(["permissions"]),
|
},
|
data() {
|
return {
|
queryParams: {
|
entrustCode: "",
|
outEntrustCode: "",
|
sampleName: "",
|
sampleModel: "",
|
sampleCode: "",
|
startAndEndTime: [],
|
name: "",
|
engineering: "",
|
production: "",
|
},
|
tableData: [],
|
page: {
|
total: 0,
|
size: 20,
|
current: 1,
|
},
|
tableLoading: false,
|
column: [
|
{
|
label: "委托编号",
|
prop: "entrustCode",
|
minWidth: "160px",
|
width: "160px",
|
},
|
{
|
label: "外部委托编号",
|
prop: "outEntrustCode",
|
minWidth: "160px",
|
width: "160px",
|
},
|
{
|
label: "委托单位",
|
prop: "company",
|
minWidth: "160px",
|
width: "160px",
|
},
|
{
|
label: "样品名称",
|
prop: "sampleName",
|
minWidth: "160px",
|
width: "160px",
|
},
|
{
|
label: "样品编号",
|
prop: "sampleCode",
|
minWidth: "160px",
|
width: "160px",
|
},
|
{
|
label: "样品型号",
|
prop: "sampleModel",
|
minWidth: "160px",
|
width: "160px",
|
},
|
{
|
label: "样品数量",
|
prop: "sampleNum",
|
minWidth: "120px",
|
width: "120px",
|
},
|
{
|
label: "检验进度%",
|
prop: "insProgress",
|
minWidth: "120px",
|
width: "120px",
|
},
|
{
|
label: "紧急程度",
|
prop: "type",
|
minWidth: "100px",
|
width: "100px",
|
dataType: "tag",
|
formatData: (params) => {
|
let index = this.urgencyDictList.findIndex(
|
(item) => item.dictValue == params
|
);
|
if (index > -1) {
|
return this.urgencyDictList[index].dictLabel;
|
} else {
|
return null;
|
}
|
},
|
formatType: (params) => {
|
let index = this.urgencyDictList.findIndex(
|
(item) => item.dictValue == params
|
);
|
if (index > -1) {
|
return this.urgencyDictList[index].listClass;
|
} else {
|
return null;
|
}
|
},
|
},
|
{
|
label: "备注",
|
prop: "remark",
|
minWidth: "120px",
|
width: "120px",
|
},
|
{
|
label: "制单人",
|
prop: "custom",
|
minWidth: "120px",
|
width: "120px",
|
},
|
{
|
label: "约定时间",
|
prop: "appointed",
|
minWidth: "120px",
|
width: "120px",
|
},
|
{
|
label: "下单时间",
|
prop: "createTime",
|
minWidth: "120px",
|
width: "120px",
|
},
|
{
|
label: "下发时间",
|
prop: "sendTime",
|
minWidth: "120px",
|
width: "120px",
|
},
|
{
|
label: "退回理由",
|
prop: "tell",
|
minWidth: "120px",
|
width: "120px",
|
},
|
{
|
label: "委托人",
|
prop: "prepareUser",
|
minWidth: "120px",
|
width: "120px",
|
},
|
{
|
label: "撤销日期",
|
prop: "revocationTime",
|
minWidth: "120px",
|
width: "120px",
|
},
|
{
|
dataType: "action",
|
fixed: "right",
|
label: "操作",
|
operation: [
|
{
|
name: "数据查看",
|
type: "text",
|
clickFun: (row) => { },
|
},
|
{
|
name: "报告下载",
|
type: "text",
|
clickFun: (row) => { },
|
},
|
{
|
name: "审核",
|
type: "text",
|
clickFun: (row) => { },
|
},
|
{
|
name: "撤销",
|
type: "text",
|
clickFun: (row) => { },
|
},
|
{
|
name: "撤销审核",
|
type: "text",
|
clickFun: (row) => { },
|
},
|
{
|
name: "分配",
|
type: "text",
|
clickFun: (row) => { },
|
},
|
],
|
},
|
],
|
//old
|
tableHeader: [],
|
type: "",
|
revokeDataAll: [],
|
revokeData: [],
|
treeTableData: [],
|
treeTableData2: [],
|
exportCheckedDate: [],
|
exportCheckedLoading: false,
|
dialogVisible1: false,
|
dialogVisible: false,
|
viewDetailsList: [],
|
deleteTilte: "撤销",
|
examine: null,
|
deleteList: [],
|
loadPint: false,
|
checkAll: false,
|
isIndeterminate: true,
|
printLoading: false,
|
printDialogVisible: false,
|
//是否审核通过 true是 false不是
|
isPass: false,
|
//是否审核撤销 true是 false不是
|
isQuash: false,
|
verifyDialogVisible: false,
|
quashDialogVisible: false,
|
issuedDialogVisible: false,
|
dataDialogVisible: false,
|
formData: {},
|
formData0: {},
|
formData1: {},
|
distributeData: {
|
orderId: "",
|
sampleId: "",
|
appointed: "",
|
userId: null,
|
sonLaboratory: "",
|
},
|
// 人员列表
|
personList: [],
|
currentTableData: [],
|
componentData: {
|
entity: {
|
entrustCode: null,
|
sample: null,
|
sampleName: null,
|
sampleModel: null,
|
sampleCode: null,
|
outEntrustCode: null,
|
state: 0,
|
name: null,
|
engineering: null,
|
production: null,
|
startAndEndTime: [],
|
// orderBy: {
|
// field: '',
|
// order: ''
|
// }
|
},
|
isIndex: true,
|
showSelect: true,
|
select: true,
|
selectMethod: "selectMethod",
|
do: [
|
{
|
id: "dataLook",
|
font: "数据查看",
|
type: "text",
|
method: "handleDataLook",
|
disabFun: (row, index) => {
|
return row.state != 1 && row.state != 4;
|
},
|
},
|
{
|
id: "download",
|
font: "报告下载",
|
type: "text",
|
method: "download",
|
disabFun: (row, index) => {
|
return row.state != 4 || row.isRatify != 1;
|
},
|
},
|
{
|
id: "verify",
|
font: "审核",
|
type: "text",
|
method: "handleVerify",
|
disabFun: (row, index) => {
|
return row.state != 0;
|
},
|
},
|
{
|
id: "quash",
|
font: "撤销",
|
type: "text",
|
method: "handlEquash",
|
disabFun: (row, index) => {
|
return row.state != 1 && row.state != 0;
|
},
|
},
|
{
|
id: "quashCheck",
|
font: "撤销审核",
|
type: "text",
|
method: "handlEquashCheck",
|
disabFun: (row, index) => {
|
return (
|
(row.state != 1 && row.state != 0) ||
|
this.tabIndex != 1 ||
|
row.isRevocation != 1
|
);
|
},
|
},
|
{
|
font: "分配",
|
type: "text",
|
method: "handleIssued",
|
disabFun: (row, index) => {
|
return (
|
row.state != 1 ||
|
(row.entrustCode != null &&
|
Number(row.assign) > 0 &&
|
row.inspectId != null)
|
);
|
},
|
},
|
],
|
linkEvent: {
|
sampleName: {
|
method: "selectAllByOne",
|
},
|
},
|
tagField: {
|
type: {
|
select: [],
|
},
|
createUser: {
|
select: [],
|
},
|
orderType: {
|
select: [],
|
},
|
processing: {
|
select: [
|
{
|
value: 1,
|
label: "实验室处理",
|
},
|
{
|
value: 0,
|
label: "委托单位取回",
|
},
|
],
|
},
|
isLeave: {
|
select: [
|
{
|
value: 1,
|
label: "留样",
|
},
|
{
|
value: 0,
|
label: "不留样",
|
},
|
],
|
},
|
send: {
|
select: [
|
{
|
value: 1,
|
label: "自取",
|
},
|
{
|
value: 0,
|
label: "其他",
|
},
|
],
|
},
|
},
|
selectField: {},
|
requiredAdd: [],
|
requiredUp: [],
|
needSort: ["createTime", "sendTime", "type", "appointed"],
|
},
|
orderId: "",
|
revocationInsProductIds: "",
|
componentDataDataLook: {
|
isPage: false,
|
entity: {
|
id: 0,
|
orderBy: {
|
field: "sampleCode",
|
order: "asc",
|
},
|
},
|
isIndex: false,
|
showSelect: false,
|
select: false,
|
do: [
|
{
|
id: "",
|
font: "查看",
|
type: "text",
|
method: "viewDetails",
|
showFun: (row, index) => {
|
return (
|
row.inspectionItem == "单根垂直燃烧" ||
|
row.inspectionItem.includes("松套管") ||
|
row.inspectionItemSubclass.includes("松套管") ||
|
(row.inspectionItem == "抗拉强度" &&
|
(row.inspectionItemSubclass == "热老化处理前" ||
|
row.inspectionItemSubclass == "热老化处理后")) ||
|
(row.inspectionItem == "断裂伸长率" &&
|
(row.inspectionItemSubclass == "热老化处理前" ||
|
row.inspectionItemSubclass == "热老化处理后"))
|
);
|
},
|
},
|
],
|
tagField: {
|
insState: {
|
select: [],
|
},
|
insResult: {
|
select: [
|
{
|
value: 1,
|
label: "合格",
|
type: "success",
|
},
|
{
|
value: 0,
|
label: "不合格",
|
type: "danger",
|
},
|
{
|
value: 3,
|
label: "不判定",
|
type: "",
|
},
|
],
|
},
|
},
|
selectField: {},
|
spanConfig: {
|
rows: [
|
// {
|
// name: "entrustCode",
|
// index: 0,
|
// },
|
// {
|
// name: "sampleCode",
|
// index: 1,
|
// },
|
],
|
},
|
requiredAdd: [],
|
requiredUp: [],
|
},
|
componentDataDelete: {
|
entity: {
|
// orderId: '',
|
// orderBy: {
|
// field: 'sampleCode',
|
// order: 'asc'
|
// }
|
},
|
isPage: false,
|
isIndex: false,
|
showSelect: true,
|
select: true,
|
selectMethod: "selectDelete",
|
do: [],
|
tagField: {
|
insState: {
|
select: [],
|
},
|
insResult: {
|
select: [
|
{
|
value: 1,
|
label: "合格",
|
type: "success",
|
},
|
{
|
value: 0,
|
label: "不合格",
|
type: "danger",
|
},
|
],
|
},
|
},
|
selectField: {},
|
spanConfig: {},
|
requiredAdd: [],
|
requiredUp: [],
|
},
|
deleteDialogVisible: false,
|
entityCopy: {},
|
upIndex: 0,
|
upLoad: false,
|
tabList: [
|
{
|
label: "待审核",
|
value: 0,
|
},
|
{
|
label: "待检验",
|
value: 1,
|
},
|
{
|
label: "已检验",
|
value: 4,
|
},
|
{
|
label: "退回",
|
value: 2,
|
},
|
{
|
label: "撤销",
|
value: 3,
|
},
|
],
|
tabIndex: 0,
|
active: 0, //1:下单,2:查看,3:审核,4:光纤配置,默认为0
|
currentId: null,
|
more: false,
|
insOrderRow: {},
|
checkIndexList: [],
|
checkDataList: [
|
{
|
sampleCode: "",
|
},
|
],
|
qrData: [],
|
multipleSelection: [],
|
sonLaboratoryList: [],
|
queryCount: 0,
|
urgencyDictList: [],
|
tableHeight: 0,
|
};
|
},
|
created() {
|
this.getDictList();
|
this.getTableHeight();
|
},
|
mounted() {
|
this.getList();
|
window.addEventListener("resize", this.getTableHeight);
|
},
|
beforeDestroy() {
|
window.removeEventListener("resize", this.getTableHeight);
|
},
|
watch: {
|
more() {
|
this.getTableHeight();
|
},
|
},
|
methods: {
|
//获取表格高度
|
getTableHeight() {
|
const otherHeight = this.more ? 430 : 380; // 其余高度
|
const tableBottom = 50; // 距离页面下方的高度
|
const tableHeightDetil = window.innerHeight - tableBottom;
|
if (tableHeightDetil <= 300) {
|
this.tableHeight = 200;
|
} else {
|
this.tableHeight = window.innerHeight - tableBottom - otherHeight;
|
}
|
},
|
getDictList() {
|
getDicts("urgency_level")
|
.then((res) => {
|
if (res.code === 200) {
|
this.urgencyDictList = res.data;
|
}
|
})
|
.catch((error) => {
|
console.error(error);
|
});
|
},
|
pagination({ page, limit }) {
|
this.page.current = page;
|
this.page.size = limit;
|
this.getList();
|
},
|
//获取数据列表
|
getList() {
|
this.tableLoading = true;
|
selectInsOrderParameter({ ...this.queryParams, ...this.page })
|
.then((res) => {
|
if (res.code === 200) {
|
this.tableData = res.data.records;
|
this.page.total = res.data.total;
|
}
|
this.tableLoading = false;
|
})
|
.catch((error) => {
|
console.error(error);
|
this.tableLoading = false;
|
});
|
},
|
// 导出已检
|
exportChecked() {
|
let data = {
|
startTime: this.exportCheckedDate[0],
|
endTime: this.exportCheckedDate[1],
|
};
|
console.log("data", data);
|
this.exportCheckedLoading = true;
|
this.dialogVisible1 = false;
|
this.$axios
|
.post(this.$api.insOrder.exportChecked, data, {
|
headers: {
|
"Content-Type": "application/json",
|
},
|
responseType: "blob",
|
})
|
.then((res) => {
|
this.$message.success("导出成功");
|
this.exportCheckedDate = [];
|
this.exportCheckedLoading = false;
|
const blob = new Blob([res], { type: "application/octet-stream" });
|
const url = URL.createObjectURL(blob);
|
const link = document.createElement("a");
|
link.href = url;
|
link.download = "检验结果.xlsx";
|
document.body.appendChild(link);
|
link.click();
|
});
|
},
|
// 查看详情
|
viewDetails(row) {
|
this.dialogVisible = true;
|
if (
|
row.inspectionItem.includes("松套管") ||
|
row.inspectionItemSubclass.includes("松套管")
|
) {
|
this.type = "松套管";
|
} else {
|
this.type = row.inspectionItem;
|
}
|
let data = {
|
inspectionItem: row.inspectionItem,
|
insProductId: row.insProductId,
|
insSampleId: row.insSampleId,
|
entrustCode: row.entrustCode,
|
sampleCode: row.sampleCode,
|
};
|
this.$axios
|
.post(this.$api.insOrder.viewDetails, data, {
|
headers: {
|
"Content-Type": "application/json",
|
},
|
})
|
.then((res) => {
|
this.viewDetailsList = res.data;
|
if (res.data[0].tableHeader) {
|
this.tableHeader = res.data[0].tableHeader;
|
} else {
|
this.tableHeader = [
|
{
|
testValue0: "",
|
},
|
];
|
}
|
});
|
},
|
selectMethod(val) {
|
this.multipleSelection = val;
|
},
|
getLabelPrinting(selection) {
|
this.loadPint = true;
|
this.$axios
|
.post(this.$api.insOrder.labelPrinting, {
|
ids: selection.map((m) => m.id).join(","),
|
})
|
.then((res) => {
|
let arr = res.data;
|
arr.forEach((a) => {
|
this.loadPint = false;
|
let arr1 = [];
|
a.insProduct.forEach((b) => {
|
arr1.push(b.inspectionItem);
|
});
|
a.item = [...new Set(arr1)].join(",");
|
});
|
this.qrData = arr;
|
});
|
},
|
//开始标签打印
|
beginPrint(arr) {
|
if (arr.length === 0) {
|
return;
|
}
|
this.LODOP = getLodop();
|
this.LODOP.SET_LICENSES(
|
"南通市鑫阳软件开发有限公司",
|
"60F8E5078AE17DEB340C94BC7E83CAFF",
|
"",
|
""
|
);
|
this.LODOP.PRINT_INITA();
|
for (let i = 0; i < arr.length; i++) {
|
const qrData = arr[i];
|
let qrStr =
|
"https://zttx-lims.ztt.cn:8021/lims/qr/qrScan?code=" +
|
qrData.id +
|
"&type=sample";
|
this.LODOP.NEWPAGE();
|
// this.LODOP.SET_PRINT_PAGESIZE(0, 100, 360, '')
|
this.LODOP.SET_PRINT_MODE("PRINT_NOCOLLATE", 1);
|
this.LODOP.ADD_PRINT_BARCODE(2, 5, 80, 80, "QRCode", qrStr);
|
this.LODOP.ADD_PRINT_TEXT(5, 85, 60, 18, "样品编号:");
|
this.LODOP.SET_PRINT_STYLEA(0, "FontSize", 5);
|
this.LODOP.ADD_PRINT_TEXT(5, 117, 280, 18, qrData.sampleCode);
|
this.LODOP.SET_PRINT_STYLEA(0, "FontSize", 5);
|
this.LODOP.ADD_PRINT_TEXT(15, 85, 60, 18, "委托单号:");
|
this.LODOP.SET_PRINT_STYLEA(0, "FontSize", 5);
|
this.LODOP.ADD_PRINT_TEXT(15, 117, 280, 18, qrData.code);
|
this.LODOP.SET_PRINT_STYLEA(0, "FontSize", 5);
|
this.LODOP.ADD_PRINT_TEXT(25, 85, 60, 18, "规格型号:");
|
this.LODOP.SET_PRINT_STYLEA(0, "FontSize", 5);
|
this.LODOP.ADD_PRINT_TEXT(25, 117, 280, 18, qrData.model);
|
this.LODOP.SET_PRINT_STYLEA(0, "FontSize", 5);
|
this.LODOP.ADD_PRINT_TEXT(35, 85, 60, 18, "样品名称:");
|
this.LODOP.SET_PRINT_STYLEA(0, "FontSize", 5);
|
this.LODOP.ADD_PRINT_TEXT(35, 117, 280, 18, qrData.sample);
|
this.LODOP.SET_PRINT_STYLEA(0, "FontSize", 5);
|
this.LODOP.ADD_PRINT_TEXT(45, 85, 60, 20, "检测项目:");
|
this.LODOP.SET_PRINT_STYLEA(0, "FontSize", 5);
|
this.LODOP.ADD_PRINT_TEXT(
|
45,
|
117,
|
150,
|
20,
|
qrData.item.length > 42
|
? qrData.item.substring(0, 39) + "..."
|
: qrData.item
|
);
|
this.LODOP.SET_PRINT_STYLEA(0, "FontSize", 5);
|
this.LODOP.ADD_PRINT_TEXT(67, 85, 60, 18, "样品状态:");
|
this.LODOP.SET_PRINT_STYLEA(0, "FontSize", 5);
|
let stateStr = "▢待检 ▢在检 ▢已检";
|
let leaveStr =
|
qrData.isLeave && qrData.isLeave === 1 ? " ▣留样" : " ▢留样";
|
if (qrData.insState == 0) {
|
stateStr = "▣待检 ▢在检 ▢已检";
|
} else if (qrData.insState == 1) {
|
stateStr = "▢待检 ▣在检 ▢已检";
|
} else if (qrData.insState == 2) {
|
stateStr = "▢待检 ▢在检 ▣已检";
|
}
|
this.LODOP.ADD_PRINT_TEXT(67, 117, 280, 18, stateStr + leaveStr);
|
this.LODOP.SET_PRINT_STYLEA(0, "FontSize", 5);
|
}
|
this.LODOP.PRINT();
|
// this.LODOP.PREVIEW()
|
},
|
//选择要打印的二维码
|
changePrintCode() {
|
let indexList = this.checkIndexList;
|
let arr = [];
|
indexList.forEach((i) => {
|
arr.push(this.qrData[i]);
|
});
|
this.checkDataList = arr;
|
},
|
//全选
|
handleCheckAllChange(val) {
|
if (val) {
|
for (var i = 0; i < this.qrData.length; i++) {
|
this.checkIndexList.push(i);
|
}
|
this.checkDataList = this.qrData;
|
} else {
|
this.checkIndexList = [];
|
this.checkDataList = [];
|
}
|
this.isIndeterminate = false;
|
},
|
submitPrint() {
|
if (this.checkDataList.length < 1) {
|
this.$message.warning("请选择要打印的二维码");
|
return;
|
}
|
this.$nextTick(() => {
|
this.beginPrint(this.qrData);
|
});
|
this.printDialogVisible = false;
|
|
// PrintJS({
|
// printable: "printMOrder", //页面
|
// type: "html", //文档类型
|
// maxWidth: 360,
|
// style: `@page {
|
// margin:0;
|
// size: 400px 75px collapse;
|
// margin-top:3px;
|
// &:first-of-type{
|
// margin-top:0 !important;
|
// }
|
// }
|
// html{
|
// zoom:100%;
|
// }
|
// @media print{
|
// width: 400px;
|
// height: 75px;
|
// margin:0;
|
// }`,
|
// onPrintDialogClose: (this.erexcel = false),
|
// targetStyles: ["*"], // 使用dom的所有样式,很重要
|
// font_size: "0.15cm",
|
// });
|
},
|
print() {
|
if (this.multipleSelection.length == 0) {
|
this.$message.warning("请选择一条数据");
|
return;
|
}
|
let selection = this.multipleSelection;
|
this.getLabelPrinting(selection);
|
this.printDialogVisible = true;
|
},
|
// 选择检验分配人员
|
getAuthorizedPerson() {
|
this.$axios.get(this.$api.user.getLaboratoryPersonList).then((res) => {
|
// let data = [];
|
// res.data.forEach((a) => {
|
// data.push({
|
// label: a.name,
|
// value: a.id,
|
// });
|
// });
|
this.personList = res.data;
|
});
|
},
|
refreshTable() {
|
this.getList();
|
},
|
getTableData(newData) {
|
if (newData && newData.length == 1) {
|
const insState = newData[0].state;
|
this.tabList.forEach((ele, index) => {
|
if (ele.value == insState && this.queryCount == 0) {
|
this.handleTab(ele, index);
|
this.queryCount = 1;
|
}
|
});
|
}
|
},
|
refresh() {
|
this.componentData.entity = this.HaveJson(this.entityCopy);
|
this.upIndex++;
|
this.refreshTable();
|
},
|
// 权限分配
|
getPower(radio) {
|
let power = JSON.parse(sessionStorage.getItem("power"));
|
let up = false;
|
let del = false;
|
let revoke = false;
|
let check = false;
|
let checkUpdate = false;
|
for (var i = 0; i < power.length; i++) {
|
if (power[i].menuMethod == "upInsOrder") {
|
up = true;
|
}
|
if (power[i].menuMethod == "updateStatus") {
|
revoke = true;
|
}
|
if (power[i].menuMethod == "upInsOrderOfState") {
|
check = true;
|
}
|
if (power[i].menuMethod == "checkUpdate") {
|
checkUpdate = true;
|
}
|
}
|
if (!up) {
|
this.componentData.do.splice(5, 1);
|
}
|
if (!checkUpdate) {
|
this.componentData.do.splice(4, 1);
|
}
|
if (!revoke) {
|
this.componentData.do.splice(3, 1);
|
}
|
if (!check) {
|
this.componentData.do.splice(2, 1);
|
}
|
},
|
handleClose() {
|
this.verifyDialogVisible = false;
|
this.quashDialogVisible = false;
|
this.issuedDialogVisible = false;
|
this.dataDialogVisible = false;
|
this.upLoad = false;
|
},
|
handleClose2() {
|
this.verifyDialogVisible = false;
|
this.quashDialogVisible = false;
|
this.issuedDialogVisible = false;
|
this.dataDialogVisible = false;
|
this.upLoad = false;
|
},
|
handleClose3() {
|
this.dialogVisible = false;
|
},
|
handleClose4() {
|
this.exportCheckedDate = [];
|
this.dialogVisible1 = false;
|
},
|
// 详情
|
selectAllByOne(row) {
|
this.active = 2;
|
// console.log(row);
|
// //打开弹框
|
// this.dialogVisible = true;
|
// //row = 点击对应行值
|
// //复制给formData
|
// this.formData = this.HaveJson(row);
|
this.currentId = row.id;
|
this.examine = 1;
|
},
|
// 数据查看
|
handleDataLook(row) {
|
this.componentDataDataLook.entity.id = row.id;
|
this.dataDialogVisible = true;
|
},
|
// 下载报告
|
download(row) {
|
// let url = row.urlS ? row.urlS : row.url;
|
// if (url) {
|
// url = url.split(".")[0] + ".pdf";
|
// const link = document.createElement("a");
|
// link.href = this.javaApi + url;
|
// link.target = "_blank";
|
// document.body.appendChild(link);
|
// link.click();
|
// }
|
|
// if(row.tempUrlPdf) {
|
// const link = document.createElement('a');
|
// link.href = this.javaApi + row.tempUrlPdf;
|
// link.target = '_blank';
|
// document.body.appendChild(link);
|
// link.click();
|
// }
|
this.$axios
|
.get(
|
this.$api.insReport.downReport + "?id=" + row.reportId + "&type=1",
|
{
|
headers: {
|
"Content-Type": "application/json",
|
},
|
responseType: "blob",
|
}
|
)
|
.then((res) => {
|
let fileName = row.tempUrlPdf;
|
if (fileName.includes("_")) {
|
fileName = fileName.split("_")[1];
|
}
|
const blob = new Blob([res], { type: "application/octet-stream" });
|
const url = URL.createObjectURL(blob);
|
const link = document.createElement("a");
|
link.href = url;
|
link.download = fileName;
|
document.body.appendChild(link);
|
link.click();
|
});
|
},
|
// 审核
|
handleVerify(row) {
|
// this.verifyDialogVisible = true;
|
this.active = 3;
|
this.currentId = row.id;
|
this.examine = 1;
|
},
|
// 全选
|
handleSelectionAll(val) {
|
if (val.length > 0 && val.length <= this.treeTableData.length) {
|
this.handleSelectionAllRecursion(this.treeTableData, true);
|
console.log("传输的数据", this.revokeData);
|
} else {
|
this.$refs.revokeTable.clearSelection();
|
this.revokeData = [];
|
}
|
},
|
handleSelectionAllRecursion(list, flag) {
|
for (let i = 0; i < list.length; i++) {
|
let item = list[i];
|
this.$refs.revokeTable.toggleRowSelection(item, flag);
|
if (flag) {
|
this.revokeData.push(item);
|
this.revokeData = this.revokeData.filter(
|
(a, index, self) => index === self.findIndex((t) => t.id === a.id)
|
);
|
}
|
if (item.children && item.children.length > 0) {
|
this.handleSelectionAllRecursion(item.children, flag);
|
}
|
}
|
},
|
|
// 选择需要撤销的数据
|
handleSelectionChange(val, row) {
|
console.log("rwo", row);
|
this.revokeData = val;
|
// 进行一个递归操作
|
// 判断是否选中 val包含既是选中 不包含既是取消选中
|
let flag = null;
|
if (val.includes(row)) {
|
flag = true;
|
} else {
|
flag = false;
|
}
|
if (row.children && row.children.length > 0) {
|
this.tableSelect(row, flag);
|
}
|
// 还要进行一个判断 如果全选之后又取消了选择,那么相应的sampleId也要取消
|
this.$nextTick(() => {
|
if (!flag) {
|
this.treeTableData.forEach((item) => {
|
if (item.id == row.sampleId) {
|
this.$refs.revokeTable.toggleRowSelection(item, false);
|
}
|
});
|
// 温度点
|
if (row.number) {
|
this.revokeData = this.revokeData.filter(
|
(a) =>
|
a.inspectionItemSubclass != row.inspectionItemSubclass &&
|
a.inspectionItem != "温度循环" &&
|
a.inspectionItemTwo != row.number &&
|
a.id != row.sampleId
|
);
|
console.log("treeTableData", this.treeTableData);
|
this.treeTableData.forEach((item) => {
|
if (item.id == row.sampleId && item.children.length > 0) {
|
item.children.forEach((a) => {
|
if (a.inspectionItem == "温度循环") {
|
this.$refs.revokeTable.toggleRowSelection(a, false);
|
if (a.children.length > 0) {
|
a.children.forEach((b) => {
|
if (b.inspectionItemTwo == row.number) {
|
this.$refs.revokeTable.toggleRowSelection(b, false);
|
}
|
});
|
}
|
}
|
});
|
}
|
});
|
} else if (row.temperatureNumber) {
|
// 循环次数
|
this.revokeData = this.revokeData.filter(
|
(a) =>
|
a.inspectionItem != "温度循环" &&
|
a.id != row.sampleId &&
|
a.inspectionItemTwo != row.inspectionItemTwo &&
|
a.number != row.inspectionItemTwo
|
);
|
console.log("treeTableData", this.treeTableData);
|
this.treeTableData.forEach((item) => {
|
if (item.id == row.sampleId && item.children.length > 0) {
|
item.children.forEach((a) => {
|
if (a.inspectionItem == "温度循环") {
|
this.$refs.revokeTable.toggleRowSelection(a, false);
|
}
|
});
|
}
|
});
|
} else if (row.temperature) {
|
// 如果是温度循环
|
this.revokeData = this.revokeData.filter(
|
(a) =>
|
a.id != row.sampleId &&
|
a.inspectionItem != "温度循环" &&
|
a.parentId != row.id
|
);
|
} else {
|
this.revokeData = this.revokeData.filter(
|
(a) => a.id != row.sampleId
|
);
|
}
|
}
|
console.log("最终结果", this.revokeData);
|
});
|
},
|
// load的递归赋值
|
loadRecursion(list, treeId, data) {
|
for (let i = 0; i < list.length; i++) {
|
let item = list[i];
|
if (item.id == treeId) {
|
item.children = data;
|
return;
|
}
|
if (item.children && item.children.length > 0) {
|
this.loadRecursion(item.children, treeId, data);
|
}
|
}
|
},
|
// 选中的递归
|
selectedRecursion(list) {
|
if (list.children && list.children.length > 0) {
|
console.log("有子节点", list);
|
|
for (let i = 0; i < list.children.length; i++) {
|
let item = list.children[i];
|
this.$refs.revokeTable.toggleRowSelection(item, true);
|
this.revokeData.push(item);
|
this.revokeData = this.revokeData.filter(
|
(m, index, self) => index === self.findIndex((t) => t.id === m.id)
|
);
|
if (item.children && item.children.length > 0) {
|
this.selectedRecursion(item.children);
|
}
|
}
|
} else {
|
console.log("没有子节点", list);
|
this.$refs.revokeTable.toggleRowSelection(list, true);
|
return;
|
}
|
},
|
// 递归treeTableData
|
recursionTreeTableData(list, data) {
|
console.log("list", list);
|
// list 选中的数据 data代表treetableData
|
for (let i = 0; i < list.length; i++) {
|
let item = list[i];
|
for (let j = 0; j < data.length; j++) {
|
let m = data[j];
|
if (item.id == m.id) {
|
console.log("m", m);
|
this.selectedRecursion(m);
|
}
|
if (m.children && m.children.length > 0) {
|
this.recursionTreeTableData(list, m.children);
|
}
|
}
|
}
|
},
|
watchRecursion(list, flag, id) {
|
console.log("999", list, flag, id);
|
for (let j = 0; j < this.treeTableData.length; j++) {
|
let m = this.treeTableData[j];
|
if (m.id == id) {
|
this.$refs.revokeTable.toggleRowSelection(m, flag);
|
if (flag) {
|
this.revokeData.push(m);
|
this.revokeData = this.revokeData.filter(
|
(a, index, self) => index === self.findIndex((t) => t.id === a.id)
|
);
|
} else {
|
this.revokeData = this.revokeData.filter((a) => a.id != id);
|
}
|
|
if (m.children && m.children.length > 0) {
|
m.children.forEach((a) => {
|
this.$refs.revokeTable.toggleRowSelection(a, flag);
|
if (a.children) {
|
}
|
});
|
}
|
}
|
}
|
},
|
tableSelect(list, flag) {
|
if (list.children && list.children.length > 0) {
|
for (let i = 0; i < list.children.length; i++) {
|
let item = list.children[i];
|
this.$refs.revokeTable.toggleRowSelection(item, flag);
|
if (flag) {
|
this.revokeData.push(item);
|
this.revokeData = this.revokeData.filter(
|
(a, index, self) => index === self.findIndex((t) => t.id === a.id)
|
);
|
} else {
|
this.revokeData = this.revokeData.filter((a) => a.id != item.id);
|
}
|
if (item.children && item.children.length > 0) {
|
this.tableSelect(item, flag);
|
}
|
}
|
}
|
},
|
|
// 懒加载查询
|
load(tree, treeNode, resolve) {
|
treeNode.loading = true;
|
if (this.deleteTilte == "撤销") {
|
// 是否是温度循环
|
if (tree.temperature) {
|
this.$axios
|
.get(
|
this.$api.insOrder.selectTemperatureByProductId +
|
"?productId=" +
|
tree.id
|
)
|
.then((res) => {
|
this.loadRecursion(this.treeTableData, tree.id, res.data);
|
resolve(res.data);
|
this.recursionTreeTableData(this.revokeData, this.treeTableData);
|
treeNode.loading = false;
|
});
|
}
|
// 是否是检验次数
|
else if (tree.temperatureNumber) {
|
this.$axios
|
.get(
|
this.$api.insOrder.selectTemperatureNumberByProductId +
|
"?parentId=" +
|
tree.parentId +
|
"&inspectionItem=" +
|
tree.inspectionItemTwo
|
)
|
.then((res) => {
|
this.loadRecursion(this.treeTableData, tree.id, res.data);
|
resolve(res.data);
|
this.recursionTreeTableData(this.revokeData, this.treeTableData);
|
treeNode.loading = false;
|
});
|
} else {
|
this.$axios
|
.get(
|
this.$api.insOrder.selectProductsBySampleId +
|
"?sampleId=" +
|
tree.id +
|
"&orderId=" +
|
this.orderId
|
)
|
.then((res) => {
|
this.treeTableData.forEach((m, index) => {
|
if (m.sampleId == tree.id) {
|
m.children = res.data;
|
}
|
});
|
resolve(res.data);
|
this.recursionTreeTableData(this.revokeData, this.treeTableData);
|
// // 如果该样品已经被勾选 那么所得到的检验项也要进行勾选
|
// let data = this.revokeData.map((item) => item.id);
|
// if (data.includes(tree.id)) {
|
// this.treeTableData.forEach((m, index) => {
|
// if (m.children) {
|
// m.children.forEach((n, i) => {
|
// if (tree.id == n.sampleId) {
|
// this.$refs.revokeTable.toggleRowSelection(n, true);
|
// }
|
// });
|
// }
|
// });
|
// }
|
treeNode.loading = false;
|
});
|
}
|
} else if (this.deleteTilte == "撤销审核") {
|
// 是否是温度循环
|
if (tree.temperature) {
|
this.$axios
|
.get(
|
this.$api.insOrder.revokeReviewTemperatureByProductId +
|
"?productId=" +
|
tree.id
|
)
|
.then((res) => {
|
resolve(res.data);
|
treeNode.loading = false;
|
});
|
}
|
// 是否是循环次数
|
else if (tree.temperatureNumber) {
|
this.$axios
|
.get(
|
this.$api.insOrder.revokeReviewConsistentByProductId +
|
"?parentId=" +
|
tree.parentId +
|
"&inspectionItem=" +
|
tree.inspectionItemTwo
|
)
|
.then((res) => {
|
resolve(res.data);
|
treeNode.loading = false;
|
});
|
} else {
|
this.$axios
|
.get(
|
this.$api.insOrder.revokeReviewProduct +
|
"?sampleId=" +
|
tree.id +
|
"&orderId=" +
|
this.orderId
|
)
|
.then((res) => {
|
resolve(res.data);
|
treeNode.loading = false;
|
});
|
}
|
}
|
},
|
// 撤销
|
handlEquash(row) {
|
if (this.tabIndex != 1) {
|
this.quashDialogVisible = true;
|
this.insOrderRow = row;
|
} else {
|
// this.componentDataDelete.entity.orderId = row.id
|
this.orderId = row.id;
|
this.$axios
|
.get(this.$api.insOrder.selectSampleByOrderId + "?orderId=" + row.id)
|
.then((res) => {
|
console.log("res", res);
|
this.treeTableData = res.data;
|
this.treeTableData2 = JSON.parse(JSON.stringify(res.data));
|
});
|
this.revocationInsProductIds = "";
|
this.componentDataDelete.showSelect = true;
|
this.componentDataDelete.select = true;
|
this.deleteTilte = "撤销";
|
this.deleteDialogVisible = true;
|
}
|
},
|
handleCloseDelete() {
|
this.revokeData = [];
|
this.treeTableData = [];
|
this.deleteDialogVisible = false;
|
},
|
selectDelete(arr) {
|
this.deleteList = arr;
|
},
|
submitDelete() {
|
if (this.deleteTilte == "撤销") {
|
if (this.revokeData.length == 0) {
|
this.$message.error("请选择要撤销的具体项目");
|
return;
|
}
|
//this.printLoading = true;
|
// 如果勾选了样品
|
let productIds = [];
|
let sampleData = this.revokeData.filter(
|
(m) => m.hasChildren && !m.temperatureNumber && !m.temperature
|
);
|
let sampleIds = [];
|
if (sampleData.length > 0) {
|
console.log("选择了样品", sampleData);
|
sampleIds = sampleData.map((m) => m.id);
|
let newDate = this.revokeData.filter((m) => {
|
return sampleIds.every((id) => m.sampleId != id);
|
});
|
if (newDate) {
|
productIds = newDate.map((m) => m.id);
|
}
|
} else {
|
console.log("选择项目");
|
// 过滤掉循环次数
|
let data = this.revokeData.filter((item) => !item.ids);
|
// 如果勾选循环次数
|
let data1 = this.revokeData.filter((item) => item.ids);
|
productIds = data.map((m) => m.id);
|
data1.forEach((item) => {
|
if (item.ids.length > 0) {
|
item.ids.forEach((a) => {
|
productIds.push(a);
|
});
|
}
|
});
|
productIds = [...new Set(productIds)];
|
console.log("data", data);
|
console.log("data1", data1);
|
}
|
//
|
|
console.log("sampleId", sampleIds);
|
console.log("productIds", productIds);
|
let data = {
|
orderId: this.orderId,
|
sampleIds: sampleIds,
|
productIds: productIds,
|
};
|
this.$axios
|
.post(this.$api.insOrder.revoke, data, {
|
headers: {
|
"Content-Type": "application/json",
|
},
|
noQs: true,
|
})
|
.then((res) => {
|
if (res.code === 200) {
|
this.deleteDialogVisible = false;
|
this.printLoading = false;
|
this.revokeData = [];
|
this.refreshTable();
|
this.$message.success("撤销成功");
|
}
|
});
|
console.log("revokeData", this.revokeData);
|
console.log("data", data);
|
// let ids = this.deleteList.map((m) => m.id).join(",");
|
// this.printLoading = true;
|
// this.axios
|
// .put(
|
// this.$api.insOrder.updateInspected +
|
// "?ids=" +
|
// ids +
|
// "&orderId=" +
|
// this.orderId
|
// )
|
// .then((res) => {
|
// if (res.code === 200) {
|
// this.printLoading = false;
|
// this.deleteDialogVisible = false;
|
// this.refreshTable("page");
|
// this.$message.success("更新成功");
|
// }
|
// });
|
} else {
|
// this.axios
|
// .post(
|
// this.$api.insOrder.checkUpdate +
|
// "?orderId=" +
|
// this.orderId +
|
// "&state=" +
|
// 1
|
// )
|
// .then((res) => {
|
// if (res.code === 200) {
|
// this.printLoading = false;
|
// this.deleteDialogVisible = false;
|
// this.refreshTable("page");
|
// this.$message.success("更新成功");
|
// }
|
// });
|
|
this.axios
|
.get(this.$api.insOrder.revocationPassed + "?orderId=" + this.orderId)
|
.then((res) => {
|
if (res.code === 200) {
|
this.printLoading = false;
|
this.deleteDialogVisible = false;
|
this.refreshTable();
|
this.$message.success("更新成功");
|
}
|
});
|
}
|
},
|
handlEquashCheck(row) {
|
// // this.componentDataDelete.entity.orderId = row.id
|
// this.orderId = row.id;
|
// this.revocationInsProductIds = row.revocationInsProductIds;
|
// this.componentDataDelete.showSelect = false;
|
// this.componentDataDelete.select = false;
|
// this.deleteTilte = "撤销审核";
|
// this.deleteDialogVisible = true;
|
|
this.orderId = row.id;
|
this.revocationInsProductIds = row.revocationInsProductIds;
|
this.componentDataDelete.showSelect = false;
|
this.componentDataDelete.select = false;
|
this.deleteTilte = "撤销审核";
|
this.$axios
|
.get(this.$api.insOrder.revokeReviewSample + "?orderId=" + row.id)
|
.then((res) => {
|
console.log("撤销审核样品查询", res);
|
this.treeTableData = res.data;
|
});
|
this.deleteDialogVisible = true;
|
},
|
handleNo() {
|
if (this.deleteTilte == "撤销") {
|
this.deleteDialogVisible = false;
|
this.revokeData = [];
|
} else {
|
// this.axios
|
// .post(
|
// this.$api.insOrder.checkUpdate +
|
// "?orderId=" +
|
// this.orderId +
|
// "&state=" +
|
// 0
|
// )
|
// .then((res) => {
|
// if (res.code === 200) {
|
// this.printLoading = false;
|
// this.deleteDialogVisible = false;
|
// this.refreshTable("page");
|
// this.$message.success("更新成功");
|
// }
|
// });
|
this.axios
|
.get(this.$api.insOrder.revocationCancel + "?orderId=" + this.orderId)
|
.then((res) => {
|
if (res.code === 200) {
|
this.printLoading = false;
|
this.deleteDialogVisible = false;
|
this.refreshTable();
|
this.$message.success("更新成功");
|
}
|
});
|
}
|
},
|
// 下发
|
handleIssued(row) {
|
this.issuedDialogVisible = true;
|
this.$axios
|
.post(this.$api.insOrder.selectOrderManDay, {
|
id: row.id,
|
})
|
.then((res) => {
|
this.distributeData.orderId = row.id;
|
this.distributeData.sampleId = row.sampleId;
|
this.distributeData.appointed = res.data;
|
this.distributeData.type = row.type;
|
});
|
this.$axios
|
.post(this.$api.insOrderPlan.upPlanUser2, {
|
orderId: row.id,
|
})
|
.then((res) => {
|
if (res.code === 200 && res.data.length > 0) {
|
this.sonLaboratoryList = [];
|
res.data.forEach((m) => {
|
this.sonLaboratoryList.push({
|
value: m,
|
label: m,
|
});
|
});
|
}
|
});
|
},
|
submitForm2() {
|
if (
|
this.distributeData.appointed == null ||
|
this.distributeData.appointed == ""
|
) {
|
this.$message.error("约定时间未填写");
|
return;
|
}
|
//
|
if (
|
this.distributeData.type == 2 &&
|
(this.distributeData.userId == null || this.distributeData.userId == "")
|
) {
|
this.$message.error("指派人员未填写");
|
return;
|
}
|
if (
|
this.distributeData.userId &&
|
(this.distributeData.sonLaboratory == null ||
|
this.distributeData.sonLaboratory == "")
|
) {
|
this.$message.error("试验室未填写");
|
return;
|
}
|
this.upLoad = true;
|
this.$axios
|
.post(
|
this.$api.insOrder.upInsOrder,
|
{
|
orderId: this.distributeData.orderId,
|
sampleId: this.distributeData.sampleId,
|
appointed: this.distributeData.appointed,
|
userIdList: [this.distributeData.userId],
|
sonLaboratory: this.distributeData.sonLaboratory,
|
},
|
{
|
headers: {
|
"Content-Type": "application/json",
|
},
|
}
|
)
|
.then((res) => {
|
if (res.code === 201) {
|
this.upLoad = false;
|
return;
|
}
|
this.$message.success("修改成功");
|
this.upLoad = false;
|
this.issuedDialogVisible = false;
|
this.refreshTable();
|
})
|
.catch((e) => {
|
this.$message.error("修改失败");
|
this.upLoad = false;
|
});
|
},
|
submitForm() {
|
this.upLoad = true;
|
if (this.tabIndex == 1) {
|
this.axios
|
.put(
|
this.$api.insOrder.updateInspected + "?id=" + this.insOrderRow.id
|
)
|
.then((res) => {
|
if (res.code === 200) {
|
this.upLoad = false;
|
this.quashDialogVisible = false;
|
this.refreshTable();
|
this.$message.success("更新成功");
|
}
|
});
|
} else {
|
this.axios
|
.put(this.$api.insOrder.updateStatus + "?id=" + this.insOrderRow.id)
|
.then((res) => {
|
if (res.code === 200) {
|
this.upLoad = false;
|
this.quashDialogVisible = false;
|
this.refreshTable();
|
this.$message.success("更新成功");
|
}
|
});
|
}
|
let authorizedPerson =
|
this.formData.authorizedPerson.length > 0
|
? this.formData.authorizedPerson.join(",")
|
: "";
|
delete this.formData.createTime;
|
delete this.formData.updateTime;
|
delete this.formData.createUser;
|
delete this.formData.updateUser;
|
this.formData.authorizedPerson = authorizedPerson;
|
},
|
// 下单
|
playOrder(num) {
|
this.$router.push({
|
name: "addOrder",
|
params: {},
|
});
|
this.active = num;
|
this.examine = 0;
|
// this.refreshTable();
|
},
|
handleTab(m, i) {
|
this.tabIndex = i;
|
this.queryParams.state = m.value;
|
this.getList();
|
},
|
getUserMenu() {
|
this.$axios.get(this.$api.user.getUserMenu).then((res) => {
|
let data = [];
|
res.data.forEach((a) => {
|
data.push({
|
label: a.name,
|
value: a.id,
|
});
|
});
|
this.componentData.tagField.createUser.select = data;
|
});
|
},
|
getInsStateDicts() {
|
this.$axios
|
.post(this.$api.enums.selectEnumByCategory, {
|
category: "检验任务状态",
|
})
|
.then((res) => {
|
let data = res.data;
|
this.insStateList = data;
|
data.forEach((ele) => {
|
//0:待检验 1:检验中 2:已检验 3:待复核 4:复核未通过 5:复核通过
|
if (["2", "5"].includes(ele.value)) {
|
ele.type = "success";
|
} else if (["1", "3"].includes(ele.value)) {
|
ele.type = "warning";
|
} else if (["0", "4"].includes(ele.value)) {
|
ele.type = "danger";
|
}
|
});
|
this.componentDataDataLook.tagField.insState.select = data;
|
this.componentDataDelete.tagField.insState.select = data;
|
});
|
},
|
selectEnumByCategoryForOrderType() {
|
this.$axios
|
.post(this.$api.enums.selectEnumByCategory, {
|
category: "检验类别",
|
})
|
.then((res) => {
|
this.componentData.tagField.orderType.select = res.data;
|
});
|
},
|
changeUser() {
|
if (this.sonLaboratoryList.length > 0) {
|
this.distributeData.sonLaboratory = this.sonLaboratoryList[0].value;
|
}
|
},
|
},
|
};
|
</script>
|
|
<style scope>
|
.title {
|
height: 60px;
|
line-height: 60px;
|
}
|
|
.search {
|
background-color: #fff;
|
height: 50px;
|
display: flex;
|
align-items: center;
|
overflow: hidden;
|
}
|
|
.search_thing {
|
display: flex;
|
align-items: center;
|
height: 50px;
|
width: 100px;
|
}
|
|
.search_label {
|
width: 90px;
|
font-size: 14px;
|
text-align: right;
|
}
|
|
.search_input {
|
width: calc(100% - 90px);
|
}
|
|
.table {
|
/* margin-top: 10px;
|
background-color: #fff;
|
width: calc(100% - 40px);
|
height: calc(100% - 60px - 80px - 10px - 40px);
|
padding: 20px; */
|
}
|
|
.tab {
|
list-style-type: none;
|
display: flex;
|
/* margin-bottom: 12px; */
|
padding-inline-start: 0px;
|
}
|
|
.tab li {
|
line-height: 24px;
|
padding: 6px 14px;
|
font-size: 14px;
|
color: #333333;
|
border: 1px solid #eeeeee;
|
cursor: pointer;
|
}
|
|
.tab li:nth-child(1) {
|
border-radius: 8px 0 0 8px;
|
}
|
|
.tab li:nth-child(5) {
|
border-radius: 0 8px 8px 0;
|
}
|
|
.tab li.active {
|
border-color: #3a7bfa;
|
color: #3a7bfa;
|
}
|
|
.el-form-item {
|
margin-bottom: 16px;
|
}
|
|
.box-card>>>.el-radio__inner {
|
border-radius: 2px !important;
|
}
|
|
.box-card>>>.el-radio__input.is-checked .el-radio__inner::after {
|
content: "";
|
width: 8px;
|
height: 3px;
|
border: 1px solid white;
|
border-top: transparent;
|
border-right: transparent;
|
text-align: center;
|
display: block;
|
position: absolute;
|
top: 3px;
|
left: 2px;
|
transform: rotate(-45deg);
|
border-radius: 0px;
|
background: none;
|
}
|
|
>>>.el-radio__label {
|
color: #000 !important;
|
}
|
|
.el-dialog__body>>>.el-radio__label {
|
font-size: 8px;
|
}
|
|
.el-dialog__body>>>.el-radio__input.is-checked .el-radio__inner::after {
|
content: "";
|
width: 4px;
|
height: 3px;
|
border: 1px solid #000;
|
border-top: transparent;
|
border-right: transparent;
|
text-align: center;
|
display: block;
|
position: absolute;
|
top: 1px;
|
left: 2px;
|
transform: rotate(-45deg);
|
border-radius: 0px;
|
background: none;
|
}
|
|
>>>.el-radio__input.is-disabled.is-checked .el-radio__inner {
|
background: #3a7bfa;
|
}
|
|
.el-dialog__body>>>.el-radio__input.is-disabled.is-checked .el-radio__inner {
|
background: transparent;
|
}
|
|
.el-dialog__body>>>.el-radio__inner {
|
width: 8px !important;
|
height: 8px !important;
|
}
|
|
.el-dialog__body>>>.el-radio__label {
|
padding-left: 2px !important;
|
}
|
|
.el-dialog__body>>>.el-card__body {
|
padding: 0 !important;
|
}
|
|
.el-dialog__body>>>.el-card {
|
border: none;
|
}
|
|
.el-dialog__body>>>.el-radio__input.is-disabled .el-radio__inner {
|
border-color: #000 !important;
|
}
|
|
.el-dialog__body>>>.el-radio__input.is-disabled.is-checked .el-radio__inner {
|
border: none !important;
|
}
|
|
.scor {
|
width: 0.01cm;
|
height: 0.01cm;
|
border-radius: 1px;
|
border: 1px solid #000;
|
display: inline-block;
|
}
|
|
.ellipsis-multiline {
|
display: -webkit-box;
|
-webkit-line-clamp: 2;
|
-webkit-box-orient: vertical;
|
overflow: hidden;
|
text-overflow: ellipsis;
|
word-wrap: break-word;
|
max-height: 3em;
|
/* 高度为字体大小的两倍 */
|
line-height: 1.5em;
|
/* 行高 */
|
height: 3em;
|
/* 高度为行高的两倍 */
|
}
|
|
.table-container {
|
height: 70vh;
|
overflow-y: auto;
|
}
|
|
.table-container.el-table {
|
overflow: hidden;
|
text-overflow: ellipsis;
|
white-space: nowrap;
|
}
|
</style>
|