前端开发模板Pear Admin Layui

目录

  • 基本资料
  • 学习笔记
    • 04-Pear-Admin-Layui模板运行
    • 05-Pear-Admin-Layui-GIT方式代...
    • 06-Pear-Admin与Vue对比 & 07-Pear-Admin与Vue对比补充
    • 09-Pear-Admin-CRUD练习-数据库表创建
    • 12-Pear-Admin-CRUD练习-引入其它依赖 & 13-Pear-Admin-CRUD练习-三层架构以及常见配置 & 20-Pear-Admin-CRUD练习-在线文档生成工具Knife4j使用
    • 14-Pear-Admin-CRUD练习-映射数据库表的实体类
    • 16-Pear-Admin-CRUD练习-角色mapper单元测试
    • 32-Pear-Admin-CRUD练习-菜单mapper查询完成
    • 34-Pear-Admin-CRUD练习-菜单service增删查完成
    • 38-Pear-Admin-前端-左侧菜单修改
    • 40-Pear-Admin-前端-角色列表展示

基本资料

Layui 是免费开源的 UI 组件,而官方出品的 Layui Admin 一直是付费产品,今天介绍的 Pear Admin Layui 就是 Pear 开源团队基于 Layui 打造的免费开源 admin ui 框架,无论是外观还是代码风格完全遵循 Layui 的规范。非常适合缺少前端牛人的团队或者仍然喜欢纯粹原生 HTML/CSS/JS 开发者使用,可以在不需要搞懂前端工程化的一系列新知识的情况下快速启动一个项目。gitee地址

最近官网打不开。但是可以把 Pear Admin Site 的资源下载到本地,部署到iis或者其他web服务上面,运行之后是这样的:
在这里插入图片描述
以及Layui官网

学习笔记

在b站找了一个教程,目前看起来还行:
Layui 潮流模板 Pear-Admin-Layui 快速入门 — b站
up主的个人博客和入门练习网站

04-Pear-Admin-Layui模板运行

Visual Studio Code使用Live Server插件来启动一个前端项目(我注:直接放java web项目的static目录应该也会行)

05-Pear-Admin-Layui-GIT方式代…

在这里插入图片描述
如上图,在VS Code的这个位置可切换git分支,切换后可马上看到已经在Live Server中跑的前端项目的表现变化。

06-Pear-Admin与Vue对比 & 07-Pear-Admin与Vue对比补充

在这里插入图片描述
简单来说就是Pear Admin Layui更简单易上手,会HTML/CSS/JS就行,而基于Vue的功能更强大更灵活更适合产品化,但是需要学很多其它知识。

09-Pear-Admin-CRUD练习-数据库表创建

详见本博—典型的用户/角色/菜单表设计

12-Pear-Admin-CRUD练习-引入其它依赖 & 13-Pear-Admin-CRUD练习-三层架构以及常见配置 & 20-Pear-Admin-CRUD练习-在线文档生成工具Knife4j使用

Knife4j是一个集Swagger2和OpenAPI3为一体的增强解决方案

14-Pear-Admin-CRUD练习-映射数据库表的实体类

Intellij里连数据库,和用表自动生成实体类

16-Pear-Admin-CRUD练习-角色mapper单元测试

快速生成测试等

32-Pear-Admin-CRUD练习-菜单mapper查询完成

mapper递归查询,比如可用于菜单(嵌套子菜单)

34-Pear-Admin-CRUD练习-菜单service增删查完成

  • 偏末尾:
    对于已检查异常(Exception及其非运行时子类),Spring默认不会回滚事务。这意味着,如果你抛出了一个如IOException、SQLException等已检查异常,事务将不会回滚,除非你明确配置Spring来回滚这些异常。所以通常应该配置抛出RuntimeException或其子类。
    可以通过在@Transactional注解中使用rollbackFor属性来指定哪些已检查异常应该触发事务回滚。例如:@Transactional(rollbackFor = Exception.class)。

38-Pear-Admin-前端-左侧菜单修改

版本3.50.0:
左侧菜单在admin/data/menu.json

40-Pear-Admin-前端-角色列表展示

