mirror of
https://github.com/Cp0204/quark-auto-save.git
synced 2026-01-13 07:40:45 +08:00
合并命名模式的设置框,并实现自动切换
This commit is contained in:
parent
243ddff74d
commit
6f969f9416
@ -257,24 +257,18 @@
|
||||
<div class="form-group row">
|
||||
<label class="col-sm-2 col-form-label">命名方式</label>
|
||||
<div class="col-sm-10">
|
||||
<div class="input-group mb-3">
|
||||
<div class="input-group">
|
||||
<div class="input-group-prepend">
|
||||
<button type="button" class="btn" :class="!task.use_sequence_naming ? 'btn-primary' : 'input-group-text'" @click="toggleNamingMode(task, false)">正则命名</button>
|
||||
<span class="input-group-text">{{ task.use_sequence_naming ? '顺序命名' : '正则命名' }}</span>
|
||||
</div>
|
||||
<input type="text" name="pattern[]" class="form-control" v-model="task.pattern" placeholder="匹配表达式" list="magicRegex" :disabled="task.use_sequence_naming">
|
||||
<input type="text" name="replace[]" class="form-control" v-model="task.replace" placeholder="替换表达式" :disabled="task.use_sequence_naming">
|
||||
<input type="text" name="pattern[]" class="form-control" v-model="task.pattern" placeholder="匹配表达式 (E{} 或 S01E{} 表示顺序命名模式)" list="magicRegex" @input="detectNamingMode(task)">
|
||||
<input type="text" name="replace[]" class="form-control" v-model="task.replace" placeholder="替换表达式 (正则模式时有效)" @input="detectNamingMode(task)">
|
||||
<div class="input-group-append">
|
||||
<div class="input-group-text">
|
||||
<input type="checkbox" title="忽略后缀" v-model="task.ignore_extension"> 忽略后缀
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="input-group">
|
||||
<div class="input-group-prepend">
|
||||
<button type="button" class="btn" :class="task.use_sequence_naming ? 'btn-primary' : 'input-group-text'" @click="toggleNamingMode(task, true)">顺序命名</button>
|
||||
</div>
|
||||
<input type="text" class="form-control" v-model="task.sequence_naming" :placeholder='`例如: 雁回时 - S01E{},{}将被替换为序号,支持识别第X期/集/话、SXXEXX、纯数字序号、日期等格式排序`' :disabled="!task.use_sequence_naming">
|
||||
</div>
|
||||
<datalist id="magicRegex">
|
||||
<option v-for="(value, key) in formData.magic_regex" :key="key" :value="`${key}`" v-html="`${value.pattern.replace('<', '<\u200B')} → ${value.replace}`"></option>
|
||||
</datalist>
|
||||
@ -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();
|
||||
},
|
||||
|
||||
Loading…
Reference in New Issue
Block a user