文档页面

master
pan 4 years ago
parent deeeb2b06b
commit f208627f6f
  1. 6
      layouts/mainmenu.vue
  2. 14
      nuxt.config.js
  3. 4
      package.json
  4. 174
      pages/index/document.vue
  5. 151
      pages/index/read.vue
  6. 5
      plugins/contextmenu.js
  7. 26
      plugins/global.js
  8. 16
      store/menus.js
  9. 42
      store/read.js
  10. 10
      yarn.lock

@ -42,7 +42,11 @@
},
data() {
return {
menus: ['document', 'note', 'center', 'upload']
}
},
computed:{
menus(){
return this.$store.state.menus.menus
}
},
mounted() {

@ -37,7 +37,7 @@ export default {
** Plugins to load before mounting the App
** https://nuxtjs.org/guide/plugins
*/
plugins: ['@/plugins/element-ui','@/plugins/vue-cookies','@/plugins/global','@/plugins/moment'],
plugins: ['@/plugins/element-ui','@/plugins/vue-cookies','@/plugins/global','@/plugins/moment','@/plugins/contextmenu'],
/*
** Auto import components
** See https://nuxtjs.org/api/configuration-components
@ -161,6 +161,7 @@ export default {
"center": "个人中心",
"document": "文档",
"note": "笔记列表",
"read": "阅读论文",
"upload": "本地上传论文"
},
"more_query": "更多查询",
@ -173,6 +174,11 @@ export default {
"confirm_del": "此操作将永久删除该笔记,是否继续?"
}
},
"read": {
"contextmenu": {
"add": "添加笔记"
}
},
"reading_online": "在线阅读",
"tip": "提示",
"today_recommend": "今日推荐",
@ -274,6 +280,7 @@ export default {
"center": "",
"document": "document",
"note": "note list",
"read": "",
"upload": ""
},
"more_query": "",
@ -286,6 +293,11 @@ export default {
"confirm_del": ""
}
},
"read": {
"contextmenu": {
"add": ""
}
},
"reading_online": "",
"tip": "",
"today_recommend": "",

@ -30,7 +30,9 @@
"moment": "^2.27.0",
"nuxt": "^2.13.0",
"nuxt-i18n": "^6.13.1",
"vue-cookies": "^1.7.2"
"v-contextmenu": "^2.9.0",
"vue-cookies": "^1.7.2",
"vue-runtime-helpers": "^1.1.2"
},
"devDependencies": {
"@nuxt/typescript-build": "^1.0.3",

@ -50,7 +50,7 @@
</el-form>
<el-row class="mt3">
<el-col :span="18">
<el-row v-for="(item,index) in docList" class="mt2">
<el-row v-for="(item,index) in docList" class="mt2" :key="index">
<el-row type="flex" align="middle">
<el-col :span="1"><span>{{index+1}}.</span></el-col>
<el-col :span="3">
@ -70,10 +70,10 @@
</el-row>
<el-row class="mt1">
<el-col :span="10" class="doc-title">
<el-tag v-for="tag in item.tags" class="ml1">{{tag}}</el-tag>
<el-tag v-for="tag in item.tags" :key="tag" class="ml1">{{tag}}</el-tag>
</el-col>
<el-col :span="2">
<el-button>{{$t('reading_online')}}</el-button>
<el-button @click="read(item)">{{$t('reading_online')}}</el-button>
</el-col>
</el-row>
</el-row>
@ -83,7 +83,7 @@
<h1 class="center">{{$t('today_recommend')}}</h1>
</el-row>
<div class="recommend-list">
<el-row v-for="item in recommend_list">
<el-row v-for="(item,index) in recommend_list" :key="index">
<h3 class="center doc-title">{{item.title}}</h3>
<p class="doc-summary">{{item.summary}}</p>
</el-row>
@ -116,144 +116,34 @@
},
rules: {},
activeNames: [],
docList:[
{
title:'浅谈中国山水画的传承与创新',
type:'硕士论文',
author:'马俊',
profession:'网络游戏',
school:'中国美术学院',
year:2011,
summary:'摘要:传统的中国山水画建立在自然形象及其对人对自然升华的基础上。在哲学意义上,它的语言和精神性依赖于一个自然体系。而当下中国艺术的现代性转变也是一个如何超越自然体系的问题。现代性面对的社会和空间是工业社会和城市。',
tags:['山水画','空间经验','构成主义']
},
{
title:'浅谈中国山水画的传承与创新',
type:'硕士论文',
author:'马俊',
profession:'网络游戏',
school:'中国美术学院',
year:2011,
summary:'摘要:传统的中国山水画建立在自然形象及其对人对自然升华的基础上。在哲学意义上,它的语言和精神性依赖于一个自然体系。而当下中国艺术的现代性转变也是一个如何超越自然体系的问题。现代性面对的社会和空间是工业社会和城市。'
},
{
title:'浅谈中国山水画的传承与创新',
type:'硕士论文',
author:'马俊',
profession:'网络游戏',
school:'中国美术学院',
year:2011,
summary:'摘要:传统的中国山水画建立在自然形象及其对人对自然升华的基础上。在哲学意义上,它的语言和精神性依赖于一个自然体系。而当下中国艺术的现代性转变也是一个如何超越自然体系的问题。现代性面对的社会和空间是工业社会和城市。',
tags:['山水画','空间经验','构成主义']
},
{
title:'浅谈中国山水画的传承与创新',
type:'硕士论文',
author:'马俊',
profession:'网络游戏',
school:'中国美术学院',
year:2011,
summary:'摘要:传统的中国山水画建立在自然形象及其对人对自然升华的基础上。在哲学意义上,它的语言和精神性依赖于一个自然体系。而当下中国艺术的现代性转变也是一个如何超越自然体系的问题。现代性面对的社会和空间是工业社会和城市。'
},
{
title:'浅谈中国山水画的传承与创新',
type:'硕士论文',
author:'马俊',
profession:'网络游戏',
school:'中国美术学院',
year:2011,
summary:'摘要:传统的中国山水画建立在自然形象及其对人对自然升华的基础上。在哲学意义上,它的语言和精神性依赖于一个自然体系。而当下中国艺术的现代性转变也是一个如何超越自然体系的问题。现代性面对的社会和空间是工业社会和城市。',
tags:['山水画','空间经验','构成主义']
},
{
title:'浅谈中国山水画的传承与创新',
type:'硕士论文',
author:'马俊',
profession:'网络游戏',
school:'中国美术学院',
year:2011,
summary:'摘要:传统的中国山水画建立在自然形象及其对人对自然升华的基础上。在哲学意义上,它的语言和精神性依赖于一个自然体系。而当下中国艺术的现代性转变也是一个如何超越自然体系的问题。现代性面对的社会和空间是工业社会和城市。'
},
{
title:'浅谈中国山水画的传承与创新',
type:'硕士论文',
author:'马俊',
profession:'网络游戏',
school:'中国美术学院',
year:2011,
summary:'摘要:传统的中国山水画建立在自然形象及其对人对自然升华的基础上。在哲学意义上,它的语言和精神性依赖于一个自然体系。而当下中国艺术的现代性转变也是一个如何超越自然体系的问题。现代性面对的社会和空间是工业社会和城市。',
tags:['山水画','空间经验','构成主义']
},
{
title:'浅谈中国山水画的传承与创新',
type:'硕士论文',
author:'马俊',
profession:'网络游戏',
school:'中国美术学院',
year:2011,
summary:'摘要:传统的中国山水画建立在自然形象及其对人对自然升华的基础上。在哲学意义上,它的语言和精神性依赖于一个自然体系。而当下中国艺术的现代性转变也是一个如何超越自然体系的问题。现代性面对的社会和空间是工业社会和城市。'
},{
title:'浅谈中国山水画的传承与创新',
type:'硕士论文',
author:'马俊',
profession:'网络游戏',
school:'中国美术学院',
year:2011,
summary:'摘要:传统的中国山水画建立在自然形象及其对人对自然升华的基础上。在哲学意义上,它的语言和精神性依赖于一个自然体系。而当下中国艺术的现代性转变也是一个如何超越自然体系的问题。现代性面对的社会和空间是工业社会和城市。',
tags:['山水画','空间经验','构成主义']
},
{
title:'浅谈中国山水画的传承与创新',
type:'硕士论文',
author:'马俊',
profession:'网络游戏',
school:'中国美术学院',
year:2011,
summary:'摘要:传统的中国山水画建立在自然形象及其对人对自然升华的基础上。在哲学意义上,它的语言和精神性依赖于一个自然体系。而当下中国艺术的现代性转变也是一个如何超越自然体系的问题。现代性面对的社会和空间是工业社会和城市。'
}
],
recommend_list:[
{
title:'玩具产品的情感设计研究',
summary:'摘要:首先,玩具作为一种产品,是设计者情感的外显化与实物化,设计者通过玩具的设计,将生活中的感动和梦想投射到玩具形像中,使得这样的情感和梦想得到延续。而使用者在使用玩具时,也能感受到设计师的情感,从而产生共鸣。'
},
{
title:'玩具产品的情感设计研究',
summary:'摘要:首先,玩具作为一种产品,是设计者情感的外显化与实物化,设计者通过玩具的设计,将生活中的感动和梦想投射到玩具形像中,使得这样的情感和梦想得到延续。而使用者在使用玩具时,也能感受到设计师的情感,从而产生共鸣。'
},
{
title:'玩具产品的情感设计研究',
summary:'摘要:首先,玩具作为一种产品,是设计者情感的外显化与实物化,设计者通过玩具的设计,将生活中的感动和梦想投射到玩具形像中,使得这样的情感和梦想得到延续。而使用者在使用玩具时,也能感受到设计师的情感,从而产生共鸣。'
},
{
title:'玩具产品的情感设计研究',
summary:'摘要:首先,玩具作为一种产品,是设计者情感的外显化与实物化,设计者通过玩具的设计,将生活中的感动和梦想投射到玩具形像中,使得这样的情感和梦想得到延续。而使用者在使用玩具时,也能感受到设计师的情感,从而产生共鸣。'
},
{
title:'玩具产品的情感设计研究',
summary:'摘要:首先,玩具作为一种产品,是设计者情感的外显化与实物化,设计者通过玩具的设计,将生活中的感动和梦想投射到玩具形像中,使得这样的情感和梦想得到延续。而使用者在使用玩具时,也能感受到设计师的情感,从而产生共鸣。'
},
{
title:'玩具产品的情感设计研究',
summary:'摘要:首先,玩具作为一种产品,是设计者情感的外显化与实物化,设计者通过玩具的设计,将生活中的感动和梦想投射到玩具形像中,使得这样的情感和梦想得到延续。而使用者在使用玩具时,也能感受到设计师的情感,从而产生共鸣。'
},
{
title:'玩具产品的情感设计研究',
summary:'摘要:首先,玩具作为一种产品,是设计者情感的外显化与实物化,设计者通过玩具的设计,将生活中的感动和梦想投射到玩具形像中,使得这样的情感和梦想得到延续。而使用者在使用玩具时,也能感受到设计师的情感,从而产生共鸣。'
},
{
title:'玩具产品的情感设计研究',
summary:'摘要:首先,玩具作为一种产品,是设计者情感的外显化与实物化,设计者通过玩具的设计,将生活中的感动和梦想投射到玩具形像中,使得这样的情感和梦想得到延续。而使用者在使用玩具时,也能感受到设计师的情感,从而产生共鸣。'
},
{
title:'玩具产品的情感设计研究',
summary:'摘要:首先,玩具作为一种产品,是设计者情感的外显化与实物化,设计者通过玩具的设计,将生活中的感动和梦想投射到玩具形像中,使得这样的情感和梦想得到延续。而使用者在使用玩具时,也能感受到设计师的情感,从而产生共鸣。'
},
{
title:'玩具产品的情感设计研究',
summary:'摘要:首先,玩具作为一种产品,是设计者情感的外显化与实物化,设计者通过玩具的设计,将生活中的感动和梦想投射到玩具形像中,使得这样的情感和梦想得到延续。而使用者在使用玩具时,也能感受到设计师的情感,从而产生共鸣。'
}
]
docList:[],
recommend_list:[]
}
},
methods:{
read(item:any){
this.$store.commit('menus/read')
this.$store.commit('read/open',item)
this.$router.push(this.localePath('/read'))
}
},
mounted() {
for(let i=0;i<10;i++){
this.docList.push({
title:'浅谈中国山水画的传承与创新'+i,
type:'硕士论文',
author:'马俊',
profession:'网络游戏',
school:'中国美术学院',
year:2011,
summary:'摘要:传统的中国山水画建立在自然形象及其对人对自然升华的基础上。在哲学意义上,它的语言和精神性依赖于一个自然体系。而当下中国艺术的现代性转变也是一个如何超越自然体系的问题。现代性面对的社会和空间是工业社会和城市。',
tags:['山水画','空间经验','构成主义'],
content:`<div>123</div>`
})
this.recommend_list.push({
title:'玩具产品的情感设计研究',
summary:'摘要:首先,玩具作为一种产品,是设计者情感的外显化与实物化,设计者通过玩具的设计,将生活中的感动和梦想投射到玩具形像中,使得这样的情感和梦想得到延续。而使用者在使用玩具时,也能感受到设计师的情感,从而产生共鸣。'
})
}
}
})

@ -0,0 +1,151 @@
<template>
<div>
<v-contextmenu ref="contextmenu">
<v-contextmenu-item @click="addNote">{{$t('read.contextmenu.add')}}</v-contextmenu-item>
</v-contextmenu>
<el-tabs v-model="activeName" type="card" closable @tab-remove="removeTab">
<el-tab-pane :label="item.title" :name="item.title" v-for="(item,index) in openList" :key="item.title">
<div v-contextmenu:contextmenu :ref="'edit'+item.title" v-html="item.content"/>
<!-- <el-row>-->
<!-- <el-col :span="18">-->
<!-- <div v-contextmenu:contextmenu :ref="'edit'+item.title" @mouseup="selectText" v-html="item.content"/>-->
<!-- </el-col>-->
<!-- <el-col :span="5" class="ml3">-->
<!-- <el-row v-for="(item,index) in noteList" :key="index">-->
<!-- <el-card>-->
<!-- <div slot="header" class="clearfix">-->
<!-- <span>{{item.title}}</span>-->
<!-- <el-button style="float: right; padding: 3px 0" type="text">{{$t('button.del')}}</el-button>-->
<!-- </div>-->
<!-- <div class="text item">-->
<!-- {{item.content}}-->
<!-- </div>-->
<!-- </el-card>-->
<!-- </el-row>-->
<!-- </el-col>-->
<!-- </el-row>-->
</el-tab-pane>
</el-tabs>
</div>
</template>
<script lang="ts">
import Vue from 'vue'
export default Vue.extend({
name: 'read',
data(){
return {
//
activeName:'',
noteList:[]
}
},
computed:{
//
openList(){
return this.$store.state.read.read
}
},
watch:{
activeName(newVal){
this.$store.commit('read/choose',newVal)
}
},
methods: {
//
removeTab(name:string){
this.$store.commit('read/close',name)
if(this.openList.length===0){
this.$router.push(this.localePath('/document'))
this.$store.commit('menus/none')
}
this.activeName=this.$store.state.read.activeName
},
//
addNote(){
// let c=this.GLOBAL.getCursortPosition(this.$refs['edit'+this.activeName][0])
// console.info(c)
},
//
selectText(){
let selection = getSelection()
console.info(selection)
if(selection) {
let range = selection.getRangeAt(0)
console.info(range)
if (range.startContainer === range.endContainer) {
let tip = '不跨节点'
let anchorNode = range.startContainer
let bold = document.createElement('span')
bold.classList.add('bold')
if (range.endOffset - range.startOffset === anchorNode.length) {
console.info(tip + '全选')
bold.innerText = anchorNode.wholeText
anchorNode.replaceWith(bold)
} else {
console.info(tip + '选中一部分')
let start = document.createTextNode(anchorNode.substringData(0, range.startOffset))
let end = document.createTextNode(anchorNode.substringData(range.endOffset, anchorNode.length))
let span = document.createElement('span')
bold.innerText = anchorNode.substringData(range.startOffset, range.endOffset - range.startOffset)
span.append(start, bold, end)
anchorNode.replaceWith(span)
// document.createElement(anchorNode.tag)
}
} else {
let tip = '跨节点'
let startNode = range.startContainer
let endNode = range.endContainer
console.info()
}
}else{
}
// let selectData=anchorNode.substringData(range.startOffset,range.endOffset-range.startOffset)
// console.info(selectData)
//
//
// let start=document.createTextNode(anchorNode.substringData(0,range.startOffset))
// console.info(start)
//
// let end=document.createTextNode(anchorNode.substringData(range.endOffset,anchorNode.length))
// console.info(end)
// let pre=selection.anchorNode.parentElement
// // pre.innerHTML=''
// let bold=document.createElement('span')
// bold.innerText=selectData
// bold.classList.add('bold')
// // pre.append(start,bold,end)
}
},
mounted() {
this.activeName=this.$store.state.read.activeName
for(let n=0;n<10;n++){
this.noteList.push({
title:`笔记${n}`,
content:`内容${n}`
})
}
}
})
</script>
<!--<style>-->
<!-- .text {-->
<!-- font-size: 14px;-->
<!-- }-->
<!-- .item {-->
<!-- margin-bottom: 18px;-->
<!-- }-->
<!-- .clearfix::before,-->
<!-- .clearfix::after {-->
<!-- display: table;-->
<!-- content: "";-->
<!-- }-->
<!-- .clearfix::after {-->
<!-- clear: both-->
<!-- }-->
<!--</style>-->

@ -0,0 +1,5 @@
import contentmenu from 'v-contextmenu'
import 'v-contextmenu/dist/index.css'
import Vue from 'vue'
Vue.use(contentmenu)

@ -2,5 +2,29 @@ import Vue from 'vue'
Vue.prototype.GLOBAL ={
//用户cookie
user_key:'user'
user_key:'user',
//获取当前光标位置
getCursortPosition:function(element) {
var caretOffset = 0;
var doc = element.ownerDocument || element.document;
var win = doc.defaultView || doc.parentWindow;
var sel;
if (typeof win.getSelection != "undefined") {//谷歌、火狐
sel = win.getSelection();
if (sel.rangeCount > 0) {//选中的区域
var range = win.getSelection().getRangeAt(0);
var preCaretRange = range.cloneRange();//克隆一个选中区域
preCaretRange.selectNodeContents(element);//设置选中区域的节点内容为当前节点
preCaretRange.setEnd(range.endContainer, range.endOffset); //重置选中区域的结束位置
caretOffset = preCaretRange.toString().length;
}
} else if ((sel = doc.selection) && sel.type !== "Control") {//IE
var textRange = sel.createRange();
var preCaretTextRange = doc.body.createTextRange();
preCaretTextRange.moveToElementText(element);
preCaretTextRange.setEndPoint("EndToEnd", textRange);
caretOffset = preCaretTextRange.text.length;
}
return caretOffset;
}
}

@ -0,0 +1,16 @@
/**
* 菜单列表
*/
export const state=()=>({
menus:['document', 'note', 'center', 'upload']
})
export const mutations = {
//默认不包含阅读论文菜单
none(state){
state.menus=['document', 'note', 'center', 'upload']
},
//包含阅读论文菜单
read(state){
state.menus=['document', 'note', 'center', 'upload','read']
}
}

@ -0,0 +1,42 @@
/**
* 阅读论文标签数据
*/
export const state=()=>({
//已打开论文列表
read:[],
//激活的论文标签
activeName:''
})
export const mutations = {
//新建论文标签
open(state,item){
let isNew=true
for(let i in state.read) {
if (state.read[i].title === item.title) {
isNew=false
mutations.choose(state,item.title)
}
}
if(isNew) {
state.read.push(item)
mutations.choose(state, state.read[state.read.length - 1].title)
}
},
//关闭论文标签
close(state,title){
for(let i in state.read){
if(state.read[i].title===title){
state.read.splice(i,1)
if(state.read.length>0){
if(state.activeName===title) {
mutations.choose(state, state.read[state.read.length - 1].title)
}
}
}
}
},
//选择论文标签
choose(state,title){
state.activeName=title
}
}

@ -10334,6 +10334,11 @@ uuid@^3.3.2:
resolved "https://registry.npm.taobao.org/uuid/download/uuid-3.4.0.tgz?cache=0&sync_timestamp=1592944143460&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fuuid%2Fdownload%2Fuuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee"
integrity sha1-sj5DWK+oogL+ehAK8fX4g/AgB+4=
v-contextmenu@^2.9.0:
version "2.9.0"
resolved "https://registry.npm.taobao.org/v-contextmenu/download/v-contextmenu-2.9.0.tgz#1753a7afc42051f1ed5cb75c20498a16fd7ec332"
integrity sha1-F1Onr8QgUfHtXLdcIEmKFv1+wzI=
v8-compile-cache@^2.0.3, v8-compile-cache@^2.1.1:
version "2.1.1"
resolved "https://registry.npm.taobao.org/v8-compile-cache/download/v8-compile-cache-2.1.1.tgz#54bc3cdd43317bca91e35dcaf305b1a7237de745"
@ -10446,6 +10451,11 @@ vue-router@^3.3.4:
resolved "https://registry.npm.taobao.org/vue-router/download/vue-router-3.3.4.tgz?cache=0&sync_timestamp=1592476684972&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fvue-router%2Fdownload%2Fvue-router-3.3.4.tgz#4e38abc34a11c41b6c3d8244449a2e363ba6250b"
integrity sha1-Tjirw0oRxBtsPYJERJouNjumJQs=
vue-runtime-helpers@^1.1.2:
version "1.1.2"
resolved "https://registry.npm.taobao.org/vue-runtime-helpers/download/vue-runtime-helpers-1.1.2.tgz#446b7b820888ab0c5264d2c3a32468e72e4100f3"
integrity sha1-RGt7ggiIqwxSZNLDoyRo5y5BAPM=
vue-server-renderer@^2.6.11:
version "2.6.11"
resolved "https://registry.npm.taobao.org/vue-server-renderer/download/vue-server-renderer-2.6.11.tgz#be8c9abc6aacc309828a755c021a05fc474b4bc3"

Loading…
Cancel
Save