layout.ts 1.5 KB

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