<template>
|
<div class="inspection_order">
|
<div v-show="activeFace === 0 && state===0" style="width: 100%;height: 100%;">
|
<div>
|
<el-row class="title">
|
<el-col :span="12" style="padding-left: 20px;text-align: left;">报告编制</el-col>
|
</el-row>
|
</div>
|
<div class="search" style="position: relative;">
|
<div class="search_thing">
|
<div class="search_label">报告编号:</div>
|
<div class="search_input"><el-input v-model="componentData.entity.code" clearable placeholder="请输入"
|
size="small" @keyup.enter.native="refreshTable()"></el-input></div>
|
</div>
|
<div class="search_thing">
|
<div class="search_label">状态:</div>
|
<div class="search_input">
|
<el-select v-model="componentData.entity.queryStatus" clearable size="small" style="width: 100%;" @change="refreshTable()">
|
<el-option v-for="(a, i) in queryStatusList" :key="i" :label="a.label" :value="a.value"></el-option>
|
</el-select>
|
</div>
|
</div>
|
<div class="search_thing">
|
<div class="search_label">下单类别:</div>
|
<div class="search_input">
|
<el-select v-model="componentData.entity.typeSource" clearable size="small" style="width: 100%;" @change="refreshTable()">
|
<el-option v-for="(a, i) in typeSourceList" :key="i" :label="a.label" :value="a.value"></el-option>
|
</el-select>
|
</div>
|
</div>
|
<div class="search_thing">
|
<div class="search_label">检验类别:</div>
|
<div class="search_input">
|
<el-select v-model="componentData.entity.orderType" clearable size="small" style="width: 100%;" @change="refreshTable()">
|
<el-option v-for="(a, i) in orderTypeList" :key="i" :label="a.label" :value="a.value"></el-option>
|
</el-select>
|
</div>
|
</div>
|
<div class="search_thing" style="padding-left: 30px;">
|
<el-button size="small" @click="refresh()">重 置</el-button>
|
<el-button size="small" type="primary" @click="refreshTable()">查 询</el-button>
|
<el-button :loading="outLoading" size="small" style="margin-right: 16px;" type="primary" @click="handleDowns">批量下载</el-button>
|
</div>
|
</div>
|
<!-- <input id="input" type="file" accept=".doc,.docx"></input> -->
|
<div class="table">
|
<el-table @selection-change="handleChange" :data="valueTableData" style="width: 100%" height="calc(100vh - 21em)" v-loading="tableLoading">
|
<!-- 表格列 -->
|
<el-table-column type="selection" width="55"></el-table-column>
|
<el-table-column header-align="center" align="center" width="70" prop="prop" label="序号" type="index"></el-table-column>
|
<el-table-column prop="code" label="报告编号" min-width="180">
|
<template slot-scope="scope">
|
<el-button type="text" @click="selectAllByOne(scope.row)">{{scope.row.code}}</el-button>
|
</template>
|
</el-table-column>
|
<el-table-column prop="typeSource" label="下单类别" min-width="120">
|
<template slot-scope="scope">
|
<el-tag type="info" v-if="scope.row.typeSource === 1" disable-transitions>原材料下单</el-tag>
|
<el-tag type="info" v-if="scope.row.typeSource === 0" disable-transitions>成品下单</el-tag>
|
</template>
|
</el-table-column>
|
<el-table-column prop="orderType" label="检验类别" min-width="150">
|
<template slot-scope="scope">
|
<el-tag type="success" v-if="scope.row.orderType === 'Customer-ordered test'" disable-transitions>委托试验</el-tag>
|
<el-tag v-if="scope.row.orderType === '抽检'" disable-transitions>抽检</el-tag>
|
<el-tag type="info" v-if="scope.row.orderType === '进厂检验'" disable-transitions>进厂检验</el-tag>
|
<el-tag type="warning" v-if="scope.row.orderType === 'Quarterly inspection'" disable-transitions>季度检验</el-tag>
|
</template>
|
</el-table-column>
|
<el-table-column prop="createTime" label="创建时间" min-width="150"></el-table-column>
|
<el-table-column prop="writeUserName" label="提交人" min-width="110"></el-table-column>
|
<el-table-column prop="writeTime" label="提交时间" min-width="150"></el-table-column>
|
<el-table-column prop="state" label="提交状态" min-width="110">
|
<template slot-scope="scope">
|
<el-tag type="danger" v-if="scope.row.state === 0" disable-transitions>待提交</el-tag>
|
<el-tag type="success" v-if="scope.row.state === 1" disable-transitions>已提交</el-tag>
|
</template>
|
</el-table-column>
|
<el-table-column prop="examineUser" label="审核人" width="110"></el-table-column>
|
<el-table-column prop="examineTime" label="审核时间" width="180"></el-table-column>
|
<el-table-column prop="isExamine" label="审核状态" width="110">
|
<template slot-scope="scope">
|
<el-tag type="danger" v-if="scope.row.isExamine === 0" disable-transitions>不通过</el-tag>
|
<el-tag type="success" v-if="scope.row.isExamine === 1" disable-transitions>通过</el-tag>
|
</template>
|
</el-table-column>
|
<el-table-column prop="examineTell" label="审核备注" width="180"></el-table-column>
|
<el-table-column prop="ratifyUser" label="批准人" width="110"></el-table-column>
|
<el-table-column prop="ratifyTime" label="批准时间" width="180"></el-table-column>
|
<el-table-column prop="isRatify" label="批准状态" width="110">
|
<template slot-scope="scope">
|
<el-tag type="danger" v-if="scope.row.isRatify === 0" disable-transitions>不批准</el-tag>
|
<el-tag type="success" v-if="scope.row.isRatify === 1" disable-transitions>批准</el-tag>
|
</template>
|
</el-table-column>
|
<el-table-column prop="ratifyTell" label="批准备注" width="180"></el-table-column>
|
<!-- 操作按钮 -->
|
<el-table-column label="操作" fixed="right" min-width="360" align="center">
|
<template slot-scope="scope">
|
<el-button size="small" type="text" @click="viewIssued(scope.row)">查看报告</el-button>
|
<el-upload ref='upload1'
|
style="display: inline"
|
:action="fileAction1 +'?id='+ scope.row.id"
|
:auto-upload="true"
|
:before-upload="fileBeforeUpload1"
|
:headers="headers" :on-error="onError1"
|
:on-success="handleSuccessUp1"
|
:show-file-list="false"
|
accept='.doc,.docx'>
|
<el-button size="small" type="text" :disabled="scope.row.state != 0 || userName !== scope.row.writeUserName">上传</el-button>
|
<!-- <span>上传</span>-->
|
</el-upload>
|
<el-button type="text" size="small" :disabled="scope.row.state != 0 || userName !== scope.row.writeUserName" @click="handleRestore(scope.row)">还原</el-button>
|
<el-button type="text" size="small" :disabled="scope.row.state != 0 || userName !== scope.row.writeUserName" @click="sendBackTask(scope.row)">退回任务</el-button>
|
<el-button type="text" size="small" :disabled="scope.row.state != 0 || userName !== scope.row.writeUserName" @click="handle(scope.row)">提交</el-button>
|
<el-button type="text" size="small" :disabled="scope.row.state == null || scope.row.state == 0 ||scope.row.isExamine == 1 || userName !== scope.row.examineUser" @click="handleIssued(scope.row)">审核</el-button>
|
<el-button type="text" size="small" :disabled="scope.row.state == null || scope.row.state == 0 || scope.row.isExamine == 0 || scope.row.isExamine == null || scope.row.isRatify == 1 || userName !== scope.row.ratifyUser" @click="handleApprove(scope.row)">批准</el-button>
|
<el-popover placement="bottom" :width="170" trigger="hover">
|
<template #reference>
|
<el-button link type="text" size="small">更多</el-button>
|
</template>
|
<div>
|
<el-button style="margin-left: 10px" type="text" size="small" @click="download(scope.row)">下载</el-button>
|
<el-button type="text" size="small" @click="viewInspectInfo(scope.row)">原始记录</el-button>
|
<el-button type="text" size="small" @click="handleFileLook(scope.row)">附件上传</el-button>
|
</div>
|
</el-popover>
|
</template>
|
</el-table-column>
|
</el-table>
|
<el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="page.current"
|
style="margin-right: 5%;" :page-sizes="[10, 20, 30, 50, 100]" :page-size="page.size"
|
layout="->,total, sizes, prev, pager, next, jumper" :total="total">
|
</el-pagination>
|
</div>
|
</div>
|
<el-dialog :fullscreen="fullscreen" :modal-append-to-body="false" :visible.sync="claimVisible" title="在线编制"
|
width="22cm">
|
<div class="full-screen">
|
<i v-if="!fullscreen" class="el-icon-full-screen" style="cursor: pointer;font-size: 18px"
|
@click="fullscreen=true;"></i>
|
<img v-else alt="" src="@/assets/images/no-full.svg" style="cursor: pointer;" @click="fullscreen=false;">
|
</div>
|
<Word v-if="claimVisible" ref="Word" :class="{fullscreen:fullscreen}" :value="value" style="height:70vh" />
|
<span slot="footer" class="dialog-footer">
|
<el-button @click="claimVisible = false">取 消</el-button>
|
<el-button type="primary" @click="confirmClaim">确 定</el-button>
|
</span>
|
</el-dialog>
|
<el-dialog :fullscreen="fullscreen" :modal-append-to-body="false" :visible.sync="issuedVisible" title="报告审核"
|
width="80vw">
|
<div class="full-screen">
|
<i v-if="!fullscreen" class="el-icon-full-screen" style="cursor: pointer;font-size: 18px" @click="fullscreen=true;"></i>
|
<img v-else alt="" src="@/assets/images/no-full.svg" style="cursor: pointer;" @click="fullscreen=false;" >
|
</div>
|
<div v-if="issuedVisible" style="height: 80vh;">
|
<onlyoffice ref="onlyoffice" :options="option" style="width: 100%;height: 100%;" />
|
</div>
|
<span slot="footer" class="dialog-footer">
|
<el-button :disabled="loadingIssued" @click="issuedReasonVisible=true">不通过</el-button>
|
<el-button type="primary" @click="subIssued">通 过</el-button>
|
</span>
|
</el-dialog>
|
<el-dialog :modal-append-to-body="false" :visible.sync="issuedReasonVisible" title="不通过原因" width="400px">
|
<div class="search_thing">
|
<div class="search_label">不通过原因:</div>
|
<div class="search_input"><el-input v-model="reason" clearable placeholder="请输入" size="small"></el-input></div>
|
</div>
|
<span slot="footer" class="dialog-footer">
|
<el-button :disabled="loadingIssuedReason" @click="issuedReasonVisible=false">取消</el-button>
|
<el-button :loading="loadingIssuedReason" type="primary" @click="handleIssuedReason">确定</el-button>
|
</span>
|
</el-dialog>
|
<el-dialog :fullscreen="fullscreen" :modal-append-to-body="false" :visible.sync="approveVisible" title="报告批准" width="80vw">
|
<div class="full-screen">
|
<i v-if="!fullscreen" class="el-icon-full-screen" style="cursor: pointer;font-size: 18px" @click="fullscreen=true;"></i>
|
<img v-else alt="" src="@/assets/images/no-full.svg" style="cursor: pointer;" @click="fullscreen=false;" >
|
</div>
|
<div v-if="approveVisible" style="height: 80vh;">
|
<onlyoffice ref="onlyoffice" :options="option" style="width: 100%;height: 100%;" />
|
</div>
|
<span slot="footer" class="dialog-footer">
|
<el-button :disabled="loadingApprove" @click="approveReasonVisible=true">不批准</el-button>
|
<el-button :loading="loadingApprove" type="primary" @click="subApprove">批 准</el-button>
|
</span>
|
</el-dialog>
|
<el-dialog :modal-append-to-body="false" :visible.sync="approveReasonVisible" title="不批准原因" width="400px">
|
<div class="search_thing">
|
<div class="search_label">不批准原因:</div>
|
<div class="search_input"><el-input v-model="reason" clearable placeholder="请输入" size="small"></el-input></div>
|
</div>
|
<span slot="footer" class="dialog-footer">
|
<el-button :disabled="loadingApproveReason" @click="approveReasonVisible=false">取消</el-button>
|
<el-button :loading="loadingApproveReason" type="primary" @click="handleApproveReason">确定</el-button>
|
</span>
|
</el-dialog>
|
<el-dialog :close-on-click-modal="false" :visible.sync="addApproverDia" title="指定批准人员"
|
width="400px"
|
@close="closeAddApproverDia">
|
<div class="body" style="display: flex;padding: 10px;align-items: center;">
|
<div class="search_label" style="width: 150px;"><span class="required-span">*</span>批准人:</div>
|
<div class="search_input" style="width: 100%;">
|
<el-select v-model="approver" clearable filterable placeholder="请选择" size="small" style="width: 100%;">
|
<el-option v-for="(item,i) in approverList" :key="i" :label="item.label" :value="item.value">
|
</el-option>
|
</el-select>
|
</div>
|
</div>
|
<span slot="footer" class="dialog-footer">
|
<el-button @click="closeAddApproverDia">取 消</el-button>
|
<el-button :loading="loadingIssued" type="primary" @click="submitAddApprover">确 定</el-button>
|
</span>
|
</el-dialog>
|
<el-dialog :close-on-click-modal="false" :visible.sync="addVerifyDia"
|
title="指定审核人员"
|
width="400px"
|
@close="closeAddVerifyDia">
|
<div class="body" style="display: flex;padding: 10px;align-items: center;">
|
<div class="search_label" style="width: 150px;"><span class="required-span">*</span>审核人:</div>
|
<div class="search_input" style="width: 100%;">
|
<el-select v-model="verifyUser" clearable filterable placeholder="请选择" size="small" style="width: 100%;">
|
<el-option v-for="(item,i) in approverList" :key="i" :label="item.label" :value="item.value">
|
</el-option>
|
</el-select>
|
</div>
|
</div>
|
<span slot="footer" class="dialog-footer">
|
<el-button @click="closeAddVerifyDia">取 消</el-button>
|
<el-button :loading="loadingVerify" type="primary" @click="handleSubmit">确 定</el-button>
|
</span>
|
</el-dialog>
|
<div v-if="activeFace >0 && isCopper === null" style="width: 100%;height: 100%;">
|
<Add :active="activeFace" :currentId="currentId" :examine="examine"/>
|
</div>
|
<div v-if="activeFace >0 && isCopper === 0" style="width: 100%;height: 100%;">
|
<CustomsInspection :active="activeFace" :currentId="currentId" :customsInspection="customsInspection" :isReport="isReport"/>
|
</div>
|
<div v-if="activeFace >0 && isCopper === 1" style="width: 100%;height: 100%;">
|
<CopperOrder :active="activeFace" :currentId="currentId"></CopperOrder>
|
</div>
|
<!--产业链信息查看-->
|
<ShowInfo v-if="showInfoDialog" ref="showInfoDialog" :showInfoDialog="showInfoDialog"></ShowInfo>
|
<!--报告查看-->
|
<el-dialog :fullscreen="fullscreen" :modal-append-to-body="false" :visible.sync="viewIssuedVisible" title="报告查看"
|
width="80vw">
|
<div class="full-screen">
|
<i v-if="!fullscreen" class="el-icon-full-screen" style="cursor: pointer;font-size: 18px" @click="fullscreen=true;"></i>
|
<img v-else alt="" src="@/assets/images/no-full.svg" style="cursor: pointer;" @click="fullscreen=false;" >
|
</div>
|
<div v-if="viewIssuedVisible" style="height: 80vh;">
|
<onlyoffice ref="onlyoffice" :options="option" style="width: 100%;height: 100%;" />
|
</div>
|
</el-dialog>
|
<!--检验任务信息查看-->
|
<Inspection v-if="state>0" :key="InspectionKey" :inspectorList="inspectorList" :orderId="orderId"
|
:sonLaboratory="sonLaboratory" :state="state"
|
:typeSource="typeSource"
|
@goback="goback" @refreshView="refreshView"/>
|
<!--附件查看-->
|
<el-dialog :visible.sync="filesDialogVisible" title="附件查看" width="80%" @closed="closeFilesLook">
|
<div style="display: flex;justify-content: space-between;">
|
<el-upload ref='upload'
|
:action="fileAction"
|
:auto-upload="true"
|
:before-upload="fileBeforeUpload" :data="{orderId: filesLookInfo.insOrderId}"
|
:headers="headers" :on-error="onError"
|
:on-success="handleSuccessUp"
|
:show-file-list="false"
|
accept='.jpg,.jpeg,.png,.gif,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.zip,.rar' style="width: 80px !important;">
|
<el-button size="small" style="height: 38px" type="primary">附件上传</el-button>
|
</el-upload>
|
</div>
|
<!-- <div v-if="filesDialogVisible" style="height: 70vh;overflow-y: auto;">-->
|
<!-- <ValueTable :key="upIndex"-->
|
<!-- ref="fileList"-->
|
<!-- :componentData="fileComponentData"-->
|
<!-- :delUrl="$api.insOrderPlan.delfile"-->
|
<!-- :url="$api.insOrderPlan.getFileList"-->
|
<!-- class="value-table"/>-->
|
<!-- </div>-->
|
</el-dialog>
|
</div>
|
</template>
|
|
<script>
|
import onlyoffice from "@/components/Onlyoffice/onlyoffice.vue";
|
// import ShowInfo from "../do/b1-material-ins-order/showInfo.vue";
|
import file from "@/utils/file";
|
export default {
|
components: {onlyoffice},
|
data() {
|
return {
|
componentData: {
|
entity: {
|
queryStatus: null,
|
code: null,
|
typeSource: null,
|
orderBy: {
|
field: 'id',
|
order: 'desc'
|
}
|
},
|
isIndex: true,
|
showSelect: true,
|
select: true,
|
selectMethod: 'handleChange',
|
do: [
|
{
|
id: '',
|
font: '查看报告',
|
type: 'text',
|
method: 'viewIssued',
|
},
|
{
|
id: 'download',
|
font: '下载',
|
type: 'text',
|
method: 'download'
|
}, {
|
id: 'handleUpload',
|
font: '上传',
|
type: 'upload',
|
uploadConfig: {
|
url: this.$api.insReport.inReport,
|
accept: '.docx'
|
},
|
method: 'handleUpload',
|
disabFun: (row, index) => {
|
return row.state != 0 || userName != row.writeUserName
|
}
|
},
|
{
|
id: 'handleRestore',
|
font: '还原',
|
type: 'text',
|
method: 'handleRestore',
|
disabFun: (row, index) => {
|
return row.state != 0 || JSON.parse(localStorage.getItem("user")).name != row.writeUserName
|
}
|
},
|
{
|
id: 'sendBackTask',
|
font: '退回任务',
|
type: 'text',
|
method: 'sendBackTask',
|
disabFun: (row, index) => {
|
return row.state != 0 || JSON.parse(localStorage.getItem("user")).name != row.writeUserName
|
}
|
},
|
{
|
id: 'handle',
|
font: '提交',
|
type: 'text',
|
method: 'handle',
|
disabFun: (row, index) => {
|
return row.state != 0 || JSON.parse(localStorage.getItem("user")).name != row.writeUserName
|
}
|
},
|
{
|
id: 'handleIssued',
|
font: '审核',
|
type: 'text',
|
method: 'handleIssued',
|
disabFun: (row, index) => {
|
return row.state == null || row.state == 0 || row.isExamine == 1 || JSON.parse(localStorage.getItem("user")).name != row.examineUser
|
}
|
}, {
|
id: 'handleApprove',
|
font: '批准',
|
type: 'text',
|
method: 'handleApprove',
|
disabFun: (row, index) => {
|
return row.state == null || row.state == 0 || row.isExamine == 0 || row.isExamine == null || row.isRatify == 1 || JSON.parse(localStorage.getItem("user")).name != row.ratifyUser
|
}
|
},
|
{
|
id: '',
|
font: '原始记录',
|
type: 'text',
|
method: 'viewInspectInfo',
|
},
|
{
|
id: '',
|
font: '附件上传',
|
type: 'text',
|
method: 'handleFileLook',
|
}
|
],
|
linkEvent: {
|
code: {
|
method: 'selectAllByOne'
|
}
|
},
|
tagField: {
|
isRatify: {
|
select: [{
|
value: 0,
|
type: 'danger',
|
label: '不批准'
|
}, {
|
value: 1,
|
type: 'success',
|
label: '批准'
|
}]
|
},
|
isExamine: {
|
select: [{
|
value: 0,
|
type: 'danger',
|
label: '不通过'
|
}, {
|
value: 1,
|
type: 'success',
|
label: '通过'
|
}]
|
},
|
state: {
|
select: [{
|
value: 0,
|
type: 'danger',
|
label: '待提交'
|
}, {
|
value: 1,
|
type: 'success',
|
label: '已提交'
|
}]
|
},
|
typeSource: {
|
select: [{
|
value: 0,
|
label: '成品下单',
|
type: 'info'
|
},{
|
value: 1,
|
label: '原材料下单',
|
type: 'info'
|
}]
|
},
|
queryStatus: {
|
select: [{
|
value: 0,
|
label: '待提交',
|
type: 'info'
|
},{
|
value: 1,
|
label: '待审核',
|
type: 'info'
|
},{
|
value: 2,
|
label: '待批准',
|
type: 'info'
|
}]
|
},
|
orderType: {
|
select: [{
|
value: 'Customer-ordered test',
|
label: '委托试验',
|
type: 'success',
|
effect: 'plain'
|
},{
|
value: '抽检',
|
label: '抽检',
|
type: '',
|
effect: 'plain'
|
},{
|
value: '进厂检验',
|
label: '进厂检验',
|
type: 'info',
|
effect: 'plain'
|
},{
|
value: 'Quarterly inspection',
|
label: '季度检验',
|
type: 'warning',
|
effect: 'plain'
|
}]
|
}
|
},
|
selectField: {},
|
requiredAdd: [],
|
needSort: ['createTime', 'state', 'writeTime', 'isExamine', 'examineTime', 'ratifyTime'],
|
requiredUp: []
|
},
|
page: {
|
current: 1,
|
size: 20,
|
},
|
total: null,
|
entityCopy: {},
|
upIndex: 0,
|
statusList: [],
|
claimVisible: false,
|
issuedVisible: false,
|
issuedReasonVisible: false,
|
approveVisible: false,
|
approveReasonVisible: false,
|
fullscreen: false,
|
loadingApproveReason: false,
|
loadingApprove: false,
|
loadingIssuedReason: false,
|
loadingIssued: false,
|
value: ``,
|
reason: '',
|
currentInfo: null,
|
option:null,
|
mutiList:[],
|
outLoading:false,
|
inLoading:false,
|
addApproverDia: false, // 指定审批人员弹框
|
approver: '', // 审批人员
|
approverId: '', // 审批人员
|
approverList: [],
|
addVerifyDia: false, // 指定审核人员弹框
|
verifyUser: null, // 审核人员
|
loadingVerify: false, // 审核人员
|
typeSourceList: [
|
{label: '成品下单', value: 0},
|
{label: '原材料下单', value: 1},
|
],
|
orderTypeList: [
|
{label: '委托试验', value: 'Customer-ordered test'},
|
{label: '抽检', value: '抽检'},
|
{label: '进厂检验', value: '进厂检验'},
|
{label: '季度检验', value: 'Quarterly inspection'},
|
],
|
showInfoDialog: false, // 产业链信息查看
|
isReport: 1,
|
activeFace: 0, // 1:下单,2:查看,3:审核,默认为0
|
customsInspection: {},
|
currentId: null,
|
examine: null,
|
viewIssuedVisible: false,
|
queryStatusList: [
|
{label: '待提交', value: 0},
|
{label: '待审核', value: 1},
|
{label: '待批准', value: 2},
|
],
|
state: 0,
|
orderId: 0,
|
inspectorList: [],//检验人员列表
|
InspectionKey: 1,
|
typeSource: null,// 0:成品下单,1:原材料下单
|
sonLaboratory: '', // 试验室
|
filesDialogVisible: false,
|
filesLookInfo: {},
|
fileComponentData: {
|
entity: {
|
insOrderId:''
|
},
|
isIndex: true,
|
showSelect: false,
|
select: false,
|
sort: false,
|
init:false,
|
do: [
|
{
|
id: 'parent',
|
font: '下载',
|
type: 'text',
|
method: 'handleDown'
|
},{
|
id: 'delete',
|
font: '删除',
|
type: 'text',
|
method: 'doDiy',
|
}
|
],
|
isPage: false,
|
linkEvent: {},
|
tagField: {
|
type:{
|
select:[
|
{
|
value: 1,
|
label: '图片'
|
},
|
{
|
value: 2,
|
label: '文件'
|
}
|
]
|
}
|
},
|
currentId: '',
|
selectField: {},
|
requiredAdd: [],
|
requiredUp: []
|
},
|
isCopper: null,
|
tableLoading: false,
|
valueTableData: [],
|
userName: ''
|
}
|
},
|
computed: {
|
headers() {
|
return {
|
'token': sessionStorage.getItem('token')
|
}
|
},
|
action() {
|
return this.javaApi + this.$api.insReport.upAll
|
},
|
fileAction() {
|
return this.javaApi + this.$api.insOrderPlan.uploadFile
|
},
|
fileAction1() {
|
return this.javaApi + this.$api.insReport.inReport
|
}
|
},
|
mounted() {
|
this.entityCopy = this.HaveJson(this.componentData.entity)
|
this.userName = JSON.parse(localStorage.getItem("user")).name
|
this.getPower()
|
this.refreshTable()
|
},
|
methods: {
|
handleChange(arr){
|
this.mutiList = arr
|
},
|
// 查看检验数据
|
viewInspectInfo (row) {
|
//当前检验任务的检验人列表
|
let inspectorList = []
|
if(row.userName){
|
inspectorList = row.userName.split(',')
|
}
|
let user = JSON.parse(localStorage.getItem('user'))
|
if(user){
|
inspectorList.push(user.name)
|
}
|
this.inspectorList = inspectorList
|
this.state = 3;
|
this.typeSource = row.typeSource
|
this.orderId = row.insOrderId
|
this.sonLaboratory = row.sonLaboratory
|
},
|
goback() {
|
this.state = 0
|
this.refreshTable('page')
|
},
|
handleFileLook (row) {
|
this.filesLookInfo = row
|
this.filesDialogVisible = true
|
this.fileComponentData.entity.insOrderId = row.insOrderId
|
this.$nextTick(() => {
|
this.$refs['fileList'].selectList()
|
})
|
},
|
closeFilesLook () {
|
this.filesDialogVisible = false
|
},
|
handleSuccessUp(response, ) {
|
this.upLoading = false;
|
if (response.code == 200) {
|
this.$message.success('上传成功');
|
this.$refs.fileList.selectList()
|
}
|
},
|
handleSuccessUp1(response, ) {
|
if (response.code == 200) {
|
this.$message.success('上传成功');
|
}
|
},
|
handleDown(row){
|
this.$axios.post(this.$api.insOrderPlan.downFile, {
|
id: row.id,
|
}).then(res => {
|
if (res.code === 200) {
|
let url = '';
|
if(res.data.type==1){
|
url = this.javaApi+'/img/'+res.data.fileUrl
|
file.downloadIamge(url,row.fileName)
|
}else{
|
url = this.javaApi+'/word/'+res.data.fileUrl
|
const link = document.createElement('a');
|
link.href = url;
|
link.download = row.fileName;
|
link.click();
|
}
|
}
|
}).catch(error => {
|
|
})
|
},
|
// 刷新页面
|
refreshView () {
|
this.InspectionKey++
|
},
|
// 查看产业链信息
|
openInfoDialog (row) {
|
this.showInfoDialog = true
|
this.$nextTick(() => {
|
this.$refs.showInfoDialog.getInfo(row.ifsInventoryId)
|
})
|
},
|
handleDowns(){
|
if(this.mutiList.length==0){
|
this.$message.error('请选择报告')
|
return
|
}
|
let str = this.mutiList.map(m=>m.id).join(',')
|
this.outLoading = true
|
this.$axios.get(this.$api.insReport.downAll+'?ids='+str).then(res => {
|
this.outLoading = false
|
this.$message.success('导出成功')
|
// const blob = new Blob([res],{ type: 'application/octet-stream' });
|
// const url = URL.createObjectURL(blob);
|
// const link = document.createElement('a');
|
// link.href = url;
|
// link.download = '报告.zip';
|
// link.click();
|
const link = document.createElement('a');
|
link.href = this.javaApi + res.message;
|
link.target = '_blank';
|
document.body.appendChild(link);
|
link.click();
|
})
|
},
|
beforeUpload(file){
|
const isZip = file.type === 'application/zip' || file.name.endsWith('.zip');
|
if (!isZip) {
|
this.$message.error('上传文件只能是 ZIP 格式!');
|
}
|
if(isZip){
|
this.inLoading = true;
|
}
|
return isZip;
|
},
|
fileBeforeUpload(file) {
|
let flag = true
|
if (file.size > 1024 * 1024 * 10) {
|
this.$message.error('上传文件不超过10M');
|
this.$refs.upload.clearFiles()
|
flag = false
|
}
|
if (!flag) {
|
return Promise.reject(flag); //正确的终止
|
}
|
},
|
fileBeforeUpload1(file) {
|
let flag = true
|
if (file.size > 1024 * 1024 * 10) {
|
this.$message.error('上传文件不超过10M');
|
this.$refs.upload1.clearFiles()
|
flag = false
|
}
|
if (!flag) {
|
return Promise.reject(flag); //正确的终止
|
}
|
},
|
handleSuccess(response,){
|
this.inLoading = false;
|
if (response.code == 200) {
|
this.$message.success('导入成功')
|
this.refreshTable()
|
}else{
|
this.$message.error(response.message)
|
}
|
},
|
onError(err, file, fileList,type) {
|
this.$message.error('上传失败')
|
this.$refs.upload.clearFiles()
|
},
|
onError1(err, file, fileList,type) {
|
this.$message.error('上传失败')
|
this.$refs.upload1.clearFiles()
|
},
|
refreshTable(e) {
|
this.tableLoading = false
|
this.$axios.post(this.$api.insReport.pageInsReport, {
|
page: this.page,
|
entity: this.componentData.entity
|
}, {
|
headers: {
|
'Content-Type': 'application/json'
|
}
|
}).then(res => {
|
this.tableLoading = false
|
if (res.code === 201) {
|
return
|
}
|
this.total = res.data.body.total
|
this.valueTableData = res.data.body.records
|
})
|
},
|
handleSizeChange(val) {
|
this.page.size = val
|
this.refreshTable();
|
},
|
handleCurrentChange(val) {
|
this.page.current = val
|
this.refreshTable();
|
},
|
refresh() {
|
this.componentData.entity = this.HaveJson(this.entityCopy)
|
this.refreshTable();
|
},
|
async handleWeave(row) {
|
let fileName = (row.urlS===null||row.urlS==='')?row.url:row.urlS
|
fileName = fileName.replace('/word/','')
|
const userName = JSON.parse(localStorage.getItem("user")).name;
|
//参考vabOnlyOffice组件参数配置
|
const { href } = this.$router.resolve({
|
path: `/wordEdit`,
|
query: {
|
url: this.javaApi + "/word/" + fileName,
|
isEdit: true,
|
fileType: "docx",
|
title: fileName,
|
lang: 'zh-CN',
|
isPrint: true,
|
user_id: 1,
|
user_name: userName,
|
editUrl: this.javaApi + "/insReport/onlyOffice/save?fileName=" + fileName
|
}
|
})
|
window.open(href, '_blank');
|
},
|
// 权限分配
|
getPower(radio) {
|
let power = JSON.parse(sessionStorage.getItem('power'))
|
let edit = false
|
let up = false
|
let res = false
|
let sub = false
|
let issued = true
|
let approve = true
|
for (var i = 0; i < power.length; i++) {
|
if (power[i].menuMethod == 'upReportFile') {
|
edit = true
|
}
|
if (power[i].menuMethod == 'inReport') {
|
up = true
|
}
|
if (power[i].menuMethod == 'upReportUrl') {
|
res = true
|
}
|
if (power[i].menuMethod == 'writeReport') {
|
sub = true
|
}
|
if (power[i].menuMethod == 'ratifyReport') {
|
approve = true
|
}
|
if (power[i].menuMethod == 'examineReport') {
|
issued = true
|
}
|
}
|
if (!approve) {
|
this.componentData.do.splice(6, 1)
|
}
|
if (!issued) {
|
this.componentData.do.splice(5, 1)
|
}
|
if (!sub) {
|
this.componentData.do.splice(4, 1)
|
}
|
if (!res) {
|
this.componentData.do.splice(3, 1)
|
}
|
if (!up) {
|
this.componentData.do.splice(2, 1)
|
}
|
if (!edit) {
|
this.componentData.do.splice(0, 1)
|
}
|
},
|
confirmClaim() {
|
// console.log(this.$refs.Word.getValue())
|
},
|
playOrder(num) {
|
this.activeFace = num
|
},
|
async selectAllByOne(row) {
|
this.isCopper = row.isCopper
|
this.customsInspection = row
|
this.activeFace = 2;
|
this.examine = 1;
|
this.isReport = 1
|
this.currentId = parseInt(row.insOrderId)
|
},
|
download(row) {
|
let url = row.urlS ? row.urlS : row.url;
|
const link = document.createElement('a');
|
link.href = this.javaApi + url;
|
link.target = '_blank';
|
document.body.appendChild(link);
|
link.click();
|
},
|
// 还原操作
|
handleRestore(row) {
|
this.$axios.post(this.$api.insReport.upReportUrl, {
|
id: row.id
|
}).then(res => {
|
if (res.code === 200) {
|
this.$message.success('操作成功')
|
this.refreshTable('page')
|
}
|
})
|
},
|
// 审核按钮
|
handleIssued(row) {
|
this.currentInfo = row;
|
let fileName = (row.urlS===null||row.urlS==='')?row.url:row.urlS
|
let fileType = "docx"
|
if (row.tempUrlPdf != null || row.tempUrlPdf === '') {
|
fileName = row.tempUrlPdf
|
fileType = "pdf"
|
}
|
fileName = fileName.replace('/word/','')
|
const userName = JSON.parse(localStorage.getItem("user")).name;
|
this.option = {
|
url: this.javaApi + "/word/" + fileName,
|
isEdit: false,
|
fileType: fileType,
|
title: fileName,
|
lang: 'zh-CN',
|
isPrint: false,
|
user_id: 1,
|
user_name: userName,
|
editUrl: this.javaApi + "/insReport/onlyOffice/save?fileName=" + fileName
|
}
|
this.issuedVisible = true;
|
},
|
// 查看pdf报告
|
viewIssuedPdf(row) {
|
this.currentInfo = row;
|
let url = row.tempUrlPdf
|
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();
|
}
|
},
|
// 查看报告
|
viewIssued(row) {
|
this.currentInfo = row;
|
let fileName = (row.urlS===null||row.urlS==='')?row.url:row.urlS
|
let fileType = "docx"
|
if (row.tempUrlPdf != null || row.tempUrlPdf === '') {
|
fileName = row.tempUrlPdf
|
fileType = "pdf"
|
}
|
fileName = fileName.replace('/word/','')
|
const userName = JSON.parse(localStorage.getItem("user")).name;
|
this.option = {
|
url: this.javaApi + "/word/" + fileName,
|
isEdit: false,
|
fileType: fileType,
|
title: fileName,
|
lang: 'zh-CN',
|
isPrint: false,
|
user_id: 1,
|
user_name: userName,
|
editUrl: this.javaApi + "/insReport/onlyOffice/save?fileName=" + fileName
|
}
|
this.viewIssuedVisible = true;
|
},
|
// 退回到任务
|
sendBackTask(row) {
|
this.$confirm('确认退回到检验任务?退回后需重新提交复核', '提示', {
|
confirmButtonText: '确定',
|
cancelButtonText: '取消',
|
type: 'warning'
|
}).then(() => {
|
this.upLoad = true
|
this.$axios.post(this.$api.insReport.sendBackTask+'?id='+row.id).then(res => {
|
this.upLoad = false
|
if (res.code === 201) {
|
return
|
}
|
this.$message.success('退回成功!')
|
this.refreshTable('page')
|
}).catch(err => {
|
this.upLoad = false
|
})
|
}).catch(() => {
|
this.$message({
|
type: 'info',
|
message: '已取消删除'
|
});
|
});
|
},
|
// 审核通过
|
submitAddApprover () {
|
if (!this.approver) {
|
this.$message.error('请选择审批人')
|
return
|
}
|
this.loadingIssued = true;
|
this.$axios.post(this.$api.insReport.examineReport, {
|
id: this.currentInfo.id,
|
userId: this.approver,
|
isExamine: 1
|
}).then(res => {
|
this.loadingIssued = false;
|
if (res.code === 201) {
|
return
|
}
|
this.$message.success('提交成功')
|
this.refreshTable('page')
|
this.currentInfo = null;
|
this.addApproverDia = false
|
this.issuedVisible = false;
|
}).catch(e => {
|
this.$message.error('提交失败')
|
this.loadingIssued = false;
|
})
|
},
|
closeAddApproverDia () {
|
this.addApproverDia = false
|
this.approver = ''
|
},
|
// 点击通过,需要选择批准人员
|
subIssued() {
|
this.getAuthorizedPerson()
|
this.addApproverDia = true
|
},
|
// 获取人员列表
|
getAuthorizedPerson() {
|
this.$axios.get(this.$api.user.selectQualityUserList).then(res => {
|
let data = []
|
let userName = JSON.parse(localStorage.getItem("user")).name;
|
res.data.forEach(a => {
|
// if(a.name !== userName) {
|
data.push({
|
label: a.name,
|
value: a.id
|
})
|
// }
|
})
|
this.approverList = data
|
})
|
},
|
// 批准按钮
|
handleApprove(row) {
|
this.currentInfo = row;
|
let fileName = (row.urlS===null||row.urlS==='')?row.url:row.urlS
|
let fileType = "docx"
|
if (row.tempUrlPdf != null || row.tempUrlPdf === '') {
|
fileName = row.tempUrlPdf
|
fileType = "pdf"
|
}
|
fileName = fileName.replace('/word/','')
|
const userName = JSON.parse(localStorage.getItem("user")).name;
|
this.option = {
|
url: this.javaApi + "/word/" + fileName,
|
isEdit: false,
|
fileType: fileType,
|
title: fileName,
|
lang: 'zh-CN',
|
isPrint: false,
|
user_id: 1,
|
user_name: userName,
|
editUrl: this.javaApi + "/insReport/onlyOffice/save?fileName=" + fileName
|
}
|
this.approveVisible = true;
|
},
|
// 批准通过
|
subApprove() {
|
this.loadingApprove = true;
|
this.$axios.post(this.$api.insReport.ratifyReport, {
|
id: this.currentInfo.id,
|
isRatify: 1
|
}).then(res => {
|
this.loadingApprove = false;
|
if (res.code == 201) {
|
this.$message.error('批准失败')
|
return
|
}
|
this.$message.success('已批准')
|
this.refreshTable('page')
|
this.currentInfo = null;
|
this.approveVisible = false;
|
})
|
},
|
handle (row) {
|
this.getAuthorizedPerson()
|
this.currentInfo = row;
|
this.addVerifyDia = true
|
},
|
// 提交审核人操作
|
handleSubmit(row) {
|
this.loadingVerify = true
|
this.$axios.post(this.$api.insReport.writeReport, {
|
id: this.currentInfo.id,
|
userId: this.verifyUser,
|
}).then(res => {
|
this.loadingVerify = false
|
if (res.code === 201) {
|
return
|
}
|
this.addVerifyDia = false
|
this.$message.success('提交成功')
|
this.refreshTable('page')
|
}).catch(e => {
|
this.loadingVerify = false
|
this.$message.error('提交失败')
|
})
|
},
|
closeAddVerifyDia () {
|
this.addVerifyDia = false
|
this.verifyUser = ''
|
},
|
// 审核不通过原因提交
|
handleIssuedReason() {
|
if (!this.reason) {
|
return this.$message.error('请输入原因')
|
}
|
this.loadingIssuedReason = true;
|
this.$axios.post(this.$api.insReport.examineReport, {
|
id: this.currentInfo.id,
|
isExamine: 0,
|
examineTell: this.reason
|
}).then(res => {
|
this.loadingIssuedReason = false;
|
if (res.code === 201) {
|
return
|
}
|
this.$message.success('操作成功')
|
this.refreshTable('page')
|
this.currentInfo = null;
|
this.reason = '';
|
this.issuedVisible = false;
|
this.issuedReasonVisible = false;
|
}).catch(e => {
|
this.$message.error('操作失败')
|
this.loadingIssuedReason = false;
|
})
|
},
|
// 不批准原因提交
|
handleApproveReason() {
|
if (!this.reason) {
|
return this.$message.error('请输入原因')
|
}
|
this.loadingApproveReason = true
|
this.$axios.post(this.$api.insReport.ratifyReport, {
|
id: this.currentInfo.id,
|
isRatify: 0,
|
examineTell: this.reason
|
}).then(res => {
|
this.loadingApproveReason = false
|
if (res.code === 201) {
|
return
|
}
|
this.$message.success('操作成功')
|
this.refreshTable('page')
|
this.currentInfo = null;
|
this.reason = '';
|
this.approveVisible = false;
|
this.approveReasonVisible = false;
|
}).catch(e => {
|
this.$message.error('操作失败')
|
this.loadingIssuedReason = false;
|
})
|
}
|
}
|
}
|
</script>
|
<style scoped>
|
.title {
|
height: 60px;
|
line-height: 60px;
|
}
|
|
.search {
|
background-color: #fff;
|
height: 80px;
|
display: flex;
|
align-items: center;
|
}
|
|
.search_thing {
|
display: flex;
|
align-items: center;
|
height: 50px;
|
}
|
|
.search_label {
|
width: 120px;
|
font-size: 14px;
|
text-align: right;
|
}
|
|
.search_input {
|
width: calc(100% - 120px);
|
}
|
|
.table {
|
margin-top: 10px;
|
background-color: #fff;
|
width: calc(100% - 40px);
|
height: calc(100% - 60px - 80px - 10px - 40px);
|
padding: 20px;
|
}
|
|
.el-form-item {
|
margin-bottom: 16px;
|
}
|
|
.full-screen {
|
position: absolute;
|
right: 52px;
|
top: 22px;
|
}
|
|
.btns {
|
position: absolute;
|
right: 40px;
|
top: 50%;
|
transform: translate(0, -50%);
|
display: flex;
|
align-items: center;
|
}
|
|
.fullscreen {
|
height: 82vh
|
}
|
</style>
|