Skip to content

Commit a9c80d6

Browse files
committed
优化删除逻辑:1. 添加运算符删除支持;2. 改进变量删除处理;3. 确保光标位置正确更新。
1 parent b776897 commit a9c80d6

File tree

1 file changed

+42
-15
lines changed

1 file changed

+42
-15
lines changed

src/components/ExpressionEditor.vue

Lines changed: 42 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -729,33 +729,60 @@ const deleteLast = () => {
729729
const cursorPosition = input.selectionStart || 0;
730730
if (cursorPosition === 0) return;
731731
732-
// 检查是否在删除变量
732+
// 先检查是否在删除运算符
733+
const operatorAtCursor = InputService.checkCursorAroundOperator(
734+
displayExpression.value,
735+
cursorPosition
736+
);
737+
738+
// 检查前一个位置是否有变量
733739
const variableAtCursor = InputService.checkCursorInVariable(
734740
displayExpression.value,
735741
cursorPosition - 1,
736742
props.variables
737743
);
738744
739-
if (variableAtCursor) {
740-
// 变量删除逻辑保持不变
745+
// 如果光标紧跟在运算符后面
746+
if (operatorAtCursor && operatorAtCursor.end === cursorPosition) {
747+
// 删除运算符
748+
const before = displayExpression.value.slice(0, operatorAtCursor.start);
749+
const after = displayExpression.value.slice(operatorAtCursor.end);
750+
displayExpression.value = before + after;
751+
expression.value = convertDisplayToReal(displayExpression.value);
752+
753+
nextTick(() => {
754+
const newPosition = operatorAtCursor.start;
755+
input.setSelectionRange(newPosition, newPosition);
756+
input.focus();
757+
});
758+
}
759+
// 如果光标在变量结尾
760+
else if (variableAtCursor && variableAtCursor.end === cursorPosition) {
761+
// 删除整个变量
741762
const before = displayExpression.value.slice(0, variableAtCursor.start);
742763
const after = displayExpression.value.slice(variableAtCursor.end);
743764
displayExpression.value = before + after;
744-
} else {
745-
// 获取光标前的字符
746-
const beforeCursor = displayExpression.value.slice(0, cursorPosition);
747-
const afterCursor = displayExpression.value.slice(cursorPosition);
765+
expression.value = convertDisplayToReal(displayExpression.value);
748766
749-
displayExpression.value = beforeCursor.slice(0, -1) + afterCursor;
767+
nextTick(() => {
768+
const newPosition = variableAtCursor.start;
769+
input.setSelectionRange(newPosition, newPosition);
770+
input.focus();
771+
});
750772
}
773+
// 其他情况,删除单个字符
774+
else {
775+
const before = displayExpression.value.slice(0, cursorPosition - 1);
776+
const after = displayExpression.value.slice(cursorPosition);
777+
displayExpression.value = before + after;
778+
expression.value = convertDisplayToReal(displayExpression.value);
751779
752-
expression.value = convertDisplayToReal(displayExpression.value);
753-
754-
nextTick(() => {
755-
const newPosition = cursorPosition - 1;
756-
input.setSelectionRange(newPosition, newPosition);
757-
input.focus();
758-
});
780+
nextTick(() => {
781+
const newPosition = cursorPosition - 1;
782+
input.setSelectionRange(newPosition, newPosition);
783+
input.focus();
784+
});
785+
}
759786
760787
// 添加到历史记录
761788
addToHistory(displayExpression.value);

0 commit comments

Comments
 (0)