当前位置: 首页 > article >正文

封装一个搜索区域 SearchForm.vue组件

父组件

<template><div><SearchForm:form-items="searchItems":initial-values="initialValues"@search="handleSearch"@reset="handleReset"><!-- 自定义插槽内容 --><template #custom-slot="{ form }"><el-inputv-model="form.customField"placeholder="自定义字段"></el-input></template><!-- 额外操作按钮 --><template #extra-actions><el-button type="warning" @click="handleExport">导出</el-button></template></SearchForm><!-- 其他页面内容 --></div>
</template><script>import SearchForm from '@/views/largeScreen/productionBusiness/components/searchForm.vue'export default {name: 'WorkOrderDetailList',components: { SearchForm },data() {return {initialValues: {name: '默认值',status: '1'},searchItems: [{label: '姓名',prop: 'name',type: 'input',placeholder: '请输入姓名'},{label: '状态',prop: 'status',type: 'select',options: [{ label: '启用', value: '1' },{ label: '禁用', value: '0' }]},{label: '创建日期',prop: 'createTime',type: 'date',dateType: 'daterange',valueFormat: 'yyyy-MM-dd'},{label: '自定义字段',prop: 'customField',type: 'slot',slotName: 'custom-slot'}]}},methods: {handleSearch(params) {console.log('搜索参数:', params)// 调用API获取数据},handleReset() {console.log('表单已重置')},handleExport() {console.log('导出操作')}}}
</script>

子组件

<template><div><el-formref="searchFormRef":model="formModel":inline="true":label-width="labelWidth"class="search-form"@submit.prevent="handleSearch"><!-- 动态渲染搜索表单项 --><template v-for="(item, index) in formItems"><!-- 输入框 --><el-form-item:key="index"v-if="item.type === 'input' || !item.type":label="item.label":prop="item.prop"><el-inputv-model="formModel[item.prop]":placeholder="item.placeholder || `请输入${item.label}`"clearable@keyup.enter="handleSearch"/></el-form-item><!-- 选择器 --><el-form-itemv-else-if="item.type === 'select'":label="item.label":prop="item.prop"><el-selectv-model="formModel[item.prop]":placeholder="item.placeholder || `请选择${item.label}`"clearablefilterablestyle="width: 100%"><el-optionv-for="opt in item.options":key="opt.value":label="opt.label":value="opt.value"/></el-select></el-form-item><!-- 日期选择器 --><el-form-itemv-else-if="item.type === 'date'":label="item.label":prop="item.prop"><el-date-pickerv-model="formModel[item.prop]":type="item.dateType || 'date'":placeholder="item.placeholder || `请选择${item.label}`":value-format="item.valueFormat || 'yyyy-MM-dd'"clearable/></el-form-item><!-- 日期范围选择器 --><el-form-itemv-else-if="item.type === 'daterange'":label="item.label":prop="item.prop"><el-date-pickerv-model="formModel[item.prop]"type="daterange":start-placeholder="item.startPlaceholder || '开始日期'":end-placeholder="item.endPlaceholder || '结束日期'":value-format="item.valueFormat || 'yyyy-MM-dd'"clearable/></el-form-item><!-- 自定义插槽 --><el-form-itemv-else-if="item.type === 'slot'":label="item.label":prop="item.prop"><slot :name="item.slotName" :form="formModel"></slot></el-form-item></template><!-- 操作按钮区域 --><el-form-item class="search-form-actions"><el-button type="primary" @click="handleSearch">搜索</el-button><el-button @click="handleReset">重置</el-button><slot name="extra-actions"></slot></el-form-item></el-form></div>
</template><script>export default {name: 'SearchForm',props: {// 表单配置项formItems: {type: Array,required: true,validator: (value) => {return value.every((item) => {return item.prop && item.label})}},// 初始值initialValues: {type: Object,default: () => ({})},// 标签宽度labelWidth: {type: String,default: '100px'}},data() {return {formModel: {}}},watch: {initialValues: {immediate: true,handler(val) {this.initFormModel(val)}}},methods: {// 初始化表单数据initFormModel(initialValues) {const defaultModel = {}this.formItems.forEach((item) => {defaultModel[item.prop] = initialValues[item.prop] ?? null})this.formModel = defaultModel},// 搜索事件handleSearch() {this.$emit('search', this.formModel)},// 重置表单handleReset() {this.$refs.searchFormRef.resetFields()this.$emit('reset')},// 获取表单数据getFormData() {return { ...this.formModel }},// 设置表单数据setFormData(data) {Object.keys(data).forEach((key) => {if (this.formModel.hasOwnProperty(key)) {this.formModel[key] = data[key]}})}}
}
</script><style lang="scss" scoped>
.search-form {margin-bottom: 20px;padding: 20px;background: #f5f7fa;border-radius: 4px;&-actions {float: right;margin-right: 0;}
}
</style>

 

 

相关文章:

封装一个搜索区域 SearchForm.vue组件

父组件 <template><div><SearchForm:form-items"searchItems":initial-values"initialValues"search"handleSearch"reset"handleReset"><!-- 自定义插槽内容 --><template #custom-slot"{ form }&qu…...

《ADVANCING MATHEMATICAL REASONING IN LAN- GUAGE MODELS》全文阅读

《ADVANCING MATHEMATICAL REASONING IN LAN- GUAGE MODELS: THE IMPACT OF PROBLEM-SOLVING DATA, DATA SYNTHESIS METHODS, AND TRAINING STAGES》全文阅读 提升语言模型中的数学推理能力&#xff1a;问题求解数据、数据合成方法及训练阶段的影响 \begin{abstract} 数学推…...

Day56 | 99. 恢复二叉搜索树、103. 二叉树的锯齿形层序遍历、109. 有序链表转换二叉搜索树、113. 路径总和 II

99. 恢复二叉搜索树 题目链接&#xff1a;99. 恢复二叉搜索树 - 力扣&#xff08;LeetCode&#xff09; 题目难度&#xff1a;中等 代码&#xff1a; class Solution {public void recoverTree(TreeNode root) {List<TreeNode> listnew ArrayList<>();dfs(root,…...

GPT - GPT(Generative Pre-trained Transformer)模型框架

本节代码主要为实现了一个简化版的 GPT&#xff08;Generative Pre-trained Transformer&#xff09;模型。GPT 是一种基于 Transformer 架构的语言生成模型&#xff0c;主要用于生成自然语言文本。 1. 模型结构 初始化部分 class GPT(nn.Module):def __init__(self, vocab…...

前端加密的几种方式

前端加密的几种方式 一、对称加密原理‌常用算法代码示例&#xff08;AES&#xff09;适用场景‌ 二、非对称加密原理‌常用算法‌代码示例&#xff08;RSA)‌适用场景‌ 三、哈希函数‌原理‌常用算法‌‌代码示例&#xff08;SHA-256&#xff09;适用场景‌ 四、Base64 编码原…...

贪心算法:部分背包问题深度解析

简介&#xff1a; 该Java代码基于贪心算法实现了分数背包问题的求解&#xff0c;核心通过单位价值降序排序和分阶段装入策略实现最优解。首先对Product数组执行双重循环冒泡排序&#xff0c;按wm(价值/重量比)从高到低重新排列物品&#xff1b;随后分两阶段装入&#xff1a;循环…...

连接器电镀层的作用与性能

连接器电镀层的作用与性能&#xff1a; 镀金 金具有很高的化学稳定性&#xff0c;只溶于王水&#xff0c;不溶于其它酸&#xff0c;金镀层耐蚀性强&#xff0c;导电性好&#xff0c;易于焊接&#xff0c;耐高温&#xff0c;硬金具有一定的耐磨性。 对钢、铜、银及其合金基体而…...

神经网络如何表示数据

神经网络是如何工作的&#xff1f;这是一个让新手和专家都感到困惑的问题。麻省理工学院计算机科学和人工智能实验室&#xff08;CSAIL&#xff09;的一个团队表示&#xff0c;理解这些表示&#xff0c;以及它们如何为神经网络从数据中学习的方式提供信息&#xff0c;对于提高深…...

【双指针】和为 s 的两个数字(easy)

和为 s 的两个数字&#xff08;easy&#xff09; 题⽬描述&#xff1a;解法⼀&#xff08;暴⼒解法&#xff0c;会超时&#xff09;&#xff1a;解法⼆&#xff08;双指针 - 对撞指针&#xff09;&#xff1a;算法思路&#xff1a;C 算法代码Java 算法代码&#xff1a; 题⽬链接…...

.net core 工作流介绍

WikeFlow2.0介绍 WikeFlow官网&#xff1a;http://www.wikesoft.com WikeFlow学习版演示地址&#xff1a;http://workflow.wikesoft.com WikeFlow学习版源代码下载&#xff1a;WorkFlow: 多数据库支持&#xff0c;同时支持&#xff1a;SQLServer&#xff0c;Mysql&#xff0…...

nginx自编译重现gzip和chunked的现象

前言 最近做项目&#xff0c;发现一个比较好玩的事&#xff0c;nginx的module gzip模式默认支持1KB压缩&#xff0c;和chunked返回&#xff0c;本来现在的很多框架都很完善了&#xff0c;但是&#xff0c;一些新语言框架或者一些老旧框架会不能完整支持chunked&#xff0c;导致…...

jspm企业采购管理系统的设计与实现(源码+lw+部署文档+讲解),源码可白嫖!

摘要 相比于以前的传统企业采购手工管理方式&#xff0c;智能化的管理方式可以大幅降低企业采购管理的运营人员成本&#xff0c;实现了企业采购管理的标准化、制度化、程序化的管理&#xff0c;有效地防止了物资信息、物资入库、出库等的随意管理&#xff0c;提高了信息的处理…...

iOS应用开发指南

开发一款iOS应用是一个系统化的过程&#xff0c;涵盖从环境搭建、界面设计、编码实现到测试发布的各个环节。以下是一份面向初学者的iOS移动应用开发指南&#xff0c;帮助你从零开始构建自己的App。 一、准备工作&#xff1a;开发环境与工具 必备设备 Mac电脑&#xff1a;iO…...

Go之defer关键字:优雅的资源管理与执行控制

在Go语言中&#xff0c;defer关键字是处理资源释放、错误恢复和代码逻辑清理的利器。它看似简单&#xff0c;却隐藏着许多设计哲学和底层机制。本文将深入剖析defer的执行原理、使用场景和常见陷阱&#xff0c;助你掌握这一关键特性。 一、defer基础&#xff1a;延迟执行的本质…...

现代测试自动化框架教程:Behave接口测试与Airtest移动端UI自动化

前言 我发现每天还是陆陆续续有人在看我之前写的自动化框架搭建的文档&#xff1b;即使很早就有新的框架&#xff0c;更好的选择出来了&#xff1b;所以特别写了这一篇目前大厂也在使用的&#xff1b;日活400w有实际落地的自动化测试架构方案&#xff1b; 随着测试技术…...

优化运营、降低成本、提高服务质量的智慧物流开源了

智慧物流视频监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒&#xff0c;省去繁琐重复的适配流程&#xff0c;实现芯片、算法、应用的全流程组合&#xff0c;从而大大减少企业级应用约95%的开发成本可通过边缘计算技术…...

使用Lombok的@Slf4j和idea构建:找不到log符号-解决

问题&#xff1a;在使用Lombok的Slf4j构建项目时提示如下内容&#xff1a; MvcConfiguration.java:26:9 java: cannot find symbol symbol: variable log location: class cn.edu.wynu.mrcinerec.mrserver.config.WebMvcConfiguration查了网上的方法都是改配置 但是使用Googl…...

陕化之光(原创)

当城市在和周公化合 陕化的工装已与朝霞发生反应 工人先锋号已然吹响 陕化工人游走在工作的床层 钢铁森林间穿梭的身影 是沉默的催化剂 让冰冷的方程式 绽放出最活跃的分子温度 扳手与阀门对话时 塔林正在记录 关于电流与压力的学习笔记 每一次精确的调控 都是舞台上…...

redis 内存中放哪些数据?

在 Java 开发中,Redis 作为高性能内存数据库,通常用于存储高频访问、低延迟要求、短期有效或需要原子操作的数据。以下是 Redis 内存中常见的数据类型及对应的使用场景,适合面试回答: 1. 缓存数据(高频访问,降低数据库压力) 用户会话(Session):存储用户登录状态、临时…...

【Python爬虫】简单案例介绍1

目录 三、Python爬虫的简单案例 3.1 网页分析 单页 三、Python爬虫的简单案例 本节以科普中国网站为例。 3.1 网页分析 单页 在运用 Python 进行爬虫开发时&#xff0c;一套严谨且有序的流程是确保数据获取高效、准确的关键。首先&#xff0c;深入分析单个页面的页面结构…...

LLM-as-Judge真的更偏好AI输出?

论文标题 Do LLM Evaluators Prefer Themselves for a Reason? 论文地址 https://arxiv.org/pdf/2504.03846 代码地址 https://github.com/wlchen0206/llm-sp 作者背景 弗吉尼亚大学&#xff0c;乔治华盛顿大学 实践建议 在将LLM部署为评估器之前&#xff0c;应严格评…...

【软考-架构】13.3、架构复用-DSSA-ABSD

✨资料&文章更新✨ GitHub地址&#xff1a;https://github.com/tyronczt/system_architect 文章目录 1、软件架构复用2、特定领域软件架构DSSADSSA的三个基本活动参与DSSA的四种角色人员建立DSSA的过程三层次模型 考试真题第一题第二题 3、基于架构的软件开发ABSD的软件开发…...

色温插值计算借鉴

色温插值计算方法借鉴&#xff1a; 摘至&#xff1a;Understanding the in-camera rendering pipeline & the role of AI and deep learning...

git合并分支原理

Git合并的原理是基于三方合并&#xff08;three-way merge&#xff09;算法&#xff0c;它通过比较三个快照来合并不同分支上的更改。这三个快照包括两个要合并的分支的最新提交和它们的共同祖先提交。合并过程并不是简单地按照提交时间来进行&#xff0c;而是通过比较这些快照…...

SnailJob:分布式环境设计的任务调度与重试平台!

背景 近日挖掘到一款名为“SnailJob”的分布式重试开源项目,它旨在解决微服务架构中常见的重试问题。在微服务大行其道的今天&#xff0c;我们经常需要对某个数据请求进行多次尝试。然而&#xff0c;当遇到网络不稳定、外部服务更新或下游服务负载过高等情况时&#xff0c;请求…...

网络安全-Http\Https协议和Bp抓包

1. http协议&#xff0c;有请求必有相应&#xff0c; 请求协议&#xff0c; 响应协议&#xff1b; 2. 密码学加密机制及常用算法和常用名称说明&#xff1a; 算法 密钥 明文数据 密文&#xff1b; 加密算法分类和常用算法&#xff1a; 加密算法可以归结为三大类&#xff…...

爱普生FC1610AN5G手机中替代传统晶振的理想之选

在 5G 技术引领的通信新时代&#xff0c;手机性能面临前所未有的挑战与机遇。从高速数据传输到多任务高效处理&#xff0c;从长时间续航到紧凑轻薄设计&#xff0c;每一项提升都离不开内部精密组件的协同优化。晶振&#xff0c;作为为手机各系统提供稳定时钟信号的关键元件&…...

质粒已被全面解析

随着微生物研究的不断深入和耐药性问题的日益加剧&#xff0c;了解质粒对开发抗菌策略及生物技术应用意义重大。但现有质粒数据库缺乏细致注释并且工具存在不足。近期&#xff0c;香港城市大学李帅成课题组在Nucleic Acids Research期刊发表研究成果&#xff0c;推出全面注释质…...

实验二.单按键控制LED

1.实验任务 如图4.1所示:在P0.0端口上接一个发光二极管L1,按键按一下灯亮,在按一下灯灭。 2.电路原理图 3.系统板上硬件连线 把“单片机系统”区域中的P0端口用导线连接到“八路发光二极管指示模块”区域中的L1端口上。 4.程序设计内容...

编程语言到mysql ‘\‘到数量关系

在 MySQL 的模糊查询中&#xff0c;反斜杠 \ 的转义规则需要根据 转义层级 和 SQL 模式 来确定。以下是详细说明及示例&#xff1a; 一、默认模式下&#xff08;未启用 NO_BACKSLASH_ESCAPES&#xff09; 1. 规则说明 反斜杠转义&#xff1a;\ 是 MySQL 的默认转义字符。 转义…...