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

用户管理页面(解决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版本的组件)

新增/编辑/删除/分配角色&#xff0c;图片上传在此文章分类下另一个文章 1.重点分配角色&#xff1a; <template><!-- 客户资料 --><div class"pageBox"><elPlusTable :tableData"tableData" :tablePage"tablePage" onSi…...

打卡第35天:GPU训练以及类的Call方法

知识点回归&#xff1a; 1.CPU性能的查看&#xff1a;看架构代际、核心数、线程数 2.GPU性能的查看&#xff1a;看显存、看级别、看架构代际 3.GPU训练的方法&#xff1a;数据和模型移动到GPU device上 4.类的call方法&#xff1a;为什么定义前向传播时可以直接写作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) 表的内外连接

标题&#xff1a;[MySQL初阶]MySQL(7)表的内外连接 水墨不写bug 文章目录 一. 内连接 (INNER JOIN)二. 外连接 (OUTER JOIN)关键区别总结 三、 如何选择 在 MySQL 中&#xff0c;连接&#xff08;JOIN&#xff09;用于根据两个或多个表之间的相关列组合行。内连接&#xff08;I…...

Spring Boot中Excel处理完全指南:从基础到高级实践

Excel处理基础知识 1.1 为什么需要在应用中处理Excel文件&#xff1f; 在企业应用开发中&#xff0c;Excel文件处理是一个非常常见的需求&#xff0c;主要用于以下场景&#xff1a; 数据导入&#xff1a;允许用户通过Excel上传批量数据到系统 数据导出&#xff1a;将系统数据…...

Windows下NVM的安装与使用

本文将介绍windows下nvm相关知识。 在不同的项目中可能会使用不同版本的Node.js&#xff0c;例如A项目中需要node>18&#xff1b;B项目中需要node>20。这时候就需要使用NVM切换不同的node版本。进而可以在同一台设备上使用多个node版本。 一、NVM是什么&#xff1f; n…...

Ubuntu挂起和休眠

Ubuntu挂起和休眠 1. 挂起&#xff08;Suspend&#xff09;2. 休眠&#xff08;Hibernate&#xff09;3. 混合挂起&#xff08;Hybrid-Sleep&#xff09;注意事项图形界面操作 在 Ubuntu 系统中&#xff0c;挂起&#xff08;Suspend&#xff09;和休眠&#xff08;Hibernate&am…...

【R语言编程绘图-mlbench】

mlbench库简介 mlbench是一个用于机器学习的R语言扩展包&#xff0c;主要用于提供经典的基准数据集和工具&#xff0c;常用于算法测试、教学演示或研究场景。该库包含多个知名数据集&#xff0c;涵盖分类、回归、聚类等任务。 包含的主要数据集 BostonHousing 波士顿房价数据…...

云服务器部署Gin+gorm 项目 demo

更多个人笔记见&#xff1a; &#xff08;注意点击“继续”&#xff0c;而不是“发现新项目”&#xff09; github个人笔记仓库 https://github.com/ZHLOVEYY/IT_note gitee 个人笔记仓库 https://gitee.com/harryhack/it_note 个人学习&#xff0c;学习过程中还会不断补充&…...

MySQL数据一致性守护者:pt-table-checksum原理与实战全解析

MySQL数据一致性守护者:pt-table-checksum原理与实战全解析 在MySQL主从复制环境中,数据一致性是DBA和运维人员最关心的问题之一。主从数据不一致可能导致业务逻辑错误、报表数据失真甚至系统故障。Percona Toolkit中的pt-table-checksum工具正是为解决这一痛点而生,它能够…...

检索器组件深入学习与使用技巧 BaseRetriever 检索器基类

1. BaseRetriever 检索器基类 在 LangChain 中&#xff0c;传递一段 query 并返回与这段文本相关联文档的组件被称为 检索器&#xff0c;并且 LangChain 为所有检索器设计了一个基类——BaseRetriever&#xff0c;该类继承了 RunnableSerializable&#xff0c;所以该类是一个 …...

Unity——QFramework工具 AciontKit时序动作执行系统

AciontKit 是一个时序动作执行系统。 游戏中&#xff0c;动画的播放、延时、资源的异步加载、网络请求等&#xff0c;这些全部都是时序任务&#xff0c;而 ActionKit&#xff0c;可以把这些任务全部整合在一起&#xff0c;使用统一的 API&#xff0c;来对他们的执行进行计划。…...

【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) 即将开启 在信息技术飞速发展的当下&#xff0c;信号处理与智能计算作为前沿科技领域&#xff0c;正深刻改变着我们的生活与产业格局。为汇聚全球顶尖智慧&#xff0c;推动该领域进一步突破&#xff0c;第三届信号处理与智能…...

Android12 Launcher3显示所有应用列表

Android12 Launcher3显示所有应用列表 1.前言&#xff1a; 最近在Android12Rom定制时需要显示所有桌面应用的图标&#xff0c;并且不能去掉抽屉&#xff0c;在手机上面抽屉和所有应该列表是两种不同模式&#xff0c;用户基可以自行选择&#xff0c;但是在自定义的launcher中这…...

24.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--单体转微服务--认证微服务

SP.IdentityService 项目为微服务架构中的核心认证中心&#xff0c;采用 OpenIddict 框架实现 OAuth2.0 和 OpenID Connect 协议&#xff0c;提供完整的身份认证和授权解决方案。项目集成了 ASP.NET Core Identity 框架&#xff0c;实现了用户管理、角色权限控制等基础功能&…...

