From 48ab5d013b4cc1c24cb73ccbecd717e972702778 Mon Sep 17 00:00:00 2001 From: ZhuRui Date: Fri, 28 Aug 2026 15:39:23 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E6=8A=A5=E5=90=8D?= =?UTF-8?q?=E4=BA=BA=E6=95=B0=E7=AD=9B=E9=80=89=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/events/list/index.tsx | 37 +++++++++--------- src/pages/events/list/model/integerInput.ts | 43 --------------------- 2 files changed, 19 insertions(+), 61 deletions(-) delete mode 100644 src/pages/events/list/model/integerInput.ts diff --git a/src/pages/events/list/index.tsx b/src/pages/events/list/index.tsx index e7bed13..368d81a 100644 --- a/src/pages/events/list/index.tsx +++ b/src/pages/events/list/index.tsx @@ -2,6 +2,7 @@ import { defineComponent } from 'vue'; import { Button, Input, + InputNumber, Table, Form, Space, @@ -20,8 +21,6 @@ import { } from './model/useEventListModel'; import { useEventListColumns } from './model/useEventListColumns'; import { getProvinceCityCascaderOptions } from '@/utils/areaData'; -import { toIntegerOnly } from '@/utils/form'; -import { handleIntegerInput, handleIntegerBlur, blockNonDigitKey } from './model/integerInput'; import { useContainerSize } from '@/hooks'; import { usePermissionStore } from '@/stores/permissionStore'; import EventRegulationModal from './components/EventRegulationModal'; @@ -270,15 +269,17 @@ export default defineComponent({ - handleIntegerInput(e, (v) => (filterForm.scBegin = v))} - onKeydown={blockNonDigitKey} - onBlur={(e: Event) => handleIntegerBlur(e, (v) => (filterForm.scBegin = v))} - onUpdate:value={(val: string) => (filterForm.scBegin = toIntegerOnly(val))} + style={{ width: '140px' }} + value={filterForm.scBegin || undefined} + precision={0} + step={0} + min={0} + controls={false} + onUpdate:value={(val: any) => + (filterForm.scBegin = val != null ? String(val) : '') + } onPressEnter={handleSearch} /> - handleIntegerInput(e, (v) => (filterForm.scEnd = v))} - onKeydown={blockNonDigitKey} - onBlur={(e: Event) => handleIntegerBlur(e, (v) => (filterForm.scEnd = v))} - onUpdate:value={(val: string) => (filterForm.scEnd = toIntegerOnly(val))} + style={{ width: '140px' }} + value={filterForm.scEnd || undefined} + precision={0} + step={0} + min={0} + controls={false} + onUpdate:value={(val: any) => (filterForm.scEnd = val != null ? String(val) : '')} onPressEnter={handleSearch} /> diff --git a/src/pages/events/list/model/integerInput.ts b/src/pages/events/list/model/integerInput.ts deleted file mode 100644 index 0147194..0000000 --- a/src/pages/events/list/model/integerInput.ts +++ /dev/null @@ -1,43 +0,0 @@ -/** 报名人数筛选项 — 整数输入处理(页面特有逻辑) */ - -import { toIntegerOnly } from '@/utils/form'; - -/** 整数规范化:去除前导零,如 055 → 55;空值保持为空 */ -function normalizeIntegerString(value: unknown): string { - const digits = toIntegerOnly(value); - if (!digits) return ''; - return String(parseInt(digits, 10)); -} - -/** 整数 Input 事件处理:同步过滤 DOM 值与外部状态 */ -export function handleIntegerInput(e: Event, setter: (value: string) => void): void { - const el = e.target as HTMLInputElement | null; - if (!el) return; - - const next = toIntegerOnly(el.value); - if (el.value !== next) { - el.value = next; - } - setter(next); -} - -/** 整数 Input 失焦处理:规范化数字并同步状态 */ -export function handleIntegerBlur(e: Event, setter: (value: string) => void): void { - const el = e.target as HTMLInputElement | null; - if (!el) return; - - const next = normalizeIntegerString(el.value); - if (el.value !== next) { - el.value = next; - } - setter(next); -} - -/** 阻止非数字键入(含小数点),配合 handleIntegerInput 处理粘贴 */ -export function blockNonDigitKey(e: KeyboardEvent): void { - if (e.ctrlKey || e.metaKey || e.altKey) return; - if (e.key.length !== 1) return; - if (!/^\d$/.test(e.key)) { - e.preventDefault(); - } -}