使用Vue3开发学生管理系统模板1

环境搭建

通过解压之前《Vue3开发后台管理系统模板》的代码,我们能够得到用户增删改查的页面,我们基于用户增删改查的页面做进一步的优化。
在这里插入图片描述

创建学生增删改查页面

第一步:复制用户增删改查页面,重命名为StudentCRUD.vue

<script setup>
import {FilterMatchMode} from 'primevue/api';
import {ref, onBeforeMount} from 'vue';
import {useToast} from 'primevue/usetoast';
import users from "@/assets/data/user.json"

// 用户
const user = ref({
  id: 0,
  name: "",
  age: 0,
})
const toast = useToast();

const userDialog = ref(false); // 用户弹窗是否显示
const deleteUserDialog = ref(false); // 确认删除用户弹窗是否显示
const deleteUsersDialog = ref(false); // 批量删除用户弹窗是否显示
const selectedUsers = ref(null);
const dt = ref(null);
const filters = ref({});
const submitted = ref(false);


onBeforeMount(() => {
  initFilters();
});

/**
 * 打开新增用户的弹窗
 */
function openNew() {
  user.value = {
    id: 0,
    name: "",
    age: 0,
  };
  submitted.value = false;
  userDialog.value = true;
}

/**
 * 新增用户
 */
function addUser() {
  console.log("新增用户:", user.value)
  userDialog.value = false
}

const hideDialog = () => {
  userDialog.value = false;
  submitted.value = false;
};


const editUser = (editUser) => {
  user.value = {...editUser};
  console.log(user);
  userDialog.value = true;
};

/**
 * 确认删除用户
 * @param editUser 要删除的用户信息
 */
const confirmDeleteUser = (editUser) => {
  user.value = editUser;
  deleteUserDialog.value = true;
};

/**
 * 删除用户
 */
const deleteUser = () => {
  users = users.filter((val) => val.id !== user.value.id);
  deleteUserDialog.value = false;
  user.value = {
    id: 0,
    name: "",
    age: 0,
  };
  toast.add({severity: 'success', summary: '成功', detail: '删除用户', life: 3000});
};

const exportCSV = () => {
  dt.value.exportCSV();
};

const confirmDeleteSelected = () => {
  deleteUsersDialog.value = true;
};

/**
 * 删除选中的用户
 */
const deleteSelectedUsers = () => {
  users = users.filter((val) => !selectedUsers.value.includes(val));
  deleteUsersDialog.value = false;
  selectedUsers.value = null;
  toast.add({severity: 'success', summary: '成功', detail: '删除用户', life: 3000});
};

/**
 * 初始化过滤器
 */
const initFilters = () => {
  filters.value = {
    global: {value: null, matchMode: FilterMatchMode.CONTAINS}
  };
};
</script>

