Vben Admin 自学记录 —— 路由跳转的基本使用及练习(持续更新中...)

news2024/9/23 23:22:40

路由

项目路由配置存放于 src/router/routes 下面。 src/router/routes/modules用于存放路由模块,在该目录下的文件会自动注册。

路由相关使用及概念

练习 —— 在之前table基础上,添加新增功能,点击新增按钮,跳转页面,数据可添加。

之前相关记录: Table组件的基本使用及练习

src/views/myComponents/tableTest下添加 addPage 页面

在这里插入图片描述
配置路由

import type { AppRouteModule } from '/@/router/types';

import { LAYOUT } from '/@/router/constant';
import { t } from '/@/hooks/web/useI18n';

const testRoute: AppRouteModule = {
  path: '/testRoute',
  name: 'TestRoute',
  component: LAYOUT,
  redirect: '/testRoute/test1',
  meta: {
    orderNo: 20,
    icon: 'ph:swatches-duotone',
    title: t('routes.test.testRoute'),
  },
  children: [
    {
      path: 'test1',
      name: 'test1',
      component: () => import('/@/views/myComponents/test1.vue'),
      meta: {
        // affix: true,
        title: t('routes.test.test1'),
      },
    },
    {
      path: 'test2',
      name: 'test2',
      component: () => import('/@/views/myComponents/test2.vue'),
      meta: {
        title: t('routes.test.test2'),
      },
    },
    {
      path: 'test3',
      name: 'test3',
      component: () => import('/@/views/myComponents/test3.vue'),
      meta: {
        title: t('routes.test.test3'),
      },
    },
    {
      path: 'tableTest',
      name: 'tableTest',
      component: () => import('/@/views/myComponents/tableTest/basicTable.vue'),
      meta: {
        title: t('routes.test.tableTest'),
      },
    },
    {
      path:'addPage',
      name:'addPage',
      component: () => import('/@/views/myComponents/tableTest/addPage/index.vue'),
      meta:{
        title:('routes.test.addPage'),
        // 菜单中不显示
        hideMenu: true
      }
    }
  ],
};

export default testRoute;

addPage/index.vue

<template>
  <div
    :style="{
      overflow: 'hidden',
      position: 'relative',
      height: '100%',
      backgroundColor: 'white',
    }"
  >
    <a-card :bordered="true">
      <div>
        <div>
          <BasicForm @register="registerForm" />
        </div>
      </div>
    </a-card>
  </div>
</template>

<script lang="ts">
  import { defineComponent } from 'vue';
  import { Card } from 'ant-design-vue';
  import { BasicForm, useForm } from '/@/components/Form';
  import { useMessage } from '/@/hooks/web/useMessage';
  import { useGo } from '/@/hooks/web/usePage';
  import { schemasView } from '../data';
  export default defineComponent({
    name: 'addPage',
    components: {
      BasicForm,
      [Card.name]: Card,
    },
    setup() {
      const go = useGo();
      const { createMessage } = useMessage();

      const [registerForm, { validate, getFieldsValue, resetFields, setFieldsValue }] = useForm({
        labelCol: {
          span: 8,
        },
        wrapperCol: {
          span: 16,
        },
        baseColProps: {
          span: 8,
        },
        schemas: schemasView,
        actionColOptions: {
          offset: 15,
          span: 12,
        },
        submitButtonOptions: {
          text: '保存',
        },
        resetButtonOptions: {
          text: '返回',
        },
        submitFunc: customSubmit,
        resetFunc: customReset,
      });

      async function customSubmit() {
        await validate();
        const values = await getFieldsValue();
        console.log('保存数据', values);
        createMessage.success('保存成功');
      }

      // 返回按钮跳转回表格页面
      async function customReset() {
        resetFields();
        go('/testRoute/tableTest');
      }

      return {
        registerForm,
        validate,
        getFieldsValue,
        resetFields,
        setFieldsValue,
        customSubmit,
      };
    },
  });
</script>

