From ff61e815d8127c3633c2eb237731e2a0ba44d614 Mon Sep 17 00:00:00 2001 From: long <452591453@qq.com> Date: Thu, 4 Jun 2026 10:51:35 +0800 Subject: [PATCH] =?UTF-8?q?=E6=97=B6=E9=97=B4=E8=8C=83=E5=9B=B4=E7=AD=9B?= =?UTF-8?q?=E9=80=89=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/components/list-time-filter/index.vue | 91 +++++ admin/src/hooks/useListTimeFilter.ts | 86 +++++ .../consumer/prescription/order_list.vue | 355 ++++++++++++------ .../consumer/prescription/order_list_h5.vue | 64 ++-- .../src/views/finance/account_cost/index.vue | 67 +++- .../views/stats/self_input/account_cost.vue | 69 +++- 6 files changed, 560 insertions(+), 172 deletions(-) create mode 100644 admin/src/components/list-time-filter/index.vue create mode 100644 admin/src/hooks/useListTimeFilter.ts diff --git a/admin/src/components/list-time-filter/index.vue b/admin/src/components/list-time-filter/index.vue new file mode 100644 index 00000000..96eb283a --- /dev/null +++ b/admin/src/components/list-time-filter/index.vue @@ -0,0 +1,91 @@ + + + + + 今天 + 昨天 + 最近7天 + 本月 + 自定义 + + + + + + + + + + 今天 + 昨天 + 最近7天 + 本月 + 自定义 + + + + + + + + + diff --git a/admin/src/hooks/useListTimeFilter.ts b/admin/src/hooks/useListTimeFilter.ts new file mode 100644 index 00000000..dbcb973f --- /dev/null +++ b/admin/src/hooks/useListTimeFilter.ts @@ -0,0 +1,86 @@ +export type ListTimeType = 'today' | 'yesterday' | 'week' | 'month' | 'custom' + +export function formatYmd(d: Date): string { + const y = d.getFullYear() + const m = String(d.getMonth() + 1).padStart(2, '0') + const day = String(d.getDate()).padStart(2, '0') + return `${y}-${m}-${day}` +} + +/** 列表时间筛选:month 为本自然月 1 日~月末 */ +export function resolveListTimeRange(timeType: ListTimeType, dateRange: string[]): [string, string] { + const today = formatYmd(new Date()) + + switch (timeType) { + case 'yesterday': { + const d = new Date() + d.setDate(d.getDate() - 1) + const y = formatYmd(d) + return [y, y] + } + case 'week': { + const end = new Date() + const start = new Date() + start.setDate(start.getDate() - 6) + return [formatYmd(start), formatYmd(end)] + } + case 'month': { + const now = new Date() + const start = new Date(now.getFullYear(), now.getMonth(), 1) + const end = new Date(now.getFullYear(), now.getMonth() + 1, 0) + return [formatYmd(start), formatYmd(end)] + } + case 'custom': { + let start = dateRange[0] || today + let end = dateRange[1] || today + if (start > end) { + ;[start, end] = [end, start] + } + return [start, end] + } + case 'today': + default: + return [today, today] + } +} + +export function useListTimeFilter(defaultType: ListTimeType = 'today') { + const time_type = ref(defaultType) + const dateRange = ref([]) + + const resolve = () => resolveListTimeRange(time_type.value, dateRange.value) + + const handleTimeTypeChange = (onQuery: () => void) => { + if (time_type.value !== 'custom') { + dateRange.value = [] + onQuery() + } + } + + const handleCustomDateChange = (onQuery: () => void) => { + if (dateRange.value.length === 2) { + onQuery() + } + } + + const resetTimeFilter = () => { + time_type.value = defaultType + dateRange.value = [] + } + + const applyCustomRange = (start: string, end: string) => { + if (!start || !end) return + time_type.value = 'custom' + dateRange.value = [start, end] + } + + return { + time_type, + dateRange, + resolve, + handleTimeTypeChange, + handleCustomDateChange, + resetTimeFilter, + applyCustomRange, + } +} diff --git a/admin/src/views/consumer/prescription/order_list.vue b/admin/src/views/consumer/prescription/order_list.vue index 11d569fb..09a29c3d 100644 --- a/admin/src/views/consumer/prescription/order_list.vue +++ b/admin/src/views/consumer/prescription/order_list.vue @@ -8,86 +8,76 @@ --> - - - - 处方审核 - - {{ tab.label }} + + + + 处方审核 + + + {{ tab.label }} + - - 支付单审核 - - {{ tab.label }} + + 支付单审核 + + + {{ tab.label }} + - - 发货状态 - - {{ tab.label }} + + 发货状态 + + + {{ tab.label }} + - - 供货方式 - - {{ tab.label }} + + 供货方式 + + + {{ tab.label }} + - - 快递方式 - - {{ tab.label }} + + 快递方式 + + + {{ tab.label }} + @@ -172,19 +162,18 @@ --> - - - - - + + + - + - + - + - + - + - + - + - - + + - + 查询 重置 { + pager.page = 1 + getLists() +} + +const onTimeTypeChange = () => handleTimeTypeChange(handleQuery) +const onCustomDateChange = () => handleCustomDateChange(handleQuery) + function normalizePrescriptionOrderListQuery(params: Record): Record { const p: Record = { ...params } if (p.prescription_id === '' || p.prescription_id === undefined) { @@ -3331,11 +3340,15 @@ function normalizePrescriptionOrderListQuery(params: Record): R } async function fetchLists(params: Record) { - const p = normalizePrescriptionOrderListQuery({ ...params }) + const [start_time, end_time] = resolveCreateTimeRange() + const p = normalizePrescriptionOrderListQuery({ ...params, start_time, end_time }) return prescriptionOrderLists(p) } -const prescriptionOrderExportParams = computed(() => normalizePrescriptionOrderListQuery({ ...queryParams })) +const prescriptionOrderExportParams = computed(() => { + const [start_time, end_time] = resolveCreateTimeRange() + return normalizePrescriptionOrderListQuery({ ...queryParams, start_time, end_time }) +}) const { pager, getLists, resetPage, resetParams } = usePaging({ fetchFun: fetchLists, @@ -3370,8 +3383,9 @@ function applyRouteQueryToPrescriptionOrderList() { } const st = normDate(q.start_time) const et = normDate(q.end_time) - if (st) queryParams.start_time = st - if (et) queryParams.end_time = et + if (st && et) { + applyCustomRange(st, et) + } const ad = q.assistant_dept_id if (ad !== undefined && ad !== null && String(ad) !== '') { const n = Number(ad) @@ -3462,8 +3476,7 @@ const listStats = computed(() => { scopeHint = '统计口径:本人创建的订单 + 关联处方开方人为本人的订单(含医助代建);与下方筛选项(不含「创建时间」)一致' } - const hasCustomTime = - String(queryParams.start_time || '').trim() !== '' && String(queryParams.end_time || '').trim() !== '' + const hasCustomTime = time_type.value !== 'today' const headPrefix = hasCustomTime ? '区间' : '今日' return { order: n(o), @@ -3536,8 +3549,7 @@ watch( function handleReset() { activeFocusKey.value = '' - queryParams.start_time = '' - queryParams.end_time = '' + resetTimeFilter() queryParams.order_no = '' queryParams.prescription_id = '' queryParams.patient_keyword = '' @@ -6492,6 +6504,121 @@ async function downloadPrescriptionSlipPdf() {