523 lines
30 KiB
HTML
523 lines
30 KiB
HTML
<!doctype html>
|
||
<!--
|
||
* Tabler - Premium and Open Source dashboard template with responsive and high quality UI.
|
||
* @version 1.0.0-beta19
|
||
* @link https://tabler.io
|
||
* Copyright 2018-2023 The Tabler Authors
|
||
* Copyright 2018-2023 codecalm.net Paweł Kuna
|
||
* Licensed under MIT (https://github.com/tabler/tabler/blob/master/LICENSE)
|
||
-->
|
||
<html lang="en">
|
||
<head>
|
||
<meta charset="utf-8"/>
|
||
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover"/>
|
||
<meta http-equiv="X-UA-Compatible" content="ie=edge"/>
|
||
<title></title>
|
||
<!-- CSS files -->
|
||
<link th:href="@{/css/tabler.min.css}" rel="stylesheet"/>
|
||
<link th:href="@{/css/tabler-flags.min.css}" rel="stylesheet"/>
|
||
<link th:href="@{/css/tabler-payments.min.css}" rel="stylesheet"/>
|
||
<link th:href="@{/css/tabler-vendors.min.css}" rel="stylesheet"/>
|
||
<link th:href="@{/css/defence.css}" rel="stylesheet"/>
|
||
|
||
</head>
|
||
<body>
|
||
|
||
<div class="page">
|
||
<!-- Sidebar -->
|
||
<aside class="navbar navbar-vertical navbar-expand-lg" data-bs-theme="dark">
|
||
<div class="container-fluid">
|
||
<div class="collapse navbar-collapse" id="sidebar-menu">
|
||
|
||
<div th:replace="fragments/menu :: menuList(${user.menuList})"></div>
|
||
</div>
|
||
</div>
|
||
|
||
</aside>
|
||
<!-- Navbar -->
|
||
<header class="navbar navbar-expand-md d-none d-lg-flex d-print-none">
|
||
<div class="container-xl" th:insert="fragments/header">
|
||
|
||
|
||
</div>
|
||
</header>
|
||
<div class="page-wrapper">
|
||
<div class="page-header d-print-none">
|
||
<div class="container-xl">
|
||
<div class="container-xl">
|
||
<div class="row g-2 align-items-center">
|
||
<div class="col">
|
||
<h2 class="page-title" th:text="${user.pageTitle}">
|
||
</h2>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<!-- Page body -->
|
||
<div class="page-body">
|
||
<div class="container-xl">
|
||
<div class="row row-cards">
|
||
<form name="searchForm" id="searchForm" th:action="@{/fuelBoat/list}">
|
||
<div class="card">
|
||
<div class="card-header">
|
||
|
||
<div class="row g-2">
|
||
<div class="col"><input type="text" th:value="${data.searchForm.boatName}"
|
||
name="boatName"
|
||
class="form-control" placeholder="输入名称"></div>
|
||
<div class="col-auto">
|
||
<a href="javascript:void(0)" class="btn btn-icon" aria-label="Button"
|
||
onclick="_resetPageNoSearch();return false;">
|
||
<!-- Download SVG icon from http://tabler-icons.io/i/search -->
|
||
<svg xmlns="http://www.w3.org/2000/svg" class="icon" width="24"
|
||
height="24" viewBox="0 0 24 24" stroke-width="2"
|
||
stroke="currentColor" fill="none" stroke-linecap="round"
|
||
stroke-linejoin="round">
|
||
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
|
||
<path d="M10 10m-7 0a7 7 0 1 0 14 0a7 7 0 1 0 -14 0"></path>
|
||
<path d="M21 21l-6 -6"></path>
|
||
</svg>
|
||
</a>
|
||
</div>
|
||
</div>
|
||
<input type="hidden" id="_currentPage" name="currentPage"
|
||
th:value="${data.searchForm.currentPage}"/>
|
||
|
||
</div>
|
||
.
|
||
<div class="card-body border-bottom py-3">
|
||
<div class="d-flex">
|
||
<div class="text-muted">
|
||
显示
|
||
<div class="mx-2 d-inline-block">
|
||
<input type="text" class="form-control form-control-sm"
|
||
th:value="${data.searchForm.pageSize}" size="3"
|
||
name="pageSize">
|
||
</div>
|
||
条
|
||
</div>
|
||
<div class="ms-auto text-muted">
|
||
<div class="col-md-auto ms-auto d-print-none">
|
||
<div class="btn-list">
|
||
|
||
<a href="#" class="btn btn-ghost-primary active "
|
||
onclick="common_add()">
|
||
<!-- Download SVG icon from http://tabler-icons.io/i/player-pause -->
|
||
|
||
添加
|
||
</a>
|
||
<a href="#" class="btn btn-ghost-danger active"
|
||
onclick="common_batchRemove();return false;">
|
||
<!-- Download SVG icon from http://tabler-icons.io/i/player-pause -->
|
||
|
||
批量删除
|
||
</a>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="table-responsive">
|
||
<table class="table card-table table-vcenter text-nowrap datatable">
|
||
<thead>
|
||
<tr>
|
||
<th class="w-1"><input class="form-check-input m-0 align-middle"
|
||
type="checkbox" onclick="checkBoxIdChanged(this)"></th>
|
||
<th class="w-1">No.
|
||
<!-- Download SVG icon from http://tabler-icons.io/i/chevron-up -->
|
||
<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-sm icon-thick"
|
||
width="24" height="24" viewBox="0 0 24 24" stroke-width="2"
|
||
stroke="currentColor" fill="none" stroke-linecap="round"
|
||
stroke-linejoin="round">
|
||
<path stroke="none" d="M0 0h24v24H0z" fill="none"/>
|
||
<path d="M6 15l6 -6l6 6"/>
|
||
</svg>
|
||
</th>
|
||
<th>船舶名称</th>
|
||
<th>种类</th>
|
||
<th>舰长(米)</th>
|
||
<th>舰宽(米)</th>
|
||
<th>吃水(米)</th>
|
||
<th>满载排水量(吨)</th>
|
||
<th>标准排水量(吨)</th>
|
||
<th>最大航速(节)</th>
|
||
<th>续航力</th>
|
||
<th>舰员</th>
|
||
<th>装载能力</th>
|
||
<th>备注</th>
|
||
|
||
<th></th>
|
||
</tr>
|
||
</thead>
|
||
<tbody th:if="${data.totalCount>0}">
|
||
|
||
<tr th:each="item:${data.list}">
|
||
<td><input class="form-check-input m-0 align-middle" name="itemId"
|
||
th:value="${item.id}" type="checkbox"
|
||
aria-label="Select invoice"></td>
|
||
<td th:text="${item.seq}"></td>
|
||
<td th:text="${item.boatName}"></td>
|
||
<td th:text="${item.boatType}"></td>
|
||
<td th:text="${item.boatLength}"></td>
|
||
<td th:text="${item.boatWidth}"></td>
|
||
<td th:text="${item.boatWaterDeep}"></td>
|
||
<td th:text="${item.boatFullWaterLoan}"></td>
|
||
<td th:text="${item.boatStandardWaterLoan}"></td>
|
||
<td th:text="${item.boatMaxSpeed}"></td>
|
||
<td th:text="${item.boatAbility}"></td>
|
||
<td th:text="${item.boatWorker}"></td>
|
||
<td th:text="${item.boatLoadAbility}"></td>
|
||
<td th:text="${item.truckMemo}"></td>
|
||
|
||
<td>
|
||
<a href="#" th:onclick="|common_edit(${item.id})|">编辑</a>
|
||
<a href="#" th:onclick="|common_delete(${item.id})|">删除</a>
|
||
|
||
</td>
|
||
|
||
|
||
</tr>
|
||
|
||
</tbody>
|
||
</table>
|
||
</div>
|
||
<div class="card-footer d-flex align-items-center" th:if="${data.totalCount>0}">
|
||
<p class="m-0 text-muted"> 共 <span
|
||
th:text="${data.totalCount}"></span>条
|
||
记录</p>
|
||
<ul class="pagination m-0 ms-auto">
|
||
<li th:class="${data.isHasPrevious()}?'page-item':'page-item disabled'">
|
||
<a class="page-link" href="#" tabindex="-1" aria-disabled="true"
|
||
onclick="_pre()">
|
||
<!-- Download SVG icon from http://tabler-icons.io/i/chevron-left -->
|
||
<svg xmlns="http://www.w3.org/2000/svg" class="icon" width="24"
|
||
height="24"
|
||
viewBox="0 0 24 24" stroke-width="2" stroke="currentColor"
|
||
fill="none"
|
||
stroke-linecap="round" stroke-linejoin="round">
|
||
<path stroke="none" d="M0 0h24v24H0z" fill="none"/>
|
||
<path d="M15 6l-6 6l6 6"/>
|
||
</svg>
|
||
上一页
|
||
</a>
|
||
</li>
|
||
<li th:each="page:${#numbers.sequence(data.startDisplayPage,data.endDisplayPage)}"
|
||
th:class="${page} == ${data.currentPage}?'page-item active':'page-item'">
|
||
<a class="page-link" href="#" th:text="${page}"
|
||
th:onclick="|_setPage(${page})|"></a>
|
||
</li>
|
||
<li th:class="${data.isHasNext()}?'page-item':'page-item disabled'">
|
||
<a class="page-link" href="#" onclick="_next()">
|
||
下一页
|
||
<svg xmlns="http://www.w3.org/2000/svg" class="icon" width="24"
|
||
height="24"
|
||
viewBox="0 0 24 24" stroke-width="2" stroke="currentColor"
|
||
fill="none"
|
||
stroke-linecap="round" stroke-linejoin="round">
|
||
<path stroke="none" d="M0 0h24v24H0z" fill="none"/>
|
||
<path d="M9 6l6 6l-6 6"/>
|
||
</svg>
|
||
</a>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</form>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<footer class="footer footer-transparent d-print-none">
|
||
<div class="container-xl" th:insert="fragments/footer">
|
||
</div>
|
||
</footer>
|
||
</div>
|
||
</div>
|
||
|
||
|
||
<script th:src="@{/js/tabler.min.js}" defer></script>
|
||
<script th:src="@{/js/common/common.js}"></script>
|
||
|
||
|
||
</body>
|
||
</html>
|
||
<div th:replace="fragments/dialog :: confirmationDialog"></div>
|
||
<div class="modal modal-blur fade" id="_addDialog" tabindex="-1" role="dialog" aria-hidden="true">
|
||
<div class="modal-dialog modal-full-width modal-dialog-centered" role="document">
|
||
<div class="modal-content">
|
||
<div class="modal-header">
|
||
<h5 class="modal-title"></h5>
|
||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"
|
||
onclick="closeDialog('_addDialog')"></button>
|
||
</div>
|
||
|
||
<form name="entityForm" id="entityForm" th:action="@{/fuelBoat/save}" th:list="@{/fuelBoat/list}"
|
||
th:delete="@{/fuelBoat/remove}" th:batchDelete="@{/fuelBoat/batchRemove}" th:view="@{/fuelBoat/view}"
|
||
th:path="@{/fuelBoat/}">
|
||
<input type="hidden" name="id">
|
||
<div class="modal-body">
|
||
<div class="row row-cards">
|
||
<div class="card">
|
||
<div class="card-header"><h3 class="card-title">油船信息</h3></div>
|
||
<div class="card-body">
|
||
<div class="mb-3 row">
|
||
<label class="col-3 col-form-label ">
|
||
船舶名称</label>
|
||
<div class="col">
|
||
<input type="text" class="form-control" placeholder="船舶名称" name="boatName">
|
||
<div class="invalid-feedback" id="boatName_error_tip"></div>
|
||
</div>
|
||
</div>
|
||
<div class="mb-3 row">
|
||
<label class="col-3 col-form-label required">
|
||
图标</label>
|
||
<div class=" col upload-container">
|
||
<!-- 隐藏的文件输入框 -->
|
||
<input type="file" id="fileInput" name="file">
|
||
<!-- 始终显示的圆形图标,此处采用相机图标(Unicode 表情) -->
|
||
<div class="upload-icon" id="uploadIcon">
|
||
📷
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
<div class="mb-3 row">
|
||
<label class="col-3 col-form-label required">种类</label>
|
||
<div class="col">
|
||
<select class="form-select" name=boatType>
|
||
<option th:each="item : ${codeMap['boat_type']}"
|
||
th:value="${item.id}"
|
||
th:text="${item.optionName}">
|
||
</select>
|
||
<div class="invalid-feedback" id="boatType_tip"></div>
|
||
</div>
|
||
</div>
|
||
<div class="mb-3 row">
|
||
<label class="col-3 col-form-label ">
|
||
舰长(米)</label>
|
||
<div class="col">
|
||
<input type="text" class="form-control" placeholder="舰长" name="boatLength">
|
||
<div class="invalid-feedback" id="boatLength_error_tip"></div>
|
||
</div>
|
||
</div>
|
||
<div class="mb-3 row">
|
||
<label class="col-3 col-form-label ">
|
||
舰宽(米)</label>
|
||
<div class="col">
|
||
<input type="text" class="form-control" placeholder="舰宽" name="boatWidth">
|
||
<div class="invalid-feedback" id="boatWidth_error_tip"></div>
|
||
</div>
|
||
</div>
|
||
<div class="mb-3 row">
|
||
<label class="col-3 col-form-label ">
|
||
吃水(米)</label>
|
||
<div class="col">
|
||
<input type="text" class="form-control" placeholder="吃水" name="boatWaterDeep">
|
||
<div class="invalid-feedback" id="boatWaterDeep_error_tip"></div>
|
||
</div>
|
||
</div>
|
||
<div class="mb-3 row">
|
||
<label class="col-3 col-form-label ">
|
||
满载排水量(吨)</label>
|
||
<div class="col">
|
||
<input type="text" class="form-control" placeholder="满载排水量"
|
||
name="boatFullWaterLoan">
|
||
<div class="invalid-feedback" id="boatFullWaterLoan_error_tip"></div>
|
||
</div>
|
||
</div>
|
||
<div class="mb-3 row">
|
||
<label class="col-3 col-form-label ">
|
||
标准排水量(吨)</label>
|
||
<div class="col">
|
||
<input type="text" class="form-control" placeholder="标准排水量"
|
||
name="boatStandardWaterLoan">
|
||
<div class="invalid-feedback" id="boatStandardWaterLoan_error_tip"></div>
|
||
</div>
|
||
</div>
|
||
<div class="mb-3 row">
|
||
<label class="col-3 col-form-label ">
|
||
最大航速(节)</label>
|
||
<div class="col">
|
||
<input type="text" class="form-control" placeholder="最大航速"
|
||
name="boatMaxSpeed">
|
||
<div class="invalid-feedback" id="boatMaxSpeed_error_tip"></div>
|
||
</div>
|
||
</div>
|
||
<div class="mb-3 row">
|
||
<label class="col-3 col-form-label ">
|
||
续航力</label>
|
||
<div class="col">
|
||
<input type="text" class="form-control" placeholder="续航力" name="boatAbility">
|
||
<div class="invalid-feedback" id="boatAbility_error_tip"></div>
|
||
</div>
|
||
</div>
|
||
<div class="mb-3 row">
|
||
<label class="col-3 col-form-label ">
|
||
舰员</label>
|
||
<div class="col">
|
||
<input type="text" class="form-control" placeholder="舰员" name="boatWorker">
|
||
<div class="invalid-feedback" id="boatWorker_error_tip"></div>
|
||
</div>
|
||
</div>
|
||
<div class="mb-3 row">
|
||
<label class="col-3 col-form-label ">
|
||
装载能力</label>
|
||
<div class="col">
|
||
<input type="text" class="form-control" placeholder="装载能力"
|
||
name="boatLoadAbility">
|
||
<div class="invalid-feedback" id="boatLoadAbility_error_tip"></div>
|
||
</div>
|
||
</div>
|
||
<div class="mb-3 row">
|
||
<label class="col-3 col-form-label required">
|
||
加注能力</label>
|
||
<div class="col">
|
||
<input type="text" class="form-control" placeholder="加注能力"
|
||
name="boatFilingSpeed">
|
||
<div class="invalid-feedback" id="boatFilingSpeed_error_tip"></div>
|
||
</div>
|
||
</div>
|
||
<div class="mb-3 row">
|
||
<label class="col-3 col-form-label ">备注</label>
|
||
<div class="col">
|
||
<textarea class="form-control" data-bs-toggle="autosize" name="truckMemo" id="truckMemo"
|
||
placeholder="Type something…"
|
||
style="overflow: hidden; overflow-wrap: break-word; resize: none; text-align: start; height: 56px;"></textarea>
|
||
</div>
|
||
<div class="invalid-feedback" id="truckMemo_tip"></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</form>
|
||
<div class="modal-footer">
|
||
<a href="#" class="btn btn-link link-secondary" onclick="closeDialog('_addDialog')">
|
||
取消
|
||
</a>
|
||
<a href="#" class="btn btn-primary ms-auto" data-bs-dismiss="modal" onclick="common_save()">
|
||
<!-- Download SVG icon from http://tabler-icons.io/i/plus -->
|
||
|
||
确定
|
||
</a>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="modal modal-blur fade" id="detailDialog" tabindex="-1" role="dialog" aria-hidden="true">
|
||
<div class="modal-dialog modal-full-width modal-dialog-centered" role="document">
|
||
<div class="modal-content">
|
||
<div class="modal-header">
|
||
<h5 class="modal-title">*${template.view.detail.title}*</h5>
|
||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"
|
||
onclick="closeDialog('detailDialog')"></button>
|
||
</div>
|
||
|
||
<div class="modal-body">
|
||
<div class="row row-cards">
|
||
|
||
<div class="card">
|
||
<div class="card-header">
|
||
<h3 class="card-title">*template.view.detail.title*</h3>
|
||
</div>
|
||
<div class="card-body" id="view-body-project">
|
||
<div class="datagrid">
|
||
|
||
<div class="datagrid-item">
|
||
<div class="datagrid-title" id="detail_boat_name_name">船舶名称</div>
|
||
<div class="datagrid-content" id="detail_boatName_value"></div>
|
||
</div>
|
||
<div class="datagrid-item">
|
||
<div class="datagrid-title" id="detail_boat_type_name">种类</div>
|
||
<div class="datagrid-content" id="detail_boatType_value"></div>
|
||
</div>
|
||
<div class="datagrid-item">
|
||
<div class="datagrid-title" id="detail_boat_length_name">舰长(米)</div>
|
||
<div class="datagrid-content" id="detail_boatLength_value"></div>
|
||
</div>
|
||
<div class="datagrid-item">
|
||
<div class="datagrid-title" id="detail_boat_width_name">舰宽(米)</div>
|
||
<div class="datagrid-content" id="detail_boatWidth_value"></div>
|
||
</div>
|
||
<div class="datagrid-item">
|
||
<div class="datagrid-title" id="detail_boat_water_deep_name">吃水(米)</div>
|
||
<div class="datagrid-content" id="detail_boatWaterDeep_value"></div>
|
||
</div>
|
||
<div class="datagrid-item">
|
||
<div class="datagrid-title" id="detail_boat_full_water_loan_name">满载排水量(吨)
|
||
</div>
|
||
<div class="datagrid-content" id="detail_boatFullWaterLoan_value"></div>
|
||
</div>
|
||
<div class="datagrid-item">
|
||
<div class="datagrid-title" id="detail_boat_standard_water_loan_name">
|
||
标准排水量(吨)
|
||
</div>
|
||
<div class="datagrid-content" id="detail_boatStandardWaterLoan_value"></div>
|
||
</div>
|
||
<div class="datagrid-item">
|
||
<div class="datagrid-title" id="detail_boat_max_speed_name">最大航速(节)</div>
|
||
<div class="datagrid-content" id="detail_boatMaxSpeed_value"></div>
|
||
</div>
|
||
<div class="datagrid-item">
|
||
<div class="datagrid-title" id="detail_boat_ability_name">续航力</div>
|
||
<div class="datagrid-content" id="detail_boatAbility_value"></div>
|
||
</div>
|
||
<div class="datagrid-item">
|
||
<div class="datagrid-title" id="detail_boat_worker_name">舰员</div>
|
||
<div class="datagrid-content" id="detail_boatWorker_value"></div>
|
||
</div>
|
||
<div class="datagrid-item">
|
||
<div class="datagrid-title" id="detail_boat_load_ability_name">装载能力</div>
|
||
<div class="datagrid-content" id="detail_boatLoadAbility_value"></div>
|
||
</div>
|
||
<div class="datagrid-item">
|
||
<div class="datagrid-title" id="detail_truck_memo_name">备注</div>
|
||
<div class="datagrid-content" id="detail_truckMemo_value"></div>
|
||
</div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<script>
|
||
|
||
|
||
function afterEditShow(data) {
|
||
if (data.base64Img) {
|
||
if (data.base64Img.length > 0) {
|
||
let container = document.getElementById("uploadIcon");
|
||
document.getElementById("uploadIcon").innerHTML = "";
|
||
var imgElement = document.createElement("img");
|
||
// 设置图片的 src 属性,拼接上 data URI 前缀, 这里的 MIME 类型为 image/png
|
||
imgElement.src = "data:image/png;base64," + data.base64Img;
|
||
|
||
|
||
// 将 img 元素添加到容器中
|
||
container.appendChild(imgElement);
|
||
}
|
||
}
|
||
}
|
||
|
||
function afterViewShow(data) {
|
||
//
|
||
if (data.base64Img) {
|
||
if (data.base64Img.length > 0) {
|
||
let container = document.getElementById("detail_jarImg_value");
|
||
document.getElementById("detail_jarImg_value").innerHTML = "";
|
||
var imgElement = document.createElement("img");
|
||
// 设置图片的 src 属性,拼接上 data URI 前缀, 这里的 MIME 类型为 image/png
|
||
imgElement.src = "data:image/png;base64," + data.base64Img;
|
||
|
||
|
||
// 将 img 元素添加到容器中
|
||
container.appendChild(imgElement);
|
||
}
|
||
}
|
||
}
|
||
</script> |