基于Vue+ElementUI+MySQL+Express的学生管理系统(3)

news2024/10/6 4:21:21

3.搭建学生考试信息的前端页面

1.在E:\vue\shiyan9目录下用cmd打开命令窗口。输入命令vue init webpack score-manage,创建一个基于webpack模板的项目。

 

图15 创建一个新的vue的脚手架的项目

2.执行cd score-manage,进入目录包下。下载依赖包。命令如下,
npm install。

 

图16 安装依赖包

3.在命令行下输入npm run dev,编译并运行刚刚创建的score-manage项目。

 

图17 编译并运行新建的项目score-manage

访问:http://localhost:8080查看创建的项目的主页。

图18 初始化项目的首页

4.安装elment-ui和axious的依赖包,在score-manage目录下执行命令,npm install element-ui –S和npm install axios –S。

 

图19 安装element和axios的依赖包

5.用VSCode打开刚刚新建的项目,修改src/main.js将下载的element-ui引入。

import Vue from 'vue'
import App from './App'
import router from './router'
import ElementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'
Vue.config.productionTip = false
Vue.use(ElementUI)
/* eslint-disable no-new */
new Vue({
  el: '#app',
  router,
  template: '<App/>',
  components: { App },
  render: h => h(App)
}) 

6.删除App.vue自带的代码和HelloWorld.vue。

此时App.vue的代码如下。

<template>
  <div id="app">
    <router-view/>
  </div>
</template>
 
<script>
export default {
  name: 'App'
}
</script>
<style>
</style>

7.src下创建“mixins”的文件夹,并创建index.js公共辅助js文件。代码如下。

export const mixin = {
    methods: {
 
        // 显示提示信息
        notify(title, type) {
            this.$notify({
                title: title,
                type: type
            })
        },
        getUrl(url) {
            return `http://127.0.0.1:8888${url}`
        },
        // 获取要删除列表的id
        handleDelete(id) {
            this.idx = id
            this.delVisible = true
        },
        // 获取批量要删除的列表
        handleSelectionChange(val) {
            this.multipleSelection = val
        },
        // 批量删除
        delAll() {
            for (let item of this.multipleSelection) {
                this.handleDelete(item.stuId)
                this.deleteRow(item.stuId)
            }
            this.multipleSelection = []
        }
 
    }
}

8.在components新建页面scorePage.vue。并输入如下代码。

