Files
EveryPublish/sau_web_react/src/modules/material/index.ts
T
Qiufeng fd944b08bd feat: EveryPublish Web 管理端重构与全平台发布接入
- 新增 React + TDesign 管理端(sau_web_react),替代历史 Vue 前端
- 后端接入 11 平台登录/发布(视频+图文),check_cookie 扩展全平台
- 异步发布任务 + 实时进度监控 + 发布日志
- Open API 开放体系(API Key 鉴权 + 7 个开放接口 + API 文档页)
- 账号单/批量校验与批量删除
- 全局配置(登录方式 + 发布静默模式)
- 统一浏览器为系统 Chrome,品牌文案统一为 EveryPublish
2026-08-21 14:41:47 +08:00

48 lines
1.3 KiB
TypeScript

import { createSlice, createAsyncThunk, PayloadAction } from '@reduxjs/toolkit';
import { RootState } from '../store';
import { getMaterials as fetchMaterials, IMaterial } from 'services/material';
const namespace = 'material';
interface IMaterialState {
loading: boolean;
materials: IMaterial[];
}
const initialState: IMaterialState = {
loading: false,
materials: [],
};
export const loadMaterials = createAsyncThunk(namespace + '/loadMaterials', async () => {
return await fetchMaterials();
});
const materialSlice = createSlice({
name: namespace,
initialState,
reducers: {
setMaterials: (state, action: PayloadAction<IMaterial[]>) => {
state.materials = action.payload;
},
},
extraReducers: (builder) => {
builder
.addCase(loadMaterials.pending, (state) => {
state.loading = true;
})
.addCase(loadMaterials.fulfilled, (state, action) => {
state.loading = false;
state.materials = action.payload;
})
.addCase(loadMaterials.rejected, (state) => {
state.loading = false;
});
},
});
export const { setMaterials } = materialSlice.actions;
export const selectMaterials = (state: RootState) => state.material.materials;
export const selectMaterialLoading = (state: RootState) => state.material.loading;
export default materialSlice.reducer;