<script>
$(document).ready(function() {
// NZMailSystem専用の処理を遅延実行(既存機能を優先)
setTimeout(function() {
initNZMailButtons();
}, 500);
});
function initNZMailButtons() {
// CSRFトークンの取得(検索フォームから取得)
var csrfToken = $('#search_form input[name="_token"]').val();
if (!csrfToken) {
// 検索フォームにない場合は、最初のフォームから取得
csrfToken = $('form input[name="_token"]').first().val();
}
var adminPath = '{{ eccube_config.eccube_admin_route }}';
// メール送信履歴データ(PHPから渡される)
var mailHistories = {{ nz_mail_histories|json_encode|raw }};
// 各受注行にボタンを追加
$('#search_result tbody tr').each(function() {
var $row = $(this);
// 最後の列(お届け先の列)を取得
var $lastCell = $row.find('td').last();
// 注文IDを取得(IDの列から)
var $idCell = $row.find('td').eq(1); // 2列目(ID列)
var $idLink = $idCell.find('a');
if ($idLink.length === 0) return;
var href = $idLink.attr('href');
var matches = href.match(/\/(\d+)\/edit$/);
if (!matches) return;
var orderId = matches[1];
// 既に追加済みかチェック
if ($lastCell.find('.nz-mail-btn').length > 0) return;
// .text-endを含む親要素を取得
var $buttonContainer = $lastCell.find('.text-end');
if ($buttonContainer.length === 0) return;
// メール送信履歴をチェック
var isReceivedSent = mailHistories[orderId] && mailHistories[orderId].received;
var isCancelSent = mailHistories[orderId] && mailHistories[orderId].cancel;
// 入金確認済みボタンのラッパー(銀行マーク)
var $receivedWrapper = $('<div class="px-1 d-inline-block"></div>');
var receivedIconClass = isReceivedSent ? 'text-muted' : 'text-success';
var receivedIcon = isReceivedSent ?
'<i class="fa fa-check-circle fa-lg ' + receivedIconClass + '"></i>' :
'<i class="fa fa-university fa-lg ' + receivedIconClass + '"></i>';
var receivedTitle = isReceivedSent ? '入金確認済みメール送信済み' : '入金確認済みメール送信';
var receivedDisabled = isReceivedSent ? ' disabled' : '';
var $receivedBtn = $('<button type="button" class="btn btn-ec-actionIcon nz-mail-btn nz-payment-received-btn" data-order-id="' + orderId + '" data-bs-toggle="tooltip" data-bs-placement="top" title="' + receivedTitle + '"' + receivedDisabled + '>' +
receivedIcon +
'</button>');
if (!isReceivedSent) {
$receivedBtn.on('click', function(e) {
e.preventDefault();
e.stopPropagation();
var orderId = $(this).data('order-id');
if (!confirm('入金確認済みメールを送信しますか?')) {
return;
}
var $btn = $(this);
$.ajax({
url: '/' + adminPath + '/nz_mail/payment_received/' + orderId,
type: 'POST',
data: {
'_token': csrfToken
},
dataType: 'json',
success: function(response) {
if (response.success) {
alert('✓ 入金確認済みメールを送信しました');
// ボタンを送信済み状態に変更
$btn.prop('disabled', true);
$btn.html('<i class="fa fa-check-circle fa-lg text-muted"></i>');
$btn.attr('title', '入金確認済みメール送信済み');
$btn.tooltip('dispose').tooltip();
} else {
alert('エラー: ' + (response.message || '送信に失敗しました'));
}
},
error: function(xhr) {
var errorMsg = 'メール送信に失敗しました';
if (xhr.responseJSON && xhr.responseJSON.message) {
errorMsg += '\n' + xhr.responseJSON.message;
} else if (xhr.responseText) {
errorMsg += '\n' + xhr.responseText;
}
alert(errorMsg);
console.error('Ajax error:', xhr);
}
});
});
}
$receivedWrapper.append($receivedBtn);
// キャンセルボタンのラッパー
var $cancelWrapper = $('<div class="px-1 d-inline-block"></div>');
var cancelIconClass = isCancelSent ? 'text-muted' : 'text-secondary';
var cancelIcon = isCancelSent ?
'<i class="fa fa-check-circle fa-lg ' + cancelIconClass + '"></i>' :
'<i class="fa fa-times-circle fa-lg ' + cancelIconClass + '"></i>';
var cancelTitle = isCancelSent ? 'キャンセルメール送信済み' : 'キャンセルメール送信';
var cancelDisabled = isCancelSent ? ' disabled' : '';
var $cancelBtn = $('<button type="button" class="btn btn-ec-actionIcon nz-mail-btn nz-cancel-btn" data-order-id="' + orderId + '" data-bs-toggle="tooltip" data-bs-placement="top" title="' + cancelTitle + '"' + cancelDisabled + '>' +
cancelIcon +
'</button>');
if (!isCancelSent) {
$cancelBtn.on('click', function(e) {
e.preventDefault();
e.stopPropagation();
var orderId = $(this).data('order-id');
if (!confirm('キャンセルメールを送信しますか?')) {
return;
}
var $btn = $(this);
$.ajax({
url: '/' + adminPath + '/nz_mail/cancel/' + orderId,
type: 'POST',
data: {
'_token': csrfToken
},
dataType: 'json',
success: function(response) {
if (response.success) {
alert('✓ キャンセルメールを送信しました');
// ボタンを送信済み状態に変更
$btn.prop('disabled', true);
$btn.html('<i class="fa fa-check-circle fa-lg text-muted"></i>');
$btn.attr('title', 'キャンセルメール送信済み');
$btn.tooltip('dispose').tooltip();
} else {
alert('エラー: ' + (response.message || '送信に失敗しました'));
}
},
error: function(xhr) {
var errorMsg = 'メール送信に失敗しました';
if (xhr.responseJSON && xhr.responseJSON.message) {
errorMsg += '\n' + xhr.responseJSON.message;
} else if (xhr.responseText) {
errorMsg += '\n' + xhr.responseText;
}
alert(errorMsg);
console.error('Ajax error:', xhr);
}
});
});
}
$cancelWrapper.append($cancelBtn);
// 既存のボタンの後ろに追加
$buttonContainer.append($receivedWrapper).append($cancelWrapper);
});
// ツールチップ初期化
$('[data-bs-toggle="tooltip"]').tooltip();
}
</script>
<style>
.btn-ec-actionIcon {
border: none;
background: none;
padding: 0.25rem 0.5rem;
cursor: pointer;
}
.btn-ec-actionIcon:hover:not(:disabled) {
opacity: 0.7;
}
.btn-ec-actionIcon:disabled {
cursor: not-allowed;
opacity: 0.6;
}
</style>