<template>
    <div class="table">
  <div class="container">
    <h1>学生考试信息管理</h1>
        <div class="handle-box">
            <el-button type="danger" size="mini" class="handle-del mr10" @click="delAll">批量删除</el-button>
             <el-button type="success" size="mini" @click="centerDialogVisible = true">添加学生考试信息</el-button>
            <el-input v-model="select_word" size="mini" placeholder="输入关键词自动筛选" class="handle-input mr10"></el-input>
        </div>
        <el-table size="mini" border style="width: 100%" height="500px" :data="data"
         @selection-change="handleSelectionChange">
         <!-- 选择框 -->
          <el-table-column type="selection" width="60" align="center"></el-table-column>
          <!-- 序号 -->
          <el-table-column  label="序号" width="79" align="center">
            <template slot-scope="scope">
              <div>{{scope.$index+1}}</div>
            </template>
          </el-table-column>
          <!-- 准考证号 -->
          <el-table-column prop="stuId" label="准考证号" width="175" align="center">
            <template slot-scope="scope">
              <div>{{scope.row.stuId}}</div>
            </template>
          </el-table-column>
          <!-- 学生姓名 -->
          <el-table-column prop="stuName" label="学生姓名" width="175" align="center">
            <template slot-scope="scope">
              <div>{{scope.row.stuName}}</div>
            </template>
          </el-table-column>
          <!-- 语文成绩 -->
          <el-table-column prop="ChineseScore" label="语文成绩" width="175" align="center">
            <template slot-scope="scope">
              <div>{{scope.row.ChineseScore }}</div>
            </template>
          </el-table-column>
        <!-- 英语成绩 -->
          <el-table-column prop="EnglishScore" label="英语成绩" width="175" align="center">
            <template slot-scope="scope">
                <div>{{scope.row.EnglishScore}}</div>
            </template>
          </el-table-column>
            <!-- 数学成绩 -->
            <el-table-column prop="MathScore" label="数学成绩" width="175" align="center">
            <template slot-scope="scope">
                <div>{{scope.row.MathScore}}</div>
            </template>
          </el-table-column>
          <!-- 理综成绩 -->
          <el-table-column prop="ScienceScore" label="理综成绩" width="175" align="center">
            <template slot-scope="scope">
              <div>{{scope.row.ScienceScore }}</div>
            </template>
          </el-table-column>
 
          <!-- 删除和修改操作 -->
          <el-table-column label="操作" width="200" align="center">
            <template slot-scope="scope">
                <!-- 编辑按钮 -->
              <el-button size="mini" @click="handleEdit(scope.row)">编辑</el-button>
              <!-- 根据学号进行删除 -->
              <el-button size="mini" type="danger" @click="handleDelete(scope.row.stuId)">删除</el-button>
            </template>
          </el-table-column>
        </el-table>
        <!-- 分页 -->
        <div class="pagination">
          <el-pagination
            @current-change="handleCurrentChange"
            background 
            layout="total, prev, pager, next"
            :current-page="currentPage"
            :page-size="pageSize"
            :total="tableData.length">
          </el-pagination>
        </div>
      </div>
      <!-- 添加考生信息 -->
      <el-dialog title="添加学生考试信息" :visible.sync="centerDialogVisible" width="400px" center>
        <el-form
          :model="registerForm"
          status-icon
          ref="registerForm"
          label-width="80px"
          class="demo-ruleForm"
          >
          <el-form-item prop="stuId" label="准考证号" size="mini">
            <el-input v-model="registerForm.stuId" placeholder="准考证号"></el-input>
          </el-form-item>
          <el-form-item prop="stuName" label="学生姓名" size="mini">
            <el-input v-model="registerForm.stuName" placeholder="学生姓名"></el-input>
          </el-form-item>
          <el-form-item prop="ChineseScore" label="语文成绩" size="mini">
            <el-input v-model="registerForm.ChineseScore" placeholder="语文成绩"></el-input>
          </el-form-item>
          <el-form-item prop="EnglishScore" label="英语成绩" size="mini">
            <el-input v-model="registerForm.EnglishScore" placeholder="英语成绩"></el-input>
          </el-form-item>
          <el-form-item prop="MathScore" label="数学成绩" size="mini">
            <el-input v-model="registerForm.MathScore" placeholder="数学成绩"></el-input>
          </el-form-item>
          <el-form-item prop="ScienceScore" label="理综成绩" size="mini">
            <el-input v-model="registerForm.ScienceScore" placeholder="理综成绩"></el-input>
          </el-form-item>
        
        </el-form>
        <span slot="footer" class="dialog-footer">
          <el-button size="mini" @click="centerDialogVisible = false">取 消</el-button>
          <el-button type="primary" size="mini" @click="addScore">确 定</el-button>
        </span>
      </el-dialog>
      <!-- 编辑弹出框 -->
      <el-dialog title="编辑学生考试信息" :visible.sync="editVisible" width="400px" center>
        <el-form ref="form" :model="form" label-width="70px">
       
          <el-form-item label="准考证号" size="mini">
            <el-input v-model="form.stuId" disabled></el-input>
          </el-form-item>
          <el-form-item label="学生姓名" size="mini">
            <el-input v-model="form.stuName"></el-input>
          </el-form-item>
          
          <el-form-item label="语文成绩" size="mini">
            <el-input v-model="form.ChineseScore"></el-input>
          </el-form-item>
          <el-form-item label="英语成绩" size="mini">
            <el-input v-model="form.EnglishScore"></el-input>
          </el-form-item>
          
          <el-form-item  label="数学成绩" size="mini">
            <el-input v-model="form.MathScore"></el-input>
          </el-form-item>
          <el-form-item  label="理综成绩" size="mini">
            <el-input v-model="form.ScienceScore"></el-input>
          </el-form-item>
        </el-form>
        <span slot="footer" class="dialog-footer">
          <el-button size="mini"  @click="editVisible = false">取 消</el-button>
          <el-button type="primary" size="mini" @click="saveEdit">确 定</el-button>
        </span>
      </el-dialog>
      <!-- 删除提示框 -->
      <el-dialog title="提示" :visible.sync="delVisible" width="300px" center>
        <div class="del-dialog-cnt" align="center">删除不可恢复,是否确定删除?</div>
        <span slot="footer" class="dialog-footer">
          <el-button size="mini" @click="delVisible = false">取 消</el-button>
          <el-button type="primary" size="mini" @click="deleteRow">确 定</el-button>
        </span>
      </el-dialog>
    </div>
  </template>
  <script>
  //导入外部js文件
  import {mixin} from '../mixins/index.js'
  import axios from 'axios';
  
  export default {
    name: 'book-page',
    //注意:以下代码导入mixin中的方法供本组件使用。
    //vue中提供了一种混合机制:mixins,用来更高效的实现组件内容的复用。
    mixins: [mixin],
    data () {
        return {
        registerForm: {
        //  添加框信息
              stuId: '',
              stuName: '',
              ChineseScore: '',
              EnglishScore: '',
              MathScore: '',
              ScienceScore:''
              
        },
        tableData: [],
        tempData: [],
        multipleSelection: [],
        centerDialogVisible: false,
        editVisible: false,
        delVisible: false,
        select_word: '',
          form: {
            // 编辑框信息
            stuId: '',
              stuName: '',
              ChineseScore: '',
              EnglishScore: '',
              MathScore: '',
              ScienceScore:''
        },
        pageSize: 10, // 页数
        currentPage: 1, // 当前页
        idx: -1
      }
    },
    computed: {
      // 计算当前表格中的数据,用于分页。
  data () {
    //slice方法通过索引位置获取并返回一个新的子数组。
    //用法:arrayObj.slice(start,end),其中,arrayObj 为原数组,
  //start设定新数组的起始位置,end设定新数组的结束位置。pro
        return this.tableData.slice((this.currentPage - 1) * this.pageSize, this.currentPage * this.pageSize)
      }
    },
    watch: {
      //select_word监听数据变化,实现快速实时查询功能
      select_word: function () {
        if (this.select_word === '') {
          this.tableData = this.tempData
        } else {
          this.tableData = []
          for (let item of this.tempData) {
            if (item.stuId.includes(this.select_word)) {
              this.tableData.push(item)
            }
          }
        }
      }
    },
    // 创建vue实例时加载全部数据。
    created () {
      this.getData()
    },
    methods: {
      // 获取当前页
      handleCurrentChange (val) {
        this.currentPage = val
      },         
      
      // 添加学生考试信息
      addScore() {
    
        let stuId=this.registerForm.stuId
        let stuName=this.registerForm.stuName
          let ChineseScore = this.registerForm.ChineseScore
          let EnglishScore=this.registerForm.EnglishScore
        let MathScore=this.registerForm.MathScore
        let ScienceScore=this.registerForm.ScienceScore
        let params ={stuId,stuName,ChineseScore,EnglishScore,MathScore,ScienceScore}          
        console.log(params)
        //通过axios向服务器发出post请求,添加一条学生考试信息记录。
        axios.post('api/score/addScore',params).then(res => {
          console.log(res); 
            if (res.data.affectedRows!=0) {
              this.getData()
              this.registerForm = {}
              this.notify('添加成功', 'success')
            } else {
              this.notify('添加失败', 'error')
            }
          })
          .catch(err => {
            console.log(err)
          })
        this.centerDialogVisible = false
      },
      // 加载全部数据(获取全部歌手信息)。
      getData () {
        this.tableData = []
        this.tempData = []
        //通过axios向服务器发出post请求,获取歌手的所有记录。
        axios.post('api/score/getScores').then(res => {        
          console.log(res);
          this.tableData = res.data
          this.tempData = res.data        
          this.currentPage = 1
        })
      },
      // 编辑
      handleEdit (row) {
        this.editVisible = true
        this.idx = row.stuId
        this.form = {
            stuId:row.stuId,
            stuName: row.stuName,
            ChineseScore: row.ChineseScore,
            EnglishScore: row.EnglishScore,
            MathScore: row.MathScore,
            ScienceScore:row.ScienceScore
        }
      },
      // 保存编辑
      saveEdit() {
        let stuId=this.form.stuId
        let stuName=this.form.stuName
        let ChineseScore=this.form.ChineseScore
        let MathScore=this.form.MathScore
        let EnglishScore=this.form.EnglishScore
        let ScienceScore=this.form.ScienceScore
        let params ={stuName,ChineseScore,EnglishScore,MathScore,ScienceScore,stuId}            
        //通过axios向服务器发出post请求,更新一条歌手记录。
        axios.post('api/score/updateScore',params).then(res => {
          console.log(res); 
          if (res.data.affectedRows!= 0) {
              this.getData()
              this.notify('编辑成功', 'success')
            } else {
              this.notify('编辑失败', 'error')
            }
          })
          .catch(err => {
  
            console.log(err)
          })
        this.editVisible = false
      },
      // 确定删除
      deleteRow () {
        let stuId=this.idx;
        let params={stuId}      
        console.log(params)
        //通过axios向服务器发出post请求,删除一条学生考试信息
        axios.post('api/score/deleteScore',params).then(res => {
        console.log(res.data); 
            if (res) {
              this.getData()
              this.notify('删除成功', 'success')
            } else {
              this.notify('删除失败', 'error')
            }
          })
          .catch(err => {
            console.log(err)
          })
        this.delVisible = false
  }
    }
  }
  </script>
  <style scoped>
  .handle-box {
    margin-bottom: 20px;
  }
  .handle-input {
    width: 300px;
    display: inline-block;
  }
  .singer-img {
    width: 100%;
    height: 80px;
    border-radius: 5px;
    margin-bottom: 5px;
    overflow: hidden;
  }
  .pagination {
    display: flex;
    justify-content: center;
  }
  </style>
  

