192 lines
5.3 KiB
Vue
Raw Normal View History

2025-02-17 16:26:57 +08:00
<template>
<div class="main">
<el-form
ref="formRef"
:inline="true"
:model="form"
class="search-form bg-bg_color w-[99/100] pl-8 pt-[12px] overflow-auto"
>
<el-form-item label="操作时间" prop="operatingTime">
<el-date-picker
v-model="form.timeRange"
:shortcuts="getPickerShortcuts()"
type="datetimerange"
range-separator="至"
start-placeholder="开始日期时间"
end-placeholder="结束日期时间"
value-format="x"
unlink-panels
/>
</el-form-item>
<el-form-item>
<el-button
type="primary"
:icon="useRenderIcon('ri:search-line')"
:loading="loading"
@click="onSearch"
>
{{ t("buttons:Search") }}
</el-button>
<el-button :icon="useRenderIcon(Refresh)" @click="resetForm(formRef)">
{{ t("buttons:Reset") }}
</el-button>
</el-form-item>
</el-form>
<PureTableBar title="操作日志" :columns="columns" @refresh="onSearch">
<template #buttons>
2025-02-18 02:03:59 +08:00
<el-popconfirm
title="确定要导出所有日志数据吗?"
@confirm="onExportQueryAll"
>
2025-02-17 16:26:57 +08:00
<template #reference>
2025-02-18 02:03:59 +08:00
<el-button type="primary" :icon="useRenderIcon(Export)">
{{ t("buttons:ExportAll") }}
2025-02-17 16:26:57 +08:00
</el-button>
</template>
2025-02-18 02:03:59 +08:00
</el-popconfirm>
2025-02-17 16:26:57 +08:00
</template>
<template v-slot="{ size, dynamicColumns }">
<div
v-if="selectedNum > 0"
v-motion-fade
class="bg-[var(--el-fill-color-light)] w-full h-[46px] mb-2 pl-4 flex items-center"
>
<div class="flex-auto">
<span
style="font-size: var(--el-font-size-base)"
class="text-[rgba(42,46,54,0.5)] dark:text-[rgba(220,220,242,0.5)]"
>
已选 {{ selectedNum }}
</span>
<el-button type="primary" text @click="onSelectionCancel">
{{ t("buttons:Deselect") }}
</el-button>
</div>
2025-02-18 02:03:59 +08:00
<el-popconfirm
title="是否确认批量导出日志数据?"
@confirm="onbatchExport"
>
2025-02-17 16:26:57 +08:00
<template #reference>
2025-02-18 02:03:59 +08:00
<el-button type="primary" text class="mr-1">
{{ t("buttons:ExportInBatches") }}
2025-02-17 16:26:57 +08:00
</el-button>
</template>
</el-popconfirm>
</div>
<pure-table
ref="tableRef"
row-key="id"
align-whole="center"
table-layout="auto"
:loading="loading"
:size="size"
adaptive
:adaptiveConfig="{ offsetBottom: 108 }"
:data="dataList"
:columns="dynamicColumns"
:pagination="{ ...pagination, size }"
:header-cell-style="{
background: 'var(--el-fill-color-light)',
color: 'var(--el-text-color-primary)'
}"
@selection-change="handleSelectionChange"
@page-size-change="handleSizeChange"
@page-current-change="handleCurrentChange"
>
<template #operation="{ row }">
<el-button
class="reset-margin"
link
type="primary"
:size="size"
:icon="useRenderIcon(View)"
@click="onClickDetails(row)"
>
{{ t("buttons:Details") }}
</el-button>
</template>
</pure-table>
</template>
</PureTableBar>
</div>
</template>
<script setup lang="ts">
defineOptions({
name: "CodeQueryLog"
});
import { ref } from "vue";
import View from "@iconify-icons/ep/view";
import Refresh from "@iconify-icons/ep/refresh";
2025-02-18 02:03:59 +08:00
import Export from "@iconify-icons/ri/download-2-line";
2025-02-17 16:26:57 +08:00
import { PureTableBar } from "@/components/RePureTableBar";
import { useRenderIcon } from "@/components/ReIcon/src/hooks";
import { isString } from "@pureadmin/utils";
import { useRouter } from "vue-router";
import { useMultiTagsStoreHook } from "@/store/modules/multiTags";
import { $t } from "@/plugins/i18n";
const router = useRouter();
import { useI18n } from "vue-i18n";
import { useQueryLog } from "./utils/hook";
import { QueryCodeLogInfo } from "types/code";
const formRef = ref();
const tableRef = ref();
const { t } = useI18n();
const {
form,
loading,
columns,
dataList,
pagination,
selectedNum,
onSearch,
resetForm,
handleCurrentChange,
handleSelectionChange,
handleSizeChange,
onSelectionCancel,
2025-02-18 02:03:59 +08:00
getPickerShortcuts,
onExportQueryAll,
onbatchExport
2025-02-17 16:26:57 +08:00
} = useQueryLog(tableRef);
/**处理详情 */
const onClickDetails = (row: QueryCodeLogInfo) => {
let params = { detailsId: row.id };
Object.keys(params).forEach(param => {
if (!isString(params[param])) {
params[param] = params[param].toString();
}
});
useMultiTagsStoreHook().handleTags("push", {
path: "/code/log/details/:detailsId",
name: "QueryCodedetails",
params: params,
meta: {
title: $t("menus:QueryCodedetails")
},
dynamicLevel: 1
});
router.push({
name: "QueryCodedetails",
params: params
});
};
</script>
<style scoped lang="scss">
:deep(.el-dropdown-menu__item i) {
margin: 0;
}
.main-content {
margin: 24px 24px 0 !important;
}
.search-form {
:deep(.el-form-item) {
margin-bottom: 12px;
}
}
</style>