npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

bw-platform-sdk

v0.7.5

Published

博康云信平台sdk

Downloads

164

Readme

bw-platform-sdk 入门

欢迎使用博康开发者平台前端 sdk 库,在这里你将了解到如何通过本 sdk 访问平台数据内容

前置条件

本 sdk 仅供前端 app 开发者使用,请事先下载并安装博康开发者平台,平台下载请咨询 [email protected]

安装

本 sdk 基于 es6 规范,支持 vue 等框架集成调用,以下将以 vue 的方式进行说明

通过 yarn 安装开发包:

yarn add bw-platform-sdk

在 vue 项目 main.js 中全局引入 sdk

import sdk from "bw-platform-sdk";
Vue.prototype.sdk = sdk;

除了全局引入外,也可以在单独的 vue 文件中局部引入

import {user,device} from 'bw-platform-sdk'

user.login({ ... }) //平台登录
device.list({ ... }) //查询设备

依赖项

本 sdk 内部引用 ant-design-vue 和 axios 作为网络请求和消息提示,通过 app 模板增加的项目已预先引用,如果是自己创建的项目请确保自身项目包含这两个依赖

使用

在需要调用的页面通过如下方式访问:

this.sdk.device.add({ ... }) //添加设备
this.sdk.device.list({ ... }) //查询设备

说明

sdk 所有函数均返回 Promise 对象

sdk.user
  .login({
    username: "admin",
    password: "123456",
  })
  .then((res) => {
    //返回数据
  })
  .catch((err) => {
    //发生异常
  });

如果接口正确调用,统一返回如下格式的数据:

{
    code: 0, //0表示正确,其他数字表示异常
    msg: "ok", //如果code不为0,此处则是具体错误内容,msg可能是string,也可能是一串错误array
    data: {
        //如果code为0,这里则是具体返回的数据
    }
}

平台会统一拦截 code 不为 0 的错误并给出默认提示,一般情况下无需自行处理,如需要自己处理请求异常,则如下处理

sdk.user
  .login({
    username: "xxx",
    passowrd: "xxx",
  })
  .catch((err) => {
    //登录失败
    this.$message.error("登录失败!");
  });

独立模式和平台模式

如果是独立开发 app 而非通过平台加载,则需要自行处理登录,报警,权限等等的业务功能,如果是通过平台加载的应用,一般情况下只用关注应用本身的业务开发,无需处理额外逻辑,如用户登录,报警接收等

高级特性

字段扩展

为满足项目实际应用需要,平台数据库字段支持动态扩充,当前支持以下数据的动态扩展

  • 区域地点
  • 组织机构
  • 设备
  • 人口
  • 车辆
  • 报警

扩展数据统一以 meta 字段存放,存放格式为 json,以下以报警业务举例说明

根据业务需求,报警数据需增加[处理状态,处理人,处理意见]业务

可通过 sdk 动态增加这些数据

sdk.alarm.update({
  id: "1",
  "meta.处理状态": "处理中",
  "meta.处理人": "张三",
  "meta.处理意见": "正在上门核实",
});

通过这样调用,就为 id 为 1 这条报警添加了处理过程

同时,自定义字段支持动态查找,比如需要查找全部处理中的报警可通过如下方式:

sdk.alarm.list({
  page: "0",
  count: 20,
  extend: {
    "meta.处理状态.$eq": "处理中",
    "meta.处理人.$like": "张三%",
  },
});

extend 用来专门查找自定义的字段,其结构如下 meta.{自定义状态}.{查询函数}:{查询值}

目前支持以下函数:

  • $eq
  • $ne
  • $gte
  • $gt
  • $lte
  • $lt
  • $not
  • $in
  • $notIn
  • $is
  • $like
  • $notLike
  • $iLike
  • $notILike
  • $regexp
  • $notRegexp
  • $iRegexp
  • $notIRegexp
  • $between
  • $notBetween
  • $overlap
  • $contains
  • $contained
  • $adjacent
  • $strictLeft
  • $strictRight
  • $noExtendRight
  • $noExtendLeft
  • $and
  • $or
  • $any
  • $all
  • $values
  • $col

具体使用方法请参考

https://sequelize.org/master/manual/model-querying-basics.html

数据模型

待补充...

功能介绍

sdk 主要包含以下功能,并且随着后期迭代会不断增加新功能

  • 应用管理
  • 用户管理
  • 权限管理
  • 通知管理
  • 区域地点管理
  • 组织机构管理
  • 配置管理
  • 设备管理
  • 人口管理
  • 车辆管理
  • 报警管理
  • 报警处置管理
  • API 请求日志管理
  • 用户自定义日志管理

