在刚使用若依框架的时候需要使用时间范围选择器,原本想老老实实使用两个字段进行数据传输,无意观看了下若依框架后台参数传输是以map形式进行的,由此产生感想,并最终实现,记录一番。

 我是在用户管理里面进行编辑

后台:因为后台需要加一个参数用来接收,而原来的框架的实体类SysUser继承了BaseEntity这个实体类这个类里面有专门的params,我们需要模仿写一个类似的,BaseEntity类:

@JsonInclude(JsonInclude.Include.NON_EMPTY)
@TableField(exist = false)
private Map<String, Object> params;
public Map<String, Object> getParams()
{
    if (params == null)
    {
        params = new HashMap<>();
    }
    return params;
}

public void setParams(Map<String, Object> params)
{
    this.params = params;
}

我的SysUser编辑如下:

/** 请求参数 */
@JsonInclude(JsonInclude.Include.NON_EMPTY)
@TableField(exist = false)
private Map<String, Object> birthdayDateRange;
public Map<String, Object> getBirthdayDateRange() {
    return birthdayDateRange;
}

public void setBirthdayDateRange(Map<String, Object> birthdayDateRange) {
    this.birthdayDateRange = birthdayDateRange;
}

这样参数接收就写好了,然后看看前台,和后台一样模仿,搜索条件中

<el-form-item label="创建时间">

                        <el-date-picker v-model="dateRange" style="width: 240px" value-format="yyyy-MM-dd" type="daterange"

                            range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>

                    </el-form-item>

我们写一个我们自己的

<el-form-item label="生日">

                        <el-date-picker v-model="birthdayDateRange" style="width: 240px"

                            value-format="yyyy-MM-dd" type="daterange" range-separator="-" start-placeholder="开始日期"

                            end-placeholder="结束日期"></el-date-picker>

                    </el-form-item>

然后ctrl+f,直接搜索dateRange,发现有四个,照着写

/** 重置按钮操作 */

        resetQuery() {

            this.dateRange = [];

            this.birthdayDateRange = [];

            this.resetForm("queryForm");

            this.queryParams.deptId = undefined;

            this.$refs.tree.setCurrentKey(null);

            this.handleQuery();

        },

data中

// 日期范围

            dateRange: [],

            // 生日范围

            birthdayDateRange: [],

/** 查询用户列表 */

        getList() {

            this.loading = true;

            listUser(this.addDateRange(this.queryParams, this.dateRange)).then(response => {

                this.userList = response.rows;

                this.total = response.total;

                this.loading = false;

            }

            );

        },

重点来了,他这里有一个方法对参数进行重构,找到他,发现是在ruoyi.js中

// 添加日期范围

export function addDateRange(params, dateRange, propName) {

  let search = params;

  search.params = typeof (search.params) === 'object' && search.params !== null && !Array.isArray(search.params) ? search.params : {};

  dateRange = Array.isArray(dateRange) ? dateRange : [];

  if (typeof (propName) === 'undefined') {

    search.params['beginTime'] = dateRange[0];

    search.params['endTime'] = dateRange[1];

  } else {

    search.params['begin' + propName] = dateRange[0];

    search.params['end' + propName] = dateRange[1];

  }

  return search;

}

我的想法是每次参数名称也不一致,而且用的也不多,倒不如直接在组件内直接定义,重构如下

/** 查询用户列表 */

        getList() {

            this.loading = true;

            listUser(this.addDateRange(this.queryParams, this.dateRange)).then(response => {

                this.userList = response.rows;

                this.total = response.total;

                this.loading = false;

            }

            );

        },

addDateRange(params, dateRange,birthdayDateRange) {

            let search = params;

            search.params = typeof (search.params) === 'object' && search.params !== null && !Array.isArray(search.params) ? search.params : {};

            search.birthdayDateRange = typeof (search.birthdayDateRange) === 'object' && search.birthdayDateRange !== null && !Array.isArray(search.birthdayDateRange) ? search.birthdayDateRange : {};

            dateRange = Array.isArray(dateRange) ? dateRange : [];

            birthdayDateRange = Array.isArray(birthdayDateRange) ? birthdayDateRange : [];

            search.params['beginTime'] = dateRange[0];

            search.params['endTime'] = dateRange[1];

           

       

            search.birthdayDateRange['beginTime'] = birthdayDateRange[0];

            search.birthdayDateRange['endTime'] = birthdayDateRange[1];

            return search;

        },

其中每句话都要复制一遍,亲测都有作用不能省。

然后数据映射到后台,进行mapper修改

<if test="params.beginTime != null and params.beginTime != ''"><!-- 开始时间检索 -->
   AND date_format(u.create_time,'%y%m%d') &gt;= date_format(#{params.beginTime},'%y%m%d')
</if>

<if test="params.endTime != null and params.endTime != ''"><!-- 结束时间检索 -->
   AND date_format(u.create_time,'%y%m%d') &lt;= date_format(#{params.endTime},'%y%m%d')
</if>

<if test="birthdayDateRange !=null and birthdayDateRange.beginTime != null and birthdayDateRange.beginTime != ''"><!-- 开始时间检索 -->
   AND date_format(u.birthday,'%y%m%d') &gt;= date_format(#{birthdayDateRange.beginTime},'%y%m%d')
</if>

<if test="birthdayDateRange !=null and birthdayDateRange.endTime != null and birthdayDateRange.endTime != ''"><!-- 结束时间检索 -->
   AND date_format(u.birthday,'%y%m%d') &lt;= date_format(#{birthdayDateRange.endTime},'%y%m%d')
</if>

这里笔者也没发现框架为什么不用做对象空判断,猜测和下面的这个数据过滤有关,但没有研究。

<!-- 数据范围过滤 -->
${params.dataScope}

有问题评论区欢迎留言,也欢迎交流最后的数据过滤。

Logo

快速构建 Web 应用程序

更多推荐