<template>
  <div class="grid">
    <div class="col-12">
      <div class="card">
        <!--消息提示-->
        <Toast/>
        <!--顶部工具栏-->
        <Toolbar class="mb-4">
          <!--左侧-->
          <template v-slot:start>
            <div class="my-2">
              <Button label="新增" icon="pi pi-plus" class="p-button-success mr-2" @click="openNew"/>
              <Button label="删除" icon="pi pi-trash" class="p-button-danger" @click="confirmDeleteSelected"
                      :disabled="!selectedUsers || !selectedUsers.length"/>
            </div>
          </template>
          <!--右侧-->
          <template v-slot:end>
            <FileUpload mode="basic" accept="image/*" :maxFileSize="1000000" label="Import" chooseLabel="导入"
                        class="mr-2 inline-block"/>
            <Button label="导出" icon="pi pi-upload" class="p-button-help" @click="exportCSV($event)"/>
          </template>
        </Toolbar>

        <!--数据表格-->
        <DataTable
            ref="dt"
            :value="users"
            v-model:selection="selectedUsers"
            dataKey="id"
            :paginator="true"
            :rows="10"
            :filters="filters"
            paginatorTemplate="FirstPageLink PrevPageLink PageLinks NextPageLink LastPageLink CurrentPageReport RowsPerPageDropdown"
            :rowsPerPageOptions="[5, 10, 25]"
            currentPageReportTemplate="Showing {first} to {last} of {totalRecords} products"
            responsiveLayout="scroll"
        >
          <!--表头-->
          <template #header>
            <div class="flex flex-column md:flex-row md:justify-content-between md:align-items-center">
              <h5 class="m-0">用户管理</h5>
              <span class="block mt-2 md:mt-0 p-input-icon-left">
                  <i class="pi pi-search"/>
                  <InputText v-model="filters['global'].value" placeholder="搜索..."/>
              </span>
            </div>
          </template>

          <!--内容-->
          <Column selectionMode="multiple" headerStyle="width: 3rem"></Column>
          <Column field="name" header="姓名" :sortable="true" headerStyle="min-width:10rem;"></Column>
          <Column field="age" header="年龄" :sortable="true" headerStyle="min-width:8rem;"></Column>
          <Column headerStyle="min-width:10rem;">
            <template #body="slotProps">
              <Button icon="pi pi-pencil" class="p-button-rounded p-button-success mr-2"
                      @click="editUser(slotProps.data)"/>
              <Button icon="pi pi-trash" class="p-button-rounded p-button-warning mt-2"
                      @click="confirmDeleteUser(slotProps.data)"/>
            </template>
          </Column>
        </DataTable>

        <!--新增弹窗-->
        <Dialog v-model:visible="userDialog"
                :style="{ width: '450px' }"
                header="新增用户"
                :modal="true"
                class="p-fluid">
          <div class="field">
            <label for="name">姓名</label>
            <InputText id="name" v-model.trim="user.name" required="true" autofocus
                       :class="{ 'p-invalid': submitted && !user.name }"/>
            <small class="p-invalid" v-if="submitted && !user.name">姓名不能为空</small>
          </div>
          <div class="field">
            <label for="name">年龄</label>
            <InputText id="name" v-model.number="user.age" required="true" autofocus
                       :class="{ 'p-invalid': submitted && !user.age }"/>
            <small class="p-invalid" v-if="submitted && !user.age">年龄不能为空</small>
          </div>
          <template #footer>
            <Button label="取消" icon="pi pi-times" class="p-button-text" @click="hideDialog"/>
            <Button label="保存" icon="pi pi-check" class="p-button-text" @click="addUser"/>
          </template>
        </Dialog>

        <!--确认删除弹窗-->
        <Dialog v-model:visible="deleteUserDialog" :style="{ width: '450px' }" header="Confirm" :modal="true">
          <div class="flex align-items-center justify-content-center">
            <i class="pi pi-exclamation-triangle mr-3" style="font-size: 2rem"/>
            <span v-if="user">您确认要删除 <b>{{ user.name }}</b>吗?</span>
          </div>
          <template #footer>
            <Button label="取消" icon="pi pi-times" class="p-button-text" @click="deleteUserDialog = false"/>
            <Button label="确认" icon="pi pi-check" class="p-button-text" @click="deleteUser"/>
          </template>
        </Dialog>

        <!--批量删除确认弹窗-->
        <Dialog v-model:visible="deleteUsersDialog" :style="{ width: '450px' }" header="请确认" :modal="true">
          <div class="flex align-items-center justify-content-center">
            <i class="pi pi-exclamation-triangle mr-3" style="font-size: 2rem"/>
            <span v-if="user">删除后无法撤销,您确定要删除吗?</span>
          </div>
          <template #footer>
            <Button label="取消" icon="pi pi-times" class="p-button-text" @click="deleteUsersDialog = false"/>
            <Button label="确认" icon="pi pi-check" class="p-button-text" @click="deleteSelectedUsers"/>
          </template>
        </Dialog>
      </div>
    </div>
  </div>
</template>


第二步:在router/index.js中,配置学生增删改查的路由

{
    path: '/pages/crud/student',
    name: '/pages/crud/student',
    component: () => import('@/pages/crud/StudentCRUD.vue')
}

第三步:在AppMenu.vue中,添加学生增删改查的跳转链接

{label: '学生增删改查', icon: 'pi pi-fw pi-home', to: '/pages/crud/student'},

效果图如下:这样我们就有了一个学生增删改查的基本页面
在这里插入图片描述

学生基本信息设计

