Przeglądaj źródła

先提交一下vite

wukai 1 rok temu
rodzic
commit
b60812c46a
2 zmienionych plików z 382 dodań i 325 usunięć
  1. 308 325
      src/views/monitor/operlog/index.vue
  2. 74 0
      vite.config.js

+ 308 - 325
src/views/monitor/operlog/index.vue

@@ -1,339 +1,322 @@
 <template>
-   <div class="app-container">
-      <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
-         <el-form-item label="系统模块" prop="title">
-            <el-input
-               v-model="queryParams.title"
-               placeholder="请输入系统模块"
-               clearable
-               style="width: 240px;"
-               @keyup.enter="handleQuery"
-            />
-         </el-form-item>
-         <el-form-item label="操作人员" prop="operName">
-            <el-input
-               v-model="queryParams.operName"
-               placeholder="请输入操作人员"
-               clearable
-               style="width: 240px;"
-               @keyup.enter="handleQuery"
-            />
-         </el-form-item>
-         <el-form-item label="事件类型" prop="eventType">
-            <el-select
-               v-model="queryParams.eventType"
-               placeholder="事件类型"
-               clearable
-               style="width: 240px"
-            >
-               <el-option
-                  v-for="dict in event_type"
-                  :key="dict.value"
-                  :label="dict.label"
-                  :value="dict.value"
-               />
-            </el-select>
-         </el-form-item>
-		 <el-form-item label="事件级别" prop="eventLevel">
-            <el-select
-               v-model="queryParams.eventLevel"
-               placeholder="事件级别"
-               clearable
-               style="width: 240px"
-            >
-               <el-option
-                  v-for="dict in event_level"
-                  :key="dict.value"
-                  :label="dict.label"
-                  :value="dict.value"
-               />
-            </el-select>
-         </el-form-item>
-		 <el-form-item label="类型" prop="businessType">
-            <el-select
-               v-model="queryParams.businessType"
-               placeholder="操作类型"
-               clearable
-               style="width: 240px"
-            >
-               <el-option
-                  v-for="dict in sys_oper_type"
-                  :key="dict.value"
-                  :label="dict.label"
-                  :value="dict.value"
-               />
-            </el-select>
-         </el-form-item>
-         <el-form-item label="状态" prop="status">
-            <el-select
-               v-model="queryParams.status"
-               placeholder="操作状态"
-               clearable
-               style="width: 240px"
-            >
-               <el-option
-                  v-for="dict in sys_common_status"
-                  :key="dict.value"
-                  :label="dict.label"
-                  :value="dict.value"
-               />
-            </el-select>
-         </el-form-item>
-         <el-form-item label="操作时间" style="width: 308px">
-            <el-date-picker
-               v-model="dateRange"
-               value-format="YYYY-MM-DD HH:mm:ss"
-               type="daterange"
-               range-separator="-"
-               start-placeholder="开始日期"
-               end-placeholder="结束日期"
-               :default-time="[new Date(2000, 1, 1, 0, 0, 0), new Date(2000, 1, 1, 23, 59, 59)]"
-            ></el-date-picker>
-         </el-form-item>
-         <el-form-item>
-            <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
-            <el-button icon="Refresh" @click="resetQuery">重置</el-button>
-         </el-form-item>
-      </el-form>
+	<div class="app-container">
+		<el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
+			<el-form-item label="系统模块" prop="title">
+				<el-input v-model="queryParams.title" placeholder="请输入系统模块" clearable style="width: 240px;"
+					@keyup.enter="handleQuery" />
+			</el-form-item>
+			<el-form-item label="操作人员" prop="operName">
+				<el-input v-model="queryParams.operName" placeholder="请输入操作人员" clearable style="width: 240px;"
+					@keyup.enter="handleQuery" />
+			</el-form-item>
+			<el-form-item label="事件类型" prop="eventType">
+				<el-select v-model="queryParams.eventType" placeholder="事件类型" clearable style="width: 240px">
+					<el-option v-for="dict in event_type" :key="dict.value" :label="dict.label" :value="dict.value" />
+				</el-select>
+			</el-form-item>
+			<el-form-item label="事件级别" prop="eventLevel">
+				<el-select v-model="queryParams.eventLevel" placeholder="事件级别" clearable style="width: 240px">
+					<el-option v-for="dict in event_level" :key="dict.value" :label="dict.label" :value="dict.value" />
+				</el-select>
+			</el-form-item>
+			<el-form-item label="类型" prop="businessType">
+				<el-select v-model="queryParams.businessType" placeholder="操作类型" clearable style="width: 240px">
+					<el-option v-for="dict in sys_oper_type" :key="dict.value" :label="dict.label"
+						:value="dict.value" />
+				</el-select>
+			</el-form-item>
+			<el-form-item label="状态" prop="status">
+				<el-select v-model="queryParams.status" placeholder="操作状态" clearable style="width: 240px">
+					<el-option v-for="dict in sys_common_status" :key="dict.value" :label="dict.label"
+						:value="dict.value" />
+				</el-select>
+			</el-form-item>
+			<el-form-item label="操作时间" style="width: 308px">
+				<el-date-picker v-model="dateRange" value-format="YYYY-MM-DD HH:mm:ss" type="daterange"
+					range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期"
+					:default-time="[new Date(2000, 1, 1, 0, 0, 0), new Date(2000, 1, 1, 23, 59, 59)]"></el-date-picker>
+			</el-form-item>
+			<el-form-item>
+				<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
+				<el-button icon="Refresh" @click="resetQuery">重置</el-button>
+			</el-form-item>
+		</el-form>
 
