Browse Source

修复分页问题和数据筛选问题

pull/1/head
Trae AI 2 months ago
parent
commit
5fe9225f7c
  1. 3
      web/src/main/java/com/example/web/mapper/PersonnelMapper.java
  2. 2
      web/src/main/java/com/example/web/service/impl/LoginServiceImpl.java
  3. 1
      web/src/main/java/com/example/web/service/impl/UserServiceImpl.java
  4. 4
      web/src/main/resources/mapper/PersonnelMapper.xml
  5. 26
      web/src/main/resources/mapper/UsersMapper.xml
  6. 202
      web/src/main/resources/static/index.html

3
web/src/main/java/com/example/web/mapper/PersonnelMapper.java

@ -6,4 +6,7 @@ import com.example.web.annotation.DataSource;
public interface PersonnelMapper {
@DataSource("primary")
Personnel findByName(String name);
@DataSource("primary")
Personnel findByNameAndProjectName(String name, String projectName);
}

2
web/src/main/java/com/example/web/service/impl/LoginServiceImpl.java

@ -39,7 +39,7 @@ public class LoginServiceImpl implements LoginService {
}
// 2. 查询Personnel信息
Personnel personnel = personnelMapper.findByName(loginInfo.getUserName());
Personnel personnel = personnelMapper.findByNameAndProjectName(loginInfo.getUserName(), loginInfo.getProjectName());
if (personnel == null) {
result.put("success", false);
result.put("message", "未找到员工信息");

1
web/src/main/java/com/example/web/service/impl/UserServiceImpl.java

@ -54,6 +54,7 @@ public class UserServiceImpl implements UserService {
params.put("managerdepartment", managerdepartment);
params.put("organization", organization);
params.put("role", role);
params.put("followup", followup);
// 查询数据
List<Users> usersList;

4
web/src/main/resources/mapper/PersonnelMapper.xml

@ -4,4 +4,8 @@
<select id="findByName" parameterType="String" resultType="com.example.web.entity.Personnel">
SELECT * FROM personnel WHERE name = #{name}
</select>
<select id="findByNameAndProjectName" resultType="com.example.web.entity.Personnel">
SELECT * FROM personnel WHERE name = #{name} AND projectName = #{projectName}
</select>
</mapper>

26
web/src/main/resources/mapper/UsersMapper.xml

@ -73,6 +73,7 @@
AND organization = #{organization}
AND role = #{role}
)
AND u.followup = #{followup}
AND (u.sync_statuss IS NULL OR u.sync_statuss NOT IN (0, 1))
AND u.type != 'Colleague'
ORDER BY u.created_at DESC
@ -89,6 +90,7 @@
AND organization = #{organization}
AND role = #{role}
)
AND followup = #{followup}
AND (sync_statuss IS NULL OR sync_statuss NOT IN (0, 1))
AND type != 'Colleague'
</select>
@ -119,6 +121,12 @@
<select id="findAllWithPagination" resultType="com.example.web.entity.Users">
SELECT u.*, um.userName as managerName FROM users u
JOIN usermanagements um ON u.userId = um.userId
WHERE u.type != 'Colleague'
AND ((um.managercompany IS NOT NULL AND um.managercompany != '')
OR (um.managerdepartment IS NOT NULL AND um.managerdepartment != '')
OR (um.organization IS NOT NULL AND um.organization != '')
OR (um.role IS NOT NULL AND um.role != '')
OR (um.userName IS NOT NULL AND um.userName != ''))
ORDER BY u.created_at DESC
LIMIT #{offset}, #{limit}
</select>
@ -128,6 +136,11 @@
JOIN usermanagements um ON u.userId = um.userId
WHERE (u.sync_statuss IS NULL OR u.sync_statuss NOT IN (0, 1))
AND u.type != 'Colleague'
AND ((um.managercompany IS NOT NULL AND um.managercompany != '')
OR (um.managerdepartment IS NOT NULL AND um.managerdepartment != '')
OR (um.organization IS NOT NULL AND um.organization != '')
OR (um.role IS NOT NULL AND um.role != '')
OR (um.userName IS NOT NULL AND um.userName != ''))
</select>
<select id="findPersonalWithPagination" resultType="com.example.web.entity.Users">
@ -196,18 +209,17 @@
<update id="updateUserTypeAndClearFollowup" parameterType="java.util.Map">
UPDATE users
SET type = #{type},
followup = NULL
SET type = #{type}
WHERE userId = #{userId}
</update>
<update id="clearUsersManagements" parameterType="java.util.Map">
UPDATE usermanagements
SET managercompany = NULL,
managerdepartment = NULL,
organization = NULL,
role = NULL,
userName = NULL
SET managercompany = '',
managerdepartment = '',
organization = '',
role = '',
userName = ''
WHERE userId = #{userId}
</update>
</mapper>

202
web/src/main/resources/static/index.html

