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

news2024/11/20 7:20:09

环境搭建

通过解压之前《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>


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

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

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

相关文章

新闻稿发布:媒体重要还是价格重要

在当今信息爆炸的数字时代&#xff0c;企业推广与品牌塑造不可或缺的一环就是新闻稿发布。新闻稿是一种通过媒体渠道传递企业信息、宣传品牌、事件或产品新闻的文本形式。发布新闻稿的过程旨在将企业的声音传递给更广泛的受众&#xff0c;借助媒体平台实现品牌故事的广泛传播。…

exec、execFile、fork、spawn的区别与使用场景

在Node.js中&#xff0c;通过子进程可以实现并行执行任务&#xff0c;处理复杂的操作&#xff0c;以及与外部命令或文件进行交互。Node.js提供了多种子进程创建方法&#xff0c;包括exec、execFile、fork和spawn。本文将对这些方法进行比较&#xff0c;并介绍它们的适用场景和示…

【深度学习-基础学习】Transformer 笔记

本篇文章学习总结 李宏毅 2021 Spring 课程中关于 Transformer 相关的内容。课程链接以及PPT&#xff1a;李宏毅Spring2021ML这篇Blog需要Self-Attention为前置知识。 Transfomer 简介 Transfomer 架构主要是用来解决 Seq2Seq 问题的&#xff0c;也就是 Sequence to Sequence…

大数据StarRocks(一) StarRocks概述

1 StarRocks介绍 StarRocks是新一代极速全场景MPP(Massively Parallel Processing)数据库&#xff0c;它充分吸收关系型OLAP数据库和分布式存储系统在大数据时代的优秀研究成果&#xff0c;在业界实践的基础上&#xff0c;进一步改进优化、升级架构&#xff0c;并增添了众多全…

NSSCTF 1zjs

开启环境: 搞就完事了,别玩魔法! 源码打开 点击访问:./dist/index.umd.js" 搜索php,找到23条相关的,注意到有一个特别的信息: PERFORMANCE OF THIS SOFTWARE.Your gift just take it : /fk3f1ag.php 访问: node4.anna.nssctf.cn:28325/fk3f1ag.php 得到这样: ([![]…

【hyperledger-fabric】部署和安装

简介 对hyperledger-fabric进行安装&#xff0c;话不多说&#xff0c;直接开干。但是需要申明一点&#xff0c;也就是本文章全程是开着加速器进行的资源操作&#xff0c;所以对于没有开加速器的情况可能会由于网络原因导致下载资源失败。 资料提供 1.官方部署文档在此&#…

IPC之十二:使用libdbus在D-Bus上异步发送/接收信号的实例

IPC 是 Linux 编程中一个重要的概念&#xff0c;IPC 有多种方式&#xff0c;本 IPC 系列文章的前十篇介绍了几乎所有的常用的 IPC 方法&#xff0c;每种方法都给出了具体实例&#xff0c;前面的文章里介绍了 D-Bus 的基本概念以及调用远程方法的实例&#xff0c;本文介绍 D-Bus…

mysql 条件位运算实现多值存储

一、多值存储 mysql 条件位运算位运算实现多值存储&#xff0c;方法适合数据范围有限&#xff0c;且不会变更在业务上往往会出现多选的情况&#xff0c;例&#xff1a;选择 周一 至 周日 随意组合&#xff1b; 数据在设计时就会如何去储存&#xff1f; 一种是一般是在储存是以…

ASP.NET Core AOT

Native AOT 最初在 .NET 7 中引入&#xff0c;在即将发布的 .NET 8 版本中可以与 ASP.NET Core 一起使用。在这篇文章中&#xff0c;我们从总体角度审视其优点和缺点&#xff0c;并进行测量以量化不同平台上的改进。 源代码&#xff1a;https://download.csdn.net/download/he…

MATLAB中xcorr函数用法

目录 语法 说明 示例 两个向量的互相关 向量的自相关 归一化的互相关 xcorr函数的功能是返回互相关关系。 语法 r xcorr(x,y) r xcorr(x) r xcorr(___,maxlag) r xcorr(___,scaleopt) [r,lags] xcorr(___) 说明 r xcorr(x,y) 返回两个离散时间序列的互相关。互相…

SpringBoot整合ElasticSearch实现CRUD操作

本文来说下SpringBoot整合ES实现CRUD操作 文章目录 概述项目搭建 概述 SpringBoot支持两种技术和es交互。一种的jest&#xff0c;还有一种就是SpringData-ElasticSearch。根据引入的依赖不同而选择不同的技术。反正作为spring全家桶&#xff0c;目前是以springdata为主流使用技…

uniapp中uview组件丰富的Code 验证码输入框的使用方法

目录 基本使用 #自定义提示语 #保持倒计时 API #Props #Methods #Event 基本使用 通过ref获取组件对象&#xff0c;再执行后面的操作&#xff0c;见下方示例。 通过seconds设置需要倒计的秒数(默认60)通过ref调用组件内部的start方法&#xff0c;开始倒计时通过监听cha…

在 Oracle 数据库表中加载多个数据文件

在本文中&#xff0c;我将展示 SQL 加载器 Unix 脚本实用程序的强大功能&#xff0c;其中 SQL 加载器可以使用自动 shell 脚本加载多个数据文件。这在处理大量数据以及需要将数据从一个系统移动到另一个系统时非常有用。 它适合涉及大量历史数据的迁移项目。那么就不可能为每…

跟着cherno手搓游戏引擎【2】:日志系统spdlog和premake的使用

配置&#xff1a; 日志库文件github&#xff1a; GitHub - gabime/spdlog: Fast C logging library. 新建vendor文件夹 将下载好的spdlog放入 配置YOTOEngine的附加包含目录&#xff1a; 配置Sandbox的附加包含目录&#xff1a; 包装spdlog&#xff1a; 在YOTO文件夹下创建…

ORACLE Primavera P6, Unifier v23.12 系统分享

引言 根据上周的计划&#xff0c;我近日简单制作了一个基于ORACLE Primavera P6 EPPM 以及Unifier 最新版23.12的虚拟机演示环境&#xff0c;里面包括了p6 和 unifier的全套系统服务 此虚拟系统环境仅用于演示、培训和测试目的。如要在生产环境中使用此虚拟机&#xff0c;请您…

计算机毕业设计 SpringBoot的停车场管理系统 Javaweb项目 Java实战项目 前后端分离 文档报告 代码讲解 安装调试

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…

自定义指令:让 Vue 开发更有趣(下)

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

SkyWalking实战与设置警告

日升时奋斗&#xff0c;日落时自省 目录 1、简述 2、Skywalking优越性 2.1、相同产品分析 2.2、Skywalking组成 2.3、Skywalking本质 3、Skywalking服务安装与启动 3.1、ES安装并启动 3.1.2、删除环境变量 3.1.3、预启动ES 3.1.4、关闭HTTPS认证 3.1.5、关闭登录授…

Go语言基础简单了解

文章目录 前言关于Go学习流程 基础语法注释变量常量数据类型运算符fmt库 流程控制if、switch、selectfor、break、continue遍历String 函数值传递和引用传递deferinit匿名、回调、闭包函数 数组和切片Map结构体自定义数据类型接口协程和channel线程锁异常处理泛型文件读取文件写…

MCS-51存储器的特点

目录 1.MCS-51存储器的结构 2.片内数据存储器 (1)片内数据存储器低128B (2) 片外数据存储器高128B 2.片内数据存储器高128B 3.片内程序存储器 1.MCS-51存储器的结构 如图所示&#xff0c;MCS-51 的存储器在物理结构上分成四个存储空间:片内程序存储器、片外程序存储器、…