Files
hztha.hkpgsow.cn/app/home/view/user/multiple.html
gaofeng 0b165153c6 提交
2026-05-13 10:44:29 +08:00

388 lines
12 KiB
HTML

{include file="public/head" /}
<style>
body.user-page {
min-height: 100vh;
display: flex;
flex-direction: column;
background: #f5f7fb;
}
.user-main {
flex: 1;
padding: 32px 0 52px;
}
.account-layout {
display: grid;
grid-template-columns: 240px minmax(0, 1fr);
gap: 18px;
align-items: start;
}
.account-nav,
.account-panel {
background: #fff;
border: 1px solid rgba(15, 23, 42, .08);
border-radius: 8px;
box-shadow: 0 8px 24px rgba(15, 23, 42, .06);
overflow: hidden;
}
.account-nav__title,
.account-panel__title {
background: var(--main-color);
color: #fff;
font-size: 17px;
font-weight: 800;
line-height: 50px;
padding: 0 20px;
}
.account-nav__link {
display: flex;
align-items: center;
gap: 9px;
height: 50px;
padding: 0 18px;
color: #263241;
border-bottom: 1px solid #eef1f5;
text-decoration: none;
font-size: 15px;
}
.account-nav__link:hover,
.account-nav__link.is-active {
color: var(--main-color);
background: rgba(21, 56, 84, .06);
text-decoration: none;
}
.account-panel__body {
padding: 22px;
}
.invoice-tip {
margin: 0 0 20px;
padding: 12px 14px;
border: 1px solid rgba(149, 30, 20, .16);
border-radius: 6px;
color: #951e14;
background: rgba(149, 30, 20, .05);
line-height: 1.7;
text-align: center;
}
.invoice-tip a {
color: var(--main-color);
font-weight: 800;
text-decoration: none;
}
.invoice-row {
position: relative;
margin-bottom: 16px;
padding: 18px;
border: 1px solid #dfe5ee;
border-radius: 8px;
background: #fff;
}
.invoice-row__actions {
display: flex;
justify-content: flex-end;
gap: 10px;
margin-top: 4px;
}
.invoice-action {
display: inline-flex;
align-items: center;
gap: 5px;
color: var(--main-color);
cursor: pointer;
font-weight: 800;
user-select: none;
}
.invoice-action.is-danger {
color: #951e14;
}
.invoice-form .layui-form-label {
display: block;
float: none;
width: auto;
padding: 0 0 7px;
color: #1f2937;
text-align: left;
font-weight: 800;
}
.invoice-form .layui-form-label span {
color: #e53935;
margin-left: 3px;
}
.invoice-form .layui-input-block {
margin-left: 0;
min-height: auto;
}
.invoice-form .layui-input {
height: 50px;
border: 1px solid #d8dee8;
border-radius: 4px;
font-size: 15px;
}
.invoice-form .layui-input:focus {
border-color: var(--main-color) !important;
box-shadow: 0 0 0 3px rgba(21, 56, 84, .08);
}
.invoice-submit {
height: 50px;
line-height: 50px;
border-radius: 6px;
background: var(--main-color);
font-size: 17px;
font-weight: 800;
}
@media (max-width: 768px) {
.user-main {
padding: 20px 12px 36px;
}
.account-layout {
grid-template-columns: 1fr;
gap: 12px;
}
.account-nav {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
}
.account-nav__title {
display: none;
}
.account-nav__link {
justify-content: center;
padding: 0 8px;
font-size: 14px;
border-right: 1px solid #eef1f5;
}
.account-panel__body {
padding: 18px;
}
}
</style>
<body class="user-page">
{include file="public/newnav" /}
<main class="user-main">
<div class="layui-container">
<div class="account-layout">
<aside class="account-nav">
<div class="account-nav__title">个人中心</div>
<a href="{:url('user/index')}" class="account-nav__link">
<i class="bi bi-receipt"></i><span>我的订单</span>
</a>
<a href="{:url('user/invoice')}" class="account-nav__link">
<i class="bi bi-file-earmark-text"></i><span>自助开票</span>
</a>
<a href="{:url('user/multiple')}" class="account-nav__link is-active">
<i class="bi bi-files"></i><span>合并开票</span>
</a>
</aside>
<section class="account-panel">
<div class="account-panel__title">合并开票</div>
<div class="account-panel__body">
<p class="invoice-tip">
适用于多个订单合并开票。单个订单请使用
<a href="{:url('user/invoice')}">自助开票</a>
</p>
<form class="layui-form invoice-form" id="lookupform" name="form1" autocomplete="off">
<div id="invoiceRows">
<div class="invoice-row">
<div class="layui-row layui-col-space24">
<div class="layui-col-xs12 layui-col-md6">
<div class="layui-form-item">
<label class="layui-form-label">护照号码<span>*</span></label>
<div class="layui-input-block">
<input type="text" name="passport_number" maxlength="9" minlength="9"
lay-verify="required" placeholder="输入护照号码" class="layui-input">
</div>
</div>
</div>
<div class="layui-col-xs12 layui-col-md6">
<div class="layui-form-item">
<label class="layui-form-label">订单号<span>*</span></label>
<div class="layui-input-block">
<input type="text" name="order_sn" lay-verify="required"
placeholder="输入订单号" class="layui-input">
</div>
</div>
</div>
<div class="layui-col-xs12 layui-col-md6">
<div class="layui-form-item">
<label class="layui-form-label">姓氏<span>*</span></label>
<div class="layui-input-block">
<input type="text" name="last_name" maxlength="45"
lay-verify="required|englishName" placeholder="填写姓氏拼音"
class="layui-input">
</div>
</div>
</div>
<div class="layui-col-xs12 layui-col-md6">
<div class="layui-form-item">
<label class="layui-form-label">名字<span>*</span></label>
<div class="layui-input-block">
<input type="text" name="first_name" maxlength="40"
lay-verify="required|englishName" placeholder="填写名字拼音"
class="layui-input">
</div>
</div>
</div>
</div>
<div class="invoice-row__actions">
<span class="invoice-action js-add-row"><i class="layui-icon layui-icon-add-circle"></i>添加</span>
<span class="invoice-action is-danger js-remove-row"><i class="layui-icon layui-icon-reduce-circle"></i>删除</span>
</div>
</div>
</div>
<button class="layui-btn layui-btn-fluid invoice-submit" lay-submit lay-filter="multipleSubmit">提交</button>
</form>
</div>
</section>
</div>
</div>
</main>
{include file="public/newfooter" /}
<script>
layui.use(function () {
var $ = layui.$;
var form = layui.form;
var layer = layui.layer;
form.verify({
englishName: [/^[A-Za-z]+$/, '请填写英文拼音']
});
function refreshRemoveButtons() {
var $rows = $('#invoiceRows .invoice-row');
$rows.find('.js-remove-row').toggle($rows.length > 1);
}
function getRowData($row) {
return {
passport_number: $.trim($row.find("input[name='passport_number']").val()),
order_sn: $.trim($row.find("input[name='order_sn']").val()),
last_name: $.trim($row.find("input[name='last_name']").val()),
first_name: $.trim($row.find("input[name='first_name']").val())
};
}
function validateRow($row) {
var data = getRowData($row);
if (!data.passport_number) {
layer.msg('请输入护照号');
return false;
}
if (!data.order_sn) {
layer.msg('请输入订单号');
return false;
}
if (!data.last_name) {
layer.msg('请输入姓氏');
return false;
}
if (!data.first_name) {
layer.msg('请输入名字');
return false;
}
if (!/^[A-Za-z]+$/.test(data.last_name) || !/^[A-Za-z]+$/.test(data.first_name)) {
layer.msg('请填写英文拼音');
return false;
}
return true;
}
$(document).on('click', '.js-add-row', function () {
var $row = $(this).closest('.invoice-row');
if (!validateRow($row)) {
return false;
}
var $newRow = $row.clone(false, false);
$newRow.find('input').val('');
$('#invoiceRows').append($newRow);
refreshRemoveButtons();
});
$(document).on('click', '.js-remove-row', function () {
$(this).closest('.invoice-row').remove();
refreshRemoveButtons();
});
form.on('submit(multipleSubmit)', function () {
var datas = [];
var isValid = true;
var index1;
$('#invoiceRows .invoice-row').each(function () {
var $row = $(this);
if (!validateRow($row)) {
isValid = false;
return false;
}
datas.push(getRowData($row));
});
if (!isValid) {
return false;
}
$.ajax({
type: 'POST',
url: "{:url('user/checkMultiple')}",
data: {datas: JSON.stringify(datas)},
beforeSend: function () {
index1 = layer.load(1, {shade: [0.3, '#fff']});
},
success: function (data) {
layer.close(index1);
if (data.status == 1) {
layer.msg('查询成功');
window.location.href = data.url;
} else {
layer.msg(data.msg);
}
},
error: function () {
layer.close(index1);
layer.msg('请求失败,请稍后重试');
}
});
return false;
});
refreshRemoveButtons();
});
</script>
</body>
</html>