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 🙏

© 2024 – Pkg Stats / Ryan Hefner

m2-core

v1.5.0

Published

The package is provided utilities and facilities for business frontend framework.

Downloads

8

Readme

m2-core

M2前端框架核心通用底层库。

用法

  • 安装
npm install m2-core

APIs

  • getDataApi 获取应用程序API地址映射对象。
  • 提示1:可配置mock api, 在实际开发过程中,部分api是mock实现的,则可传入mock参数(也可指定mock api前缀),如果同时出现在config和mock中以mock优先
  • 提示2:可配置第三方api, 在实际开发过程中,可能有些api不是应用本身而是来源于第三方,可统一配置到config下面的某个字段,并在prefix参数的key中配置

| 参数 | 类型 | 描述 | 默认值 | 示例 | | ------------ | ------------ | ------------ | ------------ | ------------ | | config | object | api键值对配置 | — | { 'getDictList': '/dict','getDataList': '/home/data_list', 'getDataItem': '/home/data_item' } | | prefix | string/object | api前缀 | — | '/api'| | mock | array/object | mock对象 | — | ['/user/list', '/product/detail'], { prefix: '/mock-api', urls: ['/user/list', '/product/detail'] } |

// api.conf.js
import { getDataApi } from 'm2-core'

// no mock api
export default getDataApi({
 getDictList: '/dict/list',
 getDataList: '/home/data_list',
 getDataItem: '/home/data_item',
 user: {
   list: '/user/list',
   detail: '/user/detail'
 },
 product: {
   list: '/product/list',
   detail: '/product/detail',
   category: '/product/category'
 }
}, '/api')
// with multi api
export default getDataApi({
 // 建议将其他api都归类到common下
 common: {
   getDictList: '/dict/list',
   getDataList: '/home/data_list',
   getDataItem: '/home/data_item',
 },
 user: {
   list: '/list',
   detail: '/detail'
 },
 product: {
   list: '/list',
   detail: '/detail',
   category: '/category'
 }
}, {
  multi: true,
  user: '/api/user',
  product: '/api/product',
  common: '/api'
})
// with mock api
export default getDataApi({
 getDictList: '/dict/list',
 getDataList: '/home/data_list',
 getDataItem: '/home/data_item',
 user: {
   list: '/user/list',
   detail: '/user/detail'
 },
 product: {
   list: '/product/list',
   detail: '/product/detail',
   category: '/product/category'
 }
}, '/api', [
   '/user/list',
   '/product/detail'
])
export default getDataApi({
 getDictList: '/dict/list',
 getDataList: '/home/data_list',
 getDataItem: '/home/data_item',
 user: {
   list: '/user/list',
   detail: '/user/detail'
 },
 product: {
   list: '/product/list',
   detail: '/product/detail',
   category: '/product/category'
 }
}, '/api', {
  prefix: '/mock-api',
  urls: [
    '/user/list',
    '/product/detail'
  ]
})
// with exclude api
export default getDataApi({
 getDictList: '/dict/list',
 getDataList: '/home/data_list',
 getDataItem: '/home/data_item',
 user: {
   list: '/user/list',
   detail: '/user/detail'
 },
 product: {
   list: '/product/list',
   detail: '/product/detail',
   category: '/product/category'
 },
 others: {
   maps: '/google/map',
   books: '/amazon/books'
 }
}, {
   prefix: '/api',
   // key: 'others' // default value,
   // the same as params **config** last prop
})
  • DataEnv 应用程序多环境配置变量。

| 属性/方法 | 类型 | 描述 | 示例 | | ------------ | ------------ | ------------ | ------------ | | IsDev | boolean | 是否为开发环境 | if (IsDev) { //:todo }| | getBuildEnv | func | 获取当前应用编译环境 | getBuildEnv() | | getEnvAlias | func | 获取环境变量别名 | getEnvAlias() | | getEnvConfig | func | 获取当前环境指定配置项的值,如果未指定配置项,则获取当前环境的所有配置 | getEnvConfig('api') |

// env.conf.js
export default {
  loc: {
    api: 'http://test.app.oa.com/m2',
    // support multi-api config(you need to add apiKey, eg:'mock', 'app')
    // api: {
    //   mock: 'http://test.app.oa.com/m2/mock',
    //   app: 'http://test.app.oa.com/m2'
    // }
  },
  dev: {
    api: 'http://dev.app.oa.com/m2'
  },
  sit: {
    api: 'http://sit.app.oa.com/m2'
  },
  uat: {
    api: 'http://uat.app.oa.com/m2'
  },
  prd: {
    api: 'http://app.oa.com/m2'
  }
}
  • DataEvent 通用事件处理。

| 属性/方法 | 类型 | 描述 | 示例 | | ------------ | ------------ | ------------ | ------------ | | scroll | func | 注册滚动事件 | DataEvent.scroll(() => { console.log('scrolling');}, {threshold: 50}) | | throttle | func | 注册截流事件 | DataEvent.throttle(() => { console.log('throttle');}, 3000) | | debounce | func | 注册防抖事件 | DataEvent.debounce(() => { console.log('debounce');}, 3000) |

  • DataBus 数据总线处理。

| 属性/方法 | 类型 | 描述 | 示例 | | ------------ | ------------ | ------------ | ------------ | | on | func | 监听事件处理函数 | DataBus.on('data', (res) => { console.log(res.name);}) | | off | func | 移除事件处理函数 | DataBus.off('data'}) | | emit | func | 触发事件 | DataBus.emit('data', { name: 'm2' }}) |

  • DataType 检测数据类型和处理类型转换。

| 属性/方法 | 类型 | 描述 | 示例 | | ------------ | ------------ | ------------ | ------------ | | isObject | func | 检测是否为对象 | DataType.isObject({ name: 'm2'}) | | isPlainObject | func | 检测是否为普通对象(非内置或非window对象) | DataType.isPlainObject({ name: 'm2' }) | | isEmptyObject | func | 检测是否为空对象(null,{}) | DataType.isEmptyObject({}) | | isArray | func | 检测是否为数组 | DataType.isArray([{ name: 'm2' }]) | | isEmptyArray | func | 检测是否为空数组 | DataType.isEmptyArray([]) | | isFunction | func | 检测是否为函数 | DataType.isFunction(()=>{console.log('m2')}) | | isEmptyFunction | func | 检测是否为空函数 | DataType.isFunction(()=>{}) | | isString | func | 检测是否为字符串 | DataType.isString('m2') | | isNumber | func | 检测是否为数字 | DataType.isNumber(100) | | isBoolean | func | 检测是否为布尔值 | DataType.isBoolean(true) | | isGuid | func | 检测是否为Guid | DataType.isGuid('a0da5831-7488-464d-8a89-db89b7ff8f2b') | | isMobilePhone | func | 检测是否为手机号(可自定义正则检测) | DataType.isMobilePhone('13366668888') | | isTelPhone | func | 检测是否为电话号码(可自定义正则检测) | DataType.isTelPhone('010-66668888') | | isPhone | func | 检测是否为手机号或电话号码(可自定义正则检测) | DataType.isPhone('010-66668888') | | isEmail | func | 检测是否为电子邮件(可自定义正则检测) | DataType.isEmail('[email protected]') | | isIdCard | func | 检测是否为身份证号(可自定义正则检测) | DataType.isIdCard('511381198808083520') | | isValidPassword | func | 检测是否为合法密码(可自定义正则检测) | DataType.isValidPassword('1988_$abd') | | isValidDate | func | 检测是否为合法日期 | DataType.isValidDate('2020-01-20') | | isTrueOrZero | func | 检测是否为true或0 | DataType.isTrueOrZero('0') |

  • DataFetch 基于axios封装的http请求(单一实例)。
  • 提示:已转为内部调用,在实际开发过程中推荐使用DataHttp。

| 属性/方法 | 类型 | 描述 | 示例 | | ------------ | ------------ | ------------ | ------------ | | create | func | 创建axios的实例 | DataFetch.create({ retry, retryDelay, timeout, headers, responseType, ... }) | | axios | func | 发送http请求 | DataFetch.axios('/api/user/list', { baseUrl, env, proxy, apiKey, method, timeout, headers, params }) | | all | func | 合并发送多个http请求 | DataFetch.all([{url: '/api/user', config: { params, loading }}, {url: '/api/product', config: { params, loading }}]) |

  • DataHttp 基于DataFetch封装的http请求(多实例)。
  • 提示:在实际开发过程中推荐使用DataHttp,首先需要创建一个DataHttp实例http,然后通过实例去调用
  • 提示:配置参数包含很多(baseUrl, env, proxy, apiKey, method, timeout, headers, params, origin, responseType),但比较常用的也就是params, loading, origin, responseType
import { DataHttp } from 'm2-core'
// import { env } from './index'

export default DataHttp.getInstance({
  // 是否开启多实例
  // multi: true,

  // 开启应用上下文
  ctx: true,

  // 开启多环境配置
  // env,

  // 当前请求实例(可使用DataHttp构建,也可配置详细参数,参考axios配置)
  axios: DataHttp.create({
    // baseURL: conf('api'),
    headers: {
      'swagger': 'm2-data-http'
    }
  }),

  // 数据响应映射(当返回数据不满足{status,result,message}格式时,对返回数据字段映射)
  // 当status字段是boolean时,不必配置value;反之需要同时配置status和value来做成功标识;当不存在status和value都不存在,可配置success(res)函数自定义成功标识
  map: { status: 'code', result: 'data', message: 'msg', value: 1 }

  // 当前加载器函数(覆盖默认加载器,loading当前请求是否启动加载器)
  // spinner(loading) {},

  // 数据校验函数(对返回数据的权限校验,app为应用上下文,返回boolean)
  // check(res, app) {}

  // 数据处理函数(对返回数据的处理函数,app为应用上下文, 返回处理结果)
  // handle(res, app) {}

  // 全局错误处理函数(err是包含title,message的对象,app为应用上下文)
  // error(err, app) {}
})

