前端页面优化

This commit is contained in:
杨学谦 2025-12-24 10:36:30 +08:00
parent 61631de3e7
commit d3e77e1375
4 changed files with 204 additions and 7 deletions

View File

@ -90,6 +90,15 @@ export const requestInventory = (params) => {
data: params
})
}
export const batchRequestInventory = (params) => {
return request({
url: '/task/batchRequestInventory',
method: 'post',
data: params
})
}
// 获取盘点信息
export const getInventoryConfirm = (params) => {
return request({

View File

@ -1,8 +1,8 @@
import axios from 'axios'
const request = axios.create({
//baseURL: 'http://172.18.222.253:12315/wms',
baseURL: 'http://localhost:12315/wms',
baseURL: 'http://172.18.222.253:12315/wms',
//baseURL: 'http://localhost:12315/wms',
timeout: 5000
})
// 172.18.222.253

View File

@ -69,9 +69,22 @@
:max-height="maxHeight" highlight-current-row @row-click="getCurrentRow" :row-style="rowStyle"
:header-cell-style="{ 'text-align': 'center' }" :cell-style="{ 'text-align': 'center' }"
@sort-change="handleSortChange">
<!-- 添加多选框列 -->
<el-table-column width="65px" fixed="left">
<template #header>
<el-checkbox
v-model="isSelectAll"
@change="handleSelectAllChange">
&nbsp;
</el-checkbox>
</template>
<template v-slot="scope">
<el-radio :label="scope.row.stockId" v-model="stockId">&nbsp;</el-radio>
<el-checkbox
:label="scope.row.stockId"
v-model="scope.row.checked"
@change="handleSelectionChange(scope.row)">
&nbsp;
</el-checkbox>
</template>
</el-table-column>
<!-- <el-table-column prop="stockId" label="库存编号" fixed="left" min-width="120px" sortable="custom"-->
@ -117,6 +130,55 @@
@current-change="search" layout="total, sizes, prev, pager, next, jumper"
:total="baseTableQuery.total" />
</div>
<!-- 批量盘点确认对话框 -->
<el-dialog
v-model="showBatchInventoryDialog"
title="确认批量盘点"
width="500px"
draggable
center>
<div class="dialog-content">
<el-alert
:title="`您确定要对以下 ${selectedRows.length} 条数据进行盘点操作吗?`"
type="warning"
show-icon
:closable="false" style="margin-bottom: 20px;">
</el-alert>
<div class="selected-summary">
<h4>选中数据概览</h4>
<div class="summary-item">
<span class="summary-label">料号种类</span>
<span>{{ [...new Set(selectedRows.map(item => item.goodsId))].length }} </span>
</div>
<div class="summary-item">
<span class="summary-label">箱号数量</span>
<span>{{ selectedRows.length }} </span>
</div>
</div>
<div class="selected-list">
<h4>选中数据详情</h4>
<el-table
:data="selectedRows.slice(0, 50)"
max-height="250"
size="small"
border>
<el-table-column prop="goodsId" label="料号" width="120" show-overflow-tooltip />
<el-table-column prop="vehicleId" label="箱号" width="120" show-overflow-tooltip />
<el-table-column prop="locationId" label="库位" width="100" show-overflow-tooltip />
<el-table-column prop="specialStock" label="特殊库存" width="100" show-overflow-tooltip />
</el-table>
</div>
</div>
<template #footer>
<div class="dialog-footer">
<el-button @click="showBatchInventoryDialog = false" size="default">取消</el-button>
<el-button type="primary" @click="confirmBatchInventory" size="default">确认盘点</el-button>
</div>
</template>
</el-dialog>
<!-- <el-dialog v-model="dialogVisible" title="库存信息" width="40%" draggable :show-close="false">
<el-form ref="stockFormRef" :model="stockFormEntity" :label-position="labelPosition"
label-width="100px" style="max-width: 100%" :rules="rules" status-icon>
@ -242,12 +304,18 @@ import { ElMessage } from 'element-plus'
import { genTableRequest, addAllOptionOfOptions } from '@/utils/generator.js'
import { labelPosition, shortcuts } from '@/constant/form'
import { stockStatusOptions, goodsStatusOptions } from '@/constant/options'
import {batchRequestInventory} from "@/api/task";
/**
* 常量定义
*/
/**
* 变量定义
*/
//
let selectedRows = ref([]) //
let isSelectAll = ref(false) //
let showBatchInventoryDialog = ref(false) //
let maxHeight = ref(window.innerHeight * 0.55)
let tableLoading = ref(false)
let displayStocks = ref([])
@ -294,6 +362,84 @@ const resizeHeight = () => {
/**
* 自定义方法
*/
//
const handleSelectionChange = (row) => {
if (row.checked) {
//
if (!selectedRows.value.some(item => item.stockId === row.stockId)) {
selectedRows.value.push(row)
}
} else {
//
selectedRows.value = selectedRows.value.filter(item => item.stockId !== row.stockId)
//
isSelectAll.value = false
}
}
//
const handleSelectAllChange = (val) => {
displayStocks.value.forEach(row => {
row.checked = val
})
if (val) {
//
selectedRows.value = [...displayStocks.value]
} else {
//
selectedRows.value = []
}
}
//
const handleBatchInventory = () => {
if (selectedRows.value.length === 0) {
ElMessage.warning('请至少选择一条记录')
return
}
showBatchInventoryDialog.value = true
}
//
const confirmBatchInventory = () => {
//
const requestData = {
invUser: store.getters.getUserName, // 使
invStand: store.getters.getStandId, // 使ID
items: selectedRows.value.map(row => ({
goodsId: row.goodsId,
vehicleId: row.vehicleId,
specialStock: row.specialStock,
specialStockNo: row.specialStockNo,
specialStockItemNo: row.specialStockItemNo,
batchNo: row.batchNo
}))
};
console.log('批量盘点数据:', requestData);
//
batchRequestInventory(requestData).then(res => {
if (res.data.code === 0) {
ElMessage.success('批量盘点成功');
showBatchInventoryDialog.value = false;
search(); //
//
selectedRows.value.forEach(row => {
row.checked = false;
});
selectedRows.value = [];
isSelectAll.value = false;
} else {
ElMessage.error(res.data.message);
}
}).catch(() => {
ElMessage.error('批量盘点失败');
});
};
//
const search = () => {
tableLoading.value = true
@ -594,4 +740,45 @@ const submitStockInfo = () => {
.my-autocomplete li .goods_name {
color: cornflowerblue;
}
/* 新增的弹窗样式 */
.dialog-content {
padding: 20px;
}
.selected-summary {
background-color: #f5f7fa;
border-radius: 4px;
padding: 15px;
margin-bottom: 20px;
}
.summary-item {
display: flex;
justify-content: space-between;
margin-bottom: 8px;
}
.summary-label {
font-weight: bold;
}
.selected-list h4 {
margin-bottom: 10px;
}
.more-info {
text-align: center;
color: #909399;
margin-top: 10px;
font-size: 14px;
}
.dialog-footer {
text-align: right;
padding: 20px 0 0;
}
.dialog-footer .el-button {
margin-left: 10px;
}
</style>

View File

@ -29,6 +29,7 @@ const routes = [
{path: '/pickTask', component: () => import('@/layout/pickTaskMonitor.vue')},// 拣选任务
{path: '/outsMonitor', component: () => import('@/layout/OutsMonitor.vue')},// 任务表单
{path: '/clcKanban', component: () => import('@/layout/clcKanban.vue')},// 需求看板
{path: '/batchInventory', component: () => import('@/layout/batchInventory.vue')},// 批量盘点
{path: '/stockCompare', component: () => import('@/layout/stockCompare.vue')},
{path: '/stockUpdateRecord', component: () => import('@/layout/stockUpdateRecord.vue')},// 库存更新记录
{path: '/roleUser', component: () => import('@/layout/role_user.vue')},// 角色——用户列表