{{template "header" .}} <meta name="keywords" content="{{.Blog.Title}}"> <title>{{.Blog.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: '' }, 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: { // markdown_css: function() { // // 这是你的markdown css文件路径 // return '/markdown/github-markdown.min.css'; // }, katex_css: function () { // 这是你的katex配色方案路径路径 return '/katex/katex.min.css'; }, katex_js: function () { // 这是你的katex.js路径 return '/katex/katex.min.js'; }, }, }, created() { this.blog = {{.Blog}} if (!this.blog.BlogValue && this.blog.BlogHtml) { this.blog.BlogValue = this.blog.BlogHtml } this.getCatas() this.lables = this.blog.Lables }, mounted: function () { var _this = this this.$refs.md.$on("imgAdd",(pos, $file)=>{ _this.$imgAdd(pos, $file) }) }, methods: { okHandler (){ if(!this.blog.CategoryId || this.blog.CategoryId==0){ this.$message.error('文章分类必须选择') return } var _this = this this.loading = true var tobj = {} tobj.id = this.blog.Id tobj.title = 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/edit', tobj, function (data) { _this.loading = false if (data.Status == 0) { _this.$message.success('保存成功') window.location.href = "/blog/{{.Blog.Id}}" } 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 }, 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>