若依管理系统学习(一)

前端部分:

以case.js为例

每个js文件都引入了request.js文件

找到该js文件

// request拦截器
service.interceptors.request.use(config => { //vue中axios请求拦截器(在请求之前进行一些配置)
  // 是否需要设置 token
  const isToken = (config.headers || {}).isToken === false//见①
  // 是否需要防止数据重复提交
  const isRepeatSubmit = (config.headers || {}).repeatSubmit === false
  if (getToken() && !isToken) {
    config.headers['Authorization'] = 'Bearer ' + getToken() // 让每个请求携带自定义token 请根据实际情况自行修改
  }
  // get请求映射params参数
//params是添加到url的请求字符串中的,一般用于get请求。
//data是添加到请求体(body)中的, 一般用于post请求。
  if (config.method === 'get' && config.params) {
    let url = config.url + '?' + tansParams(config.params);
    url = url.slice(0, -1);//截除数组最后一位 原数组改变
    config.params = {};
    config.url = url;
  }
  if (!isRepeatSubmit && (config.method === 'post' || config.method === 'put')) {
    //JSON.stringify将js对象转字符串
    const requestObj = {
      url: config.url,
      data: typeof config.data === 'object' ? JSON.stringify(config.data) : config.data,
      time: new Date().getTime()
    }
    const sessionObj = cache.session.getJSON('sessionObj')
    if (sessionObj === undefined || sessionObj === null || sessionObj === '') {
      cache.session.setJSON('sessionObj', requestObj)
    } else {
      const s_url = sessionObj.url;                  // 请求地址
      const s_data = sessionObj.data;                // 请求数据
      const s_time = sessionObj.time;                // 请求时间
      const interval = 1000;                         // 间隔时间(ms),小于此时间视为重复提交
      if (s_data === requestObj.data && requestObj.time - s_time < interval && s_url === requestObj.url) {
        const message = '数据正在处理,请勿重复提交';
        console.warn(`[${s_url}]: ` + message)
        return Promise.reject(new Error(message))
      } else {
        cache.session.setJSON('sessionObj', requestObj)
      }
    }
  }
  return config
}, error => {
    console.log(error)
    Promise.reject(error)
})

①:只有少数接口不需要携带token,比如/login,/register,而其他的大部分接口都是需要携带token的,所以作者只为这几个少数请求配置了header {isToken: false},而其他的请求没有配置header

因此看代码

// 如果请求配置了header属性,则取出isToken值(都给的false),那这里是const isToken = false === false = true,进入下面的判断后,拦截器就不会添加token
// 如果请求没有配置header属性,这里等同于 const isToken = {}.isToken = undefined === false = false,进入下面的判断后,拦截器就会加上token
const isToken = (config.headers || {}).isToken === false
if (getToken() && !isToken) {
config.headers['Authorization'] = 'Bearer ' + getToken()
}

回到case.js

// 查询用例列表
export function listCase(query) {
  return request({
    url: '/robot/case/list',
    method: 'get',
    params: query
  })
}

// 查询用例详细
export function getCase(caseId) {
  return request({
    url: '/robot/case/' + caseId,
    method: 'get'
  })
}

看element-ui部分

<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
      //①
    <el-form-item label="分组" prop="caseGroupId">
        <el-select v-model="queryParams.caseGroupId" placeholder="请选择分组" style="width: 240px">
          <el-option v-for="(item,index) in groupList" :label="item.groupName" :value="item.groupId" :key="index"/>
        </el-select>
      </el-form-item>
    //②
      <el-form-item label="用例名称" prop="caseName">
        <el-input
          v-model="queryParams.caseName"
          placeholder="请输入用例名称"
          clearable
          @keyup.enter.native="handleQuery"
        />    //@keyup.enter.native回车触发聚焦事件
      </el-form-item>
      <el-form-item label="版本名称" prop="vaseVersionName">
        <el-input
          v-model="queryParams.vaseVersionName"
          placeholder="请输入版本名称"
          clearable
          @keyup.enter.native="handleQuery"
        />
      </el-form-item>
      <el-form-item>
        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
      </el-form-item>
    </el-form>

②prop 属性是我们需要进行表单校验的时候使用的,简而言之,prop 属性让校验规则和数据匹配。

el-form-item中prop属性为caseGroupId,一般来说会在上一级添加:rules属性,并有对应的rule例子,将例子与queryParams.caseGroupId与之比较看是否对应。

export default {
  name: "Case"
}

exportexport default是ES6中导出模块中变量的语法

在创建JavaScript模块时,export 语句用于从模块中导出实时绑定的函数、对象或原始值,以便其他程序可以通过 import 语句使用它们。被导出的绑定值依然可以在本地进行修改。在使用import进行导入时,这些绑定值只能被导入模块所读取,但在export导出模块中对这些绑定值进行修改,所修改的值也会实时更新。

命名导出(export)和默认导出(export default)。能够在每一个模块中定义多个命名导出,但是只允许有一个默认导出。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值