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

使用vue3+element plus 的table自制的穿梭框(支持多列数据)

目录

一、效果图

二、介绍

三、代码区


一、效果图

话不多说,先上图

二、介绍

项目需要:通过穿梭框选择人员信息,可以根据部门、岗位进行筛选,需要显示多列(不光显示姓名,还包括人员的一些基础信息);项目前端用的是vue3+element plus(Transfer 组件 | Element Plus),原来打算使用element的组件 Transfer 穿梭框,发现它只实现简单的单列穿梭,无法满足需求。最后打算自己动手用table来实现:分为左右两个区域,左边查询区+待选数据列表table,右边选中的数据列表,中间两个按钮实现数据的转移。(在看的小伙伴有其他更合适的组件/组件库可以评论区分享)

三、代码区

html

    <el-dialog :title="title" :lock-scroll="false" v-model="open" :fullscreen="fullScreen" :close-on-click-modal="false":close-on-press-escape="false" align-center><el-form ref="formRef" :model="form" :rules="rules" label-width="100px"><el-row :gutter="10"><el-col :lg="6"><el-form-item label="生产线" prop="lineCode"><el-select clearable v-model="form.lineCode" placeholder="请选择生产线" filterable@change="formLineSelectChange" style="width: 100%;"><el-option v-for="item in options.mes_line_list" :key="item.id" :label="item.lineName":value="item.lineCode"><span class="fl">{{ item.innerLineCode }}</span><span class="fr" style="color: var(--el-text-color-secondary);">{{ item.lineName }}</span></el-option></el-select></el-form-item></el-col><el-col :lg="4"><el-form-item label="标准工时" prop="standardWorkHours"><el-input-number v-model="form.standardWorkHours" :min="0" :max="24" :precision="1" placeholder="请输入标准工时"style="width: 100%;" /></el-form-item></el-col><el-col :lg="4"><el-form-item label="日期" prop="workDate"><el-date-picker v-model="form.workDate" type="date" placeholder="日期" value-format="YYYY-MM-DD":shortcuts="shortcutsWorkDate" style="width: 100%;"></el-date-picker></el-form-item></el-col><el-col :lg="4"><el-form-item label="班次" prop="workShift"><el-select clearable v-model="form.workShift" placeholder="请选择生产班次" style="width: 100%;"><el-option v-for="item in options.mes_classes_type" :key="item.dictValue" :label="item.dictLabel":value="item.dictValue"></el-option></el-select></el-form-item></el-col><el-col :lg="6"><el-form-item label="备注信息" prop="remark"><el-input v-model="form.remark" placeholder="请输入备注信息" style="width: 100%;" type="textarea" :rows="2" /></el-form-item></el-col></el-row><el-divider content-position="center">报工人员明细</el-divider><!-- 查询条件 --><el-form :model="queryParamsUserNav" label-position="right" inline ref="queryRefUserNav"><el-form-item label="部门" prop="deptId"><el-tree-select v-model="queryParamsUserNav.deptId" :data="deptOptions":props="{ value: 'id', label: 'label', children: 'children' }" value-key="id" placeholder="请选择归属部门"check-strictly :render-after-expand="false" @change="changeDept($event)" filterable /></el-form-item><el-form-item label="岗位" prop="postId"><el-select v-model="queryParamsUserNav.postId" placeholder="请选择岗位" filterable clearable@change="changePost"><el-option v-for="item in postOptions" :key="item.postId" :label="item.postName" :value="item.postId"><span class="fl">{{ item.postCode }}</span><span class="fr" style="color: var(--el-text-color-secondary);">{{ item.postName }}</span></el-option></el-select></el-form-item><el-form-item label="用户" prop="userId"><el-select v-model="queryParamsUserNav.userId" placeholder="请选择用户" filterable clearable><el-option v-for="item in userOptions" :key="item.userId" :label="item.nickName" :value="item.userId"><span class="fl">{{ item.nickName }}</span><span class="fr" style="color: var(--el-text-color-secondary);">{{ item.userName }}</span></el-option></el-select></el-form-item><el-form-item><el-button icon="search" type="primary" @click="handleQueryUserNav">{{ $t('btn.search') }}</el-button><el-button icon="refresh" @click="resetQueryUserNav">{{ $t('btn.reset') }}</el-button></el-form-item></el-form><!-- 自制穿梭框 --><el-row><!-- 左边table --><el-col :lg="10" style="height: 100%;"><div class="table-container"><el-table :data="dataListLeft" v-loading="loadingLeft" ref="table" borderheader-cell-class-name="el-table-header-cell" highlight-current-row@selection-change="handleSelectionChangeLeft" :height="tableHeight - 40"><el-table-column type="selection" width="50" align="center" /><el-table-column type="index" width="60" label="序号" align="center" /><el-table-column prop="deptName" label="部门" align="center" /><el-table-column prop="userName" label="工号" align="center" /><el-table-column prop="nickName" label="姓名" align="center" /><el-table-column prop="postNames" label="岗位" align="center" /></el-table><pagination :total="totalLeft" v-model:page="queryParamsUserNav.pageNum"v-model:limit="queryParamsUserNav.pageSize" @pagination="handleQueryUserNav" /></div></el-col><!-- 向左箭头 --><el-col :lg="1" align="right"style="margin: 0.5%; display: flex; align-items: center; justify-content: center;"><el-button type="primary" icon="arrow-left" @click="handleLeftArrow"></el-button></el-col><!-- 向右箭头 --><el-col :lg="1" align="left"style="margin: 0.5%; display: flex; align-items: center; justify-content: center;"><el-button type="primary" icon="arrow-right" @click="handleRightArrow"></el-button></el-col><!-- 右边table --><el-col :lg="11" style="height: 100%;"><div class="table-container"><el-table :data="dataListRight" v-loading="loadingRight" ref="table" borderheader-cell-class-name="el-table-header-cell" highlight-current-row@selection-change="handleSelectionChangeRight" :height="tableHeight - 40"><el-table-column type="selection" width="50" align="center" /><el-table-column type="index" width="60" label="序号" align="center" /><el-table-column prop="deptName" label="部门" align="center" /><el-table-column prop="userName" label="工号" align="center" /><el-table-column prop="nickName" label="姓名" align="center" /><el-table-column prop="actualWorkHours" label="实际工时/h" align="center" width="150"><template #default="scope"><el-input-number v-model="scope.row.actualWorkHours" :min="0" :max="24" :precision="1"placeholder="实际工时/h" style="width: 100%;" controls-position="right" /></template></el-table-column><el-table-column prop="standardWorkHours" label="标准工时/h" align="center" width="150" /><el-table-column prop="postNames" label="岗位" align="center" /></el-table></div></el-col></el-row></el-form><template #footer><el-button text @click="cancel">{{ $t('btn.cancel') }}</el-button><el-button type="primary" @click="submitForm">{{ $t('btn.submit') }}</el-button></template></el-dialog>

js

<script setup name="meshumanreport">
import {listMesHumanReport, getMesHumanReportList,addMesHumanReport, delMesHumanReport,updateMesHumanReport, updateMesHumanReportDetailPartial, getMesHumanReport,
}from '@/api/dataReport/meshumanreport.js'
import { getMesLineList } from '@/api/factoryManage/mesline.js'
import { treeselect } from '@/api/system/dept'
import { listPostOptionSelectLimit } from '@/api/system/post.js'
import { getUserListByPost } from '@/api/system/user.js'
import dayjs from 'dayjs';
import auth from '@/plugins/auth'const { proxy } = getCurrentInstance()
const ids = ref([])
const loading = ref(false)
const loadingLeft = ref(false)
const loadingRight = ref(false)const queryParamsUserNav = reactive({pageNum: 1,pageSize: 20,sortType: 'asc',deptId: undefined,postId: undefined,userId: undefined,
})const total = ref(0)
const totalLeft = ref(0)
const totalRight = ref(0)
const dataList = ref([])
const dataListLeft = ref([])
const dataListRight = ref([])
const dataListLeftChosed = ref([])
const dataListRightChosed = ref([])
const queryRef = ref()
const queryRefUserNav = ref()const deptOptions = ref([])
const postOptions = ref([])
const userOptions = ref([])
const standardDisabled = ref(true)
const tableHeight = ref(570)var dictParams = [{ dictType: "mes_classes_type" },
]proxy.getDicts(dictParams).then((response) => {response.data.forEach((element) => {state.options[element.dictType] = element.list})
})//当前时间
const now = new Date();// 设置:subtract往前推 add往后
const dateRangeWorkDate = ref([dayjs().subtract(1, 'day').format('YYYY-MM-DD'), dayjs().format('YYYY-MM-DD')])const shortcutsWorkDate = [{text: '今天',value: new Date(),},{text: '昨天',value: () => {const date = new Date()date.setTime(date.getTime() - 3600 * 1000 * 24)return date},},{text: '一周前',value: () => {const date = new Date()date.setTime(date.getTime() - 3600 * 1000 * 24 * 7)return date},},
]//日期范围变化时,触发表单校验(因为el-date-picker 选中的值不会自动通知表单验证状态,所以这里要单独处理)
function handleDateChange() {dataList.value = []// console.log(dateRangeWorkDate.value)// queryParams.dateRangeWorkDate = dateRangeWorkDate.value// // 查询报表数据// getList()
}// 动态表头生成
// const dateRangeWorkDate = ref([])
const dynamicHeaders = computed(() => {console.log(dateRangeWorkDate.value)if (!dateRangeWorkDate.value || dateRangeWorkDate.value.length !== 2) return []const dates = []const start = new Date(dateRangeWorkDate.value[0])const end = new Date(dateRangeWorkDate.value[1])while (start <= end) {dates.push({date: start.toISOString().split('T')[0],shifts: ['白班', '夜班']})start.setDate(start.getDate() + 1)}console.log(dates)return dates
})/**************************************************** form操作 ****************************************************/
const formRef = ref()
const formRefEdit = ref()
const formRefUserNav = ref()
const title = ref('')
const titleUserNav = ref('')
// 操作类型 1、add 2、edit 3、view
const opertype = ref(0)
const open = ref(false)
const openUserNav = ref(false)
const openEditCell = ref(false)
const state = reactive({single: true,multiple: true,form: {},formUserNav: {},formEdit: {},rules: {//产线lineCode: [{ required: true, message: '请选择产线', trigger: 'change' },],//标准工时standardWorkHours: [{ required: true, message: '请输入标准工时', trigger: ['change', 'blur'] },],
},],workShift: [{ required: true, message: '请选择班次', trigger: 'change' },],},rulesQueryReport: {//产线// lineCode: [{ required: true, message: '请选择产线', trigger: 'change' },],//日期dateRangeWorkDate: [{ required: true, message: '请选择日期范围', trigger: 'blur' },],},rulesEdit: {lineName: [{ required: true, message: '请输入产线', trigger: 'blur' },],userName: [{ required: true, message: '请输入人员', trigger: 'blur' },],workDate: [{ required: true, message: '请选择日期', trigger: 'change' },],workShift: [{ required: true, message: '请选择班次', trigger: 'change' },],standardWorkHours: [{ required: true, message: '请输入标准工时', trigger: 'change' },],actualWorkHours: [{ required: true, message: '请输入实际工时', trigger: 'change' },],},options: {// 产线列表mes_line_list: [],// 班次 选项列表 格式 eg:{ dictLabel: '标签', dictValue: '0'}mes_classes_type: [],}
})const { form, formUserNav, formEdit, rules, rulesQueryReport, rulesEdit, options, single, multiple } = toRefs(state)// 添加按钮操作
function handleAdd() {reset();open.value = truetitle.value = '添加人力报工'opertype.value = 1form.value.standardWorkHours = 12//日期班次默认值var hour = dayjs().get('hour')if (hour >= 0 && hour < 8) {form.value.workDate = dayjs().subtract(1, 'day').format('YYYY-MM-DD')}else {form.value.workDate = dayjs().format('YYYY-MM-DD')}if (hour >= 8 && hour < 20) {form.value.workShift = '白班'}else {form.value.workShift = '夜班'}//查询用户下拉列表getUserDropDownList()
}// 添加&修改 表单提交
function submitForm() {// 校验表单proxy.$refs["formRef"].validate((valid) => {if (valid) {// 校验明细表if (dataListRight.value.length == 0) {proxy.$modal.msgError('请先选择人员信息')return}dataListRight.value.forEach(item => {item.workShopName = form.value.workShopNameitem.lineCode = form.value.lineCodeitem.lineName = form.value.lineNameitem.workDate = form.value.workDateitem.workShift = form.value.workShiftitem.userCode = item.userNameitem.userName = item.nickName})// 提交表单console.log(dataListRight.value)form.value.mesHumanReportDetailNav = dataListRight.valueaddMesHumanReport(form.value).then((res) => {console.log(res)if (res.code == 200) {proxy.$modal.msgSuccess("操作成功!")open.value = false//刷新列表getList()} else {// proxy.$modal.msgError("操作失败")}}).catch(() => {proxy.$modal.msgError("操作失败")})}})
}// 关闭dialog
function cancel() {open.value = falsereset()
}// 重置表单
function reset() {form.value = {id: null,workShopId: null,workShopCode: null,workShopName: null,lineId: null,lineCode: null,lineName: null,standardWorkHours: null,startTime: null,endTime: null,remark: null,};proxy.resetForm("formRef")resetQueryUserNav()dataListLeft.value = []dataListLeftChosed.value = []dataListRight.value = []dataListRightChosed.value = []
}/*** 生产线下拉变更* @param {*} value*/
function formLineSelectChange(value) {let line = state.options.mes_line_list.find(item => item.lineCode == value)console.log(line)form.value.lineId = line.idform.value.lineCode = line.lineCodeform.value.lineName = line.lineNameform.value.workShopId = line.workShopIdform.value.workShopCode = line.workShopCodeform.value.workShopName = line.workShopName
}/********************************************  人力报工-明细子表信息  ***********************************************/
const mesHumanReportDetailList = ref([])
const checkedMesHumanReportDetail = ref([])
const fullScreen = ref(true)
const drawer = ref(false)/** 人力报工-明细序号 */
function rowMesHumanReportDetailIndex({ row, rowIndex }) {row.index = rowIndex + 1;
}/** 复选框选中数据 */
function handleMesHumanReportDetailSelectionChange(selection) {checkedMesHumanReportDetail.value = selection.map(item => item.index)
}//查询用户信息
function handleQueryUserNav() {console.log(queryParamsUserNav)loadingLeft.value = truegetUserListByPost(queryParamsUserNav).then((res) => {console.log(res)const { code, data } = resif (code == 200) {dataListLeft.value = data.resulttotalLeft.value = data.totalNumconsole.log(data.result)//dataListLeft去除掉右边dataListRight的人员dataListLeft.value = dataListLeft.value.filter(item => !dataListRight.value.some(item2 => item2.userId == item.userId))}loadingLeft.value = false}).catch(() => {loadingLeft.value = false})
}//查询用户信息条件清空
function resetQueryUserNav() {queryParamsUserNav.deptId = undefinedqueryParamsUserNav.postId = undefinedqueryParamsUserNav.userId = undefinedqueryParamsUserNav.pageNum = 1queryParamsUserNav.pageSize = 20handleQueryUserNav()
}//部门选择改变
function changeDept(e) {console.log(e)if (e) {queryParamsUserNav.deptId = egetUserDropDownList()}
}//岗位选择改变
function changePost() {getUserDropDownList()
}// 获取人员下拉列表
function getUserDropDownList() {queryParamsUserNav.userId = undefinedvar tmpQueryParams = {deptId: queryParamsUserNav.deptId,postId: queryParamsUserNav.postId,pageNum: 1,pageSize: 99999,}getUserListByPost(tmpQueryParams).then((res) => {console.log(res)const { code, data } = resif (code == 200) {userOptions.value = data.result}})}//箭头向左,取消选中数据
function handleLeftArrow() {if (dataListRightChosed.value.length == 0) {proxy.$modal.msgError('请先勾选要取消选中的人员')} else {dataListRight.value = dataListRight.value.filter(item => !dataListRightChosed.value.some(item2 => item2.userId == item.userId))dataListRightChosed.value = []//左边的数据重新查询handleQueryUserNav()}
}//箭头向右,选中数据
function handleRightArrow() {if (form.value.standardWorkHours) {if (dataListLeftChosed.value.length > 0) {//右边的数据加上左边的选中数据,已经存在的不重复添加dataListRight.value = dataListRight.value.concat(dataListLeftChosed.value.filter(item => !dataListRight.value.some(item2 => item2.userId == item.userId)))console.log(form.value.workDate)dataListRight.value.forEach(item => {item.standardWorkHours = form.value.standardWorkHoursitem.actualWorkHours = form.value.standardWorkHours})dataListLeft.value = dataListLeft.value.filter(item => !dataListLeftChosed.value.some(item2 => item2.userId == item.userId))dataListLeftChosed.value = []} else {proxy.$modal.msgError('请先勾选要添加的人员')}} else {proxy.$modal.msgError('请先设置标准工时')}
}//左侧选择改变
function handleSelectionChangeLeft(selection) {// dataListLeftChosed = selection.map(item => item.userId)dataListLeftChosed.value = selection
}//右侧选择改变
function handleSelectionChangeRight(selection) {dataListRightChosed.value = selection
}/** 查询部门下拉树结构 */
function getDeptTreeselect() {treeselect().then((response) => {deptOptions.value = response.data})
}
function getDropDownList() {// 获取生产线列表getMesLineList().then(res => {console.log(res)const { code, data } = resif (code == 200) {state.options.mes_line_list = data}})// 获取岗位列表listPostOptionSelectLimit().then((res) => {console.log(res)if (res.code == 200) {postOptions.value = res.data}})
}handleQuery()
getDropDownList()
getDeptTreeselect()
</script>

相关文章:

使用vue3+element plus 的table自制的穿梭框(支持多列数据)

目录 一、效果图 二、介绍 三、代码区 一、效果图 话不多说&#xff0c;先上图 二、介绍 项目需要&#xff1a;通过穿梭框选择人员信息&#xff0c;可以根据部门、岗位进行筛选&#xff0c;需要显示多列&#xff08;不光显示姓名&#xff0c;还包括人员的一些基础信息&…...

学习笔记:IC存储总结(ROM,RAM, EEPROM, Flash, SRAM, DRAM, DDL)

一&#xff0c;概述 半导体存储器是一种可以存储大量二值信息的半导体器件。在电子计算机及一些其他的数字系统的工作过程中&#xff0c;需要对大量的数据进行储存。由于数据处理的数据量和运算速度的要求&#xff0c;因此把存储量和存取速度作为衡量存储器的重要指标。 在电子…...

本地部署pangolin获取谱系,从而达到预测新冠的流行趋势

步骤 1&#xff1a;安装Docker 注&#xff1a;此步骤忽略&#xff0c;可通过Docker官网对于文档进行安装,地址如下 Docker: Accelerated Container Application Developmenthttps://www.docker.com/ 步骤 2&#xff1a;拉取Pangolin镜像 docker pull staphb/pangolin:latest 步…...

【Python】文件File处理详细解释,附示例(文件操作、模式、编码、指针、调试、大文件处理、文件管理等)

文件 File 处理方法 1. 前言2. 文件基础操作2.1 文件打开与关闭2.2 with 语句(上下文管理器)3. 文件模式详解3.1 基础模式3.2 扩展模式4. 文件读写操作4.1 读取内容4.2 写入内容5. 文件指针和随机访问5.1 seek(offset.whence)5.2 二进制模式下的指针操作6. 文件编码处理6.1 指定…...

Windows 10/11 系统下 Git 的详细安装步骤和基础设置指南

以下是 Windows 10/11 系统下 Git 的详细安装步骤和基础设置指南&#xff1a; Windows 10/11 系统下 Git 的详细安装步骤和基础设置指南 一、详细安装步骤1. 下载 Git 安装包2. 运行安装程序1. 双击安装包&#xff0c;按以下选项配置&#xff1a;2. 点击 Install 完成安装。 二…...

RabbitMQ的四种交换机

RabbitMQ交换机 什么是RabbitMQ RabbitMQ 是一个开源的消息代理和队列服务器&#xff0c;用于在分布式系统中存储和转发消息。它基于 AMQP&#xff08;高级消息队列协议&#xff09;实现&#xff0c;支持多种消息传递模式&#xff0c;广泛应用于异步通信、应用解耦、负载均衡…...

探秘基带算法:从原理到5G时代的通信变革【一】引言

文章目录 一、引言1.1 研究背景与意义1.2 研究目的与方法1.3 研究内容与创新点 本博客为系列博客&#xff0c;主要讲解各基带算法的原理与应用&#xff0c;包括&#xff1a;viterbi解码、Turbo编解码、Polar编解码、CORDIC算法、CRC校验、FFT/DFT、QAMtiaozhi/解调、QPSK调制/解…...

ES中数据刷新策略refresh

在 Elasticsearch 中&#xff0c;插入数据时的 refresh 参数控制文档在写入后何时对搜索可见&#xff0c;其行为直接影响数据可见性和系统性能。以下是 refresh 参数的三个可选值&#xff08;true、false、wait_for&#xff09;的详细说明及适用场景&#xff1a; 1. refreshtr…...

【向量数据库Weaviate】 和Elasticsearch的区别

Weaviate 和 Elasticsearch 是两种不同类型的数据库&#xff0c;设计目标和应用场景有显著差异。以下是它们的核心区别和适用场景的详细对比&#xff1a; 1. 设计目标与核心能力 维度WeaviateElasticsearch核心能力向量数据库 图数据库&#xff08;语义搜索优先&#xff09;全…...

【Wireshark 02】抓包过滤方法

一、官方教程 Wireshark 官网文档 &#xff1a; Wireshark User’s Guide 二、显示过滤器 2.1、 “数据包列表”窗格的弹出过滤菜单 例如&#xff0c;源ip地址作为过滤选项&#xff0c;右击源ip->prepare as filter-> 选中 点击选中完&#xff0c;显示过滤器&#…...

【零基础到精通Java合集】第十五集:Map集合框架与泛型

课程标题:Map集合框架与泛型(15分钟) 目标:掌握泛型在Map中的键值类型约束,理解类型安全的键值操作,熟练使用泛型Map解决实际问题 0-1分钟:泛型Map的意义引入 以“字典翻译”类比泛型Map:明确键和值的类型(如英文→中文)。说明泛型Map的作用——确保键值对的类型一…...

三参数水质在线分析仪:从源头保障饮用水安全

【TH-ZS03】饮用水安全是人类健康的重要保障&#xff0c;其质量直接关系到人们的生命健康。随着工业化、城市化的快速发展&#xff0c;水体污染问题日益严峻&#xff0c;饮用水安全面临着前所未有的挑战。为了从源头保障饮用水安全&#xff0c;科学、高效的水质监测手段必不可少…...

Java8-Stream流介绍和使用案例

Java 8 引入了 Stream API&#xff0c;它提供了一种高效且声明式的方式来处理集合数据。Stream 的核心思想是将数据的操作分为中间操作&#xff08;Intermediate Operations&#xff09;和终端操作&#xff08;Terminal Operations&#xff09;&#xff0c;并通过流水线&#x…...

FieldFox 手持射频与微波分析仪

FieldFox 手持射频与微波分析仪 简述 Keysight FieldFox 便携式分析仪可以在非常恶劣的工作环境中&#xff0c;轻松完成从日常维护到深入故障诊断的各项工作。 选择最适合您需求且有强大软件支持的 Keysight FieldFox 配置。 主要特性 特点&#xff1a; FieldFox 分析仪可…...

JQuery学习笔记,点击按钮加载更多的图片

利用点击按钮模拟某京&#xff0c;某宝&#xff0c;滚动页面加载图片的效果&#xff0c;代码&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8"><title>Ajax请求</title></head><body><button id…...

swift4-汇编分析枚举内存布局

一、枚举的内存原理 1.1 常规case enum TestEnum { case test1, test2, test3 } var t TestEnum.test1 t .test2 t .test3枚举是常规的case的情况-是采取一个字节来存枚举变量通过拿到枚举的内存地址&#xff0c;看地址里面存的枚举值情况窥探枚举内存存储情况 var t Te…...

Vue 3 整合 WangEditor 富文本编辑器:从基础到高级实践

本文将详细介绍如何在 Vue 3 项目中集成 WangEditor 富文本编辑器&#xff0c;实现图文混排、自定义扩展等高阶功能。 一、为什么选择 WangEditor&#xff1f; 作为国内流行的开源富文本编辑器&#xff0c;WangEditor 具有以下优势&#xff1a; 轻量高效&#xff1a;压缩后仅…...

Docker安装嵌入框架Text Embeddings Inference (TEI)

Docker安装Text Embeddings Inference (TEI) 1 简单介绍 文本嵌入推理&#xff08;TEI&#xff0c;Text Embeddings Inference &#xff09;是HuggingFace研发的一个用于部署和服务开源文本嵌入和序列分类模型的工具包。TEI兼容OpenAI的嵌入模型的规范。 # 官网地址 https:/…...

【HeadFirst系列之HeadFirst设计模式】第14天之与设计模式相处:真实世界中的设计模式

与设计模式相处&#xff1a;真实世界中的设计模式 设计模式是软件开发中的经典解决方案&#xff0c;它们帮助我们解决常见的设计问题&#xff0c;并提高代码的可维护性和可扩展性。在《Head First设计模式》一书中&#xff0c;作者通过生动的案例和通俗的语言&#xff0c;深入…...

java后端开发day27--常用API(二)正则表达式爬虫

&#xff08;以下内容全部来自上述课程&#xff09; 1.正则表达式&#xff08;regex&#xff09; 可以校验字符串是否满足一定的规则&#xff0c;并用来校验数据格式的合法性。 1.作用 校验字符串是否满足规则在一段文本中查找满足要求的内容 2.内容定义 ps&#xff1a;一…...

【UCB CS 61B SP24】Lecture 22 23: Tree and Graph Traversals, DFS, BFS 学习笔记

本文讲解了二叉树的四种遍历方式&#xff0c;以及如何通过前/后序遍历与中序遍历重建出二叉树&#xff0c;接着介绍了新的非线性数据结构&#xff1a;图&#xff0c;详细讲解了图的存储方式与遍历方式&#xff0c;最后使用 Java 基于邻接表的存储方式实现了图与 DFS、BFS 两种遍…...

Redis100道高频面试题

一、Redis基础 Redis是什么&#xff1f;主要应用场景有哪些&#xff1f; Redis 是一个开源的、基于内存的数据结构存储系统&#xff0c;支持多种数据结构&#xff08;如字符串、哈希、列表、集合等&#xff09;&#xff0c;可以用作数据库、缓存和消息中间件。 主要应用场景&…...

Mac OS Homebrew更换国内镜像源(中科大;阿里;清华)

omebrew官方的源一般下载包之类的会很慢&#xff0c;所以通常我们都是用国内的镜像源来代替&#xff0c;这样会提高我们的效率。Homebrew主要有四个部分组成: brew、homebrew-core 、homebrew-bottles、homebrew-cask。 代码语言&#xff1a;javascript 代码运行次数&#xf…...

excel vlookup的精确查询、模糊查询、反向查询、多列查询

目录 入门 精确查询 模糊查询 反向查询 (搭配 if 函数) 多列查询 (搭配 match 函数) 入门 精确查询 需求: 查找 学生编号是008 所在的班级 操作: 在I2单元格输入公式如下,VLOOKUP(H2,B1:E12,4,FALSE), 得出结果 看一下vlookup 公式每一个参数应该怎么写? 语法: vlookup…...

linux的文件系统及文件类型

目录 一、Linux支持的文件系统 二、linux的文件类型 2.1、普通文件 2.2、目录文件 2.3、链接文件 2.4、字符设备文件: 2.5、块设备文件 2.6、套接字文件 2.7、管道文件 三、linux的文件属性 3.1、关于权限部分 四、Linux的文件结构 五、用户主目录 5.1、工作目录…...

MySQL 安装配置(完整教程)

文章目录 一、MySQL 简介二、下载 MySQL三、安装 MySQL四、配置环境变量五、配置 MySQL 5.1 初始化 MySQL5.2 启动 MySQL 服务 六、修改 MySQL 密码七、卸载 MySQL八、结语 一、MySQL 简介 MySQL 是一款广泛使用的开源关系型数据库管理系统&#xff08;RDBMS&#xff09;&am…...

C# Unity 唐老狮 No.4 模拟面试题

本文章不作任何商业用途 仅作学习与交流 安利唐老狮与其他老师合作的网站,内有大量免费资源和优质付费资源,我入门就是看唐老师的课程 打好坚实的基础非常非常重要: 全部 - 游习堂 - 唐老狮创立的游戏开发在线学习平台 - Powered By EduSoho 如果你发现了文章内特殊的字体格式,…...

给没有登录认证的web应用添加登录认证(openresty lua实现)

这阵子不是deepseek火么&#xff1f;我也折腾了下本地部署&#xff0c;ollama、vllm、llama.cpp都弄了下&#xff0c;webui也用了几个&#xff0c;发现nextjs-ollama-llm-ui小巧方便&#xff0c;挺适合个人使用的。如果放在网上供多人使用的话&#xff0c;得接入登录认证才好&a…...

R语言绘图:韦恩图

韦恩分析 韦恩分析&#xff08;Venn Analysis&#xff09;常用于可视化不同数据集之间的交集和并集。维恩图&#xff08;Venn diagram&#xff09;&#xff0c;也叫文氏图、温氏图、韦恩图、范氏图&#xff0c;用于显示元素集合重叠区域的关系型图表&#xff0c;通过图形与图形…...

STM32——串口通信 UART

一、基础配置 Universal Asynchronous Receiver Transmitter 异步&#xff0c;串行&#xff0c;全双工 TTL电平 &#xff1a;高电平1 低电平0 帧格式&#xff1a; 起始位1bit 数据位8bit 校验位1bit 终止位1bit NVIC Settings一栏使能接受中断。 之前有设置LCD&#xff0c;…...

【大模型基础_毛玉仁】1.3 基于Transformer 的语言模型

【大模型基础_毛玉仁】1.3 基于Transformer 的语言模型 1.3 基于Transformer 的语言模型1.3.1 Transformer1&#xff09;注意力层&#xff08;AttentionLayer&#xff09;2&#xff09;全连接前馈层&#xff08;Fully-connected Feedforwad Layer&#xff09;3&#xff09;层正…...

靶场(二)---靶场心得小白分享

开始&#xff1a; 看一下本地IP 21有未授权访问的话&#xff0c;就从21先看起 PORT STATE SERVICE VERSION 20/tcp closed ftp-data 21/tcp open ftp vsftpd 2.0.8 or later | ftp-anon: Anonymous FTP login allowed (FTP code 230) |_Cant get dire…...

大学至今的反思与总结

现在是2025年的3月5日&#xff0c;我大三下学期。 自大学伊始&#xff0c;我便以考研作为自己的目标&#xff0c;有时还会做自己考研上岸头部985,211&#xff0c;offer如潮水般涌来的美梦。 但是我却忽略了一点&#xff0c;即便我早早下定了决心去考研&#xff0c;但并没有早…...

【大模型】Llama 3.2 大语言模型初探:模型权重下载

文章目录 一、简介二、权重下载2.1 方法一&#xff1a;Meta 官网申请下载2.2 方法二&#xff1a;使用 hugging face 下载 一、简介 Llama&#xff08;Large Language Model Meta AI&#xff09;是 Meta&#xff08;原 Facebook&#xff09;开发的一系列开源大型语言模型。它的目…...

unity学习63,第2个小游戏:用fungus做一个简单对话游戏

目录 1 目标用fungus做一个简单的剧情对话游戏 1.1 先创建一个新的3D项目 1.2 fungus是什么 1.2.1 怎么获得 1.2 在AssetStore里搜索fungus (插件类)--千万别买收费的错的&#xff01; 1.3 fungus的官网 1.3.1 官网给的3个下载链接&#xff0c;unity的果然已经失效了 …...

笔记:代码随想录算法训练营day36:LeetCode1049. 最后一块石头的重量 II、494. 目标和、474.一和零

学习资料&#xff1a;代码随想录 1049.最后一块石头的重量II 力扣题目链接 思路&#xff1a;如何讲该问题转化为背包问题&#xff1a;还是对半分去碰&#xff0c;对半分去碰碰剩下的就是最小的。然后背包容量就是一半儿&#xff0c;物品重量等于物品价值等于stones[i] 和上…...

Elasticsearch:解锁深度匹配,运用Elasticsearch DSL构建闪电般的高效模糊搜索体验

目录 Elasticsearch查询分类 叶子查询 全文检索查询 match查询 multi_match查询 精确查询 term查询 range查询 复杂查询 bool查询简单应用 bool查询实现排序和分页 bool查询实现高亮 场景分析 问题思考 解决方案 search_after方案(推荐) point in time方案 方案…...

Android实现漂亮的波纹动画

Android实现漂亮的波纹动画 本文章讲述如何使用二维画布canvas和camera、矩阵实现二、三维波纹动画效果&#xff08;波纹大小变化、画笔透明度变化、画笔粗细变化&#xff09; 一、UI界面 界面主要分为三部分 第一部分&#xff1a;输入框&#xff0c;根据输入x轴、Y轴、Z轴倾…...

qt实践教学(编写一个代码生成工具)持续更新至完成———

前言&#xff1a; 我的想法是搭建一个和STM32cubemux类似的图形化代码生成工具&#xff0c;可以把我平时用到的代码整合一下全部放入这个软件中&#xff0c;做一个我自己专门的代码生成工具&#xff0c;我初步的想法是在下拉选框中拉取需要配置的功能&#xff0c;然后就弹出对…...

【数据结构】什么是栈||栈的经典应用||分治递归||斐波那契问题和归并算法||递归实现||顺序栈和链栈的区分

文章目录 &#x1f967;栈的初步理解&#xff1a;&#x1f967;易错&#xff1a;如何判断栈满&#x1f967;栈满理解&#x1f967;栈的基本运算&#x1f4da;栈操作的伪代码逻辑&#xff08;顺序和链栈&#xff09;&#x1f4d5;顺序栈运算实现&#xff1a;顺序栈的表示&#x…...

vue3(笔记)4.0 vueRouter.导航守卫.ElementPuls知识点

---vueRouter 创建路由: 完整写法(懒加载): 默认写法与vue2一致: 导入 然后 写成component: LoginPage import { createRouter, createWebHistory } from vue-routerconst router createRouter({history: createWebHistory(import.meta.env.BASE_URL), routes: [{path:/lo…...

[数字图像处理]实验三:直方图增强

目录 一、实验目的 二、实验原理 三、实验内容&#xff08;附代码&#xff09; 四、实验结果及分析 五、实验小结 一、实验目的 1.了解图像增强的意义和目的 2.掌握各种图像增强的基本原理和方法 3.使用MATLAB实现图像增强 二、实验原理 图像增强方法从增强的作用域…...

图像分类项目1:基于卷积神经网络的动物图像分类

1、选题背景及动机 在现代社会中&#xff0c;图像分类是计算机视觉领域的一个重要任务。动物图像分类具有广泛的应用&#xff0c;例如生态学研究、动物保护、农业监测等。通过对动物图像进行自动分类&#xff0c;可以帮助人们更好地了解动物种类、数量和分布情况&#xff0c;从…...

并发编程(线程池)面试题及原理

1. 执行原理/核心参数 1.1 核心参数 核心参数 corePoolSize 核心线程数目maximumPooISize 最大线程数目 &#xff08;核心线程&#xff0b;救急线程的最大数目&#xff09;keepAliveTime 生存时间- 救急线程的生存时间&#xff0c;生存时间内没有新任务&#xff0c;此线程资…...

初次使用 IDE 搭配 Lombok 注解的配置

前言 在 Java 开发的漫漫征程中&#xff0c;我们总会遇到各种提升效率的工具。Lombok 便是其中一款能让代码编写变得更加简洁高效的神奇库。它通过注解的方式&#xff0c;巧妙地在编译阶段为我们生成那些繁琐的样板代码&#xff0c;比如 getter、setter、构造函数等。然而&…...

云原生时代的技术桥梁

在数字化转型的大潮中&#xff0c;企业面临着数据孤岛、应用间集成复杂、高成本与低效率等问题。这些问题不仅阻碍了企业内部信息的流通和资源的共享&#xff0c;也影响了企业对外部市场变化的响应速度。当前&#xff0c;这一转型过程从IT角度来看&#xff0c;已然迈入云原生时…...

2024四川大学计算机考研复试上机真题

2024四川大学计算机考研复试上机真题 2024四川大学计算机考研复试机试真题 历年四川大学计算机考研复试机试真题 在线评测&#xff1a;https://app2098.acapp.acwing.com.cn/ 分数求和 题目描述 有一分数序列&#xff1a; 2/1 3/2 5/3 8/5 13/8 21/13… 求出这个数列的前 …...

【GPU使用】如何在物理机和Docker中指定GPU进行推理和训练

我的机器上有4张H100卡&#xff0c;我现在只想用某一张卡跑程序&#xff0c;该如何设置。 代码里面设置 import os # 记住要写在impot torch前 os.environ[CUDA_VISIBLE_DEVICES] "0, 1"命令行设置 export CUDA_VISIBLE_DEVICES0,2 # Linux 环境 python test.py …...

汽车免拆诊断案例 | 2023款丰田雷凌汽油版车行驶中偶尔出现通信故障

故障现象  一辆2023款丰田雷凌汽油版车&#xff0c;搭载1.5 L发动机&#xff0c;累计行驶里程约为4700 km。车主反映&#xff0c;行驶中偶尔组合仪表上的发动机转速信号丢失&#xff0c;转向变重&#xff0c;且有“闯车”感&#xff0c;同时车辆故障警报蜂鸣器鸣响。 故障诊断…...

千里科技亮相吉利AI智能科技发布会,共启“AI+车”新纪元

今天&#xff0c;在三亚举行的吉利AI智能科技发布会上&#xff0c;千里科技董事长印奇发表了主题为《从“车AI”到“AI车”》的演讲。印奇重点分享了对于“AI车”未来趋势的判断&#xff0c;并重点介绍了在吉利AI科技生态体系下&#xff0c;围绕智驾、智舱等领域的创新合作。基…...