HashMap 2d47349f24 fix (view): 修复了库存管理中手动添加缺失的问题
隐藏了出入库的手动增删改功能
2025-08-12 10:15:21 +08:00

357 lines
12 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="存货" prop="materialName">
<el-input
v-model="queryParams.materialName"
placeholder="请输入存货"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="生产日期" prop="productionDate">
<el-input
v-model="queryParams.productionDate"
placeholder="请输入生产日期"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="Plus"
@click="handleAdd"
v-hasPermi="['stock:management:add']"
>新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="success"
plain
icon="Edit"
:disabled="single"
@click="handleUpdate"
v-hasPermi="['stock:management:edit']"
>修改</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="danger"
plain
icon="Delete"
:disabled="multiple"
@click="handleDelete"
v-hasPermi="['stock:management:remove']"
>删除</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="warning"
plain
icon="Download"
@click="handleExport"
v-hasPermi="['stock:management:export']"
>导出</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="info" plain icon="Upload" @click="handleImport" v-hasPermi="['stock:management:import']">导入</el-button>
</el-col>
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="managementList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="序号" align="center" prop="materialManagementCode" />
<el-table-column label="存货编码" align="center" prop="materialId" />
<el-table-column label="存货" align="center" prop="materialName" />
<el-table-column label="批号" align="center" prop="batchId" />
<el-table-column label="规格型号" align="center" prop="materialSpecification" />
<el-table-column label="主计量" align="center" prop="materialUnit" />
<el-table-column label="现存量(主)" align="center" prop="currentStock" />
<el-table-column label="库存预警" align="center" prop="stockAlarm" />
<el-table-column label="生产日期" align="center" prop="productionDate" />
<el-table-column label="失效日期" align="center" prop="expirationDate" />
<el-table-column label="失效预警" align="center" prop="expirationAlarm" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template #default="scope">
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['stock:management:edit']">修改</el-button>
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['stock:management:remove']">删除</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total>0"
:total="total"
v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize"
@pagination="getList"
/>
<!-- 添加或修改饲喂计划对话框 -->
<el-dialog :title="title" v-model="open" width="500px" append-to-body>
<el-form ref="managementRef" :model="form" :rules="rules" label-width="80px">
<el-form-item label="存货编码" prop="materialId">
<el-input v-model="form.materialId" placeholder="请输入存货编码" />
</el-form-item>
<el-form-item label="存货" prop="materialName">
<el-input v-model="form.materialName" placeholder="请输入存货名称" />
</el-form-item>
<el-form-item label="批号" prop="batchId">
<el-input v-model="form.batchId" placeholder="请输入批号" />
</el-form-item>
<el-form-item label="规格型号" prop="materialSpecification">
<el-input v-model="form.materialSpecification" placeholder="请输入规格型号" />
</el-form-item>
<el-form-item label="主计量" prop="materialUnit">
<el-input v-model="form.materialUnit" placeholder="请输入计量单位" />
</el-form-item>
<el-form-item label="现存量" prop="currentStock">
<el-input v-model="form.currentStock" placeholder="请输入现存量" />
</el-form-item>
<el-form-item label="生产日期" prop="productionDate">
<el-date-picker clearable
v-model="form.productionDate"
type="date"
value-format="YYYY-MM-DD"
placeholder="请选择生产日期">
</el-date-picker>
</el-form-item>
<el-form-item label="失效日期" prop="expirationDate">
<el-date-picker clearable
v-model="form.expirationDate"
type="date"
value-format="YYYY-MM-DD"
placeholder="请选择失效日期">
</el-date-picker>
</el-form-item>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</template>
</el-dialog>
<!-- 物资管理记录导入对话框 -->
<el-dialog :title="upload.title" v-model="upload.open" width="400px" append-to-body>
<el-upload ref="uploadRef" :limit="1" accept=".xlsx, .xls" :headers="upload.headers"
:action="upload.url + '?updateSupport=' + upload.updateSupport" :disabled="upload.isUploading"
:on-progress="handleFileUploadProgress" :on-success="handleFileSuccess" :auto-upload="false" drag>
<el-icon class="el-icon--upload"><upload-filled /></el-icon>
<div class="el-upload__text">将文件拖到此处<em>点击上传</em></div>
<template #tip>
<div class="el-upload__tip text-center">
<span>仅允许导入xlsxlsx格式文件</span>
<el-link type="primary" :underline="false" style="font-size: 12px; vertical-align: baseline"
@click="importTemplate">下载模板</el-link>
</div>
</template>
</el-upload>
<template #footer>
<div class="dialog-footer">
<el-button type="primary" @click="submitFileForm"> </el-button>
<el-button @click="upload.open = false"> </el-button>
</div>
</template>
</el-dialog>
</div>
</template>
<script setup name="Management">
import { listManagement, getManagement, delManagement, addManagement, updateManagement } from "@/api/stock/management"
import { getToken } from "@/utils/auth"
const { proxy } = getCurrentInstance()
const managementList = ref([])
const open = ref(false)
const loading = ref(true)
const showSearch = ref(true)
const ids = ref([])
const single = ref(true)
const multiple = ref(true)
const total = ref(0)
const title = ref("")
const data = reactive({
form: {},
queryParams: {
pageNum: 1,
pageSize: 10,
materialName: null,
productionDate: null,
},
rules: {
materialId: [
{ required: true, message: "存货编码不能为空", trigger: "blur" }
],
materialName: [
{ required: true, message: "存货不能为空", trigger: "blur" }
],
}
})
/*** 用户导入参数 */
const upload = reactive({
// 是否显示弹出层(用户导入)
open: false,
// 弹出层标题(用户导入)
title: "",
// 是否禁用上传
isUploading: false,
// 是否更新已经存在的用户数据
updateSupport: 0,
// 设置上传的请求头部
headers: { Authorization: "Bearer " + getToken() },
// 上传的地址
url: import.meta.env.VITE_APP_BASE_API + "/stock/management/importData"
})
/** 导入按钮操作 */
function handleImport() {
upload.title = "物资记录导入"
upload.open = true
}
/** 提交上传文件 */
function submitFileForm() {
proxy.$refs["uploadRef"].submit()
}
/**文件上传中处理 */
const handleFileUploadProgress = (event, file, fileList) => {
upload.isUploading = true
}
/** 文件上传成功处理 */
const handleFileSuccess = (response, file, fileList) => {
upload.open = false
upload.isUploading = false
proxy.$refs["uploadRef"].handleRemove(file)
proxy.$alert("<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" + response.msg + "</div>", "导入结果", { dangerouslyUseHTMLString: true })
getList()
}
const { queryParams, form, rules } = toRefs(data)
/** 查询物资管理列表 */
function getList() {
loading.value = true
listManagement(queryParams.value).then(response => {
managementList.value = response.rows
total.value = response.total
loading.value = false
})
}
// 取消按钮
function cancel() {
open.value = false
reset()
}
// 表单重置
function reset() {
form.value = {
materialManagementCode: null,
materialId: null,
materialName: null,
batchId: null,
materialSpecification: null,
materialUnit: null,
currentStock: null,
stockAlarm: null,
productionDate: null,
expirationDate: null,
expirationAlarm: null
}
proxy.resetForm("managementRef")
}
/** 搜索按钮操作 */
function handleQuery() {
queryParams.value.pageNum = 1
getList()
}
/** 重置按钮操作 */
function resetQuery() {
proxy.resetForm("queryRef")
handleQuery()
}
// 多选框选中数据
function handleSelectionChange(selection) {
ids.value = selection.map(item => item.materialManagementCode)
single.value = selection.length != 1
multiple.value = !selection.length
}
/** 新增按钮操作 */
function handleAdd() {
reset()
open.value = true
title.value = "添加物资管理"
}
/** 修改按钮操作 */
function handleUpdate(row) {
reset()
const _materialManagementCode = row.materialManagementCode || ids.value
getManagement(_materialManagementCode).then(response => {
form.value = response.data
open.value = true
title.value = "修改物资管理"
})
}
/** 提交按钮 */
function submitForm() {
proxy.$refs["managementRef"].validate(valid => {
if (valid) {
if (form.value.materialManagementCode != null) {
updateManagement(form.value).then(response => {
proxy.$modal.msgSuccess("修改成功")
open.value = false
getList()
})
} else {
addManagement(form.value).then(response => {
proxy.$modal.msgSuccess("新增成功")
open.value = false
getList()
})
}
}
})
}
/** 删除按钮操作 */
function handleDelete(row) {
const _materialManagementCodes = row.materialManagementCode || ids.value
proxy.$modal.confirm('是否确认删除物资管理编号为"' + _materialManagementCodes + '"的数据项?').then(function() {
return delManagement(_materialManagementCodes)
}).then(() => {
getList()
proxy.$modal.msgSuccess("删除成功")
}).catch(() => {})
}
/** 导出按钮操作 */
function handleExport() {
proxy.download('stock/management/export', {
...queryParams.value
}, `management_${new Date().getTime()}.xlsx`)
}
getList()
</script>