应用管理

列出全部已安装的应用

sdk.app.list();
// 注意:这只是后端已经加载的应用,并非前端已经打开的应用

打开应用

sdk.app.open(appid - or - appname, callback);
// 参数一:appid或app名称
// 参数二:(非必填)打开成功后的回调函数(可获取到对应的iframe)

// 用法示例
sdk.app
  .open("emap", (app) => {
    //如果app没打开,则会启动app,加载成功后会执行回调返回frame对象
    //如果app已打开,则会直接通过回调返回当前app的frame对象
    console.log(app.contentWindow);
  })
  .then((res) => {
    console.log("打开成功", res);
  })
  .catch((e) => {
    console.error("打开失败", e);
  });

应用间内部通信

凡是引用了 bw-platform-sdk 的应用都会在 window 对象中挂载 sdk 实例,如果 app 需要向其他 app 提供特色功能的话,可在 sdk 中注册自定义函数然后挂载到 sdk 内部 methods 对象上

app1:

sdk.methods.yourmethod = function() {
  console.log("method invoked");
};

其他 app 需要调用 app 自定义方法可通过如下步骤

  1. 首先打开 app 获取 app 实例
  2. 调用 app 注册的自定义函数

app2:

sdk.app.open("app1", (app) => {
  //判断app有没有这个函数,有的话调用
  app.contentWindow.sdk &&
    app.contentWindow.sdk.methods &&
    app.contentWindow.sdk.methods.yourmethod &&
    app.contentWindow.sdk.methods.yourmethod();
});

用户管理

用户登录

sdk.user.login({
  username: "admin",
  password: "123456",
});

获取当前登录账号详情

sdk.user.my();

返回内容:

{
  "code": 0,
  "message": "ok",
  "data": {
    "data": {
      "id": 1,
      "username": "admin",
      "realname": "管理员",
      "email": null,
      "phone": "88888888888",
      "gender": null,
      "birth": null,
      "type": "user",
      "meta": null,
      "note": null,
      "createdAt": "2021-09-24T01:46:11.026Z",
      "updatedAt": "2021-09-24T01:46:11.026Z"
    },
    "iat": 1632448488,
    "exp": 1632534888
  }
}

获取指定账号详情

sdk.user.get({
  id: 1,
});

获取当前登录账号通知列表

sdk.user.myMessages({
  page: 0, //页码
  count: 5, //分页数
  keyword: "%", //关键词
  sender: [1, 3], //发送人-不传代表全部
  type: ["test"], //类型
  state: ["new", "open", "close", "other"], //状态
  startTime: "2020-07-16 16:00:00", //开始时间
  endTime: "2033-07-16 16:05:59", //结束时间
  //扩展字段自定义查询语句
  extend: {
    "meta.isDeal.$eq": 1,
  },
});

添加用户

sdk.user.add({
  username: "test",
  password: "123456",
  realname: "真实姓名",
  email: "[email protected]",
  phone: "13888888888",
  gender: "男",
  birth: "1983-10-08",
  type: "user",
  note: "备注",
});

更新用户

sdk.user.update({
  id: 1, //用户id
  //以下字段不传代表不更新
  username: "test",
  password: "123456",
  realname: "真实姓名",
  email: "[email protected]",
  phone: "13888888888",
  gender: "男",
  birth: "1983-10-08",
  type: "user",
  note: "备注",
});

删除用户

sdk.user.remove({
  id: [1, 2, 3], //用户id数组,支持批量删除
});

列出用户

sdk.user.list({
  user: [1, 2],
});

权限管理

添加角色

sdk.role.add({
  name: "管理员",
  code: "ADMIN",
  functions: ["open-camera", "ptz", "delete-user"],
  note: "系统管理员",
});

更新角色

sdk.role.update({
  id: 1, //角色id
  //以下字段不传代表不更新
  name: "物业管理员",
  code: "USER",
  functions: ["open-camera", "ptz"],
  note: "查看摄像机,控制摄像机",
});

删除角色

sdk.role.remove({
  id: [1, 2, 3], //角色id数组,支持批量删除
});

列出角色

sdk.role.list();

通知管理

添加通知

sdk.message.add({
    "title":"通知标题",
    "type":"通知类型",
    "state":"new",//可用['new', 'closed', 'readed', 'replied', 'rejected', 'other']
    "sender":1,//发送者id
    "receiver":1,//接收者id
    "content":{}//消息内容
    "meta":{}//自定义内容
})

