Explorar o código

事件跳转事件详情

Hwf hai 9 meses
pai
achega
81ea88aae4

+ 1 - 1
src/api/system/user/index.ts

@@ -9,7 +9,7 @@ import { parseStrEmpty } from '@/utils/ruoyi';
  * 查询用户列表
  * @param query
  */
-export const listUser = (query: UserQuery): AxiosPromise<UserVO[]> => {
+export const listUser = (query): AxiosPromise<UserVO[]> => {
   return request({
     url: '/system/user/list',
     method: 'get',

+ 5 - 5
src/layout/components/Navbar.vue

@@ -133,11 +133,11 @@ const dynamicClearEvent = async () => {
 
 /** 租户列表 */
 const initTenantList = async () => {
-  const { data } = await getTenantList();
-  tenantEnabled.value = data.tenantEnabled === undefined ? true : data.tenantEnabled;
-  if (tenantEnabled.value) {
-    tenantList.value = data.voList;
-  }
+  // const { data } = await getTenantList();
+  // tenantEnabled.value = data.tenantEnabled === undefined ? true : data.tenantEnabled;
+  // if (tenantEnabled.value) {
+  //   tenantList.value = data.voList;
+  // }
 };
 
 defineExpose({

+ 14 - 0
src/router/index.ts

@@ -88,6 +88,20 @@ export const constantRoutes: RouteRecordRaw[] = [
         meta: { title: '个人中心', icon: 'user' }
       }
     ]
+  },
+  {
+    path: '/test',
+    component: Layout,
+    hidden: true,
+    redirect: 'noredirect',
+    children: [
+      {
+        path: 'eventDetails',
+        component: () => import('@/views/duty/eventing/eventDetails.vue'),
+        name: 'eventDetails',
+        meta: { title: '事件详情', icon: 'user' }
+      }
+    ]
   }
 ];
 

+ 4 - 18
src/types/components.d.ts

@@ -21,15 +21,9 @@ declare module 'vue' {
     ElBreadcrumb: typeof import('element-plus/es')['ElBreadcrumb']
     ElBreadcrumbItem: typeof import('element-plus/es')['ElBreadcrumbItem']
     ElButton: typeof import('element-plus/es')['ElButton']
-    ElCard: typeof import('element-plus/es')['ElCard']
-    ElCheckbox: typeof import('element-plus/es')['ElCheckbox']
-    ElCheckboxGroup: typeof import('element-plus/es')['ElCheckboxGroup']
     ElCol: typeof import('element-plus/es')['ElCol']
-    ElCollapse: typeof import('element-plus/es')['ElCollapse']
-    ElCollapseItem: typeof import('element-plus/es')['ElCollapseItem']
     ElColorPicker: typeof import('element-plus/es')['ElColorPicker']
     ElConfigProvider: typeof import('element-plus/es')['ElConfigProvider']
-    ElContainer: typeof import('element-plus/es')['ElContainer']
     ElDatePicker: typeof import('element-plus/es')['ElDatePicker']
     ElDialog: typeof import('element-plus/es')['ElDialog']
     ElDivider: typeof import('element-plus/es')['ElDivider']
@@ -40,45 +34,37 @@ declare module 'vue' {
     ElEmpty: typeof import('element-plus/es')['ElEmpty']
     ElForm: typeof import('element-plus/es')['ElForm']
     ElFormItem: typeof import('element-plus/es')['ElFormItem']
-    ElHeader: typeof import('element-plus/es')['ElHeader']
     ElIcon: typeof import('element-plus/es')['ElIcon']
-    ElImage: typeof import('element-plus/es')['ElImage']
     ElInput: typeof import('element-plus/es')['ElInput']
     ElInputNumber: typeof import('element-plus/es')['ElInputNumber']
-    ElLink: typeof import('element-plus/es')['ElLink']
-    ElMain: typeof import('element-plus/es')['ElMain']
     ElMenu: typeof import('element-plus/es')['ElMenu']
     ElMenuItem: typeof import('element-plus/es')['ElMenuItem']
     ElOption: typeof import('element-plus/es')['ElOption']
     ElPagination: typeof import('element-plus/es')['ElPagination']
     ElPopover: typeof import('element-plus/es')['ElPopover']
-    ElProgress: typeof import('element-plus/es')['ElProgress']
     ElRadio: typeof import('element-plus/es')['ElRadio']
-    ElRadioButton: typeof import('element-plus/es')['ElRadioButton']
     ElRadioGroup: typeof import('element-plus/es')['ElRadioGroup']
     ElRow: typeof import('element-plus/es')['ElRow']
     ElScrollbar: typeof import('element-plus/es')['ElScrollbar']
     ElSelect: typeof import('element-plus/es')['ElSelect']
-    ElSpace: typeof import('element-plus/es')['ElSpace']
+    ElStep: typeof import('element-plus/es')['ElStep']
+    ElSteps: typeof import('element-plus/es')['ElSteps']
     ElSubMenu: typeof import('element-plus/es')['ElSubMenu']
     ElSwitch: typeof import('element-plus/es')['ElSwitch']
     ElTable: typeof import('element-plus/es')['ElTable']
     ElTableColumn: typeof import('element-plus/es')['ElTableColumn']
-    ElTabPane: typeof import('element-plus/es')['ElTabPane']
-    ElTabs: typeof import('element-plus/es')['ElTabs']
     ElTag: typeof import('element-plus/es')['ElTag']
-    ElText: typeof import('element-plus/es')['ElText']
+    ElTimeline: typeof import('element-plus/es')['ElTimeline']
+    ElTimelineItem: typeof import('element-plus/es')['ElTimelineItem']
     ElTooltip: typeof import('element-plus/es')['ElTooltip']
     ElTree: typeof import('element-plus/es')['ElTree']
     ElTreeSelect: typeof import('element-plus/es')['ElTreeSelect']
-    ElUpload: typeof import('element-plus/es')['ElUpload']
     FileUpload: typeof import('./../components/FileUpload/index.vue')['default']
     Hamburger: typeof import('./../components/Hamburger/index.vue')['default']
     HeaderSearch: typeof import('./../components/HeaderSearch/index.vue')['default']
     IconSelect: typeof import('./../components/IconSelect/index.vue')['default']
     IEpCaretBottom: typeof import('~icons/ep/caret-bottom')['default']
     IEpCaretTop: typeof import('~icons/ep/caret-top')['default']
-    IEpUploadFilled: typeof import('~icons/ep/upload-filled')['default']
     IFrame: typeof import('./../components/iFrame/index.vue')['default']
     ImagePreview: typeof import('./../components/ImagePreview/index.vue')['default']
     ImageUpload: typeof import('./../components/ImageUpload/index.vue')['default']

+ 6 - 3
src/views/duty/eventing/eventDetails.vue

@@ -1,7 +1,7 @@
 <template>
   <div class="app-container">
-    <div class="back-btn">
-      <el-icon @click="handleBack"><Back /></el-icon>
+    <div class="back-btn" @click="handleBack">
+      <el-icon><Back /></el-icon>
       返回上一级
     </div>
     <div class="line">
@@ -181,7 +181,7 @@ const eventTrackState = reactive({
 });
 // 返回上一级
 const handleBack = () => {
-  router.back();
+  router.go(-1);
 };
 </script>
 
@@ -273,4 +273,7 @@ const handleBack = () => {
   border-color: #fad400 !important;
   color: #fad400;
 }
+.back-btn {
+  cursor: pointer;
+}
 </style>

+ 61 - 82
src/views/duty/eventing/index.vue

@@ -48,12 +48,7 @@
               <el-form-item label="行政区划" prop="regionCode">
                 <el-select v-model="queryParams.regionCode" placeholder="全部" clearable>
                   <el-option label="全部" value=""></el-option>
-                  <el-option
-                    v-for="item in data.regionSelection"
-                    :key="item.dictValue"
-                    :label="item.dictLabel"
-                    :value="item.dictValue"
-                  ></el-option>
+                  <el-option v-for="item in data.regionSelection" :key="item.dictValue" :label="item.dictLabel" :value="item.dictValue"></el-option>
                 </el-select>
               </el-form-item>
             </el-col>
@@ -61,21 +56,16 @@
           <el-row :gutter="10" class="mt-[10px]">
             <el-col :span="6">
               <el-form-item label="事发时间" prop="eventTime">
-                <el-date-picker
-                  v-model="queryParams.eventTime"
-                  type="datetime"
-                  placeholder="选择事发时间"
-                ></el-date-picker>
+                <el-date-picker v-model="queryParams.eventTime" type="datetime" placeholder="选择事发时间"></el-date-picker>
               </el-form-item>
             </el-col>
             <el-col :span="6">
               <el-form-item>
-                <el-input v-model="queryParams.subject" placeholder="请输入事件标题/事件地点" clearable
-                          @keyup.enter="handleQuery"/>
+                <el-input v-model="queryParams.subject" placeholder="请输入事件标题/事件地点" clearable @keyup.enter="handleQuery" />
               </el-form-item>
             </el-col>
-              <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
-              <el-button icon="Refresh" @click="resetQuery">重置</el-button>
+            <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
+            <el-button icon="Refresh" @click="resetQuery">重置</el-button>
           </el-row>
         </el-form>
       </div>
@@ -85,21 +75,20 @@
         <el-button type="primary" plain icon="Plus" @click="handleAdd">新增事件</el-button>
       </el-col>
       <el-col :span="1.5">
-        <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete(selectedRow)">删除事件
-        </el-button>
+        <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete(selectedRow)">删除事件 </el-button>
       </el-col>
     </el-row>
 
     <!-- 表格组w件 -->
     <el-table v-loading="loading" :data="eventList" @selection-change="handleSelectionChange">
-      <el-table-column type="selection" width="55" align="center"/>
-      <el-table-column label="事件编号" align="center" prop="eventId"/>
-      <el-table-column label="事件标题" align="center" prop="eventTitle"/>
-      <el-table-column label="事件类型" align="center" prop="eventType"/>
-      <el-table-column label="事件等级" align="center" prop="eventLevel"/>
-      <el-table-column label="事件地点" align="center" prop="address"/>
-      <el-table-column label="事件状态" align="center" prop="eventStatus"/>
-      <el-table-column label="事件时间" align="center" prop="eventTime"/>
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="事件编号" align="center" prop="eventId" />
+      <el-table-column label="事件标题" align="center" prop="eventTitle" />
+      <el-table-column label="事件类型" align="center" prop="eventType" />
+      <el-table-column label="事件等级" align="center" prop="eventLevel" />
+      <el-table-column label="事件地点" align="center" prop="address" />
+      <el-table-column label="事件状态" align="center" prop="eventStatus" />
+      <el-table-column label="事件时间" align="center" prop="eventTime" />
       <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
         <template #default="scope">
           <el-tooltip content="查看" placement="top">
@@ -115,43 +104,27 @@
       </el-table-column>
     </el-table>
 
-    <pagination v-show="total > 0" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize"
-                :total="total" @pagination="getList"/>
+    <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="dialog.title" width="500px" append-to-body>
       <el-form ref="eventFormRef" :model="form" :rules="rules" label-width="80px">
         <el-form-item label="事件标题" prop="eventTitle">
-          <el-input v-model="form.eventTitle" placeholder="请输入事件标题"/>
+          <el-input v-model="form.eventTitle" placeholder="请输入事件标题" />
         </el-form-item>
         <el-form-item label="事件类型" prop="eventType">
           <el-select v-model="form.eventType" placeholder="请选择事件类型" clearable>
-            <el-option
-              v-for="item in data.eventTypeSelection"
-              :key="item.dictValue"
-              :label="item.dictLabel"
-              :value="item.dictValue"
-            ></el-option>
+            <el-option v-for="item in data.eventTypeSelection" :key="item.dictValue" :label="item.dictLabel" :value="item.dictValue"></el-option>
           </el-select>
         </el-form-item>
         <el-form-item label="事件等级" prop="eventLevel">
           <el-select v-model="form.eventLevel" placeholder="请选择事件等级" clearable>
-            <el-option
-              v-for="item in data.eventLevelSelection"
-              :key="item.dictValue"
-              :label="item.dictLabel"
-              :value="item.dictValue"
-            ></el-option>
+            <el-option v-for="item in data.eventLevelSelection" :key="item.dictValue" :label="item.dictLabel" :value="item.dictValue"></el-option>
           </el-select>
         </el-form-item>
         <el-form-item label="事件状态" prop="eventStatus">
           <el-select v-model="form.eventStatus" placeholder="请选择事件状态" clearable>
-            <el-option
-              v-for="item in data.eventStatusSelection"
-              :key="item.dictValue"
-              :label="item.dictLabel"
-              :value="item.dictValue"
-            ></el-option>
+            <el-option v-for="item in data.eventStatusSelection" :key="item.dictValue" :label="item.dictLabel" :value="item.dictValue"></el-option>
           </el-select>
         </el-form-item>
         <el-form-item label="事件地点" prop="address">
@@ -159,18 +132,10 @@
           <el-input v-model="form.address" placeholder="请输入事件地点" readonly />
         </el-form-item>
         <el-form-item label="事发时间" prop="eventTime">
-          <el-date-picker
-            v-model="form.eventTime"
-            type="datetime"
-            placeholder="选择事发时间"
-          ></el-date-picker>
+          <el-date-picker v-model="form.eventTime" type="datetime" placeholder="选择事发时间"></el-date-picker>
         </el-form-item>
         <el-form-item label="上报时间" prop="reportTime">
-          <el-date-picker
-            v-model="form.reportTime"
-            type="datetime"
-            placeholder="选择上报时间"
-          ></el-date-picker>
+          <el-date-picker v-model="form.reportTime" type="datetime" placeholder="选择上报时间"></el-date-picker>
         </el-form-item>
         <el-form-item label="伤亡情况">
           <el-row :gutter="10">
@@ -192,7 +157,7 @@
           </el-row>
         </el-form-item>
         <el-form-item label="事件来源" prop="eventSource">
-          <el-input v-model="form.eventSource" placeholder="请输入事件来源"/>
+          <el-input v-model="form.eventSource" placeholder="请输入事件来源" />
         </el-form-item>
       </el-form>
       <template #footer>
@@ -205,21 +170,21 @@
 
     <!-- 地图弹窗 -->
     <el-dialog v-model="mapDialogVisible" title="地图定位" width="600px">
-      <company-map :visible.sync="mapDialogVisible" :address="form.address" @Change="handleMapChange"></company-map>
+      <company-map v-model:visible="mapDialogVisible" :address="form.address" @change="handleMapChange"></company-map>
       <template #footer>
         <el-button @click="mapDialogVisible = false">取消</el-button>
         <el-button type="primary" @click="confirmMapLocation">确定</el-button>
       </template>
     </el-dialog>
-
   </div>
 </template>
 
 <script setup lang="ts">
 import { ref, reactive, toRefs, onMounted } from 'vue';
 import { ElMessage } from 'element-plus';
-import { getDicts } from "@/api/system/dict/data";
+import { getDicts } from '@/api/system/dict/data';
 
+const router = useRouter();
 const eventList = ref([]);
 const buttonLoading = ref(false);
 const loading = ref(true);
@@ -285,16 +250,30 @@ const { queryParams, form, rules } = toRefs(data);
 
 const getList = async () => {
   loading.value = true;
-  try {
-    const response = await fetchEvents(queryParams.value);
-    const { data, total } = response;
-    eventList.value = data;
-    total.value = total;
-  } catch (error) {
-    ElMessage.error('获取数据失败');
-  } finally {
+  eventList.value = [
+    {
+      'eventId': 'YJSJ000000001',
+      'eventTitle': 'XXX公交站西侧出现积水倒灌情况',
+      'eventType': '0', //字典(事件类型:0自然灾害、1事故灾害、2公共卫生事件、3社会安全事件)
+      'eventLevel': '0', //字典(事件等级:0其他,1一般,2较大,3重大,4特别重大)
+      'eventStatus': '0', //字典(事件状态:0已登记,1指挥中,2指挥结束,3已关闭)
+      'latitude': 123.123, //纬度
+      'longitude': 345.456, //经度
+      'address': 'XXX道路左侧路面',
+      'eventTime': '2023-03-01 17:18'
+    }
+  ];
+  total.value = 1;
+  // try {
+  //   const response = await fetchEvents(queryParams.value);
+  //   const { data, total } = response;
+  //   eventList.value = data;
+  //   total.value = total;
+  // } catch (error) {
+  //   ElMessage.error('获取数据失败');
+  // } finally {
     loading.value = false;
-  }
+  // }
 };
 
 const fetchEvents = async (params) => {
@@ -302,7 +281,7 @@ const fetchEvents = async (params) => {
   const response = await fetch('/api/events', {
     method: 'POST',
     headers: {
-      'Content-Type': 'application/json',
+      'Content-Type': 'application/json'
     },
     body: JSON.stringify(params)
   });
@@ -402,6 +381,10 @@ const handleView = (row) => {
   if (row) {
     // 查看事件详情逻辑
     console.log('查看事件详情', row);
+    router.push({
+      path: '/duty/eventing/eventDetails',
+      query: { eventId: row.eventId }
+    });
   }
 };
 
@@ -420,19 +403,15 @@ const confirmMapLocation = () => {
   mapDialogVisible.value = false;
 };
 
-
 onMounted(() => {
   getList();
-  Promise.all([
-    getDicts("mm_event_type"),
-    getDicts("mm_event_level"),
-    getDicts("mm_event_state"),
-    getDicts("region")
-  ]).then(([eventTypeRes, eventLevelRes, eventStatusRes, regionRes]) => {
-    data.eventTypeSelection = eventTypeRes.data;
-    data.eventLevelSelection = eventLevelRes.data;
-    data.eventStatusSelection = eventStatusRes.data;
-    data.regionSelection = regionRes.data;
-  });
+  Promise.all([getDicts('mm_event_type'), getDicts('mm_event_level'), getDicts('mm_event_state'), getDicts('region')]).then(
+    ([eventTypeRes, eventLevelRes, eventStatusRes, regionRes]) => {
+      data.eventTypeSelection = eventTypeRes.data;
+      data.eventLevelSelection = eventLevelRes.data;
+      data.eventStatusSelection = eventStatusRes.data;
+      data.regionSelection = regionRes.data;
+    }
+  );
 });
 </script>