班组注册页面和接口开发

This commit is contained in:
liang.chao 2025-08-05 17:59:36 +08:00
parent def4717a09
commit 05369e9c26
13 changed files with 1041 additions and 7 deletions

View File

@ -2,6 +2,8 @@ package com.bonus.gs.sub.evaluate.evaluate.beans;
import lombok.Data;
import java.util.List;
/**
* @Authorliang.chao
* @Date2025/6/26 - 10:13
@ -30,7 +32,13 @@ public class TeamGroupBean {
// 班组人数
private String teamPersonNum;
private String keyWord;
// 信息评审表
private String infoFileUrl;
private String level;
private String tableSource;
private Integer auditStatus;
//班组长信息
private String name;
private String idCard;
private String phone;
@ -42,4 +50,7 @@ public class TeamGroupBean {
private Integer teamId;
private Integer userId;
// 组员信息
private List<teamGroupPersonBean> teamPersons;
}

View File

@ -0,0 +1,20 @@
package com.bonus.gs.sub.evaluate.evaluate.beans;
import lombok.Data;
/**
* @Authorliang.chao
* @Date2025/8/5 - 16:29
*/
@Data
public class teamGroupPersonBean {
private String id;
private String name;
private String idCard;
private String phone;
private String sex;
private String workTypeId;
private String workType;
private String faceUrl;
private String isTeamLeader;
}

View File

@ -3,6 +3,7 @@ package com.bonus.gs.sub.evaluate.evaluate.controller;
import com.bonus.gs.sub.evaluate.evaluate.beans.EvaluateBean;
import com.bonus.gs.sub.evaluate.evaluate.beans.EvaluatePersonBean;
import com.bonus.gs.sub.evaluate.evaluate.beans.OrganizationalBean;
import com.bonus.gs.sub.evaluate.evaluate.beans.TeamGroupBean;
import com.bonus.gs.sub.evaluate.evaluate.dao.OrganizationalDao;
import com.bonus.gs.sub.evaluate.evaluate.service.OrganizationalService;
import com.bonus.gs.sub.evaluate.manager.controller.BaseController;
@ -275,8 +276,6 @@ public class OrganizationalController extends BaseController<EvaluateBean> {
}
/**
* 根据外包商id(project_assignment)和项目id获取组织架构(pm_org_info)中外包商id
* 修改 不传
*
* @param bean
* @return
@ -320,6 +319,26 @@ public class OrganizationalController extends BaseController<EvaluateBean> {
}
return ar;
}
/**
* 班组注册
* @param bean
* @return
*/
@RequestMapping(value = "registerTeamGroup", method = RequestMethod.POST)
@ResponseBody
public AjaxRes registerTeamGroup(@RequestBody TeamGroupBean bean) {
AjaxRes ar = getAjaxRes();
if (!UserUtil.isPhone(bean.getPhone())){
ar.setFailMsg("手机号格式错误");
return ar;
}
if (!UserUtil.isIdCard(bean.getIdCard())){
ar.setFailMsg("身份证号格式错误");
return ar;
}
ar = service.registerTeamGroup(bean);
return ar;
}
@RequestMapping(value = "addDept", method = RequestMethod.POST)
@ResponseBody

View File

@ -45,7 +45,18 @@ public class TeamGroupController extends BaseController<TeamGroupBean> {
private String uploadDir;
@GetMapping("list")
public AjaxRes getProjectList(TeamGroupBean teamGroupBean) {
public AjaxRes getList(TeamGroupBean teamGroupBean) {
AjaxRes ar = new AjaxRes();
try {
List<TeamGroupBean> teamGroupList = teamGroupService.getTeamGroupList(teamGroupBean);
ar.setListSucceed(teamGroupList);
} catch (Exception e) {
ar.setFailMsg(GlobalConst.DATA_FAIL);
}
return ar;
}
@GetMapping("registerList")
public AjaxRes getRegisterList(TeamGroupBean teamGroupBean) {
AjaxRes ar = new AjaxRes();
try {
List<TeamGroupBean> teamGroupList = teamGroupService.getTeamGroupList(teamGroupBean);

View File

@ -1,9 +1,7 @@
package com.bonus.gs.sub.evaluate.evaluate.dao;
import com.bonus.gs.sub.evaluate.evaluate.beans.EvaluatePersonBean;
import com.bonus.gs.sub.evaluate.evaluate.beans.OrganizationalBean;
import com.bonus.gs.sub.evaluate.evaluate.beans.TeamEvaluateBean;
import com.bonus.gs.sub.evaluate.evaluate.beans.*;
import com.bonus.gs.sub.evaluate.manager.utils.AjaxRes;
import org.apache.ibatis.annotations.Mapper;
@ -181,6 +179,8 @@ public interface OrganizationalDao{
Integer insetTeamGroupType(OrganizationalBean bean);
Integer insetTeamPerson(OrganizationalBean bean);
Integer insetTeamPersonLeader(TeamGroupBean bean);
Integer insetTeamPersonOthers(teamGroupPersonBean bean);
List<OrganizationalBean> getWorkType(OrganizationalBean bean);
@ -191,4 +191,6 @@ public interface OrganizationalDao{
int addData2(OrganizationalBean bean);
Integer getpParentId(OrganizationalBean bean);
int addTeamGroup(TeamGroupBean bean);
}

View File

@ -2,6 +2,7 @@ package com.bonus.gs.sub.evaluate.evaluate.service;
import com.bonus.gs.sub.evaluate.evaluate.beans.OrganizationalBean;
import com.bonus.gs.sub.evaluate.evaluate.beans.TeamGroupBean;
import com.bonus.gs.sub.evaluate.manager.utils.AjaxRes;
import java.util.List;
@ -80,4 +81,6 @@ public interface OrganizationalService{
List<OrganizationalBean> getWorkType(OrganizationalBean bean);
List<OrganizationalBean> getProjectSelect(OrganizationalBean bean);
AjaxRes registerTeamGroup(TeamGroupBean bean);
}

View File

@ -2,6 +2,8 @@ package com.bonus.gs.sub.evaluate.evaluate.service;
import com.bonus.gs.sub.evaluate.evaluate.beans.OrganizationalBean;
import com.bonus.gs.sub.evaluate.evaluate.beans.TeamEvaluateBean;
import com.bonus.gs.sub.evaluate.evaluate.beans.TeamGroupBean;
import com.bonus.gs.sub.evaluate.evaluate.beans.teamGroupPersonBean;
import com.bonus.gs.sub.evaluate.evaluate.controller.OrganizationalController;
import com.bonus.gs.sub.evaluate.evaluate.dao.OrganizationalDao;
import com.bonus.gs.sub.evaluate.evaluate.dao.ProjectDao;
@ -403,6 +405,51 @@ public class OrganizationalServiceImpl implements OrganizationalService {
return mapper.getProjectSelect(bean);
}
@Override
public AjaxRes registerTeamGroup(TeamGroupBean bean) {
AjaxRes ar = new AjaxRes();
try {
OrganizationalBean o = new OrganizationalBean();
o.setIdCard(bean.getIdCard());
o.setUserPhone(bean.getPhone());
if (mapper.getUser(o) > 0) {
ar.setFailMsg("该班长已在其他班组中");
return ar;
}
for (teamGroupPersonBean teamPersonBean : bean.getTeamPersons()) {
o.setIdCard(teamPersonBean.getIdCard());
o.setUserPhone(teamPersonBean.getPhone());
if (mapper.getUser(o) > 0) {
ar.setFailMsg("组员" + teamPersonBean.getName() + "已在其他班组中");
return ar;
}
}
int num;
num = mapper.addTeamGroup(bean);
if (num > 0) {
// 新增班组类型
o.setId(bean.getSubContractor());
o.setTeamType(bean.getTeamType());
mapper.insetTeamGroupType(o);
// 新增班组组长
mapper.insetTeamPersonLeader(bean);
// 新增班组成员
bean.getTeamPersons().forEach(teamPersonBean -> {
teamPersonBean.setId(bean.getId());
mapper.insetTeamPersonOthers(teamPersonBean);
});
ar.setSucceed("新增成功");
return ar;
}
ar.setFailMsg("新增失败,请联系管理员");
return ar;
} catch (Exception e) {
logger.error(e.toString(), e);
ar.setFailMsg("新增失败,请联系管理员");
}
return ar;
}
public static List<OrganizationalBean> buildTree(List<OrganizationalBean> nodes) {
// 根节点是没有父节点的节点
List<OrganizationalBean> rootNodes = nodes.stream()

View File

@ -267,6 +267,41 @@
0
</trim>
</insert>
<insert id="addTeamGroup" useGeneratedKeys="true" keyProperty="id">
insert into pm_org_info
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="teamGroupName != null and teamGroupName != ''">name,</if>
<if test="level != null">level,</if>
<if test="name != null and name !=''">user_name,</if>
<if test="idCard != null">id_card,</if>
<if test="sex != null">sex,</if>
<if test="phone != null and phone != ''">user_phone,</if>
<if test="tableSource != null">table_source,</if>
<if test="subContractor != null and subContractor != ''">p_parent_id,</if>
<if test="auditStatus != null">audit_status,</if>
status,
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="teamGroupName != null and teamGroupName != ''">#{teamGroupName},</if>
<if test="level != null">#{level},</if>
<if test="name != null and name !=''">#{name},</if>
<if test="idCard != null and idCard != ''">#{idCard},</if>
<if test="sex != null">#{sex},</if>
<if test="phone != null and phone != ''">#{phone},</if>
<if test="tableSource != null">#{tableSource},</if>
<if test="subContractor != null and subContractor != ''">#{subContractor},</if>
<if test="auditStatus != null">#{auditStatus},</if>
0
</trim>
</insert>
<insert id="insetTeamPersonLeader">
insert into team_person(team_id, name, id_card, phone,sex,work_type,face_url,is_team_leader)
values (#{id}, #{name},#{idCard}, #{phone}, #{sex}, #{workType}, #{faceUrl}, #{isTeamLeader})
</insert>
<insert id="insetTeamPersonOthers">
insert into team_person(team_id, name, id_card, phone,sex,work_type,face_url,is_team_leader)
values (#{id}, #{name},#{idCard}, #{phone}, #{sex}, #{workType}, #{faceUrl}, #{isTeamLeader})
</insert>
<select id="getUserList" resultType="com.bonus.gs.sub.evaluate.evaluate.beans.OrganizationalBean">
select NAME userName, LOGIN_NAME idCard, SEX, TELPHONE userPhone, dept_id tableId
FROM gs_exam.pm_user

View File

@ -0,0 +1,174 @@
let form, table, tree;
let alreadyChooseTrees = [];
let selectData = [];
layui.use(['table', 'form', 'upload', 'tree'], function () {
const $ = layui.$;
form = layui.form;
upload = layui.upload;
table = layui.table;
// 使用 layui 的 form.on 监听下拉框变化
form.on('select(subContractor)', function (obj) {
const subContractorId = obj.value; // 获取选中的值
console.log("subContractorId:", subContractorId);
if (subContractorId) {
getPromanagerSelect(subContractorId);
}
});
// 让点击上传按钮触发文件输入框的点击事件
$('#uploadBtn').on('click', function () {
$('#fileInput').click();
});
// 让点击上传按钮触发文件输入框的点击事件
$('#uploadBtn1').on('click', function () {
$('#fileInput1').click();
});
// 文件选择后的回调处理
$('#fileInput').on('change', function () {
const file = $('#fileInput')[0].files[0];
const fileName = file.name;
const fileExtension = fileName.split('.').pop().toLowerCase();
// 校验文件类型,确保是 .jpg 或 .png 文件
if (fileExtension !== 'jpg' && fileExtension !== 'png') {
layer.msg('请选择 图片 文件(.jpg 或 .png', {icon: 2, time: 2000});
$('#fileInput').val('');
$('#fileInfo').html('');
} else {
$('#fileInfo').html('选中的文件:' + fileName);
}
});
// 文件选择后的回调处理
$('#fileInput1').on('change', function () {
const file = $('#fileInput1')[0].files[0];
const fileName = file.name;
const fileExtension = fileName.split('.').pop().toLowerCase();
// 校验文件类型,确保是 .xls 或 .xlsx 文件
if (fileExtension !== 'doc' && fileExtension !== 'docx' && fileExtension !== 'png' && fileExtension !== 'jpg' && fileExtension !== 'png' && fileExtension !== 'pdf') {
layer.msg('请选择word、pdf或图片文件', {icon: 2, time: 2000});
$('#fileInput1').val('');
$('#fileInfo1').html('');
} else {
$('#fileInfo1').html('选中的文件:' + fileName);
}
});
// 初始化下拉框
getOutSourceSelected();
getTeamGroupType();
getWorkType();
// 设置下拉框选项
function setSelectValue(list, selectName) {
let html = '<option value="">请选择</option>';
if (list && list.length > 0) {
$.each(list, function (index, item) {
html += `<option value="${item.id}">${item.name}</option>`;
});
}
$('#' + selectName).empty().append(html);
form.render('select');
}
// 获取外包商下拉数据
function getOutSourceSelected() {
$.ajax({
type: 'POST',
url: ctxPath + '/organizational/getSubContractorSelected',
success: function (data) {
setSelectValue(data.obj, 'subContractor');
}
});
}
// 根据外包商获取项目下拉数据(支持传参)
function getPromanagerSelect(subContractorId) {
$.ajax({
type: 'POST',
url: ctxPath + '/organizational/getProjectBySubContractor',
data: {
id: subContractorId
},
success: function (data) {
setSelectValue(data.obj, 'project');
}
});
}
// 获取班组类型下拉框
function getTeamGroupType() {
$.ajax({
type: 'POST',
url: ctxPath + '/organizational/getTeamGroupType',
success: function (data) {
setSelectValue(data.obj, 'teamType');
}
});
}
// 获取工种类型下拉框
function getWorkType() {
$.ajax({
type: 'POST',
url: ctxPath + '/organizational/getWorkType',
success: function (data) {
setSelectValue(data.obj, 'workType');
}
});
}
form.on('submit(formSubmit)', function (data) {
// 表单提交事件监听
const field = data.field;
// 校验文件是否选择
const file = $('#fileInput1')[0].files[0];
if (!file) {
layer.msg("请上传文件", {icon: 2, time: 2000});
return false;
}
console.log("表单数据:", JSON.stringify(field));
const formDataWithFile = new FormData();
formDataWithFile.append("teamGroupName", field.teamGroupName);
formDataWithFile.append("subContractor", field.subContractor);
formDataWithFile.append("infoFileUrl", file); // 信息评审表
formDataWithFile.append("teamType", field.teamType);
formDataWithFile.append("name", field.name);
formDataWithFile.append("phone", field.phone);
formDataWithFile.append("idCard", field.idCard);
formDataWithFile.append("workType", field.workType);
formDataWithFile.append("sex", field.sex);
formDataWithFile.append("faceUrl", file); // 人脸照片
formDataWithFile.append("level", 5); // 固定值
formDataWithFile.append("tableSource", "pm_dept");
formDataWithFile.append("isTeamLeader", 0); // 固定值
$.ajax({
url: ctxPath + '/organizational/registerTeamGroup',
type: 'POST',
dataType: "json",
processData: false,
contentType: false,
data: formDataWithFile,
success: function (res) {
if (res.res === 1) {
layer.msg('新增成功', {icon: 6, time: 1500}, function () {
var index = parent.layer.getFrameIndex(window.name); // 获取当前 iframe 层的索引
window.parent.location.reload();
parent.layer.close(index); // 关闭弹窗
});
} else if (res.res === 0) {
layer.msg(res.resMsg, {icon: 5});
}
},
error: function () {
layer.msg("网络异常,请重试", {icon: 5});
}
});
return false; // 阻止默认提交行为
});
});

View File

@ -0,0 +1,392 @@
// 专责审批 js文件
let layer, laydate, table, form, loginUser;
$(function () {
layui.use(["layer", "laydate", "table", "form"], function () {
layer = layui.layer;
laydate = layui.laydate;
form = layui.form;
table = layui.table;
initLayDate(laydate);
loginUser = JSON.parse(localStorage.getItem("loginUser"));
laydate.render({
elem: "#startDate",
type: "month",
format: "yyyy-MM",
});
initTable();
});
});
function search(type) {
if (type === 1) {
} else {
$("#keyWord").val("");
$("#status").val("");
$("#startDate").val("");
$("#endDate").val("");
form.render("select");
}
table.reload("baseTable", {
url: ctxPath + "/teamGroup/registerList",
page: {
curr: 1,
},
where: {
type: "audit",
keyWord: $("#keyWord").val(),
status: $("#status").val(),
startDate: $("#startDate").val(),
endDate: $("#endDate").val(),
},
});
}
function initTable() {
//渲染表格
table.render({
elem: "#baseTable",
url: ctxPath + "/teamGroup/registerList", //数据接口
method: "get", //方式默认是get
toolbar: "default", //开启工具栏,此处显示默认图标,可以自定义模板,详见文档
where: {
type: "audit",
}, //post请求必须加where post请求需要的参数
cellMinWidth: 80,
cols: [
[
//表头
{
field: "number",
width: 80,
title: "序号",
align: "center",
type: "numbers",
},
{field: "teamGroupName", align: "center", title: "注册班组名称"},
{field: "name", align: "center", title: "班组长姓名"},
{
field: 'phone', title: '班长联系电话', width: '15%', align: "center",
templet: function (d) {
if (d.phone) {
let phone = decryptCBC(d.phone);
return maskSensitiveInfo(phone, "phone");
} else {
return "";
}
}
},
{ field: 'idCard', title: '身份证号码', width: '15%', align: "center",
templet: function (d) {
let idCard = decryptCBC(d.idCard);
return maskSensitiveInfo(idCard, "idCard");
}
},
{field: "personNum", align: "center", title: "注册骨干人员数量"},
{
field: "informationReview",
align: "center",
title: "信息评审表",
templet: function (d) {
return '<a onclick="openTeamMemberPage(' + d.id + ')" style="color: #1E9FFF; cursor: pointer;">' + d.teamPersonNum + '</a>';
}
},
{field: "createTime", align: "center", title: "申请时间"},
{field: "creater", align: "center", title: "申请人"},
{field: "auditStatus", align: "center", title: "审核状态"},
{
fixed: "right",
width: 180,
title: "操作",
align: "center",
templet: (d) => {
let text = "";
text +=
'<a lay-event="edit" style="color: #009688;cursor: pointer;font-size: 15px"' +
' id="edit">编辑</a>';
text +=
'<a lay-event="del" style="color: #009688;cursor: pointer;font-size:' +
' 15px;margin-left: 10px"' +
' id="del">删除</a>';
if (d.status == 1 && loginUser.id === d.userId) {
text +=
'<a lay-event="exit" style="color: #009688;cursor: pointer;font-size:' +
' 15px;margin-left: 10px"' +
' id="exit">退场</a>';
}
return text;
},
},
],
],
id: "baseTable",
page: true, //开启分页
loading: true, //数据加载中。。。
limits: [10, 20, 100], //一页选择显示3,5或10条数据
limit: 10, //一页显示5条数据
response: {
statusCode: 200, //规定成功的状态码默认0
},
parseData: function (res) {
//将原始数据解析成 table 组件所规定的数据res为从url中get到的数据
let result;
if (res.data !== "" && res.data != null && res.data !== "null") {
if (this.page.curr) {
result = res.data.slice(
this.limit * (this.page.curr - 1),
this.limit * this.page.curr
);
} else {
result = res.data.slice(0, this.limit);
}
}
return {
code: res.code, //解析接口状态
msg: res.msg, //解析提示文本
count: res.count, //解析数据长度
data: result, //解析数据列表
};
},
toolbar: "#toolbar",
});
table.on("tool(test)", function (obj) {
const data = obj.data; //当前行数据
const rowIndex = obj.index;
const layEvent = obj.event; //当前点击的事件名
switch (layEvent) {
case "edit":
ViewReviews(data, "编辑");
break;
case "del":
DelReviews(data, "删除");
break;
case "exit":
ExitReviews(data, "退场");
break;
default:
console.warn(`未知事件: ${layEvent}`);
}
});
//编辑
function ViewReviews(data, title) {
try {
localStorage.setItem("teamGroupData", data);
const layerIndex = layer.open({
type: 2,
title: title,
shade: 0.3,
area: ["50%", "40%"],
scrollbar: true,
move: true,
anim: 2,
name: "editTeamGroup",
shadeClose: false,
content:
'./editForm.html',
success: function (layero, index) {
let iframeWin = window["layui-layer-iframe" + index];
iframeWin.setParams(JSON.stringify(data), index);
},
});
} catch (error) {
console.error("ViewReviews 错误:", error);
}
}
//删除项目信息
function DelReviews(data, title) {
try {
layer.confirm('是否确认删除?', {
title: title || '提示',
icon: 3,
shade: 0.3,
btn: ['确定', '取消']
}, function (index) {
// 禁用按钮防止重复提交
$(".save").addClass("layui-btn-disabled").attr("disabled", true);
$(".cancel").addClass("layui-btn-disabled").attr("disabled", true);
let item = {
id: data.id
};
$.ajax({
url: `${ctxPath}/teamGroup/delTeamGroup`,
type: "POST",
data: JSON.stringify(item),
dataType: "json",
contentType: "application/json",
success: function (res) {
$(".save").removeClass("layui-btn-disabled").attr("disabled", false);
$(".cancel").removeClass("layui-btn-disabled").attr("disabled", false);
if (res.res === 1) {
layer.msg("删除成功", {icon: 1});
search(1); // 刷新列表
} else {
layer.msg("删除失败:" + (res.resMsg || "未知错误"), {icon: 2});
}
layer.close(index); // 关闭弹窗
},
error: function () {
layer.close(loadingMsg);
$(".save").removeClass("layui-btn-disabled").attr("disabled", false);
$(".cancel").removeClass("layui-btn-disabled").attr("disabled", false);
layer.msg("服务异常,请稍后重试", {
icon: 2,
time: 2000
});
}
});
}, function (index) {
// 取消操作
layer.close(index);
});
} catch (error) {
console.error("DelReviews 错误:", error);
layer.msg("发生异常,请查看控制台", {icon: 2});
}
}
//退场
function ExitReviews(data, title) {
console.log("data", data)
try {
layer.confirm('是否确认退场?', {
title: title || '提示',
icon: 3,
shade: 0.3,
btn: ['确定', '取消']
}, function (index) {
// 禁用按钮防止重复提交
$(".save").addClass("layui-btn-disabled").attr("disabled", true);
$(".cancel").addClass("layui-btn-disabled").attr("disabled", true);
let item = {
id: data.id
};
$.ajax({
url: `${ctxPath}` + '/organizational/userOutData',
type: "POST",
data: JSON.stringify(item),
dataType: "json",
contentType: "application/json",
success: function (res) {
$(".save").removeClass("layui-btn-disabled").attr("disabled", false);
$(".cancel").removeClass("layui-btn-disabled").attr("disabled", false);
if (res.res === 1) {
openEvaluatePage(res.obj)
} else {
layer.msg("删除失败:" + (res.resMsg || "未知错误"), {icon: 2});
}
layer.close(index); // 关闭弹窗
},
error: function () {
layer.close(loadingMsg);
$(".save").removeClass("layui-btn-disabled").attr("disabled", false);
$(".cancel").removeClass("layui-btn-disabled").attr("disabled", false);
layer.msg("服务异常,请稍后重试", {
icon: 2,
time: 2000
});
}
});
}, function (index) {
// 取消操作
layer.close(index);
});
} catch (error) {
console.error("DelReviews 错误:", error);
layer.msg("发生异常,请查看控制台", {icon: 2});
}
}
}
//班组人员列表
function openTeamMemberPage(data) {
try {
const layerIndex = layer.open({
type: 2,
title: '班组人员列表',
shade: 0.3,
area: ["80%", "90%"],
scrollbar: true,
move: true,
anim: 2,
shadeClose: false,
content:
'./teamMemBer.html',
success: function (layero, index) {
let iframeWin = window["layui-layer-iframe" + index];
iframeWin.setParams(JSON.stringify(data), index);
},
});
} catch (error) {
console.error("openTeamMemberPage 错误:", error);
}
}
function addTeamGroup() {
layer.open({
type: 2, // iframe 模式
title: "注册班组",
content: "./registerForm.html", // 要打开的页面
maxmin: false, // 不显示最大化/最小化按钮
area: ["55%", "80%"], // 弹出层大小
success: function (layero, index) {
// 如果需要在弹出层加载完成后执行某些操作,可以在这里写
}
});
}
function openEvaluatePage(obj) {
let title = '评价',
content = '../../evaluate/team/evaluateTable.html';
obj.type = 1;
obj.operType = 'back';
let layerIndex = layer.open({
type: 2,
title: title,
shade: 0,
area: ['80%', '90%'],
scrollbar: true,
move: false,
anim: 2,
yes: function (index, layero) {
},
content: content,
success: function (layero, index) {
let iframeWin = window["layui-layer-iframe" + layerIndex];
iframeWin.setParams(JSON.stringify(obj));
},
end: function () {
console.log("end")
},
cancel: function () {
$.ajax({
url: `${ctxPath}` + '/organizational/userOutDataFail',
type: 'POST',
data: {
id: obj.id
},
dataType: 'json',
success: function (result) {
if (result.res === 1) {
layer.msg(result.obj, {icon: 2});
search(2);
} else {
layer.msg(result.resMsg, {icon: 2});
}
},
error: function (result) {
layer.msg('服务异常,请稍后重试', {icon: 16, scrollbar: false, time: 2000});
}
});
}
});
}

View File

@ -0,0 +1,231 @@
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="../../../layui/css/layui.css"/>
<link rel="stylesheet" href="../../../layui/layui_ext/dtree/dtree.css">
<link rel="stylesheet" href="../../../layui/layui_ext/dtree/font/dtreefont.css">
<title>新增班组</title>
<style type="text/css">
#main-box {
width: 100%;
height: 100%;
display: flex;
flex-direction: column;
justify-content: space-between;
}
div p {
font-weight: bold;
}
.layui-form-label {
width: 120px;
}
.layui-form-item .layui-input-inline {
width: 256px; /* 统一宽度 */
}
.required_icon,
th span {
font-size: 16px;
color: red;
margin: 0 5px;
}
.layui-form {
padding: 20px;
overflow-y: auto;
flex-grow: 1;
}
.btn-box {
width: 100%;
height: 80px;
box-sizing: border-box;
display: flex;
justify-content: flex-end;
align-items: center;
padding-right: 4%;
}
.submit {
display: flex;
justify-content: flex-end; /* 水平向右对齐 */
align-items: center; /* 垂直居中 */
}
::-webkit-scrollbar {
width: 10px;
}
::-webkit-scrollbar-track {
background: rgb(233 233 233);
border-radius: 10px;
}
::-webkit-scrollbar-thumb {
background: rgb(207 207 207);
border-radius: 10px;
}
::-webkit-scrollbar-thumb:hover {
background: rgb(100, 100, 100);
border-radius: 10px;
}
::-webkit-scrollbar-thumb:active {
background: rgb(68, 68, 68);
border-radius: 10px;
}
.layui-input-block {
margin-left: 150px !important;
min-height: 36px;
}
</style>
<body>
<div id="main-box">
<div class="form">
<form class="layui-form" onsubmit="return false;" id="form" lay-filter="formFilter">
<div style="width: 100%;height: 100%">
<div><p>班组信息</p></div>
<!-- 班组名称 -->
<div class="layui-row">
<div class="layui-col-md6" style="float: left;width: 50%;margin-top: 1%">
<div class="layui-form-item">
<label class="layui-form-label"><span class="required_icon">*</span>班组名称</label>
<div class="layui-input-block">
<input type="text" required lay-verify="required" id="teamGroupName"
name="teamGroupName" autocomplete="off" class="layui-input">
</div>
</div>
</div>
<!-- 所属分包商 -->
<div class="layui-col-md6" style="float: left;width: 50%;margin-top: 1%">
<div class="layui-form-item">
<label class="layui-form-label"><span class="required_icon">*</span>所属分包商</label>
<div class="layui-input-block">
<select id="subContractor" name="subContractor" class="layui-select" lay-search lay-filter="subContractor"
lay-verify="required" style="height: 36px;"></select>
</div>
</div>
</div>
</div>
<div class="layui-row">
<div class="layui-col-md6" style="float: left;width: 50%;margin-top: 1%">
<div class="layui-form-item">
<label class="layui-form-label"><span class="required_icon">*</span>信息评审表</label>
<div class="layui-input-block">
<button type="button" class="layui-btn" id="uploadBtn1">
<i class="layui-icon">&#xe67c;</i> 上传文件
</button>
<input type="file" id="fileInput1" name="file" accept=".jpg,.png" style="display: none;">
<div id="fileInfo1"></div>
</div>
</div>
</div>
<div class="layui-col-md6" style="float: left;width: 50%;margin-top: 1%">
<div class="layui-form-item">
<label class="layui-form-label"><span class="required_icon">*</span>班组类型</label>
<div class="layui-input-block">
<select id="teamType" name="teamType" class="layui-select" lay-search
lay-verify="required" style="height: 36px;"></select>
</div>
</div>
</div>
</div>
<div><p>班长信息</p></div>
<div class="layui-row">
<div class="layui-col-md6" style="float: left;width: 50%;margin-top: 1%">
<div class="layui-form-item">
<label class="layui-form-label"><span class="required_icon">*</span>班长姓名</label>
<div class="layui-input-block">
<input type="text" required lay-verify="required" id="name"
name="name" autocomplete="off" class="layui-input">
</div>
</div>
</div>
<div class="layui-col-md6" style="float: left;width: 50%;margin-top: 1%">
<div class="layui-form-item">
<label class="layui-form-label"><span class="required_icon">*</span>联系方式</label>
<div class="layui-input-block">
<input type="text" required lay-verify="required" id="phone"
name="phone" autocomplete="off" class="layui-input">
</div>
</div>
</div>
</div>
<div class="layui-row">
<div class="layui-col-md6" style="float: left;width: 50%;margin-top: 1%">
<div class="layui-form-item">
<label class="layui-form-label"><span class="required_icon">*</span>身份证号</label>
<div class="layui-input-block">
<input type="text" required lay-verify="required" id="idCard"
name="idCard" autocomplete="off" class="layui-input">
</div>
</div>
</div>
<div class="layui-col-md6" style="float: left;width: 50%;margin-top: 1%">
<div class="layui-form-item">
<label class="layui-form-label"><span class="required_icon">*</span>工种</label>
<div class="layui-input-block">
<select id="workType" name="workType" class="layui-select" lay-search
lay-verify="required" style="height: 36px;">
</select>
</div>
</div>
</div>
</div>
<div class="layui-row">
<div class="layui-col-md6" style="float: left;width: 50%;margin-top: 1%">
<div class="layui-form-item">
<label class="layui-form-label"><span class="required_icon">*</span>性别</label>
<div class="layui-input-block">
<select id="sex" name="sex" class="layui-select" lay-search
lay-verify="required" style="height: 36px;">
<option value="1"></option>
<option value="2"></option>
</select>
</div>
</div>
</div>
<div class="layui-col-md6" style="float: left;width: 50%;margin-top: 1%">
<div class="layui-form-item">
<label class="layui-form-label"><span style="color: red"></span>人脸照片</label>
<div class="layui-input-block">
<button type="button" class="layui-btn" id="uploadBtn">
<i class="layui-icon">&#xe67c;</i> 上传文件
</button>
<input type="file" id="fileInput" name="file" accept=".jpg,.png" style="display: none;">
<div id="fileInfo"></div>
</div>
</div>
</div>
</div>
<!-- 提交按钮 -->
<div class="layui-form-item">
<div class="layui-input-block submit">
<button class="layui-btn" lay-submit lay-filter="formSubmit">保存</button>
</div>
</div>
</div>
</form>
</div>
</div>
</body>
<script src="../../../js/publicJs.js"></script>
<script type="text/javascript" src="../../../js/libs/jquery-2.1.1.min.js"></script>
<script type="text/javascript" src="../../../js/jq.js"></script>
<script type="text/javascript" src="../../../js/my/permission.js"></script>
<script src="../../../layui/layui.js"></script>
<script src="../../../layui/layui_ext/dtree/dtree.js"></script>
<script src="../../../js/evaluate/teamGroup/registerForm.js?v=1"></script>
</html>

View File

@ -47,7 +47,7 @@
<select id="status" class="layui-select" name="status">
<option value="">请选择班组状态</option>
<option value="1">入场</option>
<option value="2">出场</option>
<option value="0">闲置</option>
</select>
<button type="button" class="layui-btn layui-bg-blue" style="margin-left: 10px;"
onclick="search(1)">查询

View File

@ -0,0 +1,89 @@
<!Doctype html>
<html lang="">
<head>
<title>外包企业管理</title>
<link rel="stylesheet" href="../../../layui/css/layui.css"/>
<style>
#tree-table-box table thead th {
font-size: 16px;
font-weight: bold;
color: #404040;
}
.layui-table thead tr {
background-color: #f0f0f0;
height: 50px;
}
.layui-table td, .layui-table th, .layui-table-col-set, .layui-table-fixed-r, .layui-table-grid-down, .layui-table-header, .layui-table-mend, .layui-table-page, .layui-table-tips-main, .layui-table-tool, .layui-table-total, .layui-table-view, .layui-table[lay-skin=line], .layui-table[lay-skin=row] {
border-color: #ddd;
}
a:hover, a:focus {
color: #2a6496;
text-decoration: underline;
}
a {
color: #428bca;
text-decoration: none;
}
</style>
</head>
<body>
<div class="row-fluid" style="padding: 10px">
<div class="col-xs-12">
<form id="baseForm" class="layui-form" method="POST" onsubmit="return false;">
<div class="layui-row" style="display: flex;flex-direction: row;padding: 10px;width: 98%">
<input type="text" style="width: 20%;" name="keyWord" id="keyWord"
lay-verify="required"
placeholder="请输入关键字"
autocomplete="off"
class="layui-input">
<select id="status" class="layui-select" name="status">
<option value="">请选择审核状态</option>
<option value="0">草稿</option>
<option value="1">待审核</option>
<option value="2">审核中</option>
<option value="3">已通过</option>
<option value="4">已驳回</option>
</select>
<div class="layui-inline" id="timeRange">
<div class="layui-input-inline">
<input type="text" autocomplete="off" id="startDate" class="layui-input"
placeholder="请选择申请开始日期">
</div>
-
<div class="layui-input-inline">
<input type="text" autocomplete="off" id="endDate" class="layui-input"
placeholder="请选择申请结束日期">
</div>
</div>
<button type="button" class="layui-btn layui-bg-blue" style="margin-left: 10px;"
onclick="search(1)">查询
</button>
<button type="button" class="layui-btn layui-bg-blue" onclick="search(2)">重置</button>
<button type="button" class="layui-btn layui-bg-blue" onclick="addTeamGroup();" style="float:right;">
新增
</button>
</div>
</form>
<div id="tree-table-box" style="padding: 10px">
<table id="baseTable" class="layui-table" lay-filter="test"></table>
</div>
</div>
</div>
<script src="../../../js/publicJs.js"></script>
<script type="text/javascript" src="../../../js/AesCbc.js"></script>
<script type="text/javascript" src="../../../js/common_methon.js"></script>
<script type="text/javascript" src="../../../js/libs/jquery-2.1.1.min.js"></script>
<script type="text/javascript" src="../../../js/jq.js"></script>
<script type="text/javascript" src="../../../js/my/permission.js"></script>
<script type="text/javascript" src="../../../js/select.js"></script>
<script src="../../../layui/layui.js"></script>
<script src="../../../js/evaluate/teamGroup/teamGroupRegister.js?v=1"></script>
</body>
</html>