群控系统服务端开发模式-应用开发-前端操作记录功能展示

一、创建操作记录展示视图

        在根目录下src文件夹下views文件夹下permission文件夹下创建token文件夹,在token文件夹下,新建index.vue文件,代码如下:

<template>
    <div class="app-container">
        <div class="filter-container" style="float:left;">
            <el-form :inline="true" :model="searchParams" class="demo-form-inline">
                <el-form-item>
                    <el-input v-model="searchParams.username" style="width: 160px;" placeholder="请输入账号名称" clearable />
                </el-form-item>
                <el-form-item>
                    <el-date-picker
                            v-model="searchParams.create_time"
                            type="date"
                            placeholder="请选择日期"
                            value-format="yyyy-MM-dd"
                    >
                    </el-date-picker>
                </el-form-item>
                <el-form-item>
                    <el-select
                            v-model="searchParams.token_type"
                            placeholder="请选择操作类型"
                    >
                        <el-option v-for="item in tokenType" :key="item.id" :label="item.title" :value="item.id"/>
                    </el-select>
                </el-form-item>
                <el-form-item>
                    <el-button class="search-btn el-button--infoSearch" type="primary" @click="search()">搜索</el-button>
                    <el-button class="search-btn el-button--infoSearch" style="background:#F2F6FC;" @click="clearSearch">重置</el-button>
                </el-form-item>
            </el-form>
        </div>
        <div class="filter-container" style="float:right;">
            <el-button class="filter-item" style="margin-left: 10px;" @click="search(currentPage)">刷新</el-button>
        </div>
        <el-table
                ref="resTable"
                :data="list"
                row-key="id"
                highlight-current-row
                max-height="750"
                default-expand-all
                style="width: 100%;margin-top:10px;"
                border
                :default-sort="{prop: 'id', order: 'descending'}"
        >
            <el-table-column type="selection" width="50" align="center" />
            <el-table-column align="center" label="ID" sortable prop="id">
                <template slot-scope="{row}">
                    <span>{{ row.id }}</span>
                </template>
            </el-table-column>
            <el-table-column align="center" label="具体操作">
                <template slot-scope="{row}">
                    <span>{{ row.menu_name }}{{ row.token_type }}</span>
                </template>
            </el-table-column>
            <el-table-column align="center" label="操作账号">
                <template slot-scope="{row}">
                    <span>{{ row.username }}</span>
                </template>
            </el-table-column>
            <el-table-column align="center" label="操作时间">
                <template slot-scope="{row}">
                    <span>{{ row.login_time }}</span>
                </template>
            </el-table-column>
            <el-table-column align="center" label="操作">
                <template slot-scope="{row}">
                    <el-button v-if="$store.getters.butts.includes('ParamDepartmentIndexDetails')" size="mini" @click="handleDetails(row.id)" type="info">详情</el-button>
                </template>
            </el-table-column>
        </el-table>
        <div class="block">
            <el-pagination
                    :hide-on-single-page="true"
                    :current-page="currentPage"
                    :page-sizes="pageSizes"
                    :page-size="currentSize"
                    layout="total, sizes, prev, pager, next, jumper"
                    :total="dataTotal"
                    @size-change="handleSizeChange"
                    @current-change="handleCurrentChange"
            />
        </div>
        <transition name="dialog-fade">
            <el-dialog :visible.sync="dialogDetails" title="详情" :close-on-click-modal="false" :close-on-press-escape="false">
                <el-form ref="resForm" :model="resTemp" label-position="right" label-width="100px">
                    <el-form-item label="操作账号">
                        <el-input v-model="resTemp.username" placeholder="请填写操作账号" disabled />
                    </el-form-item>
                    <el-form-item label="操作类型">
                        <el-input v-model="resTemp.token_menu_type" placeholder="请填写操作类型" disabled />
                    </el-form-item>
                    <el-form-item label="操作Token">
                        <el-input v-model="resTemp.token" placeholder="请填写操作Token" disabled />
                    </el-form-item>
                    <el-form-item label="登录时随机码">
                        <el-input v-model="resTemp.random_number" placeholder="请填写登录时随机码" disabled />
                    </el-form-item>
                    <el-form-item label="创建日期">
                        <el-input v-model="resTemp.create_time" placeholder="请填写创建日期" disabled />
                    </el-form-item>
                    <el-form-item label="创建时间">
                        <el-input v-model="resTemp.login_time" placeholder="请填写创建时间" disabled />
                    </el-form-item>
                    <el-form-item label="过期时间">
                        <el-input v-model="resTemp.expire_time" placeholder="请填写过期时间" disabled />
                    </el-form-item>
                </el-form>
                <div slot="footer" class="dialog-footer">
                    <el-button @click="dialogDetails=false">取消</el-button>
                </div>
            </el-dialog>
        </transition>
    </div>
