Skip to content

Commit 175aefb

Browse files
committed
优化设置对话框:1. 修改监听逻辑以确保初始设置正确同步;2. 添加当前设置的引用,便于管理;3. 更新保存和加载设置的逻辑,确保隐藏选项的正确应用;4. 增强对初始设置变化的响应能力。
1 parent b572855 commit 175aefb

File tree

2 files changed

+93
-31
lines changed

2 files changed

+93
-31
lines changed

src/components/EditorSettings.vue

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,8 +71,13 @@ const emit = defineEmits<{
7171
const dialogVisible = ref(props.visible);
7272
const localSettings = ref<Settings>({ ...props.initialSettings });
7373
74+
// 修改 watch 监听,以确保在初始状态时获取正确的设置值
7475
watch(() => props.visible, (newValue) => {
7576
dialogVisible.value = newValue;
77+
if (newValue) {
78+
// 打开对话框时,从初始设置中同步值
79+
localSettings.value = { ...props.initialSettings };
80+
}
7681
});
7782
7883
watch(dialogVisible, (newValue) => {

src/components/ExpressionEditor.vue

Lines changed: 88 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -130,12 +130,13 @@
130130
</div>
131131
</div>
132132
</div>
133-
<EditorSettings v-model:visible="settingsDialogVisible" :initial-settings="{
134-
autoCompleteBrackets,
135-
bracketColorEnabled,
136-
horizontalLayout,
137-
language: props.language
138-
}" :t="t" @save="handleSettingsSave" @cancel="handleSettingsCancel" />
133+
<EditorSettings
134+
v-model:visible="settingsDialogVisible"
135+
:initial-settings="currentSettings"
136+
:t="t"
137+
@save="handleSettingsSave"
138+
@cancel="handleSettingsCancel"
139+
/>
139140
<VariableSuggestions v-model:visible="showVariableSuggestions" :suggestions="variableSuggestions"
140141
:selectedIndex="selectedSuggestionIndex" :wrapper-ref="wrapperRef" :t="t" @select="handleVariableSelect"
141142
@close="handleSuggestionsClose" />
@@ -279,6 +280,17 @@ const isDarkMode = ref(false);
279280
const settingsDialogVisible = ref(false);
280281
const autoCompleteBrackets = ref(false);
281282
const bracketColorEnabled = ref(false);
283+
const horizontalLayout = ref(false); // 将horizontalLayout的定义移到前面
284+
285+
// 添加 currentSettings ref
286+
const currentSettings = ref({
287+
autoCompleteBrackets: autoCompleteBrackets.value,
288+
bracketColorEnabled: bracketColorEnabled.value,
289+
horizontalLayout: horizontalLayout.value,
290+
language: props.language,
291+
hideVariables: props.initialSettings?.hideVariables || false,
292+
hideKeyboard: props.initialSettings?.hideKeyboard || false,
293+
});
282294
283295
// 历史记录相关变量
284296
const history = ref<string[]>([]);
@@ -310,11 +322,15 @@ const formulaTextRef = ref<HTMLDivElement | null>(null);
310322
const fontSize = ref(MAX_FONT_SIZE);
311323
const isCircleStyle = ref(false);
312324
const showExpression = ref(false);
313-
const horizontalLayout = ref(true); // 添加horizontalLayout变量
314325
315-
// 添加显示控制的计算属性
316-
const showVariablesEnabled = computed(() => !props.hideVariables && !props.initialSettings?.hideVariables);
317-
const showKeyboardEnabled = computed(() => !props.hideKeyboard && !props.initialSettings?.hideKeyboard);
326+
// 修改显示控制的计算属性
327+
const showVariablesEnabled = computed(() => {
328+
return !(currentSettings.value.hideVariables);
329+
});
330+
331+
const showKeyboardEnabled = computed(() => {
332+
return !(currentSettings.value.hideKeyboard);
333+
});
318334
319335
// 计算属性
320336
const canUndo = computed(() => historyIndex.value > 0);
@@ -1395,6 +1411,15 @@ const toggleTheme = () => {
13951411
};
13961412
13971413
const showSettingsDialog = () => {
1414+
// 更新当前设置
1415+
currentSettings.value = {
1416+
autoCompleteBrackets: autoCompleteBrackets.value,
1417+
bracketColorEnabled: bracketColorEnabled.value,
1418+
horizontalLayout: horizontalLayout.value,
1419+
language: props.language,
1420+
hideVariables: props.initialSettings?.hideVariables || false,
1421+
hideKeyboard: props.initialSettings?.hideKeyboard || false
1422+
};
13981423
settingsDialogVisible.value = true;
13991424
};
14001425
@@ -1424,22 +1449,37 @@ const handleSettingsSave = (settings: {
14241449
bracketColorEnabled: boolean;
14251450
horizontalLayout: boolean;
14261451
language: string;
1427-
hideVariables: boolean; // 修改
1428-
hideKeyboard: boolean; // 修改
1452+
hideVariables: boolean;
1453+
hideKeyboard: boolean;
14291454
}) => {
1455+
// 更新本地状态
1456+
currentSettings.value = { ...settings };
14301457
autoCompleteBrackets.value = settings.autoCompleteBrackets;
14311458
bracketColorEnabled.value = settings.bracketColorEnabled;
14321459
horizontalLayout.value = settings.horizontalLayout;
1460+
1461+
// 更新初始设置中的隐藏选项
1462+
if (props.initialSettings) {
1463+
props.initialSettings.hideVariables = settings.hideVariables;
1464+
props.initialSettings.hideKeyboard = settings.hideKeyboard;
1465+
}
1466+
1467+
// 保存到本地存储
1468+
localStorage.setItem('editor-settings', JSON.stringify(settings));
1469+
1470+
// 如果语言发生变化,触发更新
14331471
if (settings.language !== props.language) {
14341472
emit('update:language', settings.language);
14351473
}
1436-
localStorage.setItem('editor-settings', JSON.stringify({
1437-
...settings,
1438-
horizontalLayout: horizontalLayout.value,
1439-
hideVariables: settings.hideVariables,
1440-
hideKeyboard: settings.hideKeyboard
1441-
}));
1474+
1475+
// 关闭设置对话框
14421476
settingsDialogVisible.value = false;
1477+
1478+
// 强制重新计算布局
1479+
nextTick(() => {
1480+
calculateFontSize();
1481+
window.dispatchEvent(new Event('resize'));
1482+
});
14431483
};
14441484
14451485
// 添加取消设置的处理方法
@@ -1451,20 +1491,20 @@ const handleSettingsCancel = () => {
14511491
const loadSettings = () => {
14521492
try {
14531493
const localSettings = JSON.parse(localStorage.getItem('editor-settings') || '{}');
1454-
const settings = {
1455-
autoCompleteBrackets: localSettings.autoCompleteBrackets ?? false,
1456-
bracketColorEnabled: localSettings.bracketColorEnabled ?? false,
1457-
isDarkMode: localSettings.isDarkMode ?? false,
1458-
horizontalLayout: localSettings.horizontalLayout ?? true,
1459-
hideVariables: localSettings.hideVariables ?? false,
1460-
hideKeyboard: localSettings.hideKeyboard ?? false
1461-
};
14621494
1463-
autoCompleteBrackets.value = settings.autoCompleteBrackets;
1464-
bracketColorEnabled.value = settings.bracketColorEnabled;
1465-
isDarkMode.value = settings.isDarkMode;
1466-
horizontalLayout.value = settings.horizontalLayout;
1495+
// 应用设置
1496+
autoCompleteBrackets.value = localSettings.autoCompleteBrackets ?? false;
1497+
bracketColorEnabled.value = localSettings.bracketColorEnabled ?? false;
1498+
horizontalLayout.value = localSettings.horizontalLayout ?? false;
1499+
isDarkMode.value = localSettings.isDarkMode ?? false;
14671500
1501+
// 更新初始设置中的隐藏选项
1502+
if (props.initialSettings) {
1503+
props.initialSettings.hideVariables = localSettings.hideVariables ?? false;
1504+
props.initialSettings.hideKeyboard = localSettings.hideKeyboard ?? false;
1505+
}
1506+
1507+
// 应用深色模式
14681508
if (isDarkMode.value) {
14691509
document.documentElement.classList.add('dark-mode');
14701510
}
@@ -1505,7 +1545,24 @@ watch(horizontalLayout, () => {
15051545
});
15061546
});
15071547
1508-
// popoverProps 可以删除,因为已经移到子组件中
1548+
// 监听初始设置的变化
1549+
watch(() => props.initialSettings, (newSettings) => {
1550+
if (newSettings) {
1551+
currentSettings.value = {
1552+
...currentSettings.value,
1553+
hideVariables: newSettings.hideVariables ?? false,
1554+
hideKeyboard: newSettings.hideKeyboard ?? false
1555+
};
1556+
}
1557+
}, { immediate: true });
1558+
1559+
// 监听本地设置的变化
1560+
watch(currentSettings, (newSettings) => {
1561+
if (props.initialSettings) {
1562+
props.initialSettings.hideVariables = newSettings.hideVariables;
1563+
props.initialSettings.hideKeyboard = newSettings.hideKeyboard;
1564+
}
1565+
}, { deep: true });
15091566
15101567
// 新增处理变量选择的方法
15111568
const handleVariableSelect = (_variable: Variable) => {

0 commit comments

Comments
 (0)