9.在config的index.js文件中找到proxyTable并替换为如下的代码,用于解决跨域的问题。

proxyTable: {
        '/api': {
            target: 'http://127.0.0.1:8888/api/',//不要写localhost
            changeOrigin: true,//true允许跨域
            pathRewrite: {
                '^/api': ''  //需要rewrite重写的, 如果在服务器端做了处理则可以不要这段
            }
        }
    },

10.修改路由表信息。找到src/router/index.js文件,并把代码替换为如下代码。

import Vue from 'vue'
import Router from 'vue-router'
import scorePage from '@/components/scorePage.vue'
 
Vue.use(Router)
 
export default new Router({
  routes: [
    {
      path: '/',
      component: scorePage
    }
  ]
}) 

11.修改index.html,修改title属性为“学生考试信息管理系统”,具体的代码如下。

<!DOCTYPE html>
<html>
 
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width,initial-scale=1.0">
    <title>学生考试信息管理系统</title>
  </head>
 
  <body>
    <div id="app"></div>
    <!-- built files will be auto injected -->
  </body>
 
</html>

12.用VSCode的终端,分别在score-manage目录和score-server目录下输入,npm run dev,node index。启动完成后访问:http://localhost:8080/,效果图如图22所示。

图21 VSCode终端下启动前端页面

 

