干巴爹兔的博客 干巴爹兔的博客
首页
  • 前端文章

    • JavaScript
    • HTML
    • Vue
  • 学习笔记

    • JavaScript教程
    • React学习笔记
    • Electron学习笔记
  • 开源项目

    • cloud-app-admin
    • 下班了吗Vscode插件
    • Subversion变更单插件
  • Server

    • Django
  • 学习笔记

    • MySQL学习笔记
  • 运维

    • 服务器部署
    • Linux
  • 日常学习

    • 学习方法
关于
收藏
友链
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

干巴爹兔

卑微的前端打工人
首页
  • 前端文章

    • JavaScript
    • HTML
    • Vue
  • 学习笔记

    • JavaScript教程
    • React学习笔记
    • Electron学习笔记
  • 开源项目

    • cloud-app-admin
    • 下班了吗Vscode插件
    • Subversion变更单插件
  • Server

    • Django
  • 学习笔记

    • MySQL学习笔记
  • 运维

    • 服务器部署
    • Linux
  • 日常学习

    • 学习方法
关于
收藏
友链
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • JavaScript文章

  • 学习笔记

  • 开源项目

    • cloud-app-admin
    • could-app-admin前端组件

      • AsyncSelect异步加载下拉组件
      • Card卡片组件
      • Panel展示组件
      • CForm表单组件
      • SearchFilter组件
        • 组件介绍
        • 引入组件
        • 参数配置
        • 类型
        • 代码示例
        • More
      • CTable表格组件
    • 下班了吗Vscode插件

    • Subversion变更单插件

  • HTML

  • Vue

  • 前端
  • 开源项目
  • could-app-admin前端组件
干巴爹兔
2022-09-09
目录

SearchFilter组件

# 组件介绍

这是一个基于c-form封装,使用json数据配置式的搜索组件,支持表单项自动布局,内置多种type,可传入插槽与自定义组件,支持form表单校验与双向绑定v-model

# 引入组件

import { App } from "vue";
import SearchFilter from "./SearchFilter.vue";

export function setupRegisterGlobComp(app: App) {
  app.component("SearchFilter", SearchFilter);
}
1
2
3
4
5
6

# 参数配置

额外参数 类型 必填 说明
options CFormProps 必填 表单核心配置项
searchDisabled Boolean 非必填 是否禁用搜索按钮
resetDisabled Boolean 非必填 是否禁用重置按钮
model(v-model) Object 必填 表单内容双向绑定
loading Boolean 非必填 用于加载
showExpand Boolean 非必填 用于选项过多开启折叠
showReset Boolean 非必填 是否启用重置按钮

# 类型

type CFormChildOptions = Omit<CFormOptions, "rules" | "children">;

type CFormOptions = {
  label: string; // 表单项名称
  name: string; // 数据的key值
  // 预先定义的类型,目前有input、select、inputNumber、timePicker、datePicker、richText
  type?: string; 
  tagName?: string; // 传入组件的名称,会以<component is/>的形式渲染
  props?: any; // 组件的内置属性
  rules?: any; // 用于校验,可参考Element的rules
  scopedSlot?: string; // 用于渲染一个插槽,可查看下方的代码示例
  itemExtra?: any; // 用于form-item其它参数的绑定
  colSpan?: any; // 参照 ElCol 的 属性
  hidden?: boolean; // 是否隐藏
  on?: any; // 用于事件绑定
  children?: CFormChildOptions[]; // 用于将嵌套组件传入
};

interface CFormProps {
  options: CFormOptions[];
  gutter?: number;
  colSpan?: { span: number };
  value: any;
  loading?: boolean;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

# 代码示例

<script setup lang="ts">
const initialValues = {
  title: "",
  content: "",
  type: ""
};

const articleFilterOptions = computed(() => {
  return [
    {
      label: "标题",
      name: "title",
      tagName: "el-input",
      props: {
        placeholder: "请输入标题",
        maxLength: "24"
      }
    },
    {
      label: "内容",
      name: "content",
      tagName: "el-input",
      props: {
        placeholder: "请输入内容",
        maxLength: "24"
      }
    },
    {
      label: "类型",
      name: "type",
      tagName: "async-select",
      props: {
        placeholder: "请选择类型",
        url: "/article/type",
        size: "default",
        style: {
          width: "100%"
        }
      }
    }
    // https://github.com/cloudhao1999/cloud-app-admin/issues/17
    // {
    //   label: t("page.common.design.article.search.type"),
    //   name: "test",
    //   type: "select",
    //   props: {
    //     style: {
    //       width: "100%"
    //     }
    //   },
    //   children: [
    //     {
    //       tagName: "el-option",
    //       props: {
    //         label: "test1",
    //         value: "test1"
    //       }
    //     },
    //     {
    //       tagName: "el-option",
    //       props: {
    //         label: "test2",
    //         value: "test2"
    //       }
    //     }
    //   ]
    // }
  ];
});

const searchParams = ref(initialValues);

const filterOptions = computed(() => {
  return articleFilterOptions.value;
});
const handleSearch = () => {};
const handleReset = () => {};
</script>

<template>
  <div class="relative w-full">
    <div class="p-[8px] absolute w-full">
      <div class="mx-3 mt-5">
        <search-filter
          :model="searchParams"
          :options="filterOptions"
          :show-reset="true"
          @reset="handleReset"
          @search="handleSearch"
        />
      </div>
    </div>
  </div>
</template>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95

search-example1

# More

精力有限(懒),更多的使用方式可以查看源码自行探索,使用上有困难的可以在issue上进行咨询我

编辑 (opens new window)
上次更新: 2022/09/09, 10:26:46
CForm表单组件
CTable表格组件

← CForm表单组件 CTable表格组件→

最近更新
01
使用Vscode开发一个小插件
10-21
02
Vscode插件配置项监听
10-18
03
使用has属性构造必填效果
10-14
更多文章>
Theme by Vdoing | Copyright © 2020-2023 互联网ICP备案: 闽ICP备18027236号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式