用户管理页面(解决toggleRowSelection在dialog用不了的隐患,包含el-table的plus版本的组件)
新增/编辑/删除/分配角色,图片上传在此文章分类下另一个文章
1.重点分配角色:
<template><!-- 客户资料 --><div class="pageBox"><elPlusTable :tableData="tableData" :tablePage="tablePage" @onSizeChange='onSizeChange' @onCurrentChange='onCurrentChange'><template v-slot:searchConditions><el-form-item label="用户名称"><el-input v-model="formInline.name" placeholder="请输入" clearable /></el-form-item><el-form-item label="用户账号"><el-input v-model="formInline.username" placeholder="请输入" clearable /></el-form-item><el-form-item label="用户电话"><el-input v-model="formInline.mobilenumber" placeholder="请输入" clearable /></el-form-item><el-form-item><el-button type="primary" @click="onSubmit"><Search style="width: 1em; height: 1em; margin-right: 8px" />查询</el-button><el-button type="primary" @click="onSubmitreset"><Search style="width: 1em; height: 1em; margin-right: 8px" />重置</el-button></el-form-item></template><template v-slot:optionBtn><el-button type="primary" @click="clickDialogBtn('新增',{})"><Plus style="width: 1em; height: 1em; margin-right: 8px" />新增</el-button><el-button @click="adminGetAllUser"><Delete style="width: 1em; height: 1em; margin-right: 8px" />删除</el-button></template><template v-slot:tableColumns><el-table-column type="selection" align="center" :selectable="selectable" width="110" /><el-table-column prop="avatar" align="center" label="头像"><template #default="scope"><el-image style="height: 40px;width: 40px;" :src="scope.row.avatar"></el-image></template></el-table-column><el-table-column prop="nickname" align="center" label="用户名称" /><el-table-column prop="username" align="center" label="用户账号" /><el-table-column prop="mobileNumber" align="center" label="用户电话" /><el-table-column prop="email" align="center" label="用户Email" /><el-table-column fixed="right" align="center" label="操作" min-><template #default="scope"><el-button link type="primary" size="small" @click="clickDialogBtn('编辑',scope.row)"><Edit style="width: 1em; height: 1em; margin-right: 8px" />编辑</el-button><el-button @click="remove(scope.row)" link type="primary" size="small"><Delete style="width: 1em; height: 1em; margin-right: 8px" />删除</el-button><el-button link type="primary" size="small" @click="handleClick(scope.row)">分配角色</el-button></template></el-table-column></template></elPlusTable><assigningRoles ref='assigningRolesREF' @onSure="onSureRole" /><addOrEditDialog ref="dialogRef" @onSure='addOnSure' @onSure2='addOnSurePWD'></addOrEditDialog></div>
</template>
<script lang="ts">
import { Options, Vue } from 'vue-class-component'
import PageBase from '@common/views/PageBase'
import assigningRoles from './assigningRoles.vue'
import elPlusTable from '@src/components/elPlusTableBase/index.vue'
import addOrEditDialog from './addOrEditDialog.vue'
import { useTTACLinkStore } from '@src/store/index'
import {adminGetAllUser,allocationUserRole,adminGetAllUserByPage,adminAddUser,adminRemoveUser,adminUpdateUser,adminUpdateUserPwd,getUserRoles,getAuthById,getAllAuth
} from '@common/apis/ttacLink'import {ElImage,ElPopconfirm,ElTable,ElTableColumn,ElButton,ElRadio,ElRadioGroup,ElMessage,ElForm,ElInput,ElIcon,ElTooltip,ElCheckbox,ElCheckboxGroup,ElFormItem,ElSelect,ElOption,ElDialog
} from 'element-plus'
import { ElMessageBox } from 'element-plus'@Options({components: {ElImage,ElPopconfirm,ElMessage,addOrEditDialog,elPlusTable,assigningRoles,ElTable,ElTableColumn,ElButton,ElRadio,ElRadioGroup,ElForm,ElInput,ElIcon,ElTooltip,ElCheckbox,ElCheckboxGroup,ElFormItem,ElSelect,ElOption,ElDialog}
})
export default class index extends PageBase {// 按钮功能权限private buttons: any = []// 权限读取private async getNowCustomerPageAuthInfoFn() {const ttacLinkStore = useTTACLinkStore()// let apiRoutes = await getAuthById(ttacLinkStore.currentUserInfo.userinfo.id)let apiRoutes = await getAllAuth()// getStore().commit('system/set_PCAPI_routes', apiRoutes)// if (this.$store.state.system.PCAPI_routes.findIndex((item) => item.menuPath == this.$route.path) > -1) {// this.buttons = this.$store.state.system.PCAPI_routes.find((item) => item.menuPath == this.$route.path).button.split(',')// }// console.log('按钮权限:', this.buttons)}mounted() {this.adminGetAllUser()this.getNowCustomerPageAuthInfoFn()}private url = 'https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg'private async remove(row) {// 使用 confirm 对话框的例子ElMessageBox.confirm('是否删除该行?', '警告', {distinguishCancelAndClose: true,confirmButtonText: '确定',cancelButtonText: '取消'}).then(async () => {console.log('用户点击了确定')let res = await adminRemoveUser([row.id])if (res.code == -1) {ElMessage({message: '删除失败!',type: 'error'})} else {ElMessage({message: '删除成功!',type: 'success'})this.adminGetAllUser()}}).catch((action) => {if (action === 'cancel') {console.log('用户点击了取消')// ElMessage({// message: '取消!',// type: 'error'// })} else {console.log('用户关闭了对话框')}})}private async addOnSurePWD(data, key) {if (key == '编辑') {try {await adminUpdateUserPwd(data)ElMessage({message: '修改密码成功!',type: 'success'})this.adminGetAllUser()} catch (error) {}}}private async addOnSure(data, key) {if (key == '新增') {try {await adminAddUser(data)} catch (e) {ElMessage({message: '新增失败!',type: 'error'})return}ElMessage({message: '新增成功!',type: 'success'})this.adminGetAllUser()} else if (key == '编辑') {try {await adminUpdateUser(data)ElMessage({message: '编辑成功!',type: 'success'})this.adminGetAllUser()} catch (error) {}}}private async onSureRole(currentUserId, roles) {// 更新用户的角色列表let requestdata = { userId: currentUserId, userroleIds: [] }for (let index = 0; index < roles.length; index++) {const element = roles[index]requestdata.userroleIds.push(element.id)}await allocationUserRole(requestdata)// '分配角色成功'// this.$lyl_notifyPopup.success(`${this.$t('i18n.roleChangeInfo')}`)ElMessage({message: '成功分配权限!',type: 'success'})}private clickDialogBtn(dialogTitle: string, rowData: any) {;(this.$refs.dialogRef as any).openDialog(dialogTitle, rowData)}private tablePage: any = {pageSize: 10,total: 0,currentPage: 1}private async adminGetAllUser() {try {let res = await adminGetAllUserByPage(this.tablePage.currentPage,this.tablePage.pageSize,this.formInline.name,this.formInline.username,this.formInline.mobilenumber)this.tableData = res.data.datathis.tablePage.total = res.data.totalDataCountthis.tablePage.currentPage = res.data.pageIndex} catch (error) {console.log(error)}// let res = await adminGetAllUser()// this.tableData = res.data}private userId: string = ''private async handleClick(row) {this.userId = row.idlet currentRoles = await getUserRoles(row.id);(this.$refs.assigningRolesREF as any).openDialog(row, currentRoles.data)}private formInline: any = {name: '',username: '',mobilenumber: ''}private onSubmit = () => {this.adminGetAllUser()console.log('submit!')}private onSubmitreset() {this.formInline = {name: '',username: '',mobilenumber: ''}this.adminGetAllUser()}private selectable: any = nullprivate tableData: any[] = []private onSizeChange(val) {this.tablePage.pageSize = valthis.tablePage.currentPage = 1this.adminGetAllUser()console.log('变化了', val)}private onCurrentChange(val) {this.adminGetAllUser()console.log('变化了', val)}
}
</script>
1.新增
<template><el-dialog v-model="visible" title="分配角色" width="500px" center><div style='margin-top:20px;height:76%;'><elPlusTable ref="elplustableREF" :showPagination='showPagination' :showButton='showButton' :showSearch='showSearch' :tableData="tableData"@onSelectedData='getSelectionDataInfo'><template v-slot:tableColumns><el-table-column type="selection" min-width="55" /><el-table-column prop="rolename" label="角色名称" min-width="180" /></template></elPlusTable></div><template #footer><div class="dialog-footer"><el-button @click="close">取消</el-button><el-button type="primary" @click="confirm">确认</el-button></div></template></el-dialog>
</template><script lang="ts" >
import { ref, nextTick } from 'vue'
import { Options, Vue } from 'vue-class-component'
import elPlusTable from '@src/components/elPlusTableBase/index.vue'
import { Component, Prop, Emit, Watch } from 'vue-property-decorator'
import moment from 'moment'// import { downloadHisPdf } from '@/utils/PDF/getPdfDoc'import { getAllRole } from '@common/apis/ttacLink'
import PageBase from '@common/views/PageBase'
import {ElTableColumn,ElButton,ElRadio,ElRadioGroup,ElMessage,ElForm,ElInput,ElTable,ElIcon,ElTooltip,ElCheckbox,ElCheckboxGroup,ElFormItem,ElSelect,ElOption,ElDialog,ElRow
} from 'element-plus'
import { fa } from 'element-plus/es/locale'@Options({components: {elPlusTable,ElRow,ElDialog,ElTable,ElTableColumn,ElButton,ElRadio,ElRadioGroup,ElForm,ElInput,ElIcon,ElTooltip,ElCheckbox,ElCheckboxGroup,ElFormItem,ElSelect,ElOption}
})
export default class index extends PageBase {mounted() {}private showPagination: boolean = falseprivate visible: boolean = falseprivate showSearch: boolean = falseprivate showButton: boolean = falsepublic async openDialog(val, currentRoles) {this.visible = truelet res = await getAllRole()this.tableData = res.data// userId:当前行用户的 id currentRoles:当前行用户的角色信息this.currentUserId = val.id// 计算已经初始化选中的行let initrows = []if (currentRoles) {for (let index = 0; index < this.tableData.length; index++) {const element = this.tableData[index]let find = currentRoles.find((o) => o.rolename === element.rolename)if (find) {initrows.push(element)}}await this.$nextTick();(this.$refs.elplustableREF as any).toggleRowSelections(initrows)window.console.log('initrows:', initrows)}// toggleRowSelection}private currentUserId: string = ''private ruleForm: any = {}private confirm() {this.onSure(this.currentUserId, this.chooseArray)this.visible = false}private close() {this.ruleForm = {}this.visible = false}private radio: any = ''private tableData: any[] = []// private tabHeight: string = '440px'// private getClickRowInfo(row) {// this.$nextTick(() => {// // ;(this.$refs.elplustableREF as any).toggleRowSelection(row, true)// })// // this.tableData.filter((item, index) => {// // if (row.id == item.id) {// // this.radio = index// // }// // })// }private chooseArray: any[] = []private getSelectionDataInfo(row) {this.chooseArray = row}@Emit('onSure')private onSure(currentUserId: string, chooseArray: any[]) {}
}
</script>
<style lang="scss" scoped></style>
3.el-table抽离出来的组件
//el-table抽离出来的组件
<template><!-- 规格参数 --><div class="pageBox"><div class="searchBox" v-if="showSearch"><!-- 搜索条件 --><slot name="searchConditions"> </slot></div><div class="contentBox"><div class="optionBox" v-if="showButton"><!-- 操作按钮 --><slot name="optionBtn"> </slot></div><div class="tableBox" :style="{ height: showPagination ? 'calc(100% - 100px)' : 'calc(100% - 50px)' }"><el-table ref='pTable' height="100%" :data="tableData" style="width: 100%" @row-click="rowClickFn" @selection-change="selectionChange":header-cell-style="{ backgroundColor: '#007caa',color:'#fff' }">><!-- 表列表 --><slot name="tableColumns"> </slot></el-table></div><div class="paginationBox" v-if="showPagination"><!-- 分页 --><el-pagination v-model:current-page="tablePage.currentPage" v-model:page-size="tablePage.pageSize" :page-sizes="tablePage.pageSizes":size="size" :disabled="disabled" :background="background" layout="total, sizes, prev, pager, next, jumper" :total="tablePage.total"@size-change="handleSizeChange" @current-change="handleCurrentChange" /></div></div></div>
</template>
<script lang="ts">
import { Options, Vue } from 'vue-class-component'
import PageBase from '@common/views/PageBase'
import addOrEditDialog from './addOrEditDialog.vue'
import { Prop, Component, Emit, Watch } from 'vue-property-decorator'
import {ElTable,ElTableColumn,ElButton,ElRadio,ElRadioGroup,ElMessage,ElForm,ElInput,ElIcon,ElTooltip,ElCheckbox,ElCheckboxGroup,ElFormItem,ElSelect,ElOption,ElDialog,ElPagination
} from 'element-plus'
import { computed } from 'vue'
import type { ComponentSize } from 'element-plus'
import dataDashboard from '@src/utils/modules/apiList/dataDashboard/dataDashboard'
@Options({components: {ElTable,ElTableColumn,ElButton,ElRadio,ElRadioGroup,ElForm,ElInput,ElIcon,ElTooltip,ElCheckbox,ElCheckboxGroup,ElFormItem,ElSelect,ElOption,ElDialog,ElPagination}
})
export default class index extends PageBase {mounted() {}@Prop({default: () => []})private tableData: any[]// ------------------------------分页-----------------------------------------@Prop({default: true})showPagination: boolean //是否需要展示分页@Prop({default: true})showSearch: boolean //是否需要搜索@Prop({default: true})showButton: boolean //是否需要搜索@Prop({default: 20})total: number //数据总数//分页@Prop({default: {total: 0,currentPage: 1,pageSize: 10}})tablePage: anyprivate currentPage: number = 1 //当前页数private pageSize: number = 10 //一页多少条数据private pageSizes: number[] = [10, 20, 30, 40, 50]private size: string = 'default'private background: boolean = falseprivate disabled: boolean = false// 处理页码大小private handleSizeChange = (val: number) => {console.log(val)this.onSizeChange(val)}// 当前页变动private handleCurrentChange = (val: number) => {console.log(val)this.onCurrentChange(val)}private selectionChange(rows: any[]) {if (rows.length > 0) {}// if (val.length > 0) {// ;(this.$refs.pTable as any).toggleRowSelection(val, true)// }this.onSelectedData(rows)}// 当选择项发生变化时会触发该事件@Emit('onSelectedData')private onSelectedData(data) {}private rowClickFn(data: any) {;(this.$refs.pTable as any).toggleRowSelection(data)this.getRowClickFn(data)}@Emit('getRowClickFn')private getRowClickFn(data: any) {}@Emit('onSizeChange')private onSizeChange(data: any) {}@Emit('onCurrentChange')private onCurrentChange(data: any) {}//这个解决了toggleRowSelection在dialog里用不了的隐患public toggleRowSelections(rows: any[]) {const table = this.$refs.pTable as anyif (table && table.toggleRowSelection) {rows.forEach((row) => {table.toggleRowSelection(row, true)})}}// ---------------------------------------------------------------------------
}
</script><style lang="scss" scoped>
.pageBox {width: 100%;height: 100%;padding: 30px;box-sizing: border-box;.searchBox {width: 100%;height: 100px;border-radius: 10px;margin-bottom: 10px;display: flex;flex-wrap: nowrap;align-items: center;justify-content: left;padding: 10px;box-sizing: border-box;box-shadow: 0px 4px 12px 0px rgba(138, 149, 163, 0.35);::v-deep .el-form-item.asterisk-left {margin: 0 10px 0 0;}}.contentBox {padding: 10px;box-sizing: border-box;.optionBox {width: 100%;height: 50px;display: flex;align-items: center;}.tableBox {width: 100%;}.paginationBox {height: 50px;width: 100%;display: flex;flex-wrap: nowrap;align-items: center;justify-content: right;}width: 100%;height: calc(100% - 130px);border-radius: 10px;box-shadow: 0px 4px 12px 0px rgba(138, 149, 163, 0.35);}
}
.demo-pagination-block + .demo-pagination-block {margin-top: 10px;
}
.demo-pagination-block .demonstration {margin-bottom: 16px;
}
</style>
相关文章:

用户管理页面(解决toggleRowSelection在dialog用不了的隐患,包含el-table的plus版本的组件)
新增/编辑/删除/分配角色,图片上传在此文章分类下另一个文章 1.重点分配角色: <template><!-- 客户资料 --><div class"pageBox"><elPlusTable :tableData"tableData" :tablePage"tablePage" onSi…...
打卡第35天:GPU训练以及类的Call方法
知识点回归: 1.CPU性能的查看:看架构代际、核心数、线程数 2.GPU性能的查看:看显存、看级别、看架构代际 3.GPU训练的方法:数据和模型移动到GPU device上 4.类的call方法:为什么定义前向传播时可以直接写作self.fc1(x)…...

Linux-GCC、makefile、GDB
GCC gcc -E test.c -o test.i预处理(-o指定文件名) gcc -S test.i -o test.s编译gcc -c test.s -o test.o汇编gcc test.o -o test链接(生成一个可执行程序的软连接) gcc test.c -o test一条指令可以完成以上所有内容 gcc *.c -I(大写的i) include由于在main.c中找不到当前文件…...

[MySQL初阶]MySQL(7) 表的内外连接
标题:[MySQL初阶]MySQL(7)表的内外连接 水墨不写bug 文章目录 一. 内连接 (INNER JOIN)二. 外连接 (OUTER JOIN)关键区别总结 三、 如何选择 在 MySQL 中,连接(JOIN)用于根据两个或多个表之间的相关列组合行。内连接(I…...
Spring Boot中Excel处理完全指南:从基础到高级实践
Excel处理基础知识 1.1 为什么需要在应用中处理Excel文件? 在企业应用开发中,Excel文件处理是一个非常常见的需求,主要用于以下场景: 数据导入:允许用户通过Excel上传批量数据到系统 数据导出:将系统数据…...
Windows下NVM的安装与使用
本文将介绍windows下nvm相关知识。 在不同的项目中可能会使用不同版本的Node.js,例如A项目中需要node>18;B项目中需要node>20。这时候就需要使用NVM切换不同的node版本。进而可以在同一台设备上使用多个node版本。 一、NVM是什么? n…...
Ubuntu挂起和休眠
Ubuntu挂起和休眠 1. 挂起(Suspend)2. 休眠(Hibernate)3. 混合挂起(Hybrid-Sleep)注意事项图形界面操作 在 Ubuntu 系统中,挂起(Suspend)和休眠(Hibernate&am…...

【R语言编程绘图-mlbench】
mlbench库简介 mlbench是一个用于机器学习的R语言扩展包,主要用于提供经典的基准数据集和工具,常用于算法测试、教学演示或研究场景。该库包含多个知名数据集,涵盖分类、回归、聚类等任务。 包含的主要数据集 BostonHousing 波士顿房价数据…...
云服务器部署Gin+gorm 项目 demo
更多个人笔记见: (注意点击“继续”,而不是“发现新项目”) github个人笔记仓库 https://github.com/ZHLOVEYY/IT_note gitee 个人笔记仓库 https://gitee.com/harryhack/it_note 个人学习,学习过程中还会不断补充&…...
MySQL数据一致性守护者:pt-table-checksum原理与实战全解析
MySQL数据一致性守护者:pt-table-checksum原理与实战全解析 在MySQL主从复制环境中,数据一致性是DBA和运维人员最关心的问题之一。主从数据不一致可能导致业务逻辑错误、报表数据失真甚至系统故障。Percona Toolkit中的pt-table-checksum工具正是为解决这一痛点而生,它能够…...

检索器组件深入学习与使用技巧 BaseRetriever 检索器基类
1. BaseRetriever 检索器基类 在 LangChain 中,传递一段 query 并返回与这段文本相关联文档的组件被称为 检索器,并且 LangChain 为所有检索器设计了一个基类——BaseRetriever,该类继承了 RunnableSerializable,所以该类是一个 …...
Unity——QFramework工具 AciontKit时序动作执行系统
AciontKit 是一个时序动作执行系统。 游戏中,动画的播放、延时、资源的异步加载、网络请求等,这些全部都是时序任务,而 ActionKit,可以把这些任务全部整合在一起,使用统一的 API,来对他们的执行进行计划。…...

【Doris基础】Doris中的Replica详解:Replica原理、架构
目录 1 Replica基础概念 1.1 什么是Replica 1.2 Doris中的副本类型 2 Doris副本架构设计 2.1 副本分布机制 2.2 副本一致性模型 3 副本生命周期管理 3.1 副本创建流程 3.2 副本恢复机制 4 副本读写流程详解 4.1 写入流程与副本同步 4.2 查询流程与副本选择 5 副本…...

【中国·广州】第三届信号处理与智能计算国际学术会议 (SPIC2025) 即将开启
第三届信号处理与智能计算国际学术会议 (SPIC2025) 即将开启 在信息技术飞速发展的当下,信号处理与智能计算作为前沿科技领域,正深刻改变着我们的生活与产业格局。为汇聚全球顶尖智慧,推动该领域进一步突破,第三届信号处理与智能…...

Android12 Launcher3显示所有应用列表
Android12 Launcher3显示所有应用列表 1.前言: 最近在Android12Rom定制时需要显示所有桌面应用的图标,并且不能去掉抽屉,在手机上面抽屉和所有应该列表是两种不同模式,用户基可以自行选择,但是在自定义的launcher中这…...
24.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--单体转微服务--认证微服务
SP.IdentityService 项目为微服务架构中的核心认证中心,采用 OpenIddict 框架实现 OAuth2.0 和 OpenID Connect 协议,提供完整的身份认证和授权解决方案。项目集成了 ASP.NET Core Identity 框架,实现了用户管理、角色权限控制等基础功能&…...
基于React Native开发鸿蒙新闻类应用的实战开发笔记
以下为基于React Native开发鸿蒙新闻资讯类应用的实战开发笔记,结合架构特性与踩坑经验,重点记录关键实现方案和技术决策: 一、环境搭建与工程初始化(关键步骤复盘) Node.js版本锁定 必须使用Node 18&…...
[Java 基础]运算符,将盒子套起来
在 Java 中,运算符(Operator)用于执行特定的操作,例如数学计算、赋值、比较等。运算符是 Java 语言的重要组成部分,能够帮助我们高效地操作数据。 1. 算术运算符 运算符说明示例结果加法5 38-减法5 - 32*乘法5 * 31…...

智能快递地址解析接口如何用PHP调用?
一、什么是智能快递地址解析接口 随着互联网技术的普及和电子商务的迅猛发展,网购已成为现代人日常生活的重要组成部分。然而,在这个便捷的背后,一个看似不起眼却影响深远的问题正悄然浮现——用户填写的快递地址格式混乱、信息不全甚至错漏…...

华为OD机试真题——模拟消息队列(2025B卷:100分)Java/python/JavaScript/C++/C语言/GO六种最佳实现
2025 B卷 100分 题型 本文涵盖详细的问题分析、解题思路、代码实现、代码详解、测试用例以及综合分析; 并提供Java、python、JavaScript、C++、C语言、GO六种语言的最佳实现方式! 2025华为OD真题目录+全流程解析/备考攻略/经验分享 华为OD机试真题《模拟消息队列》: 目录 题…...
c# 显示正在运行的线程数
在 C# 中,若想获取当前进程正在运行的线程数,可以使用 System.Diagnostics 命名空间中的 Process 类来实现。该方法适用于 Windows 平台,并能够获取当前进程的线程信息,包括线程总数和运行中的线程数量。 ✅ 方法一:使…...
MySQL 日志数据同步的详细教程
以下是 MySQL 日志数据同步的详细教程,主要介绍基于二进制日志(binlog)的主从复制和基于 GTID 的高级同步方案: 一、MySQL 二进制日志(binlog)同步基础 1. 二进制日志原理 binlog 是 MySQL 的事务性日志&am…...
2025 Java面试大全技术文章(面试题1)
数据类型与包装类 问题:Java中基本数据类型与包装类的区别是什么?自动装箱与拆箱的底层原理? 答案: 基本数据类型(如int、double)直接存储值,包装类(如Integer、Double)…...
docker 中 什么是「卷」?(Volume)
🗃️ 什么是「卷」?(Volume) 「卷」就是 Docker 里用来“保存数据”的一块空间,就像是一个外接硬盘,或者一个 USB 闪存。 容器本身是临时的,你一删它,它的数据也跟着没了。但卷是用…...
三维可视化和实时数据处理对前端性能要求以及优化渲染效率
在三维可视化(如 Three.js 场景)和实时数据处理(如每秒数百条设备状态更新)场景中,前端性能优化是确保用户体验的核心挑战。以下结合技术原理与行业实践,详细说明Web Workers和虚拟 DOM的优化机制ÿ…...

基于VU37P的高性能采集板卡
基于VU37P的高性能采集板卡是一款最大可提供20路ADC接收通道的高性能采集板卡。每路A/D通道支持1GS/s的采样率,分辨率为14bit,模拟输入带宽可达500MHz,交流耦合,输入阻抗50欧姆。 产品简介 可提供20路ADC接收通道的高性能采集板…...

2025-05-31 Python深度学习10——模型训练流程
文章目录 1 数据准备1.1 下载与预处理1.2 数据加载 2 模型构建2.1 自定义 CNN 模型2.2 GPU加速 3 训练配置3.1 损失函数3.2 优化器3.3 训练参数 4 训练循环4.1 训练模式 (model.train())4.2 评估模式 (model.eval()) 5 模型验证 本文环境: Pycharm 2025.1Python 3.1…...
卷积神经网络(CNN)、YOLO和人脸识别之间的关系
核心关系图解 TEXT 摄像头图像 → [YOLO:人脸检测] → 定位人脸位置 → [CNN:特征提取] → 人脸特征向量 → [人脸识别系统] → 身份匹配 通俗比喻 想象你在一个拥挤的火车站找人: YOLO 是你的"快速扫描眼": 一眼扫…...

K8S StatefulSet 快速开始
其实这篇文章的梗概已经写了很久了,中间我小孩出生了,从此人间多了一份牵挂。抽出一些时间去办理新生儿相关手续。初为人父确实艰辛,就像学技术一样,都需要有极大的耐心,付出很多的时间。 一、引子 1.1、独立的存储 …...
重新测试deepseek Jakarta EE 10编程能力
听说deepseek做了一个小更新,我重新测试了一下Jakarta EE 10编程能力;有点进步,遗漏的功能比以前少了。 采用Jakarta EE 10 编写员工信息表维护表,包括员工查询与搜索、员工列表、新增员工、删除员工,修改员工…...