From ebad44be714b24fe3ed18eb2c7f007e0474ef9d0 Mon Sep 17 00:00:00 2001 From: HUANGBANGLIN Date: Mon, 15 Sep 2025 14:16:12 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8C=82=E5=8D=95=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- web/App_Code/api/ShuWenController.cs | 58 ++++++------ web/App_Code/api/regionController.cs | 3 +- web/App_Code/guadanGuestQueryController.cs | 40 ++++++++- web/admin/guadan/guest/index.aspx | 100 ++++++++++++++------- web/admin/shuwen/shuwen.aspx | 2 +- 5 files changed, 142 insertions(+), 61 deletions(-) diff --git a/web/App_Code/api/ShuWenController.cs b/web/App_Code/api/ShuWenController.cs index e82b2dd..3a36897 100644 --- a/web/App_Code/api/ShuWenController.cs +++ b/web/App_Code/api/ShuWenController.cs @@ -222,34 +222,42 @@ public class ShuWenController : ApiController [Route("api/shuwen/download")] public HttpResponseMessage DownloadShuWenWord(int? activitynum) { - var data = _db.ShuWen.Where(a => a.ActivityNum == activitynum).FirstOrDefault(); - if (data == null) + try { - //return; - } - string json = data.ShuWenList; - string ActivityName = _db.activities.Where(a => a.num == data.ActivityNum).FirstOrDefault().subject; - if (json == null) - { - //return; - } - string fileName = $"疏文名單_{DateTime.Now:yyyyMMddHHmmss}.docx"; - - var stream = new MemoryStream(); - GenerateShuWenWord_OpenXml(json, stream, ActivityName); - stream.Position = 0; - var response = new HttpResponseMessage(HttpStatusCode.OK) - { - Content = new StreamContent(stream) - }; - response.Content.Headers.ContentType = - new System.Net.Http.Headers.MediaTypeHeaderValue("application/vnd.openxmlformats-officedocument.wordprocessingml.document"); - response.Content.Headers.ContentDisposition = - new System.Net.Http.Headers.ContentDispositionHeaderValue("attachment") + var data = _db.ShuWen.Where(a => a.ActivityNum == activitynum).FirstOrDefault(); + if (data == null) { - FileName = fileName + return Request.CreateErrorResponse(HttpStatusCode.BadRequest, "活動編號不能為空"); + } + string json = data.ShuWenList; + string ActivityName = _db.activities.Where(a => a.num == data.ActivityNum).FirstOrDefault().subject; + if (json == null) + { + return Request.CreateErrorResponse(HttpStatusCode.BadRequest, "疏文列表为空,无法生成 Word"); + } + string fileName = $"疏文名單_{DateTime.Now:yyyyMMddHHmmss}.docx"; + + var stream = new MemoryStream(); + GenerateShuWenWord_OpenXml(json, stream, ActivityName); + stream.Position = 0; + var response = new HttpResponseMessage(HttpStatusCode.OK) + { + Content = new StreamContent(stream) }; - return response; + response.Content.Headers.ContentType = + new System.Net.Http.Headers.MediaTypeHeaderValue("application/vnd.openxmlformats-officedocument.wordprocessingml.document"); + response.Content.Headers.ContentDisposition = + new System.Net.Http.Headers.ContentDispositionHeaderValue("attachment") + { + FileName = fileName + }; + return response; + } + catch (Exception ex) + { + return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, ex.Message); + } + } public void GenerateShuWenWord_OpenXml(string json, Stream outputStream, string ActivityName ="") diff --git a/web/App_Code/api/regionController.cs b/web/App_Code/api/regionController.cs index f1783b1..5adf1c0 100644 --- a/web/App_Code/api/regionController.cs +++ b/web/App_Code/api/regionController.cs @@ -105,8 +105,9 @@ public class regionController : ApiController .Where(s => s.TargetUuid == bed.Uuid && s.IsDeleted == false && (s.ScheduleDate == null - || (s.ScheduleDate >= startDate && s.ScheduleDate <= endDate))) + || (s.ScheduleDate >= startDate))) .Where(s => s.GuaDanOrderGuest.StatusCode != "403" && s.GuaDanOrderGuest.StatusCode != "404") + .OrderByDescending(a => a.ScheduleDate) .Select(s => new { s.Uuid, diff --git a/web/App_Code/guadanGuestQueryController.cs b/web/App_Code/guadanGuestQueryController.cs index 7a3c5ae..58acec1 100644 --- a/web/App_Code/guadanGuestQueryController.cs +++ b/web/App_Code/guadanGuestQueryController.cs @@ -29,8 +29,33 @@ public class guadanGuestQueryController: ApiController { query = query.Where(guest => guest.followers.u_name.Contains(search.SearchName)); } - var data = await query.ToListAsync(); - var data1 = data.Select(a => new + if(search.searchCheckInDate != null) + { + query = query.Where(guest => guest.CheckInAt == search.searchCheckInDate); + } + if(search.searchCheckInDateStart != null) + { + query = query.Where(guest => guest.CheckInAt >= search.searchCheckInDateStart); + } + if (search.searchCheckInDateEnd != null) + { + query = query.Where(guest => guest.CheckInAt <= search.searchCheckInDateEnd); + } + if (search.searchCheckOutDateStart != null) + { + query = query.Where(guest => guest.CheckOutAt >= search.searchCheckOutDateStart); + } + if (search.searchCheckOutDateEnd != null) + { + query = query.Where(guest => guest.CheckOutAt <= search.searchCheckOutDateEnd); + } + var totalCount = await query.CountAsync(); + var pagedData = await query + .OrderByDescending(a => a.CheckInAt) // 可根据需要排序 + .Skip((search.Page - 1) * search.PageSize) + .Take(search.PageSize) + .ToListAsync(); + var data1 = pagedData.Select(a => new { name = a.followers != null ? a.followers.u_name : null, checkindate = a.CheckInAt, @@ -41,9 +66,8 @@ public class guadanGuestQueryController: ApiController return Ok(new { items = data1, - total = data1.Count(), + total = totalCount, }); - } public string GetRoomAndBedString(RegionRoomBed bed) { @@ -66,5 +90,13 @@ public class guadanGuestQueryController: ApiController public class SearchGuestModel { public string SearchName = null; + public int Page = 1; + public int PageSize = 10; + public DateTime? searchCheckInDateStart = null;//入住日期的开始 + public DateTime? searchCheckInDateEnd = null;//入住日期的结束 + public DateTime? searchCheckOutDateStart = null;//退房日期的开始 + public DateTime? searchCheckOutDateEnd = null;//退房日期的结束 + public DateTime? searchCheckInDate = null; + public DateTime? searchCheckOutDate = null; } } \ No newline at end of file diff --git a/web/admin/guadan/guest/index.aspx b/web/admin/guadan/guest/index.aspx index cbb5410..cdf72b6 100644 --- a/web/admin/guadan/guest/index.aspx +++ b/web/admin/guadan/guest/index.aspx @@ -4,24 +4,40 @@ +
+ + +
+
+ + - + +
+
+ + - + +
+ +
+ + +
+
+
{{item.checkoutdate|timeString('YYYY-MM-DD')}} + @@ -67,7 +86,7 @@ :max="pageCount" @input="options.page = parseInt($event, 10)" > - +
@@ -123,23 +142,29 @@ button:hover { loading: false, search: { searchName: null, - + searchCheckInDateStart: null,//入住日期开始 + searchCheckInDateEnd: null,//入住日期的结束 + searchCheckOutDateStart: null,//退房日期的开始 + searchCheckOutDateEnd: null,//退房日期的结束 + searchCheckInDate: null, + searchCheckOutDate: null, + }, options: { - page: 1, // 当前页 - itemsPerPage: 1, // 每页条数 + page: 1, // 當前頁 + itemsPerPage: 10, // 每頁條數 sortBy: [], sortDesc: [] }, headers: [ { text: '姓名', value: 'name' }, - { text: '挂单单号', value: 'guadanorderno'}, + { text: '掛單單號', value: 'guadanorderno' }, { text: '入住日期', value: 'checkindate' }, - { text: '退房日期', value: 'checkoutdate'}, - { text: '房间号', value: 'roomName' }, + { text: '退房日期', value: 'checkoutdate' }, + { text: '房間號', value: 'roomName' }, ], - guests: [], // 表格数据 + guests: [], // 表格數據 total: 0, } }, @@ -157,9 +182,19 @@ button:hover { }, clearSearch() { this.search.searchName = null; + this.search.searchCheckInDate = null; + this.search.searchCheckOutDate = null; + this.search.searchCheckInDateStart = null; + this.search.searchCheckInDateEnd = null; + this.search.searchCheckOutDateStart = null; + this.search.searchCheckOutDateEnd = null; this.resetTableOptions(); }, fetchGuests() { + if (this.search.searchName && this.search.searchName.includes(' ')) { + alert('搜索內容不能包含空格'); + return; // 阻止繼續執行 + } if (this.loading) return; this.loading = true; axios.post('/api/guadan/guest/query/list', @@ -167,19 +202,25 @@ button:hover { page: this.options.page, pageSize: this.options.itemsPerPage, searchName: this.search.searchName, - date: this.search.date + searchCheckInDate: this.search.searchCheckInDate, + searchCheckOutDate: this.search.searchCheckOutDate, + searchCheckInDateStart: this.search.searchCheckInDateStart, + searchCheckInDateEnd: this.search.searchCheckInDateEnd, + searchCheckOutDateStart: this.search.searchCheckOutDateStart, + searchCheckOutDateEnd: this.search.searchCheckOutDateEnd, + }).then(res => { - this.guests = res.data.items; // 数据 - this.total = res.data.total; // 总数 - }).finally(() => { - this.loading = false; - }); + this.guests = res.data.items; // 數據 + this.total = res.data.total; // 總數 + }).finally(() => { + this.loading = false; + }); } }, watch: { options: { handler() { - this.fetchGuests(); // 监听分页、排序变化,自动加载数据 + this.fetchGuests(); // 監聽分頁、排序變化,自動載入數據 }, deep: true, } @@ -194,5 +235,4 @@ button:hover { } }) -
- + \ No newline at end of file diff --git a/web/admin/shuwen/shuwen.aspx b/web/admin/shuwen/shuwen.aspx index b25a4ff..c141e46 100644 --- a/web/admin/shuwen/shuwen.aspx +++ b/web/admin/shuwen/shuwen.aspx @@ -18,7 +18,7 @@
{{updateShuWenLoading ? '更新中': '更新疏文'}} - 下載疏文Word檔 + ?activitynum='+currentActivityNum" class="btn btn-outline-primary btn-print">下載疏文Word檔