当前位置: 首页 > news >正文

淄博桓台学校网站建设定制/正规seo大概多少钱

淄博桓台学校网站建设定制,正规seo大概多少钱,注册城乡规划师可以挂靠吗,郑州建设网站哪家好1.用户登录页面开发 1.查询vant组件 2.实现组件模板部分 3.模型层准备 4.数据上传 1.1 创建版权声明组件Copyright 新建文件&#xff1a;src\components\common\Copyright.vue <template><!-- 版权声明 --><div class"copyright">copyright xx…

1.用户登录页面开发

1.查询vant组件 2.实现组件模板部分 3.模型层准备 4.数据上传

1.1 创建版权声明组件Copyright

新建文件:src\components\common\Copyright.vue

<template><!-- 版权声明 --><div class="copyright">copyright xxx旅游网&copy;2024</div>
</template>
<style lang="less">
.copyright{position: fixed;bottom: 0;padding: 10px;color:#999;width: 100%;text-align: center;font-size: 12px;
}
</style>

1.2 登录页面Login

新建文件:src\views\accounts\Login.vue

1.2.1 脚本script:

<script setup>
import Copyright from '@/components/common/Copyright.vue';
import { ref } from 'vue';
import { useRoute, useRouter } from 'vue-router';
import TripFooter from '@/components/common/Footer.vue';const route = useRoute() //获得属性
const router = useRouter()  //获取地址const username = ref('')
const password = ref('')//用户名的验证规则
const rulename = ref([{required: true,//用户名组件中通过该属性开启必填验证message: '请填写用户名'
}, {pattern: /1\d{10}/,//用户名组件中,通过该属性开启正则表达式验证message: '请填写正确的手机号'
}])const goBack = () => {router.go(-1)
}
</script>

1.2.2 模板template 

<template><div class="page-account-login"><!-- 导航条 --><van-nav-bar title="用户登录" left-text="返回" @click-left="goBack"></van-nav-bar><!-- 表单输入 --><van-form><!-- 文本框 --><van-field v-model="username" label="用户名" placeholder="用户名" maxlength="11" :rules="rulename" clearable /><!-- 密码框 --><van-field v-model="password" type="password" label="密码" placeholder="密码" :rules="[{ required: true }]" autocomplete="off"/><div><van-button square type="primary" native-type="submit" color="green">提交</van-button></div></van-form><!-- 文字提示 --><div>登录表示同意<a href="#">用户使用协议</a>及<a href="#">隐私条款</a></div><div>没有账户?<RouterLink :to="{name:'AccountRegister'}">点击注册</RouterLink></div><!-- 版权信息 --><Copyright /><TripFooter/></div>
</template>

1.2.3 配置路由:

文件地址:src\router\index.js

import AccountLogin from '@/views/accounts/Login.vue'
const router = createRouter({history: createWebHistory(import.meta.env.BASE_URL),routes: [{path:'/account/login',name:'AccountLogin',component:AccountLogin}]
})

2.用户注册界面开发

2.1 封装短信验证组件SendSmscode

新建文件:src\components\common\SendSmsCode.vue

2.1.1 脚本script

