From fbaf95937087cb2b010649f62d853d9ef87e5efb Mon Sep 17 00:00:00 2001 From: yanchangshan <5333290+yanchangshan@user.noreply.gitee.com> Date: Wed, 22 Mar 2023 11:38:09 +0000 Subject: [PATCH 1/4] add src/views/infra/apiAccessLog/ApiAccessLog.data.ts. Signed-off-by: yanchangshan <5333290+yanchangshan@user.noreply.gitee.com> --- .../infra/apiAccessLog/ApiAccessLog.data.ts | 349 ++++++++++++++++++ 1 file changed, 349 insertions(+) create mode 100644 src/views/infra/apiAccessLog/ApiAccessLog.data.ts diff --git a/src/views/infra/apiAccessLog/ApiAccessLog.data.ts b/src/views/infra/apiAccessLog/ApiAccessLog.data.ts new file mode 100644 index 000000000..eab6e3c60 --- /dev/null +++ b/src/views/infra/apiAccessLog/ApiAccessLog.data.ts @@ -0,0 +1,349 @@ +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: 'traceId', + width: 100 + }, + { + title: '用户编号', + dataIndex: 'userId', + width: 100 + }, + { + title: '用户类型', + dataIndex: 'userType', + width: 180, + customRender: ({ text }) => { + return useRender.renderDict(text, DICT_TYPE.USER_TYPE) + } + }, + { + title: '应用名', + dataIndex: 'applicationName', + width: 100 + }, + { + title: '请求方法名', + dataIndex: 'requestMethod', + width: 100 + }, + { + title: '请求地址', + dataIndex: 'requestUrl', + width: 100 + }, + { + title: '请求参数', + dataIndex: 'requestParams', + width: 100 + }, + { + title: '用户 IP', + dataIndex: 'userIp', + width: 100 + }, + { + title: '浏览器 UA', + dataIndex: 'userAgent', + width: 100 + }, + { + title: '开始请求时间', + dataIndex: 'beginTime', + width: 180, + customRender: ({ text }) => { + return useRender.renderDate(text) + } + }, + { + title: '结束请求时间', + dataIndex: 'endTime', + width: 180, + customRender: ({ text }) => { + return useRender.renderDate(text) + } + }, + { + title: '执行时长', + dataIndex: 'duration', + width: 100 + }, + { + title: '结果码', + dataIndex: 'resultCode', + width: 100 + }, + { + title: '结果提示', + dataIndex: 'resultMsg', + width: 100 + }, + { + title: '创建者', + dataIndex: 'creator', + width: 100 + }, + { + title: '创建时间', + dataIndex: 'createTime', + width: 180, + customRender: ({ text }) => { + return useRender.renderDate(text) + } + }, + { + title: '更新者', + dataIndex: 'updater', + width: 100 + }, + { + title: '更新时间', + dataIndex: 'updateTime', + width: 180, + customRender: ({ text }) => { + return useRender.renderDate(text) + } + }, + { + title: '租户编号', + dataIndex: 'tenantId', + width: 100 + } +] + + +export const searchFormSchema: FormSchema[] = [ + { + label: '日志主键', + field: 'id', + component: 'Input', + colProps: { span: 8 } + }, + { + label: '链路追踪编号', + field: 'traceId', + component: 'Input', + colProps: { span: 8 } + }, + { + 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: 'requestMethod', + component: 'Input', + colProps: { span: 8 } + }, + { + label: '请求地址', + field: 'requestUrl', + component: 'Input', + colProps: { span: 8 } + }, + { + label: '请求参数', + field: 'requestParams', + component: 'Input', + colProps: { span: 8 } + }, + { + label: '用户 IP', + field: 'userIp', + component: 'Input', + colProps: { span: 8 } + }, + { + label: '浏览器 UA', + field: 'userAgent', + component: 'Input', + colProps: { span: 8 } + }, + { + label: '开始请求时间', + field: 'beginTime', + component: 'RangePicker', + colProps: { span: 8 } + }, + { + label: '结束请求时间', + field: 'endTime', + component: 'RangePicker', + colProps: { span: 8 } + }, + { + label: '执行时长', + field: 'duration', + component: 'Input', + colProps: { span: 8 } + }, + { + label: '结果码', + field: 'resultCode', + component: 'Input', + colProps: { span: 8 } + }, + { + label: '结果提示', + field: 'resultMsg', + component: 'Input', + colProps: { span: 8 } + }, + { + label: '创建者', + field: 'creator', + component: 'Input', + colProps: { span: 8 } + }, + { + label: '创建时间', + field: 'createTime', + component: 'RangePicker', + colProps: { span: 8 } + }, + { + label: '更新者', + field: 'updater', + component: 'Input', + colProps: { span: 8 } + }, + { + label: '更新时间', + field: 'updateTime', + component: 'RangePicker', + colProps: { span: 8 } + }, + { + label: '租户编号', + field: 'tenantId', + component: 'Input', + colProps: { span: 8 } + } +] + +export const formSchema: FormSchema[] = [ + { + label: '编号', + field: 'id', + show: false, + component: 'Input' + }, + { + label: '链路追踪编号', + field: 'traceId', + required: true, + component: 'Input' + }, + { + label: '用户编号', + field: 'userId', + required: true, + component: 'InputNumber' + }, + { + label: '用户类型', + field: 'userType', + component: 'Select', + defaultValue: 0, + componentProps: { + options: getIntDictOptions(DICT_TYPE.USER_TYPE) + } + }, + { + label: '应用名', + field: 'applicationName', + required: true, + component: 'Input' + }, + { + label: '请求方法名', + field: 'requestMethod', + required: true, + component: 'Input' + }, + { + label: '请求地址', + field: 'requestUrl', + required: true, + component: 'Input' + }, + { + label: '请求参数', + field: 'requestParams', + required: true, + component: 'Input' + }, + { + label: '用户 IP', + field: 'userIp', + required: true, + component: 'Input' + }, + { + label: '浏览器 UA', + field: 'userAgent', + required: true, + component: 'Input' + }, + { + label: '执行时长', + field: 'duration', + required: true, + component: 'InputNumber' + }, + { + label: '结果码', + field: 'resultCode', + required: true, + component: 'InputNumber' + }, + { + label: '结果提示', + field: 'resultMsg', + required: true, + component: 'Input' + }, + { + label: '创建者', + field: 'creator', + required: true, + component: 'Input' + }, + { + label: '更新者', + field: 'updater', + required: true, + component: 'Input' + }, + { + label: '租户编号', + field: 'tenantId', + required: true, + component: 'InputNumber' + } +] From b7c445849985693456cd08f119210cb59e82e409 Mon Sep 17 00:00:00 2001 From: yanchangshan <5333290+yanchangshan@user.noreply.gitee.com> Date: Wed, 22 Mar 2023 11:38:42 +0000 Subject: [PATCH 2/4] update src/views/infra/apiAccessLog/index.vue. Signed-off-by: yanchangshan <5333290+yanchangshan@user.noreply.gitee.com> --- src/views/infra/apiAccessLog/index.vue | 96 +++++++++++++++++++++++++- 1 file changed, 95 insertions(+), 1 deletion(-) diff --git a/src/views/infra/apiAccessLog/index.vue b/src/views/infra/apiAccessLog/index.vue index 3b64cfc4f..7813f5fd7 100644 --- a/src/views/infra/apiAccessLog/index.vue +++ b/src/views/infra/apiAccessLog/index.vue @@ -1,3 +1,97 @@ + From 6d1a518bb56eab7e055be3956d140eb323b9b7a8 Mon Sep 17 00:00:00 2001 From: yanchangshan <5333290+yanchangshan@user.noreply.gitee.com> Date: Wed, 22 Mar 2023 11:39:29 +0000 Subject: [PATCH 3/4] add src/views/infra/apiAccessLog/ApiAccessLogModel.vue. Signed-off-by: yanchangshan <5333290+yanchangshan@user.noreply.gitee.com> --- .../infra/apiAccessLog/ApiAccessLogModel.vue | 60 +++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 src/views/infra/apiAccessLog/ApiAccessLogModel.vue diff --git a/src/views/infra/apiAccessLog/ApiAccessLogModel.vue b/src/views/infra/apiAccessLog/ApiAccessLogModel.vue new file mode 100644 index 000000000..f9d4e441b --- /dev/null +++ b/src/views/infra/apiAccessLog/ApiAccessLogModel.vue @@ -0,0 +1,60 @@ + + + +import { ref, computed, unref } from 'vue' +import { BasicModal, useModalInner } from '@/components/Modal' +import { BasicForm, useForm } from '@/components/Form' +import { formSchema } from './ApiAccessLog.data' +import { createApiAccessLogApi, getApiAccessLogApi, updatePostApi } from '@/api/infra/apiAccessLog' + +const emit = defineEmits(['success', 'register']) +const isUpdate = ref(true) +const rowId = ref() + +const [registerForm, { setFieldsValue, resetFields, validate }] = useForm({ + labelWidth: 100, + baseColProps: { span: 24 }, + schemas: formSchema, + showActionButtonGroup: false, + actionColOptions: { + span: 23 + } +}) + +const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => { + resetFields() + setModalProps({ confirmLoading: false }) + isUpdate.value = !!data?.isUpdate + + if (unref(isUpdate)) { + const res = await getApiAccessLogApi(data.record.id) + rowId.value = res.id + setFieldsValue({ + ...res + }) + } +}) + +const getTitle = computed(() => (!unref(isUpdate) ? '新增API访问日志表' : '编辑API访问日志表')) + +async function handleSubmit() { + try { + const values = await validate() + setModalProps({ confirmLoading: true }) + if (unref(isUpdate)) { + await updateApiAccessLogApi(values) + } else { + await createApiAccessLogApi(values) + } + closeModal() + emit('success') + } finally { + setModalProps({ confirmLoading: false }) + } +} + From 5831ca39bb844c198f101a37da55cbfe244c3c0f Mon Sep 17 00:00:00 2001 From: yanchangshan <5333290+yanchangshan@user.noreply.gitee.com> Date: Wed, 22 Mar 2023 11:40:49 +0000 Subject: [PATCH 4/4] =?UTF-8?q?update=20src/api/infra/apiAccessLog/index.t?= =?UTF-8?q?s.=20=E5=A2=9E=E5=8A=A0=E4=BA=86=E4=B8=80=E4=B8=AA=20=20?= =?UTF-8?q?=E5=88=A0=E9=99=A4APIACCESSLOG?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: yanchangshan <5333290+yanchangshan@user.noreply.gitee.com> --- src/api/infra/apiAccessLog/index.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/api/infra/apiAccessLog/index.ts b/src/api/infra/apiAccessLog/index.ts index 722ab8040..d9db06efe 100644 --- a/src/api/infra/apiAccessLog/index.ts +++ b/src/api/infra/apiAccessLog/index.ts @@ -44,6 +44,11 @@ export const getApiAccessLogPageApi = (params: ApiAccessLogPageReqVO) => { return defHttp.get({ url: '/infra/api-access-log/page', params }) } +// 删除APIACCESSLOG +export const deleteApiAccessLogApi = (id: number) => { + return defHttp.delete({ url: '/infra/api-access-log/delete?id=' + id }) +} + // 导出API 访问日志 export const exportApiAccessLogApi = (params: ApiAccessLogExportReqVO) => { return defHttp.download({ url: '/infra/api-access-log/export-excel', params }, '访问日志.xls')