人力资源管理后台 === 上传+权限数据

news2024/11/29 2:43:27

目录

1.员工详情-封装员工头像组件

2.员工详情-上传图片-创建腾讯云存储桶

3.员工详情-使用cos-sdk完成上传

4. 权限管理-搭建权限页面

5.权限管理-获取数据转化树形

6.权限管理-作业

7.权限应用-权限概念

8.权限应用-员工分配角色-弹出层

9.权限应用-员工分配角色-回显数据并提交

9.权限应用-给角色分配权限-弹出层

10.权限应用-角色分配权限-显示已有权限数据

11.权限应用-角色分配权限-确定提交


1.员工详情-封装员工头像组件

image.png

image.png

  • 创建image-upload组件-代码位置(src/views/employee/components/image-upload.vue)
<template>
  <el-upload
    class="avatar-uploader"
    action=""
    :show-file-list="false"
    :before-upload="beforeAvatarUpload"
  >
    <!-- (自动上传)action是上传地址 人资项目不需要 人资项目(手动上传)  -->
    <!-- show-file-list不展示列表 -->
    <img v-if="value" :src="value" class="avatar">
    <i v-else class="el-icon-plus avatar-uploader-icon" />
  </el-upload>
</template>

<script>
export default {
  props: {
    value: {
      type: String,
      default: ''
    }
  },
  methods: {
    // 检查函数 判断文件的类型还有大小 return  true(继续上传)/false(停止上传)
    beforeAvatarUpload(file) {
      // jpeg png gif bmp

      const isJPG = ['image/jpeg', 'image/png', 'image/gif', 'image/bmp'].includes(file.type)
      const isLt2M = file.size / 1024 / 1024 < 5 // 5M

      if (!isJPG) {
        this.$message.error('上传头像图片只能是 JPG PNG GIF BMP 格式!')
      }
      if (!isLt2M) {
        this.$message.error('上传头像图片大小不能超过 5MB!')
      }
      return isJPG && isLt2M
    }
  }
}
</script>

<style>
  .avatar-uploader .el-upload {
    border: 1px dashed #d9d9d9;
    border-radius: 6px;
    cursor: pointer;
    position: relative;
    overflow: hidden;
  }
  .avatar-uploader .el-upload:hover {
    border-color: #409EFF;
  }
  .avatar-uploader-icon {
    font-size: 28px;
    color: #8c939d;
    width: 178px;
    height: 178px;
    line-height: 178px;
    text-align: center;
  }
  .avatar {
    width: 178px;
    height: 178px;
    display: block;
  }
</style>
  • 在父组件中应用-代码位置(src/views/employee/detail.vue)
  <image-upload v-model="userInfo.staffPhoto" />

2.员工详情-上传图片-创建腾讯云存储桶

image.png


 

image.png


1.注册腾讯云账号-课前完成登录 - 腾讯云
2.创建腾讯云存储桶
3.得到应用密钥和应用标识

  • 创建存储桶

image.png


 

image.png


 

image.png


 

image.png


 

image.png

image.png

获取存储桶相关信息

image.png

将存储桶和所属地域拷贝下来,备用

  • 获取应用标识登录 - 腾讯云

image.png

将SecretId和SecretKey拷贝下来,备用

3.员工详情-使用cos-sdk完成上传

image.png

  • 安装腾讯云js-sdk
$ npm i cos-js-sdk-v5 
$ yarn add  cos-js-sdk-v5

  • 使用el-upload自定义上传-代码位置(src/views/employee/components/image-upload.vue)
<template>
  <el-upload
    class="avatar-uploader"
    action=""
    :show-file-list="false"
    :before-upload="beforeAvatarUpload"
    :http-request="uploadImage"
  >
    <!-- (自动上传)action是上传地址 人资项目不需要 人资项目(手动上传)  -->
    <!-- show-file-list不展示列表 -->
    <img v-if="value" :src="value" class="avatar">
    <i v-else class="el-icon-plus avatar-uploader-icon" />
  </el-upload>
