Created
November 2, 2018 13:32
-
-
Save lenconda/4dcccd369c054f2061e5675c1d601dcd to your computer and use it in GitHub Desktop.
utils.js
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const baseUrl = window.isDevMode ? '/api' : 'https://os.ncuos.com/api' | |
// 信息提示框 | |
/** | |
* @param {any} msg | |
* @param {any} isSucc | |
*/ | |
const alertBox = function (msg, isSucc) { | |
msg = typeof msg !== 'undefined' ? msg : '操作失败' | |
try { | |
if (msg.indexOf('permission') >= 0) { | |
router.go('/index') | |
} | |
} catch (e) { } | |
let color, icon | |
try { | |
if (isSucc || msg.indexOf('成功') >= 0) { | |
color = 'btn-success' | |
icon = 'fa-check-circle' | |
} else { | |
color = 'btn-danger' | |
icon = 'fa-times-circle' | |
} | |
} catch (e) { | |
color = 'btn-danger' | |
icon = 'fa-times-circle' | |
} | |
console.log(color, icon, msg) | |
if (q('.alertBox').innerHTML === ' ' || q('.alertBox').innerHTML.length < 1) { | |
var span = document.createElement('span') | |
q('.alertBox').setAttribute('class', 'btn alertBox ' + color) | |
var i = document.createElement('i') | |
i.setAttribute('class', 'fa ' + icon) | |
span.innerText = ' ' + msg | |
q('.alertBox').appendChild(i) | |
q('.alertBox').appendChild(span) | |
} | |
setTimeout(function () { | |
q('.alertBox').innerHTML = '' | |
q('.alertBox').setAttribute('class', 'alertBox') | |
}, 4500) | |
} | |
// 各种状态码处理 | |
const resOpt = { | |
code500: function (res, cb, ajaxData, msg) { | |
if (msg) { | |
alertBox(msg) | |
} else { | |
alertBox('操作失败') | |
} | |
cb({ status: 0 }) | |
}, | |
code502: function (res, cb) { | |
alertBox('操作失败') | |
cb({ status: 0 }) | |
}, | |
code404: function (res, cb) { | |
}, | |
code400: function (res, cb) { | |
console.log('400') | |
let data = JSON.parse(res) | |
let msg = '' | |
for (let prototype in data.message) { | |
console.log(prototype) | |
msg += data.message[prototype] + ',' | |
} | |
alertBox(msg.slice(0, msg.length - 1)) | |
cb({ status: 0 }) | |
}, | |
code401: function (res, cb, ajaxData) { | |
console.log('401') | |
let logined = (data) => { | |
if (data.status || (Miracle.isApp() && data.token)) { | |
localStorage.setItem('token', data.token) | |
ajax(ajaxData.method, | |
ajaxData.url, | |
ajaxData.cb, | |
ajaxData.data, | |
ajaxData.datatype) | |
} else { | |
localStorage.removeItem('token') | |
localStorage.removeItem('username') | |
alertBox(data.message) | |
if (router._currentRoute.path !== '/loginBox/login') { | |
localStorage.setItem('url401back', router._currentRoute.path) | |
alertBox('重新登录') | |
} | |
router.replace('/loginBox/login') | |
} | |
} | |
if (Miracle.isApp()) { | |
// app里刷新token策略 | |
Miracle.call('Auth', 'refreshToken', {}, (data) => { | |
// 成功回调 | |
console.log(data) | |
logined(data) | |
}, (error) => { | |
// 失败回调 | |
alertBox(error.message) | |
}) | |
} else { | |
// 非app里刷新token策略 | |
if (localStorage.getItem('username') && localStorage.getItem('userid')) { | |
let jsonData = JSON.stringify({ | |
username: localStorage.getItem('username'), | |
password: atob(localStorage.getItem('userid')) | |
}) | |
ajax('post', '/user/token', logined, jsonData, 'json') | |
} else { | |
if (router._currentRoute.path !== '/loginBox/login') { | |
localStorage.setItem('url401back', router._currentRoute.path) | |
alertBox('重新登录') | |
} | |
router.replace('/loginBox/login') | |
} | |
} | |
}, | |
code403: function (res, cb) { | |
res = JSON.parse(res) | |
router.go('/index') | |
cb('403') | |
// alertBox(res.message) | |
}, | |
code200: function (res, cb, jsonData, msg) { | |
// console.log(cb) | |
// console.log(res); | |
try { | |
res = JSON.parse(res) | |
cb(res, msg) | |
} catch (e) { | |
cb({ data: res, status: 1 }, msg) | |
} | |
}, | |
code204: (res) => { | |
console.log(204) | |
} | |
} | |
// 选择器,因为有jq准备弃用 | |
const q = function (css) { | |
return document.querySelector(css) | |
} | |
const qa = function (css) { | |
return document.querySelectorAll(css) | |
} | |
// token操作 | |
const tokenOperate = { | |
// 获取token后 | |
afterGetToken: function (data) { | |
tokenOperate.saveToken(data.token) | |
router.go('/') | |
}, | |
// 写入token | |
saveToken: function (token) { | |
var date = new Date() | |
localStorage.setItem('token', token) | |
localStorage.setItem('time', date.getTime()) | |
}, | |
// 读取token | |
takeToken: function () { | |
var token = '' | |
token = localStorage.getItem('token') | |
return token | |
}, | |
// 清除tooken | |
clearToken: function () { | |
localStorage.clear() | |
console.log('out') | |
} | |
} | |
// 数据埋点 | |
var ajaxPostAsync = function (data) { | |
data = JSON.stringify(data) | |
var xmlHttp = new XMLHttpRequest() | |
let token = localStorage.getItem('token') | |
xmlHttp.onreadystatechange = function () { | |
if (xmlHttp.readyState === 4 && xmlHttp.status === 200) { | |
console.log(xmlHttp.status) | |
} | |
} | |
xmlHttp.open('POST', 'https://welcome.ncuhome.cn/storage/index', true) | |
xmlHttp.setRequestHeader('Authorization', 'passport ' + token) | |
xmlHttp.setRequestHeader('Content-type', 'application/json') | |
xmlHttp.send(data) | |
} | |
/** | |
* @param {string} method | |
* @param {any} url | |
* @param {any} cb | |
* @param {any} data | |
* @param {any} dataType | |
* @param {any} msg | |
* @param {any} ignore | |
*/ | |
const ajax = function (method, url, cb, data, dataType, msg, ignore) { | |
let date = new Date() | |
let mm = date.getMonth() + 1 | |
if (mm < 10) { | |
mm = `0${mm}` | |
} | |
let time = `${date.getFullYear()}-${mm}-${date.getDate()}T${date.getHours()}:${date.getMinutes()}:${date.getSeconds()}` | |
let ajaxData | |
if (url !== '/user/token') { | |
ajaxData = { | |
method, | |
url, | |
cb, | |
data, | |
dataType | |
} | |
} | |
let syncurl = url | |
var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP') | |
if (!ignore) { | |
url = baseUrl + url | |
} | |
let storageData = { | |
cip: { | |
cip: localStorage.getItem('cip'), | |
cid: localStorage.getItem('ipcid'), | |
cname: localStorage.getItem('cname') | |
}, | |
navigator: { | |
appCodeName: window.navigator.appCodeName, | |
appName: window.navigator.appName, | |
appVersion: window.navigator.appVersion, | |
connection: window.navigator.connection, | |
cookieEnabled: window.navigator.cookieEnabled, | |
maxTouchPoints: window.navigator.maxTouchPoints, | |
language: window.navigator.language, | |
mimeTypes: window.navigator.mimeTypes, | |
onLine: window.navigator.onLine, | |
platform: window.navigator.platform, | |
plugins: window.navigator.plugins, | |
product: window.navigator.product, | |
productSub: window.navigator.productSub, | |
storage: window.navigator.storage, | |
userAgent: window.navigator.userAgent, | |
vendor: window.navigator.vendor, | |
vendorSub: window.navigator.vendorSub, | |
usb: window.navigator.usb | |
}, | |
apiurl: url, | |
statuscode: '', | |
fedate: time, | |
res: '', | |
req: null | |
} | |
xhr.open(method.toUpperCase(), url, true) | |
if (tokenOperate.takeToken() && tokenOperate.takeToken().length > 0) { | |
let token = tokenOperate.takeToken() | |
if (syncurl !== '/go/login/sync') { | |
xhr.setRequestHeader('Authorization', 'passport ' + token) | |
} | |
} | |
if (method.toLowerCase() === 'get') { | |
xhr.send(null) | |
} else { | |
var contentType = 'application/x-www-form-urlencoded' | |
if (dataType) { | |
if (dataType.toLowerCase() === 'json') { | |
contentType = 'application/json' | |
}; | |
}; | |
xhr.setRequestHeader('Content-type', contentType) | |
xhr.send(data) | |
storageData.req = data | |
}; | |
xhr.onreadystatechange = function () { | |
if (xhr.readyState === 4) { | |
let res = unescape(xhr.responseText.replace(/\\u/g, '%u')) | |
storageData.statuscode = xhr.status | |
storageData.res = res | |
ajaxPostAsync(storageData) | |
try { | |
resOpt[`code${xhr.status}`](res, cb, ajaxData, msg) | |
} catch (error) { | |
alertBox('操作失败') | |
} | |
} | |
} | |
} | |
// make nianjiList | |
var generateNianjiList = function (xueqi) { | |
var list = [] | |
for (var i = xueqi.length - 1; i >= 0; i--) { | |
if (list.indexOf(xueqi[i]) === -1) { | |
list.push({ dm: xueqi[i].dm.split('-')[0] }) | |
} | |
} | |
list = list.reverse() | |
list = JSON.stringify(list) | |
localStorage.setItem('nianji', list) | |
} | |
// url: /info/code_name/list | |
const codeList = [ | |
'pyfs', 'xslb', 'xb', 'xx', 'mz', 'gatq', 'gb', | |
'hkxz', 'zzmm', 'jtgx', 'hyzk', 'yxsbb', | |
'yxslb', 'xggblb', 'xzjb', 'xw', 'grsf', 'xiaoqu', 'pycc', 'xueqi' | |
] | |
const getCodeList = function () { | |
for (var i = codeList.length - 1; i >= 0; i--) { | |
codeNameOperate(codeList[i]) | |
} | |
} | |
var codeNameOperate = function (codeName) { | |
// console.log(codeName); | |
var setCodeNameLists = function (data) { | |
// console.log(data); | |
if (data.status) { | |
if (codeName === 'xueqi') { | |
data.code = data.code.reverse() | |
console.log(data.code) | |
generateNianjiList(data.code) | |
} | |
localStorage.setItem(codeName, JSON.stringify(data.code)) | |
} | |
} | |
var getCodeNameList = function () { | |
ajax('get', '/info/code_name/' + codeName, setCodeNameLists, {}, 'json') | |
} | |
if (localStorage.getItem(codeName)) { | |
} else { | |
getCodeNameList() | |
} | |
} | |
const autoChangeTitle = function () { | |
if ($('.breadcrumb .active')[0]) { | |
let title = $('.breadcrumb .active')[0].innerText | |
console.log(title) | |
document.title = '云家园-' + title | |
} else { | |
document.title = '云家园' | |
} | |
} | |
const datepickerInit = function (...types) { | |
// docs http://www.bootcss.com/p/bootstrap-datetimepicker/ | |
this.dataView1 = function () { | |
$('.datetimepicker').each(function () { | |
var opt = { | |
language: 'zh-CN', | |
format: 'yyyy-mm-dd', | |
minView: 2, | |
autoclose: true | |
} | |
$(this).datetimepicker(opt) | |
}) | |
} | |
this.dataView2 = function () { | |
$('.daterange').each(function () { | |
var elm = this | |
$(this).daterangepicker({ | |
startDate: $(elm).prev().prev().val(), | |
endDate: $(elm).prev().val(), | |
format: 'YYYY-MM-DD' | |
}, function (start, end) { | |
$(elm).find('.date-title ').html(start.toDateStr() + '至' + end.toDateStr()) | |
$(elm).prev().prev().val(start.toDateStr()) | |
$(elm).prev().val(end.toDateStr()) | |
}) | |
}) | |
} | |
this.dataView3 = function () { | |
$('.datetimepicker3').each(function () { | |
var opt = { | |
language: 'zh-CN', | |
format: 'yyyy-mm', | |
startView: 3, | |
minView: 3, | |
autoclose: true | |
} | |
$(this).datetimepicker(opt) | |
}) | |
} | |
this.dataView4 = function () { | |
$('.datetimepicker2').each(function () { | |
var opt = { | |
language: 'zh-CN', | |
format: 'yyyy-mm-dd hh:ii', | |
autoclose: true | |
} | |
$(this).datetimepicker(opt) | |
}) | |
} | |
this.dataView5 = function () { | |
$('.datetimepicker2').each(function () { | |
var opt = { | |
language: 'zh-CN', | |
format: 'yyyy-mm-dd hh:ii:ss', | |
autoclose: true | |
} | |
$(this).datetimepicker(opt) | |
}) | |
} | |
console.log(types) | |
if (types.length > 0) { | |
for (let type of types) { | |
this[`dataView${type}`]() | |
} | |
} else { | |
this.dataView1() | |
this.dataView2() | |
this.dataView3() | |
this.dataView4() | |
this.dataView5() | |
} | |
// $(function () { | |
// let opt = { | |
// language: 'zh-CN', | |
// weekStart: 1, | |
// todayBtn: 1, | |
// autoclose: 1, | |
// minView: 2, | |
// maxView: 4, | |
// format: 'yyyy-mm-dd', | |
// todayHighlight: 1, | |
// startView: 2, | |
// forceParse: 0, | |
// showMeridian: 1 | |
// } | |
// $('.datetimepicker').datetimepicker(opt) | |
// }) | |
} | |
// 判断微信 | |
const weixinDrag = () => { | |
if (typeof WeixinJSBridge !== 'undefined' || navigator.userAgent.toLowerCase().indexOf('micromessenger') > -1) { | |
// alert('检测到您正在用微信打开网页,这可能会降低体验或导致某些功能无法使用,请尽量用浏览器打开 www.ncuos.com') // eslint-disable-line | |
return true | |
} | |
} | |
export default { | |
tokenOperate, | |
ajax, | |
q, | |
qa, | |
// fetch, | |
alertBox, | |
getCodeList, | |
autoChangeTitle, | |
datepickerInit, | |
weixinDrag | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment