1.5.0 • Published 3 years ago

m2-core v1.5.0

Weekly downloads
40
License
MIT
Repository
github
Last release
3 years ago

m2-core

npm.io 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中配置

参数类型描述默认值示例
configobjectapi键值对配置{ 'getDictList': '/dict','getDataList': '/home/data_list', 'getDataItem': '/home/data_item' }
prefixstring/objectapi前缀'/api'
mockarray/objectmock对象'/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 应用程序多环境配置变量。

属性/方法类型描述示例
IsDevboolean是否为开发环境if (IsDev) { //:todo }
getBuildEnvfunc获取当前应用编译环境getBuildEnv()
getEnvAliasfunc获取环境变量别名getEnvAlias()
getEnvConfigfunc获取当前环境指定配置项的值,如果未指定配置项,则获取当前环境的所有配置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 通用事件处理。

属性/方法类型描述示例
scrollfunc注册滚动事件DataEvent.scroll(() => { console.log('scrolling');}, {threshold: 50})
throttlefunc注册截流事件DataEvent.throttle(() => { console.log('throttle');}, 3000)
debouncefunc注册防抖事件DataEvent.debounce(() => { console.log('debounce');}, 3000)
  • DataBus 数据总线处理。

属性/方法类型描述示例
onfunc监听事件处理函数DataBus.on('data', (res) => { console.log(res.name);})
offfunc移除事件处理函数DataBus.off('data'})
emitfunc触发事件DataBus.emit('data', { name: 'm2' }})
  • DataType 检测数据类型和处理类型转换。