初中学生,有哪些基本的属性:

  • ID:唯一标识,字符串,最大长度36
  • student_id:学生证号,字符串,最大长度是36
  • chinese_id:身份证号,字符串,最大长度36
  • name:姓名,字符串,最大长度36
  • age:年龄,整数
  • gender:性别,字符串,最大长度6
  • height:身高,浮点数
  • weight:体重,浮点数
  • phone:联系电话,字符串,最大长度20
  • home_name:家长名称,字符串,最大长度36
  • home_relation:家长关系,字符串,最大长度36
  • home_phone:家长电话,字符串,最大长度20
  • sclass_id:班级ID,字符串,最大长度36
  • sclass_name:班级名称,字符串,最大长度36
  • sclass_level:年纪名称,字符串,最大长度36
  • master_id:班主任ID,字符串,最大长度36
  • master_name:班主任姓名,字符串,最大长度36
  • master_phone:班主任电话,字符串,最大长度是20
  • address_id:地址id,字符串,最大长度36
  • address:地址信息,字符串,最大长度255
  • detail:学生详细信息,文本类型,存储JSON字符串

学生基本信息的JSON构造

[
  {
    "id": "1",
    "student_id": "1",
    "chinese_id": "5222xxx",
    "name": "张三",
    "age": 13,
    "gender": "男",
    "height": 148,
    "weight": 57,
    "phone": "18811112222",
    "home_id": "1",
    "home_name": "张三家长",
    "home_relation": "父子",
    "home_phone": "18811112222",
    "sclass_id": "1",
    "sclass_name": "初一(3)班",
    "sclass_level": 1,
    "master_id": "1",
    "master_name": "张三班主任",
    "master_phone": "18811112222",
    "address_id": "1",
    "address": "四川省成都市金牛区xxx街道xxx号",
    "detail": "{}"
  },
  {
    "id": "2",
    "student_id": "1",
    "chinese_id": "5222xxx",
    "name": "李四",
    "age": 13,
    "gender": "男",
    "height": 148,
    "weight": 57,
    "phone": "18811112222",
    "home_id": "1",
    "home_name": "张三家长",
    "home_relation": "父子",
    "home_phone": "18811112222",
    "sclass_id": "1",
    "sclass_name": "初一(3)班",
    "sclass_level": 1,
    "master_id": "1",
    "master_name": "张三班主任",
    "master_phone": "18811112222",
    "address_id": "1",
    "address": "四川省成都市金牛区xxx街道xxx号",
    "detail": "{}"
  },
  {
    "id": "3",
    "student_id": "1",
    "chinese_id": "5222xxx",
    "name": "王五",
    "age": 13,
    "gender": "男",
    "height": 148,
    "weight": 57,
    "phone": "18811112222",
    "home_id": "1",
    "home_name": "张三家长",
    "home_relation": "父子",
    "home_phone": "18811112222",
    "sclass_id": "1",
    "sclass_name": "初一(3)班",
    "sclass_level": 1,
    "master_id": "1",
    "master_name": "张三班主任",
    "master_phone": "18811112222",
    "address_id": "1",
    "address": "四川省成都市金牛区xxx街道xxx号",
    "detail": "{}"
  }
]

渲染学生信息

第一步:导入学生JSON数据

import students from "@/assets/data/students.json"

第二步:传入DataTable数据表格

:value="students"

第三步:编辑要显示的字段

<DataTable
     ref="dt"
     :value="students"
     v-model:selection="selectedUsers"
     dataKey="id"
     :paginator="true"
     :rows="10"
     :filters="filters"
     paginatorTemplate="FirstPageLink PrevPageLink PageLinks NextPageLink LastPageLink CurrentPageReport RowsPerPageDropdown"
     :rowsPerPageOptions="[5, 10, 25]"
     currentPageReportTemplate="Showing {first} to {last} of {totalRecords} products"
     responsiveLayout="scroll"
 >
   <!--表头-->
   <template #header>
     <div class="flex flex-column md:flex-row md:justify-content-between md:align-items-center">
       <h5 class="m-0">学生管理</h5>
       <span class="block mt-2 md:mt-0 p-input-icon-left">
           <i class="pi pi-search"/>
           <InputText v-model="filters['global'].value" placeholder="搜索..."/>
       </span>
     </div>
   </template>

   <!--内容-->
   <Column selectionMode="multiple" headerStyle="width: 3rem"></Column>
   <Column field="sclass_name" header="班级" :sortable="true" headerStyle="min-width:10rem;"></Column>
   <Column field="name" header="姓名" :sortable="true" headerStyle="min-width:10rem;"></Column>
   <Column field="age" header="年龄" :sortable="true" headerStyle="min-width:8rem;"></Column>
   <Column field="gender" header="性别" :sortable="true" headerStyle="min-width:8rem;"></Column>
   <Column field="phone" header="手机" :sortable="true" headerStyle="min-width:8rem;"></Column>
   <Column field="master_name" header="班主任" :sortable="true" headerStyle="min-width:8rem;"></Column>
   <Column field="master_phone" header="班主任电话" :sortable="true" headerStyle="min-width:8rem;"></Column>
   <Column field="home_name" header="家长" :sortable="true" headerStyle="min-width:8rem;"></Column>
   <Column field="home_phone" header="家长电话" :sortable="true" headerStyle="min-width:8rem;"></Column>
   <Column headerStyle="min-width:10rem;">
     <template #body="slotProps">
       <Button icon="pi pi-pencil" class="p-button-rounded p-button-success mr-2"
               @click="editUser(slotProps.data)"/>
       <Button icon="pi pi-trash" class="p-button-rounded p-button-warning mt-2"
               @click="confirmDeleteUser(slotProps.data)"/>
     </template>
   </Column>
 </DataTable>

