1.0.3 • Published 4 years ago

@huanbo99/core v1.0.3

Weekly downloads
48
License
ISC
Repository
-
Last release
4 years ago

@huanbo99/core

介绍:环博前端开发核心基础业务包,基于vue2开发,如果是vue3开发请使用@huanbo99/core-plus,包里包含了core, filter, http, mixins, router, store, theme, utils等工具

1.core

1.1 appStart:

描述: 项目启动,自动注册local,session,http,$clone,自动加载前端项目配置,自动加载字典等功能

import { Core } from '@huanbo99/core'


Core.appStart(App);


//组件里可以自动使用
local: this.$ls.setItem();this.$ls.getItem()等方法
session: this.$ls.setItem();this.$ls.getItem()等方法
http:  this.$http(); this.$axios.get(); this.$axios.post()等方法
clone: this.$clone()进行数据深拷贝

1.2 storage

描述: 内存操作,免去获取时JSON.parse,存储时JSON.stringify等繁琐操作

import {sessionStorage,localStorage} from '@huanbo99/core/src/core/storage'


//localStorage手动注册
Vue.use(localStorage);
//组件就可以使用
local: this.$ls.setItem();this.$ls.getItem()等方法


//sessionStorage手动注册
Vue.use(sessionStorage);
//组件就可以使用
session: this.$ss.setItem();this.$ss.getItem()等方法

2.filter

2.1 translate

描述: 翻译过滤器

源码:

/**
*@feature 根据系统语言翻译目标字符串
*@param key: 需要翻译的目标字符串
*@param moduleName: 模块(页面)名
*@param data: 动态参数
*@returns 翻译结果字符串
*/
translate: (key: string, moduleName?: string, data?: {[key:string]: string}) => string

示例:

import { setLang } from '@huanbo99/core/src/i18n';

//设置语言和语言包
setLang('zhcn',{ 
	hb: '环博',
    key: 'string',
    param: '你好{name}',
    page: { 
    	yes: '确认',
    	no: '取消',
    	subPage: { i18n: '国际化' }
    }  
})

//in template

//通用翻译
<div>{{ 'hb' | translate }}</div>  //渲染结果: 环博

//在页面里或者模块里
<div>{{ 'yes' | translate('page') }} //渲染结果: 确认

//子页面用 “.” 拼接
<div>{{ 'i18n' | translate('page.subPage') }} //渲染结果: 国际化

//子页面放数组里
<div>{{ 'i18n' | translate(['page','subPage']) }} //渲染结果: 国际化

//匹配不上翻译
<div>{{ 'missing' | translate }}</div>  //渲染结果: missing

//动态参数
<div>{{ 'param' | translate(null,{ name: '小明' }) }}</div>  // 渲染结果: 你好小明

2.2 numFormat

描述: 字符串或者数字格式化过滤器

源码:

/**
*@feature 123456 -> 123,456
*@param value 目标字符串或数字
*@param digit 格式化位数
*@param split 拼接符号
*returns 格式化以后的字符串
*/
numFormat: ( value: number | string, digit?: number = 3, split?:string = ',') => string

示例:

<div>{{123456 | numFormat }}</div>  //渲染结果  123,456
<div>{{123456 | numFormat(2) }}</div>  //渲染结果  12,34,56
<div>{{123456 | numFormat(2,'-') }}</div>  //渲染结果  12-34-56

2.3 dateFormat

描述: 格式化时间

源码:

/**
*@feature: 时间过滤器
*@param value: 目标时间
*@param format: 格式,与moment的格式一样
*@returns 格式化结果
*/
dateFormat: ( value: string, format?: string = 'YYYY-MM-DD HH:mm:ss') => string

示例:

<div>{{ 'Tue, 13 Apr 2021 06:32:43 GMT' | dateFormat }}</div>
//渲染结果: 2021-04-13 16:14:43


<div>{{ 'Tue, 13 Apr 2021 06:32:43 GMT' | dateFormat('YYYY年MM月DD日') }}</div>
//渲染结果: 2021年04月13日

2.4 uppercase

描述: 字符串转大写

源码:

/**
*@feature: 字符串转大写字母
*@param key: 目标字符串
*@returns 大写字符串
*/
uppercase: (key: string) => string

示例:

<div>{{ 'abcd' | uppercase }}</div> //渲染结果: ABCD

2.5 lowercase

描述: 字符串转小写

源码:

/**
*@feature: 字符串转小写字母
*@param key: 目标字符串
*@returns 小写字符串
*/
lowercase: (key: string) => string

示例:

<div>{{ 'ABCD' | lowercase }}</div> //渲染结果: abcd

2.6 substr

描述: 字符串转大写

源码:

/**
*@feature: 截取字符串
*@param key: 目标字符串
*@param len: 截取长度
*@param key: 是否反向截取
*@returns 截取到的字符串
*/
substr (key: string, len: number: reverse?: boolean) => string

示例:

<div>{{ 'abcdqwer' | substr(2) }}</div> //渲染结果: ab

<div>{{ 'abcdqwer' | substr(3,true) }}</div> //渲染结果: wer

2.7 dictFormat

描述: 字典回显为中文

源码:

/**
*@feature: 字典回显中文
*@param targetKey: 目标字典
*@param dictionaryKey 用什么字典回显
*@param resultKey 字典的中文在什么key上
*@param targetKey 字典的值在什么key上
*@param join 多个字典时链接方式
*@returns 字典回显的值
*/
dicFormat: (targetKey: string, dictionaryKey: string, resultKey?: string = 'Name',targetKey?: string = 'Value', join?: string=',' ) => string

示例:

