From ef0e8e83e0c3448f15653d9967822229009a79ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A7=8B=E4=BA=8E=E5=88=9D=E8=A7=81?= <752204717@qq.com> Date: Mon, 17 Nov 2025 17:00:14 +0800 Subject: [PATCH] tijiao --- src/assets/css/theme-green/index.css | 7 +- src/assets/img/error.png | Bin 0 -> 2258 bytes src/common/js/commonJS.js | 112 +- src/common/js/debounce.js | 2 +- src/components/common/Home.vue | 2 +- src/components/common/Sidebar.vue | 4 +- src/components/common/cv.vue | 114 +- src/components/common/langs/en.js | 12 +- src/components/common/langs/zh.js | 5 + src/components/page/Complete_profile.vue | 4 +- src/components/page/Dashboard_.vue | 111 +- src/components/page/GenerateCharts.vue | 152 +- src/components/page/OnlineProofreading.vue | 2279 +++++++++ src/components/page/articleAdd.vue | 282 +- src/components/page/articleDetailEditor.vue | 1173 +++-- src/components/page/articleDetailEmail.vue | 21 +- src/components/page/articleEditorialBoard.vue | 59 +- .../page/articleListEditor_A copy.vue | 4299 +++++++++++++++++ src/components/page/articleListEditor_A.vue | 2559 ++++------ src/components/page/articleListEditor_B1.vue | 219 +- src/components/page/articleReviewer.vue | 11 +- src/components/page/articleReviewerDetail.vue | 310 +- .../page/components/EditorArticle/detail.vue | 8 +- .../page/components/Tinymce/index.vue | 2 +- .../components/article/journal-selector.vue | 5 +- .../page/components/major/index.vue | 13 +- .../pendingPayment/OrderConfirmation.vue | 1 - .../components/pendingPayment/success.vue | 80 +- src/components/page/components/table/word.vue | 344 +- src/components/page/edit_per_ewer.vue | 148 +- src/components/page/edit_per_history.vue | 6 +- src/components/page/edit_per_text_yq.vue | 4 +- src/components/page/orderListAuthor.vue | 2 +- src/components/page/per_history.vue | 636 ++- src/components/page/time_talk.vue | 9 +- src/components/page/youthApplyList.vue | 903 ++-- src/components/page/youthList.vue | 2 +- src/main.js | 48 +- src/router/index.js | 14 +- vue.config.js | 1 + 40 files changed, 10582 insertions(+), 3381 deletions(-) create mode 100644 src/assets/img/error.png create mode 100644 src/components/page/OnlineProofreading.vue create mode 100644 src/components/page/articleListEditor_A copy.vue diff --git a/src/assets/css/theme-green/index.css b/src/assets/css/theme-green/index.css index 7e83967..395d7e8 100644 --- a/src/assets/css/theme-green/index.css +++ b/src/assets/css/theme-green/index.css @@ -1886,6 +1886,10 @@ margin: 0 -17px } +.state-select .el-scrollbar .el-select-dropdown__wrap { + max-height: 400px !important; +} + .el-dropdown-menu--small { padding: 6px 0 } @@ -2558,6 +2562,7 @@ max-height: 274px } + .el-select-dropdown__list { list-style: none; padding: 6px 0; @@ -15836,4 +15841,4 @@ .el-drawer-fade-leave-active { animation: el-drawer-fade-in 225ms cubic-bezier(0, 0, .2, 1) 0s reverse -} +} \ No newline at end of file diff --git a/src/assets/img/error.png b/src/assets/img/error.png new file mode 100644 index 0000000000000000000000000000000000000000..2b64f136f06854784cb221ce669acfda962bf1de GIT binary patch literal 2258 zcma)8cU05K7XAg0CRK`3mi%52MIeQM)DY@|xO9;sh#>_CC5aFvB4}vR1GtZ>AXvav zmgWjP(GZtr0fL|l0Rau7fUtz3h9Yj*=h=VXn{#LG+&ka-zH{%HGiS2AJY3{uHDv(+ zkas=ew zh>51eSut#2fAd<2_B&}L4E!5HkFtT;?+Ahc?p~lHHI@V(Mwr0~#-?b{+!A4IhO$JP z8i8n(u{jcDjx;ubql~RkW>zMa;P(N;%7U0!VwjbWlk;~mQDg&)pwnqqNMw9`JR;r% zL5&SZ8e3XgB2j208VwgA;Bn_D^iT$z5~sUE@m~%nQXCbV4OH#vm}iC7xTaAOAEP*V+`QdCr-y<$fo<9g`yXUUDnI_lsfao$oqaJGRY)Im z!{g=7eInrTTnDRP=>Eq?rYD11DFcdP)f5|#i6!d~e#b||LFttLWw6^37o<4Z(A3lm z8E=YV`{o)6ILb|3U~>JHTui!ScI zAIyr=cWZh^AL+Dn-_K9fXw_QHWQ#wGAH9=@%RMDI*m&qS!D&yiwaru5llpY^H&DH% zvI@xu_U}_Ui$2>)6P~t)%s`EIJ&^|pQRnZ&;p5$jk&2MByBb=qKD#6s27;TXew{r# z@=Lh}u^wP4uo%+R`#&7d1#=*4E?ulANgMB;lW!V03sxNpynD%{)lxr5M;h|rth3;w z>7YkAIc)VQjIHDCs1!wHE8sG7`6U7U#B6&LhblSno-iSWC>E$72A9beB>0(>;gwjs z#g0Q#oRtic*CeI!pFb8(Ncd=hvwSHCS-$GB5bX~+wBz-Nhm-#;33gTI<$13E(5YUo z^A%32X~b`EJDe&tDH!VD=Z&Jba=s7=-N84`ij}_Lt90?x51`HHC;Q_b+vqX_r?N(vd?{-^SLwl5ehyq;s<rk*lafZqU#30S zNa#WYb4Dt4!cL>>8TDOK`;CFS1Em&cWY2$DnnJ@>Wvi<@psVd?c_Cb4l;QP}27fnO z?fmnsLh<_U9kAgAD#h%ojzY$Z(W!jirAv1{3Wxr<^m)8h!=*>wlP{jFf&01`G~D8) zpZ1=OO^k^)tvEP5$zlbyx{crC)s+Yg1Oe-q97X*wX3ZRVYjx!oxxI#LL0{6TQP8Q2 z*c^J1JllVz=DE7;F4c@nrCm<}7yd;yy?br`#*!p1X=4O~WpR-qr7cmwiKWTzcZIrI z!{`_KR+QJMlQmxYxW%`QFSoXyqJ3LYD$oKBfUzieireCusOG$%jO>V$nu=fQiFQnV z3ptgQh^Va-GKnQAfkUQ;)BA>NBjy&wK+!z}W?!ks8~~GjbTWOT=mI0|3qNFwujQ z{msw+?trzqO&-la4>Sm(sX-g5%%Ql1dXyzn?dWu$+>lxQ3^z##f|^0Jz0k&Rz>{B; z@@ZURj-maczW&Z?_hr|c`Ov*eg?bKMQg!lg4t-31hWm=Px6*N`tL^7LF-A>CAw z8Su7D$q_P}Aeh~X0+~PLRb296@A>`@1JGG(Pk+{iHK+S++cs>!)T$~Mw3r{r5zY~M z2hS~*lQ*|osl_8-2z!yRqz%*j!G*?U28O#Wm+akBLen&AXeSP5N#OnKOIsR@kh*Ae z3e6z>)2B1T>-Y~`0>4i~=U-zf@#u7pz~;;l@dAbwfF_Tzn;+(CPAFQ(b#@jXn8m~^ zsDyLTdCIpb7nHvSYKoaoTr<3>Y+KlxBYrb9l|v zYxB&2?|p+t>Ec(X?PB6v$>T$OSR~Y@Ihc*O*6UDolp}jDNxi}?q+>5ntboNd6KKZbE<)eYR@#kgT%_=wz#twSz2O#)& zg#m5KVM_`_{(w0@X9J%}FKdv6q1oECj)4ENZd2)s^X0|KswkN^e5;ENT{9O}(-fv^Y>Y)w9 z64dm`-W%BvAX>JwQyQBy@T;soiMc1C>0zn;b+-?GJR;AYyR}by&03;z)R item.value === value); + if(list&&list.length>0){ + const type = list.find(item => item.value === value); return type ? type.name : 'OTHERS'; + }else{ + return '' + } + }, @@ -1197,9 +1202,8 @@ export default { // 遍历行 table.forEach((row) => { tableHtml += ``; - - // 遍历单元格 - row.forEach((cell) => { +if(row&&row.length>0){ + row.forEach((cell) => { tableHtml += ` `; }); +}else{ + tableHtml+=`` +} + // 遍历单元格 + tableHtml += ``; }); @@ -2100,70 +2109,41 @@ export default { - ed.ui.registry.addButton('myuppercase', { - text: 'A', // 按钮文本 + + // 全部大写按钮(按钮文本:A) +ed.ui.registry.addButton('myuppercase', { + text: 'A', // 按钮文本(大写标识) + onAction: function () { + // 获取选中的文本(保留 HTML 格式,确保空格等内容不丢失) + var selectedText = ed.selection.getContent({ format: 'html' }); - onAction: function () { - // 在选中的文本周围包裹 标签 - var selectedText = ed.selection.getContent({ format: 'html' }); + // 校验:非空且仅含字母、数字、空格(可根据需求调整正则) + // if (selectedText.trim() && /^[\s\w]+$/.test(selectedText)) { + // 直接将选中的所有内容转为大写(无需正则,整体转换) + var allUppercaseText = selectedText.toUpperCase(); + // 替换选中的文本 + ed.selection.setContent(allUppercaseText); + // } else { + // vueInstance.$message.error(vueInstance.$t('commonTable.selectWord')); + // } + } +}); - // 确保选中的文本是单个单词,包括空格 - if (selectedText.trim() && /^[\s\w]+$/.test(selectedText)) { - // 使用正则将选中的文本中的第一个字母大写 - var capitalizedText = selectedText.replace(/(^|\s)([a-zA-Z])/g, function (match, p1, p2) { - return p1 + p2.toUpperCase(); - }); +// 全部小写按钮(按钮文本:a) +ed.ui.registry.addButton('myuppercasea', { + text: 'a', // 按钮文本(小写标识) + onAction: function () { + var selectedText = ed.selection.getContent({ format: 'html' }); - // 替换选中的文本,保持空格和其他内容 - ed.selection.setContent(capitalizedText); - } else { - vueInstance.$message.error(vueInstance.$t('commonTable.selectWord')); - - } - } - }); - ed.ui.registry.addButton('myuppercase', { - text: 'A', // 按钮文本 - - onAction: function () { - // 在选中的文本周围包裹 标签 - var selectedText = ed.selection.getContent({ format: 'html' }); - - // 确保选中的文本是单个单词,包括空格 - if (selectedText.trim() && /^[\s\w]+$/.test(selectedText)) { - // 使用正则将选中的文本中的第一个字母大写 - var capitalizedText = selectedText.replace(/(^|\s)([a-zA-Z])/g, function (match, p1, p2) { - return p1 + p2.toUpperCase(); - }); - - // 替换选中的文本,保持空格和其他内容 - ed.selection.setContent(capitalizedText); - } else { - vueInstance.$message.error(vueInstance.$t('commonTable.selectWord')); - - } - } - }); - ed.ui.registry.addButton('myuppercasea', { - text: 'a', // 按钮文本(小写字母) - onAction: function () { - // 获取选中的文本,保留 HTML 格式 - var selectedText = ed.selection.getContent({ format: 'html' }); - - // 确保选中的文本是单个有效的单词,包括空格 - if (selectedText.trim() && /^[\s\w]+$/.test(selectedText)) { - // 使用正则将选中的文本中的第一个字母转换为小写 - var lowercasedText = selectedText.replace(/(^|\s)([a-zA-Z])/g, function (match, p1, p2) { - return p1 + p2.toLowerCase(); - }); - - // 替换选中的文本,保持空格和其他内容 - ed.selection.setContent(lowercasedText); - } else { - vueInstance.$message.error(vueInstance.$t('commonTable.selectWord')); - } - } - }); + // if (selectedText.trim() && /^[\s\w]+$/.test(selectedText)) { + // 直接将选中的所有内容转为小写(整体转换) + var allLowercaseText = selectedText.toLowerCase(); + ed.selection.setContent(allLowercaseText); + // } else { + // vueInstance.$message.error(vueInstance.$t('commonTable.selectWord')); + // } + } +}); ed.ui.registry.addButton('Line', { text: '–', // 按钮文本 onAction: function () { diff --git a/src/common/js/debounce.js b/src/common/js/debounce.js index a3737ee..74e4488 100644 --- a/src/common/js/debounce.js +++ b/src/common/js/debounce.js @@ -26,7 +26,7 @@ function debounce(func, wait = 500, immediate = false) { } } function throttle(fn, delay = 1000, immediate = false) { - console.log("进入节流对象") + let timer let status = false // 是否为重复点击状态 return function () { diff --git a/src/components/common/Home.vue b/src/components/common/Home.vue index d30189e..10369a1 100644 --- a/src/components/common/Home.vue +++ b/src/components/common/Home.vue @@ -67,7 +67,7 @@ export default { vTags }, created() { - console.log('route at line 38:', this.$route) + bus.$on('collapse-content', (msg) => { this.collapse = msg; localStorage.setItem('collapse', this.collapse); diff --git a/src/components/common/Sidebar.vue b/src/components/common/Sidebar.vue index 652fbee..be62e5c 100644 --- a/src/components/common/Sidebar.vue +++ b/src/components/common/Sidebar.vue @@ -71,9 +71,9 @@ - + {{ $t('sidebar.edit_ewer1') }} diff --git a/src/components/common/cv.vue b/src/components/common/cv.vue index 403ef21..d891ce2 100644 --- a/src/components/common/cv.vue +++ b/src/components/common/cv.vue @@ -1,50 +1,56 @@ @@ -53,6 +59,12 @@ import Schart from 'vue-schart'; import bus from '../common/bus'; export default { name: 'dashboard', + props:{ + isEdit: { + type: Boolean, + default:true + }, + }, data() { return { user_id: '', @@ -71,11 +83,12 @@ export default { }, computed: {}, methods: { - init() { + init(list) { this.user_id = localStorage.getItem('U_id'); this.cvitaForm.user_id = this.user_id; - console.log('this.user_id at line 75:', this.user_id) - this.getCVitaData(); + console.log('this.user_id at line 75:', this.user_id); + this.cvitaTable1=[...list] + // this.getCVitaData(); }, // 获取简历列表 getCVitaData() { @@ -205,4 +218,11 @@ export default { font-weight: bold; margin-left: 10px; } +.commonCvList .el-upload__tip { + position: absolute; + top: -14px; + left: 70px; + color: #333; + font-size: 12px; +} diff --git a/src/components/common/langs/en.js b/src/components/common/langs/en.js index 0f5522b..cdf5f17 100644 --- a/src/components/common/langs/en.js +++ b/src/components/common/langs/en.js @@ -224,7 +224,7 @@ const en = { rev_ewer: 'Reviewer', rev_ewer1: 'Peer Review', rev_ewer2: 'Review History', - + man_ing: 'Editor-in-Chief', man_ing1: 'Journal information', man_ing2: 'Article List', @@ -365,7 +365,7 @@ const en = { reply: 'Reply', execute: 'Execute', revoke: 'Revoke', - + solve: 'Solve', cancelsolve: 'Cancel resolved', Resolved: 'Resolved', @@ -385,16 +385,20 @@ const en = { exportImg: 'Export PNG', PaperRotation: 'Paper Rotation', removeAnnotations: 'Are you sure you want to delete this Annotation?', - removeProofread -: 'Are you sure to delete this suggestion?', + removeProofread: 'Are you sure to delete this suggestion?', removeContent: 'Are you sure you want to delete this content?', reContent: 'Are you sure you want to restore this content?', uploadImageInfo: 'Figures can only upload files in JPG, JPEG, and PNG formats!', selectComment: 'Please select the text to add annotations to!', selectWord: 'Please select only a single word!', + selectOne: 'Please select only a single paragraph!', alreadyCommented: 'There are already annotations in the text, please select again!', Multicolumn: 'Multicolumn', singleRow: "single-row", + Row: "Row", + Uncheck: 'Uncheck the paragraph', + ManuscirptAIProofreading: 'Manuscript AI Proofreading', + BatchAddcontent: 'Batch Add content', }, pendingPayment: { title: 'Title', diff --git a/src/components/common/langs/zh.js b/src/components/common/langs/zh.js index f46893e..f154813 100644 --- a/src/components/common/langs/zh.js +++ b/src/components/common/langs/zh.js @@ -382,9 +382,14 @@ const zh = { uploadImageInfo: 'Figures 只能上传 JPG、JPEG 和 PNG 格式的文件', selectComment: '请选择要添加批注的文本', selectWord:'请只选中单个单词!', + selectOne:'请只勾选单个段落!', alreadyCommented:'文本中已有批注内容请重新选择', Multicolumn:'多列', singleRow:"单列", + Row:"空行", + Uncheck:'取消勾选段落', + ManuscirptAIProofreading:'稿件AI校对', + BatchAddcontent: '批量添加内容', }, pendingPayment: { title: 'Title', diff --git a/src/components/page/Complete_profile.vue b/src/components/page/Complete_profile.vue index fd31b4a..5311539 100644 --- a/src/components/page/Complete_profile.vue +++ b/src/components/page/Complete_profile.vue @@ -231,7 +231,7 @@ export default { article_id: this.$route.query.id }) .then((res) => { - console.log('res at line 191:', res); + if (res.code == 0) { this.tableData = [{ ...res.data }]; } @@ -243,7 +243,7 @@ export default { article_id: this.$route.query.id }) .then((res) => { - console.log('res at line 191:', res); + if (res.code == 0) { this.articleInfo = res.data.article_detail; this.journalInfo = res.data.journal_detail; diff --git a/src/components/page/Dashboard_.vue b/src/components/page/Dashboard_.vue index 1c26c07..40a729d 100644 --- a/src/components/page/Dashboard_.vue +++ b/src/components/page/Dashboard_.vue @@ -866,17 +866,10 @@ - - - + - @@ -987,7 +956,7 @@ - + @@ -1000,9 +969,9 @@ - + + + Cancel @@ -1355,7 +1324,7 @@ export default { }, computed: {}, methods: { - getCVitaData(data){ + updateCVitaData(data){ this.applyCvitaTable = data; }, handleDeleteMajor(v) { @@ -1525,12 +1494,13 @@ this.applyCvitaTable = data; // 获取简历列表 getCVitaData() { this.$api - .post('api/Ucenter/getUserInfo', { + .post('api/User/getUser', { user_id: this.user_id }) .then((res) => { - if (res.code == 0) { - this.cvitaTable = res.data.cvs; + if (res.status == 1) { + this.cvitaTable = res.data.cv || []; + this.applyCvitaTable = res.data.cv || []; } else { this.$message.error(res.msg); } @@ -1542,6 +1512,7 @@ this.applyCvitaTable = data; // 简历弹出层 openCVita() { + this.cvitaTable=[...this.applyCvitaTable] this.cvitaVisible = true; this.cvitaForm.cv = ''; }, @@ -2112,42 +2083,42 @@ this.applyCvitaTable = data; // 青年科学家弹出框 youthPoint() { - // this.youthForm.journal_id = ''; - - // this.youthVisible = true; - // this.$nextTick(()=>{ - // this.$refs.commoncv.init(); - // }) + this.youthForm.journal_id = ''; + this.youthVisible = true; + this.$nextTick(()=>{ + this.$refs.commoncv.init(this.applyCvitaTable); + }) // 判断 - this.$api - .post('api/Ucenter/checkApply', { - user_id: this.user_id, - type: 2 - }) - .then((res) => { - if (res.code == 0) { - this.youthForm.journal_id = ''; + // this.$api + // .post('api/Ucenter/checkApply', { + // user_id: this.user_id, + // type: 2 + // }) + // .then((res) => { + // if (res.code == 0) { + // this.youthForm.journal_id = ''; - this.youthVisible = true; - // this.$nextTick(()=>{ - // this.$refs.commoncv.init(); - // }) - - } else { - // 提示完善信息 - this.tipVisible = true; - this.tipTable.message = res.msg; - } - }) - .catch((err) => { - console.log(err); - }); + // this.youthVisible = true; + + // } else { + // // 提示完善信息 + // this.tipVisible = true; + // this.tipTable.message = res.msg; + // } + // }) + // .catch((err) => { + // console.log(err); + // }); }, // 点击提交青年科学家信息 onSubmit_youth(youthForm) { this.$refs.youth_Form.validate((valid) => { if (valid) { + if(this.applyCvitaTable.length == 0){ + this.$message.error('Please upload your resume!'); + return false; + } this.$api .post('api/Ucenter/applyYboard', this.youthForm) .then((res) => { @@ -2171,8 +2142,8 @@ this.applyCvitaTable = data; this.$message.error(err); }); } else { - this.$message.error('Please select a journal!'); - return false; + // this.$message.error('Please select a journal!'); + // return false; } }); }, diff --git a/src/components/page/GenerateCharts.vue b/src/components/page/GenerateCharts.vue index 7d3ab4e..cface2c 100644 --- a/src/components/page/GenerateCharts.vue +++ b/src/components/page/GenerateCharts.vue @@ -697,15 +697,7 @@ export default { async saveContent(content, am_id) { var that = this; var str = content.replace(/^

