同步失败原因,最近同步成功的时间记录

This commit is contained in:
root
2026-06-20 05:07:11 +08:00
parent d5a0ffa6db
commit e95f4a227c
19 changed files with 884 additions and 74 deletions
+50 -3
View File
@@ -99,6 +99,12 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
operate: false,
formatter: Controller.api.formatter.syncDisplay
},
{
field: 'sync_success_text',
title: __('Sync success time'),
operate: false,
formatter: Controller.api.formatter.syncSuccessDisplay
},
$.extend(
{field: 'status', title: __('Status'), searchList: Config.statusList, formatter: Table.api.formatter.toggle, yes: 'normal', no: 'hidden'},
searchSelectMeta(false)
@@ -137,6 +143,7 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
table.on('load-success.bs.table', function (e, res) {
Controller.api.renderSummaryRow(res);
Controller.api.initSyncTooltips(table);
var pendingIds = window.__splitTicketPendingPostAddSyncIds;
if (!pendingIds || !pendingIds.length) {
return;
@@ -310,11 +317,26 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
*/
finishTicketsSync: function (table) {
Controller.api.syncingTicketIds = [];
table.bootstrapTable('refresh');
table.bootstrapTable('refresh', {
silent: true
});
Controller.api.initSyncTooltips(table);
var ids = Table.api.selectedids(table);
$('.btn-sync').toggleClass('btn-disabled disabled', ids.length === 0);
},
/**
* 初始化同步状态列 tooltip(完整异常原因)
*/
initSyncTooltips: function (table) {
var $container = table.closest('.bootstrap-table');
$container.find('[data-sync-tooltip="1"]').tooltip({
container: 'body',
placement: 'auto top',
html: false
});
},
formatter: {
/**
* 操作列:编辑 → 拷贝 → 删除
@@ -408,13 +430,38 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
return Controller.api.formatter.syncingDisplayHtml();
}
var text = value || '';
var tooltip = row.sync_tooltip_text ? String(row.sync_tooltip_text).trim() : '';
if (tooltip !== '') {
tooltip = tooltip.replace(/\r?\n/g, '');
}
var hasTooltip = tooltip !== '';
var color = 'danger';
if (row.sync_status === 'success') {
var extraClass = '';
if (row.sync_auto_paused) {
color = 'warning';
extraClass = ' split-ticket-sync-status-paused';
} else if (row.sync_status === 'success') {
color = 'success';
} else if (row.sync_status === 'pending') {
color = 'muted';
} else if (row.sync_status === 'error') {
extraClass = ' split-ticket-sync-status-error';
}
return '<span class="text-' + color + '">' + Fast.api.escape(text) + '</span>';
var attrs = '';
if (hasTooltip) {
attrs = ' data-sync-tooltip="1" data-toggle="tooltip" title="' + Fast.api.escape(tooltip) + '"';
}
return '<span class="text-' + color + extraClass + '"' + attrs + '>' + Fast.api.escape(text) + '</span>';
},
syncSuccessDisplay: function (value, row) {
var text = value == null ? '' : String(value).trim();
if (text === '') {
return '<span class="text-muted">-</span>';
}
var colorClass = row.status === 'normal'
? 'split-sync-success-normal'
: 'split-sync-success-stopped';
return '<span class="' + colorClass + '">' + Fast.api.escape(text) + '</span>';
},
syncingDisplayHtml: function () {
var label = (typeof Config.syncInProgressMsg !== 'undefined' && Config.syncInProgressMsg)