Skip to content

framework-ui

基于 ElementPlus 封装的 vue3 组件库

安装

bash
pnpm add @magustek/framework-ui

使用

ts
// main.ts
import MgUi from '@magustek/framework-ui'

import '@magustek/framework-ui/dist/style.css'

app.use(MgUi)

useSvg

一个方法,将 svg 字符串转化为一个 vue svg 组件

  • 使用示例
vue
<template>
  <MySvg></MySvg>
</template>

<script lang="ts" setup>
import { useSvg } from '@magustek/framework-ui'
import svg from './mysvg.svg?raw'

const MySvg = useSvg(svg)
</script>

useMgIcon

一个方法,返回一个 MgIcon 组件

  • 使用示例
参数说明
iconsvg-xxx | font-xxx | string | Component
config{color: string, size:string|number }
vue
<template>
	<el-button :icon="useMgIcon('icon-xxx')" />
	<el-button :icon="useMgIcon('svg-xxx')" />
	<el-button :icon="useMgIcon(Edit), { color:red, size: 24 }" />
</template>

<script lang="ts" setup>
import { useMgIcon } from '@magustek/framework-ui'
import { Edit } from @magustek/icon-svg
</script>

MgIcon

图标组件

  • 属性
属性名类型说明默认值
sizenumber | string图标大小16
colorstring图标颜色
namesvg-xxx | font-xxxsvg 图标或者字体图标
iconstring | Componenticon 组件
  • 插槽
插槽名说明默认值
default默认插槽,传递默认插槽时,name 和 icon 属性不生效16
  • 使用示例
vue
<emplate>
  <MgIcon name="svg-edit" color="red"></MgIcon>
  <MgIcon :icon="Edit"></MgIcon>
  <MgIcon size="24">
    <Edit></Edit>
  </MgIcon>
</emplate>

MgBackWrap 已弃用

返回页面容器, 参考 framework-biz-uiMgBackWrap 组件

MgCropper

图片裁切

  • 属性
属性名类型说明
sourcestring图片地址
visibleboolean是否显示
titlestring标题
configCropperConfig裁切配置
cancelButtonTextstring取消按钮文字
confirmButtonTextstring确定按钮文字
  • 事件
事件名回调参数说明
confirm(blob)裁切后的图片二进制数据
  • CropperConfig
ts
type CropperConfig = {
  outputSize?: number // 裁剪生成图片的质量 0.1 ~ 1
  outputType?: 'jpeg' | 'png' | 'webp' // 裁剪生成图片的格式 jpg (jpg 需要传入jpeg) jpeg, png, webp
  info?: boolean // 显示裁剪框的大小信息 true true | false
  canScale?: boolean // 图片是否允许滚轮缩放 true true | false
  autoCrop?: boolean // 是否默认生成截图框 false true | false
  autoCropWidth?: number // 默认生成截图框宽度 容器的 80% 0 ~ max
  autoCropHeight?: number // 默认生成截图框高度 容器的 80% 0 ~ max
  fixed?: boolean // 是否开启截图框宽高固定比例  false  true, false
  fixedNumber?: [number, number] // 截图框的宽高比例  [1, 1]  [ 宽度 , 高度 ]
  full?: boolean // 是否输出原图比例的截图  false  true, false
  fixedBox?: boolean // 固定截图框大小  不允许改变  false
  canMove?: boolean // 上传图片是否可以移动  true  true, false
  canMoveBox?: boolean // 截图框能否拖动  true  true, false
  original?: boolean // 上传图片按照原始比例渲染  false  true, false
  centerBox?: boolean // 截图框是否被限制在图片里面  false  true, false
  high?: boolean // 是否按照设备的dpr 输出等比例图片  true  true, false
  infoTrue?: boolean // true 为展示真实输出图片宽高 false 展示看到的截图框宽高  false  true, false
  maxImgSize?: number // 限制图片最大宽度和高度  2000  0 ~ max
  enlarge?: number // 图片根据截图框输出比例倍数  1  0 ~ max(建议不要太大,不然会卡死)
  mode?: 'contain' | 'cover' | '100%' | 'auto' // 图片默认渲染方式 contain  contain | cover | 100% | auto
}
  • 使用示例
vue
<template>
  <MgCropper :source="source" :visible="visible" :config="config" @confirm="onConfirm"></MgCropper>
</template>

<script lang="ts" setup>
const source = ref('')
const visible = ref(false)
const config = ref({ })

const onConfirm = (blob) => {
  console.log(blob)
}
</script>

MgCropper 组件函数式用法

ts
import { useCopper } from '@magustek/framework-ui'

const { crop } = useCropper()

