1.0.7 • Published 4 months ago
@weitutech/by-components-v3 v1.0.7
@weitutech/by-components-v3
npm 安装
安装时切换淘宝源比较快
npm config set registry https://registry.npmmirror.com/
npm install @weitutech/by-components
引入
import ByComponentsV3 from "@weitutech/by-components-v3/dist/by-component-v3"
import "@weitutech/by-components-v3/dist/by-component-v3.css"
npm 发布
第一次发布
npm login
发布时需要确保npm的源是官方 npm
npm config set registry https://registry.npmjs.org/
出现功能修改后,需更新package的版本号
清除缓存
npm cache clean --force
发布
npm publish --access public
注意事项
- 本地开发时可采用 npm link 方式关联依赖,package 入口配置为 src/main.js
npm link
组件库中运行 npm link
项目中运行 npm link @weitutech/by-components-v3
关于新组件开发
- 采用 by 为前缀命名方式
- 避免过度耦合,考虑不同项目的复用性,尽量避免组件内调取接口
表单 by-page-search
<template>
<by-page-search
ref="pageSearchRef"
v-model="searchQuery"
:search-form-config="formConfig"
@queryBtnClick="handleQueryClick"
@change="handleChangePageSearch"
>
<template #custom>
我是外部自定义内容
</template>
</by-page-search>
</template>
<script setup>
import { ref } from "vue"
const searchQuery = ref({
// 对应formConfig对象中formItems中的每个field
})
const formConfig = ref({
labelWidth: "80px",
itemStyle: {
padding: "0px 0px"
},
// 需要折叠的字段、不分顺序、写在里面的字段都会被隐藏 --- 仅在isFlexible = true 才可用
flexible: {
// 这里模拟写一些
foldField: ["area_id", "department_id", "team_id", "user_id", "favourite_id", "category_id", "brand_id"]
},
// 是否开启折叠功能
isFlexible: true,
colLayout: {
xs: 24,
sm: 12,
md: 12,
lg: 6,
xl: 4
},
elSize: "default",
// 对应表单单独的显隐权限 可设置isHidden来控制
formItems: [
// 输入框
{
id: 1, // 作为可选的唯一标识,如果field有重复可以设置id作为唯一标识
field: "input",
type: "input",
label: "输入框",
placeholder: "请输入",
labelWidth: "70px",
isHidden: false, // 是否隐藏 false || true
attrs: {
// 其他选项配置、参考Element的输入框配置
}
},
// 密码输入框
{
field: "password",
type: "password",
label: "密码输入框",
placeholder: "请输入密码",
labelWidth: "70px",
attrs: {
// 其他选项配置、参考Element的输入框配置
}
},
// 选择器
{
field: "select",
type: "select",
label: "选择器",
placeholder: "请选择",
labelWidth: "100px",
mode: "", // 可选 "group" || false 默认 不传不用配置 group为分组模式
options: [
// 必须按照label、value的键值对传入
{ label: "全选", value: undefined },
{ label: "选项一", value: "one" },
{ label: "选项二", value: "two" }
],
attrs: {
// 其他配置、参考Element的选择器配置
},
colLayout: {
xs: 24,
sm: 8,
md: 8,
lg: 4,
xl: 4
}
},
// 日期选择器
{
field: "datepicker",
type: "datepicker",
label: "日期选择器",
placeholder: "请选择日期",
labelWidth: "70px",
attrs: {
// 其他选项配置、参考Element的配置
}
},
// 级联
{
field: "cascader",
type: "cascader",
label: "级联",
placeholder: "请选择",
labelWidth: "70px",
options: [], // 于Element保持一致
attrs: {
// 其他选项配置、参考Element的配置
}
},
// 开关
{
field: "switch",
type: "switch",
label: "开关",
labelWidth: "70px",
attrs: {
// 其他选项配置、参考Element的配置
}
},
// 单选框
{
field: "radioGroup",
type: "radioGroup",
label: "单选框",
labelWidth: "70px",
attrs: {
// 其他选项配置、参考Element的配置
},
cGOptions: {
type: "button", // "button" || "checkbox"
options: [] // 按照label、value的键值对传入
}
},
// 多选框
{
field: "checkboxGroup",
type: "checkboxGroup",
label: "多选框",
labelWidth: "70px",
attrs: {
// 其他选项配置、参考Element的配置
},
cGOptions: {
type: "button", // "button" || "checkbox"
options: [] // 按照label、value的键值对传入
}
},
// 文本类型
{
field: "text",
type: "text",
label: "文本类型",
labelWidth: "70px",
defaultValue: "需要显示的文本"
},
// 数字范围输入框
{
field: "pairNumberInput",
type: "pairNumberInput",
label: "数字范围输入框",
labelWidth: "70px",
earliestPlaceholder: "前面输入框的Placeholder",
latestPlaceholder: "后面输入框的Placeholder"
},
{
field: "custom",
type: "custom",
label: "自定义",
labelWidth: "70px",
},
})
// 查询
const handleQueryClick = () => {}
</script>
表格 by-table
通用配置
<template>
<by-table
ref="BTableRef"
:grid-options="gridOptions"
@checkbox-change="({records}) => handleCheckboxChange(records)"
@checkbox-all="({records}) => handleCheckboxChange(records)"
@page-change="handlePageChange"
@sort-change="handleSortChange"
>
<template #switch="{ row }">
<el-switch
v-if="row.id"
size="mini"
:value="row.opt_status==='ENABLE'"
/>
</template>
<template #status_text="{ row }">
<span class="text_pointer_primary">{{ row.status_text }}</span>
</template>
<template #operate>
<el-button type="text">编辑</el-button>
<el-button style="color:red" type="text">删除</el-button>
</template>
</by-table>
</template>
<script setup>
import { ref } from "vue"
/**
* @see https://vxetable.cn/v4/#/grid/api
* @description 其他配置想看vxe-table文档(除 pagerConfig 和 copyFields 外)
* @param { false | Object } pagerConfig 分页配置、如果不想设置分页的话则设置false值即可、如果为对象的话则只接受pageSize、currentPage、total字段
* @param { Array } copyFields 需要用户点击单元格复制的字段标识数组集合
*/
const gridOptions = ref({
height: 700,
pagerConfig: {
// 默认每页大小
pageSize: 15,
// 当前页码
currentPage: 1,
// 总条数
total: 25
},
checkboxConfig: {
checkMethod: ({ row }) => {
return !!row.id
},
visibleMethod: ({ row }) => {
return !!row.id
}
},
seqConfig: {
seqMethod: ({ row, rowIndex }) => {
return row.id ? rowIndex : "汇总"
}
},
copyFields: ["status_text"],
// 默认显示的排序
sortConfig: {
defaultSort: {
// 默认消耗倒序
field: "cost", order: "desc"
}
},
customColumnConfig: { // 自定义列
showCustomColumn: true, // 是否显示自定义列
infoMethod: getCustomTableList, // 回显用的接口
infoMethodParams: {}, // 回显用的接口参数
submitMethod: setCustomTableList, // 保存用的接口
submitMethodParams: {}, // 保存用的接口参数
slots: ["source_material_count"] // 需要使用插槽的字段集合
},
columns: [
{ type: "checkbox", width: 50, fixed: "left" },
{ type: "seq", width: 50, fixed: "left", title: "序号" },
{ field: "switch", title: "开关", width: 70, fixed: "left", slots: { default: "switch" }},
{ field: "status_text", title: "状态", width: 70, fixed: "left", slots: { default: "status_text" }},
{ field: "cost", title: "消耗", width: 70 },
{ field: "operate", title: "操作", width: 70, fixed: "left", slots: { default: "operate" }}
],
data: []
})
// 多选回调
const handleCheckboxChange = (records) => {
console.log(records, "records")
},
// 排序回调
const handleSortChange = (context) => {
this.searchQuery.order = `${context.field} ${context.order}`
// 以下执行列表接口.....
},
// 分页回调
const handlePageChange = ({ page, limit }) => {
this.gridOptions.pagerConfig.currentPage = page
this.gridOptions.pagerConfig.pageSize = limit
// 以下执行列表接口.....
}
</script>
自定义列支持多级表头
<template>
<by-table
:grid-options="gridOptions"
@setColumn="handleSetColumn"
@setGroupColumn="handleSetColumn"
>
</by-table>
</template>
<script setup>
import { ref } from "vue"
const gridOptions = ref({
border: true,
stripe: true,
resizable: true,
height: 500,
// 非自定义列的情况下的多级表头配置方式
columns: [
{ type: 'seq', width: 50 },
{
title: '基本信息',
children: [
{ field: 'name', title: 'Name' },
{
title: '其他信息',
children: [
{ field: 'nickname', title: 'Nickname' },
{ field: 'age', title: 'Age', sortable: true }
]
},
{ field: 'sex', title: 'Sex' }
]
},
{ field: 'address', title: 'Address', sortable: true, showOverflow: true }
],
})
// setColumn 返回只有一级的表头
// setGroupColumn 返回多级表头数据
const handleSetColumn = (columns) => {
this.gridOptions.columns = [
{ type: "checkbox", width: 50, fixed: "left" },
{ type: "seq", width: 50, fixed: "left", title: "序号" },
...columns,
{ title: "操作", width: 80, fixed: "right", slots: { default: "operate" }}
]
},
</script>
1.0.7
4 months ago
1.0.6
5 months ago
1.0.5
5 months ago
1.0.3
5 months ago
1.0.2-beta
5 months ago
1.0.51
5 months ago
1.0.55
5 months ago
1.0.53
5 months ago
1.0.52
5 months ago
1.0.2
5 months ago
1.0.1
6 months ago
1.0.0
6 months ago
0.1.37-beta
6 months ago
0.1.33-beta
6 months ago
0.1.7-beta
6 months ago
0.1.38-beta
6 months ago
0.1.3-beta
6 months ago
0.1.35-beta
6 months ago
0.1.32-beta
6 months ago
0.1.71-beta
6 months ago
0.1.6-beta
6 months ago
0.1.51-beta
6 months ago
0.1.39-beta
6 months ago
0.1.36-beta
6 months ago
0.1.2-beta
6 months ago
0.1.31-beta
6 months ago
0.1.5-beta
6 months ago
0.0.3
6 months ago
0.0.2
6 months ago
0.1.1-beta
6 months ago
0.0.9
6 months ago
0.0.8
6 months ago
0.0.5
6 months ago
0.0.7
6 months ago
0.0.6
6 months ago
0.0.1
6 months ago