AJ-Report项目分析(4)

2021SC@SDUSC

目录

button源码

handleQueryForm()源码

handleQueryPageList()源码


我们继续分析如下页面。因为很多组件都是可以复用的,我们通过此页面中包含组件的分析,以后分析其他页面时就会轻松很多。

 我们在AJ-Report项目源码分析(3)中已经分析完了queryFormFieds 源码以及anji-tree组件的源码,我们本文分析之后的源码。

button源码

       buttons: {
          query: {
            api: accessAuthorityList,
            permission: "authorityManage:query"
          },
          queryByPrimarykey: {
            api: accessAuthorityDetail,
            permission: "authorityManage:query"
          },
          add: {
            api: accessAuthorityAdd,
            permission: "authorityManage:insert"
          },
          delete: {
            api: accessAuthorityDeleteBatch,
            permission: "authorityManage:delete"
          },
          edit: {
            api: accessAuthorityUpdate,
            permission: "authorityManage:update"
          },
          customButton: {
            operationWidth: "150px"
          }
        },

 我们要时刻牢记上面这些都是vue组件中data()内的代码,这些东西都是我们自定义的数据。在AJ-Report项目源码分析(2)中我们已经分析了本文分析的页面是基于anji-crud 这个自定义组件的,页面源码只定义了一些数据等,核心代码在此页面源码包含的组件中。

我们不难看出上面button部分源码定义了一些按钮相关的data,api是发送给后台的url的一部分,permission用来表示这个按钮对应的操作。我们以分析上面源码中的query部分为例,首先进入anji-crud源码部分:

        <!-- 查询表单开始 -->
      <el-form ref="formSearch" :model="queryParams" 
        label-width="100px" 
        v-permission="option.buttons.query.permission">

可以看到v-permission属性的值就说页面源码中button源码部分我们自定义的值。

  <el-col :span="6" style="text-align: center">
            <el-button type="primary" @click="handleQueryForm('query')">查询</el-button>
            <el-button type="danger" @click="handleResetForm()">重置</el-button>
            <a style="margin-left: 8px" @click="handleToggleMoreSearch">
              {
   
   { queryParams.showMoreSearch == true ? '收起' : '展开' }}
              <i :class="queryParams.showMoreSearch ? 'el-icon-arrow-up' : 'el-icon-arrow-down'" />
            </a>
  </el-col>

这部分是我们的按钮源码,查询按钮定义了@click方法,我们接下来分析handleQueryForm源码

handleQueryForm()源码

    handleQueryForm(from) {
      if (from == 'query') {
        if (this.hasTreeFieldInQueryForm) {
          delete this.queryParams[this.queryFormTreeField.field]
        }
      }
    
      if (from == 'tree') {
        if (this.hasTreeFieldInQueryForm) {
          var treeVal = this.queryParams[this.queryFormTreeField.field]
          this.queryParams = {
            pageNumber: 1,
            pageSize: 10,
          }
          this.queryParams[this.queryFormTreeField.field] = treeVal
        }
      }
    
      if (
        this.isBlank(this.queryParams['order']) &&
        this.isNotBlank(this.option.buttons.query.order)
      ) {
        this.queryParams['sort'] = this.option.buttons.query.sort
        this.queryParams['order'] = this.option.buttons.query.order
      }
      this.queryParams.pageNumber = 1
      this.handleQueryPageList()
    },

此方法代码运行逻辑如下:

1. 如果form==query,就是通过点击查询按钮来查询,所以我们需要把树查询条件去掉。什么是树查询 件?就是通过点击下面截图中的“树形结构”来进行查询:

 这很好理解,毕竟我们是点击“查询”按钮来查询我们自己输入的条件。可以通过源码看到我们此次调用的是handleQueryForm(query)方法,传入的参数为query,表名会按照我们自己输入到input框中的条件来查询。

2. 如果form==tree,那就代表这次查询是一个树查询,那就把我们自己输入input框中的查询条件去掉。

3. 判断完是条件查询还是树查询之后,就开始指定查询结果的排序方式,此方式是通过data中button的自定义属性值来指定的。

4. 最后调用handleQueryPageList()方法。

handleQueryPageList()源码

我们再来看看handleQueryPageList()源码:

 async handleQueryPageList() {
      var params = this.queryParams
      // 将特殊参数值urlcode处理 var params = this.urlEncodeObject(this.queryParams, 'order,sort')
      const { data, code } = await this.option.buttons.query.api(params)
      if (code != '200') return
      this.records = data.records
      this.total = data.total
    },

这个方法是点击查询按钮后最终执行的方法,可以看到方法的修饰符是async。async作为一个关键字放到函数前面,用于表示函数一个异步函数,因为async就是异步的意思,异步函数也就意味着该函数的执行不会阻塞后面代码的执行。

方法第一行定义了一个params数组,将queryParams数组也就是我们的查询条件赋值给它。接着开始向后台发送url,如果返回状态码为200说明查询成功,并把查询到的结果赋值给了data,接着就更新数据,将data数据更新到页面中。

上面就是我们点击页面中查询按钮后调用的一系列方法。

Guess you like

Origin blog.csdn.net/qq_45835078/article/details/121013206