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

Vue+ElementUI+C#技巧分享:周数选择器

文章目录

  • 前言
  • 一、周数的计算逻辑
    • 1.1 周数的定义
    • 1.2 年初周数的确定
    • 1.3 周数的计算方法
  • 二、Vue+ElementUI代码实现
    • 2.1 计算周数
    • 2.2 获取周的日期范围
    • 2.3 根据周数获取日期范围
    • 2.4 控件引用
      • 2.4.1 控件引用代码分析
      • 2.4.2 初始化变量代码分析
    • 2.5 周数选择器完整代码
  • 三、C#后端代码实现
    • 3.1 类实现
    • 3.1 静态方法实现
  • 总结

前言

Vue.js和ElementUI的结合使用已成为创建高效、美观和用户友好的Web应用的一种流行方式。特别是在处理复杂的用户界面和交互时,这种组合展现出其独特的优势。这篇博客旨在深入探讨如何利用Vue和ElementUI来构建一个实用的周数选择器。
周数选择器
周数选择器在很多类型的应用程序中都非常重要,尤其是在需要日期管理的系统中,如日历应用、项目管理工具或报告系统。正确地理解和计算周数对于确保数据的准确性和用户界面的一致性至关重要。然而,由于不同地区和标准对周的定义存在差异,开发这样的功能可能会带来挑战。

为了克服这些挑战并提供一个有效的解决方案,本博客首先从理论出发,详细介绍了周数的计算逻辑,特别是依据国际标准ISO 8601的定义。接着,我们深入到具体的代码实现,展示了如何在Vue和ElementUI框架下实现这一功能。

通过这篇博客,无论是对Vue和ElementUI初学者还是有经验的开发者,都能学到如何实现周数选择器这一具体功能,同时也能对如何在Vue中构建和管理复杂UI组件有更深入的理解。希望这篇博客能成为在Vue和ElementUI应用开发旅程中的宝贵资源。


一、周数的计算逻辑

在本章中,我们将探讨周数的计算逻辑,特别是以周一作为每周的起始日。

1.1 周数的定义

根据国际标准ISO 8601,一年的周数通常是从周一开始计算的。一周的第一天是周一,最后一天是周日。这种计算方式在欧洲和其他一些地区非常常见。

ISO 8601标准广泛应用于国际贸易、通信和其他领域,因为它提供了一种统一的日期和时间表示方法,有助于减少跨国交流中的混淆和误解。在开发支持多国用户的应用程序时,遵循这一标准尤为重要。

1.2 年初周数的确定

年初的周数计算较为特殊。如果1月1日恰好是周一,则该日即为第一周的开始。如果1月1日是周二至周日之间的任何一天,则该周属于上一年的最后一周,新的一年的第一周将从下一个周一开始。

具体来说,基于国际标准ISO 8601,一年中的第一周必须包含该年的1月4日。这实际上意味着如果1月1日至1月4日之间的任何一天是周一至周四,则这一周被视为当年的第一周。

这种计算方式的逻辑基础如下:

  • 包含1月4日的周为第一周:由于1月4日最晚只可能是一年中第一个星期四,因此保证了这一周至少有四天属于新的一年。这样做的目的是为了确保每年的第一周至少包括四天。
  • 年初的周数处理:如果1月1日是周五、周六或周日,则该周被计为上一年的最后一周。因为在这种情况下,该周中大部分或所有天数都属于上一年。

1.3 周数的计算方法

周数的计算可以通过以下步骤实现:

  1. 确定年份的第一天:首先,确定当前年份的第一天(1月1日)是星期几。

  2. 计算首周偏移量:如果1月1日不是周一,则需要计算出距离下一个周一还有几天。这将决定第一周的长度。

  3. 累加周数:从年初开始,根据每周七天的规则,累加周数。特别注意跨年和闰年的情况,这可能会影响总周数。

  4. 处理年末的周数:在年末,最后一周可能不会完整。如果12月31日不是周日,则该周的剩余天数将计入新的一年。

