- 新增crypto-js依赖用于数据加密解密 - 添加decrypt.js工具文件实现AES解密功能 - 修改Exam.vue组件使用加密接口获取考试数据 - 清理main.js中多余空行并格式化代码
243 lines
7.1 KiB
JavaScript
243 lines
7.1 KiB
JavaScript
// The Vue build version to load with the `import` command
|
|
// (runtime-only or standalone) has been set in webpack.base.conf with an alias.
|
|
import Vue from 'vue'
|
|
import App from './App'
|
|
import router from './router'
|
|
import axios from 'axios'
|
|
import store from './vuex/store'
|
|
import crypto from 'crypto'
|
|
import qs from 'qs'
|
|
import { Button, Swipe, SwipeItem, Field, Lazyload, Toast, Loadmore, Header, Cell, Radio, InfiniteScroll, Picker, DatetimePicker, Tabbar, TabItem, Popup, Switch } from 'mint-ui'
|
|
import 'mint-ui/lib/style.min.css'
|
|
import './assets/css/common.scss'
|
|
import './assets/css/my-mint.scss'
|
|
import { getStore, removeStore } from './utils/storage'
|
|
import VideoPlayer from 'vue-video-player'
|
|
import { FontAwesomeIcon } from '@fortawesome/vue-fontawesome'
|
|
import { faUser } from '@fortawesome/free-solid-svg-icons'
|
|
import 'font-awesome/css/font-awesome.min.css'
|
|
import { library } from '@fortawesome/fontawesome-svg-core'
|
|
import { log } from 'console'
|
|
import "core-js/stable";
|
|
import "regenerator-runtime/runtime";
|
|
|
|
// import wx from 'weixin-js-sdk'
|
|
let wx = require('weixin-js-sdk')
|
|
Vue.config.productionTip = false
|
|
|
|
// mintui模块
|
|
Vue.component(Button.name, Button)
|
|
Vue.component(Swipe.name, Swipe);
|
|
Vue.component(SwipeItem.name, SwipeItem);
|
|
Vue.component(Field.name, Field);
|
|
Vue.component(Loadmore.name, Loadmore);
|
|
Vue.component(Header.name, Header);
|
|
Vue.component(Cell.name, Cell);
|
|
Vue.component(Radio.name, Radio);
|
|
Vue.component(Button.name, Button);
|
|
Vue.component(Picker.name, Picker);
|
|
Vue.component(DatetimePicker.name, DatetimePicker);
|
|
Vue.component(Tabbar.name, Tabbar);
|
|
Vue.component(TabItem.name, TabItem);
|
|
Vue.component(Popup.name, Popup);
|
|
Vue.component(Switch.name, Switch);
|
|
Vue.use(Lazyload);
|
|
Vue.use(InfiniteScroll);
|
|
// axios
|
|
Vue.prototype.$http = axios
|
|
axios.defaults.baseURL = '/api'
|
|
|
|
library.add(
|
|
faUser,
|
|
)
|
|
Vue.component('font-awesome-icon', FontAwesomeIcon)
|
|
|
|
// md5加密处理
|
|
Vue.prototype.md5 = (params) => {
|
|
var seckey = 'victor_2017@DU^^&JGK_((*&gjGH';
|
|
var str = '';
|
|
for (let k in params) {
|
|
let md5 = crypto.createHash('md5');
|
|
md5.update(seckey + params[k]);
|
|
str += md5.digest('hex');
|
|
}
|
|
let md5 = crypto.createHash('md5');
|
|
md5.update(seckey + str + seckey);
|
|
str = md5.digest('hex');
|
|
params.apitoken = str
|
|
return params;
|
|
}
|
|
|
|
|
|
const service = axios.create({
|
|
baseURL: process.env.BASE_API, // api的base_url
|
|
timeout: 5000 // 请求超时时间
|
|
})
|
|
service.interceptors.response.use(
|
|
response => response,
|
|
error => {
|
|
Toast({
|
|
message: error.message,
|
|
position: "bottom",
|
|
duration: 5 * 1000
|
|
})
|
|
return Promise.reject(error)
|
|
})
|
|
|
|
// 封装axios获取数据
|
|
Vue.prototype.getData = (url, params) => {
|
|
params = Vue.prototype.md5(params)
|
|
params = qs.stringify(params)
|
|
return new Promise((resolve, reject) => {
|
|
service.post(url, params)
|
|
.then(data => {
|
|
resolve(data.data)
|
|
})
|
|
.catch(err => reject(err))
|
|
})
|
|
}
|
|
// 时间过滤器
|
|
Vue.filter('format', (timestamp) => {
|
|
const date = new Date(parseInt(timestamp) * 1000)
|
|
const Y = date.getFullYear(),
|
|
M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1),
|
|
D = date.getDate() < 10 ? '0' + date.getDate() : date.getDate(),
|
|
h = date.getHours() < 10 ? '0' + date.getHours() : date.getHours(),
|
|
m = date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes(),
|
|
s = date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds();
|
|
return Y + '-' + M + '-' + D + ' ' + h + ':' + m;
|
|
})
|
|
|
|
//--------------------手机号正则验证-------------------
|
|
Vue.prototype.checkPhone = (phone) => {
|
|
const myreg = /^(1[3-9][0-9])\d{8}$/;
|
|
if (!myreg.test(phone)) {
|
|
return false;
|
|
} else {
|
|
return true;
|
|
}
|
|
}
|
|
//---------------------手机号位数限制 ---------------------
|
|
Vue.prototype.checkLength = (length, phone, ele) => {
|
|
if (phone.length > length) {
|
|
Toast("超过手机号最大位数");
|
|
ele.readonly = "readonly";
|
|
} else {
|
|
ele.readonly = ''
|
|
}
|
|
}
|
|
// -------------------身份证号正则验证----------------
|
|
Vue.prototype.checkCard = (idcard) => {
|
|
const myreg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/;
|
|
if (!myreg.test(idcard)) {
|
|
return false;
|
|
} else {
|
|
return true;
|
|
}
|
|
}
|
|
//邮箱正则验证
|
|
Vue.prototype.checkEmail = (email) => {
|
|
const myreg = /^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*\.[a-zA-Z0-9]{2,6}$/;
|
|
if (!myreg.test(email)) {
|
|
return false;
|
|
} else {
|
|
return true;
|
|
}
|
|
}
|
|
|
|
|
|
//----------------------6位数字密码正则验证--------------------
|
|
Vue.prototype.checkPwd = (password) => {
|
|
const myreg = /^[0-9a-zA-Z_]{6,}$/;
|
|
if (!myreg.test(password)) {
|
|
return false;
|
|
} else {
|
|
return true;
|
|
}
|
|
}
|
|
//-----------------------存入cookie的函数
|
|
Vue.prototype.setCookie = (objname) => {
|
|
let expires = new Date();//设置过期时间
|
|
expires.setTime(expires.getTime() + 100 * 365 * 24 * 60 * 60);//永不过期
|
|
document.cookie = "usertoken=" + objname + ';+expires=' + expires.toGMTString() + ";path=/";//用户token和过期信息存到cookie
|
|
}
|
|
//获取指定名称的cookie的值
|
|
Vue.prototype.getCookie = (objname) => {
|
|
var arrstr = document.cookie.split("; ");
|
|
for (var i = 0; i < arrstr.length; i++) {
|
|
var temp = arrstr[i].split("=");
|
|
if (temp[0] == objname) {
|
|
return unescape(temp[1]);
|
|
}
|
|
}
|
|
}
|
|
// Vue.prototype.sysTime = 0
|
|
//登录状态判断
|
|
const whiteList = ['/login', '/login2', '/daily', '/qrcode', '/signin', '/wxerror', '/video', '/videocontrol'] //不需要登陆的页面
|
|
router.beforeEach(function (to, from, next) {
|
|
var u = navigator.userAgent;
|
|
var isiOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); //ios终端
|
|
// XXX: 修复iOS版微信HTML5 History兼容性问题
|
|
if (isiOS && to.path !== location.pathname) {
|
|
// 此处不可使用location.replace
|
|
location.assign(to.fullPath)
|
|
}
|
|
let params = {
|
|
token: getStore('token')
|
|
}
|
|
|
|
Vue.prototype.getData("/Member/checklogin", params).then(
|
|
data => {
|
|
if (data.code == 400) { // 没登录
|
|
removeStore('token')
|
|
if (whiteList.indexOf(to.path) !== -1) { // 白名单
|
|
next()
|
|
} else {
|
|
next('/login2')
|
|
}
|
|
}
|
|
// else if(data.code == 301){ //为绑定手机号
|
|
// store.commit('addInfo',data.data)
|
|
// Toast("首次使用请先绑定手机号");
|
|
// if (to.path === '/user/bind') {
|
|
// next()
|
|
// } else {
|
|
// next('/user/bind')
|
|
// }
|
|
// }
|
|
else {
|
|
store.commit('addInfo', data.data)
|
|
if (to.path === '/login' || to.path === '/login2') { // 跳转到
|
|
next({ path: '/' })
|
|
}
|
|
next()
|
|
}
|
|
}, err => {
|
|
})
|
|
window.scrollTo(0, 0)
|
|
})
|
|
|
|
Vue.prototype.setFooter = (bodyHeight) => {
|
|
let footer = document.getElementsByClassName('footer')[0];
|
|
if (bodyHeight < window.innerHeight) {
|
|
footer.style.position = "fixed"
|
|
footer.style.bottom = 0
|
|
footer.style.left = 0
|
|
footer.style.width = "100%"
|
|
} else if (bodyHeight > window.innerHeight) {
|
|
footer.style.position = 'static'
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
/* eslint-disable no-new */
|
|
new Vue({
|
|
el: '#app',
|
|
router,
|
|
store,
|
|
components: { App },
|
|
template: '<App/>'
|
|
})
|