组内业务开发总结

埋点上报失败问题

  1. killwebview客户端关闭当前webview, 导致埋点上报失败问题。

    埋点上报为异步请求,需等1000ms延时执行killwebview。

  2. 埋点上报时,若使用 window.location.href 跳转时,也需要延时执行。

部分情况nativeOpen新开webview空白

最好使用encodeURI对url进行编码,不然地址有中文字符时,跳转有问题。

const wapUrl = encodeURI(`${window.location.origin}/wukong-app/order/order-detail?order_id=${orderId}&sub_order_id=${subOrderId}&previous_source=付款详情页`);
nativeOpen('web', {
  url: btoa(wapUrl),
});
killWebView();

部分图片在ios下手机不显示

测试环境开口秀背景图在ios手机不显示。本地扫码正常,删除content也无效。最后换图解决。

有些图片本事显示就是有问题,可以考虑换图。

JSON.parse() 错误处理。避免由于字段问题引发js运行中断。

/**
* @description 捕获无效JSON解析错误
*/
export function parseJSONSafely(str) {
  try {
    return JSON.parse(str);
  } catch (e) {
    // 返回默认对象,或根据用例返回null。
    return {};
  }
}

公用组件尽量不要添加业务逻辑,比如埋点什么的,减少维护成本。

最近在使用一个弹窗组件,但是每个课程上报的埋点以及文案不一致。

看到之前的业务写法是,在这个组件加课程类型判断,修改文案以及上报埋点等。维护起来及其不便。

  • 父子级使用$emit
  • 多层级使用 provide/inject

CourseFooter.vue

// 挽留弹窗使用
provide() { // 注意需要写成函数
  return {
    showTips: ['超值优惠福利', '动画无限回放', '贴心成长顾问'],
    buyText: '继续报名',
    sensorsLeavePopClickHandle: this.sensorsLeavePopClickHandle,
    sensorsLeavePopOverlay: this.sensorsLeavePopOverlay,
  };
},

isLeaveMask.vue

export default {
  inject: {
    showTips: {
      type: Array,
      default() {
        return ['超值优惠福利', '动画无限回放', '贴心成长顾问'];
      }
    },
    buyText: {
      type: String,
      default() {
        return '继续购买';
      }
    },
    sensorsLeavePopClickHandle: {
      type: Function,
    },
  },
  methods: {
    reject() {
      this.sensorsLeavePopClickHandle('拒绝');
      this.$emit('reject');
    },
    buy() {
      this.sensorsLeavePopClickHandle(this.buyText.slice(2));
      this.$emit('buy');
    },
  }
  };

vuex getters 命名重复问题,导致使用疑惑以及代码报错。

最近用到别人代码使用了activityInfo属性获取信息,但是发现怎么也获取不到,别的页面就可以。后来仔细排查发现。

course.js 下state 已经声明 activityInfo ,getters 又重新定义activityInfo导致使用疑惑以及引入混乱。

这种需要一个文件同时使用的情况,又不能更改store.js定义的名字。可以如下处理,重新定义一个变量名字serviceInfo区分。

...mapState('course', [
  'isBuyZero',
  'isOldUser',
  ...
]),
...mapState('course', {
  serviceInfo: state => state.activityInfo
}),
...mapGetters('course', ['activityInfo', ...]),

一次提测延期问题

开发优先开发需要跟客户端接口联调,以及微信分享支付相关功能。避免提测前问题太多,时间紧急。

需求问题更改,需走排期。

ios下使用transform引发圆角样式失效

img 父级border-radius,overflow:hidden 失效。

原因由于父级使用了transform属性,对img也border-radius即可。

img元素transform也会导致圆角失效。

下单接口带上网络状态参数

端内购课场景,需要在创建订单的时候增加network_type字段,该字段含义为当前设备的网络状态

方案一: 采用h5的networkInformation属性的type字段去校验,但是h5当前属性已经废弃

方案二: 采用jsBridge调用端的能力获取,但是是异步过程

采用方案二+promise的写法 需要考虑jsBridge失效或者出错的情况

function getNetworkType() {
  return new Promise((resolve, reject) => {
    try {
      getNetworkStatus(status => {
        switch (status) {
          case '2':
            resolve('wifi');
            break;
          default:
            resolve('4g');
            break;
        }
        setTimeout(() => {
          resolve();
        }, 800);
      });
    } catch (e) {
      reject(e);
    }
  });
}

调用
export async function createOrderNew(data) {
  const url = '/shop/order/create';
  data.network_type = await getNetworkType();
  return getData({
    url,
    data,
    headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
    isToastErr: false,
  }}

打赏一个呗

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