vue项目之菜单管理项目实现
1.背景
2.菜单导航实现
代码:


<template>
<el-breadcrumb separator-class="el-icon-arrow-right">
<el-breadcrumb-item :to="{ path: '/home' }">首页</el-breadcrumb-item>
<el-breadcrumb-item>用户管理</el-breadcrumb-item>
<el-breadcrumb-item>用户列表列表</el-breadcrumb-item>
</el-breadcrumb>
</template> <script>
export default {
name: "User"
}
</script> <style scoped> </style>
3.实现搜索输入框
代码:


<template>
<div>
<!-- 导航区域-->
<el-breadcrumb separator-class="el-icon-arrow-right">
<el-breadcrumb-item :to="{ path: '/home' }">首页</el-breadcrumb-item>
<el-breadcrumb-item>用户管理</el-breadcrumb-item>
<el-breadcrumb-item>用户列表列表</el-breadcrumb-item>
</el-breadcrumb> <!--卡片视图区-->
<el-card>
<el-row :gutter="20">
<el-col :span="8">
<el-input placeholder="请输入查询的用户名">
<el-button slot="append" icon="el-icon-search"></el-button>
</el-input>
</el-col>
<el-col :span="4">
<el-button type="primary">添加</el-button>
</el-col> </el-row> </el-card>
</div> </template> <script>
export default {
name: "User"
}
</script> <style scoped> </style>
4.简单列表显示


<template>
<div>
<!-- 导航区域-->
<el-breadcrumb separator-class="el-icon-arrow-right">
<el-breadcrumb-item :to="{ path: '/home' }">首页</el-breadcrumb-item>
<el-breadcrumb-item>用户管理</el-breadcrumb-item>
<el-breadcrumb-item>用户列表列表</el-breadcrumb-item>
</el-breadcrumb> <!--卡片视图区-->
<el-card>
<el-row :gutter="20">
<el-col :span="8">
<el-input placeholder="请输入查询的用户名">
<el-button slot="append" icon="el-icon-search"></el-button>
</el-input>
</el-col>
<el-col :span="4">
<el-button type="primary">添加</el-button>
</el-col>
</el-row>
</el-card> <!-- 表格区-->
<el-table
:data="tableData"
stripe
border
style="width: 100%">
<el-table-column prop="username" label="用户名" ></el-table-column>
<el-table-column prop="role_name" label="角色" ></el-table-column>
<el-table-column prop="mobile" label="手机" ></el-table-column>
<el-table-column prop="email" label="邮箱" ></el-table-column>
<el-table-column prop="mg_state" label="状态" ></el-table-column>
<el-table-column label="操作" ></el-table-column>
</el-table>
</div>
</template> <script>
export default {
name: "User",
created() {
this.getTableData()
},
data() {
return {
// 数据列表
tableData: [],
// 总共条数
total:0,
// 查询对象
queryObj: {
query: '',
pagenum: 1,
pagesize: 10
}
}
},
methods: {
// 获取列表数据
async getTableData() {
const {data: result} = await this.$http.get('users', {params: this.queryObj})
console.log(result)
if (result.meta.status !== 200) return this.$message.error(result.meta.msg)
this.tableData = result.data.users
this.total= result.data.total
}
}
}
</script> <style scoped> </style>
5.编号显示
6.状态显示
代码:


