Browse Source

修复bug

yangyuxuan 3 months ago
parent
commit
96592b4bb4

+ 18 - 0
src/api/globalMap/tranBureauVideo.ts

@@ -0,0 +1,18 @@
+import request from '@/utils/request';
+
+// 视频列表
+export const getVideoList = (data) => {
+  return request({
+    url: '/api/videoResource/videoinfo/get_video_transportation_list',
+    method: 'get',
+    params: data
+  });
+};
+
+// 视频类型
+export const getVideoType = () => {
+  return request({
+    url: '/api/videoResource/videoinfo/transportation/type',
+    method: 'get'
+  });
+};

+ 14 - 0
src/types/components.d.ts

@@ -28,6 +28,8 @@ declare module 'vue' {
     ElBadge: typeof import('element-plus/es')['ElBadge']
     ElButton: typeof import('element-plus/es')['ElButton']
     ElCheckbox: typeof import('element-plus/es')['ElCheckbox']
+    ElCheckboxButton: typeof import('element-plus/es')['ElCheckboxButton']
+    ElCheckboxGroup: typeof import('element-plus/es')['ElCheckboxGroup']
     ElCol: typeof import('element-plus/es')['ElCol']
     ElColorPicker: typeof import('element-plus/es')['ElColorPicker']
     ElConfigProvider: typeof import('element-plus/es')['ElConfigProvider']
@@ -44,23 +46,33 @@ declare module 'vue' {
     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']
     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']
+    ElRadio: typeof import('element-plus/es')['ElRadio']
+    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']
     ElSlider: typeof import('element-plus/es')['ElSlider']
+    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']
     ExcelEditor: typeof import('./../components/ExcelEditor/index.vue')['default']
     FileUpload: typeof import('./../components/FileUpload/index.vue')['default']
@@ -72,6 +84,8 @@ declare module 'vue' {
     HikvisionPlayer: typeof import('./../components/HKVideo/hikvision-player.vue')['default']
     HKVideo: typeof import('./../components/HKVideo/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']
     IFrame: typeof import('./../components/iFrame/index.vue')['default']
     ImagePreview: typeof import('./../components/ImagePreview/index.vue')['default']
     ImageUpload: typeof import('./../components/ImageUpload/index.vue')['default']

+ 9 - 9
src/views/dataFilling/fillingAdd.vue

@@ -4,30 +4,30 @@
       <el-col :lg="30" :xs="24" style="">
         <el-row :span="24" :gutter="10">
           <!-- 联系人姓名 -->
-          <el-col :span="6">
+          <el-col :span="12">
             <el-form-item label="联系人姓名:" prop="table_name" label-width="auto">
-              <el-input v-model="creator_name" placeholder="请输入联系人姓名"></el-input>
+              <el-input v-model="creator_name" placeholder="请输入联系人姓名" style="width: 300px"></el-input>
             </el-form-item>
           </el-col>
           <!-- 联系电话 -->
-          <el-col :span="6">
+          <el-col :span="12">
             <el-form-item label="联系电话:" prop="table_phone" label-width="auto">
-              <el-input v-model="creator_phone" placeholder="请输入联系电话"></el-input>
+              <el-input v-model="creator_phone" placeholder="请输入联系电话" style="width: 300px"></el-input>
             </el-form-item>
           </el-col>
           <!-- 选择填报人 -->
-          <el-col :span="6">
+          <el-col :span="12">
             <el-form-item label="选择填报人:" prop="table_name" label-width="auto">
-              <el-select v-model="selectedReporter" placeholder="请选择填报人">
+              <el-select v-model="selectedReporter" placeholder="请选择填报人" style="width: 300px">
                 <el-option v-for="reporter in reporters" :key="reporter.id" :label="reporter.name" :value="reporter.id" />
               </el-select>
             </el-form-item>
           </el-col>
           <!-- 截止时间 -->
-          <el-col :span="6">
+          <el-col :span="12">
             <el-form-item label="截止时间:" prop="release_time">
-              <el-date-picker v-model="selectedTime" type="date" placeholder="选择截止时间" @change="handleTimeChange" />
-              <span class="label">前报送该表</span>
+              <el-date-picker v-model="selectedTime" type="date" placeholder="选择截止时间" @change="handleTimeChange" style="width: 150px" />
+              <span class="label" style="margin-left: 20px">前报送该表</span>
             </el-form-item>
           </el-col>
           <!-- 操作按钮 -->

+ 3 - 0
src/views/globalMap/RightMenu/index.vue

@@ -66,6 +66,8 @@
         <Mitigation v-if="menuState.showMenu && menuState.menuData[menuState.activeIndex]?.name === '防灾救援'" @handle-menu="handleMenu" />
         <!--交通视频-->
         <TrafficVideo v-if="menuState.menuData[menuState.activeIndex]?.name === '交通视频'" @handle-menu="handleMenu" />
+        <!--交通局视频-->
+        <tranBureauVideo  v-if="menuState.menuData[menuState.activeIndex]?.name === '交通局视频'" @handle-menu="handleMenu" />
         <!--易涝隐患点-->
         <PotentialFloodHazard
           v-if="menuState.showMenu && menuState.menuData[menuState.activeIndex]?.name === '易涝隐患点'"
@@ -115,6 +117,7 @@ import RainMonitor from './RainMonitor/index.vue';
 import PreventDrowning from './PreventDrowning.vue';
 import Fireproofing from './Fireproofing.vue';
 import Mitigation from './Mitigation.vue';
+import tranBureauVideo from './tranBureauVideo.vue'
 import PotentialFloodHazard from './PotentialFloodHazard.vue';
 import TowerStatus from './TowerStatus.vue';
 import CommunicationSupport from './CommunicationSupport.vue';

+ 248 - 0
src/views/globalMap/RightMenu/tranBureauVideo.vue

@@ -0,0 +1,248 @@
+<template>
+  <div class="menu-content">
+    <div class="container">
+      <div class="gradient-text title">交通局视频</div>
+      <div class="box-left">
+        <el-input v-model="queryParams.keyword" class="custom-input" placeholder="搜索" @input="initData2">
+          <template #prefix>
+            <el-icon class="el-input__icon"><search /></el-icon>
+          </template>
+        </el-input>
+        <div class="btn" @click="handleCancel">取消</div>
+      </div>
+      <!--      <div class="gradient-text">视频类型</div>-->
+      <div class="custom-table">
+        <div class="th">
+          <div class="td">
+            <div style="width: 100px">
+              <el-select
+                v-model="queryParams.area"
+                placeholder="所有区县"
+                size="large"
+                class="custom-select2"
+                popper-class="custom-select-popper2"
+                :teleported="false"
+                @change="initData2"
+              >
+                <el-option label="所有区县" value="" />
+                <el-option v-for="item in district_type" :key="item.value" :label="item.label" :value="item.label" />
+              </el-select>
+            </div>
+          </div>
+          <div class="td">
+            <div style="width: 100px">
+              <el-select
+                v-model="queryParams.video_type"
+                placeholder="类型"
+                size="large"
+                class="custom-select2"
+                popper-class="custom-select-popper2"
+                :teleported="false"
+                @change="initData2"
+              >
+                <el-option label="所有类型" value="" />
+                <el-option v-for="item in videoType" :key="item.dictCode" :label="item.dictLabel" :value="item.dictCode" />
+              </el-select>
+            </div>
+          </div>
+          <div class="td">名称</div>
+        </div>
+        <div class="table-content">
+          <div v-for="(item, index) in listData" :key="index" class="tr" @click="handleShowDialog(item)">
+            <div class="td">{{ item.area }}</div>
+            <div class="td">{{ item.video_type_label }}</div>
+            <div class="td">{{ item.name }}</div>
+          </div>
+<!--          <pagination v-show="total > 0" v-model:page="queryParams.page" v-model:limit="queryParams.pageSize" :total="total" @pagination="listData" />-->
+          <div class="footer">
+            <pagination
+              v-show="total > 0"
+              v-model:page="queryParams.page"
+              v-model:limit="queryParams.pageSize"
+              :total="total"
+              layout="total, prev, pager, next"
+              @pagination="listData"
+            />
+          </div>
+        </div>
+      </div>
+      <Dialog v-if="showDialog" v-model="showDialog" type="md" title="交通局视频" hide-footer>
+        <div style="width: 100%; height: 100%; display: flex; justify-content: center; align-items: center">
+          <HKVideo :dot_data="videoMonitorData" />
+        </div>
+      </Dialog>
+    </div>
+  </div>
+</template>
+
+<script lang="ts" setup>
+import { Search } from '@element-plus/icons-vue';
+import { getRescue } from '@/api/globalMap/mitigation';
+import { deepClone } from '@/utils';
+import { getVideoList, getVideoType } from '@/api/globalMap/tranBureauVideo';
+
+const { proxy } = getCurrentInstance() as ComponentInternalInstance;
+const { district_type, danger_type } = toRefs<any>(proxy?.useDict('district_type', 'danger_type'));
+const queryParams = reactive({
+  page: 1,
+  pageSize: 10,
+  keyword: '',
+  area: '',
+  video_type: ''
+});
+const total = ref(0);
+
+const listData = ref([]);
+const videoType = ref([]);
+
+let showDialog = ref(false);
+let videoMonitorData = ref({});
+const handleShowDialog = (row) => {
+  showDialog.value = false;
+  nextTick(() => {
+    videoMonitorData.value = row;
+    showDialog.value = true;
+  });
+};
+const initData = () => {
+  getVideoType().then((res) => {
+    videoType.value = res.data;
+  });
+};
+
+const initData2 = () => {
+  getVideoList(queryParams).then((res) => {
+    listData.value = res.data;
+    total.value = res.total;
+  });
+};
+const handleCancel = () => {
+  queryParams.keyword = '';
+  initData2();
+};
+initData2();
+initData();
+</script>
+
+<style lang="scss" scoped>
+.menu-content {
+  width: 574px;
+  height: 581px;
+  background: url('@/assets/images/map/rightMenu/content.png') no-repeat;
+  background-size: 100% 100%;
+  padding: 60px 10px 10px 15px;
+  font-size: 14px;
+  position: relative;
+  color: #ffffff;
+  .box-left {
+    display: flex;
+    align-items: center;
+    margin-bottom: 10px;
+    .btn {
+      width: 59px;
+      height: 23px;
+      background: url('@/assets/images/map/rightMenu/potentialFloodHazard/btn.png') no-repeat;
+      background-size: 100% 100%;
+      display: flex;
+      justify-content: center;
+      align-items: center;
+      cursor: pointer;
+      margin-left: 20px;
+    }
+  }
+}
+.custom-table {
+  width: 550px;
+  .table-content {
+    height: 420px;
+    overflow-y: auto;
+    overflow-x: hidden;
+  }
+  .th {
+    background: url('@/assets/images/map/rightMenu/th.png') no-repeat;
+    background-size: 100% 100%;
+    display: flex;
+    padding: 7px 12px;
+    height: 32px;
+  }
+  .tr {
+    background: url('@/assets/images/map/rightMenu/td.png') no-repeat;
+    background-size: 100% 100%;
+    display: flex;
+    padding: 7px 12px;
+    &:hover {
+      background: url('@/assets/images/map/rightMenu/td_checked.png') no-repeat;
+      background-size: 100% 100%;
+    }
+  }
+  .td {
+    flex: 1;
+    color: #edfaff;
+    font-size: 14px;
+    display: flex;
+    justify-content: center;
+    align-items: center;
+    cursor: pointer;
+  }
+  .td-text {
+    /* 设置字体透明 */
+    color: transparent;
+    /* 使用 -webkit-background-clip 属性将背景剪裁至文本形状 */
+    -webkit-background-clip: text;
+    /* 非Webkit内核浏览器需要使用标准前缀 */
+    background-clip: text;
+    font-family: 'YouSheBiaoTiHei';
+    /* 设置线性渐变,从红色渐变到蓝色 */
+    background-image: linear-gradient(to bottom, #ffffff 50%, #3075d3 100%);
+    font-size: 14px;
+  }
+  .text-green {
+    background-image: linear-gradient(to bottom, #ffffff 50%, #40c75f 100%);
+  }
+  .text-danger {
+    background-image: linear-gradient(to bottom, #ffffff 50%, #ff2f3c 100%);
+  }
+}
+.footer {
+  height: 64px;
+  display: flex;
+  justify-content: flex-end;
+  margin-bottom: 30px;
+  .pagination-container {
+    height: 64px;
+    margin: 0;
+  }
+  :deep(.el-pagination__total) {
+    color: #a7ccdf !important;
+  }
+  :deep(.el-pagination) {
+    .btn-next,
+    .btn-prev {
+      background-color: transparent !important;
+      border: none !important;
+      .el-icon {
+        color: #a7ccdf !important;
+      }
+    }
+    .btn-prev:disabled,
+    .btn-next:disabled {
+      background-color: transparent !important;
+      border: none !important;
+    }
+    .el-pager li {
+      text-align: center;
+      color: #a7ccdf !important;
+      background-color: #0e3064 !important;
+      border: 1px solid #0c57a7 !important;
+      &:hover {
+        background-color: #038dff !important;
+        border: 1px solid #038dff !important;
+      }
+    }
+    .el-pager li.is-active {
+      background-color: #038dff !important;
+      border: 1px solid #038dff !important;
+    }
+  }
+}
+</style>