BlogEdit.vue 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245
  1. <template>
  2. <b-card
  3. v-if="Object.keys(blogEdit).length"
  4. class="blog-edit-wrapper"
  5. >
  6. <!-- media -->
  7. <b-media
  8. no-body
  9. vertical-align="center"
  10. >
  11. <b-media-aside class="mr-75">
  12. <b-avatar
  13. size="38"
  14. :src="blogEdit.avatar"
  15. />
  16. </b-media-aside>
  17. <b-media-body>
  18. <h6 class="mb-25">
  19. {{ blogEdit.userFullName }}
  20. </h6>
  21. <b-card-text>{{ blogEdit.createdTime }}</b-card-text>
  22. </b-media-body>
  23. </b-media>
  24. <!--/ media -->
  25. <!-- form -->
  26. <b-form class="mt-2">
  27. <b-row>
  28. <b-col md="6">
  29. <b-form-group
  30. label="Title"
  31. label-for="blog-edit-title"
  32. class="mb-2"
  33. >
  34. <b-form-input
  35. id="blog-edit-title"
  36. v-model="blogEdit.blogTitle"
  37. />
  38. </b-form-group>
  39. </b-col>
  40. <b-col md="6">
  41. <b-form-group
  42. label="Category"
  43. label-for="blog-edit-category"
  44. class="mb-2"
  45. >
  46. <v-select
  47. id="blog-edit-category"
  48. v-model="blogEdit.blogCategories"
  49. :dir="$store.state.appConfig.isRTL ? 'rtl' : 'ltr'"
  50. multiple
  51. :options="categoryOption"
  52. />
  53. </b-form-group>
  54. </b-col>
  55. <b-col md="6">
  56. <b-form-group
  57. label="Slug"
  58. label-for="blog-edit-slug"
  59. class="mb-2"
  60. >
  61. <b-form-input
  62. id="blog-edit-slug"
  63. v-model="blogEdit.slug"
  64. />
  65. </b-form-group>
  66. </b-col>
  67. <b-col md="6">
  68. <b-form-group
  69. label="Status"
  70. label-for="blog-edit-category"
  71. class="mb-2"
  72. >
  73. <v-select
  74. id="blog-edit-category"
  75. v-model="blogEdit.status"
  76. :dir="$store.state.appConfig.isRTL ? 'rtl' : 'ltr'"
  77. :options="statusOption"
  78. />
  79. </b-form-group>
  80. </b-col>
  81. <b-col cols="12">
  82. <b-form-group
  83. label="Content"
  84. label-for="blog-content"
  85. class="mb-2"
  86. >
  87. <quill-editor
  88. id="blog-content"
  89. v-model="blogEdit.excerpt"
  90. :options="snowOption"
  91. />
  92. </b-form-group>
  93. </b-col>
  94. <b-col
  95. cols="12"
  96. class="mb-2"
  97. >
  98. <div class="border rounded p-2">
  99. <h4 class="mb-1">
  100. Featured Image
  101. </h4>
  102. <b-media
  103. no-body
  104. vertical-align="center"
  105. class="flex-column flex-md-row"
  106. >
  107. <b-media-aside>
  108. <b-img
  109. ref="refPreviewEl"
  110. :src="blogEdit.featuredImage"
  111. height="110"
  112. width="170"
  113. class="rounded mr-2 mb-1 mb-md-0"
  114. />
  115. </b-media-aside>
  116. <b-media-body>
  117. <small class="text-muted">Required image resolution 800x400, image size 10mb.</small>
  118. <b-card-text class="my-50">
  119. <b-link id="blog-image-text">
  120. C:\fakepath\{{ blogFile ? blogFile.name : 'banner.jpg' }}
  121. </b-link>
  122. </b-card-text>
  123. <div class="d-inline-block">
  124. <b-form-file
  125. ref="refInputEl"
  126. v-model="blogFile"
  127. accept=".jpg, .png, .gif"
  128. placeholder="Choose file"
  129. @input="inputImageRenderer"
  130. />
  131. </div>
  132. </b-media-body>
  133. </b-media>
  134. </div>
  135. </b-col>
  136. <b-col
  137. cols="12"
  138. class="mt-50"
  139. >
  140. <b-button
  141. v-ripple.400="'rgba(255, 255, 255, 0.15)'"
  142. variant="primary"
  143. class="mr-1"
  144. >
  145. Save Changes
  146. </b-button>
  147. <b-button
  148. v-ripple.400="'rgba(186, 191, 199, 0.15)'"
  149. variant="outline-secondary"
  150. >
  151. Cancel
  152. </b-button>
  153. </b-col>
  154. </b-row>
  155. </b-form>
  156. <!--/ form -->
  157. </b-card>
  158. </template>
  159. <script>
  160. import {
  161. BCard,
  162. BMedia,
  163. BAvatar,
  164. BCardText,
  165. BMediaAside,
  166. BMediaBody,
  167. BForm,
  168. BRow,
  169. BCol,
  170. BFormGroup,
  171. BFormInput,
  172. BImg,
  173. BFormFile,
  174. BLink,
  175. BButton,
  176. } from 'bootstrap-vue'
  177. import vSelect from 'vue-select'
  178. import { quillEditor } from 'vue-quill-editor'
  179. import Ripple from 'vue-ripple-directive'
  180. import { useInputImageRenderer } from '@core/comp-functions/forms/form-utils'
  181. import { ref } from '@vue/composition-api'
  182. export default {
  183. components: {
  184. BCard,
  185. BMedia,
  186. BAvatar,
  187. BCardText,
  188. BMediaAside,
  189. BMediaBody,
  190. BForm,
  191. BLink,
  192. BImg,
  193. BRow,
  194. BCol,
  195. BButton,
  196. BFormGroup,
  197. BFormInput,
  198. BFormFile,
  199. vSelect,
  200. quillEditor,
  201. },
  202. directives: {
  203. Ripple,
  204. },
  205. data() {
  206. return {
  207. blogEdit: {},
  208. blogFile: null,
  209. categoryOption: ['Fashion', 'Food', 'Gaming', 'Quote', 'Video'],
  210. statusOption: ['Published', 'Pending', 'Draft'],
  211. snowOption: {
  212. theme: 'snow',
  213. },
  214. }
  215. },
  216. created() {
  217. this.$http.get('/blog/list/data/edit').then(res => {
  218. this.blogEdit = res.data
  219. })
  220. },
  221. setup() {
  222. const refInputEl = ref(null)
  223. const refPreviewEl = ref(null)
  224. const { inputImageRenderer } = useInputImageRenderer(refInputEl, base64 => {
  225. refPreviewEl.value.src = base64
  226. })
  227. return {
  228. refInputEl,
  229. refPreviewEl,
  230. inputImageRenderer,
  231. }
  232. },
  233. }
  234. </script>
  235. <style lang="scss">
  236. @import '~@resources/scss/vue/libs/vue-select.scss';
  237. @import '~@resources/scss/vue/libs/quill.scss';
  238. @import '~@resources/scss/vue/pages/page-blog.scss';
  239. </style>