From 62a19bf40e747ab986645728d65a63b927eddb6e Mon Sep 17 00:00:00 2001
From: lsh <lsh@163.com>
Date: 星期三, 09 四月 2025 09:17:54 +0800
Subject: [PATCH] *

---
 src/main/webapp/views/taskWrkLog/taskWrkLog.html |  531 ++++++++++++++++++++++++++++++++++++++--------------------
 1 files changed, 348 insertions(+), 183 deletions(-)

diff --git a/src/main/webapp/views/taskWrkLog/taskWrkLog.html b/src/main/webapp/views/taskWrkLog/taskWrkLog.html
index f074191..800c2f9 100644
--- a/src/main/webapp/views/taskWrkLog/taskWrkLog.html
+++ b/src/main/webapp/views/taskWrkLog/taskWrkLog.html
@@ -1,193 +1,358 @@
 <!DOCTYPE html>
 <html lang="en">
 
-	<head>
-		<meta charset="UTF-8">
-		<title>浠诲姟绠$悊</title>
-		<link rel="stylesheet" href="../../static/wcs/css/element.css">
-		<script type="text/javascript" src="../../static/wcs/js/jquery/jquery-3.3.1.min.js"></script>
-		<script type="text/javascript" src="../../static/wms/layui/layui.js"></script>
-		<script type="text/javascript" src="../../static/wcs/js/common.js"></script>
-		<script type="text/javascript" src="../../static/wcs/js/vue.min.js"></script>
-		<script type="text/javascript" src="../../static/wcs/js/element.js"></script>
-	</head>
+<head>
+	<meta charset="UTF-8">
+	<title>浠诲姟绠$悊</title>
+	<link rel="stylesheet" href="../../static/wcs/css/element.css">
+	<script type="text/javascript" src="../../static/wcs/js/jquery/jquery-3.3.1.min.js"></script>
+	<script type="text/javascript" src="../../static/wms/layui/layui.js"></script>
+	<script type="text/javascript" src="../../static/wcs/js/common.js"></script>
+	<script type="text/javascript" src="../../static/wcs/js/vue.min.js"></script>
+	<script type="text/javascript" src="../../static/wcs/js/element.js"></script>
+	<script type="text/javascript" src="../../static/wcs/js/xlsx.full.min.js"></script>
+	<script type="text/javascript" src="../../static/wcs/js/FileSaver.min.js"></script>
+</head>
 
