【前端开发学习笔记16】Vue_9
文章分类架子
多个页面复用,封装成组件:
- props 定制标题
- 默认插槽 default 定制内容主体
- 具名插槽 extra 定制按钮
<template><el-card class="page-container"><template #header><div class="header"><span>{{ title }}</span><div class="extra"><slot name="extra"></slot></div></div></template><slot></slot></el-card> </template>
文章分类渲染
1. 封装API:请求获取表格数据
2. el - table表格动态渲染
3. 表格静态样式
添加分类
用dialogVisible 控制显示隐藏
const dialogVisible = ref(false)
// 组件对外暴露一个方法 open,基于open传来的参数,区分添加还是编辑
// open({}) => 表单无需渲染,说明是添加
// open({ id, cate_name,...... }) => 表单需要渲染,说明是编辑
// open调用后,可以打开弹窗
const open = (row) => {console.log(row)dialogVisible.value = true
}// 向外暴露方法
defineExpose({open
})
输入规范
- api/article.js 封装请求 API
// 添加文章分类
export const artAddChannelService = (data) => request.post ('/my/cate/add', data)
// 编辑文章分类
export const artEditChannelService = (data) => request.put ('/my/cate/info', data)
2.页面中校验,判断,提交请求
<el - form ref="formRef">
const formRef = ref ()
const onSubmit = async () => {
await formRef.value.validate ()
formModel.value.id
? await artEditChannelService (formModel.value)
: await artAddChannelService (formModel.value)
ElMessage ({
type:'success',
message: formModel.value.id? ' 编辑成功 ' : ' 添加成功 '
})
dialogVisible.value = false
}
3.通知父组件进行回显
删除分类
封装:
// 删除文章分类
export const artDelChannelService = (id) =>request.delete('/my/cate/del', {params: { id }})
配置中文
<script setup>
import zhCn from 'element-plus/dist/locale/zh-cn.mjs'
</script><template><div><!-- App.vue只需要留一个路由出口router-view即可 --><el-config-provider:locale="zhCn"><router-view></router-view></el-config-provider></div>
</template><style scoped></style>
封装API接口,请求渲染
1.api/article.js 封装接口:
export const artGetListService = (params) => request.get('/my/article/list', { params })
2.页面中调用保存数据:
const articleList = ref([])
const total = ref(0)const getArticleList = async () => {const res = await artGetListService(params.value)articleList.value = res.data.datatotal.value = res.data.total
}
getArticleList()
3.新建 utils/format.js 封装格式化日期函数:
import { dayjs } from 'element-plus'
export const formatTime = (time) => dayjs(time).format('YYYY年MM月DD日')
4.导入使用
分页渲染
1.添加el-pagination组件
<el-paginationv-model:current-page="params.pagenum"v-model:page-size="params.pagesize":page-sizes="[2,3,5,10]":background="true"layout="jumper,total,sizes,prev,pager,next":total="total"@size-change="onSizeChange"@current-change="onCurrentChange"style="margin-top:20px;justify-content:flex-end;"
></el-pagination>
2.提供分页修改逻辑
const onSizeChange = (size) => {params.value.pagenum = 1params.value.pagesize = sizegetArticleList()
}
const onCurrentChange = (page) => {params.value.pagenum = pagegetArticleList()
}
添加 loading 处理
1.准备数据:
const loading = ref(false)
2.el - table 上面绑定:
<el-table v-loading="loading">...</el-table>
3.发送请求时添加 loading:
const getArticleList = async () => {loading.value = trueloading.value = false
}
getArticleList()
抽屉组件
1.准备数据:
import { ref } from 'vue'
const visibleDrawer = ref(false)
2.准备抽屉容器:
<el-drawer v-model="visibleDrawer" title="I am the title"><span>Hi there!</span></el-drawer>
3.点击修改布尔值显示抽屉:
<el-button type="primary" @click="onAddArticle">发布文章</el-button>
const visibleDrawer = ref(false)
const onAddArticle = () => {visibleDrawer.value = true
}
封装抽屉组件 ArticleEdit
添加和编辑可以共用一个抽屉,所以将抽屉封装成一个组件。
组件对外暴露一个方法 open,基于 open 的参数,初始化表单数据,并判断区分是添加还是编辑:
open({})=> 添加操作,添加表单初始化无数据open({ id: xx,... })=> 编辑操作,编辑表单初始化需回显
上传文件
1.关闭自动上传,准备结构:
import { Plus } from '@element-plus/icons-vue'<el-uploadclass="avatar-uploader":auto-upload="false":show-file-list="false":on-change="onUploadFile"
><img v-if="imgUrl" :src="imgUrl" class="avatar" /><el-icon v-else class="avatar-uploader-icon"><Plus /></el-icon>
</el-upload>
2.准备数据和选择图片的处理逻辑:
const imgUrl = ref('')
const onUploadFile = (uploadFile) => {imgUrl.value = URL.createObjectURL(uploadFile.raw)formModel.value.cover_img = uploadFile.raw
}
富文本编辑器 [vue - quill]
官网地址:https://vueup.github.io/vue - quill/
1.安装包:
pnpm add @vueup/vue-quill@latest
2.注册成局部组件:
import { QuillEditor } from '@vueup/vue-quill'
import '@vueup/vue-quill/dist/vue-quill.snow.css'
3.页面中使用绑定:
<div class="editor"><quill-editortheme="snow"v-model:content="formModel.content"contentType="html"></quill-editor>
</div>
添加文章功能
1封装添加接口:
export const artPublishService = (data) => request.post('my/article/add', data)
2.注册点击事件调用
// 转换 formData 数据
const fd = new FormData()
for (let key in formModel.value) {fd.append(key, formModel.value[key])
}
3.父组件监听事件,重新渲染
<article-edit ref="articleEditRef" @success="onSuccess"></article-edit>
<script>const onSuccess = (type) => {if (type === 'add') {const lastPage = Math.ceil((total.value + 1) / params.value.pagesize)params.value.pagenum = lastPage}getArticleList()}
</script>
文章编辑
1.封装编辑接口:
export const artEditService = (data) => request.put('my/article/info', data)
2.提交时调用:
const onPublish = async (state) => {if (formModel.value.id) {await artEditService(fd)ElMessage.success('编辑成功')visibleDrawer.value = falseemit('success', 'edit')} else {// 添加请求}
}相关文章:
【前端开发学习笔记16】Vue_9
文章分类架子 多个页面复用,封装成组件: props 定制标题默认插槽 default 定制内容主体具名插槽 extra 定制按钮 <template><el-card class"page-container"><template #header><div class"header"><s…...
Bash 中的运算方式
目录 概述: 1. (()) 运算符 2. let 命令 3. expr 命令 4. $[] 直接运算 5. bc(计算器,支持浮点数) 6. awk(强大的文本处理工具,也可计算) 概述: Bash 本身只支持整数运算&am…...
2025年3月营销灵感日历
2025年的第一场营销大战已经拉开帷幕了! 三月可是全年最值钱的营销黄金月——妇女节、植树节、315消费者日三大爆点连击,还有春分、睡眠日、世界诗歌日等20隐藏流量密码。 道叔连夜扒了18个行业数据,整理了这份《2025年3月营销灵感日历》&a…...
MySQL的innoDB引擎
一、逻辑存储结构 表空间:ibd文件,一个MySQL实例可以对应多个表空间,用于存储记录,索引等数据; 段:分为数据段(leaf node segment)、索引段(non-leaf node segment)、回滚段(rollback segment),innodb是索引组织表,数据段就是B+树的非叶子节点。段用来管理多个e…...
HCIA项目实践---OSPF的知识和原理总结
9.5 OSPF 9.5.1 从哪些角度评判一个动态路由协议的好坏? (1)选路佳(是否会出环) OSPF 协议采用链路状态算法,通过收集网络拓扑信息来计算最短路径,从根本上避免了路由环路的产生。 (…...
hexo 魔改 | 修改卡片透明度
hexo 魔改 | 修改卡片透明度 ** 博客食物用更佳 博客地址 ** 这是笔者自己瞎倒腾的。作为前端菜鸡一枚,大佬们随便看看就好~ 我用的主题是 butterfly 4.12.0 分析 通过开发者工具可以看出来卡片的背景和 --card-bg 变量有关 再在 sources 下的 css 文件夹下的…...
今日AI和商界事件(2025-02-13)
今日AI领域的主要事件包括: 一、OpenAI相关动态 取消独立发布o3模型计划: OpenAI首席执行官奥尔特曼宣布,公司取消独立发布o3模型的计划。未来几个月内,OpenAI将推出GPT-5,该模型将整合多项技术,并应用于C…...
38.日常算法
1.最短无序连续子数组 题目来源 给你一个整数数组 nums ,你需要找出一个 连续子数组 ,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序。请你找出符合题意的 最短 子数组,并输出它的长度。 示例 1: 输入…...
如何构建有效的人工智能代理
目录 什么是 AI 代理? 何时应使用 AI 代理? 人工智能代理的构建模块 构建 AI 代理的常用方法 1. 提示链接(分步说明) 2.路由(将任务发送到正确的地方) 3.并行处理(同时做多件事) 4. 协调者和工作者 AI(团队合作) 5. 评估器和优化器(修复错误) 如何让人工…...
qt 事件的传递顺序
在 Qt 中,事件的传递顺序遵循以下基本规则: 事件的产生:当用户与界面交互时,操作(如鼠标点击、键盘输入等)会生成相应的事件(如 QMouseEvent、QKeyEvent 等)。 事件的传递顺序&…...
全面掌握Flutter开发:从核心原理到跨平台实战,构建高效应用
文章目录 引言 一、Flutter框架概述二、Flutter开发环境搭建三、Flutter核心技术解析1. **Widget树与状态管理**2. **路由与导航**3. **网络请求与数据解析**4. **本地存储与数据库**5. **包管理与依赖** 四、实战案例:开发跨平台新闻客户端五、Flutter开发工具与调…...
Flutter 添加 iOS widget 小组件
环境 macOS 15.1 Xcode16.1 Flutter 3.27.4 前言 本篇文章主要记录,在Flutter 项目中如何正确地添加iOS 小组件,iOS 小组件 相关的知识在另一篇文章有记录。 iOS 14 widget 添加小组件 WidgetExtension 打开Xcode New -> Target 选择 iOS -> 搜…...
2025年金三银四经典自动化测试面试题
概述 觉得自动化测试很难? 是的,它确实不简单。但是学会它,工资高啊! 担心面试的时候被问到自动化测试? 嗯,你担心的没错!确实会被经常问到! 现在应聘软件测试工程师的岗位&…...
C++17 中 std::lcm:从入门到精通
文章目录 一、引言二、std::lcm 的基本概念三、入门示例四、计算多个整数的最小公倍数五、std::lcm 的实现原理六、在实际项目中的应用七、注意事项八、总结 一、引言 在 C 编程中,处理数学运算时,计算最小公倍数(Least Common Multiple&…...
初阶c语言(循环语句习题,完结)
前言: c语言为b站鹏哥,嗯对应视频37集 昨天做的c语言,今天在来做一遍,发现做错了 今天改了平均值的计算, 就是说最大值加上最小值,如果说这个数值非常大的话,两个值加上会超过int类型的最大…...
本地Deepseek-r1:7b模型集成到Google网页中对话
本地Deepseek-r1:7b网页对话 基于上一篇本地部署的Deepseek-r1:7b,使用黑窗口对话不方便,现在将本地模型通过插件集成到Google浏览器中 安装Google插件 在Chrome应用商店中搜索page assis 直接添加至Chrome 修改一下语言 RAG设置本地运行的模型&#…...
SSM课设-学生选课系统
【课设者】SSM课设-学生选课系统 分为 管理员 和 老师 和 学生端 技术栈 前端: HtmlCssJavaScriptAjax 后端: Spring、Spring MVC、MyBatis、MySQL、JSP 学生端 --选课 选课 搜索 --查看选课结果 --退选 --查看已修课程 --管理个人信息 老师端 --添加教学课程 添加 …...
Windows中使用Docker安装Anythingllm,基于deepseek构建自己的本地知识库问答大模型,可局域网内多用户访问、离线运行
文章目录 Windows中使用Docker安装Anythingllm,基于deepseek构建自己的知识库问答大模型1. 安装 Docker Desktop2. 使用Docker拉取Anythingllm镜像2. 设置 STORAGE_LOCATION 路径3. 创建存储目录和 .env 文件.env 文件的作用关键配置项 4. 运行 Docker 命令docker r…...
AI前端开发技能提升与ScriptEcho:拥抱AI时代的前端开发新范式
随着人工智能技术的飞速发展,AI前端开发岗位对技能的要求也水涨船高。越来越多的企业需要具备AI相关知识和高级前端开发能力的工程师,这使得传统的前端开发模式面临着巨大的挑战。如何提升开发效率,降低人力成本,成为了摆在所有前…...
【Redis存在线程安全问题吗?】
Redis存在线程安全问题吗? Redis的线程安全性概述Redis线程安全性的挑战Redis线程安全性的示例示例1:客户端并发访问导致的问题示例2:分布式环境下的问题解决Redis线程安全问题的建议总结Redis的线程安全性概述 Redis本身是一个单线程的键值存储数据库,它使用单线程模型来…...
Java 语言特性(面试系列1)
一、面向对象编程 1. 封装(Encapsulation) 定义:将数据(属性)和操作数据的方法绑定在一起,通过访问控制符(private、protected、public)隐藏内部实现细节。示例: public …...
(十)学生端搭建
本次旨在将之前的已完成的部分功能进行拼装到学生端,同时完善学生端的构建。本次工作主要包括: 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...
JVM垃圾回收机制全解析
Java虚拟机(JVM)中的垃圾收集器(Garbage Collector,简称GC)是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象,从而释放内存空间,避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...
大语言模型如何处理长文本?常用文本分割技术详解
为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...
C++.OpenGL (14/64)多光源(Multiple Lights)
多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...
CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)
漏洞概览 漏洞名称:Apache Flink REST API 任意文件读取漏洞CVE编号:CVE-2020-17519CVSS评分:7.5影响版本:Apache Flink 1.11.0、1.11.1、1.11.2修复版本:≥ 1.11.3 或 ≥ 1.12.0漏洞类型:路径遍历&#x…...
PAN/FPN
import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...
springboot 日志类切面,接口成功记录日志,失败不记录
springboot 日志类切面,接口成功记录日志,失败不记录 自定义一个注解方法 import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;/***…...
精益数据分析(98/126):电商转化率优化与网站性能的底层逻辑
精益数据分析(98/126):电商转化率优化与网站性能的底层逻辑 在电子商务领域,转化率与网站性能是决定商业成败的核心指标。今天,我们将深入解析不同类型电商平台的转化率基准,探讨页面加载速度对用户行为的…...