@ -542,6 +542,8 @@
var personalFilter = 'all'; // all, followed, unfollowed
var managersList = [];
var allPersonalData = [];
var isLoadingAllData = false;
function init() {
var savedUserInfo = localStorage.getItem('userInfo');
@ -656,17 +658,172 @@
if (xhr.readyState == 4 && xhr.status == 200) {
var data = JSON.parse(xhr.responseText);
displayPersonalData(data);
renderPersonalPagination(data.page, data.pages);
// 对于第一页的全部数据,更新缓存
if (personalPage === 1 && personalFilter === 'all') {
allPersonalData = data.users || [];
}
}
};
xhr.send();
}
function loadAllPersonalData() {
if (isLoadingAllData) return;
isLoadingAllData = true;
var userRole = userInfo.loginInfo.projectName;
var userName = userInfo.loginInfo.userName;
var usersManagements = userInfo.usersManagements;
// 构建查询参数,设置一个较大的pageSize来获取所有数据
var params = {
page: 1,
size: 1000, // 假设最多1000条数据
userRole: userRole,
followup: userName,
userName: userName,
managercompany: usersManagements.managercompany || '',
managerdepartment: usersManagements.managerdepartment || '',
organization: usersManagements.organization || '',
role: usersManagements.role || ''
};
var url = 'http://8.137.125.67:8083/KH/api/users?' + objectToQueryString(params);
var xhr = new XMLHttpRequest();
xhr.open('GET', url, true);
xhr.onreadystatechange = function() {
if (xhr.readyState == 4 && xhr.status == 200) {
var data = JSON.parse(xhr.responseText);
allPersonalData = data.users || [];
isLoadingAllData = false;
// 加载完成后显示数据
displayFilteredPersonalData();
} else if (xhr.readyState == 4) {
isLoadingAllData = false;
console.error('加载所有个人数据失败:', xhr.status, xhr.statusText);
}
};
xhr.send();
}
function displayFilteredPersonalData() {
var personalBody = document.getElementById('personalBody');
var personalEmpty = document.getElementById('personalEmpty');
var managerHeader = document.getElementById('managerHeader');
var personalPagination = document.getElementById('personalPagination');
var selectAllPersonal = document.getElementById('selectAllPersonal');
personalBody.innerHTML = '';
// 检查用户角色,只对管理员显示负责人列和复选框列
var userRole = userInfo.loginInfo.projectName;
var isAdmin = userRole === '管理员';
if (isAdmin) {
managerHeader.style.display = 'table-cell';
if (selectAllPersonal) {
selectAllPersonal.style.display = 'block';
}
} else {
managerHeader.style.display = 'none';
if (selectAllPersonal) {
selectAllPersonal.style.display = 'none';
}
}
// 过滤数据
var filteredUsers = allPersonalData.filter(function(user) {
// 过滤掉同事类型
if (user.type === 'Colleague') {
return false;
}
// 根据筛选条件过滤
if (personalFilter === 'followed') {
return user.followup && user.followup !== '';
} else if (personalFilter === 'unfollowed') {
return !user.followup || user.followup === '';
}
// 'all' 或其他情况,不过滤
return true;
});
console.log('过滤后的数据量:', filteredUsers.length);
if (filteredUsers.length > 0) {
personalEmpty.style.display = 'none';
// 自主分页:根据过滤后的数据和当前页码计算显示数据
var startIndex = (personalPage - 1) * personalPageSize;
var endIndex = startIndex + personalPageSize;
var displayUsers = filteredUsers.slice(startIndex, endIndex);
// 计算总页数
var totalPages = Math.ceil(filteredUsers.length / personalPageSize);
for (var i = 0; i < displayUsers.length; i++) {
var user = displayUsers[i];
var responseTime = calculateResponseTime(user.created_at, user.followup_at);
var managerCell = '';
// 只对管理员显示负责人信息
if (userRole === '管理员') {
managerCell = '<td>' + (user.managerName || '-') + '</td>';
} else {
managerCell = '<td style="display: none;"></td>';
}
// 生成简道云按钮,根据sync_statuss字段决定状态
var jianDaoYunButton = '';
if (user.sync_statuss === 0 || user.sync_statuss === 1) {
// 已写入简道云,显示灰色不可点击按钮
jianDaoYunButton = '<button style="padding: 4px 8px; background-color: #ccc; color: #666; border: none; border-radius: 4px; font-size: 12px; cursor: not-allowed;" disabled>已写入简道云</button>';
} else {
// 未写入简道云,显示正常按钮
jianDaoYunButton = '<button onclick="openJianDaoYunModal(\'' + (user.userId || '') + '\', \'' + (user.nickName || '') + '\', \'' + (user.followup || '') + '\')" style="padding: 4px 8px; background-color: #52c41a; color: white; border: none; border-radius: 4px; font-size: 12px;">简道云</button>';
}
// 只有管理员显示复选框
var checkboxCell = isAdmin ? '<td><input type="checkbox" class="userCheckbox" data-userid="' + (user.userId || '') + '"></td>' : '<td style="width: 40px;"></td>';
var row = '<tr>' +
checkboxCell +
'<td>' + (user.nickName || '-') + '</td>' +
'<td>' + (user.phoneNumber || '-') + '</td>' +
'<td>' + mapUserType(user.type) + '</td>' +
'<td>' + formatDateTime(user.created_at) + '</td>' +
'<td>' + (user.followup || '-') + '</td>' +
'<td>' + responseTime + '</td>' +
managerCell +
'<td><button onclick="openFollowupModal(\'' + (user.userId || '') + '\', \'' + (user.nickName || '') + '\', \'' + (user.phoneNumber || '') + '\')" style="padding: 4px 8px; background-color: #1890ff; color: white; border: none; border-radius: 4px; font-size: 12px;">跟进</button> <button onclick="openReturnModal(\'' + (user.userId || '') + '\', \'' + (user.nickName || '') + '\', \'' + (user.phoneNumber || '') + '\', \'' + (user.type || '') + '\')" style="padding: 4px 8px; background-color: #faad14; color: white; border: none; border-radius: 4px; font-size: 12px;">归还</button> ' + jianDaoYunButton + '</td>' +
'</tr>';
personalBody.innerHTML += row;
// 有数据时显示分页控件
personalPagination.style.display = 'flex';
}
// 渲染分页控件
renderPersonalPagination(personalPage, totalPages);
} else {
personalEmpty.style.display = 'block';
// 没有数据时隐藏分页控件
personalPagination.style.display = 'none';
}
}
function filterPersonalData(filter) {
personalFilter = filter;
personalPage = 1; // 重置为第一页
// 对于已跟进和未跟进,总是加载所有数据后进行筛选
if (filter === 'followed' || filter === 'unfollowed') {
loadAllPersonalData();
} else {
// 对于全部,使用正常的分页加载
loadPersonalData();
}
}
function loadPublicData() {
var userRole = userInfo.loginInfo.projectName;
@ -895,6 +1052,11 @@
console.log('每页大小:', data.size);
console.log('总页数:', data.pages);
// 缓存所有数据
if (personalFilter === 'all') {
allPersonalData = data.users || [];
}
if (data.users && data.users.length > 0) {
personalEmpty.style.display = 'none';
var filteredUsers = data.users.filter(function(user) {
@ -916,14 +1078,28 @@
console.log('过滤后的数据量:', filteredUsers.length);
if (filteredUsers.length > 0) {
for (var i = 0; i < filteredUsers.length; i++) {
var user = filteredUsers[i];
var displayUsers = filteredUsers;
var totalPages = data.pages;
// 对于已跟进和未跟进,使用自主分页
if (personalFilter === 'followed' || personalFilter === 'unfollowed') {
// 自主分页:根据过滤后的数据和当前页码计算显示数据
var startIndex = (personalPage - 1) * personalPageSize;
var endIndex = startIndex + personalPageSize;
displayUsers = filteredUsers.slice(startIndex, endIndex);
// 计算总页数
totalPages = Math.ceil(filteredUsers.length / personalPageSize);
}
for (var i = 0; i < displayUsers.length; i++) {
var user = displayUsers[i];
var responseTime = calculateResponseTime(user.created_at, user.followup_at);
var managerCell = '';
// 只对管理员显示负责人信息
if (userRole === '管理员') {
managerCell = '<td>' + (user.managerName || user.followup || '-') + '</td>';
managerCell = '<td>' + (user.managerName || '-') + '</td>';
} else {
managerCell = '<td style="display: none;"></td>';
}
@ -957,6 +1133,9 @@
// 有数据时显示分页控件
personalPagination.style.display = 'flex';
}
// 渲染分页控件
renderPersonalPagination(personalPage, totalPages);
} else {
personalEmpty.style.display = 'block';
// 没有数据时隐藏分页控件
@ -1234,8 +1413,13 @@
prevBtn.onclick = function() {
if (current > 1) {
personalPage = current - 1;
// 根据当前筛选条件决定调用哪个函数
if (personalFilter === 'followed' || personalFilter === 'unfollowed') {
displayFilteredPersonalData();
} else {
loadPersonalData();
}
}
};
pagination.appendChild(prevBtn);
@ -1245,7 +1429,12 @@
pageBtn.className = i == current ? 'active' : '';
pageBtn.onclick = function() {
personalPage = parseInt(this.innerHTML);
// 根据当前筛选条件决定调用哪个函数
if (personalFilter === 'followed' || personalFilter === 'unfollowed') {
displayFilteredPersonalData();
} else {
loadPersonalData();
}
};
pagination.appendChild(pageBtn);
}
@ -1256,8 +1445,13 @@
nextBtn.onclick = function() {
if (current < total) {
personalPage = current + 1;
// 根据当前筛选条件决定调用哪个函数
if (personalFilter === 'followed' || personalFilter === 'unfollowed') {
displayFilteredPersonalData();
} else {
loadPersonalData();
}
}
};
pagination.appendChild(nextBtn);
}

Loading…
Cancel
Save