use-recent-agents.js 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. import { defineStore } from 'pinia';
  2. import { localST_RecentAgent } from '../storage';
  3. import { jsonStringify, jsonParse } from '../../utils/utils';
  4. function recentLocalSet(arr) {
  5. // 在本地保存记录
  6. const result_str = jsonStringify(arr);
  7. localST_RecentAgent.setItem(result_str);
  8. }
  9. function recentLocalGet() {
  10. const result_str = localST_RecentAgent.getItem();
  11. const result_list = jsonParse(result_str);
  12. if (result_list === null) {
  13. // json解析发生了错误
  14. return [];
  15. } else {
  16. return result_list;
  17. }
  18. }
  19. /**
  20. * 最近使用的Agent列表
  21. * ID
  22. * 名称
  23. * 图标
  24. * 简介
  25. * 时间
  26. */
  27. export const useRecentAgentStore = defineStore('recent_agents', {
  28. state: () => {
  29. return {
  30. agents: recentLocalGet()
  31. };
  32. },
  33. actions: {
  34. /**
  35. * 获取所有的记录
  36. * @returns
  37. */
  38. getList() {
  39. const cur_list = this.agents;
  40. if (cur_list.length === 0) {
  41. const recent_list = recentLocalGet();
  42. this.agents = recent_list;
  43. return this.agents;
  44. }
  45. return this.agents;
  46. },
  47. /**
  48. * 新增一条记录
  49. * @param {string} id
  50. * @param {string} name
  51. * @param {string} icon
  52. * @param {string} mode
  53. */
  54. addItem(id, name, icon, mode) {
  55. /**
  56. * 检查是否已经存在,如果已经存在,则将其提到前位
  57. * 如果不存在,则在首位添加记录
  58. */
  59. const item = {
  60. id: id,
  61. name: name,
  62. icon: icon,
  63. mode: mode,
  64. active_time: Date.now()
  65. };
  66. const arr = [];
  67. this.agents.forEach((item) => {
  68. if (item.id !== id) {
  69. arr.push(item);
  70. }
  71. });
  72. arr.unshift(item);
  73. this.agents = arr;
  74. recentLocalSet(arr);
  75. },
  76. /**
  77. * 移除一条记录
  78. * @param {string} id
  79. */
  80. removeItem(id) {
  81. const arr = [];
  82. this.agents.forEach((item) => {
  83. if (item.id !== id) {
  84. arr.push(item);
  85. }
  86. });
  87. this.agents = arr;
  88. recentLocalSet(arr);
  89. }
  90. }
  91. });