258 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			HTML
		
	
	
	
			
		
		
	
	
			258 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			HTML
		
	
	
	
<!DOCTYPE html>
 | 
						||
<html lang="en">
 | 
						||
 | 
						||
<head>
 | 
						||
    <meta charset="UTF-8">
 | 
						||
    <title>Admin Console</title>
 | 
						||
    <link rel="icon" href="/assets/favicon.ico" type="image/x-icon" />
 | 
						||
    <link rel="bookmark" href="/assets/favicon.ico" type="image/x-icon" />
 | 
						||
    <link href="/assets/vuetify-v2.6.9/vuetify-v2.6.9.min.css" rel="stylesheet" />
 | 
						||
    <link href="/assets/vuetify-v2.6.9/materialdesignicons.min.css" rel="stylesheet">
 | 
						||
    <link href="/assets/input.css" rel="stylesheet">
 | 
						||
    <link href="/assets/editor-md/css/editormd.css" rel="stylesheet" />
 | 
						||
 | 
						||
    <script src="/assets/vue/vue.min.js"></script>
 | 
						||
    <script src="/assets/vuetify-v2.6.9/vuetify-v2.6.9.min.js"></script>
 | 
						||
    <script src="/assets/axios/axios.min.js"></script>
 | 
						||
    <script src="/assets/editor-md/lib/jquery.min.js"></script>
 | 
						||
    <script src="/assets/editor-md/editormd.js"></script>
 | 
						||
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no, minimal-ui">
 | 
						||
</head>
 | 
						||
 | 
						||
<body>
 | 
						||
    <div id="app"></div>
 | 
						||
</body>
 | 
						||
<script type="text/x-template" id="app-template">
 | 
						||
    <v-app id="inspire">
 | 
						||
        #{ render "common/bar-admin.html" . }
 | 
						||
        <!-- <#include "../../common/drawer-admin.ftl"> -->
 | 
						||
 | 
						||
 | 
						||
        <v-main class="grey lighten-3">
 | 
						||
            <v-container style="height: 100%">
 | 
						||
                <v-row style="height: 100%">
 | 
						||
                    <v-col cols="12" sm="2">
 | 
						||
                        <v-sheet min-height="100%">
 | 
						||
 | 
						||
                            <v-textarea outlined label="标题" rows="2" v-model="article.title"></v-textarea>
 | 
						||
                            <v-textarea outlined label="子标题" rows="2" v-model="article.subTitle"></v-textarea>
 | 
						||
                            <v-textarea outlined label="概要" rows="2" v-model="article.previous"></v-textarea>
 | 
						||
                            <!-- <v-textarea outlined label="标签" rows="2" v-model="article.tags"></v-textarea> -->
 | 
						||
                            <v-combobox chips clearable multiple solo label="标签" v-model="tags">
 | 
						||
                                <template v-slot:selection="{ attrs, item, select, selected }">
 | 
						||
                                    <v-chip v-bind="attrs" :input-value="selected" close @click:close="remove(item)">
 | 
						||
                                        <strong>{{ item }}</strong> 
 | 
						||
                                    </v-chip>
 | 
						||
                                </template>
 | 
						||
                            </v-combobox>
 | 
						||
                            <!-- <v-btn color="primary" tile @click="publishArticle">发布</v-btn> -->
 | 
						||
                            <v-btn color="primary" tile @click="saveArticle">保存</v-btn>
 | 
						||
 | 
						||
                        </v-sheet>
 | 
						||
                    </v-col>
 | 
						||
                    <v-col cols="12" sm="10">
 | 
						||
                        <v-sheet min-height="100%">
 | 
						||
                            <div id="editor"></div>
 | 
						||
                        </v-sheet>
 | 
						||
                    </v-col>
 | 
						||
 | 
						||
 | 
						||
                </v-row>
 | 
						||
            </v-container>
 | 
						||
        </v-main>
 | 
						||
    </v-app>
 | 
						||
</script>
 | 
						||
 | 
						||
<script type="text/x-template" id="content">#{.blogContent.Content}</script>
 | 
						||
 | 
						||
