¥
立即购买

JavaScript条件分支生成器

7 浏览
1 试用
0 购买
Dec 8, 2025更新

本提示词专为JavaScript开发场景设计,能够根据指定的变量和条件规则,生成结构完整、符合最佳实践的switch-case语句。它支持自定义变量类型、多种条件分支和默认处理逻辑,确保代码的准确性和可维护性。通过清晰的步骤指导和输出规范,帮助开发者快速构建复杂的条件判断结构,提升开发效率和代码质量。适用于前端交互逻辑、状态管理和业务规则处理等多种应用场景。

代码说明
- 功能:根据请求状态 requestStatus 执行对应的 UI 渲染、监控上报与埋点逻辑,保证所有状态分支都有明确处理,并对未知状态进行监控记录与兜底回退。
- 适用场景:网络请求流转(idle/loading/success/error/timeout)及其 UI 响应与数据埋点。
'use strict';

/**
 * 状态常量,统一管理可接受的状态值
 */
const RequestStatus = Object.freeze({
  IDLE: 'idle',
  LOADING: 'loading',
  SUCCESS: 'success',
  ERROR: 'error',
  TIMEOUT: 'timeout'
});

/**
 * 安全的空函数,避免依赖缺失导致的运行错误
 */
const noop = () => {};

/**
 * 默认依赖实现,可在实际项目中替换为真实实现
 */
const defaultDeps = Object.freeze({
  ui: {
    showIdle: noop,     // 展示空闲/初始态
    showLoading: noop,  // 展示加载中
    showContent: noop,  // 展示成功内容
    showError: noop,    // 展示错误态
    showTimeout: noop,  // 展示超时态
    showEmpty: noop     // 展示空状态占位(兜底)
  },
  monitor: {
    info: noop,
    warn: noop,
    error: noop         // 监控系统错误上报
  },
  analytics: {
    track: noop         // 埋点上报
  }
});

/**
 * 处理请求状态并执行对应逻辑。
 * - 对已知状态执行一致的 UI、监控与埋点处理
 * - 对未知状态进行监控记录与埋点,并回退到空状态占位
 *
 * 返回值:最终展示的 UI 状态('idle' | 'loading' | 'content' | 'error' | 'timeout' | 'empty')
 *
 * @param {string} requestStatus - 当前请求状态
 * @param {object} deps - 依赖注入(UI 渲染、监控、埋点)
 * @param {object} deps.ui
 * @param {function} deps.ui.showIdle
 * @param {function} deps.ui.showLoading
 * @param {function} deps.ui.showContent
 * @param {function} deps.ui.showError
 * @param {function} deps.ui.showTimeout
 * @param {function} deps.ui.showEmpty
 * @param {object} deps.monitor
 * @param {function} deps.monitor.info
 * @param {function} deps.monitor.warn
 * @param {function} deps.monitor.error
 * @param {object} deps.analytics
 * @param {function} deps.analytics.track
 * @returns {'idle'|'loading'|'content'|'error'|'timeout'|'empty'}
 */
function handleRequestStatus(requestStatus, deps = {}) {
  const ui = deps.ui || defaultDeps.ui;
  const monitor = deps.monitor || defaultDeps.monitor;
  const analytics = deps.analytics || defaultDeps.analytics;

  // 规范化输入:仅当为字符串时进行修剪和小写转换
  const normalized = (typeof requestStatus === 'string')
    ? requestStatus.trim().toLowerCase()
    : null;

  // 默认兜底 UI 状态
  let finalUiState = 'empty';

  switch (normalized) {
    case RequestStatus.IDLE:
      // 空闲/初始状态:渲染初始界面
      ui.showIdle();
      analytics.track('request_idle');
      finalUiState = 'idle';
      break;

    case RequestStatus.LOADING:
      // 加载中:展示加载动画/骨架屏
      ui.showLoading();
      analytics.track('request_loading');
      finalUiState = 'loading';
      break;

    case RequestStatus.SUCCESS:
      // 成功:展示内容区域
      ui.showContent();
      analytics.track('request_success');
      finalUiState = 'content';
      break;

    case RequestStatus.ERROR:
      // 失败:展示错误信息,可携带重试操作
      ui.showError({ retry: true });
      monitor.error('REQUEST_ERROR', { status: normalized });
      analytics.track('request_error');
      finalUiState = 'error';
      break;

    case RequestStatus.TIMEOUT:
      // 超时:展示超时提示与重试
      ui.showTimeout({ retry: true });
      monitor.warn('REQUEST_TIMEOUT', { status: normalized });
      analytics.track('request_timeout');
      finalUiState = 'timeout';
      break;

    default:
      // 未知状态:记录监控与埋点,回退为空状态占位
      monitor.error('REQUEST_STATUS_UNKNOWN', { received: requestStatus });
      analytics.track('request_status_unknown', { received: String(requestStatus) });
      ui.showEmpty();
      finalUiState = 'empty';
      break;
  }

  return finalUiState;
}

