zoukankan      html  css  js  c++  java
  • element-ui 后台问题

    1.package.json 中配置 不是所有的都是 npm run dev,npm rn bulid 还要看配置文件

    npm run dev 运行开发环境

    npm run build:prod 运行生产环境 (打包)

    2.elemnt-ui如何将文件流和其他字段一起提交 

    用element-ui框架的https://element.faas.ele.me/#/zh-CN/component/upload  上传组件

    html层

      <el-form
            ref="video"
            :model="video"
            :rules="submitRules"
            label-width="120px"
          >
            <!-- prop:表单域 model 字段,要和data中保持一致,在使用 validate、resetFields 方法的情况下,该属性是必填的-->
            <el-form-item prop="video_title" label="视频名称">
              <el-input name="video_title" v-model.trim="video.video_title" />
            </el-form-item>
            <el-form-item prop="video_file" label="视频文件">
              <el-upload
                class="upload-demo"
                ref="upload"
                :action="upLoadUrl"
                :on-success="handleSuccess"
                :on-change="handleChange"
                :auto-upload="uploadStatus"
                :data="videoData" 额外的参数
                :headers="myHeaders"
                accept="video/*"
                :limit="1"
                :file-list="fileList"
                name="video_file" file文件流的name,默认为file
              >
                <el-button size="small" type="primary">点击上传</el-button>
              </el-upload>
              <a :href="video.video_link" target="_blank" v-if="video.video_link">
                <el-button type="success" size="small">视频预览 </el-button>
              </a>
    
              <div slot="tip" class="el-upload__tip">只能上传视频文件</div>
            </el-form-item>
    
            <el-form-item prop="label_id" label="标签">
              <el-select v-model="label_array" multiple placeholder="请选择">
                <el-option
                  v-for="item in tags"
                  :key="item.value"
                  :label="item.label"
                  :value="item.value"
                >
                </el-option>
              </el-select>
              <el-input
                style="position:absolute;z-index:-1;"
                v-model.trim="video.label_id"
                type="hidden"
              />
            </el-form-item>
    
          
            <el-form-item prop="is_onsale" label="是否上架">
              <el-radio-group v-model="video.is_onsale">
                <el-radio label="0">下架</el-radio>
                <el-radio label="1" checked>上架</el-radio>
              </el-radio-group>
            </el-form-item>
            <el-form-item>
              <el-button type="primary" @click="onSubmit2">提交</el-button>
              <el-button @click="onCancel">取消</el-button>
            </el-form-item>
          </el-form>
    

      

    script

    import { videoAdd, getTagList, getVideoData } from "@/api/video";
    
    import { areaName } from "@/api/area";
    import { getRegionList } from "@/api/business";
    
    export default {
      name: "add",
      data() {
        return {
    // 接口地址 用上传组件 然后将其他字段加进去
          upLoadUrl: "https://ixx.haoqianlei.com/admin/v1/video/add",
          fileList: [],
          files: "",
          uploadStatus: false,
          editVideo: false,
          videoData: {
            id: "",
            video_title: "",
            label_id: "",
            is_onsale: "",
            video_link: ""
          },
          myHeaders: {
            "X-Requested-With": "XMLHttpRequest",
            Authorization: "Bearer " + this.cookies.get("Authorization")
          },
          // 表单的对应数据
          video: {
            video_title: "",
            video_file: "",
            label_id: "",
          
            is_onsale: "1",
            video_link: ""
          },
         
          label_array: [],
          list: [],
          tags: []
        };
      },
      watch: {
        label_array(newName, oldName) {
          console.log(newName);
          if (newName.length > 0) {
            var str = "";
            newName.forEach(item => {
              str += item + ",";
            });
            this.video.label_id = str.slice(0, -1);
          }
          console.log(this.video.label_id);
        }
      },
      methods: {
        
        getList() {
          getTagList({
            username: ""
          }).then(res => {
            this.tagFormatter(res.data);
          });
        },
        loadVideo(file, fileList) {
          this.video.video_file = file;
        },
        handleRemove(file, fileList) {
          console.log(file, fileList);
          this.$confirm(`确定移除 ${file.name}?`)
            .then(() => {
              this.video.video_file = "";
            })
            .catch(() => {});
        },
        handleChange(res, file) {
          this.video.video_file = file;
        },
        handleSuccess(res) {
          this.$message(res.data);
          this.labelName = "";
          this.$refs.upload.clearFiles();
        },
        onSubmit2() {
          // this.$refs.video.validate(valid => {
    
          // if (valid) {
          if (this.video.video_title.length == 0) {
            this.$message({
              message: "请输入视频名称",
              type: "error"
            });
            return;
          }
          if (this.video.video_file == 0) {
            this.$message({
              message: "请上传视频文件",
              type: "error"
            });
            return;
          }
          if (this.video.label_id.length == 0) {
            this.$message({
              message: "请选择标签",
              type: "error"
            });
            return;
          }
          
          if (this.video.is_onsale.length == 0) {
            this.$message({
              message: "请选择上架类型",
              type: "error"
            });
            return;
          }
          this.videoData.video_title = this.video.video_title;
          this.videoData.label_id = this.video.label_id;
      
          this.videoData.is_onsale = this.video.is_onsale;
            // 上传 掉上传接口
          this.$refs.upload.submit();
          
        },
        onCancel() {
          this.$message({
            message: "取消!",
            type: "warning"
          });
    
          this.video = {
            video_title: "",
            video_file: "",
            label_id: "",
            is_onsale: ""
          };
        },
        tagFormatter(data) {
          var arr = [];
          data.forEach(item => {
            arr.push({
              value: item.id,
              label: item.label_title
            });
          });
          this.tags = arr;
        },
      
        getLabelArr(data) {
          var arr = [];
          data.forEach(item => {
            arr.push(item.id);
          });
          this.label_array = arr;
        },
      
      },
      mounted() {
        this.getList();
    
        this.getreglist();
    
        
      }
    };    
    

      3.路由拦截器  一些简单的配置

    import axios from 'axios'
    import {
      MessageBox,
      Message
    } from 'element-ui'
    import store from '@/store'
    import {
      getToken,
      setToken
    } from '@/utils/auth'
    
    
    // 创建axios实例
    const service = axios.create({
      baseURL: 'https://ixx.haoqianlei.com/admin/v1',
      // baseURL: process.env.VUE_APP_BASE_API, // url = base url + request url
      // withCredentials: true, // send cookies when cross-domain requests
      timeout: 5000 // request timeout  请求超时
    })
    
    // request interceptor request拦截器  请求拦截
    service.interceptors.request.use(
      config => {
        // do something before request is sent
        if(config.headers.authorization){
          config.headers['Authorization'] = `Bearer ${config.headers.authorization}`
         
          // commit('SET_TOKEN', config.headers.authorization)
          // 登录成功后将token存储在cookie之中
          setToken(config.headers.authorization.slice(7))
          return config
        }
        if (store.getters.token) {
          // let each request carry token
          // ['X-Token'] is a custom headers key
          // please modify it according to the actual situation
          // config.headers['token'] = getToken() // 让每个请求携带token--['X-Token']为自定义key 请根据实际情况自行修改
          // config.headers['X-Requested-With'] = 'XMLHttpRequest';
          config.headers['Authorization'] = `Bearer ${getToken()}` // 让每个请求携带token--['X-Token']为自定义key 请根据实际情况自行修改
         
          // config.headers['user-name'] = store.getters.name
        }
        return config
      },
      error => {
        // do something with request error
        // console.log(error) // for debug
        return Promise.reject(error)
      }
    )
    
    // response interceptor respone拦截器 响应拦截器
    service.interceptors.response.use(
      /**
       * If you want to get http information such as headers or status
       * Please return  response => response
       */
    
      /**
       * Determine the request status by custom code
       * Here is just an example
       * You can also judge the status by HTTP Status Code
       */
      response => {
        const res = response.data;
      
        //拦截响应,做统一处理 当token过期,接口会返回一个可用的token 前端接受以后替换当前token
        if (response.headers.authorization) {
          //设置token
          setToken(response.headers.authorization.slice(7))
        }
        // if the custom code is not 20000, it is judged as an error.
        if (res.code != 200 ) {
        // 状态码
    
          Message({
            message: res.data || 'Error',
          
            type: 'error',
            duration: 5 * 1000
          })
    
          // 50008: Illegal token; 50012: Other clients logged in; 50014: Token expired;
          // 50008:非法的token; 50012:其他客户端登录了;  50014:Token 过期了;
          // if (res.code === 422 || res.code === 401) {
          //   console.log(211)
          //   // to re-login  重新登录
          //   MessageBox.confirm('登录失效', 'Confirm logout', {
          //     confirmButtonText: 'Re-Login',
          //     cancelButtonText: 'Cancel',
          //     type: 'warning'
          //   }).then(() => {
          //     store.dispatch('user/resetToken').then(() => {
          //       // 为了重新实例化vue-router对象 避免bug
          //       location.reload()
          //       console.log(333)
          //     })
          //   })
          // }else{
          //   Message({
          //     // message: res.message || 'Error',
          //     message: 'Error',
          //     type: 'error',
          //     duration: 5 * 1000
          //   })
          // }
    
          return Promise.reject(new Error(res.message || 'Error'))
    
    
        } else {
          return res
        }
      },
      error => {
        console.log('err' + error) // for debug
        Message({
          message: error.message,
          type: 'error',
          duration: 5 * 1000
        })
        return Promise.reject(error)
      }
    )
    
    export default service
    

      4. 修改基础配置

    统一接口路径配置 vue.config.js

    main.js 也要把mock的相关注释掉 防止接口掉错

      

  • 相关阅读:
    linux c编程操作数据库(sqlite3应用)
    Silverlight-MEF-DEMO
    微软最有价值专家分享校园招聘心得体会
    C# IOCP服务器项目(学习)
    ASIHTTPRequest类库简介和使用说明
    用Python下载美国国家气候数据中心(NCDC)的气候数据
    20个大家应该知道的大数据资源
    分布式文件系统HDFS,大数据存储实战(一)
    vmware虚拟的ubuntu18.04死机,尝试关闭时关机报“虚拟机xxx繁忙”
    ubuntu下hadoop0.20.2报错/dfs/name is in an inconsistent state
  • 原文地址:https://www.cnblogs.com/GoTing/p/12242673.html
Copyright © 2011-2022 走看看