diff --git a/app/templates/index.html b/app/templates/index.html index 24c020c..2acfef6 100644 --- a/app/templates/index.html +++ b/app/templates/index.html @@ -257,24 +257,18 @@
-
+
- + {{ task.use_sequence_naming ? '顺序命名' : '正则命名' }}
- - + +
 忽略后缀
-
-
- -
- -
@@ -475,19 +469,6 @@ return size + unitArr[index]; } }, - watch: { - 'task.use_sequence_naming': function(newVal, oldVal) { - if (newVal) { - if (!this.task.sequence_naming) { - this.task.sequence_naming = this.task.taskname + " - E{}"; - } - this.task.pattern_disabled = true; - } else { - this.task.sequence_naming = null; - this.task.pattern_disabled = false; - } - } - }, mounted() { this.fetchData(); this.checkNewVersion(); @@ -498,6 +479,24 @@ this.smart_param.showSuggestions = false; } }); + + // 初始化时检查所有任务的命名模式 + setTimeout(() => { + if (this.formData.tasklist && this.formData.tasklist.length > 0) { + this.formData.tasklist.forEach(task => { + // 检查现有的顺序命名设置 + if (task.use_sequence_naming && task.sequence_naming) { + // 已经设置过顺序命名的,将顺序命名模式转换为匹配表达式 + if (!task.pattern || task._pattern_backup) { + task.pattern = task.sequence_naming; + } + } else { + // 检测是否包含顺序命名模式 + this.detectNamingMode(task); + } + }); + } + }, 500); }, methods: { changeTab(tab) { @@ -558,6 +557,16 @@ } }, saveConfig() { + // 保存前处理每个任务的命名模式 + if (this.formData.tasklist && this.formData.tasklist.length > 0) { + this.formData.tasklist.forEach(task => { + // 如果是顺序命名模式,确保sequence_naming字段已正确设置 + if (task.use_sequence_naming && task.pattern && task.pattern.includes('E{}')) { + task.sequence_naming = task.pattern; + } + }); + } + axios.post('/update', this.formData) .then(response => { alert(response.data); @@ -598,7 +607,18 @@ } } } + + // 初始化新任务的命名模式相关字段 + if (newTask.taskname) { + // 默认使用正则命名模式 + newTask.pattern = ".*"; // 默认匹配所有文件 + newTask.replace = ""; // 默认保持原文件名 + newTask.use_sequence_naming = false; + newTask.sequence_naming = ""; + } + this.formData.tasklist.push(newTask); + // 滚到最下 setTimeout(() => { $('#collapse_' + (this.formData.tasklist.length - 1)).collapse('show').on('shown.bs.collapse', () => { @@ -807,29 +827,71 @@ this.changeShareurl(task); this.smart_param.showSuggestions = false; }, - toggleNamingMode(task, use_sequence_naming) { - // 设置命名模式 - task.use_sequence_naming = use_sequence_naming; + detectNamingMode(task) { + // 检测是否为顺序命名模式 + const sequencePatterns = ['E{}', 'EP{}', 'S\\d+E{}', '第{}集', '第{}话', '第{}期']; + let isSequenceNaming = false; - if (use_sequence_naming) { - // 启用顺序命名 - if (!task.sequence_naming) { - task.sequence_naming = task.taskname ? (task.taskname + " - E{}") : "E{}"; - } - // 禁用正则匹配 - task._pattern_backup = task.pattern; - task._replace_backup = task.replace; - task.pattern = ""; - task.replace = ""; - } else { - // 禁用顺序命名 - task._sequence_backup = task.sequence_naming; - // 恢复正则匹配 - if (task._pattern_backup) { - task.pattern = task._pattern_backup; - task.replace = task._replace_backup; + // 保存当前值以支持撤销操作 + const currentValue = task.pattern; + + if (task.pattern) { + // 检查是否包含任何顺序命名模式 + isSequenceNaming = sequencePatterns.some(pattern => { + const regexPattern = pattern.replace('{}', '\\{\\}'); + return new RegExp(regexPattern).test(task.pattern); + }); + + // 或者用户直接输入包含{}的格式,且替换表达式为空 + if (!isSequenceNaming && task.pattern.includes('{}') && (!task.replace || task.replace === '')) { + isSequenceNaming = true; } } + + // 处理模式切换 + if (isSequenceNaming) { + // 如果当前不是顺序命名模式,则保存现有的正则表达式 + if (!task.use_sequence_naming) { + task._pattern_backup = task.pattern; + task._replace_backup = task.replace; + task.use_sequence_naming = true; + } + // 设置序列命名模式 + task.sequence_naming = task.pattern; + } else { + // 如果当前是顺序命名模式,但现在检测不到顺序命名模式 + if (task.use_sequence_naming) { + // 如果用户正在删除内容(当前值为空或比上一次更短) + if (!currentValue || (task._lastPatternValue && currentValue.length < task._lastPatternValue.length)) { + // 保持当前编辑状态,不切换模式 + task.sequence_naming = currentValue; + // 只有当完全删除后才切换回正则模式 + if (!currentValue) { + task.use_sequence_naming = false; + if (task._pattern_backup) { + task.pattern = ""; + task.replace = task._replace_backup || ""; + } + task.sequence_naming = null; + } + } else if (task._pattern_backup && !task.pattern.includes('{}')) { + // 正常切换回正则命名模式(非删除操作) + task.use_sequence_naming = false; + task.pattern = task._pattern_backup; + task.replace = task._replace_backup; + task._sequence_backup = task.sequence_naming; + task.sequence_naming = null; + } else if (!task._pattern_backup && !task.pattern.includes('{}')) { + // 没有备份,但需要切换回正则模式 + task.use_sequence_naming = false; + task.sequence_naming = null; + } + } + } + + // 保存当前值,用于下次比较 + task._lastPatternValue = currentValue; + // 强制Vue更新视图 this.$forceUpdate(); },