// 可选:导出函数与常量,方便复用(在模块系统中使用时开启)
// export { handleRequestStatus, RequestStatus };
使用示例
'use strict';

// 伪实现:替换为项目内真实实现
const ui = {
  showIdle: () => console.log('[UI] idle'),
  showLoading: () => console.log('[UI] loading...'),
  showContent: () => console.log('[UI] content shown'),
  showError: ({ retry }) => console.log(`[UI] error${retry ? ' (with retry)' : ''}`),
  showTimeout: ({ retry }) => console.log(`[UI] timeout${retry ? ' (with retry)' : ''}`),
  showEmpty: () => console.log('[UI] empty placeholder')
};

const monitor = {
  info: (msg, data) => console.log('[MONITOR][INFO]', msg, data || ''),
  warn: (msg, data) => console.warn('[MONITOR][WARN]', msg, data || ''),
  error: (msg, data) => console.error('[MONITOR][ERROR]', msg, data || '')
};

const analytics = {
  track: (event, data) => console.log('[ANALYTICS]', event, data || '')
};

// 期望输出示例
handleRequestStatus('idle', { ui, monitor, analytics });     // [UI] idle
handleRequestStatus('loading', { ui, monitor, analytics });  // [UI] loading...
handleRequestStatus('success', { ui, monitor, analytics });  // [UI] content shown
handleRequestStatus('error', { ui, monitor, analytics });    // [UI] error (with retry) + monitor error
handleRequestStatus('timeout', { ui, monitor, analytics });  // [UI] timeout (with retry) + monitor warn

// 未知状态 -> 监控与埋点,并回退为空状态占位
handleRequestStatus('abort', { ui, monitor, analytics });    // [UI] empty placeholder + monitor error + analytics unknown
handleRequestStatus(null, { ui, monitor, analytics });       // [UI] empty placeholder + monitor error + analytics unknown
注意事项
- 使用严格模式('use strict')保证更严格的语法与运行时检查。
- 仅对字符串类型状态做标准化(trim + toLowerCase);非字符串直接进入 default 兜底。
- 每个 case 都包含 break,避免 case 穿透;严禁使用 eval 等不安全方法。
- 默认分支务必保留:做监控记录与埋点,并回退为空状态占位,保障未知状态的可观测性与安全降级。
- 将 UI、监控与埋点以依赖注入方式传入,便于测试与替换真实实现;生产环境请替换默认 noop 实现。
- 如需扩展状态,请同步更新 RequestStatus 常量与对应分支,保持单一来源的真相。
代码说明
- 功能:根据用户角色 userRole 进行权限分支处理,分别处理 guest、member、editor、admin 四种角色。对未知或异常角色进行降级(guest)、跳转登录页并提示联系管理员。
- 使用场景:页面初始化时的访问控制、路由守卫、接口调用前的权限校验等。
- 设计要点:
  1) 统一将输入规范化为小写字符串,避免大小写和空白带来的误判。
  2) 用显式 break 防止 case 穿透。
  3) default 分支执行安全降级与跳转,确保最小权限原则。
  4) 抽离跳转与提示逻辑,便于维护与测试。
'use strict';

/**
 * 访问控制:根据 userRole 返回权限配置,并在异常角色时执行降级与跳转。
 * - 支持的角色:guest | member | editor | admin
 * - 默认处理:降级为 guest,跳转登录页,并提示联系管理员
 */

/** 登录地址(可按需调整为实际登录路由) */
const LOGIN_URL = '/login';

/**
 * 将用户提示写入会话并跳转到登录页(使用 replace 防止回退到受限页)
 * @param {string} reason - 跳转原因标识,便于登录页显示针对性信息
 * @param {string} message - 给用户的提示文案
 */
