记得上下班打卡 | git大法好,push需谨慎

Commit db4d2720 authored by 姜秀龙's avatar 姜秀龙

Merge branch 'jxl-guanlianyiren-bug' into 'master'

fix(admin): 修复关联艺人时老自增 artistId 无法选中

See merge request !441
parents 38ca5494 6aace560
...@@ -688,6 +688,15 @@ ...@@ -688,6 +688,15 @@
let selectedArtists = []; // 当前已选艺人列表 let selectedArtists = []; // 当前已选艺人列表
let currentModalArtists = []; // 当前搜索结果中的艺人列表 let currentModalArtists = []; // 当前搜索结果中的艺人列表
/** 艺人 ID 统一成字符串。jQuery .data() 会把 191 这类短数字转成 Number,导致 === 匹配失败 */
function artistIdStr(id) {
return id == null ? '' : String(id);
}
function sameArtistId(a, b) {
return artistIdStr(a) === artistIdStr(b);
}
function openAssociateArtistModal(timesId) { function openAssociateArtistModal(timesId) {
$('#associateArtistModal').data('timesId', timesId); $('#associateArtistModal').data('timesId', timesId);
// 重置状态 // 重置状态
...@@ -734,7 +743,7 @@ ...@@ -734,7 +743,7 @@
selectedArtists = (response.data || []) selectedArtists = (response.data || [])
.map(function (a) { .map(function (a) {
return { return {
artistId: a.artistId, artistId: artistIdStr(a.artistId),
artistName: a.artistName, artistName: a.artistName,
avatarUrl: a.avatarUrl, avatarUrl: a.avatarUrl,
sort: a.sort || 0 sort: a.sort || 0
...@@ -804,8 +813,9 @@ ...@@ -804,8 +813,9 @@
let html = ''; let html = '';
artists.forEach(function (artist) { artists.forEach(function (artist) {
const isSelected = selectedArtists.some(a => a.artistId === artist.artistId); const artistId = artistIdStr(artist.artistId);
html += '<div class="modal-artist-item" data-artist-id="' + artist.artistId + '">'; const isSelected = selectedArtists.some(a => sameArtistId(a.artistId, artistId));
html += '<div class="modal-artist-item" data-artist-id="' + artistId + '">';
html += '<img src="' + (artist.avatarUrl || '/img/profile.jpg') + '" class="modal-artist-avatar" onerror="this.src=\'/img/profile.jpg\'">'; html += '<img src="' + (artist.avatarUrl || '/img/profile.jpg') + '" class="modal-artist-avatar" onerror="this.src=\'/img/profile.jpg\'">';
html += '<div class="modal-artist-name">' + escapeHtml(artist.artistName) + '</div>'; html += '<div class="modal-artist-name">' + escapeHtml(artist.artistName) + '</div>';
html += '<div class="artist-radio-btn' + (isSelected ? ' selected' : '') + '"></div>'; html += '<div class="artist-radio-btn' + (isSelected ? ' selected' : '') + '"></div>';
...@@ -817,22 +827,22 @@ ...@@ -817,22 +827,22 @@
// 点击整行切换选中状态 // 点击整行切换选中状态
listContainer.find('.modal-artist-item').on('click', function () { listContainer.find('.modal-artist-item').on('click', function () {
const artistId = $(this).data('artist-id'); const artistId = artistIdStr($(this).attr('data-artist-id'));
const artist = currentModalArtists.find(a => a.artistId === artistId); const artist = currentModalArtists.find(a => sameArtistId(a.artistId, artistId));
if (!artist) return; if (!artist) return;
const radioBtn = $(this).find('.artist-radio-btn'); const radioBtn = $(this).find('.artist-radio-btn');
const isSelected = selectedArtists.some(a => a.artistId === artistId); const isSelected = selectedArtists.some(a => sameArtistId(a.artistId, artistId));
if (isSelected) { if (isSelected) {
// 取消选中 // 取消选中
selectedArtists = selectedArtists.filter(a => a.artistId !== artistId); selectedArtists = selectedArtists.filter(a => !sameArtistId(a.artistId, artistId));
radioBtn.removeClass('selected'); radioBtn.removeClass('selected');
} else { } else {
// 选中,防止重复 // 选中,防止重复
if (!selectedArtists.some(a => a.artistId === artistId)) { if (!selectedArtists.some(a => sameArtistId(a.artistId, artistId))) {
selectedArtists.push({ selectedArtists.push({
artistId: artist.artistId, artistId: artistId,
artistName: artist.artistName, artistName: artist.artistName,
avatarUrl: artist.avatarUrl avatarUrl: artist.avatarUrl
}); });
...@@ -856,7 +866,7 @@ ...@@ -856,7 +866,7 @@
let html = ''; let html = '';
selectedArtists.forEach(function (artist) { selectedArtists.forEach(function (artist) {
html += '<div class="selected-artist-card" draggable="true" data-artist-id="' + artist.artistId + '">'; html += '<div class="selected-artist-card" draggable="true" data-artist-id="' + artistIdStr(artist.artistId) + '">';
html += '<img src="' + (artist.avatarUrl || '/img/profile.jpg') + '" class="selected-artist-avatar" onerror="this.src=\'/img/profile.jpg\'">'; html += '<img src="' + (artist.avatarUrl || '/img/profile.jpg') + '" class="selected-artist-avatar" onerror="this.src=\'/img/profile.jpg\'">';
html += '<div class="selected-artist-name">' + escapeHtml(artist.artistName) + '</div>'; html += '<div class="selected-artist-name">' + escapeHtml(artist.artistName) + '</div>';
html += '<div class="remove-selected-artist" title="移除">&times;</div>'; html += '<div class="remove-selected-artist" title="移除">&times;</div>';
...@@ -870,8 +880,8 @@ ...@@ -870,8 +880,8 @@
// 点击"已选艺人"区域的 × 移除艺人 // 点击"已选艺人"区域的 × 移除艺人
$(document).on('click', '.remove-selected-artist', function () { $(document).on('click', '.remove-selected-artist', function () {
const artistId = $(this).closest('.selected-artist-card').data('artist-id'); const artistId = artistIdStr($(this).closest('.selected-artist-card').attr('data-artist-id'));
selectedArtists = selectedArtists.filter(a => a.artistId !== artistId); selectedArtists = selectedArtists.filter(a => !sameArtistId(a.artistId, artistId));
updateSelectedArtistsView(); updateSelectedArtistsView();
// 同步取消搜索列表中对应的选中状态 // 同步取消搜索列表中对应的选中状态
const item = $('#modal-artist-list .modal-artist-item[data-artist-id="' + artistId + '"]'); const item = $('#modal-artist-list .modal-artist-item[data-artist-id="' + artistId + '"]');
...@@ -962,7 +972,7 @@ ...@@ -962,7 +972,7 @@
// 根据当前显示顺序计算 sort:越靠前的 sort 值越大 // 根据当前显示顺序计算 sort:越靠前的 sort 值越大
const total = selectedArtists.length; const total = selectedArtists.length;
const artistOrders = selectedArtists.map((a, index) => ({ const artistOrders = selectedArtists.map((a, index) => ({
artistId: a.artistId, artistId: artistIdStr(a.artistId),
sort: total - index // 第 0 位 → sort 最大 sort: total - index // 第 0 位 → sort 最大
})); }));
......
...@@ -144,7 +144,7 @@ public class KylinArtistPerformanceServiceImpl extends ServiceImpl<KylinArtistPe ...@@ -144,7 +144,7 @@ public class KylinArtistPerformanceServiceImpl extends ServiceImpl<KylinArtistPe
if (artistOrders != null && !artistOrders.isEmpty()) { if (artistOrders != null && !artistOrders.isEmpty()) {
for (Map<String, Object> item : artistOrders) { for (Map<String, Object> item : artistOrders) {
String artistId = (String) item.get("artistId"); String artistId = toArtistId(item.get("artistId"));
if (artistId != null) { if (artistId != null) {
affectedArtistIds.add(artistId); affectedArtistIds.add(artistId);
} }
...@@ -166,7 +166,10 @@ public class KylinArtistPerformanceServiceImpl extends ServiceImpl<KylinArtistPe ...@@ -166,7 +166,10 @@ public class KylinArtistPerformanceServiceImpl extends ServiceImpl<KylinArtistPe
// 2. 按前端传入的顺序重新关联,sort 越大越靠前 // 2. 按前端传入的顺序重新关联,sort 越大越靠前
if (artistOrders != null && !artistOrders.isEmpty()) { if (artistOrders != null && !artistOrders.isEmpty()) {
for (Map<String, Object> item : artistOrders) { for (Map<String, Object> item : artistOrders) {
String artistId = (String) item.get("artistId"); String artistId = toArtistId(item.get("artistId"));
if (artistId == null) {
continue;
}
Integer sort = item.get("sort") != null Integer sort = item.get("sort") != null
? Integer.parseInt(item.get("sort").toString()) : 0; ? Integer.parseInt(item.get("sort").toString()) : 0;
...@@ -197,4 +200,13 @@ public class KylinArtistPerformanceServiceImpl extends ServiceImpl<KylinArtistPe ...@@ -197,4 +200,13 @@ public class KylinArtistPerformanceServiceImpl extends ServiceImpl<KylinArtistPe
} }
return true; return true;
} }
/** 兼容老自增 ID(JSON 可能是 Number)与雪花 ID(String) */
private String toArtistId(Object artistId) {
if (artistId == null) {
return null;
}
String id = artistId.toString().trim();
return id.isEmpty() ? null : id;
}
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment