| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152 |
- /**
- * 全局确认对话�?
- * 加载�?index.html 中,覆盖整个页面
- */
- class GlobalConfirm {
- constructor() {
- this.overlay = null;
- this.message = null;
- this.okBtn = null;
- this.cancelBtn = null;
- this.resolveCallback = null;
- this.ready = false;
-
- // 立即初始�?
- this.initPromise = this.init();
- }
- async init() {
- // ('[GlobalConfirm] �?init 开�?);
-
- await this.ensureElements();
- // ('[GlobalConfirm] �?查找DOM元素...');
-
- this.overlay = document.getElementById('globalConfirmOverlay');
- this.message = document.getElementById('confirmMessage');
- this.okBtn = document.getElementById('confirmOkBtn');
- this.cancelBtn = document.getElementById('confirmCancelBtn');
-
- // ('[GlobalConfirm] overlay:', !!this.overlay);
- // ('[GlobalConfirm] message:', !!this.message);
- // ('[GlobalConfirm] okBtn:', !!this.okBtn);
- // ('[GlobalConfirm] cancelBtn:', !!this.cancelBtn);
-
- if (this.overlay && this.okBtn && this.cancelBtn) {
- this.bindEvents();
- this.ready = true;
- // ('[GlobalConfirm] �?初始化完成,ready=true');
- } else {
- // ('[GlobalConfirm] �?初始化失败,部分元素未找�?);
- }
- }
- async ensureElements() {
- // ('[GlobalConfirm] �?ensureElements 开�?);
-
- if (document.getElementById('globalConfirmOverlay')) {
- // ('[GlobalConfirm] �?元素已存在,跳过加载');
- return;
- }
- try {
- // ('[GlobalConfirm] �?开始加�?/page/confirm-view.html');
- const response = await fetch('/page/confirm-view.html', { cache: 'no-cache' });
- // ('[GlobalConfirm] 响应状�?', response.status, response.statusText);
-
- if (!response.ok) {
- throw new Error('加载确认对话框组件失败');
- }
- const html = await response.text();
- // ('[GlobalConfirm] �?HTML已获取,长度:', html.length);
-
- document.body.insertAdjacentHTML('beforeend', html);
- // ('[GlobalConfirm] �?HTML已插入到body');
- } catch (error) {
- // ('[GlobalConfirm] �?加载确认对话框组件失�?', error);
- }
- }
- bindEvents() {
- // ('[GlobalConfirm] �?绑定事件监听�?);
-
- this.okBtn.addEventListener('click', () => {
- // ('[GlobalConfirm] �?用户点击确认按钮');
- this.hide();
- if (this.resolveCallback) {
- // ('[GlobalConfirm] �?调用 resolveCallback(true)');
- this.resolveCallback(true);
- }
- });
- this.cancelBtn.addEventListener('click', () => {
- // ('[GlobalConfirm] �?用户点击取消按钮');
- this.hide();
- if (this.resolveCallback) {
- // ('[GlobalConfirm] �?调用 resolveCallback(false)');
- this.resolveCallback(false);
- }
- });
- // 点击遮罩层取�?
- this.overlay.addEventListener('click', (e) => {
- if (e.target === this.overlay) {
- this.hide();
- if (this.resolveCallback) {
- this.resolveCallback(false);
- }
- }
- });
- // ESC键取�?
- document.addEventListener('keydown', (e) => {
- if (e.key === 'Escape' && this.overlay && this.overlay.classList.contains('show')) {
- this.hide();
- if (this.resolveCallback) {
- this.resolveCallback(false);
- }
- }
- });
- }
- async show(message) {
- // ('[GlobalConfirm] �?show() 被调�?);
- // ('[GlobalConfirm] 消息:', message);
- // ('[GlobalConfirm] ready状�?', this.ready);
-
- // 确保初始化完�?
- // ('[GlobalConfirm] �?等待初始化完�?..');
- await this.initPromise;
- // ('[GlobalConfirm] �?初始化完�?);
- // ('[GlobalConfirm] overlay:', !!this.overlay);
- // ('[GlobalConfirm] message:', !!this.message);
- // ('[GlobalConfirm] okBtn:', !!this.okBtn);
- // ('[GlobalConfirm] cancelBtn:', !!this.cancelBtn);
-
- return new Promise((resolve) => {
- // ('[GlobalConfirm] �?创建Promise,等待用户操�?);
- this.resolveCallback = resolve;
- if (this.message) {
- this.message.textContent = message;
- // ('[GlobalConfirm] �?消息已设�?);
- }
- if (this.overlay) {
- this.overlay.classList.add('show');
- // ('[GlobalConfirm] �?对话框已显示');
- }
- });
- }
- hide() {
- // ('[GlobalConfirm] �?隐藏对话�?);
- if (this.overlay) {
- this.overlay.classList.remove('show');
- // ('[GlobalConfirm] �?对话框已隐藏');
- }
- }
- }
- // 全局单例
- // console.log('[GlobalConfirm] 创建全局实例...');
- window.GlobalConfirm = new GlobalConfirm();
- // console.log('[GlobalConfirm] ✓ 全局实例已创建');
|