入门指南
由于组件是基于 element-plus 进行拓展的,所以需要首先安装 element-plus,若项目已存在可忽略,无需指定特定版本(ps:涉及到element-plus组件的功能,你也只能用到你当前项目中的版本)。
快速使用
npm install element-plus
已经存在 element-plus 后,再安装当前组件库。
npm install devecoui-plus
或者安装指定版本
npm install devecoui-plus@1.0.43 -E
全部安装完成后在 src/main.js 中引用配置,示例如下:
import {createApp} from 'vue';
import App from './App.vue';
import router from './router';
import ElementPlus from 'element-plus';
import 'element-plus/dist/index.css';//必须引入
import zhCn from 'element-plus/es/locale/lang/zh-cn';// 此处是element-plus汉化
import DevecouiPlus from "devecoui-plus";//必须引入
import 'devecoui-plus/dist/style.css';//必须引入
const app = createApp(App);
app.use(createPinia());
app.use(router);
app.use(ElementPlus, {locale: zhCn});
app.use(DevecouiPlus);//必须引入
app.mount('#app');
至此你就愉快的使用了,需要更精准的控制请阅读完下方内容,完成进阶。
自定义全局配置
很多情况下,组件的默认配置或方法并不是你想要的,但是在每个组件上传参修改又会很麻烦,这个时候就可以用到全局参数配置 ,只需要配置一次,所有同类型组件会默认使用全局配置项。
第一步
在 src 目录下新建文件夹 config,如果已存在可忽略。
第二步
在 config 文件夹下新增文件 devecoui.fn.ts,内容如下:
import type {DevSearchTableProps} from 'devecoui-plus'
/**
* DevSearchTable组件调用接口后处理返回的数据:默认情况下是取结果中的data内容。
* @param res - 调用接口后返回的完整数据(注:如果axios处理了结果数据res返回的是处理后的内容)。
* @param props - DevSearchTable组件的props。
* @param type- data表示要处理接口返回的列表数据,total表示要处理接口返回的总条数。
* @returns 默认返回值为接口回调data内容。
*/
function devSearchTableFieldsFn(res: any, props: DevSearchTableProps, type: 'data'): object[];
function devSearchTableFieldsFn(res: any, props: DevSearchTableProps, type: 'total'): number;
function devSearchTableFieldsFn(res: any, props: DevSearchTableProps, type: 'data' | 'total'): object[] | number {
const result = res.data;
if (type === 'data') {
if (props.isPagination) {
return result[props.dataKey || 'list'] as object[];
} else {
return result as object[];
}
}
if (type === 'total') {
if (props.isPagination) {
return result[props.totalKey || 'total'] * 1 || 0 as number;
} else {
return 0;
}
}
return [];
}
// ... 更多配置可参考下方全局默认配置
export const fnConfig = {
devSearchTableFieldsFn,
// ... 更多配置可参考下方全局默认配置
};
第三步
在 config 文件夹下新增文件 devecoui.props.ts,内容如下:
export const propsConfig = {
// 影响 dev-search-table 组件 和 dev-form-table 组件
elTableProps: {
rowKey: 'id',
border: true,
style: {width: '100%'},
headerCellStyle: {background:'#eff3f6', textAlign: 'center'},
},
// ... 更多配置可参考下方全局默认配置
};
第四步
在 config 文件夹下新增文件 devecoui.config.ts,内容如下:
import {stylesConfig} from './devecoui.props'
import {fnConfig} from './devecoui.fn'
export const defaultConfig = {
...propsConfig,
...fnConfig,
merge: false, // 默认情况下为false 具体功能请查看下方 merge配置
};
第五步
在 src/main.js 中引入配置文件,需要将刚才的配置文件引入,并且修改devecoui组件注册代码,示例如下:
import { defaultConfig } from '@/config/devecoui.config';// 加一句这个(引入配置文件)
app.use(DevecouiPlus, defaultConfig); // 修改这里
全局默认配置
fnConfig 配置
import type {DevSearchTableProps} from 'devecoui-plus'
/**
* DevSearchTable组件调用接口后处理返回的数据:默认情况下是取结果中的data内容。
* @param res - 调用接口后返回的完整数据(注:如果axios处理了结果数据res返回的是处理后的内容)。
* @param props - DevSearchTable组件的props。
* @param type- data表示要处理接口返回的列表数据,total表示要处理接口返回的总条数。
* @returns 默认返回值为接口回调data内容。
*/
function devSearchTableFieldsFn(res: any, props: DevSearchTableProps, type: 'data'): object[];
function devSearchTableFieldsFn(res: any, props: DevSearchTableProps, type: 'total'): number;
function devSearchTableFieldsFn(res: any, props: DevSearchTableProps, type: 'data' | 'total'): object[] | number {
const result = res.data;
if (type === 'data') {
if (props.isPagination) {
return result[props.dataKey || 'list'] as object[];
} else {
return result as object[];
}
}
if (type === 'total') {
if (props.isPagination) {
return result[props.totalKey || 'total'] * 1 || 0 as number;
} else {
return 0;
}
}
return [];
}
/**
* DevSelect组件调用接口后处理返回的数据:默认情况下是取结果中的data内容。
* @param res
* @returns 默认返回值为接口回调data内容。
*/
function devSelectFieldsFn(res: any) {
return res.data || []
}
/**
* DevSelectMutex组件调用接口后处理返回的数据:默认情况下是取结果中的data内容。
*/
function devSelectMutexFieldsFn(res: any) {
return res.data || []
}
/**
* DevCascaderMutex 组件调用接口后处理返回的数据:默认情况下是取结果中的data内容。
*/
function devCascaderMutexFieldsFn(res: any) {
return res.data || []
}
/**
* DevCascader 组件调用接口后处理返回的数据:默认情况下是取结果中的data内容。
*/
function devCascaderFieldsFn(res: any) {
return res.data || []
}
/**
* DevDownload组件调用接口后处理返回的数据:默认情况下是取结果中的data内容。
* @param res
*/
function devDownloadFieldsFn(res: any) {
return res || {}
}
/**
* DevUploadImage组件调用接口后处理返回的数据:默认情况下是取结果中的data内容。
*/
function devUploadImageFieldsFn(res: any) {
return res.data || ''
}
/**
* DevUploadImage组件调用接口入参处理
*/
function devUploadImageParamsFn(files: File, config: Record<string, any> = {}): FormData {
const formData = new FormData();
formData.append(config.fileKey, files);
return formData;
}
/**
* 向外部暴露的处理组件数据的方法。
*/
export const fnConfig = {
devSearchTableFieldsFn,
devSelectFieldsFn,
devSelectMutexFieldsFn,
devCascaderMutexFieldsFn,
devDownloadFieldsFn,
devCascaderFieldsFn,
devUploadImageFieldsFn,
devUploadImageParamsFn
};
propsConfig 配置
/**
* 向外部暴露的处理组件数据的方法。
*/
export const propsConfig = {
elTableProps: {
rowKey: 'id',
border: true,
style: {width: '100%'},
headerCellStyle: {background: '#eff3f6', textAlign: 'center'},
},
// 下拉选择框
elSelectProps: {
style: {width: '100%'},
clearable: true,
placeholder: '请选择',
tagType: 'primary'
},
elDatePickerProps: {
style: {width: '100%'},
type: 'datetimerange',
clearable: true,
placeholder: '请选择',
rangeSeparator: '至',
startPlaceholder: '开始时间',
endPlaceholder: '结束时间',
valueFormat: 'YYYY-MM-DD HH:mm:ss'
},
devSearchTablePaginationProps: {
layout: 'total, sizes, prev, pager, next',
pageSizes: [10, 20, 50, 100],
background: true
},
elFormProps: {},
elCascaderProps: {
tagType: 'primary',
clearable: true,
style: {width: '100%'},
props: {
emitPath: true,
multiple: false,
value: 'value',
label: 'label',
children: 'children',
disabled: 'disabled'
}
},
elTooltipProps: {
effect: "dark",
},
elInputProps: {
clearable: true, // 是否可清空
style: {width: '100%'},
placeholder: '请输入',
},
// 图片裁剪
devImageCropperProps: {
showViewer: true,// 是否裁剪结果显示预览
showCrosshair: true,// 是否显示裁剪框十字线
showSelectionGrid: true,// 是否显示裁剪框内栅栏
showShade: true, // 是否显示遮罩层
showCanvasGrid: false, // 是否显示Canvas组件的栅栏
outputType: ['blob', 'base64', 'file', 'url'], // 输出的裁剪结果类型
viewerAttrs: {
selection: '#dev_cropperSelection', // 预览组件关联的选择框ID
}, // 预览组件的属性
canvasAttrs: {
background: true, // 是否有背景
style: {width: '300px', height: '300px'},
}, // Canvas组件的属性
selectionAttrs: {
id: 'dev_cropperSelection',
"initial-coverage": 0.5, // 初始覆盖率
movable: true,
resizable: true,
width: '',
height: '',
x: '',
y: ''
},
canvasGridAttrs: {},
shadeAttrs: {
hidden: true
},
crosshairAttrs: {centered: true}, // 十字线组件的属性
selectionGridAttrs: {
covered: true,
role: "grid"
}, // 栅栏组件的属性
canvasHandleList: [{action: 'select', plain: true}], // Canvas中的操作按钮列表
selectionHandleList: [
{action: 'move', themeColor: 'rgba(255, 255, 255, 0.35)'},
{action: 'n-resize'},
{action: 'e-resize'},
{action: 's-resize'},
{action: 'w-resize'},
{action: 'ne-resize'},
{action: 'se-resize'},
{action: 'sw-resize'},
{action: 'nw-resize'},
], // Selection 中的操作按钮列表
},
// 文件选择
devFileSelectProps: {
buttonText: '选择文件',
},
devUploadImageProps:{
width: '150', // 图片容器宽度
height: '150', // 图片容器高度
borderRadius: '10', // 图片容器圆角
cropper: false, // 是否裁剪
sortable:false, // 是否支持排序
maxCount: 1, // 最大上传文件数Infinity
gap: '20', // 图片容器内边距,
fileKey: 'file', // 存储file的key值
elImageViewerAttrs:{},// 图片预览可以添加的属性
imageButtons:['edit', 'delete', 'look'], // 图片中可操作的按钮
imageOptionsSize:'20px',// 图片中可操作按钮大小
imageOptionsColor:'#fff',// 图片中可操作按钮颜色
chooseColor: '#d9d9d9', // 选择图片按钮边框颜色和icon颜色
chooseIconSize:'20px', // 选择图片按钮icon大小
cropperElDialogAttrs:{
title: '裁剪图片',
width: '800px',
top: '10vh',
closeOnClickModal: false,
closeOnPressEscape: false,
destroyOnClose: true,
style: {
borderRadius: '10px'
}
},
cropperDevImageCropperAttrs:{
canvasAttrs: {
background: true, // 是否有背景
style: {
width: '770px',
height: '400px'
}
}
}
}
};
merge 配置
1.0.43
版本新增了 merge
新特性,此配置只针对 propsConfig
中属性合并。
在以往的版本中,当我们只想修改默认配置中的其中某一个小项的时候,需要对应的组件模块全部粘贴过来,以 elCascaderProps
举例:
1.0.43
之前版本
如果我们想修改 props
中的 label
属性,需要把这段代码整体粘贴过来。
elCascaderProps: {
tagType: 'primary',
clearable: true,
style: {width: '100%'},
props: {
emitPath: true,
multiple: false,
value: 'value',
label: 'name', // 把label 改成 name
children: 'children',
disabled: 'disabled'
}
}
1.0.43
版本开始
当我们配置 merge
属性后就可以这样去修改
比如说我们只想修改,props
中的 label
属性,就不再需要全部粘贴过来,只需要这样组件库就会自行合并到默认配置项中去。
elCascaderProps: {
props: {
label: 'name' // 把label 改成 name
}
}
WARNING
但需注意,开启后只会递归合并 propsConfig
中属性为 object
类型的字段,其他类型无效。
如何配置 merge
我们只需要在 第四步
的操作中增加 merge
属性即可,具体操作如下
import {stylesConfig} from './devecoui.props'
import {fnConfig} from './devecoui.fn'
export const defaultConfig = {
...propsConfig,
...fnConfig,
merge: true, // true代表开启合并,false就还是老版本的方案,默认情况下为false
};