通知公告新增阅读用户列表

master
RuoYi 2 weeks ago
parent 80f24d9403
commit ec11034c61

@ -109,7 +109,6 @@ public class SysNoticeController extends BaseController
/** /**
* *
*/ */
@RequiresPermissions("system:notice:list")
@GetMapping("/view/{noticeId}") @GetMapping("/view/{noticeId}")
public String view(@PathVariable("noticeId") Long noticeId, ModelMap mmap) public String view(@PathVariable("noticeId") Long noticeId, ModelMap mmap)
{ {
@ -157,6 +156,30 @@ public class SysNoticeController extends BaseController
return success(); return success();
} }
/**
*
*/
@RequiresPermissions("system:notice:list")
@GetMapping("/readUsers/{noticeId}")
public String readUsers(@PathVariable("noticeId") Long noticeId, ModelMap mmap)
{
mmap.put("notice", noticeService.selectNoticeById(noticeId));
return prefix + "/readUsers";
}
/**
*
*/
@RequiresPermissions("system:notice:list")
@PostMapping("/readUsers/list")
@ResponseBody
public TableDataInfo readUsersList(Long noticeId, String searchValue)
{
startPage();
List<?> list = noticeReadService.selectReadUsersByNoticeId(noticeId, searchValue);
return getDataTable(list);
}
/** /**
* *
*/ */

@ -993,13 +993,15 @@ var table = {
closeItem(dataId); closeItem(dataId);
}, },
// 右侧弹出窗口打开 // 右侧弹出窗口打开
popupRight: function(title, url){ popupRight: function(title, url, width, height) {
var width = 150; var defaultWidth = 150;
if (top.location !== self.location) { if (top.location !== self.location) {
if ($(top.window).outerWidth() < 400) { if ($(top.window).outerWidth() < 400) {
width = 50; defaultWidth = 50;
} }
} }
var finalWidth = width || ($(window).outerWidth() - defaultWidth) + 'px';
var finalHeight = height || '100%';
top.layer.open({ top.layer.open({
type: 2, type: 2,
offset: 'r', offset: 'r',
@ -1008,7 +1010,7 @@ var table = {
title: title, title: title,
shade: 0.3, shade: 0.3,
shadeClose: true, shadeClose: true,
area: [($(window).outerWidth() - width) + 'px', '100%'], area: [finalWidth, finalHeight],
content: url content: url
}); });
}, },
@ -1657,7 +1659,9 @@ var table = {
if (!format) format = "yyyy-MM-dd"; if (!format) format = "yyyy-MM-dd";
switch (typeof date) { switch (typeof date) {
case "string": case "string":
date = new Date(date.replace(/-/g, "/")); date = date.replace("T", " ");
date = date.replace(/-/g, "/");
date = new Date(date);
break; break;
case "number": case "number":
date = new Date(date); date = new Date(date);

@ -108,6 +108,7 @@
align: 'center', align: 'center',
formatter: function(value, row, index) { formatter: function(value, row, index) {
var actions = []; var actions = [];
actions.push('<a class="btn btn-info btn-xs" href="javascript:void(0)" onclick="showReadUsers(\'' + row.noticeId + '\', \'' + row.noticeTitle + '\')"><i class="fa fa-eye"></i>阅读用户</a> ');
actions.push('<a class="btn btn-success btn-xs ' + editFlag + '" href="javascript:void(0)" onclick="$.operate.editFull(\'' + row.noticeId + '\')"><i class="fa fa-edit"></i>编辑</a> '); actions.push('<a class="btn btn-success btn-xs ' + editFlag + '" href="javascript:void(0)" onclick="$.operate.editFull(\'' + row.noticeId + '\')"><i class="fa fa-edit"></i>编辑</a> ');
actions.push('<a class="btn btn-danger btn-xs ' + removeFlag + '" href="javascript:void(0)" onclick="$.operate.remove(\'' + row.noticeId + '\')"><i class="fa fa-remove"></i>删除</a>'); actions.push('<a class="btn btn-danger btn-xs ' + removeFlag + '" href="javascript:void(0)" onclick="$.operate.remove(\'' + row.noticeId + '\')"><i class="fa fa-remove"></i>删除</a>');
return actions.join(''); return actions.join('');
@ -116,6 +117,12 @@
}; };
$.table.init(options); $.table.init(options);
}); });
// 阅读用户
function showReadUsers(noticeId, noticeTitle) {
var url = ctx + "system/notice/readUsers/" + noticeId;
$.modal.popupRight("「" + noticeTitle + "」阅读用户", url, '800px');
}
</script> </script>
</body> </body>
</html> </html>

