layout.ts 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. import { DataAllType, LookDomType } from "@/types";
  2. import { MessageType } from "@/utils/message";
  3. type lookType = { url: string[]; show: boolean; current: number };
  4. // 初始化状态
  5. const initState = {
  6. // 所有图片点击预览查看大图
  7. lookBigImg: {
  8. url: [],
  9. show: false,
  10. current: 0,
  11. } as lookType,
  12. // 查看视频、音频、模型
  13. lookDom: {
  14. src: "",
  15. type: "",
  16. } as LookDomType,
  17. // antd轻提示(兼容360浏览器)
  18. message: {
  19. txt: "",
  20. type: "info",
  21. duration: 3,
  22. } as MessageType,
  23. // 所有数据
  24. dataAll: { Home: {} } as DataAllType,
  25. // 全景的音频播放
  26. overallAudio: false,
  27. };
  28. // 定义 action 类型
  29. type LayoutActionType =
  30. | { type: "layout/lookBigImg"; payload: lookType }
  31. | { type: "layout/lookDom"; payload: LookDomType }
  32. | { type: "layout/message"; payload: MessageType }
  33. | { type: "layout/setDataAll"; payload: DataAllType }
  34. | { type: "layout/playAudio"; payload: boolean };
  35. // 频道 reducer
  36. export default function layoutReducer(
  37. state = initState,
  38. action: LayoutActionType
  39. ) {
  40. switch (action.type) {
  41. // 所有图片点击预览查看大图
  42. case "layout/lookBigImg":
  43. return { ...state, lookBigImg: action.payload };
  44. // 查看视频
  45. case "layout/lookDom":
  46. return { ...state, lookDom: action.payload };
  47. // antd轻提示(兼容360浏览器)
  48. case "layout/message":
  49. return { ...state, message: action.payload };
  50. // 设置所有数据
  51. case "layout/setDataAll":
  52. return { ...state, dataAll: action.payload };
  53. // 全局的音频
  54. case "layout/playAudio":
  55. return { ...state, overallAudio: action.payload };
  56. default:
  57. return state;
  58. }
  59. }