Element组件案例 Vue路由 前端打包部署步骤

news2025/1/18 9:56:18

目录

  • Element组件案例
    • 案例需求与分析
    • 环境搭建
    • 整体布局
    • 顶部标题
    • 左侧导航栏
    • 核心-右侧导航栏
      • 表格编写
      • 表单编写
      • 分页工具栏编写
    • 异步数据加载
      • 异步加载数据
      • 性别展示修复
      • 图片展示修复
  • Vue路由
    • Vue路由简介
    • Vue路由入门
  • 打包部署
    • 前端工程打包
    • 部署前端工程
      • nginx介绍
      • 部署

Element组件案例

案例需求与分析

1. 制作类似格式的页面,即上面是标题,左侧栏是导航,右侧是数据展示区域
2. 右侧需要展示搜索表单
3. 右侧表格数据是动态展示的,数据来自于后台
4. 实际示例效果如下图所示

在这里插入图片描述

数据使用yapi测试接口。

由上图可以看出,整个页面可以分为3个部分,主要步骤如下:

1. 创建页面,完成页面的整体布局规划
2. 然后分别针对3个部分进行各自组件的具体实现
3. 针对于右侧核心内容展示区域,需要使用异步加载数据,以表格渲染数据

环境搭建

在views目录下创建 tlias/EmpView.vue这个vue组件,并且编写组件的基本模板代码,App.vue这个组件之前是引入了element-view这个组件,此时我们需要修改成引入emp-view这个组件。

在这里插入图片描述

整体布局

抄ElementUI组件:

在这里插入图片描述

<!-- style设置最外层容器高度为700px,在加上一个很细的边框 -->
<el-container style="height: 700px; border: 1px solid #eee">
  <el-header>Header</el-header>
  <el-container>
    <el-aside width="200px">Aside</el-aside>
    <el-main>Main</el-main>
  </el-container>
</el-container>

顶部标题

修改顶部的文本内容,并且提供背景色的css样式

<el-header style="font-size:40px;background-color: rgb(238, 241,
246)">tlias 智能学习辅助系统</el-header>

在这里插入图片描述

左侧导航栏

继续抄刚刚上述布局组件中提供的案例:

在这里插入图片描述

搬运代码,然后做简单修改即可

在这里插入图片描述

此时整体代码如下:

<div>
<!-- 设置最外层容器高度为700px,在加上一个很细的边框 -->
<el-container style="height: 700px; border: 1px solid #eee">
    <el-header style="font-size:40px;background-color: rgb(238, 241, 246)">tlias 智能学习辅助系统</el-header>
    <el-container>
        <el-aside width="200px">
             <el-menu :default-openeds="['1']">
                <el-submenu index="1">
                    <template slot="title"><i class="el-icon-message"></i>系统信息管理</template>
                  
                    <el-menu-item index="1-1">部门管理</el-menu-item>
                    <el-menu-item index="1-2">员工管理</el-menu-item>
                  
                </el-submenu>
             </el-menu>
        </el-aside>
        <el-main>
          
        </el-main>
    </el-container>
</el-container>
</div>

在这里插入图片描述

核心-右侧导航栏

根据实际示例效果,右侧显示的是表单、表格还有分页栏。

在这里插入图片描述

表格编写

表格的制作,我们同样在官方直接找表格组件,也可以直接通过我们上述容器组件中提供的案例中找到表格相关的案例:

在这里插入图片描述

然后找到表格的代码,复制到我们布局容器的主题区域,修改表格,添加列,并且修改列名。

<el-table :data="tableData">
	<el-table-column prop="name" label="姓名" width="180"></el-table-column>
	<el-table-column prop="image" label="图像" width="180"></el-table-column>
	<el-table-column prop="gender" label="性别" width="140"></el-table-column>
	<el-table-column prop="job" label="职位" width="140"></el-table-column>
	<el-table-column prop="entrydate" label="入职日期" width="180"></el-table-column>
	<el-table-column prop="updatetime" label="最后操作时间" width="230"></el-table-column>
	<el-table-column label="操作" >
	    <el-button type="primary" size="mini">编辑</el-button>
	    <el-button type="danger" size="mini">删除</el-button>
	</el-table-column>
