文章目录
1.点击高级搜索按钮出现弹框
<!-- 操作按钮 -->
<el-row>
<el-col :span="24" class="pb15 pt5">
<el-button
type="danger"
size="mini"
style="margin-left: 10px"
plain
@click="addOrUpdateHandle()"
>新增</el-button
>
<el-button
type="primary"
size="mini"
style="margin-left: 10px"
plain
@click="search()"
>高级搜索</el-button
>
<el-button
type="primary"
size="mini"
style="margin-left: 10px"
plain
@click="sort()"
>排序</el-button
>
</el-col>
</el-row>
需要在vuer methods方法里面加上:
// 高级搜索 使弹框置为true
search() {
this.dialogFormVisible = true;
},
2.出现弹框的页面,通过js封装好相关的下拉条的条件
2.1 弹框代码
<!-- 弹窗, 高级搜索 -->
<el-dialog
v-dialogDrag
title="高级搜索"
:visible.sync="dialogFormVisible"
class="dialog"
>
<el-form :model="form">
<!-- 操作按钮 -->
<el-row>
<el-col :span="24" class="pb15 pt5">
<el-button
@click="searchAdd(form.tableData)"
type="danger"
size="mini"
style="margin-left: 10px"
plain
>新增</el-button
>
</el-col>
</el-row>
<el-table :data="form.tableData" style="width: 100%">
<el-table-column prop="field" label="栏位" width="180">
<template slot-scope="scope">
<el-select v-model="scope.row.field" placeholder="请选择">
<el-option
v-for="item in fields"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select>
</template>
</el-table-column>
<el-table-column prop="condition" label="条件" width="180">
<template slot-scope="scope">
<el-select v-model="scope.row.condition" placeholder="请选择">
<el-option
v-for="item in conditions"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select>
</template>
</el-table-column>
<el-table-column prop="searchValue" label="搜索值">
<template slot-scope="scope">
<el-input
v-model="scope.row.searchValue"
placeholder="请输入内容"
></el-input>
</template>
</el-table-column>
<el-table-column prop="relation" label="关联">
<template slot-scope="scope">
<el-select v-model="scope.row.relation" placeholder="请选择" :disabled="scope.row.relationInputShow">
<el-option label="且" value="and"></el-option>
<el-option label="或" value="or"></el-option>
</el-select>
</template>
</el-table-column>
<el-table-column align="center" label="操作">
<template slot-scope="scope">
<el-button
type="text"
size="small"
@click="deleteData(scope.row.id, scope.$index)"
>删除</el-button
>
</template>
</el-table-column>
</el-table>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button plain @click="dialogFormVisible = false">取 消</el-button>
<el-button type="danger" @click="savebtn">保 存</el-button>
</div>
</el-dialog>
2.2 细节 在高级搜索弹框页面点击新增 需要控制高级搜索的首个条例不可以编辑 ,新增按钮方法
// 高级搜索-新增
searchAdd(data) {
let newsearchObject = {
field: "", //栏位
condition: "", //条件
searchValue: "", //搜索值
relation: "and", //关联
relationInputShow:true//控制关联不可选择
};
this.form.tableData.push(newsearchObject);
// 新增首条数据,关联不可选择
if(this.form.tableData.length > 1){
data.forEach((item,index)=>{
if(index > 0){
item.relationInputShow = false
}
})
}
},
//高级搜索-删除
deleteData(id, index) {
// console.log(index);
this.form.tableData.splice(index, 1);
},
// 高级搜索-保存
savebtn() {
this.getDataList("gjcx");
},
3.条件代码
- 在vue的脚手架代码中引入
import maintainCondition from "@/api/maintainCondition";
- vue的data数据里面加上
conditions: maintainCondition.conditions, //搜索条件
高级弹框那边已经遍历这个数组 condtions.
- 在 maintainCondition.js中
conditions: [{
value: 'like',
label: '类似 like'
}, {
value: 'not like',
label: '非类似 like'
}, {
value: '=',
label: '等于='
}, {
value: '<',
label: '小于<'
}, {
value: '>',
label: '大于>'
}, {
value: '<=',
label: '小于等于<='
}, {
value: '>=',
label: '大于等于>='
}, {
value: '<>',
label: '不等于<>'
}, {
value: 'between',
label: '介于between'
}, {
value: 'not between',
label: '非介于not between'
}, {
value: 'in',
label: '于范围内in'
}, {
value: 'not in',
label: '非于范围内not in'
}],
4.高级搜索的保存代码
调用了这个方法
// 高级搜索-保存
savebtn() {
this.getDataList("gjcx");
},
// 获取数据列表
getDataList(query) {
this.$store.dispatch("loading/CHANGE_LOADING", true);
let orderList = this.form.sortTableData2;
if (query === "sort") {
orderList = this.form.sortTableData;
}
let params = {
pageNum: this.page.pageIndex,
pageSize: this.page.pageSize,
orderList,
searchConditionList: this.form.tableData,
};
this.dataList = [];
pageListApi(params)
.then((res) => {
if (query === "sort") {
// 排序条件保存
this.form.sortTableData2 = this.form.sortTableData.slice(0);
(this.fields = [
{
label: "处理状态编码",
value: "invstscde",
},
{
label: "处理状态名称",
value: "invstsnam",
},
]),
(this.form.sortTableData = []);
this.sortDialogFormVisible = false;
}
let dataList = res.data.list;
dataList.forEach((e) => {
e.disabled = true;
});
this.nums = "";
this.dataList = dataList;
this.page.totalPage = res.data.total;
if (query == "gjcx") {
this.dialogFormVisible = false;
}
this.$store.dispatch("loading/CHANGE_LOADING", false);
})
.catch(() => {});
},
后端代码接收
1. controller
package com.citicpru.clmmaint.controller.othermain;
import com.citicpru.clmmaint.biz.AdvancedSearchBiz;
import com.citicpru.clmmaint.biz.SortBiz;
import com.citicpru.clmmaint.biz.othermain.ProcessUpholdBiz;
import com.citicpru.clmwork.dto.othermain.ProcessUpholdDTO;
import com.citicpru.clmwork.entity.ProcessUphold;
import com.citicpru.clmwork.vo.AdvancedSearchVO;
import com.citicpru.clmwork.vo.SearchCondition;
import com.citicpru.clmwork.vo.Sort;
import com.citicpru.clmwork.vo.othermain.ProcessUpholdVO;
import com.github.pagehelper.PageInfo;
import com.sunline.framework.common.constant.RestCodeConstants;
import com.sunline.framework.common.context.BaseContextHandler;
import com.sunline.framework.common.msg.ObjectRestResponse;
import com.sunline.framework.common.rest.BaseController;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
/**
* 处理状态维护表 VO
*
* @author
*/
@Slf4j
@RestController
@RequestMapping("/surversUphold/processUphold")
@Api(value = "处理状态维护", tags = "处理状态维护")
public class ProcessUpholdController extends BaseController<ProcessUpholdBiz, ProcessUpholdDTO> {
@Resource
private ProcessUpholdBiz processUpholdBiz;
@Resource
private AdvancedSearchBiz advancedSearchBiz;
@Resource
private SortBiz sortBiz;
@PostMapping(value = "/findPageList")
@ApiOperation(value = "查询处理状态维护数据信息", response = ObjectRestResponse.class)
public PageInfo<ProcessUpholdVO> findDefaultPayOrderList(@ApiParam(value = "处理状态维护") @RequestBody AdvancedSearchVO advancedSearchVO) throws Exception {
List<SearchCondition> searchConditionList = advancedSearchVO.getSearchConditionList();
List<Sort> orderList = advancedSearchVO.getOrderList();
String searchStr = "";
String orderStr = "";
if(searchConditionList == null && orderList == null){
PageInfo<ProcessUpholdVO> defalut = processUpholdBiz.initPageList (advancedSearchVO);
return defalut;
}
if(searchConditionList == null){
}else {
searchStr += advancedSearchBiz.searchParamers (searchConditionList).toString ();
}
if (orderList == null){
}else {
orderStr +=sortBiz.doSort (orderList);
}
PageInfo<ProcessUpholdVO> processUpholdVO = processUpholdBiz.findPayOrderList(advancedSearchVO,searchStr,orderStr);
return processUpholdVO;
}
@ApiOperation("添加--处理状态维护")
@PostMapping(value = "/addOrUpdateBenefitgroup")
public ObjectRestResponse addOrUpdateBenefitgroup(@RequestBody ProcessUphold dto) {
ObjectRestResponse restResponse = new ObjectRestResponse();
try {
String validate = this.validate(dto);
if (StringUtils.isNotBlank(validate)) {
restResponse.setErrorMsg(validate);
return restResponse;
}
String invimtmcde = dto.getInvstscde();
String invitmnam = dto.getInvstsnam();
if (StringUtils.isBlank(invimtmcde)) {
restResponse.setErrorMsg("请检查处理状态编码,必须输入");
return restResponse;
}
if (StringUtils.isBlank(invitmnam)) {
restResponse.setErrorMsg("请检查处理状态名称,必须输入");
return restResponse;
}
String userID = BaseContextHandler.getUserID();
int res = 0;
if (dto.getId() == null) {
res = processUpholdBiz.insertPayOrder(dto,userID);
if (res > 0) {
restResponse.setSuucessMsg("新增处理状态维护数据成功");
} else {
restResponse.setSuucessMsg("处理状态维护数据不能重复,请重新输入");
restResponse.setResultCode(RestCodeConstants.EX_PARAM_VALIDATE_CODE);
}
} else {
res = processUpholdBiz.updatePayOrder(dto,userID);
if (res > 0) {
restResponse.setSuucessMsg("修改处理状态维护数据成功");
} else {
restResponse.setSuucessMsg("修改处理状态维护数据失败");
}
}
} catch (Exception e) {
restResponse.setErrorMsg("添加或修改操作添加处理状态维护数据时发生异常");
log.error("执行方法:添加或修改操作添加处理状态维护数据时发生异常:{}", e);
}
return restResponse;
}
@PostMapping(value = "/deleteById")
@ApiOperation("删除处理状态维护数据-逻辑删除")
public ObjectRestResponse deleteById(@ApiParam(value = "删除处理状态维护")@RequestBody ProcessUphold dto) {
String invstscde = dto.getInvstscde();
ObjectRestResponse restResponse = new ObjectRestResponse();
try {
String userID = BaseContextHandler.getUserID();
if(invstscde == null){
restResponse.setSuucessMsg("处理状态维护--删除数据失败,入参不能为空");
return restResponse;
}
if (invstscde != null) {
int res = 0;
res = processUpholdBiz.deleteById(invstscde, userID);
if (res > 0) {
restResponse.setSuucessMsg("处理状态维护数据-逻辑删除成功");
} else {
restResponse.setSuucessMsg("处理状态维护数据-逻辑删除失败");
}
}
} catch (Exception e) {
restResponse.setErrorMsg("删除处理状态维护数据-逻辑删除异常");
log.error("执行方法:删除处理状态维护数据-逻辑删除:{}", e);
}
return restResponse;
}
@ApiOperation("处理状态维护-按条件排序")
@PostMapping(value = "/toOrderByList")
public PageInfo<ProcessUpholdVO> toOrderByList(@ApiParam(value = "处理状态维护")@RequestBody AdvancedSearchVO advancedSearchVO) throws Exception {
List<Sort> sortList = advancedSearchVO.getOrderList();
if(CollectionUtils.isEmpty(sortList)){
return null;
}
String parStr = sortBiz.doSort(sortList);
PageInfo<ProcessUpholdVO> defaultPay = processUpholdBiz.sortByOrderCondition(advancedSearchVO,parStr);
return defaultPay;
}
}
后端对数据进行校验的,sql拼接的工具类
package com.citicpru.clmmaint.biz;
import com.citicpru.clmmaint.utils.CheckUtils;
import com.citicpru.clmmaint.utils.ConvertUtil;
import com.citicpru.clmmaint.utils.SearchConditionUtil;
import com.citicpru.clmwork.vo.SearchCondition;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import java.util.List;
/**
* 高级搜索 service
* @author
*/
@Component
public class AdvancedSearchBiz {
public StringBuffer searchParamers(List<SearchCondition> searchConditionList) throws Exception {
//select * from table where 1=1 拼上 条件(关联符号在前)
StringBuffer searchParamer = new StringBuffer();
String space = " ";
for (SearchCondition searchCondition : searchConditionList ) {
String field = ConvertUtil.doLowerCase(searchCondition.getField());
String searchValue = searchCondition.getSearchValue();
String value =ConvertUtil.toConvert(searchValue);
String searchVal;
if(CheckUtils.isNumber(value) == false){
searchVal = "'"+value+"'";
}else{
searchVal = value;
}
String condition = searchCondition.getCondition();
String relation = searchCondition.getRelation();
// = 拼接的情况
if (condition.equals(SearchConditionUtil.EQUALS)) {
searchParamer.append(space).append(relation)
.append(space).append(field)
.append(space).append(condition)
.append(space).append(searchVal).
append(space);
}
// <> 拼接的情况
if (condition.equals(SearchConditionUtil.NOT_EQUALS)) {
searchParamer.append(space).append(relation)
.append(space).append(field)
.append(space).append(condition)
.append(space).append(searchVal).
append(space);
}
// > 拼接的情况
if (condition.equals(SearchConditionUtil.GREATER_THAN)) {
searchParamer.append(space).append(relation)
.append(space).append(field)
.append(space).append(condition)
.append(space).append(searchVal).
append(space);
}
// < 拼接的情况
if (condition.equals(SearchConditionUtil.LESS_THAN)) {
searchParamer.append(space).append(relation)
.append(space).append(field)
.append(space).append(condition)
.append(space).append(searchVal).
append(space);
}
// >= 拼接的情况
if (condition.equals(SearchConditionUtil.GREATER_EQUALS)) {
searchParamer.append(space).append(relation)
.append(space).append(field)
.append(space).append(condition)
.append(space).append(searchVal).
append(space);
}
// <= 拼接的情况
if (condition.equals(SearchConditionUtil.LESS_EQUALS)) {
searchParamer.append(space).append(relation)
.append(space).append(field)
.append(space).append(condition)
.append(space).append(searchVal).
append(space);
}
// in 拼接的情况
if (condition.equals(SearchConditionUtil.IN)) {
searchParamer.append(space).append(relation)
.append(space).append(field)
.append(space).append(condition)
.append(space).append("(")
.append(space).append(CheckUtils.appendSymbol(value))
.append(space).append(") ");
}
// not in 拼接的情况
if (condition.equals(SearchConditionUtil.NOT_IN)) {
searchParamer.append(space).append(relation)
.append(space).append(field)
.append(space).append(condition)
.append(space).append("(")
.append(space).append(CheckUtils.appendSymbol(value))
.append(space).append(") ");
}
// like 拼接的情况
if (condition.equals(SearchConditionUtil.LIKE)) {
searchParamer.append(space).append(relation)
.append(space).append(field)
.append(space).append(condition)
.append(space).append("'%").append(value).append("%'").
append(space);
}
// not like 拼接的情况
if (condition.equals(SearchConditionUtil.NOT_LIKE)) {
searchParamer.append(space).append(relation)
.append(space).append(field)
.append(space).append(condition)
.append(space).append("'%").append(value).append("%'").
append(space);
}
// between 拼接的情况 between... and...
// not between 拼接的情况
if (condition.equals(SearchConditionUtil.BETWEEN)) {
String[] contentUnits = value.split(",");
if (contentUnits.length != 2) {
throw new RuntimeException("搜索值栏位必须输入两个参数且用“,”隔开");
}
String leftContentUnit = contentUnits[0];
String rightContentUnit = contentUnits[1];
if(CheckUtils.isNumber(leftContentUnit) == false){
searchParamer.append(space).append(relation)
.append(space).append(field)
.append(space).append(condition).append(space)
.append("'").append(leftContentUnit).append("'")
.append(space).append("and").append(space)
.append("'").append(rightContentUnit).append("' ");
}else {
searchParamer.append(space).append(relation)
.append(space).append(field)
.append(space).append(condition)
.append(space).append(leftContentUnit)
.append(space).append("and")
.append(space).append(rightContentUnit).
append(space);
}
}
if (condition.equals(SearchConditionUtil.NOT_BETWEEN)) {
String[] contentUnits = value.split(",");
if (contentUnits.length != 2) {
throw new RuntimeException("搜索值栏位必须输入两个参数且用“,”隔开");
}
String leftContentUnit = contentUnits[0];
String rightContentUnit = contentUnits[1];
if(CheckUtils.isNumber(leftContentUnit) == false){
searchParamer.append(space).append(relation)
.append(space).append(field)
.append(space).append(condition).append(space)
.append("'").append(leftContentUnit).append("'")
.append(space).append("and").append(space)
.append("'").append(rightContentUnit).append("' ");
}else {
searchParamer.append(space).append(relation)
.append(space).append(field)
.append(space).append(condition)
.append(space).append(leftContentUnit)
.append(space).append("and")
.append(space).append(rightContentUnit).
append(space);
}
}
}
if(!CollectionUtils.isEmpty(searchConditionList) && StringUtils.isNotBlank(searchParamer)) {
searchParamer.insert(4, "(");
searchParamer.append(")");
}
return searchParamer;
}
}
/**
* 高级搜索--工具类
* @author
*/
public class SearchConditionUtil {
/**
* 操作符 - 类似 like
*
*/
public static final String LIKE = "like";
/**
* 操作符 - 非类似 like
*
*/
public static final String NOT_LIKE = "not like";
/**
* 操作符 - 等于=
*
*/
public static final String EQUALS = "=";
/**
* 操作符 - 小于<
*
*/
public static final String LESS_THAN = "<";
/**
* 操作符 - 大于>
*
*/
public static final String GREATER_THAN = ">";
/**
* 操作符 - 小于等于
*
*/
public static final String LESS_EQUALS = "<=";
/**
* 操作符 - 大于等于
*
*/
public static final String GREATER_EQUALS = ">=";
/**
* 操作符 - 不等于
*
*/
public static final String NOT_EQUALS = "<>";
/**
* 操作符 - 介于
*
*/
public static final String BETWEEN = "between";
/**
* 操作符 - 于范围内
*
*/
public static final String IN = "in";
/**
* 操作符 - 非介于
*
*/
public static final String NOT_BETWEEN = "not between";
/**
* 操作符 - 非于范围内
*
*/
public static final String NOT_IN = "not in";
/**
* 关系符号 - 且
*
*/
public static final String RELATION_AND = "and";
/**
* 关系符号 - 或
*
* @since 1.0
*/
public static final String RELATION_OR = "or";
}
CheckUtils:
/**
* @author
*/
public class CheckUtils {
/**
* 判断字符串是否为数字
* @param string
* @return
*/
public static boolean isNumber(String string) {
if (string == null){
return false;
}
Pattern pattern = Pattern.compile("^-?\\d+(\\.\\d+)?$");
return pattern.matcher(string).matches();
}
/**
* in 或 not in 条件查询时 增加单引号在字符串左右
*/
public static final String appendSymbol(String str) {
StringBuffer resStr = new StringBuffer();
String[] tmps = str.split(",");
if(tmps.length == 1){
resStr.append("'").append(str).append("'");
return resStr.toString();
}
for (int i = 0; i < tmps.length; i++) {
if (tmps.length - i > 1) {
resStr.append("'").append(tmps[i]).append("',");
} else {
resStr.append("'").append(tmps[i]).append("'");
}
}
return resStr.toString();
}
}
1.1它的封装的搜索的类
import lombok.Data;
import java.io.Serializable;
/**
* 高级搜索 AdvancedSearch
* @author
*/
@Data
public class SearchCondition implements Serializable {
private static final long serialVersionUID = 46545654400288021L;
/**
* 栏位
*/
private String field;
/**
* 条件
*/
private String condition;
/**
* 搜寻值
*/
private String searchValue;
/**
* 关联
*/
private String relation;
}
1.2封装的排序的类
package com.citicpru.clmwork.vo;
import lombok.Data;
import java.io.Serializable;
/**
* 排序-- 条件
* @author
*/
@Data
public class Sort implements Serializable {
private static final long serialVersionUID = 44015654400289995L;
/**
* 字段名-对应的中文
*
*/
public String name;
/**
* 字段名--英文
*
*/
public String code;
/**
* 排序方式--正序或倒序
*
*/
public String toOrder;
}
2. serviceimpl 实现层
package com.citicpru.clmmaint.biz.othermain;
import com.citicpru.clmwork.entity.ProcessUphold;
import com.citicpru.clmmaint.feign.ClmBaseFeignService;
import com.citicpru.clmmaint.mapper.mysql.othermain.ProcessUpholdMapper;
import com.citicpru.clmwork.vo.AdvancedSearchVO;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.sunline.framework.common.biz.BaseBiz;
import com.sunline.framework.common.exception.BaseException;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import tk.mybatis.mapper.entity.Example;
import javax.annotation.Resource;
import java.util.Date;
import java.util.List;
/**
* 调查项目维护
*
* @author
*/
@Slf4j
@Service
public class ProcessUpholdBiz extends BaseBiz<ProcessUpholdMapper, ProcessUphold> {
@Resource
private ProcessUpholdMapper processUpholdMapper;
@Resource
private ClmBaseFeignService clmBaseFeignService;
/**
* 初始化页面查询
*
* @return
*/
public PageInfo initPageList(AdvancedSearchVO advancedSearchVO) {
//分页处理
PageHelper.startPage(advancedSearchVO.getPageNum(), advancedSearchVO.getPageSize());
List<ProcessUphold> list = processUpholdMapper.initPageList();
PageInfo<ProcessUphold> pageInfo = new PageInfo<>(list);
return pageInfo;
}
/**
* 高级搜索查询
*
* @return
*/
public PageInfo findPayOrderList(AdvancedSearchVO advancedSearchVO, String searchStr ,String orderStr) {
//分页处理
PageHelper.startPage(advancedSearchVO.getPageNum(), advancedSearchVO.getPageSize());
List<ProcessUphold> list = processUpholdMapper.findPayOrderList(searchStr,orderStr);
PageInfo<ProcessUphold> pageInfo = new PageInfo<>(list);
return pageInfo;
}
/**
* 插入数据
*
* @param vo
* @param userID
* @return
* @throws BaseException
*/
@Transactional
public int insertPayOrder(ProcessUphold vo, String userID) throws BaseException {
// 新增(自动补充表的基础字段信息:status、createId、createTime)
int res = 0;
if (verifyHandler(vo.getInvstscde())) {
ProcessUphold processUphold = new ProcessUphold();
processUphold.setInvstscde(StringUtils.trim(vo.getInvstscde().toUpperCase()));
processUphold.setInvstsnam(StringUtils.trim(vo.getInvstsnam()));
processUphold.setUsrprf(StringUtils.trim("ASGARD"));
processUphold.setJobnm(StringUtils.trim("CLM"));
processUphold.setDatime(new Date());
processUphold.setCreateId(userID);
processUphold.setCreateTime(new Date());
processUphold.setLastUpdateId(userID);
processUphold.setLastUpdateTime(new Date());
processUphold.setStatus(1);
res = processUpholdMapper.insertSelective(processUphold);
if (res > 0) {
// 处理状态维护远程调用
clmBaseFeignService.insertLchapf(processUphold);
}
}
return res;
}
/**
* 更新修改
* @return
*/
@Transactional
public int updatePayOrder(ProcessUphold vo, String userID) {
ProcessUphold processUphold = new ProcessUphold();
processUphold.setInvstscde(StringUtils.trim(vo.getInvstscde()));
processUphold.setInvstsnam(StringUtils.trim(vo.getInvstsnam()));
processUphold.setUsrprf(StringUtils.trim(vo.getUsrprf()));
processUphold.setJobnm(StringUtils.trim(vo.getJobnm()));
processUphold.setLastUpdateId(userID);
processUphold.setLastUpdateTime(new Date());
Example example = new Example(ProcessUphold.class);
Example.Criteria criteria = example.createCriteria();
criteria.andEqualTo("id", vo.getId());
int res = 0;
res = processUpholdMapper.updateByExampleSelective(processUphold,example);
if (res > 0) {
clmBaseFeignService.updateLchapf(vo);
}
return res;
}
/**
* 删除数据--逻辑删除
*
* @param invstscde
* @param userID
* @return
* @throws BaseException
*/
@Transactional
public Integer deleteById(String invstscde, String userID) throws BaseException {
//逻辑删除
int res = 0;
Example example = new Example(ProcessUphold.class);
ProcessUphold processUphold = new ProcessUphold();
Example.Criteria criteria = example.createCriteria();
criteria.andEqualTo("invstscde",invstscde);
res = processUpholdMapper.deleteByExample(example);
// 删除成功再删除旧系统的数据
if(res > 0) {
System.out.println("invstcde"+invstscde);
clmBaseFeignService.deleteLchapf(invstscde);
}
return res;
}
/**
* 排序查询
*
* @param advancedSearchVO
* @param parStr
* @return
* @throws BaseException
*/
public PageInfo sortByOrderCondition(AdvancedSearchVO advancedSearchVO, String parStr) throws BaseException {
PageHelper.startPage(advancedSearchVO.getPageNum(), advancedSearchVO.getPageSize());
List<ProcessUphold> list = processUpholdMapper.findPayOrderList(null,parStr);
PageInfo<ProcessUphold> pageInfo = new PageInfo<>(list);
return pageInfo;
}
/**
* 调查项目编码数据校验
*
* @return
*/
private boolean verifyHandler(String invstscde) {
//设置默认验证为true
boolean whether = true;
Example example = new Example(ProcessUphold.class);
Example.Criteria criteria = example.createCriteria();
criteria.andEqualTo("invstscde", invstscde);
criteria.andEqualTo("status", 1);
ProcessUphold processUphold = processUpholdMapper.selectOneByExample(example);
if (processUphold != null) {
whether = false;
}
return whether;
}
}
3.mapper层
package com.citicpru.clmmaint.mapper.mysql.othermain;
import com.citicpru.clmwork.entity.ProcessUphold;
import org.apache.ibatis.annotations.Param;
import tk.mybatis.mapper.common.Mapper;
import java.util.List;
/**
* 调查项目维护表 VO
*
* @author
*/
public interface ProcessUpholdMapper extends Mapper<ProcessUphold> {
/**
* 查询调查类型维护数据列表
* @return
*/
List<ProcessUphold> initPageList();
/**
* 查询调查类型维护数据列表
* @param searchStr
* @param orderStr
* @return
*/
List<ProcessUphold> findPayOrderList(@Param("searchStr") String searchStr, @Param("orderStr") String orderStr);
/**
* 删除数据--逻辑删除单条操作
* @param id
* @param userid
* @return
*/
int deleteById(@Param("id") Integer id,@Param("userid")String userid);
/**
* 更新数据
* @param ProcessUphold
* @return
*/
int updateProcessProject(ProcessUphold ProcessUphold);
/**
* 插入数据
* @param ProcessUphold
* @return
*/
int insertProcessProject(ProcessUphold ProcessUphold);
}
4.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.citicpru.clmmaint.mapper.mysql.othermain.ProcessUpholdMapper">
<!-- 可根据自己的需求,是否要使用 -->
<resultMap type="com.citicpru.clmwork.entity.ProcessUphold" id="processUpholdMap">
<result property="id" column="id"/>
<result property="invstscde" column="invstscde"/>
<result property="invstsnam" column="invstsnam"/>
<result property="usrprf" column="usrprf"/>
<result property="jobnm" column="jobnm"/>
<result property="datime" column="datime"/>
<result property="status" column="status"/>
<result property="createId" column="create_id"/>
<result property="createTime" column="create_time"/>
<result property="lastUpdateId" column="last_update_id"/>
<result property="lastUpdateTime" column="last_update_time"/>
</resultMap>
<sql id="Base_SurveyProject_List_Field" >
id,invstscde, invstsnam,usrprf,jobnm,datime,
status, create_id, create_time, last_update_id, last_update_time
</sql>
<!--查询列表所有数据信息-->
<select id="initPageList" resultMap="processUpholdMap">
SELECT
<include refid="Base_SurveyProject_List_Field" />
FROM clm_invest_lcha
WHERE 1=1
AND status = 1
</select>
<!--查询列表所有数据信息-->
<select id="findPayOrderList" resultMap="processUpholdMap" parameterType="String">
SELECT
<include refid="Base_SurveyProject_List_Field" />
FROM clm_invest_lcha
WHERE status = 1
<if test="searchStr != null and searchStr != '' "><![CDATA[ ${searchStr} ]]></if>
<if test="orderStr != null and orderStr != '' "><![CDATA[ ${orderStr} ]]></if>
</select>
<!--插入数据-->
<insert id="insertProcessProject" parameterType="com.citicpru.clmwork.entity.ProcessUphold">
insert into clm_invest_lcha (
<if test="invstscde != null and invstscde != '' ">invstscde,</if>
<if test="invstsnam != null and invstsnam != '' ">invstsnam,</if>
<if test="status != null and status != '' ">status,</if>
<if test="createId != null and createId != '' ">create_id,</if>
<if test="lastUpdateId != null and lastUpdateId != '' ">last_update_id,</if>
create_time,
last_update_time
)values(
<if test="invstscde != null and invstscde != '' ">#{invstscde},</if>
<if test="invstsnam != null and invstsnam != '' ">#{invstsnam},</if>
<if test="status != null and status != '' ">#{status},</if>
<if test="createId != null and createId != '' ">#{createId},</if>
<if test="lastUpdateId != null and lastUpdateId != '' ">#{lastUpdateId},</if>
sysdate(),
sysdate()
)
</insert>
<!-- 更新数据 -->
<update id="updateProcessProject" parameterType="com.citicpru.clmwork.entity.ProcessUphold">
update clm_invest_lcha
<set>
<if test="invstscde != null and invstscde != ''">invstscde = #{invstscde},</if>
<if test="invstsnam != null and invstsnam != ''">invstsnam = #{invstsnam},</if>
last_update_time = sysdate()
</set>
where id = #{id}
</update>
<!--删除单条数据-->
<delete id="deleteById">
update clm_invest_lcha
<set>
status='0',
last_update_id = #{userid},
last_update_time = sysdate()
</set>
where id = #{id}
</delete>
<!--批量删除多条数据-->
<delete id="deleteByIds" parameterType="java.util.Map">
update clm_invest_lcha
set status = '0'
set last_update_id = #{userid}
set last_update_time = sysdate()
where id in
<foreach collection="array" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</delete>
</mapper>
前端的全部代码
<template>
<!-- 处理状态维护 -->
<div class="fillcontain">
<div class="contain">
<!-- 操作按钮 -->
<el-row>
<el-col :span="24" class="pb15 pt5">
<el-button
type="danger"
size="mini"
style="margin-left: 10px"
plain
@click="addOrUpdateHandle()"
>新增</el-button
>
<el-button
type="primary"
size="mini"
style="margin-left: 10px"
plain
@click="search()"
>高级搜索</el-button
>
<el-button
type="primary"
size="mini"
style="margin-left: 10px"
plain
@click="sort()"
>排序</el-button
>
</el-col>
</el-row>
<!-- 查询结果列表 -->
<div class="table_container">
<!-- 列表 -->
<el-table
ref="multipleTable"
:data="dataList"
tooltip-effect="dark"
style="width: 100%"
@selection-change="handleSelectionChange"
>
<el-table-column prop="invstscde" label="处理状态编码" width="50">
<template slot-scope="scope">
<el-input
v-if="!scope.row.disabled"
v-model="dataList[scope.$index].invstscde"
placeholder="请输入内容"
:disabled="invimtmcdeInputShow"
></el-input>
<span v-else>{{ scope.row.invstscde || "--" }}</span>
</template>
</el-table-column>
<el-table-column prop="invstsnam" label="处理状态名称" width="50">
<template slot-scope="scope">
<el-input
v-if="!scope.row.disabled"
v-model="dataList[scope.$index].invstsnam"
placeholder="请输入内容"
></el-input>
<span v-else>{{ scope.row.invstsnam || "--" }}</span>
</template>
</el-table-column>
<!-- 操作 -->
<el-table-column label="操作" width="20">
<template slot-scope="scope">
<el-button
v-if="scope.row.disabled"
type="text"
size="small"
@click="copyHandle(scope.row)"
>复制</el-button
>
<el-button
v-if="scope.row.disabled"
type="text"
size="small"
@click="UpdateHandle(scope.row)"
>修改</el-button
>
<el-button
type="text"
size="small"
@click="saveHandle(scope.row, scope.$index, scope.row.id)"
v-if="!scope.row.disabled"
>保存</el-button
>
<el-button
type="text"
size="small"
@click="deleteHandle(scope.row, scope.$index)"
>删除</el-button
>
</template>
</el-table-column>
</el-table>
<!-- show-overflow-tooltip -->
<!-- 分页 -->
<el-row>
<el-col :span="24">
<div class="pagination">
<!-- 分页 -->
<el-pagination
background
@size-change="sizeChangeHandle"
@current-change="currentChangeHandle"
:current-page="page.pageIndex"
:page-sizes="[10, 20, 50, 100]"
:page-size="page.pageSize"
:total="page.totalPage"
layout="total, sizes, prev, pager, next, jumper"
>
</el-pagination>
</div>
</el-col>
</el-row>
</div>
</div>
<!-- 弹窗, 高级搜索 -->
<el-dialog
v-dialogDrag
title="高级搜索"
:visible.sync="dialogFormVisible"
class="dialog"
>
<el-form :model="form">
<!-- 操作按钮 -->
<el-row>
<el-col :span="24" class="pb15 pt5">
<el-button
@click="searchAdd(form.tableData)"
type="danger"
size="mini"
style="margin-left: 10px"
plain
>新增</el-button
>
</el-col>
</el-row>
<el-table :data="form.tableData" style="width: 100%">
<el-table-column prop="field" label="栏位" width="180">
<template slot-scope="scope">
<el-select v-model="scope.row.field" placeholder="请选择">
<el-option
v-for="item in fields"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select>
</template>
</el-table-column>
<el-table-column prop="condition" label="条件" width="180">
<template slot-scope="scope">
<el-select v-model="scope.row.condition" placeholder="请选择">
<el-option
v-for="item in conditions"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select>
</template>
</el-table-column>
<el-table-column prop="searchValue" label="搜索值">
<template slot-scope="scope">
<el-input
v-model="scope.row.searchValue"
placeholder="请输入内容"
></el-input>
</template>
</el-table-column>
<el-table-column prop="relation" label="关联">
<template slot-scope="scope">
<el-select v-model="scope.row.relation" placeholder="请选择" :disabled="scope.row.relationInputShow">
<el-option label="且" value="and"></el-option>
<el-option label="或" value="or"></el-option>
</el-select>
</template>
</el-table-column>
<el-table-column align="center" label="操作">
<template slot-scope="scope">
<el-button
type="text"
size="small"
@click="deleteData(scope.row.id, scope.$index)"
>删除</el-button
>
</template>
</el-table-column>
</el-table>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button plain @click="dialogFormVisible = false">取 消</el-button>
<el-button type="danger" @click="savebtn">保 存</el-button>
</div>
</el-dialog>
<!-- 弹窗, 排序 -->
<el-dialog
v-dialogDrag
title="排序"
:visible.sync="sortDialogFormVisible"
class="dialog"
>
<el-row>
<el-col :span="8">
<select style="width: 80%" class="checkListBox" multiple>
<option
class="option"
v-for="(item, index) in fields"
:key="item.index"
:label="item.label"
:value="item.value"
@click="moveOption(item, index)"
>
{{ item }}
</option>
</select>
</el-col>
<el-col :span="16">
<el-form :model="form">
<el-table :data="form.sortTableData" style="width: 100%">
<el-table-column prop="name" label="排序字段">
<template slot-scope="scope">
<el-input
v-model="scope.row.name"
placeholder="请输入内容"
></el-input>
</template>
</el-table-column>
<el-table-column prop="toOrder" label="排序方式">
<template slot-scope="scope">
<el-select v-model="scope.row.toOrder" placeholder="请选择">
<el-option label="正序" value="ASC"></el-option>
<el-option label="逆序" value="DESC"></el-option>
</el-select>
</template>
</el-table-column>
<el-table-column align="center" label="操作">
<template slot-scope="scope">
<el-button
type="text"
size="small"
@click="sortDel(scope.row, scope.$index)"
>删除</el-button
>
</template>
</el-table-column>
</el-table>
</el-form>
</el-col>
</el-row>
<div slot="footer" class="dialog-footer">
<el-button plain @click="sortDialogFormVisible = false"
>取 消</el-button
>
<el-button type="danger" @click="sortSavebtn">保 存</el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import {
// pageList,
// saveOrUpdate,
// del,
pageListApi,
delpageListApi,
addpageListApi,
toOrderByListApi,
} from "@/api/sysSetting/othermian/surversUphold/processUphold"; // 掉接口
import maintainCondition from "@/api/maintainCondition";
export default {
data() {
return {
// 列表数据
dataList: [],
// 公共数据
commonData: {
id: "",
invstscde: "", // 处理状态编码,
invstsnam: "", // 处理状态名称
},
conditions: maintainCondition.conditions, //搜索条件
form: {
tableData: [
//高级搜索
{
field: "", //栏位
condition: "", //条件
searchValue: "", //搜索值
relation: "", //关联
},
],
//排序
sortTableData: [],
// 排序成功后
sortTableData2: [],
},
// checkList: ["排序字段1"],
// 排序滑动框值
fields: [
{
label: "处理状态编码",
value: "invstscde",
},
{
label: "处理状态名称",
value: "invstsnam",
},
],
dialogFormVisible: false, //高级搜索弹框显示隐藏
sortDialogFormVisible: false, //排序搜索弹框显示隐藏
invimtmcdeInputShow: true, //处理状态编码维护编码控制
nums: "", //控制新增按钮只能新增一个
page: {
pageIndex: 1,
pageSize: 10,
totalPage: 0,
},
};
},
components: {},
//
created() {
this.getDataList();
},
methods: {
// 获取数据列表
getDataList(query) {
this.$store.dispatch("loading/CHANGE_LOADING", true);
let orderList = this.form.sortTableData2;
if (query === "sort") {
orderList = this.form.sortTableData;
}
let params = {
pageNum: this.page.pageIndex,
pageSize: this.page.pageSize,
orderList,
searchConditionList: this.form.tableData,
};
this.dataList = [];
pageListApi(params)
.then((res) => {
if (query === "sort") {
// 排序条件保存
this.form.sortTableData2 = this.form.sortTableData.slice(0);
(this.fields = [
{
label: "处理状态编码",
value: "invstscde",
},
{
label: "处理状态名称",
value: "invstsnam",
},
]),
(this.form.sortTableData = []);
this.sortDialogFormVisible = false;
}
let dataList = res.data.list;
dataList.forEach((e) => {
e.disabled = true;
});
this.nums = "";
this.dataList = dataList;
this.page.totalPage = res.data.total;
if (query == "gjcx") {
this.dialogFormVisible = false;
}
this.$store.dispatch("loading/CHANGE_LOADING", false);
})
.catch(() => {});
},
// 列表数据选择
toggleSelection(rows) {
if (rows) {
rows.forEach((row) => {
this.$refs.multipleTable.toggleRowSelection(row);
});
} else {
this.$refs.multipleTable.clearSelection();
}
},
handleSelectionChange(val) {
this.multipleSelection = val;
},
// 每页数
sizeChangeHandle(val) {
this.page.pageSize = val;
this.page.pageIndex = 1;
this.getDataList();
},
// 当前页
currentChangeHandle(val) {
this.page.pageIndex = val;
this.getDataList();
},
// 前往末页
toLastPage() {
let max = Math.ceil(this.tablePage.totalResult / this.tablePage.pageSize);
this.handleCurrentChange(max);
},
// 高级搜索
search() {
this.dialogFormVisible = true;
},
// 高级搜索-新增
searchAdd(data) {
let newsearchObject = {
field: "", //栏位
condition: "", //条件
searchValue: "", //搜索值
relation: "and", //关联
relationInputShow:true//控制关联不可选择
};
this.form.tableData.push(newsearchObject);
// 新增首条数据,关联不可选择
if(this.form.tableData.length > 1){
data.forEach((item,index)=>{
if(index > 0){
item.relationInputShow = false
}
})
}
},
//高级搜索-删除
deleteData(id, index) {
// console.log(index);
this.form.tableData.splice(index, 1);
},
// 高级搜索-保存
savebtn() {
this.getDataList("gjcx");
},
// 排序start-------------
// 排序弹框显示
sort() {
this.sortDialogFormVisible = true;
},
// 排序删除
sortDel(row, i) {
this.form.sortTableData.splice(i, 1);
let newSortObj = {
label: row.name,
value: row.code,
};
this.fields.push(newSortObj);
},
//排序-滑动框
moveOption(val, index) {
this.fields.splice(index, 1);
let newSortTable = {
name: val.label,
code: val.value,
toOrder: "ASC", //正序倒序
};
this.form.sortTableData.push(newSortTable);
},
//排序-保存
sortSavebtn() {
// 关闭弹框
this.getDataList("sort");
},
// 排序end-------------
// 公共处理状态编码段-复制、修改
commenFn(row) {
let copyObj = {
invstscde: row.invstscde, // 处理状态编码,
invstsnam: row.invstsnam, // 处理状态名称
};
this.commonData = copyObj;
this.dataList.push(this.commonData);
this.commonData = {};
},
// 复制
copyHandle(row) {
// 功能代码
// this.commenFn(row);
this.invimtmcdeInputShow=false;
this.nums++;
if (this.nums < 5) {
this.commenFn(row);
}
},
// 修改功能
UpdateHandle(row) {
// 功能处理状态编码
row.disabled = false;
},
// 新增按钮
addOrUpdateHandle() {
this.invimtmcdeInputShow = false;
this.dataList.push(this.commonData);
},
// 保存
saveHandle(row, index, id) {
let reg = /^[a-zA-Z]/;
// // 校验处理状态编码首位为字母
if (row.invstscde.trim().length > 1) {
this.$message({
message: "请输入一位字母的编码!",
type: "warning",
showClose: true,
});
return false;
}
// 校验处理状态名称不能为空
if (row.invstsnam.trim() == '') {
this.$message({
message: "请输入处理状态名称",
type: "warning",
showClose: true,
duration:3000
});
return false;
}
if (row.invstsnam.trim().length >3) {
this.$message({
message: "处理状态名称不可以超过三位",
type: "warning",
showClose: true,
duration: 3000,
});
return false;
}
// 处理状态名称特殊字符校验
var patrn =
/[`~!@#$%^&*()_\-+=<>?:"{}|,.\/;'\\[\]·~!@#¥%……&*()——\-+={}|《》?:“”【】、;‘',。、]/im;
if (patrn.test(row.invstsnam.trim())) {
this.$message({
message: "输入的处理状态名称含有特殊字符!",
type: "warning",
showClose: true,
});
return false;
}
let newrow = { ...row, disabled: true };
addpageListApi(newrow).then((res) => {
if (res.resultCode === 0) {
this.getDataList();
this.$message({
message: res.resultMsg,
type: "success",
showClose: true,
});
} else {
this.$message({
message: res.resultMsg,
type: "warning",
showClose: true,
});
}
});
this.dataList.splice(index, 1);
this.commonData = {};
// this.dataList.push(newrow);
// console.log(this.dataList);
},
// 批量导入
batchImport(id) {
// 功能处理状态编码
},
// 枚举转换
transformationFun(type, status) {
return transformation.transformation(type, status);
},
// 删除
deleteHandle(row, index) {
this.nums = "";
if (row === undefined) {
this.dataList.splice(index, 1);
return;
}
let newrow = { ...row, disabled: true };
this.$confirm(`确定进行删除操作?`, "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
})
.then(() => {
delpageListApi(newrow).then((res) => {
if (res.resultCode === 0) {
this.$message({
message: "删除成功",
type: "success",
duration: 2000,
onClose: () => {
this.getDataList();
},
});
} else {
this.$message.error(res.resultMsg);
}
});
})
.catch(() => {});
},
},
};
</script>
<style lang="less">
.table_container .el-table__body-wrapper {
overflow-x: auto !important;
}
.dialog .el-dialog__body {
border-top: 1px solid #eeeeee;
}
.dialog .el-button.is-active,
.dialog .el-button.is-plain:active,
.dialog .el-button.is-plain:hover {
border-color: #f56c6c !important;
color: #f56c6c !important;
}
// 排序按钮样式
.checkListBox {
border: 1px solid #eee;
padding: 0px;
margin-right: 30px;
height: 300px;
overflow-y: auto;
text-align: center;
// .el-checkbox {
// display: block;
// margin-bottom: 10px;
// width: 100%;
// }
.option {
padding-top: 20px;
line-height: 48px !important;
height: 38px !important;
border-bottom: 1px solid #eee;
}
}
// 列表文字居中
.el-table td,
.el-table th {
text-align: center;
}
// 消息提示样式
.el-message--success {
background-color: #f0f9eb !important;
border-color: #e4ffd6 !important;
}
.el-message__content {
color: #90c973 !important;
}
.el-icon-success {
color: #6cad4c !important;
}
// 新增按钮input文字居中
.el-input__inner {
text-align: center;
}
</style>
注意后端的接收高级搜索的条件
<if test="searchStr != null and searchStr != '' "><![CDATA[ ${searchStr} ]]></if>
<if test="orderStr != null and orderStr != '' "><![CDATA[ ${orderStr} ]]></if>