Compare commits

..

2 Commits

Author SHA1 Message Date
zx
04824fae09 Merge branch 'main' of http://47.100.212.83:3000/yangzifeng/shzg_projectManage 2026-01-21 17:34:54 +08:00
zx
2bfc96dd4c 库存查询页面修改 2026-01-21 17:19:22 +08:00
3 changed files with 978 additions and 1736 deletions

View File

@@ -12,8 +12,8 @@ export function listBill(data) {
export function listStock(data) { export function listStock(data) {
return request({ return request({
url: '/wisdom/stock/list', url: '/wisdom/stock/list',
method: 'post', method: 'get',
data: data params: data
}) })
} }

View File

@@ -1,375 +1,322 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<el-form :model="queryParams" ref="queryRef" v-show="showSearch" label-width="90"> <el-form :model="queryParams" ref="queryRef" v-show="showSearch" label-width="90">
<el-row > <el-row>
<el-col :span="6"> <el-col :span="6">
<el-form-item label="项目号" prop="xmNo"> <el-form-item label="项目号" prop="xmNo">
<el-input <el-input v-model="queryParams.xmNo" placeholder="请输入项目号" clearable @keyup.enter="handleQuery" />
v-model="queryParams.xmNo" </el-form-item>
placeholder="请输入项目号" </el-col>
clearable <el-col :span="6">
@keyup.enter="handleQuery" <el-form-item label="订单编号" prop="sapNo">
/> <el-input v-model="queryParams.sapNo" placeholder="请输入订单编号" clearable @keyup.enter="handleQuery" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="6"> <el-col :span="6">
<el-form-item label="订单编号" prop="sapNo"> <el-form-item label="单据号" prop="billNo">
<el-input <el-input v-model="queryParams.billNo" placeholder="请输入单据号" clearable @keyup.enter="handleQuery" />
v-model="queryParams.sapNo" </el-form-item>
placeholder="请输入订单编号" </el-col>
clearable <el-col :span="6">
@keyup.enter="handleQuery" <el-form-item label="库存状态" prop="isChuku">
/> <el-select v-model="queryParams.isChuku" placeholder="请选择" clearable>
</el-form-item> <el-option v-for="dict in storeStatusList" :key="dict.id" :label="dict.statusName" :value="dict.id" />
</el-col> </el-select>
<el-col :span="6"> </el-form-item>
<el-form-item label="单据号" prop="billNo"> </el-col>
<el-input </el-row>
v-model="queryParams.billNo" <el-row>
placeholder="请输入单据号" <el-col :span="6">
clearable <el-form-item label="物料号" prop="wlNo">
@keyup.enter="handleQuery" <el-input v-model="queryParams.wlNo" placeholder="请输入物料号" clearable @keyup.enter="handleQuery" />
/> </el-form-item>
</el-form-item> </el-col>
</el-col> <el-col :span="6">
<el-col :span="6"> <el-form-item label="项目描述" prop="xmMs">
<el-form-item label="库存状态" prop="isChuku"> <el-input v-model="queryParams.xmMs" placeholder="请输入项目描述" clearable @keyup.enter="handleQuery" />
<el-select v-model="queryParams.isChuku" placeholder="请选择" clearable> </el-form-item>
<el-option v-for="dict in storeStatusList" :key="dict.id" :label="dict.statusName" :value="dict.id" /> </el-col>
</el-select> <el-col :span="6">
</el-form-item> <el-form-item label="存放位置" prop="pcode">
</el-col> <el-input v-model="queryParams.pcode" placeholder="请输入存放位置" clearable @keyup.enter="handleQuery" />
</el-row>
<el-row >
<el-col :span="6">
<el-form-item label="物料号" prop="wlNo">
<el-input
v-model="queryParams.wlNo"
placeholder="请输入物料号"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="项目描述" prop="xmMs">
<el-input
v-model="queryParams.xmMs"
placeholder="请输入项目描述"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="存放位置" prop="pcode">
<el-input
v-model="queryParams.pcode"
placeholder="请输入存放位置"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="6"> <el-col :span="6">
<el-form-item label="入库类型" prop="operationTypeRK"> <el-form-item label="入库类型" prop="operationTypeRK">
<el-select v-model="operationTypeRK" placeholder="请选择入库类型" clearable @change="changeOperationType($event,'operationTypeRK')" > <el-select v-model="operationTypeRK" placeholder="请选择入库类型" clearable
<el-option v-for="dict in storeTypeList" :key="dict.id" :label="dict.typeName" :value="dict.typeCode" /> @change="changeOperationType($event, 'operationTypeRK')">
</el-select> <el-option v-for="dict in storeTypeList" :key="dict.id" :label="dict.typeName" :value="dict.typeCode" />
</el-form-item> </el-select>
</el-col> </el-form-item>
</el-row> </el-col>
<el-row> </el-row>
<el-col :span="6"> <el-row>
<el-form-item label="所属仓库" prop="warehouseCode"> <el-col :span="6">
<el-cascader <el-form-item label="所属仓库" prop="warehouseCode">
v-model="warehouseCode" <el-cascader v-model="warehouseCode" :options="warehouseOptions" placeholder="请选择所属仓库" style="width: 100%;"
:options="warehouseOptions" :props="{ children: 'children', label: 'warehouseName', value: 'warehouseCode' }" />
placeholder="请选择所属仓库" </el-form-item>
style="width: 100%;" </el-col>
:props="{children: 'children', label: 'warehouseName', value: 'warehouseCode'}" <el-col :span="6">
/> <el-form-item label="物料描述" prop="wlMs">
</el-form-item> <el-input v-model="queryParams.wlMs" placeholder="请输入物料描述" clearable @keyup.enter="handleQuery" />
</el-col> </el-form-item>
<el-col :span="6"> </el-col>
<el-form-item label="物料描述" prop="wlMs"> <el-col :span="6">
<el-input <el-form-item label="供应商名称" prop="gysMc">
v-model="queryParams.wlMs" <el-input v-model="queryParams.gysMc" placeholder="请输入供应商名称" clearable @keyup.enter="handleQuery" />
placeholder="请输入物料描述" </el-form-item>
clearable </el-col>
@keyup.enter="handleQuery" <el-col :span="6">
/> <el-form-item label="出库类型" prop="operationTypeCK">
</el-form-item> <el-select v-model="operationTypeCK" placeholder="请选择出库类型"
</el-col> @change="changeOperationType($event, 'operationTypeCK')" clearable>
<el-col :span="6"> <el-option v-for="dict in ckTypeList" :key="dict.id" :label="dict.typeName" :value="dict.typeCode" />
<el-form-item label="供应商名称" prop="gysMc"> </el-select>
<el-input </el-form-item>
v-model="queryParams.gysMc" </el-col>
placeholder="请输入供应商名称"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="出库类型" prop="operationTypeCK">
<el-select v-model="operationTypeCK" placeholder="请选择出库类型" @change="changeOperationType($event,'operationTypeCK')" clearable >
<el-option v-for="dict in ckTypeList" :key="dict.id" :label="dict.typeName" :value="dict.typeCode" />
</el-select>
</el-form-item>
</el-col>
</el-row> </el-row>
<el-row> <el-row>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="操作时间" prop="rkTime"> <el-form-item label="操作时间" prop="optionTime">
<el-date-picker <el-date-picker v-model="optionTime" type="datetimerange" start-placeholder="开始时间" end-placeholder="结束时间"
v-model="optionTime" format="YYYY/MM/DD HH:mm:ss" value-format="YYYY-MM-DD HH:mm:ss" />
type="datetimerange" </el-form-item>
start-placeholder="开始时间" </el-col>
end-placeholder="结束时间" <el-col :span="12" class="searchBtn">
format="YYYY/MM/DD HH:mm:ss" <el-form-item>
value-format="YYYY-MM-DD HH:mm:ss" <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
/> <el-button icon="Refresh" @click="resetQuery">重置</el-button>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12" class="searchBtn"> </el-row>
<el-form-item> </el-form>
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button> <el-row :gutter="10" class="mb8">
<el-button icon="Refresh" @click="resetQuery">重置</el-button> <el-col :span="1.5">
</el-form-item> <el-button type="primary" plain icon="Download" @click="handleExport"
</el-col> v-hasPermi="['wisdom:stock:export']">导出</el-button>
</el-row> </el-col>
</el-form> <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
<el-row :gutter="10" class="mb8"> </el-row>
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="Download"
@click="handleExport"
v-hasPermi="['wisdom:stock:export']"
>导出</el-button>
</el-col>
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="stockList" show-overflow-tooltip border > <el-table v-loading="loading" :data="stockList" show-overflow-tooltip border :row-class-name="tableBillRowClassName">
<el-table-column label="序号" align="center" type="index" width="70" /> <el-table-column label="序号" align="center" type="index" width="70" />
<el-table-column label="操作类型" align="center" prop="bizType" width="100"> <el-table-column label="操作类型" align="center" prop="bizType" width="100">
<template #default="scope"> <template #default="scope">
<dict-tag :options="dictTagData()" :value="scope.row.bizType" /> <dict-tag :options="dictTagData()" :value="scope.row.bizType" />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="详细类型" align="center" prop="operationTypeName" width="150"/> <el-table-column label="详细类型" align="center" prop="operationTypeName" width="150" />
<el-table-column label="单据号" align="center" prop="billNo" width="180" /> <el-table-column label="单据号" align="center" prop="billNo" width="180" />
<el-table-column label="物料号" align="center" prop="wlNo" width="100"/> <el-table-column label="物料号" align="center" prop="wlNo" width="100" />
<el-table-column label="物料描述" align="center" prop="wlMs" width="150"/> <el-table-column label="物料描述" align="center" prop="wlMs" width="150" />
<el-table-column label="单位" align="center" prop="dw" /> <el-table-column label="单位" align="center" prop="dw" />
<el-table-column label="数量" align="center" prop="realQty" width="120"/> <el-table-column label="数量" align="center" prop="realQty" width="120" />
<el-table-column label="项目号" align="center" prop="xmNo" width="150"/> <el-table-column label="项目号" align="center" prop="xmNo" width="150" />
<el-table-column label="项目描述" align="center" prop="xmMs" width="150"/> <el-table-column label="项目描述" align="center" prop="xmMs" width="150" />
<el-table-column label="库位码" align="center" prop="pcode" width="120"/> <el-table-column label="库位码" align="center" prop="pcode" width="120" />
<el-table-column label="所属大库" align="center" prop="parentWarehouseName" width="120"/> <el-table-column label="所属大库" align="center" prop="parentWarehouseName" width="120" />
<el-table-column label="所属小库" align="center" prop="warehouseName" width="120"/> <el-table-column label="所属小库" align="center" prop="warehouseName" width="120" />
<el-table-column label="订单编号" align="center" prop="sapNo" width="150"/> <el-table-column label="订单编号" align="center" prop="sapNo" width="150" />
<el-table-column label="供应商名称" align="center" prop="gysMc" width="150"/> <el-table-column label="供应商名称" align="center" prop="gysMc" width="150" />
<el-table-column label="理货员" align="center" prop="operatorName" width="150"/> <el-table-column label="理货员" align="center" prop="operatorName" width="150" />
<el-table-column label="操作时间" align="center" prop="operationTime" width="200"/> <el-table-column label="操作时间" align="center" prop="operationTime" width="200" />
</el-table> </el-table>
<pagination <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum"
v-show="total>0" v-model:limit="queryParams.pageSize" @pagination="getList" />
:total="total"
v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize"
@pagination="getList"
/>
<!-- 图片预览 --> <!-- 图片预览 -->
<el-dialog v-model="dialogVisible"> <el-dialog v-model="dialogVisible">
<img w-full :src="dialogImageUrl" alt="Preview Image" /> <img w-full :src="dialogImageUrl" alt="Preview Image" />
</el-dialog> </el-dialog>
</div> </div>
</template> </template>
<script setup name="Record"> <script setup name="Record">
import { listStock} from "@/api/wisdom/record"; import { listStock } from "@/api/wisdom/record";
import {listOuttype} from "@/api/information/outtype"; //出库类型 import { listOuttype } from "@/api/information/outtype"; //出库类型
import {warehouseAll} from "@/api/information/warehouseinfo"; //所属仓库 import { warehouseAll } from "@/api/information/warehouseinfo"; //所属仓库
import {materialtypeDict} from "@/api/information/materialtype"; //物资类型 import { materialtypeDict } from "@/api/information/materialtype"; //物资类型
import {warehousingDict} from "@/api/information/warehousingtype"; //入库类型 import { warehousingDict } from "@/api/information/warehousingtype"; //入库类型
import { parseTime } from '@/utils/manage'; import { parseTime } from '@/utils/manage';
const { proxy } = getCurrentInstance(); const { proxy } = getCurrentInstance();
const total = ref(0); const total = ref(0);
const loading = ref(true); const loading = ref(true);
const showSearch = ref(true); const showSearch = ref(true);
const dialogVisible = ref(false); const dialogVisible = ref(false);
const dialogImageUrl = ref(''); const dialogImageUrl = ref('');
const optionTime = ref([]); const optionTime = ref([]);
const storeStatusList = ref([ const storeStatusList = ref([
{id:'0',statusName:"已入库"}, { id: '0', statusName: "已入库" },
{id:'1',statusName:"已出库"} { id: '1', statusName: "已出库" }
])//库存状态 ])//库存状态
const isChukuList = ref([ const isChukuList = ref([
{ value: '0', label: '入库', elTagType: "success", elTagClass: null }, { value: '0', label: '入库', elTagType: "success", elTagClass: null },
{ value: '1', label: '借料出库', elTagType: "warning", elTagClass: null }, { value: '1', label: '借料出库', elTagType: "warning", elTagClass: null },
{ value: '3', label: '还料入库', elTagType: "warning", elTagClass: null }, { value: '3', label: '还料入库', elTagType: "warning", elTagClass: null },
]) ])
const data = reactive({ const data = reactive({
form: {}, form: {},
queryParams: { queryParams: {
pageNum: 1, pageNum: 1,
pageSize: 10, pageSize: 10,
billNo:null, billNo: null,
isChuku:null, isChuku: null,
startTime:null, startTime: null,
endTime:null, endTime: null,
xmNo: null, xmNo: null,
sapNo: null, sapNo: null,
xmMs:"", xmMs: "",
wlNo:"", wlNo: "",
gysNo:"", gysNo: "",
pcode:"", pcode: "",
gysMc:"", gysMc: "",
cangku:"", cangku: "",
wlMs:"", wlMs: "",
ids:[], ids: [],
parentWarehouseCode:"", },
warehouseCode:"", });
} ,
const { queryParams } = toRefs(data);
//出库类型入库类型改变
const operationTypeRK = ref([]) //入库类型
const operationTypeCK = ref([]) //出库类型
function changeOperationType(val, name) {
if (name == 'operationTypeRK') {
operationTypeRK.value = val
operationTypeCK.value = ''
} else if (name == 'operationTypeCK') {
operationTypeCK.value = val
operationTypeRK.value = ''
}
}
//查询库存单据主列表
const stockList = ref([]);
function getList() {
loading.value = true;
listStock(queryParams.value).then(response => {
stockList.value = response.rows
total.value = response.total;
loading.value = false;
}); });
}
const { queryParams } = toRefs(data); //获取所属仓库下拉
const warehouseOptions = ref([]); //仓库下拉数据
const warehouseCode = ref([]); //所属仓库下拉数据
function warehouseFun() {
//所属仓库下拉数据
// warehouseDict().then(response=>{
// warehouseList.value = response.data
// })
warehouseAll().then(response => {
warehouseOptions.value = response.data
})
//出库类型入库类型改变 }
const operationTypeRK = ref([]) //入库类型
const operationTypeCK = ref([]) //出库类型
function changeOperationType (val,name){
if(name == 'operationTypeRK'){
operationTypeRK.value =val
operationTypeCK.value = ''
}else if(name == 'operationTypeCK'){
operationTypeCK.value = val
operationTypeRK.value = ''
}
}
//查询库存单据主列表 //获取物资类型下拉
const stockList = ref([]); const wzTypeList = ref([]); //物资类型下拉数据
function getList() { function materialFun() {
loading.value = true; //获取物资类型下拉数据
listStock(queryParams.value).then(response => { materialtypeDict().then(response => {
stockList.value = response.rows wzTypeList.value = response.data
total.value = response.total; })
loading.value = false; }
});
}
//获取所属仓库下拉 //获取出入库类型下拉
const warehouseOptions = ref([]); //仓库下拉数据 const ckTypeList = ref([]); //出库类型下拉数据
const warehouseCode = ref([]); //所属仓库下拉数据 const storeTypeList = ref([]); //入库类型下拉数据
function warehouseFun(){ function rklxList() {
//所属仓库下拉数据 //获取入库类型下拉数据
// warehouseDict().then(response=>{ warehousingDict().then(response => {
// warehouseList.value = response.data storeTypeList.value = response.data
// }) })
warehouseAll().then(response=>{ //获取出库类型下拉数据
warehouseOptions.value = response.data listOuttype({ pageNum: 1, pageSize: 50 }).then(response => {
}) ckTypeList.value = response.rows
})
}
} //导出按钮操作
function handleExport() {
// wisdom/stock/export
let obj = JSON.parse(JSON.stringify(queryParams.value))
delete obj.pageNum
delete obj.pageSize
proxy.download('wisdom/record/export', {
...obj
}, `出入库记录_${parseTime(new Date().getTime(), '{y}年{m}月{d}日 {h}_{i}_{s}')}.xlsx`)
}
//获取物资类型下拉 //搜索按钮操作
const wzTypeList = ref([]); //物资类型下拉数据 function handleQuery() {
function materialFun(){
//获取物资类型下拉数据
materialtypeDict().then(response=>{
wzTypeList.value = response.data
})
}
//获取出入库类型下拉
const ckTypeList = ref([]); //出库类型下拉数据
const storeTypeList = ref([]); //入库类型下拉数据
function rklxList(){
//获取入库类型下拉数据
warehousingDict().then(response=>{
storeTypeList.value = response.data
})
//获取出库类型下拉数据
listOuttype({pageNum:1,pageSize:50}).then(response=>{
ckTypeList.value = response.rows
})
}
//导出按钮操作
function handleExport() {
// wisdom/stock/export
let obj = JSON.parse(JSON.stringify(queryParams.value))
delete obj.pageNum
delete obj.pageSize
proxy.download('wisdom/record/export', {
...obj
}, `出入库记录_${parseTime(new Date().getTime(), '{y}年{m}月{d}日 {h}_{i}_{s}')}.xlsx`)
}
//搜索按钮操作
function handleQuery() {
//所属仓库
if(warehouseCode.value){
queryParams.value.cangku = warehouseCode.value[1]
}
//详细类型
if(operationTypeCK.value || operationTypeRK.value){
queryParams.value.operationType = operationTypeRK.value || operationTypeCK.value
}
//操作时间
if(optionTime.value && optionTime.value.length>0){
queryParams.value.startDate = optionTime.value[0]
queryParams.value.endDate = optionTime.value[1]
}else{
queryParams.value.startDate = ""
queryParams.value.endDate = ""
}
queryParams.value.pageNum = 1;
getList();
}
// 重置按钮操作
function resetQuery() {
proxy.resetForm("queryRef");
optionTime.value = []
operationTypeCK.value=''
operationTypeRK.value=''
warehouseCode.value=''
queryParams.value.parentWarehouseCode = null
queryParams.value.warehouseCode = null
queryParams.value.operationType = ''
queryParams.value.cangku =''
handleQuery();
}
//数据列表
getList();
//所属仓库 //所属仓库
warehouseFun() console.log(warehouseCode.value, optionTime, '====');
//物资类型 if (warehouseCode.value) {
materialFun() queryParams.value.cangku = warehouseCode.value[1]
//出、入库类型下拉数据 }
rklxList() //详细类型
if (operationTypeCK.value || operationTypeRK.value) {
queryParams.value.operationType = operationTypeRK.value || operationTypeCK.value
}
//操作时间
if (optionTime.value && optionTime.value.length > 0) {
queryParams.value.startDate = optionTime.value[0]
queryParams.value.endDate = optionTime.value[1]
} else {
queryParams.value.startDate = ""
queryParams.value.endDate = ""
}
queryParams.value.pageNum = 1;
getList();
}
// 重置按钮操作
function resetQuery() {
proxy.resetForm("queryRef");
optionTime.value = []
operationTypeCK.value = ''
operationTypeRK.value = ''
warehouseCode.value = ''
queryParams.value.operationType = ''
queryParams.value.cangku = ''
handleQuery();
}
//数据列表
getList();
//所属仓库
warehouseFun()
//物资类型
materialFun()
//出、入库类型下拉数据
rklxList()
// 显示预出库的状态
const tableBillRowClassName = ({ row, rowIndex }) => {
console.log('row===>',row);
if (row.execStatus == 0) {
return 'success-row'
}
return ''
}
const dictTagData = () => { const dictTagData = () => {
return isChukuList.value.map(item => ({ return isChukuList.value.map(item => ({
@@ -377,12 +324,21 @@ const dictTagData = () => {
value: String(item.value) value: String(item.value)
})); }));
} }
</script> </script>
<style scoped> <style scoped>
.searchBtn{ :deep(.el-table .success-row) {
display: flex; background-color: #f8fdf5 !important;
justify-content: flex-end; }
} .el-table {
</style> /* 核心:把 hover 背景色设为和默认行背景色一致 */
--el-table-row-hover-bg-color: transparent;
/* 或设为和表格背景色相同(比如白色),更通用 */
/* --el-table-row-hover-bg-color: #ffffff; */
}
.searchBtn {
display: flex;
justify-content: flex-end;
}
</style>

File diff suppressed because it is too large Load Diff