Ver código fonte

Merge remote-tracking branch 'origin/dev' into dev

Hwf 2 meses atrás
pai
commit
3976925a20

+ 6 - 6
src/api/comprehensiveGuarantee/reliefResourceManagement/rescueUnit.ts

@@ -1,20 +1,20 @@
 import request from '@/utils/request';
 export function getUnits(params) {
   return request({
-    url: '/api/resource_provison/emergency/rescue_units/',
+    url: '/api/resource_provison/emergency/rescue_units/list',
     method: 'get',
     params: params
   });
 }
 export function getUnit(id) {
   return request({
-    url: `/api/resource_provison/emergency/rescue_units/${id}`,
+    url: `/api/resource_provison/emergency/rescue_units/detail/${id}`,
     method: 'get'
   });
 }
-export function uploadUnit(id, unit) {
+export function editUnit(id, unit) {
   return request({
-    url: '/api/resource_provison/emergency/rescue_units/' + id,
+    url: '/api/resource_provison/emergency/rescue_units/edit/' + id,
     method: 'put',
     data: unit
   });
@@ -30,7 +30,7 @@ export function addUnit(units) {
 // 删除
 export function deleteUnit(id: Array<string | number> | string | number) {
   return request({
-    url: `/api/resource_provison/emergency/delete/rescue_units/` + id,
+    url: `/api/resource_provison/emergency/rescue_units/` + id,
     method: 'delete'
   });
 }
@@ -38,7 +38,7 @@ export function deleteUnit(id: Array<string | number> | string | number) {
 // 导入
 export const importDocXls = (data) => {
   return request({
-    url: '/api/resource_provison/emergency/delete/rescue_units/import',
+    url: '/api/resource_provison/emergency/rescue_units/import',
     method: 'post',
     data: data
   });

+ 2 - 1
src/api/login.ts

@@ -15,7 +15,8 @@ export function login(data: LoginData): AxiosPromise<LoginResult> {
   const params = {
     ...data,
     clientId: data.clientId || clientId,
-    grantType: data.grantType || 'password'
+    grantType: data.grantType || 'password',
+    fromSystem: data.fromSystem || 'yjzp'
   };
   params.password = encryptWithAes(params.password, parseAesKey(params.uuid));
 

+ 9 - 0
src/api/monitor/operlog/index.ts

@@ -27,3 +27,12 @@ export function cleanOperlog() {
     method: 'delete'
   });
 }
+
+// 大屏日志
+export function yjdplist(query: OperLogQuery): AxiosPromise<OperLogVO[]> {
+  return request({
+    url: '/api/system/czrz/yjdplist',
+    method: 'get',
+    params: query
+  });
+}

+ 1 - 0
src/api/types.ts

@@ -26,6 +26,7 @@ export interface LoginData {
   uuid?: string;
   clientId: string;
   grantType: string;
+  fromSystem?: string;
 }
 
 /**

+ 47 - 20
src/views/comprehensiveGuarantee/emergencySpecialistManagement/view.vue

@@ -5,21 +5,21 @@
         <h3 class="common-dialog-title">查看详情</h3>
       </div>
       <div class="common-dialog-box">
-        <el-form ref="form" :model="formData" label-width="120px">
-          <el-form-item label="姓名:" prop="name">
-            <el-input v-model="formData.name" type="textarea" autosize class="custom-disabled" style="width: 468px !important" disabled />
+        <el-form ref="form" :model="formData" label-width="120px" class="flex-form">
+          <el-form-item label="姓名1:" prop="name">
+            <el-input v-model="formData.name" type="textarea" autosize class="custom-disabled" disabled />
           </el-form-item>
           <el-form-item label="所属区县:" prop="county">
-            <el-input v-model="formData.county" type="textarea" autosize class="custom-disabled" style="width: 468px !important" disabled />
+            <el-input v-model="formData.county" type="textarea" autosize class="custom-disabled" disabled />
           </el-form-item>
           <el-form-item label="经度:" prop="longitude">
-            <el-input v-model="formData.longitude" type="textarea" autosize class="custom-disabled" style="width: 468px !important" disabled />
+            <el-input v-model="formData.longitude" type="textarea" autosize class="custom-disabled" disabled />
           </el-form-item>
           <el-form-item label="纬度:" prop="latitude">
-            <el-input v-model="formData.latitude" type="textarea" autosize class="custom-disabled" style="width: 468px !important" disabled />
+            <el-input v-model="formData.latitude" type="textarea" autosize class="custom-disabled" disabled />
           </el-form-item>
           <el-form-item label="专家类型:" prop="expert_type">
-            <el-input v-model="formData.expert_type" type="textarea" autosize class="custom-disabled" style="width: 468px !important" disabled />
+            <el-input v-model="formData.expert_type" type="textarea" autosize class="custom-disabled" disabled />
           </el-form-item>
 <!--          <el-form-item label="救援经历:" prop="rescue_experience">-->
 <!--            <el-input-->
@@ -32,13 +32,13 @@
 <!--            />-->
 <!--          </el-form-item>-->
           <el-form-item label="荣誉称号:" prop="honorary_title">
-            <el-input v-model="formData.honorary_title" type="textarea" autosize class="custom-disabled" style="width: 468px !important" disabled />
+            <el-input v-model="formData.honorary_title" type="textarea" autosize class="custom-disabled" disabled />
           </el-form-item>
           <el-form-item label="工作单位:" prop="unit">
-            <el-input v-model="formData.unit" type="textarea" autosize class="custom-disabled" style="width: 468px !important" disabled />
+            <el-input v-model="formData.unit" type="textarea" autosize class="custom-disabled" disabled />
           </el-form-item>
           <el-form-item label="职务:" prop="position">
-            <el-input v-model="formData.position" type="textarea" autosize class="custom-disabled" style="width: 468px !important" disabled />
+            <el-input v-model="formData.position" type="textarea" autosize class="custom-disabled" disabled />
           </el-form-item>
           <el-form-item label="职称:" prop="professional_title">
             <el-input
@@ -46,7 +46,6 @@
               type="textarea"
               autosize
               class="custom-disabled"
-              style="width: 468px !important"
               disabled
             />
           </el-form-item>
@@ -56,7 +55,6 @@
               type="textarea"
               autosize
               class="custom-disabled"
-              style="width: 468px !important"
               disabled
             />
           </el-form-item>
@@ -66,7 +64,6 @@
               type="textarea"
               autosize
               class="custom-disabled"
-              style="width: 468px !important"
               disabled
             />
           </el-form-item>
@@ -76,7 +73,6 @@
               type="textarea"
               autosize
               class="custom-disabled"
-              style="width: 468px !important"
               disabled
             />
           </el-form-item>
@@ -86,24 +82,23 @@
               type="textarea"
               autosize
               class="custom-disabled"
-              style="width: 468px !important"
               disabled
             />
           </el-form-item>
           <el-form-item label="工作电话:" prop="work_phone">
-            <el-input v-model="formData.work_phone" type="textarea" autosize class="custom-disabled" style="width: 468px !important" disabled />
+            <el-input v-model="formData.work_phone" type="textarea" autosize class="custom-disabled" disabled />
           </el-form-item>
           <el-form-item label="住宅电话:" prop="home_phone">
-            <el-input v-model="formData.home_phone" type="textarea" autosize class="custom-disabled" style="width: 468px !important" disabled />
+            <el-input v-model="formData.home_phone" type="textarea" autosize class="custom-disabled" disabled />
           </el-form-item>
           <el-form-item label="移动电话:" prop="mobile_phone">
-            <el-input v-model="formData.mobile_phone" type="textarea" autosize class="custom-disabled" style="width: 468px !important" disabled />
+            <el-input v-model="formData.mobile_phone" type="textarea" autosize class="custom-disabled" disabled />
           </el-form-item>
           <el-form-item label="电子邮箱:" prop="email">
-            <el-input v-model="formData.email" type="textarea" autosize class="custom-disabled" style="width: 468px !important" disabled />
+            <el-input v-model="formData.email" type="textarea" autosize class="custom-disabled" disabled />
           </el-form-item>
           <el-form-item label="联系地址:" prop="contact_address">
-            <el-input v-model="formData.contact_address" type="textarea" autosize class="custom-disabled" style="width: 468px !important" disabled />
+            <el-input v-model="formData.contact_address" type="textarea" autosize class="custom-disabled" disabled />
           </el-form-item>
         </el-form>
         <div class="common-dialog-footer">
@@ -171,4 +166,36 @@ onMounted(() => {
     resize: none !important;
   }
 }
+
+/* 一行两列的自动布局 */
+.flex-form {
+  display: flex;
+  flex-wrap: wrap;
+}
+
+.flex-form .el-form-item {
+  width: 48%;
+  margin-right: 2%;
+  margin-bottom: 20px;
+}
+
+.flex-form .el-form-item:nth-child(2n) {
+  margin-right: 0;
+}
+
+/* 清除浮动 */
+.flex-form::after {
+  content: "";
+  display: table;
+  clear: both;
+}
+
+@media (max-width: 768px) {
+  .two-column-form .el-form-item,
+  .flex-form .el-form-item {
+    width: 100%;
+    margin-right: 0;
+  }
+}
+
 </style>

+ 2 - 2
src/views/comprehensiveGuarantee/reliefResourceManagement/rescueUnit.vue

@@ -36,7 +36,7 @@
           <template #default="scope">
             <el-text class="common-btn-text-primary" @click="handleView(scope.row)">查看</el-text>
             <el-text class="common-btn-text-primary" @click="handleUpdate(scope.row)">编辑</el-text>
-            <el-text class="common-btn-text-primary" @click="handleDelete(scope.row)">停用</el-text>
+            <el-text class="common-btn-text-danger" @click="handleDelete(scope.row)">停用</el-text>
           </template>
         </el-table-column>
       </el-table>
@@ -168,7 +168,7 @@ const handleDelete = (row: any) => {
   proxy?.$modal.confirm('是否确认删除选择的数据项?').then(() => {
     deleteUnit(row.id).then(() => {
       proxy?.$modal.msgSuccess('停用成功');
-      // deleteUnit();
+      fetchUnitData();
     });
   });
 };

+ 0 - 1
src/views/comprehensiveGuarantee/reliefResourceManagement/rescueUnitAdd.vue

@@ -89,7 +89,6 @@ const formData = ref({
   category: '',
   contact_number: '',
   responsible_person: '',
-  contact_number: '',
   team_size: '0',
   supervisor_unit: '',
   unit_prop: '',

+ 54 - 22
src/views/comprehensiveGuarantee/reliefResourceManagement/rescueUnitEdit.vue

@@ -11,58 +11,58 @@
           主管单位、主管单位联系人、主管单位联系人电话、队伍负责人、队伍负责人移动电话、队伍所在地址、
           所属行政区域、成立时间、增量标识、增量时间、批次号、新增时间
         -->
-        <el-form ref="form" :model="formData" :rules="rules" label-width="auto">
+        <el-form ref="form" :model="formData" :rules="rules" label-width="auto" class="flex-form">
           <el-form-item label="队伍名称:" prop="name">
-            <el-input v-model="formData.name" style="width: 468px !important" />
+            <el-input v-model="formData.name"/>
           </el-form-item>
           <el-form-item label="队伍类型:" prop="category">
-            <el-input v-model="formData.category" style="width: 468px !important" />
+            <el-input v-model="formData.category"/>
           </el-form-item>
           <el-form-item label="队伍属性:" prop="unit_prop">
-            <el-input v-model="formData.unit_prop" style="width: 468px !important" />
+            <el-input v-model="formData.unit_prop"/>
           </el-form-item>
           <el-form-item label="队伍级别:" prop="unit_level">
-            <el-input v-model="formData.unit_level" style="width: 468px !important" />
+            <el-input v-model="formData.unit_level"/>
           </el-form-item>
           <el-form-item label="队伍特长:" prop="unit_favor">
-            <el-input v-model="formData.unit_favor" style="width: 468px !important" />
+            <el-input v-model="formData.unit_favor"/>
           </el-form-item>
           <el-form-item label="队伍人数:" prop="team_size">
-            <el-input v-model="formData.team_size" type="number" style="width: 468px !important" />
+            <el-input v-model="formData.team_size" type="number"/>
           </el-form-item>
           <el-form-item label="值班电话:" prop="contact_number">
-            <el-input v-model="formData.contact_number" style="width: 468px !important" />
+            <el-input v-model="formData.contact_number"/>
           </el-form-item>
           <el-form-item label="主管单位:" prop="supervisor_unit">
-            <el-input v-model="formData.supervisor_unit" style="width: 468px !important" />
+            <el-input v-model="formData.supervisor_unit"/>
           </el-form-item>
           <el-form-item label="主管单位联系人:" prop="supervisor_unit_contact">
-            <el-input v-model="formData.supervisor_unit_contact" style="width: 468px !important" />
+            <el-input v-model="formData.supervisor_unit_contact"/>
           </el-form-item>
           <el-form-item label="主管单位联系人电话:" prop="supervisor_unit_phone">
-            <el-input v-model="formData.supervisor_unit_phone" style="width: 468px !important" />
+            <el-input v-model="formData.supervisor_unit_phone"/>
           </el-form-item>
           <el-form-item label="队伍负责人:" prop="responsible_person">
-            <el-input v-model="formData.responsible_person" style="width: 468px !important" />
+            <el-input v-model="formData.responsible_person"/>
           </el-form-item>
           <el-form-item label="负责人职务:" prop="position">
-            <el-input v-model="formData.position" style="width: 468px !important" />
+            <el-input v-model="formData.position"/>
           </el-form-item>
           <el-form-item label="队伍负责人移动电话:" prop="responsible_person_phone">
-            <el-input v-model="formData.responsible_person_phone" style="width: 468px !important" />
+            <el-input v-model="formData.responsible_person_phone"/>
           </el-form-item>
           <el-form-item label="队伍所在地址:" prop="address">
-            <el-input v-model="formData.address" placeholder="请输入地址" style="width: 468px !important" readonly>
+            <el-input v-model="formData.address" placeholder="请输入地址"readonly>
               <template #append>
                 <el-button type="primary" @click="openMapDialog">地图定位</el-button>
               </template>
             </el-input>
           </el-form-item>
           <el-form-item label="所属行政区域:" prop="area">
-            <el-input v-model="formData.area" style="width: 468px !important" />
+            <el-input v-model="formData.area"/>
           </el-form-item>
           <el-form-item label="成立时间:" prop="founding_time">
-            <el-input v-model="formData.founding_time" style="width: 468px !important" />
+            <el-input v-model="formData.founding_time"/>
           </el-form-item>
         </el-form>
         <div class="common-dialog-footer">
@@ -79,7 +79,7 @@
 <script setup lang="ts">
 import { ref, onMounted } from 'vue';
 import { ElMessage } from 'element-plus';
-import { getUnit, uploadUnit } from '@/api/comprehensiveGuarantee/reliefResourceManagement/rescueUnit';
+import { getUnit, editUnit } from '@/api/comprehensiveGuarantee/reliefResourceManagement/rescueUnit';
 
 const emits = defineEmits(['close']);
 const props = defineProps<{
@@ -92,7 +92,6 @@ const formData = ref({
   category: '',
   contact_number: '',
   responsible_person: '',
-  contact_number: '',
   team_size: '',
   supervisor_unit: '',
   unit_prop: '',
@@ -154,11 +153,11 @@ const fetchUnitData = async () => {
 };
 const submitForm = async () => {
   // 假设表单已经通过验证
-  const response = await uploadUnit(props.eventId, formData.value);
+  const response = await editUnit(props.eventId, formData.value);
   if (response.code === 200) {
     ElMessage.success('提交成功');
     closeDialog();
-    emits('refresh');
+    emits('close');
   } else {
     ElMessage.error(response.msg);
   }
@@ -168,4 +167,37 @@ onMounted(() => {
 });
 </script>
 
-<style scoped></style>
+<style scoped>
+
+
+/* 一行两列的自动布局 */
+.flex-form {
+  display: flex;
+  flex-wrap: wrap;
+}
+
+.flex-form .el-form-item {
+  width: 48%;
+  margin-right: 2%;
+  margin-bottom: 20px;
+}
+
+.flex-form .el-form-item:nth-child(2n) {
+  margin-right: 0;
+}
+
+/* 清除浮动 */
+.flex-form::after {
+  content: "";
+  display: table;
+  clear: both;
+}
+
+@media (max-width: 768px) {
+  .two-column-form .el-form-item,
+  .flex-form .el-form-item {
+    width: 100%;
+    margin-right: 0;
+  }
+}
+</style>

+ 54 - 18
src/views/comprehensiveGuarantee/reliefResourceManagement/rescueUnitView.vue

@@ -11,58 +11,60 @@
           主管单位、主管单位联系人、主管单位联系人电话、队伍负责人、队伍负责人移动电话、队伍所在地址、
           所属行政区域、成立时间、增量标识、增量时间、批次号、新增时间
         -->
-        <el-form ref="form" :model="formData" :rules="rules" label-width="auto">
+        <el-form ref="form" :model="formData" :rules="rules" label-width="auto" class="flex-form">
           <el-form-item label="队伍名称:" prop="name">
-            <el-input v-model="formData.name" style="width: 468px !important" />
+            <el-input v-model="formData.name" class="custom-disabled" disabled/>
           </el-form-item>
           <el-form-item label="队伍类型:" prop="category">
-            <el-input v-model="formData.category" style="width: 468px !important" />
+            <el-input v-model="formData.category" class="custom-disabled" disabled/>
           </el-form-item>
           <el-form-item label="队伍属性:" prop="unit_prop">
-            <el-input v-model="formData.unit_prop" style="width: 468px !important" />
+            <el-input v-model="formData.unit_prop" class="custom-disabled" disabled/>
           </el-form-item>
           <el-form-item label="队伍级别:" prop="unit_level">
-            <el-input v-model="formData.unit_level" style="width: 468px !important" />
+            <el-input v-model="formData.unit_level" class="custom-disabled" disabled/>
           </el-form-item>
           <el-form-item label="队伍特长:" prop="unit_favor">
-            <el-input v-model="formData.unit_favor" style="width: 468px !important" />
+            <el-input v-model="formData.unit_favor" class="custom-disabled" disabled/>
           </el-form-item>
           <el-form-item label="队伍人数:" prop="team_size">
-            <el-input v-model="formData.team_size" style="width: 468px !important" />
+            <el-input v-model="formData.team_size" class="custom-disabled" disabled/>
           </el-form-item>
           <el-form-item label="值班电话:" prop="contact_number">
-            <el-input v-model="formData.contact_number" style="width: 468px !important" />
+            <el-input v-model="formData.contact_number" class="custom-disabled" disabled/>
           </el-form-item>
           <el-form-item label="主管单位:" prop="supervisor_unit">
-            <el-input v-model="formData.supervisor_unit" style="width: 468px !important" />
+            <el-input v-model="formData.supervisor_unit" class="custom-disabled" disabled/>
           </el-form-item>
           <el-form-item label="主管单位联系人:" prop="supervisor_unit_contact">
-            <el-input v-model="formData.supervisor_unit_contact" style="width: 468px !important" />
+            <el-input v-model="formData.supervisor_unit_contact" class="custom-disabled" disabled/>
           </el-form-item>
           <el-form-item label="主管单位联系人电话:" prop="supervisor_unit_phone">
-            <el-input v-model="formData.supervisor_unit_phone" style="width: 468px !important" />
+            <el-input v-model="formData.supervisor_unit_phone" class="custom-disabled" disabled/>
           </el-form-item>
           <el-form-item label="队伍负责人:" prop="responsible_person">
-            <el-input v-model="formData.responsible_person" style="width: 468px !important" />
+            <el-input v-model="formData.responsible_person" class="custom-disabled" disabled/>
           </el-form-item>
           <el-form-item label="负责人职务:" prop="position">
-            <el-input v-model="formData.position" style="width: 468px !important" />
+            <el-input v-model="formData.position" class="custom-disabled" disabled/>
           </el-form-item>
           <el-form-item label="队伍负责人移动电话:" prop="responsible_person_phone">
-            <el-input v-model="formData.responsible_person_phone" style="width: 468px !important" />
+            <el-input v-model="formData.responsible_person_phone" class="custom-disabled" disabled/>
           </el-form-item>
           <el-form-item label="队伍所在地址:" prop="address">
-            <el-input v-model="formData.address" placeholder="请输入地址" style="width: 468px !important" readonly>
+            <el-input v-model="formData.address" placeholder="请输入地址" class="custom-disabled" disabled readonly>
+              <!--
               <template #append>
                 <el-button type="primary" @click="openMapDialog">地图定位</el-button>
               </template>
+              -->
             </el-input>
           </el-form-item>
           <el-form-item label="所属行政区域:" prop="area">
-            <el-input v-model="formData.area" style="width: 468px !important" />
+            <el-input v-model="formData.area" class="custom-disabled" disabled/>
           </el-form-item>
           <el-form-item label="成立时间:" prop="founding_time">
-            <el-input v-model="formData.founding_time" style="width: 468px !important" />
+            <el-input v-model="formData.founding_time" class="custom-disabled" disabled/>
           </el-form-item>
         </el-form>
         <div class="common-dialog-footer">
@@ -89,7 +91,6 @@ const formData = ref({
   category: '',
   contact_number: '',
   responsible_person: '',
-  contact_number: '',
   team_size: '',
   supervisor_unit: '',
   unit_prop: '',
@@ -108,6 +109,9 @@ const formData = ref({
   latitude: '',
 });
 
+const rules = reactive({
+});
+
 const closeDialog = () => {
   emits('close');
 };
@@ -137,4 +141,36 @@ onMounted(() => {
     -webkit-text-fill-color: rgba(0, 0, 0, 0.85) !important;
   }
 }
+
+
+/* 一行两列的自动布局 */
+.flex-form {
+  display: flex;
+  flex-wrap: wrap;
+}
+
+.flex-form .el-form-item {
+  width: 48%;
+  margin-right: 2%;
+  margin-bottom: 20px;
+}
+
+.flex-form .el-form-item:nth-child(2n) {
+  margin-right: 0;
+}
+
+/* 清除浮动 */
+.flex-form::after {
+  content: "";
+  display: table;
+  clear: both;
+}
+
+@media (max-width: 768px) {
+  .two-column-form .el-form-item,
+  .flex-form .el-form-item {
+    width: 100%;
+    margin-right: 0;
+  }
+}
 </style>

+ 1 - 1
src/views/monitor/operlog/index.vue

@@ -67,7 +67,7 @@
           :show-overflow-tooltip="true"
         />
         <el-table-column label="操作地址" align="center" prop="operIp" width="130" :show-overflow-tooltip="true" />
-        <el-table-column label="操作内容" align="center" prop="czrz" :min-width="230" :show-overflow-tooltip="true" />
+        <el-table-column label="操作内容" align="left" prop="czrz" :min-width="230" :show-overflow-tooltip="true" />
         <el-table-column label="操作日期" align="center" prop="operTime" width="180">
         </el-table-column>
       </el-table>

+ 263 - 0
src/views/monitor/yjdplog/index.vue

@@ -0,0 +1,263 @@
+<template>
+  <div class="app-container">
+    <transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
+      <div v-show="showSearch" class="mb-[10px]">
+          <el-form ref="queryFormRef" :model="queryParams" :inline="true" label-width="auto">
+            <el-form-item label="操作地址:" prop="operIp">
+              <el-input v-model="queryParams.operIp" placeholder="请输入操作地址" clearable @keyup.enter="handleQuery" />
+            </el-form-item>
+            <el-form-item label="操作人员:" prop="operName">
+              <el-input v-model="queryParams.operName" placeholder="请输入操作人员" clearable @keyup.enter="handleQuery" />
+            </el-form-item>
+            <!-- el-form-item label="类型:" prop="businessType">
+              <el-select v-model="queryParams.businessType" placeholder="操作类型" clearable>
+                <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="操作时间:" 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>
+    </transition>
+      <!--
+        <el-row :gutter="10" class="mb8">
+          <el-col :span="1.5">
+            <el-button v-hasPermi="['monitor:operlog:remove']" type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()">
+              删除
+            </el-button>
+          </el-col>
+          <el-col :span="1.5">
+            <el-button v-hasPermi="['monitor:operlog:remove']" type="danger" plain icon="WarnTriangleFilled" @click="handleClean">清空</el-button>
+          </el-col>
+          <el-col :span="1.5">
+            <el-button v-hasPermi="['monitor:operlog:export']" type="warning" plain icon="Download" @click="handleExport">导出</el-button>
+          </el-col>
+          <right-toolbar v-model:showSearch="showSearch" @query-table="getList"></right-toolbar>
+        </el-row>
+      -->
+      <el-table
+        ref="operLogTableRef"
+        v-loading="loading"
+        :data="operlogList"
+        
+        @selection-change="handleSelectionChange"
+        @sort-change="handleSortChange"
+      >
+        <el-table-column align="center" type="index">
+        </el-table-column>
+        <el-table-column
+          label="操作人员"
+          align="center"
+          width="200"
+          prop="operName"
+          :show-overflow-tooltip="true"
+        />
+        <el-table-column label="操作地址" align="center" prop="operIp" width="130" :show-overflow-tooltip="true" />
+        <el-table-column label="操作内容" align="left" prop="czrz" :min-width="230" :show-overflow-tooltip="true" />
+        <el-table-column label="操作日期" align="center" prop="operTime" width="180">
+        </el-table-column>
+      </el-table>
+
+      <pagination v-show="total > 0" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" :total="total" @pagination="getList" />
+
+    <!-- 操作日志详细 -->
+    <el-dialog v-model="dialog.visible" title="操作日志详细" width="700px" append-to-body>
+      <el-form :model="form" label-width="100px">
+        <el-row>
+          <el-col :span="24">
+            <el-form-item label="登录信息:">{{ form.operName }} / {{ form.deptName }} / {{ form.operIp }} / {{ form.operLocation }}</el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="请求信息:">{{ form.requestMethod }} {{ form.operUrl }}</el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="操作模块:">{{ form.title }} / {{ typeFormat(form) }}</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 v-if="form.status === 1" label="异常信息:">{{ form.errorMsg }}</el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+      <template #footer>
+        <div class="dialog-footer">
+          <el-button @click="dialog.visible = false">关 闭</el-button>
+        </div>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+
+<script setup name="Operlog" lang="ts">
+import { yjdplist as list, delOperlog, cleanOperlog } from '@/api/monitor/operlog';
+import { OperLogForm, OperLogQuery, OperLogVO } from '@/api/monitor/operlog/types';
+
+const { proxy } = getCurrentInstance() as ComponentInternalInstance;
+const { sys_oper_type, sys_common_status } = toRefs<any>(proxy?.useDict('sys_oper_type', 'sys_common_status'));
+
+const operlogList = ref<OperLogVO[]>([]);
+const loading = ref(true);
+const showSearch = ref(true);
+const ids = ref<Array<number | string>>([]);
+const multiple = ref(true);
+const total = ref(0);
+const dateRange = ref<[DateModelType, DateModelType]>(['', '']);
+const defaultSort = ref<any>({ prop: 'operTime', order: 'descending' });
+
+const operLogTableRef = ref<ElTableInstance>();
+const queryFormRef = ref<ElFormInstance>();
+
+const dialog = reactive<DialogOption>({
+  visible: false,
+  title: ''
+});
+
+const data = reactive<PageData<OperLogForm, OperLogQuery>>({
+  form: {
+    operId: undefined,
+    tenantId: undefined,
+    title: '',
+    businessType: 0,
+    businessTypes: undefined,
+    method: '',
+    requestMethod: '',
+    operatorType: 0,
+    operName: '',
+    deptName: '',
+    operUrl: '',
+    operIp: '',
+    operLocation: '',
+    operParam: '',
+    jsonResult: '',
+    status: 0,
+    errorMsg: '',
+    operTime: '',
+    costTime: 0
+  },
+  queryParams: {
+    pageNum: 1,
+    pageSize: 10,
+    operIp: '',
+    title: '',
+    operName: '',
+    businessType: '',
+    status: '',
+    orderByColumn: defaultSort.value.prop,
+    isAsc: defaultSort.value.order
+  },
+  rules: {}
+});
+
+const { queryParams, form } = toRefs(data);
+
+/** 查询登录日志 */
+const getList = async () => {
+  loading.value = true;
+
+  const [startDate, endDate] = dateRange.value;
+  const formattedStartDate = startDate ? startDate.replace(/-/g, '/') : '';
+  const formattedEndDate = endDate ? endDate.replace(/-/g, '/') : '';
+  const dateRangeStr = formattedStartDate && formattedEndDate ? `${formattedStartDate}-${formattedEndDate}` : '';
+
+  const res = await list({...queryParams.value, dateRange: dateRangeStr});
+  // const res = await list(proxy?.addDateRange(queryParams.value, dateRange.value));
+  operlogList.value = res.rows;
+  total.value = res.total;
+  loading.value = false;
+};
+/** 操作日志类型字典翻译 */
+const typeFormat = (row: OperLogForm) => {
+  return proxy?.selectDictLabel(sys_oper_type.value, row.businessType);
+};
+/** 搜索按钮操作 */
+const handleQuery = () => {
+  queryParams.value.pageNum = 1;
+  getList();
+};
+/** 重置按钮操作 */
+const resetQuery = () => {
+  dateRange.value = ['', ''];
+  queryFormRef.value?.resetFields();
+  queryParams.value.pageNum = 1;
+  operLogTableRef.value?.sort(defaultSort.value.prop, defaultSort.value.order);
+};
+/** 多选框选中数据 */
+const handleSelectionChange = (selection: OperLogVO[]) => {
+  ids.value = selection.map((item) => item.operId);
+  multiple.value = !selection.length;
+};
+/** 排序触发事件 */
+const handleSortChange = (column: any) => {
+  queryParams.value.orderByColumn = column.prop;
+  queryParams.value.isAsc = column.order;
+  getList();
+};
+/** 详细按钮操作 */
+const handleView = (row: OperLogVO) => {
+  dialog.visible = true;
+  form.value = row;
+};
+/** 删除按钮操作 */
+const handleDelete = async (row?: OperLogVO) => {
+  const operIds = row?.operId || ids.value;
+  await proxy?.$modal.confirm('是否确认删除日志编号为"' + operIds + '"的数据项?');
+  await delOperlog(operIds);
+  await getList();
+  proxy?.$modal.msgSuccess('删除成功');
+};
+
+/** 清空按钮操作 */
+const handleClean = async () => {
+  await proxy?.$modal.confirm('是否确认清空所有操作日志数据项?');
+  await cleanOperlog();
+  await getList();
+  proxy?.$modal.msgSuccess('清空成功');
+};
+
+/** 导出按钮操作 */
+const handleExport = () => {
+  proxy?.download(
+    'monitor/operlog/export',
+    {
+      ...queryParams.value
+    },
+    `config_${new Date().getTime()}.xlsx`
+  );
+};
+onMounted(() => {
+  getList();
+});
+</script>