</el-table>

然后在data里return一个空的tableData:

<script>
export default {
    data() {
        return {
        tableData:[]
        }
    },
};
</script>

在这里插入图片描述

需要注意的是,我们列名的prop属性值的内容并不是乱写的,因为我们将来需要绑定后台的数据的,所以如下图所示:

在这里插入图片描述



表单编写

在表格的上方,还需要如下图所示的表单:

在这里插入图片描述

去ElementUI官网,在表单组件中找到与之类似的示例,加以修改

在这里插入图片描述

在这里插入图片描述

直接拷贝代码到主体区域的table组件的上方即可

<!-- 表单 -->
<el-form :inline="true" :model="searchForm" class="demo-form-inline">
    <el-form-item label="姓名">
        <el-input v-model="searchForm.name" placeholder="姓名"></el-input>
    </el-form-item>
    <el-form-item label="性别">
        <el-select v-model="searchForm.gender" placeholder="性别">
            <el-option label="" value="1"></el-option>
            <el-option label="" value="2"></el-option>
        </el-select>
    </el-form-item>
    <el-form-item>
        <el-button type="primary" @click="onSubmit">查询</el-button>
    </el-form-item>
</el-form>
data() {
    return {
      tableData: [],
      searchForm: {
        name: "",
        gender: "",
      },
    };
},
methods: {
    onSubmit: function () {
      console.log(this.searchForm);
    },
},

表单的提交按钮,绑定了onSubmit函数,所以我们还需要在methods中定义onSubmit函数

效果:

请添加图片描述

可以发现我们还缺少一个时间,所以可以从elementUI官网找到日期组件,如下图所示

在这里插入图片描述

参考官方代码,然后在我们之前的表单中添加一个日期表单:

<el-form-item label="入职日期">
        <el-date-picker
                        v-model="searchForm.entrydate"
                        type="daterange"
                        range-separator=""
                        start-placeholder="开始日期"
                        end-placeholder="结束日期">
        </el-date-picker>
 </el-form-item>

加了双向绑定,所以我们需要在data的searchForm中定义出来,需要注意的是这个日期包含开始日期和结束日期2个值,所以我们定义为数组,代码如下:

 searchForm:{
            name:'',
            gender:'',
            entrydate:[]
}

此时我们打开浏览器,填写表单,并且点击查询按钮,查看浏览器控制台,可以看到表单的内容,效果
如下图所示:

在这里插入图片描述

到此为止完整代码:

<template>
  <div>
    <!-- 设置最外层容器高度为700px,在加上一个很细的边框 -->
    <el-container style="height: 700px; border: 1px solid #eee">
      <el-header style="font-size: 40px; background-color: rgb(238, 241, 246)"
        >tlias 智能学习辅助系统</el-header
      >
      <el-container>
        <el-aside width="200px">
          <el-menu :default-openeds="['1']">
            <el-submenu index="1">
              <template slot="title"
                ><i class="el-icon-message"></i>系统信息管理</template
              >

              <el-menu-item index="1-1">部门管理</el-menu-item>
              <el-menu-item index="1-2">员工管理</el-menu-item>
            </el-submenu>
          </el-menu>
        </el-aside>
        <el-main>
          <!-- 表单 -->
          <el-form :inline="true" :model="searchForm" class="demo-form-inline">
            <el-form-item label="姓名">
              <el-input v-model="searchForm.name" placeholder="姓名"></el-input>
            </el-form-item>
            <el-form-item label="性别">
              <el-select v-model="searchForm.gender" placeholder="性别">
                <el-option label="" value="1"></el-option>
                <el-option label="" value="2"></el-option>
              </el-select>
            </el-form-item>
            <el-form-item label="入职日期">
              <el-date-picker
                v-model="searchForm.entrydate"
                type="daterange"
                range-separator=""
                start-placeholder="开始日期"
                end-placeholder="结束日期"
              >
              </el-date-picker>
            </el-form-item>
            <el-form-item>
              <el-button type="primary" @click="onSubmit">查询</el-button>
            </el-form-item>
          </el-form>
		  <!-- 表格 -->
          <el-table :data="tableData">
            <el-table-column
              prop="name"
              label="姓名"
              width="180"
            ></el-table-column>
            <el-table-column
              prop="image"
              label="图像"
              width="180"
            ></el-table-column>
            <el-table-column
              prop="gender"
              label="性别"
              width="140"
            ></el-table-column>
            <el-table-column
              prop="job"
              label="职位"
              width="140"
            ></el-table-column>
            <el-table-column
              prop="entrydate"
              label="入职日期"
              width="180"
            ></el-table-column>
            <el-table-column prop="updatetime" label="最后操作时间" width="230">
            </el-table-column>
            <el-table-column label="操作">
              <el-button type="primary" size="mini">编辑</el-button>
              <el-button type="danger" size="mini">删除</el-button>
            </el-table-column>
          </el-table>
        </el-main>
      </el-container>
    </el-container>
  </div>
