From ada659be29d46e9c07bce9fa147d089a6ad9fa24 Mon Sep 17 00:00:00 2001
From: shuishen <1109946754@qq.com>
Date: Fri, 23 Jan 2026 14:57:35 +0800
Subject: [PATCH] feat:反无按钮级操作日志添加

---
 applications/drone-command/src/views/areaManage/precinctInfo/index.vue                        |    8 +
 applications/drone-command/src/views/basicManage/maintainRecord/MaintenanceDiaLog.vue         |    9 +
 applications/drone-command/src/views/areaManage/sceneConfig/index.vue                         |    8 +
 applications/drone-command/src/views/system/user/index.vue                                    |    8 +
 applications/drone-command/src/views/detectionCountermeasure/taskSchedule/index.vue           |    8 +
 applications/drone-command/src/views/permissionManage/permissionRole/index.vue                |    8 +
 applications/drone-command/src/views/areaManage/defenseZone/FormDiaLog.vue                    |    8 +
 applications/drone-command/src/views/permissionManage/permissionDept/index.vue                |    8 +
 applications/drone-command/src/views/detectionCountermeasure/taskSchedule/FormDiaLog.vue      |   11 ++
 applications/drone-command/src/views/areaManage/partition/FormDiaLog.vue                      |    9 +
 applications/drone-command/src/views/basicManage/maintainRecord/FormDiaLog.vue                |    9 +
 applications/drone-command/src/views/permissionManage/permissionDept/FormDiaLog.vue           |   12 ++
 applications/drone-command/src/views/permissionManage/permissionRole/FormDiaLog.vue           |   13 ++
 applications/drone-command/src/views/areaManage/defenseZone/index.vue                         |    8 +
 applications/drone-command/src/views/basicManage/deviceStock/DeviceTrackDiaLog.vue            |    8 +
 applications/drone-command/src/views/permissionManage/permissionUser/index.vue                |    8 +
 applications/drone-command/src/views/basicManage/maintainRecord/index.vue                     |    8 +
 applications/drone-command/src/views/system/user/FormDiaLog.vue                               |   13 ++
 applications/drone-command/src/views/permissionManage/permissionUser/FormDiaLog.vue           |   13 ++
 applications/drone-command/src/views/recordManage/alarmRecords/index.vue                      |    8 +
 applications/drone-command/src/views/basicManage/deviceStock/DeviceScrapDiaLog.vue            |    8 +
 applications/drone-command/src/views/recordManage/historyTracks/index.vue                     |    8 +
 applications/drone-command/src/views/basicManage/deviceStock/FormDiaLog.vue                   |    9 +
 applications/drone-command/src/views/areaManage/partition/index.vue                           |    8 +
 applications/drone-command/src/views/areaManage/precinctInfo/FormDiaLog.vue                   |    8 +
 applications/drone-command/src/views/permissionManage/permissionRole/RolePermissionDialog.vue |    8 +
 applications/drone-command/src/views/areaManage/sceneConfig/FormDiaLog.vue                    |    8 +
 27 files changed, 242 insertions(+), 0 deletions(-)

diff --git a/applications/drone-command/src/views/areaManage/defenseZone/FormDiaLog.vue b/applications/drone-command/src/views/areaManage/defenseZone/FormDiaLog.vue
index c02b6d1..763d8d7 100644
--- a/applications/drone-command/src/views/areaManage/defenseZone/FormDiaLog.vue
+++ b/applications/drone-command/src/views/areaManage/defenseZone/FormDiaLog.vue
@@ -109,6 +109,8 @@
 import { cartesian3Convert } from '@/utils/cesium/mapUtil'
 import * as turf from '@turf/turf'
 import * as Cesium from 'cesium'
