第二弹来了,不知道有多少人是看过我的第一篇文章的,今天本来是没想更新的,但是现在项目正在验收期准备上线,闲着还不如来发发文。虽然这两天可能会高产,下一次高产就不知道是什么时候了。话不多说,先上图。

上面就是效果图了,基于vue3+element-plus觉得还行的可以继续看下去
src\components\MTable\index.vue
src\components\MTable\uses\useTable.ts
这个文件其实就是一些自定义样式,不想分开写的也可以写在一起
import { ref } from 'vue';
export default function useTable() {
const defaultHeaderRowStyle = ref({
borderRadius: '4px 4px 0px 0px',
backgroundColor: '#F8F8F8',
padding: '0',
height: '54px',
lineHeight: '54px',
});
const defaultHeaderCellStyle = ref({
backgroundColor: '#F8F8F8',
color: '#282828',
fontSize: '14px',
padding: '0',
height: '54px',
});
const defaultCellStyle = ref({
color: '#323233',
fontSize: '14px',
lineHeight: '20px',
});
return {
defaultHeaderRowStyle,
defaultHeaderCellStyle,
defaultCellStyle,
};
}
src\components\MTable\uses\usePagination.ts
这里是关于分页的处理
import { computed } from 'vue';
export default function usePagination(emit:any, pagination:any) {
const paginationProps = computed(() => {
const paginationVal = pagination.value
return {
background: true,
layout: 'prev, pager, next, sizes, jumper',
currentPage: paginationVal.page,
pageSize: paginationVal.size,
...paginationVal,
}
});
const handleSizeChange = (pageSize:number | string) => {
emit('update:pagination', {
...pagination.value,
size: pageSize,
});
};
const handleCurrentChange = (currentPage:number | string) => {
emit('update:pagination', {
...pagination.value,
page: currentPage,
});
};
return {
paginationProps,
handleSizeChange,
handleCurrentChange,
};
}
关于组件的源码其实就这些了,下面简单写个使用示例
自定义成员列xxxxxx
预览
删除
再次发送
以上只是简单的示例,如果结合我上一篇文章,那么整个列表页面,除了表格顶部那些个操作按钮,就全部都是数据驱动了,至于按钮那一块的封装,过于简单,并不准备放出来,如果需要的话可以留言。
还是老样子,除了那几个固定的key必须,其他都不是必须的,并且支持全部table的属性,目前的缺陷是无法自定义表格header,这个目前还没有好的解决方案。总体来说够用了,那种有header定制的也不多,或者整个项目都差不多,可以直接写在组件里面
这一期写到这里也就差不多了,有什么意见建议的欢迎提出。