\s*(.*?)\s*<\/p>$/, '$1').trim(); - // var str = content.replace(/^

(.*?)<\/p>$/, '$1') ? content.replace(/^

(.*?)<\/p>$/, '$1') : ''; - console.log('str at line 580:', JSON.stringify(str)); - - // if (str == '') { - // this.$message({ - // type: 'warning', - // message: 'Please enter the content!' - // }); - // } + str = await that.$commonJS.decodeHtml(str); await that.$api @@ -938,7 +930,6 @@ export default { }) .then(async () => { var that = this; - await that.$api .post('/api/Preaccept/delMoreArticleMains', { ids: dataId @@ -1201,14 +1192,21 @@ export default { }, async onAddRow(mainId) { + await this.$api .post(this.urlList.addRow, { am_id: mainId, article_id: this.articleId }) .then(async (res) => { - this.getDate(); + if(res.code == 0){ + this.getDate(); + this.getCommentList(); + }else{ + this.$message.error(res.msg); + } + }) .catch((err) => { this.$message.error(err.msg); @@ -1477,120 +1475,13 @@ export default { }); }, getWord() { - // var htmlContent = `

${this.detailTitle}

`; - // htmlContent += this.Main_List.map((item) => { - // //批注 - // let contentHtml = ''; - // var isRemark = ``; - // if (item.remark && item.remark != '') { - // // isRemark = ``; - // isRemark = ` - - // (${item.am_id}) - // ${item.state == 0 ? `Resolved` : ''} - // - - // `; - // } - // // 判断是否是图片 - // if (item.type == 1) { - // var extension = item.image.url.split('.').pop().toLowerCase(); - // if (extension == 'tif') { - // contentHtml = ` - //

