日历插件fullcalendar【笔记】

日历插件fullcalendar【笔记】

  • 前言
  • 版权
  • 开源
  • 推荐
  • 日历插件fullcalendar
    • 一、下载
    • 二、初次使用
      • 日历界面
      • 示例-添加事件,删除事件
    • 三、汉化
    • 四、动态数据
    • 五、前后端交互
      • 1.环境搭建-前端搭建
      • 2.环境搭建-后端搭建
      • 3.代码编写-前端代码
        • fullcalendar.html
        • fullcalendar.js
      • 4.代码编写-后端代码
        • entity.CalendarEvent
        • controller.FullCalendarController
        • service.FullCalendarService
  • 最后

前言

2024-3-31 16:09:01

以下内容源自《【笔记】》
仅供学习交流使用

版权

禁止其他平台发布时删除以下此话
本文首次发布于CSDN平台
作者是CSDN@日星月云
博客主页是https://jsss-1.blog.csdn.net
禁止其他平台发布时删除以上此话

开源

日星月云 / 日历插件fullcalendar

jsss-1/calendar-plugin-fullcalendar

推荐

fullcalendar官网

FullCalendar插件的基本使用

FullCalendar 日历插件中文说明文档

日历插件fullcalendar

一、下载

https://fullcalendar.io/docs/initialize-globals

在这里插入图片描述

解压之后
在这里插入图片描述

二、初次使用

日历界面

在这里插入图片描述

下面这个代码是官网的代码,没有其他多的功能

如果要自己设计,需要参考中文说明文档。

FullCalendar 日历插件中文说明文档

<!DOCTYPE html>
<html lang='en'>
  <head>
    <meta charset='utf-8' />
    <script src='https://cdn.jsdelivr.net/npm/fullcalendar@6.1.11/index.global.min.js'></script>
    <script>

      document.addEventListener('DOMContentLoaded', function() {
        var calendarEl = document.getElementById('calendar');
        var calendar = new FullCalendar.Calendar(calendarEl, {
          initialView: 'dayGridMonth'
        });
        calendar.render();
      });

    </script>
  </head>
  <body>
    <div id='calendar'></div>
  </body>
</html>

页面就是这样的
在这里插入图片描述

示例-添加事件,删除事件

下载的解压包下,有一个selecttable.html文件
在这里插入图片描述
放到自己的新建的项目中,并改变这个js的地址
在这里插入图片描述
界面如下

在这里插入图片描述

点击某个日期,就会进行事件的添加操作
在这里插入图片描述

点击某个事件,就会对其进行删除操作

在这里插入图片描述

三、汉化

对于页面加入这个就可以了,
可以按照自己的要求,修改添加和删除的提示词

   					 locale: 'zh', // 设置为中文
                    buttonText: {
                        today: '今天',
                        month: '月',
                        week: '周',
                        day: '日'
                    },

