mirror of
				https://gitee.com/hhyykk/ipms-sjy-ui.git
				synced 2025-11-04 04:08:44 +08:00 
			
		
		
		
	初始化项目,自 v1.7.1 版本开始
This commit is contained in:
		
							
								
								
									
										67
									
								
								src/views/system/operatelog/index.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										67
									
								
								src/views/system/operatelog/index.vue
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,67 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <ContentWrap>
 | 
			
		||||
    <!-- 列表 -->
 | 
			
		||||
    <XTable @register="registerTable">
 | 
			
		||||
      <template #toolbar_buttons>
 | 
			
		||||
        <!-- 操作:新增 -->
 | 
			
		||||
        <XButton
 | 
			
		||||
          type="warning"
 | 
			
		||||
          preIcon="ep:download"
 | 
			
		||||
          :title="t('action.export')"
 | 
			
		||||
          v-hasPermi="['system:operate-log:export']"
 | 
			
		||||
          @click="exportList('操作日志.xls')"
 | 
			
		||||
        />
 | 
			
		||||
      </template>
 | 
			
		||||
      <template #duration="{ row }">
 | 
			
		||||
        <span>{{ row.duration + 'ms' }}</span>
 | 
			
		||||
      </template>
 | 
			
		||||
      <template #resultCode="{ row }">
 | 
			
		||||
        <span>{{ row.resultCode === 0 ? '成功' : '失败' }}</span>
 | 
			
		||||
      </template>
 | 
			
		||||
      <template #actionbtns_default="{ row }">
 | 
			
		||||
        <!-- 操作:详情 -->
 | 
			
		||||
        <XTextButton preIcon="ep:view" :title="t('action.detail')" @click="handleDetail(row)" />
 | 
			
		||||
      </template>
 | 
			
		||||
    </XTable>
 | 
			
		||||
  </ContentWrap>
 | 
			
		||||
  <!-- 弹窗 -->
 | 
			
		||||
  <XModal id="postModel" v-model="dialogVisible" :title="t('action.detail')">
 | 
			
		||||
    <!-- 对话框(详情) -->
 | 
			
		||||
    <Descriptions :schema="allSchemas.detailSchema" :data="detailData">
 | 
			
		||||
      <template #resultCode="{ row }">
 | 
			
		||||
        <span>{{ row.resultCode === 0 ? '成功' : '失败' }}</span>
 | 
			
		||||
      </template>
 | 
			
		||||
      <template #duration="{ row }">
 | 
			
		||||
        <span>{{ row.duration + 'ms' }}</span>
 | 
			
		||||
      </template>
 | 
			
		||||
    </Descriptions>
 | 
			
		||||
    <template #footer>
 | 
			
		||||
      <!-- 按钮:关闭 -->
 | 
			
		||||
      <XButton :loading="actionLoading" :title="t('dialog.close')" @click="dialogVisible = false" />
 | 
			
		||||
    </template>
 | 
			
		||||
  </XModal>
 | 
			
		||||
</template>
 | 
			
		||||
<script setup lang="ts" name="OperateLog">
 | 
			
		||||
// 业务相关的 import
 | 
			
		||||
import * as OperateLogApi from '@/api/system/operatelog'
 | 
			
		||||
import { allSchemas } from './operatelog.data'
 | 
			
		||||
 | 
			
		||||
const { t } = useI18n() // 国际化
 | 
			
		||||
// 列表相关的变量
 | 
			
		||||