//字典 
{ RunStatus: [
        {Name: '超级管理员',Value: 'SUPERADMIN'},
        {Name:'学生',Value:"STUDENT"},
        {Name: '家长',Value: 'PARENT'}
    ] 
}

<div>{{'STUDENT' | dicFormat('RunStatus')}}</div> //渲染结果:学生
<div>{{'PARENT,STUDENT' | dicFormat('RunStatus')}}</div> //渲染结果:家长,学生
	  

2.8 optionFormat

描述: 选项回显

源码:

/**
*@feature: 选项回显
*@param key: 选项的值
*@param cols: 所有选项
*@param valueKey: 选项的值所在键
*@param nameKey: 选项的标题所在键
*@param split: 选项以什么符号(,)分隔
*@param join: 结果以什么符号(,)连接
*@retetuns 选项回显字符串
*/
optionFormat:(key: string, cols: any[], valueKey?:string = 'Value', nameKey?: string = 'Name', split?: string = ',', join?: string = ',') => string

示例:

//选项
options =  [
        {Name: '超级管理员',Value: 'SUPERADMIN'},
        {Name:'学生',Value:"STUDENT"},
        {Name: '家长',Value: 'PARENT'}
] 
	

<div>{{'STUDENT' | optionFormat(options)}}</div>  //渲染结果:学生
<div>{{'PARENT,STUDENT' | optionFormat(options)}}</div>  //渲染结果:家长,学生

2.9 pcdFormat

描述: 省市区回显,与utils工具包里city.util中 getPCDName方法一直

源码:

/**
*@feature: 省市区回显
*@param key: 目标code
*@param join: 结果以什么符号(/)连接
*@retetuns 省市区回显字符串
*/
pcdFormat: (key: string, join?: string = '/') => string

示例:

<div>{{'510000,510100,510107' | optionFormat}}</div>  //渲染结果:四川省/成都市/武侯区
<div>{{'PARENT,STUDENT' | pcdFormat('-')}}</div>  //渲染结果:四川省-成都市-武侯区

3. http

描述: 根据环博自己的业务和后端约定的配置进行封装的工具,可以自动提示错误,自动分析成功回调里的错误信息,让使用者能够在response里只处理成功回调。错误自动提示,让使用者能够免去错误处理的繁琐操作。还有token失效自动去登录页面,post请求包裹request,拼接网关,请求静态化,代理接口,消息提示等功能

3.1 HttpMessage

描述: 消息提示方法。由使用者传入,不受UI组件库的约束,使用者需要满足约定的接口。使用者通过 register传入(用法见3.6 register)

export interface IHttpMessage {
  //用于请求和后端的错误提示
  notify?: IHttpMessageNotify 
  //用于用户行为反馈等功能
  toast?: IHttpMessageToast
}

type IHttpMessageNotify = (title: string, message: string) => void

export interface IHttpMessageToast {
  loading?: (message: string) => void
  success?: (message: string) => void
  failed?: (message: string) => void
  clear?: () => void
}

HttpMessage: IHttpMessage = {}


//使用
import { HttpMessage } from '@huanbo99/core/src/http';

3.2 install

描述: 封装vue插件注册方法,通过Vue.use(http) 注册插件

import { Http } from "@huanbo99/core";

Vue.use(http);

//组件内可以使用
this.$request()      //用法见3.5.1 request
this.$http()         //用法见3.5.2 http
this.$axios.get()    //用法见3.5.3 get
this.$axios.post()   //用法见3.5.4 post
this.$axios.delete() //用法见3.5.5 delete
this.$axios.put()    //用法见3.5.6 put
this.$axios.patch()  //用法见3.5.7 patch
this.$axios.static() //用法见3.5.8 static

3.3 getUrlByApi

描述: 根据api和配置生成完整的URL,与3.4用法一模一样。为兼容之前已有项目,保留现在这个接口。0.2.x及以后的版本勿使用

3.4 getHttpUrl

描述: 根据api和配置生成完整的URL

源码:

/**
*@feature: 获取请求的url
*@param api: 1.为字符串的时候,请求默认为get
*     2.为对象的时候{ 
*          api: string, //请求api
*          method?: string = 'get', //请求方式
*          gateway?: string, //网关项 window.SYS_CONFIG.${gateway}
*          full?: boolean, //是不是全地址,和pathFull一样,优先级小于pathFull(兼容老项目)
*          pathFull?: boolean //是不是全地址,如果不是全地址,会拼接网关地址
*    }
*
*@param config:  {
*    	gateway?: string, //与参数api.gateway功能一样。优先级高于api.gateway
*    	pathFull: boolean,//与参数api.pathFull功能一样。优先级>api.pathFull>api.full
*     	[key:string]: any
*} 
*@returns 返回url
*/
getHttpUrl: (
    api: string | { 
          api: string,
          method?: string = 'get',
          gateway?: string,
          full?: boolean,
          pathFull?: boolean
    },
    config?: {
    	gateway?: string,
    	pathFull: boolean,
    	[key:string]: any
    } 
) => string

示例:

若前端配置: {
	GATEWAY: 'http://192.168.0.1:9000'
	[key:string]: any
}

网关为SYS_CONFIG = { 
	SERVER_API_DATACENTER: {
      Code: "SERVER_API_DATACENTER",
      Name: "数据中心接口地址",
      Value: "datacenter"
	},
	...
}

import { getHttpUrl } from '@huanbo99/core/src/http';

//示例1
api = '/rs/user/getAllUser'
getHttpUrl(api) 
//结果: http://192.168.0.1:9000/rs/user/getAllUser


