WMS仓库管理系统库位功能

后端

using Infrastructure.Attribute;
using Model.Dto.WarehouseManagement;
using Model.Page;
using Model.WarehouseManagement;
using Repository;
using Service.Interface.WarehouseManagement;
using SqlSugar;namespace Service.WarehouseManagement
{[AppService(ServiceType = typeof(IRegionService), ServiceLifetime = LifeTime.Transient)]public class RegionService : BaseService<Region>, IRegionService{public int AddRegion(Region region, string userName){region.Create_by = userName;region.Create_time = DateTime.Now;region.WarehouseName = Context.Queryable<Warehouse>().First(it => it.WarehouseId == region.WarehouseId).WarehouseName;return Insert(region);}public int DeleteRegion(long regionId){return Delete(regionId);}public int EidtRegion(Region region, string userName){region.Update_by = userName;region.Update_time = DateTime.Now;region.WarehouseName = Context.Queryable<Warehouse>().First(it => it.WarehouseId == region.WarehouseId).WarehouseName;return Update(region);}public PagedInfo<Region> GetAllRegions(RegionQueryDto regionQueryDto){var expression = Expressionable.Create<Region>().AndIF(!string.IsNullOrEmpty(regionQueryDto.WarehouseName), region => region.WarehouseName.Contains(regionQueryDto.WarehouseName)).AndIF(!string.IsNullOrEmpty(regionQueryDto.RegionName), region => region.RegionName.Contains(regionQueryDto.RegionName)).AndIF(regionQueryDto.RegionProperty != null, region => region.RegionProperty == regionQueryDto.RegionProperty);return Queryable().Where(expression.ToExpression()).ToPage(regionQueryDto);}public List<Region> GetAllRegions(){return Queryable().ToList();}public Region GetRegion(long regionId){return Queryable().Where(it => it.RegionId == regionId).First();}public bool IsOtherUse(long regionId){return Context.Queryable<Location>().Where(it => it.RegionId == regionId).Any();}}
}

 控制器Controllers

using Common;
using Infrastructure.Attribute;
using Infrastructure.Extensions;
using Model.Dto.WarehouseManagement;
using Model.Enums;
using Model.WarehouseManagement;
using Service.Interface.WarehouseManagement;
using WMS.WebApi.Filters;
using Mapster;
using Microsoft.AspNetCore.Mvc;namespace WMS.WebApi.Controllers.WarehouseManagement
{/// <summary>/// 库区控制器/// </summary>[Verify][Route("/warehousemanagement/region")][ApiExplorerSettings(GroupName = "wm")]public class RegionController : BaseController{private IRegionService regionService;private IWarehouseService warehouseService;public RegionController(IRegionService regionService, IWarehouseService warehouseService){this.regionService = regionService;this.warehouseService = warehouseService;}/// <summary>/// 分页查询所有数据/// </summary>/// <param name="regionQueryDto"></param>/// <returns></returns>[HttpGet]public IActionResult GetAll([FromQuery] RegionQueryDto regionQueryDto){var result = regionService.GetAllRegions(regionQueryDto);return SUCCESS(result);}/// <summary>/// 获取仓库选项/// </summary>/// <returns></returns>[HttpGet("options")]public IActionResult GetWarehouseOptions(){var result = warehouseService.GetAllWarehouses().Select(it => new { it.WarehouseId, it.WarehouseName }).ToList();return SUCCESS(result);}/// <summary>/// 格局id获取库区信息/// </summary>/// <param name="id"></param>/// <returns></returns>[HttpGet("get/{id:long}")]public IActionResult GetRegion(long id){var result = regionService.GetRegion(id);return SUCCESS(result);}/// <summary>/// 新增库区信息/// </summary>/// <param name="regionDto"></param>/// <returns></returns>[HttpPost("add")][Log(Title = "新增库区信息", BusinessType = BusinessType.INSERT)]public IActionResult AddRegion([FromBody] RegionDto regionDto){var region = regionDto.Adapt<Region>();var username = HttpContext.GetName();var result = regionService.AddRegion(region, username);return SUCCESS(result);}/// <summary>/// 编辑库区信息/// </summary>/// <param name="id"></param>/// <param name="regionDto"></param>/// <returns></returns>[HttpPost("edit/{id:long}")][Log(Title = "编辑库区信息", BusinessType = BusinessType.UPDATE)]public IActionResult EditRegion(long id, [FromBody] RegionDto regionDto){var region = regionDto.Adapt<Region>();region.RegionId = id;var username = HttpContext.GetName();var result = regionService.EidtRegion(region, username);return SUCCESS(result);}/// <summary>/// 删除库区信息/// </summary>/// <param name="id"></param>/// <returns></returns>[HttpDelete("delete/{id:long}")][Log(Title = "删除库区信息", BusinessType = BusinessType.DELETE)]public IActionResult DeleteRegion(long id){var result= regionService.DeleteRegion(id);return SUCCESS(result);}/// <summary>/// 导出库区信息/// </summary>/// <returns></returns>[HttpGet("export")][Log(Title = "导出库区信息", BusinessType = BusinessType.EXPORT)]public IActionResult RegionExport(){var regions = regionService.GetAllRegions();var regionExcelDtos = regions.Select(it => it.Adapt<RegionExcelDto>()).ToList();var result = ExcelHelper.ExportExcelMini(regionExcelDtos, "region", "库区信息");return ExportExcel(result.Item2, result.Item1);}}
}