完整代码如下:

<script setup>
import {FilterMatchMode} from 'primevue/api';
import {ref, onBeforeMount} from 'vue';
import {useToast} from 'primevue/usetoast';
import students from "@/assets/data/students.json"

// 用户
const user = ref({
  id: 0,
  name: "",
  age: 0,
})
const toast = useToast();

const userDialog = ref(false); // 用户弹窗是否显示
const deleteUserDialog = ref(false); // 确认删除用户弹窗是否显示
const deleteUsersDialog = ref(false); // 批量删除用户弹窗是否显示
const selectedUsers = ref(null);
const dt = ref(null);
const filters = ref({});
const submitted = ref(false);


onBeforeMount(() => {
  initFilters();
});

/**
 * 打开新增用户的弹窗
 */
function openNew() {
  user.value = {
    id: 0,
    name: "",
    age: 0,
  };
  submitted.value = false;
  userDialog.value = true;
}

/**
 * 新增用户
 */
function addUser() {
  console.log("新增用户:", user.value)
  userDialog.value = false
}

const hideDialog = () => {
  userDialog.value = false;
  submitted.value = false;
};


const editUser = (editUser) => {
  user.value = {...editUser};
  console.log(user);
  userDialog.value = true;
};

/**
 * 确认删除用户
 * @param editUser 要删除的用户信息
 */
const confirmDeleteUser = (editUser) => {
  user.value = editUser;
  deleteUserDialog.value = true;
};

/**
 * 删除用户
 */
const deleteUser = () => {
  users = users.filter((val) => val.id !== user.value.id);
  deleteUserDialog.value = false;
  user.value = {
    id: 0,
    name: "",
    age: 0,
  };
  toast.add({severity: 'success', summary: '成功', detail: '删除用户', life: 3000});
};

const exportCSV = () => {
  dt.value.exportCSV();
};

const confirmDeleteSelected = () => {
  deleteUsersDialog.value = true;
};

/**
 * 删除选中的用户
 */
const deleteSelectedUsers = () => {
  users = users.filter((val) => !selectedUsers.value.includes(val));
  deleteUsersDialog.value = false;
  selectedUsers.value = null;
  toast.add({severity: 'success', summary: '成功', detail: '删除用户', life: 3000});
};

/**
 * 初始化过滤器
 */
const initFilters = () => {
  filters.value = {
    global: {value: null, matchMode: FilterMatchMode.CONTAINS}
  };
};
</script>