</template>
<script>
    import { getInfo, getList } from '@/api/permission/token'
    export default {
        name: 'PermissionTokenIndex', // 名空间
        // 初始化数据
        data() {
            return {
                list: [], // 初始化管理员列表
                tokenType:[
                    {'id':1,'title':'登录'},
                    {'id':2,'title':'退出'},
                    {'id':3,'title':'自动退出'},
                    {'id':4,'title':'列表'},
                    {'id':5,'title':'所有'},
                    {'id':6,'title':'详情'},
                    {'id':7,'title':'保存'},
                    {'id':8,'title':'启禁用'},
                    {'id':9,'title':'删除'},
                    {'id':10,'title':'获取个人资料'},
                    {'id':11,'title':'修改个人资料'},
                    {'id':12,'title':'获取菜单权限'},
                    {'id':13,'title':'上传文件'}
                ], // 初始化操作类型
                pageSizes: [10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 200, 300, 400, 500],
                currentPage: 1, // 当前页数
                currentSize: 10, // 每页条数
                dataTotal: 0, // 总数据
                searchParams: {
                    username: '',
                    create_time: '',
                    token_type: ''
                },
                // 要提交数据
                resTemp: {
                    id: 0, // 0 添加 >0 编辑
                    token_menu_type: '',
                    token: '',
                    random_number: '',
                    create_time: '',
                    login_time: '',
                    expire_time: '',
                    username: ''
                },
                dialogDetails: false
            }
        },
        // 初始化执行的
        created() {
            this.getList()// 获取管理员数据
        },
        // 所有的方法都需要放到这个里面
        methods: {
            // 搜索
            search() {
                this.getList(1)
            },
            // 管理员数据 --异步
            async getList(page = 0) {
                const params = {
                    currentPage: page === 0 ? this.currentPage : page,
                    currentSize: this.currentSize,
                    ...this.searchParams
                }
                await getList(params).then(res => {
                    this.list = res.data.list
                    this.dataTotal = res.data.meat.total * 1
                })
            },
            // 清除搜索功能
            clearSearch() {
                this.searchParams = {
                    username: '',
                    create_time: '',
                    token_type: ''
                }
                this.getList()
            },
            // 详情
            handleDetails(id){
                getInfo({ id: id }).then(res => {
                    const row = res.data
                    this.resTemp = Object.assign({}, row)
                    this.resTemp.token_menu_type = row.menu_name + row.token_type
                    this.dialogDetails = true
                    this.$nextTick(() => {
                        this.$refs['resForm'].clearValidate()
                    })
                })
            },
            // 每页条数切换
            handleSizeChange(val) {
                this.currentSize = val
                this.getList()
            },
            // 页数切换
            handleCurrentChange(val) {
                this.currentPage = val
                this.getList()
            }
        }
    }
</script>
<style lang="scss" scoped>
    .app-container {
        padding:10px;
        .roles-table {
            margin-top: 30px;
        }
        .permission-tree {
            margin-bottom: 30px;
        }
    }
    .el-image-viewer__close{
        color: #fff;
    }
    .roleId .el-select{
        width:100%;
    }
</style>

二、创建操作记录API数据

        在根目录下src文件夹下api文件夹下permission文件夹下创建操作记录api文件并命名为token.js,代码如下:

import request from '@/utils/request'
// 列表
export function getList(params) {
    return request({
        url: '/permission/token/get_list',
        method: 'get',
        params:params
    })
}
// 所有
export function getAll() {
    return request({
        url: '/permission/token/get_all',
        method: 'post'
    })
}
// 获取
export function getInfo(data) {
    return request({
        url: '/permission/token/get_info',
        method: 'post',
        data
    })
}

三、提前说明

        明天将再新建一个版本,这个版本的后端管理框架,到此可以结束咯。下周一或者下周二进行一个总结。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/936788.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【AIGC】如何高效使用ChatGPT挖掘AI最大潜能?26个Prompt提问秘诀帮你提升300%效率的!

还记得第一次使用ChatGPT时&#xff0c;那种既兴奋又困惑的心情吗&#xff1f;我是从一个对AI一知半解的普通用户&#xff0c;逐步成长为现在的“ChatGPT大神”。这一过程并非一蹴而就&#xff0c;而是通过不断的探索和实践&#xff0c;掌握了一系列高效使用的技巧。今天&#…

电容Q值、损耗角、应用

电容发热的主要原因&#xff1a;纹波电压 当电容两端施加纹波电压时&#xff0c;电容承受的是变化的电压&#xff0c;由于电容内部存在寄生电阻&#xff08;ESR&#xff09;和寄生电感&#xff08;ESL&#xff09;.因此电容会有能量损耗&#xff0c;从而产生热量&#xff0c;这…

适配器模式的理解和实践

在软件开发中&#xff0c;我们经常遇到需要将一个类的接口转换成客户端所期望的另一种接口的情况。这种接口不匹配问题会导致类之间的不兼容&#xff0c;使得原本可以协同工作的两个类无法在一起工作。为了解决这一问题&#xff0c;适配器模式&#xff08;Adapter Pattern&…

大数据分析案例-基于梯度提升决策树回归算法构建医疗保险费用预测模型

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

轩凯生物被警示,财务内控不规范,华泰证券又被处罚

作者&#xff1a;Tracy 来源&#xff1a;IPO魔女 11月21日&#xff0c;南京轩凯生物科技股份有限公司&#xff08;简称“轩凯生物”&#xff09;被交易所下达书面警示的自律监管函。同时其保荐机构华泰联合证券和会计师事务所天衡&#xff0c;均受到监管处罚。这是今年来&…

IoTDB 常见问题 QA 第二期

关于 IoTDB 的 Q&A IoTDB Q&A 第二期来啦~我们将定期汇总社区讨论频繁的问题&#xff0c;并展开进行详细回答&#xff0c;通过积累常见问题“小百科”&#xff0c;方便大家使用 IoTDB。 Q1&#xff1a;集群扩容方法 问题 问题1&#xff1a;当 IoTDB 集群的存储占用达到…

RT-DETR融合[CVPR2024]Starnet中的star block特征提取模块

RT-DETR使用教程&#xff1a; RT-DETR使用教程 RT-DETR改进汇总贴&#xff1a;RT-DETR更新汇总贴 《Rewrite the Stars》 一、 模块介绍 论文链接&#xff1a;https://arxiv.org/abs/2403.19967 代码链接&#xff1a;https://github.com/ma-xu/Rewrite-the-Stars/tree/main 论…

Java web - 后端开发

一 Maven Maven是apache旗下的一个开源项目&#xff0c;是一款用于管理和构建java项目的工具。 Maven的作用

Unity学习笔记(二)如何制作角色动画

前言 本文为Udemy课程The Ultimate Guide to Creating an RPG Game in Unity学习笔记 创建一个角色 我们的目的是创建一个可移动、跳跃、冲刺等动作的角色 需要的组件&#xff1a;Rigidbody&#xff08;用于创建物理规则&#xff09;、Collider&#xff08;用于检测碰撞&am…

Pytest-Bdd-Playwright 系列教程(16):标准化JSON报告Gherkin格式命令行报告

Pytest-Bdd-Playwright 系列教程&#xff08;16&#xff09;&#xff1a;标准化JSON报告&Gherkin格式命令行报告 前言一、创建Feature文件二、创建步骤定义文件三、生成Cucumber格式的JSON报告四、使用Gherkin格式的命令行报告五、将BDD报告集成到Jenkins中总结 前言 在自动…

