分包商-清退功能
This commit is contained in:
parent
80a9e2e166
commit
55ed1e2f08
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
}
|
||||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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")
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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; // 是否清退
|
||||
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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,17 +90,16 @@
|
|||
<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,
|
||||
select IFNULL(pc.`NAME`, pd.`name`) as companyName,
|
||||
bs.ID as id,
|
||||
bs.org_id as orgId,
|
||||
major_id as majorId,
|
||||
|
|
@ -110,14 +113,12 @@
|
|||
bs.back_idcard_path as backIdcardPath,
|
||||
bs.seal_path as sealPath,
|
||||
bs.sign_path as signPath
|
||||
from
|
||||
bm_subcontractor bs
|
||||
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'
|
||||
where bs.IS_ACTIVE = '1'
|
||||
and bs.id = #{id}
|
||||
</select>
|
||||
<!--修改-->
|
||||
|
|
@ -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>
|
||||
|
|
@ -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();
|
||||
}
|
||||
|
|
@ -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'></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'></i></button>");
|
||||
var btn = $("<button class='layui-btn layui-btn-xs' title='删除' onclick='del(\"" + id + "\",\"" + subContractNum + "\")'>删除</button>");
|
||||
return btn.prop("outerHTML");
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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'></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'></i></button>");
|
||||
var btn = $("<button class='layui-btn layui-btn-xs' title='删除' onclick='delView(\"" + id + "\")'>删除</button>");
|
||||
return btn.prop("outerHTML");
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ layui.use(['form'], function () {
|
|||
form.render();
|
||||
|
||||
form.on('select(subId)', function (data) {
|
||||
$("#teamName").val("");
|
||||
// $("#teamName").val("");
|
||||
});
|
||||
|
||||
// 验证成功后才会执行下面的操作
|
||||
|
|
|
|||
|
|
@ -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);*/
|
||||
});
|
||||
|
||||
// 验证成功后才会执行下面的操作
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
@ -55,7 +55,7 @@
|
|||
<th>合同金额(元)</th>
|
||||
<th>现场负责人</th>
|
||||
<th>备案班组</th>
|
||||
<th>备案人员</th>
|
||||
<!-- <th>备案人员</th>-->
|
||||
<th>附件</th>
|
||||
<th>操作</th>
|
||||
</tr>
|
||||
|
|
|
|||
|
|
@ -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">
|
||||
|
|
|
|||
Loading…
Reference in New Issue