<style scoped></style>

basicTable.vue

<template>
  <div
    :style="{
      overflow: 'hidden',
      position: 'relative',
      height: '100%',
    }"
  >
    <!-- 注册table -->
    <BasicTable @register="registerTable">
      <template #action="{ record }">
        <TableAction
          :actions="[
            {
              tooltip: '查看',
              icon: 'clarity:info-standard-line',
              onClick: handleView.bind(null, { data: record }),
            },
            {
              tooltip: '编辑',
              icon: 'clarity:note-edit-line',
              onClick: handleEdit.bind(null, { data: record }),
            },
            {
              tooltip: '删除',
              color: 'error',
              icon: 'ant-design:delete-outlined',
              popConfirm: {
                title: '是否确定删除?',
                confirm: handleDel.bind(null, record),
              },
            },
          ]"
        />
      </template>
      <template #toolbar>
        <a-button type="primary" @click="handleAdd()">{{ '新增' }}</a-button>
      </template>
    </BasicTable>

    <ViewDrawer @reload="handleReload" @register="registerDrawer" />
    <EditModal @reload="handleReload" @register="registerModal" />
  </div>
</template>

<script lang="ts">
  import { defineComponent } from 'vue';
  import {router} from '/@/router'
  import { formConfig, columns, initData } from './data';
  import { BasicTable, useTable, TableAction } from '/@/components/Table';
  import { useDrawer } from '/@/components/Drawer';
  import { useModal } from '/@/components/Modal';
  import { useMessage } from '/@/hooks/web/useMessage';
  import ViewDrawer from './ViewDrawer.vue';
  import EditModal from './EditModal.vue';
  export default defineComponent({
    name: 'tableTest',
    components: {
      BasicTable,
      TableAction,
      ViewDrawer,
      EditModal
    },
    setup() {
      const data = initData();

      const { createMessage } = useMessage();
      // 设置table
      const [registerTable, { reload }] = useTable({
        title: '查询结果',
        dataSource: data,
        columns: columns,
        bordered: true,
        useSearchForm: true, //开启搜索区域
        formConfig: formConfig,
        actionColumn: {
          width: 120,
          title: '操作',
          dataIndex: 'action',
          slots: { customRender: 'action' },
        },
        rowSelection: { type: 'radio' },
        pagination: { pageSize: 10 },
        showTableSetting: true,
        tableSetting: { fullScreen: true },
        showIndexColumn: true,
        indexColumnProps: { fixed: 'left' },
      });

      // 注册Drawer
      const [registerDrawer, { openDrawer }] = useDrawer();

      // 配置Modal
      const [registerModal, { openModal }] = useModal();

      // 新增按钮
      function handleAdd(){
        router.push({
          path:'/testRoute/addPage'
        })
      }

      // 查看按钮
      function handleView({ data }) {
        openDrawer(true, data);
      }

      // 编辑按钮
      function handleEdit({ data }) {
        openModal(true, data);
      }

      // 删除按钮
      function handleDel(record){
        console.log('删除数据',record);
        createMessage.success('删除成功');
        reload()
      }

      function handleReload() {
        reload();
      }
      return {
        registerTable,
        reload,

        // 新增路由跳转
        handleAdd,

        // 查看抽屉
        registerDrawer,
        handleView,
        handleReload,

        // 编辑弹窗
        registerModal,
        handleEdit,

        // 删除
        handleDel
      };
    },
  });
</script>

<style scoped></style>

页面效果

路由跳转新增页面

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

电脑中病毒了怎么修复、怎么办,计算机windows系统如何预防faust勒索病毒

随着科技技术的不断发展&#xff0c;计算机已经成为现代人工作和生活中的必备工具之一&#xff0c;同时衍生出的各种计算机病毒也越来越多。各种勒索家族的加密病毒程序不断升级&#xff0c;给我们的工作和生活带来了极大困扰&#xff0c;特别是最近爆发的一种新型计算机病毒—…

