自动化构建vue页面

这篇具有很好参考价值的文章主要介绍了自动化构建vue页面。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.创建autoConfig.js,并填写设置数据

var addConfig = [{
    // 测试自动生成页面
    open: true, // 参与生成 false表示改配置不参与生成页面
    addFile: true, // false 不加文件夹  true 新增文件夹-----组件文件夹
    templateName: 'auto_home.vue', //使用模板的名称
    pagePath: 'businessAnalysis', //创建页面的文件夹地址
    name: 'autoTablepage', // 文件夹名称
    VueName: 'index.vue', // Vue文件名称
    routeFile: 'businessAnalysis', //路由对应文件
    routePath: 'Management', //路由对应地址
    routeName: 'RouteTest', //路由name名称
    /* 路由参数配置 */
    title: '测试路由', //mate的title内容
    icon: 'middlequan', //mate的icon内容
    auth: ['Procured.procuredOrder'], //mate的auth内容
    pageInfo: {
        // 表格数据请求相关
        title: '自动生成',
        url: '', //页面获取数据接口
        tableJson: "autoTable.json", //table的数据
    },
}]
module.exports = addConfig

2.新建build-page.js文件,引入需要的内容

var addConfig = require('./addConfig')
var fs = require('fs')
var path = require('path')
var shell = require('shelljs')

3.遍历数据,判断是否生成文件或文件夹

addConfig.forEach((config) => {
    if (config.open) {
        var paths
        if (config.addFile) {
            /* 生成文件夹 */
            paths = path.resolve(`./src/views/${config.pagePath}/${config.name}`)
        } else {
            /* 不生成文件夹 */
            paths = path.resolve(`./src/views/${config.pagePath}`)
        }
        shell.echo('页面地址:' + paths)
        shell.echo('文件状态:' + fs.existsSync(paths))
        if (fs.existsSync(paths)) {
            /* 存在相同文件 删除后新建文件夹 */
            removeDir(config, paths)
            buildPage(config, paths)
        } else {
            /* 不存在相同文件 新建文件夹 */
            buildPage(config, paths)
        }
    }
})

3.1删除相同文件

/* 删除文件夹 */
function removeDir(config, paths) {
    shell.echo(config.addFile)
    if (config.addFile) {
        /* 新增目录 */
        let files = fs.readdirSync(paths)
        for (var i = 0; i < files.length; i++) {
            let newPath = path.join(paths, files[i]);
            shell.echo('删除文件:' + newPath)
            let stat = fs.statSync(newPath)
            if (stat.isDirectory()) {
                //如果是文件夹就递归下去
                removeDir(config, newPath);
            } else {
                //删除文件
                fs.unlinkSync(newPath);
            }
        }
        fs.rmdirSync(paths) //如果文件夹是空的,就将自己删除掉
    } else {
        /* 新增文件 */
        let newPath = path.join(paths, `/${config.VueName}`);
        if (fs.existsSync(newPath)) {
            fs.unlinkSync(newPath);
        }
    }
}

4.构建vue读取生成模板auto_add.vue,定义替换设置数据vue自动生成页面,vue.js,自动化,node.js

vue自动生成页面,vue.js,自动化,node.js 

 5.读取模板内容作为字符串输出,准备修改

function buildPage(config, paths) {
    shell.echo('页面地址:' + paths)
    if (config.addFile) {
        /* 新增文件夹后新增文件 */
        fs.mkdirSync(paths, (function () {
            fs.readFile(path.resolve(`./src/auto-build-page/template/${config.templateName}`), (err, data) => {
                if (!err) {
                    writePage(data.toString(), paths, config)
                }
            })
        }()))
    } else {
        /* 直接新增文件 */
        fs.readFile(path.resolve(`./src/auto-build-page/template/${config.templateName}`), (err, data) => {
            if (!err) {
                writePage(data.toString(), paths, config)
            }
        })
    }

}

 6.替换指定数据内容,修正模板字符串

