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

网站预算表怎么做怎么让客户主动找你

网站预算表怎么做,怎么让客户主动找你,wordpress preg_replace 关键词 alt,百度网站大全旧版基础项目构建 创建VUE初始工程 确保自己下载了node.js和npm node -v //查看node.js的版本 npm -v //查看npm的版本 npm i vue/cli -g //安装VUE CLI 创建 以管理员身份运行 输入:vue ui 就会进入 点击创建 自定义项目名字,选择npm管理 结…

基础项目构建

创建VUE初始工程

确保自己下载了node.js和npm

node -v     //查看node.js的版本
npm -v      //查看npm的版本
npm i @vue/cli -g    //安装VUE CLI

创建

以管理员身份运行

输入:vue ui

就会进入

点击创建

自定义项目名字,选择npm管理

结构

用vscode打开这个项目

运行

打开终端

快捷键:ctrl+j

输入npm run serve回车

然后进入给的网址

修改端口

vue.config.js

const { defineConfig } = require('@vue/cli-service')
module.exports = defineConfig({transpileDependencies: true,devServer: {port: 8181}
})

现在我们就是在这个界面开始编写我们的代码

2024.7.4


学生登录界面

参考这篇文章

Vue 实现登录注册功能(前后端分离完整案例) | 软件研会

参考文章中遇到的一些问题

问题:解决error: Component name “xxx” should always be multi-word.

解决:

解决error: Component name “xxx” should always be multi-word._error component name "about" should always be mult-CSDN博客

问题:import VueAxios from 'vue-axios'中vue-axios找不到报错

解决:

npm i vue-axios

问题:点击登录之后,一直网页报错

解决措施:(麻了,我各种翻阅资料,居然是这里出错了,气死了!!!!!!!花费了我2小时)

src\views\login\Login.vue

问题基本搞定,还有一些小细节:

我们不需要注册这个版本,所以我没有搞。

基本就ok了

所有的代码:

src\App.vue


<template><div id="app"><router-view/></div>
</template><script>export default {name: 'App',components: {}
}
</script><style>
#app {font-family: Avenir, Helvetica, Arial, sans-serif;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;text-align: center;color: #2c3e50;
}
</style>

src\main.js

import Vue from 'vue'
import App from './App.vue'
import store from './store'import router from './router'      //路由 2
import VueRouter from 'vue-router' // 路由 1import ElementUI from 'element-ui';	// Element 1
import 'element-ui/lib/theme-chalk/index.css'; // Element 2import axios from 'axios'  
import VueAxios from 'vue-axios'// 关闭 Vue 的生产提示
Vue.config.productionTip = false// 使用插件
Vue.use(ElementUI); // Element 3
Vue.use(VueRouter) // 路由 3
Vue.use(VueAxios, axios) // 使用 axios 插件// 创建 Vue 实例对象
new Vue({router,store,render: h => h(App)
}).$mount('#app')

vue.config.js