属性/方法类型描述示例
isObjectfunc检测是否为对象DataType.isObject({ name: 'm2'})
isPlainObjectfunc检测是否为普通对象(非内置或非window对象)DataType.isPlainObject({ name: 'm2' })
isEmptyObjectfunc检测是否为空对象(null,{})DataType.isEmptyObject({})
isArrayfunc检测是否为数组DataType.isArray({ name: 'm2' })
isEmptyArrayfunc检测是否为空数组DataType.isEmptyArray([])
isFunctionfunc检测是否为函数DataType.isFunction(()=>{console.log('m2')})
isEmptyFunctionfunc检测是否为空函数DataType.isFunction(()=>{})
isStringfunc检测是否为字符串DataType.isString('m2')
isNumberfunc检测是否为数字DataType.isNumber(100)
isBooleanfunc检测是否为布尔值DataType.isBoolean(true)
isGuidfunc检测是否为GuidDataType.isGuid('a0da5831-7488-464d-8a89-db89b7ff8f2b')
isMobilePhonefunc检测是否为手机号(可自定义正则检测)DataType.isMobilePhone('13366668888')
isTelPhonefunc检测是否为电话号码(可自定义正则检测)DataType.isTelPhone('010-66668888')
isPhonefunc检测是否为手机号或电话号码(可自定义正则检测)DataType.isPhone('010-66668888')
isEmailfunc检测是否为电子邮件(可自定义正则检测)DataType.isEmail('12345678@qq.com')
isIdCardfunc检测是否为身份证号(可自定义正则检测)DataType.isIdCard('511381198808083520')
isValidPasswordfunc检测是否为合法密码(可自定义正则检测)DataType.isValidPassword('1988_$abd')
isValidDatefunc检测是否为合法日期DataType.isValidDate('2020-01-20')
isTrueOrZerofunc检测是否为true或0DataType.isTrueOrZero('0')
  • DataFetch 基于axios封装的http请求(单一实例)。
  • 提示:已转为内部调用,在实际开发过程中推荐使用DataHttp。

    属性/方法类型描述示例
    createfunc创建axios的实例DataFetch.create({ retry, retryDelay, timeout, headers, responseType, ... })
    axiosfunc发送http请求DataFetch.axios('/api/user/list', { baseUrl, env, proxy, apiKey, method, timeout, headers, params })
    allfunc合并发送多个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) {}
})
属性/方法类型描述示例
getfunc发送get请求http.get('/api/user', { params, loading, origin } )
postfunc发送post请求http.post('/api/user', { params, loading, origin }
putfunc发送put请求http.put('/api/user', { params, loading, origin }
patchfunc发送patch请求http.patch('/api/user', { params, loading, origin }
delfunc发送del请求http.del('/api/user', { params, loading, origin }
allfunc合并发送多个http请求http.all({url: '/api/user', config: { params, loading, origin }}, {url: '/api/product', config: { params, loading, origin }})
proxyGetfunc代理发送get请求http.proxyGet('/api/user', { params, loading, origin }
proxyPostfunc代理发送post请求http.proxyPost('/api/user', { params, loading, origin }
proxyPutfunc代理发送put请求http.proxyPut('/api/user', { params, loading, origin }
proxyPatchfunc代理发送patch请求http.proxyPatch('/api/user', { params, loading, origin }
proxyDelfunc代理发送del请求http.proxyDel('/api/user', { params, loading, origin }
proxyAllfunc代理合并发送多个http请求http.proxyAll({url: '/api/user', config: { params, loading, origin }}, {url: '/api/product', config: { params, loading, origin }})
proxyfunc代理发送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 }})

配置参数详解

参数类型描述默认值示例
paramsobject请求参数——{ id: 'm2', name: 'm2-core' }
loadingboolean是否启用加载器效果false——
originboolean是否需要返回请求原始数据false——
queryboolean是否将请求字符串中的参数转化为paramstrue——
responseTypestring请求响应类型(目前只支持类型: 'blob'-下载文件)''——
filestring下载的文件名(不包含后缀)''——
headersobject配置请求的headers————
timeoutnumber当前请求的超时毫秒数(默认30秒)30000——
keyboolean是否需要添加标识列_key(随机字符串)false——
keyLennumber标识列的长度5——
retrynumber自动重试次数(为0代表不重试)3——
retryDelaynumber再次重试的延迟毫秒数(默认1秒)1000——
itemsNamestring返回列表标识字段名(包含在data中)'list'——
  • DataStorage 统一提供封装LocalStorage(默认)和SessionStorage。
  • 提示:缓存类型分为Local和Session,加密类型(SYMMETRIC_CRYPTO_TYPE)参照DataCrypto

属性/方法类型描述示例
getfunc获取缓存中的数据(可指定缓存类型和加密类型)DataStorage.get('m2', { storageType, encryptType })
setfunc将数据保存到缓存中(可指定缓存类型和加密类型)DataStorage.set('m2', { name: 'm2'}, { storageType, encryptType })
removefunc从缓存中移除指定的key(可指定缓存类型)DataStorage.remove('m2', STORAGE_TYPE.Session)
clearfunc清除所有的缓存(可指定缓存类型)DataStorage.clear(STORAGE_TYPE.Local)
countfunc获取缓存key的数量(可指定缓存类型)DataStorage.count(STORAGE_TYPE.Local)
containsfunc判断是否包含指定key对应的缓存(可指定缓存类型)DataStorage.contains('m2', STORAGE_TYPE.Local)
  • DataCrypto 统一提供加解密算法(对称加密和非对称加密)。
  • 提示:加密类型分类对称加密(SYMMETRIC_CRYPTO_TYPE)和非对称加密(ASYMMETRIC_CRYPTO_TYPE)

属性/方法类型描述示例
encryptfunc加密指定的数据(可指定加密类型)DataSecurity.encrypt('m2', SYMMETRIC_CRYPTO_TYPE.DES)
decryptfunc解密指定的数据(可指定加密类型)DataSecurity.decrypt('e1cf3f88a2dd46a6', SYMMETRIC_CRYPTO_TYPE.DES)
  • DataVerifyCode 基于Canvas提供图形验证码。
  • 提示:首先必须生成验证码实例verifyCode,然后通过实例去调用

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

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

3 years ago

1.4.9

4 years ago

1.4.8

4 years ago

1.4.7

4 years ago

1.4.6-beta

4 years ago

1.4.6

4 years ago

1.4.5

4 years ago

1.4.4

4 years ago

1.4.3

4 years ago

1.4.2

4 years ago

1.4.1

4 years ago

1.4.0

4 years ago

1.3.0

4 years ago

1.2.9

5 years ago

1.2.8

5 years ago

1.2.7

5 years ago

1.2.6

5 years ago

1.2.5

5 years ago

1.2.4

5 years ago

1.2.3

5 years ago

1.2.2

5 years ago

1.2.1

5 years ago

1.2.0

5 years ago

1.1.9

5 years ago

1.1.8

5 years ago

1.1.7

5 years ago

1.1.6

5 years ago

1.1.5

5 years ago

1.1.4

5 years ago

1.1.3

5 years ago

1.1.2

5 years ago

1.1.1

5 years ago

1.1.0

5 years ago

1.0.3

5 years ago

1.0.2

5 years ago

1.0.1

5 years ago

1.0.0

5 years ago

2.0.0

5 years ago