From 72ac227ecf97aa0921e9deafb8f6f5b1493e1548 Mon Sep 17 00:00:00 2001
From: dap <15891557205@163.com>
Date: 星期四, 14 十一月 2024 16:20:34 +0800
Subject: [PATCH] refactor: 重构操作日志详情样式
---
package.json | 5 +
src/views/monitor/operlog/index.vue | 57 ++-----------------
src/views/monitor/operlog/oper-info-dialog.vue | 111 +++++++++++++++++++++++++++++++++++++
3 files changed, 120 insertions(+), 53 deletions(-)
diff --git a/package.json b/package.json
index e67d60f..40478ad 100644
--- a/package.json
+++ b/package.json
@@ -43,6 +43,7 @@
"vue": "3.4.34",
"vue-cropper": "1.1.1",
"vue-i18n": "9.10.2",
+ "vue-json-pretty": "^2.4.0",
"vue-router": "4.3.2",
"vue-types": "5.1.1",
"vxe-table": "4.5.22"
@@ -66,10 +67,10 @@
"eslint": "8.57.0",
"eslint-config-prettier": "9.1.0",
"eslint-define-config": "2.1.0",
+ "eslint-plugin-import": "2.29.1",
+ "eslint-plugin-node": "11.1.0",
"eslint-plugin-prettier": "5.1.3",
"eslint-plugin-promise": "6.1.1",
- "eslint-plugin-node": "11.1.0",
- "eslint-plugin-import": "2.29.1",
"eslint-plugin-vue": "9.23.0",
"fast-glob": "3.3.2",
"postcss": "8.4.36",
diff --git a/src/views/monitor/operlog/index.vue b/src/views/monitor/operlog/index.vue
index ed0d755..fcecab7 100644
--- a/src/views/monitor/operlog/index.vue
+++ b/src/views/monitor/operlog/index.vue
@@ -123,56 +123,14 @@
<pagination v-show="total > 0" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" :total="total" @pagination="getList" />
</el-card>
<!-- 鎿嶄綔鏃ュ織璇︾粏 -->
- <el-dialog v-model="dialog.visible" title="鎿嶄綔鏃ュ織璇︾粏" width="700px" append-to-body>
- <el-form :model="form" label-width="100px">
- <el-row>
- <el-col :span="24">
- <el-form-item label="鐧诲綍淇℃伅锛�">{{ form.operName }} / {{ form.deptName }} / {{ form.operIp }} / {{ form.operLocation }}</el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="璇锋眰淇℃伅锛�">{{ form.requestMethod }} {{ form.operUrl }}</el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="鎿嶄綔妯″潡锛�">{{ form.title }} / {{ typeFormat(form) }}</el-form-item>
- </el-col>
- <el-col :span="24">
- <el-form-item label="鎿嶄綔鏂规硶锛�">{{ form.method }}</el-form-item>
- </el-col>
- <el-col :span="24">
- <el-form-item label="璇锋眰鍙傛暟锛�">{{ form.operParam }}</el-form-item>
- </el-col>
- <el-col :span="24">
- <el-form-item label="杩斿洖鍙傛暟锛�">{{ form.jsonResult }}</el-form-item>
- </el-col>
- <el-col :span="6">
- <el-form-item label="鎿嶄綔鐘舵�侊細">
- <div v-if="form.status === 0">姝e父</div>
- <div v-else-if="form.status === 1">澶辫触</div>
- </el-form-item>
- </el-col>
- <el-col :span="8">
- <el-form-item label="娑堣�楁椂闂达細">{{ form.costTime }}姣</el-form-item>
- </el-col>
- <el-col :span="10">
- <el-form-item label="鎿嶄綔鏃堕棿锛�">{{ parseTime(form.operTime) }}</el-form-item>
- </el-col>
- <el-col :span="24">
- <el-form-item v-if="form.status === 1" label="寮傚父淇℃伅锛�">{{ form.errorMsg }}</el-form-item>
- </el-col>
- </el-row>
- </el-form>
- <template #footer>
- <div class="dialog-footer">
- <el-button @click="dialog.visible = false">鍏� 闂�</el-button>
- </div>
- </template>
- </el-dialog>
+ <OperInfoDialog ref="operInfoDialogRef" />
</div>
</template>
<script setup name="Operlog" lang="ts">
import { list, delOperlog, cleanOperlog } from '@/api/monitor/operlog';
import { OperLogForm, OperLogQuery, OperLogVO } from '@/api/monitor/operlog/types';
+import OperInfoDialog from './oper-info-dialog.vue';
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const { sys_oper_type, sys_common_status } = toRefs<any>(proxy?.useDict('sys_oper_type', 'sys_common_status'));
@@ -188,11 +146,6 @@
const operLogTableRef = ref<ElTableInstance>();
const queryFormRef = ref<ElFormInstance>();
-
-const dialog = reactive<DialogOption>({
- visible: false,
- title: ''
-});
const data = reactive<PageData<OperLogForm, OperLogQuery>>({
form: {
@@ -267,11 +220,13 @@
queryParams.value.isAsc = column.order;
getList();
};
+
+const operInfoDialogRef = ref<InstanceType<typeof OperInfoDialog>>();
/** 璇︾粏鎸夐挳鎿嶄綔 */
const handleView = (row: OperLogVO) => {
- dialog.visible = true;
- form.value = row;
+ operInfoDialogRef.value.openDialog(row);
};
+
/** 鍒犻櫎鎸夐挳鎿嶄綔 */
const handleDelete = async (row?: OperLogVO) => {
const operIds = row?.operId || ids.value;
diff --git a/src/views/monitor/operlog/oper-info-dialog.vue b/src/views/monitor/operlog/oper-info-dialog.vue
new file mode 100644
index 0000000..fd620ae
--- /dev/null
+++ b/src/views/monitor/operlog/oper-info-dialog.vue
@@ -0,0 +1,111 @@
+<template>
+ <el-dialog v-model="open" title="鎿嶄綔鏃ュ織璇︾粏" width="700px" append-to-body close-on-click-modal @closed="info = null">
+ <el-descriptions v-if="info" :column="1" border>
+ <el-descriptions-item label="鎿嶄綔鐘舵��">
+ <template #default>
+ <el-tag v-if="info.status === 0" type="success">姝e父</el-tag>
+ <el-tag v-else-if="info.status === 1" type="danger">澶辫触</el-tag>
+ </template>
+ </el-descriptions-item>
+ <el-descriptions-item label="鐧诲綍淇℃伅">
+ <template #default> {{ info.operName }} / {{ info.deptName }} / {{ info.operIp }} / {{ info.operLocation }} </template>
+ </el-descriptions-item>
+ <el-descriptions-item label="璇锋眰淇℃伅">
+ <template #default> {{ info.requestMethod }} {{ info.operUrl }} </template>
+ </el-descriptions-item>
+ <el-descriptions-item label="鎿嶄綔妯″潡">
+ <template #default> {{ info.title }} / {{ typeFormat(info) }} </template>
+ </el-descriptions-item>
+ <el-descriptions-item label="鎿嶄綔鏂规硶">
+ <template #default>
+ {{ info.method }}
+ </template>
+ </el-descriptions-item>
+ <el-descriptions-item label="璇锋眰鍙傛暟">
+ <template #default>
+ <div class="max-h-300px overflow-y-auto">
+ <VueJsonPretty :data="formatToJsonObject(info.operParam)" />
+ </div>
+ </template>
+ </el-descriptions-item>
+ <el-descriptions-item label="杩斿洖鍙傛暟">
+ <template #default>
+ <div class="max-h-300px overflow-y-auto">
+ <VueJsonPretty :data="formatToJsonObject(info.jsonResult)" />
+ </div>
+ </template>
+ </el-descriptions-item>
+ <el-descriptions-item label="娑堣�楁椂闂�">
+ <template #default>
+ <span> {{ info.costTime }}ms </span>
+ </template>
+ </el-descriptions-item>
+ <el-descriptions-item label="鎿嶄綔鏃堕棿">
+ <template #default> {{ parseTime(info.operTime) }}</template>
+ </el-descriptions-item>
+ <el-descriptions-item v-if="info.status === 1" label="寮傚父淇℃伅">
+ <template #default>
+ <span class="text-danger"> {{ info.errorMsg }}</span>
+ </template>
+ </el-descriptions-item>
+ </el-descriptions>
+ </el-dialog>
+</template>
+
+<script setup lang="ts">
+import type { OperLogForm } from '@/api/monitor/operlog/types';
+import VueJsonPretty from 'vue-json-pretty';
+import 'vue-json-pretty/lib/styles.css';
+
+const open = ref(false);
+const info = ref<OperLogForm | null>(null);
+function openDialog(row: OperLogForm) {
+ info.value = row;
+ open.value = true;
+}
+
+function closeDialog() {
+ open.value = false;
+}
+
+defineExpose({
+ openDialog,
+ closeDialog
+});
+
+/**
+ * json杞负瀵硅薄
+ * @param data 鍘熷鏁版嵁
+ */
+function formatToJsonObject(data: string) {
+ try {
+ return JSON.parse(data);
+ } catch (error) {
+ return data;
+ }
+}
+
+/**
+ * 瀛楀吀淇℃伅
+ */
+const { proxy } = getCurrentInstance() as ComponentInternalInstance;
+const { sys_oper_type } = toRefs<any>(proxy?.useDict('sys_oper_type'));
+const typeFormat = (row: OperLogForm) => {
+ return proxy?.selectDictLabel(sys_oper_type.value, row.businessType);
+};
+</script>
+
+<style scoped>
+/**
+label瀹藉害鍥哄畾
+*/
+:deep(.el-descriptions__label) {
+ min-width: 100px;
+}
+/**
+鏂囧瓧瓒呰繃 鎹㈣鏄剧ず
+*/
+:deep(.el-descriptions__content) {
+ max-width: 300px;
+}
+</style>
--
Gitblit v1.9.3