首页 > 其他分享 >开发在线法律咨询平台的设计与实现Day5

开发在线法律咨询平台的设计与实现Day5

时间:2024-10-09 22:02:14浏览次数:7  
标签:const 在线 登录 100% Day5 result import 法律咨询 registerData

今日完成

搭建登录注册页面

效果

image
image

代码

Login.vue

<script setup>
import {ref} from "vue"
import {userRegisterService,userLoginService} from "@/api/user"
import { showNotify } from 'vant';
//引入路由
import {useRouter} from 'vue-router'
const router = useRouter()
//注册页为true,登录页为false
const isRegister = ref(false)
//定义注册数据模型
const registerData = ref({
  userAccount: '',
  userPassword: '',
  checkPassword: ''
})
//清除注册数据
const clearRegisterData = ()=>{
  registerData.value = {
    userAccount: '',
    userPassword: '',
    checkPassword: ''
  }
}
//验证规则
const usernamePattern = /^[a-zA-Z0-9!@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?]{4,15}$/;
const passwordPattern = /^[a-zA-Z0-9!@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?]{8,15}$/;
const validator = (val) => registerData.value.userPassword === val;


//调用后台接口完成注册
const register = async()=>{
  let result = await userRegisterService(registerData.value);
  showNotify({ type: 'success', message: '注册成功!' });
  clearRegisterData();
  isRegister.value = false
}
//调用后台接口完成登录
const login=async()=>{
  let result = await userLoginService(registerData.value)
  showNotify({ type: 'success', message: '登录成功!' });
 //  tokenStore.setToken(result.data)
    // console.log(result);
   //  console.log(tokenStore.token);
    // 跳转到首页
    router.push('/')
}
</script>
<template >
  <div  id="building">
    <div style="height:35vh;line-height:35vh;text-align:center;">
      <span style="font-size:1.5rem;margin-bottom:15vh;color:#fff;" ><b>在线法律咨询平台</b></span>
    </div>
    <div class="loginrigster">
      <!-- 注册 -->
      <van-form @submit="onSubmit" v-if="isRegister" > 
        <van-cell-group inset>
          <van-field
            required
            v-model="registerData.userAccount"
            name="用户名"
            label="用户名"
            placeholder="用户名"
            :rules="[{ required: true, message: '请填写用户名' },{pattern:usernamePattern,message:'长度为4-15位非空字符'}]"
          />
          <van-field
            required
            v-model="registerData.userPassword"
            type="password"
            name="密码"
            label="密码"
            placeholder="密码"
            :rules="[{ required: true, message: '请填写密码' },{pattern:passwordPattern,message:'长度为8-15位非空字符'}]"
          />
          <van-field
            required
            v-model="registerData.checkPassword"
            type="password"
            name="确认密码"
            label="确认密码"
            placeholder="确认密码"
            :rules="[{ required: true, message: '请填写确认密码' },{pattern:passwordPattern,message:'长度为8-15位非空字符'},{validator,message:'两次密码不一致' }]"
          />
        </van-cell-group>
        <div style="margin: 16px;">
          <van-button round block type="primary" native-type="submit" :disabled="registerData.userAccount.length<4 || registerData.userAccount.length>15 ||registerData.userPassword.length<8 ||registerData.userPassword.length>15 ||registerData.checkPassword.length<8 ||registerData.checkPassword.length>15 ||registerData.userPassword !== registerData.checkPassword" @click="register">
            注册
          </van-button> 
          <div class="reg">
                <div @click="isRegister=false;clearRegisterData()" style="font-size: small; margin-top: 20px;text-align:center">返回登录</div>
            </div>
        </div>
      </van-form>
<!-- 登录 -->
      <van-form @submit="onSubmit" v-else>
        <van-cell-group inset>
          <van-field
           v-model="registerData.userAccount"
            name="用户名"
            label="用户名"
            placeholder="用户名"
            :rules="[{ required: true, message: '请填写用户名' },{pattern:usernamePattern,message:'长度为4-15位非空字符'}]"
          />
          <van-field
            v-model="registerData.userPassword"
            type="password"
            name="密码"
            label="密码"
            placeholder="密码"
            :rules="[{ required: true, message: '请填写密码' },{pattern:passwordPattern,message:'长度为8-15位非空字符'}]"
          />
        </van-cell-group>
        <div style="margin: 16px;">
          <van-button round block type="primary" native-type="submit" @click="login" :disabled="registerData.userAccount.length<4 || registerData.userAccount.length>15 ||registerData.userPassword.length<8 ||registerData.userPassword.length>15" >
            登录
          </van-button>
          <div class="reg">
                <div @click="isRegister=true;clearRegisterData()" style="font-size: small; margin-top: 20px;text-align:center">没有账号?立即注册</div>
            </div>
        </div>
      </van-form>
    </div>
  </div>
</template>
<style>
#building{
  background:url("../images/law.png");
  width:100%;
  height:100%;
  position:fixed;
  background-size:100% 100%;
}
</style>

request.js

import axios from "axios";
import { showNotify } from 'vant';
const baseURL = "/api"
const instance = axios.create({ baseURL });

import router from '@/router'
//添加响应拦截
instance.interceptors.response.use(
  result => {
    if (result.data.code === 0) {
      return result.data;
    }
    showNotify({ type: 'danger', message: result.data.description ? result.data.description : "服务异常" });
    return Promise.reject(result.data);
  },
  err => {
    //判断状态码若401,则跳转登录页
    if (err.response.status === 401) {
      showNotify({ type: 'danger', message: '请先登录' });
      router.push('/login')
    } else {
      showNotify({ type: 'danger', message: '服务异常' });
    }
    return Promise.reject(err);
  }
)
export default instance;

