SearchForm.vue 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. <script setup lang="ts">
  2. import { Refresh, Search } from '@element-plus/icons-vue'
  3. import { ElButton, ElCol, ElForm, ElFormItem, ElInput, ElOption, ElRow, ElSelect } from 'element-plus'
  4. import { ref } from 'vue'
  5. export type TSearchParams = {
  6. name: string,
  7. type: number
  8. gender: number|null
  9. }
  10. interface Props {
  11. modelValue: TSearchParams
  12. loading?: boolean
  13. }
  14. interface Emits {
  15. (e: 'update:modelValue', value: TSearchParams): void
  16. (e: 'search'): void
  17. (e: 'reset'): void
  18. }
  19. const props = withDefaults(defineProps<Props>(), {
  20. loading: false,
  21. })
  22. const emit = defineEmits<Emits>()
  23. const formRef = ref()
  24. const searchParams = computed({
  25. get: () => props.modelValue,
  26. set: value => emit('update:modelValue', value),
  27. })
  28. /**
  29. * 搜索
  30. */
  31. function handleSearch() {
  32. emit('search')
  33. }
  34. /**
  35. * 重置
  36. */
  37. function handleReset() {
  38. formRef.value?.resetFields()
  39. emit('reset')
  40. }
  41. function handleClear() {
  42. // 清空后自动触发搜索
  43. handleSearch()
  44. }
  45. </script>
  46. <template>
  47. <ElForm ref="formRef" :model="searchParams" inline label-width="80px">
  48. <ElFormItem label="名称" prop="name" label-width="120" >
  49. <ElInput v-model="searchParams.name" placeholder="请输入" clearable @clear="handleClear" style="width: 120px;" />
  50. </ElFormItem>
  51. <ElFormItem label="性别" prop="gender" label-width="120" >
  52. <ElSelect v-model="searchParams.gender" style="width: 120px;">
  53. <ElOption :value="-1" label="全部">全部</ElOption>
  54. <ElOption :value="1" label="女">女</ElOption>
  55. <ElOption :value="2" label="男">男</ElOption>
  56. </ElSelect>
  57. </ElFormItem>
  58. <ElFormItem label="类型" prop="type" label-width="120" >
  59. <ElSelect v-model="searchParams.type" style="width: 120px;">
  60. <ElOption :value="1" label="系统">系统</ElOption>
  61. <ElOption :value="2" label="系统克隆">系统克隆</ElOption>
  62. <ElOption :value="3" label="用户">用户</ElOption>
  63. </ElSelect>
  64. </ElFormItem>
  65. <ElFormItem >
  66. <ElButton type="primary" :icon="Search" :loading="loading" @click="handleSearch">
  67. 查询
  68. </ElButton>
  69. <ElButton :icon="Refresh" @click="handleReset">
  70. 重置
  71. </ElButton>
  72. </ElFormItem>
  73. </ElForm>
  74. </template>