</template>

  • 实现上传方法-代码位置
    // 选择图片上传
    uploadImage(params) {
      console.log(params.file)
      const cos = new COS({
        SecretId: 'AKIDDSdjgnjT1NZ3a7VjkfVIwOdfv9IH2b8e',
        SecretKey: 'WEwe9WJ9vLeq1BHNLLKF5Up10ndUDk24'
      }) // 完成cos对象的初始化
      cos.putObject({
        Bucket: 'heimachengxuyuan-1302806742', // 存储桶名称
        Region: 'ap-nanjing', // 地域名称
        Key: params.file.name, // 文件名称
        StorageClass: 'STANDARD', // 固定值
        Body: params.file // 文件对象
      }, (err, data) => {
        if (data.statusCode === 200 && data.Location) {
          // 拿到了腾讯云返回的地址
          // 通过input自定义事件将地址传出去
          this.$emit('input', 'http://' + data.Location) // 将地址返回了
        } else {
          this.$message.error(err.Message) // 上传失败提示消息
        }
      })
    }

这里需要使用 上个小节准备好的存储桶的名称-地域名称-应用标识-应用密钥

这里需要知道Cos的初始化和上传的方法
 

image.png

image.png

4. 权限管理-搭建权限页面

image.png

  • 实现权限管理的页面结构-代码位置(src/views/permission/index.vue)
<template>
  <div class="container">
    <div class="app-container">
      <el-button class="btn-add" size="mini" type="primary">添加权限</el-button>
      <el-table>
        <el-table-column label="名称" />
        <el-table-column label="标识" />
        <el-table-column label="描述" />
        <el-table-column label="操作">
          <el-button size="mini" type="text">添加</el-button>
          <el-button size="mini" type="text">编辑</el-button>
          <el-button size="mini" type="text">删除</el-button>
        </el-table-column>
      </el-table>
    </div>
  </div>
</template>
<script>
export default {
  name: 'Permission'
}
</script>
<style>
.btn-add {
  margin: 10px;
}
</style>

5.权限管理-获取数据转化树形

image.png

  • 封装获取权限API-代码位置(src/api/permission.js)
import request from '@/utils/request'

/** *
 * 获取权限列表
 * **/

export function getPermissionList() {
  return request({
    url: '/sys/permission'
  })
}
  • 获取数据-转化树形-控制二级权限不显示添加按钮(src/views/permission/index.vue)
<template>
  <div class="container">
    <div class="app-container">
      <el-button class="btn-add" size="mini" type="primary">添加权限</el-button>
      <el-table default-expand-all :data="list" row-key="id">
        <el-table-column prop="name" label="名称" />
        <el-table-column prop="code" label="标识" />
        <el-table-column prop="description" label="描述" />
        <el-table-column label="操作">
          <template v-slot="{ row }">
            <el-button v-if="row.type === 1" size="mini" type="text">添加</el-button>
            <el-button size="mini" type="text">编辑</el-button>
            <el-button size="mini" type="text">删除</el-button>
          </template>

        </el-table-column>
      </el-table>
    </div>
  </div>
</template>
<script>
import { getPermissionList } from '@/api/permission'
import { transListToTreeData } from '@/utils'
export default {
  name: 'Permission',
  data() {
    return {
      list: []
    }
  },
  created() {
    this.getPermissionList()
  },
  methods: {
    async getPermissionList() {
      this.list = transListToTreeData(await getPermissionList(), 0) // 将列表数据转化成树形结构
    }
  }
}
</script>
<style>
.btn-add {
  margin: 10px;
}
</style>

6.权限管理-作业

基于权限接口和线上效果完成 权限点的新增- 删除- 编辑

image.png

image.png

要求:

  1. 实现新增-删除-编辑功能
  2. 编辑模式不做限制-弹层-行内-跳转都可
  3. 注意:二级权限和一级权限的区别为type,当type为1时,为一级权限,当type为2时,为二级权限
  4. 二级权限应该添加在一级权限下,二者是通过id和pid进行关联的,其类似于组织架构中的添加子部门。