- // - // ${item.image.note ? item.image.note : ''} - //

- // `; - // } else if (['jpg', 'jpeg', 'png'].includes(extension)) { - // contentHtml = ` - //

- // ${isRemark} - // - // ${ - // item.image.note ? item.image.note : '' - // } - //

- // `; - // } else { - // contentHtml = ` - //

- // ${isRemark} - // - // Figures ( .${item.image.url.split('.').pop().toUpperCase()}) - // - - // ${ - // item.image.note ? item.image.note : '' - // } - //

- // `; - // } - // } else if (item.type == 2) { - // var tableList = JSON.parse(item.table.table_data); - - // contentHtml = ` - //
- // ${isRemark} - // ${item.table.title ? item.table.title : ''} - // - // ${tableList - // .map((row) => { - // return ` - // - // ${row - // .map((cell) => { - // return ` - // - // `; - // }) - // .join('')} - // - // `; - // }) - // .join('')} - //
- // ${cell.text || ''} - //
- // ${item.table.note ? item.table.note : ''} - //
- // `; - // } else { - // contentHtml = `

${isRemark}${item.content}

`; - // } - - // // 判断是否是表格类型 - - // return contentHtml; - // }).join(''); - // this.htmlContent = htmlContent; + this.htmlContent = 'true'; + }, // 获取数据 async getDate() { - // await this.$api.post('api/Proofread/proofRead', { - // article_id: this.$route.query.id - // }); + this.imagesList = []; let urlLInk = ''; let urlTask = {}; @@ -1598,7 +1489,6 @@ export default { urlLInk = 'api/Preaccept/getArticleMainsNew'; urlTask.article_id = this.Art_Id; } - const loading = this.$loading({ lock: true, text: 'Loading...', @@ -1611,26 +1501,22 @@ export default { .post(urlLInk, urlTask) .then(async (res) => { if (res.code == 0) { - // res.data.list.forEach((data) => { - // if (data.amt_id) { - // try { - // const parsedData = JSON.parse(data.table.table_data); - // } catch (e) { - // console.error(e.message); - // } - // } - // }); - - this.Main_List = res.data.list; + this.Main_List = res.data.list.map(e=>{ + e.checked = false; + return e; + }); this.getManuscirptContent(); 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; + // this.Main_List[i].checked = false; } // setTimeout(async () => { this.$nextTick(async () => { await this.getWord(); + + loading.close(); }); // }, 1000); diff --git a/src/components/page/OnlineProofreading.vue b/src/components/page/OnlineProofreading.vue new file mode 100644 index 0000000..cface2c --- /dev/null +++ b/src/components/page/OnlineProofreading.vue @@ -0,0 +1,2279 @@ + + + + + diff --git a/src/components/page/articleAdd.vue b/src/components/page/articleAdd.vue index faa8040..7d41d7f 100644 --- a/src/components/page/articleAdd.vue +++ b/src/components/page/articleAdd.vue @@ -99,7 +99,7 @@
- + @@ -166,21 +166,33 @@ --> - - +
+ Select All + +
+ {{item.keyword}} + + +
+
+
+ + + Add + + Delete +
- +
@@ -1023,6 +1035,7 @@ export default { ProgressBar }, data() { + // 自定义校验:禁止QQ邮箱 const validateNotQQEmail = (rule, value, callback) => { // 通用邮箱格式正则(基础校验,匹配大多数标准邮箱格式) @@ -1056,8 +1069,12 @@ export default { } }; return { - isNewArticle:true, + checkAll: false, + isIndeterminate: false, + stepStatusCurrent: '', + isNewArticle: true, oldMajorValueList: [], + checkedCities: [], newOptionLabel: '', showAddOption: false, nextId: 0, // 用于生成新选项的ID @@ -1513,9 +1530,7 @@ export default { immediate: true }, form: { - async handler(newVal, oldVal) { - - }, + async handler(newVal, oldVal) {}, deep: true, immediate: true } @@ -1532,7 +1547,7 @@ export default { // 分支处理 if (this.stagingID !== undefined) { this.form.article_id = this.stagingID; - + await this.getMajorData(); await this.initStepStatus((step1Incomplete) => { this.show_step = step1Incomplete.current.step; @@ -1540,7 +1555,7 @@ export default { }); await this.Temporary(); } else { - this.isNewArticle=true; + this.isNewArticle = true; await this.initMajor(); } @@ -1583,6 +1598,19 @@ export default { } }, methods: { + handleCheckAllChange(val) { + this.checkedCities = val + ? this.keywordsList.map((_, index) => index + 1) // 遍历数组,取 index+1 作为选中值 + : []; + this.isIndeterminate = false; + }, + handleCheckedCitiesChange(){ + +console.log('this.checkedCities at line 1594:', this.checkedCities) + }, + handleDelete(index){ +this.keywordsList.splice(index, 1); + }, closeAuthorDialog() { this.getAuthorList(); this.authorVisible = false; @@ -1708,7 +1736,7 @@ export default { .then((res) => { if (res.status == 1) { this.stagingID = res.data.article_id; - this.form.article_id = res.data.article_id; + this.form.article_id = res.data.article_id; this.initStepStatus(); this.$message.success('Saving succeeded!'); } else { @@ -1745,29 +1773,27 @@ export default { { step: 4, status: 0, name: 'four', msg: 'four_msg' } ] }; - await this.$api + await this.$api .post('api/Article/getArticleState', { article_id: this.form.article_id, user_id: this.form.user_id }) - .then(async(res) => { + .then(async (res) => { if (res.status == 1) { - step1Incomplete.list= step1Incomplete.list.map((item) => ({ + step1Incomplete.list = step1Incomplete.list.map((item) => ({ ...item, status: res.data[item.name], msg: res.data[item.msg] })); - this.stepStatus = step1Incomplete.list + this.stepStatus = step1Incomplete.list; if (res.data.current_step) { step1Incomplete.current = step1Incomplete.list.find((item) => item.name == res.data.current_step); + this.stepStatusCurrent = step1Incomplete.current; } if (fn) { - console.log('step1Incomplete at line 1766:', step1Incomplete) - fn(step1Incomplete); - - - + console.log('step1Incomplete at line 1766:', step1Incomplete); + fn(step1Incomplete); } console.log('this.stepStatus at line 1571:', this.stepStatus); } @@ -1928,7 +1954,25 @@ export default { ke: '' }); }, + deletefund() { + if (!this.checkedCities.length) { + this.$message.error('please select the key word to delete'); + return; + } + // 2. 将选中的序号(index+1)转成原始索引(index),并存入集合(提高查询效率) + const selectedIndexes = new Set( + this.checkedCities.map(seq => seq - 1) // 序号 - 1 = 原始索引 + ); + + // 3. 过滤 keywordsList:保留索引不在选中集合中的项 + this.keywordsList = this.keywordsList.filter((_, index) => + !selectedIndexes.has(index) + ); +this.checkAll = false; + // 4. 清空选中状态和半选状态(删除后无选中项) + this.checkedCities = []; + this.isIndeterminate = false; }, //初始化期刊选项 initSelect() { this.items = this.$store.state.journalList; @@ -2716,9 +2760,9 @@ export default { } else { this.$message.error(res.msg); this.form.manuscirpt = ''; - this.fileL_manuscirpt = []; - this.isShowCommonWord = false; - this.initStepStatus() + this.fileL_manuscirpt = []; + this.isShowCommonWord = false; + this.initStepStatus(); loading.close(); } }) @@ -2832,7 +2876,7 @@ export default { .then((res) => { if (res.code == 0) { this.$message.success('Deletion succeeded!'); - this.initStepStatus() + this.initStepStatus(); } else { this.$message.error(res.msg); } @@ -2985,36 +3029,10 @@ export default { this.move_step = e; } else if (this.move_step < e) { this.$refs.articleform.validate((valid) => { - console.log('valid at line 2963:', valid); if (valid) { - // deepEqual(this.form, this.oldForm); if (this.move_step == 1) { - //暂时注销 start - // var flist = this.keywordsList; - // var fstr = ''; - // for (var fu in flist) { - // if (flist[fu].ke != '') { - // fstr += flist[fu].ke.trim() + ','; - // } - // } - // this.form.keyWords = fstr == '' ? '' : fstr.substring(0, fstr.length - 1); - // this.$api.post('api/Article/addArticlePart1', this.form).then((res) => { - // if (res.code == 0) { - // this.stagingID = res.data.article_id; - // this.form.article_id = res.data.article_id; - - // this.$message.success('Saving succeeded!'); - //暂时注销 End - this.move_step = 2; //进行步骤 - this.show_step = 2; //显示内容 - - //暂时注销 start - // } else { - // // this.$message.error(res.msg); - // } - - // }); - //暂时注销 End + this.move_step = 2; + this.show_step = 2; } else if (this.move_step == 2) { this.onStaging(2); this.show_step = 3; @@ -3025,7 +3043,6 @@ export default { } } else { this.$message.error('Please fill in the current content first!'); - // return false; } }); } else { @@ -3041,42 +3058,39 @@ export default { } }, isArrayEqual(arr1, arr2) { + if ((arr1 === null || arr1 === undefined) && (arr2 === null || arr2 === undefined)) return true; + if (arr1 === null || arr1 === undefined || arr2 === null || arr2 === undefined) return false; - if ((arr1 === null || arr1 === undefined) && (arr2 === null || arr2 === undefined)) return true; - if (arr1 === null || arr1 === undefined || arr2 === null || arr2 === undefined) return false; - - if (!Array.isArray(arr1) || !Array.isArray(arr2)) return false; - - if (arr1.length !== arr2.length) return false; - - return arr1.every((val, index) => val === arr2[index]); -}, + if (!Array.isArray(arr1) || !Array.isArray(arr2)) return false; + + if (arr1.length !== arr2.length) return false; + + return arr1.every((val, index) => val === arr2[index]); + }, isMajorValueListEqual(list1, list2) { - - if ((list1 === null || list1 === undefined) && (list2 === null || list2 === undefined)) return true; - if (list1 === null || list1 === undefined || list2 === null || list2 === undefined) return false; - - if (!Array.isArray(list1) || !Array.isArray(list2)) return false; - - if (list1.length !== list2.length) return false; - - return list1.every((item1, index) => { - const item2 = list2[index]; - - if ((item1 === null || item1 === undefined) && (item2 === null || item2 === undefined)) return true; - if (item1 === null || item1 === undefined || item2 === null || item2 === undefined) return false; - - const sv1 = item1.selectedValue; - const sv2 = item2.selectedValue; - return this.isArrayEqual(sv1, sv2); - }); -}, + if ((list1 === null || list1 === undefined) && (list2 === null || list2 === undefined)) return true; + if (list1 === null || list1 === undefined || list2 === null || list2 === undefined) return false; + + if (!Array.isArray(list1) || !Array.isArray(list2)) return false; + + if (list1.length !== list2.length) return false; + + return list1.every((item1, index) => { + const item2 = list2[index]; + + if ((item1 === null || item1 === undefined) && (item2 === null || item2 === undefined)) return true; + if (item1 === null || item1 === undefined || item2 === null || item2 === undefined) return false; + + const sv1 = item1.selectedValue; + const sv2 = item2.selectedValue; + return this.isArrayEqual(sv1, sv2); + }); + }, StepCode(step, i) { var that = this; const targetIndex = step.index; // 目标步骤索引(1、2、3等) const currentStep = this.move_step; // 当前所在步骤 - console.log('当前步骤:', currentStep, '目标步骤:', targetIndex, '步骤状态:', this.stepStatus); // 1. 后退 if (currentStep > targetIndex) { @@ -3091,8 +3105,7 @@ export default { // ? item.selectedValue[item.selectedValue.length - 1] // : [] // ) - // .toString(','); - + // .toString(','); // this.$api // .post('api/Article/addArticleStaging', { // user_id: this.form.user_id, @@ -3104,10 +3117,7 @@ export default { // this.oldMajorValueList = [...this.majorValueList]; // } // }); - // } - - // } } this.show_step = targetIndex; @@ -3121,32 +3131,40 @@ export default { if (!valid) { this.$message.error('Please fill in the current content first!'); return false; - } else if (this.stepStatus[currentStep - 1].status != 1) { - this.$message.error( - this.stepStatus[currentStep - 1].msg - ? this.stepStatus[currentStep - 1].msg - : 'Please fill in the current content first!' - ); - return false; } else { + let invalidStep = null; + for (let i = 0; i < targetIndex - 1; i++) { + const step = this.stepStatus[i]; + if (step.status !== 1) { + invalidStep = step; + break; + } + } + + if (invalidStep) { + this.$message.error( + this.stepStatusCurrent.msg ? this.stepStatusCurrent.msg : 'Please fill in the current content first!' + ); + + this.show_step = this.stepStatusCurrent.step; + this.move_step = this.stepStatusCurrent.step; + this.$forceUpdate(); + } else { + this.show_step = targetIndex; + this.move_step = targetIndex; + } if (targetIndex == 4) { if ( Array.isArray(this.majorValueList) && this.majorValueList.some((item) => item.selectedValue !== null && item.selectedValue !== undefined) ) { } else { - if(this.isNewArticle){ - this.getMajorData(); + if (this.isNewArticle) { + this.getMajorData(); } - } } - this.show_step = targetIndex; - this.move_step = targetIndex; } - - this.show_step = targetIndex; - this.move_step = targetIndex; }); // return; } @@ -3287,20 +3305,20 @@ export default { this.stagingID = res.data.article_id; this.form.article_id = res.data.article_id; this.$message.success('Saving succeeded!'); - this.initStepStatus(step1Incomplete=>{ - console.log('step1Incomplete at line 3283:', step1Incomplete) - this.$nextTick(()=>{ - if(step1Incomplete.list&&step1Incomplete.list.length>0&&step1Incomplete.list[0].status==1){ - this.move_step = 2; //进行步骤 - this.show_step = 2; //显示内容 - this.$forceUpdate() - } - }) - - + this.initStepStatus((step1Incomplete) => { + console.log('step1Incomplete at line 3283:', step1Incomplete); + this.$nextTick(() => { + if ( + step1Incomplete.list && + step1Incomplete.list.length > 0 && + step1Incomplete.list[0].status == 1 + ) { + this.move_step = 2; //进行步骤 + this.show_step = 2; //显示内容 + this.$forceUpdate(); + } + }); }); - - } else { this.$message.error(res.msg); } @@ -3369,7 +3387,7 @@ export default { }, // save暂存 - onStagingSave: throttle(function (e) { + onStagingSave: throttle(function (e) { if (e == 1) { this.onStaging(1); } else if (e == 2) { @@ -3379,9 +3397,9 @@ export default { } else if (e == 4) { this.onStaging('save4'); } - },1000), + }, 1000), //暂存加下一步 - onStagingSubmit: throttle(function (e) { + onStagingSubmit: throttle(function (e) { if (e == 3) { this.$api .post('api/Article/addArticlePart3', { @@ -3399,10 +3417,9 @@ export default { this.majorValueList.some((item) => item.selectedValue !== null && item.selectedValue !== undefined) ) { } else { - if(this.isNewArticle){ + if (this.isNewArticle) { this.getMajorData(); } - } this.move_step = 4; this.show_step = 4; @@ -3414,7 +3431,7 @@ export default { } }); } - },1000), + }, 1000), // 暂存 onStaging(e) { @@ -3441,7 +3458,7 @@ export default { article_id: this.form.article_id, journal: this.form.journal, title: this.form.title, - keyWords: this.form.keyWords, + keywords: this.form.keyWords, abstrart: this.form.abstrart, type: this.form.type, username: this.form.username, @@ -3454,11 +3471,9 @@ export default { }, (res) => { if (res.status == 1) { - const url = new URL(window.location.href); url.searchParams.set('id', res.data.article_id); // 替换或新增 id 参数 window.history.replaceState({}, document.title, url.toString()); - } } ); @@ -3643,8 +3658,7 @@ export default { ? item.shu.split(',').map(Number) : [item.shu] })); - this.isNewArticle=false; - + this.isNewArticle = false; }); }, changeUseAi(e) { @@ -3936,7 +3950,7 @@ export default { } .step_list_new .C_style { - background-color: #ecf5ff !important; + background-color: #ecf5ff !important; -webkit-box-shadow: 2px 30px 15px -20px #ebf5ff inset !important; box-shadow: 2px 30px 15px -20px #ebf5ff inset !important; } diff --git a/src/components/page/articleDetailEditor.vue b/src/components/page/articleDetailEditor.vue index f857924..3aa9106 100644 --- a/src/components/page/articleDetailEditor.vue +++ b/src/components/page/articleDetailEditor.vue @@ -1,67 +1,25 @@ - - @@ -1835,7 +705,13 @@
- +
@@ -1859,6 +735,13 @@ {{ currentArticleData.ai_review['overall_evaluation'] }}

-->

+ {{ + currentArticleData.ai_review.is_finish == 2 + ? 'AI is currently analyzing' + : currentArticleData.ai_review.is_finish == 1 + ? 'AI analysis has been completed' + : '' + }} {{ this.$t('aiReview.state18') }} : {{ currentArticleData.ai_review['create_time'] }} @@ -1893,19 +776,17 @@

-
+

{{ $t('aiReview.Explain') }} : {{ currentArticleData.ai_review[item.explanationValue] }}

- +
@@ -1982,7 +864,8 @@ @@ -1991,6 +874,174 @@ Cancel + +
+

+ {{ currentArticleData.title }} +

+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
No.Name ( score ) 1st review
+ Reviewer {{ reviewerIndex + 1 }} + + + + + + {{ iken.realname }} + ( {{ iken.rated }} ) + Detail + + + + + + + + + + Minor + Major + reject and resubmission + Reject +
+
+
+
+ + + Average score : {{ avegeCount(reviewList) }} + +
+ + + Cancel + +
@@ -2010,8 +1061,46 @@ export default { props: ['journals'], data() { return { + statusList:[ + { + key:0, + + }, + { + key:1, + + }, + { + key:2, + + }, + { + key:4, + + }, + { + key:8, + + }, + { + key:6, + + }, + { + key:5, + + }, + { + key:3, + + }, + + ], + reviewList: [], + finalList: [], FinalDetailBaseInfo: {}, dialogVisible: false, + ReviewerDialogVisible: false, showFullContent: false, majorValueList: [], majorBox: false, @@ -2027,21 +1116,22 @@ export default { currentTabIndex: 0, currentTabName: '', HIndexList: [ - { name: 'WOS', value: 0, key: 'wos' }, + // { name: 'WOS', value: 0, key: 'wos' }, { name: 'Scopus', value: 1, key: 'scopus' } // { name: 'Google', value: 2, key: 'google' } ], userIndexForm: {}, query: { - username: localStorage.getItem('U_name'), - journal: 0, - special_num: 0, - name: '', - sn: '', - state: 0, - act: 1, - pageIndex: 1, - pageSize: 20 + account: localStorage.getItem('U_name'), + journal_id: 'all', + + title: '', + accept_sn: '', + state: 'all', + country: 'all', + + page: 1, + size: 20 }, tableData: [], multipleSelection: [], @@ -2344,11 +1434,78 @@ export default { } }, methods: { - maxRepeatReviewCount(item) { - if (!item || !Array.isArray(item.reviewScore)) return null; // 边界处理:无数据返回null + handleClick(item) { + console.log('item at line 1228:', item); + // 解析路由:获取完整的路径(含 baseUrl) + const routeData = this.$router.resolve({ + path: 'articleReviewerDetail', // 原路由路径 + query: { + id: item.art_rev_id // 原查询参数 + } + }); + // 新开窗口跳转(第二个参数 '_blank' 表示新窗口) + window.open(routeData.href, '_blank'); + }, + // 算平均分 + avegeCount(arry) { + let str = 0; + let all = 0; + for (let i = 0; i < arry.length; i++) { + all += Number(arry[i].rated); + } + str = (all / arry.length).toFixed(1); + return str; + }, + toggleShowAll(item, i) { + this.$set(this.tableData[i], 'showAll', !item.showAll); + this.$forceUpdate(); + }, + handleClickRemark(item, i) { + this.$set(this.tableData[i], 'expanded', !item.expanded); + this.$forceUpdate(); + }, + async loadReviewData(item) { + console.log('item at line 1370:', item); + this.currentArticleData = { ...item }; + const Loading = this.$loading({ + lock: true, + text: 'Loading...', + spinner: 'el-icon-loading', + background: 'rgba(0, 0, 0, 0.7)' + }); + + try { + const res = await this.$api + // api/Article/addArticle + .post('api/Finalreview/getArticleFinalReview', { + article_id: item.article_id + }); // 替换为实际接口 + Loading.close(); + if (res.status == 1) { + // this.finalList = [...res.data.final_review]; + this.reviewList = res.data.review; + if (this.reviewList.length > 0) { + this.ReviewerDialogVisible = true; + } else { + this.$message({ + message: 'There is no review record for this article yet', + type: 'error' + }); + } + } + } catch (err) { + Loading.close(); + // this.finalList=[] + this.reviewList = []; + console.error('加载评审数据失败:', err); + } + }, + + maxRepeatReviewCount() { + if (!this.reviewList || !Array.isArray(this.reviewList)) return null; // 边界处理:无数据返回null // 遍历所有评审者,找到repeat数组长度最大的那条数据 - const maxItem = item.reviewScore.reduce((maxItem, currentItem) => { + const maxItem = this.reviewList.reduce((maxItem, currentItem) => { // 计算当前项的repeat长度,非数组则视为0 const currentLen = Array.isArray(currentItem.repeat) ? currentItem.repeat.length : 0; // 计算当前最大项的repeat长度,非数组则视为0 @@ -2540,8 +1697,7 @@ export default { }; } this.aiReview[0] = aiReview; - console.log('this.currentArticleData at line 2401:', this.currentArticleData); - }) + }) .catch((err) => { loading.close(); this.$message.error('AI analysis failed'); @@ -2560,11 +1716,12 @@ export default { article_id: data.article_id }) .then((res) => { + console.log('res at line 2562:', res); this.currentArticleData = { ...data, ai_review: '' }; - if (res.data != null) { + if (res.data) { this.tableData[i].ai_review = { ...res.data }; this.currentArticleData.ai_review = res.data; loading.close(); @@ -2573,8 +1730,7 @@ export default { this.creatAI(data, i, loading); } - console.log('this.currentArticleData at line 1312:', this.currentArticleData); - }) + }) .catch((err) => { loading.close(); // this.$message.error('AI analysis failed'); @@ -2589,9 +1745,11 @@ export default { }) .then((res) => { if (res.status == 1) { - this.tableData[i].ai_review = { ...res.data }; loading.close(); - this.openAI({ ...data, ai_review: { ...res.data } }); + this.$message.success(res.msg); + // this.tableData[i].ai_review = { ...res.data }; + // loading.close(); + // this.openAI({ ...data, ai_review: { ...res.data } }); } }) .catch((err) => { @@ -2734,18 +1892,19 @@ export default { }, // 改变期刊 chageJour() { - this.$api - .post('api/Special/getSpecial', { - journal_id: this.query.journal - }) - .then((res) => { - this.itemGuest = res.data.specials; - this.query.special_num = 0; - this.getdate(); - }) - .catch((err) => { - console.log(err); - }); + this.getdate(); + // this.$api + // .post('api/Special/getSpecial', { + // journal_id: this.query.journal_id + // }) + // .then((res) => { + // this.itemGuest = res.data.specials; + // this.query.special_num = 0; + // this.getdate(); + // }) + // .catch((err) => { + // console.log(err); + // }); }, // 改变状态 changeState() { @@ -2758,211 +1917,112 @@ export default { } this.getdate(); }, + handleReset() { + this.query = { + account: localStorage.getItem('U_name'), + journal_id: 'all', + + title: '', + accept_sn: '', + state: 'all', + country: 'all', + + page: 1, + size: 20 + }; + this.getdate(); + }, + handleSearch1(type) { + if (type == 'title') { + this.getdate({ + title: this.query.title + }); + } else if (type == 'accept_sn') { + this.getdate({ + accept_sn: this.query.accept_sn + }); + } + }, // 获取数据 - async getdate() { - this.query.state == 6 ? (this.PreAcpVisible = true) : (this.PreAcpVisible = false); + async getdate(options) { + console.log('options at line 1917:', options) const loading = this.$loading({ lock: true, text: 'Loading...', spinner: 'el-icon-loading', background: 'rgba(0, 0, 0, 0.7)' }); - if (this.query.state == 8) { - this.$api - .post('api/Finalreview/articleLists', { - ...this.query, - title: this.query.name, - accept_sn: this.query.sn, - journal_id: this.query.journal - }) - - .then(async (res) => { - - this.Total = res.data.total; - this.tableData = res.data.lists; - for (let i = 0; i < this.tableData.length; i++) { - this.tableData[i].reviewScore = []; - await this.$api - .post('api/Finalreview/getReviewRecord', { article_id: this.tableData[i].article_id }) - .then((res) => { - - if (res.status == 1) { - this.$set(this.tableData[i], 'reviewScore', res.data.article_review); - } - }) - .catch((error) => { - console.error('API call failed:', error); - }); - - this.tableData[i].file_cover = 1; - this.tableData[i].file_figer = 1; - this.tableData[i].file_total = 1; - this.tableData[i].file_maun = 1; - this.tableData[i].file_supper = 1; - if (this.tableData[i].file.coverLetter) { - if (this.tableData[i].file.coverLetter.length > 1) { - this.tableData[i].file_cover = 0; - } - } - if (this.tableData[i].file.picturesAndTables) { - if (this.tableData[i].file.picturesAndTables.length > 1) { - this.tableData[i].file_figer = 0; - } - } - if (this.tableData[i].file.totalpage) { - if (this.tableData[i].file.totalpage.length > 1) { - this.tableData[i].file_total = 0; - } - } - - if (this.tableData[i].file.manuscirpt) { - // if ( - // this.tableData[i].file.coverLetter || - // this.tableData[i].file.picturesAndTables || - // this.tableData[i].file.totalpage || - // this.tableData[i].file.supplementary - // ) { - if (this.tableData[i].file.manuscirpt.length > 1) { - console.log('this.tableData at line 2343:', this.tableData[i].file); - this.$set(this.tableData[i], 'file_maun', 0); - - console.log('this.tableData at line 23431:', this.tableData[i]); - // this.tableData[i].file_maun = 0; - - this.$forceUpdate(); - } - // } - } - if (this.tableData[i].file.supplementary) { - if (this.tableData[i].file.supplementary.length > 1) { - this.tableData[i].file_supper = 0; - } - } - - // for (let j = 0; j < this.tableData[i].length; j++) { - - // if (this.tableData[i].review[j].rated != null) { - // this.tableData[i].reviewScore.push(this.tableData[i].review[j]); - // } - // } - - this.tableData[i].reportList = [...this.tableData[i].reports]; - } - for (let i = 0; i < res.data.count_num.length; i++) { - for (let j = 0; j < this.statList.length; j++) { - if (i == this.statList[j].state) { - this.statList[j].num = res.data.count_num[i]; - } - } - } - this.$forceUpdate(); - loading.close(); - }) - .catch((err) => { - console.log(err); - loading.close(); - }); + var data = {}; + if (options) { + data = { ...options, account: this.query.account }; } else { - this.$api - .post('api/Article/getArticleForEditor', this.query) - .then((res) => { - this.Total = res.total; - this.tableData = res.data; - for (let i = 0; i < this.tableData.length; i++) { - // if (this.query.state == 0) { - // this.fetchMajorData(this.tableData[i].article_id); // 加载第一个用户的数据 - // } + data = { + account: this.query.account, + + size: this.query.size, + page: this.query.page + }; + } - this.tableData[i].file_cover = 1; - this.tableData[i].file_figer = 1; - this.tableData[i].file_total = 1; - this.tableData[i].file_maun = 1; - this.tableData[i].file_supper = 1; - if (this.tableData[i].file.coverLetter) { - if (this.tableData[i].file.coverLetter.length > 1) { - this.tableData[i].file_cover = 0; - } - } - if (this.tableData[i].file.picturesAndTables) { - if (this.tableData[i].file.picturesAndTables.length > 1) { - this.tableData[i].file_figer = 0; - } - } - if (this.tableData[i].file.totalpage) { - if (this.tableData[i].file.totalpage.length > 1) { - this.tableData[i].file_total = 0; - } - } - if (this.tableData[i].file.manuscirpt) { + if (this.query.state != 'all') { + data.state = this.query.state; + data.state = this.query.state; + } + if (this.query.journal_id != 'all') { + data.journal_id = this.query.journal_id; + } + if (this.query.country != 'all') { + data.country = this.query.country; + } + this.$api + .post('api/Workbench/lists', data) + .then((res) => { + this.Total = res.data.total; + this.tableData = res.data.lists; + for (let i = 0; i < this.tableData.length; i++) { + this.tableData[i].expanded = false; + this.tableData[i].showAll = false; + this.tableData[i].reportList = [...this.tableData[i].report]; + if (this.tableData[i].report.length == 1) { + for (let j = 0; j < this.tableData[i].report.length; j++) { if ( - this.tableData[i].file.coverLetter || - this.tableData[i].file.picturesAndTables || - this.tableData[i].file.totalpage || - this.tableData[i].file.supplementary + this.tableData[i].report[j].author_account != '' && + this.tableData[i].report[j].author_account != null ) { - if (this.tableData[i].file.manuscirpt.length > 1) { - this.tableData[i].file_maun = 0; + if (this.tableData[i].report[j].author_account.google_time == 0) { + this.tableData[i].report[j].Hindex = 0; + this.tableData[i].reportList.push(this.tableData[i].report[j]); } } } - if (this.tableData[i].file.supplementary) { - if (this.tableData[i].file.supplementary.length > 1) { - this.tableData[i].file_supper = 0; - } - } - - this.tableData[i].reviewScore = []; - for (let j = 0; j < this.tableData[i].review.length; j++) { - if (this.tableData[i].review[j].rated != null) { - this.tableData[i].reviewScore.push(this.tableData[i].review[j]); - } - } - - this.tableData[i].reportList = [...this.tableData[i].reports]; - // if (this.tableData[i].reports.length == 1) { - // for (let j = 0; j < this.tableData[i].reports.length; j++) { - // if ( - // this.tableData[i].reports[j].author_account != '' && - // this.tableData[i].reports[j].author_account != null - // ) { - // if (this.tableData[i].reports[j].author_account.google_time == 0) { - // this.tableData[i].reports[j].Hindex = 0; - // this.tableData[i].reportList.push(this.tableData[i].reports[j]); - // } - // } - // } - // } else if (this.tableData[i].reports.length > 1) { - // for (let j = 0; j < this.tableData[i].reports.length; j++) { - // if ( - // this.tableData[i].reports[j].author_account != '' && - // this.tableData[i].reports[j].author_account != null - // ) { - // this.tableData[i].reports[j].Hindex = this.tableData[i].reports[j].author_account.google_index; - // if (this.tableData[i].reports[j].author_account.google_time == 0) { - // this.tableData[i].reportList = this.tableData[i].reports; - // } - // } - // } - // } - } - for (let i = 0; i < res.state_num.length; i++) { - for (let j = 0; j < this.statList.length; j++) { - if (i == this.statList[j].state) { - this.statList[j].num = res.state_num[i]; + } else if (this.tableData[i].report.length > 1) { + for (let j = 0; j < this.tableData[i].report.length; j++) { + if ( + this.tableData[i].report[j].author_account != '' && + this.tableData[i].report[j].author_account != null + ) { + this.tableData[i].report[j].Hindex = this.tableData[i].report[j].author_account.google_index; + if (this.tableData[i].report[j].author_account.google_time == 0) { + this.tableData[i].reportList = this.tableData[i].report; + } } } } - loading.close(); - }) - .catch((err) => { - console.log(err); - loading.close(); - }); - } + + this.tableData[i].reportList = this.tableData[i].reportList.slice(0, 3); + this.$forceUpdate(); + } + + loading.close(); + }) + .catch((err) => { + console.log(err); + loading.close(); + }); }, // 触发搜索按钮 handleSearch() { - this.$set(this.query, 'pageIndex', 1); + this.$set(this.query, 'page', 1); this.getdate(); }, // 文章展开收缩 @@ -2987,39 +2047,7 @@ export default { } }); }, - // 修改文章状态弹出框 - testvis(e) { - // console.log(e,'e') - this.curState = e.state; - this.editVisible = true; - this.editform.title = e.title; - this.editform.articleId = e.article_id; - this.editform.journal_id = e.journal_id; - this.editform.state = e.state; - this.editform.state_old = e.state; - this.editform.editormsg = ''; - this.editform.proposal_content = ''; - this.$api - .post('api/Article/getArticleDetail', { - articleId: e.article_id, - human: 'editor' - }) - .then((res) => { - this.editform.transfer = res.transfer; - }) - .catch((err) => { - console.log(err); - }); - - this.$api - .post('api/Article/getJournalsByMajor', { - major_id: e.major_id - }) - .then((res) => { - this.journalTran = res.data.journals; - }); - }, // 修改文章客座 huaGuest(e) { this.guestform.title = e.title; @@ -3064,52 +2092,40 @@ export default { console.log(err); }); }, - // 1----生产实例 - prodBegin(e) { - const loading = this.$loading({ - lock: true, - text: 'Loading...', - spinner: 'el-icon-loading', - background: 'rgba(0, 0, 0, 0.7)' - }); + + // H指数弹出框 + aiSoring(data, e) { this.$api - .post('api/Production/addProduction', { - article_id: e.article_id + .post('api/Workbench/getCorrespondingInfo', { + art_aut_id: e.art_aut_id, + article_id: data.article_id }) .then((res) => { - if (res.code == 0) { - loading.close(); - this.$message.success('Successfully added production instance!'); + if (res.status == 1) { + console.log('res.status at line 2033:', res.status); + this.googleSearchInfo = ''; + this.currentTabIndex = 0; + this.currentTabName = this.HIndexList[0].name; + this.aiSorform = { ...res.data.article, author: { ...res.data.user } }; + this.IndexForm = {}; + this.userMessage = { ...res.data.user }; + + this.HIndexList = this.HIndexList.map((v) => { + v.isEdit = this.isEditIndex(v); + return v; + }); + + this.handleUserIndex(this.HIndexList[this.currentTabIndex].key); + this.geogleList = []; + this.aiSorbox = true; } else { - loading.close(); this.$message.error(res.msg); } }) .catch((err) => { - loading.close(); console.log(err); }); }, - // H指数弹出框 - aiSoring(e) { - console.log('e at line 1465:', e); - this.googleSearchInfo = ''; - this.currentTabIndex = 0; - this.currentTabName = this.HIndexList[0].name; - this.aiSorform = { ...e }; - this.IndexForm = {}; - this.userMessage = { ...e.author_account }; - - this.HIndexList = this.HIndexList.map((v) => { - // v.isEdit = this.isEditIndex(v); - v.isEdit = this.isEditIndex(v); - return v; - }); - console.log('this.HIndexList at line 1551:', this.HIndexList); - this.handleUserIndex(this.HIndexList[this.currentTabIndex].key); - this.geogleList = []; - this.aiSorbox = true; - }, isEditIndex(data) { console.log('data at line 1543:', data); var status; @@ -3251,51 +2267,8 @@ export default { this.remark.title = e.title; this.remark.articleId = e.article_id; this.remark.content = e.remarks; - // var remarksList = e.remarks.split(/。|\n|\r\n/); - // var remarksList = e.remarks.split('。'); - // this.remark.contentList = remarksList - // .filter((item) => item.trim() !== '') // 过滤空内容 - // .map((item) => { - // return { text: item + '' }; // 补回句号,或根据需要自定义 - // }); - }, - // 查重弹出框 - changeRepe(e) { - this.repebox = true; - this.repeform.title = e.title; - this.repeform.articleId = e.article_id; - this.repeform.repefen = e.repetition; - this.repeform.repeurl = e.repeurl; - this.repeform.zipurl = ''; - this.$nextTick(() => { - this.$refs.zipLoad.clearFiles(); - }); - }, - //修改文章状态 - saveEdit() { - const loading33 = this.$loading({ - lock: true, - text: 'Loading...', - spinner: 'el-icon-loading', - background: 'rgba(0, 0, 0, 0.7)' - }); - this.$api - .post('api/Article/editArticleEditor', this.editform) - .then((res) => { - if (res.code == 0) { - loading33.close(); - this.$message.success('success'); - this.editVisible = false; - this.getdate(); - } else { - loading33.close(); - this.$message.error(res.msg); - } - }) - .catch((err) => { - console.log(err); - }); }, + // 修改H指数 saveAiSor(e) { const loading = this.$loading({ @@ -3698,7 +2671,7 @@ export default { }, // 分页导航 handlePageChange(val) { - this.$set(this.query, 'pageIndex', val); + this.$set(this.query, 'page', val); this.getdate(); }, // 稿件信息展示 @@ -3721,12 +2694,14 @@ export default { }); }, // 跳转邮件 - linkEmail(row) { + linkEmail(row, user_id) { + var data = { + id: row.article_id, + user_id: user_id + }; this.$router.push({ path: 'articleDetailEmail', - query: { - id: row.article_id - } + query: data }); }, //超出传送文件个数限制 @@ -3767,7 +2742,15 @@ export default { } .handle-box { - margin-bottom: 10px; + display: grid; + grid-template-columns: 700px 1fr; /* 左侧自适应,右侧固定200px */ + gap: 10px; /* 两栏间距可选 */ + + /* margin-bottom: 25px; */ +} +.handle-box .handle-item { + display: flex; + align-items: center; } .handle-box .el-select { @@ -3827,6 +2810,7 @@ export default { .btnCliArt { color: #006699; font-weight: normal; + font-size: 13px; } .btnCliArt:hover { @@ -3840,11 +2824,14 @@ export default { .mangu_list { color: #333; - margin: 0 0 35px 0; + margin: 0 0 10px 0; font-size: 14px; - padding: 10px 20px; + padding: 4px 10px 2px; border-bottom-right-radius: 8px; border-bottom-left-radius: 8px; + display: grid; + grid-template-columns: 1fr minmax(320px, 380px); /* 左侧自适应,右侧固定200px */ + gap: 10px; /* 两栏间距可选 */ /* border-radius: 5px; */ border: 1px solid #ebeef5; /* border: 1px solid #0077b8e6; */ @@ -3869,13 +2856,13 @@ export default { } .mangu_list .man_title { - margin: 2px 40px 10px 0; + margin: 0px 20px 2px 0; font-weight: bolder; letter-spacing: -0.5px; - font-size: 16px; + font-size: 14px; cursor: pointer; display: inline-block; - line-height: 22px; + line-height: 18px; } .mangu_list .man_title b:hover { @@ -3885,7 +2872,7 @@ export default { .mangu_list div.fi_new { display: flex; align-items: center; - margin: 0 0 0 00px; + margin: 0 0 0 0px; margin-bottom: 1px; text-align: left; } @@ -3910,7 +2897,7 @@ export default { .mangu_list div.fi_new div > div > span > font { color: #888; margin: 0 5px 0 0; - font-size: 13px; + font-size: 12px; letter-spacing: -1px; } @@ -3954,9 +2941,10 @@ export default { .mangu_list .fixCard { text-align: center; background: #0066990d; - padding: 14px 10px; + padding: 8px 10px; margin-left: 6px; box-sizing: border-box; + margin-bottom: 0px !important; } .mangu_list .fixCard:nth-child(1) { margin-left: 0px; @@ -4157,8 +3145,9 @@ export default { } .articleBaseInfo { text-align: left !important; - line-height: 28px; + line-height: 22px; color: #333; + font-size: 13px !important; } .articleTopBaseInfo { color: #fff; @@ -4168,6 +3157,7 @@ export default { .articleBaseInfo .labelTitle { color: #333; font-weight: bold; + } .articleTopBaseInfo .labelTitle { color: #fff !important; @@ -4238,12 +3228,16 @@ export default { .openAIContentBox { width: 80vw; } -/* .articleBaseInfo7 .reviewer_decision{ -background-color: #f5f5f5b3; +.reviewer_decision1 { + width: 100%; + height: 20px; + flex-shrink: 0; + /* margin-bottom: 4px; */ + display: flex; + align-items: center; + justify-content: space-between; + font-size: 14px; } -.articleBaseInfo7 .manuscript_files{ -background-color: #f5f5f5b3; -} */ .review_table { width: 100%; @@ -4256,16 +3250,17 @@ td { padding: 6px; min-width: 70px; border: 1px solid #ddd; - + border-left: 0; + border-right: 0; text-align: left; } .review_table th { - font-size: 12px; + font-size: 14px; background-color: #f0f0f0; } .review_table td { - font-size: 12px; + font-size: 14px; /* background-color: #f0f0f0; */ } @@ -4285,11 +3280,97 @@ td { } .scoringRulesTitle { display: inline-block; - width: 60px; + width: 70px; color: #0077b8e6; font-weight: 700; } .scoringRulesItem { margin-top: 10px; } +.remark-wrapper { + display: inline-block; + max-width: 400px; /* 限制文字宽度,方便出现多行 */ + vertical-align: top; +} + +/* 收起状态(两行省略) */ +.collapsed { + display: -webkit-box; + -webkit-line-clamp: 2; /* 限制显示两行 */ + -webkit-box-orient: vertical; + overflow: hidden; + text-overflow: ellipsis; + white-space: normal; +} +.remarkContent { + margin-right: 10px; + line-height: 20px; + color: #888; + cursor: pointer; + max-width: calc(100% - 160px); + font-size: 13px; +} +.right { + display: flex; + flex-direction: column; + margin-left: auto; + flex-wrap: nowrap; + width: 100%; + justify-content: space-around +} +.reportIcon { + float: left; + margin-right: 6px; + background-color: #fff; + width: 20px; + height: 20px; + border-radius: 14px; + display: flex; + align-items: center; + justify-content: center; +} + +.author-information { + cursor: pointer; + color: #2a6497; + display: block; + margin-top: 4px; + font-size: 12px; +} +.articleBaseInfoGreen .articleTopBaseInfo { + background-color: #2e8b57 !important; +} + +.articleBaseInfoGreen .mangu_list:hover { + border: 1px solid #0f9116 !important; +} +.articleBaseInfoGrey .articleTopBaseInfo { + background-color: #888888ab !important; +} + +.articleBaseInfoGrey .mangu_list:hover { + border: 1px solid #888 !important; +} +.reviewer-decision-title { + font-size: 16px; + font-weight: bold; + color: #333; + margin-bottom: 10px; + line-height: 24px; +} +.articleBaseInfoRed .articleTopBaseInfo { + background-color: #ed444494 !important; +} +.articleBaseInfoRed .mangu_list:hover { + border: 1px solid #ed444494 !important; +} +.sticky-header { + position: sticky; + top: -10px; + z-index: 999; + background: #fff; + padding: 10px 0 0; + border-bottom: 1px solid #f0f0f0; + /* box-shadow: 0 2px 8px rgba(0,0,0,0.1); */ +} diff --git a/src/components/page/articleListEditor_B1.vue b/src/components/page/articleListEditor_B1.vue index d085499..02d9be3 100644 --- a/src/components/page/articleListEditor_B1.vue +++ b/src/components/page/articleListEditor_B1.vue @@ -1,7 +1,15 @@