You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

335 lines
12 KiB

<template>
<div class="customer-css">
<div class="toolbar">
<el-button type="primary" icon="el-icon-refresh" @click="handleRefresh">刷新</el-button>
</div>
<!-- 列表 -->
<el-table
ref="mainTable"
:data="dataList"
:height="height"
border
highlight-current-row
v-loading="loading"
style="width: 100%">
<el-table-column prop="requestNo" label="申请单号" header-align="center" align="left" min-width="150" show-overflow-tooltip/>
<el-table-column prop="orderRef1" label="PO号" header-align="center" align="left" min-width="150" show-overflow-tooltip/>
<el-table-column prop="supplierNo" label="供应商编码" header-align="center" align="left" min-width="120" show-overflow-tooltip/>
<el-table-column prop="supplierName" label="供应商名称" header-align="center" align="left" min-width="200" show-overflow-tooltip/>
<el-table-column prop="partNo" label="产品编码" header-align="center" align="left" min-width="150" show-overflow-tooltip/>
<el-table-column prop="partDesc" label="产品名称" header-align="center" align="left" min-width="150" show-overflow-tooltip/>
<el-table-column prop="qty" label="验货数量" header-align="center" align="right" width="120"/>
<el-table-column prop="approveQty" label="检验通过数量" header-align="center" align="right" width="120"/>
<el-table-column prop="status" label="状态" header-align="center" align="center" width="100">
<template slot-scope="scope">
{{ getStatusText(scope.row.statusDb) }}
</template>
</el-table-column>
<el-table-column prop="needInspectDate" label="建议验货日期" header-align="center" align="center" width="120"/>
<el-table-column prop="planStartDate" label="计划开始日期" header-align="center" align="center" width="120"/>
<el-table-column prop="planEndDate" label="计划结束日期" header-align="center" align="center" width="120"/>
<el-table-column prop="qcOperator" label="QC人员" header-align="center" align="center" width="100"/>
<el-table-column prop="inspectAddress" label="验货地址" header-align="center" align="left" min-width="150" show-overflow-tooltip/>
<el-table-column prop="inspectContract" label="联系人" header-align="center" align="center" width="100"/>
<el-table-column fixed="right" header-align="center" align="center" width="120" label="操作">
<template slot-scope="scope">
<a v-if="scope.row.statusDb === 'Scheduled'" class="customer-a" @click="startInspection(scope.row)">开始验货</a>
<a v-if="scope.row.statusDb === 'Inspecting'" class="customer-a" @click="goToIQCResult(scope.row)">跳转</a>
</template>
</el-table-column>
</el-table>
<!-- 分页插件 -->
<el-pagination
style="margin-top: 10px"
@size-change="sizeChangeHandle"
@current-change="currentChangeHandle"
:current-page="pageIndex"
:page-sizes="[20, 50, 100, 200, 500]"
:page-size="pageSize"
:total="totalPage"
layout="total, sizes, prev, pager, next, jumper">
</el-pagination>
</div>
</template>
<script>
import { getMyInspectionList, createIqc, startInspection } from '@/api/inspection/inspectionRequestHeader.js'
import { actionIQCInspection, qcIQCInspectionSearch } from '@/api/qc/qc.js'
export default {
components: {
},
name: 'MyInspectionList',
data () {
return {
height: 400,
loading: false,
dataList: [],
pageIndex: 1,
pageSize: 50,
totalPage: 0,
searchData: {
site: this.$store.state.user.site,
page: 1,
limit: 50,
statusDb: 'Scheduled,Inspecting'
}
}
},
mounted () {
this.$nextTick(() => {
this.height = window.innerHeight - 180
})
this.getList()
},
beforeDestroy () {
},
methods: {
handleRefresh () {
this.getList()
},
// 获取列表数据
getList () {
this.loading = true
this.searchData.page = this.pageIndex
this.searchData.limit = this.pageSize
getMyInspectionList(this.searchData).then(({ data }) => {
if (data.code === 0) {
this.dataList = data.page.list || []
this.pageIndex = data.page.currPage
this.pageSize = data.page.pageSize
this.totalPage = data.page.totalCount
} else {
this.$message.error((data && data.msg) || '获取列表失败')
}
this.loading = false
this.$nextTick(() => {
if (this.$refs.mainTable) {
this.$refs.mainTable.doLayout()
}
})
}).catch(() => {
this.loading = false
})
},
// 每页条数变化
sizeChangeHandle (val) {
this.pageSize = val
this.pageIndex = 1
this.getList()
},
// 当前页变化
currentChangeHandle (val) {
this.pageIndex = val
this.getList()
},
// 状态转换
getStatusText (statusDb) {
const statusMap = {
'Draft': '草稿',
'Confirmed': '已确认',
'Scheduled': '已排程',
'Audited': '已审核',
'Inspecting': '验货中',
'Completed': '已完成',
'Cancelled': '已取消'
}
return statusMap[statusDb] || statusDb || '-'
},
// 跳转到 IQCResultEntry 页面
goToIQCResult (row) {
// 使用检验单号进行跳转
const inspectionNo = row.inspectNo || ''
if (!inspectionNo) {
this.$message.warning('未找到检验单号')
return
}
this.$router.push({
name: 'qc-IQCResultEntry',
query: {
inspectionNo: inspectionNo
}
})
},
// 开始验货
startInspection (row) {
this.$confirm(`确认开始验货?\n申请单号:${row.requestNo}\n供应商:${row.supplierName}`, '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
// 构建创建IQC的参数
const iqcData = {
site: row.site,
requestNo: row.requestNo,
itemNo: row.itemNo
}
// 第一步:调用 createIqc 接口
createIqc(iqcData).then(({ data }) => {
if (data.code === 0) {
const inspectionNo = data.inspectionNo
this.$message.success('IQC检验单创建成功:' + inspectionNo)
// 第二步:createIqc 成功后,立即查询检验单并执行开始检验逻辑
const searchParams = {
site: row.site,
userName: this.$store.state.user.name,
inspectionNo: inspectionNo,
inspectionTypeNo: '105',
states: ['未开始', '待检验'],
page: 1,
limit: 1
}
qcIQCInspectionSearch(searchParams).then(({ data }) => {
if (data.code === 0 && data.page.list && data.page.list.length > 0) {
const iqcRecord = data.page.list[0]
// 调用开始检验接口,更新状态为"待检验"
const actionIQCData = {
site: iqcRecord.site,
buNo: iqcRecord.buNo,
inspectionNo: inspectionNo,
actionBy: this.$store.state.user.name,
state: '待检验',
equipmentList: []
}
actionIQCInspection(actionIQCData).then(({ data }) => {
if (data.code === 0) {
this.$message.success('开始检验成功')
} else {
this.$message.warning((data && data.msg) || '开始检验失败,但不影响后续操作')
}
// 第三步:执行原有的 startInspection 逻辑
const startInspectionData = {
requestNo: row.requestNo,
itemNo: row.itemNo
}
startInspection(startInspectionData).then(({ data }) => {
if (data.code === 0) {
this.$message.success('开始验货成功')
this.getList()
this.$router.push({
name: 'qc-IQCResultEntry',
query: {
inspectionNo: inspectionNo
}
})
} else {
this.$message.error((data && data.msg) || '开始验货失败')
}
}).catch((error) => {
this.$message.error('开始验货失败:' + error.message)
})
}).catch((error) => {
this.$message.warning('开始检验异常:' + error.message + ',继续执行后续操作')
// 即使开始检验失败,也继续执行 startInspection
const startInspectionData = {
requestNo: row.requestNo,
itemNo: row.itemNo
}
startInspection(startInspectionData).then(({ data }) => {
if (data.code === 0) {
this.$message.success('开始验货成功')
this.getList()
this.$router.push({
name: 'qc-IQCResultEntry',
query: {
inspectionNo: inspectionNo
}
})
} else {
this.$message.error((data && data.msg) || '开始验货失败')
}
}).catch((error) => {
this.$message.error('开始验货失败:' + error.message)
})
})
} else {
this.$message.warning('未找到检验单信息,将直接执行开始验货')
// 如果查询不到检验单,直接执行原有的 startInspection 逻辑
const startInspectionData = {
requestNo: row.requestNo,
itemNo: row.itemNo
}
startInspection(startInspectionData).then(({ data }) => {
if (data.code === 0) {
this.$message.success('开始验货成功')
this.getList()
this.$router.push({
name: 'qc-IQCResultEntry',
query: {
inspectionNo: inspectionNo
}
})
} else {
this.$message.error((data && data.msg) || '开始验货失败')
}
}).catch((error) => {
this.$message.error('开始验货失败:' + error.message)
})
}
}).catch((error) => {
this.$message.warning('查询检验单失败:' + error.message + ',将直接执行开始验货')
// 查询失败,直接执行原有的 startInspection 逻辑
const startInspectionData = {
requestNo: row.requestNo,
itemNo: row.itemNo
}
startInspection(startInspectionData).then(({ data }) => {
if (data.code === 0) {
this.$message.success('开始验货成功')
this.getList()
this.$router.push({
name: 'qc-IQCResultEntry',
query: {
inspectionNo: inspectionNo
}
})
} else {
this.$message.error((data && data.msg) || '开始验货失败')
}
}).catch((error) => {
this.$message.error('开始验货失败:' + error.message)
})
})
} else {
this.$message.error((data && data.msg) || '创建IQC检验单失败')
}
}).catch((error) => {
this.$message.error('创建IQC检验单失败:' + error.message)
})
}).catch(() => {
// 用户取消操作
})
}
}
}
</script>
<style scoped lang="scss">
.customer-css {
padding: 5px;
}
.toolbar {
margin-bottom: 8px;
}
</style>