|
@@ -1,60 +1,83 @@
|
|
|
<!-- -->
|
|
|
<template>
|
|
|
<div id="notes-model">
|
|
|
- <div class="NNPE-ArticleView" v-if="articleInfo">
|
|
|
- <template v-if="resArr[0]&&resArr[0].wordsList">
|
|
|
- <h2>
|
|
|
- <span v-for="(itemR,indexR) in resArr[0].wordsList" :key="indexR" :style="{color:colorObj.titleColor,fontSize:(wordFontsize+30)+'px',lineHeight:(wordFontsize+38)+'px',marginRight:'10px',fontWeight:'700',cursor:'pointer'}">
|
|
|
- <span
|
|
|
- class="NNPE-chs"
|
|
|
- >{{ itemR.text }}</span
|
|
|
- >
|
|
|
- <!-- {{itemR.tokens[2]}} -->
|
|
|
- </span>
|
|
|
- </h2>
|
|
|
- </template>
|
|
|
- <h6 class="nnpe-article-author" :style="{color:colorObj.sourceColor,fontSize:(wordFontsize-4)+'px',lineHeight:(wordFontsize+4)+'px',fontWeight:'400'}">
|
|
|
- {{articleInfo.art_author+' · '+articleInfo.study_phase_name+'版 · 第 '+articleInfo.iss_no+' 期 · '+articleInfo.release_date+' · '+articleInfo.chn_item+(articleInfo.page_no_in_pub?' · P'+articleInfo.page_no_in_pub:'')}}
|
|
|
- </h6>
|
|
|
- <div class="audio-box">
|
|
|
- <div
|
|
|
- class="aduioLine-content aduioLine-box"
|
|
|
- v-if="
|
|
|
- articleInfo.art_sound_url
|
|
|
- " :style="{background:colorObj.audiobg,borderColor:colorObj.audioBorder}"
|
|
|
- >
|
|
|
- <AudioLine
|
|
|
- audioId="artNormalAudio"
|
|
|
- :mp3="articleInfo.art_sound_url"
|
|
|
- :getCurTime="getCurTime"
|
|
|
- ref="audioLine"
|
|
|
- :mp3Source="'mp3'"
|
|
|
- />
|
|
|
- <svg-icon icon-class="icon-wrapper" class="wrapper"></svg-icon>
|
|
|
+ <div class="NNPE-ArticleView" v-if="articleInfo">
|
|
|
+ <template v-if="resArr[0]&&resArr[0].wordsList">
|
|
|
+ <h2>
|
|
|
+ <span v-for="(itemR,indexR) in resArr[0].wordsList" :key="indexR" :style="{color:colorObj.titleColor,fontSize:(wordFontsize+30)+'px',lineHeight:(wordFontsize+38)+'px',marginRight:'10px',fontWeight:'700',cursor:'pointer'}">
|
|
|
+ <span
|
|
|
+ class="NNPE-chs"
|
|
|
+ >{{ itemR.text }}</span
|
|
|
+ >
|
|
|
+ <!-- {{itemR.tokens[2]}} -->
|
|
|
+ </span>
|
|
|
+ </h2>
|
|
|
+ </template>
|
|
|
+ <h6 class="nnpe-article-author" :style="{color:colorObj.sourceColor,fontSize:(wordFontsize-4)+'px',lineHeight:(wordFontsize+4)+'px',fontWeight:'400'}">
|
|
|
+ {{articleInfo.art_author+' · '+articleInfo.study_phase_name+'版 · 第 '+articleInfo.iss_no+' 期 · '+articleInfo.release_date+' · '+articleInfo.chn_item+(articleInfo.page_no_in_pub?' · P'+articleInfo.page_no_in_pub:'')}}
|
|
|
+ </h6>
|
|
|
+ <div class="audio-box">
|
|
|
+ <div
|
|
|
+ class="aduioLine-content aduioLine-box"
|
|
|
+ v-if="
|
|
|
+ articleInfo.art_sound_url
|
|
|
+ " :style="{background:colorObj.audiobg,borderColor:colorObj.audioBorder}"
|
|
|
+ >
|
|
|
+ <AudioLine
|
|
|
+ audioId="artNormalAudio"
|
|
|
+ :mp3="articleInfo.art_sound_url"
|
|
|
+ :getCurTime="getCurTime"
|
|
|
+ ref="audioLine"
|
|
|
+ :mp3Source="'mp3'"
|
|
|
+ />
|
|
|
+ <svg-icon icon-class="icon-wrapper" class="wrapper"></svg-icon>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <template v-if="resArr.length > 0">
|
|
|
+ <div class="table-box">
|
|
|
+ <div
|
|
|
+ :class="['NNPE-detail']"
|
|
|
+ v-for="(item, index) in resArr"
|
|
|
+ :key="'detail' + index"
|
|
|
+ >
|
|
|
+ <template v-if="index!==0">
|
|
|
+ <span v-for="(pItem, pIndex) in item.wordsList" :key="'wordsList' + pIndex" class="word-box" :style="{fontSize:wordFontsize + 'px',color: colorObj.contentColor}" @mousedown="mouseupClick(pItem)">
|
|
|
+ {{ pItem.text }}
|
|
|
+ </span>
|
|
|
+ </template>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
+ </template>
|
|
|
</div>
|
|
|
- <template v-if="resArr.length > 0">
|
|
|
- <div class="table-box">
|
|
|
- <div
|
|
|
- :class="['NNPE-detail']"
|
|
|
- v-for="(item, index) in resArr"
|
|
|
- :key="'detail' + index"
|
|
|
- >
|
|
|
- <template v-if="index!==0">
|
|
|
- <span v-for="(pItem, pIndex) in item.wordsList" :key="'wordsList' + pIndex" class="word-box" :style="{fontSize:wordFontsize + 'px',color: colorObj.contentColor}" @mousedown="mouseupClick(pItem)">
|
|
|
- {{ pItem.text }}
|
|
|
- </span>
|
|
|
- </template>
|
|
|
+ <el-dialog
|
|
|
+ :visible.sync="notesFlag"
|
|
|
+ :show-close="true"
|
|
|
+ :title="'笔记'"
|
|
|
+ :close-on-click-modal="false"
|
|
|
+ width="367px"
|
|
|
+ class="notes-dialog"
|
|
|
+ v-if="notesFlag">
|
|
|
+ <p>{{notesObj.title}}</p>
|
|
|
+ <el-input
|
|
|
+ type="textarea"
|
|
|
+ :rows="4"
|
|
|
+ maxlength="200"
|
|
|
+ show-word-limit
|
|
|
+ placeholder="请输入"
|
|
|
+ v-model="notesObj.notes">
|
|
|
+ </el-input>
|
|
|
+ <div class="btn-box">
|
|
|
+ <el-button type="danger" plain size="small" @click="deleteNotes">删除</el-button>
|
|
|
+ <el-button type="primary" @click="handleSave" size="small" :loading="loading">保存</el-button>
|
|
|
</div>
|
|
|
- </div>
|
|
|
- </template>
|
|
|
- </div>
|
|
|
+ </el-dialog>
|
|
|
</div>
|
|
|
</template>
|
|
|
|
|
|
<script>
|
|
|
import AudioLine from "@/components/common/AudioLine.vue"
|
|
|
import Highlighter from 'web-highlighter';
|
|
|
+import { getLogin } from "@/api/ajax";
|
|
|
export default {
|
|
|
name: "ArticleView",
|
|
|
props: [ "titleFontsize", "wordFontsize", "colorObj","articleType","articleInfo"],
|
|
@@ -108,7 +131,16 @@ export default {
|
|
|
tokensArr: [],
|
|
|
sentenceList: [],
|
|
|
notesId: '',
|
|
|
- highlighter: null
|
|
|
+ highlighter: null,
|
|
|
+ notesFlag: false, // 笔记弹窗
|
|
|
+ notesObj: {
|
|
|
+ title: '',
|
|
|
+ id: '',
|
|
|
+ notes: '',
|
|
|
+ pos: ''
|
|
|
+ },
|
|
|
+ activeSentObj: null, // 点击的句子
|
|
|
+ loading: false
|
|
|
};
|
|
|
},
|
|
|
computed: {
|
|
@@ -172,19 +204,68 @@ export default {
|
|
|
.on('selection:create', ({sources}) => {
|
|
|
// sources = sources.map(hs => ({hs}));
|
|
|
console.log(sources)
|
|
|
- this.notesId = sources[0].id
|
|
|
+ if(sources&&sources[0]){
|
|
|
+ _this.notesObj.title = sources[0].text
|
|
|
+ _this.notesObj.pos = JSON.stringify({
|
|
|
+ sent_id: _this.activeSentObj.id,
|
|
|
+ s: sources[0].startMeta.textOffset,
|
|
|
+ e: sources[0].endMeta.textOffset,
|
|
|
+ })
|
|
|
+ _this.notesId = sources[0].id
|
|
|
+ _this.notesFlag = true
|
|
|
+ }
|
|
|
+
|
|
|
// 存储
|
|
|
// store.save(sources);
|
|
|
+ document.getElementsByClassName('highlight-mengshou-wrap').forEach((itemH,indexH)=>{
|
|
|
+ if(indexH===0){
|
|
|
+ itemH.addEventListener("mousedown", function () {
|
|
|
+ _this.notesFlag = true
|
|
|
+ console.log(itemH.getAttribute('data-highlight-id'))
|
|
|
+ });
|
|
|
+ }
|
|
|
+ })
|
|
|
});
|
|
|
_this.highlighter.run()
|
|
|
}, 1000);
|
|
|
},
|
|
|
mouseupClick(obj){
|
|
|
- setTimeout(() => {
|
|
|
- console.log(obj)
|
|
|
- console.log(this.notesId)
|
|
|
- }, 300);
|
|
|
+ this.activeSentObj = obj
|
|
|
+ },
|
|
|
+ // 保存
|
|
|
+ handleSave(){
|
|
|
+ this.loading = true
|
|
|
+ let MethodName = '/PaperServer/Client/Article/ArtNoteAdd'
|
|
|
+ let data = {
|
|
|
+ iss_id: this.$route.query.iss_id,
|
|
|
+ art_id: this.$route.query.id,
|
|
|
+ pos: this.notesObj.pos,
|
|
|
+ select_text: this.notesObj.title,
|
|
|
+ note: this.notesObj.notes.trim()
|
|
|
+ }
|
|
|
+ if(this.notesObj.id){
|
|
|
+ MethodName = '/PaperServer/Client/Article/ArtNoteEdit'
|
|
|
+ data.id = this.notesObj.id
|
|
|
+ }
|
|
|
+ getLogin(MethodName, data)
|
|
|
+ .then((res) => {
|
|
|
+ this.loading = false
|
|
|
+ this.notesFlag = false
|
|
|
+ this.$message.success('保存成功')
|
|
|
+ }).catch(()=>{
|
|
|
+ this.loading = false
|
|
|
+ })
|
|
|
},
|
|
|
+ // 删除
|
|
|
+ deleteNotes(){
|
|
|
+ this.$confirm("确定删除吗?", "提示", {
|
|
|
+ confirmButtonText: "确定",
|
|
|
+ cancelButtonText: "取消",
|
|
|
+ type: "warning",
|
|
|
+ }).then(() => {
|
|
|
+
|
|
|
+ });
|
|
|
+ }
|
|
|
},
|
|
|
//生命周期 - 创建完成(可以访问当前this实例)
|
|
|
created() {},
|
|
@@ -215,31 +296,6 @@ export default {
|
|
|
h2{
|
|
|
display: flex;
|
|
|
flex-flow: wrap;
|
|
|
- &.sentActive {
|
|
|
- background: rgba(24, 144, 255, 0.1);
|
|
|
- }
|
|
|
- &.overActive {
|
|
|
- background: rgba(0, 0, 0, 0.06);
|
|
|
- }
|
|
|
- .wordActive {
|
|
|
- color: #175DFF !important;
|
|
|
- }
|
|
|
- .hasExplain{
|
|
|
- min-width: 3px;
|
|
|
- position: relative;
|
|
|
- }
|
|
|
- .explain-sub{
|
|
|
- position: absolute;
|
|
|
- bottom: -25px;
|
|
|
- right: -10px;
|
|
|
- z-index: 1;
|
|
|
- font-size: 0;
|
|
|
- cursor: pointer;
|
|
|
- img{
|
|
|
- width: 14px;
|
|
|
- height: 12px;
|
|
|
- }
|
|
|
- }
|
|
|
}
|
|
|
.table-box {
|
|
|
// background: #f7f7f7;
|
|
@@ -257,21 +313,6 @@ export default {
|
|
|
flex-flow: wrap;
|
|
|
.word-box{
|
|
|
position: relative;
|
|
|
- &.hasExplain{
|
|
|
- min-width: 3px;
|
|
|
- }
|
|
|
- .explain-sub{
|
|
|
- position: absolute;
|
|
|
- bottom: -5px;
|
|
|
- right: -10px;
|
|
|
- z-index: 1;
|
|
|
- font-size: 0;
|
|
|
- cursor: pointer;
|
|
|
- img{
|
|
|
- width: 14px;
|
|
|
- height: 12px;
|
|
|
- }
|
|
|
- }
|
|
|
}
|
|
|
}
|
|
|
> img {
|
|
@@ -341,4 +382,40 @@ export default {
|
|
|
text-decoration: underline dotted;
|
|
|
text-decoration-color: #175DFF;
|
|
|
}
|
|
|
+.notes-dialog{
|
|
|
+ .el-dialog__header{
|
|
|
+ padding: 13px 16px 0 16px;
|
|
|
+ }
|
|
|
+ .el-dialog__title{
|
|
|
+ color: #000;
|
|
|
+ font-size: 16px;
|
|
|
+ font-weight: 500;
|
|
|
+ line-height: 24px;
|
|
|
+ }
|
|
|
+ .el-dialog__body{
|
|
|
+ padding: 0 16px 13px 16px;
|
|
|
+ p{
|
|
|
+ color: #2F3742;
|
|
|
+ font-family: "Smartisan";
|
|
|
+ font-size: 18px;
|
|
|
+ font-weight: 400;
|
|
|
+ line-height: 26px;
|
|
|
+ margin: 6px 0;
|
|
|
+ word-break: break-word;
|
|
|
+ }
|
|
|
+ .el-textarea{
|
|
|
+ border-radius: 2px;
|
|
|
+ .el-textarea__inner{
|
|
|
+ border: 1px solid #E5E6EB;
|
|
|
+ background: #F2F3F5;
|
|
|
+ padding: 8px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ .btn-box{
|
|
|
+ text-align: right;
|
|
|
+ padding-top: 6px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
</style>
|