• 美食杰项目 -- 总结(八)


    前言:

    经过大概一周时间的兴勤劳作,美食杰项目的所有代码已经全部编写完成,功能已全部完善,这一章给当前项目做一个总结。这一次项目使用了 element-ui 框架来完成静态功能的实现。感谢大家这一直以来对我的支持。
    当前项目其他的页面代码可以在当前专栏中找到


    项目效果展示

    美食杰项目所有功能效果展示


    引入插件说明

    点击跳转至节流的官方文档:https://www.npmjs.com/package/throttle-debounce

    点击跳转至 element-ui 官方文档:https://element.eleme.cn/#/zh-CN/component/installation

    点击跳转至 axios请求 官方文档:https://www.npmjs.com/package/axios

    后台请求代码编写

    import axios from 'axios';
    
    class HttpRequest {
      constructor(options){
        this.defaults = {
          baseUrl: ''
        }
        this.defaults = Object.assign(this.defaults, options);
      }
      setConfig(){
    
      }
      interceptors(install){
        install.interceptors.request.use(
          config => {
            let token = localStorage.getItem('token');
            if (token) {  // 判断是否存在token,如果存在的话,则每个http header都加上token
              config.headers.authorization = `token ${token}`;
            }
            return config;
          },
          err => {
            return Promise.reject(err);
          }
        );
        install.interceptors.response.use(
          res => {
            const { data, status } = res;
            return data;
          },
          err => {
            return Promise.reject(err);
          }
        );
      }
      request(options){
        options = Object.assign(this.defaults, options)
        const instance = axios.create(options)
        this.interceptors(instance);
        return instance
      }
    }
    
    const request = new HttpRequest({
      baseURL: '/api'
    });
    
    const http = request.request();
    
    // 获取banner数据
    export async function getBanner(){
      // console.log(await http.get('/banner'));
      return await http.get('/banner');
    }
    
    // 获取所有属性分类
    export async function getProperty(){
      return await http.get('/menu/property');
    }
    // 获取所有菜谱分类
    export async function getClassify(){
      return await http.get('/menu/classify');
    }
    
    /**
     * 发布菜谱
     * @export
     * @param {Object} params - 需要上传的数据,参考backData
     * @returns
     */
    export async function publish(params){
      return await http.post('/menu/publish', params);
    }
    
    /**
     * 注册账号
     * @export
     * @param {Object} params - 
     * @param {Object} params.name - 用户名
     * @param {Object} params.password - 密码
     * @returns
     */
    export async function register(params){
      return await http.post('/user/create', params);
    }
    
    /**
     * 账号登录
     * @export
     * @param {Object} params - 
     * @param {string} params.name - 用户名
     * @param {string} params.password - 密码
     * @returns
     */
    export async function login(params){
      return  await http.post('/user/login', params);
    }
    
    // class : 类里面封装了axios请求相同的部分
    //  http = 实例化对象.请求 
     
    //  function(){
    //   http.get
    //  }
    //  http.post 
    
    /**
     * 账号登出
     */
    export async function login_out(){
      return await http.post('/user/login_out');
    }
    
    /**
     * 获取用户信息
     * @export
     * @param {Object} params - 
     * @param {string} [params.userId] - 用户id
     * @returns
     */
    
    export async function userInfo(params){
      return await http.post('/user/info', params);
    }
    
    /**
     * 拿到用户发布的菜谱,可做筛使用选
     * @export
     * @param {Object} [params] - 不填写,则获取所有的菜谱
     * @param {string} [params.userId] - 指定用户的菜单
     * @param {string} [params.classify] - 按照菜单分类,进行筛选
     * @param {string} [params.property] - 指定菜单属性进行筛选
     * @param {string} [params.property.craft] - 按工艺筛选
     * @param {string} [params.property.flavor] - 按口味筛选
     * @param {string} [params.property.hard] - 按难度筛选
     * @param {string} [params.property.people] - 按人数筛选
     * @param {string} [params.page] - 指定页码
     * @returns
     */
    export async function getMenus(params){
      return await http.get('/menu/query', {params});
    }
    
    /**
     * 根据菜单id,拿到菜谱的详细信息
     * @export
     * @param {Object} [params] - 
     * @param {string} [params.menuId] - 指定菜单的id
     * @returns
     */
    export async function menuInfo(params){
      return await http.get('/menu/menuInfo', {params});
    }
    
    /**
     * toggle 收藏。收藏的取消收藏;没收藏的,要收藏。
     * @export
     * @param {Object} [params] - 
     * @param {string} [params.menuId] - 指定要收藏的菜单的id
     * @returns
     */
    export async function toggleCollection(params){
      return await http.post('/user/collection', params);
    }
    /**
     * toggle 关注。关注的取消关注;没关注的,要关注。
     * @export
     * @param {Object} [params] - 
     * @param {string} [params.followUserId] - 指定要关注的用户的id
     * @returns
     */
    export async function toggleFollowing(params){
      return await http.post('/user/following', params);
    }
    
    /**
     * 获取指定用户的收藏的菜单
     * @export
     * @param {Object} [params] - 
     * @param {string} [params.userId] - 指定的用户id
     * @returns
     */
    export async function collection(params){
      return await http.get('/user/collection', {params});
    }
    
    /**
     * 获取指定用户关注的人
     * @export
     * @param {Object} [params] - 
     * @param {string} [params.userId] - 指定的用户id
     * @returns
     */
    export async function following(params){
      return await http.get('/user/following', {params});
    }
    
    /**
     * 获取指定用户的粉丝
     * @export
     * @param {Object} [params] - 
     * @param {string} [params.userId] - 指定的用户id
     * @returns
     */
    export async function fans(params){
      return await http.get('/user/fans', {params});
    }
    
    /**
     * 上传图片
     * @export
     * @param {Object} [params] - 
     * @param {string} [params.type] - product user step
     * @returns
     */
    export async function upload(params){
      return await http.post('/upload', {params});
    }
    
    /**
     * 修改用户信息
     * @export
     * @param {Object} [params] - 
     * @param {string} [params.name] - product user step
     * @param {string} [params.avatar] - product user step
     * @param {string} [params.sign] - product user step
     * @returns
     */
    export async function userEdit(params){
      return await http.post('/user/edit', params);
    }
    
    
    /**
     * 获取菜谱评论信息
     * @export
     * @param {Object} [params] - 
     * @param {string} [params.menuId] - 指定菜谱的id
     * @returns
     */
    export async function getComments(params){
      return await http.get('/menu/comment', {params});
    }
    /**
     * 提交菜谱评论信息
     * @export
     * @param {Object} [params] - 
     * @param {string} [params.menuId] - 指定评论的菜谱id
     * @param {string} [params.commentText] - 评论内容
     * @returns
     */
    export async function postComment(params){
      return await http.post('/menu/comment', params);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138
    • 139
    • 140
    • 141
    • 142
    • 143
    • 144
    • 145
    • 146
    • 147
    • 148
    • 149
    • 150
    • 151
    • 152
    • 153
    • 154
    • 155
    • 156
    • 157
    • 158
    • 159
    • 160
    • 161
    • 162
    • 163
    • 164
    • 165
    • 166
    • 167
    • 168
    • 169
    • 170
    • 171
    • 172
    • 173
    • 174
    • 175
    • 176
    • 177
    • 178
    • 179
    • 180
    • 181
    • 182
    • 183
    • 184
    • 185
    • 186
    • 187
    • 188
    • 189
    • 190
    • 191
    • 192
    • 193
    • 194
    • 195
    • 196
    • 197
    • 198
    • 199
    • 200
    • 201
    • 202
    • 203
    • 204
    • 205
    • 206
    • 207
    • 208
    • 209
    • 210
    • 211
    • 212
    • 213
    • 214
    • 215
    • 216
    • 217
    • 218
    • 219
    • 220
    • 221
    • 222
    • 223
    • 224
    • 225
    • 226
    • 227
    • 228
    • 229
    • 230
    • 231
    • 232
    • 233
    • 234
    • 235
    • 236
    • 237
    • 238
    • 239
    • 240
    • 241
    • 242
    • 243
    • 244
    • 245
    • 246
    • 247
    • 248
    • 249
    • 250
    • 251
    • 252
    • 253
    • 254

    package.json页面代码

    {
      "name": "meishijie-vue",
      "version": "0.1.0",
      "private": true,
      "scripts": {
        "serve": "vue-cli-service serve",
        "build": "vue-cli-service build"
      },
      "dependencies": {
        "axios": "^1.1.3",
        "core-js": "^3.8.3",
        "element-ui": "^2.15.10",
        "stylus": "^0.59.0",
        "throttle-debounce": "^5.0.0",
        "vue": "^2.6.14",
        "vue-router": "^3.5.1",
        "vuex": "^3.6.2"
      },
      "devDependencies": {
        "@vue/cli-plugin-babel": "~5.0.0",
        "@vue/cli-plugin-router": "~5.0.0",
        "@vue/cli-plugin-vuex": "~5.0.0",
        "@vue/cli-service": "~5.0.0",
        "sass": "^1.32.7",
        "sass-loader": "^12.0.0",
        "stylus": "^0.59.0",
        "stylus-loader": "^7.1.0",
        "vue-template-compiler": "^2.6.14"
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    main.js页面代码

    `import Vue from 'vue'
    import App from './App.vue'
    import router from './router'
    import store from './store'
    import axios from 'axios'
    import ElementUI from 'element-ui';
    import 'element-ui/lib/theme-chalk/index.css';
    
    Vue.config.productionTip = false
    Vue.prototype.$axios = axios
    Vue.use(ElementUI);
    
    new Vue({
      router,
      store,
      render: h => h(App)
    }).$mount('#app')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    总结

    以上就是 美食杰项目的总结和剩余的一些小功能,不懂得也可以在评论区里问我或私聊我询问,以后会持续发布一些新的功能,敬请关注。
    我的其他文章:https://blog.csdn.net/weixin_62897746?type=blog

  • 相关阅读:
    基于STM32单片机的蓝牙智能手环系统
    怎么把视频压缩到最小?快把这些方法收好
    Centos7安装ELK
    app小程序手机端Python爬虫实战10xpath定位方式
    C++ :设计模式实现
    redis主从复制玩法全过程笔记(redis7+版本)
    Linux安装RabbitMQ教程(文件下载地址+安装命令+ 端口开放 + 用户创建 +配置文件模板+端口修改)
    java毕业设计基于Bootstrap的家具商城系统设计mybatis+源码+调试部署+系统+数据库+lw
    .NET 云原生架构师训练营(权限系统 代码实现 Store.EntityFramework)--学习笔记
    计算机毕设(附源码)JAVA-SSM基于中职学校的校医务室管理系统
  • 原文地址:https://blog.csdn.net/weixin_62897746/article/details/128133385