作业实现

  1. 封装权限管理的API接口-代码位置(src/api/permission.js)
// 新增权限
export function addPermission(data) {
  return request({
    url: '/sys/permission',
    method: 'post',
    data
  })
}

// 更新权限
export function updatePermission(data) {
  return request({
    url: `/sys/permission/${data.id}`,
    method: 'put',
    data
  })
}

// 删除权限
export function delPermission(id) {
  return request({
    url: `/sys/permission/${id}`,
    method: 'delete'
  })
}
// 获取权限详情
export function getPermissionDetail(id) {
  return request({
    url: `/sys/permission/${id}`
  })
}

2.新增编辑权限的弹层-代码位置(src/views/permission/index.vue)

<!-- 放置一个弹层 用来编辑新增节点 -->
   <el-dialog :title="`${showText}权限点`" :visible="showDialog" @close="btnCancel">
      <!-- 表单 -->
      <el-form ref="perForm" :model="formData" :rules="rules" label-width="120px">
        <el-form-item label="权限名称" prop="name">
          <el-input v-model="formData.name" style="width:90%" />
        </el-form-item>
        <el-form-item label="权限标识" prop="code">
          <el-input v-model="formData.code" style="width:90%" />
        </el-form-item>
        <el-form-item label="权限描述">
          <el-input v-model="formData.description" style="width:90%" />
        </el-form-item>
        <el-form-item label="开启">
          <el-switch
            v-model="formData.enVisible"
            active-value="1"
            inactive-value="0"
          />
        </el-form-item>
      </el-form>
      <el-row slot="footer" type="flex" justify="center">
        <el-col :span="6">
          <el-button size="small" type="primary" @click="btnOK">确定</el-button>
          <el-button size="small" @click="btnCancel">取消</el-button>
        </el-col>
      </el-row>
    </el-dialog>

声明弹层需要的变量和表单数据和校验规则-代码位置(src/views/permission/index.vue)

import { getPermissionList, updatePermission, addPermission, getPermissionDetail, delPermission } from '@/api/permission'
import { transListToTreeData } from '@/utils'
export default {
  data() {
    return {
      list: [],
      formData: {
        name: '', // 名称
        code: '', // 标识
        description: '', // 描述
        type: '', // 类型 该类型 不需要显示 因为点击添加的时候已经知道类型了
        pid: '', // 因为做的是树 需要知道添加到哪个节点下了
        enVisible: "0" // 默认关闭
      },
      rules: {
        name: [{ required: true, message: '权限名称不能为空', trigger: 'blur' }],
        code: [{ required: true, message: '权限标识不能为空', trigger: 'blur' }]
      },
      showDialog: false
    }
  },
  computed: {
    showText() {
      return this.formData.id ? '编辑' : '新增'
    }
  },
  created() {
    this.getPermissionList()
  },
  methods: {
    async  getPermissionList() {
      this.list = transListToTreeData(await getPermissionList(), 0)
    }
  }

}
  1. 实现一级权限新增-二级权限新增-代码位置(src/views/permission/index.vue)

添加一级权限-

image.png

<el-button class="btn-add" size="mini" type="primary" @click="addPermission(row.id, 1)">添加权限</el-button>

添加二级权限-

image.png

注意:一级添加的type为1, 二级添加的type为2

点击添加调用的方法

   addPermission(pid, type) {
      this.formData.pid = pid
      this.formData.type = type
      this.showDialog = true
  },

实现确定和取消方法

btnOK() {
      this.$refs.perForm.validate().then(() => {
        if (this.formData.id) {
          return updatePermission(this.formData)
        }
        return addPermission(this.formData)
      }).then(() => {
        //  提示消息
        this.$message.success('新增成功')
        this.getPermissionList()
        this.showDialog = false
      })
    },
    btnCancel() {
      this.formData = {
        name: '', // 名称
        code: '', // 标识
        description: '', // 描述
        type: '', // 类型 该类型 不需要显示 因为点击添加的时候已经知道类型了
        pid: '', // 因为做的是树 需要知道添加到哪个节点下了
        enVisible: "0" // 默认关闭
      }
      this.$refs.perForm.resetFields()
      this.showDialog = false
    },

