关于二手车系统学习--登录模块

news2024/11/23 15:45:40

1.样式1-17行

 <div class="cheader">
      <div style="width: 80%;margin: 0 auto;line-height: 50px;padding-top: 10px">
        <el-row>
          <el-col
            :span="5"
            style="font-size: 20px;cursor: pointer;color: #00ae66;font-weight: bold;margin-left:40px"
          >您身边的二手车交易专家</el-col>
                           
          <el-col :span="8">
            <el-input
             size="medium"
              placeholder="请输入内容"
              v-model="keywords"
              class="input"
            ></el-input>
          </el-col>
  • 这段代码是一个Vue.js模板,可能用于构建一个网页的头部(header)。它利用了Element UI组件库中的el-row、el-col和el-input组件来布局和提供交互功能。下面是对这段代码的解释:

  • <div class="cheader">: 这表示一个HTML div元素,包含了一个CSS类cheader,用于定义此区域的样式。

  • <div style="width: 80%;margin: 0 auto;line-height: 50px;padding-top: 10px">: 这是另一个div,设置了内联样式,包括宽度、自动居中、行高和上填充(padding-top)。这通常用于将内容居中并设置合适的行高。

- <el-row>: 这是Element UI中的行布局组件,用于组织行内的子组件。

- <el-col :span="5" ...>: 这是Element UI中的列布局组件,span属性定义了这列占据的宽度份额,取值范围为1到24。此列的样式设置包括:字体大小、鼠标指针样式、颜色、字体粗细和左侧外边距。

  • 文本: “您身边的二手车交易专家” 是这列中显示的文本。根据样式设置,这个文本以20px字体大小显示,带有绿色字样和粗体。
    - <el-col :span="8">: 这是另一个列,宽度份额为8,包含一个输入框。

- <el-input ...>: 这是Element UI中的输入组件,带有placeholder属性以提供占位提示信息,v-model="keywords"绑定了Vue组件中的keywords变量,这意味着输入框的内容会自动与keywords变量同步。class="input"为这个输入框添加了额外的CSS类。
这段代码总体上展示了一个网页头部的布局,其中包括一个标题和一个用于输入搜索关键词的文本输入框。

2.搜索框

<el-col :span="8">
    <el-input
     size="medium"
      placeholder="请输入内容"
      v-model="keywords"
      class="input"
    ></el-input>
  </el-col>
  <el-button size="medium" 
  style="height:100%; float:left; margin-top:8px; 
  line-height:16px; margin-left:0px;" type="success" 
  class="cbtn-bg" @click="searchcar()">我要搜车</el-button>

在这里插入图片描述

2.1数据定义

