新西兰服务器

怎么使用Vue+Element做个人中心


怎么使用Vue+Element做个人中心

发布时间:2022-06-06 17:24:41 来源:高防服务器网 阅读:58 作者:iii 栏目:开发技术

这篇文章主要讲解了“怎么使用Vue+Element做个人中心”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么使用Vue+Element做个人中心”吧!

先看看效果:

后面加个路由超链接,嘿嘿~

个人空间

我们先来聊聊主要的这个玩意,也就是咱们的入口。

对应的路由是:

这里面的组件可不少,里面还有很多分组件,没写,有空我就写写。

  {        path: '/myspace',        name: 'myspace',        component: myspace,        children:[          {            path: 'showinfo',            name: 'showinfo',            component: showinfo          },          {            path: 'infoeditor',            name: 'infoeditor',            component: infoeditor,          },          {            path: 'countcontrol',            name: 'countcontrol',            component: countcontrol,          },          {            path: 'imageUp',            name: 'imageUp',            component: imageUp          },          {            path: 'privateAarticle',            name: 'privateAarticle',            component: privateAarticle,          },          {            path: 'publicArticle',            name: 'publicArticle',            component: publicArticle,          },          {            path: '',            name: 'allArticle',            component: allArticle,          },          {            path: 'columnArticle',            name: 'columnArticle',            component: columnArticle          },          {            path: 'statusArticle',            name: 'statusArticle',            component: statusArticle          },          {            path: 'mycolums',            name: 'mycolums',            component: mycolums          },          {            path: 'myjoincolums',            name: myjoincolums,            component: myjoincolums          },          {            path: 'collectionAns',            name: collectionAns,            component: collectionAns          },          {            path: 'collectionArticle',            name: collectionArticle,            component: collectionArticle          },          {            path: 'collectionColums',            name: collectionColums,            component: collectionColums          }        ]      },

个人空间导航代码如下:

<template>    <div>      <el-container >        <el-aside width="200px" >          <el-menu :default-openeds="['1']">              <el-submenu index="1">              <template slot="title">                <i class="el-icon-postcard"></i>信息修改</template>              <el-menu-item-group>                  <router-link class="alink" to="/myspace/showinfo">                  <el-menu-item index="1-1">                    基本信息                  </el-menu-item>                  </router-link>                  <router-link class="alink" to="/myspace/infoeditor">                  <el-menu-item index="1-2">                    信息修改                  </el-menu-item>                </router-link>                  <router-link class="alink" to="/myspace/imageUp">                  <el-menu-item index="1-3">                      头像修改                    </el-menu-item>                </router-link>                  <router-link class="alink" to="/myspace/countcontrol">                  <el-menu-item index="1-4">                        账号管理                    </el-menu-item>                </router-link>                  </el-menu-item-group>              </el-submenu>                <el-submenu index="2">              <template slot="title">                <i class="el-icon-postcard"></i>文章管理</template>              <el-menu-item-group>                <router-link class="alink" to="/myspace/privateAarticle">                  <el-menu-item index="2-1">                    私密文章                  </el-menu-item>                </router-link>                  <router-link class="alink" to="/myspace/publicArticle">                  <el-menu-item index="2-2">                    PUBLIC                  </el-menu-item>                </router-link>                  <router-link class="alink" to="/myspace">                  <el-menu-item index="2-3">                    全部文章                  </el-menu-item>                </router-link>                  <router-link class="alink" to="/myspace/columnArticle">                  <el-menu-item index="2-4">                    我的专栏                  </el-menu-item>                </router-link>                  <router-link class="alink" to="/myspace/statusArticle">                  <el-menu-item index="2-5">                    审核状态                  </el-menu-item>                </router-link>              </el-menu-item-group>              </el-submenu>                <el-submenu index="3">              <template slot="title">                <i class="el-icon-edit"></i>文章书写              </template>              <el-menu-item-group>                <router-link class="alink" to="/writeblog">                  <el-menu-item index="3-1">                    文章书写                  </el-menu-item>                </router-link>              </el-menu-item-group>              </el-submenu>              <el-submenu index="4">              <template slot="title">                <i class="el-icon-postcard"></i>社区</template>                <el-menu-item-group>                  <router-link class="alink" to="/myspace/myjoincolums">                  <el-menu-item index="4-1">                    我的社区                  </el-menu-item>                </router-link>                  <router-link class="alink" to="/myspace/mycolums">                  <el-menu-item index="4-2">                    我创建的社区                  </el-menu-item>                </router-link>                  </el-menu-item-group>            </el-submenu>              <el-submenu index="5">              <template slot="title">                <i class="el-icon-star-on"></i>收藏</template>                <el-menu-item-group>                  <router-link class="alink" to="/myspace/collectionAns">                  <el-menu-item index="5-1">                    问答收藏                  </el-menu-item>                </router-link>                  <router-link class="alink" to="/myspace/collectionArticle">                  <el-menu-item index="5-2">                    文章收藏                  </el-menu-item>                </router-link>                  <router-link class="alink" to="/myspace/collectionColums">                  <el-menu-item index="5-3">                    社区收藏                  </el-menu-item>                </router-link>                </el-menu-item-group>                </el-submenu>          </el-menu>        </el-aside>            <el-container          style="background-image: url(/static/logo/noticesbg.jpg);          background-repeat: no-repeat;          background-size:100% 100%;          "        >          <el-main>            <div >              <router-view></router-view>            </div>          </el-main>        </el-container>        </el-container>      </div>  </template>    <script>  export default {    name: "myspace",    data() {        return {        }    },  }  </script>    <style scoped>  .el-header {    background-color: #e5efe2;    color: #333;    line-height: 60px;  }    .el-aside {    color: #333;  }  .router-link-active {    text-decoration: none;  }    .alink{      text-decoration: none;  }  </style>

信息修改

由于每一个的组件都有一个分类,每一个分类的实现都是类似的,所以我们挑三个说说就行了,文章书写是一个超链接,会通向这儿,这个先去说过,我就不重复了。

基本信息实现

这个是展示,没什么copy组件的事儿

<template>  <div>      <div  >        <img                    src="/static/temporary/headpic.jpg"          class="image"        >      </div>      <br>    <br>    <el-descriptions :column="1" border>        <el-descriptions-item label="用户名" v-model="username" ><p class="message">{{username}}</p></el-descriptions-item>      <el-descriptions-item label="邮箱号" v-model="email" class="message"><p class="message">{{email}}</p></el-descriptions-item>      <el-descriptions-item label="白洞值" v-model="level" class="message"><p class="message">{{level}}</p></el-descriptions-item>      <el-descriptions-item label="座右铭" v-model="motto" class="message" ><p class="message">{{motto}}</p></el-descriptions-item>      <el-descriptions-item label="居住地" v-model="city" class="message"><p class="message">{{city}}</p></el-descriptions-item>      </el-descriptions>  </div>  </template>    <script>  export default {    name: "showinfo",    data(){      return{        username: "Huterox",        email: 18100000000,        motto: "除非我不想赢,否则没人能让我输",        city: "九江",        level: 9999          }    }  }  </script>    <style scoped>  .message{    width: 20em;    overflow: hidden;    text-overflow:ellipsis;    white-space: nowrap;  }  </style>

信息修改实现

这个也没啥就是这个

<template>  <div >    <el-form :model="ruleForm"             :rules="rules"             ref="ruleForm"             label-width="100px"             class="demo-dynamic"        >      <el-form-item                label="昵称修改"        prop="name"        :rules="[            { required: true, message: '请注意昵称长度在3~15个字符', trigger: 'blur' },            { min: 3, max: 15, message: '长度在 3 到 5 个字符', trigger: 'blur' }          ]"        >        <el-input v-model="ruleForm.name"></el-input>      </el-form-item>      <br>      <el-form-item label="性别" prop="region">        <el-select v-model="ruleForm.sex" placeholder="请选择性别">          <el-option label="男" value="shanghai"></el-option>          <el-option label="女" value="beijing"></el-option>        </el-select>      </el-form-item>        <el-form-item                label="城市"        prop="city"        :rules="[            { required: false, message: '请注意长度在3~20个字符', trigger: 'blur' },            { min: 3, max: 20, message: '长度在 3 到 5 个字符', trigger: 'blur' }          ]"        >        <el-input v-model="ruleForm.city"></el-input>      </el-form-item>        <el-form-item                prop="email"        label="邮箱"        :rules="[        { required: true, message: '请输入邮箱地址', trigger: 'blur' },        { type: 'email', message: '请输入正确的邮箱地址', trigger: ['blur', 'change'] }      ]"      >        <el-input v-model="ruleForm.email"></el-input>      </el-form-item>        <el-form-item                label="座右铭"        prop="motto"        :rules="[            { required: false, message: '请输入座右铭', trigger: 'blur' },            { min: 0, max: 150, message: '请注意长度不能超过150个字符', trigger: 'blur' }          ]"        >        <el-input type="textarea"  v-model="ruleForm.motto"></el-input>      </el-form-item>        <el-form-item>        <el-button type="primary" @click="submitForm('ruleForm')">提交修改</el-button>        </el-form-item>    </el-form>  </div>  </template>    <script>  export default {    name: "infoeditor",    data() {      return {        ruleForm: {          name: '',          sex: '男',          email: '',          city: '',          motto: '',          },      };    },    methods: {      submitForm(formName) {        this.$refs[formName].validate((valid) => {          if (valid) {            alert('submit!');          } else {            console.log('error submit!!');            return false;          }        });      },      }    }  </script>    <style scoped>  </style>

头像修改实现

然后是我的祖传代码,不过这次优化了一下

<template>    <div>      <div class="show">        <div class="show1" >          <img ref="showing" src="" id="showimg" >        </div>        <div class="upload">图片选择        <input multiple="multiple" id="file" ref="file"               accept=".jpg,.png"               @click="changepic(this)" type="file" name="userpic"               style="                position: absolute;                overflow: hidden;                right: 0;                top: 0;                opacity: 0;               width: 100%;               height: 32px;               "        >        </div>        <button @click="subchangepic()" >确定</button>      </div>    </div>  </template>    <script>  export default {    name: "imageUp",    data(){      return {        filename: null,        f64: null,        loadImage: ""      }    },    methods: {      changepic() {        document.getElementById('file').onchange = function () {          var imgFile = this.files[0];          var fr = new FileReader();            fr.onload = function () {            let showing = document.getElementById('showimg')            let img = fr.result;            this.f64 = img;            this.filename = imgFile.name            showing.src = img;            showing.style.height = "220px";            showing.style.width = "220px";            showing.style.borderRadius = "200px"          };          fr.readAsDataURL(imgFile);        }      },    }  }  </script>    <style scoped>    .upload{    margin-left: 20%;    width: 12%;    text-align: center;    color: white;    height: 32px;    border-radius: 3px;    background: #1E90FF;    cursor: pointer;    outline: none;    border-width: 0px;    font-size: 17px;    display:inline-block;    padding: 4px 10px;    line-height:30px;    position: relative;    text-decoration: none;  }    button {    margin-left: 70%;    width: 15%;    height: 35px;    border-width: 0px;    border-radius: 3px;    background: #1E90FF;    cursor: pointer;    outline: none;    color: white;    font-size: 17px;  }  .show{    margin: 100px auto;    width: 80%;    height: 450px;    border: 5px solid #18a0ec;    transition: all 0.9s;    border-radius: 10px;  }  .show1{    margin: 50px auto;    width: 222px;    height: 226px;    border: 5px solid #18a0ec;    transition: all 0.9s;    border-radius: 150px;  }    .show1:hover{    box-shadow: 0px 15px 30px rgba(0, 0, 0, 0.4);    margin-top: 45px;  }    .show:hover{    box-shadow: 0px 15px 30px rgba(0, 0, 0, 0.4);    margin-top: 45px;  }    .texti{    border: 1px solid #ccc;    padding: 13px 14px;    width: 30%;      font-size: 14px;    font-weight: 300;      border-radius: 5px; /* 边框半径 */    background: white; /* 背景颜色 */    cursor: pointer; /* 鼠标移入按钮范围时出现手势 */    outline: none; /* 不显示轮廓线 */  }  .texti:focus{    border-color: #1e88e1;    outline: 0;    -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);    box-shadow: inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)  }  textarea {    resize: none;    }  </style>

账号管理实现

这个其实就是修改账号,后面我想单独做大一点,所以要单独分开,例如信息验证,学历验证,专家验证啥的。

<template>  <div >    <el-form :model="ruleForm" status-icon :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm">      <el-form-item label="修改密码" prop="pass">        <el-input type="password" v-model="ruleForm.pass" autocomplete="off"></el-input>      </el-form-item>      <el-form-item label="确认修改" prop="checkPass">        <el-input type="password" v-model="ruleForm.checkPass" autocomplete="off"></el-input>      </el-form-item>      <el-form-item label="校验码:" prop="verify">          <el-input placeholder="请输入校验码:216sadasdsad21352asdas55d5465sad@#sa2d6sa5" v-model.number="ruleForm.verify"></el-input>      </el-form-item>      <el-form-item>        <el-button type="primary" @click="submitForm('ruleForm')">提交</el-button>        <el-button @click="resetForm('ruleForm')">重置</el-button>      </el-form-item>    </el-form>  </div>  </template>    <script>  export default {    name: "countcontrol",    data() {      var checkAge = (rule, value, callback) => {        if (!value) {          return callback(new Error('校验码不能为空'));        }        setTimeout(() => {          if ((value)!=="216sadasdsad21352asdas55d5465sad@#sa2d6sa5") {            callback(new Error('校验码错误'));          } else {                callback();            }        }, 1000);      };      var validatePass = (rule, value, callback) => {        if (value === '') {          callback(new Error('请输入密码'));        } else {          if(value.length<=6){            callback(new Error("密码长度不能低于6"))          }          if (this.ruleForm.checkPass !== '' ) {            this.$refs.ruleForm.validateField('checkPass');          }          callback();        }      };      var validatePass2 = (rule, value, callback) => {        if (value === '') {          callback(new Error('请再次输入密码'));        } else if (value !== this.ruleForm.pass) {          callback(new Error('两次输入密码不一致!'));        } else {          callback();        }      };      return {        ruleForm: {          pass: '',          checkPass: '',          verify: ''        },        rules: {          pass: [            { validator: validatePass, trigger: 'blur' }          ],          checkPass: [            { validator: validatePass2, trigger: 'blur' }          ],          verify: [            { validator: checkAge, trigger: 'blur' }          ]        }      };    },    methods: {      submitForm(formName) {        this.$refs[formName].validate((valid) => {          if (valid) {            alert('submit!');          } else {            console.log('error submit!!');            return false;          }        });      },      resetForm(formName) {        this.$refs[formName].resetFields();      }    }  }  </script>    <style scoped>  </style>

文章列表实现

这个部分是这样的

由于都是类似的,所以我直接把那个全部文章的代码拿出来

<template>    <div >      <br>        <br>      <div  class="main">        <el-card shadow="hover" v-for="(message,index) in Messages" :key="index">            <div >            <div  >              <img                                src="/static/temporary/headpic.jpg"                class="image"              >            </div>            <div >              <p class="message" >{{message.name}}</p>              <p  class="message"                >                {{message.info}}                </p>              <p class="message">                阅读:                <i class="el-icon-view"></i>                {{message.number}}                &nbsp;&nbsp;                收藏:                <i class="el-icon-star-off"></i>                {{message.favorite}}                &nbsp;&nbsp;                权限:                <i class="el-icon-coordinate"></i>                {{message.level}}                &nbsp;&nbsp;                  <i v-if="message.level>=2">fork:{{message.fork}}</i>              </p>              </div>              <div  style="width:18%;height: 100%;            display:inline-block;            "            >              <div >                <el-button type="warning" round >                  <i class="el-icon-delete"></i>                </el-button>                <br><br>              </div>                <div >                <el-button type="primary" round >                  <i class="el-icon-edit-outline"></i>                </el-button>                <br><br>              </div>              <p >{{message.data}}</p>            </div>            </div>          <br>        </el-card>      </div>      <br>      <div class="footer" >        <div class="block" >          <el-pagination            background            layout="total, prev, pager, next, jumper"            :total=total>          </el-pagination>        </div>      </div>      </div>    </template>    <script>  export default {    name: "allArticle",    data(){      return{        total: 999,        Messages:[          {"info":"Spring 是一个轻量级的开发框架",            "name":"Spring 5 核心原理解析",            "number": 999,"data":"2022-3-27",favorite: 999,level: 0,            "fork": 2          },          {"info":"Spring 是一个轻量级的开发框架",            "name":"Spring 5 核心原理解析",            "number": 999,"data":"2022-3-27",favorite: 999,level: 1,            "fork": 2          },          {"info":"Spring 是一个轻量级的开发框架",            "name":"Spring 5 核心原理解析",            "number": 999,"data":"2022-3-27",favorite: 999,level: 2,            "fork": 2          },          {"info":"Spring 是一个轻量级的开发框架",            "name":"Spring 5 核心原理解析",            "number": 999,"data":"2022-3-27",favorite: 999,level: 3,            "fork": 22          },          ]      }    },  }  </script>    <style scoped>  .message{    width: 25em;    overflow: hidden;    text-overflow:ellipsis;    white-space: nowrap;  }  </style>

收藏实现

然后是收藏这个也是类似的

问答收藏

<template>    <div >      <div  class="main">        <el-card shadow="hover" v-for="(message,index) in Messages" :key="index">            <div >              <div >              <p class="message" >{{message.name}}</p>              <p  class="message"                >                {{message.info}}                </p>              <br>              </div>              <div  style="width:18%;height: 100%;              display:inline-block;            "            >              <div >                <el-button type="warning" round >                  <i class="el-icon-delete"></i>                </el-button>                <br><br>              </div>              <p >{{message.date}}</p>            </div>            </div>          <br>        </el-card>      </div>      <br>      <div class="footer" >        <div class="block" >          <el-pagination            background            layout="total, prev, pager, next, jumper"            :total=total>          </el-pagination>        </div>      </div>      </div>    </template>    <script>  export default {    name: "collectionAns",    data(){      return{        total: 2,        Messages:[          {"name":"小姐姐不回你消息怎么办",            "info":"事情是这样的..................",            "date": "2022-5-1"          },          {"name":"你是有多“贱”才会舔着一个女孩不放手",            "info":"事情是这样的..................",            "date": "2022-5-1"          },        ]      }    },  }  </script>    <style scoped>  .message{    width: 30em;    overflow: hidden;    text-overflow:ellipsis;    white-space: nowrap;  }  </style>

文章收藏

<template>    <div >      <br>        <br>      <div  class="main">        <el-card shadow="hover" v-for="(message,index) in Messages" :key="index">            <div >            <div  >              <img                                src="/static/temporary/headpic.jpg"                class="image"              >            </div>            <div >              <p class="message" >{{message.name}}</p>              <p  class="message"                >                {{message.info}}                </p>              <p class="message">                阅读:                <i class="el-icon-view"></i>                {{message.number}}                &nbsp;&nbsp;                收藏:                <i class="el-icon-star-off"></i>                {{message.favorite}}                &nbsp;&nbsp;                权限:                <i class="el-icon-coordinate"></i>                {{message.level}}                &nbsp;&nbsp;                  <i v-if="message.level>=2">fork:{{message.fork}}</i>                </p>              </div>              <div  style="width:18%;height: 100%;            display:inline-block;            "            >              <div >                <el-button type="warning" round >                  <i class="el-icon-delete"></i>                </el-button>                <p >{{message.data}}</p>                <br>              </div>              </div>            </div>          <br>        </el-card>      </div>      <br>      <div class="footer" >        <div class="block" >          <el-pagination            background            layout="total, prev, pager, next, jumper"            :total=total>          </el-pagination>        </div>      </div>    </div>  </template>  <script>  export default {    name: "collectionArticle",    data(){      return{        total: 4,        Messages:[          {"info":"Spring 是一个轻量级的开发框架",            "name":"Spring 5 核心原理解析",            "number": 999,"data":"2022-3-27",favorite: 999,level: 1,            "fork": 2          },          {"info":"Spring 是一个轻量级的开发框架",            "name":"Spring 5 核心原理解析",            "number": 999,"data":"2022-3-27",favorite: 999,level: 1,            "fork": 2          },          {"info":"Spring 是一个轻量级的开发框架",            "name":"Spring 5 核心原理解析",            "number": 999,"data":"2022-3-27",favorite: 999,level: 2,            "fork": 2          },          {"info":"Spring 是一个轻量级的开发框架",            "name":"Spring 5 核心原理解析",            "number": 999,"data":"2022-3-27",favorite: 999,level: 3,            "fork": 2,          },          ]      }    },  }  </script>    <style scoped>  .message{    width: 25em;    overflow: hidden;    text-overflow:ellipsis;    white-space: nowrap;  }  </style>

感谢各位的阅读,以上就是“怎么使用Vue+Element做个人中心”的内容了,经过本文的学习后,相信大家对怎么使用Vue+Element做个人中心这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是高防服务器网,小编将为大家推送更多相关知识点的文章,欢迎关注!

[微信提示:高防服务器能助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。

[图文来源于网络,不代表本站立场,如有侵权,请联系高防服务器网删除]
[