harbor镜像仓库搭建

Harbor简介 Harbor的发展背景和现状 Harbor项目起始于2014年左右,当时正值容器技术和微服务架构迅速崛起的时期。随着越来越多的企业开始采用容器化部署应用,对于私有镜像管理的需求也日益增长。传统的解决方案要么缺乏必要的企业级特性(如访问控制、安全性和可扩展性),…

Windows安装Jira

下载 Download Jira Data Center | Atlassian https://product-downloads.atlassian.com/software/jira/downloads/atlassian-jira-software-10.3.0-x64.exe 以管理员身份安装&#xff0c;否则弹出以下提醒 创建和配置MySQL数据库&#xff1a;参照 Connecting Jira applicat…

【企业微信自建应用-前端篇】企业微信自建应用开发流程详细介绍

前言 最近接到需求&#xff0c;需要我在企业微信端自建一个应用&#xff0c;用来接受PC端派发的工单&#xff0c;告警&#xff0c;公告等内容。 这里写一个帖子汇总一下我经历的全流程开发&#xff0c;当然这是基础的流程啊。因为功能要求也不高。后面如果开发更多的东西再补充…

[每周一更]-(第127期):Go新项目-Gin中使用超时中间件实战(11)

在项目不断迭代过程中&#xff0c;发现基础架构中&#xff0c;没有进行超时控制&#xff0c;有些接口由于网络延迟以及远程调用等情况存在请求时间过长的问题&#xff0c;消耗了资源&#xff0c;也降低了用户体验&#xff0c;这一讲我们聊下超时控制中间件&#xff0c;来完善我…

定时/延时任务-Kafka时间轮源码分析

文章目录 1. 概要2. TimingWheel2.1 核心参数2.2 添加任务2.3 推进时间 3. TimerTaskList3.1 添加节点3.2 删除节点3.3 刷新链表3.4 队列相关 4. 时间轮链表节点-TimerTaskEntry5. TimerTask6. Timer 和 SystemTimer - 设计降级逻辑7. 上层调用8. 小结 1. 概要 时间轮的文章&a…

【传感器技术】第6章 压电式传感器,压电材料,压电效应,电压放大器

关注作者了解更多 我的其他CSDN专栏 过程控制系统 工程测试技术 虚拟仪器技术 可编程控制器 工业现场总线 数字图像处理 智能控制 传感器技术 嵌入式系统 复变函数与积分变换 单片机原理 线性代数 大学物理 热工与工程流体力学 数字信号处理 光电融合集成电路…

端点鉴别、安全电子邮件、TLS

文章目录 端点鉴别鉴别协议ap 1.0——发送者直接发送一个报文表明身份鉴别协议ap 2.0——ap1.0 的基础上&#xff0c;接收者对报文的来源IP地址进行鉴别鉴别协议ap 3.0——使用秘密口令&#xff0c;口令为鉴别者和被鉴别者之间共享的秘密鉴别协议ap 3.1——对秘密口令进行加密&…

XDOJ 877 图的深度优先遍历

题目&#xff1a;图的深度优先遍历 问题描述 已知无向图的邻接矩阵&#xff0c;以该矩阵为基础&#xff0c;给出深度优先搜索遍历序列&#xff0c;并且给出该无向图的连通分量的个数。在遍历时&#xff0c;当有多个点可选时&#xff0c;优先选择编号小的顶点。&#xff08;即…

Spring--07-01---@Transactional注解失效的8大场景

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 Transactiona1.默认回滚&#xff1a;RuntimeException 1.Transactional注解失效的8大场景1.数据库引擎是否支持事务3.方法不是public的4.自身调用5.数据源没有配置事…

拆解大语言模型RLHF中的PPO

** 拆解大语言模型RLHF中的PPO ** 参考链接&#xff1a;https://zhuanlan.zhihu.com/p/645225982 为什么大多数介绍RLHF的文章&#xff0c;一讲到PPO算法的细节就戛然而止了呢&#xff1f;要么直接略过&#xff0c;要么就只扔出一个PPO的链接。然而LLM PPO跟传统的PPO还是有…