1.理论上登录日志是不能新增的,应该是登录时由系统自动将登录信息存入到数据库中,这里我们只是简单演示下新增数据的效果。
2.先改造后台代码,在Controller中增加录入登录日志数据的方法,找到loginfo对应的Contoller在代码最后增加add方法
增加的JAVA代码如下
@PostMapping(value="add")public AjaxResult add(@Validated @RequestBody SysLogininfor sysLogininfor){try {sysLogininfor.setUserName(getUsername());sysLogininfor.setCreateBy(getUsername());sysLogininfor.setStatus("0");logininforService.insertLogininfor(sysLogininfor);return AjaxResult.success("录入成功");}catch(Exception ex){return AjaxResult.error("录入失败"+ex.getMessage());}}
这是一个Post接口,传入参数为一个sysLoginfor实体对象的JSON数据。
3.后台新增登录日志接口完毕后,重启下后台,我们先看下查询表格(登录日志的组件最开始是完全复制的查询表格组件)中自带的新增的操作做了哪些事情?查询表格组件中是有个新建按钮的
新建按钮,调用了handleModalVisible(true);从字面上理解,应该是让组件中的某个对话框组件可见,用handleModalVisible做关键字搜索,我们找到了这个ModalForm组件,


ModalForm中就简单的两个组件,一个文本框,一个多行文本框,为了操作方便,我们复用现成的代码,基于ModalForm做改造(建议把表单组件单独拿出来做成组件复用,查询表格的修改操作其实是用一个文件单独来操作的,新增和修改操作其实可以共用一个组件)
4.
<ModalFormlayout="horizontal"labelCol={{ span: 4 }}title="新建登录日志"width="600px"visible={createModalVisible}onVisibleChange={handleModalVisible}onFinish={async (value) => {const success = await handleAdd(value);if (success) {handleModalVisible(false);if (actionRef.current) {actionRef.current.reload();}}}}><ProFormTextrules={[{required: true,message: '登录IP地址不能为空',},{pattern: new RegExp('^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$','g',),message: '登录IP地址格式错误',},]}width="md"name="ipaddr"label="登录IP地址"placeholder="请输入登录IP地址"/><ProFormTextrules={[{required: true,message: '登录地点为必填项',},]}width="md"label="登录地点"placeholder="请输入登录地点"name="loginLocation"/><ProFormTextrules={[{required: true,message: '浏览器类型为必填项',},]}width="md"label="浏览器类型"placeholder="请输入浏览器类型"name="browser"/><ProFormDateTimePickername="loginTime"label="访问时间"rules={[{required: true,message: '访问时间为必填项',},]}/><ProFormTextrules={[{required: true,message: '提示消息为必填项',},]}width="md"label="提示消息"placeholder="请输入提示消息"name="msg"/></ModalForm>
我们替换的
rules={[{required: true,message: '登录IP地址不能为空',},{pattern: new RegExp('^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$','g',),message: '登录IP地址格式错误',},]}
5.前台保存编译后会报错,因为部分Antd组件未引入,我们把第6行引入Antd组件的代码
import { ModalForm, ProFormText, ProFormTextArea } from '@ant-design/pro-form';
替换成
import ProForm, { ModalForm, ProFormText, ProFormDateTimePicker } from '@ant-design/pro-form';
6.再次保存,等编译后,打开登录日志菜单后点击新建按钮,表单能正常展现了
7.点确定会触发
onFinish={async (value) => {const success = await handleAdd(value);if (success) {handleModalVisible(false);if (actionRef.current) {actionRef.current.reload();}}}}
主要逻辑是调用handleAdd方法,调用后台接口录入数据,value就是表单中输入的数据,如果后台接口调用录入成功,隐藏
8.找到handleAdd方法,代码如下
const handleAdd = async (fields) => {const hide = message.loading('正在添加');try {await addRule({ ...fields });hide();message.success('添加成功');return true;} catch (error) {hide();message.error('添加失败请重试!');return false;}};
这段代码是查询表格中已封装好的,异步调用,等待提示都封装好了,我们复用一下,只要改service中真正调用后台接口的addRule方法和Url地址即可。
9.找到addRule方法所在代码 src/pages/loginfo/service.js,原来的addRule方法代码如下:
export async function addRule(data, options) {return request('/api/rule', {data,method: 'POST',...(options || {}),});}
10.我们替换方法名和请求的后台url地址,修改完后代码如下:
export async function addLoginfo(data, options) {return request('/api/monitor/logininfor/add', {data,method: 'POST',...(options || {}),});}
11.回到src/pages/loginfo/index.jsx,把引入service的代码改一下,改成
import { loginfo, addLoginfo, updateRule, removeRule } from './service';
12.再把handleAdd中的addRule替换成addLoginfo
const handleAdd = async (fields) => {const hide = message.loading('正在添加');try {await addLoginfo({ ...fields });hide();message.success('添加成功');return true;} catch (error) {hide();message.error('添加失败请重试!');return false;}};
13.保存编译后,新建一条数据测试下
14.如果出现了我们新增的数据,那么新增登录日志功能OK了,为了容易跟其他数据区分,特意未录入操作系统字段数据。
