基于vue-element-ui开发Hproxy项目前端

2023-11-08

 hproxy项目前端使用vue-element-admin框架,页面为hook列表,和一个添加hook页面。

 

添加路由

编辑src/router/index.js文件,在constantRoutes列表追加如下路由内容

  {
    path: '/hproxy',
    component: Layout,
    redirect: '/hproxy/index',
    hidden: false,
    children: [
      {
        path: 'index',
        component: () => import('@/views/hproxy/index'),
        name: 'hproxy',
        meta: { title: 'HProxy 设置', icon: 'list', noCache: true }
      }
    ]
  }

如上说明页面路径为/hproxy/index,

页面为views/hproxy文件夹下的index.vue

页面的title为Hproxy设置,菜单icon为list,

页面内容

创建一个路径为src/views/hproxy的目录,同时在该目录下创建一个名为index.vue的文件

<template>
  <div class="app-container">
    <div>
      <el-row :gutter="20">
        <el-col :span="24" :xs="24">
          <el-card>
            <el-button type="primary" @click="createHook">添加HOOK</el-button>
          </el-card>
        </el-col>
      </el-row>
      <el-row :gutter="20">
        <el-col :span="24" :xs="24">
          <el-table
            :data="tableData"
            border
            style="width: 100%;">
            <el-table-column
              fixed
              prop="name"
              label="HOOK名称">
            </el-table-column>
            <el-table-column
              prop="type"
              label="HOOK类型"
              width="100">
            </el-table-column>
            <el-table-column
              prop="source"
              label="源IP"
              width="120">
            </el-table-column>
            <el-table-column
              prop="target"
              label="目标域名"
              width="120">
            </el-table-column>
            <el-table-column
              prop="content"
              label="HOOK内容">
            </el-table-column>
            <el-table-column
              prop="created_time"
              label="创建时间"
              width="160">
            </el-table-column>
            <el-table-column
              fixed="right"
              label="操作"
              width="60">
              <template slot-scope="scope">
                <el-button type="text" size="small" @click="editHook(scope.row)">编辑</el-button>
              </template>
            </el-table-column>
          </el-table>
          <div style="text-align: right; margin: 5px;">
            <el-pagination
              background
              layout="prev, pager, next"
              :page-size="query.pageSize"
              :total="query.total">
            </el-pagination>
          </div>
        </el-col>
      </el-row>
      <el-row :gutter="20">
        <el-col :span="24" :xs="24">
          <el-drawer
            title=""
            :visible.sync="drawer"
            :with-header="false"
            size="50%"
          >
            <div style="padding: 10px;">
              <h3>{{ title }}</h3>
              <el-divider content-position="left"></el-divider>
              <el-form ref="form" :model="form" label-width="80px">
                <el-form-item label="名称">
                  <el-input v-model="form.name" placeholder="请输入HOOK名称" />
                </el-form-item>
                <el-form-item label="类型">
                  <el-select v-model="form.type" placeholder="请选择HOOK类型">
                    <el-option label="请求HOOK" value="REQUEST" />
                    <el-option label="响应HOOK" value="RESPONSE" />
                  </el-select>
                </el-form-item>
                <el-form-item label="源IP">
                  <el-input v-model="form.source" placeholder="请输入需要处理的请求IP" />
                </el-form-item>
                <el-form-item label="目标域名">
                  <el-input v-model="form.target" placeholder="请输入需要处理的目标域名" />
                </el-form-item>
                <el-form-item label="脚本内容">
                  <el-input type="textarea" :autosize="{ minRows: 8, maxRows: 12}" v-model="form.content" placeholder="请输入HOOK脚本内容" />
                </el-form-item>
                <el-form-item>
                  <el-button type="primary" @click="onSubmit">保存</el-button>
                  <el-button @click="drawer = false">取消</el-button>
                </el-form-item>
              </el-form>
            </div>
          </el-drawer>
        </el-col>
      </el-row>
    </div>
  </div>
</template>