-      <el-row :gutter="10" class="mb8">
-         <!-- <el-col :span="1.5">
-            <el-button
-               type="danger"
-               plain
-               icon="Delete"
-               :disabled="multiple"
-               @click="handleDelete"
-               v-hasPermi="['monitor:operlog:remove']"
-            >删除</el-button>
-         </el-col>
-         <el-col :span="1.5">
-            <el-button
-               type="danger"
-               plain
-               icon="Delete"
-               @click="handleClean"
-               v-hasPermi="['monitor:operlog:remove']"
-            >清空</el-button>
-         </el-col> -->
-         <el-col :span="1.5">
-            <el-button
-               type="warning"
-               plain
-               icon="Download"
-               @click="handleExport"
-               v-hasPermi="['monitor:operlog:export']"
-            >导出</el-button>
-         </el-col>
-         <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
-      </el-row>
+		<el-row :gutter="10" class="mb8">
+			<el-col :span="1.5">
+				<el-button type="primary" plain icon="HelpFilled" @click="handleAnalysis">图表分析</el-button>
+			</el-col>
+			<el-col :span="1.5">
+				<el-button type="primary" plain icon="Histogram" @click="handleCalc">操作统计</el-button>
+			</el-col>
+			<el-col :span="1.5">
+				<el-button type="warning" plain icon="Download" @click="handleExport"
+					v-hasPermi="['monitor:operlog:export']">导出</el-button>
+			</el-col>
+			<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
+		</el-row>
 
