仪器进出库管理系统开发

最近给朋友做了一个管理公司仪器的“进出库管理系统”,主要功能就是每次仪器出库都要使用手机扫仪器上的二维码出库,归还的时候同样扫二维码入库。对整个使用流程做闭环跟踪。整个系统包括一个手机APP(本来想做成小程序,朋友要求做成APP),一个PC端的后台管理系统。该系统为前后端分离,用到的技术栈主要为后端采用 springboot,数据库使用的是postgresql,PC端采用Vue框架,APP使用uniapp开发。下面简单分享一下。

后端+数据库设计

后端框架采用springboot+mybatis+postgresql。包括了数据的增删改查、全局异常处理,token验证,后端跨域处理等。

//全局异常处理
@ExceptionHandler(value = TokenAuthExpiredException.class)
@ResponseBody
public Result tokenExpiredExceptionHandler(TokenAuthExpiredException tokenAuthExpiredException){
    Map<String, Object> map = new HashMap<String, Object>();
    map.put("message", tokenAuthExpiredException.message);
    map.put("code", tokenAuthExpiredException.code);
    return Result.all(map);
}
//在拦截器中对token进行验证
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    //如果是PC端,则不拦截
    if("pc".equals(request.getHeader("flag"))){
        return true;
    } else {
        String token = request.getHeader("token");
        if(token == null){
            throw new TokenAuthExpiredException("Token不存在", 410);
        }
        if(!JwtUtil.verifyToken(token)){
            throw new TokenAuthExpiredException("Token过期", 411);
        }
        return true;
    }
}
//在过滤器中添加跨域处理
@Bean
public CorsFilter corsFilter() {
    CorsConfiguration config = new CorsConfiguration();
    // 设置允许跨域请求的域名
    config.addAllowedOrigin("*");
    // 是否允许证书 不再默认开启
    // config.setAllowCredentials(true);
    // 设置允许的方法
    config.addAllowedMethod("*");
    // 允许任何头
    config.addAllowedHeader("*");
    UrlBasedCorsConfigurationSource configSource = new UrlBasedCorsConfigurationSource();
    configSource.registerCorsConfiguration("/**", config);
    return new CorsFilter(configSource);
}
//接口文档采用knife4j 
@Configuration
@EnableSwagger2
public class Knife4jConfig {
    @Autowired
    TypeResolver typeResolver;
    @Bean
    public Docket createRestApi(){
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.insmg"))
                .paths(PathSelectors.any())
                .build()
                .additionalModels(typeResolver.resolve(User.class))
                .additionalModels(typeResolver.resolve(Device.class))
                .additionalModels(typeResolver.resolve(UsageRecord.class))
                .additionalModels(typeResolver.resolve(LoginEquipment.class));
    }

    public ApiInfo apiInfo(){
        return new ApiInfoBuilder()
                .title("仪器管理后台服务接口文档")
                .description("本次使用 knife4j 搭建后台接口文档")
                .termsOfServiceUrl("http://localhost:10001/")
                .contact(new Contact("xxx", "http://localhost:10500/", "xxx@163.com"))
                .version("0.0.1")
                .build();
    }
}

在这里插入图片描述
数据库设计,这里强烈给大家推荐一款数据库管理工具 dbeaver,十分好用。
在这里插入图片描述

PC端开发

PC端开发,采用Vue框架,使用的是element-plus UI,axios数据请求。Vue router做路由拦截。这里展示一下已开发好的系统界面。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

APP开发

APP开发采用uniapp,其仍为Vue的技术栈,所以我这里采用uniapp开发,效率高,上手快。下面是一些开发截图和界面功能截图。
在这里插入图片描述

