完成百度网格功能模块、网格绘制、网格种类管理、网格信息管理、网格员列表

This commit is contained in:
wanggeng 2021-10-20 19:09:37 +08:00
parent 416cc38ad5
commit 1fd2dcb70c
28 changed files with 2205 additions and 101 deletions

View File

@ -83,6 +83,14 @@ public class GridController extends DefaultBaseController {
return gridService.list(params);
}
@ApiOperation(value = "网格(排除查询网格)列表", notes = "网格(排除查询网格)列表接口")
@ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)})
@GetMapping("list/except/{gridId}")
public List<GridDTO> listExcept(@PathVariable("gridId") String gridId) {
Map<String, Object> params = requestParams();
return gridService.listExcept(gridId, params);
}
@ApiOperation(value = "网格分页列表", notes = "网格分页列表接口")
@ApiImplicitParams({
@ApiImplicitParam(name = "page", value = "当前页码", paramType = "query", dataType = "int", defaultValue = "1"),

View File

@ -0,0 +1,91 @@
package ink.wgink.module.map.controller.api.grid;
import ink.wgink.annotation.CheckRequestBodyAnnotation;
import ink.wgink.common.base.DefaultBaseController;
import ink.wgink.interfaces.consts.ISystemConstant;
import ink.wgink.module.map.pojo.dtos.grid.GridUserDTO;
import ink.wgink.module.map.service.grid.IGridUserService;
import ink.wgink.pojo.ListPage;
import ink.wgink.pojo.result.ErrorResult;
import ink.wgink.pojo.result.SuccessResult;
import ink.wgink.pojo.result.SuccessResultList;
import ink.wgink.pojo.vos.IdsVO;
import io.swagger.annotations.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
/**
* @ClassName: GridUserController
* @Description: 网格用户
* @Author: wanggeng
* @Date: 2021/10/20 5:42 下午
* @Version: 1.0
*/
@Api(tags = ISystemConstant.API_TAGS_SYSTEM_PREFIX + "网格用户接口")
@RestController
@RequestMapping(ISystemConstant.API_PREFIX + "/grid/user")
public class GridUserController extends DefaultBaseController {
@Autowired
private IGridUserService gridUserService;
@ApiOperation(value = "删除网格用户", notes = "删除网格用户接口")
@ApiImplicitParams({
@ApiImplicitParam(name = "ids", value = "ID列表用下划线分隔", paramType = "path", example = "1_2_3")
})
@ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)})
@DeleteMapping("delete/{gridId}/{ids}")
public SuccessResult delete(@PathVariable("gridId") String gridId, @PathVariable("ids") String ids) {
gridUserService.delete(gridId, Arrays.asList(ids.split("\\_")));
return new SuccessResult();
}
@ApiOperation(value = "修改网格用户", notes = "修改网格用户接口")
@ApiImplicitParams({
@ApiImplicitParam(name = "gridIdId", value = "网格ID", paramType = "path")
})
@ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)})
@PutMapping("update/{gridId}")
@CheckRequestBodyAnnotation
public SuccessResult update(@PathVariable("gridId") String gridId, @RequestBody IdsVO idsVO) throws Exception {
gridUserService.update(gridId, idsVO);
return new SuccessResult();
}
@ApiOperation(value = "网格用户ID列表", notes = "网格用户ID列表接口")
@ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)})
@GetMapping("list-user-id/{gridId}")
public List<String> listUserId(@PathVariable("gridId") String gridId) {
Map<String, Object> params = requestParams();
return gridUserService.listUserId(gridId, params);
}
@ApiOperation(value = "网格用户列表", notes = "网格用户列表接口")
@ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)})
@GetMapping("list/{gridId}")
public List<GridUserDTO> list(@PathVariable("gridId") String gridId) {
Map<String, Object> params = requestParams();
return gridUserService.list(gridId, params);
}
@ApiOperation(value = "网格用户分页列表", notes = "网格用户分页列表接口")
@ApiImplicitParams({
@ApiImplicitParam(name = "page", value = "当前页码", paramType = "query", dataType = "int", defaultValue = "1"),
@ApiImplicitParam(name = "rows", value = "显示数量", paramType = "query", dataType = "int", defaultValue = "20"),
@ApiImplicitParam(name = "keywords", value = "关键字", paramType = "query", dataType = "String"),
@ApiImplicitParam(name = "startTime", value = "开始时间", paramType = "query", dataType = "String"),
@ApiImplicitParam(name = "endTime", value = "结束时间", paramType = "query", dataType = "String")
})
@ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)})
@GetMapping("listpage/{gridId}")
public SuccessResultList<List<GridUserDTO>> listPage(@PathVariable("gridId") String gridId, ListPage page) {
Map<String, Object> params = requestParams();
page.setParams(params);
return gridUserService.listPage(gridId, page);
}
}

View File

@ -14,7 +14,7 @@ import org.springframework.web.servlet.ModelAndView;
* @Date: 2021/10/19 11:54 下午
* @Version: 1.0
*/
@Api(tags = ISystemConstant.API_TAGS_SYSTEM_PREFIX + "网格组接口")
@Api(tags = ISystemConstant.ROUTE_TAGS_PREFIX + "网格组")
@Controller
@RequestMapping(ISystemConstant.ROUTE_PREFIX + "/grid-group")
public class GridGroupRouteController {

View File

@ -0,0 +1,42 @@
package ink.wgink.module.map.controller.route.grid;
import ink.wgink.interfaces.consts.ISystemConstant;
import io.swagger.annotations.Api;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
/**
* @ClassName: GridRouteController
* @Description: 网格路由
* @Author: wanggeng
* @Date: 2021/10/20 9:33 上午
* @Version: 1.0
*/
@Api(tags = ISystemConstant.ROUTE_TAGS_PREFIX + "网格")
@Controller
@RequestMapping(ISystemConstant.ROUTE_PREFIX + "/grid")
public class GridRouteController {
@GetMapping("save")
public ModelAndView save() {
return new ModelAndView("grid/grid/save");
}
@GetMapping("update")
public ModelAndView update() {
return new ModelAndView("grid/grid/update");
}
@GetMapping("get")
public ModelAndView get() {
return new ModelAndView("grid/grid/get");
}
@GetMapping("list")
public ModelAndView list() {
return new ModelAndView("grid/grid/list");
}
}

View File

@ -0,0 +1,27 @@
package ink.wgink.module.map.controller.route.grid;
import ink.wgink.interfaces.consts.ISystemConstant;
import io.swagger.annotations.Api;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
/**
* @ClassName: GridUserRouteController
* @Description: 网格用户路由
* @Author: wanggeng
* @Date: 2021/10/20 5:44 下午
* @Version: 1.0
*/
@Api(tags = ISystemConstant.ROUTE_TAGS_PREFIX + "网格用户")
@Controller
@RequestMapping(ISystemConstant.ROUTE_PREFIX + "/grid/user")
public class GridUserRouteController {
@GetMapping("list")
public ModelAndView list() {
return new ModelAndView("grid/grid/user/list");
}
}

View File

@ -0,0 +1,31 @@
package ink.wgink.module.map.controller.staticfile;
import ink.wgink.util.ResourceUtil;
import ink.wgink.util.request.StaticResourceRequestUtil;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
/**
* @ClassName: BaiduMapStaticController
* @Description: 百度地图静态文件
* @Author: wanggeng
* @Date: 2021/10/20 10:13 上午
* @Version: 1.0
*/
@Controller
@RequestMapping("static/baidu-map")
public class BaiduMapStaticController {
@GetMapping("{fileName}")
public void root(HttpServletResponse httpServletResponse, @PathVariable("fileName") String fileName) throws IOException {
File file = ResourceUtil.getResourceFile("static/baidu-map/" + fileName);
StaticResourceRequestUtil.download(httpServletResponse, file, fileName);
}
}

View File

@ -92,5 +92,12 @@ public interface IGridDao extends IInitBaseTable {
*/
List<GridDTO> listGroup(Map<String, Object> params) throws SearchException;
/**
* 区域最后网格
*
* @param params
* @return
* @throws SearchException
*/
GridPO getAreaLastPO(Map<String, Object> params) throws SearchException;
}

View File

@ -45,6 +45,8 @@ public class GridDTO implements Serializable {
private String relationId;
@ApiModelProperty(name = "gmtCreate", value = "添加时间")
private String gmtCreate;
@ApiModelProperty(name = "gmtModified", value = "修改时间")
private String gmtModified;
@ApiModelProperty(name = "relationIdArray", value = "关联ID列表")
private List<String> relationIdArray;
@ApiModelProperty(name = "pointArray", value = "网格点列表")
@ -146,6 +148,14 @@ public class GridDTO implements Serializable {
this.gmtCreate = gmtCreate;
}
public String getGmtModified() {
return gmtModified == null ? "" : gmtModified.trim();
}
public void setGmtModified(String gmtModified) {
this.gmtModified = gmtModified;
}
public List<String> getRelationIdArray() {
if (relationIdArray == null) {
return new ArrayList<>();

View File

@ -21,10 +21,10 @@ public class GridPointDTO implements Serializable {
private static final long serialVersionUID = -2367199018377785048L;
@ApiModelProperty(name = "gridId", value = "网格ID")
private String gridId;
@ApiModelProperty(name = "pointLng", value = "点经度")
private String pointLng;
@ApiModelProperty(name = "pointLat", value = "点纬度")
private String pointLat;
@ApiModelProperty(name = "lng", value = "点经度")
private String lng;
@ApiModelProperty(name = "lat", value = "点纬度")
private String lat;
public String getGridId() {
return gridId == null ? "" : gridId.trim();
@ -34,20 +34,20 @@ public class GridPointDTO implements Serializable {
this.gridId = gridId;
}
public String getPointLng() {
return pointLng == null ? "" : pointLng.trim();
public String getLng() {
return lng == null ? "" : lng.trim();
}
public void setPointLng(String pointLng) {
this.pointLng = pointLng;
public void setLng(String lng) {
this.lng = lng;
}
public String getPointLat() {
return pointLat == null ? "" : pointLat.trim();
public String getLat() {
return lat == null ? "" : lat.trim();
}
public void setPointLat(String pointLat) {
this.pointLat = pointLat;
public void setLat(String lat) {
this.lat = lat;
}
@Override
@ -56,9 +56,9 @@ public class GridPointDTO implements Serializable {
sb.append("\"gridId\":\"")
.append(gridId).append('\"');
sb.append(",\"lng\":\"")
.append(pointLng).append('\"');
.append(lng).append('\"');
sb.append(",\"lat\":\"")
.append(pointLat).append('\"');
.append(lat).append('\"');
sb.append('}');
return sb.toString();
}

View File

@ -0,0 +1,76 @@
package ink.wgink.module.map.pojo.dtos.grid;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
/**
* @ClassName: GridUserDTO
* @Description: 网格用户
* @Author: wanggeng
* @Date: 2021/10/20 5:46 下午
* @Version: 1.0
*/
@ApiModel
public class GridUserDTO {
@ApiModelProperty(name = "gridId", value = "网格ID")
private String gridId;
@ApiModelProperty(name = "userId", value = "用户ID")
private String userId;
@ApiModelProperty(name = "userUsername", value = "用户名")
private String userUsername;
@ApiModelProperty(name = "userName", value = "用户昵称")
private String userName;
@ApiModelProperty(name = "userPhone", value = "用户电话")
private String userPhone;
@ApiModelProperty(name = "gmtCreate", value = "添加时间")
private String gmtCreate;
public String getGridId() {
return gridId == null ? "" : gridId.trim();
}
public void setGridId(String gridId) {
this.gridId = gridId;
}
public String getUserId() {
return userId == null ? "" : userId.trim();
}
public void setUserId(String userId) {
this.userId = userId;
}
public String getUserUsername() {
return userUsername == null ? "" : userUsername.trim();
}
public void setUserUsername(String userUsername) {
this.userUsername = userUsername;
}
public String getUserName() {
return userName == null ? "" : userName.trim();
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserPhone() {
return userPhone == null ? "" : userPhone.trim();
}
public void setUserPhone(String userPhone) {
this.userPhone = userPhone;
}
public String getGmtCreate() {
return gmtCreate == null ? "" : gmtCreate.trim();
}
public void setGmtCreate(String gmtCreate) {
this.gmtCreate = gmtCreate;
}
}

View File

@ -18,10 +18,10 @@ public class GridPointVO {
@ApiModelProperty(name = "gridId", value = "网格ID")
private String gridId;
@ApiModelProperty(name = "pointLng", value = "经度")
private String pointLng;
@ApiModelProperty(name = "pointLat", value = "纬度")
private String pointLat;
@ApiModelProperty(name = "lng", value = "经度")
private String lng;
@ApiModelProperty(name = "lat", value = "纬度")
private String lat;
public String getGridId() {
return gridId == null ? "" : gridId.trim();
@ -31,20 +31,20 @@ public class GridPointVO {
this.gridId = gridId;
}
public String getPointLng() {
return pointLng == null ? "" : pointLng.trim();
public String getLng() {
return lng == null ? "" : lng.trim();
}
public void setPointLng(String pointLng) {
this.pointLng = pointLng;
public void setLng(String lng) {
this.lng = lng;
}
public String getPointLat() {
return pointLat == null ? "" : pointLat.trim();
public String getLat() {
return lat == null ? "" : lat.trim();
}
public void setPointLat(String pointLat) {
this.pointLat = pointLat;
public void setLat(String lat) {
this.lat = lat;
}
@Override
@ -53,9 +53,9 @@ public class GridPointVO {
sb.append("\"gridId\":\"")
.append(gridId).append('\"');
sb.append(",\"lng\":\"")
.append(pointLng).append('\"');
.append(lng).append('\"');
sb.append(",\"lat\":\"")
.append(pointLat).append('\"');
.append(lat).append('\"');
sb.append('}');
return sb.toString();
}

View File

@ -1,5 +1,8 @@
package ink.wgink.module.map.pojo.vos.grid;
import ink.wgink.annotation.CheckBeanAnnotation;
import ink.wgink.annotation.CheckEmptyAnnotation;
import ink.wgink.annotation.CheckNullAnnotation;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
@ -7,9 +10,6 @@ import java.util.ArrayList;
import java.util.List;
/**
* When you feel like quitting. Think about why you started
* 当你想要放弃的时候想想当初你为何开始
*
* @ClassName: BaiduGridVO
* @Description: 百度地图网格
* @Author: WangGeng
@ -21,14 +21,23 @@ public class GridVO {
@ApiModelProperty(name = "id", value = "网格ID")
private String id;
@ApiModelProperty(name = "fillColor", value = "填充颜色")
private String fillColor;
@ApiModelProperty(name = "gridName", value = "网格名称")
@CheckEmptyAnnotation(name = "网格名称")
private String gridName;
@ApiModelProperty(name = "relationIdArray", value = "关联ID列表")
private List<String> relationIdArray;
@ApiModelProperty(name = "pointArray", value = "网格点列表")
private List<GridPointVO> pointArray;
@ApiModelProperty(name = "gridSummary", value = "网格描述")
private String gridSummary;
@ApiModelProperty(name = "gridGroupId", value = "网格组ID")
private String gridGroupId;
@ApiModelProperty(name = "gridDuty", value = "网格职责")
private String gridDuty;
@ApiModelProperty(name = "areaCode", value = "区域编码")
private String areaCode;
@ApiModelProperty(name = "areaName", value = "区域名称")
private String areaName;
@ApiModelProperty(name = "grids", value = "网格列表")
@CheckNullAnnotation(name = "网格")
@CheckBeanAnnotation
private Grid grid;
public String getId() {
return id == null ? "" : id.trim();
@ -38,14 +47,6 @@ public class GridVO {
this.id = id;
}
public String getFillColor() {
return fillColor == null ? "" : fillColor.trim();
}
public void setFillColor(String fillColor) {
this.fillColor = fillColor;
}
public String getGridName() {
return gridName == null ? "" : gridName.trim();
}
@ -54,42 +55,86 @@ public class GridVO {
this.gridName = gridName;
}
public List<String> getRelationIdArray() {
if (relationIdArray == null) {
return new ArrayList<>();
public String getGridSummary() {
return gridSummary == null ? "" : gridSummary.trim();
}
public void setGridSummary(String gridSummary) {
this.gridSummary = gridSummary;
}
public String getGridGroupId() {
return gridGroupId == null ? "" : gridGroupId.trim();
}
public void setGridGroupId(String gridGroupId) {
this.gridGroupId = gridGroupId;
}
public String getGridDuty() {
return gridDuty == null ? "" : gridDuty.trim();
}
public void setGridDuty(String gridDuty) {
this.gridDuty = gridDuty;
}
public String getAreaCode() {
return areaCode == null ? "" : areaCode.trim();
}
public void setAreaCode(String areaCode) {
this.areaCode = areaCode;
}
public String getAreaName() {
return areaName == null ? "" : areaName.trim();
}
public void setAreaName(String areaName) {
this.areaName = areaName;
}
public Grid getGrid() {
return grid;
}
public void setGrid(Grid grid) {
this.grid = grid;
}
public static class Grid {
@ApiModelProperty(name = "fillColor", value = "填充颜色")
private String fillColor;
@ApiModelProperty(name = "relationIdArray", value = "关联ID列表")
private List<String> relationIdArray;
@ApiModelProperty(name = "pointArray", value = "网格点列表")
@CheckEmptyAnnotation(name = "网格点列表")
private List<GridPointVO> pointArray;
public String getFillColor() {
return fillColor == null ? "" : fillColor.trim();
}
return relationIdArray;
}
public void setRelationIdArray(List<String> relationIdArray) {
this.relationIdArray = relationIdArray;
}
public List<GridPointVO> getPointArray() {
if (pointArray == null) {
return new ArrayList<>();
public void setFillColor(String fillColor) {
this.fillColor = fillColor;
}
public List<String> getRelationIdArray() {
return relationIdArray == null ? new ArrayList<>() : relationIdArray;
}
public void setRelationIdArray(List<String> relationIdArray) {
this.relationIdArray = relationIdArray;
}
public List<GridPointVO> getPointArray() {
return pointArray == null ? new ArrayList<>() : pointArray;
}
public void setPointArray(List<GridPointVO> pointArray) {
this.pointArray = pointArray;
}
return pointArray;
}
public void setPointArray(List<GridPointVO> pointArray) {
this.pointArray = pointArray;
}
@Override
public String toString() {
final StringBuilder sb = new StringBuilder("{");
sb.append("\"id\":\"")
.append(id).append('\"');
sb.append(",\"fillColor\":\"")
.append(fillColor).append('\"');
sb.append(",\"gridName\":\"")
.append(gridName).append('\"');
sb.append(",\"relationIdArray\":")
.append(relationIdArray);
sb.append(",\"pointArray\":")
.append(pointArray);
sb.append('}');
return sb.toString();
}
}

View File

@ -23,13 +23,28 @@ public interface IGridRelationService {
void save(String gridId, List<String> relationIdArray);
/**
* 删除网格
* 删除网格关联
*
* @param gridId
*/
void delete(String gridId);
/**
* 删除网格关联
*
* @param gridId 网格ID
* @param relationId 关联ID
*/
void delete(String gridId, String relationId);
/**
* 删除网格关联
*
* @param gridId 网格ID
* @param relationIds 关联ID列表
*/
void delete(String gridId, List<String> relationIds);
/**
* 删除网格关联
*
@ -99,4 +114,13 @@ public interface IGridRelationService {
* @return
*/
List<String> listGridId(List<String> relationIds);
/**
* 网格关联ID列表
*
* @param gridId
* @return
*/
List<String> listRelationId(String gridId);
}

View File

@ -165,4 +165,13 @@ public interface IGridService {
* @return
*/
SuccessResultList<List<GridDTO>> listPage(ListPage page);
/**
* 网格排除查询网格
*
* @param gridId 排除的网格ID
* @param params
* @return
*/
List<GridDTO> listExcept(String gridId, Map<String, Object> params);
}

View File

@ -0,0 +1,63 @@
package ink.wgink.module.map.service.grid;
import ink.wgink.module.map.pojo.dtos.grid.GridUserDTO;
import ink.wgink.pojo.ListPage;
import ink.wgink.pojo.result.SuccessResultList;
import ink.wgink.pojo.vos.IdsVO;
import java.util.List;
import java.util.Map;
/**
* @ClassName: IGridUserService
* @Description: 网格用户
* @Author: wanggeng
* @Date: 2021/10/20 5:43 下午
* @Version: 1.0
*/
public interface IGridUserService {
/**
* 删除网格用户
*
* @param gridId
* @param userIds
*/
void delete(String gridId, List<String> userIds);
/**
* 修改网格用户
*
* @param gridId
* @param idsVO
*/
void update(String gridId, IdsVO idsVO);
/**
* 网格用户ID列表
*
* @param gridId
* @param params
* @return
*/
List<String> listUserId(String gridId, Map<String, Object> params);
/**
* 网格用户列表
*
* @param gridId
* @param params
* @return
*/
List<GridUserDTO> list(String gridId, Map<String, Object> params);
/**
* 网格用户分页列表
*
* @param gridId
* @param page
* @return
*/
SuccessResultList<List<GridUserDTO>> listPage(String gridId, ListPage page);
}

View File

@ -35,8 +35,8 @@ public class GridPointServiceImpl extends DefaultBaseService implements IGridPoi
Map<String, Object> params = getHashMap(4);
params.put("gridId", gridId);
for (GridPointVO gridPointVO : pointArray) {
params.put("lng", gridPointVO.getPointLng());
params.put("lat", gridPointVO.getPointLat());
params.put("lng", gridPointVO.getLng());
params.put("lat", gridPointVO.getLat());
gridPointDao.save(params);
}
}

View File

@ -30,12 +30,20 @@ public class GridRelationServiceImpl extends DefaultBaseService implements IGrid
}
Map<String, Object> params = getHashMap(4);
params.put("gridId", gridId);
setSaveInfo(params);
for (String relationId : relationIdArray) {
params.put("relationId", relationId);
gridRelationDao.save(params);
}
}
@Override
public void delete(String gridId) {
Map<String, Object> params = getHashMap(2);
params.put("gridId", gridId);
gridRelationDao.delete(params);
}
@Override
public void delete(String gridId, String relationId) throws RemoveException {
Map<String, Object> params = getHashMap(4);
@ -44,6 +52,14 @@ public class GridRelationServiceImpl extends DefaultBaseService implements IGrid
gridRelationDao.delete(params);
}
@Override
public void delete(String gridId, List<String> relationIds) {
Map<String, Object> params = getHashMap(4);
params.put("gridId", gridId);
params.put("relationIds", relationIds);
gridRelationDao.delete(params);
}
@Override
public void deleteByGridIds(List<String> gridIds) {
Map<String, Object> params = getHashMap(2);
@ -103,6 +119,12 @@ public class GridRelationServiceImpl extends DefaultBaseService implements IGrid
return listGridIdByGridRelation(gridRelationDTOs);
}
@Override
public List<String> listRelationId(String gridId) {
List<GridRelationDTO> gridRelationDTOs = listByGridId(gridId);
return listRelationIdByGridRelation(gridRelationDTOs);
}
/**
* 获取网格ID列表
*
@ -120,4 +142,21 @@ public class GridRelationServiceImpl extends DefaultBaseService implements IGrid
return new ArrayList<>(gridIdSet);
}
/**
* 获取网格ID列表
*
* @param gridRelationDTOs
* @return
*/
private List<String> listRelationIdByGridRelation(List<GridRelationDTO> gridRelationDTOs) {
if (gridRelationDTOs.isEmpty()) {
return new ArrayList<>();
}
Set<String> relationIdSet = new HashSet<>();
gridRelationDTOs.forEach(gridRelationDTO -> {
relationIdSet.add(gridRelationDTO.getRelationId());
});
return new ArrayList<>(relationIdSet);
}
}

View File

@ -16,8 +16,11 @@ import ink.wgink.module.map.service.grid.IGridRelationService;
import ink.wgink.module.map.service.grid.IGridService;
import ink.wgink.pojo.ListPage;
import ink.wgink.pojo.result.SuccessResultList;
import ink.wgink.util.ArrayListUtil;
import ink.wgink.util.UUIDUtil;
import ink.wgink.util.map.HashMapUtil;
import ink.wgink.util.point.Point;
import ink.wgink.util.point.PointUtil;
import ink.wgink.util.string.WStringUtil;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
@ -53,13 +56,18 @@ public class GridServiceImpl extends DefaultBaseService implements IGridService
@Override
public String saveAndReturnId(GridVO gridVO) throws Exception {
String gridId = UUIDUtil.getUUID();
List<String> relationIdArray = gridVO.getRelationIdArray();
List<GridPointVO> pointArray = gridVO.getPointArray();
List<String> relationIdArray = gridVO.getGrid().getRelationIdArray();
List<GridPointVO> pointArray = gridVO.getGrid().getPointArray();
// 保存网格
Map<String, Object> params = HashMapUtil.beanToMap(gridVO);
params.put("gridSquare", getSquare(pointArray));
params.put("fillColor", gridVO.getGrid().getFillColor());
GridPO areaLastPO = getAreaLastPO(gridVO.getAreaCode());
params.put("gridCode", areaLastPO == null ? String.format("%s001", gridVO.getAreaCode().substring(0, 12)) : Long.valueOf(areaLastPO.getGridCode()) + 1);
params.put("gridId", gridId);
params.remove("relationIdArray");
params.remove("pointArray");
params.remove("grid");
setSaveInfo(params);
gridDao.save(params);
// 保存拓展属性
@ -134,14 +142,26 @@ public class GridServiceImpl extends DefaultBaseService implements IGridService
@Override
public void update(String gridId, GridVO gridVO) throws Exception {
GridVO.Grid grid = gridVO.getGrid();
Map<String, Object> params = HashMapUtil.beanToMap(gridVO);
params.put("fillColor", gridVO.getGrid().getFillColor());
params.put("gridSquare", getSquare(grid.getPointArray()));
params.put("gridId", gridId);
setUpdateInfo(params);
gridDao.update(params);
// 删除原有节点
gridPointService.deleteByGridId(gridId);
// 新增原有节点
gridPointService.save(gridId, grid.getPointArray());
}
@Override
public GridDTO get(Map<String, Object> params) {
return gridDao.get(params);
GridDTO gridDTO = gridDao.get(params);
setGridPoints(gridDTO);
setGridRelation(gridDTO);
return gridDTO;
}
@Override
@ -165,7 +185,7 @@ public class GridServiceImpl extends DefaultBaseService implements IGridService
@Override
public List<GridDTO> list(Map<String, Object> params) {
List<GridDTO> gridDTOs = gridDao.list(params);
List<GridDTO> gridDTOs = ArrayListUtil.deepClone(gridDao.list(params), GridDTO.class);
setGridPoints(gridDTOs);
setGridRelation(gridDTOs);
return gridDTOs;
@ -271,6 +291,34 @@ public class GridServiceImpl extends DefaultBaseService implements IGridService
return new SuccessResultList<>(gridDTOs, pageInfo.getPageNum(), pageInfo.getTotal());
}
@Override
public List<GridDTO> listExcept(String gridId, Map<String, Object> params) {
List<GridDTO> gridDTOs = list(params);
for (GridDTO gridDTO : gridDTOs) {
if (StringUtils.equals(gridId, gridDTO.getGridId())) {
gridDTOs.remove(gridDTO);
break;
}
}
return gridDTOs;
}
/**
* 设置网格点
*
* @param gridDTO
*/
private void setGridPoints(GridDTO gridDTO) {
if (gridDTO == null) {
return;
}
List<GridPointDTO> gridPointDTOs = gridPointService.list(gridDTO.getGridId());
List<GridPointDTO> pointArray = new ArrayList<>();
for (GridPointDTO gridPointDTO : gridPointDTOs) {
pointArray.add(gridPointDTO);
}
gridDTO.setPointArray(pointArray);
}
/**
* 设置网格点
@ -302,6 +350,23 @@ public class GridServiceImpl extends DefaultBaseService implements IGridService
}
}
/**
* 设置关联
*
* @param gridDTO
*/
private void setGridRelation(GridDTO gridDTO) {
if (gridDTO == null) {
return;
}
List<GridRelationDTO> gridRelationDTOs = gridRelationService.listByGridId(gridDTO.getGridId());
List<String> gridRelationIds = gridDTO.getRelationIdArray();
for (GridRelationDTO gridRelationDTO : gridRelationDTOs) {
gridRelationIds.add(gridRelationDTO.getRelationId());
}
gridDTO.setRelationIdArray(gridRelationIds);
}
/**
* 设置关联
*
@ -357,4 +422,31 @@ public class GridServiceImpl extends DefaultBaseService implements IGridService
return gridGroups;
}
/**
* 得到面积单位平方米
*
* @param gridPointVOs
* @return
*/
private Double getSquare(List<GridPointVO> gridPointVOs) {
List<Point> points = new ArrayList<>();
for (GridPointVO gridPointVO : gridPointVOs) {
Point point = new Point(Double.valueOf(gridPointVO.getLng()), Double.valueOf(gridPointVO.getLat()));
points.add(point);
}
return PointUtil.getSqua(points);
}
/**
* 区域最后网格
*
* @param areaCode
* @return
*/
private GridPO getAreaLastPO(String areaCode) {
Map<String, Object> params = getHashMap(2);
params.put("areaCode", areaCode);
return gridDao.getAreaLastPO(params);
}
}

View File

@ -0,0 +1,96 @@
package ink.wgink.module.map.service.grid.impl;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import ink.wgink.common.base.DefaultBaseService;
import ink.wgink.interfaces.user.IUserBaseService;
import ink.wgink.module.map.pojo.dtos.grid.GridRelationDTO;
import ink.wgink.module.map.pojo.dtos.grid.GridUserDTO;
import ink.wgink.module.map.service.grid.IGridRelationService;
import ink.wgink.module.map.service.grid.IGridUserService;
import ink.wgink.pojo.ListPage;
import ink.wgink.pojo.dtos.user.UserDTO;
import ink.wgink.pojo.result.SuccessResultList;
import ink.wgink.pojo.vos.IdsVO;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.*;
/**
* @ClassName: GridUserServiceImpl
* @Description: 网格用户
* @Author: wanggeng
* @Date: 2021/10/20 5:43 下午
* @Version: 1.0
*/
@Service
public class GridUserServiceImpl extends DefaultBaseService implements IGridUserService {
@Autowired
private IUserBaseService userBaseService;
@Autowired
private IGridRelationService gridRelationService;
@Override
public void delete(String gridId, List<String> userIds) {
gridRelationService.delete(gridId, userIds);
}
@Override
public void update(String gridId, IdsVO idsVO) {
// 删除全部关联关系
gridRelationService.delete(gridId);
List<String> userIds = idsVO.getIds();
if (userIds.isEmpty()) {
return;
}
gridRelationService.save(gridId, userIds);
}
@Override
public List<String> listUserId(String gridId, Map<String, Object> params) {
return gridRelationService.listRelationId(gridId);
}
@Override
public List<GridUserDTO> list(String gridId, Map<String, Object> params) {
List<GridRelationDTO> gridRelationDTOs = gridRelationService.listByGridId(gridId);
if (gridRelationDTOs.isEmpty()) {
return new ArrayList();
}
Set<String> userIdSet = new HashSet<>();
for (GridRelationDTO gridRelationDTO : gridRelationDTOs) {
userIdSet.add(gridRelationDTO.getRelationId());
}
List<UserDTO> userDTOs = userBaseService.listByUserIds(new ArrayList<>(userIdSet));
if (userDTOs.isEmpty()) {
return new ArrayList<>();
}
List<GridUserDTO> gridUserDTOs = new ArrayList<>();
for (UserDTO userDTO : userDTOs) {
GridUserDTO gridUserDTO = new GridUserDTO();
gridUserDTO.setGridId(gridId);
BeanUtils.copyProperties(userDTO, gridUserDTO);
for (GridRelationDTO gridRelationDTO : gridRelationDTOs) {
if (StringUtils.equals(gridUserDTO.getUserId(), gridRelationDTO.getRelationId())) {
gridUserDTO.setGmtCreate(gridRelationDTO.getGmtCreate());
break;
}
}
gridUserDTOs.add(gridUserDTO);
}
return gridUserDTOs;
}
@Override
public SuccessResultList<List<GridUserDTO>> listPage(String gridId, ListPage page) {
PageHelper.startPage(page.getPage(), page.getRows());
List<GridUserDTO> gridUserDTOs = list(gridId, page.getParams());
PageInfo<GridUserDTO> pageInfo = new PageInfo<>(gridUserDTOs);
return new SuccessResultList<>(gridUserDTOs, pageInfo.getPageNum(), pageInfo.getTotal());
}
}

View File

@ -18,6 +18,7 @@
<result column="fill_color" property="fillColor"/>
<result column="relation_id" property="relationId"/>
<result column="gmt_create" property="gmtCreate"/>
<result column="gmt_modified" property="gmtModified"/>
</resultMap>
<resultMap id="gridPO" type="ink.wgink.module.map.pojo.pos.grid.GridPO">
@ -109,7 +110,12 @@
modifier = #{modifier},
gmt_modified = #{gmtModified}
WHERE
grid_id = #{gridId}
<if test="gridIds != null and gridIds.size > 0">
grid_id IN
<foreach collection="gridIds" index="index" open="(" separator="," close=")">
#{gridIds[${index}]}
</foreach>
</if>
</update>
<!-- 删除网格 -->
@ -136,6 +142,18 @@
<if test="gridName != null and gridName != ''">
grid_name = #{gridName},
</if>
<if test="gridSummary != null">
grid_summary = #{gridSummary},
</if>
<if test="gridGroupId != null">
grid_group_id = #{gridGroupId},
</if>
<if test="gridDuty != null">
grid_duty = #{gridDuty},
</if>
<if test="gridSquare != null">
grid_square = #{gridSquare},
</if>
<if test="fillColor != null and fillColor != ''">
fill_color = #{fillColor},
</if>
@ -194,6 +212,11 @@
AND
grid_id = #{gridId}
</if>
<if test="keywords != null and keywords != ''">
AND (
grid_name LIKE CONCAT('%', #{keywords}, '%')
)
</if>
</select>
<!-- 网格列表 -->
@ -208,7 +231,9 @@
t1.grid_square,
t1.area_code,
t1.area_name,
t1.fill_color
t1.fill_color,
LEFT(t1.gmt_create, 19) gmt_create,
LEFT(t1.gmt_modified, 19) gmt_modified
FROM
map_grid t1
WHERE
@ -220,6 +245,10 @@
#{gridIds[${index}]}
</foreach>
</if>
<if test="areaCode != null and areaCode != ''">
AND
t1.area_code = #{areaCode}
</if>
</select>
<!-- 网格列表group -->
@ -245,4 +274,33 @@
t1.grid_name
</select>
<!-- 区域最后网格 -->
<select id="getAreaLastPO" parameterType="map" resultMap="gridPO" useCache="false">
SELECT
grid_id,
grid_name,
grid_summary,
grid_group_id,
grid_duty,
grid_code,
grid_square,
area_code,
area_name,
fill_color,
gmt_create,
creator,
gmt_modified,
modifier,
is_delete
FROM
map_grid
WHERE
is_delete = 0
AND
area_code = #{areaCode}
ORDER BY
grid_code DESC
LIMIT 1
</select>
</mapper>

View File

@ -15,8 +15,8 @@
CREATE TABLE IF NOT EXISTS `map_grid_point` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`grid_id` char(36) DEFAULT NULL COMMENT '网格ID',
`point_lng` varchar(255) DEFAULT NULL COMMENT '点经度',
`point_lat` varchar(255) DEFAULT NULL COMMENT '点维度',
`lng` varchar(255) DEFAULT NULL COMMENT '点经度',
`lat` varchar(255) DEFAULT NULL COMMENT '点维度',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='网格点';
</update>
@ -25,12 +25,12 @@
<insert id="save" parameterType="map" flushCache="true">
INSERT INTO map_grid_point(
grid_id,
point_lng,
point_lat
lng,
lat
) VALUES(
#{gridId},
#{pointLng},
#{pointLat}
#{lng},
#{lat}
)
</insert>
@ -54,8 +54,8 @@
<select id="list" parameterType="map" resultMap="gridPointDTO" useCache="true">
SELECT
grid_id,
point_lng,
point_lat
lng,
lat
FROM
map_grid_point
<where>

View File

@ -29,7 +29,7 @@
gmt_create
) VALUES(
#{gridId},
#{relationId}
#{relationId},
#{gmtCreate}
)
</insert>
@ -53,6 +53,13 @@
AND
relation_id = #{relationId}
</if>
<if test="relationIds != null and relationIds.size > 0">
AND
relation_id IN
<foreach collection="relationIds" index="index" open="(" separator="," close=")">
#{relationIds[${index}]}
</foreach>
</if>
</where>
</delete>
@ -60,7 +67,7 @@
<select id="list" parameterType="map" resultMap="gridRelationDTO" useCache="true">
SELECT
relation_id,
LEFT(gmt_create, 19) gmt_create
LEFT(gmt_create, 19) gmt_create,
grid_id
FROM
map_grid_relation

View File

@ -7,8 +7,6 @@ var mapConfig = {
onGridStopEdit: function (gridArray) {
}
}
// BMap
// BMapGL
function BaiduMap(mapId, mapConfig) {
this.map = new BMap.Map(mapId, {enableMapClick: false});
@ -849,6 +847,10 @@ BaiduMap.prototype.initGridOptionEvent = function () {
if (self.gridOption.editGrid.isEdit) {
return;
}
// 判断是否只能绘制一个网格
if(self.mapConfig.single && self.gridOption.gridArray.length > 0) {
return;
}
// 隐藏结束编辑按钮
self.hideStopOptionBtn();
var point = new BMap.Point(event.point.lng, event.point.lat);

View File

@ -0,0 +1,147 @@
<!doctype html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<base th:href="${#request.getContextPath() + '/'}">
<meta charset="utf-8">
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
<link rel="stylesheet" href="assets/fonts/font-awesome/css/font-awesome.css"/>
<link rel="stylesheet" href="assets/layuiadmin/layui/css/layui.css" media="all">
<link rel="stylesheet" href="assets/layuiadmin/style/admin.css" media="all">
<style>
.layui-form-label-up {width: 100% !important; height: 30px !important; line-height: 30px !important; border: none !important; padding: 0px !important; font-size: 15px; background-color: transparent !important; text-align: left !important;}
.layui-input-block-down {margin: 0px !important; left: 0px !important;}
.layui-input-block-down .layui-form-select .layui-edge {top: 74%;}
</style>
</head>
<body>
<div class="layui-anim layui-anim-fadein">
<div class="layui-card">
<div class="layui-card-body" style="padding: 15px;">
<form class="layui-form layui-form-pane" lay-filter="dataForm">
<div id="baiduMapContainer"></div>
</form>
</div>
</div>
</div>
<script type="text/javascript" src="http://api.map.baidu.com/api?v=3.0&ak=mlfOah4gWM1FjEo9CmlI64zK6MhyiMPW"></script>
<script type="text/javascript" src="static/baidu-map/baidu-map-1.0.0.min.js"></script>
<script src="assets/layuiadmin/layui/layui.js"></script>
<script>
layui.config({
base: 'assets/layuiadmin/' //静态资源所在路径
}).extend({
index: 'lib/index' //主入口模块
}).use(['index', 'form', 'laydate', 'laytpl'], function(){
var $ = layui.$;
var $win = $(window);
var form = layui.form;
var laytpl = layui.laytpl;
var laydate = layui.laydate;
var queryParams = top.restAjax.params(window.location.href);
var gridId = queryParams.gridId;
var centerPoint = {
lng: queryParams.cplng,
lat: queryParams.cplat
}
var baiduMap = null;
var gridMember = {
users: [],
gridArray: []
}
function closeBox() {
parent.layer.close(parent.layer.getFrameIndex(window.name));
}
// 初始化网格背景
function initGridBG(areaCode, callback) {
var layIndex;
top.restAjax.get(top.restAjax.path('api/grid/list/except/{gridId}', [gridId]), {
areaCode: areaCode
}, null, function(code, data) {
var gridArray = [];
for(var i = 0, item; item = data[i++];) {
var pointArray = [];
for(var j = 0, jItem; jItem = item.pointArray[j++];) {
pointArray.push(new BaiduMap.Point(jItem.lng, jItem.lat));
}
gridArray.push({
id: item.gridId,
label: item.gridName,
fillColor: '#ffffff',
pointArray: pointArray
})
}
baiduMap.initBackgroundGrid({
gridArray: gridArray
});
callback ? callback() : '';
}, function(code, data) {
top.dialog.msg(data.msg);
}, function () {
layIndex = top.dialog.msg(top.dataMessage.loading, {icon: 16, time: 0, shade: 0.3});
}, function () {
top.dialog.close(layIndex);
});
}
function initMap(callback) {
$('#baiduMapContainer').css({
width: '100%',
height: ($win.height() - 30) +'px'
});
baiduMap = new BaiduMap('baiduMapContainer', {
single: true,
onGridStartEdit: function(baiduMap) {
$('#confirmBtn').hide();
},
onGridStopEdit: function(gridArray) {
gridMember.gridArray = gridArray;
$('#confirmBtn').show();
}
});
baiduMap.setCenterAndZoom(centerPoint, 14);
var mapTypeControl = new BMap.MapTypeControl({
mapTypes: [BMAP_NORMAL_MAP, BMAP_SATELLITE_MAP, BMAP_HYBRID_MAP],
});
baiduMap.getMap().addControl(mapTypeControl);
baiduMap.setDefaultConfig();
baiduMap.initGridOptionEvent();
baiduMap.initColorOption();
callback ? callback() : '';
}
// 初始化内容
function initData() {
top.restAjax.get(top.restAjax.path('api/grid/get/{gridId}', [gridId]), {}, null, function(code, data) {
initMap(function() {
// 背景层
initGridBG(data.areaCode, function() {
// 网格层
var grid = new BaiduMap.Grid(data.gridId, data.pointArray);
grid.setFillColor(data.fillColor);
baiduMap.setGridArray([grid]);
});
});
}, function (code, data) {
top.dialog.msg(data.msg);
}, function() {
loadLayerIndex = top.dialog.msg(top.dataMessage.loading, {icon: 16, time: 0, shade: 0.3});
}, function() {
top.dialog.close(loadLayerIndex);
});
}
initData();
// 校验
form.verify({
});
});
</script>
</body>
</html>

View File

@ -0,0 +1,325 @@
<!doctype html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<base th:href="${#request.getContextPath() + '/'}">
<meta charset="utf-8">
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
<link rel="stylesheet" href="assets/fonts/font-awesome/css/font-awesome.css"/>
<link rel="stylesheet" href="assets/layuiadmin/layui/css/layui.css" media="all">
<link rel="stylesheet" href="assets/layuiadmin/style/admin.css" media="all">
</head>
<body>
<div class="layui-fluid layui-anim layui-anim-fadein">
<div class="layui-row">
<div class="layui-col-md12">
<div class="layui-card">
<div class="layui-card-body">
<div class="test-table-reload-btn" style="margin-bottom: 10px;">
<div class="layui-inline">
<input type="text" id="keywords" class="layui-input search-item search-item-width-100" placeholder="输入关键字">
</div>
<button type="button" id="search" class="layui-btn layui-btn-sm">
<i class="fa fa-lg fa-search"></i> 搜索
</button>
</div>
<table class="layui-hide" id="dataTable" lay-filter="dataTable"></table>
<!-- 表头按钮组 -->
<script type="text/html" id="headerToolBar">
<div class="layui-btn-group">
<button type="button" class="layui-btn layui-btn-sm" lay-event="saveEvent">
<i class="fa fa-lg fa-plus"></i> 网格绘制
</button>
<button type="button" class="layui-btn layui-btn-normal layui-btn-sm" lay-event="updateEvent">
<i class="fa fa-lg fa-edit"></i> 网格修改
</button>
<button type="button" class="layui-btn layui-btn-danger layui-btn-sm" lay-event="removeEvent">
<i class="fa fa-lg fa-trash"></i> 删除
</button>
</div>
</script>
</div>
</div>
</div>
</div>
</div>
<script src="assets/layuiadmin/layui/layui.js"></script>
<script>
layui.config({
base: 'assets/layuiadmin/'
}).extend({
index: 'lib/index'
}).use(['index', 'table', 'laydate', 'common'], function() {
var $ = layui.$;
var $win = $(window);
var table = layui.table;
var admin = layui.admin;
var laydate = layui.laydate;
var common = layui.common;
var resizeTimeout = null;
var tableUrl = 'api/grid/listpage';
var queryParams = top.restAjax.params(window.location.href);
var cplng = queryParams.cplng ? queryParams.cplng : 111.848937;
var cplat = queryParams.cplat ? queryParams.cplat : 40.904095;
// 初始化表格
function initTable() {
table.render({
elem: '#dataTable',
id: 'dataTable',
url: top.restAjax.path(tableUrl, []),
width: admin.screen() > 1 ? '100%' : '',
height: $win.height() - 90,
limit: 20,
limits: [20, 40, 60, 80, 100, 200],
toolbar: '#headerToolBar',
request: {
pageName: 'page',
limitName: 'rows'
},
cols: [
[
{type:'checkbox', fixed: 'left'},
{field:'rowNum', width:80, title: '序号', fixed: 'left', align:'center', templet: '<span>{{d.LAY_INDEX}}</span>'},
{field: 'gridName', width: 120, title: '网格名称', align:'center',
templet: function(row) {
var rowData = row[this.field];
if(typeof(rowData) === 'undefined' || rowData == null || rowData == '') {
return '-';
}
return rowData;
}
},
{field: 'gridDuty', width: 120, title: '职责', align:'center',
templet: function(row) {
var rowData = row[this.field];
if(typeof(rowData) === 'undefined' || rowData == null || rowData == '') {
return '-';
}
return rowData;
}
},
{field: 'gridSummary', width: 180, title: '描述', align:'center',
templet: function(row) {
var rowData = row[this.field];
if(typeof(rowData) === 'undefined' || rowData == null || rowData == '') {
return '-';
}
return rowData;
}
},
{field: 'gridCode', width: 180, title: '网格编码', align:'center',
templet: function(row) {
var rowData = row[this.field];
if(typeof(rowData) === 'undefined' || rowData == null || rowData == '') {
return '-';
}
return rowData;
}
},
{field: 'areaName', width: 180, title: '地区名称', align:'center',
templet: function(row) {
var rowData = row[this.field];
if(typeof(rowData) === 'undefined' || rowData == null || rowData == '') {
return '-';
}
return rowData;
}
},
{field: 'areaCode', width: 180, title: '地区编码', align:'center',
templet: function(row) {
var rowData = row[this.field];
if(typeof(rowData) === 'undefined' || rowData == null || rowData == '') {
return '-';
}
return rowData;
}
},
{field: 'gridSquare', width: 180, title: '单元网格面积', align:'center',
templet: function(row) {
var rowData = row[this.field];
if(typeof(rowData) === 'undefined' || rowData == null || rowData == '') {
return '-';
}
return rowData + ' ㎡';
}
},
{field: 'gmtCreate', width: 180, title: '创建时间', align:'center',
templet: function(row) {
var rowData = row[this.field];
if(typeof(rowData) === 'undefined' || rowData == null || rowData == '') {
return '-';
}
return rowData;
}
},
{field: 'gmtModified', width: 180, title: '修改时间', align:'center',
templet: function(row) {
var rowData = row[this.field];
if(typeof(rowData) === 'undefined' || rowData == null || rowData == '') {
return '-';
}
return rowData;
}
},
{field: 'operation', width: 150, title: '操作', align:'center', fixed: 'right',
templet: function(row) {
return '<div class="layui-btn-group">' +
'<button class="layui-btn layui-btn-xs" lay-event="gridEvent">查看网格</button>' +
'<button class="layui-btn layui-btn-primary layui-btn-xs" lay-event="userEvent">网格人员</button>' +
'</div>';
}
}
]
],
page: true,
parseData: function(data) {
return {
'code': 0,
'msg': '',
'count': data.total,
'data': data.rows
};
}
});
}
// 重载表格
function reloadTable(currentPage) {
table.reload('dataTable', {
url: top.restAjax.path(tableUrl, []),
where: {
keywords: $('#keywords').val(),
startTime: $('#startTime').val(),
endTime: $('#endTime').val()
},
page: {
curr: currentPage
},
height: $win.height() - 90,
});
}
// 初始化日期
function initDate() {
// 日期选择
laydate.render({
elem: '#startTime',
format: 'yyyy-MM-dd'
});
laydate.render({
elem: '#endTime',
format: 'yyyy-MM-dd'
});
}
// 删除
function removeData(ids) {
top.dialog.msg(top.dataMessage.delete, {
time: 0,
btn: [top.dataMessage.button.yes, top.dataMessage.button.no],
shade: 0.3,
yes: function (index) {
top.dialog.close(index);
var layIndex;
top.restAjax.delete(top.restAjax.path('api/grid/remove/{ids}', [ids]), {}, null, function (code, data) {
top.dialog.msg(top.dataMessage.deleteSuccess, {time: 1000});
reloadTable();
}, function (code, data) {
top.dialog.msg(data.msg);
}, function () {
layIndex = top.dialog.msg(top.dataMessage.deleting, {icon: 16, time: 0, shade: 0.3});
}, function () {
top.dialog.close(layIndex);
});
}
});
}
initTable();
initDate();
// 事件 - 页面变化
$win.on('resize', function() {
clearTimeout(resizeTimeout);
resizeTimeout = setTimeout(function() {
reloadTable();
}, 500);
});
// 事件 - 搜索
$(document).on('click', '#search', function() {
reloadTable(1);
});
// 事件 - 增删改
table.on('toolbar(dataTable)', function(obj) {
var layEvent = obj.event;
var checkStatus = table.checkStatus('dataTable');
var checkDatas = checkStatus.data;
if(layEvent === 'saveEvent') {
layer.open({
type: 2,
title: false,
closeBtn: 0,
area: ['100%', '100%'],
shadeClose: true,
anim: 2,
content: top.restAjax.path('route/grid/save?cplng={cplng}&cplat={cplat}', [cplng, cplat]),
end: function() {
reloadTable();
}
});
} else if(layEvent === 'updateEvent') {
if(checkDatas.length === 0) {
top.dialog.msg(top.dataMessage.table.selectEdit);
} else if(checkDatas.length > 1) {
top.dialog.msg(top.dataMessage.table.selectOneEdit);
} else {
layer.open({
type: 2,
title: false,
closeBtn: 0,
area: ['100%', '100%'],
shadeClose: true,
anim: 2,
content: top.restAjax.path('route/grid/update?gridId={gridId}&cplng={cplng}&cplat={cplat}', [checkDatas[0].gridId, cplng, cplat]),
end: function () {
reloadTable();
}
});
}
} else if(layEvent === 'removeEvent') {
if(checkDatas.length === 0) {
top.dialog.msg(top.dataMessage.table.selectDelete);
} else {
var ids = '';
for(var i = 0, item; item = checkDatas[i++];) {
if(i > 1) {
ids += '_';
}
ids += item['gridId'];
}
removeData(ids);
}
}
});
table.on('tool(dataTable)', function(obj) {
var data = obj.data;
var layEvent = obj.event;
if(layEvent === 'gridEvent') {
top.dialog.open({
url: top.restAjax.path('route/grid/get?gridId={gridId}&cplng={cplng}&cplat={cplat}', [data.gridId, cplng, cplat]),
title: '【'+ data.gridName +'】网格',
width: '80%',
height: '80%',
onClose: function() {}
});
} else if(layEvent === 'userEvent') {
top.dialog.open({
url: top.restAjax.path('route/grid/user/list?gridId={gridId}', [data.gridId]),
title: '【'+ data.gridName +'】网格的用户列表',
width: '800px',
height: '500px',
onClose: function() {}
});
}
})
});
</script>
</body>
</html>

View File

@ -0,0 +1,351 @@
<!doctype html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<base th:href="${#request.getContextPath() + '/'}">
<meta charset="utf-8">
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
<link rel="stylesheet" href="assets/fonts/font-awesome/css/font-awesome.css"/>
<link rel="stylesheet" href="assets/layuiadmin/layui/css/layui.css" media="all">
<link rel="stylesheet" href="assets/layuiadmin/style/admin.css" media="all">
<style>
.layui-form-label-up {width: 100% !important; height: 30px !important; line-height: 30px !important; border: none !important; padding: 0px !important; font-size: 15px; background-color: transparent !important; text-align: left !important;}
.layui-input-block-down {margin: 0px !important; left: 0px !important;}
.layui-input-block-down .layui-form-select .layui-edge {top: 74%;}
</style>
</head>
<body>
<div class="layui-fluid layui-anim layui-anim-fadein">
<div class="layui-card">
<div class="layui-card-header">
<span class="layui-breadcrumb" lay-filter="breadcrumb" style="visibility: visible;">
<a class="close" href="javascript:void(0);">上级列表</a><span lay-separator="">/</span>
<a href="javascript:void(0);"><cite>新增内容</cite></a>
</span>
</div>
<div class="layui-card-body" style="padding: 15px; position: relative; overflow: hidden;">
<form class="layui-form layui-form-pane" lay-filter="dataForm">
<div class="layui-row layui-col-space15">
<div id="formContainer" class="layui-col-xs2">
<div class="layui-form-item">
<label class="layui-form-label layui-form-label-up">网格组</label>
<div class="layui-input-block layui-input-block-down layui-form" id="gridGroupIdTemplateBox" lay-filter="gridGroupIdTemplateBox"></div>
<script id="gridGroupIdTemplate" type="text/html">
<select id="gridGroupId" name="gridGroupId" lay-filter="gridGroupId">
<option value="">选择网格组</option>
{{# for(var i = 0, item; item = d[i++];) { }}
<option value="{{item.gridGroupId}}">{{item.gridGroupName}}</option>
{{# } }}
</select>
</script>
</div>
<div class="layui-form-item">
<label class="layui-form-label layui-form-label-up">网格名称</label>
<div class="layui-input-block layui-input-block-down">
<input type="text" id="gridName" name="gridName" class="layui-input" value="" placeholder="请输入网格名称" maxlength="255" lay-verify="required">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label layui-form-label-up">网格描述</label>
<div class="layui-input-block layui-input-block-down">
<input type="text" id="gridSummary" name="gridSummary" class="layui-input" value="" placeholder="请输入网格描述" maxlength="255" lay-verify="required">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label layui-form-label-up">网格职责</label>
<div class="layui-input-block layui-input-block-down">
<input type="text" id="gridDuty" name="gridDuty" class="layui-input" value="" placeholder="请输入网格职责" maxlength="255" lay-verify="required">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label layui-form-label-up">选择地区</label>
<div class="layui-input-block layui-input-block-down">
<input type="hidden" id="areaCode" name="areaCode">
<input type="text" id="areaName" name="areaName" class="layui-input" value="" placeholder="请选择地区" maxlength="255" readonly lay-verify="required">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label layui-form-label-up">添加人员</label>
<div class="layui-input-block layui-input-block-down">
<input type="hidden" id="userIds" name="userIds">
<input type="text" id="userNames" name="userNames" class="layui-input" value="" placeholder="选择人员" maxlength="255" readonly>
</div>
</div>
<div class="layui-form-item layui-layout-admin">
<div class="layui-input-block">
<div class="layui-footer" style="left: 0;">
<button id="confirmBtn" type="button" class="layui-btn" lay-submit lay-filter="submitForm">提交编辑</button>
<button type="button" class="layui-btn layui-btn-primary close">返回上级</button>
</div>
</div>
</div>
</div>
<div class="layui-col-xs10">
<div id="baiduMapContainer"></div>
</div>
</div>
</form>
</div>
</div>
</div>
<script type="text/javascript" src="http://api.map.baidu.com/api?v=3.0&ak=mlfOah4gWM1FjEo9CmlI64zK6MhyiMPW"></script>
<script type="text/javascript" src="static/baidu-map/baidu-map-1.0.0.min.js"></script>
<script src="assets/layuiadmin/layui/layui.js"></script>
<script>
layui.config({
base: 'assets/layuiadmin/' //静态资源所在路径
}).extend({
index: 'lib/index' //主入口模块
}).use(['index', 'form', 'laydate', 'laytpl'], function(){
var $ = layui.$;
var $win = $(window);
var form = layui.form;
var laytpl = layui.laytpl;
var laydate = layui.laydate;
var queryParams = top.restAjax.params(window.location.href);
var centerPoint = {
lng: queryParams.cplng,
lat: queryParams.cplat
}
var baiduMap = null;
var gridMember = {
users: [],
gridArray: []
}
function closeBox() {
parent.layer.close(parent.layer.getFrameIndex(window.name));
}
function initSelectRadioCheckboxTemplate(templateId, templateBoxId, data, callback) {
laytpl(document.getElementById(templateId).innerHTML).render(data, function(html) {
document.getElementById(templateBoxId).innerHTML = html;
});
form.render('select', templateBoxId);
if(callback) {
callback();
}
}
// 初始化网格组下拉选择
function initGridGroupSelect(selectValue) {
top.restAjax.get(top.restAjax.path('api/grid-group/list', []), {
}, null, function(code, data, args) {
initSelectRadioCheckboxTemplate('gridGroupIdTemplate', 'gridGroupIdTemplateBox', data, function() {
var selectObj = {};
selectObj['gridGroupId'] = selectValue;
form.val('dataForm', selectObj);
});
}, function(code, data) {
top.dialog.msg(data.msg);
});
}
function initMap() {
$('#formContainer').css({
height: ($win.height() - 145) +'px',
overflow: 'auto'
})
$('#baiduMapContainer').css({
width: '100%',
height: ($win.height() - 145) +'px'
});
baiduMap = new BaiduMap('baiduMapContainer', {
single: true,
onGridStartEdit: function(baiduMap) {
if(!$('#areaCode').val()) {
top.dialog.msg('请选择地区');
return false;
}
$('#confirmBtn').hide();
},
onGridStopEdit: function(gridArray) {
gridMember.gridArray = gridArray;
$('#confirmBtn').show();
}
});
baiduMap.setCenterAndZoom(centerPoint, 14);
var mapTypeControl = new BMap.MapTypeControl({
mapTypes: [BMAP_NORMAL_MAP, BMAP_SATELLITE_MAP, BMAP_HYBRID_MAP],
});
baiduMap.getMap().addControl(mapTypeControl);
baiduMap.setDefaultConfig();
baiduMap.initGridOption();
baiduMap.initGridOptionEvent();
baiduMap.initColorOption();
}
// 初始化内容
function initData() {
initGridGroupSelect();
initMap();
}
initData();
// 初始化网格背景
function initGridBG(areaCode) {
baiduMap.clearMap();
var layIndex;
top.restAjax.get(top.restAjax.path('api/grid/list', []), {
areaCode: areaCode
}, null, function(code, data) {
var gridArray = [];
for(var i = 0, item; item = data[i++];) {
var pointArray = [];
for(var j = 0, jItem; jItem = item.pointArray[j++];) {
pointArray.push(new BaiduMap.Point(jItem.lng, jItem.lat));
}
gridArray.push({
id: item.gridId,
label: item.gridName,
fillColor: item.fillColor,
pointArray: pointArray
})
}
baiduMap.initBackgroundGrid({
gridArray: gridArray
});
}, function(code, data) {
top.dialog.msg(data.msg);
}, function () {
layIndex = top.dialog.msg(top.dataMessage.loading, {icon: 16, time: 0, shade: 0.3});
}, function () {
top.dialog.close(layIndex);
});
}
// 初始化编辑网格
function initEditGrid(areaCode, userIds) {
baiduMap.clearMap();
var layIndex;
top.restAjax.get(top.restAjax.path('api/grid/list', []), {
areaCode: areaCode,
userIds: userIds ? userIds : ''
}, null, function(code, data) {
var grids = [];
for(var i = 0, item; item = data[i++];) {
grids.push(item.grid);
}
// 设置编辑网格
baiduMap.setGridArray(grids);
}, function(code, data) {
top.dialog.msg(data.msg);
}, function () {
layIndex = top.dialog.msg(top.dataMessage.loading, {icon: 16, time: 0, shade: 0.3});
}, function () {
top.dialog.close(layIndex);
});
}
$('#areaName').on('click', function() {
top.dialog.open({
title: '选择地区',
url: top.restAjax.path('route/area/get-select?areaName={areaName}', [encodeURI($('#areaName').val())]),
width: '600px',
height: '225px',
onClose: function() {
var selectedAreaArray = top.dialog.dialogData.selectedAreaArray;
var areaCode = '';
var areaName = '';
if(selectedAreaArray.length > 0) {
areaCode = selectedAreaArray[selectedAreaArray.length - 1].areaCode;
for(var i = 0, item; item = selectedAreaArray[i++];) {
if(areaName) {
areaName += '/';
}
areaName += item.areaName;
}
initGridBG(areaCode);
}
$('#areaCode').val(areaCode);
$('#areaName').val(areaName);
}
})
});
$('#userNames').on('click', function() {
top.dialog.dialogData.selectedUserIds = $('#userIds').val();
top.dialog.open({
url: top.restAjax.path('route/department/user/select-user', []),
title: '选择用户',
width: '500px',
height: '500px',
onClose: function() {
var selectedUsers = top.dialog.dialogData.selectedDepartmentUsers;
// 这里写处理逻辑
var userIds = '';
var userNames = '';
if(selectedUsers && selectedUsers.length > 0) {
var relationArray = [];
for(var i = 0, item; item = selectedUsers[i++];) {
if(userIds) {
userIds += '_';
}
if(userNames) {
userNames += ',';
}
userIds += item.userId;
userNames += item.userName;
relationArray.push(new BaiduMap.Relation(item.userId, item.userName));
}
gridMember.users = relationArray;
}
$('#userIds').val(userIds);
$('#userNames').val(userNames);
}
})
});
// 提交表单
form.on('submit(submitForm)', function(formData) {
if(gridMember.gridArray.length == 0) {
top.dialog.msg('请添加网格');
return;
}
formData.field.grid = gridMember.gridArray[0];
var relationIdArray = [];
for(var i = 0, item; item = gridMember.users[i++];) {
relationIdArray.push(item.id);
}
formData.field.grid.relationIdArray = relationIdArray;
top.dialog.confirm(top.dataMessage.commit, function(index) {
top.dialog.close(index);
var loadLayerIndex;
top.restAjax.post(top.restAjax.path('api/grid/save', []), formData.field, null, function(code, data) {
var layerIndex = top.dialog.msg(top.dataMessage.commitSuccess, {
time: 0,
btn: [top.dataMessage.button.yes, top.dataMessage.button.no],
shade: 0.3,
yes: function(index) {
top.dialog.close(index);
window.location.reload();
},
btn2: function() {
closeBox();
}
});
}, function(code, data) {
top.dialog.msg(data.msg);
}, function() {
loadLayerIndex = top.dialog.msg(top.dataMessage.committing, {icon: 16, time: 0, shade: 0.3});
}, function() {
top.dialog.close(loadLayerIndex);
});
});
return false;
});
$('.close').on('click', function() {
closeBox();
});
// 校验
form.verify({
});
});
</script>
</body>
</html>

View File

@ -0,0 +1,305 @@
<!doctype html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<base th:href="${#request.getContextPath() + '/'}">
<meta charset="utf-8">
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
<link rel="stylesheet" href="assets/fonts/font-awesome/css/font-awesome.css"/>
<link rel="stylesheet" href="assets/layuiadmin/layui/css/layui.css" media="all">
<link rel="stylesheet" href="assets/layuiadmin/style/admin.css" media="all">
<style>
.layui-form-label-up {width: 100% !important; height: 30px !important; line-height: 30px !important; border: none !important; padding: 0px !important; font-size: 15px; background-color: transparent !important; text-align: left !important;}
.layui-input-block-down {margin: 0px !important; left: 0px !important;}
.layui-input-block-down .layui-form-select .layui-edge {top: 74%;}
</style>
</head>
<body>
<div class="layui-fluid layui-anim layui-anim-fadein">
<div class="layui-card">
<div class="layui-card-header">
<span class="layui-breadcrumb" lay-filter="breadcrumb" style="visibility: visible;">
<a class="close" href="javascript:void(0);">上级列表</a><span lay-separator="">/</span>
<a href="javascript:void(0);"><cite>编辑内容</cite></a>
</span>
</div>
<div class="layui-card-body" style="padding: 15px;">
<form class="layui-form layui-form-pane" lay-filter="dataForm">
<div class="layui-row layui-col-space15">
<div id="formContainer" class="layui-col-xs2">
<div class="layui-form-item">
<label class="layui-form-label layui-form-label-up">网格组</label>
<div class="layui-input-block layui-input-block-down layui-form" id="gridGroupIdTemplateBox" lay-filter="gridGroupIdTemplateBox"></div>
<script id="gridGroupIdTemplate" type="text/html">
<select id="gridGroupId" name="gridGroupId" lay-filter="gridGroupId">
<option value="">选择网格组</option>
{{# for(var i = 0, item; item = d[i++];) { }}
<option value="{{item.gridGroupId}}">{{item.gridGroupName}}</option>
{{# } }}
</select>
</script>
</div>
<div class="layui-form-item">
<label class="layui-form-label layui-form-label-up">网格名称</label>
<div class="layui-input-block layui-input-block-down">
<input type="text" id="gridName" name="gridName" class="layui-input" value="" placeholder="请输入网格名称" maxlength="255" lay-verify="required">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label layui-form-label-up">网格描述</label>
<div class="layui-input-block layui-input-block-down">
<input type="text" id="gridSummary" name="gridSummary" class="layui-input" value="" placeholder="请输入网格描述" maxlength="255" lay-verify="required">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label layui-form-label-up">网格职责</label>
<div class="layui-input-block layui-input-block-down">
<input type="text" id="gridDuty" name="gridDuty" class="layui-input" value="" placeholder="请输入网格职责" maxlength="255" lay-verify="required">
</div>
</div>
<div class="layui-form-item layui-layout-admin">
<div class="layui-input-block">
<div class="layui-footer" style="left: 0;">
<button id="confirmBtn" type="button" class="layui-btn" lay-submit lay-filter="submitForm">提交编辑</button>
<button type="button" class="layui-btn layui-btn-primary close">返回上级</button>
</div>
</div>
</div>
</div>
<div class="layui-col-xs10">
<div id="baiduMapContainer"></div>
</div>
</div>
</form>
</div>
</div>
</div>
<script type="text/javascript" src="http://api.map.baidu.com/api?v=3.0&ak=mlfOah4gWM1FjEo9CmlI64zK6MhyiMPW"></script>
<script type="text/javascript" src="static/baidu-map/baidu-map-1.0.0.min.js"></script>
<script src="assets/layuiadmin/layui/layui.js"></script>
<script>
layui.config({
base: 'assets/layuiadmin/' //静态资源所在路径
}).extend({
index: 'lib/index' //主入口模块
}).use(['index', 'form', 'laydate', 'laytpl'], function(){
var $ = layui.$;
var $win = $(window);
var form = layui.form;
var laytpl = layui.laytpl;
var laydate = layui.laydate;
var queryParams = top.restAjax.params(window.location.href);
var gridId = queryParams.gridId;
var centerPoint = {
lng: queryParams.cplng,
lat: queryParams.cplat
}
var baiduMap = null;
var gridMember = {
users: [],
gridArray: []
}
function closeBox() {
parent.layer.close(parent.layer.getFrameIndex(window.name));
}
function initSelectRadioCheckboxTemplate(templateId, templateBoxId, data, callback) {
laytpl(document.getElementById(templateId).innerHTML).render(data, function(html) {
document.getElementById(templateBoxId).innerHTML = html;
});
form.render('select', templateBoxId);
if(callback) {
callback();
}
}
// 初始化网格组下拉选择
function initGridGroupSelect(selectValue) {
top.restAjax.get(top.restAjax.path('api/grid-group/list', []), {
}, null, function(code, data, args) {
initSelectRadioCheckboxTemplate('gridGroupIdTemplate', 'gridGroupIdTemplateBox', data, function() {
var selectObj = {};
selectObj['gridGroupId'] = selectValue;
form.val('dataForm', selectObj);
});
}, function(code, data) {
top.dialog.msg(data.msg);
});
}
// 初始化网格背景
function initGridBG(areaCode, callback) {
var layIndex;
top.restAjax.get(top.restAjax.path('api/grid/list/except/{gridId}', [gridId]), {
areaCode: areaCode
}, null, function(code, data) {
var gridArray = [];
for(var i = 0, item; item = data[i++];) {
var pointArray = [];
for(var j = 0, jItem; jItem = item.pointArray[j++];) {
pointArray.push(new BaiduMap.Point(jItem.lng, jItem.lat));
}
gridArray.push({
id: item.gridId,
label: item.gridName,
fillColor: '#ffffff',
pointArray: pointArray
})
}
baiduMap.initBackgroundGrid({
gridArray: gridArray
});
callback ? callback() : '';
}, function(code, data) {
top.dialog.msg(data.msg);
}, function () {
layIndex = top.dialog.msg(top.dataMessage.loading, {icon: 16, time: 0, shade: 0.3});
}, function () {
top.dialog.close(layIndex);
});
}
function initMap(callback) {
$('#formContainer').css({
height: ($win.height() - 145) +'px',
overflow: 'auto'
})
$('#baiduMapContainer').css({
width: '100%',
height: ($win.height() - 145) +'px'
});
baiduMap = new BaiduMap('baiduMapContainer', {
single: true,
onGridStartEdit: function(baiduMap) {
$('#confirmBtn').hide();
},
onGridStopEdit: function(gridArray) {
gridMember.gridArray = gridArray;
$('#confirmBtn').show();
}
});
baiduMap.setCenterAndZoom(centerPoint, 14);
var mapTypeControl = new BMap.MapTypeControl({
mapTypes: [BMAP_NORMAL_MAP, BMAP_SATELLITE_MAP, BMAP_HYBRID_MAP],
});
baiduMap.getMap().addControl(mapTypeControl);
baiduMap.setDefaultConfig();
baiduMap.initGridOption();
baiduMap.initGridOptionEvent();
baiduMap.initColorOption();
callback ? callback() : '';
}
// 初始化内容
function initData() {
top.restAjax.get(top.restAjax.path('api/grid/get/{gridId}', [gridId]), {}, null, function(code, data) {
var dataFormData = {};
for(var i in data) {
dataFormData[i] = data[i] +'';
}
form.val('dataForm', dataFormData);
form.render(null, 'dataForm');
gridMember.gridArray = [{
id: data.gridId,
fillColor: data.fillColor,
pointArray: data.pointArray
}];
initGridGroupSelect(data.gridGroupId);
initMap(function() {
// 背景层
initGridBG(data.areaCode, function() {
// 网格层
var grid = new BaiduMap.Grid(data.gridId, data.pointArray);
grid.setFillColor(data.fillColor);
baiduMap.setGridArray([grid]);
});
});
}, function (code, data) {
top.dialog.msg(data.msg);
}, function() {
loadLayerIndex = top.dialog.msg(top.dataMessage.loading, {icon: 16, time: 0, shade: 0.3});
}, function() {
top.dialog.close(loadLayerIndex);
});
}
initData();
$('#areaName').on('click', function() {
top.dialog.open({
title: '选择地区',
url: top.restAjax.path('route/area/get-select?areaName={areaName}', [encodeURI($('#areaName').val())]),
width: '600px',
height: '225px',
onClose: function() {
var selectedAreaArray = top.dialog.dialogData.selectedAreaArray;
var areaCode = '';
var areaName = '';
if(selectedAreaArray.length > 0) {
areaCode = selectedAreaArray[selectedAreaArray.length - 1].areaCode;
for(var i = 0, item; item = selectedAreaArray[i++];) {
if(areaName) {
areaName += '/';
}
areaName += item.areaName;
}
initGridBG(areaCode);
}
$('#areaCode').val(areaCode);
$('#areaName').val(areaName);
}
})
});
// 提交表单
form.on('submit(submitForm)', function(formData) {
if(gridMember.gridArray.length == 0) {
top.dialog.msg('请添加网格');
return;
}
formData.field.grid = gridMember.gridArray[0];
top.dialog.confirm(top.dataMessage.commit, function(index) {
top.dialog.close(index);
var loadLayerIndex;
top.restAjax.put(top.restAjax.path('api/grid/update/{gridId}', [gridId]), formData.field, null, function(code, data) {
var layerIndex = top.dialog.msg(top.dataMessage.commitSuccess, {
time: 0,
btn: [top.dataMessage.button.yes, top.dataMessage.button.no],
shade: 0.3,
yes: function(index) {
top.dialog.close(index);
window.location.reload();
},
btn2: function() {
closeBox();
}
});
}, function(code, data) {
top.dialog.msg(data.msg);
}, function() {
loadLayerIndex = top.dialog.msg(top.dataMessage.committing, {icon: 16, time: 0, shade: 0.3});
}, function() {
top.dialog.close(loadLayerIndex);
});
});
return false;
});
$('.close').on('click', function() {
closeBox();
});
// 校验
form.verify({
});
});
</script>
</body>
</html>

View File

@ -0,0 +1,249 @@
<!doctype html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<base th:href="${#request.getContextPath() + '/'}">
<meta charset="utf-8">
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
<link rel="stylesheet" href="assets/fonts/font-awesome/css/font-awesome.css"/>
<link rel="stylesheet" type="text/css" href="assets/js/vendor/viewer/viewer.min.css">
<link rel="stylesheet" href="assets/layuiadmin/layui/css/layui.css" media="all">
<link rel="stylesheet" href="assets/layuiadmin/style/admin.css" media="all">
</head>
<body>
<div class="layui-fluid layui-anim layui-anim-fadein" style="padding: 0;">
<div class="layui-row">
<div class="layui-col-md12">
<div class="layui-card">
<div class="layui-card-body">
<div class="test-table-reload-btn" style="margin-bottom: 10px;">
<div class="layui-inline">
<input type="text" id="keywords" class="layui-input search-item" placeholder="输入关键字">
</div>
<button type="button" id="search" class="layui-btn layui-btn-sm">
<i class="fa fa-lg fa-search"></i> 搜索
</button>
</div>
<table class="layui-hide" id="dataTable" lay-filter="dataTable"></table>
<!-- 表头按钮组 -->
<script type="text/html" id="headerToolBar">
<div class="layui-btn-group">
<button type="button" class="layui-btn layui-btn-sm" lay-event="saveEvent">
<i class="fa fa-lg fa-plus"></i> 新增
</button>
<button type="button" class="layui-btn layui-btn-danger layui-btn-sm" lay-event="removeEvent">
<i class="fa fa-lg fa-trash"></i> 删除
</button>
</div>
</script>
</div>
</div>
</div>
</div>
</div>
<input id="selectedUserIds" type="hidden"/>
<script src="assets/layuiadmin/layui/layui.js"></script>
<script>
layui.config({
base: 'assets/layuiadmin/'
}).extend({
index: 'lib/index'
}).use(['index', 'table', 'common'], function() {
var $ = layui.$;
var $win = $(window);
var table = layui.table;
var admin = layui.admin;
var common = layui.common;
var gridId = top.restAjax.params(window.location.href).gridId;
var resizeTimeout = null;
var tableUrl = 'api/grid/user/listpage/{gridId}';
// 初始化表格
function initTable() {
table.render({
elem: '#dataTable',
id: 'dataTable',
url: top.restAjax.path(tableUrl, [gridId]),
width: admin.screen() > 1 ? '100%' : '',
height: $win.height() - 60,
limit: 20,
limits: [20, 40, 60, 80, 100, 200],
toolbar: '#headerToolBar',
request: {
pageName: 'page',
limitName: 'rows'
},
cols: [
[
{type:'checkbox', fixed: 'left'},
{field:'rowNum', width:80, title: '序号', align:'center', templet: '<span>{{d.LAY_INDEX}}</span>'},
{field:'userUsername', width:140, title: '用户名', align:'center'},
{field:'userName', width:140, title: '昵称', align:'center'},
{field:'userPhone', width:140, title: '手机', align:'center',
templet: function(item) {
if(!item.userPhone) {
return '-';
}
return item.userPhone;
}
},
{field:'gmtCreate', width:180, title: '添加时间', align:'center',
templet: function(item) {
if(!item.gmtCreate) {
return '-';
}
return item.gmtCreate;
}
}
]
],
page: true,
parseData: function(data) {
return {
'code': 0,
'msg': '',
'count': data.total,
'data': data.rows
};
}
});
}
// 重载表格
function reloadTable(currentPage) {
table.reload('dataTable', {
url: top.restAjax.path(tableUrl, [gridId]),
where: {
keywords: $('#keywords').val(),
},
page: {
curr: currentPage
},
height: $win.height() - 60,
});
}
// 删除
function removeData(ids) {
top.dialog.msg(top.dataMessage.delete, {
time: 0,
btn: [top.dataMessage.button.yes, top.dataMessage.button.no],
shade: 0.3,
yes: function(index) {
top.dialog.close(index);
var layIndex;
top.restAjax.delete(top.restAjax.path('api/grid/user/delete/{gridId}/{ids}', [gridId, ids]), {}, null, function(code, data) {
top.dialog.msg(top.dataMessage.deleteSuccess);
var deleteUserIds = ids.split('_');
var selectedUserIds = $('#selectedUserIds').val().split('_');
var tempIds = common.resultIdsOfDeleteIds(deleteUserIds, selectedUserIds);
$('#selectedUserIds').val(tempIds);
reloadTable();
}, function(code, data) {
top.dialog.msg(data.msg);
}, function() {
layIndex = top.dialog.msg(top.dataMessage.deleting, {icon: 16, time: 0, shade: 0.3});
}, function() {
top.dialog.close(layIndex);
});
}
});
}
// 初始化职位用户ID列表
function initSelectUserIds() {
var layIndex;
top.restAjax.get(top.restAjax.path('api/grid/user/list-user-id/{gridId}', [gridId]), {}, null, function(code, data) {
var selectedUserIds = '';
for(var i = 0, item; item = data[i++]; ) {
if('' != selectedUserIds) {
selectedUserIds += '_';
}
selectedUserIds += item;
}
$('#selectedUserIds').val(selectedUserIds);
initTable();
}, function(code, data) {
top.dialog.msg(data.msg);
}, function() {
layIndex = top.dialog.msg(top.dataMessage.loading, {icon: 16, time: 0, shade: 0.3});
}, function() {
top.dialog.close(layIndex);
});
}
initSelectUserIds();
// 事件 - 页面变化
$win.on('resize', function() {
clearTimeout(resizeTimeout);
resizeTimeout = setTimeout(function() {
reloadTable();
}, 500);
});
// 事件 - 搜索
$(document).on('click', '#search', function() {
reloadTable(1);
});
// 事件 - 增删
table.on('toolbar(dataTable)', function(obj) {
var layEvent = obj.event;
var checkStatus = table.checkStatus('dataTable');
var checkDatas = checkStatus.data;
if(layEvent === 'saveEvent') {
top.dialog.dialogData.selectedUserIds = $('#selectedUserIds').val();
top.dialog.open({
url: top.restAjax.path('route/department/user/select-user', []),
title: '选择用户',
width: '500px',
height: '500px',
onClose: function() {
var selectedUsers = top.dialog.dialogData.selectedDepartmentUsers;
if(selectedUsers != null && selectedUsers.length > 0) {
var ids = [];
for (var i = 0, item; item = selectedUsers[i++];) {
ids.push(item.userId);
}
top.dialog.msg(top.dataMessage.update, {
time: 0,
btn: [top.dataMessage.button.yes, top.dataMessage.button.no],
yes: function (index) {
top.dialog.close(index);
var loadLayerIndex;
top.restAjax.put(top.restAjax.path('api/grid/user/update/{gridId}', [gridId]), {
ids: ids
}, null, function (code, data) {
top.dialog.msg(top.dataMessage.updated);
initSelectUserIds();
}, function (code, data) {
top.dialog.msg(data.msg);
}, function () {
loadLayerIndex = top.dialog.msg(top.dataMessage.updating, {
icon: 16,
time: 0,
shade: 0.3
});
}, function () {
top.dialog.close(loadLayerIndex);
});
},
});
}
}
})
} else if(layEvent === 'removeEvent') {
if(checkDatas.length === 0) {
top.dialog.msg(top.dataMessage.table.selectDelete);
} else {
var ids = '';
for(var i = 0, item; item = checkDatas[i++];) {
if(i > 1) {
ids += '_';
}
ids += item.userId;
}
removeData(ids);
}
}
});
});
</script>
</body>
</html>