美文网首页
SpringBoot仿制极简图床练习--前端

SpringBoot仿制极简图床练习--前端

作者: _果不其然_ | 来源:发表于2018-10-07 17:16 被阅读0次

    前后端分离开发,此文章为仿制极简图床的前端代码,不足之处,行内样式未抽离,待修正。

    目录结构

    image.png
    • Album.vue

    <template>
        <div>
          <main role="main">
            <div style="height: 46px;background: #101010">
              <div class="d-flex ">
                <a href="#" class="navbar-brand d-flex align-items-center">
                  <b-navbar-brand href="#" style="color: white;margin-left: 16px;font-size: 18px;">极简图床</b-navbar-brand>
                </a>
                <a class="navbar-brand d-flex align-items-center" style="font-size: 15px;margin-left: 14px;color: gray">首页</a>
                <a class="navbar-brand d-flex align-items-center"
                   style="font-size: 15px;margin-left: 14px;color: white">我的上传</a>
                <a class="navbar-brand d-flex align-items-center"
                   style="font-size: 15px;margin-left: 14px;color: gray">Chrome插件</a>
                <div class="navbar-brand d-flex align-items-center" style="margin-left: 820px">
                  <img src="http://p88kzenjw.bkt.clouddn.com/data.png" style="width:17px;height: 16px; ">
                  <a class="navbar-brand d-flex align-items-center" style="font-size: 15px;margin-left: 14px;color: lightgrey">七牛云</a>
                  <a class="navbar-brand d-flex align-items-center" style="font-size: 14px;margin-left: 14px;color: gray">1156939681@qq.com</a>
                  <img src="http://p88kzenjw.bkt.clouddn.com/set.png" style="width: 17px;height: 16px">
                </div>
              </div>
    
    
              <div class="navbar-brand d-flex align-items-center" style="background:white;height: 52px;padding-left: 190px;">
                <div class="navbar-brand d-flex align-items-center">
                  <img src="http://p88kzenjw.bkt.clouddn.com/left_arrow.png" style="width: 13px;height: 12px">
                  <a style="font-size: 13px;margin-left: 4px;color: gray">返回</a>
                </div>
                <div class="navbar-brand d-flex align-items-center">
                  <img src="http://p88kzenjw.bkt.clouddn.com/shangchuan.png" style="width: 18px;height: 18px">
                  <a style="font-size: 13px;margin-left: 4px;color: gray">上传</a>
                </div>
                <div class="navbar-brand d-flex align-items-center">
                  <a style="font-size: 13px;margin-left: 4px;color: gray">操作</a>
                  <img src="http://p88kzenjw.bkt.clouddn.com/next.png" style="width: 14px;height: 14px;margin-left: 4px;margin-top: 2px;">
    
                </div>
              </div>
            <div class="album py-5 bg-light">
              <div class="container">
                <div class="row">
                  <div class="col-md-4" v-for="album in albums" :key="album.id">
                    <div class="card mb-4 box-shadow">
                      <img class="card-img-top" :src="album.albumCover"/>
                      <div class="card-body">
                        <p class="card-text">{{album.albumTitle}}</p >
                        <div class="d-flex justify-content-between align-items-center">
                          <div class="btn-group">
                            <!--<button type="button" class="btn btn-sm btn-outline-secondary">查看</button>-->
                            <button type="button" class="btn btn-sm btn-outline-secondary"> <router-link :to="{ path:'/Picture',query:{id:album.id}}">查看</router-link></button>
                          </div>
                          <small class="text-muted">{{album.pictureList.length}}</small>
                        </div>
                      </div>
                    </div>
                  </div>
                </div>
              </div>
            </div>
            </div>
          </main>
        </div>
    </template>
    
    <script>
      import 'bootstrap/dist/css/bootstrap.css'
      import 'jquery/dist/jquery.min'
      import 'bootstrap/dist/js/bootstrap.min'
    
        export default {
          name: "Album",
          data: () => {
            return{
              albums : []
            }
          },
          created(){
            this.$http
              .get('http://localhost:8080/album/all')
              .then((res) => {
                this.albums = res.data;
              })
          }
        }
    </script>
    
    <style scoped>
    
    </style>
    
    • picture.vue

    <template>
      <div>
        <div style="height: 46px;background: #101010">
          <div class="d-flex ">
            <a href="#" class="navbar-brand d-flex align-items-center">
              <b-navbar-brand href="#" style="color: white;margin-left: 16px;font-size: 18px;">极简图床</b-navbar-brand>
            </a>
            <a class="navbar-brand d-flex align-items-center" style="font-size: 15px;margin-left: 14px;color: gray">首页</a>
            <a class="navbar-brand d-flex align-items-center"
               style="font-size: 15px;margin-left: 14px;color: white">我的上传</a>
            <a class="navbar-brand d-flex align-items-center"
               style="font-size: 15px;margin-left: 14px;color: gray">Chrome插件</a>
            <div class="navbar-brand d-flex align-items-center" style="margin-left: 820px">
              <img src="http://p88kzenjw.bkt.clouddn.com/data.png" style="width:17px;height: 16px; ">
              <a class="navbar-brand d-flex align-items-center" style="font-size: 15px;margin-left: 14px;color: lightgrey">七牛云</a>
              <a class="navbar-brand d-flex align-items-center" style="font-size: 14px;margin-left: 14px;color: gray">1156939681@qq.com</a>
              <img src="http://p88kzenjw.bkt.clouddn.com/set.png" style="width: 17px;height: 16px">
            </div>
          </div>
        </div>
    
    
          <div class="navbar-brand d-flex align-items-center" style="background:white;height: 52px;padding-left: 190px;">
            <div class="navbar-brand d-flex align-items-center">
              <img src="http://p88kzenjw.bkt.clouddn.com/left_arrow.png" style="width: 13px;height: 12px">
              <a style="font-size: 13px;margin-left: 4px;color: gray">返回</a>
            </div>
            <div class="navbar-brand d-flex align-items-center">
              <img src="http://p88kzenjw.bkt.clouddn.com/shangchuan.png" style="width: 18px;height: 18px">
              <a style="font-size: 13px;margin-left: 4px;color: gray">上传</a>
            </div>
            <div class="navbar-brand d-flex align-items-center">
              <a style="font-size: 13px;margin-left: 4px;color: gray">操作</a>
              <img src="http://p88kzenjw.bkt.clouddn.com/next.png" style="width: 14px;height: 14px;margin-left: 4px;margin-top: 2px;">
            </div>
          </div>
        <main role="main">
          <section class="jumbotron text-center">
            <div class="container">
              <h1 class="jumbotron-heading">{{introduce.albumTitle}}</h1>
              <p class="lead text-muted">{{introduce.albumDescription}}</p >
              <p>
                <a href=" " class="btn btn-primary my-2">查看更多</a>
              </p >
            </div>
          </section>
          <div class="album py-5 bg-light">
            <div class="container">
              <div class="row">
                <div class="col-md-3" v-for="picture in pictures" :key="picture.id">
                  <div class="card mb-4 box-shadow">
                    <img class="card-img-top" :src="picture.pictureLink"/>
                    <div class="card-body" style="padding-bottom: 0px;padding-top: 0px;display: flex;margin-right: -20px">
                      <button type="button" class="btn btn-default btn-lg" disabled="disabled"
                              style="font-size: 12px ;width: 160px;margin-left:-20px;padding-top: 10px;background:white;color:black;border:1px solid lightgrey;overflow:hidden;
                              white-space:nowrap; text-overflow:ellipsis">{{picture.pictureLink}}</button>
                      <div style="border: 1px solid lightgrey;width: 40px;height: 40px;" >
                        <img src="https://olx7tg2rm.qnssl.com/18012720.529c81b/assets/images/clippy.svg" style="width: 14px;height: 14px;margin-left: 10px;margin-top: 8px;">
                      </div>
    
                      <div style="border: 1px solid lightgrey;width: 40px;height: 40px;" >
                        <img src="http://peojfj6k8.bkt.clouddn.com/delete1.png" style="width: 12px;height: 12px;margin-left: 10px;margin-top: 8px;">
                      </div>
    
                      <div style="border: 1px solid lightgrey;width: 40px;height: 40px;" >
                        <img src="http://peojfj6k8.bkt.clouddn.com/huojian.png" style="width: 14px;height: 14px;margin-left: 10px;margin-top: 8px;">
                      </div>
                    </div>
                  </div>
                </div>
              </div>
            </div>
          </div>
        </main>
       </div>
    
    </template>
    
    <script>
      import 'bootstrap/dist/css/bootstrap.css'
      import 'jquery/dist/jquery.min'
      import 'bootstrap/dist/js/bootstrap.min'
    
        export default {
            name: "Picture.vue",
    
          data: () => {
            return{
              pictures : [],
              introduce : [] ,
            }
          },
          created(){
            this.id = this.$route.query.id;
            this.$http
              .get('http://localhost:8080/album/' + this.id)
              .then((res) => {
                this.pictures = res.data.pictureList;
                this.introduce = res.data;
              })
          }
        }
    </script>
    
    <style scoped>
    
    </style>
    
    
    • index.js

    import Vue from 'vue'
    import Router from 'vue-router'
    import Album from '@/components/Album'
    import Picture from '@/components/Picture'
    
    Vue.use(Router)
    
    export default new Router({
      routes: [
        {
          path: '/',
          name: 'Album',
          component: Album,
        },
        {
          path: '/:id',
          name: 'Picture',
          component:Picture
        }
     
      ]
    })
    
    • main.js

    import Vue from 'vue'
    import App from './App'
    import router from './router'
    
    import jquery from 'jquery'
    import bootstrap from 'bootstrap-vue'
    import axios from 'axios'
    
    
    Vue.config.productionTip = false
    Vue.use(jquery)
    Vue.use(bootstrap)
    Vue.prototype.$http= axios
    
    /* eslint-disable no-new */
    new Vue({
      el: '#app',
      router,
      components: { App },
      template: '<App/>'
    })
    
    
    • package.json

    {
      "name": "my-project",
      "version": "1.0.0",
      "description": "A Vue.js project",
      "author": "”gongjiancool <13984767@qq.com>",
      "private": true,
      "scripts": {
        "dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js",
        "start": "npm run dev",
        "build": "node build/build.js"
      },
      "dependencies": {
        "axios": "^0.18.0",
        "bootstrap": "^4.1.3",
        "bootstrap-vue": "^2.0.0-rc.11",
        "jquery": "^3.3.1",
        "vue": "^2.5.2",
        "vue-router": "^3.0.1"
      },
      "devDependencies": {
        "autoprefixer": "^7.1.2",
        "babel-core": "^6.22.1",
        "babel-helper-vue-jsx-merge-props": "^2.0.3",
        "babel-loader": "^7.1.1",
        "babel-plugin-syntax-jsx": "^6.18.0",
        "babel-plugin-transform-runtime": "^6.22.0",
        "babel-plugin-transform-vue-jsx": "^3.5.0",
        "babel-preset-env": "^1.3.2",
        "babel-preset-stage-2": "^6.22.0",
        "chalk": "^2.0.1",
        "copy-webpack-plugin": "^4.0.1",
        "css-loader": "^0.28.0",
        "extract-text-webpack-plugin": "^3.0.0",
        "file-loader": "^1.1.4",
        "friendly-errors-webpack-plugin": "^1.6.1",
        "html-webpack-plugin": "^2.30.1",
        "node-notifier": "^5.1.2",
        "optimize-css-assets-webpack-plugin": "^3.2.0",
        "ora": "^1.2.0",
        "portfinder": "^1.0.13",
        "postcss-import": "^11.0.0",
        "postcss-loader": "^2.0.8",
        "postcss-url": "^7.2.1",
        "rimraf": "^2.6.0",
        "semver": "^5.3.0",
        "shelljs": "^0.7.6",
        "uglifyjs-webpack-plugin": "^1.1.1",
        "url-loader": "^0.5.8",
        "vue-loader": "^13.3.0",
        "vue-style-loader": "^3.0.1",
        "vue-template-compiler": "^2.5.2",
        "webpack": "^3.6.0",
        "webpack-bundle-analyzer": "^2.9.0",
        "webpack-dev-server": "^2.9.1",
        "webpack-merge": "^4.1.0"
      },
      "engines": {
        "node": ">= 6.0.0",
        "npm": ">= 3.0.0"
      },
      "browserslist": [
        "> 1%",
        "last 2 versions",
        "not ie <= 8"
      ]
    }
    
    

    实现效果

    相册页面.png

    点击首页相册的详情可以进入相册内部查看完整的相册信息


    详情页.png

    相关文章

      网友评论

          本文标题:SpringBoot仿制极简图床练习--前端

          本文链接:https://www.haomeiwen.com/subject/beglaftx.html