# monose-component-vue-antd
**Repository Path**: monoseven/monose-component-vue-antd
## Basic Information
- **Project Name**: monose-component-vue-antd
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2025-03-05
- **Last Updated**: 2025-08-26
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
Vue3 ElementPlus 二次封装组件库
# 快速开始
1. 安装
```bash
npm install monose-component-vue
```
2. 引入样式
```ts
import 'monose-component-vue/dist/monose-component-vue.css';
```
3. 手动引入组件
```vue
```
3. 自动引入组件
目前已支持使用 `unplugin-vue-components/vite` 自动引入组件
```ts
import { MonoseVueResolver } from 'monose-component-vue/provider';
import VueComponents from 'unplugin-vue-components/vite';
export default defineConfig({
plugins: [
VueComponents({
resolvers: [MonoseVueResolver],
}),
],
});
```
# 组件
## 目录
- [MTable](#mtable)
- [MForm](#mform)
- [MSearchForm](#msearchform)
- [MFormCollection](#mformcollection)
- [MSelectWithAll](#mselectwithall)
- [MIcon](#micon)
- [MIconPicker](#miconpicker)
- [MPagination](#mpagination)
- [MDialog](#mdialog)
- [MDrawer](#mdrawer)
- [MDivider](#mdivider)
- [MDescriptions](#mdescriptions)
- [MCard](#mcard)
- [MCardBox](#mcardbox)
## MTable
#### 属性
| 属性名 | 说明 | 类型 | 默认值 |
| ------------------- | --------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------- | ------ |
| column | 必填,表头的列表,数组每一项包含每一列的表头和这一列的配置 | [ITableColumn](#itablecolumn)[] | - |
| action | 可选, 表格每一行末尾的操作列的按钮 | [ITableAction](#itableaction)[] | - |
| menu | 可在表格组件右上角添加一些图标按钮,拓展功能 | [ITableMenu](#itablemenu)[] | - |
| v-model:data | 表格组件绑定的数据 | Record\[] | - |
| loading | 控制表格组件是否处于loading加载动画状态(分页区和菜单区不受影响) | boolean | false |
| fitHeight | 开启后,表格可根据外层盒子自适应高度 | boolean | false |
| showIndex | 开启后,左侧会添加序号列 | boolean | false |
| showSelection | 开启后,左侧会添加多选框列 | boolean | false |
| showFilter | 开启后,菜单区域会增加配置按钮,可调节列的展示和顺序 | boolean | false |
| total | 可选,传入此参数后,表格下方会出现分页组件,同时用于配置数据的总条数 | number | - |
| v-model:pageSize | 每页显示条目个数 | number | - |
| v-model:currentPage | 当前页数 | number | - |
| config | 所有 ElementPlus 中位于 `ElTable` 中的属性均可添加到此位置 | Partial\> | - |
| columuConfig | 所有 ElementPlus 中位于 `ElTableColumn` 中的属性均可添加到此位置
会添加到所有的 column 标签上,例如:配置所有列内容居中时会很方便。 | Partial\> | - |
| pageConfig | 所有 ElementPlus 中位于 `ElPagination` 中的属性均可添加到此位置 | Partial\ | - |
#### 事件
| 名称 | 说明 | 类型 | 参数说明 |
| ----------- | ------------------------------------------------------ | ----------------------------------- | ------------------------------------------------------------------------------------- |
| menuClick | 配置了属性 menu 后,点击菜单栏按钮时触发的事件 | (method: string) => void | method: 点击菜单按钮的标识,在属性 menu - prop 中配置 |
| actionClick | 配置了属性 action 后,点击了表格每行右侧操作按钮时触发 | (method: string, data: any) => void | method: 点击按钮的标识,在属性 action - prop 中配置
data: 点击的按钮所在行的数据 |
| pageChange | 配置了属性 total 后,分页组件发生改变时都会触发 | (pageInfo: IPageInfo) => void | pageInfo: 分页相关信息,包含了当前页数、每页大小 |
#### 插槽
| 插槽名 | 说明 | 类型 |
| --------------- | ------------------------ | ----------- |
| [prop] + Header | 自定义表头的内容 | {data: any} |
| [prop] | 自定义列的内容 | {data: any} |
| actionHeader | 自定义操作列表头的内容 | {data: any} |
| empty | 当数据为空时自定义的内容 | - |
说明: [prop] 为 属性 column - prop 配置的值
## MForm
#### 属性
| 属性名 | 说明 | 类型 | 默认值 |
| ------------ | --------------------------------------------------------------------------------------------------------------------- | --------------------- | ------ |
| list | 用于配置表单组件中的各个元素,例如输入框、选择框等表单控件 | [IForm](#iform)[] | - |
| v-model:data | 表单中数据的绑定值,是一个对象,key 为属性 list 中配置的 prop,value 为数据值 | Record\ | - |
| rules | 表单校验规则 | FormRules | - |
| column | 用于控制表单在页面中分为几列 | number | 1 |
| config | 所有 ElementPlus 中位于 `ElForm` 中的属性均可添加到此位置 | Partial\ | - |
| isEdit | 控制表单组件的编辑和展示的两种状态,false时,直接展示绑定的值,且可通过属性 list - option - textRender 进行自定义显示 | boolean | true |
| theme | 表单主题,不同的样式 | enum | - |
#### 事件
无自定义事件,可直接在标签添加 `ElForm` 上的事件
#### 插槽
| 插槽名 | 说明 | 类型 |
| ------ | ------------------------ | ----------- |
| [prop] | 自定义该 FormItem 的内容 | {data: any} |
说明: [prop] 为 属性 list - prop 配置的值,且仅在 list - type 配置的值为 `slot` 时生效
## MSearchForm
#### 属性
| 属性名 | 说明 | 类型 | 默认值 |
| ------------ | ------------------------------------------------------------------------------------- | --------------------------------- | ------ |
| list | 用于配置表单组件中的各个元素,例如输入框、选择框等表单控件。 | [IForm](#iform)[] | - |
| v-model:data | 表单中数据的绑定值,是一个对象,key 为属性 list 中配置的 prop,value 为数据值。 | Record\ | - |
| rules | 表单校验规则。 | FormRules | - |
| action | 用于控制组件右侧中的功能按钮。 | [ISearchAction](#isearchaction)[] | - |
| config | 所有 ElementPlus 中位于 `ElForm` 中的属性均可添加到此位置 | Partial\ | - |
| showSearch | 是否显示搜索按钮;true 时,点击按钮才会触发搜索操作;false 时,修改表单自动触发搜索。 | boolean | false |
| showReset | 是否显示重置按钮。 | boolean | false |
#### 事件
| 名称 | 说明 | 类型 | 参数说明 |
| ----------- | ------------------------------------------------------ | ---------------------------------------- | ------------------------------------------------------------------------------------------------------------------- |
| search | 搜索组件触发的搜索操作时的事件 | (data: any, prop?: string) => void | data: 搜索组件绑定的值,同属性中的data;
prop: 当前触发搜索操作的表单控件(仅属性 showSearch 为 false 时可用) |
| actionClick | 点击了搜索组件右侧操作按钮(由属性 action 配置)时触发 | (method: string, params?: any[]) => void | method: 点击按钮的标识,在属性 action - prop 中配置
params: 其他参数,例如按钮为上传、下拉按钮时,所携带的参数 |
#### 插槽
| 插槽名 | 说明 | 类型 |
| ------ | ------------------------ | ----------- |
| [prop] | 自定义该 FormItem 的内容 | {data: any} |
说明: [prop] 为 属性 list - prop 配置的值,且仅在 list - type 配置的值为 `slot` 时生效
## MFormCollection
可以像使用 MForm 组件那样使用单个表单控件
#### 属性
| 属性名 | 说明 | 类型 | 默认值 |
| ------------ | ------------------------------------------------------ | --------------- | ------ |
| item | 用于配置表单组件的元素,例如输入框、选择框等表单控件。 | [IForm](#iform) | - |
| v-model:data | 表单中数据的绑定值 | any | - |
#### 事件
| 名称 | 说明 | 类型 | 参数说明 |
| -------------- | ------------------------------------------------------- | ---------- | -------- |
| change | 发生变化时触发 | () => void | 无参数 |
| changeDebounce | 发生变化时触发,且具有防抖功能,例如 input 时会比较有用 | () => void | 无参数 |
## MSelectWithAll
在多选框的左侧添加了全选的选择框,可用于由全选需求的表单(MForm、MSearchForm 已经支持,可配置 list 属性中的 type 为 'selectWithAll' 即可使用)
#### 属性
| 属性名 | 说明 | 类型 | 默认值 |
| ------------ | ------------------------ | ------------------------------- | ------ |
| v-model:data | 多选框中数据的绑定值 | any[] | - |
| selectOption | 用于配置选择框的选项列表 | [ISelectOption](#iselectoption) | - |
#### 事件
| 名称 | 说明 | 类型 | 参数说明 |
| ------ | -------------------- | -------------------- | ----------------------- |
| change | 选择框状态变化时触发 | (value: any) => void | value: 已选择的数据的值 |
## MIcon
结合了 iconfont,使用时和 `@element-plus/icons-vue` 中的组件特性一致,即:也可以通过 `ElIcon` 标签包裹,用于修改图标的大小、颜色等
#### 属性
| 属性名 | 说明 | 类型 | 默认值 |
| ------ | -------------------------------------- | ------ | ------ |
| icon | 引入的 iconfont 中的 symbol 模式的标识 | string | - |
## MIconPicker
图标选择器,可像`ElInput`一样作为表单使用,支持展示 iconfont 的所有图标,并进行选择。
#### 属性
| 属性名 | 说明 | 类型 | 默认值 |
| ------------ | ---------------------------------------------------------- | -------------------------------------------------------------------------- | ------ |
| v-model:icon | 当前选择的图标的标识 | string | - |
| iconList | 图标列表,可使用 iconfont 项目中 iconfont.json文件中的数据 | {css_prefix_text: string; glyphs: { font_class: string; icon_id: any }[];} | - |
## MPagination
无特殊功能,固定了分页组件的格式
#### 属性
| 属性名 | 说明 | 类型 | 默认值 |
| ------------------- | --------------------------------------------------------------- | ------------------------- | ------ |
| total | 用于配置数据的总条数 | number | - |
| v-model:pageSize | 每页显示条目个数 | number | - |
| v-model:currentPage | 当前页数 | number | - |
| config | 所有 ElementPlus 中位于 `ElPagination` 中的属性均可添加到此位置 | Partial\ | - |
#### 事件
| 名称 | 说明 | 类型 | 参数说明 |
| ---------- | ----------------------------------------------- | ----------------------------- | ------------------------------------------------ |
| pageChange | 配置了属性 total 后,分页组件发生改变时都会触发 | (pageInfo: IPageInfo) => void | pageInfo: 分页相关信息,包含了当前页数、每页大小 |
## MDialog
封装了带有取消、确定按钮的弹窗
#### 属性
| 属性名 | 说明 | 类型 | 默认值 |
| -------------- | ----------------------------------------------------------- | --------------------- | ------ |
| v-model:isShow | 控制弹窗的显示和隐藏 | boolean | - |
| hideAction | 隐藏 确定和取消按钮 | boolean | false |
| config | 所有 ElementPlus 中位于 `ElDialog` 中的属性均可添加到此位置 | Partial\ | - |
#### 事件
| 名称 | 说明 | 类型 | 参数说明 |
| ------ | ------------------ | ---------- | -------- |
| cancel | 点击取消按钮时触发 | () => void | - |
| submit | 点击确定按钮时触发 | () => void | - |
#### 插槽
| 插槽名 | 说明 | 类型 |
| ------ | ------------------------------------------------------ | ---- |
| header | 对话框标题的内容;会替换标题部分,但不会移除关闭按钮。 | - |
| footer | Dialog 按钮操作区的内容 | - |
说明: [prop] 为 属性 list - prop 配置的值,且仅在 list - type 配置的值为 `slot` 时生效
## MDrawer
封装了带有取消、确定按钮的抽屉
#### 属性
| 属性名 | 说明 | 类型 | 默认值 |
| -------------- | ----------------------------------------------------------- | --------------------- | ------ |
| v-model:isShow | 控制抽屉的显示和隐藏 | boolean | - |
| hideAction | 隐藏 确定和取消按钮 | boolean | false |
| config | 所有 ElementPlus 中位于 `ElDrawer` 中的属性均可添加到此位置 | Partial\ | - |
#### 事件
| 名称 | 说明 | 类型 | 参数说明 |
| ------ | ------------------ | ---------- | -------- |
| cancel | 点击取消按钮时触发 | () => void | - |
| submit | 点击确定按钮时触发 | () => void | - |
#### 插槽
| 插槽名 | 说明 | 类型 |
| ------ | ------------------------------------------------------ | ---- |
| header | 对话框标题的内容;会替换标题部分,但不会移除关闭按钮。 | - |
| footer | Drawer 按钮操作区的内容 | - |
## MDivider
#### 属性
| 属性名 | 说明 | 类型 | 默认值 |
| ------ | ------------------------------------------- | -------------- | ------ |
| type | 分割线的方向 | 'row' \| 'col' | 'row' |
| margin | 分割线的边距,值与 css 中的 margin 属性相同 | string | - |
## MDescriptions
配置式使用 `ElDescriptions` 组件
#### 属性
| 属性名 | 说明 | 类型 | 默认值 |
| ------ | ----------------------------------------------------------------- | --------------------------------- | ------ |
| list | 列表 | [IDescriptions](#idescriptions)[] | - |
| data | 数据 | boolean | - |
| column | 分多少列 | number | 3 |
| config | 所有 ElementPlus 中位于 `ElDescriptions` 中的属性均可添加到此位置 | Record\ | - |
#### 事件
| 名称 | 说明 | 类型 | 参数说明 |
| ------ | ------------------ | ---------- | -------- |
| data | 点击取消按钮时触发 | () => void | - |
| submit | 点击确定按钮时触发 | () => void | - |
#### 插槽
| 插槽名 | 说明 | 类型 |
| ----------------- | ----------------- | ----------- |
| [prop] + '-label' | 自定义label的内容 | {data: any} |
| [prop] | 自定义value的内容 | {data: any} |
说明: [prop] 为 属性 list - prop 配置的值
## MCard
无特殊功能,封装了固定样式的卡片
#### 属性
| 属性名 | 说明 | 类型 | 默认值 |
| ------ | --------------------------------------------------------- | ------------------- | ------ |
| config | 所有 ElementPlus 中位于 `ElCard` 中的属性均可添加到此位置 | Partial\ | - |
#### 插槽
| 插槽名 | 说明 | 类型 |
| ------ | -------------------- | ---- |
| header | 自定义卡片标题的内容 | - |
## MCardBox
用于放置 `MCard` 等其他元素的盒子,可自动在所有内部盒子之间添加10px的边距
#### 属性
| 属性名 | 说明 | 类型 | 默认值 |
| --------- | -------------- | ----------------- | -------- |
| direction | 盒子的排列方向 | 'row' \| 'column' | 'column' |
# 数据结构
## ITableColumn
```ts
// 继承了 `TableColumnProps`,可以直接使用 ElTableColumn 上的所有属性
interface ITableColumn extends TableColumnProps {
label: string;
prop: string;
hideColumu?: boolean; // 是否隐藏此列
childHead?: ITableColumn[]; // 可设置二级、三级、...、n级的表头
}
```
## ITableAction
```ts
interface ITableAction {
label: string; // 操作按钮的文字
prop: string; // 操作按钮的标识,在 actionClick 事件中会用到
type?: '' | 'default' | 'text' | 'success' | 'warning' | 'info' | 'primary' | 'danger'; // 操作按钮的颜色
icon?: string | Component; // 操作按钮左侧图标,支持 图标组件 和 iconfont 字符串标识
option?: Partial & { customDisabled?: (row: any) => any }; // 按钮的其他 ElButton 属性,且可以自定义禁用的逻辑
}
```
## ITableMenu
```ts
interface ITableMenu {
label: string; // 菜单按钮名称
prop: string; // 菜单按钮标识,在 menuClick 事件中会用到
icon: string | Component; // 菜单图标,支持 图标组件 和 iconfont 字符串标识
}
```
## IForm
```ts
interface IForm extends Partial {
label: string; // 该 formItem 展示的 label
prop: string; // 该 formItem 的标识符,与 Form 绑定的 data 中的键名一致,同时也是 type 为 'slot' 时的插槽名称
column?: number; // 控制该 formItem 要占据的空间,与 MForm 组件的 column 属性配合使用
type: // 该 formItem 的表单类型
| 'input'
| 'select'
| 'selectWithAll'
| 'switch'
| 'number'
| 'cascader'
| 'treeSelect'
| 'datePicker'
| 'timePicker'
| 'timeSelect'
| 'radioGroup'
| 'rate'
| 'slider'
| 'checkbox'
| 'checkboxGroup'
| 'upload'
| 'text'
| 'slot';
selectOption?: {
// 当 type 为 select、 radioGroup 或 checkboxGroup 时,可配置该属性
label?: string; // 自定义 label 的键名
value?: string; // 自定义 value 的键名
options: Array<{ label?: any; value?: any; disabled?: boolean } & Record>; // 选项的列表
};
option?: Record; // 此属性会根据 type 的值自动匹配相对应的组件属性;
// 例如当 type 为 input 时,option 为所有可 ElInput 上添加的属性,详见 ElementPlus 文档;
// 当 type 是 text 是, option 可配置 textRender 属性,用于自定义展示内容,textRender 属性值为一个方法,方法的参数为该项绑定的值;
// 当 MForm 添加了属性 isEdit 为 false 时,无论 type 值是什么,均可以使用 textRender 自定义显示内容。
}
```
## ISearchAction
```ts
type ISearchAction = ISearchActionButton | ISearchActionDropdown | ISearchActionUpload;
interface ISearchActionBase {
label: string;
prop: string;
option?: Partial;
}
interface ISearchActionButton extends ISearchActionBase {
type: 'button';
}
interface ISearchActionUpload extends ISearchActionBase {
type: 'upload';
uploadOption?: Partial;
}
interface ISearchActionDropdown extends ISearchActionBase {
type: 'dropdown';
dropList: Array<{
prop: string;
label: string;
icon?: string | Component;
disabled?: boolean;
divided?: boolean;
}>;
}
```
## IDescriptions
```ts
interface IDescriptions {
label: string;
prop: string;
span?: number;
width?: string | number;
minWidth?: string | number;
align?: 'left' | 'center' | 'right';
labelAlign?: 'left' | 'center' | 'right';
className?: string;
labelClassName?: string;
}
```
## ISelectOption
```ts
interface ISelectOption {
// 当 type 为 select 和 radioGroup 时,可配置该属性
label?: string; // 自定义 label 的键名
value?: string; // 自定义 value 的键名
options: Array<{ label?: any; value?: any; disabled?: boolean } & Record>; // 选项的列表
}
```