todo.ts 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. import { defineStore } from 'pinia';
  2. import { ref, computed } from 'vue';
  3. import { useExecutionApi } from '@/api/execution';
  4. import type { TodoItem } from '@/types/todo';
  5. import to from 'await-to-js';
  6. export const useTodoStore = defineStore('todo', () => {
  7. const executionApi = useExecutionApi();
  8. // 列表数据
  9. const list = ref<TodoItem[]>([]);
  10. // 总数
  11. const total = ref(0);
  12. // 加载状态
  13. const loading = ref(false);
  14. /**
  15. * 获取列表数据 (通用方法)
  16. * @param type 列表类型: approval | start | history
  17. * @param query 查询参数
  18. * @param append 是否追加数据 (用于翻页)
  19. */
  20. async function fetchList(type: 'approval' | 'start' | 'history', query: Record<string, any>, append = false) {
  21. loading.value = true;
  22. // 如果不是追加模式(如重新搜索、切换Tab),先清空列表,防止显示旧数据
  23. if (!append) {
  24. list.value = [];
  25. total.value = 0;
  26. }
  27. let apiFn;
  28. if (type === 'approval') {
  29. apiFn = executionApi.getOwnApproveList;
  30. } else if (type === 'start') {
  31. apiFn = executionApi.getOwnStartList;
  32. } else {
  33. apiFn = executionApi.getOwnApprovedList;
  34. }
  35. const [err, res] = await to(apiFn(query)) as [any, any];
  36. loading.value = false;
  37. if (err) {
  38. console.error(`获取${type}列表失败:`, err);
  39. return { success: false };
  40. }
  41. if (res && res.data) {
  42. const rows = res.data.list || [];
  43. total.value = res.data.total || 0;
  44. if (append) {
  45. list.value = list.value.concat(rows);
  46. } else {
  47. list.value = rows;
  48. }
  49. return { success: true, data: res.data };
  50. }
  51. return { success: false };
  52. }
  53. /**
  54. * 快捷获取首页待办 (Top 2)
  55. */
  56. async function fetchHomeTodoList() {
  57. return fetchList('approval', { platformId: 100010, pageNum: 1, pageSize: 2 }, false);
  58. }
  59. return {
  60. list,
  61. total,
  62. loading,
  63. fetchList,
  64. fetchHomeTodoList
  65. };
  66. });