diff --git a/package.json b/package.json index ff35041..e05a52e 100644 --- a/package.json +++ b/package.json @@ -29,11 +29,14 @@ "vue-ueditor-wrap": "^2.5.6", "vuedraggable": "^2.17.0", "vxe-table": "^3.8.19" + }, "devDependencies": { "@vue/cli-plugin-babel": "^3.9.0", "@vue/cli-service": "^3.9.0", "sass-loader": "^7.3.1", + "less": "^3.0.4", + "less-loader": "^5.0.0", "vue-template-compiler": "^2.6.10" } } diff --git a/src/components/common/Home.vue b/src/components/common/Home.vue index 6351ff6..d48f9ed 100644 --- a/src/components/common/Home.vue +++ b/src/components/common/Home.vue @@ -2,12 +2,12 @@
-
+
- + @@ -34,12 +34,13 @@ export default { vTags }, created() { - bus.$on('collapse-content', msg => { + bus.$on('collapse-content', (msg) => { this.collapse = msg; + localStorage.setItem('collapse', this.collapse); }); // 只有在标签页列表里的页面才使用keep-alive,即关闭标签之后就不保存到内存中了。 - bus.$on('tags', msg => { + bus.$on('tags', (msg) => { let arr = []; for (let i = 0, len = msg.length; i < len; i++) { msg[i].name && arr.push(msg[i].name); diff --git a/src/components/common/Sidebar.vue b/src/components/common/Sidebar.vue index a9a1e4c..b6bb43e 100644 --- a/src/components/common/Sidebar.vue +++ b/src/components/common/Sidebar.vue @@ -462,6 +462,11 @@ export default { index: '5', title: this.$t('sidebar.journalManagement'), subs: [ + { + index: 'JournalManagement', + title: this.$t('sidebar.journalManagement') + }, + { index: 'Journal_Agreement', title: this.$t('sidebar.userManSys11') @@ -626,6 +631,7 @@ export default { } }, created() { + localStorage.setItem('collapse', this.collapse); if (this.userrole == 2) { //其余的身份(显示作者) // if (this.user_cap.includes('chief')) { //主编 @@ -652,12 +658,27 @@ export default { this.items.splice( 3, 0, - + { icon: 'el-icon-s-platform', index: '13', title: this.$t('sidebar.chiefInspector'), subs: [ + { + index: 'Classificationmanagement', + title: this.$t('menu.Classificationmanagement'), + subs: [ + { + index: 'JournalManagementAll', + title: this.$t('sidebar.journalManagement') + }, + { + index: 'GroupClassification', + title: this.$t('sidebar.GroupClassification') + } + ] + }, + { index: 'Academicresourcesupervise', title: this.$t('menu.Academicresourcesupervise'), @@ -700,8 +721,9 @@ export default { } ); - - this.items=[...this.items,{ + this.items = [ + ...this.items, + { icon: 'el-icon-s-operation', index: '12', title: this.$t('sidebar.managingDirector'), @@ -711,12 +733,14 @@ export default { title: this.$t('sidebar.chief1') } ] - },] + } + ]; } // 通过 Event Bus 进行组件间通信,来折叠侧边栏 bus.$on('collapse', (msg) => { this.collapse = msg; + localStorage.setItem('collapse', this.collapse); bus.$emit('collapse-content', msg); }); }, diff --git a/src/components/common/langs/en.js b/src/components/common/langs/en.js index 2d09659..81aef47 100644 --- a/src/components/common/langs/en.js +++ b/src/components/common/langs/en.js @@ -43,12 +43,38 @@ const en = { userManSys6: 'Promotion Record', JournalCitationAnalysis: 'Journal Citation Analysis', Academicresourcesupervise: 'Academic Resource Supervise', + Classificationmanagement: 'Classification Management', publicationsupervise: 'Publication Supervise', papersubmit: 'Paper Submit', ArticlePublication: 'Article Publication', JournalCitationAnalysis: 'Journal Citation Analysis', }, + + + GroupClassification: { + add: 'Add', + cancel: 'Cancel', + submit: 'Submit', + edit: 'Edit', + delete: 'Delete', + major_title: 'Major Title', + major_current: 'Current Major', + nickname: 'Nick Name', + enter: 'Please Enter...', + sort: 'Sort', + deleteInfo: 'Are you sure you want to delete this category', + Unbind: 'Unbind', + bind: 'Bind', + ExpandAll: 'Expand All', + Journal: 'Journal', + JournalBindInfo: 'The Journal', + BindInfo: 'will be bound to this category, Do you want to continue?', + UnBindInfo: 'will unbind this category, Do you want to continue?', + Tips: 'Tips', + AssociatedJournal: 'Associated Journal', + + }, JournalCitationAnalysis: { journal: 'Journal', editor: 'Editor', @@ -61,7 +87,8 @@ const en = { all: 'All references', factor: 'Factor', Sameperiod: 'Same period', - + ArticleInfo: 'Article Information', + }, partyRole: { @@ -202,7 +229,8 @@ const en = { editorialBoard3: 'Journal Management', chiefInspector: 'Chief Inspector', journalArticleCount: 'Journal Article Count', - managingDirector: 'Managing Director' + managingDirector: 'Managing Director', + GroupClassification: 'Group Classification', }, home: { authortop: 'Author guide', diff --git a/src/components/common/langs/zh.js b/src/components/common/langs/zh.js index f8c44c7..024ad0b 100644 --- a/src/components/common/langs/zh.js +++ b/src/components/common/langs/zh.js @@ -44,21 +44,48 @@ const zh = { userManSys6: '推广记录', JournalCitationAnalysis: '期刊引文分析', Academicresourcesupervise: '学术资源监督', + Classificationmanagement: '分类管理', publicationsupervise: '出版监督', papersubmit: '论文提交', ArticlePublication: '文章发表', JournalCitationAnalysis: '期刊引文分析', - }, JournalCitationAnalysis: { + }, + + GroupClassification: { + add: '新增', + cancel: '取消', + submit: '确定', + edit: '编辑', + delete: '删除', + major_title: '分类名称', + major_current: '当前分类', + nickname: '分类昵称', + enter: '请输入...', + sort: '排序', + deleteInfo: '确定要删除该分类吗', + Unbind: '解绑', + bind: '绑定', + ExpandAll: '全部展开', + Journal: '期刊', + JournalBindInfo: '期刊', + BindInfo: '将【绑定】该分类, 是否继续?', + UnBindInfo: '将【解绑】该分类, 是否继续?', + Tips: '提示', + AssociatedJournal:'关联期刊', + }, + + JournalCitationAnalysis: { journal: '期刊', editor: '编辑', cite: '引用数量', article: '文章数量', citeNum: '引用数量', articleNum: '文章数量', - - + ArticleInfo: '文章信息', + + info: '以下数据为', wos: 'Wos', all: '全部引用', factor: '影响因子', @@ -76,8 +103,8 @@ const zh = { }, partyListCorr: { Realname: '姓名', Email: '邮箱', - unregistered:'unregistered', - OtherInformation:'其他信息', + unregistered: 'unregistered', + OtherInformation: '其他信息', articlelist: '文章列表', journal: '期刊', Authors: '作者', @@ -87,7 +114,7 @@ const zh = { InvestorProducer: '投稿者', author: '作者', status: '状态', - Published: '已发表',journal:'Journal', + Published: '已发表', journal: 'Journal', }, sidebar: { main: '个人中心', @@ -198,7 +225,8 @@ const zh = { editorialBoard3: '期刊列表', chiefInspector: '总监', journalArticleCount: '期刊文章计数总结', - managingDirector: '总经理' + managingDirector: '总经理', + GroupClassification: '集团分类', }, home: { authortop: '用户指南', diff --git a/src/components/org-tree/index.js b/src/components/org-tree/index.js new file mode 100644 index 0000000..554ed5f --- /dev/null +++ b/src/components/org-tree/index.js @@ -0,0 +1,19 @@ +import OrgTree from './org-tree' + +const install = Vue => { + if (install.installed) { + return + } + + install.installed = true + + Vue.component(OrgTree.name, OrgTree) +} + +OrgTree.install = install + +if (typeof window !== 'undefined' && window.Vue) { + window.Vue.use(OrgTree) +} + +export default OrgTree diff --git a/src/components/org-tree/node.js b/src/components/org-tree/node.js new file mode 100644 index 0000000..4d7b3d0 --- /dev/null +++ b/src/components/org-tree/node.js @@ -0,0 +1,177 @@ +// 判断是否叶子节点 +const isLeaf = (data, prop) => { + return !(Array.isArray(data[prop]) && data[prop].length > 0) +} +// console.info('Thank you for using vue-tree-color \nIf you have any questions about this plug-in, please contact me in the following ways \nWeChat: yanjiahui12345 \nWeChat official number: Web_Miao') +// 创建 node 节点 +export const renderNode = (h, data, context) => { + const { props } = context + const cls = ['org-tree-node'] + const childNodes = [] + const children = data[props.props.children] + + if (isLeaf(data, props.props.children)) { + cls.push('is-leaf') + } else if (props.collapsable && !data[props.props.expand]) { + cls.push('collapsed') + } + + childNodes.push(renderLabel(h, data, context)) + + if (!props.collapsable || data[props.props.expand]) { + childNodes.push(renderChildren(h, children, context)) + } + + return h('div', { + domProps: { + className: cls.join(' ') + } + }, childNodes) +} + +// 创建展开折叠按钮 +export const renderBtn = (h, data, { props, listeners }) => { + + const expandHandler = listeners['on-expand'] + const expandMouseover = listeners['on-expand-mouseover'] + const expandMouseout = listeners['on-expand-mouseout'] + + let cls = ['org-tree-node-btn'] + + if (data[props.props.expand]) { + cls.push('expanded') + } + + return h('span', { + domProps: { + className: cls.join(' ') + }, + on: { + 'click': e => expandHandler && expandHandler(e, data), + 'mouseover': e => expandMouseover && expandMouseover(e, data), + 'mouseout': e => expandMouseout && expandMouseout(e, data) + } + }) +} + +// 创建 label 节点 +export const renderLabel = (h, data, context) => { + const { props, listeners } = context + const label = data[props.props.label] + const renderContent = props.renderContent + // event handlers + const clickHandler = listeners['on-node-click'] + const mouseOverHandler = listeners['on-node-mouseover'] + const mouseOutHandler = listeners['on-node-mouseout'] + + const childNodes = [] + if (typeof renderContent === 'function') { + let vnode = renderContent(h, data) + + vnode && childNodes.push(vnode) + } else { + childNodes.push(label) + } + + if (props.collapsable && !isLeaf(data, props.props.children)) { + childNodes.push(renderBtn(h, data, context)) + } + + const cls = ['org-tree-node-label-inner'] + let { labelWidth, labelClassName, selectedClassName, selectedKey, judge, NodeClass } = props + + if (typeof labelWidth === 'number') { + labelWidth += 'px' + } + + if (typeof labelClassName === 'function') { + labelClassName = labelClassName(data) + } + + labelClassName && cls.push(labelClassName) + + // add selected class and key from props + if (typeof selectedClassName === 'function') { + selectedClassName = selectedClassName(data) + } + + selectedClassName && selectedKey && data[selectedKey] && cls.push(selectedClassName) + + return h('div', + { + domProps: { + className: 'org-tree-node-label' + } + }, + [ + h('div', + { + domProps: { + className: ChangeTheColor(data, judge, NodeClass, props) + " org-tree-node-label-inner" + }, + style: { + width: labelWidth + }, + on: { + click: e => clickHandler && clickHandler(e, data), + mouseover: e => mouseOverHandler && mouseOverHandler(e, data), + mouseout: e => mouseOutHandler && mouseOutHandler(e, data) + } + }, childNodes) + + + ] + + + ) +} + +function ChangeTheColor(e, judge, NodeClass, props) { + + + if (e.selected==0 && props.isSelect) { + return 'noselect-org' + } else { + if (judge !== "" && judge !== undefined && judge !== null && judge.swtich !== false) { + for (var k in judge) { + var a = (eval("e." + k)) + if (NodeClass) { + for (let c = 0; c < NodeClass.length; c++) { + if (a === NodeClass[c]) + return NodeClass[c] + else if (NodeClass.length - 1 == c) + return "" + } + } else { + return "" + } + } + } else { + return "" + } + } + +} +// 创建 node 子节点 +export const renderChildren = (h, list, context) => { + if (Array.isArray(list) && list.length) { + const children = list.map(item => { + return renderNode(h, item, context) + }) + + return h('div', { + domProps: { + className: 'org-tree-node-children' + } + }, children) + } + return '' +} + +export const render = (h, context) => { + const { props } = context + + return renderNode(h, props.data, context) +} + +export default render \ No newline at end of file diff --git a/src/components/org-tree/org-tree.vue b/src/components/org-tree/org-tree.vue new file mode 100644 index 0000000..7af2a46 --- /dev/null +++ b/src/components/org-tree/org-tree.vue @@ -0,0 +1,550 @@ + + + + diff --git a/src/components/page/JournalCitationAnalysis.vue b/src/components/page/JournalCitationAnalysis.vue index fe2edb5..548d2c5 100644 --- a/src/components/page/JournalCitationAnalysis.vue +++ b/src/components/page/JournalCitationAnalysis.vue @@ -1,20 +1,20 @@ @@ -89,19 +96,103 @@ {{ scope.row.cite.pre_year_article_num }} - +
+ + +
+ + + + + + + + + + + + + + + + + + + + +
+
@@ -111,9 +202,14 @@ const jAtableY = () => import('@/components/common/journalArticleTable'); export default { data() { return { + drawerTitle: '', + drawer: false, lang: !localStorage.getItem('langs') || localStorage.getItem('langs') == 'en' ? 'en' : 'zh', loading: false, dataList: [], + JournalList: [], + JournalListLoad: false, + currentData: {}, p_year: new Date().getFullYear() - 1, year: new Date().getFullYear(), month: new Date().getMonth() + 1 @@ -129,6 +225,43 @@ export default { this.$forceUpdate(); }, methods: { + getJournalList() { + this.JournalListLoad = true; + this.JournalList = []; + this.$api + .post('api/Monitor/getCiteListForEditorMonth', { + issn: this.currentData.issn + }) + .then(async (res) => { + this.JournalListLoad = false; + if (res.code == 0) { + this.JournalList = res.data.list; + console.log('this.AssociatedJournalList at line 234:', this.AssociatedJournalList); + } else { + this.$message.error(res.msg); + } + }) + .catch((err) => { + this.JournalListLoad = false; + this.$message.error(err); + }); + }, + openDrawer(data) { + this.currentData = data; + if (this.currentData) { + this.drawerTitle = `${this.currentData.title} ${ + this.lang == 'en' + ? this.$t('JournalCitationAnalysis.cite') + this.getMonthName(this.month) + : this.month + '月' + this.$t('JournalCitationAnalysis.cite') + } ( ${this.currentData.cite.month_num} )`; + } + + this.drawer = true; + this.getJournalList(); + }, + handleClose() { + this.drawer = false; + }, getMonthName(month) { const months = [ 'January', diff --git a/src/components/page/JournalManagement/GroupClassification/index.vue b/src/components/page/JournalManagement/GroupClassification/index.vue new file mode 100644 index 0000000..9473965 --- /dev/null +++ b/src/components/page/JournalManagement/GroupClassification/index.vue @@ -0,0 +1,688 @@ + + + + + diff --git a/src/components/page/JournalManagement/JournalManagement/all.vue b/src/components/page/JournalManagement/JournalManagement/all.vue new file mode 100644 index 0000000..c048e8b --- /dev/null +++ b/src/components/page/JournalManagement/JournalManagement/all.vue @@ -0,0 +1,648 @@ + + + + + diff --git a/src/components/page/JournalManagement/JournalManagement/index.vue b/src/components/page/JournalManagement/JournalManagement/index.vue new file mode 100644 index 0000000..5050b9f --- /dev/null +++ b/src/components/page/JournalManagement/JournalManagement/index.vue @@ -0,0 +1,646 @@ + + + + + diff --git a/src/router/index.js b/src/router/index.js index 0f34dbe..67e9807 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -823,6 +823,27 @@ export default new Router({ title: 'Total User' } }, + { + path: '/GroupClassification', //用户列表 + component: () => import('../components/page/JournalManagement/GroupClassification/index.vue'), + meta: { + title: 'Group Classification' + } + }, + { + path: '/JournalManagement', //用户列表 + component: () => import('../components/page/JournalManagement/JournalManagement/index.vue'), + meta: { + title: 'Journal Management' + } + }, + { + path: '/JournalManagementAll', //用户列表 + component: () => import('../components/page/JournalManagement/JournalManagement/all.vue'), + meta: { + title: 'Journal Management' + } + }, { path: '/disseMinate', //推广 component: () => import('../components/page/disseMinate'), diff --git a/vue.config.js b/vue.config.js index c2b24ac..c961dea 100644 --- a/vue.config.js +++ b/vue.config.js @@ -72,9 +72,9 @@ module.exports = { // target: 'https://www.tmrjournals.cn', // target: 'http://www.tougao.com/public/index.php/', // target: 'http://www.tougao.com/', - // target: 'http://192.168.110.110/tougao/public/index.php/', + target: 'http://192.168.110.110/tougao/public/index.php/', // target: 'http://api.tmrjournals.com/public/index.php/',//正式 - target: 'https://submission.tmrjournals.com/',//正式 + // target: 'https://submission.tmrjournals.com/',//正式 changeOrigin: true, pathRewrite: { '^/api': ''