2 changed files with 151 additions and 1 deletions
			
			
		@ -0,0 +1,110 @@ | 
				
			|||||||
 | 
					import { BasicColumn, FormSchema, useRender } from '@/components/Table' | 
				
			||||||
 | 
					import { DICT_TYPE, getIntDictOptions } from '@/utils/dict' | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const columns: BasicColumn[] = [ | 
				
			||||||
 | 
					  { | 
				
			||||||
 | 
					    title: '日志编号', | 
				
			||||||
 | 
					    dataIndex: 'id', | 
				
			||||||
 | 
					    width: 100 | 
				
			||||||
 | 
					  }, | 
				
			||||||
 | 
					  { | 
				
			||||||
 | 
					    title: '用户编号', | 
				
			||||||
 | 
					    dataIndex: 'userId', | 
				
			||||||
 | 
					    width: 100 | 
				
			||||||
 | 
					  }, | 
				
			||||||
 | 
					  { | 
				
			||||||
 | 
					    title: '用户类型', | 
				
			||||||
 | 
					    dataIndex: 'userType', | 
				
			||||||
 | 
					    width: 120, | 
				
			||||||
 | 
					    customRender: ({ text }) => { | 
				
			||||||
 | 
					      return useRender.renderDict(text, DICT_TYPE.USER_TYPE) | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					  }, | 
				
			||||||
 | 
					  { | 
				
			||||||
 | 
					    title: '应用名', | 
				
			||||||
 | 
					    dataIndex: 'applicationName', | 
				
			||||||
 | 
					    width: 120 | 
				
			||||||
 | 
					  }, | 
				
			||||||
 | 
					  { | 
				
			||||||
 | 
					    title: '请求方法名', | 
				
			||||||
 | 
					    dataIndex: 'requestMethod', | 
				
			||||||
 | 
					    width: 120 | 
				
			||||||
 | 
					  }, | 
				
			||||||
 | 
					  { | 
				
			||||||
 | 
					    title: '请求地址', | 
				
			||||||
 | 
					    dataIndex: 'requestUrl', | 
				
			||||||
 | 
					    width: 250 | 
				
			||||||
 | 
					  }, | 
				
			||||||
 | 
					  { | 
				
			||||||
 | 
					    title: '请求时间', | 
				
			||||||
 | 
					    dataIndex: 'beginTime', | 
				
			||||||
 | 
					    width: 180, | 
				
			||||||
 | 
					    customRender: ({ text }) => { | 
				
			||||||
 | 
					      return useRender.renderDate(text) | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					  }, | 
				
			||||||
 | 
					  { | 
				
			||||||
 | 
					    title: '执行时长', | 
				
			||||||
 | 
					    dataIndex: 'duration', | 
				
			||||||
 | 
					    width: 180, | 
				
			||||||
 | 
					    customRender: ({ text }) => { | 
				
			||||||
 | 
					      return useRender.renderText(text, 'ms') | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					  }, | 
				
			||||||
 | 
					  { | 
				
			||||||
 | 
					    title: '操作结果', | 
				
			||||||
 | 
					    dataIndex: 'status', | 
				
			||||||
 | 
					    width: 180, | 
				
			||||||
 | 
					    customRender: ({ record }) => { | 
				
			||||||
 | 
					      return useRender.renderTag(record.resultCode === 0 ? '成功' : '失败(' + record.resultMsg + ')') | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					  } | 
				
			||||||
 | 
					] | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const searchFormSchema: FormSchema[] = [ | 
				
			||||||
 | 
					  { | 
				
			||||||
 | 
					    label: '用户编号', | 
				
			||||||
 | 
					    field: 'userId', | 
				
			||||||
 | 
					    component: 'Input', | 
				
			||||||
 | 
					    colProps: { span: 8 } | 
				
			||||||
 | 
					  }, | 
				
			||||||
 | 
					  { | 
				
			||||||
 | 
					    label: '用户类型', | 
				
			||||||
 | 
					    field: 'userType', | 
				
			||||||
 | 
					    component: 'Select', | 
				
			||||||
 | 
					    componentProps: { | 
				
			||||||
 | 
					      options: getIntDictOptions(DICT_TYPE.USER_TYPE) | 
				
			||||||
 | 
					    }, | 
				
			||||||
 | 
					    colProps: { span: 8 } | 
				
			||||||
 | 
					  }, | 
				
			||||||
 | 
					  { | 
				
			||||||
 | 
					    label: '应用名', | 
				
			||||||
 | 
					    field: 'applicationName', | 
				
			||||||
 | 
					    component: 'Input', | 
				
			||||||
 | 
					    colProps: { span: 8 } | 
				
			||||||
 | 
					  }, | 
				
			||||||
 | 
					  { | 
				
			||||||
 | 
					    label: '请求地址', | 
				
			||||||
 | 
					    field: 'requestUrl', | 
				
			||||||
 | 
					    component: 'Input', | 
				
			||||||
 | 
					    colProps: { span: 8 } | 
				
			||||||
 | 
					  }, | 
				
			||||||
 | 
					  { | 
				
			||||||
 | 
					    label: '请求时间', | 
				
			||||||
 | 
					    field: 'beginTime', | 
				
			||||||
 | 
					    component: 'RangePicker', | 
				
			||||||
 | 
					    colProps: { span: 8 } | 
				
			||||||
 | 
					  }, | 
				
			||||||
 | 
					  { | 
				
			||||||
 | 
					    label: '执行时长', | 
				
			||||||
 | 
					    field: 'duration', | 
				
			||||||
 | 
					    component: 'Input', | 
				
			||||||
 | 
					    colProps: { span: 8 } | 
				
			||||||
 | 
					  }, | 
				
			||||||
 | 
					  { | 
				
			||||||
 | 
					    label: '结果码', | 
				
			||||||
 | 
					    field: 'resultCode', | 
				
			||||||
 | 
					    component: 'Input', | 
				
			||||||
 | 
					    colProps: { span: 8 } | 
				
			||||||
 | 
					  } | 
				
			||||||
 | 
					] | 
				
			||||||
@ -1,3 +1,43 @@ | 
				
			|||||||
<template> | 
					<template> | 
				
			||||||
  <div>开发中</div> | 
					  <div> | 
				
			||||||
 | 
					    <BasicTable @register="registerTable"> | 
				
			||||||
 | 
					      <template #toolbar> | 
				
			||||||
 | 
					        <a-button type="warning" @click="handleExport"> {{ t('action.export') }} </a-button> | 
				
			||||||
 | 
					      </template> | 
				
			||||||
 | 
					    </BasicTable> | 
				
			||||||
 | 
					  </div> | 
				
			||||||
</template> | 
					</template> | 
				
			||||||
 | 
					<script lang="ts" setup name="ApiErrorLog"> | 
				
			||||||
 | 
					import { useI18n } from '@/hooks/web/useI18n' | 
				
			||||||
 | 
					import { useMessage } from '@/hooks/web/useMessage' | 
				
			||||||
 | 
					import { BasicTable, useTable } from '@/components/Table' | 
				
			||||||
 | 
					import { getApiAccessLogPage, exportApiAccessLog, ApiAccessLogExportReqVO } from '@/api/infra/apiAccessLog' | 
				
			||||||
 | 
					import { columns, searchFormSchema } from './apiAccessLog.data' | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const { t } = useI18n() | 
				
			||||||
 | 
					const { createConfirm, createMessage } = useMessage() | 
				
			||||||
 | 
					const [registerTable, { getForm }] = useTable({ | 
				
			||||||
 | 
					  title: '访问日志列表', | 
				
			||||||
 | 
					  api: getApiAccessLogPage, | 
				
			||||||
 | 
					  columns, | 
				
			||||||
 | 
					  formConfig: { | 
				
			||||||
 | 
					    labelWidth: 120, | 
				
			||||||
 | 
					    schemas: searchFormSchema | 
				
			||||||
 | 
					  }, | 
				
			||||||
 | 
					  useSearchForm: true, | 
				
			||||||
 | 
					  showTableSetting: true, | 
				
			||||||
 | 
					  showIndexColumn: false | 
				
			||||||
 | 
					}) | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					async function handleExport() { | 
				
			||||||
 | 
					  createConfirm({ | 
				
			||||||
 | 
					    title: t('common.exportTitle'), | 
				
			||||||
 | 
					    iconType: 'warning', | 
				
			||||||
 | 
					    content: t('common.exportMessage'), | 
				
			||||||
 | 
					    async onOk() { | 
				
			||||||
 | 
					      await exportApiAccessLog(getForm().getFieldsValue() as ApiAccessLogExportReqVO) | 
				
			||||||
 | 
					      createMessage.success(t('common.exportSuccessText')) | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					  }) | 
				
			||||||
 | 
					} | 
				
			||||||
 | 
					</script> | 
				
			||||||
 | 
				
			|||||||
		Reference in new issue