excalidraw_all.html 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>excalidraw_all</title>
  6. <script src="js/jquery.min.js"></script>
  7. <script src="js/login.js"></script>
  8. <script src="js/util.js"></script>
  9. <script src="js/vue3.global.prod.js"></script>
  10. <script src="js/axios.min.js"></script>
  11. </head>
  12. <body>
  13. <div id="app">
  14. <div id="nameList">
  15. <span v-for="name in names" :key="name.id" style="margin-right: 1.5em;min-width: 5em">
  16. <a href="#" @click.prevent="loadList(name.id)">
  17. {{ name.name }} - ({{ name.count }})
  18. </a>
  19. </span>
  20. </div>
  21. <ul id="list">
  22. <li v-for="item in listItems" :key="item.id">
  23. <a :href="getUrl(item)" target="_blank">{{ item.name }}_{{ item.version }}</a>
  24. &nbsp;&nbsp;&nbsp;
  25. <button @click="confirmDelete(item.id, item.version)">删除</button>
  26. </li>
  27. </ul>
  28. </div>
  29. <script>
  30. const { createApp, ref, onMounted } = Vue;
  31. createApp({
  32. setup() {
  33. const names = ref([]);
  34. const listItems = ref([]);
  35. const currentId = ref(null);
  36. if (!checkLogin()) {
  37. return;
  38. }
  39. const loadNames = async () => {
  40. try {
  41. const response = await axios.get('https://php.tianyunperfect.cn/controller/excalidraw.php?action=getAllName');
  42. if (response.data.code === 200) {
  43. names.value = response.data.data;
  44. } else {
  45. alert(response.data.message);
  46. }
  47. } catch (error) {
  48. console.error('加载名称列表失败', error);
  49. alert('加载名称列表失败');
  50. }
  51. };
  52. const loadList = async (id) => {
  53. currentId.value = id;
  54. try {
  55. const response = await axios.get(`https://php.tianyunperfect.cn/controller/excalidraw.php?action=get_by_id&id=${id}`);
  56. if (response.data.code === 200) {
  57. listItems.value = response.data.data;
  58. // 如果没有数据,就根据id,重新加载名称列表
  59. if (listItems.value.length === 0) {
  60. await loadNames();
  61. }
  62. } else {
  63. alert(response.data.message);
  64. }
  65. } catch (error) {
  66. console.error('加载列表失败', error);
  67. alert('加载列表失败');
  68. }
  69. };
  70. const getUrl = (item) => {
  71. return `https://excalidraw.tianyunperfect.cn/?a=${item.id}&version=${item.version}`;
  72. };
  73. const confirmDelete = (id, version) => {
  74. if (confirm('确认要删除吗?')) {
  75. deleteData(id, version);
  76. }
  77. };
  78. const deleteData = async (id, version) => {
  79. try {
  80. const response = await axios.delete(`https://php.tianyunperfect.cn/controller/excalidraw.php?action=delete&id=${id}&version=${version}`);
  81. if (response.data.code === 200) {
  82. loadList(currentId.value);
  83. } else {
  84. alert(response.data.message);
  85. }
  86. } catch (error) {
  87. console.error('删除失败', error);
  88. alert('删除失败');
  89. }
  90. };
  91. onMounted(() => {
  92. if (!checkLogin()) {
  93. return;
  94. }
  95. const urlParams = new URLSearchParams(window.location.search);
  96. const idParam = urlParams.get('id');
  97. if (idParam) {
  98. loadList(idParam);
  99. } else {
  100. loadNames();
  101. }
  102. });
  103. return {
  104. names,
  105. listItems,
  106. loadList,
  107. getUrl,
  108. confirmDelete
  109. };
  110. }
  111. }).mount('#app');
  112. </script>
  113. </body>
  114. </html>