具体的文件

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8"/>
		<script src="./js/index.global.js"></script>

		<script>

            let events = [
                {
                    title: 'All Day Event',
                    start: '2023-01-01'
                },
                {
                    title: 'Long Event',
                    start: '2023-01-07',
                    end: '2023-01-10'
                },
                {
                    title: 'Click for Google',
                    url: 'http://google.com/',
                    start: '2023-01-28'
                }
            ];
            document.addEventListener('DOMContentLoaded', function () {
                var calendarEl = document.getElementById('calendar');
                var calendar = new FullCalendar.Calendar(calendarEl, {
                    locale: 'zh', // 设置为中文
                    buttonText: {
                        today: '今天',
                        month: '月',
                        week: '周',
                        day: '日'
                    },
                    headerToolbar: {
                        left: 'prev,next today',
                        center: 'title',
                        right: 'dayGridMonth,timeGridWeek,timeGridDay'
                    },
                    initialDate: '2023-01-12',
                    navLinks: true, // can click day/week names to navigate views
                    selectable: true,
                    selectMirror: true,
                    select: function (arg) {
                        var title = prompt('事件标题:');
                        if (title) {
                            calendar.addEvent({
                                title: title,
                                start: arg.start,
                                end: arg.end,
                                allDay: arg.allDay
                            })
                        }
                        calendar.unselect()
                    },
                    eventClick: function (arg) {
                        if (confirm('你确定删除这个事件吗?')) {
                            arg.event.remove()
                        }
                    },
                    editable: true,
                    dayMaxEvents: true, // allow "more" link when too many events
                    events: events
                });

                calendar.render();
            });

		</script>


		<script>
            // 函数用于添加新事件对象到事件数组中
            function addEvent(title, start, end, url) {
                let newEvent = {
                    title: title,
                    start: start,
                    end: end,
                    url: url
                };
                events.push(newEvent);
            }

            // 调用函数添加新事件对象
            addEvent('New Event', '2023-02-15', '2023-02-17', 'http://example.com/');

            // 打印更新后的事件数组
            console.log(events);

		</script>

		<style>

            body {
                margin: 40px 10px;
                padding: 0;
                font-family: Arial, Helvetica Neue, Helvetica, sans-serif;
                font-size: 14px;
            }

            #calendar {
                max-width: 1100px;
                margin: 0 auto;
            }

		</style>
	</head>
	<body>

		<div id="calendar"></div>

	</body>
</html>

在这里插入图片描述

四、动态数据

fullcalendar.html

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8"/>
		<script src="./js/index.global.js"></script>

		<script>

            let events = [];

            document.addEventListener('DOMContentLoaded', function () {
                var calendarEl = document.getElementById('calendar');
                var calendar = new FullCalendar.Calendar(calendarEl, {
                    locale: 'zh', // 设置为中文
                    buttonText: {
                        today: '今天',
                        month: '月',
                        week: '周',
                        day: '日'
                    },
                    headerToolbar: {
                        left: 'prev,next today',
                        center: 'title',
                        right: 'dayGridMonth,timeGridWeek,timeGridDay'
                    },
                    initialDate: new Date().toISOString().slice(0, 10),
                    navLinks: true, // can click day/week names to navigate views
                    selectable: true,
                    selectMirror: true,
                    select: function (arg) {
                        var title = prompt('事件标题:');
                        if (title) {
                            let newEvent = {
                                title: title,
                                allDay: arg.allDay,
                                start: arg.start,
                                end: arg.end
                            };

                            calendar.addEvent(newEvent);
            
                            addEvent(newEvent);
                        }
                        calendar.unselect()
                    },
                    eventClick: function (arg) {
                        if (confirm('你确定删除这个事件吗?')) {
                            arg.event.remove();
                            removeEvent(arg.event);
                        }
                    },
                    editable: true,
                    dayMaxEvents: true, // allow "more" link when too many events
                    events: events
                });

                calendar.render();
            });

		</script>


		<style>
            body {
                margin: 40px 10px;
                padding: 0;
                font-family: Arial, Helvetica Neue, Helvetica, sans-serif;
                font-size: 14px;
            }

            #calendar {
                max-width: 1100px;
                margin: 0 auto;
            }

		</style>
	</head>
	<body>

		<div id="calendar"></div>

	</body>

    <script src="./js/fullcalendar.js"></script>

</html>


fullcalendar.js

// 函数用于添加新事件对象到事件数组中
function addEvent(newEvent) {
    events.push(newEvent);
    // console.log(events);


}


// 函数用于删除新事件对象到事件数组中
function removeEvent(e) {
    events = events.filter(event => event == e);
    // console.log(events);

}

五、前后端交互

使用的是前后端分离

1.环境搭建-前端搭建

加入bootstrap,jQuery这些js文件

新建一个fullcalendar文件夹,
如果要移植到其他项目直接拷贝这个文件夹。

在这里插入图片描述

编写一个common.js,作为之后ajax发送请求的地址

/**
 * 服务端PATH
 */
var SERVER_PATH = "http://127.0.0.1:8080";