-      <el-table ref="operlogRef" v-loading="loading" :data="operlogList" @selection-change="handleSelectionChange" :default-sort="defaultSort" @sort-change="handleSortChange">
-         <el-table-column type="selection" width="50" align="center" />
-         <el-table-column label="日志编号" align="center" prop="operId" />
-         <el-table-column label="系统模块" align="center" prop="title" :show-overflow-tooltip="true" />
-         <el-table-column label="事件类型" align="center" prop="eventType">
-            <template #default="scope">
-               <dict-tag :options="event_type" :value="scope.row.eventType" />
-            </template>
-         </el-table-column>
-		 <el-table-column label=" 事件级别" align="center" prop="eventLevel">
-            <template #default="scope">
-               <dict-tag :options="event_level" :value="scope.row.eventLevel" />
-            </template>
-         </el-table-column>
-		 <el-table-column label="操作类型" align="center" prop="businessType">
-            <template #default="scope">
-               <dict-tag :options="sys_oper_type" :value="scope.row.businessType" />
-            </template>
-         </el-table-column>
-         <el-table-column label="操作人员" align="center" width="110" prop="operName" :show-overflow-tooltip="true" sortable="custom" :sort-orders="['descending', 'ascending']" />
-         <el-table-column label="主机" align="center" prop="operIp" width="130" :show-overflow-tooltip="true" />
-         <el-table-column label="操作状态" align="center" prop="status">
-            <template #default="scope">
-               <dict-tag :options="sys_common_status" :value="scope.row.status" />
-            </template>
-         </el-table-column>
-         <el-table-column label="操作日期" align="center" prop="operTime" width="180" sortable="custom" :sort-orders="['descending', 'ascending']">
-            <template #default="scope">
-               <span>{{ parseTime(scope.row.operTime) }}</span>
-            </template>
-         </el-table-column>
-         <el-table-column label="消耗时间" align="center" prop="costTime" width="110" :show-overflow-tooltip="true" sortable="custom" :sort-orders="['descending', 'ascending']">
-            <template #default="scope">
-               <span>{{ scope.row.costTime }}毫秒</span>
-            </template>
-         </el-table-column>
-         <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
-            <template #default="scope">
-               <el-button link type="primary" icon="View" @click="handleView(scope.row, scope.index)" v-hasPermi="['monitor:operlog:query']">详细</el-button>
-            </template>
-         </el-table-column>
-      </el-table>
+		<el-table ref="operlogRef" v-loading="loading" :data="operlogList" @selection-change="handleSelectionChange"
+			:default-sort="defaultSort" @sort-change="handleSortChange">
+			<el-table-column type="selection" width="50" align="center" />
+			<el-table-column label="日志编号" align="center" prop="operId" />
+			<el-table-column label="系统模块" align="center" prop="title" :show-overflow-tooltip="true" />
+			<el-table-column label="事件类型" align="center" prop="eventType">
+				<template #default="scope">
+					<dict-tag :options="event_type" :value="scope.row.eventType" />
+				</template>
+			</el-table-column>
+			<el-table-column label=" 事件级别" align="center" prop="eventLevel">
+				<template #default="scope">
+					<dict-tag :options="event_level" :value="scope.row.eventLevel" />
+				</template>
+			</el-table-column>
+			<el-table-column label="操作类型" align="center" prop="businessType">
+				<template #default="scope">
+					<dict-tag :options="sys_oper_type" :value="scope.row.businessType" />
+				</template>
+			</el-table-column>
+			<el-table-column label="操作人员" align="center" width="110" prop="operName" :show-overflow-tooltip="true"
+				sortable="custom" :sort-orders="['descending', 'ascending']" />
+			<el-table-column label="主机" align="center" prop="operIp" width="130" :show-overflow-tooltip="true" />
+			<el-table-column label="操作状态" align="center" prop="status">
+				<template #default="scope">
+					<dict-tag :options="sys_common_status" :value="scope.row.status" />
+				</template>
+			</el-table-column>
+			<el-table-column label="操作日期" align="center" prop="operTime" width="180" sortable="custom"
+				:sort-orders="['descending', 'ascending']">
+				<template #default="scope">
+					<span>{{ parseTime(scope.row.operTime) }}</span>
+				</template>
+			</el-table-column>
+			<el-table-column label="消耗时间" align="center" prop="costTime" width="110" :show-overflow-tooltip="true"
+				sortable="custom" :sort-orders="['descending', 'ascending']">
+				<template #default="scope">
+					<span>{{ scope.row.costTime }}毫秒</span>
+				</template>
+			</el-table-column>
+			<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+				<template #default="scope">
+					<el-button link type="primary" icon="View" @click="handleView(scope.row, scope.index)"
+						v-hasPermi="['monitor:operlog:query']">详细</el-button>
+				</template>
+			</el-table-column>
+		</el-table>
 
-      <pagination
-         v-show="total > 0"
-         :total="total"
-         v-model:page="queryParams.pageNum"
-         v-model:limit="queryParams.pageSize"
-         @pagination="getList"
-      />
+		<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum"
+			v-model:limit="queryParams.pageSize" @pagination="getList" />
 
