layout.ts 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  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. A1intro: ''
  28. }
  29. // 定义 action 类型
  30. type LayoutActionType =
  31. | { type: 'layout/lookBigImg'; payload: { url: string; show: boolean } }
  32. | { type: 'layout/lookDom'; payload: LookDomType }
  33. | { type: 'layout/message'; payload: MessageType }
  34. | { type: 'layout/A1intro'; payload: string }
  35. | {
  36. type: 'layout/closeUpFile'
  37. payload: {
  38. fu: () => void
  39. state: boolean
  40. }
  41. }
  42. // 频道 reducer
  43. export default function layoutReducer(state = initState, action: LayoutActionType) {
  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. // 项目简介
  58. case 'layout/A1intro':
  59. return { ...state, A1intro: action.payload }
  60. default:
  61. return state
  62. }
  63. }