前端VUE

<template>
    <div class="app-container">
        <!-- 搜索功能 -->
        <el-form :model="queryParams" ref="queryRef" v-show="showSearch" :inline="true">
            <el-form-item label="仓库名称" prop="warehouseName">
                <el-input v-model="queryParams.warehouseName" placeholder="请输入供仓库名称" clearable style="width: 160px" />
            </el-form-item>
            <el-form-item label="库区名称" prop="regionName">
                <el-input v-model="queryParams.regionName" placeholder="请输入库区名称" clearable style="width: 160px" />
            </el-form-item>
            <el-form-item label="库区类型" prop="regionProperty">
                <el-select v-model="queryParams.regionProperty" placeholder="选择库区类型" style="width: 160px">
                    <el-option v-for="(item, index) in regionPropertyOptions" :key="index" :label="item" :value="index" />
                </el-select>
            </el-form-item>
            <el-form-item label="创建时间">
                <el-date-picker v-model="dateRange" style="width: 300px" type="daterange" range-separator="-"
                    start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>
            </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">
            <el-col :span="1.5">
                <el-button type="primary" plain icon="plus" @click="handleAdd">新增</el-button>
            </el-col>
            <el-col :span="1.5">
                <el-button type="warning" plain icon="download" @click="handleExport">导出</el-button>
            </el-col>
            <right-toolbar v-model:showSearch="showSearch" @queryTable="getList" :columns="columns"></right-toolbar>
        </el-row>

        <!-- 表格 -->
        <el-table v-loading="loading" :data="regionList" highlight-current-row>
            <el-table-column label="仓库名称" prop="warehouseName" v-if="columns.showColumn('warehouseName')" />
            <el-table-column label="库区名称" prop="regionName" v-if="columns.showColumn('regionName')" />
            <el-table-column label="库区类型" prop="regionProperty" v-if="columns.showColumn('regionProperty')">
                <template #default="scope">
                    <span>{{ regionPropertyOptions[scope.row.regionProperty] }}</span>
                </template>
            </el-table-column>
            <el-table-column label="创建人" prop="createBy" v-if="columns.showColumn('createBy')" />
            <el-table-column label="创建时间" prop="createTime" v-if="columns.showColumn('createTime')" />
            <el-table-column label="是否有效" prop="isValid" v-if="columns.showColumn('isValid')">
                <template #default="scope">
                    <el-tag v-if="scope.row.isValid === 1" type="success">是</el-tag>
                    <el-tag v-else type="danger">否</el-tag>
                </template>
            </el-table-column>

            <!-- 操作行 -->
            <el-table-column label="操作" align="center" width="120" v-if="columns.showColumn('operate')">
                <template #default="scope">
                    <div>
                        <el-button text icon="edit" title="编辑" @click.stop="handleUpdate(scope.row)">
                        </el-button>
                        <el-button text icon="delete" title="删除" @click.stop="handleDelete(scope.row)">
                        </el-button>
                    </div>
                </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="350px" :show-close="false" :draggable="true">
            <el-form :model="form" :rules="rules" ref="regionRef" label-width="80px">
                <el-form-item label="仓库名称" prop="warehouseId">
                    <el-select v-model="form.warehouseId" placeholder="请选择仓库">
                        <el-option v-for="item in warehouseOptions" :key="item.warehouseId" :label="item.warehouseName"
                            :value="item.warehouseId" style="width: 200px;" />
                    </el-select>
                </el-form-item>
                <el-form-item label="库区名称" prop="regionName">
                    <el-input v-model="form.regionName" placeholder="请输入库区名称" style="width: 218.4px;" />
                </el-form-item>
                <el-form-item label="库区类型" prop="regionProperty">
                    <el-select v-model="form.regionProperty" placeholder="选择库区类型">
                        <el-option v-for="(item, index) in regionPropertyOptions" :key="index" :label="item" :value="index"
                            style="width: 200px;" />
                    </el-select>
                </el-form-item>
                <el-form-item label="是否有效" prop="isValid">
                    <el-switch v-model="form.isValid" :active-value="1" :inactive-value="0" />
                </el-form-item>
            </el-form>

            <template #footer>
                <el-button text @click="cancel">取消</el-button>
                <el-button type="primary" @click="submitForm">提交</el-button>
            </template>
        </el-dialog>

    </div>