-	<body>
-		<div id="app" style="display: flex;justify-content: center;flex-wrap: wrap;">
-			<div style="width: 100%;">
-				<el-card class="box-card">
-					<el-form :inline="true" :model="tableSearchParam" class="demo-form-inline">
-						<el-form-item label="">
-							<el-input v-model="tableSearchParam.task_no" placeholder="浠诲姟鍙�"></el-input>
-						</el-form-item>
-						<el-form-item label="">
-							<el-input v-model="tableSearchParam.wrk_no" placeholder="宸ヤ綔鍙�"></el-input>
-						</el-form-item>
-						<el-form-item>
-							<el-button type="primary" @click="getTableData">鏌ヨ</el-button>
-							<el-button type="primary" @click="resetParam">閲嶇疆</el-button>
-						</el-form-item>
-					</el-form>
-					<el-table ref="singleTable" :data="tableData" style="width: 100%;">
-						<el-table-column label="鎿嶄綔" width="100">
-							<template slot-scope="scope">
-								<el-dropdown @command="(command)=>{handleCommand(command, scope.row)}">
-									<el-button icon="el-icon-more" size="mini" type="primary"></el-button>
-									<el-dropdown-menu slot="dropdown">
-										<el-dropdown-item command="showCommand">鏌ョ湅鎸囦护</el-dropdown-item>
-									</el-dropdown-menu>
-								</el-dropdown>
-							</template>
-						</el-table-column>
-						<el-table-column property="taskNo" label="浠诲姟鍙�">
-						</el-table-column>
-						<el-table-column property="status$" label="浠诲姟鐘舵��">
-						</el-table-column>
-						<el-table-column property="wrkNo" label="宸ヤ綔鍙�">
-						</el-table-column>
-						<el-table-column property="createTime$" label="鐢熸垚鏃堕棿">
-						</el-table-column>
-						<el-table-column property="modiTime$" label="鏇存柊鏃堕棿">
-						</el-table-column>
-						<el-table-column property="assignTime$" label="娲惧彂鏃堕棿">
-						</el-table-column>
-						<el-table-column property="executeTime$" label="鎵ц鏃堕棿">
-						</el-table-column>
-						<el-table-column property="completeTime$" label="瀹岀粨鏃堕棿">
-						</el-table-column>
-						<el-table-column property="cancelTime$" label="鍙栨秷鏃堕棿">
-						</el-table-column>
-						<el-table-column property="durationTime" label="鎸佺画鏃堕暱">
-						</el-table-column>
-						<el-table-column property="ioType$" label="浠诲姟绫诲瀷">
-						</el-table-column>
-						<el-table-column property="startPoint" label="璧风偣浣嶇疆">
-						</el-table-column>
-						<el-table-column property="targetPoint" label="缁堢偣浣嶇疆">
-						</el-table-column>
-						<el-table-column property="wrkSts$" label="宸ヤ綔鐘舵��">
-						</el-table-column>
-						<el-table-column property="crnNo" label="鍫嗗灈鏈哄彿">
-						</el-table-column>
-						<el-table-column property="barcode" label="鏉$爜">
-						</el-table-column>
-					</el-table>
+<body>
+<div id="app" style="display: flex;justify-content: center;flex-wrap: wrap;">
+	<div style="width: 100%;">
+		<el-card class="box-card">
+			<el-form :inline="true" :model="tableSearchParam" class="demo-form-inline">
+				<el-form-item label="">
+					<el-input v-model="tableSearchParam.task_no" placeholder="浠诲姟鍙�"></el-input>
+				</el-form-item>
+				<el-form-item label="">
+					<el-input v-model="tableSearchParam.wrk_no" placeholder="宸ヤ綔鍙�"></el-input>
+				</el-form-item>
+				<el-form-item>
+					<el-button type="primary" @click="getTableData">鏌ヨ</el-button>
+					<el-button type="primary" @click="resetParam">閲嶇疆</el-button>
+					<el-button type="primary" @click="exportTable">瀵煎嚭褰撳墠椤甸潰鏁版嵁</el-button>
+					<el-button type="primary" @click="exportTableAll">瀵煎嚭鎵�鏈�(鐐瑰嚮鍚庣瓑寰�2鍒嗛挓浠ヤ笂锛屼笉瑕侀噸澶嶇偣鍑�)</el-button>
+				</el-form-item>
+			</el-form>
+			<el-table ref="singleTable" :data="tableData" style="width: 100%;">
+				<el-table-column label="鎿嶄綔" width="100">
+					<template slot-scope="scope">
+						<el-dropdown @command="(command)=>{handleCommand(command, scope.row)}">
+							<el-button icon="el-icon-more" size="mini" type="primary"></el-button>
+							<el-dropdown-menu slot="dropdown">
+								<el-dropdown-item command="showCommand">鏌ョ湅鎸囦护</el-dropdown-item>
+							</el-dropdown-menu>
+						</el-dropdown>
+					</template>
+				</el-table-column>
+				<el-table-column property="taskNo" label="浠诲姟鍙�">
+				</el-table-column>
+				<el-table-column property="status$" label="浠诲姟鐘舵��">
+				</el-table-column>
+				<el-table-column property="wrkNo" label="宸ヤ綔鍙�">
+				</el-table-column>
+				<el-table-column property="createTime$" label="鐢熸垚鏃堕棿">
+				</el-table-column>
+				<el-table-column property="modiTime$" label="鏇存柊鏃堕棿">
+				</el-table-column>
+				<el-table-column property="assignTime$" label="娲惧彂鏃堕棿">
+				</el-table-column>
+				<el-table-column property="executeTime$" label="鎵ц鏃堕棿">
+				</el-table-column>
+				<el-table-column property="completeTime$" label="瀹岀粨鏃堕棿">
+				</el-table-column>
+				<el-table-column property="cancelTime$" label="鍙栨秷鏃堕棿">
+				</el-table-column>
+				<el-table-column property="durationTime" label="鎸佺画鏃堕暱">
+				</el-table-column>
+				<el-table-column property="ioType$" label="浠诲姟绫诲瀷">
+				</el-table-column>
+				<el-table-column property="startPoint" label="璧风偣浣嶇疆">
+				</el-table-column>
+				<el-table-column property="targetPoint" label="缁堢偣浣嶇疆">
+				</el-table-column>
+				<el-table-column property="wrkSts$" label="宸ヤ綔鐘舵��">
+				</el-table-column>
+				<el-table-column property="crnNo" label="鍫嗗灈鏈哄彿">
+				</el-table-column>
+				<el-table-column property="barcode" label="鏉$爜">
+				</el-table-column>
+				<el-table-column property="memo" label="澶囨敞">
+				</el-table-column>
+			</el-table>
 