图22 VSCode终端下启动Express Web服务器

 

图23 学生考试信息管理系统主页

13.增加一条学生的考试信息:点击”添加学生考试信息“,显示的界面如图23所示。在”添加学生考试界面“添加一条新数据,具体输入的数据如图24所示,点击”确定“之后页面多出一条刚刚添加的数据,底部的分页的数目以及界面中的序号等都会发生变化,效果图如图25所示。

图24 添加学生考试信息界面

 

图25 输入框中输入要添加的学生的信息

图26 添加数据后的界面

14.修改一条学生的考试信息:当点击图25中所示的“编辑”就会对当前的学生的考试信息进行编辑(默认准考证号不能改)。假设将赵六的英语成绩110分改为120分。图26所示的为“赵六”的考试信息,可以发现“准考证号”不能被修改,其余的字段可以进行修改。“赵六”的考试成绩修改成功后的界面如图27所示。

图27 编辑状态下的“赵六”的考试信息

图28  修改成功后的“赵六”的考试成绩

15.删除一条学生的考试信息:当点击图27中所示的删除按钮就会删除一条学生的考试信息。例如,删除“王五”的考试信息。当点击删除按钮的时候会出现如图29所示的提示框,当选择“确定”后,“王五”的考试信息就会被删除,删除后的界面如图30所示,发现界面中“王五”的信息消失并且底部的页的记录会-1。

 

图29 删除前的界面

 

图30 点击删除后的提示框

 

图31 删除“王五”后的界面

16.批量删除学生的考试信息:当点击图30所示的复选框可以勾选删除多条信息。例如,删除“张三”和“赵六”考试信息。勾选复选框的界面如图31所示,点击“批量删除”,删除后的界面如图32所示,筛选后的页面的条数信息也会跟着变化。

图32 勾选复选框的界面

 

图33 批量删除后的界面

