目录:
(1)医院管理-查询所有子节点接口
(2)医院列表-前端整合
(3)更新医院上线状态-功能实现
(1)医院管理-查询所有子节点接口
先做一个省的查询
在DictContrlller:中添加方法:
//根据dictCode查询下级节点(所有省)
@ApiOperation(value = "根据dictCode获取下级节点")
@GetMapping(value = "/findByDictCode/{dictCode}")
public Result<List<Dict>> findByDictCode(@ApiParam(name = "dictCode", value = "节点编码", required = true)
@PathVariable String dictCode){
//调用service方法根据dictCode查询下级节点
List<Dict> list = dictService.findByDictCode(dictCode);
return Result.ok(list);
}
查询市用这个接口:
DictService 接口:
package com.atguigu.yygh.cmn.service;
import com.atguigu.yygh.model.cmn.Dict;
import com.baomidou.mybatisplus.extension.service.IService;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
public interface DictService extends IService<Dict> {
//根据数据id查询子数据列表
List<Dict> findChlidData(Long id);
//导出数据字典接口
void exportDictData(HttpServletResponse response);
//导入数据字典
void importDictData(MultipartFile file);
//查询 医院等级
String getDictName(String dictCode, String value);
//根据dictCode查询下级节点
List<Dict> findByDictCode(String dictCode);
}
DictService Impl实现类:
//根据数据id查询子数据列表
@Cacheable(value = "dict",keyGenerator = "keyGenerator") //缓存注解
@Override
public List<Dict> findChlidData(Long id) {
QueryWrapper<Dict> wrapper=new QueryWrapper<>();
wrapper.eq("parent_id",id);
List<Dict> dictList = baseMapper.selectList(wrapper);
//向dictList集合中的每个Dict对象设置hasChildren属性
for (Dict dict:dictList){
Long dictId = dict.getId();
boolean ischild = this.isChildren(dictId);//调用下面方法获取是否有子节点
dict.setHasChildren(ischild);//设置属性
}
return dictList;
}
//根据dictCode查询下级节点
@Override
public List<Dict> findByDictCode(String dictCode) {
//根据dictCode获取对应的id
Dict codeDict = this.getDictByDictCode(dictCode);
if(null == codeDict){
return null;
}
//调用上面的方法据id查询子数据列表方法
List<Dict> childData = this.findChlidData(codeDict.getId());
return childData;
}
//根据dictCode获取Dict
private Dict getDictByDictCode(String dictCode){
QueryWrapper<Dict> wrapper=new QueryWrapper<>();
wrapper.eq("dict_code",dictCode);
Dict codedict = baseMapper.selectOne(wrapper);
return codedict;
}
成功查询出来数据:
(2)医院列表-前端整合
在前端项目:router下的index.js中添加一个新路由
在views下面创建hosp和list.vue
在api下面创建接口:
import request from '@/utils/request'
export default {
//医院列表
getHospList(page, limit, searchObj) {
return request({
url: `/admin/hosp/hospital/list/${page}/${limit}`,
method: 'get',
params: searchObj //传递一个对象
})
},
//根据dictCode查询所有子节点(所有省)
findByDictCode(dictCode) {
return request({
url: `/admin/cmn/dict/findByDictCode/${dictCode}`,
method: 'get'
})
},
//根据id查询子数据列表
findChildId(id) {
return request({
url: `/admin/cmn/dict/findChildData/${id}`,
method: 'get'
})
}
}
list.vue:
<template>
<div class="app-container">
<!-- 上面的查询表单 -->
<el-form :inline="true" class="demo-form-inline">
<el-form-item>
<el-select
v-model="searchObj.provinceCode"
placeholder="请选择省"
@change="provinceChanged"
>
<el-option
v-for="item in provinceList"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
</el-form-item>
<el-form-item>
<el-select
v-model="searchObj.cityCode"
placeholder="请选择市"
@change="cityChanged"
>
<el-option
v-for="item in cityList"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
</el-form-item>
<el-form-item>
<el-input v-model="searchObj.hosname" placeholder="医院名称" />
</el-form-item>
<el-button type="primary" icon="el-icon-search" @click="fetchData()"
>查询</el-button
>
<el-button type="default" @click="resetData()">清空</el-button>
</el-form>
<!-- banner列表 -->
<el-table
v-loading="listLoading"
:data="list"
border
fit
highlight-current-row
>
<el-table-column label="序号" width="60" align="center">
<template slot-scope="scope">
{{ (page - 1) * limit + scope.$index + 1 }}
</template>
</el-table-column>
<el-table-column label="医院logo">
<template slot-scope="scope">
<img
:src="'data:image/jpeg;base64,' + scope.row.logoData"
width="80"
/>
</template>
</el-table-column>
<el-table-column prop="hosname" label="医院名称" />
<el-table-column prop="param.hostypeString" label="等级" width="90" />
<el-table-column prop="param.fullAddress" label="详情地址" />
<el-table-column label="状态" width="80">
<template slot-scope="scope">
{{ scope.row.status === 0 ? "未上线" : "已上线" }}
</template>
</el-table-column>
<el-table-column prop="createTime" label="创建时间" />
<el-table-column label="操作" width="230" align="center">
</el-table-column>
</el-table>
<!-- 分页组件 -->
<el-pagination
:current-page="page"
:total="total"
:page-size="limit"
:page-sizes="[5, 10, 20, 30, 40, 50, 100]"
style="padding: 30px 0; text-align: center"
layout="sizes, prev, pager, next, jumper, ->, total, slot"
@current-change="fetchData"
@size-change="changeSize"
/>
</div>
</template>
<script>
import hospitalApi from "@/api/hosp";
export default {
data() {
//定义变量和初始值
return {
listLoading: true, // 数据是否正在加载
list: null, // 医院列表数据
total: 0, // 数据库中的总记录数
page: 1, // 默认页码
limit: 10, // 每页记录数
searchObj: {}, // 查询表单对象
provinceList: [], //所有省的集合
cityList: [], //所有市的集合
//districtList: [], //所有区的集合
};
},
created() {
//在页面渲染之前执行
//调用医院列表方法
this.fetchData();
//调用查询所有省的方法
this.findAllProvince();
},
methods: {
//定义方法进行请求接口的调用
//医院列表
fetchData(page = 1) {
console.log("翻页。。。" + page);
// 异步获取远程数据(ajax)
this.page = page;
hospitalApi
.getHospList(this.page, this.limit, this.searchObj)
.then((response) => {
//每页数据集合赋值给上面的list集合
this.list = response.data.content;
//总记录数
this.total = response.data.totalElements;
// 数据加载不显示
this.listLoading = false;
});
},
//查询所有省
findAllProvince() {
hospitalApi.findByDictCode("Province").then((reponse) => {
//赋值给上面的定义的省的集合
this.provinceList = reponse.data;
});
},
//点击某个省,显示里面市(联动)
provinceChanged() {
//初始化值
this.cityList = []; //市的集合清空
this.searchObj.cityCode = null;
//this.districtList = [];
//this.searchObj.districtCode = null;
//调用方法,根据省的id,查询下面的子节点
hospitalApi.findChildId(this.searchObj.provinceCode).then((response) => {
//把返回的数据赋值给cityList
this.cityList = response.data;
});
},
// 当分页页码发生改变的时候
changeSize(size) {
//每页显示条数的变化
this.limit = size;
this.fetchData(1);
},
//设置城市改变
cityChanged() {
this.$forceUpdate();
},
//重置表单数据
resetData() {
console.log("重置查询表单");
this.searchObj = {};
this.fetchData();
},
}
}
</script>
选择河北省: 出现了省市二级联动
(3)更新医院上线状态-功能实现
更新医院上线状态:
在HospitalController中添加方法:
//更新医院的上线状态
@ApiOperation(value = "更新上线状态")
@GetMapping("updateHospStatus/{id}/{status}")
public Result updateHospStatus( @ApiParam(name = "id", value = "医院id", required = true)
@PathVariable("id") String id,
@ApiParam(name = "status", value = "状态(0:未上线 1:已上线)", required = true)
@PathVariable("status") Integer status){
hospitalService.updateStatus(id, status);
return Result.ok();
}
HospitalService 接口:
package com.atguigu.yygh.hosp.service;
import com.atguigu.yygh.model.hosp.Hospital;
import com.atguigu.yygh.vo.hosp.HospitalQueryVo;
import org.springframework.data.domain.Page;
import java.util.Map;
public interface HospitalService {
//上传医院接口的方法
void save(Map<String, Object> paramMap);
//根据医院编号进行查询
Hospital getByHoscode(String hoscode);
//医院列表(条件查询分页)
Page<Hospital> selectHospPage(Integer page, Integer limit, HospitalQueryVo hospitalQueryVo);
//更新医院的上线状态
void updateStatus(String id, Integer status);
}
HospitalService Impl:实现类:
//更新医院的上线状态
@Override
public void updateStatus(String id, Integer status) {
//根基id查询医院的信息
Hospital hospital = hospitalRepository.findById(id).get();
//设置修改的值
hospital.setStatus(status);
hospital.setUpdateTime(new Date());
hospitalRepository.save(hospital);
}
在前端list.vue中加入按钮:
在api下的hosp.js添加新的访问接口:
在页面list.vue编写方法:
点击上线: