基于elementUI的封装的登录框

//账号密码输入框前面带图标 密码框自带小眼睛
<template>
  <div class="login_bg">
    <div class="login_box">
      <div class="login_title">庐陵湿地安全预警评价系统</div>
      <div class="login_item">
        <el-input
          placeholder="账号"
          oninput="value=value.replace(/[\u4e00-\u9fa5]/g, '')"
          v-model="userName"
        >
          <i slot="prefix" class="el-input__icon el-icon-search"></i>
        </el-input>
      </div>
      <div class="login_item">
        <el-input
          placeholder="密码"
          type="password"
          oninput="value=value.replace(/[\u4e00-\u9fa5]/g, '')"
          v-model="passWord"
          :show-password="true"
        >
          <i slot="prefix" class="el-input__icon el-icon-set-up"></i>
        </el-input>
      </div>
      <div class="login_item">
        <el-button type="primary" style="width: 100%" @click="submit"
          >登录</el-button
        >
      </div>
    </div>
  </div>
</template>
<script>
export default {
  data() {
    return {
      userName: "",
      passWord: "",
    }
  },
  mounted() {
    window.addEventListener("keydown", this.keyLogin)
  },
  destroyed() {
    window.removeEventListener("keydown", this.keyLogin, false)
  },
  methods: {
    keyLogin(event) {
      if (event.keyCode == 13)
        //回车键的键值为13
        this.submit() //调用登录按钮的登录事件
    },
    submit() {
      if (this.userName && this.passWord) {
        this.$api
          .login({
            menuType: 0,
            suLoginname: this.userName,
            suPwd: this.passWord,
          })
          .then((res) => {
            console.log(res)
            // this.$setData("token", "")
            this.$setData(
              "permissionList",
              JSON.stringify(res.data.data.permissionList)
            )
            this.$setData("token", res.headers.token)
            this.$setData("userInfo", JSON.stringify(res.data.data.userInfo))
            this.$message.success("登录成功!")
            setTimeout(() => {
              this.$router.push("/")
            }, 1000)
          })
      } else {
        this.$message.error("账号密码不能为空。")
      }
    },
  },
}
</script>
<style lang="less" scoped>
.login_bg {
  width: 100%;
  height: 100%;
  display: flex;
  //   background: #000;
  justify-content: center;
  align-items: center;
  background: url(../../assets/login_bg.jpg) center no-repeat;
  background-size: cover;
  .login_title {
    font-size: 40px;
    color: #fff;
    margin-bottom: 30px;
    font-weight: bold;
  }
  .login_box {
    width: 500px;
    height: 300px;
    // background: #fff;
    display: flex;
    flex-direction: column;
    align-items: center;
  }
  .login_item {
    width: 250px;
    padding: 20px 20px 0px 20px;
  }
}
</style>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个基于 Element UI 的穿梭组件的示例代码: ``` <template> <div class="el-transfer"> <div class="el-transfer-panel"> <p>{{ leftTitle }}</p> <el-input v-model="leftFilter" placeholder="请输入关键字搜索"></el-input> <el-transfer-panel :filterable="true" filter-placeholder="请输入关键字搜索" :data="leftData" v-model="leftSelected" :title="leftTitle" @change="handleChange"></el-transfer-panel> </div> <div class="el-transfer-buttons"> <el-button :disabled="leftSelected.length === 0" type="primary" size="small" @click="handleAdd">添加</el-button> <el-button :disabled="rightSelected.length === 0" size="small" @click="handleRemove">移除</el-button> </div> <div class="el-transfer-panel"> <p>{{ rightTitle }}</p> <el-input v-model="rightFilter" placeholder="请输入关键字搜索"></el-input> <el-transfer-panel :filterable="true" filter-placeholder="请输入关键字搜索" :data="rightData" v-model="rightSelected" :title="rightTitle" @change="handleChange"></el-transfer-panel> </div> </div> </template> <script> export default { name: "ElTransfer", props: { leftTitle: { type: String, default: "列表一" }, rightTitle: { type: String, default: "列表二" }, leftData: { type: Array, default: () => [] }, rightData: { type: Array, default: () => [] }, value: { type: Array, default: () => [] } }, data() { return { leftSelected: [], rightSelected: [], leftFilter: "", rightFilter: "" }; }, watch: { value: { immediate: true, handler(newVal) { this.leftSelected = []; this.rightSelected = []; for (let i = 0; i < newVal.length; i++) { if (this.leftData.findIndex(item => item === newVal[i]) !== -1) { this.leftSelected.push(newVal[i]); } else if (this.rightData.findIndex(item => item === newVal[i]) !== -1) { this.rightSelected.push(newVal[i]); } } } } }, methods: { handleChange() { this.$emit("input", [...this.leftSelected, ...this.rightSelected]); }, handleAdd() { this.$emit("input", [...this.value, ...this.leftSelected]); this.leftSelected = []; }, handleRemove() { this.$emit("input", this.value.filter(item => !this.rightSelected.includes(item))); this.rightSelected = []; } } }; </script> ``` 此组件包含两个穿梭面板,分别用于显示左侧和右侧的数据。每个面板都包含一个标题、一个搜索和一个穿梭。通过 `props` 传递左侧和右侧的数据、标题等信息,通过 `v-model` 双向绑定父组件中的数据。用户在选中左侧或右侧的数据后,点击添加或移除按钮即可将数据添加或移除到父组件中。可以通过 `@change` 监听穿梭的变化,实时更新父组件中的数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值