/* 替换vue模板中指定内容 */
function handleStr(str, config) {
    if (config.helloworld) {
        return str
    }
    let map = config.pageInfo
    for (let k in map) {
        if (k == "tableJson") {
            var jsonList = require(`./tableJson/${map[k]}`)
            str = str.replace('%el-table-column%', handleTable(jsonList))
        } else {
            str = str.replace(`%${k}%`, map[k])
        }
    }
    r

7.新增vue并写入内容,准备添加路由

function writePage(vueStr, paths, config) {
    str = handleStr(
        vueStr,
        config
    )
    fs.writeFile(`${paths}/${config.VueName}`, str, (e) => {})
    shell.echo('开始新增路由……')
    /* 新增路由异步执行 */
    addToConf(config)
}

8.读取路由文件,对内容进行处理

function handleConfRouStr(ori, config) {
    let str = ori.split('export default')
    let routeMap = eval('(' + str[1] + ')')
    if (routeMap.children) {
        routeMap.children = recurRoute(routeMap.children, `${config.routePath}/${config.routeName}`, config)
        // shell.echo('修改的路由>>>')
        // shell.echo(routeMap.toString())
    }
    routeMap = `{${StringRoute(routeMap)}}`
    var pagePath = config.addFile ? `${config.pagePath}/${config.name}` : config.pagePath
    let url = `@/views/${pagePath}/${config.VueName}`
    shell.echo("地址 :" + url)
    routeMap = routeMap.replace('newChangeUrl', url)
    routeMap = routeMap.replace('fileName', config.routeFile)
    ori = [str[0], routeMap].join('export default')
    return ori
}

9.递归路由数据,通过设置数据进行路由配置

/* 递归处理路由 将新增内容填充至合适位置 */
function recurRoute(children, routePath, config) {
    let routeLeve = routePath.split('/').filter((v, i) => i > 0)
    /* 修改路由之后的内容不变 */
    if (routeLeve.length <= 0) {
        return children
    }
    /* 找到需要继续向下找的对应路径 */
    if (children.some(item => item.path === routeLeve[0])) {
        /* 是否存在children */
        let result = children.map(item => {
            if (item.path === routeLeve[0] && routeLeve.length === 1) {
                item.path = routeLeve[0]
                item.name = config.routeName
                item.component = () => import( /* webpackChunkName: 'fileName' */ "newChangeUrl")
                item.meta = {}
                item.meta.title = config.title
                item.meta.icon = config.icon
                item.meta.auth = config.auth
                if (config.sidebar == true || config.sidebar == false) item.meta.sidebar = config.sidebar
                return item
            } else if (item.path === routeLeve[0] && routeLeve.length > 1) {
                if (!item.children) {
                    item.children = []
                    item.children = recurRoute(item.children, routeLeve.join('/'), config)
                    return item
                } else {
                    item.children = recurRoute(item.children, routeLeve.join('/'), config)
                    return item
                }
            } else {
                return item
            }
        })
        return result
    }
    /* 找不到对应路径路由,新增路由地址 */
    if (children.every(item => item.path !== routeLeve[0])) {
        /* 新增路由 */
        let routeMap = {}
        routeMap.path = routeLeve[0]
        routeMap.name = config.routeName
        routeMap.component = () => import( /* webpackChunkName: 'fileName' */ "newChangeUrl")
        routeMap.meta = {}
        routeMap.meta.title = config.title
        routeMap.meta.icon = config.icon
        routeMap.meta.auth = config.auth
        if (config.sidebar == true || config.sidebar == false) routeMap.meta.sidebar = config.sidebar
        children.push(routeMap)
        return children
    }
}

10.将对象编译为字符串,准备内容输出

/* 将路由json对象编译成字符串 */
function StringRoute(routeMap) {
    let str = "" + ' \r\n   '
    for (let k in routeMap) {
        if (k === "children") {
            routeMap[k] = StringRoute(routeMap[k])
            str += k + ":" + "[" + routeMap[k].toString() + "]" + "," + ' \r\n   ' + "    "
        } else if (routeMap[k] instanceof Array) {
            str += k + ":" + "['" + routeMap[k].toString() + "']" + "," + ' \r\n   ' + "    "
        } else if (typeof routeMap[k] == 'function') {
            str += k + ":" + routeMap[k].toString() + "," + ' \r\n   ' + "    "
        } else if (typeof routeMap[k] == 'object') {
            routeMap[k] = StringRoute(routeMap[k])
            if (!isNaN(Number(k)) && (routeMap.length - 1) == Number(k)) {
                /* 当前为数组 && 最后一个对象    不加逗号 */
                str += "{" + routeMap[k] + "}" + ' \r\n  ' + "    "
            } else if (!isNaN(Number(k)) && (routeMap.length - 1) != Number(k)) {
                /* 当前为数组 && 不是最后一个对象 */
                str += "{" + routeMap[k] + "}" + "," + ' \r\n  ' + "    "
            } else {
                /* 属于对象 */
                str += k + ":" + "{" + routeMap[k] + "}" + "," + ' \r\n  ' + "    "
            }
        } else {
            if (k == "sidebar") {
                str += k + ":" + routeMap[k] + "," + ' \r\n  ' + "    "
            } else {
                str += k + ":'" + routeMap[k] + "'" + "," + ' \r\n  ' + "    "
            }

        }
    }
    return str
}

11.完成路由配置,生成结束

/* 新增路由 */
function addToConf(config) {
    var routeFile = `./src/router/modules/${config.routeFile}.js`
    var result = fs.readFileSync(path.resolve(routeFile), "utf-8");
    let confStr = handleConfRouStr(result.toString(), config)
    fs.writeFileSync(path.resolve(path.resolve(routeFile)), confStr)
    shell.echo('结束生成页面')
    shell.echo('>>>>>>')
}

12.在package.json当中配置运行代码vue自动生成页面,vue.js,自动化,node.js

 文章来源地址https://www.toymoban.com/news/detail-654928.html

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

13.运行代码,生成vue文件并配置路由

npm run bpage

vue自动生成页面,vue.js,自动化,node.js

 vue自动生成页面,vue.js,自动化,node.js

 

到了这里,关于自动化构建vue页面的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • AutoDev 1.5.3:精准的自动化测试生成、本地模型强化与流程自动化优化

    去年年初,我们开源 AutoDev 的初衷是: AutoDev 是一款基于 JetBrains IDE 的开源 AI 辅助编程插件。AutoDev 能够与您的需求管理系统(例如 Jira、Trello、Github Issue 等)直接对接。在 IDE 中,您只需简单点击,AutoDev 会根据您的需求自动为您生成代码。您所需做的,仅仅是对生成的代码

    2024年01月16日
    浏览(47)
  • GO项目自动化-根据库表字段自动生成API

    一个项目开发离不开数据库的增删改查,API功能也基本围绕着表的CRUD:增加(Create)、读取(Read)、更新(Update)和删除(Delete)。每个表写一个CRUD,方法都差不多,逻辑也非常相似。 那么有没有可能根据表结构直接自动化生成各个表的CRUD呢? 当然可以,前几篇文章已经介绍了gola

    2024年01月15日
    浏览(42)
  • 谈谈HMI 的自动化生成技术

            人机界面(HMI)是自动化领域不可或缺重要组成部分。尽管人机界面系统的设计看上去并没有太大的技术门槛,但是设计一个HMI系统的工作量是巨大的。如果你没有足够的耐心便完成不了一个通用的HMI系统。构建UI控件库是一个似乎永远完不成的事情,用户永远觉

    2024年02月06日
    浏览(32)
  • 接口自动化测试框架(pytest+allure+aiohttp+ 用例自动生成)

    近期准备优先做接口测试的覆盖,为此需要开发一个测试框架,经过思考,这次依然想做点儿不一样的东西。 接口测试是比较讲究效率的,测试人员会希望很快能得到结果反馈,然而接口的数量一般都很多,而且会越来越多,所以提高执行效率很有必要 接口测试的用例其实

    2024年02月07日
    浏览(59)
  • Python+selenium自动化生成测试报告

    前言 批量执行完用例后,生成的测试报告是文本形式的,不够直观,为了更好的展示测试报告,最好是生成HTML格式的。 unittest里面是不能生成html格式报告的,需要导入一个第三方的模块:HTMLTestRunner 一、导入HTMLTestRunner 1.这个模块下载不能通过pip安装了,只能下载后手动导

    2024年02月04日
    浏览(48)
  • API自动化测试【postman生成报告】

    PostMan生成测试报告有两种: 1、控制台的模式 2、HTML的测试报告 使用到一个工具newman Node.js是前端的一个组件,主要可以使用它来开发异步的程序。 一、控制台的模式 1、安装node.js 双击node.js进行安装,安装成功后在控制台输入node -v,检查是否安装成功。 2、安装newman 1)在

    2024年02月06日
    浏览(50)
  • Python自动化测试——在线生成接口文档

    目录 前言 API 文档导入生成 在项目详情页点击左侧 API 功能,进入 API 管理页面,直接点击下拉框选择导入 API  自动生成文档 通过使用接口文档工具 Eolink 演示如何自动生成文档 使用 API Factory 产品根据数据库生成 API 文档 结语 接口文档是项目开发中必需的说明文档,接口文

    2024年02月07日
    浏览(56)
  • 接口自动化测试框架开发 (pytest+allure+aiohttp+ 用例自动生成)

    目录 前言: 第一部分(整个过程都要求是异步非阻塞的) 读取 yaml 测试用例 http 请求测试接口 收集测试数据 第二部分 动态生成 pytest 认可的测试用例 后续(yml 测试文件自动生成) 前言: 开发一个接口自动化测试框架是一个很好的方式,可以提高测试效率和准确性。在这

    2024年02月16日
    浏览(59)
  • 接口自动化测试框架开发(pytest+allure+aiohttp+ 用例自动生成)

    近期准备优先做接口测试的覆盖,为此需要开发一个测试框架,经过思考,这次依然想做点儿不一样的东西。 接口测试是比较讲究效率的,测试人员会希望很快能得到结果反馈,然而接口的数量一般都很多,而且会越来越多,所以提高执行效率很有必要 接口测试的用例其实

    2024年01月23日
    浏览(52)
  • Python 自动化办公:一键批量生成 PPT

    Stata and Python 数据分析 一、导读 在实际工作中,经常需要批量处理Office文件,比如需要制作一个几十页的PPT进行产品介绍时,一页一页地制作不仅麻烦而且格式可能不统一。那么有什么办法可以一键生成PPT呢?Python提供的pptx 包就可以用来自动化处理ppt。 pytho****n-pptx 是一个

    2024年01月17日
    浏览(72)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包