taitan
Version:
小程序开发辅助工具
224 lines (216 loc) • 6.13 kB
JavaScript
const {
hasProject,
getProjectList,
getProjectListConfigPath,
getProjectByDir,
setProjectList,
setProjectByDir,
logPageList,
} = require("../core/tools");
const chalk = require("chalk");
const inquirer = require("inquirer");
const fs = require("fs");
const helper = {
//确认框
confirm(message, defaultValue = false) {
return inquirer
.prompt([
{
type: "confirm",
name: "confirm",
message,
default: defaultValue,
},
])
.then((res) => {
return res.confirm;
});
},
//输入项目名
getProjectNameFromCmd() {
return inquirer.prompt([
{
type: "input",
name: "projectName",
message: "请输入项目名称",
validate(inp) {
if (!inp) {
return "项目名称不能为空";
} else if (hasProject(inp)) {
return `项目:${chalk.green(inp)} 已存在,请输入其他项目名`;
} else {
return true;
}
},
},
]);
},
//选择项目
selectProjectFromCmd(message) {
let projectList = getProjectList();
if(!projectList.length){
return Promise.resolve(null)
}
return inquirer
.prompt([
{
type: "list",
message: message || "请选择项目",
name: "selectProject",
choices: projectList.map((i) => i.projectName),
},
])
.then((res) => {
return projectList.find((i) => i.projectName === res.selectProject);
});
},
//添加页面
async selectPage(dir, message, type='select',isConfirmSave=true) {
let pagePath = await helper.getPagePath(dir,message,type)
let query = await inquirer.prompt([
{
type: "input",
message: "请输入页面参数,如:a=1&b=2(没有参数直接按回车键)",
name: "query",
},
]);
let result = {
page: pagePath.page,
query: query.query,
};
if(isConfirmSave){
let isSave = await helper.confirm("是否添加页面到本地编译列表", true);
if (isSave) {
await helper.savePage(result, dir);
}
}else{
await helper.savePage(result, dir);
}
return result;
},
//获取页面path
async getPagePath(dir, message,type = "select") {
if (type === "select") {
let project = getProjectByDir(dir);
let pages = project.appInfo.pages;
console.log(pages)
return inquirer.prompt([
{
type: "list",
message: message || "请选择页面",
name: "page",
choices: pages,
},
]);
}
if (type === "input")
return inquirer.prompt([
{
type: "input",
message: message || "请输入页面路径",
name: "page",
},
]);
},
//选择本地保存的编译
async selectCachePage(dir, message) {
let pageList = getProjectByDir(dir).pageList || [];
let res = await inquirer.prompt([
{
type: "list",
name: "pageName",
choices: pageList.map((i) => i.pageName),
message,
},
]);
return pageList.find((i) => i.pageName === res.pageName);
},
//保存编辑模式到本地
async savePage(result, dir) {
let projectList = getProjectList();
let currentProject = getProjectByDir(dir);
let pageList = currentProject.pageList || [];
let pageres = await inquirer.prompt([
{
type: "input",
name: "pageName",
message: "请输入页面名称",
validate(inp) {
if (!inp) {
return "页面名称不能为空";
} else if (pageList.find((i) => i.pageName === inp)) {
return "页面名称已被占用";
} else {
return true;
}
},
},
]);
pageList.push({
pageName: pageres.pageName,
page: result.page,
query: result.query,
});
projectList.forEach((item) => {
if (item.dir === dir) {
item.pageList = pageList;
}
});
setProjectList(projectList);
console.log(chalk.green("添加成功"));
},
//移除项目
async removeProjectFromList(all) {
let list = getProjectList();
if (!list.length) {
console.log(chalk.green("暂未添加项目~"));
return;
}
let configPath = getProjectListConfigPath();
if (!all) {
let res = await helper.selectProjectFromCmd("请选择要移除的项目");
list = list.filter((p) => {
return p.projectName !== res.projectName;
});
fs.writeFileSync(configPath, JSON.stringify(list, null, "\t"));
console.log(chalk.green(`项目'${res.projectName}'删除成功~`));
} else {
let confirm = await helper.confirm();
if (confirm) {
fs.writeFileSync(configPath, JSON.stringify([], null, "\t"));
console.log(chalk.green("已删除全部项目~"));
} else {
console.log(chalk.yellow("取消删除全部项目"));
}
}
},
//移除已缓存的编译模式
async removeProjectPage(all){
let project = await helper.selectProjectFromCmd()
if(!project) {
return console.log(chalk.red('请先保存项目'))
}
if(!project.pageList?.length){
return console.log(chalk.yellow('该项目暂未保存编译页面'))
}
if(all){
project.pageList = []
}else{
let page = await helper.selectCachePage(project.dir)
project.pageList = project.pageList.filter(i=>i.pageName !== page.pageName)
}
setProjectByDir(project.dir,project)
console.log(chalk.green(`页面删除成功`))
logPageList(project.pageList)
},
//添加页面到项目
async addPageToProject(message,type="select", ){
let projectList = getProjectList()
if(!projectList.length) {
return console.log(chalk.red('请先保存项目'))
}
let selectProject = await helper.selectProjectFromCmd()
await helper.selectPage(selectProject.dir, message||"请输入要保存的页面路径", type,false);
}
};
module.exports = helper;