UNPKG

nimble-ui

Version:
106 lines (102 loc) 4.67 kB
import { User, getBackData, USER_PAGE_TYPE, USER_EVENT_TYPE, USER_DATA_TYPE } from 'nimble-lib'; import Popup from '../popup'; // import mountService from '../../commons/helpers/mountService'; /** * 创建install方法(为了不污染Vue所以不在此处挂载) * * @export * @param {*} TLoginModel 登录组件 * @returns {Function} */ export default function createInstall(TLoginModel) { const install = function (Vue, config) { const $sUser = User(config); const $sPopup = Popup(Vue, { routerOption: { queryKey: 'loginPage' } }); $sUser.$on(USER_EVENT_TYPE.REDIRECT, ({ type, options }) => { const props = { loginBtnTxt: $sUser.isAccessFailure ? '绑定手机号码' : '验证并登录', validData: $sUser.validData.bind($sUser), isAccessFailure: $sUser.isAccessFailure, device: $sUser.getOptions().device, getUserData(dataType, param, headers) { let _name = ''; return new Promise((resolve, reject) => { switch (dataType) { case USER_DATA_TYPE.GET_IDENTITY_CODE: _name = 'getCode'; break; case USER_DATA_TYPE.AUTH_LOGIN_BINGDING: _name = 'signInAndBind'; break; case USER_DATA_TYPE.WX_AUTHORIZE: _name = 'wxAuthorize'; break; case 'message': _name = 'message'; break; } if (_name && $sUser[_name]) { const _back = $sUser[_name](param, headers); _back && _back.then(resolve, reject); } else { reject(new Error(new Error(dataType + '类型不支持'))); } }); } }; getBackData(config && config.filterRedirect, [type, props, options]).then((loginModel) => { if (loginModel === false) { return; } switch (type) { case USER_PAGE_TYPE.LOGIN: getBackData(loginModel || TLoginModel, null, true).then((res) => { const popupConfig = (config && config.popup) || {}; $sPopup.popupData(res && res.default, Object.assign({ wrapCla: 'tc_login-popup', // 最外层追加的Class名 // isShowCloseBtn: true, // showFlag: showFlag maskCloseFlag: 0, isClickBgClose: false, alignCla: 'fullScreen', // ''|'bottom'|'top'|'fullScreen'|'centerMiddle', transitionCls: 'toLeft' }, popupConfig, (options || {}).popup || {}, { props: Object.assign(props, popupConfig.props || {}, { filterRedirect(pageType, prop, opts) { return getBackData(config && config.filterRedirect, [pageType, prop, opts]); } }) })).then((data) => { // $tCar.goBackPage(); if (data.type === 'confirm') { // $sUser.checkedCar(data.data); // 选择车型 } else { $sUser.loginCancel(data.data); // 取消登录 } }); }); break; default: break; } }); }); // $sUser.install = (vue, options) => { // let name = mountService(vue, $sUser); // options && $sUser.setDefaultOptions((options && name && options[name]) || options); // }; return $sUser; }; install.install = (Vue, options) => { const $sUser = install(Vue, options); Vue.use($sUser, options); // $sUser.install(Vue, options); }; return install; }