169 lines
5.7 KiB
Vue
169 lines
5.7 KiB
Vue
|
|
<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-radio-group v-model="formData.type" shape="button">
|
||
|
|
<wd-radio :value="-1">
|
||
|
|
全部
|
||
|
|
</wd-radio>
|
||
|
|
<wd-radio v-for="dict in getIntDictOptions(DICT_TYPE.BPM_OA_LEAVE_TYPE)" :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>
|
||
|
|
<wd-radio-group v-model="formData.status" shape="button">
|
||
|
|
<wd-radio :value="-1">
|
||
|
|
全部
|
||
|
|
</wd-radio>
|
||
|
|
<wd-radio v-for="dict in getIntDictOptions(DICT_TYPE.BPM_PROCESS_INSTANCE_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-item">
|
||
|
|
<view class="yd-search-form-label">
|
||
|
|
请假原因
|
||
|
|
</view>
|
||
|
|
<wd-input
|
||
|
|
v-model="formData.reason"
|
||
|
|
placeholder="请输入请假原因"
|
||
|
|
clearable
|
||
|
|
/>
|
||
|
|
</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({
|
||
|
|
type: -1, // -1 表示全部
|
||
|
|
status: -1, // -1 表示全部
|
||
|
|
createTime: [undefined, undefined] as [number | undefined, number | undefined],
|
||
|
|
reason: undefined as string | undefined,
|
||
|
|
})
|
||
|
|
|
||
|
|
/** 搜索条件 placeholder 拼接 */
|
||
|
|
const placeholder = computed(() => {
|
||
|
|
const conditions: string[] = []
|
||
|
|
if (formData.type !== -1) {
|
||
|
|
conditions.push(`类型:${getDictLabel(DICT_TYPE.BPM_OA_LEAVE_TYPE, formData.type)}`)
|
||
|
|
}
|
||
|
|
if (formData.status !== -1) {
|
||
|
|
conditions.push(`状态:${getDictLabel(DICT_TYPE.BPM_PROCESS_INSTANCE_STATUS, formData.status)}`)
|
||
|
|
}
|
||
|
|
if (formData.createTime?.[0] && formData.createTime?.[1]) {
|
||
|
|
conditions.push(`时间:${formatDate(formData.createTime[0])}~${formatDate(formData.createTime[1])}`)
|
||
|
|
}
|
||
|
|
if (formData.reason) {
|
||
|
|
conditions.push(`原因:${formData.reason}`)
|
||
|
|
}
|
||
|
|
return conditions.length > 0 ? conditions.join(' | ') : '搜索请假记录'
|
||
|
|
})
|
||
|
|
|
||
|
|
// 时间选择器状态
|
||
|
|
const visibleCreateTime = ref<[boolean, boolean]>([false, false])
|
||
|
|
const tempCreateTime = ref<[number, number]>([Date.now(), Date.now()])
|
||
|
|
|
||
|
|
/** 创建时间[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', {
|
||
|
|
type: formData.type === -1 ? undefined : formData.type,
|
||
|
|
status: formData.status === -1 ? undefined : formData.status,
|
||
|
|
reason: formData.reason || undefined,
|
||
|
|
createTime: formatDateRange(formData.createTime),
|
||
|
|
})
|
||
|
|
}
|
||
|
|
|
||
|
|
/** 重置 */
|
||
|
|
function handleReset() {
|
||
|
|
formData.type = -1
|
||
|
|
formData.status = -1
|
||
|
|
formData.createTime = [undefined, undefined]
|
||
|
|
formData.reason = undefined
|
||
|
|
visible.value = false
|
||
|
|
emit('reset')
|
||
|
|
}
|
||
|
|
</script>
|