function redirectToLogin(reason, message) {
  try {
    if (typeof window !== 'undefined' && window.sessionStorage && message) {
      sessionStorage.setItem('auth_message', String(message));
    }
    if (typeof window !== 'undefined' && window.location) {
      const url = new URL(LOGIN_URL, window.location.origin);
      if (reason) url.searchParams.set('reason', String(reason));
      window.location.replace(String(url));
    }
  } catch (err) {
    // 记录但不阻断主流程(例如 URL/Storage 在部分环境不可用)
    // 在生产环境可接入日志上报
    console.error('Failed to redirect to login:', err);
  }
}

/**
 * 简单用户提示(在浏览器中使用 alert,非浏览器环境降级为 console.warn)
 * @param {string} msg
 */
function notifyUser(msg) {
  if (!msg) return;
  if (typeof window !== 'undefined' && typeof window.alert === 'function') {
    window.alert(msg);
  } else {
    // SSR 或非浏览器环境
    console.warn(msg);
  }
}

/**
 * 根据用户角色计算权限并执行必要的分支处理
 * @param {*} userRole - 外部传入的用户角色(将被安全转换为字符串)
 * @returns {{
 *   role: 'guest'|'member'|'editor'|'admin',
 *   permissions: { read: boolean, write: boolean, moderate: boolean, admin: boolean }
 * }}
 */
function handleUserAccess(userRole) {
  // 1) 规范化输入,确保 switch 比较稳定可靠
  const normalized = String(userRole ?? '').trim().toLowerCase();

  // 2) 默认采用最小权限(guest),即使后续分支未命中也确保安全
  let access = {
    role: 'guest',
    permissions: { read: true, write: false, moderate: false, admin: false }
  };

  // 3) 明确的分支逻辑,禁止 case 穿透(每个分支都包含 break)
  switch (normalized) {
    case 'guest': {
      access = {
        role: 'guest',
        permissions: { read: true, write: false, moderate: false, admin: false }
      };
      break;
    }

    case 'member': {
      access = {
        role: 'member',
        permissions: { read: true, write: true, moderate: false, admin: false }
      };
      break;
    }

    case 'editor': {
      access = {
        role: 'editor',
        permissions: { read: true, write: true, moderate: true, admin: false }
      };
      break;
    }

    case 'admin': {
      access = {
        role: 'admin',
        permissions: { read: true, write: true, moderate: true, admin: true }
      };
      break;
    }

    default: {
      // 4) 默认处理:降级到 guest,跳转到登录页并提示联系管理员
      access = {
        role: 'guest',
        permissions: { read: true, write: false, moderate: false, admin: false }
      };

      // 通过会话与 URL 参数向登录页传递原因,前端可在登录页读取并展示
      notifyUser('当前账号权限异常,已降级为访客。请联系管理员。');
      redirectToLogin('role_invalid', '账号权限异常,请联系管理员处理后重新登录。');
      break;
    }
  }

  return access;
}

// 可选:导出函数(在模块化环境中使用)
// export { handleUserAccess };
使用示例
// 示例1:已登录编辑
const access1 = handleUserAccess('editor');
console.log(access1);
// 预期输出:
// {
//   role: 'editor',
//   permissions: { read: true, write: true, moderate: true, admin: false }
// }

// 示例2:未知角色(如后端返回异常值)
const access2 = handleUserAccess('power-user');
// 预期行为:
// - 弹窗提示“请联系管理员”
// - 跳转到 /login?reason=role_invalid
// - 返回值(在跳转前)为:
// {
//   role: 'guest',
//   permissions: { read: true, write: false, moderate: false, admin: false }
// }
注意事项
- 避免省略 break:所有 case 均包含 break,防止逻辑穿透。
- 输入规范化:统一使用 String(...).trim().toLowerCase(),提升鲁棒性。
- 默认最小权限:任何未知/异常角色都将降级为 guest,避免越权风险。
- 跳转方式:使用 window.location.replace,阻止用户通过“后退”回到受限页面。
- 提示传递:通过 sessionStorage 与 URL 参数向登录页传达提示与原因,登录页可读取并展示。
- 环境兼容:在非浏览器环境(如 SSR)时,alert/redirect 将降级处理,不会抛错;可根据实际需求定制行为。
- 安全性:未使用 eval 等不安全方法;在 default 分支处理异常输入,建议同时在服务端做权限校验与路由保护。
// 代码说明
// 本段代码用于根据订单事件(orderEvent)进行状态分支处理,涵盖 created、paid、shipped、delivered、cancelled、refunded 六种业务事件。
// 采用严格模式与标准的 switch-case 结构,确保无 case 穿透、逻辑清晰、可维护。
// 特点:
// - 事件名大小写与空白容错(统一小写匹配)
// - 幂等处理(重复事件不重复更新状态)
// - 完整的默认处理(记录异常事件、保持原状态、通知运营介入)
// - 可插拔的服务依赖(状态更新、时间线记录、消息通知、日志、运营告警)
'use strict';