</template>

<script setup>
import { getAllInfo, getOptions, addInfo, editInfo, deleteInfo, getInfo, exportAllInfo } from '@/api/warehousManagement/region';

// 总条数
const total = ref(0)
// 展示搜索界面
const showSearch = ref(false)
// 加载...
const loading = ref(true)
// 库区列表
const regionList = ref([])
// 库区类型
const regionPropertyOptions = ["拣货区", "备货区", "收货区", "退货区", "次品区", "存货区"]
//仓库选项列表
const warehouseOptions = ref([])
// 展示对话框
const open = ref(false)
// 对话框标题
const title = ref('')
// 时间范围
const dateRange = ref([])
// 数据
const data = reactive({
    form: {},
    queryParams: {
        pageNum: 1,
        pageSize: 10,
        warehouseName: undefined,
        regionName: undefined,
        regionProperty: undefined
    },
    rules: {
        warehouseId: [{ required: true, message: '仓库名称不能为空', trigger: 'blur' }],
        regionName: [{ required: true, message: '库区名称不能为空', trigger: 'blur' }],
        regionProperty: [{ required: true, message: '库区类型不能为空', trigger: 'blur' }]
    }
})
// 列显隐信息
const columns = ref([
    { key: 0, label: `仓库名称`, visible: true, prop: 'warehouseName' },
    { key: 1, label: `库区名称`, visible: true, prop: 'regionName' },
    { key: 2, label: `库区类型`, visible: true, prop: 'regionProperty' },
    { key: 3, label: `创建人`, visible: false, prop: 'createBy' },
    { key: 4, label: `创建时间`, visible: false, prop: 'createTime' },
    { key: 5, label: `是否有效`, visible: true, prop: 'isValid' },
    { key: 6, label: `操作`, visible: true, prop: 'operate' }
])
// 表单、搜索参数、规则
const { form, queryParams, rules } = toRefs(data)
// 当时实例
const { proxy } = getCurrentInstance()

/**
 * 重置操作表单
 */
function reset() {
    form.value = {
        warehouseId: undefined,
        regionName: undefined,
        regionProperty: undefined,
        isValid: undefined
    }
    proxy.resetForm('regionRef')
}

/**
 * 获取列表
 */
function getList() {
    loading.value = true
    let params = proxy.addDateRange(queryParams.value, dateRange.value)
    getAllInfo(params).then(res => {
        loading.value = false
        regionList.value = res.data.result
        total.value = res.data.totalNum
    })
    getOptions().then(res => {
        warehouseOptions.value = res.data
    })
}

/**
 * 搜索按钮操作
 */
function handleQuery() {
    queryParams.pageNum = 1
    getList()
}

/**
 * 重置按钮操作
 */
function resetQuery() {
    dateRange.value = []
    proxy.resetForm('queryRef')
    handleQuery()
}

/**
 * 新增按钮操作
 */
function handleAdd() {
    reset()
    open.value = true
    title.value = "新增库位信息"
}

/**
 * 导出按钮操作 
 */
function handleExport() {
    proxy
        .$modal
        .confirm('是否确认导出所有库位信息数据项?', '警告', {
            confirmButtonText: '确定',
            cancelButtonText: '取消',
            type: 'warning'
        })
        .then(async () => {
            await exportAllInfo()
        })
}

/**
 * 提交按钮
 */
function submitForm() {
    proxy.$refs['regionRef'].validate((valid) => {
        if (valid) {
            if (form.value.regionId != undefined) {
                editInfo(form.value.regionId, form.value).then(res => {
                    proxy.$modal.msgSuccess('修改成功')
                    open.value = false
                    getList()
                })
            } else {
                addInfo(form.value).then(res => {
                    proxy.$modal.msgSuccess('新增成功')
                    open.value = false
                    getList()
                })
            }
        }
    })
}