</template>

<script>
export default {
  data() {
    return {
      tableData: [],
      searchForm: {
        name: "",
        gender: "",
        entrydate: [],
      },
    };
  },
  methods: {
    onSubmit: function () {
      console.log(this.searchForm);
    },
  },
};
</script>

<style>
</style>



分页工具栏编写

分页条我们之前做过,所以我们直接找到之前的案例,复制即可

<!-- Pagination分页 -->
<el-pagination
  @size-change="handleSizeChange"
  @current-change="handleCurrentChange"
  background
  layout="sizes,prev, pager, next,jumper,total"
  :total="1000"
>
</el-pagination>

同时methods中需要声明2个函数,代码如下:

handleSizeChange(val) {
      console.log(`每页 ${val}`);
    },
    handleCurrentChange(val) {
      console.log(`当前页: ${val}`);
    },

此时效果:

在这里插入图片描述




异步数据加载

异步加载数据

对于案例,我们只差最后的数据了,数据使用该地址作为测试。

使用axios发送ajax请求。
在vue项目中,对于axios的使用,分为如下2步:

1. 安装axios: npm install axios
2. 需要使用axios时,导入axios: import axios 'axios'

接下来我们先来到项目的执行终端,然后输入命令,安装axios

在这里插入图片描述

然后重启项目,来到我们的EmpView.vue组件页面,通过import命令导入axios

那么我们什么时候发送axios请求呢?页面加载完成,自动加载,所以可以使用之前的mounted钩子函数,并且我们需要将得到的员工数据要展示到表格,所以数据需要赋值给数据模型tableData,所以我们编写如下代码:

mounted() {
    axios
      .get("https://mock.apifox.cn/m1/3128855-0-default/emp/list")
      .then((resp) => {
        this.tableData = resp.data.data; //响应数据赋值给数据模型
      });
  },

此时浏览器打开,呈现如下效果:

在这里插入图片描述

但是很明显,性别和图片的内容显示不正确,所以我们需要修复。

性别展示修复

来到ElementUI提供的表格组件,找到如下示例:

在这里插入图片描述

我们仔细对比效果和功能实现代码,发现其中涉及2个非常重要的点:

<template> : 用于自定义列的内容
slot-scope: 通过属性的row获取当前行的数据

所以接下来,我们可以通过上述的标签自定义列的内容即可,修改性别列的内容代码如下:

<el-table-column prop="gender" label="性别" width="140">
  <template slot-scope="scope">
  {{scope.row.gender==1?"男":"女"}}
  </template>
</el-table-column>

此时打开浏览器发现性别一列的值修复成功。

图片展示修复

图片内容的修复和上述一致,需要借助<template>标签自定义列的内容,需要需要展示图片,直接借助<img>标签即可,并且需要设置图片的宽度和高度,所以直接修改图片列的代码如下:

