一个查询功能居然被你玩出了花!(三)

简介: 上次是表单控件,这次是查询控件,不要弄混了哦。

7

 实现方式  

我们以文本类的查询为例进行介绍,我们先做一个查询方式的组件,然后做一个文本的查询子控件。


查询方式

<template>
<el-dropdown @command="handleCommand">
<span class="el-dropdown-link">
{{kindName}}<i
class=" el-icon--right"
:class="{'el-icon-arrow-down': isUp, 'el-icon-arrow-up': !isUp}">i>
span>
<template #dropdown>
<el-dropdown-menu>
<el-dropdown-item
v-for="kindId in findKind"
:key="'s_kind_'+ kindId"
:command="kindId"
>
{{findKindList[kindId].name}}
el-dropdown-item>
el-dropdown-menu>
template>
el-dropdown>
template>


使用 el-dropdown 做一个选择列表。


import { defineComponent, ref } from'vue'
import { findKindList } from'/nf-control-web'
// 查询方式的 select
exportdefault defineComponent({
name: 'el-find-kind',
props: {
// 返回选择的查询方式
modelValue: [Number],
// 需要显示的查询方式
findKind: {
type: Array,
default: () => { return [411] }
}
},
emits: ['update:modelValue', 'change'],
setup (props, context) {
const kindName = ref(findKindList[props.modelValue].name)
const handleCommand = (command) => {
kindName.value = findKindList[command].name
context.emit('update:modelValue', command)
context.emit('change', command)
}
return {
isUp,
kindName,
findKindList,
handleCommand
}
}
})

查询子控件

<template>
<div style="float:left;width:65px;text-align:center;">
<find-kind
v-model="findChoiceKind"
:findKind="findKind"
@change="myChange"
/>
div>
<div :style="{width: (150 * colCount - 10 ) + 'px'}" style="float:left;">
<div style="float:left;" :style="{width: (150 * colCount - 40 ) + 'px'}">
<component
:is="ctlList[controlType]"
v-model="findText"
v-bind="$attrs"
:delay="delay"
:colName="colName"
@myChange="myChange">
component>
div>
div>
template>


放置查询方式和查询用的组件。


import { defineComponent } from'vue'
// 引入查询子控件的管理类
import { findItemManage } from'/nf-control-web'
// 查询方式的控件
import selectFindKind from'./s-findkind.vue'
// 异步组件,引入表单子控件
import { formItemToFindItem } from'../nf-el-find-item/map-el-find-item.js'
/*
* 查询子控件,文本类
* * 单行文本
* * 多行文本
* * ulr、电话、邮箱等
*/
exportdefault defineComponent({
name: 'el-find-item-text',
inheritAttrs: false,
props: {
controlId: Number, // 控件ID
controlType: Number, // 控件类型
colName: String, // 字段名称
modelValue: [Array, String], // 查询结果,数组形式
colCount: { // 占用空间
type: Number,
default: 1
},
findKind: { // 查询方式
type: Array, // , 407, 408
default: () => { return [403, 401, 402, 404, 405, 406] }
},
delay: { // 防抖
type: Number,
default: 600
}
},
components: {
'find-kind': selectFindKind
},
emits: ['update:modelValue', 'my-change'],
setup (props, context) {
// 表单子控件 to 查询子控件 的 字典
const ctlList = formItemToFindItem
const {
findChoiceKind, // 选择的查询方式
findText, // 一个关键字查询
mySubmit
} = findItemManage(props, context)
// 设置默认查询方式
findChoiceKind.value = props.findKind[0]
// 提交查询结果
const myChange = () => {
// 一个关键字查询
mySubmit(findText.value)
}
return {
ctlList, // 控件字典,用于加载具体的控件
findChoiceKind, // 查询方式
findText, // 一个查询关键字
myChange // 触发提交事件
}
}
})


设置需要的属性,比如具体的查询方式、防抖时间间隔等。因为文本查询比较简单,所以只需要简单的提交查询条件即可。


查询控件

