PageTreeItem.vue 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. <template>
  2. <div
  3. class="w-full flex items-center justify-between group/item"
  4. :class="{
  5. 'selected-tree-node': projectStore.activeWidgets.map((item) => item.id).includes(data.id)
  6. }"
  7. >
  8. <div class="flex-1 flex items-center gap-8px">
  9. <LuPanelsTopLeft size="14px" v-if="data.type === 'page'" />
  10. <LuBox size="14px" v-else />
  11. <span>{{ node.label }}</span>
  12. </div>
  13. <div class="flex items-center gap-4px pr-12px invisible group-hover/item:visible">
  14. <el-tooltip v-if="data.type !== 'page'" content="删除">
  15. <span @click="deleteWidget(data)"><LuTrash2 size="14px" /></span>
  16. </el-tooltip>
  17. <el-tooltip content="隐藏/显示">
  18. <span @click.capture.stop="data.hidden = !data.hidden">
  19. <LuEye size="14px" v-if="!data.hidden" />
  20. <LuEyeOff size="14px" v-else />
  21. </span>
  22. </el-tooltip>
  23. <el-tooltip :content="data.locked ? '解锁' : '锁定'">
  24. <span @click.capture.stop="data.locked = !data.locked">
  25. <LuLock size="14px" v-if="data.locked" />
  26. <LuUnlock size="14px" v-else />
  27. </span>
  28. </el-tooltip>
  29. </div>
  30. </div>
  31. </template>
  32. <script setup lang="ts">
  33. import type { RenderContentContext } from 'element-plus'
  34. import type { BaseWidget } from '@/types/baseWidget'
  35. import {
  36. LuTrash2,
  37. LuLock,
  38. LuUnlock,
  39. LuEye,
  40. LuEyeOff,
  41. LuPanelsTopLeft,
  42. LuBox
  43. } from 'vue-icons-plus/lu'
  44. import { useProjectStore } from '@/store/modules/project'
  45. import { useActionStore } from '@/store/modules/action'
  46. const props = defineProps<{
  47. node: RenderContentContext['node']
  48. data: BaseWidget
  49. }>()
  50. const projectStore = useProjectStore()
  51. const actionStore = useActionStore()
  52. // 删除控件
  53. const deleteWidget = (data: BaseWidget) => {
  54. actionStore.onDeleteById(data.id)
  55. }
  56. </script>
  57. <style lang="less">
  58. .el-tree-node__content:has(.selected-tree-node) {
  59. background: var(--el-color-primary-light-9) !important;
  60. }
  61. </style>