<script>
import { submit, pullData } from '@/api/hproxy'
export default {
  name: 'HProxy',
  data() {
    return {
      title: '',
      drawer: false,
      tableData: [],
      form: {
        'name': '',
        'type': '',
        'source': '',
        'target': '',
        'content': ''
      },
      query: {
        pageNum: 1,
        pageSize: 10,
        total: 0
      }
    }
  },
  mounted() {
    this.fetchData()
  },
  methods: {
    createHook() {
      this.title = '添加HOOK'
      this.drawer = true
      this.form = {}
    },
    editHook(row) {
      this.title = '编辑HOOK'
      this.drawer = true
      this.form = row
    },
    onSubmit() {
      submit(this.form).then((response) => {
        if (response.code === 0) {
          this.query.pageNum = 1
          this.fetchData()
          this.$message({
            showClose: true,
            message: '保存成功!',
            type: 'success'
          })
          this.drawer = false
        }
      })
    },
    fetchData() {
      pullData({
      ...this.query
      }).then((response) => {
        if (response.code === 0) {
          this.tableData = response.data.list
          this.page = response.data.page
        }
      })
    }
  }
}
</script>

分析:

  • 修改VUE项目下文件时,正在运行的项目会自动重新编译。
  • 添加HOOK按钮绑定了createHook函数,把title设置为添加HOOK,drawer设置为true,即显示右侧面板,form设置为空
  • 编辑按钮绑定了 @click="editHook(scope.row) title设置为编辑HOOK,drawer设置为true,form设置为row
  • 保存按钮@click="onSubmit" drawer设置为false,拉取数据,将messge设置为保存成功。
  • 取消按钮 @click="drawer = false"
  • el-drawer是一个抽屉 drawer为true时显示,drawer为false时隐藏
  • el-pagination是一个翻页组件 @current-change="handleCurrentChange"
  • fetchData函数拉取响应的数据

访问API文件

在index.vue里引用了api下的hproxy.js文件中的两个函数

import request from '@/utils/request'

export function submit(data) {
  return request({
    url: '/api/hproxy/_plugs_settings_',
    method: 'post',
    headers: {
      'Content-Type': 'application/json'
    },
    data
  })
}

export function pullData(params) {
  return request({
    url: '/api/hproxy/_plugs_settings_',
    method: 'get',
    params
  })
}
  • api目录下的http.js为api访问函数,submit函数以post方式访问后端接口/api/hproxy/_plugs_settings_
  • pullData以get方式后端访问接口/api/hproxy/_plugs_settings_

总结

1、在src/router/index.js添加路由
2、路由中引用的component就是一个vue文件,在src下新建vue文件,添加页面元素。页面元素是基于element-ui的,用v-model和数据做绑定。
处理函数(script部分) import { submit, pullData }引用的是api下的js文件。
3、在api下新建hproxy.js文件,用来请求后端接口。
 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于vue-element-ui开发Hproxy项目前端 的相关文章

