Skip to content

Commit

Permalink
Merge pull request #13 from FleyX/dev
Browse files Browse the repository at this point in the history
feat:新增路径收藏
  • Loading branch information
FleyX authored Jun 12, 2022
2 parents e213028 + 7d55c5b commit 6d3cfae
Show file tree
Hide file tree
Showing 15 changed files with 216 additions and 43 deletions.
25 changes: 23 additions & 2 deletions openRenamerBackend/api/FileApi.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@ router["GET /file/query"] = async function (ctx: Context) {
/**
*是否windows
*/
router['GET /file/isWindows'] = async function (ctx:Context) {
ctx.body=config.isWindows;
router['GET /file/isWindows'] = async function (ctx: Context) {
ctx.body = config.isWindows;
}

/**
Expand All @@ -25,4 +25,25 @@ router["GET /file/path/exist"] = async function (ctx: Context) {
ctx.body = await FileService.checkExist(ctx.query.path as string);
};

/**
* 收藏路径
*/
router["POST /file/path/save"] = async function (ctx: Context) {
ctx.body = await FileService.savePath(ctx.request.body);
};

/**
* 获取收藏路径
*/
router["GET /file/path"] = async function (ctx: Context) {
ctx.body = await FileService.getSaveList();
};

/**
* 获取收藏路径
*/
router["DELETE /file/path/delete"] = async function (ctx: Context) {
ctx.body = await FileService.deleteOne(ctx.query.id);
};

export default router;
42 changes: 42 additions & 0 deletions openRenamerBackend/dao/SavePathDao.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
import ErrorHelper from "../util/ErrorHelper";
import SavePath from "../entity/dto/SavePath";
import SqliteHelper from "../util/SqliteHelper";

export default class SavePathDao {
/**
* 查询所有
* @param obj
* @returns
*/
static async getAll(): Promise<Array<SavePath>> {
let res = await SqliteHelper.pool.all('select id,name,content from path_save');
return res;
}


/**
* 新增
* @param obj
* @returns
*/
static async addOne(obj: SavePath): Promise<number> {
let res = await SqliteHelper.pool.run('insert into path_save(name,content) values(?,?)'
, obj.name, obj.content);
obj.id = res.lastID;
return res.lastID;
}


/**
* 删除
* @param id
*/
static async delete(id: number): Promise<void> {
let res = await SqliteHelper.pool.run('delete from path_save where id=?', id);
if (res.changes == 0) {
throw ErrorHelper.Error404("数据不存在");
}
}


}
12 changes: 12 additions & 0 deletions openRenamerBackend/entity/dto/SavePath.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
export default class SavePath {
id: number;
/**
名称
*/
name: string;

/**
规则内容,json序列化后
*/
content: string;
}
29 changes: 29 additions & 0 deletions openRenamerBackend/service/FileService.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ import * as fs from 'fs-extra';

import ProcessHelper from '../util/ProcesHelper';
import FileObj from '../vo/FileObj';
import SavePathDao from '../dao/SavePathDao';
import SavePath from '../entity/dto/SavePath';

let numberSet = new Set(["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]);

Expand Down Expand Up @@ -56,6 +58,33 @@ class FileService {
return await fs.pathExists(pathStr);
}

/**
* 收藏路径
* @param saveObj
* @returns
*/
static async savePath(saveObj: SavePath) {
await SavePathDao.addOne(saveObj);
return saveObj;
}

/**
* 获取保存列表
* @returns
*/
static async getSaveList() {
return await SavePathDao.getAll();
}

/**
* 删除
* @param id
* @returns
*/
static async deleteOne(id) {
return await SavePathDao.delete(id);
}

/**
* 数字字母混合排序
* @param a str
Expand Down
7 changes: 7 additions & 0 deletions openRenamerBackend/sqls/v002__init.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
-- 路径收藏表
CREATE TABLE path_save (
id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
-- 路径内容
content TEXT NOT NULL DEFAULT ''
);
22 changes: 12 additions & 10 deletions openRenamerBackend/vo/rules/InsertRule.ts
Original file line number Diff line number Diff line change
Expand Up @@ -43,27 +43,29 @@ export default class InsertRule implements RuleInterface {

deal(file: FileObj): void {
let str = this.ignorePostfix ? file.realName : file.name;
let season = '';
if (this.autoSeason) {
let patternRes = path.basename(file.path).replace(/[ ]+/, "").toLocaleLowerCase().match(pattern);
if (patternRes && patternRes[2]) {
season = patternRes[2];
}
}
switch (this.type) {
case "front":
str = this.insertContent + str;
str = this.insertContent + season + str;
break;
case "backend":
str = str + this.insertContent;
str = str + this.insertContent + season;
break;
case "at":
let index = this.atIsRightToleft ? str.length - this.atInput + 1 : this.atInput - 1;
str = str.substring(0, index) + this.insertContent + str.substring(index);
str = str.substring(0, index) + this.insertContent + season + str.substring(index);
break;
case "replace":
str = this.insertContent;
str = this.insertContent + season;
break;
}
if (this.autoSeason) {
let patternRes = path.basename(file.path).replace(/[ ]+/, "").toLocaleLowerCase().match(pattern);
if (patternRes[2]) {
str += patternRes[2];
}
}


if (this.ignorePostfix) {
file.realName = str;
Expand Down
2 changes: 1 addition & 1 deletion openRenamerFront/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
"axios": "^0.21.1",
"core-js": "^3.6.5",
"dayjs": "^1.10.7",
"element-plus": "^1.2.0-beta.5",
"element-plus": "^2.2.5",
"vue": "^3.0.0",
"vue-router": "^4.0.0-0"
},
Expand Down
2 changes: 1 addition & 1 deletion openRenamerFront/src/App.vue
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ export default {
data() {
return {
activeIndex: "dealCenter",
version: "0.7",
version: "0.8",
};
},
async created() {
Expand Down
58 changes: 49 additions & 9 deletions openRenamerFront/src/components/FileChose.vue
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,11 @@
<div class="fileList">
<div>
<el-input style="display: inline-block; width: 150px" type="text" size="small" placeholder="关键词过滤" v-model="filterText" clearable />
<el-button type="primary" @click="selectAll(true)" size="mini">全选</el-button>
<el-button type="primary" @click="selectAll(false)" size="mini">全不选</el-button>
<el-button type="primary" @click="refresh" size="mini">刷新</el-button>
<el-button type="primary" @click="selectAll(true)" size="small">全选</el-button>
<el-button type="primary" @click="selectAll(false)" size="small">全不选</el-button>
<el-button type="primary" @click="refresh" size="small">刷新</el-button>
<el-button v-if="curSavePathId" type="warning" @click="cancelSavePath" size="small">取消收藏</el-button>
<el-button v-else type="primary" @click="showSave = true" size="small">收藏路径</el-button>
</div>
<div v-for="(item, index) in filterFileList" :key="index">
<span class="folder" v-if="item.isFolder" @click="fileClick(item)">{{ item.name }}</span>
Expand All @@ -24,6 +26,11 @@
<div>
<el-button type="primary" @click="submit">确定</el-button>
</div>

<el-dialog title="保存路径" v-model="showSave" width="40em">
<el-input type="text" v-model="saveName" placeholder="输入名称" />
<el-button type="primary" @click="savePath" style="padding-top: 1em">提交</el-button>
</el-dialog>
</div>
</template>

Expand All @@ -38,23 +45,35 @@ export default {
pathList: [], //选择的路径
loading: false, //加载
filterText: "", //关键字过滤
showSave: false, //保存路径
saveName: "",
savePathList: [], //保存的路径
};
},
computed: {
filterFileList() {
let text = this.filterText.trim();
return text === "" ? this.fileList : this.fileList.filter((item) => item.name.indexOf(text) > -1);
},
curSavePathId() {
let curPath = JSON.stringify(this.pathList);
let targetList = this.savePathList.filter((item) => item.content == curPath);
return targetList.length > 0 ? targetList[0].id : null;
},
},
async mounted() {
this.isWindows = await HttpUtil.get("/file/isWindows");
await this.breadcrumbClick(-1);
async created() {
await this.breadcrumbClick(this.pathList.length - 1);
await this.refreshSavePathList();
},
methods: {
async refresh() {
await this.breadcrumbClick(this.pathList.length - 1);
},
//刷新保存的路径
async refreshSavePathList() {
this.savePathList = await HttpUtil.get("/file/path");
},
//点击面包蟹
async breadcrumbClick(index) {
this.loading = true;
Expand Down Expand Up @@ -84,15 +103,17 @@ export default {
},
//根据index构建路径
createPath(index) {
console.log("当前路径为:", this.pathList);
let path;
if (index == -1) {
path = "";
this.pathList = [];
} else {
this.pathList = this.pathList.slice(0, index + 1);
let str = this.pathList.join(this.isWindows ? "\\" : "/") + (this.isWindows ? "\\" : "/");
path = this.isWindows ? str : "/" + str;
let str = this.pathList.join(window.isWindows ? "\\" : "/") + (window.isWindows ? "\\" : "/");
path = window.isWindows ? str : "/" + str;
}
console.log("构建出的路径为:", path);
return path;
},
//点击确定
Expand All @@ -102,11 +123,30 @@ export default {
this.$message({ message: "未选择文件", type: "warning" });
return;
}
this.$emit("addData", chosedFiles);
this.$emit("addData", JSON.parse(JSON.stringify(chosedFiles)));
this.fileList.forEach((item) => (item.checked = false));
this.fileList = [...this.fileList];
this.filterText = "";
},
//收藏路径
async savePath() {
let res = await HttpUtil.post("/file/path/save", null, { name: this.saveName, content: JSON.stringify(this.pathList) });
this.$emit("refreshSavePathList");
this.refreshSavePathList();
this.saveName = "";
this.showSave = false;
this.$message.success("操作成功");
},
async cancelSavePath() {
await HttpUtil.delete("/file/path/delete", { id: this.curSavePathId });
this.refreshSavePathList();
this.$emit("refreshSavePathList");
this.$message.success("操作成功");
},
changePath(item) {
this.pathList = JSON.parse(item.content);
this.breadcrumbClick(this.pathList.length - 1);
},
},
};
</script>
Expand Down
6 changes: 3 additions & 3 deletions openRenamerFront/src/components/Rule.vue
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
<template>
<div class="main">
<el-menu style="width: 8em" mode="vertical" :default-active="currentIndex" @select="menuChange">
<el-menu-item :disabled="editRule" index="insert">插入</el-menu-item>
<el-menu-item :disabled="editRule" index="delete">删除</el-menu-item>
<el-menu-item :disabled="editRule != null" index="insert">插入</el-menu-item>
<el-menu-item :disabled="editRule != null" index="delete">删除</el-menu-item>
<!-- <el-menu-item index="replace">替换</el-menu-item> -->
<el-menu-item :disabled="editRule" index="serialization">序列化</el-menu-item>
<el-menu-item :disabled="editRule != null" index="serialization">序列化</el-menu-item>
</el-menu>
<div class="rule">
<insert-rule ref="rule" :editRule="editRule" v-if="currentIndex == 'insert'" />
Expand Down
2 changes: 1 addition & 1 deletion openRenamerFront/src/components/rules/InsertRule.vue
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
<el-radio style="margin-top: 1em" v-model="ruleObj.data.type" label="front">前缀</el-radio>
<el-radio style="margin-top: 1em" v-model="ruleObj.data.type" label="backend">后缀</el-radio>
<el-radio style="margin-top: 1em" v-model="ruleObj.data.type" label="at"
>位置:<el-input-number size="mini" v-model="ruleObj.data.atInput" />
>位置:<el-input-number size="small" v-model="ruleObj.data.atInput" />
&nbsp;&nbsp;
<el-switch v-model="ruleObj.data.atIsRightToleft" :min="1" active-text="从右到左" inactive-text="从左到右" />
</el-radio>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
<el-radio style="margin-top: 1em" v-model="ruleObj.data.insertType" label="front">前缀</el-radio>
<el-radio style="margin-top: 1em" v-model="ruleObj.data.insertType" label="backend">后缀</el-radio>
<el-radio style="margin-top: 1em" v-model="ruleObj.data.insertType" label="at"
>位置:<el-input-number size="mini" :min="1" :disabled="ruleObj.data.insertType !== 'at'" v-model="ruleObj.data.insertValue" />
>位置:<el-input-number size="small" :min="1" :disabled="ruleObj.data.insertType !== 'at'" v-model="ruleObj.data.insertValue" />
</el-radio>
</div>
</div>
Expand Down
Loading

0 comments on commit 6d3cfae

Please sign in to comment.