Files
hzmys.hkpgsow.cn/public/static/js/mala.js
gaofeng 6d9aee81aa 提交
2026-05-12 18:27:28 +08:00

400 lines
14 KiB
JavaScript
Raw 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.
var layer = layui.layer, form = layui.form, upload = layui.upload, laydate = layui.laydate
initFormFields()
function initFormFields() {
$('.layui-form-item').each(function() {
const labelText = $(this).find('.layui-form-label').text().replace('*', '').trim();
// 查找所有需要必填提示的表单元素
$(this).find('.layui-input-block input, ' +
'.layui-input-block select, ' +
'.layui-input-block textarea')
.each(function() {
var $field = $(this);
// 如果已有提示则跳过(保留自定义提示)
if (!$field.attr('lay-reqtext')) {
// 设置统一的必填提示
$field.attr('lay-reqtext', labelText + lang.field_required);
$field.attr('lay-verType', 'tips');
}
});
});
// 重新渲染表单
form.render();
}
//遍历日期选择
$(".layui-form-item").find(".layui-time").each(function () {
xvDate({
target: this,
});
});
$(".layui-form-item").find(".layui-qian").each(function () {
xvDate({
target: this,
max: new Date().toISOString().split('T')[0]
});
});
$(".layui-form-item").find(".layui-hou").each(function () {
xvDate({
target: this,
min: new Date().toISOString().split('T')[0]
});
});
$(".layui-form-item").find(".layui-arrive").each(function () {
xvDate({
target: this,
min: new Date().toISOString().split('T')[0],
done: function(value, date, endDate){
const isdate = isWithinThreeDays(value)
if (!isdate){
layer.alert(lang.alert_message, {
icon: 0,
shadeClose: true,
title: lang.notice
});
}
validateDates();
}
});
});
$(".layui-form-item").find(".layui-leave").each(function () {
xvDate({
target: this,
min: new Date().toISOString().split('T')[0],
done: function (value, date, endDate) {
validateDates();
}
});
});
function validateDates() {
var date1 = $('input[name="arrive_date"]').val();
var date2 = $('input[name="leave_date"]').val();
if (date1 && date2) {
var d1 = new Date(date1);
var d2 = new Date(date2);
if (d1 > d2) {
layer.tips(lang.departure_date_error, 'input[name="leave_date"]');
$('input[name="leave_date"]').val('')
return false;
}
return true;
}
}
function isWithinThreeDays(dateString) {
const targetDate = new Date(dateString);
const currentDate = new Date();
const threeDaysInMillis = 2 * 24 * 60 * 60 * 1000;
// 将时间部分设置为0以便只比较日期部分
targetDate.setHours(0, 0, 0, 0);
currentDate.setHours(0, 0, 0, 0);
return targetDate - currentDate <= threeDaysInMillis;
}
//监听
form.on('select(hotel_state_select)', function (data) {
var sub_select = document.getElementById('hotel_city');
sub_select.innerHTML = '';
if (data.value) {
layer.load(0)
$.ajax({
url: "/home/visa/get_sub_city", type: "POST", data: {'id': data.value}, success: function (data) {
if (data.data.length !== 0) {
// 动态添加城市选项
sub_select.innerHTML = '<option value="">'+lang.search_directly+'</option>' + data.data.text;
layer.closeAll()
form.render('select'); // 重新渲染下拉框
} else {
layer.closeAll()
layer.msg(lang.failed, {icon: 5});
form.render('select'); // 重新渲染下拉框
return false;
}
}
});
}
})
$('#shili').on('click', function () {
layer.photos({
photos: {
"data": [ //相册包含的图片,数组格式
{
"src": $('#sample_url').val(),
}]
},
})
});
//是否选择 默认显示或隐藏
$("input[type='radio']").each(function () {
var name = $(this).attr("name");
var alt = $(this).attr("alt");
if ($(this).is(":checked")) {
$(".data-" + alt).show();
} else {
$(".data-" + alt).hide();
}
})
//是否radio 必填判断
form.on("radio", function (data) {
var name = data.elem.name;
var type = data.elem.alt;
$(".data-name-" + name).hide();
$(".data-" + type).show();
$(".data-name-" + name).each(function () {
var that = $(this).find(".layui-required");
var verify = that.attr("lay-verify");
if (verify === undefined || verify === null) {
verify = "";
}
var disAble = that.attr("disabled");
if ($(this).hasClass("data-" + type)) {
if (disAble === "disabled") {
} else if (verify.indexOf("required") >= 0) {
} else {
verify = verify + "|required";
that.attr("lay-verify", verify);
}
} else {
if (disAble === "disabled") {
} else {
if (verify.includes("required")) {
verify = verify.slice(0, verify.length - 9);
}
that.val('')
that.attr("lay-verify", verify);
}
}
})
});
//下一步
form.on('submit', function (data) {
var className = data.elem.className;
if (className.includes("btn-next")) {
$(this).hide()
$(this).parents(".layui-form").next(".layui-form").show();
var h = $(this).parents(".layui-form").next(".layui-form").offset().top - 100;
$("html,body").animate({
scrollTop: h
}, 500);
}
return false;
});
function normalizePassportNo(value) {
return (value || '').toUpperCase().replace(/\s+/g, '');
}
function isChineseNationality(value) {
return (value || '').trim().toUpperCase() === 'CHN';
}
function isValidChinesePassportNo(value) {
value = String(value).trim().toUpperCase();
return /^(?:G\d{8}|E\d{8}|E[A-HJ-NP-Z]\d{7}|[SP]E\d{7})$/.test(value);
}
form.verify({
// 验证至少选中一个 checkbox
checkboxRequired: function (value, item) {
var name = item.getAttribute('name');
var checkboxes = document.querySelectorAll(`input[name="${name}"]:checked`);
var checkboxes_length = document.querySelectorAll(`input[name="${name}"]`).length;
if (checkboxes.length !== checkboxes_length) {
return lang.check_declaration;
}
}, // 验证必须选中一个 radio
radioRequired: function (value, item) {
var name = item.getAttribute('name');
var radios = document.querySelectorAll(`input[name="${name}"]:checked`);
if (radios.length === 0) {
return lang.choose_package;
}
}, radioChecked: function (value, item) { //value表单的值、item表单的DOM对象
var radio = $(item).parent('div').find('input[type=radio]:checked').length;
if (!radio) {
return lang.select_one_option;
}
}, checkboxChecked: function (value, item) { //value表单的值、item表单的DOM对象
var name = item.getAttribute('name');
var checkboxes = document.querySelectorAll(`input[name="${name}"]:checked`);
if (checkboxes.length === 0) {
return lang.select_one_option;
}
},
english: [/^[A-Za-z]+$/, lang.english_only]
,daxie: [/^[A-Z]+$/, lang.uppercase_only],
zhongwen: [/^[\u4e00-\u9fa5]+$/, lang.chinese_only],
len40: [/^.{1,100}$/, lang.max_100_chars],
otherReq: function (value, item) {
var $ = layui.$;
var verifyName = $(item).attr('name'), verifyType = $(item).attr('type'),
formElem = $(item).parents('.layui-form')//获取当前所在的form元素如果存在的话
, verifyElem = formElem.find('input[name=' + verifyName + ']')//获取需要校验的元素
, isTrue = verifyElem.is(':checked')//是否命中校验
, focusElem = verifyElem.next().find('i.layui-icon');//焦点元素
if (!isTrue || !value) {
//定位焦点
focusElem.css(verifyType == 'radio' ? {"color": "#FF5722"} : {"border-color": "#FF5722"});
//对非输入框设置焦点
focusElem.first().attr("tabIndex", "1").css("outline", "0").blur(function () {
focusElem.css(verifyType == 'radio' ? {"color": ""} : {"border-color": ""});
}).focus();
return lang.field_required;
}
},
chinaPassport: function (value, item) {
const nationality = $('select[name="nation"]').val();
if (!isChineseNationality(nationality)) {
return;
}
const normalized = normalizePassportNo(value);
if (!isValidChinesePassportNo(normalized)) {
return lang.china_passport_invalid;
}
$(item).val(normalized);
},
englishOnly: function (value, item) {
const v = (value ?? '').replace(/\s+/g, ''); // 去掉所有空白字符
if (!/^[A-Za-z]+$/.test(v)) {
return lang.english_only;
}
}
});
//监听提交
form.on('submit(formSubmit)', function (data) {
var submitVal = "";
for (var i = 1; i < 4; i++) {
submitVal = $.extend(submitVal, form.val('Form' + i));
if (!form.validate('#Form' + i)) {
return false;
}
}
$("#last_name_con").html($('input[name="last_name"]').val() + " " + $('input[name="first_name"]').val())
$("#first_name_con").html($('input[name="first_name"]').val())
$("#birth_date_con").html($('input[name="birth_date"]').val())
$("#passport_number_con").html($('input[name="passport_number"]').val())
$("#passport_expiration_date_con").html($('input[name="passport_expiration_date"]').val())
$("#arrive_date_con").html($('input[name="arrive_date"]').val())
$("#leave_date_con").html($('input[name="leave_date"]').val())
$("#email_con").html($('input[name="email"]').val())
if (window.innerWidth <= 768) {
area = ['90%', 'auto']
} else {
area = ['30%', 'auto']
}
layer.open({
content: $('#confirm'),
type: 1,
title: lang.verify,
btn: [lang.confirms, lang.edit],
btnAlign: 'c',
closeBtn: 0,
area: area,
yes: function () {
var load = layer.load(2, {shade: 0.3})
setTimeout(function () {
$.ajax({
url: "/home/visa/do_apply", type: "POST", data: submitVal, success: function (data) {
if (data.code === 1) {
window.location.href = data.url
} else {
layer.msg(data.msg, {icon: 5});
return false
}
}
});
}, 1500)
},
end: function () {
$('#confirm').hide()
}
});
return false;
});
upload.render({
elem: '#passport_img', // 绑定的按钮 ID
url: '/home/upload/upload_passport', // 后端接口 URL
accept: 'images', // 仅支持图片类型
before: function (obj) {
loadIndex = layer.load(0);
obj.preview(function (index, file, result) {
$('#uploadPassportView').removeClass('layui-hide').find('img').attr('src', result);
});
},
done: function (res) {
// 上传成功后的回调
if (res.path.length !== 0) {
layer.close(loadIndex);
layer.msg(lang.upload_successful, {icon: 1});
$('input[name="passport_img"]').val(res.path);
if (res.data.length !== 0) {
$('input[name="last_name"]').val(res.data.last_name)
$('input[name="first_name"]').val(res.data.first_name)
$('input[name="birth_date"]').val(res.data.birth_date_year + '-' + ('0' + res.data.birth_date_month).slice(-2) + '-' + ('0' + res.data.birth_date_day).slice(-2))
$('input[name="passport_number"]').val(res.data.passport_number)
var gender = res.data.gender == 'male' ? '1' : '2'
$('input[name="gender"][value="' + gender + '"]').prop('checked', true);
$('input[name="passport_expiration_date"]').val(res.data.passport_expiration_date_year + '-' + ('0' + res.data.passport_expiration_date_month).slice(-2) + '-' + ('0' + res.data.passport_expiration_date_day).slice(-2))
form.render('radio');
}
} else {
layer.close(loadIndex);
$('#passport_img_preview').html('')
$('input[name="last_name"]').val('')
$('input[name="first_name"]').val('')
$('input[name="birth_date"]').val('')
$('input[name="passport_number"]').val('')
$('input[name="passport_expiration_date"]').val('')
$('input[name="gender"]').prop('checked', false);
form.render('radio');
layer.msg(lang.upload_failed+'' + res.msg, {icon: 5});
}
}, error: function () {
// 上传失败的回调
layer.close(loadIndex);
$('#passport_img_preview').html('')
$('input[name="passport_img"]').val('')
$('input[name="last_name"]').val('')
$('input[name="first_name"]').val('')
$('input[name="birth_city"]').val('')
$('input[name="issuing_place"]').val('')
$('input[name="birth_date"]').val('')
$('input[name="passport_number"]').val('')
$('input[name="passport_expedition_date"]').val('')
$('input[name="passport_expiration_date"]').val('')
$('input[name="gender"]').prop('checked', false);
form.render('radio');
layer.msg(lang.upload_error, {icon: 5});
}
});
upload.render({
elem: '#person_img',
url: '/home/upload/file_upload', // 后端接口 URL
before: function(obj){
//预读本地文件示例不支持ie8
obj.preview(function(index, file, result){
$('#person_img_view').attr('src', result); //图片链接base64
});
loadIndex = layer.load(0);
},
done: function(res){
layer.close(loadIndex);
// 上传成功后的回调
if (res.path.length !== 0) {
layer.msg(lang.upload_successful, {icon: 1});
$('input[name="person_img"]').val(res.path);
} else {
layer.msg(lang.upload_failed+'' + res.msg, {icon: 5});
}
},
error: function(){
layer.close(loadIndex);
layer.msg(lang.upload_error, {icon: 5});
}
});