| 属性/方法 | 类型 | 描述 | 示例 | | ------------ | ------------ | ------------ | ------------ | | get | func | 发送get请求 | http.get('/api/user', { params, loading, origin } ) | | post | func | 发送post请求 | http.post('/api/user', { params, loading, origin } | | put | func | 发送put请求 | http.put('/api/user', { params, loading, origin } | | patch | func | 发送patch请求 | http.patch('/api/user', { params, loading, origin } | | del | func | 发送del请求 | http.del('/api/user', { params, loading, origin } | | all | func | 合并发送多个http请求 | http.all([{url: '/api/user', config: { params, loading, origin }}, {url: '/api/product', config: { params, loading, origin }}]) | | proxyGet | func | 代理发送get请求 | http.proxyGet('/api/user', { params, loading, origin } | | proxyPost | func | 代理发送post请求 | http.proxyPost('/api/user', { params, loading, origin } | | proxyPut | func | 代理发送put请求 | http.proxyPut('/api/user', { params, loading, origin } | | proxyPatch | func | 代理发送patch请求 | http.proxyPatch('/api/user', { params, loading, origin } | | proxyDel | func | 代理发送del请求 | http.proxyDel('/api/user', { params, loading, origin } | | proxyAll | func | 代理合并发送多个http请求 | http.proxyAll([{url: '/api/user', config: { params, loading, origin }}, {url: '/api/product', config: { params, loading, origin }}]) | | proxy | func | 代理发送http请求 | http.proxy.get/post/put/patch/del('/api/user', { params, loading })/http.proxy.all([{url: '/api/user', config: { params, loading, origin }}, {url: '/api/product', config: { params, loading, origin }}]) |

配置参数详解

| 参数 | 类型 | 描述 | 默认值 | 示例 | | ------------ | ------------ | ------------ | ------------ | ------------ | | params | object | 请求参数 | —— | { id: 'm2', name: 'm2-core' } | | loading | boolean | 是否启用加载器效果 | false | —— | | origin | boolean | 是否需要返回请求原始数据 | false | —— | | query | boolean | 是否将请求字符串中的参数转化为params | true | —— | | responseType | string | 请求响应类型(目前只支持类型: 'blob'-下载文件) | '' | —— | | file | string | 下载的文件名(不包含后缀) | '' | —— | | headers | object | 配置请求的headers | —— | —— | | timeout | number | 当前请求的超时毫秒数(默认30秒) | 30000 | —— | | key | boolean | 是否需要添加标识列_key(随机字符串) | false | —— | | keyLen | number | 标识列的长度 | 5 | —— | | retry | number | 自动重试次数(为0代表不重试) | 3 | —— | | retryDelay | number | 再次重试的延迟毫秒数(默认1秒) | 1000 | —— | | itemsName | string | 返回列表标识字段名(包含在data中) | 'list' | —— |

  • DataStorage 统一提供封装LocalStorage(默认)和SessionStorage。
  • 提示:缓存类型分为Local和Session,加密类型(SYMMETRIC_CRYPTO_TYPE)参照DataCrypto

| 属性/方法 | 类型 | 描述 | 示例 | | ------------ | ------------ | ------------ | ------------ | | get | func | 获取缓存中的数据(可指定缓存类型和加密类型) | DataStorage.get('m2', { storageType, encryptType }) | | set | func | 将数据保存到缓存中(可指定缓存类型和加密类型) | DataStorage.set('m2', { name: 'm2'}, { storageType, encryptType }) | | remove | func | 从缓存中移除指定的key(可指定缓存类型) | DataStorage.remove('m2', STORAGE_TYPE.Session) | | clear | func | 清除所有的缓存(可指定缓存类型) | DataStorage.clear(STORAGE_TYPE.Local) | | count | func | 获取缓存key的数量(可指定缓存类型) | DataStorage.count(STORAGE_TYPE.Local) | | contains | func | 判断是否包含指定key对应的缓存(可指定缓存类型) | DataStorage.contains('m2', STORAGE_TYPE.Local) |

  • DataCrypto 统一提供加解密算法(对称加密和非对称加密)。
  • 提示:加密类型分类对称加密(SYMMETRIC_CRYPTO_TYPE)和非对称加密(ASYMMETRIC_CRYPTO_TYPE)

| 属性/方法 | 类型 | 描述 | 示例 | | ------------ | ------------ | ------------ | ------------ | | encrypt | func | 加密指定的数据(可指定加密类型) | DataSecurity.encrypt('m2', SYMMETRIC_CRYPTO_TYPE.DES) | | decrypt | func | 解密指定的数据(可指定加密类型) | DataSecurity.decrypt('e1cf3f88a2dd46a6', SYMMETRIC_CRYPTO_TYPE.DES) |

  • DataVerifyCode 基于Canvas提供图形验证码。
  • 提示:首先必须生成验证码实例verifyCode,然后通过实例去调用

| 属性/方法 | 类型 | 描述 | 示例 | | ------------ | ------------ | ------------ | ------------ | | validate | func | 生成图形验证码并判断用户输入是否与之相同 | const verifyCode = new DataVerifyCode('tx_verify_code'); verifyCode.validate(this.$input.value); |

  • DataUtil 工具函数。

| 属性/方法 | 类型 | 描述 | 示例 | | ------------ | ------------ | ------------ | ------------ | | getDictItems | func | 获取指定类型的字典项 | DataUtil.getDictItems(dict, 'user_type', { typeName, itemsName}) | | getDictValue | func | 获取指定类型字典下指定key对应的值 | DataUtil.getDictItems(dict, 'user_type', 'ut001', { typeName, itemsName, keyName, valueName, separator}) | | extend | func | 对数组/对象执行深浅拷贝 | DataUtil.extend({}, {id:1,name:'m2',repositories:['m2-core','m2-vue','m2-mfe']}, true) | | clone | func | 对数组/对象执行深浅拷贝并判断是否将结果转化为数组 | DataUtil.clone({id:1,name:'m2',repositories:['m2-core','m2-vue','m2-mfe']}, {deep:true,asArray:true}) | | randomString | func | 生成指定长度(默认: 32)的随机字符串 | DataUtil.randomString(10) | | randomNumber | func | 生成指定范围(min,max)的随机数字 | DataUtil.randomNumber(10, 50) | | randomColor | func | 生成指定范围(min,max)的随机颜色 | DataUtil.randomColor(10, 50) | | getLast12Months | func | 获取当前日期的前12个月份 | DataUtil.getLast12Months() | | getSecureText | func | 对指定的字符串做星号屏蔽处理(可指定星号个数,前后多少位开始处理) | DataUtil.getSecureText('13566668888') | | defaultVal | func | 获取对应数据项的值,如果未undefined则返回默认值 | DataUtil.defaultVal('loading', true) | | pick | func | 获取指定对象/数组指定列对应的数组或对象 | DataUtil.pick(users, 'name', 'age') | | merge | func | 合并一个解构后的对象数组和指定的对象 | DataUtil.merge([{a:1},{b:2}], {c:3,d:4}) | | uncamelize | func | 将字符串按大小字母分隔并返回(大写,小写,原样) | DataUtil.uncamelize('getDataList') | | toUpperFirst | func | 将字符串首字母大写并返回 | DataUtil.toUpperFirst('m2') | | redirect | func | 跳转到指定的url对应的地址 | DataUtil.redirect('/login') | | getHashValue | func | 获取url中hash值(#到?之间的值)| DataUtil.getHashValue() | | getQueryValue | func | 获取url中指定名称的查询字符串值(QueryString) | DataUtil.getQueryValue('name', 'http://xxx.com?name=m2') | | getUrlQuery | func | 获取url字符串问号之后的值并转化为对象 | DataUtil.getUrlQuery('http://xxx.com?name=m2') | | formatMoney | func | 数字千分位格式化 | DataUtil.formatMoney(123456789.123) | | unformatMoney | func | 将千分位格式的数字字符串转换为浮点数 | DataUtil.unformatMoney('123,456,789.00') | | formatDate | func | 根据指定的格式(默认: 'yyyy-MM-dd')将被日期格式化 | DataUtil.formatDate(1536290438) | | formatDateTime | func | 根据指定的格式(默认: 'yyyy-MM-dd HH:mm:ss')将被日期时间格式化 | DataUtil.formatDateTime(1536290438) | | formatShortDateTime | func | 根据指定的格式(默认: 'yyyy-MM-dd HH:mm')将被日期时间去秒格式化 | DataUtil.formatShortDateTime(1536290438) | | formatTime | func | 根据指定的格式(默认: 'HH:mm:ss')将被时间格式化 | DataUtil.formatTime(1536290438) | | formatShortTime | func | 根据指定的格式(默认: 'HH:mm')将被时间去秒格式化 | DataUtil.formatShortTime(1536290438) | | padLeftZero | func | 字符串前导补0 | DataUtil.padLeftZero('4') | | downloadFile | func | 下载文件 | DataUtil.downloadFile(data, '文件') |