<template>
<div>
<!-- 导航区域-->
<el-breadcrumb separator-class="el-icon-arrow-right">
<el-breadcrumb-item :to="{ path: '/home' }">首页</el-breadcrumb-item>
<el-breadcrumb-item>用户管理</el-breadcrumb-item>
<el-breadcrumb-item>用户列表列表</el-breadcrumb-item>
</el-breadcrumb> <!--卡片视图区-->
<el-card>
<el-row :gutter="20">
<el-col :span="8">
<el-input placeholder="请输入查询的用户名">
<el-button slot="append" icon="el-icon-search"></el-button>
</el-input>
</el-col>
<el-col :span="4">
<el-button type="primary">添加</el-button>
</el-col>
</el-row>
</el-card> <!-- 表格区-->
<el-table
:data="tableData"
stripe
border
style="width: 100%">
<el-table-column label="序号" type="index"></el-table-column>
<el-table-column prop="username" label="用户名" ></el-table-column>
<el-table-column prop="role_name" label="角色" ></el-table-column>
<el-table-column prop="mobile" label="手机" ></el-table-column>
<el-table-column prop="email" label="邮箱" ></el-table-column>
<el-table-column label="状态" >
<template slot-scope="scope">
<el-switch v-model="scope.row.mg_state" >
</el-switch>
</template>
</el-table-column>
<el-table-column label="操作" ></el-table-column>
</el-table>
</div>
</template> <script>
export default {
name: "User",
created() {
this.getTableData()
},
data() {
return {
// 数据列表
tableData: [],
// 总共条数
total:0,
// 查询对象
queryObj: {
query: '',
pagenum: 1,
pagesize: 10
}
}
},
methods: {
// 获取列表数据
async getTableData() {
const {data: result} = await this.$http.get('users', {params: this.queryObj})
console.log(result)
if (result.meta.status !== 200) return this.$message.error(result.meta.msg)
this.tableData = result.data.users
this.total= result.data.total
}
}
}
</script> <style scoped> </style>
7.操作栏按钮显示
8.按钮提示
9.分页实现
代码:


<template>
<div>
<!-- 导航区域-->
<el-breadcrumb separator-class="el-icon-arrow-right">
<el-breadcrumb-item :to="{ path: '/home' }">首页</el-breadcrumb-item>
<el-breadcrumb-item>用户管理</el-breadcrumb-item>
<el-breadcrumb-item>用户列表列表</el-breadcrumb-item>
</el-breadcrumb> <!--卡片视图区-->
<el-card>
<!-- 条件查询-->
<el-row :gutter="20">
<el-col :span="8">
<el-input placeholder="请输入查询的用户名">
<el-button slot="append" icon="el-icon-search"></el-button>
</el-input>
</el-col>
<el-col :span="4">
<el-button type="primary">添加</el-button>
</el-col>
</el-row>
<!-- 表格区-->
<el-table
:data="tableData"
stripe
border
style="width: 100%">
<el-table-column label="序号" type="index"></el-table-column>
<el-table-column prop="username" label="用户名"></el-table-column>
<el-table-column prop="role_name" label="角色"></el-table-column>
<el-table-column prop="mobile" label="手机"></el-table-column>
<el-table-column prop="email" label="邮箱"></el-table-column>
<el-table-column label="状态">
<template slot-scope="scope">
<el-switch v-model="scope.row.mg_state">
</el-switch>
</template>
</el-table-column>
<el-table-column label="操作">
<el-button type="primary" icon="el-icon-edit" size="mini"></el-button>
<el-button type="danger" icon="el-icon-delete" size="mini"></el-button>
<!-- 按钮文字提示-->
<el-tooltip class="item" effect="dark" content="权限修改" placement="top" :enterable="false">
<el-button type="warning" icon="el-icon-star-off" size="mini"></el-button>
</el-tooltip>
</el-table-column>
</el-table>
<!-- 分页-->
<el-pagination
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="pagenum"
:page-sizes="[2, 3, 10, 20]"
:page-size="pagesize"
layout="total, sizes, prev, pager, next, jumper"
:total="total">
</el-pagination>
</el-card>
</div>
</template> <script>
export default {
name: "User",
created() {
this.getTableData()
},
data() {
return {
// 数据列表
tableData: [],
// 总共条数
total: 0,
// 查询对象
queryObj: {
query: '',
pagenum: 1,
pagesize: 10
}
}
},
methods: {
// 获取列表数据
async getTableData() {
const {data: result} = await this.$http.get('users', {params: this.queryObj})
console.log(result)
if (result.meta.status !== 200) return this.$message.error(result.meta.msg)
this.tableData = result.data.users
this.total = result.data.total
},
// 每页显示条数改变
handleSizeChange(newSize){
this.queryObj.pagesize=newSize
this.getTableData()
},
// 当前页改变
handleCurrentChange(newPage){
this.queryObj.pagenum=newPage
this.getTableData()
}
}
}
</script> <style scoped> </style>
10.高级查询条件实现
1.绑定查询参数
2.点击图标触发事件
3.添加清除数据库按钮
4.清除数据时触发查询
11.状态修改实现