<template>
<el-card class="box-card">
<el-scrollbar>
<div class="flex-content" style="min-width:400px;">
<el-form
inline
label-position="right"
:model="findItemModel"
ref="formControl"
class="demo-form-expand"
label-width="1px"
size="mini"
>
<el-form-item style="width:100px">
<el-dropdown size="small">
<el-button type="primary">
快捷查询<i class="el-icon-arrow-down el-icon--right">i>
el-button>
<template #dropdown>
<el-dropdown-menu>
<el-dropdown-item
@click="quickClick(0)"
>
快捷查询
el-dropdown-item>
<el-dropdown-item
v-for="(item, key, index) in customer"
:key="'quick_' + index"
@click="quickClick(key)"
>
{{item.title}}
el-dropdown-item>
el-dropdown-menu>
template>
el-dropdown>
el-form-item>
<el-form-item
v-for="(ctrId, index) in arrQuickFind"
:key="'find_quick_'+index"
style="border:1px solid #cfe1f3;min-height:33px;"
:style="{width: ( 160 * getCtrMeta(ctrId).colCount + 80) + 'px'}"
>
<template v-if="getCtrMeta(ctrId).controlType === 1">
<slot :name="ctrId">父组件没有设置插槽slot>
template>
<template v-else>
<component
:is="ctlList[getCtrMeta(ctrId).controlType]"
v-model="findItemModel[ctrId]"
v-bind="getCtrMeta(ctrId)"
@myChange="mySubmit">
component>
template>
el-form-item>
<el-form-item style="width:60px">
<el-button type="primary" round @click="moreOpen">更多el-button>
el-form-item>
el-form>
div>
el-scrollbar>
el-card>
<findmore
:allFind="allFind"
:reload="reload"
:itemMeta="itemMeta"
:findKind="findKind"
:moreFind="moreFind"
v-model:isShow="isShow"
/>
template>


这里是快捷查询,更多查询做成了单独的组件,这样可以让模板代码简洁一点,不至于太乱。


/**
* @function div 格式的查询控件
* @description 可以依据 json 动态生成查询控件
* @returns {*} Vue 组件,查询控件
*/
exportdefault {
name: 'el-find-div',
components: {
findmore
},
props: {
...findProps
},
setup (props, context) {
// 控件字典
const ctlList = findItemListKey
// 依据ID获取组件的meta,因为 model 不支持[]嵌套
const getCtrMeta = (id) => {
return props.itemMeta[id] || {}
}
const {
moreFind, // 接收更多查询 更多查询里面子控件的事件
isShow, // 抽屉是否打开
arrQuickFind, // 快捷栏的数组
findItemModel, // 查询子控件的model
moreOpen, // 点击更多,清空快捷
quickClick, // 个性化方案的单击事件
mySubmit // 查询子控件的事件
} = findManage(props, context)
return {
isShow, // 抽屉是否打开
moreFind, // 接收更多查询
arrQuickFind, // 快捷栏的数组
ctlList, // 子控件字典
resetForm, // 重置表单
formControl, // 获取表单的dom
getCtrMeta, // 返回子控件的meta
findItemModel, // 查询子控件的model
moreOpen, // 点击更多,清空快捷
quickClick, // 个性化方案的单击事件
mySubmit
}
}
}


代码比较多,这里是 setup 部分,主要负责代码函数的整合。减少代码混乱的程度。


目录
打赏
0
0
0
0
6
分享
相关文章
【阅读】一周翻过《构建之法》,笔记整理
🚩 前言 我的阅读方式 我拿到这本书挺久了,之前已经零散地看过一部分,最近一周集中地花了一些时间,将整本书看过了一遍。看得比较粗略,正如“好读书,不求甚解”(我甚至没有去看书中提到的那些参考资料)。
72 0
|
8月前
|
ACL 2024:大模型性能掺水严重?北大交出答卷:交互评估+动态出题,死记硬背也没用
【7月更文挑战第8天】北大研究团队推出KIEval框架,针对大语言模型(LLMs)的性能评估进行创新。KIEval采用互动评估和动态出题,通过多轮基于知识的对话测试模型理解和应用能力,旨在减少数据污染影响,挑战死记硬背的评估。然而,该方法可能增加计算需求,且评估结果可能受主观因素影响,不适用于所有类型LLMs。[论文链接:](https://arxiv.org/abs/2402.15043)**
142 24
太爽了!这12个前端库,帮我在工作中赢得了不少摸鱼时间!!
太爽了!这12个前端库,帮我在工作中赢得了不少摸鱼时间!!
|
10月前
|
【错题集-编程题】主持人调度(一)(排序)
【错题集-编程题】主持人调度(一)(排序)
|
10月前
|
工作四年,关于过滤敏感词,我准备这样干
工作四年,关于过滤敏感词,我准备这样干
261 0
正确认识及掌握时间的用法
时间是一个相对地区而言的概念,因此有一个基准地区,就是本初子午线穿过的地区。了解世界时间相关的概念可以更好地协调全球人们的活动,便于跨越不同地区的时差。比如按照UTC时区划分算,洛杉矶和北京 之间的时间差异是16个小时, 但是一旦洛杉矶启用了夏令时两者之间的时间差异只有15个小时,神奇吗?
426 0
正确认识及掌握时间的用法
从非诚勿扰看数据索引,优化代码小妙招
从非诚勿扰看数据索引,优化代码小妙招
170 0
如何设计一个支持一亿用户的系统,心中有方案遇事不慌!
如何设计一个支持一亿用户的系统,心中有方案遇事不慌!
271 0
如何设计一个支持一亿用户的系统,心中有方案遇事不慌!
一个查询功能居然被你玩出了花!(二)
上次是表单控件,这次是查询控件,不要弄混了哦。
一个查询功能居然被你玩出了花!(二)
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等