crop(url, title, config).then(blob => {
  conosole.log(blob)
})

MgIconPicker

图标选择器

  • 属性
属性名类型说明
modelValue/v-modelstring选择的图标
titlestring弹窗标题
  • 插槽
插槽名说明默认值
default默认插槽,自定义默认展示效果
  • 使用示例
vue
<template>
  <MgIconPicker title="图标选择" v-model="icon"></MgIconPicker>
</template>

<script lang="ts" setup>
const icon = ref('')
</script>

MgPaging

  • 属性

所有 el-pagination 属性 + 扩展属性

扩展属性

属性名类型说明默认值
showTipboolean是否显示分页信息true
  • 事件

支持所有 el-pagination 事件,根据 element-plus 官方文档
如果要监听 current-pagepage-size 的改变, 建议使用 v-model, size-changecurrent-change 在以后的版本中将会被删除

事件名回调参数说明
change(currentPage: number, pageSize: number)currentPage 或者 pageSize 改变时触发
  • 使用示例
vue
<template>
  <MgPaging
    v-model:current-page="currentPage"
    v-model:page-size="pageSize"
    :show-tip="showTip"
    :total="total"
  />
</template>

<script lang="ts" setup>
const currentPage = ref(1)
const pageSize = ref(100)
const showTip = ref(true)
const total = ref(1000)
</script>

MgTable

表格组件 + 分页组件

  • 属性

所有 el-table 属性 + MgPaging 属性

属性名类型说明默认值
page-size/v-model:page-sizenumber分页器每页数量20
current-page/v-model:current-pagenumber分页器当前页数1

el-table 官方文档

  • 扩展事件
事件名回调参数说明
paging-change(currentPage: number, pageSize: number)分页改变时触发
  • 使用示例
vue
<template>
  <mg-table
    ref="mgTableRef"
    :data="tableData"
    :total="1000"
    v-model:page-size="pageSize"
    v-model:current-page="currentPage"
    @paging-change="onPagingChange"
  >
  </mg-table>
</template>

<script lang="ts" setup>
const tableData = ref([])
const pageSize = ref(100)
const currentPage = ref(1)

const onPagingChange = (page: number, size: number) => {
  console.log('onPagingChange', page, size, currentPage.value, pageSize.value)
}
</script>

MgToolbar

工具栏组件,默认自带 新增批量删除 按钮

  • 属性
属性名类型说明默认值
selectLengthnumber选中的条数,为 0 或者不传时会禁用默认的批量删除按钮
  • 插槽
插槽名说明默认值
default默认插槽,传递默认插槽会覆盖默认的 新增批量删除新增 批量删除
  • 事件
事件名回调参数说明
event-handle('add' | 'batchDelete')不传递默认插槽时,内置按钮的事件
  • 使用示例
vue
<template>
  <MgToolbar>
    <el-button>新增</el-button>
    <el-button>批量删除</el-button>
  </MgToolbar>
</template>

MgCodeEditor

代码编辑器

  • 属性
属性名类型说明默认值
modelValue/v-modelstring编辑器内容
language'css' | 'javascript' | 'html' | 'sql' | 'json' | 'java'语言模式
theme'vs' | 'vs-dark' | 'hc-black' | 'hc-light'编辑器主题'vs'
readOnlyboolean只读默认false
  • 方法
方法名参数列表说明
getPosition( )获取光标位置
setPosition(pos: { lineNumber: number, column: number })设置光标位置
setPositionValue(value: string)在光标位置插入内容

MgBpmnViewer

流程图查看器

  • 属性
属性名类型说明默认值
contentstring流程图 xml 内容
showGridboolean是否显示背景网格fasle
activeNodestring | string[]当前激活的节点
activeNodeColorstring当前激活节点的颜色red
successNodestring | string[]已经完成的节点
successNodeColorstring已经完成节点的颜色#67c23a
  • 使用示例
vue
<template>
  <MgBpmnViewer :content="content"></MgBpmnViewer>
</template>

<script lang="ts" setup>
const content = ref('')
</script>

MgCascader

级联组件, 基于 el-cascader 封装,支持以字符串形式双向绑定

  • 属性 & 事件 & 插槽

el-cascader

MgTimePicker

时间选择器,基于 el-time-picker 封装,时间范围支持以两个 v-mode 形式绑定 startTime 和 endTime

  • 扩展属性
属性名类型说明默认值
startTime/v-model:startTimestring时间范围选择的开始时间
endTime/v-model:endTimestring时间范围选择的结束时间
  • 使用示例
vue
<template>
  <mg-time-picker
    is-range
    v-model="valueArray"
    v-model:startTime="startTime"
    v-model:endTime="endTime"
  ></mg-time-picker>