//示例2
api = {api: '/rs/user/getAllUser',gateway: 'SERVER_API_DATACENTER'}
getHttpUrl(api) 
//结果: http://192.168.0.1:9000/datacenter/rs/user/getAllUser

//示例3
api = {api: 'http://192.168.16.16:9001/rs/user/getAllUser',pathFull: true}
getHttpUrl(api) 
//结果: http://192.168.16.16:9001/rs/user/getAllUser

3.5 http

描述: 具体工具方法

3.5.1 request

源码:

/**
*@feature: http请求封装入口
*@param api: 接口api
*@param options: 请求配置 {   
*   isNotHb?: boolean //是不是环博的后端,环博后端默认会把data再包一层:{ Data:data,IsSuccess: *		boolean ,ErrorList: any []}
*   disabledAutoNotifyError?: boolean // 是否关闭自动的错误提示
*   wrap?: 'request' | string // body 包裹request
*        gateway?: string // 网关字段
*        pathFull?: boolean // url是不是完整的
*        loading?: string //请求中的文字提示
*        success?: string //请求成功的文字提示
*        failed?: string //请求失败的文字提示  
*    }
*@returns Promise对象
*/
request: (api: string, options?: {
    isNotHb?: boolean, 
    disabledAutoNotifyError?: boolean, 
    wrap?: string =  'request', 
    gateway?: string, 
    pathFull?: boolean, 
    loading?: string,
    success?: string,
    failed?: string
}): Promise

示例:

//方法1: 直接引入使用
import { request } from '@huanbo99/core/src/http';
request(api,config).then(res=> {  })

//方法2: 注册http后,组件内使用
this.$reuqest(api,config).then(res=> {  })

3.5.2 http

描述: 废弃,老版本还能使用,0.2.x以后版本推荐是哟request替代

源码:

/**
*@feature: v1版本http封装
*@params api: 接口路径 string | {
* 				api: string, //
*				gateway?: string,
*				full?: boolean,
*				method: string
*			  }
*@param data: 请求参数
*@options: 请求配置 {
*		isNotHB?:boolean
*       isNotHb?: boolean //是不是环博的后端,环博后端默认会把data再包一层:{ Data:data,IsSuccess:
*       boolean ,ErrorList: any []}
*       disabledAutoNotifyError?: boolean // 是否关闭自动的错误提示 //V2版本
*       handleError?: boolean  //是否关闭自动的错误提示 //V1版本
*       wrapBody?: string;  // body 包裹request
*       wrap?: 'request' | string // body 包裹request
*       gateway?: string // 网关字段
*       pathFull?: boolean // url是不是完整的
*       loading?: string //请求中的文字提示
*       success?: string //请求成功的文字提示
*       failed?: string //请求失败的文字提示  
*}
*/
http: (api: string | {api: string,gateway?: string,full?: boolean,method?: string},data:any,options: {
    isNotHb?: boolean, 
    disabledAutoNotifyError?: boolean, 
    wrap?: string =  'request', 
    gateway?: string, 
    pathFull?: boolean, 
    loading?: string,
    success?: string,
    failed?: string
}) => Promise

示例:

//方法1: 直接引入使用
import { http } from '@huanbo99/core/src/http';
http(api,{key:string}).then(res=> {})

//方法2: 注册http后,组件内使用
this.$http(api,{key:string}).then(res=> {})

3.5.3 get

源码:

/**
*@feature: get请求
*@param api: 接口名称
*@param params: 请求参数 
*@params options: 与3.5.1 request方法options一致
*/
getMethod: (api:string,params,options) => Promise

示例:

//方法1: 直接引入使用
import { getMethod } from '@huanbo99/core/src/http';
getMethod('/api/user/info',{id: '1'}).then(res=> {})


//方法2: 注册http后,组件内使用
this.$axios.get('/api/user/info',{id: '1'}).then(res=> {})

3.5.4 post

源码:

/**
*@feature: post请求
*@param api: 接口名称
*@param params: 请求参数 
*@params options: 与3.5.1 request方法options一致
*/
postMethod: (api:string,params,options) => Promise

示例:

//方法1: 直接引入使用
import { postMethod } from '@huanbo99/core/src/http';
postMethod('/api/user/insert',{name: '小明'}).then(res=> {})


//方法2: 注册http后,组件内使用
this.$axios.post('/api/user/insert',{name: '小明'}).then(res=> {})

//wrap作用演示:
this.$axios.post('/api/user/insert',{name: '小明'},{wrap: 'request'}).then(res=> {})
//实际提交到后端的请求参数为: {request: { name: '小明' }}

3.5.5 delete

源码:

/**
*@feature: delete请求
*@param api: 接口名称
*@param params: 请求参数 
*@params options: 与3.5.1 request方法options一致
*/
deleteMethod: (api:string,params,options) => Promise

示例:

//方法1: 直接引入使用
import { deleteMethod } from '@huanbo99/core/src/http';
deleteMethod('/api/user/deleteById',{id: '1'}).then(res=> {})


//方法2: 注册http后,组件内使用
this.$axios.delete('/api/user/deleteById',{id: '1'}).then(res=> {})

3.5.6 put

源码:

/**
*@feature: put请求
*@param api: 接口名称
*@param params: 请求参数 
*@params options: 与3.5.1 request方法options一致
*/
deleteMethod: (api:string,params,options) => Promise

示例:

//方法1: 直接引入使用
import { putMethod } from '@huanbo99/core/src/http';
putMethod('/api/user/action',{id: '1'}).then(res=> {})


//方法2: 注册http后,组件内使用
this.$axios.put('/api/user/action',{id: '1'}).then(res=> {})

