You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Apps Script脚本故障求助:重新分配审核人时无弹窗提示

问题排查与修复方案

1. 补全不完整的SweetAlert代码

你提供的Swal调用代码存在语法错误,缺少闭合括号与语句,导致代码无法正常执行。修复后的完整代码如下:

Swal.fire({
  title: 'Select new reviewer',
  input: 'select',
  inputOptions: inputOptionsPromise,
  inputPlaceholder: 'Select new reviewer',
  showCancelButton: true,
  inputValidator: function(value) {
    return new Promise(function(resolve, reject) {
      if (value !== '') {
        resolve();
      } else {
        reject('You need to select a reviewer');
      }
    })
  }
}).then((address) => {
  if (address.isConfirmed) {
    Swal.fire({
      icon: 'success', // 注意:原type参数已废弃,改用icon
      html: 'Reviewer has been changed to: ' + address.value
    });
  }
});

2. 修复promiseLoadout与promiseResolution的逻辑问题

promiseResolution是无限递归的同步函数,会阻塞浏览器主线程,导致后续代码(包括Swal弹窗)无法执行;同时waitFor函数未定义,selectLi和userMapping的来源不明确,重构后的代码如下:

// 实现异步等待条件满足的函数,避免阻塞
function waitFor(conditionFunc) {
  return new Promise(resolve => {
    const interval = setInterval(() => {
      if (conditionFunc()) {
        clearInterval(interval);
        resolve();
      }
    }, 100);
  });
}

async function promiseLoadout () {
  // 等待selectLi和userMapping初始化完成
  await waitFor(() => window.selectLi != null && window.userMapping != null);
  
  // 异步获取用户数据
  const data = await new Promise(resolve => {
    google.script.run.withSuccessHandler(resolve).convertToJson("Users");
  });
  
  const promiseOutput = {};
  JSON.parse(data).forEach(obj => {
    promiseOutput[obj.userName] = obj.userID + "@yourdomain.com"; // 补全实际域名
  });
  
  // 直接生成可用的Promise对象
  window.inputOptionsPromise = Promise.resolve(promiseOutput);
}

// 调用初始化函数
promiseLoadout();

3. 添加按钮点击事件绑定

确保「重新分配」>「审核人」按钮有对应的点击事件触发弹窗,假设按钮ID为assignReviewerBtn,添加如下代码:

$(document).ready(function() {
  $('#assignReviewerBtn').click(function() {
    // 确保审核人列表加载完成后再弹窗
    window.inputOptionsPromise.then(options => {
      Swal.fire({
        title: 'Select new reviewer',
        input: 'select',
        inputOptions: options,
        inputPlaceholder: 'Select new reviewer',
        showCancelButton: true,
        inputValidator: function(value) {
          return new Promise(function(resolve, reject) {
            value !== '' ? resolve() : reject('You need to select a reviewer');
          })
        }
      }).then((address) => {
        if (address.isConfirmed) {
          Swal.fire({
            icon: 'success',
            html: 'Reviewer has been changed to: ' + address.value
          });
          // 这里可添加调用google.script.run更新审核人的后端逻辑
          // google.script.run.updateReviewer(address.value);
        }
      });
    }).catch(err => {
      Swal.fire('Error', 'Failed to load reviewer list', 'error');
      console.error(err);
    });
  });
});

4. 确认依赖加载正确

确保页面已正确引入jQuery和SweetAlert2:

<script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>

额外建议

  • 打开浏览器开发者工具(F12)的Console面板查看报错信息,这是排查前端问题的核心手段。
  • 避免使用deligateMS这类同步阻塞代码,会导致页面卡顿甚至无响应。

内容的提问来源于stack exchange,提问作者user25696163

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 22:35:53