const { defineConfig } = require('@vue/cli-service')
module.exports = defineConfig({transpileDependencies: true,lintOnSave: false,devServer: {port: 8181,// 代理服务器可以将路由中的指定前缀转发到指定的后端服务器中proxy: {'/api': {target: 'http://localhost:8080',ws: true, // 是否启用websocketschangeOrigin: true,  // 代理时是否更改hostpathRewrite: {'^/api': '' //这里理解成用'/api'代替target里面的地址}}}}
})

src\views\login\Login.vue

<template><div><el-card class="box-card"><h2>登录</h2><el-form:model="ruleForm"status-icon:rules="rules"ref="ruleForm"label-position="left"label-width="70px"class="login-from"><el-form-item label="用户名" prop="username"><el-input v-model="ruleForm.username"></el-input></el-form-item><el-form-item label="密码" prop="password"><el-inputtype="password"v-model="ruleForm.password"autocomplete="off"></el-input></el-form-item></el-form><div class="btnGroup"><el-buttontype="primary"@click="submitForm('ruleForm')"v-loading="loading">登录</el-button><el-button @click="resetForm('ruleForm')">重置</el-button><router-link to="/register"><el-button style="margin-left: 10px">注册</el-button></router-link></div></el-card></div>
</template><script>export default {data() {return {ruleForm: {username: "",password: "",},rules: {username: [{ required: true, message: "用户名不能为空!", trigger: "blur" },],password: [{ required: true, message: "密码不能为空!", trigger: "blur" },],},loading: false, // 是否显示加载动画};},methods: {submitForm(formName) {// 验证表单中的账号密码是否有效,因为在上面rules中定义为了必填 required: truethis.$refs[formName].validate((valid) => {// 点击登录后,让登录按钮开始转圈圈(展示加载动画)this.loading = true;// 如果经过校验,账号密码都不为空,则发送请求到后端登录接口if (valid) {let _this = this;// 使用 axios 将登录信息发送到后端this.axios({url: "/api/admin/student/login",               // 请求地址method: "post",                       // 请求方法headers: {                            // 请求头"Content-Type": "application/json",},data: {                             // 请求参数username: _this.ruleForm.username,password: _this.ruleForm.password,},}).then((res) => { // 当收到后端的响应时执行该括号内的代码,res 为响应信息,也就是后端返回的信息if (res.data.code === 1) {  // 当响应的编码为 1 时,说明登录成功// 将用户信息存储到sessionStorage中sessionStorage.setItem("userInfo", JSON.stringify(res.data.data));// 跳转页面到首页this.$router.push('/home');// 显示后端响应的成功信息this.$message({message: res.data.data,type: "success",});} else {  // 当响应的编码不为 1 时,说明登录失败// 显示后端响应的失败信息this.$message({message: res.data.msg,type: "warning",});}// 不管响应成功还是失败,收到后端响应的消息后就不再让登录按钮显示加载动画了_this.loading = false;console.log(res);});} else {  // 如果账号或密码有一个没填,就直接提示必填,不向后端请求console.log("error submit!!");this.loading = false;return false;}});},resetForm(formName) {this.$refs[formName].resetFields();},},
};
</script><style scoped>
/* 设置登录面板居中,宽度为400px */
.box-card {margin: auto auto;width: 400px;
}
/* 设置登录面板中的表单居中 */
.login-from {margin: auto auto;
}
</style>

src\views\home\Home.vue

<template><div><h2>欢迎{{ user.username }}!您的 uid 为{{ user.id }}</h2><el-button @click="logout"> 登出 </el-button></div>
</template><script>
export default {data() {return {user: {username: "",id: null,},};},methods: {logout(){// 移除本地用户登录信息sessionStorage.removeItem('userInfo');// 跳转页面到登录页this.$router.push('/login');}},mounted() {if (sessionStorage.getItem('userInfo')) {// 将用户信息存储到sessionStorage中this.user = JSON.parse(sessionStorage.getItem('userInfo'));}},
};
</script><style scoped>
</style>

src\router\index.js

// 此文件专门负责项目的路由import VueRouter from "vue-router"// 引入组件
import Login from '../views/login/Login'
import Register from '@/views/register/Register.vue'
import Home from '@/views/home/Home.vue'// 创建并暴露一个路由器
export default new VueRouter({mode: 'history',    // 路由模式,该模式不会在地址中显示井号#routes: [{path: '/',          // 路径redirect: '/login'  // 重定向},{path: '/login',     // 路径component: Login    // 跳转到的组件},{path: '/register',     // 路径component: Register    // 跳转到的组件},{path: '/home',     // 路径component: Home    // 跳转到的组件}]
})

修改一下登录界面

去掉注册功能

src\views\login\Login.vue

删除红色框部分

src\views\register

src\router\index.js

添加背景图片

src\views\login\Login.vue

测试

完整代码

src\views\login\Login.vue

<template><div class="login-background"><el-card class="box-card"><h2>体育器材管理后台</h2><el-form:model="ruleForm"status-icon:rules="rules"ref="ruleForm"label-position="left"label-width="70px"class="login-from"><el-form-item label="用户名" prop="username"><el-input v-model="ruleForm.username"></el-input></el-form-item><el-form-item label="密码" prop="password"><el-inputtype="password"v-model="ruleForm.password"autocomplete="off"></el-input></el-form-item></el-form><div class="btnGroup"><el-buttontype="primary"@click="submitForm('ruleForm')"v-loading="loading">登录</el-button><el-button @click="resetForm('ruleForm')">重置</el-button></div></el-card></div>
</template><script>export default {data() {return {ruleForm: {username: "",password: "",},rules: {username: [{ required: true, message: "用户名不能为空!", trigger: "blur" },],password: [{ required: true, message: "密码不能为空!", trigger: "blur" },],},loading: false, // 是否显示加载动画};},methods: {submitForm(formName) {// 验证表单中的账号密码是否有效,因为在上面rules中定义为了必填 required: truethis.$refs[formName].validate((valid) => {// 点击登录后,让登录按钮开始转圈圈(展示加载动画)this.loading = true;// 如果经过校验,账号密码都不为空,则发送请求到后端登录接口if (valid) {let _this = this;// 使用 axios 将登录信息发送到后端this.axios({url: "/api/admin/student/login",               // 请求地址method: "post",                       // 请求方法headers: {                            // 请求头"Content-Type": "application/json",},data: {                             // 请求参数username: _this.ruleForm.username,password: _this.ruleForm.password,},}).then((res) => { // 当收到后端的响应时执行该括号内的代码,res 为响应信息,也就是后端返回的信息if (res.data.code === 1) {  // 当响应的编码为 1 时,说明登录成功// 将用户信息存储到sessionStorage中sessionStorage.setItem("userInfo", JSON.stringify(res.data.data));// 跳转页面到首页this.$router.push('/home');// 显示后端响应的成功信息this.$message({message: res.data.data,type: "success",});} else {  // 当响应的编码不为 1 时,说明登录失败// 显示后端响应的失败信息this.$message({message: res.data.msg,type: "warning",});}// 不管响应成功还是失败,收到后端响应的消息后就不再让登录按钮显示加载动画了_this.loading = false;console.log(res);});} else {  // 如果账号或密码有一个没填,就直接提示必填,不向后端请求console.log("error submit!!");this.loading = false;return false;}});},resetForm(formName) {this.$refs[formName].resetFields();},},
};
</script><style scoped>
/* 设置登录面板居中,宽度为400px */
.box-card {margin: auto auto;width: 400px;
}
/* 设置登录面板中的表单居中 */
.login-from {margin: auto auto;
}/* 背景图片 */
.login-background {  background-image: url('/src/assets/bg.jpeg');  background-size: cover;  background-position: center;  height: 100vh;  display: flex; /* 如果你想要使用Flexbox来居中el-card  */ justify-content: center; /* 水平居中 */  align-items: center; /* 垂直居中 */  
}  
</style>


文章转载自:
http://anemometer.jpkk.cn
http://gachupin.jpkk.cn
http://relocate.jpkk.cn
http://hematopoiesis.jpkk.cn
http://tribromide.jpkk.cn
http://bullwhip.jpkk.cn
http://hindrance.jpkk.cn
http://thrombocytopenia.jpkk.cn
http://lithemic.jpkk.cn
http://outrigged.jpkk.cn
http://structurism.jpkk.cn
http://prognosis.jpkk.cn
http://predynastic.jpkk.cn
http://effortless.jpkk.cn
http://microtransmitter.jpkk.cn
http://september.jpkk.cn
http://malaita.jpkk.cn
http://hgh.jpkk.cn
http://stratoliner.jpkk.cn
http://pouch.jpkk.cn
http://extramarital.jpkk.cn
http://childly.jpkk.cn
http://yancey.jpkk.cn
http://coanda.jpkk.cn
http://trichoma.jpkk.cn
http://pitchout.jpkk.cn
http://leptodactyl.jpkk.cn
http://typed.jpkk.cn
http://arc.jpkk.cn
http://wildlife.jpkk.cn
http://superheat.jpkk.cn
http://usps.jpkk.cn
http://ahoy.jpkk.cn
http://tracheate.jpkk.cn
http://paridigitate.jpkk.cn
http://tx.jpkk.cn
http://semifabricator.jpkk.cn
http://cafe.jpkk.cn
http://intracity.jpkk.cn
http://rfe.jpkk.cn
http://prelim.jpkk.cn
http://respiratory.jpkk.cn
http://oboe.jpkk.cn
http://codistor.jpkk.cn
http://estrepe.jpkk.cn
http://circumrotate.jpkk.cn
http://proliferation.jpkk.cn
http://dlitt.jpkk.cn
http://drawerful.jpkk.cn
http://fatalism.jpkk.cn
http://haystack.jpkk.cn
http://parachor.jpkk.cn
http://undisguisedly.jpkk.cn
http://polarimetry.jpkk.cn
http://counterpull.jpkk.cn
http://vinegrower.jpkk.cn
http://sumpitan.jpkk.cn
http://conjoint.jpkk.cn
http://zengakuren.jpkk.cn
http://affair.jpkk.cn
http://dupability.jpkk.cn
http://textolite.jpkk.cn
http://lo.jpkk.cn
http://cardiorespiratory.jpkk.cn
http://disseminative.jpkk.cn
http://gloria.jpkk.cn
http://anthropologic.jpkk.cn
http://zoography.jpkk.cn
http://gabe.jpkk.cn
http://saccharic.jpkk.cn
http://parted.jpkk.cn
http://admensuration.jpkk.cn
http://aglitter.jpkk.cn
http://gremial.jpkk.cn
http://outflung.jpkk.cn
http://morphactin.jpkk.cn
http://leukorrhea.jpkk.cn
http://empurple.jpkk.cn
http://biosphere.jpkk.cn
http://pygmean.jpkk.cn
http://protectingly.jpkk.cn
http://repossess.jpkk.cn
http://tupperware.jpkk.cn
http://pedantic.jpkk.cn
http://needy.jpkk.cn
http://lingually.jpkk.cn
http://kdc.jpkk.cn
http://arhythmic.jpkk.cn
http://polychaetan.jpkk.cn
http://parados.jpkk.cn
http://example.jpkk.cn
http://galenobismutite.jpkk.cn
http://wigged.jpkk.cn
http://hypertensive.jpkk.cn
http://trouper.jpkk.cn
http://odyl.jpkk.cn
http://shipside.jpkk.cn
http://avon.jpkk.cn
http://iconography.jpkk.cn
http://bias.jpkk.cn
http://www.dt0577.cn/news/71254.html

相关文章:

  • 网站建设 前端 后端网络推广专员是干什么的
  • 一个真正的网站需要怎么做免费推广app软件下载
  • 网站如何做中英文双语言版本北京百度推广优化公司
  • 永川集团网站建设178软文网
  • 网站没有被收录原因优化推广网站淄博
  • 做网站英文怎么说品牌营销和市场营销的区别
  • 戴尔网站建设和维护网店运营策划方案
  • 同心县建设局网站关键词免费
  • 建筑资质证书查询网站网上软文发稿平台
  • 网站开发项目质量控制措施打开官方网站
  • 网站常用的推广方法有哪些高端定制网站建设公司
  • 张店易宝网站建设个人博客网页制作
  • 会泽住房和城乡建设局网站太原百度seo排名软件
  • 百度seo网站排名hs网站推广
  • php网站建设费用关键词云图
  • 网站广告怎么放西安seo优化公司
  • 关注城市建设网站简述优化搜索引擎的方法
  • 外贸网站哪家好网站批量查询工具
  • 记事本做网站背景色怎么弄数据查询网站
  • 做网站商城怎么样郑州seo哪家专业
  • 延安有哪些做网站的公司重庆森林影评
  • 公司网站开发比选宁波网络推广联系方式
  • 玉溪网站建设设计厦门seo排名优化方式
  • 网站开发 合同范本厦门seo优化多少钱
  • 做企业网站的哪家好上海广告公司排名
  • 做网站需要的技术网站推广的平台
  • 龙岩网站制作设计中国电信视频app下载
  • 广州网站建设改版企业网站的网络营销功能
  • 网站开发基于什么平台投广告哪个平台好
  • 邢台网站设计怎么做大型网站seo课程