实现编辑弹层

<el-button type="text" size="mini" @click="editPermission(row.id)">编辑</el-button>

点击编辑方法

 async editPermission(id) {
      // 根据获取id获取详情
      this.formData = await getPermissionDetail(id)
      this.showDialog = true
}

点击删除

<el-button type="text" size="mini" @click="delPermission(row.id)"> 删除</el-button>

删除方法

  // 删除操作
    async delPermission(id) {
      try {
        await this.$confirm('确定要删除该数据吗')
        await delPermission(id)
        this.getPermissionList()
        this.$message.success('删除成功')
      } catch (error) {
        console.log(error)
      }
    },

7.权限应用-权限概念

image.png

image.png

权限是通过角色这个中间人实现,首先员工拥有角色,角色拥有权限,那么员工自动拥有了角色所对应的权限。

所以接下来,我们需要实现 给员工分配角色,给角色分配权限。

  • 分配过程-给员工分角色

image.png

  • 分配过程-给角色分权限

image.png

8.权限应用-员工分配角色-弹出层

image.png

image.png

image.png

  • 封装获取可用角色的API-代码位置(src/api/employee.js)
/**
 * 获取可用的角色
 * **/

export function getEnableRoleList() {
  return request({
    url: '/sys/role/list/enabled'
  })
}
  • 声明变量控制弹层显示-和角色列表-代码位置(src/views/employee/index.vue)
data () {
  return {
      showRoleDialog: false, // 用来控制角色弹层的显示
      roleList: [], // 接收角色列表
      roleIds: [] // 用来双向绑定数据的
  }
}
  • 点击角色按钮-获取角色列表-代码位置(src/views/employee/index.vue)
// 点击角色按钮弹出层
    async btnRole() {
      this.showRoleDialog = true
      this.roleList = await getEnableRoleList()
    }
  • 放置弹层-绑定变量和渲染checkbox-代码位置(src/views/employee/index.vue)
<el-dialog :visible.sync="showRoleDialog" title="分配角色">
      <!-- 弹层内容 -->
      <!-- checkbox -->
      <el-checkbox-group v-model="roleIds">
        <!-- 放置n个的checkbox  要执行checkbox的存储值 item.id-->
        <el-checkbox
          v-for="item in roleList"
          :key="item.id"
          :label="item.id"
        >{{ item.name }}</el-checkbox>
      </el-checkbox-group>
</el-dialog>

9.权限应用-员工分配角色-回显数据并提交

image.png

  • 封装给员工分配角色的接口-代码位置(src/api/employee.js)
/**
 * 分配员工角色
 * ***/

export function assignRole(data) {
  return request({
    url: '/sys/user/assignRoles',
    method: 'put',
    data
  })
}
  • 点击角色按钮时,获取员工已经拥有的角色,并记录当前点击的用户id-代码位置(src/views/employee/index.vue)

    在data中声明一个id用来记录

data () {
  return  {
    currentUserId: null // 用来记录当前点击的用户id
  }
}
async btnRole(id) {
      this.roleList = await getEnableRoleList()
      // 记录当前点击的id 因为后边 确定取消要存取给对应的用户
      this.currentUserId = id
      const { roleIds } = await getEmployeeDetail(id)
      this.roleIds = roleIds
      this.showRoleDialog = true // 调整顺序
},

注意,这里我们特地调整了弹层的顺序,因为获取已经拥有的角色是一个异步的过程,如果弹层显示在前,会出现卡顿的效果,表现出缓慢的效果,所以等到获取所有数据之后再弹层。

  • 点击确定实现给用户分配角色-代码位置(src/views/employee/index.vue)
 // 点击角色的确定
    async  btnRoleOK() {
      await assignRole({
        id: this.currentUserId,
        roleIds: this.roleIds
      })
      this.$message.success('分配用户角色成功')
      this.showRoleDialog = false
    }
  • 取消关闭弹层-代码位置(src/views/employee/index.vue)