接口调用成功后会在 mqtt 队列中推送如下 topic 的消息体

没有具体接收者:
/platform/messages/add
有具体的接收者:
/platform/messages/add/:userId

更新通知

sdk.message.update({
    "id":1//通知id
    "title":"通知标题",
    "type":"通知类型",
    "state":"new",//可用['new', 'closed', 'readed', 'replied', 'rejected', 'other']
    "sender":1,//发送者id
    "receiver":1,//接收者id
    "content":{}//消息内容
    "meta":{}//自定义内容
})

通知被更新成功后会在 mqtt 队列中推送如下 topic 的消息体给发送者

/platform/messages/update/:senderUserId

删除通知

sdk.message.delete({
  id: [1, 2, 3],
});

查询通知

sdk.message.list({
  page: "0", //分页号
  count: 2, //分页数量
  keyword: "新%", //关键词
  sender: [1, 3], //发送者
  receiver: [1, 3], //接收者
  type: ["test"], //类型
  state: ["new", "open", "close", "other"], //状态
  startTime: "2020-07-16 16:00:00",
  endTime: "2033-07-16 16:05:59",
  //自定义扩展查询
  extend: {
    "meta.isDeal.$eq": 1,
  },
});

区域地点管理

获取区域地点类型字典

sdk.location.types();

添加区域地点

sdk.location.add({
  name: "博康正大门",
  type: "出入口",
  code: "123456",
  parentId: null,
});

更新区域地点

sdk.location.update({
  id: 1, //区域地点id
  //以下字段不传则不更新
  name: "博康正大门-出",
  type: "出入口",
  code: "123456",
  parentId: null,
});

删除区域地点

sdk.location.remove({
  id: [1, 2], //id数组,支持批量删除
});

列出区域地点

sdk.location.list({
  type: "tree", //tree表述树级展示,list表示列表展示
});

列出区域地点父级

sdk.location.parent({
  id: 1,
});

列出区域地点子集

sdk.location.child({
  id: 1,
});

组织机构管理

获取组织机构类型字典

sdk.organization.types();

添加组织机构

sdk.organization.add({
  name: "博康研发部",
  type: "部门",
  code: "123456",
  parentId: null,
});

更新组织机构

sdk.organization.update({
  id: 1, //组织机构id
  //以下字段不传则不更新
  name: "人事部",
  type: "部门",
  code: "123456",
  parentId: null,
});

删除组织机构

sdk.organization.remove({
  id: [1, 2], //id数组,支持批量删除
});

列出组织机构

sdk.organization.list({
  type: "tree", //tree表述树级展示,list表示列表展示
});

列出组织机构父级

sdk.organization.parent({
  id: 1,
});

列出组织机构子集

sdk.organization.child({
  id: 1,
});

配置管理

配置管理为 key-value 的结构形式,主要用于保存配置信息,例如网站标题、LOGO、布局、收藏夹等信息,其分为全局配置和个人配置 主要包含两个函数,globa 参数代表是否全局保存,true 表示全局,默认为 false

  • 设置配置 sdk.option.set(key,value,global)
  • 读取配置 sdk.option.get(key,value,global)

设置全局配置

sdk.option.set("Site-Title", "博康智慧物业管理平台", true);

读取全局配置

sdk.option.get("Site-Title", true).then((res) => {
  console.log(res.data.value);
  //博康智慧物业管理平台
});

设置个人配置

//保存视频收藏夹,key名称根据应用需要自定义,请取个不容易重复的名称,以免与其他app冲突
sdk.option.set("Favorites-Cameras", ["CAM001", "CAM002", "CAM003", "CAM004"]);

读取个人配置

sdk.option.get("Favorites-Cameras");

设备管理

获取设备类型字典

sdk.device.types();

添加设备

sdk.device.add({
  name: "摄像机", //设备名称
  code: "CAMERA000001", //设备编码
  type: "camera", //设备类型(字典请参考项目配置)
  manufactor: "海康", //设备厂家
  model: "D70000", //设备型号
  ip: "192.168.1.1", //ip地址
  port: "37777", //端口
  username: "admin", //设备账号
  password: "123456", //设备密码
  meta: {
    custom1: "自定义字段1",
    custom2: "自定义字段2",
    //此处可以随意增加业务字段
  },
  locationId: 1, //设备所属区域地点id
  organizationId: null, //设备所属组织机构id
  parentId: null, //设备父级设备ID,例如摄像机挂载的dvr
});