<script setup>
//defineProps用于父子组件通信
import { ref, onMounted, computed, defineProps } from 'vue'
import { useRoute, useRouter } from 'vue-router'//用于控制页面跳转工具,传值工具
import { ajax } from '@/utils/ajax';
import { SightApis } from '@/utils/apis';
import { showToast } from 'vant';const router = useRouter()
const route = useRoute()const goBack = () => {router.go(-1)//跳转至上一页(1:跳转至下一页)
}
const props = defineProps({phoneNum: String
})
//存放验证信息(响应式数据)
const isSmsSend = ref(false)
const sendBtnText = ref('点击发送验证码')
const timer = ref(null)
const counter = ref(60)//清空验证码计时
const reset = () => {isSmsSend.value = falsesendBtnText.value = '点击发送验证码'if (timer.value) {clearInterval(timer.value)//停止回调函数counter.value = 60timer.value = null}
}
//倒计时
const countDown = () => {//回调函数,重复调用timer.value = setInterval(() => {sendBtnText.value = `(${counter.value}秒)后重新发送`counter.value--if (counter.value < 0) {reset()}}, 1000)
}
//发送验证码
const sendSmsCode = () => {//判断手机号是否输入if (!props.phoneNum) {showToast('请输入手机号码')return false}isSmsSend.value = true    //调用接口,发送短息countDown()    //开始倒计时
}
defineExpose({//向父级暴露函数reset
})
</script>

2.1.2 模板template:

<template><!-- 短信验证码发送相关逻辑 --><van-button size="small" type="primary" @click.prevent="sendSmsCode()" :disabled="isSmsSend">{{ sendBtnText }}</van-button>
</template>

2.2 注册页面Register

新建文件:src\views\accounts\Register.vue

2.2.1 脚本script:

<script setup>
import Copyright from '@/components/common/Copyright.vue'
import SendSmsCode from '@/components/common/SendSmsCode.vue'
import { ref, toRef } from 'vue';
import { useRoute, useRouter } from 'vue-router'
const route = useRoute()
const router = useRouter();
// 用户名的验证规则
const ruleName = ref([{required: true,message: '请填写用户名'
}, {pattern: /1\d{10}/,message: '请填写正确的手机号'
}])
// 重复密码验证
const rulePassword = ref([{required: true,message: '请重复一次密码'}, {validator: () => form.value.password === form.value.passwordRepeat,message: '两次密码输入不一致'}])
const form = ref({username: '',nickname: '',sms_code: '',password: '',passwordRepeat: ''
})
//手机号变化时,重置验证码组件状态
const refSms = ref({})
const onPhoneChange = () => {//调用验证码组件中reset函数,重置验证码refSms.value.reset()
}
const onSubmit = () => {// 提交表单
}
const goBack = () => {router.go(-1)
}
</script>

2.2.2 模板template


<template><!-- 用户注册 --><div class="page-account-register"><!-- 导航条 --><van-nav-bar title="用户注册" left-text="返回" left-arrow @click-left="goBack" /><!-- 表单输入 --><van-form @submit="onSubmit"><van-field v-model="form.username" label="手机号码" placeholder="手机号码" type="tel" maxlength="11" clearable:rules="ruleName" @input="onPhoneChange" /><van-field v-model="form.sms_code" center clearable label="短信验证码" placeholder="短信验证码":rules="[{ required: true, message: '请输入短信验证码' }]"><template #button><SendSmsCode ref="refSms" :phoneNum="form.username" /></template></van-field><van-field v-model="form.nickname" label="用户昵称" placeholder="用户昵称" maxlength="32" clearable:rules="[{ required: true, message: '请输入用户昵称' }]" /><van-field v-model="form.password" type="password" label="密码" placeholder="密码":rules="[{ required: true, message: '请填写密码' }]" autocomplete="off"/><van-field v-model="form.passwordRepeat" type="password" label="确认密码" placeholder="确认密码":rules="rulePassword" autocomplete="off" /><div style="margin: 16px;"><van-button round block type="info" native-type="submit">提交</van-button></div></van-form><!-- //表单输入 --><!-- 文字提示 --><div class="tips">注册表示同意 <a href="#">用户使用协议</a>及<a href="#">隐私条款</a></div><div class="tips">已有账号? <router-link :to="{ name: 'AccountLogin' }">点击登录>></router-link></div><!-- 版权信息 --><Copyright /></div>
</template>

2.2.3 配置路由:

文件地址:src\router\index.js

import AccountRegister from '@/views/accounts/Register.vue'
const router = createRouter({history: createWebHistory(import.meta.env.BASE_URL),routes: [{//用户注册path: '/account/register',name: 'AccountRegister',component: AccountRegister}]
})

3.个人主页界面开发Mine

新建文件:src\views\Mine.vue

3.1 脚本script

import TripFooter from '@/components/common/Footer.vue'

3.2 模板template


<template><div class="page-mine"><!-- 标题栏 --><van-nav-bar title="个人中心" /><!-- 用户基本信息(头像/昵称) --><div class="user-header"><div class="avatar"><img src="/static/mine/avatar.png"></div><div><p>Welcome,Adela</p><a class="btn-link" href="#">退出登录</a></div></div><!-- 订单菜单列表 --><van-row><van-col span="6"><RouterLink to="/"><van-icon name="records" /><span>全部订单</span></RouterLink></van-col><van-col span="6"><RouterLink to="/"><van-icon name="pending-payment" /><span>待支付</span></RouterLink></van-col><van-col span="6"><RouterLink to="/"><van-icon name="tosend" /><span>已完成</span></RouterLink></van-col><van-col span="6"><RouterLink to="/"><van-icon name="logistics" /><span>已取消</span></RouterLink></van-col></van-row><!-- 底部导航 --><TripFooter /></div>
</template>

3.3 样式style(范例)

<style lang="less">
.page-mine {font-family: 'Arial', sans-serif;color: #333;background-color: #f7f7f7;.van-nav-bar {background-color: #07c; //color: #fff;.van-nav-bar__title {color: #fff;text-align: center;}}// 用户头部区域样式.user-header {background: url(/static/mine/bg.jpg) no-repeat center;background-size: cover;color: #fff;height: 200px;display: flex;flex-direction: column;justify-content: center;align-items: center;height: 200px; // 确保有足够的高度.avatar {margin-bottom: 20px;img {width: 60px;height: 60px;border-radius: 50%;}}p {font-size: 18px;}.btn-link {margin-top: 10px; // 添加顶部外边距以在垂直方向上居中margin-left: 25px; }}// 订单菜单列表样式.van-row {.van-col {a {display: flex;flex-direction: column;align-items: center;text-decoration: none;color: #333;padding: 10px;.van-icon {font-size: 24px;margin-bottom: 5px;}span {font-size: 14px;}}&:not(:last-child) {border-right: 1px solid #eee;}}}// 底部导航样式.trip-footer {background-color: #fff;box-shadow: 0 -2px 5px rgba(0, 0, 0, 0.1);position: fixed;bottom: 0;width: 100%;}
}
</style>

3.4 配置路由

文件地址:src\router\index.js

import Mine from '@/views/Mine.vue'
const router = createRouter({history: createWebHistory(import.meta.env.BASE_URL),routes: [{//个人中心path: '/mine',name: 'Mine',component: Mine}]
})

3.5 图示效果:

相关文章:

Vue全栈开发旅游网项目(9)-用户登录/注册及主页页面开发

1.用户登录页面开发 1.查询vant组件 2.实现组件模板部分 3.模型层准备 4.数据上传 1.1 创建版权声明组件Copyright 新建文件&#xff1a;src\components\common\Copyright.vue <template><!-- 版权声明 --><div class"copyright">copyright xx…...

Flutter 的 Widget 概述与常用 Widgets 与鸿蒙 Next 的对比

一、Flutter 的 Widget 概述 Flutter 是 Google 开发的一款开源 UI 框架&#xff0c;旨在帮助开发者快速构建高性能、高保真度的移动、Web 和桌面应用程序。在 Flutter 中&#xff0c;UI 的构建完全是通过 Widget 来实现的。Widget 是 Flutter 中所有用户界面元素的基础构建块…...

微服务day04

网关 网关路由 快速入门 创建新模块&#xff1a;hm-gateway继承hmall父项目。 引入依赖&#xff1a;引入网关依赖和nacos负载均衡的依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"…...

Spring Boot 集成JWT实现Token验证详解

文章目录 Spring Boot 集成JWT实现Token验证详解一、引言二、JWT和Token基础1、什么是Token2、什么是JWT3、JWT的结构4、JWT的工作原理 三、集成JWT1、引入JWT依赖2、创建Token工具类3、创建拦截器4、注册拦截器 四、总结 Spring Boot 集成JWT实现Token验证详解 一、引言 在现…...

如何快速搭建一个spring boot项目

一、准备工作 1.1 安装JDK&#xff1a;确保计算机上已安装Java Development Kit (JDK) 8或更高版本、并配置了环境变量 1.2 安装Maven&#xff1a;下载并安装Maven构建工具&#xff0c;这是Spring Boot官方推荐的构建工具。 1.3 安装代码编辑器&#xff1a;这里推荐使用Inte…...

学习笔记:黑马程序员JavaWeb开发教程(2024.11.9)

9.1 Mybatis-基础操作-环境准备 这里也没做&#xff0c;到时候写案例&#xff0c;如果需要环境配置什么的&#xff0c;可以看看这个 9.2 Mybatis-基础操作-删除 删除需要动态获取需要删除的id&#xff0c;使用方法传参&#xff0c;#{}的方式实现 在编写的delete方法中&a…...

【软考】系统分析师第二版 新增章节 第20章微服务系统分析与设计

微服务系统是一类基于微服务架构风格的分布式系统&#xff0c;它将应用程序拆分成多个独立的小型服务&#xff0c;每个服务都运行在独立的进程中&#xff0c;并采用轻量级通信协议进行通信。这些服务可以由不同的团队开发、不同的编程语言编写&#xff0c;并且可以按需部署。微…...

抓包工具WireShark使用记录

目录 网卡选择&#xff1a; 抓包流程&#xff1a; 捕获过滤器 常用捕获过滤器&#xff1a; 抓包数据的显示 显示过滤器&#xff1a; 常用的显示过滤器&#xff1a; 实际工作中&#xff0c;在平台对接&#xff0c;设备对接等常常需要调试接口&#xff0c;PostMan虽然可以进…...

C++上机实验|多态性编程练习

1.实验目的 (1)理解多态性的概念。 (2)掌握如何用虚函数实现动态联编 (3)掌握如何利用虚基类。 2.实验内容 设计一个飞机类 plane,由它派生出歼击机类fighter和轰炸机类 bomber,歼击机类fighter 和轰炸机类bomber 又共同派生出歼轰机(多用途战斗机)。利用虚函数和虚基类描述…...

php伪协议介绍

PHP伪协议共有12种,具体如下: file:// — 访问本地文件系统http:// — 访问 HTTP(s) 网址ftp:// — 访问 FTP(s) URLsphp:// — 访问各个输入/输出流(I/O streams)php://stdin, php://stdout 和 php://stderrphp://inputphp://outputphp://memory 和 php://tempphp://filte…...

『事善能』MySQL基础 — 2.MySQL 5.7安装(一)

1、通过msi安装软件进行MySQL安装 &#xff08;1&#xff09;点击运行MySQL安装文件 &#xff08;2&#xff09;选择安装类型 我们选择自定义安装&#xff0c;点击Next。 说明 Develop Default&#xff1a;默认开发类型&#xff0c;安装MySQL服务器以及开发MySQL应用所需要的工…...

漫谈分布式唯一ID

文章目录 本系列前言UUIDDB自增主键Redis incr命令号段模式雪花算法 本系列 漫谈分布式唯一ID&#xff08;本文&#xff09;分布式唯一ID生成&#xff08;二&#xff09;&#xff1a;leaf分布式唯一ID生成&#xff08;三&#xff09;&#xff1a;uid-generator&#xff08;待完…...

【复旦微FM33 MCU 开发指南】ADC

前言 本系列基于复旦微FM33LC0系列单片机的DataSheet编写&#xff0c;旨在提供手册解析和开发指南。 本文章及本系列其他文章将持续更新&#xff0c;本系列其它文章请跳转【复旦微FM33 MCU 外设开发指南】总集篇 本文章最后更新日期&#xff1a;2024/11/09 全文字数&#xff…...

ORB_SLAM3安装

ORB_SLAM3安装 一.前期准备1.1ubuntu查看当前版本的命令1.2 根据ubuntu版本&#xff0c;更新下载软件源1.3 先下载git1.4 vim语法高亮1.5 常见的linux命令 二.ORB-SLAM3下载2.1 ORB_SLAM3源码下载2.2 安装依赖库2.2.1 依赖库2.2.2 安装pangolin2.2.3 安装opencv2.2.4 Eigen3安装…...

GoLang协程Goroutiney原理与GMP模型详解

本文原文地址:GoLang协程Goroutiney原理与GMP模型详解 什么是goroutine Goroutine是Go语言中的一种轻量级线程&#xff0c;也成为协程&#xff0c;由Go运行时管理。它是Go语言并发编程的核心概念之一。Goroutine的设计使得在Go中实现并发编程变得非常简单和高效。 以下是一些…...

全文检索ElasticSearch到底是什么?

学习ElasticSearch之前&#xff0c;我们先来了解一下搜索 1 搜索是什么 ① 概念&#xff1a;用户输入想要的关键词&#xff0c;返回含有该关键词的所有信息。 ② 场景&#xff1a; ​ 1互联网搜索&#xff1a;谷歌、百度、各种新闻首页&#xff1b; ​ 2 站内搜索&#xff…...

FPGA实现串口升级及MultiBoot(五)通过约束脚本添加IPROG实例

本文目录索引 一个指令和三种方式通过约束脚本添加Golden位流工程MultiBoot位流工程验证example1总结代码缩略词索引: K7:Kintex 7V7:Vertex 7A7:Artix 7MB:MicroBlaze上一篇文章种总结了MultiBoot 关键技术,分为:一个指令、二种位流、三种方式、四样错误。针对以上四句话我…...

文献阅读 | Nature Methods:使用 STAMP 对空间转录组进行可解释的空间感知降维

文献介绍 文献题目&#xff1a; 使用 STAMP 对空间转录组进行可解释的空间感知降维 研究团队&#xff1a; 陈金妙&#xff08;新加坡科学技术研究局&#xff09; 发表时间&#xff1a; 2024-10-15 发表期刊&#xff1a; Nature Methods 影响因子&#xff1a; 36.1&#xff0…...

【模块化大作战】Webpack如何搞定CommonJS与ES6混战(1-3)

在前端开发中&#xff0c;模块化是一个重要的概念&#xff0c;不同的模块化标准有不同的特点和适用场景。webpack 同时支持 CommonJS 和 ES6 Module&#xff0c;因此需要理解它们在互操作时 webpack 是如何处理的。 同模块化标准 如果导出和导入使用的是同一种模块化标准&…...

[NewStar 2024] week5完结

每次都需要用手机验证码登录&#xff0c;题作的差不多就没再进过。今天把week5解出的部分记录下。好像时间过去很久了。 Crypto 没e也能完 这题给了e,p,q,dp,dq。真不清楚还缺啥 long_to_bytes(pow(c,dp,p)) 格格你好棒 给了a,b和提示((p2*r) * 3*a q) % b < 70 其中r…...

IntelliJ IDEA的快捷键

IntelliJ IDEA 是一个非常强大的集成开发环境&#xff0c;它提供了大量的快捷键来加速开发者的日常工作。这里为您整理了一份 IntelliJ IDEA 的快捷键大全&#xff0c;包含了编辑、导航、重构、运行等多个方面的快捷键。请注意&#xff0c;这些快捷键是基于 Windows 版本的 Int…...

暮雨直播 1.3.2 | 内置直播源,频道丰富,永久免费

暮雨直播是一款内置直播源的电视直播应用程序&#xff0c;提供丰富的频道内容&#xff0c;包括教学、首页、一线、博主、解说、动漫、堆堆等。该应用的内置直播源持续更新维护&#xff0c;确保用户可以稳定地观看各种电视频道。暮雨直播承诺永久免费&#xff0c;为用户提供了一…...

单相锁相环,原理与Matlab实现

单相锁相环基本原理 单相锁相环的基本原理图如下所示&#xff0c; u α u_\alpha uα​ u β u_\beta uβ​经Park变换、PI控制实现对角频率 ω \omega ω和角度 θ \theta θ的估算。不同锁相环方案之间的差异&#xff0c;主要表现在正交电压 u β u_\beta uβ​的生成&#x…...

PICO+Unity 用手柄点击UI界面

如果UI要跟随头显&#xff0c;可将Canvas放置到XR Origin->Camera Offset->Main Camera下 1.Canvas添加TrackedDeviceGraphicRaycaster组件 2.EventSystem移动默认的Standard Input Module&#xff0c;添加XRUIInputModule组件 3.&#xff08;可选&#xff09;设置射线可…...

Rust移动开发:Rust在iOS端集成使用介绍

iOS调用Rust 上篇介绍了 Rust移动开发&#xff1a;Rust在Android端集成使用介绍, 这篇主要看下iOS上如何使用Rust&#xff0c;Rust可以给移动端开发提供跨平台&#xff0c;通用组件支持。 该篇适合对iOS、Rust了解&#xff0c;想知道如何整合调用和编译的&#xff0c;如果想要…...

虚拟现实技术在旅游行业的应用

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 虚拟现实技术在旅游行业的应用 虚拟现实技术在旅游行业的应用 虚拟现实技术在旅游行业的应用 引言 虚拟现实技术概述 定义与原理…...

《Java核心技术 卷I》Swing使用颜色

使用颜色 使用Graphics2D类的setPaint方法可以为图形上下文上的所有后续的绘制操作选择颜色。例如&#xff1a; g2.setPaint(Color.RED); g2.drawString("Warning!",100,100); 可以用一种颜色填充一个封闭图像(例如&#xff1a;矩形或椭圆)的内部。为此&#xff…...

神书《从零构建大模型》分享,尚未发布,GitHub标星22k!!

《从零构建大模型》是一本即将于今年10月底发布的书籍&#xff0c;github已经吸引了惊人的21.7k标星&#xff01;作者是威斯康星大学麦迪逊分校的终身教授&#xff0c;在GitHub、油管、X上拥有大量粉丝&#xff0c;是一位真正的大佬。 本书免费获取地址 在本书中&#xff0…...

【JavaEE进阶】Spring AOP 原理

在之前的博客中 【JavaEE进阶】Spring AOP使用篇_aop多个切点-CSDN博客 我们主要学习了SpringAOP的应用, 接下来我们来学习SpringAOP的原理, 也就是Spring是如何实现AOP的. SpringAOP 是基于动态代理来实现AOP的,咱们学习内容主要分以下两部分 1.代理模式 2.Spring AOP源码剖…...

【网络安全】2.3 安全的网络设计_2.防御深度原则

文章目录 一、网络架构二、网络设备三、网络策略四、处理网络安全事件五、实例学习&#xff1a;安全的网络设计结论 网络设计是网络安全的基础&#xff0c;一个好的网络设计可以有效的防止攻击者的入侵。在本篇文章中&#xff0c;我们将详细介绍如何设计一个安全的网络&#…...