<!doctype html>
< html lang = "en" class = "no-js" >
< head >
< meta charset = "UTF-8" >
< meta name = "viewport" content = "width=device-width, initial-scale=1" / >
< meta name = "description"
content="码农随笔,个人随笔是一个面向IT技术人员,提供个人平时工作总结和在线记录学习笔记,个人技术博客,在线云笔记,码农笔录,最新的技术博客,www.aiprose.com">
< meta name = "keywords" content = "码农随笔,个人随笔,博客,个人博客,个人笔记,技术博客,免费云笔记,云笔记,随笔,IT博客,谷歌地图,码农笔录,aiprose" >
< title > 我的笔记 - 码农随笔< / title >
< script type = "text/javascript" src = "/static/js/vue.min.js" > < / script >
< link rel = "stylesheet" href = "/static/css/iview.css" >
< script src = "/static/js/iview.min.js" > < / script >
< script type = "text/javascript" src = "https://cdn.bootcss.com/jquery/3.4.0/jquery.min.js" > < / script >
< 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 >
< style >
html, body {
height: 100%;
min-height: 100%;
}
main {
margin-top: 0 !important;
margin-bottom: 0 !important;
background-color: #f5f4e9;
}
#vue-app {
height: 100%;
}
.v-note-wrapper {
height: 100%;
z-index: 99 !important;
}
.v-note-wrapper .v-note-op {
padding-left: 40px !important;
}
.ivu-menu-png {
z-index: 1000;
position: fixed;
left: 10px;
top: 5px;
}
.ivu-drawer-body {
scrollbar-width: none; /* firefox */
-ms-overflow-style: none; /* IE 10+ */
overflow-x: hidden;
overflow-y: auto;
}
::-webkit-scrollbar {
display: none; /* Chrome Safari */
}
< / style >
< / head >
< body >
< div id = "vue-app" >
< div class = "ivu-menu-png" @ click = "drawer = true" >
< img src = "/static/img/imenu.png" alt = "" width = "30" height = "30" >
< / div >
< Modal
v-model="modal1"
title="笔记信息"
:mask-closable="false"
@on-ok="okHandler"
@on-cancel="cancelHandler">
< i-form :label-width = "100" >
< form-item label = "文件夹名称" >
< i-select v-model = "currentNote.Pid" >
< i-option v-for = "item in noteCols" :value = "item.id" :key = "item.id" > ${ item.title }< / i-option >
< / i-select >
< / form-item >
< form-item label = "笔记名称" >
< i-input type = "text" v-model = "currentNote.Title" placeholder = "请输入笔记名称" / >
< / form-item >
< / i-form >
< / Modal >
< Modal
v-model="modal2"
title="新增文件夹"
:mask-closable="false"
@on-ok="okColHandler">
< i-form :label-width = "100" >
< form-item label = "文件夹名称" >
< i-input type = "text" v-model = "colTitle" placeholder = "请输入文件夹名称" / >
< / form-item >
< / i-form >
< / Modal >
< mavon-editor :externalLink = "externalLink" :toolbars = "toolbars" v-model = "meval" @ imgAdd = "$imgAdd" @ save = "saveHandler"
@change="changeHandler" ref=md>< / mavon-editor >
< Drawer title = "目录选择" placement = "left" :closable = "false" v-model = "drawer" width = "400" >
< i-button type = "primary" ghost long @ click = "newNoteColHandler" > 新建文件夹< / i-button >
< i-button type = "success" ghost long style = "margin-top: 5px" @ click = "newNoteHandler" > 新建笔记< / i-button >
< i-menu theme = "light" accordion = "true" width = "380" @ on-select = "noteSelectHandler" >
< Submenu :name = "item.Id" v-for = "(item,key) in notes" :key = "key" >
< template slot = "title" >
< i class = "ivu-icon ivu-icon-ios-paper" > < / i >
${item.Title}
< / template >
< menu-item :name = "note.Id" v-for = "(note,nkey) in item.Notes" :key = "nkey" > ${note.Title}
< Icon type = "md-trash" style = "float: right" @ click = "delHandler(note.Id)" / >
< / menu-item >
< / Submenu >
< / i-menu >
< / Drawer >
< / div >
< / body >
< script >
var app = new Vue({
delimiters: ['${', '}'],
el: '#vue-app',
components: {
'mavon-editor': MavonEditor.mavonEditor
},
data: {
modal2: false,
modal1: false,
drawer: false,
colTitle: '',
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';
},
},
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, // 预览
},
notes: [],
currentNote: {},
meval: '',
noteCols: []
},
mounted: function () {
var _this = this
var noteCahche = window.localStorage.getItem("note")
if (noteCahche) {
this.currentNote = JSON.parse(noteCahche)
this.meval = this.currentNote.NoteVal
}
this.getData()
// $vm.$emit('imgAdd', pos, $file);
this.$refs.md.$on("imgAdd",(pos, $file)=>{
_this.$imgAdd(pos, $file)
})
},
methods: {
$imgAdd(pos, $file){
debugger
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);
})
},
delHandler (id){
var _this = this
if(!id){
return
}
$.post('/api/note/del/' + id,
function (data) {
if (data.Status == 0) {
this.currentNote = {}
this.meval = ''
_this.getData()
_this.$Notice.success({
title: '删除成功',
desc: ''
})
} else if (data.Status == 401) {
window.location.href = "/login"
} else if (data.Status == 403) {
this.$Notice.warning({
title: '暂无权限',
desc: ''
})
} else {
_this.$Notice.error({
title: '删除失败',
desc: ''
})
}
}, 'json')
},
newNoteColHandler(){
this.modal2 = true
},
getData(){
var _this = this
$.get("/api/note", function (data, status) {
_this.notes = data
data.forEach((el) => {
_this.noteCols.push({title: el.Title, id: el.Id})
})
})
},
okColHandler() {
var _this = this
if(!this.colTitle){
return
}
$.post('/api/notecoll/save', {
title: this.colTitle
},
function (data) {
if (data.Status == 500) {
_this.$Notice.error({
title: '保存失败',
desc: ''
})
} else if (data.Status == 401) {
window.location.href = "/login"
} else {
_this.getData()
_this.$Notice.success({
title: '保存成功',
desc: ''
})
}
}, 'json')
},
changeHandler: function (value, render) {
this.currentNote.NoteVal = value
this.currentNote.NoteHtml = render
var jsonStr = JSON.stringify(this.currentNote);
window.localStorage.setItem("note", jsonStr)
},
newNoteHandler() {
this.currentNote = {}
this.meval = ''
},
okHandler() {
var _this = this
if (!this.currentNote.Pid) {
this.$Notice.warning({
title: '请选择文件夹后重新保存',
desc: ''
})
return
}
if (!this.currentNote.Title) {
this.$Notice.warning({
title: '请输入笔记名称后重新保存',
desc: ''
})
return
}
$.post('/api/note/save/', {
pid: this.currentNote.Pid,
title: this.currentNote.Title,
noteHtml: this.currentNote.NoteHtml,
noteVal: this.currentNote.NoteVal
},
function (data) {
if (data.Status == 500) {
_this.$Notice.error({
title: '保存失败',
desc: ''
})
} else if (data.Status == 401) {
window.location.href = "/login"
} else {
_this.currentNote.Id = data.Id
_this.$Notice.success({
title: '保存成功',
desc: ''
})
}
}, 'json')
},
cancelHandler() {
this.$Notice.warning({
title: '笔记没有被保存!!!',
desc: ''
})
},
noteSelectHandler(id) {
var _this = this
this.notes.forEach((item) => {
item.Notes.forEach((note) => {
if (id == note.Id) {
_this.currentNote = note
_this.meval = note.NoteVal ? note.NoteVal : note.NoteHtml
}
})
})
},
saveHandler(value, render) {
this.currentNote.NoteVal = value
this.currentNote.NoteHtml = render
if (!this.currentNote.Id) {
this.modal1 = true
} else {
this.editHandler(value, render)
}
},
editHandler(value, render) {
var _this = this
$.post('/api/note/edit/' + this.currentNote.Id, {
noteHtml: render,
noteVal: value
},
function (data) {
if (data.Status == 0) {
_this.$Notice.success({
title: '保存成功',
desc: ''
})
} else if (data.Status == 401) {
window.location.href = "/login"
} else {
_this.$Notice.error({
title: '保存失败',
desc: ''
})
}
}, 'json')
}
}
})
< / script >
< / html >