基于React Native开发鸿蒙新闻类应用的实战开发笔记

以下为基于React Native开发鸿蒙新闻资讯类应用的实战开发笔记&#xff0c;结合架构特性与踩坑经验&#xff0c;重点记录关键实现方案和技术决策&#xff1a; 一、环境搭建与工程初始化&#xff08;关键步骤复盘&#xff09; ​​Node.js版本锁定​​ 必须使用​​Node 18​​&…...

[Java 基础]运算符,将盒子套起来

在 Java 中&#xff0c;运算符&#xff08;Operator&#xff09;用于执行特定的操作&#xff0c;例如数学计算、赋值、比较等。运算符是 Java 语言的重要组成部分&#xff0c;能够帮助我们高效地操作数据。 1. 算术运算符 运算符说明示例结果加法5 38-减法5 - 32*乘法5 * 31…...

智能快递地址解析接口如何用PHP调用?

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

华为OD机试真题——模拟消息队列(2025B卷:100分)Java/python/JavaScript/C++/C语言/GO六种最佳实现

2025 B卷 100分 题型 本文涵盖详细的问题分析、解题思路、代码实现、代码详解、测试用例以及综合分析; 并提供Java、python、JavaScript、C++、C语言、GO六种语言的最佳实现方式! 2025华为OD真题目录+全流程解析/备考攻略/经验分享 华为OD机试真题《模拟消息队列》: 目录 题…...

c# 显示正在运行的线程数

在 C# 中&#xff0c;若想获取当前进程正在运行的线程数&#xff0c;可以使用 System.Diagnostics 命名空间中的 Process 类来实现。该方法适用于 Windows 平台&#xff0c;并能够获取当前进程的线程信息&#xff0c;包括线程总数和运行中的线程数量。 ✅ 方法一&#xff1a;使…...

MySQL 日志数据同步的详细教程

以下是 MySQL 日志数据同步的详细教程&#xff0c;主要介绍基于二进制日志&#xff08;binlog&#xff09;的主从复制和基于 GTID 的高级同步方案&#xff1a; 一、MySQL 二进制日志&#xff08;binlog&#xff09;同步基础 1. 二进制日志原理 binlog 是 MySQL 的事务性日志&am…...

2025 Java面试大全技术文章(面试题1)

数据类型与包装类 问题&#xff1a;Java中基本数据类型与包装类的区别是什么&#xff1f;自动装箱与拆箱的底层原理&#xff1f; 答案&#xff1a; 基本数据类型&#xff08;如int、double&#xff09;直接存储值&#xff0c;包装类&#xff08;如Integer、Double&#xff09;…...

docker 中 什么是「卷」?(Volume)

&#x1f5c3;️ 什么是「卷」&#xff1f;&#xff08;Volume&#xff09; 「卷」就是 Docker 里用来“保存数据”的一块空间&#xff0c;就像是一个外接硬盘&#xff0c;或者一个 USB 闪存。 容器本身是临时的&#xff0c;你一删它&#xff0c;它的数据也跟着没了。但卷是用…...

三维可视化和实时数据处理对前端性能要求以及优化渲染效率

在三维可视化&#xff08;如 Three.js 场景&#xff09;和实时数据处理&#xff08;如每秒数百条设备状态更新&#xff09;场景中&#xff0c;前端性能优化是确保用户体验的核心挑战。以下结合技术原理与行业实践&#xff0c;详细说明Web Workers和虚拟 DOM的优化机制&#xff…...

基于VU37P的高性能采集板卡

基于VU37P的高性能采集板卡是一款最大可提供20路ADC接收通道的高性能采集板卡。每路A/D通道支持1GS/s的采样率&#xff0c;分辨率为14bit&#xff0c;模拟输入带宽可达500MHz&#xff0c;交流耦合&#xff0c;输入阻抗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 模型验证 本文环境&#xff1a; Pycharm 2025.1Python 3.1…...

卷积神经网络(CNN)、YOLO和人脸识别之间的关系

核心关系图解 TEXT 摄像头图像 → [YOLO&#xff1a;人脸检测] → 定位人脸位置 → [CNN&#xff1a;特征提取] → 人脸特征向量 → [人脸识别系统] → 身份匹配 通俗比喻 想象你在一个拥挤的火车站找人&#xff1a; YOLO 是你的"快速扫描眼"&#xff1a; 一眼扫…...

K8S StatefulSet 快速开始

其实这篇文章的梗概已经写了很久了&#xff0c;中间我小孩出生了&#xff0c;从此人间多了一份牵挂。抽出一些时间去办理新生儿相关手续。初为人父确实艰辛&#xff0c;就像学技术一样&#xff0c;都需要有极大的耐心&#xff0c;付出很多的时间。 一、引子 1.1、独立的存储 …...

重新测试deepseek Jakarta EE 10编程能力

听说deepseek做了一个小更新&#xff0c;我重新测试了一下Jakarta EE 10编程能力&#xff1b;有点进步&#xff0c;遗漏的功能比以前少了。 采用Jakarta EE 10 编写员工信息表维护表&#xff0c;包括员工查询与搜索、员工列表、新增员工、删除员工&#xff0c;修改员工&#xf…...