<script type="text/ecmascript-6">
import cfooter from "../components/cfooter";
import { login } from '../api/userMG'
import { setCookie, getCookie, delCookie } from '../utils/util'
import md5 from 'js-md5'
export default {
  components: {
    cfooter: cfooter
  },
  name: 'login',
  data() {
    return {
      keywords:"",
     
      //定义loading默认为false
      logining: false,
      // 记住密码
      rememberpwd: false,
      ruleForm: {
        username: '',
        password: '',
        usertype: 2
       
      },
    
      rules: {
        username: [{ required: true, message: '请输入账号', trigger: 'blur' }],
        password: [{ required: true, message: '请输入密码', trigger: 'blur' }]
      }
    }
  },

这是Vue.js组件的一个脚本,名为login。
组件导入了cfooter组件,以及从…/api/userMG导入的login函数。还使用了设置、获取和删除cookie的辅助函数(setCookie, getCookie, delCookie),以及js-md5库用于密码哈希。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.生命周期

mounted () {
    this.$router.afterEach((to, from, next) => {
        window.scrollTo(0, 0)
    })
},

  // 创建完毕状态(里面是操作)
  created() {
    this.user = JSON.parse(localStorage.getItem('userdata'))
    
    this.getuserpwd()
    
  },

在这里插入图片描述

4.车辆搜索界面的代码

searchcar(params){ 
          
          this.$router.push({
                path:'/login'
                ,query: {
                  keywords:this.keywords
                  }}
                )
        },

在这里插入图片描述

5.登录模块的方法

 submitForm(formName) {
      this.$refs[formName].validate(valid => {
        if (valid) {
          this.logining = true
         
          // 注释
          this.ruleForm.usertype=2;
          login(this.ruleForm).then(res => {
            if (res.status==0) {
              if (this.rememberpwd) {
                //保存帐号到cookie,有效期7天
                setCookie('user', this.ruleForm.username, 7)
                //保存密码到cookie,有效期7天
                setCookie('pwd', this.ruleForm.password, 7)

              } else {
                delCookie('user')
                delCookie('pwd')

              }
              //如果请求成功就让他2秒跳转路由
              setTimeout(() => {
                this.logining = false
                // 缓存token
                localStorage.setItem('logintoken', res.data.token)
                // 缓存用户个人信息
                localStorage.setItem('userdata', JSON.stringify(res.data))
                this.$store.commit('login', 'true')
                this.$router.push({ path: '/login' })
              }, 650)
                        this.$message({
              message: '登录成功',
              type: 'success'
            })
            } else {
              this.$message.error(res.msg)
              this.logining = false
              return false
            }
          })
        } else {
          // 获取图形验证码
          this.getcode()
          this.$message.error('请输入用户名密码!')
          this.logining = false
          return false
        }
      })

    },

在这里插入图片描述
在这里插入图片描述

6.请求的管理

在这里插入图片描述
写的关于用户发的请求的整理

7.登录后端代码

  • controller层
 @ApiOperation(value = "登录", notes = "", httpMethod = "POST", produces = MediaType.APPLICATION_JSON_VALUE)
    @PostMapping(value = "/login")
    public Result login(HttpSession session,
                        @RequestBody LoginVo loginVo) throws Exception {

        Users user=usersService.login(loginVo);
        if (StringUtil.isEmpty(user)){
            return Result.createByErrorMessage("用户名或密码错误");
        }

        if (user.getStatus()==1){
            return Result.createByErrorMessage("您的账号已被禁用,请联系管理员");
        }

        user.setPassword(null);
        session.setAttribute("user",user);
        return Result.createBySuccess("登录成功",user);

    }

在这里插入图片描述

  • Service层
public Users login(LoginVo loginVo) throws GeneralSecurityException {
        LambdaQueryWrapper<Users> lambdaQueryWrapper = new LambdaQueryWrapper<Users>()
                .eq(Users::getUsername,loginVo.getUsername())
                .eq(Users::getIdentity,loginVo.getUsertype());
        Users users=usersMapper.selectOne(lambdaQueryWrapper);
        if (StringUtil.isEmpty(users)){
            return null;
        }
        String pwd= MD5Util.MD5EncodeUtf8(loginVo.getPassword());
        System.err.println(pwd);
        if (!pwd.equals(users.getPassword())){
            return null;
        }
        return users;
    }

在这里插入图片描述

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

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

相关文章

sqlserver中替换空格和换行

sqlserver 中换行符&#xff0c;如下&#xff1a; sql语句如下&#xff1a; //替换换行-使用char(10) select REPLACE(F_CNKITitle ,char(10),) title from tzkj_CNKIContent tc where --F_CnkiContentID ffdc7412-41e1-4d42-8693-cc79d0cf2dd3and len(REPLACE(F_CNKITitle ,…

K邻算法:在风险传导中的创新应用与实践价值

程序员的实用神器 ⛳️ 写在前面参与规则&#xff01;&#xff01;&#xff01; ✅参与方式&#xff1a;关注博主、点赞、收藏、评论&#xff0c;任意评论&#xff08;每人最多评论三次&#xff09; ⛳️本次送书1~4本【取决于阅读量&#xff0c;阅读量越多&#xff0c;送的越…

如何应对Android面试官 -> PKMS 权限管理

前言 本章我们继续上一章节&#xff0c;讲解 PKMS 相关知识点&#xff1b; 静默安装 静默安装说的就是&#xff1a;在用户无感知的情况下&#xff0c;给用户的手机安装了某个 app&#xff0c;或者是用户触发安装之后&#xff0c;不需要额外的任何操作即可以安装目标 app 到手机…

软件测试经理工作日常随记【2】-接口自动化

软件测试主管工作日常随记【2】-接口自动化 1.接口自动化 jmeter-反电诈项目 这个我做过的一个非常有意义的项目&#xff0c;和腾讯合作的&#xff0c;主要为用户拦截并提示所有可能涉及到的诈骗类型&#xff0c;并以裂变的形式扩展用户&#xff0c;这个项目前期后端先完成&…

Linux 二十一章

&#x1f436;博主主页&#xff1a;ᰔᩚ. 一怀明月ꦿ ❤️‍&#x1f525;专栏系列&#xff1a;线性代数&#xff0c;C初学者入门训练&#xff0c;题解C&#xff0c;C的使用文章&#xff0c;「初学」C&#xff0c;linux &#x1f525;座右铭&#xff1a;“不要等到什么都没有了…

1000公里清晰可见,光纤资源管理新方案——记录与查询

01传统模式光纤资源管理下 记录难 不止有手工记录与CAD记录&#xff0c;还有Excel、PPT、Visio、JPG、PNG、老师傅经验记... 查询难 需要大量翻查CAD、Excel、PPT、Visio、JPG、PNG才能得到完整光缆的信息&#xff0c;可是老师傅记录怎么查询&…

小心电子合同这个坑:PS章

近期&#xff0c;我发现网上有很多教程教大家如何自己动手用PS制作电子章&#xff0c; 看似方便&#xff0c;实则危机四伏&#xff01; 通过PS技术&#xff0c;你可以生成任何一家公司的印章&#xff0c; 用以冒充电子章&#xff0c;或打印出来冒充实体章。 甚至还能进行做旧…

CCD光学触摸屏中应用到的电容式触摸芯片

CCD光学触摸屏是利用CCD光学触摸技术打破原有触摸技术的瓶颈&#xff0c;从准确率、反应速度和寿命方面大幅度提高&#xff0c;安装在顶部左右角的两个CCD摄像头可以精准地检测出多个手指位置&#xff0c;不仅可以单击、拖拉&#xff0c;还可以自由旋转和放大图片&#xff0c;这…

相关性分析

目录 1.交叉功率谱 2. 相关系数 1.交叉功率谱 % 生成两个信号 t 0:0.001:100; x sin(2*pi*1*t)sin(2*pi*2*t); y sin(2*pi*t )sin(2*pi*2*t); % 计算交叉功率谱密度 [Pxy, F] cpsd(x, y, [], [], [], 1/(t(2)-t(1))); % 使用正确的采样频率 % 绘制交叉功率谱密度图 …

参数服务器

参数服务器在ROS中主要用于实现不同节点之间的数据共享。参数服务器相当于是独立于所有节点的一个公共容器&#xff0c;可以将数据存储在该容器中&#xff0c;被不同的节点调用&#xff0c;当然不同的节点也可以往其中存储数据。 参数服务器&#xff0c;一般适用于存在数据共享…

linux进入单用户模式指引

文章目录 引言I 通过GRUB进入单用户模式1.1 倒计时界面的操作1.2 GRUB1.3 内核参数编辑界面1.4 更多内核参数编辑界面II 预备知识:Linux用户模式引言 应用场景: root密码重置: 用passwd命令修改root修复登录相关的配置:/etc/pam.d/login 和 /etc/pam.d/sshd 案例:Centos6进…

Dropout作为贝叶斯近似: 表示深度学习中的模型不确定性

摘要 深度学习工具在应用机器学习领域受到了极大的关注。然而&#xff0c;这些用于回归和分类的工具并没有捕捉到模型的不确定性。相比之下&#xff0c;贝叶斯模型提供了一个基于数学的框架来推理模型的不确定性&#xff0c;但通常会带来令人望而却步的计算成本。本文提出了一…

vue2实现右键菜单功能——vue-diy-rightmenu——基础积累

五一之前遇到一个需求&#xff0c;就是关于要实现自定义右键菜单的功能&#xff0c;普通的右键展示的菜单有【返回/前进/重新加载/另存为】等&#xff0c;希望实现的效果就是右键出现自定义的菜单&#xff0c;比如【编辑/删除/新增】等。 遇到这种的需求&#xff0c;可以直接去…

Leetcode—1991. 找到数组的中间位置【简单】

2024每日刷题&#xff08;129&#xff09; Leetcode—1991. 找到数组的中间位置 实现代码 class Solution { public:int findMiddleIndex(vector<int>& nums) {int sum accumulate(nums.begin(), nums.end(), 0);int prefix 0;for(int i 0; i < nums.size();…

信息安全-隐写术到可逆信息隐藏

进入二十一世纪以来&#xff0c;通信技术飞速发展&#xff0c;使得多媒体被广泛用于传输数据&#xff0c;尤其是物联网上。通常&#xff0c;我们的多媒体传输发生在不安全的网络通道上。特别是&#xff0c;互联网在交换数字媒体和个人、私人公司、机构、政府使用这些多媒体数据…

商超物联网~配置学生健康与安全

配置学生健康与安全示实验 作者&#xff1a;知孤云出岫 作者主页&#xff1a;点击这里 组网图形 图1 配置学生健康与安全示例组网图 业务需求组网需求数据规划配置思路配置注意事项操作步骤配置文件 业务需求 某学校由于重视学生的健康与安全&#xff0c;希望能够通过技术手段…

春秋云镜 CVE-2022-4230

靶标介绍&#xff1a; WP Statistics WordPress 插件13.2.9之前的版本不会转义参数&#xff0c;这可能允许经过身份验证的用户执行 SQL 注入攻击。默认情况下&#xff0c;具有管理选项功能 (admin) 的用户可以使用受影响的功能&#xff0c;但是该插件有一个设置允许低权限用户…

thinkadmin table列表页点击直接修改用户金额(其他内容都可以)

需要修改用户余额时 点击余额区域 可以手动输入金额 输入后调用api接口自动刷新 html代码 // 初始化表格组件$(#NewsTable).layTable({even: true, height: full,sort: {field: id, type: desc},where: {type: {$type|default="index"}},cols: [[{checkbox: true,…

计算机网络【应用层】邮件和DNS

文章目录 电子邮件DNSDNS提供的服务&#xff1a;域名分级域名解析流程DNS资源记录DNS服务器类型 电子邮件 使用SMTP协议发送邮件之前&#xff0c;需要将二进制多媒体数据编码为ASCII码SMTP一般不使用中间邮件服务器发送邮件&#xff0c;如果收件服务器没开机&#xff0c;那么会…

ICode国际青少年编程竞赛- Python-1级训练场-综合训练1

ICode国际青少年编程竞赛- Python-1级训练场-综合训练1 1、 Spaceship.turnLeft() for i in range(2):Spaceship.turnLeft()Spaceship.step(3) Dev.step(-1) Spaceship.step(4) Spaceship.turnLeft() Spaceship.step(3)2、 Spaceship.step() Spaceship.turnLeft() Spaceship.…