-      <!-- 操作日志详细 -->
-      <el-dialog title="操作日志详细" v-model="open" width="700px" append-to-body>
-         <el-form :model="form" label-width="100px">
-            <el-row>
-               <el-col :span="12">
-                  <el-form-item label="操作模块:">{{ form.title }} / {{ typeFormat(form) }} / {{ eventTypeFormat(form) }} / {{ eventLevelFormat(form) }}</el-form-item>
-                  <el-form-item
-                    label="登录信息:"
-                  >{{ form.operName }} / {{ form.operIp }} / {{ form.operLocation }}</el-form-item>
-               </el-col>
-               <el-col :span="12">
-                  <el-form-item label="请求地址:">{{ form.operUrl }}</el-form-item>
-                  <el-form-item label="请求方式:">{{ form.requestMethod }}</el-form-item>
-               </el-col>
-               <el-col :span="24">
-                  <el-form-item label="操作方法:">{{ form.method }}</el-form-item>
-               </el-col>
-               <el-col :span="24">
-                  <el-form-item label="请求参数:">{{ form.operParam }}</el-form-item>
-               </el-col>
-               <el-col :span="24">
-                  <el-form-item label="返回参数:">{{ form.jsonResult }}</el-form-item>
-               </el-col>
-               <el-col :span="6">
-                  <el-form-item label="操作状态:">
-                     <div v-if="form.status === 0">正常</div>
-                     <div v-else-if="form.status === 1">失败</div>
-                  </el-form-item>
-               </el-col>
-               <el-col :span="8">
-                  <el-form-item label="消耗时间:">{{ form.costTime }}毫秒</el-form-item>
-               </el-col>
-               <el-col :span="10">
-                  <el-form-item label="操作时间:">{{ parseTime(form.operTime) }}</el-form-item>
-               </el-col>
-               <el-col :span="24">
-                  <el-form-item label="异常信息:" v-if="form.status === 1">{{ form.errorMsg }}</el-form-item>
-               </el-col>
-            </el-row>
-         </el-form>
-         <template #footer>
-            <div class="dialog-footer">
-               <el-button @click="open = false">关 闭</el-button>
-            </div>
-         </template>
-      </el-dialog>
-   </div>
+		<!-- 操作日志详细 -->
+		<el-dialog title="操作日志详细" v-model="calc" width="700px" append-to-body>
+			<el-table ref="operlogRef" v-loading="loading" :data="operlogList"
+				:default-sort="defaultSort" @sort-change="handleSortChange">
+				<!-- <el-table-column type="selection" width="50" align="center" /> -->
+				<el-table-column label="操作人员" align="center" width="110" prop="operName" :show-overflow-tooltip="true"
+					sortable="custom" :sort-orders="['descending', 'ascending']" />
+				<el-table-column label="主机" align="center" prop="operIp" width="130" :show-overflow-tooltip="true" />
+				<el-table-column label="事件类型" align="center" prop="eventType">
+					<template #default="scope">
+						<dict-tag :options="event_type" :value="scope.row.eventType" />
+					</template>
+				</el-table-column>
+				<el-table-column label="操作类型" align="center" prop="businessType">
+					<template #default="scope">
+						<dict-tag :options="sys_oper_type" :value="scope.row.businessType" />
+					</template>
+				</el-table-column>
+				<el-table-column label="操作次数" align="center" class-name="small-padding fixed-width">
+				</el-table-column>
+			</el-table>
+			<template #footer>
+				<div class="dialog-footer">
+					<el-button @click="calc = false">关 闭</el-button>
+				</div>
+			</template>
+		</el-dialog>
+
+		<!-- 操作日志详细 -->
+		<el-dialog title="操作日志详细" v-model="open" width="700px" append-to-body>
+			<el-form :model="form" label-width="100px">
+				<el-row>
+					<el-col :span="12">
+						<el-form-item label="操作模块:">{{ form.title }} / {{ typeFormat(form) }} /
+							{{ eventTypeFormat(form) }} / {{ eventLevelFormat(form) }}</el-form-item>
+						<el-form-item label="登录信息:">{{ form.operName }} / {{ form.operIp }} /
+							{{ form.operLocation }}</el-form-item>
+					</el-col>
+					<el-col :span="12">
+						<el-form-item label="请求地址:">{{ form.operUrl }}</el-form-item>
+						<el-form-item label="请求方式:">{{ form.requestMethod }}</el-form-item>
+					</el-col>
+					<el-col :span="24">
+						<el-form-item label="操作方法:">{{ form.method }}</el-form-item>
+					</el-col>
+					<el-col :span="24">
+						<el-form-item label="请求参数:">{{ form.operParam }}</el-form-item>
+					</el-col>
+					<el-col :span="24">
+						<el-form-item label="返回参数:">{{ form.jsonResult }}</el-form-item>
+					</el-col>
+					<el-col :span="6">
+						<el-form-item label="操作状态:">
+							<div v-if="form.status === 0">正常</div>
+							<div v-else-if="form.status === 1">失败</div>
+						</el-form-item>
+					</el-col>
+					<el-col :span="8">
+						<el-form-item label="消耗时间:">{{ form.costTime }}毫秒</el-form-item>
+					</el-col>
+					<el-col :span="10">
+						<el-form-item label="操作时间:">{{ parseTime(form.operTime) }}</el-form-item>
+					</el-col>
+					<el-col :span="24">
+						<el-form-item label="异常信息:" v-if="form.status === 1">{{ form.errorMsg }}</el-form-item>
+					</el-col>
+				</el-row>
+			</el-form>
+			<template #footer>
+				<div class="dialog-footer">
+					<el-button @click="open = false">关 闭</el-button>
+				</div>
+			</template>
+		</el-dialog>
+	</div>
 </template>
 
 <script setup name="Operlog">