</template>

<script lang="ts" setup>
const valueArray = ref([])
const startTime = ref('')
const endTime = ref('')
</script>

MgDatePicker

日期选择器,基于 el-date-picker 封装,日期范围支持以两个 v-mode 形式绑定 startTime 和 endTime

  • 扩展属性
属性名类型说明默认值
startTime/v-model:startTimestring时间范围选择的开始时间
endTime/v-model:endTimestring时间范围选择的结束时间
  • 使用示例
vue
<template>
  <mg-date-picker
    type="daterange"
    v-model="valueArray"
    v-model:startTime="startTime"
    v-model:endTime="endTime"
  ></mg-da-picker>
</template>

<script lang="ts" setup>
const valueArray = ref([])
const startTime = ref('')
const endTime = ref('')
</script>

MgTree

基于 el-tree 封装的树组件

  • 扩展属性
属性名类型说明默认值
isEditbooleanfalse
isNeedReloadboolean
iconstring
iconSpinstring
iconListstring[]根据层级自定义图标[]
magusIconClass(node, data) => string自定义节点图标
magusIconStyle(node, data) => object自定义节点图标样式
nodeIsNeedAddboolean | (node, data) => boolean节点是否显示新增true
nodeIsNeedEditboolean | (node, data) => boolean节点是否显示编辑true
nodeIsNeedDeleteboolean | (node, data) => boolean节点是否显示删除true
isNeedSearchboolean是否显示搜索
highlightboolean是否高亮显示
showLineboolean是否显示树连接线
showLabelLineboolean是否显示节点标签连接线

MgSplit

分割面板

  • 属性
属性名类型说明默认值
optionsobjectsplit 配置项{}
directionhorizontal | vertical分割方向vertical
min-widthstring | number最小宽度200px
min-heightstring | number最小高度200px
gutterstring | number间隙宽度或者高度20px
show-gutterboolean显示间隙true
  • 事件
事件名回调参数说明默认值
onDrag()() => void
onDragStart()() => void
onDragEnd()() => void
  • 使用示例
vue
<template>
  <MgSplit direction="horizontal" min-width="200px">
    <MgSplitPanel>
      <MgSplit direction="vertical" min-height="300px">
        <MgSplitPanel></MgSplitPanel>
        <MgSplitPanel></MgSplitPanel>
      </MgSplit>
    </MgSplitPanel>
    <MgSplitPanel></MgSplitPanel>
  </MgSplit>
</template>

MgAddTemplate

上中下布局模版

  • 插槽
插槽名说明默认值
title标题
append标题附加内容
main主内容区
footer底部区域
  • 使用示例
vue
<template>
  <MgAddTemplate>
    <template #title>title</template>
    <template #main>mian</template>
  </MgAddTemplate>
</template>

MgDialog

弹窗组件,基于 el-dialog 封装

  • 扩展属性
属性名类型说明默认值
normalboolean以 top 值为基准,展示最大高度的弹窗false

MgLayout

基本布局容器

  • 属性
属性名类型说明默认值
asideWidthstring | number侧边栏宽度300px
gap间距各板块之间的间隙16px
  • 插槽
插槽名说明默认值
aside侧边栏
header头部
main主内容区
footer底部区域
vue
<template>
  <MgLayout>
    <template #aside> aside </template>
    <template #header> header </template>
    <template #main>
      <mg-layout :showAside="false">
        <template #header> header </template>
        <template #main>
          <mg-layout>
            <template #aside> aside </template>
            <template #main>
              main
            </template>
          </mg-layout>
        </template>
      </mg-layout>
    </template>
  </MgLayout>
</template>

MgSearch

搜索栏组件

  • 属性
属性名类型说明默认值
labelWidthstring | number标签宽度100
showMoreboolean是否显示更多按钮false
showButtonsboolean是否显示默认搜索按钮true
contentGrowthboolean查询区内容宽度是否撑满false
  • 插槽
插槽名说明默认值
search查询区
buttons自定义按钮,传递该插槽会覆盖默认查询按钮查询 按钮
more自定义更多查询,查询条件过多时,可以将其他查询条件放在此区域
  • 事件
事件名回调参数说明默认值
search(e: Event)默认查询按钮点击事件
  • 使用示例
