czl-web/pages/ownteam/ownPersonToTeamForm.html

423 lines
18 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/html">
<head>
<meta charset="UTF-8">
<title>项目管理团队表单</title>
<link rel="stylesheet" href="../../layui-v2.8.18/layui/css/layui.css" media="all"/>
</head>
<style>
.layui-form-label {
position: relative;
float: left;
display: block;
padding: 9px 15px;
width: 100%;
font-weight: 400;
line-height: 20px;
text-align: right;
}
</style>
<body>
<form class="layui-form" action="" onsubmit="return false">
<div>
<div class="layui-form-item">
<br class="layui-inline">
<p>
<i class="tip-required" style="color: red;font-size: 20px">*</i> 团队成员:
<span style="color: red;">1. 团队组建最低标准:</span>
<span id="span1"></span>
</p>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<span style="color: red;"> 2. 单项成员若多于标准团队数量,请点击 “新增” 添加多人</span>
</p>
</div>
</div>
<div class="layui-form-item" style="display: none">
<div class="layui-input-block">
<button type="submit" class="layui-btn subBtn" id="commit" lay-submit lay-filter="formDemo">提交</button>
</div>
</div>
<table id="demo" lay-filter="test" style="padding: 10px"></table>
</form>
</body>
</html>
<script type="text/html" id="barDemo">
<a lay-event="add" style="color: #009688;cursor: pointer;font-size: 15px">新增</a>
{{# if(d.isData == 1 || d.isData == '1'){ }}
<span style="font-size: 15px;"> | </span>
<a lay-event="reElection" style="color: #009688;cursor: pointer;font-size: 15px">重选</a>
{{# } }}
{{# if(d.isData == 0 || d.isData == '0'){ }}
<span style="font-size: 15px;"> | </span>
<a lay-event="choosePerson" style="color: #009688;cursor: pointer;font-size: 15px">选人</a>
{{# } }}
{{# if(d.type == 2){ }}
<span style="font-size: 15px;"> | </span>
<a lay-event="del" style="color: #009688;cursor: pointer;font-size: 15px">删除</a>
{{# } }}
</script>
<script src="../../js/jquery/jquery-3.6.0.js"></script>
<script src="../../layui-v2.8.18/layui/layui.js"></script>
<script type="text/javascript" src="../../js/jq.js"></script>
<script src="../../js/common_methon.js"></script>
<script type="text/javascript" src="../../js/publicJs.js"></script>
<script type="text/javascript" src="../../js/select.js"></script>
<script type="text/javascript" src="../../js/my/permission.js"></script>
<script type="text/javascript">
layui.config({
base: '../../js/layuiModules/', // 第三方模块所在目录
version: 'v1.6.4' // 插件版本号
}).extend({
soulTable: 'notice,layNotify', // 模块
});
var form;
var table;
var newData;
var notice;
var layNotify;
var id = localStorage.getItem("id");
var resourceId = localStorage.getItem("resourceId");
var voltageLevelId = localStorage.getItem("voltageLevelId");
var teamTypeId = localStorage.getItem("teamTypeId");
var teamName = localStorage.getItem("teamName");
var finalData;
var type = "1";
layui.use(['table', 'form', 'notice', 'layNotify'], function () {
table = layui.table;
form = layui.form;
notice = layui.notice;
layNotify = layui.layNotify;
showTitle();
showTable();
//监听工具条
table.on('tool(test)', function (obj) {
var id = obj.config.id;
var data = obj.data; //当前行数据
var rowIndex = obj.index;
var layEvent = obj.event; //当前点击的事件名
if (layEvent == 'choosePerson') {
var newData = table.cache.demo; //获取当前表格的数据
var index = obj.tr.index(); //获取当前行的索引
//打开人员页面,勾选人员,并返回相关值
choosePersonHtml(newData, index);
}
if (layEvent == 'reElection') {
var newData = table.cache.demo; //获取当前表格的数据
var index = obj.tr.index(); //获取当前行的索引
choosePersonHtml(newData, index);
}
if (layEvent === 'add') {
var newRow = {
postName: data.postName,
type: 2,
postNum: data.postNum,
manageId: data.manageId,
id: data.tmPersonId,
isData: 0,
isRequired: data.isRequired
}; //新增行的数据
var newData = table.cache.demo; //获取当前表格的数据
var index = obj.tr.index(); //获取当前行的索引
newData.splice(index + 1, 0, newRow); // 假设 tableData 是表格的数据源
// 重新渲染表格
table.reload('demo', {
data: newData, // 重新加载时传入新的数据源
});
}
if (layEvent === 'del') {
layer.confirm('确认删除该行数据?', function (index) {
newData = table.cache.demo; //获取当前表格的数据
newData.splice(rowIndex, 1); //从数组中删除指定索引的元素
table.reload('demo', {
data: newData //重新加载表格数据
});
layer.close(index);
});
}
});
// 单元格编辑事件
table.on('edit(test)', function (obj) {
var field = obj.field; // 得到字段
var value = obj.value; // 得到修改后的值
var oldValue = obj.oldValue;
var data = obj.data; // 得到所在行所有键值
var update = {};
// 值的校验
if (field === 'idNumber') {
if (value.length != 18) {
update[field] = oldValue;
obj.update(update);
layer.tips('输入的身份证不正确,请重新编辑', this, {tips: 1});
return obj.reedit(); // 重新编辑 -- v2.8.0 新增
} else {
update[field] = value;
obj.update(update);
}
}
if (field == 'name' || field == 'sex') {
var limit = 10; // 设置最大字数限制为 10
if (value.length > limit) {
layer.tips('最大字数限制为' + limit + '个字符', this, {tips: 1});
// 这里可以根据实际情况进行处理,比如截断字符串或者阻止编辑
update[field] = oldValue;
obj.update(update);
} else {
update[field] = value;
obj.update(update);
}
}
if (field == 'implementation' || field == 'vocationalSkillLevel') {
var limit = 200; // 设置最大字数限制为 10
if (value.length > limit) {
layer.msg('最大字数限制为' + limit + '个字符');
// 这里可以根据实际情况进行处理,比如截断字符串或者阻止编辑
obj.update({field: obj.field, value: value.substring(0, limit)});
}
}
// 编辑后续操作,如提交更新请求,以完成真实的数据更新
// …
// layer.msg('编辑成功', {icon: 1});
reloadTip("表格编辑", data.postName + "编辑成功", 'success')
});
// 验证成功后才会执行下面的操作
form.on('submit(formDemo)', function (data) {
addInfo(); //新增方法
});
});
function showTable() {
$.ajax({
type: 'post',
url: ctxPath + '/owmTeams/getOwnTeamsFormLists',//数据接口
dataType: 'json', // 服务器返回数据类型
async: false,
data: {
voltageLevelId: voltageLevelId,
teamTypeId: teamTypeId,
id: id,
resourceId: resourceId,
type: '2'
},
success: function (data) {
table.render({
elem: '#demo'
, toolbar: 'default'
, cellMinWidth: 80
, cols: [[ //表头
{
field: 'postName', title: '岗位', align: 'center', templet: d => {
let text = "";
if (d.isRequired == "1") {
text = '<i class="tip-required" style="color: red;font-size: 20px">*</i>' + d.postName;
} else if (d.isRequired == "0") {
text = d.postName;
}
return text;
}
},
{field: 'name', title: '姓名', align: 'center'},
{field: 'sex', title: '性别', align: 'center'},
{field: 'nation', title: '民族', align: 'center'},
{field: 'idNumber', title: '身份证', align: 'center'},
{field: 'implementation', title: '执证情况', align: 'center'},
{field: 'vocationalSkillLevel', title: '职业/技能等级', align: 'center'},
{title: '操作', toolbar: '#barDemo', align: 'center'} //自定义操作栏模板
]],
data: data,
done: function (res, curr, count) {
merge(res);
},
toolbar: '#toolbarDemo' //开启工具栏,此处显示默认图标,可以自定义模板,详见文档
});
},
error: function (err) {
console.log("获取工程下拉列表出错:", err);
}
});
}
function showTitle() {
$.ajax({
type: 'post',
url: ctxPath + '/owmTeams/getOwnTeamNums',
dataType: 'json', // 服务器返回数据类型
async: false,
data: {
voltageLevelId: voltageLevelId,
teamTypeId: teamTypeId,
standardTeamTypeId: resourceId,
},
success: function (data) {
var resMsg = data.resMsg;
if ("数据获取成功" == resMsg) {
$("#span1").empty();
let info = data.obj.OwnTeamManageBean;
console.log(info);
console.log(JSON.stringify(info));
var html = '';
for (let i = 0; i < info.length; i++) {
html += info[i].postName + '<span style="color: red;"> ' + info[i].postNum + '</span>';
}
$("#span1").append(html)
}
},
error: function (err) {
console.log("获取工程下拉列表出错:", err);
}
});
}
/**
* 合并行方法
**/
function merge(res) {
var data = res.data;
var mergeIndex = 0;//定位需要添加合并属性的行数
var mark = 1; //这里涉及到简单的运算mark是计算每次需要合并的格子数
var columsName = ['postName'];//需要合并的列名称 ['business_tenant_name','land','contract_begin','contract_end','history_arrears','period'];
var columsIndex = [0];//需要合并的列索引值 [2,3,5,6,14,15];
for (var k = 0; k < columsName.length; k++) { //这里循环所有要合并的列
var trArr = $(".layui-table-body>.layui-table").find("tr");//所有行
if (!isEmpty(res.data)) {
for (var i = 1; i < res.data.length; i++) { //这里循环表格当前的数据
var tdCurArr = trArr.eq(i).find("td").eq(columsIndex[k]);//获取当前行的当前列
var tdPreArr = trArr.eq(mergeIndex).find("td").eq(columsIndex[k]);//获取相同列的第一列
if (data[i][columsName[0]] === data[i - 1][columsName[0]]) {
layui.hint().error(i);
if (data[i][columsName[k]] === data[i - 1][columsName[k]]) { //后一行的值与前一行的值做比较,相同就需要合并
mark += 1;
tdPreArr.each(function () {//相同列的第一列增加rowspan属性
$(this).attr("rowspan", mark);
});
tdCurArr.each(function () {//当前行隐藏
$(this).css("display", "none");
});
}
} else {
mergeIndex = i;
mark = 1;//一旦前后两行的值不一样了那么需要合并的格子数mark就需要重新计算
}
}
}
mergeIndex = 0;
mark = 1;
}
}
function addInfo() {
var tip = '保存';
finalData = table.cache.demo;
for (let i = 0; i < finalData.length; i++) {
if (finalData[i].isRequired == '1') {
if (isEmpty(finalData[i].name) || isEmpty(finalData[i].sex) || isEmpty(finalData[i].nation) || isEmpty(finalData[i].idNumber)) {
// return layer.msg("相关表格数据请填写完整在进行提交,谢谢^_^!")
reloadTip("数据提交", "相关表格数据请填写完整在进行提交,谢谢^_^!", 'error');
return;
}
}
}
var data = {
finalData: JSON.stringify(finalData),
teamTypeId: teamTypeId,
standardTeamTypeId: resourceId,
teamName: teamName,
id: id,
}
var tip = "修改";
var formUrl = ctxPath + "/owmTeams/updateOwnTeams";
// 加载提示
var addLoadingMsg = top.layer.msg('数据上传中,请稍候...', {
icon: 16,
scrollbar: false,
time: 0,
shade: [0.8, '#393D49']
});
$.ajax({
type: 'post',
async: false, // 默认异步true,false表示同步
url: formUrl, // 请求地址
contentType: "application/json; charset=utf-8",
dataType: 'json', // 服务器返回数据类型
data: JSON.stringify(data), //获取提交的表单字段
success: function (data) {
if (data.resMsg == "发起成功") {
top.layer.close(addLoadingMsg); //再执行关闭
reloadTip(tip, tip + "成功", "success");
setTimeout(function () {
parent.layer.closeAll();
}, 2000);
} else if (data.resMsg == "团队名称已存在") {
top.layer.close(addLoadingMsg); //再执行关闭
reloadTip(tip, "团队名称已存在", "error");
} else {
top.layer.close(addLoadingMsg); //再执行关闭
reloadTip(tip, tip + "失败", "error");
}
},
error: function (XMLHttpRequest, textStatus, e) {
layer.msg('数据请求发生异常,请稍后重试', {icon: 16, scrollbar: false});
top.layer.close(addLoadingMsg); //再执行关闭
}
});
}
function choosePersonHtml(newData,i){
var d;
var index = layer.open({
title: ['选择项目团队人员', 'color:#3B70A1;background-color:#E8ECEB;font-size:20px'],
type: 2,
content: "./choosePerson.html",
area: ['80%', '95%'],
maxmin: false,
btn: ['确定'],
success: function (layero, index) {
},
yes: function (index, layero) {
//提交子页面时执行
// 获取弹出层中的form表单元素
var formSubmit = layer.getChildFrame('form', index);
// 查找class样式为submitBtn的按钮
let submited = formSubmit.find('button.subBtn');
// 触发点击事件,会对表单进行验证,验证成功则提交表单,失败则返回错误信息
submited.click();
var iframeWin = window[layero.find('iframe')[0]['name']];
// 获取子页面的表单数据
d = iframeWin.getData();
newData[i].name = d.name;
newData[i].sex = d.sex;
newData[i].nation = d.nation;
newData[i].idNumber = d.idNumber;
newData[i].implementation = d.implementation;
newData[i].vocationalSkillLevel = d.vocationalSkillLevel;
newData[i].isData = 1;
// 重新渲染表格
table.reload('demo', {
data: newData, // 重新加载时传入新的数据源
});
layer.close(index);
}
});
}
function reloadTip(tip, message, type) {
parent.layNotify.notice({
title: tip + "提示",
type: type,
message: message
});
}
</script>