useCameraDetailStore.ts 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. /** 相机详情的store */
  2. import { CameraDetailServer } from '@/types/camera/type';
  3. import { FenceDisplayStatus } from '@/types/camera/constant';
  4. import { useRouteQuery } from '@vueuse/router';
  5. import dayjs from 'dayjs';
  6. import { defineStore } from 'pinia';
  7. import { ref } from 'vue';
  8. import { VideoResolution } from '../components/CameraParams/types';
  9. interface CameraParams {
  10. startAt: string;
  11. endAt: string;
  12. resolution: number;
  13. period: number;
  14. }
  15. /** 宽/长的比例 */
  16. export const WIDTH_HEIGHT_RATIO = 0.5625;
  17. /** 分辨率以1920为基础 */
  18. export const BASE_RESOLUTION = 1920;
  19. const defaultParams: CameraParams = {
  20. startAt: '',
  21. endAt: '',
  22. resolution: VideoResolution.HIGH_RESOLUTION,
  23. period: 30,
  24. };
  25. const formatDateTime = (time: string) => {
  26. const dayStr = dayjs().format('YYYY-MM-DD');
  27. return dayStr + ' ' + time;
  28. };
  29. const useCameraDetailStore = defineStore('cameraDetail', () => {
  30. const cameraId = useRouteQuery('cameraId', '', { transform: (str) => Number(str) });
  31. const isShowFence = ref<boolean>(false);
  32. const detail = ref<CameraDetailServer | null>(null);
  33. /** 参数设置 */
  34. const params = ref<CameraParams>({ ...defaultParams });
  35. const setDetail = (newDetail: CameraDetailServer) => {
  36. detail.value = newDetail;
  37. params.value = {
  38. startAt: formatDateTime(newDetail.nvrStartAt || '00:00:00'),
  39. endAt: formatDateTime(newDetail.nvrEndAt || '23:59:59'),
  40. resolution: newDetail.resolution || VideoResolution.HIGH_RESOLUTION,
  41. period: newDetail.nvrPeriod || 30,
  42. };
  43. isShowFence.value = newDetail.isDisplayFence === FenceDisplayStatus.enabled ? true : false;
  44. };
  45. const clear = () => {
  46. detail.value = null;
  47. params.value = { ...defaultParams };
  48. };
  49. return { detail, setDetail, cameraId, params, clear, isShowFence };
  50. });
  51. export default useCameraDetailStore;