diff --git a/src/components/composer/simulate/KeySequenceEditor.vue b/src/components/composer/simulate/KeySequenceEditor.vue index afe683b..645a02a 100644 --- a/src/components/composer/simulate/KeySequenceEditor.vue +++ b/src/components/composer/simulate/KeySequenceEditor.vue @@ -143,21 +143,23 @@
-
- - +
@@ -215,52 +222,64 @@ import { defineComponent } from "vue"; import NumberInput from "../common/NumberInput.vue"; import draggable from "vuedraggable"; -import { parseFunction } from "js/composer/formatString"; // 检测操作系统 const isMac = window.utools.isMacOs(); -// 通用快捷键 +// 通用修饰键配置 +const getDefaultModifier = (extraModifiers = {}) => { + const baseModifiers = isMac ? { command: true } : { control: true }; + return { ...baseModifiers, ...extraModifiers }; +}; + +// 通用快捷键 - 根据操作系统设置不同的快捷键 const commonShortcuts = [ { label: "复制", - sequence: [{ mainKey: "c", modifiers: { command: true } }], + sequence: [{ mainKey: "c", modifiers: getDefaultModifier() }], }, { label: "粘贴", - sequence: [{ mainKey: "v", modifiers: { command: true } }], + sequence: [{ mainKey: "v", modifiers: getDefaultModifier() }], }, { label: "剪切", - sequence: [{ mainKey: "x", modifiers: { command: true } }], + sequence: [{ mainKey: "x", modifiers: getDefaultModifier() }], }, { label: "全选", - sequence: [{ mainKey: "a", modifiers: { command: true } }], + sequence: [{ mainKey: "a", modifiers: getDefaultModifier() }], }, { label: "撤销", - sequence: [{ mainKey: "z", modifiers: { command: true } }], + sequence: [{ mainKey: "z", modifiers: getDefaultModifier() }], }, { label: "重做", - sequence: [{ mainKey: "z", modifiers: { command: true, shift: true } }], + sequence: [ + { mainKey: "z", modifiers: getDefaultModifier({ shift: true }) }, + ], }, { label: "保存", - sequence: [{ mainKey: "s", modifiers: { command: true } }], + sequence: [{ mainKey: "s", modifiers: getDefaultModifier() }], }, { label: "查找", - sequence: [{ mainKey: "f", modifiers: { command: true } }], + sequence: [{ mainKey: "f", modifiers: getDefaultModifier() }], }, { label: "替换", - sequence: [{ mainKey: "h", modifiers: { command: true } }], + sequence: [{ mainKey: "h", modifiers: getDefaultModifier() }], }, { label: "关闭窗口", - sequence: [{ mainKey: "w", modifiers: { command: true } }], + sequence: [ + { + mainKey: isMac ? "w" : "f4", + modifiers: isMac ? { command: true } : { alt: true }, + }, + ], }, ]; @@ -565,11 +584,11 @@ export default defineComponent({ : key.charAt(0).toUpperCase() + key.slice(1)) ); }, - generateCode() { - if (this.argvs.sequence.length === 0) return; + generateCode(argvs = this.argvs) { + if (!argvs.sequence.length) return; // 将每个按键记录转换为按键数组 - const keySequence = this.argvs.sequence.map((item) => { + const keySequence = argvs.sequence.map((item) => { const activeModifiers = Object.entries(item.modifiers) .filter(([_, active]) => active) .map(([key]) => key) @@ -581,7 +600,7 @@ export default defineComponent({ // 生成代码 const options = - this.argvs.sequence.length > 1 ? { interval: this.argvs.interval } : {}; + argvs.sequence.length > 1 ? { interval: argvs.interval } : {}; if (Object.keys(options).length > 0) { return `${this.modelValue.value}(${JSON.stringify( keySequence @@ -589,12 +608,14 @@ export default defineComponent({ } return `${this.modelValue.value}(${JSON.stringify(keySequence)})`; }, - updateValue() { - this.$emit("update:modelValue", { + updateValue(newArgvs) { + const updatedModelValue = { ...this.modelValue, - argvs: this.argvs, - code: this.generateCode(), - }); + argvs: newArgvs || this.argvs, + code: this.generateCode(newArgvs || this.argvs), + }; + + this.$emit("update:modelValue", updatedModelValue); }, appendSequence(newSequence) { const startId = Date.now(); @@ -637,6 +658,24 @@ export default defineComponent({ } return argvs; }, + toggleModifier(index, key) { + // 创建新的 argvs 对象 + const newArgvs = { + sequence: [...this.argvs.sequence], + interval: this.argvs.interval, + }; + + // 修改对应按键的修饰键状态 + newArgvs.sequence[index] = { + ...newArgvs.sequence[index], + modifiers: { + ...newArgvs.sequence[index].modifiers, + [key]: !newArgvs.sequence[index].modifiers[key], + }, + }; + // 更新 modelValue + this.updateValue(newArgvs); + }, }, mounted() { if (!this.modelValue.code && !this.modelValue.argvs) { @@ -648,7 +687,7 @@ export default defineComponent({