@gitee/gitee-nps

0.2.4 • Public • Published

Gitee NPS 前端

需求

【Feature】NPS 评价体系建设 https://e.gitee.com/oschina/issues/list?issue=I4FHF6

开发

yarn serve

生产

yarn build:prod

NPS插件使用说明

  • 在 feature 合适的地方使用
  • new NpsClient时,将会发起请求,如果有符合的问卷和显示条件(使用过多少次、符合疲劳度等),将会自动显示。
  • addTick 用于记录操作,表示用户使用过该功能。在合适的地方调用 nps.addTick(), 例如载入页面 或 打开某个弹窗、点击某个按钮。

!!!

  • 大部分功能是自动完成,只需配置codeName 和 enable, userInfo , 在合适地方调用 addTick 后端记录即可,自动获取到后端给的数据, 满足条件后自动显示问卷

安装

yarn add @gitee/gitee-nps -S
import "@gitee/gitee-nps/dist/main.css";
import NpsClient from "@gitee/gitee-nps";

配置说明:

const nps = new NpsClient({
  codeName: "issue_feature_xxx", //代号, 必填项。与管理后台约定一个唯一代号,代表某个 feature。只能是字母、数字或下划线(/^\w+$/)
  userInfo: { // userInfo Object 必填, 包含后端提供的  info 和  signature 等信息
    info: '{"id":593,"username":"git","_salt":1637219320}',
    signature:
      "i3jYTK4lSvHxAUiVBI6l49Cw7fsD5mGx7QdOE_fu5K_Gt1ELXt4GkNy-Ow6Wvbo0WoOT48DNC3CmamkO3vx3jiXhS-zhGMYcCIXMLNQlLhD9g-pfFc_7lf-KxY4eZqivzeokryzlt0tXNzhp-enPpzLiHCkl-iNrISPu8p_rHa4=",
  };
  enable: false, //是否启用, //已登录传入true//  未登录的访客不执行
  className: "custom-class", //自定义 class
  cssText: "z-index:3000;color:black", // 添加一些 style
  lang: "zh-CN", // 配置语言,默认为 zh-CN, 
  enableBuriedPoint: false, // 启用全埋点, 默认不开启
  buriedPointSelector: ".gitee-nps-wrapper, xxx", // 全埋点区域 选择器
  // customData: '', 自定义初始化问卷数据, 用于管理后台预览
  onCreate ({state, data}) {
    // baseData 获取到的表单数据
    console.log("创建了");
    if (state==='error') {
      //xxx
    }
  },
  onShow () {
    console.log("显示了");
  },
  onClose (oData) {
    console.log("关闭了");
    console.log(oData)
  },
  onRate ({ value, state }) {
    console.log("第一步的评分:" + value);
  }, 
  onFormSubmit({state, data}){
    console.log('第二步用户提交的表单:')
    console.log(oData)
  },
  onDestroy () {
    console.log("被销毁");
  },
});
// 在 创建成功前, 实例方法无法调用, 如果需要使用, 请在 `onCreate` 或后续事件回调中使用
// 如果需要, 请在 `onCreate onClose onRate onFormSubmit` 中使用

方法

名称 效果 方法类型
addTick 调用则表示命中埋点, 将发起一次请求, 后端埋点计数 + 1 实例方法
show 手动显示弹窗 实例方法
close 手动关闭弹窗 实例方法
toggle 切换显隐 实例方法
destroy 手动销毁 实例方法
goStepForm 手动进入第二步表单页 实例方法
goStepThank 手动进入最终感谢页 实例方法
goStepRate 手动切回第一步评分页 实例方法
isInitializedCallback 传入一个函数, 当前 NPS 已经初始化成功才执行, 否则不执行 实例方法
refreshData 刷新数据 用于管理后台预览, 每次调用传入问卷数据都会刷新问卷 实例方法
getIsMobile 获取是移动端, 移动端则返回布尔值 true 静态方法

生命周期(配置)

名称 效果说明 参数
onCreate 创建成功 { state, result }
onShow 显示后执行
onClose 关闭后执行 { state, result }
onRate 提交第一步评分 { state, value, result}
onFormSubmit 提交第二步表单 { state: "success", submitData, result}
onDestroy 被销毁了
  • state 值为 success 或 error
  • result 为后端返回的数据

统一配置, 避免重复配置示例:

import NpsClient from "@gitee/gitee-nps";
import "@gitee/gitee-nps/dist/main.css";
function getNps (ops = {}) {
  // 填写一些默认配置
  let defaultOps = {
    userInfo: window.gon.nps,
    enable: !!(window.gon.info && window.gon.info.current_user) && window.gon.nps,
    lang: window.gon.locale, // zh-CN
    onCreate ({ state, err, result }) {
      if (state == "error") {
        // Flash.error(err.responseText || "nps status: " + err.status);
      } else {
        console.log("创建了, 获取的问卷数据:");
        console.log(result);
        ops.onCreate && ops.onCreate({ state, err, result });
      }
    },
    onShow () {
      console.log("显示了");
      ops.onShow && ops.onShow();
    },
    onClose ({ state, err, result }) {
      console.log("关闭了");
      if (state === "error") {
        // Flash.error(err.responseText || "nps status: " + err.status);
      } else {
        ops.onClose && ops.onClose({ state, err, result });
      }
    },
    onRate ({ state, value, result, err }) {
      console.log("第一步评分完成了:", value);
      if (state === "error") {
        // Flash.error(err.responseText || "nps status: " + err.status);
      } else {
        ops.onRate && ops.onRate({ state, value, result });
      }
    },
    onFormSubmit ({ state, submitData, err, result }) {
      console.log("第二步提交的表单:");
      console.log(submitData);
      if (state === "error") {
        // Flash.error(err.responseText || "nps status: " + err.status);
      } else {
        ops.onFormSubmit && ops.onFormSubmit({ state, submitData, err, result });
      }
    },
    onDestroy() {

    }
  };
  // 覆盖配置。 这里覆盖并了属性 不覆盖函数
  Object.keys(ops).forEach(key => {
    if (typeof ops[key] != "function") {
      defaultOps[key] = ops[key];
    }
  });

  return new NpsClient(defaultOps);
}
export { getNps }
window.getNps = getNps;
  // 使用时
  import { getNps } from "xxx"
  var nps1 = getNps({ codeName: "2" });
  document.body.addEventListener('click', function(e) {
    if (e.target && e.target.closest('[data-handler=bootstrap-markdown-cmdSuggestion]')) {
      nps1.addTick()
    }
  }, true);   

Readme

Keywords

none

Package Sidebar

Install

npm i @gitee/gitee-nps

Weekly Downloads

17

Version

0.2.4

License

ISC

Unpacked Size

151 kB

Total Files

21

Last publish

Collaborators

  • normalcoder
  • hapboy
  • nanzm
  • chenqiongqiong
  • lc-soft
  • haohao666
  • javanoclaw
  • bluishoul
  • zhongjieling