17.模糊查询更新界面数据:实例,筛选并查看准考证号尾数为270的学生的考试信息。只需要在输入框中输入270,就会出现图34所示的界面,与图33中显示的信息相比,图34仅显示筛选出来的准考证号尾数为270的学生的信息。

 

图34 根据学号进行模糊查询

 

图35 筛选准考证号尾数为270的学生的考试信息

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/25594.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Pytorch 图像增强 实现翻转裁剪色调等 附代码(全)

目录前言1. 裁剪1.1 中心裁剪1.2 随机裁剪1.3 随机尺寸裁剪2. 翻转2.1 水平翻转2.2 垂直翻转2.3 随机旋转3. 色调3.1 灰度变换3.2 色彩抖动3.3 随机翻转颜色3.4 随机调整锐度3.5 高斯模糊4. 边缘填充5. 仿射变换前言 下文中有使用到plt&#xff0c;不懂的可看我这篇文章&#…

doker中的Jenkins容器配置github

1、在Jenkins插件 管理中下载github plugin和ssh和git插件 2、在Jenkins->系统管理->系统配置->github下配置凭据认证&#xff0c;添加凭证页面类型选择secret text 3、添加凭证页面secret栏输入githu token&#xff0c;其他任意输入 4、github token获取&#xf…

FANUC机器人零点复归的报警原因分析和零点标定相关步骤

FANUC机器人零点复归的报警原因分析和零点标定相关步骤 FANUC机器人零点复归时需要将机器人的机械信息与位置信息同步,来定义机器人的物理位置。 机器人通过闭环伺服系统来控制机器人各运动轴,当用户通过示教器点动机器人时,经过主板分析此命令后,带动电机旋转,电机上的SP…

软件测试入门概念

满足用户期望或正式规定文档&#xff08;合同、标准、规范&#xff09;所具有的条件和权能&#xff0c;包含用户需求和软件需求。 用户需求&#xff1a; 五花八门的用户需求&#xff0c;该需求比较简略。 软件需求&#xff1a; 又叫功能需求&#xff0c;该需求会详细描述开发…

SLAM本质剖析-Boost之Geometry函数大全(二)

4. 点云处理 4.1 add_point 将一个点添加到另一个点 4.2 add_value 将相同的值添加到点的每个坐标 4.3 assign_point 用另一个点指定一个点 4.4 assign_value 为点的每个坐标指定相同的值 4.5 cross_product 计算两个向量的叉积 4.7 divide_point 将一点除以另一点…

Python用27行代码绘制一幅满天星

前言 大家早好、午好、晚好吖 ❤ ~ 每一个孩子都像星空中的一颗星星&#xff0c;散发着自己所特有的光芒照亮着整个夜空。 今天就带大家用27行Python代码绘制一幅满天星吧。 全局设置 在绘制满天星的过程中要运用到turtle工具&#xff0c;它是Python的标准库&#xff0c;也可…

堆排序+TOPK问题

文章目录一.堆排序1.使用向上还是向下调整建堆好&#xff1f;(1)向上调整算法建堆的时间复杂度1. 完整过程(2)向下调整算法建堆的时间复杂度1.完整过程(3)总结2. 排升序(1) 建小堆(2) 建大堆3. 堆排序时间复杂度统计4.完整代码二 、 TOPK问题1. 概念2.两种方法第一种缺陷第二种…

【论文阅读】(2017)The late acceptance Hill-Climbing heuristic

文章目录一、摘要二、Late Acceptance Hill Climbing三、LAHC技术性能的研究3.1 Benchmark problems3.2 Experimental software3.3 Experiments四、LAHC性能评估4.1 评估方法4.2 LAHC不同变体的性能4.3 LAHC与其他技术的比较4.4 LAHC的规模独立性五、Conclusions and future wo…

Salesforce架构师常见问题(上)

Salesforce架构师需要花费大量时间来绘制、讨论、建立和设计稳健的端到端解决方案。架构师角色不仅仅是处理解决方案这么简单&#xff0c;还需要在企业级组织中与多个业务部门打交道。 因此&#xff0c;Salesforce架构师面试需要从以下3个方面准备&#xff1a; Part.1 分享工…

快速理解 JVM 内存模型 对象组成 对象内存分配

快速理解 JVM 内存模型 & 对象组成 & 对象内存分配 JVM 内存模型 JVM 内存模型分为首先在线程纬度可以分为两部分 一部分是 线程共享&#xff1a; 堆、元空间 堆 &#xff1a; 大多数 new 的对象都存在于堆内&#xff0c;也是 GC 主要回收的空间&#xff0c;占据 J…

