- 博客(42)
- 收藏
- 关注
原创 smallfish详解
smallfish 是一个基于 React 和 Ant Design 的高度集成的、面向中后台应用的开箱即用前端开发框架和脚手架。可以把它理解为一个“最佳实践的集合”或“超级脚手架”,它极大地简化了基于 React 的中后台应用的初始搭建和开发流程。Smallfish 的技术栈选择是中后台前端领域的“黄金标准”之一,它代表了在稳健性、开发效率和团队协作之间找到的最佳平衡点。如果项目是企业级中后台系统,追求快速成型、团队规范、长期稳定。
2025-11-27 14:10:21
596
原创 Tailwind CSS 使用指南
Tailwind CSS 是一个实用优先的 CSS 框架,与 Bootstrap 等组件库不同,它不提供预定义的组件,而是提供低级别的实用类,让您能够快速构建完全自定义的设计。实用优先:通过组合简单类名构建复杂界面响应式设计:内置响应式前缀系统高度可定制:可完全自定义设计系统生产优化:自动移除未使用的 CSS在javascripttheme: {extend: {colors: {'brand': {},spacing: {},},css.card {
2025-10-30 15:15:23
894
原创 React中常用的钩子函数:
用于在函数组件中添加局部状态。useState可以传递一个参数,做为状态的初始值,返回一个数组,数组的第一个元素是返回的状态变量,第二个是修改状态变量的函数。处理副作用(如数据获取、订阅、手动 DOM 操作等)。若一个函数组件中定义了多个useEffect,那么他们实际执行顺序是按照在代码中定义的先后顺序来执行的。useEffect可以传入2个参数:第1个参数是定义的执行函数,组件挂载和更新就会执行。
2025-05-22 10:43:11
1242
原创 Antd中Form详解:
嵌套两层<Form.Item>,第一层无需绑定name属性,第二层绑定name,并设置样式display: "inline-block",让两个<Form.Item>在一行显示,如图所示。(value, selectedOptions) => void,监听Cascader选择值的变化,在selectedOptions可以获取到选中值的label。获取一组字段名对应的值,会按照对应结构返回。如果你不希望传入对象被修改,请克隆后传入)。设置表单的值(该值将直接传入 form store 中并且。
2025-05-13 14:52:28
2785
原创 人工智能+GPT微信小程序聊天机器人(deepSeek)
在scroll-view标签监听滚动事件bindscroll,当scrollHeight - scrollTop - offsetHeight < 20时,说明滚动到屏幕底部,显示向上滚动按钮,并通过设置scrollTop=0实现置顶功能;当scrollTop < 5时,说明到顶部,显示向下滚动按钮,并通过设置scrollTop=999999(设置一个足够大的值,确保滚动到底部)实现置底功能;接口响应的数据是markdown格式,需要借助marked第三方包转化为wxml,然后通过rich-text渲染。
2025-03-07 12:09:01
1273
原创 人工智能之web前端开发(deepSeek与文心一言结合版)
每请求一次创建一个新的AbortController()实例,因为AbortController实例的abort()方法被设计为只能调用一次来取消请求,一旦调用了abort(),与AbortController相关的AbortSigal的aborted属性就会被设置成true,表示请求已取消,当再次调用abort()不会有任何效果。当页面请求fetchEventSource已发出时,切换url到其他网站再切换回来到这个页面时,fetchEventSource会重复请求,导致这两次请求的内容重复。
2025-02-24 17:49:43
1643
1
原创 接入deepSeek后,前端如何给“深度思考“内容单独设置样式?
让后端在响应的数据流中加入标识,用来区分 “ 思考内容 ” 还是 “ 回答内容 ”,前端将“ 思考内容 ”截取出来,给 “ 思考内容 ” 加上html标签并添加行内样式生成字符串thinkingStr,然后将“ 回答内容 ”通过第三方库MarkdownIt将markdown转化为html字符串answerStr。最后将thinkingStr+answerStr=currentHTML拼接起来就生成完整且附带样式的html字符串,通过v-html将currentHTML渲染到页面即可。
2025-02-21 16:15:53
3728
3
原创 响应式布局方案
针对一个非常成熟且未做适配的web端项目,项目中有大量的等高分栏布局,用到的尺寸单位有px,rem,vw等,需要将该项目适配到平板/手机/大屏端,且要求代码改动量最小。分为上下两侧,上侧分为两行,每行有两列(宽度分别是1:1/1:2),下侧分一列。②使用postcss-pxtorem将px转为rem。侧分为两行,每行有两列(宽度分别是1:1/1:2),右侧一列展示。固定值使用px,em,rem等单位,1fr自动填充剩余空间。安装 postcss-px-to-viewport 插件。
2025-10-31 09:56:55
602
原创 MySQL基础day02
窗口函数是 MySQL8.0 以后加入的功能,之前需要通过定义临时变量和大量的子查询才能完成的工作,使用窗口函数实现起来更加简洁高效。同时窗口函数也是面试是的高频考点。-- 示例1:针对 students 表的数据,计算每个同学的Score分数和整体平均分数的差值SELECT*,窗口函数的优点简单: 窗口函数更易于使用。在上面的示例中,与使用聚合函数然后合并结果相比,使用窗口函数的 SQL 语句更加简单。快速: 这一点与上一点相关,使用窗口函数比使用替代方法要快得多。
2025-07-21 16:12:51
758
原创 MySQL基础day01
主要时负责数据库及数据表的结构设置,也就是搭建保存数据的容器,并定义存储规则的语言。DDL-数据库操作# 创建数据库CREATE DATABASE 数据库名称;# 当数据库不存在时,创建数据库CREATE DATABASE IF NOT EXISTS 数据库名称;# 创建数据库并指定utf8编码CREATE DATABASE 数据库名称 CHARSET='utf8';# 显示已有的数据库# 使用指定数据库USE 数据库名称;# 删除指定数据库# 注意:实际工作不要删除数据库!!!
2025-07-17 16:34:25
963
原创 python应用day11--requests爬虫详解
网络爬虫(又被称为网页蜘蛛,网络机器人)就是模拟浏览器发送网络请求,接收请求响应,一种按照一定的规则,自动地抓取互联网信息的程序。原则上,只要是浏览器(客户端)能做的事情,爬虫都能做。爬虫只能获取到浏览器(客户端)所展示出来的数据。数据分析中,进行数据采集的一种方式。①向起始的 url 地址发送请求,并获取响应数据②对响应内容进行提取③如果提取 url,则继续发送请求获取响应④如果提取数据,将数据进行保存。
2025-07-16 16:23:32
274
原创 python基础day10
号赋值的本质就是引用赋值可变容器类型,进行浅拷贝时,只会对第一层数据重新开辟内存,进行拷贝。不可变容器类型,进行浅拷贝时,不会重新开辟内存,等同于=号赋值。可变容器类型,进行深拷贝时,每一层可变数据都会重新开辟内存,进行拷贝。不可变容器类型简单不可变容器类型,进行深拷贝时,不会重新开辟内存,等同于=号赋值。嵌套不可变容器类型,进行深拷贝时如果内层有可变类型时,则会重新开辟内存空间,进行拷贝。如果内层都是不可变类型时,不会重新开辟内存,等同于=号赋值。
2025-07-15 15:51:43
703
原创 python基础day09
HTTP协议是应用层协议,它规定了数据传输的格式;,因为之前写的TCP服务器不能解析浏览器请求时发送的HTTP请求报文,并且不能给浏览器返回HTTP响应报文。①页面通用化,不突出个性,页面需要不断地动态刷新,尤其是用户增多,网速慢得情况,很费时。GIL:全局解释器锁(互斥锁),python中的任何线程要想执行,必须先拿到GIL锁。互斥锁:操作共享资源时,多个线程去抢同一把"锁",抢到锁的线程执行,没抢到锁的线程会阻塞等待。args 表示以元组的方式给执行任务传参:传参一定要和参数的顺序保持一致。
2025-07-11 14:04:54
894
1
原创 linux基础day01
SSH为Secure Shell的缩写,是一种网络安全协议,专为远程登录会话和其他网络服务提供安全性的协议。用户加密实现远程登录、服务器之间的免密登录。SSH协议默认采用RSA算法实现非对称加密公开密钥(public key:简称公钥)和私有密钥(private key:简称私钥)。公钥与私钥是一对,如果用公钥对数据进行加密,只有用对应的私钥才能解密。
2025-06-12 16:33:57
1043
原创 python基础day05
又称上下文管理器,在处理文件时,无论是否产生异常都能保证with语句执行完毕后关闭已经打开的文件,这个过程是自动的无需手动操作。
2025-06-05 16:42:15
854
原创 python基础day04
(1)在Python中一个后缀名为.py的Python文件就是一个模块。(2)模块中可以定义函数、类等。(3)模块也可以避免函数、类、变量等名称相冲突的问题。(4)模块不仅提高了代码的可维护性,同时还提高了代码的可重用性。(5)在给模块命名的时候要求全部使用小写字母,多个单词之间使用下划线进行分隔。(6)如果自定义模块名称与系统内置模块名称相同,那么在导入时会优先导入自定义的模块。
2025-06-04 16:36:56
867
原创 python基础day02
方式一 : 使用[]直接创建列表:列表名=[element1,element2,..elementN]使用内置函数sorted():sorted(lst,key=None,reverse=False)使用()直接创建元组:元组名=(element1,element2,.....elementN)修改序列后,会产生新的内存地址的序列,如str,int,float,bool,元组。(1)sorte排序会产生新的列表对象,原列表不会改变。使用for循环,range()函数,len()函数,根据索引进行遍历。
2025-05-28 15:54:49
667
1
原创 python基础day01
Python语言通过缩进来体现语句之间的逻辑关系 , 类定义、函数定义、流程控制语句以及异常处理语句等行尾的冒号和下一行的缩进表示一个代码块的开始,而缩进结束,则表示一个代码块的结束,通常情况下采用4个空格作为一个缩进量。eval函数是Python中的内置函数,可以直接使用。用于去掉字符串最外侧的引号,并按照Python语句方式执行去掉引号后的字符串,eval()函数经常和input()函数一起使用。在使用占位符进行格式化时,想要输出一个"%",需要使用"%%"(想要输出"{}",需要使用"{{}}")
2025-05-26 17:19:04
691
原创 Antd中Upload组件封装及使用:
(3)待所有文件上传成功后,通过Promise.all获取并存储结果,并通过useEffect及时将七牛返回的结果添加到fileList文件列表中。(2)循环fileList文件列表,使用fetch将所有文件上传到七牛,并将结果包装成Promise return出去。(4)注:由于一次上传多个文件时,beforeUpload钩子函数会执行多次,需要使用debounce进行防抖。文件格式校验/文件大小校验/上传文件总个数校验。拖拽功能/上传到远程(七牛)/文件删除及下载。
2025-05-22 15:26:10
826
原创 Antd中Upload并行上传多个文件:
是 JavaScript 中处理多个 Promise 的一个非常有用的方法,它可以将多个 Promise 实例包装成一个新的 Promise 实例。返回的 Promise 才会解决,解决值是一个数组,包含所有输入 Promise 的解决值,顺序与输入顺序一致。一旦有一个 Promise 被拒绝,其他 Promise 的结果会被忽略(但它们的执行不会被中断)输入 Promise 是并行执行的,但结果的顺序与输入顺序一致。会立即拒绝,并返回第一个被拒绝的 Promise 的原因。聚合多个API调用的结果。
2025-05-20 13:07:15
736
原创 React路由跳转及传参详解:
参数传递方式与 v6 类似,只是部分 API 名称不同。:不会显示在 URL 中,刷新页面后会丢失,适合临时数据。:适合标识资源,如用户ID、文章ID等。:适合过滤、分页等可选的参数。:结合路由守卫实现权限控制。
2025-05-08 10:50:17
2079
原创 react+ts中函数组件父子通信方式
如果子组件需要与父组件交互,则可以通过父组件传递一个回调函数作为 prop,在子组件中调用该函数以通知父组件某些事件的发生。这是最常见也是最基本的父子组件通信方式。父组件通过 props 将数据或回调函数传递给子组件。虽然不建议频繁使用 refs 来管理子组件的状态或行为,但在特殊场景下仍然可行。对于复杂的应用程序结构,可能涉及多个层级间的通信需求。此时可以采用上下文 API (来暴露子组件的功能供父组件调用。) 来简化跨层通信过程。
2025-05-07 13:31:33
599
原创 Antd中Table详解:
title: "操作",key: "",<Button type="link" onClick={() => viewBag(data)}>查看资产包</Button>
2025-05-06 15:59:38
1505
原创 在React中使用echarts-for-react
tooltip: {},legend: {left: 10,top: 30,data: [{ icon: "circle", name: "招标中" },{ icon: "circle", name: "处置中" },{ icon: "circle", name: "已结束" }},series: [name: "招标概览",},label: {},},data: [{ value: 12, name: "招标中" },
2025-04-25 13:53:46
1285
原创 TS+Vue3 如何实现全屏动态水印功能?
1. 创建一个水印容器,覆盖整个屏幕,fixed定位,top:0, left:0, width和height 100%,pointer-events: none;,z-index高。2. 在这个容器内动态生成多个水印元素,比如文本节点,或者使用canvas绘制的水印图片作为背景。3. 使用MutationObserver来保护水印容器,防止被删除或修改。4. 动态更新水印,比如每隔一段时间重新生成水印图片。5.监听resize事件,在窗口大小变化时重新生成。给整个屏幕添加水印,并且水印中的时间动态更新。
2025-04-16 13:23:55
516
原创 js怎么实现网页截图?
将 HTML DOM 元素转换为 Canvas,再导出为图片。:兼容性好,支持大部分现代浏览器,但需注意 CSS 属性兼容性。:通过屏幕共享 API 捕获当前标签页。:需用户授权,适合需要交互式操作的场景。原生 API,无需额外依赖。需要用户手动选择分享区域。复杂页面渲染可能有差异。纯前端实现,灵活度高。
2025-04-11 15:14:53
957
原创 微信小程序键盘弹起时,底部输入框抬起至键盘上方,顶部导航栏固定不动
在微信小程序中,常见的页面布局是顶部导航栏和底部输入框固定不动,中间内容部分自适应。但是当键盘弹起时整个页面被挤压,导致元素上移或被覆盖,业务希望在这种情况下,输入框能自动抬起至键盘上方,顶部导航栏保持固定,不被顶上去。2.在页面的onLoad生命周期中监听键盘事件,记录键盘弹起的高度,并将高度赋值给inputBoxBottom。
2025-03-19 17:37:25
1967
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