vue
<template>
  <mg-search :showMore="true" @search="onSearch">
    <template #search>
      <el-row>
        <el-col :span="12">
          <el-form-item label="姓名">
            <el-input v-model="input" placeholder=""> </el-input>
          </el-form-item>
        </el-col>
        <el-col :span="12">
          <el-form-item label="年龄">
            <el-input v-model="input" placeholder=""> </el-input>
          </el-form-item>
        </el-col>
      </el-row>
    </template>
    <template #more>
      <el-row>
        <el-col :span="12">
          <el-form-item label="更多">
            <el-input v-model="input" placeholder=""> </el-input>
          </el-form-item>
        </el-col>
        <el-col :span="12">
          <el-form-item label="更多">
            <el-input v-model="input" placeholder=""> </el-input>
          </el-form-item>
        </el-col>
      </el-row>
    </template>
  </mg-search>
</template>

<script lang="ts" setup>
const onSearch = () => {
  console.log('查询')
}
</script>

MgTabs

表格组件,基于 el-tabs 封装,支持原生的 el-tabs

  • 扩展属性
属性名类型说明默认值
headerHeightstring | numberheader 高度40px
tabPosition'left' | 'right' | 'top' | 'bottom'标签栏位置'left'
tabItemPosition'left' | 'right'标签项位置'left'
showActiveBarboolean显示激活项指示器false
activeBarPosition'top' | bottom激活项指示器位置'top'
activeBarColorstring激活项指示器颜色#000
activeItemBgColorstring激活项背景颜色#fff
headerBgColorstring标签栏头部颜色#f5f7fa
gapstring间距
  • 扩展插槽
插槽名说明默认值
header标签栏 header,除 tab 以外
  • 使用示例
vue
<template>
  <MgTabs
    header-height="58px"
    type=""
    tab-position="top"
    tab-item-position="right"
    :show-active-bar="true"
    active-bar-position="top"
    active-bar-color="#000"
    active-item-bg-color="#f6f6f6"
    header-bg-color="#fff"
    gap="16px"
  >
    <!-- 这里可以使用原生的 el-tab-pane,也可以使用 mg-tab-pane -->
    <el-tab-pane></el-tab-pane>
    <mg-tab-pane></mg-tab-pane>
  </MgTabs>
</template>

MgTabButton

标签按钮组件

  • 属性
属性名类型说明默认值
modelValue/v-modelstring双向绑定激活标签项
spannumber1-24,左栏所占比例12
defaultActivestring默认激活标签的
heightstring标签栏高度60px
  • 插槽
插槽名说明子标签
title标题插槽
buttons标签按钮插槽指定为 MgTabButtonItem
  • 事件
事件名回调参数说明默认值
tabClick(name: string)tab 项点击事件

MgTabButtonItem

MgTabButton 组件 buttons 插槽的子标签

  • 属性
属性名类型说明
titlestring标题
namestring标签唯一值,当 MgTabButton 没有传递 modelValuedefaultActive 时,则默认与当前路由的路径匹配激活
  • 插槽
插槽名说明子标签
default标题插槽, 自定义 title
  • 使用示例
vue
<template>
  <MgTabButton :span="12" @tab-click="onTabClick">
    <template #buttons>
      <MgTabButtonItem title="1" name="/components/a"></MgTabButtonItem>
      <MgTabButtonItem name="/components/b">2</MgTabButtonItem>
      <MgTabButtonItem name="/components/c">3</MgTabButtonItem>
    </template>
  </MgTabButton>
</template>

<script lang="ts" setup>
const onTabClick = (name) => {
  console.log('onTabClick', name)
}
</script>

MgFormulaEditor

公式/条件编辑器

  • 属性
属性名类型说明默认值
modelValue/v-modelobject双向绑定表达式的 ast
modelStr/v-model:model-strstring双向绑定表达式的字符串
fieldOptions{ label: string, value: string }自定义字段
hideFunctionboolean是否显示函数false
hideFieldboolean是否显示字段false
  • 使用示例
vue
<template>
  <MgFormulaEditor v-model="modelValue" v-model:model-str="modelStr">
  </MgFormulaEditor>
</template>

<script lang="ts" setup>
const modelValue = ref({})
const modelStr = ref('')
</script>

MgEsign

手写签名

  • 属性
属性名类型说明默认值
widthstring | number画布宽度800
heightstring | number画布高度300
lineWidthnumber线宽4
lineColorstring线条颜色#000000
bgColorstring背景颜色
isCropboolean是否需要裁剪false
isClearBgColorboolean是否清除背景颜色true
formatstring输出图片格式image/png
qualitynumber图片质量 0.1 ~ 11
  • 方法
方法名参数说明
reset()重置画布
generate({format:string, quality: number }): Promise<string>生成base64图片
  • 使用示例
vue
<template>
  <MgEsign ref="mgEsignRef">
  </MgEsign>
</template>

<script lang="ts" setup>
const mgEsignRef = ref()

mgEsignRef.value?
  .generate({format: 'image/png', quality: 1 })
  .then(base64 => {
    console.log(base64)
  })
</script>