Vue登录注册判断验证

本文展示了两个Vue组件的代码示例,分别用于登录(Login.vue)和注册(Register.vue)。登录组件中包含了返回操作、商品详情、评分、添加购物车功能以及类似商品展示。注册组件则包含账号、密码及确认密码的输入验证,以及注册按钮触发的注册逻辑。代码涵盖了数据获取、状态管理和前端验证等关键部分。
摘要由CSDN通过智能技术生成

View下Login.vue(登录)组件代码示例

  <div class="detail-box">
    <el-button icon="el-icon-arrow-left" @click="$router.back()"
      >返回</el-button
    >
    <div class="main_detail">
      <!-- 放大镜组件 -->
      <!-- <div class="left">

            </div> -->
      <zoom-image :imgs="showImgs"></zoom-image>
      <!-- 商品的信息 -->
      <div class="right">
        <h2 class="title">{{ goodsData.title }}</h2>
        <p class="supplier">{{ goodsData.supplier }}</p>
        <p class="price">¥{{ goodsData.priceStr }}</p>
        <el-rate
          :value="3.7"
          disabled
          show-score
          text-color="#ff0000"
        ></el-rate>
        <el-button
          type="danger"
          icon="el-icon-shopping-cart-2"
          @click="addCart(goodsData.Id)"
          >添加购物车</el-button
        >
      </div>
    </div>

    <!-- 类似商品 -->
    <div class="same">
      <p>类似商品</p>
      <good-list :list="sameList"></good-list>
    </div>

    <div class="footer">
      <img src="../assets/footer.png" alt="" />
    </div>
  </div>
</template>

<script>
import { detailData, sameGoodData, addShopCart } from "../tools/ajax.js";
import zoomImage from "../components/ZoomImage.vue";
import goodList from "../components/GoodList.vue";
import { mapState } from "vuex";
export default {
  data() {
    return {
      goodsData: {}, //商品对象
      showImgs: [], //放大镜组件需要显示的几张图片
      sameList: [], //同店铺的其他类似的商品
    };
  },
  components: {
    zoomImage,
    goodList,
  },
  computed: {
    ...mapState(["token"]),
  },
  created() {
    this.getDetailData(this.$route);
    document.scrollingElement.scrollTop = 0;
  },
  beforeRouteUpdate(to, from, next) {
    this.getDetailData(to);
    document.scrollingElement.scrollTop = 0;
    next();
  },
  methods: {
    // 获取详情的数据
    getDetailData(to) {
      detailData({
        goodId: to.query.gId,
      }).then((data) => {
        console.log(data);
        this.goodsData = data[0]; //本页面要用的数据
        this.showImgs = JSON.parse(data[0].imgs);

        // 需要根据制造商取出类似的商品
        this.getSameData(data[0].supplier);
      });
    },

    // 获取类似商品的数据
    getSameData(supply) {
      sameGoodData({
        supplier: supply,
      }).then((data) => {
        this.sameList = data;
      });
    },
    addCart(id) {
        console.log(this.token)
      // 添加购物车的
      if (this.token) {
        //
        addShopCart({
          token: this.token,
          goodId: id,
        }).then((data) => {
          console.log(data);
          if (data.code == 0) {
            this.$message({
              type: "success",
              message: "通行证已过期,请重新登录",
            });
            setTimeout(() => {
                this.$router.push("/login");
            }, 2000);
          }else if(data.code==1){
               this.$message({
              type: "success",
              message: "添加成功",
            });
          }else{
              this.$message({
              type: "error",
              message: "系统繁忙,请刷新尝试",
            });
          }
        });
      } else {
        this.$message({
          type: "success",
          message: "亲,你还没登录,请登录",
        });
        setTimeout(() => {
          this.$router.push("/login");
        }, 2000);
      }
    },
  },
};
</script>

<style scoped>
.detail-box {
  text-align: left;
  width: 1100px;
  margin: auto;
}
.main_detail {
  display: flex;
  justify-content: space-between;
  align-items: center;
}
.left {
  width: 200px;
  height: 240px;
  border: 1px solid red;
  padding: 10px;
}
.right {
  width: 200px;
  height: 240px;
  margin-right: 140px;
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  padding: 10px;
}
.title {
  font-size: 20px;
}
.supplier {
  color: gray;
}
.price {
  color: red;
}
.same {
  margin-top: 20px;
}
.same p {
  padding-bottom: 10px;
  border-bottom: 1px solid gray;
  /* padding: 20px; */
}
</style>

View下Register.vue(注册)组件代码示例

    <div class="register-box">
        <el-input class="eit" placeholder="请输入账号" v-model.trim="userName" @focus="userNameErr=''">
             <i slot="prefix" class="el-input__icon el-icon-user"></i>
        </el-input>
        <span v-show="userNameErr" class="err">{{userNameErr}}</span>


         <el-input class="eit" type="password" placeholder="请输入密码" v-model.trim="password" @focus="passwordErr=''">
             <i slot="prefix" class="el-input__icon el-icon-lock"></i>
        </el-input>
        <span v-show="passwordErr" class="err">{{passwordErr}}</span>


     <el-input class="eit" type="password" placeholder="请再次输入密码" v-model.trim="comfirmPsw" @focus="comfirmPswErr=''">
             <i slot="prefix" class="el-input__icon el-icon-lock"></i>
        </el-input>
        <span v-show="comfirmPswErr" class="err">{{comfirmPswErr}}</span>

        <el-button type="primary" @click="registerClick">注册</el-button>

 </div>
</template>

<script>
import {registerData} from "../tools/ajax.js"
export default {
     data() {
            return {
                userName:"" , // 用户名
                userNameErr:"" ,// 用户名错误提示
                password:"",
                passwordErr:"",
                comfirmPsw:"",
                comfirmPswErr:""
            }
        },
        methods: {
            registerClick(){
                var userReg = /^[\w\u4e00-\u9fa5]{6,12}$/
                if(!userReg.test(this.userName)){
                    this.userNameErr = "账号必须是字母、数字、下划线、汉字等组成"
                    return false
                }

                var pswReg = /^[\w]{6,12}$/
                if(!pswReg.test(this.password)){
                    this.passwordErr = "密码必须是6-12位的字母、数字、下划线组成"
                    return false
                }
                if(this.password!=this.comfirmPsw){
                    this.comfirmPswErr = "俩次密码不一致"
                    return false
                }

                registerData({
                   userName:this.userName,
                   password:this.password 
                }).then(data=>{
                    if(data.code===1){
                        this.$message({
                            type:"success",
                            message:"恭喜注册成功,可以去登录啦",
                            duration:1000,
                            onClose:()=>{
                                this.$router.replace("/login")
                            }
                        })
                    }else{
                        this.$message({
                            type:"warning",
                            message:"账号已经存在",
                            duration:1000     
                        })
                    }
                    this.userName = this.password= this.userNameErr=this.passwordErr=this.comfirmPswErr=this.comfirmPsw=""
                })

            }
        },
}
</script>

<style scoped>
  .register-box{
       width: 400px;
       margin: 80px auto; 
   }
   .eit{
       margin-top: 20px;
       width: 100%;
   }
   .register-box >>> button{
       width: 100%;
       margin-top: 20px;
   }
   .err{
       color:red;
       font-size: 12px;
   }
</style>
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值