// 状态改变是触发
async changeState(rowObj) {
const {data: result} = await this.$http.put(`users/${rowObj.id}/state/${rowObj.mg_state}`)
console.log(result)
if (result.meta.status !== 200) {
// 重置状态
rowObj.mg_state = !rowObj.mg_state
// 消息提示
return this.$message.error(result.meta.msg)
}
// 状态修改成功
return this.$message.success('状态修改成功')
}
12.删除实现
1.确认是否删除
2.执行删除
代码:


<template>
<div>
<!-- 导航区域-->
<el-breadcrumb separator-class="el-icon-arrow-right">
<el-breadcrumb-item :to="{ path: '/home' }">首页</el-breadcrumb-item>
<el-breadcrumb-item>用户管理</el-breadcrumb-item>
<el-breadcrumb-item>用户列表列表</el-breadcrumb-item>
</el-breadcrumb> <!--卡片视图区-->
<el-card>
<!-- 条件查询-->
<el-row :gutter="20">
<el-col :span="8">
<el-input v-model="queryObj.query" placeholder="请输入查询的用户名" @clear="getTableData" clearable>
<el-button slot="append" icon="el-icon-search" @click="getTableData"></el-button>
</el-input>
</el-col>
<el-col :span="4">
<el-button type="primary">添加</el-button>
</el-col>
</el-row>
<!-- 表格区-->
<el-table
:data="tableData"
stripe
border
style="width: 100%">
<el-table-column label="序号" type="index"></el-table-column>
<el-table-column prop="username" label="用户名"></el-table-column>
<el-table-column prop="role_name" label="角色"></el-table-column>
<el-table-column prop="mobile" label="手机"></el-table-column>
<el-table-column prop="email" label="邮箱"></el-table-column>
<el-table-column label="状态">
<template slot-scope="scope">
<el-switch v-model="scope.row.mg_state" @change="changeState(scope.row)">
</el-switch>
</template>
</el-table-column>
<el-table-column label="操作">
<template slot-scope="scope">
<!-- 修改-->
<el-button type="primary" icon="el-icon-edit" size="mini"></el-button>
<!-- 删除-->
<el-button type="danger" icon="el-icon-delete" size="mini" @click="deleteById(scope.row.id)"></el-button>
<!-- 按钮文字提示-->
<el-tooltip class="item" effect="dark" content="权限修改" placement="top" :enterable="false">
<!-- 权限修改-->
<el-button type="warning" icon="el-icon-star-off" size="mini"></el-button>
</el-tooltip>
</template>
</el-table-column>
</el-table>
<!-- 分页-->
<el-pagination
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="pagenum"
:page-sizes="[2, 3, 10, 20]"
:page-size="pagesize"
layout="total, sizes, prev, pager, next, jumper"
:total="total">
</el-pagination>
</el-card>
</div>
</template> <script>
export default {
name: "User",
created() {
this.getTableData()
},
data() {
return {
// 数据列表
tableData: [],
// 总共条数
total: 0,
// 查询对象
queryObj: {
query: '',
pagenum: 1,
pagesize: 10
}
}
},
methods: {
// 获取列表数据
async getTableData() {
const {data: result} = await this.$http.get('users', {params: this.queryObj})
console.log(result)
if (result.meta.status !== 200) return this.$message.error(result.meta.msg)
this.tableData = result.data.users
this.total = result.data.total
},
// 每页显示条数改变
handleSizeChange(newSize) {
this.queryObj.pagesize = newSize
this.getTableData()
},
// 当前页改变
handleCurrentChange(newPage) {
this.queryObj.pagenum = newPage
this.getTableData()
},
// 状态改变是触发
async changeState(rowObj) {
const {data: result} = await this.$http.put(`users/${rowObj.id}/state/${rowObj.mg_state}`)
console.log(result)
if (result.meta.status !== 200) {
// 重置状态
rowObj.mg_state = !rowObj.mg_state
// 消息提示
return this.$message.error(result.meta.msg)
}
// 状态修改成功
return this.$message.success('状态修改成功')
},
// 删除用户
async deleteById(id) {
// 确认是否删除
const confirmResult = await this.$confirm('此操作将永久删除该用户, 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).catch(err => err);
// 如果用户确认删除,则返回值为字符串 confirm
// 如果用户取消了删除,则返回值为字符串 cancel
if (confirmResult !== 'confirm') return this.$message.error('取消删除') const {data: result} = await this.$http.delete(`users/` + id)
console.log(result)
if (result.meta.status !== 200) {
// 消息提示
return this.$message.error(result.meta.msg)
}
// 重新查询列表
this.getTableData()
// 删除成功
return this.$message.success('删除成功')
}
}
}
</script> <style scoped> </style>
13.新增实现
1.弹出新增对话框
2.执行新增
3.回到列表
代码:


<template>
<div>
<!-- 导航区域-->
<el-breadcrumb separator-class="el-icon-arrow-right">
<el-breadcrumb-item :to="{ path: '/home' }">首页</el-breadcrumb-item>
<el-breadcrumb-item>用户管理</el-breadcrumb-item>
<el-breadcrumb-item>用户列表列表</el-breadcrumb-item>
</el-breadcrumb> <!--卡片视图区-->
<el-card>
<!-- 条件查询-->
<el-row :gutter="20">
<el-col :span="8">
<el-input v-model="queryObj.query" placeholder="请输入查询的用户名" @clear="getTableData" clearable>
<el-button slot="append" icon="el-icon-search" @click="getTableData"></el-button>
</el-input>
</el-col>
<el-col :span="4">
<el-button type="primary" @click="addUser">添加</el-button>
</el-col>
</el-row>
<!-- 表格区-->
<el-table
:data="tableData"
stripe
border
style="width: 100%">
<el-table-column label="序号" type="index"></el-table-column>
<el-table-column prop="username" label="用户名"></el-table-column>
<el-table-column prop="role_name" label="角色"></el-table-column>
<el-table-column prop="mobile" label="手机"></el-table-column>
<el-table-column prop="email" label="邮箱"></el-table-column>
<el-table-column label="状态">
<template slot-scope="scope">
<el-switch v-model="scope.row.mg_state" @change="changeState(scope.row)">
</el-switch>
</template>
</el-table-column>
<el-table-column label="操作">
<template slot-scope="scope">
<!-- 修改-->
<el-button type="primary" icon="el-icon-edit" size="mini"></el-button>
<!-- 删除-->
<el-button type="danger" icon="el-icon-delete" size="mini" @click="deleteById(scope.row.id)"></el-button>
<!-- 按钮文字提示-->
<el-tooltip class="item" effect="dark" content="权限修改" placement="top" :enterable="false">
<!-- 权限修改-->
<el-button type="warning" icon="el-icon-star-off" size="mini"></el-button>
</el-tooltip>
</template>
</el-table-column>
</el-table>
<!-- 分页-->
<el-pagination
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="queryObj.pagenum"
:page-sizes="[2, 3, 10, 20]"
:page-size="queryObj.pagesize"
layout="total, sizes, prev, pager, next, jumper"
:total="total">
</el-pagination>
</el-card>
<!-- 增加用户对话框-->
<el-dialog title="新增用户" :visible.sync="dialogVisibleAddUser" width="50%" @close="resetForm('addFormRef')">
<!-- 输入框-->
<el-form ref="addFormRef" :model="addForm" :rules="addRules" label-width="70px">
<!-- 用户名 prop="username" 与表单验证属性对应-->
<el-form-item label="用户名" prop="username">
<el-input v-model="addForm.username"></el-input>
</el-form-item>
<!-- 密码 -->
<el-form-item label="密码" prop="password">
<el-input v-model="addForm.password"></el-input>
</el-form-item>
<!-- 邮箱 -->
<el-form-item label="邮箱" prop="email">
<el-input v-model="addForm.email"></el-input>
</el-form-item>
<!-- 手机 -->
<el-form-item label="手机" prop="mobile">
<el-input v-model="addForm.mobile"></el-input>
</el-form-item>
<!-- 按钮区域 -->
<el-form-item>
<el-button type="primary" @click="addUserData">新建</el-button>
<el-button type="info" @click="dialogVisibleAddUser=false">取消</el-button>
</el-form-item>
</el-form>
</el-dialog>
</div>
</template> <script>
export default {
name: "User",
created() {
this.getTableData()
},
data() {
return {
// 添加用户对象
addForm: {
username: '',
password: '',
email: '',
mobile: ''
},
// 用户规则
addRules: {
username: [
{required: true, message: '请输入用户名称', trigger: 'blur'},
{min: 3, max: 15, message: '长度在 3 到 5 个字符', trigger: 'blur'}
],
password: [
{required: true, message: '请输入密码', trigger: 'blur'},
{min: 3, max: 15, message: '长度在 3 到 5 个字符', trigger: 'blur'}
],
email: [
{required: true, message: '请输入邮箱', trigger: 'blur'},
{min: 3, max: 25, message: '长度在 3 到 5 个字符', trigger: 'blur'}
],
mobile: [
{required: true, message: '请输入手机号', trigger: 'blur'},
{min: 11, max: 11, message: '长度为11位', trigger: 'blur'}
],
},
// 是否显示新增对话框
dialogVisibleAddUser: false,
// 数据列表
tableData: [],
// 总共条数
total: 0,
// 查询对象
queryObj: {
query: '',
pagenum: 1,
pagesize: 10
}
}
},
methods: {
// 获取列表数据
async getTableData() {
const {data: result} = await this.$http.get('users', {params: this.queryObj})
console.log(result)
if (result.meta.status !== 200) return this.$message.error(result.meta.msg)
this.tableData = result.data.users
this.total = result.data.total
},
// 每页显示条数改变
handleSizeChange(newSize) {
this.queryObj.pagesize = newSize
this.getTableData()
},
// 当前页改变
handleCurrentChange(newPage) {
this.queryObj.pagenum = newPage
this.getTableData()
},
// 状态改变是触发
async changeState(rowObj) {
const {data: result} = await this.$http.put(`users/${rowObj.id}/state/${rowObj.mg_state}`)
console.log(result)
if (result.meta.status !== 200) {
// 重置状态
rowObj.mg_state = !rowObj.mg_state
// 消息提示
return this.$message.error(result.meta.msg)
}
// 状态修改成功
return this.$message.success('状态修改成功')
},
// 删除用户
async deleteById(id) {
// 确认是否删除
const confirmResult = await this.$confirm('此操作将永久删除该用户, 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).catch(err => err);
// 如果用户确认删除,则返回值为字符串 confirm
// 如果用户取消了删除,则返回值为字符串 cancel
if (confirmResult !== 'confirm') return this.$message.error('取消删除')
const {data: result} = await this.$http.delete(`users/` + id)
console.log(result)
if (result.meta.status !== 200) {
// 消息提示
return this.$message.error(result.meta.msg)
}
// 重新查询列表
this.getTableData()
// 删除成功
return this.$message.success('删除成功')
},
// 显示添加用户弹框
addUser() {
// 打开弹框
this.dialogVisibleAddUser = true
},
// 保存用户数据
addUserData() {
// 数据校验
this.$refs.addFormRef.validate(async (valid) => {
if (!valid) return ;
// 发出请求
let {data: result} = await this.$http.post('users', this.addForm)
console.log(result)
if (result.meta.status !== 201){
this.$message.error(result.meta.msg)
return
}
this.$message.success("新增成功")
// 关闭弹框
this.dialogVisibleAddUser=false
// 查询数据
this.getTableData()
})
},
// 表单重置
resetForm(formName) {
this.$refs[formName].resetFields();
}
}
}
</script> <style scoped> </style>
14.修改实现
完美!
vue项目之菜单管理项目实现的更多相关文章
- saltstack主机管理项目:主机管理项目架构设计(二)
1.salt架构图 https://docs.saltstack.com/en/getstarted/system/plugins.html plug-ins(左边):场景可插拔 subsystem- ...
- saltstack主机管理项目:主机管理项目需求分析(一)
1.场景: 我现在又一台裸机要实现一下任务 2.配置管理: 1.装上nginx,mysql 2.nginx用我指定的配置文件 3.mysql用户 4.设置一个默认的数据库访问权限 5.启动mysql ...
- vue,vuex的后台管理项目架子structure-admin,后端服务nodejs
之前写过一篇vue初始化项目,构建vuex的后台管理项目架子,这个structure-admin-web所拥有的功能 接下来,针对structure-admin-web的不足,进行了补充,开发了具有登 ...
- vue初始化项目,构建vuex的后台管理项目架子
构架vuex的后台管理项目源码:https://github.com/saucxs/structure-admin-web 一.node安装 可以参考这篇文章http://www.mwcxs.top/ ...
- 【vue】MongoDB+Nodejs+express+Vue后台管理项目Demo
¶项目分析 一个完整的网站服务架构,包括: 1.web frame ---这里应用express框架 2.web server ---这里应用nodejs 3.Database ---这里 ...
- 关于vue项目管理项目的架构管理平台
关于vue项目管理项目的架构管理平台 https://panjiachen.github.io/vue-element-admin-site/#/zh-cn/faq 31.4k 次浏览 完整项目地址: ...
- vue项目导航菜单实现
vue项目导航菜单问题 目标:横向菜单点击跳转,颜色变换,刷新可保持状态 // 模板template中通过循环菜单列表生成,动态类名改变颜色 <li v-for="(item, ind ...
- 前端架构之路:使用Vue.js开始第一个项目
Vue.js做为目前前端最热门的库之一,为快速构建并开发前端项目多了一种思维模式.本文通过一个简单的实例开始上手Vue.js开发. 一.技术准备 笔者建议在开始项目前,对以下两个技术点进行了解. ...
- Vue.js开始第一个项目
前端架构之路:使用Vue.js开始第一个项目 Vue.js做为目前前端最热门的库之一,为快速构建并开发前端项目多了一种思维模式.本文通过一个简单的实例开始上手Vue.js开发. 一.技术准备 使用 ...
- luffy项目:基于vue与drf前后台分离项目(2)
user模块User表 创建user模块 前提:在 luffy 虚拟环境下 1.终端从项目根目录进入apps目录 >: cd luffyapi & cd apps 2.创建app > ...
随机推荐
- 字符串— trim()、trimStart() 和 trimEnd()
在今天的教程中,我们将一起来学习JavaScript 字符串trim().trimStart() 和 trimEnd(). 01.trim() 学习如何使用 JavaScript trim()方法从 ...
- discuz论坛个人空间自定义css样式
Tips:当你看到这个提示的时候,说明当前的文章是由原emlog博客系统搬迁至此的,文章发布时间已过于久远,编排和内容不一定完整,还请谅解` discuz论坛个人空间自定义css样式 日期:2020- ...
- Xcode编译错误看不到错误详情
问题描述 Xcode提示错误后想详细看报错信息无论如何双击都不见弹出错误详情. 解决办法 不知道是bug还是苹果婊又自作主张改变用户习惯了,需要点击navigator最右边的一个图标,在里面找到相应的 ...
- MoneyPrinterPlus:AI自动短视频生成工具-腾讯云配置详解
MoneyPrinterPlus可以使用大模型自动生成短视频,其中的语音合成和语音识别部分需要借助于一些第三发云厂商的语音服务. 很多小伙伴可能不知道应该如何配置,这里给大家提供一个详细的腾讯云语音服 ...
- 仓颉语言HelloWorld内测【仅需三步】
2024年6月21日,华为仓颉正式公开发布.还记的19年和王学智的团队做过接触,他们反馈说16年我出版的<自己动手构造编译系统>一书对他们的研发很有帮助,身为作者听到这个消息还是很开心的. ...
- libevent之evbuffer
目录 Evbuffers:缓冲 IO 的实用程序功能 简介 创建或释放 evbuffer Evbuffers 和线程安全 检查 evbuffer 向 evbuffer 添加数据:基础知识 将数据从一个 ...
- Gerrit 大量代码提交流程优化
# Gerrit 大量代码提交流程优化 背景 本文适用于 提交大量初始代码 的场景(仓库版本的早期). 有时候提交大量代码到Gerrit的时候会提示: $ git push Counting obje ...
- Meilisearch 安装和使用教程
如今搜索功能已成为几乎所有应用不可或缺的一部分.无论是电商平台.内容管理系统,还是企业内部知识库,用户都期待能够快速.准确地找到他们需要的信息.然而,传统的搜索解决方案往往面临着诸多挑战:响应速度慢. ...
- 基于wxpython的时钟小工具
前言 基于python3.10 + wxpython 的时钟小工具 代码由chatgpt3.5生成,作者自己调试.留作后续参考. 正文 timer_ok.py import wx import tim ...
- FreeRDP使用,快速找出账户密码不正确的服务器地址
最近有个需求,需要找出服务器未统一设置账户密码的服务器,进行统一设置,一共有一百多台服务器,一个个远程登录看,那得都费劲啊,这时候就可以用到FreeRDP这个远程桌面协议工具,FreeRDP下载,根据 ...