You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
288 lines
13 KiB
288 lines
13 KiB
{% extends 'base.html' %}
|
|
|
|
{% block title %}ZFBOX{% endblock %}
|
|
|
|
{% block style %}
|
|
.pagination {
|
|
justify-content: flex-end; /* 右对齐 */
|
|
}
|
|
.page-item .page-link {
|
|
padding: 0.25rem 0.5rem; /* 缩小按钮 */
|
|
font-size: 0.875rem; /* 调整字体大小 */
|
|
}
|
|
.btn-group-sm > .btn, .btn-sm {
|
|
padding: 0.25rem 0.5rem;
|
|
font-size: 0.875rem;
|
|
line-height: 1.5;
|
|
}
|
|
.btn-group-sm .btn {
|
|
margin-right: 5px; /* 按钮之间的间距 */
|
|
}
|
|
.form-group-right h5 {
|
|
text-align: right;
|
|
margin-bottom: 0;
|
|
}
|
|
.table-container {
|
|
min-height: 400px; /* 设置最小高度,可以根据需要调整 */
|
|
}
|
|
|
|
.video-area {
|
|
width: 100%;
|
|
position: relative;
|
|
background-color: #000;
|
|
border: 1px solid #ddd;
|
|
}
|
|
|
|
.video-area::before {
|
|
content: "";
|
|
display: block;
|
|
padding-top: 75%; /* 4:3 ratio */
|
|
}
|
|
|
|
.video-area canvas {
|
|
position: absolute;
|
|
top: 0;
|
|
left: 0;
|
|
width: 100%;
|
|
height: 100%;
|
|
object-fit: contain;
|
|
}
|
|
.schedule-table {
|
|
width: 100%;
|
|
table-layout: fixed;
|
|
}
|
|
.schedule-table th, .schedule-table td {
|
|
text-align: center;
|
|
vertical-align: middle;
|
|
cursor: pointer;
|
|
border: 1px solid #dee2e6;
|
|
padding: 8px;
|
|
}
|
|
.schedule-table td.allowed {
|
|
background-color: white;
|
|
}
|
|
.schedule-table td.blocked {
|
|
background-color: blue;
|
|
}
|
|
/* 缩小表格行高 */
|
|
.table-sm th,
|
|
.table-sm td {
|
|
padding: 0.2rem; /* 调整这里的值来改变行高 */
|
|
}
|
|
canvas {
|
|
border: 1px solid black;
|
|
}
|
|
{% endblock %}
|
|
|
|
{% block content %}
|
|
<div class="container d-flex flex-column" >
|
|
<div class="row justify-content-center align-items-center mb-3">
|
|
<div class="col-md-2 text-end"><label class="col-form-label form-label">所属区域:</label></div>
|
|
<div class="col-md-3">
|
|
<select id="areaSelect" class="form-select mr-2" aria-label="Default select example"></select></div>
|
|
<div class="col-md-2 text-end"><label class="col-form-label form-label">通道名称:</label></div>
|
|
<div class="col-md-3"><input id="channelNameInput" type="text" class="form-control"></div>
|
|
<div class="col-md-2"><button id="searchButton" type="button" class="btn btn-primary">查 询</button></div>
|
|
</div>
|
|
|
|
<div class="mb-3">
|
|
<button id="addChannelButton" type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#channelModal">
|
|
新增通道
|
|
</button>
|
|
</div>
|
|
|
|
<!-- 新增通道模态框 -->
|
|
<div class="modal fade" id="channelModal" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1" aria-labelledby="add_channel" aria-hidden="true">
|
|
<div class="modal-dialog">
|
|
<div class="modal-content">
|
|
<div class="modal-header">
|
|
<h5 class="modal-title" id="channelModalLabel">新增通道</h5>
|
|
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
|
</div>
|
|
<div class="modal-body">
|
|
<div class="form-group">
|
|
<label for="areaSelect_M" class="form-label">所属区域:</label>
|
|
<select id="areaSelect_M" class="form-select" aria-label="D">
|
|
<!-- 数据动态填充 -->
|
|
</select>
|
|
</div>
|
|
<div class="form-group">
|
|
<label for="CNameInput" class="form-label">通道名称:</label>
|
|
<input type="text" class="form-control" id="CNameInput">
|
|
</div>
|
|
<div class="form-group">
|
|
<label for="RTSPInput" class="form-label">RTSP地址:</label>
|
|
<input type="text" class="form-control" id="RTSPInput">
|
|
</div>
|
|
</div>
|
|
<div class="modal-footer">
|
|
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">取消</button>
|
|
<button type="button" class="btn btn-primary" id="saveButton">保存</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- 修改通道模态框 -->
|
|
<div class="modal fade" id="ChangeC" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1" aria-labelledby="change_c" aria-hidden="true">
|
|
<div class="modal-dialog">
|
|
<div class="modal-content">
|
|
<div class="modal-header">
|
|
<h5 class="modal-title" id="ChangeChannel">修改通道</h5>
|
|
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
|
</div>
|
|
<div class="modal-body">
|
|
<div class="form-group">
|
|
<label for="areaSelect_CC" class="form-label">所属区域:</label>
|
|
<select id="areaSelect_CC" class="form-select" aria-label="D">
|
|
<!-- 数据动态填充 -->
|
|
</select>
|
|
</div>
|
|
<div class="form-group">
|
|
<label for="CNameInput_cc" class="form-label">通道名称:</label>
|
|
<input type="text" class="form-control" id="CNameInput_cc">
|
|
</div>
|
|
<div class="form-group">
|
|
<label for="RTSPInput_cc" class="form-label">RTSP地址:</label>
|
|
<input type="text" class="form-control" id="RTSPInput_cc">
|
|
</div>
|
|
</div>
|
|
<div class="modal-footer">
|
|
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">取消</button>
|
|
<button type="button" class="btn btn-primary" id="saveButton_cc">保存</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- 算法管理模态框 -->
|
|
<div class="modal fade" id="MX_M" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1" aria-labelledby="m_mx" aria-hidden="true">
|
|
<div class="modal-dialog modal-lg">
|
|
<div class="modal-content">
|
|
<div class="modal-header">
|
|
<h5 class="modal-title" id="MX_Title">配置算法</h5>
|
|
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
|
</div>
|
|
<div class="modal-body">
|
|
<div class="container-fluid">
|
|
<div class="row align-items-center">
|
|
<div class="col-6">
|
|
<div class="video-area">
|
|
<!-- <img id="video-mx" alt="Video Stream" />-->
|
|
<canvas id="backgroundCanvas" style="display: none;"></canvas>
|
|
<canvas id="myCanvas"></canvas>
|
|
</div>
|
|
</div>
|
|
<div class="col-6 ms-auto">
|
|
<!-- 配置算法 -->
|
|
<div class="row align-items-center mb-2">
|
|
<div class="col-3"><label for="model_select">配置算法:</label></div>
|
|
<div class="col-9">
|
|
<select id="model_select" class="form-select" aria-label="D">
|
|
<!-- 数据动态填充 -->
|
|
</select>
|
|
</div>
|
|
</div>
|
|
<!-- 检测区域 -->
|
|
<div class="row align-items-center mb-2">
|
|
<div class="col-3"><label for="model_select">检测区域:</label></div>
|
|
<div class="col-9">
|
|
<div class="row">
|
|
<div class="col-6">
|
|
<div class="form-check">
|
|
<input class="form-check-input" type="radio" name="jcqy"
|
|
id="qjjc" checked onclick="handleRadioClick(event)">
|
|
<label class="form-check-label" for="qjjc">全画面生效</label>
|
|
</div>
|
|
</div>
|
|
<div class="col-6">
|
|
<div class="form-check">
|
|
<input class="form-check-input" type="radio" name="jcqy"
|
|
id="zdjc" onclick="handleRadioClick(event)">
|
|
<label class="form-check-label" for="zdjc">指定区域</label>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="row">
|
|
<button type="button" class="btn btn-primary" id="but_hzqy" style="--bs-btn-padding-y:.20rem; --bs-btn-font-size: .70rem;">
|
|
绘制区域</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<!-- 检测阈值 -->
|
|
<div class="row align-items-center mb-2">
|
|
<div class="col-3">
|
|
<label>置信阈值:</label>
|
|
</div>
|
|
<div class="col-3">
|
|
<input type="text" class="form-control" id="zxyz">
|
|
</div>
|
|
<div class="col-3">
|
|
<label>IOU阈值:</label>
|
|
</div>
|
|
<div class="col-3">
|
|
<input type="text" class="form-control" id="iouyz">
|
|
</div>
|
|
</div>
|
|
<!-- 布放计划 -->
|
|
<div class="row form-group">
|
|
<label for="11">布防计划:</label>
|
|
<div id="11">
|
|
<table class="schedule-table table table-sm table-bordered" style="font-size: 7px;">
|
|
<thead>
|
|
<tr>
|
|
<th></th><th>00</th><th>01</th><th>02</th><th>03</th><th>04</th>
|
|
<th>05</th><th>06</th><th>07</th><th>08</th><th>09</th><th>10</th>
|
|
<th>11</th><th>12</th><th>13</th><th>14</th><th>15</th><th>16</th>
|
|
<th>17</th><th>18</th><th>19</th><th>20</th><th>21</th><th>22</th>
|
|
<th>23</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody id="schedule-body">
|
|
<!-- 表格数据将由JavaScript动态填充 -->
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="modal-footer">
|
|
<button type="button" class="btn btn-secondary" id="cancelButton_mx">取消</button>
|
|
<button type="button" class="btn btn-primary" id="saveButton_mx">保存</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="table-container">
|
|
<table class="table">
|
|
<thead class="table-light">
|
|
<tr>
|
|
<th scope="col">ID</th>
|
|
<th scope="col">所属区域</th>
|
|
<th scope="col">通道名称</th>
|
|
<th scope="col">RTSP地址</th>
|
|
<th scope="col">配置算法</th>
|
|
<th scope="col">操作</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody id="table-body" class="table-group-divider">
|
|
<!-- 表格数据动态填充 -->
|
|
</tbody>
|
|
</table>
|
|
<nav>
|
|
<ul id="pagination" class="pagination">
|
|
<!-- 分页控件将动态生成 -->
|
|
</ul>
|
|
</nav>
|
|
</div>
|
|
</div>
|
|
{% endblock %}
|
|
|
|
{% block script %}
|
|
<script src="{{ url_for('main.static', filename='scripts/jquery-3.2.1.slim.min.js') }}"></script>
|
|
<script src="{{ url_for('main.static', filename='scripts/popper.min.js') }}"></script>
|
|
<script src="{{ url_for('main.static', filename='scripts/channel_manager.js') }}"></script>
|
|
{% endblock %}
|