新建一个fullcalendar.js,之后在这里编写和后端交互的代码

// 函数用于添加新事件对象到事件数组中
function addEvent(newEvent) {
    events.push(newEvent);
    // console.log(events);


}


// 函数用于删除新事件对象到事件数组中
function removeEvent(e) {
    events = events.filter(event => event == e);
    // console.log(events);

}

在fullcalendar.html中引入

    <script src="../bootstrap/js/jquery-3.5.1.min.js"></script>
    <script src="../bootstrap/js/bootstrap.min.js"></script>
    <script src="../js/common.js"></script>
    <script src="./js/fullcalendar.js"></script>

2.环境搭建-后端搭建

SpringBoot项目

在一个fullcalendar包中完成代码,
如果要移植到其他项目直接拷贝这个包。

在这里插入图片描述

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.4.2</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>test</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>test</name>
    <description>test</description>
    <properties>
        <java.version>8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>

        <!--        mysql 依赖-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

application.properties

# server
server.port=8080


# mysql
spring.datasource.url=jdbc:mysql://localhost:3306/fullcalendar?characterEncoding=utf-8&useSSL=false&serverTimezone=Hongkong
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

# path
jsss.web.path=http://127.0.0.1:5500

fullcalendar.controller.FullCalendarController

package com.example.fullcalendar.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@RequestMapping("/fullcalendar")
@CrossOrigin(origins = "${jsss.web.path}", allowedHeaders = "*", allowCredentials = "true")
public class FullCalendarController {

    @GetMapping("/hello")
    @ResponseBody
    public String hello(){
        return "hello";
    }

}

测试hello
在这里插入图片描述

3.代码编写-前端代码

fullcalendar.html

更改了组件操作在请求完成后

html

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8"/>
		<script src="./js/index.global.js"></script>

		<script>

            //放到外部定义,全局变量
            var calendar;

            let events = [];

            document.addEventListener('DOMContentLoaded', function () {
                var calendarEl = document.getElementById('calendar');
                calendar = new FullCalendar.Calendar(calendarEl, {
                    locale: 'zh', // 设置为中文
                    buttonText: {
                        today: '今天',
                        month: '月',
                        week: '周',
                        day: '日'
                    },
                    headerToolbar: {
                        left: 'prev,next today',
                        center: 'title',
                        right: 'dayGridMonth,timeGridWeek,timeGridDay'
                    },
                    initialDate: new Date().toISOString().slice(0, 10),
                    navLinks: true, // can click day/week names to navigate views
                    selectable: true,
                    selectMirror: true,
                    select: function (arg) {
                        var title = prompt('事件标题:');
                        if (title) {
                            let newEvent = {
                                title: title,
                                allDay: arg.allDay,
                                start: arg.start,
                                end: arg.end
                            };

                            // 请求中调用
                            // calendar.addEvent(newEvent);

                            addEvent(calendar,newEvent);
                            
                        }
                        calendar.unselect()
                    },
                    eventClick: function (arg) {
                        if (confirm('你确定删除这个事件吗?')) {
                            // 请求中调用
                            // arg.event.remove();

                            removeEvent(arg,arg.event);

                        }
                    },
                    editable: true,
                    dayMaxEvents: true, // allow "more" link when too many events
                    events: events
                });

                calendar.render();
            });


		</script>



		<style>
            body {
                margin: 40px 10px;
                padding: 0;
                font-family: Arial, Helvetica Neue, Helvetica, sans-serif;
                font-size: 14px;
            }

            #calendar {
                max-width: 1100px;
                margin: 0 auto;
            }

		</style>
	</head>
	<body>

		<div id="calendar"></div>

	</body>

    <script src="../bootstrap/js/jquery-3.5.1.min.js"></script>
    <script src="../bootstrap/js/bootstrap.min.js"></script>
    <script src="../js/common.js"></script>
    <script src="./js/fullcalendar.js"></script>

</html>


fullcalendar.js

js

