# ng-ui
**Repository Path**: SunshineC/ng-ui
## Basic Information
- **Project Name**: ng-ui
- **Description**: 轻量级 uni-app UI 组件库 (NG-UI)
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-02-07
- **Last Updated**: 2026-02-07
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# NG-UI(ng-view)组件库使用文档
`NG-UI` 是一套轻量级的 uni-app UI 组件库(当前仓库的 uni_modules 插件:`ng-view`),包含常用基础组件 + 一套可选的全局工具库(路由、请求、存储、音频、hooks、工具函数等)。
> 本组件库的组件源码使用了 `
```
#### Props
| Prop | 类型 | 默认值 | 说明 |
| -------------------- | ---------------- | ------------------------------------------ | -------------------------------- |
| modelValue / current | number \| string | `0` | 当前选中的索引 |
| list | Array | `[]` | 标签列表,如 `[{name: '标签1'}]` |
| keyName | string | `"name"` | 从 list 对象中提取标签名的键名 |
| scrollable | boolean | `true` | 是否开启滚动模式 |
| lineColor | string | `"#3c9cff"` | 滑块颜色 |
| lineWidth | string \| number | `30` | 滑块宽度 |
| lineHeight | string \| number | `6` | 滑块高度 |
| lineBgSize | string | `"cover"` | 滑块背景尺寸 |
| duration | number | `200` | 动画时长(ms) |
| activeStyle | object \| string | `{ color: '#3c9cff', fontWeight: 'bold' }` | 激活标签样式 |
| inactiveStyle | object \| string | `{ color: '#303133' }` | 未激活标签样式 |
| itemStyle | object \| string | `{ height: '44px' }` | 单个 tab 的容器样式 |
| mask | object | `{}` | 标签的遮罩配置 |
| isMask | boolean | `false` | 是否显示遮罩 |
| customStyle | object \| string | `{}` | 自定义样式 |
#### Events
- `change`:点击标签时触发,返回索引
- `click`:点击标签时触发,返回标签对象
- `longPress`:长按标签时触发,返回索引
---
### 5.15 ng-radio 单选
源码:[ng-radio.vue](./components/ng-radio/ng-radio.vue)
#### 用法
```vue
```
#### Props
| Prop | 类型 | 默认值 | 说明 |
| ------------- | --------------------------- | ----------- | ------------------------------------ |
| modelValue | boolean \| string \| number | `false` | v-model 值 |
| checked | boolean \| string \| number | `null` | 选中值(组件内部判定逻辑以源码为准) |
| name | boolean \| string \| number | `true` | 当前项的值 |
| size | number \| string | - | 整体大小 |
| label | string | - | 文案 |
| labelColor | string | `""` | 文案颜色 |
| labelSize | number \| string | `30` | 文案大小 |
| iconColor | string | - | 图标颜色 |
| iconSize | number \| string | `30` | 图标大小 |
| disabled | boolean | `false` | 禁用 |
| shape | string | `"circle"` | `circle` 等 |
| activeColor | string | `"#FFB05C"` | 选中颜色 |
| inactiveColor | string | `"#666"` | 未选中颜色 |
| customStyle | object \| string | `{}` | 自定义样式 |
#### Events
- `update:modelValue(value)`
- `change(value)`
---
### 5.16 ng-price 价格显示
源码:[ng-price.vue](./components/ng-price/ng-price.vue)
#### 用法
```vue
```
#### Props
| Prop | 类型 | 默认值 | 说明 |
| ----------- | ---------------- | -------- | ---------------- |
| price | number \| string | `0` | 价格数值 |
| symbol | string | `"¥"` | 货币符号 |
| symbolSize | string \| number | `24` | 货币符号字体大小 |
| intSize | string \| number | `32` | 整数部分字体大小 |
| decSize | string \| number | `24` | 小数部分字体大小 |
| bold | boolean | `false` | 是否加粗 |
| color | string | `"#333"` | 颜色 |
| customStyle | object \| string | `{}` | 自定义样式 |
#### Events
- `click`:点击价格时触发
---
### 5.17 ng-status-bar 状态栏占位
源码:[ng-status-bar.vue](./components/ng-status-bar/ng-status-bar.vue)
#### Props
| Prop | 类型 | 默认值 | 说明 |
| ------- | ------ | --------------- | ------ |
| bgColor | string | `"transparent"` | 背景色 |
---
### 5.18 ng-sticky 吸顶
源码:[ng-sticky.vue](./components/ng-sticky/ng-sticky.vue)
#### 用法
```vue
吸顶内容
```
#### Props
| Prop | 类型 | 默认值 | 说明 |
| ----------- | ---------------- | --------------- | ---------- |
| offsetTop | string \| number | `0` | sticky top |
| zIndex | string \| number | `99` | 层级 |
| bgColor | string | `"transparent"` | 背景色 |
| disabled | boolean | `false` | 禁用吸顶 |
| customStyle | object | `{}` | 自定义样式 |
#### Slots
- 默认插槽
---
### 5.19 ng-tabbar 底部标签栏
源码:[ng-tabbar.vue](./components/ng-tabbar/ng-tabbar.vue)
#### 用法
```vue
```
#### Props
| Prop | 类型 | 默认值 | 说明 |
| ----------- | ---------------- | ---------- | ---------------------- |
| fixed | boolean | `true` | 固定底部 |
| placeholder | boolean | `true` | fixed 时是否占位 |
| height | string \| number | `100` | 高度 |
| padding | string | - | 内边距(需要自带单位) |
| borderTop | string | - | 顶部分割线 border |
| shadow | string | - | 阴影 |
| safeArea | boolean | `true` | 底部安全区 |
| zIndex | string \| number | `98` | 层级 |
| ai | string | `"center"` | align-items |
| jc | string | `"center"` | justify-content |
| cg | string \| number | `0` | column-gap |
| customStyle | object | `{}` | 自定义样式 |
#### Slots
- 默认插槽
---
### 5.20 ng-gap 间隔
源码:[ng-gap.vue](./components/ng-gap/ng-gap.vue)
#### Props
| Prop | 类型 | 默认值 | 说明 |
| ------- | ---------------- | ----------- | -------- |
| height | string \| number | `20` | 高度 |
| bgColor | string | `"#f5f5f5"` | 背景色 |
| mt | string \| number | `0` | 上外边距 |
| mb | string \| number | `0` | 下外边距 |
---
### 5.21 ng-area 省市区选择器
源码:[ng-area.vue](./components/ng-area/ng-area.vue)
#### 用法
```vue
```
#### Props
| Prop | 类型 | 默认值 | 说明 |
| ------------------- | ---------------- | ------------ | ------------------------------------ |
| show | boolean | `false` | 控制弹窗显示 |
| title | string | `"选择地区"` | 标题 |
| modelValue | array | `[]` | 默认值:名称数组(长度 3) |
| confirmColor | string | `"#3c9cff"` | 确认颜色 |
| cancelColor | string | `"#909193"` | 取消颜色 |
| confirmText | string | `"确定"` | 确认文案 |
| cancelText | string | `"取消"` | 取消文案 |
| closeOnClickOverlay | boolean | `true` | 点击遮罩关闭(由内部 ng-popup 控制) |
| zIndex | number \| string | `10075` | 层级(透传给 ng-popup) |
| activeItemClass | string | `""` | 选中项自定义类名 |
| inactiveItemClass | string | `""` | 未选中项自定义类名 |
| activeItemStyle | object \| string | `{}` | 选中项自定义样式 |
| inactiveItemStyle | object \| string | `{}` | 未选中项自定义样式 |
#### Events
- `update:show(boolean)`:关闭/打开
- `update:modelValue(array)`:确认时更新名称数组
- `confirm(result)`:确认选择(包含 province/city/district/value/code)
- `cancel`:关闭触发
- `change(payload)`:picker 滚动变化
#### Slots(头部工具栏)
内部基于 `ng-picker`,可通过以下插槽传入自定义内容(仅替换对应区域,未传则保持默认取消/标题/确认):
- `header-left`:对应 `ng-picker-header` 的 `left` 插槽
- `header`:对应 `ng-picker-header` 的默认插槽(标题区域)
- `header-right`:对应 `ng-picker-header` 的 `right` 插槽
插槽参数(slotProps):
- `onCancel/onConfirm/onClose`
---
### 5.22 ng-picker 通用选择器
源码:[ng-picker.vue](./components/ng-picker/ng-picker.vue)
#### 用法
```vue
```
#### Props
| Prop | 类型 | 默认值 | 说明 |
| ------------------- | ---------------- | -------- | -------------------- |
| show | boolean | `false` | 控制弹窗显示 |
| columns | array | `[]` | 数据列表 |
| title | string | `""` | 标题 |
| modelValue | array | `[]` | 默认选中项索引 |
| keyName | string | `"text"` | 选项对象中显示的键名 |
| confirmColor | string | `""` | 确认按钮颜色 |
| cancelColor | string | `""` | 取消按钮颜色 |
| confirmText | string | `"确定"` | 确认文案 |
| cancelText | string | `"取消"` | 取消文案 |
| closeOnClickOverlay | boolean | `true` | 点击遮罩关闭 |
| zIndex | number \| string | `10075` | 层级 |
| activeItemClass | string | `""` | 选中项自定义类名 |
| inactiveItemClass | string | `""` | 未选中项自定义类名 |
| activeItemStyle | object \| string | `{}` | 选中项自定义样式 |
| inactiveItemStyle | object \| string | `{}` | 未选中项自定义样式 |
#### Events
- `update:show(boolean)`:显示状态改变
- `confirm(result)`:点击确定,返回 `{ value: 选中项数组, index: 索引数组 }`
- `cancel`:点击取消
- `change(payload)`:选项改变
#### Slots(头部工具栏)
内部头部使用 `ng-picker-header`,可通过以下插槽传入自定义内容(仅替换对应区域,未传则保持默认取消/标题/确认):
- `header-left`:对应 `ng-picker-header` 的 `left` 插槽
- `header`:对应 `ng-picker-header` 的默认插槽(标题区域)
- `header-right`:对应 `ng-picker-header` 的 `right` 插槽
插槽参数(slotProps):
- `onCancel/onConfirm/onClose`
---
### ng-datetime 日期时间选择器
源码:[ng-datetime.vue](./components/ng-datetime/ng-datetime.vue)
`ng-datetime` 是对 `ng-picker` 的封装:内部使用多列滚轮来选择「年/月/日/时/分(/秒)」,并支持 `minDate/maxDate` 限制范围。
#### 基础用法(datetime)
```vue
```
#### 仅选择日期(date)
```vue
```
#### Slots(头部工具栏)
`ng-datetime` 内部基于 `ng-picker`,支持透传与 `ng-picker` 一致的头部插槽:
- `header-left`
- `header`
- `header-right`
插槽参数(slotProps)同 `ng-picker`。
#### Props(常用)
| Prop | 类型 | 默认值 | 说明 |
| -------------- | ------------------ | ------------ | ---------------------------------------- |
| show | boolean | `false` | 控制弹窗显示(v-model:show) |
| modelValue | string/number/Date | `""` | 当前值(v-model,默认输出格式化字符串) |
| mode | string | `"datetime"` | `datetime` / `date` |
| minDate | string/number/Date | `""` | 最小可选时间 |
| maxDate | string/number/Date | `""` | 最大可选时间 |
| showSeconds | boolean | `false` | 是否显示秒列(仅 datetime 生效) |
| minuteStep | number/string | `1` | 分钟步进(1-59) |
| secondStep | number/string | `1` | 秒步进(1-59,showSeconds=true 时生效) |
| format | string | `""` | 输出格式(空则自动:date/datetime 预设) |
| updateOnChange | boolean | `false` | 滚动时是否同步 update:modelValue |
#### Events
- `update:show(boolean)`:显示状态改变
- `update:modelValue(string)`:确定(或 updateOnChange=true 且滚动变化时)更新
- `confirm(res)`:确定,返回 `{ value, date, parts }`
- `change(res)`:滚动变化,返回 `{ value, date, parts }`
- `cancel`:取消
- `close`:关闭
---
### 5.23 ng-upload 上传(选择文件 + 预览)
源码:[ng-upload.vue](./components/ng-upload/ng-upload.vue)
#### 用法(受控 fileList)
`ng-upload` 采用“受控”模式:外部维护 `fileList`,组件仅通过事件回调通知你新增/删除/超限等动作。
```vue
```
#### Props
| Prop | 类型 | 默认值 | 说明 |
| ---------------- | ---------------- | --------------------------- | ----------------------------------------- |
| accept | string | `"image"` | `image`/`video`/其他(内部识别扩展名) |
| capture | string \| array | `["album","camera"]` | 选择来源 |
| compressed | boolean | `true` | 图片是否压缩 |
| camera | string | `"back"` | 摄像头方向 |
| maxDuration | string \| number | `60` | 视频最大时长 |
| uploadIcon | string | `"image-empty"` | 上传按钮图标 |
| uploadIconColor | string | `"#D3D4D6"` | 上传按钮图标色 |
| useBeforeRead | boolean | `false` | 是否启用 beforeRead 回调模式(见 Events) |
| previewFullImage | boolean | `true` | 点击图片是否全屏预览 |
| maxCount | string \| number | `52` | 最大数量 |
| disabled | boolean | `false` | 禁用 |
| imageMode | string | `"aspectFill"` | 预览图 mode |
| name | string | `""` | 字段名(会在事件 detail 中返回) |
| sizeType | array | `["original","compressed"]` | sizeType 透传 |
| multiple | boolean | `false` | 是否多选 |
| deletable | boolean | `true` | 是否允许删除 |
| maxSize | string \| number | `Number.MAX_VALUE` | 最大文件大小(字节) |
| fileList | array | `[]` | 文件列表(受控) |
| uploadText | string | `""` | 上传按钮文案 |
| width | string \| number | `80` | 预览块宽度 |
| height | string \| number | `80` | 预览块高度 |
| customStyle | object \| string | `{}` | 自定义样式 |
| previewImage | boolean | `true` | 是否展示预览区 |
> 重要:组件内部还会读取 `props.beforeRead`(函数)作为同步/异步拦截,但该 prop 未在 props.js 中显式声明。你仍然可以按 Vue 的“透传 props”方式传入:
>
> - `:beforeRead="(file, detail) => true | false | Promise"`
#### Events
- `beforeRead({ file, name, index, callback })`:当 `useBeforeRead=true` 时触发;你需要手动调用 `callback(true/false)` 决定是否继续
- `afterRead({ file, name, index })`:选择文件后触发(未超限)
- `oversize({ file, name, index })`:超出 `maxSize` 触发
- `delete({ file, name, index })`:点击删除触发(你需要更新外部 fileList)
- `clickPreview(payload)`:点击预览触发
- `error(error)`:chooseFile 失败或其他错误
#### Slots
- 默认插槽:自定义上传按钮区域(替换默认上传按钮)
---
## 6. 工具库(libs)API 文档
工具库的入口导出见:[libs/index.js](./libs/index.js)
你可以通过两种方式使用工具库:
1. 全局安装后:
```js
const ng = uni.$ng; // 或 this.$ng / inject("$ng")
ng.request.get("/user");
```
2. 按需导入:
```js
import {
request,
router,
storage,
systemInfo,
} from "@/uni_modules/ng-view/index.js";
```
---
### 6.1 createNGUI / install(插件入口)
入口文件:[index.js](./index.js)
#### createNGUI(config?)
- 作用:创建 `$ng` 实例并挂载到 `uni.$ng`
- 返回:`ngui` 对象,包含全部导出的工具函数 + `sys`(systemInfo 结果)+ `router/push/back` 快捷方法 + `config/version`
#### install(app, config?)
- 作用:Vue3 插件安装函数(内部调用 createNGUI)
- 额外行为:
- `app.config.globalProperties.$ng = ngui`
- `app.provide("$ng", ngui)`
---
### 6.2 systemInfo()
源码:[system.js](./libs/core/system.js)
#### 用法
```js
import { systemInfo } from "@/uni_modules/ng-view/index.js";
const info = systemInfo();
```
#### 返回字段(常用)
- `windowWidth/windowHeight`
- `screenWidth/screenHeight`
- `statusBarHeight`
- `safeArea/safeAreaInsets`
- `dpr`
- `scaleFactor`
- 微信小程序额外:`menuButtonHeight/menuButtonWidth/menuButtonTop/menuButtonRight/menuButtonBottom/menuButtonLeft`
---
### 6.3 storage(带过期时间的存储)
源码:[storage.js](./libs/core/storage.js)
默认前缀:`NG_`(仅影响 storage 工具自身,不影响 `uni.setStorageSync` 的其他 key)
#### API
- `storage.set(key, value, expireSeconds?) => boolean`
设置同步存储;`expireSeconds` 为秒,传入则会记录过期时间
- `storage.get(key, defaultValue?) => any`
获取同步存储;过期会自动清理并返回 defaultValue
- `storage.setAsync(key, value, expireSeconds?) => Promise`
- `storage.getAsync(key, defaultValue?) => Promise`
- `storage.remove(key) => boolean`
- `storage.has(key) => boolean`
- `storage.setMultiple({k:v,...})`
- `storage.getMultiple(keys: string[]) => Record`
- `storage.clear() => boolean`
仅清除带 `NG_` 前缀的 key
- `storage.getInfo() => { keys, size, limit }`
---
### 6.4 router(轻量路由封装)
源码:[router.js](./libs/core/router.js)
特性:
- 支持 `push/replace/reLaunch/back`
- 支持 query 序列化(数组/对象会做特殊处理)
- 支持 params(通过 storage 临时存储,跳转后调用 `router.getParams()` 取出并自动清理)
- 支持导航守卫:`beforeEach/afterEach/onError`
- 自动识别 tabBar:如果目标 path 是 tabBar 页面,会自动切换为 `switchTab`
#### API
- `router.push(path, options?) => Promise`
- `options.mode`:`navigateTo`(默认)/`redirectTo`/`reLaunch`/`switchTab`/`preloadPage`
- `options.query`:对象,会拼进 url
- `options.params`:对象,不拼接到 url,通过 storage 透传
- 其余字段(animationType 等)透传到 uni 跳转方法
- `router.replace(path, options?) => Promise`(等价于 mode=redirectTo)
- `router.reLaunch(path, options?) => Promise`
- `router.back(delta=1)`:返回;当栈深不足时回到首页 tabBar 或 pages[0]
- `router.getParams() => any`:获取并清理通过 params 传递的数据
- `router.isTab(path) => boolean`:判断是否 tabBar
- `router.beforeEach((to, next, redirect) => void | Promise)`:注册前置守卫,返回取消函数
- `router.afterEach((to)=>void)`:注册后置回调,返回取消函数
- `router.onError((error, to)=>void)`:注册错误回调,返回取消函数
#### push 示例(params 传对象)
```js
router.push("/pages/detail/detail", {
query: { id: 1 },
params: { foo: "bar", deep: { a: 1 } },
});
// 在目标页 onLoad/onShow 中:
const params = router.getParams();
```
---
### 6.5 audioManager(全局音频控制器)
源码:[audioController.js](./libs/core/audioController.js)
#### 事件名称
| 事件名 | 说明 |
| -------------- | ------------ |
| `onStart` | 开始播放 |
| `onItemEnded` | 单首播放结束 |
| `onListEnded` | 列表播放结束 |
| `onError` | 播放错误 |
| `onPause` | 暂停 |
| `onStop` | 停止 |
| `onReplaced` | 列表被替换 |
| `onTimeUpdate` | 播放进度更新 |
| `onWaiting` | 缓冲中 |
| `onCanplay` | 可以播放 |
#### API
- `audioManager.set(list, options?)` - 设置播放列表
- `list`:音频数组,每项至少包含 `{ src }`
- `options.index`:开始播放索引(默认 0)
- `options.playMode`:播放模式(`order`/`loop`/`random`/`single`)
- `options.debug`:是否输出调试日志
- `options.itemEndedAt`:触发结束回调的时间点数组(毫秒)
- `options.waitMs`:列表级默认播放后等待时间(毫秒)
- 顶层回调:如 `onStart(){}, onItemEnded(){}` 等
- `audioManager.play(index?, isManualAction?)` - 播放指定索引
- `audioManager.toggle()` - 切换播放/暂停
- `audioManager.pause()` - 暂停
- `audioManager.stop()` - 停止并清空状态
- `audioManager.seek(time)` - 跳转到指定时间(秒)
- `audioManager.next()` - 下一首
- `audioManager.prev()` - 上一首
- `audioManager.setMode(mode)` - 设置播放模式(`order`/`loop`/`random`/`single`)
- `audioManager.setLoop(times)` - 设置循环次数
- `audioManager.setPlaybackRate(rate)` - 设置播放倍速(0.5-3.0)
- `audioManager.on(eventName, callback)` - 订阅事件
- `audioManager.off(eventName, callback?)` - 取消订阅
- `audioManager.getState()` - 获取当前状态
---
### 6.6 request / createRequest
源码:[request.js](./libs/core/request.js)
导出形式:
- `request`:默认实例(`export default createRequest()`)
- `createRequest(instanceConfig)`:创建独立实例(独立拦截器、独立 baseURL 等)
#### 全局配置来源
request 会合并以下配置(后者覆盖前者):
1. 内置默认配置(DEFAULT_REQUEST_CONFIG)
2. `uni.$ng.config.request`(如果你安装了插件并设置了 config)
3. 实例级配置(`createRequest(instanceConfig)` 传入)
4. 单次请求 options(`request({ ... })` 传入)
#### request(options) 扩展字段
在 `uni.request` 官方参数基础上,额外支持:
- `baseURL`:覆盖本次请求的 baseURL
- `needToken: boolean`:是否自动注入 token(默认 true)
- `token: { enable, storage, key, headerName, prefix }`:覆盖 token 策略
- `storage: "uni" | "ng"`:读取 token 的方式;`ng` 会用 `storage.get()`
- `returnType: "data" | "response"`:默认返回 `res.data`;传 `"response"` 则返回完整 response
- `validateStatus(statusCode) => boolean`:自定义状态码成功判定
#### get/post/put/delete 快捷方法
- `request.get(url, data?, options?)`
- `request.post(url, data?, options?)`
- `request.put(url, data?, options?)`
- `request.delete(url, data?, options?)`
#### 拦截器
request 同时支持两种拦截器:
1. 配置数组形式(全局/实例配置中):
- `requestInterceptors: Function[]`:入参为 requestOptions,返回可选的 requestOptions(支持 Promise)
- `responseInterceptors: Function[]`:入参为 response,返回可选的 response(支持 Promise)
2. 类 axios 形式(每个实例自带):
- `request.interceptors.request.use(onFulfilled, onRejected?) => id`
- `request.interceptors.request.eject(id)`
- `request.interceptors.request.clear()`
- `request.interceptors.response.use(...)`
#### abort(取消请求)
`request.request()` 返回的是 Promise,并附带:
- `promise.task`:可拿到 `RequestTask`
- `promise.abort()`:内部调用 `RequestTask.abort()`
示例:
```js
const p = request.get("/list");
// 取消
p.abort();
```
---
### 6.7 hooks
#### useCountDown(options?)
源码:[useCountDown.js](./libs/hooks/useCountDown.js)
- 入参:`{ onFinish?, interval=1000 }`
- 返回:
- `timeData`:computed,包含 `day/hour/minute/second/milliseconds/remain`
- `remain`:ref,剩余毫秒
- `start(ms)`:启动
- `stop()`:停止
- `reset(ms)`:重置
#### useAppUpdate(options)
源码:[useAppUpdate.js](./libs/hooks/useAppUpdate.js)
- 入参:
- `api(params) => Promise`:请求版本信息的 API(必传,仅 APP-PLUS 下生效)
- `shouldUpdate(res) => boolean`:判断是否需要更新(必传)
- `downloadUrlField: string`:下载地址字段名(必传)
- 返回状态:
- `versionData/hasUpdate/updating/downloadProgress/updateStatus/errorMessage/updateType`
- 返回方法:
- `checkUpdate({ currentVersion? }) => Promise`
- `handleUpdate() => Promise`
- `cancelUpdate()`
- `resetUpdate()`
- 工具方法:`normalizeDownloadUrl/isWgtUrl/isApkUrl/isAppStoreUrl/isIOS`
---
### 6.8 utils(工具函数)
`libs/index.js` 已全量导出所有工具函数,源码见:[utils/index.js](./libs/utils/index.js)
#### 单位与布局
- `px2rpx(px)`:px 转 rpx
- `rpx2px(rpx)`:rpx 转 px
- `addUnit(value, unit="rpx")`:给数字补单位
- `getWH(wh, width, height) => { w, h }`:解析宽高快捷值
#### 颜色与配置
- `toHex(color)`:颜色转十六进制
- `convertColor(color)`:颜色格式转换
- `getColor(val)`:主题色映射
- `getComponentConfig(componentName, presetName)`:读取组件预设
#### 样式
- `addStyle(customStyle, target="object")`:样式格式转换
- `trim(str, pos="both")`:去空格
#### 校验
- `isEmpty(value)`:判断空
- `isObject(val)`:是否对象
- `isPhone(str)`:是否手机号
- `isEmail(str)`:是否邮箱
- `isIdCard(str)`:是否身份证
- `isNumber(value)`:是否数值
- `isPureNumber(str)`:是否纯数字
#### 数据
- `deepMerge(target, ...sources)`:深度合并
- `deepClone(obj)`:深克隆
- `removeEmpty(obj, isDeep=false)`:过滤空值
#### 辅助
- `padZero(num, length=2)`:补零
- `guid(len=32)`:生成 GUID
- `toast(title, options)`:显示提示
- `sleep(ms=30)`:延迟
#### DOM
- `getRect(context, selector, all=false)`:获取节点信息
#### 函数式
- `throttle(fn, wait=500, immediate=true)`:节流
- `debounce(fn, wait=500, immediate=false)`:防抖
#### 文件
- `base64ToTempPath(base64)`:base64 转临时路径
#### 日历
- `calendar`:农历/公历转换工具
#### 设备与时间
- `getDevice()`:获取设备信息
- `timeFormat(date, fmt?)`:时间格式化
- `timeFrom(date, option?)`:相对时间
---
### 6.9 样式 Props 工具函数(props.js)
源码:[props.js](./libs/props.js)
- `backgroundStyle(props) => object`
- `marginStyle(props) => object`
- `paddingStyle(props) => object`
- `positionStyle(props) => object`
- `getAllStyles(props) => object`:汇总以上样式
- `allProps`:上述所有 props 的聚合对象(供组件 `...allProps` 使用)
---
### 6.10 utils 全量导出
`libs/index.js` 已全量导出所有工具函数,可直接使用:
```js
import { rpx2px, timeFormat, calendar, isPhone } from "@/uni_modules/ng-view";
```
完整列表见:[utils/index.js](./libs/utils/index.js)