From ce1f8c5b0e8cd5d4050e79c3e02433aafce81b24 Mon Sep 17 00:00:00 2001
From: huangxiaoqiang <huangxiaoqiang@hnkhzn.com>
Date: 星期二, 09 十二月 2025 16:16:22 +0800
Subject: [PATCH] 1
---
Code Management/WMS/WIDESEA_WMSClient/src/views/system/Log.vue | 346 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 346 insertions(+), 0 deletions(-)
diff --git a/Code Management/WMS/WIDESEA_WMSClient/src/views/system/Log.vue b/Code Management/WMS/WIDESEA_WMSClient/src/views/system/Log.vue
new file mode 100644
index 0000000..1766626
--- /dev/null
+++ b/Code Management/WMS/WIDESEA_WMSClient/src/views/system/Log.vue
@@ -0,0 +1,346 @@
+<template>
+ <div class="tree-container">
+ <el-input placeholder="杈撳叆鍏抽敭瀛楄繘琛岃繃婊�" v-model="filterText" class="filter-input">
+ </el-input>
+ <div class="custom-tree-wrapper">
+ <el-tree ref="tree" class="filter-tree" :filter-node-method="filterNode" :data="data" node-key="id" accordion>
+ <template #default="{ node, data }">
+ <div class="custom-tree-node">
+ <span class="node-label">{{ node.label }}</span>
+ <span v-if="data.hidden" class="node-actions">
+ <el-button type="text" size="mini" @click="() => view(data)" class="action-btn">
+ 鏌ョ湅
+ </el-button>
+ <el-button type="text" size="mini" @click="() => dowmload(node, data)" class="action-btn">
+ 涓嬭浇
+ </el-button>
+ </span>
+ </div>
+ </template>
+ </el-tree>
+ </div>
+ </div>
+ <div class="log-container">
+ <el-card shadow="always" v-if="logName" class="log-card">
+ <template #header>
+ <div class="card-header">
+ <el-tag type="info" size="small">鏃ュ織鏂囦欢</el-tag>
+ <span class="log-title">{{ logName }}</span>
+ </div>
+ </template>
+ <div class="log-content">
+ <div v-for="(item, index) in log" :key="index" class="log-line">
+ <span class="line-number">{{ index + 1 }}</span>
+ <span class="line-content">{{ item }}</span>
+ </div>
+ </div>
+ </el-card>
+ <div v-else class="empty-log">
+ <el-empty description="璇烽�夋嫨鏃ュ織鏂囦欢杩涜鏌ョ湅" />
+ </div>
+ </div>
+</template>
+
+<script>
+export default {
+ data() {
+ return {
+ data: [],
+ defaultProps: {
+ children: "children",
+ label: "label",
+ },
+ filterText: "",
+ logName: "",
+ log: [],
+ };
+ },
+ watch: {
+ filterText(val) {
+ this.$refs.tree.filter(val);
+ },
+ },
+ created() {
+ this.getLogName();
+ },
+
+ methods: {
+ filterNode(value, data) {
+ if (!value) return true;
+ return data.label.indexOf(value) !== -1;
+ },
+ getLogName() {
+ this.http
+ .post("/api/Sys_Log/GetLogName", null, "姝e湪鎵ц涓�...")
+ .then((x) => {
+ if (x.status) {
+ this.data = x.data;
+ }
+ });
+ },
+
+ view(data) {
+ // var params = {
+ // MainData: { fileName: data.label },
+ // };
+ this.http
+ .post("/api/Sys_Log/GetLog?fileName=" + data.label, "姝e湪鏌ヨ涓�...")
+ .then((x) => {
+ if (x.status) {
+ this.logName = data.label;
+ this.log = x.data;
+ }
+ });
+ },
+
+ dowmload(node, data) {
+ let ipAddress = this.http.ipAddress;
+ let url =
+ "api/Sys_Log/DownLoadLog?fileName=" +
+ data.fatherNode +
+ "\\" +
+ data.label;
+ let fileName = data.label;
+ let xmlResquest = new XMLHttpRequest();
+ xmlResquest.open("GET", ipAddress + url, true);
+ xmlResquest.setRequestHeader("Content-type", "application/json");
+ xmlResquest.setRequestHeader(
+ "Authorization",
+ this.$store.getters.getToken()
+ );
+ let elink = this.$refs.template;
+ xmlResquest.responseType = "blob";
+ let $_vue = this;
+ this.loadingStatus = true;
+ xmlResquest.onload = function (e) {
+ // 璇锋眰鎴愬姛
+ if (this.status == 200) {
+ let blob = this.response;
+ let a = document.createElement("a");
+ //window.URL.createObjectURL() 闈欐�佹柟娉曚細鍒涘缓涓�涓� DOMString锛屽叾涓寘鍚竴涓〃绀哄弬鏁颁腑缁欏嚭鐨勫璞$殑URL銆傝繖涓� URL 鐨勭敓鍛藉懆鏈熷拰鍒涘缓瀹冪殑绐楀彛涓殑 document 缁戝畾銆傝繖涓柊鐨刄RL 瀵硅薄琛ㄧず鎸囧畾鐨� File 瀵硅薄鎴� Blob 瀵硅薄銆�
+ let url = window.URL.createObjectURL(blob);
+ a.href = url;
+ a.download = fileName;
+ a.click();
+ //URL.revokeObjectURL() 闈欐�佹柟娉曠敤鏉ラ噴鏀句竴涓箣鍓嶅凡缁忓瓨鍦ㄧ殑銆侀�氳繃璋冪敤 URL.createObjectURL() 鍒涘缓鐨� URL 瀵硅薄銆傚綋浣犵粨鏉熶娇鐢ㄦ煇涓� URL 瀵硅薄涔嬪悗锛屽簲璇ラ�氳繃璋冪敤杩欎釜鏂规硶鏉ヨ娴忚鍣ㄧ煡閬撲笉鐢ㄥ湪鍐呭瓨涓户缁繚鐣欏杩欎釜鏂囦欢鐨勫紩鐢ㄤ簡銆�
+ window.URL.revokeObjectURL(url);
+
+ } else {
+ //涓嬭浇澶辫触澶勭悊
+
+ }
+ };
+ xmlResquest.send();
+ },
+ },
+};
+</script>
+
+<style scoped>
+.tree-container {
+ width: 30%;
+ float: left;
+ padding: 16px;
+ background: #f8f9fa;
+ border-radius: 8px;
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
+}
+
+.filter-input {
+ margin-bottom: 16px;
+}
+
+.filter-input :deep(.el-input__inner) {
+ border-radius: 20px;
+ border-color: #dcdfe6;
+ transition: all 0.3s;
+}
+
+.filter-input :deep(.el-input__inner):focus {
+ border-color: #409eff;
+ box-shadow: 0 0 0 2px rgba(64, 158, 255, 0.1);
+}
+
+.custom-tree-wrapper {
+ height: 760px;
+ overflow-y: auto;
+ padding: 8px;
+ background: white;
+ border-radius: 6px;
+ border: 1px solid #ebeef5;
+}
+
+.filter-tree :deep(.el-tree-node__content) {
+ height: 40px;
+ margin: 2px 0;
+ border-radius: 4px;
+ transition: all 0.2s;
+}
+
+.filter-tree :deep(.el-tree-node__content:hover) {
+ background-color: #f0f9ff;
+}
+
+.filter-tree :deep(.el-tree-node.is-current > .el-tree-node__content) {
+ background-color: #ecf5ff;
+ font-weight: 600;
+}
+
+.custom-tree-node {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ width: 100%;
+ padding: 0 8px;
+}
+
+.node-label {
+ font-size: 14px;
+ color: #606266;
+ flex: 1;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+
+.node-actions {
+ display: flex;
+ gap: 8px;
+ margin-left: 12px;
+}
+
+.action-btn {
+ padding: 4px 8px;
+ font-size: 12px;
+ color: #409eff;
+ border-radius: 3px;
+}
+
+.action-btn:hover {
+ background-color: rgba(64, 158, 255, 0.1);
+}
+
+.log-container {
+ width: 68%;
+ float: right;
+ padding: 16px;
+}
+
+.log-card {
+ height: 800px;
+ border-radius: 8px;
+ border: 1px solid #ebeef5;
+}
+
+.log-card :deep(.el-card__header) {
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
+ border-bottom: 1px solid #ebeef5;
+ padding: 16px 20px;
+}
+
+.card-header {
+ display: flex;
+ align-items: center;
+ gap: 12px;
+}
+
+.log-title {
+ font-size: 16px;
+ font-weight: 600;
+ color: white;
+ flex: 1;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+
+.log-content {
+ height: 700px;
+ overflow-y: auto;
+ font-family: 'Consolas', 'Monaco', 'Courier New', monospace;
+ background: #f8f9fa;
+ padding: 12px;
+ border-radius: 4px;
+}
+
+.log-line {
+ display: flex;
+ align-items: flex-start;
+ margin-bottom: 4px;
+ line-height: 1.5;
+ background: white;
+ padding: 8px 12px;
+ border-radius: 4px;
+ border-left: 3px solid #409eff;
+ transition: all 0.2s;
+}
+
+.log-line:hover {
+ background: #f0f9ff;
+ transform: translateX(2px);
+}
+
+.line-number {
+ display: inline-block;
+ min-width: 40px;
+ padding-right: 12px;
+ text-align: right;
+ color: #909399;
+ font-size: 12px;
+ user-select: none;
+}
+
+.line-content {
+ flex: 1;
+ color: #303133;
+ font-size: 13px;
+ word-break: break-all;
+ white-space: pre-wrap;
+}
+
+.empty-log {
+ height: 800px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ background: white;
+ border-radius: 8px;
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
+}
+
+.empty-log :deep(.el-empty__description) {
+ margin-top: 8px;
+}
+
+/* 婊氬姩鏉℃牱寮� */
+.custom-tree-wrapper::-webkit-scrollbar,
+.log-content::-webkit-scrollbar {
+ width: 6px;
+ height: 6px;
+}
+
+.custom-tree-wrapper::-webkit-scrollbar-track,
+.log-content::-webkit-scrollbar-track {
+ background: #f1f1f1;
+ border-radius: 3px;
+}
+
+.custom-tree-wrapper::-webkit-scrollbar-thumb,
+.log-content::-webkit-scrollbar-thumb {
+ background: #c1c1c1;
+ border-radius: 3px;
+}
+
+.custom-tree-wrapper::-webkit-scrollbar-thumb:hover,
+.log-content::-webkit-scrollbar-thumb:hover {
+ background: #a8a8a8;
+}
+
+/* 娓呴櫎娴姩 */
+.tree-container::after,
+.log-container::after {
+ content: "";
+ display: table;
+ clear: both;
+}
+</style>
\ No newline at end of file
--
Gitblit v1.9.3