前言

我们的项目是基于vue-cli搭建的,每次需要新加一个页面需要操作以下步骤:

在views文件夹下面新建一个文件夹,用来存放新页面的.vue文件。

需要在routes.js文件里面新添加一个路由。

按照上述操作以后,才可以正常访问新添加的页面,之后才开始对新页面进行正常开发。但是这样的机械化步骤我们完全可以用代码帮我们执行,更进一步,对于一些简单的页面,我们甚至可以一键生成页面,包括从后端请求数据等操作。

自动生成页面

我们可以按照模板的方式生成想要的页面,我这里说两种页面,

一种是什么都没有的空白页,生成空白页就相当于是初始化一个新页面然后接着开发。

另一种是生成一些比较固定布局的简单页面,比如我们的业务中经常会有需求是写一个页面,就一个表格展示一下后端返回的数据,顶多就是再加个删除,添加和编辑。像这种简单的页面,完全可以使用代码自动生成。

我这里主要是使用配置文件的方式来设置我们的模板。

生成表格页

为了操作方便,我们可以在项目根目录新建一个auto-build-page文件夹用来存放我们之后要写的所有代码和模板。

编辑配置文件

我们在auto-build-page文件夹下新建一个addConfig.js文件,里面存放我们定义的配置:

var addConfig = [

{

// 测试生成表格页

open: true, // 参与生成 false表示改配置不参与生成页面

helloworld: false, // 是否是空白页

desc: '自动生成表格页', // 页面描述

name: 'autoTablepage', // 页面名称

getlist: {

// 表格数据请求相关

method: 'GET',

url: 'http://test.req/getlist',

},

},

{

// 测试生成空白页

open: true,

helloworld: true,

desc: '自动生成空白页面',

name: 'autoHellopage',

},

]

module.exports = addConfig

复制代码

配置的含义在注释中已经详细说明了

按照配置文件生成页面.vue文件

我们在auto-build-page文件夹下新建一个template-table.vue文件,存放我们的表格页模版,我们使用的是element-ui组件:

%title%

{{scope.row[scope.column.property]}}

const CONFIG={

method:"%method%",

geturl:"%geturl%",

};

export default {

data() {

return {

tableData: [],

tableDataHeader: [],

};

},

methods: {

formatOther(row) {

return JSON.stringify(row, null, 2);

},

getList(params={}) {

axios({

method: CONFIG.method,

url: CONFIG.geturl,

data: params

}).then(res=>{ // 后端返回的数据需要按照这种格式

console.log(res);

this.tableData=res.data.tableData;

this.tableDataHeader=res.data.tableDataHeader;

});

}

},

mounted(){

this.getList();

}

};

复制代码

可以看见表格页模板里面有很多两个%包起来的变量,这是等下我们需要按照配置文件进行替换的变量。

我们继续在auto-build-page文件夹下新建一个build-page.js文件,里面写的是整个自动化操作的代码

var addConfig = require('./addConfig')

var fs = require('fs')

var path = require('path')

var shell = require('shelljs')

shell.echo('>>>>>>')

shell.echo('开始新建页面')

addConfig.forEach((ele) => {

if (ele.open) {

buildPage(ele)

}

})

复制代码

我们循环配置文件里面的配置,支持生成多个页面。对文件的操作我们直接使用node的fs模块完成。

读取模板文件,并根据配置文件,对模板文件里面的变量进行替换:

function buildPage(config){

var paths = path.resolve(`./src/views/${config.name}`)

shell.echo('页面地址:' + paths)

mkdirSync(paths, function(){

var str = ''

if (config.helloworld) {

// 新建空白页,读取空白页模版

str = handleStr(

readF(path.resolve('./template-helloworld.vue')),

config

)

} else {

str = handleStr(

readF(path.resolve('./template-table.vue')),

config

)

}

// 写入文件

writeF(paths + '/index.vue', str)

shell.echo('开始新增路由……')

addRou(`./views/${config.name}/index.vue`, config)

})

}

复制代码

根据配置文件替换%包起来的变量:

function handleStr(str, config){

if (config.helloworld) {

return str

}

str = str.replace('%title%', config.desc)

str = str.replace('%method%', config.getlist.method)

str = str.replace('%geturl%', config.getlist.url)

return str

}

复制代码

添加路由

接下来是添加路由,在此之前我们还是需要添加一个路由的模板文件,在auto-build-page文件夹下新建一个template-route.txt文件:

{

path: '%path%',

component: Home,

name: '%name%',

redirect: { path: '%repath%' },

children: [

{

path: '%repath%',

component: (resolve) =>

require(['%requirepath%'], resolve),

name: '%name2%'

}

]

},

复制代码

里面根据我们路由规则,写入模板。

回到build-page.js文件,我们继续书写添加路由的操作,我们先读取路由模板:

function addRou(paths, config){

var templateStr = handleRouStr(

readF(path.resolve('./auto-build-page/template-route.txt')),

config,

paths

)

// 添加到路由文件

addToConf(templateStr)

}

function handleRouStr(str, config, paths){

str = str.replace(/%path%/g, `/${config.name}`)

str = str.replace(/%name%/g, config.desc)

str = str.replace(/%name2%/g, `${config.desc}首页`)

str = str.replace(/%repath%/g, `/${config.name}/index`)

str = str.replace(/%requirepath%/g, paths)

return str

}

复制代码

将路由添加到vue项目src下的routes.js文件里面:

function addToConf(str){

str += '// add-flag' // 添加的位置标记

var confStr = handleConfRouStr(readF(path.resolve('./src/addRoute.js')), str)

writeF(path.resolve('./src/addRoute.js'), confStr)

shell.echo('路由添加成功!')

shell.echo('结束生成页面')

shell.echo('>>>>>>')

}

function handleConfRouStr(ori, str){

ori = ori.replace('// add-flag', str)

return ori

}

复制代码

我这里是为了避免原来的routes.js文件,我新建了一个addRoute.js文件,然后在routes.js文件中引入,和原来的合并以下即可。

routes.js:

// 自动生成页面--自动添加路由

import addRoute from './addRoute'

let routes = []

let lastRoute = routes.concat(addRoute)

export default lastRoute

复制代码

addRoute.js:

const addRoute = [

// add-flag

// 不能删除

]

export default addRoute

复制代码

接下来我们需要在package.json文件里面的scripts里面添加运行的脚本,这样,只需要执行npm run 命令就可以运行自动生成的操作:

复制代码

"scripts": {

"dev": "vue-cli-service serve",

"build": "vue-cli-service build",

"bpage": "node ./auto-build-page/build-page.js"

},

现在执行npm run bpage 控制台输出:

>>>>>>

开始新建页面

页面地址:./src/views/autoTablepage

页面地址:./src/views/autoHellopage

开始新增路由……

路由添加成功!

结束生成页面

>>>>>>

复制代码

生成空白页

只需要添加一个空白页的模板就行,在auto-build-page文件夹下新建一个template-helloword.vue文件:

hello world

data() {

return {};

},

methods: {},

mounted() {}

};

复制代码

