UNPKG

bia

Version:

a tool for download git repository

436 lines (407 loc) 11.3 kB
/* * @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 }