【uniapp3】分享一个自己写的h5日历组件

简言

分享一下自己基于uniapp写的日历组件。如果不太满足你的需求,可以自己改造。
在这里插入图片描述

日历

实现分析:

  • 页面显示 - 分为顶部显示和日历显示,我这里做了多行和单行显示两种情况,主要是当时看着手机的日历做的,手机上的日历单行和多行显示切换特别丝滑,但是我没实现出来。(我觉得限制原因是当时水平不够,再加上滚动用的uniapp的swipper组件,不能定制化实现)。
  • 分屏滚动 - 使用 uniapp的swipper组件,我这里,单行使用这个月周+上个月最后一周+下个月最后一周数据,多行使用这个月+上个月+下个月数据;这样处理的原因是在进行月份切换的时候可以先显示数据然后进行数据更新,实现无感无限切换滚动。
  • 各种事件 - 点击日期发送选中日期的数据。
  • 数据逻辑 - 主要是先确定你想要的数据结构,然后以这个为单位组装成行(周)数组或多行(月)数组。

没有自己实现滚动,也算是取了巧。感觉难点就是日期的数据处理 和 滚动,已经单多行切换了。

代码: uniapp写的 vue2和vue3应该都能用,样式注意使用了sass。

<template><view class="calendar"><view class="wrapper"><slotname="top":nowMonthText="nowMonthText":pickerMonth="pickerMonth":prevMonth="prevMonth":nextMonth="nextMonth"><view class="top"><view class="month-box"><view class="month-text"><view class="uni-input" @tap="pickerMonth">{{nowMonthText}}</view></view><view class="back-today" @tap="goToday">回到今天</view></view><view class="top-left"><view class="icon-arrow arrow-left" @tap="previousFn"></view><view class="icon-arrow arrow-right" @tap="nextFn"></view></view></view></slot><view class="calender-box"><view class="head-title"><viewclass="head-title-item"v-for="v in calenderTitleList":key="v">{{ v }}</view></view><!-- 一行显示 --><swiperv-if="showType === 1"class="row-swiper"circular:disable-programmatic-animation="true":duration="duration":current="swiperCurrent"@change="swipereChangFn"><swiper-itemv-for="(v, index) in calenderRowDaysList":key="index":item-id="v.label"><view class="row-days-list"><viewclass="days-list-item"v-for="(item, i) in v.value":key="`${index}-${i}`":class="{used: item.used,}"><viewclass="label"v-if="(isNowMonth && item.isNowMonth) || !isNowMonth":class="{disabled: item.disabled,}"@tap="clickDay(item)"><viewclass="text":class="{'active-item':nowSelectDay && nowSelectDay['time'] === item.time,'active-item--disabled':nowSelectDay &&nowSelectDay['time'] === item.time &&item.disabled,'today-text':item.label === '' &&nowSelectDay &&nowSelectDay['time'] !== item.time &&!item.disabled,}">{{ item.label }}</view><viewv-show="!item.disabled && item.state"class="state-item text-state-item"></view><viewclass="item-adjust"v-if="!item.disabled && item.adjust && item.adjust.value":class="{ 'text-state-leave': item.adjust.value == '1' }">{{ item.adjust.value == "1" ? "休" : "课" }}</view></view></view></view></swiper-item></swiper><!-- 全行显示 --><swiperv-elseclass="all-swiper"circular:disable-programmatic-animation="true":duration="duration"@change="swipereChangFn":current="swiperCurrent":class="{'six-height':swiperDaysList[0] && swiperDaysList[0].value.length / 7 === 6,}"><swiper-itemv-for="(v, index) in swiperDaysList":key="index":item-id="v.label"><view class="days-list"><viewclass="days-list-item"v-for="(item, i) in v.value":key="`${index}-${i}`":class="{used: item.used,}"><viewclass="label"v-if="(isNowMonth && item.isNowMonth) || !isNowMonth":class="{disabled: item.disabled,}"@tap="clickDay(item)"><viewclass="text":class="{'active-item':nowSelectDay && nowSelectDay['time'] === item.time,'active-item--disabled':nowSelectDay &&nowSelectDay['time'] === item.time &&item.disabled,'today-text':item.label === '' &&nowSelectDay &&nowSelectDay['time'] !== item.time &&!item.disabled,}">{{ item.label }}</view><viewv-show="!item.disabled && item.state"class="state-item"></view><viewclass="item-adjust"v-if="!item.disabled && item.adjust && item.adjust.value":class="{ 'text-state-leave': item.adjust.value == '1' }">{{ item.adjust.value == "1" ? "休" : "课" }}</view></view></view></view></swiper-item></swiper><view v-if="!hideArrow" class="arrow-wrapper" @click="showTypeChange"><viewclass="arrow-left":class="{ 'arrow-left--up': showType === 0 }"></view><viewclass="arrow-right":class="{ 'arrow-right--up': showType === 0 }"></view></view></view><view class="content"><slot :value="nowSelectDay"></slot></view></view><!-- 选择月份 --><uni-popup ref="monthPopup" :type="'bottom'"><view class="month-popup-box"><view class="month-top"><view class="cancel-text" @tap="cancelDateFn">取消</view><view class="ok-text" @tap="sucessDate">完成</view></view><picker-view:value="selectValue"@change="bindChange"class="picker-view"><picker-view-column><view class="item" v-for="(item, index) in years" :key="index">{{ item }}年</view></picker-view-column><picker-view-column><view class="item" v-for="(item, index) in months" :key="index">{{ item }}月</view></picker-view-column></picker-view></view></uni-popup></view>
</template><script>
export default {props: {isNowMonth: {//  是否只显示当前月日历值type: Boolean,default: false,},limitNowMoth: {//  限制只有当月type: Boolean,default: false,},showRowType: {type: Boolean,default: true,},dateStateList: {//  日历中的状态 [{date:'2023/12/1',value:1}]type: Array,default: () => [],},dateAdjustList: {//  日历中的调课状态 [{date:'2023/12/1',value:1}] 1为休,2为调课type: Array,default: () => [],},defaultValue: {type: String,default: "",},hideArrow: {type: Boolean,default: false,},},emits: ["ok", "cancel", "changeMonth"],data() {const date = new Date();const years = [];const year = date.getFullYear();const months = [];const month = date.getMonth() + 1;const day = date.getDate();for (let i = 1990; i <= date.getFullYear() + 30; i++) {years.push(i);}for (let i = 1; i <= 12; i++) {months.push(i);}return {monthValue: [years.findIndex((item) => item === year), month - 1], //  选择月份值years,year, //当前年months,month, //  当前月day, //  当前日selectValue: [], //  月份选择器选中的值//  日历calenderTitleList: ["一", "二", "三", "四", "五", "六", "日"],swiperDaysList: [], //  swiper全行显示列表 0-当月 1-下月 2-上月swiperCurrent: 0, //  swiper当前显示索引duration: 500, //  动画时长calenderRowDaysList: [], //  rowSwiper行显示列表nowSelectDay: null, //  当前选中值showType: 0, //  0 全部行显示 1,1行显示isJust: false, //  是否是校准};},computed: {nowMonthText() {const [yearIndex, monthIndex] = this.monthValue;let str = `${this.years[yearIndex]? this.years[yearIndex]: this.years[this.years.length - 1]}${this.months[monthIndex]}`;this.$emit("changeMonth", [this.years[yearIndex],this.months[monthIndex].toString().padStart(2, "0"),]);return str;},},watch: {showRowType: {handler(val) {if (val) {this.showType = 1;} else {this.showType = 0;}},immediate: true,},defaultValue(val) {if (val && val !== "") {this.nowSelectDay = {time: Date.parse(val),};}},},mounted() {this.updateCalender();},methods: {showTypeChange() {this.showType = 1 - this.showType;// this.goToday();this.updateCalender(false);this.initCurrent();},//  点击天数clickDay(item) {if (item.disabled) return;this.nowSelectDay = item;this.$emit("ok", this.nowSelectDay);},pickerMonth() {if (this.limitNowMoth) return;//  同步当前月份值this.selectValue = this.monthValue.map((item) => item);this.$refs.monthPopup.open();},//  选择月份赋值bindChange({ target }) {this.selectValue = target.value;},//  选择月份完成sucessDate() {this.monthValue = this.selectValue.map((item) => item);this.updateCalender(false);if (this.showType === 1) {//  一行显示//  默认回到第一项this.initCurrent();}this.$refs.monthPopup.close();},//  取消选择月份cancelDateFn() {this.$refs.monthPopup.close();},swipereChangFn(event) {if (this.isJust) return;const { currentItemId, current } = event.detail;this.swiperCurrent = current;switch (currentItemId) {case "next":this.nextMonth();break;case "pre":this.prevMonth();break;}//  月份改变后定位if (this.showType === 0) {setTimeout(() => this.initCurrent(), 50);} else {if (currentItemId === "next") {setTimeout(() => this.initCurrent(), 50);} else if (currentItemId === "pre") {const CalenderDaysList = this.getDayList(this.years[this.monthValue[0]],this.months[this.monthValue[1]]);let preArr = this.group(CalenderDaysList, 7);setTimeout(() => this.initCurrent(preArr.length - 1), 50);}}},//  默认回到第一项initCurrent(index = 0) {if (index === 0) this.isJust = true;this.duration = 0;this.swiperCurrent = index;setTimeout(() => {this.isJust = false;this.duration = 500;}, 0);},//  回到今天goToday() {const { years, year, month, day } = this;const nowDayDate = `${year}/${month}/${day}`;this.monthValue = [years.findIndex((item) => item === year), month - 1];this.updateCalender();//  默认点击今天this.nowSelectDay = {value: day, //  值label: "今", //  描述disabled: false, //  禁用isNowMonth: true,date: nowDayDate,time: new Date(year, month - 1, day).valueOf(),state: this.dateStateList.find((data) => data.date === nowDayDate),adjust: this.dateAdjustList.find((data) => data.date === nowDayDate),};//  生成日历碰到今日会触发,这里注释掉// this.$emit("ok", this.nowSelectDay);},//previousFn() {if (this.swiperCurrent !== 0) {this.swiperCurrent--;} else {this.swipereChangFn({detail: {currentItemId: "pre",current: 0,},});}},nextFn() {this.swiperCurrent++;},//  上一月prevMonth() {this.monthValue = this.monthValue.map((item, index) => {if (this.monthValue[1] <= 0 && index == 0) {return --item;} else if (this.monthValue[1] <= 0 && index == 1) {return 11;} else if (index === 1) {return --item;}return item;});this.updateCalender(false);},//  下一月nextMonth() {this.monthValue = this.monthValue.map((item, index) => {if (this.monthValue[1] >= 11 && index == 0) {return item + 1;} else if (this.monthValue[1] >= 11 && index == 1) {return 0;} else if (index === 1) {return ++item;}return item;});this.updateCalender(false);},//  更新日历updateCalender(updateNowDay = true) {const year = this.years[this.monthValue[0]];const month = this.months[this.monthValue[1]];const preYMArr = this.getMonthV(this.monthValue, 2);const nextYMArr = this.getMonthV(this.monthValue);const nowCalenderDaysList = this.getDayList(year, month);const preCalenderDaysList = this.getDayList(preYMArr[0], preYMArr[1]);const nextCalenderDaysList = this.getDayList(nextYMArr[0], nextYMArr[1]);if (this.year === year && this.month === month) {// 含有(今)年月for (let i in nowCalenderDaysList) {if (nowCalenderDaysList[i].label === "今" && updateNowDay) {this.nowSelectDay = nowCalenderDaysList[i];this.$emit("ok", this.nowSelectDay);if (this.showType !== 0) {this.swiperCurrent = Math.ceil((i * 1 + 1) / 7) - 1;}}}}if (this.showType === 0) {//  全行显示this.swiperDaysList = this.limitNowMoth? [{label: "now",value: nowCalenderDaysList,}, //  当月]: [{label: "now",value: nowCalenderDaysList,}, //  当月{label: "next",value: nextCalenderDaysList,}, //  下一月{label: "pre",value: preCalenderDaysList,},//  上一月];} else {//1 一行let nowArr = this.group(nowCalenderDaysList, 7);let preArr = this.group(preCalenderDaysList, 7);let nextArr = this.group(nextCalenderDaysList, 7);this.calenderRowDaysList = this.limitNowMoth? [...nowArr.map((arr) => {return { label: "now", value: arr };}), //  当月]: [...nowArr.map((arr) => {return { label: "now", value: arr };}), //  当月{label: "next",value: nextArr[0],}, //  下月第一行{label: "pre",value: preArr[preArr.length - 1],}, //  上月最后一行];}},//  根据当前月份值获取上下年月值getMonthV(value, type = 1) {let arr = []; //  当前月份if (type === 1) {//  默认获取下一月arr = value.map((item, index) => {if (value[1] >= 11 && index == 0) {return item + 1;} else if (value[1] >= 11 && index == 1) {return 0;} else if (index === 1) {return ++item;}return item;});} else {//  获取上一月arr = value.map((item, index) => {if (value[1] <= 1 && index == 0) {return --item;} else if (value <= 1 && index == 1) {return 11;} else if (index === 1) {return --item;}return item;});}return [this.years[arr[0]], this.months[arr[1]]];},//  根据年月获取天数列表getDayList(year, month) {let list = [];const startDate = new Date(year, month - 1, 1);const endDate = new Date(year, month, 1);const days = (endDate - startDate) / (1000 * 60 * 60 * 24);for (let i = 1; i <= days; i++) {const dateStr = `${year}/${month}/${i}`;let week = new Date(dateStr).getDay();if (i === 1) {let startIndex = week === 0 ? 6 : week - 1;//  上月天数列表let prevDays =(startDate - new Date(year, month - 2, 1)) / (1000 * 60 * 60 * 24);let preList = [];let piL = 7 + (startIndex - 7);for (let pi = 0; pi < piL; pi++) {const preDay = prevDays - piL + pi + 1;const date = `${year}/${month - 1}/${preDay}`;preList.push({value: preDay, //  值label: preDay, //  描述disabled: true, //  禁用isNowMonth: false,date,time: new Date(date).valueOf(),state: this.dateStateList.find((data) => data.date === date),adjust: this.dateAdjustList.find((data) => data.date === date),});}list.splice(0, startIndex, ...preList);}list.push({value: i, //  值label:new Date(year, month - 1, i).valueOf() ===new Date(this.year, this.month - 1, this.day).valueOf()? "今": i, //  描述disabled: false, //  禁用isNowMonth: true,date: dateStr,time: new Date(year, month - 1, i).valueOf(),state: this.dateStateList.find((data) => data.date === dateStr),adjust: this.dateAdjustList.find((data) => data.date === dateStr),});}//  补齐if (list.length % 7 !== 0) {let endIndex = 7 - (list.length % 7);//  下月天数列表let nextList = [];for (let ni = 0; ni < endIndex; ni++) {nextList.push({value: ni + 1, //  值label: ni + 1,disabled: true, //  禁用isNowMonth: false,date: `${year}/${month + 1}/${ni + 1}`,time: new Date(year, month, ni + 1).valueOf(),});}list.push(...nextList);}return list;},//  单数组分割成等长二维数组group(list, len) {let index = 0;const arr = [];while (index < list.length) {arr.push(list.slice(index, (index += len)));}return arr;},},
};
</script><style lang="scss" scoped>
.calendar {position: relative;background: #fff;
}.wrapper {font-family: PingFangSC-Regular, PingFang SC;color: #222;
}
// 顶部
.top {display: flex;align-items: center;justify-content: space-between;padding: 32rpx 48rpx 16rpx;.title {height: 48rpx;font-size: 34rpx;font-weight: 600;color: #222222;line-height: 48rpx;}.parting-line {width: 1rpx;height: 28rpx;background: #666;margin: 0 16rpx;}.month-box {display: flex;align-items: center;line-height: 37rpx;font-size: 32rpx;color: #333333;font-weight: 600;.back-today {font-size: 24rpx;font-weight: 400;line-height: 24rpx;color: $c-primary;margin-left: 12rpx;}}.top-left {display: flex;align-items: center;.icon-arrow {width: 28rpx;height: 28rpx;}.arrow-left {background: center/100%url(#{$img-url}/static/img/free/b-icon-arrow-left.png);}.arrow-right {margin-left: 24rpx;background: center/100%url(#{$img-url}/static/img/free/b-icon-arrow-right.png);}}
}
.row-swiper {height: 110rpx;
}
.all-swiper {height: 450rpx;transition: height ease 0.5s;
}
.six-height {height: 53 0rpx;
}
.calender-box {position: relative;padding: 24rpx 24rpx 0;// box-shadow: 30vw 5rpx 10rpx rgba($color: #eee, $alpha: 0.4),//   -30vw 5rpx 10rpx rgba($color: #eee, $alpha: 0.4);z-index: 10;.head-title {display: grid;grid-template-columns: repeat(7, 1fr);grid-gap: 10rpx;margin-bottom: 16rpx;&-item {width: 90rpx;height: 33rpx;font-size: 24rpx;font-weight: 400;color: #888888;line-height: 33rpx;text-align: center;}}.days-list {display: grid;height: 100%;grid-template-columns: repeat(7, 1fr);grid-gap: 10rpx;padding-top: 14rpx;align-content: stretch;}.row-days-list {display: grid;height: 100%;grid-template-columns: repeat(7, 1fr);grid-gap: 10rpx;margin-bottom: 10rpx;// align-content: space-around;align-content: stretch;padding-top: 14rpx;}.days-list-item {display: flex;align-items: flex-start;justify-content: center;width: 100%;height: 74rpx;font-size: 34rpx;font-family: Helvetica;color: #222222;line-height: 41rpx;.label {position: relative;display: flex;flex-direction: column;justify-content: flex-start;align-items: center;.text {flex-shrink: 0;position: relative;width: 62rpx;height: 62rpx;line-height: 62rpx;text-align: center;}}.active-item {background-color: #006eff;color: #fff;border-radius: 50%;}.today-text {color: #006eff;}.active-item--disabled {opacity: 0.5;}.state-item {flex-shrink: 0;margin-top: 4rpx;width: 10rpx;height: 10rpx;background: #006eff;border-radius: 50%;}.text-state-item {width: 8rpx;height: 8rpx;background-color: #ff7400;}.item-adjust {position: absolute;top: -24rpx;right: -6rpx;width: 20rpx;height: 20rpx;font-family: PingFangSC, PingFang SC;font-weight: 400;font-size: 20rpx;color: #666666;text-align: right;font-style: normal;}.text-state-leave {color: #ff7400;}.disabled {color: #eaeaea;}}.arrow-wrapper {display: flex;align-items: center;justify-content: center;width: 50rpx;height: 40rpx;margin: 10rpx auto;.arrow-left {width: 20rpx;height: 4rpx;background-color: #ddd;border-radius: 2rpx 0 0 2rpx;transform: rotate(30deg);transform-origin: center right;transition: transform ease-in 0.3s;}.arrow-right {width: 20rpx;height: 4rpx;background-color: #ddd;border-radius: 0rpx 2rpx 2rpx 0;transform: rotate(-30deg);transform-origin: center left;transition: transform ease-in 0.3s;}.arrow-left--up {transform: rotate(-30deg);}.arrow-right--up {transform: rotate(30deg);}}
}.month-popup-box {font-size: 30rpx;.month-top {display: flex;align-items: center;justify-content: space-between;border-bottom: 1rpx solid #ccc;padding: 28rpx 32rpx;.ok-text {font-size: 30rpx;color: #006eff;line-height: 42rpx;}.cancel-text {color: #999;font-size: 30rpx;line-height: 42rpx;}}.picker-view {width: 100%;height: 400rpx;text-align: center;}
}:deep(.popup .uni-popup__wrapper.uni-custom.bottom .uni-popup__wrapper-box) {max-height: 100vh;
}
</style>

使用,记得引用先。
在这里插入图片描述

结语

结束了。本来想写更多呢,结果代码字数太多,太卡了,有兴趣自己看吧。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Java设计模式(代理模式整理中ing)

一、代理模式 1、代理模式定义&#xff1a; 代理模式&#xff1a;由于某些原因要给某对象提供一个代理以控制对该对象的访问&#xff0c;这时访问对象不适合或者不能够直接引用目标对象&#xff0c;代理对象作为访问对象与目标对象之间的中介进行连接调控调用。 2、代理模式的…

Thumb 汇编指令集,Thumb 指令编码方式,编译 Thumb 汇编代码

版权归作者所有&#xff0c;如有转发&#xff0c;请注明文章出处&#xff1a;https://cyrus-studio.github.io/blog/ Thumb指令集 ARM 指令集&#xff1a;最早在 1985 年随第一代 ARM 处理器问世。ARM 指令集一开始是 32 位固定长度的指令&#xff0c;用于各种计算任务。 Thu…

Leetcode - 周赛421

目录 一&#xff0c;3334. 数组的最大因子得分 二&#xff0c;3335. 字符串转换后的长度 I 三&#xff0c;3336. 最大公约数相等的子序列数量 四&#xff0c;3337. 字符串转换后的长度 II 一&#xff0c;3334. 数组的最大因子得分 暴力方法就不演示&#xff0c;这里介绍一个…

文件管理工具的按路径名称归类功能大公开,将大量文件批量复制或移动到指定路径,办公软件达人的秘密武器

是否还在为成堆的文件归类而苦恼&#xff1f;想要一键就能将海量文件按路径名称轻松归类&#xff0c;无论是复制还是移动&#xff1f;别急&#xff0c;今天就让文件批量改名高手软件的按路径名称归类功能来拯救你的文件管理世界&#xff01;让我们一起告别繁琐&#xff0c;迎接…

建设NFS服务器并实现文件共享

关闭防火墙和s0 systemctl stop firewalld setenforce 0 安装NFS yum install nfs-utils -y 新建共享目录并设置权限 echo "hello" > /nfs/shared/test1 chmod -Rf 777 /nfs/shared/ 配置服务端的NFS配置文件 vim /etc/exports /nfs/shared *(ro) 启动…

曹操出行借助 ApsaraMQ for Kafka Serverless 提升效率,成本节省超 20%

本文整理于 2024 年云栖大会主题演讲《云消息队列 ApsaraMQ Serverless 演进》&#xff0c;杭州优行科技有限公司消息中间件负责人王智洋分享 ApsaraMQ for Kafka Serverless 助力曹操出行实现成本优化和效率提升的实践经验。 曹操出行&#xff1a;科技驱动共享出行未来 曹操…

(转载)Tools for Learning LLVM TableGen

前提 最近在学习有关llvm的东西&#xff0c;其中TableGen占了一部分&#xff0c;所以想特意学习下TableGen相关的语法。这里找到了LLVM官网的一篇介绍TableGen的博客&#xff0c;学习并使用机器翻译为中文。在文章的最后也添加了一些学习TableGen的资源。 原文地址&#xff1…

vue3uniapp实现自定义拱形底部导航栏,解决首次闪烁问题

前言&#xff1a; 我最初在网上翻阅查找了很多方法&#xff0c;发现大家都是说在page.json中tabbar中添加&#xff1a;"custom": true,即可解决首次闪烁的问题&#xff0c;可是添加了我这边还是会闪烁&#xff0c;因此我这边改变了思路&#xff0c;使用了虚拟页面来解…

【P2-5】ESP8266 WIFI模块在AP模式下作为TCP服务器与多个电脑/手机网络助手(TCP客户端)通信——TCP数据透传

前言:完成ESP8266 WIFI模块在AP模式下作为TCP服务器与多个电脑/手机网络助手(TCP客户端)通信——实现TCP数据透传 AP模式,通俗来说模块可以发出一个WIFI热点提供给电脑/手机连接。 TCP服务端,通俗来说就是模块/单片机作为服务器,可以接收多个客户通道的连接。 本…

Kali Linux 新工具推荐: Sploitscan

在 2024.2 版本 Kali Linux 增加了一个新攻击工具: Sploitscan 1.简介: Sploitscan 能够发现操作系统和应用程序中的安全漏洞。 2.特点: 简单的命令行界面 扫描多个操作系统和应用程序 检测多种漏洞 提供详细信息 可定制性强 3.示例: 2024.2 及以后的版本 Kali Linux…

11.Three.js使用indexeddb前端缓存模型优化前端加载效率

11.Three.js使用indexeddb前端缓存模型优化前端加载效率 1.简述 在使用Three.js做数字孪生应用场景时&#xff0c;我们常常需要用到大量模型或数据。在访问我们的数字孪生应用时&#xff0c;每次刷新都需要从web端进行请求大量的模型数据或其他渲染数据等等&#xff0c;会极大…

基于PyTorch的大语言模型微调指南:Torchtune完整教程与代码示例

近年来,大型语言模型(Large Language Models, LLMs)在自然语言处理(Natural Language Processing, NLP)领域取得了显著进展。这些模型通过在大规模文本数据上进行预训练,能够习得语言的基本特征和语义,从而在各种NLP任务上取得了突破性的表现。为了将预训练的LLM应用于特定领域…

探索Unity:从游戏引擎到元宇宙体验,聚焦内容创作

unity是实时3D互动内容创作和运营平台&#xff0c;包括游戏开发、美术、建筑、汽车设计、影视在内的所有创作者&#xff0c;借助Unity将创意变成现实。提供一整套完善的软件解决方案&#xff0c;可用于创作、运营和变现任何实时互动的2D和3D内容&#xff0c;支持平台包括手机、…

3、setup语法糖

setup 概述 setup是Vue3中一个新的配置项&#xff0c;值是一个函数&#xff0c;它是 Composition API 组件中所用到的&#xff1a;数据、方法、计算属性、监视......等等&#xff0c;均配置在setup中。 特点如下&#xff1a; setup函数返回的对象中的内容&#xff0c;可直接…

USB协议学习

文章目录 USB发展背景发展变化速度等级通讯接口 四种传输主设备 & 从设备主设备从设备 连接与检测高速设备与主机连接USB总线常见的几种状态 枚举过程特点 控制传输学习资料 USB发展背景 发展变化 USB1.1&#xff1a;规范了USB低全速传输&#xff1b; USB2.0&#xff1a;…

讲讲 kafka 维护消费状态跟踪的方法?

大家好&#xff0c;我是锋哥。今天分享关于【讲讲 kafka 维护消费状态跟踪的方法&#xff1f;】面试题&#xff1f;希望对大家有帮助&#xff1b; 讲讲 kafka 维护消费状态跟踪的方法&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在 Kafka 中&#x…

【成都新篇】龙信科技电子取证实验室,引领科技取证新时代

文章关键词&#xff1a;电子数据取证实验室、手机取证、介质取证、云取证、现场勘查、电子物证 在科技创新的浪潮中&#xff0c;龙信科技成都实验室以其卓越的电子数据取证服务&#xff0c;成为了中西部地区一颗璀璨的明珠。随着新址的搬迁&#xff0c;我们不仅扩大了业务范围…

linux自动清理管理日志文件 logrotate

logrotate是linux通常会自带的工具&#xff0c;可以自动切割清理日志文件 一、安装&#xff08;通常无需&#xff09; 通常系统自带 sudo apt install logrotate或者 sudo dnf install logrotate二、具体使用 以nginx日志为例 1.创建脚本文件 vi /etc/logrotate.d/nginx…

JDBC学习笔记

九月十八: 需要添加jar包到依赖 虽然能驱动了,但是仍然不知道当时为什么不能驱动, 8.0以上会自动驱动, 也就是说只需要做好connection和statement 连接数据库的五种方式: 方式五: Statement: SQL注入小案例: ? 相当于占位符 JDBCUtils: 事务与批处理: String sql "INS…

wps Excel下拉框生成填充及下拉框内容颜色格式修改

一、Excel下拉框生成&#xff1a;(路径&#xff1a;数据-下拉列表) 1、先选中需要插入下拉列表的单元格 2、然后进入“数据-下拉列表”中增加对应的下拉项目(例如&#xff1a;√&#xff0c;X) 二、下拉框选项颜色和字体修改 1、先选中需要修改的下拉列表的所有单元格 2、然…