思路是在vant库中使用插件将上传的头像转码存入数据库中。每个用户存一个,不同用户就有不同的头像了。若数据库中没有头像,那么就给一个默认头像

头像上传后端接口:

var express = require('express');
var router = express.Router();
var Headimg = require('./../sql/collection/headimgs');
var sql = require('./../sql');
var uuid = require('node-uuid'); /* GET home page. */
router.get('/', function (req, res, next) {
// res.render('index', { title: 'Express' });
res.send('测试')
}); //图片上传接口
router.post('/upload',(req,res,next)=> {
let { file , userid} = req.body;
let type = 'img';
sql.delete(Headimg);
sql.insert( Headimg, { file, type, userid } ).then( () => {
res.send({code: 10017,message: '上传成功'})
})
}) //查询图片接口
router.get('/getimg',(req,res,next) => {
let { userid } = req.query
sql.find( Headimg, { userid: userid }, {_id:0}).then((data)=>{
res.send({
code:10018,
message:'查询成功',
data:data
})
})
}) module.exports = router;

sql/collection中集合别忘了改

const mongoose = require('../db.js'); // 引入数据库连接模块
const Schema = mongoose.Schema; // 拿到当前数据库相应的集合对象 const headimgSchema = new Schema({
type: {type: String },
file: { type: String },
userid: {type: String}
}) module.exports = mongoose.model('Headimg', headimgSchema);

前端页面:

<template>
<div class="box">
<Header>
<div slot="center">个人中心</div>
</Header>
<div class="content">
<div class="user-card">
<div class="card">
<div class="card-top">
<div class="headimg" >
<img :src='headimg' alt="暂无头像" v-if="flag">
<van-uploader :after-read="afterRead" v-if="flag"/>
<img src="/images/default_photo.png" alt="暂无头像" v-else>
<p>
<span v-if="!flag" class="gologin" @click="gologin()">前往登录</span>
<span v-else>{{name}}</span>
<span>会员卡</span>
</p>
</div>
<span class="iconfont icon-ico code"></span>
</div>
<div class="card-center">
<p class="buyvip">购买会员</p>
</div>
<div class="card-bottom">
<p class="cardnum">NO.123456789</p>
<p>永久有效</p>
</div>
</div>
</div>
<div class="user-grade">
<div>
<p>40张</p>
<span>优惠券</span>
</div>
<span class="line"></span>
<div>
<p>650</p>
<span>积分</span>
</div>
<span class="line"></span>
<div>
<p>0元</p>
<span>储值</span>
</div>
</div>
<div class="user-order user-default">
<h4>我的订单</h4>
<div class="order-main main-default">
<router-link tag="div" to="/userorder?num=0">
<span class="iconfont icon-quanbudingdan"></span>
<p>全部订单</p>
</router-link>
<router-link tag="div" to="/userorder?num=1">
<span class="iconfont icon-daifukuan"></span>
<p>待付款</p>
</router-link>
<!-- <router-link tag="div" to="/userorder?num=2">
<span class="iconfont icon-daifahuo"></span>
<p>待发货</p>
</router-link> -->
<router-link tag="div" to="/userorder?num=2">
<span class="iconfont icon-daifahuodingdan"></span>
<p>待收货</p>
</router-link>
<router-link tag="div" to="/userorder?num=3">
<span class="iconfont icon-daipingjia"></span>
<p>待评价</p>
</router-link>
<router-link tag="div" to="/userorder?num=4">
<span class="iconfont icon-shouhou"></span>
<p>售后</p>
</router-link>
</div>
</div>
<div class="user-tools user-default">
<h4>我的工具</h4>
<div class="tools-main main-default">
<router-link tag="div" :to="'/address?userid=' + userid">
<span class="iconfont icon-shouhuodizhi"></span>
<p>收货地址</p>
</router-link>
<router-link tag="div" to="/updatepassword">
<span class="iconfont icon-xiugaimima"></span>
<p>修改密码</p>
</router-link>
<router-link tag="div" to="/cart">
<span class="iconfont icon-gouwuche"></span>
<p>购物车</p>
</router-link>
<div>
<span class="iconfont icon-xitongtongzhi"></span>
<p>系统通知</p>
</div>
<div>
<span class="iconfont icon-zuji"></span>
<p>足迹</p>
</div>
<div>
<span class="iconfont icon-shoucang"></span>
<p>收藏</p>
</div>
</div>
</div>
<div class="user-vip user-default">
<h4>会员中心</h4>
<div class="vip-main main-default">
<div>
<span class="iconfont icon-huiyuan"></span>
<p>会员卡</p>
</div>
<div>
<span class="iconfont icon-user-coupon"></span>
<p>优惠券</p>
</div>
<div>
<span class="iconfont icon-jifen"></span>
<p>积分</p>
</div>
<div>
<span class="iconfont icon-money-bag-copy"></span>
<p>储值金</p>
</div>
</div>
</div>
<div class="user-market user-default">
<h4>营销工具</h4>
<div class="market-main main-default">
<div>
<span class="iconfont icon-wodepintuan"></span>
<p>我的拼团</p>
</div>
<div>
<span class="iconfont icon-zhongjiangjilu-"></span>
<p>中奖记录</p>
</div>
<router-link tag="div" to="/about">
<span class="iconfont icon-daiyanrenzhongxin"></span>
<p>关于我们</p>
</router-link>
</div>
</div>
<div class="quit" v-if="flag">
<button class="outlogin" @click="outlogin()">退出登录</button>
</div>
</div>
</div>
</template>
<style lang="scss" scoped>
@import '@/lib/reset.scss';
.user-card {
padding: 0.2rem;
background: #fff;
margin-bottom: .15rem;
.card {
width: 100%;
height:1.15rem;
background: #9A9A9A url("/images/userCenterHead.png") no-repeat;
background-size: 100% auto;
border-radius: 5px;
@include flexbox();
@include flex-direction(column);
@include padding(.1rem);
@include justify-content(space-between);
.card-top {
@include flexbox();
@include justify-content(space-between);
.headimg{
img{
border-radius: 50%;
width: .5rem;
height: .5rem;
}
.van-uploader{
position: absolute;
opacity: 0;
width: 50px;
height: 50px;
}
}
div {
@include flexbox();
p {
@include padding(0 0 0 10px);
@include flexbox();
@include flex-direction(column);
.gologin {
text-decoration: underline;
// font-style: italic;
color:#fff;
font-size: 20px;
}
}
}
.code {
font-size: 0.25rem;
}
}
.card-center {
@include flexbox();
@include justify-content(flex-end);
margin-bottom: 9px;
.buyvip {
width: 0.7rem;
height:0.25rem;
background: #FF7100;
color: #fff;
text-align: center;
border-radius: 8px;
line-height: .25rem;
}
}
.card-bottom {
@include flexbox();
@include justify-content(space-between);
}
}
}
.user-grade {
@include flexbox();
@include align-items();
@include justify-content(space-around);
height: .7rem;
background: #fff;
text-align: center;
margin-bottom: 9px;
div {
p {
font-size: 0.18rem;
font-weight: bold;
}
}
.line {
width:1px;
height:25px;
background: #E4E4E4;
}
}
.user-default {
background: #fff;
margin-bottom: 10px;
h4 {
font-weight: 100;
height:.4rem;
line-height: .4rem;
padding-left: .2rem;
border-bottom: 1px solid #F3F3F3;
}
.main-default {
@include flexbox();
flex-wrap: wrap;
padding-top: 15px;
div {
width: 25%;
height:.8rem;
text-align: center;
span {
font-size: .24rem;
}
}
}
}
.user-tools, .user-market {
.tools-main, .market-main {
div {
width: 33%;
}
}
}
.quit {
@include flexbox();
justify-content: center;
.outlogin {
width: 90%;
border: none;
background: rgba(250, 41, 58, 0.808);
height:.4rem;
line-height:.4rem;
color: #fff;
margin:.2rem 0;
}
} </style>
<script>
import Header from '@/components/Header'
import Vue from 'vue'
import { Uploader } from 'vant'
import axios from '@/utils/request' Vue.use(Uploader)
export default {
components: {
Header
},
data () {
return {
flag: false,
name: '',
headimg: 'https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=188149577,2949073731&fm=26&gp=0.jpg',
userid: ''
}
},
created () {
let userid = localStorage.getItem('userid')
axios.get('headimg/getimg?userid=' + userid).then(res => {
if (res.data.code === 10018) {
// console.log(res)
if (res.data.data.length !== 0) {
this.headimg = res.data.data[0].file
}
}
})
},
methods: {
gologin () {
this.$router.push('/login')
},
afterRead (file) {
// 此时可以自行将文件上传至服务器
let userid = localStorage.getItem('userid')
axios.post('headimg/upload', {
userid: userid,
file: file.content
}).then(res => {
console.log(userid)
this.$router.go(0)
})
},
outlogin () {
localStorage.removeItem('userid')
localStorage.removeItem('username')
// localStorage.removeItem('token')
window.location.reload()
}
},
mounted () {
let username = localStorage.getItem('username')
let id = localStorage.getItem('userid')
// console.log(username)
if (username) {
this.name = username
this.userid = id
this.flag = true
} else {
this.flag = false
}
}
}
</script>

