store.ts 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  1. import { makeAutoObservable } from 'mobx';
  2. import { message } from 'antd';
  3. import { apis, CreateOrModifyKnowledgeLibApiParams } from '@/apis';
  4. import { State, ReadonlyState, StateAction, KnowledgeLibListStore } from './types';
  5. // 定义状态
  6. const stateGenerator = (): ReadonlyState => ({
  7. listLoading: false,
  8. list: [],
  9. infoModalId: '',
  10. infoModalOpen: false,
  11. page: {
  12. pageNumber: 1,
  13. pageSize: 10,
  14. total: 0,
  15. },
  16. });
  17. // 修改状态
  18. const stateActionsGenerator = (state: State): StateAction => {
  19. return {
  20. setListLoading: (loading) => {
  21. state.listLoading = loading;
  22. },
  23. setList: (list) => {
  24. state.list = list;
  25. },
  26. setInfoModalId: (id) => {
  27. state.infoModalId = id;
  28. },
  29. setInfoModalOpen: (open) => {
  30. state.infoModalOpen = open;
  31. },
  32. setPage: (page) => {
  33. state.page = page;
  34. },
  35. };
  36. };
  37. // 使用仓库
  38. const useKnowledgeLibListStore = (): KnowledgeLibListStore => {
  39. const state = makeAutoObservable(stateGenerator());
  40. const actions = stateActionsGenerator(state);
  41. const api = {
  42. // 获取知识库列表
  43. fetchKnowledgeLibList: async () => {
  44. actions.setListLoading(true);
  45. try {
  46. const data = {
  47. pageNumber: state.page.pageNumber,
  48. pageSize: state.page.pageSize,
  49. };
  50. const res = await apis.fetchTakaiKnowledgeLibList(data);
  51. console.log(res, 'res');
  52. actions.setList(res.rows);
  53. actions.setPage({
  54. ...state.page,
  55. total: res.total,
  56. });
  57. } catch (error: any) {
  58. console.error(error);
  59. } finally {
  60. actions.setListLoading(false);
  61. }
  62. },
  63. // 创建知识库
  64. createKnowledgeLib: async (data: CreateOrModifyKnowledgeLibApiParams) => {
  65. actions.setListLoading(true);
  66. try {
  67. const res =await apis.createTakaiKnowledgeLib(data);
  68. // 获取知识库列表
  69. api.fetchKnowledgeLibList();
  70. if(res.data === 1 && res.code === 200){
  71. message.success('创建成功');
  72. }else{
  73. message.error('创建失败');
  74. }
  75. } catch (error: any) {
  76. message.error(error.msg);
  77. }finally{
  78. actions.setListLoading(false);
  79. }
  80. },
  81. // 修改知识库
  82. modifyKnowledgeLib: async (knowledgeId: string, data: CreateOrModifyKnowledgeLibApiParams) => {
  83. try {
  84. const res = await apis.modifyTakaiKnowledgeLib(knowledgeId, data);
  85. // 获取知识库列表
  86. api.fetchKnowledgeLibList();
  87. if(res.data === 1 && res.code === 200){
  88. message.success('修改成功');
  89. }else{
  90. message.error('修改失败');
  91. }
  92. } catch (error: any) {
  93. message.error(error.msg);
  94. }
  95. },
  96. // 删除知识库
  97. deleteKnowledgeLib: async (knowledgeId: string) => {
  98. try {
  99. const res = await apis.deleteTakaiKnowledgeLib(knowledgeId);
  100. // 获取知识库列表
  101. api.fetchKnowledgeLibList();
  102. if(res.data === 1 && res.code === 200){
  103. message.success('删除成功');
  104. }else{
  105. message.error('删除失败');
  106. }
  107. } catch (error: any) {
  108. message.error(error.msg);
  109. }
  110. },
  111. }
  112. // 更改分页
  113. const onChangePagination: KnowledgeLibListStore['onChangePagination'] = async (pageNumber, pageSize) => {
  114. actions.setPage({
  115. ...state.page,
  116. pageNumber: pageNumber,
  117. pageSize: pageSize,
  118. });
  119. // 获取知识库列表
  120. await api.fetchKnowledgeLibList();
  121. }
  122. // 点击创建
  123. const onClickCreate: KnowledgeLibListStore['onClickCreate'] = () => {
  124. const initialInfoModalId = stateGenerator().infoModalId;
  125. actions.setInfoModalId(initialInfoModalId);
  126. actions.setInfoModalOpen(true);
  127. }
  128. // 点击修改
  129. const onClickModify: KnowledgeLibListStore['onClickModify'] = (knowledgeId) => {
  130. actions.setInfoModalId(knowledgeId);
  131. actions.setInfoModalOpen(true);
  132. }
  133. // 信息弹出层-点击确定
  134. const infoModalOnClickConfirm: KnowledgeLibListStore['infoModalOnClickConfirm'] = async (knowledgeId, data) => {
  135. const initialInfoModalOpen = stateGenerator().infoModalOpen;
  136. actions.setInfoModalOpen(initialInfoModalOpen);
  137. if (knowledgeId) {
  138. // 修改知识库
  139. await api.modifyKnowledgeLib(knowledgeId, data);
  140. } else {
  141. // 创建知识库
  142. await api.createKnowledgeLib(data);
  143. }
  144. }
  145. // 信息弹出层-点击取消
  146. const infoModalOnClickCancel: KnowledgeLibListStore['infoModalOnClickCancel'] = () => {
  147. const initialInfoModalOpen = stateGenerator().infoModalOpen;
  148. actions.setInfoModalOpen(initialInfoModalOpen);
  149. }
  150. // 点击删除
  151. const onClickDelete: KnowledgeLibListStore['onClickDelete'] = async (knowledgeId) => {
  152. // 删除知识库
  153. await api.deleteKnowledgeLib(knowledgeId);
  154. }
  155. // 初始渲染
  156. const init: KnowledgeLibListStore['init'] = async () => {
  157. // 获取知识库列表
  158. await api.fetchKnowledgeLibList();
  159. }
  160. // 状态重置
  161. const reset: KnowledgeLibListStore['reset'] = () => {
  162. const initialListLoading = stateGenerator().listLoading;
  163. const initialList = stateGenerator().list;
  164. const initialInfoModalId = stateGenerator().infoModalId;
  165. const initialInfoModalOpen = stateGenerator().infoModalOpen;
  166. const initialPage = stateGenerator().page;
  167. actions.setListLoading(initialListLoading);
  168. actions.setList(initialList);
  169. actions.setInfoModalId(initialInfoModalId);
  170. actions.setInfoModalOpen(initialInfoModalOpen);
  171. actions.setPage(initialPage);
  172. }
  173. return {
  174. state,
  175. onChangePagination,
  176. onClickCreate,
  177. onClickModify,
  178. infoModalOnClickConfirm,
  179. infoModalOnClickCancel,
  180. onClickDelete,
  181. init,
  182. reset
  183. };
  184. };
  185. export default useKnowledgeLibListStore();