$(document).ready(function () {


    $.ajax({
        type: "GET",
        url: SERVER_PATH + "/fullcalendar/list",
        xhrFields: {withCredentials: true},
        success: function (result) {
            if (result.status) {
                alertBox(result.data.message);
                return false;
            }

            result.data.forEach(function(e) {
                calendar.addEvent(e);//外部的全局变量
                events.push(e);
            });
            
            // console.log(events);
        }
    });

});


// 函数用于添加新事件对象到事件数组中
function addEvent(calendar,newEvent) {

    $.ajax({
        type: "POST",
        url: SERVER_PATH + "/fullcalendar/add",
        contentType: 'application/json',
        data: JSON.stringify(newEvent),
        xhrFields: {withCredentials: true},
        success: function (result) {
            if (result.status) {
                alertBox(result.data.message);
                return false;
            }
          
            calendar.addEvent(newEvent);
            events.push(newEvent);
            // console.log(events);

        }
    });


}



// 函数用于删除新事件对象到事件数组中
function removeEvent(arg,e) {

    let remove = {
        title: e.title,
        allDay: e.allDay,
        start: e.start,
        end: e.end
    };

    $.ajax({
        type: "POST",
        url: SERVER_PATH + "/fullcalendar/remove",
        contentType: 'application/json',
        data: JSON.stringify(remove),
        xhrFields: {withCredentials: true},
        success: function (result) {
            if (result.status) {
                alertBox(result.data.message);
                return false;
            }

            arg.event.remove();
            events = events.filter(event => event == e);
            // console.log(events);

        }
    });

    

}

4.代码编写-后端代码

在这里插入图片描述

使用Redis存储数据

        <!--        fastjson 依赖-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.73</version>
        </dependency>

        <!--        redis 依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
entity.CalendarEvent

在这里插入图片描述

package com.example.fullcalendar.entity;


import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;

import java.util.Date;

@Data
@ToString
@EqualsAndHashCode
public class CalendarEvent {


    //标题
    private String title;

    //是否全天
    private Boolean allDay;

    //开始时间
    private Date start;

    //结束时间
    private Date end;

}

controller.FullCalendarController

刚开始是存储到内存中测试List<CalendarEvent> list=new ArrayList<>();
持久化到数据库或者Redis中

package com.example.fullcalendar.controller;

import com.example.common.ResponseModel;
import com.example.fullcalendar.entity.CalendarEvent;
import com.example.fullcalendar.service.FullCalendarService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import java.util.ArrayList;
import java.util.List;

@Controller
@RequestMapping("/fullcalendar")
@CrossOrigin(origins = "${jsss.web.path}", allowedHeaders = "*", allowCredentials = "true")
public class FullCalendarController {


    @Autowired
    FullCalendarService fullCalendarService;


//    List<CalendarEvent> list=new ArrayList<>();


    @GetMapping("/list")
    @ResponseBody
    public ResponseModel list(){
        String key="calendarEvents";
        List<CalendarEvent> list=fullCalendarService.list(key);
        return new ResponseModel(list);
    }

    @PostMapping("/add")
    @ResponseBody
    public ResponseModel add(@RequestBody CalendarEvent calendarEvent){
//        list.add(calendarEvent);
        String key="calendarEvents";
        fullCalendarService.add(key,calendarEvent);
        return new ResponseModel("添加成功");

    }

    @PostMapping("/remove")
    @ResponseBody
    public ResponseModel remove(@RequestBody CalendarEvent calendarEvent){
//        list.remove(calendarEvent);
        String key="calendarEvents";
        fullCalendarService.remove(key,calendarEvent);
        return new ResponseModel("删除成功");

    }


}


service.FullCalendarService
package com.example.fullcalendar.service;

import com.example.fullcalendar.entity.CalendarEvent;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class FullCalendarService {
    @Autowired
    RedisTemplate redisTemplate;


    public List<CalendarEvent> list(String key) {
        List<CalendarEvent> calendarEvents = redisTemplate.opsForList().range(key, 0, -1);
        return calendarEvents;
    }

    public void add(String key,CalendarEvent calendarEvent) {
        redisTemplate.opsForList().rightPush(key, calendarEvent);
    }

    public void remove(String key,CalendarEvent calendarEvent) {
        redisTemplate.opsForList().remove(key, 0, calendarEvent);
    }

}