前端 html自动生成,前端工程化-自动生成页面相关推荐

  1. node.js require 自动执行脚本 并生成html,利用node.js实现自动生成前端项目组件的方法详解...

    本文主要给大家介绍了关于利用node.js实现自动生成前端项目组件的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍: 脚本编写背景 写这个小脚本的初衷是,项目本身添加一个组件太 ...

  2. 自动生成文章的html,文章自动更新工具|自动生成文件|自动伪原创|文章自动插入关键词工具...

    概念网络发布一款自动更新文章的工具, 该套工具可用概念的文章站程序, 概念的发布站程序, 概念的企业站程序, 只要在服务器一直开着这个工具, 工具会更具配置文件的配置, 每天定时的更新网站的文章, 文 ...

  3. 软件测试作业8:分析自动售货机软件例子生成的判定表图例

    作业8 1.分析 Chap.5 (Lec.19) 自动售货机软件例子生成的判定表图例的第6列和第23列,分别给出: (1).输入条件的自然语义陈述: (2).输出结果的自然语义陈述: (3).用命题逻 ...

  4. javamail发送html正文文件_Python实现-生成测试报告amp;自动邮件发送

    之前单独介绍了生成测试报告和自动发送邮件,那么现在把两者整合到一起:生成测试报告后然后自动发送邮件,这里只是简单的整合实现功能,其实还可以优化的,先用吧,后面再慢慢优化 先看下目录,其实目录还是一样, ...

  5. SpringBoot集成Swagger2自动生成友好的RestApi测试页面及文档

    springBoot集成swagger2 水煮鱼又失败了 https://www.jianshu.com/p/002ce2f26103 1 背景 springBoot作为微服务首选框架,为其他服务提供 ...

  6. angelajs中ajax,前端测试数据怎么利用Mock.js进行生成

    前端测试数据怎么利用Mock.js进行生成 发布时间:2020-12-14 14:17:47 来源:亿速云 阅读:108 作者:Leah 本篇文章为大家展示了前端测试数据怎么利用Mock.js进行生成 ...

  7. Jhipster生成前端为Vue的项目引入Element-UI

    Jhipster生成前端为typescript 的Vue的项目引入Element-UI 在main.ts /* 引入element-ui */ import * as ElementUI from ' ...

  8. CodeFun-UI 设计稿智能生成前端源代码

    现在市场对前端开发工程师的要求越来越高,前端还原设计稿已经是最基本且不可避免的力气活了.在前端领域,想提升,就需要不断的学习.但是学习的时间哪里来呢?提高工作效率是正解,让你的24小时更有意义. Co ...

  9. Art Blocks:生成艺术的自动售货机

    撰文:程天一 来源:海外独角兽 代码和软件已经占据了我们的生活,但是使用代码创作出的生成艺术在过去很多年中始终被低估.2021 年夏天开始的 NFT 和 Art Blocks 热潮改变了这一点. Ar ...

  10. 基于.Net Core Web MVC的图书查询系统——第四章,添加模型并使用EF Core生成基架自动生成控制器和视图

    基于.Net Core Web MVC的图书查询系统 第一章,.Net Core Web MVC配置身份验证和注册登录功能并修改默认页面 第二章,.Net Core Web MVC配置邮件发送服务 第 ...

最新文章

  1. python基础知识面试题-Python 基础面试题总结
  2. 如何使用Java Enum
  3. Debian 3.1 (Sarge) 正式发布,Knoppix也升级到最后一个单CD版3.9
  4. web工程中集成cas单点登录
  5. php 汉字转拼音类,PHP汉字转换拼音的类_php
  6. drools dmn_Drools DMN最新开源引擎性能改进
  7. 深度学习修炼(二)——数据集的加载
  8. 【OpenCV 例程200篇】89. 带阻滤波器的传递函数
  9. mysql+字段+删除数据库表,MySQL命令行删除表中的一个字段
  10. Mac可读可写remount硬盘
  11. python定时重新初始化类_如何重新初始化类对象
  12. 学习:SQL Server的复合索引学习(转)
  13. python中的as是什么意思_python中as用法实例分析
  14. 浪潮财务软件遇到问题
  15. nessus下载后更新插件问题新的解决方法2020
  16. 安装win10虚拟机遇到的坑
  17. E45: ‘readonly‘ option is set (add ! to override)解决办法
  18. Appium服务器初始化参数(Capability)
  19. java计算机毕业设计在线交友系统2021源码+mysql数据库+系统+lw文档+部署
  20. CSS单位之vw、vh、vmin、vmax、%

热门文章

  1. 贝索斯要卸任 亚马逊换CEO!!!
  2. graphlan/iTOL画进化树记录
  3. elasticsearch报错org.elasticsearch.discovery.MasterNotDiscoveredException: null
  4. windows7系统重装的步骤,电脑重装win7
  5. 看图学网络 一 网络的组成
  6. Go Playground exercise
  7. 几种常见的十进制代码(笔记)
  8. CentOS7安装WPS中文字体问题
  9. Java图片处理:ico格式转PNG/JPG等格式
  10. RDIFramework.NET V3.3 WinForm版新增订单管理主从表事例