获取指定设备详情

sdk.device.get({
  id: 1,
});

更新设备

sdk.device.update({
  id: 1, //设备id

  //以下字段不传表示不更新
  name: "摄像机", //设备名称
  code: "CAMERA000001", //设备编码
  type: "camera", //设备类型(字典请参考项目配置)
  manufactor: "海康", //设备厂家
  model: "D70000", //设备型号
  ip: "192.168.1.1", //ip地址
  port: "37777", //端口
  username: "admin", //设备账号
  password: "123456", //设备密码
  netAddress: "rtsp://admin:[email protected]:37777", //设备网络地址
  meta: {
    custom1: "自定义字段1",
    custom2: "自定义字段2",
  },
  locationId: 1, //设备所属区域地点id
  organizationId: null, //设备所属组织机构id
  parentId: null, //设备父级设备ID,例如摄像机挂载的dvr
});

删除设备

sdk.device.remove({
  id: [7, 8, 9], //设备id数组
});

设备列表

sdk.device.list({
  page: "0", //当前页面
  count: 20, //分页数量
  location: [1, 2], //位置id:非必填
  organization: [1, 2], //组织id:非必填
  type: ["摄像机", "dvr"], //设备类型:非必填
  keyword: "设备", //设备名称:非必填,支持模糊查询,%代表通配
});

获取设备对应的父设备

sdk.device.parent({
  id: 1,
});

获取设备对应的子设备

sdk.device.child({
  id: 1,
});

人口管理

获取人口模型字典

sdk.people.types();

添加人口

sdk.people.add({
{
    "type":"jm",//人口模型
    "name":"顾黎峰",//姓名
    "idType":"sfz",//证件类型
    "idNumber":"310111",//证件号码
    "gender":"男",//性别
    "JG":"上海",//籍贯
    "MZ":"汉",//民族
    "meta.custom1":"自定义字段1",
    "meta.custom2":"自定义字段2"
}})

获取指定人口详情

sdk.people.get({
  id: 1,
});

更新人口

sdk.people.update({
  id: 1, //人口id

  type: "jm", //人口模型
  name: "顾黎峰", //姓名
  idType: "sfz", //证件类型
  idNumber: "310111", //证件号码
  gender: "男", //性别
  JG: "上海", //籍贯
  MZ: "汉", //民族
  "meta.custom1": "自定义字段1",
  "meta.custom2": "自定义字段2",
});

删除人口

sdk.people.remove({
  id: [7, 8, 9], //人口id数组
});

人口列表

sdk.people.list({
  page: "0", //当前页面
  count: 20, //分页数量
  type: ["jm", "wm"], //模型类型:非必填
  keyword: "%顾%", //关键词:非必填,支持模糊查询,%代表通配
});

车辆管理

获取车辆模型字典

sdk.car.types();

添加车辆

sdk.car.add({
{
    "type":"jm",//车辆模型
    //待补充
}})

获取指定车辆详情

sdk.car.get({
  id: 1,
});

更新车辆

sdk.car.update({
  id: 1, //人口id
  //待补充
});

删除车辆

sdk.car.remove({
  id: [7, 8, 9], //车辆id数组
});

车辆列表

sdk.car.list({
  page: "0", //当前页面
  count: 20, //分页数量
  type: ["jyc", "jc"], //模型类型:非必填
  keyword: "%沪A%", //关键词:非必填,支持模糊查询,%代表通配
});

报警管理

报警级别字典

sdk.alarm.levels();

报警分类字典

sdk.alarm.types();

添加报警

sdk.alarm.add({
    "name":"xxx报警",//报警名称
    "type":"周界",//报警类型(类型字典请依据项目实际配置)
    "level":1,//报警级别
    "state":"new",//报警当前状态(new,open,close,other)
    "note":"测试报警",//报警描述信息
    "meta":{
        "custom1":"自定义数据1"
        "custom2":"自定义数据2"
    },
    "deviceId":null,//关联的设备ID
    "locationId":1//关联的区域位置ID
})

获取指定报警详情

sdk.alarm.get({
  id: 1,
});

更新报警

sdk.alarm.update({
  state: "close", //消除报警
  //如有其他字段需要改动,可在这里继续增加
  //"level":2, //提升等级
  //"note":"处置完成"
});

也可以给报警增加自定义属性

sdk.alarm.update({
    "state":"open",
    "meta.customProp1":"自定义属性1"
    "meta.customProp2":"自定义属性2"
    //其他...
})

