xianyu.js 4.09 KB
/**
 * Xianyu-SDK
 *
 * 与原生 APP 交互的代码
 *
 */
import queryString from 'querystring';

const xianyu = {
  /**
   * 判断是否是 APP
   */
  isAliApp: /AliApp/i.test(navigator.userAgent || ''),
  isiOS: /\(i[^;]+;( U;)? CPU.+Mac OS X/i.test(navigator.userAgent || ''),
  isAndroid: /Android/i.test(navigator.userAgent || ''),

  setXianyuWebview() {
    if (this.isAliApp && window.WindVane) {
      window.WindVane.call('WVIdleFishApi', 'setNavigationBarVisible', { visible: false }, () => {
        console.log('set ok');
      }, () => {
      });
    }
  },

  finishXianyuPage() {
    if (this.isAliApp && window.WindVane) {
      window.WindVane.call('WVIdleFishApi', 'finish', {}, () => {
        console.log('set ok');
      }, () => {
      });
    }
  },

  backXianyuPage() {
    if (this.isAliApp && window.WindVane) {
      window.WindVane.call('WVIdleFishApi', 'nativeBack', {}, () => {
        console.log('set ok');
      }, () => {
      });
    }
  },

  setXianyuTitle(args) {
    if (this.isAliApp && window.WindVane) {
      window.WindVane.call('WVIdleFishApi', 'setTitle', args, () => {
        console.log('set ok');
      }, () => {
      });
    }
  },

  setXianyuNav() {
    if (this.isAliApp && window.WindVane) {
      window.WindVane.call('WVIdleFishApi', 'setHideNavigatorRightItem', {}, () => {
        console.log('set ok');
      }, () => {
      });
    }
  },

  /**
   *
   * @param args payURL
   * @param okAction
   * @param errorAction
   */
  setXianyuPay(args, okAction, errorAction) {
    if (this.isAliApp && window.WindVane) {
      window.WindVane.call('WVIdleFishApi', 'payAlipay', args, (data) => {
        okAction && okAction(data);
      }, (error) => {
        errorAction && errorAction(error);
      });
    }
  },

  goXianyuNewPage(args) {
    if (!args.url) {
      return;
    }

    let urlSplit = args.url.split('?');

    if (urlSplit[1]) {
      let pageName = '';
      let pageParams = {};

      try {
        pageParams = queryString.parse(urlSplit[1]);

        if (!pageParams.hasOwnProperty('isNeedRefresh')) {
          pageParams.isNeedRefresh = false; // 添加禁止刷新参数
          args.url = urlSplit[0] + '?' + queryString.stringify(pageParams);
        }

        let arr = [];
        if (Object.keys(pageParams)[0] === 'openby:yohobuy') {
          for (let key in pageParams) {
            arr.push(pageParams[key]);
          }
          pageParams = JSON.parse(arr[0]).params;
          pageParams.owner = pageParams.logisticsType;
          pageParams.code = pageParams.ordercode;
        }
        if (pageParams.pagename) {
          switch (pageParams.pagename) {
            case 'productList':
              pageName = 'List';
              break;
            case 'productDetail':
              pageName = 'ProductDetail';
              break;
            case 'logisticsInfo':
              pageName = 'orderLogisticsInfo';
              break;
            case 'productListNew':
              pageName = 'List';
              break;
            default:
              break;
          }
          delete pageParams.pagename;
        }
      } catch (error) {
        console.log(error);
      }

      if (pageName) {

        let paramsV = {};
        if (pageName === 'List') {
          paramsV.query = pageParams;
        } else {
          paramsV.params = pageParams;
        }
        console.log(paramsV);
        return this.$router.push({
          name: pageName,
          ...paramsV,
        });
      }
    }

    if (this.isAliApp && window.WindVane) {
      args.url = encodeURI(decodeURI(args.url));

      window.WindVane.call('Base', 'openWindow', args, () => {
        console.log('open new window success');
      }, () => {
        window.open(args.url, '_blank');
      });
    } else {
      window.open(args.url, '_blank');
    }
  },

  copyToClipboard(args, okAction, errorAction) {
    if (this.isAliApp && window.WindVane) {
      window.WindVane.call('Base', 'copyToClipboard', args, data => {
        okAction && okAction(data);
      }, error => {
        errorAction && errorAction(error);
      });
    }
  }
};

export default xianyu;