3.5.7 head

源码:

/**
*@feature: head请求
*@param api: 接口名称
*@param params: 请求参数 
*@params options: 与3.5.1 request方法options一致
*/
headMethod: (api:string,params,options) => Promise

示例:

//方法1: 直接引入使用
import { headMethod } from '@huanbo99/core/src/http';
headMethod('/api/user/action',{id: '1'}).then(res=> {})


//方法2: 注册http后,组件内使用
this.$axios.head('/api/user/action',{id: '1'}).then(res=> {})

3.5.8 patch

源码:

/**
*@feature: patch请求
*@param api: 接口名称
*@param params: 请求参数 
*@params options: 与3.5.1 request方法options一致
*/
patchMethod: (api:string,params,options) => Promise

示例:

//方法1: 直接引入使用
import { patchMethod } from '@huanbo99/core/src/http';
patchMethod('/api/user/action',{id: '1'}).then(res=> {})


//方法2: 注册http后,组件内使用
this.$axios.patch('/api/user/action',{id: '1'}).then(res=> {})

3.6 register

描述: 通过register注册消息提示插件,notify为服务消息提示,toast为行为操作提示。 对应的方法需要满足3.1的接口

源码:

register: ({notify,toast}) => { 
	HttpMessage.notify = notify; 
	HttpMessage.toast = toast; 
}

示例:

//组件库为ant-design-vue
import notification from 'ant-design-vue/es/notification'
import message from 'ant-design-vue/es/message'

 const notify = (message,description) => {
    notification.open({
        type: 'error',
        message,
        description
    })
  
}

const toast = {
    loading: (content)=>{
        message.open({
            type: 'loading',
            content
        })
    },
    success: (content) => {
        message.open({
            type: 'success',
            content
        })
    },
    failed: (content) => {
        message.open({
            type: 'error',
            content
        })
    },
    clear: () => {
        message.destroy()
    }
}

//基于ant-design-vue的使用
import {  Http } from "@huanbo99/core";
Http.register({
  toast,
  notify
})

4.i18n

描述: 多语言,国际化

源码:

/**
*@feature: 语言包设置
*@param lang: 语言名称
*@param langPackage: 语言包
*/
setLang(lang: string,langPackage: {[key:string]: any})

示例:

import { i18n, setLang } from '@huanbo99/core/src/i18n';

//引入语言包,langPackage可以按模块开发,进行引入使用
setLang('zhcn',{ 
	hb: '环博',  //在最外层的为通用翻译
    key: 'string',
    param: '你好{name}', //
    pageName: { yes: '确认',no: '取消' }  //在pageName页面里的翻译 
})

//设置完以后,可以通过  2.1 translate调用  或者 5.x i18nMixin调用

5.mixins

描述: 通过引入一些公用方法和属性,实现代码复用,引入mixins后通过组件通过this进行访问

5.1 appMixin

描述: DAP项目的项目配置相关mixin,其他项目不会使用到

使用:

impoet { appMixin } from '@huanbo99/core/src/mixins';

//example.vue
export default {
	mixins:  [ appMixin ],
	mounted(){
		this.customConfig //自定义配置
		this.tabBreadInHeader //标签栏和面包屑是否在layout的头部
        this.animate //路由动画的模式
		this.primaryColor //主题颜色
		this.navTheme //菜单的主题
		this.layoutMode //菜单模式
		this.collapse	//菜单是否折叠
		this.colorWeak  //是否是色弱模式
		this.multiTab	//是否显示标签栏模式
		this.fixSiderbar //是不是固定左侧菜单
		this.fixedHeader //是不是固定头部
		this.contentWidth //内容区模式,banner和流式的切换
		this.lang //当前系统语言
		this.maxProjectCount //最多显示几个产品
		this.projectIndex  //当前正在展示的产品
		this.langs  //系统所有的语言
		this.siteConfig //站点设置
		this.topMenuList //顶部菜单
		this.sideMenuList //左侧菜单
		this.menuList //所有菜单
		this.selectedProduct //当前选中的产品
		this.logo //系统logo
		this.CompanyCodeUrl //从url上获取的companyCode
		
		this.setAppSetting() //设置项目配置
		this.setTheme() //设置主题
		this.setConfigWithUser() //设置当前用户的项目配置
		this.isTopMenu()  //是否是顶部菜单模式
		this.isSideMenu() //是不是侧边栏菜单模式
		this.setWeak()  //设置色弱模式
	}
}

5.2 appSettingMixin

描述: DAP项目自动加载远程设置的站点信息,一般在App.vue中使用。项目启动的时候获取数据,根据目前设置的项目配置和远程数据,进行项目配置

示例:

import { appSettingMixin } from '@huanbo99/core/src/mixins'

//App.vue
export default {
	mixins: [ appSettingMixin ]
}

5.3 appConfigMixin

描述: 前端项目配置数据,通过统一的方式进行读取。

示例:

import { appConfigMixin } from '@huanbo99/core/src/mixins'

//App.vue
export default {
	mixins: [ appConfigMixin ],
	mounted(){
		this.appConfig //项目配置Object对象  
		
		//下列属性appConfig里的键值
		this.appCode  
		this.gateway
		this.favicon
		this.favTitle
		this.logoTitle
		this.logo
		this.logoTitleSize
		
		this.getAppConifg(key) => return this.appConfig[key]
	}
}

5.4 deviceMixin

描述: 设备的device, 和css的媒体查询类似 ,方便js里控制布局 :

源码:

screen and (max-width: 576px):  device = 'mobile'

screen and (min-width: 576px) and (max-width: 1199px):  device = 'tablet'