/**
 * 处理订单事件的统一入口
 * @param {string} orderEvent - 订单事件:created|paid|shipped|delivered|cancelled|refunded
 * @param {Object} ctx - 上下文
 * @param {string|number} ctx.orderId - 订单ID
 * @param {string} ctx.currentStatus - 当前订单状态
 * @param {Object} ctx.services - 外部服务集合
 * @param {Function} ctx.services.updateStatus - (orderId, nextStatus) => Promise<void>
 * @param {Function} ctx.services.addTimeline - (orderId, message) => Promise<void>
 * @param {Function} ctx.services.notifyUser - (orderId, type, payload) => Promise<void>
 * @param {Function} ctx.services.notifyOps - (payload) => Promise<void>
 * @param {Object} ctx.services.logger - { info:Function, warn:Function, error:Function }
 * @returns {Promise<{handled:boolean, orderId:string|number, prevStatus:string, nextStatus:string, event:string}>}
 */
async function handleOrderEvent(orderEvent, ctx) {
  // 基本校验
  if (!ctx || typeof ctx !== 'object') {
    throw new TypeError('ctx is required and must be an object');
  }
  const { orderId, currentStatus, services } = ctx;
  if (!orderId) throw new TypeError('ctx.orderId is required');
  if (!services || typeof services !== 'object') {
    throw new TypeError('ctx.services is required');
  }

  // 要求的服务依赖检查
  const requiredFns = ['updateStatus', 'addTimeline', 'notifyUser', 'notifyOps'];
  requiredFns.forEach(fnName => {
    if (typeof services[fnName] !== 'function') {
      throw new TypeError(`services.${fnName} must be a function`);
    }
  });
  const logger = services.logger && typeof services.logger === 'object'
    ? services.logger
    : { info: () => {}, warn: () => {}, error: () => {} };

  // 归一化事件名
  const event = typeof orderEvent === 'string' ? orderEvent.trim().toLowerCase() : '';
  if (!event) {
    logger.warn(`[Order:${orderId}] Empty or invalid orderEvent: ${String(orderEvent)}`);
  }

  // 使用局部可变状态,便于在一次处理内多处读取
  let status = typeof currentStatus === 'string' ? currentStatus : '';

  // 幂等安全的状态流转+通知封装
  async function transition(nextStatus, timelineMsg, userNotify) {
    if (status !== nextStatus) {
      await services.updateStatus(orderId, nextStatus);
      status = nextStatus;
      logger.info(`[Order:${orderId}] 状态更新: ${String(currentStatus)} -> ${nextStatus}`);
    } else {
      logger.info(`[Order:${orderId}] 状态已为 ${nextStatus},忽略重复事件`);
    }

    if (timelineMsg) {
      await services.addTimeline(orderId, timelineMsg);
    }
    if (userNotify && userNotify.type) {
      await services.notifyUser(orderId, userNotify.type, userNotify.payload || { status: nextStatus });
    }
  }

  try {
    switch (event) {
      case 'created':
        // 订单创建:补充时间线并给用户发送确认
        await transition(
          'created',
          '订单已创建',
          { type: 'order_created', payload: { createdAt: Date.now() } }
        );
        break;

      case 'paid':
        // 订单支付成功:更新状态、记录支付时间、通知用户
        await transition(
          'paid',
          '订单支付成功',
          { type: 'payment_confirmed', payload: { paidAt: Date.now() } }
        );
        break;

      case 'shipped':
        // 订单已发货:更新状态并提醒用户关注物流
        await transition(
          'shipped',
          '订单已发货',
          { type: 'order_shipped', payload: { shippedAt: Date.now() } }
        );
        break;

      case 'delivered':
        // 订单已签收:更新状态并可以引导用户评价
        await transition(
          'delivered',
          '订单已送达',
          { type: 'order_delivered', payload: { deliveredAt: Date.now() } }
        );
        break;

      case 'cancelled':
        // 订单取消:更新状态并说明取消原因(如有)
        await transition(
          'cancelled',
          '订单已取消',
          { type: 'order_cancelled', payload: { cancelledAt: Date.now() } }
        );
        break;

      case 'refunded':
        // 订单退款:更新状态并告知退款进度
        await transition(
          'refunded',
          '订单已退款',
          { type: 'order_refunded', payload: { refundedAt: Date.now() } }
        );
        break;

      default:
        // 默认处理:记录异常事件,保持原状态并通知运营介入
        logger.warn(`[Order:${orderId}] 未识别的事件: ${String(orderEvent)},保持原状态: ${String(currentStatus)}`);
        await services.addTimeline(orderId, `收到异常事件: ${String(orderEvent)},已通知运营介入`);
        await services.notifyOps({
          severity: 'medium',
          title: '异常订单事件',
          details: {
            orderId,
            eventReceived: orderEvent,
            normalizedEvent: event,
            currentStatus: currentStatus || '',
            occurredAt: Date.now()
          }
        });
        break;
    }

    return {
      handled: ['created', 'paid', 'shipped', 'delivered', 'cancelled', 'refunded'].includes(event),
      orderId,
      prevStatus: currentStatus || '',
      nextStatus: status || '',
      event
    };
  } catch (err) {
    // 错误处理:记录并上报运营
    logger.error(`[Order:${orderId}] 处理事件(${String(orderEvent)})失败: ${err && err.message}`);
    try {
      await services.notifyOps({
        severity: 'high',
        title: '订单事件处理失败',
        details: {
          orderId,
          eventReceived: orderEvent,
          currentStatus: currentStatus || '',
          error: err && err.message,
          occurredAt: Date.now()
        }
      });
    } catch (_) {
      // 避免二次异常影响主流程
    }
    // 将错误继续抛出,方便上层感知与回滚
    throw err;
  }
}
// 使用示例
(async () => {
  // 模拟服务
  const mockServices = {
    updateStatus: async (orderId, next) => console.log(`[updateStatus] ${orderId} -> ${next}`),
    addTimeline: async (orderId, msg) => console.log(`[addTimeline] ${orderId} | ${msg}`),
    notifyUser: async (orderId, type, payload) => console.log(`[notifyUser] ${orderId} | ${type}`, payload),
    notifyOps: async (payload) => console.log(`[notifyOps]`, payload),
    logger: {
      info: console.log,
      warn: console.warn,
      error: console.error
    }
  };

  // 1) 正常事件
  const res1 = await handleOrderEvent('paid', {
    orderId: 'ORD-1001',
    currentStatus: 'created',
    services: mockServices
  });
  console.log('Result1:', res1);
  // 预期输出(示例):
  // [updateStatus] ORD-1001 -> paid
  // [addTimeline] ORD-1001 | 订单支付成功
  // [notifyUser] ORD-1001 | payment_confirmed { paidAt: 1690000000000 }
  // Result1: { handled: true, orderId: 'ORD-1001', prevStatus: 'created', nextStatus: 'paid', event: 'paid' }

  // 2) 重复事件(幂等)
  const res2 = await handleOrderEvent('PAID', {
    orderId: 'ORD-1001',
    currentStatus: 'paid',
    services: mockServices
  });
  console.log('Result2:', res2);
  // 预期输出(示例):
  // 状态已为 paid,忽略重复事件
  // [addTimeline] ORD-1001 | 订单支付成功
  // [notifyUser] ORD-1001 | payment_confirmed {...}
  // Result2: { handled: true, orderId: 'ORD-1001', prevStatus: 'paid', nextStatus: 'paid', event: 'paid' }

  // 3) 异常事件(触发默认分支)
  const res3 = await handleOrderEvent('unknown_event', {
    orderId: 'ORD-1002',
    currentStatus: 'created',
    services: mockServices
  });
  console.log('Result3:', res3);
  // 预期输出(示例):
  // 未识别的事件: unknown_event,保持原状态...
  // [addTimeline] ORD-1002 | 收到异常事件: unknown_event,已通知运营介入
  // [notifyOps] { severity: 'medium', ... }
  // Result3: { handled: false, orderId: 'ORD-1002', prevStatus: 'created', nextStatus: 'created', event: 'unknown_event' }
})();
// 注意事项
// - 严格模式下运行,避免隐式全局变量与静默错误。
// - switch-case 不允许省略 break,且无 case 穿透;本实现每个分支均以 break 结束。
// - 事件名在进入分支前做了归一化处理(trim + toLowerCase),提高容错性。
// - 采用幂等更新:仅当目标状态与当前状态不一致时才触发 updateStatus,避免重复写入。
// - 默认分支会记录异常事件并通知运营,但不会修改订单状态,满足“记录异常事件,保持原状态并通知运营介入”的要求。
// - 外部 services 为可插拔依赖,生产环境中请确保其实现稳定、具备重试与超时控制。
// - 如需增加新事件,按照既有模式在 switch 中新增 case,并复用 transition 帮助函数即可。