最后

2024-3-31 21:02:47

迎着日光月光星光,直面风霜雨霜雪霜。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【前端】layui前端框架学习笔记

【前端目录贴】 参考视频:LayUI 参考笔记:https://blog.csdn.net/qq_61313896/category_12432291.html 1.介绍 官网&#xff1a;http://layui.apixx.net/index.html 国人16年开发的框架,拿来即用,门槛低 … 2. LayUi的安装及使用 Layui 是一套开源的 Web UI 组件库&#xff0…

乐乐音乐鸿蒙版-支持krc歌词(动感歌词、翻译和音译歌词)

简介 乐乐音乐主要是基于HarmonyOS开发的音乐播放器&#xff0c;它支持lrc歌词和动感歌词(ksc歌词、krc歌词和hrc歌词等)、多种格式歌词转换器及制作动感歌词、翻译歌词和音译歌词。 开发环境 ArkTS、Stage模型、SDK3.1、 API 9 注&#xff1a;没试过在真机条件下调试。 功…

SpringCloud-Eureker配置中心搭建

一、基于本地配置文件的 Eureker配置中心搭建 1.、创建一个springBoot项目 <properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><java.version>1.8</java.version><component.version>0.0.1-SNAPSHOT</…

机器学习:探索数据中的模式与智能

文章目录 导言介绍&#xff1a;机器学习的定义和重要性发展历程&#xff1a;从概念到现实应用 基础概念机器学习的基本原理监督学习、无监督学习和强化学习的区别与应用1.监督学习2.无监督学习3.强化学习 常见的机器学习任务和应用领域 结语 导言 当代科技领域中最为引人注目的…

两张图片相似度匹配算法学习路线

大纲&#xff1a;​​​​​​目标跟踪基础&#xff1a;两张图片相似度算法-腾讯云开发者社区-腾讯云 (tencent.com) 目标跟踪基础&#xff1a;两张图片相似度算法 (qq.com) 一、传统方法 1.欧式距离&#xff08;用于判断是否完全相同&#xff09; [三维重建] [机器学习] 图…

NC13610 矩阵

题目描述 给出一个n * m的矩阵。让你从中发现一个最大的正方形。使得这样子的正方形在矩阵中出现了至少两次。输出最大正方形的边长。 输入描述: 第一行两个整数n, m代表矩阵的长和宽&#xff1b; 接下来n行&#xff0c;每行m个字符&#xff08;小写字母&#xff09;&#x…

Java8 新特性 Stream流操作

