Merge remote-tracking branch 'origin/master'
This commit is contained in:
commit
abb9180bcd
|
|
@ -27,5 +27,17 @@
|
|||
</jdbc-additional-properties>
|
||||
<working-dir>$ProjectFileDir$</working-dir>
|
||||
</data-source>
|
||||
<data-source source="LOCAL" name="yn_img_tool@127.0.0.1" uuid="826f3ee5-e63f-4742-9b4f-b71894453330">
|
||||
<driver-ref>mysql.8</driver-ref>
|
||||
<synchronize>true</synchronize>
|
||||
<jdbc-driver>com.mysql.cj.jdbc.Driver</jdbc-driver>
|
||||
<jdbc-url>jdbc:mysql://127.0.0.1:3306/yn_img_tool?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&useSSL=false</jdbc-url>
|
||||
<jdbc-additional-properties>
|
||||
<property name="com.intellij.clouds.kubernetes.db.host.port" />
|
||||
<property name="com.intellij.clouds.kubernetes.db.enabled" value="false" />
|
||||
<property name="com.intellij.clouds.kubernetes.db.container.port" />
|
||||
</jdbc-additional-properties>
|
||||
<working-dir>$ProjectFileDir$</working-dir>
|
||||
</data-source>
|
||||
</component>
|
||||
</project>
|
||||
|
|
@ -9,6 +9,7 @@ import com.bonus.imgTool.system.vo.EncryptedReq;
|
|||
import com.bonus.imgTool.utils.ServerResponse;
|
||||
import com.github.pagehelper.PageHelper;
|
||||
import com.github.pagehelper.PageInfo;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
|
|
@ -31,6 +32,13 @@ public class SynthesisQueryController {
|
|||
@Resource(name = "SynthesisQueryService")
|
||||
private SynthesisQueryService synthesisQueryService;
|
||||
|
||||
@ApiOperation("综合查询-照片综合查询-照片数量")
|
||||
@PostMapping(value = "getImgNum")
|
||||
@DecryptAndVerify(decryptedClass = QueryParamDto.class)
|
||||
public ServerResponse getImgNum(EncryptedReq<QueryParamDto> data) {
|
||||
return synthesisQueryService.getImgNum(data.getData());
|
||||
}
|
||||
|
||||
@PostMapping(value = "getImgList")
|
||||
@DecryptAndVerify(decryptedClass = QueryParamDto.class)
|
||||
@LogAnnotation(operModul = "综合查询-照片综合查询", operation = "查询照片", operDesc = "系统级事件",operType="查询")
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
package com.bonus.imgTool.backstage.dao;
|
||||
|
||||
import com.bonus.imgTool.backstage.entity.QueryParamDto;
|
||||
import com.bonus.imgTool.backstage.entity.SynthesisNumVo;
|
||||
import com.bonus.imgTool.backstage.entity.SynthesisQueryVo;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
|
|
@ -15,6 +16,16 @@ import java.util.List;
|
|||
*/
|
||||
@Repository(value = "SynthesisQueryDao")
|
||||
public interface SynthesisQueryDao {
|
||||
|
||||
/**
|
||||
* 综合查询-照片综合查询-照片数量
|
||||
* @param dto
|
||||
* @return SynthesisNumVo
|
||||
* @author cwchen
|
||||
* @date 2025/4/2 15:40
|
||||
*/
|
||||
SynthesisNumVo getImgNum(QueryParamDto dto);
|
||||
|
||||
/**
|
||||
* 照片综合查询
|
||||
* @param dto
|
||||
|
|
|
|||
|
|
@ -2,6 +2,8 @@ package com.bonus.imgTool.backstage.entity;
|
|||
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @className:QueryParamDto
|
||||
* @author:cwchen
|
||||
|
|
@ -16,8 +18,20 @@ public class QueryParamDto {
|
|||
* 1.我的收藏 2.最近上传
|
||||
*/
|
||||
private int queryType;
|
||||
/**用户id*/
|
||||
/**
|
||||
* 用户id
|
||||
*/
|
||||
private long userId;
|
||||
/**
|
||||
* 用户管理的工程
|
||||
*/
|
||||
private List<Long> proIds;
|
||||
|
||||
/**
|
||||
* 角色级别 0.项目部 1.分公司
|
||||
*/
|
||||
private String roleLevel;
|
||||
|
||||
private int pageNum = 1;
|
||||
private int pageSize = 15;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,27 @@
|
|||
package com.bonus.imgTool.backstage.entity;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @className:SynthesisNumVo
|
||||
* @author:cwchen
|
||||
* @date:2025-04-02-14:22
|
||||
* @version:1.0
|
||||
* @description:综合查询各类型图片数量
|
||||
*/
|
||||
@Data
|
||||
public class SynthesisNumVo {
|
||||
|
||||
/**总照片数量*/
|
||||
private int totalNum;
|
||||
/**安全违章*/
|
||||
private int safetyVioNum;
|
||||
/**质量检查*/
|
||||
private int qualityInsNum;
|
||||
/**安全措施落实*/
|
||||
private int safetyMeasNum;
|
||||
/**协调照片*/
|
||||
private int coordinatedPhotoNum;
|
||||
/**重要事项及宣传类*/
|
||||
private int importIssuesAndPublicityNum;
|
||||
}
|
||||
|
|
@ -15,7 +15,7 @@ import java.util.Date;
|
|||
@Data
|
||||
public class SynthesisQueryVo {
|
||||
|
||||
private String id;
|
||||
private Long id;
|
||||
/**
|
||||
* 原图图片路径
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -11,6 +11,16 @@ import com.bonus.imgTool.utils.ServerResponse;
|
|||
* @description:综合查询
|
||||
*/
|
||||
public interface SynthesisQueryService {
|
||||
|
||||
/**
|
||||
* 综合查询-照片综合查询-照片数量
|
||||
* @param data
|
||||
* @return ServerResponse
|
||||
* @author cwchen
|
||||
* @date 2025/4/2 14:59
|
||||
*/
|
||||
ServerResponse getImgNum(QueryParamDto data);
|
||||
|
||||
/**
|
||||
* 照片综合查询
|
||||
* @param data
|
||||
|
|
|
|||
|
|
@ -2,10 +2,13 @@ package com.bonus.imgTool.backstage.service.impl;
|
|||
|
||||
import com.bonus.imgTool.backstage.dao.SynthesisQueryDao;
|
||||
import com.bonus.imgTool.backstage.entity.QueryParamDto;
|
||||
import com.bonus.imgTool.backstage.entity.SynthesisNumVo;
|
||||
import com.bonus.imgTool.backstage.entity.SynthesisQueryVo;
|
||||
import com.bonus.imgTool.backstage.service.SynthesisQueryService;
|
||||
import com.bonus.imgTool.system.vo.LoginUser;
|
||||
import com.bonus.imgTool.utils.ServerResponse;
|
||||
import com.bonus.imgTool.utils.UserUtil;
|
||||
import com.bonus.imgTool.webResult.Constants;
|
||||
import com.github.pagehelper.PageHelper;
|
||||
import com.github.pagehelper.PageInfo;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
|
@ -14,9 +17,8 @@ import org.apache.commons.lang3.StringUtils;
|
|||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @className:SynthesisQueryServiceImpl
|
||||
|
|
@ -32,11 +34,30 @@ public class SynthesisQueryServiceImpl implements SynthesisQueryService {
|
|||
@Resource(name = "SynthesisQueryDao")
|
||||
private SynthesisQueryDao synthesisQueryDao;
|
||||
|
||||
@Override
|
||||
public ServerResponse getImgNum(QueryParamDto dto) {
|
||||
try {
|
||||
String roleLevel = Optional.ofNullable(UserUtil.getLoginUser()).map(LoginUser::getRoleLevel).orElse("0");
|
||||
String proIds = Optional.ofNullable(UserUtil.getLoginUser()).map(LoginUser::getProIds).orElse("-1");
|
||||
if(Objects.equals(roleLevel, Constants.ROLE_LEVEL)){ // 项目部级
|
||||
List<Long> proList = Arrays.stream(proIds.split(",")).map(String::trim).filter(s -> !s.isEmpty()).map(Long::valueOf).collect(Collectors.toList());
|
||||
dto.setProIds(proList);
|
||||
}
|
||||
dto.setRoleLevel(roleLevel);
|
||||
SynthesisNumVo vo = Optional.ofNullable(synthesisQueryDao.getImgNum(dto)).orElseGet(SynthesisNumVo::new);
|
||||
return ServerResponse.createSuccess(vo);
|
||||
} catch (Exception e) {
|
||||
log.error(e.toString(),e);
|
||||
return ServerResponse.createErroe("查询失败");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public ServerResponse getImgList(QueryParamDto dto) {
|
||||
PageHelper.startPage(dto.getPageNum(), dto.getPageSize());
|
||||
try {
|
||||
dto.setUserId(UserUtil.getLoginUser() != null ? UserUtil.getLoginUser().getId() : 0);
|
||||
Long userId = Optional.ofNullable(UserUtil.getLoginUser()).map(LoginUser::getId).orElse(0L);
|
||||
dto.setUserId(userId);
|
||||
List<SynthesisQueryVo> list = Optional.ofNullable(synthesisQueryDao.getImgList(dto)).orElseGet(ArrayList::new);
|
||||
PageInfo<SynthesisQueryVo> pageInfo = new PageInfo<>(list);
|
||||
return ServerResponse.createSuccess(pageInfo);
|
||||
|
|
|
|||
|
|
@ -58,5 +58,9 @@ public class Role extends PageEntity {
|
|||
* 角色级别
|
||||
*/
|
||||
private Integer level;
|
||||
/**
|
||||
* 角色级别名称
|
||||
*/
|
||||
private String levelName;
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,11 @@
|
|||
package com.bonus.imgTool.model;
|
||||
|
||||
import com.bonus.imgTool.base.entity.PageEntity;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import lombok.Data;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
@Data
|
||||
public class SysUser extends PageEntity {
|
||||
|
|
@ -105,6 +109,11 @@ public class SysUser extends PageEntity {
|
|||
* 休眠时间
|
||||
*/
|
||||
private String sleepTime;
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||
private Date createTime;
|
||||
|
||||
private String updatePasswordTime;
|
||||
|
||||
|
|
@ -141,6 +150,16 @@ public class SysUser extends PageEntity {
|
|||
*/
|
||||
private String signImg;
|
||||
|
||||
/**
|
||||
* 角色级别
|
||||
*/
|
||||
private String roleLevel;
|
||||
|
||||
/**
|
||||
* 工程ID
|
||||
*/
|
||||
private String proIds;
|
||||
|
||||
|
||||
public interface Status {
|
||||
int DISABLED = 0;
|
||||
|
|
|
|||
|
|
@ -100,14 +100,14 @@ public class UserController {
|
|||
try {
|
||||
SysUser u = userService.getUser(data.getData().getLoginName());
|
||||
if (u != null) {
|
||||
return ServerResponse.createErroe("登录名"+data.getData().getLoginName() + "已存在");
|
||||
return ServerResponse.createErroe("登录账号"+data.getData().getLoginName() + "已存在");
|
||||
}
|
||||
if(StringHelper.isNotEmpty(data.getData().getPhone())){
|
||||
/* if(StringHelper.isNotEmpty(data.getData().getPhone())){
|
||||
SysUser u2 = userService.getPhone(data.getData().getPhone());
|
||||
if (u2 != null) {
|
||||
return ServerResponse.createErroe("手机号"+data.getData().getPhone() + "已存在");
|
||||
}
|
||||
}
|
||||
}*/
|
||||
ServerResponse response=userService.saveUser(data.getData());
|
||||
return response;
|
||||
}catch (Exception e){
|
||||
|
|
|
|||
|
|
@ -0,0 +1,331 @@
|
|||
package com.bonus.imgTool.utils;
|
||||
import javax.imageio.*;
|
||||
import javax.imageio.plugins.jpeg.JPEGImageWriteParam;
|
||||
import javax.imageio.stream.FileImageOutputStream;
|
||||
import java.awt.*;
|
||||
import java.awt.image.BufferedImage;
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
/**
|
||||
* @className:HighQualityWatermark
|
||||
* @author:cwchen
|
||||
* @date:2025-04-02-14:04
|
||||
* @version:1.0
|
||||
* @description:
|
||||
*/
|
||||
public class HighQualityWatermark {
|
||||
|
||||
private static final String DEFAULT_FONT_NAME = "Microsoft YaHei";
|
||||
private static final int DEFAULT_FONT_STYLE = Font.BOLD;
|
||||
private static final Color DEFAULT_COLOR = new Color(195, 32, 32, 255);
|
||||
private static final int MIN_FONT_SIZE = 10;
|
||||
private static final int MAX_FONT_SIZE = 72;
|
||||
private static final float MIN_OPACITY = 0.3f;
|
||||
private static final float MAX_OPACITY = 0.9f;
|
||||
private static final float DEFAULT_QUALITY = 1.0f; // 最高质量(无损)
|
||||
|
||||
/**
|
||||
* 添加高质量多行水印
|
||||
* @param sourceImagePath 源图片路径
|
||||
* @param targetImagePath 目标图片路径
|
||||
* @param textLines 多行水印文本
|
||||
* @param position 水印位置
|
||||
* @param opacity 透明度
|
||||
* @param fontName 字体名称
|
||||
*/
|
||||
public static void addHighQualityWatermark(String sourceImagePath, String targetImagePath,
|
||||
List<String> textLines, String position,
|
||||
float opacity, String fontName) throws Exception {
|
||||
// 参数校验
|
||||
if (opacity < MIN_OPACITY || opacity > MAX_OPACITY) {
|
||||
opacity = 0.7f;
|
||||
}
|
||||
// 读取源图片
|
||||
opacity = Math.max(MIN_OPACITY, Math.min(opacity, MAX_OPACITY));
|
||||
// 读取原始图片并获取其类型
|
||||
BufferedImage originalImage = ImageIO.read(new File(sourceImagePath));
|
||||
int imageType = originalImage.getTransparency() == Transparency.OPAQUE
|
||||
? BufferedImage.TYPE_INT_RGB
|
||||
: BufferedImage.TYPE_INT_ARGB;
|
||||
// 创建与原始图片相同大小的新图像
|
||||
BufferedImage sourceImage = new BufferedImage(
|
||||
originalImage.getWidth(),
|
||||
originalImage.getHeight(),
|
||||
imageType
|
||||
);
|
||||
int imageWidth = sourceImage.getWidth();
|
||||
int imageHeight = sourceImage.getHeight();
|
||||
// 绘制原始图片到新图像
|
||||
Graphics2D g2d = sourceImage.createGraphics();
|
||||
g2d.drawImage(originalImage, 0, 0, null);
|
||||
// 设置最高质量的渲染参数
|
||||
setHighestQuality(g2d);
|
||||
// 计算最大允许宽度(图片宽度的四分之三)
|
||||
// int maxAllowedWidth = imageWidth / 2;
|
||||
int maxAllowedWidth = (int) (imageWidth * 3.0 / 4);
|
||||
|
||||
// 确定最佳字体大小
|
||||
Font optimalFont = findOptimalFontSize(g2d, textLines, maxAllowedWidth, imageWidth, imageHeight, fontName);
|
||||
g2d.setFont(optimalFont);
|
||||
FontMetrics fm = g2d.getFontMetrics();
|
||||
|
||||
// 处理每行文本的换行
|
||||
List<List<String>> wrappedLines = wrapAllLines(g2d, textLines, maxAllowedWidth);
|
||||
|
||||
// 计算水印总高度和最大行宽度
|
||||
int lineHeight = fm.getHeight();
|
||||
int totalHeight = calculateTotalHeight(wrappedLines, lineHeight);
|
||||
int maxLineWidth = findMaxLineWidth(g2d, wrappedLines);
|
||||
|
||||
// 设置水印颜色和透明度
|
||||
Color watermarkColor = new Color(DEFAULT_COLOR.getRed(), DEFAULT_COLOR.getGreen(),
|
||||
DEFAULT_COLOR.getBlue(), (int)(opacity * 255));
|
||||
g2d.setColor(watermarkColor);
|
||||
|
||||
// 计算水印起始位置
|
||||
Point startPoint = calculateWatermarkPosition(position, imageWidth, imageHeight,
|
||||
maxLineWidth, totalHeight, fm);
|
||||
|
||||
// 绘制水印
|
||||
drawWatermarkLines(g2d, wrappedLines, startPoint, lineHeight, position, imageWidth);
|
||||
|
||||
// 释放资源
|
||||
g2d.dispose();
|
||||
|
||||
// 高质量保存图片
|
||||
saveWithHighQuality(sourceImage, targetImagePath);
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置最高质量的渲染参数
|
||||
*/
|
||||
private static void setHighestQuality(Graphics2D g2d) {
|
||||
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
|
||||
g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
|
||||
g2d.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
|
||||
g2d.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON);
|
||||
g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC);
|
||||
}
|
||||
|
||||
/**
|
||||
* 寻找最佳字体大小
|
||||
*/
|
||||
private static Font findOptimalFontSize(Graphics2D g2d, List<String> textLines,
|
||||
int maxAllowedWidth, int imgWidth,
|
||||
int imgHeight, String fontName) {
|
||||
// 基于图片对角线长度计算初始字体大小
|
||||
double diagonal = Math.sqrt(imgWidth * imgWidth + imgHeight * imgHeight);
|
||||
int initialSize = (int)(diagonal * 0.03);
|
||||
initialSize = Math.max(MIN_FONT_SIZE, Math.min(initialSize, MAX_FONT_SIZE));
|
||||
|
||||
Font testFont = new Font(fontName, DEFAULT_FONT_STYLE, initialSize);
|
||||
g2d.setFont(testFont);
|
||||
|
||||
/*// 检查所有行是否都适合
|
||||
boolean allFit = checkAllLinesFit(g2d, textLines, maxAllowedWidth);
|
||||
|
||||
// 如果不适合,逐步减小字体大小
|
||||
int currentSize = initialSize;
|
||||
while (!allFit && currentSize > MIN_FONT_SIZE) {
|
||||
currentSize--;
|
||||
testFont = new Font(fontName, DEFAULT_FONT_STYLE, currentSize);
|
||||
g2d.setFont(testFont);
|
||||
allFit = checkAllLinesFit(g2d, textLines, maxAllowedWidth);
|
||||
}*/
|
||||
|
||||
return testFont;
|
||||
}
|
||||
|
||||
/**
|
||||
* 检查所有行是否适合最大宽度
|
||||
*/
|
||||
private static boolean checkAllLinesFit(Graphics2D g2d, List<String> textLines, int maxWidth) {
|
||||
FontMetrics fm = g2d.getFontMetrics();
|
||||
return textLines.stream().allMatch(line -> fm.stringWidth(line) <= maxWidth);
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理所有行的换行
|
||||
*/
|
||||
private static List<List<String>> wrapAllLines(Graphics2D g2d, List<String> textLines, int maxWidth) {
|
||||
List<List<String>> wrappedLines = new ArrayList<>();
|
||||
for (String line : textLines) {
|
||||
wrappedLines.add(wrapSingleLine(g2d, line, maxWidth));
|
||||
}
|
||||
return wrappedLines;
|
||||
}
|
||||
|
||||
/**
|
||||
* 单行文本换行处理
|
||||
*/
|
||||
private static List<String> wrapSingleLine(Graphics2D g2d, String line, int maxWidth) {
|
||||
List<String> wrapped = new ArrayList<>();
|
||||
FontMetrics fm = g2d.getFontMetrics();
|
||||
|
||||
// 如果整行宽度小于最大宽度,直接返回
|
||||
if (fm.stringWidth(line) <= maxWidth) {
|
||||
wrapped.add(line);
|
||||
return wrapped;
|
||||
}
|
||||
|
||||
// 按空格分割单词
|
||||
String[] words = line.split("@@");
|
||||
StringBuilder currentLine = new StringBuilder(words[0]);
|
||||
|
||||
for (int i = 1; i < words.length; i++) {
|
||||
String testLine = currentLine + " " + words[i];
|
||||
if (fm.stringWidth(testLine) <= maxWidth) {
|
||||
currentLine.append(" ").append(words[i]);
|
||||
} else {
|
||||
wrapped.add(currentLine.toString());
|
||||
currentLine = new StringBuilder(words[i]);
|
||||
}
|
||||
}
|
||||
wrapped.add(currentLine.toString());
|
||||
|
||||
return wrapped;
|
||||
}
|
||||
|
||||
/**
|
||||
* 计算水印总高度
|
||||
*/
|
||||
private static int calculateTotalHeight(List<List<String>> allWrappedLines, int lineHeight) {
|
||||
int totalLines = allWrappedLines.stream().mapToInt(List::size).sum();
|
||||
// 总行数 * 行高 + (段落数-1) * 行高/2 (段落间距)
|
||||
return totalLines * lineHeight + (allWrappedLines.size() - 1) * (lineHeight / 2);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查找最大行宽度
|
||||
*/
|
||||
private static int findMaxLineWidth(Graphics2D g2d, List<List<String>> allWrappedLines) {
|
||||
int maxWidth = 0;
|
||||
FontMetrics fm = g2d.getFontMetrics();
|
||||
|
||||
for (List<String> lines : allWrappedLines) {
|
||||
for (String line : lines) {
|
||||
int width = fm.stringWidth(line);
|
||||
if (width > maxWidth) {
|
||||
maxWidth = width;
|
||||
}
|
||||
}
|
||||
}
|
||||
return maxWidth;
|
||||
}
|
||||
|
||||
/**
|
||||
* 计算水印位置
|
||||
*/
|
||||
private static Point calculateWatermarkPosition(String position, int imgWidth, int imgHeight,
|
||||
int maxLineWidth, int totalHeight,
|
||||
FontMetrics fm) {
|
||||
int margin = (int)(Math.min(imgWidth, imgHeight) * 0.05); // 5%边距
|
||||
int x = 0;
|
||||
int y = 0;
|
||||
|
||||
switch (position.toLowerCase()) {
|
||||
case "center":
|
||||
x = (imgWidth - maxLineWidth) / 2;
|
||||
y = (imgHeight - totalHeight) / 2 + fm.getAscent();
|
||||
break;
|
||||
case "top-left":
|
||||
x = margin;
|
||||
y = margin + fm.getAscent();
|
||||
break;
|
||||
case "top-right":
|
||||
x = imgWidth - maxLineWidth - margin;
|
||||
y = margin + fm.getAscent();
|
||||
break;
|
||||
case "bottom-left":
|
||||
x = margin;
|
||||
y = imgHeight - totalHeight - margin + fm.getAscent();
|
||||
break;
|
||||
case "bottom-right":
|
||||
x = imgWidth - maxLineWidth - margin;
|
||||
y = imgHeight - totalHeight - margin + fm.getAscent();
|
||||
break;
|
||||
default: // 默认居中
|
||||
x = (imgWidth - maxLineWidth) / 2;
|
||||
y = (imgHeight - totalHeight) / 2 + fm.getAscent();
|
||||
}
|
||||
|
||||
return new Point(x, y);
|
||||
}
|
||||
|
||||
/**
|
||||
* 绘制水印文本
|
||||
*/
|
||||
private static void drawWatermarkLines(Graphics2D g2d, List<List<String>> allWrappedLines,
|
||||
Point startPoint, int lineHeight,
|
||||
String position, int imgWidth) {
|
||||
int currentY = startPoint.y;
|
||||
FontMetrics fm = g2d.getFontMetrics();
|
||||
|
||||
for (List<String> lines : allWrappedLines) {
|
||||
for (String line : lines) {
|
||||
int lineWidth = fm.stringWidth(line);
|
||||
int x = startPoint.x;
|
||||
|
||||
// 如果是居中位置,每行单独计算x坐标
|
||||
if ("center".equalsIgnoreCase(position)) {
|
||||
x = (imgWidth - lineWidth) / 2;
|
||||
}
|
||||
|
||||
g2d.drawString(line, x, currentY);
|
||||
currentY += lineHeight;
|
||||
}
|
||||
// 段落间距(多行组之间的额外间距)
|
||||
currentY += lineHeight / 8;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 高质量保存JPG图片(无损或接近无损)
|
||||
*/
|
||||
private static void saveWithHighQuality(BufferedImage image, String filePath) throws Exception {
|
||||
String formatName = filePath.substring(filePath.lastIndexOf(".") + 1).toLowerCase();
|
||||
|
||||
if ("jpg".equals(formatName) || "jpeg".equals(formatName)) {
|
||||
// JPG特殊处理以保证高质量
|
||||
Iterator<ImageWriter> writers = ImageIO.getImageWritersByFormatName("jpg");
|
||||
ImageWriter writer = writers.next();
|
||||
|
||||
// 配置JPEG编码参数
|
||||
JPEGImageWriteParam jpegParams = (JPEGImageWriteParam) writer.getDefaultWriteParam();
|
||||
jpegParams.setCompressionMode(JPEGImageWriteParam.MODE_EXPLICIT);
|
||||
jpegParams.setCompressionQuality(DEFAULT_QUALITY); // 1.0 = 最高质量
|
||||
// 写入文件
|
||||
try (FileImageOutputStream output = new FileImageOutputStream(new File(filePath))) {
|
||||
writer.setOutput(output);
|
||||
writer.write(null, new IIOImage(image, null, null), jpegParams);
|
||||
}
|
||||
writer.dispose();
|
||||
} else {
|
||||
// 其他格式直接保存
|
||||
ImageIO.write(image, formatName, new File(filePath));
|
||||
}
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
try {
|
||||
// 准备多行水印文本
|
||||
List<String> watermarkLines = new ArrayList<>();
|
||||
watermarkLines.add("2024-05-12");
|
||||
String proName = "广东电网直流背靠背东莞工程(大湾区南粤直流背靠背工程)南粤±300kV背靠背换流站工程/新增/广东电网直流背靠背东莞工程(大湾区南通道直流背靠背工程)110kV环保城输变电工程(电缆部分)";
|
||||
watermarkLines.add(proName.replaceAll("(.{18})", "$1@@"));
|
||||
watermarkLines.add("安全违章");
|
||||
watermarkLines.add("违章照片");
|
||||
String localPath = "C:\\Users\\10488\\Desktop\\3.jpg";
|
||||
String outPath = "C:\\Users\\10488\\Desktop\\output.jpg";
|
||||
// 添加高质量水印
|
||||
addHighQualityWatermark(localPath, outPath,
|
||||
watermarkLines, "bottom-left",
|
||||
0.7f, "Microsoft YaHei");
|
||||
System.out.println("高质量水印添加完成,图片已无损输出");
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -182,5 +182,9 @@ public class Constants
|
|||
public static final Integer TYPE4 = 4;
|
||||
public static final Integer TRY_COUNT_NUM = 10;
|
||||
|
||||
/**角色级别*/
|
||||
public static final String ROLE_LEVEL = "0";
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,18 +3,53 @@
|
|||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.bonus.imgTool.backstage.dao.SynthesisQueryDao">
|
||||
|
||||
<!--综合查询-照片综合查询-照片数量-->
|
||||
<select id="getImgNum" resultType="com.bonus.imgTool.backstage.entity.SynthesisNumVo">
|
||||
SELECT COUNT(1) AS totalNum,
|
||||
COUNT(IF(tcq.upload_type = '1', 1, NULL)) AS safetyVioNum,
|
||||
COUNT(IF(tcq.upload_type = '2', 1, NULL)) AS qualityInsNum,
|
||||
COUNT(IF(tcq.upload_type = '3', 1, NULL)) AS safetyMeasNum,
|
||||
COUNT(IF(tcq.upload_type = '4', 1, NULL)) AS coordinatedPhotoNum,
|
||||
COUNT(IF(tcq.upload_type = '5', 1, NULL)) AS importIssuesAndPublicityNum
|
||||
FROM tb_comprehensive_query tcq
|
||||
LEFT JOIN sys_file_resource sfr ON tcq.id = sfr.source_id AND tcq.upload_type = sfr.upload_type AND sfr.is_active = '1'
|
||||
WHERE tcq.is_active = '1'
|
||||
<if test="roleLevel = 0 and proIds != null and proIds.size() > 0">
|
||||
AND tcq.pro_id IN
|
||||
<foreach collection="proIds" item="proId" open="(" separator="," close=")">
|
||||
#{proId}
|
||||
</foreach>
|
||||
</if>
|
||||
GROUP BY tcq.upload_type
|
||||
</select>
|
||||
|
||||
<!--照片综合查询-->
|
||||
<select id="getImgList" resultType="com.bonus.imgTool.backstage.entity.SynthesisQueryVo">
|
||||
SELECT id,
|
||||
'../../img/synthesisQuery/7.jpg' AS originalFilePath,
|
||||
'../../img/synthesisQuery/7.jpg' AS compressFilePath,
|
||||
'../../img/synthesisQuery/7.jpg' AS watermarkFilePath,
|
||||
'1' AS uploadType,
|
||||
'安全违章' AS uploadTypeName,
|
||||
operate_time AS uploadTime,
|
||||
'1' AS sourceType,
|
||||
'违章照片' AS sourceTypeName,
|
||||
'0' AS collectStatus
|
||||
FROM sys_logs
|
||||
SELECT sfr.id,
|
||||
sfr.original_file_path AS originalFilePath,
|
||||
sfr.original_file_path AS compressFilePath,
|
||||
sfr.original_file_path AS watermarkFilePath,
|
||||
sfr.upload_type AS uploadType,
|
||||
CASE sfr.upload_type WHEN '1' THEN '安全违章' WHEN '2' THEN '质量检查' WHEN '3' THEN '安全措施落实'
|
||||
WHEN '4' THEN '协调照片' WHEN '5' THEN '重要事项及宣传类' ELSE '' END AS uploadTypeName,
|
||||
sfr.create_time AS uploadTime,
|
||||
source_type AS sourceType,
|
||||
sd2.dict_name AS sourceTypeName,
|
||||
IF(tpc.file_resource_id IS NULL,'0','1') AS collectStatus
|
||||
FROM tb_comprehensive_query tcq
|
||||
LEFT JOIN sys_file_resource sfr ON tcq.id = sfr.source_id AND tcq.upload_type = sfr.upload_type AND sfr.is_active = '1'
|
||||
LEFT JOIN tb_photo_collect tpc ON sfr.id = tpc.file_resource_id AND tpc.collect_user_id = #{userId}
|
||||
LEFT JOIN sys_distinct sd ON sfr.source_type = sd.dict_value
|
||||
LEFT JOIN sys_distinct sd2 ON sd.p_id = sd2.id
|
||||
<where>
|
||||
<if test="roleLevel = 0 and proIds != null and proIds.size() > 0">
|
||||
AND tcq.pro_id IN
|
||||
<foreach collection="proIds" item="proId" open="(" separator="," close=")">
|
||||
#{proId}
|
||||
</foreach>
|
||||
</if>
|
||||
AND tcq.is_active = '1' AND sd2.dict_value = 'file_source_type'
|
||||
</where>
|
||||
ORDER BY sfr.create_time DESC
|
||||
</select>
|
||||
</mapper>
|
||||
|
|
|
|||
|
|
@ -73,14 +73,17 @@
|
|||
</insert>
|
||||
<!--登录查询用户-->
|
||||
<select id="getUser" parameterType="String" resultType="com.bonus.imgTool.model.SysUser">
|
||||
select t.id,t.user_name as username,t.login_name as loginName,t.phone,t.org_id as orgId,so.org_name as orgName,
|
||||
select t.id,t.user_name as username,t.login_name as loginName,t.org_id as orgId,so.org_name as orgName,
|
||||
t.password,t.state,t.role_id as roleId,t.login_type loginType,t.new_user newUser,
|
||||
sr.role_code AS roleCode,sr.role_name AS roleName,t.team_id AS teamId
|
||||
sr.role_code AS roleCode,sr.role_name AS roleName,t.team_id AS teamId,sr.level AS roleLevel,
|
||||
GROUP_CONCAT(pro_id) AS proIds
|
||||
from sys_user t
|
||||
LEFT JOIN sys_role sr ON t.role_id = sr.role_id AND sr.del_flag = 0
|
||||
left join sys_org so ON so.org_id = t.org_id and so.del_flag = 0
|
||||
LEFT JOIN tb_pro_user tpu ON t.id = tpu.user_id
|
||||
where t.login_name = #{username}
|
||||
and t.del_flag = 0
|
||||
GROUP BY t.id
|
||||
</select>
|
||||
|
||||
<select id="getUserCode" parameterType="String" resultType="com.bonus.imgTool.model.SysUser">
|
||||
|
|
@ -131,7 +134,6 @@
|
|||
t.org_id as orgId,
|
||||
so.org_name as orgName,
|
||||
sr.role_name roleName,
|
||||
t.phone AS phone,
|
||||
t.team_id as teamId,
|
||||
CASE
|
||||
t.user_type
|
||||
|
|
@ -142,6 +144,7 @@
|
|||
END userType,
|
||||
t.state AS state,
|
||||
t.del_flag AS delFlag,
|
||||
t.create_time AS createTime,
|
||||
t.sign_img as signImg
|
||||
FROM
|
||||
sys_user t
|
||||
|
|
@ -175,8 +178,6 @@
|
|||
login_name as loginName,
|
||||
sex,
|
||||
user_code as userCode,
|
||||
phone,
|
||||
email,
|
||||
org_id as orgId,
|
||||
user_type as userType,
|
||||
type,
|
||||
|
|
@ -214,7 +215,12 @@
|
|||
</select>
|
||||
<select id="getRoleAll" resultType="com.bonus.imgTool.model.Role">
|
||||
select t.role_id as id,
|
||||
t.role_name as name
|
||||
t.role_name as name,
|
||||
t.level,
|
||||
case when t.level = 0 then '项目部级'
|
||||
when t.level = 1 then '公司级'
|
||||
else ''
|
||||
end as levelName
|
||||
from sys_role t
|
||||
where t.del_flag = 0
|
||||
and t.state = 1
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@ layui.config({
|
|||
flow = layui.flow;
|
||||
layer = layui.layer;
|
||||
rightPopup = layui.rightPopup;
|
||||
initImgNum();
|
||||
dataFlow();
|
||||
});
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,27 @@
|
|||
// 获取图片数量
|
||||
function initImgNum() {
|
||||
let url = dataUrl + "/backstage/synthesisQuery/getImgNum"
|
||||
let obj = {}
|
||||
let params = {
|
||||
encryptedData: encryptCBC(JSON.stringify(obj))
|
||||
}
|
||||
ajaxRequest(url, "POST", params, true, function () {
|
||||
}, function (result) {
|
||||
if (result.status === 200) {
|
||||
setImgNum(result.data);
|
||||
} else {
|
||||
layer.msg(result.msg, {icon: 2})
|
||||
}
|
||||
}, function (xhr) {
|
||||
error(xhr)
|
||||
});
|
||||
|
||||
function setImgNum(obj){
|
||||
$('#totalNum').html(obj.totalNum);
|
||||
$('#safetyVioNum').html(obj.safetyVioNum);
|
||||
$('#qualityInsNum').html(obj.qualityInsNum);
|
||||
$('#safetyMeasNum').html(obj.safetyMeasNum);
|
||||
$('#coordinatedPhotoNum').html(obj.coordinatedPhotoNum);
|
||||
$('#importIssuesAndPublicityNum').html(obj.importIssuesAndPublicityNum);
|
||||
}
|
||||
}
|
||||
|
|
@ -4,8 +4,10 @@ let background, web, mobile, wx;
|
|||
let data = [], appResList = [];
|
||||
// 角色下拉选
|
||||
let roleList;
|
||||
let projectList;
|
||||
let orgData;
|
||||
let teamList;
|
||||
|
||||
function setParams(params) {
|
||||
console.log(params)
|
||||
idParam = JSON.parse(params).id;
|
||||
|
|
@ -20,38 +22,50 @@ function setParams(params) {
|
|||
dtree = layui.dtree;
|
||||
var $ = layui.jquery;
|
||||
roleList = getRoleSelected();
|
||||
teamList = getTeamSelected();
|
||||
orgData = getOrgTree();
|
||||
projectList = getProSelected();
|
||||
// teamList = getTeamSelected();
|
||||
// orgData = getOrgTree();
|
||||
console.log(idParam + "idParam")
|
||||
if (idParam) {
|
||||
getUserById();
|
||||
}
|
||||
|
||||
// form.render();
|
||||
form.render("checkbox","select");//重新渲染页面checkbox控件
|
||||
form.render("checkbox", "select");//重新渲染页面checkbox控件
|
||||
form.on('submit(formData)', function (data) {
|
||||
data.field.id = $('#id').val();
|
||||
console.log( data.field.orgId_select_nodeId);
|
||||
if(!data.field.orgId_select_nodeId){
|
||||
return layer.alert("请选择组织机构!", {icon: 2})
|
||||
}
|
||||
let phone = $('#phone').val();
|
||||
if(phone){
|
||||
if (!(/^1[3456789]\d{9}$/.test(phone))) {
|
||||
/* console.log( data.field.orgId_select_nodeId);
|
||||
if(!data.field.orgId_select_nodeId){
|
||||
return layer.alert("请选择组织机构!", {icon: 2})
|
||||
}*/
|
||||
let loginName = $('#loginName').val();
|
||||
if (loginName) {
|
||||
if (!(/^1[3456789]\d{9}$/.test(loginName))) {
|
||||
return layer.alert("请输入正确的手机号", {icon: 2})
|
||||
}
|
||||
}
|
||||
if (!validatePassword(data.field.password)){
|
||||
if (!validatePassword(data.field.password)) {
|
||||
return layer.alert("密码必须包含大、小写字母 、数字、 特殊字符四种里至少三种,且密码长度不低于8位", {icon: 2})
|
||||
}
|
||||
saveData(data);
|
||||
});
|
||||
|
||||
// 监听角色下拉框的 change 事件
|
||||
form.on('select(roleId)', function (data) {
|
||||
const roleName = $('#roleId option:selected').text();
|
||||
if (roleName.includes('项目部级')) {
|
||||
$('#projectDiv').removeClass('layui-hide'); // 显示 div
|
||||
} else {
|
||||
$('#projectDiv').addClass('layui-hide'); // 隐藏 div
|
||||
}
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
var a = 0;
|
||||
$(".secreteyesk1").hide();
|
||||
$(".secreteyesk2").hide();
|
||||
$('.eyes1').click(function() {
|
||||
$('.eyes1').click(function () {
|
||||
a += 1;
|
||||
if (a % 2 == 0) {
|
||||
$('.secreteyesk1').hide();
|
||||
|
|
@ -70,7 +84,7 @@ function setParams(params) {
|
|||
* 校验密码
|
||||
*/
|
||||
function validatePassword(password) {
|
||||
console.log("password:",password)
|
||||
console.log("password:", password)
|
||||
// 定义正则表达式来检测不同的字符类型
|
||||
const hasUpperCase = /[A-Z]/.test(password);
|
||||
const hasLowerCase = /[a-z]/.test(password);
|
||||
|
|
@ -82,7 +96,7 @@ function validatePassword(password) {
|
|||
|
||||
// 计算符合要求的字符类型数量
|
||||
const typesCount = [hasUpperCase, hasLowerCase, hasDigit, hasSpecialChar].filter(Boolean).length;
|
||||
console.log("typesCount:",typesCount)
|
||||
console.log("typesCount:", typesCount)
|
||||
|
||||
// 验证密码:长度合法且包含至少三种字符类型
|
||||
return isLengthValid && typesCount >= 3;
|
||||
|
|
@ -105,10 +119,28 @@ function getRoleSelected() {
|
|||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取工程数据
|
||||
*/
|
||||
function getProSelected() {
|
||||
let url = dataUrl + '/users/getRoleAll';
|
||||
ajaxRequest(url, "POST", null, true, function () {
|
||||
}, function (result) {
|
||||
if (result.code === 200) {
|
||||
setSelectValue(result.data, 'project');
|
||||
} else {
|
||||
layer.alert(result.msg, {icon: 2})
|
||||
}
|
||||
}, function (xhr) {
|
||||
error(xhr)
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取班组数据
|
||||
*/
|
||||
function getTeamSelected() {
|
||||
|
||||
/*function getTeamSelected() {
|
||||
let url = dataUrl + '/testReport/getTeamSelected';
|
||||
ajaxRequest(url, "POST", null, true, function () {
|
||||
}, function (result) {
|
||||
|
|
@ -120,26 +152,37 @@ function getTeamSelected() {
|
|||
}, function (xhr) {
|
||||
error(xhr)
|
||||
});
|
||||
}*/
|
||||
|
||||
function setSelectValue(list, selectName) {
|
||||
let html = '<option value="" selected>请选择</option>';
|
||||
$.each(list, function (index, item) {
|
||||
html += '<option value="' + item.id + '">' + item.name + '(' + item.levelName + ')' + '</option>';
|
||||
})
|
||||
$('#' + selectName).empty().append(html);
|
||||
layui.form.render();
|
||||
}
|
||||
function setOrgTree(data){
|
||||
orgTree = dtree.renderSelect({
|
||||
elem: "#orgId",
|
||||
data: data,
|
||||
dataFormat: "list",
|
||||
skin: "laySimple",
|
||||
line: true, // 显示树线
|
||||
checkbar: false, //开启复选框
|
||||
done: function (data, url, first) {
|
||||
console.log($('#orgId').val())
|
||||
if(first) {
|
||||
var params = dtree.dataInit("orgId", $('#orgId').val());
|
||||
var selectParam = dtree.selectVal("orgId");
|
||||
console.log(params)
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
function getOrgTree() {
|
||||
|
||||
|
||||
// function setOrgTree(data){
|
||||
// orgTree = dtree.renderSelect({
|
||||
// elem: "#orgId",
|
||||
// data: data,
|
||||
// dataFormat: "list",
|
||||
// skin: "laySimple",
|
||||
// line: true, // 显示树线
|
||||
// checkbar: false, //开启复选框
|
||||
// done: function (data, url, first) {
|
||||
// console.log($('#orgId').val())
|
||||
// if(first) {
|
||||
// var params = dtree.dataInit("orgId", $('#orgId').val());
|
||||
// var selectParam = dtree.selectVal("orgId");
|
||||
// console.log(params)
|
||||
// }
|
||||
// }
|
||||
// });
|
||||
// }
|
||||
/*function getOrgTree() {
|
||||
let data = [];
|
||||
let url = dataUrl + '/users/getOrg';
|
||||
ajaxRequest(url, "POST", null, true, function () {
|
||||
|
|
@ -155,7 +198,8 @@ function getOrgTree() {
|
|||
error(xhr)
|
||||
});
|
||||
return data;
|
||||
}
|
||||
}*/
|
||||
|
||||
// 根据id获取用户信息
|
||||
function getUserById() {
|
||||
let loadingMsg = layer.msg("数据加载中,请稍候...", {icon: 16, scrollbar: false, time: 0,});
|
||||
|
|
@ -164,14 +208,13 @@ function getUserById() {
|
|||
id: idParam
|
||||
}
|
||||
console.log(params)
|
||||
params={
|
||||
encryptedData:encryptCBC(JSON.stringify(params))
|
||||
params = {
|
||||
encryptedData: encryptCBC(JSON.stringify(params))
|
||||
}
|
||||
ajaxRequest(url, "POST", params, true, function () {
|
||||
}, function (result) {
|
||||
layer.close(loadingMsg); // 关闭提示层
|
||||
if (result.code === 200) {
|
||||
console.log(result)
|
||||
setFormData(result.data);
|
||||
} else if (result.code === 500) {
|
||||
layer.alert(result.msg, {icon: 2})
|
||||
|
|
@ -184,15 +227,14 @@ function getUserById() {
|
|||
|
||||
// 设置表单内容
|
||||
function setFormData(data) {
|
||||
console.log("data:",data)
|
||||
console.log("data:", data)
|
||||
if (data) {
|
||||
$("#password").removeAttr("lay-verify");
|
||||
$("#pwd").css("display","none");
|
||||
$("#pwd").css("display", "none");
|
||||
$('#id').val(data.id)
|
||||
// $('#userCode').val(data.userCode)
|
||||
|
||||
$('#username').val(data.username)
|
||||
$('#loginName').val(data.loginName)
|
||||
$('#phone').val(data.phone)
|
||||
|
||||
// 设置选中状态
|
||||
if (data.sex === 1) {
|
||||
|
|
@ -201,33 +243,34 @@ function setFormData(data) {
|
|||
document.getElementById('sex_0').checked = true;
|
||||
}
|
||||
|
||||
if (data.userType === '1') {
|
||||
document.getElementById('userType_1').checked = true;
|
||||
} else if (data.userType === '0') {
|
||||
document.getElementById('userType_0').checked = true;
|
||||
}
|
||||
/* if (data.userType === '1') {
|
||||
document.getElementById('userType_1').checked = true;
|
||||
} else if (data.userType === '0') {
|
||||
document.getElementById('userType_0').checked = true;
|
||||
}*/
|
||||
|
||||
if (data.state === 1) {
|
||||
document.getElementById('state_1').checked = true;
|
||||
} else if (data.state === 0) {
|
||||
document.getElementById('state_0').checked = true;
|
||||
}
|
||||
$('#type_'+data.type).attr('checked', true)
|
||||
$('#type_' + data.type).attr('checked', true)
|
||||
$('#orgId').val(data.orgId)
|
||||
$('#roleId').val(data.roleId)
|
||||
$('#roleId option[value=' + data.roleId + ']').attr('selected', true)
|
||||
$('#teamId').val(data.teamId)
|
||||
$('#teamId option[value=' + data.teamId + ']').attr('selected', true)
|
||||
var arrCB = data.loginTypes;
|
||||
for (var j = 0; j < arrCB.length; j++) {
|
||||
var cbthis = $("input[name='loginType']");
|
||||
for (var i = 0; i < cbthis.length; i++) {
|
||||
if (cbthis[i].value == arrCB[j]) {
|
||||
cbthis[i].checked = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
phoneParam = data.phone;
|
||||
$('#project').val(data.roleId)
|
||||
$('#project option[value=' + data.project + ']').attr('selected', true)
|
||||
/*$('#teamId').val(data.teamId)
|
||||
$('#teamId option[value=' + data.teamId + ']').attr('selected', true)*/
|
||||
// var arrCB = data.loginTypes;
|
||||
// for (var j = 0; j < arrCB.length; j++) {
|
||||
// var cbthis = $("input[name='loginType']");
|
||||
// for (var i = 0; i < cbthis.length; i++) {
|
||||
// if (cbthis[i].value == arrCB[j]) {
|
||||
// cbthis[i].checked = true;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
layui.form.render();
|
||||
}
|
||||
}
|
||||
|
|
@ -245,15 +288,20 @@ function saveData(data) {
|
|||
$('#cbGuDing input[type=checkbox]:checked').each(function () {
|
||||
arr_box.push($(this).val());
|
||||
});
|
||||
console.log(arr_box)
|
||||
params.loginType = arr_box.join()
|
||||
params.orgId = params.orgId_select_nodeId;
|
||||
if(params.id !=""){
|
||||
var arr_pro = [];//固定复选框
|
||||
$('#project input[type=checkbox]:checked').each(function () {
|
||||
arr_pro.push($(this).val());
|
||||
});
|
||||
|
||||
// params.loginType = arr_box.join()
|
||||
params.project = arr_pro.join()
|
||||
// params.orgId = params.orgId_select_nodeId;
|
||||
if (params.id != "") {
|
||||
url = dataUrl + "/users/update";
|
||||
}
|
||||
console.log(params)
|
||||
params={
|
||||
encryptedData:encryptCBC(JSON.stringify(params))
|
||||
params = {
|
||||
encryptedData: encryptCBC(JSON.stringify(params))
|
||||
}
|
||||
ajaxRequest(url, "POST", params, true, function () {
|
||||
$('.save').addClass("layui-btn-disabled").attr("disabled", true);
|
||||
|
|
@ -296,9 +344,11 @@ function isRepeat(paramName, phone) {
|
|||
return data;
|
||||
}
|
||||
|
||||
/*
|
||||
function getPasswordConfig(callback) {
|
||||
let url = dataUrl + "/users/getPasswordConfig"
|
||||
ajaxRequest(url, "POST", null, true, function () {}, function (result) {
|
||||
ajaxRequest(url, "POST", null, true, function () {
|
||||
}, function (result) {
|
||||
// layer.close(loadingMsg); // 关闭提示层
|
||||
if (result.status === 200) {
|
||||
callback(result.data);
|
||||
|
|
@ -309,6 +359,7 @@ function getPasswordConfig(callback) {
|
|||
error(xhr)
|
||||
});
|
||||
}
|
||||
*/
|
||||
|
||||
// 关闭页面
|
||||
function closePage(type) {
|
||||
|
|
|
|||
|
|
@ -1,12 +1,12 @@
|
|||
let form, layer, dtree, table, tableIns;
|
||||
let pageNum = 1, limitSize = 10; // 默认第一页,分页数量为10
|
||||
let orgData,selectOrgId="";
|
||||
let orgData, selectOrgId = "";
|
||||
|
||||
layui.config({
|
||||
base: "../../js/layui-v2.6.8/dtree/", //此处路径请自行处理, 可以使用绝对路径
|
||||
}).extend({
|
||||
dtree: 'dtree'
|
||||
}).use(['form', 'layer', 'table','dtree', 'laydate'], function () {
|
||||
}).use(['form', 'layer', 'table', 'dtree', 'laydate'], function () {
|
||||
form = layui.form;
|
||||
layer = layui.layer;
|
||||
table = layui.table;
|
||||
|
|
@ -21,10 +21,11 @@ layui.config({
|
|||
'id': this.value,
|
||||
'state': obj.elem.checked ? 1 : 0
|
||||
}
|
||||
params={
|
||||
encryptedData:encryptCBC(JSON.stringify(params))
|
||||
params = {
|
||||
encryptedData: encryptCBC(JSON.stringify(params))
|
||||
}
|
||||
ajaxRequest(url, "POST", params, true, function () {}, function (result) {
|
||||
ajaxRequest(url, "POST", params, true, function () {
|
||||
}, function (result) {
|
||||
console.log(result)
|
||||
reloadData();
|
||||
if (result.status === 200) {
|
||||
|
|
@ -90,15 +91,15 @@ function initTable(dataList, limit, page) {
|
|||
cols: [
|
||||
[
|
||||
//表头
|
||||
{title: "序号", width: 80, unresize: true, align: "center",
|
||||
{
|
||||
title: "序号", width: 80, unresize: true, align: "center",
|
||||
templet: function (d) {
|
||||
return (page - 1) * limit + d.LAY_INDEX;
|
||||
}
|
||||
},
|
||||
{field: "loginName", title: "登录名", unresize: true, align: "center"},
|
||||
{field: "username", title: "用户名", unresize: true, align: "center"},
|
||||
// {field: "userCode", title: "工号", unresize: true, align: "center"},
|
||||
{field: "sex", title: "性别", unresize: true, align: "center",
|
||||
{field: "loginName", title: "登录账号", unresize: true, align: "center"},
|
||||
{field: "username", title: "姓名", unresize: true, align: "center"},
|
||||
/*{field: "sex", title: "性别", unresize: true, align: "center",
|
||||
templet: function (d) {
|
||||
if (d.sex == 0) {
|
||||
return "女";
|
||||
|
|
@ -106,21 +107,23 @@ function initTable(dataList, limit, page) {
|
|||
return "男";
|
||||
}
|
||||
}
|
||||
},
|
||||
{field: "orgName", title: "单位部门", unresize: true, align: "center"},
|
||||
},*/
|
||||
// {field: "orgName", title: "单位部门", unresize: true, align: "center"},
|
||||
{field: "roleName", title: "角色", unresize: true, align: "center"},
|
||||
{field: "phone", title: "联系电话", unresize: true, align: "center"},
|
||||
{field: "userType", title: "用户类型", unresize: true, align: "center"},
|
||||
{field: "state", title: "启用状态", align: "center",templet: '#is-state'},
|
||||
{title: "操作", unresize: true, width: 300, align: "center",
|
||||
// {field: "phone", title: "联系电话", unresize: true, align: "center"},
|
||||
{field: "userType", title: "用户级别", unresize: true, align: "center"},
|
||||
{field: "state", title: "启用状态", align: "center", templet: '#is-state'},
|
||||
{field: "createTime", title: "创建时间", unresize: true, align: "center"},
|
||||
{
|
||||
title: "操作", unresize: true, width: 300, align: "center",
|
||||
templet: function (d) {
|
||||
|
||||
let html = '';
|
||||
// let updaetpwd="<a class=\"layui-icon layui-icon-password\" style='cursor:pointer;' title='修改密码' onclick=\"resetPwd('" + d.id + "')\"></a>";
|
||||
let del="<a class=\"layui-icon layui-icon-delete\" style='cursor:pointer;' title='删除' onclick=\"delData('" + d.id + "')\"></a>"
|
||||
let edit="<a class=\"layui-icon layui-icon-edit\" style='cursor:pointer;' title='修改' onclick=\"addData('" + d.id + "')\"></a>";
|
||||
html=edit+del;
|
||||
if(d.delFlag==1){
|
||||
let updaetpwd = "<a class=\"layui-icon layui-icon-password\" style='cursor:pointer;' title='重置密码' onclick=\"resetPwd('" + d.id + "')\"></a>";
|
||||
let del = "<a class=\"layui-icon layui-icon-delete\" style='cursor:pointer;' title='删除' onclick=\"delData('" + d.id + "')\"></a>"
|
||||
let edit = "<a class=\"layui-icon layui-icon-edit\" style='cursor:pointer;' title='修改' onclick=\"addData('" + d.id + "')\"></a>";
|
||||
html = updaetpwd + edit + del;
|
||||
if (d.delFlag == 1) {
|
||||
return '';
|
||||
}
|
||||
return html;
|
||||
|
|
@ -155,14 +158,14 @@ function getReqParams(page, limit, type) {
|
|||
page: '1',
|
||||
limit: '10',
|
||||
userName: '',
|
||||
phone:'',
|
||||
orgId:'',
|
||||
phone: '',
|
||||
orgId: '',
|
||||
userType: '',
|
||||
};
|
||||
}
|
||||
console.log(obj)
|
||||
obj={
|
||||
encryptedData:encryptCBC(JSON.stringify(obj))
|
||||
obj = {
|
||||
encryptedData: encryptCBC(JSON.stringify(obj))
|
||||
}
|
||||
return obj;
|
||||
}
|
||||
|
|
@ -199,7 +202,7 @@ function reloadData() {
|
|||
pages(pageNum, limitSize);
|
||||
}
|
||||
|
||||
// 新增/修改平台用户
|
||||
// 修改用户
|
||||
function addData(id) {
|
||||
let title = '新增用户'
|
||||
if (id) {
|
||||
|
|
@ -208,7 +211,7 @@ function addData(id) {
|
|||
let param = {
|
||||
'id': id
|
||||
}
|
||||
openIframe2("addOrEditUser", title, "child/userForm.html", '1000px', '625px', param);
|
||||
openIframe2("addOrEditUser", title, "child/userFormTemp.html", '1000px', '625px', param);
|
||||
}
|
||||
|
||||
function addDataTemp(id) {
|
||||
|
|
@ -229,8 +232,8 @@ function delData(id) {
|
|||
let params = {
|
||||
'id': id
|
||||
}
|
||||
params={
|
||||
encryptedData:encryptCBC(JSON.stringify(params))
|
||||
params = {
|
||||
encryptedData: encryptCBC(JSON.stringify(params))
|
||||
}
|
||||
ajaxRequest(url, "POST", params, true, function () {
|
||||
}, function (result) {
|
||||
|
|
@ -259,7 +262,7 @@ function editUserAccountStatus(id, status, type) {
|
|||
ajaxRequest(url, "POST", params, true, function () {
|
||||
}, function (result) {
|
||||
if (result.code === 200) {
|
||||
if(type){
|
||||
if (type) {
|
||||
reloadData();
|
||||
}
|
||||
parent.layer.msg(result.msg, {icon: 1})
|
||||
|
|
@ -286,7 +289,7 @@ function getOrgTree() {
|
|||
ajaxRequest(url, "POST", null, false, function () {
|
||||
}, function (result) {
|
||||
if (result.code === 200) {
|
||||
console.log(result,"getOrgTree")
|
||||
console.log(result, "getOrgTree")
|
||||
data = result.data;
|
||||
setOrgTree(data)
|
||||
} else {
|
||||
|
|
@ -298,25 +301,25 @@ function getOrgTree() {
|
|||
return data;
|
||||
}
|
||||
|
||||
function setOrgTree(data){
|
||||
console.log("data",data)
|
||||
var af=0,bf=0;
|
||||
function setOrgTree(data) {
|
||||
console.log("data", data)
|
||||
var af = 0, bf = 0;
|
||||
$.each(data, function (i, item) {
|
||||
if(item.id==0){
|
||||
item.id="99999";
|
||||
item.parentId="0";
|
||||
item.title="请选择组织机构";
|
||||
af=1;
|
||||
if (item.id == 0) {
|
||||
item.id = "99999";
|
||||
item.parentId = "0";
|
||||
item.title = "请选择组织机构";
|
||||
af = 1;
|
||||
}
|
||||
if(item.id==1){
|
||||
item.parentId="99999";
|
||||
bf=1;
|
||||
if (item.id == 1) {
|
||||
item.parentId = "99999";
|
||||
bf = 1;
|
||||
}
|
||||
if(af==1&&bf==1){
|
||||
if (af == 1 && bf == 1) {
|
||||
return
|
||||
}
|
||||
})
|
||||
orgTree =dtree.renderSelect({
|
||||
orgTree = dtree.renderSelect({
|
||||
elem: "#orgId",
|
||||
width: "100%", // 指定树的宽度
|
||||
dataFormat: "list",
|
||||
|
|
@ -329,11 +332,11 @@ function setOrgTree(data){
|
|||
}
|
||||
});
|
||||
dtree.on('node(orgId)', function (obj) {
|
||||
console.log("obj.param.nodeId",obj.param.nodeId); // 打印选中节点的值
|
||||
if(obj.param.nodeId=="99999"){
|
||||
selectOrgId="";
|
||||
}else{
|
||||
selectOrgId=obj.param.nodeId;
|
||||
console.log("obj.param.nodeId", obj.param.nodeId); // 打印选中节点的值
|
||||
if (obj.param.nodeId == "99999") {
|
||||
selectOrgId = "";
|
||||
} else {
|
||||
selectOrgId = obj.param.nodeId;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
|
|||
|
|
@ -39,7 +39,7 @@
|
|||
<div class="type-num layout" onclick="queryByType(this,0)">
|
||||
<div class="layout">
|
||||
<p>总照片数</p>
|
||||
<p>1250</p>
|
||||
<p id="totalNum">0</p>
|
||||
</div>
|
||||
<div class="layout">
|
||||
<img src="../../img/synthesisQuery/1.png">
|
||||
|
|
@ -48,7 +48,7 @@
|
|||
<div class="type-num layout" onclick="queryByType(this,1)">
|
||||
<div class="layout">
|
||||
<p>安全违章</p>
|
||||
<p>1250</p>
|
||||
<p id="safetyVioNum">0</p>
|
||||
</div>
|
||||
<div class="layout">
|
||||
<img src="../../img/synthesisQuery/2.png">
|
||||
|
|
@ -57,7 +57,7 @@
|
|||
<div class="type-num layout" onclick="queryByType(this,2)">
|
||||
<div class="layout">
|
||||
<p>质量检查</p>
|
||||
<p>1250</p>
|
||||
<p id="qualityInsNum">0</p>
|
||||
</div>
|
||||
<div class="layout">
|
||||
<img src="../../img/synthesisQuery/3.png">
|
||||
|
|
@ -66,7 +66,7 @@
|
|||
<div class="type-num layout" onclick="queryByType(this,3)">
|
||||
<div class="layout">
|
||||
<p>安全措施落实</p>
|
||||
<p>1250</p>
|
||||
<p id="safetyMeasNum">0</p>
|
||||
</div>
|
||||
<div class="layout">
|
||||
<img src="../../img/synthesisQuery/4.png">
|
||||
|
|
@ -75,7 +75,7 @@
|
|||
<div class="type-num layout" onclick="queryByType(this,4)">
|
||||
<div class="layout">
|
||||
<p>协调照片</p>
|
||||
<p>1250</p>
|
||||
<p id="coordinatedPhotoNum">0</p>
|
||||
</div>
|
||||
<div class="layout">
|
||||
<img src="../../img/synthesisQuery/5.png">
|
||||
|
|
@ -84,7 +84,7 @@
|
|||
<div class="type-num layout" onclick="queryByType(this,5)">
|
||||
<div class="layout">
|
||||
<p>重要事项及宣传类</p>
|
||||
<p>1250</p>
|
||||
<p id="importIssuesAndPublicityNum">0</p>
|
||||
</div>
|
||||
<div class="layout">
|
||||
<img src="../../img/synthesisQuery/6.png">
|
||||
|
|
@ -98,21 +98,10 @@
|
|||
</div>
|
||||
<div id="img-box">
|
||||
<div class="flow-demo layout" id="ID-flow-demo">
|
||||
<!--<div class="img-info">
|
||||
<div class="imgData layout">
|
||||
<img src="../../img/synthesisQuery/7.jpg">
|
||||
</div>
|
||||
<div class="imgData2 layout">
|
||||
<p>2024-05-05</p>
|
||||
<p class="img-color1">安全违章</p>
|
||||
</div>
|
||||
<div class="imgData3 layout">
|
||||
<p>违章照片</p>
|
||||
</div>
|
||||
</div>-->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
<script src="../../js/synthesisQuery/synthesisQuery.js" charset="UTF-8" type="text/javascript"></script>
|
||||
<script src="../../js/synthesisQuery/synthesisQueryAjax.js" charset="UTF-8" type="text/javascript"></script>
|
||||
</html>
|
||||
|
|
@ -21,7 +21,7 @@
|
|||
<input hidden id="id">
|
||||
|
||||
<div class="layui-form-item" style="margin-top: 2%;">
|
||||
<label class="layui-form-label"><i style="padding: 0 10px;">*</i>登录名</label>
|
||||
<label class="layui-form-label"><i style="padding: 0 10px;">*</i>登录账号</label>
|
||||
<div class="layui-input-inline">
|
||||
<input class="layui-input" id="loginName" name="loginName" autocomplete="off"
|
||||
lay-verify="required" maxlength="20">
|
||||
|
|
@ -29,7 +29,7 @@
|
|||
</div>
|
||||
|
||||
<div class="layui-form-item" style="margin-top: 2%;">
|
||||
<label class="layui-form-label"><i style="padding: 0 10px;">*</i>用户名</label>
|
||||
<label class="layui-form-label"><i style="padding: 0 10px;">*</i>姓名</label>
|
||||
<div class="layui-input-inline">
|
||||
<input class="layui-input" id="username" name="username" autocomplete="off"
|
||||
lay-verify="required" maxlength="10">
|
||||
|
|
@ -44,12 +44,12 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<!-- <div class="layui-form-item">
|
||||
<label class="layui-form-label"><i style="padding: 0 10px;">*</i>单位部门</label>
|
||||
<div class="layui-input-inline">
|
||||
<ul id="orgId" class="dtree" data-id="0"></ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>-->
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"><i style="padding: 0 10px;">*</i>角色</label>
|
||||
|
|
@ -59,7 +59,15 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-form-item layui-hide" id="projectDiv">
|
||||
<label class="layui-form-label"><i style="padding: 0 10px;">*</i>管理的工程</label>
|
||||
<div class="layui-input-inline">
|
||||
<select id="project" lay-verify="required" name="project" class="form-control input-sm">
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- <div class="layui-form-item">
|
||||
<label class="layui-form-label">班组</label>
|
||||
<div class="layui-input-inline">
|
||||
<select id="teamId" name="teamId" class="form-control input-sm">
|
||||
|
|
@ -73,10 +81,10 @@
|
|||
<input class="layui-input" autocomplete="off"
|
||||
lay-verify="isRepeat |required" maxlength="11" id="phone" name="phone">
|
||||
</div>
|
||||
</div>
|
||||
</div>-->
|
||||
|
||||
|
||||
<div class="layui-form-item">
|
||||
<!-- <div class="layui-form-item">
|
||||
<label class="layui-form-label"> <i style="padding: 0 10px;">*</i> 用户类型:</label>
|
||||
<div class="layui-input-block" >
|
||||
<input type="radio" id="userType_1" name="userType" value="1" title="外部用户" checked>
|
||||
|
|
@ -90,9 +98,9 @@
|
|||
<input type="radio" id="state_1" name="state" value="1" title="启用" checked>
|
||||
<input type="radio" id="state_0" name="state" value="0" title="关闭">
|
||||
</div>
|
||||
</div>
|
||||
</div>-->
|
||||
|
||||
<div class="layui-form-item">
|
||||
<!-- <div class="layui-form-item">
|
||||
<label class="layui-form-label"><i style="padding: 0 10px;">*</i>登录权限</label>
|
||||
<div class="layui-input-inline" id="cbGuDing" >
|
||||
<input type="checkbox" name="loginType" value="1" title="后台" lay-skin="primary" checked>
|
||||
|
|
@ -100,7 +108,7 @@
|
|||
<input type="checkbox" name="loginType" value="3" title="app" lay-skin="primary">
|
||||
<input type="hidden" id="loginType" />
|
||||
</div>
|
||||
</div>
|
||||
</div>-->
|
||||
|
||||
<div class="layui-form-item" style="margin-top: 2%;" id="pwd">
|
||||
<label class="layui-form-label"><i style="padding: 0 10px;">*</i>密码</label>
|
||||
|
|
|
|||
|
|
@ -21,15 +21,16 @@
|
|||
<input hidden id="id">
|
||||
|
||||
<div class="layui-form-item" style="margin-top: 2%;">
|
||||
<label class="layui-form-label"><i style="padding: 0 10px;">*</i>登录名</label>
|
||||
<label class="layui-form-label"><i style="padding: 0 10px;">*</i>登录账号</label>
|
||||
<div class="layui-input-inline">
|
||||
<input class="layui-input" id="loginName" name="loginName" autocomplete="off"
|
||||
placeholder="请输入11位手机号"
|
||||
lay-verify="required" maxlength="20">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item" style="margin-top: 2%;">
|
||||
<label class="layui-form-label"><i style="padding: 0 10px;">*</i>用户名</label>
|
||||
<label class="layui-form-label"><i style="padding: 0 10px;">*</i>姓名</label>
|
||||
<div class="layui-input-inline">
|
||||
<input class="layui-input" id="username" name="username" autocomplete="off"
|
||||
lay-verify="required" maxlength="10">
|
||||
|
|
@ -38,69 +39,80 @@
|
|||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"> <i style="padding: 0 10px;">*</i> 性别</label>
|
||||
<div class="layui-input-block" >
|
||||
<input type="radio" id="sex_1" name="sex" value="1" title="男" checked>
|
||||
<input type="radio" id="sex_0" name="sex" value="0" title="女">
|
||||
<div class="layui-input-block">
|
||||
<input type="radio" id="sex_1" name="sex" value="1" title="男" checked>
|
||||
<input type="radio" id="sex_0" name="sex" value="0" title="女">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"><i style="padding: 0 10px;">*</i>单位部门</label>
|
||||
<div class="layui-input-inline">
|
||||
<ul id="orgId" class="dtree" data-id="0"></ul>
|
||||
</div>
|
||||
</div>
|
||||
<!-- <div class="layui-form-item">
|
||||
<label class="layui-form-label"><i style="padding: 0 10px;">*</i>单位部门</label>
|
||||
<div class="layui-input-inline">
|
||||
<ul id="orgId" class="dtree" data-id="0"></ul>
|
||||
</div>
|
||||
</div>-->
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"><i style="padding: 0 10px;">*</i>角色</label>
|
||||
<div class="layui-input-inline">
|
||||
<select id="roleId" lay-verify="required" name="roleId" class="form-control input-sm">
|
||||
<select id="roleId" lay-verify="required" name="roleId" lay-filter="roleId"
|
||||
class="form-control input-sm">
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- <div class="layui-form-item" style="margin-top: 2%;">-->
|
||||
<!-- <label class="layui-form-label"><i style="padding: 0 10px;">*</i>工号</label>-->
|
||||
<!-- <div class="layui-input-inline">-->
|
||||
<!-- <input class="layui-input" id="userCode" name="userCode" autocomplete="off"-->
|
||||
<!-- lay-verify="required" maxlength="20">-->
|
||||
<!-- </div>-->
|
||||
<!-- </div>-->
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">班组</label>
|
||||
<div class="layui-form-item layui-hide" id="projectDiv">
|
||||
<label class="layui-form-label"><i style="padding: 0 10px;">*</i>管理的工程</label>
|
||||
<div class="layui-input-inline">
|
||||
<select id="teamId" name="teamId" class="form-control input-sm">
|
||||
<select id="project" lay-verify="required" name="project" class="form-control input-sm">
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"><i style="padding: 0 10px;">*</i>联系电话</label>
|
||||
<div class="layui-input-inline">
|
||||
<input class="layui-input" autocomplete="off"
|
||||
lay-verify="isRepeat |required" maxlength="11" id="phone" name="phone">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"> <i style="padding: 0 10px;">*</i> 用户类型:</label>
|
||||
<div class="layui-input-block" >
|
||||
<input type="radio" id="userType_1" name="userType" value="1" title="外部用户" checked>
|
||||
<input type="radio" id="userType_0" name="userType" value="0" title="内部用户">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"> <i style="padding: 0 10px;">*</i> 是否启用:</label>
|
||||
<div class="layui-input-block" >
|
||||
<input type="radio" id="state_1" name="state" value="1" title="启用" checked>
|
||||
<input type="radio" id="state_0" name="state" value="0" title="关闭">
|
||||
</div>
|
||||
</div>
|
||||
<!-- <div class="layui-form-item" style="margin-top: 2%;">-->
|
||||
<!-- <label class="layui-form-label"><i style="padding: 0 10px;">*</i>工号</label>-->
|
||||
<!-- <div class="layui-input-inline">-->
|
||||
<!-- <input class="layui-input" id="userCode" name="userCode" autocomplete="off"-->
|
||||
<!-- lay-verify="required" maxlength="20">-->
|
||||
<!-- </div>-->
|
||||
<!-- </div>-->
|
||||
|
||||
<!-- <div class="layui-form-item">
|
||||
<label class="layui-form-label">班组</label>
|
||||
<div class="layui-input-inline">
|
||||
<select id="teamId" name="teamId" class="form-control input-sm">
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
-->
|
||||
<!--
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"><i style="padding: 0 10px;">*</i>联系电话</label>
|
||||
<div class="layui-input-inline">
|
||||
<input class="layui-input" autocomplete="off"
|
||||
lay-verify="isRepeat |required" maxlength="11" id="phone" name="phone">
|
||||
</div>
|
||||
</div>
|
||||
-->
|
||||
|
||||
|
||||
<!-- <div class="layui-form-item">
|
||||
<label class="layui-form-label"> <i style="padding: 0 10px;">*</i> 用户类型:</label>
|
||||
<div class="layui-input-block" >
|
||||
<input type="radio" id="userType_1" name="userType" value="1" title="外部用户" checked>
|
||||
<input type="radio" id="userType_0" name="userType" value="0" title="内部用户">
|
||||
</div>
|
||||
</div>-->
|
||||
|
||||
<!-- <div class="layui-form-item">
|
||||
<label class="layui-form-label"> <i style="padding: 0 10px;">*</i> 是否启用:</label>
|
||||
<div class="layui-input-block" >
|
||||
<input type="radio" id="state_1" name="state" value="1" title="启用" checked>
|
||||
<input type="radio" id="state_0" name="state" value="0" title="关闭">
|
||||
</div>
|
||||
</div>-->
|
||||
|
||||
<!-- <div class="layui-form-item">
|
||||
<label class="layui-form-label"><i style="padding: 0 10px;">*</i>登录权限</label>
|
||||
<div class="layui-input-inline" id="cbGuDing" >
|
||||
<input type="checkbox" name="loginType" value="1" title="后台" lay-skin="primary" checked>
|
||||
|
|
@ -108,15 +120,15 @@
|
|||
<input type="checkbox" name="loginType" value="3" title="app" lay-skin="primary">
|
||||
<input type="hidden" id="loginType" />
|
||||
</div>
|
||||
</div>
|
||||
</div>-->
|
||||
|
||||
<div class="layui-form-item" style="margin-top: 2%;" id="pwd">
|
||||
<label class="layui-form-label"><i style="padding: 0 10px;">*</i>密码</label>
|
||||
<div class="layui-input-inline password" >
|
||||
<input class="layui-input secret1" type="password" id="password" name="password" autocomplete="off"
|
||||
<div class="layui-input-inline password">
|
||||
<input class="layui-input secret1" type="password" id="password" name="password" autocomplete="off"
|
||||
lay-verify="required" maxlength="15">
|
||||
<span class="eyes1">
|
||||
<img class="secreteyes1 fa" src="../../../img/by.gif"> <!-- 闭眼 -->
|
||||
<img class="secreteyes1 fa" src="../../../img/by.gif"> <!-- 闭眼 -->
|
||||
<img class="secreteyesk1 none fa" src="../../../img/ky.gif">
|
||||
</span>
|
||||
|
||||
|
|
|
|||
|
|
@ -22,11 +22,11 @@
|
|||
<div class="layui-form-item">
|
||||
<div class="layui-inline" style="padding: 0 0 0 10px;">
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" id="userName" maxlength="30" class="layui-input" autocomplete="off" placeholder="请输入用户名">
|
||||
<input type="text" id="keyWord" maxlength="30" class="layui-input" autocomplete="off" placeholder="请输入关键字">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-inline" style="padding: 0 0 0 10px;">
|
||||
<!-- <div class="layui-inline" style="padding: 0 0 0 10px;">
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" id="phone" maxlength="30" class="layui-input" autocomplete="off" placeholder="请输入电话号码">
|
||||
</div>
|
||||
|
|
@ -45,13 +45,13 @@
|
|||
<option value="1"> 外部用户</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>-->
|
||||
|
||||
<div class="layui-inline btns">
|
||||
<button type="button" class="layui-btn layui-btn-normal layui-btn-sm btn-1" onclick="query(1)">查询
|
||||
</button>
|
||||
<!-- <button type="button" class="layui-btn layui-btn-normal layui-btn-sm btn-1" onclick="reset()">重置-->
|
||||
<!-- </button>-->
|
||||
<button type="button" class="layui-btn layui-btn-normal layui-btn-sm btn-1" onclick="reset()">重置
|
||||
</button>
|
||||
<button type="button" class="layui-btn layui-btn-primary layui-btn-sm btn-2"
|
||||
onclick="addDataTemp(null)">
|
||||
<div class="layout" style="justify-content: space-around;"><img
|
||||
|
|
|
|||
Loading…
Reference in New Issue