如何优化 yolov8 模型,压缩模型大小,部署到边缘设备上

在CV领域&#xff0c;YOLO系列目标检测模型是一种非常流行的深度学习网络模型。yolov8是23年1月10号开源的最新版本。虽然YOLOv8已经在精度和速度方面取得了显著的改进&#xff0c;但我们仍然可以从轻量化角度等很多方面来进一步优化该模型。 模型压缩&#xff1a;使用轻量化的…

华为EC6108V9A_RK3128_安卓4.4.4_卡刷固件包-内有教程-当贝纯净桌面

华为EC6108V9A_RK3128_安卓4.4.4_卡刷固件包-内有教程-当贝纯净桌面 特点&#xff1a; 1、适用于对应型号的电视盒子刷机&#xff1b; 2、开放原厂固件屏蔽的市场安装和u盘安装apk&#xff1b; 3、修改dns&#xff0c;三网通用&#xff1b; 4、大量精简内置的没用的软件&a…

不用花一分钱!!!获得一个自己的网页版chatGPT

不用花一分钱&#xff01;&#xff01;&#xff01;获得一个自己的网页版chatGPT 当然还是需要一个chatGPT账号的&#xff0c;不会注册的同学可以看一下这篇文章 chatGPT到底要怎么注册 那就先让我们看一下效果吧 chatgpt-web介绍 github项目地址 https://github.com/Chanzha…

【源码解析】实现异步功能的注解 @Async 的源码解析

使用方式 启动类上添加注解EnableAsync()在方法或者类上添加Async 源码解析 初始化配置 EnableAsync注入了AsyncConfigurationSelector Target(ElementType.TYPE) Retention(RetentionPolicy.RUNTIME) Documented Import(AsyncConfigurationSelector.class) public interf…

【郭东白架构课 模块二:创造价值】23|节点四:架构规划之统一语义

你好&#xff0c;我是郭东白。从这节课开始&#xff0c;我们就进入到架构活动的第四个环节——架构规划。这个环节比较复杂&#xff0c;可以分为四个部分&#xff1a;统一语义、需求确认、边界划分和规划确认。这节课我们先来讲统一语义。 架构师的工作日常就是跟不同的角色沟…

Mysql索引(4):索引语法

1 创建索引 CREATE [ UNIQUE | FULLTEXT ] INDEX index_name ON table_name (index_col_name,... ) ; 2 查看索引 SHOW INDEX FROM table_name; 3 删除索引 DROP INDEX index_name ON table_name; 4 案例演示 先来创建一张表 tb_user&#xff0c;并且查询测试数据。 creat…

从零开始学习Linux运维,成为IT领域翘楚(九)

文章目录 &#x1f525;Linux系统服务&#x1f525;Linux系统定时任务 &#x1f525;Linux系统服务 Service命令 服务(service) 本质就是进程&#xff0c;但是是运行在后台的&#xff0c;通常都会监听某个端口&#xff0c;等待其它程序的请求&#xff0c;比如(mysql , sshd 防…

Vue加SpringBoot实现项目前后端分离

首先需要搭建一个Vue的脚手架项目&#xff08;已经放在gitee里面了&#xff0c;下面是gitee网址&#xff0c;可以直接拉&#xff09; 那么接下来就是实现前后端分离的步骤 首先我们需要有一个登录页面 登录的点击事件利用axios提交到后台去&#xff0c;代码放在后面&#xff08…

【C++修炼之路:二叉搜索树】

目录&#xff1a; 二叉搜索树的概念构建一颗二叉树二叉树的查找二插树的插入 二叉树的删除删除右子树的最小节点 写一个中序来走这个二叉搜索树递归版删除&#xff08;recursion&#xff09;递归版插入&#xff08;recursion&#xff09;递归版查找&#xff08;recursion&#…

基于AT89C51单片机的电子密码锁设计与仿真