数据准备 package test;/*** [一句话描述该类的功能]** author : [61692]* version : [v1.0]* createTime : [2024/3/31 14:52]*/ public class Student {private int id;private int age;private int yuwenScore;private int mathScore;private String name;private int yi…

c++初阶篇----string的底层模拟

string类的模拟 目录 string类的模拟功能介绍各功能的实现类的构造函数&#xff0c;拷贝构造函数&#xff0c;析构函数迭代器的实现string的内部容量访问成员函数string的修改成员函数string类的相关联函数string类的输入输出友元 汇总string功能的实现汇总测试代码 功能介绍 …

Vue3+.NET6前后端分离式管理后台实战(八)

1&#xff0c;Vue3.NET6前后端分离式管理后台实战(八)已经在订阅号发布有兴趣的可以关注一下&#xff01; 有兴趣的可以关注一下&#xff1a;

深入剖析Spring WebFlux:从MethodHandler到反射获取请求信息的源码之旅

文章目录 前言一、获取请求执行的类、方法信息二、获取请求url变量三、获取请求处理数据总结 前言 最近想写一个代办事项后台服务&#xff0c;底层&#xff0c;选型WebFlux。在操作层面上&#xff0c;针对部分操作&#xff0c;想在不侵入业务代码的前提下&#xff0c;记录操作…

泛型总结(擦除机制+泛型上界+通配符的上下界)

文章目录 泛型一、 什么是泛型1.能用于多种类型&#xff0c;把类型当做参数1.1 作用1.2 语法 二、擦除机制1. 为什么采用擦除机制实现泛型&#xff1f;向后兼容性 移植兼容性 2. 为什么不能使用“newT()”&#xff1f;3. 创建类型T的数组3.1 不安全的写法3.2 官方的写法 3. 3 正…

从0到1:兼职招聘小程序开发笔记(一)

可行性分析 兼职招聘小程序&#xff1a;为雇主和求职者提供便利的平台&#xff0c;旨在帮助雇主招聘兼职员工&#xff0c;并让求职者寻找合适的兼职工作。提供简单、快捷的方式来匹配兼职岗位和候选人&#xff0c;节省了招聘和求职的时间和精力。其主要功能模块包括&#xff1…

Cross Hyperspectral and LiDAR Attention Transformer

TGRS 2024&#xff1a;Cross Hyperspectral and LiDAR Attention Transformer: An Extended Self-Attention for Land Use and Land Cover Classification 题目 Cross Hyperspectral and LiDAR Attention Transformer: An Extended Self-Attention for Land Use and Land Cov…

安装mysql8,启动mysql服务日志 libstdc++.so.6: wrong ELF class: ELFCLASS32

背景&#xff1a;linux centos7.9安装mysql5.7版本&#xff0c;服务启动成功后被告知要求安装mysql8版本&#xff0c;故卸载之后安装mysql8&#xff0c;后启动mysql服务报错提示&#xff1a;libstdc.so.6: wrong ELF class: ELFCLASS32 解决办法&#xff1a; 1、下载安装包li…

LeetCode Python - 81. 搜索旋转排序数组 II

目录 题目描述解法运行结果 题目描述 已知存在一个按非降序排列的整数数组 nums &#xff0c;数组中的值不必互不相同。 在传递给函数之前&#xff0c;nums 在预先未知的某个下标 k&#xff08;0 < k < nums.length&#xff09;上进行了 旋转 &#xff0c;使数组变为 […

屌爆了,我不懂音乐,但AI让我一天完成原创专辑制作

前言 作为一个完全不懂音乐的程序员&#xff0c;我从未想象过自己能够踏入音乐创作的领域。然而&#xff0c;借助AI的力量&#xff0c;我竟然实现了制作一张完整专辑的梦想&#xff0c;而整个过程不过一天时间。从写词到生成音频&#xff0c;再到制作MV&#xff0c;每首歌曲仅需…

PHP在线客服系统源码修复版

源码简介 在线客服系统网站源码https://www.888host.cn/330.html 新增消息预知&#xff0c;消息撤回&#xff0c;消息已读未读&#xff0c; 修复需要刷新才能收到消息 修复客户来源地址 修复消息提示音 修复桌面推送提醒 搭建环境 宝塔面板 &#xff0c;Nginx1.16-1.18 …

什么是检索增强生成(Retrieval-Augmented Generation,RAG)

什么是RAG&#xff1f; 检索增强生成&#xff08;Retrieval-Augmented Generation&#xff0c;RAG&#xff09;&#xff0c;是指为大模型提供外部知识源的概念。能够让大模型生成准确且符合上下文的答案&#xff0c;同时能够减少模型幻觉。 用最通俗的语言描述&#xff1a;在已…

第十四届蓝桥杯软件赛省赛C/C++ C组 思路讲解与参考代码

A. 求和&#xff1a; 问题描述 求 11 &#xff08;含&#xff09;至 2023040820230408 &#xff08;含&#xff09;中每个数的和。 思路&#xff1a;等差数列&#xff0c;d位1&#xff0c;Sn &#xff08;a1an&#xff09;*n/2; 参考代码&#xff1a; #include <iost…