搜索框业务组件
基础用法
用户姓名:
基础用法
根据配置生成带搜索、重置按钮的搜索框
<template>
<su-search-form
class="vp-raw"
resetBtn
:searchList="searchData"
:searchParam="searchParam"
@search="handleSearch"
@reset="handleReset"
/>
</template>
<script setup lang="ts">
import { reactive } from "vue";
import { message } from 'ant-design-vue'
type obj = {
[key:string] : string | number | string[] | number[]
}
type itemType = {
key: string;
search: string;
value: string | number | string[] | number[];
}
const columns = [
{
key: "username",
title: "用户姓名",
search: "input",
value: ""
},
];
let searchData: itemType[] = columns.filter((item: itemType) => item.search);
let searchParam: obj = reactive({});
// 初始化搜索值
const initSearch = () => {
searchData.forEach((item: itemType) => {
searchParam[item.key] = item.value;
});
};
initSearch();
// 搜索
const handleSearch = () => {
message.success('点击搜索按钮')
}
// 重置
const handleReset = () => {
initSearch()
message.info('点击重置按钮')
}
</script>
多种搜索组件用法
用户姓名:
状态:
多种搜索组件用法
下拉、数字输入、时间选择等
<template>
<su-search-form
class="vp-raw"
resetBtn
:expandSpan="8"
:colspan="8"
:searchList="searchData"
:searchParam="searchParam"
@search="handleSearch"
@reset="handleReset"
/>
</template>
<script setup lang="ts">
import { reactive } from "vue";
import { message } from 'ant-design-vue'
type obj = {
[key:string] : string | number | string[] | number[] | boolean;
}
type itemType = {
key: string;
search: string;
value: string | number | string[] | number[] | boolean;
}
const columns = [
{
key: "username",
title: "用户姓名",
search: "input",
value: "",
colspan: 8,
},
{
key: "status",
title: "状态",
search: "select",
colspan: 8,
value: "",
enum: [
{
label: "在线",
value: 1
},
{
label: "离线",
value: 0
}
]
},
{
key: "checked",
title: "数字",
search: "inputNumber",
value: 0,
colspan: 8,
},
{
key: "time",
title: "日期",
search: "datePicker",
value: "",
colspan: 8,
},
{
key: "timeranger",
title: "日期范围",
search: "dateRangePicker",
value: [],
},
];
let searchData: itemType[] = columns.filter((item: itemType) => item.search);
let searchParam: obj = reactive({});
// 初始化搜索值
const initSearch = () => {
searchData.forEach((item: itemType) => {
searchParam[item.key] = item.value;
});
};
initSearch();
// 搜索
const handleSearch = () => {
console.log(searchParam)
message.success('点击搜索按钮')
}
// 重置
const handleReset = () => {
initSearch()
message.info('点击重置按钮')
}
</script>
动态获取下拉列表数据
状态:
动态获取下拉列表数据
设置api请求动态获取
<template>
<su-search-form
class="vp-raw"
resetBtn
:colspan="8"
:searchList="searchData"
:searchParam="searchParam"
@search="handleSearch"
@reset="handleReset"
/>
</template>
<script setup lang="ts">
import { reactive } from "vue";
import { message } from 'ant-design-vue'
type obj = {
[key:string] : string | number | string[] | number[] | boolean;
}
type itemType = {
key: string;
search: string;
value: string | number | string[] | number[] | boolean;
}
// 模拟请求数据
const getSelectData = () => {
return new Promise((resolve) => {
setTimeout(() => {
resolve({
code: 200,
data: [
{
label: "在线",
value: 1
},
{
label: "离线",
value: 0
}
]
})
},2000)
})
}
const columns = [
{
key: "status",
title: "状态",
search: "select",
value: "",
api: getSelectData
},
];
let searchData: itemType[] = columns.filter((item: itemType) => item.search);
let searchParam: obj = reactive({});
// 初始化搜索值
const initSearch = () => {
searchData.forEach((item: itemType) => {
searchParam[item.key] = item.value;
});
};
initSearch();
// 搜索
const handleSearch = () => {
console.log(searchParam)
message.success('点击搜索按钮')
}
// 重置
const handleReset = () => {
initSearch()
message.info('点击重置按钮')
}
</script>
组件参数配置
参数 | 说明 | 类型 | 示例 |
---|---|---|---|
searchList | 搜索项 | itemType[] | 配置请查看下方SearchList配置项 |
searchParam | 搜索参数 | string、number、string[]、number[]、boolean | 数值需要根据searchList去生成,请查看下方SearchParam生成方法 |
extra | 搜索项 | slot | #extra |
showOtherBtn | 是否在重置按钮左侧添加一个按钮 | boolean | -- |
btnText | 添加按钮的文字内容 | string | -- |
isOpen | 是否全部显示搜索项 | boolean | -- |
回调方法
参数 | 说明 | 类型 | 示例 |
---|---|---|---|
search | 点击搜索按钮 | function | -- |
reset | 点击重置按钮 | function | -- |
add | 点击新增的按钮 | function | -- |
itemChange | 组件值改变时触发的回调 | function | -- |
SearchList配置项
参数 | 说明 | 类型 | 示例 |
---|---|---|---|
name | 组件名称 | string | input 、InputNumber 、select 、timePicker 、 timeRangePicker 、datePicker 、dateRangePicker 、cascader |
key | 组件键值 | string | 唯一的key值 |
title | 组件左侧名称 | string | -- |
value | 组件初始值 | -- | string、number、string[]、number[]、boolean |
enum | select组件搜索项 | array | 下拉列表数据,默认取value、label |
labelName | 自定义枚举文字 | string | 更改下拉数据取值 |
valueName | 自定义枚举值 | string | 更改下拉数据取值 |
api | 动态枚举 | function | 获取接口返回的下拉数据 |
params | 动态获取枚举的参数 | object | {} |
style | 组件左侧文字样式 | string | 设置文字行内样式 |
format | 时间类选项输出的格式 | string | 使用dayjs格式化时间格式:'YYYY MM DD hh:mm:ss' |
min | inputNumber组件最小值 | number | 沿用自antd |
max | inputNumber组件最大值 | number | 沿用自antd |
placeholder | 组件无值时显示的文字 | string | 沿用自antd |
labelCol | 组件左侧文件宽度 | string | 沿用自antd |
labelAlign | 组件左侧文件定位 | string | 沿用自antd |
wrapperCol | 组件宽度 | string | 沿用自antd |
picker | 日期选项样式 | string | 沿用自antd |
SearchParam生成方法
let searchParam: any = reactive({});
// 初始化搜索值
const initSearch = () => {
searchData.forEach((item: itemType) => {
searchParam[item.key] = item.value || '';
});
};
initSearch();