<el-table-column prop="image" label="图像" width="180">
  <template slot-scope="scope">
    <img :src="scope.row.image" width="100px" height="70px" />
  </template>
</el-table-column>

最终效果:

在这里插入图片描述

最终代码如下:

<template>
  <div>
    <!-- 设置最外层容器高度为700px,在加上一个很细的边框 -->
    <el-container style="height: 700px; border: 1px solid #eee">
      <el-header style="font-size: 40px; background-color: rgb(238, 241, 246)"
        >tlias 智能学习辅助系统</el-header
      >
      <el-container>
        <el-aside width="200px">
          <el-menu :default-openeds="['1']">
            <el-submenu index="1">
              <template slot="title"
                ><i class="el-icon-message"></i>系统信息管理</template
              >

              <el-menu-item index="1-1">部门管理</el-menu-item>
              <el-menu-item index="1-2">员工管理</el-menu-item>
            </el-submenu>
          </el-menu>
        </el-aside>
        <el-main>
          <!-- 表单 -->
          <el-form :inline="true" :model="searchForm" class="demo-form-inline">
            <el-form-item label="姓名">
              <el-input v-model="searchForm.name" placeholder="姓名"></el-input>
            </el-form-item>
            <el-form-item label="性别">
              <el-select v-model="searchForm.gender" placeholder="性别">
                <el-option label="" value="1"></el-option>
                <el-option label="" value="2"></el-option>
              </el-select>
            </el-form-item>
            <el-form-item label="入职日期">
              <el-date-picker
                v-model="searchForm.entrydate"
                type="daterange"
                range-separator=""
                start-placeholder="开始日期"
                end-placeholder="结束日期"
              >
              </el-date-picker>
            </el-form-item>
            <el-form-item>
              <el-button type="primary" @click="onSubmit">查询</el-button>
            </el-form-item>
          </el-form>
          <!-- 表格 -->
          <el-table :data="tableData">
            <el-table-column
              prop="name"
              label="姓名"
              width="180"
            ></el-table-column>
            <el-table-column prop="image" label="图像" width="180">
              <template slot-scope="scope">
                <img :src="scope.row.image" width="100px" height="70px" />
              </template>
            </el-table-column>

            <el-table-column prop="gender" label="性别" width="140">
              <template slot-scope="scope">
                {{ scope.row.gender == 1 ? "男" : "女" }}
              </template>
            </el-table-column>

            <el-table-column
              prop="job"
              label="职位"
              width="140"
            ></el-table-column>
            <el-table-column
              prop="entrydate"
              label="入职日期"
              width="180"
            ></el-table-column>
            <el-table-column prop="updatetime" label="最后操作时间" width="230">
            </el-table-column>
            <el-table-column label="操作">
              <el-button type="primary" size="mini">编辑</el-button>
              <el-button type="danger" size="mini">删除</el-button>
            </el-table-column>
          </el-table>
          <!-- Pagination分页 -->
          <el-pagination
            @size-change="handleSizeChange"
            @current-change="handleCurrentChange"
            background
            layout="sizes,prev, pager, next,jumper,total"
            :total="1000"
          >
          </el-pagination>
        </el-main>
      </el-container>
    </el-container>
  </div>
</template>

<script>
import axios from "axios";
export default {
  data() {
    return {
      tableData: [],
      searchForm: {
        name: "",
        gender: "",
        entrydate: [],
      },
    };
  },
  methods: {
    onSubmit: function () {
      console.log(this.searchForm);
    },
    handleSizeChange(val) {
      console.log(`每页 ${val}`);
    },
    handleCurrentChange(val) {
      console.log(`当前页: ${val}`);
    },
  },
  mounted() {
    axios
      .get("https://mock.apifox.cn/m1/3128855-0-default/emp/list")
      .then((resp) => {
        this.tableData = resp.data.data; //响应数据赋值给数据模型
      });
  },
};
</script>

<style>
</style>




Vue路由

我们希望基于4.4案例中的功能,实现点击侧边栏的部门管理,显示部门管理的信息,点击员工管理,显示员工管理的信息,效果如下图所示:

在这里插入图片描述

在这里插入图片描述

这就需要借助我们的vue的路由功能了。




Vue路由简介

前端路由:URL中的hash(#号之后的内容)与组件之间的对应关系,如下图所示:

在这里插入图片描述

当我们点击左侧导航栏时,浏览器的地址栏会发生变化,路由自动更新显示与url所对应的vue组件。

vue官方提供了路由插件Vue Router,其主要组成如下:

VueRouter:路由器类,根据路由请求在路由视图中动态渲染选中的组件
<router-link>:请求链接组件,浏览器会解析成<a>
<router-view>:动态视图组件,用来渲染展示与路由路径对应的组件

工作原理如下图所示:

在这里插入图片描述

VueRouter根据我们配置的url的hash片段和路由的组件关系去维护一张路由表;
然后我们页面提供一个组件,用户点击,发出路由请求;
接着我们的VueRouter根据路由请求,在路由表中找到对应的vue组件;
最后VueRouter会切换中的组件,从而进行视图的更新。



Vue路由入门

安装vue-router插件:

npm install vue-router@3.5.1

我们不需要,在创建vue项目时我们已经勾选了路由功能。
然后我们需要在src/router/index.js文件中定义路由表,根据其提供的模板代码进行修改,注意需要去掉没有引用的import模块,最终代码如下:

import Vue from 'vue'
import VueRouter from 'vue-router'

Vue.use(VueRouter)

const routes = [
  {
    path: '/emp',  //地址hash
    name: 'emp',
    component:  () => import('../views/tlias/EmpView.vue')  //对应的vue组件
  },
  {
    path: '/dept',
    name: 'dept',
    component: () => import('../views/tlias/DeptView.vue')
  }
]

const router = new VueRouter({
  routes
})

export default router

在main.js中,引入router功能:

在这里插入图片描述

将代码DeptView.vue拷贝到我们当前EmpView.vue同级:

<template>
    <div>
        <el-container  style="height: 700px; border: 1px solid #eee">
            <el-header style="font-size:40px; background-color: rgb(238, 241, 246)">tlias 智能学习辅助系统</el-header>
            <el-container>
                <el-aside width="230px" style="border: 1px solid #eee">
                    <el-menu :default-openeds="['1', '3']">
                        <el-submenu index="1">
                            <template slot="title"><i class="el-icon-message"></i>系统信息管理</template>
                            <el-menu-item index="1-1">
                                <router-link to="/dept">部门管理</router-link>
                            </el-menu-item>
                            <el-menu-item index="1-2">
                                <router-link to="/emp">员工管理</router-link>
                            </el-menu-item>
                        </el-submenu>
                        </el-menu>
                </el-aside>


                <el-main>
                    <!-- 表格 -->
                    <el-table :data="tableData" border>
                        <el-table-column prop="name" label="名称" width="250"></el-table-column>
                        <el-table-column prop="updatetime" label="最后操作时间" width="250"></el-table-column>
                        <el-table-column label="操作">
                            <el-button type="primary" size="mini">编辑</el-button>
                            <el-button type="danger" size="mini">删除</el-button>
                        </el-table-column>
                    </el-table>
                </el-main>
            </el-container>
        </el-container>
    </div>
</template>

<script>
export default {
    data() {
        return {
            tableData: [{
                id:1,
                name:"学工部",
                updatetime:"2010-01-01 12:00:00"
            },{
                id:2,
                name:"教研部",
                updatetime:"2010-01-01 12:00:00"
            },{
                id:3,
                name:"就业部",
                updatetime:"2010-01-01 12:00:00"
            },{
                id:4,
                name:"人事部",
                updatetime:"2010-01-01 12:00:00"
            },{
                id:5,
                name:"行政部",
                updatetime:"2010-01-01 12:00:00"
            }]
        }
    },
    methods: {
        
    }
}
</script>

<style>

</style>

路由基本信息配置好了,路由表已经被加载,此时我们还缺少2个东西,就是<router-lin>和<router-view>,所以我们需要修改2个页面(EmpView.vue和DeptView.vue)我们左侧栏的2个按钮为router-link,其代码如下:

<el-menu-item index="1-1">
  <router-link to="/dept">部门管理</router-link>
</el-menu-item>
<el-menu-item index="1-2">
  <router-link to="/emp">员工管理</router-link>
</el-menu-item>

然后我们还需要在内容展示区域即App.vue中定义route-view,作为组件的切换,其App.vue的完整代码如下:

<template>
  <div id="app">
    <!-- {{message}} -->
    <!-- <element-view></element-view> -->
    <!-- <emp-view></emp-view> -->
    <router-view></router-view>
  </div>
</template>

<script>
// import EmpView  './views/tlias/EmpView.vue'
// import ElementView  './views/Element/ElementView.vue'
export default {
  components: { },
  data(){
    return {
      "message":"hello world"
    }
  }
}
</script>
<style>

</style>

但是我们浏览器打开地址: http://localhost:7000/ ,发现一片空白,因为我们默认的路由路径是/,但是路由配置中没有对应的关系,所以我们需要在路由配置中/对应的路由组件,代码如下:

const routes = [
  {
    path: '/emp',
    name: 'emp',
    component:  () => import('../views/tlias/EmpView.vue')
  },
  {
    path: '/dept',
    name: 'dept',
    component: () => import('../views/tlias/DeptView.vue')
  },
  {
    path: '/',
    redirect:'/emp' //表示重定向到/emp即可
  },
]

此时我们打开浏览器,访问http://localhost:7000 发现直接访问的是emp的页面,并且能够进行切换了:

请添加图片描述





打包部署

我们的前端工程开发好了,当我们需要发布,主要分为2步:

  1. 前端工程打包
  2. 通过nginx服务器发布前端工程

前端工程打包

我们直接通过VS Code的NPM脚本中提供的build按钮来完整,如下图所示,直接点击即可:

在这里插入图片描述

然后会在工程目录下生成一个dist目录,用于存放需要发布的前端资源,如下图所示:

在这里插入图片描述

部署前端工程

nginx介绍

nginx: Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。其特点是占有内存少,并发能力强,在各大型互联网公司都有非常广泛的使用。
niginx在windows中的安装是比较方便的,直接解压即可。所以我们在官网下载,将nginx-1.22.0.zip压缩文件拷贝到无中文的目录下,直接解压即可,如下图所示就是nginx的解压目录以及目录结构说明:

在这里插入图片描述

很明显,我们如果要发布,直接将资源放入到html目录中。

部署

将我们之前打包的前端工程dist目录下得内容拷贝到nginx的html目录下,如下图所示:

在这里插入图片描述

然后我们通过双击nginx下的nginx.exe文件来启动nginx

nginx服务器的端口号是80,所以启动成功之后,我们浏览器直接访问http://localhost:80 即可,其中80端口可以省略,其浏览器展示效果如图所示:

在这里插入图片描述

到此,我们的前端工程发布成功。

PS: 如果80端口被占用,我们需要通过conf/nginx.conf配置文件来修改端口号。如下图所示:

在这里插入图片描述

如果想查询哪个进场占用了80端口,可以在windows命令行输入以下命令:

netstat -ano / findstr 80

请添加图片描述

如图所示进程id4占用了80端口,打开任务管理器可以看到pid为4的是系统进程,那就需要更改端口号了。

请添加图片描述

最后,在nginx根目录下调用cmd,输入nginx -s quit关闭。

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

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

相关文章

【TES720D】基于复旦微的FMQL20S400全国产化ARM核心模块

TES720D是一款基于上海复旦微电子FMQL20S400的全国产化核心模块。该核心模块将复旦微的FMQL20S400&#xff08;兼容FMQL10S400&#xff09;的最小系统集成在了一个60*70mm的核心板上&#xff0c;可以作为一个核心模块&#xff0c;进行功能性扩展&#xff0c;特别是用在控制领域…

DC-DC模块升压电源直流隔离低压升高压正负输出变换器

特点 效率高达 80%以上1*1英寸标准封装电源正负双输出稳压输出工作温度: -40℃~85℃阻燃封装&#xff0c;满足UL94-V0 要求温度特性好可直接焊在PCB 上 应用 HRA 0.2~8W 系列模块电源是一种DC-DC升压变换器。该模块电源的输入电压分为&#xff1a;4.5~9V、9~18V、及18~36V、36…

华测监测预警系统 2.2 任意文件读取漏洞复现 [附POC]

文章目录 华测监测预警系统 2.2 任意文件读取漏洞复现 [附POC]0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现 0x06 修复建议 华测监测预警系统 2.2 任意文件读取漏洞复现 [附POC] 0x01 前言 免责声明&#xff1a;请勿利用文章…

macOS Sonoma 14.1beta3(23B5067a)发布

黑果魏叔10 月 11 日消息&#xff0c;苹果今日向 Mac 电脑用户推送了 macOS 14.1 开发者预览版 Beta 3 更新&#xff08;内部版本号&#xff1a;23B5067a&#xff09;&#xff0c;本次更新距离上次发布隔了 7 天。 根据官方发布的macOS Sonoma 14.1beta3更新日志&#xff0c;此…

如何按照洁净区不同等级选择不同流量的粒子计数器设备?

如今&#xff0c;尘埃粒子计数器已经广泛应用于生物制药、电子产业、医疗手术室、食品加工、洁净工作台、科学实验、航空航天、精密加工及新能源等领域&#xff0c;用于洁净室洁净度等级的测试及判定。今天小编就和大家来浅说说如何按需选择不同流量的尘埃粒子计数器。 01 每个…

vue2安装cesium并使用

一、安装 1.安装cesium npm install cesium1.95.0 -S 2.安装所需 npm install copy-webpack-plugin10.2.4 -D 二、配置 1.配置vue.config.js vue 中引入cesium 需要用copy-webpack-plugin 把一些文件拷贝到打包目录 // vue.config.js const CopyWebpackPlugin require…

中国象棋(人机)

欢迎来到程序小院 中国象棋 玩法&#xff1a; 鼠标左键点击选中棋子&#xff0c;再点击位置进行下棋&#xff0c;可以进行悔棋&#xff0c;重新开始操作&#xff0c;棋盘右侧有AI分析&#xff0c;帮助你进一步提升棋艺&#xff0c;快去下棋吧^^。开始游戏https://www.ormcc.co…

服务器数据恢复-DS5300存储raid5硬盘出现坏道离线的数据恢复案例

服务器数据恢复环境&#xff1a; 某单位一台DS5300存储&#xff0c;1个主机4个扩展柜&#xff0c;组建了2组RAID5&#xff08;一组27块硬盘&#xff0c;一组23块盘&#xff09;。27块盘的那组RAID5阵列存放Oracle数据库文件&#xff0c;存储系统一共分了11个卷。 服务器故障&a…

Linux命令及详细解释、用法

关机/重启/注销 命令 说明 shutdown -h now 即刻关机 shutdown -h 10 10分钟后关机 shutdown -h 11:00 11&#xff1a;00关机 shutdown -h 10 预定时间关机&#xff08;10分钟后&#xff09; shutdown -c 取消指定时间关机 shutdown -r now 重启 shutdown -r 10 10分钟之…

分享一些走心的句子英文表达

曾经有人问更新社媒&#xff0c;除了发生活照&#xff0c;产品照&#xff0c;与客户的聊天截图和一些产品视频&#xff0c;发货视频之外&#xff0c;还能发什么&#xff1f;其实像一些你平时发在朋友圈的走心的话&#xff0c;或者是一些正能量也是可以的&#xff0c;从你的文字…

【内网穿透】Docker部署Drupal并实现公网访问

目录 前言 1. Docker安装Drupal 2. 本地局域网访问 3 . Linux 安装cpolar 4. 配置Drupal公网访问地址 5. 公网远程访问Drupal 6. 固定Drupal 公网地址 前言 Dupal是一个强大的CMS&#xff0c;适用于各种不同的网站项目&#xff0c;从小型个人博客到大型企业级门户网站。…

力扣(LeetCode)2512. 奖励最顶尖的K名学生(C++)

优先队列哈希集合反向思维(或自定义排序) 模拟&#xff0c;请直接看算法思路&#xff1a; 两个哈希集合S1和S2, S1存正面词汇&#xff0c;S2存负面词汇&#xff1b;一个优先队列pq&#xff0c;pq存{score, id}键值对&#xff0c;即学生分数-学生id。 算法流程&#xff1a; 初…

vim基础指令(自用)

这个是自己随便写的&#xff0c;类似于笔记 vim 多模式编辑器 查看指令&#xff1a; gg&#xff1a; 定位光标到最开始行 shift(按)g 定位到最结尾行 nshift(按)g 定位到任意行 shift&#xff04; 定位到本行结尾 0 定位到本行开头 w&#xff1a;跨单词移动 h.j.k,l: 左下上右 …

docker之Harbor私有仓库

目录 一、什么是Harbor 二、Harbor的特性 三、Harbor的构成 1、六个组件 2、七个容器 四、私有镜像仓库的上传与下载 五、部署docker-compose服务 把项目中的镜像数据进行打包持久数据&#xff0c;如镜像&#xff0c;数据库等在宿主机的/data/目录下&#xff0c; 一、什么…

vscode 连接ubuntu git下载缓慢

在ubuntu20.04下载&#xff1a; git clone https://github.com/introlab/rtabmap.git src/rtabmap 挂掉情况 export https_proxyhttp://10.10.10.176:7890export http_proxyhttp://10.10.10.176:7890 其中 10.10.10.176是我本机的ip地址&#xff0c;7890是我的代理后几位 如…

iPhone 15分辨率,屏幕尺寸,PPI 详细数据对比 iPhone 15 Plus、iPhone 15 Pro、iPhone 15 Pro Max

史上最全iPhone 机型分辨率&#xff0c;屏幕尺寸&#xff0c;PPI详细数据&#xff01;已更新到iPhone 15系列&#xff01; 点击放大查看高清图 &#xff01;

AI「鸟口普查」,康奈尔大学利用深度学习分析北美林莺分布

据世界自然基金会统计&#xff0c;1970-2016 年&#xff0c;全球代表物种种群数量减少了 68%&#xff0c;生物多样性不断下降。 保护生物多样性&#xff0c;需要对当地生态情况进行准确分析&#xff0c;制定合理的生态保护政策。然而&#xff0c;生态数据太过庞杂&#xff0c;统…

淘宝官方开放平台API接口获取淘宝商品详情信息(价格、销量、优惠价等)

淘宝、天猫商品详情API接口实现可以获取详情页面上面的标题&#xff0c;价格&#xff0c;优惠券&#xff0c;优惠价&#xff0c;促销活动&#xff0c;库存&#xff0c;sku规格属性&#xff0c;sku属性图片&#xff0c;产品图片&#xff0c;详情属性&#xff0c;详情主图&#x…

Java架构师异步架构设计

目录 1 导学2 为何需要异步消息架构3 消息发送失败该如何处理4 mq接收到消息过后又丢失了消息怎么办5 消费者弄丢了消息该如何处理6 消息重复消费了该怎么处理7 消息的有序处理8 消息堆积该如何处理9 如何提高消息消费的速度10 消息应用的可插拔11 如何设计消息的统一id12 异步…

手把手教你从webpack迁移到vite,仅6步~!

文章目录 启动耗时对比操作步骤1. 修改 index.html2. 修改 package.json3. 重新安装依赖4. 创建vite.config.js5. 修改require导入6. 修改环境变量判断 Vite优点 Vite 开发快速入门 启动耗时对比 webpack 启动耗时23s左右&#xff1a; vite 启动耗时0.5s左右&#xff1a; 优…