fix: 云端变量记录页面筛选改用DateTimePicker组件,对齐财务页面样式

- 日期选择器从原生input[type=date]改为DateTimePicker组件(带日历和时间选择)
- 添加快捷日期按钮:今天/近7天/本月
- 日期范围使用dateRange对象(from/to)替代独立的startDate/endDate
- 搜索按钮移除,搜索框回车触发
This commit is contained in:
2026-05-08 10:10:18 +08:00
parent 29fb448d04
commit c31c7a88bd
@@ -13,6 +13,7 @@ import DataTable from '@/components/data-table/data-table.vue'
import { SelectColumn } from '@/components/data-table/table-columns'
import { generateVueTable } from '@/components/data-table/use-generate-vue-table'
import DataTableViewOptions from '@/components/data-table/view-options.vue'
import DateTimePicker from '@/components/ui/date-picker/DateTimePicker.vue'
import { BasicPage } from '@/components/global-layout'
import Badge from '@/components/ui/badge/Badge.vue'
import Button from '@/components/ui/button/Button.vue'
@@ -89,14 +90,36 @@ const records = ref<VariableRecord[]>([])
const total = ref(0)
const page = ref(1)
const pageSize = ref(10)
const startDate = ref('')
const endDate = ref('')
const dateRange = ref<{ from: string, to: string }>({ from: '', to: '' })
const searchQuery = ref('')
const selectedIds = ref<number[]>([])
const deleteDialogOpen = ref(false)
const deleteTargetId = ref<number | null>(null)
const batchDeleteDialogOpen = ref(false)
function setQuickRange(range: 'today' | 'week' | 'month') {
const now = new Date()
const today = now.toISOString().split('T')[0]
const firstDayOfMonth = new Date(now.getFullYear(), now.getMonth(), 1).toISOString().split('T')[0]
switch (range) {
case 'today':
dateRange.value = { from: `${today}T00:00`, to: `${today}T23:59` }
break
case 'week': {
const weekAgo = new Date(now.getTime() - 7 * 24 * 60 * 60 * 1000)
dateRange.value = {
from: `${weekAgo.toISOString().split('T')[0]}T00:00`,
to: `${today}T23:59`,
}
break
}
case 'month':
dateRange.value = { from: `${firstDayOfMonth}T00:00`, to: `${today}T23:59` }
break
}
}
const dynamicKeys = computed(() => {
const keys = new Set<string>()
records.value.forEach((record) => {
@@ -278,8 +301,8 @@ async function fetchRecords() {
const params = new URLSearchParams()
params.append('page', String(page.value))
params.append('page_size', String(pageSize.value))
if (startDate.value) params.append('start_date', startDate.value)
if (endDate.value) params.append('end_date', endDate.value)
if (dateRange.value.from) params.append('start_date', dateRange.value.from)
if (dateRange.value.to) params.append('end_date', dateRange.value.to)
if (searchQuery.value) params.append('search', searchQuery.value)
const data = await api.get<{ records: VariableRecord[], total: number }>(`/dev/cloud-variables/${variable.value.id}/records?${params}`)
@@ -447,20 +470,26 @@ onMounted(async () => {
@keydown.enter="handleSearch"
/>
</div>
<Input
v-model="startDate"
type="date"
class="h-8 w-[140px]"
<DateTimePicker
v-model="dateRange.from"
:placeholder="t('admin.cloudVariables.records.startDate')"
class="w-[180px]"
/>
<Input
v-model="endDate"
type="date"
class="h-8 w-[140px]"
<span class="text-muted-foreground text-sm">{{ t('admin.finance.to') }}</span>
<DateTimePicker
v-model="dateRange.to"
:placeholder="t('admin.cloudVariables.records.endDate')"
class="w-[180px]"
/>
<Button variant="outline" size="sm" class="h-8" @click="handleSearch">
<Search class="h-4 w-4 mr-1" />
{{ t('admin.cloudVariables.records.search') }}
</Button>
<UiButton variant="ghost" size="sm" @click="setQuickRange('today')">
{{ t('admin.finance.today') }}
</UiButton>
<UiButton variant="ghost" size="sm" @click="setQuickRange('week')">
{{ t('admin.finance.last7Days') }}
</UiButton>
<UiButton variant="ghost" size="sm" @click="setQuickRange('month')">
{{ t('admin.finance.thisMonth') }}
</UiButton>
</div>
<DataTableViewOptions :table="table" :column-labels="columnLabels" />
</div>