随机推荐

  • 网络地址与直接广播地址有关计算

    一 已知IP地址和子网掩码 1 网络地址 网络号 IP 子网掩码 2 直接广播地址 网络地址 网络号不变 主机号变全1 3 主机号 IP 取反 子网掩码 网络号全0 4 子网内第一个可用IP地址 网络号 1 网络地址 1 5 主机数 2 n
  • C++ explicit关键字浅析

    explicit关键字 今天在看std thread的时候 发现他的构造函数是这样的 explicit thread Fn fn Args args explicit这个关键字很眼熟 因为在Qt中默认的构造函数也是用的这个关键字 expli
  • Unity 2D像素游戏序列帧动画制作规范

    一 问题背景 笔者遇到了很多很多跟美术策划协作的问题 首先声明本文不考虑SpriteAltas 也不绝对正确 仅供参考 错误可以在评论区指出我进行修改以免误导 我们可以清楚的看到跳跃后会出现角色跟碰撞器大小不一样的情况 这个时候如果我去碰右
  • 软件开发中的SD、SE、QA和RD是什么意思?

    2019独角兽企业重金招聘Python工程师标准 gt gt gt QA QA即英文QUALITY ASSURANCE 的简称 中文意思是品质保证 其在ISO8402 1994中的定义是 为了提供足够的信任表明实体能够满足品质要求 而在品质
  • “卷爆了“的IT互联网行业,为啥至今还有人头铁往里冲?

    细数互联网过往的发展史 造就了成千上万的企业家 创业者 众多职场人趋之若鹜地选择互联网行业 想从这个领域捞一桶金 但不知道从什么时候开始 一篇篇关于互联网红利消失 流量枯竭的文章接踵而至 现在转行互联网 做什么看起来都是那么困难 很多从业者
  • 有趣的数据结构算法3——单链表尾插法和头插法的实现

    有趣的数据结构算法3 单链表尾插法和头插法的实现 什么是单链表 头插法的实现 尾插法的实现 头插法实现代码 尾插法实现代码 GITHUB下载连接 以前学习C语言的时候 对于指针 链表什么的是最害怕的 但是现在 什么是单链表 单链表是一种链式
  • 在Visual Studio Code中使用CSSComb格式化CSS文件

    在Visual Studio Code中使用CSSComb格式化CSS文件 最近在使用Visual Studio Code 开始逐渐上手 发现非常好用 不管是在JS文件还是在HTML文件中 右键点击 都有 格式化文件 的菜单 帮助我们排版
  • linux查看服务端口号、查看端口(netstat、lsof)

    linux查看服务端口号 查看端口 netstat lsof netstat atulnp会显示所有端口和所有对应的程序 用grep管道可以过滤出想要的字段 a all 表示列出所有的连接 服务监听 Socket资料 t tcp 列出tcp
  • 配置docker阿里云镜像加速

    默认情况下docker安装镜像文件是从docker官方的镜像中心下载 https hub docker com 有时速度慢 可以通过配置docker阿里云镜像来加速 配置后 就从国内阿里云下载 注册阿里云用户 登录 gt 工作台 gt 产品
  • 200 ok 几种状态

    浏览器加载资源成功一般会有几种状态 200 ok 从原始服务器请求成功 200 ok from cache 200 ok from disk cache 200 ok from memory cache 304 not modified 向
  • mysql sql语句查询指定月份

    需求 根据输入年月 查询指定数据 方法1 SELECT FROM 表名 WHERE YEAR 列名 年份 AND MONTH 列名 月份 方法2 SELECT FROM 表名 WHERE date format 列名 Y m 2020 01
  • JDBC快速入门,mysql8.0版本+druid+spring jdbc使用,出现因版本错误的解决方法

    JDBC核心技术 JDBC概述 数据持久化 持久化 persistence 把数据保存到可掉电式存储设备中以供之后使用 大多数情况下 特别是企业级应用数据持久化意味着将内存中的数据保存到硬盘上加以 固化 而持久化的实现过程大多通过各种关系数
  • runaway

    runaway函数 这个程序是查看你所用的电脑中所分配的栈的大小 include
  • 解决Java从MySQL读取大量数据时卡…

    今天晚上突然有个服务无法启动 这个服务在启动的时候会从数据库中加载一些数据 查看日志 有开始加载的日志 但没有完成加载的日志 判断问题是在加载数据时卡住 用top查看进程 发现CPU占用为0 又怀疑可能是因为jvm内存不够 用jstat查看
  • js限制输入框字数

  • Ubuntu上配置VS Code调试C++

    直接使用GDB在Ubuntu上调试C code 有时不是很方便 这里介绍下在Ubuntu上通过Visual Studio Code调试C code操作步骤 通过CMake编译 安装所需依赖 1 在Ubuntu上安装Visual Studio
  • Qt学习之QMainWindow(一)QMainWindow简介

    详细的后续会讲到 这里重在理解过程 Qt中的顶层窗口称为MainWindow 属于类QMainWindow QMainWindow也是继承于QWidget 通过子类化QMainWindow可以创建一个应用程序的窗口 MainWindow的结
  • SpringBoot项目使用EasyExcel读取上传Excel

    SpringBoot项目使用EasyExcel读取上传Excel 1 EasyExcel简介 EasyExcel是一个基于Java的简单 省内存的读写Excel的开源项目 在尽可能节约内存的情况下支持读写百M的Excel EasyExcel
  • Mybatis的mapper.xml批量插入、修改sql

    今天要有个功能 要进行一批数据的插入和修改 为了不频繁调用数据库 所以想到了批量插入和修改 因为从毕业后 就没写过批量插入和批量修改 所以在这里记录一下 避免后续再遇到忘记怎么写了 批量插入 传入的参数是List lt 实体 gt list
  • 基于vue-element-ui开发Hproxy项目前端

    hproxy项目前端使用vue element admin框架 页面为hook列表 和一个添加hook页面 添加路由 编辑src router index js文件 在constantRoutes列表追加如下路由内容 path hproxy