@ -0,0 +1,65 @@
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org">
<head>
<th:block th:include="include :: header('已读用户')" />
</head>
<body class="gray-bg">
<div class="container-div">
<div class="row">
<div class="col-sm-12 select-table table-striped">
<table id="bootstrap-table"></table>
</div>
</div>
</div>
<th:block th:include="include :: footer" />
<script th:inline="javascript">
var prefix = ctx + "system/notice";
var noticeId = [[${notice.noticeId}]];
$(function() {
var options = {
url: prefix + "/readUsers/list",
search: true,
showSearch: false,
queryParams: queryParams,
columns: [
{
field: 'loginName',
title: '登录名称'
},
{
field: 'userName',
title: '用户名称'
},
{
field: 'deptName',
title: '所属部门',
align: 'center'
},
{
field: 'phonenumber',
title: '手机号码',
align: 'center'
},
{
field: 'readTime',
title: '阅读时间',
align: 'center',
sortable: true,
formatter: function(value, row, index) {
return $.common.dateFormat(value, 'yyyy-MM-dd HH:mm:ss');
}
}
]
};
$.table.init(options);
});
function queryParams(params) {
var search = $.table.queryParams(params);
search.noticeId = noticeId;
return search;
}
</script>
</body>
</html>

@ -1,9 +1,10 @@
package com.ruoyi.system.mapper; package com.ruoyi.system.mapper;
import java.util.List; import java.util.List;
import java.util.Map;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import com.ruoyi.system.domain.SysNoticeRead;
import com.ruoyi.system.domain.SysNotice; import com.ruoyi.system.domain.SysNotice;
import com.ruoyi.system.domain.SysNoticeRead;
/** /**
* *
@ -62,4 +63,13 @@ public interface SysNoticeReadMapper
* @return * @return
*/ */
public int deleteByNoticeIds(@Param("noticeIds") String[] noticeIds); public int deleteByNoticeIds(@Param("noticeIds") String[] noticeIds);
/**
*
*
* @param noticeId ID
* @param searchValue
* @return
*/
public List<Map<String, Object>> selectReadUsersByNoticeId(@Param("noticeId") Long noticeId, @Param("searchValue") String searchValue);
} }

@ -1,6 +1,7 @@
package com.ruoyi.system.service; package com.ruoyi.system.service;
import java.util.List; import java.util.List;
import java.util.Map;
import com.ruoyi.system.domain.SysNotice; import com.ruoyi.system.domain.SysNotice;
/** /**
@ -49,4 +50,13 @@ public interface ISysNoticeReadService
* @param ids ID * @param ids ID
*/ */
public void deleteByNoticeIds(String ids); public void deleteByNoticeIds(String ids);
/**
*
*
* @param noticeId ID
* @param searchValue
* @return
*/
public List<Map<String, Object>> selectReadUsersByNoticeId(Long noticeId, String searchValue);
} }

@ -1,11 +1,12 @@
package com.ruoyi.system.service.impl; package com.ruoyi.system.service.impl;
import java.util.List; import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import com.ruoyi.common.core.text.Convert; import com.ruoyi.common.core.text.Convert;
import com.ruoyi.system.domain.SysNoticeRead;
import com.ruoyi.system.domain.SysNotice; import com.ruoyi.system.domain.SysNotice;
import com.ruoyi.system.domain.SysNoticeRead;
import com.ruoyi.system.mapper.SysNoticeReadMapper; import com.ruoyi.system.mapper.SysNoticeReadMapper;
import com.ruoyi.system.service.ISysNoticeReadService; import com.ruoyi.system.service.ISysNoticeReadService;
@ -71,4 +72,13 @@ public class SysNoticeReadServiceImpl implements ISysNoticeReadService
{ {
noticeReadMapper.deleteByNoticeIds(Convert.toStrArray(ids)); noticeReadMapper.deleteByNoticeIds(Convert.toStrArray(ids));
} }
/**
*
*/
@Override
public List<Map<String, Object>> selectReadUsersByNoticeId(Long noticeId, String searchValue)
{
return noticeReadMapper.selectReadUsersByNoticeId(noticeId, searchValue);
}
} }

@ -63,4 +63,26 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</foreach> </foreach>
</delete> </delete>
<!-- 查询已阅读某公告的用户列表,支持按登录名/用户名模糊筛选 -->
<select id="selectReadUsersByNoticeId" resultType="java.util.Map">
select
u.user_id as userId,
u.login_name as loginName,
u.user_name as userName,
d.dept_name as deptName,
u.phonenumber as phonenumber,
r.read_time as readTime
from sys_notice_read r
inner join sys_user u on u.user_id = r.user_id and u.del_flag = '0'
left join sys_dept d on d.dept_id = u.dept_id
where r.notice_id = #{noticeId}
<if test="searchValue != null and searchValue != ''">
and (
u.login_name like concat('%', #{searchValue}, '%')
or u.user_name like concat('%', #{searchValue}, '%')
)
</if>
order by r.read_time desc
</select>
</mapper> </mapper>

Loading…
Cancel
Save