loginPrompt.js 1.37 KB
import Vue from 'vue';

const defaultOptions = {
  title: '登录提示',
  message: '当前操作需要先登录,是否前往登录页面?',
  confirmText: '去登录',
  cancelText: '暂不登录',
};

export const loginPromptState = Vue.observable({
  visible: false,
  title: defaultOptions.title,
  message: defaultOptions.message,
  confirmText: defaultOptions.confirmText,
  cancelText: defaultOptions.cancelText,
});

let resolver = null;

const resetState = () => {
  loginPromptState.visible = false;
  loginPromptState.title = defaultOptions.title;
  loginPromptState.message = defaultOptions.message;
  loginPromptState.confirmText = defaultOptions.confirmText;
  loginPromptState.cancelText = defaultOptions.cancelText;
  resolver = null;
};

export const openLoginPrompt = (options = {}) => {
  if (resolver) {
    resolver(false);
    resetState();
  }

  loginPromptState.title = options.title || defaultOptions.title;
  loginPromptState.message = options.message || defaultOptions.message;
  loginPromptState.confirmText = options.confirmText || defaultOptions.confirmText;
  loginPromptState.cancelText = options.cancelText || defaultOptions.cancelText;
  loginPromptState.visible = true;

  return new Promise(resolve => {
    resolver = resolve;
  });
};

export const closeLoginPrompt = (confirmed = false) => {
  if (resolver) {
    resolver(confirmed);
  }
  resetState();
};