Nelze vybrat více než 25 témat
Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.
378 lines
14 KiB
378 lines
14 KiB
<!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>
|