/**
 * 取消按钮
 */
function cancel() {
    open.value = false
    reset()
}

/**
 * 修改按钮操作 
 * @param {行数据} row 
 */
function handleUpdate(row) {
    reset()
    const regionId = row.regionId
    getInfo(regionId).then(response => {
        form.value = response.data
        open.value = true
        title.value = '修改库位信息'
    })
    open.value = true
}

/**
 * 删除按钮操作
 * @param {行数据} row 
 */
function handleDelete(row) {
    const regionId = row.regionId
    proxy
        .$modal
        .confirm('是否确认删除"' + row.regionName + '"的数据项?')
        .then(() => {
            return deleteInfo(regionId)
        })
        .then(() => {
            getList()
            proxy.$modal.msgSuccess('删除成功')
        })
        .catch(() => { })
}

getList()
</script>

<style></style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/152810.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何通过cpolar内网穿透工具实现远程访问本地postgreSQL

文章目录 前言1. 安装postgreSQL2. 本地连接postgreSQL3. Windows 安装 cpolar4. 配置postgreSQL公网地址5. 公网postgreSQL访问6. 固定连接公网地址7. postgreSQL固定地址连接测试 前言 PostgreSQL是一个功能非常强大的关系型数据库管理系统&#xff08;RDBMS&#xff09;,下…

uniapp开发小程序,包过大解决方案

1、首先和大家说一下 微信小程序 主包限制不能超过2M 分包一共不能超过8M 然后具体解决优化步骤如下&#xff0c; 将主包进行分包 在pages.json 下subPackages里面进行配置分包 分包配置完 配置过的文件都需要进行修改对应的路径 2 、 在运行的时候 一定要勾选 压缩代码 有…

2311d导入c的语义不同

原文 以下D代码正常工作: enum X "X"; import core.stdc.stdio; void main(){puts(X); }但是,如果该X枚举是C文件中#define的结果,则会出现错误: //x.c #define X "X" //D代码 import x; import core.stdc.stdio; void main(){puts(X); //错误 }错误:不…

Android Termux安装MySQL,内网穿透实现公网远程访问

文章目录 前言1.安装MariaDB2.安装cpolar内网穿透工具3. 创建安全隧道映射mysql4. 公网远程连接5. 固定远程连接地址 前言 Android作为移动设备&#xff0c;尽管最初并非设计为服务器&#xff0c;但是随着技术的进步我们可以将Android配置为生产力工具&#xff0c;变成一个随身…

【电路笔记】-欧姆定律

欧姆定律 文章目录 欧姆定律1、概述2、AC电路的等效性2.1 输入电阻2.2 输入电感2.3 输入电容 3、欧姆定律的局部形式3.1 介绍和定义3.2 德鲁德模型(Drude Model)3.3 局部形式表达式 4、电阻和宏观欧姆定律5、总结 电流、电压和电阻之间的基本关系被称为欧姆定律&#xff0c;可能…

国家开放大学 平时作业训练题

试卷代号&#xff1a;1428 风险沟通 参考试题&#xff08;开卷&#xff09; 一、单项选择题&#xff08;每题2分&#xff0c;共40分&#xff09; 1.关于组织传播&#xff0c;下列描述中不正确的是( )。 A.是组织成员之间、组织内部机构之间的信息交流和沟通 B.决策应变是…

cpu飙高问题,案例分析(一)

一、复习知识点&#xff1a; CPU性能指标&#xff1a; load average&#xff1a;负载&#xff0c;linux查看的时候&#xff0c;通常显示如下&#xff1a; load average后面有三段数字&#xff1a;代表了系统1分钟&#xff0c;5分钟&#xff0c;15分钟平均负载。 形象的类别可…

使用npm发布自己的组件库

在日常开发中&#xff0c;我们习惯性的会封装一些个性化的组件以适配各种业务场景&#xff0c;突发奇想能不能建一个自己的组件库&#xff0c;今后在各种业务里可以自由下载安装自己的组件。 一. 项目搭建 首先直接使用vue-cli创建一个vue2版本的项目&#xff0c;并下载好ele…

Ps:陷印

在准备图像进行专业印刷之前&#xff0c;陷印 Trap是一个重要的步骤。 在彩色印刷中&#xff0c;多种颜色的墨水通常分别印刷。陷印是一种叠印技术&#xff0c;它可避免打印时印版的微小偏差或移动而使打印图像出现微小的缝隙。 进行陷印处理以纠正未对齐现象 A. 未对齐现象&am…

原始值的响应式方案

原始值指的是 Boolean、Number、BigInt、String、Symbol、undefined 和 null 等类型的值。在JavaScript 中&#xff0c;原始值是按值传递的&#xff0c;而非按引用传递。这意味着&#xff0c;如果一个函数接收原始值作为参数&#xff0c;那么形参与实参之间没有引用关系&#x…

代码逻辑修复与其他爬虫ip库的应用

在一个项目中&#xff0c;由于需要设置 http_proxy 来爬虫IP访问网络&#xff0c;但在使用 requests 库下载文件时遇到了问题。具体表现为在执行 Python 脚本时&#xff0c;程序会阻塞并最终超时&#xff0c;无法正常完成文件下载。 解决方案 针对这个问题&#xff0c;我们可以…

VB.net读写S50/F08IC卡,修改卡片密码控制位源码

本示例使用设备&#xff1a;Android Linux RFID读写器NFC发卡器WEB可编程NDEF文本/智能海报/-淘宝网 (taobao.com) 函数声明 Module Module1读卡函数声明Public Declare Function piccreadex Lib "OUR_MIFARE.dll" (ByVal ctrlword As Byte, ByRef serial As Byte, …

基于单片机K型热电偶温度采集报警系统

**单片机设计介绍&#xff0c; 基于单片机K型热电偶温度采集报警系统 文章目录 一 概要简介系统特点系统组成工作原理应用领域 二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 # 基于单片机K型热电偶温度采集报警系统介绍 简介 该系统是基于单片…

MongoDB归并连续号段-(待验证)

实现按照不同条件归并连续号段的方式与具体的数据模型和查询需求有关&#xff0c;以下是一种常见的方式&#xff1a; 假设有一个文档集合&#xff0c;包含如下字段&#xff1a; {"_id": ObjectId("613c3050d5d9b45a0de7c290"),"group": "…

【论文阅读笔记】Deep learning for time series classification: a review

【论文阅读笔记】Deep learning for time series classification: a review 摘要 在这篇文章中&#xff0c;作者通过对TSC的最新DNN架构进行实证研究&#xff0c;探讨了深度学习算法在TSC中的当前最新性能。文章提供了对DNNs在TSC的统一分类体系下在各种时间序列领域中的最成功…

8 Redis与Lua

LUA脚本语言是C开发的&#xff0c;类似存储过程,是为了实现完整的原子性操作&#xff0c;可以用来补充redis弱事务的缺点. 1、LUA脚本的好处 2、Lua脚本限流实战 支持分布式 import org.springframework.core.io.ClassPathResource; import org.springframework.data.redis…

Map 和 WeakMap:JavaScript 中的键值对集合

JavaScript 是一种动态、弱类型的脚本语言&#xff0c;经常用于构建现代 Web 应用程序。在编写 JavaScript 代码时&#xff0c;我们经常需要使用各种数据结构来存储和管理数据。其中&#xff0c;Map 和 WeakMap 就是两个非常有用的数据结构&#xff0c;它们分别提供了用于存储键…

Excel 文件比较工具 xlCompare 11.01 Crack

比较两个 Excel 文件之间的差异 xlCompare. xlCompare.com 是性能最佳的 Excel diff 工具&#xff0c;用于比较两个 Excel 文件或工作表并在线突出显示差异。xlCompare 包括免费的在线 Excel 和 CSV 文件比较服务以及用于比较和合并 Excel 文件的强大桌面工具。如果您想在线了…

软件测试: 测试用例

一. 软件测试四要素 测试环境,操作步骤,测试数据,预期结果 二. 基于需求进行测试用例的设计 基于需求设计测试用例是测试设计和开发测试用例的基础,第一步就要分析测试需求,验证需求是否正确,完整,无二义性,并且逻辑自洽.在需求正确的基础上细化测试需求,从测试需求提炼出一…

Java语言基础第三天

运算符&#xff1a; 算术&#xff1a;、-、*、/、%、、-- %:取模/取余&#xff0c;余数为0即为整除 System.out.println(5%2); //1&#xff0c;商2余1 System.out.println(8%2); //0&#xff0c;商4余0----整除 System.out.println(2%8); //2&#xff0c;商0余2 /--:自增1/自…