var totalProId = localStorage.getItem("totalProId");
var token = localStorage.getItem("smz-token");
var form,laydate
var gxListArr=[];
var selectedGxListInParent = [];// 父页面存储已选数据
$(function () {
layui.use(['form', 'laydate', 'upload'], function () {
form = layui.form; //只有执行了这一步,部分表单元素才会自动修饰成功
laydate = layui.laydate;
form.render();
$(document).ready(function() {
getPro(); // 初始化时加载工程名称下拉列表
getSub("");
getTeam("");
// 生成甲方二维码
$("#generateQrCodeA").click(function () {
generateQrCode("partya");
});
// 生成乙方二维码
$("#generateQrCodeB").click(function () {
generateQrCode("partyb");
});
// 更新甲方签名
$("#updateSignatureA").click(function () {
updateSignature("partya");
});
// 更新乙方签名
$("#updateSignatureB").click(function () {
updateSignature("partyb");
});
});
form.on('submit(formDemo)', function (data) {
insertContract(data); //新增合同信息
});
//查询分包
form.on('select(proId)', function (data) {
getSub(data.value);
});
//查询班组
form.on('select(subId)', function (data) {
getTeam(data.value);
});
laydate.render({
elem: '#contractDate' //指定元素 元素选择器
, type: 'date' //选择时间类型 可选值:year(年) month(年月) date(年月日) time(时分秒) datetime(年月日时分秒)
, trigger: 'click'
, format: 'yyyy-MM-dd' //时间格式 常用时间格式:yyyy-MM-dd HH:mm:ss
// , value: new Date() //初始值 今天
, btns: ['clear', 'now', 'confirm'] //选择框右下角显示的按钮 清除-现在-确定
, done: function (value, date) {//时间回调
}
});
laydate.render({
elem: '#planStartTime' //指定元素 元素选择器
, type: 'date' //选择时间类型 可选值:year(年) month(年月) date(年月日) time(时分秒) datetime(年月日时分秒)
, trigger: 'click'
, format: 'yyyy-MM-dd' //时间格式 常用时间格式:yyyy-MM-dd HH:mm:ss
// , value: new Date() //初始值 今天
, btns: ['clear', 'now', 'confirm'] //选择框右下角显示的按钮 清除-现在-确定
, done: function (value, date) {//时间回调
}
});
laydate.render({
elem: '#planEndTime' //指定元素 元素选择器
, type: 'date' //选择时间类型 可选值:year(年) month(年月) date(年月日) time(时分秒) datetime(年月日时分秒)
, trigger: 'click'
, format: 'yyyy-MM-dd' //时间格式 常用时间格式:yyyy-MM-dd HH:mm:ss
// , value: new Date() //初始值 今天
, btns: ['clear', 'now', 'confirm'] //选择框右下角显示的按钮 清除-现在-确定
, done: function (value, date) {//时间回调
}
});
// 自定义校验规则:暂定协议价
form.verify({
contractMoneyCheck: function (value, item) {
if (!value) return '请输入暂定协议价';
// 只允许数字和小数点,最多两位小数
if (!/^\d+(\.\d{1,2})?$/.test(value)) {
return '请输入正确的小写金额,最多两位小数';
}
// 金额范围限制(可选)
if (parseFloat(value) <= 0) {
return '金额必须大于0';
}
},
gxList: function (value, item) {
if (!value) return '请选择工序';
},
partyaImageUuid: function (value, item) {
if (!value) return '甲方签字不能为空';
},
partybImageUuid: function (value, item) {
if (!value) return '乙方签字不能为空';
},
});
form.on('submit(nextStep)', function (data) {
nextStep();
return false;
});
// 渲染表单
form.render();
});
});
function insertContract(data) {
var selectedOption = $("#proId option:selected");
data.field.proName = selectedOption.text(); // 获取 name(显示文本)
data.field.abbreviation = selectedOption.attr("data-abbreviation"); // 获取 abbreviation
var subOption = $("#subId option:selected");
data.field.subName = subOption.text();
var teamOption = $("#teamId option:selected");
data.field.teamName = teamOption.text();
data.field.partyaImage = $("#partyaImagePath").val();
data.field.partybImage = $("#partybImagePath").val();
data.field.contractMoneyMax = toChineseNumber(data.field.contractMoney);
data.field.gxList = gxListArr;
// alert(gxListArr)
// 加载提示
var loadingMsg = parent.layer.msg('数据上传中,请稍候...', {icon: 16, scrollbar: false, time: 0, shade: [0.8, '#393D49']});
var formUrl = smz_ht_url + "/teamSmallBagDryTreaty/addData";
$.ajax({
type: 'POST',
async: false, // 默认异步true,false表示同步
url: formUrl, // 请求地址
contentType: "application/json; charset=utf-8",
dataType: 'json', // 服务器返回数据类型
data: JSON.stringify(data.field), //获取提交的表单字段
success: function (data) {
layer.close(loadingMsg); // 关闭提示层
if (data.resMsg == "保存成功") {
parent.layer.alert('新增成功', {icon: 1, time: 2000});
setTimeout("reloading()", 2001);
} else {
parent.layer.alert('新增失败', {icon: 2, time: 2000});
// setTimeout("reloading()", 2001);
}
},
error: function (XMLHttpRequest, textStatus, e) {
layer.msg('数据请求发生异常,请稍后重试', {icon: 16, scrollbar: false});
}
});
parent.layer.close(loadingMsg); //再执行关闭
}
/**
* 获取工程
* */
function getPro() {
$("#proId").html("");
$.ajax({
type: 'get',
url: smz_ht_url + '/commonSelect/getPros',
data: {},
async: false,
success: function (data) {
var html = '';
for (var i = 0; i < data.obj.length; i++) {
html += '';
}
$("#proId").html(html);
form.render(); //这里就是我们要渲染的地方了
}
})
}
/**
* 获取分包名称(甲方)
* */
function getSub(proId) {
$("#subId").html("");
$.ajax({
type: 'get',
url: smz_ht_url + '/commonSelect/getSetAuthSubs',
data: {
proId:proId
},
async: false,
success: function (data) {
var html = '';
for (var i = 0; i < data.obj.length; i++) {
html += '';
}
$("#subId").html(html);
form.render(); //这里就是我们要渲染的地方了
}
})
}
/**
* 获取分包名称(甲方)
* */
function getTeam(subId) {
$("#teamId").html("");
$.ajax({
type: 'get',
url: smz_ht_url + '/commonSelect/getSubTeams',
data: {
subId:subId
},
async: false,
success: function (data) {
var html = '';
for (var i = 0; i < data.obj.length; i++) {
html += '';
}
$("#teamId").html(html);
form.render(); //这里就是我们要渲染的地方了
}
})
}
function lumpSum(){
var proId = $("#proId").val();
if(proId == "" || proId == null){
layer.msg('请先选择工程', {icon: 2});
return;
}
localStorage.setItem("lumpSumProId", proId);
localStorage.setItem("lumpSumType", "1");
let index = layer.open({
title: ['选择包干工序及桩位', 'color:#3B70A1;background-color:#E8ECEB;font-size:20px'],
type: 2,
content: 'lumpSum.html',
area: ['97.5%', '97.5%'],
maxmin: false,
btn: ['确定','关闭'],
success: function(layero, index){
var myIframe = window[layero.find('iframe')[0]['name']];
var fnc = myIframe.receiveDataFromParent(JSON.stringify(selectedGxListInParent)); //aaa()为子页面的方法
},
yes: function (index, layero) {
// 获取弹出层中的form表单元素
var formSubmit = layer.getChildFrame('form', index);
var submited = formSubmit.find('button')[1];
submited.click();
},
});
}
// 父页面 JS
function receiveDataFromChild(gxList,resultStrings) {
selectedGxListInParent = JSON.parse(gxList); // 更新父页面缓存
console.log('收到子页面数据:', gxList);
console.log('收到子页面数据groupedData:', resultStrings);
const cleaned = JSON.parse(resultStrings).map(item => item.replace(/\s+/g, ''));
// 第二步:处理每一项,生成标准化格式
const formatted = cleaned.map(item => {
// 使用正则提取工序名 和 桩位列表
const nameMatch = item.match(/^([\u4e00-\u9fa5]+)(?:工序)/);
const pileMatch = item.match(/桩位(.*)/);
if (!nameMatch || !pileMatch) return item;
const gxName = nameMatch[1]; // 工序名
let piles = pileMatch[1]; // 桩位字符串
// 去重 + 排序(可选)
const uniquePiles = [...new Set(piles.split(','))].filter(Boolean).join(',');
// 返回标准格式
return `${gxName}工序${uniquePiles}桩位`;
});
if(formatted.length > 0){
$("#gxList").val("1");
}
$("#selectedProcessAndPile").html(formatted.join('
'));
gxListArr = formatGxList(gxList);
}
function formatGxList(gxListStr) {
try {
// 步骤一:解析 JSON 字符串
const parsed = JSON.parse(gxListStr);
// 步骤二:遍历数组,提取每个对象中的字段并清理空格
return parsed.map(item => ({
gxId: item.gxId.trim(), // 直接取并去空格
gxName: item.gxName.trim(),
gxZw: item.gxZw.trim()
}));
} catch (e) {
console.error("JSON 解析失败", e);
return [];
}
}
function generateUUID() {
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);
return v.toString(16);
});
}
// 生成二维码并写入 input
function generateQrCode(party) {
var uuid = generateUUID(); // 生成唯一 UUID
// var inputId = party + "Image";
var inputId = party + "ImageUuid";
var qrCodeContainerId = party + "QrCodeContainer";
console.log("uuid: " + uuid)
$("#" + inputId).val(uuid); // 填充 input 框
// 发送请求到后台生成二维码
var formUrl = smz_ht_url + "/teamSmallBagDryTreaty/addQrCode";
$.ajax({
type: 'POST',
url: formUrl,
contentType: "application/json; charset=utf-8", // 设置为 JSON 类型
dataType: "json",
data: JSON.stringify({ uuid: uuid }), // 转为 JSON 字符串
success: function (res) {
if (res.res !=1 ) {
layer.msg("生成二维码失败", { icon: 2 });
return;
}
// 创建弹窗容器
let $content = $('