一、创建药品数据
大致上和之前供货商一样,Ctrl+C复制粘贴修改
1.1 创建pojo实体类
package com.dh.pojo;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
import java.util.Date;
/**
* 药品管理
*/
@Data
@TableName(value = "druginfo")
public class Druginfo implements Serializable {
/*主键*/
@TableField(value = "id")
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
/*药品名称*/
private String name;
/*供应商名称*/
private String supplier;
/*生产时间*/
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date producttime;
/*保质期(月)*/
private String warrenty;
/*药品编码*/
private String number;
/*价格*/
private Float price;
/*库存*/
private Integer stock;
}
1.2 创建mapper接口
DruginfoMapper
package com.dh.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dh.pojo.Druginfo;
import org.apache.ibatis.annotations.Mapper;
/**
* 药品的增删改查mapper
*/
@Mapper
public interface DruginfoMapper extends BaseMapper<Druginfo> {
}
1.3 创建Service业务层
DruginfoService
package com.dh.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.dh.pojo.Druginfo;
import java.util.List;
/**
* 药品的service接口
*/
public interface DruginfoService extends IService<Druginfo> {
/**
* 分页查询药品数据
* @param pageNum 第几页
* @param pageSize 每页多少条数据
* @param param 查询参数-药品名称
* @return
*/
public IPage<Druginfo> selectDruginfoPage(int pageNum, int pageSize, String param);
/**
* 新增一条药品信息
* @param druginfo
*/
public int addDruginfo(Druginfo druginfo);
/**
* 修改一条药品信息
* @param druginfo
*/
public int editDruginfo(Druginfo druginfo);
/**
* 根据主键id查询一个药品对象
* @param id
* @return
*/
public Druginfo queryDruginfoById(Integer id);
/**
* 根据主键id删除一个药品对象
* @param id
* @return
*/
public int delDruginfoById(Integer id);
/**
* 查询所有药品
* @return
*/
public List<Druginfo> queryDruginfoList();
}
实现类:
package com.dh.service.Impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dh.mapper.DruginfoMapper;
import com.dh.pojo.Druginfo;
import com.dh.service.DruginfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* 药品service实现类
*/
@Service
public class DruginfoServiceImpl extends ServiceImpl<DruginfoMapper, Druginfo> implements DruginfoService {
@Autowired
private DruginfoMapper druginfoMapper;
/**
* 分页查询药品数据
*
* @param pageNum 第几页
* @param pageSize 每页多少条数据
* @param param 查询参数-药品名称
* @return
*/
@Override
public IPage<Druginfo> selectDruginfoPage(int pageNum, int pageSize, String param) {
QueryWrapper<Druginfo> queryWrapper = new QueryWrapper<>();
if(StringUtils.isNotBlank(param)){
queryWrapper.like("name",param);
}
Page<Druginfo> page = new Page<>(pageNum,pageSize);
return druginfoMapper.selectPage(page,queryWrapper);
}
/**
* 新增一条药品信息
*
* @param druginfo
*/
@Override
public int addDruginfo(Druginfo druginfo) {
return druginfoMapper.insert(druginfo);
}
/**
* 修改一条药品信息
*
* @param druginfo
*/
@Override
public int editDruginfo(Druginfo druginfo) {
return druginfoMapper.updateById(druginfo);
}
/**
* 根据主键id查询一个药品对象
*
* @param id
* @return
*/
@Override
public Druginfo queryDruginfoById(Integer id) {
return druginfoMapper.selectById(id);
}
/**
* 根据主键id删除一个药品对象
*
* @param id
* @return
*/
@Override
public int delDruginfoById(Integer id) {
return druginfoMapper.deleteById(id);
}
/**
* 查询所有药品
*
* @return
*/
@Override
public List<Druginfo> queryDruginfoList() {
return druginfoMapper.selectList(null);
}
}
1.4 创建controller控制层
package com.dh.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.dh.common.ResultMapUtil;
import com.dh.pojo.Druginfo;
import com.dh.service.DruginfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
/**
* 药品相关的controller
*/
@Controller
@RequestMapping(value = "/druginfo")
public class DruginfoController {
@Autowired
private DruginfoService druginfoService;
/**
* 转向药品页面
*/
@RequestMapping
public String druginfo(){
return "/druginfo";
}
/**
* 分页查询药品列表
*/
@RequestMapping(value = "/druginfoQueryPage")
@ResponseBody
public Object druginfoQueryPage(String param, @RequestParam(defaultValue = "1")int pageNum,@RequestParam(defaultValue = "10")int pageSize){
try{
IPage<Druginfo> iPage = druginfoService.selectDruginfoPage(pageNum,pageSize,param);
return ResultMapUtil.getHashMapMysqlPage(iPage);
} catch (Exception e){
return ResultMapUtil.getHashMapException(e);
}
}
/**
* 转向药品新增页面
*/
@RequestMapping(value = "/druginfoPage")
public String druginfoPage(){
return "/druginfoPage";
}
/**
* 添加一个药品
*/
@RequestMapping(value = "/druginfoAdd")
@ResponseBody
public Object druginfoAdd(Druginfo druginfo){
try{
int i = druginfoService.addDruginfo(druginfo);
return ResultMapUtil.getHashMapSave(i);
} catch (Exception e){
return ResultMapUtil.getHashMapException(e);
}
}
/**
* 转向药品编辑页面
*/
@RequestMapping(value = "/druginfoQueryById")
public String druginfoQueryById(@RequestParam(name = "id",required = true)Integer id, Model model){
Druginfo druginfo = druginfoService.queryDruginfoById(id);
model.addAttribute("obj",druginfo);
return "/druginfoPage";
}
/**
* 修改一个药品
*/
@RequestMapping(value = "/druginfoEdit")
@ResponseBody
public Object druginfoEdit(Druginfo druginfo){
try{
int i = druginfoService.editDruginfo(druginfo);
return ResultMapUtil.getHashMapSave(i);
} catch (Exception e){
return ResultMapUtil.getHashMapException(e);
}
}
/**
* 删除一个药品
*/
@RequestMapping(value = "/druginfoDelById")
@ResponseBody
public Object druginfoDelById(Integer id){
try{
int i = druginfoService.delDruginfoById(id);
return ResultMapUtil.getHashMapDel(i);
} catch (Exception e){
return ResultMapUtil.getHashMapException(e);
}
}
}
1.5 创建日期处理类
DateUtil
处理日期相关的操作
package com.dh.common;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* 日期处理类
* 处理日期相关的操作
*/
public class DateUtil {
/**
* 把日期格式转换成年月日(yyyy-MM-dd)的字符串
*/
public static String dateConvert(Date date){
//用java提供的SimpleDateFormat进行转换,传入转换的格式
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
//返回转换的格式
return sdf.format(date);
}
public static void main(String[] args) {
//测试转换的结果
System.out.println(DateUtil.dateConvert(new Date()));
}
}
1.6 在Druginfo中添加时间转换
/*生产时间转换成年月日*/
public String getProducttimeStr(){
return DateUtil.dateConvert(producttime);
}
二、药品后台页面
2.1 编写药品管理页面
druginfo.html
<!DOCTYPE html>
<html lang="zh_CN" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>药品信息管理</title>
<link rel="stylesheet" th:href="@{/static/layui/css/layui.css}" media="all">
<link rel="stylesheet" th:href="@{/static/admin/style.css}" media="all">
<script type="text/html" id="indexTpl">
{{d.LAY_TABLE_INDEX+1}}
</script>
</head>
<body class="layui-layout-body">
<div class="layui-fluid">
<div class="layui-row layui-col-space15">
<div class="layui-col-md12">
<div class="layui-card">
<div class="layui-card-header">药品信息列表</div>
<div class="layui-card-body">
<table class="layui-hide" id="main-table" lay-filter="main-table"></table>
<script type="text/html" id="toolbarDemo">
<span class="layui-inline" lay-event="add"><i class="layui-icon"></i> </span>
<span class="layui-inline" style="width: 240px;">
<input class="layui-input" name="param" id="param" placeholder="根据药品名称查询" autocomplete="off">
</span>
<span class="layui-btn layui-btn-sm layui-bg-red" lay-event="querySearch">
<i class="layui-icon"></i>查询
</span>
</script>
<script type="text/html" id="barDemo">
<a class="layui-btn layui-btn-xs" lay-event="edit">编辑</a>
<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a>
</script>
</div>
</div>
</div>
</div>
</div>
<script th:src="@{/static/layui/layui.js}"></script>
<script>
layui.use(['table','form'],function () {
var $ = layui.$;
var table = layui.table;
table.render({
elem: '#main-table',
height: 650,
url: '/druginfo/druginfoQueryPage',
method: 'POST',
page: true,
id: 'table-load',
toolbar: '#toolbarDemo',
cols: [
[
{title: '序号',templet: '#indexTpl',width: 60,align:'center'},
{field:'name',title:'药品名称',algin:'center'},
{field:'supplier',title:'供应商',algin:'center'},
{field:'warrenty',title:'保质期(月)',algin:'center'},
{field:'number',title:'药品编码',algin:'center'},
{field:'price',title:'药品价格',algin:'center'},
{field:'stock',title:'库存',algin:'center'},
{field:'producttime',title:'生产时间',algin:'center',
templet:"<div>{{layui.util.toDateString(d.producttime,'yyyy-MM-dd')}}</div>"},
{title:'操作',align:'center',toolbar:'#barDemo',fixed:'right'}
]
]
});
//监听头工具栏事件
table.on('toolbar(main-table)',function (obj) {
switch (obj.event) {
case 'add':
layer.open({
type: 2,
title: '新增药品信息',
content: '/druginfo/druginfoPage',
shade:[0.8,'#393d49'],
area:['600px','530px'],
btn:['确定','取消'],
yes:function (index,layero) {
var iframeWindow = window['layui-layer-iframe'+index];
var submit = layero.find('iframe').contents().find("#LAY-front-submit");
//监听提交
iframeWindow.layui.form.on('submit(LAY-front-submit)',function (data) {
var field = data.field;
$.ajax({
url: '/druginfo/druginfoAdd',
data: field,
async: false,
cache: false,
success: function (str) {
if(str.code === 0){
table.reload('table-load');
}
layer.msg(str.msg,{icon:str.icon,anim:str.anim});
}
});
layer.close(index); //关闭弹层
});
submit.trigger('click');
},
success:function (layero,index) {
}
});
break;
case 'querySearch':
var param = $('#param').val();
table.reload('table-load',{
where: {
param: param
}
});
$('#param').val(param);
break;
}
});
//监听编辑、删除
table.on('tool(main-table)',function (obj) {
var data = obj.data;
switch (obj.event) {
case 'edit':
layer.open({
type: 2,
title: '编辑药品信息',
content: '/druginfo/druginfoQueryById?id=' +data.id,
shade:[0.8,'#393d49'],
area:['600px','500px'],
btn:['确定','取消'],
yes:function (index,layero) {
var iframeWindow = window['layui-layer-iframe'+index];
var submit = layero.find('iframe').contents().find("#LAY-front-submit");
//监听提交
iframeWindow.layui.form.on('submit(LAY-front-submit)',function (data) {
var field = data.field;
$.ajax({
url: '/druginfo/druginfoEdit',
data: field,
async: false,
cache: false,
success: function (str) {
if(str.code === 0){
table.reload('table-load');
}
layer.msg(str.msg,{icon:str.icon,anim:str.anim});
}
});
layer.close(index); //关闭弹层
});
submit.trigger('click');
},
success:function (layero,index) {
}
});
break;
case 'del':
layer.confirm('确认要删除吗?',function (index) {
$.ajax({
url: '/druginfo/druginfoDelById?id=' +data.id,
data: null,
async: false,
cache: false,
success: function (str) {
table.reload('table-load');
layer.msg(str.msg,{icon:str.icon,anim:str.anim});
}
});
})
break;
}
});
});
</script>
</body>
</html>
2.2 编写药品编辑页面
druginfoPage.html
<!DOCTYPE html>
<html lang="zh_CN" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>药品信息</title>
<link rel="stylesheet" th:href="@{/static/layui/css/layui.css}" media="all">
<link rel="stylesheet" th:href="@{/static/admin/style.css}" media="all">
</head>
<body>
<div class="layui-fluid">
<div class="layui-card">
<div class="layui-card-body" style="padding: 15px;">
<form class="layui-form layui-form-pane" action="">
<input name="id" th:value="${obj?.id}" class="layui-input layui-hide"/>
<div class="layui-form-item">
<label class="layui-form-label">药品名称</label>
<div class="layui-input-block">
<input type="text" name="name" th:value="${obj?.name}" lay-verify="required" placeholder="请输入药品名称" autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">药品编码</label>
<div class="layui-input-block">
<input type="text" name="number" th:value="${obj?.number}" lay-verify="required" placeholder="请输入药品编码" autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">供应商</label>
<div class="layui-input-block">
<select name="supplier" id="supplier"></select>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">生产时间</label>
<div class="layui-input-block">
<input type="text" readonly name="producttime" id="producttime" th:value="${obj?.producttimeStr}" lay-verify="required" placeholder="请输入生产时间" autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">保质期(月)</label>
<div class="layui-input-block">
<input type="text" name="warrenty" th:value="${obj?.warrenty}" lay-verify="required" placeholder="请输入保质期(月)" autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">价格</label>
<div class="layui-input-block">
<input type="text" name="price" th:value="${obj?.price}" lay-verify="required" placeholder="请输入价格" autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">库存</label>
<div class="layui-input-block">
<input type="text" name="stock" th:value="${obj?.stock}" lay-verify="required" placeholder="请输入库存" autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item layui-hide">
<input type="button" lay-submit lay-filter="LAY-front-submit" id="LAY-front-submit" value="确认">
</div>
</form>
</div>
</div>
</div>
<script th:src="@{/static/layui/layui.js}"></script>
<script>
layui.use(['form','laydate'],function () {
var $ = layui.$;
var laydate = layui.laydate;
var form = layui.form;
//支持日期控件
laydate.render({
elem: '#producttime',
trigger: 'click'
});
//当前供应商的值
var currentSupplier = '[[${obj?.supplier}]]';
//获取供应商列表
$.ajax({
url: '/supplier/supplieList',
dataType:'json',
type:'post',
cache:false,
success:function (data) {
$('#supplier').prepend("<option value=''>请选择</option>");
for(var i=0;i<data.data.length;i++){
if(data.data[i].name==currentSupplier){
$('#supplier').append("<option selected value='"+data.data[i].name+"'>"+data.data[i].name+"</option>");
}else{
$('#supplier').append("<option value='"+data.data[i].name+"'>"+data.data[i].name+"</option>");
}
}
form.render(); //下拉列表渲染,把内容加载进去
}
});
});
</script>
</body>
</html>
2.3 修改index跳转页面
二级药品菜单的页面跳转
<!--二级菜单-->
<dl class="layui-nav-child">
<dd><a href="#" class="site-demo-active" lay-href="/druginfo" data-id="1" data-title="药品信息">药品信息</a> </dd>
<dd><a href="#" class="site-demo-active" lay-href="/supplier" data-id="2" data-title="供应商信息">供应商信息</a> </dd>
</dl>
2.4 测试
发现无法显示供应商
2.5 List返回格式
编写ResultMapUtil
/**
* List返回格式
*/
public static HashMap<String,Object> getHashMapList(List<?> list){
HashMap<String,Object> resultMap = new HashMap<>();
resultMap.put("code",0);
if(list!=null&&list.size()>0){
resultMap.put("msg","");
}else {
resultMap.put("msg","没有查询到数据!");
}
resultMap.put("data",list);
return resultMap;
}
2.6 获取所有供应商
编写SupplierController
/**
* 获取所有供应商
*/
@RequestMapping(value = "/supplierList")
@ResponseBody
public Object supplierList(){
List<Supplier> supplierList = supplierService.querySupplierList();
return ResultMapUtil.getHashMapList(supplierList);
}
2.7 测试:
三、药品出入库管理
3.1 创建pojo实体类
Owinfo
package com.dh.pojo;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* 药品出入库管理
*/
@Data
@TableName(value = "owinfo")
public class Owinfo implements Serializable {
/*主键*/
@TableField(value = "id")
@TableId(value = "id",type = IdType.AUTO)
private Integer id;
/*药品名称*/
private String dname;
/*出库/入库*/
private String type;
/*数量*/
private Integer count;
/*操作人*/
private String operator;
/*操作时间*/
private Date createtime;
}
3.2 创建mapper接口
package com.dh.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dh.pojo.Owinfo;
import org.apache.ibatis.annotations.Mapper;
/**
* 药品出入库的增删改查Mapper
*/
@Mapper
public interface OwinfoMapper extends BaseMapper<Owinfo> {
}
3.3 创建Service业务层
package com.dh.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.dh.pojo.Owinfo;
/**
* 药品出入库的service接口
*/
public interface OwinfoService extends IService<Owinfo> {
/**
* 分页查询药品出入库数据
* @param pageNum 第几页
* @param pageSize 每页多少条数据
* @param param 查询参数-药品出入库名称
* @return
*/
public IPage<Owinfo> selectOwinfoPage(int pageNum, int pageSize, String param);
/**
* 新增一条药品出入库信息
* @param owinfo
*/
public int addOwinfo(Owinfo owinfo);
/**
* 修改一条药品出入库信息
* @param owinfo
*/
public int updateOwinfo(Owinfo owinfo);
/**
* 根据主键id查询一个药品出入库对象
* @param id
* @return
*/
public Owinfo queryOwinfoById(Integer id);
/**
* 根据主键id删除一个药品出入库对象
* @param id
* @return
*/
public int delOwinfoById(Integer id);
}
实现类
package com.dh.service.Impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dh.mapper.OwinfoMapper;
import com.dh.pojo.Owinfo;
import com.dh.service.OwinfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* 药品出入库service实现类
*/
@Service
public class OwinfoServiceImpl extends ServiceImpl<OwinfoMapper, Owinfo> implements OwinfoService {
@Autowired
private OwinfoMapper owinfoMapper;
/**
* 分页查询药品出入库数据
*
* @param pageNum 第几页
* @param pageSize 每页多少条数据
* @param param 查询参数-药品出入库名称
* @return
*/
@Override
public IPage<Owinfo> selectOwinfoPage(int pageNum, int pageSize, String param) {
QueryWrapper<Owinfo> queryWrapper = new QueryWrapper<>();
if(StringUtils.isNotBlank(param)){
queryWrapper.like("dname",param);
}
Page<Owinfo> page = new Page<>(pageNum,pageSize);
return owinfoMapper.selectPage(page,queryWrapper);
}
/**
* 新增一条药品出入库信息
*
* @param owinfo
*/
@Override
public int addOwinfo(Owinfo owinfo) {
return owinfoMapper.insert(owinfo);
}
/**
* 修改一条药品出入库信息
*
* @param owinfo
*/
@Override
public int updateOwinfo(Owinfo owinfo) {
return owinfoMapper.updateById(owinfo);
}
/**
* 根据主键id查询一个药品出入库对象
*
* @param id
* @return
*/
@Override
public Owinfo queryOwinfoById(Integer id) {
return owinfoMapper.selectById(id);
}
/**
* 根据主键id删除一个药品出入库对象
*
* @param id
* @return
*/
@Override
public int delOwinfoById(Integer id) {
return owinfoMapper.deleteById(id);
}
}
3.4 创建controller控制层
package com.dh.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.dh.common.ResultMapUtil;
import com.dh.pojo.Owinfo;
import com.dh.service.OwinfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.Date;
/**
* 药品出入库相关的controller
*/
@Controller
@RequestMapping(value = "/owinfo")
public class OwinfoController {
@Autowired
private OwinfoService owinfoService;
/**
* 转向药品出入库页面
*/
@RequestMapping
public String owinfo(){
return "/owinfo";
}
/**
* 分页查询药品出入库列表
* value可以指定请求的参数
* value = "/xxx",method = RequestMethod.POST
* @param param 数据
* @param pageNum 起始页数
* @param pageSize 每页10行记录
* @return
*/
@RequestMapping(value = "/owinfoQueryPage")
@ResponseBody
public Object owinfoQueryPage(String param, @RequestParam(defaultValue = "1")Integer pageNum,@RequestParam(defaultValue = "10")Integer pageSize){
try {
//查询对应的数据
IPage<Owinfo> iPage = owinfoService.selectOwinfoPage(pageNum, pageSize, param);
//获取mysql的分页查询结果
return ResultMapUtil.getHashMapMysqlPage(iPage);
} catch (Exception e) {
//如果出错,把异常信息返回给前端
return ResultMapUtil.getHashMapException(e);
}
}
/**
* 转向药品出入库新增页面
* @return 跳转owinfoPage.html
*/
@RequestMapping(value = "/owinfoPage")
public String owinfoPage(){
return "/owinfoPage";
}
/**
* 添加一个药品出入库
* @param owinfo
* @return
*/
@RequestMapping(value = "/owinfoAdd")
@ResponseBody
public Object owinfoAdd(Owinfo owinfo){
try {
//获取创建时间
owinfo.setCreatetime(new Date());
//新增一条出入库信息
int i = owinfoService.addOwinfo(owinfo);
//保存,并统一格式返回
return ResultMapUtil.getHashMapSave(i);
} catch (Exception e) {
//如果出错,把异常信息返回给前端
return ResultMapUtil.getHashMapException(e);
}
}
/**
* 根据查询的id,转向药品出入库编辑页面
* @param id 查询的id
* @param model
* @return
*/
@RequestMapping(value = "/owinfoQueryById")
public String owinfoQueryById(@RequestParam(name = "id",required = true)Integer id, Model model){
//根据id查询药品
Owinfo owinfo = owinfoService.queryOwinfoById(id);
//model调用逻辑处理
model.addAttribute("obj", owinfo);
//跳转页owinfoPage.html
return "/owinfoPage";
}
/**
* 修改一个药品出入库
* @param owinfo 实体类
* @return 返回修改的数据
*/
@RequestMapping(value = "/owinfoEdit")
@ResponseBody
public Object owinfoupdate(Owinfo owinfo){
try {
//修改一条药品出入库信息
int i = owinfoService.updateOwinfo(owinfo);
//保存,并统一格式返回
return ResultMapUtil.getHashMapSave(i);
} catch (Exception e) {
//如果出错,把异常信息返回给前端
return ResultMapUtil.getHashMapException(e);
}
}
/**
* 删除一个药品出入库
* @param id 根据id删除
* @return 返回删除的数据
*/
@RequestMapping(value = "/owinfoDelById")
@ResponseBody
public Object owinfoDelById(Integer id){
try {
//根据id删除数据
int i = owinfoService.delOwinfoById(id);
//保存,并统一格式返回
return ResultMapUtil.getHashMapDel(i);
} catch (Exception e) {
//如果出错,把异常信息返回给前端
return ResultMapUtil.getHashMapException(e);
}
}
}
3.5 获取所有的药品
DruginfoController
/**
* 获取所有药品
*/
@RequestMapping(value = "/druginfoList")
@ResponseBody
public Object druginfoList(){
List<Druginfo> druginfoList = druginfoService.queryDruginfoList();
return ResultMapUtil.getHashMapList(druginfoList);
}
四、出入库后台页面
4.1 药品管理页面
owinfo.html
<!DOCTYPE html>
<html lang="zh_CN" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>药品出入库信息管理</title>
<link rel="stylesheet" th:href="@{/static/layui/css/layui.css}" media="all">
<link rel="stylesheet" th:href="@{/static/admin/style.css}" media="all">
<script type="text/html" id="indexTpl">
{{d.LAY_TABLE_INDEX+1}}
</script>
</head>
<body class="layui-layout-body">
<div class="layui-fluid">
<div class="layui-row layui-col-space15">
<div class="layui-col-md12">
<div class="layui-card">
<div class="layui-card-header">药品出入库信息列表</div>
<div class="layui-card-body">
<table class="layui-hide" id="main-table" lay-filter="main-table"></table>
<script type="text/html" id="toolbarDemo">
<span class="layui-inline" lay-event="add"><i class="layui-icon"></i> </span>
<span class="layui-inline" style="width: 240px;">
<input class="layui-input" name="param" id="param" placeholder="根据药品名称查询" autocomplete="off">
</span>
<span class="layui-btn layui-btn-sm layui-bg-red" lay-event="querySearch">
<i class="layui-icon"></i>查询
</span>
</script>
<script type="text/html" id="barDemo">
<a class="layui-btn layui-btn-xs" lay-event="edit">编辑</a>
<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a>
</script>
</div>
</div>
</div>
</div>
</div>
<script th:src="@{/static/layui/layui.js}"></script>
<script>
layui.use(['table','form'],function () {
var $ = layui.$;
var table = layui.table;
table.render({
elem: '#main-table',
height: 650,
url: '/owinfo/owinfoQueryPage',
method: 'POST',
page: true,
id: 'table-load',
toolbar: '#toolbarDemo',
cols: [
[
{title: '序号',templet: '#indexTpl',width: 60,align:'center'},
{field:'dname',title:'药品名称',algin:'center'},
{field:'type',title:'出库/入库',algin:'center'},
{field:'count',title:'数量',algin:'center'},
{field:'operator',title:'操作人',algin:'center'},
{field:'createtime',title:'操作时间',algin:'center',
templet:"<div>{{layui.util.toDateString(d.createtime,'yyyy-MM-dd HH:mm:ss')}}</div>"},
{title:'操作',align:'center',toolbar:'#barDemo',fixed:'right'}
]
]
});
//监听头工具栏事件
table.on('toolbar(main-table)',function (obj) {
switch (obj.event) {
case 'add':
layer.open({
type: 2,
title: '新增药品出入库信息',
content: '/owinfo/owinfoPage',
shade:[0.8,'#393d49'],
area:['600px','530px'],
btn:['确定','取消'],
yes:function (index,layero) {
var iframeWindow = window['layui-layer-iframe'+index];
var submit = layero.find('iframe').contents().find("#LAY-front-submit");
//监听提交
iframeWindow.layui.form.on('submit(LAY-front-submit)',function (data) {
var field = data.field;
$.ajax({
url: '/owinfo/owinfoAdd',
data: field,
async: false,
cache: false,
success: function (str) {
if(str.code === 0){
table.reload('table-load');
}
layer.msg(str.msg,{icon:str.icon,anim:str.anim});
}
});
layer.close(index); //关闭弹层
});
submit.trigger('click');
},
success:function (layero,index) {
}
});
break;
case 'querySearch':
var param = $('#param').val();
table.reload('table-load',{
where: {
param: param
}
});
$('#param').val(param);
break;
}
});
//监听编辑、删除
table.on('tool(main-table)',function (obj) {
var data = obj.data;
switch (obj.event) {
case 'edit':
layer.open({
type: 2,
title: '编辑药品出入库信息',
content: '/owinfo/owinfoQueryById?id=' +data.id,
shade:[0.8,'#393d49'],
area:['600px','500px'],
btn:['确定','取消'],
yes:function (index,layero) {
var iframeWindow = window['layui-layer-iframe'+index];
var submit = layero.find('iframe').contents().find("#LAY-front-submit");
//监听提交
iframeWindow.layui.form.on('submit(LAY-front-submit)',function (data) {
var field = data.field;
$.ajax({
url: '/owinfo/owinfoEdit',
data: field,
async: false,
cache: false,
success: function (str) {
if(str.code === 0){
table.reload('table-load');
}
layer.msg(str.msg,{icon:str.icon,anim:str.anim});
}
});
layer.close(index); //关闭弹层
});
submit.trigger('click');
},
success:function (layero,index) {
}
});
break;
case 'del':
layer.confirm('确认要删除吗?',function (index) {
$.ajax({
url: '/owinfo/owinfoDelById?id=' +data.id,
data: null,
async: false,
cache: false,
success: function (str) {
table.reload('table-load');
layer.msg(str.msg,{icon:str.icon,anim:str.anim});
}
});
})
break;
}
});
});
</script>
</body>
</html>
4.2 药品编辑页面
owinfoPage.html
<!DOCTYPE html>
<html lang="zh_CN" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>药品出入库信息</title>
<link rel="stylesheet" th:href="@{/static/layui/css/layui.css}" media="all">
<link rel="stylesheet" th:href="@{/static/admin/style.css}" media="all">
</head>
<body>
<div class="layui-fluid">
<div class="layui-card">
<div class="layui-card-body" style="padding: 15px;">
<form class="layui-form layui-form-pane" action="">
<input name="id" th:value="${obj?.id}" class="layui-input layui-hide"/>
<div class="layui-form-item">
<label class="layui-form-label">药品名称</label>
<div class="layui-input-block">
<select name="dname" id="dname"></select>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">出入库类型</label>
<div class="layui-input-block" th:style="'display:' + @{(${obj?.type != null} ? 'none' : '')} + ''">
<input type="radio" name="type" value="出库" title="出库">
<input type="radio" name="type" value="入库" title="入库">
</div>
<div class="layui-input-block" th:style="'display:' + @{(${obj?.type == null} ? 'none' : '')} + ''">
<input type="text" th:value="${obj?.type}" class="layui-input" disabled>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">数量</label>
<div class="layui-input-block">
<input type="text" name="count" th:value="${obj?.count}" lay-verify="required" placeholder="请输入数量" autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">操作人</label>
<div class="layui-input-block">
<input type="text" name="operator" th:value="${obj?.operator}" lay-verify="required" placeholder="请输入操作人" autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item layui-hide">
<input type="button" lay-submit lay-filter="LAY-front-submit" id="LAY-front-submit" value="确认">
</div>
</form>
</div>
</div>
</div>
<script th:src="@{/static/layui/layui.js}"></script>
<script>
layui.use(['form'],function () {
var $ = layui.$;
var form = layui.form;
//当前药品的值
var currentDname = '[[${obj?.dname}]]';
//获取供应商列表
$.ajax({
url: '/druginfo/druginfoList',
dataType:'json',
type:'post',
cache:false,
success:function (data) {
$('#dname').prepend("<option value=''>请选择</option>");
for(var i=0;i<data.data.length;i++){
if(data.data[i].name==currentDname){
$('#dname').append("<option selected value='"+data.data[i].name+"'>"+data.data[i].name+"</option>");
}else{
$('#dname').append("<option value='"+data.data[i].name+"'>"+data.data[i].name+"</option>");
}
}
form.render(); //下拉列表渲染,把内容加载进去
}
});
});
</script>
</body>
</html>
4.3 完善index左侧菜单
完善左侧页面代码,为后面提供便利
<!--左侧菜单-->
<div class="layui-side layui-bg-black">
<!--可以滚动-->
<div class="layui-side-scroll">
<!--lay-accordion="true" 菜单可以折叠-->
<ul class="layui-nav layui-nav-tree" lay-accordion="true">
<li class="layui-nav-item">
<a href="javascript:;" class="layui-icon layui-icon-set-fill layui-nav-item"> 药品库存管理</a>
<dl class="layui-nav-child">
<dd><a href="#" class="site-demo-active" lay-href="/owinfo" data-id="11" data-title="登记出入库信息">登记出入库信息</a> </dd>
<dd><a href="#" class="site-demo-active" lay-href="/problem" data-id="12" data-title="问题药品记录">问题药品记录</a> </dd>
<dd><a href="#" class="site-demo-active" lay-href="/druginfo/warranty" data-id="13" data-title="药品保质期检查">药品保质期检查</a> </dd>
</dl>
</li>
<li class="layui-nav-item">
<a href="javascript:;" class="layui-icon layui-icon-chart-screen layui-nav-item"> 药品销售管理</a>
<dl class="layui-nav-child">
<dd><a href="#" class="site-demo-active" lay-href="/saleinfo" data-id="21" data-title="销售记录">销售记录</a> </dd>
<dd><a href="#" class="site-demo-active" lay-href="/returngoods" data-id="22" data-title="收到退货">收到退货</a> </dd>
</dl>
</li>
<li class="layui-nav-item">
<a href="javascript:;" class="layui-icon layui-icon-date layui-nav-item"> 药品明细查询</a>
<!--二级菜单-->
<dl class="layui-nav-child">
<dd><a href="#" class="site-demo-active" lay-href="/druginfo" data-id="1" data-title="药品信息">药品信息</a> </dd>
<dd><a href="#" class="site-demo-active" lay-href="/supplier" data-id="2" data-title="供应商信息">供应商信息</a> </dd>
<dd><a href="#" class="site-demo-active" lay-href="/returnsupplier" data-id="33" data-title="退货给供应商">退货给供应商</a> </dd>
<dd><a href="#" class="site-demo-active" lay-href="/billinfo" data-id="33" data-title="账单信息">账单信息</a> </dd>
</dl>
</li>
</ul>
</div>
</div>
4.4 运行测试
编辑药品出入库
五、药品记录管理
参考入库管理,进行修改
5.1 创建pojo实体类
Problem
package com.dh.pojo;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* 药品记录管理
* 问题药品
*/
@Data
@TableName(value = "problem")
public class Problem implements Serializable {
/*主键*/
@TableField(value = "id")
@TableId(value = "id",type = IdType.AUTO)
private Integer id;
/*药品名称*/
private String dname;
/*问题药品数量*/
private Integer dcount;
/*药品单价*/
private Float dprice;
/*问题原因*/
private String reason;
/*操作时间*/
private Date createtime;
}
5.2 创建mapper接口
package com.dh.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dh.pojo.Problem;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface ProblemMapper extends BaseMapper<Problem> {
}
5.3 创建Service业务层
package com.dh.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.dh.pojo.Problem;
/**
* 问题药品的service接口
*/
public interface ProblemService extends IService<Problem> {
/**
* 分页查询问题药品数据
* @param pageNum 第几页
* @param pageSize 每页多少条数据
* @param param 查询参数-问题药品名称
* @return
*/
public IPage<Problem> selectProblemPage(int pageNum, int pageSize, String param);
/**
* 新增一条问题药品信息
* @param problem
*/
public int addProblem(Problem problem);
/**
* 修改一条问题药品信息
* @param problem
*/
public int editProblem(Problem problem);
/**
* 根据主键id查询一个问题药品对象
* @param id
* @return
*/
public Problem queryProblemById(Integer id);
/**
* 根据主键id删除一个问题药品对象
* @param id
* @return
*/
public int delProblemById(Integer id);
}
实现类
package com.dh.service.Impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dh.mapper.ProblemMapper;
import com.dh.pojo.Problem;
import com.dh.service.ProblemService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* 问题药品service实现类
*/
@Service
public class ProblemServiceImpl extends ServiceImpl<ProblemMapper, Problem> implements ProblemService {
@Autowired
private ProblemMapper problemMapper;
/**
* 分页查询问题药品数据
*
* @param pageNum 第几页
* @param pageSize 每页多少条数据
* @param param 查询参数-问题药品名称
* @return
*/
@Override
public IPage<Problem> selectProblemPage(int pageNum, int pageSize, String param) {
QueryWrapper<Problem> queryWrapper = new QueryWrapper<>();
if(StringUtils.isNotBlank(param)){
queryWrapper.like("dname",param);
}
Page<Problem> page = new Page<>(pageNum,pageSize);
return problemMapper.selectPage(page,queryWrapper);
}
/**
* 新增一条问题药品信息
*
* @param problem
*/
@Override
public int addProblem(Problem problem) {
return problemMapper.insert(problem);
}
/**
* 修改一条问题药品信息
*
* @param problem
*/
@Override
public int editProblem(Problem problem) {
return problemMapper.updateById(problem);
}
/**
* 根据主键id查询一个问题药品对象
*
* @param id
* @return
*/
@Override
public Problem queryProblemById(Integer id) {
return problemMapper.selectById(id);
}
/**
* 根据主键id删除一个问题药品对象
*
* @param id
* @return
*/
@Override
public int delProblemById(Integer id) {
return problemMapper.deleteById(id);
}
}
5.4 创建controller控制层
package com.dh.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.dh.common.ResultMapUtil;
import com.dh.pojo.Problem;
import com.dh.service.ProblemService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.Date;
/**
* 问题药品相关的controller
*/
@Controller
@RequestMapping(value = "/problem")
public class ProblemController {
@Autowired
private ProblemService problemService;
/**
* 转向问题药品页面
*/
@RequestMapping
public String problem(){
return "/problem";
}
/**
* 分页查询问题药品列表
* value可以指定请求的参数
* value = "/xxx",method = RequestMethod.POST
* @param param 查询参数
* @param pageNum 起始页数
* @param pageSize 每页多少条数据
* @return
*/
@RequestMapping(value = "/problemQueryPage")
@ResponseBody
public Object problemQueryPage(String param, @RequestParam(defaultValue = "1")int pageNum,@RequestParam(defaultValue = "10")int pageSize){
try{
//查询对应的数据
IPage<Problem> iPage = problemService.selectProblemPage(pageNum,pageSize,param);
//获取mysql的分页查询结果
return ResultMapUtil.getHashMapMysqlPage(iPage);
} catch (Exception e){
//如果出错,把异常信息返回给前端
return ResultMapUtil.getHashMapException(e);
}
}
/**
* 转向问题药品新增页面
* @return 跳转problemPage.html
*/
@RequestMapping(value = "/problemPage")
public String problemPage(){
return "/problemPage";
}
/**
* 添加一个问题药品
*/
@RequestMapping(value = "/problemAdd")
@ResponseBody
public Object problemAdd(Problem problem){
try{
//获取当前时间
problem.setCreatetime(new Date());
//新增一条出入库信息
int i = problemService.addProblem(problem);
//保存,并统一格式返回
return ResultMapUtil.getHashMapSave(i);
} catch (Exception e){
//如果出错,把异常信息返回给前端
return ResultMapUtil.getHashMapException(e);
}
}
/**
* 转向问题药品编辑页面
* @param id 查询的id
* @param model
* @return
*/
@RequestMapping(value = "/problemQueryById")
public String problemQueryById(@RequestParam(name = "id",required = true)Integer id, Model model){
//根据id查询药品
Problem problem = problemService.queryProblemById(id);
//model调用逻辑处理
model.addAttribute("obj",problem);
//跳转页problemPage.html
return "/problemPage";
}
/**
* 修改一个问题药品
* @param problem 实体类
* @return 返回修改的数据
*/
@RequestMapping(value = "/problemEdit")
@ResponseBody
public Object problemEdit(Problem problem){
try{
//修改一条药品出入库信息
int i = problemService.editProblem(problem);
//保存,并统一格式返回
return ResultMapUtil.getHashMapSave(i);
} catch (Exception e){
//如果出错,把异常信息返回给前端
return ResultMapUtil.getHashMapException(e);
}
}
/**
* 删除一个问题药品
* @param id 根据id删除
* @return 返回删除的数据
*/
@RequestMapping(value = "/problemDelById")
@ResponseBody
public Object problemDelById(Integer id){
try{
//根据id删除数据
int i = problemService.delProblemById(id);
//保存,并统一格式返回
return ResultMapUtil.getHashMapDel(i);
} catch (Exception e){
//如果出错,把异常信息返回给前端
return ResultMapUtil.getHashMapException(e);
}
}
}
六、问题管理后台页面
6.1 编写问题页面
problem.html
<!DOCTYPE html>
<html lang="zh_CN" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>问题药品信息管理</title>
<link rel="stylesheet" th:href="@{/static/layui/css/layui.css}" media="all">
<link rel="stylesheet" th:href="@{/static/admin/style.css}" media="all">
<script type="text/html" id="indexTpl">
{{d.LAY_TABLE_INDEX+1}}
</script>
</head>
<body class="layui-layout-body">
<div class="layui-fluid">
<div class="layui-row layui-col-space15">
<div class="layui-col-md12">
<div class="layui-card">
<div class="layui-card-header">问题药品信息列表</div>
<div class="layui-card-body">
<table class="layui-hide" id="main-table" lay-filter="main-table"></table>
<script type="text/html" id="toolbarDemo">
<span class="layui-inline" lay-event="add"><i class="layui-icon"></i> </span>
<span class="layui-inline" style="width: 240px;">
<input class="layui-input" name="param" id="param" placeholder="根据药品名称查询" autocomplete="off">
</span>
<span class="layui-btn layui-btn-sm layui-bg-red" lay-event="querySearch">
<i class="layui-icon"></i>查询
</span>
</script>
<script type="text/html" id="barDemo">
<a class="layui-btn layui-btn-xs" lay-event="edit">编辑</a>
<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a>
</script>
</div>
</div>
</div>
</div>
</div>
<script th:src="@{/static/layui/layui.js}"></script>
<script>
layui.use(['table','form'],function () {
var $ = layui.$;
var table = layui.table;
table.render({
elem: '#main-table',
height: 650,
url: '/problem/problemQueryPage',
method: 'POST',
page: true,
id: 'table-load',
toolbar: '#toolbarDemo',
cols: [
[
{title: '序号',templet: '#indexTpl',width: 60,align:'center'},
{field:'dname',title:'药品名称',algin:'center'},
{field:'dcount',title:'问题药品数量',algin:'center'},
{field:'dprice',title:'药品单价',algin:'center'},
{field:'createtime',title:'操作时间',algin:'center',
templet:"<div>{{layui.util.toDateString(d.createtime,'yyyy-MM-dd HH:mm:ss')}}</div>"},
{title:'操作',align:'center',toolbar:'#barDemo',fixed:'right'}
]
]
});
//监听头工具栏事件
table.on('toolbar(main-table)',function (obj) {
switch (obj.event) {
case 'add':
layer.open({
type: 2,
title: '新增问题药品信息',
content: '/problem/problemPage',
shade:[0.8,'#393d49'],
area:['600px','530px'],
btn:['确定','取消'],
yes:function (index,layero) {
var iframeWindow = window['layui-layer-iframe'+index];
var submit = layero.find('iframe').contents().find("#LAY-front-submit");
//监听提交
iframeWindow.layui.form.on('submit(LAY-front-submit)',function (data) {
var field = data.field;
$.ajax({
url: '/problem/problemAdd',
data: field,
async: false,
cache: false,
success: function (str) {
if(str.code === 0){
table.reload('table-load');
}
layer.msg(str.msg,{icon:str.icon,anim:str.anim});
}
});
layer.close(index); //关闭弹层
});
submit.trigger('click');
},
success:function (layero,index) {
}
});
break;
case 'querySearch':
var param = $('#param').val();
table.reload('table-load',{
where: {
param: param
}
});
$('#param').val(param);
break;
}
});
//监听编辑、删除
table.on('tool(main-table)',function (obj) {
var data = obj.data;
switch (obj.event) {
case 'edit':
layer.open({
type: 2,
title: '编辑问题药品信息',
content: '/problem/problemQueryById?id=' +data.id,
shade:[0.8,'#393d49'],
area:['600px','500px'],
btn:['确定','取消'],
yes:function (index,layero) {
var iframeWindow = window['layui-layer-iframe'+index];
var submit = layero.find('iframe').contents().find("#LAY-front-submit");
//监听提交
iframeWindow.layui.form.on('submit(LAY-front-submit)',function (data) {
var field = data.field;
$.ajax({
url: '/problem/problemEdit',
data: field,
async: false,
cache: false,
success: function (str) {
if(str.code === 0){
table.reload('table-load');
}
layer.msg(str.msg,{icon:str.icon,anim:str.anim});
}
});
layer.close(index); //关闭弹层
});
submit.trigger('click');
},
success:function (layero,index) {
}
});
break;
case 'del':
layer.confirm('确认要删除吗?',function (index) {
$.ajax({
url: '/problem/problemDelById?id=' +data.id,
data: null,
async: false,
cache: false,
success: function (str) {
table.reload('table-load');
layer.msg(str.msg,{icon:str.icon,anim:str.anim});
}
});
})
break;
}
});
});
</script>
</body>
</html>
6.2 编写问题编辑页面
problemPage.html
<!DOCTYPE html>
<html lang="zh_CN" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>问题药品信息</title>
<link rel="stylesheet" th:href="@{/static/layui/css/layui.css}" media="all">
<link rel="stylesheet" th:href="@{/static/admin/style.css}" media="all">
</head>
<body>
<div class="layui-fluid">
<div class="layui-card">
<div class="layui-card-body" style="padding: 15px;">
<form class="layui-form layui-form-pane" action="">
<input name="id" th:value="${obj?.id}" class="layui-input layui-hide"/>
<div class="layui-form-item">
<label class="layui-form-label">药品名称</label>
<div class="layui-input-block">
<select name="dname" id="dname"></select>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">药品数量</label>
<div class="layui-input-block">
<input type="text" name="dcount" th:value="${obj?.dcount}" lay-verify="required" placeholder="请输入数量" autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">药品单价</label>
<div class="layui-input-block">
<input type="text" name="dprice" th:value="${obj?.dprice}" lay-verify="required" placeholder="请输入药品单价" autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">问题原因</label>
<div class="layui-input-block">
<textarea name="reason" th:text="${obj?.reason}" lay-verify="required" placeholder="请输入问题原因" autocomplete="off" class="layui-textarea"></textarea>
</div>
</div>
<div class="layui-form-item layui-hide">
<input type="button" lay-submit lay-filter="LAY-front-submit" id="LAY-front-submit" value="确认">
</div>
</form>
</div>
</div>
</div>
<script th:src="@{/static/layui/layui.js}"></script>
<script>
layui.use(['form'],function () {
var $ = layui.$;
var form = layui.form;
//当前药品的值
var currentDname = '[[${obj?.dname}]]';
//获取供应商列表
$.ajax({
url: '/druginfo/druginfoList',
dataType:'json',
type:'post',
cache:false,
success:function (data) {
$('#dname').prepend("<option value=''>请选择</option>");
for(var i=0;i<data.data.length;i++){
if(data.data[i].name==currentDname){
$('#dname').append("<option selected value='"+data.data[i].name+"'>"+data.data[i].name+"</option>");
}else{
$('#dname').append("<option value='"+data.data[i].name+"'>"+data.data[i].name+"</option>");
}
}
form.render(); //下拉列表渲染,把内容加载进去
}
});
});
</script>
</body>
</html>
6.3 运行测试
七、药品保质期检查
7.1 跳转药品保质期页面
DruginfoController
/**
* 转向药品保质期检查页面
*/
@RequestMapping(value = "/warranty")
public String warranty(){
return "/warranty";
}
7.2 编写药品保质期页面
warranty.html
<!DOCTYPE html>
<html lang="zh_CN" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>药品保质期检查</title>
<link rel="stylesheet" th:href="@{/static/layui/css/layui.css}" media="all">
<link rel="stylesheet" th:href="@{/static/admin/style.css}" media="all">
<script type="text/html" id="indexTpl">
{{d.LAY_TABLE_INDEX+1}}
</script>
</head>
<body class="layui-layout-body">
<div class="layui-fluid">
<div class="layui-row layui-col-space15">
<div class="layui-col-md12">
<div class="layui-card">
<div class="layui-card-header">药品保质期检查</div>
<div class="layui-card-body">
<table class="layui-hide" id="main-table" lay-filter="main-table"></table>
<script type="text/html" id="toolbarDemo">
<span class="layui-inline" lay-event="add"><i class="layui-icon"></i> </span>
<span class="layui-inline" style="width: 240px;">
<input class="layui-input" name="param" id="param" placeholder="根据药品名称查询" autocomplete="off">
</span>
<span class="layui-btn layui-btn-sm layui-bg-red" lay-event="querySearch">
<i class="layui-icon"></i>查询
</span>
</script>
</div>
</div>
</div>
</div>
</div>
<script th:src="@{/static/layui/layui.js}"></script>
<script>
layui.use(['table','form'],function () {
var $ = layui.$;
var table = layui.table;
table.render({
elem: '#main-table',
height: 650,
url: '/druginfo/druginfoQueryPage',
method: 'POST',
page: true,
id: 'table-load',
toolbar: '#toolbarDemo',
cols: [
[
{title: '序号',templet: '#indexTpl',width: 60,align:'center'},
{field:'name',title:'药品名称',algin:'center'},
{field:'warrenty',title:'保质期(月)',algin:'center'},
{field:'producttime',title:'生产时间',algin:'center',
templet:"<div>{{layui.util.toDateString(d.producttime,'yyyy-MM-dd')}}</div>"},
{field:'createtime',title:'当前时间',algin:'center',
templet:"<div>{{layui.util.toDateString(d.createtime,'yyyy-MM-dd')}}</div>"},
{title:'是否过期',align:'center',templet: isWarranty}
]
]
});
//监听头工具栏事件
table.on('toolbar(main-table)',function (obj) {
switch (obj.event) {
case 'querySearch':
var param = $('#param').val();
table.reload('table-load',{
where: {
param: param
}
});
$('#param').val(param);
break;
}
});
//计算药品是否过期
function isWarranty(d) {
//生产日期
debugger
var p_time = d.producttime;
p_time = p_time.split('-');
p_time = parseInt(p_time[0])*12 + parseInt(p_time[1]);
//获取当前时间
var date = new Date();
var year = date.getFullYear();
var month = date.getMonth() + 1;
var now_year_month = year*12 + month;
var m = now_year_month - (p_time + parseInt(d.warrenty));
if(m>=1){
return "<span style='color:red'>已过期" + m +"个月</span>";
}else if(m==0){
return "<span style='color:#ffab00'>保质期不满一个月</span>";
}else{
return "<span style='color:green;'>未过期,剩余" + Math.abs(m) +"个月</span>";
}
}
});
</script>
</body>
</html>
7.3运行测试