医院信息化与智能化系统(6)
医院信息化与智能化系统(6)
这里只描述对应过程,和可能遇到的问题及解决办法以及对应的参考链接,并不会直接每一步详细配置
如果你想通过文字描述或代码画流程图,可以试试PlantUML
,告诉GPT你的文件结构,让他给你对应的代码
预约挂号微服务模块搭建
前端知识点补充,此章节不会详细讲具体前端的每个知识点
1、npm run dev
在终端输入启动项目的命令npm run dev
语句会直接进入模版网页中,但我们需要了解一下大致的流程。
它会首先找到package.json 文件:
npm 会查看项目根目录下的 package.json 文件,寻找 scripts 部分的 dev 脚本定义。
随后它会执行该脚本:
"dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js"
这条命令的作用是启动一个 Webpack 开发服务器
,支持内联热模块替换
,显示打包进度
,并使用指定的 Webpack 配置文件
进行打包。
在webpack.dev.conf.js
文件中有一个语句
const baseWebpackConfig = require('./webpack.base.conf')
,作用是导入一个通用的 Webpack 配置文件,并允许在当前的配置文件中使用这些基础配置。
那来分析一下这个webpack.base.conf.js
的部分
入口名称:
app
入口文件:
src文件夹下的main.js
filename:
指定输出文件的名称,这里使用 [name].js,其中 [name] 将被入口名称替换(app.js)。
HtmlWebpackPlugin:
该插件生成一个 HTML(index.html)
文件,并自动将打包后的 main.js文件注入到 该HTML,作为用户在浏览器中看到的页面结构。
entry: {app: './src/main.js'},output: {path: config.build.assetsRoot,filename: '[name].js',...}...plugins: [new HtmlWebpackPlugin({filename: 'index.html',template: 'index.html',inject: true,favicon: resolve('favicon.ico'),title: 'vue-admin-template'})]
为了理清楚工程文件
index.html:
项目的入口文件。它包含基本的 HTML 结构,其中<div id="app"></div>
是用于挂载 Vue 实例的元素。所有的 Vue 组件最终都会渲染到这个 div 中。
main.js:
Vue 项目的重要文件,负责初始化应用。它导入 Vue 库、应用的核心组件(如 App.vue
)、路由配置(如 router/index.js
)和状态管理(如 store/index.js
)。在这里,创建 Vue 实例并将其挂载到 #app 元素
上。
App.vue:
应用的核心组件,负责结构和路由管理。它通常包含 <router-view/>
组件,用于动态渲染当前路由对应的视图。App.vue 还可以包含全局样式和布局。通过 Vue Router
,App.vue
控制页面的切换,实现单页面应用的功能。
还有一个理解(可能需要考虑是否正确
):
main.js:
主要负责导入依赖(如 Vue、插件、样式库等),并在此处建立整个应用的模块之间的依赖关系。由于它是应用的入口文件,Webpack 会打包这个文件及其所有导入的依赖,确保这些依赖在浏览器中可用。
App.vue:
主要是作为一个组件的定义,负责导入其他组件并构建应用的 UI 结构。它内部的组件和逻辑将被 main.js 导入并渲染,形成完整的应用视图。
因此,main.js
作为依赖导入的中心文件,负责初始化和设置,而 App.vue
则作为组件的容器,负责构建用户界面。
继续看代码
在webpack.dev.conf.js
中'process.env': require('../config/dev.env')
代码表示了一个全局常量值,该文件是一个js
文件,指定了默认访问后端的接口路径BASE_API
,后续可能要根据自己的路径进行修改。
在该文件的同一目录下,有一个名为index.js
的文件,这里有几个需要关注的值。
host: 'localhost'
当前项目主机名port: 9528
当前项目端口号useEslint: true
代码检查插件,可以改为false
2、登录代码改造
遇到的问题:默认情况下,前端项目已经实现了登录功能,后端连接到远程Mock平台
的模拟数据接口进行登录,而Mock平台地址无效
,导致前端的登录功能无法执行.
解决方法是:修改.\src\store\modules\user.js
中的部分代码
此处主要的问题是调用一个名为login
的函数。当 login 函数成功返回时,执行这个回调,response
是从服务器返回的响应。应对方法是设置一个默认的data
对象,里面包含token
默认值。
actions: {// 登录Login({ commit }, userInfo) {const data = {'token':'admin'}setToken(data.token)commit('SET_TOKEN', data.token)// const username = userInfo.username.trim()// return new Promise((resolve, reject) => {// login(username, userInfo.password).then(response => {// const data = response.data// setToken(data.token)// commit('SET_TOKEN', data.token)// resolve()// }).catch(error => {// reject(error)// })// })}
获取用户信息部分同理,其中roles
表示用户角色
,avatar
表示头像
// 获取用户信息GetInfo({ commit, state }) {const data = {'roles':'admin','name':'admin','avatar':'https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif'}if (data.roles && data.roles.length > 0) { // 验证返回的roles是否是一个非空数组commit('SET_ROLES', data.roles)} else {reject('getInfo: roles must be a non-null array !')}commit('SET_NAME', data.name)commit('SET_AVATAR', data.avatar)// return new Promise((resolve, reject) => {// getInfo(state.token).then(response => {// const data = response.data// if (data.roles && data.roles.length > 0) { // 验证返回的roles是否是一个非空数组// commit('SET_ROLES', data.roles)// } else {// reject('getInfo: roles must be a non-null array !')// }// commit('SET_NAME', data.name)// commit('SET_AVATAR', data.avatar)// resolve(response)// }).catch(error => {// reject(error)// })// })},
登出
与前端登出
代码操作同理
在./src/utils/request.js
找到
config.headers['X-Token'] = getToken()
语句,并将X-Token
对应改为我们之前代码中配置的token
3、框架开发流程
第一步是添加路由
在router/index.js
是在 Vue.js 项目中用于配置路由
的文件,负责定义页面访问路径与组件之间的映射关系
。
以其中部分代码作为讲解:
path: '/example'
是定义的一级路由路径
,当用户访问 /example 路径时,系统会匹配到这个路由配置。
redirect: '/example/table'
定义了路由的重定向
行为,当访问/example
时,会自动重定向到 /example/table
,即用户访问 /example 时直接跳转到表格页面。
name: 'Example'
为这个路由配置
指定一个名字。通常 name 属性在需要通过编程导航到该路由时使用,比如 router.push({ name: 'Example' })
meta: { title: 'Example', icon: 'example' }
其中meta
是路由的元信息,可以包含任意自定义属性。这段元数据中的 title
会作为页面标题显示,icon
表示这个页面在菜单中对应的图标
,值为 example
的图标
children: [...]
是这个路由的子路由
配置,表示 ·/example
下包含两个子路由:table
和 tree
,用于展示不同的内容。
第二步是设置跳转页面路径
component: () => import('@/views/table/index'):
使用懒加载
的方式加载组件,只有访问到该路由时,才会异步加载该组件,节省资源。
{path: '/example',component: Layout,redirect: '/example/table',name: 'Example',meta: { title: 'Example', icon: 'example' },children: [{path: 'table',name: 'Table',component: () => import('@/views/table/index'),meta: { title: 'Table', icon: 'table' }},{path: 'tree',name: 'Tree',component: () => import('@/views/tree/index'),meta: { title: 'Tree', icon: 'tree' }}]}
第三步 在api文件夹
创建js
文件,用来封装和后端交互的请求逻辑
以 component: () => import('@/views/table/index')
为例,它跳转的其实是index.vue文件
创建API:
在 api 文件夹中创建一个 table.js
文件,用来封装和后端交互的请求逻辑。
import request from '@/utils/request'; // 通常会有一个封装好的请求工具// 获取表格数据
export function fetchTableData(query) {return request({url: '/api/table/list', // 后端 API 地址method: 'get',params: query});
}
@/utils/request
文件的核心功能就是基于 axios
或其他 HTTP 库
,统一封装 HTTP 请求的逻辑
,包括:
- 配置基础 URL,简化 API 请求路径。
- 请求拦截器,添加 Token 或其他公共请求头。
- 响应拦截器,统一处理响应数据和错误。
- 错误处理,简化每个 API 请求的异常处理。
- 请求超时、取消重复请求等功能,提高用户体验。
第四步 在页面引入js
文件,使用axios
进行调用
调用 API 并展示数据:
在 views/table/index.vue
中,通过引入api/table.js
中的方法获取数据,并将数据展示在页面上。
相关文章:

医院信息化与智能化系统(6)
医院信息化与智能化系统(6) 这里只描述对应过程,和可能遇到的问题及解决办法以及对应的参考链接,并不会直接每一步详细配置 如果你想通过文字描述或代码画流程图,可以试试PlantUML,告诉GPT你的文件结构,让他给你对应的…...
前端学习---(6)js基础--4
Promise Promise 是异步编程的一种新的解决方案和规范。 Promise优点: 1、可以很好地解决ES5中的回调地狱的问题(避免了层层嵌套的回调函数)。 2、统一规范、语法简洁、可读性和和可维护性强。 3、Promise 对象提供了简洁的 API,使得管理异步…...

241026-RHEL如何以root身份卸载Docker
在 RHEL 8.8 中,以 root 身份卸载 Docker 可以通过以下步骤完成: 停止 Docker 服务(如果已启动): sudo systemctl stop docker删除 Docker 包: 运行以下命令卸载 Docker 引擎及其依赖包(docker-…...

iPhone当U盘使用的方法 - iTunes共享文件夹无法复制到电脑怎么办 - 如何100%写入读出
效果图 从iPhone复制文件夹到windows电脑 步骤windows 打开iTunes通过USB连接iPhone和电脑手机允许授权iTunes中点击手机图标,进入到点击左边“文件共享”,在右边随便选择一个App(随意...)写入U盘:拖动电脑的文件&am…...

jenkins ssh 免密报错Host key verification failed.
jenkins 发布项目,ssh连接远程服务器时报错:Host key verification failed. 解决: 原因是生成的sshkey不是用的jenkins用户,所以切换用户到:jenkins重新生成sshkey su jenkins ssh-keygen -t rsa ssh-copy-id -i ~/…...
智能科学与技术(一级学科)介绍
智能科学与技术:探索智能的边界与未来 智能科学与技术的起源与发展学科定位与内涵学科范围与研究方向培养目标相关学科 在当今这个信息爆炸的时代,人工智能(AI)已经成为科技创新的重要驱动力。随着技术的不断进步,智能…...

iOS调试真机出现的 “__llvm_profile_initialize“ 错误
一、错误形式: app启动就崩溃,如下: Demo__llvm_profile_initialize:0x1045f7ab0 <0>: stp x20, x19, [sp, #-0x20]!0x1045f7ab4 <4>: stp x29, x30, [sp, #0x10]0x1045f7ab8 <8>: add x29, sp, #0x100x1…...
Android SELinux——neverallow问题处理(十六)
上一篇我们介绍了通过添加允许策略处理问题,这里我们主要来看一些 neverallow 策略问题该怎么处理。 一、neverallow介绍 遇到 neverallow 规则问题,千万别急着去注释/剔除里面原有的规则(原生的尽量别动)。增加 allow 规则是常见的解决办法,但是随着 android 版本的升级…...
Vue 关于路由
关于路由 路由的模式与区别 路由的两种模式: hashhistory 区别: 表象不同 hash 模式中,在地址里以 /#/ 分隔;history 模式中,地址里以 / 分隔。关于找不到当前页面发送请求的问题 history 模式会给后端发送一次请…...
香港海洋投资启动创新海洋牧场,领航全球海洋经济
香港,这座国际大都市,以其独特的地理位置和深厚的海洋文化底蕴,再次站在了全球海洋经济发展的前沿。近日,香港海洋投资发展有限公司(以下简称“香港海洋投资”)在万众瞩目中,正式宣布启动其创新…...
C/C++ 每日一练:二分查找
二分查找是一种高效的查找算法,用于在有序数组中定位目标元素的位置。它的核心思想是每次查找时将范围缩小一半。 题目要求 实现一个二分查找算法。给定一个递增排序的整型数组 arr 和一个目标值 target,编写一个函数 binarySearch,若 targe…...

Linux基础IO--重定向--缓冲区
1,为什么语言喜欢做封装? 我们先知道一个概念,显示器叫做字符设备,根据ACSLL码来打印数据,所以我们从键盘输入的 1234,在显示器看来就是一个一个的字符(1,2,3,4)而不是一千两百三十四: 下图输入字符类型数…...
Conda 安装与使用指南
Conda 是一个开源的软件包管理和环境管理系统,主要解决一个系统上同时要使用python2,python3等等多个python环境的切换问题,支持多种编程语言(如 Python、R 等),可以在 Windows、macOS 和 Linux 上运行。它…...
C++中获取硬盘ID的方法
在C++中,直接获取硬盘的ID(通常是硬盘的序列号或唯一标识符)并不是一项简单的任务,因为这通常涉及到低级的硬件访问,这通常是由操作系统或特定的硬件驱动程序管理的。标准C++库并没有提供直接访问硬盘ID的功能。 然而,可以通过以下几种方法来获取硬盘的ID: 操作系统特定…...

OpenRTP 传输增加OpenRTPServer
开源地址 最近增加了OpenRTPServer, 已经修改完成一版放在了目录下,window和linux下编译都成功了,不过由于修改代码CMakefile 需要修改,先放放 OpenRTP开源地址 vlc得纠错传输方式 我发现我代码写错以后,vlc 依然能…...
使用vue3+cesium+earthsdk+supermap实现通视分析(有版本报错问题)
main.js: 这个文件是项目的入口文件,主要进行了以下操作: 使用Vue 3的createApp创建应用实例。加载了element-plus UI 组件库。加载了router和store,以及axios用于发送HTTP请求。将@turf/turf和自定义的bus.js注册到全局属性中,便于在组件中使用。环境配置需求: 你需要安…...

python 轮子是什么
此一词语的由来是因为轮子由人类所发明,且在各方面都带来许多便利。既然轮子已被发明,而且在使用上没有什么缺陷,重新再发明一次轮子是没有意义的,只是浪费时间,分散研究者的资源,使其无法投入更有意义及价…...

农作物大豆病虫害识别分类数据集(猫脸码客第227期)
农作物大豆病虫害识别分类数据集 大豆,作为全球重要的粮食作物之一,不仅承载着人类饮食中的重要角色,还深刻影响着农业经济的发展。然而,大豆的生长过程中,常常面临着来自病害和虫害的双重威胁。这些病虫害不仅会影响…...

如何在算家云搭建GPT-SOVITS(语音转换)
一、模型介绍 GPT-SOVITS是一款强大的小样本语音转换和文本转语音 WebUI工具。它集成了声音伴奏分离、自动训练集分割、中文ASR和文本标注等辅助工具。 具有以下特征: 零样本 TTS: 输入 5 秒的声音样本并体验即时文本到语音的转换。少量样本 TTS&…...

ThinkPad T480拆机屏幕改装:便携式显示器DIY指南
ThinkPad T480拆机屏幕改装:便携式显示器DIY指南 本文记录了将旧笔记本电脑 T480 拆机屏幕改装为便携式显示器的全过程。作者在决定升级设备后,选择通过 DIY 方式利用原有的屏幕资源。文章详细介绍了屏幕驱动板的安装、螺丝孔的剪裁、排线连接及固定的步…...

XML Group端口详解
在XML数据映射过程中,经常需要对数据进行分组聚合操作。例如,当处理包含多个物料明细的XML文件时,可能需要将相同物料号的明细归为一组,或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码,增加了开…...

成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战
在现代战争中,电磁频谱已成为继陆、海、空、天之后的 “第五维战场”,雷达作为电磁频谱领域的关键装备,其干扰与抗干扰能力的较量,直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器,凭借数字射…...

听写流程自动化实践,轻量级教育辅助
随着智能教育工具的发展,越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式,也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建,…...

C++使用 new 来创建动态数组
问题: 不能使用变量定义数组大小 原因: 这是因为数组在内存中是连续存储的,编译器需要在编译阶段就确定数组的大小,以便正确地分配内存空间。如果允许使用变量来定义数组的大小,那么编译器就无法在编译时确定数组的大…...

安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖
在Vuzix M400 AR智能眼镜的助力下,卢森堡罗伯特舒曼医院(the Robert Schuman Hospitals, HRS)凭借在无菌制剂生产流程中引入增强现实技术(AR)创新项目,荣获了2024年6月7日由卢森堡医院药剂师协会࿰…...
苹果AI眼镜:从“工具”到“社交姿态”的范式革命——重新定义AI交互入口的未来机会
在2025年的AI硬件浪潮中,苹果AI眼镜(Apple Glasses)正在引发一场关于“人机交互形态”的深度思考。它并非简单地替代AirPods或Apple Watch,而是开辟了一个全新的、日常可接受的AI入口。其核心价值不在于功能的堆叠,而在于如何通过形态设计打破社交壁垒,成为用户“全天佩戴…...
django blank 与 null的区别
1.blank blank控制表单验证时是否允许字段为空 2.null null控制数据库层面是否为空 但是,要注意以下几点: Django的表单验证与null无关:null参数控制的是数据库层面字段是否可以为NULL,而blank参数控制的是Django表单验证时字…...

Vue3 PC端 UI组件库我更推荐Naive UI
一、Vue3生态现状与UI库选择的重要性 随着Vue3的稳定发布和Composition API的广泛采用,前端开发者面临着UI组件库的重新选择。一个好的UI库不仅能提升开发效率,还能确保项目的长期可维护性。本文将对比三大主流Vue3 UI库(Naive UI、Element …...
在Spring Boot中集成RabbitMQ的完整指南
前言 在现代微服务架构中,消息队列(Message Queue)是实现异步通信、解耦系统组件的重要工具。RabbitMQ 是一个流行的消息中间件,支持多种消息协议,具有高可靠性和可扩展性。 本博客将详细介绍如何在 Spring Boot 项目…...

npm安装electron下载太慢,导致报错
npm安装electron下载太慢,导致报错 背景 想学习electron框架做个桌面应用,卡在了安装依赖(无语了)。。。一开始以为node版本或者npm版本太低问题,调整版本后还是报错。偶尔执行install命令后,可以开始下载…...