screen and (min-width: 1200px): device = 'desktop'

示例:

//example.vue
import { deviceMixin } from '@huanbo99/core/src/mixins'

export default {
	mixins: [ deviceMixin ]
	mounted(){
		this.device //设备名称 desktop | tablet | mobile
		this.isMobile
		this.isDesktop
		this.isTablet
	}
}

5.5 dicMixin

描述: 获取字典的数据,一般用于下拉选项的时候需要

使用:

//example.vue
import { dicMixin } from '@huanbo99/core/src/mixins'

export default {
	mixins: [ dicMixin ]
	mounted(){
		this.dictionary //字典对象
		this.dictionary['Status'] // [{[key:string]: string}]
	}
}

5.6 gatewayMixin

描述: 获取官网配置项,调用网关的GetJs后,会自动在window.SYS_CONFIG数据,由于操作这些东西很麻烦,加上后端可能会变,有框架统一出入口

使用:

import { gatewayMixin } from '@huanbo99/core/src/mixins'

export default {
	mixins: [ gatewayMixin ]
	mounted(){
		this.gatewayConfig //所有的网关信息
		this.singleSignUrl //单点登录网址
		this.innerSingleSignUrl //内网单点登录网址
		this.fileUrl //外网文件服务的地址,${this.fileUrl}/${FileId}可以直接显示图片
		
		this.getGatewayConfig(key?:string) => this.gatewayConfig?[key]
		this.getGatewayConfigValue(key?:string) => this.gatewayConfig?[key].Value
		this.getGatewayConfigName(key?:string) => this.gatewayConfig?[key].Name
		this.getGatewayConfigCode(key?:string) => this.gatewayConfig?[key].Code
		
	}
}

5.7 tokenMixin

描述: 在组件created的时候,根据token获取到用户信息,一般是C端项目在项目启动时引入。混入以后请求成功后可以在uerMixin里获取到用户信息

使用:

import { tokenMixin } from '@huanbo99/core/src/mixins'

//App.vue
export default {
	mixins: [ tokenMixin ]
}

5.8 userMixin

描述:

使用:

import { userMixin } from '@huanbo99/core/src/mixins'

export default {
	mixins: [ userMixin ],
	mounted(){
		this.userModel  //用户信息
		this.UserCode //永久参数 > this.userModel.UserCode
		this.studentId  //学生id
		/*学生id逻辑
		*1.thi.userModel.UserType里如果包含了7
		*拿到7的在数组里的索引index
		*再去this.userModel.UserTypeId数组里找到对应索引的元素就是studentId
		*2.如果都没有,其他系统跳转到本系统的时候 携带参数__studentId跳转过来的情况,
		*这时候的studentId为传入的__studentId
		*/
		this.birthDay  //当前用户的生日,根据this.userModel.IdCard计算得到
	}
}

5.9 i18nMixin与i18nFnMixin

描述: 组件的js里使用翻译的方法,调用了2.1 translate方法

使用:

import { i18nMixin } from '@huanbo99/core/src/mixins'
import { setLang } from '@huanbo99/core/src/i18n';

//设置语言和语言包
setLang('zhcn',{ 
	hb: '环博',
    key: 'string',
    param: '你好{name}',
    page: { 
    	yes: '确认',
    	no: '取消',
    	subPage: { i18n: '国际化', 'yes': '是' }
    }  
})

export default {
	mixins: [ i18nMixin ]
	mounted(){
		//用法和2.1 translate一样
		this.tr('hb') //环博 
		this.tr('param',null,{name: 'js调用'}) //你好js调用
		this.tr('i18n','page.subPage') //国际化
		this.tr('yes',['page','subPage']) //是
	}
}

//情况二: 当这个组件是页面中的时候,嵌套很深可以用i18nFnMixin避免
import { i18nMixin } from '@huanbo99/core/src/mixins'
export default {
	mixins: [ i18nFnMixin('page.subPage') ]
	mounted(){
		//用法和2.1 translate一样
		this.trFn('i18n') //国际化
		this.trFn('yes') //是
	}
}

6. router

描述: 路由守卫封装,权限验证等

import router,{ addRoutes } from '@huanbo99/core/src/router'


//添加路由配置
addRoutes(route: any[]) //通过该方法添加routes

//main.js
new Vue({
	router,
	h: (h) => h(App)
}).$mount('#app')

//路由守卫拦截
{
	path: '/',
	component: *,
	meta: {
		white: true //白名单页面,
		auth: 'page-code-home' //权限code。 目前没有做
	}
}
//路由守卫功能: 
//如果地址上有__token或__v_sso表示是单点登录跳转过来的信息,需要去掉这些query信息以后再去到目标页面
//如果有__token参数,存入__token为新的token,并且根据token获取到用户信息,用户信息为userModel(5.8) 
//如果有__studentId,5.8 userMixin获取到的studentId为该__studentId
//如果参数上有永久参数标识的,永久参数会一直存在每个页面上,跳转的时候会始终带上

7. store

描述: 项目的状态管理封装

/**
*@feature:  添加模块的状态管理,和store的registerModule方法参数一致
*@param path: 模块的访问路径
*@param module: 模块化的状态管理配置
*@param moduleOptions: 模块化配置项
*/
register: (path:string,module:any,moduleOptions: Object) => void

使用:

import store,{ register } from '@huanbo99/core/src/router'

//homeModule.js
export default {
  state: {
    tabIndex: 'basic',
    roleCode: ''
  },
  mutations: {
    SET_ROLE_TAB(state, data) {
      state.tabIndex = data
    },
    SET_ROLE_CODE(state, data) {
        state.roleCode = data
      }
  }
}