点击链接获取Keil源码与Project Backups仿真图&#xff1a; https://download.csdn.net/download/qq_64505944/87760996?spm1001.2014.3001.5503 源码获取 主要内容&#xff1a; &#xff08;1&#xff09;本设计为了防止密码被窃取要求在输入密码时在LCD屏幕上显示*号。 &a…

类和对象中(1)

文章目录 一、类的6个默认成员函数二、构造函数1、概念2、构造函数只初始化自定义类型3、对于不会初始化内置类型的补丁4、构造函数优点 三、析构函数1、概念2、什么时候需要自己写析构函数 &#xff1f;3、构造和析构顺序差异 四、拷贝构造函数1、概念2、拷贝构造下传值会无限…

MySQL环境搭建——“MySQL数据库”

各位CSDN的uu们你们好呀&#xff0c;小雅兰又来啦&#xff0c;好久没有更文啦&#xff0c;今天继续&#xff01;&#xff01;&#xff01;今天小雅兰的内容是MySQL环境搭建&#xff0c;下面&#xff0c;让我们进入MySQL数据库的世界吧 MySQL的卸载 MySQL的下载、安装、配置 M…

ubuntu18.04下pass-through直通realteck PCI设备到qemu-kvm虚拟机实践

设备直通是一种虚拟化资源分配方式&#xff0c;通过将物理设备直通给虚拟机环境&#xff0c;达到虚拟机可以直接访问物理设备的目的&#xff0c;直通功能对设备的要求不高&#xff0c;不需要设备支持PF/VF&#xff0c;18年后的普通家用PC的PCI设备都支持设备直通模式&#xff0…

【Java】Java对象的比较

Java对象的比较 PriorityQueue中插入对象元素的比较基本数据类型的比较对象的比较重写基类的equals方法基于Comparble接口类的比较基于比较器进行比较 PriorityQueue中插入对象 优先级队列在插入元素时有个要求&#xff1a;插入的元素不能是null或者元素之间必须要能够进行比较…

Redis持久化之AOF日志高频问题

1、如何采用AOF日志避免宕机丢失数据&#xff1f; Redis 的持久化主要有两大机制&#xff0c;即 AOF&#xff08;Append Only File&#xff09;日志和 RDB 快照。 MySQL数据库的写前日志&#xff08;Write Ahead Log, WAL&#xff09;&#xff0c;在实际写数据前&#xff0c;…

PWLCM分段线性混沌映射

混沌映射是生成混沌序列的一种方法,常见的混沌映射方式有 Logistic映射、Tent映射、Lorenz映射,而PWLCM&#xff08;Piecewise Linear Chaotic Map&#xff0c;分段线性混沌映射&#xff09;作为混沌映射的典型代表&#xff0c;数学形式简单&#xff0c;具有遍历性和随机性。其…

智能优化算法:基于减法平均的优化算法-附代码

智能优化算法&#xff1a;基于减法平均的优化算法 文章目录 智能优化算法&#xff1a;基于减法平均的优化算法1.基于减法平均优化算法1.1 初始化1.2 SABO的数学建模 2.实验结果3.参考文献4.Matlab 摘要&#xff1a;基于减法平均的优化算法&#xff08;Subtraction-Average-Base…

[数据结构] 二叉搜索树的详解实现

文章目录 概念实现架构BSTreeNodea&#xff08;节点&#xff09;BSTree框架 增删查 -- 循环写法insert&#xff08;尾插&#xff09;inOrder&#xff08;遍历&#xff09;Find&#xff08;查找&#xff09;Erase&#xff08;删除&#xff09;默认成员函数构造拷贝构造析构函数赋…

哈夫曼编码文件压缩和解压

哈夫曼编码&文件压缩和解压 文章目录 哈夫曼编码&文件压缩和解压哈夫曼编码基本介绍原理解析代码实现 文件的压缩文件的解压完整代码 哈夫曼编码 基本介绍 赫夫曼编码也翻译为 哈夫曼编码(Huffman Coding)&#xff0c;又称霍夫曼编码&#xff0c;是一种编码方式, 属于…