www_fpvone_cn/application/admin/view/cms/archives/course.html

1663 lines
63 KiB
HTML
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.

<!DOCTYPE html>
<html lang="zh-cn">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link href="https://www.fpvone.cn/assets/css/layui.css" rel="stylesheet">
<script src="https://www.fpvone.cn/assets/js/jquery.min.js"></script>
<!-- <script src="https://www.fpvone.cn/assets/js/jquery.printarea.js"></script> -->
<style>
.layui-tab .layui-tab-title li {
background-color: #D8E0E6;
color: #787979;
margin: 0 4px;
}
.layui-tab .layui-tab-title .layui-this {
background-color: #fff;
}
.tabelPage {
padding: 30px 30px 0 30px;
background-color: #fff;
}
.btnList {
margin-bottom: 20px;
display: flex;
justify-content: space-between;
}
.topBtn {
position: absolute;
right: 0;
top: 0;
}
.qsn_content {
padding: 10px;
display: flex;
flex-direction: column;
align-items: center;
}
.pages {
display: flex;
justify-content: center;
margin-top: 20px;
}
@font-face {
font-family: layui-icon;
src: url(/assets/fonts/iconfont.eot?v=282);
src: url(/assets/fonts/iconfont.eot?v=282#iefix) format("embedded-opentype"),
url(/assets/fonts/iconfont.woff2?v=282) format("woff2"),
url(/assets/fonts/iconfont.woff?v=282) format("woff"),
url(/assets/fonts/iconfont.ttf?v=282) format("truetype"),
url(/assets/fonts/iconfont.svg?v=282#layui-icon) format("svg");
}
.layui-layer-loading-icon::before {
display: none;
}
.flush_btn {
position: fixed;
width: 40px;
height: 40px;
display: flex;
align-items: center;
justify-content: center;
border-radius: 50%;
cursor: pointer;
background-color: #12a5f4;
color: #fff;
right: 5px;
top: 30%;
z-index: 10000;
transition: all 0.3s;
}
.flush_btn:hover {
scale: 1.1;
}
</style>
</head>
<body>
<div class="tabelPage">
<div class="flush_btn">刷新</div>
<div class="layui-tab" lay-filter="filter" style="position: relative;">
<ul class="layui-tab-title">
<li class="layui-this">资格赛</li>
<li style="display: none;">排位赛</li>
<li>淘汰赛</li>
<li>决赛</li>
</ul>
<div class="topBtn">
<button class="layui-btn layui-btn-primary layui-border-green exportRanking">总排名导出</button>
</div>
<div class="layui-tab-content">
<!-- 资格赛 -->
<div class="layui-tab-item layui-show layui-tab-item1">
<div class="btnList">
<div class="left layui-clear-space">
<a class="layui-btn layui-btn-primary" href="https://www.fpvone.cn/assets/file/中国无人机竞速联赛分组表格模板.xlsx" download>模版下载</a>
<a class="layui-btn layui-btn-primary layui-border-green" lay-options="{accept: 'file', exts: 'xlsx|xls'}" id="upload1">分组导入</a>
<a class="layui-btn layui-btn-primary layui-border-blue" lay-options="{accept: 'file', exts: 'xlsx|xls'}" id="upload-signal" style="margin-left: 10px;">单轮导入</a>
<a class="layui-btn layui-btn-primary layui-border-red clearData" style="margin-left: 10px;">清空数据</a>
</div>
<div class="right layui-clear-space" style="display: flex;">
<div class="layui-form" style="display: flex; ">
<div class="layui-form-item sort" style="display: none;">
<label class="layui-form-label" style="width: 90px;">是否排序</label>
<div class="layui-input-block" style="margin-left: 90px;">
<input type="checkbox" name="open" lay-skin="switch" lay-filter="switch1" title="ON|OFF">
</div>
</div>
<div class="layui-form-item" style="width: 190px; margin-right: 10px;">
<label class="layui-form-label" style="width: 90px;">选择轮次</label>
<div class="layui-input-block" style="width: 100px; margin-left: 90px;">
<select id="round1" lay-filter="select_filter_round_1" name="round"></select>
</div>
</div>
</div>
</div>
</div>
<table id="table1" lay-filter="table1"></table>
<div id="page1" class="pages"></div>
</div>
<!-- 排位赛 -->
<div class="layui-tab-item layui-tab-item2" style="display: none;">
<div class="btnList">
<div class="left layui-clear-space">
<a class="layui-btn layui-btn-primary">模版下载</a>
<a class="layui-btn layui-btn-primary layui-border-green" lay-options="{accept: 'file', exts: 'xlsx|xls'}" id="upload2">分组导入</a>
<a class="layui-btn layui-btn-primary layui-border-red clearData" style="margin-left: 10px;">清空数据</a>
</div>
<div class="right layui-clear-space" style="display: flex;">
<div class="layui-form" style="display: flex;">
<div class="layui-form-item" style="width: 190px; margin-right: 10px;">
<label class="layui-form-label" style="width: 90px;">选择轮次</label>
<div class="layui-input-block" style="width: 100px; margin-left: 90px;">
<select id="round2" lay-filter="select_filter_round_2" name="round"></select>
</div>
</div>
</div>
</div>
</div>
<table id="table2" lay-filter="table2"></table>
<div id="page2" class="pages"></div>
</div>
<!-- 淘汰赛 -->
<div class="layui-tab-item layui-tab-item3">
<div class="btnList">
<div class="left layui-clear-space">
<a class="layui-btn layui-btn-primary">模版下载</a>
<!-- <a class="layui-btn layui-btn-primary layui-border-green" lay-options="{accept: 'file', exts: 'xlsx|xls'}" id="upload3">分组导入</a> -->
<a class="layui-btn layui-btn-primary layui-border-blue" id="createGroup" style="margin-left: 10px;">生成分组</a>
<a class="layui-btn layui-btn-primary layui-border-red clearData">清空数据</a>
</div>
<div class="right layui-clear-space" style="display: flex;">
<div class="layui-form" style="display: flex;">
<div class="layui-form-item" style="width: 190px; margin-right: 10px;">
<label class="layui-form-label" style="width: 90px;">选择轮次</label>
<div class="layui-input-block" style="width: 100px; margin-left: 90px;">
<select id="round3" lay-filter="select_filter_round_3" name="round">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
<option value="10">10</option>
<option value="11">11</option>
<option value="12">12</option>
<option value="13">13</option>
</select>
</div>
</div>
</div>
<a class="layui-btn layui-btn-primary layui-border-blue" id="groupExport">分组导出</a>
</div>
</div>
<table id="table3" lay-filter="table3"></table>
</div>
<!-- 决赛 -->
<div class="layui-tab-item layui-tab-item4">
<div class="btnList">
<div class="left layui-clear-space">
<a class="layui-btn layui-btn-primary">模版下载</a>
<!-- <a class="layui-btn layui-btn-primary layui-border-green" lay-options="{accept: 'file', exts: 'xlsx|xls'}" id="upload">分组导入</a> -->
<a class="layui-btn layui-btn-primary layui-border-blue" id="createGroup2">生成分组</a>
<a class="layui-btn layui-btn-primary layui-border-red clearData">清空数据</a>
</div>
<div class="right layui-clear-space" style="display: flex;">
<div class="layui-form" style="display: flex; margin-right: 10px;">
<!-- <div class="layui-form-item extra">
<label class="layui-form-label" style="width: 90px;">是否加赛</label>
<div class="layui-input-block" style="margin-left: 90px;">
<input type="checkbox" name="open" lay-skin="switch" lay-filter="switch2" title="是|否">
</div>
</div> -->
<div class="layui-form-item final-selected" style="width: 190px; margin-right: 10px;">
<label class="layui-form-label" style="width: 90px;">选择轮次</label>
<div class="layui-input-block" style="width: 100px; margin-left: 90px;">
<select id="round4" lay-filter="select_filter_round_4" name="round">
<option value="1">公开组</option>
<option value="2">青少年组</option>
<option value="3">女子组</option>
</select>
</div>
</div>
</div>
<a class="layui-btn layui-btn-primary layui-border-orange" id="extra-popup">加赛</a>
<a class="layui-btn layui-btn-primary layui-border-blue" id="groupExport2">分组导出</a>
</div>
</div>
<table id="table4" lay-filter="table4"></table>
</div>
</div>
</div>
<div class="print-content" style="display: none;">
<style>
.print-content {
}
.print-content * {
box-sizing: border-box;
}
.print-content p {
margin: 0;
}
.print-content .divHeader {
width: 100%;
position: fixed;
top: 0;
display: flex;
justify-content: space-between;
padding: 0mm 0mm 0 0mm;
}
.print-content .divFooter {
width: 100%;
position: fixed;
bottom: 1mm;
text-align: center;
font-size: 11px;
}
.print-content table {
border-collapse: collapse;
width: 100%;
margin-top: 30mm;
}
.print-content table, .print-content th, .print-content td {
border: 1px solid black;
height: 40px;
}
.print-content th, .print-content td {
font-size: 12px;
text-align: center;
}
.print-content .title {
height: 60px;
font-size: 16px;
}
.print-content .channel {
width: 10mm;
}
.print-content .led {
width: 15mm;
}
.print-content .hw {
width: 10mm;
}
.print-content .group {
width: 10mm;
}
.print-content .id {
width: 16mm;
}
.print-content .name, .print-content .dw {
width: 25mm;
}
@media print {
.print-content {
page-break-after: always;
overflow: hidden;
}
.print-content:last-child {
page-break-after: auto;
}
.print-content * {
box-sizing: border-box;
}
.print-content .divHeader{
width: 100%;
position: fixed;
top: 0;
display: flex;
justify-content: space-between;
padding: 0mm 0mm 0 0mm;
}
.print-content .divFooter {
width: 100%;
position: fixed;
bottom: 1mm;
text-align: center;
font-size: 11px;
}
@page {
size: A4;
/* margin: 2cm; */
}
.print-content table {
border-collapse: collapse;
width: 100%;
margin-top: 30mm;
}
.print-content table, .print-content th, .print-content td {
border: 1px solid black;
}
.print-content th, .print-content td {
font-size: 12px;
text-align: center;
}
.print-content .title {
height: 60px;
font-size: 16px;
}
.print-content .channel {
width: 10mm;
}
.print-content .led {
width: 15mm;
}
.print-content .hw {
width: 10mm;
}
.print-content .group {
width: 10mm;
}
.print-content .id {
width: 16mm;
}
.print-content .name, .print-content .dw {
width: 25mm;
}
}
</style>
<div class="divHeader">
<img src="http://www.fpvone.cn/assets/imgs/printIcon1.png" alt="">
<img src="http://www.fpvone.cn/assets/imgs/printIcon2.png" alt="">
</div>
<table>
<thead>
<tr>
<th class="title" colspan="11"></th>
</tr>
<tr>
<th class="group" rowspan="2">组别</th>
<th class="id" rowspan="2">编号</th>
<th class="name" rowspan="2">姓名</th>
<th class="dw" rowspan="2">所属队伍</th>
<th class="hw" rowspan="2">号位</th>
<th colspan="3">成绩</th>
<th rowspan="2">运动员签字</th>
<th class="channel" rowspan="2">频道</th>
<th class="led" rowspan="2">LED颜色</th>
</tr>
<tr>
<th>第一圈</th>
<th>第二圈</th>
<th>第三圈</th>
</tr>
</thead>
<tbody></tbody>
</table>
<div class="divFooter">
<p>比翼飞行提供赛事计时服务</p>
</div>
</div>
<div class="print-content2" style="display: none;">
<style>
.print-content2 * {
box-sizing: border-box;
}
.print-content2 p {
margin: 0;
}
.print-content2 .divHeader {
width: 100%;
position: fixed;
top: 0;
display: flex;
justify-content: space-between;
padding: 0mm 0mm 0 0mm;
}
.print-content2 .divFooter {
width: 100%;
position: fixed;
bottom: 0;
text-align: center;
font-size: 11px;
}
.print-content2 table {
border-collapse: collapse;
width: 100%;
margin-top: 30mm;
}
.print-content2 table, .print-content2 th, .print-content2 td {
border: 1px solid black;
height: 40px;
}
.print-content2 th, .print-content2 td {
font-size: 12px;
text-align: center;
}
.print-content2 .title {
height: 60px;
font-size: 16px;
}
.print-content2 .channel {
width: 10mm;
}
.print-content2 .led {
width: 15mm;
}
.print-content2 .hw {
width: 10mm;
}
.print-content2 .group {
width: 10mm;
}
.print-content2 .id {
width: 16mm;
}
.print-content2 .name, .print-content2 .dw {
width: 25mm;
}
@media print {
.print-content2 {
page-break-after: always;
overflow: hidden;
}
.print-content2:last-child {
page-break-after: auto;
}
.print-content2 * {
box-sizing: border-box;
}
.print-content2 .divHeader{
width: 100%;
position: fixed;
top: 0;
display: flex;
justify-content: space-between;
padding: 0mm 0mm 0 0mm;
}
.print-content2 .divFooter {
width: 100%;
position: fixed;
bottom: 0;
text-align: center;
font-size: 11px;
}
@page {
size: A4;
/* margin: 2cm; */
}
.print-content2 table {
border-collapse: collapse;
width: 100%;
margin-top: 30mm;
}
.print-content2 table, .print-content2 th, .print-content2 td {
border: 1px solid black;
}
.print-content2 th, .print-content2 td {
font-size: 12px;
text-align: center;
}
.print-content2 .title {
height: 60px;
font-size: 16px;
}
.print-content2 .channel {
width: 10mm;
}
.print-content2 .led {
width: 15mm;
}
.print-content2 .hw {
width: 10mm;
}
.print-content2 .group {
width: 10mm;
}
.print-content2 .id {
width: 16mm;
}
.print-content2 .name, .print-content2 .dw {
width: 25mm;
}
}
</style>
<div class="divHeader">
<img src="http://www.fpvone.cn/assets/imgs/printIcon1.png" alt="">
<img src="http://www.fpvone.cn/assets/imgs/printIcon2.png" alt="">
</div>
<table>
<thead>
<tr>
<th class="title" colspan="11"></th>
</tr>
<tr>
<th class="group" rowspan="2">组别</th>
<th class="id" rowspan="2">编号</th>
<th class="name" rowspan="2">姓名</th>
<th class="dw" rowspan="2">所属队伍</th>
<th class="hw" rowspan="2">号位</th>
<th colspan="2">成绩</th>
<th rowspan="2">运动员签字</th>
<th class="channel" rowspan="2">频道</th>
<th class="led" rowspan="2">LED颜色</th>
</tr>
<tr>
<th>圈数</th>
<th>总计时</th>
</tr>
</thead>
<tbody></tbody>
</table>
<div class="divFooter">
<p>比翼飞行提供赛事计时服务</p>
</div>
</div>
<!-- -->
<script src="https://www.fpvone.cn/assets/js/layui.js"></script>
<script type="text/html" id="operate">
<div class="layui-clear-space">
<a class="layui-btn layui-btn-primary layui-border-green layui-btn-sm" lay-event="update">修改</a>
<!-- <a class="layui-btn layui-btn-primary layui-border-blue layui-btn-sm" lay-event="print">打印</a> -->
</div>
</script>
<script>
// course 101资格赛 102排位赛 103淘汰赛 104决赛
const url = window.location.href
const params = {}
url.replace(/[?&]+([^=&]+)=([^&]*)/gi, (m, key, value) => {
params[key] = value
})
const match_id = params.id
let currentPage = 1, limitPage = 50
let printAreaCount = 0
// 排名导出
$('.layui-tab-content .layui-tab-item1 .btnList .right').append(`<a class="layui-btn layui-btn-primary layui-border-blue downloadX downloadX1" href="https://www.fpvone.cn/inback.php/cms/league/export?match_id=${match_id}&course=101&sorting=false&other_round=1" download>排名导出</a>`)
$('.layui-tab-content .layui-tab-item2 .btnList .right').append(`<a class="layui-btn layui-btn-primary layui-border-blue downloadX" href="https://www.fpvone.cn/inback.php/cms/league/export?match_id=${match_id}&course=102&sorting=false" download>排名导出</a>`)
$('.layui-tab-content .layui-tab-item3 .btnList .right').append(`<a class="layui-btn layui-btn-primary layui-border-blue downloadX downloadX3" href="https://www.fpvone.cn/inback.php/cms/league/export?match_id=${match_id}&course=103&sorting=false&other_round=1" download>排名导出</a>`)
$('.layui-tab-content .layui-tab-item4 .btnList .right').append(`<a class="layui-btn layui-btn-primary layui-border-blue downloadX" href="https://www.fpvone.cn/inback.php/cms/league/export?match_id=${match_id}&course=104&sorting=false" download>排名导出</a>`)
let update_windows = null, clear_window = null, select_round = 1, tabIndex = 1, tableStatus = [true, false, false, false]
let all_round_first1 = true, all_round_first2 = true, all_round_first3 = true, all_round_first4 = true
// 列表头
const cols1 = [
{ field: "grouping", title: "组别" },
{ field: "player_id", title: "编号" },
{ field: "player_name", title: "姓名" },
{ field: "channel", title: "频道" },
{ field: "led_color", title: "LED颜色" },
{ field: "first_fly_time", title: "第1圈" },
{ field: "second_fly_time", title: "第2圈" },
{ field: "third_fly_time", title: "第3圈" },
{ field: "operate", title: "操作", toolbar: "#operate", width: 140 },
]
const cols2 = [
{ field: "no", title: "排名" },
{ field: "grouping", title: "组别" },
{ field: "player_id", title: "编号" },
{ field: "player_name", title: "姓名" },
{ field: "channel", title: "频道" },
{ field: "led_color", title: "LED颜色" },
{ field: "fly_num", title: "完成圈数" },
{ field: "avg", title: "最优3圈平均时间" },
]
const cols3 = [
{ field: "no", title: "排名" },
{ field: "grouping", title: "组别" },
{ field: "player_id", title: "编号" },
{ field: "player_name", title: "姓名" },
{ field: "channel", title: "频道" },
{ field: "led_color", title: "LED颜色" },
{ field: "fly_num", title: "完成圈数" },
{ field: "sum", title: "总时间" },
]
const cols4 = [
{ field: "grouping", title: "组别" },
{ field: "player_id", title: "编号" },
{ field: "player_name", title: "姓名" },
{ field: "channel", title: "频道" },
{ field: "led_color", title: "LED颜色" },
{ field: "fly_num", title: "圈数" },
{ field: "times", title: "时间" },
{ field: "operate", title: "操作", toolbar: "#operate", width: 140 },
]
const cols5 = [
{ field: "grouping", title: "组别" },
{ field: "player_id", title: "编号" },
{ field: "player_name", title: "姓名" },
{ field: "channel", title: "频道" },
{ field: "led_color", title: "LED颜色" },
{ field: "fly_num", title: "圈数" },
{ field: "times", title: "时间" },
// { field: "group_sort", title: "组内排名" },
{ field: "operate", title: "操作", toolbar: "#operate", width: 140 },
]
const cols6 = [
{ field: "grouping", title: "组别" },
{ field: "player_id", title: "编号" },
{ field: "player_name", title: "姓名" },
{ field: "channel", title: "频道" },
{ field: "led_color", title: "LED颜色" },
{ field: "fly_num", title: "圈数" },
{ field: "times", title: "时间" },
{ field: "custom_sorting", title: "自定义排名" },
{ field: "operate", title: "操作", toolbar: "#operate", width: 140 },
]
const cols7 = [
{ field: "grouping", title: "组别" },
{ field: "player_id", title: "编号" },
{ field: "player_name", title: "姓名" },
{ field: "channel", title: "频道" },
{ field: "led_color", title: "LED颜色" },
{ field: "fly_num", title: "圈数" },
{ field: "times", title: "时间" },
// { field: "integral", title: "积分" },
{ field: "operate", title: "操作", toolbar: "#operate", width: 140 },
]
const cols8 = [
{ field: "grouping", title: "组别" },
{ field: "player_id", title: "编号" },
{ field: "player_name", title: "姓名" },
{ field: "channel", title: "频道" },
{ field: "led_color", title: "LED颜色" },
{ field: "sum_integral", title: "积分" },
]
layui.use(() => {
const upload = layui.upload, layer = layui.layer, table = layui.table, form = layui.form, util = layui.util, element = layui.element, laypage = layui.laypage, laydate = layui.laydate
// 分组导出
$('#groupExport').attr('href', `https://www.fpvone.cn/inback.php/cms/Leaguexport/export_wash?match_id=${match_id}&course=103&other_round=${select_round}`)
$('#groupExport2').attr('href', `https://www.fpvone.cn/inback.php/cms/Leaguexport/export_wash?match_id=${match_id}&course=104&other_round=${select_round}`)
// 生成分组
const createGroup = () => {
$('#createGroup').click(async() => {
const res = await $.get('https://www.fpvone.cn/inback.php/cms/Leaguexport/click_group', {
match_id: match_id,
course: 103,
other_round: select_round,
})
resetData(3)
})
$('#createGroup2').click(async() => {
if(select_round == 1) {
// 公开组
await $.get('https://www.fpvone.cn/inback.php/cms/Leagueround/final_group', {
match_id: match_id,
})
resetData(4)
} else if(select_round == 2) {
// 青少年组
let selectedAge = layer.open({
type: 1,
shade: false,
title: "选择年龄",
area: ["400px", "200px"],
zIndex: 100,
content: `
<div class="qsn_content">
<div class="layui-inline">
<label class="layui-form-label" style="width: 120px;">出生日期选择</label>
<div class="layui-input-inline">
<input type="text" class="layui-input" id="qsn_date" placeholder="yyyy-MM-dd" autocomplete="off">
</div>
</div>
<div style="text-align: center; margin-top: 20px">
<a class="layui-btn layui-bg-blue" id="export_byAges">生成分组</a>
</div>
</div>
`,
success: function() {
let date = '1970-01-01'
laydate.render({
elem: '#qsn_date',
done: function(value, date, endDate) {
date = value
}
})
$('#export_byAges').click(() => {
$.get(`https://www.fpvone.cn/inback.php/cms/leaguemaster/final_young_group?match_id=${match_id}&birthday=${date}`).then(res => {
if(res.code != 200) {
layer.msg(res.msg)
} else {
layer.close(selectedAge)
resetData(4)
}
})
})
},
end: function() {
}
})
} else {
// 女子组
await $.get('https://www.fpvone.cn/inback.php/cms/Leaguemaster/final_young_group', {
match_id: match_id,
women: 1,
})
resetData(4)
}
})
}
createGroup()
// 根据索引获取赛程编号
const getCourseByIndex = (index) => {
let coures = 101
switch(index) {
case 1: coures = 101; break;
case 2: coures = 102; break;
case 3: coures = 103; break;
case 4: coures = 104; break;
default: coures = 101;
}
return coures
}
// 选择赛程
let timer3 = null
const tabFilter = () => {
element.on('tab(filter)', (data) => {
tabIndex = data.index - 0 + 1
course = getCourseByIndex(tabIndex)
if(document.getElementById('round' + tabIndex)) {
document.getElementById('round' + tabIndex).value = 1
select_round = 1
}
form.render()
if(tabIndex == 4) {
select_round = 1
}
if(tableStatus[tabIndex - 1]) {
resetData(tabIndex)
} else {
setTable(tabIndex)
tableStatus[tabIndex - 1] = true
}
// 如果是淘汰赛就定时更新数据
// if(course == 103) {
// clearInterval(timer3)
// timer3 = setInterval(() => {
// resetData(3, false)
// }, 5000)
// } else {
// clearInterval(timer3)
// }
if(course == 104) {
$('.extra input').attr('checked', is_extra)
form.render()
if(match_id == 606) {
$('.final-selected').hide()
}
}
})
}
tabFilter()
/**
* 上传分组表单
* @param {Number} index 索引
* @returns {Null}
*/
const uploadfile = (index) => {
upload.render({
elem: `#upload${index}`,
url: 'https://www.fpvone.cn/inback.php/cms/ranking/addPlayerList',
accept: 'file',
data: index == 3 ? {course: getCourseByIndex(index), match_id: match_id, other_round: select_round} : {course: getCourseByIndex(index), match_id: match_id},
done: async(res) => {
// layer.msg('上传成功')
if(res.code == 1) {
layer.msg('上传成功')
if(index == 1) {
all_round_first1 = true
}
await resetData(index)
} else {
if(res.data) {
layer.msg(`上传失败, 失败原因表格第${res.data}`)
} else {
layer.msg('上传失败')
}
}
}
})
}
uploadfile(1)
uploadfile(2)
uploadfile(3)
const uploadSignal = () => {
upload.render({
elem: `#upload-signal`,
url: 'https://www.fpvone.cn/inback.php/cms/ranking/singleRoundMasterExport',
accept: 'file',
data: { course: 101, match_id: match_id, other_round: select_round },
done: async(res) => {
console.log(res)
}
})
}
uploadSignal()
// 排序
let sort1 = false, sort2 = false, sort3 = false, sort4 = false
let is_extra = false
// form.on('switch(switch1)', function(data) {
// sort1 = this.checked
// })
form.on('switch(switch2)', function(data) {
open_extra(this.checked)
})
const open_extra = async(open) => {
let is_open = 1
if(open) {
is_open = 1
} else {
is_open = 0
}
const res = await $.get(`https://www.fpvone.cn/inback.php/cms/leaguesort/is_extra?match_id=${match_id}&course=104&is_open=${is_open}`)
if(res.code == 0) {
if(is_open == 1) {
is_extra = false
$('#extra-popup').hide()
} else {
is_extra = true
$('#extra-popup').show()
}
$('.extra input').prop('checked', is_extra)
form.render()
layer.msg('失败')
} else {
// 开启加赛
resetData(4)
}
}
const setCols = (index) => {
let cols = []
if(index == 1) {
if(select_round == 'best') cols = cols2
else cols = cols1
} else if(index == 2) {
if(select_round == 'bestsen') cols = cols3
else cols = cols1
} else if(index == 3) {
cols = cols5
} else if(index == 4) {
if(match_id == 606) {
if(is_extra) {
cols = cols6
} else {
cols = cols4
}
} else {
if(select_round == '总积分') {
cols = cols8
} else {
cols = cols7
}
}
}
return cols
}
/**
* 重载数据
* @param {Number} index 列表索引
* @param {Boolean} flag 判断表格是否仅加载数据
* @returns {Null}
*/
const resetData = async(index, flag=true) => {
const data = await getData(index)
let cols = cols1
// 设置表头
// if(index == 1) {
// if(select_round == 'best') cols = cols2
// else cols = cols1
// } else if(index == 2) {
// if(select_round == 'bestsen') cols = cols3
// else cols = cols1
// } else if(index == 3) {
// cols = cols5
// } else if(index == 4) {
// if(is_extra) {
// cols = cols6
// } else {
// cols = cols4
// }
// }
cols = setCols(index)
// 重载数据
if(flag) {
if(index == 1 || index == 2) {
setPage(index, data, cols)
} else {
table.reload(index, { data: data, cols: [cols] })
}
} else {
if(index == 1 || index == 2) {
table.reloadData(index, { data: data.slice((currentPage-1)*limitPage, currentPage*limitPage), cols: [cols] })
} else {
table.reloadData(index, { data: data, cols: [cols] })
}
}
}
/**
* 设置下拉框轮次
* @param {Number} index 列表索引
* @param {Number} all_round 轮次数量
* @returns {Null}
*/
const createSelected = (index, all_round) => {
let h = ''
for(let i=0; i<all_round; i++) {
h += `<option value="${i+1}" ${i==0?'selected':''}>${i+1}</option>`
}
h += `<option value="best">最优成绩</option>`
$(`#round${index}`).html(h)
form.render()
}
/**
* 获取列表数据
* @param {Number} index 列表索引
* @returns {Array[Object]} 列表数组
*/
let cur_arr = []
let pilot_list = []
const getData = async(index) => {
let d = []
// 处理最优成绩的数据
const setBest = (data) => {
let arr = []
data.map((item, index) => {
arr.push({
avg: item.avg,
fly_num: item.fly_num,
no: index + 1,
...item.info,
})
})
return arr
}
// 获取数据
let loading = layer.load(1, {shade: false})
try {
const res = await $.post('https://www.fpvone.cn/inback.php/cms/league/getrank_course', { match_id: match_id, course: getCourseByIndex(tabIndex), sorting: sort1, other_round: select_round })
layer.close(loading)
if(res.is_extra == 0) {
is_extra = false
} else {
is_extra = true
}
if(res.is_extra == undefined) {
is_extra = false
}
if(index == 4) {
$('.extra input').attr('checked', is_extra)
form.render()
if(is_extra) {
$('#extra-popup').show()
} else {
$('#extra-popup').hide()
}
}
if(select_round == 'best') {
d = setBest(res.data)
} else if(select_round == 'bestsen') {
let arr = []
res.data.map((item, index) => {
arr.push({
sum: item.sum,
fly_num: item.fly_num,
no: index + 1,
...item.info,
})
})
d = arr
} else {
d = res.data
cur_arr = res.data
}
// 判断生成选择轮次的下拉选择
if(index == 1 && all_round_first1) {
createSelected(index, res.round)
all_round_first1 = false
} else if(index == 2 && all_round_first2) {
createSelected(index, 2)
all_round_first2 = false
}
// 判断展示分组导入的按钮
// if(d.length > 0) $(`#upload${index}`).hide()
// else $(`#upload${index}`).show()
pilot_list = d
return d
} catch(err) {
layer.msg('服务器错误')
layer.close(loading)
return []
}
}
/**
* 提交设置的数据
* @param {Number} index 列表索引
* @param {Object} 修改对象
* @returns {Null}
*/
const setRanking = async(index, data) => {
console.log(index, data)
let url = '', res = null
if(data.course == 103) {
url = 'https://jlbdata.fpvone.cn/api/matchRanking/update'
res = await $.ajax({
url: url,
contentType: 'application/json',
type: 'POST',
data: JSON.stringify(data),
})
} else {
url = 'https://www.fpvone.cn/inback.php/cms/league/setPlayerRanking'
res = await $.post({
url: url,
data: data,
})
}
if (!(res.code == 1 || res.code == 200)) {
return layer.msg(res.msg)
}
layer.close(update_windows)
update_windows = null
resetData(index, false)
return layer.msg(res.msg)
}
/**
* 设置表格的数据
* @param {Number} index 列表索引
* @returns {Null}
*/
const setTable = async(index) => {
// 获取数据
let data = await getData(index)
cols = setCols(index)
table.render({
elem: '#table' + index,
cols: [cols],
data: data,
id: index,
lineStyle: 'height: 50px;',
done: function(res, curr, count, origin) {
$('.layui-table').css('width', '100%')
$("th[data-field='delete']").css('border-right', 'none')
}
})
if(index == 1 || index == 2) {
setPage(index, data, index == 4 ? cols4 : index == 3 ? cols4 : cols1)
}
}
const setPage = (index, data, cols) => {
laypage.render({
elem: 'page' + index,
count: data.length,
limit: limitPage,
jump: function(obj) {
currentPage = obj.curr
table.reload(index, { data: data.slice((obj.curr-1)*obj.limit, obj.curr*obj.limit), cols: [cols] })
}
})
}
setTable(1)
// setTable(2)
// setTable(3)
// setTable(4)
// 下拉选择轮次
$('.downloadX1').attr('href', `javascript:void(0)`)
$('.downloadX1').click(function() {
if(!showExportByAge) {
exportByAge(101)
}
})
$('.downloadX3').attr('href', `javascript:void(0)`)
$('.downloadX3').click(function() {
if(!showExportByAge) {
exportByAge(103)
}
})
form.on('select(select_filter_round_1)', (data) => {
select_round = data.value
// if(select_round == 'best') {
// $('.downloadX1').attr('href', `javascript:void(0)`)
// $('.downloadX1').click(function() {
// if(!showExportByAge && select_round == 'best') {
// exportByAge()
// }
// })
// } else {
// $('.downloadX1').attr('href', `https://www.fpvone.cn/inback.php/cms/league/export?match_id=${match_id}&course=101&sorting=false&other_round=${select_round}`)
// }
// $('.downloadX1').attr('href', `javascript:void(0)`)
// $('.downloadX1').click(function() {
// if(!showExportByAge) {
// exportByAge()
// }
// })
resetData(1)
// if(select_round == 'best') {
// $('.sort').show()
// } else {
// $('.sort').hide()
// }
})
form.on('select(select_filter_round_2)', (data) => {
select_round = data.value
if(select_round == 'best') {
select_round = 'bestsen'
}
resetData(2)
})
// 淘汰赛
form.on('select(select_filter_round_3)', (data) => {
select_round = data.value
$('#groupExport').attr('href', `https://www.fpvone.cn/inback.php/cms/Leaguexport/export_wash?match_id=${match_id}&course=103&other_round=${select_round}`)
// $('.downloadX3').attr('href', `https://www.fpvone.cn/inback.php/cms/league/export?match_id=${match_id}&course=103&sorting=false&other_round=${select_round}`)
resetData(3)
if(select_round == 3) {
$('#createGroup').hide()
} else {
$('#createGroup').show()
}
})
// 决赛
form.on('select(select_filter_round_4)', (data) => {
select_round = data.value
$('#groupExport2').attr('href', `https://www.fpvone.cn/inback.php/cms/Leaguexport/export_wash?match_id=${match_id}&course=104&other_round=${select_round}`)
resetData(4)
})
var showExportByAge = false
const exportByAge = (course) => {
layer.open({
type: 1,
shade: false,
title: "成绩导出",
area: ["400px", "200px"],
zIndex: 100,
content: `
<div class="qsn_content">
${course == 'all' ? `<div style="margin-bottom: 10px;">成绩有变更时请重新生成积分再导出总排名</div>` : ``}
<div class="layui-inline">
<label class="layui-form-label" style="width: 120px;">出生日期选择</label>
<div class="layui-input-inline">
<input type="text" class="layui-input" id="qsn_date" placeholder="yyyy-MM-dd" autocomplete="off">
</div>
</div>
<div style="text-align: center; margin-top: 20px">
<a class="layui-btn layui-bg-blue" id="export_byAge">导出成绩</a>
</div>
</div>
`,
success: function() {
showExportByAge = true
$('#export_byAge').attr('href', `https://www.fpvone.cn/inback.php/cms/league/export?match_id=${match_id}&course=${course}&sorting=false&other_round=${select_round}&birthday=1970-01-01`)
laydate.render({
elem: '#qsn_date',
done: function(value, date, endDate) {
$('#export_byAge').attr('href', `https://www.fpvone.cn/inback.php/cms/league/export?match_id=${match_id}&course=${course}&sorting=false&other_round=${select_round}&birthday=${value}`)
}
})
},
end: function() {
showExportByAge = false
}
})
}
// 添加成绩
const update = (d, type) => {
update_windows = layer.open({
type: 1,
shade: false,
title: '修改数据',
area: ['620px'],
zIndex: 100,
content: `
<div class="layui-form" lay-filter="filter-test-layer" style="margin: 16px 30px 30px 20px;">
<form class="layui-form">
<div class="layui-form-item">
<label class="layui-form-label" style="width: 80px">组别</label>
<div class="layui-input-block" style="margin-left: 100px">
<input id="form_group" type="text" name="group" class="layui-input" autocomplete="off" disabled>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label" style="width: 80px">编号</label>
<div class="layui-input-block" style="margin-left: 100px">
<input id="form_playerId" type="text" name="player_id" class="layui-input" autocomplete="off" disabled>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label" style="width: 80px">姓名</label>
<div class="layui-input-block" style="margin-left: 100px">
<input id="form_name" type="text" name="player_name" class="layui-input" autocomplete="off" disabled>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label" style="width: 80px">频道</label>
<div class="layui-input-block" style="margin-left: 100px">
<input id="form_channel" type="text" name="channel" class="layui-input" autocomplete="off"}>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label" style="width: 80px">led颜色</label>
<div class="layui-input-block" style="margin-left: 100px">
<input id="form_led" type="text" name="led_color" class="layui-input" autocomplete="off"}>
</div>
</div>
${
(type == 1 || type == 2) ?
`<div class="layui-form-item">
<label class="layui-form-label" style="width: 80px">第1圈</label>
<div class="layui-input-block" style="margin-left: 100px">
<input id="form_flyNum1" type="text" name="first_fly_time" class="layui-input" autocomplete="off" placeholder="若未完成该圈则输入DNF。格式0:00.000">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label" style="width: 80px">第2圈</label>
<div class="layui-input-block" style="margin-left: 100px">
<input id="form_flyNum2" type="text" name="second_fly_time" class="layui-input" autocomplete="off" placeholder="若未完成该圈则输入DNF。格式0:00.000">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label" style="width: 80px">第3圈</label>
<div class="layui-input-block" style="margin-left: 100px">
<input id="form_flyNum3" type="text" name="third_fly_time" class="layui-input" autocomplete="off" placeholder="若未完成该圈则输入DNF。格式0:00.000">
</div>
</div>`
:
`<div class="layui-form-item">
<label class="layui-form-label" style="width: 80px">圈数</label>
<div class="layui-input-block" style="margin-left: 100px">
<input id="form_flyNum" type="text" name="fly_num" class="layui-input" autocomplete="off" placeholder="若未完成则输入DNF。">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label" style="width: 80px">时间</label>
<div class="layui-input-block" style="margin-left: 100px">
<input id="form_times" type="text" name="times" class="layui-input" autocomplete="off" placeholder="若未完成则输入DNF。格式0:00.000">
</div>
</div>`
}
${
type != 4 ? '' : match_id == 606 ? '' :
`
<div class="layui-form-item">
<label class="layui-form-label" style="width: 80px">积分</label>
<div class="layui-input-block" style="margin-left: 100px">
<input id="form_integral" type="text" name="integral" class="layui-input" autocomplete="off">
</div>
</div>
`
}
<div class="layui-form-item">
<div class="layui-input-block" style="margin-left: 220px; margin-top: 30px;">
<button style="width: 120px;" type="submit" class="layui-btn" lay-submit lay-filter="submit1">提交</button>
</div>
</div>
</form>
</div>
`,
success: () => {
// 设置资格赛和排位赛类型的数据
if(type == 1 || type == 2) {
$('#form_playerId').val(d.player_id)
$('#form_group').val(d.grouping)
$('#form_name').val(d.player_name)
$('#form_channel').val(d.channel)
$('#form_led').val(d.led_color)
$('#form_flyNum1').val(d.first_fly_time)
$('#form_flyNum2').val(d.second_fly_time)
$('#form_flyNum3').val(d.third_fly_time)
} else {
$('#form_playerId').val(d.player_id)
$('#form_group').val(d.grouping)
$('#form_name').val(d.player_name)
$('#form_channel').val(d.channel)
$('#form_led').val(d.led_color)
$('#form_flyNum').val(d.fly_num)
$('#form_times').val(d.times)
if(type == 4 && match_id != 606) {
$('#form_integral').val(d.integral)
}
}
// 提交表单数据
form.on("submit(submit1)", function (data) {
const field = data.field
if(type == 1 || type == 2) {
if(!check_cj(field.first_fly_time) || !check_cj(field.second_fly_time) || !check_cj(field.third_fly_time)) {
layer.msg('成绩格式有误!')
return false
}
field.match_id = d.match_id
field.course = d.course
field.other_round = select_round
field.id = d.id
setRanking(type, field)
} else {
if(!check_cj(field.times)) {
layer.msg('成绩格式有误!')
return false
}
field.match_id = d.match_id
field.course = d.course
field.other_round = select_round
field.id = d.id
setRanking(type, field)
}
return false
})
form.render()
},
end: () => {
update_windows = null
}
})
}
// 打印
const printHtml = (data) => {
const { course, other_round, grouping } = data
let coures_name = '', round_name = '', match_name = ''
switch(course) {
case '101': coures_name = '资格赛'; break;
case '103': coures_name = '淘汰赛'; break;
case '104': coures_name = '决赛'; break;
}
switch(other_round) {
case '1': round_name = '第一轮'; break;
case '2': round_name = '第二轮'; break;
case '3': round_name = '第三轮'; break;
case '4': round_name = '第四轮'; break;
case '5': round_name = '第五轮'; break;
case '6': round_name = '第六轮'; break;
case '7': round_name = '第七轮'; break;
case '8': round_name = '第八轮'; break;
case '9': round_name = '第九轮'; break;
case '10': round_name = '第十轮'; break;
case '11': round_name = '第十一轮'; break;
case '12': round_name = '第十二轮'; break;
case '13': round_name = '第十三轮'; break;
}
switch(match_id) {
case '606': match_name = '黄山站'; break;
case '804': match_name = '广州站'; break;
case '1008': match_name = '临汾站'; break;
case '1095': match_name = '柯桥站'; break;
case '1520': match_name = '苏州站'; break;
case '1756': match_name = '南京站'; break;
default: match_name = '测试';
}
if(course == '104' && match_id == 606) {
round_name = ''
}
let title = ``
if(course == '103') {
if(other_round == '1' || other_round == '2' || other_round == '6' || other_round == '9' || other_round == '12') {
title = `2024年中国无人机竞速联赛${match_name}${coures_name}${round_name}胜者组运动员签字表`
} else {
title = `2024年中国无人机竞速联赛${match_name}${coures_name}${round_name}败者组运动员签字表`
}
} else {
title = `2024年中国无人机竞速联赛${match_name}${coures_name}${round_name}运动员签字表`
}
let html = '', list = []
cur_arr.map(item => {
if(item.grouping == grouping) {
list.push(item)
}
})
list.map((item, index) => {
html += `
<tr>
${index == 0 ? `<td rowspan="${list.length}">${item.grouping}</td>` : ''}
<td>${item.player_id}</td>
<td>${item.player_name}</td>
<td>${item.name_short}</td>
<td>${index + 1}</td>
${coures_name == '资格赛' ?
`
<td>${item.first_fly_time == null ? '' : item.first_fly_time}</td>
<td>${item.second_fly_time == null ? '' : item.second_fly_time}</td>
<td>${item.third_fly_time == null ? '' : item.third_fly_time}</td>
` :
`
<td>${item.fly_num == null ? '' : item.fly_num}</td>
<td>${item.times == null ? '' : item.times}</td>
`
}
<td></td>
<td>${item.channel}</td>
<td>${item.led_color}</td>
</tr>
`
})
printAreaCount = 0
if(coures_name == '资格赛') {
$('.print-content .title').text(title)
$('.print-content tbody').html(html)
printArea($('.print-content'))
} else {
$('.print-content2 .title').text(title)
$('.print-content2 tbody').html(html)
printArea($('.print-content2'))
}
}
// 监听设置按钮事件
const setTableUpdate = (index) => {
table.on(`tool(table${index})`, (obj) => {
switch (obj.event) {
case 'update': {
if(update_windows == null) {
update(obj.data, index)
}
break
}
case 'print': {
printHtml(obj.data)
break
}
}
})
}
setTableUpdate(1)
setTableUpdate(2)
setTableUpdate(3)
setTableUpdate(4)
// 清空数据
$('.clearData').click(function() {
layer.confirm('是否清空数据?', {icon: 3}, () => {
clear_window = layer.open({
type: 1,
area: '350px',
shadeClose: true,
content: `
<div class="layui-form" lay-filter="filter-test-layer" style="margin: 16px;">
<div class="demo-login-container">
<div class="layui-form-item">
<div class="layui-input-wrap">
<div class="layui-input-prefix">
<i class="layui-icon layui-icon-password"></i>
</div>
<input type="password" name="password" value="" lay-verify="required" placeholder="密 码" lay-reqtext="请填写密码" autocomplete="off" class="layui-input" lay-affix="eye">
</div>
</div>
<div class="layui-form-item">
<button class="layui-btn layui-btn-fluid" lay-submit lay-filter="demo-check">确定</button>
</div>
</div>
</div>
`,
success: () => {
form.render()
form.on('submit(demo-check)', async(data) => {
const field = data.field
if(field.password != 'yanxiaomao1') {
layer.msg('密码错误')
} else {
const res = await $.post('https://www.fpvone.cn/inback.php/cms/ranking/clearRanking', {
course: getCourseByIndex(tabIndex),
match_id: match_id,
})
if (res.code != 1) {
return layer.msg('清空失败')
}
// layer.close(add_windows)
layer.close(clear_window)
// 重置表格数据
resetData(tabIndex)
return layer.msg('清空成功')
}
return false
})
}
})
})
})
/**
* 判断成绩格式
* @param {Number} cj 成绩
* @returns {Boolean} 格式是否正确
*/
const check_cj = (cj) => {
if(cj == 'DNF' || cj == '') {
return true
} else {
const pattern = /^(\d{1,2}):(\d|[0-5]\d)\.(\d{3})$/
return pattern.test(cj)
}
}
// 总排名导出
$('.exportRanking').click(function() {
exportByAge('all')
})
// 刷新成绩
$('.flush_btn').click(function() {
resetData(tabIndex, false)
})
const areNumbers1234 = (a, b, c, d) => {
const numbers = [a, b, c, d].sort((a, b) => a - b)
return numbers.join('') === '1234'
}
let extra_popup = null
$('#extra-popup').click(function() {
let html = ''
pilot_list.map((item, index) => {
html += `
<div class="layui-inline" style="margin-top: 10px;">
<label class="layui-form-label" style="width: 150px;">${item.player_name}${item.player_id}</label>
<div class="layui-input-inline">
<input type="text" value="${item.custom_sorting}" class="layui-input extra${index}" autocomplete="off">
</div>
</div>
`
})
extra_popup = layer.open({
type: 1,
shade: false,
title: "自定义排名",
area: ["450px", "360px"],
zIndex: 100,
content: `
<div class="qsn_content">
${html}
<div style="text-align: center; margin-top: 20px">
<a class="layui-btn layui-bg-blue" id="export_rank">提交</a>
</div>
</div>
`,
success: function() {
$('#export_rank').click(function() {
let num0 = $('.extra0').val(), num1 = $('.extra1').val(), num2 = $('.extra2').val(), num3 = $('.extra3').val()
if(num0.trim() == '' || num1.trim() == '' || num2.trim() == '' || num3.trim() == '') {
return layer.msg('请填写排名')
}
if(!areNumbers1234(num0, num1, num2, num3)) {
return layer.msg('请填写正确的排名')
}
let arr = [
{
player_id: pilot_list[0].player_id,
custom_sorting: num0,
},
{
player_id: pilot_list[1].player_id,
custom_sorting: num1,
},
{
player_id: pilot_list[2].player_id,
custom_sorting: num2,
},
{
player_id: pilot_list[3].player_id,
custom_sorting: num3,
}
]
$.post('https://www.fpvone.cn/inback.php/cms/leaguesort/custom_rank', {
match_id: match_id,
data: arr,
}).then(res => {
if(res.code == 1) {
layer.close(extra_popup)
resetData(4)
}
layer.msg(res.message)
})
})
}
})
})
function printArea (ele) {
var idPrefix = "printArea_";
removePrintArea(idPrefix + printAreaCount);
printAreaCount++;
var iframeId = idPrefix + printAreaCount;
var iframeStyle = 'position:absolute;width:0px;height:0px;left:-500px;top:-500px;';
iframe = document.createElement('IFRAME');
$(iframe).attr({
style: iframeStyle,
id: iframeId
});
document.body.appendChild(iframe);
var doc = iframe.contentWindow.document;
$(document).find("link").filter(function () {
return $(this).attr("rel").toLowerCase() == "stylesheet";
}).each(
function () {
doc.write('<link type="text/css" rel="stylesheet" href="' + $(this).attr("href") + '" >');
})
doc.write('<div class="' + $(ele).attr("class") + '">' + $(ele).html() + '</div>');
doc.close();
var frameWindow = iframe.contentWindow;
frameWindow.close();
frameWindow.focus();
setTimeout(() => {
frameWindow.print();
}, 500)
}
var removePrintArea = function (id) {
$("iframe#" + id).remove()
}
})
</script>
</body>
</html>