<template>
|
<div class="capacity-scope">
|
<div class="search">
|
<div>
|
<el-form :model="entity" ref="entity" size="small" :inline="true">
|
<el-form-item label="IFS域" prop="contract">
|
<el-select @keyup.enter.native="refreshTable" v-model="entity.contract" clearable placeholder="请选择" size="small">
|
<el-option label="ZTNS" value="ZTNS"/>
|
<el-option label="KJNS" value="KJNS"/>
|
</el-select>
|
</el-form-item>
|
<el-form-item label="批号" prop="updateBatchNo">
|
<el-input v-model="entity.updateBatchNo" clearable placeholder="请输入" size="small"
|
@keyup.enter.native="refreshTable()">
|
</el-input>
|
</el-form-item>
|
<el-form-item label="订单编号" prop="no">
|
<el-input size="small" placeholder="请输入" clearable v-model="entity.no"
|
@keyup.enter.native="refreshTable()"></el-input>
|
</el-form-item>
|
<el-form-item label="规格型号" prop="specsModels">
|
<el-input size="small" placeholder="请输入" clearable v-model="entity.specsModels"
|
@keyup.enter.native="refreshTable()"></el-input>
|
</el-form-item>
|
<el-form-item label="样品名称" prop="sample">
|
<el-input size="small" placeholder="请输入" clearable v-model="entity.sample"
|
@keyup.enter.native="refreshTable()"></el-input>
|
</el-form-item>
|
<el-form-item label="物料属性" prop="materialProp">
|
<el-select clearable size="small" v-model="entity.materialProp" style="width: 100%" @change="refreshTable()">
|
<el-option v-for="dict in dict.type.material_prop_type" :key="dict.value" :label="dict.label"
|
:value="dict.value">
|
</el-option>
|
</el-select>
|
</el-form-item>
|
<el-form-item label="OA审核状态" prop="operation">
|
<el-select clearable size="small" v-model="entity.operation" style="width: 100%" @change="refreshTable()">
|
<el-option v-for="dict in dict.type.oa_workflow_state" :key="dict.value" :label="dict.label"
|
:value="dict.value">
|
</el-option>
|
</el-select>
|
</el-form-item>
|
<el-form-item label="反馈日期" prop="feedbackDateTime">
|
<el-date-picker
|
type="daterange"
|
size="small"
|
start-placeholder="开始日期"
|
end-placeholder="结束日期"
|
clearable
|
value-format="yyyy-MM-dd"
|
v-model="entity.feedbackDateTime"
|
@keyup.enter.native="refreshTable()">
|
</el-date-picker>
|
</el-form-item>
|
<el-form-item label="供应商名称" prop="supplierName">
|
<el-input size="small" placeholder="请输入" clearable v-model="entity.supplierName"
|
@keyup.enter.native="refreshTable()"></el-input>
|
</el-form-item>
|
<el-form-item>
|
<el-button type="primary" size="mini" @click="refreshTable">查询</el-button>
|
<el-button size="mini" @click="refresh">重置</el-button>
|
<el-button :loading="exportLoading" type="success" size="mini" @click="exportUnqualifiedHandler">导出</el-button>
|
<el-button type="primary" size="mini" @click="openInsOrderDialog">新增不合格处理</el-button>
|
</el-form-item>
|
</el-form>
|
</div>
|
</div>
|
<div>
|
<lims-table :tableData="tableData" :column="column"
|
:more="true" @pagination="pagination"
|
:page="page" :tableLoading="tableLoading"></lims-table>
|
</div>
|
<el-dialog
|
title="提交"
|
:show-close="false"
|
:close-on-press-escape="false"
|
:close-on-click-modal="false"
|
:visible.sync="dialogVisible"
|
width="30%">
|
<span>是否确认提交OA?</span>
|
<span slot="footer" class="dialog-footer">
|
<el-button @click="dialogVisible = false">取 消</el-button>
|
<el-button type="primary" @click="submitOA" :loading="submitOALoading">确 定</el-button>
|
</span>
|
</el-dialog>
|
<el-dialog
|
title="删除"
|
:show-close="false"
|
:close-on-press-escape="false"
|
:close-on-click-modal="false"
|
:visible.sync="deleteVisible"
|
width="30%">
|
<span>是否确认<span style="color: #FF4902">删除</span>OA?</span>
|
<span slot="footer" class="dialog-footer">
|
<el-button @click="deleteVisible = false">取 消</el-button>
|
<el-button type="primary" @click="cancelOA" :loading="cancelOALoading">确 定</el-button>
|
</span>
|
</el-dialog>
|
<el-dialog
|
title="选择不合格订单"
|
:show-close="false"
|
:close-on-press-escape="false"
|
:close-on-click-modal="false"
|
:visible.sync="insOrderVisible"
|
width="50%">
|
<el-row :gutter="20" style="margin-bottom:10px">
|
<el-col :span="12">
|
<el-input clearable size="small" v-model="lotBatchNo" placeholder="请输入批次号"></el-input>
|
</el-col>
|
<el-col :span="12">
|
<el-button size="small" type="primary" @click="searchInsOrderList">搜索</el-button>
|
</el-col>
|
</el-row>
|
<lims-table ref="insOrderTable"
|
:tableData="insOrderDataList"
|
:column="insOrderTableDataColumn"
|
:isSelection="true"
|
:selectionSelectable="insOrderSelectable"
|
:handleSelectionChange="selectMethod"
|
:rowClassName="insOrderRowClassName"
|
@pagination="insOrderPageination"
|
:height="500"
|
:page="insOrderPage"
|
:tableLoading="insOrderTableLoading">
|
</lims-table>
|
<span slot="footer" class="dialog-footer">
|
<el-button @click="resetInsOrderForm">取 消</el-button>
|
<el-button type="primary" @click="openAddUnqualifiedHandlerView">确 定</el-button>
|
</span>
|
</el-dialog>
|
<UnPassDialog ref="unPassDialog" v-if="unPassDialog"
|
:orderId="orderId"
|
@resetForm="resetForm1"
|
:unPassDialog="unPassDialog"></UnPassDialog>
|
<OAProcess ref="OAProcess"
|
:OAProcess="OAProcess"
|
@closeOAProcess="closeOAProcess"
|
v-if="OAProcess"></OAProcess>
|
</div>
|
</template>
|
|
<script>
|
import {getIfsByAll} from "@/api/business/rawMaterialOrder";
|
import UnPassDialog from "./components/unPassDialog.vue";
|
import OAProcess from "./components/OAProcess.vue";
|
import limsTable from "@/components/Table/lims-table.vue";
|
import {deleteUnqualifiedHandler, page, pushOA,exportUnqualifiedHandler} from "@/api/business/unqualifiedHandler";
|
import {transformExcel} from '@/utils/file'
|
export default {
|
components: {
|
limsTable,
|
OAProcess,
|
UnPassDialog,
|
},
|
dicts: ['material_prop_type','oa_workflow_state'],
|
data() {
|
return {
|
lotBatchNo:null,
|
insOrderVisible:false,
|
insOrderTableLoading:false,
|
insOrderDataList:[],
|
insOrderTableDataColumn:[
|
{
|
label: 'IFS域',
|
prop: 'contract',
|
width: '120px',
|
dataType: 'tag',
|
formatData: (params) => {
|
return params
|
},
|
formatType: (params) => {
|
if (params === 'ZTNS') {
|
return ''
|
} else if (params === 'KJNS') {
|
return 'success'
|
}else {
|
return null
|
}
|
}
|
|
},
|
{ label: '委托编号', prop: 'entrustCode', width: "160px", },
|
{
|
dataType: 'tag',
|
label: '检验状态',
|
prop: 'inspectStatus',
|
formatData: (params) => {
|
if (params == 0) {
|
return '检验中'
|
} else if (params == 1) {
|
return '合格'
|
} else if (params == 2) {
|
return '不合格'
|
} else if (params == 3) {
|
return '未下单'
|
} else if (params == 4) {
|
return '让步放行'
|
} else {
|
return null
|
}
|
},
|
formatType: (params) => {
|
if (params == 0) {
|
return 'warning'
|
} else if (params == 1) {
|
return 'success'
|
} else if (params == 2) {
|
return 'danger'
|
} else if (params == 3) {
|
return 'info'
|
} else if (params == 4) {
|
return ''
|
} else {
|
return null
|
}
|
}
|
},
|
{ label: '订单号', prop: 'orderNo' },
|
{ label: '抵达的采购数量', prop: 'purQtyInStore' ,width:'160' },
|
{ label: '下发时间', prop: 'sendTime',width:'160' },
|
{ label: '批号', prop: 'updateBatchNo',width:'160' },
|
{ label: '零件号', prop: 'partNo',width:'140' },
|
{ label: '零件描述', prop: 'partDesc' },
|
{ label: '供应商名称', prop: 'supplierName' },
|
{ label: '不合格描述', prop: 'unqualifiedDesc',width:'160' },
|
{
|
dataType: 'tag',
|
label: '免检',
|
prop: 'isExemption',
|
formatData: (params) => {
|
if (params == 1) {
|
return '免检'
|
} else {
|
return null
|
}
|
},
|
formatType: (params) => {
|
if (params == 1) {
|
return 'success'
|
} else {
|
return null
|
}
|
}
|
},
|
{
|
label: '样品名称',
|
prop: 'sampleName',
|
width: "160px"
|
},
|
{ label: '样品型号', prop: 'sampleModel' },
|
{ label: '检验人', prop: 'userName' },
|
{
|
label: '物料属性',
|
prop: 'materialProp',
|
formatData: (params) => {
|
if (!params) return null
|
|
for (let i = 0; i < this.dict.type.material_prop_type.length; i++) {
|
const item = this.dict.type.material_prop_type[i]
|
if (item.value == params) {
|
return item.label
|
}
|
}
|
return null
|
}
|
},
|
{
|
dataType: 'tag',
|
label: '物料类型',
|
prop: 'isExpire',
|
formatData: (params) => {
|
if (params == 1) {
|
return '过期物料'
|
} else {
|
return null
|
}
|
},
|
formatType: (params) => {
|
if (params == 1) {
|
return 'info'
|
} else {
|
return null
|
}
|
}
|
},
|
{ label: '单位', prop: 'buyUnitMeas' },
|
{ label: '接收时间', prop: 'receiverDate',width:'160' },
|
{ label: '报检时间', prop: 'declareDate',width:'160' },
|
],
|
insOrderPage:{
|
total: 0,
|
size: 20,
|
current: 1
|
},
|
handlerId: null,
|
contract:null,
|
entity: {
|
contract: null,
|
sample: null,
|
specsModels: null,
|
supplierName: null,
|
feedbackDateTime:[],
|
materialProp: null,
|
operation:null
|
},
|
tableData: [],
|
tableLoading: false,
|
column: [
|
{
|
label: 'IFS域',
|
prop: 'contract',
|
width: '80px',
|
dataType: 'tag',
|
formatData: (params) => {
|
return params
|
},
|
formatType: (params) => {
|
if (params === 'ZTNS') {
|
return ''
|
} else if (params === 'KJNS') {
|
return 'success'
|
}else {
|
return null
|
}
|
}
|
|
},
|
{ label: '编号', prop: 'no', width: "160px", },
|
{
|
label: "OA审核状态",
|
prop: "operation",
|
width: "100px",
|
dataType: "tag",
|
formatData: (params) => {
|
return params
|
},
|
formatType: (params) => {
|
if(params){
|
this.dict.type.oa_workflow_state.forEach(item => {
|
if(item.value === params){
|
params = item.raw.listClass
|
}
|
});
|
}
|
return params
|
},
|
},
|
{ label: '订单号', prop: 'orderNo' },
|
{
|
label: "零件号",
|
prop: "partNo",
|
width: "160px",
|
dataType: "link",
|
linkMethod: "openUnPassDialog",
|
},
|
{ label: '零件描述', prop: 'partDesc',width: "160px" },
|
{
|
label: '物料属性',
|
prop: 'materialProp',
|
formatData: (params) => {
|
if (!params) return null
|
|
for (let i = 0; i < this.dict.type.material_prop_type.length; i++) {
|
const item = this.dict.type.material_prop_type[i]
|
if (item.value == params) {
|
return item.label
|
}
|
}
|
return null
|
}
|
},
|
{ label: '物料名称', prop: 'materialName',width: "160px" },
|
{ label: '生产批次', prop: 'productionBatch',width: "160px" },
|
{ label: '到货数量', prop: 'cargoQuantity' },
|
{ label: '规格型号', prop: 'specsModels' },
|
{ label: '报检日期', prop: 'inspectTime' },
|
{ label: '状态', prop: 'statusDB' },
|
{ label: '反馈人', prop: 'feedbackUser' },
|
{ label: '要检验的采购数量', prop: 'qtyToInspect',width: "140px" },
|
{ label: '反馈日期', prop: 'feedbackTime',width: "100px" },
|
{
|
label: "分类",
|
prop: "classification",
|
width: "100px",
|
dataType: "tag",
|
formatData: (params) => {
|
if (params == 0) {
|
return "一类不合格";
|
} else if(params == 1) {
|
return "二类不合格";
|
} else {
|
return null
|
}
|
},
|
formatType: (params) => {
|
if (params == 0) {
|
return "warning";
|
} else if(params == 1) {
|
return "info";
|
} else {
|
return "null";
|
}
|
},
|
},
|
{ label: '供应商名称', prop: 'supplierName' },
|
{
|
label: "不合格归属",
|
prop: "offGradeAscription",
|
width: "120px",
|
dataType: "tag",
|
formatData: (params) => {
|
if (params == 0) {
|
return "检测不合格";
|
} else if(params == 1) {
|
return "生产反馈不合格";
|
} else {
|
return null
|
}
|
},
|
formatType: (params) => {
|
if (params == 0) {
|
return "danger";
|
} else if(params == 1) {
|
return "warning";
|
} else {
|
return "null";
|
}
|
},
|
},
|
{ label: '不合格描述', prop: 'unqualifiedDesc',width: "160px" },
|
{
|
dataType: 'action',
|
fixed: 'right',
|
label: '操作',
|
width: '220px',
|
operation: [
|
{
|
name: (row)=>{
|
return row.requestId !== null && row.operation==='退回' ? '重新提交' : '提交OA'
|
},
|
type: 'text',
|
clickFun: (row) => {
|
this.openOA(row);
|
},
|
disabled: (row, index) => {
|
return row.requestId !== null && row.operation!=='退回' // 有requestId说明已经提交过OA,不可再次提交
|
}
|
},
|
{
|
name: '查看OA流程',
|
type: 'text',
|
clickFun: (row) => {
|
this.OAView(row);
|
},
|
},
|
{
|
name: '删除',
|
type: 'text',
|
clickFun: (row) => {
|
this.deleteOA(row);
|
},
|
disabled: (row, index) => {
|
return row.requestId !== null && row.operation!=='退回' // 有requestId说明已经提交过OA,不可再次提交
|
}
|
},
|
]
|
}
|
],
|
page: {
|
total: 0,
|
size: 20,
|
current: 1
|
},
|
statusList: [],
|
dialogVisible: false, // 确认提交OA弹框
|
unPassDialog: false, // 不合格处理弹框
|
orderId: '',
|
OAProcess: false, // OA流程弹框
|
submitOALoading: false, // OA流程弹框提交按钮loading
|
deleteVisible: false, // OA流程删除弹框
|
cancelOALoading: false, // OA流程删除弹框提交按钮loading
|
exportLoading:false
|
};
|
},
|
mounted() {
|
this.refreshTable()
|
},
|
methods: {
|
getInsOrderRowId(row) {
|
if (!row) {
|
return ''
|
}
|
const currentId = row.enterOrderId || row.insOrderId || row.orderId || row.id
|
return currentId ? String(currentId) : ''
|
},
|
getExistingInsOrderIds() {
|
const ids = new Set()
|
this.tableData.forEach(row => {
|
['insOrderId'].forEach(key => {
|
if (row[key] !== undefined && row[key] !== null && row[key] !== '') {
|
ids.add(String(row[key]))
|
}
|
})
|
})
|
return ids
|
},
|
isDisabledInsOrderRow(row) {
|
const currentId = this.getInsOrderRowId(row)
|
if (!currentId) {
|
return false
|
}
|
return this.getExistingInsOrderIds().has(currentId)
|
},
|
insOrderSelectable(row) {
|
return !this.isDisabledInsOrderRow(row)
|
},
|
insOrderRowClassName({ row }) {
|
return this.isDisabledInsOrderRow(row) ? 'disabled-selection-row' : ''
|
},
|
resetInsOrderForm(){
|
this.insOrderDataList = []
|
this.lotBatchNo = null
|
this.orderId = ''
|
this.$nextTick(()=>{
|
this.insOrderVisible = false
|
})
|
},
|
openInsOrderDialog(){
|
this.insOrderVisible = true
|
},
|
searchInsOrderList(){
|
this.insOrderTableLoading = true
|
const params = {
|
updateBatchNo: this.lotBatchNo,
|
isInspect: 1,
|
...this.insOrderPage
|
}
|
getIfsByAll(params).then(res => {
|
this.insOrderTableLoading = false
|
if (res.code === 200) {
|
this.insOrderDataList = res.data.records
|
this.insOrderPage.total = res.data.total
|
}
|
}).catch(err => {
|
this.insOrderTableLoading = false
|
})
|
},
|
insOrderPageination(page){
|
this.insOrderPage.size = page.limit
|
this.searchInsOrderList()
|
},
|
selectMethod(val){
|
if (!val || val.length === 0) {
|
this.orderId = ''
|
return
|
}
|
|
const currentRow = val[val.length - 1]
|
this.orderId = this.getInsOrderRowId(currentRow)
|
|
if (val.length > 1 && this.$refs.insOrderTable && this.$refs.insOrderTable.$refs.multipleTable) {
|
this.$refs.insOrderTable.$refs.multipleTable.clearSelection()
|
this.$refs.insOrderTable.$refs.multipleTable.toggleRowSelection(currentRow, true)
|
}
|
},
|
//打开新增不合格处理弹框
|
openAddUnqualifiedHandlerView(){
|
if(!this.orderId){
|
this.$message.warning("请选择一条订单记录")
|
return;
|
}
|
this.insOrderVisible = false
|
this.unPassDialog = true;
|
this.$nextTick(() => {
|
this.$refs.unPassDialog.getInsOrder('add');
|
});
|
},
|
exportUnqualifiedHandler(){
|
this.exportLoading = true
|
const newEntity = { ...this.entity }
|
if (newEntity.feedbackDateTime && newEntity.feedbackDateTime.length > 0) {
|
newEntity.feedbackStartTime = newEntity.feedbackDateTime[0]
|
newEntity.feedbackEndTime = newEntity.feedbackDateTime[1]
|
}
|
exportUnqualifiedHandler({...newEntity}).then(res=>{
|
transformExcel(res,'不合格处理记录.xlsx')
|
this.exportLoading = false
|
}).catch(error=>{
|
console.error(error)
|
})
|
},
|
refreshTable() {
|
this.tableLoading = true
|
const newEntity = { ...this.entity }
|
if (newEntity.feedbackDateTime && newEntity.feedbackDateTime.length > 0) {
|
newEntity.feedbackStartTime = newEntity.feedbackDateTime[0]
|
newEntity.feedbackEndTime = newEntity.feedbackDateTime[1]
|
}
|
page({ ...this.page, ...newEntity }).then(res => {
|
this.tableLoading = false
|
this.tableData = res.data.records
|
this.page.total = res.data.total
|
}).catch(err => {
|
this.tableLoading = false
|
})
|
},
|
// 重置
|
refresh() {
|
this.resetForm('entity')
|
this.refreshTable()
|
},
|
// 分页切换
|
pagination(page) {
|
this.page.size = page.limit
|
this.refreshTable()
|
},
|
// 打开不合格处理弹框
|
openUnPassDialog (row) {
|
this.unPassDialog = true
|
this.$nextTick(() => {
|
this.$refs.unPassDialog.getInsOrder('view', row)
|
})
|
},
|
// 关闭不合格处理弹框
|
resetForm1 () {
|
this.$refs.unPassDialog.$refs['unPassForm'].resetFields();
|
this.unPassDialog = false
|
this.$nextTick(()=>{
|
this.refreshTable('page')
|
})
|
},
|
// 打开删除OA确认弹框
|
deleteOA (row) {
|
this.handlerId = row.handlerId
|
this.deleteVisible = true
|
},
|
// 提交删除申请
|
cancelOA () {
|
this.de = true
|
deleteUnqualifiedHandler({id: this.handlerId,}).then(res => {
|
this.cancelOALoading = false
|
if (res.code === 200) {
|
this.deleteVisible = false
|
this.$message.success('删除成功')
|
this.refreshTable('page')
|
}
|
}).catch(error => {
|
this.cancelOALoading = false
|
console.error(error);
|
});
|
},
|
// 查看提交OA的数据
|
openOA (row) {
|
this.handlerId = row.handlerId
|
this.contract = row.contract
|
if(row && row.requestId !== null ){
|
// 重新提交OA,打开编辑弹框
|
this.unPassDialog = true
|
this.$nextTick(() => {
|
this.$refs.unPassDialog.getInsOrder('resubmit', row)
|
})
|
}else{
|
this.dialogVisible = true
|
}
|
},
|
// 查看OA流程
|
OAView (row) {
|
this.OAProcess = true
|
this.$nextTick(() => {
|
this.$refs.OAProcess.getInfo(row.handlerId,row?row.unqualifiedDesc:"")
|
})
|
},
|
// 关闭查看OA流程的弹框
|
closeOAProcess () {
|
this.OAProcess = false
|
},
|
//提交OA
|
submitOA(row) {
|
// 提交OA
|
this.submitOALoading = true
|
pushOA({handlerId: this.handlerId,contract:this.contract}).then(res => {
|
this.submitOALoading = false
|
if (res.code === 200) {
|
this.dialogVisible = false
|
this.$message.success('提交成功')
|
this.refreshTable('page')
|
}
|
}).catch(error => {
|
this.submitOALoading = false
|
console.error(error);
|
});
|
}
|
}
|
};
|
</script>
|
|
<style scoped>
|
.capacity-scope >>> .disabled-selection-row td {
|
background-color: #f5f7fa !important;
|
color: #c0c4cc;
|
}
|
</style>
|