<template>
|
<div class="app-container">
|
<el-card class="search-card" shadow="never">
|
<el-form :model="searchForm" :inline="true">
|
<el-form-item label="采购订单号:">
|
<el-input v-model="searchForm.orderNo" placeholder="请输入订单号" clearable />
|
</el-form-item>
|
<el-form-item label="供应商名称:">
|
<el-input v-model="searchForm.supplierName" placeholder="请输入供应商名称" clearable />
|
</el-form-item>
|
<el-form-item>
|
<el-button type="primary" @click="handleSearch">搜索</el-button>
|
<el-button @click="resetSearch">重置</el-button>
|
</el-form-item>
|
</el-form>
|
</el-card>
|
|
<el-card class="table-card" shadow="never">
|
<div class="table-header">
|
<el-button type="primary" @click="openDialog('add')">新增到货</el-button>
|
<el-button type="danger" @click="handleBatchDelete">批量删除</el-button>
|
</div>
|
|
<el-table :data="tableData" border v-loading="loading" @selection-change="handleSelectionChange">
|
<el-table-column type="selection" width="55" align="center" />
|
<el-table-column label="到货单号" prop="arrivalNo" width="180" />
|
<el-table-column label="采购订单号" prop="orderNo" width="180" />
|
<el-table-column label="供应商名称" prop="supplierName" />
|
<el-table-column label="到货状态" prop="status" width="100">
|
<template #default="{ row }">
|
<el-tag :type="getStatusType(row.status)">{{ getStatusText(row.status) }}</el-tag>
|
</template>
|
</el-table-column>
|
<el-table-column label="到货数量" prop="arrivalQuantity" width="100" />
|
<el-table-column label="到货时间" prop="arrivalTime" width="180" />
|
<el-table-column label="操作" width="200" align="center">
|
<template #default="{ row }">
|
<el-button type="primary" link @click="openDialog('edit', row)">编辑</el-button>
|
<el-button type="success" v-if="row.status === 'pending'" link @click="handleReceive(row)">收货</el-button>
|
<el-button type="danger" link @click="handleDelete(row)">删除</el-button>
|
</template>
|
</el-table-column>
|
</el-table>
|
<!-- 分页 -->
|
<pagination
|
:total="total"
|
layout="total, sizes, prev, pager, next, jumper"
|
:page="pagination.current"
|
:limit="pagination.size"
|
@pagination="handleCurrentChange"
|
/>
|
</el-card>
|
|
<el-dialog v-model="dialogVisible" :title="dialogType === 'add' ? '新增到货' : '编辑到货'" width="600px">
|
<el-form :model="formData" label-width="120px">
|
<el-form-item label="到货单号">
|
<el-input v-model="formData.arrivalNo" placeholder="到货单号" />
|
</el-form-item>
|
<el-form-item label="采购订单号">
|
<el-input v-model="formData.orderNo" placeholder="采购订单号" />
|
</el-form-item>
|
<el-form-item label="供应商名称">
|
<el-input v-model="formData.supplierName" placeholder="供应商名称" />
|
</el-form-item>
|
<el-form-item label="到货数量">
|
<el-input-number :min="0" v-model="formData.arrivalQuantity" placeholder="到货数量" />
|
</el-form-item>
|
<el-form-item label="备注">
|
<el-input v-model="formData.remark" type="textarea" :rows="3" placeholder="请输入备注信息" />
|
</el-form-item>
|
</el-form>
|
<template #footer>
|
<el-button @click="dialogVisible = false">取消</el-button>
|
<el-button type="primary" @click="handleSubmit">确定</el-button>
|
</template>
|
</el-dialog>
|
</div>
|
</template>
|
|
<script setup>
|
import { ref, reactive,onMounted } from 'vue'
|
import { ElMessage, ElMessageBox } from 'element-plus'
|
import {listPage,add,update,del} from "@/api/procurementManagement/arrivalManagement.js"
|
import Pagination from '@/components/PIMTable/Pagination.vue'
|
|
onMounted(() => {
|
getList()
|
})
|
|
const tableData = ref([])
|
|
const getList = () => {
|
loading.value = true
|
listPage({...searchForm,...pagination}).then(res =>{
|
if(res.code === 200){
|
tableData.value = res.data.records
|
total.value = res.data.total
|
loading.value = false
|
}
|
})
|
}
|
|
const pagination = reactive({
|
current: 1,
|
size: 10
|
})
|
|
const total = ref(0)
|
|
const handleCurrentChange = (val) => {
|
pagination.current = val.page
|
pagination.size = val.limit
|
getList()
|
}
|
|
const loading = ref(false)
|
const dialogVisible = ref(false)
|
const dialogType = ref('add')
|
const selectedRows = ref([])
|
|
const searchForm = reactive({
|
orderNo: '',
|
supplierName: ''
|
})
|
|
const formData = reactive({
|
arrivalNo: '',
|
arrivalQuantity: 0,
|
orderNo: '',
|
supplierName: '',
|
remark: '',
|
status: 'pending'
|
})
|
|
const getStatusType = (status) => {
|
const statusMap = { pending: 'warning', received: 'success', stored: 'info' }
|
return statusMap[status] || 'info'
|
}
|
|
const getStatusText = (status) => {
|
const statusMap = { pending: '待收货', received: '已收货', stored: '已入库' }
|
return statusMap[status] || '未知'
|
}
|
|
const handleSearch = () => {
|
loading.value = true
|
getList()
|
}
|
|
const resetSearch = () => {
|
Object.assign(searchForm, { orderNo: '', supplierName: '' })
|
}
|
|
const openDialog = (type, row = {}) => {
|
dialogType.value = type
|
if (type === 'edit' && row.id) {
|
obj.id = row.id
|
Object.assign(formData, { orderNo: row.orderNo, supplierName: row.supplierName, remark: row.remark, arrivalQuantity: row.arrivalQuantity,arrivalNo: row.arrivalNo })
|
} else {
|
Object.assign(formData, { orderNo: '', supplierName: '', remark: '',arrivalQuantity: 0,arrivalNo: '' })
|
}
|
dialogVisible.value = true
|
}
|
|
const obj = reactive({
|
id:''
|
})
|
|
const handleSubmit = () => {
|
if (dialogType.value === 'add') {
|
add(formData).then(res => {
|
if(res.code === 200){
|
ElMessage.success('新增成功')
|
getList()
|
}
|
})
|
}else{
|
update({...formData, ...obj}).then(res => {
|
if(res.code === 200){
|
ElMessage.success('编辑成功')
|
getList()
|
}
|
})
|
}
|
dialogVisible.value = false
|
}
|
|
const handleReceive = (row) => {
|
row.status = 'received'
|
update(row).then(res => {
|
if(res.code === 200){
|
ElMessage.success('收货成功')
|
getList()
|
}
|
})
|
}
|
|
const handleDelete = (row) => {
|
ElMessageBox.confirm('确定要删除这条记录吗?', '提示', {
|
confirmButtonText: '确定',
|
cancelButtonText: '取消',
|
type: 'warning'
|
}).then(() => {
|
let ids = [row.id]
|
del(ids).then(res => {
|
if(res.code === 200){
|
ElMessage.success('删除成功')
|
getList()
|
}
|
})
|
})
|
}
|
|
const handleBatchDelete = () => {
|
ElMessageBox.confirm('确定要删除选中的记录吗?', '提示', {
|
confirmButtonText: '确定',
|
cancelButtonText: '取消',
|
type: 'warning'
|
}).then(() => {
|
let ids = selectedRows.value.map(item => item.id)
|
del(ids).then(res => {
|
if(res.code === 200){
|
ElMessage.success('删除成功')
|
getList()
|
}
|
})
|
})
|
}
|
|
const handleSelectionChange = (rows) => {
|
selectedRows.value = rows
|
}
|
</script>
|
|
<style scoped>
|
.app-container { padding: 20px; }
|
.search-card { margin-bottom: 20px; }
|
.table-card { margin-bottom: 20px; }
|
.table-header { margin-bottom: 20px; }
|
</style>
|