<el-row slot="footer" type="flex" justify="center">
  <el-col :span="6">
    <el-button type="primary" size="mini" @click="btnRoleOK">确定</el-button>
    <el-button size="mini" @click="showRoleDialog = false">取消</el-button>
  </el-col>
</el-row>

9.权限应用-给角色分配权限-弹出层

image.png

image.png

  • 声明变量控制弹层显示和接收权限数据-代码位置(src/views/role/index.vue)
data () {
  return {
     showPermissionDialog: false,
     permissionData: []
  }
}
  • 点击分配权限-弹出层-获取数据并转化树形-代码位置(src/views/role/index.vue)
<el-button size="mini" type="text" @click="btnPermission">分配权限</el-button>
async  btnPermission() {
      this.showPermissionDialog = true
      this.permissionData = transListToTreeData(await getPermissionList(), 0)
}
  • 放置弹层和树组件-代码位置(src/views/role/index.vue)
<!-- 放置权限弹层 -->
    <el-dialog :visible.sync="showPermissionDialog" title="分配权限">
      <!-- 放置权限数据 -->
      <el-tree
        :data="permissionData"
        :props="{ label: 'name' }"
        show-checkbox
        default-expand-all
      />
    </el-dialog>

10.权限应用-角色分配权限-显示已有权限数据

image.png

image.png

  • 封装获取角色详情的API-代码位置(src/api/role.js)
/**
 * 获取角色详情
 * **/

export function getRoleDetail(id) {
  return request({
    url: `/sys/role/${id}`
  })
}
  • 声明变量记录当前点击的角色id和角色所拥有的权限数据-代码位置(src/views/role/index.vue)
data () {
  return {
      currentRoleId: null,
      permIds: []
  }
}
  • 点击分配权限按钮时传递角色id,并根据id获取该角色所拥有的权限-代码位置(src/views/role/index.vue)
<el-button size="mini" type="text" @click="btnPermission(row.id)">分配权限</el-button>
async  btnPermission(id) {
      this.currentRoleId = id
      const { permIds } = await getRoleDetail(id)
      this.permIds = permIds
      this.permissionData = transListToTreeData(await getPermissionList(), 0)
      this.showPermissionDialog = true
}
  • 设置el-tree组件的属性-node-key和当前选中数据-代码位置(src/views/role/index.vue)
<el-tree
        node-key="id"
        :data="permissionData"
        :props="{ label: 'name' }"
        show-checkbox
        default-expand-all
        :default-checked-keys="permIds"
  />

default-checked-keys的属性是设置当前选中的节点,但是必须配合node-key属性,因为permIds变量中存储的都是id,必须el-tree组件知道key是哪个字段,所以设置node-key="id"

11.权限应用-角色分配权限-确定提交

image.png

  • 封装分配权限的接口API-代码位置(src/api/role.js)
/**
 * 给角色分配权限
 *
 * ***/

export function assignPerm(data) {
  return request({
    url: '/sys/role/assignPrem',
    method: 'put',
    data
  })
}
  • 确定和取消事件-代码位置(src/views/role/index.vue)
 <el-row slot="footer" type="flex" justify="center">
        <el-col :span="6">
          <el-button type="primary" size="mini" @click="btnPermissionOK">确定</el-button>
          <el-button size="mini" @click="showPermissionDialog = false">取消</el-button>
      </el-col>
  </el-row>

// 点击确定时触发
    async  btnPermissionOK() {
      await assignPerm({
        id: this.currentRoleId,
        permIds: this.$refs.permTree.getCheckedKeys()
      })
      this.$message.success('角色分配权限成功')
      this.showPermissionDialog = false
    }

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

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

相关文章

运维 | 浅谈云计算的相关概念和分类

关注&#xff1a;CodingTechWork 云计算 云计算的出现 云计算是采用的按需付费的方式&#xff0c;通过互联网访问云服务器上的服务器、数据库等服务。云计算为何会出现&#xff1f;  如果现在一个企业想要进行软件管理部署&#xff0c;首先需要服务器主机和网络规划&#…

自建CA实战之 《0x01 Nginx 配置 https单向认证》

自建私有化证书颁发机构&#xff08;Certificate Authority&#xff0c;CA&#xff09;实战之 《0x01 Nginx 配置 https单向认证》 上一篇文章我们介绍了如何自建私有化证书颁发机构&#xff08;Certificate Authority&#xff0c;CA&#xff09;&#xff0c;本篇文章我们将介…

OSG粒子系统与阴影 - ​​​​​​​粒子系统的读取与保存(6)

粒子系统的读取与保存 在前面的章节中&#xff0c;已经讲到了所有的粒子系统的基本使用方法和自定义粒子系统的方法。有时需要把一个好的粒子系统保存起来&#xff0c;方便以后使用。保存粒子系统可以通过简单地调用 osgDB::writeNodeFile()来完成&#xff0c;如果直接读取并加…

高性能Mysql第三版(一)

学习目标&#xff1a; 高性能Mysql第3版 学习内容&#xff1a; MySQL架构与历史Mysql基座测试服务器性能Schema与数据类型优化创建高性能的索引查询性能优化Mysql高级特性Explain 文章目录 学习目标&#xff1a;高性能Mysql第3版 学习内容&#xff1a;1 Mysql逻辑架构1.1 My…

【STM32单片机】贪吃蛇游戏设计

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用STM32F103C8T6单片机控制器&#xff0c;使用8*8LED点阵模块、矩阵按键、蜂鸣器模块等。 主要功能&#xff1a; 系统运行后&#xff0c;贪吃蛇游戏开始运行&#xff0c;默认蛇身为2节&#xff…

057-第三代软件开发-文件监视器

第三代软件开发-文件监视器 文章目录 第三代软件开发-文件监视器项目介绍文件监视器实现原理关于 QFileSystemWatcher实现代码 关键字&#xff1a; Qt、 Qml、 关键字3、 关键字4、 关键字5 项目介绍 欢迎来到我们的 QML & C 项目&#xff01;这个项目结合了 QML&…

【数据结构初阶】树,二叉树

树&#xff0c;二叉树 1.树概念及结构1.1树的概念1.2 树的相关概念1.3 树的表示1.4 树在实际中的运用&#xff08;表示文件系统的目录树结构&#xff09; 2.二叉树概念及结构2.1概念2.2现实中的二叉树2.3 特殊的二叉树2.4 二叉树的性质2.5 二叉树的存储结构 1.树概念及结构 1.…

计算机视觉算法——基于Transformer的目标检测(DN DETR / DINO / Sparser DETR / Lite DETR)

计算机视觉算法——基于Transformer的目标检测&#xff08;DN DETR / DINO&#xff09; 计算机视觉算法——基于Transformer的目标检测&#xff08;DN DETR / DINO&#xff09;1. DN DETR1.1 Stablize Hungarian Matching1.2 Denoising1.3 Attention Mask 2. DINO2.1 Contrasti…

Map和Set小总结【温习】

目录 一、概念与模型 二、Map的使用 三、Set的说明 一些小练习 四、哈希表 1.概念 2.冲突 2.1、概念 2.2、冲突-->避免 2.3、冲突-->解决 &#xff08;1&#xff09;闭散列 &#xff08;2&#xff09;开散列 2.4、其他问题 一、概念与模型 1.概念&#xff1a…

全程云OA SQL注入漏洞复现

0x01 产品简介 全程云OA为企业提供日常办公管理、公文管理、工作请示、汇报、档案、知识体系、预算控制等26个功能&#xff0c;超过100多个子模块。为企业内部提供高效、畅通的信息渠道&#xff0c;同时也能大力推动公司信息系统发展&#xff0c;提高企业的办公自动化程度和综合…

wangeditor实时预览

<template><div><!--挂载富文本编辑器--><div style"width: 45%;float: left;margin-left: 2%"><p>编辑内容</p><div id"editor" style"height: 100%"></div></div><div style"w…

基于halo框架采用docker-compose快速部署个人博客

halo快速部署个人博客 技术方案 dockerdocker-composenginxmysql halo简介 Halo是一款现代化的开源博客/CMS系统&#xff0c;所有代码开源在GitHub上且处于积极维护状态。它是基于 Java Spring Boot 构建的&#xff0c;易于部署&#xff0c;支持REST API、模板系统、附件系…

二叉树算法—后继节点

与其明天开始&#xff0c;不如现在行动&#xff01; 文章目录 1 后继节点1.1 解题思路1.2 代码实现 &#x1f48e;总结 1 后继节点 1.1 解题思路 二叉树节点结构定义如下&#xff1a; public static class Node { public int cal; public Node left; public Node right; public…

记一次处理大数据而导致的内存溢出问题

问题 订单服务通过MQ进行订单同步时&#xff0c;刚启动可以正常消费&#xff0c;但是跑一会就会卡住&#xff0c;每次都是第8个kafka分区不行再进行消费&#xff0c;其他分区消费的很慢。 现象 首先&#xff0c;CPU超高&#xff0c;达到百分之300多&#xff1b;其次&#xf…

纯新手发布鸿蒙的第一个java应用

第一个java开发鸿蒙应用 1.下载和安装华为自己的app开发软件DevEco Studio HUAWEI DevEco Studio和SDK下载和升级 | HarmonyOS开发者 2.打开IDE新建工程&#xff08;当前用的IDEA 3.1.1 Release&#xff09; 选择第一个&#xff0c;其他的默认只能用(API9)版本&#xff0c;…

【教学类-06-09】20231126 X-Y数字分合-分-下空右

结果展示&#xff1a; 背景需求&#xff1a; 1、加减法理论上在幼儿园不适用&#xff08;虽然实际上幼儿在家早就练习了&#xff09; 2、分合题是大班教学数上涉及的内容&#xff0c;可以尝试&#xff08;类似于减法、加法&#xff09;可以用雪花片等实物进行增加、减少。——…

【教学类-06-13】20231126 (55格版)趣味题(一)1-9加法题(10倍)(整十相加)

作品展示 背景需求&#xff1a; 1、会做加法题的孩子5分钟内完成题目&#xff0c;太快了&#xff0c;所以为了拉平差异&#xff0c;需要给这些会做另外的题目&#xff0c;比如提供一些他们没有做过的“趣味题形”。 2、好多次&#xff0c;听见大班孩子在互相“考试”——“老…

数据结构与算法Java版本单元测验题

1.【实验题 2-2】实现以下对单链表的操作&#xff0c;题意和算法描述见《习题解答》图 2-7。 //将单链表 list 逆转&#xff0c;将各结点的 next 指向其前驱。泛型方法&#xff0c;返回值类型前声明类型参数 T public static void reverse(SinglyList list) 【思考题 2-6】实现…

Horizon地平线财富一直坚持“创新、开放、协作、共享”的运营理念

在“寒风凛冽”的熊市&#xff0c;投资人需要一颗不断探索、勇于尝试的心。 勇气意味着即使你知道这条路很难&#xff0c;你仍然选择坚持。而信念则是相信&#xff0c;即使现在很多人不理解、甚至嘲笑&#xff0c;未来总会有一天他们会明白。 Horizon一直坚持着“创新、开放、…

4 时间序列预测入门: LSTM+ATTENTION

0 前沿 注意力机制其本质是一种通过网络自主学习出的一组权重系数&#xff0c;并以“动态加权”的方式来强调我们所感兴趣的区域同时抑制不相关背景区域的机制。核心目标也是从众多信息中选择出对当前任务目标更关键的信息。 Multi-Head Attention&#xff08;MHA&#xff09;&…