bia
Version:
a tool for download git repository
436 lines (407 loc) • 11.3 kB
JavaScript
/*
* @Author: hzxulin@yeah.net
* @Date: 2018-11-19 16:36:56
* @Last Modified by: hzxulin@yeah.net
* @Last Modified time: 2019-09-27 12:44:55
*/
const inquirer = require('inquirer')
const utils = require('./utils')
const BASE_CONFIG = require('../../config/base.json')
/**
* 选择活动的类型
*/
const askActCategory = () => {
return new Promise((resolve, reject) => {
let choices = BASE_CONFIG.category.map((_v) => {
return {
name: _v.name,
value: _v.value,
}
})
const question = [
{
type: 'list',
name: 'category',
message: '请选择初始化的模版种类',
choices: choices,
},
]
try {
inquirer.prompt(question).then((answer) => {
resolve(answer.category)
})
} catch (err) {
reject(err)
}
})
}
/**
* 选择新版活动的类型
*/
const askActBusinessId = () => {
return new Promise((resolve, reject) => {
let choices = BASE_CONFIG.businessId.map((_v) => {
return {
name: _v.name,
value: _v.value,
}
})
const question = [
{
type: 'list',
name: 'businessId',
message: '请选择初始化的项目类型',
choices: choices,
},
]
try {
inquirer.prompt(question).then((answer) => {
resolve(answer.businessId)
})
} catch (err) {
reject(err)
}
})
}
/**
* 选择新版活动的模板类型
*/
const askTplCategory = () => {
return new Promise((resolve, reject) => {
let choices = BASE_CONFIG.tplCategory.map((_v) => {
return {
name: _v.name,
value: _v.value,
}
})
const question = [
{
type: 'list',
name: 'category',
message: '请选择初始化的模板类型',
choices: choices,
},
]
try {
inquirer.prompt(question).then((answer) => {
resolve(answer.category)
})
} catch (err) {
reject(err)
}
})
}
/**
* 选择严选活动的类型
*/
const askYXCategory = () => {
return new Promise((resolve, reject) => {
let choices = []
BASE_CONFIG.category.forEach((_v) => {
if (Array.isArray(_v.value.cvalue)) {
choices = _v.value.cvalue
return false
}
})
const question = [
{
type: 'list',
name: 'yxcategory',
message: '请选择严选模板种类',
choices: choices,
},
]
try {
inquirer.prompt(question).then((answer) => {
resolve(answer.yxcategory)
})
} catch(err) {
reject(err)
}
})
}
/**
* 选择项目属于pc还是h5
*/
const askPlatform = () => {
return new Promise((resolve, reject) => {
const question = [
{
type: 'list',
name: 'platform',
message: '请选择pc或移动端',
choices: [
{
name: 'PC&H5',
value: 0,
},
{
name: 'PC',
value: 1,
},
{
name: 'H5',
value: 2,
},
],
},
]
try {
inquirer.prompt(question).then((answer) => {
resolve(answer.platform)
})
} catch (err) {
reject(err)
}
})
}
/**
* 配置项目信息
* @param {array} list 项目如果有活动计划,则进行计划选择
*/
const askPageInfo = (list) => {
return new Promise((resolve, reject) => {
const nowDate = utils.getNowDate()
let question = [
{
type: 'input',
name: 'title',
message: '请输入项目名称',
validate: (_val) => {
if (/\S+/.test(_val)) {
return true
}
return '请输入正确的项目名称'
},
}, {
type: 'input',
name: 'startTime',
message: `请输入开始日期,时间默认为0点(格式: ${nowDate})`,
validate: function (_val) {
if (/^20\d{2}-\d{2}-\d{2}/.test(_val)) {
return true
}
return '请输入正确的日期'
},
}, {
type: 'input',
name: 'endTime',
message: `请输入结束日期,时间默认为0点,注意+1天(格式: ${nowDate})`,
validate: function (_val) {
if (/^20\d{2}-\d{2}-\d{2}/.test(_val)) {
return true
}
return '请输入正确的日期'
},
},
]
if (list && list.length) {
let projectQues = [{
type: 'checkbox',
name: 'projectId',
message: '请选择活动所属计划(可多选可不选)',
choices: list,
}]
question = projectQues.concat(question)
}
try {
inquirer.prompt(question).then((answer) => {
resolve(answer)
})
} catch (err) {
reject(err)
}
})
}
/**
* 选择eris的模板类型
*/
const askErisCategory = () => {
return new Promise((resolve, reject) => {
let choices = BASE_CONFIG.eris.map((_v) => {
return {
name: _v.name,
value: _v.value,
}
})
const question = [
{
type: 'list',
name: 'category',
message: '请选择初始化的模版种类',
choices: choices,
},
]
try {
inquirer.prompt(question).then((answer) => {
resolve(answer.category)
})
} catch (err) {
reject(err)
}
})
}
/**
* 递归查询页面归属id
* @param {array} list 清洗的数组
* @param {array} res 结果数组
*/
const askCateList = (list, res = []) => {
return new Promise((resolve, reject) => {
let choices = list.map(item => {
return {
name: item.name,
value: item.id,
}
})
const question = [
{
type: 'list',
name: 'cate',
message: '请选择页面归属',
choices: choices,
},
]
try {
inquirer.prompt(question).then((answer) => {
let curList = list.find(item => {
return item.id == answer.cate
})
let subList = curList.children
res.push(curList)
if (subList && subList.length) {
return resolve(askCateList(subList, res))
} else {
resolve(JSON.stringify(res))
}
})
} catch (err) {
reject(err)
}
})
}
/**
* 选择生成taro或者taro组件的开发框架
*/
const askTaroType = () => {
return new Promise((resolve, reject) => {
let choices = BASE_CONFIG.repo.bia2taro.map((_v) => {
return {
name: _v.name,
value: _v.value,
}
})
const question = [
{
type: 'list',
name: 'type',
message: '请选择初始化的框架类型',
choices: choices,
},
]
try {
inquirer.prompt(question).then((answer) => {
let repo = BASE_CONFIG.repo.bia2taro.filter(v => (v.value == answer.type))[0].repo
resolve({
type: answer.type,
repo,
})
})
} catch(err) {
reject(err)
}
})
}
/**
* 选择生成运营工作台子应用的模板
*/
const askOpsType = () => {
return new Promise((resolve, reject) => {
let choices = BASE_CONFIG.ops.map((_v) => {
return {
name: _v.name,
value: _v.value,
}
})
const question = [
{
type: 'list',
name: 'type',
message: '请选择初始化的框架类型',
choices: choices,
},
]
try {
inquirer.prompt(question).then((answer) => {
resolve({
repo: answer.type,
})
})
} catch(err) {
reject(err)
}
})
}
/**
* 获取taro component的信息
*/
const askTaroComponentInfo = () => {
return new Promise((resolve, reject) => {
let question = [
{
type: 'input',
name: 'name',
message: '请输入组件名称(英文)',
validate: (_val) => {
if (/^[a-zA-Z][a-zA-Z0-9]*$/.test(_val)) {
return true
}
return '请输入正确的组件名称'
},
},
{
type: 'input',
name: 'desc',
message: '请输入组件描述',
validate: (_val) => {
if (/\S+/.test(_val)) {
return true
}
return '请输入正确的组件描述'
},
},
{
type: 'input',
name: 'version',
message: `请输入版本`,
default: '0.0.1',
validate: function (_val) {
if (/^\d+\.\d+\.\d+/.test(_val)) {
return true
}
return '请输入正确的版本号'
},
},
]
try {
inquirer.prompt(question).then((answer) => {
resolve(answer)
})
} catch (err) {
reject(err)
}
})
}
module.exports = {
askActCategory,
askActBusinessId,
askTplCategory,
askYXCategory,
askPlatform,
askPageInfo,
askErisCategory,
askCateList,
askTaroType,
askTaroComponentInfo,
askOpsType
}