const [registerTable, { exportList }] = useXTable({
 | 
			
		||||
  allSchemas: allSchemas,
 | 
			
		||||
  getListApi: OperateLogApi.getOperateLogPageApi,
 | 
			
		||||
  exportListApi: OperateLogApi.exportOperateLogApi
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
// 弹窗相关的变量
 | 
			
		||||
const dialogVisible = ref(false) // 是否显示弹出层
 | 
			
		||||
const actionLoading = ref(false) // 按钮 Loading
 | 
			
		||||
const detailData = ref() // 详情 Ref
 | 
			
		||||
// 详情
 | 
			
		||||
const handleDetail = (row: OperateLogApi.OperateLogVO) => {
 | 
			
		||||
  // 设置数据
 | 
			
		||||
  detailData.value = row
 | 
			
		||||
  dialogVisible.value = true
 | 
			
		||||
}
 | 
			
		||||
</script>
 | 
			
		||||
							
								
								
									
										106
									
								
								src/views/system/operatelog/operatelog.data.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										106
									
								
								src/views/system/operatelog/operatelog.data.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,106 @@
 | 
			
		||||
import type { VxeCrudSchema } from '@/hooks/web/useVxeCrudSchemas'
 | 
			
		||||
 | 
			
		||||
const { t } = useI18n() // 国际化
 | 
			
		||||
 | 
			
		||||
const crudSchemas = reactive<VxeCrudSchema>({
 | 
			
		||||
  primaryKey: 'id',
 | 
			
		||||
  primaryType: 'seq',
 | 
			
		||||
  primaryTitle: '日志编号',
 | 
			
		||||
  action: true,
 | 
			
		||||
  actionWidth: '80px',
 | 
			
		||||
  columns: [
 | 
			
		||||
    {
 | 
			
		||||
      title: '操作模块',
 | 
			
		||||
      field: 'module',
 | 
			
		||||
      isSearch: true
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      title: '操作名',
 | 
			
		||||
      field: 'name'
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      title: '操作类型',
 | 
			
		||||
      field: 'type',
 | 
			
		||||
      dictType: DICT_TYPE.SYSTEM_OPERATE_TYPE,
 | 
			
		||||
      dictClass: 'number',
 | 
			
		||||
      isSearch: true
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      title: '请求方法名',
 | 
			
		||||
      field: 'requestMethod',
 | 
			
		||||
      isTable: false
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      title: '请求地址',
 | 
			
		||||
      field: 'requestUrl',
 | 
			
		||||
      isTable: false
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      title: '操作人员',
 | 
			
		||||
      field: 'userNickname',
 | 
			
		||||
      isSearch: true
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      title: '操作明细',
 | 
			
		||||
      field: 'content',
 | 
			
		||||
      isTable: false
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      title: '用户 IP',
 | 
			
		||||
      field: 'userIp',
 | 
			
		||||
      isTable: false
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      title: 'userAgent',
 | 
			
		||||
      field: 'userAgent'
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      title: '操作结果',
 | 
			
		||||
      field: 'resultCode',
 | 
			
		||||
      table: {
 | 
			
		||||
        slots: {
 | 
			
		||||
          default: 'resultCode'
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      title: '操作结果',
 | 
			
		||||
      field: 'success',
 | 
			
		||||
      isTable: false,
 | 
			
		||||
      isDetail: false,
 | 
			
		||||
      search: {
 | 
			
		||||
        show: true,
 | 
			
		||||
        itemRender: {
 | 
			
		||||
          name: '$select',
 | 
			
		||||
          props: { placeholder: t('common.selectText') },
 | 
			
		||||
          options: [
 | 
			
		||||
            { label: '成功', value: 'true' },
 | 
			
		||||
            { label: '失败', value: 'false' }
 | 
			
		||||
          ]
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      title: '操作日期',
 | 
			
		||||
      field: 'startTime',
 | 
			
		||||
      formatter: 'formatDate',
 | 
			
		||||
      isForm: false,
 | 
			
		||||
      search: {
 | 
			
		||||
        show: true,
 | 
			
		||||
        itemRender: {
 | 
			
		||||
          name: 'XDataTimePicker'
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      title: '执行时长',
 | 
			
		||||
      field: 'duration',
 | 
			
		||||
      table: {
 | 
			
		||||
        slots: {
 | 
			
		||||
          default: 'duration'
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
})
 | 
			
		||||
export const { allSchemas } = useVxeCrudSchemas(crudSchemas)
 | 
			
		||||
		Reference in New Issue
	
	Block a user