-import { list, delOperlog, cleanOperlog } from "@/api/monitor/operlog";
+	import {
+		list,
+		delOperlog,
+		cleanOperlog
+	} from "@/api/monitor/operlog";
 
-const { proxy } = getCurrentInstance();
-const { sys_oper_type, sys_common_status,event_type,event_level} = proxy.useDict("sys_oper_type","sys_common_status","event_type","event_level");
+	const {
+		proxy
+	} = getCurrentInstance();
+	const {
+		sys_oper_type,
+		sys_common_status,
+		event_type,
+		event_level
+	} = proxy.useDict("sys_oper_type", "sys_common_status", "event_type", "event_level");
 
-const operlogList = ref([]);
-const open = ref(false);
-const loading = ref(true);
-const showSearch = ref(true);
-const ids = ref([]);
-const single = ref(true);
-const multiple = ref(true);
-const total = ref(0);
-const title = ref("");
-const dateRange = ref([]);
-const defaultSort = ref({ prop: "operTime", order: "descending" });
+	const operlogList = ref([]);
+	const open = ref(false);
+	const calc = ref(false);
+	const loading = ref(true);
+	const showSearch = ref(true);
+	const ids = ref([]);
+	const single = ref(true);
+	const multiple = ref(true);
+	const total = ref(0);
+	const title = ref("");
+	const dateRange = ref([]);
+	const defaultSort = ref({
+		prop: "operTime",
+		order: "descending"
+	});
 
-const data = reactive({
-  form: {},
-  queryParams: {
-    pageNum: 1,
-    pageSize: 10,
-    title: undefined,
-    operName: undefined,
-    businessType: undefined,
-    status: undefined
-  }
-});
+	const data = reactive({
+		form: {},
+		queryParams: {
+			pageNum: 1,
+			pageSize: 10,
+			title: undefined,
+			operName: undefined,
+			businessType: undefined,
+			status: undefined
+		}
+	});
 
-const { queryParams, form } = toRefs(data);
+	const {
+		queryParams,
+		form
+	} = toRefs(data);
 
