nimble-ui
Version:
106 lines (102 loc) • 4.67 kB
JavaScript
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;
}