import dayjs from "dayjs"; import { message } from "@/utils/message"; import { getKeyList } from "@pureadmin/utils"; import { getLoginLogsList } from "@/api/system"; import { usePublicHooks } from "@/views/system/hooks"; import type { PaginationProps } from "@pureadmin/table"; import { type Ref, reactive, ref, onMounted, toRaw } from "vue"; export function useRole(tableRef: Ref) { const form = reactive({ username: "", status: "", loginTime: "" }); const dataList = ref([]); const loading = ref(true); const selectedNum = ref(0); const { tagStyle } = usePublicHooks(); const pagination = reactive({ total: 0, pageSize: 10, currentPage: 1, background: true }); const columns: TableColumnList = [ { label: "勾选列", // 如果需要表格多选,此处label必须设置 type: "selection", fixed: "left", reserveSelection: true // 数据刷新后保留选项 }, { label: "序号", prop: "id", minWidth: 90 }, { label: "用户名", prop: "username", minWidth: 100 }, { label: "登录 IP", prop: "ip", minWidth: 140 }, { label: "登录地点", prop: "address", minWidth: 140 }, { label: "操作系统", prop: "system", minWidth: 100 }, { label: "浏览器类型", prop: "browser", minWidth: 100 }, { label: "登录状态", prop: "status", minWidth: 100, cellRenderer: ({ row, props }) => ( {row.status === 1 ? "成功" : "失败"} ) }, { label: "登录行为", prop: "behavior", minWidth: 100 }, { label: "登录时间", prop: "loginTime", minWidth: 180, formatter: ({ loginTime }) => dayjs(loginTime).format("YYYY-MM-DD HH:mm:ss") } ]; function handleSizeChange(val: number) { console.log(`${val} items per page`); } function handleCurrentChange(val: number) { console.log(`current page: ${val}`); } /** 当CheckBox选择项发生变化时会触发该事件 */ function handleSelectionChange(val) { selectedNum.value = val.length; // 重置表格高度 tableRef.value.setAdaptive(); } /** 取消选择 */ function onSelectionCancel() { selectedNum.value = 0; // 用于多选表格,清空用户的选择 tableRef.value.getTableRef().clearSelection(); } /** 批量删除 */ function onbatchDel() { // 返回当前选中的行 const curSelected = tableRef.value.getTableRef().getSelectionRows(); // 接下来根据实际业务,通过选中行的某项数据,比如下面的id,调用接口进行批量删除 message(`已删除序号为 ${getKeyList(curSelected, "id")} 的数据`, { type: "success" }); tableRef.value.getTableRef().clearSelection(); onSearch(); } /** 清空日志 */ function clearAll() { // 根据实际业务,调用接口删除所有日志数据 message("已删除所有日志数据", { type: "success" }); onSearch(); } async function onSearch() { loading.value = true; const { data } = await getLoginLogsList(toRaw(form)); dataList.value = data.list; pagination.total = data.total; pagination.pageSize = data.pageSize; pagination.currentPage = data.currentPage; setTimeout(() => { loading.value = false; }, 500); } const resetForm = formEl => { if (!formEl) return; formEl.resetFields(); onSearch(); }; onMounted(() => { onSearch(); }); return { form, loading, columns, dataList, pagination, selectedNum, onSearch, clearAll, resetForm, onbatchDel, handleSizeChange, onSelectionCancel, handleCurrentChange, handleSelectionChange }; }