暂存修改
This commit is contained in:
@@ -10,11 +10,9 @@ import java.util.concurrent.BlockingQueue;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
import org.apache.commons.collections.CollectionUtils;
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.apache.shiro.authz.annotation.RequiresPermissions;
|
||||
import org.jets3t.service.ServiceException;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.ui.Model;
|
||||
@@ -30,20 +28,15 @@ import com.beust.jcommander.internal.Lists;
|
||||
import com.nis.domain.FunctionRegionDict;
|
||||
import com.nis.domain.FunctionServiceDict;
|
||||
import com.nis.domain.Page;
|
||||
import com.nis.domain.basics.AsnGroupInfo;
|
||||
import com.nis.domain.basics.IpCommCfg;
|
||||
import com.nis.domain.basics.PolicyGroupInfo;
|
||||
import com.nis.domain.configuration.BaseCfg;
|
||||
import com.nis.domain.configuration.BaseIpCfg;
|
||||
import com.nis.domain.configuration.CfgIndexInfo;
|
||||
import com.nis.domain.configuration.IpPortCfg;
|
||||
import com.nis.domain.configuration.template.IpCommCfgTemplate;
|
||||
import com.nis.exceptions.MaatConvertException;
|
||||
import com.nis.util.ConfigServiceUtil;
|
||||
import com.nis.util.Constants;
|
||||
import com.nis.util.DictUtils;
|
||||
import com.nis.util.Reflections;
|
||||
import com.nis.util.ServiceConfigTemplateUtil;
|
||||
import com.nis.util.StringUtil;
|
||||
import com.nis.util.excel.ImportBigExcel;
|
||||
import com.nis.web.controller.BaseController;
|
||||
@@ -131,46 +124,46 @@ public class IpCommGroupController extends BaseController {
|
||||
return "redirect:" + adminPath + "/basics/ip/list?functionId=" + cfg.getFunctionId();
|
||||
}
|
||||
|
||||
@RequestMapping(value = { "/audit" })
|
||||
@RequiresPermissions(value = { "ip:common:config" })
|
||||
public String audit(Model model, @ModelAttribute("cfg") IpCommCfg cfg, Integer isAudit, Integer isValid,
|
||||
String ids, Integer functionId, HttpServletRequest request, HttpServletResponse response,
|
||||
RedirectAttributes redirectAttributes) {
|
||||
// 选中配置审核
|
||||
if (!StringUtil.isEmpty(ids)) {
|
||||
List<IpCommCfg> ipGroupCfgs = ipCommGroupCfgService.getByIds(ids);
|
||||
List<IpCommCfg> temp = Lists.newArrayList();
|
||||
try {
|
||||
ipCommGroupCfgService.audit(ipGroupCfgs, isAudit, isValid);
|
||||
} catch (Exception e) {
|
||||
logger.error("审核失败", e);
|
||||
addMessage(redirectAttributes, "error", "audit_failed");
|
||||
} finally {
|
||||
temp.clear();
|
||||
}
|
||||
return "redirect:" + adminPath + "/basics/ip/list?functionId=" + cfg.getFunctionId();
|
||||
} else {// 全部审核
|
||||
// 条件下所有配置审核
|
||||
Page<IpCommCfg> searchPage = new Page<IpCommCfg>(request, response, "a");
|
||||
Page<IpCommCfg> auditPage = new Page<IpCommCfg>(request, response, "a");
|
||||
BeanUtils.copyProperties(searchPage, auditPage);
|
||||
|
||||
try {
|
||||
auditAll(auditPage, isValid, cfg);
|
||||
addMessage(redirectAttributes, "success", "audit_success");
|
||||
} catch (Exception e) {
|
||||
logger.error("配置下发失败:", e);
|
||||
if (e instanceof MaatConvertException) {
|
||||
addMessage(redirectAttributes, "error", "request_service_failed");
|
||||
} else {
|
||||
addMessage(redirectAttributes, "error", "audit_failed");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return list(model, request, response, cfg);
|
||||
}
|
||||
}
|
||||
// @RequestMapping(value = { "/audit" })
|
||||
// @RequiresPermissions(value = { "ip:common:config" })
|
||||
// public String audit(Model model, @ModelAttribute("cfg") IpCommCfg cfg, Integer isAudit, Integer isValid,
|
||||
// String ids, Integer functionId, HttpServletRequest request, HttpServletResponse response,
|
||||
// RedirectAttributes redirectAttributes) {
|
||||
// // 选中配置审核
|
||||
// if (!StringUtil.isEmpty(ids)) {
|
||||
// List<IpCommCfg> ipGroupCfgs = ipCommGroupCfgService.getByIds(ids);
|
||||
// List<IpCommCfg> temp = Lists.newArrayList();
|
||||
// try {
|
||||
// ipCommGroupCfgService.audit(ipGroupCfgs, isAudit, isValid);
|
||||
// } catch (Exception e) {
|
||||
// logger.error("审核失败", e);
|
||||
// addMessage(redirectAttributes, "error", "audit_failed");
|
||||
// } finally {
|
||||
// temp.clear();
|
||||
// }
|
||||
// return "redirect:" + adminPath + "/basics/ip/list?functionId=" + cfg.getFunctionId();
|
||||
// } else {// 全部审核
|
||||
// // 条件下所有配置审核
|
||||
// Page<IpCommCfg> searchPage = new Page<IpCommCfg>(request, response, "a");
|
||||
// Page<IpCommCfg> auditPage = new Page<IpCommCfg>(request, response, "a");
|
||||
// BeanUtils.copyProperties(searchPage, auditPage);
|
||||
//
|
||||
// try {
|
||||
// auditAll(auditPage, isValid, cfg);
|
||||
// addMessage(redirectAttributes, "success", "audit_success");
|
||||
// } catch (Exception e) {
|
||||
// logger.error("配置下发失败:", e);
|
||||
// if (e instanceof MaatConvertException) {
|
||||
// addMessage(redirectAttributes, "error", "request_service_failed");
|
||||
// } else {
|
||||
// addMessage(redirectAttributes, "error", "audit_failed");
|
||||
// }
|
||||
//
|
||||
// }
|
||||
//
|
||||
// return list(model, request, response, cfg);
|
||||
// }
|
||||
// }
|
||||
|
||||
@RequestMapping(value = { "/delete" })
|
||||
@RequiresPermissions(value = { "ip:common:config" })
|
||||
@@ -260,121 +253,121 @@ public class IpCommGroupController extends BaseController {
|
||||
* @param redirectAttributes
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public void auditAll(Page page, Integer auditType, Object entity) throws Exception {
|
||||
long start = System.currentTimeMillis();
|
||||
page.setOrderBy("");
|
||||
page.setPageSize(Constants.MAAT_JSON_SEND_SIZE);
|
||||
page.setPageNo(1);
|
||||
page.setLastPage(false);
|
||||
// 携带审核状态信息的BaseCfg
|
||||
BaseCfg auditBatchCfg = new BaseCfg();
|
||||
// 携带审核条件的BaseCfg
|
||||
IpCommCfg searchIpCommGroupCfg = new IpCommCfg();
|
||||
BeanUtils.copyProperties(entity, auditBatchCfg);
|
||||
BeanUtils.copyProperties(entity, searchIpCommGroupCfg);
|
||||
|
||||
auditType = (Integer) Reflections.invokeGetter(entity, "isAudit");
|
||||
|
||||
// 全部审核通过,只查询当前条件下的所有未审核的配置 -批量审核通过/不通过
|
||||
if (auditType.equals(1) || auditType.equals(2)) {
|
||||
|
||||
searchIpCommGroupCfg.setIsValid(0);
|
||||
searchIpCommGroupCfg.setIsAudit(0);
|
||||
|
||||
if (auditType.equals(1)) {
|
||||
auditBatchCfg.setIsAudit(1);
|
||||
auditBatchCfg.setIsValid(1);
|
||||
} else {
|
||||
auditBatchCfg.setIsAudit(2);
|
||||
auditBatchCfg.setIsValid(0);
|
||||
}
|
||||
auditBatchCfg.setAuditTime(new Date());
|
||||
auditBatchCfg.setAuditorId(UserUtils.getUser().getId());
|
||||
} else {
|
||||
// 全部取消通过,只查询当前条件下的所有审核通过的配置
|
||||
searchIpCommGroupCfg.setIsValid(1);
|
||||
searchIpCommGroupCfg.setIsAudit(1);
|
||||
|
||||
auditBatchCfg.setIsAudit(3);
|
||||
auditBatchCfg.setIsValid(0);
|
||||
auditBatchCfg.setAuditTime(new Date());
|
||||
auditBatchCfg.setAuditorId(UserUtils.getUser().getId());
|
||||
}
|
||||
|
||||
ServiceConfigTemplateUtil serviceTemplate = new ServiceConfigTemplateUtil();
|
||||
Integer functionId = 0;
|
||||
if (auditBatchCfg != null && !StringUtil.isEmpty(auditBatchCfg.getFunctionId())) {
|
||||
functionId = auditBatchCfg.getFunctionId();
|
||||
}
|
||||
List<Map<String, Object>> serviceList = serviceTemplate.getServiceListByFunctionId(functionId);
|
||||
for (Map<String, Object> service : serviceList) {
|
||||
String tableNameXml = service.get("tableName").toString(); // 获取业务主配置表
|
||||
String serviceTypeXml = service.get("serviceType").toString(); // 业务类型 1maat 2callback
|
||||
String classNameXml = service.get("className").toString(); // 主配置Java类
|
||||
String serviceIdXml = service.get("id").toString(); // service字典表 service_id字段
|
||||
auditBatchCfg.setServiceId(Integer.valueOf(serviceIdXml));
|
||||
auditBatchCfg.setTableName(tableNameXml);
|
||||
searchIpCommGroupCfg.setServiceId(Integer.valueOf(serviceIdXml));
|
||||
searchIpCommGroupCfg.setTableName(tableNameXml);
|
||||
|
||||
if ("1".equals(serviceTypeXml)) {// maat类配置
|
||||
// 存放域配置类型 及 对应表名
|
||||
List<Map<String, Object>> cfgList = (List<Map<String, Object>>) service.get("cfgList");
|
||||
List<Map<String, Object>> userRegionList = (List<Map<String, Object>>) service.get("userRegionList");
|
||||
int cfgType = Integer.parseInt(service.get("cfgType").toString());
|
||||
if (auditBatchCfg.getIsAudit() == 1) {
|
||||
boolean hasData = true;
|
||||
|
||||
while (hasData) {
|
||||
page.setPageNo(1);
|
||||
page.setLastPage(false);
|
||||
List list = ipCommGroupCfgService.findPage(page, searchIpCommGroupCfg).getList();
|
||||
if(CollectionUtils.isNotEmpty(list)){
|
||||
Map<Integer,List> groupIdMap=new HashMap();
|
||||
// 配置生效处理
|
||||
if(auditBatchCfg.getIsAudit().equals(1)) {
|
||||
hasData=commonPolicyService.auditReuseCommonConfigData(page, auditBatchCfg,groupIdMap,hasData);
|
||||
Map<Integer,List> groupIpMap=new HashMap();
|
||||
if(CollectionUtils.isNotEmpty(list)) {
|
||||
for (IpCommCfg obj : (List<IpCommCfg>)list) {
|
||||
BaseCfg baseCfg=(BaseCfg)obj;
|
||||
if(!StringUtil.isEmpty(obj.getGroupId())) {
|
||||
groupIdMap.get(obj.getGroupId()).add(baseCfg);
|
||||
}else {
|
||||
List newList=new ArrayList<>();
|
||||
newList.add(baseCfg);
|
||||
groupIdMap.put(obj.getGroupId(),newList);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
if(hasData) {
|
||||
page.setPageNo(1);
|
||||
page.setLastPage(false);
|
||||
}
|
||||
}else{
|
||||
hasData = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
throw new RuntimeException("wrong service type " + serviceTypeXml);
|
||||
}
|
||||
}
|
||||
|
||||
// 批量审核通过时,如果没有携带isValid检索条件,返回界面需要将isValid置为null
|
||||
if (!StringUtil.isEmpty(entity)) {
|
||||
BaseCfg base = (BaseCfg) entity;
|
||||
if (!StringUtil.isEmpty(base.getSeltype()) && base.getSeltype().equals("isValid")) {
|
||||
base.setIsValid(null);
|
||||
BeanUtils.copyProperties(base, entity);
|
||||
}
|
||||
}
|
||||
long end = System.currentTimeMillis();
|
||||
logger.warn("配置批量生效/失效耗时:" + (end - start));
|
||||
}
|
||||
// @Override
|
||||
// public void auditAll(Page page, Integer auditType, Object entity) throws Exception {
|
||||
// long start = System.currentTimeMillis();
|
||||
// page.setOrderBy("");
|
||||
// page.setPageSize(Constants.MAAT_JSON_SEND_SIZE);
|
||||
// page.setPageNo(1);
|
||||
// page.setLastPage(false);
|
||||
// // 携带审核状态信息的BaseCfg
|
||||
// BaseCfg auditBatchCfg = new BaseCfg();
|
||||
// // 携带审核条件的BaseCfg
|
||||
// IpCommCfg searchIpCommGroupCfg = new IpCommCfg();
|
||||
// BeanUtils.copyProperties(entity, auditBatchCfg);
|
||||
// BeanUtils.copyProperties(entity, searchIpCommGroupCfg);
|
||||
//
|
||||
// auditType = (Integer) Reflections.invokeGetter(entity, "isAudit");
|
||||
//
|
||||
// // 全部审核通过,只查询当前条件下的所有未审核的配置 -批量审核通过/不通过
|
||||
// if (auditType.equals(1) || auditType.equals(2)) {
|
||||
//
|
||||
// searchIpCommGroupCfg.setIsValid(0);
|
||||
// searchIpCommGroupCfg.setIsAudit(0);
|
||||
//
|
||||
// if (auditType.equals(1)) {
|
||||
// auditBatchCfg.setIsAudit(1);
|
||||
// auditBatchCfg.setIsValid(1);
|
||||
// } else {
|
||||
// auditBatchCfg.setIsAudit(2);
|
||||
// auditBatchCfg.setIsValid(0);
|
||||
// }
|
||||
// auditBatchCfg.setAuditTime(new Date());
|
||||
// auditBatchCfg.setAuditorId(UserUtils.getUser().getId());
|
||||
// } else {
|
||||
// // 全部取消通过,只查询当前条件下的所有审核通过的配置
|
||||
// searchIpCommGroupCfg.setIsValid(1);
|
||||
// searchIpCommGroupCfg.setIsAudit(1);
|
||||
//
|
||||
// auditBatchCfg.setIsAudit(3);
|
||||
// auditBatchCfg.setIsValid(0);
|
||||
// auditBatchCfg.setAuditTime(new Date());
|
||||
// auditBatchCfg.setAuditorId(UserUtils.getUser().getId());
|
||||
// }
|
||||
//
|
||||
// ServiceConfigTemplateUtil serviceTemplate = new ServiceConfigTemplateUtil();
|
||||
// Integer functionId = 0;
|
||||
// if (auditBatchCfg != null && !StringUtil.isEmpty(auditBatchCfg.getFunctionId())) {
|
||||
// functionId = auditBatchCfg.getFunctionId();
|
||||
// }
|
||||
// List<Map<String, Object>> serviceList = serviceTemplate.getServiceListByFunctionId(functionId);
|
||||
// for (Map<String, Object> service : serviceList) {
|
||||
// String tableNameXml = service.get("tableName").toString(); // 获取业务主配置表
|
||||
// String serviceTypeXml = service.get("serviceType").toString(); // 业务类型 1maat 2callback
|
||||
// String classNameXml = service.get("className").toString(); // 主配置Java类
|
||||
// String serviceIdXml = service.get("id").toString(); // service字典表 service_id字段
|
||||
// auditBatchCfg.setServiceId(Integer.valueOf(serviceIdXml));
|
||||
// auditBatchCfg.setTableName(tableNameXml);
|
||||
// searchIpCommGroupCfg.setServiceId(Integer.valueOf(serviceIdXml));
|
||||
// searchIpCommGroupCfg.setTableName(tableNameXml);
|
||||
//
|
||||
// if ("1".equals(serviceTypeXml)) {// maat类配置
|
||||
// // 存放域配置类型 及 对应表名
|
||||
// List<Map<String, Object>> cfgList = (List<Map<String, Object>>) service.get("cfgList");
|
||||
// List<Map<String, Object>> userRegionList = (List<Map<String, Object>>) service.get("userRegionList");
|
||||
// int cfgType = Integer.parseInt(service.get("cfgType").toString());
|
||||
// if (auditBatchCfg.getIsAudit() == 1) {
|
||||
// boolean hasData = true;
|
||||
//
|
||||
// while (hasData) {
|
||||
// page.setPageNo(1);
|
||||
// page.setLastPage(false);
|
||||
// List list = ipCommGroupCfgService.findPage(page, searchIpCommGroupCfg).getList();
|
||||
// if(CollectionUtils.isNotEmpty(list)){
|
||||
// Map<Integer,List> groupIdMap=new HashMap();
|
||||
// // 配置生效处理
|
||||
// if(auditBatchCfg.getIsAudit().equals(1)) {
|
||||
// hasData=commonPolicyService.auditReuseCommonConfigData(page, auditBatchCfg,groupIdMap,hasData);
|
||||
// Map<Integer,List> groupIpMap=new HashMap();
|
||||
// if(CollectionUtils.isNotEmpty(list)) {
|
||||
// for (IpCommCfg obj : (List<IpCommCfg>)list) {
|
||||
// BaseCfg baseCfg=(BaseCfg)obj;
|
||||
// if(!StringUtil.isEmpty(obj.getGroupId())) {
|
||||
// groupIdMap.get(obj.getGroupId()).add(baseCfg);
|
||||
// }else {
|
||||
// List newList=new ArrayList<>();
|
||||
// newList.add(baseCfg);
|
||||
// groupIdMap.put(obj.getGroupId(),newList);
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// }
|
||||
// if(hasData) {
|
||||
// page.setPageNo(1);
|
||||
// page.setLastPage(false);
|
||||
// }
|
||||
// }else{
|
||||
// hasData = false;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// } else {
|
||||
// throw new RuntimeException("wrong service type " + serviceTypeXml);
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// // 批量审核通过时,如果没有携带isValid检索条件,返回界面需要将isValid置为null
|
||||
// if (!StringUtil.isEmpty(entity)) {
|
||||
// BaseCfg base = (BaseCfg) entity;
|
||||
// if (!StringUtil.isEmpty(base.getSeltype()) && base.getSeltype().equals("isValid")) {
|
||||
// base.setIsValid(null);
|
||||
// BeanUtils.copyProperties(base, entity);
|
||||
// }
|
||||
// }
|
||||
// long end = System.currentTimeMillis();
|
||||
// logger.warn("配置批量生效/失效耗时:" + (end - start));
|
||||
// }
|
||||
@RequestMapping(value = "import", method=RequestMethod.POST)
|
||||
public String importIp(HttpServletRequest request,HttpServletResponse response,RedirectAttributes redirectAttributes,
|
||||
@RequestParam("files") MultipartFile[] files
|
||||
@@ -416,10 +409,10 @@ public class IpCommGroupController extends BaseController {
|
||||
List<BaseIpCfg> _ipPortCfgs=Lists.newArrayList(Constants.MAAT_JSON_SEND_SIZE);
|
||||
while(!ipPortCfgs.isEmpty()) {
|
||||
ipPortCfgs.drainTo(_ipPortCfgs, Constants.MAAT_JSON_SEND_SIZE);
|
||||
List<Integer> regionIds=Lists.newArrayList();
|
||||
List<Integer> numRegionGroupIds=Lists.newArrayList();
|
||||
List<Integer> numRegionRegionIds=Lists.newArrayList();
|
||||
if(!regionDict.getFunctionId().equals(405)) {//app ip compileId 从config_group_info中取
|
||||
//List<Integer> regionIds=Lists.newArrayList();
|
||||
//List<Integer> numRegionGroupIds=Lists.newArrayList();
|
||||
//List<Integer> numRegionRegionIds=Lists.newArrayList();
|
||||
/*if(!regionDict.getFunctionId().equals(405)) {//app ip compileId 从config_group_info中取
|
||||
try {
|
||||
if(isSend.equals("1")) {
|
||||
regionIds = ConfigServiceUtil.getId(3,_ipPortCfgs.size());
|
||||
@@ -442,7 +435,7 @@ public class IpCommGroupController extends BaseController {
|
||||
logger.info("获取域ID出错");
|
||||
throw new MaatConvertException("<spring:message code=\"request_service_failed\"/>:"+e.getMessage());
|
||||
}
|
||||
}
|
||||
}*/
|
||||
int ind=0;
|
||||
for (BaseIpCfg cfg : _ipPortCfgs) {
|
||||
cfg.setAction(serviceDict==null?null:serviceDict.getAction());
|
||||
@@ -459,7 +452,7 @@ public class IpCommGroupController extends BaseController {
|
||||
cfg.setIsValid(Constants.VALID_YES);
|
||||
cfg.setAuditorId(UserUtils.getUser().getId());
|
||||
cfg.setAuditTime(date);
|
||||
if(regionIds!=null&®ionIds.size()==_ipPortCfgs.size()) {
|
||||
/*if(regionIds!=null&®ionIds.size()==_ipPortCfgs.size()) {
|
||||
cfg.setRegionId(regionIds.get(ind));
|
||||
}
|
||||
if(serviceDict!=null&&serviceDict.getProtocolId()!=null) {
|
||||
@@ -469,7 +462,7 @@ public class IpCommGroupController extends BaseController {
|
||||
if(numRegionRegionIds!=null&&numRegionRegionIds.size()==_ipPortCfgs.size()) {
|
||||
cfg.setNumberRegionRegionId(numRegionRegionIds.get(ind));
|
||||
}
|
||||
}
|
||||
}*/
|
||||
}else {
|
||||
cfg.setIsAudit(Constants.AUDIT_NOT_YET);
|
||||
cfg.setIsValid(Constants.VALID_NO);
|
||||
@@ -518,9 +511,9 @@ public class IpCommGroupController extends BaseController {
|
||||
public Map<Integer,String> ajaxGetGroups(Model model,@RequestParam(required=true,value="groupIds")String groupIds){
|
||||
Map<Integer,String> groupIdList=new HashMap<Integer,String>();
|
||||
if(StringUtils.isNotBlank(groupIds)) {
|
||||
List<PolicyGroupInfo> list=policyGroupInfoService.findPolicyByServiceGroupInfoList(groupIds);
|
||||
List<PolicyGroupInfo> list=policyGroupInfoService.findPolicyByGroupInfoList(groupIds);
|
||||
for(PolicyGroupInfo p:list) {
|
||||
groupIdList.put(p.getServiceGroupId(), p.getGroupName());
|
||||
groupIdList.put(p.getGroupId(), p.getGroupName());
|
||||
}
|
||||
}
|
||||
return groupIdList;
|
||||
|
||||
@@ -181,6 +181,27 @@ public class HttpRedirectPolicyController extends BaseController {
|
||||
return "/cfg/proxy/control/httpRedirectForm";
|
||||
}
|
||||
|
||||
@RequestMapping(value = { "commForm" })
|
||||
@RequiresPermissions(value = { "control:httpBlock:config", "control:httpRedirect:config",
|
||||
"control:httpReplace:config", "control:httpMinit:config",
|
||||
"control:httpWhitelist:config" }, logical = Logical.OR)
|
||||
public String commForm(Model model, HttpServletRequest request, HttpServletResponse response, String ids,
|
||||
@ModelAttribute("cfg") CfgIndexInfo entity) {
|
||||
if (StringUtils.isNotBlank(ids)) {
|
||||
entity = httpRedirectCfgService.getCommCfg(Long.parseLong(ids), null);
|
||||
|
||||
initUpdateFormCondition(model, entity);
|
||||
} else {
|
||||
initFormCondition(model, entity);
|
||||
}
|
||||
// 获取所有的响应文件内容,阻断,或重定向时可以选择
|
||||
List<ProxyFileStrategyCfg> allProxyFileStrategys = proxyFileStrategyService
|
||||
.getProxyFileStrategyCfgList(new ProxyFileStrategyCfg());
|
||||
model.addAttribute("_cfg", entity);
|
||||
model.addAttribute("allProxyFileStrategys", allProxyFileStrategys);
|
||||
return "/cfg/proxy/control/httpRedirectCommonForm";
|
||||
}
|
||||
|
||||
@RequestMapping(value = { "saveOrUpdate" })
|
||||
@RequiresPermissions(value = { "control:httpBlock:config", "control:httpRedirect:config",
|
||||
"control:httpReplace:config", "control:httpMinit:config",
|
||||
|
||||
@@ -118,78 +118,78 @@ public class IpCommGroupCfgService extends BaseService {
|
||||
}
|
||||
}
|
||||
}
|
||||
@Transactional(readOnly=false,rollbackFor=RuntimeException.class)
|
||||
public void audit(List<IpCommCfg> ipCommGroupCfgs, Integer isAudit, Integer isValid) {
|
||||
// TODO Auto-generated method stub
|
||||
Set<Integer> groupIds=Sets.newHashSet();
|
||||
if(!StringUtil.isEmpty(ipCommGroupCfgs)){
|
||||
for(IpCommCfg cfg:ipCommGroupCfgs) {
|
||||
cfg.setIsValid(isValid);
|
||||
cfg.setIsAudit(isAudit);
|
||||
cfg.setAuditorId(UserUtils.getUser().getId());
|
||||
cfg.setAuditTime(new Date());
|
||||
groupIds.add(cfg.getGroupId());
|
||||
ipCommGroupCfgDao.update(cfg);
|
||||
}
|
||||
}
|
||||
//查询有效的Ip配置个数
|
||||
for(Integer groupId:groupIds) {
|
||||
Integer groupCount=ipCommGroupCfgDao.getGroupIdCount(groupId);
|
||||
if(groupCount>0){//udFlag 设置为1
|
||||
policyGroupInfoDao.updateUdFlag(groupId, 1,5);
|
||||
}else{//udFlag 设置为0
|
||||
policyGroupInfoDao.updateUdFlag(groupId, 0,5);
|
||||
}
|
||||
}
|
||||
//下发配置时改变公共组udFlag标识
|
||||
send2Maat(ipCommGroupCfgs,isValid);
|
||||
}
|
||||
public void send2Maat(List<IpCommCfg> ipCommGroupCfgs,int isValid) {
|
||||
GroupReuseAddBean maatBean = new GroupReuseAddBean();
|
||||
List<GroupReuseCfg> groupReuseList=new ArrayList<>();
|
||||
GroupReuseCfg groupReuseCfg=new GroupReuseCfg();
|
||||
List<IpCfg> ipRegionList = groupReuseCfgAddRemoveConvert(ipCommGroupCfgs,isValid,null);
|
||||
List<StringCfg> strRegionList = new ArrayList<>();
|
||||
List<NumBoundaryCfg> numRegionList = new ArrayList<>();
|
||||
groupReuseCfg.setIpRegionList(ipRegionList);
|
||||
groupReuseCfg.setStrRegionList(strRegionList);
|
||||
groupReuseCfg.setNumRegionList(numRegionList);
|
||||
groupReuseList.add(groupReuseCfg);
|
||||
maatBean.setGroupReuseCfgList(groupReuseList);
|
||||
maatBean.setAuditTime(new Date());
|
||||
maatBean.setCreatorName(UserUtils.getUser().getName());
|
||||
maatBean.setVersion(Constants.MAAT_VERSION);
|
||||
logger.warn("IP Common Region Send To Maat start");
|
||||
long start=System.currentTimeMillis();
|
||||
if(isValid==Constants.VALID_YES) {
|
||||
maatBean.setOpAction(Constants.INSERT_ACTION);
|
||||
//调用服务接口下发配置数据
|
||||
String json=gsonToJson(maatBean);
|
||||
if(ipCommGroupCfgs.size()<=100) {
|
||||
logger.info("ip 公共组域新增配置下发配置参数:"+json);
|
||||
}else {
|
||||
logger.info("ip 公共组域新增配置下发region条数:"+ipCommGroupCfgs.size());
|
||||
}
|
||||
//调用服务接口下发配置
|
||||
ToMaatResult result =ConfigServiceUtil.postGroupReuseSources(json);
|
||||
logger.info("ip 公共组域新增配置响应信息:"+result.getMsg());
|
||||
}else {
|
||||
maatBean.setOpAction(Constants.UPDATE_ACTION);
|
||||
//调用服务接口下发配置数据
|
||||
String json=gsonToJson(maatBean);
|
||||
if(ipCommGroupCfgs.size()<=100) {
|
||||
logger.info("ip 公共组域删除配置下发配置参数:"+json);
|
||||
}else {
|
||||
logger.info("ip 公共组域删除配置下发region条数:"+ipCommGroupCfgs.size());
|
||||
|
||||
}
|
||||
//调用服务接口下发配置
|
||||
ToMaatResult result = ConfigServiceUtil.put(json,3);
|
||||
logger.info("asn ip复用域删除配置响应信息:"+result.getMsg());
|
||||
}
|
||||
long end=System.currentTimeMillis();
|
||||
logger.warn("IP Common Region Send To Maat finish,cost:"+(end-start));
|
||||
}
|
||||
// @Transactional(readOnly=false,rollbackFor=RuntimeException.class)
|
||||
// public void audit(List<IpCommCfg> ipCommGroupCfgs, Integer isAudit, Integer isValid) {
|
||||
// // TODO Auto-generated method stub
|
||||
// Set<Integer> groupIds=Sets.newHashSet();
|
||||
// if(!StringUtil.isEmpty(ipCommGroupCfgs)){
|
||||
// for(IpCommCfg cfg:ipCommGroupCfgs) {
|
||||
// cfg.setIsValid(isValid);
|
||||
// cfg.setIsAudit(isAudit);
|
||||
// cfg.setAuditorId(UserUtils.getUser().getId());
|
||||
// cfg.setAuditTime(new Date());
|
||||
// groupIds.add(cfg.getGroupId());
|
||||
// ipCommGroupCfgDao.update(cfg);
|
||||
// }
|
||||
// }
|
||||
// //查询有效的Ip配置个数
|
||||
// for(Integer groupId:groupIds) {
|
||||
// Integer groupCount=ipCommGroupCfgDao.getGroupIdCount(groupId);
|
||||
// if(groupCount>0){//udFlag 设置为1
|
||||
// policyGroupInfoDao.updateUdFlag(groupId, 1,5);
|
||||
// }else{//udFlag 设置为0
|
||||
// policyGroupInfoDao.updateUdFlag(groupId, 0,5);
|
||||
// }
|
||||
// }
|
||||
// //下发配置时改变公共组udFlag标识
|
||||
// send2Maat(ipCommGroupCfgs,isValid);
|
||||
// }
|
||||
// public void send2Maat(List<IpCommCfg> ipCommGroupCfgs,int isValid) {
|
||||
// GroupReuseAddBean maatBean = new GroupReuseAddBean();
|
||||
// List<GroupReuseCfg> groupReuseList=new ArrayList<>();
|
||||
// GroupReuseCfg groupReuseCfg=new GroupReuseCfg();
|
||||
// List<IpCfg> ipRegionList = groupReuseCfgAddRemoveConvert(ipCommGroupCfgs,isValid,null);
|
||||
// List<StringCfg> strRegionList = new ArrayList<>();
|
||||
// List<NumBoundaryCfg> numRegionList = new ArrayList<>();
|
||||
// groupReuseCfg.setIpRegionList(ipRegionList);
|
||||
// groupReuseCfg.setStrRegionList(strRegionList);
|
||||
// groupReuseCfg.setNumRegionList(numRegionList);
|
||||
// groupReuseList.add(groupReuseCfg);
|
||||
// maatBean.setGroupReuseCfgList(groupReuseList);
|
||||
// maatBean.setAuditTime(new Date());
|
||||
// maatBean.setCreatorName(UserUtils.getUser().getName());
|
||||
// maatBean.setVersion(Constants.MAAT_VERSION);
|
||||
// logger.warn("IP Common Region Send To Maat start");
|
||||
// long start=System.currentTimeMillis();
|
||||
// if(isValid==Constants.VALID_YES) {
|
||||
// maatBean.setOpAction(Constants.INSERT_ACTION);
|
||||
// //调用服务接口下发配置数据
|
||||
// String json=gsonToJson(maatBean);
|
||||
// if(ipCommGroupCfgs.size()<=100) {
|
||||
// logger.info("ip 公共组域新增配置下发配置参数:"+json);
|
||||
// }else {
|
||||
// logger.info("ip 公共组域新增配置下发region条数:"+ipCommGroupCfgs.size());
|
||||
// }
|
||||
// //调用服务接口下发配置
|
||||
// ToMaatResult result =ConfigServiceUtil.postGroupReuseSources(json);
|
||||
// logger.info("ip 公共组域新增配置响应信息:"+result.getMsg());
|
||||
// }else {
|
||||
// maatBean.setOpAction(Constants.UPDATE_ACTION);
|
||||
// //调用服务接口下发配置数据
|
||||
// String json=gsonToJson(maatBean);
|
||||
// if(ipCommGroupCfgs.size()<=100) {
|
||||
// logger.info("ip 公共组域删除配置下发配置参数:"+json);
|
||||
// }else {
|
||||
// logger.info("ip 公共组域删除配置下发region条数:"+ipCommGroupCfgs.size());
|
||||
//
|
||||
// }
|
||||
// //调用服务接口下发配置
|
||||
// ToMaatResult result = ConfigServiceUtil.put(json,3);
|
||||
// logger.info("asn ip复用域删除配置响应信息:"+result.getMsg());
|
||||
// }
|
||||
// long end=System.currentTimeMillis();
|
||||
// logger.warn("IP Common Region Send To Maat finish,cost:"+(end-start));
|
||||
// }
|
||||
public void delete(String ids) {
|
||||
// TODO Auto-generated method stub
|
||||
if(ids==null) {
|
||||
@@ -217,24 +217,24 @@ public class IpCommGroupCfgService extends BaseService {
|
||||
BeanUtils.copyProperties(cfg, ipCommCfg);
|
||||
ipCommCfgs.add(ipCommCfg);
|
||||
((IpCommGroupCfgDao) batchSqlSession.getMapper(IpCommGroupCfgDao.class)).insertForBatch(ipCommCfg);
|
||||
if(send) {
|
||||
if(groupCount.containsKey(ipCommCfg.getGroupId())) {
|
||||
groupCount.put(ipCommCfg.getGroupId(), groupCount.get(ipCommCfg.getGroupId())+1);
|
||||
}else {
|
||||
groupCount.put(ipCommCfg.getGroupId(), 1);
|
||||
}
|
||||
}
|
||||
// if(send) {
|
||||
// if(groupCount.containsKey(ipCommCfg.getGroupId())) {
|
||||
// groupCount.put(ipCommCfg.getGroupId(), groupCount.get(ipCommCfg.getGroupId())+1);
|
||||
// }else {
|
||||
// groupCount.put(ipCommCfg.getGroupId(), 1);
|
||||
// }
|
||||
// }
|
||||
|
||||
}
|
||||
if(send) {
|
||||
if(groupCount.size()>0) {
|
||||
for(Entry<Integer, Integer> groupId:groupCount.entrySet()) {
|
||||
policyGroupInfoDao.updateUdFlag(groupId.getKey(), 1,5);
|
||||
}
|
||||
|
||||
this.send2Maat(ipCommCfgs, Constants.VALID_YES);
|
||||
}
|
||||
}
|
||||
// if(send) {
|
||||
// if(groupCount.size()>0) {
|
||||
// for(Entry<Integer, Integer> groupId:groupCount.entrySet()) {
|
||||
// policyGroupInfoDao.updateUdFlag(groupId.getKey(), 1,5);
|
||||
// }
|
||||
//
|
||||
// this.send2Maat(ipCommCfgs, Constants.VALID_YES);
|
||||
// }
|
||||
// }
|
||||
batchSqlSession.commit();
|
||||
}finally {
|
||||
if(batchSqlSession != null){
|
||||
|
||||
@@ -78,6 +78,10 @@ public class HttpRedirectCfgService extends CrudService<WebsiteCfgDao,CfgIndexIn
|
||||
entity.setNtcSubscribeIdCfgList(subscribeIdList);
|
||||
return entity;
|
||||
}
|
||||
public CfgIndexInfo getCommCfg(Long cfgId,Integer compileId){
|
||||
CfgIndexInfo entity = websiteCfgDao.getCfgIndexInfo(cfgId,compileId);
|
||||
return entity;
|
||||
}
|
||||
|
||||
public Map<String, List> exportHttpCfg(CfgIndexInfo entity){
|
||||
Map<String, List> dataMap=new HashMap<String, List>();
|
||||
|
||||
@@ -110,3 +110,6 @@
|
||||
<script src="${pageContext.request.contextPath}/static/pages/scripts/appNames.js" type="text/javascript"></script>
|
||||
|
||||
<script src="${pageContext.request.contextPath}/static/global/plugins/clipboard.js" type="text/javascript"></script>
|
||||
<link href="${pageContext.request.contextPath}/static/global/plugins/select2/css/select2.css" rel="stylesheet" />
|
||||
<link href="${pageContext.request.contextPath}/static/global/plugins/select2/css/select2-bootstrap.min.css" rel="stylesheet" />
|
||||
<script src="${pageContext.request.contextPath}/static/global/plugins/select2/js/select2.js" type="text/javascript"></script>
|
||||
|
||||
@@ -143,8 +143,8 @@ var reSort=function(obj,index){
|
||||
<select name="userRegion3" data-live-search="true" data-live-search-placeholder="search" class="selectpicker form-control required">
|
||||
<option value="${_cfg.userRegion3}"><spring:message code="select"/></option>
|
||||
<c:forEach items="${policyGroupInfos}" var="ipGroupInfo">
|
||||
<option value="${ipGroupInfo.serviceGroupId}"
|
||||
<c:if test="${_cfg.userRegion3 eq ipGroupInfo.serviceGroupId }">
|
||||
<option value="${ipGroupInfo.groupId}"
|
||||
<c:if test="${_cfg.userRegion3 eq ipGroupInfo.groupId }">
|
||||
selected
|
||||
</c:if>
|
||||
>${ipGroupInfo.groupName}</option>
|
||||
|
||||
@@ -96,8 +96,8 @@ $(function(){
|
||||
<select name="groupId" data-live-search="true" data-live-search-placeholder="search" class="selectpicker form-control required">
|
||||
<option value="${_cfg.groupId}"><spring:message code="select"/></option>
|
||||
<c:forEach items="${policyGroupInfos}" var="ipGroupInfo">
|
||||
<option value="${ipGroupInfo.serviceGroupId}"
|
||||
<c:if test="${_cfg.groupId eq ipGroupInfo.serviceGroupId }">
|
||||
<option value="${ipGroupInfo.groupId}"
|
||||
<c:if test="${_cfg.groupId eq ipGroupInfo.groupId }">
|
||||
selected
|
||||
</c:if>
|
||||
>${ipGroupInfo.groupName}</option>
|
||||
|
||||
@@ -75,7 +75,6 @@
|
||||
$(".group").each(function(){
|
||||
var text=$(this);
|
||||
$.each(data,function(key,values){
|
||||
console.log(key);
|
||||
if(key==$(text).text()){
|
||||
$(text).html(values);
|
||||
}
|
||||
@@ -132,7 +131,7 @@
|
||||
<input id="isFilterAction" name="isFilterAction" type="hidden" value="${cfg.isFilterAction }"/>
|
||||
<!-- 搜索内容与操作按钮栏 -->
|
||||
<div class="col-md-12">
|
||||
<div class="pull-left">
|
||||
<%-- <div class="pull-left">
|
||||
<c:set var="state"><spring:message code='group'/></c:set>
|
||||
<form:select path="isAudit" class="selectpicker select2 input-small">
|
||||
<form:option value=""><spring:message code="all_states"/></form:option>
|
||||
@@ -141,7 +140,7 @@
|
||||
<form:option value="2"><spring:message code="unapproved"></spring:message></form:option>
|
||||
<form:option value="3"><spring:message code="cancel_approved"></spring:message></form:option>
|
||||
</form:select>
|
||||
</div>
|
||||
</div> --%>
|
||||
|
||||
<div class="pull-left">
|
||||
|
||||
@@ -151,7 +150,7 @@
|
||||
<form:select path="seltype" class="selectpicker select2 input-small" >
|
||||
<form:option value="cfgDesc"><spring:message code="config_describe"></spring:message></form:option>
|
||||
<form:option value="destIpAddress"><spring:message code="IP"></spring:message></form:option>
|
||||
<form:option value="isValid"><spring:message code="valid_identifier"></spring:message></form:option>
|
||||
<%-- <form:option value="isValid"><spring:message code="valid_identifier"></spring:message></form:option> --%>
|
||||
</form:select>
|
||||
|
||||
</div>
|
||||
@@ -197,7 +196,7 @@
|
||||
</div>
|
||||
|
||||
|
||||
<shiro:hasPermission name="asn:ip:confirm">
|
||||
<%-- <shiro:hasPermission name="ip:common:config">
|
||||
<div class="btn-group">
|
||||
<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">
|
||||
<i class="fa fa-wrench"></i> <spring:message code="examine"></spring:message>
|
||||
@@ -209,7 +208,7 @@
|
||||
<li><sys:delRow url="${ctx}/basics/ip/audit?isAudit=3&isValid=0&functionId=${cfg.functionId }" id="contentTable" label="cancelPass"></sys:delRow></li>
|
||||
</ul>
|
||||
</div>
|
||||
</shiro:hasPermission>
|
||||
</shiro:hasPermission> --%>
|
||||
<a class="btn btn-icon-only btn-default setfields tooltips"
|
||||
data-container="body" data-placement="top" data-original-title=<spring:message code="custom_columns"/> href="javascript:;">
|
||||
<i class="icon-wrench"></i>
|
||||
@@ -256,7 +255,7 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-2">
|
||||
<%-- <div class="col-md-2">
|
||||
<div class="form-group">
|
||||
<label><spring:message code="audit_time"/>:</label>
|
||||
<input name="search_audit_time_start" type="text" readonly="readonly" maxlength="20" class="form-control Wdate"
|
||||
@@ -272,7 +271,7 @@
|
||||
value="<fmt:formatDate value="${cfg.search_audit_time_end}" pattern="yyyy-MM-dd HH:mm:ss"/>" onclick="WdatePicker({dateFmt:'yyyy-MM-dd HH:mm:ss',isShowClear:true});"/>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div> --%>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -287,7 +286,7 @@
|
||||
<thead>
|
||||
<tr>
|
||||
<th><input type="checkbox" class="i-checks" id="checkAll"></th>
|
||||
<th class="sort-column r.compile_id" style="display: none;" column="cfg_id" ><spring:message code="cfg_id"/></th>
|
||||
<%-- <th class="sort-column r.compile_id" style="display: none;" column="cfg_id" ><spring:message code="cfg_id"/></th> --%>
|
||||
<%-- <th><spring:message code="seq"/></th> --%>
|
||||
<th column="config_describe" ><spring:message code="config_describe"/></th>
|
||||
<%-- <th><spring:message code="group"/></th> --%>
|
||||
@@ -295,18 +294,15 @@
|
||||
<th column="ip_type" ><spring:message code="ip_type"/></th>
|
||||
<th column="IP" ><spring:message code="IP"/></th>
|
||||
<th column="ip_pattern" ><spring:message code="ip_pattern"/></th>
|
||||
<th><spring:message code="classification"/></th>
|
||||
<th><spring:message code="attribute"/></th>
|
||||
<th><spring:message code="label"/></th>
|
||||
<th><spring:message code="is_audit"/></th>
|
||||
<%-- <th><spring:message code="is_audit"/></th> --%>
|
||||
<%-- <th><spring:message code="log_total"/></th> --%>
|
||||
<th column="valid_identifier" ><spring:message code="valid_identifier"/></th>
|
||||
<th column="creator" ><spring:message code="creator"/></th>
|
||||
<th column="config_time" class="sort-column r.create_time"><spring:message code="config_time"/></th>
|
||||
<th column="editor" ><spring:message code="editor"/></th>
|
||||
<th column="edit_time" class="sort-column r.edit_time"><spring:message code="edit_time"/></th>
|
||||
<th><spring:message code="auditor"/></th>
|
||||
<th class="sort-column r.audit_time"><spring:message code="audit_time"/></th>
|
||||
<%-- <th><spring:message code="auditor"/></th>
|
||||
<th class="sort-column r.audit_time"><spring:message code="audit_time"/></th> --%>
|
||||
<%-- <th><spring:message code="operation"></spring:message></th> --%>
|
||||
</tr>
|
||||
</thead>
|
||||
@@ -314,7 +310,7 @@
|
||||
<c:forEach items="${page.list }" var="cfg" varStatus="status" step="1">
|
||||
<tr>
|
||||
<td><input type="checkbox" class="i-checks" id="${cfg.cfgId}" isValid="${cfg.isValid}" value="${cfg.isAudit}"></td>
|
||||
<td>${cfg.compileId }</td>
|
||||
<%-- <td>${cfg.compileId }</td> --%>
|
||||
<td>${cfg.cfgDesc }</td>
|
||||
<td class="group">${cfg.groupId}</td>
|
||||
<td>
|
||||
@@ -329,7 +325,7 @@
|
||||
<c:if test="${cfg.destIpPattern==ipPatternC.itemCode}"><spring:message code="${ipPatternC.itemValue }"/></c:if>
|
||||
</c:forEach>
|
||||
</td>
|
||||
<td>
|
||||
<%-- <td>
|
||||
<c:choose>
|
||||
<c:when test="${cfg.isAudit eq '0'}"><span class="label label-danger"><spring:message code="created"></spring:message></span></c:when>
|
||||
<c:when test="${cfg.isAudit eq '1'}"><span class="label label-success"><spring:message code="approved"></spring:message></span></c:when>
|
||||
@@ -337,7 +333,7 @@
|
||||
<c:when test="${cfg.isAudit eq '3'}"><span class="label label-warning"><spring:message code="cancel_approved"></spring:message></span></c:when>
|
||||
|
||||
</c:choose>
|
||||
</td>
|
||||
</td> --%>
|
||||
<%-- <td audit="${cfg.isAudit}" functionId="${cfg.functionId}" compileId="${cfg.compileId}" action="${cfg.action}"><div class="loading-total"></div></td> --%>
|
||||
<td>
|
||||
<c:if test="${cfg.isValid==0}"><spring:message code="no"/></c:if>
|
||||
@@ -348,8 +344,8 @@
|
||||
<td><fmt:formatDate value="${cfg.createTime }" pattern="yyyy-MM-dd HH:mm:ss"/></td>
|
||||
<td>${cfg.editorName }</td>
|
||||
<td><fmt:formatDate value="${cfg.editTime }" pattern="yyyy-MM-dd HH:mm:ss"/></td>
|
||||
<td>${cfg.auditorName }</td>
|
||||
<td><fmt:formatDate value="${cfg.auditTime }" pattern="yyyy-MM-dd HH:mm:ss"/></td>
|
||||
<%-- <td>${cfg.auditorName }</td>
|
||||
<td><fmt:formatDate value="${cfg.auditTime }" pattern="yyyy-MM-dd HH:mm:ss"/></td> --%>
|
||||
|
||||
</tr>
|
||||
</c:forEach>
|
||||
|
||||
@@ -0,0 +1,533 @@
|
||||
<%@ page contentType="text/html;charset=UTF-8"%>
|
||||
<%@ include file="/WEB-INF/include/taglib.jsp"%>
|
||||
<html>
|
||||
<head>
|
||||
<title><spring:message code="${cfgName}"></spring:message></title>
|
||||
|
||||
<style type="text/css">
|
||||
.boxSolid {
|
||||
border: 1px solid #eeeeee
|
||||
}
|
||||
</style>
|
||||
<script type="text/javascript">
|
||||
$(document)
|
||||
.ready(
|
||||
function() {
|
||||
//initCommIpVal();
|
||||
/* $("#cancel").on("click", function() {
|
||||
window.history.back();
|
||||
});*/
|
||||
$(".action").on("change", function() {
|
||||
$("#serviceId").val($(this).attr("serviceId"));
|
||||
$("#protocolId").val($(this).attr("protocolId"));
|
||||
});
|
||||
$("#serviceId").val($(".action:checked").attr("serviceId"));
|
||||
$("#protocolId").val($(".action:checked").attr("protocolId"));
|
||||
|
||||
$("#cfgFrom").validate(
|
||||
{
|
||||
errorPlacement : function(error, element) {
|
||||
if($(element).parents().hasClass("tagsinput")){
|
||||
$(element).parents(".col-md-6").next("div").append(error);
|
||||
}else{
|
||||
$(element).parents(".form-group").find(
|
||||
"div[for='"
|
||||
+ element.attr("name")
|
||||
+ "']").append(error);
|
||||
}
|
||||
},
|
||||
submitHandler : function(form) {
|
||||
var flag = true;
|
||||
|
||||
//代表所有业务都隐藏了,提示必须增加一种业务数据
|
||||
if(!$(".httpReqCfg").hasClass("hidden")){
|
||||
if($(".httpReqCfg").find(".boxSolid").length==$(".httpReqCfg").find(".boxSolid.hidden").length){
|
||||
top.$.jBox.tip("<spring:message code='one_more'/>", "<spring:message code='info'/>");
|
||||
return;
|
||||
}
|
||||
}
|
||||
//代表所有区域都隐藏了,提示必须增加个区域信息
|
||||
if($("input[name='isAreaEffective']:checked").val()==1 && $(".container-fluid:visible").size()==0){
|
||||
if($("#areaIsp").hasClass("hidden")) $("#areaIp").find(".glyphicon-plus").click();
|
||||
if($("#areaIp").hasClass("hidden")) $("#areaIsp").find(".glyphicon-plus").click();
|
||||
top.$.jBox.tip("<spring:message code='one_more_area'/>", "<spring:message code='info'/>");
|
||||
return;
|
||||
}
|
||||
$(".boxSolid:visible").find("input[name$='cfgKeywords']").each(function(){
|
||||
if($(this).val()==''){
|
||||
$(this).parents(".form-group").find(
|
||||
"div[for='"
|
||||
+ $(this).attr("name")
|
||||
+ "']").html("<label id=\"cfgKeywordsError\" class=\"error\">"+$("#keywordError").text()+"</label>");
|
||||
flag = false;
|
||||
}
|
||||
});
|
||||
//keywords非空校验完成校验二进制字符串
|
||||
$(".boxSolid:visible").find("select[name$='isHexbin']").each(function(){
|
||||
var isHexbin=$(this).val();
|
||||
if(isHexbin == 1){ //十六进制
|
||||
var keywords=$("input[name$='"+$(this).attr("name").replace("isHexbin","cfgKeywords")+"']").val();
|
||||
keywords=keywords.replace("***and***","")
|
||||
if(keywords != ''){
|
||||
if(!(/^([0-9|a-f|A-F]*)$/.test(keywords))){
|
||||
$(this).parents(".boxSolid").find(
|
||||
"div[for='"
|
||||
+ $(this).attr("name").replace("isHexbin","cfgKeywords")
|
||||
+ "']").html("<label id=\"cfgKeywordsError\" class=\"error\">"+$.validator.messages.hexCheck+"</label>");
|
||||
flag = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
var flag1=validateInvisibleCharTag();
|
||||
if(flag){
|
||||
flag=flag1;
|
||||
}
|
||||
if(flag){
|
||||
//将disable属性的元素删除
|
||||
$(".disabled").each(function(){
|
||||
$(this).remove();
|
||||
});
|
||||
$("input[name$='exprType']").attr("disabled",false);
|
||||
loading('onloading...');
|
||||
form.submit();
|
||||
}else{
|
||||
return;
|
||||
}
|
||||
|
||||
},
|
||||
errorContainer : "#messageBox",
|
||||
});
|
||||
//业务内容增加
|
||||
/* $("span[title='add']").on("click", function() {
|
||||
$(".ipPort0").removeClass("hidden");
|
||||
}); */
|
||||
|
||||
$('#ipCommGroup').select2({
|
||||
width:"100%",
|
||||
placeholder: 'Please Select',
|
||||
//language: "zh-CN",
|
||||
// data:JSON.parse('${ipGroupData}'), // 默认值填写 value 是id text:是名字 不能使用其他字段
|
||||
inputMessage:'search',
|
||||
ajax: {
|
||||
url: "${ctx}/basics/policyGroup/ajaxGetPagedGroup", // 请求后台借口地址
|
||||
dataType: 'json',
|
||||
method:"post",
|
||||
delay: 200,
|
||||
data: function (params) {
|
||||
return {
|
||||
type:5,
|
||||
//keyWord: params.term || '', //搜索参数
|
||||
pageNo: params.page || 1, //分页参数
|
||||
pageSize: 10, //每次查询10条记录
|
||||
|
||||
};
|
||||
},
|
||||
processResults: function (data, params) {
|
||||
params.page = params.page || 1;
|
||||
var tempResult = data.list,d_l=[];
|
||||
|
||||
for (var i = 0, len = tempResult.length; i < len; i++) {
|
||||
var tem={};
|
||||
tem.id = tempResult[i].serviceGroupId; // 后台传回来需要显示的id 根据自己需要写值
|
||||
tem.text = tempResult[i].groupName;
|
||||
d_l.push(tem);
|
||||
}
|
||||
return {
|
||||
results: d_l,
|
||||
pagination: {
|
||||
more: (params.page) < data.last
|
||||
}
|
||||
};
|
||||
},
|
||||
cache: true
|
||||
},
|
||||
escapeMarkup: function (markup) {
|
||||
return markup;
|
||||
},
|
||||
templateResult:function(repo){
|
||||
if (repo.loading) {
|
||||
return repo.text;
|
||||
}
|
||||
|
||||
var markup = "<a tabindex='0' class='' style='font-family: \"Helvetica Neue\" Helvetica, Arial, sans-serif;font-size: 14px; cursor: pointer;user-select: none;display: inline-block;box-sizing: border-box;color: #6f6f6f;font-weight: 300;line-height: 18px;white-space: nowrap;' data-tokens='null'><span style='margin-right:34px;'>"+repo.text+"</span>" +
|
||||
"<span class='glyphicon glyphicon-ok check-mark' style='box-sizing: border-box;'></span></a>";
|
||||
|
||||
return markup;
|
||||
},
|
||||
debug:true/* ,
|
||||
dropdownParent: $('.groupId'),
|
||||
templateSelection: formatRepoSelection (data) {
|
||||
return data.bck03||data.text;
|
||||
} */
|
||||
});
|
||||
});
|
||||
|
||||
//业务窗口打开
|
||||
var addContent = function(obj, contentClassName) {
|
||||
$("." + contentClassName + "0").removeClass("hidden").removeClass(
|
||||
"disabled");
|
||||
$(obj).addClass("hidden");
|
||||
}
|
||||
|
||||
//业务窗口关闭
|
||||
var delContent = function(contentClassName, addBtnClassName) {
|
||||
$("." + contentClassName).addClass("hidden").addClass("disabled");
|
||||
$("." + addBtnClassName).removeClass("hidden");
|
||||
}
|
||||
function formatRepoSelection (data) {
|
||||
return repo.full_name || repo.text;
|
||||
}
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<span id="keywordError" style="display:none"><spring:message code="required"></spring:message></span>
|
||||
<span id="tagsinputTip" style="display:none"><spring:message code="multiple_keywords_tip"></spring:message></span>
|
||||
<div class="page-content">
|
||||
<h3 class="page-title">
|
||||
<spring:message code="${_cfg.menuNameCode }"></spring:message>
|
||||
</h3>
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<div class="portlet box blue">
|
||||
<div class="portlet-title">
|
||||
<div class="caption">
|
||||
<i class="fa fa-gift"></i>
|
||||
<c:if test="${empty _cfg.cfgId}">
|
||||
<spring:message code="add"></spring:message>
|
||||
</c:if>
|
||||
<c:if test="${not empty _cfg.cfgId}">
|
||||
<spring:message code="edit"></spring:message>
|
||||
</c:if>
|
||||
</div>
|
||||
</div>
|
||||
<div class="portlet-body form">
|
||||
<!-- BEGIN FORM-->
|
||||
<form id="cfgFrom" action="${ctx}/proxy/control/httpRedirect/saveOrUpdateCommGroup"
|
||||
method="post" class="form-horizontal">
|
||||
<input type="hidden" name="cfgId" id="cfgId" value="${_cfg.cfgId}">
|
||||
<input type="hidden" name="compileId" value="${_cfg.compileId}">
|
||||
<input type="hidden" name="functionId" value="${_cfg.functionId}">
|
||||
<input type="hidden" name="isValid" value="${_cfg.isValid}">
|
||||
<input type="hidden" name="isAudit" value="${_cfg.isAudit}">
|
||||
<input type="hidden" id="serviceId" name="serviceId" value="${_cfg.serviceId}">
|
||||
<div class="form-body">
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
<div class="form-group">
|
||||
<label class="control-label col-md-3"><spring:message
|
||||
code="config_describe" /></label>
|
||||
<div class="col-md-6">
|
||||
<input class="form-control" type="text" name="cfgDesc"
|
||||
value="${_cfg.cfgDesc}">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="form-group">
|
||||
<label class="control-label col-md-3"><spring:message
|
||||
code="action" /></label>
|
||||
<div class="col-md-6">
|
||||
<c:forEach items="${serviceList}" var="service"
|
||||
varStatus="satus">
|
||||
<label class="radio-inline"> <c:if
|
||||
test="${_cfg.functionId eq service.functionId}">
|
||||
<input type="radio" name="action"
|
||||
serviceId="${service.serviceId }" class="action"
|
||||
protocolId="${service.protocolId }"
|
||||
regionCode="${service.regionCode }"
|
||||
configDolog="${service.configDoLog }"
|
||||
value="${service.action }" class="required action"
|
||||
<c:if test="${_cfg.action==service.action || (_cfg.action==null && satus.index==0)}">checked</c:if>>
|
||||
<c:forEach items="${fns:getDictList('SERVICE_ACTION') }" var="dict">
|
||||
<c:if test="${dict.itemCode eq service.action }">
|
||||
<c:set var="action" value="${dict.itemCode }"></c:set>
|
||||
<spring:message code="${dict.itemValue }"/>
|
||||
</c:if>
|
||||
</c:forEach>
|
||||
</c:if>
|
||||
</label>
|
||||
</c:forEach>
|
||||
</div>
|
||||
<div for="action"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<c:if test="${action != 128 }">
|
||||
<c:if test="${empty _cfg.cfgId }">
|
||||
<c:set var="doLog" value="1"/>
|
||||
</c:if>
|
||||
<c:if test="${!empty _cfg.cfgId }">
|
||||
<c:set var="doLog" value="${_cfg.doLog }"/>
|
||||
</c:if>
|
||||
<!-- 记录日志begin -->
|
||||
<div class="row doLog">
|
||||
<div class="col-md-6">
|
||||
<div class="form-group">
|
||||
<label class="control-label col-md-3"><spring:message code="do_log" /></label>
|
||||
<c:forEach items="${fns:getDictList('DO_LOG') }" var="dict">
|
||||
<c:choose>
|
||||
<c:when test="${dict.itemCode eq _cfg.doLog}">
|
||||
<label class="radio-inline">
|
||||
<input type="radio" name="doLog" checked value="${dict.itemCode}" ><spring:message code="${dict.itemValue}"/>
|
||||
</label>
|
||||
</c:when>
|
||||
<c:otherwise>
|
||||
<label class="radio-inline">
|
||||
<input type="radio" name="doLog" value="${dict.itemCode}" ><spring:message code="${dict.itemValue}"/>
|
||||
</label>
|
||||
</c:otherwise>
|
||||
</c:choose>
|
||||
</c:forEach>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- 记录日志end -->
|
||||
</c:if>
|
||||
<c:if test="${action eq 128}"><!-- 白名单不记录日志,默认为:0 -->
|
||||
<input type="hidden" name="dolog" value="0"/>
|
||||
</c:if>
|
||||
<%@include file="/WEB-INF/views/cfg/actionRegionForm.jsp"%>
|
||||
<br>
|
||||
<c:forEach items="${regionList}" var="region" varStatus="status">
|
||||
<c:if test="${region.regionType eq 1 }">
|
||||
<!--ip info-->
|
||||
<div class="httpReqCfg">
|
||||
<c:set var="tabName" value="httpIpTab"></c:set>
|
||||
<h4 class="form-section" >
|
||||
<spring:message code="http_ip_title" />
|
||||
<small> <span
|
||||
class="glyphicon glyphicon-plus ${tabName}Add"
|
||||
onClick="addContent(this,'${tabName}')" title="add"></span></small>
|
||||
</h4>
|
||||
|
||||
<c:forEach items="${_cfg.ipPortList}" var="ipPort"
|
||||
varStatus="status">
|
||||
<c:set var="cfgName" value="ipPortList[${status.index}]"></c:set>
|
||||
<div class="row boxSolid ${tabName}${status.index}
|
||||
<c:if test="${empty ipPort.cfgId}">hidden disabled </c:if>" >
|
||||
<%@include file="/WEB-INF/views/cfg/ipCfgForm.jsp"%>
|
||||
</div>
|
||||
<c:set var="ipCfgIndex" value="${ipCfgIndex+1}"></c:set>
|
||||
</c:forEach>
|
||||
</div>
|
||||
<!--/ip info-->
|
||||
</c:if>
|
||||
|
||||
<c:if test="${region.regionType eq 2 }">
|
||||
<c:if test="${region.configRegionValue eq _cfg.httpUrl.cfgType }">
|
||||
<!--url info-->
|
||||
<div class="httpReqCfg">
|
||||
<c:set var="tabName" value="httpUrlTab"></c:set>
|
||||
<h4 class="form-section" >
|
||||
<spring:message code="http_url_title" />
|
||||
<small> <span
|
||||
class="glyphicon glyphicon-plus ${tabName}Add"
|
||||
onClick="addContent(this,'${tabName}')" title="add"></span></small>
|
||||
</h4>
|
||||
|
||||
<%-- <c:set var="regionValue" value="${_cfg.httpUrl.cfgType}"></c:set> --%>
|
||||
<c:forEach items="${_cfg.httpUrlList}" var="cfg"
|
||||
varStatus="status">
|
||||
<c:set var="cfgName" value="httpUrlList[${status.index}]"></c:set>
|
||||
<div class="row boxSolid ${tabName}${status.index}
|
||||
<c:if test="${empty cfg.cfgId}">hidden disabled </c:if>" >
|
||||
<%@include file="/WEB-INF/views/cfg/complexCfgForm.jsp"%>
|
||||
</div>
|
||||
</c:forEach>
|
||||
</div>
|
||||
<!--/url info-->
|
||||
</c:if>
|
||||
<c:if test="${region.configRegionValue eq _cfg.httpReqBody.cfgType }">
|
||||
<!--request body info-->
|
||||
<div class="httpReqCfg">
|
||||
<c:set var="tabName" value="httpReqBodyTab"></c:set>
|
||||
<h4 class="form-section" >
|
||||
<spring:message code="http_req_body_title" />
|
||||
<small> <span
|
||||
class="glyphicon glyphicon-plus ${tabName}Add"
|
||||
onClick="addContent(this,'${tabName}')" title="add"></span></small>
|
||||
</h4>
|
||||
|
||||
<%-- <c:set var="regionValue" value="${_cfg.httpReqBody.cfgType}"></c:set> --%>
|
||||
<c:forEach items="${_cfg.httpReqBodyList}" var="cfg"
|
||||
varStatus="status">
|
||||
<c:set var="cfgName" value="httpReqBodyList[${status.index}]"></c:set>
|
||||
<div class="row boxSolid ${tabName}${status.index} <c:if test="${empty cfg.cfgId}">hidden disabled </c:if>" >
|
||||
<%@include file="/WEB-INF/views/cfg/complexCfgForm.jsp"%>
|
||||
</div>
|
||||
</c:forEach>
|
||||
</div>
|
||||
<!--/request body info-->
|
||||
</c:if>
|
||||
<c:if test="${region.configRegionValue eq _cfg.httpResBody.cfgType }">
|
||||
<!--response body info-->
|
||||
<div class="httpReqCfg">
|
||||
<c:set var="tabName" value="httpResBodyTab"></c:set>
|
||||
<h4 class="form-section" >
|
||||
<spring:message code="http_res_body_title" />
|
||||
<small> <span
|
||||
class="glyphicon glyphicon-plus ${tabName}Add"
|
||||
onClick="addContent(this,'${tabName}')" title="add"></span></small>
|
||||
</h4>
|
||||
|
||||
<%-- <c:set var="regionValue" value="${_cfg.httpResBody.cfgType}"></c:set> --%>
|
||||
<c:forEach items="${_cfg.httpResBodyList}" var="cfg"
|
||||
varStatus="status">
|
||||
<c:set var="cfgName" value="httpResBodyList[${status.index}]"></c:set>
|
||||
<div class="row boxSolid ${tabName}${status.index} <c:if test="${empty cfg.cfgId}">hidden disabled </c:if>" >
|
||||
<%@include file="/WEB-INF/views/cfg/complexCfgForm.jsp"%>
|
||||
</div>
|
||||
</c:forEach>
|
||||
</div>
|
||||
</c:if>
|
||||
<c:if test="${region.configRegionValue eq _cfg.ntcSubscribeIdCfg.cfgType }">
|
||||
<!--response body info-->
|
||||
<div class="httpReqCfg ntcSubscribeIdCfgCfg">
|
||||
<c:set var="tabName" value="ntcSubscribeIdCfgTab"></c:set>
|
||||
<h4 class="form-section">
|
||||
<spring:message code="NTC_SUBSCRIBE_ID" />
|
||||
<small> <span
|
||||
class="glyphicon glyphicon-plus ${tabName}Add"
|
||||
onClick="addContent(this,'${tabName}')" title="add"></span></small>
|
||||
</h4>
|
||||
|
||||
<%-- <c:set var="regionValue" value="${_cfg.httpResBody.cfgType}"></c:set> --%>
|
||||
<c:forEach items="${_cfg.ntcSubscribeIdCfgList}" var="cfg" varStatus="status">
|
||||
<c:set var="cfgName" value="ntcSubscribeIdCfgList[${status.index}]"></c:set>
|
||||
<div class="row boxSolid ${tabName}${status.index} <c:if test="${empty cfg.cfgId}">hidden disabled </c:if>" >
|
||||
<%@include file="/WEB-INF/views/cfg/complexCfgForm.jsp"%>
|
||||
</div>
|
||||
</c:forEach>
|
||||
</div>
|
||||
</c:if>
|
||||
</c:if>
|
||||
<c:if test="${region.regionType eq 3 }">
|
||||
<c:if test="${region.configRegionValue eq _cfg.httpReqHdr.cfgType }">
|
||||
<!--request header info-->
|
||||
<div class="httpReqCfg">
|
||||
<c:set var="tabName" value="httpReqHdrTab"></c:set>
|
||||
<h4 class="form-section" >
|
||||
<spring:message code="http_req_hdr_title" />
|
||||
<small> <span
|
||||
class="glyphicon glyphicon-plus ${tabName}Add"
|
||||
onClick="addContent(this,'${tabName}')" title="add"></span></small>
|
||||
</h4>
|
||||
|
||||
<%-- <c:set var="regionValue" value="${_cfg.httpReqHdr.cfgType}"></c:set> --%>
|
||||
<c:forEach items="${_cfg.httpReqHdrList}" var="cfg"
|
||||
varStatus="status">
|
||||
<c:set var="cfgName" value="httpReqHdrList[${status.index}]"></c:set>
|
||||
<div class="row boxSolid ${tabName}${status.index} <c:if test="${empty cfg.cfgId}">hidden disabled </c:if>">
|
||||
<%@include file="/WEB-INF/views/cfg/complexCfgForm.jsp"%>
|
||||
</div>
|
||||
</c:forEach>
|
||||
</div>
|
||||
<!--/request header info-->
|
||||
</c:if>
|
||||
<c:if test="${region.configRegionValue eq _cfg.httpResHdr.cfgType }">
|
||||
<!--response header info-->
|
||||
<div class="httpReqCfg">
|
||||
<c:set var="tabName" value="httpResHdrTab"></c:set>
|
||||
<h4 class="form-section" >
|
||||
<spring:message code="http_res_hdr_title" />
|
||||
<small> <span
|
||||
class="glyphicon glyphicon-plus ${tabName}Add"
|
||||
onClick="addContent(this,'${tabName}')" title="add"></span></small>
|
||||
</h4>
|
||||
<%-- <c:set var="regionValue" value="${_cfg.httpResHdr.cfgType}"></c:set> --%>
|
||||
<c:forEach items="${_cfg.httpResHdrList}" var="cfg"
|
||||
varStatus="status">
|
||||
<c:set var="cfgName" value="httpResHdrList[${status.index}]"></c:set>
|
||||
<div class="row boxSolid ${tabName}${status.index} <c:if test="${empty cfg.cfgId}">hidden disabled </c:if>">
|
||||
|
||||
<%@include file="/WEB-INF/views/cfg/complexCfgForm.jsp"%>
|
||||
</div>
|
||||
</c:forEach>
|
||||
</div>
|
||||
<!--/ip common group info-->
|
||||
<div class="ipCommGroup">
|
||||
<c:set var="tabName" value="ipCommGroupTab"></c:set>
|
||||
<h4 class="form-section" >
|
||||
<spring:message code="ip_comm_group" />
|
||||
<small> <span
|
||||
class="glyphicon glyphicon-plus ${tabName}Add"
|
||||
onClick="addContent(this,'${tabName}')" title="add"></span></small>
|
||||
</h4>
|
||||
<c:forEach items="${_cfg.ipCommGroupCfgList}" var="cfg"
|
||||
varStatus="status">
|
||||
<c:set var="cfgName" value="ipCommGroupCfgList[${status.index}]"></c:set>
|
||||
<div class="row boxSolid ${tabName}${status.index} <c:if test="${empty cfg.cfgId}">hidden disabled </c:if>">
|
||||
<div class="row">
|
||||
<div class="pull-right">
|
||||
<span class="glyphicon glyphicon-remove pull-right" title="remove"
|
||||
onClick="delContent('${tabName}${status.index}','${tabName}Add');" />
|
||||
</div>
|
||||
</div>
|
||||
<br>
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
<div class="form-group">
|
||||
<label class="control-label col-md-3"><font color="red">*</font>
|
||||
<spring:message code="ip_comm_group" /></label>
|
||||
<div class="groupId col-md-6">
|
||||
<select name="${cfgName}.groupId" class="selectpicker js-example-basic-single content-input form-control required" id="ipCommGroup" data-start-page="1">
|
||||
</select>
|
||||
</div>
|
||||
<div for="${cfgName}.groupId"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</c:forEach>
|
||||
</div>
|
||||
</c:if>
|
||||
</c:if>
|
||||
</c:forEach>
|
||||
<%@include file="/WEB-INF/include/form/areaInfo.jsp"%>
|
||||
<br>
|
||||
<%@include file="/WEB-INF/include/form/basicInfo.jsp"%>
|
||||
<br>
|
||||
<%@include file="/WEB-INF/include/form/scheduleNew.jsp"%>
|
||||
<div class="form-actions">
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
<div class="row">
|
||||
<div class="col-md-offset-3 col-md-8">
|
||||
<c:set var="auditPermission" value="false"></c:set>
|
||||
<!-- 拥有配置新增直接生效的功能权限 -->
|
||||
<shiro:hasPermission name="save:audit:permission">
|
||||
<c:set var="auditPermission" value="true"></c:set>
|
||||
</shiro:hasPermission>
|
||||
<c:choose>
|
||||
<c:when test="${!(fns:getUser().isAdmin()) && auditPermission}">
|
||||
<button id="audit" type="submit" class="btn green">
|
||||
<spring:message code="submit" />
|
||||
</button>
|
||||
</c:when>
|
||||
<c:otherwise>
|
||||
<button id="save" type="submit" class="btn green">
|
||||
<spring:message code="submit" />
|
||||
</button>
|
||||
</c:otherwise>
|
||||
</c:choose>
|
||||
<button id="cancel" type="button" class="btn default">
|
||||
<spring:message code="cancel" />
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<!-- END FORM-->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user