二、Vue+ElementUI代码实现

2.1 计算周数

这个方法用于计算给定日期所在的周数。它是整个周数选择器功能的核心。

getWeekNumber (date) {var yearStart = new Date(date.getFullYear(), 0, 1)var januaryFirstDayOfWeek = yearStart.getDay() === 0 ? 6 : yearStart.getDay() - 1 // 将周日从0转换为7var firstMonday = new Date(yearStart)if (januaryFirstDayOfWeek <= 3) {// 如果1月1日至1月4日之间为周一至周四,则该周为第一周firstMonday.setDate(yearStart.getDate() - januaryFirstDayOfWeek)} else {// 否则,下周一为第一周的开始firstMonday.setDate(yearStart.getDate() + 7 - januaryFirstDayOfWeek)}var dayCount = Math.ceil((date - firstMonday) / (24 * 3600 * 1000))return Math.ceil(dayCount / 7)},
  • 参数date(Date对象,表示需要计算周数的日期)

  • 逻辑

    • 计算年份开始时的日期(1月1日)和它是周几。
    • 如果1月1日是周一至周四之间,那么该周被视为第一周。否则,第一周从下一个周一开始。
    • 根据这个逻辑,计算出给定日期所在的周数。
  • 实现细节

    • yearStart获取年份的第一天。
    • januaryFirstDayOfWeek变量调整周日的表示方法,以符合ISO 8601标准。
    • firstMonday确定第一周的周一日期。
    • 最后,计算并返回给定日期的周数。

2.2 获取周的日期范围

getWeekDateRange (date) {// 计算当前日期是周几,ISO周从周一开始var currentDay = date.getDay()var distanceToMonday = currentDay === 0 ? 6 : currentDay - 1// 计算当前周的周一和周日var monday = new Date(date)monday.setDate(date.getDate() - distanceToMonday)var sunday = new Date(monday)sunday.setDate(monday.getDate() + 6)// 格式化日期为 yyyy-MM-ddvar format = (d) => d.toISOString().split('T')[0]return [format(monday), format(sunday)]
},

这个方法用于计算给定日期所在周的起始和结束日期。

  • 参数date(Date对象,表示当前日期)

  • 逻辑

    • 计算当前日期是周几,然后找到当前周的周一和周日。
    • 返回这一周的日期范围。
  • 实现细节

    • 使用currentDaydistanceToMonday计算周一的日期。
    • 计算出当前周的周一和周日的日期。
    • 返回格式化后的日期范围。

2.3 根据周数获取日期范围

getWeekDateRangeByWeekNumber (weekNumber, year) {var januaryFirst = new Date(year, 0, 1)var januaryFirstDayOfWeek = januaryFirst.getDay() === 0 ? 6 : januaryFirst.getDay() - 1 // 将周日从0转换为7var firstMonday = new Date(januaryFirst)if (januaryFirstDayOfWeek <= 3) {// 如果1月1日至1月4日之间为周一至周四,则该周为第一周firstMonday.setDate(januaryFirst.getDate() - januaryFirstDayOfWeek + 1)} else {// 否则,下周一为第一周的开始firstMonday.setDate(januaryFirst.getDate() + 8 - januaryFirstDayOfWeek)}var weekStart = new Date(firstMonday)weekStart.setDate(firstMonday.getDate() + (weekNumber - 1) * 7)var weekEnd = new Date(weekStart)weekEnd.setDate(weekStart.getDate() + 6)// 格式化日期为 yyyy-MM-ddvar format = (d) => d.toISOString().split('T')[0]return [format(weekStart), format(weekEnd)]
}

这个方法根据给定的周数和年份,计算出那一周的起始和结束日期。

  • 参数weekNumber(周数),year(年份)

  • 逻辑

    • 首先确定该年份的第一周的起始日(周一)。
    • 然后根据给定的周数计算出那一周的起始和结束日期。
  • 实现细节

    • getWeekNumber类似,先确定年份的第一周的周一。
    • 使用给定的周数,计算出那一周的起始日期。
    • 计算并返回该周的起始和结束日期。

2.4 控件引用

在这个部分,我们将讨论如何在Vue应用中引入和使用一个自定义的WeekSelector组件,这是一个周数选择控件。以下是控件的引用和初始化过程的解析。

2.4.1 控件引用代码分析

  1. 组件标签引用

    <WeekSelector v-else-if="column.searchType==='weekselector'":model.sync="searchElement[column.prop]"></WeekSelector>
    
    • 这段代码演示了如何在模板中使用WeekSelector组件。
    • 使用v-else-if指令来条件渲染WeekSelector组件,条件是某个列的searchType属性为'weekselector'
    • :model.sync是一个同步属性,它将searchElement[column.prop]的值与WeekSelector组件的model属性绑定。这意味着当model属性在组件内部变化时,searchElement[column.prop]也会相应更新。
  2. 组件导入

    import WeekSelector from './WeekSelector'
    
    • 这行代码从WeekSelector文件中导入WeekSelector组件。
  3. 在Vue实例中注册组件

    components: {// 其他代码WeekSelector
    }
    
    • 这段代码在当前Vue实例的components选项中注册WeekSelector组件,使其在当前实例的模板中可用。

2.4.2 初始化变量代码分析

初始化的主要作用是抑制Vue警告

[Vue warn]: Invalid prop: type check failed for prop "model". Expected Number with value 0, got String with value "".
this.tabInfo = this.tab
this.searchElement = this.searchModel
for (let column of this.tabInfo.searchFormat) {if (column.searchType === 'weekselector') {// 使用 Vue 的 $set 方法确保响应性this.$set(this.searchElement, column.prop, -1)}
}
  • 这段代码用于初始化与WeekSelector组件相关的数据。
  • this.tabInfothis.searchElement分别是对其他对象的引用,用于设置和获取搜索条件。
  • 循环遍历this.tabInfo.searchFormat中的每一列,对于类型为weekselector的列,使用Vue的$set方法来初始化this.searchElement对象的相应属性。这里使用$set是为了确保新增的属性是响应式的,这样当属性值发生变化时,Vue能够检测到并更新视图。

以上代码段展示了如何在Vue应用中引入、注册和初始化自定义组件WeekSelector。这个组件的主要功能是作为一个周数选择器,用于提供用户界面上对周数的选择功能。通过这些步骤,可以确保WeekSelector组件能够正确地被引用并且其状态的变化能够被Vue实例正确地管理和响应。

2.5 周数选择器完整代码

文件名:WeekSelector.vue

<template><div><el-row><el-col :span="6"><el-input-number v-model="weekNumber":min="0":max="52"label="周数" /></el-col><el-col :span="18"><el-form-item label="日期范围:"><el-date-picker type="daterange"id="dateRange"range-separator="至"style="width: 100%;"size="mini"start-placeholder="开始日期"end-placeholder="结束日期"value-format="yyyy-MM-dd"v-model="dateRange":readonly="true"></el-date-picker></el-form-item></el-col></el-row></div>
</template><script>
export default {create () {this.weekNumber = this.model},data () {return {weekNumber: this.getWeekNumber(new Date()),dateRange: this.getWeekDateRange(new Date())}},methods: {getWeekNumber (date) {var yearStart = new Date(date.getFullYear(), 0, 1)var januaryFirstDayOfWeek = yearStart.getDay() === 0 ? 6 : yearStart.getDay() - 1 // 将周日从0转换为7var firstMonday = new Date(yearStart)if (januaryFirstDayOfWeek <= 3) {// 如果1月1日至1月4日之间为周一至周四,则该周为第一周firstMonday.setDate(yearStart.getDate() - januaryFirstDayOfWeek)} else {// 否则,下周一为第一周的开始firstMonday.setDate(yearStart.getDate() + 7 - januaryFirstDayOfWeek)}var dayCount = Math.ceil((date - firstMonday) / (24 * 3600 * 1000))let weekNum = Math.ceil(dayCount / 7)// 父级控件 v-model 绑定this.$emit('update:model', weekNum)return weekNum},getWeekDateRange (date) {// 计算当前日期是周几,ISO周从周一开始var currentDay = date.getDay()var distanceToMonday = currentDay === 0 ? 6 : currentDay - 1// 计算当前周的周一和周日var monday = new Date(date)monday.setDate(date.getDate() - distanceToMonday)var sunday = new Date(monday)sunday.setDate(monday.getDate() + 6)// 格式化日期为 yyyy-MM-ddvar format = (d) => d.toISOString().split('T')[0]return [format(monday), format(sunday)]},getWeekDateRangeByWeekNumber (weekNumber, year) {if (weekNumber < 1) {return null}var januaryFirst = new Date(year, 0, 1)var januaryFirstDayOfWeek = januaryFirst.getDay() === 0 ? 6 : januaryFirst.getDay() - 1 // 将周日从0转换为7var firstMonday = new Date(januaryFirst)if (januaryFirstDayOfWeek <= 3) {// 如果1月1日至1月4日之间为周一至周四,则该周为第一周firstMonday.setDate(januaryFirst.getDate() - januaryFirstDayOfWeek + 1)} else {// 否则,下周一为第一周的开始firstMonday.setDate(januaryFirst.getDate() + 8 - januaryFirstDayOfWeek)}var weekStart = new Date(firstMonday)weekStart.setDate(firstMonday.getDate() + (weekNumber - 1) * 7)var weekEnd = new Date(weekStart)weekEnd.setDate(weekStart.getDate() + 6)// 格式化日期为 yyyy-MM-ddvar format = (d) => d.toISOString().split('T')[0]return [format(weekStart), format(weekEnd)]}},props: {model: {type: Number,required: true}},watch: {model (val) {if (val.length <= 1 || val < 0) {this.weekNumber = this.getWeekNumber(new Date())this.dateRange = this.getWeekDateRange(new Date())} else {// 使用val作为周数this.weekNumber = valif (val > 0) {this.dateRange = this.getWeekDateRangeByWeekNumber(val, new Date().getFullYear())} else {this.dateRange = null}}},weekNumber (newVal, oldVal) {// 当周数改变时,更新日期范围if (newVal !== oldVal) {if (newVal > 0) {this.dateRange = this.getWeekDateRangeByWeekNumber(newVal, new Date().getFullYear())} else {this.dateRange = null}}// 父级控件 v-model 绑定this.$emit('update:model', newVal)}}
}
</script><style lang="scss" scoped>
// 调整高度
.el-form-item {height: 10px;
}
</style>

运行效果:
周数选择器

注:以下操作可以根据实际情况可以灵活控制。

1.el-input-number的取值范围为 [ 0 , 52 ] [0,52] [0,52],当el-input-number=0时,则表示后端系统不使用周数选择器作为判断依据。也可以将el-input-number的取值范围强制设为 [ 1 , 52 ] [1,52] [1,52],用多选控件控制是否启用的判断。
2.getWeekNumber方法中添加了this.$emit('update:model', weekNum),用于将初始化后的值返回给父控件。
3.getWeekDateRangeByWeekNumber方法中添加了if (weekNumber < 1)的判断,防止意外的输入值。

三、C#后端代码实现

了解上面原理之后,依样画葫芦,我们可以通过周数计算日期范围,用于查询后数据分析。
这里我们简单实现一下代码作为应用参考。

3.1 类实现

public class ReportWeekCalculator
{public int ReportWeek { get; set; }public int Year { get; set; }public ReportWeekCalculator(int reportWeek, int year){ReportWeek = reportWeek;Year = year;}public (DateTime, DateTime) GetWeekDateRange(){// 获取指定年份的1月1日DateTime januaryFirst = new DateTime(Year, 1, 1);// 获取1月1日是周几(将周日从0转换为7)int januaryFirstDayOfWeek = januaryFirst.DayOfWeek == DayOfWeek.Sunday ? 6 : (int)januaryFirst.DayOfWeek - 1;// 计算第一周周一的日期DateTime firstMonday;if (januaryFirstDayOfWeek <= 3) // 如果1月1日是周一至周四{firstMonday = januaryFirst.AddDays(-januaryFirstDayOfWeek);}else // 如果1月1日是周五、周六或周日{firstMonday = januaryFirst.AddDays(7 - januaryFirstDayOfWeek);}// 计算目标周的开始日期DateTime startOfWeek = firstMonday.AddDays((ReportWeek - 1) * 7);// 计算目标周的结束日期DateTime endOfWeek = startOfWeek.AddDays(6);return (startOfWeek, endOfWeek);}
}

使用示例

var calculator = new ReportWeekCalculator(47, 2023); // 假设需要计算2023年第47周的日期范围
var (startOfWeek, endOfWeek) = calculator.GetWeekDateRange();
Console.WriteLine($"Week {calculator.ReportWeek} of {calculator.Year} starts on {startOfWeek:yyyy-MM-dd} and ends on {endOfWeek:yyyy-MM-dd}");

3.1 静态方法实现

public class CommonFunc
{public static (DateTime, DateTime) GetWeekDateRange(int ReportWeek){// 获取当前年份int year = DateTime.Now.Year;// 获取指定年份的1月1日DateTime januaryFirst = new DateTime(year, 1, 1);// 获取1月1日是周几(将周日从0转换为7)int januaryFirstDayOfWeek = januaryFirst.DayOfWeek == DayOfWeek.Sunday ? 6 : (int)januaryFirst.DayOfWeek - 1;// 计算第一周周一的日期DateTime firstMonday;if (januaryFirstDayOfWeek <= 3) // 如果1月1日是周一至周四{firstMonday = januaryFirst.AddDays(-januaryFirstDayOfWeek);}else // 如果1月1日是周五、周六或周日{firstMonday = januaryFirst.AddDays(7 - januaryFirstDayOfWeek);}// 计算目标周的开始日期DateTime startOfWeek = firstMonday.AddDays((ReportWeek - 1) * 7);// 计算目标周的结束日期DateTime endOfWeek = startOfWeek.AddDays(6);return (startOfWeek, endOfWeek);}
}

使用示例

(DateTime startDt, DateTime endDt) = CommonFunc.GetWeekDateRange(searchDto.ReportWeek);

注:endOfWeek取的是周日的00:00:00,如果需要日期筛选,需要加一天后用<符号或者截取到日期字段用<=符号比较。
参考代码片段:

(DateTime startDt, DateTime endDt) = CommonFunc.GetWeekDateRange(searchDto.ReportWeek);
endDt = endDt.AddDays(1); //加一天
expression = expression.And(p => p.CreateTime >= startDt);
expression = expression.And(p => p.CreateTime < endDt);

总结

本篇博客中,我们深入探讨了周数选择器的实现,从理论到实践,涵盖了周数的计算逻辑和具体的代码实现。

首先,我们讨论了周数的定义、确定年初的周数,以及周数的具体计算方法。这部分内容基于ISO 8601标准,为理解和计算周数提供了必要的理论基础。

随后,我们转向实际的代码实现,详细介绍了几个关键函数:计算周数(getWeekNumber)、获取特定日期所在周的日期范围(getWeekDateRange),以及根据周数和年份获取特定周的日期范围(getWeekDateRangeByWeekNumber)。这些函数是构建周数选择器的核心,展示了如何在Vue和ElementUI环境中处理日期和时间。

进一步,我们分析了周数选择器控件在Vue中的引用方式,包括控件的引入、注册,以及相关变量的初始化。这不仅展示了组件化开发的便捷性,也体现了Vue响应式系统的强大。

最后,我们提供了周数选择器的完整代码,这为读者提供了一个实用的参考模板,可以直接应用于项目或作为学习实践。

整体而言,本博客不仅介绍了周数选择器的实现,更提供了一种结合Vue和ElementUI开发复杂UI组件的有效途径。这对于追求高效、可维护的前端开发来说,无疑是极有价值的。

相关文章:

Vue+ElementUI+C#技巧分享:周数选择器

文章目录 前言一、周数的计算逻辑1.1 周数的定义1.2 年初周数的确定1.3 周数的计算方法 二、VueElementUI代码实现2.1 计算周数2.2 获取周的日期范围2.3 根据周数获取日期范围2.4 控件引用2.4.1 控件引用代码分析2.4.2 初始化变量代码分析 2.5 周数选择器完整代码 三、C#后端代…...

【算法】FFT-1(递归实现)(不包括IFFT)

FFT 多项式多项式乘法复数及运算导数泰勒公式及展开式欧拉公式单位根 FFTCode IFFT 多项式 我们从课本中可以知道&#xff0c;一个 n − 1 n-1 n−1 次的多项式可以写成 a 0 a 1 x a 2 x 2 a 3 x 3 ⋯ a n − 1 x n − 1 a_{0}a_{1}xa_{2}x^2a_{3}x^3\dotsa_{n-1}x^{n-…...

大模型训练效率提升至2.6倍,腾讯Angel机器学习框架升级

在算力紧缺的背景下&#xff0c;如何提升大模型训练和推理的效率&#xff0c;并降低成本&#xff0c;成为业界关注的焦点。 11月23日&#xff0c;腾讯披露&#xff0c;腾讯混元大模型背后的自研机器学习框架Angel再次升级&#xff0c;大模型训练效率提升至主流开源框架的2.6倍…...

【方块消消乐】方块消除游戏-微信小程序开发流程详解

有做过俄罗斯方块游戏小程序的经验&#xff0c;这次有做了一个消灭方块的游戏&#xff0c;实现过程很顺利&#xff0c;游戏看着和之前做的俄罗斯方块游戏很像&#xff0c;这里调整了玩法&#xff0c;试玩感觉还可以&#xff0c;接下来给大家讲一讲消灭方块游戏开发过程。 俄罗斯…...

mybatis配置文件中配置类型别名的方式

在MyBatis配置文件&#xff08;通常是mybatis-config.xml&#xff09;中&#xff0c;可以通过以下方式配置类型别名&#xff1a; 1. 使用typeAliases元素配置全局类型别名 <configuration> <typeAliases> <typeAlias alias"YourAlias" type"…...

leetcode目标和

给你一个非负整数数组 nums 和一个整数 target 。 向数组中的每个整数前添加 ‘’ 或 ‘-’ &#xff0c;然后串联起所有整数&#xff0c;可以构造一个 表达式 &#xff1a; 例如&#xff0c;nums [2, 1] &#xff0c;可以在 2 之前添加 ‘’ &#xff0c;在 1 之前添加 ‘-…...

2023人形机器人行业海外科技研究:从谷歌看机器人大模型进展

今天分享的是人形机器人系列深度研究报告&#xff1a;《2023人形机器人行业海外科技研究&#xff1a;从谷歌看机器人大模型进展》。 &#xff08;报告出品方&#xff1a;华鑫证券&#xff09; 报告共计&#xff1a;26页 大模型是人形机器人的必备要素 长期来看&#xff0c;人…...

【深度学习笔记】01 数据操作与预处理

01 数据操作与预处理 一、数据操作1.1 基本数据操作1.2 广播机制1.3 索引和切片1.4 节省内存1.5 转换为其他Python对象 二、数据预处理读取数据集处理缺失值转换为张量格式练习 一、数据操作 1.1 基本数据操作 导入torch import torch张量表示一个由数值组成的数组&#xff…...

Python与设计模式--门面模式

8-Python与设计模式–门面模式 一、火警报警器&#xff08;1&#xff09; 假设有一组火警报警系统&#xff0c;由三个子元件构成&#xff1a;一个警报器&#xff0c;一个喷水器&#xff0c; 一个自动拨打电话的装置。其抽象如下&#xff1a; class AlarmSensor:def run(self):…...

改进YOLOv8 | YOLOv5系列:RFAConv续作,即插即用具有任意采样形状和任意数目参数的卷积核AKCOnv

RFAConv续作,构建具有任意采样形状的卷积AKConv 一、论文yolov5加入的方式论文 源代码 一、论文 基于卷积运算的神经网络在深度学习领域取得了显著的成果,但标准卷积运算存在两个固有缺陷:一方面,卷积运算被限制在一个局部窗口,不能从其他位置捕获信息,并且其采样形状是…...

机器学习-激活函数的直观理解

机器学习-激活函数的直观理解 在机器学习中&#xff0c;激活函数&#xff08;Activation Function&#xff09;是用于引入非线性特性的一种函数&#xff0c;它在神经网络的每个神经元上被应用。 如果不使用任何的激活函数&#xff0c;那么神经元的响应就是wxb&#xff0c;相当…...

Fedora 36 ARM 镜像源更换与软件安装

1、什么是Fedora Fedora Linux是较具知名度的Linux发行套件之一&#xff0c;由Fedora专案社群开发、红帽公司赞助&#xff0c;目标是建立一套新颖、多功能并且自由的作业系统。 Fedora是商业化的Red Hat Enterprise Linux发行版的上游原始码。 2、Fedora软件安装 64 位 .deb&a…...

多级缓存快速上手

哈喽~大家好&#xff0c;这篇来看看多级缓存。 &#x1f947;个人主页&#xff1a;个人主页​​​​​ &#x1f948; 系列专栏&#xff1a;【微服务】 &#x1f949;与这篇相关的文章&#xff1a; JAVA进程和线程JAVA进程和线程-CSDN博客Http…...

初始React

<!DOCTYPE html> <html> <head> <meta charset"UTF-8" /> <title>React</title> </head> <body> 了解React <!-- React是一个用于构建web和原生态交互界面的库 相对于传统DOM开发优势&#xff1a;组件化开发…...

2.5 逆矩阵

一、逆矩阵的注释 假设 A A A 是一个方阵&#xff0c;其逆矩阵 A − 1 A^{-1} A−1 与它的大小相同&#xff0c; A − 1 A I A^{-1}AI A−1AI。 A A A 与 A − 1 A^{-1} A−1 会做相反的事情。它们的乘积是单位矩阵 —— 对向量无影响&#xff0c;所以 A − 1 A x x A^{…...

物流实时数仓:数仓搭建(ODS)

系列文章目录 物流实时数仓&#xff1a;采集通道搭建 物流实时数仓&#xff1a;数仓搭建 文章目录 系列文章目录前言一、IDEA环境准备1.pom.xml2.目录创建 二、代码编写1.log4j.properties2.CreateEnvUtil.java3.KafkaUtil.java4.OdsApp.java 三、代码测试总结 前言 现在我们…...

【ARM 嵌入式 编译 Makefile 系列 18 -- Makefile 中的 export 命令详细介绍】

文章目录 Makefile 中的 export 命令详细介绍Makefile 使用 export导出与未导出变量的区别示例&#xff1a;导出变量以供子 Makefile 使用 Makefile 中的 export 命令详细介绍 在 Makefile 中&#xff0c;export 命令用于将变量从 Makefile 导出到由 Makefile 启动的子进程的环…...

【opencv】计算机视觉:停车场车位实时识别

目录 目标 整体流程 背景 详细讲解 目标 我们想要在一个实时的停车场监控视频中&#xff0c;看看要有多少个车以及有多少个空缺车位。然后我们可以标记空的&#xff0c;然后来车之后&#xff0c;实时告诉应该停在那里最方便、最近&#xff01;&#xff01;&#xff01;实现…...

播放器开发(三):FFmpeg与SDL环境配置

学习课题&#xff1a;逐步构建开发播放器【QT5 FFmpeg6 SDL2】 环境配置 我这边的是使用macOS&#xff1b;IDE用的是CLion&#xff1b;CMake构建&#xff0c;除了创建项目步骤、CMakeLists文件有区别之外的代码层面不会有太大区别。 配置上只添加一下CMakeLists中FFmpeg和SD…...

KubeVela核心控制器原理浅析

前言 在学习 KubeVela 的核心控制器之前&#xff0c;我们先简单了解一下 KubeVela 的相关知识。 KubeVela 本身是一个应用交付与管理控制平面&#xff0c;它架在 Kubernetes 集群、云平台等基础设施之上&#xff0c;通过开放应用模型来对组件、云服务、运维能力、交付工作流进…...

RestClient

什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端&#xff0c;它允许HTTP与Elasticsearch 集群通信&#xff0c;而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级&#xff…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例

使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件&#xff0c;常用于在两个集合之间进行数据转移&#xff0c;如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model&#xff1a;绑定右侧列表的值&…...

循环冗余码校验CRC码 算法步骤+详细实例计算

通信过程&#xff1a;&#xff08;白话解释&#xff09; 我们将原始待发送的消息称为 M M M&#xff0c;依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)&#xff08;意思就是 G &#xff08; x ) G&#xff08;x) G&#xff08;x) 是已知的&#xff09;&#xff0…...

UE5 学习系列(三)创建和移动物体

这篇博客是该系列的第三篇&#xff0c;是在之前两篇博客的基础上展开&#xff0c;主要介绍如何在操作界面中创建和拖动物体&#xff0c;这篇博客跟随的视频链接如下&#xff1a; B 站视频&#xff1a;s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...

成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战

在现代战争中&#xff0c;电磁频谱已成为继陆、海、空、天之后的 “第五维战场”&#xff0c;雷达作为电磁频谱领域的关键装备&#xff0c;其干扰与抗干扰能力的较量&#xff0c;直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器&#xff0c;凭借数字射…...

[Java恶补day16] 238.除自身以外数组的乘积

给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#xff0c;且在 O(n) 时间复杂度…...

AI书签管理工具开发全记录(十九):嵌入资源处理

1.前言 &#x1f4dd; 在上一篇文章中&#xff0c;我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源&#xff0c;方便后续将资源打包到一个可执行文件中。 2.embed介绍 &#x1f3af; Go 1.16 引入了革命性的 embed 包&#xff0c;彻底改变了静态资源管理的…...

html-<abbr> 缩写或首字母缩略词

定义与作用 <abbr> 标签用于表示缩写或首字母缩略词&#xff0c;它可以帮助用户更好地理解缩写的含义&#xff0c;尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时&#xff0c;会显示一个提示框。 示例&#x…...

解读《网络安全法》最新修订,把握网络安全新趋势

《网络安全法》自2017年施行以来&#xff0c;在维护网络空间安全方面发挥了重要作用。但随着网络环境的日益复杂&#xff0c;网络攻击、数据泄露等事件频发&#xff0c;现行法律已难以完全适应新的风险挑战。 2025年3月28日&#xff0c;国家网信办会同相关部门起草了《网络安全…...

什么是VR全景技术

VR全景技术&#xff0c;全称为虚拟现实全景技术&#xff0c;是通过计算机图像模拟生成三维空间中的虚拟世界&#xff0c;使用户能够在该虚拟世界中进行全方位、无死角的观察和交互的技术。VR全景技术模拟人在真实空间中的视觉体验&#xff0c;结合图文、3D、音视频等多媒体元素…...