|
|
@ -542,6 +542,8 @@ |
|
|
var personalFilter = 'all'; // all, followed, unfollowed |
|
|
var personalFilter = 'all'; // all, followed, unfollowed |
|
|
|
|
|
|
|
|
var managersList = []; |
|
|
var managersList = []; |
|
|
|
|
|
var allPersonalData = []; |
|
|
|
|
|
var isLoadingAllData = false; |
|
|
|
|
|
|
|
|
function init() { |
|
|
function init() { |
|
|
var savedUserInfo = localStorage.getItem('userInfo'); |
|
|
var savedUserInfo = localStorage.getItem('userInfo'); |
|
|
@ -656,16 +658,171 @@ |
|
|
if (xhr.readyState == 4 && xhr.status == 200) { |
|
|
if (xhr.readyState == 4 && xhr.status == 200) { |
|
|
var data = JSON.parse(xhr.responseText); |
|
|
var data = JSON.parse(xhr.responseText); |
|
|
displayPersonalData(data); |
|
|
displayPersonalData(data); |
|
|
renderPersonalPagination(data.page, data.pages); |
|
|
// 对于第一页的全部数据,更新缓存 |
|
|
|
|
|
if (personalPage === 1 && personalFilter === 'all') { |
|
|
|
|
|
allPersonalData = data.users || []; |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
}; |
|
|
}; |
|
|
xhr.send(); |
|
|
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) { |
|
|
function filterPersonalData(filter) { |
|
|
personalFilter = filter; |
|
|
personalFilter = filter; |
|
|
personalPage = 1; // 重置为第一页 |
|
|
personalPage = 1; // 重置为第一页 |
|
|
loadPersonalData(); |
|
|
|
|
|
|
|
|
// 对于已跟进和未跟进,总是加载所有数据后进行筛选 |
|
|
|
|
|
if (filter === 'followed' || filter === 'unfollowed') { |
|
|
|
|
|
loadAllPersonalData(); |
|
|
|
|
|
} else { |
|
|
|
|
|
// 对于全部,使用正常的分页加载 |
|
|
|
|
|
loadPersonalData(); |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
function loadPublicData() { |
|
|
function loadPublicData() { |
|
|
@ -895,6 +1052,11 @@ |
|
|
console.log('每页大小:', data.size); |
|
|
console.log('每页大小:', data.size); |
|
|
console.log('总页数:', data.pages); |
|
|
console.log('总页数:', data.pages); |
|
|
|
|
|
|
|
|
|
|
|
// 缓存所有数据 |
|
|
|
|
|
if (personalFilter === 'all') { |
|
|
|
|
|
allPersonalData = data.users || []; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
if (data.users && data.users.length > 0) { |
|
|
if (data.users && data.users.length > 0) { |
|
|
personalEmpty.style.display = 'none'; |
|
|
personalEmpty.style.display = 'none'; |
|
|
var filteredUsers = data.users.filter(function(user) { |
|
|
var filteredUsers = data.users.filter(function(user) { |
|
|
@ -916,14 +1078,28 @@ |
|
|
console.log('过滤后的数据量:', filteredUsers.length); |
|
|
console.log('过滤后的数据量:', filteredUsers.length); |
|
|
|
|
|
|
|
|
if (filteredUsers.length > 0) { |
|
|
if (filteredUsers.length > 0) { |
|
|
for (var i = 0; i < filteredUsers.length; i++) { |
|
|
var displayUsers = filteredUsers; |
|
|
var user = filteredUsers[i]; |
|
|
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 responseTime = calculateResponseTime(user.created_at, user.followup_at); |
|
|
var managerCell = ''; |
|
|
var managerCell = ''; |
|
|
|
|
|
|
|
|
// 只对管理员显示负责人信息 |
|
|
// 只对管理员显示负责人信息 |
|
|
if (userRole === '管理员') { |
|
|
if (userRole === '管理员') { |
|
|
managerCell = '<td>' + (user.managerName || user.followup || '-') + '</td>'; |
|
|
managerCell = '<td>' + (user.managerName || '-') + '</td>'; |
|
|
} else { |
|
|
} else { |
|
|
managerCell = '<td style="display: none;"></td>'; |
|
|
managerCell = '<td style="display: none;"></td>'; |
|
|
} |
|
|
} |
|
|
@ -957,6 +1133,9 @@ |
|
|
// 有数据时显示分页控件 |
|
|
// 有数据时显示分页控件 |
|
|
personalPagination.style.display = 'flex'; |
|
|
personalPagination.style.display = 'flex'; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 渲染分页控件 |
|
|
|
|
|
renderPersonalPagination(personalPage, totalPages); |
|
|
} else { |
|
|
} else { |
|
|
personalEmpty.style.display = 'block'; |
|
|
personalEmpty.style.display = 'block'; |
|
|
// 没有数据时隐藏分页控件 |
|
|
// 没有数据时隐藏分页控件 |
|
|
@ -1234,7 +1413,12 @@ |
|
|
prevBtn.onclick = function() { |
|
|
prevBtn.onclick = function() { |
|
|
if (current > 1) { |
|
|
if (current > 1) { |
|
|
personalPage = current - 1; |
|
|
personalPage = current - 1; |
|
|
loadPersonalData(); |
|
|
// 根据当前筛选条件决定调用哪个函数 |
|
|
|
|
|
if (personalFilter === 'followed' || personalFilter === 'unfollowed') { |
|
|
|
|
|
displayFilteredPersonalData(); |
|
|
|
|
|
} else { |
|
|
|
|
|
loadPersonalData(); |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
}; |
|
|
}; |
|
|
pagination.appendChild(prevBtn); |
|
|
pagination.appendChild(prevBtn); |
|
|
@ -1245,7 +1429,12 @@ |
|
|
pageBtn.className = i == current ? 'active' : ''; |
|
|
pageBtn.className = i == current ? 'active' : ''; |
|
|
pageBtn.onclick = function() { |
|
|
pageBtn.onclick = function() { |
|
|
personalPage = parseInt(this.innerHTML); |
|
|
personalPage = parseInt(this.innerHTML); |
|
|
loadPersonalData(); |
|
|
// 根据当前筛选条件决定调用哪个函数 |
|
|
|
|
|
if (personalFilter === 'followed' || personalFilter === 'unfollowed') { |
|
|
|
|
|
displayFilteredPersonalData(); |
|
|
|
|
|
} else { |
|
|
|
|
|
loadPersonalData(); |
|
|
|
|
|
} |
|
|
}; |
|
|
}; |
|
|
pagination.appendChild(pageBtn); |
|
|
pagination.appendChild(pageBtn); |
|
|
} |
|
|
} |
|
|
@ -1256,7 +1445,12 @@ |
|
|
nextBtn.onclick = function() { |
|
|
nextBtn.onclick = function() { |
|
|
if (current < total) { |
|
|
if (current < total) { |
|
|
personalPage = current + 1; |
|
|
personalPage = current + 1; |
|
|
loadPersonalData(); |
|
|
// 根据当前筛选条件决定调用哪个函数 |
|
|
|
|
|
if (personalFilter === 'followed' || personalFilter === 'unfollowed') { |
|
|
|
|
|
displayFilteredPersonalData(); |
|
|
|
|
|
} else { |
|
|
|
|
|
loadPersonalData(); |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
}; |
|
|
}; |
|
|
pagination.appendChild(nextBtn); |
|
|
pagination.appendChild(nextBtn); |
|
|
|