示例详情

解决的问题

  • 让开发者只需给出变量名、分支条件与默认处理,就能一键生成规范、可读、可直接粘贴到项目的 JavaScript switch-case 代码。
  • 用标准化的分支设计与安全约束,避免常见的遗漏、重复与穿透问题,显著提升代码评审通过率与线上稳定性。
  • 广泛覆盖前端交互、状态管理、业务规则等核心场景,帮助个人快速交付、团队统一风格,并以更低成本完成复杂逻辑的实现与迭代。

适用用户

前端工程师

快速构建交互事件与状态切换的条件分支,一次输入变量与规则,即可生成可读可维护的代码,减少手误与遗漏,缩短迭代周期。

全栈与Node.js开发者

为路由分发、消息处理、订单流转等后端逻辑快速产出统一分支代码,带默认与错误兜底,减少线上故障,便于排查问题。

技术负责人与代码审查者

以统一模板约束风格与注释规范,批量生成标准化分支,降低重复性问题,提升评审效率与团队协作质量。

特征总结

一键生成规范化条件分支代码,免去手写样板,显著提升上线速度与一致性
自动补齐默认处理与边界判断,降低漏判风险,让异常场景也有稳妥落地
按业务语义组织分支结构与注释,阅读一目了然,团队协作与交接更顺畅
根据变量类型智能匹配比较方式,减少重复判断,保持代码精炼而不失严谨
内置最佳实践与风格约束,一键生成可读性高、易维护、可直接投入生产的代码
支持多场景模板化输入,快速适配前端交互、状态管理与业务规则处理
清晰步骤引导与示例输出,新手也能零阻力上手,老手用来批量产出更高效
严格规避不安全与穿透问题,自动校验逻辑完整性,代码质量可控可追溯
可自定义变量名与分支规则,一次配置,多处复用,统一团队编码风格
提供调用示例与注意事项,减少踩坑时间,让代码评审与测试过程更顺滑

如何使用购买的提示词模板

1. 直接在外部 Chat 应用中使用

将模板生成的提示词复制粘贴到您常用的 Chat 应用(如 ChatGPT、Claude 等),即可直接对话使用,无需额外开发。适合个人快速体验和轻量使用场景。

2. 发布为 API 接口调用

把提示词模板转化为 API,您的程序可任意修改模板参数,通过接口直接调用,轻松实现自动化与批量处理。适合开发者集成与业务系统嵌入。

3. 在 MCP Client 中配置使用

在 MCP client 中配置对应的 server 地址,让您的 AI 应用自动调用提示词模板。适合高级用户和团队协作,让提示词在不同 AI 工具间无缝衔接。

AI 提示词价格
¥20.00元
先用后买,用好了再付款,超安全!

您购买后可以获得什么

获得完整提示词模板
- 共 621 tokens
- 3 个可调节参数
{ 变量名称 } { 条件分支 } { 默认处理 }
获得社区贡献内容的使用权
- 精选社区优质案例,助您快速上手提示词
使用提示词兑换券,低至 ¥ 9.9
了解兑换券 →
限时半价

不要错过!

半价获取高级提示词-优惠即将到期

17
:
23
小时
:
59
分钟
:
59