You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							218 rivejä
						
					
					
						
							8.6 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							218 rivejä
						
					
					
						
							8.6 KiB
						
					
					
				
								{{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) {
							 | 
						|
								                            _this.cats = data.Data
							 | 
						|
								                        } 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>
							 |