RuoYi-Cloud集成DataRoom大屏设计器

基于RuoYi-Cloud 3.6.3 版本集成

先贴一下开源地址: https://gitee.com/wxjstudy/jove-fast
DataRoom开源地址: https://gitee.com/gcpaas/DataRoom

后端

新建modules

image.png

启动类

增加注解扫描,以及配置分页插件

import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import com.gccloud.common.constant.CommonConst;
import com.gccloud.dashboard.core.constant.DashboardConst;
import com.gccloud.dataroom.core.constant.DataRoomConst;
import com.gccloud.dataset.constant.DatasetConstant;
import com.jovefast.common.security.annotation.EnableCustomConfig;
import com.jovefast.common.security.annotation.EnableFastFeignClients;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;

/**
 * 可视化管理模块
 *
 * @author Acechengui
 */
@EnableCustomConfig
@EnableFastFeignClients
@SpringBootApplication(scanBasePackages = {DataRoomConst.ScanPackage.COMPONENT,DatasetConstant.ScanPackage.COMPONENT, CommonConst.ScanPackage.COMPONENT,"com.jovefast"})
@MapperScan(value = {DataRoomConst.ScanPackage.DAO,DatasetConstant.ScanPackage.DAO})
public class JoveDataRoomApplication {

    public static void main(String[] args) {

        SpringApplication.run(JoveDataRoomApplication.class, args);
        System.out.println("(♥◠‿◠)ノ゙  可视化管理模块启动成功   ლ(´ڡ`ლ)゙ ");
        System.out.println("STARTING SUCCESS");
    }

    /**
     * 分页插件
     *
     * @return PaginationInterceptor
     */
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
        return interceptor;
    }
}

注意:scanBasePackages中除了大屏的相关包路径,还加上了 “com.jovefast” 的路径扫描,这是为了扫描到自己项目包的一些配置,比如跨域配置,不加的话,可能会影响自身接口的访问

pom依赖

点击查询最新版本号

<properties>
    <json.version>20220320</json.version>
    <dataroom.core.version>2.0.0.RELEASE</dataroom.core.version>
</properties>

<!-- SpringCloud Alibaba Nacos -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

<!-- SpringCloud Alibaba Nacos Config -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

<!-- SpringCloud Alibaba Sentinel -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>

<!-- SpringBoot Actuator -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

<!-- Mysql Connector -->
<dependency>
    <groupId>com.mysql</groupId>
    <artifactId>mysql-connector-j</artifactId>
</dependency>

<!--  Common Log -->
<dependency>
    <groupId>com.jovefast</groupId>
    <artifactId>jovefast-common-log</artifactId>
</dependency>

<!--  Common core -->
<dependency>
    <groupId>com.jovefast</groupId>
    <artifactId>jovefast-common-core</artifactId>
</dependency>

<!-- jovefast Common DataSource -->
<dependency>
    <groupId>com.jovefast</groupId>
    <artifactId>jovefast-common-datasource</artifactId>
</dependency>

<!-- 大屏设计器 -->
<dependency>
    <groupId>com.gccloud</groupId>
    <artifactId>dataroom-core</artifactId>
    <version>${dataroom.core.version}</version>
</dependency>
<!--  jackson  -->
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-annotations</artifactId>
</dependency>
<dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>${json.version}</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.datatype</groupId>
    <artifactId>jackson-datatype-json-org</artifactId>
</dependency>

以上依赖中,jovefast 就是若依的包名,原本应是ruoyi
bootstrap.yml与logback.xml怎么配置这里就不叙述了,跟若依一样的,注意端口号就行

nacos配置yml

配置管理–>配置列表,新增配置(对应命名空间),比如这里
Data Id命名为 jove-dataroom-dev.yml
Group为默认的 DEFAULT_GROUP

image.png
具体参考配置如下:

# spring配置
spring:
  groovy:
    template:
      check-template-location: false
  servlet:
    multipart:
      max-file-size: 100MB
      max-request-size: 100MB
  redis:
    host: 127.0.0.1
    port: 6379
    password: 123456
    database: 1
  resources:
    static-locations: classpath:/static/,classpath:/META-INF/resources/,classpath:/META-INF/resources/webjars/,file:${gc.starter.file.basePath}
  # 静态资源配置
  mvc:
    throw-exception-if-no-handler-found: true
    # 静态资源访问接口前缀
    static-path-pattern: /static/**
    view:
      prefix: classpath:/static/
      suffix: .html

  datasource:
    druid:
      stat-view-servlet:
        enabled: true
        loginUsername: admin
        loginPassword: 123456
    dynamic:
      druid:
        initial-size: 5
        min-idle: 5
        maxActive: 20
        maxWait: 300000
        timeBetweenEvictionRunsMillis: 300000
        minEvictableIdleTimeMillis: 300000
        maxEvictableIdleTimeMillis: 600000
        idleConnectionTestPeriod: 120
        testConnectionOnCheckout: false
        testConnectionOnCheckin: true
        validationQuery: SELECT 1
        testWhileIdle: true
        testOnBorrow: false
        testOnReturn: false
        usePingMethod: false
        poolPreparedStatements: true
        maxPoolPreparedStatementPerConnectionSize: 20
        filters: stat,slf4j
        connectionProperties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000
      datasource:
          # 主库数据源
          master:
            type: com.alibaba.druid.pool.DruidDataSource
            driver-class-name: com.mysql.cj.jdbc.Driver
            url: jdbc:mysql://127.0.0.1:3306/dataroom?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&autoReconnect=true&failOverReadOnly=false&serverTimezone=GMT%2B8
            username: root
            password: 123456
# mybatis配置
mybatis-plus:
  # mybatis plus xml配置文件扫描,多个通过分号隔开
  mapper-locations: classpath*:mapper/**/*.xml
  # xml中别名文件扫描,多个通过逗号隔开
  type-handlers-package: com.jovefast,com.gccloud
gc:
  starter:
    dataroom:
      component:
        DataRoomGlobalExceptionHandler: false
    file:
      # minio服务提供的文件访问地址
      urlPrefix: http://192.168.20.98:9000/
      # 切换文件服务类型为minio
      type: minio
      minio:
        url: http://192.168.20.98:9000
        # minio服务设置的accessKey
        accessKey: admin 
        # minio服务设置的secretKey
        secretKey: 123456
        # 存储到minio的桶
        bucketName: dataroom

网关gateway配置

spring:
  cloud:
    gateway:
      discovery:
        locator:
          lowerCaseServiceId: true
          enabled: true
      routes:
        # 大屏服务
        - id: jove-dataroom-dev
          uri: lb://jove-dataroom-dev
          filters:
            - StripPrefix=1
          predicates:
            - Path=/dataroom/**

控制大屏的接口权限 (可选)

:::info
**注意:**仪表盘和大屏的接口权限控制是通用的,如果已经实现过仪表盘的了,那么就不需要再次实现,直接若依的菜单管理中把大屏相关的权限标识添加上就行,并且关于数据集和数据源部分的权限标识也是通用的,即dataset和datasource开头的权限标识,无需再次添加
:::
为了能够控制大屏相关接口的授权与访问,我们可以参考 自定义大屏接口权限 来实现大屏权限对接
如图,我们创建一个类 PermissionServiceImpl ,并实现大屏提供的 IApiPermissionService 接口,在 **verifyApiPermission **方法中,我们通过若依提供的 SecurityUtils 获取当前登录用户的权限列表,并进行判断即可
代码参考如下

@Service
public class PermissionServiceImpl implements IApiPermissionService {

    @Override
    public boolean verifyApiPermission(HttpServletRequest request, String... permission) {
        // 获取当前用户的权限
        LoginUser loginUser = SecurityUtils.getLoginUser();
        Set<String> permissions = loginUser.getPermissions();
        if (permissions.contains("*:*:*")) {
            // 若依的全部权限标识
            return true;
        }
        // 判断当前用户是否拥有对应的权限
        for (String s : permission) {
            if (!permissions.contains(s)) {
                return false;
            }
        }
        // 返回值true标识校验通过
        return true;
    }
}

当然,这只是完成了后端的校验,我们还需要将大屏相关的接口权限标识添加到若依系统中,这时就可以到若依的菜单管理中,将大屏提供的权限标识全部添加为 按钮 权限,大屏提供的权限标识如下所示
新增权限参考如下:

screen:view大屏页面的详情、列表接口权限
screen:add大屏页面的新增接口权限
screen:update大屏页面的修改接口权限
screen:delete大屏页面的删除接口权限
datasource:view数据源的详情、列表接口权限
datasource:add数据源的新增接口权限
datasource:update数据源的编辑接口权限
file:view文件的查询接口权限
file:upload文件的上传接口权限
file:download文件的下载接口权限
file:delete文件的删除接口权限
component:view组件的查询接口权限
component:add组件的新增接口权限
component:update组件的编辑接口权限
component:delete组件的删除接口权限
map:view地图数据的查询接口权限
map:add地图数据的新增接口权限
map:update地图数据的编辑接口权限
map:delete地图数据的删除接口权限
datasource:delete数据源的删除接口权限
datasource:test数据源的测试接口权限
dataset:view数据集的详情、列表接口权限
dataset:add数据集的新增接口权限
dataset:update数据集的编辑接口权限
dataset:delete数据集的删除接口权限
dataset:execute数据集的数据获取接口权限
dataset:category数据集的分类树相关查询接口权限
dataset:category:edit数据集的分类树相关操作接口权限(增删改)
dataset:label数据集标签相关查询接口权限
dataset🏷edit数据集标签相关操作接口权限(增删改)

image.png
新增完成后,就可以按照你的需求将不同的权限赋给不同的角色和用户了,这样就完成了通过若依来控制接口的访问权限的需求了.

前端

依赖

安装最新版本的依赖

npm install @gcpaas/data-room-ui
  • 如需安装指定版本的依赖
npm install @gcpaas/data-room-ui@<version>

这里 使用具体版本号替代, Npm仓库:@gcpaas/data-room-ui

新增http.js

  • 将下面的文件放入到自己的项目中,比如utils文件夹下

http.js

  • 修改请求拦截或响应拦截处的代码,比如添加自己系统的token或其他需要参数配置.

下面是修改内容:

//引入
import { getToken } from '@/utils/auth'

/**
 * 统一进行异常输出
 * 如果异常只是弹框显示即可,可使用该实例
 */
const httpConfig = {
  timeout: 1000 * 30,
  withCredentials: true,
  //增加请求头,让请求携带token
  headers: {
    'Content-Type': 'application/json; charset=utf-8',
    'Authorization': "Bearer " + getToken()
  }
}

//将post/get请求的以下代码注释掉
if (!url.startsWith('http')) {
     url = window.BS_CONFIG?.httpConfigs?.baseURL + url
}

配置main.js

这里我将http.js文件名改为 dataroom-http.js

import { getToken } from '@/utils/auth'
import * as $dataroomhttpaxios from '@/utils/dataroom-http.js'
//大屏设计组件
import { registerConfig as registerConfigDataRoom } from '@gcpaas/data-room-ui'
// 全局方法挂载
// 将大屏的aixos实例挂载到Vue上
Vue.prototype.$dataRoomAxios = $dataroomhttpaxios

// 使用大屏提供的方法,进行后端服务地址注册,这里使用默认的
registerConfigDataRoom({
  routers: {
    // 大屏列表页面
    pageListUrl: '/big-screen-list',
    // 大屏设计页面
    designUrl: '/big-screen/design',
    // 大屏预览页面
    previewUrl: '/big-screen/preview',
    // 数据源管理页面
    dataSourceUrl: '/big-screen-dataSource',
    // 数据集管理页面
    dataSetUrl: '/big-screen-dataSet',
    // 资源库页面
    sourceUrl: '/big-screen-source',
    // 组件库页面
  	componentUrl: '/big-screen-components',
    // 指定回退的路由
    pageManagementUrl:'/big-screen-list',
    // 业务组件路由
    bizComponentPreviewUrl: '/big-screen-biz-component-preview',
    bizComponentDesignUrl: '/big-screen-biz-component-design'
  },
  httpConfigs: {
    // 这里是大屏设计器对应的后端服务地址,可以为具体值,也可以在其他地方进行配置
		// 比如环境变量文件中,假设在 .env.development中配置了地址为:VUE_BIGSCREEN_BASE_URL='http://192.168.xx.xx:xxxx/xxx'
    baseURL: process.env.VUE_APP_BASE_API + '/dataroom',
    // 这里是大屏文件的访问前缀,一般和后端配置的gc.starter.file.urlPrefix保持一致即可
    fileUrlPrefix: 'http://192.168.0.1:8081/server/static',
    //不配置这里会导致文件上传无token等问题
    headers: {
      Authorization: 'Bearer ' + getToken()
    }
  },
  // 资源库允许上传的文件类型
  sourceExtends:['jpg','gif','bmp','svg','png','ico'],
  // 自定义title和logo等属性 
  starter: {
    title: '大屏设计器',
    logo: 'https://xxx/xxx/logo.png'
  }
// 此处第二个参数为自己项目中的路由实例对象
}, router)

:::info
**注意:**fileUrlPrefix如果不配置,默认会使用baseUrl + /static 作为文件访问前缀,这是大屏后端中的默认配置,如果与后端配置不一致会导致资源库文件无法访问(比如切换了minio之类的文件服务器存储文件,这时访问前缀应该修改为minio提供的文件访问地址)
:::

vuex模块注册大屏设计器store

在src/store/index.js

//引入
import { $dataRoomStore } from '@gcpaas/data-room-ui'

const store = new Vuex.Store({
  modules: {
    app,
    dict,
    user,
    tagsView,
    permission,
    settings,
    contract,
    // 注册大屏设计器的store
    bigScreen: $dataRoomStore
  },
  getters
})
export default store

Webpack配置文件添加相关配置

module.exports = {
  configureWebpack: config => {
    Object.assign(config.resolve, {
      alias: {
        // 加上对
        'data-room-ui': resolve('node_modules/@gcpaas/data-room-ui/packages')
      }
    })
  },
  	// 将 data-room-ui 依赖路径下的SVG图标资源添加到应用程序中
    chainWebpack: config => {
        config.module
          .rule('svg')
          .exclude.add(resolve('./node_modules/@gcpaas/data-room-ui/packages/assets/images/dataSourceIcon/svg'))
          .add(resolve('./node_modules/@gcpaas/data-room-ui/packages/assets/images/pageIcon/svg'))
          .add(resolve('./node_modules/@gcpaas/data-room-ui/packages/assets/images/bigScreenIcon/svg'))
          .add(resolve('./node_modules/@gcpaas/data-room-ui/packages/Svgs/svg'))
          .add(resolve('./node_modules/@gcpaas/data-room-ui/packages/assets/images/alignIcon/svg'))
          .end()
        config.module
          .rule('icons')
          .test(/\.svg$/)
          .include.add(resolve('./node_modules/@gcpaas/data-room-ui/packages/assets/images/dataSourceIcon/svg'))
          .add(resolve('./node_modules/@gcpaas/data-room-ui/packages/assets/images/pageIcon/svg'))
          .add(resolve('./node_modules/@gcpaas/data-room-ui/packages/assets/images/bigScreenIcon/svg'))
          .add(resolve('./node_modules/@gcpaas/data-room-ui/packages/Svgs/svg'))
          .add(resolve('./node_modules/@gcpaas/data-room-ui/packages/assets/images/alignIcon/svg'))
          .end()
          .use('svg-sprite-loader')
          .loader('svg-sprite-loader')
          .options({
            symbolId: 'icon-[name]'
          })
          .end()
  },
  // 加排除node_modules中对需要进行语法转义的依赖
  transpileDependencies: [
    '@gcpaas/data-room-ui'
  ]
}

访问设计器

启动项目后,登录系统,假设访问大屏设计器的页面列表页面,那么地址 http://localhost/big-screen-list

常见问题

数据集管理页面浏览器控制台报错

image.png
是没有安装JQ的原因
执行安装命令

npm install --save jquery

configureWebpack: {
    name: name,
    resolve: {
      alias: {
        '@': resolve('src'),
        'data-room-ui': resolve('node_modules/@gcpaas/data-room-ui/packages'),
        'dashPackages': resolve('node_modules/@gcpaas/dash-board-ui/packages')
      }
    },
    plugins: [
      //此处配置JQ
      new webpack.ProvidePlugin({
        jQuery: 'jquery',
        $: 'jquery',
        'window.jQuery': 'jquery'
      })
    ],
  },

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Leetcode—54.螺旋矩阵【中等】

2023每日刷题&#xff08;七十&#xff09; Leetcode—54.螺旋矩阵 实现代码 class Solution { public:vector<int> spiralOrder(vector<vector<int>>& matrix) {vector<int> ans;int m matrix.size();int n matrix[0].size();int row 0, col…

虚拟环境和Pycharm中均有transforms仍报ModuleNotFoundError:No module named ‘transformers‘

问题&#xff1a;运行新模型&#xff0c;配置了新环境&#xff0c;下载了包后&#xff0c;仍然报ModuleNotFoundError&#xff1a;No module named transformers 错误。 查看Pycharm解释器&#xff1a; 没问题&#xff01;&#xff01;&#xff01;&#xff1f; 命令行查看虚…

阿赵UE学习笔记——5、创建关卡元素

阿赵UE学习笔记目录 大家好&#xff0c;我是阿赵。   之前介绍了从空白模板创建关卡&#xff0c;接下来尝试着在这个空白的世界里面&#xff0c;创建一些内容。 一、创建地面 1、创建面片作为地面 创建——形状——平面&#xff0c;可以创建一个面片 在细节面板设置合适的…

【广州华锐互动】VR科技科普展厅平台:快速、便捷地创建出属于自己的虚拟展馆

随着科技的不断进步&#xff0c;虚拟现实(VR)技术已经在许多领域取得了显著的成果。尤其是在展馆设计领域&#xff0c;VR科技科普展厅平台已经实现了许多令人瞩目的新突破。 VR科技科普展厅平台是广州华锐互动专门为企业和机构提供虚拟展馆设计和制作的在线平台。通过这个平台&…

【微服务核心】Spring Boot

Spring Boot 文章目录 Spring Boot1. 简介2. 开发步骤3. 配置文件4. 整合 Spring MVC 功能5. 整合 Druid 和 Mybatis6. 使用声明式事务7. AOP整合配置8. SpringBoot项目打包和运行 1. 简介 SpringBoot&#xff0c;开箱即用&#xff0c;设置合理的默认值&#xff0c;同时也可以…

设计模式-单例模式(结合JVM基础知识)

1.定义介绍 所谓单例模式&#xff0c;是指在程序运行时&#xff0c;整个JVM中只有一个该类的实例对象 2. 单例模式的优点 复用性高&#xff0c;节省内存资源。类的加载、连接、初始化、使用都要占用虚拟机内存空间&#xff0c;因此&#xff0c;频繁创建对象会造成资源浪费&a…

文件夹共享(普通共享和高级共享的区别)防火墙设置(包括了jdk安装和Tomcat)

文章目录 一、共享文件1.1为什么需要配置文件夹共享功能&#xff1f;1.2配置文件共享功能1.3高级共享和普通共享的区别&#xff1a; 二、防火墙设置2.1先要在虚拟机上安装JDK和Tomcat供外部访问。2.2设置防火墙&#xff1a; 一、共享文件 1.1为什么需要配置文件夹共享功能&…

IDEA使用之打包Jar,指定main方法

前言 在某些场景&#xff0c;可能会遇到将非Spring项目打包的情况&#xff0c;我们不需要Tomcat服务器部署&#xff0c;只需要执行指定的main方法即可&#xff0c;这种情况打包成jar就比较方便了。 操作步骤 打包结果默认在项目的out目录下 使用 java -jar xxx.jar

企业微信自建应用获取用户信息

一.前言 开发企业微信自建应用的时候难免会有获取企微个人信息的业务需求,这篇博客将详细说明企微自建应用获取userId的具体流程. 二.基本概念介绍 2.1 corpid 每个企业都拥有唯一的corpid&#xff0c;获取此信息可在管理后台“我的企业”&#xff0d;“企业信息”下查看“企业…

(1)llvm学习词法分析器

首先是Token取值 下面两个值记录当前识别出来的token单元的字面量 首先是空字符&#xff0c;然后如果是空字符&#xff0c;就读下一个字符&#xff0c;知道这个字符不是空为止&#xff0c;也就是LastChar出循环的时候是下一个不为空的字符,下面两个值是记录实际值用于后续处理 …

