码农笔录博客源码
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.
 
 
 
 
 

219 lines
8.7 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) {
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>