文章目录
- 运行若依项目
- 科室管理
- 科室查询-后端代码实现
- 科室查询-前端代码实现
- 科室名称状态搜索
- 科室删除-后端代码实现
- 科室删除-前端代码实现
- 科室新增-后端代码实现
- 科室新增-前端代码实现
- 科室修改-后端代码实现
- 前端代码实现
- 角色权限实现
运行若依项目
运行redis 创建数据库 修改数据库配置 启动后端 启动前端
先创建目录
新增菜单
新建角色 勾选所需的菜单
新建用户
分配角色
退出重新登录即可看到
新建模型和表字段
服务端代码文件分类 domain (pojo) controller mapper service
设计模型视图表结构
导出sql文件
navicat 执行sql语句创建下面的表
CREATE TABLE `his_depts` (
`depts_id` int(11) NOT NULL COMMENT '科室编号---deptsId',
`depts_name` varchar(255) NOT NULL COMMENT '科室名称---deptsName',
`depts_code` varchar(255) NOT NULL COMMENT '科室编码---deptsCode',
`depts_num` int(11) NOT NULL DEFAULT '0' COMMENT '科室挂号量 ---deptsNum',
`depts_leader` varchar(255) DEFAULT NULL COMMENT '科室领导---deptsLeader',
`depts_phone` varchar(255) DEFAULT NULL COMMENT '科室电话---deptsPhone',
`status` int(11) NOT NULL COMMENT '科室状态---status',
`create_by` varchar(255) DEFAULT NULL COMMENT '创建者---createBy',
`create_time` datetime DEFAULT NULL COMMENT '创建时间--createTime',
`update_by` varbinary(255) DEFAULT NULL COMMENT '更新者---updateBy',
`update_time` datetime DEFAULT NULL COMMENT '更新时间--updateTime'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO his_depts VALUES
(101,"内科","HIS-Nk",0,"雷哥","17512344321",1,"admin",NOW(),"admin",NOW()),
(102,"外科","HIS-WK",0,"雷哥","17512344321",1,"admin",NOW(),"admin",NOW()),
(103,"儿科","HIS-EK",0,"雷哥","17512344321",1,"admin",NOW(),"admin",NOW()),
(104,"妇科","HIS-FK",0,"雷哥","17512344321",1,"admin",NOW(),"admin",NOW()),
(105,"眼科","HIS-YK",0,"雷哥","17512344321",1,"admin",NOW(),"admin",NOW()),
(106,"耳鼻喉科","HIS-EBHK",0,"雷哥","17512344321",1,"admin",NOW(),"admin",NOW()),
(107,"口腔科","HIS-KQK",0,"雷哥","17512344321",1,"admin",NOW(),"admin",NOW()),
(108,"皮肤科","HIS-PFK",0,"雷哥","17512344321",1,"admin",NOW(),"admin",NOW()),
(109,"其他","HIS-OTHER",0,"雷哥","17512344321",1,"admin",NOW(),"admin",NOW());
科室管理
科室查询-后端代码实现
仿照岗位管理实现 对应表sys_post
通过代码生成器 导入表
复制HisDepts.java 代码到domain类
package com.ruoyi.system.domain;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
/**
* 【请填写功能名称】对象 his_depts
*
* @author ruoyi
* @date 2025-04-13
*/
public class HisDepts extends BaseEntity
{
private static final long serialVersionUID = 1L;
/** 科室编号---deptsId */
@Excel(name = "科室编号---deptsId")
private Long deptsId;
/** 科室名称---deptsName */
@Excel(name = "科室名称---deptsName")
private String deptsName;
/** 科室编码---deptsCode */
@Excel(name = "科室编码---deptsCode")
private String deptsCode;
/** 科室挂号量 ---deptsNum */
@Excel(name = "科室挂号量 ---deptsNum")
private Long deptsNum;
/** 科室领导---deptsLeader */
@Excel(name = "科室领导---deptsLeader")
private String deptsLeader;
/** 科室电话---deptsPhone */
@Excel(name = "科室电话---deptsPhone")
private String deptsPhone;
/** 科室状态---status */
@Excel(name = "科室状态---status")
private Long status;
public void setDeptsId(Long deptsId)
{
this.deptsId = deptsId;
}
public Long getDeptsId()
{
return deptsId;
}
public void setDeptsName(String deptsName)
{
this.deptsName = deptsName;
}
public String getDeptsName()
{
return deptsName;
}
public void setDeptsCode(String deptsCode)
{
this.deptsCode = deptsCode;
}
public String getDeptsCode()
{
return deptsCode;
}
public void setDeptsNum(Long deptsNum)
{
this.deptsNum = deptsNum;
}
public Long getDeptsNum()
{
return deptsNum;
}
public void setDeptsLeader(String deptsLeader)
{
this.deptsLeader = deptsLeader;
}
public String getDeptsLeader()
{
return deptsLeader;
}
public void setDeptsPhone(String deptsPhone)
{
this.deptsPhone = deptsPhone;
}
public String getDeptsPhone()
{
return deptsPhone;
}
public void setStatus(Long status)
{
this.status = status;
}
public Long getStatus()
{
return status;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
.append("deptsId", getDeptsId())
.append("deptsName", getDeptsName())
.append("deptsCode", getDeptsCode())
.append("deptsNum", getDeptsNum())
.append("deptsLeader", getDeptsLeader())
.append("deptsPhone", getDeptsPhone())
.append("status", getStatus())
.append("createBy", getCreateBy())
.append("createTime", getCreateTime())
.append("updateBy", getUpdateBy())
.append("updateTime", getUpdateTime())
.toString();
}
}
仿照SysPostMapper格式 创建HisDeptsMapper文件 到mapper文件夹里
创建mapper 和 mapper.xml
package com.ruoyi.system.mapper;
import com.ruoyi.system.domain.HisDepts;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
/**
* @author Admin
* @title: HisDeptsMapper
* @projectName RuoYi-Vue-master
* @description: HisDeptsMapper
* @date 2025/4/13 13:35
*/
@Mapper
public interface HisDeptsMapper {
List<HisDepts> selectHisDeptsList(HisDepts hisDepts);
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.system.mapper.HisDeptsMapper">
<select id="selectHisDeptsList" resultType="hisDepts">
select * from his_depts
<where>
<if test="deptsName != null and deptsName != ''">
and depts_name like concat('%', #{deptName}, '%')</if>
<if test="status != null">
and status = #{status}</if>
</where>
</select>
</mapper>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.system.mapper.HisDeptsMapper">
<sql id="selectHisDeptsVo">
select depts_id, depts_name, depts_code, depts_num, depts_leader, depts_phone, status, create_by, create_time, update_by, update_time from his_depts
</sql>
<select id="selectHisDeptsList" resultType="hisDepts">
<include refid="selectHisDeptsVo"/>
<where>
<if test="deptsName != null and deptsName != ''">
and depts_name like concat('%', #{deptName}, '%')</if>
<if test="status != null">
and status = #{status}</if>
</where>
</select>
</mapper>
创建service文件 和实现类
package com.ruoyi.system.service;
import com.ruoyi.system.domain.HisDepts;
import java.util.List;
/**
* @author Admin
* @title: IHisDeptsService
* @projectName RuoYi-Vue-master
* @description: IHisDeptsService
* @date 2025/4/13 13:49
*/
public interface IHisDeptsService {
List<HisDepts> selectDeptsList(HisDepts hisDepts);
}
仿照创建controller
package com.ruoyi.web.controller.system;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.system.domain.HisDepts;
import com.ruoyi.system.domain.SysPost;
import com.ruoyi.system.service.IHisDeptsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
* @author Admin
* @title: HisDeptController
* @projectName RuoYi-Vue-master
* @description: HisDeptController
* @date 2025/4/13 19:00
*/
@RestController
@RequestMapping("/his/depts")
public class HisDeptController extends BaseController {
@Autowired
private IHisDeptsService hisDeptsService;
/**
* 获取科室列表
*/
//@PreAuthorize("@ss.hasPermi('system:post:list')")
@GetMapping("/list")
public TableDataInfo list(HisDepts hisDepts)
{
startPage();
List<HisDepts> list = hisDeptsService.selectDeptsList(hisDepts);
return getDataTable(list);
}
}
科室查询-前端代码实现
新建菜单 系统设置
在系统设置下新增菜单 科室管理
参考岗位管理路由参数/system/post
分析若依代码
岗位管理组件路径 system/post/index
对应数据库下的组件参数
复制前端代码post下的index.vue
仿照 岗位管理post前端代码 在views目录下创建his/depts/index.vue
修改科室管理组件路径参数为 his/depts/index
点击菜单 科室管理 即可看到页面显示
修改前端代码
状态值获取
<el-select v-model="queryParams.status" placeholder="科室状态" clearable>
<el-option
v-for="dict in dict.type.sys_normal_disable"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
获取状态函数为main.js下
import { getDicts } from "@/api/system/dict/data";
// 根据字典类型查询字典数据信息
export function getDicts(dictType) {
return request({
url: '/system/dict/data/type/' + dictType,
method: 'get'
})
}
取字典里的数据由前端封装函数调用 即获取到
去掉导出按钮
修改表单列表
获取岗位列表代码
import { listPost, getPost, delPost, addPost, updatePost } from "@/api/system/post";
// 查询参数
queryParams: {
pageNum: 1,
pageSize: 10,
postCode: undefined,
postName: undefined,
status: undefined
},
created() {
this.getList();
},
getList() {
this.loading = true;
listPost(this.queryParams).then(response => {
this.postList = response.rows;
this.total = response.total;
this.loading = false;
});
},
复制api/system/post.js 到his下depts.js
修改为科室代码
import { listPost, getPost, delPost, addPost, updatePost } from "@/api/his/depts";
// 查询科室列表
export function listPost(query) {
return request({
url: '/his/depts/list',
method: 'get',
params: query
})
}
打印列表显示为空 console.log(response.rows) 更换匹配参数
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="科室ID" align="center" prop="deptsId" />
<el-table-column label="科室名称" align="center" prop="deptsName" />
<el-table-column label="科室编号" align="center" prop="deptsCode" />
<el-table-column label="科室挂号量" align="center" prop="deptsNum" />
<el-table-column label="负责人" align="center" prop="deptsLeader" />
<el-table-column label="电话" align="center" prop="deptsPhone" />
<el-table-column label="状态" align="center" prop="status">
<template slot-scope="scope">
<dict-tag :options="dict.type.sys_normal_disable" :value="scope.row.status"/>
</template>
</el-table-column>
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</el-table-column>
打印数据为空 后端mapper没有对应
修改后端代码 列名和实体名不一样 采用resultMap映射
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.system.mapper.HisDeptsMapper">
<resultMap type="HisDepts" id="HisDeptsResult">
<result property="deptsId" column="depts_id" />
<result property="deptsName" column="depts_name" />
<result property="deptsCode" column="depts_code" />
<result property="deptsNum" column="depts_num" />
<result property="deptsLeader" column="depts_leader" />
<result property="deptsPhone" column="depts_phone" />
<result property="status" column="status" />
<result property="createBy" column="create_by" />
<result property="createTime" column="create_time" />
<result property="updateBy" column="update_by" />
<result property="updateTime" column="update_time" />
</resultMap>
<sql id="selectHisDeptsVo">
select depts_id, depts_name, depts_code, depts_num, depts_leader, depts_phone, status, create_by, create_time, update_by, update_time from his_depts
</sql>
<select id="selectHisDeptsList" resultMap="HisDeptsResult">
<include refid="selectHisDeptsVo"/>
<where>
<if test="deptsName != null and deptsName != ''">
and depts_name like concat('%', #{deptsName}, '%')</if>
<if test="status != null">
and status = #{status}</if>
</where>
</select>
</mapper>
完整前端代码
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="科室名称" prop="postCode">
<el-input
v-model="queryParams.postCode"
placeholder="请输入科室名称"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="状态" prop="status">
<el-select v-model="queryParams.status" placeholder="科室状态" clearable>
<el-option
v-for="dict in dict.type.sys_normal_disable"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @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="el-icon-plus"
size="mini"
@click="handleAdd"
v-hasPermi="['system:post:add']"
>新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="success"
plain
icon="el-icon-edit"
size="mini"
:disabled="single"
@click="handleUpdate"
v-hasPermi="['system:post:edit']"
>修改</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="danger"
plain
icon="el-icon-delete"
size="mini"
:disabled="multiple"
@click="handleDelete"
v-hasPermi="['system:post:remove']"
>删除</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="postList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="科室ID" align="center" prop="deptsId" />
<el-table-column label="科室名称" align="center" prop="deptsName" />
<el-table-column label="科室编号" align="center" prop="deptsCode" />
<el-table-column label="科室挂号量" align="center" prop="deptsNum" />
<el-table-column label="负责人" align="center" prop="deptsLeader" />
<el-table-column label="电话" align="center" prop="deptsPhone" />
<el-table-column label="状态" align="center" prop="status">
<template slot-scope="scope">
<dict-tag :options="dict.type.sys_normal_disable" :value="scope.row.status"/>
</template>
</el-table-column>
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['system:post:edit']"
>修改</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPermi="['system:post:remove']"
>删除</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total>0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
<!-- 添加或修改岗位对话框 -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="岗位名称" prop="postName">
<el-input v-model="form.postName" placeholder="请输入岗位名称" />
</el-form-item>
<el-form-item label="岗位编码" prop="postCode">
<el-input v-model="form.postCode" placeholder="请输入编码名称" />
</el-form-item>
<el-form-item label="岗位顺序" prop="postSort">
<el-input-number v-model="form.postSort" controls-position="right" :min="0" />
</el-form-item>
<el-form-item label="岗位状态" prop="status">
<el-radio-group v-model="form.status">
<el-radio
v-for="dict in dict.type.sys_normal_disable"
:key="dict.value"
:label="dict.value"
>{{dict.label}}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm">确 定</el-button>
<el-button @click="cancel">取 消</el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { listPost, getPost, delPost, addPost, updatePost } from "@/api/his/depts";
export default {
name: "Post",
dicts: ['sys_normal_disable'],
data() {
return {
// 遮罩层
loading: true,
// 选中数组
ids: [],
// 非单个禁用
single: true,
// 非多个禁用
multiple: true,
// 显示搜索条件
showSearch: true,
// 总条数
total: 0,
// 岗位表格数据
postList: [],
// 弹出层标题
title: "",
// 是否显示弹出层
open: false,
// 查询参数
queryParams: {
pageNum: 1,
pageSize: 10,
postCode: undefined,
postName: undefined,
status: undefined
},
// 表单参数
form: {},
// 表单校验
rules: {
postName: [
{ required: true, message: "岗位名称不能为空", trigger: "blur" }
],
postCode: [
{ required: true, message: "岗位编码不能为空", trigger: "blur" }
],
postSort: [
{ required: true, message: "岗位顺序不能为空", trigger: "blur" }
]
}
};
},
created() {
this.getList();
},
methods: {
/** 查询岗位列表 */
getList() {
this.loading = true;
listPost(this.queryParams).then(response => {
console.log(response.rows)
this.postList = response.rows;
this.total = response.total;
this.loading = false;
});
},
// 取消按钮
cancel() {
this.open = false;
this.reset();
},
// 表单重置
reset() {
this.form = {
postId: undefined,
postCode: undefined,
postName: undefined,
postSort: 0,
status: "0",
remark: undefined
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
// 多选框选中数据
handleSelectionChange(selection) {
this.ids = selection.map(item => item.postId)
this.single = selection.length!=1
this.multiple = !selection.length
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加岗位";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const postId = row.postId || this.ids
getPost(postId).then(response => {
this.form = response.data;
this.open = true;
this.title = "修改岗位";
});
},
/** 提交按钮 */
submitForm: function() {
this.$refs["form"].validate(valid => {
if (valid) {
if (this.form.postId != undefined) {
updatePost(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
} else {
addPost(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
}
}
});
},
/** 删除按钮操作 */
handleDelete(row) {
const postIds = row.postId || this.ids;
this.$modal.confirm('是否确认删除岗位编号为"' + postIds + '"的数据项?').then(function() {
return delPost(postIds);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {});
},
/** 导出按钮操作 */
handleExport() {
this.download('system/post/export', {
...this.queryParams
}, `post_${new Date().getTime()}.xlsx`)
}
}
};
</script>
接口代码
import request from '@/utils/request'
// 查询科室列表
export function listPost(query) {
return request({
url: '/his/depts/list',
method: 'get',
params: query
})
}
// 查询岗位详细
export function getPost(postId) {
return request({
url: '/system/post/' + postId,
method: 'get'
})
}
// 新增岗位
export function addPost(data) {
return request({
url: '/system/post',
method: 'post',
data: data
})
}
// 修改岗位
export function updatePost(data) {
return request({
url: '/system/post',
method: 'put',
data: data
})
}
// 删除岗位
export function delPost(postId) {
return request({
url: '/system/post/' + postId,
method: 'delete'
})
}
科室名称状态搜索
<el-form-item label="科室名称" prop="postCode">
<el-input
v-model="queryParams.deptsName"
placeholder="请输入科室名称"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="状态" prop="status">
<el-select v-model="queryParams.status" placeholder="科室状态" clearable>
<el-option
v-for="dict in dict.type.sys_normal_disable"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
科室删除-后端代码实现
mapper文件
@Mapper
public interface HisDeptsMapper {
List<HisDepts> selectHisDeptsList(HisDepts hisDepts);
int deleteHisDeptsById(Long deptsId);
}
xml文件
<delete id="deleteHisDeptsById" parameterType="Long">
delete from his_depts where depts_id = #{deptsId}
</delete>
service方法
/**
* 删除科室信息
*
* @param deptsId
* @return 结果
*/
public int deleteDeptsById(Long deptsId);
impl实现类
@Override
public int deleteDeptsById(Long deptsId) {
return hisDeptsMapper.deleteHisDeptsById(deptsId);
}
controller借口方法
/**
* 科室删除
*/
//@PreAuthorize("@ss.hasPermi('system:post:remove')")
@Log(title = "科室管理", businessType = BusinessType.DELETE)
@DeleteMapping("/{deptsId}")
public AjaxResult remove(@PathVariable Long deptsId)
{
return toAjax(hisDeptsService.deleteDeptsById(deptsId));
}
科室删除-前端代码实现
import { listPost, getPost, delPost, addPost, updatePost } from "@/api/his/depts";
/** 删除按钮操作 */
handleDelete(row) {
const postIds = row.deptsId || this.ids;
this.$modal.confirm('是否确认删除科室编号为"' + postIds + '"的数据项?').then(function() {
return delPost(postIds);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {});
},
// 删除科室
export function delPost(postId) {
return request({
url: '/his/depts/' + postId,
method: 'delete'
})
}
科室新增-后端代码实现
修改HisDeptsMapper.java代码
int insertHisDepts(HisDepts hisDepts);
修改HisDeptsMapper.xml代码
<insert id="insertHisDepts" parameterType="HisDepts">
insert into his_depts
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="deptsId != null">depts_id,</if>
<if test="deptsName != null and deptsName != ''">depts_name,</if>
<if test="deptsCode != null and deptsCode != ''">depts_code,</if>
<if test="deptsNum != null">depts_num,</if>
<if test="deptsLeader != null">depts_leader,</if>
<if test="deptsPhone != null">depts_phone,</if>
<if test="status != null">status,</if>
<if test="createBy != null">create_by,</if>
<if test="createTime != null">create_time,</if>
<if test="updateBy != null">update_by,</if>
<if test="updateTime != null">update_time,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="deptsId != null">#{deptsId},</if>
<if test="deptsName != null and deptsName != ''">#{deptsName},</if>
<if test="deptsCode != null and deptsCode != ''">#{deptsCode},</if>
<if test="deptsNum != null">#{deptsNum},</if>
<if test="deptsLeader != null">#{deptsLeader},</if>
<if test="deptsPhone != null">#{deptsPhone},</if>
<if test="status != null">#{status},</if>
<if test="createBy != null">#{createBy},</if>
<if test="createTime != null">#{createTime},</if>
<if test="updateBy != null">#{updateBy},</if>
<if test="updateTime != null">#{updateTime},</if>
</trim>
</insert>
添加接口IHisDeptsService.java
/**
* 新增科室信息
* @param hisDepts
* @return
*/
public int insertHisDepts(HisDepts hisDepts);
实现接口HisDeptsServiceImpl.java
/**
* 科室新增
* @param hisDepts
* @return
*/
@Override
public int insertHisDepts(HisDepts hisDepts) {
return hisDeptsMapper.insertHisDepts(hisDepts);
}
仿照岗位管理SysPostController 修改controller类代码
//@PreAuthorize("@ss.hasPermi('system:post:add')")
@Log(title = "科室新增", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@Validated @RequestBody HisDepts hisDepts)
{
//if (!postService.checkPostNameUnique(post))
//{
// return error("新增岗位'" + post.getPostName() + "'失败,岗位名称已存在");
//}
//else if (!postService.checkPostCodeUnique(post))
//{
// return error("新增岗位'" + post.getPostName() + "'失败,岗位编码已存在");
//}
//添加创建人名称
hisDepts.setCreateBy(getUsername());
hisDepts.setCreateTime(new Date());
return toAjax(hisDeptsService.insertHisDepts(hisDepts));
}
这里引入@Validated注解 实体类 可以添加@NotBlank 注解
@NotBlank(message = "科室名称不能为空")
@Excel(name = "科室名称---deptsName")
private String deptsName;
修改数据库表设计 id设置自增1 时间设置timestamp格式
科室新增-前端代码实现
修改表单代码
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="岗位名称" prop="deptsName">
<el-input v-model="form.deptsName" placeholder="请输入科室名称" />
</el-form-item>
<el-form-item label="科室编码" prop="deptsCode">
<el-input v-model="form.deptsCode" placeholder="请输入科室编码" />
</el-form-item>
<el-form-item label="负责人" prop="deptsLeader">
<el-input v-model="form.deptsLeader" placeholder="请输入负责人" />
</el-form-item>
<el-form-item label="电话" prop="deptsPhone">
<el-input v-model="form.deptsPhone" placeholder="请输入电话" />
</el-form-item>
<el-form-item label="挂号量" prop="deptsNum">
<el-input v-model="form.deptsNum" placeholder="请输入挂号量" />
</el-form-item>
<el-form-item label="科室状态" prop="status">
<el-radio-group v-model="form.status">
<el-radio
v-for="dict in dict.type.sys_normal_disable"
:key="dict.value"
:label="dict.value"
>{{dict.label}}</el-radio>
</el-radio-group>
</el-form-item>
</el-form>
表单重置代码修改
// 表单重置
reset() {
this.form = {
deptsId: undefined,
deptsCode: undefined,
deptsName: undefined,
deptsLeader: undefined,
deptsPhone: undefined,
deptsNum: 0,
status: "0",
};
this.resetForm("form");
},
表单校验
// 表单校验
rules: {
deptsName: [
{ required: true, message: "科室名称不能为空", trigger: "blur" }
],
deptsCode: [
{ required: true, message: "科室编码不能为空", trigger: "blur" }
],
deptsNum: [
{ required: true, message: "挂号量不能为空", trigger: "blur" }
]
}
提交按钮代码修改
/** 提交按钮 */
submitForm: function() {
this.$refs["form"].validate(valid => {
if (valid) {
if (this.form.deptsId != undefined) {
updatePost(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
} else {
addPost(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
}
}
});
},
新增岗位api接口路径代码修改
// 新增岗位
export function addPost(data) {
return request({
url: '/his/depts',
method: 'post',
data: data
})
}
科室修改-后端代码实现
科室信息回显
HisDeptsMapper.xml
<select id="selectHisDeptsById" resultMap="HisDeptsResult">
<include refid="selectHisDeptsVo"/>
where depts_id = #{deptsId}
</select>
HisDeptsMapper.java
HisDepts selectHisDeptsById(Long deptsId);
IHisDeptsService.java
HisDepts selectHisDeptsById(Long deptsId);
IHisDeptsServiceImpl.java
@Override
public HisDepts selectHisDeptsById(Long deptsId) {
return hisDeptsMapper.selectHisDeptsById(deptsId);
}
HisDeptController.java
/**
* 根据科室id回显信息
* @param deptsId
* @return
*/
//@PreAuthorize("@ss.hasPermi('system:post:query')")
@GetMapping(value = "/{deptsId}")
public AjaxResult getInfo(@PathVariable Long deptsId)
{
return success(hisDeptsService.selectHisDeptsById(deptsId));
}
修改科室
<update id="updateHisDepts">
update his_depts
<trim prefix="SET" suffixOverrides=",">
<if test="deptsName != null and deptsName != ''">depts_name = #{deptsName},</if>
<if test="deptsCode != null and deptsCode != ''">depts_code = #{deptsCode},</if>
<if test="deptsNum != null">depts_num = #{deptsNum},</if>
<if test="deptsLeader != null">depts_leader = #{deptsLeader},</if>
<if test="deptsPhone != null">depts_phone = #{deptsPhone},</if>
<if test="status != null">status = #{status},</if>
<if test="createBy != null">create_by = #{createBy},</if>
<if test="createTime != null">create_time = #{createTime},</if>
<if test="updateBy != null">update_by = #{updateBy},</if>
<if test="updateTime != null">update_time = #{updateTime},</if>
</trim>
where depts_id = #{deptsId}
</update>
HisDeptsMapper.java
int updateHisDepts(HisDepts hisDepts);
IHisDeptsService.java
int updateHisDepts(HisDepts hisDepts);
IHisDeptsServiceImpl.java
@Override
public int updateHisDepts(HisDepts hisDepts) {
return hisDeptsMapper.updateHisDepts(hisDepts);
}
HisDeptController.java
/**
* 修改科室
*/
//@PreAuthorize("@ss.hasPermi('system:post:edit')")
@Log(title = "科室管理", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@Validated @RequestBody HisDepts hisDepts)
{
//if (!postService.checkPostNameUnique(post))
//{
// return error("修改岗位'" + post.getPostName() + "'失败,岗位名称已存在");
//}
//else if (!postService.checkPostCodeUnique(post))
//{
// return error("修改岗位'" + post.getPostName() + "'失败,岗位编码已存在");
//}
hisDepts.setUpdateBy(getUsername());
hisDepts.setUpdateTime(new Date());
return toAjax(hisDeptsService.updateHisDepts(hisDepts));
}
前端代码实现
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const deptsId = row.deptsId || this.ids
getPost(deptsId).then(response => {
this.form = response.data;
this.form.status = this.form.status.toString();
this.open = true;
this.title = "修改岗位";
});
},
// 查询岗位详细
export function getPost(postId) {
return request({
url: '/his/depts/' + postId,
method: 'get'
})
}
// 修改科室
export function updatePost(data) {
return request({
url: '/his/depts',
method: 'put',
data: data
})
}
角色权限实现
普通用户没有界面权限 按钮权限操作
权限跟随菜单 修改菜单权限
给角色添加菜单权限
放开权限注解
/**
* 获取科室列表
*/
@PreAuthorize("@ss.hasPermi('his:depts:list')")
@GetMapping("/list")
public TableDataInfo list(HisDepts hisDepts) {
startPage();
List<HisDepts> list = hisDeptsService.selectDeptsList(hisDepts);
return getDataTable(list);
}
前端放开权限代码
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="el-icon-plus"
size="mini"
@click="handleAdd"
v-hasPermi="['his:depts:add']"
>新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="success"
plain
icon="el-icon-edit"
size="mini"
:disabled="single"
@click="handleUpdate"
v-hasPermi="['his:depts:edit']"
>修改</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="danger"
plain
icon="el-icon-delete"
size="mini"
:disabled="multiple"
@click="handleDelete"
v-hasPermi="['his:depts:remove']"
>删除</el-button>
</el-col>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['his:depts:edit']"
>修改</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPermi="['his:depts:remove']"
>删除</el-button>
</template>
</el-table-column>
添加权限按钮
角色添加上权限按钮
放开权限代码
@PreAuthorize("@ss.hasPermi('his:depts:list')")
@PreAuthorize("@ss.hasPermi('his:depts:add')")
@PreAuthorize("@ss.hasPermi('his:depts:query')")
@PreAuthorize("@ss.hasPermi('his:depts:edit')")
@PreAuthorize("@ss.hasPermi('his:depts:remove')")