page-selector.vue 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  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(:class='darkMode ? `darken-4` : `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.pa-2(:class='darkMode ? `darken-3-d5` : `lighten-1`')
  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. import { get } from 'vuex-pathify'
  71. export default {
  72. props: {
  73. value: {
  74. type: Boolean,
  75. default: false
  76. },
  77. mode: {
  78. type: String,
  79. default: 'create'
  80. }
  81. },
  82. data() {
  83. return {
  84. searchLoading: false,
  85. location: '/new-page',
  86. tree: [],
  87. treeChildren: []
  88. }
  89. },
  90. computed: {
  91. darkMode: get('site/dark'),
  92. isShown: {
  93. get() { return this.value },
  94. set(val) { this.$emit('input', val) }
  95. },
  96. treeFolders() {
  97. return [
  98. {
  99. id: '/',
  100. name: '/ (root)',
  101. children: []
  102. }
  103. ]
  104. }
  105. },
  106. methods: {
  107. close() {
  108. this.isShown = false
  109. },
  110. open() {
  111. if (this.mode === 'create') {
  112. window.location.assign(`/e${this.location}`)
  113. }
  114. },
  115. async fetchFolders(item) {
  116. console.info(item)
  117. }
  118. }
  119. }
  120. </script>
  121. <style lang='scss'>
  122. .page-selector {
  123. .v-treeview-node__label {
  124. font-size: 13px;
  125. }
  126. }
  127. </style>