Files
sryang 577060bc78 chore: 首次簽入 Thinkyu ASP.NET 專案
- 加入 Visual Studio / ASP.NET .gitignore
- 排除建置輸出、IDE 設定、NuGet packages、大型 MSI 安裝檔
2026-09-10 09:42:37 +08:00

146 lines
8.1 KiB
Plaintext

<%@ Page Title="課程報表" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="ClassesReport.aspx.cs" Inherits="報到系統.Forms.ClassesReport" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
<link href="<%= ResolveUrlWithSysVer("~/Content/ClassesList.css") %>" rel="stylesheet" type="text/css" />
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
<div id="classesReportApp" class="page-container">
<div class="page-header">
<h1 class="page-title">課程報表</h1>
</div>
<!-- 搜尋面板 -->
<div class="search-panel">
<div class="search-row">
<div class="search-field-inline w-3">
<label class="search-label-inline">課程編號</label>
<input type="text" v-model="search.courseCode" class="search-input" placeholder="請輸入課程編號">
</div>
<div class="search-field-inline w-3">
<label class="search-label-inline">課程名稱</label>
<input type="text" v-model="search.courseName" class="search-input" placeholder="請輸入課程名稱">
</div>
<div class="search-field-inline w-3">
<label class="search-label-inline">課程日期(起)</label>
<input type="date" v-model="search.courseDate1" class="search-input">
</div>
<div class="search-field-inline w-3">
<label class="search-label-inline">課程日期(迄)</label>
<input type="date" v-model="search.courseDate2" class="search-input">
</div>
<div class="search-field-inline w-3">
<label class="search-label-inline">課程地點</label>
<input type="text" v-model="search.courseLocation" class="search-input" placeholder="請輸入課程地點">
</div>
<div class="search-field-inline w-3">
<label class="search-label-inline">結案</label>
<select v-model="search.closed" class="search-input">
<option value="">全部</option>
<option value="true">是</option>
<option value="false">否</option>
</select>
</div>
<div class="search-field-inline w-3">
<label class="search-label-inline">簽到退時間格式</label>
<select v-model="search.timeFormat" class="search-input">
<option value="datetime">年月日時分秒</option>
<option value="time">時分</option>
</select>
</div>
<div class="search-field-inline autocomplete-field w-6">
<label class="search-label-inline">計畫</label>
<div class="autocomplete-container" style="flex: 1;">
<input
type="text"
v-model="search.projectName"
@input="searchProjects"
@focus="showProjectSuggestions = true"
@blur="hideProjectSuggestions"
class="search-input autocomplete-input"
placeholder="請輸入計畫編號或名稱">
<div class="autocomplete-dropdown" v-if="showProjectSuggestions && projectSuggestions.length > 0">
<div
v-for="suggestion in projectSuggestions"
:key="suggestion.Value"
class="autocomplete-item"
@click="selectProject(suggestion)">
<span class="autocomplete-value">{{ suggestion.Value }}</span>
<span class="autocomplete-name">{{ suggestion.Name }}</span>
</div>
</div>
</div>
</div>
</div>
<div class="search-actions">
<button class="btn btn-secondary" @click="clearSearch">清除</button>
<button class="btn btn-primary" @click="performSearch">搜尋</button>
</div>
</div>
<!-- 搜尋結果 -->
<div class="result-panel">
<table class="result-table">
<thead>
<tr>
<th class="text-center">課程編號</th>
<th class="text-center">課程名稱</th>
<th class="text-center">課程日期</th>
<th class="text-center">開始時間</th>
<th class="text-center">結束時間</th>
<th class="text-center">講師</th>
<th class="text-center">課程地點</th>
<th class="text-center">計畫</th>
<%-- <th class="text-center">實到</th>
<th class="text-center">應到</th>
<th class="text-center">缺席</th>
<th class="text-center">異常</th>
<th class="text-center">現場</th>--%>
<th class="text-center">結案</th>
<th class="text-center">操作</th>
</tr>
</thead>
<tbody>
<tr v-if="loading">
<td colspan="10" class="empty-message">載入中...</td>
</tr>
<tr v-else-if="classes.length === 0">
<td colspan="10" class="empty-message">查無資料</td>
</tr>
<tr v-else v-for="item in classes" :key="item.ID">
<td class="text-center">{{ item.CourseCode }}</td>
<td class="text-center">{{ item.CourseName }}</td>
<td class="text-center">{{ $format.date(item.CourseDate) }}</td>
<td class="text-center">{{ item.StartTime }}</td>
<td class="text-center">{{ item.EndTime }}</td>
<td class="text-center">{{ item.Teacher }}</td>
<td class="text-center">{{ item.CourseLocation }}</td>
<td class="text-center">{{ item.ProjectValue }} {{ item.ProjectName }}</td>
<%-- <td class="text-center">{{ item.Actual }}</td>
<td class="text-center">{{ item.Expected }}</td>
<td class="text-center">{{ item.Absent }}</td>
<td class="text-center">{{ item.Exception }}</td>
<td class="text-center">{{ item.OnSite }}</td>--%>
<td class="text-center">{{ item.Closed ? '是' : '否' }}</td>
<td class="text-center">
<button class="btn btn-primary btn-sm" @click="exportReport(item.ID)" :disabled="exporting">
<span v-if="exporting && exportingId === item.ID">匯出中...</span>
<span v-else>學員簽到表</span>
</button>
</td>
</tr>
</tbody>
</table>
<!-- 分頁 -->
<div class="pagination" v-if="totalPages > 1">
<button class="btn btn-secondary btn-sm" @click="previousPage" :disabled="currentPage === 1">上一頁</button>
<span class="pagination-info">第 {{ currentPage }} / {{ totalPages }} 頁,共 {{ totalCount }} 筆</span>
<button class="btn btn-secondary btn-sm" @click="nextPage" :disabled="currentPage === totalPages">下一頁</button>
</div>
</div>
</div>
<script src="<%= ResolveUrlWithSysVer("~/Scripts/ClassesReport.js") %>"></script>
</asp:Content>