{{template "header" .}}
<meta name="keywords" content="码农随笔,个人随笔,博客,个人博客,个人笔记,技术博客,免费云笔记,云笔记,随笔,IT博客,谷歌地图,码农笔录,www.aiprose.com,aiprose.com,aiprose">
<title>发布博客 - 码农随笔</title>
<link rel="stylesheet" href="/static/editor/css/index.css">
<script src="/static/editor/mavon-editor.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/axios/0.19.2/axios.js"></script>
</head>
<body>
<div class="root-container" id="vue-app">
    <div class="blog-title">
        <el-input v-model="blog.Title"  placeholder="请输入文章标题"></el-input>
    </div>
    <mavon-editor :externalLink="externalLink" :toolbars="toolbars" v-model="blog.BlogValue" @imgAdd="$imgAdd"
                  @save="saveHandler" @change="changeHandler" ref=md></mavon-editor>
    <el-dialog title="提示" :visible.sync="showModal" width="500px">
        <div class="modal_form">
            <span class="span-lable">文章分类:</span>
            <el-select v-model="blog.CategoryId" placeholder="请选择文章分类" style="width: 310px">
                <el-option v-for="item in cats" :key="item.Id" :label="item.Title" :value="item.Id"/>
            </el-select>
        </div>
        <div class="modal_form">
            <span class="span-lable">文章标签:</span>
            <el-tag v-for="item,index in lables" :key="index" closable @close="delLabel(index)" style="margin-right: 3px">
                ${item.Title}
            </el-tag>
        </div>
        <div class="modal_form">
            <span class="span-lable">添加标签:</span>
            <div style="display: inline-block;width: 241px">
                <el-input v-model="lableTitle" placeholder="请输入标签名称"/>
            </div>
            <el-button type="primary" plain @click="addLable">添加</el-button>
        </div>
        <span slot="footer" class="dialog-footer">
            <el-button @click="showModal = false">取 消</el-button>
            <el-button type="primary" :loading="loading" @click="okHandler">确 定</el-button>
        </span>
    </el-dialog>
</div>
</body>
<script>
    var app = new Vue({
        delimiters: ['${', '}'],
        el: '#vue-app',
        components: {
            'mavon-editor': MavonEditor.mavonEditor
        },
        data: {
            loading: false,
            lableTitle: '',
            cats: [],
            lables: [],
            showModal: false,
            blog: {
                Title: '',
                BlogValue: '',
                BlogHtml: '',
                CategoryId: ''
            },
            toolbars: {
                bold: true, // 粗体
                italic: true, // 斜体
                header: true, // 标题
                underline: true, // 下划线
                strikethrough: true, // 中划线
                mark: true, // 标记
                superscript: true, // 上角标
                subscript: true, // 下角标
                quote: true, // 引用
                ol: true, // 有序列表
                ul: true, // 无序列表
                link: true, // 链接
                imagelink: true, // 图片链接
                code: true, // code
                table: true, // 表格
                //fullscreen: true, // 全屏编辑
                readmodel: true, // 沉浸式阅读
                htmlcode: true, // 展示html源码
                help: true, // 帮助
                /* 1.3.5 */
                undo: true, // 上一步
                //redo: true, // 下一步
                trash: true, // 清空
                save: true, // 保存(触发events中的save事件)
                /* 1.4.2 */
                navigation: true, // 导航目录
                /* 2.1.8 */
                alignleft: true, // 左对齐
                aligncenter: true, // 居中
                alignright: true, // 右对齐
                /* 2.2.1 */
                subfield: true, // 单双栏模式
                preview: true, // 预览
                menu: true, // 预览
            },
            externalLink: {
                katex_css: function () {
                    // 这是你的katex配色方案路径路径
                    return '/katex/katex.min.css';
                },
                katex_js: function () {
                    return '/katex/katex.min.js';
                },
            },
        },
        created() {
            let item = window.localStorage.getItem("blogValue");
            if(item){
                this.blog.BlogValue = item
            }
            let itemTitle = window.localStorage.getItem("blogTilte");
            if(itemTitle){
                this.blog.Title = itemTitle
            }
            this.getCatas()
            
        },
        mounted: function () {
            var _this = this
            this.$refs.md.$on("imgAdd",(pos, $file)=>{
                _this.$imgAdd(pos, $file)
            })
        },
        methods: {
            okHandler (){
                const _this =this
                if(!this.blog.CategoryId || this.blog.CategoryId==0){
                    this.$message.error('文章分类必须选择')
                    return
                }
                this.loading = true
                var tobj = {}
                tobj.title = this.blog.Title
                window.localStorage.setItem("blogTilte",this.blog.Title);
                tobj.blogHtml = this.blog.BlogHtml
                var regex = /(<([^>]+)>)/ig
                tobj.blogDesc = tobj.blogHtml.replace(regex,"").substring(0,200)
                tobj.catory = this.blog.CategoryId
                tobj.blogValue = this.blog.BlogValue
                tobj.labels = []
                this.lables.forEach(el=>{
                    tobj.labels.push(el.Title)
                })
                $.post('/api/blog/new', tobj,
                    function (data) {
                        _this.loading = false
                        if (data.Status == 0) {
                            window.localStorage.removeItem("blogValue");
                            window.localStorage.removeItem("blogTilte");
                            _this.$message.success('保存成功')
                            window.location.href = "/blog/"+ data.Data
                        } else if (data.Status == 401) {
                            window.location.href = "/login"
                        } else if (data.Status == 500) {
                            _this.$message.error('保存失败')
                        }
                    }, 'json')
            },
            addLable(){
                if(!this.lableTitle){
                    this.$message.error('请先输入标签名称')
                    return
                }
                var tobj = {}
                tobj.Title = this.lableTitle
                this.lables.push(tobj)
                this.lableTitle = ''
            },
            delLabel(index){
                this.lables.splice(index,1)
            },
            getCatas(){
                var _this = this
                $.get('/api/cats',
                    function (data) {
                        if (data.Status == 0) {
                            const tdata = data.Data.map(x=>{x.Id = x.Id+""; return x})
                            _this.cats = tdata
                        } else if (data.Status == 401) {
                            window.location.href = "/login"
                        } else if (data.Status == 500) {
                        }
                    }, 'json')
            },
            $imgAdd(pos, $file) {
                var _this = this
                // 第一步.将图片上传到服务器.
                var formdata = new FormData();
                formdata.append('image', $file);
                axios({
                    url: '/file/upload',
                    method: 'post',
                    data: formdata,
                    headers: {'Content-Type': 'multipart/form-data'},
                }).then((resp) => {
                    _this.$refs.md.$img2Url(pos, resp.data.Data);
                })
            },
            changeHandler(value, render) {
                this.blog.BlogValue = value
                this.blog.BlogHtml = render
                window.localStorage.setItem("blogValue",value);
            },
            saveHandler(value, render) {
                if (this.blog.Title.trim().length < 3) {
                    this.$message.error('文章标题最少三个字')
                    return
                }
                if (this.blog.BlogValue.trim().length == 0) {
                    this.$message.error('文章内容不能为空哦')
                    return
                }
                this.showModal = true
            },
        }
    })
</script>
</html>