fix: 拖选文字时弹窗不再误关闭
Some checks failed
Test / unit-test (push) Successful in 5s
Test / e2e-test (push) Has been cancelled
Test / build-check (push) Has been cancelled

所有弹窗背景关闭事件从 @click.self 改为 @mousedown.self,
避免从输入框拖选文字到弹窗外时触发关闭。

影响:LoginModal、RecipeDetailOverlay、UserMenu、TagPicker、
Projects、BugTracker、OilReference 共9处。

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-04-12 09:40:21 +00:00
parent e9626a08b9
commit c8e1f87391
11 changed files with 24 additions and 9 deletions

View File

@@ -0,0 +1,8 @@
{
"hash": "35276b75",
"configHash": "1834f32e",
"lockfileHash": "e3b0c442",
"browserHash": "09e8beb6",
"optimized": {},
"chunks": {}
}

3
.vite/deps/package.json Normal file
View File

@@ -0,0 +1,3 @@
{
"type": "module"
}

BIN
data/oil_calculator.db Normal file

Binary file not shown.

View File

@@ -1,5 +1,5 @@
<template> <template>
<div class="login-overlay" @click.self="$emit('close')"> <div class="login-overlay" @mousedown.self="$emit('close')">
<div class="login-card"> <div class="login-card">
<div class="login-header"> <div class="login-header">
<span <span

View File

@@ -1,5 +1,5 @@
<template> <template>
<div class="detail-overlay" @click.self="$emit('close')"> <div class="detail-overlay" @mousedown.self="$emit('close')">
<div class="detail-panel"> <div class="detail-panel">
<!-- ==================== CARD VIEW ==================== --> <!-- ==================== CARD VIEW ==================== -->
<div v-if="viewMode === 'card'" class="detail-card-view"> <div v-if="viewMode === 'card'" class="detail-card-view">

View File

@@ -1,5 +1,5 @@
<template> <template>
<div class="tagpicker-overlay" @click.self="$emit('close')"> <div class="tagpicker-overlay" @mousedown.self="$emit('close')">
<div class="tagpicker-card"> <div class="tagpicker-card">
<div class="tagpicker-title">{{ name }}选择标签</div> <div class="tagpicker-title">{{ name }}选择标签</div>

View File

@@ -1,5 +1,5 @@
<template> <template>
<div class="usermenu-overlay" @click.self="$emit('close')"> <div class="usermenu-overlay" @mousedown.self="$emit('close')">
<div class="usermenu-card"> <div class="usermenu-card">
<div class="usermenu-name">{{ auth.user.display_name || auth.user.username }}</div> <div class="usermenu-name">{{ auth.user.display_name || auth.user.username }}</div>

View File

@@ -85,7 +85,7 @@
</div> </div>
<!-- Add Bug Modal --> <!-- Add Bug Modal -->
<div v-if="showAddBug" class="overlay" @click.self="showAddBug = false"> <div v-if="showAddBug" class="overlay" @mousedown.self="showAddBug = false">
<div class="overlay-panel"> <div class="overlay-panel">
<div class="overlay-header"> <div class="overlay-header">
<h3>新增Bug</h3> <h3>新增Bug</h3>

View File

@@ -19,7 +19,7 @@
</div> </div>
<!-- Dilution Ratio Modal --> <!-- Dilution Ratio Modal -->
<div v-if="showDilution" class="modal-overlay" @click.self="showDilution = false"> <div v-if="showDilution" class="modal-overlay" @mousedown.self="showDilution = false">
<div ref="dilutionCardRef" style="position:relative;z-index:1;background:white;border-radius:20px;max-width:420px;width:100%;max-height:88vh;overflow-y:auto;box-shadow:0 16px 56px rgba(0,0,0,0.25)" @click.stop> <div ref="dilutionCardRef" style="position:relative;z-index:1;background:white;border-radius:20px;max-width:420px;width:100%;max-height:88vh;overflow-y:auto;box-shadow:0 16px 56px rgba(0,0,0,0.25)" @click.stop>
<div style="background:linear-gradient(135deg,#2e7d32,#66bb6a);border-radius:20px 20px 0 0;padding:28px 24px;color:white;text-align:center;position:relative"> <div style="background:linear-gradient(135deg,#2e7d32,#66bb6a);border-radius:20px 20px 0 0;padding:28px 24px;color:white;text-align:center;position:relative">
<button @click="showDilution = false" style="position:absolute;top:12px;right:16px;background:rgba(255,255,255,0.2);border:none;color:white;width:30px;height:30px;border-radius:50%;cursor:pointer;font-size:16px">×</button> <button @click="showDilution = false" style="position:absolute;top:12px;right:16px;background:rgba(255,255,255,0.2);border:none;color:white;width:30px;height:30px;border-radius:50%;cursor:pointer;font-size:16px">×</button>
@@ -48,7 +48,7 @@
</div> </div>
<!-- Safety Cautions Modal --> <!-- Safety Cautions Modal -->
<div v-if="showContra" class="modal-overlay" @click.self="showContra = false"> <div v-if="showContra" class="modal-overlay" @mousedown.self="showContra = false">
<div ref="contraCardRef" style="position:relative;z-index:1;background:white;border-radius:20px;max-width:420px;width:100%;max-height:88vh;overflow-y:auto;box-shadow:0 16px 56px rgba(0,0,0,0.25)" @click.stop> <div ref="contraCardRef" style="position:relative;z-index:1;background:white;border-radius:20px;max-width:420px;width:100%;max-height:88vh;overflow-y:auto;box-shadow:0 16px 56px rgba(0,0,0,0.25)" @click.stop>
<div style="background:linear-gradient(135deg,#e65100,#ff9800);border-radius:20px 20px 0 0;padding:28px 24px;color:white;text-align:center;position:relative"> <div style="background:linear-gradient(135deg,#e65100,#ff9800);border-radius:20px 20px 0 0;padding:28px 24px;color:white;text-align:center;position:relative">
<button @click="showContra = false" style="position:absolute;top:12px;right:16px;background:rgba(255,255,255,0.2);border:none;color:white;width:30px;height:30px;border-radius:50%;cursor:pointer;font-size:16px">×</button> <button @click="showContra = false" style="position:absolute;top:12px;right:16px;background:rgba(255,255,255,0.2);border:none;color:white;width:30px;height:30px;border-radius:50%;cursor:pointer;font-size:16px">×</button>
@@ -161,7 +161,7 @@
</div> </div>
<!-- Oil Knowledge Card Modal --> <!-- Oil Knowledge Card Modal -->
<div v-if="activeCard && activeCardName" class="modal-overlay" @click.self="closeOilModal"> <div v-if="activeCard && activeCardName" class="modal-overlay" @mousedown.self="closeOilModal">
<div class="oil-card-modal"> <div class="oil-card-modal">
<div class="oil-card-header"> <div class="oil-card-header">
<div class="oil-card-header-content"> <div class="oil-card-header-content">

View File

@@ -207,7 +207,7 @@
</div> </div>
<!-- Import From Recipe Modal --> <!-- Import From Recipe Modal -->
<div v-if="showImportModal" class="overlay" @click.self="showImportModal = false"> <div v-if="showImportModal" class="overlay" @mousedown.self="showImportModal = false">
<div class="overlay-panel"> <div class="overlay-panel">
<div class="overlay-header"> <div class="overlay-header">
<h3>从配方导入</h3> <h3>从配方导入</h3>

View File

@@ -0,0 +1,4 @@
{
"status": "failed",
"failedTests": []
}