用户管理页面(解决toggleRowSelection在dialog用不了的隐患,包含el-table的plus版本的组件)

article/2025/6/8 9:38:09

新增/编辑/删除/分配角色,图片上传在此文章分类下另一个文章

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>


http://www.hkcw.cn/article/icPiQdiJad.shtml

相关文章

构建基于深度学习的人体姿态估计系统 数据预处理到模型训练、评估和部署 _如何利用人体姿态识别估计数据集_数据进行人体姿态估计研究的建议Human3.6M

构建基于深度学习的人体姿态估计系统 数据预处理到模型训练、评估和部署 如何利用人体姿态识别估计数据集_数据进行人体姿态估计研究的建议__ _人体姿态估计数据集:human3.6m w文章内容及代码仅供参考 By. subject: SubjectS1 : Videos Segments Features Depth Scanner Poses…

PyTorch——非线性激活(5)

非线性激活函数的作用是让神经网络能够理解更复杂的模式和规律。如果没有非线性激活函数&#xff0c;神经网络就只能进行简单的加法和乘法运算&#xff0c;没法处理复杂的问题。 非线性变化的目的就是给我们的网络当中引入一些非线性特征 Relu 激活函数 Relu处理图像 # 导入必…

极智项目 | 基于PyQT+Whisper实现的语音识别软件设计

这是一个基于OpenAI的Whisper模型的语音识别应用程序&#xff0c;使用PyQt5构建了简洁直观的用户界面。该应用支持多语言识别&#xff0c;特别优化了中文识别体验。 项目下载&#xff1a;链接 功能特点 简洁现代的深色主题界面支持多语言识别&#xff08;中文、英语、日语等…

【大模型:知识图谱】--1.py2neo连接图数据库neo4j

【图数据库】--Neo4j 安装_neo4j安装-CSDN博客 需要打开图数据库Neo4j&#xff0c; neo4j console 目录 1.图数据库--连接 2.图数据库--操作 2.1.创建节点 2.2.删除节点 2.3.增改属性 2.4.建立关系 2.5.查询节点 2.6.查询关系 3.图数据库--实例 1.图数据库--连接 fr…

关于线缆行业设备数据采集异构问题的解决

通信线缆制造设备 异构设备协议情况 设备具体型号和关键参数数据传输协议拉丝机LW-1-6/560 塑料扁丝拉丝机&#xff08;螺杆120mm&#xff09;进料直径6.5mm→出料2mm 线速245m/min&#xff0c;功率30kWModbus RTU&#xff08;RS485总线&#xff09;对绞机QC-500C 绞弓转速0-…

电力设备故障预测网关技术方案——基于EFISH-SCB-RK3588的国产化替代实践

一、国产化替代战略背景 行业痛点分析 传统x86方案&#xff08;赛扬N100/N150&#xff09;存在单线程性能瓶颈&#xff08;SPECint2006仅15.2分&#xff09;进口芯片供应链风险&#xff08;Intel产品生命周期通常仅3-5年&#xff09;工业现场总线支持不足&#xff08;需外扩CA…

基于SpringBoot的“嗨玩旅游”网站设计与实现(源码+定制+开发)嗨玩旅游平台开发:景点展示与个性化推荐系统(SpringBoot)

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

网络安全问题及对策研究

摘 要 网络安全问题一直是近年来社会乃至全世界十分关注的重要性问题&#xff0c;网络关乎着我们的生活&#xff0c;政治&#xff0c;经济等多个方面&#xff0c;致力解决网络安全问题以及给出行之有效的安全策略是网络安全领域的一大目标。 本论文简述了课题的开发背景&…

Modbus转Ethernet IP网关助力罗克韦尔PLC数据交互

在工业自动化领域&#xff0c;Modbus协议是一种广泛应用的串行通信协议&#xff0c;它定义了主站和从站之间的通信规则和数据格式。罗克韦尔PLC是一种可编程的逻辑控制器&#xff0c;通过Modbus协议实现与其他设备之间的数据交互。然而&#xff0c;随着以太网技术的普及和发展&…

SpringBoot 数据库导入导出 Xlsx文件的导入与导出 全量导出 数据库导出表格 数据处理 外部数据