删除报警

sdk.alarm.remove({
  id: [1, 2, 3], //可传入多个id批量删除
});

报警列表

sdk.alarm.list({
  page: "0", //当前分页
  count: 20, //单页数量
  keyword: "%", //关键词:非必填
  startTime: "2021-01-01 00:00:00", //开始时间:非必填
  endTime: "2022-01-01 23:59:59", //结束时间:非必填
  type: ["camera", "smoke"], //报警类型:非必填
  level: ["1", "2"], //报警级别:非必填
  state: ["new", "open", "close", "other"], //状态:非必填
  locationId: [1, 2], //报警地点:非必填
  deviceId: [1, 2], //报警设备:非必填
});

报警处置管理

添加处置记录

上传处置过程(图片,视频,音频,评论)
sdk.alarmHistory.add({
  //报警Id
  alarmId: 1,
  //setMeida表示添加处置媒体内容,setState表示修改报警状态,other表示其他(文字)
  action: "setMedia",
  //media是一个数组,请传入1-n个列表
  media: [
    {
      type: "image",
      address: "xxx.jpg",
    },
    {
      type: "video",
      address: "xxx.mp4",
    },
    {
      type: "voice",
      address: "xxx.mp3",
    },
  ],
  note: "文字评论内容",
});
修改报警状态
sdk.alarmHistory.add({
  //报警Id
  alarmId: 1,
  //setMeida表示添加处置媒体内容,setState表示修改报警状态
  action: "setState",
  //state可选值:["new", "open", "close", "other"],分别代表:新报警(未处置),处置中,处置完成,其他
  state: "open",
  note: "文字评论内容",
});

列出报警处置列表

sdk.alarmHistory.get({
  alarmId: 1,
});

API 请求日志管理

日志查询

sdk.log.list({
  page: 0, //当前页面
  count: 20, //分页数量
  startTime: "2021-01-01 00:00:00", //开始时间:非必填
  endTime: "2022-01-01 23:59:59", //结束时间:非必填
  users: [1, 2, 3], //对应用户:非必填
  url: "%", //对应请求url:非必填
});

具体返回如下内容

{
    "code": 0,
    "message": "ok",
    "data": {
        "count": 469,//符合的记录总数
        "rows": [
            {
                "id": 651,
                "method": "POST",
                "url": "/API/alarm/list",
                "status": "200",
                "contentLength": "5.6kb",
                "responseTime": "10ms",
                "remoteIP": "::ffff:127.0.0.1",
                "browser": {
                    "name": "Chrome",
                    "version": "91.0.4472.124",
                    "major": "91"
                },
                "device": {},
                "engine": {
                    "name": "Blink",
                    "version": "91.0.4472.124"
                },
                "os": {
                    "name": "Windows",
                    "version": "10"
                },
                "cpu": {
                    "architecture": "amd64"
                },
                "createdAt": "2021-07-16T02:43:15.390Z",
                "updatedAt": "2021-07-16T02:43:15.390Z",
                "userId": 1,
                "User": {
                    "id": 1,
                    "username": "admin",
                    "realname": "管理员",
                    "email": null,
                    "phone": "88888888888",
                    "gender": null,
                    "birth": null,
                    "type": "user",
                    "note": null,
                    "createdAt": "2021-07-12T07:11:25.363Z",
                    "updatedAt": "2021-07-12T07:11:25.363Z"
                }
            }
        ]
    }
}

获取指定日志详情

sdk.log.get({
  id: 1,
});

用户自定义日志管理

添加日志

sdk.userlog.add({
  type: "open-app", //必填
  appid: "emap-app", //可不传
  //meta为json字段,根据业务需要自行扩展
  meta: {
    test: true,
  },
  userId: 1, //必填
});

更新日志

sdk.userlog.update({
  id: 1, //必填,日志对应id
  type: "open-app", //必填
  appid: "emap-app", //可不传
  //meta为json字段,根据业务需要自行扩展
  meta: {
    test: true,
  },
  userId: 1, //必填
});

删除日志

sdk.userlog.remove({
  id: [1, 2, 3],
});

查询日志

sdk.userlog.list({
  page: 0,
  count: 20,
  type: ["open-app"],
  userId: [1, 4],
  startTime: "2020-07-16 16:00:00",
  endTime: "2033-07-16 16:05:59",
  //自定义扩展字段查询
  extend: {
    "meta.test.$eq": true,
  },
});