<script>
 | 
						||
    var markdownEditor;
 | 
						||
    new Vue({
 | 
						||
        el: '#app',
 | 
						||
        template: '#app-template',
 | 
						||
        computed: {
 | 
						||
            tags: {
 | 
						||
                get() {
 | 
						||
                    let result = []
 | 
						||
                    if (this.article.tags.length == 0) {
 | 
						||
                        return result
 | 
						||
                    }
 | 
						||
                    return this.article.tags.split(",")
 | 
						||
                },
 | 
						||
                set(val) {
 | 
						||
                    // console.log(val);
 | 
						||
                    this.article.tags = val.join(",")
 | 
						||
                }
 | 
						||
            }
 | 
						||
 | 
						||
        },
 | 
						||
        data: {
 | 
						||
            group: null,
 | 
						||
            drawer: false,
 | 
						||
            loading: false,
 | 
						||
 | 
						||
            article: {
 | 
						||
                id: '#{.blogArticle.Id}',
 | 
						||
                title: '#{.blogArticle.Title}',
 | 
						||
                subTitle: '#{.blogArticle.SubTitle}',
 | 
						||
                previous: '#{.blogArticle.Previous}',
 | 
						||
                contentType: 'markdown',
 | 
						||
                tags: '#{.blogArticle.Tags}',
 | 
						||
                content: null,
 | 
						||
            },
 | 
						||
        },
 | 
						||
        methods: {
 | 
						||
            remove(item) {
 | 
						||
                let arr = this.article.tags.split(",")
 | 
						||
                let idx = this.tags.indexOf(item)
 | 
						||
                arr.splice(idx, 1)
 | 
						||
                this.tags = arr
 | 
						||
            },
 | 
						||
 | 
						||
            saveArticle() {
 | 
						||
                let content = markdownEditor.getMarkdown();       // 获取 Markdown 源码
 | 
						||
                // let src2 = testEditor.getHTML();           // 获取 Textarea 保存的 HTML 源码
 | 
						||
                // let previewed = testEditor.getPreviewedHTML();  // 获取预览窗口里的 HTML,在开启 watch 且没有开启 saveHTMLToTextarea 时使用
 | 
						||
                this.article.content = content
 | 
						||
 | 
						||
                let url = '/admin/article/submit'
 | 
						||
                // if (this.article.id && this.article.id !== '') {
 | 
						||
                //     url = '/admin/article/update'
 | 
						||
                // }
 | 
						||
                console.log(this.article)
 | 
						||
 | 
						||
                axios.post(url, this.article).then(function (response) {
 | 
						||
                    console.log(response);
 | 
						||
                    location.href = '/admin/article'
 | 
						||
                }).catch(function (error) {
 | 
						||
                    console.log(error);
 | 
						||
                });
 | 
						||
            },
 | 
						||
            publishArticle() {
 | 
						||
                let src1 = markdownEditor.getMarkdown();       // 获取 Markdown 源码
 | 
						||
                let src2 = markdownEditor.getHTML();           // 获取 Textarea 保存的 HTML 源码
 | 
						||
                let src3 = markdownEditor.getPreviewedHTML();  // 获取预览窗口里的 HTML,在开启 watch 且没有开启 saveHTMLToTextarea 时使用
 | 
						||
 | 
						||
                // console.log(src1);
 | 
						||
                // console.log(src2);
 | 
						||
                // console.log(src3);
 | 
						||
            },
 | 
						||
            getArticle(id) {
 | 
						||
                return axios.get('/admin/article/get/' + id)
 | 
						||
            },
 | 
						||
            iniEditor(content) {
 | 
						||
                markdownEditor = editormd("editor", {
 | 
						||
                    width: "100%",
 | 
						||
                    height: 740,
 | 
						||
                    path: '/assets/editor-md/lib/',
 | 
						||
                    // theme: "dark",
 | 
						||
                    // previewTheme: "dark",
 | 
						||
                    // editorTheme: "pastel-on-dark",
 | 
						||
                    markdown: content ? content : '',
 | 
						||
                    codeFold: true,
 | 
						||
                    //syncScrolling : false,
 | 
						||
                    saveHTMLToTextarea: true,    // 保存 HTML 到 Textarea
 | 
						||
                    searchReplace: true,
 | 
						||
                    //watch : false,                // 关闭实时预览
 | 
						||
                    htmlDecode: "style,script,iframe|on*",            // 开启 HTML 标签解析,为了安全性,默认不开启
 | 
						||
                    //toolbar  : false,             //关闭工具栏
 | 
						||
                    // previewCodeHighlight : false, // 关闭预览 HTML 的代码块高亮,默认开启
 | 
						||
                    emoji: true,
 | 
						||
                    taskList: true,
 | 
						||
                    tocm: true,         // Using [TOCM]
 | 
						||
                    tex: true,                   // 开启科学公式TeX语言支持,默认关闭
 | 
						||
                    flowChart: true,             // 开启流程图支持,默认关闭
 | 
						||
                    sequenceDiagram: true,       // 开启时序/序列图支持,默认关闭,
 | 
						||
                    //dialogLockScreen : false,   // 设置弹出层对话框不锁屏,全局通用,默认为true
 | 
						||
                    //dialogShowMask : false,     // 设置弹出层对话框显示透明遮罩层,全局通用,默认为true
 | 
						||
                    //dialogDraggable : false,    // 设置弹出层对话框不可拖动,全局通用,默认为true
 | 
						||
                    //dialogMaskOpacity : 0.4,    // 设置透明遮罩层的透明度,全局通用,默认值为0.1
 | 
						||
                    //dialogMaskBgColor : "#000", // 设置透明遮罩层的背景颜色,全局通用,默认为#fff
 | 
						||
                    imageUpload: true,
 | 
						||
                    imageFormats: ["jpg", "jpeg", "gif", "png", "bmp", "webp"],
 | 
						||
                    imageUploadURL: "/admin/file/upload",
 | 
						||
                    // crossDomainUpload:true,
 | 
						||
                    // onload : function() {
 | 
						||
                    //     console.log('onload', this);
 | 
						||
                    //     //this.fullscreen();
 | 
						||
                    //     //this.unwatch();
 | 
						||
                    //     //this.watch().fullscreen();
 | 
						||
                    //
 | 
						||
                    //     //this.setMarkdown("#PHP");
 | 
						||
                    //     //this.width("100%");
 | 
						||
                    //     //this.height(480);
 | 
						||
                    //     //this.resize("100%", 640);
 | 
						||
                    // }
 | 
						||
                });
 | 
						||
                // $.get('test.md', function(md){
 | 
						||
                //
 | 
						||
                // });
 | 
						||
 | 
						||
                $("#goto-line-btn").bind("click", function () {
 | 
						||
                    markdownEditor.gotoLine(90);
 | 
						||
                });
 | 
						||
 | 
						||
                $("#show-btn").bind('click', function () {
 | 
						||
                    markdownEditor.show();
 | 
						||
                });
 | 
						||
 | 
						||
                $("#hide-btn").bind('click', function () {
 | 
						||
                    markdownEditor.hide();
 | 
						||
                });
 | 
						||
 | 
						||
                $("#get-md-btn").bind('click', function () {
 | 
						||
                    alert(markdownEditor.getMarkdown());
 | 
						||
                });
 | 
						||
 | 
						||
                $("#get-html-btn").bind('click', function () {
 | 
						||
                    alert(markdownEditor.getHTML());
 | 
						||
                });
 | 
						||
 | 
						||
                $("#watch-btn").bind('click', function () {
 | 
						||
                    markdownEditor.watch();
 | 
						||
                });
 | 
						||
 | 
						||
                $("#unwatch-btn").bind('click', function () {
 | 
						||
                    markdownEditor.unwatch();
 | 
						||
                });
 | 
						||
 | 
						||
                $("#preview-btn").bind('click', function () {
 | 
						||
                    markdownEditor.previewing();
 | 
						||
                });
 | 
						||
 | 
						||
                $("#fullscreen-btn").bind('click', function () {
 | 
						||
                    markdownEditor.fullscreen();
 | 
						||
                });
 | 
						||
 | 
						||
                $("#show-toolbar-btn").bind('click', function () {
 | 
						||
                    markdownEditor.showToolbar();
 | 
						||
                });
 | 
						||
 | 
						||
                $("#close-toolbar-btn").bind('click', function () {
 | 
						||
                    markdownEditor.hideToolbar();
 | 
						||
                });
 | 
						||
 | 
						||
                $("#toc-menu-btn").click(function () {
 | 
						||
                    markdownEditor.config({
 | 
						||
                        tocDropdown: true,
 | 
						||
                        tocTitle: "目录 Table of Contents",
 | 
						||
                    });
 | 
						||
                });
 | 
						||
 | 
						||
                $("#toc-default-btn").click(function () {
 | 
						||
                    markdownEditor.config("tocDropdown", false);
 | 
						||
                });
 | 
						||
            }
 | 
						||
 | 
						||
 | 
						||
        },
 | 
						||
        mounted() {
 | 
						||
            let content = document.getElementById('content')
 | 
						||
            this.iniEditor(content.innerText)
 | 
						||
        },
 | 
						||
        vuetify: new Vuetify(),
 | 
						||
    })
 | 
						||
 | 
						||
</script>
 | 
						||
 | 
						||
</html> |