分包商-清退功能

This commit is contained in:
lSun 2026-02-04 17:41:56 +08:00
parent 80a9e2e166
commit 55ed1e2f08
17 changed files with 751 additions and 50 deletions

View File

@ -204,6 +204,7 @@ public class BasePersonBean {
private String proName;
private String subId;
private String subName;
private String einTime;
@ -243,6 +244,7 @@ public class BasePersonBean {
* 合同id
*/
private String contractId;
private String contractName;
private String attendanceMachineId;

View File

@ -0,0 +1,52 @@
package com.bonus.bmw.person.entity;
import lombok.Data;
/**
* 清退信息
*/
@Data
public class ClearBean {
/**
* id
*/
private String id;
/**
* 批次编号id
*/
private String clearId;
/**
* 分包id
*/
private String subId;
/**
* 分包名称
*/
private String subName;
/**
* 合同id 多个用,隔开
*/
private String contractId;
/**
* 合同名称 多个用,隔开
*/
private String contractName;
/**
* 班组id多个用,隔开
*/
private String teamId;
/**
* 班组名称 多个用,隔开
*/
private String teamName;
/**
* 班组id多个用,隔开
*/
private String workerId;
/**
* 班组名称 多个用,隔开
*/
private String workerName;
}

View File

@ -179,6 +179,7 @@ public class InOutServiceImpl implements InOutService {
}
@Override
@Transactional(rollbackFor = Exception.class)
public R batchPersonOutPlaceList(BasePersonBean bean) {
// 逗号分割的idNumber,exitExamineRemark
List<BasePersonBean> BasePersonBeans = bean.getIdNumberList();

View File

@ -2,6 +2,8 @@ package com.bonus.bmw.subContractor.controller;
import com.alibaba.fastjson2.JSON;
import com.bonus.bmw.person.dao.GetChildListDao;
import com.bonus.bmw.person.entity.BasePersonBean;
import com.bonus.bmw.person.entity.ClearBean;
import com.bonus.bmw.subContractor.entity.SubContractorBean;
import com.bonus.bmw.subContractor.service.SubContractorService;
import com.bonus.common.core.domain.R;
@ -9,6 +11,7 @@ import com.bonus.common.core.table.PageTableHandler;
import com.bonus.common.core.table.PageTableRequest;
import com.bonus.common.core.table.PageTableResponse;
import com.bonus.common.core.utils.StringUtils;
import com.bonus.common.core.web.domain.AjaxResult;
import com.bonus.common.log.annotation.Log;
import com.bonus.common.log.enums.BusinessType;
import com.bonus.common.security.annotation.RequiresPermissions;
@ -95,6 +98,37 @@ public class SubContractorController {
}
@PostMapping("getClearOutList")
@Log(title = "分包商清退-根据id查询班组人员", businessType = BusinessType.SELECT)
public AjaxResult getClearOutList(String id) {
try {
List<SubContractorBean> list = service.getClearOutList(id);
return AjaxResult.success(list);
} catch (Exception e) {
log.error("查询清退人员失败id={}", id, e);
return AjaxResult.error("查询失败");
}
}
@PostMapping("/clearOutPlaceList")
@Log(title = "分包商清退-批量出场申请", businessType = BusinessType.UPDATE)
@ResponseBody
public R batchPersonOutPlaceList(@RequestBody BasePersonBean bean) {
return service.clearOutPlaceList(bean);
}
@PostMapping("getClearOutRecord")
@Log(title = "分包商清退-批量出场申请列表", businessType = BusinessType.SELECT)
public ClearBean getClearOutRecord(String id) {
ClearBean bean = null;
try {
bean = service.getClearOutRecord(id);
} catch (Exception e) {
e.printStackTrace();
}
return bean;
}
@DeleteMapping("/{id}")
@Log(title = "分包商-删除", businessType = BusinessType.DELETE)
@RequiresPermissions("sys:subContractor:del")

View File

@ -1,6 +1,8 @@
package com.bonus.bmw.subContractor.dao;
import com.bonus.bmw.person.entity.BasePersonBean;
import com.bonus.bmw.person.entity.ClearBean;
import com.bonus.bmw.subContractor.entity.SubContractorBean;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
@ -43,4 +45,20 @@ public interface SubContractorDao {
List<SubContractorBean> getWorker(@Param("params")Map<String, Object> params, @Param("offset")Integer offset,
@Param("limit") Integer limit);
List<SubContractorBean> getClearOutList(String id);
int updateContract(BasePersonBean bean);
int updateTeam(BasePersonBean bean);
int addClearOut(ClearBean clearOutBean);
BasePersonBean getSubById(String subId);
BasePersonBean getTeamById(String subId);
BasePersonBean getWorkerById(String subId);
ClearBean getClearOutRecord(String id);
}

View File

@ -1,9 +1,10 @@
package com.bonus.bmw.subContractor.entity;
import com.bonus.bmw.person.entity.BasePersonBean;
import lombok.Data;
@Data
public class SubContractorBean {
public class SubContractorBean extends BasePersonBean {
//
private String id;//编号
private String orgId;
@ -48,4 +49,9 @@ public class SubContractorBean {
*/
private String isDel;
private String teamNum; // 分包关联的班组数量
private String workerNum; // 分包关联的班组数量下的施工人员数量
private String idNumber; // 分包关联的班组数量下的施工人员数量
private String isClear; // 是否清退
}

View File

@ -1,6 +1,8 @@
package com.bonus.bmw.subContractor.service;
import com.bonus.bmw.person.entity.BasePersonBean;
import com.bonus.bmw.person.entity.ClearBean;
import com.bonus.bmw.subContractor.entity.SubContractorBean;
import com.bonus.common.core.domain.R;
@ -29,4 +31,10 @@ public interface SubContractorService {
List<SubContractorBean> getSubBearingCapacityList(Map<String, Object> params, Integer offset, Integer limit);
void exportSubBearingCapacity(SubContractorBean entity, HttpServletResponse response);
List<SubContractorBean> getClearOutList(String id);
R clearOutPlaceList(BasePersonBean bean);
ClearBean getClearOutRecord(String id);
}

View File

@ -2,11 +2,16 @@ package com.bonus.bmw.subContractor.service;
import cn.hutool.core.io.IoUtil;
import cn.hutool.poi.excel.ExcelWriter;
import com.bonus.bmw.person.entity.BasePersonBean;
import com.bonus.bmw.person.entity.ClearBean;
import com.bonus.bmw.person.service.InOutService;
import com.bonus.bmw.subContractor.dao.SubContractorDao;
import com.bonus.bmw.subContractor.entity.SubContractorBean;
import com.bonus.common.core.constant.Constants;
import com.bonus.common.core.domain.R;
import com.bonus.common.core.utils.uuid.IdUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import javax.servlet.ServletOutputStream;
@ -23,6 +28,9 @@ public class SubContractorServiceImp implements SubContractorService {
@Resource(name = "SubContractorDao")
private SubContractorDao dao;
@Resource
private InOutService inOutService;
/*
* 查询分包商页面
*
@ -199,5 +207,49 @@ public class SubContractorServiceImp implements SubContractorService {
}
@Override
public List<SubContractorBean> getClearOutList(String id) {
return dao.getClearOutList( id);
}
@Override
@Transactional(rollbackFor = Exception.class)
public R clearOutPlaceList(BasePersonBean bean) {
List<BasePersonBean> BasePersonBeans = bean.getIdNumberList();
bean.setSubId(BasePersonBeans.get(0).getSubId());
BasePersonBean workerBean = dao.getWorkerById(bean.getSubId());
//先调批量出场的方法
inOutService.batchPersonOutPlaceList(bean);
//2. 根据分包商id更新合同表和班组表
BasePersonBean contractBean = dao.getSubById(bean.getSubId());
int contractRows = dao.updateContract(bean);
BasePersonBean teamBean = dao.getTeamById(bean.getSubId());
int teamRows = dao.updateTeam(bean);
//将清退信息插入清退表
ClearBean clearOutBean = new ClearBean();
clearOutBean.setClearId(IdUtils.randomUUID().toString());
clearOutBean.setSubId(bean.getSubId());
clearOutBean.setContractId(contractBean.getContractId());
clearOutBean.setContractName(contractBean.getContractName());
clearOutBean.setTeamId(teamBean.getTeamId());
clearOutBean.setTeamName(teamBean.getTeamName());
clearOutBean.setWorkerId(workerBean.getIdNumber());
clearOutBean.setWorkerName(workerBean.getName());
int clearRows = dao.addClearOut(clearOutBean);
if (contractRows <= 0 || teamRows <= 0 || clearRows <= 0) {
throw new RuntimeException("清退失败,触发事务回滚");
}
return R.ok("清退操作成功");
}
@Override
public ClearBean getClearOutRecord(String id) {
return dao.getClearOutRecord(id);
}
}

View File

@ -18,16 +18,20 @@
bs.seal_path as sealPath,
bs.sign_path as signPath,
count(DISTINCT bsc.sub_id) as subContractNum,
COUNT(DISTINCT bst.id) AS teamNum,
COUNT(DISTINCT btur.id) AS personnelNum,
CASE
WHEN COUNT(bsc.id) > 0 OR COUNT(bst.id) > 0 THEN 1
ELSE 0
END AS isDel
END AS isDel,
bs.is_clear as isClear
from
bm_subcontractor bs
LEFT JOIN pm_organization po ON po.id = bs.org_id and po.IS_ACTIVE = '1'
LEFT JOIN bm_sub_contract bsc on bsc.sub_id = bs.id and bsc.is_active = '1'
left join t_dict td on bs.major_id = td.id and td.is_active = '1' and td.type = 'sub_level'
left join bm_sub_team bst on bs.id = bst.sub_id and bst.is_active = '1'
LEFT JOIN bm_team_user_relation btur on btur.team_id = bst.id and btur.is_active = '1'
where
bs.IS_ACTIVE = 1
<if test="params != null and params != ''">
@ -86,39 +90,36 @@
<insert id="addSub" parameterType="com.bonus.bmw.subContractor.entity.SubContractorBean" useGeneratedKeys="true"
keyProperty="id">
INSERT INTO bm_subcontractor
( SUB_NAME, sub_abbreviation, major_id, org_id, legal_name, legal_phone,office_space,
front_idcard_path, back_idcard_path,sub_address,
seal_path, sign_path, IS_ACTIVE )
VALUES(#{subName},#{subAbbreviation},#{majorId},#{orgId},#{legalName},
#{legalPhone}, #{officeSpace}, #{frontIdcardPath},#{backIdcardPath},#{subAddress},
#{sealPath},#{signPath},'1')
(SUB_NAME, sub_abbreviation, major_id, org_id, legal_name, legal_phone, office_space,
front_idcard_path, back_idcard_path, sub_address,
seal_path, sign_path, IS_ACTIVE)
VALUES (#{subName}, #{subAbbreviation}, #{majorId}, #{orgId}, #{legalName},
#{legalPhone}, #{officeSpace}, #{frontIdcardPath}, #{backIdcardPath}, #{subAddress},
#{sealPath}, #{signPath}, '1')
</insert>
<!--根据id查找-->
<select id="getSubContractorById" resultType="com.bonus.bmw.subContractor.entity.SubContractorBean">
select
IFNULL(pc.`NAME`,pd.`name`) as companyName,
bs.ID as id,
bs.org_id as orgId,
major_id as majorId,
bs.SUB_NAME as subName,
bs.sub_address as subAddress,
bs.sub_abbreviation as subAbbreviation,
bs.legal_name as legalName,
bs.legal_phone as legalPhone,
bs.office_space as officeSpace,
bs.front_idcard_path as frontIdcardPath,
bs.back_idcard_path as backIdcardPath,
bs.seal_path as sealPath,
bs.sign_path as signPath
from
bm_subcontractor bs
LEFT JOIN pm_organization po1 ON po1.id = bs.org_id and po1.PARENT_ID = '0' and po1.IS_ACTIVE = '1'
LEFT JOIN pm_organization po2 ON po2.id = bs.org_id and po2.PARENT_ID = '1' and po2.IS_ACTIVE = '1'
LEFT JOIN pm_company pc ON pc.ID = po1.foreign_id and pc.IS_ACTIVE = '1'
LEFT JOIN pm_dept pd ON pd.ID = po2.foreign_id and pd.IS_ACTIVE = '1'
where
bs.IS_ACTIVE = '1'
and bs.id = #{id}
select IFNULL(pc.`NAME`, pd.`name`) as companyName,
bs.ID as id,
bs.org_id as orgId,
major_id as majorId,
bs.SUB_NAME as subName,
bs.sub_address as subAddress,
bs.sub_abbreviation as subAbbreviation,
bs.legal_name as legalName,
bs.legal_phone as legalPhone,
bs.office_space as officeSpace,
bs.front_idcard_path as frontIdcardPath,
bs.back_idcard_path as backIdcardPath,
bs.seal_path as sealPath,
bs.sign_path as signPath
from bm_subcontractor bs
LEFT JOIN pm_organization po1 ON po1.id = bs.org_id and po1.PARENT_ID = '0' and po1.IS_ACTIVE = '1'
LEFT JOIN pm_organization po2 ON po2.id = bs.org_id and po2.PARENT_ID = '1' and po2.IS_ACTIVE = '1'
LEFT JOIN pm_company pc ON pc.ID = po1.foreign_id and pc.IS_ACTIVE = '1'
LEFT JOIN pm_dept pd ON pd.ID = po2.foreign_id and pd.IS_ACTIVE = '1'
where bs.IS_ACTIVE = '1'
and bs.id = #{id}
</select>
<!--修改-->
<update id="updateSub" parameterType="com.bonus.bmw.subContractor.entity.SubContractorBean">
@ -170,9 +171,10 @@
</select>
<select id="getSubByName" resultType="com.bonus.bmw.subContractor.entity.SubContractorBean">
SELECT bs.ID as id,bs.SUB_NAME AS subName
SELECT bs.ID as id, bs.SUB_NAME AS subName
FROM bm_subcontractor bs
WHERE bs.SUB_NAME= #{subName} and bs.IS_ACTIVE = 1
WHERE bs.SUB_NAME = #{subName}
and bs.IS_ACTIVE = 1
</select>
<select id="getContractCount" resultType="java.lang.Integer">
@ -330,5 +332,118 @@
limit #{offset}, #{limit}
</select>
<select id="getClearOutList" resultType="com.bonus.bmw.subContractor.entity.SubContractorBean">
SELECT
t.*,
stats.teamNum AS teamNum,
stats.workerNum AS workerNum
FROM (
SELECT DISTINCT
bweh.id_number AS idNumber,
bweh.exit_video_path AS exitVideoPath,
bweh.exit_sign_path AS exitSignPath,
bweh.exit_prove_path AS exitProvePath,
bweh.salary_application_Path AS salaryApplicationPath,
bw.name,
td.value AS postName,
bst.id AS teamId,
bst.team_name AS teamName,
po.name AS companyName,
bp.name AS proName,
bs.sub_name AS subName,
bweh.ein_time AS einTime,
bweh.exit_time AS exitTime,
bweh.exit_status AS exitStatus,
bweh.is_force AS isForce,
bweh.is_furlough_person,
bweh.project_id as proId,
bweh.sub_id as subId
FROM bm_worker_ein_history bweh
LEFT JOIN bm_worker bw
ON bweh.id_number = bw.id_number AND bw.IS_ACTIVE = '1'
LEFT JOIN t_dict td
ON bweh.post_id = td.id AND td.type = 'postType' AND td.is_active = '1'
LEFT JOIN bm_project bp
ON bweh.project_id = bp.id AND bp.is_active = '1'
LEFT JOIN pm_organization po
ON po.id = bp.two_com_id AND po.is_active = '1'
LEFT JOIN bm_subcontractor bs
ON bweh.sub_id = bs.id AND bs.is_active = '1'
LEFT JOIN bm_sub_team bst
ON bst.id = bweh.team_id AND bst.is_active = '1'
WHERE bs.id = #{id}
AND bweh.exit_status = '-1'
AND bweh.is_active = '1'
) t
CROSS JOIN (
SELECT
COUNT(DISTINCT bweh.team_id) AS teamNum,
COUNT(DISTINCT bweh.id_number) AS workerNum
FROM bm_worker_ein_history bweh
WHERE bweh.sub_id = #{id}
AND bweh.exit_status = '-1'
AND bweh.is_active = '1'
) stats
ORDER BY t.einTime DESC
</select>
<update id="updateContract">
update bm_sub_contract set is_active = '0' where sub_id = #{subId}
</update>
<update id="updateTeam">
update bm_sub_team set sub_id = null where sub_id = #{subId} and is_active = '1'
</update>
<insert id="addClearOut">
INSERT INTO bm_sub_clear(`clear_id`, `sub_id`, `sub_name`, `contract_id`, `contract_name`, `team_id`, `team_name`, `worker_id`, `worker_name`)
VALUES (#{clearId},#{subId}, #{subName}, #{contractId}, #{contractName}, #{teamId}, #{teamName}, #{workerId}, #{workerName})
</insert>
<select id="getSubById" resultType="com.bonus.bmw.person.entity.BasePersonBean">
SELECT
GROUP_CONCAT(id ORDER by id SEPARATOR ',') AS contractId,
GROUP_CONCAT(contract_name ORDER by id SEPARATOR ',') AS contractName
FROM `bm_sub_contract`
WHERE is_active ='1' and sub_id = #{subId}
</select>
<select id="getTeamById" resultType="com.bonus.bmw.person.entity.BasePersonBean">
SELECT
GROUP_CONCAT(id ORDER by id SEPARATOR ',') AS teamId,
GROUP_CONCAT(team_name ORDER by id SEPARATOR ',') AS teamName
FROM `bm_sub_team`
WHERE is_active ='1' and sub_id = #{subId}
</select>
<select id="getWorkerById" resultType="com.bonus.bmw.person.entity.BasePersonBean">
SELECT
GROUP_CONCAT( bw.id_number ORDER BY bw.id_number SEPARATOR ',' ) AS idNumber,
GROUP_CONCAT( bw.NAME ORDER BY bw.NAME SEPARATOR ',' ) AS name
FROM
bm_worker_ein_history bweh
LEFT JOIN bm_worker bw ON bweh.id_number = bw.id_number
AND bw.IS_ACTIVE = '1'
WHERE
bweh.sub_id = #{subId}
AND bweh.exit_status = '-1'
AND bweh.is_active = '1'
</select>
<select id="getClearOutRecord" resultType="com.bonus.bmw.person.entity.ClearBean">
SELECT
id,
clear_id AS clearId,
sub_id AS subId,
sub_name AS subName,
contract_id AS contractId,
contract_name AS contractName,
team_id AS teamId,
team_name AS teamName,
worker_id AS workerId,
worker_name AS workerName
FROM
bm_sub_clear
WHERE sub_id = #{id}
</select>
</mapper>

View File

@ -0,0 +1,233 @@
let own = localStorage.getItem('own');
let dataArr;
let table, form, upload;
let layTableIndexVideos = [];
function setInOutData(data) {
console.log("data=", data);
dataArr = data.map(function (item) {
var parts = item.split(',');
return {
user: parts[0] ,
idNumber: parts[1],
postName: parts[2],
proName: parts[3],
subName: parts[4],
teamName: parts[5],
exitVideoPath: parts[6] == "null" ? "" : parts[6],
exitSignPath: parts[7] == "null" ? "" : parts[7],
exitProvePath: parts[8] == "null" ? "" : parts[8],
salaryApplicationPath: parts[9] == "null" ? "" : parts[9],
subId : parts[10] == "null" ? "" : parts[10],
proId : parts[11] == "null" ? "" : parts[11],
teamId : parts[12] == "null" ? "" : parts[12],
};
});
console.log("sss=", dataArr);
layui.use(['table', 'form', 'upload'], function () {
table = layui.table;
upload = layui.upload;
form = layui.form;
form.render();
table.render({
elem: '#lay-table',
title: '施工人员基本信息',
cols: [[
{ type: 'numbers', title: '序号', align: 'center', width: '6%' },
{ field: 'user', title: '姓名', align: 'center', width: '8%' },
{ field: 'idNumber', title: '身份证', align: 'center', width: '15%' },
{ field: 'postName', title: '工种', align: 'center', width: '11%' },
{ field: 'proName', title: '所属工程', align: 'center', width: '10%' },
{
title: '所属分包商', align: 'center', width: '10%',
templet: d => d.subName && d.subName !== "null" ? d.subName : ""
},
{
title: '所属班组', align: 'center', width: '10%',
templet: d => d.teamName && d.teamName !== "null" ? d.teamName : ""
},
{
field: 'exitSignPath', title: '出场签名', align: 'center', width: '10%',
templet: d => {
let a = d.exitSignPath;
let idx = d.LAY_TABLE_INDEX;
if (a) {
return `<a href="${fileUrl + '/' + a}" target="_blank" style="color:#1E9FFF;">已上传</a>`;
}
return `<div id="exitSignPaths${idx}"></div>
<a class="layui-btn layui-btn-xs" id="exitSignPath${idx}" style="margin-left:20px">上传</a>`;
}
},
{
field: 'exitProvePath', title: '出场证明', align: 'center', width: '10%',
templet: d => {
let a = d.exitProvePath;
let idx = d.LAY_TABLE_INDEX;
if (a) {
return `<a href="${fileUrl + '/' + a}" target="_blank" style="color:#1E9FFF;">已上传</a>`;
}
return `<div id="exitProvePaths${idx}"></div>
<a class="layui-btn layui-btn-xs" id="exitProvePath${idx}" style="margin-left:20px">上传</a>`;
}
},
{
field: 'salaryApplicationPath', title: '工资结算申请书', align: 'center', width: '10%',
templet: d => {
let a = d.salaryApplicationPath;
let idx = d.LAY_TABLE_INDEX;
if (a) {
return `<a href="${fileUrl + '/' + a}" target="_blank" style="color:#1E9FFF;">已上传</a>`;
}
return `<div id="salaryApplicationPaths${idx}"></div>
<a class="layui-btn layui-btn-xs" id="salaryApplicationPath${idx}" style="margin-left:20px">上传</a>`;
}
},
]],
data: dataArr,
page: true,
limit: 5,
limits: [5, 10, 20],
response: { statusCode: 200 },
done: function () {
initUploads(); // 表格渲染完成后初始化上传
}
});
form.on('submit(formDemo)', function () {
batchOutApply();
});
$('#searchBt').on('click', doSearch);
});
}
// 初始化上传控件(支持表格刷新后重新绑定)
function initUploads() {
let tableData = table.cache['lay-table'] || [];
tableData.forEach(function (d) {
let idx = d.LAY_TABLE_INDEX;
// 出场签名上传
upload.render({
elem: '#exitSignPath' + idx,
url: fileUrl + '/file/upload',
exts: 'jpg|png|jpeg|pdf',
auto: true,
size: 1024 * 30,
field: 'file',
done: function (res) {
$("#exitSignPaths" + idx).html(
`<a href="${fileUrl + '/' + res.data.url}" target="_blank" style="color:#1E9FFF;">已上传</a>`
);
$("#exitSignPath" + idx).hide();
d.exitSignPath = res.data.url;
}
});
// 出场证明上传
upload.render({
elem: '#exitProvePath' + idx,
url: fileUrl + '/file/upload',
exts: 'jpg|png|jpeg|pdf',
auto: true,
size: 1024 * 30,
field: 'file',
done: function (res) {
$("#exitProvePaths" + idx).html(
`<a href="${fileUrl + '/' + res.data.url}" target="_blank" style="color:#1E9FFF;">已上传</a>`
);
$("#exitProvePath" + idx).hide();
d.exitProvePath = res.data.url;
}
});
// 工资结算申请书上传
upload.render({
elem: '#salaryApplicationPath' + idx,
url: fileUrl + '/file/upload',
exts: 'jpg|png|jpeg|pdf',
auto: true,
size: 1024 * 30,
field: 'file',
done: function (res) {
$("#salaryApplicationPaths" + idx).html(
`<a href="${fileUrl + '/' + res.data.url}" target="_blank" style="color:#1E9FFF;">已上传</a>`
);
$("#salaryApplicationPath" + idx).hide();
d.salaryApplicationPath = res.data.url;
}
});
});
}
// 搜索功能(重载表格并重新绑定上传)
function doSearch() {
var keyword = $('#keyWord').val().trim();
var filteredData = dataArr.filter(item => item.user.indexOf(keyword) !== -1);
layui.table.reload('lay-table', {
data: filteredData,
page: { curr: 1 },
done: function () {
initUploads(); // 搜索后重新绑定上传
}
});
}
// 删除行
function deleteRow(idNumber) {
layer.confirm('是否删除?', function (index) {
var i = dataArr.findIndex(item => item.idNumber == idNumber);
if (i !== -1) {
dataArr.splice(i, 1);
layer.closeAll();
table.reload('lay-table', {
data: dataArr,
done: function () {
initUploads();
}
});
}
});
}
// 批量出场
function batchOutApply() {
if (dataArr.length === 0) {
layer.msg('未选择人员', { icon: 5, time: 2000 });
return;
}
$.ajax({
type: 'post',
url: ctxPath + '/subContractor/clearOutPlaceList',
contentType: "application/json; charset=utf-8",
data: JSON.stringify({ idNumberList: dataArr }),
dataType: 'json',
success: function (data) {
if (data.code == 200) {
layer.msg('出场申请成功', { icon: 1, time: 3000 });
reloading();
} else {
layer.msg(data.msg, { icon: 2, time: 3000 });
}
}
});
}
/**
* 关闭当前iframe层并刷新父页面
* 该函数主要用于在iframe操作完成后关闭当前弹窗并刷新父页面以显示最新数据
*/
function reloading() {
// 获取当前iframe的索引值
var index = parent.layer.getFrameIndex(window.name);
// 关闭当前iframe层
parent.layer.close(index);
// 刷新父页面
window.parent.location.reload();
}

View File

@ -151,12 +151,21 @@ function init() {
"render": function (data, type, row) {
var id = row['id'];
var subContractNum = row['subContractNum'];
var teamNum = row['teamNum'];
var isDel = row['isDel'];
var isClear = row['isClear'];
var html = '';
html += buttonEdits(id, "sys:subContractor:update", pers);
if(teamNum>0 && subContractNum>0){
html += buttonClearOut(id, "", pers);
}
if(isDel == 0 || isDel == '0'){
html += buttonDel(id,subContractNum, "sys:subContractor:del", pers);
}
if(isClear == 1 || isClear == '1'){
html += buttonClearOutList(id, "", pers);
}
return html;
}
},
@ -191,19 +200,19 @@ function insertSubcontractor() {
}
// 编辑按钮
// 修改按钮
function buttonEdits(id, permission, pers) {
if (permission != "") {
if ($.inArray(permission, pers) < 0) {
return "";
}
}
var btn = $("<button class='layui-btn layui-btn-xs' title='编辑' onclick='edit(\"" + id + "\")'><i class='layui-icon'>&#xe642;</i></button>");
var btn = $("<button class='layui-btn layui-btn-xs' title='修改' onclick='edit(\"" + id + "\")'>修改</button>");
return btn.prop("outerHTML");
}
/**
* 编辑页面
* 修改页面
*/
function edit(id) {
$.ajax({
@ -240,6 +249,131 @@ function edit(id) {
})
}
function buttonClearOut(id, permission, pers) {
if (permission != "") {
if ($.inArray(permission, pers) < 0) {
return "";
}
}
var btn = $("<button class='layui-btn layui-btn-xs' title='清退' onclick='clearOut(\"" + id + "\")'>清退</button>");
return btn.prop("outerHTML");
}
// 清退按钮
function clearOut(id) {
$.ajax({
type: 'POST',
contentType: "application/x-www-form-urlencoded",
url: ctxPath + '/subContractor/getClearOutList',
data: {"id": id},
dataType: 'json',
success: function (data) {
if(data.code == 200){
if(data.data.length < 1){
layer.msg("没有可清退的成员");
return;
}
var teamNum = data.data[0].teamNum || 0;
var workerNum = data.data[0].workerNum || 0;
var checkedArr = [];
for(var i = 0; i < data.data.length; i++){
var row = data.data[i];
// 处理每个字段,如果是 null 或 "null",则替换为空字符串
var name = row.name && row.name !== "null" ? row.name : "";
var idNumber = row.idNumber && row.idNumber !== "null" ? row.idNumber : "";
var postName = row.postName && row.postName !== "null" ? row.postName : "";
var proName = row.proName && row.proName !== "null" ? row.proName : "";
var subName = row.subName && row.subName !== "null" ? row.subName : "";
var teamName = row.teamName && row.teamName !== "null" ? row.teamName : "";
var exitVideoPath = row.exitVideoPath && row.exitVideoPath !== "null" ? row.exitVideoPath : "";
var exitSignPath = row.exitSignPath && row.exitSignPath !== "null" ? row.exitSignPath : "";
var exitProvePath = row.exitProvePath && row.exitProvePath !== "null" ? row.exitProvePath : "";
var salaryApplicationPath = row.salaryApplicationPath && row.salaryApplicationPath !== "null" ? row.salaryApplicationPath : "";
var subId = row.subId && row.subId !== "null" ? row.subId : "";
var proId = row.proId && row.proId !== "null" ? row.proId : "";
var teamId = row.teamId && row.teamId !== "null" ? row.teamId : "";
// 拼接 value 字符串
var valueStr = name + ',' + idNumber + ',' + postName + ',' + proName + ',' + subName + ',' + teamName + ',' + exitVideoPath + ',' + exitSignPath + ',' + exitProvePath + ',' + salaryApplicationPath + ',' + subId + ',' + proId + ',' + teamId;
checkedArr.push(valueStr);
}
let index = layer.confirm("确定清退当前分包商下" + teamNum+"个班组,"+ workerNum+"个在场人员吗?",
{
title: '清退'
}, function () {
layer.close(index);
let width = "80%";
let height = "80%";
var layerIndex = layer.open({
id: 'layer_in_out_evaluate',
title: ['人员出场', 'color:#3B70A1;background-color:#E8ECEB;font-size:20px'],
type: 2,
content: 'ClearOutApplyView.html',
area: [width, height],
maxmin: false,
btn: ['确认', '取消'],
success: function (layero, index) {
let iframeWin = window["layui-layer-iframe" + layerIndex];
iframeWin.setInOutData(checkedArr);
},
yes: function (index, layero) {
// 获取弹出层中的form表单元素
var formSubmit = layer.getChildFrame('form', index);
var submited = formSubmit.find('button')[1];
// console.log(submited)
// 触发点击事件,会对表单进行验证,验证成功则提交表单,失败则返回错误信息
// batchOutApply(dataArr);
submited.click();
},
});
});
}else{
layer.alert(data.msg, {icon: 2});
}
}
})
}
function buttonClearOutList(id, permission, pers) {
if (permission != "") {
if ($.inArray(permission, pers) < 0) {
return "";
}
}
var btn = $("<button class='layui-btn layui-btn-xs' title='清退记录' onclick='clearOutRecord(\"" + id + "\")'>清退记录</button>");
return btn.prop("outerHTML");
}
function clearOutRecord(id){
$.ajax({
type: 'POST',
contentType: "application/x-www-form-urlencoded",
url: ctxPath + '/subContractor/getClearOutRecord',
data: {"id": id},
dataType: 'json',
success: function (data) {
let html = `
<div style="padding: 15px; line-height: 26px;">
<p><b>合同</b>${data.contractName || ''}</p>
<p><b>班组</b>${data.teamName || ''}</p>
<p><b>人员</b>${data.workerName || ''}</p>
</div>
`;
layer.open({
title: '清退记录详情',
type: 1,
area: ['420px', '300px'],
content: html
});
}
})
}
// 删除按钮
function buttonDel(id,subContractNum, permission, pers) {
if (permission != "") {
@ -247,7 +381,7 @@ function buttonDel(id,subContractNum, permission, pers) {
return "";
}
}
var btn = $("<button class='layui-btn layui-btn-xs' title='删除' onclick='del(\"" + id + "\",\"" + subContractNum + "\")'><i class='layui-icon'>&#xe640;</i></button>");
var btn = $("<button class='layui-btn layui-btn-xs' title='删除' onclick='del(\"" + id + "\",\"" + subContractNum + "\")'>删除</button>");
return btn.prop("outerHTML");
}

View File

@ -114,14 +114,14 @@ function init() {
return html;
}, "width": "5%"
},
{
/*{
"render": function (data, type, row) {
var id = row['id'];
var personNumber = row['personNumber'];
var html = "<span style='color: green;cursor: pointer;' title='' onclick='personView(\"" + id + "\")'> " + personNumber + " </span>";
return html;
}, "width": "5%"
},
},*/
{
"render": function (data, type, row) {
var id = row['id'];
@ -268,7 +268,7 @@ function buttonEditData(id, permission, pers) {
return "";
}
}
var btn = $("<button class='layui-btn layui-btn-xs' title='修改' onclick='editView(\"" + id + "\")'><i class='layui-icon'>&#xe642;</i></button>");
var btn = $("<button class='layui-btn layui-btn-xs' title='修改' onclick='editView(\"" + id + "\")'>修改</button>");
return btn.prop("outerHTML");
}
@ -357,7 +357,7 @@ function buttonDelData(id, permission, pers) {
return "";
}
}
var btn = $("<button class='layui-btn layui-btn-xs' title='删除' onclick='delView(\"" + id + "\")'><i class='layui-icon'>&#xe640;</i></button>");
var btn = $("<button class='layui-btn layui-btn-xs' title='删除' onclick='delView(\"" + id + "\")'>删除</button>");
return btn.prop("outerHTML");
}

View File

@ -3,7 +3,7 @@ layui.use(['form'], function () {
form.render();
form.on('select(subId)', function (data) {
$("#teamName").val("");
// $("#teamName").val("");
});
// 验证成功后才会执行下面的操作

View File

@ -8,11 +8,11 @@ layui.use(['form'], function () {
);
form.on('select(subId)', function (data) {
var subId = $('#subId').val();
/* var subId = $('#subId').val();
var subName = $('option[value= \"' + subId + '\"]').text();
var foremanName = $('#foreman').val();
var teamName = subName + '-' + foremanName + '班组'
$("#teamName").val(teamName);
$("#teamName").val(teamName);*/
});
// 验证成功后才会执行下面的操作

View File

@ -0,0 +1,46 @@
<!DOCTYPE html>
<html lang="en" style="width: 100%;height: 100%">
<head>
<meta charset="UTF-8">
<link rel="stylesheet" type="text/css" media="screen" href="../../../../css/bootstrap.min.css">
<link rel="stylesheet" type="text/css" media="screen" href="../../../../css/dataTables.bootstrap.min.css">
<link rel="stylesheet" type="text/css" media="screen" href="../../../../layui/css/layui.css">
<link rel="stylesheet" href="../../../../css/ztree/3.5/zTreeStyle.css" type="text/css">
<link rel="stylesheet" type="text/css" media="screen" href="../../../../css/work/data_table_setting.css">
<style type="text/css">
</style>
</head>
<body style="width: 100%;height: 100%">
<form class="layui-form" id="projectForm" action="" method="post" onsubmit=" return false">
<div style="width: 100%;height: 100%">
<div class="col-xs-12 col-sm-12 col-md-12 col-lg-12" style="width: 100%;height: 100%">
<div class="widget-body">
<table id="lay-table" lay-filter="table-temp" class="layui-table" lay-size="lg">
</table>
</div>
<div class="layui-form-item" style="display: none">
<div class="layui-input-block">
<button type="button" class="layui-btn" id="commit" lay-submit lay-filter="formDemo">提交</button>
</div>
</div>
</div>
</div>
</form>
</body>
</html>
<script type="text/javascript" src="../../../../js/libs/jquery-3.6.0.js"></script>
<script type="text/javascript" src="../../../../js/jq.js"></script>
<script type="text/javascript" src="../../../../js/plugin/datatables/jquery.dataTables.min.js"></script>
<script type="text/javascript" src="../../../../js/plugin/datatables/dataTables.bootstrap.min.js"></script>
<script type="text/javascript" src="../../../../js/my/permission.js"></script>
<script type="text/javascript" src="../../../../layui2.7.6/layui.js"></script>
<script type="text/javascript" src="../../../../js/publicJs.js"></script>
<script type="text/javascript" src="../../../../js/dict.js"></script>
<script type="text/javascript" src="../../../../js/select.js"></script>
<script type="text/javascript" src="../../../../js/work/SubContractor/BasicMsg/ClearOutApplyView.js"></script>

View File

@ -55,7 +55,7 @@
<th>合同金额(元)</th>
<th>现场负责人</th>
<th>备案班组</th>
<th>备案人员</th>
<!-- <th>备案人员</th>-->
<th>附件</th>
<th>操作</th>
</tr>

View File

@ -27,7 +27,7 @@
</div>
</div>
<div class="layui-input-inline" style="float: left;width: 50%;margin-top: 2%;margin-left: 20%">
<!-- <div class="layui-input-inline" style="float: left;width: 50%;margin-top: 2%;margin-left: 20%">
<label class="layui-form-label"><i class="tip-required" style="color: red;font-size: 20px">*</i>班组长</label>
<div class="layui-input-block">
<input type="text" name="foreman" id="foreman" readonly placeholder="点击选择班组长" lay-verify="required" class="layui-input">
@ -39,7 +39,7 @@
<div class="layui-input-block">
<input type="text" name="foremanIdNumber" id="foremanIdNumber" readonly class="layui-input">
</div>
</div>
</div>-->
<div class="layui-input-inline" style="float: left;width: 50%;margin-top: 2%;margin-left: 20%">
<label class="layui-form-label"><i class="tip-required" style="color: red;font-size: 20px">*</i>班组名称</label>
@ -48,12 +48,12 @@
</div>
</div>
<div class="layui-input-inline" style="float: left;width: 50%;margin-top: 2%;margin-left: 20%">
<!-- <div class="layui-input-inline" style="float: left;width: 50%;margin-top: 2%;margin-left: 20%">
<label class="layui-form-label"><i class="tip-required" style="color: red;font-size: 20px">*</i>手机号</label>
<div class="layui-input-block">
<input type="text" name="foremanPhone" id="foremanPhone" readonly lay-verify="" class="layui-input">
</div>
</div>
</div>-->
<div class="layui-form-item" style="display: none">
<div class="layui-input-block">