-/** 查询登录日志 */
-function getList() {
-  loading.value = true;
-  list(proxy.addDateRange(queryParams.value, dateRange.value)).then(response => {
-    operlogList.value = response.rows;
-    total.value = response.total;
-    loading.value = false;
-  });
-}
-/** 操作日志类型字典翻译 */
-function typeFormat(row, column) {
-  return proxy.selectDictLabel(sys_oper_type.value, row.businessType);
-}
-/** 事件类型字典翻译 */
-function eventTypeFormat(row, column) {
-  return proxy.selectDictLabel(event_type.value, row.eventType);
-}
-/** 事件级别类型字典翻译 */
-function eventLevelFormat(row, column) {
-  return proxy.selectDictLabel(event_level.value, row.eventLevel);
-}
-/** 搜索按钮操作 */
-function handleQuery() {
-  queryParams.value.pageNum = 1;
-  getList();
-}
-/** 重置按钮操作 */
-function resetQuery() {
-  dateRange.value = [];
-  proxy.resetForm("queryRef");
-  queryParams.value.pageNum = 1;
-  proxy.$refs["operlogRef"].sort(defaultSort.value.prop, defaultSort.value.order);
-}
-/** 多选框选中数据 */
-function handleSelectionChange(selection) {
-  ids.value = selection.map(item => item.operId);
-  multiple.value = !selection.length;
-}
-/** 排序触发事件 */
-function handleSortChange(column, prop, order) {
-  queryParams.value.orderByColumn = column.prop;
-  queryParams.value.isAsc = column.order;
-  getList();
-}
-/** 详细按钮操作 */
-function handleView(row) {
-  open.value = true;
-  form.value = row;
-}
-/** 删除按钮操作 */
-function handleDelete(row) {
-  const operIds = row.operId || ids.value;
-  proxy.$modal.confirm('是否确认删除日志编号为"' + operIds + '"的数据项?').then(function () {
-    return delOperlog(operIds);
-  }).then(() => {
-    getList();
-    proxy.$modal.msgSuccess("删除成功");
-  }).catch(() => {});
-}
-/** 清空按钮操作 */
-function handleClean() {
-  proxy.$modal.confirm("是否确认清空所有操作日志数据项?").then(function () {
-    return cleanOperlog();
-  }).then(() => {
-    getList();
-    proxy.$modal.msgSuccess("清空成功");
-  }).catch(() => {});
-}
-/** 导出按钮操作 */
-function handleExport() {
-  proxy.download("monitor/operlog/export",{
-    ...queryParams.value,
-  }, `config_${new Date().getTime()}.xlsx`);
-}
+	/** 查询登录日志 */
+	function getList() {
+		loading.value = true;
+		list(proxy.addDateRange(queryParams.value, dateRange.value)).then(response => {
+			operlogList.value = response.rows;
+			total.value = response.total;
+			loading.value = false;
+		});
+	}
+	/** 操作日志类型字典翻译 */
+	function typeFormat(row, column) {
+		return proxy.selectDictLabel(sys_oper_type.value, row.businessType);
+	}
+	/** 事件类型字典翻译 */
+	function eventTypeFormat(row, column) {
+		return proxy.selectDictLabel(event_type.value, row.eventType);
+	}
+	/** 事件级别类型字典翻译 */
+	function eventLevelFormat(row, column) {
+		return proxy.selectDictLabel(event_level.value, row.eventLevel);
+	}
+	/** 搜索按钮操作 */
+	function handleQuery() {
+		queryParams.value.pageNum = 1;
+		getList();
+	}
+	/** 图表分析 */
+	function handleAnalysis() {
+		queryParams.value.pageNum = 1;
+		getList();
+	}
+	/** 操作统计 */
+	function handleCalc() {
+		calc.value = true;
+	}
+	/** 重置按钮操作 */
+	function resetQuery() {
+		dateRange.value = [];
+		proxy.resetForm("queryRef");
+		queryParams.value.pageNum = 1;
+		proxy.$refs["operlogRef"].sort(defaultSort.value.prop, defaultSort.value.order);
+	}
+	/** 多选框选中数据 */
+	function handleSelectionChange(selection) {
+		ids.value = selection.map(item => item.operId);
+		multiple.value = !selection.length;
+	}
+	/** 排序触发事件 */
+	function handleSortChange(column, prop, order) {
+		queryParams.value.orderByColumn = column.prop;
+		queryParams.value.isAsc = column.order;
+		getList();
+	}
+	/** 详细按钮操作 */
+	function handleView(row) {
+		open.value = true;
+		form.value = row;
+	}
+	/** 删除按钮操作 */
+	function handleDelete(row) {
+		const operIds = row.operId || ids.value;
+		proxy.$modal.confirm('是否确认删除日志编号为"' + operIds + '"的数据项?').then(function() {
+			return delOperlog(operIds);
+		}).then(() => {
+			getList();
+			proxy.$modal.msgSuccess("删除成功");
+		}).catch(() => {});
+	}
+	/** 清空按钮操作 */
+	function handleClean() {
+		proxy.$modal.confirm("是否确认清空所有操作日志数据项?").then(function() {
+			return cleanOperlog();
+		}).then(() => {
+			getList();
+			proxy.$modal.msgSuccess("清空成功");
+		}).catch(() => {});
+	}
+	/** 导出按钮操作 */
+	function handleExport() {
+		proxy.download("monitor/operlog/export", {
+			...queryParams.value,
+		}, `config_${new Date().getTime()}.xlsx`);
+	}
 