user.js

//导入request.js请求工具
import request from '@/utils/request'

//提供调用用户注册的接口
export const userRegisterService = (registerData) => {
  //借助UrlSearchParams对象封装请求参数
  const params = new URLSearchParams()
  for (let key in registerData) {
    params.append(key, registerData[key])
  }
  return request.post('/user/register', params)
}
//提供调用用户登录的接口
export const userLoginService = (loginData) => {
  //借助UrlSearchParams对象封装请求参数
  const params = new URLSearchParams()
  for (let key in loginData) {
    params.append(key, loginData[key])
  }
  return request.post('/user/login', params)
}

开发中遇到的问题

一、动态绑定无法正常使用

问题描述: 当我想通过v-if="isRegister",来实现登录与注册的切换,但是无法实现。isRegister是一个动态绑定的布尔值,为true显示注册页面表单,为false显示登录表单页面。

解决过程: 在《script setup> 中添上setup
具体实现:

<script setup>
</script>

二、无法设置背景

问题描述: 无法给页面设置背景

解决过程: 编写css
具体实现:

#building{
  background:url("../images/law.png");
  width:100%;
  height:100%;
  position:fixed;
  background-size:100% 100%;
}

标签:const,在线,登录,100%,Day5,result,import,法律咨询,registerData
From: https://www.cnblogs.com/yousuobutong/p/18455250

相关文章

  • 【NVIDIA NIM 黑客松训练营】使用NVIDIA AI Workbench 创建一个在线代码生成器
    随着人工智能技术的不断进步,越来越多的工具和服务开始集成AI功能来提升用户体验。本教程将指导你如何使用PythonFlask框架结合NVIDIA提供的NIM服务,创建一个简单的在线代码生成器。用户可以通过一个直观的Web界面输入请求,系统将返回对应的Python代码。项目背景对于那些正......
  • Coursera:在线学习的革命性平台
    Coursera:开启全球学习新纪元在这个数字化时代,教育的形式正在发生翻天覆地的变化。Coursera作为在线教育领域的佼佼者,为全球学习者打开了一扇通往知识的大门。本文将全面介绍Coursera平台,探讨其如何revolutionize了传统教育模式,以及它为学习者带来的无限可能。Coursera的诞生与发......
  • SSM舞蹈房管理系统lq4q8 在线咨询
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表系统内容:学员,老师,舞蹈课程,课程类型,舞种咨询,咨询回复,课程预约,学员卡开题报告内容一、选题背景与意义随着舞蹈艺术的普及和受欢迎程度的提升,舞蹈房的数量......
  • 程序员常用在线工具汇总
    端口扫描JavaScript混淆加密时间戳转换进制转换MD5加密AES加密/解密DES加密/解密SHA加密RIPEMD160哈希加密HMAC哈希加密Rabbit加密/解密RC4加密/解密图片转base64base64编码解码URL编码解码文本与ASCLL转换器Unicode编码器/解码器文本(代码)对比工具html格式化、......
  • 图片处理在线工具汇总
    图像格式转换器压缩图像调整图像大小调整图像宽高比例批量给图片加水印批量旋转图像在线生成透明ICO图标在线生成透明圆角图片制作gif图片,编辑gif图片视频转gif图片,视频转动图分解gif图片裁剪、编辑图像生成宫格图像,分割图片图像处理助手桌面应用程序图像压缩器桌面......
  • 基于uni-app的蛋糕甜品在线订购微信小程序
    项目介绍美食的追求愈发精致和多样化。蛋糕和甜品作为人们日常消费中的重要组成部分,其市场需求不断增长。传统线下甜品店在销售过程中面临诸多限制,如营业时间固定、销售区域有限、顾客需要到店购买等,这大大限制了甜品市场的扩展。为了满足广大消费者对蛋糕和甜品便捷、多样......
  • PDF电子发票怎么合并在一起,免费在线教学
    在日常生活和工作中,我们常常需要处理多个PDF格式的发票。这些文件可能来自不同的商家或服务,而合并它们成为一个文档,不仅方便查阅,还能帮助我们更好地管理财务。今天,我将为大家提供一份简单易懂的教程,教你如何免费合并多个PDF发票,轻松实现文档整合。为什么需要合并PDF发票?合并......
  • 在线加密解密工具(MD5,aes,des,sha,ripemd160,hmac,rabbit,rc4)
    MD5加密AES加密/解密DES加密/解密SHA加密RIPEMD160哈希加密HMAC哈希加密Rabbit加密/解密RC4加密/解密......
  • 浴火之路完整无修百度/云网盘下载[HD1080高清]在线免费无删减下载链接
    电影,历来是承载故事的一种重要媒介,但《浴火之路》这部影片,却不仅仅是一个故事,它是一次人性的深刻剖析,是对爱与痛苦的共鸣,在这个瞬息万变的时代,很多人可能会问:看电影究竟是为了什么?为了娱乐、为了消遣,还是寻找那久违的感动?当你坐在影院那舒适的座椅上,当影幕上光影交错,你会发现,只要......
  • 计算机毕业设计 基于Django的在线考试系统的设计与实现 Python+Django+Vue 前后端分离
    ......