<template>
  <div class="grid">
    <div class="col-12">
      <div class="card">
        <!--消息提示-->
        <Toast/>
        <!--顶部工具栏-->
        <Toolbar class="mb-4">
          <!--左侧-->
          <template v-slot:start>
            <div class="my-2">
              <Button label="新增" icon="pi pi-plus" class="p-button-success mr-2" @click="openNew"/>
              <Button label="删除" icon="pi pi-trash" class="p-button-danger" @click="confirmDeleteSelected"
                      :disabled="!selectedUsers || !selectedUsers.length"/>
            </div>
          </template>
          <!--右侧-->
          <template v-slot:end>
            <FileUpload mode="basic" accept="image/*" :maxFileSize="1000000" label="Import" chooseLabel="导入"
                        class="mr-2 inline-block"/>
            <Button label="导出" icon="pi pi-upload" class="p-button-help" @click="exportCSV($event)"/>
          </template>
        </Toolbar>

        <!--数据表格-->
        <DataTable
            ref="dt"
            :value="students"
            v-model:selection="selectedUsers"
            dataKey="id"
            :paginator="true"
            :rows="10"
            :filters="filters"
            paginatorTemplate="FirstPageLink PrevPageLink PageLinks NextPageLink LastPageLink CurrentPageReport RowsPerPageDropdown"
            :rowsPerPageOptions="[5, 10, 25]"
            currentPageReportTemplate="Showing {first} to {last} of {totalRecords} products"
            responsiveLayout="scroll"
        >
          <!--表头-->
          <template #header>
            <div class="flex flex-column md:flex-row md:justify-content-between md:align-items-center">
              <h5 class="m-0">学生管理</h5>
              <span class="block mt-2 md:mt-0 p-input-icon-left">
                  <i class="pi pi-search"/>
                  <InputText v-model="filters['global'].value" placeholder="搜索..."/>
              </span>
            </div>
          </template>

          <!--内容-->
          <Column selectionMode="multiple" headerStyle="width: 3rem"></Column>
          <Column field="sclass_name" header="班级" :sortable="true" headerStyle="min-width:10rem;"></Column>
          <Column field="name" header="姓名" :sortable="true" headerStyle="min-width:10rem;"></Column>
          <Column field="age" header="年龄" :sortable="true" headerStyle="min-width:8rem;"></Column>
          <Column field="gender" header="性别" :sortable="true" headerStyle="min-width:8rem;"></Column>
          <Column field="phone" header="手机" :sortable="true" headerStyle="min-width:8rem;"></Column>
          <Column field="master_name" header="班主任" :sortable="true" headerStyle="min-width:8rem;"></Column>
          <Column field="master_phone" header="班主任电话" :sortable="true" headerStyle="min-width:8rem;"></Column>
          <Column field="home_name" header="家长" :sortable="true" headerStyle="min-width:8rem;"></Column>
          <Column field="home_phone" header="家长电话" :sortable="true" headerStyle="min-width:8rem;"></Column>
          <Column headerStyle="min-width:10rem;">
            <template #body="slotProps">
              <Button icon="pi pi-pencil" class="p-button-rounded p-button-success mr-2"
                      @click="editUser(slotProps.data)"/>
              <Button icon="pi pi-trash" class="p-button-rounded p-button-warning mt-2"
                      @click="confirmDeleteUser(slotProps.data)"/>
            </template>
          </Column>
        </DataTable>

        <!--新增弹窗-->
        <Dialog v-model:visible="userDialog"
                :style="{ width: '450px' }"
                header="新增用户"
                :modal="true"
                class="p-fluid">
          <div class="field">
            <label for="name">姓名</label>
            <InputText id="name" v-model.trim="user.name" required="true" autofocus
                       :class="{ 'p-invalid': submitted && !user.name }"/>
            <small class="p-invalid" v-if="submitted && !user.name">姓名不能为空</small>
          </div>
          <div class="field">
            <label for="name">年龄</label>
            <InputText id="name" v-model.number="user.age" required="true" autofocus
                       :class="{ 'p-invalid': submitted && !user.age }"/>
            <small class="p-invalid" v-if="submitted && !user.age">年龄不能为空</small>
          </div>
          <template #footer>
            <Button label="取消" icon="pi pi-times" class="p-button-text" @click="hideDialog"/>
            <Button label="保存" icon="pi pi-check" class="p-button-text" @click="addUser"/>
          </template>
        </Dialog>

        <!--确认删除弹窗-->
        <Dialog v-model:visible="deleteUserDialog" :style="{ width: '450px' }" header="Confirm" :modal="true">
          <div class="flex align-items-center justify-content-center">
            <i class="pi pi-exclamation-triangle mr-3" style="font-size: 2rem"/>
            <span v-if="user">您确认要删除 <b>{{ user.name }}</b>吗?</span>
          </div>
          <template #footer>
            <Button label="取消" icon="pi pi-times" class="p-button-text" @click="deleteUserDialog = false"/>
            <Button label="确认" icon="pi pi-check" class="p-button-text" @click="deleteUser"/>
          </template>
        </Dialog>

        <!--批量删除确认弹窗-->
        <Dialog v-model:visible="deleteUsersDialog" :style="{ width: '450px' }" header="请确认" :modal="true">
          <div class="flex align-items-center justify-content-center">
            <i class="pi pi-exclamation-triangle mr-3" style="font-size: 2rem"/>
            <span v-if="user">删除后无法撤销,您确定要删除吗?</span>
          </div>
          <template #footer>
            <Button label="取消" icon="pi pi-times" class="p-button-text" @click="deleteUsersDialog = false"/>
            <Button label="确认" icon="pi pi-check" class="p-button-text" @click="deleteSelectedUsers"/>
          </template>
        </Dialog>
      </div>
    </div>
  </div>
