feat: 订单双视图、工作台日历组件、医生排班管理与挂号语音提醒
- 订单双视图:商品订单/处方/挂号列表新增卡片视图(CardList)、视图切换组件 view-mode-switch、stat-islands 统计岛、constants 字典 - 工作台:新增工作日历 Widget、待办日历、即将到访预约、公告滚动 NoticeTicker、日历面板 CalendarPanel - 医生排班:新增排班 API、ScheduleDrawer 抽屉、schedule-calendar 组件、门店设置弹窗 - 日志与通知:新增排班变更日志页、排班变更通知视图 - 挂号提醒:新增挂号语音播报资源与 register-notify 工具 - 桌面端:新增 apps/desktop 壳及 desktop 工具方法 - 其他:处方/订单导出、聊天设置与 WebSocket 等小幅优化
This commit is contained in:
@@ -61,13 +61,52 @@ function handleKeyDownEnter(event: KeyboardEvent) {
|
||||
if (!state?.value.submitOnEnter || !forward.value.formApi?.isMounted) {
|
||||
return;
|
||||
}
|
||||
// 输入法组合态(打中文选词)的回车是「确认候选词」,不是提交意图
|
||||
if (event.isComposing) {
|
||||
return;
|
||||
}
|
||||
// 如果是 textarea 不阻止默认行为,否则会导致无法换行。
|
||||
// 跳过 textarea 的回车提交处理
|
||||
if (event.target instanceof HTMLTextAreaElement) {
|
||||
return;
|
||||
}
|
||||
const target = event.target instanceof Element ? event.target : null;
|
||||
// 焦点在按钮上(如重置/展开)时交给原生行为:回车本就会触发该按钮 click,
|
||||
// 若在这里拦截成提交,会出现「聚焦重置按钮按回车却执行了查询」的错乱
|
||||
if (target?.closest('button')) {
|
||||
return;
|
||||
}
|
||||
// 下拉面板打开时回车是「选中选项」(keydown 冒泡是同步的,open class 尚未被
|
||||
// Vue 异步渲染移除,此刻仍可命中),跳过提交;面板关闭后的下一次回车才提交,
|
||||
// 即「下拉需要第二次回车才搜索」
|
||||
if (target?.closest('.ant-select-open')) {
|
||||
return;
|
||||
}
|
||||
// 日期/时间选择器:与 Select 一致的两段式语义——
|
||||
// 面板打开时回车是「确认日期选择」(keydown 同步阶段面板 DOM 尚未被异步移除,仍可命中),跳过提交;
|
||||
// 面板关闭后的下一次回车才提交,即「选完日期第二次回车即搜索」
|
||||
if (target?.closest('.ant-picker')) {
|
||||
const openPickerPanel = document.querySelector(
|
||||
'.ant-picker-dropdown:not(.ant-picker-dropdown-hidden)',
|
||||
);
|
||||
if (openPickerPanel) {
|
||||
return;
|
||||
}
|
||||
// 面板关闭态:rc-picker 的回车会重新打开面板,提交的同时主动失焦收面板,
|
||||
// 避免搜索结果被日期面板挡住
|
||||
event.preventDefault();
|
||||
if (target instanceof HTMLElement) {
|
||||
target.blur();
|
||||
}
|
||||
forward.value.formApi?.validateAndSubmit();
|
||||
return;
|
||||
}
|
||||
event.preventDefault();
|
||||
|
||||
// 关闭态 Select 的回车会同步重新打开面板(rc-select 行为),提交的同时主动
|
||||
// 失焦收起面板,避免搜索结果被下拉挡住
|
||||
if (target instanceof HTMLElement && target.closest('.ant-select')) {
|
||||
target.blur();
|
||||
}
|
||||
forward.value.formApi?.validateAndSubmit();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user