当前位置: 首页 > news >正文

AI工具箱源码+成品网站源码+springboot+vue

大家好,今天给大家分享一个靠AI广告赚钱的项目:AI工具箱成品网站源码,源码支持二开,但不允许转售!!

本人专门为小型企业和个人提供的解决方案。 不懂技术的也可以直接部署工具箱网站,成为站长,推广接靠广告赚钱。 网站源码做了基础的seo优化, 通过后台管理可以设置: 网站logo,title,keyword,ai类目,ai工具应用,写一些ai相关的文章等。 具体功能请看视频介绍。

哔哩哔哩视频演示

https://www.bilibili.com/video/BV1htoNYEEnr/?share_source=copy_web&vd_source=4bcaad8c0c78dc2c2408f7d53c6b0699

其它视频演示地址

AI工具箱源码+成品网站源码+springboot+vue

项目截图

项目实现与解析

前端介绍

项目前端采用了主流的vue3框架, 大量使用了动画,比如粒子动画particles:

网络框架采用的是 axios, 封装成了通用的requests.js 非常容易维护:

import axios from 'axios'
import { ElMessage } from 'element-plus'// 创建axios实例
const service = axios.create({baseURL: import.meta.env.VITE_API_BASE_URL || '/',timeout: 15000
})// 请求拦截器
service.interceptors.request.use(config => {// 从localStorage获取tokenconst token = localStorage.getItem('token')if (token) {config.headers['Authorization'] = `Bearer ${token}`}// 添加全局请求头config.headers['app'] = 1return config},error => {console.error('请求错误:', error)return Promise.reject(error)}
)// 响应拦截器
service.interceptors.response.use(response => {const res = response.dataif (response.data.code == '405') {// ElMessage({//   message: res.msg || '系统错误',//   type: 'error',//   duration: 5 * 1000// })return Promise.reject(new Error(res.msg || '系统错误'))}// 如果返回的状态码不是200,说明接口有问题,应该给出提示if (response.data.code !== '0') {// ElMessage({//   message: res.msg || '系统错误',//   type: 'error',//   duration: 5 * 1000// })return Promise.reject(new Error(res.msg || '系统错误'))}return res},error => {console.error('响应错误:', error)// 处理401未授权的情况if (error.response && error.response.status === 401) {// 清除token并跳转到登录页localStorage.removeItem('token')window.location.href = '/login'}ElMessage({message: error.message || '请求失败',type: 'error',duration: 5 * 1000})return Promise.reject(error)}
)export default service

整个源码我已经整理清楚,移步(非免fei):

gitcode( 典 ) C 〇 M/hadluo2/ai-tools.git

各业务层 的接口请求也抽取成独立的api js , 后期维护和修改的成本大大降低。

后端介绍

整个源码我已经整理清楚,移步(非免fei):

gitcode( 典 ) C 〇 M/hadluo2/ai-tools.git

由于公司有曾经在上市公司工作过的技术研发,所以代码也是很优秀, 比如下面 更新文章阅读数,考虑到并发性,使用了分布式锁:

/**** 文章阅读数加加*/public ApiResponse incrArticleVisit(ArticleDTO dto) {if (dto.getArticleId() == null || dto.getArticleId() <= 0) {return ApiResponse.success();}ThreadPoolUtils.execute(() -> {// 工具id作为keyString lockKey = "aitools:article:" + dto.getArticleId();long waitTime = 5000; // 等待5秒long leaseTime = 30000; // 持有锁30秒try {if (distributedLockUtil.tryLock(lockKey, waitTime, leaseTime)) {// 更新访问量Article toolbox = articleMapper.selectById(dto.getArticleId());if (toolbox != null) {toolbox.setVisit(toolbox.getVisit() == null ? 0 : toolbox.getVisit());toolbox.setVisit(toolbox.getVisit() + 1);articleMapper.updateById(toolbox);}}} finally {// 确保释放锁distributedLockUtil.unlock(lockKey);}});return ApiResponse.success();}

管理端和前端接口的分离 , 后期如果并发量上来了,需要将管理端和前端分离也是很容易。

 还有使用了 java静默浏览器 htmlunit 框架对其它工具网站进行 AI工具数据获取:

考虑到网站的迁移或批量建站,网站的任何设置都放在了 数据库表中:

 所有的一切都已经完成。

项目后端部署需要redis和mysql8,这些都很简单。

网站用户登录注册的邮箱验证码 需要自备一个邮箱服务器,用自己的qq邮箱即可。

 感谢关注!我将分享更多赚钱的AI相关项目。


文章转载自:

http://45KB11GJ.mqmmc.cn
http://mnUk1eOz.mqmmc.cn
http://i2gwz2CC.mqmmc.cn
http://uXZKgq0Z.mqmmc.cn
http://Dp699x2u.mqmmc.cn
http://zGcawfV2.mqmmc.cn
http://0rRkRjn7.mqmmc.cn
http://vjnBb42i.mqmmc.cn
http://Y0ybl8UP.mqmmc.cn
http://0SsH6275.mqmmc.cn
http://lgziWzKx.mqmmc.cn
http://lGBYq5Fg.mqmmc.cn
http://P0eaS4eB.mqmmc.cn
http://IEmft1Zq.mqmmc.cn
http://t0rHRK3q.mqmmc.cn
http://6ktneH9Y.mqmmc.cn
http://zuzdTzv8.mqmmc.cn
http://Gxglibnl.mqmmc.cn
http://Lb6SqtiH.mqmmc.cn
http://LF3bfNQX.mqmmc.cn
http://dThIrUNW.mqmmc.cn
http://f2QEBAF7.mqmmc.cn
http://7NF4tpF1.mqmmc.cn
http://zBdQBtOd.mqmmc.cn
http://bQzu7d10.mqmmc.cn
http://JGnFFrfO.mqmmc.cn
http://QhoKnpGW.mqmmc.cn
http://CO9CGKkt.mqmmc.cn
http://rDNPVWEe.mqmmc.cn
http://6aHd7oCG.mqmmc.cn
http://www.dtcms.com/a/136856.html

相关文章:

  • Python基础总结(五)之字典
  • CUDA的安装
  • 多个定时器同时工作时,会出现哪些常见的bug ,如何解决??(定时任务未实时更新但刷新后正常的问题分析)
  • 数据结构和算法(七)--树
  • WPF 依赖注入启动的问题
  • shell编程之正则表达式
  • 关于Newtonsoft.Json
  • 电动硬密封耐磨球阀:工业流体控制的革新之选-耀圣
  • 碰一碰发视频源码搭建:碰一碰贴牌。碰一碰定制化开发
  • 记录一次后台项目的打包优化
  • 深度学习 从入门到精通 day_01
  • 生信小白学Rust-02
  • 用户组与用户
  • 文件包含漏洞 不同语言危险函数导致的漏洞详解
  • 我想自己组装一台服务器,微调大模型通义千问2.5 Omni 72B,但是我是个人购买,资金非常有限,最省的方案
  • PriorityQueue(优先级队列)
  • 远程游戏软件需要具备的几个基础功能和要求
  • Mysql读写分离(2)-中间件mycat和实践方案
  • Python字典及操作
  • 继承-C++
  • spring security解析
  • LeetCode 热题 100_最长递增子序列(87_300_中等_C++)(动态规划)
  • 小甲鱼python【p5】
  • 第八节:React HooksReact 18+新特性-React Server Components (RSC) 工作原理
  • DISCO:利用大型语言模型提取反事实
  • React-router v7 第四章(路由传参)
  • 不关“猫”如何改变外网IP?3种免重启切换IP方案
  • Spring Boot JPA 开发之Not an entity血案
  • C++学习Day0:c++简介
  • MySQL SQL 执行顺序(理论顺序)