//注册模块
import homeModule from './homeModule.js'
register('home',homeModule) 

console.log(this.$store.state.home.tabIndex)
// 结果为 basic

//main.js
new Vue({
	store,
	h: (h) => h(App)
}).$mount('#app')

8. theme

描述: ant-design-vue组件的换肤插件和方法,插件用于webpack配置,方法用于业务逻辑中调用

源码:

/**
*feature: 换肤支持,webpack插件
*@param color: string
*@param path: string
*/
createThemeColorReplacerPlugin(color: string, path: string) => void

/**
*@feature: 手动换肤
*@param color: 换肤的主题颜色 #ffffff 16进制
*/
changeColor(color: string) => void

使用:

//vue.config.js
const CreateThemeColorReplacerPlugin = require('@huanbo99/core/src/theme/plugin')
module.exports = {
	configureWebpack: {
		plugins: [
		    //主题颜色为 #1890ff,变量文件为:src/assets/style/variable.less
			CreateThemeColorReplacerPlugin('#1890ff','src/assets/style/variable.less')
		]
	}
}



//example.vue
import { changeColor } from "@huanbo99/core/src/theme/color";
export default {
	mounted(){
		changeColor('#ff0000')
	}
}

9. utils

描述: 工具包

9.1 city.util

描述: 省市区相关工具

源码:

/**
*@feature: 回显省市区
*@param city: 省市区code
*@param join: 连接字符串
*/
getPCDName(city: string,join: string) => string



//默认导出省市区的options
module.export = [{ 
	label: '四川省',
	value: '510000',
	children:[{
    	label: '成都市',
        value: '510100',
        children:[{
            label: '锦江区',
            value: '510104'
		}]
	}]
}]

使用:

import { getPCDName } from '@huanbo99/core/src/utils/city.util'

console.log(  getPCDName('500000,5000100,5000104') )
//打印结果: 四川省/成都市/锦江区

console.log(  getPCDName('500000,5000100,5000104','-') )
//打印结果: 四川省-成都市-锦江区

9.2 common.util.js

描述: 通用工具包

9.2.1 loadscript

源码:

/**
 * @feature: 手动加载script的js
 * @param  url 加载js的地址
 * @param callback 回调函数
 * @returns Promise
 */
loadScript: (url:string, callback: () => void ) => Promise

示例:

import { loadScript } from '@huanbo99/core/src/utils/common.util'

loadScript('http://xx/Getjs',()=> {  }).then(res=> {})

9.2.2 obj2ParamUrl

源码:

源码:

/**
 * @feature: 将对象转为参数拼接到URL上
 * @param url 要拼接的URL
 * @param obj 要转换的对象
 * @param encode 是否需要进行编码
 * @returns 返回拼接后的URL
 */
obj2ParamUrl: (url: string, obj: Object, encode?: boolean) => string

示例:

import { obj2ParamUrl } from '@huanbo99/core/src/utils/common.util'

obj2ParamUrl('http://192.168.1.1:8080/page',{name: 'Jay',Id: 2})
//输出结果: http://192.168.1.1:8080/page?name=Jay&id=2

obj2ParamUrl('http://192.168.1.1:8080/page',{name: 'Jay',id: 2}, true)
//输出结果:http%3A%2F%2F192.168.1.1%3A8080%2Fpage%3Fname%3DJay%26id%3D2

9.2.3 paramUrl2Obj

源码:

/**
 * @feature: 将URL上的参数转为对象,如果没有参数返回{};
 * @param url url地址
 * @param decode 是否需要进行解码
 * @returns Object
 */
paramUrl2Obj: (url:string, decode?: boolean) => Object

示例:

import { paramUrl2Obj } from '@huanbo99/core/src/utils/common.util'

paramUrl2Obj('http://192.168.1.1:8080/page?name=Jay&id=2')
//输出结果: {name: 'Jay',Id: 2}

paramUrl2Obj('http%3A%2F%2F192.168.1.1%3A8080%2Fpage%3Fname%3DJay%26id%3D2',true)
//输出结果: {name: 'Jay',Id: 2}

9.2.4 pubSub

源码:

/**
 * 订阅者-观察者  设计模式
 */
export const pubSub = {
    typeMap: {}, //{type:[] }
    /**
     * 订阅者
     * @param type 订阅事件
     * @param data 发射数据
     */
    next(type: string, data: any) => void,
    /**
     * 观察者
     * @param type 观察事件
     * @param fn 回调函数
     */
    subscribe(type: string, fn: () => any ) => void
}

示例:

import { pubSub } from '@huanbo99/core/src/utils/common.util'

//页面A: A.vue
export default {
	mounted(){
		pubSub.subscribe('typeA',data => { //观察事件typeA
			console.log(data)  // 当B页面加载后,A页面会接收到 123 的信息
		})
	}
}

//页面B: B.vue
export default {
	mounted(){
		pubSub.next('typeA', 123) 
	}
}

9.2.5 debounce

源码:

/**
 * @feature: 防抖工具函数
 * @param func 需要防抖的函数
 * @param wait 延迟执行的事件
 * @param immediate 第一次是否立即执行
 */
 debounce:(func:() => any, wait: number, immediate: boolean) => () => void

示例:

import { debounce } from '@huanbo99/core/src/common.util'

