2024-06-06 18:02:55 +08:00
|
|
|
{% extends 'base.html' %}
|
|
|
|
{% load static tags %}
|
|
|
|
|
|
|
|
{% block content %}
|
2024-06-18 12:20:06 +08:00
|
|
|
|
|
|
|
{% block table_list_content %}
|
2024-06-09 16:45:08 +08:00
|
|
|
<section class="pcoded-main-container">
|
|
|
|
<div class="pcoded-wrapper">
|
|
|
|
<div class="pcoded-content">
|
|
|
|
<div class="pcoded-inner-content">
|
|
|
|
<div class="main-body">
|
|
|
|
<div class="page-wrapper">
|
|
|
|
{% include 'breadcrumb.html' %}
|
|
|
|
<div class="row mb-3">
|
|
|
|
<div class="col-md-12">
|
|
|
|
<div class="card">
|
|
|
|
<div class="card-body">
|
|
|
|
<div class="row">
|
|
|
|
<div class="col-md-8">
|
2024-06-18 02:48:18 +08:00
|
|
|
<form action="{{ form_action_url }}" method="get">
|
2024-06-09 16:45:08 +08:00
|
|
|
{% csrf_token %}
|
|
|
|
<div class="row">
|
|
|
|
{% for filter in filters %}
|
|
|
|
{% if filter.type == 'text' %}
|
|
|
|
<div class="col">
|
2024-06-16 22:40:11 +08:00
|
|
|
<label for="{{ filter.id }}" class="form-label">{{ filter.label }}</label>
|
2024-06-09 16:45:08 +08:00
|
|
|
<input type="text" class="form-control"
|
|
|
|
id="{{ filter.id }}"
|
|
|
|
name="{{ filter.name }}"
|
2024-06-16 22:40:11 +08:00
|
|
|
placeholder="{{ filter.placeholder }}"
|
|
|
|
value="{{ request.GET|get_value:filter.name|default:'' }}">
|
2024-06-09 16:45:08 +08:00
|
|
|
</div>
|
|
|
|
{% elif filter.type == 'select' %}
|
|
|
|
<div class="col">
|
2024-06-16 22:40:11 +08:00
|
|
|
<label class="form-label" for="{{ filter.id }}">{{ filter.label }}</label>
|
2024-06-09 16:45:08 +08:00
|
|
|
<select class="form-control"
|
|
|
|
id="{{ filter.id }}"
|
|
|
|
name="{{ filter.name }}">
|
|
|
|
<option value="">请选择</option>
|
|
|
|
{% for option in filter.options %}
|
|
|
|
<option value="{{ option.value }}"
|
2024-06-16 22:40:11 +08:00
|
|
|
{% if request.GET|get_value:filter.name == option.value %}selected{% endif %}>
|
|
|
|
{{ option.display }}
|
2024-06-09 16:45:08 +08:00
|
|
|
</option>
|
|
|
|
{% endfor %}
|
|
|
|
</select>
|
|
|
|
</div>
|
|
|
|
{% elif filter.type == 'date' %}
|
|
|
|
<div class="col">
|
2024-06-16 22:40:11 +08:00
|
|
|
<label for="{{ filter.id }}" class="form-label">{{ filter.label }}</label>
|
2024-06-09 16:45:08 +08:00
|
|
|
<input type="date" class="form-control"
|
|
|
|
id="{{ filter.id }}"
|
|
|
|
name="{{ filter.name }}"
|
|
|
|
value="{{ request.GET|get_value:filter.name }}">
|
|
|
|
</div>
|
|
|
|
{% elif filter.type == 'month' %}
|
|
|
|
<div class="col">
|
2024-06-16 22:40:11 +08:00
|
|
|
<label for="{{ filter.id }}" class="form-label">{{ filter.label }}</label>
|
2024-06-09 16:45:08 +08:00
|
|
|
<input type="month" class="form-control"
|
|
|
|
id="{{ filter.id }}"
|
|
|
|
name="{{ filter.name }}"
|
|
|
|
value="{{ request.GET|get_value:filter.name }}">
|
|
|
|
</div>
|
|
|
|
{% endif %}
|
|
|
|
{% endfor %}
|
2024-06-18 09:58:03 +08:00
|
|
|
{% if filters %}
|
2024-06-09 16:45:08 +08:00
|
|
|
<div class="col mt-4 d-flex align-items-center">
|
2024-06-16 22:40:11 +08:00
|
|
|
<button type="submit" class="btn btn-primary">查询</button>
|
2024-06-09 16:45:08 +08:00
|
|
|
</div>
|
2024-06-18 09:58:03 +08:00
|
|
|
{% endif %}
|
2024-06-06 18:02:55 +08:00
|
|
|
</div>
|
2024-06-09 16:45:08 +08:00
|
|
|
</form>
|
|
|
|
</div>
|
|
|
|
<div class="col-md-4 mt-4 text-end">
|
2024-06-16 22:40:11 +08:00
|
|
|
{% render_button 'modify_records_button' %}
|
|
|
|
{% render_button 'add_button' %}
|
|
|
|
{% render_button 'report_excel_button' %}
|
2024-06-17 20:40:32 +08:00
|
|
|
{# {% render_button 'import_excel_button' %}#}
|
|
|
|
<button id="importExcelBtnTest" class="btn btn-outline-primary" data-bs-toggle="modal" data-bs-target="#uploadModal">上传Excel(测试)</button>
|
2024-06-09 16:45:08 +08:00
|
|
|
</div>
|
2024-06-06 18:02:55 +08:00
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
2024-06-09 16:45:08 +08:00
|
|
|
<div class="row mb-3">
|
|
|
|
<div class="col-sm-12">
|
|
|
|
<div class="card">
|
|
|
|
<div class="card-body table-border-style">
|
|
|
|
<div class="table-responsive">
|
|
|
|
<table class="table">
|
|
|
|
{% get_verbose_field_names_from_model model_config table_exclude_field_name as columns %}
|
|
|
|
<thead>
|
2024-06-06 18:02:55 +08:00
|
|
|
<tr>
|
2024-06-09 16:45:08 +08:00
|
|
|
{% for column in columns %}
|
|
|
|
<th class="text-center">{{ column }}</th>
|
2024-06-06 18:02:55 +08:00
|
|
|
{% endfor %}
|
2024-06-09 16:45:08 +08:00
|
|
|
<th class="text-center">操作</th>
|
2024-06-06 18:02:55 +08:00
|
|
|
</tr>
|
2024-06-09 16:45:08 +08:00
|
|
|
</thead>
|
|
|
|
<tbody id="result" style="color: white;">
|
|
|
|
{% for item in items %}
|
|
|
|
<tr>
|
|
|
|
{% for field in item|get_fields:table_exclude_field_name %}
|
2024-06-18 10:31:15 +08:00
|
|
|
{% if '(元)' in field.verbose_name %}
|
2024-06-19 10:39:14 +08:00
|
|
|
<td class="text-center">{{ field.value|default_if_none:'-'|thousands_separator }}</td>
|
2024-06-18 10:31:15 +08:00
|
|
|
{% else %}
|
2024-06-19 05:33:43 +08:00
|
|
|
<td class="text-center">{{ field.value|default_if_none:'-' }}</td>
|
2024-06-18 10:31:15 +08:00
|
|
|
{% endif %}
|
2024-06-09 16:45:08 +08:00
|
|
|
{% endfor %}
|
|
|
|
<td class="text-center">
|
2024-06-16 22:40:11 +08:00
|
|
|
<a href="#"
|
|
|
|
id="editBtn"
|
|
|
|
class="edit-btn"
|
2024-06-09 16:45:08 +08:00
|
|
|
data-id="{{ item|get_pk_value }}"
|
|
|
|
data-bs-toggle="modal"
|
|
|
|
data-bs-target="#addEditModal">编辑</a>
|
2024-06-16 22:40:11 +08:00
|
|
|
<a href="#"
|
|
|
|
id="deleteBtn"
|
2024-06-18 21:54:54 +08:00
|
|
|
class="delete-btn"
|
2024-06-16 22:40:11 +08:00
|
|
|
style="color: red"
|
2024-06-16 19:34:15 +08:00
|
|
|
data-id="{{ item|get_pk_value }}"
|
|
|
|
data-bs-toggle="modal"
|
2024-06-16 22:40:11 +08:00
|
|
|
data-bs-target="#deleteModal">删除</a>
|
2024-06-09 16:45:08 +08:00
|
|
|
</td>
|
|
|
|
</tr>
|
|
|
|
{% empty %}
|
|
|
|
<tr>
|
|
|
|
<td class="text-center"
|
|
|
|
colspan="{{ table_columns|length }}">暂无数据
|
|
|
|
</td>
|
|
|
|
</tr>
|
|
|
|
{% endfor %}
|
|
|
|
</tbody>
|
|
|
|
</table>
|
|
|
|
</div>
|
2024-06-06 18:02:55 +08:00
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
2024-06-09 16:45:08 +08:00
|
|
|
{% include 'pagination_ps.html' with page_obj=items query_params=query_params %}
|
2024-06-06 18:02:55 +08:00
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
2024-06-09 16:45:08 +08:00
|
|
|
</section>
|
2024-06-18 12:20:06 +08:00
|
|
|
{% endblock %}
|
2024-06-06 18:02:55 +08:00
|
|
|
|
2024-06-09 16:45:08 +08:00
|
|
|
<div id="addEditModal" class="modal fade bd-example-modal-lg" tabindex="-1" role="dialog"
|
|
|
|
aria-labelledby="formModalCenterTitle" aria-hidden="true">
|
|
|
|
<div class="modal-dialog modal-dialog-centered modal-xl" role="document">
|
|
|
|
<div class="modal-content">
|
|
|
|
<div class="modal-header">
|
|
|
|
<h5 class="modal-title" id="formModalTitle">{{ form_title }}</h5>
|
2024-06-19 05:33:43 +08:00
|
|
|
<a href="" id="hiddenActionLink" style="display: none;"></a>
|
2024-06-09 16:45:08 +08:00
|
|
|
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
|
|
|
</div>
|
|
|
|
<div class="modal-body">
|
|
|
|
</div>
|
2024-06-06 18:02:55 +08:00
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
2024-06-16 22:40:11 +08:00
|
|
|
<div id="deleteModal" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="deleteModalLabel" aria-hidden="true">
|
|
|
|
<div class="modal-dialog" role="document">
|
|
|
|
<div class="modal-content">
|
|
|
|
<div class="modal-header">
|
|
|
|
<h5 class="modal-title" id="deleteModalLabel">提示</h5>
|
|
|
|
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
|
|
|
</div>
|
|
|
|
|
2024-06-19 00:23:33 +08:00
|
|
|
<div class="modal-body">
|
|
|
|
<p>此操作会删除当前数据,是否继续?</p>
|
|
|
|
</div>
|
2024-06-16 22:40:11 +08:00
|
|
|
|
2024-06-19 00:23:33 +08:00
|
|
|
<div class="modal-footer">
|
|
|
|
<button type="button" class="btn btn-light" data-bs-dismiss="modal">取消</button>
|
|
|
|
<button type="button" class="btn btn-danger" id="confirmDeleteBtn">删除</button>
|
|
|
|
</div>
|
2024-06-16 22:40:11 +08:00
|
|
|
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
2024-06-17 20:40:32 +08:00
|
|
|
<div id="uploadModal" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="uploadModalLabel" aria-hidden="true">
|
|
|
|
<div class="modal-dialog" role="document">
|
|
|
|
<div class="modal-content">
|
|
|
|
<form id="upload-form" method="post" enctype="multipart/form-data">
|
|
|
|
{% csrf_token %}
|
|
|
|
<div class="modal-header">
|
|
|
|
<h5 class="modal-title" id="uploadModalLabel">上传Excel文件</h5>
|
|
|
|
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
|
|
|
</div>
|
|
|
|
<div class="modal-body">
|
|
|
|
<input id="inputFile" type="file" name="excel_file" class="form-control" hidden accept=".xlsx">
|
|
|
|
<label class="btn btn-outline-primary" for="inputFile">选择文件</label>
|
|
|
|
<span id="file-chosen" style="font-size: 12px; margin-left: 10px;">未选择文件</span>
|
|
|
|
</div>
|
|
|
|
<div class="modal-footer">
|
|
|
|
<button id="downloadExcelBtn" type="button" class="btn btn-secondary" onclick="#!">下载填报模板</button>
|
|
|
|
<button id="uploadBtn" type="button" class="btn btn-primary">上传Excel</button>
|
|
|
|
</div>
|
|
|
|
</form>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
2024-06-09 16:45:08 +08:00
|
|
|
{% include 'modify_record_modal.html' with modify_records_url=modify_records_url %}
|
2024-06-06 23:46:12 +08:00
|
|
|
|
2024-06-18 05:01:50 +08:00
|
|
|
{% block item_list_custom_content %}
|
|
|
|
{% endblock %}
|
|
|
|
|
2024-06-09 16:45:08 +08:00
|
|
|
<script>
|
2024-06-18 19:00:56 +08:00
|
|
|
const excel_upload_config = {{ excel_upload_config|safe }};
|
2024-06-09 16:45:08 +08:00
|
|
|
const add_url = "{{ add_url }}";
|
|
|
|
const modify_url = "{{ modify_url }}";
|
2024-06-16 22:40:11 +08:00
|
|
|
const deleteUrl = "{{ delete_url }}";
|
2024-06-19 05:33:43 +08:00
|
|
|
let save_url = null;
|
2024-06-16 22:40:11 +08:00
|
|
|
let targetIdToDelete = null;
|
2024-06-17 20:40:32 +08:00
|
|
|
var templateName = "{{ excel_upload_config.template_name }}";
|
2024-06-17 23:40:16 +08:00
|
|
|
var modelConfig = "{{ model_config }}";
|
2024-06-18 02:48:18 +08:00
|
|
|
var list_url = "{{ form_action_url }}"
|
2024-06-06 18:02:55 +08:00
|
|
|
|
2024-06-09 16:45:08 +08:00
|
|
|
$(document).ready(function () {
|
2024-06-17 20:40:32 +08:00
|
|
|
function getCookie(name) {
|
|
|
|
let cookieValue = null;
|
|
|
|
if (document.cookie && document.cookie !== '') {
|
|
|
|
const cookies = document.cookie.split(';');
|
|
|
|
for (let i = 0; i < cookies.length; i++) {
|
|
|
|
const cookie = cookies[i].trim();
|
|
|
|
if (cookie.substring(0, name.length + 1) === (name + '=')) {
|
|
|
|
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return cookieValue;
|
|
|
|
}
|
|
|
|
|
|
|
|
const csrftoken = getCookie('csrftoken');
|
|
|
|
|
2024-06-09 16:45:08 +08:00
|
|
|
// 处理添加按钮点击事件
|
|
|
|
$('#addItemBtn').click(function () {
|
|
|
|
$.ajax({
|
|
|
|
url: add_url,
|
|
|
|
type: 'get',
|
|
|
|
success: function (response) {
|
|
|
|
// 将新的表单 HTML 插入到模态框中
|
|
|
|
$('#addEditModal .modal-body').html(response.form_html);
|
|
|
|
// 动态设置模态框标题
|
|
|
|
$('#formModalTitle').text('新增');
|
2024-06-16 05:37:00 +08:00
|
|
|
// 动态设置表单提交URL
|
|
|
|
$('#addEditForm').attr('action', add_url);
|
2024-06-19 05:33:43 +08:00
|
|
|
$('#hiddenActionLink').attr('href', add_url);
|
2024-06-09 16:45:08 +08:00
|
|
|
// 显示模态框
|
|
|
|
$('#addEditModal').modal('show');
|
2024-06-06 18:02:55 +08:00
|
|
|
|
2024-06-09 16:45:08 +08:00
|
|
|
// 绑定表单提交事件
|
|
|
|
bindFormSubmit();
|
|
|
|
},
|
|
|
|
error: function () {
|
|
|
|
$('#addEditModal').modal('hide');
|
|
|
|
showAlert('danger', '获取表单请求出错');
|
|
|
|
}
|
|
|
|
});
|
|
|
|
});
|
2024-06-06 18:02:55 +08:00
|
|
|
|
2024-06-09 16:45:08 +08:00
|
|
|
// 处理编辑按钮点击事件
|
2024-06-18 21:54:54 +08:00
|
|
|
$('.edit-btn').click(function () {
|
2024-06-09 16:45:08 +08:00
|
|
|
var itemId = $(this).data('id');
|
|
|
|
$.ajax({
|
|
|
|
url: modify_url,
|
|
|
|
type: 'get',
|
|
|
|
data: {id: itemId},
|
|
|
|
success: function (response) {
|
|
|
|
// 将表单 HTML 插入到模态框中
|
|
|
|
$('#addEditModal .modal-body').html(response.form_html);
|
|
|
|
$('#formModalTitle').text('编辑');
|
2024-06-16 05:37:00 +08:00
|
|
|
// 动态设置表单提交URL
|
|
|
|
$('#addEditForm').attr('action', modify_url);
|
2024-06-19 05:33:43 +08:00
|
|
|
$('#hiddenActionLink').attr('href', modify_url);
|
2024-06-09 16:45:08 +08:00
|
|
|
// 显示模态框
|
|
|
|
$('#addEditModal').modal('show');
|
2024-06-06 18:02:55 +08:00
|
|
|
|
2024-06-09 16:45:08 +08:00
|
|
|
// 绑定表单提交事件
|
|
|
|
bindFormSubmit();
|
|
|
|
},
|
|
|
|
error: function () {
|
|
|
|
$('#addEditModal').modal('hide');
|
|
|
|
showAlert('danger', '获取表单请求出错');
|
|
|
|
}
|
|
|
|
});
|
2024-06-06 18:02:55 +08:00
|
|
|
});
|
2024-06-09 16:45:08 +08:00
|
|
|
|
|
|
|
// 保存
|
|
|
|
function bindFormSubmit() {
|
|
|
|
$('#addEditForm').submit(function (e) {
|
|
|
|
e.preventDefault();
|
|
|
|
$.ajax({
|
2024-06-19 05:33:43 +08:00
|
|
|
url: $(this).attr('action'),
|
|
|
|
type: 'post',
|
2024-06-09 16:45:08 +08:00
|
|
|
data: $(this).serialize(),
|
|
|
|
success: function (response) {
|
|
|
|
// 关闭模态框并显示成功消息
|
|
|
|
$('#addEditModal').modal('hide');
|
|
|
|
showAlert('success', response.message);
|
|
|
|
location.reload();
|
|
|
|
},
|
|
|
|
error: function (xhr) {
|
|
|
|
// 处理表单错误并显示错误消息
|
2024-06-19 05:33:43 +08:00
|
|
|
showAlert('danger', '保存失败');
|
2024-06-09 16:45:08 +08:00
|
|
|
var response = xhr.responseJSON;
|
2024-06-19 05:33:43 +08:00
|
|
|
var actionUrl = $('#hiddenActionLink').attr('href');
|
2024-06-09 16:45:08 +08:00
|
|
|
$('#addEditModal .modal-body').html(response.form_html);
|
2024-06-19 05:33:43 +08:00
|
|
|
$('#addEditForm').attr('action', actionUrl);
|
2024-06-09 16:45:08 +08:00
|
|
|
bindFormSubmit();
|
|
|
|
}
|
|
|
|
});
|
|
|
|
});
|
|
|
|
}
|
2024-06-16 22:40:11 +08:00
|
|
|
|
|
|
|
// 删除和确认删除
|
2024-06-18 21:54:54 +08:00
|
|
|
$(document).on('click', '.delete-btn, #confirmDeleteBtn', function (event) {
|
2024-06-16 22:40:11 +08:00
|
|
|
if (event.target.id === 'deleteBtn') {
|
|
|
|
// 打开删除模态框
|
|
|
|
targetIdToDelete = $(this).data('id');
|
|
|
|
$('#deleteModal').modal('show');
|
|
|
|
} else if (event.target.id === 'confirmDeleteBtn') {
|
|
|
|
// 确认删除
|
|
|
|
if (targetIdToDelete !== null) {
|
|
|
|
$.ajax({
|
2024-06-18 21:59:27 +08:00
|
|
|
type: 'POST',
|
2024-06-16 22:40:11 +08:00
|
|
|
url: deleteUrl,
|
|
|
|
data: {
|
2024-06-18 22:04:03 +08:00
|
|
|
'id': targetIdToDelete,
|
|
|
|
'csrfmiddlewaretoken': csrftoken
|
2024-06-16 22:40:11 +08:00
|
|
|
},
|
|
|
|
success: function (response) {
|
|
|
|
showAlert('success', "删除成功");
|
|
|
|
location.reload();
|
|
|
|
},
|
|
|
|
error: function (response) {
|
|
|
|
showAlert('danger', "删除失败");
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
$('#deleteModal').modal('hide');
|
|
|
|
}
|
|
|
|
});
|
2024-06-17 20:40:32 +08:00
|
|
|
|
|
|
|
// 点击下载Excel模板按钮
|
|
|
|
$('#downloadExcelBtn').on('click', function () {
|
|
|
|
window.location.href = excel_upload_config.template_url;
|
|
|
|
});
|
|
|
|
|
|
|
|
// 当上传模态框显示时,清空文件输入框和文件名显示
|
|
|
|
$('#uploadModal').on('show.bs.modal', function () {
|
|
|
|
$('#inputFile').val('');
|
|
|
|
$('#file-chosen').text('未选择文件');
|
|
|
|
});
|
|
|
|
|
|
|
|
// 当选择文件变化时,更新文件名显示
|
|
|
|
$('#inputFile').on('change', function () {
|
|
|
|
var fileName = $(this).val().split('\\').pop();
|
|
|
|
$('#file-chosen').text(fileName || '未选择文件');
|
|
|
|
});
|
|
|
|
|
|
|
|
// 处理上传按钮的点击事件
|
|
|
|
$('#uploadBtn').on('click', function () {
|
|
|
|
var inputFile = $('#inputFile').get(0).files[0];
|
|
|
|
if (!inputFile) {
|
|
|
|
showAlert('danger', '未选择文件');
|
|
|
|
$('#uploadModal').modal('show');
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
var formData = new FormData();
|
|
|
|
formData.append('file', inputFile); // 将文件添加到 FormData 中
|
|
|
|
formData.append('template_name', templateName);
|
2024-06-17 23:40:16 +08:00
|
|
|
formData.append('excel_valid_model', modelConfig);
|
2024-06-18 02:48:18 +08:00
|
|
|
formData.append('list_url', list_url)
|
2024-06-17 20:40:32 +08:00
|
|
|
|
|
|
|
$.ajax({
|
|
|
|
url: '{{ excel_upload_config.parse_url }}',
|
|
|
|
type: 'POST',
|
|
|
|
data: formData,
|
|
|
|
headers: {'X-CSRFToken': csrftoken},
|
|
|
|
contentType: false,
|
|
|
|
processData: false,
|
|
|
|
success: function (response) {
|
|
|
|
window.location.href = response.redirect_url;
|
|
|
|
},
|
|
|
|
error: function (xhr, status, error) {
|
|
|
|
var errorMsg = "解析Excel文件失败。";
|
|
|
|
if (xhr.responseJSON && xhr.responseJSON.error) {
|
|
|
|
errorMsg = xhr.responseJSON.error;
|
|
|
|
}
|
|
|
|
showAlert('danger', errorMsg);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
});
|
2024-06-06 18:02:55 +08:00
|
|
|
});
|
2024-06-09 16:45:08 +08:00
|
|
|
</script>
|
2024-06-19 00:23:33 +08:00
|
|
|
{% block js_content %}
|
|
|
|
{% endblock %}
|
|
|
|
|
2024-06-06 18:02:55 +08:00
|
|
|
|
|
|
|
{% endblock %}
|