2
0

page-selector.vue 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. <template lang="pug">
  2. v-dialog(v-model='isShown', lazy, max-width='850px')
  3. v-card.page-selector
  4. .dialog-header.is-dark
  5. v-icon.mr-2(color='white') find_in_page
  6. span Select Page Location
  7. v-spacer
  8. v-progress-circular(
  9. indeterminate
  10. color='white'
  11. :size='20'
  12. :width='2'
  13. v-show='searchLoading'
  14. )
  15. .d-flex(style='min-height:400px;')
  16. v-flex(xs4).grey.lighten-3
  17. v-toolbar(color='grey darken-3', dark, dense, flat)
  18. .body-2 Folders
  19. v-spacer
  20. v-btn(icon): v-icon create_new_folder
  21. v-treeview(
  22. v-model='tree'
  23. :items='treeFolders'
  24. :load-children='fetchFolders'
  25. activatable
  26. open-on-click
  27. hoverable
  28. )
  29. template(slot='prepend', slot-scope='{ item, open, leaf }')
  30. v-icon {{ open ? 'folder_open' : 'folder' }}
  31. v-flex(xs8)
  32. v-toolbar(color='grey darken-2', dark, dense, flat)
  33. .body-2 Pages
  34. v-spacer
  35. v-btn(icon): v-icon forward
  36. v-btn(icon): v-icon delete
  37. v-list(dense)
  38. v-list-tile
  39. v-list-tile-avatar: v-icon insert_drive_file
  40. v-list-tile-title File A
  41. v-divider
  42. v-list-tile
  43. v-list-tile-avatar: v-icon insert_drive_file
  44. v-list-tile-title File B
  45. v-divider
  46. v-list-tile
  47. v-list-tile-avatar: v-icon insert_drive_file
  48. v-list-tile-title File C
  49. v-divider
  50. v-list-tile
  51. v-list-tile-avatar: v-icon insert_drive_file
  52. v-list-tile-title File D
  53. v-card-text.grey.lighten-1.pa-2
  54. v-text-field(
  55. solo
  56. hide-details
  57. v-model='location'
  58. flat
  59. prepend-inner-icon='subdirectory_arrow_right'
  60. clearable
  61. )
  62. v-card-chin
  63. v-spacer
  64. v-btn(outline, @click='close') Cancel
  65. v-btn(color='primary', @click='open')
  66. v-icon(left) check
  67. span Select
  68. </template>
  69. <script>
  70. export default {
  71. props: {
  72. value: {
  73. type: Boolean,
  74. default: false
  75. },
  76. mode: {
  77. type: String,
  78. default: 'create'
  79. }
  80. },
  81. data() {
  82. return {
  83. searchLoading: false,
  84. location: '/new-page',
  85. tree: [],
  86. treeChildren: []
  87. }
  88. },
  89. computed: {
  90. isShown: {
  91. get() { return this.value },
  92. set(val) { this.$emit('input', val) }
  93. },
  94. treeFolders() {
  95. return [
  96. {
  97. id: '/',
  98. name: '/ (root)',
  99. children: []
  100. }
  101. ]
  102. }
  103. },
  104. methods: {
  105. close() {
  106. this.isShown = false
  107. },
  108. open() {
  109. if (this.mode === 'create') {
  110. window.location.assign(`/e${this.location}`)
  111. }
  112. },
  113. async fetchFolders(item) {
  114. console.info(item)
  115. }
  116. }
  117. }
  118. </script>
  119. <style lang='scss'>
  120. .page-selector {
  121. .v-treeview-node__label {
  122. font-size: 13px;
  123. }
  124. }
  125. </style>