| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169 |
- <template>
- <!-- 搜索框入口 -->
- <view @click="visible = true">
- <wd-search :placeholder="placeholder" hide-cancel disabled />
- </view>
- <!-- 搜索弹窗 -->
- <wd-popup v-model="visible" position="top" @close="visible = false">
- <view class="yd-search-form-container" :style="{ paddingTop: `${getNavbarHeight()}px` }">
- <view class="yd-search-form-item">
- <view class="yd-search-form-label">
- 分类名
- </view>
- <wd-input
- v-model="formData.name"
- placeholder="请输入分类名"
- clearable
- />
- </view>
- <view class="yd-search-form-item">
- <view class="yd-search-form-label">
- 分类标志
- </view>
- <wd-input
- v-model="formData.code"
- placeholder="请输入分类标志"
- clearable
- />
- </view>
- <view class="yd-search-form-item">
- <view class="yd-search-form-label">
- 分类状态
- </view>
- <wd-radio-group v-model="formData.status" shape="button">
- <wd-radio :value="-1">
- 全部
- </wd-radio>
- <wd-radio
- v-for="dict in getIntDictOptions(DICT_TYPE.COMMON_STATUS)"
- :key="dict.value"
- :value="dict.value"
- >
- {{ dict.label }}
- </wd-radio>
- </wd-radio-group>
- </view>
- <view class="yd-search-form-item">
- <view class="yd-search-form-label">
- 创建时间
- </view>
- <view class="yd-search-form-date-range-container">
- <view class="flex-1" @click="visibleCreateTime[0] = true">
- <view class="yd-search-form-date-range-picker">
- {{ formatDate(formData.createTime?.[0]) || '开始日期' }}
- </view>
- </view>
- -
- <view class="flex-1" @click="visibleCreateTime[1] = true">
- <view class="yd-search-form-date-range-picker">
- {{ formatDate(formData.createTime?.[1]) || '结束日期' }}
- </view>
- </view>
- </view>
- <wd-datetime-picker-view v-if="visibleCreateTime[0]" v-model="tempCreateTime[0]" type="date" />
- <view v-if="visibleCreateTime[0]" class="yd-search-form-date-range-actions">
- <wd-button size="small" plain @click="visibleCreateTime[0] = false">
- 取消
- </wd-button>
- <wd-button size="small" type="primary" @click="handleCreateTime0Confirm">
- 确定
- </wd-button>
- </view>
- <wd-datetime-picker-view v-if="visibleCreateTime[1]" v-model="tempCreateTime[1]" type="date" />
- <view v-if="visibleCreateTime[1]" class="yd-search-form-date-range-actions">
- <wd-button size="small" plain @click="visibleCreateTime[1] = false">
- 取消
- </wd-button>
- <wd-button size="small" type="primary" @click="handleCreateTime1Confirm">
- 确定
- </wd-button>
- </view>
- </view>
- <view class="yd-search-form-actions">
- <wd-button class="flex-1" plain @click="handleReset">
- 重置
- </wd-button>
- <wd-button class="flex-1" type="primary" @click="handleSearch">
- 搜索
- </wd-button>
- </view>
- </view>
- </wd-popup>
- </template>
- <script lang="ts" setup>
- import { computed, reactive, ref } from 'vue'
- import { getDictLabel, getIntDictOptions } from '@/hooks/useDict'
- import { getNavbarHeight } from '@/utils'
- import { DICT_TYPE } from '@/utils/constants'
- import { formatDate, formatDateRange } from '@/utils/date'
- const emit = defineEmits<{
- search: [data: Record<string, any>]
- reset: []
- }>()
- const visible = ref(false)
- const formData = reactive({
- name: undefined as string | undefined,
- code: undefined as string | undefined,
- status: -1, // -1 表示全部
- createTime: [undefined, undefined] as [number | undefined, number | undefined],
- })
- // 时间范围选择器状态
- const visibleCreateTime = ref<[boolean, boolean]>([false, false])
- const tempCreateTime = ref<[number, number]>([Date.now(), Date.now()])
- /** 搜索条件 placeholder 拼接 */
- const placeholder = computed(() => {
- const conditions: string[] = []
- if (formData.name) {
- conditions.push(`分类名:${formData.name}`)
- }
- if (formData.code) {
- conditions.push(`分类标志:${formData.code}`)
- }
- if (formData.status !== -1) {
- conditions.push(`状态:${getDictLabel(DICT_TYPE.COMMON_STATUS, formData.status)}`)
- }
- if (formData.createTime?.[0] && formData.createTime?.[1]) {
- conditions.push(`创建时间:${formatDate(formData.createTime[0])}~${formatDate(formData.createTime[1])}`)
- }
- return conditions.length > 0 ? conditions.join(' | ') : '搜索流程分类'
- })
- /** 创建时间[0]确认 */
- function handleCreateTime0Confirm() {
- formData.createTime = [tempCreateTime.value[0], formData.createTime?.[1]]
- visibleCreateTime.value[0] = false
- }
- /** 创建时间[1]确认 */
- function handleCreateTime1Confirm() {
- formData.createTime = [formData.createTime?.[0], tempCreateTime.value[1]]
- visibleCreateTime.value[1] = false
- }
- /** 搜索 */
- function handleSearch() {
- visible.value = false
- emit('search', {
- ...formData,
- status: formData.status === -1 ? undefined : formData.status,
- createTime: formatDateRange(formData.createTime),
- })
- }
- /** 重置 */
- function handleReset() {
- formData.name = undefined
- formData.code = undefined
- formData.status = -1
- formData.createTime = [undefined, undefined]
- visible.value = false
- emit('reset')
- }
- </script>
|