import
Base
from
'./base';
let
shareHandler = [];
let
versionApp =
null;
class
BaseApp
extends
Base {
/**
*
@method
getDeviceType
*
@description
获取设备系统名称
*/
getDeviceType() {
const
u =
navigator.
userAgent;
if (
u.
match(
/Android/
i) !=
null) {
//android代码
return
"Android";
}
else
if (
u.
match(
/iPhone
|
iPod/
i) !=
null) {
//IOS
return
"IOS";
}
else {
return
"WP";
}
}
/**
*
@method
isInApp
*
@param
无
*
@description
获取运行平台
*/
isInApp() {
if (
navigator.
userAgent.
indexOf(
'CEAIRAPP') > -
1 ||
this.
getP())
return
true;
switch (
this.
getDeviceType()) {
case
"Android":
return !!
window.
Login && !!
window.
gotoback;
case
"IOS":
return !!
window.
clickOnback && !!
window.
clickOnLogin;
case
"WP":
return !!
window.
external && !!
window.
external.
notify;
}
}
toBookTicket() {
// 如果m 站,直接跳m站链接
if (!
this.
isInApp()) {
return
window.
location.
href =
"https://m.ceair.com/pages/booking/index.html";
}
try {
switch (
this.
getDeviceType()) {
case
"Android":
SelectAirport.
clickOnAirport();;
break;
case
"IOS":
clickOnAirport();
break;
case
"WP":
external.
notify(
'clickOnAirport');
break;
}
}
catch (
e) {
console.
log(
e)
}
}
/**
*
@method
setHeader
*
@param
title
字符串
*
@description
设置app头部显示内容
*/
setHeader(
title) {
try {
switch (
this.
getDeviceType()) {
case
"Android":
gototitle.
clickOntitle(
title);
break;
case
"IOS":
clickOntitle(
title);
break;
case
"WP":
external.
notify(
'clickOntitle?' +
title);
break;
}
}
catch (
e) {
console.
log(
e)
}
}
bindBack() {
window.
historyBack = ()
=>
history.
go(-
1);
return (
isFirst)
=> {
try {
switch (
this.
getDeviceType()) {
case
"Android":
if (!
isFirst) {
gotoback.
clickOnback(
'true',
'historyBack()');
}
else
gotoback.
clickOnback(
'false',
'');
break;
case
"IOS":
if (!
isFirst)
clickOnback(
"true",
"historyBack()");
else {
clickOnback(
"false",
"");
}
break;
case
"WP":
if (!
isFirst)
external.
notify(
'clickOnback?true&historyBack');
else
external.
notify(
'clickOnback?true&');
break;
}
}
catch (
e) {
console.
log(
e)
}
}
}
/**
*
@method
login
*
@param
url
字符串 登录后跳转的地址
*
@param
title
字符串 登录后的title
*
@param
model
模式 ffp_login 去掉手机登录 mobile_login 默认登录
*
@description
页面跳转
*/
login(
url =
location.
href,
title,
model) {
if (
this.
isInApp()) {
this.
hybirdLogin(
location.
href,
title,
model);
return;
}
location.
href =
'http://m.ceair.com/mobile/user/user!loginOtherPage.shtml?channel=712&redirectUrl=' +
url;
// location.href='http://sc.ceair.com:8080/mobile/user/user!loginOtherPage.shtml?channel=712&redirectUrl=' + url
}
// 登录
hybirdLogin(
url =
location.
href,
title,
model =
"mobile_login") {
url =
url.
replace(
/
\&
/
g,
'&');
try {
switch (
this.
getDeviceType()) {
case
"Android":
Login.
clickOnLogin(
url,
title,
model);
break;
case
"IOS":
clickOnLogin(
url,
title,
model);
break;
case
"WP":
external.
notify(
"clickOnLogin?" +
url +
"&" +
title +
model);
break;
}
}
catch (
e) {
console.
log(
e);
}
}
getCardVoucher(
passportId,
couponType,
couponStatus,
pageNo,
pageSize) {
if (
this.
isInApp()) {
this.
hybirdCardVoucher(
passportId,
couponType,
couponStatus,
pageNo,
pageSize);
return;
}
else {
location.
href =
'http://m.ceair.com/pages/coupon/index.html?p=' +
this.
getP();
}
}
/**
*
@method
CardVoucher
*
@param
passportId
字符串 用户ID
*
@param
couponType
字符串 HONGBAO(红包),THIRD_COUPON(第三方卡券),TALENT(达人券)
*
@param
couponStatus
字符串 // 默认 FORUSE
*
@param
pageNo
字符串 // 默认 1
*
@param
pageSize
字符串 // 默认 25
*/
hybirdCardVoucher(
passportId,
couponType,
couponStatus,
pageNo,
pageSize) {
try {
switch (
this.
getDeviceType()) {
case
"Android":
gotocardsurl.
clickOngotoCardsurl(
passportId,
couponType,
couponStatus,
pageNo,
pageSize)
break;
case
"IOS":
clickOngotoCardsurl(
passportId,
couponType,
couponStatus,
pageNo,
pageSize)
break;
case
"WP":
external.
notify(
'clickOngotoCardsurl? passportId& couponType &couponStatus &pageNo & pageSize ');
break;
}
}
catch (
e) {
console.
log(
e);
}
}
saveAppParam(
params = {}) {
let {
p,
Entry } =
params;
p &&
this.
saveP(
p);
Entry &&
this.
saveEntry(
Entry);
}
saveP(
p) {
p &&
sessionStorage.
setItem(
'p',
p);
}
getP() {
return
sessionStorage.
getItem(
'p');
}
saveEntry(
Entry) {
Entry &&
this.
setCookie(
'Entry',
Entry, {
path:
'/' });
}
getEntry(
Entry) {
return
this.
getCookie(
'Entry');
}
isHybirdLogin() {
return !!
this.
getP();
}
downloadPdf(
title,
url) {
if (!
this.
isInApp())
return;
try {
switch (
this.
getDeviceType()) {
case
"Android":
gotopdf.
clickOnPdf(
title,
url);
break;
}
}
catch (
e) {
console.
log(
e);
}
}
isHybirdAdroid() {
return
this.
isInApp() &&
this.
getDeviceType() ==
'Android';
}
/*
@description 解析url参数
@param url {string} url
@return {object} 参数对象
*/
parse_url(
url =
window.
location.
href) {
var
pattern =
/
(
\w
+
)
=
([^
\#
&
]
*
)
/
ig;
var
parames = {};
url.
replace(
pattern,
function (
attr,
key,
value) {
let
paramValue =
decodeURIComponent(
value);
if (
paramValue ==
'null') {
paramValue =
null;
}
else
if (
paramValue ==
'true') {
paramValue =
true;
}
else
if (
paramValue ==
'false') {
paramValue =
false;
}
else
if (
paramValue !=
null && !
isNaN(
Number(
paramValue))) {
let
oldValue =
paramValue;
paramValue =
Number(
paramValue);
if (
oldValue !=
paramValue +
'') {
paramValue =
oldValue;
}
}
parames[
key] =
paramValue;
});
return
parames;
};
/*
@description 设置url参数
@param url {string} url
@param params {object} 参数
@return {string} 新的url
*/
setUrlParams(
url,
params) {
var
urlStr =
url.
split(
'?');
urlStr[
1] =
this.
serializeParams(
params);
return
urlStr.
join(
'?')
}
/*
@description 修改url参数
@param url {string} url
@param params {object} 参数
@return {string} 新的url
*/
extendUrlParams(
url,
params) {
var
oldparams =
this.
parse_url(
url);
return
this.
setUrlParams(
url,
Object.
assign(
oldparams,
params));
}
/*
@v app壳版本
@return 是否是新版本
*/
compareAppVersion =
function (
v) {
if (!
versionApp)
return
true;
v =
Number(
v.
replace(
/
\.
/
g,
''));
var
curV =
Number(
this.
versionApp.
replace(
/
\.
/
g,
''));
return
curV >=
v;
}
/*
@description 继承当前url参数变成新的url
@param newBaseUrl {string} url
@param params {object} 参数
@return {string} 新的url
*/
extendUrlParamsAndCreateNewUrl(
newBaseUrl,
params) {
var
oldparams =
this.
parse_url(
location.
href);
return
this.
setUrlParams(
newBaseUrl,
Object.
assign(
oldparams,
params));
}
serializeParams(
params) {
var
strParams = [];
for (
var
key
in
params) {
if (
params[
key] !=
undefined) {
if (
typeof (
params[
key]) ==
'object') {
strParams.
push(
`
${
encodeURIComponent(
key)
}
=
${
JSON.
stringify(
params[
key])
}
`);
}
else {
strParams.
push(
`
${
encodeURIComponent(
key)
}
=
${
encodeURIComponent(
params[
key])
}
`);
}
}
}
return
strParams.
join(
'&');
}
/*
@description app头部分享按钮绑定分享内容
@param {object} options
options.type type='share' 显示分享按钮,type='home'显示home按钮
options.shareTitle {string} 分享标题
options.imgUrl {string} 分享图片路径
options.shareContent {string} 分享内容
options.shareUrl {string} 分享的url链接
*/
onHeaderShare({
type,
shareTitle =
'',
imgUrl =
'',
shareContent =
'',
shareUrl =
'' }) {
try {
shareUrl =
this.
extendUrlParams(
shareUrl, {
p:
undefined });
//过滤p值
switch (
this.
getDeviceType()) {
case
'Android':
gotoTitleShare.
clickOnTitleShare(
type,
shareTitle,
imgUrl,
shareContent,
shareUrl);
break;
case
'IOS':
clickOnTitleShare(
type,
shareTitle,
imgUrl ||
'null',
shareContent,
shareUrl);
break;
}
}
catch (
e) {
console.
log(
e);
}
}
/*
@description H5页面分享
@param {object} options
options.shareTitle {string} 分享标题
options.imgUrl {string} 分享图片路径
options.shareContent {string} 分享内容
options.shareUrl {string} 分享的url链接
options.success {function} 分享成功回调
options.error {function} 分享失败回调
*/
share({
shareTitle =
'',
imgUrl =
'',
shareContent =
'',
shareUrl =
'',
success =
new
Function,
error =
new
Function }) {
shareUrl =
this.
extendUrlParams(
shareUrl, {
p:
undefined });
//过滤p值
shareHandler.
push({
success,
error });
try {
switch (
this.
getDeviceType()) {
case
'Android':
gotowebchatshare6.
clickOnwebchatshare6(
shareTitle,
shareContent,
shareUrl,
'shareSuccess()',
'shareFail()',
imgUrl);
break;
case
'IOS':
clickOnwebchatshare(
shareTitle,
shareContent,
shareUrl,
'shareSuccess()',
'shareFail()',
imgUrl);
break;
}
}
catch (
e) {
console.
log(
e);
}
}
/*
@description 获取localStorage中对应key的值
@param key {string}
*/
getItem(
key) {
var
valueObj =
localStorage.
getItem(
key);
if (
valueObj.
expires <
new
Date) {
localStorage.
removeItem(
key);
return
null;
}
return
valueObj.
value;
}
/*
@description 把值存储到localStorage中
@param key {String} 键
@param value {String} 值
@param expires {Date} 过期时间,不填则存储一个理论上永不过期的值
*/
setItem(
key,
value,
expires =
new
Date(
'2099/12/31 23:59:59')) {
localStorage.
setItem(
key, {
value,
expires });
}
/*
@description 删除localStorage中对应的key项
@param key {String} 键
*/
removeItem(
key) {
localStorage.
removeItem(
key);
}
/*
@description 删除localStorage所有项
*/
clear() {
localStorage.
clear();
}
};
export
default
BaseApp;
window.
shareSuccess =
function (...
args) {
while (
shareHandler.
length) {
let {
success } =
shareHandler.
shift();
if (
typeof
success ==
'function')
success(...
args);
}
}
window.
shareFail =
function (...
args) {
while (
shareHandler.
length) {
let {
error } =
shareHandler.
shift();
if (
typeof
error ==
'function')
error(...
args);
}
}
## APP 分享方法
import
BaseApp
from
'baseApp';
const
baseapp =
new
BaseApp();
// 判断是否是APP
baseapp.
isInApp()
// 返回 true/false
// 分享调用方法
baseapp.
share({
shareTitle:
document.
title ||
'旅游度假-东方航空',
//分享标题
imgUrl:
'./images/jiudian.jpg',
// 分享图片
shareContent:
'东航自营度假频道,优惠的旅游价格,优选的机酒资源,透明的旅行方案尽汇于此。',
// 修改首页分享副标题
shareUrl:
location.
href
//分享链接
})