</template>


显示效果如下:
在这里插入图片描述

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

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

相关文章

java图书管理系统

主要模块&#xff1a; 为用户开通借书服务增加图书信息登记图书借出信息 技术栈&#xff1a; JSPServletTomcat9.0IDEAMysql 前台登录验证使用框架 数据库脚本包括登录用户名和密码已经写在了数据库脚本.sql 中 解压“需要的jar包”添加到项目的dependency中 运行效果&a…

构建基于小红书笔记详情API的内容生态

随着互联网的发展&#xff0c;内容生态的构建已经成为了许多企业和个人的重要任务。小红书作为一家以内容分享为主的社交平台&#xff0c;其API的开放为开发者提供了一种全新的方式来获取用户生成内容&#xff08;UGC&#xff09;。本文将介绍如何从无到有地构建基于小红书笔记…

告别HTTP,拥抱HTTPS!免费SSL证书领取指南

为什么选择HTTPS&#xff1f; HTTP和HTTPS之间的主要区别在于安全性。HTTP是一种不安全的协议&#xff0c;数据在传输过程中是明文的&#xff0c;容易受到中间人攻击。而HTTPS通过SSL&#xff08;Secure Sockets Layer&#xff09;或TLS&#xff08;Transport Layer Security&…

zabbix通过自动发现-配置监控项、触发器(小白教程)

自动发现配置参考链接&#xff08;不小白&#xff0c;不友好&#xff09; zabbix-get介绍 1配置 zabbix server&#xff1a;版本7&#xff08;不影响&#xff09;,IP地址&#xff1a;192.168.0.60zabbix agent&#xff1a;版本agent1&#xff08;不影响&#xff09;&#xff…

【Graylog】通过Pipelines在Graylog生成IP地理位置信息

序 在当今数字化时代&#xff0c;随着网络攻击的不断增加和全球化的用户活动&#xff0c;了解IP地址的地理位置信息变得越来越重要。对于网络安全和营销策略来说&#xff0c;掌握IP地址的地理信息可以带来许多好处。 接下里将介绍如何通过Graylog的Pipelines功能&#xff0c;…

arkts中@Watch监听的使用

概述 Watch用于监听状态变量的变化&#xff0c;当状态变量变化时&#xff0c;Watch的回调方法将被调用。Watch在ArkUI框架内部判断数值有无更新使用的是严格相等&#xff08;&#xff09;&#xff0c;遵循严格相等规范。当在严格相等为false的情况下&#xff0c;就会触发Watch的…

【数据结构——图】图的最短路径(头歌习题)【合集】

目录 第1关&#xff1a;单源最短路径完整代码 第2关&#xff1a;多源最短路径输入格式:输出格式:完整代码 第1关&#xff1a;单源最短路径 给一个n(1 ≤ n ≤ 2500) 个点 m(1 ≤ m ≤ 6200) 条边的无向图&#xff0c;求 s 到 t 的最短路。 输入格式: 第一行四个由空格隔开的整…

计算机视觉工程师就业前景如何

计算机视觉主要涵盖了图像处理、模式识别等多个领域&#xff0c;可以应用到很多行业中。随着人工智能技术的快速发展&#xff0c;计算机视觉作为其中的重要分支之一&#xff0c;其就业前景非常广阔。 为进一步贯彻落实中共中央印发《关于深化人才发展体制机制改革的意见》和国…

AIGC重塑基础设施,高密数据中心为何众望所归?

凯文凯利在《必然》中认为&#xff0c;科技在本质上有所偏好&#xff0c;使得它朝往某种特定方向。 毫无疑问&#xff0c;进入到数字经济时代&#xff0c;人工智能技术飞速发展与加速应用之际&#xff0c;这个特定方向逐渐明朗&#xff1a;即算力科技&#xff0c;算力已经成为…

驾驶人类未来:Apollo自动驾驶系统的影响力

前言 「作者主页」&#xff1a;雪碧有白泡泡 「个人网站」&#xff1a;雪碧的个人网站 ChatGPT体验地址 文章目录 前言1. 什么是自定义指令&#xff1f;2. Apollo中的自定义指令2.1 查询中的自定义指令2.2 变更操作中的自定义指令 3. 自定义指令的实现结论 文章目录 前言1. 什…

原型链补充

1.什么是原型对象 函数的独有属性,他用prototype来表示,可以在函数的prototype上挂载一些公用的属性和方法,供实例化对象来访问。 2.__proto__属性 这个属性每一个对象都有,实例化对象就是通过这个属性,来访问原型对象上的属性和方法的。 3.三者之间的关系 1.在构造函数的原型…

力扣算法-Day16

目录 454. 四数相加 II 383. 赎金信 454. 四数相加 II 给你四个整数数组 nums1、nums2、nums3 和 nums4 &#xff0c;数组长度都是 n &#xff0c;请你计算有多少个元组 (i, j, k, l) 能满足&#xff1a; 0 < i, j, k, l < nnums1[i] nums2[j] nums3[k] nums4[l] …

用linux中定时任务Crontab,向企业微信群通过机器人发送消息

1.使用yum命令安装Crontab&#xff1a;这个很关键&#xff0c;没有安装的话会提示命令not found yum install vixie-cron yum install crontabs 注&#xff1a;vixie-cron软件包是cron的主程序&#xff1b; crontabs软件包是用来安装、卸装、或列举用来驱动 cron 守护进程的表…

下载大模型,保存阿里云盘

一、解决场景 下载模型或数据集&#xff0c;到国内云GPU平台、阿里云盘&#xff08;便于持久化储存&#xff0c;或者分享朋友&#xff09;。 及时收藏&#xff0c;下次还能找到&#xff01; 二、优势 此方法可以避免大文件下载到本地——占用内存&#xff0c;受到小带宽网络…

mvs一镜到底

mvs一镜到底 一、Use smart-unwrap to create uv coordinates and store your mesh as .obj file.1. smart-unwrap2. store your mesh as .obj file.3. 关闭blender二、grayscales rendering and viepoints rotation and tranlation matrices.1. 添加运动轨迹2. 添加相机约束3.…

MySQL数据库导入100万数据不同方式的性能差异

本文将介绍MySQL数据库导入100万数据的三种方式性能比较。 三种方式分别为&#xff1a; &#xff08;1&#xff09;逐条INSERT &#xff08;2&#xff09;批量INSERT提交 &#xff08;3&#xff09;通过mysql自带的load data命令 应用场景&#xff1a;假设需要向100万个号码…

HTML 基础

文章目录 01-标签语法标签结构 03-HTML骨架04-标签的关系05-注释06-标题标签07-段落标签08-换行和水平线09-文本格式化标签10-图像标签图像属性 11-路径相对路径绝对路径 12-超链接标签13-音频14-视频 01-标签语法 HTML 超文本标记语言——HyperText Markup Language。 超文本…

Plantuml之YAML效果图语法介绍(二十六)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

Apollo自动驾驶系统:实现城市可持续交通的迈向

前言 「作者主页」&#xff1a;雪碧有白泡泡 「个人网站」&#xff1a;雪碧的个人网站 ChatGPT体验地址 文章目录 前言引言&#xff1a;1. 什么是微服务架构&#xff1f;2. 微服务架构的组成要素3. 微服务架构的挑战和解决方案4. 微服务架构的可扩展性和弹性 第二部分&#x…

【Simulink系列】——用扫地机器人实例快速引入

目录 一、Simulink基本认知 1、模块图建模 2、仿真基本流程 3、调试技巧 二、基于模型的simulink设计实例&#xff08;两轮扫地机器人&#xff09; 1、系统定义与布局 确定建模目的 确定系统组件和接口 确定系统布局 2、建模并验证系统 对组件建模 ①物理组件建模 …