146 lines
8.1 KiB
Plaintext
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>
|