Newer
Older
gasAlarmH5 / src / views / administrator / alarm / index.vue
<!-- 管理员-报警管理 -->
<template>
  <NavBar title="报警管理" />
  <div class="alarm">
    <div class="search">
      <!-- <t-cell title="开始日期" :note="begTimeText || '请选择 >'" @click="openStartPopup" /> -->
      <div class="time" @click="openStartPopup">{{ listQuery.begTime ? listQuery.begTime : '开始时间' }}</div>
      <t-popup v-model="startDateVisible" placement="bottom">
        <t-date-time-picker :value="begTime" :mode="['date']" title="开始日期" cancelBtn="清除" format="YYYY-MM-DD"
          :end="new Date().toLocaleDateString()" @confirm="onConfirmStartDate" @cancel="startCancel"
          @change="changeTime" />
      </t-popup>
      <div class="between">至</div>
      <!-- <t-cell title="结束日期" :note="endTimeText || '请选择 >'" @click="openEndPopup" /> -->
      <div class="time" @click="openEndPopup">{{ listQuery.endTime ? listQuery.endTime : '结束时间' }}</div>
      <t-popup v-model="endDateVisible" placement="bottom">
        <t-date-time-picker :value="endTime" :mode="['date']" title="结束日期" cancelBtn="清除" format="YYYY-MM-DD"
          :end="new Date().toLocaleDateString()" @confirm="onConfirmEndDate" @cancel="endCancel" @change="changeTime" />
      </t-popup>
      <div class="between" @click="search">筛选</div>
    </div>
    <div class="card">
      <AlarmList :alarmList="list" />
      <t-loading theme="dots" size="40px" layout="vertical" :loading="showLoading" />
      <t-loading size="40px" layout="vertical" :indicator="false" text="没有更多啦" :loading="!showLoading" />
    </div>
  </div>

  <t-loading theme="dots" size="40px" layout="vertical" :loading="false" />
  <t-back-top v-show="backTopVisible" text="顶部" theme="round" />
</template>
<script lang="ts" name="Equipment" setup>
import NavBar from "../../../components/navBar/navBar.vue";
import { IAlarmList } from "./alarm-interface";
import AlarmList from "./components/alarmList.vue";
import { getAlarmList } from '../../../api/alarm'
const list = ref<IAlarmList[]>([]);
const backTopVisible = ref(false); // 回到顶部显隐
const begTime = ref(''); // 选择的日期text开始
const begTimeText = ref(''); // 选择的日期text开始
const endTime = ref(''); // 选择的日期text结束
const endTimeText = ref(''); // 选择的日期text结束
const startDateVisible = ref(false) // 开始日期弹出框显隐
const endDateVisible = ref(false) // 结束日期弹出框显隐
const total = ref() // 数据总数
const showLoading = ref(true) // 是否显示加载中
const listQuery = ref({
  devCode: '', // 设备编号
  // 请求参数
  begTime: '', // 开始时间
  endTime: '', // 结束时间
  pageSize: 10,
  pageNo: 1,
});
// ----------------------------------------操作时间选择器-----------------------------------------

// 开始时间确定选择状态
const onConfirmStartDate = (val: string) => {
  listQuery.value.begTime = `${val}`
  begTimeText.value = val
  startDateVisible.value = false;
};
// 结束时间确定选择状态
const onConfirmEndDate = (val: string) => {
  listQuery.value.endTime = `${val}`
  endTimeText.value = val
  endDateVisible.value = false;
};
// 打开开始时间popup
const openStartPopup = () => {
  endDateVisible.value = false;
  startDateVisible.value = true
}
// 打开结束时间popup
const openEndPopup = () => {
  startDateVisible.value = false;
  endDateVisible.value = true
}

// 点击取消
const startCancel = () => {
  console.log('取消');

  listQuery.value.begTime = ''
  begTimeText.value = ''
  startDateVisible.value = false // 关闭弹窗
}
const endCancel = () => {
  listQuery.value.endTime = ''
  endTimeText.value = ''
  endDateVisible.value = false // 关闭弹窗
}

// // 值改变时触发
// const changeTime = () => {
//   if (listQuery.value.begTime && listQuery.value.endTime) {
//     fetchAlarmList()
//   }
// }

// ---------------------------------------------------------------------------------------------

// 监听页面滚动
window.onscroll = function () {
  if (window.scrollY > 200) {
    //scrollY距离顶部的距离
    backTopVisible.value = true;
  } else {
    backTopVisible.value = false;
  }
  //变量windowHeight是可视区的高度
  const windowHeight = document.body.clientHeight;
  //变量scrollHeight是滚动条的总高度
  const scrollHeight = document.body.scrollHeight;
  //滚动条到底部的条件
  // console.log(window.scrollY, windowHeight, scrollHeight - 60);

  if (Number(window.scrollY) + windowHeight >= scrollHeight - 60) {
    onBottom()
  }
};

function onBottom() { // 触底加载
  if ((listQuery.value.pageNo * listQuery.value.pageSize) < total.value) {
    showLoading.value = true
    listQuery.value.pageNo++
    fetchAlarmList(true)
  }
}

// 获取报警列表
const fetchAlarmList = () => {
  // if (!isNowPage) {
  //   // 是否显示当前页,否则跳转第一页
  //   listQuery.value.pageNo = 1
  // }
  // listQuery.value.begTime = listQuery.value.begTime.replace(/\//g, '-')
  // listQuery.value.endTime = listQuery.value.endTime.replace(/\//g, '-')
  const data = {
    ...listQuery.value,
    begTime: listQuery.value.begTime ? `${listQuery.value.begTime} 00:00:00` : '',
    endTime: listQuery.value.endTime ? `${listQuery.value.endTime} 23:59:59` : '',
  }
  getAlarmList(data).then((res) => {
    // if (isNowPage) {
      list.value = list.value.concat(res.data.records)
    // } else {
    //   list.value = res.data.records
    // }
    showLoading.value = false
    total.value = res.data.total
  })
}
// ------------------------------------------------------------------------------------------
const search = () => {
  listQuery.value.pageNo = 1
  list.value = []
  fetchAlarmList()
}
onMounted(() => {
  begTime.value = new Date().toLocaleDateString().replace(/\//g, '-'); // 打开popup默认的日期
  endTime.value = new Date().toLocaleDateString().replace(/\//g, '-'); // 打开popup默认的日期
  fetchAlarmList()
});
</script>
<style lang="scss" scoped>
@import "../../../assets/style/variables.scss";

.alarm {
  width: 100%;
  height: 100%;
  padding: 60px 0;
  box-sizing: border-box;
}
</style>
<style lang="scss">
.alarm {
  .t-cell--middle {
    // border-radius: 20px;
    border-bottom: 1px solid #ccc;
  }

  .t-cell__title,
  .t-cell__note {
    font-size: 24px;
  }

  .search {
    width: 100%;
    display: flex;
    justify-content: space-around;

    .time {
      border: 1px solid #ccc;
      border-radius: 6px;
      text-align: center;
      font-size: 16px;
      width: 40%;
      height: 40px;
      line-height: 40px;
      // float: left;
    }

    .between {
      font-size: 16px;
      height: 40px;
      line-height: 40px;
    }
  }

}
</style>