# components-extent
**Repository Path**: mcck-tools/components-extent
## Basic Information
- **Project Name**: components-extent
- **Description**: components-extent
- **Primary Language**: JavaScript
- **License**: Artistic-2.0
- **Default Branch**: master
- **Homepage**: https://www.npmjs.com/package/components-extent
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2021-09-14
- **Last Updated**: 2026-02-04
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
[](https://www.npmjs.com/package/components-extent)
## 全局安装
```js
import componentsExtent from '@huitian/components-extent';
app.use({option}, componentsExtent);
```
推荐components-extent引入放在main.js最上方,否则extend.js方法异常
### option:
uploadFunction:上传文件的方法,返回格式为 {hash: filePath}
fileHashFunction:验证文件md5方法, 返回格式为 {hash: filePath}
axiosInstance:axios请求工具对象
## 按需引入
请查看 index.js文件
### 注意
element-ui 相关的组件需要单独注册
```js
import ElementExtent from '@huitian/components-extent/element/index.js';
app.use(ElementExtent);
```
### 表格工具
```js
import {ElTableExt} from '@huitian/components-extent';
ElTableExt.setApi(Api); // 必须设置API,或者在data中设置api属性
mixins: [ElTableExt]
```
默认自动获取表格数据(调用api中的page方法),可以设置autoInit: false关闭
```html
```
### from工具
```js
import {ElFormExt} from '@huitian/components-extent';
mixins: [ElFormExt]
```
提供监听表单数据修改功能
### contextmenu 右键菜单
```js
let menus = [
{
name: '菜单',
params: 123
click: function(params, ...args){
}
}
]
import {contextmenu} from '@huitian/components-extent';
contextmenu.handerContextmenu(event, menus, 'aaa');
```
### FileUtil 文件工具
提供上传和文件路径处理, 需要先设置 uploadFunction 和 fileHashFunction 方法
设置方式一、全局引入时设置
方式二、
```js
import {extentContext} from '@huitian/components-extent';
extentContext().uploadFunction = function(){}
```
方式三、
调用时传入
import {FileUtil} from '@huitian/components-extent';
FileUtil.upload(file, {uploadFunction: Function});
##### file 可以是InputHTMLEleement, File, Blob, Array
### emitter 事件处理
```js
import {emitter} from '@huitian/components-extent';
emitter.post('xxx', 123);
emitter.on('xxx', Function);
```
### TemplateApi
模板API封装了通用的Api方法
### MaxFileUploader
超大文件上传,上传步骤:
1. 初始化
2. 计算总任务数
3. 分片
4. 请求开启分片上传任务
5. 依次上传分片
6. 请求合并分片
7. 获取结果
* 用法
``` js
import {MaxFileUploader} from '@huitian/components-extent';
let uploder = new MaxFileUploader({
url: 'xxx',
md5Url: new URL('./md5.js', location),
params: {},
axios
});
uploader.progress((params, status, count, total, message) => {
// 进度
})
uploader.then((params, res) => {
// 上传完成
})
uploader.finally((params) => {
// 最终调用
})
uploader.reserve((param)=>{
// 不满足分片规则时调用
})
// 销毁
uploder.destroy()
```
* 构造函数参数:config
```json
{
// 每个分片大小,单位字节,默认20M
chunkSize: 20971520,
// 设置文件最小多大才开始分割,单位字节,默认100M
thresholdSize: 104857600,
// 上传时并发数,默认10个
concurrency: 10,
// 基础的url,非空,接口必须准守规则
url: null,
// 开启分片上传任务请求配置
startRequest: {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
},
// 上传分片文件请求配置
uploadRequest: {
method: 'PUT',
},
// 获取结果请求配置
resultRequest: {
method: 'GET',
},
// 开始合并请求配置
mergeRequest: {
method: 'GET',
},
// MD5的url,用于计算分片的hash值,类型必须是URL
md5Url: null,
// 是否自动关闭线城池
autoCloseThreadPool: true,
// 线程池,默认自动创建
threadPool: null
}
```
### retry
重试工具
* 用法
```js
import {utils} from '@huitian/components-extent';
utils.retry(function(){
// 业务代码
}, {maxCount: 100});
```
* 方法参数
```
retry(fn, options)
fn {Funtion} 执行方法
options {Object} 配置
maxCount: Number, // 最大重试次数,默认3次
exceptionOut: 出现异常退出,默认false
interval: 间隔多久一次
```
### ThreadPool
js线城池
* 参数
* 构造参数config
```json
// 线城池大小默认4个
coreSize: 4
```
* init和submit
```js
submit(fn, ...args)
fn {Function} 执行的方法,如果调用submit,方法中必须调用postMessage方法,参数为对象success和args
args {...Any} 方法需要的参数
```
* 用法
```js
import {ThreadPool} from '@huitian/components-extent';
let threadPool = new ThreadPool(config)
// 初始化
threadPool.init((args1, args2)=>{
// 初始化代码
}, args1, args2)
// 提交任务
threadPool.submit((args1, args2)=>{
// 执行代码
// 执行完成需要调用
postMessage({
success: true,
args: {}
})
}, args1, args2).then(res => {
// 执行成功后
})
// 销毁
threadPool.destroy()
```