- 博客(143)
- 收藏
- 关注
原创 在vue3 setup下基于Ant Design Vue 实现一个可拖拽行的表格
2、使用ant design vue Table的customRow属性。1、使用原生的drag事件。
2023-03-18 11:05:14
1247
原创 Vue Mixins
Mixins 是一种 Vue.js 组件复用的方法,它允许您将一组组件选项合并到一个单独的对象中,然后将其应用于多个组件。
2023-02-27 12:49:07
1223
原创 实现Vue组件库
Vue组件库是一种常见的前端工具,可以提供可复用的UI组件来简化应用程序的开发和维护。本文将介绍如何实现一个基本的Vue组件库。
2023-02-24 08:45:26
1499
原创 前端自动化构建工具搭建基于Ubuntu20.04:第六步Nginx服务器配置
jenkins构建示例jenkins服务器IP假设为127.0.0.1Nginx服务器IP假设为127.0.0.2jenkins服务器与Nginx服务器实现免密登录# 远程执行命令部署镜像ssh -o StrictHostKeyChecking=no root@127.0.0.2 "docker pull 127.0.0.1:8082/fe/nginx-fe-$timestamp && \docker stop jenkins-prod && \docker r
2022-03-31 09:31:56
2271
原创 前端自动化构建工具搭建基于Ubuntu20.04:第五步ssh免密登录
jenkins服务器与前端资源运行服务器之间实现免密登录jenkins服务器(A)、前端资源运行服务器(B)生成ssh密钥# 邮箱信息根据自己情况选择 一路回车生成下面的图片内容ssh-keygen -t rsassh-keygen -t rsa -C "your_email@example.com"访问密钥# 访问ssh目录cd ~/.ssh# 查看目录下的文件 ls# ssh目录下的内容 authorized_keys id_rsa id_rsa.pub known_
2022-03-31 08:58:35
407
原创 前端自动化构建工具搭建基于Ubuntu20.04:第四步nexus搭建
PS:Nexus镜像仓库镜像拉取docker pull sonatype/nexus3容器启动# home文件下新增nexus文件 映射容器里的nexus-datamkdir /home/nexus && chown -R 200 /home/nexus# 运行容器docker run -d -p 8081:8081 -p 8082:8082 \--name nexus \-v /home/nexus:/nexus-data \--restart always \so
2022-03-31 08:43:09
921
原创 前端自动化构建工具搭建基于Ubuntu20.04:第三步jenkins构建示例
PS: 默认docker,jenkins安装处理完成构建示例新建任务丢弃旧的构建 => 2天 5个源码管理: 选择Git, 填写仓库地址和账号, 可直接使用gitlab、github等的账号密码构建环境: 选择Provide Node & npm bin/ folder to PATH 选取对应版本的node构建执行shellset -etimestamp=`date '+%Y%m%d%H%M%S'` # 查看node信息node -vnpm -v# 更改npm源
2022-03-30 17:37:14
285
原创 前端自动化构建工具搭建基于Ubuntu20.04:第二步jenkins安装
PS:默认已安装完docker一、镜像拉取##拉取jenkinsci/blueocean镜像docker pull jenkinsci/blueocean二、运行jenkins容器##启动jenkinsdocker run -u root --name jenkins --restart always -d -p 8080:8080 -p 50000:50000 \ -v /var/jenkins-data:/var/jenkins_home \ -v /var/run/dock
2022-03-30 17:28:13
326
原创 前端自动化构建工具搭建基于Ubuntu20.04:第一步docker安装
PS:前提默认为root权限一: 修改sources.listapt文件一般在服务器/etc目录下ubuntu apt-get源文件修改 `/etc/apt/sources.list`可以先备份源文件内容 `cp /etc/apt/sources.list /etc/apt/sources.list.bak`将下面的信息复制到sources.list文件中vim sources.list 为编辑sources.list文件可以通过`echo "" > sources.list` 清空so
2022-03-30 17:14:35
1257
原创 windows子linux 使用nginx部署前端react项目并实现开机自启动nginx
开启子系统Linux(Windows SubSystem Linux ⇒ WSL)PowerShell中输入Enable-WindowsOptionalFeature-Online-FeatureName Microsoft-Windows-Subsystem-Linux在MicrosoftStore中搜索Ubuntu本人安装的是20.04.4 LTS的版本
2022-03-15 14:26:09
4639
原创 nest access_token、refresh_token实现用户登录及无感刷新
思路用户登录 返回给前端 ACCESS_TOKEN(1h)、REFRESH_TOKEN(7d)、和 ACCESS_TOKEN 的失效时间(1h)其他的接口请求时 携带 ACCESS_TOKENAxios处理:前端根据 ACCESS_TOKEN 的失效时间判断过期或者即将过期, 或者接口返回用户校验失败401的错误,前端向后端发送刷新 REFRESH_TOKEN 的接口刷新 ACCESS_TOKEN、REFRESH_TOKEN后端nestjs:authGuard拦截接口,判断是否需要accessTo
2022-03-07 11:31:36
2791
2
原创 nest 集成redis
使用ioredis安装$ npm install ioredis -D初始化redisimport Redis from 'ioredis';export const REDIS_DB_0 = new Redis({ port: 6379, // Redis port host: '127.0.0.1', // Redis host // family: 4, // 4 (IPv4) or 6 (IPv6) name: 'person', password: '', d
2022-03-02 14:51:45
1323
2
原创 nest 集成mysql typeorm 并实现数据迁移
前提假设本地的mysql环境安装完成1、 安装typeorm和mysql$ npm install --save @nestjs/typeorm typeorm mysql2 nestjs-config2、导入到AppModule中采用的是cofing的模式导入配置信息异步配置参考地址在src目录下创建config文件database.config.tsexport default { type: process.env.DB_TYPE, host: process.env.DB_
2022-03-02 14:45:54
2043
原创 nest 项目初始化及常规操作
nestjs文档参考地址本帖单纯记录自己安装本地开发环境的过程项目起步安装1、通过cli快速搭建项目$ npm i -g @nestjs/cli$ nest new project-name2、nest 快速创建对应文件夹的操作 nest --help显示Usage: nest <command> [options]Options: -v, --version Output the current ver
2022-03-02 14:15:19
958
原创 react-router v6 轻使用
路由使用App.tsximport { BrowserRouter as Router } from "react-router-dom";import { Suspense } from 'react'; // 配合动态加载的路由const App = () => { return ( <Router> <Suspense fallback={<div>222</div>}> {/* 自定义的路
2022-01-20 17:36:53
470
原创 react项目使用husky配合commitlint、prettier、eslint、stylelint
husky官网地址初始化huskynpx husky-init && npm install # npmnpx husky-init && yarn # Yarn 1yarn dlx husky-init --yarn2 && yarn # Yarn 2它将设置husky,修改package.json并创建一个可以编辑的pre-commit钩子。默认情况下,当您提交时,它将运行npm test。要添加另一个钩
2021-12-16 16:11:20
1024
1
原创 Recoil初探
第一步 引入Recoil// 在App.tsx文件中 使用RecoilRoot包裹页面内容import { RecoilRoot } from 'recoil'<RecoilRoot> <Provider {...stores}> <Layout> <Suspense fallback={<Loading></Loading>}> <Router> <
2021-10-12 15:23:35
426
原创 树结构数据筛选
const treeData = [ { label: '根目录', value: 1, children: [ { label: '一级目录1', value: 11, children: [ { label: '二级目录1', value: 111, children: [ {
2021-09-24 13:22:42
598
原创 百度文字识别功能 跨域,调用
百度智能云tips: base64图片的前缀要去掉 data:image/jpeg;base64, 需要删除tips: base64图片的前缀要去掉 data:image/jpeg;base64, 需要删除tips: base64图片的前缀要去掉 data:image/jpeg;base64, 需要删除跨域处理// 跨域处理 webpack proxy: { '/baiduApi': { target: 'https://aip.baidubce.com', //访问
2021-06-17 11:26:53
706
2
原创 antd upload自定义上传操作
// Demo <Upload fileList={fileList} listType="picture-card" accept={'.jpg,.png,.jpeg'} name="file" onRemove={fileRemove} data={{ module: 'factory' }} // 上传参数 maxCount={10} customRequest={customRequest} > {fileL.
2021-06-17 10:56:46
3388
原创 canvas 二次贝塞尔曲线处理(备用)
const quadraticBezier = (p0, p1, p2, t) => { var k = 1 - t return k * k * p0 + 2 * k * t * p1 + t * t * p2 } const drawLine = (startX: number, startY: number, percent: number) => { const x = quadraticBezier( dat...
2021-06-08 15:45:55
161
原创 for in和 for of区别
for in遍历对象enumerable为true的键let obj = { name: "zf", age: 10}for (let i in obj) { console.log(i)}// name age// 可通过Object.defineProperty 修改 enumerable属性Object.defineProperty(obj, "name", { enumerable: false })for (let i in obj) { console.log(
2021-03-31 15:28:23
107
原创 Symbol见个面
Symbol.hasInstance判断一个实例是否属于某个类,实例通过instanceof判断, 类通过Symbol.hasInstance判断,可以通过修改类的Symbol.hasInstance函数修改逻辑class Bar{}class Baz extends Bar {}let b = new Baz()console.log(b instanceof Bar) // trueconsole.log(b instanceof Baz) // trueconsole.log(Ba
2021-03-31 11:00:48
91
原创 Symbol.iterator实现for of遍历对象
var people={ name:'test', sex:'male', hobbies:['ball','paint','sing'], [Symbol.iterator](){ const _this=this; const keys = Reflect.ownKeys(_this) // 获取到对象的key值列表 let index=0; return { next(){
2021-03-23 11:30:38
232
原创 剑指offer39.数组中出现次数超过一半的数字 javascript
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。你可以假设数组是非空的,并且给定的数组总是存在多数元素。思路: 将数组转换成对象, 将数字本身转成key,将出现次数转成value通过for in循环 找出出现次数大于数组长度一半的键值对 取出目标键/** * @param {number[]} nums * @return {number} */var majorityElement = function(nums) { const obj = {} for
2021-03-22 14:32:40
165
原创 git cz
安装npm install -g commitizen#若速度较慢就用cnpmcnpm install -g commitizen初始化项目进入你想要使用git cz命令的git项目npm init --yes#第二条命令可能需要加入 --forcecommitizen init cz-conventional-changelog --save --save-exact如果上面的操作失败 在package.json中手动插入下面的内容 "config": { "c
2021-03-15 10:30:42
315
原创 合并两个有序链表 javascript
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。/** * Definition for singly-linked list. * function ListNode(val, next) { * this.val = (val===undefined ? 0 : val) * this.next = (next===undefined ? null : next) * } *//** * @param {ListNode
2021-03-11 13:46:13
129
原创 有效的括号
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。const map = new Map()map.set(")", "(")map.set("}", "{")map.set("]", "[")var isValid = function(s) { if (s.length % 2) return false let arr = [] l
2021-03-11 13:28:25
67
原创 查找数组里面的重复的元素javascript
const arr = [1, 2, 3, 4, 1, 1, 2]const map = new Map()const target = []for (let i = 0; i < arr.length; i++) { if (map.get(arr[i]) === arr[i] && !target.includes(arr[i])) { target.push(arr[i]) } else { map.set(arr[i], arr[i]) }
2021-03-05 22:17:55
154
原创 剑指offer27.二叉树的镜像 javascript
请完成一个函数,输入一个二叉树,该函数输出它的镜像。4/ \ 2 7/ \ / \1 3 6 9镜像输出:4/ \7 2/ \ / \9 6 3 1/** * Definition for a binary tree node. * function TreeNode(val) { * this.val = val; * this.left = this.right = null; * } *//** * @
2021-02-24 14:57:09
130
原创 剑指offer25.合并两个排序的链表 javascript
输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。示例1:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4/** * Definition for singly-linked list. * function ListNode(val) { * this.val = val; * this.next = null; * } */function ListNode
2021-02-24 14:43:46
145
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人