-getList();
-</script>
+	getList();
+</script>

+ 74 - 0
vite.config.js

@@ -0,0 +1,74 @@
+import {
+	defineConfig,
+	loadEnv
+} from 'vite'
+import path from 'path'
+import createVitePlugins from './vite/plugins'
+
+// https://vitejs.dev/config/
+export default defineConfig(({
+								 mode,
+								 command
+							 }) => {
+	const env = loadEnv(mode, process.cwd())
+	const {
+		VITE_APP_ENV
+	} = env
+	return {
+		// 部署生产环境和开发环境下的URL。
+		// 默认情况下,vite 会假设你的应用是被部署在一个域名的根路径上
+		// 例如 https://www.ruoyi.vip/。如果应用被部署在一个子路径上,你就需要用这个选项指定这个子路径。例如,如果你的应用被部署在 https://www.ruoyi.vip/admin/,则设置 baseUrl 为 /admin/。
+		base: VITE_APP_ENV === 'production' ? '/' : '/',
+		plugins: createVitePlugins(env, command === 'build'),
+		resolve: {
+			// https://cn.vitejs.dev/config/#resolve-alias
+			alias: {
+				// 设置路径
+				'~': path.resolve(__dirname, './'),
+				// 设置别名
+				'@': path.resolve(__dirname, './src')
+			},
+			// https://cn.vitejs.dev/config/#resolve-extensions
+			extensions: ['.mjs', '.js', '.ts', '.jsx', '.tsx', '.json', '.vue']
+		},
+		// vite 相关配置
+		server: {
+			port: 80,
+			host: true,
+			open: true,
+			proxy: {
+				// https://cn.vitejs.dev/config/#server-proxy
+				'/dev-api': {
+					// target: 'http://192.168.1.28:8080/',
+					target: 'http://localhost:8080/',
+					// target:'http://192.168.1.28:8080/',
+					changeOrigin: true,
+					rewrite: (p) => p.replace(/^\/dev-api/, '')
+				},
+				//websocket代理
+				'/websocket': {
+					target:'ws://localhost:8080/websocket',
+					// target:'ws://192.168.1.28:8080/websocket',
+					// target:'ws://192.168.1.11:8080/websocket',
+					changeOrigin: true,
+					rewrite: (p) => p.replace(/^\/websocket/, '')
+				}
+			}
+		},
+		//fix:error:stdin>:7356:1: warning: "@charset" must be the first rule in the file
+		css: {
+			postcss: {
+				plugins: [{
+					postcssPlugin: 'internal:charset-removal',
+					AtRule: {
+						charset: (atRule) => {
+							if (atRule.name === 'charset') {
+								atRule.remove();
+							}
+						}
+					}
+				}]
+			}
+		}
+	}
+})