介绍 poi-ooxml 是 Apache POI 项目中的一个库&#xff0c;专门用于处理 Microsoft Office 2007 及以后版本的文件&#xff0c;特别是 Excel 文件&#xff08;.xlsx 格式&#xff09;和 Word 文件&#xff08;.docx 格式&#xff09;。 在管理系统中需要对数据库的数据进行导…

EagleTrader采访|在市场中修行的交易之道与实战反思

在交易世界的洪流中&#xff0c;真正让人敬佩的不是一时的高收益&#xff0c;而是对规则的敬畏与长期自我修正的能力。来自EagleTrader的交易员罗秋林&#xff0c;正是这样一位在实战中历练出的“老兵”。 七八年时间&#xff0c;他从爆仓阴影走出&#xff0c;如今选择通过Eag…

OpenCV CUDA模块霍夫变换------在 GPU 上执行概率霍夫变换检测图像中的线段端点类cv::cuda::HoughSegmentDetector

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 cv::cuda::HoughSegmentDetector 是 OpenCV 的 CUDA 模块中一个非常重要的类&#xff0c;它用于在 GPU 上执行 概率霍夫变换&#xff08;Probabi…

MybatisPlus--核心功能--service接口

Service接口 基本用法 MyBatisPlus同时也提供了service接口&#xff0c;继承后一些基础的增删改查的service代码&#xff0c;也不需要去书写。 接口名为Iservice&#xff0c;而Iservice也继承了IRepository&#xff0c;这里提供的方法跟BaseMapper相比只多不少&#xff0c;整…

Silky-CTF: 0x02靶场

Silky-CTF: 0x02 来自 <Silky-CTF: 0x02 ~ VulnHub> 1&#xff0c;将两台虚拟机网络连接都改为NAT模式 2&#xff0c;攻击机上做namp局域网扫描发现靶机 nmap -sn 192.168.23.0/24 那么攻击机IP为192.168.23.128&#xff0c;靶场IP192.168.23.131 3&#xff0c;对靶机进…

图片组件|纯血鸿蒙组件库AUI

摘要&#xff1a; 图片组件(A_Image)&#xff1a;可设置图片地址、图片宽度、图片高度、圆角类型及是否显示外框线。圆角类型支持普通圆角、圆形及无圆角。 一、组件调用方式 1.极简调用 只需要输入A_Image&#xff0c;然后给src&#xff08;图片地址&#xff09;属性赋值即可…

tGSSA-LSTM多输入回归|改进麻雀优化-长短期记忆神经网络|Matlab回归通用

目录 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 亮点与优势&#xff1a; 二、实际运行效果&#xff1a; 三、方法原理介绍&#xff1a; 四、完整程序下载&#xff1a; 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 本代码基于Matlab平台编译…

【吾爱】逆向实战crackme160破解记录(二)

前言 最近在拿吾爱上的crackme程序练练手&#xff0c;发现论坛上已经有pk8900总结好的160个crackme&#xff0c;非常方便&#xff0c;而且有很多厉害的前辈已经写好经验贴和方法了&#xff0c;我这里只是做一下自己练习的记录&#xff0c;欢迎讨论学习&#xff0c;感谢吾爱论坛…

C# Onnx 动漫人物人脸检测

目录 效果 模型信息 项目 代码 下载 参考 效果 模型信息 Model Properties ------------------------- stride&#xff1a;32 names&#xff1a;{0: face} --------------------------------------------------------------- Inputs ------------------------- name&am…

使用cmd命令行创建数据库和表-简单步骤记录

前提&#xff1a; 已安装MySQL 步骤&#xff1a; 1.WinR&#xff0c;回车&#xff0c;输入cmd&#xff0c;回车 2.输入 mysql -u root -p 后&#xff0c;输入自己的密码&#xff0c;看到welcome等字样就是成功登录了MySQL 3.创建数据库 create database success; &#xff0…

Centos7使用rpm升级glibc2.28

Centos7使用rpm升级glibc2.28 检查glibc版本下载glibc2.28的rpm包使用rpm包升级到glibc-2.28结果验证 检查glibc版本 ldd --version下载glibc2.28的rpm包 参考&#xff1a; https://www.cnblogs.com/caya-yuan/p/10561439.html 下载 glibc、make 的 feroda29(fc29)系统 rpm包…