SpringBoot 3 + Flutter3 实战低代码运营管理-10章
参考资料1:https://pan.baidu.com/s/1sE93jgG-x3QwuVbbKtG_vQ 提取码:2nli
参考资料2:https://pan.baidu.com/s/1xXEFkvYj_0ZX2l2zZShA7w 提取码:d2nw
技术人员唯有多领域发展,才能具备抓住最佳机会和心仪Offer的实力。《SpringBoot 3 + Flutter3 实战低代码运营管理》将带你基于全栈技术(SpringBoot 3+Flutter3),全流程打造多端低代码运营管理平台,助你急速打通“全栈+跨端“综合技能,更快胜任多领域岗位,先人一步成为企业青睐的 “驾驭全局,深广兼备,打通端到端全技能” 的全能型人才。
从技术到业务,从思维到落地,打造深广兼备的全能型人才
App + Web + Server 打造技术开发的全面能力
测试 + 文档 构建完整的项目质量保障能力
容器部署 + 多类型数据库迁移 掌握复杂项目运维能力
原生低代码方案设计 积累热门业务综合实战经验
实践 Web 端和 APP 端兼顾可拖拽的,所见即所得的布局编辑器
落地" 需求理解->快速搭建原型->验证需求->迭代改进 "企业项目迭代模式
采用原生的低代码方案,保障性能要求和风格协调性
全局思维贯穿始终 提升全方位架构设计能力
多层次抽象封装,多端共享领域模型和组件,多维度打通大型项目的可
维护、可拓展设计思维
兼具前端、后端、安全、测试多领域视野,提高方案设计创造力和可落地性
工程化解决方案落地实践 掌握开发效率与质量保障硬技能
解锁测试驱动开发,自动化测试提高代码质量
实践代码重构改造的更优方案,提高可维护、可扩展性
掌握 “模块化-组件化“ 开发方案,降低耦合度,提高复用率
以下是开发流程:
在 com.example.his.api.mis.service.impl包UserServiceImpl.java类中,实现抽象方法。
@Service
public class UserServiceImpl implements UserService {
@Resource
private UserDao userDao;
@Override
public Integer login(Map param) {
String username = MapUtil.getStr(param, "username");
String password = MapUtil.getStr(param, "password");
MD5 md5 = MD5.create();
String temp = md5.digestHex(username);
String tempStart = StrUtil.subWithLength(temp, 0, 6);
String tempEnd = StrUtil.subSuf(temp, temp.length() - 3);
password = md5.digestHex(tempStart + password + tempEnd).toUpperCase();
param.replace("password", password);
Integer userId = userDao.login(param);
return userId;
}
}
加载部门列表和角色列表
为了实现user.vue页面的部门列表和角色列表可以动态加载数据,我们必须编写TS代码利用Ajax请求获取数据,于是需要声明两个封装函数,分别用于加载角色列表和部门列表数据。
function loadRoleList() {
proxy.$http('/mis/role/searchAllRole', 'GET', null, true, function (resp) {
dataForm.roleList = resp.list;
});
}
function loadDeptList() {
proxy.$http('/mis/dept/searchAllDept', 'GET', null, true, function (resp) {
dataForm.deptList = resp.list;
});
}
//执行两个封装函数
loadRoleList();
loadDeptList();
加载用户分页数据
定义一个查询分页数据的封装函数,将来会多次用到。比如添加、修改和删除了用户记录之后,都需要重新加载分页记录,所以定义封装函数的目的就是将来调用更方便。
function loadDataList() {
data.loading = true;
let json = {
page: data.pageIndex,
length: data.pageSize,
name: dataForm.name,
sex: dataForm.sex,
role: dataForm.role,
deptId: dataForm.deptId,
status: dataForm.status
};
proxy.$http('/mis/user/searchByPage', 'POST', json, true, function (resp) {
let page = resp.page;
let list = page.list;
for (let one of list) {
if (one.status == 1) {
one.status = '在职';
} else if (one.status == 2) {
one.status = '离职';
}
}
data.dataList = list;
data.totalCount = page.totalCount;
data.loading = false;
});
}
//调用封装函数,加载分页记录
loadDataList();
编写持久层代码
在UserDao.xml文件中,声明两条SQL语句。其中desc字段是关键字,所以需要转义处理。
<select id="searchById" parameterType="int" resultType="HashMap">
SELECT id,
dept_name AS deptName,
tel,
email,
`desc`
FROM tb_dept
WHERE id = #{id}
</select>
<update id="update" parameterType="com.example.his.api.db.pojo.DeptEntity">
UPDATE tb_dept
SET dept_name=#{deptName},
tel=#{tel},
email=#{email},
`desc`=#{desc}
WHERE id = #{id}
</update>
在com.example.his.api.mis.controller包DeptController.java类中,声明Web方法。
@RestController
@RequestMapping("/mis/dept")
public class DeptController {
……
@PostMapping("/searchById")
@SaCheckPermission(value = {"ROOT", "DEPT:SELECT"}, mode = SaMode.OR)
public R searchById(@Valid @RequestBody SearchDeptByIdForm form) {
HashMap map = deptService.searchById(form.getId());
return R.ok().put("result", map);
}
@PostMapping("/update")
@SaCheckPermission(value = {"ROOT", "DEPT:UPDATE"}, mode = SaMode.OR)
public R update(@Valid @RequestBody UpdateDeptForm form) {
DeptEntity dept = new DeptEntity();
dept.setId(form.getId());
dept.setDeptName(form.getDeptName());
dept.setTel(form.getTel());
dept.setEmail(form.getEmail());
dept.setDesc(form.getDesc());
int rows = deptService.update(dept);
return R.ok().put("rows", rows);
}
}
项目总结:本项目是一个多端低代码运营管理平台。在保障性能的前提下,帮助运营人员从容应对因为公司各种活动宣传,需要频繁发布新版应用的需求。希望大家会喜欢这个项目!
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。
- 请尽量让自己的回复能够对别人有帮助
- 支持 Markdown 格式, **粗体**、~~删除线~~、
`单行代码`
- 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
- 图片支持拖拽、截图粘贴等方式上传