This commit is contained in:
2025-05-09 16:26:39 +08:00
parent 5261ce35b1
commit 4e8e8e796f
10 changed files with 4586 additions and 3468 deletions

View File

@@ -113,6 +113,7 @@ const en = {
edit: 'Edit', edit: 'Edit',
level: 'Level', level: 'Level',
editorinchief: 'Editor In Chief', editorinchief: 'Editor In Chief',
journal_topic: 'Research areas',
}, },

View File

@@ -105,6 +105,7 @@ const zh = {
edit: '编辑', edit: '编辑',
level: '水平', level: '水平',
editorinchief: '总编辑', editorinchief: '总编辑',
journal_topic: '研究领域',
info: '以下数据为', wos: 'Wos', info: '以下数据为', wos: 'Wos',

View File

@@ -46,6 +46,9 @@
<div class="item"> <div class="item">
<span class="title">{{ $t('JournalCitationAnalysis.level') }} :</span><span>{{ scope.row.level }}</span> <span class="title">{{ $t('JournalCitationAnalysis.level') }} :</span><span>{{ scope.row.level }}</span>
</div> </div>
<div class="item" v-if="scope.row.journal_topic">
<span class="title">{{ $t('JournalCitationAnalysis.journal_topic') }} :</span><span>{{ scope.row.journal_topic }}</span>
</div>
</div> </div>
</template> </template>
</el-table-column> </el-table-column>
@@ -192,6 +195,25 @@
<el-input-number v-model="detailForm.fee" :min="0" v-if="source == 'all'"></el-input-number> <el-input-number v-model="detailForm.fee" :min="0" v-if="source == 'all'"></el-input-number>
<span v-else>{{ detailForm.fee }}</span> <span v-else>{{ detailForm.fee }}</span>
</el-form-item> </el-form-item>
<el-form-item label="Research areas :" prop="ResearchAreas">
<el-button @click="addArea" size="mini" type="primary" plain style="position: absolute; right: 0; margin-left: 10px"
>+ Add</el-button
>
<div style="padding-top: 40px">
<div
v-for="(domain, index) in detailForm.areas"
:key="index"
style="display: flex; align-items: center; justify-content: space-between; margin-bottom: 10px"
>
<el-input v-model="detailForm.areas[index]" size="mini" clearable></el-input>
<i
class="el-icon-delete-solid"
@click.prevent="removeArea(index)"
style="margin-left: 10px; font-size: 22px; color: red"
></i>
</div>
</div>
</el-form-item>
<!-- 简介 --> <!-- 简介 -->
<el-form-item label="Introduction :" prop="scope"> <el-form-item label="Introduction :" prop="scope">
<el-input type="textarea" rows="5" v-model="detailForm.scope"></el-input> <el-input type="textarea" rows="5" v-model="detailForm.scope"></el-input>
@@ -375,6 +397,13 @@ export default {
await this.getDate(); await this.getDate();
}, },
methods: { methods: {
addArea() {
this.detailForm.areas.push('');
},
// 删除一个区域
removeArea(index) {
this.detailForm.areas.splice(index, 1);
},
beforeAvatarUpload2(file) { beforeAvatarUpload2(file) {
const isLt2M = file.size / 1024 / 1024 < 1; const isLt2M = file.size / 1024 / 1024 < 1;
if (!isLt2M) { if (!isLt2M) {
@@ -392,10 +421,12 @@ export default {
} }
}, },
handleEdit() { handleEdit() {
this.$refs.detail_form.validate((valid) => { this.$refs.detail_form.validate((valid) => {
if (valid) { if (valid) {
this.$api this.$api
.post('api/Journal/editJournal', this.detailForm) .post('api/Journal/editJournal', {...this.detailForm,journal_topic:this.detailForm.areas&&this.detailForm.areas.length>0?this.detailForm.areas.toString():''})
.then((res) => { .then((res) => {
if (res.code == 0) { if (res.code == 0) {
this.$message.success('Change Success!'); this.$message.success('Change Success!');
@@ -564,7 +595,8 @@ export default {
epassword: data.epassword, epassword: data.epassword,
kfen: data.kfen, kfen: data.kfen,
fee: data.fee, fee: data.fee,
scope: data.scope scope: data.scope,
areas: data.journal_topic?data.journal_topic.split(','):[''],
}; };
this.editDialogVisible = true; this.editDialogVisible = true;
// this.$nextTick(() => { // this.$nextTick(() => {

File diff suppressed because it is too large Load Diff

View File

@@ -149,7 +149,7 @@
</el-form-item> </el-form-item>
<el-form-item label="Topics :"> <el-form-item label="Topics :">
<p v-for="item in topListName">{{ item }}</p> <p v-for="item in topListName">{{ item }}</p>
<el-button type="warning" @click="topicVisible = true" size="mini" style="margin-top: 5px">Change topics</el-button> <!-- <el-button type="warning" @click="topicVisible = true" size="mini" style="margin-top: 5px">Change topics</el-button> -->
</el-form-item> </el-form-item>
</el-form> </el-form>
<span slot="footer" class="dialog-footer"> <span slot="footer" class="dialog-footer">
@@ -194,7 +194,7 @@
</p> </p>
</div> </div>
<!-- 删除 --> <!-- 删除 -->
<el-button <!-- <el-button
v-show="item.dropdownShow" v-show="item.dropdownShow"
class="choose_btn" class="choose_btn"
size="mini" size="mini"
@@ -202,11 +202,11 @@
plain plain
@click="deleteTree(item.article_id)" @click="deleteTree(item.article_id)"
>Delete >Delete
</el-button> </el-button> -->
</div> </div>
<p v-if="chooseData == ''" style="color: #777; padding: 5px 0 0 15px">No Articles</p> <p v-if="chooseData == ''" style="color: #777; padding: 5px 0 0 15px">No Articles</p>
</div> </div>
<p style="height: 1px; background-color: #ddd; width: 100%; margin-top: 35px"></p> <!-- <p style="height: 1px; background-color: #ddd; width: 100%; margin-top: 35px"></p>
<p class="reta_tit"> <p class="reta_tit">
All articles All articles
<el-input <el-input
@@ -240,14 +240,14 @@
<div> <div>
<p class="selected_title">{{ item.title }}</p> <p class="selected_title">{{ item.title }}</p>
</div> </div>
<!-- 添加 -->
<el-button class="selected_btn" size="mini" type="success" plain @click="addTree(item.article_id)" <el-button class="selected_btn" size="mini" type="success" plain @click="addTree(item.article_id)"
>Add</el-button >Add</el-button
> >
</div> </div>
</el-col> </el-col>
</el-row> </el-row>
</div> </div> -->
<span slot="footer" class="dialog-footer"> <span slot="footer" class="dialog-footer">
<el-button type="primary" @click="RelatVisible = false" plain>Close</el-button> <el-button type="primary" @click="RelatVisible = false" plain>Close</el-button>
</span> </span>
@@ -303,7 +303,7 @@
> >
<span style="margin-left: 15px; color: #0b4b6a" v-if="mains != ''">Typesetting completed</span> <span style="margin-left: 15px; color: #0b4b6a" v-if="mains != ''">Typesetting completed</span>
<template v-if="mains != ''"> <template v-if="mains != ''">
<el-button <!-- <el-button
v-if="html_type == 2 && tg_article_id != 0" v-if="html_type == 2 && tg_article_id != 0"
type="primary" type="primary"
plain plain
@@ -313,8 +313,8 @@
style="margin-left: 20px" style="margin-left: 20px"
> >
<font>Edit Html Proofread</font> <font>Edit Html Proofread</font>
</el-button> </el-button> -->
<el-button <!-- <el-button
v-if="html_type != 2" v-if="html_type != 2"
type="primary" type="primary"
plain plain
@@ -324,7 +324,7 @@
style="margin-left: 20px" style="margin-left: 20px"
> >
<font>Edit Html Proofread</font> <font>Edit Html Proofread</font>
</el-button> </el-button> -->
</template> </template>
<el-button <el-button
@@ -411,7 +411,7 @@
<span style="margin-left: 15px; color: #0b4b6a" v-if="refersList.length > 0" <span style="margin-left: 15px; color: #0b4b6a" v-if="refersList.length > 0"
>There are {{ refersList.length }} pieces of data in total.</span >There are {{ refersList.length }} pieces of data in total.</span
> >
<el-button <!-- <el-button
type="primary" type="primary"
plain plain
icon="el-icon-document-copy" icon="el-icon-document-copy"
@@ -420,7 +420,7 @@
style="margin-left: 20px" style="margin-left: 20px"
> >
<font>Edit References</font> <font>Edit References</font>
</el-button> </el-button> -->
</template> </template>
<div> <div>
<el-table <el-table
@@ -1446,7 +1446,7 @@ export default {
.selected_title { .selected_title {
font-size: 14px; font-size: 14px;
line-height: 22px; line-height: 22px;
margin-right: 80px; /* margin-right: 80px; */
} }
.choose_title > span { .choose_title > span {

View File

@@ -1,299 +0,0 @@
<template>
<div style="height: 98%;">
<div class="crumbs">
<el-breadcrumb separator="/">
<el-breadcrumb-item> <i class="el-icon-document-copy"></i> Artcile Html
<el-button size="mini" style="position: absolute;right: 40px;" @click="goEdit">Edit</el-button>
</el-breadcrumb-item>
</el-breadcrumb>
</div>
<div class="container" style="height: 97%; min-width: 1000px; background-color: #fafafa; padding: 10px 0 0 0">
<common-word
:readonly="true"
v-if="htmlContent"
ref="commonWord"
:value="htmlContent"
:wordStyle="wordStyle"
style="width: calc(100%); height: calc(100%); "
:style="`100%`"
></common-word>
</div>
</div>
</template>
<script>
import { mediaUrl } from '@/common/js/commonJS.js'; // 引入通用逻辑
export default {
data() {
return {
wordStyle: `
p {
position: relative;
padding: 8px 15px;
min-height: 22px;
border: 2px dashed #fff;
border-radius: 5px;
color: #606266;
}
p {
font-size: 14px;
line-height: 22px;
}
.imgBox .chNumer {
position: absolute;
top: -2px;
right: -1px;
border-radius: 3px;
font-size: 10px;
background-color: rgb(0 102 153 / 85%);
color: #fff;
padding: 0 6px;
}
.MaxPicture {
text-align: center;
}
.MaxPicture > img {
margin-bottom: 10px;
}
.font {
display: block;
margin: 0 auto;
font-size: 13px;
}
.tableTitle{
text-align:center!important;
font-weight: bold;
}
`,
detailMes: {},
baseUrl: this.Common.baseUrl,
mediaUrl: mediaUrl, //
Art_Id: this.$route.query.id,
Art_Doi: this.$route.query.doi,
Art_web_Id: this.$route.query.artID,
Art_P_Id: '',
btnDisble: true,
detailTitle: '',
htmlContent: '',
Main_List: [],
exegesis: "The following contents'<b></b>,<i></i>'are necessary for the generation phase, please do not delete them!!!"
};
},
created() {
this.getInfo();
},
activated() {
this.getInfo();
},
methods: {
goEdit(){
this.$router.push({
path: '/GenerateCharts',
query: {
id: this.Art_Id
}
});
},
async getInfo() {
const loading = this.$loading({
lock: true,
text: 'Loading...',
spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.7)'
});
// 获取文章信息
await this.$api
.post('api/Production/getProductionDetail', { p_article_id: this.Art_Id })
.then(async (res) => {
if (res.code == 0) {
this.detailTitle = res.data.production.title
this.detailMes = res.data.production;
await this.getDate(loading);
loading.close();
} else {
this.$message.error(res.msg);
loading.close();
}
})
.catch((err) => {
this.$message.error(err);
loading.close();
});
},
getWord() {
var htmlContent = `<h3 class="man_Title" contenteditable="false">${this.detailTitle} </h3>`;
htmlContent += this.Main_List.map((item) => {
//批注
let contentHtml = '';
var isRemark = ``;
// if (item.state == 2 && item.remark && item.remark != '') {
// // isRemark = `<img class="isRemark" main-id="${item.am_id}" src="${this.remarkImageUrl}" alt="" style="width:20px;height:20px;"/>`;
// isRemark = `<span class="isRemark" main-id="${item.am_id}"><img class="isRemarkIcon" main-id="${item.am_id}" src="${this.remarkImageUrl}" alt="" style="width: 20px; height: 20px" />
// <span class="isRemarkIcon" main-id="${item.am_id}" > (${item.am_id})</span>
// </span>
// `;
// }
// 判断是否是图片
if (item.type == 1) {
var extension = item.image.url.split('.').pop().toLowerCase();
if (extension == 'tif') {
contentHtml = `
<p contenteditable="false" main-state="${item.state}" class="MaxPicture pMain" data-id="${item.ami_id}" main-id="${
item.am_id
}">
<img src="" data-img-id="${item.ami_id}" style="width: ${item.width ? `${item.width}px` : '100%'}" />
<font class="font" style="width: ${item.width ? `${item.width}px` : '100%'}">${item.image.note ? item.image.note : ''}</font>
</p>
`;
} else if (['jpg', 'jpeg', 'png'].includes(extension)) {
contentHtml = `
<p contenteditable="false" main-state="${item.state}" class="MaxPicture pMain" data-id="${
item.ami_id
}" main-id="${item.am_id}">
${isRemark}
<img src="${this.mediaUrl + item.image.url}" style="width: ${
item.width ? `${item.width}px` : '100%'
}" />
<font class="font" style="width: ${item.width ? `${item.width}px` : '100%'}" >${
item.image.note ? item.image.note : ''
}</font>
</p>
`;
} else {
contentHtml = `
<p contenteditable="false" main-state="${item.state}" class="MaxPicture pMain" data-id="${
item.ami_id
}" main-id="${item.am_id}">
${isRemark}
<span
style="
text-align: center;
font-size: 30px;
display: flex;
align-items: center;
justify-content: center;
"
>
Figures ( .${item.image.url.split('.').pop().toUpperCase()})
</span>
<font class="font" style="width: ${item.width ? `${item.width}px` : '100%'}" >${
item.image.note ? item.image.note : ''
}</font>
</p>
`;
}
} else if (item.type == 2) {
var tableList = JSON.parse(item.table.table_data);
contentHtml = `
<div contenteditable="false" data-id="${item.amt_id}" main-state="${item.state}" main-id="${
item.am_id
}" class="thumbnailTableBox wordTableHtml table_Box pMain" style="width: 100%; padding: 8px 15px; box-sizing: border-box; border-radius: 4px; position: relative;">
${isRemark}
<font class="font tableTitle" style="width:100%" >${item.table.title ? item.table.title : ''}</font>
<table border="1" style="width: auto; border-collapse: collapse; text-align: center; ">
${tableList
.map((row) => {
return `
<tr>
${row
.map((cell) => {
return `
<td colspan="${cell.colspan || 1}" rowspan="${cell.rowspan || 1}">
<span>${cell.text || ''}</span>
</td>
`;
})
.join('')} <!-- join the cells in the row -->
</tr>
`;
})
.join('')} <!-- join the rows -->
</table>
<font class="font" style="width:100%" >${item.table.note ? item.table.note : ''}</font>
</div>
`;
} else {
contentHtml = `<p class="pMain" main-state="${item.state}" contenteditable="false" data-id="${item.am_id}" main-id="${item.am_id}">${isRemark}${item.content}</p>`;
}
// 判断是否是表格类型
return contentHtml;
}).join('');
this.htmlContent = htmlContent;
},
async getDate(loading) {
let urlLInk = '';
let urlTask = {};
if (this.Art_Id != undefined) {
urlLInk = 'api/Preaccept/getArticleMains';
urlTask.article_id = this.detailMes.article_id;
}
// 获取文章信息
await this.$api
.post(urlLInk, urlTask)
.then(async (res) => {
if (res.code == 0) {
this.Main_List = res.data.list;
// this.detailTitle = res.data.production.title
for (let i = 0; i < this.Main_List.length; i++) {
this.Main_List[i].text = this.Main_List[i].content;
this.Main_List[i].getnum = 0;
}
// setTimeout(async () => {
this.$nextTick(async () => {
await this.getWord();
loading.close();
});
loading.close();
} else {
this.$message.error(res.msg);
loading.close();
}
})
.catch((err) => {
this.$message.error(err);
loading.close();
});
}
}
};
</script>
<style scoped>
.man_Title {
background-color: #fff;
margin: 0 0 10px 0;
border-bottom: 1px solid #dde1eb;
box-shadow: 0 5px 5px -2px rgb(134 134 134);
padding: 12px 25px 8px 25px;
font-size: 16px;
line-height: 24px;
color: #333;
position: relative;
}
.man_Title button {
position: absolute;
top: 10px;
right: 10px;
}
</style>

View File

@@ -0,0 +1,37 @@
<template>
<div style="height: 80vh">
<iframe ref="myIframe" :src="externalUrl" frameborder="0" class="iframe-box" style="width: 100%; height: 100%"></iframe>
</div>
</template>
<script>
export default {
props: ['deMesYul', 'p_article_id'],
data() {
return {
externalUrl: `https://www.tmrjournals.com/ManuscriptProduce.html?J_num=25&a_id=${this.p_article_id}&preview=1`
};
},
components: {},
computed: {},
watch: {},
created() {
// this.loadDictionary().catch(console.error);
},
mounted() {
const iframe = this.$refs.myIframe;
// iframe.onload = () => {
// iframe.contentWindow.postMessage(
// { ...this.deMesYul },
// 'https://www.tmrjournals.com' // 必须严格写 iframe 页面的域名
// );
// };
},
activated() {},
methods: {}
};
</script>
<style scoped></style>

View File

@@ -0,0 +1,565 @@
<template>
<div>
<p class="reta_tit" style="margin-bottom: 15px; margin-top: 0; overflow: hidden">
Related Articles Selected
<el-button type="primary" plain style="float: right" @click="changeRelatVisible()">Related Articles </el-button>
</p>
<div>
<div v-for="item in chooseData" class="choose_list" @mouseover="mouseover(item)" @mouseleave="mouseout(item)">
<div>
<p class="choose_title">
<b>{{ item.journal_title }}</b>
<span></span>
{{ item.title }}
</p>
</div>
<!-- 删除 -->
<el-button v-show="item.dropdownShow" class="choose_btn" size="mini" type="danger" plain @click="deleteTree(item)"
>Delete
</el-button>
</div>
<p v-if="chooseData == ''" style="color: #777; padding: 5px 0 0 15px">No Articles</p>
</div>
<!-- 相关期刊 -->
<div v-if="RelatVisible">
<p style="height: 1px; background-color: #ddd; width: 100%; margin-top: 35px"></p>
<p class="reta_tit">
All articles
<el-input
v-model="RelatMes.keyword"
clearable
placeholder="Please enter keywords..."
style="width: 200px; margin-left: 20px"
></el-input>
<el-button type="primary" style="margin-left: 20px" @click="NoneRelated">
<i class="el-icon-search" style="margin-right: 5px"></i>Search
</el-button>
</p>
<p v-if="alljourData == ''" style="color: #777; padding: 5px 0 0 15px">No Articles</p>
<div>
<el-row :gutter="20">
<el-col :span="8">
<div class="journal_list">
<div
v-for="(item, index) in alljourData"
@click="steps_title(index)"
:class="steps_jour == index ? 'Tab_col' : ''"
>
<p>
{{ item.title }}
<span style="font-size: 12px"> ({{ item.articles.length }})</span>
</p>
</div>
</div>
</el-col>
<el-col :span="16">
<div v-for="item in selectRelate" class="selected_list">
<div>
<p class="selected_title">{{ item.title }}</p>
</div>
<!-- 添加 -->
<el-button class="selected_btn" size="mini" type="success" plain @click="addTree(item.article_id)"
>Add</el-button
>
</div>
</el-col>
</el-row>
</div>
</div>
<!-- <el-dialog title="" :visible.sync="RelatVisible" width="1000px" @close="RelatCancle" :close-on-click-modal="false"> -->
<!-- <span slot="footer" class="dialog-footer">
<el-button type="primary" @click="RelatVisible = false" plain>Close</el-button>
</span> -->
<!-- </el-dialog> -->
<!-- Html排版 -->
</div>
</template>
<script>
export default {
props: ['article_id', 'article_title', 'p_article_id'],
data() {
return {
tg_article_id: 0,
html_type: null,
htmlContent: '',
wordStyle: `
p {
position: relative;
padding: 8px 15px;
min-height: 22px;
border: 2px dashed #fff;
border-radius: 5px;
color: #606266;
}
p {
font-size: 14px;
line-height: 22px;
}
.imgBox .chNumer {
position: absolute;
top: -2px;
right: -1px;
border-radius: 3px;
font-size: 10px;
background-color: rgb(0 102 153 / 85%);
color: #fff;
padding: 0 6px;
}
.MaxPicture {
text-align: center;
}
.MaxPicture > img {
margin-bottom: 10px;
}
.font {
display: block;
margin: 0 auto;
font-size: 13px;
}
.tableTitle{
text-align:center!important;
font-weight: bold;
}
`,
articleId: null,
createType: '1', // html生成方式
collapseActiveNames: [], // 手风琴绑定值
// oldFile:false, // 是否用新文件生成
fileL_manuscirpt: [],
baseUrl: this.Common.baseUrl,
mediaUrl: this.Common.mediaUrl,
username: localStorage.getItem('U_name'),
editor_id: localStorage.getItem('U_id'),
queryType: {
issn: '',
journal_stage_id: 0,
seach: '',
pageIndex: 1,
pageSize: 10
},
Total: 0,
dataTable: [],
stageList: [],
journalList: [],
guestList: [],
EditMes: {
journal_special_id: 0,
article_id: 0,
title: 0,
sort: 0
},
RelatMes: {
keyword: ''
},
UpHtpFIle: {
title: '',
article_id: '',
p_article_id: null,
htmlfile: '',
mains: []
// refers:[], //引用参数
},
refersList: [],
UpLoadFile: {
article_id: '',
file: ''
},
HtmlMes: {},
EditVisible: false,
RelatVisible: false,
topicVisible: false,
HtmlVisible: false,
topListName: [],
listopic: [],
title_header: '',
alljourData: [],
selectRelate: [],
chooseData: [],
loading: false,
steps_jour: 0,
loadHtml: false, // mains 加载动画
form: {
manuscirpt: ''
},
fileData: '', // 上传后返回的文件url
mains: [], // html 数据,
newMains: []
};
},
mounted() {
this.ChoseRelated();
},
computed: {},
methods: {
changeRelatVisible() {
this.RelatVisible = !this.RelatVisible;
this.RelatCancle()
},
// 获取列表
uperr_coverLetter(err) {
this.$message.error('Upload error');
},
//初始化期刊分期
// 话题列表
// 关闭相关文章
RelatCancle() {
this.RelatMes.keyword = '';
this.alljourData = [];
this.selectRelate = [];
},
openRelated() {
this.RelatVisible = true;
},
// 弹出相关文章
ChoseRelated(row) {
this.RelatMes.title = this.article_title;
this.RelatMes.p_article_id = this.p_article_id;
this.SelectedRelated();
},
// 获取已经选择的相关期刊
SelectedRelated() {
this.$api
.post('api/Production/getProductRelatedList', this.RelatMes)
.then((res) => {
if (res.code == 0) {
this.chooseData = res.data.list;
} else {
this.$message.error(res.msg);
}
})
.catch((err) => {
this.$message.error(err);
});
},
// 获取全部的相关期刊
NoneRelated() {
this.steps_jour = 0;
if (this.RelatMes.keyword == '') {
this.$message.error('Keyword cannot be empty!');
return;
}
const loading = this.$loading({
lock: true,
text: 'Loading...',
spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.7)'
});
this.$api
.post('api/Publish/getKeywordArticleOrderJournal', this.RelatMes)
.then((res) => {
if (res.code == 0) {
this.alljourData = res.data.journals;
if (this.alljourData.length > 0) {
this.selectRelate = this.alljourData[this.steps_jour].articles;
} else {
this.selectRelate = [];
}
loading.close();
} else {
this.$message.error(res.msg);
loading.close();
}
})
.catch((err) => {
this.$message.error(err);
loading.close();
});
},
// 切换期刊-相关期刊
steps_title(e) {
this.steps_jour = e;
this.selectRelate = this.alljourData[e].articles;
},
// 鼠标状态-相关期刊
mouseover(item) {
// 移入
this.$set(item, 'dropdownShow', true);
},
mouseout(item) {
// 移除
this.$set(item, 'dropdownShow', false);
},
// 删除-相关期刊
deleteTree(e) {
// 二次确认删除
this.$confirm('Are you sure you want to delete ' + e.title + '?', 'Tips', {
type: 'warning',
confirmButtonText: 'OK',
cancelButtonText: 'Cancel'
})
.then(() => {
this.$api
.post('api/Production/delProductRelated', {
p_article_id: this.RelatMes.p_article_id,
article_id: e.article_id
})
.then((res) => {
if (res.code == 0) {
this.$message.success('Deletion succeeded!');
this.SelectedRelated();
} else {
this.$message.error(res.msg);
}
})
.catch((err) => {
this.$message.error(err);
});
})
.catch(() => {});
},
// 添加-相关期刊
addTree(e) {
this.$api
.post('api/Production/addProductRelated', {
p_article_id: this.RelatMes.p_article_id,
article_id: e
})
.then((res) => {
if (res.code == 0) {
this.$message.success('Successfully added related journal!');
// this.RelatVisible=false
this.SelectedRelated();
} else {
this.$message.error(res.msg);
}
})
.catch((err) => {
this.$message.error(err);
});
}
},
watch: {}
};
</script>
<style scoped>
.doiLink {
color: #409eff;
}
.up_newstyle {
margin-left: 10px;
}
.up .up_newstyle {
margin-left: 0;
margin-bottom: 15px;
}
/deep/ .el-upload--text {
background-color: #ecf5ff;
border: 1px solid #b3d8ff !important;
padding: 0 7px;
/* margin-left: 10px; */
}
.up_newstyle .el-upload__text em {
color: #409eff !important;
font-size: 12px;
}
.handle-box {
margin-bottom: 18px;
}
.table {
width: 100%;
font-size: 14px;
}
.journal_list {
border-right: 2px solid #e4e7ed;
margin: 0 8px 0 0;
padding: 10px 0;
}
.journal_list > div.Tab_col {
color: #006699;
font-weight: bold;
border-right: 2px solid #006699;
margin-right: -2px;
letter-spacing: -0.5px;
}
.journal_list > div > p {
margin-bottom: 10px;
padding: 8px 0;
cursor: pointer;
font-size: 15px;
line-height: 20px;
}
.reta_tit {
margin: 30px 0 30px 0;
font-weight: bold;
letter-spacing: -0.5px;
font-size: 15px;
}
.reta_riqi {
font-weight: bold;
font-size: 17px;
margin: 18px 0 20px 15px;
}
.choose_list {
padding: 14px 15px;
margin-bottom: 10px;
border-bottom: 1px solid #ebf5ff;
background-color: #f8fbff;
-webkit-box-shadow: 2px 30px 15px -20px #ebf5ff inset;
box-shadow: inset 2px 30px 15px -20px #ebf5ff;
position: relative;
}
.selected_list {
padding: 15px 15px;
border-radius: 10px;
position: relative;
}
.selected_list:nth-child(2n + 1) {
background-color: #f8fbff;
/* -webkit-box-shadow: 2px 30px 15px -20px #ebf5ff inset;
box-shadow: inset 2px 30px 15px -20px #ebf5ff; */
}
.selected_list:hover {
background-color: #ebf5ff;
}
.choose_title,
.selected_title {
font-size: 14px;
line-height: 22px;
margin-right: 80px;
}
.choose_title > span {
margin: 0 10px;
}
.choose_time {
font-size: 15px;
color: #888;
margin: 0 0 10px 0;
}
.choose_btn,
.selected_btn {
position: absolute;
right: 10px;
top: 10px;
}
.titHtml {
border: 2px dotted #ccc;
background-color: #f7f7f7;
border-radius: 2px;
padding: 0px 20px 20px 20px;
margin: 15px 0 0 0;
}
.titHtml > div {
letter-spacing: 0.03em;
margin: 15px 0 0 0;
}
.titHtml > div > p {
font-size: 14px;
line-height: 1.4;
min-height: 19px;
color: #444;
word-break: break-word;
font-family: 'Helvetica Neue', Helvetica, Georgia, sans-serif;
}
.titHtml .MaxPicture {
text-align: center;
}
.titHtml .MaxPicture > img {
margin-bottom: 10px;
}
.titHtml .MaxPicture > font {
display: block;
margin: 0 auto;
font-size: 13px;
}
/deep/.htmlfile .upload-demo {
overflow: auto;
}
/deep/.htmlfile .upload-demo .el-upload {
width: 55px;
float: left;
margin-left: 5px;
border: none;
text-align: left;
height: 35px;
}
/deep/.htmlfile .upload-demo .el-upload {
margin-left: 0 !important;
width: 150px !important;
height: auto !important;
text-align: center !important;
}
/deep/.htmlfile .upload-demo .el-upload__tip {
margin-left: 15px;
float: left;
}
/deep/.htmlfile .upload-demo .el-upload-list {
margin-top: -4px;
margin-left: 20px;
float: left;
width: 500px;
/* display: none; */
}
/* /deep/ .import.is-disabled{background: #ecf5ff !important; color: #8cc5ff !important; border-color: #d9ecff !important;} */
/* /deep/.htmlfile .upload-demo .el-upload-list .el-upload-list__item {
width: 30px !important;
} */
/deep/.htmlfile .upload-demo .el-upload-list .el-upload-list__item:hover {
cursor: pointer;
}
/* /deep/.htmlfile .upload-demo .el-upload-list .el-upload-list__item .el-upload-list__item-name {
width: 30px;
} */
/* /deep/.htmlfile .upload-demo .el-upload-list .el-upload-list__item .el-upload-list__item-status-label {
display: none;
} */
/* /deep/.htmlfile .upload-demo .el-upload-list__item:hover .el-icon-close {
display: none;
} */
/deep/ .table99 th {
background: #e4e7ed !important;
color: #777 !important;
}
</style>

View File

@@ -0,0 +1,657 @@
<template>
<div style="height: calc(100% - 40px); overflow-y: auto">
<!-- <div style="display: flex; align-items: center; justify-content: space-between;padding:0 40px;margin-bottom: 20px;">
<div style="color: #409EFF;">Select Topics:</div>
<div style="width: calc(100% - 120px)">
<p v-for="(item,i) in topListName"><span>{{ i+1 }}</span>{{ item }}</p>
</div>
</div> -->
<el-form ref="editMes" :model="EditMes" label-width="40px">
<el-form-item label="">
<el-checkbox-group
v-model="EditMes.topic"
value-key="journal_topic_id"
style="display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap"
>
<el-checkbox
v-for="item in listopic"
style="display: block; width: 48%; margin-right: 0"
name="topic"
:label="item.journal_topic_id + ''"
:key="item.journal_topic_id"
@change="chan_topic($event, item)"
>{{ item.tname }}</el-checkbox
>
</el-checkbox-group>
</el-form-item>
</el-form>
<!-- 相关期刊 -->
<el-dialog title="" :visible.sync="RelatVisible" width="1000px" @close="RelatCancle" :close-on-click-modal="false">
<p style="font-weight: bold; font-size: 16px; margin-bottom: 30px" v-html="RelatMes.title"></p>
<p class="reta_tit" style="margin-bottom: 15px; margin-top: 0">Related articles selected</p>
<div>
<div v-for="item in chooseData" class="choose_list" @mouseover="mouseover(item)" @mouseleave="mouseout(item)">
<div>
<p class="choose_title">
<b>{{ item.journal_title }}</b>
<span></span>
{{ item.title }}
</p>
</div>
<!-- 删除 -->
<el-button
v-show="item.dropdownShow"
class="choose_btn"
size="mini"
type="danger"
plain
@click="deleteTree(item.article_id)"
>Delete
</el-button>
</div>
<p v-if="chooseData == ''" style="color: #777; padding: 5px 0 0 15px">No Articles</p>
</div>
<p style="height: 1px; background-color: #ddd; width: 100%; margin-top: 35px"></p>
<p class="reta_tit">
All articles
<el-input
v-model="RelatMes.keyword"
placeholder="Please enter keywords..."
style="width: 200px; margin-left: 20px"
></el-input>
<el-button type="primary" style="margin-left: 20px" @click="NoneRelated">
<i class="el-icon-search" style="margin-right: 5px"></i>Search
</el-button>
</p>
<p v-if="alljourData == ''" style="color: #777; padding: 5px 0 0 15px">No Articles</p>
<div>
<el-row :gutter="20">
<el-col :span="8">
<div class="journal_list">
<div
v-for="(item, index) in alljourData"
@click="steps_title(index)"
:class="steps_jour == index ? 'Tab_col' : ''"
>
<p>
{{ item.title }}
<span style="font-size: 12px"> ({{ item.articles.length }})</span>
</p>
</div>
</div>
</el-col>
<el-col :span="16">
<div v-for="item in selectRelate" class="selected_list">
<div>
<p class="selected_title">{{ item.title }}</p>
</div>
<!-- 添加 -->
<el-button class="selected_btn" size="mini" type="success" plain @click="addTree(item.article_id)"
>Add</el-button
>
</div>
</el-col>
</el-row>
</div>
<span slot="footer" class="dialog-footer">
<el-button type="primary" @click="RelatVisible = false" plain>Close</el-button>
</span>
</el-dialog>
<!-- Html排版 -->
</div>
</template>
<script>
export default {
props: ['article_id','p_article_id'],
data() {
return {
tg_article_id: 0,
html_type: null,
htmlContent: '',
wordStyle: `
p {
position: relative;
padding: 8px 15px;
min-height: 22px;
border: 2px dashed #fff;
border-radius: 5px;
color: #606266;
}
p {
font-size: 14px;
line-height: 22px;
}
.imgBox .chNumer {
position: absolute;
top: -2px;
right: -1px;
border-radius: 3px;
font-size: 10px;
background-color: rgb(0 102 153 / 85%);
color: #fff;
padding: 0 6px;
}
.MaxPicture {
text-align: center;
}
.MaxPicture > img {
margin-bottom: 10px;
}
.font {
display: block;
margin: 0 auto;
font-size: 13px;
}
.tableTitle{
text-align:center!important;
font-weight: bold;
}
`,
articleId: null,
createType: '1', // html生成方式
collapseActiveNames: [], // 手风琴绑定值
// oldFile:false, // 是否用新文件生成
fileL_manuscirpt: [],
baseUrl: this.Common.baseUrl,
mediaUrl: this.Common.mediaUrl,
username: localStorage.getItem('U_name'),
editor_id: localStorage.getItem('U_id'),
queryType: {
issn: '',
journal_stage_id: 0,
seach: '',
pageIndex: 1,
pageSize: 10
},
Total: 0,
dataTable: [],
stageList: [],
journalList: [],
guestList: [],
EditMes: {
journal_special_id: 0,
article_id: 0,
title: 0,
sort: 0
},
RelatMes: {
keyword: ''
},
UpHtpFIle: {
title: '',
article_id: '',
p_article_id: null,
htmlfile: '',
mains: []
// refers:[], //引用参数
},
refersList: [],
UpLoadFile: {
article_id: '',
file: ''
},
HtmlMes: {},
EditVisible: false,
RelatVisible: false,
topicVisible: false,
HtmlVisible: false,
topListName: [],
listopic: [],
title_header: '',
alljourData: [],
selectRelate: [],
chooseData: [],
loading: false,
steps_jour: 0,
loadHtml: false, // mains 加载动画
form: {
manuscirpt: ''
},
fileData: '', // 上传后返回的文件url
mains: [], // html 数据,
newMains: []
};
},
mounted() {
this.topListData();
},
computed: {},
methods: {
// 获取列表
uperr_coverLetter(err) {
this.$message.error('Upload error');
},
//初始化期刊分期
// 话题列表
topListData() {
this.topListName = [];
this.$api
.post('api/Production/getTopicsByIssn', {
p_article_id: this.p_article_id
})
.then((res) => {
if (res.code == 0) {
for (var r = 0; r < res.data.now.length; r++) {
for (var v = 0; v < res.data.list.length; v++) {
if (res.data.now[r] == res.data.list[v].journal_topic_id) {
res.data.list[v].article_to_topic_id = res.data.now[r].article_to_topic_id;
this.topListName.push(res.data.list[v].tname);
}
}
}
this.listopic = res.data.list;
let wzht_list = [];
for (var i = 0; i < res.data.now.length; i++) {
wzht_list.push(res.data.now[i] + '');
}
this.EditMes.topic = wzht_list;
} else {
this.$message.error(res.msg);
}
})
.catch((err) => {
this.$message.error(err);
});
},
// 选择话题
chan_topic($event, val) {
if ($event == true) {
this.$api
.post('api/Production/addProductTopic', {
p_article_id: this.p_article_id,
journal_topic_id: val.journal_topic_id
})
.then((res) => {
if (res.code == 0) {
this.topListData(this.p_article_id);
// this.$message.success('Successfully added topic!');
} else {
this.$message.error(res.msg);
}
})
.catch((err) => {
this.$message.error(err);
});
} else {
this.$api
.post('api/Production/delProductTopic', {
p_article_id: this.p_article_id,
journal_topic_id: val.journal_topic_id
})
.then((res) => {
if (res.code == 0) {
this.topListData(this.p_article_id);
// this.$message.success('Topic deleted successfully!');
} else {
this.$message.error(res.msg);
}
})
.catch((err) => {
this.$message.error(err);
});
}
},
// 关闭相关文章
RelatCancle() {
this.RelatMes.keyword = '';
this.alljourData = [];
this.selectRelate = [];
},
// 弹出相关文章
ChoseRelated(row) {
this.RelatMes.title = row.title;
this.RelatMes.article_id = row.article_id;
this.SelectedRelated();
setTimeout(() => {
this.RelatVisible = true;
}, 300);
},
// 获取已经选择的相关期刊
SelectedRelated() {
this.$api
.post('api/Publish/getArticleRelates', this.RelatMes)
.then((res) => {
if (res.code == 0) {
this.chooseData = res.data.articles;
} else {
this.$message.error(res.msg);
}
})
.catch((err) => {
this.$message.error(err);
});
},
// 获取全部的相关期刊
NoneRelated() {
this.steps_jour = 0;
if (this.RelatMes.keyword == '') {
this.$message.error('Keyword cannot be empty!');
return;
}
const loading = this.$loading({
lock: true,
text: 'Loading...',
spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.7)'
});
this.$api
.post('api/Publish/getKeywordArticleOrderJournal', this.RelatMes)
.then((res) => {
if (res.code == 0) {
this.alljourData = res.data.journals;
if (this.alljourData.length > 0) {
this.selectRelate = this.alljourData[this.steps_jour].articles;
} else {
this.selectRelate = [];
}
loading.close();
} else {
this.$message.error(res.msg);
loading.close();
}
})
.catch((err) => {
this.$message.error(err);
loading.close();
});
},
// 切换期刊-相关期刊
steps_title(e) {
this.steps_jour = e;
this.selectRelate = this.alljourData[e].articles;
},
// 鼠标状态-相关期刊
mouseover(item) {
// 移入
this.$set(item, 'dropdownShow', true);
},
mouseout(item) {
// 移除
this.$set(item, 'dropdownShow', false);
},
// 删除-相关期刊
deleteTree(e) {
// 二次确认删除
this.$confirm('Are you sure you want to delete ' + e.title + '?', 'Tips', {
type: 'warning',
confirmButtonText: 'OK',
cancelButtonText: 'Cancel'
})
.then(() => {
this.$api
.post('api/Publish/delArticleRelate', {
article_id: this.RelatMes.article_id,
del_article_id: e
})
.then((res) => {
if (res.code == 0) {
this.$message.success('Deletion succeeded!');
this.SelectedRelated();
} else {
this.$message.error(res.msg);
}
})
.catch((err) => {
this.$message.error(err);
});
})
.catch(() => {});
},
// 添加-相关期刊
addTree(e) {
this.$api
.post('api/Publish/addArticleRelate', {
article_id: this.RelatMes.article_id,
add_article_id: e
})
.then((res) => {
if (res.code == 0) {
this.$message.success('Successfully added related journal!');
this.SelectedRelated();
} else {
this.$message.error(res.msg);
}
})
.catch((err) => {
this.$message.error(err);
});
}
},
watch: {}
};
</script>
<style scoped>
.doiLink {
color: #409eff;
}
.up_newstyle {
margin-left: 10px;
}
.up .up_newstyle {
margin-left: 0;
margin-bottom: 15px;
}
/deep/ .el-upload--text {
background-color: #ecf5ff;
border: 1px solid #b3d8ff !important;
padding: 0 7px;
/* margin-left: 10px; */
}
.up_newstyle .el-upload__text em {
color: #409eff !important;
font-size: 12px;
}
.handle-box {
margin-bottom: 18px;
}
.table {
width: 100%;
font-size: 14px;
}
.journal_list {
border-right: 2px solid #e4e7ed;
margin: 0 8px 0 0;
padding: 10px 0;
}
.journal_list > div.Tab_col {
color: #006699;
font-weight: bold;
border-right: 2px solid #006699;
margin-right: -2px;
letter-spacing: -0.5px;
}
.journal_list > div > p {
margin-bottom: 10px;
padding: 8px 0;
cursor: pointer;
font-size: 15px;
line-height: 20px;
}
.reta_tit {
margin: 30px 0 30px 0;
font-weight: bold;
letter-spacing: -0.5px;
font-size: 15px;
}
.reta_riqi {
font-weight: bold;
font-size: 17px;
margin: 18px 0 20px 15px;
}
.choose_list {
padding: 14px 15px;
margin-bottom: 10px;
border-bottom: 1px solid #ebf5ff;
background-color: #f8fbff;
-webkit-box-shadow: 2px 30px 15px -20px #ebf5ff inset;
box-shadow: inset 2px 30px 15px -20px #ebf5ff;
position: relative;
}
.selected_list {
padding: 15px 15px;
border-radius: 10px;
position: relative;
}
.selected_list:nth-child(2n + 1) {
background-color: #f8fbff;
/* -webkit-box-shadow: 2px 30px 15px -20px #ebf5ff inset;
box-shadow: inset 2px 30px 15px -20px #ebf5ff; */
}
.selected_list:hover {
background-color: #ebf5ff;
}
.choose_title,
.selected_title {
font-size: 14px;
line-height: 22px;
margin-right: 80px;
}
.choose_title > span {
margin: 0 10px;
}
.choose_time {
font-size: 15px;
color: #888;
margin: 0 0 10px 0;
}
.choose_btn,
.selected_btn {
position: absolute;
right: 10px;
top: 10px;
}
.titHtml {
border: 2px dotted #ccc;
background-color: #f7f7f7;
border-radius: 2px;
padding: 0px 20px 20px 20px;
margin: 15px 0 0 0;
}
.titHtml > div {
letter-spacing: 0.03em;
margin: 15px 0 0 0;
}
.titHtml > div > p {
font-size: 14px;
line-height: 1.4;
min-height: 19px;
color: #444;
word-break: break-word;
font-family: 'Helvetica Neue', Helvetica, Georgia, sans-serif;
}
.titHtml .MaxPicture {
text-align: center;
}
.titHtml .MaxPicture > img {
margin-bottom: 10px;
}
.titHtml .MaxPicture > font {
display: block;
margin: 0 auto;
font-size: 13px;
}
/deep/.htmlfile .upload-demo {
overflow: auto;
}
/deep/.htmlfile .upload-demo .el-upload {
width: 55px;
float: left;
margin-left: 5px;
border: none;
text-align: left;
height: 35px;
}
/deep/.htmlfile .upload-demo .el-upload {
margin-left: 0 !important;
width: 150px !important;
height: auto !important;
text-align: center !important;
}
/deep/.htmlfile .upload-demo .el-upload__tip {
margin-left: 15px;
float: left;
}
/deep/.htmlfile .upload-demo .el-upload-list {
margin-top: -4px;
margin-left: 20px;
float: left;
width: 500px;
/* display: none; */
}
/* /deep/ .import.is-disabled{background: #ecf5ff !important; color: #8cc5ff !important; border-color: #d9ecff !important;} */
/* /deep/.htmlfile .upload-demo .el-upload-list .el-upload-list__item {
width: 30px !important;
} */
/deep/.htmlfile .upload-demo .el-upload-list .el-upload-list__item:hover {
cursor: pointer;
}
/* /deep/.htmlfile .upload-demo .el-upload-list .el-upload-list__item .el-upload-list__item-name {
width: 30px;
} */
/* /deep/.htmlfile .upload-demo .el-upload-list .el-upload-list__item .el-upload-list__item-status-label {
display: none;
} */
/* /deep/.htmlfile .upload-demo .el-upload-list__item:hover .el-icon-close {
display: none;
} */
/deep/ .table99 th {
background: #e4e7ed !important;
color: #777 !important;
}
</style>

View File

@@ -5,6 +5,7 @@
ref="scrollDiv" ref="scrollDiv"
> >
<div <div
class=""
style=" style="
box-shadow: 0 2px 2px -2px rgba(34, 47, 62, 0.1), 0 8px 8px -4px rgba(34, 47, 62, 0.07); box-shadow: 0 2px 2px -2px rgba(34, 47, 62, 0.1), 0 8px 8px -4px rgba(34, 47, 62, 0.07);
margin: 0px 0; margin: 0px 0;
@@ -105,7 +106,7 @@
</div> </div>
</div> </div>
<div <div
class="" class="word-container-box"
:style="isPreview ? 'width: 100%;padding: 20px;' : 'width: calc(100% - 300px);padding: 60px 20px 20px 34px;'" :style="isPreview ? 'width: 100%;padding: 20px;' : 'width: calc(100% - 300px);padding: 60px 20px 20px 34px;'"
style=" style="
box-sizing: border-box; box-sizing: border-box;
@@ -136,7 +137,7 @@
<span>{{ item.am_id }}</span> <span>{{ item.am_id }}</span>
</span> </span>
<div <div
:class="!isPreview ? (item.is_h1 ? 'isTitleH1' : item.is_h2 ? 'isTitleH2' : item.is_h3 ? 'isTitleH3' : '') : ''" :class="!isPreview ? (item.is_h1 ? 'isTitleH1' : item.is_h2 ? 'isTitleH2' : item.is_h3 ? 'isTitleH3' : '') : item.is_h1 ? 'Ptitle' :''"
style="line-height: 24px" style="line-height: 24px"
> >
<template v-if="!isPreview"> <template v-if="!isPreview">