涨薪跳槽利器,清华大咖总结的 Java 核心突击讲,一应俱全

前言 今天在这里分享一位读者粉丝的经历&#xff1a; 本人双非本科&#xff0c;没拿什么过奖&#xff0c;现在毕业也有三年时间了&#xff0c;大四感觉能力有点不足&#xff0c;进了一家小型的互联网公司实习&#xff1b;期间报名了个线上培训课程&#xff0c;一直在持续学习…

超详细Docker部署SpringBoot+Vue项目(三更博客项目部署)

文章目录1.项目部署规划2.前置工作2.1修改后端配置文件ip2.2修改前端Vue项目运行端口2.3修改前端对应的服务器ip2.4后端项目打包2.4.1解决打包问题2.4.2项目打包&#xff0c;本地运行jar包测试2.5前端项目打包2.6开放端口2.7配置安全组规则3.Docker安装4.拉取镜像5.编写Dockerf…

挂耳式蓝牙耳机哪家的好用,推荐几款实用的挂耳式耳机

时代在进步&#xff0c;而我们也顺势享受着进步过程中所产生的物件&#xff0c;就如骨传导和传统耳机&#xff0c;年轻人更多时候会偏向于骨传导耳机&#xff0c;毕竟骨传导的最大的特点就是佩戴舒适的同时&#xff0c;开放式耳道的设计能够更好的让中耳炎说拜拜。但近期市面上…

Hi,运维,你懂Java吗-No.3:java系统的启动

作为运维&#xff0c;你不一定要会写Java代码&#xff0c;但是一定要懂Java在生产跑起来之后的各种机制。 本文为《Hi&#xff0c;运维&#xff0c;你懂Java吗》系列文章 第三篇&#xff0c;敬请关注后续系列文章 欢迎关注 龙叔运维&#xff08;公众号&#xff09; 持续分享运…

浅谈一下:Java学习中不得不知道的:static (静态)成员

下面笔者&#xff0c;按照之前的Student进行简单的说明&#xff1a; class Student {private String name ;private int age ;private String classRoom ;//上课教室public Student(String name, int age) {this.name name;this.age age;}public void doClass() {System.out…

五、 通信协议

协议&#xff1a;约定&#xff0c;就好比我们来自不同的地方&#xff0c;如果都用各自的家乡话&#xff0c;那么肯定无法沟通&#xff0c;这时我们规定双方都说普通话&#xff0c;这样就可以沟通了&#xff0c;而这个规定就是“协议” 网络通信协议&#xff1a;速率、传输码率…

SpringCloud - 服务注册中心

文章目录1.服务注册中心2.Eureak服务注册中心2.1 Eureka服务注册与发现2.1.1 单机Eurake构建步骤(1) 创建EurekaServer服务注册中心(2) EurekaClient服务注册2.1.2 Eureka集群构建步骤(1) 创建第多个EureakServer注册中心(2) 修改host(模拟)(3) 修改YML配置2.1.3 集群配置Eurek…

搞定企业视频直播:硬件设备、直播网络环境和设备连接说明

阿酷TONY / 2022-11-22 / 原创 / 长沙 / 1.直播硬件设备 电脑硬件推荐配置&#xff1a; 系统&#xff1a;win7系统以上&#xff0c;macOS 10.13.6以上 显卡&#xff1a;独立2G显卡或以上 CPU&#xff1a;i5或以上 内存&#xff1a;4G或以上 选配硬件&#xff1a; …

我有 7种 实现web实时消息推送的方案,7种!

技术交流&#xff0c;公众号&#xff1a;程序员小富 大家好&#xff0c;我是小富&#xff5e; 我有一个朋友&#xff5e; 做了一个小破站&#xff0c;现在要实现一个站内信web消息推送的功能&#xff0c;对&#xff0c;就是下图这个小红点&#xff0c;一个很常用的功能。 不过…

打印机不能正常打印怎么办

第一种&#xff1a;更换驱动&#xff0c;在官网上下载相应的驱动而后安装 第一步&#xff1a;添加打印机和扫描仪 第二步&#xff1a;点击——>我需要的打印机不在列表中 第三步;①如果是USB连接则选择添加本地打印机 ②如果是网络打印机&#xff0c;则选择使用TCP/IP添加…