| 
					
				 | 
			
			
				@@ -507,7 +507,7 @@ export default defineComponent({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			console.log(measureNumber); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      data.selectMeasures.max = measureNumber; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			data.selectMeasures.max = measureNumber; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		/** 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -942,6 +942,18 @@ export default defineComponent({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				if (!_abcElem?.midiPitches) return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				ABCJS.synth.playEvent(_abcElem.midiPitches, _abcElem.midiGraceNotePitches, 1000); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			// 删除音符 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			if (type === "delete") { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				if (!data.active) return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				if (data.active.startChar === 0) return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				abcData.abc.measures[data.active.measureIndex].notes.splice(data.active.noteIndex, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				if (abcData.abc.measures[data.active.measureIndex].notes.length === 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					abcData.abc.measures.splice(data.active.measureIndex, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				handleResetRender(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				data.active = null as unknown as INoteActive; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		const getNextNote = (index: number): AbcElem => { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1065,7 +1077,9 @@ export default defineComponent({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		const handleKeyUp = (e: KeyboardEvent) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			if (!data.active) return false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			console.log(e.key); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if (e.key === "Backspace") handleDeleteNote(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			if (e.key === "Backspace") { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				handleChange({ type: "delete", value: "" }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			if (/^[A-Ga-g]$/.test(e.key)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				handleChange({ type: "note", value: e.key.toLocaleUpperCase() }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			} 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -2160,52 +2174,54 @@ export default defineComponent({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 						initialValue={{ x: data.selectMeasures.x, y: data.selectMeasures.y }} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 						class={[styles.selectMearesBox, !popup.selectMearesShow && styles.selectMearesHidden]} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						<NSpace justify="space-between"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							<div class={styles.btnLineTitle}>输入小节范围</div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							<NButton circle quaternary size="small" onClick={() => (popup.selectMearesShow = false)}> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-								<NIcon size={16} component={<Close />} /> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							</NButton> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						</NSpace> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						<NSpace align="center" wrap={false} wrapItem={false}> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							<div class={styles.mearesInput}> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-								<NInputNumber 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-									min={1} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-									max={data.selectMeasures.max} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-									bordered={false} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-									placeholder="开始小节" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-									showButton={false} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-									onUpdate:value={(val) => handleSetSelectMeares(val, "start")} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-								></NInputNumber> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-								- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-								<NInputNumber 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-									min={data.selectMeasures.start} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-									max={data.selectMeasures.max} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-									bordered={false} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-									placeholder="结束小节" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-									showButton={false} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-									onUpdate:value={(val) => handleSetSelectMeares(val, "end")} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-								></NInputNumber> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							</div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							<div class={styles.topBtn}> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-								<NSpin show={data.loadingAudioSrouce} size="small"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-									<div 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-										class={styles.btnImg} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-										onClick={() => togglePlay(data.playState ? "pause" : "play")} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-									> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-										<img 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-											style={{ display: data.playState ? "" : "none" }} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-											class={styles.topBtnIcon} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-											src={getImage("icon_21_1.png")} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-										/> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-										<img 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-											style={{ display: data.playState ? "none" : "" }} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-											class={styles.topBtnIcon} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-											src={getImage("icon_21.png")} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-										/> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-									</div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-								</NSpin> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							</div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						</NSpace> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						<div onKeyup={(e: Event) => e.stopPropagation()}> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							<NSpace justify="space-between"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								<div class={styles.btnLineTitle}>输入小节范围</div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								<NButton circle quaternary size="small" onClick={() => (popup.selectMearesShow = false)}> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+									<NIcon size={16} component={<Close />} /> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								</NButton> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							</NSpace> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							<NSpace align="center" wrap={false} wrapItem={false}> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								<div class={styles.mearesInput}> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+									<NInputNumber 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+										min={1} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+										max={data.selectMeasures.max} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+										bordered={false} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+										placeholder="开始小节" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+										showButton={false} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+										onUpdate:value={(val) => handleSetSelectMeares(val, "start")} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+									></NInputNumber> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+									- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+									<NInputNumber 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+										min={data.selectMeasures.start} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+										max={data.selectMeasures.max} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+										bordered={false} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+										placeholder="结束小节" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+										showButton={false} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+										onUpdate:value={(val) => handleSetSelectMeares(val, "end")} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+									></NInputNumber> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								</div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								<div class={styles.topBtn}> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+									<NSpin show={data.loadingAudioSrouce} size="small"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+										<div 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+											class={styles.btnImg} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+											onClick={() => togglePlay(data.playState ? "pause" : "play")} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+										> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+											<img 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+												style={{ display: data.playState ? "" : "none" }} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+												class={styles.topBtnIcon} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+												src={getImage("icon_21_1.png")} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+											/> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+											<img 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+												style={{ display: data.playState ? "none" : "" }} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+												class={styles.topBtnIcon} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+												src={getImage("icon_21.png")} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+											/> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+										</div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+									</NSpin> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								</div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							</NSpace> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						</div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					</UseDraggable> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				)} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			</div> 
			 |