index.vue 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. <template>
  2. <div class="markdown-container markdown-body">
  3. <el-select v-model="value" placeholder="请选择" @change="handleChange">
  4. <el-option
  5. v-for="(item, index) in options"
  6. :key="index"
  7. :label="item.label"
  8. :value="item.value"
  9. ></el-option>
  10. </el-select>
  11. <div v-html="prettierList"></div>
  12. </div>
  13. </template>
  14. <script>
  15. import marked from "marked";
  16. import "github-markdown-css/github-markdown.css";
  17. import { getList } from "@/api/markdown";
  18. export default {
  19. name: "Markdown",
  20. data() {
  21. return {
  22. listLoading: true,
  23. elementLoadingText: "正在加载...",
  24. options: [
  25. {
  26. value: "0",
  27. label: "Prettier",
  28. },
  29. ],
  30. value: "0",
  31. prettierList: null,
  32. };
  33. },
  34. created() {
  35. this.fetchData();
  36. },
  37. mounted() {},
  38. methods: {
  39. handleChange(val) {
  40. this.value = val;
  41. this.fetchData();
  42. },
  43. async fetchData() {
  44. this.listLoading = true;
  45. switch (this.value) {
  46. case "0":
  47. const { data } = await getList();
  48. this.prettierList = marked(data || "", {
  49. renderer: new marked.Renderer(),
  50. gfm: true,
  51. tables: true,
  52. breaks: false,
  53. pedantic: false,
  54. sanitize: false,
  55. smartLists: true,
  56. smartypants: false,
  57. });
  58. break;
  59. }
  60. setTimeout(() => {
  61. this.listLoading = false;
  62. }, 500);
  63. },
  64. },
  65. };
  66. </script>