(function() {
‘use strict’;
// レコード詳細画面表示時のイベントリスナーを設定
kintone.events.on(‘app.record.detail.show’, function(event) {
console.log(“ポップアップを表示してユーザーの選択を待つ”);
showAccessConfirmationPopup(event.record);
return false; // 通常の画面表示をキャンセル
});
// アクセス権限確認ポップアップを表示する関数
function showAccessConfirmationPopup(record) {
const overlay = createOverlay();
const dialog = createDialog();
const { yesButton, noButton } = createButtons();
dialog.appendChild(createDialogContent(yesButton, noButton));
document.body.appendChild(overlay);
document.body.appendChild(dialog);
// ボタンクリック時のイベントリスナーを設定
yesButton.addEventListener(‘click’, () => handleYesClick(dialog, overlay));
noButton.addEventListener(‘click’, () => handleNoClick(dialog, overlay));
}
// 背景オーバーレイを作成する関数
function createOverlay() {
const overlay = document.createElement(‘div’);
Object.assign(overlay.style, {
position: ‘fixed’,
top: ‘0’,
left: ‘0’,
width: ‘100%’,
height: ‘100%’,
backgroundColor: ‘rgba(0, 0, 0, 1)’, // 完全に不透明な黒背景
zIndex: ‘999’
});
return overlay;
}
// ダイアログ要素を作成する関数
function createDialog() {
const dialog = document.createElement(‘div’);
dialog.className = ‘modern-dialog-overlay’;
Object.assign(dialog.style, {
position: ‘fixed’,
top: ‘0’,
left: ‘0’,
width: ‘100%’,
height: ‘100%’,
backgroundColor: ‘rgba(0, 0, 0, 1)’, // 完全に不透明な黒背景
display: ‘flex’,
justifyContent: ‘center’,
alignItems: ‘center’,
zIndex: ‘1000’
});
return dialog;
}
// ダイアログの内容を作成する関数
function createDialogContent(yesButton, noButton) {
const dialogContent = document.createElement(‘div’);
dialogContent.className = ‘modern-dialog-content’;
Object.assign(dialogContent.style, {
backgroundColor: ‘#fff’,
padding: ’30px’,
borderRadius: ‘8px’,
textAlign: ‘center’,
width: ‘400px’,
boxShadow: ‘0 4px 12px rgba(0, 0, 0, 0.15)’
});
// メッセージ要素の作成
const message = document.createElement(‘p’);
message.className = ‘modern-dialog-message’;
message.innerText = ‘あなたは閲覧権限があるユーザーですか?’;
Object.assign(message.style, {
fontSize: ’18px’,
marginBottom: ’20px’
});
// ボタンコンテナの作成
const buttonContainer = document.createElement(‘div’);
Object.assign(buttonContainer.style, {
display: ‘flex’,
justifyContent: ‘center’,
gap: ’20px’
});
// ボタンの追加
buttonContainer.appendChild(yesButton);
buttonContainer.appendChild(noButton);
// 要素の組み立て
dialogContent.appendChild(message);
dialogContent.appendChild(buttonContainer);
return dialogContent;
}
// 「はい」「いいえ」ボタンを作成する関数
function createButtons() {
const yesButton = createButton(‘はい’, ‘modern-dialog-button-primary’);
const noButton = createButton(‘いいえ’, ‘modern-dialog-button-secondary’);
return { yesButton, noButton };
}
// ボタン要素を作成するヘルパー関数
function createButton(text, className) {
const button = document.createElement(‘button’);
button.className = className;
button.innerText = text;
return button;
}
// 「はい」ボタンクリック時の処理
function handleYesClick(dialog, overlay) {
document.body.removeChild(dialog);
document.body.removeChild(overlay);
// 現在のレコードIDを取得
var recordId = kintone.app.record.getId();
// 詳細画面にリダイレクト
window.location.href = `/k/${kintone.app.getId()}/show#record=${recordId}`;
}
// 「いいえ」ボタンクリック時の処理
function handleNoClick(dialog, overlay) {
document.body.removeChild(dialog);
document.body.removeChild(overlay);
alert(‘アクセスが許可されていません。’);
// 一覧画面にリダイレクト
window.location.href = `/k/${kintone.app.getId()}/`;
}
})();