Files
tougao_web/src/main.js
2025-08-26 18:01:49 +08:00

225 lines
8.1 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import Vue from 'vue';
import App from './App.vue';
import router from './router';
import ElementUI, { TabPane } from 'element-ui';
import VueI18n from 'vue-i18n';
import { messages } from './components/common/i18n';
import 'element-ui/lib/theme-chalk/index.css'; // 默认主题
import locale from 'element-ui/lib/locale/lang/en.js'; // 中英文
// import './assets/css/theme-green/index.css'; // 浅绿色主题
import './assets/css/icon.css';
import './components/common/directives';
import 'babel-polyfill';
import api from './api/index.js';
import Common from './components/common/common'
Vue.prototype.$validateString = function (str) {
return /^[a-zA-Z\s\u00C0-\u00FF\u0100-\u017F-]+$/.test(str);
}
window.MathJax = {
tex: {
inlineMath: [['$', '$'], ['\\(', '\\)']], // 行内公式
displayMath: [['$$', '$$'], ['\\[', '\\]']], // 块级公式
},
svg: { fontCache: 'global' }
};
// 监听 DOM 变化,并自动渲染公式
Vue.prototype.$renderMath = function () {
if (window.MathJax && window.MathJax.typeset) {
setTimeout(() => {
window.MathJax.typeset();
}, 100); // 延迟防止 Vue 还未完全渲染
} else {
console.warn('MathJax 未正确加载');
}
};
import VXETable from 'vxe-table'
import 'vxe-table/lib/style.css'
Vue.use(VXETable)
// 引入富文本编辑器
import VueQuillEditor from 'vue-quill-editor'
// 富文本编辑器对应的样式
import 'quill/dist/quill.core.css'
import 'quill/dist/quill.snow.css'
import 'quill/dist/quill.bubble.css'
// 注册富文本编辑器组件为全局组件
Vue.use(VueQuillEditor)
async function loadJournalType() {
const localData = localStorage.getItem('journalType'); // 尝试从 localStorage 获取数据
// 如果 localStorage 中没有数据,则调用 API 获取并存储
if (!localData) {
try {
await api
.post('api/Articletype/getArticleType', {})
.then((res) => {
console.log('res at line 61:', res)
if (res.status == 1) {
localStorage.setItem('journalTypeData', JSON.stringify(res.data.base)); // 将数据存储到 localStorage
localStorage.setItem('journalTypeDataAll', JSON.stringify([...res.data.base, ...res.data.supplement])); // 将数据存储到 localStorage
}
})
await api
.post('api/Articletype/getMedicalType', {})
.then((res) => {
console.log('res at line 61:', res)
if (res.status == 1) {
localStorage.setItem('opMedicalListData', JSON.stringify(res.data)); // 将数据存储到 localStorage
}
})
} catch (error) {
console.error('Failed to fetch journal types:', error);
}
} else {
console.log('Journal types loaded from localStorage:', JSON.parse(localData));
}
}
// 启动应用时调用一次函数来加载 journalType 数据
// 时间过滤器
// 定义时间过滤器(不含时分秒)
Vue.filter('formatDate', function (originVal) {
const dt = new Date(originVal * 1000)
const y = dt.getFullYear()
const m = (dt.getMonth() + 1 + '').padStart(2, '0')
const d = (dt.getDate() + '').padStart(2, '0')
const hh = (dt.getHours() + '').padStart(2, '0')
const mm = (dt.getMinutes() + '').padStart(2, '0')
const ss = (dt.getSeconds() + '').padStart(2, '0')
return `${y}-${m}-${d}`
})
// 含时分秒
Vue.filter('formatDatehms', function (originVal) {
const dt = new Date(originVal * 1000)
const y = dt.getFullYear()
const m = (dt.getMonth() + 1 + '').padStart(2, '0')
const d = (dt.getDate() + '').padStart(2, '0')
const hh = (dt.getHours() + '').padStart(2, '0')
const mm = (dt.getMinutes() + '').padStart(2, '0')
const ss = (dt.getSeconds() + '').padStart(2, '0')
return `${y}-${m}-${d} ${hh}:${mm}:${ss}`
})
// 引入wps文档编辑
import mammoth from "mammoth";
import commonJS from '@/common/js/commonJS.js'
Vue.prototype.$commonJS = commonJS
Vue.prototype.Common = Common;
// import { getJournalTypeName } from '@/common/js/commonJS.js';
Vue.filter('jtName', function (value) {
return commonJS.getJournalTypeName(value);
});
// 使用 ES Module
import * as echarts from 'echarts';
Vue.prototype.$echarts = echarts
Vue.prototype.$api = api
Vue.config.productionTip = false;
import Editor from "@tinymce/tinymce-vue"; // 默认导入
Vue.component("Editor", Editor);
import commonTable from '@/components/page/components/table/table.vue'
Vue.component('common-table', commonTable);
import commonReviewArticle from '@/components/page/components/reviewArticle/index.vue'
Vue.component('common-review-article', commonReviewArticle);
import commonEditorArticle from '@/components/page/components/EditorArticle/index.vue'
Vue.component('common-editor-article', commonEditorArticle);
import commonLateX from '@/components/page/components/table/LateX.vue'
Vue.component('common-late-x', commonLateX);
import commonMajor from '@/components/page/components/major/index.vue'
Vue.component('common-major', commonMajor);
import commonMajorList from '@/components/page/components/major/list.vue'
Vue.component('common-major-list', commonMajorList);
import commonPayPalButton from '@/components/page/components/pendingPayment/PayPalButton.vue'
Vue.component('common-paypal-button', commonPayPalButton);
import commonTiff from '@/components/page/components/table/tiff.vue'
Vue.component('common-tiff', commonTiff);
import commonContent from '@/components/page/components/table/content.vue'
Vue.component('common-content', commonContent);
import commonWord from '@/components/page/components/table/word.vue'
Vue.component('common-comment', commonComment);
import commonEditTable from '@/components/page/components/table/editTable.vue'
Vue.component('common-edit-table', commonEditTable);
import commonComment from '@/components/page/components/table/comment.vue'
Vue.component('common-word', commonWord);
import commonAnnotations from '@/components/page/components/table/annotations.vue'
Vue.component('common-annotations', commonAnnotations);
import commonWordHtml from '@/components/page/components/table/wordHtml.vue'
Vue.component('common-word-html', commonWordHtml);
import commonWordHtmlTypesetting from '@/components/page/components/table/wordHtmlTypesetting.vue'
Vue.component('common-word-html-type-setting', commonWordHtmlTypesetting);
import commonDragWord from '@/components/page/components/table/dragWord.vue'
Vue.component('common-drag-word', commonDragWord);
Vue.use(VueI18n);
Vue.use(ElementUI, {
size: 'small',
locale
});
const i18n = new VueI18n({
locale: localStorage.getItem('langs') || 'en',
messages
});
//使用钩子函数对路由进行权限跳转
router.beforeEach((to, from, next) => {
loadJournalType();
document.title = `${to.meta.title} | Traditional Medicine Research`;
const role = localStorage.getItem('U_name');
const userrole = localStorage.getItem('U_status');
if (!role && to.path != '/register' && to.path !== '/submission' && to.path !== '/verification' && to.path !== '/orcidLink' && to.path !== '/img' && to.path !== '/reviewer' && to.path !== '/thanks' && to.path !== '/login' && to.path !== '/refuse' && to.path !== '/managing' && to.path.search(/retrieve/i) < 0) {
next('/login');
// } else if (to.meta.permission) {
// // 如果是管理员权限则可进入,这里只是简单的模拟管理员权限而已
// // role === 'admin' ? next() : next('/403');
// if(userrole == to.meta.permission){
// next();
// }else{
// next('/403');
// }
} else {
//审稿人导航
// if(to.path=='/reviewerArticleList'&&userrole!='reviewer'){
// next('/authorApplyReviewer');
// }
// 简单的判断IE10及以下不进入富文本编辑器该组件不兼容
if (navigator.userAgent.indexOf('MSIE') > -1 && to.path === '/editor') {
Vue.prototype.$alert('vue-quill-editor组件不兼容IE10及以下浏览器请使用更高版本的浏览器查看', '浏览器不兼容通知', {
confirmButtonText: '确定'
});
} else {
next();
}
}
});
new Vue({
router,
i18n,
render: h => h(App),
mounted() {
this.$renderMath(); // 页面加载后自动渲染
}
}).$mount('#app');