+import { saveOperationLog } from '@ztzf/apis'
+import { useRoute } from 'vue-router'
 
 // 初始化表单
 const initForm = () => ({
@@ -132,6 +134,7 @@
 const selectedSceneRows = ref([]) // 选中场景
 const dictObj = inject('dictObj')
 const mapRef = ref(null)
+const route = useRoute()
 let viewer
 let drawPolygonExample
 let pointList = []
@@ -162,6 +165,11 @@
 		const str = [...pointList, pointList[0]].map(item => `${item.longitude} ${item.latitude}`).join(',')
 		formData.value.geom = `POLYGON((${str}))`
 		await fwDefenseZoneSubmitApi(formData.value)
+		saveOperationLog({
+			requestUri: route.path,
+			title: `${route.name || '防区管理'}-${dialogMode.value === 'add' ? '新增' : '编辑'}`,
+			type: 1,
+		})
 		ElMessage.success(dialogMode.value === 'add' ? '新增成功' : '更新成功')
 		visible.value = false
 		emit('success')
diff --git a/applications/drone-command/src/views/areaManage/defenseZone/index.vue b/applications/drone-command/src/views/areaManage/defenseZone/index.vue
index 57791e1..242cb96 100644
--- a/applications/drone-command/src/views/areaManage/defenseZone/index.vue
+++ b/applications/drone-command/src/views/areaManage/defenseZone/index.vue
@@ -55,6 +55,8 @@
 import { fwDefenseZonePageApi, fwDefenseZoneRemoveApi } from './defenseZoneApi'
 import FormDiaLog from './FormDiaLog.vue'
 import { getDictionaryByCode } from '@/api/system/dictbiz'
+import { saveOperationLog } from '@ztzf/apis'
+import { useRoute } from 'vue-router'
 
 // 初始化查询参数
 const initSearchParams = () => ({
@@ -72,6 +74,7 @@
 const queryParamsRef = ref(null) // 查询表单实例
 const dialogRef = ref(null) // 弹框实例
 const dialogVisible = ref(false)
+const route = useRoute()
 
 // 获取列表
 async function getList () {
@@ -109,6 +112,11 @@
 	})
 	const ids = row ? row.id : selectedIds.value.join(',')
 	await fwDefenseZoneRemoveApi({ ids })
+	saveOperationLog({
+		requestUri: route.path,
+		title: `${route.name || '防区管理'}-删除`,
+		type: 1,
+	})
 	ElMessage.success('删除成功')
 	selectedIds.value = []
 	getList()
diff --git a/applications/drone-command/src/views/areaManage/partition/FormDiaLog.vue b/applications/drone-command/src/views/areaManage/partition/FormDiaLog.vue
index 44c149a..00e1113 100644
--- a/applications/drone-command/src/views/areaManage/partition/FormDiaLog.vue
+++ b/applications/drone-command/src/views/areaManage/partition/FormDiaLog.vue
@@ -171,6 +171,8 @@
 import { computed, inject, nextTick, onMounted, ref, watch } from 'vue'
 import { ElMessage } from 'element-plus'
 import { fwAreaDivideDetailApi, fwAreaDivideSubmitApi } from './partitionApi'
+import { saveOperationLog } from '@ztzf/apis'
+import { useRoute } from 'vue-router'
 import { fieldRules, geomAnalysis, getDictLabel } from '@ztzf/utils'
 import CommonCesiumMap from '@/components/map-container/common-cesium-map.vue'
 import { DrawPolygon } from '@/utils/cesium/DrawPolygon'
@@ -202,6 +204,7 @@
 const dialogMode = ref('add') // 弹框模式
 const submitting = ref(false) // 提交中
 const readonly = computed(() => dialogMode.value === 'view')
+const route = useRoute()
 const titleEnum = ref({ edit: '编辑区域', view: '查看区域', add: '新增区域' })
 const flyDateRange = ref([]) // 飞行时间
 const deviceTableRef = ref(null)
@@ -277,6 +280,12 @@
 		let str = [...pointList, pointList[0]].map(item => `${item.longitude} ${item.latitude}`).join(',')
 		formData.value.geom = `POLYGON((${str}))`
 		await fwAreaDivideSubmitApi(formData.value)
+		const actionText = dialogMode.value === 'add' ? '新增' : '编辑'
+		saveOperationLog({
+			requestUri: route.path,
+			title: `${route.name || '区域划分'}-${actionText}`,
+			type: 1,
+		})
 		ElMessage.success(dialogMode.value === 'add' ? '新增成功' : '更新成功')
 		visible.value = false
 		emit('success')
diff --git a/applications/drone-command/src/views/areaManage/partition/index.vue b/applications/drone-command/src/views/areaManage/partition/index.vue
index b7427db..c066bba 100644
--- a/applications/drone-command/src/views/areaManage/partition/index.vue
+++ b/applications/drone-command/src/views/areaManage/partition/index.vue
@@ -83,6 +83,8 @@
 import { fwAreaDividePageApi, fwAreaDivideRemoveApi } from './partitionApi'
 import FormDiaLog from './FormDiaLog.vue'
 import { getDictionaryByCode } from '@/api/system/dictbiz'
+import { saveOperationLog } from '@ztzf/apis'
+import { useRoute } from 'vue-router'
 import { getDictLabel } from '@ztzf/utils'
 
 const initSearchParams = () => ({
@@ -100,6 +102,7 @@
 const queryParamsRef = ref(null) // 查询表单实例
 const dialogRef = ref(null) // 弹框实例
 const dialogVisible = ref(false)
+const route = useRoute()
 
 // 获取列表
 async function getList () {
@@ -137,6 +140,11 @@
 	})
 	const ids = row ? row.id : selectedIds.value.join(',')
 	await fwAreaDivideRemoveApi({ ids })
+	saveOperationLog({
+		requestUri: route.path,
+		title: `${route.name || '区域划分'}-删除`,
+		type: 1,
+	})
 	ElMessage.success('删除成功')
 	selectedIds.value = []
 	getList()
diff --git a/applications/drone-command/src/views/areaManage/precinctInfo/FormDiaLog.vue b/applications/drone-command/src/views/areaManage/precinctInfo/FormDiaLog.vue
index cd6db48..de089a8 100644
--- a/applications/drone-command/src/views/areaManage/precinctInfo/FormDiaLog.vue
+++ b/applications/drone-command/src/views/areaManage/precinctInfo/FormDiaLog.vue
@@ -91,6 +91,8 @@
 import CommonCesiumMap from '@/components/map-container/common-cesium-map.vue'
 import * as Cesium from 'cesium'
 import axios from 'axios'
+import { saveOperationLog } from '@ztzf/apis'
+import { useRoute } from 'vue-router'
 
 const initForm = () => ({
 	address: '', // 位置
@@ -112,6 +114,7 @@
 const titleEnum = ref({ edit: '编辑', view: '查看', add: '新增' })
 const tempLocation = ref({ longitude: null, latitude: null })
 const mapRef = ref(null)
+const route = useRoute()
 
 const rules = {
 	address: fieldRules(true, 50),
@@ -132,6 +135,11 @@
 	submitting.value = true
 	try {
 		await fwPoliceStationSubmitApi(formData.value)
+		saveOperationLog({
+			requestUri: route.path,
+			title: `${route.name || '派出所管理'}-${dialogMode.value === 'add' ? '新增' : '编辑'}`,
+			type: 1,
+		})
 		ElMessage.success(dialogMode.value === 'add' ? '新增成功' : '更新成功')
 		visible.value = false
 		emit('success')
diff --git a/applications/drone-command/src/views/areaManage/precinctInfo/index.vue b/applications/drone-command/src/views/areaManage/precinctInfo/index.vue
index ba31ec4..439956a 100644
--- a/applications/drone-command/src/views/areaManage/precinctInfo/index.vue
+++ b/applications/drone-command/src/views/areaManage/precinctInfo/index.vue
@@ -54,6 +54,8 @@
 import { ElMessage, ElMessageBox } from 'element-plus'
 import { fwPoliceStationPageApi, fwPoliceStationRemoveApi } from './precinctInfoApi'
 import FormDiaLog from './FormDiaLog.vue'
+import { saveOperationLog } from '@ztzf/apis'
+import { useRoute } from 'vue-router'
 
 const initSearchParams = () => ({
 	stationName: '', // 名称
@@ -68,6 +70,7 @@
 const queryParamsRef = ref(null) // 查询表单实例
 const dialogRef = ref(null) // 弹框实例
 const dialogVisible = ref(false)
+const route = useRoute()
 
 // 获取列表
 async function getList () {
@@ -105,6 +108,11 @@
 	})
 	const ids = row ? row.id : selectedIds.value.join(',')
 	await fwPoliceStationRemoveApi({ ids })
+	saveOperationLog({
+		requestUri: route.path,
+		title: `${route.name || '派出所管理'}-删除`,
+		type: 1,
+	})
 	ElMessage.success('删除成功')
 	selectedIds.value = []
 	getList()
diff --git a/applications/drone-command/src/views/areaManage/sceneConfig/FormDiaLog.vue b/applications/drone-command/src/views/areaManage/sceneConfig/FormDiaLog.vue
index e185a0c..b6558c9 100644
--- a/applications/drone-command/src/views/areaManage/sceneConfig/FormDiaLog.vue
+++ b/applications/drone-command/src/views/areaManage/sceneConfig/FormDiaLog.vue
@@ -152,6 +152,8 @@
 import { fwAreaDivideDetailApi, fwAreaDivideListApi } from '../partition/partitionApi'
 import { DrawPolygon } from '@/utils/cesium/DrawPolygon'
 import commandPost from '@/assets/images/dataCockpit/legend/command-post.png'
+import { saveOperationLog } from '@ztzf/apis'
+import { useRoute } from 'vue-router'
 
 const initForm = () => ({
 	sceneName: '', // 场景名称
@@ -180,6 +182,7 @@
 const selectedAreaRows = ref([]) //选中列表
 const dictObj = inject('dictObj')
 const mapRef = ref(null)
+const route = useRoute()
 let viewer
 let redPointEntity
 let leftClickBound = false
@@ -210,6 +213,11 @@
 		formData.value.areaCount = ids.length
 		formData.value.defenseArea = calcDefenseArea(selectedAreaRows.value)
 		await fwDefenseSceneSubmitApi(formData.value)
+		saveOperationLog({
+			requestUri: route.path,
+			title: `${route.name || '场景配置管理'}-${dialogMode.value === 'add' ? '新增' : '编辑'}`,
+			type: 1,
+		})
 		ElMessage.success(dialogMode.value === 'add' ? '新增成功' : '更新成功')
 		visible.value = false
 		emit('success')
diff --git a/applications/drone-command/src/views/areaManage/sceneConfig/index.vue b/applications/drone-command/src/views/areaManage/sceneConfig/index.vue
index e0b2919..817b481 100644
--- a/applications/drone-command/src/views/areaManage/sceneConfig/index.vue
+++ b/applications/drone-command/src/views/areaManage/sceneConfig/index.vue
@@ -96,6 +96,8 @@
 import FormDiaLog from './FormDiaLog.vue'
 import { getDictionaryByCode } from '@/api/system/dictbiz'
 import { getDictLabel } from '@ztzf/utils'
+import { saveOperationLog } from '@ztzf/apis'
+import { useRoute } from 'vue-router'
 
 const initSearchParams = () => ({
 	sceneName: '', // 场景名称
@@ -112,6 +114,7 @@
 const queryParamsRef = ref(null) // 查询表单实例
 const dialogRef = ref(null) // 弹框实例
 const dialogVisible = ref(false)
+const route = useRoute()
 
 // 获取列表
 async function getList() {
@@ -149,6 +152,11 @@
 	})
 	const ids = row ? row.id : selectedIds.value.join(',')
 	await fwDefenseSceneRemoveApi({ ids })
+	saveOperationLog({
+		requestUri: route.path,
+		title: `${route.name || '场景配置管理'}-删除`,
+		type: 1,
+	})
 	ElMessage.success('删除成功')
 	selectedIds.value = []
 	getList()
diff --git a/applications/drone-command/src/views/basicManage/deviceStock/DeviceScrapDiaLog.vue b/applications/drone-command/src/views/basicManage/deviceStock/DeviceScrapDiaLog.vue
index 69323a6..38e194f 100644
--- a/applications/drone-command/src/views/basicManage/deviceStock/DeviceScrapDiaLog.vue
+++ b/applications/drone-command/src/views/basicManage/deviceStock/DeviceScrapDiaLog.vue
@@ -37,6 +37,8 @@
 import { fieldRules } from '@ztzf/utils'
 import { fwDeviceScrapSaveApi } from '@/views/basicManage/deviceStock/fwDeviceScrapApi'
 import dayjs from 'dayjs'
+import { saveOperationLog } from '@ztzf/apis'
+import { useRoute } from 'vue-router'
 
 const initForm = () => ({
 	deviceId: '', // 设备ID
@@ -50,6 +52,7 @@
 const visible = ref(false) // 弹框显隐
 const dialogMode = ref('add') // 弹框模式
 const submitting = ref(false)
+const route = useRoute()
 const dialogReadonly = computed(() => dialogMode.value === 'view')
 const dialogTitle = computed(() => {
 	if (dialogMode.value === 'edit') {
@@ -79,6 +82,11 @@
 	try {
 		formData.value.scrapTime = dayjs().format('YYYY-MM-DD HH:mm:ss')
 		await fwDeviceScrapSaveApi(formData.value)
+		saveOperationLog({
+			requestUri: route.path,
+			title: `${route.name || '设备出入库'}-报废`,
+			type: 1
+		})
 		ElMessage.success('报废成功')
 		visible.value = false
 		emit('success')
diff --git a/applications/drone-command/src/views/basicManage/deviceStock/DeviceTrackDiaLog.vue b/applications/drone-command/src/views/basicManage/deviceStock/DeviceTrackDiaLog.vue
index 4e05934..dac459c 100644
--- a/applications/drone-command/src/views/basicManage/deviceStock/DeviceTrackDiaLog.vue
+++ b/applications/drone-command/src/views/basicManage/deviceStock/DeviceTrackDiaLog.vue
@@ -69,6 +69,8 @@
 import { getLazyTree } from '@/api/base/region'
 import { fieldRules } from '@ztzf/utils'
 import { fwDeviceTrackSubmitApi } from '@/views/basicManage/deviceStock/fwDeviceTrackApi'
+import { saveOperationLog } from '@ztzf/apis'
+import { useRoute } from 'vue-router'
 
 const initForm = () => ({
 	charger: '', // 负责人
@@ -83,6 +85,7 @@
 const visible = ref(false) // 弹框显隐
 const dialogMode = ref('add') // 弹框模式
 const submitting = ref(false)
+const route = useRoute()
 const dialogReadonly = computed(() => dialogMode.value === 'view')
 const dialogTitle = computed(() => {
 	if (dialogMode.value === 'edit') {
@@ -139,6 +142,11 @@
 			outTarget: selected?.label ?? formData.value.outTarget,
 		}
 		await fwDeviceTrackSubmitApi(payload)
+		saveOperationLog({
+			requestUri: route.path,
+			title: `${route.name || '设备出入库'}-出库`,
+			type: 1
+		})
 		ElMessage.success('出库成功')
 		visible.value = false
 		emit('success')
diff --git a/applications/drone-command/src/views/basicManage/deviceStock/FormDiaLog.vue b/applications/drone-command/src/views/basicManage/deviceStock/FormDiaLog.vue
index e91ecf3..c115e2e 100644
--- a/applications/drone-command/src/views/basicManage/deviceStock/FormDiaLog.vue
+++ b/applications/drone-command/src/views/basicManage/deviceStock/FormDiaLog.vue
@@ -178,6 +178,8 @@
 import { getUserListApi } from '@/api/system/user'
 import { fieldRules, getDictLabel } from '@ztzf/utils'
 import { fwDeviceTrackPageApi } from '@/views/basicManage/deviceStock/fwDeviceTrackApi'
+import { saveOperationLog } from '@ztzf/apis'
+import { useRoute } from 'vue-router'
 
 const initForm = () => ({
 	belongDept: '', // 所属部门
@@ -207,6 +209,7 @@
 const dictObj = inject('dictObj')
 const deptTree = inject('deptTree')
 const emit = defineEmits(['success'])
+const route = useRoute()
 const formRef = ref(null) // 表单实例
 const formData = ref(initForm()) // 表单数据
 const visible = ref(false) // 弹框显隐
@@ -264,6 +267,12 @@
 	submitting.value = true
 	try {
 		await fwDeviceSubmitApi(formData.value)
+		const actionText = dialogMode.value === 'add' ? '建档' : '编辑'
+		saveOperationLog({
+			requestUri: route.path,
+			title: `${route.name || '设备出入库'}-${actionText}`,
+			type: 1
+		})
 		ElMessage.success(dialogMode.value === 'add' ? '新增成功' : '更新成功')
 		visible.value = false
 		emit('success')
diff --git a/applications/drone-command/src/views/basicManage/maintainRecord/FormDiaLog.vue b/applications/drone-command/src/views/basicManage/maintainRecord/FormDiaLog.vue
index 8f0234d..e9ffb94 100644
--- a/applications/drone-command/src/views/basicManage/maintainRecord/FormDiaLog.vue
+++ b/applications/drone-command/src/views/basicManage/maintainRecord/FormDiaLog.vue
@@ -128,6 +128,8 @@
 import { ElMessage } from 'element-plus'
 import { fieldRules, getDictLabel } from '@ztzf/utils'
 import { fwDeviceMaintainRecordPageApi } from '@/views/basicManage/maintainRecord/fwDeviceMaintainRecord'
+import { saveOperationLog } from '@ztzf/apis'
+import { useRoute } from 'vue-router'
 import {
 	fwDeviceMaintainPlanDetailApi,
 	fwDeviceMaintainPlanSubmitApi,
@@ -153,6 +155,7 @@
 const deviceList = ref([]) // 设备列表
 const getPlanCycleLabel = inject('getPlanCycleLabel')
 const dictObj = inject('dictObj')
+const route = useRoute()
 const dialogReadonly = computed(() => dialogMode.value === 'view')
 const titleEnum = ref({ edit: '编辑', view: '查看', add: '维护计划' })
 
@@ -197,6 +200,12 @@
 			)],
 		}
 		await fwDeviceMaintainPlanSubmitApi(payload)
+		const actionText = dialogMode.value === 'add' ? '维护计划-新增' : '维护计划-编辑'
+		saveOperationLog({
+			requestUri: route.path,
+			title: `${route.name || '维护记录管理'}-${actionText}`,
+			type: 1
+		})
 		ElMessage.success(dialogMode.value === 'add' ? '新增成功' : '更新成功')
 		visible.value = false
 		emit('success')
diff --git a/applications/drone-command/src/views/basicManage/maintainRecord/MaintenanceDiaLog.vue b/applications/drone-command/src/views/basicManage/maintainRecord/MaintenanceDiaLog.vue
index d54c885..db0e3fd 100644
--- a/applications/drone-command/src/views/basicManage/maintainRecord/MaintenanceDiaLog.vue
+++ b/applications/drone-command/src/views/basicManage/maintainRecord/MaintenanceDiaLog.vue
@@ -78,6 +78,8 @@
 import { fieldRules } from '@ztzf/utils'
 import { fwDeviceMaintainRecordSubmitApi } from '@/views/basicManage/maintainRecord/fwDeviceMaintainRecord'
 import { fwDeviceMaintainPlanDetailApi } from '@/views/basicManage/maintainRecord/maintainRecordApi'
+import { saveOperationLog } from '@ztzf/apis'
+import { useRoute } from 'vue-router'
 
 const initForm = () => ({
 	deviceId: '',
@@ -100,6 +102,7 @@
 const dialogMode = ref('add') // 弹框模式
 const submitting = ref(false) // 提交中
 const deviceList = ref([]) // 设备列表
+const route = useRoute()
 
 const dialogReadonly = computed(() => dialogMode.value === 'view')
 const titleEnum = ref({ edit: '维护', view: '查看', add: '维护计划' })
@@ -131,6 +134,12 @@
 	try {
 		formData.value.maintainTime = dayjs().format('YYYY-MM-DD HH:mm:ss')
 		await fwDeviceMaintainRecordSubmitApi(formData.value)
+		const actionText = dialogMode.value === 'add' ? '维护-新增' : '维护-编辑'
+		saveOperationLog({
+			requestUri: route.path,
+			title: `${route.name || '维护记录管理'}-${actionText}`,
+			type: 1
+		})
 		ElMessage.success(dialogMode.value === 'add' ? '新增成功' : '更新成功')
 		visible.value = false
 		emit('success')
diff --git a/applications/drone-command/src/views/basicManage/maintainRecord/index.vue b/applications/drone-command/src/views/basicManage/maintainRecord/index.vue
index 2707c9e..2d9c4eb 100644
--- a/applications/drone-command/src/views/basicManage/maintainRecord/index.vue
+++ b/applications/drone-command/src/views/basicManage/maintainRecord/index.vue
@@ -85,6 +85,8 @@
 import { getDictLabel } from '@ztzf/utils'
 import FormDiaLog from './FormDiaLog.vue'
 import MaintenanceDiaLog from '@/views/basicManage/maintainRecord/MaintenanceDiaLog.vue'
+import { saveOperationLog } from '@ztzf/apis'
+import { useRoute } from 'vue-router'
 import {
 	fwDeviceMaintainPlanPageApi,
 	fwDeviceMaintainPlanRemoveApi,
@@ -110,6 +112,7 @@
 	deviceAtt: [], // 设备属性
 })
 provide('dictObj', dictObj)
+const route = useRoute()
 const deptTree = ref([]) // 部门树
 const treeProps = {
 	label: 'name',
@@ -168,6 +171,11 @@
 	})
 	const ids = row ? row.id : selectedIds.value.join(',')
 	await fwDeviceMaintainPlanRemoveApi({ ids })
+	saveOperationLog({
+		requestUri: route.path,
+		title: `${route.name || '维护记录管理'}-删除`,
+		type: 1
+	})
 	ElMessage.success('删除成功')
 	selectedIds.value = []
 	getList()
diff --git a/applications/drone-command/src/views/detectionCountermeasure/taskSchedule/FormDiaLog.vue b/applications/drone-command/src/views/detectionCountermeasure/taskSchedule/FormDiaLog.vue
index dedb04a..c9f1591 100644
--- a/applications/drone-command/src/views/detectionCountermeasure/taskSchedule/FormDiaLog.vue
+++ b/applications/drone-command/src/views/detectionCountermeasure/taskSchedule/FormDiaLog.vue
@@ -168,6 +168,8 @@
 import { fieldRules } from '@ztzf/utils'
 import { PublicCesium } from '@/utils/cesium/publicCesium'
 import * as Cesium from 'cesium'
+import { saveOperationLog } from '@ztzf/apis'
+import { useRoute } from 'vue-router'
 
 // 初始化表单
 const initForm = () => ({
@@ -211,6 +213,7 @@
 const areaList = ref([]) // 区域列表
 const sceneList = ref([]) // 场景列表
 const deviceStatus = ref('')
+const route = useRoute()
 
 const rules = {
 	deviceId: fieldRules(true),
@@ -286,6 +289,14 @@
 			formData.value.dispatchEndTime = formData.value.dispatchDateRange[1]
 		}
 		await fwTaskScheduleSubmitApi(formData.value)
+
+		const actionText = dialogMode.value === 'add' ? '新增' : '修改'
+		saveOperationLog({
+			requestUri: route.path,
+			title: `${route.name || '任务调度'}-${actionText}`,
+			type: 1
+		})
+
 		ElMessage.success(dialogMode.value === 'add' ? '新增成功' : '更新成功')
 		visible.value = false
 		emit('success')
diff --git a/applications/drone-command/src/views/detectionCountermeasure/taskSchedule/index.vue b/applications/drone-command/src/views/detectionCountermeasure/taskSchedule/index.vue
index 9ba4167..aff4b46 100644
--- a/applications/drone-command/src/views/detectionCountermeasure/taskSchedule/index.vue
+++ b/applications/drone-command/src/views/detectionCountermeasure/taskSchedule/index.vue
@@ -124,6 +124,8 @@
 import { getDictionaryByCode } from '@/api/system/dictbiz'
 import FormDiaLog from './FormDiaLog.vue'
 import { getDictLabel } from '@ztzf/utils'
+import { saveOperationLog } from '@ztzf/apis'
+import { useRoute } from 'vue-router'
 
 // 初始化查询参数
 const initSearchParams = () => ({
@@ -146,6 +148,7 @@
 	deviceStatus: [], // 设备状态
 })
 const deviceList = ref([]) // 设备列表
+const route = useRoute()
 
 // 注入字典到子组件
 provide('dictObj', dictObj)
@@ -197,6 +200,11 @@
 	})
 	const ids = row ? row.id : selectedIds.value.join(',')
 	await fwTaskScheduleRemoveApi({ ids })
+	saveOperationLog({
+		requestUri: route.path,
+		title: `${route.name || '任务调度'}-删除`,
+		type: 1
+	})
 	ElMessage.success('删除成功')
 	selectedIds.value = []
 	getList()
diff --git a/applications/drone-command/src/views/permissionManage/permissionDept/FormDiaLog.vue b/applications/drone-command/src/views/permissionManage/permissionDept/FormDiaLog.vue
index c171ead..74c37cd 100644
--- a/applications/drone-command/src/views/permissionManage/permissionDept/FormDiaLog.vue
+++ b/applications/drone-command/src/views/permissionManage/permissionDept/FormDiaLog.vue
@@ -129,6 +129,8 @@
 import { add, getDept, getDeptTree, update } from '@/api/system/dept'
 import { getLazyTree } from '@/api/base/region'
 import { fieldRules, getDictLabel } from '@ztzf/utils'
+import { saveOperationLog } from '@ztzf/apis'
+import { useRoute } from 'vue-router'
 
 const initForm = () => ({
 	deptName: '',
@@ -189,7 +191,9 @@
 const visible = ref(false)
 const dialogMode = ref('add')
 const submitting = ref(false)
+const isAddChild = ref(false)
 const dialogReadonly = computed(() => dialogMode.value === 'view')
+const route = useRoute()
 const dialogTitle = computed(() => {
 	if (dialogMode.value === 'edit') return '编辑'
 	if (dialogMode.value === 'view') return '查看'
@@ -259,6 +263,12 @@
 		} else {
 			await add(payload)
 		}
+		const actionText = dialogMode.value === 'add' ? (isAddChild.value ? '新增子项' : '新增') : '编辑'
+		saveOperationLog({
+			requestUri: route.path,
+			title: `${route.name || '部门管理'}-${actionText}`,
+			type: 1
+		})
 		ElMessage.success(dialogMode.value === 'add' ? '新增成功' : '更新成功')
 		visible.value = false
 		emit('success')
@@ -279,11 +289,13 @@
 
 function handleClosed() {
 	formData.value = initForm()
+	isAddChild.value = false
 }
 
 async function open({ mode, row, parent } = {}) {
 	dialogMode.value = mode || 'add'
 	visible.value = true
+	isAddChild.value = mode === 'add' && !!parent?.id
 	await getDeptTree().then(res => {
 		if (deptTree) {
 			deptTree.value = res?.data?.data ?? []
diff --git a/applications/drone-command/src/views/permissionManage/permissionDept/index.vue b/applications/drone-command/src/views/permissionManage/permissionDept/index.vue
index 2f74e2d..8227a83 100644
--- a/applications/drone-command/src/views/permissionManage/permissionDept/index.vue
+++ b/applications/drone-command/src/views/permissionManage/permissionDept/index.vue
@@ -102,6 +102,8 @@
 import { getChildLazyTree, getDeptTree, getLazyList, remove } from '@/api/system/dept'
 import { getDictLabel } from '@ztzf/utils'
 import FormDiaLog from './FormDiaLog.vue'
+import { saveOperationLog } from '@ztzf/apis'
+import { useRoute } from 'vue-router'
 
 const initSearchParams = () => ({
 	deptName: '',
@@ -122,6 +124,7 @@
 	org_nature: [],
 })
 const deptTree = ref([])
+const route = useRoute()
 
 provide('dictObj', dictObj)
 provide('deptTree', deptTree)
@@ -180,6 +183,11 @@
 	})
 	const ids = row ? row.id : selectedIds.value.join(',')
 	await remove(ids)
+	saveOperationLog({
+		requestUri: route.path,
+		title: `${route.name || '部门管理'}-删除`,
+		type: 1,
+	})
 	ElMessage.success('删除成功')
 	selectedIds.value = []
 	getList()
diff --git a/applications/drone-command/src/views/permissionManage/permissionRole/FormDiaLog.vue b/applications/drone-command/src/views/permissionManage/permissionRole/FormDiaLog.vue
index 9e39032..66d2840 100644
--- a/applications/drone-command/src/views/permissionManage/permissionRole/FormDiaLog.vue
+++ b/applications/drone-command/src/views/permissionManage/permissionRole/FormDiaLog.vue
@@ -70,6 +70,8 @@
 import { ElMessage } from 'element-plus'
 import { add, getRoleTreeById, update } from '@/api/system/role'
 import { fieldRules } from '@ztzf/utils'
+import { saveOperationLog } from '@ztzf/apis'
+import { useRoute } from 'vue-router'
 
 const initForm = () => ({
 	roleName: '',
@@ -92,6 +94,7 @@
 const dialogMode = ref('add')
 const submitting = ref(false)
 const dialogReadonly = computed(() => dialogMode.value === 'view')
+const route = useRoute()
 const dialogTitle = computed(() => {
 	if (dialogMode.value === 'edit') return '编辑'
 	if (dialogMode.value === 'view') return '查看'
@@ -117,8 +120,18 @@
 	try {
 		if (dialogMode.value === 'edit') {
 			await update(formData.value)
+			saveOperationLog({
+				requestUri: route.path,
+				title: `${route.name || '角色管理'}-编辑`,
+				type: 1,
+			})
 		} else {
 			await add(formData.value)
+			saveOperationLog({
+				requestUri: route.path,
+				title: `${route.name || '角色管理'}-新增`,
+				type: 1,
+			})
 		}
 		ElMessage.success(dialogMode.value === 'add' ? '新增成功' : '更新成功')
 		visible.value = false
diff --git a/applications/drone-command/src/views/permissionManage/permissionRole/RolePermissionDialog.vue b/applications/drone-command/src/views/permissionManage/permissionRole/RolePermissionDialog.vue
index 4df6303..c909480 100644
--- a/applications/drone-command/src/views/permissionManage/permissionRole/RolePermissionDialog.vue
+++ b/applications/drone-command/src/views/permissionManage/permissionRole/RolePermissionDialog.vue
@@ -79,6 +79,8 @@
 <script setup>
 import { ref } from 'vue'
 import { grant, grantTree, getRole } from '@/api/system/role'
+import { saveOperationLog } from '@ztzf/apis'
+import { useRoute } from 'vue-router'
 
 const visible = ref(false)
 const roleId = ref('')
@@ -107,6 +109,7 @@
 const droneControl = ref(null)
 
 const emit = defineEmits(['success'])
+const route = useRoute()
 
 function resetState() {
 	menuGrantList.value = []
@@ -157,6 +160,11 @@
 		[],
 		[]
 	).then(() => {
+		saveOperationLog({
+			requestUri: route.path,
+			title: `${route.name || '角色管理'}-权限设置`,
+			type: 1,
+		})
 		visible.value = false
 		emit('success')
 	})
diff --git a/applications/drone-command/src/views/permissionManage/permissionRole/index.vue b/applications/drone-command/src/views/permissionManage/permissionRole/index.vue
index 7d24142..726ec3c 100644
--- a/applications/drone-command/src/views/permissionManage/permissionRole/index.vue
+++ b/applications/drone-command/src/views/permissionManage/permissionRole/index.vue
@@ -93,6 +93,8 @@
 import { useStore } from 'vuex'
 import FormDiaLog from './FormDiaLog.vue'
 import RolePermissionDialog from './RolePermissionDialog.vue'
+import { saveOperationLog } from '@ztzf/apis'
+import { useRoute } from 'vue-router'
 
 const initSearchParams = () => ({
 	roleName: '',
@@ -112,6 +114,7 @@
 const roleDialogRef = ref(null)
 const store = useStore()
 const userInfo = computed(() => store.getters.userInfo || {})
+const route = useRoute()
 
 async function loadList() {
 	loading.value = true
@@ -171,6 +174,11 @@
 	})
 	const ids = row ? row.id : selectedIds.value.join(',')
 	await remove(ids)
+	saveOperationLog({
+		requestUri: route.path,
+		title: `${route.name || '角色管理'}-删除`,
+		type: 1,
+	})
 	ElMessage.success('删除成功')
 	selectedIds.value = []
 	loadList()
diff --git a/applications/drone-command/src/views/permissionManage/permissionUser/FormDiaLog.vue b/applications/drone-command/src/views/permissionManage/permissionUser/FormDiaLog.vue
index 62957b1..4cea05b 100644
--- a/applications/drone-command/src/views/permissionManage/permissionUser/FormDiaLog.vue
+++ b/applications/drone-command/src/views/permissionManage/permissionUser/FormDiaLog.vue
@@ -246,6 +246,8 @@
 import { getDeptTree } from '@/api/system/dept'
 import { getRoleTree } from '@/api/system/role'
 import func from '@/utils/func'
+import { saveOperationLog } from '@ztzf/apis'
+import { useRoute } from 'vue-router'
 
 const initForm = () => ({
 	account: '',
@@ -289,6 +291,7 @@
 })
 const roleTree = ref([])
 const deptTree = ref([])
+const route = useRoute()
 
 const validatePass = (rule, value, callback) => {
 	if (value === '') {
@@ -363,8 +366,18 @@
 		submitData.name = submitData.realName
 		if (dialogMode.value === 'add') {
 			await add(submitData)
+			saveOperationLog({
+				requestUri: route.path,
+				title: `${route.name || '用户管理'}-新增`,
+				type: 1
+			})
 		} else {
 			await update(submitData)
+			saveOperationLog({
+				requestUri: route.path,
+				title: `${route.name || '用户管理'}-编辑`,
+				type: 1
+			})
 		}
 		ElMessage.success(dialogMode.value === 'add' ? '新增成功' : '更新成功')
 		visible.value = false
diff --git a/applications/drone-command/src/views/permissionManage/permissionUser/index.vue b/applications/drone-command/src/views/permissionManage/permissionUser/index.vue
index 48197dd..268b45a 100644
--- a/applications/drone-command/src/views/permissionManage/permissionUser/index.vue
+++ b/applications/drone-command/src/views/permissionManage/permissionUser/index.vue
@@ -101,6 +101,8 @@
 import { getList as getUserList, remove } from '@/api/system/user'
 import { useStore } from 'vuex'
 import FormDiaLog from './FormDiaLog.vue'
+import { saveOperationLog } from '@ztzf/apis'
+import { useRoute } from 'vue-router'
 
 const initSearchParams = () => ({
 	account: '',
@@ -124,6 +126,7 @@
 }
 const store = useStore()
 const permission = computed(() => store.getters.permission || {})
+const route = useRoute()
 
 async function getList() {
 	loading.value = true
@@ -178,6 +181,11 @@
 	})
 	const ids = row ? row.id : selectedIds.value.join(',')
 	await remove(ids)
+	saveOperationLog({
+		requestUri: route.path,
+		title: `${route.name || '用户管理'}-删除`,
+		type: 1
+	})
 	ElMessage.success('删除成功')
 	selectedIds.value = []
 	getList()
diff --git a/applications/drone-command/src/views/recordManage/alarmRecords/index.vue b/applications/drone-command/src/views/recordManage/alarmRecords/index.vue
index bac132f..952a5da 100644
--- a/applications/drone-command/src/views/recordManage/alarmRecords/index.vue
+++ b/applications/drone-command/src/views/recordManage/alarmRecords/index.vue
@@ -109,6 +109,8 @@
 import { exportFwDroneAlarmRecordApi, fwDroneAlarmRecordPageApi } from './fwDroneAlarmRecord'
 import FormDiaLog from './FormDiaLog.vue'
 import { blobDownload, dateRangeFormat, getDictLabel } from '@ztzf/utils'
+import { saveOperationLog } from '@ztzf/apis'
+import { useRoute } from 'vue-router'
 
 const initSearchParams = () => ({
 	droneName: '', // 无人机名称
@@ -129,6 +131,7 @@
 })
 const dateRange = ref([])
 const exportLoading = ref(false)
+const route = useRoute()
 const deviceTypeMap = computed(() => {
 	const map = new Map()
 	dictObj.value.deviceType.forEach(item => {
@@ -175,6 +178,11 @@
 	exportLoading.value = true
 	exportFwDroneAlarmRecordApi({ ids: selectedIds.value.join(',') })
 		.then(res => {
+			saveOperationLog({
+				requestUri: route.path,
+				title: `${route.name || '报警记录'}-导出`,
+				type: 1,
+			})
 			blobDownload(res)
 		})
 		.finally(() => {
diff --git a/applications/drone-command/src/views/recordManage/historyTracks/index.vue b/applications/drone-command/src/views/recordManage/historyTracks/index.vue
index cf12e44..92d4abd 100644
--- a/applications/drone-command/src/views/recordManage/historyTracks/index.vue
+++ b/applications/drone-command/src/views/recordManage/historyTracks/index.vue
@@ -95,6 +95,8 @@
 import { onMounted, ref, nextTick } from 'vue'
 import { exportFwDroneFlightRecordApi, fwDroneFlightRecordPageApi } from './fwDroneFlightRecord'
 import { blobDownload, dateRangeFormat } from '@ztzf/utils'
+import { saveOperationLog } from '@ztzf/apis'
+import { useRoute } from 'vue-router'
 import TrajectoryDiaLog from '@/views/recordManage/historyTracks/TrajectoryDiaLog.vue'
 
 const initSearchParams = () => ({
@@ -113,6 +115,7 @@
 const dateRange = ref([])
 const exportLoading = ref(false)
 const dialogRef = ref(null) // 弹框实例
+const route = useRoute()
 
 // 获取列表
 async function getList() {
@@ -165,6 +168,11 @@
 		ids: ids.join(','),
 	})
 		.then(res => {
+			saveOperationLog({
+				requestUri: route.path,
+				title: `${route.name || '历史轨迹'}-导出`,
+				type: 1,
+			})
 			blobDownload(res)
 		})
 		.finally(() => {
diff --git a/applications/drone-command/src/views/system/user/FormDiaLog.vue b/applications/drone-command/src/views/system/user/FormDiaLog.vue
index 8aba6fe..ab818fd 100644
--- a/applications/drone-command/src/views/system/user/FormDiaLog.vue
+++ b/applications/drone-command/src/views/system/user/FormDiaLog.vue
@@ -260,6 +260,8 @@
 import { getDeptTree } from '@/api/system/dept'
 import { getRoleTree } from '@/api/system/role'
 import func from '@/utils/func'
+import { saveOperationLog } from '@ztzf/apis'
+import { useRoute } from 'vue-router'
 
 // 初始化表单
 const initForm = () => ({
@@ -300,6 +302,7 @@
 const titleEnum = ref({ edit: '编辑用户', view: '查看用户', add: '新增用户' })
 const roleTree = ref([])
 const deptTree = ref([])
+const route = useRoute()
 
 // 密码验证
 const validatePass = (rule, value, callback) => {
@@ -383,9 +386,19 @@
 
 		if (dialogMode.value === 'add') {
 			await add(submitData)
+			saveOperationLog({
+				requestUri: route.path,
+				title: `${route.name || '用户管理01'}-新增`,
+				type: 1
+			})
 			ElMessage.success('新增成功')
 		} else {
 			await update(submitData)
+			saveOperationLog({
+				requestUri: route.path,
+				title: `${route.name || '用户管理01'}-编辑`,
+				type: 1
+			})
 			ElMessage.success('更新成功')
 		}
 		visible.value = false
diff --git a/applications/drone-command/src/views/system/user/index.vue b/applications/drone-command/src/views/system/user/index.vue
index af2de07..fe36b3d 100644
--- a/applications/drone-command/src/views/system/user/index.vue
+++ b/applications/drone-command/src/views/system/user/index.vue
@@ -225,6 +225,8 @@
 import NProgress from 'nprogress'
 import 'nprogress/nprogress.css'
 import func from '@/utils/func'
+import { saveOperationLog } from '@ztzf/apis'
+import { useRoute } from 'vue-router'
 
 const store = useStore()
 const userInfo = computed(() => store.getters.userInfo)
@@ -249,6 +251,7 @@
 const dialogVisible = ref(false)
 const auditMode = ref(false)
 const treeDeptId = ref('')
+const route = useRoute()
 
 // 部门树
 const deptTree = ref([])
@@ -341,6 +344,11 @@
 	await ElMessageBox.confirm(`确认删除${tips}吗?`, '提示', { type: 'warning' })
 	const ids = row ? row.id : selectedIds.value.join(',')
 	await remove(ids)
+	saveOperationLog({
+		requestUri: route.path,
+		title: `${route.name || '用户管理01'}-删除`,
+		type: 1
+	})
 	ElMessage.success('删除成功')
 	selectedIds.value = []
 	getList()

--
Gitblit v1.9.3