vue之头像管理思路的更多相关文章

  1. Vue之状态管理(vuex)与接口调用

    Vue之状态管理(vuex)与接口调用 一,介绍与需求 1.1,介绍 1,状态管理(vuex) Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件的状态 ...

  2. 手摸手,带你用vue实现后台管理权限系统及顶栏三级菜单显示

    手摸手,带你用vue实现后台管理权限系统及顶栏三级菜单显示 效果演示地址 项目demo展示 重要功能总结 权限功能的实现 权限路由思路: 根据用户登录的roles信息与路由中配置的roles信息进行比 ...

  3. Vue Admin - 基于 Vue & Bulma 后台管理面板

    Vue Admin 是一个基于 Vue 2.0 & Bulma 0.3 的后台管理面板(管理系统),相当于是 Vue 版本的 Bootstrap 管理系统,提供了一组通用的后台界面 UI 和组 ...

  4. 练习vue(用户管理)1

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  5. Vue + ElementUI 后台管理模板推荐

    最近学习和项目都用到了Vue和ElementUI,自己不是专业前端,搞这些UI上的东西还是有些难度,这里推荐两个Vue + ElementUI后台管理模板 vue-element-admin vue- ...

  6. vue项目接口管理,所有接口都在apis文件夹中统一管理

    参考:https://www.codercto.com/a/53432.html 在vue开发中,会涉及到很多接口的处理,当项目足够大时,就需要定义规范统一的接口,如何定义呢? 方法可能不只一种,本文 ...

  7. vue_shop(基于vue电商管理后台网站)

    vue_shop 目录 vue_shop day01 实现登录功能 项目预开发处理 Login.vue完整代码: 处理步骤: 添加element-ui的表单组件 添加第三方字体: 添加表单验证 导入a ...

  8. vue实现图书管理demo

    年后公司的项目要求用到vue.js知识,我angular没有学,node.js和react也只是了解了一点点,所以学起来比较困难.如果你想学vue.js的知识,推荐网址:http://vuejs.or ...

  9. vue创建状态管理(vuex的store机制)

    1:为什么说要是永远状态管理 在使用 Vue 框架做单页面应用时,我们时常会遇到传值,组件公用状态的问题.(子父间传值文章传送门) ,如果是简单的应用,兄弟组件之间通信还能使用 eventBus 来作 ...

  10. 转 理解vuex -- vue的状态管理模式

    转自:https://segmentfault.com/a/1190000012015742 vuex是什么? 先引用vuex官网的话: Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式 ...

随机推荐

  1. SaaS、PaaS、IaaS的区别

    我们从SaaS.PaaS.IaaS的定义.工业应用以及具体案例几方面来介绍他们之间的区别 一.定义层面的区别 SaaS.PaaS.IaaS简单的说都属于云计算服务,也就是云计算+服务. 我们对于云计算 ...

  2. echarts 画图报错 this.dom.getContext is not a function

    我给 <el-card>绑定了ref,利用$refs获取 echarts实例  const echarts1 = echarts.init(this.$refs.echarts1); 结果 ...

  3. Arthas 查询服务器内存数据

    1.打开Arthas所在位置 eg:/home 2.java -jar arthas-boot.jar 运行jar包 3.选择要执行的java jar包 eg : 1 4.执行查看命令vmtool - ...

  4. edge 浏览器部分功能

    模拟打印情况的调试

  5. 4组-Beta冲刺-5/5

    一.基本情况 队名:摸鲨鱼小队 组长博客:https://www.cnblogs.com/smallgrape/p/15608986.html github链接:https://github.com/ ...

  6. HDFS相关问题处理

    机房搬迁后datanode启动失败,报错如下: 2022-10-21 10:28:40,551 INFO org.apache.hadoop.hdfs.server.common.Storage: L ...

  7. vue+高德地图配置及添加marker

    1.首先在index.html中引入高德地图 <script type="text/javascript" src="https://webapi.amap.com ...

  8. 3html5

    <label>网址:</label><input type="url" name="" required><br> ...

  9. Docker 安装 MySQL5.7

    1.拉取数据库镜像 docker pull mysql:5.7 docker images命令查看镜像是否下载成功 docker images 2.配置mysql 创建mysql目录,用于存放mysq ...

  10. 艾思最新案例分享:塔蓝物流app-物流仓储管理系统app. app开发

    塔蓝物流app是一款物流仓储管理app:主要业务范围空运,海运,进出口货物及过境货物的运输代理,包括揽物订舱,仓储(危险品除外),包装,搬运装卸,中转,流通加工,集装箱拼装拆箱(危险品除外),结算运杂 ...