Layui官网有很多可参考和复用的代码和组件,比如表格的异步属性,就适用在表单里请求数据和渲染的场景。下面是我的可运行代码:

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title>角色管理</title><link rel="stylesheet" href="../../component/pear/css/pear.css" /><link rel="stylesheet" href="../../admin/css/other/result.css" /></head><body class="pear-container"><div class="layui-card"><div class="layui-card-body"><table class="layui-hide" id="test" lay-filter="test"></table></div></div><script src="../../component/layui/layui.js"></script><script src="../../component/pear/pear.js"></script><script>layui.use(function(){let table = layui.table;//表格渲染table.render({elem: '#test',url: 'http://127.0.0.1:8083/aiButton/logs/generatedButtons?clientId=client_a_pro',//    page: true,parseData: function(res){ // res 即为原始返回的数据// alert(	"res:" + res[0].outputUrl);return {"code": 0, // 解析接口状态 layui定义:如果是code为0才解析数据,不是的话就在表格显示msg?"msg": "暂无数据", // "count": 2, // 解析数据长度"data": res // 解析数据列表};},cols: [[{type: 'checkbox', fixed: 'left'},{field:'clientId', title: 'clientId'},{field:'outputUrl', title: '图片链接'},{title: 'tags',templet: function(row){return row.clientId=='client_a_pro' ? '<span class="layui-badge layui-bg-orange">是的</span>': '<span class="layui-badge layui-bg-green">不是</span>';}},{title: '操作',templet: function(row){let s = '<button type="button" class="layui-btn layui-bg-red">红色删除</button>';s += '<button class="layui-btn layui-btn-primary layui-border-blue">蓝色按钮</button>';return s;}}]]});});</script></body>
</html>

其中调用后端url返回的数据为:
[
{
“clientId”: “client_a_pro”,
“outputUrl”: “http://36.26.47.210:25337/NiukouToCloth/view?filename=img_00544_.png&type=output&subfolder=buttonx”,
“createdAt”: “2024-10-23T16:53:34”
},
{
“clientId”: “client_a_pro”,
“outputUrl”: “http://36.26.47.210:25337/NiukouToCloth/view?filename=img_00543_.png&type=output&subfolder=buttonx”,
“createdAt”: “2024-10-23T16:53:34”
},
{
“clientId”: “client_a_pro”,
“outputUrl”: “http://36.26.47.210:25337/NiukouToCloth/view?filename=img_00542_.png&type=output&subfolder=buttonx”,
“createdAt”: “2024-10-23T16:53:34”
},
{
“clientId”: “client_a_pro”,
“outputUrl”: “http://36.26.47.210:25337/NiukouToCloth/view?filename=img_00541_.png&type=output&subfolder=buttonx”,
“createdAt”: “2024-10-23T16:53:34”
}
]

呈现的页面效果:
在这里插入图片描述
这里关于parseData算是有个坑1:返回code为0才解析数据,否则就在表格显示msg。


  1. 关于LayUi中parseData中code的坑 ↩︎

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

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

相关文章

【ETL:概念、流程与应用】

ETL:概念、流程与应用 目录 什么是ETLETL的工作流程 2.1 数据抽取(Extract)2.2 数据转换(Transform)2.3 数据加载(Load)ETL的应用场景常见的ETL工具ETL的挑战与解决方法ETL与ELT的区别总结1. 什么是ETL ETL 是数据处理的流程,表示“抽取(Extract

翰鲸学术辅导:研究生学术之路的助力

近期又到了研究生开题之际&#xff0c;研二的学生们都深受论文困扰。不少学弟学妹在微信上询问我关于学术辅导机构是否值得报名的问题。在此&#xff0c;通过本期文章为大家科普学术辅导机构相关情况&#xff0c;并对我曾报名的翰鲸学术辅导进行简单测评&#xff0c;希望广大学…

计算机网络之HTTP协议

一、HTTP协议基本概念 HTTP&#xff08;HyperText Transfer Protocol&#xff0c;超文本传输协议&#xff09;是用于从WWW服务器传输超文本到本地浏览器的传输协议。它可以使浏览器更加高效&#xff0c;减少网络传输量。HTTP协议不仅保证计算机正确快速地传输超文本文档&#…

vue使用方法创建组件

vue 中 创建 组件 使用 方法创建组件 vue2 中 import vueComponent from xxxx function createFn(){const creator Vue.extend(vueComponent);const instance new creator();document.appendChild(instance.$el); }vue3 中 import { createApp } from "vue"; im…

关于SwitchCase中变量定义及使用变量的一些注意事项参数传递参数时不能实现多态动态绑定的问题c++语法

关于SwitchCase中变量定义及使用变量的一些注意事项参数传递参数时不能实现多态动态绑定的问题c语法 说明(废话)问题解决方案问题1 case中不能定义变量多态函数动态传绑定的问题 总结 说明(废话) 用了这么多年的c&#xff0c;有些语法上的问题真的让人很难办&#xff0c;有的问…

MySQL中的行转列和列转行操作

MySQL是一款常用的关系型数据库&#xff0c;广泛应用于各种类型的应用程序和数据存储需求。在MySQL中&#xff0c;我们经常需要对表格进行行转列或列转行的操作&#xff0c;以满足不同的分析或报表需求。本文将详细介绍MySQL中的行转列和列转行操作&#xff0c;并提供相应的SQL…

新世联科技:NG2-A-7在DAC空气捕集提取CO2的应用

一、DAC空气捕集提取CO2的介绍 直接空气碳捕获&#xff08;Direct Air Capture&#xff0c;简称DAC&#xff09;是一种直接从大气中提取二氧化碳的技术。 二、DAC空气捕集提取CO2的前景 从大气中提取的这种二氧化碳可以作为循环经济的一部分以各种不同方式使用。未来&#xf…

面试题分享11月5日

1、JWT 数据结构 头部&#xff08;Header&#xff09;、负载&#xff08;Payload&#xff09;、签名&#xff08;signature&#xff09; 头部&#xff08;Header&#xff09;、负载&#xff08;Payload&#xff09;都是明文的&#xff0c;根据 base64URL 进行转化&#xff0c…

uni-app 封装图表功能

文章目录 需求分析1. 秋云 uchars2. Echarts 需求 在 uni-app 中使用图表功能&#xff0c;两种推荐的图表工具 分析 在 Dcloud市场 搜索Echarts关键词&#xff0c;会出现几款图表工具&#xff0c;通过大家的下载量&#xff0c;可以看到秋云这个库是比较受欢迎的&#xff0c;其…

详细解读个性化定制大杀器IP-Adapter代码

Diffusion models代码解读&#xff1a;入门与实战 前言&#xff1a;IP-Adapter作为Diffusion Models最成功的技术之一&#xff0c;已经在诸多互联网应用中落地。介绍IP-Adapter原理和应用的博客有很多&#xff0c;但是逐行详细解读代码的博客很少。这篇博客从细节出发&#xff…

PHP JSON 教程

PHP JSON 教程 PHP 是一种广泛使用的开源服务器端脚本语言,而 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。PHP 提供了多种函数和库来处理 JSON 数据,使得在 PHP 应用程序中解析和生成 JSON 数据变得非常容易。本教程将详细介绍 PHP 中 JSON 的使用方法…

数据采集之scrapy框架2

本博文使用自动化爬虫框架完成微信开放社区文档信息的爬取&#xff08;重点理解 scrapy 框架自动化爬 虫构建过程&#xff0c;能够分析 LinkExtractor 和 Rule 规则的基本用法&#xff09; 包结构目录如下图所示&#xff1a; 主要代码&#xff1a; &#xff08; items.p…

WAPI认证过程如何实现?

WAPI&#xff08;WLAN Authentication and Privacy Infrastructure&#xff09;认证过程是通过一系列步骤来实现的&#xff0c;以确保无线局域网&#xff08;WLAN&#xff09;中设备的合法性和数据传输的安全性。以下是WAPI认证过程的详细实现步骤&#xff1a; 一、认证前的准…

从零开始的LeetCode刷题日记:746. 使用最小花费爬楼梯

一.相关链接 题目链接&#xff1a;746. 使用最小花费爬楼梯 二.心得体会 这道题还是动规五部曲。 1.首先是dp数组及其下标的含义&#xff0c;dp记录了每层楼梯对应的爬的方法&#xff0c;每个下标存储每个对应楼层。 2.然后是递归公式&#xff0c;这里的递归公式就不是简单…

深⼊理解指针(2)

目录 1. const修饰指针及变量 2. 野指针 3. assert断⾔ 4. 指针的传址调⽤ 一 const修饰指针及变量&#xff08;const是场属性——不能改变的属性&#xff09; 1 const修饰变量 那怎么证明被const修饰的变量本质还是变量呢&#xff1f; 上面我们绕过n&#xff0c;使…

每日科技资讯:2024年11月06日【龙】农历十月初六 ---文末送书

目录 1.OpenAI因算力瓶颈暂缓GPT-5发布 合作芯片开发寻求突破2.现在&#xff0c;&#x1d54f; 允许被你屏蔽的人继续查看你的帖子3.硬刚Intel与AMD&#xff01;NVIDIA明年推出PC芯片4.苹果停止签署 iOS 18.0.1&#xff0c;不再允许从 18.1 降级5.Nvidia 加入道琼斯指数成份股 …

swoole扩展安装--入门篇

对于php来说&#xff0c;swoole是个强大的补充扩展。这是我第3次写swoole扩展安装&#xff0c;这次基于opencloudos8系统&#xff0c;php使用8.2。 安装swoole扩展首先想到的是用宝塔来安装&#xff0c;毕竟安装方便&#xff0c;还能统一管理。虽然获得swoole版本不是最新的&am…

layui xm-select的使用

一、文档 xm-select 二、使用 <div id"js-form-tags{$ke}{$index}" val"{$ke}"></div> <input type"hidden" class"selectkey" name"selectkey[]" value"{$ke}" /> function initSelect(id…

【大模型开发指南】llamaindex配置deepseek、jina embedding及chromadb实现本地RAG及知识库(win系统、CPU适配)

说一些坑&#xff0c;本来之前准备用milvus&#xff0c;但是发现win搞不了&#xff08;docker都配好了&#xff09;。然后转头搞chromadb。这里面还有就是embedding一般都是本地部署&#xff0c;但我电脑是cpu的没法玩&#xff0c;我就选了jina的embedding性能较优&#xff08;…

vue前端sku实现

this.value.skuStockList [];let skuList this.value.skuStockList;//只有一个属性时if (this.selectProductAttr.length 1) {let attr this.selectProductAttr[0];for (let i 0; i < attr.values.length; i) {skuList.push({spData: JSON.stringify([{key:attr.name,v…