基于微信小程序的医院预约挂号系统的设计与实现

hello hello~ ,这里是 code袁~💖💖 ,欢迎大家点赞🥳🥳关注💥💥收藏🌹🌹🌹
🦁作者简介:一名喜欢分享和记录学习的在校大学生
💥个人主页:code袁的博客
💥 个人QQ:2647996100
🐯 个人wechat:code8896
code袁系列专栏导航
1.《毕业设计与课程设计》本专栏分享一些毕业设计的源码以及项目成果。🥰🥰🥰
2.《微信小程序开发》本专栏从基础到入门的一系开发流程,并且分享了自己在开发中遇到的一系列问题。🤹🤹🤹
3.《vue开发系列全程线路》本专栏分享自己的vue的学习历程。非常期待和您一起在这个小小的互联网世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨

文章目录
- 1.前言介绍
- 2.功能设计
- 3、功能实现
- 4、开发技术简介
- 5、系统物理架构
- 6、库表设计
- 7、关键代码
- 优质作品集
- 8、源码获取
基于微信小程序的医院预约挂号小程序
1.前言介绍
在这个争分夺秒的时代,健康需求与便捷就医的渴望从未如此强烈,挂号预约小程序应需而生,承载着革新就医体验的使命。
过往,就医挂号常常令人头疼不已。上班族忙碌于工作,请假排队挂号难上加难,宝贵的时间在等待中悄然流逝;老年人身体不便,还要在医院的长龙中艰难站立,疲惫不堪。挂号预约小程序的出现,彻底改变了这一困境。
它仿若一条无形却高效的纽带,紧密连接起患者与医疗机构。轻点手机屏幕,海量医疗资源尽在掌握。各大医院的科室介绍细致入微,让患者能依据自身病症精准定位所需;医生排班一目了然,专家号不再遥不可及,可按需预约心仪时段。不仅节省了现场排队的时间,还避免了盲目就医,使诊疗过程更具针对性。
同时,小程序背后依托强大的技术支撑,实时整合更新号源信息,确保数据精准无误。从挂号到就诊提醒,全程贴心服务,无缝对接每一个就医环节。它致力于优化就医流程,让医疗服务触手可及,真正为每一位使用者开启轻松、高效、有序的就医新篇章,成为守护健康之路的得力助手。
2.功能设计
挂号预约小程序功能设计聚焦用户就医痛点,旨在打造一站式便捷就医平台。
用户注册登录后,进入简洁直观的主界面。顶部搜索栏支持模糊搜索,输入常见病症,如 “胃痛”“发热”,即刻弹出关联科室与推荐医生,精准匹配就医需求。下方分类导航栏清晰划分 “综合医院”“专科医院”“社区诊所” 等板块,方便用户按需求筛选。每家医院详情页展示科室分布、设备设施、交通路线,还设有患者口碑评分,助力用户全方位了解。
挂号板块独具匠心,日历视图直观呈现医生一周出诊安排,绿色标识空闲时段,点击即可选择。支持分时段精确预约,精细到 15 分钟间隔,满足不同用户时间规划。预约时,系统自动关联医保信息,实现线上医保结算,减轻费用负担。
个人中心功能完备,“我的预约” 实时跟踪挂号状态,临近就诊推送提醒,可一键查看详细就诊信息,包括诊室位置、医生介绍。“病历管理” 允许用户上传过往病历,方便医生快速查阅病史,做出精准诊断。此外,设有 “健康资讯” 专栏,定期推送疾病预防、康复护理知识,提升用户健康素养。互动社区供患者交流就医心得,为小程序持续优化提供反馈,各功能协同发力,让就医轻松无忧。

3、功能实现
系统登录功能是程序必不可少的功能,在登录页面必填的数据有两项,一项就是账号,另一项数据就是密码,当管理员正确填写并提交这二者数据之后,管理员就可以进入系统后台功能操作区。下图就是管理员登录页面。


目管理页面提供的功能操作有:科室管理,职位管理,医生管理,用户管理等


下面是医生管理端


小程端部分页面展示








4、开发技术简介
本节介绍场馆预约平台用到的一些技术和开发环境的简介,用到开发技术主要包括:
(1)前端用到Element UI组件库和Vue框架
(2)后端用到Node
(3)包管理器Npm
(4)中间件Express
(5)数据库MySQL
系统开发环境主要是:前端开发工具Vscode,Hbuilder、操作系统Win10、CPU i5-9300H、内存8G。
5、系统物理架构
自习室系统的物理架构主要有:管理端和用户端,其中管理端主要是基于Vue和Element UI,用户端主要基于安卓、微信小程序和H5自习室系统的物理建构图

6、库表设计

7、关键代码
// pages/pay/payList.js
const {getUserReservation,updateRservation} =require('../../api/user')
Page({/*** 页面的初始数据*/data: {list:[],stars: [0, 1, 2, 3, 4],normalSrc: '../../image/index/ZS1.png',//未选中状态selectedSrc: '../../image/index/ZS.png',//选中状态key: 0,//评分qrImg:[]},/*** 生命周期函数--监听页面加载*/onLoad(options) {this.getList()},getList(){getUserReservation({phone:wx.getStorageSync('userInfo').phone}).then(res=>{this.setData({list:res.data})})},godetail(e){let value=e.currentTarget.dataset.valuewx.navigateTo({url: './registrationDetail?value='+JSON.stringify(value),})},gocomment(){wx.showModal({title: '评价',editable:true,placeholderText:'请输入评价',complete: (res) => {if (res.confirm) {let data={}}}}) },selectServer: function (e) {console.log(e)var key = e.currentTarget.dataset.keyif (this.data.key == 1 && e.currentTarget.dataset.key == 1) {//当有一颗星的时候再次点击取消选中key = 0;}console.log("得" + key + "分")this.setData({key: key})
},
// pages/userInfo/userInfo.js
const {updataUser} =require('../../api/user')
Page({/*** 页面的初始数据*/data: {username:"",imgUrl:"",password:"",userInfo:{},},/*** 生命周期函数--监听页面加载*/onLoad(options) {this.setData({userInfo:wx.getStorageSync('userInfo'),username:wx.getStorageSync('userInfo').username,password:wx.getStorageSync('userInfo').password,imgUrl:wx.getStorageSync('userInfo').imgUrl})},username(e){this.setData({username:e.detail.value})},/*** 生命周期函数--监听页面初次渲染完成*/onReady() {},/*** 生命周期函数--监听页面显示*/onShow(){this.setData({userInfo:wx.getStorageSync('userInfo'),status:wx.getStorageSync('status'),})},updataPassword(){wx.showModal({title: '修改密码',editable:true,placeholderText:"输入新密码",complete: (res) => {if (res.confirm) {if(res.content){this.setData({password:res.content})}else{wx.showToast({title: '密码不能为空哦',icon:'none'})}}}})},changImg(res){let that=thiswx.chooseImage({count: 1,sizeType: ['original', 'compressed'],sourceType: ['album', 'camera'],success (res) {var imgsFile = res.tempFilePaths[0];that.setData({imgUrl:imgsFile})wx.uploadFile({filePath: imgsFile,name: 'file',url: 'http://localhost:3000/upload/upload',success: res => {that.data.userInfo.imgUrl=JSON.parse(res.data).url}})}})},gosubmit(){let data={id:this.data.userInfo.id,username:this.data.username,password:this.data.password,imgUrl:this.data.userInfo.imgUrl}updataUser(data).then(res=>{if(res.code==200){let userInfo=wx.getStorageSync('userInfo')userInfo.username=this.data.usernameuserInfo.password=this.data.passworduserInfo.imgUrl=this.data.userInfo.imgUrlwx.setStorageSync('userInfo', userInfo)wx.showToast({title: res.msg,icon:'none'})}})},
<template><div class="messge"><el-dialog title="提示" :visible.sync="dialogVisible" width="40%"><!-- 弹窗信息 --><el-formref="form":model="form":rules="rules":inline="true":before-close="handleClose"label-width="80px"><el-form-item label="名称" prop="username"><el-input v-model="form.username" placeholder="医生名称"></el-input></el-form-item><el-form-item label="擅长领域" prop="skill"><el-input v-model="form.skill" placeholder="擅长领域"></el-input></el-form-item><el-form-item label="挂号费" prop="price"><el-input v-model="form.price" placeholder="挂号费"></el-input></el-form-item><el-form-item label="简介" prop="desc"><el-input v-model="form.desc" placeholder="医生简介"></el-input></el-form-item><el-form-item label="所属科室" prop="id"><el-select v-model="form.office_id" placeholder="请选择"><span></span><el-optionv-for="item in options":key="item.id":label="item.name":value="item.id"></el-option></el-select></el-form-item><el-form-item label="所属职称" prop="id"><el-select v-model="form.work_id" placeholder="请选择"><span></span><el-optionv-for="item in optionswork":key="item.id":label="item.name":value="item.id"></el-option></el-select></el-form-item><el-form-item label="医生肖像"><commonUpload :initial-image-url="form.imgUrl"></commonUpload></el-form-item></el-form><!-- 表单提交 --><span slot="footer" class="dialog-footer"><el-button @click="cancle">取 消</el-button><el-button type="primary" @click="submit">确 定</el-button></span></el-dialog><div class="manage-hander"><!-- 添加按钮 --><el-button type="primary" @click="handleAdd">+ 新增</el-button></div><!-- 表格 --><div class="common-table"><el-table:data="tableData"stripeheight="90%"borderstyle="width: 100%"><el-table-column prop="username" label="医生名称" align="center"></el-table-column><el-table-column prop="imgUrl" label="肖像" align="center"><template slot-scope="scope"><el-imagestyle="width: 150px; height: 100px":src="scope.row.imgUrl":preview-src-list="[scope.row.imgUrl]"></el-image></template></el-table-column><el-table-column prop="skill" label="擅长领域" align="center"><template slot-scope="scope"><span class="content">{{ scope.row.skill }}</span></template></el-table-column><el-table-column prop="price" label="挂号费" align="center"></el-table-column><el-table-column label="所属科室" prop="office_id"><template slot-scope="scope"><span v-for="item in options" :key="item.id"><span v-if="scope.row.office_id === item.id">{{ item.name }}</span></span></template></el-table-column><el-table-column label="所属职称" prop="office_id"><template slot-scope="scope"><span v-for="item in optionswork" :key="item.id"><span v-if="scope.row.work_id === item.id">{{ item.name }}</span></span></template></el-table-column><el-table-column label="评级" align="center"><template slot-scope="scope"><el-ratev-model="scope.row.garden"disabledshow-scoretext-color="#ff9900"></el-rate></template></el-table-column><el-form-item label="简介" prop="desc" align="center"><el-input v-model="form.desc" placeholder="医生简介"></el-input></el-form-item><el-table-column prop="addr" label="操作" align="center"><template slot-scope="scope"><el-buttontype="primary "size="mini"@click="handleEdit(scope.row)">编辑</el-button><el-buttontype="danger"size="mini"@click="handleDelete(scope.row)">删除</el-button></template></el-table-column></el-table><!-- 分页组件 --><el-paginationclass="page"layout="prev, pager, next":total="total"@current-change="handlePage"></el-pagination></div></div>
</template><script>
import commonUpload from "@/components/commonUpload.vue";
import {getOffice,getDoctor,addDoctor,detelDoctor,updateDoctor,getWork,
} from "@/api/index";
// import { allAdmin } from "@/api/reservation";
export default {name: "User",data() {return {dialogVisible: false,// 表单字段form: {username: "",skill: "",imgUrl: "",desc: "",garden: "",price: "",office_id: "",},value: "3",// 表單校驗rules: {username: [{ required: true, message: "请输入医生名称" }],openTime: [{ required: true, message: "请输入实验室开发时间" }],address: [{ required: true, message: "请输入实验室地址" }],desc: [{ required: true, message: "请输入实验室简介" }],},options: [{id: "",name: "",},],optionswork: [{id: "",name: "",},],// 表单数据tableData: [],total: 0, //页面的总条数modelType: 0, //0表示是新增的弹窗 ,1表示的是编辑userFrom: {username: "",},};},components: {commonUpload,},methods: {// 提交submit() {if (this.modelType == 0) {this.$refs.form.validate((value) => {// 校验为真if (value) {this.form.imgUrl = this.$store.state.upload.imgUrl;addDoctor(this.form).then((res) => {// console.log(res);this.$message.success("添加成功");});this.$refs.form.resetFields();this.dialogVisible = false;this.getList();}});} else {this.$refs.form.validate((value) => {// 校验为真if (value) {updateDoctor(this.form).then((res) => {this.$message.success("修改成功");});this.$refs.form.resetFields();this.dialogVisible = false;this.getList();}});}},handle(e) {console.log();// let id = res.id;this.$confirm("要修改用户权限吗?", "提示", {confirmButtonText: "确定",cancelButtonText: "取消",type: "warning",}).then((res) => {privalUser(e).then((res1) => {console.log(res1.data.data);this.$message.success(res1.data.data.msg);});});},// 关闭弹窗handleClose() {this.$refs.form.resetFields();this.dialogVisible = false;},// 点击取消按钮cancle() {this.handleClose();},// 表单的编辑handleEdit(res) {this.modelType = 1;this.dialogVisible = true;// 注意到对当前的数据进行深度拷贝this.form = JSON.parse(JSON.stringify(res));},//表单的删除handleDelete(res) {// let id = res.id;this.$confirm("此操作将永久删除该文件, 是否继续?", "提示", {confirmButtonText: "确定",cancelButtonText: "取消",type: "warning",}).then(() => {// 调用删除接口var that = this;detelDoctor(res).then((res) => {that.$message({type: "success",message: res.data.data.msg,});});this.getList();}).catch(() => {this.$message({type: "info",message: "已取消删除",});});},// 新增数handleAdd() {(this.modelType = 0), (this.dialogVisible = true);this.form = {};},getOpstions() {getOffice().then((res) => {this.options = res.data.data;});getWork().then((res) => {this.optionswork = res.data.data;});},// 查询数据handleSearch() {searchUser(this.userFrom).then((res) => {console.log(res.data.data);this.tableData = res.data.data.data;// this.getList();});},//分页handlePage(val) {console.log(val);},// 获取数据getList() {// 采用封装的api接口方法getDoctor().then((res) => {this.tableData = res.data.data;});},},// 挂载mounted() {this.getList();this.getOpstions();},
};
</script><style lang="less">
.messge {height: 90%;.common-table {position: relative;height: calc(100% - 62px);.page {position: absolute;bottom: 0;right: 20px;}.content {display: -webkit-box;-webkit-box-orient: vertical;-webkit-line-clamp: 3;overflow: hidden;}}.manage-hander {display: flex;justify-content: space-between;align-items: center;}
}
.el-table .cell {img {height: 50rpx;}
}
</style>
优质作品集
1.基于微信小程序的图书馆预约系统的设计与实现
2.基于微信小程序的实验室预约系统的设计与开发
3.基于微信小程序的番茄时钟的设计与实现(课设&毕设)
4.基于微信小程序的自习室预约系统的设计与实现
5.基于Uni-app的体育场馆预约系统的设计与实现
6.基于微信小程序的在线答题小程序设计与实现
8、源码获取
大家点赞、收藏、关注、评论啦 、查看👇🏻获取联系方式👇🏻

相关文章:
基于微信小程序的医院预约挂号系统的设计与实现
hello hello~ ,这里是 code袁~💖💖 ,欢迎大家点赞🥳🥳关注💥💥收藏🌹🌹🌹 🦁作者简介:一名喜欢分享和记录学习的在校大学生…...
【Linux】Socket编程—UDP
🔥 个人主页:大耳朵土土垚 🔥 所属专栏:Linux系统编程 这里将会不定期更新有关Linux的内容,欢迎大家点赞,收藏,评论🥳🥳🎉🎉🎉 文章目…...
2025年物联网相关专业毕业论文选题参考,文末联系,选题相关资料提供
一、智能穿戴解决方案研究方向 序号解决方案论文选题论文研究方向1智能腰带健康监测基于SpringBoot和Vue的智能腰带健康监测数据可视化平台开发研究如何利用SpringBoot和Vue技术栈开发一个数据可视化平台,用于展示智能腰带健康监测采集的数据,如心率、血…...
如何在WPS和Word/Excel中直接使用DeepSeek功能
以下是将DeepSeek功能集成到WPS中的详细步骤,无需本地部署模型,直接通过官网连接使用:1. 下载并安装OfficeAI插件 (1)访问OfficeAI插件下载地址:OfficeAI助手 - 免费办公智能AI助手, AI写作,下载…...
DeepSeek之Api的使用(将DeepSeek的api集成到程序中)
一、DeepSeek API 的收费模式 前言:使用DeepSeek的api是收费的 免费版: 可能提供有限的免费额度(如每月一定次数的 API 调用),适合个人开发者或小规模项目。 付费版: 超出免费额度后,可能需要按…...
使用DeepSeek实现AI自动编码
最近deepseek很火,低成本训练大模型把OpenAI、英伟达等股票搞得一塌糊涂。那它是什么呢,对于咱们程序员编码能有什么用呢?DeepSeek 是一款先进的人工智能语言模型,在自然语言处理和代码生成方面表现出色。它经过大量代码数据训练&…...
30~32.ppt
目录 30.导游小姚-介绍首都北京❗ 题目 解析 31.小张-旅游产品推广文章 题目 解析 32.小李-水的知识❗ 题目 解析 30.导游小姚-介绍首都北京❗ 题目 解析 新建幻灯片-从大纲-重置-检查设计→主题对话框→浏览主题:考生文件夹(注意&#x…...
Java的匿名内部类转为lamada表达式
在Java中,匿名内部类通常用于创建没有命名类的实例。例如,你可能需要创建一个实现了某个接口的匿名类,或者在需要重写某个方法时使用它。在Java 8及更高版本中,你可以使用Lambda表达式来替代传统的匿名内部类,使得代码…...
redis高级数据结构Stream
文章目录 背景stream概述消息 ID消息内容常见操作独立消费创建消费组消费 Stream弊端Stream 消息太多怎么办?消息如果忘记 ACK 会怎样?PEL 如何避免消息丢失?分区 Partition Stream 的高可用总结 背景 为了解决list作为消息队列是无法支持消息多播问题,Redis5.0…...
LeetCode781 森林中的兔子
问题描述 在一片神秘的森林里,住着许多兔子,但是我们并不知道兔子的具体数量。现在,我们对其中若干只兔子进行提问,问题是 “还有多少只兔子与你(指被提问的兔子)颜色相同?” 我们将每只兔子的…...
单硬盘槽笔记本更换硬盘
背景 本人的笔记本电脑只有一个硬盘槽,而且没有M.2的硬盘盒,只有一个移动硬盘 旧硬盘:512G 新硬盘:1T 移动硬盘:512G 参考链接:https://www.bilibili.com/video/BV1iP41187SW/?spm_id_from333.1007.t…...
EB生成配置的过程
EB Tresos Studio,简称EB,通过图形化的模式进行配置生成,并根据选项配置生成配置代码,即 MCAL 层各个模块的配置参数。 在 MCAL 代码中,分为静态代码和配置代码。静态代码,就是 AUTOSAR 规范内容,包含对硬件的封装以及标准化接口的封装;配置代码一般用于配置初始化结构…...
量化交易数据获取:xtquant库的高效应用
量化交易数据获取:xtquant库的高效应用 在量化交易领域,历史行情数据的重要性不言而喻。它不仅为策略回测提供基础,也是实时交易决策的重要参考。本文将介绍如何使用xtquant库来高效获取和处理历史行情数据。 技术背景与应用场景 对于量化…...
哨兵模式与 Redis Cluster:高可用 Redis 的深度剖析
深入探讨 Redis 高可用性解决方案:哨兵模式与 Redis Cluster 一、哨兵模式(Redis Sentinel)深入解析 (一)工作原理详解 哨兵模式通过一个或多个哨兵实例监控 Redis 主从复制集群,确保在主节点发生故障时…...
C++20新特性
作者:billy 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 前言 C20 是 C 标准中的一个重要版本,引入了许多新特性和改进,包括模块(Modules)、协程…...
电机实验曲线数据提取
处理Python 代码供参考: 1、曲线数据还原 import cv2 import numpy as np import matplotlib.pyplot as plt# 读取图像 image_path 1.png image cv2.imread(image_path) image_copy image.copy() # 创建图像副本,用于叠加显示# 转换为灰度图像 gray cv2.cvtCo…...
windows蓝牙驱动开发-调试及支持的HCI和事件
调试蓝牙配置文件驱动程序 开发蓝牙配置文件驱动程序时,可以使用驱动程序验证程序来协助其调试。 若要启用验证检查,必须为 Bthusb.sys 启用驱动程序验证程序。 如果不执行此操作,将禁用验证检查。 若要完全利用验证检查,请确保…...
Excel大数据量导入导出
github源码 地址(更详细) : https://github.com/alibaba/easyexcel 文档:读Excel(文档已经迁移) B 站视频 : https://www.bilibili.com/video/BV1Ff4y1U7Qc 一、JAVA解析EXCEL工具EasyExcel Java解析、生成Excel比较…...
Linux系统命令无法使用(glib库相关问题)
1.背景描述 Yum强制安装了一些软件,安装软件成功无报错,完成后不久突然发现系统出问题了,所有的命令无法使用了,如ls、mv、cat等基本命令报错。 relocation error: /lib64/libpthread.so.0: symbol_libc_dl_error_tsd …...
Qt修仙之路2-1 仿QQ登入 法宝初成
widget.cpp #include "widget.h" #include<QDebug> //实现槽函数 void Widget::login1() {QString userusername_input->text();QString passpassword_input->text();//如果不勾选无法登入if(!check->isChecked()){qDebug()<<"xxx"&…...
SpringBoot-17-MyBatis动态SQL标签之常用标签
文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...
【Linux】shell脚本忽略错误继续执行
在 shell 脚本中,可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行,可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令,并忽略错误 rm somefile…...
前端开发面试题总结-JavaScript篇(一)
文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包(Closure)?闭包有什么应用场景和潜在问题?2.解释 JavaScript 的作用域链(Scope Chain) 二、原型与继承3.原型链是什么?如何实现继承&a…...
tree 树组件大数据卡顿问题优化
问题背景 项目中有用到树组件用来做文件目录,但是由于这个树组件的节点越来越多,导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多,导致的浏览器卡顿,这里很明显就需要用到虚拟列表的技术&…...
安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)
船舶制造装配管理现状:装配工作依赖人工经验,装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书,但在实际执行中,工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...
QT3D学习笔记——圆台、圆锥
类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体(对象或容器)QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质(定义颜色、反光等)QFirstPersonC…...
JavaScript 数据类型详解
JavaScript 数据类型详解 JavaScript 数据类型分为 原始类型(Primitive) 和 对象类型(Object) 两大类,共 8 种(ES11): 一、原始类型(7种) 1. undefined 定…...
解析“道作为序位生成器”的核心原理
解析“道作为序位生成器”的核心原理 以下完整展开道函数的零点调控机制,重点解析"道作为序位生成器"的核心原理与实现框架: 一、道函数的零点调控机制 1. 道作为序位生成器 道在认知坐标系$(x_{\text{物}}, y_{\text{意}}, z_{\text{文}}…...
深度解析云存储:概念、架构与应用实践
在数据爆炸式增长的时代,传统本地存储因容量限制、管理复杂等问题,已难以满足企业和个人的需求。云存储凭借灵活扩展、便捷访问等特性,成为数据存储领域的主流解决方案。从个人照片备份到企业核心数据管理,云存储正重塑数据存储与…...
npm安装electron下载太慢,导致报错
npm安装electron下载太慢,导致报错 背景 想学习electron框架做个桌面应用,卡在了安装依赖(无语了)。。。一开始以为node版本或者npm版本太低问题,调整版本后还是报错。偶尔执行install命令后,可以开始下载…...