-					<div style="margin-top: 10px;">
-						<el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange"
-							:current-page="currentPage" :page-sizes="pageSizes" :page-size="pageSize"
-							layout="total, sizes, prev, pager, next, jumper" :total="pageTotal">
-						</el-pagination>
-					</div>
-				</el-card>
+			<div style="margin-top: 10px;">
+				<el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange"
+							   :current-page="currentPage" :page-sizes="pageSizes" :page-size="pageSize"
+							   layout="total, sizes, prev, pager, next, jumper" :total="pageTotal">
+				</el-pagination>
 			</div>
-		</div>
-		<script>
-			var $layui = layui.config({
-				base: baseUrl + "/static/wms/layui/lay/modules/"
-			}).use(['layer', 'form'], function() {})
+		</el-card>
+	</div>
+</div>
+<script>
+	var $layui = layui.config({
+		base: baseUrl + "/static/wms/layui/lay/modules/"
+	}).use(['layer', 'form'], function() {})
 
-			var app = new Vue({
-				el: '#app',
-				data: {
-					tableData: [],
-					currentPage: 1,
-					pageSizes: [16, 30, 50, 100, 150, 200],
-					pageSize: 16,
-					pageTotal: 0,
-					tableSearchParam: {
-						task_no: null,
-						status: null,
-						wrk_no: null
-					}
-				},
-				created() {
-					this.init()
-				},
-				methods: {
-					init() {
-						let taskNo = getQueryVariable('taskNo')
-						let wrkNo = getQueryVariable('wrkNo')
-						if (taskNo != false) {
-							this.tableSearchParam.task_no = taskNo
-						}
-						if (wrkNo != false) {
-							this.tableSearchParam.wrk_no = wrkNo
-						}
-
-						this.getTableData()
-					},
-					getTableData() {
-						let that = this;
-						let data = this.tableSearchParam
-						data.curr = this.currentPage
-						data.limit = this.pageSize
-						$.ajax({
-							url: baseUrl + "/taskWrkLog/list/auth",
-							headers: {
-								'token': localStorage.getItem('token')
-							},
-							data: data,
-							dataType: 'json',
-							contentType: 'application/json;charset=UTF-8',
-							method: 'GET',
-							success: function(res) {
-								if (res.code == 200) {
-									that.tableData = res.data.records
-									that.pageTotal = res.data.total
-								} else if (res.code === 403) {
-									top.location.href = baseUrl + "/";
-								} else {
-									that.$message({
-										message: res.msg,
-										type: 'error'
-									});
-								}
-							}
-						});
-					},
-					handleSizeChange(val) {
-						console.log(`姣忛〉 ${val} 鏉);
-						this.pageSize = val
-						this.getTableData()
-					},
-					handleCurrentChange(val) {
-						console.log(`褰撳墠椤�: ${val}`);
-						this.currentPage = val
-						this.getTableData()
-					},
-					resetParam() {
-						this.tableSearchParam = {
-							task_no: null,
-							status: null,
-							wrk_no: null
-						}
-						this.getTableData()
-					},
-					handleCommand(command, row) {
-						switch (command) {
-							case "showCommand":
-								//鏌ョ湅鎸囦护
-								this.showCommand(row)
-								break;
-						}
-					},
-					showCommand(row) {
-						let wrkNo = row.wrkNo == null ? "" : row.wrkNo
-						//鏌ョ湅鎸囦护
-						$layui.layer.open({
-							type: 2,
-							title: '鎸囦护绠$悊',
-							maxmin: true,
-							area: [top.detailWidth, top.detailHeight],
-							shadeClose: true,
-							content: 'commandManageLog.html?taskNo=' + row.taskNo + "&wrkNo=" + wrkNo,
-							success: function(layero, index) {}
-						});
-					},
+	var app = new Vue({
+		el: '#app',
+		data: {
+			tableData: [],
+			tableDataAll: [],
+			currentPage: 1,
+			pageSizes: [16, 30, 50, 100, 150, 200],
+			pageSize: 16,
+			pageTotal: 0,
+			tableSearchParam: {
+				task_no: null,
+				status: null,
+				wrk_no: null
+			}
+		},
+		created() {
+			this.init()
+		},
+		methods: {
+			init() {
+				let taskNo = getQueryVariable('taskNo')
+				let wrkNo = getQueryVariable('wrkNo')
+				if (taskNo != false) {
+					this.tableSearchParam.task_no = taskNo
 				}
-			})
-		</script>
-	</body>
+				if (wrkNo != false) {
+					this.tableSearchParam.wrk_no = wrkNo
+				}
+
+				this.getTableData()
+			},
+			getTableData() {
+				let that = this;
+				let data = this.tableSearchParam
+				data.curr = this.currentPage
+				data.limit = this.pageSize
+				$.ajax({
+					url: baseUrl + "/taskWrkLog/list/auth",
+					headers: {
+						'token': localStorage.getItem('token')
+					},
+					data: data,
+					dataType: 'json',
+					contentType: 'application/json;charset=UTF-8',
+					method: 'GET',
+					success: function(res) {
+						if (res.code == 200) {
+							that.tableData = res.data.records
+							that.pageTotal = res.data.total
+						} else if (res.code === 403) {
+							top.location.href = baseUrl + "/";
+						} else {
+							that.$message({
+								message: res.msg,
+								type: 'error'
+							});
+						}
+					}
+				});
+			},
+			executeExportTable() {
+				// 1. 杩囨护鎿嶄綔鍒�
+				const exportData = this.tableData.map(item => {
+					const cloned = { ...item }
+					delete cloned.operation // 绉婚櫎鎿嶄綔鍒楀叧鑱斿瓧娈�
+					return cloned
+				})
+
+				// 2. 瀹屾暣瀛楁鏄犲皠
+				const headerMap = {
+					taskNo: '浠诲姟鍙�',
+					status: 'status',
+					wrkNo: '宸ヤ綔鍙�',
+					createTime: 'createTime',
+					ioType: 'ioType',
+					ioPri: '浼樺厛绾�',
+					startPoint: '璧风偣浣嶇疆',
+					targetPoint: '缁堢偣浣嶇疆',
+					modiUser: 'modiUser',
+					modiTime: 'modiTime',
+					memo: '澶囨敞',
+					barcode: '鏉$爜',
+					assignTime: 'assignTime',
+					executeTime: 'executeTime',
+					completeTime: 'completeTime',
+					cancelTime: 'cancelTime',
+					wrkSts: 'wrkSts',
+					crnNo: '鍫嗗灈鏈哄彿',
+					commandStep: 'step',
+					transferMark: 'mark',
+					wrkSts$: '宸ヤ綔鐘舵��',
+					ioType$: '浠诲姟绫诲瀷',
+					status$: '浠诲姟鐘舵��',
+					createTime$: '鐢熸垚鏃堕棿',
+					modiTime$: '鏇存柊鏃堕棿',
+					modiUser$: '鏇存柊浜哄憳',
+					completeTime$: '瀹岀粨鏃堕棿',
+					executeTime$: '鎵ц鏃堕棿',
+					assignTime$: '娲惧彂鏃堕棿',
+					cancelTime$: '鍙栨秷鏃堕棿'
+					// taskNo: '浠诲姟鍙�',
+					// status$: '浠诲姟鐘舵��',
+					// wrkNo: '宸ヤ綔鍙�',
+					// createTime$: '鐢熸垚鏃堕棿',
+					// modiTime$: '鏇存柊鏃堕棿',
+					// assignTime$: '娲惧彂鏃堕棿',
+					// executeTime$: '鎵ц鏃堕棿',
+					// completeTime$: '瀹岀粨鏃堕棿',
+					// cancelTime$: '鍙栨秷鏃堕棿',
+					// durationTime: '鎸佺画鏃堕暱',
+					// ioType$: '浠诲姟绫诲瀷',
+					// startPoint: '璧风偣浣嶇疆',
+					// targetPoint: '缁堢偣浣嶇疆',
+					// wrkSts$: '宸ヤ綔鐘舵��',
+					// crnNo: '鍫嗗灈鏈哄彿',
+					// barcode: '鏉$爜',
+					// memo: '澶囨敞'
+				}
+
+				// 3. 鍒涘缓宸ヤ綔琛�
+				const worksheet = XLSX.utils.json_to_sheet(exportData)
+
+				// 4. 鏇挎崲琛ㄥご涓轰腑鏂�
+				XLSX.utils.sheet_add_aoa(worksheet, [Object.values(headerMap)], { origin: 'A1' })
+
+				// 5. 鐢熸垚鏂囦欢鍚嶏紙甯︽棩鏈燂級
+				const fileName = `浠诲姟鍒楄〃_${new Date().toLocaleDateString().replace(/\//g, '-')}.xlsx`
+
+				// 6. 瀵煎嚭鏂囦欢
+				const workbook = XLSX.utils.book_new()
+				XLSX.utils.book_append_sheet(workbook, worksheet, '浠诲姟鏁版嵁')
+				XLSX.writeFile(workbook, fileName)
+			},
+			executeExportTableAll() {
+				let that = this;
+
+				$.ajax({
+					url: baseUrl + "/taskWrkLog/export/all/auth",
+					headers: {
+						'token': localStorage.getItem('token')
+					},
+					dataType: 'json',
+					contentType: 'application/json;charset=UTF-8',
+					method: 'GET',
+					success: function(res) {
+						if (res.code == 200) {
+							that.tableDataAll = res.data.records
+							// 1. 杩囨护鎿嶄綔鍒�
+							const exportData = that.tableDataAll.map(item => {
+								const cloned = { ...item }
+								delete cloned.operation // 绉婚櫎鎿嶄綔鍒楀叧鑱斿瓧娈�
+								return cloned
+							})
+
+							// 2. 瀹屾暣瀛楁鏄犲皠
+							const headerMap = {
+								taskNo: '浠诲姟鍙�',
+								status: '浠诲姟鐘舵��',
+								wrkNo: '宸ヤ綔鍙�',
+								createTime: 'createTime',
+								ioType: 'ioType',
+								ioPri: '浼樺厛绾�',
+								startPoint: '璧风偣浣嶇疆',
+								targetPoint: '缁堢偣浣嶇疆',
+								modiUser: 'modiUser',
+								modiTime: 'modiTime',
+								memo: '澶囨敞',
+								barcode: '鏉$爜',
+								assignTime: 'assignTime',
+								executeTime: 'executeTime',
+								completeTime: 'completeTime',
+								cancelTime: 'cancelTime',
+								wrkSts: 'wrkSts',
+								crnNo: '鍫嗗灈鏈哄彿',
+								commandStep: 'step',
+								transferMark: 'mark',
+								wrkSts$: '宸ヤ綔鐘舵��',
+								ioType$: '浠诲姟绫诲瀷',
+								status$: '浠诲姟鐘舵��',
+								createTime$: '鐢熸垚鏃堕棿',
+								modiTime$: '鏇存柊鏃堕棿',
+								modiUser$: '鏇存柊浜哄憳',
+								completeTime$: '瀹岀粨鏃堕棿',
+								executeTime$: '鎵ц鏃堕棿',
+								assignTime$: '娲惧彂鏃堕棿',
+								cancelTime$: '鍙栨秷鏃堕棿'
+							}
+
+							// 3. 鍒涘缓宸ヤ綔琛�
+							const worksheet = XLSX.utils.json_to_sheet(exportData)
+
+							// 4. 鏇挎崲琛ㄥご涓轰腑鏂�
+							XLSX.utils.sheet_add_aoa(worksheet, [Object.values(headerMap)], { origin: 'A1' })
+
+							// 5. 鐢熸垚鏂囦欢鍚嶏紙甯︽棩鏈燂級
+							const fileName = `浠诲姟鍒楄〃_${new Date().toLocaleDateString().replace(/\//g, '-')}.xlsx`
+
+							// 6. 瀵煎嚭鏂囦欢
+							const workbook = XLSX.utils.book_new()
+							XLSX.utils.book_append_sheet(workbook, worksheet, '浠诲姟鏁版嵁')
+							XLSX.writeFile(workbook, fileName)
+						} else if (res.code === 403) {
+							top.location.href = baseUrl + "/";
+						} else {
+							that.$message({
+								message: res.msg,
+								type: 'error'
+							});
+						}
+					}
+				});
+			},
+			handleSizeChange(val) {
+				console.log(`姣忛〉 ${val} 鏉);
+				this.pageSize = val
+				this.getTableData()
+			},
+			handleCurrentChange(val) {
+				console.log(`褰撳墠椤�: ${val}`);
+				this.currentPage = val
+				this.getTableData()
+			},
+			resetParam() {
+				this.tableSearchParam = {
+					task_no: null,
+					status: null,
+					wrk_no: null
+				}
+				this.getTableData()
+			},
+			exportTable() {
+				this.executeExportTable()
+			},
+			exportTableAll() {
+				this.executeExportTableAll()
+			},
+			handleCommand(command, row) {
+				switch (command) {
+					case "showCommand":
+						//鏌ョ湅鎸囦护
+						this.showCommand(row)
+						break;
+				}
+			},
+			showCommand(row) {
+				let wrkNo = row.wrkNo == null ? "" : row.wrkNo
+				//鏌ョ湅鎸囦护
+				$layui.layer.open({
+					type: 2,
+					title: '鎸囦护绠$悊',
+					maxmin: true,
+					area: [top.detailWidth, top.detailHeight],
+					shadeClose: true,
+					content: 'commandManageLog.html?taskNo=' + row.taskNo + "&wrkNo=" + wrkNo,
+					success: function(layero, index) {}
+				});
+			},
+		}
+	})
+</script>
+</body>
 
 </html>

--
Gitblit v1.9.1