//example.vue
export default {
	data(){
        return {
            name: '',
            error: ''
        }
	},
	render(){
		reutrn (
			<div>
				<a-input v-model="name" @change="onValidIsExist"  />
 				<span v-if="error">{{error}}</span>
			</div>
		)
	},
	method(){
		validToServer(){
			http.get('/api/user/exsit',{name: this.name}).then(res=>{
				if(res) { //存在
					this.error = '用户名已存在'
				}
			})
		},
		onValidIsExist(){
			//如果一直输入,会在输入停顿后1秒才发起后台服务的验证,从而做到节流效果
			return debounce(validToServer,1000)  
		}
	}
}

9.2.6 getBirthDayFromIdCard

源码:

/**
 * @feature: 根据身份证号获取出生年月日
 * @param idCard 身份证号
 * @param format 生日格式化字符串,默认YYYY-MM-DD
 * @returns 返回出生年月日
 */
getBirthDayFromIdCard: (idCard: string, format?:string = 'YYYY-MM-DD') 

示例:

import { getBirthDayFromIdCard } from '@huanbo99/core/src/common.util'

getBirthDayFromIdCard('511001199903115568') //1999-03-11

getBirthDayFromIdCard('511001199903115568','YYYY年MM月') //1999年03月

9.2.7 getSexFromIdCard

源码:

/**
 * @feature: 根据身份证获取性别 1 = 男  ; 2=女; 
 * @param {*} idCard 
 */
getSexFromIdCard : (idCard:string) => 1 | 2 

示例:

import { getSexFromIdCard } from '@huanbo99/core/src/common.util'

getSexFromIdCard('511001199903115568') //2

9.2.8 isInnerHost

源码:

/**
 * 是否是内网
 * @param {*} ip host地址
 */
isInnerHost: (ip: string) => boolean

示例:

import { isInnerHost } from '@huanbo99/core/src/common.util'

isInnerHost('http://localhost:9200')  //true

isInnerHost('http://192.168.16.163:9200')  //true

9.2.8 isDev

源码:

/**
 * 判断是不是开发环境
 * @returns true = 开发环境
 */
isDev: () => boolean

示例:

import { isDev } from '@huanbo99/core/src/common.util'

isDev() //开发环境: true

isDev() //生产环境: false

9.2.9

源码:

/**
 * 判断两个对象是否相等
 * @param {*} obj1 
 * @param {*} obj2 
 * @returns 
 */
 objectIsEqual: (obj1: Object,obj2: Object) => boolean 

示例:

import { objectIsEqual } from '@huanbo99/core/src/common.util'



objectIsEqual({a: 1},{a: 1}) // true

objectIsEqual({a: 1,b: 2},{b: 2,a: 1}) // true

objectIsEqual({a: 1,b: 2},{b: 3,a: 1}) // false

9.3 hb.util

描述: 环博业务相关包

9.3.1 signature

源码:

/**
 * @feature: 对请求生成签名,防篡改
 * @param appcode appcode
 * @param timestap 时间戳
 * @param data body 请求body
 * @param params params 请求参数
 */
signature : (appcode, timestap, data, params) => string

示例:

import { signature } from '@huabo99/core/src/utils/hb.util'

//一般来说,都业务中都不会用到该方法,http请求封装的时候才需要调用该方法

signature()  // md5加密串

9.3.2 toSso

源码:

/**
* @feature: 调用单点登录js,登录页面
*/
toSso: () => void

示例:

import { toSso } from '@huabo99/core/src/utils/hb.util'

toSso() //如果没有登录会自动到登录页面,如果登录了 userMixin上会有用户信息

9.3.3 toSsoSigup

源码:

/**
* @feature: 调用单点登录注册界面
*/
toSsoSigup: () => void

9.3.4 getRemovedSsoMarkUrl

源码:

/**
* @feature: 获取到移除单点登录信息标记的url,__v_sso和__token会被移除
* @param fullPath 是不是完整的路径
*/
getRemovedSsoMarkUrl: (fullPath?: boolean = true) => string

示例:

import { getRemovedSsoMarkUrl } from '@huabo99/core/src/utils/hb.util'

getRemovedSsoMarkUrl('http://192.168.16.123:8080/index?__token=token&__v_sso=sso&a=1')

//结果: http://192.168.16.123:8080/index?a=1

9.3.5 getParamsByUrl

源码:

/**
* @feature: 根据URL获取参数
* @param url 地址,不传默认是window.location.href
* @param 是否移除单点登录的标记
*/
getParamsByUrl: ( url?: string,  removeSsoMark: boolean = false) => Object

示例:

import { getParamsByUrl } from '@huabo99/core/src/utils/hb.util'

getParamsByUrl('http://192.168.16.163:8080/page?__token=token&__v_sso=sso&a=1')
//输出: {__token: 'token',__v_sso: 'sso',a: '1'}

getParamsByUrl('http://192.168.16.163:8080/page?__token=token&__v_sso=sso&a=1',true)
//输出: {a: '1'}

9.3.6 getTokenByUrl

源码:

/**
* @feature: 在url上获取token
*/
getTokenByUrl: () => string

9.3.7 useGetUser

源码:

/**
* @feature: 获取用户信息, 调用后会根据token获取到用户信息,通过5.8得到用户信息
*/
useGetUser: ()=> void

9.3.8 useLogout

源码:

/**
* @feature: 退出登录的方法
* @param beforeLogout 退出前的回调函数
* @param afterLogout 退出后的回调函数
*/
userLogout: (beforeLogout: () => any, afterLogout: () => any) => void

9.3.9 getSso

源码:

/**
* @feature: 获取单点登录地址
*/
getSso: () => Promise<string>

9.3.10 prefixPermanentUrlFlag

描述: 永久参数标识,是一个常量,如果url参数上是以这个开头,那么他就是一个永久参数

9.3.11 useUrlParam

源码:

/**
* @feature: 获取地址参数
* @param key 参数的key
* @param url 目标地址
* @returns 
      *  传入key时是,key对应的地址参数(永久参数>普通参数),不传key时是永久参数
      *   value: any

      *   所有参数对应的值 (永久参数>普通参数)
      *   valueSource: any
      *   永久参数对应的值
      *  valuePermanent: any

      *  普通参数对应的值
      *   valueCommon: any

      *  所有参数
      *  source: any

      *  永久参数
      *  permanent: any

      *   永久参数-未处理
      *  permanentSoruce: any

      *   普通参数
      *   common: any
*/
useUrlParam: (key?:string,url?: string) => object

示例:

import { useUrlParam } from '@huabo99/core/src/utils/hb.util'


//如果 prefixPermanentUrlFlag  = __HBP__
// window.location.href = 'http://192.168.16.123:8080/page?a=1&__HBP__b=2&c=3&b=4'


useUrlParam() 
//输出: {
	value: {b: 2},
	valueSource: '',
	valueCommon: '',
	valuePermanent: '',
	source: {a: 1,__HBP__b: 2,c: 3,b: 4  },
	common: {a: 1,c: 3,b: 4},
	permanent: {b: 2},
	permanentSoruce: {__HBP__b: 2}
}


useUrlParam('b') 
//输出: {
	value: 2,
	valueSource: 2,
	valueCommon: '4',
	valuePermanent: '2',
	source: {a: 1,__HBP__b: 2,c: 3,b: 4  },
	common: {a: 1,c: 3,b: 4},
	permanent: {b: 2},
	permanentSoruce: {__HBP__b: 2}
}

9.4 reg-exp.util

export const RegExpUtil = {
    name: {
        pattern: /^[\u4E00-\u9FA5]{2,4}$/,
        message: '请输入2-4字中文名称'
    },
    idcard: {
        pattern: /^[1-9][0-9]{5}([1][9][0-9]{2}|[2][0][0|1][0-9])([0][1-9]|[1][0|1|2])([0][1-9]|[1|2][0-9]|[3][0|1])[0-9]{3}([0-9]|[X])$/,
        message: '请输入正确身份证号'
    },
    phone: {
        pattern: /^1[3456789]\d{9}$/,
        message: '请输入正确手机号'
    },
    tel: {
        pattern: /^((0\d{2,3})-)(\d{7,8})(-(\d{3,}))?$/,
        message: '请输入正确固定电话'
    },
    phoneOrTel: {
        pattern: /^((0\d{2,3})-)(\d{7,8})|1[3456789]\d{9}$/,
        message: '请输入正确电话格式'
    },
    postcode: {
        pattern: /^[0-9]{6}$/,
        message: '请输入正确邮编'
    },
    schoolCode: { //毕业学校代码
        pattern: /^[a-zA-Z0-9]{8}$/,
        message: '毕业学校代码长度为8'
    }
}

10. 维护

仓库地址: http://183.221.116.103:8888/webpublic/core

流程: 修改功能 -> CHANGELOG.md -> README.md -> 版本发布

npm version patch   //修改bug  1.0.0 -> 1.0.1
 
npm version  minor  //功能增加、变更 1.0.0 -> 1.1.0

npm version major   //架构更改,不兼容之前版本  1.0.0 -> 2.0.0

2.修改 所有的API 文档,变更或者新增的地方填入对应的版本

3.修改CHANGELOG.md 变更记录

4.打包命令:

//编译开发的包到项目下,需要修改gulpfile.js文件中的devPath,开发项目路径。
npm run dev


//编译正式包
npm run deploy 


//手动发布
cd deployment 
npm publish 
1.0.2

4 years ago

1.0.1

4 years ago

1.0.3

4 years ago

1.0.0

4 years ago

0.2.8

4 years ago

0.2.7

4 years ago

0.2.6

4 years ago

0.2.3

4 years ago

0.2.2

4 years ago

0.2.5

4 years ago

0.2.4

4 years ago

0.2.1

4 years ago

0.2.0

4 years ago

0.1.10

4 years ago

0.1.9

4 years ago

0.1.8

4 years ago

0.1.7

4 years ago

0.1.4

4 years ago

0.1.6

4 years ago

0.1.3

4 years ago

0.1.0

4 years ago

0.1.2

4 years ago

0.1.1

4 years ago

0.0.43

4 years ago

0.0.42

4 years ago

0.0.41

4 years ago

0.0.40

4 years ago

0.0.39

5 years ago

0.0.38

5 years ago

0.0.37

5 years ago

0.0.36

5 years ago

0.0.35

5 years ago

0.0.34

5 years ago

0.0.33

5 years ago

0.0.31

5 years ago

0.0.32

5 years ago

0.0.30

5 years ago

0.0.29

5 years ago

0.0.26

5 years ago

0.0.27

5 years ago

0.0.28

5 years ago

0.0.21

5 years ago

0.0.22

5 years ago

0.0.23

5 years ago

0.0.24

5 years ago

0.0.25

5 years ago

0.0.20

5 years ago

0.0.19

5 years ago

0.0.18

5 years ago

0.0.17

5 years ago

0.0.16

5 years ago

0.0.14

5 years ago

0.0.15

5 years ago

0.0.13

5 years ago

0.0.10

5 years ago

0.0.11

5 years ago

0.0.12

5 years ago

0.0.9

5 years ago

0.0.8

5 years ago

0.0.7

5 years ago

0.0.6

5 years ago

0.0.5

5 years ago

0.0.4

5 years ago

0.0.3

5 years ago

0.0.2

5 years ago

0.0.1

5 years ago