在这里插入图片描述
至此,整套管理系统开发完毕。当然这也是第一版,功能比较简单,业务也不是很复杂。不过我们打算后续在此基础上继续更新迭代。有喜欢的朋友欢迎收藏点赞转发,有业务需求的朋友也欢迎私信我,web全栈开发。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
.版本 2 .子程序 _删除_被选择 .局部变量 当前选中, 整数型 .局部变量 文本数组, 文本型, , "0" .局部变量 文本数组2, 文本型, , "0" .局部变量 删除容器, 字节集 .局部变量 x, 整数型 .如果真 (列表框1.现行选中项 = -1) 信息框 (“请在列表中选中需要删除的会员!”, 0, ) 返回 () .如果真结束 当前选中 = 列表框1.现行选中项 移到文件首 (文件号) 删除容器 = 读入字节集 (文件号, 取文件长度 (文件号)) 文本数组 = 分割文本 (到文本 (删除容器), #换行符, ) .计次循环首 (取数组成员数 (文本数组), x) .如果 (当前选中 + 1 = x) 文本数组2 = 分割文本 (文本数组 [x], “,”, ) .如果真 (信息框 (“会员卡号:” + 文本数组2 [1] + #换行符 + “会员名字:” + 文本数组2 [2] + #换行符 + “卡类型:” + 文本数组2 [4] + #换行符 + “您确定要删除?”, #警告图标 + #是否钮, “删除会员信息:”) = 5) 删除成员 (文本数组, x, ) 跳出循环 () .如果真结束 返回 () .否则 .如果结束 .计次循环尾 () 移到文件首 (文件号) 删除数据 (文件号, 取文件长度 (文件号)) .计次循环首 (取数组成员数 (文本数组), x) .如果 (取数组成员数 (文本数组) = x) 写出字节集 (文件号, 到字节集 (文本数组 [x])) .否则 写出字节集 (文件号, 到字节集 (文本数组 [x] + #换行符)) .如果结束 .计次循环尾 () 子程序载入数据 () .子程序 子程序删除会员 .参数 会员号, 文本型 .局部变量 删除容器, 字节集 .局部变量 文本数组, 文本型, , "0" .局部变量 文本数组2, 文本型, , "0" .局部变量 x, 整数型 .' 如果 (会员号 ≠ “”) ' 移到文件首 (文件号) ' 删除容器 = 读入字节集 (文件号, 取文件长度 (文件号)) ' 文本数组 = 分割文本 (到文本 (删除容器), #换行符, ) .' 计次循环首 (取数组成员数 (文本数组), x) ' 文本数组2 = 分割文本 (文本数组 [x], “,”, ) .' 如果真 (文本数组2 [1] = 会员号) .' 如果真 (信息框 (“会员卡号:” + 文本数组2 [1] + #换行符 + “会员名字:” + 文本数组2 [2] + #换行符 + “卡类型:” + 文本数组2 [4] + #换行符 + “您确定要删除?”, #警告图标 + #是否钮, “删除会员信息:”) = 5) ' 删除成员 (文本数组, x, ) ' 跳出循环 () .如果真结束 ' 返回 () .如果真结束 .' 计次循环尾 () ' 移到文件首 (文件号) ' 删除数据 (文件号, 取文件长度 (文件号)) .' 计次循环首 (取数组成员数 (文本数组), x) .' 如果 (取数组成员数 (文本数组) = x) ' 写出字节集 (文件号, 到字节集 (文本数组 [x])) .否则 ' 写出字节集 (文件号, 到字节集 (文本数组 [x] + #换行符)) .如果结束 .' 计次循环尾 () ' 会员号 = “” ' 子程序载入数据 () .否则 .如果结束 .子程序 _导入_被选择 .局部变量 导入容器, 字节集 .局部变量 文本数组, 文本型, , "0" .局部变量 文件号2, 整数型 .局部变量 临时变量, 文本型 信息框 (“本导入程序不会对您所导入的数据进行校验,请正确选择需要导入的数据备份!” + #换行符 + “否则将会导致不可逆的数据损坏!”, #警告图标, “警告!!”) .如果真 (通用对话框1.打开 () = 假) 返回 () .如果真结束 关闭所有文件 () 文件号2 = 打开加密文件 (通用对话框1.文件名, 3, , “19@85(32%71&BvC”, ) 移到文件首 (文件号2) 导入容器 = 读入字节集 (文件号2, 取文件长度 (文件号2)) 临时变量 = 子文本替换 (取当前目录 (), “\bakup”, “”, 1, , 真) 文件号 = 打开加密文件 (临时变量 + “\data.dat”, 4, , “19@85(32%71&BvC”, ) 移到文件首 (文件号) 写出字节集 (文件号, 导入容器) 关闭所有文件 () 信息框 (“为让系统正确运行,请关闭程序重新运行!”, #信息图标, )
材料进出管理软件使用说明 1、本软件必须有一个用户。系统初始有一个默认用户,其用户名为: admin,密码为:admin。使用者可以在系统中添加和删除用户或修改用户密码, 但必须保证系统至少有一个用户,否则无法登录。 2、在首次使用本系统时,为方便用户和便于管理,应先对每一种新材料在 “材料管理->材料信息”窗口里进行登记,未登记的材料在以后的进出 操作中不能保持和维护。 3、在第一次使用本系统时,如果仓中有存,必须把这些存的材料作 为进材料以进单的 方式进行登记,否则材料使用报表得不到准确的统计结果。 4、在输入“修理”类型的出单时,如果只有“金额”而没有“数量”,请输入“0”, 因为为了软件的通用性,本软件设计的时候把这个字段设计成不能为空。 5、在做材料收发报表的时候,如果材料的种类太多或平时有频繁的进出操作, 可能需要一段时间。如果过了几秒种计算机还没有响应,请再耐心等待一段时间。 因为这很可能是中的信息太多,计算机一时处理不过来的缘故。 对于各个报表的时间期限,请填写起止日期,如查询七月份的, 应填写为“2001-7-1”到“2001-7-31”,对于查询季度、半年、 全年的数据,依此类推。 6、报表窗口中各字段的宽度可调节,方法是先选中表,然后把鼠标放在 第一行列与列之间的分隔线上,鼠标指针会变成“<-->”, 这时可拖拉该分隔线从而调整列宽。 7、若要改变整个表中数据的字体、字体大小。应把鼠标定位在第一行、 第一列位置(空单元格)所有数据会反向显示,此时单击“字体”按钮, 选择字体、大小,即可达到所求。若只想改变某个单元格的字、大小, 可用鼠标直接定位在该单元格,再单击“字体”按钮来达到所需的改变。 谢谢使用本软件!
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值