引进Menu菜单与新增验证上传图片功能--系统篇

devtools/2024/10/23 14:30:36/

        我的迭代小系统要更新2点。一是后台需要引进一种导航,众多导航之中我选择了Menu菜单。二是上传图片接口需要新增验证上传图片环节。先看看更新2点后的效果

        引进Menu菜单效果如下,这部分修改后台前端代码

        引进Menu菜单后,Menu菜单的默认数据我还没处理,先把第一项一级菜单下的第一项二级菜单改名为上传图片,然后设置为初始选中菜单,然后把vue的v型logo删掉,将剩下的上传按钮和提示放到上传图片菜单对应的响应页面中,接下来看看代码

<script lang="ts" setup>

import type {MenuItemRegistered} from 'element-plus'
import {
  Document,
  Menu as IconMenu,
  Location,
  Setting,
} from '@element-plus/icons-vue'

const handleOpen = (key: string, keyPath: string[]) => {
  console.log(key, keyPath)
}
const handleClose = (key: string, keyPath: string[]) => {
  console.log(key, keyPath)
}

const selectEvent=(obj:MenuItemRegistered)=>{
  console.log(obj.index)
}

</script>

<template>
    <el-row class="tac">
        <el-col :span="6">
          <h5 class="mb-2">Default colors</h5>
          <el-menu
            router
            default-active="/addImage"
            class="el-menu-vertical-demo"
            @open="handleOpen"
            @close="handleClose"
          >
            <el-sub-menu index="1">
              <template #title>
                <el-icon><location /></el-icon>
                <span>Navigator One</span>
              </template>
              <el-menu-item-group title="Group One">
                <el-menu-item index="/addImage" @click="selectEvent">上传图片</el-menu-item>
                <el-menu-item index="/users/abc/posts/123">item two</el-menu-item>
              </el-menu-item-group>
              <el-menu-item-group title="Group Two">
                <el-menu-item index="1-3">item three</el-menu-item>
              </el-menu-item-group>
              <el-sub-menu index="1-4">
                <template #title>item four</template>
                <el-menu-item index="1-4-1">item one</el-menu-item>
              </el-sub-menu>
            </el-sub-menu>
            <el-menu-item index="2">
              <el-icon><icon-menu /></el-icon>
              <span>Navigator Two</span>
            </el-menu-item>
            <el-menu-item index="3" disabled>
              <el-icon><document /></el-icon>
              <span>Navigator Three</span>
            </el-menu-item>
            <el-menu-item index="4">
              <el-icon><setting /></el-icon>
              <span>Navigator Four</span>
            </el-menu-item>
          </el-menu>
        </el-col>
        <el-col :span="18">
        <router-view></router-view>
        </el-col>
      </el-row>
        
</template>

<style>
#app {
  font-family: Avenir, Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
  margin-top: 60px;
}

</style>
        代码内容很多,不过很多都是和这次更新菜单无关,现在我挑出改动部分介绍

        把第一项一级菜单下的第一项二级菜单改名为上传图片,关注如下代码

 <el-menu-item index="/addImage" @click="selectEvent">上传图片</el-menu-item>

        设置初始选中菜单,关注如下代码

        default-active="/addImage"

        将上传按钮和提示放到上传图片菜单对应的响应页面中,关注如下代码

        <el-col :span="18">
        <router-view></router-view>
        </el-col>

        最后再说下,导航是非常重要的东西。如果说在一个技术框架中写个上传功能,对于进阶期只能算是初期的修炼,因为上传功能只是一个功能,当您需要写第2个功能时,2个功能会混在一个页面,久而久之,当您需要快速寻回某一个功能时反而变得很艰难,进阶期初期的修炼成果就不大了,不牢固了。而导航就是解决问题的关键,会使得进阶期初期的修炼成果得到提升,导航可以认为是进阶期中期的东西,对初期成果有提升作用。进阶期后期才是整合功能的时候,修炼初期没必要强行去整合功能到一个页面。

        新增验证图片功能效果如下,这部分后台前端代码没变,仅修改后台后端代码

        注意到按钮下面的提示文字,提示只允许jpg和png图片上传,还要求大小要在500KB以下,代码如下

