From 7985e2bf45f01550b3edc1a3052b1d5ac263e8c2 Mon Sep 17 00:00:00 2001
From: shuishen <1109946754@qq.com>
Date: Thu, 22 Jan 2026 15:33:10 +0800
Subject: [PATCH] feat:系统操作日志,菜单级增加
---
applications/drone-command/src/views/permissionManage/operationLog/index.vue | 145 +++++++++++++++++++++++++++++
applications/drone-command/src/page/index/sidebar/sidebarItem.vue | 9 +
applications/drone-command/src/styles/common/cockpit.scss | 2
applications/drone-command/src/views/api.txt | 63 ++++++++----
applications/drone-command/src/api/logs.js | 7 +
packages/apis/system/index.js | 7 +
packages/apis/index.js | 13 ++
7 files changed, 220 insertions(+), 26 deletions(-)
diff --git a/applications/drone-command/src/api/logs.js b/applications/drone-command/src/api/logs.js
index 7e4a8f8..3d83b01 100644
--- a/applications/drone-command/src/api/logs.js
+++ b/applications/drone-command/src/api/logs.js
@@ -62,6 +62,13 @@
},
});
};
+export const getOperationLogPage = params => {
+ return request({
+ url: '/blade-log/log/operationLog/page',
+ method: 'get',
+ params: { descs: 'create_time', ...params },
+ });
+};
// 历史轨迹记录
export const getHistoryTrack = (params) => {
return request({
diff --git a/applications/drone-command/src/page/index/sidebar/sidebarItem.vue b/applications/drone-command/src/page/index/sidebar/sidebarItem.vue
index adc4786..b4b250d 100644
--- a/applications/drone-command/src/page/index/sidebar/sidebarItem.vue
+++ b/applications/drone-command/src/page/index/sidebar/sidebarItem.vue
@@ -2,7 +2,7 @@
* @Author : yuan
* @Date : 2026-01-06 09:47:09
* @LastEditors : yuan
- * @LastEditTime : 2026-01-07 15:01:16
+ * @LastEditTime : 2026-01-22 15:00:07
* @FilePath : \applications\drone-command\src\page\index\sidebar\sidebarItem.vue
* @Description :
* Copyright 2026 OBKoro1, All Rights Reserved.
@@ -47,6 +47,7 @@
import { mapGetters } from 'vuex';
import { validatenull } from 'utils/validate';
import website from '@/config/website';
+import {saveOperationLog} from '@ztzf/apis'
export default {
name: 'sidebarItem',
@@ -89,6 +90,12 @@
return item.meta.roles ? item.meta.roles.includes(this.roles) : true;
},
open(item) {
+ saveOperationLog({
+ requestUri: item[this.pathKey],
+ title: item.name,
+ type: 0
+ })
+
this.$router.push({
path: item[this.pathKey],
query: item[this.queryKey],
diff --git a/applications/drone-command/src/styles/common/cockpit.scss b/applications/drone-command/src/styles/common/cockpit.scss
index 7fe99d9..43bcd17 100644
--- a/applications/drone-command/src/styles/common/cockpit.scss
+++ b/applications/drone-command/src/styles/common/cockpit.scss
@@ -350,7 +350,7 @@
td.in-range div:hover,
&.is-week-mode .el-date-table__row.current div,
&.is-week-mode .el-date-table__row:hover div {
- background-color: #284FE3 !important;
+ background-color: #4160D5 !important;
}
}
}
diff --git a/applications/drone-command/src/views/api.txt b/applications/drone-command/src/views/api.txt
index 350f827..a385ddf 100644
--- a/applications/drone-command/src/views/api.txt
+++ b/applications/drone-command/src/views/api.txt
@@ -1,33 +1,22 @@
-## 信号干扰,诱导驱离
+## 分页
-**接口地址**:`/drone-fw/cockpit/dataCockpit/interferenceAndExpulsion`
+**接口地址**:`/blade-log/log/operationLog/page`
-**请求方式**:`POST`
+**请求方式**:`GET`
-**请求数据类型**:`application/json`
+**请求数据类型**:`application/x-www-form-urlencoded`
**响应数据类型**:`*/*`
-**接口描述**:<p>传入fwEffectEval</p>
+**接口描述**:<p>分页</p>
-
-
-**请求示例**:
-
-
-```javascript
-{
- "alarmRecordId": 0,
- "counterWay": ""
-}
-```
**请求参数**:
@@ -38,9 +27,12 @@
| 参数名称 | 参数说明 | 请求类型 | 是否必须 | 数据类型 | schema |
| -------- | -------- | ----- | -------- | -------- | ------ |
-|fwEffectEvalParam|fwEffectEvalParam|body|true|FwEffectEvalParam|FwEffectEvalParam|
-|  alarmRecordId|告警记录ID(ja_fw_drone_alarm_record.id)||false|integer(int64)||
-|  counterWay|反制方式:1.信号干扰/2.诱导驱离/无||false|string||
+|createBy|操作人|query|false|string||
+|current|当前页|query|false|integer(int32)||
+|endTime|结束时间|query|false|string||
+|size|每页的数量|query|false|integer(int32)||
+|startTime|开始时间|query|false|string||
+|title|日志类型(0菜单/1按钮)|query|false|string||
**响应状态**:
@@ -48,8 +40,7 @@
| 状态码 | 说明 | schema |
| -------- | -------- | ----- |
-|200|OK|R|
-|201|Created||
+|200|OK|R«IPage«OperationLogVO»»|
|401|Unauthorized||
|403|Forbidden||
|404|Not Found||
@@ -61,7 +52,18 @@
| 参数名称 | 参数说明 | 类型 | schema |
| -------- | -------- | ----- |----- |
|code|状态码|integer(int32)|integer(int32)|
-|data|承载数据|object||
+|data|承载数据|IPage«OperationLogVO»|IPage«OperationLogVO»|
+|  current||integer(int64)||
+|  pages||integer(int64)||
+|  records||array|OperationLogVO|
+|    createBy|操作人|string||
+|    remoteIp|客户端IP|string||
+|    requestUri|请求地址|string||
+|    title|日志标题|string||
+|    type|日志类型(0菜单/1按钮)|string||
+|    userAgent|客户端|string||
+|  size||integer(int64)||
+|  total||integer(int64)||
|msg|返回消息|string||
|success|是否成功|boolean||
@@ -70,7 +72,22 @@
```javascript
{
"code": 0,
- "data": {},
+ "data": {
+ "current": 0,
+ "pages": 0,
+ "records": [
+ {
+ "createBy": "",
+ "remoteIp": "",
+ "requestUri": "",
+ "title": "",
+ "type": "",
+ "userAgent": ""
+ }
+ ],
+ "size": 0,
+ "total": 0
+ },
"msg": "",
"success": true
}
diff --git a/applications/drone-command/src/views/permissionManage/operationLog/index.vue b/applications/drone-command/src/views/permissionManage/operationLog/index.vue
new file mode 100644
index 0000000..69066d8
--- /dev/null
+++ b/applications/drone-command/src/views/permissionManage/operationLog/index.vue
@@ -0,0 +1,145 @@
+<template>
+ <basic-container>
+ <el-form ref="queryParamsRef" :model="searchParams" class="command-page-history-search">
+ <el-form-item label="操作名称" prop="title">
+ <el-input
+ class="command-input"
+ v-model="searchParams.title"
+ placeholder="请输入"
+ clearable
+ @clear="handleSearch"
+ />
+ </el-form-item>
+ <el-form-item label="操作人" prop="createBy">
+ <el-input
+ class="command-input"
+ v-model="searchParams.createBy"
+ placeholder="请输入"
+ clearable
+ @clear="handleSearch"
+ />
+ </el-form-item>
+ <el-form-item label="操作类型" prop="type">
+ <el-select
+ class="command-select"
+ popper-class="command-select-popper"
+ v-model="searchParams.type"
+ placeholder="请选择"
+ clearable
+ @change="handleSearch"
+ >
+ <el-option v-for="item in typeOptions" :key="item.value" :label="item.label" :value="item.value" />
+ </el-select>
+ </el-form-item>
+ <el-form-item label="操作时间">
+ <el-date-picker
+ popper-class="command-date-picker-popper"
+ class="command-date-picker"
+ v-model="dateRange"
+ type="daterange"
+ range-separator="至"
+ start-placeholder="开始日期"
+ end-placeholder="结束日期"
+ value-format="YYYY-MM-DD HH:mm:ss"
+ @change="handleSearch"
+ />
+ </el-form-item>
+ <el-form-item class="history-search-actions">
+ <el-button :icon="RefreshRight" @click="resetForm"></el-button>
+ <el-button class="search-btn" :icon="Search" @click="handleSearch"></el-button>
+ </el-form-item>
+ </el-form>
+
+ <div class="command-table-container" v-loading="loading" element-loading-background="rgba(5, 5, 15, 0.6)">
+ <div class="command-table-content command-table-content-bg">
+ <el-table class="command-table" :data="list">
+ <el-table-column type="index" show-overflow-tooltip width="64" label="序号" />
+ <el-table-column prop="title" show-overflow-tooltip label="操作名称" />
+ <el-table-column prop="createBy" show-overflow-tooltip label="操作人" />
+ <el-table-column prop="type" show-overflow-tooltip label="操作类型">
+ <template v-slot="{ row }">
+ {{ getTypeLabel(row.type) }}
+ </template>
+ </el-table-column>
+ <el-table-column prop="remoteIp" show-overflow-tooltip label="客户端IP" />
+ <el-table-column prop="requestUri" show-overflow-tooltip label="请求地址" />
+ <el-table-column prop="userAgent" show-overflow-tooltip label="客户端信息" />
+ </el-table>
+ </div>
+
+ <div class="command-table-pagination">
+ <el-pagination
+ popper-class="command-select-popper"
+ v-model:current-page="searchParams.current"
+ v-model:page-size="searchParams.size"
+ layout="total, prev, pager, next, sizes"
+ :total="total"
+ @change="getList"
+ />
+ </div>
+ </div>
+ </basic-container>
+</template>
+
+<script setup>
+import { Search, RefreshRight } from '@element-plus/icons-vue'
+import { onMounted, ref } from 'vue'
+import { dateRangeFormat } from '@ztzf/utils'
+import { getOperationLogPage } from '@/api/logs'
+
+const initSearchParams = () => ({
+ title: '',
+ createBy: '',
+ type: '',
+ current: 1,
+ size: 10,
+})
+
+const searchParams = ref(initSearchParams())
+const total = ref(0)
+const loading = ref(true)
+const list = ref([])
+const dateRange = ref([])
+const queryParamsRef = ref(null)
+const typeOptions = [
+ { label: '菜单', value: '1' },
+ { label: '按钮', value: '2' },
+]
+
+async function getList() {
+ const range = dateRangeFormat(dateRange.value)
+ loading.value = true
+ try {
+ const params = { ...searchParams.value, startTime: range[0], endTime: range[1] }
+ const res = await getOperationLogPage(params)
+ list.value = res?.data?.data?.records ?? []
+ total.value = res?.data?.data?.total ?? 0
+ } finally {
+ loading.value = false
+ }
+}
+
+function handleSearch() {
+ searchParams.value.current = 1
+ getList()
+}
+
+function resetForm() {
+ dateRange.value = []
+ queryParamsRef.value?.resetFields()
+ searchParams.value.current = 1
+ getList()
+}
+
+function getTypeLabel(value) {
+ const key = value === null || value === undefined ? '' : String(value)
+ const match = typeOptions.find(item => item.value === key)
+ return match?.label || value || '-'
+}
+
+onMounted(() => {
+ getList()
+})
+</script>
+
+<style scoped lang="scss"></style>
diff --git a/packages/apis/index.js b/packages/apis/index.js
index 77c6125..83158cf 100644
--- a/packages/apis/index.js
+++ b/packages/apis/index.js
@@ -1 +1,12 @@
-export * from './job';
+/*
+ * @Author : yuan
+ * @Date : 2026-01-07 11:04:47
+ * @LastEditors : yuan
+ * @LastEditTime : 2026-01-22 14:50:34
+ * @FilePath : \packages\apis\index.js
+ * @Description :
+ * Copyright 2026 OBKoro1, All Rights Reserved.
+ * 2026-01-07 11:04:47
+ */
+export * from './job'
+export * from './system'
diff --git a/packages/apis/system/index.js b/packages/apis/system/index.js
new file mode 100644
index 0000000..0677f13
--- /dev/null
+++ b/packages/apis/system/index.js
@@ -0,0 +1,7 @@
+export const saveOperationLog = (data) => {
+ return window._request({
+ url: `/blade-log/log/operationLog/save`,
+ method: 'post',
+ data,
+ })
+}
--
Gitblit v1.9.3