monitor.ts 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. import { ref } from "vue";
  2. import { autoSetModeCallback, createTemploraryID } from "./sys";
  3. import { fetchMonitors, postUpdateMonitor, postDeleteMonitor, postInsertMonitor } from "@/api";
  4. import {
  5. togetherCallback,
  6. deleteStoreItem,
  7. addStoreItem,
  8. updateStoreItem,
  9. saveStoreItems,
  10. recoverStoreItems,
  11. } from "@/utils";
  12. import type { Monitor, Monitors } from "@/api";
  13. export type { Monitors, Monitor } from "@/api";
  14. export const monitors = ref<Monitors>([]);
  15. export const initMonitors = async () => {
  16. monitors.value = await fetchMonitors();
  17. };
  18. export const createMonitor = (
  19. am: Partial<Monitor> = {}
  20. ): Monitor => ({
  21. id: createTemploraryID(),
  22. title: `模型`,
  23. content: '',
  24. ...am,
  25. });
  26. let bcMonitors: Monitors = [];
  27. export const getBackupMonitors = () => bcMonitors;
  28. export const backupMonitors = () => {
  29. bcMonitors = monitors.value.map((monitor) => ({ ...monitor }));
  30. };
  31. export const addMonitor = addStoreItem(monitors, postInsertMonitor);
  32. export const updateMonitors = updateStoreItem(
  33. monitors,
  34. postUpdateMonitor
  35. );
  36. export const deleteMonitor = deleteStoreItem(monitors, ({ id }) =>
  37. postDeleteMonitor(id)
  38. );
  39. export const initialMonitors = async () => {
  40. monitors.value = await fetchMonitors();
  41. backupMonitors();
  42. };
  43. export const recoverMonitors = recoverStoreItems(
  44. monitors,
  45. getBackupMonitors
  46. );
  47. export const saveMonitors = saveStoreItems(
  48. monitors,
  49. getBackupMonitors,
  50. {
  51. add: addMonitor,
  52. update: updateMonitors,
  53. delete: deleteMonitor,
  54. }
  55. );
  56. export const autoSaveMonitor = autoSetModeCallback([monitors], {
  57. backup: togetherCallback([backupMonitors]),
  58. recovery: togetherCallback([recoverMonitors]),
  59. save: async () => {
  60. await saveMonitors();
  61. },
  62. });