public function upload()
    {
        $head = new Head2;
        
        $files = request()->file();
        try {
            validate(['image'=>'fileSize:512000'
                . '|fileExt:png,jpeg,jpg|fileMime:image/png,image/jpeg'])
                ->check($files);
            
            $file = request()->file('image');

            $savename = \think\facade\Filesystem::disk('public')
                    ->putFile( 'topic', $file);

            $head->name = $savename;
            $head->save();
            $head_id = $head->getKey();

            return mySuccessResponse([
                'id' => $head_id,
                'name' => $savename,
                'url' => Config::get('app.server_url').'storage/'.$savename
            ]);
            
        } catch (\think\exception\ValidateException $e) {
            return myFailResponse(1, $e->getMessage());
        }
        
    }

        新增验证图片功能,关注如下代码

validate(['image'=>'fileSize:512000'
                . '|fileExt:png,jpeg,jpg|fileMime:image/png,image/jpeg'])
                ->check($files);

        还有一个改变是将直接写的域名归到配置文件中配置,然后再引用,这样做有利于用开发机以外设备进行测试,只需要更改域名为IP。如果要考虑好处,那么将系统部署到多个地方,也缩短域名修改时间等等,关注代码如下

'url' => Config::get('app.server_url').'storage/'.$savename


http://www.ppmy.cn/devtools/128170.html

相关文章

Linux 之 fdisk 【磁盘分区管理】

删除分区 1.查看磁盘信息 lsblk 2.删除分区sdb硬盘下的所有分区 # 1 进入d的磁盘分区 fdisk /dev/sdb # 2 输入p查看磁盘的分区信息 # 3 输入d进入删除磁盘分区命令 # 4 选择要删除的分区号 重复3&#xff0c;4 全部删除 # 5 w 保存退出并生效操作信息 &#xff08;输入q…

常用分布的数学期望、方差、特征函数

文章目录 相关教程相关文献常用分布的数学期望&方差&特征函数定义事件域概率条件概率随机变量分布函数连续随机变量的概率密度函数数学期望离散随机变量连续随机变量 方差与标准差最大似然估计特征函数 不等式Chebyshev&#xff08;切比雪夫&#xff09;不等式 作者&am…

Linux中vim的三种主要模式和具体用法

Vim编辑器的三种主要模式 Vim编辑器具有三种主要模式&#xff0c;它们是&#xff1a; 1.命令模式&#xff08;Normal mode&#xff09;&#xff1a;这是Vim的默认模式&#xff0c;用于执行编辑命令、移动光标、删除文本、复制粘贴等操作。在这个模式下&#xff0c;按下键盘上的…

WebSocked基础

一. WebSocket 基本概念 WebSocket是什么&#xff1f; WebSocket 是基于 TCP 的一种新的应用层网络协议。它提供了一个全双工的通道&#xff0c;允许服务器和客户端之间实时双向通信。因此&#xff0c;在 WebSocket 中&#xff0c;浏览器和服务器只需要完成一次握手&#xff…

开发常见错误状态码

一些常见的 HTTP 状态码及其描述&#xff0c;这些状态码在后端开发中经常遇到。这些状态码分为几类&#xff1a;信息性状态码、成功状态码、重定向状态码、客户端错误状态码和服务器错误状态码。 信息性状态码 (1xx) 100 Continue&#xff1a;客户端应继续其请求。101 Switch…

python脚本pull docker image

在用docker pull ubuntu:20.04时遇到如下错误&#xff1a; $ docker pull ubuntu:20.04 Error response from daemon:Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while …

探索知识产权的价值:一站式平台的专利交易之旅

在创新驱动的全球经济中&#xff0c;知识产权&#xff08;IP&#xff09;已成为企业最宝贵的资产之一。商标、软件著作权以及专利&#xff0c;这些无形资产不仅代表着创新的成果&#xff0c;更是市场竞争中的重要利器。在这样的背景下&#xff0c;一个集合多种知识产权服务的综…

java的第一个游戏界面

看视频02_大鱼吃小鱼_添加背景图_尚学堂_哔哩哔哩_bilibili 学习方法&#xff1a; 就对的视频小代码&#xff0c;书籍没有&#xff0c;遇到不懂的问ai 今日成果&#xff0c; 界面代码 package new_gameobj;import java.awt.Graphics; import java.awt.Image; import java.…