VR渲染器怎么用之自适应图像采样器,可解决渲染黑图问题

大家好&#xff0c;相信刚接触到vr渲染器时&#xff0c;会vr的图像采样器感到迷茫&#xff0c;如何使用图像采样器&#xff1f;图像采样器有何用呢&#xff1f; 今天便为大家讲解vr中的自适应DMC图像采样器的运用。 说明&#xff1a;高版本渲染器中的渲染块整合了原有的“固定…

PYTHON入门级游戏开发:宇宙飞船游戏两万字详析

手讲解超详细python入门游戏项目‘打外星飞船’手把&#xff08;一&#xff09; 由于内容比较多&#xff0c;这里会分为五篇文章来讲解&#xff0c;从页面的创建、飞船控制、射击、外星人创建、射杀外星人五片来展开。 做一个窗口和设置响应用户 import sysimport pygame&qu…

STM32逆变器方案

输入电压&#xff1a; 额定输入电压&#xff1a;DC110V 输入电压范围&#xff1a;DC77-137.5V 额定输出参数 电压&#xff1a;200V5%&#xff08;200VAC~240VAC 可调&#xff09; 频率&#xff1a; 42Hz0.5Hz&#xff08;35-50 可调&#xff09; 额定输出容量&#xff1a;1…

CentOS7搭建Elasticsearch与Kibana服务

1.部署单点es 1.1.创建网络 因为我们还需要部署kibana容器&#xff0c;因此需要让es和kibana容器互联。这里先创建一个网络&#xff1a; docker network create es-net 1.2拉取elasticsearch镜像 docker pull elasticsearch:7.11.1 1.3.运行 运行docker命令&#xff0c;部…

致远互联FE协作办公平台 editflow_manager.jsp SQL注入漏洞

漏洞描述 致远互联FE协作办公平台是一款为企业提供全方位协同办公解决方案的产品。它集成了多个功能模块&#xff0c;旨在帮助企业实现高效的团队协作、信息共享和文档管理。致远互联FE协作办公平台editflow_manager存在sql注入漏洞&#xff0c;攻击者可以获得敏感信息。 资产…

Vue框架引入Element-Ui

首先已经创建好了 Vue 框架&#xff0c;安装好了 node.js。 没有完成的可按照此博客搭建&#xff1a;搭建Vue项目 之后打开终端&#xff0c;使用命令。 1、命令引入 npm i element-ui -S2、package.json 查看版本 在 package.json 文件里可查看下载好的依赖版本。 3、在 ma…

Selenium自动化测试-设置元素等待

selenium中有三种时间等待&#xff1a; 强制等待&#xff1a;sleep 隐式等待&#xff1a;implicitly_wait 显示等待&#xff1a;WebDriverWait 1.sleep 让程序暂停运行一定时间&#xff0c;等待时间到达后继续运行。 使用sleep&#xff0c;需先导入time模块&#xff0c;im…

002、使用 Cargo 创建新项目,打印 Hello World

1. Cargo 简介 Cargo 是 Rust 的构建系统和包管理工具&#xff0c;比如构建代码、下载依赖的库、构建这些库等等。在安装 Rust 时&#xff0c;Cargo也会一起安装。 2. 创建新项目的具体步骤 步骤1&#xff1a; 我们在桌面新建一个文件夹&#xff0c;用于存放后面练习用的代码文…

vector的erase()方法遍历删除元素迭代器失效问题、及删除最后一个元素迭代器失效问题)

1.删除指定范围的元素 vector删除元素之pop_back(),erase(),remove() 向量容器vector的成员函数pop_back()可以删除最后一个元素. 而函数erase()可以删除由一个iterator指出的元素&#xff0c;也可以删除一个指定范围的元素。 还可以采用通用算法remove()来删除vector容器中的…

数字电子技术 一天速成

文章目录 一、数制与编码1. 数制转换2. BCD编码 二、逻辑代数1. 常见逻辑运算及逻辑门 三、化简逻辑表达式1. 卡诺图 求 表达式2. 表达式 画 卡诺图3. 卡诺图 化简 表达式4. 公式法 化简 表达式 ⭐⭐5. 表达式 求 反函数6. 卡诺图 求 反函数 四、组合逻辑电路的分析和设计1. 逻…