page-selector.vue 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  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-divider.ml-4(vertical)
  35. v-text-field(
  36. prepend-inner-icon='search'
  37. label='Search...'
  38. hide-details
  39. solo
  40. background-color='grey darken-2'
  41. flat
  42. clearable
  43. )
  44. v-divider.mx-3(vertical)
  45. v-btn(icon): v-icon forward
  46. v-btn(icon): v-icon delete
  47. v-list(dense)
  48. v-list-tile
  49. v-list-tile-avatar: v-icon insert_drive_file
  50. v-list-tile-title File A
  51. v-divider
  52. v-list-tile
  53. v-list-tile-avatar: v-icon insert_drive_file
  54. v-list-tile-title File B
  55. v-divider
  56. v-list-tile
  57. v-list-tile-avatar: v-icon insert_drive_file
  58. v-list-tile-title File C
  59. v-divider
  60. v-list-tile
  61. v-list-tile-avatar: v-icon insert_drive_file
  62. v-list-tile-title File D
  63. v-card-text.grey.lighten-1.pa-2
  64. v-text-field(
  65. solo
  66. hide-details
  67. v-model='location'
  68. flat
  69. prepend-inner-icon='subdirectory_arrow_right'
  70. clearable
  71. )
  72. v-card-chin
  73. v-spacer
  74. v-btn(outline, @click='close') Cancel
  75. v-btn(color='primary', @click='open')
  76. v-icon(left) check
  77. span Select
  78. </template>
  79. <script>
  80. export default {
  81. props: {
  82. value: {
  83. type: Boolean,
  84. default: false
  85. },
  86. mode: {
  87. type: String,
  88. default: 'create'
  89. }
  90. },
  91. data() {
  92. return {
  93. searchLoading: false,
  94. location: '/new-page',
  95. tree: [],
  96. treeChildren: []
  97. }
  98. },
  99. computed: {
  100. isShown: {
  101. get() { return this.value },
  102. set(val) { this.$emit('input', val) }
  103. },
  104. treeFolders() {
  105. return [
  106. {
  107. id: '/',
  108. name: '/ (root)',
  109. children: []
  110. }
  111. ]
  112. }
  113. },
  114. methods: {
  115. close() {
  116. this.isShown = false
  117. },
  118. open() {
  119. if (this.mode === 'create') {
  120. window.location.assign(`/e${this.location}`)
  121. }
  122. },
  123. async fetchFolders(item) {
  124. console.info(item)
  125. }
  126. }
  127. }
  128. </script>
  129. <style lang='scss'>
  130. .page-selector {
  131. .v-treeview-node__label {
  132. font-size: 13px;
  133. }
  134. }
  135. </style>