fix: 云端变量记录页面筛选改用DateTimePicker组件,对齐财务页面样式
- 日期选择器从原生input[type=date]改为DateTimePicker组件(带日历和时间选择) - 添加快捷日期按钮:今天/近7天/本月 - 日期范围使用dateRange对象(from/to)替代独立的startDate/endDate - 搜索按钮移除,搜索框回车触发
This commit is contained in:
@@ -13,6 +13,7 @@ import DataTable from '@/components/data-table/data-table.vue'
|
|||||||
import { SelectColumn } from '@/components/data-table/table-columns'
|
import { SelectColumn } from '@/components/data-table/table-columns'
|
||||||
import { generateVueTable } from '@/components/data-table/use-generate-vue-table'
|
import { generateVueTable } from '@/components/data-table/use-generate-vue-table'
|
||||||
import DataTableViewOptions from '@/components/data-table/view-options.vue'
|
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 { BasicPage } from '@/components/global-layout'
|
||||||
import Badge from '@/components/ui/badge/Badge.vue'
|
import Badge from '@/components/ui/badge/Badge.vue'
|
||||||
import Button from '@/components/ui/button/Button.vue'
|
import Button from '@/components/ui/button/Button.vue'
|
||||||
@@ -89,14 +90,36 @@ const records = ref<VariableRecord[]>([])
|
|||||||
const total = ref(0)
|
const total = ref(0)
|
||||||
const page = ref(1)
|
const page = ref(1)
|
||||||
const pageSize = ref(10)
|
const pageSize = ref(10)
|
||||||
const startDate = ref('')
|
const dateRange = ref<{ from: string, to: string }>({ from: '', to: '' })
|
||||||
const endDate = ref('')
|
|
||||||
const searchQuery = ref('')
|
const searchQuery = ref('')
|
||||||
const selectedIds = ref<number[]>([])
|
const selectedIds = ref<number[]>([])
|
||||||
const deleteDialogOpen = ref(false)
|
const deleteDialogOpen = ref(false)
|
||||||
const deleteTargetId = ref<number | null>(null)
|
const deleteTargetId = ref<number | null>(null)
|
||||||
const batchDeleteDialogOpen = ref(false)
|
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 dynamicKeys = computed(() => {
|
||||||
const keys = new Set<string>()
|
const keys = new Set<string>()
|
||||||
records.value.forEach((record) => {
|
records.value.forEach((record) => {
|
||||||
@@ -278,8 +301,8 @@ async function fetchRecords() {
|
|||||||
const params = new URLSearchParams()
|
const params = new URLSearchParams()
|
||||||
params.append('page', String(page.value))
|
params.append('page', String(page.value))
|
||||||
params.append('page_size', String(pageSize.value))
|
params.append('page_size', String(pageSize.value))
|
||||||
if (startDate.value) params.append('start_date', startDate.value)
|
if (dateRange.value.from) params.append('start_date', dateRange.value.from)
|
||||||
if (endDate.value) params.append('end_date', endDate.value)
|
if (dateRange.value.to) params.append('end_date', dateRange.value.to)
|
||||||
if (searchQuery.value) params.append('search', searchQuery.value)
|
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}`)
|
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"
|
@keydown.enter="handleSearch"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<Input
|
<DateTimePicker
|
||||||
v-model="startDate"
|
v-model="dateRange.from"
|
||||||
type="date"
|
:placeholder="t('admin.cloudVariables.records.startDate')"
|
||||||
class="h-8 w-[140px]"
|
class="w-[180px]"
|
||||||
/>
|
/>
|
||||||
<Input
|
<span class="text-muted-foreground text-sm">{{ t('admin.finance.to') }}</span>
|
||||||
v-model="endDate"
|
<DateTimePicker
|
||||||
type="date"
|
v-model="dateRange.to"
|
||||||
class="h-8 w-[140px]"
|
:placeholder="t('admin.cloudVariables.records.endDate')"
|
||||||
|
class="w-[180px]"
|
||||||
/>
|
/>
|
||||||
<Button variant="outline" size="sm" class="h-8" @click="handleSearch">
|
<UiButton variant="ghost" size="sm" @click="setQuickRange('today')">
|
||||||
<Search class="h-4 w-4 mr-1" />
|
{{ t('admin.finance.today') }}
|
||||||
{{ t('admin.cloudVariables.records.search') }}
|
</UiButton>
|
||||||
</Button>
|
<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>
|
</div>
|
||||||
<DataTableViewOptions :table="table" :column-labels="columnLabels" />
|
<DataTableViewOptions :table="table" :column-labels="columnLabels" />
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Reference in New Issue
Block a user